aboutsummaryrefslogtreecommitdiffstats
path: root/tcc/include
diff options
context:
space:
mode:
authorGravatar Peter McGoron 2023-12-12 11:41:26 -0500
committerGravatar Peter McGoron 2023-12-12 11:41:26 -0500
commitff489bd82ff313bcfd7dc2ab585ed31cec909ebd (patch)
tree300e031693a5ddb990a32068ab0596382349aeea /tcc/include
parentinit (diff)
fix software to compile properly on Windows XP x86
Diffstat (limited to 'tcc/include')
-rw-r--r--tcc/include/_mingw.h170
-rw-r--r--tcc/include/assert.h57
-rw-r--r--tcc/include/conio.h409
-rw-r--r--tcc/include/ctype.h281
-rw-r--r--tcc/include/dir.h31
-rw-r--r--tcc/include/direct.h68
-rw-r--r--tcc/include/dirent.h135
-rw-r--r--tcc/include/dos.h55
-rw-r--r--tcc/include/errno.h75
-rw-r--r--tcc/include/excpt.h123
-rw-r--r--tcc/include/fcntl.h52
-rw-r--r--tcc/include/fenv.h108
-rw-r--r--tcc/include/float.h57
-rw-r--r--tcc/include/inttypes.h297
-rw-r--r--tcc/include/io.h418
-rw-r--r--tcc/include/limits.h111
-rw-r--r--tcc/include/locale.h91
-rw-r--r--tcc/include/malloc.h181
-rw-r--r--tcc/include/math.h737
-rw-r--r--tcc/include/mem.h13
-rw-r--r--tcc/include/memory.h40
-rw-r--r--tcc/include/process.h176
-rw-r--r--tcc/include/sec_api/conio_s.h42
-rw-r--r--tcc/include/sec_api/crtdbg_s.h19
-rw-r--r--tcc/include/sec_api/io_s.h33
-rw-r--r--tcc/include/sec_api/mbstring_s.h52
-rw-r--r--tcc/include/sec_api/search_s.h25
-rw-r--r--tcc/include/sec_api/stdio_s.h145
-rw-r--r--tcc/include/sec_api/stdlib_s.h67
-rw-r--r--tcc/include/sec_api/stralign_s.h30
-rw-r--r--tcc/include/sec_api/string_s.h41
-rw-r--r--tcc/include/sec_api/sys/timeb_s.h34
-rw-r--r--tcc/include/sec_api/tchar_s.h266
-rw-r--r--tcc/include/sec_api/time_s.h61
-rw-r--r--tcc/include/sec_api/wchar_s.h128
-rw-r--r--tcc/include/setjmp.h160
-rw-r--r--tcc/include/share.h28
-rw-r--r--tcc/include/signal.h63
-rw-r--r--tcc/include/stdarg.h79
-rw-r--r--tcc/include/stdbool.h11
-rw-r--r--tcc/include/stddef.h54
-rw-r--r--tcc/include/stdint.h212
-rw-r--r--tcc/include/stdio.h429
-rw-r--r--tcc/include/stdlib.h580
-rw-r--r--tcc/include/string.h164
-rw-r--r--tcc/include/sys/fcntl.h13
-rw-r--r--tcc/include/sys/file.h14
-rw-r--r--tcc/include/sys/locking.h30
-rw-r--r--tcc/include/sys/stat.h290
-rw-r--r--tcc/include/sys/time.h69
-rw-r--r--tcc/include/sys/timeb.h133
-rw-r--r--tcc/include/sys/types.h118
-rw-r--r--tcc/include/sys/unistd.h14
-rw-r--r--tcc/include/sys/utime.h146
-rw-r--r--tcc/include/tcc/tcc_libm.h201
-rw-r--r--tcc/include/tcclib.h80
-rw-r--r--tcc/include/tchar.h1102
-rw-r--r--tcc/include/time.h287
-rw-r--r--tcc/include/vadefs.h11
-rw-r--r--tcc/include/values.h4
-rw-r--r--tcc/include/varargs.h12
-rw-r--r--tcc/include/wchar.h873
-rw-r--r--tcc/include/wctype.h172
-rw-r--r--tcc/include/winapi/GL/gl.h1470
-rw-r--r--tcc/include/winapi/GL/glext.h4623
-rw-r--r--tcc/include/winapi/GL/glu.h289
-rw-r--r--tcc/include/winapi/accctrl.h329
-rw-r--r--tcc/include/winapi/aclapi.h117
-rw-r--r--tcc/include/winapi/aclui.h134
-rw-r--r--tcc/include/winapi/adsprop.h59
-rw-r--r--tcc/include/winapi/afxres.h23
-rw-r--r--tcc/include/winapi/amaudio.h33
-rw-r--r--tcc/include/winapi/amvideo.h179
-rw-r--r--tcc/include/winapi/audevcod.h31
-rw-r--r--tcc/include/winapi/aviriff.h87
-rwxr-xr-xtcc/include/winapi/aygshell.h49
-rw-r--r--tcc/include/winapi/basetsd.h119
-rw-r--r--tcc/include/winapi/basetyps.h182
-rw-r--r--tcc/include/winapi/bdatypes.h32
-rw-r--r--tcc/include/winapi/cderr.h44
-rw-r--r--tcc/include/winapi/cguid.h83
-rw-r--r--tcc/include/winapi/cmnquery.h81
-rw-r--r--tcc/include/winapi/comcat.h175
-rw-r--r--tcc/include/winapi/commctrl.h3756
-rw-r--r--tcc/include/winapi/commdlg.h609
-rw-r--r--tcc/include/winapi/control.h18
-rw-r--r--tcc/include/winapi/cpl.h61
-rw-r--r--tcc/include/winapi/cplext.h12
-rw-r--r--tcc/include/winapi/custcntl.h102
-rw-r--r--tcc/include/winapi/dbt.h154
-rw-r--r--tcc/include/winapi/dde.h64
-rw-r--r--tcc/include/winapi/ddeml.h314
-rw-r--r--tcc/include/winapi/ddk/atm.h507
-rw-r--r--tcc/include/winapi/ddk/batclass.h298
-rw-r--r--tcc/include/winapi/ddk/cfg.h139
-rw-r--r--tcc/include/winapi/ddk/cfgmgr32.h1533
-rw-r--r--tcc/include/winapi/ddk/d4drvif.h104
-rw-r--r--tcc/include/winapi/ddk/d4iface.h84
-rw-r--r--tcc/include/winapi/ddk/ddkmapi.h334
-rw-r--r--tcc/include/winapi/ddk/hidclass.h153
-rw-r--r--tcc/include/winapi/ddk/hidpi.h604
-rwxr-xr-xtcc/include/winapi/ddk/hidsdi.h73
-rw-r--r--tcc/include/winapi/ddk/hidusage.h210
-rw-r--r--tcc/include/winapi/ddk/kbdmou.h91
-rw-r--r--tcc/include/winapi/ddk/mcd.h143
-rw-r--r--tcc/include/winapi/ddk/miniport.h77
-rw-r--r--tcc/include/winapi/ddk/minitape.h223
-rw-r--r--tcc/include/winapi/ddk/mountdev.h79
-rw-r--r--tcc/include/winapi/ddk/mountmgr.h139
-rw-r--r--tcc/include/winapi/ddk/ndis.h5317
-rw-r--r--tcc/include/winapi/ddk/ndisguid.h439
-rw-r--r--tcc/include/winapi/ddk/ndistapi.h1308
-rw-r--r--tcc/include/winapi/ddk/ndiswan.h251
-rw-r--r--tcc/include/winapi/ddk/netevent.h42
-rw-r--r--tcc/include/winapi/ddk/netpnp.h69
-rw-r--r--tcc/include/winapi/ddk/newdev.h66
-rw-r--r--tcc/include/winapi/ddk/ntapi.h4073
-rw-r--r--tcc/include/winapi/ddk/ntdd8042.h213
-rw-r--r--tcc/include/winapi/ddk/ntddbeep.h54
-rw-r--r--tcc/include/winapi/ddk/ntddcdrm.h347
-rw-r--r--tcc/include/winapi/ddk/ntddcdvd.h213
-rw-r--r--tcc/include/winapi/ddk/ntddchgr.h353
-rw-r--r--tcc/include/winapi/ddk/ntdddisk.h521
-rw-r--r--tcc/include/winapi/ddk/ntddk.h91
-rw-r--r--tcc/include/winapi/ddk/ntddkbd.h135
-rw-r--r--tcc/include/winapi/ddk/ntddmou.h115
-rw-r--r--tcc/include/winapi/ddk/ntddndis.h188
-rw-r--r--tcc/include/winapi/ddk/ntddpar.h119
-rw-r--r--tcc/include/winapi/ddk/ntddpcm.h165
-rw-r--r--tcc/include/winapi/ddk/ntddscsi.h171
-rw-r--r--tcc/include/winapi/ddk/ntddser.h449
-rw-r--r--tcc/include/winapi/ddk/ntddstor.h333
-rw-r--r--tcc/include/winapi/ddk/ntddtape.h79
-rw-r--r--tcc/include/winapi/ddk/ntddtdi.h61
-rw-r--r--tcc/include/winapi/ddk/ntddvdeo.h440
-rw-r--r--tcc/include/winapi/ddk/ntddvol.h141
-rw-r--r--tcc/include/winapi/ddk/ntifs.h5359
-rw-r--r--tcc/include/winapi/ddk/ntpoapi.h229
-rw-r--r--tcc/include/winapi/ddk/ntstatus.h1105
-rw-r--r--tcc/include/winapi/ddk/parallel.h277
-rw-r--r--tcc/include/winapi/ddk/pfhook.h76
-rw-r--r--tcc/include/winapi/ddk/poclass.h118
-rw-r--r--tcc/include/winapi/ddk/scsi.h1701
-rw-r--r--tcc/include/winapi/ddk/scsiscan.h130
-rw-r--r--tcc/include/winapi/ddk/scsiwmi.h215
-rw-r--r--tcc/include/winapi/ddk/smbus.h190
-rw-r--r--tcc/include/winapi/ddk/srb.h753
-rw-r--r--tcc/include/winapi/ddk/storport.h422
-rw-r--r--tcc/include/winapi/ddk/tdi.h593
-rw-r--r--tcc/include/winapi/ddk/tdiinfo.h110
-rw-r--r--tcc/include/winapi/ddk/tdikrnl.h1162
-rw-r--r--tcc/include/winapi/ddk/tdistat.h83
-rw-r--r--tcc/include/winapi/ddk/tvout.h116
-rw-r--r--tcc/include/winapi/ddk/upssvc.h94
-rw-r--r--tcc/include/winapi/ddk/usb.h471
-rw-r--r--tcc/include/winapi/ddk/usb100.h237
-rw-r--r--tcc/include/winapi/ddk/usbcamdi.h404
-rw-r--r--tcc/include/winapi/ddk/usbdi.h407
-rw-r--r--tcc/include/winapi/ddk/usbioctl.h353
-rw-r--r--tcc/include/winapi/ddk/usbiodef.h106
-rw-r--r--tcc/include/winapi/ddk/usbscan.h158
-rw-r--r--tcc/include/winapi/ddk/usbuser.h328
-rw-r--r--tcc/include/winapi/ddk/video.h1566
-rw-r--r--tcc/include/winapi/ddk/videoagp.h129
-rw-r--r--tcc/include/winapi/ddk/win2k.h106
-rw-r--r--tcc/include/winapi/ddk/winddi.h4258
-rw-r--r--tcc/include/winapi/ddk/winddk.h9452
-rw-r--r--tcc/include/winapi/ddk/winnt4.h623
-rw-r--r--tcc/include/winapi/ddk/winxp.h38
-rw-r--r--tcc/include/winapi/ddk/ws2san.h248
-rw-r--r--tcc/include/winapi/ddk/xfilter.h239
-rw-r--r--tcc/include/winapi/devguid.h65
-rw-r--r--tcc/include/winapi/dhcpcsdk.h42
-rw-r--r--tcc/include/winapi/directx/d3d9.h1288
-rw-r--r--tcc/include/winapi/directx/d3d9caps.h338
-rw-r--r--tcc/include/winapi/directx/d3d9types.h1272
-rw-r--r--tcc/include/winapi/directx/dxerr8.h53
-rw-r--r--tcc/include/winapi/directx/dxerr9.h53
-rw-r--r--tcc/include/winapi/dlgs.h186
-rw-r--r--tcc/include/winapi/docobj.h147
-rw-r--r--tcc/include/winapi/dsadmin.h38
-rw-r--r--tcc/include/winapi/dsclient.h186
-rw-r--r--tcc/include/winapi/dsgetdc.h121
-rw-r--r--tcc/include/winapi/dshow.h108
-rw-r--r--tcc/include/winapi/dsquery.h72
-rw-r--r--tcc/include/winapi/dsrole.h75
-rw-r--r--tcc/include/winapi/dvdevcod.h76
-rw-r--r--tcc/include/winapi/dvdmedia.h101
-rw-r--r--tcc/include/winapi/edevdefs.h346
-rw-r--r--tcc/include/winapi/errorrep.h40
-rw-r--r--tcc/include/winapi/errors.h169
-rw-r--r--tcc/include/winapi/evcode.h68
-rw-r--r--tcc/include/winapi/exdisp.h225
-rw-r--r--tcc/include/winapi/exdispid.h14
-rw-r--r--tcc/include/winapi/fltdefs.h50
-rw-r--r--tcc/include/winapi/guiddef.h156
-rw-r--r--tcc/include/winapi/httpext.h98
-rwxr-xr-xtcc/include/winapi/icm.h399
-rw-r--r--tcc/include/winapi/idispids.h10
-rw-r--r--tcc/include/winapi/il21dec.h35
-rw-r--r--tcc/include/winapi/imagehlp.h329
-rw-r--r--tcc/include/winapi/imm.h452
-rw-r--r--tcc/include/winapi/initguid.h12
-rw-r--r--tcc/include/winapi/intshcut.h82
-rw-r--r--tcc/include/winapi/ipexport.h88
-rw-r--r--tcc/include/winapi/iphlpapi.h77
-rw-r--r--tcc/include/winapi/ipifcons.h199
-rw-r--r--tcc/include/winapi/ipinfoid.h43
-rw-r--r--tcc/include/winapi/iprtrmib.h246
-rw-r--r--tcc/include/winapi/iptypes.h229
-rw-r--r--tcc/include/winapi/ipxconst.h36
-rw-r--r--tcc/include/winapi/ipxrtdef.h58
-rw-r--r--tcc/include/winapi/ipxtfflt.h38
-rw-r--r--tcc/include/winapi/isguids.h15
-rw-r--r--tcc/include/winapi/ks.h20
-rw-r--r--tcc/include/winapi/ksmedia.h23
-rw-r--r--tcc/include/winapi/largeint.h112
-rw-r--r--tcc/include/winapi/lm.h27
-rw-r--r--tcc/include/winapi/lmaccess.h654
-rw-r--r--tcc/include/winapi/lmalert.h60
-rw-r--r--tcc/include/winapi/lmapibuf.h18
-rw-r--r--tcc/include/winapi/lmat.h39
-rw-r--r--tcc/include/winapi/lmaudit.h250
-rw-r--r--tcc/include/winapi/lmbrowsr.h74
-rw-r--r--tcc/include/winapi/lmchdev.h61
-rw-r--r--tcc/include/winapi/lmconfig.h21
-rw-r--r--tcc/include/winapi/lmcons.h75
-rw-r--r--tcc/include/winapi/lmerr.h306
-rw-r--r--tcc/include/winapi/lmerrlog.h211
-rw-r--r--tcc/include/winapi/lmmsg.h27
-rw-r--r--tcc/include/winapi/lmremutl.h45
-rw-r--r--tcc/include/winapi/lmrepl.h94
-rw-r--r--tcc/include/winapi/lmserver.h606
-rw-r--r--tcc/include/winapi/lmshare.h147
-rw-r--r--tcc/include/winapi/lmsname.h58
-rw-r--r--tcc/include/winapi/lmstats.h114
-rw-r--r--tcc/include/winapi/lmsvc.h134
-rw-r--r--tcc/include/winapi/lmuse.h60
-rw-r--r--tcc/include/winapi/lmuseflg.h10
-rw-r--r--tcc/include/winapi/lmwksta.h233
-rw-r--r--tcc/include/winapi/lzexpand.h40
-rw-r--r--tcc/include/winapi/mapi.h163
-rw-r--r--tcc/include/winapi/mciavi.h25
-rw-r--r--tcc/include/winapi/mcx.h77
-rw-r--r--tcc/include/winapi/mgm.h75
-rw-r--r--tcc/include/winapi/mgmtapi.h58
-rwxr-xr-xtcc/include/winapi/mlang.h349
-rw-r--r--tcc/include/winapi/mmreg.h71
-rw-r--r--tcc/include/winapi/mmsystem.h1943
-rw-r--r--tcc/include/winapi/mpegtype.h29
-rw-r--r--tcc/include/winapi/mprapi.h576
-rw-r--r--tcc/include/winapi/mq.h534
-rw-r--r--tcc/include/winapi/msacm.h186
-rw-r--r--tcc/include/winapi/mshtml.h704
-rw-r--r--tcc/include/winapi/mswsock.h113
-rw-r--r--tcc/include/winapi/nb30.h186
-rw-r--r--tcc/include/winapi/nddeapi.h133
-rw-r--r--tcc/include/winapi/nspapi.h126
-rw-r--r--tcc/include/winapi/ntdef.h60
-rw-r--r--tcc/include/winapi/ntdll.h15
-rw-r--r--tcc/include/winapi/ntdsapi.h115
-rw-r--r--tcc/include/winapi/ntdsbcli.h45
-rw-r--r--tcc/include/winapi/ntldap.h60
-rw-r--r--tcc/include/winapi/ntsecapi.h612
-rw-r--r--tcc/include/winapi/ntsecpkg.h431
-rw-r--r--tcc/include/winapi/oaidl.h778
-rw-r--r--tcc/include/winapi/objbase.h203
-rw-r--r--tcc/include/winapi/objfwd.h57
-rw-r--r--tcc/include/winapi/objidl.h1771
-rw-r--r--tcc/include/winapi/objsafe.h26
-rw-r--r--tcc/include/winapi/objsel.h118
-rw-r--r--tcc/include/winapi/ocidl.h837
-rw-r--r--tcc/include/winapi/odbcinst.h148
-rw-r--r--tcc/include/winapi/ole.h308
-rw-r--r--tcc/include/winapi/ole2.h110
-rw-r--r--tcc/include/winapi/ole2ver.h8
-rw-r--r--tcc/include/winapi/oleacc.h219
-rw-r--r--tcc/include/winapi/oleauto.h656
-rw-r--r--tcc/include/winapi/olectl.h323
-rw-r--r--tcc/include/winapi/olectlid.h114
-rw-r--r--tcc/include/winapi/oledlg.h935
-rw-r--r--tcc/include/winapi/oleidl.h575
-rw-r--r--tcc/include/winapi/pbt.h24
-rw-r--r--tcc/include/winapi/poppack.h3
-rw-r--r--tcc/include/winapi/powrprof.h120
-rw-r--r--tcc/include/winapi/prsht.h304
-rw-r--r--tcc/include/winapi/psapi.h105
-rw-r--r--tcc/include/winapi/pshpack1.h3
-rw-r--r--tcc/include/winapi/pshpack2.h3
-rw-r--r--tcc/include/winapi/pshpack4.h3
-rw-r--r--tcc/include/winapi/pshpack8.h3
-rw-r--r--tcc/include/winapi/qedit.h70
-rw-r--r--tcc/include/winapi/rapi.h54
-rw-r--r--tcc/include/winapi/ras.h997
-rw-r--r--tcc/include/winapi/rasdlg.h152
-rw-r--r--tcc/include/winapi/raserror.h210
-rw-r--r--tcc/include/winapi/rassapi.h182
-rw-r--r--tcc/include/winapi/reason.h47
-rw-r--r--tcc/include/winapi/regstr.h769
-rw-r--r--tcc/include/winapi/richedit.h523
-rw-r--r--tcc/include/winapi/richole.h107
-rw-r--r--tcc/include/winapi/routprot.h70
-rw-r--r--tcc/include/winapi/rpc.h65
-rw-r--r--tcc/include/winapi/rpcdce.h396
-rw-r--r--tcc/include/winapi/rpcdce2.h56
-rw-r--r--tcc/include/winapi/rpcdcep.h129
-rw-r--r--tcc/include/winapi/rpcndr.h518
-rw-r--r--tcc/include/winapi/rpcnsi.h122
-rw-r--r--tcc/include/winapi/rpcnsip.h25
-rw-r--r--tcc/include/winapi/rpcnterr.h23
-rw-r--r--tcc/include/winapi/rpcproxy.h204
-rw-r--r--tcc/include/winapi/rtutils.h90
-rw-r--r--tcc/include/winapi/schannel.h90
-rw-r--r--tcc/include/winapi/schnlsp.h14
-rw-r--r--tcc/include/winapi/scrnsave.h81
-rwxr-xr-xtcc/include/winapi/sddl.h34
-rw-r--r--tcc/include/winapi/secext.h52
-rw-r--r--tcc/include/winapi/security.h42
-rw-r--r--tcc/include/winapi/servprov.h33
-rw-r--r--tcc/include/winapi/setupapi.h1590
-rw-r--r--tcc/include/winapi/shellapi.h376
-rwxr-xr-xtcc/include/winapi/shldisp.h61
-rw-r--r--tcc/include/winapi/shlguid.h102
-rw-r--r--tcc/include/winapi/shlobj.h1557
-rw-r--r--tcc/include/winapi/shlwapi.h736
-rw-r--r--tcc/include/winapi/snmp.h259
-rw-r--r--tcc/include/winapi/specstrings.h130
-rw-r--r--tcc/include/winapi/sql.h408
-rw-r--r--tcc/include/winapi/sqlext.h1218
-rw-r--r--tcc/include/winapi/sqltypes.h165
-rw-r--r--tcc/include/winapi/sqlucode.h142
-rw-r--r--tcc/include/winapi/sspi.h345
-rw-r--r--tcc/include/winapi/stm.h25
-rw-r--r--tcc/include/winapi/strmif.h1159
-rw-r--r--tcc/include/winapi/subauth.h209
-rw-r--r--tcc/include/winapi/svcguid.h33
-rw-r--r--tcc/include/winapi/tlhelp32.h140
-rw-r--r--tcc/include/winapi/tmschema.h664
-rw-r--r--tcc/include/winapi/unknwn.h76
-rw-r--r--tcc/include/winapi/userenv.h57
-rwxr-xr-xtcc/include/winapi/usp10.h229
-rw-r--r--tcc/include/winapi/uxtheme.h273
-rw-r--r--tcc/include/winapi/vfw.h1370
-rw-r--r--tcc/include/winapi/vidcap.h23
-rw-r--r--tcc/include/winapi/vmr9.h211
-rw-r--r--tcc/include/winapi/vptype.h55
-rw-r--r--tcc/include/winapi/w32api.h52
-rw-r--r--tcc/include/winapi/winable.h99
-rw-r--r--tcc/include/winapi/winbase.h2467
-rw-r--r--tcc/include/winapi/winber.h67
-rw-r--r--tcc/include/winapi/wincon.h232
-rw-r--r--tcc/include/winapi/wincrypt.h1318
-rw-r--r--tcc/include/winapi/windef.h337
-rw-r--r--tcc/include/winapi/windns.h405
-rw-r--r--tcc/include/winapi/windows.h131
-rw-r--r--tcc/include/winapi/windowsx.h544
-rw-r--r--tcc/include/winapi/winerror.h2283
-rw-r--r--tcc/include/winapi/wingdi.h3235
-rw-r--r--tcc/include/winapi/wininet.h992
-rw-r--r--tcc/include/winapi/winioctl.h555
-rw-r--r--tcc/include/winapi/winldap.h713
-rw-r--r--tcc/include/winapi/winnetwk.h350
-rw-r--r--tcc/include/winapi/winnls.h737
-rw-r--r--tcc/include/winapi/winnt.h4026
-rw-r--r--tcc/include/winapi/winperf.h139
-rw-r--r--tcc/include/winapi/winreg.h175
-rw-r--r--tcc/include/winapi/winresrc.h14
-rw-r--r--tcc/include/winapi/winsnmp.h329
-rw-r--r--tcc/include/winapi/winsock.h536
-rw-r--r--tcc/include/winapi/winsock2.h1303
-rw-r--r--tcc/include/winapi/winspool.h982
-rw-r--r--tcc/include/winapi/winsvc.h313
-rw-r--r--tcc/include/winapi/winuser.h4506
-rw-r--r--tcc/include/winapi/winver.h133
-rw-r--r--tcc/include/winapi/ws2spi.h202
-rw-r--r--tcc/include/winapi/ws2tcpip.h379
-rw-r--r--tcc/include/winapi/wsahelp.h98
-rw-r--r--tcc/include/winapi/wsipx.h28
-rw-r--r--tcc/include/winapi/wsnetbs.h35
-rw-r--r--tcc/include/winapi/wtsapi32.h145
-rw-r--r--tcc/include/winapi/wtypes.h171
-rw-r--r--tcc/include/winapi/xprtdefs.h11
-rw-r--r--tcc/include/winapi/zmouse.h36
383 files changed, 146146 insertions, 0 deletions
diff --git a/tcc/include/_mingw.h b/tcc/include/_mingw.h
new file mode 100644
index 0000000..2fc9798
--- /dev/null
+++ b/tcc/include/_mingw.h
@@ -0,0 +1,170 @@
+/*
+ * _mingw.h
+ *
+ * This file is for TinyCC and not part of the Mingw32 package.
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __MINGW_H
+#define __MINGW_H
+
+/* some winapi files define these before including _mingw.h --> */
+#undef __cdecl
+#undef _X86_
+#undef WIN32
+/* <-- */
+
+#include <stddef.h>
+#include <stdarg.h>
+
+#define __int8 char
+#define __int16 short
+#define __int32 int
+#define __int64 long long
+#define _HAVE_INT64
+
+#define __cdecl
+#define __declspec(x) __attribute__((x))
+#define __unaligned __attribute__((packed))
+#define __fastcall __attribute__((fastcall))
+
+#define __MSVCRT__ 1
+#undef _MSVCRT_
+#define __MINGW_IMPORT extern __declspec(dllimport)
+#define __MINGW_ATTRIB_NORETURN
+#define __MINGW_ATTRIB_CONST
+#define __MINGW_ATTRIB_DEPRECATED
+#define __MINGW_ATTRIB_MALLOC
+#define __MINGW_ATTRIB_PURE
+#define __MINGW_ATTRIB_NONNULL(arg)
+#define __MINGW_NOTHROW
+#define __GNUC_VA_LIST
+
+#define _CRTIMP extern
+#define __CRT_INLINE extern __inline__
+
+#define _CRT_ALIGN(x) __attribute__((aligned(x)))
+#define DECLSPEC_ALIGN(x) __attribute__((aligned(x)))
+#define _CRT_PACKING 8
+#define __CRT_UNALIGNED
+#define _CONST_RETURN
+
+#ifndef _TRUNCATE
+#define _TRUNCATE ((size_t)-1)
+#endif
+
+#define __CRT_STRINGIZE(_Value) #_Value
+#define _CRT_STRINGIZE(_Value) __CRT_STRINGIZE(_Value)
+#define __CRT_WIDE(_String) L ## _String
+#define _CRT_WIDE(_String) __CRT_WIDE(_String)
+
+#ifdef _WIN64
+#define __stdcall
+#define _AMD64_ 1
+#define __x86_64 1
+#define _M_X64 100 /* Visual Studio */
+#define _M_AMD64 100 /* Visual Studio */
+#define USE_MINGW_SETJMP_TWO_ARGS
+#define mingw_getsp tinyc_getbp
+#define __TRY__
+#else
+#define __stdcall __attribute__((__stdcall__))
+#define _X86_ 1
+#define _M_IX86 300 /* Visual Studio */
+#define WIN32 1
+#define _USE_32BIT_TIME_T
+#ifdef __arm__
+#define __TRY__
+#else
+#define __TRY__ void __try__(void**), *_sehrec[6]; __try__(_sehrec);
+#endif
+#endif
+
+/* in stddef.h */
+#define _SIZE_T_DEFINED
+#define _SSIZE_T_DEFINED
+#define _PTRDIFF_T_DEFINED
+#define _WCHAR_T_DEFINED
+#define _UINTPTR_T_DEFINED
+#define _INTPTR_T_DEFINED
+#define _INTEGRAL_MAX_BITS 64
+
+#ifndef _TIME32_T_DEFINED
+#define _TIME32_T_DEFINED
+typedef long __time32_t;
+#endif
+
+#ifndef _TIME64_T_DEFINED
+#define _TIME64_T_DEFINED
+typedef long long __time64_t;
+#endif
+
+#ifndef _TIME_T_DEFINED
+#define _TIME_T_DEFINED
+#ifdef _USE_32BIT_TIME_T
+typedef __time32_t time_t;
+#else
+typedef __time64_t time_t;
+#endif
+#endif
+
+#ifndef _WCTYPE_T_DEFINED
+#define _WCTYPE_T_DEFINED
+typedef wchar_t wctype_t;
+#endif
+
+#ifndef _WINT_T
+#define _WINT_T
+typedef __WINT_TYPE__ wint_t;
+#endif
+
+typedef int errno_t;
+#define _ERRCODE_DEFINED
+
+typedef struct threadlocaleinfostruct *pthreadlocinfo;
+typedef struct threadmbcinfostruct *pthreadmbcinfo;
+typedef struct localeinfo_struct _locale_tstruct,*_locale_t;
+
+/* for winapi */
+#define _ANONYMOUS_UNION
+#define _ANONYMOUS_STRUCT
+#define DECLSPEC_NORETURN
+#define DECLARE_STDCALL_P(type) __stdcall type
+#define NOSERVICE 1
+#define NOMCX 1
+#define NOIME 1
+#define __INTRIN_H_
+#ifndef DUMMYUNIONNAME
+# define DUMMYUNIONNAME
+# define DUMMYUNIONNAME1
+# define DUMMYUNIONNAME2
+# define DUMMYUNIONNAME3
+# define DUMMYUNIONNAME4
+# define DUMMYUNIONNAME5
+#endif
+#ifndef DUMMYSTRUCTNAME
+# define DUMMYSTRUCTNAME
+#endif
+#ifndef WINVER
+# define WINVER 0x0502
+#endif
+#ifndef _WIN32_WINNT
+# define _WIN32_WINNT 0x502
+#endif
+
+#define __C89_NAMELESS
+#define __MINGW_EXTENSION
+#define WINAPI_FAMILY_PARTITION(X) 1
+#define MINGW_HAS_SECURE_API
+
+#endif /* __MINGW_H */
diff --git a/tcc/include/assert.h b/tcc/include/assert.h
new file mode 100644
index 0000000..466d457
--- /dev/null
+++ b/tcc/include/assert.h
@@ -0,0 +1,57 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+#ifndef __ASSERT_H_
+#define __ASSERT_H_
+
+#include <_mingw.h>
+#ifdef __cplusplus
+#include <stdlib.h>
+#endif
+
+#ifdef NDEBUG
+#ifndef assert
+#define assert(_Expression) ((void)0)
+#endif
+#else
+
+#ifndef _CRT_TERMINATE_DEFINED
+#define _CRT_TERMINATE_DEFINED
+ void __cdecl __MINGW_NOTHROW exit(int _Code) __MINGW_ATTRIB_NORETURN;
+ _CRTIMP void __cdecl __MINGW_NOTHROW _exit(int _Code) __MINGW_ATTRIB_NORETURN;
+#if !defined __NO_ISOCEXT /* extern stub in static libmingwex.a */
+/* C99 function name */
+void __cdecl _Exit(int) __MINGW_ATTRIB_NORETURN;
+__CRT_INLINE __MINGW_ATTRIB_NORETURN void __cdecl _Exit(int status)
+{ _exit(status); }
+#endif
+
+#pragma push_macro("abort")
+#undef abort
+ void __cdecl __declspec(noreturn) abort(void);
+#pragma pop_macro("abort")
+
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+extern void __cdecl _wassert(const wchar_t *_Message,const wchar_t *_File,unsigned _Line);
+extern void __cdecl _assert(const char *, const char *, unsigned);
+
+#ifdef __cplusplus
+}
+#endif
+
+#ifndef assert
+//#define assert(_Expression) (void)((!!(_Expression)) || (_wassert(_CRT_WIDE(#_Expression),_CRT_WIDE(__FILE__),__LINE__),0))
+#define assert(e) ((e) ? (void)0 : _assert(#e, __FILE__, __LINE__))
+#endif
+
+#endif
+
+#endif
diff --git a/tcc/include/conio.h b/tcc/include/conio.h
new file mode 100644
index 0000000..39f779e
--- /dev/null
+++ b/tcc/include/conio.h
@@ -0,0 +1,409 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+#ifndef _INC_CONIO
+#define _INC_CONIO
+
+#include <_mingw.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ _CRTIMP char *_cgets(char *_Buffer);
+ _CRTIMP int __cdecl _cprintf(const char *_Format,...);
+ _CRTIMP int __cdecl _cputs(const char *_Str);
+ _CRTIMP int __cdecl _cscanf(const char *_Format,...);
+ _CRTIMP int __cdecl _cscanf_l(const char *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _getch(void);
+ _CRTIMP int __cdecl _getche(void);
+ _CRTIMP int __cdecl _vcprintf(const char *_Format,va_list _ArgList);
+ _CRTIMP int __cdecl _cprintf_p(const char *_Format,...);
+ _CRTIMP int __cdecl _vcprintf_p(const char *_Format,va_list _ArgList);
+ _CRTIMP int __cdecl _cprintf_l(const char *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _vcprintf_l(const char *_Format,_locale_t _Locale,va_list _ArgList);
+ _CRTIMP int __cdecl _cprintf_p_l(const char *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _vcprintf_p_l(const char *_Format,_locale_t _Locale,va_list _ArgList);
+ _CRTIMP int __cdecl _kbhit(void);
+
+#if defined(_X86_) && !defined(__x86_64)
+ int __cdecl _inp(unsigned short);
+ unsigned short __cdecl _inpw(unsigned short);
+ unsigned long __cdecl _inpd(unsigned short);
+ int __cdecl _outp(unsigned short,int);
+ unsigned short __cdecl _outpw(unsigned short,unsigned short);
+ unsigned long __cdecl _outpd(unsigned short,unsigned long);
+#endif
+
+ _CRTIMP int __cdecl _putch(int _Ch);
+ _CRTIMP int __cdecl _ungetch(int _Ch);
+ _CRTIMP int __cdecl _getch_nolock(void);
+ _CRTIMP int __cdecl _getche_nolock(void);
+ _CRTIMP int __cdecl _putch_nolock(int _Ch);
+ _CRTIMP int __cdecl _ungetch_nolock(int _Ch);
+
+#ifndef _WCONIO_DEFINED
+#define _WCONIO_DEFINED
+
+#ifndef WEOF
+#define WEOF (wint_t)(0xFFFF)
+#endif
+
+ _CRTIMP wchar_t *_cgetws(wchar_t *_Buffer);
+ _CRTIMP wint_t __cdecl _getwch(void);
+ _CRTIMP wint_t __cdecl _getwche(void);
+ _CRTIMP wint_t __cdecl _putwch(wchar_t _WCh);
+ _CRTIMP wint_t __cdecl _ungetwch(wint_t _WCh);
+ _CRTIMP int __cdecl _cputws(const wchar_t *_String);
+ _CRTIMP int __cdecl _cwprintf(const wchar_t *_Format,...);
+ _CRTIMP int __cdecl _cwscanf(const wchar_t *_Format,...);
+ _CRTIMP int __cdecl _cwscanf_l(const wchar_t *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _vcwprintf(const wchar_t *_Format,va_list _ArgList);
+ _CRTIMP int __cdecl _cwprintf_p(const wchar_t *_Format,...);
+ _CRTIMP int __cdecl _vcwprintf_p(const wchar_t *_Format,va_list _ArgList);
+ _CRTIMP int __cdecl _cwprintf_l(const wchar_t *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _vcwprintf_l(const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
+ _CRTIMP int __cdecl _cwprintf_p_l(const wchar_t *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _vcwprintf_p_l(const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
+ _CRTIMP wint_t __cdecl _putwch_nolock(wchar_t _WCh);
+ _CRTIMP wint_t __cdecl _getwch_nolock(void);
+ _CRTIMP wint_t __cdecl _getwche_nolock(void);
+ _CRTIMP wint_t __cdecl _ungetwch_nolock(wint_t _WCh);
+#endif
+
+#ifndef NO_OLDNAMES
+ char *__cdecl cgets(char *_Buffer);
+ int __cdecl cprintf(const char *_Format,...);
+ int __cdecl cputs(const char *_Str);
+ int __cdecl cscanf(const char *_Format,...);
+ int __cdecl getch(void);
+ int __cdecl getche(void);
+ int __cdecl kbhit(void);
+ int __cdecl putch(int _Ch);
+ int __cdecl ungetch(int _Ch);
+
+#if (defined(_X86_) && !defined(__x86_64))
+ int __cdecl inp(unsigned short);
+ unsigned short __cdecl inpw(unsigned short);
+ int __cdecl outp(unsigned short,int);
+ unsigned short __cdecl outpw(unsigned short,unsigned short);
+#endif
+
+ /* I/O intrin functions. */
+ __CRT_INLINE unsigned char __inbyte(unsigned short Port)
+ {
+ unsigned char value;
+ __asm__ __volatile__ ("inb %w1,%b0"
+ : "=a" (value)
+ : "Nd" (Port));
+ return value;
+ }
+ __CRT_INLINE unsigned short __inword(unsigned short Port)
+ {
+ unsigned short value;
+ __asm__ __volatile__ ("inw %w1,%w0"
+ : "=a" (value)
+ : "Nd" (Port));
+ return value;
+ }
+ __CRT_INLINE unsigned long __indword(unsigned short Port)
+ {
+ unsigned long value;
+ __asm__ __volatile__ ("inl %w1,%0"
+ : "=a" (value)
+ : "Nd" (Port));
+ return value;
+ }
+ __CRT_INLINE void __outbyte(unsigned short Port,unsigned char Data)
+ {
+ __asm__ __volatile__ ("outb %b0,%w1"
+ :
+ : "a" (Data), "Nd" (Port));
+ }
+ __CRT_INLINE void __outword(unsigned short Port,unsigned short Data)
+ {
+ __asm__ __volatile__ ("outw %w0,%w1"
+ :
+ : "a" (Data), "Nd" (Port));
+ }
+ __CRT_INLINE void __outdword(unsigned short Port,unsigned long Data)
+ {
+ __asm__ __volatile__ ("outl %0,%w1"
+ :
+ : "a" (Data), "Nd" (Port));
+ }
+ __CRT_INLINE void __inbytestring(unsigned short Port,unsigned char *Buffer,unsigned long Count)
+ {
+ __asm__ __volatile__ (
+ "cld ; rep ; insb "
+ : "=D" (Buffer), "=c" (Count)
+ : "d"(Port), "0"(Buffer), "1" (Count)
+ );
+ }
+ __CRT_INLINE void __inwordstring(unsigned short Port,unsigned short *Buffer,unsigned long Count)
+ {
+ __asm__ __volatile__ (
+ "cld ; rep ; insw "
+ : "=D" (Buffer), "=c" (Count)
+ : "d"(Port), "0"(Buffer), "1" (Count)
+ );
+ }
+ __CRT_INLINE void __indwordstring(unsigned short Port,unsigned long *Buffer,unsigned long Count)
+ {
+ __asm__ __volatile__ (
+ "cld ; rep ; insl "
+ : "=D" (Buffer), "=c" (Count)
+ : "d"(Port), "0"(Buffer), "1" (Count)
+ );
+ }
+
+ __CRT_INLINE void __outbytestring(unsigned short Port,unsigned char *Buffer,unsigned long Count)
+ {
+ __asm__ __volatile__ (
+ "cld ; rep ; outsb "
+ : "=S" (Buffer), "=c" (Count)
+ : "d"(Port), "0"(Buffer), "1" (Count)
+ );
+ }
+ __CRT_INLINE void __outwordstring(unsigned short Port,unsigned short *Buffer,unsigned long Count)
+ {
+ __asm__ __volatile__ (
+ "cld ; rep ; outsw "
+ : "=S" (Buffer), "=c" (Count)
+ : "d"(Port), "0"(Buffer), "1" (Count)
+ );
+ }
+ __CRT_INLINE void __outdwordstring(unsigned short Port,unsigned long *Buffer,unsigned long Count)
+ {
+ __asm__ __volatile__ (
+ "cld ; rep ; outsl "
+ : "=S" (Buffer), "=c" (Count)
+ : "d"(Port), "0"(Buffer), "1" (Count)
+ );
+ }
+
+ __CRT_INLINE unsigned __int64 __readcr0(void)
+ {
+ unsigned __int64 value;
+ __asm__ __volatile__ (
+ "mov %%cr0, %[value]"
+ : [value] "=q" (value));
+ return value;
+ }
+
+ /* Register sizes are different between 32/64 bit mode. So we have to do this for _WIN64 and _WIN32
+ separately. */
+
+#ifdef _WIN64
+ __CRT_INLINE void __writecr0(unsigned __int64 Data)
+ {
+ __asm__ __volatile__ (
+ "mov %[Data], %%cr0"
+ :
+ : [Data] "q" (Data)
+ : "memory");
+ }
+
+ __CRT_INLINE unsigned __int64 __readcr2(void)
+ {
+ unsigned __int64 value;
+ __asm__ __volatile__ (
+ "mov %%cr2, %[value]"
+ : [value] "=q" (value));
+ return value;
+ }
+
+ __CRT_INLINE void __writecr2(unsigned __int64 Data)
+ {
+ __asm__ __volatile__ (
+ "mov %[Data], %%cr2"
+ :
+ : [Data] "q" (Data)
+ : "memory");
+ }
+
+ __CRT_INLINE unsigned __int64 __readcr3(void)
+ {
+ unsigned __int64 value;
+ __asm__ __volatile__ (
+ "mov %%cr3, %[value]"
+ : [value] "=q" (value));
+ return value;
+ }
+
+ __CRT_INLINE void __writecr3(unsigned __int64 Data)
+ {
+ __asm__ __volatile__ (
+ "mov %[Data], %%cr3"
+ :
+ : [Data] "q" (Data)
+ : "memory");
+ }
+
+ __CRT_INLINE unsigned __int64 __readcr4(void)
+ {
+ unsigned __int64 value;
+ __asm__ __volatile__ (
+ "mov %%cr4, %[value]"
+ : [value] "=q" (value));
+ return value;
+ }
+
+ __CRT_INLINE void __writecr4(unsigned __int64 Data)
+ {
+ __asm__ __volatile__ (
+ "mov %[Data], %%cr4"
+ :
+ : [Data] "q" (Data)
+ : "memory");
+ }
+
+ __CRT_INLINE unsigned __int64 __readcr8(void)
+ {
+ unsigned __int64 value;
+ __asm__ __volatile__ (
+ "mov %%cr8, %[value]"
+ : [value] "=q" (value));
+ return value;
+ }
+
+ __CRT_INLINE void __writecr8(unsigned __int64 Data)
+ {
+ __asm__ __volatile__ (
+ "mov %[Data], %%cr8"
+ :
+ : [Data] "q" (Data)
+ : "memory");
+ }
+
+#elif defined(_WIN32)
+
+ __CRT_INLINE void __writecr0(unsigned Data)
+ {
+ __asm__ __volatile__ (
+ "mov %[Data], %%cr0"
+ :
+ : [Data] "q" (Data)
+ : "memory");
+ }
+
+ __CRT_INLINE unsigned long __readcr2(void)
+ {
+ unsigned long value;
+ __asm__ __volatile__ (
+ "mov %%cr2, %[value]"
+ : [value] "=q" (value));
+ return value;
+ }
+
+ __CRT_INLINE void __writecr2(unsigned Data)
+ {
+ __asm__ __volatile__ (
+ "mov %[Data], %%cr2"
+ :
+ : [Data] "q" (Data)
+ : "memory");
+ }
+
+ __CRT_INLINE unsigned long __readcr3(void)
+ {
+ unsigned long value;
+ __asm__ __volatile__ (
+ "mov %%cr3, %[value]"
+ : [value] "=q" (value));
+ return value;
+ }
+
+ __CRT_INLINE void __writecr3(unsigned Data)
+ {
+ __asm__ __volatile__ (
+ "mov %[Data], %%cr3"
+ :
+ : [Data] "q" (Data)
+ : "memory");
+ }
+
+ __CRT_INLINE unsigned long __readcr4(void)
+ {
+ unsigned long value;
+ __asm__ __volatile__ (
+ "mov %%cr4, %[value]"
+ : [value] "=q" (value));
+ return value;
+ }
+
+ __CRT_INLINE void __writecr4(unsigned Data)
+ {
+ __asm__ __volatile__ (
+ "mov %[Data], %%cr4"
+ :
+ : [Data] "q" (Data)
+ : "memory");
+ }
+
+ __CRT_INLINE unsigned long __readcr8(void)
+ {
+ unsigned long value; __asm__ __volatile__ (
+ "mov %%cr8, %[value]"
+ : [value] "=q" (value));
+ return value;
+ }
+
+ __CRT_INLINE void __writecr8(unsigned Data)
+ {
+ __asm__ __volatile__ (
+ "mov %[Data], %%cr8"
+ :
+ : [Data] "q" (Data)
+ : "memory");
+ }
+
+#endif
+
+ __CRT_INLINE unsigned __int64 __readmsr(unsigned long msr)
+ {
+ unsigned __int64 val1, val2;
+ __asm__ __volatile__(
+ "rdmsr"
+ : "=a" (val1), "=d" (val2)
+ : "c" (msr));
+ return val1 | (val2 << 32);
+ }
+
+ __CRT_INLINE void __writemsr (unsigned long msr, unsigned __int64 Value)
+ {
+ unsigned long val1 = Value, val2 = Value >> 32;
+ __asm__ __volatile__ (
+ "wrmsr"
+ :
+ : "c" (msr), "a" (val1), "d" (val2));
+ }
+
+ __CRT_INLINE unsigned __int64 __rdtsc(void)
+ {
+ unsigned __int64 val1, val2;
+ __asm__ __volatile__ (
+ "rdtsc"
+ : "=a" (val1), "=d" (val2));
+ return val1 | (val2 << 32);
+ }
+
+ __CRT_INLINE void __cpuid(int CPUInfo[4], int InfoType)
+ {
+ __asm__ __volatile__ (
+ "cpuid"
+ : "=a" (CPUInfo [0]), "=b" (CPUInfo [1]), "=c" (CPUInfo [2]), "=d" (CPUInfo [3])
+ : "a" (InfoType));
+ }
+
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#include <sec_api/conio_s.h>
+
+#endif
diff --git a/tcc/include/ctype.h b/tcc/include/ctype.h
new file mode 100644
index 0000000..7e90100
--- /dev/null
+++ b/tcc/include/ctype.h
@@ -0,0 +1,281 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+#ifndef _INC_CTYPE
+#define _INC_CTYPE
+
+#include <_mingw.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef WEOF
+#define WEOF (wint_t)(0xFFFF)
+#endif
+
+#ifndef _CRT_CTYPEDATA_DEFINED
+#define _CRT_CTYPEDATA_DEFINED
+#ifndef _CTYPE_DISABLE_MACROS
+
+#ifndef __PCTYPE_FUNC
+#define __PCTYPE_FUNC __pctype_func()
+#ifdef _MSVCRT_
+#define __pctype_func() (_pctype)
+#else
+#define __pctype_func() (*_imp___pctype)
+#endif
+#endif
+
+#ifndef _pctype
+#ifdef _MSVCRT_
+ extern unsigned short *_pctype;
+#else
+ extern unsigned short **_imp___pctype;
+#define _pctype (*_imp___pctype)
+#endif
+#endif
+
+#endif
+#endif
+
+#ifndef _CRT_WCTYPEDATA_DEFINED
+#define _CRT_WCTYPEDATA_DEFINED
+#ifndef _CTYPE_DISABLE_MACROS
+#ifndef _wctype
+#ifdef _MSVCRT_
+ extern unsigned short *_wctype;
+#else
+ extern unsigned short **_imp___wctype;
+#define _wctype (*_imp___wctype)
+#endif
+#endif
+#ifdef _MSVCRT_
+#define __pwctype_func() (_pwctype)
+#ifndef _pwctype
+ extern unsigned short *_pwctype;
+#endif
+#else
+#define __pwctype_func() (*_imp___pwctype)
+#ifndef _pwctype
+ extern unsigned short **_imp___pwctype;
+#define _pwctype (*_imp___pwctype)
+#endif
+#endif
+#endif
+#endif
+
+ /* CRT stuff */
+#if 1
+ extern const unsigned char __newclmap[];
+ extern const unsigned char __newcumap[];
+ extern pthreadlocinfo __ptlocinfo;
+ extern pthreadmbcinfo __ptmbcinfo;
+ extern int __globallocalestatus;
+ extern int __locale_changed;
+ extern struct threadlocaleinfostruct __initiallocinfo;
+ extern _locale_tstruct __initiallocalestructinfo;
+ pthreadlocinfo __cdecl __updatetlocinfo(void);
+ pthreadmbcinfo __cdecl __updatetmbcinfo(void);
+#endif
+
+#define _UPPER 0x1
+#define _LOWER 0x2
+#define _DIGIT 0x4
+#define _SPACE 0x8
+
+#define _PUNCT 0x10
+#define _CONTROL 0x20
+#define _BLANK 0x40
+#define _HEX 0x80
+
+#define _LEADBYTE 0x8000
+#define _ALPHA (0x0100|_UPPER|_LOWER)
+
+#ifndef _CTYPE_DEFINED
+#define _CTYPE_DEFINED
+
+ _CRTIMP int __cdecl _isctype(int _C,int _Type);
+ _CRTIMP int __cdecl _isctype_l(int _C,int _Type,_locale_t _Locale);
+ _CRTIMP int __cdecl isalpha(int _C);
+ _CRTIMP int __cdecl _isalpha_l(int _C,_locale_t _Locale);
+ _CRTIMP int __cdecl isupper(int _C);
+ _CRTIMP int __cdecl _isupper_l(int _C,_locale_t _Locale);
+ _CRTIMP int __cdecl islower(int _C);
+ _CRTIMP int __cdecl _islower_l(int _C,_locale_t _Locale);
+ _CRTIMP int __cdecl isdigit(int _C);
+ _CRTIMP int __cdecl _isdigit_l(int _C,_locale_t _Locale);
+ _CRTIMP int __cdecl isxdigit(int _C);
+ _CRTIMP int __cdecl _isxdigit_l(int _C,_locale_t _Locale);
+ _CRTIMP int __cdecl isspace(int _C);
+ _CRTIMP int __cdecl _isspace_l(int _C,_locale_t _Locale);
+ _CRTIMP int __cdecl ispunct(int _C);
+ _CRTIMP int __cdecl _ispunct_l(int _C,_locale_t _Locale);
+ _CRTIMP int __cdecl isalnum(int _C);
+ _CRTIMP int __cdecl _isalnum_l(int _C,_locale_t _Locale);
+ _CRTIMP int __cdecl isprint(int _C);
+ _CRTIMP int __cdecl _isprint_l(int _C,_locale_t _Locale);
+ _CRTIMP int __cdecl isgraph(int _C);
+ _CRTIMP int __cdecl _isgraph_l(int _C,_locale_t _Locale);
+ _CRTIMP int __cdecl iscntrl(int _C);
+ _CRTIMP int __cdecl _iscntrl_l(int _C,_locale_t _Locale);
+ _CRTIMP int __cdecl toupper(int _C);
+ _CRTIMP int __cdecl tolower(int _C);
+ _CRTIMP int __cdecl _tolower(int _C);
+ _CRTIMP int __cdecl _tolower_l(int _C,_locale_t _Locale);
+ _CRTIMP int __cdecl _toupper(int _C);
+ _CRTIMP int __cdecl _toupper_l(int _C,_locale_t _Locale);
+ _CRTIMP int __cdecl __isascii(int _C);
+ _CRTIMP int __cdecl __toascii(int _C);
+ _CRTIMP int __cdecl __iscsymf(int _C);
+ _CRTIMP int __cdecl __iscsym(int _C);
+
+#if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || !defined (NO_OLDNAMES)
+int __cdecl isblank(int _C);
+#endif
+#endif
+
+#ifndef _WCTYPE_DEFINED
+#define _WCTYPE_DEFINED
+
+ int __cdecl iswalpha(wint_t _C);
+ _CRTIMP int __cdecl _iswalpha_l(wint_t _C,_locale_t _Locale);
+ int __cdecl iswupper(wint_t _C);
+ _CRTIMP int __cdecl _iswupper_l(wint_t _C,_locale_t _Locale);
+ int __cdecl iswlower(wint_t _C);
+ _CRTIMP int __cdecl _iswlower_l(wint_t _C,_locale_t _Locale);
+ int __cdecl iswdigit(wint_t _C);
+ _CRTIMP int __cdecl _iswdigit_l(wint_t _C,_locale_t _Locale);
+ int __cdecl iswxdigit(wint_t _C);
+ _CRTIMP int __cdecl _iswxdigit_l(wint_t _C,_locale_t _Locale);
+ int __cdecl iswspace(wint_t _C);
+ _CRTIMP int __cdecl _iswspace_l(wint_t _C,_locale_t _Locale);
+ int __cdecl iswpunct(wint_t _C);
+ _CRTIMP int __cdecl _iswpunct_l(wint_t _C,_locale_t _Locale);
+ int __cdecl iswalnum(wint_t _C);
+ _CRTIMP int __cdecl _iswalnum_l(wint_t _C,_locale_t _Locale);
+ int __cdecl iswprint(wint_t _C);
+ _CRTIMP int __cdecl _iswprint_l(wint_t _C,_locale_t _Locale);
+ int __cdecl iswgraph(wint_t _C);
+ _CRTIMP int __cdecl _iswgraph_l(wint_t _C,_locale_t _Locale);
+ int __cdecl iswcntrl(wint_t _C);
+ _CRTIMP int __cdecl _iswcntrl_l(wint_t _C,_locale_t _Locale);
+ int __cdecl iswascii(wint_t _C);
+ int __cdecl isleadbyte(int _C);
+ _CRTIMP int __cdecl _isleadbyte_l(int _C,_locale_t _Locale);
+ wint_t __cdecl towupper(wint_t _C);
+ _CRTIMP wint_t __cdecl _towupper_l(wint_t _C,_locale_t _Locale);
+ wint_t __cdecl towlower(wint_t _C);
+ _CRTIMP wint_t __cdecl _towlower_l(wint_t _C,_locale_t _Locale);
+ int __cdecl iswctype(wint_t _C,wctype_t _Type);
+ _CRTIMP int __cdecl _iswctype_l(wint_t _C,wctype_t _Type,_locale_t _Locale);
+ _CRTIMP int __cdecl __iswcsymf(wint_t _C);
+ _CRTIMP int __cdecl _iswcsymf_l(wint_t _C,_locale_t _Locale);
+ _CRTIMP int __cdecl __iswcsym(wint_t _C);
+ _CRTIMP int __cdecl _iswcsym_l(wint_t _C,_locale_t _Locale);
+ int __cdecl is_wctype(wint_t _C,wctype_t _Type);
+
+#if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || !defined (NO_OLDNAMES)
+int __cdecl iswblank(wint_t _C);
+#endif
+#endif
+
+#ifndef _CTYPE_DISABLE_MACROS
+
+#ifndef MB_CUR_MAX
+#define MB_CUR_MAX ___mb_cur_max_func()
+#ifndef __mb_cur_max
+#ifdef _MSVCRT_
+ extern int __mb_cur_max;
+#else
+#define __mb_cur_max (*_imp____mb_cur_max)
+ extern int *_imp____mb_cur_max;
+#endif
+#endif
+#ifdef _MSVCRT_
+#define ___mb_cur_max_func() (__mb_cur_max)
+#else
+#define ___mb_cur_max_func() (*_imp____mb_cur_max)
+#endif
+#endif
+
+#define __chvalidchk(a,b) (__PCTYPE_FUNC[(a)] & (b))
+#define _chvalidchk_l(_Char,_Flag,_Locale) (!_Locale ? __chvalidchk(_Char,_Flag) : ((_locale_t)_Locale)->locinfo->pctype[_Char] & (_Flag))
+#define _ischartype_l(_Char,_Flag,_Locale) (((_Locale)!=NULL && (((_locale_t)(_Locale))->locinfo->mb_cur_max) > 1) ? _isctype_l(_Char,(_Flag),_Locale) : _chvalidchk_l(_Char,_Flag,_Locale))
+#define _isalpha_l(_Char,_Locale) _ischartype_l(_Char,_ALPHA,_Locale)
+#define _isupper_l(_Char,_Locale) _ischartype_l(_Char,_UPPER,_Locale)
+#define _islower_l(_Char,_Locale) _ischartype_l(_Char,_LOWER,_Locale)
+#define _isdigit_l(_Char,_Locale) _ischartype_l(_Char,_DIGIT,_Locale)
+#define _isxdigit_l(_Char,_Locale) _ischartype_l(_Char,_HEX,_Locale)
+#define _isspace_l(_Char,_Locale) _ischartype_l(_Char,_SPACE,_Locale)
+#define _ispunct_l(_Char,_Locale) _ischartype_l(_Char,_PUNCT,_Locale)
+#define _isalnum_l(_Char,_Locale) _ischartype_l(_Char,_ALPHA|_DIGIT,_Locale)
+#define _isprint_l(_Char,_Locale) _ischartype_l(_Char,_BLANK|_PUNCT|_ALPHA|_DIGIT,_Locale)
+#define _isgraph_l(_Char,_Locale) _ischartype_l(_Char,_PUNCT|_ALPHA|_DIGIT,_Locale)
+#define _iscntrl_l(_Char,_Locale) _ischartype_l(_Char,_CONTROL,_Locale)
+#define _tolower(_Char) ((_Char)-'A'+'a')
+#define _toupper(_Char) ((_Char)-'a'+'A')
+#define __isascii(_Char) ((unsigned)(_Char) < 0x80)
+#define __toascii(_Char) ((_Char) & 0x7f)
+
+#ifndef _WCTYPE_INLINE_DEFINED
+#define _WCTYPE_INLINE_DEFINED
+
+#undef _CRT_WCTYPE_NOINLINE
+#ifndef __cplusplus
+#define iswalpha(_c) (iswctype(_c,_ALPHA))
+#define iswupper(_c) (iswctype(_c,_UPPER))
+#define iswlower(_c) (iswctype(_c,_LOWER))
+#define iswdigit(_c) (iswctype(_c,_DIGIT))
+#define iswxdigit(_c) (iswctype(_c,_HEX))
+#define iswspace(_c) (iswctype(_c,_SPACE))
+#define iswpunct(_c) (iswctype(_c,_PUNCT))
+#define iswalnum(_c) (iswctype(_c,_ALPHA|_DIGIT))
+#define iswprint(_c) (iswctype(_c,_BLANK|_PUNCT|_ALPHA|_DIGIT))
+#define iswgraph(_c) (iswctype(_c,_PUNCT|_ALPHA|_DIGIT))
+#define iswcntrl(_c) (iswctype(_c,_CONTROL))
+#define iswascii(_c) ((unsigned)(_c) < 0x80)
+#define _iswalpha_l(_c,_p) (_iswctype_l(_c,_ALPHA,_p))
+#define _iswupper_l(_c,_p) (_iswctype_l(_c,_UPPER,_p))
+#define _iswlower_l(_c,_p) (_iswctype_l(_c,_LOWER,_p))
+#define _iswdigit_l(_c,_p) (_iswctype_l(_c,_DIGIT,_p))
+#define _iswxdigit_l(_c,_p) (_iswctype_l(_c,_HEX,_p))
+#define _iswspace_l(_c,_p) (_iswctype_l(_c,_SPACE,_p))
+#define _iswpunct_l(_c,_p) (_iswctype_l(_c,_PUNCT,_p))
+#define _iswalnum_l(_c,_p) (_iswctype_l(_c,_ALPHA|_DIGIT,_p))
+#define _iswprint_l(_c,_p) (_iswctype_l(_c,_BLANK|_PUNCT|_ALPHA|_DIGIT,_p))
+#define _iswgraph_l(_c,_p) (_iswctype_l(_c,_PUNCT|_ALPHA|_DIGIT,_p))
+#define _iswcntrl_l(_c,_p) (_iswctype_l(_c,_CONTROL,_p))
+#endif
+#endif
+
+#define __iscsymf(_c) (isalpha(_c) || ((_c)=='_'))
+#define __iscsym(_c) (isalnum(_c) || ((_c)=='_'))
+#define __iswcsymf(_c) (iswalpha(_c) || ((_c)=='_'))
+#define __iswcsym(_c) (iswalnum(_c) || ((_c)=='_'))
+#define _iscsymf_l(_c,_p) (_isalpha_l(_c,_p) || ((_c)=='_'))
+#define _iscsym_l(_c,_p) (_isalnum_l(_c,_p) || ((_c)=='_'))
+#define _iswcsymf_l(_c,_p) (_iswalpha_l(_c,_p) || ((_c)=='_'))
+#define _iswcsym_l(_c,_p) (_iswalnum_l(_c,_p) || ((_c)=='_'))
+#endif
+
+#ifndef NO_OLDNAMES
+#ifndef _CTYPE_DEFINED
+ int __cdecl isascii(int _C);
+ int __cdecl toascii(int _C);
+ int __cdecl iscsymf(int _C);
+ int __cdecl iscsym(int _C);
+#else
+#define isascii __isascii
+#define toascii __toascii
+#define iscsymf __iscsymf
+#define iscsym __iscsym
+#endif
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/dir.h b/tcc/include/dir.h
new file mode 100644
index 0000000..f38f750
--- /dev/null
+++ b/tcc/include/dir.h
@@ -0,0 +1,31 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+/*
+ * dir.h
+ *
+ * This file OBSOLESCENT and only provided for backward compatibility.
+ * Please use io.h instead.
+ *
+ * This file is part of the Mingw32 package.
+ *
+ * Contributors:
+ * Created by Colin Peters <colin@bird.fu.is.saga-u.ac.jp>
+ * Mumit Khan <khan@xraylith.wisc.edu>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#include <io.h>
+
diff --git a/tcc/include/direct.h b/tcc/include/direct.h
new file mode 100644
index 0000000..99ce69d
--- /dev/null
+++ b/tcc/include/direct.h
@@ -0,0 +1,68 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+#ifndef _INC_DIRECT
+#define _INC_DIRECT
+
+#include <_mingw.h>
+#include <io.h>
+
+#pragma pack(push,_CRT_PACKING)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _DISKFREE_T_DEFINED
+#define _DISKFREE_T_DEFINED
+ struct _diskfree_t {
+ unsigned total_clusters;
+ unsigned avail_clusters;
+ unsigned sectors_per_cluster;
+ unsigned bytes_per_sector;
+ };
+#endif
+
+ _CRTIMP char *__cdecl _getcwd(char *_DstBuf,int _SizeInBytes);
+ _CRTIMP char *__cdecl _getdcwd(int _Drive,char *_DstBuf,int _SizeInBytes);
+ char *__cdecl _getdcwd_nolock(int _Drive,char *_DstBuf,int _SizeInBytes);
+ _CRTIMP int __cdecl _chdir(const char *_Path);
+ _CRTIMP int __cdecl _mkdir(const char *_Path);
+ _CRTIMP int __cdecl _rmdir(const char *_Path);
+ _CRTIMP int __cdecl _chdrive(int _Drive);
+ _CRTIMP int __cdecl _getdrive(void);
+ _CRTIMP unsigned long __cdecl _getdrives(void);
+
+#ifndef _GETDISKFREE_DEFINED
+#define _GETDISKFREE_DEFINED
+ _CRTIMP unsigned __cdecl _getdiskfree(unsigned _Drive,struct _diskfree_t *_DiskFree);
+#endif
+
+#ifndef _WDIRECT_DEFINED
+#define _WDIRECT_DEFINED
+ _CRTIMP wchar_t *__cdecl _wgetcwd(wchar_t *_DstBuf,int _SizeInWords);
+ _CRTIMP wchar_t *__cdecl _wgetdcwd(int _Drive,wchar_t *_DstBuf,int _SizeInWords);
+ wchar_t *__cdecl _wgetdcwd_nolock(int _Drive,wchar_t *_DstBuf,int _SizeInWords);
+ _CRTIMP int __cdecl _wchdir(const wchar_t *_Path);
+ _CRTIMP int __cdecl _wmkdir(const wchar_t *_Path);
+ _CRTIMP int __cdecl _wrmdir(const wchar_t *_Path);
+#endif
+
+#ifndef NO_OLDNAMES
+
+#define diskfree_t _diskfree_t
+
+ char *__cdecl getcwd(char *_DstBuf,int _SizeInBytes);
+ int __cdecl chdir(const char *_Path);
+ int __cdecl mkdir(const char *_Path);
+ int __cdecl rmdir(const char *_Path);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#pragma pack(pop)
+#endif
diff --git a/tcc/include/dirent.h b/tcc/include/dirent.h
new file mode 100644
index 0000000..cd31f59
--- /dev/null
+++ b/tcc/include/dirent.h
@@ -0,0 +1,135 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+/* All the headers include this file. */
+#include <_mingw.h>
+
+#ifndef __STRICT_ANSI__
+
+#ifndef _DIRENT_H_
+#define _DIRENT_H_
+
+
+#pragma pack(push,_CRT_PACKING)
+
+#include <io.h>
+
+#ifndef RC_INVOKED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ struct dirent
+ {
+ long d_ino; /* Always zero. */
+ unsigned short d_reclen; /* Always zero. */
+ unsigned short d_namlen; /* Length of name in d_name. */
+ char* d_name; /* File name. */
+ /* NOTE: The name in the dirent structure points to the name in the
+ * finddata_t structure in the DIR. */
+ };
+
+ /*
+ * This is an internal data structure. Good programmers will not use it
+ * except as an argument to one of the functions below.
+ * dd_stat field is now int (was short in older versions).
+ */
+ typedef struct
+ {
+ /* disk transfer area for this dir */
+ struct _finddata_t dd_dta;
+
+ /* dirent struct to return from dir (NOTE: this makes this thread
+ * safe as long as only one thread uses a particular DIR struct at
+ * a time) */
+ struct dirent dd_dir;
+
+ /* _findnext handle */
+ long dd_handle;
+
+ /*
+ * Status of search:
+ * 0 = not started yet (next entry to read is first entry)
+ * -1 = off the end
+ * positive = 0 based index of next entry
+ */
+ int dd_stat;
+
+ /* given path for dir with search pattern (struct is extended) */
+ char dd_name[1];
+ } DIR;
+
+ DIR* __cdecl opendir (const char*);
+ struct dirent* __cdecl readdir (DIR*);
+ int __cdecl closedir (DIR*);
+ void __cdecl rewinddir (DIR*);
+ long __cdecl telldir (DIR*);
+ void __cdecl seekdir (DIR*, long);
+
+
+ /* wide char versions */
+
+ struct _wdirent
+ {
+ long d_ino; /* Always zero. */
+ unsigned short d_reclen; /* Always zero. */
+ unsigned short d_namlen; /* Length of name in d_name. */
+ wchar_t* d_name; /* File name. */
+ /* NOTE: The name in the dirent structure points to the name in the * wfinddata_t structure in the _WDIR. */
+ };
+
+ /*
+ * This is an internal data structure. Good programmers will not use it
+ * except as an argument to one of the functions below.
+ */
+ typedef struct
+ {
+ /* disk transfer area for this dir */
+ struct _wfinddata_t dd_dta;
+
+ /* dirent struct to return from dir (NOTE: this makes this thread
+ * safe as long as only one thread uses a particular DIR struct at
+ * a time) */
+ struct _wdirent dd_dir;
+
+ /* _findnext handle */
+ long dd_handle;
+
+ /*
+ * Status of search:
+ * 0 = not started yet (next entry to read is first entry)
+ * -1 = off the end
+ * positive = 0 based index of next entry
+ */
+ int dd_stat;
+
+ /* given path for dir with search pattern (struct is extended) */
+ wchar_t dd_name[1];
+ } _WDIR;
+
+
+
+ _WDIR* __cdecl _wopendir (const wchar_t*);
+ struct _wdirent* __cdecl _wreaddir (_WDIR*);
+ int __cdecl _wclosedir (_WDIR*);
+ void __cdecl _wrewinddir (_WDIR*);
+ long __cdecl _wtelldir (_WDIR*);
+ void __cdecl _wseekdir (_WDIR*, long);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* Not RC_INVOKED */
+
+#pragma pack(pop)
+
+#endif /* Not _DIRENT_H_ */
+
+
+#endif /* Not __STRICT_ANSI__ */
+
diff --git a/tcc/include/dos.h b/tcc/include/dos.h
new file mode 100644
index 0000000..294e8fe
--- /dev/null
+++ b/tcc/include/dos.h
@@ -0,0 +1,55 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+#ifndef _INC_DOS
+#define _INC_DOS
+
+#include <_mingw.h>
+#include <io.h>
+
+#pragma pack(push,_CRT_PACKING)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _DISKFREE_T_DEFINED
+#define _DISKFREE_T_DEFINED
+
+ struct _diskfree_t {
+ unsigned total_clusters;
+ unsigned avail_clusters;
+ unsigned sectors_per_cluster;
+ unsigned bytes_per_sector;
+ };
+#endif
+
+#define _A_NORMAL 0x00
+#define _A_RDONLY 0x01
+#define _A_HIDDEN 0x02
+#define _A_SYSTEM 0x04
+#define _A_SUBDIR 0x10
+#define _A_ARCH 0x20
+
+#ifndef _GETDISKFREE_DEFINED
+#define _GETDISKFREE_DEFINED
+ _CRTIMP unsigned __cdecl _getdiskfree(unsigned _Drive,struct _diskfree_t *_DiskFree);
+#endif
+
+#if (defined(_X86_) && !defined(__x86_64))
+ void __cdecl _disable(void);
+ void __cdecl _enable(void);
+#endif
+
+#ifndef NO_OLDNAMES
+#define diskfree_t _diskfree_t
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#pragma pack(pop)
+#endif
diff --git a/tcc/include/errno.h b/tcc/include/errno.h
new file mode 100644
index 0000000..c2df015
--- /dev/null
+++ b/tcc/include/errno.h
@@ -0,0 +1,75 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+#ifndef _INC_ERRNO
+#define _INC_ERRNO
+
+#include <_mingw.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _CRT_ERRNO_DEFINED
+#define _CRT_ERRNO_DEFINED
+ _CRTIMP extern int *__cdecl _errno(void);
+#define errno (*_errno())
+
+ errno_t __cdecl _set_errno(int _Value);
+ errno_t __cdecl _get_errno(int *_Value);
+#endif
+
+#define EPERM 1
+#define ENOENT 2
+#define ESRCH 3
+#define EINTR 4
+#define EIO 5
+#define ENXIO 6
+#define E2BIG 7
+#define ENOEXEC 8
+#define EBADF 9
+#define ECHILD 10
+#define EAGAIN 11
+#define ENOMEM 12
+#define EACCES 13
+#define EFAULT 14
+#define EBUSY 16
+#define EEXIST 17
+#define EXDEV 18
+#define ENODEV 19
+#define ENOTDIR 20
+#define EISDIR 21
+#define ENFILE 23
+#define EMFILE 24
+#define ENOTTY 25
+#define EFBIG 27
+#define ENOSPC 28
+#define ESPIPE 29
+#define EROFS 30
+#define EMLINK 31
+#define EPIPE 32
+#define EDOM 33
+#define EDEADLK 36
+#define ENAMETOOLONG 38
+#define ENOLCK 39
+#define ENOSYS 40
+#define ENOTEMPTY 41
+
+#ifndef RC_INVOKED
+#if !defined(_SECURECRT_ERRCODE_VALUES_DEFINED)
+#define _SECURECRT_ERRCODE_VALUES_DEFINED
+#define EINVAL 22
+#define ERANGE 34
+#define EILSEQ 42
+#define STRUNCATE 80
+#endif
+#endif
+
+#define EDEADLOCK EDEADLK
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/excpt.h b/tcc/include/excpt.h
new file mode 100644
index 0000000..26cc943
--- /dev/null
+++ b/tcc/include/excpt.h
@@ -0,0 +1,123 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+#ifndef _INC_EXCPT
+#define _INC_EXCPT
+
+#include <_mingw.h>
+
+#pragma pack(push,_CRT_PACKING)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ struct _EXCEPTION_POINTERS;
+
+#ifndef EXCEPTION_DISPOSITION
+#define EXCEPTION_DISPOSITION int
+#endif
+#define ExceptionContinueExecution 0
+#define ExceptionContinueSearch 1
+#define ExceptionNestedException 2
+#define ExceptionCollidedUnwind 3
+
+#if (defined(_X86_) && !defined(__x86_64))
+ struct _EXCEPTION_RECORD;
+ struct _CONTEXT;
+
+ EXCEPTION_DISPOSITION __cdecl _except_handler(struct _EXCEPTION_RECORD *_ExceptionRecord,void *_EstablisherFrame,struct _CONTEXT *_ContextRecord,void *_DispatcherContext);
+#elif defined(__ia64__)
+
+ typedef struct _EXCEPTION_POINTERS *Exception_info_ptr;
+ struct _EXCEPTION_RECORD;
+ struct _CONTEXT;
+ struct _DISPATCHER_CONTEXT;
+
+ _CRTIMP EXCEPTION_DISPOSITION __cdecl __C_specific_handler (struct _EXCEPTION_RECORD *_ExceptionRecord,unsigned __int64 _MemoryStackFp,unsigned __int64 _BackingStoreFp,struct _CONTEXT *_ContextRecord,struct _DISPATCHER_CONTEXT *_DispatcherContext,unsigned __int64 _GlobalPointer);
+#elif defined(__x86_64)
+
+ struct _EXCEPTION_RECORD;
+ struct _CONTEXT;
+#endif
+
+#define GetExceptionCode _exception_code
+#define exception_code _exception_code
+#define GetExceptionInformation (struct _EXCEPTION_POINTERS *)_exception_info
+#define exception_info (struct _EXCEPTION_POINTERS *)_exception_info
+#define AbnormalTermination _abnormal_termination
+#define abnormal_termination _abnormal_termination
+
+ unsigned long __cdecl _exception_code(void);
+ void *__cdecl _exception_info(void);
+ int __cdecl _abnormal_termination(void);
+
+#define EXCEPTION_EXECUTE_HANDLER 1
+#define EXCEPTION_CONTINUE_SEARCH 0
+#define EXCEPTION_CONTINUE_EXECUTION -1
+
+ /* CRT stuff */
+ typedef void (__cdecl * _PHNDLR)(int);
+
+ struct _XCPT_ACTION {
+ unsigned long XcptNum;
+ int SigNum;
+ _PHNDLR XcptAction;
+ };
+
+ extern struct _XCPT_ACTION _XcptActTab[];
+ extern int _XcptActTabCount;
+ extern int _XcptActTabSize;
+ extern int _First_FPE_Indx;
+ extern int _Num_FPE;
+
+ int __cdecl __CppXcptFilter(unsigned long _ExceptionNum,struct _EXCEPTION_POINTERS * _ExceptionPtr);
+ int __cdecl _XcptFilter(unsigned long _ExceptionNum,struct _EXCEPTION_POINTERS * _ExceptionPtr);
+
+ /*
+ * The type of function that is expected as an exception handler to be
+ * installed with _try1.
+ */
+ typedef EXCEPTION_DISPOSITION (*PEXCEPTION_HANDLER)(struct _EXCEPTION_RECORD*, void*, struct _CONTEXT*, void*);
+
+#ifndef HAVE_NO_SEH
+ /*
+ * This is not entirely necessary, but it is the structure installed by
+ * the _try1 primitive below.
+ */
+ typedef struct _EXCEPTION_REGISTRATION {
+ struct _EXCEPTION_REGISTRATION *prev;
+ EXCEPTION_DISPOSITION (*handler)(struct _EXCEPTION_RECORD*, void*, struct _CONTEXT*, void*);
+ } EXCEPTION_REGISTRATION, *PEXCEPTION_REGISTRATION;
+
+ typedef EXCEPTION_REGISTRATION EXCEPTION_REGISTRATION_RECORD;
+ typedef PEXCEPTION_REGISTRATION PEXCEPTION_REGISTRATION_RECORD;
+#endif
+
+#if (defined(_X86_) && !defined(__x86_64))
+#define __try1(pHandler) \
+ __asm__ ("pushl %0;pushl %%fs:0;movl %%esp,%%fs:0;" : : "g" (pHandler));
+
+#define __except1 \
+ __asm__ ("movl (%%esp),%%eax;movl %%eax,%%fs:0;addl $8,%%esp;" \
+ : : : "%eax");
+#elif defined(__x86_64)
+#define __try1(pHandler) \
+ __asm__ ("pushq %0;pushq %%gs:0;movq %%rsp,%%gs:0;" : : "g" (pHandler));
+
+#define __except1 \
+ __asm__ ("movq (%%rsp),%%rax;movq %%rax,%%gs:0;addq $16,%%rsp;" \
+ : : : "%rax");
+#else
+#define __try1(pHandler)
+#define __except1
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#pragma pack(pop)
+#endif
diff --git a/tcc/include/fcntl.h b/tcc/include/fcntl.h
new file mode 100644
index 0000000..9202b08
--- /dev/null
+++ b/tcc/include/fcntl.h
@@ -0,0 +1,52 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+#include <_mingw.h>
+
+#include <io.h>
+
+#ifndef _INC_FCNTL
+#define _INC_FCNTL
+
+#define _O_RDONLY 0x0000
+#define _O_WRONLY 0x0001
+#define _O_RDWR 0x0002
+#define _O_APPEND 0x0008
+#define _O_CREAT 0x0100
+#define _O_TRUNC 0x0200
+#define _O_EXCL 0x0400
+#define _O_TEXT 0x4000
+#define _O_BINARY 0x8000
+#define _O_WTEXT 0x10000
+#define _O_U16TEXT 0x20000
+#define _O_U8TEXT 0x40000
+#define _O_ACCMODE (_O_RDONLY|_O_WRONLY|_O_RDWR)
+
+#define _O_RAW _O_BINARY
+#define _O_NOINHERIT 0x0080
+#define _O_TEMPORARY 0x0040
+#define _O_SHORT_LIVED 0x1000
+
+#define _O_SEQUENTIAL 0x0020
+#define _O_RANDOM 0x0010
+
+#if !defined(NO_OLDNAMES) || defined(_POSIX)
+#define O_RDONLY _O_RDONLY
+#define O_WRONLY _O_WRONLY
+#define O_RDWR _O_RDWR
+#define O_APPEND _O_APPEND
+#define O_CREAT _O_CREAT
+#define O_TRUNC _O_TRUNC
+#define O_EXCL _O_EXCL
+#define O_TEXT _O_TEXT
+#define O_BINARY _O_BINARY
+#define O_RAW _O_BINARY
+#define O_TEMPORARY _O_TEMPORARY
+#define O_NOINHERIT _O_NOINHERIT
+#define O_SEQUENTIAL _O_SEQUENTIAL
+#define O_RANDOM _O_RANDOM
+#define O_ACCMODE _O_ACCMODE
+#endif
+#endif
diff --git a/tcc/include/fenv.h b/tcc/include/fenv.h
new file mode 100644
index 0000000..258f3a5
--- /dev/null
+++ b/tcc/include/fenv.h
@@ -0,0 +1,108 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+#ifndef _FENV_H_
+#define _FENV_H_
+
+#include <_mingw.h>
+
+/* FPU status word exception flags */
+#define FE_INVALID 0x01
+#define FE_DENORMAL 0x02
+#define FE_DIVBYZERO 0x04
+#define FE_OVERFLOW 0x08
+#define FE_UNDERFLOW 0x10
+#define FE_INEXACT 0x20
+#define FE_ALL_EXCEPT (FE_INVALID | FE_DENORMAL | FE_DIVBYZERO \
+ | FE_OVERFLOW | FE_UNDERFLOW | FE_INEXACT)
+
+/* FPU control word rounding flags */
+#define FE_TONEAREST 0x0000
+#define FE_DOWNWARD 0x0400
+#define FE_UPWARD 0x0800
+#define FE_TOWARDZERO 0x0c00
+
+/* The MXCSR exception flags are the same as the
+ FE flags. */
+#define __MXCSR_EXCEPT_FLAG_SHIFT 0
+
+/* How much to shift FE status word exception flags
+ to get MXCSR rounding flags, */
+#define __MXCSR_ROUND_FLAG_SHIFT 3
+
+#ifndef RC_INVOKED
+/*
+ For now, support only for the basic abstraction of flags that are
+ either set or clear. fexcept_t could be structure that holds more
+ info about the fp environment.
+*/
+typedef unsigned short fexcept_t;
+
+/* This 32-byte struct represents the entire floating point
+ environment as stored by fnstenv or fstenv, augmented by
+ the contents of the MXCSR register, as stored by stmxcsr
+ (if CPU supports it). */
+typedef struct
+{
+ unsigned short __control_word;
+ unsigned short __unused0;
+ unsigned short __status_word;
+ unsigned short __unused1;
+ unsigned short __tag_word;
+ unsigned short __unused2;
+ unsigned int __ip_offset; /* instruction pointer offset */
+ unsigned short __ip_selector;
+ unsigned short __opcode;
+ unsigned int __data_offset;
+ unsigned short __data_selector;
+ unsigned short __unused3;
+ unsigned int __mxcsr; /* contents of the MXCSR register */
+} fenv_t;
+
+
+/*The C99 standard (7.6.9) allows us to define implementation-specific macros for
+ different fp environments */
+
+/* The default Intel x87 floating point environment (64-bit mantissa) */
+#define FE_PC64_ENV ((const fenv_t *)-1)
+
+/* The floating point environment set by MSVCRT _fpreset (53-bit mantissa) */
+#define FE_PC53_ENV ((const fenv_t *)-2)
+
+/* The FE_DFL_ENV macro is required by standard.
+ fesetenv will use the environment set at app startup.*/
+#define FE_DFL_ENV ((const fenv_t *) 0)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*TODO: Some of these could be inlined */
+/* 7.6.2 Exception */
+
+extern int __cdecl feclearexcept (int);
+extern int __cdecl fegetexceptflag (fexcept_t * flagp, int excepts);
+extern int __cdecl feraiseexcept (int excepts );
+extern int __cdecl fesetexceptflag (const fexcept_t *, int);
+extern int __cdecl fetestexcept (int excepts);
+
+/* 7.6.3 Rounding */
+
+extern int __cdecl fegetround (void);
+extern int __cdecl fesetround (int mode);
+
+/* 7.6.4 Environment */
+
+extern int __cdecl fegetenv(fenv_t * envp);
+extern int __cdecl fesetenv(const fenv_t * );
+extern int __cdecl feupdateenv(const fenv_t *);
+extern int __cdecl feholdexcept(fenv_t *);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* Not RC_INVOKED */
+
+#endif /* ndef _FENV_H */
diff --git a/tcc/include/float.h b/tcc/include/float.h
new file mode 100644
index 0000000..f16f1f0
--- /dev/null
+++ b/tcc/include/float.h
@@ -0,0 +1,57 @@
+#ifndef _FLOAT_H_
+#define _FLOAT_H_
+
+#define FLT_RADIX 2
+
+/* IEEE float */
+#define FLT_MANT_DIG 24
+#define FLT_DIG 6
+#define FLT_ROUNDS 1
+#define FLT_EPSILON 1.19209290e-07F
+#define FLT_MIN_EXP (-125)
+#define FLT_MIN 1.17549435e-38F
+#define FLT_MIN_10_EXP (-37)
+#define FLT_MAX_EXP 128
+#define FLT_MAX 3.40282347e+38F
+#define FLT_MAX_10_EXP 38
+
+/* IEEE double */
+#define DBL_MANT_DIG 53
+#define DBL_DIG 15
+#define DBL_EPSILON 2.2204460492503131e-16
+#define DBL_MIN_EXP (-1021)
+#define DBL_MIN 2.2250738585072014e-308
+#define DBL_MIN_10_EXP (-307)
+#define DBL_MAX_EXP 1024
+#define DBL_MAX 1.7976931348623157e+308
+#define DBL_MAX_10_EXP 308
+
+/* horrible intel long double */
+#if defined __i386__ || defined __x86_64__
+
+#define LDBL_MANT_DIG 64
+#define LDBL_DIG 18
+#define LDBL_EPSILON 1.08420217248550443401e-19L
+#define LDBL_MIN_EXP (-16381)
+#define LDBL_MIN 3.36210314311209350626e-4932L
+#define LDBL_MIN_10_EXP (-4931)
+#define LDBL_MAX_EXP 16384
+#define LDBL_MAX 1.18973149535723176502e+4932L
+#define LDBL_MAX_10_EXP 4932
+
+#else
+
+/* same as IEEE double */
+#define LDBL_MANT_DIG 53
+#define LDBL_DIG 15
+#define LDBL_EPSILON 2.2204460492503131e-16
+#define LDBL_MIN_EXP (-1021)
+#define LDBL_MIN 2.2250738585072014e-308
+#define LDBL_MIN_10_EXP (-307)
+#define LDBL_MAX_EXP 1024
+#define LDBL_MAX 1.7976931348623157e+308
+#define LDBL_MAX_10_EXP 308
+
+#endif
+
+#endif /* _FLOAT_H_ */
diff --git a/tcc/include/inttypes.h b/tcc/include/inttypes.h
new file mode 100644
index 0000000..7360091
--- /dev/null
+++ b/tcc/include/inttypes.h
@@ -0,0 +1,297 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+/* 7.8 Format conversion of integer types <inttypes.h> */
+
+#ifndef _INTTYPES_H_
+#define _INTTYPES_H_
+
+#include <_mingw.h>
+#include <stdint.h>
+#define __need_wchar_t
+#include <stddef.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct {
+ intmax_t quot;
+ intmax_t rem;
+ } imaxdiv_t;
+
+#if !defined(__cplusplus) || defined(__STDC_FORMAT_MACROS)
+
+/* 7.8.1 Macros for format specifiers
+ *
+ * MS runtime does not yet understand C9x standard "ll"
+ * length specifier. It appears to treat "ll" as "l".
+ * The non-standard I64 length specifier causes warning in GCC,
+ * but understood by MS runtime functions.
+ */
+
+/* fprintf macros for signed types */
+#define PRId8 "d"
+#define PRId16 "d"
+#define PRId32 "d"
+#define PRId64 "I64d"
+
+#define PRIdLEAST8 "d"
+#define PRIdLEAST16 "d"
+#define PRIdLEAST32 "d"
+#define PRIdLEAST64 "I64d"
+
+#define PRIdFAST8 "d"
+#define PRIdFAST16 "d"
+#define PRIdFAST32 "d"
+#define PRIdFAST64 "I64d"
+
+#define PRIdMAX "I64d"
+
+#define PRIi8 "i"
+#define PRIi16 "i"
+#define PRIi32 "i"
+#define PRIi64 "I64i"
+
+#define PRIiLEAST8 "i"
+#define PRIiLEAST16 "i"
+#define PRIiLEAST32 "i"
+#define PRIiLEAST64 "I64i"
+
+#define PRIiFAST8 "i"
+#define PRIiFAST16 "i"
+#define PRIiFAST32 "i"
+#define PRIiFAST64 "I64i"
+
+#define PRIiMAX "I64i"
+
+#define PRIo8 "o"
+#define PRIo16 "o"
+#define PRIo32 "o"
+#define PRIo64 "I64o"
+
+#define PRIoLEAST8 "o"
+#define PRIoLEAST16 "o"
+#define PRIoLEAST32 "o"
+#define PRIoLEAST64 "I64o"
+
+#define PRIoFAST8 "o"
+#define PRIoFAST16 "o"
+#define PRIoFAST32 "o"
+#define PRIoFAST64 "I64o"
+
+#define PRIoMAX "I64o"
+
+/* fprintf macros for unsigned types */
+#define PRIu8 "u"
+#define PRIu16 "u"
+#define PRIu32 "u"
+#define PRIu64 "I64u"
+
+
+#define PRIuLEAST8 "u"
+#define PRIuLEAST16 "u"
+#define PRIuLEAST32 "u"
+#define PRIuLEAST64 "I64u"
+
+#define PRIuFAST8 "u"
+#define PRIuFAST16 "u"
+#define PRIuFAST32 "u"
+#define PRIuFAST64 "I64u"
+
+#define PRIuMAX "I64u"
+
+#define PRIx8 "x"
+#define PRIx16 "x"
+#define PRIx32 "x"
+#define PRIx64 "I64x"
+
+#define PRIxLEAST8 "x"
+#define PRIxLEAST16 "x"
+#define PRIxLEAST32 "x"
+#define PRIxLEAST64 "I64x"
+
+#define PRIxFAST8 "x"
+#define PRIxFAST16 "x"
+#define PRIxFAST32 "x"
+#define PRIxFAST64 "I64x"
+
+#define PRIxMAX "I64x"
+
+#define PRIX8 "X"
+#define PRIX16 "X"
+#define PRIX32 "X"
+#define PRIX64 "I64X"
+
+#define PRIXLEAST8 "X"
+#define PRIXLEAST16 "X"
+#define PRIXLEAST32 "X"
+#define PRIXLEAST64 "I64X"
+
+#define PRIXFAST8 "X"
+#define PRIXFAST16 "X"
+#define PRIXFAST32 "X"
+#define PRIXFAST64 "I64X"
+
+#define PRIXMAX "I64X"
+
+/*
+ * fscanf macros for signed int types
+ * NOTE: if 32-bit int is used for int_fast8_t and int_fast16_t
+ * (see stdint.h, 7.18.1.3), FAST8 and FAST16 should have
+ * no length identifiers
+ */
+
+#define SCNd16 "hd"
+#define SCNd32 "d"
+#define SCNd64 "I64d"
+
+#define SCNdLEAST16 "hd"
+#define SCNdLEAST32 "d"
+#define SCNdLEAST64 "I64d"
+
+#define SCNdFAST16 "hd"
+#define SCNdFAST32 "d"
+#define SCNdFAST64 "I64d"
+
+#define SCNdMAX "I64d"
+
+#define SCNi16 "hi"
+#define SCNi32 "i"
+#define SCNi64 "I64i"
+
+#define SCNiLEAST16 "hi"
+#define SCNiLEAST32 "i"
+#define SCNiLEAST64 "I64i"
+
+#define SCNiFAST16 "hi"
+#define SCNiFAST32 "i"
+#define SCNiFAST64 "I64i"
+
+#define SCNiMAX "I64i"
+
+#define SCNo16 "ho"
+#define SCNo32 "o"
+#define SCNo64 "I64o"
+
+#define SCNoLEAST16 "ho"
+#define SCNoLEAST32 "o"
+#define SCNoLEAST64 "I64o"
+
+#define SCNoFAST16 "ho"
+#define SCNoFAST32 "o"
+#define SCNoFAST64 "I64o"
+
+#define SCNoMAX "I64o"
+
+#define SCNx16 "hx"
+#define SCNx32 "x"
+#define SCNx64 "I64x"
+
+#define SCNxLEAST16 "hx"
+#define SCNxLEAST32 "x"
+#define SCNxLEAST64 "I64x"
+
+#define SCNxFAST16 "hx"
+#define SCNxFAST32 "x"
+#define SCNxFAST64 "I64x"
+
+#define SCNxMAX "I64x"
+
+/* fscanf macros for unsigned int types */
+
+#define SCNu16 "hu"
+#define SCNu32 "u"
+#define SCNu64 "I64u"
+
+#define SCNuLEAST16 "hu"
+#define SCNuLEAST32 "u"
+#define SCNuLEAST64 "I64u"
+
+#define SCNuFAST16 "hu"
+#define SCNuFAST32 "u"
+#define SCNuFAST64 "I64u"
+
+#define SCNuMAX "I64u"
+
+#ifdef _WIN64
+#define PRIdPTR "I64d"
+#define PRIiPTR "I64i"
+#define PRIoPTR "I64o"
+#define PRIuPTR "I64u"
+#define PRIxPTR "I64x"
+#define PRIXPTR "I64X"
+#define SCNdPTR "I64d"
+#define SCNiPTR "I64i"
+#define SCNoPTR "I64o"
+#define SCNxPTR "I64x"
+#define SCNuPTR "I64u"
+#else
+#define PRIdPTR "d"
+#define PRIiPTR "i"
+#define PRIoPTR "o"
+#define PRIuPTR "u"
+#define PRIxPTR "x"
+#define PRIXPTR "X"
+#define SCNdPTR "d"
+#define SCNiPTR "i"
+#define SCNoPTR "o"
+#define SCNxPTR "x"
+#define SCNuPTR "u"
+#endif
+
+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+/*
+ * no length modifier for char types prior to C9x
+ * MS runtime scanf appears to treat "hh" as "h"
+ */
+
+/* signed char */
+#define SCNd8 "hhd"
+#define SCNdLEAST8 "hhd"
+#define SCNdFAST8 "hhd"
+
+#define SCNi8 "hhi"
+#define SCNiLEAST8 "hhi"
+#define SCNiFAST8 "hhi"
+
+#define SCNo8 "hho"
+#define SCNoLEAST8 "hho"
+#define SCNoFAST8 "hho"
+
+#define SCNx8 "hhx"
+#define SCNxLEAST8 "hhx"
+#define SCNxFAST8 "hhx"
+
+/* unsigned char */
+#define SCNu8 "hhu"
+#define SCNuLEAST8 "hhu"
+#define SCNuFAST8 "hhu"
+#endif /* __STDC_VERSION__ >= 199901 */
+
+#endif /* !defined(__cplusplus) || defined(__STDC_FORMAT_MACROS) */
+
+intmax_t __cdecl imaxabs (intmax_t j);
+__CRT_INLINE intmax_t __cdecl imaxabs (intmax_t j)
+ {return (j >= 0 ? j : -j);}
+imaxdiv_t __cdecl imaxdiv (intmax_t numer, intmax_t denom);
+
+/* 7.8.2 Conversion functions for greatest-width integer types */
+
+intmax_t __cdecl strtoimax (const char* __restrict__ nptr,
+ char** __restrict__ endptr, int base);
+uintmax_t __cdecl strtoumax (const char* __restrict__ nptr,
+ char** __restrict__ endptr, int base);
+
+intmax_t __cdecl wcstoimax (const wchar_t* __restrict__ nptr,
+ wchar_t** __restrict__ endptr, int base);
+uintmax_t __cdecl wcstoumax (const wchar_t* __restrict__ nptr,
+ wchar_t** __restrict__ endptr, int base);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ndef _INTTYPES_H */
diff --git a/tcc/include/io.h b/tcc/include/io.h
new file mode 100644
index 0000000..e2aeec3
--- /dev/null
+++ b/tcc/include/io.h
@@ -0,0 +1,418 @@
+
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+#ifndef _IO_H_
+#define _IO_H_
+
+#include <_mingw.h>
+#include <string.h>
+
+#pragma pack(push,_CRT_PACKING)
+
+#ifndef _POSIX_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_CRTIMP char* __cdecl _getcwd (char*, int);
+#ifndef _FSIZE_T_DEFINED
+ typedef unsigned long _fsize_t;
+#define _FSIZE_T_DEFINED
+#endif
+
+#ifndef _FINDDATA_T_DEFINED
+
+ struct _finddata32_t {
+ unsigned attrib;
+ __time32_t time_create;
+ __time32_t time_access;
+ __time32_t time_write;
+ _fsize_t size;
+ char name[260];
+ };
+
+/*#if _INTEGRAL_MAX_BITS >= 64*/
+
+ struct _finddata32i64_t {
+ unsigned attrib;
+ __time32_t time_create;
+ __time32_t time_access;
+ __time32_t time_write;
+ __int64 size;
+ char name[260];
+ };
+
+ struct _finddata64i32_t {
+ unsigned attrib;
+ __time64_t time_create;
+ __time64_t time_access;
+ __time64_t time_write;
+ _fsize_t size;
+ char name[260];
+ };
+
+ struct __finddata64_t {
+ unsigned attrib;
+ __time64_t time_create;
+ __time64_t time_access;
+ __time64_t time_write;
+ __int64 size;
+ char name[260];
+ };
+/* #endif */
+
+#ifdef _USE_32BIT_TIME_T
+#define _finddata_t _finddata32_t
+#define _finddatai64_t _finddata32i64_t
+
+#ifdef _WIN64
+#define _findfirst _findfirst32
+#define _findnext _findnext32
+#else
+#define _findfirst32 _findfirst
+#define _findnext32 _findnext
+#endif
+#define _findfirsti64 _findfirst32i64
+#define _findnexti64 _findnext32i64
+#else
+#define _finddata_t _finddata64i32_t
+#define _finddatai64_t __finddata64_t
+
+#define _findfirst _findfirst64i32
+#define _findnext _findnext64i32
+#define _findfirsti64 _findfirst64
+#define _findnexti64 _findnext64
+#endif
+
+#define _FINDDATA_T_DEFINED
+#endif
+
+#ifndef _WFINDDATA_T_DEFINED
+
+ struct _wfinddata32_t {
+ unsigned attrib;
+ __time32_t time_create;
+ __time32_t time_access;
+ __time32_t time_write;
+ _fsize_t size;
+ wchar_t name[260];
+ };
+
+/* #if _INTEGRAL_MAX_BITS >= 64 */
+
+ struct _wfinddata32i64_t {
+ unsigned attrib;
+ __time32_t time_create;
+ __time32_t time_access;
+ __time32_t time_write;
+ __int64 size;
+ wchar_t name[260];
+ };
+
+ struct _wfinddata64i32_t {
+ unsigned attrib;
+ __time64_t time_create;
+ __time64_t time_access;
+ __time64_t time_write;
+ _fsize_t size;
+ wchar_t name[260];
+ };
+
+ struct _wfinddata64_t {
+ unsigned attrib;
+ __time64_t time_create;
+ __time64_t time_access;
+ __time64_t time_write;
+ __int64 size;
+ wchar_t name[260];
+ };
+/* #endif */
+
+#ifdef _USE_32BIT_TIME_T
+#define _wfinddata_t _wfinddata32_t
+#define _wfinddatai64_t _wfinddata32i64_t
+
+#define _wfindfirst _wfindfirst32
+#define _wfindnext _wfindnext32
+#define _wfindfirsti64 _wfindfirst32i64
+#define _wfindnexti64 _wfindnext32i64
+#else
+#define _wfinddata_t _wfinddata64i32_t
+#define _wfinddatai64_t _wfinddata64_t
+
+#define _wfindfirst _wfindfirst64i32
+#define _wfindnext _wfindnext64i32
+#define _wfindfirsti64 _wfindfirst64
+#define _wfindnexti64 _wfindnext64
+#endif
+
+#define _WFINDDATA_T_DEFINED
+#endif
+
+#define _A_NORMAL 0x00
+#define _A_RDONLY 0x01
+#define _A_HIDDEN 0x02
+#define _A_SYSTEM 0x04
+#define _A_SUBDIR 0x10
+#define _A_ARCH 0x20
+
+#ifndef _SIZE_T_DEFINED
+#define _SIZE_T_DEFINED
+#undef size_t
+#ifdef _WIN64
+#if defined(__GNUC__) && defined(__STRICT_ANSI__)
+ typedef unsigned int size_t __attribute__ ((mode (DI)));
+#else
+ typedef unsigned __int64 size_t;
+#endif
+#else
+ typedef unsigned int size_t;
+#endif
+#endif
+
+#ifndef _SSIZE_T_DEFINED
+#define _SSIZE_T_DEFINED
+#undef ssize_t
+#ifdef _WIN64
+#if defined(__GNUC__) && defined(__STRICT_ANSI__)
+ typedef int ssize_t __attribute__ ((mode (DI)));
+#else
+ typedef __int64 ssize_t;
+#endif
+#else
+ typedef int ssize_t;
+#endif
+#endif
+
+#ifndef _OFF_T_DEFINED
+#define _OFF_T_DEFINED
+#ifndef _OFF_T_
+#define _OFF_T_
+ typedef long _off_t;
+#if !defined(NO_OLDNAMES) || defined(_POSIX)
+ typedef long off_t;
+#endif
+#endif
+#endif
+
+#ifndef _OFF64_T_DEFINED
+#define _OFF64_T_DEFINED
+#if defined(__GNUC__) && defined(__STRICT_ANSI__)
+ typedef int _off64_t __attribute__ ((mode (DI)));
+#if !defined(NO_OLDNAMES) || defined(_POSIX)
+ typedef int off64_t __attribute__ ((mode (DI)));
+#endif
+#else
+ typedef long long _off64_t;
+#if !defined(NO_OLDNAMES) || defined(_POSIX)
+ typedef long long off64_t;
+#endif
+#endif
+#endif
+
+ /* Some defines for _access nAccessMode (MS doesn't define them, but
+ * it doesn't seem to hurt to add them). */
+#define F_OK 0 /* Check for file existence */
+#define X_OK 1 /* Check for execute permission. */
+#define W_OK 2 /* Check for write permission */
+#define R_OK 4 /* Check for read permission */
+
+ _CRTIMP int __cdecl _access(const char *_Filename,int _AccessMode);
+ _CRTIMP int __cdecl _chmod(const char *_Filename,int _Mode);
+ _CRTIMP int __cdecl _chsize(int _FileHandle,long _Size);
+ _CRTIMP int __cdecl _close(int _FileHandle);
+ _CRTIMP int __cdecl _commit(int _FileHandle);
+ _CRTIMP int __cdecl _creat(const char *_Filename,int _PermissionMode);
+ _CRTIMP int __cdecl _dup(int _FileHandle);
+ _CRTIMP int __cdecl _dup2(int _FileHandleSrc,int _FileHandleDst);
+ _CRTIMP int __cdecl _eof(int _FileHandle);
+ _CRTIMP long __cdecl _filelength(int _FileHandle);
+ _CRTIMP intptr_t __cdecl _findfirst32(const char *_Filename,struct _finddata32_t *_FindData);
+ _CRTIMP int __cdecl _findnext32(intptr_t _FindHandle,struct _finddata32_t *_FindData);
+ _CRTIMP int __cdecl _findclose(intptr_t _FindHandle);
+ _CRTIMP int __cdecl _isatty(int _FileHandle);
+ _CRTIMP int __cdecl _locking(int _FileHandle,int _LockMode,long _NumOfBytes);
+ _CRTIMP long __cdecl _lseek(int _FileHandle,long _Offset,int _Origin);
+ _off64_t lseek64(int fd,_off64_t offset, int whence);
+ _CRTIMP char *__cdecl _mktemp(char *_TemplateName);
+ _CRTIMP int __cdecl _pipe(int *_PtHandles,unsigned int _PipeSize,int _TextMode);
+ _CRTIMP int __cdecl _read(int _FileHandle,void *_DstBuf,unsigned int _MaxCharCount);
+
+#ifndef _CRT_DIRECTORY_DEFINED
+#define _CRT_DIRECTORY_DEFINED
+ int __cdecl remove(const char *_Filename);
+ int __cdecl rename(const char *_OldFilename,const char *_NewFilename);
+ _CRTIMP int __cdecl _unlink(const char *_Filename);
+#ifndef NO_OLDNAMES
+ int __cdecl unlink(const char *_Filename);
+#endif
+#endif
+
+ _CRTIMP int __cdecl _setmode(int _FileHandle,int _Mode);
+ _CRTIMP long __cdecl _tell(int _FileHandle);
+ _CRTIMP int __cdecl _umask(int _Mode);
+ _CRTIMP int __cdecl _write(int _FileHandle,const void *_Buf,unsigned int _MaxCharCount);
+
+#if _INTEGRAL_MAX_BITS >= 64
+ _CRTIMP __int64 __cdecl _filelengthi64(int _FileHandle);
+ _CRTIMP intptr_t __cdecl _findfirst32i64(const char *_Filename,struct _finddata32i64_t *_FindData);
+ _CRTIMP intptr_t __cdecl _findfirst64(const char *_Filename,struct __finddata64_t *_FindData);
+#ifdef __cplusplus
+#include <string.h>
+#endif
+ intptr_t __cdecl _findfirst64i32(const char *_Filename,struct _finddata64i32_t *_FindData);
+ __CRT_INLINE intptr_t __cdecl _findfirst64i32(const char *_Filename,struct _finddata64i32_t *_FindData)
+ {
+ struct __finddata64_t fd;
+ intptr_t ret = _findfirst64(_Filename,&fd);
+ _FindData->attrib=fd.attrib;
+ _FindData->time_create=fd.time_create;
+ _FindData->time_access=fd.time_access;
+ _FindData->time_write=fd.time_write;
+ _FindData->size=(_fsize_t) fd.size;
+ strncpy(_FindData->name,fd.name,260);
+ return ret;
+ }
+ _CRTIMP int __cdecl _findnext32i64(intptr_t _FindHandle,struct _finddata32i64_t *_FindData);
+ _CRTIMP int __cdecl _findnext64(intptr_t _FindHandle,struct __finddata64_t *_FindData);
+ int __cdecl _findnext64i32(intptr_t _FindHandle,struct _finddata64i32_t *_FindData);
+ __CRT_INLINE int __cdecl _findnext64i32(intptr_t _FindHandle,struct _finddata64i32_t *_FindData)
+ {
+ struct __finddata64_t fd;
+ int ret = _findnext64(_FindHandle,&fd);
+ _FindData->attrib=fd.attrib;
+ _FindData->time_create=fd.time_create;
+ _FindData->time_access=fd.time_access;
+ _FindData->time_write=fd.time_write;
+ _FindData->size=(_fsize_t) fd.size;
+ strncpy(_FindData->name,fd.name,260);
+ return ret;
+ }
+ __int64 __cdecl _lseeki64(int _FileHandle,__int64 _Offset,int _Origin);
+ __int64 __cdecl _telli64(int _FileHandle);
+#endif
+#ifndef NO_OLDNAMES
+
+#ifndef _UWIN
+ int __cdecl chdir (const char *);
+ char *__cdecl getcwd (char *, int);
+ int __cdecl mkdir (const char *);
+ char *__cdecl mktemp(char *);
+ int __cdecl rmdir (const char*);
+ int __cdecl chmod (const char *, int);
+#endif /* _UWIN */
+
+#endif /* Not NO_OLDNAMES */
+
+ _CRTIMP errno_t __cdecl _sopen_s(int *_FileHandle,const char *_Filename,int _OpenFlag,int _ShareFlag,int _PermissionMode);
+
+#ifndef __cplusplus
+ _CRTIMP int __cdecl _open(const char *_Filename,int _OpenFlag,...);
+ _CRTIMP int __cdecl _sopen(const char *_Filename,int _OpenFlag,int _ShareFlag,...);
+#else
+ extern "C++" _CRTIMP int __cdecl _open(const char *_Filename,int _Openflag,int _PermissionMode = 0);
+ extern "C++" _CRTIMP int __cdecl _sopen(const char *_Filename,int _Openflag,int _ShareFlag,int _PermissionMode = 0);
+#endif
+
+#ifndef _WIO_DEFINED
+#define _WIO_DEFINED
+ _CRTIMP int __cdecl _waccess(const wchar_t *_Filename,int _AccessMode);
+ _CRTIMP int __cdecl _wchmod(const wchar_t *_Filename,int _Mode);
+ _CRTIMP int __cdecl _wcreat(const wchar_t *_Filename,int _PermissionMode);
+ _CRTIMP intptr_t __cdecl _wfindfirst32(const wchar_t *_Filename,struct _wfinddata32_t *_FindData);
+ _CRTIMP int __cdecl _wfindnext32(intptr_t _FindHandle,struct _wfinddata32_t *_FindData);
+ _CRTIMP int __cdecl _wunlink(const wchar_t *_Filename);
+ _CRTIMP int __cdecl _wrename(const wchar_t *_NewFilename,const wchar_t *_OldFilename);
+ _CRTIMP wchar_t *__cdecl _wmktemp(wchar_t *_TemplateName);
+
+#if _INTEGRAL_MAX_BITS >= 64
+ _CRTIMP intptr_t __cdecl _wfindfirst32i64(const wchar_t *_Filename,struct _wfinddata32i64_t *_FindData);
+ intptr_t __cdecl _wfindfirst64i32(const wchar_t *_Filename,struct _wfinddata64i32_t *_FindData);
+ _CRTIMP intptr_t __cdecl _wfindfirst64(const wchar_t *_Filename,struct _wfinddata64_t *_FindData);
+ _CRTIMP int __cdecl _wfindnext32i64(intptr_t _FindHandle,struct _wfinddata32i64_t *_FindData);
+ int __cdecl _wfindnext64i32(intptr_t _FindHandle,struct _wfinddata64i32_t *_FindData);
+ _CRTIMP int __cdecl _wfindnext64(intptr_t _FindHandle,struct _wfinddata64_t *_FindData);
+#endif
+
+ _CRTIMP errno_t __cdecl _wsopen_s(int *_FileHandle,const wchar_t *_Filename,int _OpenFlag,int _ShareFlag,int _PermissionFlag);
+
+#if !defined(__cplusplus) || !(defined(_X86_) && !defined(__x86_64))
+ _CRTIMP int __cdecl _wopen(const wchar_t *_Filename,int _OpenFlag,...);
+ _CRTIMP int __cdecl _wsopen(const wchar_t *_Filename,int _OpenFlag,int _ShareFlag,...);
+#else
+ extern "C++" _CRTIMP int __cdecl _wopen(const wchar_t *_Filename,int _OpenFlag,int _PermissionMode = 0);
+ extern "C++" _CRTIMP int __cdecl _wsopen(const wchar_t *_Filename,int _OpenFlag,int _ShareFlag,int _PermissionMode = 0);
+#endif
+
+#endif
+
+ int __cdecl __lock_fhandle(int _Filehandle);
+ void __cdecl _unlock_fhandle(int _Filehandle);
+ _CRTIMP intptr_t __cdecl _get_osfhandle(int _FileHandle);
+ _CRTIMP int __cdecl _open_osfhandle(intptr_t _OSFileHandle,int _Flags);
+
+#ifndef NO_OLDNAMES
+ int __cdecl access(const char *_Filename,int _AccessMode);
+ int __cdecl chmod(const char *_Filename,int _AccessMode);
+ int __cdecl chsize(int _FileHandle,long _Size);
+ int __cdecl close(int _FileHandle);
+ int __cdecl creat(const char *_Filename,int _PermissionMode);
+ int __cdecl dup(int _FileHandle);
+ int __cdecl dup2(int _FileHandleSrc,int _FileHandleDst);
+ int __cdecl eof(int _FileHandle);
+ long __cdecl filelength(int _FileHandle);
+ int __cdecl isatty(int _FileHandle);
+ int __cdecl locking(int _FileHandle,int _LockMode,long _NumOfBytes);
+ long __cdecl lseek(int _FileHandle,long _Offset,int _Origin);
+ char *__cdecl mktemp(char *_TemplateName);
+ int __cdecl open(const char *_Filename,int _OpenFlag,...);
+ int __cdecl read(int _FileHandle,void *_DstBuf,unsigned int _MaxCharCount);
+ int __cdecl setmode(int _FileHandle,int _Mode);
+ int __cdecl sopen(const char *_Filename,int _OpenFlag,int _ShareFlag,...);
+ long __cdecl tell(int _FileHandle);
+ int __cdecl umask(int _Mode);
+ int __cdecl write(int _Filehandle,const void *_Buf,unsigned int _MaxCharCount);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Misc stuff */
+char *getlogin(void);
+#ifdef __USE_MINGW_ALARM
+unsigned int alarm(unsigned int seconds);
+#endif
+
+#ifdef __USE_MINGW_ACCESS
+/* Old versions of MSVCRT access() just ignored X_OK, while the version
+ shipped with Vista, returns an error code. This will restore the
+ old behaviour */
+static inline int __mingw_access (const char *__fname, int __mode) {
+ return _access (__fname, __mode & ~X_OK);
+}
+
+#define access(__f,__m) __mingw_access (__f, __m)
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#pragma pack(pop)
+
+#include <sec_api/io_s.h>
+
+#endif /* End _IO_H_ */
+
diff --git a/tcc/include/limits.h b/tcc/include/limits.h
new file mode 100644
index 0000000..fafb04a
--- /dev/null
+++ b/tcc/include/limits.h
@@ -0,0 +1,111 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+#include <_mingw.h>
+
+#ifndef _INC_LIMITS
+#define _INC_LIMITS
+
+/*
+* File system limits
+*
+* TODO: NAME_MAX and OPEN_MAX are file system limits or not? Are they the
+* same as FILENAME_MAX and FOPEN_MAX from stdio.h?
+* NOTE: Apparently the actual size of PATH_MAX is 260, but a space is
+* required for the NUL. TODO: Test?
+*/
+#define PATH_MAX (259)
+
+#define CHAR_BIT 8
+#define SCHAR_MIN (-128)
+#define SCHAR_MAX 127
+#define UCHAR_MAX 0xff
+
+#define CHAR_MIN SCHAR_MIN
+#define CHAR_MAX SCHAR_MAX
+
+#define MB_LEN_MAX 5
+#define SHRT_MIN (-32768)
+#define SHRT_MAX 32767
+#define USHRT_MAX 0xffff
+#define INT_MIN (-2147483647 - 1)
+#define INT_MAX 2147483647
+#define UINT_MAX 0xffffffff
+#define LONG_MIN (-2147483647L - 1)
+#define LONG_MAX 2147483647L
+#define ULONG_MAX 0xffffffffUL
+#define LLONG_MAX 9223372036854775807ll
+#define LLONG_MIN (-9223372036854775807ll - 1)
+#define ULLONG_MAX 0xffffffffffffffffull
+
+#if _INTEGRAL_MAX_BITS >= 8
+#define _I8_MIN (-127 - 1)
+#define _I8_MAX 127i8
+#define _UI8_MAX 0xffu
+#endif
+
+#if _INTEGRAL_MAX_BITS >= 16
+#define _I16_MIN (-32767 - 1)
+#define _I16_MAX 32767i16
+#define _UI16_MAX 0xffffu
+#endif
+
+#if _INTEGRAL_MAX_BITS >= 32
+#define _I32_MIN (-2147483647 - 1)
+#define _I32_MAX 2147483647
+#define _UI32_MAX 0xffffffffu
+#endif
+
+#if defined(__GNUC__)
+#undef LONG_LONG_MAX
+#define LONG_LONG_MAX 9223372036854775807ll
+#undef LONG_LONG_MIN
+#define LONG_LONG_MIN (-LONG_LONG_MAX-1)
+#undef ULONG_LONG_MAX
+#define ULONG_LONG_MAX (2ull * LONG_LONG_MAX + 1ull)
+#endif
+
+#if _INTEGRAL_MAX_BITS >= 64
+#define _I64_MIN (-9223372036854775807ll - 1)
+#define _I64_MAX 9223372036854775807ll
+#define _UI64_MAX 0xffffffffffffffffull
+#endif
+
+#ifndef SIZE_MAX
+#ifdef _WIN64
+#define SIZE_MAX _UI64_MAX
+#else
+#define SIZE_MAX UINT_MAX
+#endif
+#endif
+
+#ifdef _POSIX_
+#define _POSIX_ARG_MAX 4096
+#define _POSIX_CHILD_MAX 6
+#define _POSIX_LINK_MAX 8
+#define _POSIX_MAX_CANON 255
+#define _POSIX_MAX_INPUT 255
+#define _POSIX_NAME_MAX 14
+#define _POSIX_NGROUPS_MAX 0
+#define _POSIX_OPEN_MAX 16
+#define _POSIX_PATH_MAX 255
+#define _POSIX_PIPE_BUF 512
+#define _POSIX_SSIZE_MAX 32767
+#define _POSIX_STREAM_MAX 8
+#define _POSIX_TZNAME_MAX 3
+#define ARG_MAX 14500
+#define LINK_MAX 1024
+#define MAX_CANON _POSIX_MAX_CANON
+#define MAX_INPUT _POSIX_MAX_INPUT
+#define NAME_MAX 255
+#define NGROUPS_MAX 16
+#define OPEN_MAX 32
+#define PATH_MAX 512
+#define PIPE_BUF _POSIX_PIPE_BUF
+#define SSIZE_MAX _POSIX_SSIZE_MAX
+#define STREAM_MAX 20
+#define TZNAME_MAX 10
+#endif
+#endif
diff --git a/tcc/include/locale.h b/tcc/include/locale.h
new file mode 100644
index 0000000..686aa9b
--- /dev/null
+++ b/tcc/include/locale.h
@@ -0,0 +1,91 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+#ifndef _INC_LOCALE
+#define _INC_LOCALE
+
+#include <_mingw.h>
+
+#pragma pack(push,_CRT_PACKING)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef NULL
+#ifdef __cplusplus
+#define NULL 0
+#else
+#define NULL ((void *)0)
+#endif
+#endif
+
+#define LC_ALL 0
+#define LC_COLLATE 1
+#define LC_CTYPE 2
+#define LC_MONETARY 3
+#define LC_NUMERIC 4
+#define LC_TIME 5
+
+#define LC_MIN LC_ALL
+#define LC_MAX LC_TIME
+
+#ifndef _LCONV_DEFINED
+#define _LCONV_DEFINED
+ struct lconv {
+ char *decimal_point;
+ char *thousands_sep;
+ char *grouping;
+ char *int_curr_symbol;
+ char *currency_symbol;
+ char *mon_decimal_point;
+ char *mon_thousands_sep;
+ char *mon_grouping;
+ char *positive_sign;
+ char *negative_sign;
+ char int_frac_digits;
+ char frac_digits;
+ char p_cs_precedes;
+ char p_sep_by_space;
+ char n_cs_precedes;
+ char n_sep_by_space;
+ char p_sign_posn;
+ char n_sign_posn;
+ };
+#endif
+
+#ifndef _CONFIG_LOCALE_SWT
+#define _CONFIG_LOCALE_SWT
+
+#define _ENABLE_PER_THREAD_LOCALE 0x1
+#define _DISABLE_PER_THREAD_LOCALE 0x2
+#define _ENABLE_PER_THREAD_LOCALE_GLOBAL 0x10
+#define _DISABLE_PER_THREAD_LOCALE_GLOBAL 0x20
+#define _ENABLE_PER_THREAD_LOCALE_NEW 0x100
+#define _DISABLE_PER_THREAD_LOCALE_NEW 0x200
+
+#endif
+
+ int __cdecl _configthreadlocale(int _Flag);
+ char *__cdecl setlocale(int _Category,const char *_Locale);
+ _CRTIMP struct lconv *__cdecl localeconv(void);
+ _locale_t __cdecl _get_current_locale(void);
+ _locale_t __cdecl _create_locale(int _Category,const char *_Locale);
+ void __cdecl _free_locale(_locale_t _Locale);
+ _locale_t __cdecl __get_current_locale(void);
+ _locale_t __cdecl __create_locale(int _Category,const char *_Locale);
+ void __cdecl __free_locale(_locale_t _Locale);
+
+#ifndef _WLOCALE_DEFINED
+#define _WLOCALE_DEFINED
+ _CRTIMP wchar_t *__cdecl _wsetlocale(int _Category,const wchar_t *_Locale);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#pragma pack(pop)
+#endif
diff --git a/tcc/include/malloc.h b/tcc/include/malloc.h
new file mode 100644
index 0000000..fc783a8
--- /dev/null
+++ b/tcc/include/malloc.h
@@ -0,0 +1,181 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+#ifndef _MALLOC_H_
+#define _MALLOC_H_
+
+#include <_mingw.h>
+
+#pragma pack(push,_CRT_PACKING)
+
+#ifndef _MM_MALLOC_H_INCLUDED
+#define _MM_MALLOC_H_INCLUDED
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef _WIN64
+#define _HEAP_MAXREQ 0xFFFFFFFFFFFFFFE0
+#else
+#define _HEAP_MAXREQ 0xFFFFFFE0
+#endif
+
+#ifndef _STATIC_ASSERT
+#define _STATIC_ASSERT(expr) extern void __static_assert_t(int [(expr)?1:-1])
+#endif
+
+/* Return codes for _heapwalk() */
+#define _HEAPEMPTY (-1)
+#define _HEAPOK (-2)
+#define _HEAPBADBEGIN (-3)
+#define _HEAPBADNODE (-4)
+#define _HEAPEND (-5)
+#define _HEAPBADPTR (-6)
+
+/* Values for _heapinfo.useflag */
+#define _FREEENTRY 0
+#define _USEDENTRY 1
+
+#ifndef _HEAPINFO_DEFINED
+#define _HEAPINFO_DEFINED
+ /* The structure used to walk through the heap with _heapwalk. */
+ typedef struct _heapinfo {
+ int *_pentry;
+ size_t _size;
+ int _useflag;
+ } _HEAPINFO;
+#endif
+
+ extern unsigned int _amblksiz;
+
+#define _mm_free(a) _aligned_free(a)
+#define _mm_malloc(a,b) _aligned_malloc(a,b)
+
+#ifndef _CRT_ALLOCATION_DEFINED
+#define _CRT_ALLOCATION_DEFINED
+ void *__cdecl calloc(size_t _NumOfElements,size_t _SizeOfElements);
+ void __cdecl free(void *_Memory);
+ void *__cdecl malloc(size_t _Size);
+ void *__cdecl realloc(void *_Memory,size_t _NewSize);
+ _CRTIMP void *__cdecl _recalloc(void *_Memory,size_t _Count,size_t _Size);
+ /* _CRTIMP void __cdecl _aligned_free(void *_Memory);
+ _CRTIMP void *__cdecl _aligned_malloc(size_t _Size,size_t _Alignment); */
+ _CRTIMP void *__cdecl _aligned_offset_malloc(size_t _Size,size_t _Alignment,size_t _Offset);
+ _CRTIMP void *__cdecl _aligned_realloc(void *_Memory,size_t _Size,size_t _Alignment);
+ _CRTIMP void *__cdecl _aligned_recalloc(void *_Memory,size_t _Count,size_t _Size,size_t _Alignment);
+ _CRTIMP void *__cdecl _aligned_offset_realloc(void *_Memory,size_t _Size,size_t _Alignment,size_t _Offset);
+ _CRTIMP void *__cdecl _aligned_offset_recalloc(void *_Memory,size_t _Count,size_t _Size,size_t _Alignment,size_t _Offset);
+#endif
+
+#define _MAX_WAIT_MALLOC_CRT 60000
+
+ _CRTIMP int __cdecl _resetstkoflw (void);
+ _CRTIMP unsigned long __cdecl _set_malloc_crt_max_wait(unsigned long _NewValue);
+
+ _CRTIMP void *__cdecl _expand(void *_Memory,size_t _NewSize);
+ _CRTIMP size_t __cdecl _msize(void *_Memory);
+#ifdef __GNUC__
+#undef _alloca
+#define _alloca(x) __builtin_alloca((x))
+#else
+ /* tcc implements alloca internally and exposes it (since commit d778bde7).
+ /* alloca is declared at include/stddef.h (which is distributed with tcc).
+ */
+#ifdef _alloca
+#undef _alloca
+#endif
+#define _alloca(x) alloca((x))
+#endif
+ _CRTIMP size_t __cdecl _get_sbh_threshold(void);
+ _CRTIMP int __cdecl _set_sbh_threshold(size_t _NewValue);
+ _CRTIMP errno_t __cdecl _set_amblksiz(size_t _Value);
+ _CRTIMP errno_t __cdecl _get_amblksiz(size_t *_Value);
+ _CRTIMP int __cdecl _heapadd(void *_Memory,size_t _Size);
+ _CRTIMP int __cdecl _heapchk(void);
+ _CRTIMP int __cdecl _heapmin(void);
+ _CRTIMP int __cdecl _heapset(unsigned int _Fill);
+ _CRTIMP int __cdecl _heapwalk(_HEAPINFO *_EntryInfo);
+ _CRTIMP size_t __cdecl _heapused(size_t *_Used,size_t *_Commit);
+ _CRTIMP intptr_t __cdecl _get_heap_handle(void);
+
+#define _ALLOCA_S_THRESHOLD 1024
+#define _ALLOCA_S_STACK_MARKER 0xCCCC
+#define _ALLOCA_S_HEAP_MARKER 0xDDDD
+
+#if(defined(_X86_) && !defined(__x86_64))
+#define _ALLOCA_S_MARKER_SIZE 8
+#elif defined(__ia64__) || defined(__x86_64)
+#define _ALLOCA_S_MARKER_SIZE 16
+#endif
+
+#if !defined(RC_INVOKED)
+ static __inline void *_MarkAllocaS(void *_Ptr,unsigned int _Marker) {
+ if(_Ptr) {
+ *((unsigned int*)_Ptr) = _Marker;
+ _Ptr = (char*)_Ptr + _ALLOCA_S_MARKER_SIZE;
+ }
+ return _Ptr;
+ }
+#endif
+
+#undef _malloca
+#define _malloca(size) \
+ ((((size) + _ALLOCA_S_MARKER_SIZE) <= _ALLOCA_S_THRESHOLD) ? \
+ _MarkAllocaS(_alloca((size) + _ALLOCA_S_MARKER_SIZE),_ALLOCA_S_STACK_MARKER) : \
+ _MarkAllocaS(malloc((size) + _ALLOCA_S_MARKER_SIZE),_ALLOCA_S_HEAP_MARKER))
+#undef _FREEA_INLINE
+#define _FREEA_INLINE
+
+#ifndef RC_INVOKED
+#undef _freea
+ static __inline void __cdecl _freea(void *_Memory) {
+ unsigned int _Marker;
+ if(_Memory) {
+ _Memory = (char*)_Memory - _ALLOCA_S_MARKER_SIZE;
+ _Marker = *(unsigned int *)_Memory;
+ if(_Marker==_ALLOCA_S_HEAP_MARKER) {
+ free(_Memory);
+ }
+#ifdef _ASSERTE
+ else if(_Marker!=_ALLOCA_S_STACK_MARKER) {
+ _ASSERTE(("Corrupted pointer passed to _freea",0));
+ }
+#endif
+ }
+ }
+#endif /* RC_INVOKED */
+
+#ifndef NO_OLDNAMES
+#ifdef __GNUC__
+#undef alloca
+#define alloca(x) __builtin_alloca((x))
+#endif
+#endif
+
+#ifdef HEAPHOOK
+#ifndef _HEAPHOOK_DEFINED
+#define _HEAPHOOK_DEFINED
+ typedef int (__cdecl *_HEAPHOOK)(int,size_t,void *,void **);
+#endif
+
+ _CRTIMP _HEAPHOOK __cdecl _setheaphook(_HEAPHOOK _NewHook);
+
+#define _HEAP_MALLOC 1
+#define _HEAP_CALLOC 2
+#define _HEAP_FREE 3
+#define _HEAP_REALLOC 4
+#define _HEAP_MSIZE 5
+#define _HEAP_EXPAND 6
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#pragma pack(pop)
+
+#endif /* _MALLOC_H_ */
diff --git a/tcc/include/math.h b/tcc/include/math.h
new file mode 100644
index 0000000..74add20
--- /dev/null
+++ b/tcc/include/math.h
@@ -0,0 +1,737 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+#ifndef _MATH_H_
+#define _MATH_H_
+
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#include <_mingw.h>
+
+struct exception;
+
+#pragma pack(push,_CRT_PACKING)
+
+#define _DOMAIN 1
+#define _SING 2
+#define _OVERFLOW 3
+#define _UNDERFLOW 4
+#define _TLOSS 5
+#define _PLOSS 6
+
+#ifndef __STRICT_ANSI__
+#ifndef NO_OLDNAMES
+#define DOMAIN _DOMAIN
+#define SING _SING
+#define OVERFLOW _OVERFLOW
+#define UNDERFLOW _UNDERFLOW
+#define TLOSS _TLOSS
+#define PLOSS _PLOSS
+#endif
+#endif
+
+#ifndef __STRICT_ANSI__
+#define M_E 2.71828182845904523536
+#define M_LOG2E 1.44269504088896340736
+#define M_LOG10E 0.434294481903251827651
+#define M_LN2 0.693147180559945309417
+#define M_LN10 2.30258509299404568402
+#define M_PI 3.14159265358979323846
+#define M_PI_2 1.57079632679489661923
+#define M_PI_4 0.785398163397448309616
+#define M_1_PI 0.318309886183790671538
+#define M_2_PI 0.636619772367581343076
+#define M_2_SQRTPI 1.12837916709551257390
+#define M_SQRT2 1.41421356237309504880
+#define M_SQRT1_2 0.707106781186547524401
+#endif
+
+#ifndef __STRICT_ANSI__
+/* See also float.h */
+#ifndef __MINGW_FPCLASS_DEFINED
+#define __MINGW_FPCLASS_DEFINED 1
+#define _FPCLASS_SNAN 0x0001 /* Signaling "Not a Number" */
+#define _FPCLASS_QNAN 0x0002 /* Quiet "Not a Number" */
+#define _FPCLASS_NINF 0x0004 /* Negative Infinity */
+#define _FPCLASS_NN 0x0008 /* Negative Normal */
+#define _FPCLASS_ND 0x0010 /* Negative Denormal */
+#define _FPCLASS_NZ 0x0020 /* Negative Zero */
+#define _FPCLASS_PZ 0x0040 /* Positive Zero */
+#define _FPCLASS_PD 0x0080 /* Positive Denormal */
+#define _FPCLASS_PN 0x0100 /* Positive Normal */
+#define _FPCLASS_PINF 0x0200 /* Positive Infinity */
+#endif
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _EXCEPTION_DEFINED
+#define _EXCEPTION_DEFINED
+ struct _exception {
+ int type;
+ char *name;
+ double arg1;
+ double arg2;
+ double retval;
+ };
+#endif
+
+#ifndef _COMPLEX_DEFINED
+#define _COMPLEX_DEFINED
+ struct _complex {
+ double x,y;
+ };
+#endif
+
+#define EDOM 33
+#define ERANGE 34
+
+#ifndef _HUGE
+#ifdef _MSVCRT_
+ extern double *_HUGE;
+#else
+ extern double *_imp___HUGE;
+#define _HUGE (*_imp___HUGE)
+#endif
+#endif
+
+#define HUGE_VAL _HUGE
+
+#ifndef _CRT_ABS_DEFINED
+#define _CRT_ABS_DEFINED
+ int __cdecl abs(int _X);
+ long __cdecl labs(long _X);
+#endif
+ double __cdecl acos(double _X);
+ double __cdecl asin(double _X);
+ double __cdecl atan(double _X);
+ double __cdecl atan2(double _Y,double _X);
+#ifndef _SIGN_DEFINED
+#define _SIGN_DEFINED
+ _CRTIMP double __cdecl _copysign (double _Number,double _Sign);
+ _CRTIMP double __cdecl _chgsign (double _X);
+#endif
+ double __cdecl cos(double _X);
+ double __cdecl cosh(double _X);
+ double __cdecl exp(double _X);
+ double __cdecl expm1(double _X);
+ double __cdecl fabs(double _X);
+ double __cdecl fmod(double _X,double _Y);
+ double __cdecl log(double _X);
+ double __cdecl log10(double _X);
+ double __cdecl pow(double _X,double _Y);
+ double __cdecl sin(double _X);
+ double __cdecl sinh(double _X);
+ double __cdecl tan(double _X);
+ double __cdecl tanh(double _X);
+ double __cdecl sqrt(double _X);
+#ifndef _CRT_ATOF_DEFINED
+#define _CRT_ATOF_DEFINED
+ double __cdecl atof(const char *_String);
+ double __cdecl _atof_l(const char *_String,_locale_t _Locale);
+#endif
+
+ _CRTIMP double __cdecl _cabs(struct _complex _ComplexA);
+ double __cdecl ceil(double _X);
+ double __cdecl floor(double _X);
+ double __cdecl frexp(double _X,int *_Y);
+ double __cdecl _hypot(double _X,double _Y);
+ _CRTIMP double __cdecl _j0(double _X);
+ _CRTIMP double __cdecl _j1(double _X);
+ _CRTIMP double __cdecl _jn(int _X,double _Y);
+ double __cdecl ldexp(double _X,int _Y);
+#ifndef _CRT_MATHERR_DEFINED
+#define _CRT_MATHERR_DEFINED
+ int __cdecl _matherr(struct _exception *_Except);
+#endif
+ double __cdecl modf(double _X,double *_Y);
+ _CRTIMP double __cdecl _y0(double _X);
+ _CRTIMP double __cdecl _y1(double _X);
+ _CRTIMP double __cdecl _yn(int _X,double _Y);
+
+#if(defined(_X86_) && !defined(__x86_64))
+ _CRTIMP int __cdecl _set_SSE2_enable(int _Flag);
+ /* from libmingwex */
+ float __cdecl _hypotf(float _X,float _Y);
+#endif
+
+ float frexpf(float _X,int *_Y);
+ float __cdecl ldexpf(float _X,int _Y);
+ long double __cdecl ldexpl(long double _X,int _Y);
+ float __cdecl acosf(float _X);
+ float __cdecl asinf(float _X);
+ float __cdecl atanf(float _X);
+ float __cdecl atan2f(float _X,float _Y);
+ float __cdecl cosf(float _X);
+ float __cdecl sinf(float _X);
+ float __cdecl tanf(float _X);
+ float __cdecl coshf(float _X);
+ float __cdecl sinhf(float _X);
+ float __cdecl tanhf(float _X);
+ float __cdecl expf(float _X);
+ float __cdecl expm1f(float _X);
+ float __cdecl logf(float _X);
+ float __cdecl log10f(float _X);
+ float __cdecl modff(float _X,float *_Y);
+ float __cdecl powf(float _X,float _Y);
+ float __cdecl sqrtf(float _X);
+ float __cdecl ceilf(float _X);
+ float __cdecl floorf(float _X);
+ float __cdecl fmodf(float _X,float _Y);
+ float __cdecl _hypotf(float _X,float _Y);
+ float __cdecl fabsf(float _X);
+#if !defined(__ia64__)
+ /* from libmingwex */
+ float __cdecl _copysignf (float _Number,float _Sign);
+ float __cdecl _chgsignf (float _X);
+ float __cdecl _logbf(float _X);
+ float __cdecl _nextafterf(float _X,float _Y);
+ int __cdecl _finitef(float _X);
+ int __cdecl _isnanf(float _X);
+ int __cdecl _fpclassf(float _X);
+#endif
+
+#ifndef __cplusplus
+ __CRT_INLINE long double __cdecl fabsl (long double x)
+ {
+ long double res;
+ __asm__ ("fabs;" : "=t" (res) : "0" (x));
+ return res;
+ }
+#define _hypotl(x,y) ((long double)_hypot((double)(x),(double)(y)))
+#define _matherrl _matherr
+ __CRT_INLINE long double _chgsignl(long double _Number) { return _chgsign((double)(_Number)); }
+ __CRT_INLINE long double _copysignl(long double _Number,long double _Sign) { return _copysign((double)(_Number),(double)(_Sign)); }
+ __CRT_INLINE float frexpf(float _X,int *_Y) { return ((float)frexp((double)_X,_Y)); }
+
+#if !defined (__ia64__)
+ __CRT_INLINE float __cdecl fabsf (float x)
+ {
+ float res;
+ __asm__ ("fabs;" : "=t" (res) : "0" (x));
+ return res;
+ }
+
+ __CRT_INLINE float __cdecl ldexpf (float x, int expn) { return (float) ldexp (x, expn); }
+#endif
+#else
+ // cplusplus
+ __CRT_INLINE long double __cdecl fabsl (long double x)
+ {
+ long double res;
+ __asm__ ("fabs;" : "=t" (res) : "0" (x));
+ return res;
+ }
+ __CRT_INLINE long double modfl(long double _X,long double *_Y) {
+ double _Di,_Df = modf((double)_X,&_Di);
+ *_Y = (long double)_Di;
+ return (_Df);
+ }
+ __CRT_INLINE long double _chgsignl(long double _Number) { return _chgsign(static_cast<double>(_Number)); }
+ __CRT_INLINE long double _copysignl(long double _Number,long double _Sign) { return _copysign(static_cast<double>(_Number),static_cast<double>(_Sign)); }
+ __CRT_INLINE float frexpf(float _X,int *_Y) { return ((float)frexp((double)_X,_Y)); }
+#ifndef __ia64__
+ __CRT_INLINE float __cdecl fabsf (float x)
+ {
+ float res;
+ __asm__ ("fabs;" : "=t" (res) : "0" (x));
+ return res;
+ }
+ __CRT_INLINE float __cdecl ldexpf (float x, int expn) { return (float) ldexp (x, expn); }
+#ifndef __x86_64
+ __CRT_INLINE float acosf(float _X) { return ((float)acos((double)_X)); }
+ __CRT_INLINE float asinf(float _X) { return ((float)asin((double)_X)); }
+ __CRT_INLINE float atanf(float _X) { return ((float)atan((double)_X)); }
+ __CRT_INLINE float atan2f(float _X,float _Y) { return ((float)atan2((double)_X,(double)_Y)); }
+ __CRT_INLINE float ceilf(float _X) { return ((float)ceil((double)_X)); }
+ __CRT_INLINE float cosf(float _X) { return ((float)cos((double)_X)); }
+ __CRT_INLINE float coshf(float _X) { return ((float)cosh((double)_X)); }
+ __CRT_INLINE float expf(float _X) { return ((float)exp((double)_X)); }
+ __CRT_INLINE float floorf(float _X) { return ((float)floor((double)_X)); }
+ __CRT_INLINE float fmodf(float _X,float _Y) { return ((float)fmod((double)_X,(double)_Y)); }
+ __CRT_INLINE float logf(float _X) { return ((float)log((double)_X)); }
+ __CRT_INLINE float log10f(float _X) { return ((float)log10((double)_X)); }
+ __CRT_INLINE float modff(float _X,float *_Y) {
+ double _Di,_Df = modf((double)_X,&_Di);
+ *_Y = (float)_Di;
+ return ((float)_Df);
+ }
+ __CRT_INLINE float powf(float _X,float _Y) { return ((float)pow((double)_X,(double)_Y)); }
+ __CRT_INLINE float sinf(float _X) { return ((float)sin((double)_X)); }
+ __CRT_INLINE float sinhf(float _X) { return ((float)sinh((double)_X)); }
+ __CRT_INLINE float sqrtf(float _X) { return ((float)sqrt((double)_X)); }
+ __CRT_INLINE float tanf(float _X) { return ((float)tan((double)_X)); }
+ __CRT_INLINE float tanhf(float _X) { return ((float)tanh((double)_X)); }
+#endif
+#endif
+#endif
+
+#ifndef NO_OLDNAMES
+#define matherr _matherr
+
+#define HUGE _HUGE
+ /* double __cdecl cabs(struct _complex _X); */
+ double __cdecl hypot(double _X,double _Y);
+ _CRTIMP double __cdecl j0(double _X);
+ _CRTIMP double __cdecl j1(double _X);
+ _CRTIMP double __cdecl jn(int _X,double _Y);
+ _CRTIMP double __cdecl y0(double _X);
+ _CRTIMP double __cdecl y1(double _X);
+ _CRTIMP double __cdecl yn(int _X,double _Y);
+#endif
+
+#ifndef __NO_ISOCEXT
+#if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) \
+ || !defined __STRICT_ANSI__ || defined __GLIBCPP__
+
+#define NAN (0.0F/0.0F)
+#define HUGE_VALF (1.0F/0.0F)
+#define HUGE_VALL (1.0L/0.0L)
+#define INFINITY (1.0F/0.0F)
+
+
+#define FP_NAN 0x0100
+#define FP_NORMAL 0x0400
+#define FP_INFINITE (FP_NAN | FP_NORMAL)
+#define FP_ZERO 0x4000
+#define FP_SUBNORMAL (FP_NORMAL | FP_ZERO)
+ /* 0x0200 is signbit mask */
+
+
+ /*
+ We can't __CRT_INLINE float or double, because we want to ensure truncation
+ to semantic type before classification.
+ (A normal long double value might become subnormal when
+ converted to double, and zero when converted to float.)
+ */
+
+ extern int __cdecl __fpclassifyf (float);
+ extern int __cdecl __fpclassify (double);
+ extern int __cdecl __fpclassifyl (long double);
+
+/* Implemented at tcc/tcc_libm.h */
+#define fpclassify(x) (sizeof (x) == sizeof (float) ? __fpclassifyf (x) \
+ : sizeof (x) == sizeof (double) ? __fpclassify (x) \
+ : __fpclassifyl (x))
+
+ /* 7.12.3.2 */
+#define isfinite(x) ((fpclassify(x) & FP_NAN) == 0)
+
+ /* 7.12.3.3 */
+#define isinf(x) (fpclassify(x) == FP_INFINITE)
+
+ /* 7.12.3.4 */
+ /* We don't need to worry about truncation here:
+ A NaN stays a NaN. */
+#define isnan(x) (fpclassify(x) == FP_NAN)
+
+ /* 7.12.3.5 */
+#define isnormal(x) (fpclassify(x) == FP_NORMAL)
+
+ /* 7.12.3.6 The signbit macro */
+
+ extern int __cdecl __signbitf (float);
+ extern int __cdecl __signbit (double);
+ extern int __cdecl __signbitl (long double);
+
+/* Implemented at tcc/tcc_libm.h */
+#define signbit(x) (sizeof (x) == sizeof (float) ? __signbitf (x) \
+ : sizeof (x) == sizeof (double) ? __signbit (x) \
+ : __signbitl (x))
+
+ extern double __cdecl exp2(double);
+ extern float __cdecl exp2f(float);
+ extern long double __cdecl exp2l(long double);
+
+#define FP_ILOGB0 ((int)0x80000000)
+#define FP_ILOGBNAN ((int)0x80000000)
+ extern int __cdecl ilogb (double);
+ extern int __cdecl ilogbf (float);
+ extern int __cdecl ilogbl (long double);
+
+ extern double __cdecl log1p(double);
+ extern float __cdecl log1pf(float);
+ extern long double __cdecl log1pl(long double);
+
+ extern double __cdecl log2 (double);
+ extern float __cdecl log2f (float);
+ extern long double __cdecl log2l (long double);
+
+ extern double __cdecl logb (double);
+ extern float __cdecl logbf (float);
+ extern long double __cdecl logbl (long double);
+
+ __CRT_INLINE double __cdecl logb (double x)
+ {
+ double res;
+ __asm__ ("fxtract\n\t"
+ "fstp %%st" : "=t" (res) : "0" (x));
+ return res;
+ }
+
+ __CRT_INLINE float __cdecl logbf (float x)
+ {
+ float res;
+ __asm__ ("fxtract\n\t"
+ "fstp %%st" : "=t" (res) : "0" (x));
+ return res;
+ }
+
+ __CRT_INLINE long double __cdecl logbl (long double x)
+ {
+ long double res;
+ __asm__ ("fxtract\n\t"
+ "fstp %%st" : "=t" (res) : "0" (x));
+ return res;
+ }
+
+ extern long double __cdecl modfl (long double, long double*);
+
+ /* 7.12.6.13 */
+ extern double __cdecl scalbn (double, int);
+ extern float __cdecl scalbnf (float, int);
+ extern long double __cdecl scalbnl (long double, int);
+
+ extern double __cdecl scalbln (double, long);
+ extern float __cdecl scalblnf (float, long);
+ extern long double __cdecl scalblnl (long double, long);
+
+ /* 7.12.7.1 */
+ /* Implementations adapted from Cephes versions */
+ extern double __cdecl cbrt (double);
+ extern float __cdecl cbrtf (float);
+ extern long double __cdecl cbrtl (long double);
+
+ __CRT_INLINE float __cdecl hypotf (float x, float y)
+ { return (float) hypot (x, y);}
+ extern long double __cdecl hypotl (long double, long double);
+
+ extern long double __cdecl powl (long double, long double);
+ extern long double __cdecl expl(long double);
+ extern long double __cdecl expm1l(long double);
+ extern long double __cdecl coshl(long double);
+ extern long double __cdecl fabsl (long double);
+ extern long double __cdecl acosl(long double);
+ extern long double __cdecl asinl(long double);
+ extern long double __cdecl atanl(long double);
+ extern long double __cdecl atan2l(long double,long double);
+ extern long double __cdecl sinhl(long double);
+ extern long double __cdecl tanhl(long double);
+
+ /* 7.12.8.1 The erf functions */
+ extern double __cdecl erf (double);
+ extern float __cdecl erff (float);
+ /* TODO
+ extern long double __cdecl erfl (long double);
+ */
+
+ /* 7.12.8.2 The erfc functions */
+ extern double __cdecl erfc (double);
+ extern float __cdecl erfcf (float);
+ /* TODO
+ extern long double __cdecl erfcl (long double);
+ */
+
+ /* 7.12.8.3 The lgamma functions */
+ extern double __cdecl lgamma (double);
+ extern float __cdecl lgammaf (float);
+ extern long double __cdecl lgammal (long double);
+
+ /* 7.12.8.4 The tgamma functions */
+ extern double __cdecl tgamma (double);
+ extern float __cdecl tgammaf (float);
+ extern long double __cdecl tgammal (long double);
+
+ extern long double __cdecl ceill (long double);
+ extern long double __cdecl floorl (long double);
+ extern long double __cdecl frexpl(long double,int *);
+ extern long double __cdecl log10l(long double);
+ extern long double __cdecl logl(long double);
+ extern long double __cdecl cosl(long double);
+ extern long double __cdecl sinl(long double);
+ extern long double __cdecl tanl(long double);
+ extern long double sqrtl(long double);
+
+ /* 7.12.9.3 */
+ extern double __cdecl nearbyint ( double);
+ extern float __cdecl nearbyintf (float);
+ extern long double __cdecl nearbyintl (long double);
+
+ /* 7.12.9.4 */
+ /* round, using fpu control word settings */
+ __CRT_INLINE double __cdecl rint (double x)
+ {
+ double retval;
+ __asm__ (
+ "fldl %1\n"
+ "frndint \n"
+ "fstl %0\n" : "=m" (retval) : "m" (x));
+ return retval;
+ }
+
+ __CRT_INLINE float __cdecl rintf (float x)
+ {
+ float retval;
+ __asm__ (
+ "flds %1\n"
+ "frndint \n"
+ "fsts %0\n" : "=m" (retval) : "m" (x));
+ return retval;
+ }
+
+ __CRT_INLINE long double __cdecl rintl (long double x)
+ {
+ long double retval;
+ __asm__ (
+ "fldt %1\n"
+ "frndint \n"
+ "fstt %0\n" : "=m" (retval) : "m" (x));
+ return retval;
+ }
+
+ /* 7.12.9.5 */
+ __CRT_INLINE long __cdecl lrint (double x)
+ {
+ long retval;
+ __asm__ __volatile__ \
+ ("fldl %1\n" \
+ "fistpl %0" : "=m" (retval) : "m" (x)); \
+ return retval;
+ }
+
+ __CRT_INLINE long __cdecl lrintf (float x)
+ {
+ long retval;
+ __asm__ __volatile__ \
+ ("flds %1\n" \
+ "fistpl %0" : "=m" (retval) : "m" (x)); \
+ return retval;
+ }
+
+ __CRT_INLINE long __cdecl lrintl (long double x)
+ {
+ long retval;
+ __asm__ __volatile__ \
+ ("fldt %1\n" \
+ "fistpl %0" : "=m" (retval) : "m" (x)); \
+ return retval;
+ }
+
+ __CRT_INLINE long long __cdecl llrint (double x)
+ {
+ long long retval;
+ __asm__ __volatile__ \
+ ("fldl %1\n" \
+ "fistpll %0" : "=m" (retval) : "m" (x)); \
+ return retval;
+ }
+
+ __CRT_INLINE long long __cdecl llrintf (float x)
+ {
+ long long retval;
+ __asm__ __volatile__ \
+ ("flds %1\n" \
+ "fistpll %0" : "=m" (retval) : "m" (x)); \
+ return retval;
+ }
+
+ __CRT_INLINE long long __cdecl llrintl (long double x)
+ {
+ long long retval;
+ __asm__ __volatile__ \
+ ("fldt %1\n" \
+ "fistpll %0" : "=m" (retval) : "m" (x)); \
+ return retval;
+ }
+
+ #define FE_TONEAREST 0x0000
+ #define FE_DOWNWARD 0x0400
+ #define FE_UPWARD 0x0800
+ #define FE_TOWARDZERO 0x0c00
+
+ __CRT_INLINE double trunc (double _x)
+ {
+ double retval;
+ unsigned short saved_cw;
+ unsigned short tmp_cw;
+ __asm__ ("fnstcw %0;" : "=m" (saved_cw)); /* save FPU control word */
+ tmp_cw = (saved_cw & ~(FE_TONEAREST | FE_DOWNWARD | FE_UPWARD | FE_TOWARDZERO))
+ | FE_TOWARDZERO;
+ __asm__ ("fldcw %0;" : : "m" (tmp_cw));
+ __asm__ ("fldl %1;"
+ "frndint;"
+ "fstl %0;" : "=m" (retval) : "m" (_x)); /* round towards zero */
+ __asm__ ("fldcw %0;" : : "m" (saved_cw) ); /* restore saved control word */
+ return retval;
+ }
+
+ /* 7.12.9.6 */
+ /* round away from zero, regardless of fpu control word settings */
+ extern double __cdecl round (double);
+ extern float __cdecl roundf (float);
+ extern long double __cdecl roundl (long double);
+
+ /* 7.12.9.7 */
+ extern long __cdecl lround (double);
+ extern long __cdecl lroundf (float);
+ extern long __cdecl lroundl (long double);
+
+ extern long long __cdecl llround (double);
+ extern long long __cdecl llroundf (float);
+ extern long long __cdecl llroundl (long double);
+
+ /* 7.12.9.8 */
+ /* round towards zero, regardless of fpu control word settings */
+ extern double __cdecl trunc (double);
+ extern float __cdecl truncf (float);
+ extern long double __cdecl truncl (long double);
+
+ extern long double __cdecl fmodl (long double, long double);
+
+ /* 7.12.10.2 */
+ extern double __cdecl remainder (double, double);
+ extern float __cdecl remainderf (float, float);
+ extern long double __cdecl remainderl (long double, long double);
+
+ /* 7.12.10.3 */
+ extern double __cdecl remquo(double, double, int *);
+ extern float __cdecl remquof(float, float, int *);
+ extern long double __cdecl remquol(long double, long double, int *);
+
+ /* 7.12.11.1 */
+ extern double __cdecl copysign (double, double); /* in libmoldname.a */
+ extern float __cdecl copysignf (float, float);
+ extern long double __cdecl copysignl (long double, long double);
+
+ /* 7.12.11.2 Return a NaN */
+ extern double __cdecl nan(const char *tagp);
+ extern float __cdecl nanf(const char *tagp);
+ extern long double __cdecl nanl(const char *tagp);
+
+#ifndef __STRICT_ANSI__
+#define _nan() nan("")
+#define _nanf() nanf("")
+#define _nanl() nanl("")
+#endif
+
+ /* 7.12.11.3 */
+ extern double __cdecl nextafter (double, double); /* in libmoldname.a */
+ extern float __cdecl nextafterf (float, float);
+ extern long double __cdecl nextafterl (long double, long double);
+
+ /* 7.12.11.4 The nexttoward functions: TODO */
+
+ /* 7.12.12.1 */
+ /* x > y ? (x - y) : 0.0 */
+ extern double __cdecl fdim (double x, double y);
+ extern float __cdecl fdimf (float x, float y);
+ extern long double __cdecl fdiml (long double x, long double y);
+
+ /* fmax and fmin.
+ NaN arguments are treated as missing data: if one argument is a NaN
+ and the other numeric, then these functions choose the numeric
+ value. */
+
+ /* 7.12.12.2 */
+ extern double __cdecl fmax (double, double);
+ extern float __cdecl fmaxf (float, float);
+ extern long double __cdecl fmaxl (long double, long double);
+
+ /* 7.12.12.3 */
+ extern double __cdecl fmin (double, double);
+ extern float __cdecl fminf (float, float);
+ extern long double __cdecl fminl (long double, long double);
+
+ /* 7.12.13.1 */
+ /* return x * y + z as a ternary op */
+ extern double __cdecl fma (double, double, double);
+ extern float __cdecl fmaf (float, float, float);
+ extern long double __cdecl fmal (long double, long double, long double);
+
+
+#if 0 // gr: duplicate, see below
+ /* 7.12.14 */
+ /*
+ * With these functions, comparisons involving quiet NaNs set the FP
+ * condition code to "unordered". The IEEE floating-point spec
+ * dictates that the result of floating-point comparisons should be
+ * false whenever a NaN is involved, with the exception of the != op,
+ * which always returns true: yes, (NaN != NaN) is true).
+ */
+
+#if __GNUC__ >= 3
+
+#define isgreater(x, y) __builtin_isgreater(x, y)
+#define isgreaterequal(x, y) __builtin_isgreaterequal(x, y)
+#define isless(x, y) __builtin_isless(x, y)
+#define islessequal(x, y) __builtin_islessequal(x, y)
+#define islessgreater(x, y) __builtin_islessgreater(x, y)
+#define isunordered(x, y) __builtin_isunordered(x, y)
+
+#else
+ /* helper */
+ __CRT_INLINE int __cdecl
+ __fp_unordered_compare (long double x, long double y){
+ unsigned short retval;
+ __asm__ ("fucom %%st(1);"
+ "fnstsw;": "=a" (retval) : "t" (x), "u" (y));
+ return retval;
+ }
+
+#define isgreater(x, y) ((__fp_unordered_compare(x, y) \
+ & 0x4500) == 0)
+#define isless(x, y) ((__fp_unordered_compare (y, x) \
+ & 0x4500) == 0)
+#define isgreaterequal(x, y) ((__fp_unordered_compare (x, y) \
+ & FP_INFINITE) == 0)
+#define islessequal(x, y) ((__fp_unordered_compare(y, x) \
+ & FP_INFINITE) == 0)
+#define islessgreater(x, y) ((__fp_unordered_compare(x, y) \
+ & FP_SUBNORMAL) == 0)
+#define isunordered(x, y) ((__fp_unordered_compare(x, y) \
+ & 0x4500) == 0x4500)
+
+#endif
+#endif //0
+
+
+#endif /* __STDC_VERSION__ >= 199901L */
+#endif /* __NO_ISOCEXT */
+
+#ifdef __cplusplus
+}
+extern "C++" {
+ template<class _Ty> inline _Ty _Pow_int(_Ty _X,int _Y) {
+ unsigned int _N;
+ if(_Y >= 0) _N = (unsigned int)_Y;
+ else _N = (unsigned int)(-_Y);
+ for(_Ty _Z = _Ty(1);;_X *= _X) {
+ if((_N & 1)!=0) _Z *= _X;
+ if((_N >>= 1)==0) return (_Y < 0 ? _Ty(1) / _Z : _Z);
+ }
+ }
+}
+#endif
+
+#pragma pack(pop)
+
+/* 7.12.14 */
+/*
+ * With these functions, comparisons involving quiet NaNs set the FP
+ * condition code to "unordered". The IEEE floating-point spec
+ * dictates that the result of floating-point comparisons should be
+ * false whenever a NaN is involved, with the exception of the != op,
+ * which always returns true: yes, (NaN != NaN) is true).
+ */
+
+/* Mini libm (inline __fpclassify*, __signbit* and variants) */
+#include "tcc/tcc_libm.h"
+
+#endif /* End _MATH_H_ */
+
diff --git a/tcc/include/mem.h b/tcc/include/mem.h
new file mode 100644
index 0000000..2552023
--- /dev/null
+++ b/tcc/include/mem.h
@@ -0,0 +1,13 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+/*
+ * This file is part of the Mingw32 package.
+ *
+ * mem.h maps to string.h
+ */
+#ifndef __STRICT_ANSI__
+#include <string.h>
+#endif
diff --git a/tcc/include/memory.h b/tcc/include/memory.h
new file mode 100644
index 0000000..90d88ae
--- /dev/null
+++ b/tcc/include/memory.h
@@ -0,0 +1,40 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+#ifndef _INC_MEMORY
+#define _INC_MEMORY
+
+#include <_mingw.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _CONST_RETURN
+#define _CONST_RETURN
+#endif
+
+#define _WConst_return _CONST_RETURN
+
+#ifndef _CRT_MEMORY_DEFINED
+#define _CRT_MEMORY_DEFINED
+ _CRTIMP void *__cdecl _memccpy(void *_Dst,const void *_Src,int _Val,size_t _MaxCount);
+ _CONST_RETURN void *__cdecl memchr(const void *_Buf ,int _Val,size_t _MaxCount);
+ _CRTIMP int __cdecl _memicmp(const void *_Buf1,const void *_Buf2,size_t _Size);
+ _CRTIMP int __cdecl _memicmp_l(const void *_Buf1,const void *_Buf2,size_t _Size,_locale_t _Locale);
+ int __cdecl memcmp(const void *_Buf1,const void *_Buf2,size_t _Size);
+ void *__cdecl memcpy(void *_Dst,const void *_Src,size_t _Size);
+ void *__cdecl memset(void *_Dst,int _Val,size_t _Size);
+
+#ifndef NO_OLDNAMES
+ void *__cdecl memccpy(void *_Dst,const void *_Src,int _Val,size_t _Size);
+ int __cdecl memicmp(const void *_Buf1,const void *_Buf2,size_t _Size);
+#endif
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/process.h b/tcc/include/process.h
new file mode 100644
index 0000000..dadaf2b
--- /dev/null
+++ b/tcc/include/process.h
@@ -0,0 +1,176 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+#ifndef _INC_PROCESS
+#define _INC_PROCESS
+
+#include <_mingw.h>
+
+/* Includes a definition of _pid_t and pid_t */
+#include <sys/types.h>
+
+#ifndef _POSIX_
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define _P_WAIT 0
+#define _P_NOWAIT 1
+#define _OLD_P_OVERLAY 2
+#define _P_NOWAITO 3
+#define _P_DETACH 4
+#define _P_OVERLAY 2
+
+#define _WAIT_CHILD 0
+#define _WAIT_GRANDCHILD 1
+
+ _CRTIMP uintptr_t __cdecl _beginthread(void (__cdecl *_StartAddress) (void *),unsigned _StackSize,void *_ArgList);
+ _CRTIMP void __cdecl _endthread(void);
+ _CRTIMP uintptr_t __cdecl _beginthreadex(void *_Security,unsigned _StackSize,unsigned (__stdcall *_StartAddress) (void *),void *_ArgList,unsigned _InitFlag,unsigned *_ThrdAddr);
+ _CRTIMP void __cdecl _endthreadex(unsigned _Retval);
+
+#ifndef _CRT_TERMINATE_DEFINED
+#define _CRT_TERMINATE_DEFINED
+ void __cdecl __MINGW_NOTHROW exit(int _Code) __MINGW_ATTRIB_NORETURN;
+ _CRTIMP void __cdecl __MINGW_NOTHROW _exit(int _Code) __MINGW_ATTRIB_NORETURN;
+
+#pragma push_macro("abort")
+#undef abort
+ void __cdecl __declspec(noreturn) abort(void);
+#pragma pop_macro("abort")
+
+#endif
+
+ _CRTIMP void __cdecl __MINGW_NOTHROW _cexit(void);
+ _CRTIMP void __cdecl __MINGW_NOTHROW _c_exit(void);
+ _CRTIMP int __cdecl _getpid(void);
+ _CRTIMP intptr_t __cdecl _cwait(int *_TermStat,intptr_t _ProcHandle,int _Action);
+ _CRTIMP intptr_t __cdecl _execl(const char *_Filename,const char *_ArgList,...);
+ _CRTIMP intptr_t __cdecl _execle(const char *_Filename,const char *_ArgList,...);
+ _CRTIMP intptr_t __cdecl _execlp(const char *_Filename,const char *_ArgList,...);
+ _CRTIMP intptr_t __cdecl _execlpe(const char *_Filename,const char *_ArgList,...);
+ _CRTIMP intptr_t __cdecl _execv(const char *_Filename,const char *const *_ArgList);
+ _CRTIMP intptr_t __cdecl _execve(const char *_Filename,const char *const *_ArgList,const char *const *_Env);
+ _CRTIMP intptr_t __cdecl _execvp(const char *_Filename,const char *const *_ArgList);
+ _CRTIMP intptr_t __cdecl _execvpe(const char *_Filename,const char *const *_ArgList,const char *const *_Env);
+ _CRTIMP intptr_t __cdecl _spawnl(int _Mode,const char *_Filename,const char *_ArgList,...);
+ _CRTIMP intptr_t __cdecl _spawnle(int _Mode,const char *_Filename,const char *_ArgList,...);
+ _CRTIMP intptr_t __cdecl _spawnlp(int _Mode,const char *_Filename,const char *_ArgList,...);
+ _CRTIMP intptr_t __cdecl _spawnlpe(int _Mode,const char *_Filename,const char *_ArgList,...);
+ _CRTIMP intptr_t __cdecl _spawnv(int _Mode,const char *_Filename,const char *const *_ArgList);
+ _CRTIMP intptr_t __cdecl _spawnve(int _Mode,const char *_Filename,const char *const *_ArgList,const char *const *_Env);
+ _CRTIMP intptr_t __cdecl _spawnvp(int _Mode,const char *_Filename,const char *const *_ArgList);
+ _CRTIMP intptr_t __cdecl _spawnvpe(int _Mode,const char *_Filename,const char *const *_ArgList,const char *const *_Env);
+
+#ifndef _CRT_SYSTEM_DEFINED
+#define _CRT_SYSTEM_DEFINED
+ int __cdecl system(const char *_Command);
+#endif
+
+#ifndef _WPROCESS_DEFINED
+#define _WPROCESS_DEFINED
+ _CRTIMP intptr_t __cdecl _wexecl(const wchar_t *_Filename,const wchar_t *_ArgList,...);
+ _CRTIMP intptr_t __cdecl _wexecle(const wchar_t *_Filename,const wchar_t *_ArgList,...);
+ _CRTIMP intptr_t __cdecl _wexeclp(const wchar_t *_Filename,const wchar_t *_ArgList,...);
+ _CRTIMP intptr_t __cdecl _wexeclpe(const wchar_t *_Filename,const wchar_t *_ArgList,...);
+ _CRTIMP intptr_t __cdecl _wexecv(const wchar_t *_Filename,const wchar_t *const *_ArgList);
+ _CRTIMP intptr_t __cdecl _wexecve(const wchar_t *_Filename,const wchar_t *const *_ArgList,const wchar_t *const *_Env);
+ _CRTIMP intptr_t __cdecl _wexecvp(const wchar_t *_Filename,const wchar_t *const *_ArgList);
+ _CRTIMP intptr_t __cdecl _wexecvpe(const wchar_t *_Filename,const wchar_t *const *_ArgList,const wchar_t *const *_Env);
+ _CRTIMP intptr_t __cdecl _wspawnl(int _Mode,const wchar_t *_Filename,const wchar_t *_ArgList,...);
+ _CRTIMP intptr_t __cdecl _wspawnle(int _Mode,const wchar_t *_Filename,const wchar_t *_ArgList,...);
+ _CRTIMP intptr_t __cdecl _wspawnlp(int _Mode,const wchar_t *_Filename,const wchar_t *_ArgList,...);
+ _CRTIMP intptr_t __cdecl _wspawnlpe(int _Mode,const wchar_t *_Filename,const wchar_t *_ArgList,...);
+ _CRTIMP intptr_t __cdecl _wspawnv(int _Mode,const wchar_t *_Filename,const wchar_t *const *_ArgList);
+ _CRTIMP intptr_t __cdecl _wspawnve(int _Mode,const wchar_t *_Filename,const wchar_t *const *_ArgList,const wchar_t *const *_Env);
+ _CRTIMP intptr_t __cdecl _wspawnvp(int _Mode,const wchar_t *_Filename,const wchar_t *const *_ArgList);
+ _CRTIMP intptr_t __cdecl _wspawnvpe(int _Mode,const wchar_t *_Filename,const wchar_t *const *_ArgList,const wchar_t *const *_Env);
+#ifndef _CRT_WSYSTEM_DEFINED
+#define _CRT_WSYSTEM_DEFINED
+ _CRTIMP int __cdecl _wsystem(const wchar_t *_Command);
+#endif
+#endif
+
+ void __cdecl __security_init_cookie(void);
+#if (defined(_X86_) && !defined(__x86_64))
+ void __fastcall __security_check_cookie(uintptr_t _StackCookie);
+ __declspec(noreturn) void __cdecl __report_gsfailure(void);
+#else
+ void __cdecl __security_check_cookie(uintptr_t _StackCookie);
+ __declspec(noreturn) void __cdecl __report_gsfailure(uintptr_t _StackCookie);
+#endif
+ extern uintptr_t __security_cookie;
+
+ intptr_t __cdecl _loaddll(char *_Filename);
+ int __cdecl _unloaddll(intptr_t _Handle);
+ int (__cdecl *__cdecl _getdllprocaddr(intptr_t _Handle,char *_ProcedureName,intptr_t _Ordinal))(void);
+
+#ifdef _DECL_DLLMAIN
+#ifdef _WINDOWS_
+ WINBOOL WINAPI DllMain(HANDLE _HDllHandle,DWORD _Reason,LPVOID _Reserved);
+ WINBOOL WINAPI _CRT_INIT(HANDLE _HDllHandle,DWORD _Reason,LPVOID _Reserved);
+ WINBOOL WINAPI _wCRT_INIT(HANDLE _HDllHandle,DWORD _Reason,LPVOID _Reserved);
+ extern WINBOOL (WINAPI *const _pRawDllMain)(HANDLE,DWORD,LPVOID);
+#else
+ int __stdcall DllMain(void *_HDllHandle,unsigned _Reason,void *_Reserved);
+ int __stdcall _CRT_INIT(void *_HDllHandle,unsigned _Reason,void *_Reserved);
+ int __stdcall _wCRT_INIT(void *_HDllHandle,unsigned _Reason,void *_Reserved);
+ extern int (__stdcall *const _pRawDllMain)(void *,unsigned,void *);
+#endif
+#endif
+
+#ifndef NO_OLDNAMES
+#define P_WAIT _P_WAIT
+#define P_NOWAIT _P_NOWAIT
+#define P_OVERLAY _P_OVERLAY
+#define OLD_P_OVERLAY _OLD_P_OVERLAY
+#define P_NOWAITO _P_NOWAITO
+#define P_DETACH _P_DETACH
+#define WAIT_CHILD _WAIT_CHILD
+#define WAIT_GRANDCHILD _WAIT_GRANDCHILD
+
+ intptr_t __cdecl cwait(int *_TermStat,intptr_t _ProcHandle,int _Action);
+#ifdef __GNUC__
+ int __cdecl execl(const char *_Filename,const char *_ArgList,...);
+ int __cdecl execle(const char *_Filename,const char *_ArgList,...);
+ int __cdecl execlp(const char *_Filename,const char *_ArgList,...);
+ int __cdecl execlpe(const char *_Filename,const char *_ArgList,...);
+#else
+ intptr_t __cdecl execl(const char *_Filename,const char *_ArgList,...);
+ intptr_t __cdecl execle(const char *_Filename,const char *_ArgList,...);
+ intptr_t __cdecl execlp(const char *_Filename,const char *_ArgList,...);
+ intptr_t __cdecl execlpe(const char *_Filename,const char *_ArgList,...);
+#endif
+ intptr_t __cdecl spawnl(int,const char *_Filename,const char *_ArgList,...);
+ intptr_t __cdecl spawnle(int,const char *_Filename,const char *_ArgList,...);
+ intptr_t __cdecl spawnlp(int,const char *_Filename,const char *_ArgList,...);
+ intptr_t __cdecl spawnlpe(int,const char *_Filename,const char *_ArgList,...);
+ int __cdecl getpid(void);
+#ifdef __GNUC__
+ /* Those methods are predefined by gcc builtins to return int. So to prevent
+ stupid warnings, define them in POSIX way. This is save, because those
+ methods do not return in success case, so that the return value is not
+ really dependent to its scalar width. */
+ int __cdecl execv(const char *_Filename,const char *const _ArgList[]);
+ int __cdecl execve(const char *_Filename,const char *const _ArgList[],const char *const _Env[]);
+ int __cdecl execvp(const char *_Filename,const char *const _ArgList[]);
+ int __cdecl execvpe(const char *_Filename,const char *const _ArgList[],const char *const _Env[]);
+#else
+ intptr_t __cdecl execv(const char *_Filename,const char *const _ArgList[]);
+ intptr_t __cdecl execve(const char *_Filename,const char *const _ArgList[],const char *const _Env[]);
+ intptr_t __cdecl execvp(const char *_Filename,const char *const _ArgList[]);
+ intptr_t __cdecl execvpe(const char *_Filename,const char *const _ArgList[],const char *const _Env[]);
+#endif
+ intptr_t __cdecl spawnv(int,const char *_Filename,const char *const _ArgList[]);
+ intptr_t __cdecl spawnve(int,const char *_Filename,const char *const _ArgList[],const char *const _Env[]);
+ intptr_t __cdecl spawnvp(int,const char *_Filename,const char *const _ArgList[]);
+ intptr_t __cdecl spawnvpe(int,const char *_Filename,const char *const _ArgList[],char *const _Env[]);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif
+#endif
diff --git a/tcc/include/sec_api/conio_s.h b/tcc/include/sec_api/conio_s.h
new file mode 100644
index 0000000..98d97ba
--- /dev/null
+++ b/tcc/include/sec_api/conio_s.h
@@ -0,0 +1,42 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+
+#ifndef _INC_CONIO_S
+#define _INC_CONIO_S
+
+#include <conio.h>
+
+#if defined(MINGW_HAS_SECURE_API)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ _CRTIMP errno_t __cdecl _cgets_s(char *_Buffer,size_t _Size,size_t *_SizeRead);
+ _CRTIMP int __cdecl _cprintf_s(const char *_Format,...);
+ _CRTIMP int __cdecl _cscanf_s(const char *_Format,...);
+ _CRTIMP int __cdecl _cscanf_s_l(const char *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _vcprintf_s(const char *_Format,va_list _ArgList);
+ _CRTIMP int __cdecl _cprintf_s_l(const char *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _vcprintf_s_l(const char *_Format,_locale_t _Locale,va_list _ArgList);
+
+#ifndef _WCONIO_DEFINED_S
+#define _WCONIO_DEFINED_S
+ _CRTIMP errno_t __cdecl _cgetws_s(wchar_t *_Buffer,size_t _SizeInWords,size_t *_SizeRead);
+ _CRTIMP int __cdecl _cwprintf_s(const wchar_t *_Format,...);
+ _CRTIMP int __cdecl _cwscanf_s(const wchar_t *_Format,...);
+ _CRTIMP int __cdecl _cwscanf_s_l(const wchar_t *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _vcwprintf_s(const wchar_t *_Format,va_list _ArgList);
+ _CRTIMP int __cdecl _cwprintf_s_l(const wchar_t *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _vcwprintf_s_l(const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+#endif
diff --git a/tcc/include/sec_api/crtdbg_s.h b/tcc/include/sec_api/crtdbg_s.h
new file mode 100644
index 0000000..4598b4f
--- /dev/null
+++ b/tcc/include/sec_api/crtdbg_s.h
@@ -0,0 +1,19 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+
+#ifndef _INC_CRTDBG_S
+#define _INC_CRTDBG_S
+
+#include <crtdbg.h>
+
+#if defined(MINGW_HAS_SECURE_API)
+
+#define _dupenv_s_dbg(ps1,size,s2,t,f,l) _dupenv_s(ps1,size,s2)
+#define _wdupenv_s_dbg(ps1,size,s2,t,f,l) _wdupenv_s(ps1,size,s2)
+
+#endif
+
+#endif
diff --git a/tcc/include/sec_api/io_s.h b/tcc/include/sec_api/io_s.h
new file mode 100644
index 0000000..ec565a6
--- /dev/null
+++ b/tcc/include/sec_api/io_s.h
@@ -0,0 +1,33 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+#ifndef _INC_IO_S
+#define _INC_IO_S
+
+#include <io.h>
+
+#if defined(MINGW_HAS_SECURE_API)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ _CRTIMP errno_t __cdecl _access_s(const char *_Filename,int _AccessMode);
+ _CRTIMP errno_t __cdecl _chsize_s(int _FileHandle,__int64 _Size);
+ _CRTIMP errno_t __cdecl _mktemp_s(char *_TemplateName,size_t _Size);
+ _CRTIMP errno_t __cdecl _umask_s(int _NewMode,int *_OldMode);
+
+#ifndef _WIO_S_DEFINED
+#define _WIO_S_DEFINED
+ _CRTIMP errno_t __cdecl _waccess_s(const wchar_t *_Filename,int _AccessMode);
+ _CRTIMP errno_t __cdecl _wmktemp_s(wchar_t *_TemplateName,size_t _SizeInWords);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+#endif
diff --git a/tcc/include/sec_api/mbstring_s.h b/tcc/include/sec_api/mbstring_s.h
new file mode 100644
index 0000000..6b2b188
--- /dev/null
+++ b/tcc/include/sec_api/mbstring_s.h
@@ -0,0 +1,52 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+#ifndef _INC_MBSTRING_S
+#define _INC_MBSTRING_S
+
+#include <mbstring.h>
+
+#if defined(MINGW_HAS_SECURE_API)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _MBSTRING_S_DEFINED
+#define _MBSTRING_S_DEFINED
+ _CRTIMP errno_t __cdecl _mbscat_s(unsigned char *_Dst,size_t _DstSizeInBytes,const unsigned char *_Src);
+ _CRTIMP errno_t __cdecl _mbscat_s_l(unsigned char *_Dst,size_t _DstSizeInBytes,const unsigned char *_Src,_locale_t _Locale);
+ _CRTIMP errno_t __cdecl _mbscpy_s(unsigned char *_Dst,size_t _DstSizeInBytes,const unsigned char *_Src);
+ _CRTIMP errno_t __cdecl _mbscpy_s_l(unsigned char *_Dst,size_t _DstSizeInBytes,const unsigned char *_Src,_locale_t _Locale);
+ _CRTIMP errno_t __cdecl _mbslwr_s(unsigned char *_Str,size_t _SizeInBytes);
+ _CRTIMP errno_t __cdecl _mbslwr_s_l(unsigned char *_Str,size_t _SizeInBytes,_locale_t _Locale);
+ _CRTIMP errno_t __cdecl _mbsnbcat_s(unsigned char *_Dst,size_t _DstSizeInBytes,const unsigned char *_Src,size_t _MaxCount);
+ _CRTIMP errno_t __cdecl _mbsnbcat_s_l(unsigned char *_Dst,size_t _DstSizeInBytes,const unsigned char *_Src,size_t _MaxCount,_locale_t _Locale);
+ _CRTIMP errno_t __cdecl _mbsnbcpy_s(unsigned char *_Dst,size_t _DstSizeInBytes,const unsigned char *_Src,size_t _MaxCount);
+ _CRTIMP errno_t __cdecl _mbsnbcpy_s_l(unsigned char *_Dst,size_t _DstSizeInBytes,const unsigned char *_Src,size_t _MaxCount,_locale_t _Locale);
+ _CRTIMP errno_t __cdecl _mbsnbset_s(unsigned char *_Dst,size_t _DstSizeInBytes,unsigned int _Ch,size_t _MaxCount);
+ _CRTIMP errno_t __cdecl _mbsnbset_s_l(unsigned char *_Dst,size_t _DstSizeInBytes,unsigned int _Ch,size_t _MaxCount,_locale_t _Locale);
+ _CRTIMP errno_t __cdecl _mbsncat_s(unsigned char *_Dst,size_t _DstSizeInBytes,const unsigned char *_Src,size_t _MaxCount);
+ _CRTIMP errno_t __cdecl _mbsncat_s_l(unsigned char *_Dst,size_t _DstSizeInBytes,const unsigned char *_Src,size_t _MaxCount,_locale_t _Locale);
+ _CRTIMP errno_t __cdecl _mbsncpy_s(unsigned char *_Dst,size_t _DstSizeInBytes,const unsigned char *_Src,size_t _MaxCount);
+ _CRTIMP errno_t __cdecl _mbsncpy_s_l(unsigned char *_Dst,size_t _DstSizeInBytes,const unsigned char *_Src,size_t _MaxCount,_locale_t _Locale);
+ _CRTIMP errno_t __cdecl _mbsnset_s(unsigned char *_Dst,size_t _DstSizeInBytes,unsigned int _Val,size_t _MaxCount);
+ _CRTIMP errno_t __cdecl _mbsnset_s_l(unsigned char *_Dst,size_t _DstSizeInBytes,unsigned int _Val,size_t _MaxCount,_locale_t _Locale);
+ _CRTIMP errno_t __cdecl _mbsset_s(unsigned char *_Dst,size_t _DstSizeInBytes,unsigned int _Val);
+ _CRTIMP errno_t __cdecl _mbsset_s_l(unsigned char *_Dst,size_t _DstSizeInBytes,unsigned int _Val,_locale_t _Locale);
+ _CRTIMP unsigned char *__cdecl _mbstok_s(unsigned char *_Str,const unsigned char *_Delim,unsigned char **_Context);
+ _CRTIMP unsigned char *__cdecl _mbstok_s_l(unsigned char *_Str,const unsigned char *_Delim,unsigned char **_Context,_locale_t _Locale);
+ _CRTIMP errno_t __cdecl _mbsupr_s(unsigned char *_Str,size_t _SizeInBytes);
+ _CRTIMP errno_t __cdecl _mbsupr_s_l(unsigned char *_Str,size_t _SizeInBytes,_locale_t _Locale);
+ _CRTIMP errno_t __cdecl _mbccpy_s(unsigned char *_Dst,size_t _DstSizeInBytes,int *_PCopied,const unsigned char *_Src);
+ _CRTIMP errno_t __cdecl _mbccpy_s_l(unsigned char *_Dst,size_t _DstSizeInBytes,int *_PCopied,const unsigned char *_Src,_locale_t _Locale);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+#endif
diff --git a/tcc/include/sec_api/search_s.h b/tcc/include/sec_api/search_s.h
new file mode 100644
index 0000000..cae8998
--- /dev/null
+++ b/tcc/include/sec_api/search_s.h
@@ -0,0 +1,25 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+#ifndef _INC_SEARCH_S
+#define _INC_SEARCH_S
+
+#include <search.h>
+
+#if defined(MINGW_HAS_SECURE_API)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ _CRTIMP void *__cdecl _lfind_s(const void *_Key,const void *_Base,unsigned int *_NumOfElements,size_t _SizeOfElements,int (__cdecl *_PtFuncCompare)(void *,const void *,const void *),void *_Context);
+ _CRTIMP void *__cdecl _lsearch_s(const void *_Key,void *_Base,unsigned int *_NumOfElements,size_t _SizeOfElements,int (__cdecl *_PtFuncCompare)(void *,const void *,const void *),void *_Context);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+#endif
diff --git a/tcc/include/sec_api/stdio_s.h b/tcc/include/sec_api/stdio_s.h
new file mode 100644
index 0000000..c9b803b
--- /dev/null
+++ b/tcc/include/sec_api/stdio_s.h
@@ -0,0 +1,145 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+#ifndef _INC_STDIO_S
+#define _INC_STDIO_S
+
+#include <stdio.h>
+
+#if defined(MINGW_HAS_SECURE_API)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _STDIO_S_DEFINED
+#define _STDIO_S_DEFINED
+ _CRTIMP errno_t __cdecl clearerr_s(FILE *_File);
+ int __cdecl fprintf_s(FILE *_File,const char *_Format,...);
+ size_t __cdecl fread_s(void *_DstBuf,size_t _DstSize,size_t _ElementSize,size_t _Count,FILE *_File);
+ _CRTIMP int __cdecl _fscanf_s_l(FILE *_File,const char *_Format,_locale_t _Locale,...);
+ int __cdecl printf_s(const char *_Format,...);
+ _CRTIMP int __cdecl _scanf_l(const char *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _scanf_s_l(const char *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _snprintf_s(char *_DstBuf,size_t _DstSize,size_t _MaxCount,const char *_Format,...);
+ _CRTIMP int __cdecl _snprintf_c(char *_DstBuf,size_t _MaxCount,const char *_Format,...);
+ _CRTIMP int __cdecl _vsnprintf_c(char *_DstBuf,size_t _MaxCount,const char *_Format,va_list _ArgList);
+ int __cdecl sprintf_s(char *_DstBuf,size_t _DstSize,const char *_Format,...);
+ _CRTIMP int __cdecl _fscanf_l(FILE *_File,const char *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _sscanf_l(const char *_Src,const char *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _sscanf_s_l(const char *_Src,const char *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _snscanf_s(const char *_Src,size_t _MaxCount,const char *_Format,...);
+ _CRTIMP int __cdecl _snscanf_l(const char *_Src,size_t _MaxCount,const char *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _snscanf_s_l(const char *_Src,size_t _MaxCount,const char *_Format,_locale_t _Locale,...);
+ int __cdecl vfprintf_s(FILE *_File,const char *_Format,va_list _ArgList);
+ int __cdecl vprintf_s(const char *_Format,va_list _ArgList);
+ int __cdecl vsnprintf_s(char *_DstBuf,size_t _DstSize,size_t _MaxCount,const char *_Format,va_list _ArgList);
+ _CRTIMP int __cdecl _vsnprintf_s(char *_DstBuf,size_t _DstSize,size_t _MaxCount,const char *_Format,va_list _ArgList);
+ int __cdecl vsprintf_s(char *_DstBuf,size_t _Size,const char *_Format,va_list _ArgList);
+ _CRTIMP int __cdecl _fprintf_p(FILE *_File,const char *_Format,...);
+ _CRTIMP int __cdecl _printf_p(const char *_Format,...);
+ _CRTIMP int __cdecl _sprintf_p(char *_Dst,size_t _MaxCount,const char *_Format,...);
+ _CRTIMP int __cdecl _vfprintf_p(FILE *_File,const char *_Format,va_list _ArgList);
+ _CRTIMP int __cdecl _vprintf_p(const char *_Format,va_list _ArgList);
+ _CRTIMP int __cdecl _vsprintf_p(char *_Dst,size_t _MaxCount,const char *_Format,va_list _ArgList);
+ _CRTIMP int __cdecl _scprintf_p(const char *_Format,...);
+ _CRTIMP int __cdecl _vscprintf_p(const char *_Format,va_list _ArgList);
+ _CRTIMP int __cdecl _printf_l(const char *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _printf_p_l(const char *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _vprintf_l(const char *_Format,_locale_t _Locale,va_list _ArgList);
+ _CRTIMP int __cdecl _vprintf_p_l(const char *_Format,_locale_t _Locale,va_list _ArgList);
+ _CRTIMP int __cdecl _fprintf_l(FILE *_File,const char *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _fprintf_p_l(FILE *_File,const char *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _vfprintf_l(FILE *_File,const char *_Format,_locale_t _Locale,va_list _ArgList);
+ _CRTIMP int __cdecl _vfprintf_p_l(FILE *_File,const char *_Format,_locale_t _Locale,va_list _ArgList);
+ _CRTIMP int __cdecl _sprintf_l(char *_DstBuf,const char *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _sprintf_p_l(char *_DstBuf,size_t _MaxCount,const char *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _vsprintf_l(char *_DstBuf,const char *_Format,_locale_t,va_list _ArgList);
+ _CRTIMP int __cdecl _vsprintf_p_l(char *_DstBuf,size_t _MaxCount,const char *_Format,_locale_t _Locale,va_list _ArgList);
+ _CRTIMP int __cdecl _scprintf_l(const char *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _scprintf_p_l(const char *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _vscprintf_l(const char *_Format,_locale_t _Locale,va_list _ArgList);
+ _CRTIMP int __cdecl _vscprintf_p_l(const char *_Format,_locale_t _Locale,va_list _ArgList);
+ _CRTIMP int __cdecl _printf_s_l(const char *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _vprintf_s_l(const char *_Format,_locale_t _Locale,va_list _ArgList);
+ _CRTIMP int __cdecl _fprintf_s_l(FILE *_File,const char *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _vfprintf_s_l(FILE *_File,const char *_Format,_locale_t _Locale,va_list _ArgList);
+ _CRTIMP int __cdecl _sprintf_s_l(char *_DstBuf,size_t _DstSize,const char *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _vsprintf_s_l(char *_DstBuf,size_t _DstSize,const char *_Format,_locale_t _Locale,va_list _ArgList);
+ _CRTIMP int __cdecl _snprintf_s_l(char *_DstBuf,size_t _DstSize,size_t _MaxCount,const char *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _vsnprintf_s_l(char *_DstBuf,size_t _DstSize,size_t _MaxCount,const char *_Format,_locale_t _Locale,va_list _ArgList);
+ _CRTIMP int __cdecl _snprintf_l(char *_DstBuf,size_t _MaxCount,const char *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _snprintf_c_l(char *_DstBuf,size_t _MaxCount,const char *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _vsnprintf_l(char *_DstBuf,size_t _MaxCount,const char *_Format,_locale_t _Locale,va_list _ArgList);
+ _CRTIMP int __cdecl _vsnprintf_c_l(char *_DstBuf,size_t _MaxCount,const char *,_locale_t _Locale,va_list _ArgList);
+
+#ifndef _WSTDIO_S_DEFINED
+#define _WSTDIO_S_DEFINED
+ _CRTIMP wchar_t *__cdecl _getws_s(wchar_t *_Str,size_t _SizeInWords);
+ int __cdecl fwprintf_s(FILE *_File,const wchar_t *_Format,...);
+ int __cdecl wprintf_s(const wchar_t *_Format,...);
+ int __cdecl vwprintf_s(const wchar_t *_Format,va_list _ArgList);
+ int __cdecl swprintf_s(wchar_t *_Dst,size_t _SizeInWords,const wchar_t *_Format,...);
+ int __cdecl vswprintf_s(wchar_t *_Dst,size_t _SizeInWords,const wchar_t *_Format,va_list _ArgList);
+ _CRTIMP int __cdecl _snwprintf_s(wchar_t *_DstBuf,size_t _DstSizeInWords,size_t _MaxCount,const wchar_t *_Format,...);
+ _CRTIMP int __cdecl _vsnwprintf_s(wchar_t *_DstBuf,size_t _DstSizeInWords,size_t _MaxCount,const wchar_t *_Format,va_list _ArgList);
+ _CRTIMP int __cdecl _wprintf_s_l(const wchar_t *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _vwprintf_s_l(const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
+ _CRTIMP int __cdecl _fwprintf_s_l(FILE *_File,const wchar_t *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _vfwprintf_s_l(FILE *_File,const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
+ _CRTIMP int __cdecl _swprintf_s_l(wchar_t *_DstBuf,size_t _DstSize,const wchar_t *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _vswprintf_s_l(wchar_t *_DstBuf,size_t _DstSize,const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
+ _CRTIMP int __cdecl _snwprintf_s_l(wchar_t *_DstBuf,size_t _DstSize,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _vsnwprintf_s_l(wchar_t *_DstBuf,size_t _DstSize,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
+ _CRTIMP int __cdecl _fwscanf_s_l(FILE *_File,const wchar_t *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _swscanf_s_l(const wchar_t *_Src,const wchar_t *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _snwscanf_s(const wchar_t *_Src,size_t _MaxCount,const wchar_t *_Format,...);
+ _CRTIMP int __cdecl _snwscanf_s_l(const wchar_t *_Src,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _wscanf_s_l(const wchar_t *_Format,_locale_t _Locale,...);
+ _CRTIMP errno_t __cdecl _wfopen_s(FILE **_File,const wchar_t *_Filename,const wchar_t *_Mode);
+ _CRTIMP errno_t __cdecl _wfreopen_s(FILE **_File,const wchar_t *_Filename,const wchar_t *_Mode,FILE *_OldFile);
+ _CRTIMP errno_t __cdecl _wtmpnam_s(wchar_t *_DstBuf,size_t _SizeInWords);
+ _CRTIMP int __cdecl _fwprintf_p(FILE *_File,const wchar_t *_Format,...);
+ _CRTIMP int __cdecl _wprintf_p(const wchar_t *_Format,...);
+ _CRTIMP int __cdecl _vfwprintf_p(FILE *_File,const wchar_t *_Format,va_list _ArgList);
+ _CRTIMP int __cdecl _vwprintf_p(const wchar_t *_Format,va_list _ArgList);
+ _CRTIMP int __cdecl _swprintf_p(wchar_t *_DstBuf,size_t _MaxCount,const wchar_t *_Format,...);
+ _CRTIMP int __cdecl _vswprintf_p(wchar_t *_DstBuf,size_t _MaxCount,const wchar_t *_Format,va_list _ArgList);
+ _CRTIMP int __cdecl _scwprintf_p(const wchar_t *_Format,...);
+ _CRTIMP int __cdecl _vscwprintf_p(const wchar_t *_Format,va_list _ArgList);
+ _CRTIMP int __cdecl _wprintf_l(const wchar_t *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _wprintf_p_l(const wchar_t *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _vwprintf_l(const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
+ _CRTIMP int __cdecl _vwprintf_p_l(const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
+ _CRTIMP int __cdecl _fwprintf_l(FILE *_File,const wchar_t *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _fwprintf_p_l(FILE *_File,const wchar_t *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _vfwprintf_l(FILE *_File,const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
+ _CRTIMP int __cdecl _vfwprintf_p_l(FILE *_File,const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
+ _CRTIMP int __cdecl _swprintf_c_l(wchar_t *_DstBuf,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _swprintf_p_l(wchar_t *_DstBuf,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _vswprintf_c_l(wchar_t *_DstBuf,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
+ _CRTIMP int __cdecl _vswprintf_p_l(wchar_t *_DstBuf,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
+ _CRTIMP int __cdecl _scwprintf_l(const wchar_t *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _scwprintf_p_l(const wchar_t *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _vscwprintf_p_l(const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
+ _CRTIMP int __cdecl _snwprintf_l(wchar_t *_DstBuf,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _vsnwprintf_l(wchar_t *_DstBuf,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
+ _CRTIMP int __cdecl __swprintf_l(wchar_t *_Dest,const wchar_t *_Format,_locale_t _Plocinfo,...);
+ _CRTIMP int __cdecl __vswprintf_l(wchar_t *_Dest,const wchar_t *_Format,_locale_t _Plocinfo,va_list _Args);
+ _CRTIMP int __cdecl _vscwprintf_l(const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
+ _CRTIMP int __cdecl _fwscanf_l(FILE *_File,const wchar_t *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _swscanf_l(const wchar_t *_Src,const wchar_t *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _snwscanf_l(const wchar_t *_Src,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _wscanf_l(const wchar_t *_Format,_locale_t _Locale,...);
+#endif
+#endif
+
+ _CRTIMP size_t __cdecl _fread_nolock_s(void *_DstBuf,size_t _DstSize,size_t _ElementSize,size_t _Count,FILE *_File);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
+#endif
diff --git a/tcc/include/sec_api/stdlib_s.h b/tcc/include/sec_api/stdlib_s.h
new file mode 100644
index 0000000..f98262c
--- /dev/null
+++ b/tcc/include/sec_api/stdlib_s.h
@@ -0,0 +1,67 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+#ifndef _INC_STDLIB_S
+#define _INC_STDLIB_S
+
+#include <stdlib.h>
+
+#if defined(MINGW_HAS_SECURE_API)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ _CRTIMP errno_t __cdecl _dupenv_s(char **_PBuffer,size_t *_PBufferSizeInBytes,const char *_VarName);
+ _CRTIMP errno_t __cdecl _itoa_s(int _Value,char *_DstBuf,size_t _Size,int _Radix);
+#if _INTEGRAL_MAX_BITS >= 64
+ _CRTIMP errno_t __cdecl _i64toa_s(__int64 _Val,char *_DstBuf,size_t _Size,int _Radix);
+ _CRTIMP errno_t __cdecl _ui64toa_s(unsigned __int64 _Val,char *_DstBuf,size_t _Size,int _Radix);
+#endif
+ _CRTIMP errno_t __cdecl _ltoa_s(long _Val,char *_DstBuf,size_t _Size,int _Radix);
+ _CRTIMP errno_t __cdecl mbstowcs_s(size_t *_PtNumOfCharConverted,wchar_t *_DstBuf,size_t _SizeInWords,const char *_SrcBuf,size_t _MaxCount);
+ _CRTIMP errno_t __cdecl _mbstowcs_s_l(size_t *_PtNumOfCharConverted,wchar_t *_DstBuf,size_t _SizeInWords,const char *_SrcBuf,size_t _MaxCount,_locale_t _Locale);
+ _CRTIMP errno_t __cdecl _ultoa_s(unsigned long _Val,char *_DstBuf,size_t _Size,int _Radix);
+ _CRTIMP errno_t __cdecl _wctomb_s_l(int *_SizeConverted,char *_MbCh,size_t _SizeInBytes,wchar_t _WCh,_locale_t _Locale);
+ _CRTIMP errno_t __cdecl wcstombs_s(size_t *_PtNumOfCharConverted,char *_Dst,size_t _DstSizeInBytes,const wchar_t *_Src,size_t _MaxCountInBytes);
+ _CRTIMP errno_t __cdecl _wcstombs_s_l(size_t *_PtNumOfCharConverted,char *_Dst,size_t _DstSizeInBytes,const wchar_t *_Src,size_t _MaxCountInBytes,_locale_t _Locale);
+
+#ifndef _WSTDLIB_S_DEFINED
+#define _WSTDLIB_S_DEFINED
+ _CRTIMP errno_t __cdecl _itow_s (int _Val,wchar_t *_DstBuf,size_t _SizeInWords,int _Radix);
+ _CRTIMP errno_t __cdecl _ltow_s (long _Val,wchar_t *_DstBuf,size_t _SizeInWords,int _Radix);
+ _CRTIMP errno_t __cdecl _ultow_s (unsigned long _Val,wchar_t *_DstBuf,size_t _SizeInWords,int _Radix);
+ _CRTIMP errno_t __cdecl _wgetenv_s(size_t *_ReturnSize,wchar_t *_DstBuf,size_t _DstSizeInWords,const wchar_t *_VarName);
+ _CRTIMP errno_t __cdecl _wdupenv_s(wchar_t **_Buffer,size_t *_BufferSizeInWords,const wchar_t *_VarName);
+#if _INTEGRAL_MAX_BITS >= 64
+ _CRTIMP errno_t __cdecl _i64tow_s(__int64 _Val,wchar_t *_DstBuf,size_t _SizeInWords,int _Radix);
+ _CRTIMP errno_t __cdecl _ui64tow_s(unsigned __int64 _Val,wchar_t *_DstBuf,size_t _SizeInWords,int _Radix);
+#endif
+#endif
+
+#ifndef _POSIX_
+ _CRTIMP errno_t __cdecl _ecvt_s(char *_DstBuf,size_t _Size,double _Val,int _NumOfDights,int *_PtDec,int *_PtSign);
+ _CRTIMP errno_t __cdecl _fcvt_s(char *_DstBuf,size_t _Size,double _Val,int _NumOfDec,int *_PtDec,int *_PtSign);
+ _CRTIMP errno_t __cdecl _gcvt_s(char *_DstBuf,size_t _Size,double _Val,int _NumOfDigits);
+ _CRTIMP errno_t __cdecl _makepath_s(char *_PathResult,size_t _Size,const char *_Drive,const char *_Dir,const char *_Filename,const char *_Ext);
+ _CRTIMP errno_t __cdecl _putenv_s(const char *_Name,const char *_Value);
+ _CRTIMP errno_t __cdecl _searchenv_s(const char *_Filename,const char *_EnvVar,char *_ResultPath,size_t _SizeInBytes);
+ _CRTIMP errno_t __cdecl _splitpath_s(const char *_FullPath,char *_Drive,size_t _DriveSize,char *_Dir,size_t _DirSize,char *_Filename,size_t _FilenameSize,char *_Ext,size_t _ExtSize);
+
+#ifndef _WSTDLIBP_S_DEFINED
+#define _WSTDLIBP_S_DEFINED
+ _CRTIMP errno_t __cdecl _wmakepath_s(wchar_t *_PathResult,size_t _SizeInWords,const wchar_t *_Drive,const wchar_t *_Dir,const wchar_t *_Filename,const wchar_t *_Ext);
+ _CRTIMP errno_t __cdecl _wputenv_s(const wchar_t *_Name,const wchar_t *_Value);
+ _CRTIMP errno_t __cdecl _wsearchenv_s(const wchar_t *_Filename,const wchar_t *_EnvVar,wchar_t *_ResultPath,size_t _SizeInWords);
+ _CRTIMP errno_t __cdecl _wsplitpath_s(const wchar_t *_FullPath,wchar_t *_Drive,size_t _DriveSizeInWords,wchar_t *_Dir,size_t _DirSizeInWords,wchar_t *_Filename,size_t _FilenameSizeInWords,wchar_t *_Ext,size_t _ExtSizeInWords);
+#endif
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+#endif
diff --git a/tcc/include/sec_api/stralign_s.h b/tcc/include/sec_api/stralign_s.h
new file mode 100644
index 0000000..5b78f58
--- /dev/null
+++ b/tcc/include/sec_api/stralign_s.h
@@ -0,0 +1,30 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+#ifndef __STRALIGN_H_S_
+#define __STRALIGN_H_S_
+
+#include <stralign.h>
+
+#if defined(MINGW_HAS_SECURE_API)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if !defined(I_X86_) && defined(_WSTRING_S_DEFINED)
+#if defined(__cplusplus) && defined(_WConst_Return)
+ static __inline PUWSTR ua_wcscpy_s(PUWSTR Destination,size_t DestinationSize,PCUWSTR Source) {
+ if(WSTR_ALIGNED(Source) && WSTR_ALIGNED(Destination)) return (wcscpy_s((PWSTR)Destination,DestinationSize,(PCWSTR)Source)==0 ? Destination : NULL);
+ return uaw_wcscpy((PCUWSTR)String,Character);
+ }
+#endif
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif
+#endif
diff --git a/tcc/include/sec_api/string_s.h b/tcc/include/sec_api/string_s.h
new file mode 100644
index 0000000..9db70e7
--- /dev/null
+++ b/tcc/include/sec_api/string_s.h
@@ -0,0 +1,41 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+#ifndef _INC_STRING_S
+#define _INC_STRING_S
+
+#include <string.h>
+
+#if defined(MINGW_HAS_SECURE_API)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ _CRTIMP errno_t __cdecl _strset_s(char *_Dst,size_t _DstSize,int _Value);
+ _CRTIMP errno_t __cdecl _strerror_s(char *_Buf,size_t _SizeInBytes,const char *_ErrMsg);
+ _CRTIMP errno_t __cdecl _strlwr_s(char *_Str,size_t _Size);
+ _CRTIMP errno_t __cdecl _strlwr_s_l(char *_Str,size_t _Size,_locale_t _Locale);
+ _CRTIMP errno_t __cdecl _strnset_s(char *_Str,size_t _Size,int _Val,size_t _MaxCount);
+ _CRTIMP errno_t __cdecl _strupr_s(char *_Str,size_t _Size);
+ _CRTIMP errno_t __cdecl _strupr_s_l(char *_Str,size_t _Size,_locale_t _Locale);
+#ifndef _WSTRING_S_DEFINED
+#define _WSTRING_S_DEFINED
+ _CRTIMP wchar_t *__cdecl wcstok_s(wchar_t *_Str,const wchar_t *_Delim,wchar_t **_Context);
+ _CRTIMP errno_t __cdecl _wcserror_s(wchar_t *_Buf,size_t _SizeInWords,int _ErrNum);
+ _CRTIMP errno_t __cdecl __wcserror_s(wchar_t *_Buffer,size_t _SizeInWords,const wchar_t *_ErrMsg);
+ _CRTIMP errno_t __cdecl _wcsnset_s(wchar_t *_Dst,size_t _DstSizeInWords,wchar_t _Val,size_t _MaxCount);
+ _CRTIMP errno_t __cdecl _wcsset_s(wchar_t *_Str,size_t _SizeInWords,wchar_t _Val);
+ _CRTIMP errno_t __cdecl _wcslwr_s(wchar_t *_Str,size_t _SizeInWords);
+ _CRTIMP errno_t __cdecl _wcslwr_s_l(wchar_t *_Str,size_t _SizeInWords,_locale_t _Locale);
+ _CRTIMP errno_t __cdecl _wcsupr_s(wchar_t *_Str,size_t _Size);
+ _CRTIMP errno_t __cdecl _wcsupr_s_l(wchar_t *_Str,size_t _Size,_locale_t _Locale);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif
+#endif
diff --git a/tcc/include/sec_api/sys/timeb_s.h b/tcc/include/sec_api/sys/timeb_s.h
new file mode 100644
index 0000000..af5ef09
--- /dev/null
+++ b/tcc/include/sec_api/sys/timeb_s.h
@@ -0,0 +1,34 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+
+#ifndef _TIMEB_H_S
+#define _TIMEB_H_S
+
+#include <sys/timeb.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if defined(MINGW_HAS_SECURE_API)
+
+#ifdef _USE_32BIT_TIME_T
+#define _ftime_s _ftime32_s
+#else
+#define _ftime_s _ftime64_s
+#endif
+
+ _CRTIMP errno_t __cdecl _ftime32_s(struct __timeb32 *_Time);
+#if _INTEGRAL_MAX_BITS >= 64
+ _CRTIMP errno_t __cdecl _ftime64_s(struct __timeb64 *_Time);
+#endif
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tcc/include/sec_api/tchar_s.h b/tcc/include/sec_api/tchar_s.h
new file mode 100644
index 0000000..343d348
--- /dev/null
+++ b/tcc/include/sec_api/tchar_s.h
@@ -0,0 +1,266 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+#ifndef _INC_TCHAR_S
+#define _INC_TCHAR_S
+
+#include <tchar.h>
+
+#if defined(MINGW_HAS_SECURE_API)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef _UNICODE
+
+#define _tprintf_s wprintf_s
+#define _tprintf_s_l _wprintf_s_l
+#define _tcprintf_s _cwprintf_s
+#define _tcprintf_s_l _cwprintf_s_l
+#define _vtcprintf_s _vcwprintf_s
+#define _vtcprintf_s_l _vcwprintf_s_l
+#define _ftprintf_s fwprintf_s
+#define _ftprintf_s_l _fwprintf_s_l
+#define _stprintf_s swprintf_s
+#define _stprintf_s_l _swprintf_s_l
+#define _sntprintf_s _snwprintf_s
+#define _sntprintf_s_l _snwprintf_s_l
+#define _vtprintf_s vwprintf_s
+#define _vtprintf_s_l _vwprintf_s_l
+#define _vftprintf_s vfwprintf_s
+#define _vftprintf_s_l _vfwprintf_s_l
+#define _vstprintf_s vswprintf_s
+#define _vstprintf_s_l _vswprintf_s_l
+#define _vsntprintf_s _vsnwprintf_s
+#define _vsntprintf_s_l _vsnwprintf_s_l
+
+#define _tscanf_s wscanf_s
+#define _tscanf_s_l _wscanf_s_l
+#define _tcscanf_s _cwscanf_s
+#define _tcscanf_s_l _cwscanf_s_l
+#define _ftscanf_s fwscanf_s
+#define _ftscanf_s_l _fwscanf_s_l
+#define _stscanf_s swscanf_s
+#define _stscanf_s_l _swscanf_s_l
+#define _sntscanf_s _snwscanf_s
+#define _sntscanf_s_l _snwscanf_s_l
+
+#define _cgetts_s _cgetws_s
+#define _getts_s _getws_s
+
+#define _itot_s _itow_s
+#define _ltot_s _ltow_s
+#define _ultot_s _ultow_s
+#define _i64tot_s _i64tow_s
+#define _ui64tot_s _ui64tow_s
+
+#define _tcscat_s wcscat_s
+#define _tcscpy_s wcscpy_s
+#define _tcsncat_s wcsncat_s
+#define _tcsncat_s_l _wcsncat_s_l
+#define _tcsncpy_s wcsncpy_s
+#define _tcsncpy_s_l _wcsncpy_s_l
+#define _tcstok_s wcstok_s
+#define _tcstok_s_l _wcstok_s_l
+#define _tcserror_s _wcserror_s
+#define __tcserror_s __wcserror_s
+
+#define _tcsnset_s _wcsnset_s
+#define _tcsnset_s_l _wcsnset_s_l
+#define _tcsset_s _wcsset_s
+#define _tcsset_s_l _wcsset_s_l
+
+#define _tasctime_s _wasctime_s
+#define _tctime_s _wctime_s
+#define _tctime32_s _wctime32_s
+#define _tctime64_s _wctime64_s
+#define _tstrdate_s _wstrdate_s
+#define _tstrtime_s _wstrtime_s
+
+#define _tgetenv_s _wgetenv_s
+#define _tdupenv_s _wdupenv_s
+#define _tmakepath_s _wmakepath_s
+#define _tputenv_s _wputenv_s
+#define _tsearchenv_s _wsearchenv_s
+#define _tsplitpath_s _wsplitpath_s
+
+#define _tfopen_s _wfopen_s
+#define _tfreopen_s _wfreopen_s
+#define _ttmpnam_s _wtmpnam_s
+#define _taccess_s _waccess_s
+#define _tmktemp_s _wmktemp_s
+
+#define _tcsnccat_s wcsncat_s
+#define _tcsnccat_s_l _wcsncat_s_l
+#define _tcsnccpy_s wcsncpy_s
+#define _tcsnccpy_s_l _wcsncpy_s_l
+
+#define _tcslwr_s _wcslwr_s
+#define _tcslwr_s_l _wcslwr_s_l
+#define _tcsupr_s _wcsupr_s
+#define _tcsupr_s_l _wcsupr_s_l
+
+#define _wcstok_s_l(_String,_Delimiters,_Current_position,_Locale) (wcstok_s(_String,_Delimiters,_Current_position))
+#define _wcsnset_s_l(_Destination,_Destination_size_chars,_Value,_Count,_Locale) (_wcsnset_s(_Destination,_Destination_size_chars,_Value,_Count))
+#define _wcsset_s_l(_Destination,_Destination_size_chars,_Value,_Locale) (_wcsset_s(_Destination,_Destination_size_chars,_Value))
+
+#else
+
+#define _tprintf_s printf_s
+#define _tprintf_s_l _printf_s_l
+#define _tcprintf_s _cprintf_s
+#define _tcprintf_s_l _cprintf_s_l
+#define _vtcprintf_s _vcprintf_s
+#define _vtcprintf_s_l _vcprintf_s_l
+#define _ftprintf_s fprintf_s
+#define _ftprintf_s_l _fprintf_s_l
+#define _stprintf_s sprintf_s
+#define _stprintf_s_l _sprintf_s_l
+#define _sntprintf_s _snprintf_s
+#define _sntprintf_s_l _snprintf_s_l
+#define _vtprintf_s vprintf_s
+#define _vtprintf_s_l _vprintf_s_l
+#define _vftprintf_s vfprintf_s
+#define _vftprintf_s_l _vfprintf_s_l
+#define _vstprintf_s vsprintf_s
+#define _vstprintf_s_l _vsprintf_s_l
+#define _vsntprintf_s _vsnprintf_s
+#define _vsntprintf_s_l _vsnprintf_s_l
+#define _tscanf_s scanf_s
+#define _tscanf_s_l _scanf_s_l
+#define _tcscanf_s _cscanf_s
+#define _tcscanf_s_l _cscanf_s_l
+#define _ftscanf_s fscanf_s
+#define _ftscanf_s_l _fscanf_s_l
+#define _stscanf_s sscanf_s
+#define _stscanf_s_l _sscanf_s_l
+#define _sntscanf_s _snscanf_s
+#define _sntscanf_s_l _snscanf_s_l
+
+#define _getts_s gets_s
+#define _cgetts_s _cgets_s
+#define _itot_s _itoa_s
+#define _ltot_s _ltoa_s
+#define _ultot_s _ultoa_s
+#define _i64tot_s _i64toa_s
+#define _ui64tot_s _ui64toa_s
+
+#define _tcscat_s strcat_s
+#define _tcscpy_s strcpy_s
+#define _tcserror_s strerror_s
+#define __tcserror_s _strerror_s
+
+#define _tasctime_s asctime_s
+#define _tctime_s ctime_s
+#define _tctime32_s _ctime32_s
+#define _tctime64_s _ctime64_s
+#define _tstrdate_s _strdate_s
+#define _tstrtime_s _strtime_s
+
+#define _tgetenv_s getenv_s
+#define _tdupenv_s _dupenv_s
+#define _tmakepath_s _makepath_s
+#define _tputenv_s _putenv_s
+#define _tsearchenv_s _searchenv_s
+#define _tsplitpath_s _splitpath_s
+
+#define _tfopen_s fopen_s
+#define _tfreopen_s freopen_s
+#define _ttmpnam_s tmpnam_s
+#define _tmktemp_s _mktemp_s
+
+#ifndef _POSIX_
+#define _taccess_s _access_s
+#endif
+
+#define _tsopen_s _sopen_s
+
+#ifdef _MBCS
+
+#ifdef _MB_MAP_DIRECT
+
+#define _tcsncat_s _mbsnbcat_s
+#define _tcsncat_s_l _mbsnbcat_s_l
+#define _tcsncpy_s _mbsnbcpy_s
+#define _tcsncpy_s_l _mbsnbcpy_s_l
+#define _tcstok_s _mbstok_s
+#define _tcstok_s_l _mbstok_s_l
+
+#define _tcsnset_s _mbsnbset_s
+#define _tcsnset_s_l _mbsnbset_s_l
+#define _tcsset_s _mbsset_s
+#define _tcsset_s_l _mbsset_s_l
+
+#define _tcsnccat_s _mbsncat_s
+#define _tcsnccat_s_l _mbsncat_s_l
+#define _tcsnccpy_s _mbsncpy_s
+#define _tcsnccpy_s_l _mbsncpy_s_l
+#define _tcsncset_s _mbsnset_s
+#define _tcsncset_s_l _mbsnset_s_l
+
+#define _tcslwr_s _mbslwr_s
+#define _tcslwr_s_l _mbslwr_s_l
+#define _tcsupr_s _mbsupr_s
+#define _tcsupr_s_l _mbsupr_s_l
+
+#define _tccpy_s _mbccpy_s
+#define _tccpy_s_l _mbccpy_s_l
+#else
+
+ _CRTIMP char *__cdecl _tcsncat_s(char *_Dst,size_t _DstSizeInChars,const char *_Src,size_t _MaxCount);
+ _CRTIMP char *__cdecl _tcsncat_s_l(char *_Dst,size_t _DstSizeInChars,const char *_Src,size_t _MaxCount,_locale_t _Locale);
+ _CRTIMP char *__cdecl _tcsncpy_s(char *_Dst,size_t _DstSizeInChars,const char *_Src,size_t _MaxCount);
+ _CRTIMP char *__cdecl _tcsncpy_s_l(char *_Dst,size_t _DstSizeInChars,const char *_Src,size_t _MaxCount,_locale_t _Locale);
+ _CRTIMP char *__cdecl _tcstok_s(char *_Str,const char *_Delim,char **_Context);
+ _CRTIMP char *__cdecl _tcstok_s_l(char *_Str,const char *_Delim,char **_Context,_locale_t _Locale);
+ _CRTIMP errno_t __cdecl _tcsset_s(char *_Str,size_t _SizeInChars,unsigned int _Val);
+ _CRTIMP errno_t __cdecl _tcsset_s_l(char *_Str,size_t _SizeInChars,unsigned int,_locale_t _Locale);
+ _CRTIMP char *__cdecl _tcsnccat_s(char *_Dst,size_t _DstSizeInChars,const char *_Src,size_t _MaxCount);
+ _CRTIMP char *__cdecl _tcsnccat_s_l(char *_Dst,size_t _DstSizeInChars,const char *_Src,size_t _MaxCount,_locale_t _Locale);
+ _CRTIMP char *__cdecl _tcsnccpy_s(char *_Dst,size_t _DstSizeInChars,const char *_Src,size_t _MaxCount);
+ _CRTIMP char *__cdecl _tcsnccpy_s_l(char *_Dst,size_t _DstSizeInChars,const char *_Src,size_t _MaxCount,_locale_t _Locale);
+ _CRTIMP char *__cdecl _tcslwr_s(char *_Str,size_t _SizeInChars);
+ _CRTIMP char *__cdecl _tcslwr_s_l(char *_Str,size_t _SizeInChars,_locale_t _Locale);
+ _CRTIMP char *__cdecl _tcsupr_s(char *_Str,size_t _SizeInChars);
+ _CRTIMP char *__cdecl _tcsupr_s_l(char *_Str,size_t _SizeInChars,_locale_t _Locale);
+
+#endif
+
+#else
+
+#define _tcsncat_s strncat_s
+#define _tcsncat_s_l _strncat_s_l
+#define _tcsncpy_s strncpy_s
+#define _tcsncpy_s_l _strncpy_s_l
+#define _tcstok_s strtok_s
+#define _tcstok_s_l _strtok_s_l
+
+#define _tcsnset_s _strnset_s
+#define _tcsnset_s_l _strnset_s_l
+#define _tcsset_s _strset_s
+#define _tcsset_s _strset_s
+#define _tcsset_s_l _strset_s_l
+
+#define _tcsnccat_s strncat_s
+#define _tcsnccat_s_l _strncat_s_l
+#define _tcsnccpy_s strncpy_s
+#define _tcsnccpy_s_l _strncpy_s_l
+
+#define _tcslwr_s _strlwr_s
+#define _tcslwr_s_l _strlwr_s_l
+#define _tcsupr_s _strupr_s
+#define _tcsupr_s_l _strupr_s_l
+
+#define _strnset_s_l(_Destination,_Destination_size_chars,_Value,_Count,_Locale) (_strnset_s(_Destination,_Destination_size_chars,_Value,_Count))
+#define _strset_s_l(_Destination,_Destination_size_chars,_Value,_Locale) (_strset_s(_Destination,_Destination_size_chars,_Value))
+#endif
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif
+#endif
diff --git a/tcc/include/sec_api/time_s.h b/tcc/include/sec_api/time_s.h
new file mode 100644
index 0000000..9603b94
--- /dev/null
+++ b/tcc/include/sec_api/time_s.h
@@ -0,0 +1,61 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+#ifndef _TIME_H__S
+#define _TIME_H__S
+
+#include <time.h>
+
+#if defined(MINGW_HAS_SECURE_API)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ _CRTIMP errno_t __cdecl _ctime32_s(char *_Buf,size_t _SizeInBytes,const __time32_t *_Time);
+ _CRTIMP errno_t __cdecl _gmtime32_s(struct tm *_Tm,const __time32_t *_Time);
+ _CRTIMP errno_t __cdecl _localtime32_s(struct tm *_Tm,const __time32_t *_Time);
+ _CRTIMP errno_t __cdecl _strdate_s(char *_Buf,size_t _SizeInBytes);
+ _CRTIMP errno_t __cdecl _strtime_s(char *_Buf ,size_t _SizeInBytes);
+#if _INTEGRAL_MAX_BITS >= 64
+ _CRTIMP errno_t __cdecl _ctime64_s(char *_Buf,size_t _SizeInBytes,const __time64_t *_Time);
+ _CRTIMP errno_t __cdecl _gmtime64_s(struct tm *_Tm,const __time64_t *_Time);
+ _CRTIMP errno_t __cdecl _localtime64_s(struct tm *_Tm,const __time64_t *_Time);
+#endif
+
+#ifndef _WTIME_S_DEFINED
+#define _WTIME_S_DEFINED
+ _CRTIMP errno_t __cdecl _wasctime_s(wchar_t *_Buf,size_t _SizeInWords,const struct tm *_Tm);
+ _CRTIMP errno_t __cdecl _wctime32_s(wchar_t *_Buf,size_t _SizeInWords,const __time32_t *_Time);
+ _CRTIMP errno_t __cdecl _wstrdate_s(wchar_t *_Buf,size_t _SizeInWords);
+ _CRTIMP errno_t __cdecl _wstrtime_s(wchar_t *_Buf,size_t _SizeInWords);
+#if _INTEGRAL_MAX_BITS >= 64
+ _CRTIMP errno_t __cdecl _wctime64_s(wchar_t *_Buf,size_t _SizeInWords,const __time64_t *_Time);
+#endif
+
+#if !defined (RC_INVOKED) && !defined (_INC_WTIME_S_INL)
+#define _INC_WTIME_S_INL
+#ifdef _USE_32BIT_TIME_T
+__CRT_INLINE errno_t __cdecl _wctime_s(wchar_t *_Buffer,size_t _SizeInWords,const time_t *_Time) { return _wctime32_s(_Buffer,_SizeInWords,_Time); }
+#else
+__CRT_INLINE errno_t __cdecl _wctime_s(wchar_t *_Buffer,size_t _SizeInWords,const time_t *_Time) { return _wctime64_s(_Buffer,_SizeInWords,_Time); }
+#endif
+#endif
+#endif
+
+#ifndef RC_INVOKED
+#ifdef _USE_32BIT_TIME_T
+__CRT_INLINE errno_t __cdecl localtime_s(struct tm *_Tm,const time_t *_Time) { return _localtime32_s(_Tm,_Time); }
+#else
+__CRT_INLINE errno_t __cdecl localtime_s(struct tm *_Tm,const time_t *_Time) { return _localtime64_s(_Tm,_Time); }
+#endif
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+#endif
diff --git a/tcc/include/sec_api/wchar_s.h b/tcc/include/sec_api/wchar_s.h
new file mode 100644
index 0000000..94251aa
--- /dev/null
+++ b/tcc/include/sec_api/wchar_s.h
@@ -0,0 +1,128 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+#ifndef _INC_WCHAR_S
+#define _INC_WCHAR_S
+
+#include <wchar.h>
+
+#if defined(MINGW_HAS_SECURE_API)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _WIO_S_DEFINED
+#define _WIO_S_DEFINED
+ _CRTIMP errno_t __cdecl _waccess_s(const wchar_t *_Filename,int _AccessMode);
+ _CRTIMP errno_t __cdecl _wmktemp_s(wchar_t *_TemplateName,size_t _SizeInWords);
+#endif
+
+#ifndef _WCONIO_S_DEFINED
+#define _WCONIO_S_DEFINED
+ _CRTIMP errno_t __cdecl _cgetws_s(wchar_t *_Buffer,size_t _SizeInWords,size_t *_SizeRead);
+ _CRTIMP int __cdecl _cwprintf_s(const wchar_t *_Format,...);
+ _CRTIMP int __cdecl _cwscanf_s(const wchar_t *_Format,...);
+ _CRTIMP int __cdecl _cwscanf_s_l(const wchar_t *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _vcwprintf_s(const wchar_t *_Format,va_list _ArgList);
+ _CRTIMP int __cdecl _cwprintf_s_l(const wchar_t *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _vcwprintf_s_l(const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
+#endif
+
+#ifndef _WSTDIO_S_DEFINED
+#define _WSTDIO_S_DEFINED
+ _CRTIMP wchar_t *__cdecl _getws_s(wchar_t *_Str,size_t _SizeInWords);
+ int __cdecl fwprintf_s(FILE *_File,const wchar_t *_Format,...);
+ int __cdecl wprintf_s(const wchar_t *_Format,...);
+ int __cdecl vfwprintf_s(FILE *_File,const wchar_t *_Format,va_list _ArgList);
+ int __cdecl vwprintf_s(const wchar_t *_Format,va_list _ArgList);
+ int __cdecl swprintf_s(wchar_t *_Dst,size_t _SizeInWords,const wchar_t *_Format,...);
+ int __cdecl vswprintf_s(wchar_t *_Dst,size_t _SizeInWords,const wchar_t *_Format,va_list _ArgList);
+ _CRTIMP int __cdecl _snwprintf_s(wchar_t *_DstBuf,size_t _DstSizeInWords,size_t _MaxCount,const wchar_t *_Format,...);
+ _CRTIMP int __cdecl _vsnwprintf_s(wchar_t *_DstBuf,size_t _DstSizeInWords,size_t _MaxCount,const wchar_t *_Format,va_list _ArgList);
+ _CRTIMP int __cdecl _wprintf_s_l(const wchar_t *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _vwprintf_s_l(const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
+ _CRTIMP int __cdecl _fwprintf_s_l(FILE *_File,const wchar_t *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _vfwprintf_s_l(FILE *_File,const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
+ _CRTIMP int __cdecl _swprintf_s_l(wchar_t *_DstBuf,size_t _DstSize,const wchar_t *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _vswprintf_s_l(wchar_t *_DstBuf,size_t _DstSize,const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
+ _CRTIMP int __cdecl _snwprintf_s_l(wchar_t *_DstBuf,size_t _DstSize,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _vsnwprintf_s_l(wchar_t *_DstBuf,size_t _DstSize,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
+ _CRTIMP int __cdecl _fwscanf_s_l(FILE *_File,const wchar_t *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _swscanf_s_l(const wchar_t *_Src,const wchar_t *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _snwscanf_s(const wchar_t *_Src,size_t _MaxCount,const wchar_t *_Format,...);
+ _CRTIMP int __cdecl _snwscanf_s_l(const wchar_t *_Src,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _wscanf_s_l(const wchar_t *_Format,_locale_t _Locale,...);
+ _CRTIMP errno_t __cdecl _wfopen_s(FILE **_File,const wchar_t *_Filename,const wchar_t *_Mode);
+ _CRTIMP errno_t __cdecl _wfreopen_s(FILE **_File,const wchar_t *_Filename,const wchar_t *_Mode,FILE *_OldFile);
+ _CRTIMP errno_t __cdecl _wtmpnam_s(wchar_t *_DstBuf,size_t _SizeInWords);
+#endif
+
+#ifndef _WSTDLIB_S_DEFINED
+#define _WSTDLIB_S_DEFINED
+ _CRTIMP errno_t __cdecl _itow_s (int _Val,wchar_t *_DstBuf,size_t _SizeInWords,int _Radix);
+ _CRTIMP errno_t __cdecl _ltow_s (long _Val,wchar_t *_DstBuf,size_t _SizeInWords,int _Radix);
+ _CRTIMP errno_t __cdecl _ultow_s (unsigned long _Val,wchar_t *_DstBuf,size_t _SizeInWords,int _Radix);
+ _CRTIMP errno_t __cdecl _wgetenv_s(size_t *_ReturnSize,wchar_t *_DstBuf,size_t _DstSizeInWords,const wchar_t *_VarName);
+ _CRTIMP errno_t __cdecl _wdupenv_s(wchar_t **_Buffer,size_t *_BufferSizeInWords,const wchar_t *_VarName);
+#if _INTEGRAL_MAX_BITS >= 64
+ _CRTIMP errno_t __cdecl _i64tow_s(__int64 _Val,wchar_t *_DstBuf,size_t _SizeInWords,int _Radix);
+ _CRTIMP errno_t __cdecl _ui64tow_s(unsigned __int64 _Val,wchar_t *_DstBuf,size_t _SizeInWords,int _Radix);
+#endif
+#endif
+
+#ifndef _POSIX_
+#ifndef _WSTDLIBP_S_DEFINED
+#define _WSTDLIBP_S_DEFINED
+ _CRTIMP errno_t __cdecl _wmakepath_s(wchar_t *_PathResult,size_t _SizeInWords,const wchar_t *_Drive,const wchar_t *_Dir,const wchar_t *_Filename,const wchar_t *_Ext);
+ _CRTIMP errno_t __cdecl _wputenv_s(const wchar_t *_Name,const wchar_t *_Value);
+ _CRTIMP errno_t __cdecl _wsearchenv_s(const wchar_t *_Filename,const wchar_t *_EnvVar,wchar_t *_ResultPath,size_t _SizeInWords);
+ _CRTIMP errno_t __cdecl _wsplitpath_s(const wchar_t *_FullPath,wchar_t *_Drive,size_t _DriveSizeInWords,wchar_t *_Dir,size_t _DirSizeInWords,wchar_t *_Filename,size_t _FilenameSizeInWords,wchar_t *_Ext,size_t _ExtSizeInWords);
+#endif
+#endif
+
+#ifndef _WSTRING_S_DEFINED
+#define _WSTRING_S_DEFINED
+ _CRTIMP wchar_t *__cdecl wcstok_s(wchar_t *_Str,const wchar_t *_Delim,wchar_t **_Context);
+ _CRTIMP errno_t __cdecl _wcserror_s(wchar_t *_Buf,size_t _SizeInWords,int _ErrNum);
+ _CRTIMP errno_t __cdecl __wcserror_s(wchar_t *_Buffer,size_t _SizeInWords,const wchar_t *_ErrMsg);
+ _CRTIMP errno_t __cdecl _wcsnset_s(wchar_t *_Dst,size_t _DstSizeInWords,wchar_t _Val,size_t _MaxCount);
+ _CRTIMP errno_t __cdecl _wcsset_s(wchar_t *_Str,size_t _SizeInWords,wchar_t _Val);
+ _CRTIMP errno_t __cdecl _wcslwr_s(wchar_t *_Str,size_t _SizeInWords);
+ _CRTIMP errno_t __cdecl _wcslwr_s_l(wchar_t *_Str,size_t _SizeInWords,_locale_t _Locale);
+ _CRTIMP errno_t __cdecl _wcsupr_s(wchar_t *_Str,size_t _Size);
+ _CRTIMP errno_t __cdecl _wcsupr_s_l(wchar_t *_Str,size_t _Size,_locale_t _Locale);
+#endif
+
+#ifndef _WTIME_S_DEFINED
+#define _WTIME_S_DEFINED
+ _CRTIMP errno_t __cdecl _wasctime_s(wchar_t *_Buf,size_t _SizeInWords,const struct tm *_Tm);
+ _CRTIMP errno_t __cdecl _wctime32_s(wchar_t *_Buf,size_t _SizeInWords,const __time32_t *_Time);
+ _CRTIMP errno_t __cdecl _wstrdate_s(wchar_t *_Buf,size_t _SizeInWords);
+ _CRTIMP errno_t __cdecl _wstrtime_s(wchar_t *_Buf,size_t _SizeInWords);
+#if _INTEGRAL_MAX_BITS >= 64
+ _CRTIMP errno_t __cdecl _wctime64_s(wchar_t *_Buf,size_t _SizeInWords,const __time64_t *_Time);
+#endif
+
+#if !defined (RC_INVOKED) && !defined (_INC_WTIME_S_INL)
+#define _INC_WTIME_S_INL
+#ifdef _USE_32BIT_TIME_T
+__CRT_INLINE errno_t __cdecl _wctime_s(wchar_t *_Buffer,size_t _SizeInWords,const time_t *_Time) { return _wctime32_s(_Buffer,_SizeInWords,_Time); }
+#else
+__CRT_INLINE errno_t __cdecl _wctime_s(wchar_t *_Buffer,size_t _SizeInWords,const time_t *_Time) { return _wctime64_s(_Buffer,_SizeInWords,_Time); }
+#endif
+#endif
+#endif
+
+ _CRTIMP errno_t __cdecl mbsrtowcs_s(size_t *_Retval,wchar_t *_Dst,size_t _SizeInWords,const char **_PSrc,size_t _N,mbstate_t *_State);
+ _CRTIMP errno_t __cdecl wcrtomb_s(size_t *_Retval,char *_Dst,size_t _SizeInBytes,wchar_t _Ch,mbstate_t *_State);
+ _CRTIMP errno_t __cdecl wcsrtombs_s(size_t *_Retval,char *_Dst,size_t _SizeInBytes,const wchar_t **_Src,size_t _Size,mbstate_t *_State);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+#endif
diff --git a/tcc/include/setjmp.h b/tcc/include/setjmp.h
new file mode 100644
index 0000000..e4f142a
--- /dev/null
+++ b/tcc/include/setjmp.h
@@ -0,0 +1,160 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+#ifndef _INC_SETJMP
+#define _INC_SETJMP
+
+#include <_mingw.h>
+
+#pragma pack(push,_CRT_PACKING)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if (defined(_X86_) && !defined(__x86_64))
+
+#define _JBLEN 16
+#define _JBTYPE int
+
+ typedef struct __JUMP_BUFFER {
+ unsigned long Ebp;
+ unsigned long Ebx;
+ unsigned long Edi;
+ unsigned long Esi;
+ unsigned long Esp;
+ unsigned long Eip;
+ unsigned long Registration;
+ unsigned long TryLevel;
+ unsigned long Cookie;
+ unsigned long UnwindFunc;
+ unsigned long UnwindData[6];
+ } _JUMP_BUFFER;
+#elif defined(__ia64__)
+ typedef _CRT_ALIGN(16) struct _SETJMP_FLOAT128 {
+ __int64 LowPart;
+ __int64 HighPart;
+ } SETJMP_FLOAT128;
+
+#define _JBLEN 33
+ typedef SETJMP_FLOAT128 _JBTYPE;
+
+ typedef struct __JUMP_BUFFER {
+
+ unsigned long iAReserved[6];
+
+ unsigned long Registration;
+ unsigned long TryLevel;
+ unsigned long Cookie;
+ unsigned long UnwindFunc;
+
+ unsigned long UnwindData[6];
+
+ SETJMP_FLOAT128 FltS0;
+ SETJMP_FLOAT128 FltS1;
+ SETJMP_FLOAT128 FltS2;
+ SETJMP_FLOAT128 FltS3;
+ SETJMP_FLOAT128 FltS4;
+ SETJMP_FLOAT128 FltS5;
+ SETJMP_FLOAT128 FltS6;
+ SETJMP_FLOAT128 FltS7;
+ SETJMP_FLOAT128 FltS8;
+ SETJMP_FLOAT128 FltS9;
+ SETJMP_FLOAT128 FltS10;
+ SETJMP_FLOAT128 FltS11;
+ SETJMP_FLOAT128 FltS12;
+ SETJMP_FLOAT128 FltS13;
+ SETJMP_FLOAT128 FltS14;
+ SETJMP_FLOAT128 FltS15;
+ SETJMP_FLOAT128 FltS16;
+ SETJMP_FLOAT128 FltS17;
+ SETJMP_FLOAT128 FltS18;
+ SETJMP_FLOAT128 FltS19;
+ __int64 FPSR;
+ __int64 StIIP;
+ __int64 BrS0;
+ __int64 BrS1;
+ __int64 BrS2;
+ __int64 BrS3;
+ __int64 BrS4;
+ __int64 IntS0;
+ __int64 IntS1;
+ __int64 IntS2;
+ __int64 IntS3;
+ __int64 RsBSP;
+ __int64 RsPFS;
+ __int64 ApUNAT;
+ __int64 ApLC;
+ __int64 IntSp;
+ __int64 IntNats;
+ __int64 Preds;
+
+ } _JUMP_BUFFER;
+#elif defined(__x86_64)
+ typedef _CRT_ALIGN(16) struct _SETJMP_FLOAT128 {
+ unsigned __int64 Part[2];
+ } SETJMP_FLOAT128;
+
+#define _JBLEN 16
+ typedef SETJMP_FLOAT128 _JBTYPE;
+
+ typedef struct _JUMP_BUFFER {
+ unsigned __int64 Frame;
+ unsigned __int64 Rbx;
+ unsigned __int64 Rsp;
+ unsigned __int64 Rbp;
+ unsigned __int64 Rsi;
+ unsigned __int64 Rdi;
+ unsigned __int64 R12;
+ unsigned __int64 R13;
+ unsigned __int64 R14;
+ unsigned __int64 R15;
+ unsigned __int64 Rip;
+ unsigned __int64 Spare;
+ SETJMP_FLOAT128 Xmm6;
+ SETJMP_FLOAT128 Xmm7;
+ SETJMP_FLOAT128 Xmm8;
+ SETJMP_FLOAT128 Xmm9;
+ SETJMP_FLOAT128 Xmm10;
+ SETJMP_FLOAT128 Xmm11;
+ SETJMP_FLOAT128 Xmm12;
+ SETJMP_FLOAT128 Xmm13;
+ SETJMP_FLOAT128 Xmm14;
+ SETJMP_FLOAT128 Xmm15;
+ } _JUMP_BUFFER;
+#endif
+#ifndef _JMP_BUF_DEFINED
+ typedef _JBTYPE jmp_buf[_JBLEN];
+#define _JMP_BUF_DEFINED
+#endif
+
+ void * __cdecl __attribute__ ((__nothrow__)) mingw_getsp(void);
+
+#ifdef USE_MINGW_SETJMP_TWO_ARGS
+#ifndef _INC_SETJMPEX
+#define setjmp(BUF) _setjmp((BUF),mingw_getsp())
+ int __cdecl __attribute__ ((__nothrow__)) _setjmp(jmp_buf _Buf,void *_Ctx);
+#else
+#undef setjmp
+#define setjmp(BUF) _setjmpex((BUF),mingw_getsp())
+#define setjmpex(BUF) _setjmpex((BUF),mingw_getsp())
+ int __cdecl __attribute__ ((__nothrow__)) _setjmpex(jmp_buf _Buf,void *_Ctx);
+#endif
+#else
+#ifndef _INC_SETJMPEX
+#define setjmp _setjmp
+#endif
+ int __cdecl __attribute__ ((__nothrow__)) setjmp(jmp_buf _Buf);
+#endif
+
+ __declspec(noreturn) __attribute__ ((__nothrow__)) void __cdecl ms_longjmp(jmp_buf _Buf,int _Value)/* throw(...)*/;
+ __declspec(noreturn) __attribute__ ((__nothrow__)) void __cdecl longjmp(jmp_buf _Buf,int _Value);
+
+#ifdef __cplusplus
+}
+#endif
+
+#pragma pack(pop)
+#endif
diff --git a/tcc/include/share.h b/tcc/include/share.h
new file mode 100644
index 0000000..358855f
--- /dev/null
+++ b/tcc/include/share.h
@@ -0,0 +1,28 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+#ifndef _INC_SHARE
+#define _INC_SHARE
+
+#ifndef _WIN32
+#error Only Win32 target is supported!
+#endif
+
+#define _SH_COMPAT 0x00
+#define _SH_DENYRW 0x10
+#define _SH_DENYWR 0x20
+#define _SH_DENYRD 0x30
+#define _SH_DENYNO 0x40
+#define _SH_SECURE 0x80
+
+#ifndef NO_OLDNAMES
+#define SH_COMPAT _SH_COMPAT
+#define SH_DENYRW _SH_DENYRW
+#define SH_DENYWR _SH_DENYWR
+#define SH_DENYRD _SH_DENYRD
+#define SH_DENYNO _SH_DENYNO
+#endif
+
+#endif
diff --git a/tcc/include/signal.h b/tcc/include/signal.h
new file mode 100644
index 0000000..a518f6b
--- /dev/null
+++ b/tcc/include/signal.h
@@ -0,0 +1,63 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+#ifndef _INC_SIGNAL
+#define _INC_SIGNAL
+
+#include <_mingw.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _SIG_ATOMIC_T_DEFINED
+#define _SIG_ATOMIC_T_DEFINED
+ typedef int sig_atomic_t;
+#endif
+
+#define NSIG 23
+
+#define SIGHUP 1 /* hangup */
+#define SIGINT 2
+#define SIGQUIT 3 /* quit */
+#define SIGILL 4
+#define SIGTRAP 5 /* trace trap (not reset when caught) */
+#define SIGIOT 6 /* IOT instruction */
+#define SIGABRT 6 /* used by abort, replace SIGIOT in the future */
+#define SIGEMT 7 /* EMT instruction */
+#define SIGFPE 8
+#define SIGKILL 9 /* kill (cannot be caught or ignored) */
+#define SIGBUS 10 /* bus error */
+#define SIGSEGV 11
+#define SIGSYS 12 /* bad argument to system call */
+#define SIGPIPE 13 /* write on a pipe with no one to read it */
+#ifdef __USE_MINGW_ALARM
+#define SIGALRM 14 /* alarm clock */
+#endif
+#define SIGTERM 15
+#define SIGBREAK 21
+#define SIGABRT2 22
+
+#define SIGABRT_COMPAT 6
+
+ typedef void (*__p_sig_fn_t)(int);
+
+#define SIG_DFL (__p_sig_fn_t)0
+#define SIG_IGN (__p_sig_fn_t)1
+#define SIG_GET (__p_sig_fn_t)2
+#define SIG_SGE (__p_sig_fn_t)3
+#define SIG_ACK (__p_sig_fn_t)4
+#define SIG_ERR (__p_sig_fn_t)-1
+
+ extern void **__cdecl __pxcptinfoptrs(void);
+#define _pxcptinfoptrs (*__pxcptinfoptrs())
+
+ __p_sig_fn_t __cdecl signal(int _SigNum,__p_sig_fn_t _Func);
+ int __cdecl raise(int _SigNum);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/stdarg.h b/tcc/include/stdarg.h
new file mode 100644
index 0000000..10ce733
--- /dev/null
+++ b/tcc/include/stdarg.h
@@ -0,0 +1,79 @@
+#ifndef _STDARG_H
+#define _STDARG_H
+
+#ifdef __x86_64__
+#ifndef _WIN64
+
+//This should be in sync with the declaration on our lib/libtcc1.c
+/* GCC compatible definition of va_list. */
+typedef struct {
+ unsigned int gp_offset;
+ unsigned int fp_offset;
+ union {
+ unsigned int overflow_offset;
+ char *overflow_arg_area;
+ };
+ char *reg_save_area;
+} __va_list_struct;
+
+typedef __va_list_struct va_list[1];
+
+void __va_start(__va_list_struct *ap, void *fp);
+void *__va_arg(__va_list_struct *ap, int arg_type, int size, int align);
+
+#define va_start(ap, last) __va_start(ap, __builtin_frame_address(0))
+#define va_arg(ap, type) \
+ (*(type *)(__va_arg(ap, __builtin_va_arg_types(type), sizeof(type), __alignof__(type))))
+#define va_copy(dest, src) (*(dest) = *(src))
+#define va_end(ap)
+
+/* avoid conflicting definition for va_list on Macs. */
+#define _VA_LIST_T
+
+#else /* _WIN64 */
+typedef char *va_list;
+#define va_start(ap,last) __builtin_va_start(ap,last)
+#define va_arg(ap, t) ((sizeof(t) > 8 || (sizeof(t) & (sizeof(t) - 1))) \
+ ? **(t **)((ap += 8) - 8) : *(t *)((ap += 8) - 8))
+#define va_copy(dest, src) ((dest) = (src))
+#define va_end(ap)
+#endif
+
+#elif __arm__
+typedef char *va_list;
+#define _tcc_alignof(type) ((int)&((struct {char c;type x;} *)0)->x)
+#define _tcc_align(addr,type) (((unsigned)addr + _tcc_alignof(type) - 1) \
+ & ~(_tcc_alignof(type) - 1))
+#define va_start(ap,last) ap = ((char *)&(last)) + ((sizeof(last)+3)&~3)
+#define va_arg(ap,type) (ap = (void *) ((_tcc_align(ap,type)+sizeof(type)+3) \
+ &~3), *(type *)(ap - ((sizeof(type)+3)&~3)))
+#define va_copy(dest, src) (dest) = (src)
+#define va_end(ap)
+
+#elif defined(__aarch64__)
+typedef struct {
+ void *__stack;
+ void *__gr_top;
+ void *__vr_top;
+ int __gr_offs;
+ int __vr_offs;
+} va_list;
+#define va_start(ap, last) __va_start(ap, last)
+#define va_arg(ap, type) __va_arg(ap, type)
+#define va_end(ap)
+#define va_copy(dest, src) ((dest) = (src))
+
+#else /* __i386__ */
+typedef char *va_list;
+/* only correct for i386 */
+#define va_start(ap,last) ap = ((char *)&(last)) + ((sizeof(last)+3)&~3)
+#define va_arg(ap,type) (ap += (sizeof(type)+3)&~3, *(type *)(ap - ((sizeof(type)+3)&~3)))
+#define va_copy(dest, src) (dest) = (src)
+#define va_end(ap)
+#endif
+
+/* fix a buggy dependency on GCC in libio.h */
+typedef va_list __gnuc_va_list;
+#define _VA_LIST_DEFINED
+
+#endif /* _STDARG_H */
diff --git a/tcc/include/stdbool.h b/tcc/include/stdbool.h
new file mode 100644
index 0000000..d2ee446
--- /dev/null
+++ b/tcc/include/stdbool.h
@@ -0,0 +1,11 @@
+#ifndef _STDBOOL_H
+#define _STDBOOL_H
+
+/* ISOC99 boolean */
+
+#define bool _Bool
+#define true 1
+#define false 0
+#define __bool_true_false_are_defined 1
+
+#endif /* _STDBOOL_H */
diff --git a/tcc/include/stddef.h b/tcc/include/stddef.h
new file mode 100644
index 0000000..694d503
--- /dev/null
+++ b/tcc/include/stddef.h
@@ -0,0 +1,54 @@
+#ifndef _STDDEF_H
+#define _STDDEF_H
+
+typedef __SIZE_TYPE__ size_t;
+typedef __PTRDIFF_TYPE__ ssize_t;
+typedef __WCHAR_TYPE__ wchar_t;
+typedef __PTRDIFF_TYPE__ ptrdiff_t;
+typedef __PTRDIFF_TYPE__ intptr_t;
+typedef __SIZE_TYPE__ uintptr_t;
+
+#ifndef __int8_t_defined
+#define __int8_t_defined
+typedef signed char int8_t;
+typedef signed short int int16_t;
+typedef signed int int32_t;
+#ifdef __LP64__
+typedef signed long int int64_t;
+#else
+typedef signed long long int int64_t;
+#endif
+typedef unsigned char uint8_t;
+typedef unsigned short int uint16_t;
+typedef unsigned int uint32_t;
+#ifdef __LP64__
+typedef unsigned long int uint64_t;
+#else
+typedef unsigned long long int uint64_t;
+#endif
+#endif
+
+#ifndef NULL
+#define NULL ((void*)0)
+#endif
+
+#define offsetof(type, field) ((size_t)&((type *)0)->field)
+
+void *alloca(size_t size);
+
+#endif
+
+/* Older glibc require a wint_t from <stddef.h> (when requested
+ by __need_wint_t, as otherwise stddef.h isn't allowed to
+ define this type). Note that this must be outside the normal
+ _STDDEF_H guard, so that it works even when we've included the file
+ already (without requiring wint_t). Some other libs define _WINT_T
+ if they've already provided that type, so we can use that as guard.
+ TCC defines __WINT_TYPE__ for us. */
+#if defined (__need_wint_t)
+#ifndef _WINT_T
+#define _WINT_T
+typedef __WINT_TYPE__ wint_t;
+#endif
+#undef __need_wint_t
+#endif
diff --git a/tcc/include/stdint.h b/tcc/include/stdint.h
new file mode 100644
index 0000000..cde32b6
--- /dev/null
+++ b/tcc/include/stdint.h
@@ -0,0 +1,212 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+/* ISO C9x 7.18 Integer types <stdint.h>
+ * Based on ISO/IEC SC22/WG14 9899 Committee draft (SC22 N2794)
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * Contributor: Danny Smith <danny_r_smith_2001@yahoo.co.nz>
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Date: 2000-12-02
+ */
+
+
+#ifndef _STDINT_H
+#define _STDINT_H
+
+#include <_mingw.h>
+
+#define __need_wint_t
+#define __need_wchar_t
+#include "stddef.h"
+
+#ifndef __int8_t_defined
+#define __int8_t_defined
+/* 7.18.1.1 Exact-width integer types */
+typedef signed char int8_t;
+typedef unsigned char uint8_t;
+typedef short int16_t;
+typedef unsigned short uint16_t;
+typedef int int32_t;
+typedef unsigned uint32_t;
+typedef long long int64_t;
+typedef unsigned long long uint64_t;
+#endif
+
+/* 7.18.1.2 Minimum-width integer types */
+typedef signed char int_least8_t;
+typedef unsigned char uint_least8_t;
+typedef short int_least16_t;
+typedef unsigned short uint_least16_t;
+typedef int int_least32_t;
+typedef unsigned uint_least32_t;
+typedef long long int_least64_t;
+typedef unsigned long long uint_least64_t;
+
+/* 7.18.1.3 Fastest minimum-width integer types
+ * Not actually guaranteed to be fastest for all purposes
+ * Here we use the exact-width types for 8 and 16-bit ints.
+ */
+typedef char int_fast8_t;
+typedef unsigned char uint_fast8_t;
+typedef short int_fast16_t;
+typedef unsigned short uint_fast16_t;
+typedef int int_fast32_t;
+typedef unsigned int uint_fast32_t;
+typedef long long int_fast64_t;
+typedef unsigned long long uint_fast64_t;
+
+/* 7.18.1.5 Greatest-width integer types */
+typedef long long intmax_t;
+typedef unsigned long long uintmax_t;
+
+/* 7.18.2 Limits of specified-width integer types */
+#if !defined ( __cplusplus) || defined (__STDC_LIMIT_MACROS)
+
+/* 7.18.2.1 Limits of exact-width integer types */
+#define INT8_MIN (-128)
+#define INT16_MIN (-32768)
+#define INT32_MIN (-2147483647 - 1)
+#define INT64_MIN (-9223372036854775807LL - 1)
+
+#define INT8_MAX 127
+#define INT16_MAX 32767
+#define INT32_MAX 2147483647
+#define INT64_MAX 9223372036854775807LL
+
+#define UINT8_MAX 0xff /* 255U */
+#define UINT16_MAX 0xffff /* 65535U */
+#define UINT32_MAX 0xffffffff /* 4294967295U */
+#define UINT64_MAX 0xffffffffffffffffULL /* 18446744073709551615ULL */
+
+/* 7.18.2.2 Limits of minimum-width integer types */
+#define INT_LEAST8_MIN INT8_MIN
+#define INT_LEAST16_MIN INT16_MIN
+#define INT_LEAST32_MIN INT32_MIN
+#define INT_LEAST64_MIN INT64_MIN
+
+#define INT_LEAST8_MAX INT8_MAX
+#define INT_LEAST16_MAX INT16_MAX
+#define INT_LEAST32_MAX INT32_MAX
+#define INT_LEAST64_MAX INT64_MAX
+
+#define UINT_LEAST8_MAX UINT8_MAX
+#define UINT_LEAST16_MAX UINT16_MAX
+#define UINT_LEAST32_MAX UINT32_MAX
+#define UINT_LEAST64_MAX UINT64_MAX
+
+/* 7.18.2.3 Limits of fastest minimum-width integer types */
+#define INT_FAST8_MIN INT8_MIN
+#define INT_FAST16_MIN INT16_MIN
+#define INT_FAST32_MIN INT32_MIN
+#define INT_FAST64_MIN INT64_MIN
+
+#define INT_FAST8_MAX INT8_MAX
+#define INT_FAST16_MAX INT16_MAX
+#define INT_FAST32_MAX INT32_MAX
+#define INT_FAST64_MAX INT64_MAX
+
+#define UINT_FAST8_MAX UINT8_MAX
+#define UINT_FAST16_MAX UINT16_MAX
+#define UINT_FAST32_MAX UINT32_MAX
+#define UINT_FAST64_MAX UINT64_MAX
+
+/* 7.18.2.4 Limits of integer types capable of holding
+ object pointers */
+#ifdef _WIN64
+#define INTPTR_MIN INT64_MIN
+#define INTPTR_MAX INT64_MAX
+#define UINTPTR_MAX UINT64_MAX
+#else
+#define INTPTR_MIN INT32_MIN
+#define INTPTR_MAX INT32_MAX
+#define UINTPTR_MAX UINT32_MAX
+#endif
+
+/* 7.18.2.5 Limits of greatest-width integer types */
+#define INTMAX_MIN INT64_MIN
+#define INTMAX_MAX INT64_MAX
+#define UINTMAX_MAX UINT64_MAX
+
+/* 7.18.3 Limits of other integer types */
+#ifdef _WIN64
+#define PTRDIFF_MIN INT64_MIN
+#define PTRDIFF_MAX INT64_MAX
+#else
+#define PTRDIFF_MIN INT32_MIN
+#define PTRDIFF_MAX INT32_MAX
+#endif
+
+#define SIG_ATOMIC_MIN INT32_MIN
+#define SIG_ATOMIC_MAX INT32_MAX
+
+#ifndef SIZE_MAX
+#ifdef _WIN64
+#define SIZE_MAX UINT64_MAX
+#else
+#define SIZE_MAX UINT32_MAX
+#endif
+#endif
+
+#ifndef WCHAR_MIN /* also in wchar.h */
+#define WCHAR_MIN 0
+#define WCHAR_MAX ((wchar_t)-1) /* UINT16_MAX */
+#endif
+
+/*
+ * wint_t is unsigned short for compatibility with MS runtime
+ */
+#define WINT_MIN 0
+#define WINT_MAX ((wint_t)-1) /* UINT16_MAX */
+
+#endif /* !defined ( __cplusplus) || defined __STDC_LIMIT_MACROS */
+
+
+/* 7.18.4 Macros for integer constants */
+#if !defined ( __cplusplus) || defined (__STDC_CONSTANT_MACROS)
+
+/* 7.18.4.1 Macros for minimum-width integer constants
+
+ According to Douglas Gwyn <gwyn@arl.mil>:
+ "This spec was changed in ISO/IEC 9899:1999 TC1; in ISO/IEC
+ 9899:1999 as initially published, the expansion was required
+ to be an integer constant of precisely matching type, which
+ is impossible to accomplish for the shorter types on most
+ platforms, because C99 provides no standard way to designate
+ an integer constant with width less than that of type int.
+ TC1 changed this to require just an integer constant
+ *expression* with *promoted* type."
+
+ The trick used here is from Clive D W Feather.
+*/
+
+#define INT8_C(val) (INT_LEAST8_MAX-INT_LEAST8_MAX+(val))
+#define INT16_C(val) (INT_LEAST16_MAX-INT_LEAST16_MAX+(val))
+#define INT32_C(val) (INT_LEAST32_MAX-INT_LEAST32_MAX+(val))
+/* The 'trick' doesn't work in C89 for long long because, without
+ suffix, (val) will be evaluated as int, not intmax_t */
+#define INT64_C(val) val##LL
+
+#define UINT8_C(val) (UINT_LEAST8_MAX-UINT_LEAST8_MAX+(val))
+#define UINT16_C(val) (UINT_LEAST16_MAX-UINT_LEAST16_MAX+(val))
+#define UINT32_C(val) (UINT_LEAST32_MAX-UINT_LEAST32_MAX+(val))
+#define UINT64_C(val) val##ULL
+
+/* 7.18.4.2 Macros for greatest-width integer constants */
+#define INTMAX_C(val) val##LL
+#define UINTMAX_C(val) val##ULL
+
+#endif /* !defined ( __cplusplus) || defined __STDC_CONSTANT_MACROS */
+
+#endif
diff --git a/tcc/include/stdio.h b/tcc/include/stdio.h
new file mode 100644
index 0000000..da88793
--- /dev/null
+++ b/tcc/include/stdio.h
@@ -0,0 +1,429 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+#ifndef _INC_STDIO
+#define _INC_STDIO
+
+#include <_mingw.h>
+
+#pragma pack(push,_CRT_PACKING)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define BUFSIZ 512
+#define _NFILE _NSTREAM_
+#define _NSTREAM_ 512
+#define _IOB_ENTRIES 20
+#define EOF (-1)
+
+#ifndef _FILE_DEFINED
+ struct _iobuf {
+ char *_ptr;
+ int _cnt;
+ char *_base;
+ int _flag;
+ int _file;
+ int _charbuf;
+ int _bufsiz;
+ char *_tmpfname;
+ };
+ typedef struct _iobuf FILE;
+#define _FILE_DEFINED
+#endif
+
+#ifdef _POSIX_
+#define _P_tmpdir "/"
+#define _wP_tmpdir L"/"
+#else
+#define _P_tmpdir "\\"
+#define _wP_tmpdir L"\\"
+#endif
+
+#define L_tmpnam (sizeof(_P_tmpdir) + 12)
+
+#ifdef _POSIX_
+#define L_ctermid 9
+#define L_cuserid 32
+#endif
+
+#define SEEK_CUR 1
+#define SEEK_END 2
+#define SEEK_SET 0
+
+#define STDIN_FILENO 0
+#define STDOUT_FILENO 1
+#define STDERR_FILENO 2
+
+#define FILENAME_MAX 260
+#define FOPEN_MAX 20
+#define _SYS_OPEN 20
+#define TMP_MAX 32767
+
+#ifndef NULL
+#ifdef __cplusplus
+#define NULL 0
+#else
+#define NULL ((void *)0)
+#endif
+#endif
+
+#ifndef _OFF_T_DEFINED
+#define _OFF_T_DEFINED
+#ifndef _OFF_T_
+#define _OFF_T_
+ typedef long _off_t;
+#if !defined(NO_OLDNAMES) || defined(_POSIX)
+ typedef long off_t;
+#endif
+#endif
+#endif
+
+#ifndef _OFF64_T_DEFINED
+#define _OFF64_T_DEFINED
+ typedef long long _off64_t;
+#if !defined(NO_OLDNAMES) || defined(_POSIX)
+ typedef long long off64_t;
+#endif
+#endif
+
+#ifndef _STDIO_DEFINED
+#ifdef _WIN64
+ _CRTIMP FILE *__cdecl __iob_func(void);
+#else
+#ifdef _MSVCRT_
+extern FILE _iob[]; /* A pointer to an array of FILE */
+#define __iob_func() (_iob)
+#else
+extern FILE (*_imp___iob)[]; /* A pointer to an array of FILE */
+#define __iob_func() (*_imp___iob)
+#define _iob __iob_func()
+#endif
+#endif
+#endif
+
+#ifndef _FPOS_T_DEFINED
+#define _FPOS_T_DEFINED
+#undef _FPOSOFF
+
+#if (!defined(NO_OLDNAMES) || defined(__GNUC__)) && _INTEGRAL_MAX_BITS >= 64
+ typedef __int64 fpos_t;
+#define _FPOSOFF(fp) ((long)(fp))
+#else
+ typedef long long fpos_t;
+#define _FPOSOFF(fp) ((long)(fp))
+#endif
+
+#endif
+
+#ifndef _STDSTREAM_DEFINED
+#define _STDSTREAM_DEFINED
+
+#define stdin (&__iob_func()[0])
+#define stdout (&__iob_func()[1])
+#define stderr (&__iob_func()[2])
+#endif
+
+#define _IOREAD 0x0001
+#define _IOWRT 0x0002
+
+#define _IOFBF 0x0000
+#define _IOLBF 0x0040
+#define _IONBF 0x0004
+
+#define _IOMYBUF 0x0008
+#define _IOEOF 0x0010
+#define _IOERR 0x0020
+#define _IOSTRG 0x0040
+#define _IORW 0x0080
+#ifdef _POSIX_
+#define _IOAPPEND 0x0200
+#endif
+
+#define _TWO_DIGIT_EXPONENT 0x1
+
+#ifndef _STDIO_DEFINED
+
+ _CRTIMP int __cdecl _filbuf(FILE *_File);
+ _CRTIMP int __cdecl _flsbuf(int _Ch,FILE *_File);
+#ifdef _POSIX_
+ _CRTIMP FILE *__cdecl _fsopen(const char *_Filename,const char *_Mode);
+#else
+ _CRTIMP FILE *__cdecl _fsopen(const char *_Filename,const char *_Mode,int _ShFlag);
+#endif
+ void __cdecl clearerr(FILE *_File);
+ int __cdecl fclose(FILE *_File);
+ _CRTIMP int __cdecl _fcloseall(void);
+#ifdef _POSIX_
+ FILE *__cdecl fdopen(int _FileHandle,const char *_Mode);
+#else
+ _CRTIMP FILE *__cdecl _fdopen(int _FileHandle,const char *_Mode);
+#endif
+ int __cdecl feof(FILE *_File);
+ int __cdecl ferror(FILE *_File);
+ int __cdecl fflush(FILE *_File);
+ int __cdecl fgetc(FILE *_File);
+ _CRTIMP int __cdecl _fgetchar(void);
+ int __cdecl fgetpos(FILE *_File ,fpos_t *_Pos);
+ char *__cdecl fgets(char *_Buf,int _MaxCount,FILE *_File);
+#ifdef _POSIX_
+ int __cdecl fileno(FILE *_File);
+#else
+ _CRTIMP int __cdecl _fileno(FILE *_File);
+#endif
+ _CRTIMP char *__cdecl _tempnam(const char *_DirName,const char *_FilePrefix);
+ _CRTIMP int __cdecl _flushall(void);
+ FILE *__cdecl fopen(const char *_Filename,const char *_Mode);
+ FILE *fopen64(const char *filename,const char *mode);
+ int __cdecl fprintf(FILE *_File,const char *_Format,...);
+ int __cdecl fputc(int _Ch,FILE *_File);
+ _CRTIMP int __cdecl _fputchar(int _Ch);
+ int __cdecl fputs(const char *_Str,FILE *_File);
+ size_t __cdecl fread(void *_DstBuf,size_t _ElementSize,size_t _Count,FILE *_File);
+ FILE *__cdecl freopen(const char *_Filename,const char *_Mode,FILE *_File);
+ int __cdecl fscanf(FILE *_File,const char *_Format,...);
+ int __cdecl fsetpos(FILE *_File,const fpos_t *_Pos);
+ int __cdecl fseek(FILE *_File,long _Offset,int _Origin);
+ int fseeko64(FILE* stream, _off64_t offset, int whence);
+ long __cdecl ftell(FILE *_File);
+ _off64_t ftello64(FILE * stream);
+ int __cdecl _fseeki64(FILE *_File,__int64 _Offset,int _Origin);
+ __int64 __cdecl _ftelli64(FILE *_File);
+ size_t __cdecl fwrite(const void *_Str,size_t _Size,size_t _Count,FILE *_File);
+ int __cdecl getc(FILE *_File);
+ int __cdecl getchar(void);
+ _CRTIMP int __cdecl _getmaxstdio(void);
+ char *__cdecl gets(char *_Buffer);
+ int __cdecl _getw(FILE *_File);
+#ifndef _CRT_PERROR_DEFINED
+#define _CRT_PERROR_DEFINED
+ void __cdecl perror(const char *_ErrMsg);
+#endif
+ _CRTIMP int __cdecl _pclose(FILE *_File);
+ _CRTIMP FILE *__cdecl _popen(const char *_Command,const char *_Mode);
+#if !defined(NO_OLDNAMES) && !defined(popen)
+#define popen _popen
+#define pclose _pclose
+#endif
+ int __cdecl printf(const char *_Format,...);
+ int __cdecl putc(int _Ch,FILE *_File);
+ int __cdecl putchar(int _Ch);
+ int __cdecl puts(const char *_Str);
+ _CRTIMP int __cdecl _putw(int _Word,FILE *_File);
+#ifndef _CRT_DIRECTORY_DEFINED
+#define _CRT_DIRECTORY_DEFINED
+ int __cdecl remove(const char *_Filename);
+ int __cdecl rename(const char *_OldFilename,const char *_NewFilename);
+ _CRTIMP int __cdecl _unlink(const char *_Filename);
+#ifndef NO_OLDNAMES
+ int __cdecl unlink(const char *_Filename);
+#endif
+#endif
+ void __cdecl rewind(FILE *_File);
+ _CRTIMP int __cdecl _rmtmp(void);
+ int __cdecl scanf(const char *_Format,...);
+ void __cdecl setbuf(FILE *_File,char *_Buffer);
+ _CRTIMP int __cdecl _setmaxstdio(int _Max);
+ _CRTIMP unsigned int __cdecl _set_output_format(unsigned int _Format);
+ _CRTIMP unsigned int __cdecl _get_output_format(void);
+ int __cdecl setvbuf(FILE *_File,char *_Buf,int _Mode,size_t _Size);
+ _CRTIMP int __cdecl _scprintf(const char *_Format,...);
+ int __cdecl sscanf(const char *_Src,const char *_Format,...);
+ _CRTIMP int __cdecl _snscanf(const char *_Src,size_t _MaxCount,const char *_Format,...);
+ FILE *__cdecl tmpfile(void);
+ char *__cdecl tmpnam(char *_Buffer);
+ int __cdecl ungetc(int _Ch,FILE *_File);
+ int __cdecl vfprintf(FILE *_File,const char *_Format,va_list _ArgList);
+ int __cdecl vprintf(const char *_Format,va_list _ArgList);
+ /* Make sure macros are not defined. */
+#pragma push_macro("vsnprintf")
+#pragma push_macro("snprintf")
+# undef vsnprintf
+# undef snprintf
+ extern
+ __attribute__((format(gnu_printf, 3, 0))) __attribute__((nonnull (3)))
+ int __mingw_vsnprintf(char *_DstBuf,size_t _MaxCount,const char *_Format,va_list _ArgList);
+ extern
+ __attribute__((format(gnu_printf, 3, 4))) __attribute__((nonnull (3)))
+ int __mingw_snprintf(char* s, size_t n, const char* format, ...);
+ int __cdecl vsnprintf(char *_DstBuf,size_t _MaxCount,const char *_Format,va_list _ArgList);
+ _CRTIMP int __cdecl _snprintf(char *_Dest,size_t _Count,const char *_Format,...);
+ _CRTIMP int __cdecl _vsnprintf(char *_Dest,size_t _Count,const char *_Format,va_list _Args);
+ int __cdecl sprintf(char *_Dest,const char *_Format,...);
+ int __cdecl vsprintf(char *_Dest,const char *_Format,va_list _Args);
+#ifndef __NO_ISOCEXT /* externs in libmingwex.a */
+ int __cdecl snprintf(char* s, size_t n, const char* format, ...);
+ __CRT_INLINE int __cdecl vsnprintf (char* s, size_t n, const char* format,va_list arg) {
+ return _vsnprintf ( s, n, format, arg);
+ }
+ int __cdecl vscanf(const char * Format, va_list argp);
+ int __cdecl vfscanf (FILE * fp, const char * Format,va_list argp);
+ int __cdecl vsscanf (const char * _Str,const char * Format,va_list argp);
+#endif
+/* Restore may prior defined macros snprintf/vsnprintf. */
+#pragma pop_macro("snprintf")
+#pragma pop_macro("vsnprintf")
+/* Check if vsnprintf and snprintf are defaulting to gnu-style. */
+# if defined(USE_MINGW_GNU_SNPRINTF) && USE_MINGW_GNU_SNPRINTF
+# ifndef vsnprint
+# define vsnprintf __mingw_vsnprintf
+# endif
+# ifndef snprintf
+# define snprintf __mingw_snprintf
+# endif
+# endif
+ _CRTIMP int __cdecl _vscprintf(const char *_Format,va_list _ArgList);
+ _CRTIMP int __cdecl _set_printf_count_output(int _Value);
+ _CRTIMP int __cdecl _get_printf_count_output(void);
+
+#ifndef _WSTDIO_DEFINED
+
+#ifndef WEOF
+#define WEOF (wint_t)(0xFFFF)
+#endif
+
+#ifdef _POSIX_
+ _CRTIMP FILE *__cdecl _wfsopen(const wchar_t *_Filename,const wchar_t *_Mode);
+#else
+ _CRTIMP FILE *__cdecl _wfsopen(const wchar_t *_Filename,const wchar_t *_Mode,int _ShFlag);
+#endif
+ wint_t __cdecl fgetwc(FILE *_File);
+ _CRTIMP wint_t __cdecl _fgetwchar(void);
+ wint_t __cdecl fputwc(wchar_t _Ch,FILE *_File);
+ _CRTIMP wint_t __cdecl _fputwchar(wchar_t _Ch);
+ wint_t __cdecl getwc(FILE *_File);
+ wint_t __cdecl getwchar(void);
+ wint_t __cdecl putwc(wchar_t _Ch,FILE *_File);
+ wint_t __cdecl putwchar(wchar_t _Ch);
+ wint_t __cdecl ungetwc(wint_t _Ch,FILE *_File);
+ wchar_t *__cdecl fgetws(wchar_t *_Dst,int _SizeInWords,FILE *_File);
+ int __cdecl fputws(const wchar_t *_Str,FILE *_File);
+ _CRTIMP wchar_t *__cdecl _getws(wchar_t *_String);
+ _CRTIMP int __cdecl _putws(const wchar_t *_Str);
+ int __cdecl fwprintf(FILE *_File,const wchar_t *_Format,...);
+ int __cdecl wprintf(const wchar_t *_Format,...);
+ _CRTIMP int __cdecl _scwprintf(const wchar_t *_Format,...);
+ int __cdecl vfwprintf(FILE *_File,const wchar_t *_Format,va_list _ArgList);
+ int __cdecl vwprintf(const wchar_t *_Format,va_list _ArgList);
+ _CRTIMP int __cdecl swprintf(wchar_t*, const wchar_t*, ...);
+ _CRTIMP int __cdecl vswprintf(wchar_t*, const wchar_t*,va_list);
+ _CRTIMP int __cdecl _swprintf_c(wchar_t *_DstBuf,size_t _SizeInWords,const wchar_t *_Format,...);
+ _CRTIMP int __cdecl _vswprintf_c(wchar_t *_DstBuf,size_t _SizeInWords,const wchar_t *_Format,va_list _ArgList);
+ _CRTIMP int __cdecl _snwprintf(wchar_t *_Dest,size_t _Count,const wchar_t *_Format,...);
+ _CRTIMP int __cdecl _vsnwprintf(wchar_t *_Dest,size_t _Count,const wchar_t *_Format,va_list _Args);
+#ifndef __NO_ISOCEXT /* externs in libmingwex.a */
+ int __cdecl snwprintf (wchar_t* s, size_t n, const wchar_t* format, ...);
+ __CRT_INLINE int __cdecl vsnwprintf (wchar_t* s, size_t n, const wchar_t* format, va_list arg) { return _vsnwprintf(s,n,format,arg); }
+ int __cdecl vwscanf (const wchar_t *, va_list);
+ int __cdecl vfwscanf (FILE *,const wchar_t *,va_list);
+ int __cdecl vswscanf (const wchar_t *,const wchar_t *,va_list);
+#endif
+ _CRTIMP int __cdecl _swprintf(wchar_t *_Dest,const wchar_t *_Format,...);
+ _CRTIMP int __cdecl _vswprintf(wchar_t *_Dest,const wchar_t *_Format,va_list _Args);
+
+#ifndef RC_INVOKED
+#include <vadefs.h>
+#endif
+
+#ifdef _CRT_NON_CONFORMING_SWPRINTFS
+#ifndef __cplusplus
+#define swprintf _swprintf
+#define vswprintf _vswprintf
+#define _swprintf_l __swprintf_l
+#define _vswprintf_l __vswprintf_l
+#endif
+#endif
+
+ _CRTIMP wchar_t *__cdecl _wtempnam(const wchar_t *_Directory,const wchar_t *_FilePrefix);
+ _CRTIMP int __cdecl _vscwprintf(const wchar_t *_Format,va_list _ArgList);
+ int __cdecl fwscanf(FILE *_File,const wchar_t *_Format,...);
+ int __cdecl swscanf(const wchar_t *_Src,const wchar_t *_Format,...);
+ _CRTIMP int __cdecl _snwscanf(const wchar_t *_Src,size_t _MaxCount,const wchar_t *_Format,...);
+ int __cdecl wscanf(const wchar_t *_Format,...);
+ _CRTIMP FILE *__cdecl _wfdopen(int _FileHandle ,const wchar_t *_Mode);
+ _CRTIMP FILE *__cdecl _wfopen(const wchar_t *_Filename,const wchar_t *_Mode);
+ _CRTIMP FILE *__cdecl _wfreopen(const wchar_t *_Filename,const wchar_t *_Mode,FILE *_OldFile);
+#ifndef _CRT_WPERROR_DEFINED
+#define _CRT_WPERROR_DEFINED
+ _CRTIMP void __cdecl _wperror(const wchar_t *_ErrMsg);
+#endif
+ _CRTIMP FILE *__cdecl _wpopen(const wchar_t *_Command,const wchar_t *_Mode);
+#if !defined(NO_OLDNAMES) && !defined(wpopen)
+#define wpopen _wpopen
+#endif
+ _CRTIMP int __cdecl _wremove(const wchar_t *_Filename);
+ _CRTIMP wchar_t *__cdecl _wtmpnam(wchar_t *_Buffer);
+ _CRTIMP wint_t __cdecl _fgetwc_nolock(FILE *_File);
+ _CRTIMP wint_t __cdecl _fputwc_nolock(wchar_t _Ch,FILE *_File);
+ _CRTIMP wint_t __cdecl _ungetwc_nolock(wint_t _Ch,FILE *_File);
+
+#undef _CRT_GETPUTWCHAR_NOINLINE
+
+#if !defined(__cplusplus) || defined(_CRT_GETPUTWCHAR_NOINLINE)
+#define getwchar() fgetwc(stdin)
+#define putwchar(_c) fputwc((_c),stdout)
+#else
+ __CRT_INLINE wint_t __cdecl getwchar() { return (fgetwc(stdin)); }
+ __CRT_INLINE wint_t __cdecl putwchar(wchar_t _C) { return (fputwc(_C,stdout)); }
+#endif
+
+#define getwc(_stm) fgetwc(_stm)
+#define putwc(_c,_stm) fputwc(_c,_stm)
+#define _putwc_nolock(_c,_stm) _fputwc_nolock(_c,_stm)
+#define _getwc_nolock(_stm) _fgetwc_nolock(_stm)
+
+#define _WSTDIO_DEFINED
+#endif
+
+#define _STDIO_DEFINED
+#endif
+
+#define _fgetc_nolock(_stream) (--(_stream)->_cnt >= 0 ? 0xff & *(_stream)->_ptr++ : _filbuf(_stream))
+#define _fputc_nolock(_c,_stream) (--(_stream)->_cnt >= 0 ? 0xff & (*(_stream)->_ptr++ = (char)(_c)) : _flsbuf((_c),(_stream)))
+#define _getc_nolock(_stream) _fgetc_nolock(_stream)
+#define _putc_nolock(_c,_stream) _fputc_nolock(_c,_stream)
+#define _getchar_nolock() _getc_nolock(stdin)
+#define _putchar_nolock(_c) _putc_nolock((_c),stdout)
+#define _getwchar_nolock() _getwc_nolock(stdin)
+#define _putwchar_nolock(_c) _putwc_nolock((_c),stdout)
+
+ _CRTIMP void __cdecl _lock_file(FILE *_File);
+ _CRTIMP void __cdecl _unlock_file(FILE *_File);
+ _CRTIMP int __cdecl _fclose_nolock(FILE *_File);
+ _CRTIMP int __cdecl _fflush_nolock(FILE *_File);
+ _CRTIMP size_t __cdecl _fread_nolock(void *_DstBuf,size_t _ElementSize,size_t _Count,FILE *_File);
+ _CRTIMP int __cdecl _fseek_nolock(FILE *_File,long _Offset,int _Origin);
+ _CRTIMP long __cdecl _ftell_nolock(FILE *_File);
+ _CRTIMP int __cdecl _fseeki64_nolock(FILE *_File,__int64 _Offset,int _Origin);
+ _CRTIMP __int64 __cdecl _ftelli64_nolock(FILE *_File);
+ _CRTIMP size_t __cdecl _fwrite_nolock(const void *_DstBuf,size_t _Size,size_t _Count,FILE *_File);
+ _CRTIMP int __cdecl _ungetc_nolock(int _Ch,FILE *_File);
+
+#if !defined(NO_OLDNAMES) || !defined(_POSIX)
+#define P_tmpdir _P_tmpdir
+#define SYS_OPEN _SYS_OPEN
+
+ char *__cdecl tempnam(const char *_Directory,const char *_FilePrefix);
+ int __cdecl fcloseall(void);
+ FILE *__cdecl fdopen(int _FileHandle,const char *_Format);
+ int __cdecl fgetchar(void);
+ int __cdecl fileno(FILE *_File);
+ int __cdecl flushall(void);
+ int __cdecl fputchar(int _Ch);
+ int __cdecl getw(FILE *_File);
+ int __cdecl putw(int _Ch,FILE *_File);
+ int __cdecl rmtmp(void);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#pragma pack(pop)
+
+#include <sec_api/stdio_s.h>
+
+#endif
diff --git a/tcc/include/stdlib.h b/tcc/include/stdlib.h
new file mode 100644
index 0000000..96765b2
--- /dev/null
+++ b/tcc/include/stdlib.h
@@ -0,0 +1,580 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+#ifndef _INC_STDLIB
+#define _INC_STDLIB
+
+#include <_mingw.h>
+#include <limits.h>
+
+#pragma pack(push,_CRT_PACKING)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef NULL
+#ifdef __cplusplus
+#define NULL 0
+#else
+#define NULL ((void *)0)
+#endif
+#endif
+
+#define EXIT_SUCCESS 0
+#define EXIT_FAILURE 1
+
+#ifndef _ONEXIT_T_DEFINED
+#define _ONEXIT_T_DEFINED
+
+ typedef int (__cdecl *_onexit_t)(void);
+
+#ifndef NO_OLDNAMES
+#define onexit_t _onexit_t
+#endif
+#endif
+
+#ifndef _DIV_T_DEFINED
+#define _DIV_T_DEFINED
+
+ typedef struct _div_t {
+ int quot;
+ int rem;
+ } div_t;
+
+ typedef struct _ldiv_t {
+ long quot;
+ long rem;
+ } ldiv_t;
+#endif
+
+#ifndef _CRT_DOUBLE_DEC
+#define _CRT_DOUBLE_DEC
+
+#pragma pack(4)
+ typedef struct {
+ unsigned char ld[10];
+ } _LDOUBLE;
+#pragma pack()
+
+#define _PTR_LD(x) ((unsigned char *)(&(x)->ld))
+
+ typedef struct {
+ double x;
+ } _CRT_DOUBLE;
+
+ typedef struct {
+ float f;
+ } _CRT_FLOAT;
+
+#pragma push_macro("long")
+#undef long
+
+ typedef struct {
+ long double x;
+ } _LONGDOUBLE;
+
+#pragma pop_macro("long")
+
+#pragma pack(4)
+ typedef struct {
+ unsigned char ld12[12];
+ } _LDBL12;
+#pragma pack()
+#endif
+
+#define RAND_MAX 0x7fff
+
+#ifndef MB_CUR_MAX
+#define MB_CUR_MAX ___mb_cur_max_func()
+#ifndef __mb_cur_max
+#ifdef _MSVCRT_
+ extern int __mb_cur_max;
+#else
+#define __mb_cur_max (*_imp____mb_cur_max)
+ extern int *_imp____mb_cur_max;
+#endif
+#endif
+#ifdef _MSVCRT_
+ extern int __mbcur_max;
+#define ___mb_cur_max_func() (__mb_cur_max)
+#else
+ extern int* _imp____mbcur_max;
+#define ___mb_cur_max_func() (*_imp____mb_cur_max)
+#endif
+#endif
+
+#define __max(a,b) (((a) > (b)) ? (a) : (b))
+#define __min(a,b) (((a) < (b)) ? (a) : (b))
+
+#define _MAX_PATH 260
+#define _MAX_DRIVE 3
+#define _MAX_DIR 256
+#define _MAX_FNAME 256
+#define _MAX_EXT 256
+
+#define _OUT_TO_DEFAULT 0
+#define _OUT_TO_STDERR 1
+#define _OUT_TO_MSGBOX 2
+#define _REPORT_ERRMODE 3
+
+#define _WRITE_ABORT_MSG 0x1
+#define _CALL_REPORTFAULT 0x2
+
+#define _MAX_ENV 32767
+
+ typedef void (__cdecl *_purecall_handler)(void);
+
+ _CRTIMP _purecall_handler __cdecl _set_purecall_handler(_purecall_handler _Handler);
+ _CRTIMP _purecall_handler __cdecl _get_purecall_handler(void);
+
+ typedef void (__cdecl *_invalid_parameter_handler)(const wchar_t *,const wchar_t *,const wchar_t *,unsigned int,uintptr_t);
+ _invalid_parameter_handler __cdecl _set_invalid_parameter_handler(_invalid_parameter_handler _Handler);
+ _invalid_parameter_handler __cdecl _get_invalid_parameter_handler(void);
+
+#ifndef _CRT_ERRNO_DEFINED
+#define _CRT_ERRNO_DEFINED
+ _CRTIMP extern int *__cdecl _errno(void);
+#define errno (*_errno())
+ errno_t __cdecl _set_errno(int _Value);
+ errno_t __cdecl _get_errno(int *_Value);
+#endif
+ _CRTIMP unsigned long *__cdecl __doserrno(void);
+#define _doserrno (*__doserrno())
+ errno_t __cdecl _set_doserrno(unsigned long _Value);
+ errno_t __cdecl _get_doserrno(unsigned long *_Value);
+#ifdef _MSVCRT_
+ extern char *_sys_errlist[];
+ extern int _sys_nerr;
+#else
+ _CRTIMP char *_sys_errlist[1];
+ _CRTIMP int _sys_nerr;
+#endif
+#if (defined(_X86_) && !defined(__x86_64))
+ _CRTIMP int *__cdecl __p___argc(void);
+ _CRTIMP char ***__cdecl __p___argv(void);
+ _CRTIMP wchar_t ***__cdecl __p___wargv(void);
+ _CRTIMP char ***__cdecl __p__environ(void);
+ _CRTIMP wchar_t ***__cdecl __p__wenviron(void);
+ _CRTIMP char **__cdecl __p__pgmptr(void);
+ _CRTIMP wchar_t **__cdecl __p__wpgmptr(void);
+#endif
+#ifndef __argc
+#ifdef _MSVCRT_
+ extern int __argc;
+#else
+#define __argc (*_imp____argc)
+ extern int *_imp____argc;
+#endif
+#endif
+#ifndef __argv
+#ifdef _MSVCRT_
+ extern char **__argv;
+#else
+#define __argv (*_imp____argv)
+ extern char ***_imp____argv;
+#endif
+#endif
+#ifndef __wargv
+#ifdef _MSVCRT_
+ extern wchar_t **__wargv;
+#else
+#define __wargv (*_imp____wargv)
+ extern wchar_t ***_imp____wargv;
+#endif
+#endif
+
+#ifdef _POSIX_
+ extern char **environ;
+#else
+#ifndef _environ
+#ifdef _MSVCRT_
+ extern char **_environ;
+#else
+#define _environ (*_imp___environ)
+ extern char ***_imp___environ;
+#endif
+#endif
+
+#ifndef _wenviron
+#ifdef _MSVCRT_
+ extern wchar_t **_wenviron;
+#else
+#define _wenviron (*_imp___wenviron)
+ extern wchar_t ***_imp___wenviron;
+#endif
+#endif
+#endif
+#ifndef _pgmptr
+#ifdef _MSVCRT_
+ extern char *_pgmptr;
+#else
+#define _pgmptr (*_imp___pgmptr)
+ extern char **_imp___pgmptr;
+#endif
+#endif
+
+#ifndef _wpgmptr
+#ifdef _MSVCRT_
+ extern wchar_t *_wpgmptr;
+#else
+#define _wpgmptr (*_imp___wpgmptr)
+ extern wchar_t **_imp___wpgmptr;
+#endif
+#endif
+ errno_t __cdecl _get_pgmptr(char **_Value);
+ errno_t __cdecl _get_wpgmptr(wchar_t **_Value);
+#ifndef _fmode
+#ifdef _MSVCRT_
+ extern int _fmode;
+#else
+#define _fmode (*_imp___fmode)
+ extern int *_imp___fmode;
+#endif
+#endif
+ _CRTIMP errno_t __cdecl _set_fmode(int _Mode);
+ _CRTIMP errno_t __cdecl _get_fmode(int *_PMode);
+
+#ifndef _osplatform
+#ifdef _MSVCRT_
+ extern unsigned int _osplatform;
+#else
+#define _osplatform (*_imp___osplatform)
+ extern unsigned int *_imp___osplatform;
+#endif
+#endif
+
+#ifndef _osver
+#ifdef _MSVCRT_
+ extern unsigned int _osver;
+#else
+#define _osver (*_imp___osver)
+ extern unsigned int *_imp___osver;
+#endif
+#endif
+
+#ifndef _winver
+#ifdef _MSVCRT_
+ extern unsigned int _winver;
+#else
+#define _winver (*_imp___winver)
+ extern unsigned int *_imp___winver;
+#endif
+#endif
+
+#ifndef _winmajor
+#ifdef _MSVCRT_
+ extern unsigned int _winmajor;
+#else
+#define _winmajor (*_imp___winmajor)
+ extern unsigned int *_imp___winmajor;
+#endif
+#endif
+
+#ifndef _winminor
+#ifdef _MSVCRT_
+ extern unsigned int _winminor;
+#else
+#define _winminor (*_imp___winminor)
+ extern unsigned int *_imp___winminor;
+#endif
+#endif
+
+ errno_t __cdecl _get_osplatform(unsigned int *_Value);
+ errno_t __cdecl _get_osver(unsigned int *_Value);
+ errno_t __cdecl _get_winver(unsigned int *_Value);
+ errno_t __cdecl _get_winmajor(unsigned int *_Value);
+ errno_t __cdecl _get_winminor(unsigned int *_Value);
+#ifndef _countof
+#ifndef __cplusplus
+#define _countof(_Array) (sizeof(_Array) / sizeof(_Array[0]))
+#else
+ extern "C++" {
+ template <typename _CountofType,size_t _SizeOfArray> char (*__countof_helper(UNALIGNED _CountofType (&_Array)[_SizeOfArray]))[_SizeOfArray];
+#define _countof(_Array) sizeof(*__countof_helper(_Array))
+ }
+#endif
+#endif
+
+#ifndef _CRT_TERMINATE_DEFINED
+#define _CRT_TERMINATE_DEFINED
+ void __cdecl __MINGW_NOTHROW exit(int _Code) __MINGW_ATTRIB_NORETURN;
+ _CRTIMP void __cdecl __MINGW_NOTHROW _exit(int _Code) __MINGW_ATTRIB_NORETURN;
+#if !defined __NO_ISOCEXT /* extern stub in static libmingwex.a */
+ /* C99 function name */
+ void __cdecl _Exit(int) __MINGW_ATTRIB_NORETURN;
+ __CRT_INLINE __MINGW_ATTRIB_NORETURN void __cdecl _Exit(int status)
+ { _exit(status); }
+#endif
+
+#pragma push_macro("abort")
+#undef abort
+ void __cdecl __declspec(noreturn) abort(void);
+#pragma pop_macro("abort")
+
+#endif
+
+ _CRTIMP unsigned int __cdecl _set_abort_behavior(unsigned int _Flags,unsigned int _Mask);
+
+#ifndef _CRT_ABS_DEFINED
+#define _CRT_ABS_DEFINED
+ int __cdecl abs(int _X);
+ long __cdecl labs(long _X);
+#endif
+
+#if _INTEGRAL_MAX_BITS >= 64
+ __int64 __cdecl _abs64(__int64);
+#endif
+ int __cdecl atexit(void (__cdecl *)(void));
+#ifndef _CRT_ATOF_DEFINED
+#define _CRT_ATOF_DEFINED
+ double __cdecl atof(const char *_String);
+ double __cdecl _atof_l(const char *_String,_locale_t _Locale);
+#endif
+ int __cdecl atoi(const char *_Str);
+ _CRTIMP int __cdecl _atoi_l(const char *_Str,_locale_t _Locale);
+ long __cdecl atol(const char *_Str);
+ _CRTIMP long __cdecl _atol_l(const char *_Str,_locale_t _Locale);
+#ifndef _CRT_ALGO_DEFINED
+#define _CRT_ALGO_DEFINED
+ void *__cdecl bsearch(const void *_Key,const void *_Base,size_t _NumOfElements,size_t _SizeOfElements,int (__cdecl *_PtFuncCompare)(const void *,const void *));
+ void __cdecl qsort(void *_Base,size_t _NumOfElements,size_t _SizeOfElements,int (__cdecl *_PtFuncCompare)(const void *,const void *));
+#endif
+ unsigned short __cdecl _byteswap_ushort(unsigned short _Short);
+ /*unsigned long __cdecl _byteswap_ulong (unsigned long _Long); */
+#if _INTEGRAL_MAX_BITS >= 64
+ unsigned __int64 __cdecl _byteswap_uint64(unsigned __int64 _Int64);
+#endif
+ div_t __cdecl div(int _Numerator,int _Denominator);
+ char *__cdecl getenv(const char *_VarName);
+ _CRTIMP char *__cdecl _itoa(int _Value,char *_Dest,int _Radix);
+#if _INTEGRAL_MAX_BITS >= 64
+ _CRTIMP char *__cdecl _i64toa(__int64 _Val,char *_DstBuf,int _Radix);
+ _CRTIMP char *__cdecl _ui64toa(unsigned __int64 _Val,char *_DstBuf,int _Radix);
+ _CRTIMP __int64 __cdecl _atoi64(const char *_String);
+ _CRTIMP __int64 __cdecl _atoi64_l(const char *_String,_locale_t _Locale);
+ _CRTIMP __int64 __cdecl _strtoi64(const char *_String,char **_EndPtr,int _Radix);
+ _CRTIMP __int64 __cdecl _strtoi64_l(const char *_String,char **_EndPtr,int _Radix,_locale_t _Locale);
+ _CRTIMP unsigned __int64 __cdecl _strtoui64(const char *_String,char **_EndPtr,int _Radix);
+ _CRTIMP unsigned __int64 __cdecl _strtoui64_l(const char *_String,char **_EndPtr,int _Radix,_locale_t _Locale);
+#endif
+ ldiv_t __cdecl ldiv(long _Numerator,long _Denominator);
+ _CRTIMP char *__cdecl _ltoa(long _Value,char *_Dest,int _Radix);
+ int __cdecl mblen(const char *_Ch,size_t _MaxCount);
+ _CRTIMP int __cdecl _mblen_l(const char *_Ch,size_t _MaxCount,_locale_t _Locale);
+ _CRTIMP size_t __cdecl _mbstrlen(const char *_Str);
+ _CRTIMP size_t __cdecl _mbstrlen_l(const char *_Str,_locale_t _Locale);
+ _CRTIMP size_t __cdecl _mbstrnlen(const char *_Str,size_t _MaxCount);
+ _CRTIMP size_t __cdecl _mbstrnlen_l(const char *_Str,size_t _MaxCount,_locale_t _Locale);
+ int __cdecl mbtowc(wchar_t *_DstCh,const char *_SrcCh,size_t _SrcSizeInBytes);
+ _CRTIMP int __cdecl _mbtowc_l(wchar_t *_DstCh,const char *_SrcCh,size_t _SrcSizeInBytes,_locale_t _Locale);
+ size_t __cdecl mbstowcs(wchar_t *_Dest,const char *_Source,size_t _MaxCount);
+ _CRTIMP size_t __cdecl _mbstowcs_l(wchar_t *_Dest,const char *_Source,size_t _MaxCount,_locale_t _Locale);
+ int __cdecl rand(void);
+ _CRTIMP int __cdecl _set_error_mode(int _Mode);
+ void __cdecl srand(unsigned int _Seed);
+ double __cdecl strtod(const char *_Str,char **_EndPtr);
+ float __cdecl strtof(const char *nptr, char **endptr);
+#if !defined __NO_ISOCEXT /* in libmingwex.a */
+ float __cdecl strtof (const char * __restrict__, char ** __restrict__);
+ long double __cdecl strtold(const char * __restrict__, char ** __restrict__);
+#endif /* __NO_ISOCEXT */
+ _CRTIMP double __cdecl _strtod_l(const char *_Str,char **_EndPtr,_locale_t _Locale);
+ long __cdecl strtol(const char *_Str,char **_EndPtr,int _Radix);
+ _CRTIMP long __cdecl _strtol_l(const char *_Str,char **_EndPtr,int _Radix,_locale_t _Locale);
+ unsigned long __cdecl strtoul(const char *_Str,char **_EndPtr,int _Radix);
+ _CRTIMP unsigned long __cdecl _strtoul_l(const char *_Str,char **_EndPtr,int _Radix,_locale_t _Locale);
+#ifndef _CRT_SYSTEM_DEFINED
+#define _CRT_SYSTEM_DEFINED
+ int __cdecl system(const char *_Command);
+#endif
+ _CRTIMP char *__cdecl _ultoa(unsigned long _Value,char *_Dest,int _Radix);
+ int __cdecl wctomb(char *_MbCh,wchar_t _WCh);
+ _CRTIMP int __cdecl _wctomb_l(char *_MbCh,wchar_t _WCh,_locale_t _Locale);
+ size_t __cdecl wcstombs(char *_Dest,const wchar_t *_Source,size_t _MaxCount);
+ _CRTIMP size_t __cdecl _wcstombs_l(char *_Dest,const wchar_t *_Source,size_t _MaxCount,_locale_t _Locale);
+
+#ifndef _CRT_ALLOCATION_DEFINED
+#define _CRT_ALLOCATION_DEFINED
+ void *__cdecl calloc(size_t _NumOfElements,size_t _SizeOfElements);
+ void __cdecl free(void *_Memory);
+ void *__cdecl malloc(size_t _Size);
+ void *__cdecl realloc(void *_Memory,size_t _NewSize);
+ _CRTIMP void *__cdecl _recalloc(void *_Memory,size_t _Count,size_t _Size);
+ //_CRTIMP void __cdecl _aligned_free(void *_Memory);
+ //_CRTIMP void *__cdecl _aligned_malloc(size_t _Size,size_t _Alignment);
+ _CRTIMP void *__cdecl _aligned_offset_malloc(size_t _Size,size_t _Alignment,size_t _Offset);
+ _CRTIMP void *__cdecl _aligned_realloc(void *_Memory,size_t _Size,size_t _Alignment);
+ _CRTIMP void *__cdecl _aligned_recalloc(void *_Memory,size_t _Count,size_t _Size,size_t _Alignment);
+ _CRTIMP void *__cdecl _aligned_offset_realloc(void *_Memory,size_t _Size,size_t _Alignment,size_t _Offset);
+ _CRTIMP void *__cdecl _aligned_offset_recalloc(void *_Memory,size_t _Count,size_t _Size,size_t _Alignment,size_t _Offset);
+#endif
+
+#ifndef _WSTDLIB_DEFINED
+#define _WSTDLIB_DEFINED
+
+ _CRTIMP wchar_t *__cdecl _itow(int _Value,wchar_t *_Dest,int _Radix);
+ _CRTIMP wchar_t *__cdecl _ltow(long _Value,wchar_t *_Dest,int _Radix);
+ _CRTIMP wchar_t *__cdecl _ultow(unsigned long _Value,wchar_t *_Dest,int _Radix);
+ double __cdecl wcstod(const wchar_t *_Str,wchar_t **_EndPtr);
+ float __cdecl wcstof(const wchar_t *nptr, wchar_t **endptr);
+#if !defined __NO_ISOCEXT /* in libmingwex.a */
+ float __cdecl wcstof( const wchar_t * __restrict__, wchar_t ** __restrict__);
+ long double __cdecl wcstold(const wchar_t * __restrict__, wchar_t ** __restrict__);
+#endif /* __NO_ISOCEXT */
+ _CRTIMP double __cdecl _wcstod_l(const wchar_t *_Str,wchar_t **_EndPtr,_locale_t _Locale);
+ long __cdecl wcstol(const wchar_t *_Str,wchar_t **_EndPtr,int _Radix);
+ _CRTIMP long __cdecl _wcstol_l(const wchar_t *_Str,wchar_t **_EndPtr,int _Radix,_locale_t _Locale);
+ unsigned long __cdecl wcstoul(const wchar_t *_Str,wchar_t **_EndPtr,int _Radix);
+ _CRTIMP unsigned long __cdecl _wcstoul_l(const wchar_t *_Str,wchar_t **_EndPtr,int _Radix,_locale_t _Locale);
+ _CRTIMP wchar_t *__cdecl _wgetenv(const wchar_t *_VarName);
+#ifndef _CRT_WSYSTEM_DEFINED
+#define _CRT_WSYSTEM_DEFINED
+ _CRTIMP int __cdecl _wsystem(const wchar_t *_Command);
+#endif
+ _CRTIMP double __cdecl _wtof(const wchar_t *_Str);
+ _CRTIMP double __cdecl _wtof_l(const wchar_t *_Str,_locale_t _Locale);
+ _CRTIMP int __cdecl _wtoi(const wchar_t *_Str);
+ _CRTIMP int __cdecl _wtoi_l(const wchar_t *_Str,_locale_t _Locale);
+ _CRTIMP long __cdecl _wtol(const wchar_t *_Str);
+ _CRTIMP long __cdecl _wtol_l(const wchar_t *_Str,_locale_t _Locale);
+
+#if _INTEGRAL_MAX_BITS >= 64
+ _CRTIMP wchar_t *__cdecl _i64tow(__int64 _Val,wchar_t *_DstBuf,int _Radix);
+ _CRTIMP wchar_t *__cdecl _ui64tow(unsigned __int64 _Val,wchar_t *_DstBuf,int _Radix);
+ _CRTIMP __int64 __cdecl _wtoi64(const wchar_t *_Str);
+ _CRTIMP __int64 __cdecl _wtoi64_l(const wchar_t *_Str,_locale_t _Locale);
+ _CRTIMP __int64 __cdecl _wcstoi64(const wchar_t *_Str,wchar_t **_EndPtr,int _Radix);
+ _CRTIMP __int64 __cdecl _wcstoi64_l(const wchar_t *_Str,wchar_t **_EndPtr,int _Radix,_locale_t _Locale);
+ _CRTIMP unsigned __int64 __cdecl _wcstoui64(const wchar_t *_Str,wchar_t **_EndPtr,int _Radix);
+ _CRTIMP unsigned __int64 __cdecl _wcstoui64_l(const wchar_t *_Str ,wchar_t **_EndPtr,int _Radix,_locale_t _Locale);
+#endif
+#endif
+
+#ifndef _POSIX_
+#define _CVTBUFSIZE (309+40)
+ _CRTIMP char *__cdecl _fullpath(char *_FullPath,const char *_Path,size_t _SizeInBytes);
+ _CRTIMP char *__cdecl _ecvt(double _Val,int _NumOfDigits,int *_PtDec,int *_PtSign);
+ _CRTIMP char *__cdecl _fcvt(double _Val,int _NumOfDec,int *_PtDec,int *_PtSign);
+ _CRTIMP char *__cdecl _gcvt(double _Val,int _NumOfDigits,char *_DstBuf);
+ _CRTIMP int __cdecl _atodbl(_CRT_DOUBLE *_Result,char *_Str);
+ _CRTIMP int __cdecl _atoldbl(_LDOUBLE *_Result,char *_Str);
+ _CRTIMP int __cdecl _atoflt(_CRT_FLOAT *_Result,char *_Str);
+ _CRTIMP int __cdecl _atodbl_l(_CRT_DOUBLE *_Result,char *_Str,_locale_t _Locale);
+ _CRTIMP int __cdecl _atoldbl_l(_LDOUBLE *_Result,char *_Str,_locale_t _Locale);
+ _CRTIMP int __cdecl _atoflt_l(_CRT_FLOAT *_Result,char *_Str,_locale_t _Locale);
+ unsigned long __cdecl _lrotl(unsigned long _Val,int _Shift);
+ unsigned long __cdecl _lrotr(unsigned long _Val,int _Shift);
+ _CRTIMP void __cdecl _makepath(char *_Path,const char *_Drive,const char *_Dir,const char *_Filename,const char *_Ext);
+ _onexit_t __cdecl _onexit(_onexit_t _Func);
+
+#ifndef _CRT_PERROR_DEFINED
+#define _CRT_PERROR_DEFINED
+ void __cdecl perror(const char *_ErrMsg);
+#endif
+ _CRTIMP int __cdecl _putenv(const char *_EnvString);
+ unsigned int __cdecl _rotl(unsigned int _Val,int _Shift);
+#if _INTEGRAL_MAX_BITS >= 64
+ unsigned __int64 __cdecl _rotl64(unsigned __int64 _Val,int _Shift);
+#endif
+ unsigned int __cdecl _rotr(unsigned int _Val,int _Shift);
+#if _INTEGRAL_MAX_BITS >= 64
+ unsigned __int64 __cdecl _rotr64(unsigned __int64 _Val,int _Shift);
+#endif
+ _CRTIMP void __cdecl _searchenv(const char *_Filename,const char *_EnvVar,char *_ResultPath);
+ _CRTIMP void __cdecl _splitpath(const char *_FullPath,char *_Drive,char *_Dir,char *_Filename,char *_Ext);
+ _CRTIMP void __cdecl _swab(char *_Buf1,char *_Buf2,int _SizeInBytes);
+
+#ifndef _WSTDLIBP_DEFINED
+#define _WSTDLIBP_DEFINED
+ _CRTIMP wchar_t *__cdecl _wfullpath(wchar_t *_FullPath,const wchar_t *_Path,size_t _SizeInWords);
+ _CRTIMP void __cdecl _wmakepath(wchar_t *_ResultPath,const wchar_t *_Drive,const wchar_t *_Dir,const wchar_t *_Filename,const wchar_t *_Ext);
+#ifndef _CRT_WPERROR_DEFINED
+#define _CRT_WPERROR_DEFINED
+ _CRTIMP void __cdecl _wperror(const wchar_t *_ErrMsg);
+#endif
+ _CRTIMP int __cdecl _wputenv(const wchar_t *_EnvString);
+ _CRTIMP void __cdecl _wsearchenv(const wchar_t *_Filename,const wchar_t *_EnvVar,wchar_t *_ResultPath);
+ _CRTIMP void __cdecl _wsplitpath(const wchar_t *_FullPath,wchar_t *_Drive,wchar_t *_Dir,wchar_t *_Filename,wchar_t *_Ext);
+#endif
+
+ _CRTIMP void __cdecl _beep(unsigned _Frequency,unsigned _Duration) __MINGW_ATTRIB_DEPRECATED;
+ /* Not to be confused with _set_error_mode (int). */
+ _CRTIMP void __cdecl _seterrormode(int _Mode) __MINGW_ATTRIB_DEPRECATED;
+ _CRTIMP void __cdecl _sleep(unsigned long _Duration) __MINGW_ATTRIB_DEPRECATED;
+#endif
+
+#ifndef NO_OLDNAMES
+#ifndef _POSIX_
+#if 0
+#ifndef __cplusplus
+#ifndef NOMINMAX
+#ifndef max
+#define max(a,b) (((a) > (b)) ? (a) : (b))
+#endif
+#ifndef min
+#define min(a,b) (((a) < (b)) ? (a) : (b))
+#endif
+#endif
+#endif
+#endif
+
+#define sys_errlist _sys_errlist
+#define sys_nerr _sys_nerr
+#define environ _environ
+ char *__cdecl ecvt(double _Val,int _NumOfDigits,int *_PtDec,int *_PtSign);
+ char *__cdecl fcvt(double _Val,int _NumOfDec,int *_PtDec,int *_PtSign);
+ char *__cdecl gcvt(double _Val,int _NumOfDigits,char *_DstBuf);
+ char *__cdecl itoa(int _Val,char *_DstBuf,int _Radix);
+ char *__cdecl ltoa(long _Val,char *_DstBuf,int _Radix);
+ int __cdecl putenv(const char *_EnvString);
+ void __cdecl swab(char *_Buf1,char *_Buf2,int _SizeInBytes);
+ char *__cdecl ultoa(unsigned long _Val,char *_Dstbuf,int _Radix);
+ onexit_t __cdecl onexit(onexit_t _Func);
+#endif
+#endif
+
+#if !defined __NO_ISOCEXT /* externs in static libmingwex.a */
+
+ typedef struct { long long quot, rem; } lldiv_t;
+
+ lldiv_t __cdecl lldiv(long long, long long);
+
+ __CRT_INLINE long long __cdecl llabs(long long _j) { return (_j >= 0 ? _j : -_j); }
+
+ long long __cdecl strtoll(const char* __restrict__, char** __restrict, int);
+ unsigned long long __cdecl strtoull(const char* __restrict__, char** __restrict__, int);
+
+ /* these are stubs for MS _i64 versions */
+ long long __cdecl atoll (const char *);
+
+#ifndef __STRICT_ANSI__
+ long long __cdecl wtoll (const wchar_t *);
+ char *__cdecl lltoa (long long, char *, int);
+ char *__cdecl ulltoa (unsigned long long , char *, int);
+ wchar_t *__cdecl lltow (long long, wchar_t *, int);
+ wchar_t *__cdecl ulltow (unsigned long long, wchar_t *, int);
+
+ /* __CRT_INLINE using non-ansi functions */
+ __CRT_INLINE long long __cdecl atoll (const char * _c) { return _atoi64 (_c); }
+ __CRT_INLINE char *__cdecl lltoa (long long _n, char * _c, int _i) { return _i64toa (_n, _c, _i); }
+ __CRT_INLINE char *__cdecl ulltoa (unsigned long long _n, char * _c, int _i) { return _ui64toa (_n, _c, _i); }
+ __CRT_INLINE long long __cdecl wtoll (const wchar_t * _w) { return _wtoi64 (_w); }
+ __CRT_INLINE wchar_t *__cdecl lltow (long long _n, wchar_t * _w, int _i) { return _i64tow (_n, _w, _i); }
+ __CRT_INLINE wchar_t *__cdecl ulltow (unsigned long long _n, wchar_t * _w, int _i) { return _ui64tow (_n, _w, _i); }
+#endif /* (__STRICT_ANSI__) */
+
+#endif /* !__NO_ISOCEXT */
+
+#ifdef __cplusplus
+}
+#endif
+
+#pragma pack(pop)
+
+#include <sec_api/stdlib_s.h>
+#include <malloc.h>
+
+#endif
diff --git a/tcc/include/string.h b/tcc/include/string.h
new file mode 100644
index 0000000..3249dc3
--- /dev/null
+++ b/tcc/include/string.h
@@ -0,0 +1,164 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+#ifndef _INC_STRING
+#define _INC_STRING
+
+#include <_mingw.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _NLSCMP_DEFINED
+#define _NLSCMP_DEFINED
+#define _NLSCMPERROR 2147483647
+#endif
+
+#ifndef NULL
+#ifdef __cplusplus
+#define NULL 0
+#else
+#define NULL ((void *)0)
+#endif
+#endif
+
+#define _WConst_return _CONST_RETURN
+
+#ifndef _CRT_MEMORY_DEFINED
+#define _CRT_MEMORY_DEFINED
+ _CRTIMP void *__cdecl _memccpy(void *_Dst,const void *_Src,int _Val,size_t _MaxCount);
+ _CONST_RETURN void *__cdecl memchr(const void *_Buf ,int _Val,size_t _MaxCount);
+ _CRTIMP int __cdecl _memicmp(const void *_Buf1,const void *_Buf2,size_t _Size);
+ _CRTIMP int __cdecl _memicmp_l(const void *_Buf1,const void *_Buf2,size_t _Size,_locale_t _Locale);
+ int __cdecl memcmp(const void *_Buf1,const void *_Buf2,size_t _Size);
+ void *__cdecl memcpy(void *_Dst,const void *_Src,size_t _Size);
+ void *__cdecl memset(void *_Dst,int _Val,size_t _Size);
+#ifndef NO_OLDNAMES
+ void *__cdecl memccpy(void *_Dst,const void *_Src,int _Val,size_t _Size);
+ int __cdecl memicmp(const void *_Buf1,const void *_Buf2,size_t _Size);
+#endif
+#endif
+ char *__cdecl _strset(char *_Str,int _Val);
+ char *__cdecl strcpy(char *_Dest,const char *_Source);
+ char *__cdecl strcat(char *_Dest,const char *_Source);
+ int __cdecl strcmp(const char *_Str1,const char *_Str2);
+ size_t __cdecl strlen(const char *_Str);
+#if 0
+ size_t __cdecl strnlen(const char *_Str,size_t _MaxCount);
+#endif
+ void *__cdecl memmove(void *_Dst,const void *_Src,size_t _Size);
+ _CRTIMP char *__cdecl _strdup(const char *_Src);
+ _CONST_RETURN char *__cdecl strchr(const char *_Str,int _Val);
+ _CRTIMP int __cdecl _stricmp(const char *_Str1,const char *_Str2);
+ _CRTIMP int __cdecl _strcmpi(const char *_Str1,const char *_Str2);
+ _CRTIMP int __cdecl _stricmp_l(const char *_Str1,const char *_Str2,_locale_t _Locale);
+ int __cdecl strcoll(const char *_Str1,const char *_Str2);
+ _CRTIMP int __cdecl _strcoll_l(const char *_Str1,const char *_Str2,_locale_t _Locale);
+ _CRTIMP int __cdecl _stricoll(const char *_Str1,const char *_Str2);
+ _CRTIMP int __cdecl _stricoll_l(const char *_Str1,const char *_Str2,_locale_t _Locale);
+ _CRTIMP int __cdecl _strncoll (const char *_Str1,const char *_Str2,size_t _MaxCount);
+ _CRTIMP int __cdecl _strncoll_l(const char *_Str1,const char *_Str2,size_t _MaxCount,_locale_t _Locale);
+ _CRTIMP int __cdecl _strnicoll (const char *_Str1,const char *_Str2,size_t _MaxCount);
+ _CRTIMP int __cdecl _strnicoll_l(const char *_Str1,const char *_Str2,size_t _MaxCount,_locale_t _Locale);
+ size_t __cdecl strcspn(const char *_Str,const char *_Control);
+ _CRTIMP char *__cdecl _strerror(const char *_ErrMsg);
+ char *__cdecl strerror(int);
+ _CRTIMP char *__cdecl _strlwr(char *_String);
+ char *strlwr_l(char *_String,_locale_t _Locale);
+ char *__cdecl strncat(char *_Dest,const char *_Source,size_t _Count);
+ int __cdecl strncmp(const char *_Str1,const char *_Str2,size_t _MaxCount);
+ _CRTIMP int __cdecl _strnicmp(const char *_Str1,const char *_Str2,size_t _MaxCount);
+ _CRTIMP int __cdecl _strnicmp_l(const char *_Str1,const char *_Str2,size_t _MaxCount,_locale_t _Locale);
+ char *strncpy(char *_Dest,const char *_Source,size_t _Count);
+ _CRTIMP char *__cdecl _strnset(char *_Str,int _Val,size_t _MaxCount);
+ _CONST_RETURN char *__cdecl strpbrk(const char *_Str,const char *_Control);
+ _CONST_RETURN char *__cdecl strrchr(const char *_Str,int _Ch);
+ _CRTIMP char *__cdecl _strrev(char *_Str);
+ size_t __cdecl strspn(const char *_Str,const char *_Control);
+ _CONST_RETURN char *__cdecl strstr(const char *_Str,const char *_SubStr);
+ char *__cdecl strtok(char *_Str,const char *_Delim);
+ _CRTIMP char *__cdecl _strupr(char *_String);
+ _CRTIMP char *_strupr_l(char *_String,_locale_t _Locale);
+ size_t __cdecl strxfrm(char *_Dst,const char *_Src,size_t _MaxCount);
+ _CRTIMP size_t __cdecl _strxfrm_l(char *_Dst,const char *_Src,size_t _MaxCount,_locale_t _Locale);
+
+#ifndef NO_OLDNAMES
+ char *__cdecl strdup(const char *_Src);
+ int __cdecl strcmpi(const char *_Str1,const char *_Str2);
+ int __cdecl stricmp(const char *_Str1,const char *_Str2);
+ char *__cdecl strlwr(char *_Str);
+ int __cdecl strnicmp(const char *_Str1,const char *_Str,size_t _MaxCount);
+ __CRT_INLINE int __cdecl strncasecmp (const char *__sz1, const char *__sz2, size_t __sizeMaxCompare) { return _strnicmp (__sz1, __sz2, __sizeMaxCompare); }
+ __CRT_INLINE int __cdecl strcasecmp (const char *__sz1, const char *__sz2) { return _stricmp (__sz1, __sz2); }
+ char *__cdecl strnset(char *_Str,int _Val,size_t _MaxCount);
+ char *__cdecl strrev(char *_Str);
+ char *__cdecl strset(char *_Str,int _Val);
+ char *__cdecl strupr(char *_Str);
+#endif
+
+#ifndef _WSTRING_DEFINED
+#define _WSTRING_DEFINED
+
+ _CRTIMP wchar_t *__cdecl _wcsdup(const wchar_t *_Str);
+ wchar_t *__cdecl wcscat(wchar_t *_Dest,const wchar_t *_Source);
+ _CONST_RETURN wchar_t *__cdecl wcschr(const wchar_t *_Str,wchar_t _Ch);
+ int __cdecl wcscmp(const wchar_t *_Str1,const wchar_t *_Str2);
+ wchar_t *__cdecl wcscpy(wchar_t *_Dest,const wchar_t *_Source);
+ size_t __cdecl wcscspn(const wchar_t *_Str,const wchar_t *_Control);
+ size_t __cdecl wcslen(const wchar_t *_Str);
+ size_t __cdecl wcsnlen(const wchar_t *_Src,size_t _MaxCount);
+ wchar_t *wcsncat(wchar_t *_Dest,const wchar_t *_Source,size_t _Count);
+ int __cdecl wcsncmp(const wchar_t *_Str1,const wchar_t *_Str2,size_t _MaxCount);
+ wchar_t *wcsncpy(wchar_t *_Dest,const wchar_t *_Source,size_t _Count);
+ _CONST_RETURN wchar_t *__cdecl wcspbrk(const wchar_t *_Str,const wchar_t *_Control);
+ _CONST_RETURN wchar_t *__cdecl wcsrchr(const wchar_t *_Str,wchar_t _Ch);
+ size_t __cdecl wcsspn(const wchar_t *_Str,const wchar_t *_Control);
+ _CONST_RETURN wchar_t *__cdecl wcsstr(const wchar_t *_Str,const wchar_t *_SubStr);
+ wchar_t *__cdecl wcstok(wchar_t *_Str,const wchar_t *_Delim);
+ _CRTIMP wchar_t *__cdecl _wcserror(int _ErrNum);
+ _CRTIMP wchar_t *__cdecl __wcserror(const wchar_t *_Str);
+ _CRTIMP int __cdecl _wcsicmp(const wchar_t *_Str1,const wchar_t *_Str2);
+ _CRTIMP int __cdecl _wcsicmp_l(const wchar_t *_Str1,const wchar_t *_Str2,_locale_t _Locale);
+ _CRTIMP int __cdecl _wcsnicmp(const wchar_t *_Str1,const wchar_t *_Str2,size_t _MaxCount);
+ _CRTIMP int __cdecl _wcsnicmp_l(const wchar_t *_Str1,const wchar_t *_Str2,size_t _MaxCount,_locale_t _Locale);
+ _CRTIMP wchar_t *__cdecl _wcsnset(wchar_t *_Str,wchar_t _Val,size_t _MaxCount);
+ _CRTIMP wchar_t *__cdecl _wcsrev(wchar_t *_Str);
+ _CRTIMP wchar_t *__cdecl _wcsset(wchar_t *_Str,wchar_t _Val);
+ _CRTIMP wchar_t *__cdecl _wcslwr(wchar_t *_String);
+ _CRTIMP wchar_t *_wcslwr_l(wchar_t *_String,_locale_t _Locale);
+ _CRTIMP wchar_t *__cdecl _wcsupr(wchar_t *_String);
+ _CRTIMP wchar_t *_wcsupr_l(wchar_t *_String,_locale_t _Locale);
+ size_t __cdecl wcsxfrm(wchar_t *_Dst,const wchar_t *_Src,size_t _MaxCount);
+ _CRTIMP size_t __cdecl _wcsxfrm_l(wchar_t *_Dst,const wchar_t *_Src,size_t _MaxCount,_locale_t _Locale);
+ int __cdecl wcscoll(const wchar_t *_Str1,const wchar_t *_Str2);
+ _CRTIMP int __cdecl _wcscoll_l(const wchar_t *_Str1,const wchar_t *_Str2,_locale_t _Locale);
+ _CRTIMP int __cdecl _wcsicoll(const wchar_t *_Str1,const wchar_t *_Str2);
+ _CRTIMP int __cdecl _wcsicoll_l(const wchar_t *_Str1,const wchar_t *_Str2,_locale_t _Locale);
+ _CRTIMP int __cdecl _wcsncoll(const wchar_t *_Str1,const wchar_t *_Str2,size_t _MaxCount);
+ _CRTIMP int __cdecl _wcsncoll_l(const wchar_t *_Str1,const wchar_t *_Str2,size_t _MaxCount,_locale_t _Locale);
+ _CRTIMP int __cdecl _wcsnicoll(const wchar_t *_Str1,const wchar_t *_Str2,size_t _MaxCount);
+ _CRTIMP int __cdecl _wcsnicoll_l(const wchar_t *_Str1,const wchar_t *_Str2,size_t _MaxCount,_locale_t _Locale);
+
+#ifndef NO_OLDNAMES
+ wchar_t *__cdecl wcsdup(const wchar_t *_Str);
+#define wcswcs wcsstr
+ int __cdecl wcsicmp(const wchar_t *_Str1,const wchar_t *_Str2);
+ int __cdecl wcsnicmp(const wchar_t *_Str1,const wchar_t *_Str2,size_t _MaxCount);
+ wchar_t *__cdecl wcsnset(wchar_t *_Str,wchar_t _Val,size_t _MaxCount);
+ wchar_t *__cdecl wcsrev(wchar_t *_Str);
+ wchar_t *__cdecl wcsset(wchar_t *_Str,wchar_t _Val);
+ wchar_t *__cdecl wcslwr(wchar_t *_Str);
+ wchar_t *__cdecl wcsupr(wchar_t *_Str);
+ int __cdecl wcsicoll(const wchar_t *_Str1,const wchar_t *_Str2);
+#endif
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#include <sec_api/string_s.h>
+#endif
diff --git a/tcc/include/sys/fcntl.h b/tcc/include/sys/fcntl.h
new file mode 100644
index 0000000..29fd55a
--- /dev/null
+++ b/tcc/include/sys/fcntl.h
@@ -0,0 +1,13 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+/*
+ * This file is part of the Mingw32 package.
+ *
+ * This fcntl.h maps to the root fcntl.h
+ */
+#ifndef __STRICT_ANSI__
+#include <fcntl.h>
+#endif
diff --git a/tcc/include/sys/file.h b/tcc/include/sys/file.h
new file mode 100644
index 0000000..370f352
--- /dev/null
+++ b/tcc/include/sys/file.h
@@ -0,0 +1,14 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+/*
+ * This file is part of the Mingw32 package.
+ *
+ * This file.h maps to the root fcntl.h
+ * TODO?
+ */
+#ifndef __STRICT_ANSI__
+#include <fcntl.h>
+#endif
diff --git a/tcc/include/sys/locking.h b/tcc/include/sys/locking.h
new file mode 100644
index 0000000..e3fc85b
--- /dev/null
+++ b/tcc/include/sys/locking.h
@@ -0,0 +1,30 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+#ifndef _INC_LOCKING
+#define _INC_LOCKING
+
+#ifndef _WIN32
+#error Only Win32 target is supported!
+#endif
+
+/* All the headers include this file. */
+#include <_mingw.h>
+
+#define _LK_UNLCK 0
+#define _LK_LOCK 1
+#define _LK_NBLCK 2
+#define _LK_RLCK 3
+#define _LK_NBRLCK 4
+
+#ifndef NO_OLDNAMES
+#define LK_UNLCK _LK_UNLCK
+#define LK_LOCK _LK_LOCK
+#define LK_NBLCK _LK_NBLCK
+#define LK_RLCK _LK_RLCK
+#define LK_NBRLCK _LK_NBRLCK
+#endif
+
+#endif
diff --git a/tcc/include/sys/stat.h b/tcc/include/sys/stat.h
new file mode 100644
index 0000000..344d4a2
--- /dev/null
+++ b/tcc/include/sys/stat.h
@@ -0,0 +1,290 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+#ifndef _INC_STAT
+#define _INC_STAT
+
+#ifndef _WIN32
+#error Only Win32 target is supported!
+#endif
+
+#include <_mingw.h>
+#include <io.h>
+
+#pragma pack(push,_CRT_PACKING)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _CRTIMP
+#define _CRTIMP __declspec(dllimport)
+#endif
+
+#include <sys/types.h>
+
+#ifndef __TINYC__ /* gr */
+#ifdef _USE_32BIT_TIME_T
+#ifdef _WIN64
+#undef _USE_32BIT_TIME_T
+#endif
+#else
+#if _INTEGRAL_MAX_BITS < 64
+#define _USE_32BIT_TIME_T
+#endif
+#endif
+#endif
+
+#ifndef _TIME32_T_DEFINED
+ typedef long __time32_t;
+#define _TIME32_T_DEFINED
+#endif
+
+#ifndef _TIME64_T_DEFINED
+#if _INTEGRAL_MAX_BITS >= 64
+ typedef __int64 __time64_t;
+#endif
+#define _TIME64_T_DEFINED
+#endif
+
+#ifndef _TIME_T_DEFINED
+#ifdef _USE_32BIT_TIME_T
+ typedef __time32_t time_t;
+#else
+ typedef __time64_t time_t;
+#endif
+#define _TIME_T_DEFINED
+#endif
+
+#ifndef _WCHAR_T_DEFINED
+ typedef unsigned short wchar_t;
+#define _WCHAR_T_DEFINED
+#endif
+
+#ifndef _STAT_DEFINED
+
+#ifdef _USE_32BIT_TIME_T
+#ifndef _WIN64
+#define _fstat32 _fstat
+#define _stat32 _stat
+#define _wstat32 _wstat
+#else
+#define _fstat _fstat32
+#define _stat _stat32
+#define _wstat _wstat32
+#endif
+#define _fstati64 _fstat32i64
+#define _stati64 _stat32i64
+#define _wstati64 _wstat32i64
+#else
+#define _fstat _fstat64i32
+#define _fstati64 _fstat64
+#define _stat _stat64i32
+#define _stati64 _stat64
+#define _wstat _wstat64i32
+#define _wstati64 _wstat64
+#endif
+
+ struct _stat32 {
+ _dev_t st_dev;
+ _ino_t st_ino;
+ unsigned short st_mode;
+ short st_nlink;
+ short st_uid;
+ short st_gid;
+ _dev_t st_rdev;
+ _off_t st_size;
+ __time32_t st_atime;
+ __time32_t st_mtime;
+ __time32_t st_ctime;
+ };
+
+#ifndef NO_OLDNAMES
+ struct stat {
+ _dev_t st_dev;
+ _ino_t st_ino;
+ unsigned short st_mode;
+ short st_nlink;
+ short st_uid;
+ short st_gid;
+ _dev_t st_rdev;
+ _off_t st_size;
+ time_t st_atime;
+ time_t st_mtime;
+ time_t st_ctime;
+ };
+#endif
+
+#if _INTEGRAL_MAX_BITS >= 64
+ struct _stat32i64 {
+ _dev_t st_dev;
+ _ino_t st_ino;
+ unsigned short st_mode;
+ short st_nlink;
+ short st_uid;
+ short st_gid;
+ _dev_t st_rdev;
+ __int64 st_size;
+ __time32_t st_atime;
+ __time32_t st_mtime;
+ __time32_t st_ctime;
+ };
+
+ struct _stat64i32 {
+ _dev_t st_dev;
+ _ino_t st_ino;
+ unsigned short st_mode;
+ short st_nlink;
+ short st_uid;
+ short st_gid;
+ _dev_t st_rdev;
+ _off_t st_size;
+ __time64_t st_atime;
+ __time64_t st_mtime;
+ __time64_t st_ctime;
+ };
+
+ struct _stat64 {
+ _dev_t st_dev;
+ _ino_t st_ino;
+ unsigned short st_mode;
+ short st_nlink;
+ short st_uid;
+ short st_gid;
+ _dev_t st_rdev;
+ __int64 st_size;
+ __time64_t st_atime;
+ __time64_t st_mtime;
+ __time64_t st_ctime;
+ };
+#endif
+
+#define __stat64 _stat64
+
+#define _STAT_DEFINED
+#endif
+
+#define _S_IFMT 0xF000
+#define _S_IFDIR 0x4000
+#define _S_IFCHR 0x2000
+#define _S_IFIFO 0x1000
+#define _S_IFREG 0x8000
+#define _S_IREAD 0x0100
+#define _S_IWRITE 0x0080
+#define _S_IEXEC 0x0040
+
+ _CRTIMP int __cdecl _fstat32(int _FileDes,struct _stat32 *_Stat);
+ _CRTIMP int __cdecl _stat32(const char *_Name,struct _stat32 *_Stat);
+#if _INTEGRAL_MAX_BITS >= 64
+ _CRTIMP int __cdecl _fstat64(int _FileDes,struct _stat64 *_Stat);
+ _CRTIMP int __cdecl _fstat32i64(int _FileDes,struct _stat32i64 *_Stat);
+ int __cdecl _fstat64i32(int _FileDes,struct _stat64i32 *_Stat);
+ __CRT_INLINE int __cdecl _fstat64i32(int _FileDes,struct _stat64i32 *_Stat)
+ {
+ struct _stat64 st;
+ int ret=_fstat64(_FileDes,&st);
+ _Stat->st_dev=st.st_dev;
+ _Stat->st_ino=st.st_ino;
+ _Stat->st_mode=st.st_mode;
+ _Stat->st_nlink=st.st_nlink;
+ _Stat->st_uid=st.st_uid;
+ _Stat->st_gid=st.st_gid;
+ _Stat->st_rdev=st.st_rdev;
+ _Stat->st_size=(_off_t) st.st_size;
+ _Stat->st_atime=st.st_atime;
+ _Stat->st_mtime=st.st_mtime;
+ _Stat->st_ctime=st.st_ctime;
+ return ret;
+ }
+ _CRTIMP int __cdecl _stat64(const char *_Name,struct _stat64 *_Stat);
+ _CRTIMP int __cdecl _stat32i64(const char *_Name,struct _stat32i64 *_Stat);
+ int __cdecl _stat64i32(const char *_Name,struct _stat64i32 *_Stat);
+ __CRT_INLINE int __cdecl _stat64i32(const char *_Name,struct _stat64i32 *_Stat)
+ {
+ struct _stat64 st;
+ int ret=_stat64(_Name,&st);
+ _Stat->st_dev=st.st_dev;
+ _Stat->st_ino=st.st_ino;
+ _Stat->st_mode=st.st_mode;
+ _Stat->st_nlink=st.st_nlink;
+ _Stat->st_uid=st.st_uid;
+ _Stat->st_gid=st.st_gid;
+ _Stat->st_rdev=st.st_rdev;
+ _Stat->st_size=(_off_t) st.st_size;
+ _Stat->st_atime=st.st_atime;
+ _Stat->st_mtime=st.st_mtime;
+ _Stat->st_ctime=st.st_ctime;
+ return ret;
+ }
+#endif
+
+#ifndef _WSTAT_DEFINED
+#define _WSTAT_DEFINED
+ _CRTIMP int __cdecl _wstat32(const wchar_t *_Name,struct _stat32 *_Stat);
+#if _INTEGRAL_MAX_BITS >= 64
+ _CRTIMP int __cdecl _wstat32i64(const wchar_t *_Name,struct _stat32i64 *_Stat);
+ int __cdecl _wstat64i32(const wchar_t *_Name,struct _stat64i32 *_Stat);
+ _CRTIMP int __cdecl _wstat64(const wchar_t *_Name,struct _stat64 *_Stat);
+#endif
+#endif
+
+#ifndef NO_OLDNAMES
+#define _S_IFBLK 0x3000 /* Block: Is this ever set under w32? */
+
+#define S_IFMT _S_IFMT
+#define S_IFDIR _S_IFDIR
+#define S_IFCHR _S_IFCHR
+#define S_IFREG _S_IFREG
+#define S_IREAD _S_IREAD
+#define S_IWRITE _S_IWRITE
+#define S_IEXEC _S_IEXEC
+#define S_IFIFO _S_IFIFO
+#define S_IFBLK _S_IFBLK
+
+#define _S_IRWXU (_S_IREAD | _S_IWRITE | _S_IEXEC)
+#define _S_IXUSR _S_IEXEC
+#define _S_IWUSR _S_IWRITE
+
+#define S_IRWXU _S_IRWXU
+#define S_IXUSR _S_IXUSR
+#define S_IWUSR _S_IWUSR
+#define S_IRUSR _S_IRUSR
+#define _S_IRUSR _S_IREAD
+
+#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
+#define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
+#define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
+#define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
+#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
+
+#endif
+
+#if !defined (RC_INVOKED) && !defined (NO_OLDNAMES)
+int __cdecl stat(const char *_Filename,struct stat *_Stat);
+int __cdecl fstat(int _Desc,struct stat *_Stat);
+int __cdecl wstat(const wchar_t *_Filename,struct stat *_Stat);
+#ifdef _USE_32BIT_TIME_T
+__CRT_INLINE int __cdecl fstat(int _Desc,struct stat *_Stat) {
+ return _fstat32(_Desc,(struct _stat32 *)_Stat);
+}
+__CRT_INLINE int __cdecl stat(const char *_Filename,struct stat *_Stat) {
+ return _stat32(_Filename,(struct _stat32 *)_Stat);
+}
+#else
+__CRT_INLINE int __cdecl fstat(int _Desc,struct stat *_Stat) {
+ return _fstat64i32(_Desc,(struct _stat64i32 *)_Stat);
+}
+__CRT_INLINE int __cdecl stat(const char *_Filename,struct stat *_Stat) {
+ return _stat64i32(_Filename,(struct _stat64i32 *)_Stat);
+}
+#endif
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#pragma pack(pop)
+#endif
diff --git a/tcc/include/sys/time.h b/tcc/include/sys/time.h
new file mode 100644
index 0000000..8ccab83
--- /dev/null
+++ b/tcc/include/sys/time.h
@@ -0,0 +1,69 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+
+#ifndef _SYS_TIME_H_
+#define _SYS_TIME_H_
+
+#include <time.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef __STRICT_ANSI__
+#ifndef _TIMEVAL_DEFINED /* also in winsock[2].h */
+#define _TIMEVAL_DEFINED
+struct timeval {
+ long tv_sec;
+ long tv_usec;
+};
+#define timerisset(tvp) ((tvp)->tv_sec || (tvp)->tv_usec)
+#define timercmp(tvp, uvp, cmp) \
+ (((tvp)->tv_sec != (uvp)->tv_sec) ? \
+ ((tvp)->tv_sec cmp (uvp)->tv_sec) : \
+ ((tvp)->tv_usec cmp (uvp)->tv_usec))
+#define timerclear(tvp) (tvp)->tv_sec = (tvp)->tv_usec = 0
+#endif /* _TIMEVAL_DEFINED */
+
+#ifndef _TIMEZONE_DEFINED /* also in sys/time.h */
+#define _TIMEZONE_DEFINED
+/* Provided for compatibility with code that assumes that
+ the presence of gettimeofday function implies a definition
+ of struct timezone. */
+struct timezone
+{
+ int tz_minuteswest; /* of Greenwich */
+ int tz_dsttime; /* type of dst correction to apply */
+};
+
+ extern int __cdecl mingw_gettimeofday (struct timeval *p, struct timezone *z);
+
+#endif
+
+/*
+ Implementation as per:
+ The Open Group Base Specifications, Issue 6
+ IEEE Std 1003.1, 2004 Edition
+
+ The timezone pointer arg is ignored. Errors are ignored.
+*/
+#ifndef _GETTIMEOFDAY_DEFINED
+#define _GETTIMEOFDAY_DEFINED
+int __cdecl gettimeofday(struct timeval *__restrict__,
+ void *__restrict__ /* tzp (unused) */);
+#endif
+
+#endif /* __STRICT_ANSI__ */
+
+#ifdef __cplusplus
+}
+#endif
+
+/* Adding timespec definition. */
+#include <sys/timeb.h>
+
+
+#endif /* _SYS_TIME_H_ */
diff --git a/tcc/include/sys/timeb.h b/tcc/include/sys/timeb.h
new file mode 100644
index 0000000..3483773
--- /dev/null
+++ b/tcc/include/sys/timeb.h
@@ -0,0 +1,133 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+#ifndef _TIMEB_H_
+#define _TIMEB_H_
+
+#include <_mingw.h>
+
+#ifndef _WIN32
+#error Only Win32 target is supported!
+#endif
+
+#pragma pack(push,_CRT_PACKING)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _CRTIMP
+#define _CRTIMP __declspec(dllimport)
+#endif
+
+#ifndef __TINYC__ /* gr */
+#ifdef _USE_32BIT_TIME_T
+#ifdef _WIN64
+#undef _USE_32BIT_TIME_T
+#endif
+#else
+#if _INTEGRAL_MAX_BITS < 64
+#define _USE_32BIT_TIME_T
+#endif
+#endif
+#endif
+
+#ifndef _TIME32_T_DEFINED
+ typedef long __time32_t;
+#define _TIME32_T_DEFINED
+#endif
+
+#ifndef _TIME64_T_DEFINED
+#if _INTEGRAL_MAX_BITS >= 64
+ typedef __int64 __time64_t;
+#endif
+#define _TIME64_T_DEFINED
+#endif
+
+#ifndef _TIME_T_DEFINED
+#ifdef _USE_32BIT_TIME_T
+ typedef __time32_t time_t;
+#else
+ typedef __time64_t time_t;
+#endif
+#define _TIME_T_DEFINED
+#endif
+
+#ifndef _TIMEB_DEFINED
+#define _TIMEB_DEFINED
+
+ struct __timeb32 {
+ __time32_t time;
+ unsigned short millitm;
+ short timezone;
+ short dstflag;
+ };
+
+#ifndef NO_OLDNAMES
+ struct timeb {
+ time_t time;
+ unsigned short millitm;
+ short timezone;
+ short dstflag;
+ };
+#endif
+
+#if _INTEGRAL_MAX_BITS >= 64
+ struct __timeb64 {
+ __time64_t time;
+ unsigned short millitm;
+ short timezone;
+ short dstflag;
+ };
+#endif
+
+#ifdef _USE_32BIT_TIME_T
+#define _timeb __timeb32
+//gr #define _ftime _ftime32
+#define _ftime32 _ftime
+#else
+#define _timeb __timeb64
+#define _ftime _ftime64
+#endif
+#endif
+
+ _CRTIMP void __cdecl _ftime32(struct __timeb32 *_Time);
+#if _INTEGRAL_MAX_BITS >= 64
+ _CRTIMP void __cdecl _ftime64(struct __timeb64 *_Time);
+#endif
+
+#ifndef _TIMESPEC_DEFINED
+#define _TIMESPEC_DEFINED
+struct timespec {
+ time_t tv_sec; /* Seconds */
+ long tv_nsec; /* Nanoseconds */
+};
+
+struct itimerspec {
+ struct timespec it_interval; /* Timer period */
+ struct timespec it_value; /* Timer expiration */
+};
+#endif
+
+#if !defined (RC_INVOKED) && !defined (NO_OLDNAMES)
+#ifdef _USE_32BIT_TIME_T
+__CRT_INLINE void __cdecl ftime(struct timeb *_Tmb) {
+ _ftime32((struct __timeb32 *)_Tmb);
+}
+#else
+__CRT_INLINE void __cdecl ftime(struct timeb *_Tmb) {
+ _ftime64((struct __timeb64 *)_Tmb);
+}
+#endif
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#pragma pack(pop)
+
+#include <sec_api/sys/timeb_s.h>
+#endif
diff --git a/tcc/include/sys/types.h b/tcc/include/sys/types.h
new file mode 100644
index 0000000..7379b0f
--- /dev/null
+++ b/tcc/include/sys/types.h
@@ -0,0 +1,118 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+#ifndef _INC_TYPES
+#define _INC_TYPES
+
+#ifndef _WIN32
+#error Only Win32 target is supported!
+#endif
+
+#include <_mingw.h>
+
+#ifndef __TINYC__ /* gr */
+#ifdef _USE_32BIT_TIME_T
+#ifdef _WIN64
+#undef _USE_32BIT_TIME_T
+#endif
+#else
+#if _INTEGRAL_MAX_BITS < 64
+#define _USE_32BIT_TIME_T
+#endif
+#endif
+#endif
+
+#ifndef _TIME32_T_DEFINED
+#define _TIME32_T_DEFINED
+typedef long __time32_t;
+#endif
+
+#ifndef _TIME64_T_DEFINED
+#define _TIME64_T_DEFINED
+#if _INTEGRAL_MAX_BITS >= 64
+typedef __int64 __time64_t;
+#endif
+#endif
+
+#ifndef _TIME_T_DEFINED
+#define _TIME_T_DEFINED
+#ifdef _USE_32BIT_TIME_T
+typedef __time32_t time_t;
+#else
+typedef __time64_t time_t;
+#endif
+#endif
+
+#ifndef _INO_T_DEFINED
+#define _INO_T_DEFINED
+typedef unsigned short _ino_t;
+#ifndef NO_OLDNAMES
+typedef unsigned short ino_t;
+#endif
+#endif
+
+#ifndef _DEV_T_DEFINED
+#define _DEV_T_DEFINED
+typedef unsigned int _dev_t;
+#ifndef NO_OLDNAMES
+typedef unsigned int dev_t;
+#endif
+#endif
+
+#ifndef _PID_T_
+#define _PID_T_
+#ifndef _WIN64
+typedef int _pid_t;
+#else
+typedef __int64 _pid_t;
+#endif
+
+#ifndef NO_OLDNAMES
+typedef _pid_t pid_t;
+#endif
+#endif /* Not _PID_T_ */
+
+#ifndef _MODE_T_
+#define _MODE_T_
+typedef unsigned short _mode_t;
+
+#ifndef NO_OLDNAMES
+typedef _mode_t mode_t;
+#endif
+#endif /* Not _MODE_T_ */
+
+#ifndef _OFF_T_DEFINED
+#define _OFF_T_DEFINED
+#ifndef _OFF_T_
+#define _OFF_T_
+ typedef long _off_t;
+#if !defined(NO_OLDNAMES) || defined(_POSIX)
+ typedef long off_t;
+#endif
+#endif
+#endif
+
+#ifndef _OFF64_T_DEFINED
+#define _OFF64_T_DEFINED
+ typedef long long _off64_t;
+#if !defined(NO_OLDNAMES) || defined(_POSIX)
+ typedef long long off64_t;
+#endif
+#endif
+
+#ifndef _TIMESPEC_DEFINED
+#define _TIMESPEC_DEFINED
+struct timespec {
+ time_t tv_sec; /* Seconds */
+ long tv_nsec; /* Nanoseconds */
+};
+
+struct itimerspec {
+ struct timespec it_interval; /* Timer period */
+ struct timespec it_value; /* Timer expiration */
+};
+#endif
+
+#endif
diff --git a/tcc/include/sys/unistd.h b/tcc/include/sys/unistd.h
new file mode 100644
index 0000000..31006d3
--- /dev/null
+++ b/tcc/include/sys/unistd.h
@@ -0,0 +1,14 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+/*
+ * This file is part of the Mingw32 package.
+ *
+ * unistd.h maps (roughly) to io.h
+ */
+#ifndef __STRICT_ANSI__
+#include <io.h>
+#endif
+
diff --git a/tcc/include/sys/utime.h b/tcc/include/sys/utime.h
new file mode 100644
index 0000000..fec8304
--- /dev/null
+++ b/tcc/include/sys/utime.h
@@ -0,0 +1,146 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+#ifndef _INC_UTIME
+#define _INC_UTIME
+
+#ifndef _WIN32
+#error Only Win32 target is supported!
+#endif
+
+#include <_mingw.h>
+
+#pragma pack(push,_CRT_PACKING)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _CRTIMP
+#define _CRTIMP __declspec(dllimport)
+#endif
+
+#ifndef _WCHAR_T_DEFINED
+ typedef unsigned short wchar_t;
+#define _WCHAR_T_DEFINED
+#endif
+
+#ifndef __TINYC__ /* gr */
+#ifdef _USE_32BIT_TIME_T
+#ifdef _WIN64
+#undef _USE_32BIT_TIME_T
+#endif
+#else
+#if _INTEGRAL_MAX_BITS < 64
+#define _USE_32BIT_TIME_T
+#endif
+#endif
+#endif
+
+#ifndef _TIME32_T_DEFINED
+#define _TIME32_T_DEFINED
+ typedef long __time32_t;
+#endif
+
+#ifndef _TIME64_T_DEFINED
+#define _TIME64_T_DEFINED
+#if _INTEGRAL_MAX_BITS >= 64
+ typedef __int64 __time64_t;
+#endif
+#endif
+
+#ifndef _TIME_T_DEFINED
+#define _TIME_T_DEFINED
+#ifdef _USE_32BIT_TIME_T
+ typedef __time32_t time_t;
+#else
+ typedef __time64_t time_t;
+#endif
+#endif
+
+#ifndef _UTIMBUF_DEFINED
+#define _UTIMBUF_DEFINED
+
+ struct _utimbuf {
+ time_t actime;
+ time_t modtime;
+ };
+
+ struct __utimbuf32 {
+ __time32_t actime;
+ __time32_t modtime;
+ };
+
+#if _INTEGRAL_MAX_BITS >= 64
+ struct __utimbuf64 {
+ __time64_t actime;
+ __time64_t modtime;
+ };
+#endif
+
+#ifndef NO_OLDNAMES
+ struct utimbuf {
+ time_t actime;
+ time_t modtime;
+ };
+
+ struct utimbuf32 {
+ __time32_t actime;
+ __time32_t modtime;
+ };
+#endif
+#endif
+
+ _CRTIMP int __cdecl _utime32(const char *_Filename,struct __utimbuf32 *_Time);
+ _CRTIMP int __cdecl _futime32(int _FileDes,struct __utimbuf32 *_Time);
+ _CRTIMP int __cdecl _wutime32(const wchar_t *_Filename,struct __utimbuf32 *_Time);
+#if _INTEGRAL_MAX_BITS >= 64
+ _CRTIMP int __cdecl _utime64(const char *_Filename,struct __utimbuf64 *_Time);
+ _CRTIMP int __cdecl _futime64(int _FileDes,struct __utimbuf64 *_Time);
+ _CRTIMP int __cdecl _wutime64(const wchar_t *_Filename,struct __utimbuf64 *_Time);
+#endif
+
+#ifndef RC_INVOKED
+#ifdef _USE_32BIT_TIME_T
+__CRT_INLINE int __cdecl _utime(const char *_Filename,struct _utimbuf *_Utimbuf) {
+ return _utime32(_Filename,(struct __utimbuf32 *)_Utimbuf);
+}
+__CRT_INLINE int __cdecl _futime(int _Desc,struct _utimbuf *_Utimbuf) {
+ return _futime32(_Desc,(struct __utimbuf32 *)_Utimbuf);
+}
+__CRT_INLINE int __cdecl _wutime(const wchar_t *_Filename,struct _utimbuf *_Utimbuf) {
+ return _wutime32(_Filename,(struct __utimbuf32 *)_Utimbuf);
+}
+#else
+__CRT_INLINE int __cdecl _utime(const char *_Filename,struct _utimbuf *_Utimbuf) {
+ return _utime64(_Filename,(struct __utimbuf64 *)_Utimbuf);
+}
+__CRT_INLINE int __cdecl _futime(int _Desc,struct _utimbuf *_Utimbuf) {
+ return _futime64(_Desc,(struct __utimbuf64 *)_Utimbuf);
+}
+__CRT_INLINE int __cdecl _wutime(const wchar_t *_Filename,struct _utimbuf *_Utimbuf) {
+ return _wutime64(_Filename,(struct __utimbuf64 *)_Utimbuf);
+}
+#endif
+
+#ifndef NO_OLDNAMES
+#ifdef _USE_32BIT_TIME_T
+__CRT_INLINE int __cdecl utime(const char *_Filename,struct utimbuf *_Utimbuf) {
+ return _utime32(_Filename,(struct __utimbuf32 *)_Utimbuf);
+}
+#else
+__CRT_INLINE int __cdecl utime(const char *_Filename,struct utimbuf *_Utimbuf) {
+ return _utime64(_Filename,(struct __utimbuf64 *)_Utimbuf);
+}
+#endif
+#endif
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#pragma pack(pop)
+#endif
diff --git a/tcc/include/tcc/tcc_libm.h b/tcc/include/tcc/tcc_libm.h
new file mode 100644
index 0000000..0a62e6f
--- /dev/null
+++ b/tcc/include/tcc/tcc_libm.h
@@ -0,0 +1,201 @@
+#ifndef _TCC_LIBM_H_
+#define _TCC_LIBM_H_
+
+#include "../math.h"
+
+/* TCC uses 8 bytes for double and long double, so effectively the l variants
+ * are never used. For now, they just run the normal (double) variant.
+ */
+
+/*
+ * most of the code in this file is taken from MUSL rs-1.0 (MIT license)
+ * - musl-libc: http://git.musl-libc.org/cgit/musl/tree/src/math?h=rs-1.0
+ * - License: http://git.musl-libc.org/cgit/musl/tree/COPYRIGHT?h=rs-1.0
+ */
+
+/*******************************************************************************
+ Start of code based on MUSL
+*******************************************************************************/
+/*
+musl as a whole is licensed under the following standard MIT license:
+
+----------------------------------------------------------------------
+Copyright © 2005-2014 Rich Felker, et al.
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+----------------------------------------------------------------------
+*/
+
+/* fpclassify */
+
+__CRT_INLINE int __cdecl __fpclassify (double x) {
+ union {double f; uint64_t i;} u = {x};
+ int e = u.i>>52 & 0x7ff;
+ if (!e) return u.i<<1 ? FP_SUBNORMAL : FP_ZERO;
+ if (e==0x7ff) return u.i<<12 ? FP_NAN : FP_INFINITE;
+ return FP_NORMAL;
+}
+
+__CRT_INLINE int __cdecl __fpclassifyf (float x) {
+ union {float f; uint32_t i;} u = {x};
+ int e = u.i>>23 & 0xff;
+ if (!e) return u.i<<1 ? FP_SUBNORMAL : FP_ZERO;
+ if (e==0xff) return u.i<<9 ? FP_NAN : FP_INFINITE;
+ return FP_NORMAL;
+}
+
+__CRT_INLINE int __cdecl __fpclassifyl (long double x) {
+ return __fpclassify(x);
+}
+
+
+/* signbit */
+
+__CRT_INLINE int __cdecl __signbit (double x) {
+ union {double d; uint64_t i;} y = { x };
+ return y.i>>63;
+}
+
+__CRT_INLINE int __cdecl __signbitf (float x) {
+ union {float f; uint32_t i; } y = { x };
+ return y.i>>31;
+}
+
+__CRT_INLINE int __cdecl __signbitl (long double x) {
+ return __signbit(x);
+}
+
+
+/* fmin*, fmax* */
+
+#define TCCFP_FMIN_EVAL (isnan(x) ? y : \
+ isnan(y) ? x : \
+ (signbit(x) != signbit(y)) ? (signbit(x) ? x : y) : \
+ x < y ? x : y)
+
+__CRT_INLINE double __cdecl fmin (double x, double y) {
+ return TCCFP_FMIN_EVAL;
+}
+
+__CRT_INLINE float __cdecl fminf (float x, float y) {
+ return TCCFP_FMIN_EVAL;
+}
+
+__CRT_INLINE long double __cdecl fminl (long double x, long double y) {
+ return TCCFP_FMIN_EVAL;
+}
+
+#define TCCFP_FMAX_EVAL (isnan(x) ? y : \
+ isnan(y) ? x : \
+ (signbit(x) != signbit(y)) ? (signbit(x) ? y : x) : \
+ x < y ? y : x)
+
+__CRT_INLINE double __cdecl fmax (double x, double y) {
+ return TCCFP_FMAX_EVAL;
+}
+
+__CRT_INLINE float __cdecl fmaxf (float x, float y) {
+ return TCCFP_FMAX_EVAL;
+}
+
+__CRT_INLINE long double __cdecl fmaxl (long double x, long double y) {
+ return TCCFP_FMAX_EVAL;
+}
+
+
+/* *round* */
+
+#define TCCFP_FORCE_EVAL(x) do { \
+if (sizeof(x) == sizeof(float)) { \
+ volatile float __x; \
+ __x = (x); \
+} else if (sizeof(x) == sizeof(double)) { \
+ volatile double __x; \
+ __x = (x); \
+} else { \
+ volatile long double __x; \
+ __x = (x); \
+} \
+} while(0)
+
+__CRT_INLINE double __cdecl round (double x) {
+ union {double f; uint64_t i;} u = {x};
+ int e = u.i >> 52 & 0x7ff;
+ double y;
+
+ if (e >= 0x3ff+52)
+ return x;
+ if (u.i >> 63)
+ x = -x;
+ if (e < 0x3ff-1) {
+ /* raise inexact if x!=0 */
+ TCCFP_FORCE_EVAL(x + 0x1p52);
+ return 0*u.f;
+ }
+ y = (double)(x + 0x1p52) - 0x1p52 - x;
+ if (y > 0.5)
+ y = y + x - 1;
+ else if (y <= -0.5)
+ y = y + x + 1;
+ else
+ y = y + x;
+ if (u.i >> 63)
+ y = -y;
+ return y;
+}
+
+__CRT_INLINE long __cdecl lround (double x) {
+ return round(x);
+}
+
+__CRT_INLINE long long __cdecl llround (double x) {
+ return round(x);
+}
+
+__CRT_INLINE float __cdecl roundf (float x) {
+ return round(x);
+}
+
+__CRT_INLINE long __cdecl lroundf (float x) {
+ return round(x);
+}
+
+__CRT_INLINE long long __cdecl llroundf (float x) {
+ return round(x);
+}
+
+__CRT_INLINE long double __cdecl roundl (long double x) {
+ return round(x);
+}
+
+__CRT_INLINE long __cdecl lroundl (long double x) {
+ return round(x);
+}
+
+__CRT_INLINE long long __cdecl llroundl (long double x) {
+ return round(x);
+}
+
+
+/*******************************************************************************
+ End of code based on MUSL
+*******************************************************************************/
+
+#endif /* _TCC_LIBM_H_ */
diff --git a/tcc/include/tcclib.h b/tcc/include/tcclib.h
new file mode 100644
index 0000000..8d59e4c
--- /dev/null
+++ b/tcc/include/tcclib.h
@@ -0,0 +1,80 @@
+/* Simple libc header for TCC
+ *
+ * Add any function you want from the libc there. This file is here
+ * only for your convenience so that you do not need to put the whole
+ * glibc include files on your floppy disk
+ */
+#ifndef _TCCLIB_H
+#define _TCCLIB_H
+
+#include <stddef.h>
+#include <stdarg.h>
+
+/* stdlib.h */
+void *calloc(size_t nmemb, size_t size);
+void *malloc(size_t size);
+void free(void *ptr);
+void *realloc(void *ptr, size_t size);
+int atoi(const char *nptr);
+long int strtol(const char *nptr, char **endptr, int base);
+unsigned long int strtoul(const char *nptr, char **endptr, int base);
+void exit(int);
+
+/* stdio.h */
+typedef struct __FILE FILE;
+#define EOF (-1)
+extern FILE *stdin;
+extern FILE *stdout;
+extern FILE *stderr;
+FILE *fopen(const char *path, const char *mode);
+FILE *fdopen(int fildes, const char *mode);
+FILE *freopen(const char *path, const char *mode, FILE *stream);
+int fclose(FILE *stream);
+size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
+size_t fwrite(void *ptr, size_t size, size_t nmemb, FILE *stream);
+int fgetc(FILE *stream);
+char *fgets(char *s, int size, FILE *stream);
+int getc(FILE *stream);
+int getchar(void);
+char *gets(char *s);
+int ungetc(int c, FILE *stream);
+int fflush(FILE *stream);
+int putchar (int c);
+
+int printf(const char *format, ...);
+int fprintf(FILE *stream, const char *format, ...);
+int sprintf(char *str, const char *format, ...);
+int snprintf(char *str, size_t size, const char *format, ...);
+int asprintf(char **strp, const char *format, ...);
+int dprintf(int fd, const char *format, ...);
+int vprintf(const char *format, va_list ap);
+int vfprintf(FILE *stream, const char *format, va_list ap);
+int vsprintf(char *str, const char *format, va_list ap);
+int vsnprintf(char *str, size_t size, const char *format, va_list ap);
+int vasprintf(char **strp, const char *format, va_list ap);
+int vdprintf(int fd, const char *format, va_list ap);
+
+void perror(const char *s);
+
+/* string.h */
+char *strcat(char *dest, const char *src);
+char *strchr(const char *s, int c);
+char *strrchr(const char *s, int c);
+char *strcpy(char *dest, const char *src);
+void *memcpy(void *dest, const void *src, size_t n);
+void *memmove(void *dest, const void *src, size_t n);
+void *memset(void *s, int c, size_t n);
+char *strdup(const char *s);
+size_t strlen(const char *s);
+
+/* dlfcn.h */
+#define RTLD_LAZY 0x001
+#define RTLD_NOW 0x002
+#define RTLD_GLOBAL 0x100
+
+void *dlopen(const char *filename, int flag);
+const char *dlerror(void);
+void *dlsym(void *handle, char *symbol);
+int dlclose(void *handle);
+
+#endif /* _TCCLIB_H */
diff --git a/tcc/include/tchar.h b/tcc/include/tchar.h
new file mode 100644
index 0000000..cd44bec
--- /dev/null
+++ b/tcc/include/tchar.h
@@ -0,0 +1,1102 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+#include <_mingw.h>
+
+#ifndef _INC_TCHAR
+#define _INC_TCHAR
+
+#ifdef _STRSAFE_H_INCLUDED_
+#error Need to include strsafe.h after tchar.h
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define _ftcscat _tcscat
+#define _ftcschr _tcschr
+#define _ftcscpy _tcscpy
+#define _ftcscspn _tcscspn
+#define _ftcslen _tcslen
+#define _ftcsncat _tcsncat
+#define _ftcsncpy _tcsncpy
+#define _ftcspbrk _tcspbrk
+#define _ftcsrchr _tcsrchr
+#define _ftcsspn _tcsspn
+#define _ftcsstr _tcsstr
+#define _ftcstok _tcstok
+
+#define _ftcsdup _tcsdup
+#define _ftcsnset _tcsnset
+#define _ftcsrev _tcsrev
+#define _ftcsset _tcsset
+
+#define _ftcscmp _tcscmp
+#define _ftcsicmp _tcsicmp
+#define _ftcsnccmp _tcsnccmp
+#define _ftcsncmp _tcsncmp
+#define _ftcsncicmp _tcsncicmp
+#define _ftcsnicmp _tcsnicmp
+
+#define _ftcscoll _tcscoll
+#define _ftcsicoll _tcsicoll
+#define _ftcsnccoll _tcsnccoll
+#define _ftcsncoll _tcsncoll
+#define _ftcsncicoll _tcsncicoll
+#define _ftcsnicoll _tcsnicoll
+
+#define _ftcsclen _tcsclen
+#define _ftcsnccat _tcsnccat
+#define _ftcsnccpy _tcsnccpy
+#define _ftcsncset _tcsncset
+
+#define _ftcsdec _tcsdec
+#define _ftcsinc _tcsinc
+#define _ftcsnbcnt _tcsnbcnt
+#define _ftcsnccnt _tcsnccnt
+#define _ftcsnextc _tcsnextc
+#define _ftcsninc _tcsninc
+#define _ftcsspnp _tcsspnp
+
+#define _ftcslwr _tcslwr
+#define _ftcsupr _tcsupr
+
+#define _ftclen _tclen
+#define _ftccpy _tccpy
+#define _ftccmp _tccmp
+
+#ifndef _CONST_RETURN
+#ifdef __cplusplus
+#define _CONST_RETURN const
+#define _CRT_CONST_CORRECT_OVERLOADS
+#else
+#define _CONST_RETURN
+#endif
+#endif
+
+#define _WConst_return _CONST_RETURN
+
+#ifdef _UNICODE
+
+#ifdef __cplusplus
+}
+#endif
+
+#include <wchar.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _WCTYPE_T_DEFINED
+#define _WCTYPE_T_DEFINED
+ typedef unsigned short wint_t;
+ typedef unsigned short wctype_t;
+#endif
+
+#ifndef __TCHAR_DEFINED
+#define __TCHAR_DEFINED
+ typedef wchar_t _TCHAR;
+ typedef wchar_t _TSCHAR;
+ typedef wchar_t _TUCHAR;
+ typedef wchar_t _TXCHAR;
+ typedef wint_t _TINT;
+#endif
+
+#ifndef _TCHAR_DEFINED
+#define _TCHAR_DEFINED
+#ifndef NO_OLDNAMES
+ typedef wchar_t TCHAR;
+#endif
+#endif
+
+#define _TEOF WEOF
+
+#define __T(x) L##x
+
+#define _tmain wmain
+#define _tWinMain wWinMain
+#define _tenviron _wenviron
+#define __targv __wargv
+
+#define _tprintf wprintf
+#define _tprintf_l _wprintf_l
+#define _tprintf_p _wprintf_p
+#define _tprintf_p_l _wprintf_p_l
+#define _tcprintf _cwprintf
+#define _tcprintf_l _cwprintf_l
+#define _tcprintf_p _cwprintf_p
+#define _tcprintf_p_l _cwprintf_p_l
+#define _vtcprintf _vcwprintf
+#define _vtcprintf_l _vcwprintf_l
+#define _vtcprintf_p _vcwprintf_p
+#define _vtcprintf_p_l _vcwprintf_p_l
+#define _ftprintf fwprintf
+#define _ftprintf_l _fwprintf_l
+#define _ftprintf_p _fwprintf_p
+#define _ftprintf_p_l _fwprintf_p_l
+#define _stprintf swprintf
+#define _stprintf_l __swprintf_l
+#define _stprintf_p _swprintf_p
+#define _stprintf_p_l _swprintf_p_l
+#define _sctprintf _scwprintf
+#define _sctprintf_l _scwprintf_l
+#define _sctprintf_p _scwprintf_p
+#define _sctprintf_p_l _scwprintf_p_l
+#define _sntprintf _snwprintf
+#define _sntprintf_l _snwprintf_l
+#define _vtprintf vwprintf
+#define _vtprintf_l _vwprintf_l
+#define _vtprintf_p _vwprintf_p
+#define _vtprintf_p_l _vwprintf_p_l
+#define _vftprintf vfwprintf
+#define _vftprintf_l _vfwprintf_l
+#define _vftprintf_p _vfwprintf_p
+#define _vftprintf_p_l _vfwprintf_p_l
+#define _vstprintf vswprintf
+#define _vstprintf_l _vswprintf_l
+#define _vstprintf_p _vswprintf_p
+#define _vstprintf_p_l _vswprintf_p_l
+#define _vsctprintf _vscwprintf
+#define _vsctprintf_l _vscwprintf_l
+#define _vsctprintf_p _vscwprintf_p
+#define _vsctprintf_p_l _vscwprintf_p_l
+#define _vsntprintf _vsnwprintf
+#define _vsntprintf_l _vsnwprintf_l
+
+#define _tscanf wscanf
+#define _tscanf_l _wscanf_l
+#define _tcscanf _cwscanf
+#define _tcscanf_l _cwscanf_l
+#define _ftscanf fwscanf
+#define _ftscanf_l _fwscanf_l
+#define _stscanf swscanf
+#define _stscanf_l _swscanf_l
+#define _sntscanf _snwscanf
+#define _sntscanf_l _snwscanf_l
+
+#define _fgettc fgetwc
+#define _fgettc_nolock _fgetwc_nolock
+#define _fgettchar _fgetwchar
+#define _fgetts fgetws
+#define _fputtc fputwc
+#define _fputtc_nolock _fputwc_nolock
+#define _fputtchar _fputwchar
+#define _fputts fputws
+#define _cputts _cputws
+#define _cgetts _cgetws
+#define _gettc getwc
+#define _gettc_nolock _getwc_nolock
+#define _gettch _getwch
+#define _gettch_nolock _getwch_nolock
+#define _gettche _getwche
+#define _gettche_nolock _getwche_nolock
+#define _gettchar getwchar
+#define _gettchar_nolock _getwchar_nolock
+#define _getts _getws
+#define _puttc putwc
+#define _puttc_nolock _putwc_nolock
+#define _puttchar putwchar
+#define _puttchar_nolock _putwchar_nolock
+#define _puttch _putwch
+#define _puttch_nolock _putwch_nolock
+#define _putts _putws
+#define _ungettc ungetwc
+#define _ungettc_nolock _ungetwc_nolock
+#define _ungettch _ungetwch
+#define _ungettch_nolock _ungetwch_nolock
+
+#define _tcstod wcstod
+#define _tcstol wcstol
+#define _tcstoul wcstoul
+#define _tcstoi64 _wcstoi64
+#define _tcstoui64 _wcstoui64
+#define _tstof _wtof
+#define _tstol _wtol
+#define _tstoi _wtoi
+#define _tstoi64 _wtoi64
+#define _tcstod_l _wcstod_l
+#define _tcstol_l _wcstol_l
+#define _tcstoul_l _wcstoul_l
+#define _tcstoi64_l _wcstoi64_l
+#define _tcstoui64_l _wcstoui64_l
+#define _tstof_l _wtof_l
+#define _tstol_l _wtol_l
+#define _tstoi_l _wtoi_l
+#define _tstoi64_l _wtoi64_l
+
+#define _itot _itow
+#define _ltot _ltow
+#define _ultot _ultow
+#define _ttoi _wtoi
+#define _ttol _wtol
+
+#define _ttoi64 _wtoi64
+#define _i64tot _i64tow
+#define _ui64tot _ui64tow
+
+#define _tcscat wcscat
+#define _tcschr wcschr
+#define _tcscpy wcscpy
+#define _tcscspn wcscspn
+#define _tcslen wcslen
+#define _tcsnlen wcsnlen
+#define _tcsncat wcsncat
+#define _tcsncat_l _wcsncat_l
+#define _tcsncpy wcsncpy
+#define _tcsncpy_l _wcsncpy_l
+#define _tcspbrk wcspbrk
+#define _tcsrchr wcsrchr
+#define _tcsspn wcsspn
+#define _tcsstr wcsstr
+#define _tcstok wcstok
+#define _tcstok_l _wcstok_l
+#define _tcserror _wcserror
+#define __tcserror __wcserror
+
+#define _tcsdup _wcsdup
+#define _tcsnset _wcsnset
+#define _tcsnset_l _wcsnset_l
+#define _tcsrev _wcsrev
+#define _tcsset _wcsset
+#define _tcsset_l _wcsset_l
+
+#define _tcscmp wcscmp
+#define _tcsicmp _wcsicmp
+#define _tcsicmp_l _wcsicmp_l
+#define _tcsnccmp wcsncmp
+#define _tcsncmp wcsncmp
+#define _tcsncicmp _wcsnicmp
+#define _tcsncicmp_l _wcsnicmp_l
+#define _tcsnicmp _wcsnicmp
+#define _tcsnicmp_l _wcsnicmp_l
+
+#define _tcscoll wcscoll
+#define _tcscoll_l _wcscoll_l
+#define _tcsicoll _wcsicoll
+#define _tcsicoll_l _wcsicoll_l
+#define _tcsnccoll _wcsncoll
+#define _tcsnccoll_l _wcsncoll_l
+#define _tcsncoll _wcsncoll
+#define _tcsncoll_l _wcsncoll_l
+#define _tcsncicoll _wcsnicoll
+#define _tcsncicoll_l _wcsnicoll_l
+#define _tcsnicoll _wcsnicoll
+#define _tcsnicoll_l _wcsnicoll_l
+
+#define _texecl _wexecl
+#define _texecle _wexecle
+#define _texeclp _wexeclp
+#define _texeclpe _wexeclpe
+#define _texecv _wexecv
+#define _texecve _wexecve
+#define _texecvp _wexecvp
+#define _texecvpe _wexecvpe
+
+#define _tspawnl _wspawnl
+#define _tspawnle _wspawnle
+#define _tspawnlp _wspawnlp
+#define _tspawnlpe _wspawnlpe
+#define _tspawnv _wspawnv
+#define _tspawnve _wspawnve
+#define _tspawnvp _wspawnvp
+#define _tspawnvp _wspawnvp
+#define _tspawnvpe _wspawnvpe
+
+#define _tsystem _wsystem
+
+#define _tasctime _wasctime
+#define _tctime _wctime
+#define _tctime32 _wctime32
+#define _tctime64 _wctime64
+#define _tstrdate _wstrdate
+#define _tstrtime _wstrtime
+#define _tutime _wutime
+#define _tutime32 _wutime32
+#define _tutime64 _wutime64
+#define _tcsftime wcsftime
+#define _tcsftime_l _wcsftime_l
+
+#define _tchdir _wchdir
+#define _tgetcwd _wgetcwd
+#define _tgetdcwd _wgetdcwd
+#define _tgetdcwd_nolock _wgetdcwd_nolock
+#define _tmkdir _wmkdir
+#define _trmdir _wrmdir
+
+#define _tfullpath _wfullpath
+#define _tgetenv _wgetenv
+#define _tmakepath _wmakepath
+#define _tpgmptr _wpgmptr
+#define _get_tpgmptr _get_wpgmptr
+#define _tputenv _wputenv
+#define _tsearchenv _wsearchenv
+#define _tsplitpath _wsplitpath
+
+#define _tfdopen _wfdopen
+#define _tfsopen _wfsopen
+#define _tfopen _wfopen
+#define _tfreopen _wfreopen
+#define _tperror _wperror
+#define _tpopen _wpopen
+#define _ttempnam _wtempnam
+#define _ttmpnam _wtmpnam
+
+#define _taccess _waccess
+#define _tchmod _wchmod
+#define _tcreat _wcreat
+#define _tfindfirst _wfindfirst
+#define _tfindfirst32 _wfindfirst32
+#define _tfindfirst64 _wfindfirst64
+#define _tfindfirsti64 _wfindfirsti64
+#define _tfindfirst32i64 _wfindfirst32i64
+#define _tfindfirst64i32 _wfindfirst64i32
+#define _tfindnext _wfindnext
+#define _tfindnext32 _wfindnext32
+#define _tfindnext64 _wfindnext64
+#define _tfindnexti64 _wfindnexti64
+#define _tfindnext32i64 _wfindnext32i64
+#define _tfindnext64i32 _wfindnext64i32
+#define _tmktemp _wmktemp
+#define _topen _wopen
+#define _tremove _wremove
+#define _trename _wrename
+#define _tsopen _wsopen
+#define _tunlink _wunlink
+
+#define _tfinddata_t _wfinddata_t
+#define _tfinddata32_t _wfinddata32_t
+#define _tfinddata64_t _wfinddata64_t
+#define _tfinddatai64_t _wfinddatai64_t
+#define _tfinddata32i64_t _wfinddata32i64_t
+#define _tfinddata64i32_t _wfinddata64i32_t
+
+#define _tstat _wstat
+#define _tstat32 _wstat32
+#define _tstat32i64 _wstat32i64
+#define _tstat64 _wstat64
+#define _tstat64i32 _wstat64i32
+#define _tstati64 _wstati64
+
+#define _tsetlocale _wsetlocale
+
+#define _tcsclen wcslen
+#define _tcscnlen wcsnlen
+#define _tcsclen_l(_String,_Locale) wcslen(_String)
+#define _tcscnlen_l(_String,_Max_count,_Locale) wcsnlen_l((_String),(_Max_count))
+#define _tcsnccat wcsncat
+#define _tcsnccat_l _wcsncat_l
+#define _tcsnccpy wcsncpy
+#define _tcsnccpy_l _wcsncpy_l
+#define _tcsncset _wcsnset
+
+#define _tcsdec _wcsdec
+#define _tcsinc _wcsinc
+#define _tcsnbcnt _wcsncnt
+#define _tcsnccnt _wcsncnt
+#define _tcsnextc _wcsnextc
+#define _tcsninc _wcsninc
+#define _tcsspnp _wcsspnp
+
+#define _tcslwr _wcslwr
+#define _tcslwr_l _wcslwr_l
+#define _tcsupr _wcsupr
+#define _tcsupr_l _wcsupr_l
+#define _tcsxfrm wcsxfrm
+#define _tcsxfrm_l _wcsxfrm_l
+
+#define _tclen(_pc) (1)
+#define _tccpy(_pc1,_cpc2) ((*(_pc1) = *(_cpc2)))
+#define _tccmp(_cpc1,_cpc2) ((*(_cpc1))-(*(_cpc2)))
+
+#define _istalnum iswalnum
+#define _istalnum_l _iswalnum_l
+#define _istalpha iswalpha
+#define _istalpha_l _iswalpha_l
+#define _istascii iswascii
+#define _istcntrl iswcntrl
+#define _istcntrl_l _iswcntrl_l
+#define _istdigit iswdigit
+#define _istdigit_l _iswdigit_l
+#define _istgraph iswgraph
+#define _istgraph_l _iswgraph_l
+#define _istlower iswlower
+#define _istlower_l _iswlower_l
+#define _istprint iswprint
+#define _istprint_l _iswprint_l
+#define _istpunct iswpunct
+#define _istpunct_l _iswpunct_l
+#define _istspace iswspace
+#define _istspace_l _iswspace_l
+#define _istupper iswupper
+#define _istupper_l _iswupper_l
+#define _istxdigit iswxdigit
+#define _istxdigit_l _iswxdigit_l
+
+#define _totupper towupper
+#define _totupper_l _towupper_l
+#define _totlower towlower
+#define _totlower_l _towlower_l
+
+#define _istlegal(_Char) (1)
+#define _istlead(_Char) (0)
+#define _istleadbyte(_Char) (0)
+#define _istleadbyte_l(_Char,_Locale) (0)
+
+#define _wcsdec(_cpc1,_cpc2) ((_cpc1)>=(_cpc2) ? NULL : (_cpc2)-1)
+#define _wcsinc(_pc) ((_pc)+1)
+#define _wcsnextc(_cpc) ((unsigned int) *(_cpc))
+#define _wcsninc(_pc,_sz) (((_pc)+(_sz)))
+ _CRTIMP size_t __cdecl __wcsncnt(const wchar_t *_Str,size_t _MaxCount);
+#define _wcsncnt(_cpc,_sz) (__wcsncnt(_cpc,_sz))
+#define _wcsspnp(_cpc1,_cpc2) (!_cpc1 ? NULL : ((*((_cpc1)+wcsspn(_cpc1,_cpc2))) ? ((_cpc1)+wcsspn(_cpc1,_cpc2)) : NULL))
+#define _wcsncpy_l(_Destination,_Source,_Count,_Locale) (wcsncpy(_Destination,_Source,_Count))
+#define _wcsncat_l(_Destination,_Source,_Count,_Locale) (wcsncat(_Destination,_Source,_Count))
+#define _wcstok_l(_String,_Delimiters,_Locale) (wcstok(_String,_Delimiters))
+#define _wcsnset_l(_Destination,_Value,_Count,_Locale) (_wcsnset(_Destination,_Value,_Count))
+#define _wcsset_l(_Destination,_Value,_Locale) (_wcsset(_Destination,_Value))
+
+ /* dirent structures and functions */
+#define _tdirent _wdirent
+#define _TDIR _WDIR
+#define _topendir _wopendir
+#define _tclosedir _wclosedir
+#define _treaddir _wreaddir
+#define _trewinddir _wrewinddir
+#define _ttelldir _wtelldir
+#define _tseekdir _wseekdir
+
+#else
+
+#ifdef __cplusplus
+}
+#endif
+
+#include <string.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define _TEOF EOF
+
+#define __T(x) x
+
+#define _tmain main
+#define _tWinMain WinMain
+#ifdef _POSIX_
+#define _tenviron environ
+#else
+#define _tenviron _environ
+#endif
+#define __targv __argv
+
+#define _tprintf printf
+#define _tprintf_l _printf_l
+#define _tprintf_p _printf_p
+#define _tprintf_p_l _printf_p_l
+#define _tcprintf _cprintf
+#define _tcprintf_l _cprintf_l
+#define _tcprintf_p _cprintf_p
+#define _tcprintf_p_l _cprintf_p_l
+#define _vtcprintf _vcprintf
+#define _vtcprintf_l _vcprintf_l
+#define _vtcprintf_p _vcprintf_p
+#define _vtcprintf_p_l _vcprintf_p_l
+#define _ftprintf fprintf
+#define _ftprintf_l _fprintf_l
+#define _ftprintf_p _fprintf_p
+#define _ftprintf_p_l _fprintf_p_l
+#define _stprintf sprintf
+#define _stprintf_l _sprintf_l
+#define _stprintf_p _sprintf_p
+#define _stprintf_p_l _sprintf_p_l
+#define _sctprintf _scprintf
+#define _sctprintf_l _scprintf_l
+#define _sctprintf_p _scprintf_p
+#define _sctprintf_p_l _scprintf_p_l
+#define _sntprintf _snprintf
+#define _sntprintf_l _snprintf_l
+#define _vtprintf vprintf
+#define _vtprintf_l _vprintf_l
+#define _vtprintf_p _vprintf_p
+#define _vtprintf_p_l _vprintf_p_l
+#define _vftprintf vfprintf
+#define _vftprintf_l _vfprintf_l
+#define _vftprintf_p _vfprintf_p
+#define _vftprintf_p_l _vfprintf_p_l
+#define _vstprintf vsprintf
+#define _vstprintf_l _vsprintf_l
+#define _vstprintf_p _vsprintf_p
+#define _vstprintf_p_l _vsprintf_p_l
+#define _vsctprintf _vscprintf
+#define _vsctprintf_l _vscprintf_l
+#define _vsctprintf_p _vscprintf_p
+#define _vsctprintf_p_l _vscprintf_p_l
+#define _vsntprintf _vsnprintf
+#define _vsntprintf_l _vsnprintf_l
+
+#define _tscanf scanf
+#define _tscanf_l _scanf_l
+#define _tcscanf _cscanf
+#define _tcscanf_l _cscanf_l
+#define _ftscanf fscanf
+#define _ftscanf_l _fscanf_l
+#define _stscanf sscanf
+#define _stscanf_l _sscanf_l
+#define _sntscanf _snscanf
+#define _sntscanf_l _snscanf_l
+
+#define _fgettc fgetc
+#define _fgettc_nolock _fgetc_nolock
+#define _fgettchar _fgetchar
+#define _fgetts fgets
+#define _fputtc fputc
+#define _fputtc_nolock _fputc_nolock
+#define _fputtchar _fputchar
+#define _fputts fputs
+#define _cputts _cputs
+#define _gettc getc
+#define _gettc_nolock _getc_nolock
+#define _gettch _getch
+#define _gettch_nolock _getch_nolock
+#define _gettche _getche
+#define _gettche_nolock _getche_nolock
+#define _gettchar getchar
+#define _gettchar_nolock _getchar_nolock
+#define _getts gets
+#define _cgetts _cgets
+#define _puttc putc
+#define _puttc_nolock _putc_nolock
+#define _puttchar putchar
+#define _puttchar_nolock _putchar_nolock
+#define _puttch _putch
+#define _puttch_nolock _putch_nolock
+#define _putts puts
+#define _ungettc ungetc
+#define _ungettc_nolock _ungetc_nolock
+#define _ungettch _ungetch
+#define _ungettch_nolock _ungetch_nolock
+
+#define _tcstod strtod
+#define _tcstol strtol
+#define _tcstoul strtoul
+#define _tstof atof
+#define _tstol atol
+#define _tstoi atoi
+#define _tstoi64 _atoi64
+#define _tcstod_l _strtod_l
+#define _tcstol_l _strtol_l
+#define _tcstoul_l _strtoul_l
+#define _tstof_l _atof_l
+#define _tstol_l _atol_l
+#define _tstoi_l _atoi_l
+#define _tstoi64_l _atoi64_l
+
+#define _itot _itoa
+#define _ltot _ltoa
+#define _ultot _ultoa
+#define _ttoi atoi
+#define _ttol atol
+
+#define _ttoi64 _atoi64
+#define _tcstoi64 _strtoi64
+#define _tcstoi64_l _strtoi64_l
+#define _tcstoui64 _strtoui64
+#define _tcstoui64_l _strtoui64_l
+#define _i64tot _i64toa
+#define _ui64tot _ui64toa
+
+#define _tcscat strcat
+#define _tcscpy strcpy
+#define _tcsdup _strdup
+#define _tcslen strlen
+#if 0
+#define _tcsnlen strnlen
+#endif
+#define _tcsxfrm strxfrm
+#define _tcsxfrm_l _strxfrm_l
+#define _tcserror strerror
+#define __tcserror _strerror
+
+#define _texecl _execl
+#define _texecle _execle
+#define _texeclp _execlp
+#define _texeclpe _execlpe
+#define _texecv _execv
+#define _texecve _execve
+#define _texecvp _execvp
+#define _texecvpe _execvpe
+
+#define _tspawnl _spawnl
+#define _tspawnle _spawnle
+#define _tspawnlp _spawnlp
+#define _tspawnlpe _spawnlpe
+#define _tspawnv _spawnv
+#define _tspawnve _spawnve
+#define _tspawnvp _spawnvp
+#define _tspawnvpe _spawnvpe
+
+#define _tsystem system
+
+#define _tasctime asctime
+#define _tctime ctime
+#define _tctime32 _ctime32
+#define _tctime64 _ctime64
+#define _tstrdate _strdate
+#define _tstrtime _strtime
+#define _tutime _utime
+#define _tutime32 _utime32
+#define _tutime64 _utime64
+#define _tcsftime strftime
+#define _tcsftime_l _strftime_l
+
+#define _tchdir _chdir
+#define _tgetcwd _getcwd
+#define _tgetdcwd _getdcwd
+#define _tgetdcwd_nolock _getdcwd_nolock
+#define _tmkdir _mkdir
+#define _trmdir _rmdir
+
+#define _tfullpath _fullpath
+#define _tgetenv getenv
+#define _tmakepath _makepath
+#define _tpgmptr _pgmptr
+#define _get_tpgmptr _get_pgmptr
+#define _tputenv _putenv
+#define _tsearchenv _searchenv
+#define _tsplitpath _splitpath
+
+#ifdef _POSIX_
+#define _tfdopen fdopen
+#else
+#define _tfdopen _fdopen
+#endif
+#define _tfsopen _fsopen
+#define _tfopen fopen
+#define _tfreopen freopen
+#define _tperror perror
+#define _tpopen _popen
+#define _ttempnam _tempnam
+#define _ttmpnam tmpnam
+
+#define _tchmod _chmod
+#define _tcreat _creat
+#define _tfindfirst _findfirst
+#define _tfindfirst32 _findfirst32
+#define _tfindfirst64 _findfirst64
+#define _tfindfirsti64 _findfirsti64
+#define _tfindfirst32i64 _findfirst32i64
+#define _tfindfirst64i32 _findfirst64i32
+#define _tfindnext _findnext
+#define _tfindnext32 _findnext32
+#define _tfindnext64 _findnext64
+#define _tfindnexti64 _findnexti64
+#define _tfindnext32i64 _findnext32i64
+#define _tfindnext64i32 _findnext64i32
+#define _tmktemp _mktemp
+
+#ifdef _POSIX_
+#define _topen open
+#define _taccess access
+#else
+#define _topen _open
+#define _taccess _access
+#endif
+
+#define _tremove remove
+#define _trename rename
+#define _tsopen _sopen
+#define _tunlink _unlink
+
+#define _tfinddata_t _finddata_t
+#define _tfinddata32_t _finddata32_t
+#define _tfinddata64_t __finddata64_t
+#define _tfinddatai64_t _finddatai64_t
+#define _tfinddata32i64_t _finddata32i64_t
+#define _tfinddata64i32_t _finddata64i32_t
+
+#define _istascii __isascii
+#define _istcntrl iscntrl
+#define _istcntrl_l _iscntrl_l
+#define _istxdigit isxdigit
+#define _istxdigit_l _isxdigit_l
+
+#define _tstat _stat
+#define _tstat32 _stat32
+#define _tstat32i64 _stat32i64
+#define _tstat64 _stat64
+#define _tstat64i32 _stat64i32
+#define _tstati64 _stati64
+
+#define _tsetlocale setlocale
+
+#ifdef _MBCS
+
+#ifdef __cplusplus
+}
+#endif
+
+#include <mbstring.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef __TCHAR_DEFINED
+ typedef char _TCHAR;
+ typedef signed char _TSCHAR;
+ typedef unsigned char _TUCHAR;
+ typedef unsigned char _TXCHAR;
+ typedef unsigned int _TINT;
+#define __TCHAR_DEFINED
+#endif
+
+#ifndef _TCHAR_DEFINED
+#ifndef NO_OLDNAMES
+ typedef char TCHAR;
+#endif
+#define _TCHAR_DEFINED
+#endif
+
+#ifdef _MB_MAP_DIRECT
+
+#define _tcschr _mbschr
+#define _tcscspn _mbscspn
+#define _tcsncat _mbsnbcat
+#define _tcsncat_l _mbsnbcat_l
+#define _tcsncpy _mbsnbcpy
+#define _tcsncpy_l _mbsnbcpy_l
+#define _tcspbrk _mbspbrk
+#define _tcsrchr _mbsrchr
+#define _tcsspn _mbsspn
+#define _tcsstr _mbsstr
+#define _tcstok _mbstok
+#define _tcstok_l _mbstok_l
+
+#define _tcsnset _mbsnbset
+#define _tcsnset_l _mbsnbset_l
+#define _tcsrev _mbsrev
+#define _tcsset _mbsset
+#define _tcsset_l _mbsset_l
+
+#define _tcscmp _mbscmp
+#define _tcsicmp _mbsicmp
+#define _tcsicmp_l _mbsicmp_l
+#define _tcsnccmp _mbsncmp
+#define _tcsncmp _mbsnbcmp
+#define _tcsncicmp _mbsnicmp
+#define _tcsncicmp_l _mbsnicmp_l
+#define _tcsnicmp _mbsnbicmp
+#define _tcsnicmp_l _mbsnbicmp_l
+
+#define _tcscoll _mbscoll
+#define _tcscoll_l _mbscoll_l
+#define _tcsicoll _mbsicoll
+#define _tcsicoll_l _mbsicoll_l
+#define _tcsnccoll _mbsncoll
+#define _tcsnccoll_l _mbsncoll_l
+#define _tcsncoll _mbsnbcoll
+#define _tcsncoll_l _mbsnbcoll_l
+#define _tcsncicoll _mbsnicoll
+#define _tcsncicoll_l _mbsnicoll_l
+#define _tcsnicoll _mbsnbicoll
+#define _tcsnicoll_l _mbsnbicoll_l
+
+#define _tcsclen _mbslen
+#define _tcscnlen _mbsnlen
+#define _tcsclen_l _mbslen_l
+#define _tcscnlen_l _mbsnlen_l
+#define _tcsnccat _mbsncat
+#define _tcsnccat_l _mbsncat_l
+#define _tcsnccpy _mbsncpy
+#define _tcsnccpy_l _mbsncpy_l
+#define _tcsncset _mbsnset
+#define _tcsncset_l _mbsnset_l
+
+#define _tcsdec _mbsdec
+#define _tcsinc _mbsinc
+#define _tcsnbcnt _mbsnbcnt
+#define _tcsnccnt _mbsnccnt
+#define _tcsnextc _mbsnextc
+#define _tcsninc _mbsninc
+#define _tcsspnp _mbsspnp
+
+#define _tcslwr _mbslwr
+#define _tcslwr_l _mbslwr_l
+#define _tcsupr _mbsupr
+#define _tcsupr_l _mbsupr_l
+
+#define _tclen _mbclen
+#define _tccpy _mbccpy
+#define _tccpy_l _mbccpy_l
+#else
+
+ _CRTIMP _CONST_RETURN char *__cdecl _tcschr(const char *_Str,unsigned int _Val);
+ _CRTIMP size_t __cdecl _tcscspn(const char *_Str,const char *_Control);
+ _CRTIMP char *__cdecl _tcsncat(char *_Dst,const char *_Src,size_t _MaxCount);
+ _CRTIMP char *__cdecl _tcsncat_l(char *_Dst,const char *_Src,size_t _MaxCount,_locale_t _Locale);
+ _CRTIMP char *__cdecl _tcsncpy(char *_Dst,const char *_Src,size_t _MaxCount);
+ _CRTIMP char *__cdecl _tcsncpy_l(char *_Dst,const char *_Src,size_t _MaxCount,_locale_t _Locale);
+ _CRTIMP _CONST_RETURN char *__cdecl _tcspbrk(const char *_Str,const char *_Control);
+ _CRTIMP _CONST_RETURN char *__cdecl _tcsrchr(const char *_Str,unsigned int _Ch);
+ _CRTIMP size_t __cdecl _tcsspn(const char *_Str,const char *_Control);
+ _CRTIMP _CONST_RETURN char *__cdecl _tcsstr(const char *_Str,const char *_Substr);
+ _CRTIMP char *__cdecl _tcstok(char *_Str,const char *_Delim);
+ _CRTIMP char *__cdecl _tcstok_l(char *_Str,const char *_Delim,_locale_t _Locale);
+ _CRTIMP char *__cdecl _tcsnset(char *_Str,unsigned int _Val,size_t _MaxCount);
+ _CRTIMP char *__cdecl _tcsrev(char *_Str);
+ _CRTIMP char *__cdecl _tcsset(char *_Str,unsigned int _Val);
+ _CRTIMP char *__cdecl _tcsset_l(char *_Str,unsigned int _Val,_locale_t _Locale);
+ _CRTIMP int __cdecl _tcscmp(const char *_Str1,const char *_Str);
+ _CRTIMP int __cdecl _tcsicmp(const char *_Str1,const char *_Str2);
+ _CRTIMP int __cdecl _tcsicmp_l(const char *_Str1,const char *_Str2,_locale_t _Locale);
+ _CRTIMP int __cdecl _tcsnccmp(const char *_Str1,const char *_Str2,size_t _MaxCount);
+ _CRTIMP int __cdecl _tcsncmp(const char *_Str1,const char *_Str2,size_t _MaxCount);
+ _CRTIMP int __cdecl _tcsncicmp(const char *_Str1,const char *_Str2,size_t _MaxCount);
+ _CRTIMP int __cdecl _tcsncicmp_l(const char *_Str1,const char *_Str2,size_t _MaxCount,_locale_t _Locale);
+ _CRTIMP int __cdecl _tcsnicmp(const char *_Str1,const char *_Str2,size_t _MaxCount);
+ _CRTIMP int __cdecl _tcsnicmp_l(const char *_Str1,const char *_Str2,size_t _MaxCount,_locale_t _Locale);
+ _CRTIMP int __cdecl _tcscoll(const char *_Str1,const char *_Str2);
+ _CRTIMP int __cdecl _tcscoll_l(const char *_Str1,const char *_Str2,_locale_t _Locale);
+ _CRTIMP int __cdecl _tcsicoll(const char *_Str1,const char *_Str2);
+ _CRTIMP int __cdecl _tcsicoll_l(const char *_Str1,const char *_Str2,_locale_t _Locale);
+ _CRTIMP int __cdecl _tcsnccoll(const char *_Str1,const char *_Str2,size_t _MaxCount);
+ _CRTIMP int __cdecl _tcsnccoll_l(const char *_Str1,const char *_Str2,size_t _MaxCount,_locale_t _Locale);
+ _CRTIMP int __cdecl _tcsncoll(const char *_Str1,const char *_Str2,size_t _MaxCount);
+ _CRTIMP int __cdecl _tcsncoll_l(const char *_Str1,const char *_Str2,size_t _MaxCount,_locale_t _Locale);
+ _CRTIMP int __cdecl _tcsncicoll(const char *_Str1,const char *_Str2,size_t _MaxCount);
+ _CRTIMP int __cdecl _tcsncicoll_l(const char *_Str1,const char *_Str2,size_t _MaxCount,_locale_t _Locale);
+ _CRTIMP int __cdecl _tcsnicoll(const char *_Str1,const char *_Str2,size_t _MaxCount);
+ _CRTIMP int __cdecl _tcsnicoll_l(const char *_Str1,const char *_Str2,size_t _MaxCount,_locale_t _Locale);
+ _CRTIMP size_t __cdecl _tcsclen(const char *_Str);
+ _CRTIMP size_t __cdecl _tcscnlen(const char *_Str,size_t _MaxCount);
+ _CRTIMP size_t __cdecl _tcsclen_l(const char *_Str,_locale_t _Locale);
+ _CRTIMP size_t __cdecl _tcscnlen_l(const char *_Str,size_t _MaxCount,_locale_t _Locale);
+ _CRTIMP char *__cdecl _tcsnccat(char *_Dst,const char *_Src,size_t _MaxCount);
+ _CRTIMP char *__cdecl _tcsnccat_l(char *_Dst,const char *_Src,size_t _MaxCount,_locale_t _Locale);
+ _CRTIMP char *__cdecl _tcsnccpy(char *_Dst,const char *_Src,size_t _MaxCount);
+ _CRTIMP char *__cdecl _tcsnccpy_l(char *_Dst,const char *_Src,size_t _MaxCount,_locale_t _Locale);
+ _CRTIMP char *__cdecl _tcsncset(char *_Str,unsigned int _Val,size_t _MaxCount);
+ _CRTIMP char *__cdecl _tcsdec(const char *_Start,const char *_Pos);
+ _CRTIMP char *__cdecl _tcsinc(const char *_Ptr);
+ _CRTIMP size_t __cdecl _tcsnbcnt(const char *_Str,size_t _MaxCount);
+ _CRTIMP size_t __cdecl _tcsnccnt(const char *_Str,size_t _MaxCount);
+ _CRTIMP unsigned int __cdecl _tcsnextc (const char *_Str);
+ _CRTIMP char *__cdecl _tcsninc(const char *_Ptr,size_t _Count);
+ _CRTIMP char *__cdecl _tcsspnp(const char *_Str1,const char *_Str2);
+ _CRTIMP char *__cdecl _tcslwr(char *_Str);
+ _CRTIMP char *__cdecl _tcslwr_l(char *_Str,_locale_t _Locale);
+ _CRTIMP char *__cdecl _tcsupr(char *_Str);
+ _CRTIMP char *__cdecl _tcsupr_l(char *_Str,_locale_t _Locale);
+ _CRTIMP size_t __cdecl _tclen(const char *_Str);
+ _CRTIMP void __cdecl _tccpy(char *_DstCh,const char *_SrcCh);
+
+#ifdef __cplusplus
+#ifndef _CPP_TCHAR_INLINES_DEFINED
+#define _CPP_TCHAR_INLINES_DEFINED
+ extern "C++" {
+ extern inline char *__cdecl _tcschr(char *_S,unsigned int _C) { return ((char *)_tcschr((const char *)_S,_C)); }
+ extern inline char *__cdecl _tcspbrk(char *_S,const char *_P) { return ((char *)_tcspbrk((const char *)_S,_P)); }
+ extern inline char *__cdecl _tcsrchr(char *_S,unsigned int _C) { return ((char *)_tcsrchr((const char *)_S,_C)); }
+ extern inline char *__cdecl _tcsstr(char *_S,const char *_P) { return ((char *)_tcsstr((const char *)_S,_P)); }
+ }
+#endif
+#endif
+#endif
+
+#define _tccmp(_cp1,_cp2) _tcsnccmp(_cp1,_cp2,1)
+
+#define _istalnum _ismbcalnum
+#define _istalnum_l _ismbcalnum_l
+#define _istalpha _ismbcalpha
+#define _istalpha_l _ismbcalpha_l
+#define _istdigit _ismbcdigit
+#define _istdigit_l _ismbcdigit_l
+#define _istgraph _ismbcgraph
+#define _istgraph_l _ismbcgraph_l
+#define _istlegal _ismbclegal
+#define _istlegal_l _ismbclegal_l
+#define _istlower _ismbclower
+#define _istlower_l _ismbclower_l
+#define _istprint _ismbcprint
+#define _istprint_l _ismbcprint_l
+#define _istpunct _ismbcpunct
+#define _istpunct_l _ismbcpunct_l
+#define _istspace _ismbcspace
+#define _istspace_l _ismbcspace_l
+#define _istupper _ismbcupper
+#define _istupper_l _ismbcupper_l
+
+#define _totupper _mbctoupper
+#define _totupper_l _mbctoupper_l
+#define _totlower _mbctolower
+#define _totlower_l _mbctolower_l
+
+#define _istlead _ismbblead
+#define _istleadbyte isleadbyte
+#define _istleadbyte_l _isleadbyte_l
+#else
+
+#ifndef __TCHAR_DEFINED
+#define __TCHAR_DEFINED
+ typedef char _TCHAR;
+ typedef signed char _TSCHAR;
+ typedef unsigned char _TUCHAR;
+ typedef char _TXCHAR;
+ typedef int _TINT;
+#endif
+
+#ifndef _TCHAR_DEFINED
+#define _TCHAR_DEFINED
+#ifndef NO_OLDNAMES
+ typedef char TCHAR;
+#endif
+#endif
+
+#define _tcschr strchr
+#define _tcscspn strcspn
+#define _tcsncat strncat
+#define _tcsncat_l _strncat_l
+#define _tcsncpy strncpy
+#define _tcsncpy_l _strncpy_l
+#define _tcspbrk strpbrk
+#define _tcsrchr strrchr
+#define _tcsspn strspn
+#define _tcsstr strstr
+#define _tcstok strtok
+#define _tcstok_l _strtok_l
+
+#define _tcsnset _strnset
+#define _tcsnset_l _strnset_l
+#define _tcsrev _strrev
+#define _tcsset _strset
+
+#define _tcscmp strcmp
+#define _tcsicmp _stricmp
+#define _tcsicmp_l _stricmp_l
+#define _tcsnccmp strncmp
+#define _tcsncmp strncmp
+#define _tcsncicmp _strnicmp
+#define _tcsncicmp_l _strnicmp_l
+#define _tcsnicmp _strnicmp
+#define _tcsnicmp_l _strnicmp_l
+
+#define _tcscoll strcoll
+#define _tcscoll_l _strcoll_l
+#define _tcsicoll _stricoll
+#define _tcsicoll_l _stricoll_l
+#define _tcsnccoll _strncoll
+#define _tcsnccoll_l _strncoll_l
+#define _tcsncoll _strncoll
+#define _tcsncoll_l _strncoll_l
+#define _tcsncicoll _strnicoll
+#define _tcsncicoll_l _strnicoll_l
+#define _tcsnicoll _strnicoll
+#define _tcsnicoll_l _strnicoll_l
+
+#define _tcsclen strlen
+#define _tcscnlen strnlen
+#define _tcsclen_l(_String,_Locale) strlen(_String)
+#define _tcscnlen_l(_String,_Max_count,_Locale) strnlen_l((_String),(_Max_count))
+#define _tcsnccat strncat
+#define _tcsnccat_l _strncat_l
+#define _tcsnccpy strncpy
+#define _tcsnccpy_l _strncpy_l
+#define _tcsncset _strnset
+
+#define _tcsdec _strdec
+#define _tcsinc _strinc
+#define _tcsnbcnt _strncnt
+#define _tcsnccnt _strncnt
+#define _tcsnextc _strnextc
+#define _tcsninc _strninc
+#define _tcsspnp _strspnp
+
+#define _tcslwr _strlwr
+#define _tcslwr_l _strlwr_l
+#define _tcsupr _strupr
+#define _tcsupr_l _strupr_l
+#define _tcsxfrm strxfrm
+#define _tcsxfrm_l _strxfrm_l
+
+#define _istlead(_Char) (0)
+#define _istleadbyte(_Char) (0)
+#define _istleadbyte_l(_Char,_Locale) (0)
+
+#define _tclen(_pc) (1)
+#define _tccpy(_pc1,_cpc2) (*(_pc1) = *(_cpc2))
+#define _tccmp(_cpc1,_cpc2) (((unsigned char)*(_cpc1))-((unsigned char)*(_cpc2)))
+
+ /* dirent structures and functions */
+#define _tdirent dirent
+#define _TDIR DIR
+#define _topendir opendir
+#define _tclosedir closedir
+#define _treaddir readdir
+#define _trewinddir rewinddir
+#define _ttelldir telldir
+#define _tseekdir seekdir
+
+#define _istalnum isalnum
+#define _istalnum_l _isalnum_l
+#define _istalpha isalpha
+#define _istalpha_l _isalpha_l
+#define _istdigit isdigit
+#define _istdigit_l _isdigit_l
+#define _istgraph isgraph
+#define _istgraph_l _isgraph_l
+#define _istlower islower
+#define _istlower_l _islower_l
+#define _istprint isprint
+#define _istprint_l _isprint_l
+#define _istpunct ispunct
+#define _istpunct_l _ispunct_l
+#define _istspace isspace
+#define _istspace_l _isspace_l
+#define _istupper isupper
+#define _istupper_l _isupper_l
+
+#define _totupper toupper
+#define _totupper_l _toupper_l
+#define _totlower tolower
+#define _totlower_l _tolower_l
+
+#define _istlegal(_c) (1)
+
+#ifndef NULL
+#ifdef __cplusplus
+#define NULL 0
+#else
+#define NULL ((void *)0)
+#endif
+#endif
+
+#define _strdec(_cpc1,_cpc2) ((_cpc1)>=(_cpc2) ? NULL : (_cpc2)-1)
+#define _strinc(_pc) ((_pc)+1)
+#define _strnextc(_cpc) ((unsigned int) *(const unsigned char *)(_cpc))
+#define _strninc(_pc,_sz) (((_pc)+(_sz)))
+ _CRTIMP size_t __cdecl __strncnt(const char *_Str,size_t _Cnt);
+#define _strncnt(_cpc,_sz) (__strncnt(_cpc,_sz))
+#define _strspnp(_cpc1,_cpc2) (!_cpc1 ? NULL : ((*((_cpc1)+strspn(_cpc1,_cpc2))) ? ((_cpc1)+strspn(_cpc1,_cpc2)) : NULL))
+
+#define _strncpy_l(_Destination,_Source,_Count,_Locale) (strncpy(_Destination,_Source,_Count))
+#define _strncat_l(_Destination,_Source,_Count,_Locale) (strncat(_Destination,_Source,_Count))
+#define _strtok_l(_String,_Delimiters,_Locale) (strtok(_String,_Delimiters))
+#define _strnset_l(_Destination,_Value,_Count,_Locale) (_strnset(_Destination,_Value,_Count))
+#define _strset_l(_Destination,_Value,_Locale) (_strset(_Destination,_Value))
+#endif
+#endif
+
+#define _T(x) __T(x)
+#define _TEXT(x) __T(x)
+
+#ifdef __cplusplus
+}
+#endif
+
+#include <sec_api/tchar_s.h>
+#endif
diff --git a/tcc/include/time.h b/tcc/include/time.h
new file mode 100644
index 0000000..6c72e26
--- /dev/null
+++ b/tcc/include/time.h
@@ -0,0 +1,287 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+#ifndef _TIME_H_
+#define _TIME_H_
+
+#include <_mingw.h>
+
+#ifndef _WIN32
+#error Only Win32 target is supported!
+#endif
+
+#pragma pack(push,_CRT_PACKING)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _CRTIMP
+#define _CRTIMP __declspec(dllimport)
+#endif
+
+#ifndef _WCHAR_T_DEFINED
+#define _WCHAR_T_DEFINED
+ typedef unsigned short wchar_t;
+#endif
+
+#ifndef _TIME32_T_DEFINED
+#define _TIME32_T_DEFINED
+ typedef long __time32_t;
+#endif
+
+#ifndef _TIME64_T_DEFINED
+#define _TIME64_T_DEFINED
+#if _INTEGRAL_MAX_BITS >= 64
+#if defined(__GNUC__) && defined(__STRICT_ANSI__)
+ typedef int _time64_t __attribute__ ((mode (DI)));
+#else
+ typedef __int64 __time64_t;
+#endif
+#endif
+#endif
+
+#ifndef _TIME_T_DEFINED
+#define _TIME_T_DEFINED
+#ifdef _USE_32BIT_TIME_T
+ typedef __time32_t time_t;
+#else
+ typedef __time64_t time_t;
+#endif
+#endif
+
+#ifndef _CLOCK_T_DEFINED
+#define _CLOCK_T_DEFINED
+ typedef long clock_t;
+#endif
+
+#ifndef _SIZE_T_DEFINED
+#define _SIZE_T_DEFINED
+#undef size_t
+#ifdef _WIN64
+#if defined(__GNUC__) && defined(__STRICT_ANSI__)
+ typedef unsigned int size_t __attribute__ ((mode (DI)));
+#else
+ typedef unsigned __int64 size_t;
+#endif
+#else
+ typedef unsigned int size_t;
+#endif
+#endif
+
+#ifndef _SSIZE_T_DEFINED
+#define _SSIZE_T_DEFINED
+#undef ssize_t
+#ifdef _WIN64
+#if defined(__GNUC__) && defined(__STRICT_ANSI__)
+ typedef int ssize_t __attribute__ ((mode (DI)));
+#else
+ typedef __int64 ssize_t;
+#endif
+#else
+ typedef int ssize_t;
+#endif
+#endif
+
+#ifndef NULL
+#ifdef __cplusplus
+#define NULL 0
+#else
+#define NULL ((void *)0)
+#endif
+#endif
+
+#ifdef _USE_32BIT_TIME_T
+#define _localtime32 localtime
+#define _difftime32 difftime
+#define _ctime32 ctime
+#define _gmtime32 gmtime
+#define _mktime32 mktime
+#define _time32 time
+#endif
+
+#ifndef _TM_DEFINED
+#define _TM_DEFINED
+ struct tm {
+ int tm_sec;
+ int tm_min;
+ int tm_hour;
+ int tm_mday;
+ int tm_mon;
+ int tm_year;
+ int tm_wday;
+ int tm_yday;
+ int tm_isdst;
+ };
+#endif
+
+#define CLOCKS_PER_SEC 1000
+
+ __MINGW_IMPORT int _daylight;
+ __MINGW_IMPORT long _dstbias;
+ __MINGW_IMPORT long _timezone;
+ __MINGW_IMPORT char * _tzname[2];
+ _CRTIMP errno_t __cdecl _get_daylight(int *_Daylight);
+ _CRTIMP errno_t __cdecl _get_dstbias(long *_Daylight_savings_bias);
+ _CRTIMP errno_t __cdecl _get_timezone(long *_Timezone);
+ _CRTIMP errno_t __cdecl _get_tzname(size_t *_ReturnValue,char *_Buffer,size_t _SizeInBytes,int _Index);
+ char *__cdecl asctime(const struct tm *_Tm);
+ _CRTIMP char *__cdecl _ctime32(const __time32_t *_Time);
+ clock_t __cdecl clock(void);
+ _CRTIMP double __cdecl _difftime32(__time32_t _Time1,__time32_t _Time2);
+ _CRTIMP struct tm *__cdecl _gmtime32(const __time32_t *_Time);
+ _CRTIMP struct tm *__cdecl _localtime32(const __time32_t *_Time);
+ size_t __cdecl strftime(char *_Buf,size_t _SizeInBytes,const char *_Format,const struct tm *_Tm);
+ _CRTIMP size_t __cdecl _strftime_l(char *_Buf,size_t _Max_size,const char *_Format,const struct tm *_Tm,_locale_t _Locale);
+ _CRTIMP char *__cdecl _strdate(char *_Buffer);
+ _CRTIMP char *__cdecl _strtime(char *_Buffer);
+ _CRTIMP __time32_t __cdecl _time32(__time32_t *_Time);
+ _CRTIMP __time32_t __cdecl _mktime32(struct tm *_Tm);
+ _CRTIMP __time32_t __cdecl _mkgmtime32(struct tm *_Tm);
+#if defined (_POSIX_) || defined(__GNUC__)
+ void __cdecl tzset(void);
+#else
+ _CRTIMP void __cdecl _tzset(void);
+#endif
+
+#if _INTEGRAL_MAX_BITS >= 64
+ double __cdecl _difftime64(__time64_t _Time1,__time64_t _Time2);
+ _CRTIMP char *__cdecl _ctime64(const __time64_t *_Time);
+ _CRTIMP struct tm *__cdecl _gmtime64(const __time64_t *_Time);
+ _CRTIMP struct tm *__cdecl _localtime64(const __time64_t *_Time);
+ _CRTIMP __time64_t __cdecl _mktime64(struct tm *_Tm);
+ _CRTIMP __time64_t __cdecl _mkgmtime64(struct tm *_Tm);
+ _CRTIMP __time64_t __cdecl _time64(__time64_t *_Time);
+#endif
+ unsigned __cdecl _getsystime(struct tm *_Tm);
+ unsigned __cdecl _setsystime(struct tm *_Tm,unsigned _MilliSec);
+
+#ifndef _SIZE_T_DEFINED
+#define _SIZE_T_DEFINED
+#ifdef _WIN64
+#if defined(__GNUC__) && defined(__STRICT_ANSI__)
+ typedef unsigned int size_t __attribute__ ((mode (DI)));
+#else
+ typedef unsigned __int64 size_t;
+#endif
+#else
+ typedef unsigned long size_t;
+#endif
+#endif
+
+#ifndef _SSIZE_T_DEFINED
+#define _SSIZE_T_DEFINED
+#ifdef _WIN64
+#if defined(__GNUC__) && defined(__STRICT_ANSI__)
+ typedef int ssize_t __attribute__ ((mode (DI)));
+#else
+ typedef __int64 ssize_t;
+#endif
+#else
+ typedef long ssize_t;
+#endif
+#endif
+
+#ifndef _WTIME_DEFINED
+ _CRTIMP wchar_t *__cdecl _wasctime(const struct tm *_Tm);
+ _CRTIMP wchar_t *__cdecl _wctime32(const __time32_t *_Time);
+ size_t __cdecl wcsftime(wchar_t *_Buf,size_t _SizeInWords,const wchar_t *_Format,const struct tm *_Tm);
+ _CRTIMP size_t __cdecl _wcsftime_l(wchar_t *_Buf,size_t _SizeInWords,const wchar_t *_Format,const struct tm *_Tm,_locale_t _Locale);
+ _CRTIMP wchar_t *__cdecl _wstrdate(wchar_t *_Buffer);
+ _CRTIMP wchar_t *__cdecl _wstrtime(wchar_t *_Buffer);
+#if _INTEGRAL_MAX_BITS >= 64
+ _CRTIMP wchar_t *__cdecl _wctime64(const __time64_t *_Time);
+#endif
+
+#if !defined (RC_INVOKED) && !defined (_INC_WTIME_INL)
+#define _INC_WTIME_INL
+#ifdef _USE_32BIT_TIME_T
+__CRT_INLINE wchar_t *__cdecl _wctime(const time_t *_Time) { return _wctime32(_Time); }
+#else
+__CRT_INLINE wchar_t *__cdecl _wctime(const time_t *_Time) { return _wctime64(_Time); }
+#endif
+#endif
+
+#define _WTIME_DEFINED
+#endif
+
+#ifndef RC_INVOKED
+double __cdecl difftime(time_t _Time1,time_t _Time2);
+char *__cdecl ctime(const time_t *_Time);
+struct tm *__cdecl gmtime(const time_t *_Time);
+struct tm *__cdecl localtime(const time_t *_Time);
+struct tm *__cdecl localtime_r(const time_t *_Time,struct tm *);
+
+time_t __cdecl mktime(struct tm *_Tm);
+time_t __cdecl _mkgmtime(struct tm *_Tm);
+time_t __cdecl time(time_t *_Time);
+
+#ifdef _USE_32BIT_TIME_T
+#if 0
+__CRT_INLINE double __cdecl difftime(time_t _Time1,time_t _Time2) { return _difftime32(_Time1,_Time2); }
+__CRT_INLINE char *__cdecl ctime(const time_t *_Time) { return _ctime32(_Time); }
+__CRT_INLINE struct tm *__cdecl gmtime(const time_t *_Time) { return _gmtime32(_Time); }
+__CRT_INLINE struct tm *__cdecl localtime(const time_t *_Time) { return _localtime32(_Time); }
+__CRT_INLINE time_t __cdecl mktime(struct tm *_Tm) { return _mktime32(_Tm); }
+__CRT_INLINE time_t __cdecl _mkgmtime(struct tm *_Tm) { return _mkgmtime32(_Tm); }
+__CRT_INLINE time_t __cdecl time(time_t *_Time) { return _time32(_Time); }
+#endif
+#else
+__CRT_INLINE double __cdecl difftime(time_t _Time1,time_t _Time2) { return _difftime64(_Time1,_Time2); }
+__CRT_INLINE char *__cdecl ctime(const time_t *_Time) { return _ctime64(_Time); }
+__CRT_INLINE struct tm *__cdecl gmtime(const time_t *_Time) { return _gmtime64(_Time); }
+__CRT_INLINE struct tm *__cdecl localtime(const time_t *_Time) { return _localtime64(_Time); }
+__CRT_INLINE time_t __cdecl mktime(struct tm *_Tm) { return _mktime64(_Tm); }
+__CRT_INLINE time_t __cdecl _mkgmtime(struct tm *_Tm) { return _mkgmtime64(_Tm); }
+__CRT_INLINE time_t __cdecl time(time_t *_Time) { return _time64(_Time); }
+#endif
+#endif
+
+#if !defined(NO_OLDNAMES) || defined(_POSIX)
+#define CLK_TCK CLOCKS_PER_SEC
+
+ __MINGW_IMPORT int daylight;
+ __MINGW_IMPORT long dstbias;
+ __MINGW_IMPORT long timezone;
+ __MINGW_IMPORT char *tzname[2];
+ void __cdecl tzset(void);
+#endif
+
+#ifndef _TIMEVAL_DEFINED /* also in winsock[2].h */
+#define _TIMEVAL_DEFINED
+struct timeval {
+ long tv_sec;
+ long tv_usec;
+};
+#define timerisset(tvp) ((tvp)->tv_sec || (tvp)->tv_usec)
+#define timercmp(tvp,uvp,cmp) ((tvp)->tv_sec cmp (uvp)->tv_sec || (tvp)->tv_sec==(uvp)->tv_sec && (tvp)->tv_usec cmp (uvp)->tv_usec)
+#define timerclear(tvp) (tvp)->tv_sec = (tvp)->tv_usec = 0
+#endif /* _TIMEVAL_DEFINED */
+
+#ifndef __STRICT_ANSI__
+#ifndef _TIMEZONE_DEFINED /* also in sys/time.h */
+#define _TIMEZONE_DEFINED
+struct timezone {
+ int tz_minuteswest;
+ int tz_dsttime;
+};
+
+ extern int __cdecl mingw_gettimeofday (struct timeval *p, struct timezone *z);
+#endif
+#endif /* __STRICT_ANSI__ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#pragma pack(pop)
+
+#include <sec_api/time_s.h>
+
+/* Adding timespec definition. */
+#include <sys/timeb.h>
+
+#endif /* End _TIME_H_ */
+
diff --git a/tcc/include/vadefs.h b/tcc/include/vadefs.h
new file mode 100644
index 0000000..749b0bd
--- /dev/null
+++ b/tcc/include/vadefs.h
@@ -0,0 +1,11 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+#ifndef _INC_VADEFS
+#define _INC_VADEFS
+
+//!__TINYC__: GNUC specific stuff removed
+
+#endif
diff --git a/tcc/include/values.h b/tcc/include/values.h
new file mode 100644
index 0000000..1cd643c
--- /dev/null
+++ b/tcc/include/values.h
@@ -0,0 +1,4 @@
+/*
+ * TODO: Nothing here yet. Should provide UNIX compatibility constants
+ * comparable to those in limits.h and float.h.
+ */
diff --git a/tcc/include/varargs.h b/tcc/include/varargs.h
new file mode 100644
index 0000000..d614366
--- /dev/null
+++ b/tcc/include/varargs.h
@@ -0,0 +1,12 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+#ifndef _VARARGS_H
+#define _VARARGS_H
+
+#error "TinyCC no longer implements <varargs.h>."
+#error "Revise your code to use <stdarg.h>."
+
+#endif
diff --git a/tcc/include/wchar.h b/tcc/include/wchar.h
new file mode 100644
index 0000000..389196f
--- /dev/null
+++ b/tcc/include/wchar.h
@@ -0,0 +1,873 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+#ifndef _INC_WCHAR
+#define _INC_WCHAR
+
+#include <_mingw.h>
+
+#pragma pack(push,_CRT_PACKING)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef WCHAR_MIN /* also at stdint.h */
+#define WCHAR_MIN 0
+#define WCHAR_MAX ((wchar_t) -1) /* UINT16_MAX */
+#endif
+
+#ifndef __GNUC_VA_LIST
+#define __GNUC_VA_LIST
+ typedef __builtin_va_list __gnuc_va_list;
+#endif
+
+#ifndef _VA_LIST_DEFINED
+#define _VA_LIST_DEFINED
+ typedef __gnuc_va_list va_list;
+#endif
+
+#ifndef WEOF
+#define WEOF (wint_t)(0xFFFF)
+#endif
+
+#ifndef _FILE_DEFINED
+ struct _iobuf {
+ char *_ptr;
+ int _cnt;
+ char *_base;
+ int _flag;
+ int _file;
+ int _charbuf;
+ int _bufsiz;
+ char *_tmpfname;
+ };
+ typedef struct _iobuf FILE;
+#define _FILE_DEFINED
+#endif
+
+#ifndef _STDIO_DEFINED
+#ifdef _WIN64
+ _CRTIMP FILE *__cdecl __iob_func(void);
+#else
+#ifdef _MSVCRT_
+extern FILE _iob[]; /* A pointer to an array of FILE */
+#define __iob_func() (_iob)
+#else
+extern FILE (*_imp___iob)[]; /* A pointer to an array of FILE */
+#define __iob_func() (*_imp___iob)
+#define _iob __iob_func()
+#endif
+#endif
+
+#define _iob __iob_func()
+#endif
+
+#ifndef _STDSTREAM_DEFINED
+#define stdin (&__iob_func()[0])
+#define stdout (&__iob_func()[1])
+#define stderr (&__iob_func()[2])
+#define _STDSTREAM_DEFINED
+#endif
+
+#ifndef _FSIZE_T_DEFINED
+ typedef unsigned long _fsize_t;
+#define _FSIZE_T_DEFINED
+#endif
+
+#ifndef _WFINDDATA_T_DEFINED
+ struct _wfinddata32_t {
+ unsigned attrib;
+ __time32_t time_create;
+ __time32_t time_access;
+ __time32_t time_write;
+ _fsize_t size;
+ wchar_t name[260];
+ };
+
+/* #if _INTEGRAL_MAX_BITS >= 64 */
+
+ struct _wfinddata32i64_t {
+ unsigned attrib;
+ __time32_t time_create;
+ __time32_t time_access;
+ __time32_t time_write;
+ __int64 size;
+ wchar_t name[260];
+ };
+
+ struct _wfinddata64i32_t {
+ unsigned attrib;
+ __time64_t time_create;
+ __time64_t time_access;
+ __time64_t time_write;
+ _fsize_t size;
+ wchar_t name[260];
+ };
+
+ struct _wfinddata64_t {
+ unsigned attrib;
+ __time64_t time_create;
+ __time64_t time_access;
+ __time64_t time_write;
+ __int64 size;
+ wchar_t name[260];
+ };
+/* #endif */
+
+#ifdef _USE_32BIT_TIME_T
+#define _wfinddata_t _wfinddata32_t
+#define _wfinddatai64_t _wfinddata32i64_t
+
+#define _wfindfirst _wfindfirst32
+#define _wfindnext _wfindnext32
+#define _wfindfirsti64 _wfindfirst32i64
+#define _wfindnexti64 _wfindnext32i64
+#else
+#define _wfinddata_t _wfinddata64i32_t
+#define _wfinddatai64_t _wfinddata64_t
+
+#define _wfindfirst _wfindfirst64i32
+#define _wfindnext _wfindnext64i32
+#define _wfindfirsti64 _wfindfirst64
+#define _wfindnexti64 _wfindnext64
+#endif
+
+#define _WFINDDATA_T_DEFINED
+#endif
+
+#ifndef NULL
+#ifdef __cplusplus
+#define NULL 0
+#else
+#define NULL ((void *)0)
+#endif
+#endif
+
+#ifndef _CONST_RETURN
+#define _CONST_RETURN
+#endif
+
+#define _WConst_return _CONST_RETURN
+
+#ifndef _CRT_CTYPEDATA_DEFINED
+#define _CRT_CTYPEDATA_DEFINED
+#ifndef _CTYPE_DISABLE_MACROS
+
+#ifndef __PCTYPE_FUNC
+#define __PCTYPE_FUNC __pctype_func()
+#ifdef _MSVCRT_
+#define __pctype_func() (_pctype)
+#else
+#define __pctype_func() (*_imp___pctype)
+#endif
+#endif
+
+#ifndef _pctype
+#ifdef _MSVCRT_
+ extern unsigned short *_pctype;
+#else
+ extern unsigned short **_imp___pctype;
+#define _pctype (*_imp___pctype)
+#endif
+#endif
+#endif
+#endif
+
+#ifndef _CRT_WCTYPEDATA_DEFINED
+#define _CRT_WCTYPEDATA_DEFINED
+#ifndef _CTYPE_DISABLE_MACROS
+#ifndef _wctype
+#ifdef _MSVCRT_
+ extern unsigned short *_wctype;
+#else
+ extern unsigned short **_imp___wctype;
+#define _wctype (*_imp___wctype)
+#endif
+#endif
+
+#ifdef _MSVCRT_
+#define __pwctype_func() (_pwctype)
+#else
+#define __pwctype_func() (*_imp___pwctype)
+#endif
+
+#ifndef _pwctype
+#ifdef _MSVCRT_
+ extern unsigned short *_pwctype;
+#else
+ extern unsigned short **_imp___pwctype;
+#define _pwctype (*_imp___pwctype)
+#endif
+#endif
+
+#endif
+#endif
+
+#define _UPPER 0x1
+#define _LOWER 0x2
+#define _DIGIT 0x4
+#define _SPACE 0x8
+
+#define _PUNCT 0x10
+#define _CONTROL 0x20
+#define _BLANK 0x40
+#define _HEX 0x80
+
+#define _LEADBYTE 0x8000
+#define _ALPHA (0x0100|_UPPER|_LOWER)
+
+#ifndef _WCTYPE_DEFINED
+#define _WCTYPE_DEFINED
+
+ int __cdecl iswalpha(wint_t _C);
+ _CRTIMP int __cdecl _iswalpha_l(wint_t _C,_locale_t _Locale);
+ int __cdecl iswupper(wint_t _C);
+ _CRTIMP int __cdecl _iswupper_l(wint_t _C,_locale_t _Locale);
+ int __cdecl iswlower(wint_t _C);
+ _CRTIMP int __cdecl _iswlower_l(wint_t _C,_locale_t _Locale);
+ int __cdecl iswdigit(wint_t _C);
+ _CRTIMP int __cdecl _iswdigit_l(wint_t _C,_locale_t _Locale);
+ int __cdecl iswxdigit(wint_t _C);
+ _CRTIMP int __cdecl _iswxdigit_l(wint_t _C,_locale_t _Locale);
+ int __cdecl iswspace(wint_t _C);
+ _CRTIMP int __cdecl _iswspace_l(wint_t _C,_locale_t _Locale);
+ int __cdecl iswpunct(wint_t _C);
+ _CRTIMP int __cdecl _iswpunct_l(wint_t _C,_locale_t _Locale);
+ int __cdecl iswalnum(wint_t _C);
+ _CRTIMP int __cdecl _iswalnum_l(wint_t _C,_locale_t _Locale);
+ int __cdecl iswprint(wint_t _C);
+ _CRTIMP int __cdecl _iswprint_l(wint_t _C,_locale_t _Locale);
+ int __cdecl iswgraph(wint_t _C);
+ _CRTIMP int __cdecl _iswgraph_l(wint_t _C,_locale_t _Locale);
+ int __cdecl iswcntrl(wint_t _C);
+ _CRTIMP int __cdecl _iswcntrl_l(wint_t _C,_locale_t _Locale);
+ int __cdecl iswascii(wint_t _C);
+ int __cdecl isleadbyte(int _C);
+ _CRTIMP int __cdecl _isleadbyte_l(int _C,_locale_t _Locale);
+ wint_t __cdecl towupper(wint_t _C);
+ _CRTIMP wint_t __cdecl _towupper_l(wint_t _C,_locale_t _Locale);
+ wint_t __cdecl towlower(wint_t _C);
+ _CRTIMP wint_t __cdecl _towlower_l(wint_t _C,_locale_t _Locale);
+ int __cdecl iswctype(wint_t _C,wctype_t _Type);
+ _CRTIMP int __cdecl _iswctype_l(wint_t _C,wctype_t _Type,_locale_t _Locale);
+ _CRTIMP int __cdecl __iswcsymf(wint_t _C);
+ _CRTIMP int __cdecl _iswcsymf_l(wint_t _C,_locale_t _Locale);
+ _CRTIMP int __cdecl __iswcsym(wint_t _C);
+ _CRTIMP int __cdecl _iswcsym_l(wint_t _C,_locale_t _Locale);
+ int __cdecl is_wctype(wint_t _C,wctype_t _Type);
+#endif
+
+#ifndef _WDIRECT_DEFINED
+#define _WDIRECT_DEFINED
+
+ _CRTIMP wchar_t *__cdecl _wgetcwd(wchar_t *_DstBuf,int _SizeInWords);
+ _CRTIMP wchar_t *__cdecl _wgetdcwd(int _Drive,wchar_t *_DstBuf,int _SizeInWords);
+ wchar_t *__cdecl _wgetdcwd_nolock(int _Drive,wchar_t *_DstBuf,int _SizeInWords);
+ _CRTIMP int __cdecl _wchdir(const wchar_t *_Path);
+ _CRTIMP int __cdecl _wmkdir(const wchar_t *_Path);
+ _CRTIMP int __cdecl _wrmdir(const wchar_t *_Path);
+#endif
+
+#ifndef _WIO_DEFINED
+#define _WIO_DEFINED
+
+ _CRTIMP int __cdecl _waccess(const wchar_t *_Filename,int _AccessMode);
+ _CRTIMP int __cdecl _wchmod(const wchar_t *_Filename,int _Mode);
+ _CRTIMP int __cdecl _wcreat(const wchar_t *_Filename,int _PermissionMode);
+ _CRTIMP intptr_t __cdecl _wfindfirst32(const wchar_t *_Filename,struct _wfinddata32_t *_FindData);
+ _CRTIMP int __cdecl _wfindnext32(intptr_t _FindHandle,struct _wfinddata32_t *_FindData);
+ _CRTIMP int __cdecl _wunlink(const wchar_t *_Filename);
+ _CRTIMP int __cdecl _wrename(const wchar_t *_NewFilename,const wchar_t *_OldFilename);
+ _CRTIMP wchar_t *__cdecl _wmktemp(wchar_t *_TemplateName);
+#if _INTEGRAL_MAX_BITS >= 64
+ _CRTIMP intptr_t __cdecl _wfindfirst32i64(const wchar_t *_Filename,struct _wfinddata32i64_t *_FindData);
+ intptr_t __cdecl _wfindfirst64i32(const wchar_t *_Filename,struct _wfinddata64i32_t *_FindData);
+ _CRTIMP intptr_t __cdecl _wfindfirst64(const wchar_t *_Filename,struct _wfinddata64_t *_FindData);
+ _CRTIMP int __cdecl _wfindnext32i64(intptr_t _FindHandle,struct _wfinddata32i64_t *_FindData);
+ int __cdecl _wfindnext64i32(intptr_t _FindHandle,struct _wfinddata64i32_t *_FindData);
+ _CRTIMP int __cdecl _wfindnext64(intptr_t _FindHandle,struct _wfinddata64_t *_FindData);
+#endif
+ _CRTIMP errno_t __cdecl _wsopen_s(int *_FileHandle,const wchar_t *_Filename,int _OpenFlag,int _ShareFlag,int _PermissionFlag);
+#if !defined(__cplusplus) || !(defined(_X86_) && !defined(__x86_64))
+ _CRTIMP int __cdecl _wopen(const wchar_t *_Filename,int _OpenFlag,...);
+ _CRTIMP int __cdecl _wsopen(const wchar_t *_Filename,int _OpenFlag,int _ShareFlag,...);
+#else
+ extern "C++" _CRTIMP int __cdecl _wopen(const wchar_t *_Filename,int _OpenFlag,int _PermissionMode = 0);
+ extern "C++" _CRTIMP int __cdecl _wsopen(const wchar_t *_Filename,int _OpenFlag,int _ShareFlag,int _PermissionMode = 0);
+#endif
+#endif
+
+#ifndef _WLOCALE_DEFINED
+#define _WLOCALE_DEFINED
+ _CRTIMP wchar_t *__cdecl _wsetlocale(int _Category,const wchar_t *_Locale);
+#endif
+
+#ifndef _WPROCESS_DEFINED
+#define _WPROCESS_DEFINED
+
+ _CRTIMP intptr_t __cdecl _wexecl(const wchar_t *_Filename,const wchar_t *_ArgList,...);
+ _CRTIMP intptr_t __cdecl _wexecle(const wchar_t *_Filename,const wchar_t *_ArgList,...);
+ _CRTIMP intptr_t __cdecl _wexeclp(const wchar_t *_Filename,const wchar_t *_ArgList,...);
+ _CRTIMP intptr_t __cdecl _wexeclpe(const wchar_t *_Filename,const wchar_t *_ArgList,...);
+ _CRTIMP intptr_t __cdecl _wexecv(const wchar_t *_Filename,const wchar_t *const *_ArgList);
+ _CRTIMP intptr_t __cdecl _wexecve(const wchar_t *_Filename,const wchar_t *const *_ArgList,const wchar_t *const *_Env);
+ _CRTIMP intptr_t __cdecl _wexecvp(const wchar_t *_Filename,const wchar_t *const *_ArgList);
+ _CRTIMP intptr_t __cdecl _wexecvpe(const wchar_t *_Filename,const wchar_t *const *_ArgList,const wchar_t *const *_Env);
+ _CRTIMP intptr_t __cdecl _wspawnl(int _Mode,const wchar_t *_Filename,const wchar_t *_ArgList,...);
+ _CRTIMP intptr_t __cdecl _wspawnle(int _Mode,const wchar_t *_Filename,const wchar_t *_ArgList,...);
+ _CRTIMP intptr_t __cdecl _wspawnlp(int _Mode,const wchar_t *_Filename,const wchar_t *_ArgList,...);
+ _CRTIMP intptr_t __cdecl _wspawnlpe(int _Mode,const wchar_t *_Filename,const wchar_t *_ArgList,...);
+ _CRTIMP intptr_t __cdecl _wspawnv(int _Mode,const wchar_t *_Filename,const wchar_t *const *_ArgList);
+ _CRTIMP intptr_t __cdecl _wspawnve(int _Mode,const wchar_t *_Filename,const wchar_t *const *_ArgList,const wchar_t *const *_Env);
+ _CRTIMP intptr_t __cdecl _wspawnvp(int _Mode,const wchar_t *_Filename,const wchar_t *const *_ArgList);
+ _CRTIMP intptr_t __cdecl _wspawnvpe(int _Mode,const wchar_t *_Filename,const wchar_t *const *_ArgList,const wchar_t *const *_Env);
+#ifndef _CRT_WSYSTEM_DEFINED
+#define _CRT_WSYSTEM_DEFINED
+ _CRTIMP int __cdecl _wsystem(const wchar_t *_Command);
+#endif
+#endif
+
+#ifndef _WCTYPE_INLINE_DEFINED
+#undef _CRT_WCTYPE_NOINLINE
+#if !defined(__cplusplus) || defined(_CRT_WCTYPE_NOINLINE)
+#define iswalpha(_c) (iswctype(_c,_ALPHA))
+#define iswupper(_c) (iswctype(_c,_UPPER))
+#define iswlower(_c) (iswctype(_c,_LOWER))
+#define iswdigit(_c) (iswctype(_c,_DIGIT))
+#define iswxdigit(_c) (iswctype(_c,_HEX))
+#define iswspace(_c) (iswctype(_c,_SPACE))
+#define iswpunct(_c) (iswctype(_c,_PUNCT))
+#define iswalnum(_c) (iswctype(_c,_ALPHA|_DIGIT))
+#define iswprint(_c) (iswctype(_c,_BLANK|_PUNCT|_ALPHA|_DIGIT))
+#define iswgraph(_c) (iswctype(_c,_PUNCT|_ALPHA|_DIGIT))
+#define iswcntrl(_c) (iswctype(_c,_CONTROL))
+#define iswascii(_c) ((unsigned)(_c) < 0x80)
+
+#define _iswalpha_l(_c,_p) (_iswctype_l(_c,_ALPHA,_p))
+#define _iswupper_l(_c,_p) (_iswctype_l(_c,_UPPER,_p))
+#define _iswlower_l(_c,_p) (_iswctype_l(_c,_LOWER,_p))
+#define _iswdigit_l(_c,_p) (_iswctype_l(_c,_DIGIT,_p))
+#define _iswxdigit_l(_c,_p) (_iswctype_l(_c,_HEX,_p))
+#define _iswspace_l(_c,_p) (_iswctype_l(_c,_SPACE,_p))
+#define _iswpunct_l(_c,_p) (_iswctype_l(_c,_PUNCT,_p))
+#define _iswalnum_l(_c,_p) (_iswctype_l(_c,_ALPHA|_DIGIT,_p))
+#define _iswprint_l(_c,_p) (_iswctype_l(_c,_BLANK|_PUNCT|_ALPHA|_DIGIT,_p))
+#define _iswgraph_l(_c,_p) (_iswctype_l(_c,_PUNCT|_ALPHA|_DIGIT,_p))
+#define _iswcntrl_l(_c,_p) (_iswctype_l(_c,_CONTROL,_p))
+#ifndef _CTYPE_DISABLE_MACROS
+#define isleadbyte(_c) (__PCTYPE_FUNC[(unsigned char)(_c)] & _LEADBYTE)
+#endif
+#endif
+#define _WCTYPE_INLINE_DEFINED
+#endif
+
+#if !defined(_POSIX_) || defined(__GNUC__)
+#ifndef _INO_T_DEFINED
+#define _INO_T_DEFINED
+ typedef unsigned short _ino_t;
+#ifndef NO_OLDNAMES
+ typedef unsigned short ino_t;
+#endif
+#endif
+
+#ifndef _DEV_T_DEFINED
+#define _DEV_T_DEFINED
+ typedef unsigned int _dev_t;
+#ifndef NO_OLDNAMES
+ typedef unsigned int dev_t;
+#endif
+#endif
+
+#ifndef _OFF_T_DEFINED
+#define _OFF_T_DEFINED
+#ifndef _OFF_T_
+#define _OFF_T_
+ typedef long _off_t;
+#if !defined(NO_OLDNAMES) || defined(_POSIX)
+ typedef long off_t;
+#endif
+#endif
+#endif
+
+#ifndef _OFF64_T_DEFINED
+#define _OFF64_T_DEFINED
+ typedef long long _off64_t;
+#if !defined(NO_OLDNAMES) || defined(_POSIX)
+ typedef long long off64_t;
+#endif
+#endif
+
+#ifndef _STAT_DEFINED
+#define _STAT_DEFINED
+
+#ifdef _USE_32BIT_TIME_T
+#ifdef WIN64
+#define _fstat _fstat32
+#define _stat _stat32
+#define _wstat _wstat32
+#else
+#define _fstat32 _fstat
+#define _stat32 _stat
+#define _wstat32 _wstat
+#endif
+#define _fstati64 _fstat32i64
+#define _stati64 _stat32i64
+#define _wstati64 _wstat32i64
+#else
+#define _fstat _fstat64i32
+#define _fstati64 _fstat64
+#define _stat _stat64i32
+#define _stati64 _stat64
+#define _wstat _wstat64i32
+#define _wstati64 _wstat64
+#endif
+
+ struct _stat32 {
+ _dev_t st_dev;
+ _ino_t st_ino;
+ unsigned short st_mode;
+ short st_nlink;
+ short st_uid;
+ short st_gid;
+ _dev_t st_rdev;
+ _off_t st_size;
+ __time32_t st_atime;
+ __time32_t st_mtime;
+ __time32_t st_ctime;
+ };
+
+#ifndef NO_OLDNAMES
+ struct stat {
+ _dev_t st_dev;
+ _ino_t st_ino;
+ unsigned short st_mode;
+ short st_nlink;
+ short st_uid;
+ short st_gid;
+ _dev_t st_rdev;
+ _off_t st_size;
+ time_t st_atime;
+ time_t st_mtime;
+ time_t st_ctime;
+ };
+#endif
+
+#if _INTEGRAL_MAX_BITS >= 64
+
+ struct _stat32i64 {
+ _dev_t st_dev;
+ _ino_t st_ino;
+ unsigned short st_mode;
+ short st_nlink;
+ short st_uid;
+ short st_gid;
+ _dev_t st_rdev;
+ __int64 st_size;
+ __time32_t st_atime;
+ __time32_t st_mtime;
+ __time32_t st_ctime;
+ };
+
+ struct _stat64i32 {
+ _dev_t st_dev;
+ _ino_t st_ino;
+ unsigned short st_mode;
+ short st_nlink;
+ short st_uid;
+ short st_gid;
+ _dev_t st_rdev;
+ _off_t st_size;
+ __time64_t st_atime;
+ __time64_t st_mtime;
+ __time64_t st_ctime;
+ };
+
+ struct _stat64 {
+ _dev_t st_dev;
+ _ino_t st_ino;
+ unsigned short st_mode;
+ short st_nlink;
+ short st_uid;
+ short st_gid;
+ _dev_t st_rdev;
+ __int64 st_size;
+ __time64_t st_atime;
+ __time64_t st_mtime;
+ __time64_t st_ctime;
+ };
+#endif
+
+#define __stat64 _stat64
+
+#endif
+
+#ifndef _WSTAT_DEFINED
+#define _WSTAT_DEFINED
+
+ _CRTIMP int __cdecl _wstat32(const wchar_t *_Name,struct _stat32 *_Stat);
+#if _INTEGRAL_MAX_BITS >= 64
+ _CRTIMP int __cdecl _wstat32i64(const wchar_t *_Name,struct _stat32i64 *_Stat);
+ int __cdecl _wstat64i32(const wchar_t *_Name,struct _stat64i32 *_Stat);
+ _CRTIMP int __cdecl _wstat64(const wchar_t *_Name,struct _stat64 *_Stat);
+#endif
+#endif
+#endif
+
+#ifndef _WCONIO_DEFINED
+#define _WCONIO_DEFINED
+
+#ifndef WEOF
+#define WEOF (wint_t)(0xFFFF)
+#endif
+
+ _CRTIMP wchar_t *_cgetws(wchar_t *_Buffer);
+ _CRTIMP wint_t __cdecl _getwch(void);
+ _CRTIMP wint_t __cdecl _getwche(void);
+ _CRTIMP wint_t __cdecl _putwch(wchar_t _WCh);
+ _CRTIMP wint_t __cdecl _ungetwch(wint_t _WCh);
+ _CRTIMP int __cdecl _cputws(const wchar_t *_String);
+ _CRTIMP int __cdecl _cwprintf(const wchar_t *_Format,...);
+ _CRTIMP int __cdecl _cwscanf(const wchar_t *_Format,...);
+ _CRTIMP int __cdecl _cwscanf_l(const wchar_t *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _vcwprintf(const wchar_t *_Format,va_list _ArgList);
+ _CRTIMP int __cdecl _cwprintf_p(const wchar_t *_Format,...);
+ _CRTIMP int __cdecl _vcwprintf_p(const wchar_t *_Format,va_list _ArgList);
+
+ _CRTIMP int __cdecl _cwprintf_l(const wchar_t *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _vcwprintf_l(const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
+ _CRTIMP int __cdecl _cwprintf_p_l(const wchar_t *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _vcwprintf_p_l(const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
+ wint_t __cdecl _putwch_nolock(wchar_t _WCh);
+ wint_t __cdecl _getwch_nolock(void);
+ wint_t __cdecl _getwche_nolock(void);
+ wint_t __cdecl _ungetwch_nolock(wint_t _WCh);
+#endif
+
+#ifndef _WSTDIO_DEFINED
+#define _WSTDIO_DEFINED
+
+#ifndef WEOF
+#define WEOF (wint_t)(0xFFFF)
+#endif
+
+#ifdef _POSIX_
+ _CRTIMP FILE *__cdecl _wfsopen(const wchar_t *_Filename,const wchar_t *_Mode);
+#else
+ _CRTIMP FILE *__cdecl _wfsopen(const wchar_t *_Filename,const wchar_t *_Mode,int _ShFlag);
+#endif
+
+ wint_t __cdecl fgetwc(FILE *_File);
+ _CRTIMP wint_t __cdecl _fgetwchar(void);
+ wint_t __cdecl fputwc(wchar_t _Ch,FILE *_File);
+ _CRTIMP wint_t __cdecl _fputwchar(wchar_t _Ch);
+ wint_t __cdecl getwc(FILE *_File);
+ wint_t __cdecl getwchar(void);
+ wint_t __cdecl putwc(wchar_t _Ch,FILE *_File);
+ wint_t __cdecl putwchar(wchar_t _Ch);
+ wint_t __cdecl ungetwc(wint_t _Ch,FILE *_File);
+ wchar_t *__cdecl fgetws(wchar_t *_Dst,int _SizeInWords,FILE *_File);
+ int __cdecl fputws(const wchar_t *_Str,FILE *_File);
+ _CRTIMP wchar_t *__cdecl _getws(wchar_t *_String);
+ _CRTIMP int __cdecl _putws(const wchar_t *_Str);
+ int __cdecl fwprintf(FILE *_File,const wchar_t *_Format,...);
+ int __cdecl wprintf(const wchar_t *_Format,...);
+ _CRTIMP int __cdecl _scwprintf(const wchar_t *_Format,...);
+ int __cdecl vfwprintf(FILE *_File,const wchar_t *_Format,va_list _ArgList);
+ int __cdecl vwprintf(const wchar_t *_Format,va_list _ArgList);
+ _CRTIMP int __cdecl swprintf(wchar_t*, const wchar_t*, ...);
+ _CRTIMP int __cdecl vswprintf(wchar_t*, const wchar_t*,va_list);
+ _CRTIMP int __cdecl _swprintf_c(wchar_t *_DstBuf,size_t _SizeInWords,const wchar_t *_Format,...);
+ _CRTIMP int __cdecl _vswprintf_c(wchar_t *_DstBuf,size_t _SizeInWords,const wchar_t *_Format,va_list _ArgList);
+ _CRTIMP int __cdecl _snwprintf(wchar_t *_Dest,size_t _Count,const wchar_t *_Format,...);
+ _CRTIMP int __cdecl _vsnwprintf(wchar_t *_Dest,size_t _Count,const wchar_t *_Format,va_list _Args);
+#ifndef __NO_ISOCEXT /* externs in libmingwex.a */
+ int __cdecl snwprintf (wchar_t *s, size_t n, const wchar_t * format, ...);
+ __CRT_INLINE int __cdecl vsnwprintf (wchar_t *s, size_t n, const wchar_t *format, va_list arg) { return _vsnwprintf(s,n,format,arg); }
+ int __cdecl vwscanf (const wchar_t *, va_list);
+ int __cdecl vfwscanf (FILE *,const wchar_t *,va_list);
+ int __cdecl vswscanf (const wchar_t *,const wchar_t *,va_list);
+#endif
+ _CRTIMP int __cdecl _fwprintf_p(FILE *_File,const wchar_t *_Format,...);
+ _CRTIMP int __cdecl _wprintf_p(const wchar_t *_Format,...);
+ _CRTIMP int __cdecl _vfwprintf_p(FILE *_File,const wchar_t *_Format,va_list _ArgList);
+ _CRTIMP int __cdecl _vwprintf_p(const wchar_t *_Format,va_list _ArgList);
+ _CRTIMP int __cdecl _swprintf_p(wchar_t *_DstBuf,size_t _MaxCount,const wchar_t *_Format,...);
+ _CRTIMP int __cdecl _vswprintf_p(wchar_t *_DstBuf,size_t _MaxCount,const wchar_t *_Format,va_list _ArgList);
+ _CRTIMP int __cdecl _scwprintf_p(const wchar_t *_Format,...);
+ _CRTIMP int __cdecl _vscwprintf_p(const wchar_t *_Format,va_list _ArgList);
+ _CRTIMP int __cdecl _wprintf_l(const wchar_t *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _wprintf_p_l(const wchar_t *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _vwprintf_l(const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
+ _CRTIMP int __cdecl _vwprintf_p_l(const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
+ _CRTIMP int __cdecl _fwprintf_l(FILE *_File,const wchar_t *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _fwprintf_p_l(FILE *_File,const wchar_t *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _vfwprintf_l(FILE *_File,const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
+ _CRTIMP int __cdecl _vfwprintf_p_l(FILE *_File,const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
+ _CRTIMP int __cdecl _swprintf_c_l(wchar_t *_DstBuf,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _swprintf_p_l(wchar_t *_DstBuf,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _vswprintf_c_l(wchar_t *_DstBuf,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
+ _CRTIMP int __cdecl _vswprintf_p_l(wchar_t *_DstBuf,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
+ _CRTIMP int __cdecl _scwprintf_l(const wchar_t *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _scwprintf_p_l(const wchar_t *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _vscwprintf_p_l(const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
+ _CRTIMP int __cdecl _snwprintf_l(wchar_t *_DstBuf,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _vsnwprintf_l(wchar_t *_DstBuf,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
+ _CRTIMP int __cdecl _swprintf(wchar_t *_Dest,const wchar_t *_Format,...);
+ _CRTIMP int __cdecl _vswprintf(wchar_t *_Dest,const wchar_t *_Format,va_list _Args);
+ _CRTIMP int __cdecl __swprintf_l(wchar_t *_Dest,const wchar_t *_Format,_locale_t _Plocinfo,...);
+ _CRTIMP int __cdecl __vswprintf_l(wchar_t *_Dest,const wchar_t *_Format,_locale_t _Plocinfo,va_list _Args);
+#ifndef RC_INVOKED
+#include <vadefs.h>
+#endif
+
+#ifdef _CRT_NON_CONFORMING_SWPRINTFS
+#ifndef __cplusplus
+#define swprintf _swprintf
+#define vswprintf _vswprintf
+#define _swprintf_l __swprintf_l
+#define _vswprintf_l __vswprintf_l
+#endif
+#endif
+
+ _CRTIMP wchar_t *__cdecl _wtempnam(const wchar_t *_Directory,const wchar_t *_FilePrefix);
+ _CRTIMP int __cdecl _vscwprintf(const wchar_t *_Format,va_list _ArgList);
+ _CRTIMP int __cdecl _vscwprintf_l(const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
+ int __cdecl fwscanf(FILE *_File,const wchar_t *_Format,...);
+ _CRTIMP int __cdecl _fwscanf_l(FILE *_File,const wchar_t *_Format,_locale_t _Locale,...);
+ int __cdecl swscanf(const wchar_t *_Src,const wchar_t *_Format,...);
+ _CRTIMP int __cdecl _swscanf_l(const wchar_t *_Src,const wchar_t *_Format,_locale_t _Locale,...);
+ _CRTIMP int __cdecl _snwscanf(const wchar_t *_Src,size_t _MaxCount,const wchar_t *_Format,...);
+ _CRTIMP int __cdecl _snwscanf_l(const wchar_t *_Src,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,...);
+ int __cdecl wscanf(const wchar_t *_Format,...);
+ _CRTIMP int __cdecl _wscanf_l(const wchar_t *_Format,_locale_t _Locale,...);
+ _CRTIMP FILE *__cdecl _wfdopen(int _FileHandle ,const wchar_t *_Mode);
+ _CRTIMP FILE *__cdecl _wfopen(const wchar_t *_Filename,const wchar_t *_Mode);
+ _CRTIMP FILE *__cdecl _wfreopen(const wchar_t *_Filename,const wchar_t *_Mode,FILE *_OldFile);
+
+#ifndef _CRT_WPERROR_DEFINED
+#define _CRT_WPERROR_DEFINED
+ _CRTIMP void __cdecl _wperror(const wchar_t *_ErrMsg);
+#endif
+ _CRTIMP FILE *__cdecl _wpopen(const wchar_t *_Command,const wchar_t *_Mode);
+#if !defined(NO_OLDNAMES) && !defined(wpopen)
+#define wpopen _wpopen
+#endif
+ _CRTIMP int __cdecl _wremove(const wchar_t *_Filename);
+ _CRTIMP wchar_t *__cdecl _wtmpnam(wchar_t *_Buffer);
+ _CRTIMP wint_t __cdecl _fgetwc_nolock(FILE *_File);
+ _CRTIMP wint_t __cdecl _fputwc_nolock(wchar_t _Ch,FILE *_File);
+ _CRTIMP wint_t __cdecl _ungetwc_nolock(wint_t _Ch,FILE *_File);
+
+#undef _CRT_GETPUTWCHAR_NOINLINE
+
+#if !defined(__cplusplus) || defined(_CRT_GETPUTWCHAR_NOINLINE)
+#define getwchar() fgetwc(stdin)
+#define putwchar(_c) fputwc((_c),stdout)
+#else
+ __CRT_INLINE wint_t __cdecl getwchar() {return (fgetwc(stdin)); }
+ __CRT_INLINE wint_t __cdecl putwchar(wchar_t _C) {return (fputwc(_C,stdout)); }
+#endif
+
+#define getwc(_stm) fgetwc(_stm)
+#define putwc(_c,_stm) fputwc(_c,_stm)
+#define _putwc_nolock(_c,_stm) _fputwc_nolock(_c,_stm)
+#define _getwc_nolock(_c) _fgetwc_nolock(_c)
+#endif
+
+#ifndef _WSTDLIB_DEFINED
+#define _WSTDLIB_DEFINED
+
+ _CRTIMP wchar_t *__cdecl _itow(int _Value,wchar_t *_Dest,int _Radix);
+ _CRTIMP wchar_t *__cdecl _ltow(long _Value,wchar_t *_Dest,int _Radix);
+ _CRTIMP wchar_t *__cdecl _ultow(unsigned long _Value,wchar_t *_Dest,int _Radix);
+ double __cdecl wcstod(const wchar_t *_Str,wchar_t **_EndPtr);
+ _CRTIMP double __cdecl _wcstod_l(const wchar_t *_Str,wchar_t **_EndPtr,_locale_t _Locale);
+ float __cdecl wcstof( const wchar_t *nptr, wchar_t **endptr);
+#if !defined __NO_ISOCEXT /* in libmingwex.a */
+ float __cdecl wcstof (const wchar_t * __restrict__, wchar_t ** __restrict__);
+ long double __cdecl wcstold (const wchar_t * __restrict__, wchar_t ** __restrict__);
+#endif /* __NO_ISOCEXT */
+ long __cdecl wcstol(const wchar_t *_Str,wchar_t **_EndPtr,int _Radix);
+ _CRTIMP long __cdecl _wcstol_l(const wchar_t *_Str,wchar_t **_EndPtr,int _Radix,_locale_t _Locale);
+ unsigned long __cdecl wcstoul(const wchar_t *_Str,wchar_t **_EndPtr,int _Radix);
+ _CRTIMP unsigned long __cdecl _wcstoul_l(const wchar_t *_Str,wchar_t **_EndPtr,int _Radix,_locale_t _Locale);
+ _CRTIMP wchar_t *__cdecl _wgetenv(const wchar_t *_VarName);
+#ifndef _CRT_WSYSTEM_DEFINED
+#define _CRT_WSYSTEM_DEFINED
+ _CRTIMP int __cdecl _wsystem(const wchar_t *_Command);
+#endif
+ _CRTIMP double __cdecl _wtof(const wchar_t *_Str);
+ _CRTIMP double __cdecl _wtof_l(const wchar_t *_Str,_locale_t _Locale);
+ _CRTIMP int __cdecl _wtoi(const wchar_t *_Str);
+ _CRTIMP int __cdecl _wtoi_l(const wchar_t *_Str,_locale_t _Locale);
+ _CRTIMP long __cdecl _wtol(const wchar_t *_Str);
+ _CRTIMP long __cdecl _wtol_l(const wchar_t *_Str,_locale_t _Locale);
+
+#if _INTEGRAL_MAX_BITS >= 64
+ _CRTIMP wchar_t *__cdecl _i64tow(__int64 _Val,wchar_t *_DstBuf,int _Radix);
+ _CRTIMP wchar_t *__cdecl _ui64tow(unsigned __int64 _Val,wchar_t *_DstBuf,int _Radix);
+ _CRTIMP __int64 __cdecl _wtoi64(const wchar_t *_Str);
+ _CRTIMP __int64 __cdecl _wtoi64_l(const wchar_t *_Str,_locale_t _Locale);
+ _CRTIMP __int64 __cdecl _wcstoi64(const wchar_t *_Str,wchar_t **_EndPtr,int _Radix);
+ _CRTIMP __int64 __cdecl _wcstoi64_l(const wchar_t *_Str,wchar_t **_EndPtr,int _Radix,_locale_t _Locale);
+ _CRTIMP unsigned __int64 __cdecl _wcstoui64(const wchar_t *_Str,wchar_t **_EndPtr,int _Radix);
+ _CRTIMP unsigned __int64 __cdecl _wcstoui64_l(const wchar_t *_Str,wchar_t **_EndPtr,int _Radix,_locale_t _Locale);
+#endif
+#endif
+
+#ifndef _POSIX_
+#ifndef _WSTDLIBP_DEFINED
+#define _WSTDLIBP_DEFINED
+ _CRTIMP wchar_t *__cdecl _wfullpath(wchar_t *_FullPath,const wchar_t *_Path,size_t _SizeInWords);
+ _CRTIMP void __cdecl _wmakepath(wchar_t *_ResultPath,const wchar_t *_Drive,const wchar_t *_Dir,const wchar_t *_Filename,const wchar_t *_Ext);
+#ifndef _CRT_WPERROR_DEFINED
+#define _CRT_WPERROR_DEFINED
+ _CRTIMP void __cdecl _wperror(const wchar_t *_ErrMsg);
+#endif
+ _CRTIMP int __cdecl _wputenv(const wchar_t *_EnvString);
+ _CRTIMP void __cdecl _wsearchenv(const wchar_t *_Filename,const wchar_t *_EnvVar,wchar_t *_ResultPath);
+ _CRTIMP void __cdecl _wsplitpath(const wchar_t *_FullPath,wchar_t *_Drive,wchar_t *_Dir,wchar_t *_Filename,wchar_t *_Ext);
+#endif
+#endif
+
+#ifndef _WSTRING_DEFINED
+#define _WSTRING_DEFINED
+ _CRTIMP wchar_t *__cdecl _wcsdup(const wchar_t *_Str);
+ wchar_t *__cdecl wcscat(wchar_t *_Dest,const wchar_t *_Source);
+ _CONST_RETURN wchar_t *__cdecl wcschr(const wchar_t *_Str,wchar_t _Ch);
+ int __cdecl wcscmp(const wchar_t *_Str1,const wchar_t *_Str2);
+ wchar_t *__cdecl wcscpy(wchar_t *_Dest,const wchar_t *_Source);
+ size_t __cdecl wcscspn(const wchar_t *_Str,const wchar_t *_Control);
+ size_t __cdecl wcslen(const wchar_t *_Str);
+ size_t __cdecl wcsnlen(const wchar_t *_Src,size_t _MaxCount);
+ wchar_t *__cdecl wcsncat(wchar_t *_Dest,const wchar_t *_Source,size_t _Count);
+ int __cdecl wcsncmp(const wchar_t *_Str1,const wchar_t *_Str2,size_t _MaxCount);
+ wchar_t *__cdecl wcsncpy(wchar_t *_Dest,const wchar_t *_Source,size_t _Count);
+ _CONST_RETURN wchar_t *__cdecl wcspbrk(const wchar_t *_Str,const wchar_t *_Control);
+ _CONST_RETURN wchar_t *__cdecl wcsrchr(const wchar_t *_Str,wchar_t _Ch);
+ size_t __cdecl wcsspn(const wchar_t *_Str,const wchar_t *_Control);
+ _CONST_RETURN wchar_t *__cdecl wcsstr(const wchar_t *_Str,const wchar_t *_SubStr);
+ wchar_t *__cdecl wcstok(wchar_t *_Str,const wchar_t *_Delim);
+ _CRTIMP wchar_t *__cdecl _wcserror(int _ErrNum);
+ _CRTIMP wchar_t *__cdecl __wcserror(const wchar_t *_Str);
+ _CRTIMP int __cdecl _wcsicmp(const wchar_t *_Str1,const wchar_t *_Str2);
+ _CRTIMP int __cdecl _wcsicmp_l(const wchar_t *_Str1,const wchar_t *_Str2,_locale_t _Locale);
+ _CRTIMP int __cdecl _wcsnicmp(const wchar_t *_Str1,const wchar_t *_Str2,size_t _MaxCount);
+ _CRTIMP int __cdecl _wcsnicmp_l(const wchar_t *_Str1,const wchar_t *_Str2,size_t _MaxCount,_locale_t _Locale);
+ _CRTIMP wchar_t *__cdecl _wcsnset(wchar_t *_Str,wchar_t _Val,size_t _MaxCount);
+ _CRTIMP wchar_t *__cdecl _wcsrev(wchar_t *_Str);
+ _CRTIMP wchar_t *__cdecl _wcsset(wchar_t *_Str,wchar_t _Val);
+ _CRTIMP wchar_t *__cdecl _wcslwr(wchar_t *_String);
+ _CRTIMP wchar_t *_wcslwr_l(wchar_t *_String,_locale_t _Locale);
+ _CRTIMP wchar_t *__cdecl _wcsupr(wchar_t *_String);
+ _CRTIMP wchar_t *_wcsupr_l(wchar_t *_String,_locale_t _Locale);
+ size_t __cdecl wcsxfrm(wchar_t *_Dst,const wchar_t *_Src,size_t _MaxCount);
+ _CRTIMP size_t __cdecl _wcsxfrm_l(wchar_t *_Dst,const wchar_t *_Src,size_t _MaxCount,_locale_t _Locale);
+ int __cdecl wcscoll(const wchar_t *_Str1,const wchar_t *_Str2);
+ _CRTIMP int __cdecl _wcscoll_l(const wchar_t *_Str1,const wchar_t *_Str2,_locale_t _Locale);
+ _CRTIMP int __cdecl _wcsicoll(const wchar_t *_Str1,const wchar_t *_Str2);
+ _CRTIMP int __cdecl _wcsicoll_l(const wchar_t *_Str1,const wchar_t *_Str2,_locale_t _Locale);
+ _CRTIMP int __cdecl _wcsncoll(const wchar_t *_Str1,const wchar_t *_Str2,size_t _MaxCount);
+ _CRTIMP int __cdecl _wcsncoll_l(const wchar_t *_Str1,const wchar_t *_Str2,size_t _MaxCount,_locale_t _Locale);
+ _CRTIMP int __cdecl _wcsnicoll(const wchar_t *_Str1,const wchar_t *_Str2,size_t _MaxCount);
+ _CRTIMP int __cdecl _wcsnicoll_l(const wchar_t *_Str1,const wchar_t *_Str2,size_t _MaxCount,_locale_t _Locale);
+
+#ifndef NO_OLDNAMES
+ wchar_t *__cdecl wcsdup(const wchar_t *_Str);
+#define wcswcs wcsstr
+ int __cdecl wcsicmp(const wchar_t *_Str1,const wchar_t *_Str2);
+ int __cdecl wcsnicmp(const wchar_t *_Str1,const wchar_t *_Str2,size_t _MaxCount);
+ wchar_t *__cdecl wcsnset(wchar_t *_Str,wchar_t _Val,size_t _MaxCount);
+ wchar_t *__cdecl wcsrev(wchar_t *_Str);
+ wchar_t *__cdecl wcsset(wchar_t *_Str,wchar_t _Val);
+ wchar_t *__cdecl wcslwr(wchar_t *_Str);
+ wchar_t *__cdecl wcsupr(wchar_t *_Str);
+ int __cdecl wcsicoll(const wchar_t *_Str1,const wchar_t *_Str2);
+#endif
+#endif
+
+#ifndef _TM_DEFINED
+#define _TM_DEFINED
+ struct tm {
+ int tm_sec;
+ int tm_min;
+ int tm_hour;
+ int tm_mday;
+ int tm_mon;
+ int tm_year;
+ int tm_wday;
+ int tm_yday;
+ int tm_isdst;
+ };
+#endif
+
+#ifndef _WTIME_DEFINED
+#define _WTIME_DEFINED
+
+ _CRTIMP wchar_t *__cdecl _wasctime(const struct tm *_Tm);
+ _CRTIMP wchar_t *__cdecl _wctime32(const __time32_t *_Time);
+ size_t __cdecl wcsftime(wchar_t *_Buf,size_t _SizeInWords,const wchar_t *_Format,const struct tm *_Tm);
+ _CRTIMP size_t __cdecl _wcsftime_l(wchar_t *_Buf,size_t _SizeInWords,const wchar_t *_Format,const struct tm *_Tm,_locale_t _Locale);
+ _CRTIMP wchar_t *__cdecl _wstrdate(wchar_t *_Buffer);
+ _CRTIMP wchar_t *__cdecl _wstrtime(wchar_t *_Buffer);
+#if _INTEGRAL_MAX_BITS >= 64
+ _CRTIMP wchar_t *__cdecl _wctime64(const __time64_t *_Time);
+#endif
+
+#if !defined (RC_INVOKED) && !defined (_INC_WTIME_INL)
+#define _INC_WTIME_INL
+#ifdef _USE_32BIT_TIME_T
+__CRT_INLINE wchar_t *__cdecl _wctime(const time_t *_Time) { return _wctime32(_Time); }
+#else
+__CRT_INLINE wchar_t *__cdecl _wctime(const time_t *_Time) { return _wctime64(_Time); }
+#endif
+#endif
+#endif
+
+ typedef int mbstate_t;
+ typedef wchar_t _Wint_t;
+
+ wint_t __cdecl btowc(int);
+ size_t __cdecl mbrlen(const char *_Ch,size_t _SizeInBytes,mbstate_t *_State);
+ size_t __cdecl mbrtowc(wchar_t *_DstCh,const char *_SrcCh,size_t _SizeInBytes,mbstate_t *_State);
+ size_t __cdecl mbsrtowcs(wchar_t *_Dest,const char **_PSrc,size_t _Count,mbstate_t *_State);
+ size_t __cdecl wcrtomb(char *_Dest,wchar_t _Source,mbstate_t *_State);
+ size_t __cdecl wcsrtombs(char *_Dest,const wchar_t **_PSource,size_t _Count,mbstate_t *_State);
+ int __cdecl wctob(wint_t _WCh);
+
+#ifndef __NO_ISOCEXT /* these need static lib libmingwex.a */
+ wchar_t *__cdecl wmemset(wchar_t *s, wchar_t c, size_t n);
+ _CONST_RETURN wchar_t *__cdecl wmemchr(const wchar_t *s, wchar_t c, size_t n);
+ int wmemcmp(const wchar_t *s1, const wchar_t *s2,size_t n);
+ wchar_t *__cdecl wmemcpy(wchar_t *s1,const wchar_t *s2,size_t n);
+ wchar_t *__cdecl wmemmove(wchar_t *s1, const wchar_t *s2, size_t n);
+ long long __cdecl wcstoll(const wchar_t *nptr,wchar_t **endptr, int base);
+ unsigned long long __cdecl wcstoull(const wchar_t *nptr,wchar_t **endptr, int base);
+#endif /* __NO_ISOCEXT */
+
+ void *__cdecl memmove(void *_Dst,const void *_Src,size_t _MaxCount);
+ void *__cdecl memcpy(void *_Dst,const void *_Src,size_t _MaxCount);
+ __CRT_INLINE int __cdecl fwide(FILE *_F,int _M) { (void)_F; return (_M); }
+ __CRT_INLINE int __cdecl mbsinit(const mbstate_t *_P) { return (!_P || *_P==0); }
+ __CRT_INLINE _CONST_RETURN wchar_t *__cdecl wmemchr(const wchar_t *_S,wchar_t _C,size_t _N) { for (;0<_N;++_S,--_N) if (*_S==_C) return (_CONST_RETURN wchar_t *)(_S); return (0); }
+ __CRT_INLINE int __cdecl wmemcmp(const wchar_t *_S1,const wchar_t *_S2,size_t _N) { for (; 0 < _N; ++_S1,++_S2,--_N) if (*_S1!=*_S2) return (*_S1 < *_S2 ? -1 : +1); return (0); }
+ __CRT_INLINE wchar_t *__cdecl wmemcpy(wchar_t *_S1,const wchar_t *_S2,size_t _N) { return (wchar_t *)memcpy(_S1,_S2,_N*sizeof(wchar_t)); }
+ __CRT_INLINE wchar_t *__cdecl wmemmove(wchar_t *_S1,const wchar_t *_S2,size_t _N) { return (wchar_t *)memmove(_S1,_S2,_N*sizeof(wchar_t)); }
+ __CRT_INLINE wchar_t *__cdecl wmemset(wchar_t *_S,wchar_t _C,size_t _N) {
+ wchar_t *_Su = _S;
+ for (;0<_N;++_Su,--_N) {
+ *_Su = _C;
+ }
+ return (_S);
+ }
+#ifdef __cplusplus
+}
+#endif
+
+#pragma pack(pop)
+
+#include <sec_api/wchar_s.h>
+#endif
diff --git a/tcc/include/wctype.h b/tcc/include/wctype.h
new file mode 100644
index 0000000..a44cb38
--- /dev/null
+++ b/tcc/include/wctype.h
@@ -0,0 +1,172 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+#ifndef _INC_WCTYPE
+#define _INC_WCTYPE
+
+#ifndef _WIN32
+#error Only Win32 target is supported!
+#endif
+
+#include <_mingw.h>
+
+#pragma pack(push,_CRT_PACKING)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _CRTIMP
+#define _CRTIMP __declspec(dllimport)
+#endif
+
+#ifndef _WCHAR_T_DEFINED
+ typedef unsigned short wchar_t;
+#define _WCHAR_T_DEFINED
+#endif
+
+#ifndef _WCTYPE_T_DEFINED
+ typedef unsigned short wint_t;
+ typedef unsigned short wctype_t;
+#define _WCTYPE_T_DEFINED
+#endif
+
+#ifndef WEOF
+#define WEOF (wint_t)(0xFFFF)
+#endif
+
+#ifndef _CRT_CTYPEDATA_DEFINED
+#define _CRT_CTYPEDATA_DEFINED
+#ifndef _CTYPE_DISABLE_MACROS
+
+#ifndef __PCTYPE_FUNC
+#define __PCTYPE_FUNC __pctype_func()
+#ifdef _MSVCRT_
+#define __pctype_func() (_pctype)
+#else
+#define __pctype_func() (*_imp___pctype)
+#endif
+#endif
+
+#ifndef _pctype
+#ifdef _MSVCRT_
+ extern unsigned short *_pctype;
+#else
+ extern unsigned short **_imp___pctype;
+#define _pctype (*_imp___pctype)
+#endif
+#endif
+
+#endif
+#endif
+
+#ifndef _CRT_WCTYPEDATA_DEFINED
+#define _CRT_WCTYPEDATA_DEFINED
+#ifndef _CTYPE_DISABLE_MACROS
+#ifndef _wctype
+#ifdef _MSVCRT_
+ extern unsigned short *_wctype;
+#else
+ extern unsigned short **_imp___wctype;
+#define _wctype (*_imp___wctype)
+#endif
+#endif
+
+#ifndef _pwctype
+#ifdef _MSVCRT_
+ extern unsigned short *_pwctype;
+#else
+ extern unsigned short **_imp___pwctype;
+#define _pwctype (*_imp___pwctype)
+#define __pwctype_func() (*_imp___pwctype)
+#endif
+#endif
+#endif
+#endif
+
+#define _UPPER 0x1
+#define _LOWER 0x2
+#define _DIGIT 0x4
+#define _SPACE 0x8
+
+#define _PUNCT 0x10
+#define _CONTROL 0x20
+#define _BLANK 0x40
+#define _HEX 0x80
+
+#define _LEADBYTE 0x8000
+#define _ALPHA (0x0100|_UPPER|_LOWER)
+
+#ifndef _WCTYPE_DEFINED
+#define _WCTYPE_DEFINED
+
+ int __cdecl iswalpha(wint_t);
+ int __cdecl iswupper(wint_t);
+ int __cdecl iswlower(wint_t);
+ int __cdecl iswdigit(wint_t);
+ int __cdecl iswxdigit(wint_t);
+ int __cdecl iswspace(wint_t);
+ int __cdecl iswpunct(wint_t);
+ int __cdecl iswalnum(wint_t);
+ int __cdecl iswprint(wint_t);
+ int __cdecl iswgraph(wint_t);
+ int __cdecl iswcntrl(wint_t);
+ int __cdecl iswascii(wint_t);
+ int __cdecl isleadbyte(int);
+ wint_t __cdecl towupper(wint_t);
+ wint_t __cdecl towlower(wint_t);
+ int __cdecl iswctype(wint_t,wctype_t);
+ _CRTIMP int __cdecl __iswcsymf(wint_t);
+ _CRTIMP int __cdecl __iswcsym(wint_t);
+ int __cdecl is_wctype(wint_t,wctype_t);
+#if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || !defined (NO_OLDNAMES)
+int __cdecl isblank(int _C);
+#endif
+#endif
+
+#ifndef _WCTYPE_INLINE_DEFINED
+#define _WCTYPE_INLINE_DEFINED
+#ifndef __cplusplus
+#define iswalpha(_c) (iswctype(_c,_ALPHA))
+#define iswupper(_c) (iswctype(_c,_UPPER))
+#define iswlower(_c) (iswctype(_c,_LOWER))
+#define iswdigit(_c) (iswctype(_c,_DIGIT))
+#define iswxdigit(_c) (iswctype(_c,_HEX))
+#define iswspace(_c) (iswctype(_c,_SPACE))
+#define iswpunct(_c) (iswctype(_c,_PUNCT))
+#define iswalnum(_c) (iswctype(_c,_ALPHA|_DIGIT))
+#define iswprint(_c) (iswctype(_c,_BLANK|_PUNCT|_ALPHA|_DIGIT))
+#define iswgraph(_c) (iswctype(_c,_PUNCT|_ALPHA|_DIGIT))
+#define iswcntrl(_c) (iswctype(_c,_CONTROL))
+#define iswascii(_c) ((unsigned)(_c) < 0x80)
+#define isleadbyte(c) (__pctype_func()[(unsigned char)(c)] & _LEADBYTE)
+#else
+ __CRT_INLINE int __cdecl iswalpha(wint_t _C) {return (iswctype(_C,_ALPHA)); }
+ __CRT_INLINE int __cdecl iswupper(wint_t _C) {return (iswctype(_C,_UPPER)); }
+ __CRT_INLINE int __cdecl iswlower(wint_t _C) {return (iswctype(_C,_LOWER)); }
+ __CRT_INLINE int __cdecl iswdigit(wint_t _C) {return (iswctype(_C,_DIGIT)); }
+ __CRT_INLINE int __cdecl iswxdigit(wint_t _C) {return (iswctype(_C,_HEX)); }
+ __CRT_INLINE int __cdecl iswspace(wint_t _C) {return (iswctype(_C,_SPACE)); }
+ __CRT_INLINE int __cdecl iswpunct(wint_t _C) {return (iswctype(_C,_PUNCT)); }
+ __CRT_INLINE int __cdecl iswalnum(wint_t _C) {return (iswctype(_C,_ALPHA|_DIGIT)); }
+ __CRT_INLINE int __cdecl iswprint(wint_t _C) {return (iswctype(_C,_BLANK|_PUNCT|_ALPHA|_DIGIT)); }
+ __CRT_INLINE int __cdecl iswgraph(wint_t _C) {return (iswctype(_C,_PUNCT|_ALPHA|_DIGIT)); }
+ __CRT_INLINE int __cdecl iswcntrl(wint_t _C) {return (iswctype(_C,_CONTROL)); }
+ __CRT_INLINE int __cdecl iswascii(wint_t _C) {return ((unsigned)(_C) < 0x80); }
+ __CRT_INLINE int __cdecl isleadbyte(int _C) {return (__pctype_func()[(unsigned char)(_C)] & _LEADBYTE); }
+#endif
+#endif
+
+ typedef wchar_t wctrans_t;
+ wint_t __cdecl towctrans(wint_t,wctrans_t);
+ wctrans_t __cdecl wctrans(const char *);
+ wctype_t __cdecl wctype(const char *);
+
+#ifdef __cplusplus
+}
+#endif
+
+#pragma pack(pop)
+#endif
diff --git a/tcc/include/winapi/GL/gl.h b/tcc/include/winapi/GL/gl.h
new file mode 100644
index 0000000..f35d26c
--- /dev/null
+++ b/tcc/include/winapi/GL/gl.h
@@ -0,0 +1,1470 @@
+/*
+ * Mesa 3-D graphics library
+ * Version: 4.0
+ *
+ * Copyright (C) 1999-2001 Brian Paul All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+ * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+
+/************************************************************************
+ * 2002-Apr-22, José Fonseca:
+ * Removed non Win32 system-specific stuff
+ *
+ * 2002-Apr-17, Marcus Geelnard:
+ * For win32, OpenGL 1.2 & 1.3 definitions are not made in this file
+ * anymore, since under Windows those are regarded as extensions, and
+ * are better defined in glext.h (especially the function prototypes may
+ * conflict with extension function pointers). A few "cosmetical"
+ * changes were also made to this file.
+ *
+ * 2002-Apr-15, Marcus Geelnard:
+ * Modified this file to better fit a wider range of compilers, removed
+ * Mesa specific stuff, and removed extension definitions (this file now
+ * relies on GL/glext.h). Hopefully this file should now function as a
+ * generic OpenGL gl.h include file for most compilers and environments.
+ * Changed GLAPIENTRY to APIENTRY (to be consistent with GL/glext.h).
+ ************************************************************************/
+
+
+#ifndef __gl_h_
+#define __gl_h_
+
+
+
+/************************************************************************
+ * Begin system-specific stuff.
+ */
+/* __WIN32__ */
+#if !defined(__WIN32__) && (defined(_WIN32) || defined(WIN32) || defined(__CYGWIN__))
+# define __WIN32__
+#endif
+
+/* GLAPI, part 1 (use WINGDIAPI, if defined) */
+#if defined(__WIN32__) && defined(WINGDIAPI)
+# define GLAPI WINGDIAPI
+#endif
+
+/* GLAPI, part 2 */
+#if !defined(GLAPI)
+# if defined(_MSC_VER) /* Microsoft Visual C++ */
+# define GLAPI __declspec(dllimport)
+# elif defined(__LCC__) && defined(__WIN32__) /* LCC-Win32 */
+# define GLAPI __stdcall
+# else /* Others (e.g. MinGW, Cygwin, non-win32) */
+# define GLAPI extern
+# endif
+#endif
+
+/* APIENTRY */
+#if !defined(APIENTRY)
+# if defined(__WIN32__)
+# define APIENTRY __stdcall
+# else
+# define APIENTRY
+# endif
+#endif
+/*
+ * End system-specific stuff.
+ ************************************************************************/
+
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+
+#define GL_VERSION_1_1 1
+
+#if !defined(__WIN32__)
+#define GL_VERSION_1_2 1
+#define GL_VERSION_1_3 1
+#define GL_ARB_imaging 1
+#endif
+
+
+/*
+ *
+ * Datatypes
+ *
+ */
+#ifdef CENTERLINE_CLPP
+#define signed
+#endif
+typedef unsigned int GLenum;
+typedef unsigned char GLboolean;
+typedef unsigned int GLbitfield;
+typedef void GLvoid;
+typedef signed char GLbyte; /* 1-byte signed */
+typedef short GLshort; /* 2-byte signed */
+typedef int GLint; /* 4-byte signed */
+typedef unsigned char GLubyte; /* 1-byte unsigned */
+typedef unsigned short GLushort; /* 2-byte unsigned */
+typedef unsigned int GLuint; /* 4-byte unsigned */
+typedef int GLsizei; /* 4-byte signed */
+typedef float GLfloat; /* single precision float */
+typedef float GLclampf; /* single precision float in [0,1] */
+typedef double GLdouble; /* double precision float */
+typedef double GLclampd; /* double precision float in [0,1] */
+
+
+
+/************************************************************************
+ *
+ * Constants
+ *
+ ************************************************************************/
+
+/* Boolean values */
+#define GL_FALSE 0x0
+#define GL_TRUE 0x1
+
+/* Data types */
+#define GL_BYTE 0x1400
+#define GL_UNSIGNED_BYTE 0x1401
+#define GL_SHORT 0x1402
+#define GL_UNSIGNED_SHORT 0x1403
+#define GL_INT 0x1404
+#define GL_UNSIGNED_INT 0x1405
+#define GL_FLOAT 0x1406
+#define GL_DOUBLE 0x140A
+#define GL_2_BYTES 0x1407
+#define GL_3_BYTES 0x1408
+#define GL_4_BYTES 0x1409
+
+/* Primitives */
+#define GL_POINTS 0x0000
+#define GL_LINES 0x0001
+#define GL_LINE_LOOP 0x0002
+#define GL_LINE_STRIP 0x0003
+#define GL_TRIANGLES 0x0004
+#define GL_TRIANGLE_STRIP 0x0005
+#define GL_TRIANGLE_FAN 0x0006
+#define GL_QUADS 0x0007
+#define GL_QUAD_STRIP 0x0008
+#define GL_POLYGON 0x0009
+
+/* Vertex Arrays */
+#define GL_VERTEX_ARRAY 0x8074
+#define GL_NORMAL_ARRAY 0x8075
+#define GL_COLOR_ARRAY 0x8076
+#define GL_INDEX_ARRAY 0x8077
+#define GL_TEXTURE_COORD_ARRAY 0x8078
+#define GL_EDGE_FLAG_ARRAY 0x8079
+#define GL_VERTEX_ARRAY_SIZE 0x807A
+#define GL_VERTEX_ARRAY_TYPE 0x807B
+#define GL_VERTEX_ARRAY_STRIDE 0x807C
+#define GL_NORMAL_ARRAY_TYPE 0x807E
+#define GL_NORMAL_ARRAY_STRIDE 0x807F
+#define GL_COLOR_ARRAY_SIZE 0x8081
+#define GL_COLOR_ARRAY_TYPE 0x8082
+#define GL_COLOR_ARRAY_STRIDE 0x8083
+#define GL_INDEX_ARRAY_TYPE 0x8085
+#define GL_INDEX_ARRAY_STRIDE 0x8086
+#define GL_TEXTURE_COORD_ARRAY_SIZE 0x8088
+#define GL_TEXTURE_COORD_ARRAY_TYPE 0x8089
+#define GL_TEXTURE_COORD_ARRAY_STRIDE 0x808A
+#define GL_EDGE_FLAG_ARRAY_STRIDE 0x808C
+#define GL_VERTEX_ARRAY_POINTER 0x808E
+#define GL_NORMAL_ARRAY_POINTER 0x808F
+#define GL_COLOR_ARRAY_POINTER 0x8090
+#define GL_INDEX_ARRAY_POINTER 0x8091
+#define GL_TEXTURE_COORD_ARRAY_POINTER 0x8092
+#define GL_EDGE_FLAG_ARRAY_POINTER 0x8093
+#define GL_V2F 0x2A20
+#define GL_V3F 0x2A21
+#define GL_C4UB_V2F 0x2A22
+#define GL_C4UB_V3F 0x2A23
+#define GL_C3F_V3F 0x2A24
+#define GL_N3F_V3F 0x2A25
+#define GL_C4F_N3F_V3F 0x2A26
+#define GL_T2F_V3F 0x2A27
+#define GL_T4F_V4F 0x2A28
+#define GL_T2F_C4UB_V3F 0x2A29
+#define GL_T2F_C3F_V3F 0x2A2A
+#define GL_T2F_N3F_V3F 0x2A2B
+#define GL_T2F_C4F_N3F_V3F 0x2A2C
+#define GL_T4F_C4F_N3F_V4F 0x2A2D
+
+/* Matrix Mode */
+#define GL_MATRIX_MODE 0x0BA0
+#define GL_MODELVIEW 0x1700
+#define GL_PROJECTION 0x1701
+#define GL_TEXTURE 0x1702
+
+/* Points */
+#define GL_POINT_SMOOTH 0x0B10
+#define GL_POINT_SIZE 0x0B11
+#define GL_POINT_SIZE_GRANULARITY 0x0B13
+#define GL_POINT_SIZE_RANGE 0x0B12
+
+/* Lines */
+#define GL_LINE_SMOOTH 0x0B20
+#define GL_LINE_STIPPLE 0x0B24
+#define GL_LINE_STIPPLE_PATTERN 0x0B25
+#define GL_LINE_STIPPLE_REPEAT 0x0B26
+#define GL_LINE_WIDTH 0x0B21
+#define GL_LINE_WIDTH_GRANULARITY 0x0B23
+#define GL_LINE_WIDTH_RANGE 0x0B22
+
+/* Polygons */
+#define GL_POINT 0x1B00
+#define GL_LINE 0x1B01
+#define GL_FILL 0x1B02
+#define GL_CW 0x0900
+#define GL_CCW 0x0901
+#define GL_FRONT 0x0404
+#define GL_BACK 0x0405
+#define GL_POLYGON_MODE 0x0B40
+#define GL_POLYGON_SMOOTH 0x0B41
+#define GL_POLYGON_STIPPLE 0x0B42
+#define GL_EDGE_FLAG 0x0B43
+#define GL_CULL_FACE 0x0B44
+#define GL_CULL_FACE_MODE 0x0B45
+#define GL_FRONT_FACE 0x0B46
+#define GL_POLYGON_OFFSET_FACTOR 0x8038
+#define GL_POLYGON_OFFSET_UNITS 0x2A00
+#define GL_POLYGON_OFFSET_POINT 0x2A01
+#define GL_POLYGON_OFFSET_LINE 0x2A02
+#define GL_POLYGON_OFFSET_FILL 0x8037
+
+/* Display Lists */
+#define GL_COMPILE 0x1300
+#define GL_COMPILE_AND_EXECUTE 0x1301
+#define GL_LIST_BASE 0x0B32
+#define GL_LIST_INDEX 0x0B33
+#define GL_LIST_MODE 0x0B30
+
+/* Depth buffer */
+#define GL_NEVER 0x0200
+#define GL_LESS 0x0201
+#define GL_EQUAL 0x0202
+#define GL_LEQUAL 0x0203
+#define GL_GREATER 0x0204
+#define GL_NOTEQUAL 0x0205
+#define GL_GEQUAL 0x0206
+#define GL_ALWAYS 0x0207
+#define GL_DEPTH_TEST 0x0B71
+#define GL_DEPTH_BITS 0x0D56
+#define GL_DEPTH_CLEAR_VALUE 0x0B73
+#define GL_DEPTH_FUNC 0x0B74
+#define GL_DEPTH_RANGE 0x0B70
+#define GL_DEPTH_WRITEMASK 0x0B72
+#define GL_DEPTH_COMPONENT 0x1902
+
+/* Lighting */
+#define GL_LIGHTING 0x0B50
+#define GL_LIGHT0 0x4000
+#define GL_LIGHT1 0x4001
+#define GL_LIGHT2 0x4002
+#define GL_LIGHT3 0x4003
+#define GL_LIGHT4 0x4004
+#define GL_LIGHT5 0x4005
+#define GL_LIGHT6 0x4006
+#define GL_LIGHT7 0x4007
+#define GL_SPOT_EXPONENT 0x1205
+#define GL_SPOT_CUTOFF 0x1206
+#define GL_CONSTANT_ATTENUATION 0x1207
+#define GL_LINEAR_ATTENUATION 0x1208
+#define GL_QUADRATIC_ATTENUATION 0x1209
+#define GL_AMBIENT 0x1200
+#define GL_DIFFUSE 0x1201
+#define GL_SPECULAR 0x1202
+#define GL_SHININESS 0x1601
+#define GL_EMISSION 0x1600
+#define GL_POSITION 0x1203
+#define GL_SPOT_DIRECTION 0x1204
+#define GL_AMBIENT_AND_DIFFUSE 0x1602
+#define GL_COLOR_INDEXES 0x1603
+#define GL_LIGHT_MODEL_TWO_SIDE 0x0B52
+#define GL_LIGHT_MODEL_LOCAL_VIEWER 0x0B51
+#define GL_LIGHT_MODEL_AMBIENT 0x0B53
+#define GL_FRONT_AND_BACK 0x0408
+#define GL_SHADE_MODEL 0x0B54
+#define GL_FLAT 0x1D00
+#define GL_SMOOTH 0x1D01
+#define GL_COLOR_MATERIAL 0x0B57
+#define GL_COLOR_MATERIAL_FACE 0x0B55
+#define GL_COLOR_MATERIAL_PARAMETER 0x0B56
+#define GL_NORMALIZE 0x0BA1
+
+/* User clipping planes */
+#define GL_CLIP_PLANE0 0x3000
+#define GL_CLIP_PLANE1 0x3001
+#define GL_CLIP_PLANE2 0x3002
+#define GL_CLIP_PLANE3 0x3003
+#define GL_CLIP_PLANE4 0x3004
+#define GL_CLIP_PLANE5 0x3005
+
+/* Accumulation buffer */
+#define GL_ACCUM_RED_BITS 0x0D58
+#define GL_ACCUM_GREEN_BITS 0x0D59
+#define GL_ACCUM_BLUE_BITS 0x0D5A
+#define GL_ACCUM_ALPHA_BITS 0x0D5B
+#define GL_ACCUM_CLEAR_VALUE 0x0B80
+#define GL_ACCUM 0x0100
+#define GL_ADD 0x0104
+#define GL_LOAD 0x0101
+#define GL_MULT 0x0103
+#define GL_RETURN 0x0102
+
+/* Alpha testing */
+#define GL_ALPHA_TEST 0x0BC0
+#define GL_ALPHA_TEST_REF 0x0BC2
+#define GL_ALPHA_TEST_FUNC 0x0BC1
+
+/* Blending */
+#define GL_BLEND 0x0BE2
+#define GL_BLEND_SRC 0x0BE1
+#define GL_BLEND_DST 0x0BE0
+#define GL_ZERO 0x0
+#define GL_ONE 0x1
+#define GL_SRC_COLOR 0x0300
+#define GL_ONE_MINUS_SRC_COLOR 0x0301
+#define GL_SRC_ALPHA 0x0302
+#define GL_ONE_MINUS_SRC_ALPHA 0x0303
+#define GL_DST_ALPHA 0x0304
+#define GL_ONE_MINUS_DST_ALPHA 0x0305
+#define GL_DST_COLOR 0x0306
+#define GL_ONE_MINUS_DST_COLOR 0x0307
+#define GL_SRC_ALPHA_SATURATE 0x0308
+#define GL_CONSTANT_COLOR 0x8001
+#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002
+#define GL_CONSTANT_ALPHA 0x8003
+#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004
+
+/* Render Mode */
+#define GL_FEEDBACK 0x1C01
+#define GL_RENDER 0x1C00
+#define GL_SELECT 0x1C02
+
+/* Feedback */
+#define GL_2D 0x0600
+#define GL_3D 0x0601
+#define GL_3D_COLOR 0x0602
+#define GL_3D_COLOR_TEXTURE 0x0603
+#define GL_4D_COLOR_TEXTURE 0x0604
+#define GL_POINT_TOKEN 0x0701
+#define GL_LINE_TOKEN 0x0702
+#define GL_LINE_RESET_TOKEN 0x0707
+#define GL_POLYGON_TOKEN 0x0703
+#define GL_BITMAP_TOKEN 0x0704
+#define GL_DRAW_PIXEL_TOKEN 0x0705
+#define GL_COPY_PIXEL_TOKEN 0x0706
+#define GL_PASS_THROUGH_TOKEN 0x0700
+#define GL_FEEDBACK_BUFFER_POINTER 0x0DF0
+#define GL_FEEDBACK_BUFFER_SIZE 0x0DF1
+#define GL_FEEDBACK_BUFFER_TYPE 0x0DF2
+
+/* Selection */
+#define GL_SELECTION_BUFFER_POINTER 0x0DF3
+#define GL_SELECTION_BUFFER_SIZE 0x0DF4
+
+/* Fog */
+#define GL_FOG 0x0B60
+#define GL_FOG_MODE 0x0B65
+#define GL_FOG_DENSITY 0x0B62
+#define GL_FOG_COLOR 0x0B66
+#define GL_FOG_INDEX 0x0B61
+#define GL_FOG_START 0x0B63
+#define GL_FOG_END 0x0B64
+#define GL_LINEAR 0x2601
+#define GL_EXP 0x0800
+#define GL_EXP2 0x0801
+
+/* Logic Ops */
+#define GL_LOGIC_OP 0x0BF1
+#define GL_INDEX_LOGIC_OP 0x0BF1
+#define GL_COLOR_LOGIC_OP 0x0BF2
+#define GL_LOGIC_OP_MODE 0x0BF0
+#define GL_CLEAR 0x1500
+#define GL_SET 0x150F
+#define GL_COPY 0x1503
+#define GL_COPY_INVERTED 0x150C
+#define GL_NOOP 0x1505
+#define GL_INVERT 0x150A
+#define GL_AND 0x1501
+#define GL_NAND 0x150E
+#define GL_OR 0x1507
+#define GL_NOR 0x1508
+#define GL_XOR 0x1506
+#define GL_EQUIV 0x1509
+#define GL_AND_REVERSE 0x1502
+#define GL_AND_INVERTED 0x1504
+#define GL_OR_REVERSE 0x150B
+#define GL_OR_INVERTED 0x150D
+
+/* Stencil */
+#define GL_STENCIL_TEST 0x0B90
+#define GL_STENCIL_WRITEMASK 0x0B98
+#define GL_STENCIL_BITS 0x0D57
+#define GL_STENCIL_FUNC 0x0B92
+#define GL_STENCIL_VALUE_MASK 0x0B93
+#define GL_STENCIL_REF 0x0B97
+#define GL_STENCIL_FAIL 0x0B94
+#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96
+#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95
+#define GL_STENCIL_CLEAR_VALUE 0x0B91
+#define GL_STENCIL_INDEX 0x1901
+#define GL_KEEP 0x1E00
+#define GL_REPLACE 0x1E01
+#define GL_INCR 0x1E02
+#define GL_DECR 0x1E03
+
+/* Buffers, Pixel Drawing/Reading */
+#define GL_NONE 0x0
+#define GL_LEFT 0x0406
+#define GL_RIGHT 0x0407
+/*GL_FRONT 0x0404 */
+/*GL_BACK 0x0405 */
+/*GL_FRONT_AND_BACK 0x0408 */
+#define GL_FRONT_LEFT 0x0400
+#define GL_FRONT_RIGHT 0x0401
+#define GL_BACK_LEFT 0x0402
+#define GL_BACK_RIGHT 0x0403
+#define GL_AUX0 0x0409
+#define GL_AUX1 0x040A
+#define GL_AUX2 0x040B
+#define GL_AUX3 0x040C
+#define GL_COLOR_INDEX 0x1900
+#define GL_RED 0x1903
+#define GL_GREEN 0x1904
+#define GL_BLUE 0x1905
+#define GL_ALPHA 0x1906
+#define GL_LUMINANCE 0x1909
+#define GL_LUMINANCE_ALPHA 0x190A
+#define GL_ALPHA_BITS 0x0D55
+#define GL_RED_BITS 0x0D52
+#define GL_GREEN_BITS 0x0D53
+#define GL_BLUE_BITS 0x0D54
+#define GL_INDEX_BITS 0x0D51
+#define GL_SUBPIXEL_BITS 0x0D50
+#define GL_AUX_BUFFERS 0x0C00
+#define GL_READ_BUFFER 0x0C02
+#define GL_DRAW_BUFFER 0x0C01
+#define GL_DOUBLEBUFFER 0x0C32
+#define GL_STEREO 0x0C33
+#define GL_BITMAP 0x1A00
+#define GL_COLOR 0x1800
+#define GL_DEPTH 0x1801
+#define GL_STENCIL 0x1802
+#define GL_DITHER 0x0BD0
+#define GL_RGB 0x1907
+#define GL_RGBA 0x1908
+
+/* Implementation limits */
+#define GL_MAX_LIST_NESTING 0x0B31
+#define GL_MAX_ATTRIB_STACK_DEPTH 0x0D35
+#define GL_MAX_MODELVIEW_STACK_DEPTH 0x0D36
+#define GL_MAX_NAME_STACK_DEPTH 0x0D37
+#define GL_MAX_PROJECTION_STACK_DEPTH 0x0D38
+#define GL_MAX_TEXTURE_STACK_DEPTH 0x0D39
+#define GL_MAX_EVAL_ORDER 0x0D30
+#define GL_MAX_LIGHTS 0x0D31
+#define GL_MAX_CLIP_PLANES 0x0D32
+#define GL_MAX_TEXTURE_SIZE 0x0D33
+#define GL_MAX_PIXEL_MAP_TABLE 0x0D34
+#define GL_MAX_VIEWPORT_DIMS 0x0D3A
+#define GL_MAX_CLIENT_ATTRIB_STACK_DEPTH 0x0D3B
+
+/* Gets */
+#define GL_ATTRIB_STACK_DEPTH 0x0BB0
+#define GL_CLIENT_ATTRIB_STACK_DEPTH 0x0BB1
+#define GL_COLOR_CLEAR_VALUE 0x0C22
+#define GL_COLOR_WRITEMASK 0x0C23
+#define GL_CURRENT_INDEX 0x0B01
+#define GL_CURRENT_COLOR 0x0B00
+#define GL_CURRENT_NORMAL 0x0B02
+#define GL_CURRENT_RASTER_COLOR 0x0B04
+#define GL_CURRENT_RASTER_DISTANCE 0x0B09
+#define GL_CURRENT_RASTER_INDEX 0x0B05
+#define GL_CURRENT_RASTER_POSITION 0x0B07
+#define GL_CURRENT_RASTER_TEXTURE_COORDS 0x0B06
+#define GL_CURRENT_RASTER_POSITION_VALID 0x0B08
+#define GL_CURRENT_TEXTURE_COORDS 0x0B03
+#define GL_INDEX_CLEAR_VALUE 0x0C20
+#define GL_INDEX_MODE 0x0C30
+#define GL_INDEX_WRITEMASK 0x0C21
+#define GL_MODELVIEW_MATRIX 0x0BA6
+#define GL_MODELVIEW_STACK_DEPTH 0x0BA3
+#define GL_NAME_STACK_DEPTH 0x0D70
+#define GL_PROJECTION_MATRIX 0x0BA7
+#define GL_PROJECTION_STACK_DEPTH 0x0BA4
+#define GL_RENDER_MODE 0x0C40
+#define GL_RGBA_MODE 0x0C31
+#define GL_TEXTURE_MATRIX 0x0BA8
+#define GL_TEXTURE_STACK_DEPTH 0x0BA5
+#define GL_VIEWPORT 0x0BA2
+
+/* Evaluators */
+#define GL_AUTO_NORMAL 0x0D80
+#define GL_MAP1_COLOR_4 0x0D90
+#define GL_MAP1_GRID_DOMAIN 0x0DD0
+#define GL_MAP1_GRID_SEGMENTS 0x0DD1
+#define GL_MAP1_INDEX 0x0D91
+#define GL_MAP1_NORMAL 0x0D92
+#define GL_MAP1_TEXTURE_COORD_1 0x0D93
+#define GL_MAP1_TEXTURE_COORD_2 0x0D94
+#define GL_MAP1_TEXTURE_COORD_3 0x0D95
+#define GL_MAP1_TEXTURE_COORD_4 0x0D96
+#define GL_MAP1_VERTEX_3 0x0D97
+#define GL_MAP1_VERTEX_4 0x0D98
+#define GL_MAP2_COLOR_4 0x0DB0
+#define GL_MAP2_GRID_DOMAIN 0x0DD2
+#define GL_MAP2_GRID_SEGMENTS 0x0DD3
+#define GL_MAP2_INDEX 0x0DB1
+#define GL_MAP2_NORMAL 0x0DB2
+#define GL_MAP2_TEXTURE_COORD_1 0x0DB3
+#define GL_MAP2_TEXTURE_COORD_2 0x0DB4
+#define GL_MAP2_TEXTURE_COORD_3 0x0DB5
+#define GL_MAP2_TEXTURE_COORD_4 0x0DB6
+#define GL_MAP2_VERTEX_3 0x0DB7
+#define GL_MAP2_VERTEX_4 0x0DB8
+#define GL_COEFF 0x0A00
+#define GL_DOMAIN 0x0A02
+#define GL_ORDER 0x0A01
+
+/* Hints */
+#define GL_FOG_HINT 0x0C54
+#define GL_LINE_SMOOTH_HINT 0x0C52
+#define GL_PERSPECTIVE_CORRECTION_HINT 0x0C50
+#define GL_POINT_SMOOTH_HINT 0x0C51
+#define GL_POLYGON_SMOOTH_HINT 0x0C53
+#define GL_DONT_CARE 0x1100
+#define GL_FASTEST 0x1101
+#define GL_NICEST 0x1102
+
+/* Scissor box */
+#define GL_SCISSOR_TEST 0x0C11
+#define GL_SCISSOR_BOX 0x0C10
+
+/* Pixel Mode / Transfer */
+#define GL_MAP_COLOR 0x0D10
+#define GL_MAP_STENCIL 0x0D11
+#define GL_INDEX_SHIFT 0x0D12
+#define GL_INDEX_OFFSET 0x0D13
+#define GL_RED_SCALE 0x0D14
+#define GL_RED_BIAS 0x0D15
+#define GL_GREEN_SCALE 0x0D18
+#define GL_GREEN_BIAS 0x0D19
+#define GL_BLUE_SCALE 0x0D1A
+#define GL_BLUE_BIAS 0x0D1B
+#define GL_ALPHA_SCALE 0x0D1C
+#define GL_ALPHA_BIAS 0x0D1D
+#define GL_DEPTH_SCALE 0x0D1E
+#define GL_DEPTH_BIAS 0x0D1F
+#define GL_PIXEL_MAP_S_TO_S_SIZE 0x0CB1
+#define GL_PIXEL_MAP_I_TO_I_SIZE 0x0CB0
+#define GL_PIXEL_MAP_I_TO_R_SIZE 0x0CB2
+#define GL_PIXEL_MAP_I_TO_G_SIZE 0x0CB3
+#define GL_PIXEL_MAP_I_TO_B_SIZE 0x0CB4
+#define GL_PIXEL_MAP_I_TO_A_SIZE 0x0CB5
+#define GL_PIXEL_MAP_R_TO_R_SIZE 0x0CB6
+#define GL_PIXEL_MAP_G_TO_G_SIZE 0x0CB7
+#define GL_PIXEL_MAP_B_TO_B_SIZE 0x0CB8
+#define GL_PIXEL_MAP_A_TO_A_SIZE 0x0CB9
+#define GL_PIXEL_MAP_S_TO_S 0x0C71
+#define GL_PIXEL_MAP_I_TO_I 0x0C70
+#define GL_PIXEL_MAP_I_TO_R 0x0C72
+#define GL_PIXEL_MAP_I_TO_G 0x0C73
+#define GL_PIXEL_MAP_I_TO_B 0x0C74
+#define GL_PIXEL_MAP_I_TO_A 0x0C75
+#define GL_PIXEL_MAP_R_TO_R 0x0C76
+#define GL_PIXEL_MAP_G_TO_G 0x0C77
+#define GL_PIXEL_MAP_B_TO_B 0x0C78
+#define GL_PIXEL_MAP_A_TO_A 0x0C79
+#define GL_PACK_ALIGNMENT 0x0D05
+#define GL_PACK_LSB_FIRST 0x0D01
+#define GL_PACK_ROW_LENGTH 0x0D02
+#define GL_PACK_SKIP_PIXELS 0x0D04
+#define GL_PACK_SKIP_ROWS 0x0D03
+#define GL_PACK_SWAP_BYTES 0x0D00
+#define GL_UNPACK_ALIGNMENT 0x0CF5
+#define GL_UNPACK_LSB_FIRST 0x0CF1
+#define GL_UNPACK_ROW_LENGTH 0x0CF2
+#define GL_UNPACK_SKIP_PIXELS 0x0CF4
+#define GL_UNPACK_SKIP_ROWS 0x0CF3
+#define GL_UNPACK_SWAP_BYTES 0x0CF0
+#define GL_ZOOM_X 0x0D16
+#define GL_ZOOM_Y 0x0D17
+
+/* Texture mapping */
+#define GL_TEXTURE_ENV 0x2300
+#define GL_TEXTURE_ENV_MODE 0x2200
+#define GL_TEXTURE_1D 0x0DE0
+#define GL_TEXTURE_2D 0x0DE1
+#define GL_TEXTURE_WRAP_S 0x2802
+#define GL_TEXTURE_WRAP_T 0x2803
+#define GL_TEXTURE_MAG_FILTER 0x2800
+#define GL_TEXTURE_MIN_FILTER 0x2801
+#define GL_TEXTURE_ENV_COLOR 0x2201
+#define GL_TEXTURE_GEN_S 0x0C60
+#define GL_TEXTURE_GEN_T 0x0C61
+#define GL_TEXTURE_GEN_MODE 0x2500
+#define GL_TEXTURE_BORDER_COLOR 0x1004
+#define GL_TEXTURE_WIDTH 0x1000
+#define GL_TEXTURE_HEIGHT 0x1001
+#define GL_TEXTURE_BORDER 0x1005
+#define GL_TEXTURE_COMPONENTS 0x1003
+#define GL_TEXTURE_RED_SIZE 0x805C
+#define GL_TEXTURE_GREEN_SIZE 0x805D
+#define GL_TEXTURE_BLUE_SIZE 0x805E
+#define GL_TEXTURE_ALPHA_SIZE 0x805F
+#define GL_TEXTURE_LUMINANCE_SIZE 0x8060
+#define GL_TEXTURE_INTENSITY_SIZE 0x8061
+#define GL_NEAREST_MIPMAP_NEAREST 0x2700
+#define GL_NEAREST_MIPMAP_LINEAR 0x2702
+#define GL_LINEAR_MIPMAP_NEAREST 0x2701
+#define GL_LINEAR_MIPMAP_LINEAR 0x2703
+#define GL_OBJECT_LINEAR 0x2401
+#define GL_OBJECT_PLANE 0x2501
+#define GL_EYE_LINEAR 0x2400
+#define GL_EYE_PLANE 0x2502
+#define GL_SPHERE_MAP 0x2402
+#define GL_DECAL 0x2101
+#define GL_MODULATE 0x2100
+#define GL_NEAREST 0x2600
+#define GL_REPEAT 0x2901
+#define GL_CLAMP 0x2900
+#define GL_S 0x2000
+#define GL_T 0x2001
+#define GL_R 0x2002
+#define GL_Q 0x2003
+#define GL_TEXTURE_GEN_R 0x0C62
+#define GL_TEXTURE_GEN_Q 0x0C63
+
+/* Utility */
+#define GL_VENDOR 0x1F00
+#define GL_RENDERER 0x1F01
+#define GL_VERSION 0x1F02
+#define GL_EXTENSIONS 0x1F03
+
+/* Errors */
+#define GL_NO_ERROR 0x0
+#define GL_INVALID_VALUE 0x0501
+#define GL_INVALID_ENUM 0x0500
+#define GL_INVALID_OPERATION 0x0502
+#define GL_STACK_OVERFLOW 0x0503
+#define GL_STACK_UNDERFLOW 0x0504
+#define GL_OUT_OF_MEMORY 0x0505
+
+/* glPush/PopAttrib bits */
+#define GL_CURRENT_BIT 0x00000001
+#define GL_POINT_BIT 0x00000002
+#define GL_LINE_BIT 0x00000004
+#define GL_POLYGON_BIT 0x00000008
+#define GL_POLYGON_STIPPLE_BIT 0x00000010
+#define GL_PIXEL_MODE_BIT 0x00000020
+#define GL_LIGHTING_BIT 0x00000040
+#define GL_FOG_BIT 0x00000080
+#define GL_DEPTH_BUFFER_BIT 0x00000100
+#define GL_ACCUM_BUFFER_BIT 0x00000200
+#define GL_STENCIL_BUFFER_BIT 0x00000400
+#define GL_VIEWPORT_BIT 0x00000800
+#define GL_TRANSFORM_BIT 0x00001000
+#define GL_ENABLE_BIT 0x00002000
+#define GL_COLOR_BUFFER_BIT 0x00004000
+#define GL_HINT_BIT 0x00008000
+#define GL_EVAL_BIT 0x00010000
+#define GL_LIST_BIT 0x00020000
+#define GL_TEXTURE_BIT 0x00040000
+#define GL_SCISSOR_BIT 0x00080000
+#define GL_ALL_ATTRIB_BITS 0x000FFFFF
+
+
+/* OpenGL 1.1 */
+#define GL_PROXY_TEXTURE_1D 0x8063
+#define GL_PROXY_TEXTURE_2D 0x8064
+#define GL_TEXTURE_PRIORITY 0x8066
+#define GL_TEXTURE_RESIDENT 0x8067
+#define GL_TEXTURE_BINDING_1D 0x8068
+#define GL_TEXTURE_BINDING_2D 0x8069
+#define GL_TEXTURE_INTERNAL_FORMAT 0x1003
+#define GL_ALPHA4 0x803B
+#define GL_ALPHA8 0x803C
+#define GL_ALPHA12 0x803D
+#define GL_ALPHA16 0x803E
+#define GL_LUMINANCE4 0x803F
+#define GL_LUMINANCE8 0x8040
+#define GL_LUMINANCE12 0x8041
+#define GL_LUMINANCE16 0x8042
+#define GL_LUMINANCE4_ALPHA4 0x8043
+#define GL_LUMINANCE6_ALPHA2 0x8044
+#define GL_LUMINANCE8_ALPHA8 0x8045
+#define GL_LUMINANCE12_ALPHA4 0x8046
+#define GL_LUMINANCE12_ALPHA12 0x8047
+#define GL_LUMINANCE16_ALPHA16 0x8048
+#define GL_INTENSITY 0x8049
+#define GL_INTENSITY4 0x804A
+#define GL_INTENSITY8 0x804B
+#define GL_INTENSITY12 0x804C
+#define GL_INTENSITY16 0x804D
+#define GL_R3_G3_B2 0x2A10
+#define GL_RGB4 0x804F
+#define GL_RGB5 0x8050
+#define GL_RGB8 0x8051
+#define GL_RGB10 0x8052
+#define GL_RGB12 0x8053
+#define GL_RGB16 0x8054
+#define GL_RGBA2 0x8055
+#define GL_RGBA4 0x8056
+#define GL_RGB5_A1 0x8057
+#define GL_RGBA8 0x8058
+#define GL_RGB10_A2 0x8059
+#define GL_RGBA12 0x805A
+#define GL_RGBA16 0x805B
+#define GL_CLIENT_PIXEL_STORE_BIT 0x00000001
+#define GL_CLIENT_VERTEX_ARRAY_BIT 0x00000002
+#define GL_ALL_CLIENT_ATTRIB_BITS 0xFFFFFFFF
+#define GL_CLIENT_ALL_ATTRIB_BITS 0xFFFFFFFF
+
+
+/* Under Windows, we do not define OpenGL 1.2 & 1.3 functionality, since
+ it is treated as extensions (defined in glext.h) */
+#if !defined(__WIN32__)
+
+/* OpenGL 1.2 */
+#define GL_RESCALE_NORMAL 0x803A
+#define GL_CLAMP_TO_EDGE 0x812F
+#define GL_MAX_ELEMENTS_VERTICES 0x80E8
+#define GL_MAX_ELEMENTS_INDICES 0x80E9
+#define GL_BGR 0x80E0
+#define GL_BGRA 0x80E1
+#define GL_UNSIGNED_BYTE_3_3_2 0x8032
+#define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362
+#define GL_UNSIGNED_SHORT_5_6_5 0x8363
+#define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364
+#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033
+#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365
+#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034
+#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366
+#define GL_UNSIGNED_INT_8_8_8_8 0x8035
+#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367
+#define GL_UNSIGNED_INT_10_10_10_2 0x8036
+#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368
+#define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8
+#define GL_SINGLE_COLOR 0x81F9
+#define GL_SEPARATE_SPECULAR_COLOR 0x81FA
+#define GL_TEXTURE_MIN_LOD 0x813A
+#define GL_TEXTURE_MAX_LOD 0x813B
+#define GL_TEXTURE_BASE_LEVEL 0x813C
+#define GL_TEXTURE_MAX_LEVEL 0x813D
+#define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12
+#define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13
+#define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22
+#define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23
+#define GL_ALIASED_POINT_SIZE_RANGE 0x846D
+#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E
+#define GL_PACK_SKIP_IMAGES 0x806B
+#define GL_PACK_IMAGE_HEIGHT 0x806C
+#define GL_UNPACK_SKIP_IMAGES 0x806D
+#define GL_UNPACK_IMAGE_HEIGHT 0x806E
+#define GL_TEXTURE_3D 0x806F
+#define GL_PROXY_TEXTURE_3D 0x8070
+#define GL_TEXTURE_DEPTH 0x8071
+#define GL_TEXTURE_WRAP_R 0x8072
+#define GL_MAX_3D_TEXTURE_SIZE 0x8073
+#define GL_TEXTURE_BINDING_3D 0x806A
+
+/* OpenGL 1.2 imaging subset */
+/* GL_EXT_color_table */
+#define GL_COLOR_TABLE 0x80D0
+#define GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1
+#define GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2
+#define GL_PROXY_COLOR_TABLE 0x80D3
+#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4
+#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5
+#define GL_COLOR_TABLE_SCALE 0x80D6
+#define GL_COLOR_TABLE_BIAS 0x80D7
+#define GL_COLOR_TABLE_FORMAT 0x80D8
+#define GL_COLOR_TABLE_WIDTH 0x80D9
+#define GL_COLOR_TABLE_RED_SIZE 0x80DA
+#define GL_COLOR_TABLE_GREEN_SIZE 0x80DB
+#define GL_COLOR_TABLE_BLUE_SIZE 0x80DC
+#define GL_COLOR_TABLE_ALPHA_SIZE 0x80DD
+#define GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE
+#define GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF
+/* GL_EXT_convolution and GL_HP_convolution_border_modes */
+#define GL_CONVOLUTION_1D 0x8010
+#define GL_CONVOLUTION_2D 0x8011
+#define GL_SEPARABLE_2D 0x8012
+#define GL_CONVOLUTION_BORDER_MODE 0x8013
+#define GL_CONVOLUTION_FILTER_SCALE 0x8014
+#define GL_CONVOLUTION_FILTER_BIAS 0x8015
+#define GL_REDUCE 0x8016
+#define GL_CONVOLUTION_FORMAT 0x8017
+#define GL_CONVOLUTION_WIDTH 0x8018
+#define GL_CONVOLUTION_HEIGHT 0x8019
+#define GL_MAX_CONVOLUTION_WIDTH 0x801A
+#define GL_MAX_CONVOLUTION_HEIGHT 0x801B
+#define GL_POST_CONVOLUTION_RED_SCALE 0x801C
+#define GL_POST_CONVOLUTION_GREEN_SCALE 0x801D
+#define GL_POST_CONVOLUTION_BLUE_SCALE 0x801E
+#define GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F
+#define GL_POST_CONVOLUTION_RED_BIAS 0x8020
+#define GL_POST_CONVOLUTION_GREEN_BIAS 0x8021
+#define GL_POST_CONVOLUTION_BLUE_BIAS 0x8022
+#define GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023
+#define GL_CONSTANT_BORDER 0x8151
+#define GL_REPLICATE_BORDER 0x8153
+#define GL_CONVOLUTION_BORDER_COLOR 0x8154
+/* GL_SGI_color_matrix */
+#define GL_COLOR_MATRIX 0x80B1
+#define GL_COLOR_MATRIX_STACK_DEPTH 0x80B2
+#define GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3
+#define GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4
+#define GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5
+#define GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6
+#define GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7
+#define GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8
+#define GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9
+#define GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA
+#define GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80BB
+/* GL_EXT_histogram */
+#define GL_HISTOGRAM 0x8024
+#define GL_PROXY_HISTOGRAM 0x8025
+#define GL_HISTOGRAM_WIDTH 0x8026
+#define GL_HISTOGRAM_FORMAT 0x8027
+#define GL_HISTOGRAM_RED_SIZE 0x8028
+#define GL_HISTOGRAM_GREEN_SIZE 0x8029
+#define GL_HISTOGRAM_BLUE_SIZE 0x802A
+#define GL_HISTOGRAM_ALPHA_SIZE 0x802B
+#define GL_HISTOGRAM_LUMINANCE_SIZE 0x802C
+#define GL_HISTOGRAM_SINK 0x802D
+#define GL_MINMAX 0x802E
+#define GL_MINMAX_FORMAT 0x802F
+#define GL_MINMAX_SINK 0x8030
+#define GL_TABLE_TOO_LARGE 0x8031
+/* GL_EXT_blend_color, GL_EXT_blend_minmax */
+#define GL_BLEND_EQUATION 0x8009
+#define GL_MIN 0x8007
+#define GL_MAX 0x8008
+#define GL_FUNC_ADD 0x8006
+#define GL_FUNC_SUBTRACT 0x800A
+#define GL_FUNC_REVERSE_SUBTRACT 0x800B
+#define GL_BLEND_COLOR 0x8005
+
+
+/* OpenGL 1.3 */
+/* multitexture */
+#define GL_TEXTURE0 0x84C0
+#define GL_TEXTURE1 0x84C1
+#define GL_TEXTURE2 0x84C2
+#define GL_TEXTURE3 0x84C3
+#define GL_TEXTURE4 0x84C4
+#define GL_TEXTURE5 0x84C5
+#define GL_TEXTURE6 0x84C6
+#define GL_TEXTURE7 0x84C7
+#define GL_TEXTURE8 0x84C8
+#define GL_TEXTURE9 0x84C9
+#define GL_TEXTURE10 0x84CA
+#define GL_TEXTURE11 0x84CB
+#define GL_TEXTURE12 0x84CC
+#define GL_TEXTURE13 0x84CD
+#define GL_TEXTURE14 0x84CE
+#define GL_TEXTURE15 0x84CF
+#define GL_TEXTURE16 0x84D0
+#define GL_TEXTURE17 0x84D1
+#define GL_TEXTURE18 0x84D2
+#define GL_TEXTURE19 0x84D3
+#define GL_TEXTURE20 0x84D4
+#define GL_TEXTURE21 0x84D5
+#define GL_TEXTURE22 0x84D6
+#define GL_TEXTURE23 0x84D7
+#define GL_TEXTURE24 0x84D8
+#define GL_TEXTURE25 0x84D9
+#define GL_TEXTURE26 0x84DA
+#define GL_TEXTURE27 0x84DB
+#define GL_TEXTURE28 0x84DC
+#define GL_TEXTURE29 0x84DD
+#define GL_TEXTURE30 0x84DE
+#define GL_TEXTURE31 0x84DF
+#define GL_ACTIVE_TEXTURE 0x84E0
+#define GL_CLIENT_ACTIVE_TEXTURE 0x84E1
+#define GL_MAX_TEXTURE_UNITS 0x84E2
+/* texture_cube_map */
+#define GL_NORMAL_MAP 0x8511
+#define GL_REFLECTION_MAP 0x8512
+#define GL_TEXTURE_CUBE_MAP 0x8513
+#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A
+#define GL_PROXY_TEXTURE_CUBE_MAP 0x851B
+#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C
+/* texture_compression */
+#define GL_COMPRESSED_ALPHA 0x84E9
+#define GL_COMPRESSED_LUMINANCE 0x84EA
+#define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB
+#define GL_COMPRESSED_INTENSITY 0x84EC
+#define GL_COMPRESSED_RGB 0x84ED
+#define GL_COMPRESSED_RGBA 0x84EE
+#define GL_TEXTURE_COMPRESSION_HINT 0x84EF
+#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0
+#define GL_TEXTURE_COMPRESSED 0x86A1
+#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2
+#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3
+/* multisample */
+#define GL_MULTISAMPLE 0x809D
+#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E
+#define GL_SAMPLE_ALPHA_TO_ONE 0x809F
+#define GL_SAMPLE_COVERAGE 0x80A0
+#define GL_SAMPLE_BUFFERS 0x80A8
+#define GL_SAMPLES 0x80A9
+#define GL_SAMPLE_COVERAGE_VALUE 0x80AA
+#define GL_SAMPLE_COVERAGE_INVERT 0x80AB
+#define GL_MULTISAMPLE_BIT 0x20000000
+/* transpose_matrix */
+#define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3
+#define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4
+#define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5
+#define GL_TRANSPOSE_COLOR_MATRIX 0x84E6
+/* texture_env_combine */
+#define GL_COMBINE 0x8570
+#define GL_COMBINE_RGB 0x8571
+#define GL_COMBINE_ALPHA 0x8572
+#define GL_SOURCE0_RGB 0x8580
+#define GL_SOURCE1_RGB 0x8581
+#define GL_SOURCE2_RGB 0x8582
+#define GL_SOURCE0_ALPHA 0x8588
+#define GL_SOURCE1_ALPHA 0x8589
+#define GL_SOURCE2_ALPHA 0x858A
+#define GL_OPERAND0_RGB 0x8590
+#define GL_OPERAND1_RGB 0x8591
+#define GL_OPERAND2_RGB 0x8592
+#define GL_OPERAND0_ALPHA 0x8598
+#define GL_OPERAND1_ALPHA 0x8599
+#define GL_OPERAND2_ALPHA 0x859A
+#define GL_RGB_SCALE 0x8573
+#define GL_ADD_SIGNED 0x8574
+#define GL_INTERPOLATE 0x8575
+#define GL_SUBTRACT 0x84E7
+#define GL_CONSTANT 0x8576
+#define GL_PRIMARY_COLOR 0x8577
+#define GL_PREVIOUS 0x8578
+/* texture_env_dot3 */
+#define GL_DOT3_RGB 0x86AE
+#define GL_DOT3_RGBA 0x86AF
+/* texture_border_clamp */
+#define GL_CLAMP_TO_BORDER 0x812D
+
+#endif /* __WIN32__ */
+
+
+
+/************************************************************************
+ *
+ * Function prototypes
+ *
+ ************************************************************************/
+
+/* Miscellaneous */
+GLAPI void APIENTRY glClearIndex( GLfloat c );
+GLAPI void APIENTRY glClearColor( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha );
+GLAPI void APIENTRY glClear( GLbitfield mask );
+GLAPI void APIENTRY glIndexMask( GLuint mask );
+GLAPI void APIENTRY glColorMask( GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha );
+GLAPI void APIENTRY glAlphaFunc( GLenum func, GLclampf ref );
+GLAPI void APIENTRY glBlendFunc( GLenum sfactor, GLenum dfactor );
+GLAPI void APIENTRY glLogicOp( GLenum opcode );
+GLAPI void APIENTRY glCullFace( GLenum mode );
+GLAPI void APIENTRY glFrontFace( GLenum mode );
+GLAPI void APIENTRY glPointSize( GLfloat size );
+GLAPI void APIENTRY glLineWidth( GLfloat width );
+GLAPI void APIENTRY glLineStipple( GLint factor, GLushort pattern );
+GLAPI void APIENTRY glPolygonMode( GLenum face, GLenum mode );
+GLAPI void APIENTRY glPolygonOffset( GLfloat factor, GLfloat units );
+GLAPI void APIENTRY glPolygonStipple( const GLubyte *mask );
+GLAPI void APIENTRY glGetPolygonStipple( GLubyte *mask );
+GLAPI void APIENTRY glEdgeFlag( GLboolean flag );
+GLAPI void APIENTRY glEdgeFlagv( const GLboolean *flag );
+GLAPI void APIENTRY glScissor( GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glClipPlane( GLenum plane, const GLdouble *equation );
+GLAPI void APIENTRY glGetClipPlane( GLenum plane, GLdouble *equation );
+GLAPI void APIENTRY glDrawBuffer( GLenum mode );
+GLAPI void APIENTRY glReadBuffer( GLenum mode );
+GLAPI void APIENTRY glEnable( GLenum cap );
+GLAPI void APIENTRY glDisable( GLenum cap );
+GLAPI GLboolean APIENTRY glIsEnabled( GLenum cap );
+GLAPI void APIENTRY glEnableClientState( GLenum cap ); /* 1.1 */
+GLAPI void APIENTRY glDisableClientState( GLenum cap ); /* 1.1 */
+GLAPI void APIENTRY glGetBooleanv( GLenum pname, GLboolean *params );
+GLAPI void APIENTRY glGetDoublev( GLenum pname, GLdouble *params );
+GLAPI void APIENTRY glGetFloatv( GLenum pname, GLfloat *params );
+GLAPI void APIENTRY glGetIntegerv( GLenum pname, GLint *params );
+GLAPI void APIENTRY glPushAttrib( GLbitfield mask );
+GLAPI void APIENTRY glPopAttrib( void );
+GLAPI void APIENTRY glPushClientAttrib( GLbitfield mask ); /* 1.1 */
+GLAPI void APIENTRY glPopClientAttrib( void ); /* 1.1 */
+GLAPI GLint APIENTRY glRenderMode( GLenum mode );
+GLAPI GLenum APIENTRY glGetError( void );
+GLAPI const GLubyte* APIENTRY glGetString( GLenum name );
+GLAPI void APIENTRY glFinish( void );
+GLAPI void APIENTRY glFlush( void );
+GLAPI void APIENTRY glHint( GLenum target, GLenum mode );
+
+/* Depth Buffer */
+GLAPI void APIENTRY glClearDepth( GLclampd depth );
+GLAPI void APIENTRY glDepthFunc( GLenum func );
+GLAPI void APIENTRY glDepthMask( GLboolean flag );
+GLAPI void APIENTRY glDepthRange( GLclampd near_val, GLclampd far_val );
+
+/* Accumulation Buffer */
+GLAPI void APIENTRY glClearAccum( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha );
+GLAPI void APIENTRY glAccum( GLenum op, GLfloat value );
+
+/* Transformation */
+GLAPI void APIENTRY glMatrixMode( GLenum mode );
+GLAPI void APIENTRY glOrtho( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near_val, GLdouble far_val );
+GLAPI void APIENTRY glFrustum( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near_val, GLdouble far_val );
+GLAPI void APIENTRY glViewport( GLint x, GLint y, GLsizei width, GLsizei height );
+GLAPI void APIENTRY glPushMatrix( void );
+GLAPI void APIENTRY glPopMatrix( void );
+GLAPI void APIENTRY glLoadIdentity( void );
+GLAPI void APIENTRY glLoadMatrixd( const GLdouble *m );
+GLAPI void APIENTRY glLoadMatrixf( const GLfloat *m );
+GLAPI void APIENTRY glMultMatrixd( const GLdouble *m );
+GLAPI void APIENTRY glMultMatrixf( const GLfloat *m );
+GLAPI void APIENTRY glRotated( GLdouble angle, GLdouble x, GLdouble y, GLdouble z );
+GLAPI void APIENTRY glRotatef( GLfloat angle, GLfloat x, GLfloat y, GLfloat z );
+GLAPI void APIENTRY glScaled( GLdouble x, GLdouble y, GLdouble z );
+GLAPI void APIENTRY glScalef( GLfloat x, GLfloat y, GLfloat z );
+GLAPI void APIENTRY glTranslated( GLdouble x, GLdouble y, GLdouble z );
+GLAPI void APIENTRY glTranslatef( GLfloat x, GLfloat y, GLfloat z );
+
+/* Display Lists */
+GLAPI GLboolean APIENTRY glIsList( GLuint list );
+GLAPI void APIENTRY glDeleteLists( GLuint list, GLsizei range );
+GLAPI GLuint APIENTRY glGenLists( GLsizei range );
+GLAPI void APIENTRY glNewList( GLuint list, GLenum mode );
+GLAPI void APIENTRY glEndList( void );
+GLAPI void APIENTRY glCallList( GLuint list );
+GLAPI void APIENTRY glCallLists( GLsizei n, GLenum type, const GLvoid *lists );
+GLAPI void APIENTRY glListBase( GLuint base );
+
+/* Drawing Functions */
+GLAPI void APIENTRY glBegin( GLenum mode );
+GLAPI void APIENTRY glEnd( void );
+GLAPI void APIENTRY glVertex2d( GLdouble x, GLdouble y );
+GLAPI void APIENTRY glVertex2f( GLfloat x, GLfloat y );
+GLAPI void APIENTRY glVertex2i( GLint x, GLint y );
+GLAPI void APIENTRY glVertex2s( GLshort x, GLshort y );
+GLAPI void APIENTRY glVertex3d( GLdouble x, GLdouble y, GLdouble z );
+GLAPI void APIENTRY glVertex3f( GLfloat x, GLfloat y, GLfloat z );
+GLAPI void APIENTRY glVertex3i( GLint x, GLint y, GLint z );
+GLAPI void APIENTRY glVertex3s( GLshort x, GLshort y, GLshort z );
+GLAPI void APIENTRY glVertex4d( GLdouble x, GLdouble y, GLdouble z, GLdouble w );
+GLAPI void APIENTRY glVertex4f( GLfloat x, GLfloat y, GLfloat z, GLfloat w );
+GLAPI void APIENTRY glVertex4i( GLint x, GLint y, GLint z, GLint w );
+GLAPI void APIENTRY glVertex4s( GLshort x, GLshort y, GLshort z, GLshort w );
+GLAPI void APIENTRY glVertex2dv( const GLdouble *v );
+GLAPI void APIENTRY glVertex2fv( const GLfloat *v );
+GLAPI void APIENTRY glVertex2iv( const GLint *v );
+GLAPI void APIENTRY glVertex2sv( const GLshort *v );
+GLAPI void APIENTRY glVertex3dv( const GLdouble *v );
+GLAPI void APIENTRY glVertex3fv( const GLfloat *v );
+GLAPI void APIENTRY glVertex3iv( const GLint *v );
+GLAPI void APIENTRY glVertex3sv( const GLshort *v );
+GLAPI void APIENTRY glVertex4dv( const GLdouble *v );
+GLAPI void APIENTRY glVertex4fv( const GLfloat *v );
+GLAPI void APIENTRY glVertex4iv( const GLint *v );
+GLAPI void APIENTRY glVertex4sv( const GLshort *v );
+GLAPI void APIENTRY glNormal3b( GLbyte nx, GLbyte ny, GLbyte nz );
+GLAPI void APIENTRY glNormal3d( GLdouble nx, GLdouble ny, GLdouble nz );
+GLAPI void APIENTRY glNormal3f( GLfloat nx, GLfloat ny, GLfloat nz );
+GLAPI void APIENTRY glNormal3i( GLint nx, GLint ny, GLint nz );
+GLAPI void APIENTRY glNormal3s( GLshort nx, GLshort ny, GLshort nz );
+GLAPI void APIENTRY glNormal3bv( const GLbyte *v );
+GLAPI void APIENTRY glNormal3dv( const GLdouble *v );
+GLAPI void APIENTRY glNormal3fv( const GLfloat *v );
+GLAPI void APIENTRY glNormal3iv( const GLint *v );
+GLAPI void APIENTRY glNormal3sv( const GLshort *v );
+GLAPI void APIENTRY glIndexd( GLdouble c );
+GLAPI void APIENTRY glIndexf( GLfloat c );
+GLAPI void APIENTRY glIndexi( GLint c );
+GLAPI void APIENTRY glIndexs( GLshort c );
+GLAPI void APIENTRY glIndexub( GLubyte c ); /* 1.1 */
+GLAPI void APIENTRY glIndexdv( const GLdouble *c );
+GLAPI void APIENTRY glIndexfv( const GLfloat *c );
+GLAPI void APIENTRY glIndexiv( const GLint *c );
+GLAPI void APIENTRY glIndexsv( const GLshort *c );
+GLAPI void APIENTRY glIndexubv( const GLubyte *c ); /* 1.1 */
+GLAPI void APIENTRY glColor3b( GLbyte red, GLbyte green, GLbyte blue );
+GLAPI void APIENTRY glColor3d( GLdouble red, GLdouble green, GLdouble blue );
+GLAPI void APIENTRY glColor3f( GLfloat red, GLfloat green, GLfloat blue );
+GLAPI void APIENTRY glColor3i( GLint red, GLint green, GLint blue );
+GLAPI void APIENTRY glColor3s( GLshort red, GLshort green, GLshort blue );
+GLAPI void APIENTRY glColor3ub( GLubyte red, GLubyte green, GLubyte blue );
+GLAPI void APIENTRY glColor3ui( GLuint red, GLuint green, GLuint blue );
+GLAPI void APIENTRY glColor3us( GLushort red, GLushort green, GLushort blue );
+GLAPI void APIENTRY glColor4b( GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha );
+GLAPI void APIENTRY glColor4d( GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha );
+GLAPI void APIENTRY glColor4f( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha );
+GLAPI void APIENTRY glColor4i( GLint red, GLint green, GLint blue, GLint alpha );
+GLAPI void APIENTRY glColor4s( GLshort red, GLshort green, GLshort blue, GLshort alpha );
+GLAPI void APIENTRY glColor4ub( GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha );
+GLAPI void APIENTRY glColor4ui( GLuint red, GLuint green, GLuint blue, GLuint alpha );
+GLAPI void APIENTRY glColor4us( GLushort red, GLushort green, GLushort blue, GLushort alpha );
+GLAPI void APIENTRY glColor3bv( const GLbyte *v );
+GLAPI void APIENTRY glColor3dv( const GLdouble *v );
+GLAPI void APIENTRY glColor3fv( const GLfloat *v );
+GLAPI void APIENTRY glColor3iv( const GLint *v );
+GLAPI void APIENTRY glColor3sv( const GLshort *v );
+GLAPI void APIENTRY glColor3ubv( const GLubyte *v );
+GLAPI void APIENTRY glColor3uiv( const GLuint *v );
+GLAPI void APIENTRY glColor3usv( const GLushort *v );
+GLAPI void APIENTRY glColor4bv( const GLbyte *v );
+GLAPI void APIENTRY glColor4dv( const GLdouble *v );
+GLAPI void APIENTRY glColor4fv( const GLfloat *v );
+GLAPI void APIENTRY glColor4iv( const GLint *v );
+GLAPI void APIENTRY glColor4sv( const GLshort *v );
+GLAPI void APIENTRY glColor4ubv( const GLubyte *v );
+GLAPI void APIENTRY glColor4uiv( const GLuint *v );
+GLAPI void APIENTRY glColor4usv( const GLushort *v );
+GLAPI void APIENTRY glTexCoord1d( GLdouble s );
+GLAPI void APIENTRY glTexCoord1f( GLfloat s );
+GLAPI void APIENTRY glTexCoord1i( GLint s );
+GLAPI void APIENTRY glTexCoord1s( GLshort s );
+GLAPI void APIENTRY glTexCoord2d( GLdouble s, GLdouble t );
+GLAPI void APIENTRY glTexCoord2f( GLfloat s, GLfloat t );
+GLAPI void APIENTRY glTexCoord2i( GLint s, GLint t );
+GLAPI void APIENTRY glTexCoord2s( GLshort s, GLshort t );
+GLAPI void APIENTRY glTexCoord3d( GLdouble s, GLdouble t, GLdouble r );
+GLAPI void APIENTRY glTexCoord3f( GLfloat s, GLfloat t, GLfloat r );
+GLAPI void APIENTRY glTexCoord3i( GLint s, GLint t, GLint r );
+GLAPI void APIENTRY glTexCoord3s( GLshort s, GLshort t, GLshort r );
+GLAPI void APIENTRY glTexCoord4d( GLdouble s, GLdouble t, GLdouble r, GLdouble q );
+GLAPI void APIENTRY glTexCoord4f( GLfloat s, GLfloat t, GLfloat r, GLfloat q );
+GLAPI void APIENTRY glTexCoord4i( GLint s, GLint t, GLint r, GLint q );
+GLAPI void APIENTRY glTexCoord4s( GLshort s, GLshort t, GLshort r, GLshort q );
+GLAPI void APIENTRY glTexCoord1dv( const GLdouble *v );
+GLAPI void APIENTRY glTexCoord1fv( const GLfloat *v );
+GLAPI void APIENTRY glTexCoord1iv( const GLint *v );
+GLAPI void APIENTRY glTexCoord1sv( const GLshort *v );
+GLAPI void APIENTRY glTexCoord2dv( const GLdouble *v );
+GLAPI void APIENTRY glTexCoord2fv( const GLfloat *v );
+GLAPI void APIENTRY glTexCoord2iv( const GLint *v );
+GLAPI void APIENTRY glTexCoord2sv( const GLshort *v );
+GLAPI void APIENTRY glTexCoord3dv( const GLdouble *v );
+GLAPI void APIENTRY glTexCoord3fv( const GLfloat *v );
+GLAPI void APIENTRY glTexCoord3iv( const GLint *v );
+GLAPI void APIENTRY glTexCoord3sv( const GLshort *v );
+GLAPI void APIENTRY glTexCoord4dv( const GLdouble *v );
+GLAPI void APIENTRY glTexCoord4fv( const GLfloat *v );
+GLAPI void APIENTRY glTexCoord4iv( const GLint *v );
+GLAPI void APIENTRY glTexCoord4sv( const GLshort *v );
+GLAPI void APIENTRY glRasterPos2d( GLdouble x, GLdouble y );
+GLAPI void APIENTRY glRasterPos2f( GLfloat x, GLfloat y );
+GLAPI void APIENTRY glRasterPos2i( GLint x, GLint y );
+GLAPI void APIENTRY glRasterPos2s( GLshort x, GLshort y );
+GLAPI void APIENTRY glRasterPos3d( GLdouble x, GLdouble y, GLdouble z );
+GLAPI void APIENTRY glRasterPos3f( GLfloat x, GLfloat y, GLfloat z );
+GLAPI void APIENTRY glRasterPos3i( GLint x, GLint y, GLint z );
+GLAPI void APIENTRY glRasterPos3s( GLshort x, GLshort y, GLshort z );
+GLAPI void APIENTRY glRasterPos4d( GLdouble x, GLdouble y, GLdouble z, GLdouble w );
+GLAPI void APIENTRY glRasterPos4f( GLfloat x, GLfloat y, GLfloat z, GLfloat w );
+GLAPI void APIENTRY glRasterPos4i( GLint x, GLint y, GLint z, GLint w );
+GLAPI void APIENTRY glRasterPos4s( GLshort x, GLshort y, GLshort z, GLshort w );
+GLAPI void APIENTRY glRasterPos2dv( const GLdouble *v );
+GLAPI void APIENTRY glRasterPos2fv( const GLfloat *v );
+GLAPI void APIENTRY glRasterPos2iv( const GLint *v );
+GLAPI void APIENTRY glRasterPos2sv( const GLshort *v );
+GLAPI void APIENTRY glRasterPos3dv( const GLdouble *v );
+GLAPI void APIENTRY glRasterPos3fv( const GLfloat *v );
+GLAPI void APIENTRY glRasterPos3iv( const GLint *v );
+GLAPI void APIENTRY glRasterPos3sv( const GLshort *v );
+GLAPI void APIENTRY glRasterPos4dv( const GLdouble *v );
+GLAPI void APIENTRY glRasterPos4fv( const GLfloat *v );
+GLAPI void APIENTRY glRasterPos4iv( const GLint *v );
+GLAPI void APIENTRY glRasterPos4sv( const GLshort *v );
+GLAPI void APIENTRY glRectd( GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2 );
+GLAPI void APIENTRY glRectf( GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2 );
+GLAPI void APIENTRY glRecti( GLint x1, GLint y1, GLint x2, GLint y2 );
+GLAPI void APIENTRY glRects( GLshort x1, GLshort y1, GLshort x2, GLshort y2 );
+GLAPI void APIENTRY glRectdv( const GLdouble *v1, const GLdouble *v2 );
+GLAPI void APIENTRY glRectfv( const GLfloat *v1, const GLfloat *v2 );
+GLAPI void APIENTRY glRectiv( const GLint *v1, const GLint *v2 );
+GLAPI void APIENTRY glRectsv( const GLshort *v1, const GLshort *v2 );
+
+/* Lighting */
+GLAPI void APIENTRY glShadeModel( GLenum mode );
+GLAPI void APIENTRY glLightf( GLenum light, GLenum pname, GLfloat param );
+GLAPI void APIENTRY glLighti( GLenum light, GLenum pname, GLint param );
+GLAPI void APIENTRY glLightfv( GLenum light, GLenum pname, const GLfloat *params );
+GLAPI void APIENTRY glLightiv( GLenum light, GLenum pname, const GLint *params );
+GLAPI void APIENTRY glGetLightfv( GLenum light, GLenum pname, GLfloat *params );
+GLAPI void APIENTRY glGetLightiv( GLenum light, GLenum pname, GLint *params );
+GLAPI void APIENTRY glLightModelf( GLenum pname, GLfloat param );
+GLAPI void APIENTRY glLightModeli( GLenum pname, GLint param );
+GLAPI void APIENTRY glLightModelfv( GLenum pname, const GLfloat *params );
+GLAPI void APIENTRY glLightModeliv( GLenum pname, const GLint *params );
+GLAPI void APIENTRY glMaterialf( GLenum face, GLenum pname, GLfloat param );
+GLAPI void APIENTRY glMateriali( GLenum face, GLenum pname, GLint param );
+GLAPI void APIENTRY glMaterialfv( GLenum face, GLenum pname, const GLfloat *params );
+GLAPI void APIENTRY glMaterialiv( GLenum face, GLenum pname, const GLint *params );
+GLAPI void APIENTRY glGetMaterialfv( GLenum face, GLenum pname, GLfloat *params );
+GLAPI void APIENTRY glGetMaterialiv( GLenum face, GLenum pname, GLint *params );
+GLAPI void APIENTRY glColorMaterial( GLenum face, GLenum mode );
+
+/* Raster functions */
+GLAPI void APIENTRY glPixelZoom( GLfloat xfactor, GLfloat yfactor );
+GLAPI void APIENTRY glPixelStoref( GLenum pname, GLfloat param );
+GLAPI void APIENTRY glPixelStorei( GLenum pname, GLint param );
+GLAPI void APIENTRY glPixelTransferf( GLenum pname, GLfloat param );
+GLAPI void APIENTRY glPixelTransferi( GLenum pname, GLint param );
+GLAPI void APIENTRY glPixelMapfv( GLenum map, GLint mapsize, const GLfloat *values );
+GLAPI void APIENTRY glPixelMapuiv( GLenum map, GLint mapsize, const GLuint *values );
+GLAPI void APIENTRY glPixelMapusv( GLenum map, GLint mapsize, const GLushort *values );
+GLAPI void APIENTRY glGetPixelMapfv( GLenum map, GLfloat *values );
+GLAPI void APIENTRY glGetPixelMapuiv( GLenum map, GLuint *values );
+GLAPI void APIENTRY glGetPixelMapusv( GLenum map, GLushort *values );
+GLAPI void APIENTRY glBitmap( GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap );
+GLAPI void APIENTRY glReadPixels( GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels );
+GLAPI void APIENTRY glDrawPixels( GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels );
+GLAPI void APIENTRY glCopyPixels( GLint x, GLint y, GLsizei width, GLsizei height, GLenum type );
+
+/* Stenciling */
+GLAPI void APIENTRY glStencilFunc( GLenum func, GLint ref, GLuint mask );
+GLAPI void APIENTRY glStencilMask( GLuint mask );
+GLAPI void APIENTRY glStencilOp( GLenum fail, GLenum zfail, GLenum zpass );
+GLAPI void APIENTRY glClearStencil( GLint s );
+
+/* Texture mapping */
+GLAPI void APIENTRY glTexGend( GLenum coord, GLenum pname, GLdouble param );
+GLAPI void APIENTRY glTexGenf( GLenum coord, GLenum pname, GLfloat param );
+GLAPI void APIENTRY glTexGeni( GLenum coord, GLenum pname, GLint param );
+GLAPI void APIENTRY glTexGendv( GLenum coord, GLenum pname, const GLdouble *params );
+GLAPI void APIENTRY glTexGenfv( GLenum coord, GLenum pname, const GLfloat *params );
+GLAPI void APIENTRY glTexGeniv( GLenum coord, GLenum pname, const GLint *params );
+GLAPI void APIENTRY glGetTexGendv( GLenum coord, GLenum pname, GLdouble *params );
+GLAPI void APIENTRY glGetTexGenfv( GLenum coord, GLenum pname, GLfloat *params );
+GLAPI void APIENTRY glGetTexGeniv( GLenum coord, GLenum pname, GLint *params );
+GLAPI void APIENTRY glTexEnvf( GLenum target, GLenum pname, GLfloat param );
+GLAPI void APIENTRY glTexEnvi( GLenum target, GLenum pname, GLint param );
+GLAPI void APIENTRY glTexEnvfv( GLenum target, GLenum pname, const GLfloat *params );
+GLAPI void APIENTRY glTexEnviv( GLenum target, GLenum pname, const GLint *params );
+GLAPI void APIENTRY glGetTexEnvfv( GLenum target, GLenum pname, GLfloat *params );
+GLAPI void APIENTRY glGetTexEnviv( GLenum target, GLenum pname, GLint *params );
+GLAPI void APIENTRY glTexParameterf( GLenum target, GLenum pname, GLfloat param );
+GLAPI void APIENTRY glTexParameteri( GLenum target, GLenum pname, GLint param );
+GLAPI void APIENTRY glTexParameterfv( GLenum target, GLenum pname, const GLfloat *params );
+GLAPI void APIENTRY glTexParameteriv( GLenum target, GLenum pname, const GLint *params );
+GLAPI void APIENTRY glGetTexParameterfv( GLenum target, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetTexParameteriv( GLenum target, GLenum pname, GLint *params );
+GLAPI void APIENTRY glGetTexLevelParameterfv( GLenum target, GLint level, GLenum pname, GLfloat *params );
+GLAPI void APIENTRY glGetTexLevelParameteriv( GLenum target, GLint level, GLenum pname, GLint *params );
+GLAPI void APIENTRY glTexImage1D( GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels );
+GLAPI void APIENTRY glTexImage2D( GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels );
+GLAPI void APIENTRY glGetTexImage( GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels );
+
+/* Evaluators */
+GLAPI void APIENTRY glMap1d( GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points );
+GLAPI void APIENTRY glMap1f( GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points );
+GLAPI void APIENTRY glMap2d( GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points );
+GLAPI void APIENTRY glMap2f( GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points );
+GLAPI void APIENTRY glGetMapdv( GLenum target, GLenum query, GLdouble *v );
+GLAPI void APIENTRY glGetMapfv( GLenum target, GLenum query, GLfloat *v );
+GLAPI void APIENTRY glGetMapiv( GLenum target, GLenum query, GLint *v );
+GLAPI void APIENTRY glEvalCoord1d( GLdouble u );
+GLAPI void APIENTRY glEvalCoord1f( GLfloat u );
+GLAPI void APIENTRY glEvalCoord1dv( const GLdouble *u );
+GLAPI void APIENTRY glEvalCoord1fv( const GLfloat *u );
+GLAPI void APIENTRY glEvalCoord2d( GLdouble u, GLdouble v );
+GLAPI void APIENTRY glEvalCoord2f( GLfloat u, GLfloat v );
+GLAPI void APIENTRY glEvalCoord2dv( const GLdouble *u );
+GLAPI void APIENTRY glEvalCoord2fv( const GLfloat *u );
+GLAPI void APIENTRY glMapGrid1d( GLint un, GLdouble u1, GLdouble u2 );
+GLAPI void APIENTRY glMapGrid1f( GLint un, GLfloat u1, GLfloat u2 );
+GLAPI void APIENTRY glMapGrid2d( GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2 );
+GLAPI void APIENTRY glMapGrid2f( GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2 );
+GLAPI void APIENTRY glEvalPoint1( GLint i );
+GLAPI void APIENTRY glEvalPoint2( GLint i, GLint j );
+GLAPI void APIENTRY glEvalMesh1( GLenum mode, GLint i1, GLint i2 );
+GLAPI void APIENTRY glEvalMesh2( GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 );
+
+/* Fog */
+GLAPI void APIENTRY glFogf( GLenum pname, GLfloat param );
+GLAPI void APIENTRY glFogi( GLenum pname, GLint param );
+GLAPI void APIENTRY glFogfv( GLenum pname, const GLfloat *params );
+GLAPI void APIENTRY glFogiv( GLenum pname, const GLint *params );
+
+/* Selection and Feedback */
+GLAPI void APIENTRY glFeedbackBuffer( GLsizei size, GLenum type, GLfloat *buffer );
+GLAPI void APIENTRY glPassThrough( GLfloat token );
+GLAPI void APIENTRY glSelectBuffer( GLsizei size, GLuint *buffer );
+GLAPI void APIENTRY glInitNames( void );
+GLAPI void APIENTRY glLoadName( GLuint name );
+GLAPI void APIENTRY glPushName( GLuint name );
+GLAPI void APIENTRY glPopName( void );
+
+
+/* 1.1 functions */
+/* texture objects */
+GLAPI void APIENTRY glGenTextures( GLsizei n, GLuint *textures );
+GLAPI void APIENTRY glDeleteTextures( GLsizei n, const GLuint *textures);
+GLAPI void APIENTRY glBindTexture( GLenum target, GLuint texture );
+GLAPI void APIENTRY glPrioritizeTextures( GLsizei n, const GLuint *textures, const GLclampf *priorities );
+GLAPI GLboolean APIENTRY glAreTexturesResident( GLsizei n, const GLuint *textures, GLboolean *residences );
+GLAPI GLboolean APIENTRY glIsTexture( GLuint texture );
+/* texture mapping */
+GLAPI void APIENTRY glTexSubImage1D( GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels );
+GLAPI void APIENTRY glTexSubImage2D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels );
+GLAPI void APIENTRY glCopyTexImage1D( GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border );
+GLAPI void APIENTRY glCopyTexImage2D( GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border );
+GLAPI void APIENTRY glCopyTexSubImage1D( GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width );
+GLAPI void APIENTRY glCopyTexSubImage2D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height );
+/* vertex arrays */
+GLAPI void APIENTRY glVertexPointer( GLint size, GLenum type, GLsizei stride, const GLvoid *ptr );
+GLAPI void APIENTRY glNormalPointer( GLenum type, GLsizei stride, const GLvoid *ptr );
+GLAPI void APIENTRY glColorPointer( GLint size, GLenum type, GLsizei stride, const GLvoid *ptr );
+GLAPI void APIENTRY glIndexPointer( GLenum type, GLsizei stride, const GLvoid *ptr );
+GLAPI void APIENTRY glTexCoordPointer( GLint size, GLenum type, GLsizei stride, const GLvoid *ptr );
+GLAPI void APIENTRY glEdgeFlagPointer( GLsizei stride, const GLvoid *ptr );
+GLAPI void APIENTRY glGetPointerv( GLenum pname, GLvoid **params );
+GLAPI void APIENTRY glArrayElement( GLint i );
+GLAPI void APIENTRY glDrawArrays( GLenum mode, GLint first, GLsizei count );
+GLAPI void APIENTRY glDrawElements( GLenum mode, GLsizei count, GLenum type, const GLvoid *indices );
+GLAPI void APIENTRY glInterleavedArrays( GLenum format, GLsizei stride, const GLvoid *pointer );
+
+
+
+/* Under Windows, we do not define OpenGL 1.2 & 1.3 functionality, since
+ it is treated as extensions (defined in glext.h) */
+#if !defined(__WIN32__)
+
+/* 1.2 functions */
+GLAPI void APIENTRY glDrawRangeElements( GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices );
+GLAPI void APIENTRY glTexImage3D( GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels );
+GLAPI void APIENTRY glTexSubImage3D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);
+GLAPI void APIENTRY glCopyTexSubImage3D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height );
+
+/* 1.2 imaging extension functions */
+GLAPI void APIENTRY glColorTable( GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table );
+GLAPI void APIENTRY glColorSubTable( GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data );
+GLAPI void APIENTRY glColorTableParameteriv(GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glColorTableParameterfv(GLenum target, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glCopyColorSubTable( GLenum target, GLsizei start, GLint x, GLint y, GLsizei width );
+GLAPI void APIENTRY glCopyColorTable( GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width );
+GLAPI void APIENTRY glGetColorTable( GLenum target, GLenum format, GLenum type, GLvoid *table );
+GLAPI void APIENTRY glGetColorTableParameterfv( GLenum target, GLenum pname, GLfloat *params );
+GLAPI void APIENTRY glGetColorTableParameteriv( GLenum target, GLenum pname, GLint *params );
+GLAPI void APIENTRY glBlendEquation( GLenum mode );
+GLAPI void APIENTRY glBlendColor( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha );
+GLAPI void APIENTRY glHistogram( GLenum target, GLsizei width, GLenum internalformat, GLboolean sink );
+GLAPI void APIENTRY glResetHistogram( GLenum target );
+GLAPI void APIENTRY glGetHistogram( GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values );
+GLAPI void APIENTRY glGetHistogramParameterfv( GLenum target, GLenum pname, GLfloat *params );
+GLAPI void APIENTRY glGetHistogramParameteriv( GLenum target, GLenum pname, GLint *params );
+GLAPI void APIENTRY glMinmax( GLenum target, GLenum internalformat, GLboolean sink );
+GLAPI void APIENTRY glResetMinmax( GLenum target );
+GLAPI void APIENTRY glGetMinmax( GLenum target, GLboolean reset, GLenum format, GLenum types, GLvoid *values );
+GLAPI void APIENTRY glGetMinmaxParameterfv( GLenum target, GLenum pname, GLfloat *params );
+GLAPI void APIENTRY glGetMinmaxParameteriv( GLenum target, GLenum pname, GLint *params );
+GLAPI void APIENTRY glConvolutionFilter1D( GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image );
+GLAPI void APIENTRY glConvolutionFilter2D( GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image );
+GLAPI void APIENTRY glConvolutionParameterf( GLenum target, GLenum pname, GLfloat params );
+GLAPI void APIENTRY glConvolutionParameterfv( GLenum target, GLenum pname, const GLfloat *params );
+GLAPI void APIENTRY glConvolutionParameteri( GLenum target, GLenum pname, GLint params );
+GLAPI void APIENTRY glConvolutionParameteriv( GLenum target, GLenum pname, const GLint *params );
+GLAPI void APIENTRY glCopyConvolutionFilter1D( GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width );
+GLAPI void APIENTRY glCopyConvolutionFilter2D( GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glGetConvolutionFilter( GLenum target, GLenum format, GLenum type, GLvoid *image );
+GLAPI void APIENTRY glGetConvolutionParameterfv( GLenum target, GLenum pname, GLfloat *params );
+GLAPI void APIENTRY glGetConvolutionParameteriv( GLenum target, GLenum pname, GLint *params );
+GLAPI void APIENTRY glSeparableFilter2D( GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column );
+GLAPI void APIENTRY glGetSeparableFilter( GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span );
+
+/* 1.3 functions */
+GLAPI void APIENTRY glActiveTexture( GLenum texture );
+GLAPI void APIENTRY glClientActiveTexture( GLenum texture );
+GLAPI void APIENTRY glCompressedTexImage1D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data );
+GLAPI void APIENTRY glCompressedTexImage2D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data );
+GLAPI void APIENTRY glCompressedTexImage3D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data );
+GLAPI void APIENTRY glCompressedTexSubImage1D( GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data );
+GLAPI void APIENTRY glCompressedTexSubImage2D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data );
+GLAPI void APIENTRY glCompressedTexSubImage3D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data );
+GLAPI void APIENTRY glGetCompressedTexImage( GLenum target, GLint lod, GLvoid *img );
+GLAPI void APIENTRY glMultiTexCoord1d( GLenum target, GLdouble s );
+GLAPI void APIENTRY glMultiTexCoord1dv( GLenum target, const GLdouble *v );
+GLAPI void APIENTRY glMultiTexCoord1f( GLenum target, GLfloat s );
+GLAPI void APIENTRY glMultiTexCoord1fv( GLenum target, const GLfloat *v );
+GLAPI void APIENTRY glMultiTexCoord1i( GLenum target, GLint s );
+GLAPI void APIENTRY glMultiTexCoord1iv( GLenum target, const GLint *v );
+GLAPI void APIENTRY glMultiTexCoord1s( GLenum target, GLshort s );
+GLAPI void APIENTRY glMultiTexCoord1sv( GLenum target, const GLshort *v );
+GLAPI void APIENTRY glMultiTexCoord2d( GLenum target, GLdouble s, GLdouble t );
+GLAPI void APIENTRY glMultiTexCoord2dv( GLenum target, const GLdouble *v );
+GLAPI void APIENTRY glMultiTexCoord2f( GLenum target, GLfloat s, GLfloat t );
+GLAPI void APIENTRY glMultiTexCoord2fv( GLenum target, const GLfloat *v );
+GLAPI void APIENTRY glMultiTexCoord2i( GLenum target, GLint s, GLint t );
+GLAPI void APIENTRY glMultiTexCoord2iv( GLenum target, const GLint *v );
+GLAPI void APIENTRY glMultiTexCoord2s( GLenum target, GLshort s, GLshort t );
+GLAPI void APIENTRY glMultiTexCoord2sv( GLenum target, const GLshort *v );
+GLAPI void APIENTRY glMultiTexCoord3d( GLenum target, GLdouble s, GLdouble t, GLdouble r );
+GLAPI void APIENTRY glMultiTexCoord3dv( GLenum target, const GLdouble *v );
+GLAPI void APIENTRY glMultiTexCoord3f( GLenum target, GLfloat s, GLfloat t, GLfloat r );
+GLAPI void APIENTRY glMultiTexCoord3fv( GLenum target, const GLfloat *v );
+GLAPI void APIENTRY glMultiTexCoord3i( GLenum target, GLint s, GLint t, GLint r );
+GLAPI void APIENTRY glMultiTexCoord3iv( GLenum target, const GLint *v );
+GLAPI void APIENTRY glMultiTexCoord3s( GLenum target, GLshort s, GLshort t, GLshort r );
+GLAPI void APIENTRY glMultiTexCoord3sv( GLenum target, const GLshort *v );
+GLAPI void APIENTRY glMultiTexCoord4d( GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q );
+GLAPI void APIENTRY glMultiTexCoord4dv( GLenum target, const GLdouble *v );
+GLAPI void APIENTRY glMultiTexCoord4f( GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q );
+GLAPI void APIENTRY glMultiTexCoord4fv( GLenum target, const GLfloat *v );
+GLAPI void APIENTRY glMultiTexCoord4i( GLenum target, GLint s, GLint t, GLint r, GLint q );
+GLAPI void APIENTRY glMultiTexCoord4iv( GLenum target, const GLint *v );
+GLAPI void APIENTRY glMultiTexCoord4s( GLenum target, GLshort s, GLshort t, GLshort r, GLshort q );
+GLAPI void APIENTRY glMultiTexCoord4sv( GLenum target, const GLshort *v );
+GLAPI void APIENTRY glLoadTransposeMatrixd( const GLdouble m[16] );
+GLAPI void APIENTRY glLoadTransposeMatrixf( const GLfloat m[16] );
+GLAPI void APIENTRY glMultTransposeMatrixd( const GLdouble m[16] );
+GLAPI void APIENTRY glMultTransposeMatrixf( const GLfloat m[16] );
+GLAPI void APIENTRY glSampleCoverage( GLclampf value, GLboolean invert );
+GLAPI void APIENTRY glSamplePass( GLenum pass );
+
+#endif /* __WIN32__ */
+
+
+/* Include external definitions of OpenGL extensions */
+/* Removed, see this bug report for reference:
+ * http://sourceforge.net/tracker/index.php?func=detail&aid=610178&group_id=2435&atid=102435
+ *
+ * #include <GL/glext.h>
+ */
+
+
+/************************************************************************
+ * Begin system-specific stuff
+ */
+/*
+ * End system-specific stuff
+ ************************************************************************/
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __gl_h_ */
diff --git a/tcc/include/winapi/GL/glext.h b/tcc/include/winapi/GL/glext.h
new file mode 100644
index 0000000..c4b4baa
--- /dev/null
+++ b/tcc/include/winapi/GL/glext.h
@@ -0,0 +1,4623 @@
+#ifndef __glext_h_
+#define __glext_h_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+** License Applicability. Except to the extent portions of this file are
+** made subject to an alternative license as permitted in the SGI Free
+** Software License B, Version 1.1 (the "License"), the contents of this
+** file are subject only to the provisions of the License. You may not use
+** this file except in compliance with the License. You may obtain a copy
+** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
+** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
+**
+** http://oss.sgi.com/projects/FreeB
+**
+** Note that, as provided in the License, the Software is distributed on an
+** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
+** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
+** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
+** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
+**
+** Original Code. The Original Code is: OpenGL Sample Implementation,
+** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
+** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
+** Copyright in any portions created by third parties is as indicated
+** elsewhere herein. All Rights Reserved.
+**
+** Additional Notice Provisions: This software was created using the
+** OpenGL(R) version 1.2.1 Sample Implementation published by SGI, but has
+** not been independently verified as being compliant with the OpenGL(R)
+** version 1.2.1 Specification.
+*/
+
+#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__)
+#define WIN32_LEAN_AND_MEAN 1
+#include <windows.h>
+#endif
+
+#ifndef APIENTRY
+#define APIENTRY
+#endif
+#ifndef GLAPI
+#define GLAPI extern
+#endif
+
+/*************************************************************/
+
+/* Header file version number, required by OpenGL ABI for Linux */
+/* glext.h last updated 2002/03/22 */
+/* Current version at http://oss.sgi.com/projects/ogl-sample/registry/ */
+#define GL_GLEXT_VERSION 11
+
+#ifndef GL_VERSION_1_2
+#define GL_CONSTANT_COLOR 0x8001
+#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002
+#define GL_CONSTANT_ALPHA 0x8003
+#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004
+#define GL_BLEND_COLOR 0x8005
+#define GL_FUNC_ADD 0x8006
+#define GL_MIN 0x8007
+#define GL_MAX 0x8008
+#define GL_BLEND_EQUATION 0x8009
+#define GL_FUNC_SUBTRACT 0x800A
+#define GL_FUNC_REVERSE_SUBTRACT 0x800B
+#define GL_CONVOLUTION_1D 0x8010
+#define GL_CONVOLUTION_2D 0x8011
+#define GL_SEPARABLE_2D 0x8012
+#define GL_CONVOLUTION_BORDER_MODE 0x8013
+#define GL_CONVOLUTION_FILTER_SCALE 0x8014
+#define GL_CONVOLUTION_FILTER_BIAS 0x8015
+#define GL_REDUCE 0x8016
+#define GL_CONVOLUTION_FORMAT 0x8017
+#define GL_CONVOLUTION_WIDTH 0x8018
+#define GL_CONVOLUTION_HEIGHT 0x8019
+#define GL_MAX_CONVOLUTION_WIDTH 0x801A
+#define GL_MAX_CONVOLUTION_HEIGHT 0x801B
+#define GL_POST_CONVOLUTION_RED_SCALE 0x801C
+#define GL_POST_CONVOLUTION_GREEN_SCALE 0x801D
+#define GL_POST_CONVOLUTION_BLUE_SCALE 0x801E
+#define GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F
+#define GL_POST_CONVOLUTION_RED_BIAS 0x8020
+#define GL_POST_CONVOLUTION_GREEN_BIAS 0x8021
+#define GL_POST_CONVOLUTION_BLUE_BIAS 0x8022
+#define GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023
+#define GL_HISTOGRAM 0x8024
+#define GL_PROXY_HISTOGRAM 0x8025
+#define GL_HISTOGRAM_WIDTH 0x8026
+#define GL_HISTOGRAM_FORMAT 0x8027
+#define GL_HISTOGRAM_RED_SIZE 0x8028
+#define GL_HISTOGRAM_GREEN_SIZE 0x8029
+#define GL_HISTOGRAM_BLUE_SIZE 0x802A
+#define GL_HISTOGRAM_ALPHA_SIZE 0x802B
+#define GL_HISTOGRAM_LUMINANCE_SIZE 0x802C
+#define GL_HISTOGRAM_SINK 0x802D
+#define GL_MINMAX 0x802E
+#define GL_MINMAX_FORMAT 0x802F
+#define GL_MINMAX_SINK 0x8030
+#define GL_TABLE_TOO_LARGE 0x8031
+#define GL_UNSIGNED_BYTE_3_3_2 0x8032
+#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033
+#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034
+#define GL_UNSIGNED_INT_8_8_8_8 0x8035
+#define GL_UNSIGNED_INT_10_10_10_2 0x8036
+#define GL_RESCALE_NORMAL 0x803A
+#define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362
+#define GL_UNSIGNED_SHORT_5_6_5 0x8363
+#define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364
+#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365
+#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366
+#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367
+#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368
+#define GL_COLOR_MATRIX 0x80B1
+#define GL_COLOR_MATRIX_STACK_DEPTH 0x80B2
+#define GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3
+#define GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4
+#define GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5
+#define GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6
+#define GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7
+#define GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8
+#define GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9
+#define GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA
+#define GL_COLOR_TABLE 0x80D0
+#define GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1
+#define GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2
+#define GL_PROXY_COLOR_TABLE 0x80D3
+#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4
+#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5
+#define GL_COLOR_TABLE_SCALE 0x80D6
+#define GL_COLOR_TABLE_BIAS 0x80D7
+#define GL_COLOR_TABLE_FORMAT 0x80D8
+#define GL_COLOR_TABLE_WIDTH 0x80D9
+#define GL_COLOR_TABLE_RED_SIZE 0x80DA
+#define GL_COLOR_TABLE_GREEN_SIZE 0x80DB
+#define GL_COLOR_TABLE_BLUE_SIZE 0x80DC
+#define GL_COLOR_TABLE_ALPHA_SIZE 0x80DD
+#define GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE
+#define GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF
+#define GL_BGR 0x80E0
+#define GL_BGRA 0x80E1
+#define GL_MAX_ELEMENTS_VERTICES 0x80E8
+#define GL_MAX_ELEMENTS_INDICES 0x80E9
+#define GL_CLAMP_TO_EDGE 0x812F
+#define GL_TEXTURE_MIN_LOD 0x813A
+#define GL_TEXTURE_MAX_LOD 0x813B
+#define GL_TEXTURE_BASE_LEVEL 0x813C
+#define GL_TEXTURE_MAX_LEVEL 0x813D
+#define GL_IGNORE_BORDER 0x8150
+#define GL_CONSTANT_BORDER 0x8151
+#define GL_WRAP_BORDER 0x8152
+#define GL_REPLICATE_BORDER 0x8153
+#define GL_CONVOLUTION_BORDER_COLOR 0x8154
+#define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8
+#define GL_SINGLE_COLOR 0x81F9
+#define GL_SEPARATE_SPECULAR_COLOR 0x81FA
+#define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12
+#define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13
+#define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22
+#define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23
+#define GL_ALIASED_POINT_SIZE_RANGE 0x846D
+#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E
+#endif
+
+#ifndef GL_VERSION_1_3
+#define GL_TEXTURE0 0x84C0
+#define GL_TEXTURE1 0x84C1
+#define GL_TEXTURE2 0x84C2
+#define GL_TEXTURE3 0x84C3
+#define GL_TEXTURE4 0x84C4
+#define GL_TEXTURE5 0x84C5
+#define GL_TEXTURE6 0x84C6
+#define GL_TEXTURE7 0x84C7
+#define GL_TEXTURE8 0x84C8
+#define GL_TEXTURE9 0x84C9
+#define GL_TEXTURE10 0x84CA
+#define GL_TEXTURE11 0x84CB
+#define GL_TEXTURE12 0x84CC
+#define GL_TEXTURE13 0x84CD
+#define GL_TEXTURE14 0x84CE
+#define GL_TEXTURE15 0x84CF
+#define GL_TEXTURE16 0x84D0
+#define GL_TEXTURE17 0x84D1
+#define GL_TEXTURE18 0x84D2
+#define GL_TEXTURE19 0x84D3
+#define GL_TEXTURE20 0x84D4
+#define GL_TEXTURE21 0x84D5
+#define GL_TEXTURE22 0x84D6
+#define GL_TEXTURE23 0x84D7
+#define GL_TEXTURE24 0x84D8
+#define GL_TEXTURE25 0x84D9
+#define GL_TEXTURE26 0x84DA
+#define GL_TEXTURE27 0x84DB
+#define GL_TEXTURE28 0x84DC
+#define GL_TEXTURE29 0x84DD
+#define GL_TEXTURE30 0x84DE
+#define GL_TEXTURE31 0x84DF
+#define GL_ACTIVE_TEXTURE 0x84E0
+#define GL_CLIENT_ACTIVE_TEXTURE 0x84E1
+#define GL_MAX_TEXTURE_UNITS 0x84E2
+#define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3
+#define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4
+#define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5
+#define GL_TRANSPOSE_COLOR_MATRIX 0x84E6
+#define GL_MULTISAMPLE 0x809D
+#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E
+#define GL_SAMPLE_ALPHA_TO_ONE 0x809F
+#define GL_SAMPLE_COVERAGE 0x80A0
+#define GL_SAMPLE_BUFFERS 0x80A8
+#define GL_SAMPLES 0x80A9
+#define GL_SAMPLE_COVERAGE_VALUE 0x80AA
+#define GL_SAMPLE_COVERAGE_INVERT 0x80AB
+#define GL_MULTISAMPLE_BIT 0x20000000
+#define GL_NORMAL_MAP 0x8511
+#define GL_REFLECTION_MAP 0x8512
+#define GL_TEXTURE_CUBE_MAP 0x8513
+#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A
+#define GL_PROXY_TEXTURE_CUBE_MAP 0x851B
+#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C
+#define GL_COMPRESSED_ALPHA 0x84E9
+#define GL_COMPRESSED_LUMINANCE 0x84EA
+#define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB
+#define GL_COMPRESSED_INTENSITY 0x84EC
+#define GL_COMPRESSED_RGB 0x84ED
+#define GL_COMPRESSED_RGBA 0x84EE
+#define GL_TEXTURE_COMPRESSION_HINT 0x84EF
+#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0
+#define GL_TEXTURE_COMPRESSED 0x86A1
+#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2
+#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3
+#define GL_CLAMP_TO_BORDER 0x812D
+#define GL_CLAMP_TO_BORDER_SGIS 0x812D
+#define GL_COMBINE 0x8570
+#define GL_COMBINE_RGB 0x8571
+#define GL_COMBINE_ALPHA 0x8572
+#define GL_SOURCE0_RGB 0x8580
+#define GL_SOURCE1_RGB 0x8581
+#define GL_SOURCE2_RGB 0x8582
+#define GL_SOURCE0_ALPHA 0x8588
+#define GL_SOURCE1_ALPHA 0x8589
+#define GL_SOURCE2_ALPHA 0x858A
+#define GL_OPERAND0_RGB 0x8590
+#define GL_OPERAND1_RGB 0x8591
+#define GL_OPERAND2_RGB 0x8592
+#define GL_OPERAND0_ALPHA 0x8598
+#define GL_OPERAND1_ALPHA 0x8599
+#define GL_OPERAND2_ALPHA 0x859A
+#define GL_RGB_SCALE 0x8573
+#define GL_ADD_SIGNED 0x8574
+#define GL_INTERPOLATE 0x8575
+#define GL_SUBTRACT 0x84E7
+#define GL_CONSTANT 0x8576
+#define GL_PRIMARY_COLOR 0x8577
+#define GL_PREVIOUS 0x8578
+#define GL_DOT3_RGB 0x86AE
+#define GL_DOT3_RGBA 0x86AF
+#endif
+
+#ifndef GL_ARB_multitexture
+#define GL_TEXTURE0_ARB 0x84C0
+#define GL_TEXTURE1_ARB 0x84C1
+#define GL_TEXTURE2_ARB 0x84C2
+#define GL_TEXTURE3_ARB 0x84C3
+#define GL_TEXTURE4_ARB 0x84C4
+#define GL_TEXTURE5_ARB 0x84C5
+#define GL_TEXTURE6_ARB 0x84C6
+#define GL_TEXTURE7_ARB 0x84C7
+#define GL_TEXTURE8_ARB 0x84C8
+#define GL_TEXTURE9_ARB 0x84C9
+#define GL_TEXTURE10_ARB 0x84CA
+#define GL_TEXTURE11_ARB 0x84CB
+#define GL_TEXTURE12_ARB 0x84CC
+#define GL_TEXTURE13_ARB 0x84CD
+#define GL_TEXTURE14_ARB 0x84CE
+#define GL_TEXTURE15_ARB 0x84CF
+#define GL_TEXTURE16_ARB 0x84D0
+#define GL_TEXTURE17_ARB 0x84D1
+#define GL_TEXTURE18_ARB 0x84D2
+#define GL_TEXTURE19_ARB 0x84D3
+#define GL_TEXTURE20_ARB 0x84D4
+#define GL_TEXTURE21_ARB 0x84D5
+#define GL_TEXTURE22_ARB 0x84D6
+#define GL_TEXTURE23_ARB 0x84D7
+#define GL_TEXTURE24_ARB 0x84D8
+#define GL_TEXTURE25_ARB 0x84D9
+#define GL_TEXTURE26_ARB 0x84DA
+#define GL_TEXTURE27_ARB 0x84DB
+#define GL_TEXTURE28_ARB 0x84DC
+#define GL_TEXTURE29_ARB 0x84DD
+#define GL_TEXTURE30_ARB 0x84DE
+#define GL_TEXTURE31_ARB 0x84DF
+#define GL_ACTIVE_TEXTURE_ARB 0x84E0
+#define GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1
+#define GL_MAX_TEXTURE_UNITS_ARB 0x84E2
+#endif
+
+#ifndef GL_ARB_transpose_matrix
+#define GL_TRANSPOSE_MODELVIEW_MATRIX_ARB 0x84E3
+#define GL_TRANSPOSE_PROJECTION_MATRIX_ARB 0x84E4
+#define GL_TRANSPOSE_TEXTURE_MATRIX_ARB 0x84E5
+#define GL_TRANSPOSE_COLOR_MATRIX_ARB 0x84E6
+#endif
+
+#ifndef GL_ARB_multisample
+#define GL_MULTISAMPLE_ARB 0x809D
+#define GL_SAMPLE_ALPHA_TO_COVERAGE_ARB 0x809E
+#define GL_SAMPLE_ALPHA_TO_ONE_ARB 0x809F
+#define GL_SAMPLE_COVERAGE_ARB 0x80A0
+#define GL_SAMPLE_BUFFERS_ARB 0x80A8
+#define GL_SAMPLES_ARB 0x80A9
+#define GL_SAMPLE_COVERAGE_VALUE_ARB 0x80AA
+#define GL_SAMPLE_COVERAGE_INVERT_ARB 0x80AB
+#define GL_MULTISAMPLE_BIT_ARB 0x20000000
+#endif
+
+#ifndef GL_ARB_texture_env_add
+#endif
+
+#ifndef GL_ARB_texture_cube_map
+#define GL_NORMAL_MAP_ARB 0x8511
+#define GL_REFLECTION_MAP_ARB 0x8512
+#define GL_TEXTURE_CUBE_MAP_ARB 0x8513
+#define GL_TEXTURE_BINDING_CUBE_MAP_ARB 0x8514
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x8515
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x8516
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x8517
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x8518
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x8519
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x851A
+#define GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851B
+#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB 0x851C
+#endif
+
+#ifndef GL_ARB_texture_compression
+#define GL_COMPRESSED_ALPHA_ARB 0x84E9
+#define GL_COMPRESSED_LUMINANCE_ARB 0x84EA
+#define GL_COMPRESSED_LUMINANCE_ALPHA_ARB 0x84EB
+#define GL_COMPRESSED_INTENSITY_ARB 0x84EC
+#define GL_COMPRESSED_RGB_ARB 0x84ED
+#define GL_COMPRESSED_RGBA_ARB 0x84EE
+#define GL_TEXTURE_COMPRESSION_HINT_ARB 0x84EF
+#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB 0x86A0
+#define GL_TEXTURE_COMPRESSED_ARB 0x86A1
+#define GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A2
+#define GL_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A3
+#endif
+
+#ifndef GL_ARB_texture_border_clamp
+#define GL_CLAMP_TO_BORDER_ARB 0x812D
+#endif
+
+#ifndef GL_ARB_point_parameters
+#define GL_POINT_SIZE_MIN_ARB 0x8126
+#define GL_POINT_SIZE_MIN_EXT 0x8126
+#define GL_POINT_SIZE_MIN_SGIS 0x8126
+#define GL_POINT_SIZE_MAX_ARB 0x8127
+#define GL_POINT_SIZE_MAX_EXT 0x8127
+#define GL_POINT_SIZE_MAX_SGIS 0x8127
+#define GL_POINT_FADE_THRESHOLD_SIZE_ARB 0x8128
+#define GL_POINT_FADE_THRESHOLD_SIZE_EXT 0x8128
+#define GL_POINT_FADE_THRESHOLD_SIZE_SGIS 0x8128
+#define GL_POINT_DISTANCE_ATTENUATION_ARB 0x8129
+#define GL_DISTANCE_ATTENUATION_EXT 0x8129
+#define GL_DISTANCE_ATTENUATION_SGIS 0x8129
+#endif
+
+#ifndef GL_ARB_vertex_blend
+#define GL_MAX_VERTEX_UNITS_ARB 0x86A4
+#define GL_ACTIVE_VERTEX_UNITS_ARB 0x86A5
+#define GL_WEIGHT_SUM_UNITY_ARB 0x86A6
+#define GL_VERTEX_BLEND_ARB 0x86A7
+#define GL_CURRENT_WEIGHT_ARB 0x86A8
+#define GL_WEIGHT_ARRAY_TYPE_ARB 0x86A9
+#define GL_WEIGHT_ARRAY_STRIDE_ARB 0x86AA
+#define GL_WEIGHT_ARRAY_SIZE_ARB 0x86AB
+#define GL_WEIGHT_ARRAY_POINTER_ARB 0x86AC
+#define GL_WEIGHT_ARRAY_ARB 0x86AD
+#define GL_MODELVIEW0_ARB 0x1700
+#define GL_MODELVIEW1_ARB 0x850A
+#define GL_MODELVIEW2_ARB 0x8722
+#define GL_MODELVIEW3_ARB 0x8723
+#define GL_MODELVIEW4_ARB 0x8724
+#define GL_MODELVIEW5_ARB 0x8725
+#define GL_MODELVIEW6_ARB 0x8726
+#define GL_MODELVIEW7_ARB 0x8727
+#define GL_MODELVIEW8_ARB 0x8728
+#define GL_MODELVIEW9_ARB 0x8729
+#define GL_MODELVIEW10_ARB 0x872A
+#define GL_MODELVIEW11_ARB 0x872B
+#define GL_MODELVIEW12_ARB 0x872C
+#define GL_MODELVIEW13_ARB 0x872D
+#define GL_MODELVIEW14_ARB 0x872E
+#define GL_MODELVIEW15_ARB 0x872F
+#define GL_MODELVIEW16_ARB 0x8730
+#define GL_MODELVIEW17_ARB 0x8731
+#define GL_MODELVIEW18_ARB 0x8732
+#define GL_MODELVIEW19_ARB 0x8733
+#define GL_MODELVIEW20_ARB 0x8734
+#define GL_MODELVIEW21_ARB 0x8735
+#define GL_MODELVIEW22_ARB 0x8736
+#define GL_MODELVIEW23_ARB 0x8737
+#define GL_MODELVIEW24_ARB 0x8738
+#define GL_MODELVIEW25_ARB 0x8739
+#define GL_MODELVIEW26_ARB 0x873A
+#define GL_MODELVIEW27_ARB 0x873B
+#define GL_MODELVIEW28_ARB 0x873C
+#define GL_MODELVIEW29_ARB 0x873D
+#define GL_MODELVIEW30_ARB 0x873E
+#define GL_MODELVIEW31_ARB 0x873F
+#endif
+
+#ifndef GL_ARB_matrix_palette
+#define GL_MATRIX_PALETTE_ARB 0x8840
+#define GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB 0x8841
+#define GL_MAX_PALETTE_MATRICES_ARB 0x8842
+#define GL_CURRENT_PALETTE_MATRIX_ARB 0x8843
+#define GL_MATRIX_INDEX_ARRAY_ARB 0x8844
+#define GL_CURRENT_MATRIX_INDEX_ARB 0x8845
+#define GL_MATRIX_INDEX_ARRAY_SIZE_ARB 0x8846
+#define GL_MATRIX_INDEX_ARRAY_TYPE_ARB 0x8847
+#define GL_MATRIX_INDEX_ARRAY_STRIDE_ARB 0x8848
+#define GL_MATRIX_INDEX_ARRAY_POINTER_ARB 0x8849
+#endif
+
+#ifndef GL_ARB_texture_env_combine
+#define GL_COMBINE_ARB 0x8570
+#define GL_COMBINE_RGB_ARB 0x8571
+#define GL_COMBINE_ALPHA_ARB 0x8572
+#define GL_SOURCE0_RGB_ARB 0x8580
+#define GL_SOURCE1_RGB_ARB 0x8581
+#define GL_SOURCE2_RGB_ARB 0x8582
+#define GL_SOURCE0_ALPHA_ARB 0x8588
+#define GL_SOURCE1_ALPHA_ARB 0x8589
+#define GL_SOURCE2_ALPHA_ARB 0x858A
+#define GL_OPERAND0_RGB_ARB 0x8590
+#define GL_OPERAND1_RGB_ARB 0x8591
+#define GL_OPERAND2_RGB_ARB 0x8592
+#define GL_OPERAND0_ALPHA_ARB 0x8598
+#define GL_OPERAND1_ALPHA_ARB 0x8599
+#define GL_OPERAND2_ALPHA_ARB 0x859A
+#define GL_RGB_SCALE_ARB 0x8573
+#define GL_ADD_SIGNED_ARB 0x8574
+#define GL_INTERPOLATE_ARB 0x8575
+#define GL_SUBTRACT_ARB 0x84E7
+#define GL_CONSTANT_ARB 0x8576
+#define GL_PRIMARY_COLOR_ARB 0x8577
+#define GL_PREVIOUS_ARB 0x8578
+#endif
+
+#ifndef GL_ARB_texture_env_crossbar
+#endif
+
+#ifndef GL_ARB_texture_env_dot3
+#define GL_DOT3_RGB_ARB 0x86AE
+#define GL_DOT3_RGB_EXT 0x86AE
+#define GL_DOT3_RGBA_ARB 0x86AF
+#define GL_DOT3_RGBA_EXT 0x86AF
+#endif
+
+#ifndef GL_ARB_texture_mirrored_repeat
+#define GL_MIRRORED_REPEAT_ARB 0x8370
+#endif
+
+#ifndef GL_ARB_depth_texture
+#define GL_DEPTH_COMPONENT16_ARB 0x81A5
+#define GL_DEPTH_COMPONENT24_ARB 0x81A6
+#define GL_DEPTH_COMPONENT32_ARB 0x81A7
+#define GL_TEXTURE_DEPTH_SIZE_ARB 0x884A
+#define GL_DEPTH_TEXTURE_MODE_ARB 0x884B
+#endif
+
+#ifndef GL_ARB_shadow
+#define GL_TEXTURE_COMPARE_MODE_ARB 0x884C
+#define GL_TEXTURE_COMPARE_FUNC_ARB 0x884D
+#define GL_COMPARE_R_TO_TEXTURE_ARB 0x884E
+#endif
+
+#ifndef GL_ARB_shadow_ambient
+#define GL_TEXTURE_COMPARE_FAIL_VALUE_ARB 0x80BF
+#endif
+
+#ifndef GL_ARB_window_pos
+#endif
+
+#ifndef GL_EXT_abgr
+#define GL_ABGR_EXT 0x8000
+#endif
+
+#ifndef GL_EXT_blend_color
+#define GL_CONSTANT_COLOR_EXT 0x8001
+#define GL_ONE_MINUS_CONSTANT_COLOR_EXT 0x8002
+#define GL_CONSTANT_ALPHA_EXT 0x8003
+#define GL_ONE_MINUS_CONSTANT_ALPHA_EXT 0x8004
+#define GL_BLEND_COLOR_EXT 0x8005
+#endif
+
+#ifndef GL_EXT_polygon_offset
+#define GL_POLYGON_OFFSET_EXT 0x8037
+#define GL_POLYGON_OFFSET_FACTOR_EXT 0x8038
+#define GL_POLYGON_OFFSET_BIAS_EXT 0x8039
+#endif
+
+#ifndef GL_EXT_texture
+#define GL_ALPHA4_EXT 0x803B
+#define GL_ALPHA8_EXT 0x803C
+#define GL_ALPHA12_EXT 0x803D
+#define GL_ALPHA16_EXT 0x803E
+#define GL_LUMINANCE4_EXT 0x803F
+#define GL_LUMINANCE8_EXT 0x8040
+#define GL_LUMINANCE12_EXT 0x8041
+#define GL_LUMINANCE16_EXT 0x8042
+#define GL_LUMINANCE4_ALPHA4_EXT 0x8043
+#define GL_LUMINANCE6_ALPHA2_EXT 0x8044
+#define GL_LUMINANCE8_ALPHA8_EXT 0x8045
+#define GL_LUMINANCE12_ALPHA4_EXT 0x8046
+#define GL_LUMINANCE12_ALPHA12_EXT 0x8047
+#define GL_LUMINANCE16_ALPHA16_EXT 0x8048
+#define GL_INTENSITY_EXT 0x8049
+#define GL_INTENSITY4_EXT 0x804A
+#define GL_INTENSITY8_EXT 0x804B
+#define GL_INTENSITY12_EXT 0x804C
+#define GL_INTENSITY16_EXT 0x804D
+#define GL_RGB2_EXT 0x804E
+#define GL_RGB4_EXT 0x804F
+#define GL_RGB5_EXT 0x8050
+#define GL_RGB8_EXT 0x8051
+#define GL_RGB10_EXT 0x8052
+#define GL_RGB12_EXT 0x8053
+#define GL_RGB16_EXT 0x8054
+#define GL_RGBA2_EXT 0x8055
+#define GL_RGBA4_EXT 0x8056
+#define GL_RGB5_A1_EXT 0x8057
+#define GL_RGBA8_EXT 0x8058
+#define GL_RGB10_A2_EXT 0x8059
+#define GL_RGBA12_EXT 0x805A
+#define GL_RGBA16_EXT 0x805B
+#define GL_TEXTURE_RED_SIZE_EXT 0x805C
+#define GL_TEXTURE_GREEN_SIZE_EXT 0x805D
+#define GL_TEXTURE_BLUE_SIZE_EXT 0x805E
+#define GL_TEXTURE_ALPHA_SIZE_EXT 0x805F
+#define GL_TEXTURE_LUMINANCE_SIZE_EXT 0x8060
+#define GL_TEXTURE_INTENSITY_SIZE_EXT 0x8061
+#define GL_REPLACE_EXT 0x8062
+#define GL_PROXY_TEXTURE_1D_EXT 0x8063
+#define GL_PROXY_TEXTURE_2D_EXT 0x8064
+#define GL_TEXTURE_TOO_LARGE_EXT 0x8065
+#endif
+
+#ifndef GL_EXT_texture3D
+#define GL_PACK_SKIP_IMAGES 0x806B
+#define GL_PACK_SKIP_IMAGES_EXT 0x806B
+#define GL_PACK_IMAGE_HEIGHT 0x806C
+#define GL_PACK_IMAGE_HEIGHT_EXT 0x806C
+#define GL_UNPACK_SKIP_IMAGES 0x806D
+#define GL_UNPACK_SKIP_IMAGES_EXT 0x806D
+#define GL_UNPACK_IMAGE_HEIGHT 0x806E
+#define GL_UNPACK_IMAGE_HEIGHT_EXT 0x806E
+#define GL_TEXTURE_3D 0x806F
+#define GL_TEXTURE_3D_EXT 0x806F
+#define GL_PROXY_TEXTURE_3D 0x8070
+#define GL_PROXY_TEXTURE_3D_EXT 0x8070
+#define GL_TEXTURE_DEPTH 0x8071
+#define GL_TEXTURE_DEPTH_EXT 0x8071
+#define GL_TEXTURE_WRAP_R 0x8072
+#define GL_TEXTURE_WRAP_R_EXT 0x8072
+#define GL_MAX_3D_TEXTURE_SIZE 0x8073
+#define GL_MAX_3D_TEXTURE_SIZE_EXT 0x8073
+#endif
+
+#ifndef GL_SGIS_texture_filter4
+#define GL_FILTER4_SGIS 0x8146
+#define GL_TEXTURE_FILTER4_SIZE_SGIS 0x8147
+#endif
+
+#ifndef GL_EXT_subtexture
+#endif
+
+#ifndef GL_EXT_copy_texture
+#endif
+
+#ifndef GL_EXT_histogram
+#define GL_HISTOGRAM_EXT 0x8024
+#define GL_PROXY_HISTOGRAM_EXT 0x8025
+#define GL_HISTOGRAM_WIDTH_EXT 0x8026
+#define GL_HISTOGRAM_FORMAT_EXT 0x8027
+#define GL_HISTOGRAM_RED_SIZE_EXT 0x8028
+#define GL_HISTOGRAM_GREEN_SIZE_EXT 0x8029
+#define GL_HISTOGRAM_BLUE_SIZE_EXT 0x802A
+#define GL_HISTOGRAM_ALPHA_SIZE_EXT 0x802B
+#define GL_HISTOGRAM_LUMINANCE_SIZE_EXT 0x802C
+#define GL_HISTOGRAM_SINK_EXT 0x802D
+#define GL_MINMAX_EXT 0x802E
+#define GL_MINMAX_FORMAT_EXT 0x802F
+#define GL_MINMAX_SINK_EXT 0x8030
+#define GL_TABLE_TOO_LARGE_EXT 0x8031
+#endif
+
+#ifndef GL_EXT_convolution
+#define GL_CONVOLUTION_1D_EXT 0x8010
+#define GL_CONVOLUTION_2D_EXT 0x8011
+#define GL_SEPARABLE_2D_EXT 0x8012
+#define GL_CONVOLUTION_BORDER_MODE_EXT 0x8013
+#define GL_CONVOLUTION_FILTER_SCALE_EXT 0x8014
+#define GL_CONVOLUTION_FILTER_BIAS_EXT 0x8015
+#define GL_REDUCE_EXT 0x8016
+#define GL_CONVOLUTION_FORMAT_EXT 0x8017
+#define GL_CONVOLUTION_WIDTH_EXT 0x8018
+#define GL_CONVOLUTION_HEIGHT_EXT 0x8019
+#define GL_MAX_CONVOLUTION_WIDTH_EXT 0x801A
+#define GL_MAX_CONVOLUTION_HEIGHT_EXT 0x801B
+#define GL_POST_CONVOLUTION_RED_SCALE_EXT 0x801C
+#define GL_POST_CONVOLUTION_GREEN_SCALE_EXT 0x801D
+#define GL_POST_CONVOLUTION_BLUE_SCALE_EXT 0x801E
+#define GL_POST_CONVOLUTION_ALPHA_SCALE_EXT 0x801F
+#define GL_POST_CONVOLUTION_RED_BIAS_EXT 0x8020
+#define GL_POST_CONVOLUTION_GREEN_BIAS_EXT 0x8021
+#define GL_POST_CONVOLUTION_BLUE_BIAS_EXT 0x8022
+#define GL_POST_CONVOLUTION_ALPHA_BIAS_EXT 0x8023
+#endif
+
+#ifndef GL_SGI_color_matrix
+#define GL_COLOR_MATRIX_SGI 0x80B1
+#define GL_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B2
+#define GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B3
+#define GL_POST_COLOR_MATRIX_RED_SCALE_SGI 0x80B4
+#define GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI 0x80B5
+#define GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI 0x80B6
+#define GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI 0x80B7
+#define GL_POST_COLOR_MATRIX_RED_BIAS_SGI 0x80B8
+#define GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI 0x80B9
+#define GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI 0x80BA
+#define GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI 0x80BB
+#endif
+
+#ifndef GL_SGI_color_table
+#define GL_COLOR_TABLE_SGI 0x80D0
+#define GL_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D1
+#define GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D2
+#define GL_PROXY_COLOR_TABLE_SGI 0x80D3
+#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D4
+#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D5
+#define GL_COLOR_TABLE_SCALE_SGI 0x80D6
+#define GL_COLOR_TABLE_BIAS_SGI 0x80D7
+#define GL_COLOR_TABLE_FORMAT_SGI 0x80D8
+#define GL_COLOR_TABLE_WIDTH_SGI 0x80D9
+#define GL_COLOR_TABLE_RED_SIZE_SGI 0x80DA
+#define GL_COLOR_TABLE_GREEN_SIZE_SGI 0x80DB
+#define GL_COLOR_TABLE_BLUE_SIZE_SGI 0x80DC
+#define GL_COLOR_TABLE_ALPHA_SIZE_SGI 0x80DD
+#define GL_COLOR_TABLE_LUMINANCE_SIZE_SGI 0x80DE
+#define GL_COLOR_TABLE_INTENSITY_SIZE_SGI 0x80DF
+#endif
+
+#ifndef GL_SGIS_pixel_texture
+#define GL_PIXEL_TEXTURE_SGIS 0x8353
+#define GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS 0x8354
+#define GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS 0x8355
+#define GL_PIXEL_GROUP_COLOR_SGIS 0x8356
+#endif
+
+#ifndef GL_SGIX_pixel_texture
+#define GL_PIXEL_TEX_GEN_SGIX 0x8139
+#define GL_PIXEL_TEX_GEN_MODE_SGIX 0x832B
+#endif
+
+#ifndef GL_SGIS_texture4D
+#define GL_PACK_SKIP_VOLUMES_SGIS 0x8130
+#define GL_PACK_IMAGE_DEPTH_SGIS 0x8131
+#define GL_UNPACK_SKIP_VOLUMES_SGIS 0x8132
+#define GL_UNPACK_IMAGE_DEPTH_SGIS 0x8133
+#define GL_TEXTURE_4D_SGIS 0x8134
+#define GL_PROXY_TEXTURE_4D_SGIS 0x8135
+#define GL_TEXTURE_4DSIZE_SGIS 0x8136
+#define GL_TEXTURE_WRAP_Q_SGIS 0x8137
+#define GL_MAX_4D_TEXTURE_SIZE_SGIS 0x8138
+#define GL_TEXTURE_4D_BINDING_SGIS 0x814F
+#endif
+
+#ifndef GL_SGI_texture_color_table
+#define GL_TEXTURE_COLOR_TABLE_SGI 0x80BC
+#define GL_PROXY_TEXTURE_COLOR_TABLE_SGI 0x80BD
+#endif
+
+#ifndef GL_EXT_cmyka
+#define GL_CMYK_EXT 0x800C
+#define GL_CMYKA_EXT 0x800D
+#define GL_PACK_CMYK_HINT_EXT 0x800E
+#define GL_UNPACK_CMYK_HINT_EXT 0x800F
+#endif
+
+#ifndef GL_EXT_texture_object
+#define GL_TEXTURE_PRIORITY_EXT 0x8066
+#define GL_TEXTURE_RESIDENT_EXT 0x8067
+#define GL_TEXTURE_1D_BINDING_EXT 0x8068
+#define GL_TEXTURE_2D_BINDING_EXT 0x8069
+#define GL_TEXTURE_3D_BINDING_EXT 0x806A
+#endif
+
+#ifndef GL_SGIS_detail_texture
+#define GL_DETAIL_TEXTURE_2D_SGIS 0x8095
+#define GL_DETAIL_TEXTURE_2D_BINDING_SGIS 0x8096
+#define GL_LINEAR_DETAIL_SGIS 0x8097
+#define GL_LINEAR_DETAIL_ALPHA_SGIS 0x8098
+#define GL_LINEAR_DETAIL_COLOR_SGIS 0x8099
+#define GL_DETAIL_TEXTURE_LEVEL_SGIS 0x809A
+#define GL_DETAIL_TEXTURE_MODE_SGIS 0x809B
+#define GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS 0x809C
+#endif
+
+#ifndef GL_SGIS_sharpen_texture
+#define GL_LINEAR_SHARPEN_SGIS 0x80AD
+#define GL_LINEAR_SHARPEN_ALPHA_SGIS 0x80AE
+#define GL_LINEAR_SHARPEN_COLOR_SGIS 0x80AF
+#define GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS 0x80B0
+#endif
+
+#ifndef GL_EXT_packed_pixels
+#define GL_UNSIGNED_BYTE_3_3_2_EXT 0x8032
+#define GL_UNSIGNED_SHORT_4_4_4_4_EXT 0x8033
+#define GL_UNSIGNED_SHORT_5_5_5_1_EXT 0x8034
+#define GL_UNSIGNED_INT_8_8_8_8_EXT 0x8035
+#define GL_UNSIGNED_INT_10_10_10_2_EXT 0x8036
+#endif
+
+#ifndef GL_SGIS_texture_lod
+#define GL_TEXTURE_MIN_LOD_SGIS 0x813A
+#define GL_TEXTURE_MAX_LOD_SGIS 0x813B
+#define GL_TEXTURE_BASE_LEVEL_SGIS 0x813C
+#define GL_TEXTURE_MAX_LEVEL_SGIS 0x813D
+#endif
+
+#ifndef GL_SGIS_multisample
+#define GL_MULTISAMPLE_SGIS 0x809D
+#define GL_SAMPLE_ALPHA_TO_MASK_SGIS 0x809E
+#define GL_SAMPLE_ALPHA_TO_ONE_SGIS 0x809F
+#define GL_SAMPLE_MASK_SGIS 0x80A0
+#define GL_1PASS_SGIS 0x80A1
+#define GL_2PASS_0_SGIS 0x80A2
+#define GL_2PASS_1_SGIS 0x80A3
+#define GL_4PASS_0_SGIS 0x80A4
+#define GL_4PASS_1_SGIS 0x80A5
+#define GL_4PASS_2_SGIS 0x80A6
+#define GL_4PASS_3_SGIS 0x80A7
+#define GL_SAMPLE_BUFFERS_SGIS 0x80A8
+#define GL_SAMPLES_SGIS 0x80A9
+#define GL_SAMPLE_MASK_VALUE_SGIS 0x80AA
+#define GL_SAMPLE_MASK_INVERT_SGIS 0x80AB
+#define GL_SAMPLE_PATTERN_SGIS 0x80AC
+#endif
+
+#ifndef GL_EXT_rescale_normal
+#define GL_RESCALE_NORMAL_EXT 0x803A
+#endif
+
+#ifndef GL_EXT_vertex_array
+#define GL_VERTEX_ARRAY_EXT 0x8074
+#define GL_NORMAL_ARRAY_EXT 0x8075
+#define GL_COLOR_ARRAY_EXT 0x8076
+#define GL_INDEX_ARRAY_EXT 0x8077
+#define GL_TEXTURE_COORD_ARRAY_EXT 0x8078
+#define GL_EDGE_FLAG_ARRAY_EXT 0x8079
+#define GL_VERTEX_ARRAY_SIZE_EXT 0x807A
+#define GL_VERTEX_ARRAY_TYPE_EXT 0x807B
+#define GL_VERTEX_ARRAY_STRIDE_EXT 0x807C
+#define GL_VERTEX_ARRAY_COUNT_EXT 0x807D
+#define GL_NORMAL_ARRAY_TYPE_EXT 0x807E
+#define GL_NORMAL_ARRAY_STRIDE_EXT 0x807F
+#define GL_NORMAL_ARRAY_COUNT_EXT 0x8080
+#define GL_COLOR_ARRAY_SIZE_EXT 0x8081
+#define GL_COLOR_ARRAY_TYPE_EXT 0x8082
+#define GL_COLOR_ARRAY_STRIDE_EXT 0x8083
+#define GL_COLOR_ARRAY_COUNT_EXT 0x8084
+#define GL_INDEX_ARRAY_TYPE_EXT 0x8085
+#define GL_INDEX_ARRAY_STRIDE_EXT 0x8086
+#define GL_INDEX_ARRAY_COUNT_EXT 0x8087
+#define GL_TEXTURE_COORD_ARRAY_SIZE_EXT 0x8088
+#define GL_TEXTURE_COORD_ARRAY_TYPE_EXT 0x8089
+#define GL_TEXTURE_COORD_ARRAY_STRIDE_EXT 0x808A
+#define GL_TEXTURE_COORD_ARRAY_COUNT_EXT 0x808B
+#define GL_EDGE_FLAG_ARRAY_STRIDE_EXT 0x808C
+#define GL_EDGE_FLAG_ARRAY_COUNT_EXT 0x808D
+#define GL_VERTEX_ARRAY_POINTER_EXT 0x808E
+#define GL_NORMAL_ARRAY_POINTER_EXT 0x808F
+#define GL_COLOR_ARRAY_POINTER_EXT 0x8090
+#define GL_INDEX_ARRAY_POINTER_EXT 0x8091
+#define GL_TEXTURE_COORD_ARRAY_POINTER_EXT 0x8092
+#define GL_EDGE_FLAG_ARRAY_POINTER_EXT 0x8093
+#endif
+
+#ifndef GL_EXT_misc_attribute
+#endif
+
+#ifndef GL_SGIS_generate_mipmap
+#define GL_GENERATE_MIPMAP_SGIS 0x8191
+#define GL_GENERATE_MIPMAP_HINT_SGIS 0x8192
+#endif
+
+#ifndef GL_SGIX_clipmap
+#define GL_LINEAR_CLIPMAP_LINEAR_SGIX 0x8170
+#define GL_TEXTURE_CLIPMAP_CENTER_SGIX 0x8171
+#define GL_TEXTURE_CLIPMAP_FRAME_SGIX 0x8172
+#define GL_TEXTURE_CLIPMAP_OFFSET_SGIX 0x8173
+#define GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8174
+#define GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX 0x8175
+#define GL_TEXTURE_CLIPMAP_DEPTH_SGIX 0x8176
+#define GL_MAX_CLIPMAP_DEPTH_SGIX 0x8177
+#define GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8178
+#define GL_NEAREST_CLIPMAP_NEAREST_SGIX 0x844D
+#define GL_NEAREST_CLIPMAP_LINEAR_SGIX 0x844E
+#define GL_LINEAR_CLIPMAP_NEAREST_SGIX 0x844F
+#endif
+
+#ifndef GL_SGIX_shadow
+#define GL_TEXTURE_COMPARE_SGIX 0x819A
+#define GL_TEXTURE_COMPARE_OPERATOR_SGIX 0x819B
+#define GL_TEXTURE_LEQUAL_R_SGIX 0x819C
+#define GL_TEXTURE_GEQUAL_R_SGIX 0x819D
+#endif
+
+#ifndef GL_SGIS_texture_edge_clamp
+#define GL_CLAMP_TO_EDGE_SGIS 0x812F
+#endif
+
+#ifndef GL_EXT_blend_minmax
+#define GL_FUNC_ADD_EXT 0x8006
+#define GL_MIN_EXT 0x8007
+#define GL_MAX_EXT 0x8008
+#define GL_BLEND_EQUATION_EXT 0x8009
+#endif
+
+#ifndef GL_EXT_blend_subtract
+#define GL_FUNC_SUBTRACT_EXT 0x800A
+#define GL_FUNC_REVERSE_SUBTRACT_EXT 0x800B
+#endif
+
+#ifndef GL_EXT_blend_logic_op
+#endif
+
+#ifndef GL_SGIX_interlace
+#define GL_INTERLACE_SGIX 0x8094
+#endif
+
+#ifndef GL_SGIX_pixel_tiles
+#define GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX 0x813E
+#define GL_PIXEL_TILE_CACHE_INCREMENT_SGIX 0x813F
+#define GL_PIXEL_TILE_WIDTH_SGIX 0x8140
+#define GL_PIXEL_TILE_HEIGHT_SGIX 0x8141
+#define GL_PIXEL_TILE_GRID_WIDTH_SGIX 0x8142
+#define GL_PIXEL_TILE_GRID_HEIGHT_SGIX 0x8143
+#define GL_PIXEL_TILE_GRID_DEPTH_SGIX 0x8144
+#define GL_PIXEL_TILE_CACHE_SIZE_SGIX 0x8145
+#endif
+
+#ifndef GL_SGIS_texture_select
+#define GL_DUAL_ALPHA4_SGIS 0x8110
+#define GL_DUAL_ALPHA8_SGIS 0x8111
+#define GL_DUAL_ALPHA12_SGIS 0x8112
+#define GL_DUAL_ALPHA16_SGIS 0x8113
+#define GL_DUAL_LUMINANCE4_SGIS 0x8114
+#define GL_DUAL_LUMINANCE8_SGIS 0x8115
+#define GL_DUAL_LUMINANCE12_SGIS 0x8116
+#define GL_DUAL_LUMINANCE16_SGIS 0x8117
+#define GL_DUAL_INTENSITY4_SGIS 0x8118
+#define GL_DUAL_INTENSITY8_SGIS 0x8119
+#define GL_DUAL_INTENSITY12_SGIS 0x811A
+#define GL_DUAL_INTENSITY16_SGIS 0x811B
+#define GL_DUAL_LUMINANCE_ALPHA4_SGIS 0x811C
+#define GL_DUAL_LUMINANCE_ALPHA8_SGIS 0x811D
+#define GL_QUAD_ALPHA4_SGIS 0x811E
+#define GL_QUAD_ALPHA8_SGIS 0x811F
+#define GL_QUAD_LUMINANCE4_SGIS 0x8120
+#define GL_QUAD_LUMINANCE8_SGIS 0x8121
+#define GL_QUAD_INTENSITY4_SGIS 0x8122
+#define GL_QUAD_INTENSITY8_SGIS 0x8123
+#define GL_DUAL_TEXTURE_SELECT_SGIS 0x8124
+#define GL_QUAD_TEXTURE_SELECT_SGIS 0x8125
+#endif
+
+#ifndef GL_SGIX_sprite
+#define GL_SPRITE_SGIX 0x8148
+#define GL_SPRITE_MODE_SGIX 0x8149
+#define GL_SPRITE_AXIS_SGIX 0x814A
+#define GL_SPRITE_TRANSLATION_SGIX 0x814B
+#define GL_SPRITE_AXIAL_SGIX 0x814C
+#define GL_SPRITE_OBJECT_ALIGNED_SGIX 0x814D
+#define GL_SPRITE_EYE_ALIGNED_SGIX 0x814E
+#endif
+
+#ifndef GL_SGIX_texture_multi_buffer
+#define GL_TEXTURE_MULTI_BUFFER_HINT_SGIX 0x812E
+#endif
+
+#ifndef GL_SGIX_instruments
+#define GL_INSTRUMENT_BUFFER_POINTER_SGIX 0x8180
+#define GL_INSTRUMENT_MEASUREMENTS_SGIX 0x8181
+#endif
+
+#ifndef GL_SGIX_texture_scale_bias
+#define GL_POST_TEXTURE_FILTER_BIAS_SGIX 0x8179
+#define GL_POST_TEXTURE_FILTER_SCALE_SGIX 0x817A
+#define GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX 0x817B
+#define GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX 0x817C
+#endif
+
+#ifndef GL_SGIX_framezoom
+#define GL_FRAMEZOOM_SGIX 0x818B
+#define GL_FRAMEZOOM_FACTOR_SGIX 0x818C
+#define GL_MAX_FRAMEZOOM_FACTOR_SGIX 0x818D
+#endif
+
+#ifndef GL_SGIX_tag_sample_buffer
+#endif
+
+#ifndef GL_FfdMaskSGIX
+#define GL_TEXTURE_DEFORMATION_BIT_SGIX 0x00000001
+#define GL_GEOMETRY_DEFORMATION_BIT_SGIX 0x00000002
+#endif
+
+#ifndef GL_SGIX_polynomial_ffd
+#define GL_GEOMETRY_DEFORMATION_SGIX 0x8194
+#define GL_TEXTURE_DEFORMATION_SGIX 0x8195
+#define GL_DEFORMATIONS_MASK_SGIX 0x8196
+#define GL_MAX_DEFORMATION_ORDER_SGIX 0x8197
+#endif
+
+#ifndef GL_SGIX_reference_plane
+#define GL_REFERENCE_PLANE_SGIX 0x817D
+#define GL_REFERENCE_PLANE_EQUATION_SGIX 0x817E
+#endif
+
+#ifndef GL_SGIX_flush_raster
+#endif
+
+#ifndef GL_SGIX_depth_texture
+#define GL_DEPTH_COMPONENT16_SGIX 0x81A5
+#define GL_DEPTH_COMPONENT24_SGIX 0x81A6
+#define GL_DEPTH_COMPONENT32_SGIX 0x81A7
+#endif
+
+#ifndef GL_SGIS_fog_function
+#define GL_FOG_FUNC_SGIS 0x812A
+#define GL_FOG_FUNC_POINTS_SGIS 0x812B
+#define GL_MAX_FOG_FUNC_POINTS_SGIS 0x812C
+#endif
+
+#ifndef GL_SGIX_fog_offset
+#define GL_FOG_OFFSET_SGIX 0x8198
+#define GL_FOG_OFFSET_VALUE_SGIX 0x8199
+#endif
+
+#ifndef GL_HP_image_transform
+#define GL_IMAGE_SCALE_X_HP 0x8155
+#define GL_IMAGE_SCALE_Y_HP 0x8156
+#define GL_IMAGE_TRANSLATE_X_HP 0x8157
+#define GL_IMAGE_TRANSLATE_Y_HP 0x8158
+#define GL_IMAGE_ROTATE_ANGLE_HP 0x8159
+#define GL_IMAGE_ROTATE_ORIGIN_X_HP 0x815A
+#define GL_IMAGE_ROTATE_ORIGIN_Y_HP 0x815B
+#define GL_IMAGE_MAG_FILTER_HP 0x815C
+#define GL_IMAGE_MIN_FILTER_HP 0x815D
+#define GL_IMAGE_CUBIC_WEIGHT_HP 0x815E
+#define GL_CUBIC_HP 0x815F
+#define GL_AVERAGE_HP 0x8160
+#define GL_IMAGE_TRANSFORM_2D_HP 0x8161
+#define GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8162
+#define GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8163
+#endif
+
+#ifndef GL_HP_convolution_border_modes
+#define GL_IGNORE_BORDER_HP 0x8150
+#define GL_CONSTANT_BORDER_HP 0x8151
+#define GL_REPLICATE_BORDER_HP 0x8153
+#define GL_CONVOLUTION_BORDER_COLOR_HP 0x8154
+#endif
+
+#ifndef GL_INGR_palette_buffer
+#endif
+
+#ifndef GL_SGIX_texture_add_env
+#define GL_TEXTURE_ENV_BIAS_SGIX 0x80BE
+#endif
+
+#ifndef GL_EXT_color_subtable
+#endif
+
+#ifndef GL_PGI_vertex_hints
+#define GL_VERTEX_DATA_HINT_PGI 0x1A22A
+#define GL_VERTEX_CONSISTENT_HINT_PGI 0x1A22B
+#define GL_MATERIAL_SIDE_HINT_PGI 0x1A22C
+#define GL_MAX_VERTEX_HINT_PGI 0x1A22D
+#define GL_COLOR3_BIT_PGI 0x00010000
+#define GL_COLOR4_BIT_PGI 0x00020000
+#define GL_EDGEFLAG_BIT_PGI 0x00040000
+#define GL_INDEX_BIT_PGI 0x00080000
+#define GL_MAT_AMBIENT_BIT_PGI 0x00100000
+#define GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI 0x00200000
+#define GL_MAT_DIFFUSE_BIT_PGI 0x00400000
+#define GL_MAT_EMISSION_BIT_PGI 0x00800000
+#define GL_MAT_COLOR_INDEXES_BIT_PGI 0x01000000
+#define GL_MAT_SHININESS_BIT_PGI 0x02000000
+#define GL_MAT_SPECULAR_BIT_PGI 0x04000000
+#define GL_NORMAL_BIT_PGI 0x08000000
+#define GL_TEXCOORD1_BIT_PGI 0x10000000
+#define GL_TEXCOORD2_BIT_PGI 0x20000000
+#define GL_TEXCOORD3_BIT_PGI 0x40000000
+#define GL_TEXCOORD4_BIT_PGI 0x80000000
+#define GL_VERTEX23_BIT_PGI 0x00000004
+#define GL_VERTEX4_BIT_PGI 0x00000008
+#endif
+
+#ifndef GL_PGI_misc_hints
+#define GL_PREFER_DOUBLEBUFFER_HINT_PGI 0x1A1F8
+#define GL_CONSERVE_MEMORY_HINT_PGI 0x1A1FD
+#define GL_RECLAIM_MEMORY_HINT_PGI 0x1A1FE
+#define GL_NATIVE_GRAPHICS_HANDLE_PGI 0x1A202
+#define GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI 0x1A203
+#define GL_NATIVE_GRAPHICS_END_HINT_PGI 0x1A204
+#define GL_ALWAYS_FAST_HINT_PGI 0x1A20C
+#define GL_ALWAYS_SOFT_HINT_PGI 0x1A20D
+#define GL_ALLOW_DRAW_OBJ_HINT_PGI 0x1A20E
+#define GL_ALLOW_DRAW_WIN_HINT_PGI 0x1A20F
+#define GL_ALLOW_DRAW_FRG_HINT_PGI 0x1A210
+#define GL_ALLOW_DRAW_MEM_HINT_PGI 0x1A211
+#define GL_STRICT_DEPTHFUNC_HINT_PGI 0x1A216
+#define GL_STRICT_LIGHTING_HINT_PGI 0x1A217
+#define GL_STRICT_SCISSOR_HINT_PGI 0x1A218
+#define GL_FULL_STIPPLE_HINT_PGI 0x1A219
+#define GL_CLIP_NEAR_HINT_PGI 0x1A220
+#define GL_CLIP_FAR_HINT_PGI 0x1A221
+#define GL_WIDE_LINE_HINT_PGI 0x1A222
+#define GL_BACK_NORMALS_HINT_PGI 0x1A223
+#endif
+
+#ifndef GL_EXT_paletted_texture
+#define GL_COLOR_INDEX1_EXT 0x80E2
+#define GL_COLOR_INDEX2_EXT 0x80E3
+#define GL_COLOR_INDEX4_EXT 0x80E4
+#define GL_COLOR_INDEX8_EXT 0x80E5
+#define GL_COLOR_INDEX12_EXT 0x80E6
+#define GL_COLOR_INDEX16_EXT 0x80E7
+#define GL_TEXTURE_INDEX_SIZE_EXT 0x80ED
+#endif
+
+#ifndef GL_EXT_clip_volume_hint
+#define GL_CLIP_VOLUME_CLIPPING_HINT_EXT 0x80F0
+#endif
+
+#ifndef GL_SGIX_list_priority
+#define GL_LIST_PRIORITY_SGIX 0x8182
+#endif
+
+#ifndef GL_SGIX_ir_instrument1
+#define GL_IR_INSTRUMENT1_SGIX 0x817F
+#endif
+
+#ifndef GL_SGIX_calligraphic_fragment
+#define GL_CALLIGRAPHIC_FRAGMENT_SGIX 0x8183
+#endif
+
+#ifndef GL_SGIX_texture_lod_bias
+#define GL_TEXTURE_LOD_BIAS_S_SGIX 0x818E
+#define GL_TEXTURE_LOD_BIAS_T_SGIX 0x818F
+#define GL_TEXTURE_LOD_BIAS_R_SGIX 0x8190
+#endif
+
+#ifndef GL_SGIX_shadow_ambient
+#define GL_SHADOW_AMBIENT_SGIX 0x80BF
+#endif
+
+#ifndef GL_EXT_index_texture
+#endif
+
+#ifndef GL_EXT_index_material
+#define GL_INDEX_MATERIAL_EXT 0x81B8
+#define GL_INDEX_MATERIAL_PARAMETER_EXT 0x81B9
+#define GL_INDEX_MATERIAL_FACE_EXT 0x81BA
+#endif
+
+#ifndef GL_EXT_index_func
+#define GL_INDEX_TEST_EXT 0x81B5
+#define GL_INDEX_TEST_FUNC_EXT 0x81B6
+#define GL_INDEX_TEST_REF_EXT 0x81B7
+#endif
+
+#ifndef GL_EXT_index_array_formats
+#define GL_IUI_V2F_EXT 0x81AD
+#define GL_IUI_V3F_EXT 0x81AE
+#define GL_IUI_N3F_V2F_EXT 0x81AF
+#define GL_IUI_N3F_V3F_EXT 0x81B0
+#define GL_T2F_IUI_V2F_EXT 0x81B1
+#define GL_T2F_IUI_V3F_EXT 0x81B2
+#define GL_T2F_IUI_N3F_V2F_EXT 0x81B3
+#define GL_T2F_IUI_N3F_V3F_EXT 0x81B4
+#endif
+
+#ifndef GL_EXT_compiled_vertex_array
+#define GL_ARRAY_ELEMENT_LOCK_FIRST_EXT 0x81A8
+#define GL_ARRAY_ELEMENT_LOCK_COUNT_EXT 0x81A9
+#endif
+
+#ifndef GL_EXT_cull_vertex
+#define GL_CULL_VERTEX_EXT 0x81AA
+#define GL_CULL_VERTEX_EYE_POSITION_EXT 0x81AB
+#define GL_CULL_VERTEX_OBJECT_POSITION_EXT 0x81AC
+#endif
+
+#ifndef GL_SGIX_ycrcb
+#define GL_YCRCB_422_SGIX 0x81BB
+#define GL_YCRCB_444_SGIX 0x81BC
+#endif
+
+#ifndef GL_SGIX_fragment_lighting
+#define GL_FRAGMENT_LIGHTING_SGIX 0x8400
+#define GL_FRAGMENT_COLOR_MATERIAL_SGIX 0x8401
+#define GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX 0x8402
+#define GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX 0x8403
+#define GL_MAX_FRAGMENT_LIGHTS_SGIX 0x8404
+#define GL_MAX_ACTIVE_LIGHTS_SGIX 0x8405
+#define GL_CURRENT_RASTER_NORMAL_SGIX 0x8406
+#define GL_LIGHT_ENV_MODE_SGIX 0x8407
+#define GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX 0x8408
+#define GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX 0x8409
+#define GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX 0x840A
+#define GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX 0x840B
+#define GL_FRAGMENT_LIGHT0_SGIX 0x840C
+#define GL_FRAGMENT_LIGHT1_SGIX 0x840D
+#define GL_FRAGMENT_LIGHT2_SGIX 0x840E
+#define GL_FRAGMENT_LIGHT3_SGIX 0x840F
+#define GL_FRAGMENT_LIGHT4_SGIX 0x8410
+#define GL_FRAGMENT_LIGHT5_SGIX 0x8411
+#define GL_FRAGMENT_LIGHT6_SGIX 0x8412
+#define GL_FRAGMENT_LIGHT7_SGIX 0x8413
+#endif
+
+#ifndef GL_IBM_rasterpos_clip
+#define GL_RASTER_POSITION_UNCLIPPED_IBM 0x19262
+#endif
+
+#ifndef GL_HP_texture_lighting
+#define GL_TEXTURE_LIGHTING_MODE_HP 0x8167
+#define GL_TEXTURE_POST_SPECULAR_HP 0x8168
+#define GL_TEXTURE_PRE_SPECULAR_HP 0x8169
+#endif
+
+#ifndef GL_EXT_draw_range_elements
+#define GL_MAX_ELEMENTS_VERTICES_EXT 0x80E8
+#define GL_MAX_ELEMENTS_INDICES_EXT 0x80E9
+#endif
+
+#ifndef GL_WIN_phong_shading
+#define GL_PHONG_WIN 0x80EA
+#define GL_PHONG_HINT_WIN 0x80EB
+#endif
+
+#ifndef GL_WIN_specular_fog
+#define GL_FOG_SPECULAR_TEXTURE_WIN 0x80EC
+#endif
+
+#ifndef GL_EXT_light_texture
+#define GL_FRAGMENT_MATERIAL_EXT 0x8349
+#define GL_FRAGMENT_NORMAL_EXT 0x834A
+#define GL_FRAGMENT_COLOR_EXT 0x834C
+#define GL_ATTENUATION_EXT 0x834D
+#define GL_SHADOW_ATTENUATION_EXT 0x834E
+#define GL_TEXTURE_APPLICATION_MODE_EXT 0x834F
+#define GL_TEXTURE_LIGHT_EXT 0x8350
+#define GL_TEXTURE_MATERIAL_FACE_EXT 0x8351
+#define GL_TEXTURE_MATERIAL_PARAMETER_EXT 0x8352
+/* reuse GL_FRAGMENT_DEPTH_EXT */
+#endif
+
+#ifndef GL_SGIX_blend_alpha_minmax
+#define GL_ALPHA_MIN_SGIX 0x8320
+#define GL_ALPHA_MAX_SGIX 0x8321
+#endif
+
+#ifndef GL_SGIX_impact_pixel_texture
+#define GL_PIXEL_TEX_GEN_Q_CEILING_SGIX 0x8184
+#define GL_PIXEL_TEX_GEN_Q_ROUND_SGIX 0x8185
+#define GL_PIXEL_TEX_GEN_Q_FLOOR_SGIX 0x8186
+#define GL_PIXEL_TEX_GEN_ALPHA_REPLACE_SGIX 0x8187
+#define GL_PIXEL_TEX_GEN_ALPHA_NO_REPLACE_SGIX 0x8188
+#define GL_PIXEL_TEX_GEN_ALPHA_LS_SGIX 0x8189
+#define GL_PIXEL_TEX_GEN_ALPHA_MS_SGIX 0x818A
+#endif
+
+#ifndef GL_EXT_bgra
+#define GL_BGR_EXT 0x80E0
+#define GL_BGRA_EXT 0x80E1
+#endif
+
+#ifndef GL_SGIX_async
+#define GL_ASYNC_MARKER_SGIX 0x8329
+#endif
+
+#ifndef GL_SGIX_async_pixel
+#define GL_ASYNC_TEX_IMAGE_SGIX 0x835C
+#define GL_ASYNC_DRAW_PIXELS_SGIX 0x835D
+#define GL_ASYNC_READ_PIXELS_SGIX 0x835E
+#define GL_MAX_ASYNC_TEX_IMAGE_SGIX 0x835F
+#define GL_MAX_ASYNC_DRAW_PIXELS_SGIX 0x8360
+#define GL_MAX_ASYNC_READ_PIXELS_SGIX 0x8361
+#endif
+
+#ifndef GL_SGIX_async_histogram
+#define GL_ASYNC_HISTOGRAM_SGIX 0x832C
+#define GL_MAX_ASYNC_HISTOGRAM_SGIX 0x832D
+#endif
+
+#ifndef GL_INTEL_texture_scissor
+#endif
+
+#ifndef GL_INTEL_parallel_arrays
+#define GL_PARALLEL_ARRAYS_INTEL 0x83F4
+#define GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL 0x83F5
+#define GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL 0x83F6
+#define GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL 0x83F7
+#define GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL 0x83F8
+#endif
+
+#ifndef GL_HP_occlusion_test
+#define GL_OCCLUSION_TEST_HP 0x8165
+#define GL_OCCLUSION_TEST_RESULT_HP 0x8166
+#endif
+
+#ifndef GL_EXT_pixel_transform
+#define GL_PIXEL_TRANSFORM_2D_EXT 0x8330
+#define GL_PIXEL_MAG_FILTER_EXT 0x8331
+#define GL_PIXEL_MIN_FILTER_EXT 0x8332
+#define GL_PIXEL_CUBIC_WEIGHT_EXT 0x8333
+#define GL_CUBIC_EXT 0x8334
+#define GL_AVERAGE_EXT 0x8335
+#define GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8336
+#define GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8337
+#define GL_PIXEL_TRANSFORM_2D_MATRIX_EXT 0x8338
+#endif
+
+#ifndef GL_EXT_pixel_transform_color_table
+#endif
+
+#ifndef GL_EXT_shared_texture_palette
+#define GL_SHARED_TEXTURE_PALETTE_EXT 0x81FB
+#endif
+
+#ifndef GL_EXT_separate_specular_color
+#define GL_LIGHT_MODEL_COLOR_CONTROL_EXT 0x81F8
+#define GL_SINGLE_COLOR_EXT 0x81F9
+#define GL_SEPARATE_SPECULAR_COLOR_EXT 0x81FA
+#endif
+
+#ifndef GL_EXT_secondary_color
+#define GL_COLOR_SUM_EXT 0x8458
+#define GL_CURRENT_SECONDARY_COLOR_EXT 0x8459
+#define GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845A
+#define GL_SECONDARY_COLOR_ARRAY_TYPE_EXT 0x845B
+#define GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT 0x845C
+#define GL_SECONDARY_COLOR_ARRAY_POINTER_EXT 0x845D
+#define GL_SECONDARY_COLOR_ARRAY_EXT 0x845E
+#endif
+
+#ifndef GL_EXT_texture_perturb_normal
+#define GL_PERTURB_EXT 0x85AE
+#define GL_TEXTURE_NORMAL_EXT 0x85AF
+#endif
+
+#ifndef GL_EXT_multi_draw_arrays
+#endif
+
+#ifndef GL_EXT_fog_coord
+#define GL_FOG_COORDINATE_SOURCE_EXT 0x8450
+#define GL_FOG_COORDINATE_EXT 0x8451
+#define GL_FRAGMENT_DEPTH_EXT 0x8452
+#define GL_CURRENT_FOG_COORDINATE_EXT 0x8453
+#define GL_FOG_COORDINATE_ARRAY_TYPE_EXT 0x8454
+#define GL_FOG_COORDINATE_ARRAY_STRIDE_EXT 0x8455
+#define GL_FOG_COORDINATE_ARRAY_POINTER_EXT 0x8456
+#define GL_FOG_COORDINATE_ARRAY_EXT 0x8457
+#endif
+
+#ifndef GL_REND_screen_coordinates
+#define GL_SCREEN_COORDINATES_REND 0x8490
+#define GL_INVERTED_SCREEN_W_REND 0x8491
+#endif
+
+#ifndef GL_EXT_coordinate_frame
+#define GL_TANGENT_ARRAY_EXT 0x8439
+#define GL_BINORMAL_ARRAY_EXT 0x843A
+#define GL_CURRENT_TANGENT_EXT 0x843B
+#define GL_CURRENT_BINORMAL_EXT 0x843C
+#define GL_TANGENT_ARRAY_TYPE_EXT 0x843E
+#define GL_TANGENT_ARRAY_STRIDE_EXT 0x843F
+#define GL_BINORMAL_ARRAY_TYPE_EXT 0x8440
+#define GL_BINORMAL_ARRAY_STRIDE_EXT 0x8441
+#define GL_TANGENT_ARRAY_POINTER_EXT 0x8442
+#define GL_BINORMAL_ARRAY_POINTER_EXT 0x8443
+#define GL_MAP1_TANGENT_EXT 0x8444
+#define GL_MAP2_TANGENT_EXT 0x8445
+#define GL_MAP1_BINORMAL_EXT 0x8446
+#define GL_MAP2_BINORMAL_EXT 0x8447
+#endif
+
+#ifndef GL_EXT_texture_env_combine
+#define GL_COMBINE_EXT 0x8570
+#define GL_COMBINE_RGB_EXT 0x8571
+#define GL_COMBINE_ALPHA_EXT 0x8572
+#define GL_RGB_SCALE_EXT 0x8573
+#define GL_ADD_SIGNED_EXT 0x8574
+#define GL_INTERPOLATE_EXT 0x8575
+#define GL_CONSTANT_EXT 0x8576
+#define GL_PRIMARY_COLOR_EXT 0x8577
+#define GL_PREVIOUS_EXT 0x8578
+#define GL_SOURCE0_RGB_EXT 0x8580
+#define GL_SOURCE1_RGB_EXT 0x8581
+#define GL_SOURCE2_RGB_EXT 0x8582
+#define GL_SOURCE0_ALPHA_EXT 0x8588
+#define GL_SOURCE1_ALPHA_EXT 0x8589
+#define GL_SOURCE2_ALPHA_EXT 0x858A
+#define GL_OPERAND0_RGB_EXT 0x8590
+#define GL_OPERAND1_RGB_EXT 0x8591
+#define GL_OPERAND2_RGB_EXT 0x8592
+#define GL_OPERAND0_ALPHA_EXT 0x8598
+#define GL_OPERAND1_ALPHA_EXT 0x8599
+#define GL_OPERAND2_ALPHA_EXT 0x859A
+#endif
+
+#ifndef GL_APPLE_specular_vector
+#define GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE 0x85B0
+#endif
+
+#ifndef GL_APPLE_transform_hint
+#define GL_TRANSFORM_HINT_APPLE 0x85B1
+#endif
+
+#ifndef GL_SGIX_fog_scale
+#define GL_FOG_SCALE_SGIX 0x81FC
+#define GL_FOG_SCALE_VALUE_SGIX 0x81FD
+#endif
+
+#ifndef GL_SUNX_constant_data
+#define GL_UNPACK_CONSTANT_DATA_SUNX 0x81D5
+#define GL_TEXTURE_CONSTANT_DATA_SUNX 0x81D6
+#endif
+
+#ifndef GL_SUN_global_alpha
+#define GL_GLOBAL_ALPHA_SUN 0x81D9
+#define GL_GLOBAL_ALPHA_FACTOR_SUN 0x81DA
+#endif
+
+#ifndef GL_SUN_triangle_list
+#define GL_RESTART_SUN 0x0001
+#define GL_REPLACE_MIDDLE_SUN 0x0002
+#define GL_REPLACE_OLDEST_SUN 0x0003
+#define GL_TRIANGLE_LIST_SUN 0x81D7
+#define GL_REPLACEMENT_CODE_SUN 0x81D8
+#define GL_REPLACEMENT_CODE_ARRAY_SUN 0x85C0
+#define GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN 0x85C1
+#define GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN 0x85C2
+#define GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN 0x85C3
+#define GL_R1UI_V3F_SUN 0x85C4
+#define GL_R1UI_C4UB_V3F_SUN 0x85C5
+#define GL_R1UI_C3F_V3F_SUN 0x85C6
+#define GL_R1UI_N3F_V3F_SUN 0x85C7
+#define GL_R1UI_C4F_N3F_V3F_SUN 0x85C8
+#define GL_R1UI_T2F_V3F_SUN 0x85C9
+#define GL_R1UI_T2F_N3F_V3F_SUN 0x85CA
+#define GL_R1UI_T2F_C4F_N3F_V3F_SUN 0x85CB
+#endif
+
+#ifndef GL_SUN_vertex
+#endif
+
+#ifndef GL_EXT_blend_func_separate
+#define GL_BLEND_DST_RGB_EXT 0x80C8
+#define GL_BLEND_SRC_RGB_EXT 0x80C9
+#define GL_BLEND_DST_ALPHA_EXT 0x80CA
+#define GL_BLEND_SRC_ALPHA_EXT 0x80CB
+#endif
+
+#ifndef GL_INGR_color_clamp
+#define GL_RED_MIN_CLAMP_INGR 0x8560
+#define GL_GREEN_MIN_CLAMP_INGR 0x8561
+#define GL_BLUE_MIN_CLAMP_INGR 0x8562
+#define GL_ALPHA_MIN_CLAMP_INGR 0x8563
+#define GL_RED_MAX_CLAMP_INGR 0x8564
+#define GL_GREEN_MAX_CLAMP_INGR 0x8565
+#define GL_BLUE_MAX_CLAMP_INGR 0x8566
+#define GL_ALPHA_MAX_CLAMP_INGR 0x8567
+#endif
+
+#ifndef GL_INGR_interlace_read
+#define GL_INTERLACE_READ_INGR 0x8568
+#endif
+
+#ifndef GL_EXT_stencil_wrap
+#define GL_INCR_WRAP_EXT 0x8507
+#define GL_DECR_WRAP_EXT 0x8508
+#endif
+
+#ifndef GL_EXT_422_pixels
+#define GL_422_EXT 0x80CC
+#define GL_422_REV_EXT 0x80CD
+#define GL_422_AVERAGE_EXT 0x80CE
+#define GL_422_REV_AVERAGE_EXT 0x80CF
+#endif
+
+#ifndef GL_NV_texgen_reflection
+#define GL_NORMAL_MAP_NV 0x8511
+#define GL_REFLECTION_MAP_NV 0x8512
+#endif
+
+#ifndef GL_EXT_texture_cube_map
+#define GL_NORMAL_MAP_EXT 0x8511
+#define GL_REFLECTION_MAP_EXT 0x8512
+#define GL_TEXTURE_CUBE_MAP_EXT 0x8513
+#define GL_TEXTURE_BINDING_CUBE_MAP_EXT 0x8514
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT 0x8515
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT 0x8516
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT 0x8517
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT 0x8518
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT 0x8519
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT 0x851A
+#define GL_PROXY_TEXTURE_CUBE_MAP_EXT 0x851B
+#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT 0x851C
+#endif
+
+#ifndef GL_SUN_convolution_border_modes
+#define GL_WRAP_BORDER_SUN 0x81D4
+#endif
+
+#ifndef GL_EXT_texture_env_add
+#endif
+
+#ifndef GL_EXT_texture_lod_bias
+#define GL_MAX_TEXTURE_LOD_BIAS_EXT 0x84FD
+#define GL_TEXTURE_FILTER_CONTROL_EXT 0x8500
+#define GL_TEXTURE_LOD_BIAS_EXT 0x8501
+#endif
+
+#ifndef GL_EXT_texture_filter_anisotropic
+#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE
+#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF
+#endif
+
+#ifndef GL_EXT_vertex_weighting
+#define GL_MODELVIEW0_STACK_DEPTH_EXT GL_MODELVIEW_STACK_DEPTH
+#define GL_MODELVIEW1_STACK_DEPTH_EXT 0x8502
+#define GL_MODELVIEW0_MATRIX_EXT GL_MODELVIEW_MATRIX
+#define GL_MODELVIEW1_MATRIX_EXT 0x8506
+#define GL_VERTEX_WEIGHTING_EXT 0x8509
+#define GL_MODELVIEW0_EXT GL_MODELVIEW
+#define GL_MODELVIEW1_EXT 0x850A
+#define GL_CURRENT_VERTEX_WEIGHT_EXT 0x850B
+#define GL_VERTEX_WEIGHT_ARRAY_EXT 0x850C
+#define GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT 0x850D
+#define GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT 0x850E
+#define GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT 0x850F
+#define GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT 0x8510
+#endif
+
+#ifndef GL_NV_light_max_exponent
+#define GL_MAX_SHININESS_NV 0x8504
+#define GL_MAX_SPOT_EXPONENT_NV 0x8505
+#endif
+
+#ifndef GL_NV_vertex_array_range
+#define GL_VERTEX_ARRAY_RANGE_NV 0x851D
+#define GL_VERTEX_ARRAY_RANGE_LENGTH_NV 0x851E
+#define GL_VERTEX_ARRAY_RANGE_VALID_NV 0x851F
+#define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV 0x8520
+#define GL_VERTEX_ARRAY_RANGE_POINTER_NV 0x8521
+#endif
+
+#ifndef GL_NV_register_combiners
+#define GL_REGISTER_COMBINERS_NV 0x8522
+#define GL_VARIABLE_A_NV 0x8523
+#define GL_VARIABLE_B_NV 0x8524
+#define GL_VARIABLE_C_NV 0x8525
+#define GL_VARIABLE_D_NV 0x8526
+#define GL_VARIABLE_E_NV 0x8527
+#define GL_VARIABLE_F_NV 0x8528
+#define GL_VARIABLE_G_NV 0x8529
+#define GL_CONSTANT_COLOR0_NV 0x852A
+#define GL_CONSTANT_COLOR1_NV 0x852B
+#define GL_PRIMARY_COLOR_NV 0x852C
+#define GL_SECONDARY_COLOR_NV 0x852D
+#define GL_SPARE0_NV 0x852E
+#define GL_SPARE1_NV 0x852F
+#define GL_DISCARD_NV 0x8530
+#define GL_E_TIMES_F_NV 0x8531
+#define GL_SPARE0_PLUS_SECONDARY_COLOR_NV 0x8532
+#define GL_UNSIGNED_IDENTITY_NV 0x8536
+#define GL_UNSIGNED_INVERT_NV 0x8537
+#define GL_EXPAND_NORMAL_NV 0x8538
+#define GL_EXPAND_NEGATE_NV 0x8539
+#define GL_HALF_BIAS_NORMAL_NV 0x853A
+#define GL_HALF_BIAS_NEGATE_NV 0x853B
+#define GL_SIGNED_IDENTITY_NV 0x853C
+#define GL_SIGNED_NEGATE_NV 0x853D
+#define GL_SCALE_BY_TWO_NV 0x853E
+#define GL_SCALE_BY_FOUR_NV 0x853F
+#define GL_SCALE_BY_ONE_HALF_NV 0x8540
+#define GL_BIAS_BY_NEGATIVE_ONE_HALF_NV 0x8541
+#define GL_COMBINER_INPUT_NV 0x8542
+#define GL_COMBINER_MAPPING_NV 0x8543
+#define GL_COMBINER_COMPONENT_USAGE_NV 0x8544
+#define GL_COMBINER_AB_DOT_PRODUCT_NV 0x8545
+#define GL_COMBINER_CD_DOT_PRODUCT_NV 0x8546
+#define GL_COMBINER_MUX_SUM_NV 0x8547
+#define GL_COMBINER_SCALE_NV 0x8548
+#define GL_COMBINER_BIAS_NV 0x8549
+#define GL_COMBINER_AB_OUTPUT_NV 0x854A
+#define GL_COMBINER_CD_OUTPUT_NV 0x854B
+#define GL_COMBINER_SUM_OUTPUT_NV 0x854C
+#define GL_MAX_GENERAL_COMBINERS_NV 0x854D
+#define GL_NUM_GENERAL_COMBINERS_NV 0x854E
+#define GL_COLOR_SUM_CLAMP_NV 0x854F
+#define GL_COMBINER0_NV 0x8550
+#define GL_COMBINER1_NV 0x8551
+#define GL_COMBINER2_NV 0x8552
+#define GL_COMBINER3_NV 0x8553
+#define GL_COMBINER4_NV 0x8554
+#define GL_COMBINER5_NV 0x8555
+#define GL_COMBINER6_NV 0x8556
+#define GL_COMBINER7_NV 0x8557
+/* reuse GL_TEXTURE0_ARB */
+/* reuse GL_TEXTURE1_ARB */
+/* reuse GL_ZERO */
+/* reuse GL_NONE */
+/* reuse GL_FOG */
+#endif
+
+#ifndef GL_NV_fog_distance
+#define GL_FOG_DISTANCE_MODE_NV 0x855A
+#define GL_EYE_RADIAL_NV 0x855B
+#define GL_EYE_PLANE_ABSOLUTE_NV 0x855C
+/* reuse GL_EYE_PLANE */
+#endif
+
+#ifndef GL_NV_texgen_emboss
+#define GL_EMBOSS_LIGHT_NV 0x855D
+#define GL_EMBOSS_CONSTANT_NV 0x855E
+#define GL_EMBOSS_MAP_NV 0x855F
+#endif
+
+#ifndef GL_NV_blend_square
+#endif
+
+#ifndef GL_NV_texture_env_combine4
+#define GL_COMBINE4_NV 0x8503
+#define GL_SOURCE3_RGB_NV 0x8583
+#define GL_SOURCE3_ALPHA_NV 0x858B
+#define GL_OPERAND3_RGB_NV 0x8593
+#define GL_OPERAND3_ALPHA_NV 0x859B
+#endif
+
+#ifndef GL_MESA_resize_buffers
+#endif
+
+#ifndef GL_MESA_window_pos
+#endif
+
+#ifndef GL_EXT_texture_compression_s3tc
+#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0
+#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1
+#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2
+#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3
+#endif
+
+#ifndef GL_IBM_cull_vertex
+#define GL_CULL_VERTEX_IBM 103050
+#endif
+
+#ifndef GL_IBM_multimode_draw_arrays
+#endif
+
+#ifndef GL_IBM_vertex_array_lists
+#define GL_VERTEX_ARRAY_LIST_IBM 103070
+#define GL_NORMAL_ARRAY_LIST_IBM 103071
+#define GL_COLOR_ARRAY_LIST_IBM 103072
+#define GL_INDEX_ARRAY_LIST_IBM 103073
+#define GL_TEXTURE_COORD_ARRAY_LIST_IBM 103074
+#define GL_EDGE_FLAG_ARRAY_LIST_IBM 103075
+#define GL_FOG_COORDINATE_ARRAY_LIST_IBM 103076
+#define GL_SECONDARY_COLOR_ARRAY_LIST_IBM 103077
+#define GL_VERTEX_ARRAY_LIST_STRIDE_IBM 103080
+#define GL_NORMAL_ARRAY_LIST_STRIDE_IBM 103081
+#define GL_COLOR_ARRAY_LIST_STRIDE_IBM 103082
+#define GL_INDEX_ARRAY_LIST_STRIDE_IBM 103083
+#define GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM 103084
+#define GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM 103085
+#define GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM 103086
+#define GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM 103087
+#endif
+
+#ifndef GL_SGIX_subsample
+#define GL_PACK_SUBSAMPLE_RATE_SGIX 0x85A0
+#define GL_UNPACK_SUBSAMPLE_RATE_SGIX 0x85A1
+#define GL_PIXEL_SUBSAMPLE_4444_SGIX 0x85A2
+#define GL_PIXEL_SUBSAMPLE_2424_SGIX 0x85A3
+#define GL_PIXEL_SUBSAMPLE_4242_SGIX 0x85A4
+#endif
+
+#ifndef GL_SGIX_ycrcb_subsample
+#endif
+
+#ifndef GL_SGIX_ycrcba
+#define GL_YCRCB_SGIX 0x8318
+#define GL_YCRCBA_SGIX 0x8319
+#endif
+
+#ifndef GL_SGI_depth_pass_instrument
+#define GL_DEPTH_PASS_INSTRUMENT_SGIX 0x8310
+#define GL_DEPTH_PASS_INSTRUMENT_COUNTERS_SGIX 0x8311
+#define GL_DEPTH_PASS_INSTRUMENT_MAX_SGIX 0x8312
+#endif
+
+#ifndef GL_3DFX_texture_compression_FXT1
+#define GL_COMPRESSED_RGB_FXT1_3DFX 0x86B0
+#define GL_COMPRESSED_RGBA_FXT1_3DFX 0x86B1
+#endif
+
+#ifndef GL_3DFX_multisample
+#define GL_MULTISAMPLE_3DFX 0x86B2
+#define GL_SAMPLE_BUFFERS_3DFX 0x86B3
+#define GL_SAMPLES_3DFX 0x86B4
+#define GL_MULTISAMPLE_BIT_3DFX 0x20000000
+#endif
+
+#ifndef GL_3DFX_tbuffer
+#endif
+
+#ifndef GL_EXT_multisample
+#define GL_MULTISAMPLE_EXT 0x809D
+#define GL_SAMPLE_ALPHA_TO_MASK_EXT 0x809E
+#define GL_SAMPLE_ALPHA_TO_ONE_EXT 0x809F
+#define GL_SAMPLE_MASK_EXT 0x80A0
+#define GL_1PASS_EXT 0x80A1
+#define GL_2PASS_0_EXT 0x80A2
+#define GL_2PASS_1_EXT 0x80A3
+#define GL_4PASS_0_EXT 0x80A4
+#define GL_4PASS_1_EXT 0x80A5
+#define GL_4PASS_2_EXT 0x80A6
+#define GL_4PASS_3_EXT 0x80A7
+#define GL_SAMPLE_BUFFERS_EXT 0x80A8
+#define GL_SAMPLES_EXT 0x80A9
+#define GL_SAMPLE_MASK_VALUE_EXT 0x80AA
+#define GL_SAMPLE_MASK_INVERT_EXT 0x80AB
+#define GL_SAMPLE_PATTERN_EXT 0x80AC
+#define GL_MULTISAMPLE_BIT_EXT 0x20000000
+#endif
+
+#ifndef GL_SGIX_vertex_preclip
+#define GL_VERTEX_PRECLIP_SGIX 0x83EE
+#define GL_VERTEX_PRECLIP_HINT_SGIX 0x83EF
+#endif
+
+#ifndef GL_SGIX_convolution_accuracy
+#define GL_CONVOLUTION_HINT_SGIX 0x8316
+#endif
+
+#ifndef GL_SGIX_resample
+#define GL_PACK_RESAMPLE_SGIX 0x842C
+#define GL_UNPACK_RESAMPLE_SGIX 0x842D
+#define GL_RESAMPLE_REPLICATE_SGIX 0x842E
+#define GL_RESAMPLE_ZERO_FILL_SGIX 0x842F
+#define GL_RESAMPLE_DECIMATE_SGIX 0x8430
+#endif
+
+#ifndef GL_SGIS_point_line_texgen
+#define GL_EYE_DISTANCE_TO_POINT_SGIS 0x81F0
+#define GL_OBJECT_DISTANCE_TO_POINT_SGIS 0x81F1
+#define GL_EYE_DISTANCE_TO_LINE_SGIS 0x81F2
+#define GL_OBJECT_DISTANCE_TO_LINE_SGIS 0x81F3
+#define GL_EYE_POINT_SGIS 0x81F4
+#define GL_OBJECT_POINT_SGIS 0x81F5
+#define GL_EYE_LINE_SGIS 0x81F6
+#define GL_OBJECT_LINE_SGIS 0x81F7
+#endif
+
+#ifndef GL_SGIS_texture_color_mask
+#define GL_TEXTURE_COLOR_WRITEMASK_SGIS 0x81EF
+#endif
+
+#ifndef GL_NV_fence
+#define GL_ALL_COMPLETED_NV 0x84F2
+#define GL_FENCE_STATUS_NV 0x84F3
+#define GL_FENCE_CONDITION_NV 0x84F4
+#endif
+
+#ifndef GL_IBM_texture_mirrored_repeat
+#define GL_MIRRORED_REPEAT_IBM 0x8370
+#endif
+
+#ifndef GL_NV_evaluators
+#define GL_EVAL_2D_NV 0x86C0
+#define GL_EVAL_TRIANGULAR_2D_NV 0x86C1
+#define GL_MAP_TESSELLATION_NV 0x86C2
+#define GL_MAP_ATTRIB_U_ORDER_NV 0x86C3
+#define GL_MAP_ATTRIB_V_ORDER_NV 0x86C4
+#define GL_EVAL_FRACTIONAL_TESSELLATION_NV 0x86C5
+#define GL_EVAL_VERTEX_ATTRIB0_NV 0x86C6
+#define GL_EVAL_VERTEX_ATTRIB1_NV 0x86C7
+#define GL_EVAL_VERTEX_ATTRIB2_NV 0x86C8
+#define GL_EVAL_VERTEX_ATTRIB3_NV 0x86C9
+#define GL_EVAL_VERTEX_ATTRIB4_NV 0x86CA
+#define GL_EVAL_VERTEX_ATTRIB5_NV 0x86CB
+#define GL_EVAL_VERTEX_ATTRIB6_NV 0x86CC
+#define GL_EVAL_VERTEX_ATTRIB7_NV 0x86CD
+#define GL_EVAL_VERTEX_ATTRIB8_NV 0x86CE
+#define GL_EVAL_VERTEX_ATTRIB9_NV 0x86CF
+#define GL_EVAL_VERTEX_ATTRIB10_NV 0x86D0
+#define GL_EVAL_VERTEX_ATTRIB11_NV 0x86D1
+#define GL_EVAL_VERTEX_ATTRIB12_NV 0x86D2
+#define GL_EVAL_VERTEX_ATTRIB13_NV 0x86D3
+#define GL_EVAL_VERTEX_ATTRIB14_NV 0x86D4
+#define GL_EVAL_VERTEX_ATTRIB15_NV 0x86D5
+#define GL_MAX_MAP_TESSELLATION_NV 0x86D6
+#define GL_MAX_RATIONAL_EVAL_ORDER_NV 0x86D7
+#endif
+
+#ifndef GL_NV_packed_depth_stencil
+#define GL_DEPTH_STENCIL_NV 0x84F9
+#define GL_UNSIGNED_INT_24_8_NV 0x84FA
+#endif
+
+#ifndef GL_NV_register_combiners2
+#define GL_PER_STAGE_CONSTANTS_NV 0x8535
+#endif
+
+#ifndef GL_NV_texture_compression_vtc
+#endif
+
+#ifndef GL_NV_texture_rectangle
+#define GL_TEXTURE_RECTANGLE_NV 0x84F5
+#define GL_TEXTURE_BINDING_RECTANGLE_NV 0x84F6
+#define GL_PROXY_TEXTURE_RECTANGLE_NV 0x84F7
+#define GL_MAX_TEXTURE_RECTANGLE_SIZE_NV 0x84F8
+#endif
+
+#ifndef GL_NV_texture_shader
+#define GL_OFFSET_TEXTURE_RECTANGLE_NV 0x864C
+#define GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV 0x864D
+#define GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV 0x864E
+#define GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV 0x86D9
+#define GL_UNSIGNED_INT_S8_S8_8_8_NV 0x86DA
+#define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV 0x86DB
+#define GL_DSDT_MAG_INTENSITY_NV 0x86DC
+#define GL_SHADER_CONSISTENT_NV 0x86DD
+#define GL_TEXTURE_SHADER_NV 0x86DE
+#define GL_SHADER_OPERATION_NV 0x86DF
+#define GL_CULL_MODES_NV 0x86E0
+#define GL_OFFSET_TEXTURE_MATRIX_NV 0x86E1
+#define GL_OFFSET_TEXTURE_SCALE_NV 0x86E2
+#define GL_OFFSET_TEXTURE_BIAS_NV 0x86E3
+#define GL_OFFSET_TEXTURE_2D_MATRIX_NV GL_OFFSET_TEXTURE_MATRIX_NV
+#define GL_OFFSET_TEXTURE_2D_SCALE_NV GL_OFFSET_TEXTURE_SCALE_NV
+#define GL_OFFSET_TEXTURE_2D_BIAS_NV GL_OFFSET_TEXTURE_BIAS_NV
+#define GL_PREVIOUS_TEXTURE_INPUT_NV 0x86E4
+#define GL_CONST_EYE_NV 0x86E5
+#define GL_PASS_THROUGH_NV 0x86E6
+#define GL_CULL_FRAGMENT_NV 0x86E7
+#define GL_OFFSET_TEXTURE_2D_NV 0x86E8
+#define GL_DEPENDENT_AR_TEXTURE_2D_NV 0x86E9
+#define GL_DEPENDENT_GB_TEXTURE_2D_NV 0x86EA
+#define GL_DOT_PRODUCT_NV 0x86EC
+#define GL_DOT_PRODUCT_DEPTH_REPLACE_NV 0x86ED
+#define GL_DOT_PRODUCT_TEXTURE_2D_NV 0x86EE
+#define GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV 0x86F0
+#define GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV 0x86F1
+#define GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV 0x86F2
+#define GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV 0x86F3
+#define GL_HILO_NV 0x86F4
+#define GL_DSDT_NV 0x86F5
+#define GL_DSDT_MAG_NV 0x86F6
+#define GL_DSDT_MAG_VIB_NV 0x86F7
+#define GL_HILO16_NV 0x86F8
+#define GL_SIGNED_HILO_NV 0x86F9
+#define GL_SIGNED_HILO16_NV 0x86FA
+#define GL_SIGNED_RGBA_NV 0x86FB
+#define GL_SIGNED_RGBA8_NV 0x86FC
+#define GL_SIGNED_RGB_NV 0x86FE
+#define GL_SIGNED_RGB8_NV 0x86FF
+#define GL_SIGNED_LUMINANCE_NV 0x8701
+#define GL_SIGNED_LUMINANCE8_NV 0x8702
+#define GL_SIGNED_LUMINANCE_ALPHA_NV 0x8703
+#define GL_SIGNED_LUMINANCE8_ALPHA8_NV 0x8704
+#define GL_SIGNED_ALPHA_NV 0x8705
+#define GL_SIGNED_ALPHA8_NV 0x8706
+#define GL_SIGNED_INTENSITY_NV 0x8707
+#define GL_SIGNED_INTENSITY8_NV 0x8708
+#define GL_DSDT8_NV 0x8709
+#define GL_DSDT8_MAG8_NV 0x870A
+#define GL_DSDT8_MAG8_INTENSITY8_NV 0x870B
+#define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV 0x870C
+#define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D
+#define GL_HI_SCALE_NV 0x870E
+#define GL_LO_SCALE_NV 0x870F
+#define GL_DS_SCALE_NV 0x8710
+#define GL_DT_SCALE_NV 0x8711
+#define GL_MAGNITUDE_SCALE_NV 0x8712
+#define GL_VIBRANCE_SCALE_NV 0x8713
+#define GL_HI_BIAS_NV 0x8714
+#define GL_LO_BIAS_NV 0x8715
+#define GL_DS_BIAS_NV 0x8716
+#define GL_DT_BIAS_NV 0x8717
+#define GL_MAGNITUDE_BIAS_NV 0x8718
+#define GL_VIBRANCE_BIAS_NV 0x8719
+#define GL_TEXTURE_BORDER_VALUES_NV 0x871A
+#define GL_TEXTURE_HI_SIZE_NV 0x871B
+#define GL_TEXTURE_LO_SIZE_NV 0x871C
+#define GL_TEXTURE_DS_SIZE_NV 0x871D
+#define GL_TEXTURE_DT_SIZE_NV 0x871E
+#define GL_TEXTURE_MAG_SIZE_NV 0x871F
+#endif
+
+#ifndef GL_NV_texture_shader2
+#define GL_DOT_PRODUCT_TEXTURE_3D_NV 0x86EF
+#endif
+
+#ifndef GL_NV_vertex_array_range2
+#define GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV 0x8533
+#endif
+
+#ifndef GL_NV_vertex_program
+#define GL_VERTEX_PROGRAM_NV 0x8620
+#define GL_VERTEX_STATE_PROGRAM_NV 0x8621
+#define GL_ATTRIB_ARRAY_SIZE_NV 0x8623
+#define GL_ATTRIB_ARRAY_STRIDE_NV 0x8624
+#define GL_ATTRIB_ARRAY_TYPE_NV 0x8625
+#define GL_CURRENT_ATTRIB_NV 0x8626
+#define GL_PROGRAM_LENGTH_NV 0x8627
+#define GL_PROGRAM_STRING_NV 0x8628
+#define GL_MODELVIEW_PROJECTION_NV 0x8629
+#define GL_IDENTITY_NV 0x862A
+#define GL_INVERSE_NV 0x862B
+#define GL_TRANSPOSE_NV 0x862C
+#define GL_INVERSE_TRANSPOSE_NV 0x862D
+#define GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV 0x862E
+#define GL_MAX_TRACK_MATRICES_NV 0x862F
+#define GL_MATRIX0_NV 0x8630
+#define GL_MATRIX1_NV 0x8631
+#define GL_MATRIX2_NV 0x8632
+#define GL_MATRIX3_NV 0x8633
+#define GL_MATRIX4_NV 0x8634
+#define GL_MATRIX5_NV 0x8635
+#define GL_MATRIX6_NV 0x8636
+#define GL_MATRIX7_NV 0x8637
+#define GL_CURRENT_MATRIX_STACK_DEPTH_NV 0x8640
+#define GL_CURRENT_MATRIX_NV 0x8641
+#define GL_VERTEX_PROGRAM_POINT_SIZE_NV 0x8642
+#define GL_VERTEX_PROGRAM_TWO_SIDE_NV 0x8643
+#define GL_PROGRAM_PARAMETER_NV 0x8644
+#define GL_ATTRIB_ARRAY_POINTER_NV 0x8645
+#define GL_PROGRAM_TARGET_NV 0x8646
+#define GL_PROGRAM_RESIDENT_NV 0x8647
+#define GL_TRACK_MATRIX_NV 0x8648
+#define GL_TRACK_MATRIX_TRANSFORM_NV 0x8649
+#define GL_VERTEX_PROGRAM_BINDING_NV 0x864A
+#define GL_PROGRAM_ERROR_POSITION_NV 0x864B
+#define GL_VERTEX_ATTRIB_ARRAY0_NV 0x8650
+#define GL_VERTEX_ATTRIB_ARRAY1_NV 0x8651
+#define GL_VERTEX_ATTRIB_ARRAY2_NV 0x8652
+#define GL_VERTEX_ATTRIB_ARRAY3_NV 0x8653
+#define GL_VERTEX_ATTRIB_ARRAY4_NV 0x8654
+#define GL_VERTEX_ATTRIB_ARRAY5_NV 0x8655
+#define GL_VERTEX_ATTRIB_ARRAY6_NV 0x8656
+#define GL_VERTEX_ATTRIB_ARRAY7_NV 0x8657
+#define GL_VERTEX_ATTRIB_ARRAY8_NV 0x8658
+#define GL_VERTEX_ATTRIB_ARRAY9_NV 0x8659
+#define GL_VERTEX_ATTRIB_ARRAY10_NV 0x865A
+#define GL_VERTEX_ATTRIB_ARRAY11_NV 0x865B
+#define GL_VERTEX_ATTRIB_ARRAY12_NV 0x865C
+#define GL_VERTEX_ATTRIB_ARRAY13_NV 0x865D
+#define GL_VERTEX_ATTRIB_ARRAY14_NV 0x865E
+#define GL_VERTEX_ATTRIB_ARRAY15_NV 0x865F
+#define GL_MAP1_VERTEX_ATTRIB0_4_NV 0x8660
+#define GL_MAP1_VERTEX_ATTRIB1_4_NV 0x8661
+#define GL_MAP1_VERTEX_ATTRIB2_4_NV 0x8662
+#define GL_MAP1_VERTEX_ATTRIB3_4_NV 0x8663
+#define GL_MAP1_VERTEX_ATTRIB4_4_NV 0x8664
+#define GL_MAP1_VERTEX_ATTRIB5_4_NV 0x8665
+#define GL_MAP1_VERTEX_ATTRIB6_4_NV 0x8666
+#define GL_MAP1_VERTEX_ATTRIB7_4_NV 0x8667
+#define GL_MAP1_VERTEX_ATTRIB8_4_NV 0x8668
+#define GL_MAP1_VERTEX_ATTRIB9_4_NV 0x8669
+#define GL_MAP1_VERTEX_ATTRIB10_4_NV 0x866A
+#define GL_MAP1_VERTEX_ATTRIB11_4_NV 0x866B
+#define GL_MAP1_VERTEX_ATTRIB12_4_NV 0x866C
+#define GL_MAP1_VERTEX_ATTRIB13_4_NV 0x866D
+#define GL_MAP1_VERTEX_ATTRIB14_4_NV 0x866E
+#define GL_MAP1_VERTEX_ATTRIB15_4_NV 0x866F
+#define GL_MAP2_VERTEX_ATTRIB0_4_NV 0x8670
+#define GL_MAP2_VERTEX_ATTRIB1_4_NV 0x8671
+#define GL_MAP2_VERTEX_ATTRIB2_4_NV 0x8672
+#define GL_MAP2_VERTEX_ATTRIB3_4_NV 0x8673
+#define GL_MAP2_VERTEX_ATTRIB4_4_NV 0x8674
+#define GL_MAP2_VERTEX_ATTRIB5_4_NV 0x8675
+#define GL_MAP2_VERTEX_ATTRIB6_4_NV 0x8676
+#define GL_MAP2_VERTEX_ATTRIB7_4_NV 0x8677
+#define GL_MAP2_VERTEX_ATTRIB8_4_NV 0x8678
+#define GL_MAP2_VERTEX_ATTRIB9_4_NV 0x8679
+#define GL_MAP2_VERTEX_ATTRIB10_4_NV 0x867A
+#define GL_MAP2_VERTEX_ATTRIB11_4_NV 0x867B
+#define GL_MAP2_VERTEX_ATTRIB12_4_NV 0x867C
+#define GL_MAP2_VERTEX_ATTRIB13_4_NV 0x867D
+#define GL_MAP2_VERTEX_ATTRIB14_4_NV 0x867E
+#define GL_MAP2_VERTEX_ATTRIB15_4_NV 0x867F
+#endif
+
+#ifndef GL_SGIX_texture_coordinate_clamp
+#define GL_TEXTURE_MAX_CLAMP_S_SGIX 0x8369
+#define GL_TEXTURE_MAX_CLAMP_T_SGIX 0x836A
+#define GL_TEXTURE_MAX_CLAMP_R_SGIX 0x836B
+#endif
+
+#ifndef GL_SGIX_scalebias_hint
+#define GL_SCALEBIAS_HINT_SGIX 0x8322
+#endif
+
+#ifndef GL_OML_interlace
+#define GL_INTERLACE_OML 0x8980
+#define GL_INTERLACE_READ_OML 0x8981
+#endif
+
+#ifndef GL_OML_subsample
+#define GL_FORMAT_SUBSAMPLE_24_24_OML 0x8982
+#define GL_FORMAT_SUBSAMPLE_244_244_OML 0x8983
+#endif
+
+#ifndef GL_OML_resample
+#define GL_PACK_RESAMPLE_OML 0x8984
+#define GL_UNPACK_RESAMPLE_OML 0x8985
+#define GL_RESAMPLE_REPLICATE_OML 0x8986
+#define GL_RESAMPLE_ZERO_FILL_OML 0x8987
+#define GL_RESAMPLE_AVERAGE_OML 0x8988
+#define GL_RESAMPLE_DECIMATE_OML 0x8989
+#endif
+
+#ifndef GL_NV_copy_depth_to_color
+#define GL_DEPTH_STENCIL_TO_RGBA_NV 0x886E
+#define GL_DEPTH_STENCIL_TO_BGRA_NV 0x886F
+#endif
+
+#ifndef GL_ATI_envmap_bumpmap
+#define GL_BUMP_ROT_MATRIX_ATI 0x8775
+#define GL_BUMP_ROT_MATRIX_SIZE_ATI 0x8776
+#define GL_BUMP_NUM_TEX_UNITS_ATI 0x8777
+#define GL_BUMP_TEX_UNITS_ATI 0x8778
+#define GL_DUDV_ATI 0x8779
+#define GL_DU8DV8_ATI 0x877A
+#define GL_BUMP_ENVMAP_ATI 0x877B
+#define GL_BUMP_TARGET_ATI 0x877C
+#endif
+
+#ifndef GL_ATI_fragment_shader
+#define GL_FRAGMENT_SHADER_ATI 0x8920
+#define GL_REG_0_ATI 0x8921
+#define GL_REG_1_ATI 0x8922
+#define GL_REG_2_ATI 0x8923
+#define GL_REG_3_ATI 0x8924
+#define GL_REG_4_ATI 0x8925
+#define GL_REG_5_ATI 0x8926
+#define GL_REG_6_ATI 0x8927
+#define GL_REG_7_ATI 0x8928
+#define GL_REG_8_ATI 0x8929
+#define GL_REG_9_ATI 0x892A
+#define GL_REG_10_ATI 0x892B
+#define GL_REG_11_ATI 0x892C
+#define GL_REG_12_ATI 0x892D
+#define GL_REG_13_ATI 0x892E
+#define GL_REG_14_ATI 0x892F
+#define GL_REG_15_ATI 0x8930
+#define GL_REG_16_ATI 0x8931
+#define GL_REG_17_ATI 0x8932
+#define GL_REG_18_ATI 0x8933
+#define GL_REG_19_ATI 0x8934
+#define GL_REG_20_ATI 0x8935
+#define GL_REG_21_ATI 0x8936
+#define GL_REG_22_ATI 0x8937
+#define GL_REG_23_ATI 0x8938
+#define GL_REG_24_ATI 0x8939
+#define GL_REG_25_ATI 0x893A
+#define GL_REG_26_ATI 0x893B
+#define GL_REG_27_ATI 0x893C
+#define GL_REG_28_ATI 0x893D
+#define GL_REG_29_ATI 0x893E
+#define GL_REG_30_ATI 0x893F
+#define GL_REG_31_ATI 0x8940
+#define GL_CON_0_ATI 0x8941
+#define GL_CON_1_ATI 0x8942
+#define GL_CON_2_ATI 0x8943
+#define GL_CON_3_ATI 0x8944
+#define GL_CON_4_ATI 0x8945
+#define GL_CON_5_ATI 0x8946
+#define GL_CON_6_ATI 0x8947
+#define GL_CON_7_ATI 0x8948
+#define GL_CON_8_ATI 0x8949
+#define GL_CON_9_ATI 0x894A
+#define GL_CON_10_ATI 0x894B
+#define GL_CON_11_ATI 0x894C
+#define GL_CON_12_ATI 0x894D
+#define GL_CON_13_ATI 0x894E
+#define GL_CON_14_ATI 0x894F
+#define GL_CON_15_ATI 0x8950
+#define GL_CON_16_ATI 0x8951
+#define GL_CON_17_ATI 0x8952
+#define GL_CON_18_ATI 0x8953
+#define GL_CON_19_ATI 0x8954
+#define GL_CON_20_ATI 0x8955
+#define GL_CON_21_ATI 0x8956
+#define GL_CON_22_ATI 0x8957
+#define GL_CON_23_ATI 0x8958
+#define GL_CON_24_ATI 0x8959
+#define GL_CON_25_ATI 0x895A
+#define GL_CON_26_ATI 0x895B
+#define GL_CON_27_ATI 0x895C
+#define GL_CON_28_ATI 0x895D
+#define GL_CON_29_ATI 0x895E
+#define GL_CON_30_ATI 0x895F
+#define GL_CON_31_ATI 0x8960
+#define GL_MOV_ATI 0x8961
+#define GL_ADD_ATI 0x8963
+#define GL_MUL_ATI 0x8964
+#define GL_SUB_ATI 0x8965
+#define GL_DOT3_ATI 0x8966
+#define GL_DOT4_ATI 0x8967
+#define GL_MAD_ATI 0x8968
+#define GL_LERP_ATI 0x8969
+#define GL_CND_ATI 0x896A
+#define GL_CND0_ATI 0x896B
+#define GL_DOT2_ADD_ATI 0x896C
+#define GL_SECONDARY_INTERPOLATOR_ATI 0x896D
+#define GL_NUM_FRAGMENT_REGISTERS_ATI 0x896E
+#define GL_NUM_FRAGMENT_CONSTANTS_ATI 0x896F
+#define GL_NUM_PASSES_ATI 0x8970
+#define GL_NUM_INSTRUCTIONS_PER_PASS_ATI 0x8971
+#define GL_NUM_INSTRUCTIONS_TOTAL_ATI 0x8972
+#define GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI 0x8973
+#define GL_NUM_LOOPBACK_COMPONENTS_ATI 0x8974
+#define GL_COLOR_ALPHA_PAIRING_ATI 0x8975
+#define GL_SWIZZLE_STR_ATI 0x8976
+#define GL_SWIZZLE_STQ_ATI 0x8977
+#define GL_SWIZZLE_STR_DR_ATI 0x8978
+#define GL_SWIZZLE_STQ_DQ_ATI 0x8979
+#define GL_SWIZZLE_STRQ_ATI 0x897A
+#define GL_SWIZZLE_STRQ_DQ_ATI 0x897B
+#define GL_RED_BIT_ATI 0x00000001
+#define GL_GREEN_BIT_ATI 0x00000002
+#define GL_BLUE_BIT_ATI 0x00000004
+#define GL_2X_BIT_ATI 0x00000001
+#define GL_4X_BIT_ATI 0x00000002
+#define GL_8X_BIT_ATI 0x00000004
+#define GL_HALF_BIT_ATI 0x00000008
+#define GL_QUARTER_BIT_ATI 0x00000010
+#define GL_EIGHTH_BIT_ATI 0x00000020
+#define GL_SATURATE_BIT_ATI 0x00000040
+#define GL_COMP_BIT_ATI 0x00000002
+#define GL_NEGATE_BIT_ATI 0x00000004
+#define GL_BIAS_BIT_ATI 0x00000008
+#endif
+
+#ifndef GL_ATI_pn_triangles
+#define GL_PN_TRIANGLES_ATI 0x87F0
+#define GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F1
+#define GL_PN_TRIANGLES_POINT_MODE_ATI 0x87F2
+#define GL_PN_TRIANGLES_NORMAL_MODE_ATI 0x87F3
+#define GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F4
+#define GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI 0x87F5
+#define GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI 0x87F6
+#define GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI 0x87F7
+#define GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI 0x87F8
+#endif
+
+#ifndef GL_ATI_vertex_array_object
+#define GL_STATIC_ATI 0x8760
+#define GL_DYNAMIC_ATI 0x8761
+#define GL_PRESERVE_ATI 0x8762
+#define GL_DISCARD_ATI 0x8763
+#define GL_OBJECT_BUFFER_SIZE_ATI 0x8764
+#define GL_OBJECT_BUFFER_USAGE_ATI 0x8765
+#define GL_ARRAY_OBJECT_BUFFER_ATI 0x8766
+#define GL_ARRAY_OBJECT_OFFSET_ATI 0x8767
+#endif
+
+#ifndef GL_EXT_vertex_shader
+#define GL_VERTEX_SHADER_EXT 0x8780
+#define GL_VERTEX_SHADER_BINDING_EXT 0x8781
+#define GL_OP_INDEX_EXT 0x8782
+#define GL_OP_NEGATE_EXT 0x8783
+#define GL_OP_DOT3_EXT 0x8784
+#define GL_OP_DOT4_EXT 0x8785
+#define GL_OP_MUL_EXT 0x8786
+#define GL_OP_ADD_EXT 0x8787
+#define GL_OP_MADD_EXT 0x8788
+#define GL_OP_FRAC_EXT 0x8789
+#define GL_OP_MAX_EXT 0x878A
+#define GL_OP_MIN_EXT 0x878B
+#define GL_OP_SET_GE_EXT 0x878C
+#define GL_OP_SET_LT_EXT 0x878D
+#define GL_OP_CLAMP_EXT 0x878E
+#define GL_OP_FLOOR_EXT 0x878F
+#define GL_OP_ROUND_EXT 0x8790
+#define GL_OP_EXP_BASE_2_EXT 0x8791
+#define GL_OP_LOG_BASE_2_EXT 0x8792
+#define GL_OP_POWER_EXT 0x8793
+#define GL_OP_RECIP_EXT 0x8794
+#define GL_OP_RECIP_SQRT_EXT 0x8795
+#define GL_OP_SUB_EXT 0x8796
+#define GL_OP_CROSS_PRODUCT_EXT 0x8797
+#define GL_OP_MULTIPLY_MATRIX_EXT 0x8798
+#define GL_OP_MOV_EXT 0x8799
+#define GL_OUTPUT_VERTEX_EXT 0x879A
+#define GL_OUTPUT_COLOR0_EXT 0x879B
+#define GL_OUTPUT_COLOR1_EXT 0x879C
+#define GL_OUTPUT_TEXTURE_COORD0_EXT 0x879D
+#define GL_OUTPUT_TEXTURE_COORD1_EXT 0x879E
+#define GL_OUTPUT_TEXTURE_COORD2_EXT 0x879F
+#define GL_OUTPUT_TEXTURE_COORD3_EXT 0x87A0
+#define GL_OUTPUT_TEXTURE_COORD4_EXT 0x87A1
+#define GL_OUTPUT_TEXTURE_COORD5_EXT 0x87A2
+#define GL_OUTPUT_TEXTURE_COORD6_EXT 0x87A3
+#define GL_OUTPUT_TEXTURE_COORD7_EXT 0x87A4
+#define GL_OUTPUT_TEXTURE_COORD8_EXT 0x87A5
+#define GL_OUTPUT_TEXTURE_COORD9_EXT 0x87A6
+#define GL_OUTPUT_TEXTURE_COORD10_EXT 0x87A7
+#define GL_OUTPUT_TEXTURE_COORD11_EXT 0x87A8
+#define GL_OUTPUT_TEXTURE_COORD12_EXT 0x87A9
+#define GL_OUTPUT_TEXTURE_COORD13_EXT 0x87AA
+#define GL_OUTPUT_TEXTURE_COORD14_EXT 0x87AB
+#define GL_OUTPUT_TEXTURE_COORD15_EXT 0x87AC
+#define GL_OUTPUT_TEXTURE_COORD16_EXT 0x87AD
+#define GL_OUTPUT_TEXTURE_COORD17_EXT 0x87AE
+#define GL_OUTPUT_TEXTURE_COORD18_EXT 0x87AF
+#define GL_OUTPUT_TEXTURE_COORD19_EXT 0x87B0
+#define GL_OUTPUT_TEXTURE_COORD20_EXT 0x87B1
+#define GL_OUTPUT_TEXTURE_COORD21_EXT 0x87B2
+#define GL_OUTPUT_TEXTURE_COORD22_EXT 0x87B3
+#define GL_OUTPUT_TEXTURE_COORD23_EXT 0x87B4
+#define GL_OUTPUT_TEXTURE_COORD24_EXT 0x87B5
+#define GL_OUTPUT_TEXTURE_COORD25_EXT 0x87B6
+#define GL_OUTPUT_TEXTURE_COORD26_EXT 0x87B7
+#define GL_OUTPUT_TEXTURE_COORD27_EXT 0x87B8
+#define GL_OUTPUT_TEXTURE_COORD28_EXT 0x87B9
+#define GL_OUTPUT_TEXTURE_COORD29_EXT 0x87BA
+#define GL_OUTPUT_TEXTURE_COORD30_EXT 0x87BB
+#define GL_OUTPUT_TEXTURE_COORD31_EXT 0x87BC
+#define GL_OUTPUT_FOG_EXT 0x87BD
+#define GL_SCALAR_EXT 0x87BE
+#define GL_VECTOR_EXT 0x87BF
+#define GL_MATRIX_EXT 0x87C0
+#define GL_VARIANT_EXT 0x87C1
+#define GL_INVARIANT_EXT 0x87C2
+#define GL_LOCAL_CONSTANT_EXT 0x87C3
+#define GL_LOCAL_EXT 0x87C4
+#define GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87C5
+#define GL_MAX_VERTEX_SHADER_VARIANTS_EXT 0x87C6
+#define GL_MAX_VERTEX_SHADER_INVARIANTS_EXT 0x87C7
+#define GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87C8
+#define GL_MAX_VERTEX_SHADER_LOCALS_EXT 0x87C9
+#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CA
+#define GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT 0x87CB
+#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87CC
+#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INARIANTS_EXT 0x87CD
+#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT 0x87CE
+#define GL_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CF
+#define GL_VERTEX_SHADER_VARIANTS_EXT 0x87D0
+#define GL_VERTEX_SHADER_INVARIANTS_EXT 0x87D1
+#define GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87D2
+#define GL_VERTEX_SHADER_LOCALS_EXT 0x87D3
+#define GL_VERTEX_SHADER_OPTIMIZED_EXT 0x87D4
+#define GL_X_EXT 0x87D5
+#define GL_Y_EXT 0x87D6
+#define GL_Z_EXT 0x87D7
+#define GL_W_EXT 0x87D8
+#define GL_NEGATIVE_X_EXT 0x87D9
+#define GL_NEGATIVE_Y_EXT 0x87DA
+#define GL_NEGATIVE_Z_EXT 0x87DB
+#define GL_NEGATIVE_W_EXT 0x87DC
+#define GL_ZERO_EXT 0x87DD
+#define GL_ONE_EXT 0x87DE
+#define GL_NEGATIVE_ONE_EXT 0x87DF
+#define GL_NORMALIZED_RANGE_EXT 0x87E0
+#define GL_FULL_RANGE_EXT 0x87E1
+#define GL_CURRENT_VERTEX_EXT 0x87E2
+#define GL_MVP_MATRIX_EXT 0x87E3
+#define GL_VARIANT_VALUE_EXT 0x87E4
+#define GL_VARIANT_DATATYPE_EXT 0x87E5
+#define GL_VARIANT_ARRAY_STRIDE_EXT 0x87E6
+#define GL_VARIANT_ARRAY_TYPE_EXT 0x87E7
+#define GL_VARIANT_ARRAY_EXT 0x87E8
+#define GL_VARIANT_ARRAY_POINTER_EXT 0x87E9
+#define GL_INVARIANT_VALUE_EXT 0x87EA
+#define GL_INVARIANT_DATATYPE_EXT 0x87EB
+#define GL_LOCAL_CONSTANT_VALUE_EXT 0x87EC
+#define GL_LOCAL_CONSTANT_DATATYPE_EXT 0x87ED
+#endif
+
+#ifndef GL_ATI_vertex_streams
+#define GL_MAX_VERTEX_STREAMS_ATI 0x876B
+#define GL_VERTEX_STREAM0_ATI 0x876C
+#define GL_VERTEX_STREAM1_ATI 0x876D
+#define GL_VERTEX_STREAM2_ATI 0x876E
+#define GL_VERTEX_STREAM3_ATI 0x876F
+#define GL_VERTEX_STREAM4_ATI 0x8770
+#define GL_VERTEX_STREAM5_ATI 0x8771
+#define GL_VERTEX_STREAM6_ATI 0x8772
+#define GL_VERTEX_STREAM7_ATI 0x8773
+#define GL_VERTEX_SOURCE_ATI 0x8774
+#endif
+
+#ifndef GL_ATI_element_array
+#define GL_ELEMENT_ARRAY_ATI 0x8768
+#define GL_ELEMENT_ARRAY_TYPE_ATI 0x8769
+#define GL_ELEMENT_ARRAY_POINTER_ATI 0x876A
+#endif
+
+#ifndef GL_SUN_mesh_array
+#define GL_QUAD_MESH_SUN 0x8614
+#define GL_TRIANGLE_MESH_SUN 0x8615
+#endif
+
+#ifndef GL_SUN_slice_accum
+#define GL_SLICE_ACCUM_SUN 0x85CC
+#endif
+
+#ifndef GL_NV_multisample_filter_hint
+#define GL_MULTISAMPLE_FILTER_HINT_NV 0x8534
+#endif
+
+#ifndef GL_NV_depth_clamp
+#define GL_DEPTH_CLAMP_NV 0x864F
+#endif
+
+#ifndef GL_NV_occlusion_query
+#define GL_PIXEL_COUNTER_BITS_NV 0x8864
+#define GL_CURRENT_OCCLUSION_QUERY_ID_NV 0x8865
+#define GL_PIXEL_COUNT_NV 0x8866
+#define GL_PIXEL_COUNT_AVAILABLE_NV 0x8867
+#endif
+
+#ifndef GL_NV_point_sprite
+#define GL_POINT_SPRITE_NV 0x8861
+#define GL_COORD_REPLACE_NV 0x8862
+#define GL_POINT_SPRITE_R_MODE_NV 0x8863
+#endif
+
+#ifndef GL_NV_texture_shader3
+#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV 0x8850
+#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV 0x8851
+#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8852
+#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV 0x8853
+#define GL_OFFSET_HILO_TEXTURE_2D_NV 0x8854
+#define GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV 0x8855
+#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV 0x8856
+#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8857
+#define GL_DEPENDENT_HILO_TEXTURE_2D_NV 0x8858
+#define GL_DEPENDENT_RGB_TEXTURE_3D_NV 0x8859
+#define GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV 0x885A
+#define GL_DOT_PRODUCT_PASS_THROUGH_NV 0x885B
+#define GL_DOT_PRODUCT_TEXTURE_1D_NV 0x885C
+#define GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV 0x885D
+#define GL_HILO8_NV 0x885E
+#define GL_SIGNED_HILO8_NV 0x885F
+#define GL_FORCE_BLUE_TO_ONE_NV 0x8860
+#endif
+
+#ifndef GL_NV_vertex_program1_1
+#endif
+
+
+/*************************************************************/
+
+#ifndef GL_VERSION_1_2
+#define GL_VERSION_1_2 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendColor (GLclampf, GLclampf, GLclampf, GLclampf);
+GLAPI void APIENTRY glBlendEquation (GLenum);
+GLAPI void APIENTRY glDrawRangeElements (GLenum, GLuint, GLuint, GLsizei, GLenum, const GLvoid *);
+GLAPI void APIENTRY glColorTable (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *);
+GLAPI void APIENTRY glColorTableParameterfv (GLenum, GLenum, const GLfloat *);
+GLAPI void APIENTRY glColorTableParameteriv (GLenum, GLenum, const GLint *);
+GLAPI void APIENTRY glCopyColorTable (GLenum, GLenum, GLint, GLint, GLsizei);
+GLAPI void APIENTRY glGetColorTable (GLenum, GLenum, GLenum, GLvoid *);
+GLAPI void APIENTRY glGetColorTableParameterfv (GLenum, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetColorTableParameteriv (GLenum, GLenum, GLint *);
+GLAPI void APIENTRY glColorSubTable (GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *);
+GLAPI void APIENTRY glCopyColorSubTable (GLenum, GLsizei, GLint, GLint, GLsizei);
+GLAPI void APIENTRY glConvolutionFilter1D (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *);
+GLAPI void APIENTRY glConvolutionFilter2D (GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *);
+GLAPI void APIENTRY glConvolutionParameterf (GLenum, GLenum, GLfloat);
+GLAPI void APIENTRY glConvolutionParameterfv (GLenum, GLenum, const GLfloat *);
+GLAPI void APIENTRY glConvolutionParameteri (GLenum, GLenum, GLint);
+GLAPI void APIENTRY glConvolutionParameteriv (GLenum, GLenum, const GLint *);
+GLAPI void APIENTRY glCopyConvolutionFilter1D (GLenum, GLenum, GLint, GLint, GLsizei);
+GLAPI void APIENTRY glCopyConvolutionFilter2D (GLenum, GLenum, GLint, GLint, GLsizei, GLsizei);
+GLAPI void APIENTRY glGetConvolutionFilter (GLenum, GLenum, GLenum, GLvoid *);
+GLAPI void APIENTRY glGetConvolutionParameterfv (GLenum, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetConvolutionParameteriv (GLenum, GLenum, GLint *);
+GLAPI void APIENTRY glGetSeparableFilter (GLenum, GLenum, GLenum, GLvoid *, GLvoid *, GLvoid *);
+GLAPI void APIENTRY glSeparableFilter2D (GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *, const GLvoid *);
+GLAPI void APIENTRY glGetHistogram (GLenum, GLboolean, GLenum, GLenum, GLvoid *);
+GLAPI void APIENTRY glGetHistogramParameterfv (GLenum, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetHistogramParameteriv (GLenum, GLenum, GLint *);
+GLAPI void APIENTRY glGetMinmax (GLenum, GLboolean, GLenum, GLenum, GLvoid *);
+GLAPI void APIENTRY glGetMinmaxParameterfv (GLenum, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetMinmaxParameteriv (GLenum, GLenum, GLint *);
+GLAPI void APIENTRY glHistogram (GLenum, GLsizei, GLenum, GLboolean);
+GLAPI void APIENTRY glMinmax (GLenum, GLenum, GLboolean);
+GLAPI void APIENTRY glResetHistogram (GLenum);
+GLAPI void APIENTRY glResetMinmax (GLenum);
+GLAPI void APIENTRY glTexImage3D (GLenum, GLint, GLint, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid *);
+GLAPI void APIENTRY glTexSubImage3D (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *);
+GLAPI void APIENTRY glCopyTexSubImage3D (GLenum, GLint, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLBLENDCOLORPROC) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
+typedef void (APIENTRY * PFNGLBLENDEQUATIONPROC) (GLenum mode);
+typedef void (APIENTRY * PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices);
+typedef void (APIENTRY * PFNGLCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table);
+typedef void (APIENTRY * PFNGLCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRY * PFNGLCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRY * PFNGLCOPYCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
+typedef void (APIENTRY * PFNGLGETCOLORTABLEPROC) (GLenum target, GLenum format, GLenum type, GLvoid *table);
+typedef void (APIENTRY * PFNGLGETCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRY * PFNGLGETCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRY * PFNGLCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data);
+typedef void (APIENTRY * PFNGLCOPYCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width);
+typedef void (APIENTRY * PFNGLCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image);
+typedef void (APIENTRY * PFNGLCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image);
+typedef void (APIENTRY * PFNGLCONVOLUTIONPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat params);
+typedef void (APIENTRY * PFNGLCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRY * PFNGLCONVOLUTIONPARAMETERIPROC) (GLenum target, GLenum pname, GLint params);
+typedef void (APIENTRY * PFNGLCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRY * PFNGLCOPYCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
+typedef void (APIENTRY * PFNGLCOPYCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRY * PFNGLGETCONVOLUTIONFILTERPROC) (GLenum target, GLenum format, GLenum type, GLvoid *image);
+typedef void (APIENTRY * PFNGLGETCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRY * PFNGLGETCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRY * PFNGLGETSEPARABLEFILTERPROC) (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span);
+typedef void (APIENTRY * PFNGLSEPARABLEFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column);
+typedef void (APIENTRY * PFNGLGETHISTOGRAMPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values);
+typedef void (APIENTRY * PFNGLGETHISTOGRAMPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRY * PFNGLGETHISTOGRAMPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRY * PFNGLGETMINMAXPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values);
+typedef void (APIENTRY * PFNGLGETMINMAXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRY * PFNGLGETMINMAXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRY * PFNGLHISTOGRAMPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink);
+typedef void (APIENTRY * PFNGLMINMAXPROC) (GLenum target, GLenum internalformat, GLboolean sink);
+typedef void (APIENTRY * PFNGLRESETHISTOGRAMPROC) (GLenum target);
+typedef void (APIENTRY * PFNGLRESETMINMAXPROC) (GLenum target);
+typedef void (APIENTRY * PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
+typedef void (APIENTRY * PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);
+typedef void (APIENTRY * PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+#endif
+
+#ifndef GL_VERSION_1_3
+#define GL_VERSION_1_3 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glActiveTexture (GLenum);
+GLAPI void APIENTRY glClientActiveTexture (GLenum);
+GLAPI void APIENTRY glMultiTexCoord1d (GLenum, GLdouble);
+GLAPI void APIENTRY glMultiTexCoord1dv (GLenum, const GLdouble *);
+GLAPI void APIENTRY glMultiTexCoord1f (GLenum, GLfloat);
+GLAPI void APIENTRY glMultiTexCoord1fv (GLenum, const GLfloat *);
+GLAPI void APIENTRY glMultiTexCoord1i (GLenum, GLint);
+GLAPI void APIENTRY glMultiTexCoord1iv (GLenum, const GLint *);
+GLAPI void APIENTRY glMultiTexCoord1s (GLenum, GLshort);
+GLAPI void APIENTRY glMultiTexCoord1sv (GLenum, const GLshort *);
+GLAPI void APIENTRY glMultiTexCoord2d (GLenum, GLdouble, GLdouble);
+GLAPI void APIENTRY glMultiTexCoord2dv (GLenum, const GLdouble *);
+GLAPI void APIENTRY glMultiTexCoord2f (GLenum, GLfloat, GLfloat);
+GLAPI void APIENTRY glMultiTexCoord2fv (GLenum, const GLfloat *);
+GLAPI void APIENTRY glMultiTexCoord2i (GLenum, GLint, GLint);
+GLAPI void APIENTRY glMultiTexCoord2iv (GLenum, const GLint *);
+GLAPI void APIENTRY glMultiTexCoord2s (GLenum, GLshort, GLshort);
+GLAPI void APIENTRY glMultiTexCoord2sv (GLenum, const GLshort *);
+GLAPI void APIENTRY glMultiTexCoord3d (GLenum, GLdouble, GLdouble, GLdouble);
+GLAPI void APIENTRY glMultiTexCoord3dv (GLenum, const GLdouble *);
+GLAPI void APIENTRY glMultiTexCoord3f (GLenum, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glMultiTexCoord3fv (GLenum, const GLfloat *);
+GLAPI void APIENTRY glMultiTexCoord3i (GLenum, GLint, GLint, GLint);
+GLAPI void APIENTRY glMultiTexCoord3iv (GLenum, const GLint *);
+GLAPI void APIENTRY glMultiTexCoord3s (GLenum, GLshort, GLshort, GLshort);
+GLAPI void APIENTRY glMultiTexCoord3sv (GLenum, const GLshort *);
+GLAPI void APIENTRY glMultiTexCoord4d (GLenum, GLdouble, GLdouble, GLdouble, GLdouble);
+GLAPI void APIENTRY glMultiTexCoord4dv (GLenum, const GLdouble *);
+GLAPI void APIENTRY glMultiTexCoord4f (GLenum, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glMultiTexCoord4fv (GLenum, const GLfloat *);
+GLAPI void APIENTRY glMultiTexCoord4i (GLenum, GLint, GLint, GLint, GLint);
+GLAPI void APIENTRY glMultiTexCoord4iv (GLenum, const GLint *);
+GLAPI void APIENTRY glMultiTexCoord4s (GLenum, GLshort, GLshort, GLshort, GLshort);
+GLAPI void APIENTRY glMultiTexCoord4sv (GLenum, const GLshort *);
+GLAPI void APIENTRY glLoadTransposeMatrixf (const GLfloat *);
+GLAPI void APIENTRY glLoadTransposeMatrixd (const GLdouble *);
+GLAPI void APIENTRY glMultTransposeMatrixf (const GLfloat *);
+GLAPI void APIENTRY glMultTransposeMatrixd (const GLdouble *);
+GLAPI void APIENTRY glSampleCoverage (GLclampf, GLboolean);
+GLAPI void APIENTRY glCompressedTexImage3D (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glCompressedTexImage2D (GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glCompressedTexImage1D (GLenum, GLint, GLenum, GLsizei, GLint, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glCompressedTexSubImage3D (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glCompressedTexSubImage2D (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glCompressedTexSubImage1D (GLenum, GLint, GLint, GLsizei, GLenum, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glGetCompressedTexImage (GLenum, GLint, void *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLACTIVETEXTUREPROC) (GLenum texture);
+typedef void (APIENTRY * PFNGLCLIENTACTIVETEXTUREPROC) (GLenum texture);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD1DPROC) (GLenum target, GLdouble s);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD1DVPROC) (GLenum target, const GLdouble *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD1FPROC) (GLenum target, GLfloat s);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD1FVPROC) (GLenum target, const GLfloat *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD1IPROC) (GLenum target, GLint s);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD1IVPROC) (GLenum target, const GLint *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD1SPROC) (GLenum target, GLshort s);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD1SVPROC) (GLenum target, const GLshort *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD2DPROC) (GLenum target, GLdouble s, GLdouble t);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD2DVPROC) (GLenum target, const GLdouble *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD2FPROC) (GLenum target, GLfloat s, GLfloat t);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD2FVPROC) (GLenum target, const GLfloat *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD2IPROC) (GLenum target, GLint s, GLint t);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD2IVPROC) (GLenum target, const GLint *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD2SPROC) (GLenum target, GLshort s, GLshort t);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD2SVPROC) (GLenum target, const GLshort *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD3DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD3DVPROC) (GLenum target, const GLdouble *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD3FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD3FVPROC) (GLenum target, const GLfloat *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD3IPROC) (GLenum target, GLint s, GLint t, GLint r);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD3IVPROC) (GLenum target, const GLint *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD3SPROC) (GLenum target, GLshort s, GLshort t, GLshort r);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD3SVPROC) (GLenum target, const GLshort *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD4DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD4DVPROC) (GLenum target, const GLdouble *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD4FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD4FVPROC) (GLenum target, const GLfloat *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD4IPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD4IVPROC) (GLenum target, const GLint *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD4SPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD4SVPROC) (GLenum target, const GLshort *v);
+typedef void (APIENTRY * PFNGLLOADTRANSPOSEMATRIXFPROC) (const GLfloat *m);
+typedef void (APIENTRY * PFNGLLOADTRANSPOSEMATRIXDPROC) (const GLdouble *m);
+typedef void (APIENTRY * PFNGLMULTTRANSPOSEMATRIXFPROC) (const GLfloat *m);
+typedef void (APIENTRY * PFNGLMULTTRANSPOSEMATRIXDPROC) (const GLdouble *m);
+typedef void (APIENTRY * PFNGLSAMPLECOVERAGEPROC) (GLclampf value, GLboolean invert);
+typedef void (APIENTRY * PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data);
+typedef void (APIENTRY * PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data);
+typedef void (APIENTRY * PFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data);
+typedef void (APIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data);
+typedef void (APIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data);
+typedef void (APIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data);
+typedef void (APIENTRY * PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint level, void *img);
+#endif
+
+#ifndef GL_ARB_multitexture
+#define GL_ARB_multitexture 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glActiveTextureARB (GLenum);
+GLAPI void APIENTRY glClientActiveTextureARB (GLenum);
+GLAPI void APIENTRY glMultiTexCoord1dARB (GLenum, GLdouble);
+GLAPI void APIENTRY glMultiTexCoord1dvARB (GLenum, const GLdouble *);
+GLAPI void APIENTRY glMultiTexCoord1fARB (GLenum, GLfloat);
+GLAPI void APIENTRY glMultiTexCoord1fvARB (GLenum, const GLfloat *);
+GLAPI void APIENTRY glMultiTexCoord1iARB (GLenum, GLint);
+GLAPI void APIENTRY glMultiTexCoord1ivARB (GLenum, const GLint *);
+GLAPI void APIENTRY glMultiTexCoord1sARB (GLenum, GLshort);
+GLAPI void APIENTRY glMultiTexCoord1svARB (GLenum, const GLshort *);
+GLAPI void APIENTRY glMultiTexCoord2dARB (GLenum, GLdouble, GLdouble);
+GLAPI void APIENTRY glMultiTexCoord2dvARB (GLenum, const GLdouble *);
+GLAPI void APIENTRY glMultiTexCoord2fARB (GLenum, GLfloat, GLfloat);
+GLAPI void APIENTRY glMultiTexCoord2fvARB (GLenum, const GLfloat *);
+GLAPI void APIENTRY glMultiTexCoord2iARB (GLenum, GLint, GLint);
+GLAPI void APIENTRY glMultiTexCoord2ivARB (GLenum, const GLint *);
+GLAPI void APIENTRY glMultiTexCoord2sARB (GLenum, GLshort, GLshort);
+GLAPI void APIENTRY glMultiTexCoord2svARB (GLenum, const GLshort *);
+GLAPI void APIENTRY glMultiTexCoord3dARB (GLenum, GLdouble, GLdouble, GLdouble);
+GLAPI void APIENTRY glMultiTexCoord3dvARB (GLenum, const GLdouble *);
+GLAPI void APIENTRY glMultiTexCoord3fARB (GLenum, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glMultiTexCoord3fvARB (GLenum, const GLfloat *);
+GLAPI void APIENTRY glMultiTexCoord3iARB (GLenum, GLint, GLint, GLint);
+GLAPI void APIENTRY glMultiTexCoord3ivARB (GLenum, const GLint *);
+GLAPI void APIENTRY glMultiTexCoord3sARB (GLenum, GLshort, GLshort, GLshort);
+GLAPI void APIENTRY glMultiTexCoord3svARB (GLenum, const GLshort *);
+GLAPI void APIENTRY glMultiTexCoord4dARB (GLenum, GLdouble, GLdouble, GLdouble, GLdouble);
+GLAPI void APIENTRY glMultiTexCoord4dvARB (GLenum, const GLdouble *);
+GLAPI void APIENTRY glMultiTexCoord4fARB (GLenum, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glMultiTexCoord4fvARB (GLenum, const GLfloat *);
+GLAPI void APIENTRY glMultiTexCoord4iARB (GLenum, GLint, GLint, GLint, GLint);
+GLAPI void APIENTRY glMultiTexCoord4ivARB (GLenum, const GLint *);
+GLAPI void APIENTRY glMultiTexCoord4sARB (GLenum, GLshort, GLshort, GLshort, GLshort);
+GLAPI void APIENTRY glMultiTexCoord4svARB (GLenum, const GLshort *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLACTIVETEXTUREARBPROC) (GLenum texture);
+typedef void (APIENTRY * PFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD1DARBPROC) (GLenum target, GLdouble s);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD1DVARBPROC) (GLenum target, const GLdouble *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD1FARBPROC) (GLenum target, GLfloat s);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD1FVARBPROC) (GLenum target, const GLfloat *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD1IARBPROC) (GLenum target, GLint s);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD1IVARBPROC) (GLenum target, const GLint *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD1SARBPROC) (GLenum target, GLshort s);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD1SVARBPROC) (GLenum target, const GLshort *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD2DARBPROC) (GLenum target, GLdouble s, GLdouble t);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD2DVARBPROC) (GLenum target, const GLdouble *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD2FARBPROC) (GLenum target, GLfloat s, GLfloat t);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD2FVARBPROC) (GLenum target, const GLfloat *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD2IARBPROC) (GLenum target, GLint s, GLint t);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD2IVARBPROC) (GLenum target, const GLint *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD2SARBPROC) (GLenum target, GLshort s, GLshort t);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD2SVARBPROC) (GLenum target, const GLshort *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD3DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD3DVARBPROC) (GLenum target, const GLdouble *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD3FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD3FVARBPROC) (GLenum target, const GLfloat *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD3IARBPROC) (GLenum target, GLint s, GLint t, GLint r);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD3IVARBPROC) (GLenum target, const GLint *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD3SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD3SVARBPROC) (GLenum target, const GLshort *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD4DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD4DVARBPROC) (GLenum target, const GLdouble *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD4FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD4FVARBPROC) (GLenum target, const GLfloat *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD4IARBPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD4IVARBPROC) (GLenum target, const GLint *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD4SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLshort *v);
+#endif
+
+#ifndef GL_ARB_transpose_matrix
+#define GL_ARB_transpose_matrix 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glLoadTransposeMatrixfARB (const GLfloat *);
+GLAPI void APIENTRY glLoadTransposeMatrixdARB (const GLdouble *);
+GLAPI void APIENTRY glMultTransposeMatrixfARB (const GLfloat *);
+GLAPI void APIENTRY glMultTransposeMatrixdARB (const GLdouble *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLLOADTRANSPOSEMATRIXFARBPROC) (const GLfloat *m);
+typedef void (APIENTRY * PFNGLLOADTRANSPOSEMATRIXDARBPROC) (const GLdouble *m);
+typedef void (APIENTRY * PFNGLMULTTRANSPOSEMATRIXFARBPROC) (const GLfloat *m);
+typedef void (APIENTRY * PFNGLMULTTRANSPOSEMATRIXDARBPROC) (const GLdouble *m);
+#endif
+
+#ifndef GL_ARB_multisample
+#define GL_ARB_multisample 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSampleCoverageARB (GLclampf, GLboolean);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLSAMPLECOVERAGEARBPROC) (GLclampf value, GLboolean invert);
+#endif
+
+#ifndef GL_ARB_texture_env_add
+#define GL_ARB_texture_env_add 1
+#endif
+
+#ifndef GL_ARB_texture_cube_map
+#define GL_ARB_texture_cube_map 1
+#endif
+
+#ifndef GL_ARB_texture_compression
+#define GL_ARB_texture_compression 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glCompressedTexImage3DARB (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glCompressedTexImage2DARB (GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glCompressedTexImage1DARB (GLenum, GLint, GLenum, GLsizei, GLint, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glCompressedTexSubImage3DARB (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glCompressedTexSubImage2DARB (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glCompressedTexSubImage1DARB (GLenum, GLint, GLint, GLsizei, GLenum, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glGetCompressedTexImageARB (GLenum, GLint, void *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLCOMPRESSEDTEXIMAGE3DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data);
+typedef void (APIENTRY * PFNGLCOMPRESSEDTEXIMAGE2DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data);
+typedef void (APIENTRY * PFNGLCOMPRESSEDTEXIMAGE1DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data);
+typedef void (APIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data);
+typedef void (APIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data);
+typedef void (APIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data);
+typedef void (APIENTRY * PFNGLGETCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint level, void *img);
+#endif
+
+#ifndef GL_ARB_texture_border_clamp
+#define GL_ARB_texture_border_clamp 1
+#endif
+
+#ifndef GL_ARB_point_parameters
+#define GL_ARB_point_parameters 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPointParameterfARB (GLenum, GLfloat);
+GLAPI void APIENTRY glPointParameterfvARB (GLenum, const GLfloat *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLPOINTPARAMETERFARBPROC) (GLenum pname, GLfloat param);
+typedef void (APIENTRY * PFNGLPOINTPARAMETERFVARBPROC) (GLenum pname, const GLfloat *params);
+#endif
+
+#ifndef GL_ARB_vertex_blend
+#define GL_ARB_vertex_blend 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glWeightbvARB (GLint, const GLbyte *);
+GLAPI void APIENTRY glWeightsvARB (GLint, const GLshort *);
+GLAPI void APIENTRY glWeightivARB (GLint, const GLint *);
+GLAPI void APIENTRY glWeightfvARB (GLint, const GLfloat *);
+GLAPI void APIENTRY glWeightdvARB (GLint, const GLdouble *);
+GLAPI void APIENTRY glWeightubvARB (GLint, const GLubyte *);
+GLAPI void APIENTRY glWeightusvARB (GLint, const GLushort *);
+GLAPI void APIENTRY glWeightuivARB (GLint, const GLuint *);
+GLAPI void APIENTRY glWeightPointerARB (GLint, GLenum, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glVertexBlendARB (GLint);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLWEIGHTBVARBPROC) (GLint size, const GLbyte *weights);
+typedef void (APIENTRY * PFNGLWEIGHTSVARBPROC) (GLint size, const GLshort *weights);
+typedef void (APIENTRY * PFNGLWEIGHTIVARBPROC) (GLint size, const GLint *weights);
+typedef void (APIENTRY * PFNGLWEIGHTFVARBPROC) (GLint size, const GLfloat *weights);
+typedef void (APIENTRY * PFNGLWEIGHTDVARBPROC) (GLint size, const GLdouble *weights);
+typedef void (APIENTRY * PFNGLWEIGHTUBVARBPROC) (GLint size, const GLubyte *weights);
+typedef void (APIENTRY * PFNGLWEIGHTUSVARBPROC) (GLint size, const GLushort *weights);
+typedef void (APIENTRY * PFNGLWEIGHTUIVARBPROC) (GLint size, const GLuint *weights);
+typedef void (APIENTRY * PFNGLWEIGHTPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+typedef void (APIENTRY * PFNGLVERTEXBLENDARBPROC) (GLint count);
+#endif
+
+#ifndef GL_ARB_matrix_palette
+#define GL_ARB_matrix_palette 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glCurrentPaletteMatrixARB (GLint);
+GLAPI void APIENTRY glMatrixIndexubvARB (GLint, const GLubyte *);
+GLAPI void APIENTRY glMatrixIndexusvARB (GLint, const GLushort *);
+GLAPI void APIENTRY glMatrixIndexuivARB (GLint, const GLuint *);
+GLAPI void APIENTRY glMatrixIndexPointerARB (GLint, GLenum, GLsizei, const GLvoid *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLCURRENTPALETTEMATRIXARBPROC) (GLint index);
+typedef void (APIENTRY * PFNGLMATRIXINDEXUBVARBPROC) (GLint size, const GLubyte *indices);
+typedef void (APIENTRY * PFNGLMATRIXINDEXUSVARBPROC) (GLint size, const GLushort *indices);
+typedef void (APIENTRY * PFNGLMATRIXINDEXUIVARBPROC) (GLint size, const GLuint *indices);
+typedef void (APIENTRY * PFNGLMATRIXINDEXPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+#endif
+
+#ifndef GL_ARB_texture_env_combine
+#define GL_ARB_texture_env_combine 1
+#endif
+
+#ifndef GL_ARB_texture_env_crossbar
+#define GL_ARB_texture_env_crossbar 1
+#endif
+
+#ifndef GL_ARB_texture_env_dot3
+#define GL_ARB_texture_env_dot3 1
+#endif
+
+#ifndef GL_ARB_texture_mirror_repeat
+#define GL_ARB_texture_mirror_repeat 1
+#endif
+
+#ifndef GL_ARB_depth_texture
+#define GL_ARB_depth_texture 1
+#endif
+
+#ifndef GL_ARB_shadow
+#define GL_ARB_shadow 1
+#endif
+
+#ifndef GL_ARB_shadow_ambient
+#define GL_ARB_shadow_ambient 1
+#endif
+
+#ifndef GL_ARB_window_pos
+#define GL_ARB_window_pos 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glWindowPos2dARB (GLdouble, GLdouble);
+GLAPI void APIENTRY glWindowPos2dvARB (const GLdouble *);
+GLAPI void APIENTRY glWindowPos2fARB (GLfloat, GLfloat);
+GLAPI void APIENTRY glWindowPos2fvARB (const GLfloat *);
+GLAPI void APIENTRY glWindowPos2iARB (GLint, GLint);
+GLAPI void APIENTRY glWindowPos2ivARB (const GLint *);
+GLAPI void APIENTRY glWindowPos2sARB (GLshort, GLshort);
+GLAPI void APIENTRY glWindowPos2svARB (const GLshort *);
+GLAPI void APIENTRY glWindowPos3dARB (GLdouble, GLdouble, GLdouble);
+GLAPI void APIENTRY glWindowPos3dvARB (const GLdouble *);
+GLAPI void APIENTRY glWindowPos3fARB (GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glWindowPos3fvARB (const GLfloat *);
+GLAPI void APIENTRY glWindowPos3iARB (GLint, GLint, GLint);
+GLAPI void APIENTRY glWindowPos3ivARB (const GLint *);
+GLAPI void APIENTRY glWindowPos3sARB (GLshort, GLshort, GLshort);
+GLAPI void APIENTRY glWindowPos3svARB (const GLshort *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLWINDOWPOS2DARBPROC) (GLdouble x, GLdouble y);
+typedef void (APIENTRY * PFNGLWINDOWPOS2DVARBPROC) (const GLdouble *v);
+typedef void (APIENTRY * PFNGLWINDOWPOS2FARBPROC) (GLfloat x, GLfloat y);
+typedef void (APIENTRY * PFNGLWINDOWPOS2FVARBPROC) (const GLfloat *v);
+typedef void (APIENTRY * PFNGLWINDOWPOS2IARBPROC) (GLint x, GLint y);
+typedef void (APIENTRY * PFNGLWINDOWPOS2IVARBPROC) (const GLint *v);
+typedef void (APIENTRY * PFNGLWINDOWPOS2SARBPROC) (GLshort x, GLshort y);
+typedef void (APIENTRY * PFNGLWINDOWPOS2SVARBPROC) (const GLshort *v);
+typedef void (APIENTRY * PFNGLWINDOWPOS3DARBPROC) (GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRY * PFNGLWINDOWPOS3DVARBPROC) (const GLdouble *v);
+typedef void (APIENTRY * PFNGLWINDOWPOS3FARBPROC) (GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRY * PFNGLWINDOWPOS3FVARBPROC) (const GLfloat *v);
+typedef void (APIENTRY * PFNGLWINDOWPOS3IARBPROC) (GLint x, GLint y, GLint z);
+typedef void (APIENTRY * PFNGLWINDOWPOS3IVARBPROC) (const GLint *v);
+typedef void (APIENTRY * PFNGLWINDOWPOS3SARBPROC) (GLshort x, GLshort y, GLshort z);
+typedef void (APIENTRY * PFNGLWINDOWPOS3SVARBPROC) (const GLshort *v);
+#endif
+
+#ifndef GL_EXT_abgr
+#define GL_EXT_abgr 1
+#endif
+
+#ifndef GL_EXT_blend_color
+#define GL_EXT_blend_color 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendColorEXT (GLclampf, GLclampf, GLclampf, GLclampf);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLBLENDCOLOREXTPROC) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
+#endif
+
+#ifndef GL_EXT_polygon_offset
+#define GL_EXT_polygon_offset 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPolygonOffsetEXT (GLfloat, GLfloat);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLPOLYGONOFFSETEXTPROC) (GLfloat factor, GLfloat bias);
+#endif
+
+#ifndef GL_EXT_texture
+#define GL_EXT_texture 1
+#endif
+
+#ifndef GL_EXT_texture3D
+#define GL_EXT_texture3D 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexImage3DEXT (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid *);
+GLAPI void APIENTRY glTexSubImage3DEXT (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLTEXIMAGE3DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
+typedef void (APIENTRY * PFNGLTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);
+#endif
+
+#ifndef GL_SGIS_texture_filter4
+#define GL_SGIS_texture_filter4 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGetTexFilterFuncSGIS (GLenum, GLenum, GLfloat *);
+GLAPI void APIENTRY glTexFilterFuncSGIS (GLenum, GLenum, GLsizei, const GLfloat *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLGETTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLfloat *weights);
+typedef void (APIENTRY * PFNGLTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights);
+#endif
+
+#ifndef GL_EXT_subtexture
+#define GL_EXT_subtexture 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexSubImage1DEXT (GLenum, GLint, GLint, GLsizei, GLenum, GLenum, const GLvoid *);
+GLAPI void APIENTRY glTexSubImage2DEXT (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels);
+typedef void (APIENTRY * PFNGLTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);
+#endif
+
+#ifndef GL_EXT_copy_texture
+#define GL_EXT_copy_texture 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glCopyTexImage1DEXT (GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLint);
+GLAPI void APIENTRY glCopyTexImage2DEXT (GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLsizei, GLint);
+GLAPI void APIENTRY glCopyTexSubImage1DEXT (GLenum, GLint, GLint, GLint, GLint, GLsizei);
+GLAPI void APIENTRY glCopyTexSubImage2DEXT (GLenum, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei);
+GLAPI void APIENTRY glCopyTexSubImage3DEXT (GLenum, GLint, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLCOPYTEXIMAGE1DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border);
+typedef void (APIENTRY * PFNGLCOPYTEXIMAGE2DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+typedef void (APIENTRY * PFNGLCOPYTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);
+typedef void (APIENTRY * PFNGLCOPYTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRY * PFNGLCOPYTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+#endif
+
+#ifndef GL_EXT_histogram
+#define GL_EXT_histogram 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGetHistogramEXT (GLenum, GLboolean, GLenum, GLenum, GLvoid *);
+GLAPI void APIENTRY glGetHistogramParameterfvEXT (GLenum, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetHistogramParameterivEXT (GLenum, GLenum, GLint *);
+GLAPI void APIENTRY glGetMinmaxEXT (GLenum, GLboolean, GLenum, GLenum, GLvoid *);
+GLAPI void APIENTRY glGetMinmaxParameterfvEXT (GLenum, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetMinmaxParameterivEXT (GLenum, GLenum, GLint *);
+GLAPI void APIENTRY glHistogramEXT (GLenum, GLsizei, GLenum, GLboolean);
+GLAPI void APIENTRY glMinmaxEXT (GLenum, GLenum, GLboolean);
+GLAPI void APIENTRY glResetHistogramEXT (GLenum);
+GLAPI void APIENTRY glResetMinmaxEXT (GLenum);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLGETHISTOGRAMEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values);
+typedef void (APIENTRY * PFNGLGETHISTOGRAMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRY * PFNGLGETHISTOGRAMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRY * PFNGLGETMINMAXEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values);
+typedef void (APIENTRY * PFNGLGETMINMAXPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRY * PFNGLGETMINMAXPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRY * PFNGLHISTOGRAMEXTPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink);
+typedef void (APIENTRY * PFNGLMINMAXEXTPROC) (GLenum target, GLenum internalformat, GLboolean sink);
+typedef void (APIENTRY * PFNGLRESETHISTOGRAMEXTPROC) (GLenum target);
+typedef void (APIENTRY * PFNGLRESETMINMAXEXTPROC) (GLenum target);
+#endif
+
+#ifndef GL_EXT_convolution
+#define GL_EXT_convolution 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glConvolutionFilter1DEXT (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *);
+GLAPI void APIENTRY glConvolutionFilter2DEXT (GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *);
+GLAPI void APIENTRY glConvolutionParameterfEXT (GLenum, GLenum, GLfloat);
+GLAPI void APIENTRY glConvolutionParameterfvEXT (GLenum, GLenum, const GLfloat *);
+GLAPI void APIENTRY glConvolutionParameteriEXT (GLenum, GLenum, GLint);
+GLAPI void APIENTRY glConvolutionParameterivEXT (GLenum, GLenum, const GLint *);
+GLAPI void APIENTRY glCopyConvolutionFilter1DEXT (GLenum, GLenum, GLint, GLint, GLsizei);
+GLAPI void APIENTRY glCopyConvolutionFilter2DEXT (GLenum, GLenum, GLint, GLint, GLsizei, GLsizei);
+GLAPI void APIENTRY glGetConvolutionFilterEXT (GLenum, GLenum, GLenum, GLvoid *);
+GLAPI void APIENTRY glGetConvolutionParameterfvEXT (GLenum, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetConvolutionParameterivEXT (GLenum, GLenum, GLint *);
+GLAPI void APIENTRY glGetSeparableFilterEXT (GLenum, GLenum, GLenum, GLvoid *, GLvoid *, GLvoid *);
+GLAPI void APIENTRY glSeparableFilter2DEXT (GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *, const GLvoid *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image);
+typedef void (APIENTRY * PFNGLCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image);
+typedef void (APIENTRY * PFNGLCONVOLUTIONPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat params);
+typedef void (APIENTRY * PFNGLCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRY * PFNGLCONVOLUTIONPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint params);
+typedef void (APIENTRY * PFNGLCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRY * PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
+typedef void (APIENTRY * PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRY * PFNGLGETCONVOLUTIONFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *image);
+typedef void (APIENTRY * PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRY * PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRY * PFNGLGETSEPARABLEFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span);
+typedef void (APIENTRY * PFNGLSEPARABLEFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column);
+#endif
+
+#ifndef GL_EXT_color_matrix
+#define GL_EXT_color_matrix 1
+#endif
+
+#ifndef GL_SGI_color_table
+#define GL_SGI_color_table 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glColorTableSGI (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *);
+GLAPI void APIENTRY glColorTableParameterfvSGI (GLenum, GLenum, const GLfloat *);
+GLAPI void APIENTRY glColorTableParameterivSGI (GLenum, GLenum, const GLint *);
+GLAPI void APIENTRY glCopyColorTableSGI (GLenum, GLenum, GLint, GLint, GLsizei);
+GLAPI void APIENTRY glGetColorTableSGI (GLenum, GLenum, GLenum, GLvoid *);
+GLAPI void APIENTRY glGetColorTableParameterfvSGI (GLenum, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetColorTableParameterivSGI (GLenum, GLenum, GLint *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table);
+typedef void (APIENTRY * PFNGLCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRY * PFNGLCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRY * PFNGLCOPYCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
+typedef void (APIENTRY * PFNGLGETCOLORTABLESGIPROC) (GLenum target, GLenum format, GLenum type, GLvoid *table);
+typedef void (APIENTRY * PFNGLGETCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRY * PFNGLGETCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, GLint *params);
+#endif
+
+#ifndef GL_SGIX_pixel_texture
+#define GL_SGIX_pixel_texture 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPixelTexGenSGIX (GLenum);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLPIXELTEXGENSGIXPROC) (GLenum mode);
+#endif
+
+#ifndef GL_SGIS_pixel_texture
+#define GL_SGIS_pixel_texture 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPixelTexGenParameteriSGIS (GLenum, GLint);
+GLAPI void APIENTRY glPixelTexGenParameterivSGIS (GLenum, const GLint *);
+GLAPI void APIENTRY glPixelTexGenParameterfSGIS (GLenum, GLfloat);
+GLAPI void APIENTRY glPixelTexGenParameterfvSGIS (GLenum, const GLfloat *);
+GLAPI void APIENTRY glGetPixelTexGenParameterivSGIS (GLenum, GLint *);
+GLAPI void APIENTRY glGetPixelTexGenParameterfvSGIS (GLenum, GLfloat *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLPIXELTEXGENPARAMETERISGISPROC) (GLenum pname, GLint param);
+typedef void (APIENTRY * PFNGLPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, const GLint *params);
+typedef void (APIENTRY * PFNGLPIXELTEXGENPARAMETERFSGISPROC) (GLenum pname, GLfloat param);
+typedef void (APIENTRY * PFNGLPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params);
+typedef void (APIENTRY * PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, GLint *params);
+typedef void (APIENTRY * PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, GLfloat *params);
+#endif
+
+#ifndef GL_SGIS_texture4D
+#define GL_SGIS_texture4D 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexImage4DSGIS (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid *);
+GLAPI void APIENTRY glTexSubImage4DSGIS (GLenum, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLTEXIMAGE4DSGISPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
+typedef void (APIENTRY * PFNGLTEXSUBIMAGE4DSGISPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const GLvoid *pixels);
+#endif
+
+#ifndef GL_SGI_texture_color_table
+#define GL_SGI_texture_color_table 1
+#endif
+
+#ifndef GL_EXT_cmyka
+#define GL_EXT_cmyka 1
+#endif
+
+#ifndef GL_EXT_texture_object
+#define GL_EXT_texture_object 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLboolean APIENTRY glAreTexturesResidentEXT (GLsizei, const GLuint *, GLboolean *);
+GLAPI void APIENTRY glBindTextureEXT (GLenum, GLuint);
+GLAPI void APIENTRY glDeleteTexturesEXT (GLsizei, const GLuint *);
+GLAPI void APIENTRY glGenTexturesEXT (GLsizei, GLuint *);
+GLAPI GLboolean APIENTRY glIsTextureEXT (GLuint);
+GLAPI void APIENTRY glPrioritizeTexturesEXT (GLsizei, const GLuint *, const GLclampf *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef GLboolean (APIENTRY * PFNGLARETEXTURESRESIDENTEXTPROC) (GLsizei n, const GLuint *textures, GLboolean *residences);
+typedef void (APIENTRY * PFNGLBINDTEXTUREEXTPROC) (GLenum target, GLuint texture);
+typedef void (APIENTRY * PFNGLDELETETEXTURESEXTPROC) (GLsizei n, const GLuint *textures);
+typedef void (APIENTRY * PFNGLGENTEXTURESEXTPROC) (GLsizei n, GLuint *textures);
+typedef GLboolean (APIENTRY * PFNGLISTEXTUREEXTPROC) (GLuint texture);
+typedef void (APIENTRY * PFNGLPRIORITIZETEXTURESEXTPROC) (GLsizei n, const GLuint *textures, const GLclampf *priorities);
+#endif
+
+#ifndef GL_SGIS_detail_texture
+#define GL_SGIS_detail_texture 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDetailTexFuncSGIS (GLenum, GLsizei, const GLfloat *);
+GLAPI void APIENTRY glGetDetailTexFuncSGIS (GLenum, GLfloat *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLDETAILTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points);
+typedef void (APIENTRY * PFNGLGETDETAILTEXFUNCSGISPROC) (GLenum target, GLfloat *points);
+#endif
+
+#ifndef GL_SGIS_sharpen_texture
+#define GL_SGIS_sharpen_texture 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSharpenTexFuncSGIS (GLenum, GLsizei, const GLfloat *);
+GLAPI void APIENTRY glGetSharpenTexFuncSGIS (GLenum, GLfloat *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLSHARPENTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points);
+typedef void (APIENTRY * PFNGLGETSHARPENTEXFUNCSGISPROC) (GLenum target, GLfloat *points);
+#endif
+
+#ifndef GL_EXT_packed_pixels
+#define GL_EXT_packed_pixels 1
+#endif
+
+#ifndef GL_SGIS_texture_lod
+#define GL_SGIS_texture_lod 1
+#endif
+
+#ifndef GL_SGIS_multisample
+#define GL_SGIS_multisample 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSampleMaskSGIS (GLclampf, GLboolean);
+GLAPI void APIENTRY glSamplePatternSGIS (GLenum);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLSAMPLEMASKSGISPROC) (GLclampf value, GLboolean invert);
+typedef void (APIENTRY * PFNGLSAMPLEPATTERNSGISPROC) (GLenum pattern);
+#endif
+
+#ifndef GL_EXT_rescale_normal
+#define GL_EXT_rescale_normal 1
+#endif
+
+#ifndef GL_EXT_vertex_array
+#define GL_EXT_vertex_array 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glArrayElementEXT (GLint);
+GLAPI void APIENTRY glColorPointerEXT (GLint, GLenum, GLsizei, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glDrawArraysEXT (GLenum, GLint, GLsizei);
+GLAPI void APIENTRY glEdgeFlagPointerEXT (GLsizei, GLsizei, const GLboolean *);
+GLAPI void APIENTRY glGetPointervEXT (GLenum, GLvoid* *);
+GLAPI void APIENTRY glIndexPointerEXT (GLenum, GLsizei, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glNormalPointerEXT (GLenum, GLsizei, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glTexCoordPointerEXT (GLint, GLenum, GLsizei, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glVertexPointerEXT (GLint, GLenum, GLsizei, GLsizei, const GLvoid *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLARRAYELEMENTEXTPROC) (GLint i);
+typedef void (APIENTRY * PFNGLCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);
+typedef void (APIENTRY * PFNGLDRAWARRAYSEXTPROC) (GLenum mode, GLint first, GLsizei count);
+typedef void (APIENTRY * PFNGLEDGEFLAGPOINTEREXTPROC) (GLsizei stride, GLsizei count, const GLboolean *pointer);
+typedef void (APIENTRY * PFNGLGETPOINTERVEXTPROC) (GLenum pname, GLvoid* *params);
+typedef void (APIENTRY * PFNGLINDEXPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);
+typedef void (APIENTRY * PFNGLNORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);
+typedef void (APIENTRY * PFNGLTEXCOORDPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);
+typedef void (APIENTRY * PFNGLVERTEXPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);
+#endif
+
+#ifndef GL_EXT_misc_attribute
+#define GL_EXT_misc_attribute 1
+#endif
+
+#ifndef GL_SGIS_generate_mipmap
+#define GL_SGIS_generate_mipmap 1
+#endif
+
+#ifndef GL_SGIX_clipmap
+#define GL_SGIX_clipmap 1
+#endif
+
+#ifndef GL_SGIX_shadow
+#define GL_SGIX_shadow 1
+#endif
+
+#ifndef GL_SGIS_texture_edge_clamp
+#define GL_SGIS_texture_edge_clamp 1
+#endif
+
+#ifndef GL_SGIS_texture_border_clamp
+#define GL_SGIS_texture_border_clamp 1
+#endif
+
+#ifndef GL_EXT_blend_minmax
+#define GL_EXT_blend_minmax 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendEquationEXT (GLenum);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLBLENDEQUATIONEXTPROC) (GLenum mode);
+#endif
+
+#ifndef GL_EXT_blend_subtract
+#define GL_EXT_blend_subtract 1
+#endif
+
+#ifndef GL_EXT_blend_logic_op
+#define GL_EXT_blend_logic_op 1
+#endif
+
+#ifndef GL_SGIX_interlace
+#define GL_SGIX_interlace 1
+#endif
+
+#ifndef GL_SGIX_pixel_tiles
+#define GL_SGIX_pixel_tiles 1
+#endif
+
+#ifndef GL_SGIX_texture_select
+#define GL_SGIX_texture_select 1
+#endif
+
+#ifndef GL_SGIX_sprite
+#define GL_SGIX_sprite 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSpriteParameterfSGIX (GLenum, GLfloat);
+GLAPI void APIENTRY glSpriteParameterfvSGIX (GLenum, const GLfloat *);
+GLAPI void APIENTRY glSpriteParameteriSGIX (GLenum, GLint);
+GLAPI void APIENTRY glSpriteParameterivSGIX (GLenum, const GLint *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLSPRITEPARAMETERFSGIXPROC) (GLenum pname, GLfloat param);
+typedef void (APIENTRY * PFNGLSPRITEPARAMETERFVSGIXPROC) (GLenum pname, const GLfloat *params);
+typedef void (APIENTRY * PFNGLSPRITEPARAMETERISGIXPROC) (GLenum pname, GLint param);
+typedef void (APIENTRY * PFNGLSPRITEPARAMETERIVSGIXPROC) (GLenum pname, const GLint *params);
+#endif
+
+#ifndef GL_SGIX_texture_multi_buffer
+#define GL_SGIX_texture_multi_buffer 1
+#endif
+
+#ifndef GL_EXT_point_parameters
+#define GL_EXT_point_parameters 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPointParameterfEXT (GLenum, GLfloat);
+GLAPI void APIENTRY glPointParameterfvEXT (GLenum, const GLfloat *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLPOINTPARAMETERFEXTPROC) (GLenum pname, GLfloat param);
+typedef void (APIENTRY * PFNGLPOINTPARAMETERFVEXTPROC) (GLenum pname, const GLfloat *params);
+#endif
+
+#ifndef GL_SGIS_point_parameters
+#define GL_SGIS_point_parameters 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPointParameterfSGIS (GLenum, GLfloat);
+GLAPI void APIENTRY glPointParameterfvSGIS (GLenum, const GLfloat *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLPOINTPARAMETERFSGISPROC) (GLenum pname, GLfloat param);
+typedef void (APIENTRY * PFNGLPOINTPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params);
+#endif
+
+#ifndef GL_SGIX_instruments
+#define GL_SGIX_instruments 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLint APIENTRY glGetInstrumentsSGIX (void);
+GLAPI void APIENTRY glInstrumentsBufferSGIX (GLsizei, GLint *);
+GLAPI GLint APIENTRY glPollInstrumentsSGIX (GLint *);
+GLAPI void APIENTRY glReadInstrumentsSGIX (GLint);
+GLAPI void APIENTRY glStartInstrumentsSGIX (void);
+GLAPI void APIENTRY glStopInstrumentsSGIX (GLint);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef GLint (APIENTRY * PFNGLGETINSTRUMENTSSGIXPROC) (void);
+typedef void (APIENTRY * PFNGLINSTRUMENTSBUFFERSGIXPROC) (GLsizei size, GLint *buffer);
+typedef GLint (APIENTRY * PFNGLPOLLINSTRUMENTSSGIXPROC) (GLint *marker_p);
+typedef void (APIENTRY * PFNGLREADINSTRUMENTSSGIXPROC) (GLint marker);
+typedef void (APIENTRY * PFNGLSTARTINSTRUMENTSSGIXPROC) (void);
+typedef void (APIENTRY * PFNGLSTOPINSTRUMENTSSGIXPROC) (GLint marker);
+#endif
+
+#ifndef GL_SGIX_texture_scale_bias
+#define GL_SGIX_texture_scale_bias 1
+#endif
+
+#ifndef GL_SGIX_framezoom
+#define GL_SGIX_framezoom 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFrameZoomSGIX (GLint);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLFRAMEZOOMSGIXPROC) (GLint factor);
+#endif
+
+#ifndef GL_SGIX_tag_sample_buffer
+#define GL_SGIX_tag_sample_buffer 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTagSampleBufferSGIX (void);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLTAGSAMPLEBUFFERSGIXPROC) (void);
+#endif
+
+#ifndef GL_SGIX_polynomial_ffd
+#define GL_SGIX_polynomial_ffd 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDeformationMap3dSGIX (GLenum, GLdouble, GLdouble, GLint, GLint, GLdouble, GLdouble, GLint, GLint, GLdouble, GLdouble, GLint, GLint, const GLdouble *);
+GLAPI void APIENTRY glDeformationMap3fSGIX (GLenum, GLfloat, GLfloat, GLint, GLint, GLfloat, GLfloat, GLint, GLint, GLfloat, GLfloat, GLint, GLint, const GLfloat *);
+GLAPI void APIENTRY glDeformSGIX (GLbitfield);
+GLAPI void APIENTRY glLoadIdentityDeformationMapSGIX (GLbitfield);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLDEFORMATIONMAP3DSGIXPROC) (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble *points);
+typedef void (APIENTRY * PFNGLDEFORMATIONMAP3FSGIXPROC) (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat *points);
+typedef void (APIENTRY * PFNGLDEFORMSGIXPROC) (GLbitfield mask);
+typedef void (APIENTRY * PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC) (GLbitfield mask);
+#endif
+
+#ifndef GL_SGIX_reference_plane
+#define GL_SGIX_reference_plane 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glReferencePlaneSGIX (const GLdouble *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLREFERENCEPLANESGIXPROC) (const GLdouble *equation);
+#endif
+
+#ifndef GL_SGIX_flush_raster
+#define GL_SGIX_flush_raster 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFlushRasterSGIX (void);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLFLUSHRASTERSGIXPROC) (void);
+#endif
+
+#ifndef GL_SGIX_depth_texture
+#define GL_SGIX_depth_texture 1
+#endif
+
+#ifndef GL_SGIS_fog_function
+#define GL_SGIS_fog_function 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFogFuncSGIS (GLsizei, const GLfloat *);
+GLAPI void APIENTRY glGetFogFuncSGIS (GLfloat *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLFOGFUNCSGISPROC) (GLsizei n, const GLfloat *points);
+typedef void (APIENTRY * PFNGLGETFOGFUNCSGISPROC) (GLfloat *points);
+#endif
+
+#ifndef GL_SGIX_fog_offset
+#define GL_SGIX_fog_offset 1
+#endif
+
+#ifndef GL_HP_image_transform
+#define GL_HP_image_transform 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glImageTransformParameteriHP (GLenum, GLenum, GLint);
+GLAPI void APIENTRY glImageTransformParameterfHP (GLenum, GLenum, GLfloat);
+GLAPI void APIENTRY glImageTransformParameterivHP (GLenum, GLenum, const GLint *);
+GLAPI void APIENTRY glImageTransformParameterfvHP (GLenum, GLenum, const GLfloat *);
+GLAPI void APIENTRY glGetImageTransformParameterivHP (GLenum, GLenum, GLint *);
+GLAPI void APIENTRY glGetImageTransformParameterfvHP (GLenum, GLenum, GLfloat *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLIMAGETRANSFORMPARAMETERIHPPROC) (GLenum target, GLenum pname, GLint param);
+typedef void (APIENTRY * PFNGLIMAGETRANSFORMPARAMETERFHPPROC) (GLenum target, GLenum pname, GLfloat param);
+typedef void (APIENTRY * PFNGLIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRY * PFNGLIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRY * PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRY * PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, GLfloat *params);
+#endif
+
+#ifndef GL_HP_convolution_border_modes
+#define GL_HP_convolution_border_modes 1
+#endif
+
+#ifndef GL_SGIX_texture_add_env
+#define GL_SGIX_texture_add_env 1
+#endif
+
+#ifndef GL_EXT_color_subtable
+#define GL_EXT_color_subtable 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glColorSubTableEXT (GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *);
+GLAPI void APIENTRY glCopyColorSubTableEXT (GLenum, GLsizei, GLint, GLint, GLsizei);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data);
+typedef void (APIENTRY * PFNGLCOPYCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width);
+#endif
+
+#ifndef GL_PGI_vertex_hints
+#define GL_PGI_vertex_hints 1
+#endif
+
+#ifndef GL_PGI_misc_hints
+#define GL_PGI_misc_hints 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glHintPGI (GLenum, GLint);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLHINTPGIPROC) (GLenum target, GLint mode);
+#endif
+
+#ifndef GL_EXT_paletted_texture
+#define GL_EXT_paletted_texture 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glColorTableEXT (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *);
+GLAPI void APIENTRY glGetColorTableEXT (GLenum, GLenum, GLenum, GLvoid *);
+GLAPI void APIENTRY glGetColorTableParameterivEXT (GLenum, GLenum, GLint *);
+GLAPI void APIENTRY glGetColorTableParameterfvEXT (GLenum, GLenum, GLfloat *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLCOLORTABLEEXTPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const GLvoid *table);
+typedef void (APIENTRY * PFNGLGETCOLORTABLEEXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *data);
+typedef void (APIENTRY * PFNGLGETCOLORTABLEPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRY * PFNGLGETCOLORTABLEPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params);
+#endif
+
+#ifndef GL_EXT_clip_volume_hint
+#define GL_EXT_clip_volume_hint 1
+#endif
+
+#ifndef GL_SGIX_list_priority
+#define GL_SGIX_list_priority 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGetListParameterfvSGIX (GLuint, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetListParameterivSGIX (GLuint, GLenum, GLint *);
+GLAPI void APIENTRY glListParameterfSGIX (GLuint, GLenum, GLfloat);
+GLAPI void APIENTRY glListParameterfvSGIX (GLuint, GLenum, const GLfloat *);
+GLAPI void APIENTRY glListParameteriSGIX (GLuint, GLenum, GLint);
+GLAPI void APIENTRY glListParameterivSGIX (GLuint, GLenum, const GLint *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLGETLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, GLfloat *params);
+typedef void (APIENTRY * PFNGLGETLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, GLint *params);
+typedef void (APIENTRY * PFNGLLISTPARAMETERFSGIXPROC) (GLuint list, GLenum pname, GLfloat param);
+typedef void (APIENTRY * PFNGLLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, const GLfloat *params);
+typedef void (APIENTRY * PFNGLLISTPARAMETERISGIXPROC) (GLuint list, GLenum pname, GLint param);
+typedef void (APIENTRY * PFNGLLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, const GLint *params);
+#endif
+
+#ifndef GL_SGIX_ir_instrument1
+#define GL_SGIX_ir_instrument1 1
+#endif
+
+#ifndef GL_SGIX_calligraphic_fragment
+#define GL_SGIX_calligraphic_fragment 1
+#endif
+
+#ifndef GL_SGIX_texture_lod_bias
+#define GL_SGIX_texture_lod_bias 1
+#endif
+
+#ifndef GL_SGIX_shadow_ambient
+#define GL_SGIX_shadow_ambient 1
+#endif
+
+#ifndef GL_EXT_index_texture
+#define GL_EXT_index_texture 1
+#endif
+
+#ifndef GL_EXT_index_material
+#define GL_EXT_index_material 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glIndexMaterialEXT (GLenum, GLenum);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLINDEXMATERIALEXTPROC) (GLenum face, GLenum mode);
+#endif
+
+#ifndef GL_EXT_index_func
+#define GL_EXT_index_func 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glIndexFuncEXT (GLenum, GLclampf);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLINDEXFUNCEXTPROC) (GLenum func, GLclampf ref);
+#endif
+
+#ifndef GL_EXT_index_array_formats
+#define GL_EXT_index_array_formats 1
+#endif
+
+#ifndef GL_EXT_compiled_vertex_array
+#define GL_EXT_compiled_vertex_array 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glLockArraysEXT (GLint, GLsizei);
+GLAPI void APIENTRY glUnlockArraysEXT (void);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLLOCKARRAYSEXTPROC) (GLint first, GLsizei count);
+typedef void (APIENTRY * PFNGLUNLOCKARRAYSEXTPROC) (void);
+#endif
+
+#ifndef GL_EXT_cull_vertex
+#define GL_EXT_cull_vertex 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glCullParameterdvEXT (GLenum, GLdouble *);
+GLAPI void APIENTRY glCullParameterfvEXT (GLenum, GLfloat *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLCULLPARAMETERDVEXTPROC) (GLenum pname, GLdouble *params);
+typedef void (APIENTRY * PFNGLCULLPARAMETERFVEXTPROC) (GLenum pname, GLfloat *params);
+#endif
+
+#ifndef GL_SGIX_ycrcb
+#define GL_SGIX_ycrcb 1
+#endif
+
+#ifndef GL_SGIX_fragment_lighting
+#define GL_SGIX_fragment_lighting 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFragmentColorMaterialSGIX (GLenum, GLenum);
+GLAPI void APIENTRY glFragmentLightfSGIX (GLenum, GLenum, GLfloat);
+GLAPI void APIENTRY glFragmentLightfvSGIX (GLenum, GLenum, const GLfloat *);
+GLAPI void APIENTRY glFragmentLightiSGIX (GLenum, GLenum, GLint);
+GLAPI void APIENTRY glFragmentLightivSGIX (GLenum, GLenum, const GLint *);
+GLAPI void APIENTRY glFragmentLightModelfSGIX (GLenum, GLfloat);
+GLAPI void APIENTRY glFragmentLightModelfvSGIX (GLenum, const GLfloat *);
+GLAPI void APIENTRY glFragmentLightModeliSGIX (GLenum, GLint);
+GLAPI void APIENTRY glFragmentLightModelivSGIX (GLenum, const GLint *);
+GLAPI void APIENTRY glFragmentMaterialfSGIX (GLenum, GLenum, GLfloat);
+GLAPI void APIENTRY glFragmentMaterialfvSGIX (GLenum, GLenum, const GLfloat *);
+GLAPI void APIENTRY glFragmentMaterialiSGIX (GLenum, GLenum, GLint);
+GLAPI void APIENTRY glFragmentMaterialivSGIX (GLenum, GLenum, const GLint *);
+GLAPI void APIENTRY glGetFragmentLightfvSGIX (GLenum, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetFragmentLightivSGIX (GLenum, GLenum, GLint *);
+GLAPI void APIENTRY glGetFragmentMaterialfvSGIX (GLenum, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetFragmentMaterialivSGIX (GLenum, GLenum, GLint *);
+GLAPI void APIENTRY glLightEnviSGIX (GLenum, GLint);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLFRAGMENTCOLORMATERIALSGIXPROC) (GLenum face, GLenum mode);
+typedef void (APIENTRY * PFNGLFRAGMENTLIGHTFSGIXPROC) (GLenum light, GLenum pname, GLfloat param);
+typedef void (APIENTRY * PFNGLFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, const GLfloat *params);
+typedef void (APIENTRY * PFNGLFRAGMENTLIGHTISGIXPROC) (GLenum light, GLenum pname, GLint param);
+typedef void (APIENTRY * PFNGLFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, const GLint *params);
+typedef void (APIENTRY * PFNGLFRAGMENTLIGHTMODELFSGIXPROC) (GLenum pname, GLfloat param);
+typedef void (APIENTRY * PFNGLFRAGMENTLIGHTMODELFVSGIXPROC) (GLenum pname, const GLfloat *params);
+typedef void (APIENTRY * PFNGLFRAGMENTLIGHTMODELISGIXPROC) (GLenum pname, GLint param);
+typedef void (APIENTRY * PFNGLFRAGMENTLIGHTMODELIVSGIXPROC) (GLenum pname, const GLint *params);
+typedef void (APIENTRY * PFNGLFRAGMENTMATERIALFSGIXPROC) (GLenum face, GLenum pname, GLfloat param);
+typedef void (APIENTRY * PFNGLFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, const GLfloat *params);
+typedef void (APIENTRY * PFNGLFRAGMENTMATERIALISGIXPROC) (GLenum face, GLenum pname, GLint param);
+typedef void (APIENTRY * PFNGLFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, const GLint *params);
+typedef void (APIENTRY * PFNGLGETFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, GLfloat *params);
+typedef void (APIENTRY * PFNGLGETFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, GLint *params);
+typedef void (APIENTRY * PFNGLGETFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, GLfloat *params);
+typedef void (APIENTRY * PFNGLGETFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, GLint *params);
+typedef void (APIENTRY * PFNGLLIGHTENVISGIXPROC) (GLenum pname, GLint param);
+#endif
+
+#ifndef GL_IBM_rasterpos_clip
+#define GL_IBM_rasterpos_clip 1
+#endif
+
+#ifndef GL_HP_texture_lighting
+#define GL_HP_texture_lighting 1
+#endif
+
+#ifndef GL_EXT_draw_range_elements
+#define GL_EXT_draw_range_elements 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawRangeElementsEXT (GLenum, GLuint, GLuint, GLsizei, GLenum, const GLvoid *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLDRAWRANGEELEMENTSEXTPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices);
+#endif
+
+#ifndef GL_WIN_phong_shading
+#define GL_WIN_phong_shading 1
+#endif
+
+#ifndef GL_WIN_specular_fog
+#define GL_WIN_specular_fog 1
+#endif
+
+#ifndef GL_EXT_light_texture
+#define GL_EXT_light_texture 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glApplyTextureEXT (GLenum);
+GLAPI void APIENTRY glTextureLightEXT (GLenum);
+GLAPI void APIENTRY glTextureMaterialEXT (GLenum, GLenum);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLAPPLYTEXTUREEXTPROC) (GLenum mode);
+typedef void (APIENTRY * PFNGLTEXTURELIGHTEXTPROC) (GLenum pname);
+typedef void (APIENTRY * PFNGLTEXTUREMATERIALEXTPROC) (GLenum face, GLenum mode);
+#endif
+
+#ifndef GL_SGIX_blend_alpha_minmax
+#define GL_SGIX_blend_alpha_minmax 1
+#endif
+
+#ifndef GL_EXT_bgra
+#define GL_EXT_bgra 1
+#endif
+
+#ifndef GL_SGIX_async
+#define GL_SGIX_async 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glAsyncMarkerSGIX (GLuint);
+GLAPI GLint APIENTRY glFinishAsyncSGIX (GLuint *);
+GLAPI GLint APIENTRY glPollAsyncSGIX (GLuint *);
+GLAPI GLuint APIENTRY glGenAsyncMarkersSGIX (GLsizei);
+GLAPI void APIENTRY glDeleteAsyncMarkersSGIX (GLuint, GLsizei);
+GLAPI GLboolean APIENTRY glIsAsyncMarkerSGIX (GLuint);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLASYNCMARKERSGIXPROC) (GLuint marker);
+typedef GLint (APIENTRY * PFNGLFINISHASYNCSGIXPROC) (GLuint *markerp);
+typedef GLint (APIENTRY * PFNGLPOLLASYNCSGIXPROC) (GLuint *markerp);
+typedef GLuint (APIENTRY * PFNGLGENASYNCMARKERSSGIXPROC) (GLsizei range);
+typedef void (APIENTRY * PFNGLDELETEASYNCMARKERSSGIXPROC) (GLuint marker, GLsizei range);
+typedef GLboolean (APIENTRY * PFNGLISASYNCMARKERSGIXPROC) (GLuint marker);
+#endif
+
+#ifndef GL_SGIX_async_pixel
+#define GL_SGIX_async_pixel 1
+#endif
+
+#ifndef GL_SGIX_async_histogram
+#define GL_SGIX_async_histogram 1
+#endif
+
+#ifndef GL_INTEL_parallel_arrays
+#define GL_INTEL_parallel_arrays 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexPointervINTEL (GLint, GLenum, const GLvoid* *);
+GLAPI void APIENTRY glNormalPointervINTEL (GLenum, const GLvoid* *);
+GLAPI void APIENTRY glColorPointervINTEL (GLint, GLenum, const GLvoid* *);
+GLAPI void APIENTRY glTexCoordPointervINTEL (GLint, GLenum, const GLvoid* *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLVERTEXPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer);
+typedef void (APIENTRY * PFNGLNORMALPOINTERVINTELPROC) (GLenum type, const GLvoid* *pointer);
+typedef void (APIENTRY * PFNGLCOLORPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer);
+typedef void (APIENTRY * PFNGLTEXCOORDPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer);
+#endif
+
+#ifndef GL_HP_occlusion_test
+#define GL_HP_occlusion_test 1
+#endif
+
+#ifndef GL_EXT_pixel_transform
+#define GL_EXT_pixel_transform 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPixelTransformParameteriEXT (GLenum, GLenum, GLint);
+GLAPI void APIENTRY glPixelTransformParameterfEXT (GLenum, GLenum, GLfloat);
+GLAPI void APIENTRY glPixelTransformParameterivEXT (GLenum, GLenum, const GLint *);
+GLAPI void APIENTRY glPixelTransformParameterfvEXT (GLenum, GLenum, const GLfloat *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLPIXELTRANSFORMPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint param);
+typedef void (APIENTRY * PFNGLPIXELTRANSFORMPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat param);
+typedef void (APIENTRY * PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRY * PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params);
+#endif
+
+#ifndef GL_EXT_pixel_transform_color_table
+#define GL_EXT_pixel_transform_color_table 1
+#endif
+
+#ifndef GL_EXT_shared_texture_palette
+#define GL_EXT_shared_texture_palette 1
+#endif
+
+#ifndef GL_EXT_separate_specular_color
+#define GL_EXT_separate_specular_color 1
+#endif
+
+#ifndef GL_EXT_secondary_color
+#define GL_EXT_secondary_color 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSecondaryColor3bEXT (GLbyte, GLbyte, GLbyte);
+GLAPI void APIENTRY glSecondaryColor3bvEXT (const GLbyte *);
+GLAPI void APIENTRY glSecondaryColor3dEXT (GLdouble, GLdouble, GLdouble);
+GLAPI void APIENTRY glSecondaryColor3dvEXT (const GLdouble *);
+GLAPI void APIENTRY glSecondaryColor3fEXT (GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glSecondaryColor3fvEXT (const GLfloat *);
+GLAPI void APIENTRY glSecondaryColor3iEXT (GLint, GLint, GLint);
+GLAPI void APIENTRY glSecondaryColor3ivEXT (const GLint *);
+GLAPI void APIENTRY glSecondaryColor3sEXT (GLshort, GLshort, GLshort);
+GLAPI void APIENTRY glSecondaryColor3svEXT (const GLshort *);
+GLAPI void APIENTRY glSecondaryColor3ubEXT (GLubyte, GLubyte, GLubyte);
+GLAPI void APIENTRY glSecondaryColor3ubvEXT (const GLubyte *);
+GLAPI void APIENTRY glSecondaryColor3uiEXT (GLuint, GLuint, GLuint);
+GLAPI void APIENTRY glSecondaryColor3uivEXT (const GLuint *);
+GLAPI void APIENTRY glSecondaryColor3usEXT (GLushort, GLushort, GLushort);
+GLAPI void APIENTRY glSecondaryColor3usvEXT (const GLushort *);
+GLAPI void APIENTRY glSecondaryColorPointerEXT (GLint, GLenum, GLsizei, const GLvoid *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLSECONDARYCOLOR3BEXTPROC) (GLbyte red, GLbyte green, GLbyte blue);
+typedef void (APIENTRY * PFNGLSECONDARYCOLOR3BVEXTPROC) (const GLbyte *v);
+typedef void (APIENTRY * PFNGLSECONDARYCOLOR3DEXTPROC) (GLdouble red, GLdouble green, GLdouble blue);
+typedef void (APIENTRY * PFNGLSECONDARYCOLOR3DVEXTPROC) (const GLdouble *v);
+typedef void (APIENTRY * PFNGLSECONDARYCOLOR3FEXTPROC) (GLfloat red, GLfloat green, GLfloat blue);
+typedef void (APIENTRY * PFNGLSECONDARYCOLOR3FVEXTPROC) (const GLfloat *v);
+typedef void (APIENTRY * PFNGLSECONDARYCOLOR3IEXTPROC) (GLint red, GLint green, GLint blue);
+typedef void (APIENTRY * PFNGLSECONDARYCOLOR3IVEXTPROC) (const GLint *v);
+typedef void (APIENTRY * PFNGLSECONDARYCOLOR3SEXTPROC) (GLshort red, GLshort green, GLshort blue);
+typedef void (APIENTRY * PFNGLSECONDARYCOLOR3SVEXTPROC) (const GLshort *v);
+typedef void (APIENTRY * PFNGLSECONDARYCOLOR3UBEXTPROC) (GLubyte red, GLubyte green, GLubyte blue);
+typedef void (APIENTRY * PFNGLSECONDARYCOLOR3UBVEXTPROC) (const GLubyte *v);
+typedef void (APIENTRY * PFNGLSECONDARYCOLOR3UIEXTPROC) (GLuint red, GLuint green, GLuint blue);
+typedef void (APIENTRY * PFNGLSECONDARYCOLOR3UIVEXTPROC) (const GLuint *v);
+typedef void (APIENTRY * PFNGLSECONDARYCOLOR3USEXTPROC) (GLushort red, GLushort green, GLushort blue);
+typedef void (APIENTRY * PFNGLSECONDARYCOLOR3USVEXTPROC) (const GLushort *v);
+typedef void (APIENTRY * PFNGLSECONDARYCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+#endif
+
+#ifndef GL_EXT_texture_perturb_normal
+#define GL_EXT_texture_perturb_normal 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTextureNormalEXT (GLenum);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLTEXTURENORMALEXTPROC) (GLenum mode);
+#endif
+
+#ifndef GL_EXT_multi_draw_arrays
+#define GL_EXT_multi_draw_arrays 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMultiDrawArraysEXT (GLenum, GLint *, GLsizei *, GLsizei);
+GLAPI void APIENTRY glMultiDrawElementsEXT (GLenum, const GLsizei *, GLenum, const GLvoid* *, GLsizei);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, GLint *first, GLsizei *count, GLsizei primcount);
+typedef void (APIENTRY * PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount);
+#endif
+
+#ifndef GL_EXT_fog_coord
+#define GL_EXT_fog_coord 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFogCoordfEXT (GLfloat);
+GLAPI void APIENTRY glFogCoordfvEXT (const GLfloat *);
+GLAPI void APIENTRY glFogCoorddEXT (GLdouble);
+GLAPI void APIENTRY glFogCoorddvEXT (const GLdouble *);
+GLAPI void APIENTRY glFogCoordPointerEXT (GLenum, GLsizei, const GLvoid *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLFOGCOORDFEXTPROC) (GLfloat coord);
+typedef void (APIENTRY * PFNGLFOGCOORDFVEXTPROC) (const GLfloat *coord);
+typedef void (APIENTRY * PFNGLFOGCOORDDEXTPROC) (GLdouble coord);
+typedef void (APIENTRY * PFNGLFOGCOORDDVEXTPROC) (const GLdouble *coord);
+typedef void (APIENTRY * PFNGLFOGCOORDPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer);
+#endif
+
+#ifndef GL_REND_screen_coordinates
+#define GL_REND_screen_coordinates 1
+#endif
+
+#ifndef GL_EXT_coordinate_frame
+#define GL_EXT_coordinate_frame 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTangent3bEXT (GLbyte, GLbyte, GLbyte);
+GLAPI void APIENTRY glTangent3bvEXT (const GLbyte *);
+GLAPI void APIENTRY glTangent3dEXT (GLdouble, GLdouble, GLdouble);
+GLAPI void APIENTRY glTangent3dvEXT (const GLdouble *);
+GLAPI void APIENTRY glTangent3fEXT (GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glTangent3fvEXT (const GLfloat *);
+GLAPI void APIENTRY glTangent3iEXT (GLint, GLint, GLint);
+GLAPI void APIENTRY glTangent3ivEXT (const GLint *);
+GLAPI void APIENTRY glTangent3sEXT (GLshort, GLshort, GLshort);
+GLAPI void APIENTRY glTangent3svEXT (const GLshort *);
+GLAPI void APIENTRY glBinormal3bEXT (GLbyte, GLbyte, GLbyte);
+GLAPI void APIENTRY glBinormal3bvEXT (const GLbyte *);
+GLAPI void APIENTRY glBinormal3dEXT (GLdouble, GLdouble, GLdouble);
+GLAPI void APIENTRY glBinormal3dvEXT (const GLdouble *);
+GLAPI void APIENTRY glBinormal3fEXT (GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glBinormal3fvEXT (const GLfloat *);
+GLAPI void APIENTRY glBinormal3iEXT (GLint, GLint, GLint);
+GLAPI void APIENTRY glBinormal3ivEXT (const GLint *);
+GLAPI void APIENTRY glBinormal3sEXT (GLshort, GLshort, GLshort);
+GLAPI void APIENTRY glBinormal3svEXT (const GLshort *);
+GLAPI void APIENTRY glTangentPointerEXT (GLenum, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glBinormalPointerEXT (GLenum, GLsizei, const GLvoid *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLTANGENT3BEXTPROC) (GLbyte tx, GLbyte ty, GLbyte tz);
+typedef void (APIENTRY * PFNGLTANGENT3BVEXTPROC) (const GLbyte *v);
+typedef void (APIENTRY * PFNGLTANGENT3DEXTPROC) (GLdouble tx, GLdouble ty, GLdouble tz);
+typedef void (APIENTRY * PFNGLTANGENT3DVEXTPROC) (const GLdouble *v);
+typedef void (APIENTRY * PFNGLTANGENT3FEXTPROC) (GLfloat tx, GLfloat ty, GLfloat tz);
+typedef void (APIENTRY * PFNGLTANGENT3FVEXTPROC) (const GLfloat *v);
+typedef void (APIENTRY * PFNGLTANGENT3IEXTPROC) (GLint tx, GLint ty, GLint tz);
+typedef void (APIENTRY * PFNGLTANGENT3IVEXTPROC) (const GLint *v);
+typedef void (APIENTRY * PFNGLTANGENT3SEXTPROC) (GLshort tx, GLshort ty, GLshort tz);
+typedef void (APIENTRY * PFNGLTANGENT3SVEXTPROC) (const GLshort *v);
+typedef void (APIENTRY * PFNGLBINORMAL3BEXTPROC) (GLbyte bx, GLbyte by, GLbyte bz);
+typedef void (APIENTRY * PFNGLBINORMAL3BVEXTPROC) (const GLbyte *v);
+typedef void (APIENTRY * PFNGLBINORMAL3DEXTPROC) (GLdouble bx, GLdouble by, GLdouble bz);
+typedef void (APIENTRY * PFNGLBINORMAL3DVEXTPROC) (const GLdouble *v);
+typedef void (APIENTRY * PFNGLBINORMAL3FEXTPROC) (GLfloat bx, GLfloat by, GLfloat bz);
+typedef void (APIENTRY * PFNGLBINORMAL3FVEXTPROC) (const GLfloat *v);
+typedef void (APIENTRY * PFNGLBINORMAL3IEXTPROC) (GLint bx, GLint by, GLint bz);
+typedef void (APIENTRY * PFNGLBINORMAL3IVEXTPROC) (const GLint *v);
+typedef void (APIENTRY * PFNGLBINORMAL3SEXTPROC) (GLshort bx, GLshort by, GLshort bz);
+typedef void (APIENTRY * PFNGLBINORMAL3SVEXTPROC) (const GLshort *v);
+typedef void (APIENTRY * PFNGLTANGENTPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer);
+typedef void (APIENTRY * PFNGLBINORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer);
+#endif
+
+#ifndef GL_EXT_texture_env_combine
+#define GL_EXT_texture_env_combine 1
+#endif
+
+#ifndef GL_APPLE_specular_vector
+#define GL_APPLE_specular_vector 1
+#endif
+
+#ifndef GL_APPLE_transform_hint
+#define GL_APPLE_transform_hint 1
+#endif
+
+#ifndef GL_SGIX_fog_scale
+#define GL_SGIX_fog_scale 1
+#endif
+
+#ifndef GL_SUNX_constant_data
+#define GL_SUNX_constant_data 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFinishTextureSUNX (void);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLFINISHTEXTURESUNXPROC) (void);
+#endif
+
+#ifndef GL_SUN_global_alpha
+#define GL_SUN_global_alpha 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGlobalAlphaFactorbSUN (GLbyte);
+GLAPI void APIENTRY glGlobalAlphaFactorsSUN (GLshort);
+GLAPI void APIENTRY glGlobalAlphaFactoriSUN (GLint);
+GLAPI void APIENTRY glGlobalAlphaFactorfSUN (GLfloat);
+GLAPI void APIENTRY glGlobalAlphaFactordSUN (GLdouble);
+GLAPI void APIENTRY glGlobalAlphaFactorubSUN (GLubyte);
+GLAPI void APIENTRY glGlobalAlphaFactorusSUN (GLushort);
+GLAPI void APIENTRY glGlobalAlphaFactoruiSUN (GLuint);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLGLOBALALPHAFACTORBSUNPROC) (GLbyte factor);
+typedef void (APIENTRY * PFNGLGLOBALALPHAFACTORSSUNPROC) (GLshort factor);
+typedef void (APIENTRY * PFNGLGLOBALALPHAFACTORISUNPROC) (GLint factor);
+typedef void (APIENTRY * PFNGLGLOBALALPHAFACTORFSUNPROC) (GLfloat factor);
+typedef void (APIENTRY * PFNGLGLOBALALPHAFACTORDSUNPROC) (GLdouble factor);
+typedef void (APIENTRY * PFNGLGLOBALALPHAFACTORUBSUNPROC) (GLubyte factor);
+typedef void (APIENTRY * PFNGLGLOBALALPHAFACTORUSSUNPROC) (GLushort factor);
+typedef void (APIENTRY * PFNGLGLOBALALPHAFACTORUISUNPROC) (GLuint factor);
+#endif
+
+#ifndef GL_SUN_triangle_list
+#define GL_SUN_triangle_list 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glReplacementCodeuiSUN (GLuint);
+GLAPI void APIENTRY glReplacementCodeusSUN (GLushort);
+GLAPI void APIENTRY glReplacementCodeubSUN (GLubyte);
+GLAPI void APIENTRY glReplacementCodeuivSUN (const GLuint *);
+GLAPI void APIENTRY glReplacementCodeusvSUN (const GLushort *);
+GLAPI void APIENTRY glReplacementCodeubvSUN (const GLubyte *);
+GLAPI void APIENTRY glReplacementCodePointerSUN (GLenum, GLsizei, const GLvoid* *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLREPLACEMENTCODEUISUNPROC) (GLuint code);
+typedef void (APIENTRY * PFNGLREPLACEMENTCODEUSSUNPROC) (GLushort code);
+typedef void (APIENTRY * PFNGLREPLACEMENTCODEUBSUNPROC) (GLubyte code);
+typedef void (APIENTRY * PFNGLREPLACEMENTCODEUIVSUNPROC) (const GLuint *code);
+typedef void (APIENTRY * PFNGLREPLACEMENTCODEUSVSUNPROC) (const GLushort *code);
+typedef void (APIENTRY * PFNGLREPLACEMENTCODEUBVSUNPROC) (const GLubyte *code);
+typedef void (APIENTRY * PFNGLREPLACEMENTCODEPOINTERSUNPROC) (GLenum type, GLsizei stride, const GLvoid* *pointer);
+#endif
+
+#ifndef GL_SUN_vertex
+#define GL_SUN_vertex 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glColor4ubVertex2fSUN (GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat);
+GLAPI void APIENTRY glColor4ubVertex2fvSUN (const GLubyte *, const GLfloat *);
+GLAPI void APIENTRY glColor4ubVertex3fSUN (GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glColor4ubVertex3fvSUN (const GLubyte *, const GLfloat *);
+GLAPI void APIENTRY glColor3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glColor3fVertex3fvSUN (const GLfloat *, const GLfloat *);
+GLAPI void APIENTRY glNormal3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glNormal3fVertex3fvSUN (const GLfloat *, const GLfloat *);
+GLAPI void APIENTRY glColor4fNormal3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glColor4fNormal3fVertex3fvSUN (const GLfloat *, const GLfloat *, const GLfloat *);
+GLAPI void APIENTRY glTexCoord2fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glTexCoord2fVertex3fvSUN (const GLfloat *, const GLfloat *);
+GLAPI void APIENTRY glTexCoord4fVertex4fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glTexCoord4fVertex4fvSUN (const GLfloat *, const GLfloat *);
+GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fSUN (GLfloat, GLfloat, GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fvSUN (const GLfloat *, const GLubyte *, const GLfloat *);
+GLAPI void APIENTRY glTexCoord2fColor3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glTexCoord2fColor3fVertex3fvSUN (const GLfloat *, const GLfloat *, const GLfloat *);
+GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fvSUN (const GLfloat *, const GLfloat *, const GLfloat *);
+GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fvSUN (const GLfloat *, const GLfloat *, const GLfloat *, const GLfloat *);
+GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fvSUN (const GLfloat *, const GLfloat *, const GLfloat *, const GLfloat *);
+GLAPI void APIENTRY glReplacementCodeuiVertex3fSUN (GLenum, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glReplacementCodeuiVertex3fvSUN (const GLenum *, const GLfloat *);
+GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fSUN (GLenum, GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fvSUN (const GLenum *, const GLubyte *, const GLfloat *);
+GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fSUN (GLenum, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fvSUN (const GLenum *, const GLfloat *, const GLfloat *);
+GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fSUN (GLenum, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fvSUN (const GLenum *, const GLfloat *, const GLfloat *);
+GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fSUN (GLenum, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fvSUN (const GLenum *, const GLfloat *, const GLfloat *, const GLfloat *);
+GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fSUN (GLenum, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fvSUN (const GLenum *, const GLfloat *, const GLfloat *);
+GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN (GLenum, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN (const GLenum *, const GLfloat *, const GLfloat *, const GLfloat *);
+GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN (GLenum, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN (const GLenum *, const GLfloat *, const GLfloat *, const GLfloat *, const GLfloat *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLCOLOR4UBVERTEX2FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y);
+typedef void (APIENTRY * PFNGLCOLOR4UBVERTEX2FVSUNPROC) (const GLubyte *c, const GLfloat *v);
+typedef void (APIENTRY * PFNGLCOLOR4UBVERTEX3FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRY * PFNGLCOLOR4UBVERTEX3FVSUNPROC) (const GLubyte *c, const GLfloat *v);
+typedef void (APIENTRY * PFNGLCOLOR3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRY * PFNGLCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *v);
+typedef void (APIENTRY * PFNGLNORMAL3FVERTEX3FSUNPROC) (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRY * PFNGLNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *n, const GLfloat *v);
+typedef void (APIENTRY * PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRY * PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *n, const GLfloat *v);
+typedef void (APIENTRY * PFNGLTEXCOORD2FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRY * PFNGLTEXCOORD2FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *v);
+typedef void (APIENTRY * PFNGLTEXCOORD4FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRY * PFNGLTEXCOORD4FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *v);
+typedef void (APIENTRY * PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRY * PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC) (const GLfloat *tc, const GLubyte *c, const GLfloat *v);
+typedef void (APIENTRY * PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRY * PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *v);
+typedef void (APIENTRY * PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRY * PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *n, const GLfloat *v);
+typedef void (APIENTRY * PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRY * PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v);
+typedef void (APIENTRY * PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRY * PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v);
+typedef void (APIENTRY * PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC) (GLenum rc, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRY * PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC) (const GLenum *rc, const GLfloat *v);
+typedef void (APIENTRY * PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC) (GLenum rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRY * PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC) (const GLenum *rc, const GLubyte *c, const GLfloat *v);
+typedef void (APIENTRY * PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC) (GLenum rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRY * PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC) (const GLenum *rc, const GLfloat *c, const GLfloat *v);
+typedef void (APIENTRY * PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC) (GLenum rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRY * PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC) (const GLenum *rc, const GLfloat *n, const GLfloat *v);
+typedef void (APIENTRY * PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLenum rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRY * PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLenum *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v);
+typedef void (APIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC) (GLenum rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC) (const GLenum *rc, const GLfloat *tc, const GLfloat *v);
+typedef void (APIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLenum rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLenum *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v);
+typedef void (APIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLenum rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLenum *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v);
+#endif
+
+#ifndef GL_EXT_blend_func_separate
+#define GL_EXT_blend_func_separate 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendFuncSeparateEXT (GLenum, GLenum, GLenum, GLenum);
+GLAPI void APIENTRY glBlendFuncSeparateINGR (GLenum, GLenum, GLenum, GLenum);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLBLENDFUNCSEPARATEEXTPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
+typedef void (APIENTRY * PFNGLBLENDFUNCSEPARATEINGRPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
+#endif
+
+#ifndef GL_INGR_color_clamp
+#define GL_INGR_color_clamp 1
+#endif
+
+#ifndef GL_INGR_interlace_read
+#define GL_INGR_interlace_read 1
+#endif
+
+#ifndef GL_EXT_stencil_wrap
+#define GL_EXT_stencil_wrap 1
+#endif
+
+#ifndef GL_EXT_422_pixels
+#define GL_EXT_422_pixels 1
+#endif
+
+#ifndef GL_NV_texgen_reflection
+#define GL_NV_texgen_reflection 1
+#endif
+
+#ifndef GL_SUN_convolution_border_modes
+#define GL_SUN_convolution_border_modes 1
+#endif
+
+#ifndef GL_EXT_texture_env_add
+#define GL_EXT_texture_env_add 1
+#endif
+
+#ifndef GL_EXT_texture_lod_bias
+#define GL_EXT_texture_lod_bias 1
+#endif
+
+#ifndef GL_EXT_texture_filter_anisotropic
+#define GL_EXT_texture_filter_anisotropic 1
+#endif
+
+#ifndef GL_EXT_vertex_weighting
+#define GL_EXT_vertex_weighting 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexWeightfEXT (GLfloat);
+GLAPI void APIENTRY glVertexWeightfvEXT (const GLfloat *);
+GLAPI void APIENTRY glVertexWeightPointerEXT (GLsizei, GLenum, GLsizei, const GLvoid *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLVERTEXWEIGHTFEXTPROC) (GLfloat weight);
+typedef void (APIENTRY * PFNGLVERTEXWEIGHTFVEXTPROC) (const GLfloat *weight);
+typedef void (APIENTRY * PFNGLVERTEXWEIGHTPOINTEREXTPROC) (GLsizei size, GLenum type, GLsizei stride, const GLvoid *pointer);
+#endif
+
+#ifndef GL_NV_light_max_exponent
+#define GL_NV_light_max_exponent 1
+#endif
+
+#ifndef GL_NV_vertex_array_range
+#define GL_NV_vertex_array_range 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFlushVertexArrayRangeNV (void);
+GLAPI void APIENTRY glVertexArrayRangeNV (GLsizei, const GLvoid *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLFLUSHVERTEXARRAYRANGENVPROC) (void);
+typedef void (APIENTRY * PFNGLVERTEXARRAYRANGENVPROC) (GLsizei length, const GLvoid *pointer);
+#endif
+
+#ifndef GL_NV_register_combiners
+#define GL_NV_register_combiners 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glCombinerParameterfvNV (GLenum, const GLfloat *);
+GLAPI void APIENTRY glCombinerParameterfNV (GLenum, GLfloat);
+GLAPI void APIENTRY glCombinerParameterivNV (GLenum, const GLint *);
+GLAPI void APIENTRY glCombinerParameteriNV (GLenum, GLint);
+GLAPI void APIENTRY glCombinerInputNV (GLenum, GLenum, GLenum, GLenum, GLenum, GLenum);
+GLAPI void APIENTRY glCombinerOutputNV (GLenum, GLenum, GLenum, GLenum, GLenum, GLenum, GLenum, GLboolean, GLboolean, GLboolean);
+GLAPI void APIENTRY glFinalCombinerInputNV (GLenum, GLenum, GLenum, GLenum);
+GLAPI void APIENTRY glGetCombinerInputParameterfvNV (GLenum, GLenum, GLenum, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetCombinerInputParameterivNV (GLenum, GLenum, GLenum, GLenum, GLint *);
+GLAPI void APIENTRY glGetCombinerOutputParameterfvNV (GLenum, GLenum, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetCombinerOutputParameterivNV (GLenum, GLenum, GLenum, GLint *);
+GLAPI void APIENTRY glGetFinalCombinerInputParameterfvNV (GLenum, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetFinalCombinerInputParameterivNV (GLenum, GLenum, GLint *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLCOMBINERPARAMETERFVNVPROC) (GLenum pname, const GLfloat *params);
+typedef void (APIENTRY * PFNGLCOMBINERPARAMETERFNVPROC) (GLenum pname, GLfloat param);
+typedef void (APIENTRY * PFNGLCOMBINERPARAMETERIVNVPROC) (GLenum pname, const GLint *params);
+typedef void (APIENTRY * PFNGLCOMBINERPARAMETERINVPROC) (GLenum pname, GLint param);
+typedef void (APIENTRY * PFNGLCOMBINERINPUTNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage);
+typedef void (APIENTRY * PFNGLCOMBINEROUTPUTNVPROC) (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum);
+typedef void (APIENTRY * PFNGLFINALCOMBINERINPUTNVPROC) (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage);
+typedef void (APIENTRY * PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params);
+typedef void (APIENTRY * PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params);
+typedef void (APIENTRY * PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLfloat *params);
+typedef void (APIENTRY * PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLint *params);
+typedef void (APIENTRY * PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC) (GLenum variable, GLenum pname, GLfloat *params);
+typedef void (APIENTRY * PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC) (GLenum variable, GLenum pname, GLint *params);
+#endif
+
+#ifndef GL_NV_fog_distance
+#define GL_NV_fog_distance 1
+#endif
+
+#ifndef GL_NV_texgen_emboss
+#define GL_NV_texgen_emboss 1
+#endif
+
+#ifndef GL_NV_blend_square
+#define GL_NV_blend_square 1
+#endif
+
+#ifndef GL_NV_texture_env_combine4
+#define GL_NV_texture_env_combine4 1
+#endif
+
+#ifndef GL_MESA_resize_buffers
+#define GL_MESA_resize_buffers 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glResizeBuffersMESA (void);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLRESIZEBUFFERSMESAPROC) (void);
+#endif
+
+#ifndef GL_MESA_window_pos
+#define GL_MESA_window_pos 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glWindowPos2dMESA (GLdouble, GLdouble);
+GLAPI void APIENTRY glWindowPos2dvMESA (const GLdouble *);
+GLAPI void APIENTRY glWindowPos2fMESA (GLfloat, GLfloat);
+GLAPI void APIENTRY glWindowPos2fvMESA (const GLfloat *);
+GLAPI void APIENTRY glWindowPos2iMESA (GLint, GLint);
+GLAPI void APIENTRY glWindowPos2ivMESA (const GLint *);
+GLAPI void APIENTRY glWindowPos2sMESA (GLshort, GLshort);
+GLAPI void APIENTRY glWindowPos2svMESA (const GLshort *);
+GLAPI void APIENTRY glWindowPos3dMESA (GLdouble, GLdouble, GLdouble);
+GLAPI void APIENTRY glWindowPos3dvMESA (const GLdouble *);
+GLAPI void APIENTRY glWindowPos3fMESA (GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glWindowPos3fvMESA (const GLfloat *);
+GLAPI void APIENTRY glWindowPos3iMESA (GLint, GLint, GLint);
+GLAPI void APIENTRY glWindowPos3ivMESA (const GLint *);
+GLAPI void APIENTRY glWindowPos3sMESA (GLshort, GLshort, GLshort);
+GLAPI void APIENTRY glWindowPos3svMESA (const GLshort *);
+GLAPI void APIENTRY glWindowPos4dMESA (GLdouble, GLdouble, GLdouble, GLdouble);
+GLAPI void APIENTRY glWindowPos4dvMESA (const GLdouble *);
+GLAPI void APIENTRY glWindowPos4fMESA (GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glWindowPos4fvMESA (const GLfloat *);
+GLAPI void APIENTRY glWindowPos4iMESA (GLint, GLint, GLint, GLint);
+GLAPI void APIENTRY glWindowPos4ivMESA (const GLint *);
+GLAPI void APIENTRY glWindowPos4sMESA (GLshort, GLshort, GLshort, GLshort);
+GLAPI void APIENTRY glWindowPos4svMESA (const GLshort *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLWINDOWPOS2DMESAPROC) (GLdouble x, GLdouble y);
+typedef void (APIENTRY * PFNGLWINDOWPOS2DVMESAPROC) (const GLdouble *v);
+typedef void (APIENTRY * PFNGLWINDOWPOS2FMESAPROC) (GLfloat x, GLfloat y);
+typedef void (APIENTRY * PFNGLWINDOWPOS2FVMESAPROC) (const GLfloat *v);
+typedef void (APIENTRY * PFNGLWINDOWPOS2IMESAPROC) (GLint x, GLint y);
+typedef void (APIENTRY * PFNGLWINDOWPOS2IVMESAPROC) (const GLint *v);
+typedef void (APIENTRY * PFNGLWINDOWPOS2SMESAPROC) (GLshort x, GLshort y);
+typedef void (APIENTRY * PFNGLWINDOWPOS2SVMESAPROC) (const GLshort *v);
+typedef void (APIENTRY * PFNGLWINDOWPOS3DMESAPROC) (GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRY * PFNGLWINDOWPOS3DVMESAPROC) (const GLdouble *v);
+typedef void (APIENTRY * PFNGLWINDOWPOS3FMESAPROC) (GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRY * PFNGLWINDOWPOS3FVMESAPROC) (const GLfloat *v);
+typedef void (APIENTRY * PFNGLWINDOWPOS3IMESAPROC) (GLint x, GLint y, GLint z);
+typedef void (APIENTRY * PFNGLWINDOWPOS3IVMESAPROC) (const GLint *v);
+typedef void (APIENTRY * PFNGLWINDOWPOS3SMESAPROC) (GLshort x, GLshort y, GLshort z);
+typedef void (APIENTRY * PFNGLWINDOWPOS3SVMESAPROC) (const GLshort *v);
+typedef void (APIENTRY * PFNGLWINDOWPOS4DMESAPROC) (GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRY * PFNGLWINDOWPOS4DVMESAPROC) (const GLdouble *v);
+typedef void (APIENTRY * PFNGLWINDOWPOS4FMESAPROC) (GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRY * PFNGLWINDOWPOS4FVMESAPROC) (const GLfloat *v);
+typedef void (APIENTRY * PFNGLWINDOWPOS4IMESAPROC) (GLint x, GLint y, GLint z, GLint w);
+typedef void (APIENTRY * PFNGLWINDOWPOS4IVMESAPROC) (const GLint *v);
+typedef void (APIENTRY * PFNGLWINDOWPOS4SMESAPROC) (GLshort x, GLshort y, GLshort z, GLshort w);
+typedef void (APIENTRY * PFNGLWINDOWPOS4SVMESAPROC) (const GLshort *v);
+#endif
+
+#ifndef GL_IBM_cull_vertex
+#define GL_IBM_cull_vertex 1
+#endif
+
+#ifndef GL_IBM_multimode_draw_arrays
+#define GL_IBM_multimode_draw_arrays 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMultiModeDrawArraysIBM (GLenum, const GLint *, const GLsizei *, GLsizei, GLint);
+GLAPI void APIENTRY glMultiModeDrawElementsIBM (const GLenum *, const GLsizei *, GLenum, const GLvoid* *, GLsizei, GLint);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLMULTIMODEDRAWARRAYSIBMPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride);
+typedef void (APIENTRY * PFNGLMULTIMODEDRAWELEMENTSIBMPROC) (const GLenum *mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount, GLint modestride);
+#endif
+
+#ifndef GL_IBM_vertex_array_lists
+#define GL_IBM_vertex_array_lists 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glColorPointerListIBM (GLint, GLenum, GLint, const GLvoid* *, GLint);
+GLAPI void APIENTRY glSecondaryColorPointerListIBM (GLint, GLenum, GLint, const GLvoid* *, GLint);
+GLAPI void APIENTRY glEdgeFlagPointerListIBM (GLint, const GLboolean* *, GLint);
+GLAPI void APIENTRY glFogCoordPointerListIBM (GLenum, GLint, const GLvoid* *, GLint);
+GLAPI void APIENTRY glIndexPointerListIBM (GLenum, GLint, const GLvoid* *, GLint);
+GLAPI void APIENTRY glNormalPointerListIBM (GLenum, GLint, const GLvoid* *, GLint);
+GLAPI void APIENTRY glTexCoordPointerListIBM (GLint, GLenum, GLint, const GLvoid* *, GLint);
+GLAPI void APIENTRY glVertexPointerListIBM (GLint, GLenum, GLint, const GLvoid* *, GLint);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);
+typedef void (APIENTRY * PFNGLSECONDARYCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);
+typedef void (APIENTRY * PFNGLEDGEFLAGPOINTERLISTIBMPROC) (GLint stride, const GLboolean* *pointer, GLint ptrstride);
+typedef void (APIENTRY * PFNGLFOGCOORDPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);
+typedef void (APIENTRY * PFNGLINDEXPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);
+typedef void (APIENTRY * PFNGLNORMALPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);
+typedef void (APIENTRY * PFNGLTEXCOORDPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);
+typedef void (APIENTRY * PFNGLVERTEXPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);
+#endif
+
+#ifndef GL_SGIX_subsample
+#define GL_SGIX_subsample 1
+#endif
+
+#ifndef GL_SGIX_ycrcba
+#define GL_SGIX_ycrcba 1
+#endif
+
+#ifndef GL_SGIX_ycrcb_subsample
+#define GL_SGIX_ycrcb_subsample 1
+#endif
+
+#ifndef GL_SGIX_depth_pass_instrument
+#define GL_SGIX_depth_pass_instrument 1
+#endif
+
+#ifndef GL_3DFX_texture_compression_FXT1
+#define GL_3DFX_texture_compression_FXT1 1
+#endif
+
+#ifndef GL_3DFX_multisample
+#define GL_3DFX_multisample 1
+#endif
+
+#ifndef GL_3DFX_tbuffer
+#define GL_3DFX_tbuffer 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTbufferMask3DFX (GLuint);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLTBUFFERMASK3DFXPROC) (GLuint mask);
+#endif
+
+#ifndef GL_EXT_multisample
+#define GL_EXT_multisample 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSampleMaskEXT (GLclampf, GLboolean);
+GLAPI void APIENTRY glSamplePatternEXT (GLenum);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLSAMPLEMASKEXTPROC) (GLclampf value, GLboolean invert);
+typedef void (APIENTRY * PFNGLSAMPLEPATTERNEXTPROC) (GLenum pattern);
+#endif
+
+#ifndef GL_SGIX_vertex_preclip
+#define GL_SGIX_vertex_preclip 1
+#endif
+
+#ifndef GL_SGIX_convolution_accuracy
+#define GL_SGIX_convolution_accuracy 1
+#endif
+
+#ifndef GL_SGIX_resample
+#define GL_SGIX_resample 1
+#endif
+
+#ifndef GL_SGIS_point_line_texgen
+#define GL_SGIS_point_line_texgen 1
+#endif
+
+#ifndef GL_SGIS_texture_color_mask
+#define GL_SGIS_texture_color_mask 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTextureColorMaskSGIS (GLboolean, GLboolean, GLboolean, GLboolean);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLTEXTURECOLORMASKSGISPROC) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
+#endif
+
+#ifndef GL_SGIX_igloo_interface
+#define GL_SGIX_igloo_interface 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glIglooInterfaceSGIX (GLenum, const GLvoid *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLIGLOOINTERFACESGIXPROC) (GLenum pname, const GLvoid *params);
+#endif
+
+#ifndef GL_NV_fence
+#define GL_NV_fence 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDeleteFencesNV (GLsizei, const GLuint *);
+GLAPI void APIENTRY glGenFencesNV (GLsizei, GLuint *);
+GLAPI GLboolean APIENTRY glIsFenceNV (GLuint);
+GLAPI GLboolean APIENTRY glTestFenceNV (GLuint);
+GLAPI void APIENTRY glGetFenceivNV (GLuint, GLenum, GLint *);
+GLAPI void APIENTRY glFinishFenceNV (GLuint);
+GLAPI void APIENTRY glSetFenceNV (GLuint, GLenum);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint *fences);
+typedef void (APIENTRY * PFNGLGENFENCESNVPROC) (GLsizei n, GLuint *fences);
+typedef GLboolean (APIENTRY * PFNGLISFENCENVPROC) (GLuint fence);
+typedef GLboolean (APIENTRY * PFNGLTESTFENCENVPROC) (GLuint fence);
+typedef void (APIENTRY * PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint *params);
+typedef void (APIENTRY * PFNGLFINISHFENCENVPROC) (GLuint fence);
+typedef void (APIENTRY * PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition);
+#endif
+
+#ifndef GL_NV_evaluators
+#define GL_NV_evaluators 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMapControlPointsNV (GLenum, GLuint, GLenum, GLsizei, GLsizei, GLint, GLint, GLboolean, const GLvoid *);
+GLAPI void APIENTRY glMapParameterivNV (GLenum, GLenum, const GLint *);
+GLAPI void APIENTRY glMapParameterfvNV (GLenum, GLenum, const GLfloat *);
+GLAPI void APIENTRY glGetMapControlPointsNV (GLenum, GLuint, GLenum, GLsizei, GLsizei, GLboolean, GLvoid *);
+GLAPI void APIENTRY glGetMapParameterivNV (GLenum, GLenum, GLint *);
+GLAPI void APIENTRY glGetMapParameterfvNV (GLenum, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetMapAttribParameterivNV (GLenum, GLuint, GLenum, GLint *);
+GLAPI void APIENTRY glGetMapAttribParameterfvNV (GLenum, GLuint, GLenum, GLfloat *);
+GLAPI void APIENTRY glEvalMapsNV (GLenum, GLenum);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const GLvoid *points);
+typedef void (APIENTRY * PFNGLMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRY * PFNGLMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRY * PFNGLGETMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, GLvoid *points);
+typedef void (APIENTRY * PFNGLGETMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRY * PFNGLGETMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRY * PFNGLGETMAPATTRIBPARAMETERIVNVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params);
+typedef void (APIENTRY * PFNGLGETMAPATTRIBPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params);
+typedef void (APIENTRY * PFNGLEVALMAPSNVPROC) (GLenum target, GLenum mode);
+#endif
+
+#ifndef GL_NV_packed_depth_stencil
+#define GL_NV_packed_depth_stencil 1
+#endif
+
+#ifndef GL_NV_register_combiners2
+#define GL_NV_register_combiners2 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glCombinerStageParameterfvNV (GLenum, GLenum, const GLfloat *);
+GLAPI void APIENTRY glGetCombinerStageParameterfvNV (GLenum, GLenum, GLfloat *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, const GLfloat *params);
+typedef void (APIENTRY * PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, GLfloat *params);
+#endif
+
+#ifndef GL_NV_texture_compression_vtc
+#define GL_NV_texture_compression_vtc 1
+#endif
+
+#ifndef GL_NV_texture_rectangle
+#define GL_NV_texture_rectangle 1
+#endif
+
+#ifndef GL_NV_texture_shader
+#define GL_NV_texture_shader 1
+#endif
+
+#ifndef GL_NV_texture_shader2
+#define GL_NV_texture_shader2 1
+#endif
+
+#ifndef GL_NV_vertex_array_range2
+#define GL_NV_vertex_array_range2 1
+#endif
+
+#ifndef GL_NV_vertex_program
+#define GL_NV_vertex_program 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLboolean APIENTRY glAreProgramsResidentNV (GLsizei, const GLuint *, GLboolean *);
+GLAPI void APIENTRY glBindProgramNV (GLenum, GLuint);
+GLAPI void APIENTRY glDeleteProgramsNV (GLsizei, const GLuint *);
+GLAPI void APIENTRY glExecuteProgramNV (GLenum, GLuint, const GLfloat *);
+GLAPI void APIENTRY glGenProgramsNV (GLsizei, GLuint *);
+GLAPI void APIENTRY glGetProgramParameterdvNV (GLenum, GLuint, GLenum, GLdouble *);
+GLAPI void APIENTRY glGetProgramParameterfvNV (GLenum, GLuint, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetProgramivNV (GLuint, GLenum, GLint *);
+GLAPI void APIENTRY glGetProgramStringNV (GLuint, GLenum, GLubyte *);
+GLAPI void APIENTRY glGetTrackMatrixivNV (GLenum, GLuint, GLenum, GLint *);
+GLAPI void APIENTRY glGetVertexAttribdvNV (GLuint, GLenum, GLdouble *);
+GLAPI void APIENTRY glGetVertexAttribfvNV (GLuint, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetVertexAttribivNV (GLuint, GLenum, GLint *);
+GLAPI void APIENTRY glGetVertexAttribPointervNV (GLuint, GLenum, GLvoid* *);
+GLAPI GLboolean APIENTRY glIsProgramNV (GLuint);
+GLAPI void APIENTRY glLoadProgramNV (GLenum, GLuint, GLsizei, const GLubyte *);
+GLAPI void APIENTRY glProgramParameter4dNV (GLenum, GLuint, GLdouble, GLdouble, GLdouble, GLdouble);
+GLAPI void APIENTRY glProgramParameter4dvNV (GLenum, GLuint, const GLdouble *);
+GLAPI void APIENTRY glProgramParameter4fNV (GLenum, GLuint, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glProgramParameter4fvNV (GLenum, GLuint, const GLfloat *);
+GLAPI void APIENTRY glProgramParameters4dvNV (GLenum, GLuint, GLuint, const GLdouble *);
+GLAPI void APIENTRY glProgramParameters4fvNV (GLenum, GLuint, GLuint, const GLfloat *);
+GLAPI void APIENTRY glRequestResidentProgramsNV (GLsizei, const GLuint *);
+GLAPI void APIENTRY glTrackMatrixNV (GLenum, GLuint, GLenum, GLenum);
+GLAPI void APIENTRY glVertexAttribPointerNV (GLuint, GLint, GLenum, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glVertexAttrib1dNV (GLuint, GLdouble);
+GLAPI void APIENTRY glVertexAttrib1dvNV (GLuint, const GLdouble *);
+GLAPI void APIENTRY glVertexAttrib1fNV (GLuint, GLfloat);
+GLAPI void APIENTRY glVertexAttrib1fvNV (GLuint, const GLfloat *);
+GLAPI void APIENTRY glVertexAttrib1sNV (GLuint, GLshort);
+GLAPI void APIENTRY glVertexAttrib1svNV (GLuint, const GLshort *);
+GLAPI void APIENTRY glVertexAttrib2dNV (GLuint, GLdouble, GLdouble);
+GLAPI void APIENTRY glVertexAttrib2dvNV (GLuint, const GLdouble *);
+GLAPI void APIENTRY glVertexAttrib2fNV (GLuint, GLfloat, GLfloat);
+GLAPI void APIENTRY glVertexAttrib2fvNV (GLuint, const GLfloat *);
+GLAPI void APIENTRY glVertexAttrib2sNV (GLuint, GLshort, GLshort);
+GLAPI void APIENTRY glVertexAttrib2svNV (GLuint, const GLshort *);
+GLAPI void APIENTRY glVertexAttrib3dNV (GLuint, GLdouble, GLdouble, GLdouble);
+GLAPI void APIENTRY glVertexAttrib3dvNV (GLuint, const GLdouble *);
+GLAPI void APIENTRY glVertexAttrib3fNV (GLuint, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glVertexAttrib3fvNV (GLuint, const GLfloat *);
+GLAPI void APIENTRY glVertexAttrib3sNV (GLuint, GLshort, GLshort, GLshort);
+GLAPI void APIENTRY glVertexAttrib3svNV (GLuint, const GLshort *);
+GLAPI void APIENTRY glVertexAttrib4dNV (GLuint, GLdouble, GLdouble, GLdouble, GLdouble);
+GLAPI void APIENTRY glVertexAttrib4dvNV (GLuint, const GLdouble *);
+GLAPI void APIENTRY glVertexAttrib4fNV (GLuint, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glVertexAttrib4fvNV (GLuint, const GLfloat *);
+GLAPI void APIENTRY glVertexAttrib4sNV (GLuint, GLshort, GLshort, GLshort, GLshort);
+GLAPI void APIENTRY glVertexAttrib4svNV (GLuint, const GLshort *);
+GLAPI void APIENTRY glVertexAttrib4ubNV (GLuint, GLubyte, GLubyte, GLubyte, GLubyte);
+GLAPI void APIENTRY glVertexAttrib4ubvNV (GLuint, const GLubyte *);
+GLAPI void APIENTRY glVertexAttribs1dvNV (GLuint, GLsizei, const GLdouble *);
+GLAPI void APIENTRY glVertexAttribs1fvNV (GLuint, GLsizei, const GLfloat *);
+GLAPI void APIENTRY glVertexAttribs1svNV (GLuint, GLsizei, const GLshort *);
+GLAPI void APIENTRY glVertexAttribs2dvNV (GLuint, GLsizei, const GLdouble *);
+GLAPI void APIENTRY glVertexAttribs2fvNV (GLuint, GLsizei, const GLfloat *);
+GLAPI void APIENTRY glVertexAttribs2svNV (GLuint, GLsizei, const GLshort *);
+GLAPI void APIENTRY glVertexAttribs3dvNV (GLuint, GLsizei, const GLdouble *);
+GLAPI void APIENTRY glVertexAttribs3fvNV (GLuint, GLsizei, const GLfloat *);
+GLAPI void APIENTRY glVertexAttribs3svNV (GLuint, GLsizei, const GLshort *);
+GLAPI void APIENTRY glVertexAttribs4dvNV (GLuint, GLsizei, const GLdouble *);
+GLAPI void APIENTRY glVertexAttribs4fvNV (GLuint, GLsizei, const GLfloat *);
+GLAPI void APIENTRY glVertexAttribs4svNV (GLuint, GLsizei, const GLshort *);
+GLAPI void APIENTRY glVertexAttribs4ubvNV (GLuint, GLsizei, const GLubyte *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef GLboolean (APIENTRY * PFNGLAREPROGRAMSRESIDENTNVPROC) (GLsizei n, const GLuint *programs, GLboolean *residences);
+typedef void (APIENTRY * PFNGLBINDPROGRAMNVPROC) (GLenum target, GLuint id);
+typedef void (APIENTRY * PFNGLDELETEPROGRAMSNVPROC) (GLsizei n, const GLuint *programs);
+typedef void (APIENTRY * PFNGLEXECUTEPROGRAMNVPROC) (GLenum target, GLuint id, const GLfloat *params);
+typedef void (APIENTRY * PFNGLGENPROGRAMSNVPROC) (GLsizei n, GLuint *programs);
+typedef void (APIENTRY * PFNGLGETPROGRAMPARAMETERDVNVPROC) (GLenum target, GLuint index, GLenum pname, GLdouble *params);
+typedef void (APIENTRY * PFNGLGETPROGRAMPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params);
+typedef void (APIENTRY * PFNGLGETPROGRAMIVNVPROC) (GLuint id, GLenum pname, GLint *params);
+typedef void (APIENTRY * PFNGLGETPROGRAMSTRINGNVPROC) (GLuint id, GLenum pname, GLubyte *program);
+typedef void (APIENTRY * PFNGLGETTRACKMATRIXIVNVPROC) (GLenum target, GLuint address, GLenum pname, GLint *params);
+typedef void (APIENTRY * PFNGLGETVERTEXATTRIBDVNVPROC) (GLuint index, GLenum pname, GLdouble *params);
+typedef void (APIENTRY * PFNGLGETVERTEXATTRIBFVNVPROC) (GLuint index, GLenum pname, GLfloat *params);
+typedef void (APIENTRY * PFNGLGETVERTEXATTRIBIVNVPROC) (GLuint index, GLenum pname, GLint *params);
+typedef void (APIENTRY * PFNGLGETVERTEXATTRIBPOINTERVNVPROC) (GLuint index, GLenum pname, GLvoid* *pointer);
+typedef GLboolean (APIENTRY * PFNGLISPROGRAMNVPROC) (GLuint id);
+typedef void (APIENTRY * PFNGLLOADPROGRAMNVPROC) (GLenum target, GLuint id, GLsizei len, const GLubyte *program);
+typedef void (APIENTRY * PFNGLPROGRAMPARAMETER4DNVPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRY * PFNGLPROGRAMPARAMETER4DVNVPROC) (GLenum target, GLuint index, const GLdouble *v);
+typedef void (APIENTRY * PFNGLPROGRAMPARAMETER4FNVPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRY * PFNGLPROGRAMPARAMETER4FVNVPROC) (GLenum target, GLuint index, const GLfloat *v);
+typedef void (APIENTRY * PFNGLPROGRAMPARAMETERS4DVNVPROC) (GLenum target, GLuint index, GLuint count, const GLdouble *v);
+typedef void (APIENTRY * PFNGLPROGRAMPARAMETERS4FVNVPROC) (GLenum target, GLuint index, GLuint count, const GLfloat *v);
+typedef void (APIENTRY * PFNGLREQUESTRESIDENTPROGRAMSNVPROC) (GLsizei n, const GLuint *programs);
+typedef void (APIENTRY * PFNGLTRACKMATRIXNVPROC) (GLenum target, GLuint address, GLenum matrix, GLenum transform);
+typedef void (APIENTRY * PFNGLVERTEXATTRIBPOINTERNVPROC) (GLuint index, GLint fsize, GLenum type, GLsizei stride, const GLvoid *pointer);
+typedef void (APIENTRY * PFNGLVERTEXATTRIB1DNVPROC) (GLuint index, GLdouble x);
+typedef void (APIENTRY * PFNGLVERTEXATTRIB1DVNVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRY * PFNGLVERTEXATTRIB1FNVPROC) (GLuint index, GLfloat x);
+typedef void (APIENTRY * PFNGLVERTEXATTRIB1FVNVPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRY * PFNGLVERTEXATTRIB1SNVPROC) (GLuint index, GLshort x);
+typedef void (APIENTRY * PFNGLVERTEXATTRIB1SVNVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRY * PFNGLVERTEXATTRIB2DNVPROC) (GLuint index, GLdouble x, GLdouble y);
+typedef void (APIENTRY * PFNGLVERTEXATTRIB2DVNVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRY * PFNGLVERTEXATTRIB2FNVPROC) (GLuint index, GLfloat x, GLfloat y);
+typedef void (APIENTRY * PFNGLVERTEXATTRIB2FVNVPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRY * PFNGLVERTEXATTRIB2SNVPROC) (GLuint index, GLshort x, GLshort y);
+typedef void (APIENTRY * PFNGLVERTEXATTRIB2SVNVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRY * PFNGLVERTEXATTRIB3DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRY * PFNGLVERTEXATTRIB3DVNVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRY * PFNGLVERTEXATTRIB3FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRY * PFNGLVERTEXATTRIB3FVNVPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRY * PFNGLVERTEXATTRIB3SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z);
+typedef void (APIENTRY * PFNGLVERTEXATTRIB3SVNVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRY * PFNGLVERTEXATTRIB4DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRY * PFNGLVERTEXATTRIB4DVNVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRY * PFNGLVERTEXATTRIB4FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRY * PFNGLVERTEXATTRIB4FVNVPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRY * PFNGLVERTEXATTRIB4SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
+typedef void (APIENTRY * PFNGLVERTEXATTRIB4SVNVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRY * PFNGLVERTEXATTRIB4UBNVPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
+typedef void (APIENTRY * PFNGLVERTEXATTRIB4UBVNVPROC) (GLuint index, const GLubyte *v);
+typedef void (APIENTRY * PFNGLVERTEXATTRIBS1DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v);
+typedef void (APIENTRY * PFNGLVERTEXATTRIBS1FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v);
+typedef void (APIENTRY * PFNGLVERTEXATTRIBS1SVNVPROC) (GLuint index, GLsizei count, const GLshort *v);
+typedef void (APIENTRY * PFNGLVERTEXATTRIBS2DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v);
+typedef void (APIENTRY * PFNGLVERTEXATTRIBS2FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v);
+typedef void (APIENTRY * PFNGLVERTEXATTRIBS2SVNVPROC) (GLuint index, GLsizei count, const GLshort *v);
+typedef void (APIENTRY * PFNGLVERTEXATTRIBS3DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v);
+typedef void (APIENTRY * PFNGLVERTEXATTRIBS3FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v);
+typedef void (APIENTRY * PFNGLVERTEXATTRIBS3SVNVPROC) (GLuint index, GLsizei count, const GLshort *v);
+typedef void (APIENTRY * PFNGLVERTEXATTRIBS4DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v);
+typedef void (APIENTRY * PFNGLVERTEXATTRIBS4FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v);
+typedef void (APIENTRY * PFNGLVERTEXATTRIBS4SVNVPROC) (GLuint index, GLsizei count, const GLshort *v);
+typedef void (APIENTRY * PFNGLVERTEXATTRIBS4UBVNVPROC) (GLuint index, GLsizei count, const GLubyte *v);
+#endif
+
+#ifndef GL_SGIX_texture_coordinate_clamp
+#define GL_SGIX_texture_coordinate_clamp 1
+#endif
+
+#ifndef GL_SGIX_scalebias_hint
+#define GL_SGIX_scalebias_hint 1
+#endif
+
+#ifndef GL_OML_interlace
+#define GL_OML_interlace 1
+#endif
+
+#ifndef GL_OML_subsample
+#define GL_OML_subsample 1
+#endif
+
+#ifndef GL_OML_resample
+#define GL_OML_resample 1
+#endif
+
+#ifndef GL_NV_copy_depth_to_color
+#define GL_NV_copy_depth_to_color 1
+#endif
+
+#ifndef GL_ATI_envmap_bumpmap
+#define GL_ATI_envmap_bumpmap 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexBumpParameterivATI (GLenum, const GLint *);
+GLAPI void APIENTRY glTexBumpParameterfvATI (GLenum, const GLfloat *);
+GLAPI void APIENTRY glGetTexBumpParameterivATI (GLenum, GLint *);
+GLAPI void APIENTRY glGetTexBumpParameterfvATI (GLenum, GLfloat *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLTEXBUMPPARAMETERIVATIPROC) (GLenum pname, const GLint *param);
+typedef void (APIENTRY * PFNGLTEXBUMPPARAMETERFVATIPROC) (GLenum pname, const GLfloat *param);
+typedef void (APIENTRY * PFNGLGETTEXBUMPPARAMETERIVATIPROC) (GLenum pname, GLint *param);
+typedef void (APIENTRY * PFNGLGETTEXBUMPPARAMETERFVATIPROC) (GLenum pname, GLfloat *param);
+#endif
+
+#ifndef GL_ATI_fragment_shader
+#define GL_ATI_fragment_shader 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLuint APIENTRY glGenFragmentShadersATI (GLuint);
+GLAPI void APIENTRY glBindFragmentShaderATI (GLuint);
+GLAPI void APIENTRY glDeleteFragmentShaderATI (GLuint);
+GLAPI void APIENTRY glBeginFragmentShaderATI (void);
+GLAPI void APIENTRY glEndFragmentShaderATI (void);
+GLAPI void APIENTRY glPassTexCoordATI (GLuint, GLuint, GLenum);
+GLAPI void APIENTRY glSampleMapATI (GLuint, GLuint, GLenum);
+GLAPI void APIENTRY glColorFragmentOp1ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint);
+GLAPI void APIENTRY glColorFragmentOp2ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint);
+GLAPI void APIENTRY glColorFragmentOp3ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint);
+GLAPI void APIENTRY glAlphaFragmentOp1ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint);
+GLAPI void APIENTRY glAlphaFragmentOp2ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint);
+GLAPI void APIENTRY glAlphaFragmentOp3ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint);
+GLAPI void APIENTRY glSetFragmentShaderConstantATI (GLuint, const GLfloat *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef GLuint (APIENTRY * PFNGLGENFRAGMENTSHADERSATIPROC) (GLuint range);
+typedef void (APIENTRY * PFNGLBINDFRAGMENTSHADERATIPROC) (GLuint id);
+typedef void (APIENTRY * PFNGLDELETEFRAGMENTSHADERATIPROC) (GLuint id);
+typedef void (APIENTRY * PFNGLBEGINFRAGMENTSHADERATIPROC) (void);
+typedef void (APIENTRY * PFNGLENDFRAGMENTSHADERATIPROC) (void);
+typedef void (APIENTRY * PFNGLPASSTEXCOORDATIPROC) (GLuint dst, GLuint coord, GLenum swizzle);
+typedef void (APIENTRY * PFNGLSAMPLEMAPATIPROC) (GLuint dst, GLuint interp, GLenum swizzle);
+typedef void (APIENTRY * PFNGLCOLORFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod);
+typedef void (APIENTRY * PFNGLCOLORFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod);
+typedef void (APIENTRY * PFNGLCOLORFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod);
+typedef void (APIENTRY * PFNGLALPHAFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod);
+typedef void (APIENTRY * PFNGLALPHAFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod);
+typedef void (APIENTRY * PFNGLALPHAFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod);
+typedef void (APIENTRY * PFNGLSETFRAGMENTSHADERCONSTANTATIPROC) (GLuint dst, const GLfloat *value);
+#endif
+
+#ifndef GL_ATI_pn_triangles
+#define GL_ATI_pn_triangles 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPNTrianglesiATI (GLenum, GLint);
+GLAPI void APIENTRY glPNTrianglesfATI (GLenum, GLfloat);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLPNTRIANGLESIATIPROC) (GLenum pname, GLint param);
+typedef void (APIENTRY * PFNGLPNTRIANGLESFATIPROC) (GLenum pname, GLfloat param);
+#endif
+
+#ifndef GL_ATI_vertex_array_object
+#define GL_ATI_vertex_array_object 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLuint APIENTRY glNewObjectBufferATI (GLsizei, const GLvoid *, GLenum);
+GLAPI GLboolean APIENTRY glIsObjectBufferATI (GLuint);
+GLAPI void APIENTRY glUpdateObjectBufferATI (GLuint, GLuint, GLsizei, const GLvoid *, GLenum);
+GLAPI void APIENTRY glGetObjectBufferfvATI (GLuint, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetObjectBufferivATI (GLuint, GLenum, GLint *);
+GLAPI void APIENTRY glDeleteObjectBufferATI (GLuint);
+GLAPI void APIENTRY glArrayObjectATI (GLenum, GLint, GLenum, GLsizei, GLuint, GLuint);
+GLAPI void APIENTRY glGetArrayObjectfvATI (GLenum, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetArrayObjectivATI (GLenum, GLenum, GLint *);
+GLAPI void APIENTRY glVariantArrayObjectATI (GLuint, GLenum, GLsizei, GLuint, GLuint);
+GLAPI void APIENTRY glGetVariantArrayObjectfvATI (GLuint, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetVariantArrayObjectivATI (GLuint, GLenum, GLint *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef GLuint (APIENTRY * PFNGLNEWOBJECTBUFFERATIPROC) (GLsizei size, const GLvoid *pointer, GLenum usage);
+typedef GLboolean (APIENTRY * PFNGLISOBJECTBUFFERATIPROC) (GLuint buffer);
+typedef void (APIENTRY * PFNGLUPDATEOBJECTBUFFERATIPROC) (GLuint buffer, GLuint offset, GLsizei size, const GLvoid *pointer, GLenum preserve);
+typedef void (APIENTRY * PFNGLGETOBJECTBUFFERFVATIPROC) (GLuint buffer, GLenum pname, GLfloat *params);
+typedef void (APIENTRY * PFNGLGETOBJECTBUFFERIVATIPROC) (GLuint buffer, GLenum pname, GLint *params);
+typedef void (APIENTRY * PFNGLDELETEOBJECTBUFFERATIPROC) (GLuint buffer);
+typedef void (APIENTRY * PFNGLARRAYOBJECTATIPROC) (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset);
+typedef void (APIENTRY * PFNGLGETARRAYOBJECTFVATIPROC) (GLenum array, GLenum pname, GLfloat *params);
+typedef void (APIENTRY * PFNGLGETARRAYOBJECTIVATIPROC) (GLenum array, GLenum pname, GLint *params);
+typedef void (APIENTRY * PFNGLVARIANTARRAYOBJECTATIPROC) (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset);
+typedef void (APIENTRY * PFNGLGETVARIANTARRAYOBJECTFVATIPROC) (GLuint id, GLenum pname, GLfloat *params);
+typedef void (APIENTRY * PFNGLGETVARIANTARRAYOBJECTIVATIPROC) (GLuint id, GLenum pname, GLint *params);
+#endif
+
+#ifndef GL_EXT_vertex_shader
+#define GL_EXT_vertex_shader 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBeginVertexShaderEXT (void);
+GLAPI void APIENTRY glEndVertexShaderEXT (void);
+GLAPI void APIENTRY glBindVertexShaderEXT (GLuint);
+GLAPI GLuint APIENTRY glGenVertexShadersEXT (GLuint);
+GLAPI void APIENTRY glDeleteVertexShaderEXT (GLuint);
+GLAPI void APIENTRY glShaderOp1EXT (GLenum, GLuint, GLuint);
+GLAPI void APIENTRY glShaderOp2EXT (GLenum, GLuint, GLuint, GLuint);
+GLAPI void APIENTRY glShaderOp3EXT (GLenum, GLuint, GLuint, GLuint, GLuint);
+GLAPI void APIENTRY glSwizzleEXT (GLuint, GLuint, GLenum, GLenum, GLenum, GLenum);
+GLAPI void APIENTRY glWriteMaskEXT (GLuint, GLuint, GLenum, GLenum, GLenum, GLenum);
+GLAPI void APIENTRY glInsertComponentEXT (GLuint, GLuint, GLuint);
+GLAPI void APIENTRY glExtractComponentEXT (GLuint, GLuint, GLuint);
+GLAPI GLuint APIENTRY glGenSymbolsEXT (GLenum, GLenum, GLenum, GLuint);
+GLAPI void APIENTRY glSetInvariantEXT (GLuint, GLenum, const void *);
+GLAPI void APIENTRY glSetLocalConstantEXT (GLuint, GLenum, const void *);
+GLAPI void APIENTRY glVariantbvEXT (GLuint, const GLbyte *);
+GLAPI void APIENTRY glVariantsvEXT (GLuint, const GLshort *);
+GLAPI void APIENTRY glVariantivEXT (GLuint, const GLint *);
+GLAPI void APIENTRY glVariantfvEXT (GLuint, const GLfloat *);
+GLAPI void APIENTRY glVariantdvEXT (GLuint, const GLdouble *);
+GLAPI void APIENTRY glVariantubvEXT (GLuint, const GLubyte *);
+GLAPI void APIENTRY glVariantusvEXT (GLuint, const GLushort *);
+GLAPI void APIENTRY glVariantuivEXT (GLuint, const GLuint *);
+GLAPI void APIENTRY glVariantPointerEXT (GLuint, GLenum, GLuint, const void *);
+GLAPI void APIENTRY glEnableVariantClientStateEXT (GLuint);
+GLAPI void APIENTRY glDisableVariantClientStateEXT (GLuint);
+GLAPI GLuint APIENTRY glBindLightParameterEXT (GLenum, GLenum);
+GLAPI GLuint APIENTRY glBindMaterialParameterEXT (GLenum, GLenum);
+GLAPI GLuint APIENTRY glBindTexGenParameterEXT (GLenum, GLenum, GLenum);
+GLAPI GLuint APIENTRY glBindTextureUnitParameterEXT (GLenum, GLenum);
+GLAPI GLuint APIENTRY glBindParameterEXT (GLenum);
+GLAPI GLboolean APIENTRY glIsVariantEnabledEXT (GLuint, GLenum);
+GLAPI void APIENTRY glGetVariantBooleanvEXT (GLuint, GLenum, GLboolean *);
+GLAPI void APIENTRY glGetVariantIntegervEXT (GLuint, GLenum, GLint *);
+GLAPI void APIENTRY glGetVariantFloatvEXT (GLuint, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetVariantPointervEXT (GLuint, GLenum, GLvoid* *);
+GLAPI void APIENTRY glGetInvariantBooleanvEXT (GLuint, GLenum, GLboolean *);
+GLAPI void APIENTRY glGetInvariantIntegervEXT (GLuint, GLenum, GLint *);
+GLAPI void APIENTRY glGetInvariantFloatvEXT (GLuint, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetLocalConstantBooleanvEXT (GLuint, GLenum, GLboolean *);
+GLAPI void APIENTRY glGetLocalConstantIntegervEXT (GLuint, GLenum, GLint *);
+GLAPI void APIENTRY glGetLocalConstantFloatvEXT (GLuint, GLenum, GLfloat *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLBEGINVERTEXSHADEREXTPROC) (void);
+typedef void (APIENTRY * PFNGLENDVERTEXSHADEREXTPROC) (void);
+typedef void (APIENTRY * PFNGLBINDVERTEXSHADEREXTPROC) (GLuint id);
+typedef GLuint (APIENTRY * PFNGLGENVERTEXSHADERSEXTPROC) (GLuint range);
+typedef void (APIENTRY * PFNGLDELETEVERTEXSHADEREXTPROC) (GLuint id);
+typedef void (APIENTRY * PFNGLSHADEROP1EXTPROC) (GLenum op, GLuint res, GLuint arg1);
+typedef void (APIENTRY * PFNGLSHADEROP2EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2);
+typedef void (APIENTRY * PFNGLSHADEROP3EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3);
+typedef void (APIENTRY * PFNGLSWIZZLEEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW);
+typedef void (APIENTRY * PFNGLWRITEMASKEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW);
+typedef void (APIENTRY * PFNGLINSERTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num);
+typedef void (APIENTRY * PFNGLEXTRACTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num);
+typedef GLuint (APIENTRY * PFNGLGENSYMBOLSEXTPROC) (GLenum datatype, GLenum storagetype, GLenum range, GLuint components);
+typedef void (APIENTRY * PFNGLSETINVARIANTEXTPROC) (GLuint id, GLenum type, const void *addr);
+typedef void (APIENTRY * PFNGLSETLOCALCONSTANTEXTPROC) (GLuint id, GLenum type, const void *addr);
+typedef void (APIENTRY * PFNGLVARIANTBVEXTPROC) (GLuint id, const GLbyte *addr);
+typedef void (APIENTRY * PFNGLVARIANTSVEXTPROC) (GLuint id, const GLshort *addr);
+typedef void (APIENTRY * PFNGLVARIANTIVEXTPROC) (GLuint id, const GLint *addr);
+typedef void (APIENTRY * PFNGLVARIANTFVEXTPROC) (GLuint id, const GLfloat *addr);
+typedef void (APIENTRY * PFNGLVARIANTDVEXTPROC) (GLuint id, const GLdouble *addr);
+typedef void (APIENTRY * PFNGLVARIANTUBVEXTPROC) (GLuint id, const GLubyte *addr);
+typedef void (APIENTRY * PFNGLVARIANTUSVEXTPROC) (GLuint id, const GLushort *addr);
+typedef void (APIENTRY * PFNGLVARIANTUIVEXTPROC) (GLuint id, const GLuint *addr);
+typedef void (APIENTRY * PFNGLVARIANTPOINTEREXTPROC) (GLuint id, GLenum type, GLuint stride, const void *addr);
+typedef void (APIENTRY * PFNGLENABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id);
+typedef void (APIENTRY * PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id);
+typedef GLuint (APIENTRY * PFNGLBINDLIGHTPARAMETEREXTPROC) (GLenum light, GLenum value);
+typedef GLuint (APIENTRY * PFNGLBINDMATERIALPARAMETEREXTPROC) (GLenum face, GLenum value);
+typedef GLuint (APIENTRY * PFNGLBINDTEXGENPARAMETEREXTPROC) (GLenum unit, GLenum coord, GLenum value);
+typedef GLuint (APIENTRY * PFNGLBINDTEXTUREUNITPARAMETEREXTPROC) (GLenum unit, GLenum value);
+typedef GLuint (APIENTRY * PFNGLBINDPARAMETEREXTPROC) (GLenum value);
+typedef GLboolean (APIENTRY * PFNGLISVARIANTENABLEDEXTPROC) (GLuint id, GLenum cap);
+typedef void (APIENTRY * PFNGLGETVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data);
+typedef void (APIENTRY * PFNGLGETVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data);
+typedef void (APIENTRY * PFNGLGETVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data);
+typedef void (APIENTRY * PFNGLGETVARIANTPOINTERVEXTPROC) (GLuint id, GLenum value, GLvoid* *data);
+typedef void (APIENTRY * PFNGLGETINVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data);
+typedef void (APIENTRY * PFNGLGETINVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data);
+typedef void (APIENTRY * PFNGLGETINVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data);
+typedef void (APIENTRY * PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data);
+typedef void (APIENTRY * PFNGLGETLOCALCONSTANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data);
+typedef void (APIENTRY * PFNGLGETLOCALCONSTANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data);
+#endif
+
+#ifndef GL_ATI_vertex_streams
+#define GL_ATI_vertex_streams 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexStream1sATI (GLenum, GLshort);
+GLAPI void APIENTRY glVertexStream1svATI (GLenum, const GLshort *);
+GLAPI void APIENTRY glVertexStream1iATI (GLenum, GLint);
+GLAPI void APIENTRY glVertexStream1ivATI (GLenum, const GLint *);
+GLAPI void APIENTRY glVertexStream1fATI (GLenum, GLfloat);
+GLAPI void APIENTRY glVertexStream1fvATI (GLenum, const GLfloat *);
+GLAPI void APIENTRY glVertexStream1dATI (GLenum, GLdouble);
+GLAPI void APIENTRY glVertexStream1dvATI (GLenum, const GLdouble *);
+GLAPI void APIENTRY glVertexStream2sATI (GLenum, GLshort, GLshort);
+GLAPI void APIENTRY glVertexStream2svATI (GLenum, const GLshort *);
+GLAPI void APIENTRY glVertexStream2iATI (GLenum, GLint, GLint);
+GLAPI void APIENTRY glVertexStream2ivATI (GLenum, const GLint *);
+GLAPI void APIENTRY glVertexStream2fATI (GLenum, GLfloat, GLfloat);
+GLAPI void APIENTRY glVertexStream2fvATI (GLenum, const GLfloat *);
+GLAPI void APIENTRY glVertexStream2dATI (GLenum, GLdouble, GLdouble);
+GLAPI void APIENTRY glVertexStream2dvATI (GLenum, const GLdouble *);
+GLAPI void APIENTRY glVertexStream3sATI (GLenum, GLshort, GLshort, GLshort);
+GLAPI void APIENTRY glVertexStream3svATI (GLenum, const GLshort *);
+GLAPI void APIENTRY glVertexStream3iATI (GLenum, GLint, GLint, GLint);
+GLAPI void APIENTRY glVertexStream3ivATI (GLenum, const GLint *);
+GLAPI void APIENTRY glVertexStream3fATI (GLenum, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glVertexStream3fvATI (GLenum, const GLfloat *);
+GLAPI void APIENTRY glVertexStream3dATI (GLenum, GLdouble, GLdouble, GLdouble);
+GLAPI void APIENTRY glVertexStream3dvATI (GLenum, const GLdouble *);
+GLAPI void APIENTRY glVertexStream4sATI (GLenum, GLshort, GLshort, GLshort, GLshort);
+GLAPI void APIENTRY glVertexStream4svATI (GLenum, const GLshort *);
+GLAPI void APIENTRY glVertexStream4iATI (GLenum, GLint, GLint, GLint, GLint);
+GLAPI void APIENTRY glVertexStream4ivATI (GLenum, const GLint *);
+GLAPI void APIENTRY glVertexStream4fATI (GLenum, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glVertexStream4fvATI (GLenum, const GLfloat *);
+GLAPI void APIENTRY glVertexStream4dATI (GLenum, GLdouble, GLdouble, GLdouble, GLdouble);
+GLAPI void APIENTRY glVertexStream4dvATI (GLenum, const GLdouble *);
+GLAPI void APIENTRY glNormalStream3bATI (GLenum, GLbyte, GLbyte, GLbyte);
+GLAPI void APIENTRY glNormalStream3bvATI (GLenum, const GLbyte *);
+GLAPI void APIENTRY glNormalStream3sATI (GLenum, GLshort, GLshort, GLshort);
+GLAPI void APIENTRY glNormalStream3svATI (GLenum, const GLshort *);
+GLAPI void APIENTRY glNormalStream3iATI (GLenum, GLint, GLint, GLint);
+GLAPI void APIENTRY glNormalStream3ivATI (GLenum, const GLint *);
+GLAPI void APIENTRY glNormalStream3fATI (GLenum, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glNormalStream3fvATI (GLenum, const GLfloat *);
+GLAPI void APIENTRY glNormalStream3dATI (GLenum, GLdouble, GLdouble, GLdouble);
+GLAPI void APIENTRY glNormalStream3dvATI (GLenum, const GLdouble *);
+GLAPI void APIENTRY glClientActiveVertexStreamATI (GLenum);
+GLAPI void APIENTRY glVertexBlendEnviATI (GLenum, GLint);
+GLAPI void APIENTRY glVertexBlendEnvfATI (GLenum, GLfloat);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLVERTEXSTREAM1SATIPROC) (GLenum stream, GLshort x);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM1SVATIPROC) (GLenum stream, const GLshort *coords);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM1IATIPROC) (GLenum stream, GLint x);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM1IVATIPROC) (GLenum stream, const GLint *coords);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM1FATIPROC) (GLenum stream, GLfloat x);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM1FVATIPROC) (GLenum stream, const GLfloat *coords);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM1DATIPROC) (GLenum stream, GLdouble x);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM1DVATIPROC) (GLenum stream, const GLdouble *coords);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM2SATIPROC) (GLenum stream, GLshort x, GLshort y);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM2SVATIPROC) (GLenum stream, const GLshort *coords);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM2IATIPROC) (GLenum stream, GLint x, GLint y);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM2IVATIPROC) (GLenum stream, const GLint *coords);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM2FATIPROC) (GLenum stream, GLfloat x, GLfloat y);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM2FVATIPROC) (GLenum stream, const GLfloat *coords);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM2DATIPROC) (GLenum stream, GLdouble x, GLdouble y);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM2DVATIPROC) (GLenum stream, const GLdouble *coords);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM3SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM3IATIPROC) (GLenum stream, GLint x, GLint y, GLint z);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM3IVATIPROC) (GLenum stream, const GLint *coords);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM3FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM3DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM4SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM4SVATIPROC) (GLenum stream, const GLshort *coords);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM4IATIPROC) (GLenum stream, GLint x, GLint y, GLint z, GLint w);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM4IVATIPROC) (GLenum stream, const GLint *coords);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM4FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM4FVATIPROC) (GLenum stream, const GLfloat *coords);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM4DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM4DVATIPROC) (GLenum stream, const GLdouble *coords);
+typedef void (APIENTRY * PFNGLNORMALSTREAM3BATIPROC) (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz);
+typedef void (APIENTRY * PFNGLNORMALSTREAM3BVATIPROC) (GLenum stream, const GLbyte *coords);
+typedef void (APIENTRY * PFNGLNORMALSTREAM3SATIPROC) (GLenum stream, GLshort nx, GLshort ny, GLshort nz);
+typedef void (APIENTRY * PFNGLNORMALSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords);
+typedef void (APIENTRY * PFNGLNORMALSTREAM3IATIPROC) (GLenum stream, GLint nx, GLint ny, GLint nz);
+typedef void (APIENTRY * PFNGLNORMALSTREAM3IVATIPROC) (GLenum stream, const GLint *coords);
+typedef void (APIENTRY * PFNGLNORMALSTREAM3FATIPROC) (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz);
+typedef void (APIENTRY * PFNGLNORMALSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords);
+typedef void (APIENTRY * PFNGLNORMALSTREAM3DATIPROC) (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz);
+typedef void (APIENTRY * PFNGLNORMALSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords);
+typedef void (APIENTRY * PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC) (GLenum stream);
+typedef void (APIENTRY * PFNGLVERTEXBLENDENVIATIPROC) (GLenum pname, GLint param);
+typedef void (APIENTRY * PFNGLVERTEXBLENDENVFATIPROC) (GLenum pname, GLfloat param);
+#endif
+
+#ifndef GL_ATI_element_array
+#define GL_ATI_element_array 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glElementPointerATI (GLenum, const GLvoid *);
+GLAPI void APIENTRY glDrawElementArrayATI (GLenum, GLsizei);
+GLAPI void APIENTRY glDrawRangeElementArrayATI (GLenum, GLuint, GLuint, GLsizei);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLELEMENTPOINTERATIPROC) (GLenum type, const GLvoid *pointer);
+typedef void (APIENTRY * PFNGLDRAWELEMENTARRAYATIPROC) (GLenum mode, GLsizei count);
+typedef void (APIENTRY * PFNGLDRAWRANGEELEMENTARRAYATIPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count);
+#endif
+
+#ifndef GL_SUN_mesh_array
+#define GL_SUN_mesh_array 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawMeshArraysSUN (GLenum, GLint, GLsizei, GLsizei);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLDRAWMESHARRAYSSUNPROC) (GLenum mode, GLint first, GLsizei count, GLsizei width);
+#endif
+
+#ifndef GL_SUN_slice_accum
+#define GL_SUN_slice_accum 1
+#endif
+
+#ifndef GL_NV_multisample_filter_hint
+#define GL_NV_multisample_filter_hint 1
+#endif
+
+#ifndef GL_NV_depth_clamp
+#define GL_NV_depth_clamp 1
+#endif
+
+#ifndef GL_NV_occlusion_query
+#define GL_NV_occlusion_query 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGenOcclusionQueriesNV (GLsizei, GLuint *);
+GLAPI void APIENTRY glDeleteOcclusionQueriesNV (GLsizei, const GLuint *);
+GLAPI GLboolean APIENTRY glIsOcclusionQueryNV (GLuint);
+GLAPI void APIENTRY glBeginOcclusionQueryNV (GLuint);
+GLAPI void APIENTRY glEndOcclusionQueryNV (void);
+GLAPI void APIENTRY glGetOcclusionQueryivNV (GLuint, GLenum, GLint *);
+GLAPI void APIENTRY glGetOcclusionQueryuivNV (GLuint, GLenum, GLuint *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLGENOCCLUSIONQUERIESNVPROC) (GLsizei n, GLuint *ids);
+typedef void (APIENTRY * PFNGLDELETEOCCLUSIONQUERIESNVPROC) (GLsizei n, const GLuint *ids);
+typedef GLboolean (APIENTRY * PFNGLISOCCLUSIONQUERYNVPROC) (GLuint id);
+typedef void (APIENTRY * PFNGLBEGINOCCLUSIONQUERYNVPROC) (GLuint id);
+typedef void (APIENTRY * PFNGLENDOCCLUSIONQUERYNVPROC) (void);
+typedef void (APIENTRY * PFNGLGETOCCLUSIONQUERYIVNVPROC) (GLuint id, GLenum pname, GLint *params);
+typedef void (APIENTRY * PFNGLGETOCCLUSIONQUERYUIVNVPROC) (GLuint id, GLenum pname, GLuint *params);
+#endif
+
+#ifndef GL_NV_point_sprite
+#define GL_NV_point_sprite 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPointParameteriNV (GLenum, GLint);
+GLAPI void APIENTRY glPointParameterivNV (GLenum, const GLint *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLPOINTPARAMETERINVPROC) (GLenum pname, GLint param);
+typedef void (APIENTRY * PFNGLPOINTPARAMETERIVNVPROC) (GLenum pname, const GLint *params);
+#endif
+
+#ifndef GL_NV_texture_shader3
+#define GL_NV_texture_shader3 1
+#endif
+
+#ifndef GL_NV_vertex_program1_1
+#define GL_NV_vertex_program1_1 1
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tcc/include/winapi/GL/glu.h b/tcc/include/winapi/GL/glu.h
new file mode 100644
index 0000000..d6e9e37
--- /dev/null
+++ b/tcc/include/winapi/GL/glu.h
@@ -0,0 +1,289 @@
+/*
+** License Applicability. Except to the extent portions of this file are
+** made subject to an alternative license as permitted in the SGI Free
+** Software License B, Version 1.1 (the "License"), the contents of this
+** file are subject only to the provisions of the License. You may not use
+** this file except in compliance with the License. You may obtain a copy
+** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
+** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
+**
+** http://oss.sgi.com/projects/FreeB
+**
+** Note that, as provided in the License, the Software is distributed on an
+** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
+** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
+** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
+** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
+**
+** Original Code. The Original Code is: OpenGL Sample Implementation,
+** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
+** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
+** Copyright in any portions created by third parties is as indicated
+** elsewhere herein. All Rights Reserved.
+**
+** Additional Notice Provisions: This software was created using the
+** OpenGL(R) version 1.2.1 Sample Implementation published by SGI, but has
+** not been independently verified as being compliant with the OpenGL(R)
+** version 1.2.1 Specification.
+*/
+
+#ifndef __glu_h__
+#define __glu_h__
+#define _GLU_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#include <stddef.h> /* for wchar_t */
+#include <GL/gl.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*************************************************************/
+
+/* Boolean */
+#define GLU_FALSE 0
+#define GLU_TRUE 1
+
+/* Version */
+#define GLU_VERSION_1_1 1
+#define GLU_VERSION_1_2 1
+
+/* StringName */
+#define GLU_VERSION 100800
+#define GLU_EXTENSIONS 100801
+
+/* ErrorCode */
+#define GLU_INVALID_ENUM 100900
+#define GLU_INVALID_VALUE 100901
+#define GLU_OUT_OF_MEMORY 100902
+#define GLU_INVALID_OPERATION 100904
+
+/* NurbsDisplay */
+/* GLU_FILL */
+#define GLU_OUTLINE_POLYGON 100240
+#define GLU_OUTLINE_PATCH 100241
+
+/* NurbsError */
+#define GLU_NURBS_ERROR1 100251
+#define GLU_NURBS_ERROR2 100252
+#define GLU_NURBS_ERROR3 100253
+#define GLU_NURBS_ERROR4 100254
+#define GLU_NURBS_ERROR5 100255
+#define GLU_NURBS_ERROR6 100256
+#define GLU_NURBS_ERROR7 100257
+#define GLU_NURBS_ERROR8 100258
+#define GLU_NURBS_ERROR9 100259
+#define GLU_NURBS_ERROR10 100260
+#define GLU_NURBS_ERROR11 100261
+#define GLU_NURBS_ERROR12 100262
+#define GLU_NURBS_ERROR13 100263
+#define GLU_NURBS_ERROR14 100264
+#define GLU_NURBS_ERROR15 100265
+#define GLU_NURBS_ERROR16 100266
+#define GLU_NURBS_ERROR17 100267
+#define GLU_NURBS_ERROR18 100268
+#define GLU_NURBS_ERROR19 100269
+#define GLU_NURBS_ERROR20 100270
+#define GLU_NURBS_ERROR21 100271
+#define GLU_NURBS_ERROR22 100272
+#define GLU_NURBS_ERROR23 100273
+#define GLU_NURBS_ERROR24 100274
+#define GLU_NURBS_ERROR25 100275
+#define GLU_NURBS_ERROR26 100276
+#define GLU_NURBS_ERROR27 100277
+#define GLU_NURBS_ERROR28 100278
+#define GLU_NURBS_ERROR29 100279
+#define GLU_NURBS_ERROR30 100280
+#define GLU_NURBS_ERROR31 100281
+#define GLU_NURBS_ERROR32 100282
+#define GLU_NURBS_ERROR33 100283
+#define GLU_NURBS_ERROR34 100284
+#define GLU_NURBS_ERROR35 100285
+#define GLU_NURBS_ERROR36 100286
+#define GLU_NURBS_ERROR37 100287
+
+/* NurbsProperty */
+#define GLU_AUTO_LOAD_MATRIX 100200
+#define GLU_CULLING 100201
+#define GLU_SAMPLING_TOLERANCE 100203
+#define GLU_DISPLAY_MODE 100204
+#define GLU_PARAMETRIC_TOLERANCE 100202
+#define GLU_SAMPLING_METHOD 100205
+#define GLU_U_STEP 100206
+#define GLU_V_STEP 100207
+
+/* NurbsSampling */
+#define GLU_PATH_LENGTH 100215
+#define GLU_PARAMETRIC_ERROR 100216
+#define GLU_DOMAIN_DISTANCE 100217
+
+/* NurbsTrim */
+#define GLU_MAP1_TRIM_2 100210
+#define GLU_MAP1_TRIM_3 100211
+
+/* QuadricDrawStyle */
+#define GLU_POINT 100010
+#define GLU_LINE 100011
+#define GLU_FILL 100012
+#define GLU_SILHOUETTE 100013
+
+/* QuadricCallback */
+#define GLU_ERROR 100103
+
+/* QuadricNormal */
+#define GLU_SMOOTH 100000
+#define GLU_FLAT 100001
+#define GLU_NONE 100002
+
+/* QuadricOrientation */
+#define GLU_OUTSIDE 100020
+#define GLU_INSIDE 100021
+
+/* TessCallback */
+#define GLU_TESS_BEGIN 100100
+#define GLU_BEGIN 100100
+#define GLU_TESS_VERTEX 100101
+#define GLU_VERTEX 100101
+#define GLU_TESS_END 100102
+#define GLU_END 100102
+#define GLU_TESS_ERROR 100103
+#define GLU_TESS_EDGE_FLAG 100104
+#define GLU_EDGE_FLAG 100104
+#define GLU_TESS_COMBINE 100105
+#define GLU_TESS_BEGIN_DATA 100106
+#define GLU_TESS_VERTEX_DATA 100107
+#define GLU_TESS_END_DATA 100108
+#define GLU_TESS_ERROR_DATA 100109
+#define GLU_TESS_EDGE_FLAG_DATA 100110
+#define GLU_TESS_COMBINE_DATA 100111
+
+/* TessContour */
+#define GLU_CW 100120
+#define GLU_CCW 100121
+#define GLU_INTERIOR 100122
+#define GLU_EXTERIOR 100123
+#define GLU_UNKNOWN 100124
+
+/* TessProperty */
+#define GLU_TESS_WINDING_RULE 100140
+#define GLU_TESS_BOUNDARY_ONLY 100141
+#define GLU_TESS_TOLERANCE 100142
+
+/* TessError */
+#define GLU_TESS_ERROR1 100151
+#define GLU_TESS_ERROR2 100152
+#define GLU_TESS_ERROR3 100153
+#define GLU_TESS_ERROR4 100154
+#define GLU_TESS_ERROR5 100155
+#define GLU_TESS_ERROR6 100156
+#define GLU_TESS_ERROR7 100157
+#define GLU_TESS_ERROR8 100158
+#define GLU_TESS_MISSING_BEGIN_POLYGON 100151
+#define GLU_TESS_MISSING_BEGIN_CONTOUR 100152
+#define GLU_TESS_MISSING_END_POLYGON 100153
+#define GLU_TESS_MISSING_END_CONTOUR 100154
+#define GLU_TESS_COORD_TOO_LARGE 100155
+#define GLU_TESS_NEED_COMBINE_CALLBACK 100156
+
+/* TessWinding */
+#define GLU_TESS_WINDING_ODD 100130
+#define GLU_TESS_WINDING_NONZERO 100131
+#define GLU_TESS_WINDING_POSITIVE 100132
+#define GLU_TESS_WINDING_NEGATIVE 100133
+#define GLU_TESS_WINDING_ABS_GEQ_TWO 100134
+
+/* Obsolete. For compatibility with previous Sun OpenGL versions */
+#define GLU_INCOMPATIBLE_GL_VERSION 100903
+
+
+/*************************************************************/
+
+
+#ifdef __cplusplus
+class GLUnurbs;
+class GLUquadric;
+class GLUtesselator;
+#else
+typedef struct GLUnurbs GLUnurbs;
+typedef struct GLUquadric GLUquadric;
+typedef struct GLUtesselator GLUtesselator;
+#endif
+
+typedef GLUnurbs GLUnurbsObj;
+typedef GLUquadric GLUquadricObj;
+typedef GLUtesselator GLUtesselatorObj;
+typedef GLUtesselator GLUtriangulatorObj;
+
+#define GLU_TESS_MAX_COORD 1.0e150
+
+/* Internal convenience typedefs */
+typedef void (APIENTRY *_GLUfuncptr)();
+
+GLAPI void APIENTRY gluBeginCurve (GLUnurbs* nurb);
+GLAPI void APIENTRY gluBeginPolygon (GLUtesselator* tess);
+GLAPI void APIENTRY gluBeginSurface (GLUnurbs* nurb);
+GLAPI void APIENTRY gluBeginTrim (GLUnurbs* nurb);
+GLAPI GLint APIENTRY gluBuild1DMipmaps (GLenum target, GLint internalFormat, GLsizei width, GLenum format, GLenum type, const void *data);
+GLAPI GLint APIENTRY gluBuild2DMipmaps (GLenum target, GLint internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *data);
+GLAPI void APIENTRY gluCylinder (GLUquadric* quad, GLdouble base, GLdouble top, GLdouble height, GLint slices, GLint stacks);
+GLAPI void APIENTRY gluDeleteNurbsRenderer (GLUnurbs* nurb);
+GLAPI void APIENTRY gluDeleteQuadric (GLUquadric* quad);
+GLAPI void APIENTRY gluDeleteTess (GLUtesselator* tess);
+GLAPI void APIENTRY gluDisk (GLUquadric* quad, GLdouble inner, GLdouble outer, GLint slices, GLint loops);
+GLAPI void APIENTRY gluEndCurve (GLUnurbs* nurb);
+GLAPI void APIENTRY gluEndPolygon (GLUtesselator* tess);
+GLAPI void APIENTRY gluEndSurface (GLUnurbs* nurb);
+GLAPI void APIENTRY gluEndTrim (GLUnurbs* nurb);
+GLAPI const GLubyte * APIENTRY gluErrorString (GLenum error);
+GLAPI const wchar_t * APIENTRY gluErrorUnicodeStringEXT (GLenum error);
+GLAPI void APIENTRY gluGetNurbsProperty (GLUnurbs* nurb, GLenum property, GLfloat* data);
+GLAPI const GLubyte * APIENTRY gluGetString (GLenum name);
+GLAPI void APIENTRY gluGetTessProperty (GLUtesselator* tess, GLenum which, GLdouble* data);
+GLAPI void APIENTRY gluLoadSamplingMatrices (GLUnurbs* nurb, const GLfloat *model, const GLfloat *perspective, const GLint *view);
+GLAPI void APIENTRY gluLookAt (GLdouble eyeX, GLdouble eyeY, GLdouble eyeZ, GLdouble centerX, GLdouble centerY, GLdouble centerZ, GLdouble upX, GLdouble upY, GLdouble upZ);
+GLAPI GLUnurbs* APIENTRY gluNewNurbsRenderer (void);
+GLAPI GLUquadric* APIENTRY gluNewQuadric (void);
+GLAPI GLUtesselator* APIENTRY gluNewTess (void);
+GLAPI void APIENTRY gluNextContour (GLUtesselator* tess, GLenum type);
+GLAPI void APIENTRY gluNurbsCallback (GLUnurbs* nurb, GLenum which, _GLUfuncptr CallBackFunc);
+GLAPI void APIENTRY gluNurbsCurve (GLUnurbs* nurb, GLint knotCount, GLfloat *knots, GLint stride, GLfloat *control, GLint order, GLenum type);
+GLAPI void APIENTRY gluNurbsProperty (GLUnurbs* nurb, GLenum property, GLfloat value);
+GLAPI void APIENTRY gluNurbsSurface (GLUnurbs* nurb, GLint sKnotCount, GLfloat* sKnots, GLint tKnotCount, GLfloat* tKnots, GLint sStride, GLint tStride, GLfloat* control, GLint sOrder, GLint tOrder, GLenum type);
+GLAPI void APIENTRY gluOrtho2D (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top);
+GLAPI void APIENTRY gluPartialDisk (GLUquadric* quad, GLdouble inner, GLdouble outer, GLint slices, GLint loops, GLdouble start, GLdouble sweep);
+GLAPI void APIENTRY gluPerspective (GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar);
+GLAPI void APIENTRY gluPickMatrix (GLdouble x, GLdouble y, GLdouble delX, GLdouble delY, GLint *viewport);
+GLAPI GLint APIENTRY gluProject (GLdouble objX, GLdouble objY, GLdouble objZ, const GLdouble *model, const GLdouble *proj, const GLint *view, GLdouble* winX, GLdouble* winY, GLdouble* winZ);
+GLAPI void APIENTRY gluPwlCurve (GLUnurbs* nurb, GLint count, GLfloat* data, GLint stride, GLenum type);
+GLAPI void APIENTRY gluQuadricCallback (GLUquadric* quad, GLenum which, _GLUfuncptr CallBackFunc);
+GLAPI void APIENTRY gluQuadricDrawStyle (GLUquadric* quad, GLenum draw);
+GLAPI void APIENTRY gluQuadricNormals (GLUquadric* quad, GLenum normal);
+GLAPI void APIENTRY gluQuadricOrientation (GLUquadric* quad, GLenum orientation);
+GLAPI void APIENTRY gluQuadricTexture (GLUquadric* quad, GLboolean texture);
+GLAPI GLint APIENTRY gluScaleImage (GLenum format, GLsizei wIn, GLsizei hIn, GLenum typeIn, const void *dataIn, GLsizei wOut, GLsizei hOut, GLenum typeOut, GLvoid* dataOut);
+GLAPI void APIENTRY gluSphere (GLUquadric* quad, GLdouble radius, GLint slices, GLint stacks);
+GLAPI void APIENTRY gluTessBeginContour (GLUtesselator* tess);
+GLAPI void APIENTRY gluTessBeginPolygon (GLUtesselator* tess, GLvoid* data);
+GLAPI void APIENTRY gluTessCallback (GLUtesselator* tess, GLenum which, _GLUfuncptr CallBackFunc);
+GLAPI void APIENTRY gluTessEndContour (GLUtesselator* tess);
+GLAPI void APIENTRY gluTessEndPolygon (GLUtesselator* tess);
+GLAPI void APIENTRY gluTessNormal (GLUtesselator* tess, GLdouble valueX, GLdouble valueY, GLdouble valueZ);
+GLAPI void APIENTRY gluTessProperty (GLUtesselator* tess, GLenum which, GLdouble data);
+GLAPI void APIENTRY gluTessVertex (GLUtesselator* tess, GLdouble *location, GLvoid* data);
+GLAPI GLint APIENTRY gluUnProject (GLdouble winX, GLdouble winY, GLdouble winZ, const GLdouble *model, const GLdouble *proj, const GLint *view, GLdouble* objX, GLdouble* objY, GLdouble* objZ);
+GLAPI GLint APIENTRY gluUnProject4 (GLdouble winX, GLdouble winY, GLdouble winZ, GLdouble clipW, const GLdouble *model, const GLdouble *proj, const GLint *view, GLdouble nearVal, GLdouble farVal, GLdouble* objX, GLdouble* objY, GLdouble* objZ, GLdouble* objW);
+
+#ifdef UNICODE
+#define gluErrorStringWIN gluErrorUnicodeStringEXT
+#else
+#define gluErrorStringWIN gluErrorString
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __glu_h__ */
diff --git a/tcc/include/winapi/accctrl.h b/tcc/include/winapi/accctrl.h
new file mode 100644
index 0000000..6f96904
--- /dev/null
+++ b/tcc/include/winapi/accctrl.h
@@ -0,0 +1,329 @@
+#ifndef _ACCCTRL_H
+#define _ACCCTRL_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define AccFree LocalFree
+#define ACTRL_RESERVED 0x00000000
+#define ACTRL_ACCESS_PROTECTED 0x00000001
+#define ACTRL_ACCESS_ALLOWED 0x00000001
+#define ACTRL_ACCESS_DENIED 0x00000002
+#define ACTRL_AUDIT_SUCCESS 0x00000004
+#define ACTRL_AUDIT_FAILURE 0x00000008
+#define ACTRL_SYSTEM_ACCESS 0x04000000
+#define ACTRL_DELETE 0x08000000
+#define ACTRL_READ_CONTROL 0x10000000
+#define ACTRL_CHANGE_ACCESS 0x20000000
+#define ACTRL_CHANGE_OWNER 0x40000000
+#define ACTRL_SYNCHRONIZE 0x80000000
+#define ACTRL_STD_RIGHTS_ALL 0xf8000000
+
+#define ACTRL_FILE_READ 0x00000001
+#define ACTRL_FILE_WRITE 0x00000002
+#define ACTRL_FILE_APPEND 0x00000004
+#define ACTRL_FILE_READ_PROP 0x00000008
+#define ACTRL_FILE_WRITE_PROP 0x00000010
+#define ACTRL_FILE_EXECUTE 0x00000020
+#define ACTRL_FILE_READ_ATTRIB 0x00000080
+#define ACTRL_FILE_WRITE_ATTRIB 0x00000100
+#define ACTRL_FILE_CREATE_PIPE 0x00000200
+#define ACTRL_DIR_LIST 0x00000001
+#define ACTRL_DIR_CREATE_OBJECT 0x00000002
+#define ACTRL_DIR_CREATE_CHILD 0x00000004
+#define ACTRL_DIR_DELETE_CHILD 0x00000040
+#define ACTRL_DIR_TRAVERSE 0x00000020
+#define ACTRL_KERNEL_TERMINATE 0x00000001
+#define ACTRL_KERNEL_THREAD 0x00000002
+#define ACTRL_KERNEL_VM 0x00000004
+#define ACTRL_KERNEL_VM_READ 0x00000008
+#define ACTRL_KERNEL_VM_WRITE 0x00000010
+#define ACTRL_KERNEL_DUP_HANDLE 0x00000020
+#define ACTRL_KERNEL_PROCESS 0x00000040
+#define ACTRL_KERNEL_SET_INFO 0x00000080
+#define ACTRL_KERNEL_GET_INFO 0x00000100
+#define ACTRL_KERNEL_CONTROL 0x00000200
+#define ACTRL_KERNEL_ALERT 0x00000400
+#define ACTRL_KERNEL_GET_CONTEXT 0x00000800
+#define ACTRL_KERNEL_SET_CONTEXT 0x00001000
+#define ACTRL_KERNEL_TOKEN 0x00002000
+#define ACTRL_KERNEL_IMPERSONATE 0x00004000
+#define ACTRL_KERNEL_DIMPERSONATE 0x00008000
+#define ACTRL_PRINT_SADMIN 0x00000001
+#define ACTRL_PRINT_SLIST 0x00000002
+#define ACTRL_PRINT_PADMIN 0x00000004
+#define ACTRL_PRINT_PUSE 0x00000008
+#define ACTRL_PRINT_JADMIN 0x00000010
+#define ACTRL_SVC_GET_INFO 0x00000001
+#define ACTRL_SVC_SET_INFO 0x00000002
+#define ACTRL_SVC_STATUS 0x00000004
+#define ACTRL_SVC_LIST 0x00000008
+#define ACTRL_SVC_START 0x00000010
+#define ACTRL_SVC_STOP 0x00000020
+#define ACTRL_SVC_PAUSE 0x00000040
+#define ACTRL_SVC_INTERROGATE 0x00000080
+#define ACTRL_SVC_UCONTROL 0x00000100
+#define ACTRL_REG_QUERY 0x00000001
+#define ACTRL_REG_SET 0x00000002
+#define ACTRL_REG_CREATE_CHILD 0x00000004
+#define ACTRL_REG_LIST 0x00000008
+#define ACTRL_REG_NOTIFY 0x00000010
+#define ACTRL_REG_LINK 0x00000020
+#define ACTRL_WIN_CLIPBRD 0x00000001
+#define ACTRL_WIN_GLOBAL_ATOMS 0x00000002
+#define ACTRL_WIN_CREATE 0x00000004
+#define ACTRL_WIN_LIST_DESK 0x00000008
+#define ACTRL_WIN_LIST 0x00000010
+#define ACTRL_WIN_READ_ATTRIBS 0x00000020
+#define ACTRL_WIN_WRITE_ATTRIBS 0x00000040
+#define ACTRL_WIN_SCREEN 0x00000080
+#define ACTRL_WIN_EXIT 0x00000100
+#define ACTRL_ACCESS_NO_OPTIONS 0x00000000
+#define ACTRL_ACCESS_SUPPORTS_OBJECT_ENTRIES 0x00000001
+#define ACCCTRL_DEFAULT_PROVIDERA "Windows NT Access Provider"
+#define ACCCTRL_DEFAULT_PROVIDERW L"Windows NT Access Provider"
+#define TRUSTEE_ACCESS_ALLOWED 0x00000001L
+#define TRUSTEE_ACCESS_READ 0x00000002L
+#define TRUSTEE_ACCESS_WRITE 0x00000004L
+#define TRUSTEE_ACCESS_EXPLICIT 0x00000001L
+#define TRUSTEE_ACCESS_READ_WRITE (TRUSTEE_ACCESS_READ | TRUSTEE_ACCESS_WRITE)
+#define TRUSTEE_ACCESS_ALL 0xFFFFFFFFL
+#define NO_INHERITANCE 0x0
+#define SUB_OBJECTS_ONLY_INHERIT 0x1
+#define SUB_CONTAINERS_ONLY_INHERIT 0x2
+#define SUB_CONTAINERS_AND_OBJECTS_INHERIT 0x3
+#define INHERIT_NO_PROPAGATE 0x4
+#define INHERIT_ONLY 0x8
+#define INHERITED_ACCESS_ENTRY 0x10
+#define INHERITED_PARENT 0x10000000
+#define INHERITED_GRANDPARENT 0x20000000
+
+typedef ULONG INHERIT_FLAGS, *PINHERIT_FLAGS;
+typedef ULONG ACCESS_RIGHTS, *PACCESS_RIGHTS;
+
+typedef enum _ACCESS_MODE {
+ NOT_USED_ACCESS = 0,
+ GRANT_ACCESS,
+ SET_ACCESS,
+ DENY_ACCESS,
+ REVOKE_ACCESS,
+ SET_AUDIT_SUCCESS,
+ SET_AUDIT_FAILURE
+} ACCESS_MODE;
+typedef 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_OBJECT_TYPE;
+typedef 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
+} TRUSTEE_TYPE;
+typedef enum _TRUSTEE_FORM {
+ TRUSTEE_IS_SID,
+ TRUSTEE_IS_NAME,
+ TRUSTEE_BAD_FORM,
+ TRUSTEE_IS_OBJECTS_AND_SID,
+ TRUSTEE_IS_OBJECTS_AND_NAME
+} TRUSTEE_FORM;
+typedef enum _MULTIPLE_TRUSTEE_OPERATION {
+ NO_MULTIPLE_TRUSTEE,
+ TRUSTEE_IS_IMPERSONATE
+} MULTIPLE_TRUSTEE_OPERATION;
+typedef struct _TRUSTEE_A {
+ struct _TRUSTEE_A *pMultipleTrustee;
+ MULTIPLE_TRUSTEE_OPERATION MultipleTrusteeOperation;
+ TRUSTEE_FORM TrusteeForm;
+ TRUSTEE_TYPE TrusteeType;
+ LPSTR ptstrName;
+} TRUSTEE_A, *PTRUSTEE_A, TRUSTEEA, *PTRUSTEEA;
+typedef struct _TRUSTEE_W {
+ struct _TRUSTEE_W *pMultipleTrustee;
+ MULTIPLE_TRUSTEE_OPERATION MultipleTrusteeOperation;
+ TRUSTEE_FORM TrusteeForm;
+ TRUSTEE_TYPE TrusteeType;
+ LPWSTR ptstrName;
+} TRUSTEE_W, *PTRUSTEE_W, TRUSTEEW, *PTRUSTEEW;
+typedef struct _ACTRL_ACCESS_ENTRYA {
+ TRUSTEE_A Trustee;
+ ULONG fAccessFlags;
+ ACCESS_RIGHTS Access;
+ ACCESS_RIGHTS ProvSpecificAccess;
+ INHERIT_FLAGS Inheritance;
+ LPCSTR lpInheritProperty;
+} ACTRL_ACCESS_ENTRYA, *PACTRL_ACCESS_ENTRYA;
+typedef struct _ACTRL_ACCESS_ENTRYW {
+ TRUSTEE_W Trustee;
+ ULONG fAccessFlags;
+ ACCESS_RIGHTS Access;
+ ACCESS_RIGHTS ProvSpecificAccess;
+ INHERIT_FLAGS Inheritance;
+ LPCWSTR lpInheritProperty;
+} ACTRL_ACCESS_ENTRYW, *PACTRL_ACCESS_ENTRYW;
+typedef struct _ACTRL_ACCESS_ENTRY_LISTA {
+ ULONG cEntries;
+ ACTRL_ACCESS_ENTRYA *pAccessList;
+} ACTRL_ACCESS_ENTRY_LISTA, *PACTRL_ACCESS_ENTRY_LISTA;
+typedef struct _ACTRL_ACCESS_ENTRY_LISTW {
+ ULONG cEntries;
+ ACTRL_ACCESS_ENTRYW *pAccessList;
+} ACTRL_ACCESS_ENTRY_LISTW, *PACTRL_ACCESS_ENTRY_LISTW;
+typedef struct _ACTRL_PROPERTY_ENTRYA {
+ LPCSTR lpProperty;
+ PACTRL_ACCESS_ENTRY_LISTA pAccessEntryList;
+ ULONG fListFlags;
+} ACTRL_PROPERTY_ENTRYA, *PACTRL_PROPERTY_ENTRYA;
+typedef struct _ACTRL_PROPERTY_ENTRYW {
+ LPCWSTR lpProperty;
+ PACTRL_ACCESS_ENTRY_LISTW pAccessEntryList;
+ ULONG fListFlags;
+} ACTRL_PROPERTY_ENTRYW, *PACTRL_PROPERTY_ENTRYW;
+typedef struct _ACTRL_ALISTA {
+ ULONG cEntries;
+ PACTRL_PROPERTY_ENTRYA pPropertyAccessList;
+} ACTRL_ACCESSA, *PACTRL_ACCESSA, ACTRL_AUDITA, *PACTRL_AUDITA;
+typedef struct _ACTRL_ALISTW {
+ ULONG cEntries;
+ PACTRL_PROPERTY_ENTRYW pPropertyAccessList;
+} ACTRL_ACCESSW, *PACTRL_ACCESSW, ACTRL_AUDITW, *PACTRL_AUDITW;
+typedef struct _TRUSTEE_ACCESSA {
+ LPSTR lpProperty;
+ ACCESS_RIGHTS Access;
+ ULONG fAccessFlags;
+ ULONG fReturnedAccess;
+} TRUSTEE_ACCESSA, *PTRUSTEE_ACCESSA;
+typedef struct _TRUSTEE_ACCESSW {
+ LPWSTR lpProperty;
+ ACCESS_RIGHTS Access;
+ ULONG fAccessFlags;
+ ULONG fReturnedAccess;
+} TRUSTEE_ACCESSW, *PTRUSTEE_ACCESSW;
+typedef struct _ACTRL_OVERLAPPED {
+ _ANONYMOUS_UNION
+ union {
+ PVOID Provider;
+ ULONG Reserved1;
+ } DUMMYUNIONNAME;
+ ULONG Reserved2;
+ HANDLE hEvent;
+} ACTRL_OVERLAPPED, *PACTRL_OVERLAPPED;
+typedef struct _ACTRL_ACCESS_INFOA {
+ ULONG fAccessPermission;
+ LPSTR lpAccessPermissionName;
+} ACTRL_ACCESS_INFOA, *PACTRL_ACCESS_INFOA;
+typedef struct _ACTRL_ACCESS_INFOW {
+ ULONG fAccessPermission;
+ LPWSTR lpAccessPermissionName;
+} ACTRL_ACCESS_INFOW, *PACTRL_ACCESS_INFOW;
+typedef struct _ACTRL_CONTROL_INFOA {
+ LPSTR lpControlId;
+ LPSTR lpControlName;
+} ACTRL_CONTROL_INFOA, *PACTRL_CONTROL_INFOA;
+typedef struct _ACTRL_CONTROL_INFOW {
+ LPWSTR lpControlId;
+ LPWSTR lpControlName;
+} ACTRL_CONTROL_INFOW, *PACTRL_CONTROL_INFOW;
+typedef struct _EXPLICIT_ACCESS_A {
+ DWORD grfAccessPermissions;
+ ACCESS_MODE grfAccessMode;
+ DWORD grfInheritance;
+ TRUSTEE_A Trustee;
+} EXPLICIT_ACCESS_A, *PEXPLICIT_ACCESS_A, EXPLICIT_ACCESSA, *PEXPLICIT_ACCESSA;
+typedef struct _EXPLICIT_ACCESS_W {
+ DWORD grfAccessPermissions;
+ ACCESS_MODE grfAccessMode;
+ DWORD grfInheritance;
+ TRUSTEE_W Trustee;
+} EXPLICIT_ACCESS_W, *PEXPLICIT_ACCESS_W, EXPLICIT_ACCESSW, *PEXPLICIT_ACCESSW;
+typedef struct _OBJECTS_AND_SID {
+ DWORD ObjectsPresent;
+ GUID ObjectTypeGuid;
+ GUID InheritedObjectTypeGuid;
+ SID * pSid;
+} OBJECTS_AND_SID, *POBJECTS_AND_SID;
+typedef struct _OBJECTS_AND_NAME_A {
+ DWORD ObjectsPresent;
+ SE_OBJECT_TYPE ObjectType;
+ LPSTR ObjectTypeName;
+ LPSTR InheritedObjectTypeName;
+ LPSTR ptstrName;
+} OBJECTS_AND_NAME_A, *POBJECTS_AND_NAME_A;
+typedef struct _OBJECTS_AND_NAME_W {
+ DWORD ObjectsPresent;
+ SE_OBJECT_TYPE ObjectType;
+ LPWSTR ObjectTypeName;
+ LPWSTR InheritedObjectTypeName;
+ LPWSTR ptstrName;
+} OBJECTS_AND_NAME_W, *POBJECTS_AND_NAME_W;
+#if (_WIN32_WINNT >= 0x0501)
+typedef struct {
+ LONG GenerationGap;
+ LPSTR AncestorName;
+} INHERITED_FROMA, *PINHERITED_FROMA;
+typedef struct {
+ LONG GenerationGap;
+ LPWSTR AncestorName;
+} INHERITED_FROMW, *PINHERITED_FROMW;
+#endif /* (_WIN32_WINNT >= 0x0501) */
+
+#ifdef UNICODE
+#define ACCCTRL_DEFAULT_PROVIDER ACCCTRL_DEFAULT_PROVIDERW
+typedef TRUSTEE_W TRUSTEE_, *PTRUSTEE_;
+typedef TRUSTEEW TRUSTEE, *PTRUSTEE;
+typedef ACTRL_ACCESSW ACTRL_ACCESS, *PACTRL_ACCESS;
+typedef ACTRL_ACCESS_ENTRY_LISTW ACTRL_ACCESS_ENTRY_LIST, *PACTRL_ACCESS_ENTRY_LIST;
+typedef ACTRL_ACCESS_INFOW ACTRL_ACCESS_INFO, *PACTRL_ACCESS_INFO;
+typedef ACTRL_ACCESS_ENTRYW ACTRL_ACCESS_ENTRY, *PACTRL_ACCESS_ENTRY;
+typedef ACTRL_AUDITW ACTRL_AUDIT, *PACTRL_AUDIT;
+typedef ACTRL_CONTROL_INFOW ACTRL_CONTROL_INFO, *PACTRL_CONTROL_INFO;
+typedef EXPLICIT_ACCESS_W EXPLICIT_ACCESS_, *PEXPLICIT_ACCESS_;
+typedef EXPLICIT_ACCESSW EXPLICIT_ACCESS, *PEXPLICIT_ACCESS;
+typedef TRUSTEE_ACCESSW TRUSTEE_ACCESS, *PTRUSTEE_ACCESS;
+typedef OBJECTS_AND_NAME_W OBJECTS_AND_NAME_, *POBJECTS_AND_NAME_;
+#if (_WIN32_WINNT >= 0x0501)
+typedef INHERITED_FROMW INHERITED_FROM, *PINHERITED_FROM;
+#endif
+#else
+#define ACCCTRL_DEFAULT_PROVIDER ACCCTRL_DEFAULT_PROVIDERA
+typedef TRUSTEE_A TRUSTEE_, *PTRUSTEE_;
+typedef TRUSTEEA TRUSTEE, *PTRUSTEE;
+typedef ACTRL_ACCESSA ACTRL_ACCESS, *PACTRL_ACCESS;
+typedef ACTRL_ACCESS_ENTRY_LISTA ACTRL_ACCESS_ENTRY_LIST, *PACTRL_ACCESS_ENTRY_LIST;
+typedef ACTRL_ACCESS_INFOA ACTRL_ACCESS_INFO, *PACTRL_ACCESS_INFO;
+typedef ACTRL_ACCESS_ENTRYA ACTRL_ACCESS_ENTRY, *PACTRL_ACCESS_ENTRY;
+typedef ACTRL_AUDITA ACTRL_AUDIT, *PACTRL_AUDIT;
+typedef ACTRL_CONTROL_INFOA ACTRL_CONTROL_INFO, *PACTRL_CONTROL_INFO;
+typedef EXPLICIT_ACCESS_A EXPLICIT_ACCESS_, *PEXPLICIT_ACCESS_;
+typedef EXPLICIT_ACCESSA EXPLICIT_ACCESS, *PEXPLICIT_ACCESS;
+typedef TRUSTEE_ACCESSA TRUSTEE_ACCESS, *PTRUSTEE_ACCESS;
+typedef OBJECTS_AND_NAME_A OBJECTS_AND_NAME_, *POBJECTS_AND_NAME_;
+#if (_WIN32_WINNT >= 0x0501)
+typedef INHERITED_FROMA INHERITED_FROM, *PINHERITED_FROM;
+#endif
+#endif /* UNICODE */
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/aclapi.h b/tcc/include/winapi/aclapi.h
new file mode 100644
index 0000000..abd26a2
--- /dev/null
+++ b/tcc/include/winapi/aclapi.h
@@ -0,0 +1,117 @@
+#ifndef _ACLAPI_H
+#define _ACLAPI_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#include <windows.h>
+#include <accctrl.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+WINADVAPI VOID WINAPI BuildExplicitAccessWithNameA(PEXPLICIT_ACCESS_A,LPSTR,DWORD,ACCESS_MODE,DWORD);
+WINADVAPI VOID WINAPI BuildExplicitAccessWithNameW(PEXPLICIT_ACCESS_W,LPWSTR,DWORD,ACCESS_MODE,DWORD);
+WINADVAPI DWORD WINAPI BuildSecurityDescriptorA(PTRUSTEE_A,PTRUSTEE_A ,ULONG,PEXPLICIT_ACCESS_A,
+ ULONG,PEXPLICIT_ACCESS_A,PSECURITY_DESCRIPTOR,PULONG,PSECURITY_DESCRIPTOR*);
+WINADVAPI DWORD WINAPI BuildSecurityDescriptorW(PTRUSTEE_W,PTRUSTEE_W ,ULONG,PEXPLICIT_ACCESS_W,
+ ULONG,PEXPLICIT_ACCESS_W,PSECURITY_DESCRIPTOR,PULONG,PSECURITY_DESCRIPTOR*);
+WINADVAPI VOID WINAPI BuildTrusteeWithNameA(PTRUSTEE_A,LPSTR);
+WINADVAPI VOID WINAPI BuildTrusteeWithNameW(PTRUSTEE_W,LPWSTR);
+WINADVAPI VOID WINAPI BuildTrusteeWithObjectsAndNameA(PTRUSTEE_A,POBJECTS_AND_NAME_A,SE_OBJECT_TYPE,
+ LPSTR,LPSTR,LPSTR);
+WINADVAPI VOID WINAPI BuildTrusteeWithObjectsAndNameW(PTRUSTEE_W,POBJECTS_AND_NAME_W,SE_OBJECT_TYPE,
+ LPWSTR,LPWSTR,LPWSTR);
+WINADVAPI VOID WINAPI BuildTrusteeWithObjectsAndSidA(PTRUSTEE_A,POBJECTS_AND_SID,GUID*,GUID*,PSID);
+WINADVAPI VOID WINAPI BuildTrusteeWithObjectsAndSidW(PTRUSTEE_W,POBJECTS_AND_SID,GUID*,GUID*,PSID);
+WINADVAPI VOID WINAPI BuildTrusteeWithSidA(PTRUSTEE_A,PSID);
+WINADVAPI VOID WINAPI BuildTrusteeWithSidW(PTRUSTEE_W,PSID);
+WINADVAPI DWORD WINAPI GetAuditedPermissionsFromAclA(PACL,PTRUSTEE_A,PACCESS_MASK,PACCESS_MASK);
+WINADVAPI DWORD WINAPI GetAuditedPermissionsFromAclW(PACL,PTRUSTEE_W,PACCESS_MASK,PACCESS_MASK);
+WINADVAPI DWORD WINAPI GetEffectiveRightsFromAclA(PACL,PTRUSTEE_A,PACCESS_MASK);
+WINADVAPI DWORD WINAPI GetEffectiveRightsFromAclW(PACL,PTRUSTEE_W,PACCESS_MASK);
+WINADVAPI DWORD WINAPI GetExplicitEntriesFromAclA(PACL,PULONG,PEXPLICIT_ACCESS_A*);
+WINADVAPI DWORD WINAPI GetExplicitEntriesFromAclW(PACL,PULONG,PEXPLICIT_ACCESS_W*);
+#if (_WIN32_WINNT >= 0x0501)
+WINADVAPI DWORD WINAPI GetInheritanceSourceA(LPSTR,SE_OBJECT_TYPE,SECURITY_INFORMATION,BOOL,GUID**,DWORD,PACL,void*,PGENERIC_MAPPING,PINHERITED_FROMA);
+WINADVAPI DWORD WINAPI GetInheritanceSourceW(LPWSTR,SE_OBJECT_TYPE,SECURITY_INFORMATION,BOOL,GUID**,DWORD,PACL,void*,PGENERIC_MAPPING,PINHERITED_FROMW);
+#endif
+WINADVAPI DWORD WINAPI GetNamedSecurityInfoA(LPSTR,SE_OBJECT_TYPE,SECURITY_INFORMATION,
+ PSID*,PSID*,PACL*,PACL*,PSECURITY_DESCRIPTOR*);
+WINADVAPI DWORD WINAPI GetNamedSecurityInfoW(LPWSTR,SE_OBJECT_TYPE,SECURITY_INFORMATION,
+ PSID*,PSID*,PACL*,PACL*,PSECURITY_DESCRIPTOR*);
+WINADVAPI DWORD WINAPI GetSecurityInfo(HANDLE,SE_OBJECT_TYPE,SECURITY_INFORMATION,
+ PSID*,PSID*,PACL*,PACL*,PSECURITY_DESCRIPTOR*);
+WINADVAPI TRUSTEE_FORM WINAPI GetTrusteeFormA(PTRUSTEE_A);
+WINADVAPI TRUSTEE_FORM WINAPI GetTrusteeFormW(PTRUSTEE_W);
+WINADVAPI LPSTR WINAPI GetTrusteeNameA(PTRUSTEE_A);
+WINADVAPI LPWSTR WINAPI GetTrusteeNameW(PTRUSTEE_W);
+WINADVAPI TRUSTEE_TYPE WINAPI GetTrusteeTypeA(PTRUSTEE_A);
+WINADVAPI TRUSTEE_TYPE WINAPI GetTrusteeTypeW(PTRUSTEE_W);
+WINADVAPI DWORD WINAPI LookupSecurityDescriptorPartsA(PTRUSTEE_A*,PTRUSTEE_A*,PULONG,PEXPLICIT_ACCESS_A*,
+ PULONG,PEXPLICIT_ACCESS_A*,PSECURITY_DESCRIPTOR);
+WINADVAPI DWORD WINAPI LookupSecurityDescriptorPartsW(PTRUSTEE_W*,PTRUSTEE_W*,PULONG,PEXPLICIT_ACCESS_W*,
+ PULONG,PEXPLICIT_ACCESS_W*,PSECURITY_DESCRIPTOR);
+WINADVAPI DWORD WINAPI SetEntriesInAclA(ULONG,PEXPLICIT_ACCESS_A,PACL,PACL*);
+WINADVAPI DWORD WINAPI SetEntriesInAclW(ULONG,PEXPLICIT_ACCESS_W,PACL,PACL*);
+WINADVAPI DWORD WINAPI SetNamedSecurityInfoA(LPSTR,SE_OBJECT_TYPE,SECURITY_INFORMATION,PSID,PSID,PACL,PACL);
+WINADVAPI DWORD WINAPI SetNamedSecurityInfoW(LPWSTR,SE_OBJECT_TYPE,SECURITY_INFORMATION,PSID,PSID,PACL,PACL);
+WINADVAPI DWORD WINAPI SetSecurityInfo(HANDLE,SE_OBJECT_TYPE,SECURITY_INFORMATION,PSID,PSID,PACL,PACL);
+WINADVAPI VOID WINAPI BuildImpersonateExplicitAccessWithNameA(PEXPLICIT_ACCESS_A,LPSTR,PTRUSTEE_A,DWORD,ACCESS_MODE,DWORD);
+WINADVAPI VOID WINAPI BuildImpersonateExplicitAccessWithNameW(PEXPLICIT_ACCESS_W,LPWSTR,PTRUSTEE_W,DWORD,ACCESS_MODE,DWORD);
+WINADVAPI VOID WINAPI BuildImpersonateTrusteeA(PTRUSTEE_A,PTRUSTEE_A);
+WINADVAPI VOID WINAPI BuildImpersonateTrusteeW(PTRUSTEE_W,PTRUSTEE_W);
+WINADVAPI PTRUSTEE_A WINAPI GetMultipleTrusteeA(PTRUSTEE_A);
+WINADVAPI PTRUSTEE_W WINAPI GetMultipleTrusteeW(PTRUSTEE_W);
+WINADVAPI MULTIPLE_TRUSTEE_OPERATION WINAPI GetMultipleTrusteeOperationA(PTRUSTEE_A);
+WINADVAPI MULTIPLE_TRUSTEE_OPERATION WINAPI GetMultipleTrusteeOperationW(PTRUSTEE_W);
+
+#ifdef UNICODE
+#define BuildExplicitAccessWithName BuildExplicitAccessWithNameW
+#define BuildSecurityDescriptor BuildSecurityDescriptorW
+#define BuildTrusteeWithName BuildTrusteeWithNameW
+#define BuildTrusteeWithObjectsAndName BuildTrusteeWithObjectsAndNameW
+#define BuildTrusteeWithObjectsAndSid BuildTrusteeWithObjectsAndSidW
+#define BuildTrusteeWithSid BuildTrusteeWithSidW
+#define GetAuditedPermissionsFromAcl GetAuditedPermissionsFromAclW
+#define GetEffectiveRightsFromAcl GetEffectiveRightsFromAclW
+#define GetExplicitEntriesFromAcl GetExplicitEntriesFromAclW
+#define GetNamedSecurityInfo GetNamedSecurityInfoW
+#define GetTrusteeForm GetTrusteeFormW
+#define GetTrusteeName GetTrusteeNameW
+#define GetTrusteeType GetTrusteeTypeW
+#define LookupSecurityDescriptorParts LookupSecurityDescriptorPartsW
+#define SetEntriesInAcl SetEntriesInAclW
+#define SetNamedSecurityInfo SetNamedSecurityInfoW
+#define BuildImpersonateExplicitAccessWithName BuildImpersonateExplicitAccessWithNameW
+#define BuildImpersonateTrustee BuildImpersonateTrusteeW
+#define GetMultipleTrustee GetMultipleTrusteeW
+#define GetMultipleTrusteeOperation GetMultipleTrusteeOperationW
+#else
+#define BuildExplicitAccessWithName BuildExplicitAccessWithNameA
+#define BuildSecurityDescriptor BuildSecurityDescriptorA
+#define BuildTrusteeWithName BuildTrusteeWithNameA
+#define BuildTrusteeWithObjectsAndName BuildTrusteeWithObjectsAndNameA
+#define BuildTrusteeWithObjectsAndSid BuildTrusteeWithObjectsAndSidA
+#define BuildTrusteeWithSid BuildTrusteeWithSidA
+#define GetAuditedPermissionsFromAcl GetAuditedPermissionsFromAclA
+#define GetEffectiveRightsFromAcl GetEffectiveRightsFromAclA
+#define GetExplicitEntriesFromAcl GetExplicitEntriesFromAclA
+#define GetNamedSecurityInfo GetNamedSecurityInfoA
+#define GetTrusteeForm GetTrusteeFormA
+#define GetTrusteeName GetTrusteeNameA
+#define GetTrusteeType GetTrusteeTypeA
+#define LookupSecurityDescriptorParts LookupSecurityDescriptorPartsA
+#define SetEntriesInAcl SetEntriesInAclA
+#define SetNamedSecurityInfo SetNamedSecurityInfoA
+#define BuildImpersonateExplicitAccessWithName BuildImpersonateExplicitAccessWithNameA
+#define BuildImpersonateTrustee BuildImpersonateTrusteeA
+#define GetMultipleTrustee GetMultipleTrusteeA
+#define GetMultipleTrusteeOperation GetMultipleTrusteeOperationA
+#endif /* UNICODE */
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/aclui.h b/tcc/include/winapi/aclui.h
new file mode 100644
index 0000000..144711f
--- /dev/null
+++ b/tcc/include/winapi/aclui.h
@@ -0,0 +1,134 @@
+#ifndef _ACLUI_H
+#define _ACLUI_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifndef _OBJC_NO_COM
+#include <objbase.h>
+#include <commctrl.h>
+#include <accctrl.h>
+#endif
+
+#if !defined(_ACLUI_)
+#define ACLUIAPI DECLSPEC_IMPORT WINAPI
+#else
+#define ACLUIAPI WINAPI
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct _SI_OBJECT_INFO
+{
+ DWORD dwFlags;
+ HINSTANCE hInstance;
+ LPWSTR pszServerName;
+ LPWSTR pszObjectName;
+ LPWSTR pszPageTitle;
+ GUID guidObjectType;
+} SI_OBJECT_INFO, *PSI_OBJECT_INFO;
+
+/* values for SI_OBJECT_INFO.dwFlags */
+#define SI_EDIT_PERMS 0x00000000L
+#define SI_EDIT_OWNER 0x00000001L
+#define SI_EDIT_AUDITS 0x00000002L
+#define SI_CONTAINER 0x00000004L
+#define SI_READONLY 0x00000008L
+#define SI_ADVANCED 0x00000010L
+#define SI_RESET 0x00000020L
+#define SI_OWNER_READONLY 0x00000040L
+#define SI_EDIT_PROPERTIES 0x00000080L
+#define SI_OWNER_RECURSE 0x00000100L
+#define SI_NO_ACL_PROTECT 0x00000200L
+#define SI_NO_TREE_APPLY 0x00000400L
+#define SI_PAGE_TITLE 0x00000800L
+#define SI_SERVER_IS_DC 0x00001000L
+#define SI_RESET_DACL_TREE 0x00004000L
+#define SI_RESET_SACL_TREE 0x00008000L
+#define SI_OBJECT_GUID 0x00010000L
+#define SI_EDIT_EFFECTIVE 0x00020000L
+#define SI_RESET_DACL 0x00040000L
+#define SI_RESET_SACL 0x00080000L
+#define SI_RESET_OWNER 0x00100000L
+#define SI_NO_ADDITIONAL_PERMISSION 0x00200000L
+#define SI_MAY_WRITE 0x10000000L
+
+#define SI_EDIT_ALL (SI_EDIT_PERMS | SI_EDIT_OWNER | SI_EDIT_AUDITS)
+
+
+typedef struct _SI_ACCESS
+{
+ const GUID* pguid;
+ ACCESS_MASK mask;
+ LPCWSTR pszName;
+ DWORD dwFlags;
+} SI_ACCESS, *PSI_ACCESS;
+
+/* values for SI_ACCESS.dwFlags */
+#define SI_ACCESS_SPECIFIC 0x00010000L
+#define SI_ACCESS_GENERAL 0x00020000L
+#define SI_ACCESS_CONTAINER 0x00040000L
+#define SI_ACCESS_PROPERTY 0x00080000L
+
+
+typedef struct _SI_INHERIT_TYPE
+{
+ const GUID* pguid;
+ ULONG dwFlags;
+ LPCWSTR pszName;
+} SI_INHERIT_TYPE, *PSI_INHERIT_TYPE;
+
+/* values for SI_INHERIT_TYPE.dwFlags
+ INHERIT_ONLY_ACE, CONTAINER_INHERIT_ACE, OBJECT_INHERIT_ACE
+ defined elsewhere */
+
+
+typedef enum _SI_PAGE_TYPE
+{
+ SI_PAGE_PERM = 0,
+ SI_PAGE_ADVPERM,
+ SI_PAGE_AUDIT,
+ SI_PAGE_OWNER
+} SI_PAGE_TYPE;
+
+
+#define PSPCB_SI_INITDIALOG (WM_USER + 1)
+
+#ifndef __ISecurityInformation_INTERFACE_DEFINED__
+#define __ISecurityInformation_INTERFACE_DEFINED__
+#define INTERFACE ISecurityInformation
+DECLARE_INTERFACE_(ISecurityInformation, IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+
+ STDMETHOD(GetObjectInformation)(THIS_ PSI_OBJECT_INFO) PURE;
+ STDMETHOD(GetSecurity)(THIS_ SECURITY_INFORMATION,PSECURITY_DESCRIPTOR*,BOOL) PURE;
+ STDMETHOD(SetSecurity)(THIS_ SECURITY_INFORMATION,PSECURITY_DESCRIPTOR) PURE;
+ STDMETHOD(GetAccessRights)(THIS_ const GUID*,DWORD,PSI_ACCESS*,ULONG*,ULONG*) PURE;
+ STDMETHOD(MapGeneric)(THIS_ const GUID*,UCHAR*,ACCESS_MASK*) PURE;
+ STDMETHOD(GetInheritTypes)(THIS_ PSI_INHERIT_TYPE*,ULONG*) PURE;
+ STDMETHOD(PropertySheetPageCallback)(THIS_ HWND,UINT,SI_PAGE_TYPE) PURE;
+};
+#undef INTERFACE
+typedef ISecurityInformation *LPSECURITYINFO;
+#endif
+
+/*
+ * TODO: ISecurityInformation2, IEffectivePermission, ISecurityObjectTypeInfo
+ */
+
+extern DECLSPEC_IMPORT const IID IID_ISecurityInformation;
+
+
+HPROPSHEETPAGE ACLUIAPI CreateSecurityPage(LPSECURITYINFO psi);
+BOOL ACLUIAPI EditSecurity(HWND hwndOwner, LPSECURITYINFO psi);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tcc/include/winapi/adsprop.h b/tcc/include/winapi/adsprop.h
new file mode 100644
index 0000000..8036b76
--- /dev/null
+++ b/tcc/include/winapi/adsprop.h
@@ -0,0 +1,59 @@
+/*
+ * adsprop.h - Active Directory
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may use,
+ * modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+#ifndef _ADSPROP_H
+#define _ADSPROP_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--- Active Directory Reference - Active Directory Messages */
+#define WM_ADSPROP_NOTIFY_APPLY (WM_USER+1104)
+#define WM_ADSPROP_NOTIFY_CHANGE (WM_USER+1103)
+#define WM_ADSPROP_NOTIFY_ERROR (WM_USER+1110)
+#define WM_ADSPROP_NOTIFY_EXIT (WM_USER+1107)
+#define WM_ADSPROP_NOTIFY_FOREGROUND (WM_USER+1106)
+#define WM_ADSPROP_NOTIFY_PAGEHWND (WM_USER+1102)
+#define WM_ADSPROP_NOTIFY_PAGEINIT (WM_USER+1101)
+#define WM_ADSPROP_NOTIFY_SETFOCUS (WM_USER+1105)
+/*--- Active Directory Reference - Active Directory Structures - Active Directory MMC Property Page Structures */
+#if (_WIN32_WINNT >= 0x0501)
+typedef struct {
+ HWND hwndPage;
+ PWSTR pszPageTitle;
+ PWSTR pszObjPath;
+ PWSTR pszObjClass;
+ HRESULT hr;
+ PWSTR pszError;
+} ADSPROPERROR,*PADSPROPERROR;
+#endif /* (_WIN32_WINNT >= 0x0501) */
+#if (_WIN32_WINNT >= 0x0500)
+typedef struct {
+ DWORD dwSize;
+ DWORD dwFlags;
+ HRESULT hr;
+ IDirectoryObject *pDsObj;
+ LPWSTR pwzCN;
+ PADS_ATTR_INFO pWritableAttrs;
+} ADSPROPINITPARAMS,*PADSPROPINITPARAMS;
+#endif /* (_WIN32_WINNT >= 0x0500) */
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/afxres.h b/tcc/include/winapi/afxres.h
new file mode 100644
index 0000000..91e7f49
--- /dev/null
+++ b/tcc/include/winapi/afxres.h
@@ -0,0 +1,23 @@
+#ifndef _AFXRES_H
+#define _AFXRES_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _WINDOWS_H
+#include <windows.h>
+#endif
+
+/* IDC_STATIC is documented in winuser.h, but not defined. */
+#ifndef IDC_STATIC
+#define IDC_STATIC (-1)
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/amaudio.h b/tcc/include/winapi/amaudio.h
new file mode 100644
index 0000000..94e23ac
--- /dev/null
+++ b/tcc/include/winapi/amaudio.h
@@ -0,0 +1,33 @@
+#ifndef _AMAUDIO_H
+#define _AMAUDIO_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#include <dsound.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define INTERFACE IAMDirectSound
+DECLARE_INTERFACE_(IAMDirectSound, IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,LPVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetDirectSoundInterface)(THIS_ LPDIRECTSOUND*) PURE;
+ STDMETHOD(GetPrimaryBufferInterface)(THIS_ LPDIRECTSOUNDBUFFER*) PURE;
+ STDMETHOD(GetSecondaryBufferInterface)(THIS_ LPDIRECTSOUNDBUFFER*) PURE;
+ STDMETHOD(GetFocusWindow)(THIS_ HWND*,BOOL*) PURE ;
+ STDMETHOD(ReleaseDirectSoundInterface)(THIS_ LPDIRECTSOUND) PURE;
+ STDMETHOD(ReleasePrimaryBufferInterface)(THIS_ LPDIRECTSOUNDBUFFER) PURE;
+ STDMETHOD(ReleaseSecondaryBufferInterface)(THIS_ LPDIRECTSOUNDBUFFER) PURE;
+ STDMETHOD(SetFocusWindow)(THIS_ HWND,BOOL) PURE ;
+};
+#undef INTERFACE
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/amvideo.h b/tcc/include/winapi/amvideo.h
new file mode 100644
index 0000000..10e8e60
--- /dev/null
+++ b/tcc/include/winapi/amvideo.h
@@ -0,0 +1,179 @@
+#ifndef _AMVIDEO_H
+#define _AMVIDEO_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#include <ddraw.h>
+#include <strmif.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define AMDDS_NONE 0x0000
+#define AMDDS_DCIPS 0x0001
+#define AMDDS_PS 0x0002
+#define AMDDS_RGBOVR 0x0004
+#define AMDDS_YUVOVR 0x0008
+#define AMDDS_RGBOFF 0x0010
+#define AMDDS_YUVOFF 0x0020
+#define AMDDS_RGBFLP 0x0040
+#define AMDDS_YUVFLP 0x0080
+#define AMDDS_ ALL 0x00FF
+#define AMDDS_DEFAULT 0x00FF
+#define AMDDS_YUV (AMDDS_YUVOFF|AMDDS_YUVOVR|AMDDS_YUVFLP)
+#define AMDDS_RGB (AMDDS_RGBOFF|AMDDS_RGBOVR|AMDDS_RGBFLP)
+#define AMDDS_PRIMARY (AMDDS_DCIPS|AMDDS_PS)
+#define BIT_MASKS_MATCH(pbmi1,pbmi2) ((pbmi1)->dwBitMasks[0] == (pbmi2)->dwBitMasks[0] && (pbmi1)->dwBitMasks[1] == (pbmi2)->dwBitMasks[1] && (pbmi1)->dwBitMasks[2] == (pbmi2)->dwBitMasks[2])
+#define PALETTISED(pbmi) ((pbmi)->bmiHeader.biBitCount <= 8)
+#define PALETTE_ENTRIES(pbmi) (1 << (pbmi)->bmiHeader.biBitCount)
+#define RESET_MASKS(pbmi) (ZeroMemory((PVOID)(pbmi)->dwBitFields,3*sizeof(DWORD)))
+#define RESET_PALETTE(pbmi) (ZeroMemory((PVOID)(pbmi)->bmiColors,256*sizeof(RGBQUAD)));
+#define SIZE_EGA_PALETTE (16*sizeof(RGBQUAD))
+#define SIZE_MASKS (3*sizeof(DWORD))
+#define SIZE_PALETTE (256*sizeof(RGBQUAD))
+typedef enum {
+ AM_PROPERTY_FRAMESTEP_STEP = 1,
+ AM_PROPERTY_FRAMESTEP_CANCEL = 2,
+ AM_PROPERTY_FRAMESTEP_CANSTEP = 3,
+ AM_PROPERTY_FRAMESTEP_CANSTEPMULTIPLE = 4
+} AM_PROPERTY_FRAMESTEP;
+typedef struct tag_TRUECOLORINFO {
+ DWORD dwBitMasks[3];
+ RGBQUAD bmiColors[256];
+} TRUECOLORINFO;
+typedef struct tagVIDEOINFOHEADER {
+ RECT rcSource;
+ RECT rcTarget;
+ DWORD dwBitRate;
+ DWORD dwBitErrorRate;
+ REFERENCE_TIME AvgTimePerFrame;
+ BITMAPINFOHEADER bmiHeader;
+} VIDEOINFOHEADER;
+typedef struct tagVIDEOINFO {
+ RECT rcSource,
+ RECT rcTarget,
+ DWORD dwBitRate,
+ DWORD dwBitErrorRate,
+ REFERENCE_TIME AvgTimePerFrame;
+ BITMAPINFOHEADER bmiHeader;
+ union {
+ RGBQUAD bmiColors[256];
+ DWORD dwBitMasks[3];
+ TRUECOLORINFO TrueColorInfo;
+ };
+} VIDEOINFO;
+typedef struct tagMPEG1VIDEOINFO {
+ VIDEOINFOHEADER hdr;
+ DWORD dwStartTimeCode;
+ DWORD cbSequenceHeader;
+ BYTE bSequenceHeader[1];
+} MPEG1VIDEOINFO;
+typedef struct tagAnalogVideoInfo {
+ RECT rcSource;
+ RECT rcTarget;
+ DWORD dwActiveWidth;
+ DWORD dwActiveHeight;
+ REFERENCE_TIME AvgTimePerFrame;
+} ANALOGVIDEOINFO;
+typedef struct _AM_FRAMESTEP_STEP {
+ DWORD dwFramesToStep;
+} AM_FRAMESTEP_STEP;
+#define INTERFACE IDirectDrawVideo
+DECLARE_INTERFACE_(IDirectDrawVideo, IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,LPVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(CanUseOverlayStretch)(THIS_ long*) PURE;
+ STDMETHOD(CanUseScanLine)(THIS_ long*) PURE;
+ STDMETHOD(GetCaps)(THIS_ DDCAPS*) PURE;
+ STDMETHOD(GetDirectDraw)(THIS_ LPDIRECTDRAW*) PURE;
+ STDMETHOD(GetEmulatedCaps)(THIS_ DDCAPS*) PURE;
+ STDMETHOD(GetFourCCCodes)(THIS_ DWORD*,DWORD*) PURE;
+ STDMETHOD(GetSurfaceDesc)(THIS_ DDSURFACEDESC*) PURE;
+ STDMETHOD(GetSurfaceType)(THIS_ DWORD*) PURE;
+ STDMETHOD(GetSwitches)(THIS_ DWORD*) PURE;
+ STDMETHOD(SetDefault)(THIS) PURE;
+ STDMETHOD(SetDirectDraw)(THIS_ LPDIRECTDRAW) PURE;
+ STDMETHOD(SetSwitches)(THIS_ DWORD) PURE;
+ STDMETHOD(UseOverlayStretch)(THIS_ long) PURE;
+ STDMETHOD(UseScanLine)(THIS_ long) PURE;
+ STDMETHOD(UseWhenFullScreen)(THIS_ long) PURE;
+ STDMETHOD(WillUseFullScreen)(THIS_ long*) PURE;
+};
+#undef INTERFACE
+#define INTERFACE IQualProp
+DECLARE_INTERFACE_(IQualProp, IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,LPVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(get_AvgFrameRate)(THIS_ int*) PURE;
+ STDMETHOD(get_AvgSyncOffset)(THIS_ int*) PURE;
+ STDMETHOD(get_DevSyncOffset)(THIS_ int*) PURE;
+ STDMETHOD(get_FramesDrawn)(THIS_ int*) PURE;
+ STDMETHOD(get_FramesDroppedInRenderer)(THIS_ int*) PURE;
+ STDMETHOD(get_Jitter)(THIS_ int*) PURE;
+};
+#undef INTERFACE
+#define INTERFACE IFullScreenVideo
+DECLARE_INTERFACE_(IFullScreenVideo, IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,LPVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(CountModes)(THIS_ long*) PURE;
+ STDMETHOD(GetCaption)(THIS_ BSTR*) PURE;
+ STDMETHOD(GetClipFactor)(THIS_ long*) PURE;
+ STDMETHOD(GetCurrentMode)(THIS_ long*) PURE;
+ STDMETHOD(GetMessageDrain)(THIS_ HWND*) PURE;
+ STDMETHOD(GetModeInfo)(THIS_ long,long*,long*,long*) PURE;
+ STDMETHOD(GetMonitor)(THIS_ long*) PURE;
+ STDMETHOD(HideOnDeactivate)(THIS_ long) PURE;
+ STDMETHOD(IsHideOnDeactivate)(THIS) PURE;
+ STDMETHOD(IsModeAvailable)(THIS_ long) PURE;
+ STDMETHOD(IsModeEnabled)(THIS_ long) PURE;
+ STDMETHOD(SetCaption)(THIS_ BSTR) PURE;
+ STDMETHOD(SetClipFactor)(THIS_ long) PURE;
+ STDMETHOD(SetDefault)(THIS) PURE;
+ STDMETHOD(SetEnabled)(THIS_ long,long) PURE;
+ STDMETHOD(SetMessageDrain)(THIS_ HWND) PURE;
+ STDMETHOD(SetMonitor)(THIS_ long) PURE;
+};
+#undef INTERFACE
+#define INTERFACE IFullScreenVideoEx
+DECLARE_INTERFACE_(IFullScreenVideoEx, IFullScreenVideo)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID, LPVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(CountModes)(THIS_ long*) PURE;
+ STDMETHOD(GetAcceleratorTable)(THIS_ HWND*,HACCEL*) PURE;
+ STDMETHOD(GetCaption)(THIS_ BSTR*) PURE;
+ STDMETHOD(GetClipFactor)(THIS_ long*) PURE;
+ STDMETHOD(GetCurrentMode)(THIS_ long*) PURE;
+ STDMETHOD(GetMessageDrain)(THIS_ HWND*) PURE;
+ STDMETHOD(GetModeInfo)(THIS_ long,long*,long*,long*) PURE;
+ STDMETHOD(GetMonitor)(THIS_ long*) PURE;
+ STDMETHOD(HideOnDeactivate)(THIS_ long) PURE;
+ STDMETHOD(IsHideOnDeactivate)(THIS) PURE;
+ STDMETHOD(IsKeepPixelAspectRatio)(THIS_ long*) PURE;
+ STDMETHOD(IsModeAvailable)(THIS_ long) PURE;
+ STDMETHOD(IsModeEnabled)(THIS_ long) PURE;
+ STDMETHOD(KeepPixelAspectRatio)(THIS_ long) PURE;
+ STDMETHOD(SetAcceleratorTable)(THIS_ HWND,HACCEL) PURE;
+ STDMETHOD(SetCaption)(THIS_ BSTR) PURE;
+ STDMETHOD(SetClipFactor)(THIS_ long) PURE;
+ STDMETHOD(SetDefault)(THIS) PURE;
+ STDMETHOD(SetEnabled)(THIS_ long,long) PURE;
+ STDMETHOD(SetMessageDrain)(THIS_ HWND) PURE;
+ STDMETHOD(SetMonitor)(THIS_ long) PURE;
+};
+#undef INTERFACE
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/audevcod.h b/tcc/include/winapi/audevcod.h
new file mode 100644
index 0000000..8d741e0
--- /dev/null
+++ b/tcc/include/winapi/audevcod.h
@@ -0,0 +1,31 @@
+#ifndef _AUDEVCOD_H
+#define _AUDEVCOD_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum _tagSND_DEVICE_ERROR {
+ SNDDEV_ERROR_Open = 1,
+ SNDDEV_ERROR_Close = 2,
+ SNDDEV_ERROR_GetCaps = 3,
+ SNDDEV_ERROR_PrepareHeader = 4,
+ SNDDEV_ERROR_UnprepareHeader = 5,
+ SNDDEV_ERROR_Reset = 6,
+ SNDDEV_ERROR_Restart = 7,
+ SNDDEV_ERROR_GetPosition = 8,
+ SNDDEV_ERROR_Write = 9,
+ SNDDEV_ERROR_Pause = 10,
+ SNDDEV_ERROR_Stop = 11,
+ SNDDEV_ERROR_Start = 12,
+ SNDDEV_ERROR_AddBuffer = 13,
+ SNDDEV_ERROR_Query = 14
+} SNDDEV_ERR;
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/aviriff.h b/tcc/include/winapi/aviriff.h
new file mode 100644
index 0000000..306aa05
--- /dev/null
+++ b/tcc/include/winapi/aviriff.h
@@ -0,0 +1,87 @@
+#ifndef _AVIRIFF_H
+#define _AVIRIFF_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifndef _MMSYSTEM_H
+#include <mmsystem.h>
+#endif
+#ifndef _WINGDI_H
+#include <wingdi.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--- DirectShow Reference - DirectShow Structures */
+typedef struct _avimainheader {
+ FOURCC fcc;
+ DWORD cb;
+ DWORD dwMicroSecPerFrame;
+ DWORD dwMaxBytesPerSec;
+ DWORD dwPaddingGranularity;
+ DWORD dwFlags;
+ DWORD dwTotalFrames;
+ DWORD dwInitialFrames;
+ DWORD dwStreams;
+ DWORD dwSuggestedBufferSize;
+ DWORD dwWidth;
+ DWORD dwHeight;
+ DWORD dwReserved[4];
+} AVIMAINHEADER;
+#define AVIF_COPYRIGHTED 0x00020000
+#define AVIF_HASINDEX 0x00000010
+#define AVIF_ISINTERLEAVED 0x00000100
+#define AVIF_MUSTUSEINDEX 0x00000020
+#define AVIF_WASCAPTUREFILE 0x00010000
+typedef struct _avioldindex {
+ FOURCC fcc;
+ DWORD cb;
+ struct _avioldindex_entry {
+ DWORD dwChunkId;
+ DWORD dwFlags;
+ DWORD dwOffset;
+ DWORD dwSize;
+ } aIndex[];
+} AVIOLDINDEX;
+#define AVIIF_LIST 0x00000001
+#define AVIIF_KEYFRAME 0x00000010
+#define AVIIF_NO_TIME 0x00000100
+typedef struct {
+ BYTE bFirstEntry;
+ BYTE bNumEntries;
+ WORD wFlags;
+ PALETTEENTRY peNew[];
+} AVIPALCHANGE;
+typedef struct _avistreamheader {
+ FOURCC fcc;
+ DWORD cb;
+ FOURCC fccType;
+ FOURCC fccHandler;
+ DWORD dwFlags;
+ WORD wPriority;
+ WORD wLanguage;
+ DWORD dwInitialFrames;
+ DWORD dwScale;
+ DWORD dwRate;
+ DWORD dwStart;
+ DWORD dwLength;
+ DWORD dwSuggestedBufferSize;
+ DWORD dwQuality;
+ DWORD dwSampleSize;
+ struct {
+ short int left;
+ short int top;
+ short int right;
+ short int bottom;
+ } rcFrame;
+} AVISTREAMHEADER;
+#define AVISF_DISABLED 0x00000001
+#define AVISF_VIDEO_PALCHANGES 0x00010000
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/aygshell.h b/tcc/include/winapi/aygshell.h
new file mode 100755
index 0000000..624ad29
--- /dev/null
+++ b/tcc/include/winapi/aygshell.h
@@ -0,0 +1,49 @@
+#ifndef _AYGSHELL_H
+#define _AYGSHELL_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#if _WIN32_WCE >= 400
+
+#include <windef.h> /* shellapi needs this */
+#include <basetyps.h>
+#include <shellapi.h> /* for WINSHELLAPI */
+
+typedef struct tagSHMENUBARINFO {
+ DWORD cbSize;
+ HWND hwndParent;
+ DWORD dwFlags;
+ UINT nToolBarId;
+ HINSTANCE hInstRes;
+ int nBmpId;
+ int cBmpImages;
+ HWND hwndMB;
+ COLORREF clrBk;
+} SHMENUBARINFO, *PSHMENUBARINFO;
+
+typedef struct tagSHACTIVATEINFO {
+ DWORD cbSize;
+ HWND hwndLastFocus;
+ UINT fSipUp :1;
+ UINT fSipOnDeactivation :1;
+ UINT fActive :1;
+ UINT fReserved :29;
+} SHACTIVATEINFO, *PSHACTIVATEINFO;
+
+WINSHELLAPI BOOL WINAPI SHCreateMenuBar(SHMENUBARINFO*);
+WINSHELLAPI HWND WINAPI SHFindMenuBar(HWND);
+WINSHELLAPI HRESULT WINAPI SHCreateNewItem(HWND,REFCLSID);
+WINSHELLAPI BOOL WINAPI SHFullScreen(HWND,DWORD);
+WINSHELLAPI BOOL WINAPI SHSipInfo(UINT,UINT,PVOID,UINT);
+/* next exported by ordinal only: @84 */
+WINSHELLAPI BOOL WINAPI SHHandleWMActivate(HWND,WPARAM,LPARAM,SHACTIVATEINFO*,DWORD);
+/* next exported by ordinal only: @83 */
+WINSHELLAPI BOOL WINAPI SHHandleWMSettingChange(HWND,WPARAM,LPARAM,SHACTIVATEINFO*);
+
+/* The following are not in device ROMs. */
+extern BOOL SHInvokeContextMenuCommand(HWND,UINT,HANDLE);
+
+#endif /* _WIN32_WCE >= 400 */
+
+#endif
diff --git a/tcc/include/winapi/basetsd.h b/tcc/include/winapi/basetsd.h
new file mode 100644
index 0000000..d9c375d
--- /dev/null
+++ b/tcc/include/winapi/basetsd.h
@@ -0,0 +1,119 @@
+#ifndef _BASETSD_H
+#define _BASETSD_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __GNUC__
+#ifndef __int64
+#define __int64 long long
+#endif
+#endif
+
+#if defined(_WIN64)
+#define __int3264 __int64
+#define ADDRESS_TAG_BIT 0x40000000000UI64
+#else /* !_WIN64 */
+#define __int3264 __int32
+#define ADDRESS_TAG_BIT 0x80000000UL
+#define HandleToUlong( h ) ((ULONG)(ULONG_PTR)(h) )
+#define HandleToLong( h ) ((LONG)(LONG_PTR) (h) )
+#define LongToHandle( h) ((HANDLE)(LONG_PTR) (h))
+#define PtrToUlong( p ) ((ULONG)(ULONG_PTR) (p) )
+#define PtrToLong( p ) ((LONG)(LONG_PTR) (p) )
+#define PtrToUint( p ) ((UINT)(UINT_PTR) (p) )
+#define PtrToInt( p ) ((INT)(INT_PTR) (p) )
+#define PtrToUshort( p ) ((unsigned short)(ULONG_PTR)(p) )
+#define PtrToShort( p ) ((short)(LONG_PTR)(p) )
+#define IntToPtr( i ) ((VOID*)(INT_PTR)((int)i))
+#define UIntToPtr( ui ) ((VOID*)(UINT_PTR)((unsigned int)ui))
+#define LongToPtr( l ) ((VOID*)(LONG_PTR)((long)l))
+#define ULongToPtr( ul ) ((VOID*)(ULONG_PTR)((unsigned long)ul))
+#endif /* !_WIN64 */
+
+#define UlongToPtr(ul) ULongToPtr(ul)
+#define UintToPtr(ui) UIntToPtr(ui)
+#define MAXUINT_PTR (~((UINT_PTR)0))
+#define MAXINT_PTR ((INT_PTR)(MAXUINT_PTR >> 1))
+#define MININT_PTR (~MAXINT_PTR)
+#define MAXULONG_PTR (~((ULONG_PTR)0))
+#define MAXLONG_PTR ((LONG_PTR)(MAXULONG_PTR >> 1))
+#define MINLONG_PTR (~MAXLONG_PTR)
+#define MAXUHALF_PTR ((UHALF_PTR)~0)
+#define MAXHALF_PTR ((HALF_PTR)(MAXUHALF_PTR >> 1))
+#define MINHALF_PTR (~MAXHALF_PTR)
+
+#ifndef RC_INVOKED
+#ifdef __cplusplus
+extern "C" {
+#endif
+typedef int LONG32, *PLONG32;
+#ifndef XFree86Server
+typedef int INT32, *PINT32;
+#endif /* ndef XFree86Server */
+typedef unsigned int ULONG32, *PULONG32;
+typedef unsigned int DWORD32, *PDWORD32;
+typedef unsigned int UINT32, *PUINT32;
+
+#if defined(_WIN64)
+typedef __int64 INT_PTR, *PINT_PTR;
+typedef unsigned __int64 UINT_PTR, *PUINT_PTR;
+typedef __int64 LONG_PTR, *PLONG_PTR;
+typedef unsigned __int64 ULONG_PTR, *PULONG_PTR;
+typedef unsigned __int64 HANDLE_PTR;
+typedef unsigned int UHALF_PTR, *PUHALF_PTR;
+typedef int HALF_PTR, *PHALF_PTR;
+
+#if 0 /* TODO when WIN64 is here */
+inline unsigned long HandleToUlong(const void* h )
+ { return((unsigned long) h ); }
+inline long HandleToLong( const void* h )
+ { return((long) h ); }
+inline void* LongToHandle( const long h )
+ { return((void*) (INT_PTR) h ); }
+inline unsigned long PtrToUlong( const void* p)
+ { return((unsigned long) p ); }
+inline unsigned int PtrToUint( const void* p )
+ { return((unsigned int) p ); }
+inline unsigned short PtrToUshort( const void* p )
+ { return((unsigned short) p ); }
+inline long PtrToLong( const void* p )
+ { return((long) p ); }
+inline int PtrToInt( const void* p )
+ { return((int) p ); }
+inline short PtrToShort( const void* p )
+ { return((short) p ); }
+inline void* IntToPtr( const int i )
+ { return( (void*)(INT_PTR)i ); }
+inline void* UIntToPtr(const unsigned int ui)
+ { return( (void*)(UINT_PTR)ui ); }
+inline void* LongToPtr( const long l )
+ { return( (void*)(LONG_PTR)l ); }
+inline void* ULongToPtr( const unsigned long ul )
+ { return( (void*)(ULONG_PTR)ul ); }
+#endif /* 0_ */
+
+#else /* !_WIN64 */
+typedef int INT_PTR, *PINT_PTR;
+typedef unsigned int UINT_PTR, *PUINT_PTR;
+typedef long LONG_PTR, *PLONG_PTR;
+typedef unsigned long ULONG_PTR, *PULONG_PTR;
+typedef unsigned short UHALF_PTR, *PUHALF_PTR;
+typedef short HALF_PTR, *PHALF_PTR;
+typedef unsigned long HANDLE_PTR;
+#endif /* !_WIN64 */
+
+typedef ULONG_PTR SIZE_T, *PSIZE_T;
+typedef LONG_PTR SSIZE_T, *PSSIZE_T;
+typedef ULONG_PTR DWORD_PTR, *PDWORD_PTR;
+typedef __int64 LONG64, *PLONG64;
+typedef __int64 INT64, *PINT64;
+typedef unsigned __int64 ULONG64, *PULONG64;
+typedef unsigned __int64 DWORD64, *PDWORD64;
+typedef unsigned __int64 UINT64, *PUINT64;
+#ifdef __cplusplus
+}
+#endif
+#endif /* !RC_INVOKED */
+
+#endif /* _BASETSD_H */
diff --git a/tcc/include/winapi/basetyps.h b/tcc/include/winapi/basetyps.h
new file mode 100644
index 0000000..b644bdf
--- /dev/null
+++ b/tcc/include/winapi/basetyps.h
@@ -0,0 +1,182 @@
+#ifndef _BASETYPS_H
+#define _BASETYPS_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifndef _OBJC_NO_COM_
+# ifdef __cplusplus
+# define EXTERN_C extern "C"
+# else
+# define EXTERN_C extern
+# endif /* __cplusplus */
+# ifndef __int64
+# define __int64 long long
+# endif
+# ifndef __int32
+# define __int32 long
+# endif
+# ifndef __int16
+# define __int16 short
+# endif
+# ifndef __int8
+# define __int8 char
+# endif
+# ifndef __small
+# define __small char
+# endif
+# ifndef __hyper
+# define __hyper long long
+# endif
+# define STDMETHODCALLTYPE __stdcall
+# define STDMETHODVCALLTYPE __cdecl
+# define STDAPICALLTYPE __stdcall
+# define STDAPIVCALLTYPE __cdecl
+# define STDAPI EXTERN_C HRESULT STDAPICALLTYPE
+# define STDAPI_(t) EXTERN_C t STDAPICALLTYPE
+# define STDMETHODIMP HRESULT STDMETHODCALLTYPE
+# define STDMETHODIMP_(t) t STDMETHODCALLTYPE
+# define STDAPIV EXTERN_C HRESULT STDAPIVCALLTYPE
+# define STDAPIV_(t) EXTERN_C t STDAPIVCALLTYPE
+# define STDMETHODIMPV HRESULT STDMETHODVCALLTYPE
+# define STDMETHODIMPV_(t) t STDMETHODVCALLTYPE
+/* Newer MS compilers support the __interface keyword, but
+ that has a specific meaning that is enforced by the compiler.
+ For now, just get 'interface' out of the global namespace
+ for __OBJC__ */
+# define _COM_interface struct
+# ifndef __OBJC__
+# define interface _COM_interface
+# endif
+# if defined(__cplusplus) && !defined(CINTERFACE)
+# define STDMETHOD(m) virtual HRESULT STDMETHODCALLTYPE m
+# define STDMETHOD_(t,m) virtual t STDMETHODCALLTYPE m
+# define PURE =0
+# define THIS_
+# define THIS void
+/*
+ __attribute__((com_interface)) is obsolete in __GNUC__ >= 3
+ g++ vtables are now COM-compatible by default
+*/
+# if defined(__GNUC__) && __GNUC__ < 3 && !defined(NOCOMATTRIBUTE)
+# define DECLARE_INTERFACE(i) _COM_interface __attribute__((com_interface)) i
+# define DECLARE_INTERFACE_(i,b) _COM_interface __attribute__((com_interface)) i : public b
+# else
+# define DECLARE_INTERFACE(i) _COM_interface i
+# define DECLARE_INTERFACE_(i,b) _COM_interface i : public b
+# endif
+# else
+# define STDMETHOD(m) HRESULT(STDMETHODCALLTYPE *m)
+# define STDMETHOD_(t,m) t(STDMETHODCALLTYPE *m)
+# define PURE
+# define THIS_ INTERFACE *,
+# define THIS INTERFACE *
+# ifndef CONST_VTABLE
+# define CONST_VTABLE
+# endif
+# define DECLARE_INTERFACE(i) \
+ typedef _COM_interface i { CONST_VTABLE struct i##Vtbl *lpVtbl; } i; \
+ typedef CONST_VTABLE struct i##Vtbl i##Vtbl; \
+ CONST_VTABLE struct i##Vtbl
+# define DECLARE_INTERFACE_(i,b) DECLARE_INTERFACE(i)
+# endif
+# define BEGIN_INTERFACE
+# define END_INTERFACE
+
+# define FWD_DECL(i) typedef _COM_interface i i
+# if defined(__cplusplus) && !defined(CINTERFACE)
+# define IENUM_THIS(T)
+# define IENUM_THIS_(T)
+# else
+# define IENUM_THIS(T) T*
+# define IENUM_THIS_(T) T*,
+# endif
+# define DECLARE_ENUMERATOR_(I,T) \
+ DECLARE_INTERFACE_(I,IUnknown) \
+ { \
+ STDMETHOD(QueryInterface)(IENUM_THIS_(I) REFIID,PVOID*) PURE; \
+ STDMETHOD_(ULONG,AddRef)(IENUM_THIS(I)) PURE; \
+ STDMETHOD_(ULONG,Release)(IENUM_THIS(I)) PURE; \
+ STDMETHOD(Next)(IENUM_THIS_(I) ULONG,T*,ULONG*) PURE; \
+ STDMETHOD(Skip)(IENUM_THIS_(I) ULONG) PURE; \
+ STDMETHOD(Reset)(IENUM_THIS(I)) PURE; \
+ STDMETHOD(Clone)(IENUM_THIS_(I) I**) PURE; \
+ }
+# define DECLARE_ENUMERATOR(T) DECLARE_ENUMERATOR_(IEnum##T,T)
+
+#endif /* _OBJC_NO_COM_ */
+
+#ifdef _GUID_DEFINED
+# warning _GUID_DEFINED is deprecated, use GUID_DEFINED instead
+#endif
+
+#if ! (defined _GUID_DEFINED || defined GUID_DEFINED) /* also defined in winnt.h */
+#define GUID_DEFINED
+typedef struct _GUID
+{
+ unsigned long Data1;
+ unsigned short Data2;
+ unsigned short Data3;
+ unsigned char Data4[8];
+} GUID,*REFGUID,*LPGUID;
+#endif /* GUID_DEFINED */
+#ifndef UUID_DEFINED
+#define UUID_DEFINED
+typedef GUID UUID;
+#endif /* UUID_DEFINED */
+#ifndef __IID_DEFINED__
+#define __IID_DEFINED__
+typedef GUID IID;
+#endif /* __IID_DEFINED__ */
+typedef GUID CLSID;
+typedef CLSID *LPCLSID;
+typedef IID *LPIID;
+typedef IID *REFIID;
+typedef CLSID *REFCLSID;
+typedef GUID FMTID;
+typedef FMTID *REFFMTID;
+typedef unsigned long error_status_t;
+#define uuid_t UUID
+typedef unsigned long PROPID;
+
+#ifndef _REFGUID_DEFINED
+#if defined (__cplusplus) && !defined (CINTERFACE)
+#define REFGUID const GUID&
+#define REFIID const IID&
+#define REFCLSID const CLSID&
+#define REFFMTID const FMTID&
+#else
+#define REFGUID const GUID* const
+#define REFIID const IID* const
+#define REFCLSID const CLSID* const
+#define REFFMTID const FMTID* const
+#endif
+#define _REFGUID_DEFINED
+#define _REFIID_DEFINED
+#define _REFCLSID_DEFINED
+#define _REFFMTID_DEFINED
+#endif
+#ifndef GUID_SECTION
+#define GUID_SECTION ".text"
+#endif
+/* Explicit naming of .text section for readonly data is only
+ needed for older GGC (pre-2.95).
+ More recent (3.4) GCC puts readonly data in .rdata. */
+#if defined (__GNUC__) && (__GNUC__ <= 2 && __GNUC_MINOR__ < 95)
+#define GUID_SECT __attribute__ ((section (GUID_SECTION)))
+#else
+#define GUID_SECT
+#endif
+#if !defined(INITGUID) || (defined(INITGUID) && defined(__cplusplus))
+#define GUID_EXT EXTERN_C
+#else
+#define GUID_EXT
+#endif
+#ifdef INITGUID
+#define DEFINE_GUID(n,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) GUID_EXT const GUID n GUID_SECT = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}
+#define DEFINE_OLEGUID(n,l,w1,w2) DEFINE_GUID(n,l,w1,w2,0xC0,0,0,0,0,0,0,0x46)
+#else
+#define DEFINE_GUID(n,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) GUID_EXT const GUID n
+#define DEFINE_OLEGUID(n,l,w1,w2) DEFINE_GUID(n,l,w1,w2,0xC0,0,0,0,0,0,0,0x46)
+#endif
+#endif
diff --git a/tcc/include/winapi/bdatypes.h b/tcc/include/winapi/bdatypes.h
new file mode 100644
index 0000000..5456ff6
--- /dev/null
+++ b/tcc/include/winapi/bdatypes.h
@@ -0,0 +1,32 @@
+#ifndef _BDATYPES_H
+#define _BDATYPES_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--- DirectShow Reference - DirectShow Enumerated Types */
+typedef enum {
+ MEDIA_TRANSPORT_PACKET,
+ MEDIA_ELEMENTARY_STREAM,
+ MEDIA_MPEG2_PSI,
+ MEDIA_TRANSPORT_PAYLOAD
+} MEDIA_SAMPLE_CONTENT;
+/*--- DirectShow Reference - DirectShow Structures */
+typedef struct {
+ DWORD dwOffset
+ DWORD dwPacketLength
+ DWORD dwStride
+} MPEG2_TRANSPORT_STRIDE;
+typedef struct {
+ ULONG ulPID;
+ MEDIA_SAMPLE_CONTENT MediaSampleContent ;
+} PID_MAP;
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/cderr.h b/tcc/include/winapi/cderr.h
new file mode 100644
index 0000000..e9a5b05
--- /dev/null
+++ b/tcc/include/winapi/cderr.h
@@ -0,0 +1,44 @@
+#ifndef _CDERR_H
+#define _CDERR_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#define CDERR_DIALOGFAILURE 0xFFFF
+#define CDERR_GENERALCODES 0x0000
+#define CDERR_STRUCTSIZE 0x0001
+#define CDERR_INITIALIZATION 0x0002
+#define CDERR_NOTEMPLATE 0x0003
+#define CDERR_NOHINSTANCE 0x0004
+#define CDERR_LOADSTRFAILURE 0x0005
+#define CDERR_FINDRESFAILURE 0x0006
+#define CDERR_LOADRESFAILURE 0x0007
+#define CDERR_LOCKRESFAILURE 0x0008
+#define CDERR_MEMALLOCFAILURE 0x0009
+#define CDERR_MEMLOCKFAILURE 0x000A
+#define CDERR_NOHOOK 0x000B
+#define CDERR_REGISTERMSGFAIL 0x000C
+#define PDERR_PRINTERCODES 0x1000
+#define PDERR_SETUPFAILURE 0x1001
+#define PDERR_PARSEFAILURE 0x1002
+#define PDERR_RETDEFFAILURE 0x1003
+#define PDERR_LOADDRVFAILURE 0x1004
+#define PDERR_GETDEVMODEFAIL 0x1005
+#define PDERR_INITFAILURE 0x1006
+#define PDERR_NODEVICES 0x1007
+#define PDERR_NODEFAULTPRN 0x1008
+#define PDERR_DNDMMISMATCH 0x1009
+#define PDERR_CREATEICFAILURE 0x100A
+#define PDERR_PRINTERNOTFOUND 0x100B
+#define PDERR_DEFAULTDIFFERENT 0x100C
+#define CFERR_CHOOSEFONTCODES 0x2000
+#define CFERR_NOFONTS 0x2001
+#define CFERR_MAXLESSTHANMIN 0x2002
+#define FNERR_FILENAMECODES 0x3000
+#define FNERR_SUBCLASSFAILURE 0x3001
+#define FNERR_INVALIDFILENAME 0x3002
+#define FNERR_BUFFERTOOSMALL 0x3003
+#define FRERR_FINDREPLACECODES 0x4000
+#define FRERR_BUFFERLENGTHZERO 0x4001
+#define CCERR_CHOOSECOLORCODES 0x5000
+#endif
diff --git a/tcc/include/winapi/cguid.h b/tcc/include/winapi/cguid.h
new file mode 100644
index 0000000..ca64c5e
--- /dev/null
+++ b/tcc/include/winapi/cguid.h
@@ -0,0 +1,83 @@
+#ifndef _CGUID_H
+#define _CGUID_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern const IID GUID_NULL;
+extern const IID IID_IRpcChannel;
+extern const IID IID_IRpcStub;
+extern const IID IID_IStubManager;
+extern const IID IID_IRpcProxy;
+extern const IID IID_IProxyManager;
+extern const IID IID_IPSFactory;
+extern const IID IID_IInternalMoniker;
+extern const IID IID_IDfReserved1;
+extern const IID IID_IDfReserved2;
+extern const IID IID_IDfReserved3;
+extern const CLSID CLSID_StdMarshal;
+extern const IID IID_IStub;
+extern const IID IID_IProxy;
+extern const IID IID_IEnumGeneric;
+extern const IID IID_IEnumHolder;
+extern const IID IID_IEnumCallback;
+extern const IID IID_IOleManager;
+extern const IID IID_IOlePresObj;
+extern const IID IID_IDebug;
+extern const IID IID_IDebugStream;
+extern const CLSID CLSID_PSGenObject;
+extern const CLSID CLSID_PSClientSite;
+extern const CLSID CLSID_PSClassObject;
+extern const CLSID CLSID_PSInPlaceActive;
+extern const CLSID CLSID_PSInPlaceFrame;
+extern const CLSID CLSID_PSDragDrop;
+extern const CLSID CLSID_PSBindCtx;
+extern const CLSID CLSID_PSEnumerators;
+extern const CLSID CLSID_StaticMetafile;
+extern const CLSID CLSID_StaticDib;
+extern const CLSID CID_CDfsVolume;
+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;
+extern const CLSID CLSID_InProcFreeMarshaler;
+extern const CLSID CLSID_Picture_Metafile;
+extern const CLSID CLSID_Picture_EnhMetafile;
+extern const CLSID CLSID_Picture_Dib;
+extern const CLSID CLSID_StdGlobalInterfaceTable;
+extern const GUID GUID_TRISTATE;
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/cmnquery.h b/tcc/include/winapi/cmnquery.h
new file mode 100644
index 0000000..e846a08
--- /dev/null
+++ b/tcc/include/winapi/cmnquery.h
@@ -0,0 +1,81 @@
+/*
+ * cmnquery.h - Active Directory
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may use,
+ * modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+#ifndef _CMNQUERY_H
+#define _CMNQUERY_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--- Active Directory Reference - Active Directory Structures - Active Directory Display Structures */
+#if (_WIN32_WINNT >= 0x0500)
+typedef struct {
+ DWORD cbStruct;
+ DWORD dwFlags;
+ CLSID clsid;
+ HICON hIcon;
+ LPWSTR pszTitle;
+} CQFORM,*LPCQFORM;
+#define CQFF_NOGLOBALPAGES 0x00000001
+#define CQFF_ISOPTIONAL 0x00000002
+typedef struct {
+ DWORD cbStruct;
+ DWORD dwFlags;
+ LPCQPAGEPROC pPageProc;
+ HINSTANCE hInstance;
+ INT idPageName;
+ INT idPageTemplate;
+ DLGPROC pDlgProc;
+ LPARAM lParam;
+} CQPAGE,*LPCQPAGE;
+/*********
+typedef struct {
+ DWORD cbStruct;
+ DWORD dwFlags;
+ CLSID clsidHandler;
+ LPVOID pHandlerParameters;
+ CLSID clsidDefaultForm;
+ IPersistQuery* pPersistQuery;
+ union {
+ void* pFormParameters;
+ IPropertyBag* ppbFormParameters;
+ };
+} OPENQUERYWINDOW,*LPOPENQUERYWINDOW;
+*********/
+#define OQWF_OKCANCEL 0x00000001
+#define OQWF_DEFAULTFORM 0x00000002
+#define OQWF_SINGLESELECT 0x00000004
+#define OQWF_LOADQUERY 0x00000008
+#define OQWF_REMOVESCOPES 0x00000010
+#define OQWF_REMOVEFORMS 0x00000020
+#define OQWF_ISSUEONOPEN 0x00000040
+#define OQWF_SHOWOPTIONAL 0x00000080
+#define OQWF_SAVEQUERYONOK 0x00000200
+#define OQWF_HIDEMENUS 0x00000400
+#define OQWF_HIDESEARCHUI 0x00000800
+#define OQWF_PARAMISPROPERTYBAG 0x80000000
+/*--- Active Directory Reference - Active Directory Functions - Active Directory Display Functions */
+typedef HRESULT (CALLBACK* CQAddFormsProc)(LPARAM,LPCQFORM);
+typedef HRESULT (CALLBACK* CQAddPagesProc)(LPARAM,REFCLSID,LPCQPAGE);
+typedef HRESULT (CALLBACK* CQPageProc)(LPCQPAGE,HWND,UINT,WPARAM,LPARAM);
+#endif /* (_WIN32_WINNT >= 0x0500) */
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/comcat.h b/tcc/include/winapi/comcat.h
new file mode 100644
index 0000000..b5d982b
--- /dev/null
+++ b/tcc/include/winapi/comcat.h
@@ -0,0 +1,175 @@
+#ifndef _COMCAT_H
+#define _COMCAT_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifndef COM_NO_WINDOWS_H
+#include <windows.h>
+#include <ole2.h>
+#endif
+
+#ifndef _RC_INVOKED
+
+#ifdef __cplusplus
+extern "C"{
+#endif
+
+EXTERN_C const IID IID_IEnumGUID;
+typedef _COM_interface IEnumGUID *LPENUMGUID;
+
+#define INTERFACE IEnumGUID
+DECLARE_INTERFACE_(IEnumGUID,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(Next)(THIS_ ULONG,GUID*,ULONG*) PURE;
+ STDMETHOD(Skip)(THIS_ ULONG) PURE;
+ STDMETHOD(Reset)(THIS) PURE;
+ STDMETHOD(Clone)(THIS_ LPENUMGUID*) PURE;
+};
+#undef INTERFACE
+#if (!defined (__cplusplus) || defined (CINTERFACE)) \
+ && defined (COBJMACROS)
+#define IEnumGUID_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IEnumGUID_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IEnumGUID_Release(p) (p)->lpVtbl->Release(p)
+#define IEnumGUID_Next(p,a,b,c) (p)->lpVtbl->Next(p,a,b,c)
+#define IEnumGUID_Skip(p,a) (p)->lpVtbl->Skip(p,a)
+#define IEnumGUID_Reset(p) (p)->lpVtbl->Reset(p)
+#define IEnumGUID_Clone(p,a) (p)->lpVtbl->Clone(p,a)
+#endif
+
+typedef GUID CATID;
+typedef REFGUID REFCATID;
+#define CATID_NULL GUID_NULL
+#define IsEqualCATID(a, b) IsEqualGUID(a, b)
+
+typedef struct tagCATEGORYINFO {
+ CATID catid; /* category identifier for component */
+ LCID lcid; /* locale identifier */
+ OLECHAR szDescription[128]; /* description of the category */
+} CATEGORYINFO, *LPCATEGORYINFO;
+
+EXTERN_C const CATID CATID_Insertable;
+EXTERN_C const CATID CATID_Control;
+EXTERN_C const CATID CATID_Programmable;
+EXTERN_C const CATID CATID_IsShortcut;
+EXTERN_C const CATID CATID_NeverShowExt;
+EXTERN_C const CATID CATID_DocObject;
+EXTERN_C const CATID CATID_Printable;
+EXTERN_C const CATID CATID_RequiresDataPathHost;
+EXTERN_C const CATID CATID_PersistsToMoniker;
+EXTERN_C const CATID CATID_PersistsToStorage;
+EXTERN_C const CATID CATID_PersistsToStreamInit;
+EXTERN_C const CATID CATID_PersistsToStream;
+EXTERN_C const CATID CATID_PersistsToMemory;
+EXTERN_C const CATID CATID_PersistsToFile;
+EXTERN_C const CATID CATID_PersistsToPropertyBag;
+EXTERN_C const CATID CATID_InternetAware;
+EXTERN_C const CATID CATID_DesignTimeUIActivatableControl;
+
+#define IEnumCATID IEnumGUID
+#define LPENUMCATID LPENUMGUID
+#define IID_IEnumCATID IID_IEnumGUID
+
+#define IEnumCLSID IEnumGUID
+#define LPENUMCLSID LPENUMGUID
+#define IID_IEnumCLSID IID_IEnumGUID
+
+EXTERN_C const IID IID_ICatInformation;
+typedef _COM_interface ICatInformation *LPCATINFORMATION;
+
+EXTERN_C const IID IID_ICatRegister;
+typedef _COM_interface ICatRegister *LPCATREGISTER;
+
+EXTERN_C const IID IID_IEnumCATEGORYINFO;
+typedef _COM_interface IEnumCATEGORYINFO *LPENUMCATEGORYINFO;
+
+EXTERN_C const CLSID CLSID_StdComponentCategoriesMgr;
+
+#define INTERFACE ICatInformation
+DECLARE_INTERFACE_(ICatInformation,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(EnumCategories)(THIS_ LCID,LPENUMCATEGORYINFO*) PURE;
+ STDMETHOD(GetCategoryDesc)(THIS_ REFCATID,LCID,PWCHAR*) PURE;
+ STDMETHOD(EnumClassesOfCategories)(THIS_ ULONG,CATID*,ULONG,CATID*,LPENUMCLSID*) PURE;
+ STDMETHOD(IsClassOfCategories)(THIS_ REFCLSID,ULONG,CATID*,ULONG,CATID*) PURE;
+ STDMETHOD(EnumImplCategoriesOfClass)(THIS_ REFCLSID,LPENUMCATID*) PURE;
+ STDMETHOD(EnumReqCategoriesOfClass)(THIS_ REFCLSID,LPENUMCATID*) PURE;
+};
+#undef INTERFACE
+#if (!defined (__cplusplus) || defined (CINTERFACE)) \
+ && defined (COBJMACROS)
+#define ICatInformation_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define ICatInformation_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define ICatInformation_Release(p) (p)->lpVtbl->Release(p)
+#define ICatInformation_EnumCategories(p,a,b) (p)->lpVtbl->EnumCategories(p,a,b)
+#define ICatInformation_GetCategoryDesc(p,a,b,c) (p)->lpVtbl->GetCategoryDesc(p,a,b,c)
+#define ICatInformation_EnumClassesOfCategories(p,a,b,c,d,e) (p)->lpVtbl->EnumClassesOfCategories(p,a,b,c,d,e)
+#define ICatInformation_IsClassOfCategories(p,a,b,c,d,e) (p)->lpVtbl->IsClassOfCategories(p,a,b,c,d,e)
+#define ICatInformation_EnumImplCategoriesOfClass(p,a,b) (p)->lpVtbl->EnumImplCategoriesOfClass(p,a,b)
+#define ICatInformation_EnumReqCategoriesOfClass(p,a,b) (p)->lpVtbl->EnumReqCategoriesOfClass(p,a,b)
+#endif
+
+#define INTERFACE ICatRegister
+DECLARE_INTERFACE_(ICatRegister,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(RegisterCategories)(THIS_ ULONG,CATEGORYINFO*) PURE;
+ STDMETHOD(UnRegisterCategories)(THIS_ ULONG,CATID*) PURE;
+ STDMETHOD(RegisterClassImplCategories)(THIS_ REFCLSID,ULONG,CATID*) PURE;
+ STDMETHOD(UnRegisterClassImplCategories)(THIS_ REFCLSID,ULONG,CATID*) PURE;
+ STDMETHOD(RegisterClassReqCategories)(THIS_ REFCLSID,ULONG,CATID*) PURE;
+ STDMETHOD(UnRegisterClassReqCategories)(THIS_ REFCLSID,ULONG,CATID*) PURE;
+};
+#undef INTERFACE
+#if (!defined (__cplusplus) || defined (CINTERFACE)) \
+ && defined (COBJMACROS)
+#define ICatRegister_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define ICatRegister_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define ICatRegister_Release(p) (p)->lpVtbl->Release(p)
+#define ICatRegister_RegisterCategories(p,a,b) (p)->lpVtbl->RegisterCategories(p,a,b)
+#define ICatRegister_UnRegisterCategories(p,a,b) (p)->lpVtbl->UnRegisterCategories(p,a,b)
+#define ICatRegister_RegisterClassImplCategories(p,a,b,c) (p)->lpVtbl->RegisterClassImplCategories(p,a,b,c)
+#define ICatRegister_UnRegisterClassImplCategories(p,a,b,c) (p)->lpVtbl->UnRegisterClassImplCategories(p,a,b,c)
+#define ICatRegister_RegisterClassReqCategories(p,a,b,c) (p)->lpVtbl->RegisterClassReqCategories(p,a,b,c)
+#define ICatRegister_UnRegisterClassReqCategories(p,a,b,c) (p)->lpVtbl->UnRegisterClassReqCategories(p,a,b,c)
+#endif
+
+EXTERN_C const IID IID_IEnumCATEGORYINFO;
+#define INTERFACE IEnumCATEGORYINFO
+DECLARE_INTERFACE_(IEnumCATEGORYINFO,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(Next)(THIS_ ULONG,CATEGORYINFO*,ULONG*) PURE;
+ STDMETHOD(Skip)(THIS_ ULONG) PURE;
+ STDMETHOD(Reset)(THIS) PURE;
+ STDMETHOD(Clone)(THIS_ LPENUMCATEGORYINFO*) PURE;
+};
+#undef INTERFACE
+#if (!defined (__cplusplus) || defined (CINTERFACE)) \
+ && defined (COBJMACROS)
+#define IEnumCATEGORYINFO_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IEnumCATEGORYINFO_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IEnumCATEGORYINFO_Release(p) (p)->lpVtbl->Release(p)
+#define IEnumCATEGORYINFO_Next(p,a,b,c) (p)->lpVtbl->Next(p,a,b,c)
+#define IEnumCATEGORYINFO_Skip(p,a) (p)->lpVtbl->Skip(p,a)
+#define IEnumCATEGORYINFO_Reset(p) (p)->lpVtbl->Reset(p)
+#define IEnumCATEGORYINFO_Clone(p,a) (p)->lpVtbl->Clone(p,a)
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _RC_INVOKED */
+#endif
diff --git a/tcc/include/winapi/commctrl.h b/tcc/include/winapi/commctrl.h
new file mode 100644
index 0000000..8456d3c
--- /dev/null
+++ b/tcc/include/winapi/commctrl.h
@@ -0,0 +1,3756 @@
+#ifndef _COMMCTRL_H
+#define _COMMCTRL_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#include <prsht.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+#ifndef _WIN32_IE
+/* define _WIN32_IE if you really want it */
+#if 0
+#define _WIN32_IE 0x0300
+#endif
+#endif
+
+#ifndef COMMCTRLAPI
+#ifdef __W32API_USE_DLLIMPORT__
+#define COMMCTRLAPI DECLSPEC_IMPORT
+#else
+#define COMMCTRLAPI
+#endif
+#endif
+
+
+#ifndef SNDMSG
+#ifdef __cplusplus
+#define SNDMSG ::SendMessage
+#else
+#define SNDMSG SendMessage
+#endif
+#endif /* ifndef SNDMSG */
+
+#define DRAGLISTMSGSTRING TEXT("commctrl_DragListMsg")
+#define HOTKEY_CLASSA "msctls_hotkey32"
+#define HOTKEY_CLASSW L"msctls_hotkey32"
+#define PROGRESS_CLASSA "msctls_progress32"
+#define PROGRESS_CLASSW L"msctls_progress32"
+#define STATUSCLASSNAMEA "msctls_statusbar32"
+#define STATUSCLASSNAMEW L"msctls_statusbar32"
+#define TOOLBARCLASSNAMEA "ToolbarWindow32"
+#define TOOLBARCLASSNAMEW L"ToolbarWindow32"
+#define TOOLTIPS_CLASSA "tooltips_class32"
+#define TOOLTIPS_CLASSW L"tooltips_class32"
+#define TRACKBAR_CLASSA "msctls_trackbar32"
+#define TRACKBAR_CLASSW L"msctls_trackbar32"
+#define UPDOWN_CLASSA "msctls_updown32"
+#define UPDOWN_CLASSW L"msctls_updown32"
+#define ANIMATE_CLASSA "SysAnimate32"
+#define ANIMATE_CLASSW L"SysAnimate32"
+#define DATETIMEPICK_CLASSW L"SysDateTimePick32"
+#define DATETIMEPICK_CLASSA "SysDateTimePick32"
+#define MONTHCAL_CLASSW L"SysMonthCal32"
+#define MONTHCAL_CLASSA "SysMonthCal32"
+#define REBARCLASSNAMEW L"ReBarWindow32"
+#define REBARCLASSNAMEA "ReBarWindow32"
+#define WC_COMBOBOXEXW L"ComboBoxEx32"
+#define WC_COMBOBOXEXA "ComboBoxEx32"
+#define WC_IPADDRESSW L"SysIPAddress32"
+#define WC_IPADDRESSA "SysIPAddress32"
+#define WC_LISTVIEWA "SysListView32"
+#define WC_LISTVIEWW L"SysListView32"
+#define WC_TABCONTROLA "SysTabControl32"
+#define WC_TABCONTROLW L"SysTabControl32"
+#define WC_TREEVIEWA "SysTreeView32"
+#define WC_TREEVIEWW L"SysTreeView32"
+#define WC_HEADERA "SysHeader32"
+#define WC_HEADERW L"SysHeader32"
+#define WC_PAGESCROLLERW L"SysPager"
+#define WC_PAGESCROLLERA "SysPager"
+#define WC_NATIVEFONTCTLW L"NativeFontCtl"
+#define WC_NATIVEFONTCTLA "NativeFontCtl"
+#define WC_BUTTONA "Button"
+#define WC_BUTTONW L"Button"
+#define WC_STATICA "Static"
+#define WC_STATICW L"Static"
+#define WC_EDITA "Edit"
+#define WC_EDITW L"Edit"
+#define WC_LISTBOXA "ListBox"
+#define WC_LISTBOXW L"ListBox"
+#define WC_COMBOBOXA "ComboBox"
+#define WC_COMBOBOXW L"ComboBox"
+#define WC_SCROLLBARA "ScrollBar"
+#define WC_SCROLLBARW L"ScrollBar"
+#define WC_LINKA "SysLink"
+#define WC_LINKW L"SysLink"
+
+#ifdef UNICODE
+#define HOTKEY_CLASS HOTKEY_CLASSW
+#define PROGRESS_CLASS PROGRESS_CLASSW
+#define STATUSCLASSNAME STATUSCLASSNAMEW
+#define TOOLBARCLASSNAME TOOLBARCLASSNAMEW
+#define TOOLTIPS_CLASS TOOLTIPS_CLASSW
+#define TRACKBAR_CLASS TRACKBAR_CLASSW
+#define UPDOWN_CLASS UPDOWN_CLASSW
+#define ANIMATE_CLASS ANIMATE_CLASSW
+#define DATETIMEPICK_CLASS DATETIMEPICK_CLASSW
+#define MONTHCAL_CLASS MONTHCAL_CLASSW
+#define REBARCLASSNAME REBARCLASSNAMEW
+#define WC_COMBOBOXEX WC_COMBOBOXEXW
+#define WC_HEADER WC_HEADERW
+#define WC_IPADDRESS WC_IPADDRESSW
+#define WC_LISTVIEW WC_LISTVIEWW
+#define WC_TABCONTROL WC_TABCONTROLW
+#define WC_TREEVIEW WC_TREEVIEWW
+#define WC_PAGESCROLLER WC_PAGESCROLLERW
+#define WC_NATIVEFONTCTL WC_NATIVEFONTCTLW
+#define WC_BUTTON WC_BUTTONW
+#define WC_STATIC WC_STATICW
+#define WC_EDIT WC_EDITW
+#define WC_LISTBOX WC_LISTBOXW
+#define WC_COMBOBOX WC_COMBOBOXW
+#define WC_SCROLLBAR WC_SCROLLBARW
+#define WC_LINK WC_LINKW
+#else
+#define ANIMATE_CLASS ANIMATE_CLASSA
+#define HOTKEY_CLASS HOTKEY_CLASSA
+#define PROGRESS_CLASS PROGRESS_CLASSA
+#define STATUSCLASSNAME STATUSCLASSNAMEA
+#define TOOLBARCLASSNAME TOOLBARCLASSNAMEA
+#define TOOLTIPS_CLASS TOOLTIPS_CLASSA
+#define TRACKBAR_CLASS TRACKBAR_CLASSA
+#define UPDOWN_CLASS UPDOWN_CLASSA
+#define DATETIMEPICK_CLASS DATETIMEPICK_CLASSA
+#define MONTHCAL_CLASS MONTHCAL_CLASSA
+#define REBARCLASSNAME REBARCLASSNAMEA
+#define WC_COMBOBOXEX WC_COMBOBOXEXA
+#define WC_HEADER WC_HEADERA
+#define WC_IPADDRESS WC_IPADDRESSA
+#define WC_LISTVIEW WC_LISTVIEWA
+#define WC_TABCONTROL WC_TABCONTROLA
+#define WC_TREEVIEW WC_TREEVIEWA
+#define WC_PAGESCROLLER WC_PAGESCROLLERA
+#define WC_NATIVEFONTCTL WC_NATIVEFONTCTLA
+#define WC_BUTTON WC_BUTTONA
+#define WC_STATIC WC_STATICA
+#define WC_EDIT WC_EDITA
+#define WC_LISTBOX WC_LISTBOXA
+#define WC_COMBOBOX WC_COMBOBOXA
+#define WC_SCROLLBAR WC_SCROLLBARA
+#define WC_LINK WC_LINKA
+#endif
+
+#if (_WIN32_IE >= 0x0500)
+#if (_WIN32_WINNT >= 0x0501)
+#define COMCTL32_VERSION 6
+#else
+#define COMCTL32_VERSION 5
+#endif
+#endif
+
+#define LVM_FIRST 0x1000
+#define TV_FIRST 0x1100
+#define HDM_FIRST 0x1200
+#define ACM_OPENA (WM_USER+100)
+#define ACM_PLAY (WM_USER+101)
+#define ACM_STOP (WM_USER+102)
+#define ACM_OPENW (WM_USER+103)
+#define ACN_START 1
+#define ACN_STOP 2
+#define CBEIF_TEXT 0x00000001
+#define CBEIF_IMAGE 0x00000002
+#define CBEIF_SELECTEDIMAGE 0x00000004
+#define CBEIF_OVERLAY 0x00000008
+#define CBEIF_INDENT 0x00000010
+#define CBEIF_LPARAM 0x00000020
+#define CBEIF_DI_SETITEM 0x10000000
+#define CBEN_INSERTITEM (CBEN_FIRST - 1)
+#define CBEN_DELETEITEM (CBEN_FIRST - 2)
+#define CBEN_BEGINEDIT (CBEN_FIRST - 4)
+#define CBEN_ENDEDITA (CBEN_FIRST - 5)
+#define CBEN_ENDEDITW (CBEN_FIRST - 6)
+#define CBENF_KILLFOCUS 1
+#define CBENF_RETURN 2
+#define CBENF_ESCAPE 3
+#define CBENF_DROPDOWN 4
+#define CBEMAXSTRLEN 260
+#define DL_BEGINDRAG 1157
+#define DL_CANCELDRAG 1160
+#define DL_DRAGGING 1158
+#define DL_DROPPED 1159
+#define DL_CURSORSET 0
+#define DL_STOPCURSOR 1
+#define DL_COPYCURSOR 2
+#define DL_MOVECURSOR 3
+#define CCS_TOP 1
+#define CCS_NOMOVEY 2
+#define CCS_BOTTOM 3
+#define CCS_NORESIZE 4
+#define CCS_NOPARENTALIGN 8
+#define CCS_ADJUSTABLE 32
+#define CCS_NODIVIDER 64
+#if (_WIN32_IE >= 0x0300)
+#define CCS_VERT 128
+#define CCS_LEFT 129
+#define CCS_NOMOVEX 130
+#define CCS_RIGHT 131
+#endif
+#define ACS_CENTER 0x0001
+#define ACS_TRANSPARENT 0x0002
+#define ACS_AUTOPLAY 0x0004
+#define ACS_TIMER 0x0008
+#define PGS_VERT 0x00000000
+#define PGS_HORZ 0x00000001
+#define PGS_AUTOSCROLL 0x00000002
+#define PGS_DRAGNDROP 0x00000004
+#define CMB_MASKED 2
+#define MINSYSCOMMAND SC_SIZE
+#define SBT_OWNERDRAW 0x1000
+#define SBT_NOBORDERS 256
+#define SBT_POPOUT 512
+#define SBT_RTLREADING 1024
+#define SB_SETTEXTA (WM_USER+1)
+#define SB_SETTEXTW (WM_USER+11)
+#define SB_GETTEXTA (WM_USER+2)
+#define SB_GETTEXTW (WM_USER+13)
+#define SB_GETTEXTLENGTHA (WM_USER+3)
+#define SB_GETTEXTLENGTHW (WM_USER+12)
+#define SB_SETPARTS (WM_USER+4)
+#define SB_GETPARTS (WM_USER+6)
+#define SB_GETBORDERS (WM_USER+7)
+#define SB_SETMINHEIGHT (WM_USER+8)
+#define SB_SIMPLE (WM_USER+9)
+#define SB_GETRECT (WM_USER+10)
+#define MSGF_COMMCTRL_BEGINDRAG 0x4200
+#define MSGF_COMMCTRL_SIZEHEADER 0x4201
+#define MSGF_COMMCTRL_DRAGSELECT 0x4202
+#define MSGF_COMMCTRL_TOOLBARCUST 0x4203
+#define ILC_COLOR 0
+#define ILC_COLOR4 4
+#define ILC_COLOR8 8
+#define ILC_COLOR16 16
+#define ILC_COLOR24 24
+#define ILC_COLOR32 32
+#define ILC_COLORDDB 254
+#define ILC_MASK 1
+#define ILC_PALETTE 2048
+#define ILCF_MOVE 0
+#define ILCF_SWAP 1
+#define ILS_NORMAL 0
+#define ILS_GLOW 1
+#define ILS_SHADOW 2
+#define ILS_SATURATE 4
+#define ILS_ALPHA 8
+#define ILD_BLEND25 2
+#define ILD_BLEND50 4
+#define ILD_SELECTED 4
+#define ILD_BLEND 4
+#define ILD_FOCUS 2
+#define ILD_MASK 16
+#define ILD_NORMAL 0
+#define ILD_TRANSPARENT 1
+#define ILD_IMAGE 0x0020
+#define ILD_ROP 0x0040
+#define ILD_OVERLAYMASK 0x0F00
+#define ILD_PRESERVEALPHA 0x1000
+#define ILD_SCALE 0x2000
+#define ILD_DPISCALE 0x4000
+#define HDS_HORZ 0
+#define HDS_BUTTONS 2
+#define HDS_HIDDEN 8
+#if (_WIN32_IE > 0x0300)
+#define HDS_HOTTRACK 4
+#define HDS_DRAGDROP 0x0040
+#define HDS_FULLDRAG 0x0080
+#endif /* _WIN32_IE > 0x0300 */
+#if (_WIN32_IE >= 0x0500)
+#define HDS_FILTERBAR 0x0100
+#endif /* _WIN32_IE >= 0x0500 */
+#define NM_FIRST 0
+#define NM_LAST ((UINT)-99)
+#define LVN_FIRST ((UINT)-100)
+#define LVN_LAST ((UINT)-199)
+#define HDN_FIRST ((UINT)-300)
+#define HDN_LAST ((UINT)-399)
+#define TVN_FIRST ((UINT)-400)
+#define TVN_LAST ((UINT)-499)
+#define TTN_FIRST ((UINT)-520)
+#define TTN_LAST ((UINT)-549)
+#define TCN_FIRST ((UINT)-550)
+#define TCN_LAST ((UINT)-580)
+#ifndef CDN_FIRST
+#define CDN_FIRST ((UINT)-601) /* also in commdlg.h */
+#define CDN_LAST ((UINT)-699)
+#endif
+#define TBN_FIRST ((UINT)-700)
+#define TBN_LAST ((UINT)-720)
+#define UDN_FIRST ((UINT)-721)
+#define UDN_LAST ((UINT)-740)
+#if (_WIN32_IE >= 0x0300)
+#define RBN_FIRST ((UINT)-831)
+#define RBN_LAST ((UINT)-859)
+#define MCN_FIRST ((UINT)-750)
+#define MCN_LAST ((UINT)-759)
+#define DTN_FIRST ((UINT)-760)
+#define DTN_LAST ((UINT)-799)
+#define CBEN_FIRST ((UINT)-800)
+#define CBEN_LAST ((UINT)-830)
+#endif /* _WIN32_IE */
+#if (_WIN32_IE >= 0x0400)
+#define IPN_FIRST ((UINT)-860)
+#define IPN_LAST ((UINT)-879)
+#define IPN_FIELDCHANGED (IPN_FIRST-0)
+#define SBN_FIRST ((UINT)-880U)
+#define SBN_LAST ((UINT)-899U)
+#define PGN_FIRST ((UINT)-900U)
+#define PGN_LAST ((UINT)-950U)
+#define PGN_SCROLL (PGN_FIRST-1)
+#define PGN_CALCSIZE (PGN_FIRST-2)
+#endif /* _WIN32_IE >= 0x0400 */
+#define HDI_WIDTH 1
+#define HDI_HEIGHT 1
+#define HDI_TEXT 2
+#define HDI_FORMAT 4
+#define HDI_LPARAM 8
+#define HDI_BITMAP 16
+#if (_WIN32_IE >= 0x0300)
+#define HDI_IMAGE 32
+#define HDI_DI_SETITEM 64
+#define HDI_ORDER 128
+#endif
+#define CBES_EX_NOEDITIMAGE 0x00000001
+#define CBES_EX_NOEDITIMAGEINDENT 0x00000002
+#define CBES_EX_PATHWORDBREAKPROC 0x00000004
+#if (_WIN32_IE >= 0x0400)
+#define CBES_EX_NOSIZELIMIT 0x00000008
+#define CBES_EX_CASESENSITIVE 0x00000010
+#define CBEN_GETDISPINFOA (CBEN_FIRST - 0)
+#define CBEN_GETDISPINFOW (CBEN_FIRST - 7)
+#define CBEN_DRAGBEGINA (CBEN_FIRST - 8)
+#define CBEN_DRAGBEGINW (CBEN_FIRST - 9)
+#endif /* _WIN32_IE >= 0x0400 */
+#if (_WIN32_IE >= 0x0500)
+#define HDI_FILTER 256
+#endif
+#define HDF_LEFT 0
+#define HDF_RIGHT 1
+#define HDF_CENTER 2
+#define HDF_JUSTIFYMASK 3
+#define HDF_RTLREADING 4
+#define HDF_OWNERDRAW 0x8000
+#define HDF_STRING 0x4000
+#define HDF_BITMAP 0x2000
+#if (_WIN32_IE >= 0x0300)
+#define HDF_BITMAP_ON_RIGHT 0x1000
+#define HDF_IMAGE 0x0800
+#endif
+#define HDM_GETITEMCOUNT HDM_FIRST
+#define HDM_INSERTITEMA (HDM_FIRST+1)
+#define HDM_INSERTITEMW (HDM_FIRST+10)
+#define HDM_DELETEITEM (HDM_FIRST+2)
+#define HDM_GETITEMA (HDM_FIRST+3)
+#define HDM_GETITEMW (HDM_FIRST+11)
+#define HDM_SETITEMA (HDM_FIRST+4)
+#define HDM_SETITEMW (HDM_FIRST+12)
+#define HDM_LAYOUT (HDM_FIRST+5)
+#if (_WIN32_IE >= 0x0300)
+#define HDM_GETITEMRECT (HDM_FIRST+7)
+#define HDM_SETIMAGELIST (HDM_FIRST+8)
+#define HDM_GETIMAGELIST (HDM_FIRST+9)
+#define HDM_ORDERTOINDEX (HDM_FIRST+15)
+#define HDM_CREATEDRAGIMAGE (HDM_FIRST+16)
+#define HDM_GETORDERARRAY (HDM_FIRST+17)
+#define HDM_SETORDERARRAY (HDM_FIRST+18)
+#define HDM_SETHOTDIVIDER (HDM_FIRST+19)
+#endif
+#if (_WIN32_IE >= 0x0400)
+#define HDM_GETUNICODEFORMAT CCM_GETUNICODEFORMAT
+#define HDM_SETUNICODEFORMAT CCM_SETUNICODEFORMAT
+#endif
+#define HHT_NOWHERE 1
+#define HHT_ONHEADER 2
+#define HHT_ONDIVIDER 4
+#define HHT_ONDIVOPEN 8
+#define HHT_ABOVE 256
+#define HHT_BELOW 512
+#define HHT_TORIGHT 1024
+#define HHT_TOLEFT 2048
+#define HDM_HITTEST (HDM_FIRST+6)
+#define HDN_ITEMCHANGINGA (HDN_FIRST-0)
+#define HDN_ITEMCHANGINGW (HDN_FIRST-20)
+#define HDN_ITEMCHANGEDA (HDN_FIRST-1)
+#define HDN_ITEMCHANGEDW (HDN_FIRST-21)
+#define HDN_ITEMCLICKA (HDN_FIRST-2)
+#define HDN_ITEMCLICKW (HDN_FIRST-22)
+#define HDN_ITEMDBLCLICKA (HDN_FIRST-3)
+#define HDN_ITEMDBLCLICKW (HDN_FIRST-23)
+#define HDN_DIVIDERDBLCLICKA (HDN_FIRST-5)
+#define HDN_DIVIDERDBLCLICKW (HDN_FIRST-25)
+#define HDN_BEGINTRACKA (HDN_FIRST-6)
+#define HDN_BEGINTRACKW (HDN_FIRST-26)
+#define HDN_ENDTRACKA (HDN_FIRST-7)
+#define HDN_ENDTRACKW (HDN_FIRST-27)
+#define HDN_TRACKA (HDN_FIRST-8)
+#define HDN_TRACKW (HDN_FIRST-28)
+#if _WIN32_IE >= 0x0300
+#define HDN_ENDDRAG (HDN_FIRST-11)
+#define HDN_BEGINDRAG (HDN_FIRST-10)
+#define HDN_GETDISPINFOA (HDN_FIRST-9)
+#define HDN_GETDISPINFOW (HDN_FIRST-29)
+#endif
+#if (_WIN32_IE >= 0x0400)
+#define HICF_OTHER 0x00
+#define HICF_MOUSE 0x01
+#define HICF_ARROWKEYS 0x02
+#define HICF_ACCELERATOR 0x04
+#define HICF_DUPACCEL 0x08
+#define HICF_ENTERING 0x10
+#define HICF_LEAVING 0x20
+#define HICF_RESELECT 0x40
+#define HICF_LMOUSE 0x80
+#define HICF_TOGGLEDROPDOWN 0x100
+#endif /* _WIN32_IE >= 0x0400 */
+#define IPM_CLEARADDRESS (WM_USER+100)
+#define IPM_SETADDRESS (WM_USER+101)
+#define IPM_GETADDRESS (WM_USER+102)
+#define IPM_SETRANGE (WM_USER+103)
+#define IPM_SETFOCUS (WM_USER+104)
+#define IPM_ISBLANK (WM_USER+105)
+#if (_WIN32_IE >= 0x0500)
+#define I_INDENTCALLBACK (-1)
+#define I_IMAGENONE (-2)
+#endif
+#define CMB_MASKED 2
+#define TBSTATE_CHECKED 1
+#define TBSTATE_PRESSED 2
+#define TBSTATE_ENABLED 4
+#define TBSTATE_HIDDEN 8
+#define TBSTATE_INDETERMINATE 16
+#define TBSTATE_WRAP 32
+#if (_WIN32_IE >= 0x0300)
+#define TBSTATE_ELLIPSES 0x40
+#endif
+#if (_WIN32_IE >= 0x0400)
+#define TBSTATE_MARKED 0x0080
+#endif
+#define TBSTYLE_BUTTON 0
+#define TBSTYLE_SEP 1
+#define TBSTYLE_CHECK 2
+#define TBSTYLE_GROUP 4
+#define TBSTYLE_CHECKGROUP (TBSTYLE_GROUP|TBSTYLE_CHECK)
+#if (_WIN32_IE >= 0x0300)
+#define TBSTYLE_DROPDOWN 8
+#endif
+#if (_WIN32_IE >= 0x0400)
+#define TBSTYLE_AUTOSIZE 16
+#define TBSTYLE_NOPREFIX 32
+#endif
+#define TBSTYLE_TOOLTIPS 256
+#define TBSTYLE_WRAPABLE 512
+#define TBSTYLE_ALTDRAG 1024
+#if (_WIN32_IE >= 0x0300)
+#define TBSTYLE_FLAT 2048
+#define TBSTYLE_LIST 4096
+#define TBSTYLE_CUSTOMERASE 8192
+#endif
+#if (_WIN32_IE >= 0x0400)
+#define TBSTYLE_REGISTERDROP 0x4000
+#define TBSTYLE_TRANSPARENT 0x8000
+#define TBSTYLE_EX_DRAWDDARROWS 0x00000001
+#endif /* _WIN32_IE >= 0x0400 */
+#if (_WIN32_IE >= 0x0501)
+#define TBSTYLE_EX_MIXEDBUTTONS 8
+#define TBSTYLE_EX_HIDECLIPPEDBUTTONS 16
+#endif /* _WIN32_IE >= 0x0501 */
+#if (_WIN32_WINNT >= 0x0501)
+#define TBSTYLE_EX_DOUBLEBUFFER 0x80
+#endif /* _WIN32_WINNT >= 0x0501 */
+#if (_WIN32_IE >= 0x0500)
+#define BTNS_BUTTON TBSTYLE_BUTTON
+#define BTNS_SEP TBSTYLE_SEP
+#define BTNS_CHECK TBSTYLE_CHECK
+#define BTNS_GROUP TBSTYLE_GROUP
+#define BTNS_CHECKGROUP TBSTYLE_CHECKGROUP
+#define BTNS_DROPDOWN TBSTYLE_DROPDOWN
+#define BTNS_AUTOSIZE TBSTYLE_AUTOSIZE
+#define BTNS_NOPREFIX TBSTYLE_NOPREFIX
+#define BTNS_WHOLEDROPDOWN 0x0080
+#endif /* _WIN32_IE >= 0x0500 */
+#if _WIN32_IE >= 0x0501
+#define BTNS_SHOWTEXT 0x0040
+#endif
+#if (_WIN32_IE >= 0x0400)
+#define TBCDRF_NOEDGES 0x10000
+#define TBCDRF_HILITEHOTTRACK 0x20000
+#define TBCDRF_NOOFFSET 0x40000
+#define TBCDRF_NOMARK 0x80000
+#define TBCDRF_NOETCHEDEFFECT 0x100000
+#endif /* _WIN32_IE >= 0x0400 */
+#define HINST_COMMCTRL ((HINSTANCE)-1)
+#define IDB_STD_SMALL_COLOR 0
+#define IDB_STD_LARGE_COLOR 1
+#define IDB_VIEW_SMALL_COLOR 4
+#define IDB_VIEW_LARGE_COLOR 5
+#if (_WIN32_IE >= 0x0300)
+#define IDB_HIST_SMALL_COLOR 8
+#define IDB_HIST_LARGE_COLOR 9
+#endif
+#define STD_CUT 0
+#define STD_COPY 1
+#define STD_PASTE 2
+#define STD_UNDO 3
+#define STD_REDOW 4
+#define STD_DELETE 5
+#define STD_FILENEW 6
+#define STD_FILEOPEN 7
+#define STD_FILESAVE 8
+#define STD_PRINTPRE 9
+#define STD_PROPERTIES 10
+#define STD_HELP 11
+#define STD_FIND 12
+#define STD_REPLACE 13
+#define STD_PRINT 14
+#define VIEW_LARGEICONS 0
+#define VIEW_SMALLICONS 1
+#define VIEW_LIST 2
+#define VIEW_DETAILS 3
+#define VIEW_SORTNAME 4
+#define VIEW_SORTSIZE 5
+#define VIEW_SORTDATE 6
+#define VIEW_SORTTYPE 7
+#define VIEW_PARENTFOLDER 8
+#define VIEW_NETCONNECT 9
+#define VIEW_NETDISCONNECT 10
+#define VIEW_NEWFOLDER 11
+#define TB_ENABLEBUTTON (WM_USER+1)
+#define TB_CHECKBUTTON (WM_USER+2)
+#define TB_PRESSBUTTON (WM_USER+3)
+#define TB_HIDEBUTTON (WM_USER+4)
+#define TB_INDETERMINATE (WM_USER+5)
+#if (_WIN32_IE >= 0x0400)
+#define TB_MARKBUTTON (WM_USER+6)
+#endif
+#define TB_ISBUTTONENABLED (WM_USER+9)
+#define TB_ISBUTTONCHECKED (WM_USER+10)
+#define TB_ISBUTTONPRESSED (WM_USER+11)
+#define TB_ISBUTTONHIDDEN (WM_USER+12)
+#define TB_ISBUTTONINDETERMINATE (WM_USER+13)
+#if (_WIN32_IE >= 0x0400)
+#define TB_ISBUTTONHIGHLIGHTED (WM_USER+14)
+#endif
+#define TB_SETSTATE (WM_USER+17)
+#define TB_GETSTATE (WM_USER+18)
+#define TB_ADDBITMAP (WM_USER+19)
+#if (_WIN32_IE >= 0x0400)
+#define TB_ADDBUTTONSA (WM_USER+20)
+#define TB_INSERTBUTTONA (WM_USER+21)
+#else
+#define TB_ADDBUTTONS (WM_USER+20)
+#define TB_INSERTBUTTON (WM_USER+21)
+#endif
+#define TB_DELETEBUTTON (WM_USER+22)
+#define TB_GETBUTTON (WM_USER+23)
+#define TB_BUTTONCOUNT (WM_USER+24)
+#define TB_COMMANDTOINDEX (WM_USER+25)
+#define TB_SAVERESTOREA (WM_USER+26)
+#define TB_SAVERESTOREW (WM_USER+76)
+#define TB_CUSTOMIZE (WM_USER+27)
+#define TB_ADDSTRINGA (WM_USER+28)
+#define TB_ADDSTRINGW (WM_USER+77)
+#define TB_GETITEMRECT (WM_USER+29)
+#define TB_BUTTONSTRUCTSIZE (WM_USER+30)
+#define TB_SETBUTTONSIZE (WM_USER+31)
+#define TB_SETBITMAPSIZE (WM_USER+32)
+#define TB_AUTOSIZE (WM_USER+33)
+#define TB_GETTOOLTIPS (WM_USER+35)
+#define TB_SETTOOLTIPS (WM_USER+36)
+#define TB_SETPARENT (WM_USER+37)
+#define TB_SETROWS (WM_USER+39)
+#define TB_GETROWS (WM_USER+40)
+#define TB_GETBITMAPFLAGS (WM_USER+41)
+#define TB_SETCMDID (WM_USER+42)
+#define TB_CHANGEBITMAP (WM_USER+43)
+#define TB_GETBITMAP (WM_USER+44)
+#define TB_GETBUTTONTEXTA (WM_USER+45)
+#define TB_GETBUTTONTEXTW (WM_USER+75)
+#define TB_REPLACEBITMAP (WM_USER+46)
+#define TB_GETBUTTONSIZE (WM_USER+58)
+#define TB_SETBUTTONWIDTH (WM_USER+59)
+#if (_WIN32_IE >= 0x0300)
+#define TB_SETINDENT (WM_USER+47)
+#define TB_SETIMAGELIST (WM_USER+48)
+#define TB_GETIMAGELIST (WM_USER+49)
+#define TB_LOADIMAGES (WM_USER+50)
+#define TB_GETRECT (WM_USER+51)
+#define TB_SETHOTIMAGELIST (WM_USER+52)
+#define TB_GETHOTIMAGELIST (WM_USER+53)
+#define TB_SETDISABLEDIMAGELIST (WM_USER+54)
+#define TB_GETDISABLEDIMAGELIST (WM_USER+55)
+#define TB_SETSTYLE (WM_USER+56)
+#define TB_GETSTYLE (WM_USER+57)
+#define TB_GETBUTTONSIZE (WM_USER+58)
+#define TB_SETBUTTONWIDTH (WM_USER+59)
+#define TB_SETMAXTEXTROWS (WM_USER+60)
+#define TB_GETTEXTROWS (WM_USER+61)
+#endif
+#if _WIN32_IE >= 0x400
+#define TB_GETOBJECT (WM_USER+62)
+#define TB_GETBUTTONINFOW (WM_USER+63)
+#define TB_SETBUTTONINFOW (WM_USER+64)
+#define TB_GETBUTTONINFOA (WM_USER+65)
+#define TB_SETBUTTONINFOA (WM_USER+66)
+#define TB_INSERTBUTTONW (WM_USER+67)
+#define TB_ADDBUTTONSW (WM_USER+68)
+#define TB_HITTEST (WM_USER+69)
+#define TB_SETEXTENDEDSTYLE (WM_USER+84)
+#define TB_GETEXTENDEDSTYLE (WM_USER+85)
+#define TB_SETDRAWTEXTFLAGS (WM_USER+70)
+#define TB_GETHOTITEM (WM_USER+71)
+#define TB_SETHOTITEM (WM_USER+72)
+#define TB_SETANCHORHIGHLIGHT (WM_USER+73)
+#define TB_GETANCHORHIGHLIGHT (WM_USER+74)
+#define TB_MAPACCELERATORA (WM_USER+78)
+#define TB_GETINSERTMARK (WM_USER+79)
+#define TB_SETINSERTMARK (WM_USER+80)
+#define TB_INSERTMARKHITTEST (WM_USER+81)
+#define TB_MOVEBUTTON (WM_USER+82)
+#define TB_GETMAXSIZE (WM_USER+83)
+#define TB_SETEXTENDEDSTYLE (WM_USER+84)
+#define TB_GETEXTENDEDSTYLE (WM_USER+85)
+#define TB_GETPADDING (WM_USER+86)
+#define TB_SETPADDING (WM_USER+87)
+#define TB_SETINSERTMARKCOLOR (WM_USER+88)
+#define TB_GETINSERTMARKCOLOR (WM_USER+89)
+#define TB_MAPACCELERATORW (WM_USER+90)
+#define TB_GETSTRINGW (WM_USER+91)
+#define TB_GETSTRINGA (WM_USER+92)
+#define TB_SETCOLORSCHEME CCM_SETCOLORSCHEME
+#define TB_GETCOLORSCHEME CCM_GETCOLORSCHEME
+#define TB_SETUNICODEFORMAT CCM_SETUNICODEFORMAT
+#define TB_GETUNICODEFORMAT CCM_GETUNICODEFORMAT
+#endif
+#define TBBF_LARGE 1
+#define TBN_GETBUTTONINFOA (TBN_FIRST-0)
+#define TBN_BEGINDRAG (TBN_FIRST-1)
+#define TBN_ENDDRAG (TBN_FIRST-2)
+#define TBN_BEGINADJUST (TBN_FIRST-3)
+#define TBN_ENDADJUST (TBN_FIRST-4)
+#define TBN_RESET (TBN_FIRST-5)
+#define TBN_QUERYINSERT (TBN_FIRST-6)
+#define TBN_QUERYDELETE (TBN_FIRST-7)
+#define TBN_TOOLBARCHANGE (TBN_FIRST-8)
+#define TBN_CUSTHELP (TBN_FIRST-9)
+#if (_WIN32_IE >= 0x0300)
+#define TBN_DROPDOWN (TBN_FIRST-10)
+#endif
+#if (_WIN32_IE >= 0x0400)
+#define TBN_HOTITEMCHANGE (TBN_FIRST-13)
+#define TBN_DRAGOUT (TBN_FIRST-14)
+#define TBN_DELETINGBUTTON (TBN_FIRST-15)
+#define TBN_GETDISPINFOA (TBN_FIRST-16)
+#define TBN_GETDISPINFOW (TBN_FIRST-17)
+#define TBN_GETINFOTIPA (TBN_FIRST-18)
+#define TBN_GETINFOTIPW (TBN_FIRST-19)
+#define TBN_GETBUTTONINFOW (TBN_FIRST-20)
+#endif
+#if (_WIN32_IE >= 0x0500)
+#define TBN_RESTORE (TBN_FIRST-21)
+#define TBN_SAVE (TBN_FIRST-22)
+#define TBN_INITCUSTOMIZE (TBN_FIRST-23)
+#define TBNRF_HIDEHELP 1
+#define TBNRF_ENDCUSTOMIZE 2
+#define TBNF_IMAGE 1
+#define TBNF_TEXT 2
+#define TBNF_DI_SETITEM 0x10000000
+#endif /* _WIN32_IE >= 0x0500 */
+#define TTS_ALWAYSTIP 1
+#define TTS_NOPREFIX 2
+#if( _WIN32_IE >= 0x0500 )
+#define TTS_NOANIMATE 0x10
+#define TTS_NOFADE 0x20
+#define TTS_BALLOON 0x40
+#define TTS_CLOSE 0x80
+#endif /* _WIN32_IE >= 0x0500 */
+#define TTF_IDISHWND 1
+#define TTF_CENTERTIP 2
+#define TTF_RTLREADING 4
+#define TTF_SUBCLASS 16
+#if (_WIN32_IE >= 0x0300)
+#define TTF_TRACK 0x0020
+#define TTF_ABSOLUTE 0x0080
+#define TTF_TRANSPARENT 0x0100
+#if (_WIN32_IE >= 0x0501)
+#define TTF_PARSELINKS 0x1000
+#endif
+#define TTF_DI_SETITEM 0x8000
+#define TBCD_TICS 1
+#define TBCD_THUMB 2
+#define TBCD_CHANNEL 3
+#endif /* _WIN32_IE >= 0x0300 */
+#if (_WIN32_IE >= 0x0400)
+#define TBDDRET_DEFAULT 0
+#define TBDDRET_NODEFAULT 1
+#define TBDDRET_TREATPRESSED 2
+#define TBIMHT_AFTER 1
+#define TBIMHT_BACKGROUND 2
+#endif
+#define TTDT_AUTOMATIC 0
+#define TTDT_RESHOW 1
+#define TTDT_AUTOPOP 2
+#define TTDT_INITIAL 3
+#define TTM_ACTIVATE (WM_USER+1)
+#define TTM_SETDELAYTIME (WM_USER+3)
+#define TTM_ADDTOOLA (WM_USER+4)
+#define TTM_ADDTOOLW (WM_USER+50)
+#define TTM_DELTOOLA (WM_USER+5)
+#define TTM_DELTOOLW (WM_USER+51)
+#define TTM_NEWTOOLRECTA (WM_USER+6)
+#define TTM_NEWTOOLRECTW (WM_USER+52)
+#define TTM_RELAYEVENT (WM_USER+7)
+#define TTM_GETTOOLINFOA (WM_USER+8)
+#define TTM_GETTOOLINFOW (WM_USER+53)
+#define TTM_SETTOOLINFOA (WM_USER+9)
+#define TTM_SETTOOLINFOW (WM_USER+54)
+#define TTM_HITTESTA (WM_USER+10)
+#define TTM_HITTESTW (WM_USER+55)
+#define TTM_GETTEXTA (WM_USER+11)
+#define TTM_GETTEXTW (WM_USER+56)
+#define TTM_UPDATETIPTEXTA (WM_USER+12)
+#define TTM_UPDATETIPTEXTW (WM_USER+57)
+#define TTM_GETTOOLCOUNT (WM_USER+13)
+#define TTM_ENUMTOOLSA (WM_USER+14)
+#define TTM_ENUMTOOLSW (WM_USER+58)
+#define TTM_GETCURRENTTOOLA (WM_USER+15)
+#define TTM_GETCURRENTTOOLW (WM_USER+59)
+#define TTM_WINDOWFROMPOINT (WM_USER+16)
+#if (_WIN32_IE >= 0x0300)
+#define TTM_TRACKACTIVATE (WM_USER+17)
+#define TTM_TRACKPOSITION (WM_USER+18)
+#define TTM_SETTIPBKCOLOR (WM_USER+19)
+#define TTM_SETTIPTEXTCOLOR (WM_USER+20)
+#define TTM_GETDELAYTIME (WM_USER+21)
+#define TTM_GETTIPBKCOLOR (WM_USER+22)
+#define TTM_GETTIPTEXTCOLOR (WM_USER+23)
+#define TTM_SETMAXTIPWIDTH (WM_USER+24)
+#define TTM_GETMAXTIPWIDTH (WM_USER+25)
+#define TTM_SETMARGIN (WM_USER+26)
+#define TTM_GETMARGIN (WM_USER+27)
+#define TTM_POP (WM_USER+28)
+#endif /* _WIN32_IE */
+#if (_WIN32_IE >= 0x0400) /* IE4.0 ??? */
+#define TTM_UPDATE (WM_USER+29)
+#define TTM_GETBUBBLESIZE (WM_USER+30)
+#define TTM_ADJUSTRECT (WM_USER+31)
+#define TTM_SETTITLEA (WM_USER+32)
+#define TTM_SETTITLEW (WM_USER+33)
+#endif
+#define TTN_GETDISPINFOA (TTN_FIRST - 0)
+#define TTN_GETDISPINFOW (TTN_FIRST - 10)
+#define TTN_NEEDTEXTA TTN_GETDISPINFOA
+#define TTN_NEEDTEXTW TTN_GETDISPINFOW
+#define TTN_SHOW (TTN_FIRST-1)
+#define TTN_POP (TTN_FIRST-2)
+#define UD_MAXVAL 0x7fff
+#define UD_MINVAL (-UD_MAXVAL)
+#define UDN_DELTAPOS (UDN_FIRST-1)
+#define UDS_WRAP 1
+#define UDS_SETBUDDYINT 2
+#define UDS_ALIGNRIGHT 4
+#define UDS_ALIGNLEFT 8
+#define UDS_AUTOBUDDY 16
+#define UDS_ARROWKEYS 32
+#define UDS_HORZ 64
+#define UDS_NOTHOUSANDS 128
+#if ( _WIN32_IE >= 0x0300 )
+#define UDS_HOTTRACK 0x0100
+#endif /* _WIN32_IE >= 0x0300 */
+#define UDM_SETRANGE (WM_USER+101)
+#define UDM_GETRANGE (WM_USER+102)
+#define UDM_SETPOS (WM_USER+103)
+#define UDM_GETPOS (WM_USER+104)
+#define UDM_SETBUDDY (WM_USER+105)
+#define UDM_GETBUDDY (WM_USER+106)
+#define UDM_SETACCEL (WM_USER+107)
+#define UDM_GETACCEL (WM_USER+108)
+#define UDM_SETBASE (WM_USER+109)
+#define UDM_GETBASE (WM_USER+110)
+#if (_WIN32_IE >= 0x0400)
+#define UDM_SETRANGE32 (WM_USER+111)
+#define UDM_GETRANGE32 (WM_USER+112)
+#define UDM_SETPOS32 (WM_USER+113)
+#define UDM_GETPOS32 (WM_USER+114)
+#endif
+#if (_WIN32_IE >= 0x0500)
+#define UDM_SETUNICODEFORMAT CCM_SETUNICODEFORMAT
+#define UDM_GETUNICODEFORMAT CCM_GETUNICODEFORMAT
+#endif
+#define SB_SETTEXTA (WM_USER+1)
+#define SB_SETTEXTW (WM_USER+11)
+#define SB_GETTEXTA (WM_USER+2)
+#define SB_GETTEXTW (WM_USER+13)
+#define SB_GETTEXTLENGTHA (WM_USER+3)
+#define SB_GETTEXTLENGTHW (WM_USER+12)
+#define SB_SETPARTS (WM_USER+4)
+#define SB_GETPARTS (WM_USER+6)
+#define SB_GETBORDERS (WM_USER+7)
+#define SB_SETMINHEIGHT (WM_USER+8)
+#define SB_SIMPLE (WM_USER+9)
+#define SB_GETRECT (WM_USER+10)
+#define SBT_OWNERDRAW 0x1000
+#define SBT_NOBORDERS 256
+#define SBT_POPOUT 512
+#define SBT_RTLREADING 1024
+#if( _WIN32_IE >= 0x0400 )
+#define SBT_TOOLTIPS 0x0800
+#define SBN_SIMPLEMODECHANGE (SBN_FIRST)
+#endif /* _WIN32_IE >= 0x0400 */
+#define TBS_AUTOTICKS 1
+#define TBS_VERT 2
+#define TBS_HORZ 0
+#define TBS_TOP 4
+#define TBS_BOTTOM 0
+#define TBS_LEFT 4
+#define TBS_RIGHT 0
+#define TBS_BOTH 8
+#define TBS_NOTICKS 16
+#define TBS_ENABLESELRANGE 32
+#define TBS_FIXEDLENGTH 64
+#define TBS_NOTHUMB 128
+#if (_WIN32_IE >= 0x0300)
+#define TBS_TOOLTIPS 0x0100
+#define TBTS_TOP 0
+#define TBTS_LEFT 1
+#define TBTS_BOTTOM 2
+#define TBTS_RIGHT 3
+#endif
+#if (_WIN32_IE >= 0x0500)
+#define TBS_REVERSED 0x0200
+#endif
+#if (_WIN32_IE >= 0x0501)
+#define TBS_DOWNISLEFT 0x0400
+#endif
+#if _WIN32_IE >= 0x400
+#define TBIF_BYINDEX 0x80000000
+#define TBIF_COMMAND 32
+#define TBIF_IMAGE 1
+#define TBIF_LPARAM 16
+#define TBIF_SIZE 64
+#define TBIF_STATE 4
+#define TBIF_STYLE 8
+#define TBIF_TEXT 2
+#endif
+#define TBM_GETPOS (WM_USER)
+#define TBM_GETRANGEMIN (WM_USER+1)
+#define TBM_GETRANGEMAX (WM_USER+2)
+#define TBM_GETTIC (WM_USER+3)
+#define TBM_SETTIC (WM_USER+4)
+#define TBM_SETPOS (WM_USER+5)
+#define TBM_SETRANGE (WM_USER+6)
+#define TBM_SETRANGEMIN (WM_USER+7)
+#define TBM_SETRANGEMAX (WM_USER+8)
+#define TBM_CLEARTICS (WM_USER+9)
+#define TBM_SETSEL (WM_USER+10)
+#define TBM_SETSELSTART (WM_USER+11)
+#define TBM_SETSELEND (WM_USER+12)
+#define TBM_GETPTICS (WM_USER+14)
+#define TBM_GETTICPOS (WM_USER+15)
+#define TBM_GETNUMTICS (WM_USER+16)
+#define TBM_GETSELSTART (WM_USER+17)
+#define TBM_GETSELEND (WM_USER+18)
+#define TBM_CLEARSEL (WM_USER+19)
+#define TBM_SETTICFREQ (WM_USER+20)
+#define TBM_SETPAGESIZE (WM_USER+21)
+#define TBM_GETPAGESIZE (WM_USER+22)
+#define TBM_SETLINESIZE (WM_USER+23)
+#define TBM_GETLINESIZE (WM_USER+24)
+#define TBM_GETTHUMBRECT (WM_USER+25)
+#define TBM_GETCHANNELRECT (WM_USER+26)
+#define TBM_SETTHUMBLENGTH (WM_USER+27)
+#define TBM_GETTHUMBLENGTH (WM_USER+28)
+#define TBM_SETTOOLTIPS (WM_USER+29)
+#define TBM_GETTOOLTIPS (WM_USER+30)
+#define TBM_SETTIPSIDE (WM_USER+31)
+#define TBM_SETBUDDY (WM_USER+32)
+#define TBM_GETBUDDY (WM_USER+33)
+#define TBM_GETUNICODEFORMAT CCM_GETUNICODEFORMAT
+#define TBM_SETUNICODEFORMAT CCM_SETUNICODEFORMAT
+#define TB_LINEUP 0
+#define TB_LINEDOWN 1
+#define TB_PAGEUP 2
+#define TB_PAGEDOWN 3
+#define TB_THUMBPOSITION 4
+#define TB_THUMBTRACK 5
+#define TB_TOP 6
+#define TB_BOTTOM 7
+#define TB_ENDTRACK 8
+#define HOTKEYF_SHIFT 1
+#define HOTKEYF_CONTROL 2
+#define HOTKEYF_ALT 4
+#define HOTKEYF_EXT 8
+#define HKCOMB_NONE 1
+#define HKCOMB_S 2
+#define HKCOMB_C 4
+#define HKCOMB_A 8
+#define HKCOMB_SC 16
+#define HKCOMB_SA 32
+#define HKCOMB_CA 64
+#define HKCOMB_SCA 128
+#define HKM_SETHOTKEY (WM_USER+1)
+#define HKM_GETHOTKEY (WM_USER+2)
+#define HKM_SETRULES (WM_USER+3)
+#define PBM_SETRANGE (WM_USER+1)
+#define PBM_SETPOS (WM_USER+2)
+#define PBM_DELTAPOS (WM_USER+3)
+#define PBM_SETSTEP (WM_USER+4)
+#define PBM_STEPIT (WM_USER+5)
+#define PBM_SETRANGE32 1030
+#define PBM_GETRANGE 1031
+#define PBM_GETPOS 1032
+#define PBM_SETBARCOLOR 1033
+#define PBM_SETBKCOLOR CCM_SETBKCOLOR
+#define PBS_SMOOTH 1
+#define PBS_VERTICAL 4
+#define LVS_ICON 0
+#define LVS_REPORT 1
+#define LVS_SMALLICON 2
+#define LVS_LIST 3
+#define LVS_TYPEMASK 3
+#define LVS_SINGLESEL 4
+#define LVS_SHOWSELALWAYS 8
+#define LVS_SORTASCENDING 16
+#define LVS_SORTDESCENDING 32
+#define LVS_SHAREIMAGELISTS 64
+#define LVS_NOLABELWRAP 128
+#define LVS_AUTOARRANGE 256
+#define LVS_EDITLABELS 512
+#define LVS_NOSCROLL 0x2000
+#define LVS_TYPESTYLEMASK 0xfc00
+#define LVS_ALIGNTOP 0
+#define LVS_ALIGNLEFT 0x800
+#define LVS_ALIGNMASK 0xc00
+#define LVS_OWNERDRAWFIXED 0x400
+#define LVS_NOCOLUMNHEADER 0x4000
+#define LVS_NOSORTHEADER 0x8000
+#if (_WIN32_IE >= 0x0300)
+#define CDIS_CHECKED 8
+#define CDIS_DEFAULT 32
+#define CDIS_DISABLED 4
+#define CDIS_FOCUS 16
+#define CDIS_GRAYED 2
+#define CDIS_HOT 64
+#define CDIS_SELECTED 1
+#define CDIS_MARKED 128
+#define CDIS_INDETERMINATE 256
+#if (_WIN32_WINNT >= 0x0501)
+#define CDIS_SHOWKEYBOARDCUES 512
+#endif
+#define CDDS_POSTERASE 4
+#define CDDS_POSTPAINT 2
+#define CDDS_PREERASE 3
+#define CDDS_PREPAINT 1
+#define CDDS_ITEM 65536
+#define CDDS_ITEMPOSTERASE 65540
+#define CDDS_ITEMPOSTPAINT 65538
+#define CDDS_ITEMPREERASE 65539
+#define CDDS_ITEMPREPAINT 65537
+#if (_WIN32_IE >= 0x0400)
+#define CDDS_SUBITEM 0x20000
+#endif
+#define CDRF_DODEFAULT 0x00
+#define CDRF_NOTIFYITEMDRAW 0x20
+#define CDRF_NOTIFYSUBITEMDRAW 0x20
+#define CDRF_NOTIFYITEMERASE 0x80
+#define CDRF_NOTIFYPOSTERASE 0x40
+#define CDRF_NOTIFYPOSTPAINT 0x10
+#define CDRF_NEWFONT 0x02
+#define CDRF_SKIPDEFAULT 0x04
+#if (_WIN32_IE >= 0x0400)
+#define LVBKIF_SOURCE_NONE 0x00000000
+#define LVBKIF_SOURCE_HBITMAP 0x00000001
+#define LVBKIF_SOURCE_URL 0x00000002
+#define LVBKIF_SOURCE_MASK 0x00000003
+#define LVBKIF_STYLE_NORMAL 0x00000000
+#define LVBKIF_STYLE_TILE 0x00000010
+#define LVBKIF_STYLE_MASK 0x00000010
+#endif /* _WIN32_IE >=0x0400 */
+#if (_WIN32_WINNT >= 0x501)
+#define LVBKIF_FLAG_TILEOFFSET 0x00000100
+#define LVBKIF_TYPE_WATERMARK 0x10000000
+#endif /* _WIN32_WINNT >= 0x501 */
+#define LVS_OWNERDATA 4096
+#define LVS_EX_CHECKBOXES 4
+#define LVS_EX_FULLROWSELECT 32
+#define LVS_EX_GRIDLINES 1
+#define LVS_EX_HEADERDRAGDROP 16
+#define LVS_EX_ONECLICKACTIVATE 64
+#define LVS_EX_SUBITEMIMAGES 2
+#define LVS_EX_TRACKSELECT 8
+#define LVS_EX_TWOCLICKACTIVATE 128
+#define LVSICF_NOINVALIDATEALL 0x00000001
+#define LVSICF_NOSCROLL 0x00000002
+#if( _WIN32_IE >= 0x0400 )
+#define LVS_EX_FLATSB 0x00000100
+#define LVS_EX_REGIONAL 0x00000200
+#define LVS_EX_INFOTIP 0x00000400
+#define LVS_EX_UNDERLINEHOT 0x00000800
+#define LVS_EX_UNDERLINECOLD 0x00001000
+#define LVS_EX_MULTIWORKAREAS 0x00002000
+#endif /* _WIN32_IE >=0x0400 */
+#if( _WIN32_IE >= 0x0500 )
+#define LVS_EX_LABELTIP 0x00004000
+#define LVS_EX_BORDERSELECT 0x00008000
+#endif /* _WIN32_IE >= 0x0500 */
+#endif /* _WIN32_IE >= 0x0300 */
+#define LVSIL_NORMAL 0
+#define LVSIL_SMALL 1
+#define LVSIL_STATE 2
+#define LVM_GETBKCOLOR LVM_FIRST
+#define LVM_SETBKCOLOR (LVM_FIRST+1)
+#define LVM_GETIMAGELIST (LVM_FIRST+2)
+#define LVM_SETIMAGELIST (LVM_FIRST+3)
+#define LVM_GETITEMCOUNT (LVM_FIRST+4)
+#define LVM_SORTITEMSEX (LVM_FIRST+81)
+#if (_WIN32_WINNT >= 0x501)
+#define LVM_SETSELECTEDCOLUMN (LVM_FIRST+140)
+#endif
+#define LVM_SETVIEW (LVM_FIRST+142)
+#define LVM_GETVIEW (LVM_FIRST+143)
+#define LVM_INSERTGROUP (LVM_FIRST+145)
+#define LVM_SETGROUPINFO (LVM_FIRST+147)
+#define LVM_GETGROUPINFO (LVM_FIRST+149)
+#define LVM_REMOVEGROUP (LVM_FIRST+150)
+#define LVM_MOVEGROUP (LVM_FIRST+151)
+#define LVM_SETGROUPMETRICS (LVM_FIRST+155)
+#define LVM_GETGROUPMETRICS (LVM_FIRST+156)
+#define LVM_ENABLEGROUPVIEW (LVM_FIRST+157)
+#define LVM_SORTGROUPS (LVM_FIRST+158)
+#define LVM_INSERTGROUPSORTED (LVM_FIRST+159)
+#define LVM_REMOVEALLGROUPS (LVM_FIRST+160)
+#define LVM_HASGROUP (LVM_FIRST+161)
+#define LVM_SETTILEVIEWINFO (LVM_FIRST+162)
+#define LVM_GETTILEVIEWINFO (LVM_FIRST+163)
+#define LVM_SETTILEINFO (LVM_FIRST+164)
+#define LVM_GETTILEINFO (LVM_FIRST+165)
+#define LVM_SETINSERTMARK (LVM_FIRST+166)
+#define LVM_GETINSERTMARK (LVM_FIRST+167)
+#define LVM_INSERTMARKHITTEST (LVM_FIRST+168)
+#define LVM_GETINSERTMARKRECT (LVM_FIRST+169)
+#define LVM_SETINSERTMARKCOLOR (LVM_FIRST+170)
+#define LVM_GETINSERTMARKCOLOR (LVM_FIRST+171)
+#define LVM_SETINFOTIP (LVM_FIRST+173)
+#define LVM_GETSELECTEDCOLUMN (LVM_FIRST+174)
+#define LVM_ISGROUPVIEWENABLED (LVM_FIRST+175)
+#define LVM_GETOUTLINECOLOR (LVM_FIRST+176)
+#define LVM_SETOUTLINECOLOR (LVM_FIRST+177)
+#define LVM_CANCELEDITLABEL (LVM_FIRST+179)
+#define LVM_MAPIDTOINDEX (LVM_FIRST+181)
+#define LVIF_TEXT 1
+#define LVIF_IMAGE 2
+#define LVIF_PARAM 4
+#define LVIF_STATE 8
+#if (_WIN32_IE >= 0x0300)
+#define LVIF_INDENT 16
+#define LVIF_NORECOMPUTE 2048
+#endif
+#if (_WIN32_WINNT >= 0x0501)
+#define LVIF_GROUPID 128
+#define LVIF_COLUMNS 256
+#endif
+#define LVIS_FOCUSED 1
+#define LVIS_SELECTED 2
+#define LVIS_CUT 4
+#define LVIS_DROPHILITED 8
+#define LVIS_OVERLAYMASK 0xF00
+#define LVIS_STATEIMAGEMASK 0xF000
+#define LPSTR_TEXTCALLBACKW ((LPWSTR)-1)
+#define LPSTR_TEXTCALLBACKA ((LPSTR)-1)
+#define I_IMAGECALLBACK (-1)
+#define LVM_GETITEMA (LVM_FIRST+5)
+#define LVM_GETITEMW (LVM_FIRST+75)
+#define LVM_SETITEMA (LVM_FIRST+6)
+#define LVM_SETITEMW (LVM_FIRST+76)
+#define LVM_INSERTITEMA (LVM_FIRST+7)
+#define LVM_INSERTITEMW (LVM_FIRST+77)
+#define LVM_DELETEITEM (LVM_FIRST+8)
+#define LVM_DELETEALLITEMS (LVM_FIRST+9)
+#define LVM_GETCALLBACKMASK (LVM_FIRST+10)
+#define LVM_SETCALLBACKMASK (LVM_FIRST+11)
+#if( _WIN32_IE >= 0x0400 )
+#define LVM_SETBKIMAGEA (LVM_FIRST + 68)
+#define LVM_SETBKIMAGEW (LVM_FIRST + 138)
+#define LVM_GETBKIMAGEA (LVM_FIRST + 69)
+#define LVM_GETBKIMAGEW (LVM_FIRST + 139)
+#define LV_MAX_WORKAREAS 16
+#define LVM_SETWORKAREAS (LVM_FIRST+65)
+#define LVM_GETWORKAREAS (LVM_FIRST+70)
+#define LVM_GETNUMBEROFWORKAREAS (LVM_FIRST+73)
+#define LVM_GETSELECTIONMARK (LVM_FIRST+66)
+#define LVM_SETSELECTIONMARK (LVM_FIRST+67)
+#define LVM_SETHOVERTIME (LVM_FIRST+71)
+#define LVM_GETHOVERTIME (LVM_FIRST+72)
+#define LVM_SETTOOLTIPS (LVM_FIRST+74)
+#define LVM_GETTOOLTIPS (LVM_FIRST+78)
+#define LVM_SETUNICODEFORMAT CCM_SETUNICODEFORMAT
+#define LVM_GETUNICODEFORMAT CCM_GETUNICODEFORMAT
+#endif /* _WIN32_IE >= 0x0400 */
+#define LVNI_ALL 0
+#define LVNI_FOCUSED 1
+#define LVNI_SELECTED 2
+#define LVNI_CUT 4
+#define LVNI_DROPHILITED 8
+#define LVNI_ABOVE 256
+#define LVNI_BELOW 512
+#define LVNI_TOLEFT 1024
+#define LVNI_TORIGHT 2048
+#define LVM_GETNEXTITEM (LVM_FIRST+12)
+#define LVFI_PARAM 1
+#define LVFI_STRING 2
+#define LVFI_PARTIAL 8
+#define LVFI_WRAP 32
+#define LVFI_NEARESTXY 64
+#define LVIF_DI_SETITEM 0x1000
+#define LVM_FINDITEMA (LVM_FIRST+13)
+#define LVM_FINDITEMW (LVM_FIRST+83)
+#define LVIR_BOUNDS 0
+#define LVIR_ICON 1
+#define LVIR_LABEL 2
+#define LVIR_SELECTBOUNDS 3
+#define LVM_GETITEMRECT (LVM_FIRST+14)
+#define LVM_SETITEMPOSITION (LVM_FIRST+15)
+#define LVM_GETITEMPOSITION (LVM_FIRST+16)
+#define LVM_GETSTRINGWIDTHA (LVM_FIRST+17)
+#define LVM_GETSTRINGWIDTHW (LVM_FIRST+87)
+#define LVHT_NOWHERE 1
+#define LVHT_ONITEMICON 2
+#define LVHT_ONITEMLABEL 4
+#define LVHT_ONITEMSTATEICON 8
+#define LVHT_ONITEM (LVHT_ONITEMICON|LVHT_ONITEMLABEL|LVHT_ONITEMSTATEICON)
+#define LVHT_ABOVE 8
+#define LVHT_BELOW 16
+#define LVHT_TORIGHT 32
+#define LVHT_TOLEFT 64
+#define LVM_HITTEST (LVM_FIRST+18)
+#define LVM_ENSUREVISIBLE (LVM_FIRST+19)
+#define LVM_SCROLL (LVM_FIRST+20)
+#define LVM_REDRAWITEMS (LVM_FIRST+21)
+#define LVA_DEFAULT 0
+#define LVA_ALIGNLEFT 1
+#define LVA_ALIGNTOP 2
+#define LVA_SNAPTOGRID 5
+#define LVM_ARRANGE (LVM_FIRST+22)
+#define LVM_EDITLABELA (LVM_FIRST+23)
+#define LVM_EDITLABELW (LVM_FIRST+118)
+#define LVM_GETEDITCONTROL (LVM_FIRST+24)
+#define LVCF_FMT 1
+#define LVCF_WIDTH 2
+#define LVCF_TEXT 4
+#define LVCF_SUBITEM 8
+#if (_WIN32_IE >= 0x0300)
+#define LVCF_IMAGE 16
+#define LVCF_ORDER 32
+#endif
+#define LVCFMT_LEFT 0
+#define LVCFMT_RIGHT 1
+#define LVCFMT_CENTER 2
+#define LVCFMT_JUSTIFYMASK 3
+#if (_WIN32_IE >= 0x0300)
+#define LVCFMT_BITMAP_ON_RIGHT 4096
+#define LVCFMT_COL_HAS_IMAGES 32768
+#define LVCFMT_IMAGE 2048
+#endif
+#define LVM_GETCOLUMNA (LVM_FIRST+25)
+#define LVM_GETCOLUMNW (LVM_FIRST+95)
+#define LVM_SETCOLUMNA (LVM_FIRST+26)
+#define LVM_SETCOLUMNW (LVM_FIRST+96)
+#define LVM_INSERTCOLUMNA (LVM_FIRST+27)
+#define LVM_INSERTCOLUMNW (LVM_FIRST+97)
+#define LVM_DELETECOLUMN (LVM_FIRST+28)
+#define LVM_GETCOLUMNWIDTH (LVM_FIRST+29)
+#define LVSCW_AUTOSIZE (-1)
+#define LVSCW_AUTOSIZE_USEHEADER (-2)
+#define LVM_SETCOLUMNWIDTH (LVM_FIRST+30)
+#define LVM_CREATEDRAGIMAGE (LVM_FIRST+33)
+#define LVM_GETVIEWRECT (LVM_FIRST+34)
+#define LVM_GETTEXTCOLOR (LVM_FIRST+35)
+#define LVM_SETTEXTCOLOR (LVM_FIRST+36)
+#define LVM_GETTEXTBKCOLOR (LVM_FIRST+37)
+#define LVM_SETTEXTBKCOLOR (LVM_FIRST+38)
+#define LVM_GETTOPINDEX (LVM_FIRST+39)
+#define LVM_GETCOUNTPERPAGE (LVM_FIRST+40)
+#define LVM_GETORIGIN (LVM_FIRST+41)
+#define LVM_GETORIGIN (LVM_FIRST+41)
+#define LVM_UPDATE (LVM_FIRST+42)
+#define LVM_SETITEMSTATE (LVM_FIRST+43)
+#define LVM_GETITEMSTATE (LVM_FIRST+44)
+#define LVM_GETITEMTEXTA (LVM_FIRST+45)
+#define LVM_GETITEMTEXTW (LVM_FIRST+115)
+#define LVM_SETITEMTEXTA (LVM_FIRST+46)
+#define LVM_SETITEMTEXTW (LVM_FIRST+116)
+#define LVM_SETITEMCOUNT (LVM_FIRST+47)
+#define LVM_SORTITEMS (LVM_FIRST+48)
+#define LVM_SETITEMPOSITION32 (LVM_FIRST+49)
+#define LVM_GETSELECTEDCOUNT (LVM_FIRST+50)
+#define LVM_GETITEMSPACING (LVM_FIRST+51)
+#define LVM_GETISEARCHSTRINGA (LVM_FIRST+52)
+#define LVM_GETISEARCHSTRINGW (LVM_FIRST+117)
+#if (_WIN32_IE >= 0x0300)
+#define LVM_APPROXIMATEVIEWRECT (LVM_FIRST+64)
+#define LVM_SETEXTENDEDLISTVIEWSTYLE (LVM_FIRST+54)
+#define LVM_GETEXTENDEDLISTVIEWSTYLE (LVM_FIRST+55)
+#define LVM_SETCOLUMNORDERARRAY (LVM_FIRST+58)
+#define LVM_GETCOLUMNORDERARRAY (LVM_FIRST+59)
+#define LVM_GETHEADER (LVM_FIRST+31)
+#define LVM_GETHOTCURSOR (LVM_FIRST+63)
+#define LVM_GETHOTITEM (LVM_FIRST+61)
+#define LVM_GETSUBITEMRECT (LVM_FIRST+56)
+#define LVM_SETHOTCURSOR (LVM_FIRST+62)
+#define LVM_SETHOTITEM (LVM_FIRST+60)
+#define LVM_SETICONSPACING (LVM_FIRST+53)
+#define LVM_SUBITEMHITTEST (LVM_FIRST+57)
+#endif
+#define LVN_ITEMCHANGING LVN_FIRST
+#define LVN_ITEMCHANGED (LVN_FIRST-1)
+#define LVN_INSERTITEM (LVN_FIRST-2)
+#define LVN_DELETEITEM (LVN_FIRST-3)
+#define LVN_DELETEALLITEMS (LVN_FIRST-4)
+#define LVN_BEGINLABELEDITA (LVN_FIRST-5)
+#define LVN_BEGINLABELEDITW (LVN_FIRST-75)
+#define LVN_ENDLABELEDITA (LVN_FIRST-6)
+#define LVN_ENDLABELEDITW (LVN_FIRST-76)
+#define LVN_COLUMNCLICK (LVN_FIRST-8)
+#define LVN_BEGINDRAG (LVN_FIRST-9)
+#define LVN_BEGINRDRAG (LVN_FIRST-11)
+#define LVN_GETDISPINFOA (LVN_FIRST-50)
+#define LVN_GETDISPINFOW (LVN_FIRST-77)
+#define LVN_SETDISPINFOA (LVN_FIRST-51)
+#define LVN_SETDISPINFOW (LVN_FIRST-78)
+#define LVN_KEYDOWN (LVN_FIRST-55)
+#if (_WIN32_IE >= 0x0400)
+#define LVN_MARQUEEBEGIN (LVN_FIRST-56)
+#define LVN_GETINFOTIPA (LVN_FIRST-57)
+#define LVN_GETINFOTIPW (LVN_FIRST-58)
+#define LVKF_ALT 0x0001
+#define LVKF_CONTROL 0x0002
+#define LVKF_SHIFT 0x0004
+#define LVGIT_UNFOLDED 1
+#endif
+#define TVS_HASBUTTONS 1
+#define TVS_HASLINES 2
+#define TVS_LINESATROOT 4
+#define TVS_EDITLABELS 8
+#define TVS_DISABLEDRAGDROP 16
+#define TVS_SHOWSELALWAYS 32
+#if (_WIN32_IE >= 0x0300)
+#define TVS_CHECKBOXES 256
+#define TVS_NOTOOLTIPS 128
+#define TVS_RTLREADING 64
+#define TVS_TRACKSELECT 512
+#endif
+#if (_WIN32_IE >= 0x0400)
+#define TVS_FULLROWSELECT 4096
+#define TVS_INFOTIP 2048
+#define TVS_NONEVENHEIGHT 16384
+#define TVS_NOSCROLL 8192
+#define TVS_SINGLEEXPAND 1024
+#endif
+#if( _WIN32_IE >= 0x0500 )
+#define TVS_NOHSCROLL 0x8000
+#endif /* _WIN32_IE >= 0x0500 */
+#define TVIF_TEXT 1
+#define TVIF_IMAGE 2
+#define TVIF_PARAM 4
+#define TVIF_STATE 8
+#define TVIF_HANDLE 16
+#define TVIF_SELECTEDIMAGE 32
+#define TVIF_CHILDREN 64
+#if (_WIN32_IE >= 0x0400)
+#define TVIF_INTEGRAL 0x0080
+#endif /* _WIN32_IE >= 0x0400 */
+#define TVIS_FOCUSED 1
+#define TVIS_SELECTED 2
+#define TVIS_CUT 4
+#define TVIS_DROPHILITED 8
+#define TVIS_BOLD 16
+#define TVIS_EXPANDED 32
+#define TVIS_EXPANDEDONCE 64
+#define TVIS_OVERLAYMASK 0xF00
+#define TVIS_STATEIMAGEMASK 0xF000
+#define TVIS_USERMASK 0xF000
+#define I_CHILDRENCALLBACK (-1)
+#define TVI_ROOT ((HTREEITEM)0xFFFF0000)
+#define TVI_FIRST ((HTREEITEM)0xFFFF0001)
+#define TVI_LAST ((HTREEITEM)0xFFFF0002)
+#define TVI_SORT ((HTREEITEM)0xFFFF0003)
+#define TVSIL_NORMAL 0
+#define TVSIL_STATE 2
+#define TVM_INSERTITEMA TV_FIRST
+#define TVM_INSERTITEMW (TV_FIRST+50)
+#define TVM_DELETEITEM (TV_FIRST+1)
+#define TVM_EXPAND (TV_FIRST+2)
+#define TVM_GETITEMRECT (TV_FIRST+4)
+#define TVM_GETCOUNT (TV_FIRST+5)
+#define TVM_GETINDENT (TV_FIRST+6)
+#define TVM_SETINDENT (TV_FIRST+7)
+#define TVM_GETIMAGELIST (TV_FIRST+8)
+#define TVM_SETIMAGELIST (TV_FIRST+9)
+#define TVM_GETNEXTITEM (TV_FIRST+10)
+#define TVM_SELECTITEM (TV_FIRST+11)
+#define TVM_GETITEMA (TV_FIRST+12)
+#define TVM_GETITEMW (TV_FIRST+62)
+#define TVM_SETITEMA (TV_FIRST+13)
+#define TVM_SETITEMW (TV_FIRST+63)
+#define TVM_EDITLABELA (TV_FIRST+14)
+#define TVM_EDITLABELW (TV_FIRST+65)
+#define TVM_GETEDITCONTROL (TV_FIRST+15)
+#define TVM_GETVISIBLECOUNT (TV_FIRST+16)
+#define TVM_HITTEST (TV_FIRST+17)
+#define TVM_CREATEDRAGIMAGE (TV_FIRST+18)
+#define TVM_SORTCHILDREN (TV_FIRST+19)
+#define TVM_ENSUREVISIBLE (TV_FIRST+20)
+#define TVM_SORTCHILDRENCB (TV_FIRST+21)
+#define TVM_ENDEDITLABELNOW (TV_FIRST+22)
+#define TVM_GETISEARCHSTRINGA (TV_FIRST+23)
+#define TVM_GETISEARCHSTRINGW (TV_FIRST+64)
+#if (_WIN32_IE >= 0x0300)
+#define TVM_GETTOOLTIPS (TV_FIRST+25)
+#define TVM_SETTOOLTIPS (TV_FIRST+24)
+#endif
+#if (_WIN32_IE >= 0x0400)
+#define TVM_GETBKCOLOR (TV_FIRST+31)
+#define TVM_GETINSERTMARKCOLOR (TV_FIRST+38)
+#define TVM_GETITEMHEIGHT (TV_FIRST+28)
+#define TVM_GETSCROLLTIME (TV_FIRST+34)
+#define TVM_GETTEXTCOLOR (TV_FIRST+32)
+#define TVM_SETBKCOLOR (TV_FIRST+29)
+#define TVM_SETINSERTMARK (TV_FIRST+26)
+#define TVM_SETINSERTMARKCOLOR (TV_FIRST+37)
+#define TVM_SETITEMHEIGHT (TV_FIRST+27)
+#define TVM_SETSCROLLTIME (TV_FIRST+33)
+#define TVM_SETTEXTCOLOR (TV_FIRST+30)
+#define TVM_SETUNICODEFORMAT CCM_SETUNICODEFORMAT
+#define TVM_GETUNICODEFORMAT CCM_GETUNICODEFORMAT
+#endif
+#if (_WIN32_IE >= 0x0500)
+#define TVM_GETITEMSTATE (TV_FIRST+39)
+#define TVM_SETLINECOLOR (TV_FIRST+40)
+#define TVM_GETLINECOLOR (TV_FIRST+41)
+#endif
+#define TVE_COLLAPSE 1
+#define TVE_EXPAND 2
+#define TVE_TOGGLE 3
+#define TVE_COLLAPSERESET 0x8000
+#if (_WIN32_IE >= 0x0300)
+#define TVE_EXPANDPARTIAL 0x4000
+#endif
+#define TVC_UNKNOWN 0
+#define TVC_BYMOUSE 1
+#define TVC_BYKEYBOARD 2
+#define TVGN_ROOT 0
+#define TVGN_NEXT 1
+#define TVGN_PREVIOUS 2
+#define TVGN_PARENT 3
+#define TVGN_CHILD 4
+#define TVGN_FIRSTVISIBLE 5
+#define TVGN_NEXTVISIBLE 6
+#define TVGN_PREVIOUSVISIBLE 7
+#define TVGN_DROPHILITE 8
+#define TVGN_CARET 9
+#if (_WIN32_IE >= 0x0400)
+#define TVGN_LASTVISIBLE 10
+#endif
+#define TVN_SELCHANGINGA (TVN_FIRST-1)
+#define TVN_SELCHANGINGW (TVN_FIRST-50)
+#define TVN_SELCHANGEDA (TVN_FIRST-2)
+#define TVN_SELCHANGEDW (TVN_FIRST-51)
+#define TVN_GETDISPINFOA (TVN_FIRST-3)
+#define TVN_GETDISPINFOW (TVN_FIRST-52)
+#define TVN_SETDISPINFOA (TVN_FIRST-4)
+#define TVN_SETDISPINFOW (TVN_FIRST-53)
+#define TVN_ITEMEXPANDINGA (TVN_FIRST-5)
+#define TVN_ITEMEXPANDINGW (TVN_FIRST-54)
+#define TVN_ITEMEXPANDEDA (TVN_FIRST-6)
+#define TVN_ITEMEXPANDEDW (TVN_FIRST-55)
+#define TVN_BEGINDRAGA (TVN_FIRST-7)
+#define TVN_BEGINDRAGW (TVN_FIRST-56)
+#define TVN_BEGINRDRAGA (TVN_FIRST-8)
+#define TVN_BEGINRDRAGW (TVN_FIRST-57)
+#define TVN_DELETEITEMA (TVN_FIRST-9)
+#define TVN_DELETEITEMW (TVN_FIRST-58)
+#define TVN_BEGINLABELEDITA (TVN_FIRST-10)
+#define TVN_BEGINLABELEDITW (TVN_FIRST-59)
+#define TVN_ENDLABELEDITA (TVN_FIRST-11)
+#define TVN_ENDLABELEDITW (TVN_FIRST-60)
+#define TVN_KEYDOWN (TVN_FIRST-12)
+#if (_WIN32_IE >= 0x0400)
+#define TVN_GETINFOTIPA (TVN_FIRST-13)
+#define TVN_GETINFOTIPW (TVN_FIRST-14)
+#define TVN_SINGLEEXPAND (TVN_FIRST-15)
+#define TVNRET_DEFAULT 0
+#define TVNRET_SKIPOLD 1
+#define TVNRET_SKIPNEW 2
+#endif /* _WIN32_IE >= 0x0400 */
+#define TVIF_DI_SETITEM 0x1000
+#define TVHT_NOWHERE 1
+#define TVHT_ONITEMICON 2
+#define TVHT_ONITEMLABEL 4
+#define TVHT_ONITEM (TVHT_ONITEMICON|TVHT_ONITEMLABEL|TVHT_ONITEMSTATEICON)
+#define TVHT_ONITEMINDENT 8
+#define TVHT_ONITEMBUTTON 16
+#define TVHT_ONITEMRIGHT 32
+#define TVHT_ONITEMSTATEICON 64
+#define TVHT_ABOVE 256
+#define TVHT_BELOW 512
+#define TVHT_TORIGHT 1024
+#define TVHT_TOLEFT 2048
+#define TCHT_NOWHERE 1
+#define TCHT_ONITEMICON 2
+#define TCHT_ONITEMLABEL 4
+#define TCHT_ONITEM (TCHT_ONITEMICON|TCHT_ONITEMLABEL)
+#define TCS_FORCEICONLEFT 16
+#define TCS_FORCELABELLEFT 32
+#define TCS_TABS 0
+#define TCS_BUTTONS 256
+#define TCS_SINGLELINE 0
+#define TCS_MULTILINE 512
+#define TCS_RIGHTJUSTIFY 0
+#define TCS_FIXEDWIDTH 1024
+#define TCS_RAGGEDRIGHT 2048
+#define TCS_FOCUSONBUTTONDOWN 0x1000
+#define TCS_OWNERDRAWFIXED 0x2000
+#define TCS_TOOLTIPS 0x4000
+#define TCS_FOCUSNEVER 0x8000
+#if (_WIN32_IE >= 0x0300)
+#define TCS_BOTTOM 2
+#define TCS_RIGHT 2
+#define TCS_VERTICAL 128
+#define TCS_SCROLLOPPOSITE 0x0001
+#define TCS_HOTTRACK 0x0040
+#define TCS_MULTISELECT 0x0004
+#endif
+#if( _WIN32_IE >= 0x0400 )
+#define TCS_FLATBUTTONS 0x0008
+#define TCS_EX_FLATSEPARATORS 0x00000001
+#define TCS_EX_REGISTERDROP 0x00000002
+#endif /* _WIN32_IE >= 0x0400 */
+#define TCIF_TEXT 1
+#define TCIF_IMAGE 2
+#define TCIF_RTLREADING 4
+#define TCIF_PARAM 8
+#if (_WIN32_IE >= 0x0400)
+#define TCIF_STATE 16
+#endif
+#define TCIS_BUTTONPRESSED 1
+#if (_WIN32_IE >= 0x0400)
+#define TCIS_HIGHLIGHTED 2
+#endif
+#define TCM_FIRST 0x1300
+#define TCM_GETIMAGELIST (TCM_FIRST+2)
+#define TCM_SETIMAGELIST (TCM_FIRST+3)
+#define TCM_GETITEMCOUNT (TCM_FIRST+4)
+#define TCM_GETITEMA (TCM_FIRST+5)
+#define TCM_GETITEMW (TCM_FIRST+60)
+#define TCM_SETITEMA (TCM_FIRST+6)
+#define TCM_SETITEMW (TCM_FIRST+61)
+#define TCM_INSERTITEMA (TCM_FIRST+7)
+#define TCM_INSERTITEMW (TCM_FIRST+62)
+#define TCM_DELETEITEM (TCM_FIRST+8)
+#define TCM_DELETEALLITEMS (TCM_FIRST+9)
+#define TCM_GETITEMRECT (TCM_FIRST+10)
+#define TCM_GETCURSEL (TCM_FIRST+11)
+#define TCM_SETCURSEL (TCM_FIRST+12)
+#define TCM_HITTEST (TCM_FIRST+13)
+#define TCM_SETITEMEXTRA (TCM_FIRST+14)
+
+#define TCM_ADJUSTRECT (TCM_FIRST+40)
+#define TCM_SETITEMSIZE (TCM_FIRST+41)
+#define TCM_REMOVEIMAGE (TCM_FIRST+42)
+#define TCM_SETPADDING (TCM_FIRST+43)
+#define TCM_GETROWCOUNT (TCM_FIRST+44)
+#define TCM_GETTOOLTIPS (TCM_FIRST+45)
+#define TCM_SETTOOLTIPS (TCM_FIRST+46)
+#define TCM_GETCURFOCUS (TCM_FIRST+47)
+#define TCM_SETCURFOCUS (TCM_FIRST+48)
+#define TCM_SETMINTABWIDTH (TCM_FIRST + 49)
+#define TCM_DESELECTALL (TCM_FIRST + 50)
+#if (_WIN32_IE >=0x0400)
+#define TCM_HIGHLIGHTITEM (TCM_FIRST + 51)
+#define TCM_SETEXTENDEDSTYLE (TCM_FIRST + 52)
+#define TCM_GETEXTENDEDSTYLE (TCM_FIRST + 53)
+#define TCM_SETUNICODEFORMAT CCM_SETUNICODEFORMAT
+#define TCM_GETUNICODEFORMAT CCM_GETUNICODEFORMAT
+#endif /* _WIN32_IE >=0x0400 */
+#define TCN_KEYDOWN TCN_FIRST
+#define TCN_SELCHANGE (TCN_FIRST-1)
+#define TCN_SELCHANGING (TCN_FIRST-2)
+#define NM_OUTOFMEMORY (NM_FIRST-1)
+#define NM_CLICK (NM_FIRST-2)
+#define NM_DBLCLK (NM_FIRST-3)
+#define NM_RETURN (NM_FIRST-4)
+#define NM_RCLICK (NM_FIRST-5)
+#define NM_RDBLCLK (NM_FIRST-6)
+#define NM_SETFOCUS (NM_FIRST-7)
+#define NM_KILLFOCUS (NM_FIRST-8)
+#define NM_CUSTOMDRAW (NM_FIRST-12)
+#define NM_HOVER (NM_FIRST-13)
+#define NM_NCHITTEST (NM_FIRST-14)
+#define NM_KEYDOWN (NM_FIRST-15)
+#define NM_RELEASEDCAPTURE (NM_FIRST-16)
+#define NM_SETCURSOR (NM_FIRST-17)
+#define NM_CHAR (NM_FIRST-18)
+#define NM_TOOLTIPSCREATED (NM_FIRST-19)
+#define SBARS_SIZEGRIP 256
+#define CCM_FIRST 0x2000
+#define CCM_LAST (CCM_FIRST+0x200)
+#define CCM_SETBKCOLOR 8193
+#define CCM_SETCOLORSCHEME 8194
+#define CCM_GETCOLORSCHEME 8195
+#define CCM_GETDROPTARGET 8196
+#define CCM_SETUNICODEFORMAT 8197
+#define CCM_GETUNICODEFORMAT 8198
+#define CCM_SETVERSION 0x2007
+#define CCM_GETVERSION 0x2008
+#define CCM_SETNOTIFYWINDOW 0x2009
+#if (_WIN32_WINNT >= 0x0501)
+#define CCM_SETWINDOWTHEME 0x200b
+#define CCM_DPISCALE 0x200c
+#endif
+#define ICC_LISTVIEW_CLASSES 1
+#define ICC_TREEVIEW_CLASSES 2
+#define ICC_BAR_CLASSES 4
+#define ICC_TAB_CLASSES 8
+#define ICC_UPDOWN_CLASS 16
+#define ICC_PROGRESS_CLASS 32
+#define ICC_HOTKEY_CLASS 64
+#define ICC_ANIMATE_CLASS 128
+#define ICC_WIN95_CLASSES 255
+#define ICC_DATE_CLASSES 256
+#define ICC_USEREX_CLASSES 512
+#define ICC_COOL_CLASSES 1024
+#if (_WIN32_IE >= 0x0400)
+#define ICC_INTERNET_CLASSES 2048
+#define ICC_PAGESCROLLER_CLASS 4096
+#define ICC_NATIVEFNTCTL_CLASS 8192
+#define INFOTIPSIZE 1024
+#endif /* _WIN32_IE */
+#if (_WIN32_WINNT >= 0x501)
+#define ICC_STANDARD_CLASSES 0x00004000
+#define ICC_LINK_CLASS 0x00008000
+#endif
+#define GDTR_MIN 1
+#define GDTR_MAX 2
+#define GMR_VISIBLE 0
+#define GMR_DAYSTATE 1
+#define GDT_ERROR -1
+#define GDT_VALID 0
+#define GDT_NONE 1
+#define DTS_UPDOWN 1
+#define DTS_SHOWNONE 2
+#define DTS_SHORTDATEFORMAT 0
+#define DTS_LONGDATEFORMAT 4
+#define DTS_TIMEFORMAT 9
+#define DTS_APPCANPARSE 16
+#define DTS_RIGHTALIGN 32
+#if ( _WIN32_IE >= 0x500 )
+#define DTS_SHORTDATECENTURYFORMAT 0x000C
+#endif /* _WIN32_IE >= 0x500 */
+#define MCS_DAYSTATE 1
+#define MCS_MULTISELECT 2
+#define MCS_WEEKNUMBERS 4
+#if (_WIN32_IE >= 0x0400)
+#define MCS_NOTODAYCIRCLE 0x0008
+#define MCS_NOTODAY 0x0010
+#else /* _WIN32_IE >= 0x0400 */
+#define MCS_NOTODAY 0x0008
+#endif /* _WIN32_IE >= 0x0400 */
+#define DTM_GETSYSTEMTIME 0x1001
+#define DTM_SETSYSTEMTIME 0x1002
+#define DTM_GETRANGE 0x1003
+#define DTM_SETRANGE 0x1004
+#define DTM_SETFORMATA 0x1005
+#define DTM_SETFORMATW 0x1050
+#define DTM_SETMCCOLOR 0x1006
+#define DTM_GETMCCOLOR 0x1007
+#define DTM_GETMONTHCAL 0x1008
+#define DTM_SETMCFONT 0x1009
+#define DTM_GETMCFONT 0x100a
+#define DTN_USERSTRINGA ((UINT)-758)
+#define DTN_USERSTRINGW ((UINT)-745)
+#define DTN_WMKEYDOWNA ((UINT)-757)
+#define DTN_WMKEYDOWNW ((UINT)-744)
+#define DTN_FORMATA ((UINT)-756)
+#define DTN_FORMATW ((UINT)-743)
+#define DTN_FORMATQUERYA ((UINT)-755)
+#define DTN_FORMATQUERYW ((UINT)-742)
+#define DTN_DROPDOWN ((UINT)-754)
+#define DTN_CLOSEUP ((UINT)-753)
+#define DTN_DATETIMECHANGE ((UINT)-759)
+#define MCM_GETCURSEL 0x1001
+#define MCM_SETCURSEL 0x1002
+#define MCM_GETMAXSELCOUNT 0x1003
+#define MCM_SETMAXSELCOUNT 0x1004
+#define MCM_GETSELRANGE 0x1005
+#define MCM_SETSELRANGE 0x1006
+#define MCM_GETMONTHRANGE 0x1007
+#define MCM_SETDAYSTATE 0x1008
+#define MCM_GETMINREQRECT 0x1009
+#define MCM_SETCOLOR 0x100a
+#define MCM_GETCOLOR 0x100b
+#define MCM_SETTODAY 0x100c
+#define MCM_GETTODAY 0x100d
+#define MCM_HITTEST 0x100e
+#define MCM_SETFIRSTDAYOFWEEK 0x100f
+#define MCM_GETFIRSTDAYOFWEEK 0x1010
+#define MCM_GETRANGE 0x1011
+#define MCM_SETRANGE 0x1012
+#define MCM_GETMONTHDELTA 0x1013
+#define MCM_SETMONTHDELTA 0x1014
+#define MCM_GETMAXTODAYWIDTH 0x1015
+#define MCM_GETUNICODEFORMAT CCM_GETUNICODEFORMAT
+#define MCM_SETUNICODEFORMAT CCM_SETUNICODEFORMAT
+#define MCN_SELCHANGE ((UINT)-749)
+#define MCN_GETDAYSTATE ((UINT)-747)
+#define MCN_SELECT ((UINT)-746)
+#define ODT_HEADER 100
+#define ODT_TAB 101
+#define ODT_LISTVIEW 102
+#define SB_SETBKCOLOR 0x2001
+#if (_WIN32_IE >= 0x0300)
+#define SB_ISSIMPLE 1038
+#define MCSC_BACKGROUND 0
+#define MCSC_TEXT 1
+#define MCSC_TITLEBK 2
+#define MCSC_TITLETEXT 3
+#define MCSC_MONTHBK 4
+#define MCSC_TRAILINGTEXT 5
+#endif
+#if (_WIN32_IE >= 0x0400)
+#define MCHT_TITLE 0x10000
+#define MCHT_CALENDAR 0x20000
+#define MCHT_TODAYLINK 0x30000
+#define MCHT_NEXT 0x1000000
+#define MCHT_PREV 0x2000000
+#define MCHT_NOWHERE 0x00
+#define MCHT_TITLEBK (MCHT_TITLE)
+#define MCHT_TITLEMONTH (MCHT_TITLE | 0x0001)
+#define MCHT_TITLEYEAR (MCHT_TITLE | 0x0002)
+#define MCHT_TITLEBTNNEXT (MCHT_TITLE | MCHT_NEXT | 0x0003)
+#define MCHT_TITLEBTNPREV (MCHT_TITLE | MCHT_PREV | 0x0003)
+#define MCHT_CALENDARBK (MCHT_CALENDAR)
+#define MCHT_CALENDARDATE (MCHT_CALENDAR | 0x0001)
+#define MCHT_CALENDARDATENEXT (MCHT_CALENDARDATE | MCHT_NEXT)
+#define MCHT_CALENDARDATEPREV (MCHT_CALENDARDATE | MCHT_PREV)
+#define MCHT_CALENDARDAY (MCHT_CALENDAR | 0x0002)
+#define MCHT_CALENDARWEEKNUM (MCHT_CALENDAR | 0x0003)
+#endif /* _WIN32_IE >= 0x0400 */
+#define RBS_TOOLTIPS 256
+#define RBS_VARHEIGHT 512
+#define RBS_BANDBORDERS 1024
+#define RBS_FIXEDORDER 2048
+#define RBIM_IMAGELIST 1
+#define RB_SETCOLORSCHEME CCM_SETCOLORSCHEME
+#define RB_GETCOLORSCHEME CCM_GETCOLORSCHEME
+#define RBBS_BREAK 0x0001
+#define RBBS_FIXEDSIZE 0x0002
+#define RBBS_CHILDEDGE 0x0004
+#define RBBS_HIDDEN 0x0008
+#define RBBS_NOVERT 0x0010
+#define RBBS_FIXEDBMP 0x0020
+#define RBBS_VARIABLEHEIGHT 0x0040
+#define RBBS_GRIPPERALWAYS 0x0080
+#define RBBS_NOGRIPPER 0x0100
+#if (_WIN32_IE >= 0x0500)
+#define RBBS_USECHEVRON 0x0200
+#if (_WIN32_IE >= 0x0501)
+#define RBBS_HIDETITLE 0x0400
+#define RBBS_TOPALIGN 0x0800
+#endif /* _WIN32_IE >= 0x0501 */
+#endif /* _WIN32_IE >= 0x0500 */
+#define RBBIM_STYLE 1
+#define RBBIM_COLORS 2
+#define RBBIM_TEXT 4
+#define RBBIM_IMAGE 8
+#define RBBIM_CHILD 16
+#define RBBIM_CHILDSIZE 32
+#define RBBIM_SIZE 64
+#define RBBIM_BACKGROUND 128
+#define RBBIM_ID 256
+#define RB_INSERTBANDA (WM_USER+1)
+#define RB_INSERTBANDW (WM_USER+10)
+#define RB_DELETEBAND (WM_USER+2)
+#define RB_GETBARINFO (WM_USER+3)
+#define RB_SETBARINFO (WM_USER+4)
+#define RB_GETBANDCOUNT (WM_USER+12)
+#define RB_GETROWCOUNT (WM_USER+13)
+#define RB_GETROWHEIGHT (WM_USER+14)
+#define RB_SETBANDINFOA (WM_USER+6)
+#define RB_SETBANDINFOW (WM_USER+11)
+#define RB_SETPARENT (WM_USER+7)
+#define RBN_HEIGHTCHANGE RBN_FIRST
+#if (_WIN32_IE >= 0x0300)
+#define LVN_ODCACHEHINT (LVN_FIRST-13)
+#define LVN_ODFINDITEMA (LVN_FIRST-52)
+#define LVN_ODFINDITEMW (LVN_FIRST-79)
+#define LVN_ITEMACTIVATE (LVN_FIRST-14)
+#define LVN_ODSTATECHANGED (LVN_FIRST-15)
+#ifdef UNICODE
+#define LVN_ODFINDITEM LVN_ODFINDITEMW
+#else
+#define LVN_ODFINDITEM LVN_ODFINDITEMA
+#endif
+#endif /* _WIN32_IE */
+#if (_WIN32_IE >= 0x0400)
+#define SB_SETICON 1039
+#define SB_SETTIPTEXTA 1040
+#define SB_SETTIPTEXTW 1041
+#define SB_GETTIPTEXTA 1042
+#define SB_GETTIPTEXTW 1043
+#define SB_GETICON 1044
+#define SB_SETUNICODEFORMAT 0x2005
+#define SB_GETUNICODEFORMAT 0x2006
+#define PGF_INVISIBLE 0
+#define PGF_NORMAL 1
+#define PGF_GRAYED 2
+#define PGF_DEPRESSED 4
+#define PGF_HOT 8
+#define PGB_TOPORLEFT 0
+#define PGB_BOTTOMORRIGHT 1
+#define PGF_SCROLLUP 1
+#define PGF_SCROLLDOWN 2
+#define PGF_SCROLLLEFT 4
+#define PGF_SCROLLRIGHT 8
+#define PGK_SHIFT 1
+#define PGK_CONTROL 2
+#define PGK_MENU 4
+#define PGF_CALCWIDTH 1
+#define PGF_CALCHEIGHT 2
+#define PGM_FIRST 0x1400
+#define PGM_SETCHILD (PGM_FIRST+1)
+#define PGM_RECALCSIZE (PGM_FIRST+2)
+#define PGM_FORWARDMOUSE (PGM_FIRST+3)
+#define PGM_SETBKCOLOR (PGM_FIRST+4)
+#define PGM_GETBKCOLOR (PGM_FIRST+5)
+#define PGM_SETBORDER (PGM_FIRST+6)
+#define PGM_GETBORDER (PGM_FIRST+7)
+#define PGM_SETPOS (PGM_FIRST+8)
+#define PGM_GETPOS (PGM_FIRST+9)
+#define PGM_SETBUTTONSIZE (PGM_FIRST+10)
+#define PGM_GETBUTTONSIZE (PGM_FIRST+11)
+#define PGM_GETBUTTONSTATE (PGM_FIRST+12)
+#define PGM_GETDROPTARGET CCM_GETDROPTARGET
+#define RBS_REGISTERDROP 4096
+#define RBS_AUTOSIZE 8192
+#define RBS_VERTICALGRIPPER 16384
+#define RBS_DBLCLKTOGGLE 32768
+#define RBBIM_IDEALSIZE 512
+#define RBBIM_LPARAM 1024
+#define RBBIM_HEADERSIZE 2048
+#define RB_HITTEST (WM_USER+8)
+#define RB_GETRECT (WM_USER+9)
+#define RB_IDTOINDEX (WM_USER+16)
+#define RB_GETTOOLTIPS (WM_USER+17)
+#define RB_SETTOOLTIPS (WM_USER+18)
+#define RB_SETBKCOLOR (WM_USER+19)
+#define RB_GETBKCOLOR (WM_USER+20)
+#define RB_SETTEXTCOLOR (WM_USER+21)
+#define RB_GETTEXTCOLOR (WM_USER+22)
+#define RB_SIZETORECT (WM_USER+23)
+#define RB_BEGINDRAG (WM_USER+24)
+#define RB_ENDDRAG (WM_USER+25)
+#define RB_DRAGMOVE (WM_USER+26)
+#define RB_GETBARHEIGHT (WM_USER+27)
+#define RB_GETBANDINFOW (WM_USER+28)
+#define RB_GETBANDINFOA (WM_USER+29)
+#define RB_MINIMIZEBAND (WM_USER+30)
+#define RB_MAXIMIZEBAND (WM_USER+31)
+#define RB_GETDROPTARGET CCM_GETDROPTARGET
+#define RB_GETBANDBORDERS (WM_USER+34)
+#define RB_SHOWBAND (WM_USER+35)
+#define RB_SETPALETTE (WM_USER+37)
+#define RB_GETPALETTE (WM_USER+38)
+#define RB_MOVEBAND (WM_USER+39)
+#define RB_SETUNICODEFORMAT CCM_SETUNICODEFORMAT
+#define RB_GETUNICODEFORMAT CCM_GETUNICODEFORMAT
+#define RBN_GETOBJECT (RBN_FIRST-1)
+#define RBN_LAYOUTCHANGED (RBN_FIRST-2)
+#define RBN_AUTOSIZE (RBN_FIRST-3)
+#define RBN_BEGINDRAG (RBN_FIRST-4)
+#define RBN_ENDDRAG (RBN_FIRST-5)
+#define RBN_DELETINGBAND (RBN_FIRST-6)
+#define RBN_DELETEDBAND (RBN_FIRST-7)
+#define RBN_CHILDSIZE (RBN_FIRST-8)
+#define RBNM_ID 1
+#define RBNM_STYLE 2
+#define RBNM_LPARAM 4
+#define RBHT_NOWHERE 1
+#define RBHT_CAPTION 2
+#define RBHT_CLIENT 3
+#define RBHT_GRABBER 4
+#ifdef UNICODE
+#define SB_SETTIPTEXT SB_SETTIPTEXTW
+#define SB_GETTIPTEXT SB_GETTIPTEXTW
+#define RB_GETBANDINFO RB_GETBANDINFOW
+#else
+#define SB_SETTIPTEXT SB_SETTIPTEXTA
+#define SB_GETTIPTEXT SB_GETTIPTEXTA
+#define RB_GETBANDINFO RB_GETBANDINFOA
+#endif
+#else
+#define RB_GETBANDINFO (WM_USER+5)
+#endif /* _WIN32_IE >= 0x0400 */
+#define CBEM_INSERTITEMA (WM_USER + 1)
+#define CBEM_SETIMAGELIST (WM_USER + 2)
+#define CBEM_GETIMAGELIST (WM_USER + 3)
+#define CBEM_GETITEMA (WM_USER + 4)
+#define CBEM_SETITEMA (WM_USER + 5)
+#define CBEM_DELETEITEM CB_DELETESTRING
+#define CBEM_GETCOMBOCONTROL (WM_USER + 6)
+#define CBEM_GETEDITCONTROL (WM_USER + 7)
+#define CBEM_SETEXSTYLE (WM_USER + 8)
+#define CBEM_GETEXSTYLE (WM_USER + 9)
+#if (_WIN32_IE >= 0x0400)
+#define CBEM_SETEXTENDEDSTYLE (WM_USER + 14)
+#define CBEM_GETEXTENDEDSTYLE (WM_USER + 9)
+#define CBEM_SETUNICODEFORMAT CCM_SETUNICODEFORMAT
+#define CBEM_GETUNICODEFORMAT CCM_GETUNICODEFORMAT
+#endif /* _WIN32_IE >= 0x0400 */
+#define CBEM_HASEDITCHANGED (WM_USER + 10)
+#define CBEM_INSERTITEMW (WM_USER + 11)
+#define CBEM_SETITEMW (WM_USER + 12)
+#define CBEM_GETITEMW (WM_USER + 13)
+#define DA_LAST 0x7fffffff
+#define DPA_APPEND 0x7fffffff
+#define DPA_ERR -1
+#define DSA_APPEND 0x7fffffff
+#define DSA_ERR -1
+#define DPAS_SORTED 1
+#define DPAS_INSERTBEFORE 2
+#define DPAS_INSERTAFTER 4
+#if (_WIN32_IE >= 0x400)
+#define WSB_PROP_CYVSCROLL 1
+#define WSB_PROP_CXHSCROLL 2
+#define WSB_PROP_CYHSCROLL 4
+#define WSB_PROP_CXVSCROLL 8
+#define WSB_PROP_CXHTHUMB 16
+#define WSB_PROP_CYVTHUMB 32
+#define WSB_PROP_VBKGCOLOR 64
+#define WSB_PROP_HBKGCOLOR 128
+#define WSB_PROP_VSTYLE 256
+#define WSB_PROP_HSTYLE 512
+#define WSB_PROP_WINSTYLE 1024
+#define WSB_PROP_PALETTE 2048
+#define WSB_PROP_MASK 0xfff
+#define FSB_FLAT_MODE 2
+#define FSB_ENCARTA_MODE 1
+#define FSB_REGULAR_MODE 0
+#endif /* _WIN32_IE >= 0x400 */
+#if (_WIN32_WINNT >= 0x0501)
+#define LIF_ITEMINDEX 0x00000001
+#define LIF_STATE 0x00000002
+#define LIF_ITEMID 0x00000004
+#define LIF_URL 0x00000008
+#define LIS_FOCUSED 0x00000001
+#define LIS_ENABLED 0x00000002
+#define LIS_VISITED 0x00000004
+#define LM_HITTEST (WM_USER + 768)
+#define LM_GETIDEALHEIGHT (WM_USER + 769)
+#define LM_SETITEM (WM_USER + 770)
+#define LM_GETITEM (WM_USER + 771)
+#define MAX_LINKID_TEXT 48
+#define L_MAX_URL_LENGTH 2084
+#endif
+
+#ifndef RC_INVOKED
+typedef struct tagCOMBOBOXEXITEMA{
+ UINT mask;
+ int iItem;
+ LPSTR pszText;
+ int cchTextMax;
+ int iImage;
+ int iSelectedImage;
+ int iOverlay;
+ int iIndent;
+ LPARAM lParam;
+} COMBOBOXEXITEMA, *PCOMBOBOXEXITEMA;
+typedef COMBOBOXEXITEMA CONST *PCCOMBOEXITEMA;
+typedef struct tagCOMBOBOXEXITEMW{
+ UINT mask;
+ int iItem;
+ LPWSTR pszText;
+ int cchTextMax;
+ int iImage;
+ int iSelectedImage;
+ int iOverlay;
+ int iIndent;
+ LPARAM lParam;
+} COMBOBOXEXITEMW, *PCOMBOBOXEXITEMW;
+typedef COMBOBOXEXITEMW CONST *PCCOMBOEXITEMW;
+#if (_WIN32_IE >= 0x0400)
+typedef struct {
+ NMHDR hdr;
+ COMBOBOXEXITEMA ceItem;
+} NMCOMBOBOXEXA, *PNMCOMBOBOXEXA;
+typedef struct {
+ NMHDR hdr;
+ COMBOBOXEXITEMW ceItem;
+} NMCOMBOBOXEXW, *PNMCOMBOBOXEXW;
+typedef struct {
+ NMHDR hdr;
+ int iItemid;
+ WCHAR szText[CBEMAXSTRLEN];
+}NMCBEDRAGBEGINW, *LPNMCBEDRAGBEGINW, *PNMCBEDRAGBEGINW;
+typedef struct {
+ NMHDR hdr;
+ int iItemid;
+ char szText[CBEMAXSTRLEN];
+}NMCBEDRAGBEGINA, *LPNMCBEDRAGBEGINA, *PNMCBEDRAGBEGINA;
+typedef struct tagNMIPADDRESS{
+ NMHDR hdr;
+ int iField;
+ int iValue;
+} NMIPADDRESS, *LPNMIPADDRESS;
+typedef struct tagLVKEYDOWN {
+ NMHDR hdr;
+ WORD wVKey;
+ UINT flags;
+} NMLVKEYDOWN, *LPNMLVKEYDOWN;
+typedef struct {
+ NMHDR hdr;
+ DWORD dwFlag;
+ int iWidth;
+ int iHeight;
+} NMPGCALCSIZE, *LPNMPGCALCSIZE;
+typedef struct {
+ NMHDR hdr;
+ BOOL fwKeys;
+ RECT rcParent;
+ int iDir;
+ int iXpos;
+ int iYpos;
+ int iScroll;
+} NMPGSCROLL, *LPNMPGSCROLL;
+typedef struct tagNMSELCHANGE {
+ NMHDR nmhdr;
+ SYSTEMTIME stSelStart;
+ SYSTEMTIME stSelEnd;
+} NMSELCHANGE, *LPNMSELCHANGE;
+typedef struct tagNMTBHOTITEM {
+ NMHDR hdr;
+ int idOld;
+ int idNew;
+ DWORD dwFlags;
+} NMTBHOTITEM, *LPNMTBHOTITEM;
+typedef struct {
+ NMHDR hdr;
+ DWORD dwMask;
+ int idCommand;
+ DWORD_PTR lParam;
+ int iImage;
+ LPSTR pszText;
+ int cchText;
+} NMTBDISPINFOA, *LPNMTBDISPINFOA;
+typedef struct {
+ NMHDR hdr;
+ DWORD dwMask;
+ int idCommand;
+ DWORD_PTR lParam;
+ int iImage;
+ LPWSTR pszText;
+ int cchText;
+} NMTBDISPINFOW, *LPNMTBDISPINFOW;
+typedef struct tagNMTBGETINFOTIPA
+{
+ NMHDR hdr;
+ LPSTR pszText;
+ int cchTextMax;
+ int iItem;
+ LPARAM lParam;
+} NMTBGETINFOTIPA, *LPNMTBGETINFOTIPA;
+typedef struct tagNMTBGETINFOTIPW
+{
+ NMHDR hdr;
+ LPWSTR pszText;
+ int cchTextMax;
+ int iItem;
+ LPARAM lParam;
+} NMTBGETINFOTIPW, *LPNMTBGETINFOTIPW;
+typedef struct tagNMMOUSE {
+ NMHDR hdr;
+ DWORD_PTR dwItemSpec;
+ DWORD_PTR dwItemData;
+ POINT pt;
+ LPARAM dwHitInfo;
+} NMMOUSE, *LPNMMOUSE;
+#endif /*_WIN32_IE >= 0x0400 */
+#if (_WIN32_IE >= 0x0401)
+typedef struct tagNMTOOLTIPSCREATED
+{
+ NMHDR hdr;
+ HWND hwndToolTips;
+} NMTOOLTIPSCREATED, *LPNMTOOLTIPSCREATED;
+#endif
+typedef struct tagNMDATETIMECHANGE
+{
+ NMHDR nmhdr;
+ DWORD dwFlags;
+ SYSTEMTIME st;
+} NMDATETIMECHANGE, *LPNMDATETIMECHANGE;
+typedef struct {
+ NMHDR hdr;
+ BOOL fChanged;
+ int iNewSelection;
+ WCHAR szText[CBEMAXSTRLEN];
+ int iWhy;
+} NMCBEENDEDITW, *LPNMCBEENDEDITW, *PNMCBEENDEDITW;
+typedef struct {
+ NMHDR hdr;
+ BOOL fChanged;
+ int iNewSelection;
+ char szText[CBEMAXSTRLEN];
+ int iWhy;
+} NMCBEENDEDITA, *LPNMCBEENDEDITA,*PNMCBEENDEDITA;
+typedef struct _COLORMAP {
+ COLORREF from;
+ COLORREF to;
+} COLORMAP,*LPCOLORMAP;
+typedef struct {
+ UINT uNotification;
+ HWND hWnd;
+ POINT ptCursor;
+} DRAGLISTINFO,*LPDRAGLISTINFO;
+typedef struct _TBBUTTON {
+ int iBitmap;
+ int idCommand;
+ BYTE fsState;
+ BYTE fsStyle;
+ BYTE bReserved[2];
+ DWORD dwData;
+ int iString;
+} TBBUTTON,*PTBBUTTON,*LPTBBUTTON;
+typedef const TBBUTTON *LPCTBBUTTON;
+#if _WIN32_IE >= 0x400
+typedef struct {
+ UINT cbSize;
+ DWORD dwMask;
+ int idCommand;
+ int iImage;
+ BYTE fsState;
+ BYTE fsStyle;
+ WORD cx;
+ DWORD lParam;
+ LPSTR pszText;
+ int cchText;
+} TBBUTTONINFOA, *LPTBBUTTONINFOA;
+typedef struct {
+ UINT cbSize;
+ DWORD dwMask;
+ int idCommand;
+ int iImage;
+ BYTE fsState;
+ BYTE fsStyle;
+ WORD cx;
+ DWORD lParam;
+ LPWSTR pszText;
+ int cchText;
+} TBBUTTONINFOW, *LPTBBUTTONINFOW;
+typedef struct {
+ int iButton;
+ DWORD dwFlags;
+} TBINSERTMARK, *LPTBINSERTMARK;
+typedef struct tagLVBKIMAGEA {
+ ULONG ulFlags;
+ HBITMAP hbm;
+ LPSTR pszImage;
+ UINT cchImageMax;
+ int xOffsetPercent;
+ int yOffsetPercent;
+} LVBKIMAGEA, *LPLVBKIMAGEA;
+typedef struct tagLVBKIMAGEW {
+ ULONG ulFlags;
+ HBITMAP hbm;
+ LPWSTR pszImage;
+ UINT cchImageMax;
+ int xOffsetPercent;
+ int yOffsetPercent;
+} LVBKIMAGEW, *LPLVBKIMAGEW;
+#endif /* _WIN32_IE >= 0x400 */
+typedef struct {
+ NMHDR hdr;
+ int iItem;
+ TBBUTTON tbButton;
+ int cchText;
+ LPTSTR pszText;
+} TBNOTIFY,*LPTBNOTIFY;
+typedef struct {
+ HKEY hkr;
+ LPCTSTR pszSubKey;
+ LPCTSTR pszValueName;
+} TBSAVEPARAMS;
+typedef struct _IMAGEINFO {
+ HBITMAP hbmImage;
+ HBITMAP hbmMask;
+ int Unused1;
+ int Unused2;
+ RECT rcImage;
+} IMAGEINFO, *LPIMAGEINFO;
+typedef struct _IMAGELIST *HIMAGELIST;
+typedef struct _HDITEMA {
+ UINT mask;
+ int cxy;
+ LPSTR pszText;
+ HBITMAP hbm;
+ int cchTextMax;
+ int fmt;
+ LPARAM lParam;
+#if (_WIN32_IE >= 0x0300)
+ int iImage;
+ int iOrder;
+#endif
+#if (_WIN32_IE >= 0x0500)
+ UINT type;
+ LPVOID pvFilter;
+#endif
+} HDITEMA, * LPHDITEMA;
+typedef struct _HDITEMW {
+ UINT mask;
+ int cxy;
+ LPWSTR pszText;
+ HBITMAP hbm;
+ int cchTextMax;
+ int fmt;
+ LPARAM lParam;
+#if (_WIN32_IE >= 0x0300)
+ int iImage;
+ int iOrder;
+#endif
+#if (_WIN32_IE >= 0x0500)
+ UINT type;
+ LPVOID pvFilter;
+#endif
+} HDITEMW, * LPHDITEMW;
+/* for backward compatibility */
+#define HD_ITEMA HDITEMA
+#define HD_ITEMW HDITEMW
+#define HD_ITEM HDITEM
+typedef struct _HD_LAYOUT {
+ RECT *prc;
+ WINDOWPOS *pwpos;
+} HDLAYOUT, *LPHDLAYOUT;
+#define HD_LAYOUT HDLAYOUT /* backward compatibility */
+typedef struct _HD_HITTESTINFO {
+ POINT pt;
+ UINT flags;
+ int iItem;
+} HD_HITTESTINFO, *LPHDHITTESTINFO;
+typedef struct _HD_NOTIFYA {
+ NMHDR hdr;
+ int iItem;
+ int iButton;
+ HD_ITEMA *pitem;
+} HD_NOTIFYA;
+typedef struct _HD_NOTIFYW {
+ NMHDR hdr;
+ int iItem;
+ int iButton;
+ HD_ITEMW *pitem;
+} HD_NOTIFYW;
+/* FIXME: NMHEADER structure (base for all events of the comctl controls)
+ is the same as HD_NOTIFY depending on the value of _WIN32_IE macro.
+ I'm defining both for now. */
+typedef struct _NMHEADERA {
+ NMHDR hdr;
+ int iItem;
+ int iButton;
+ HD_ITEMA* pitem;
+} NMHEADERA, *LPNMHEADERA;
+
+typedef struct _NMHEADERW {
+ NMHDR hdr;
+ int iItem;
+ int iButton;
+ HD_ITEMW* pitem;
+} NMHEADERW, *LPNMHEADERW;
+#ifdef UNICODE
+#define NMHEADER NMHEADERW
+#define LPNMHEADER LPNMHEADERW
+#else
+#define NMHEADER NMHEADERA
+#define LPNMHEADER LPNMHEADERA
+#endif
+/* End FIXME. */
+typedef struct tagNMHDDISPINFOA {
+ NMHDR hdr;
+ int iItem;
+ UINT mask;
+ LPSTR pszText;
+ int cchTextMax;
+ int iImage;
+ LPARAM lParam;
+} NMHDDISPINFOA, *LPNMHDDISPINFOA;
+typedef struct tagNMHDDISPINFOW {
+ NMHDR hdr;
+ int iItem;
+ UINT mask;
+ LPWSTR pszText;
+ int cchTextMax;
+ int iImage;
+ LPARAM lParam;
+} NMHDDISPINFOW, *LPNMHDDISPINFOW;
+typedef struct tagNMCUSTOMDRAWINFO {
+ NMHDR hdr;
+ DWORD dwDrawStage;
+ HDC hdc;
+ RECT rc;
+ DWORD dwItemSpec;
+ UINT uItemState;
+ LPARAM lItemlParam;
+} NMCUSTOMDRAW, *LPNMCUSTOMDRAW;
+typedef struct tagNMLVCUSTOMDRAW {
+ NMCUSTOMDRAW nmcd;
+ COLORREF clrText;
+ COLORREF clrTextBk;
+#if _WIN32_IE >= 0x0400
+ int iSubItem;
+#endif
+} NMLVCUSTOMDRAW, *LPNMLVCUSTOMDRAW;
+#if (_WIN32_IE >= 0x0400)
+typedef struct tagNMLVGETINFOTIPA
+{
+ NMHDR hdr;
+ DWORD dwFlags;
+ LPSTR pszText;
+ int cchTextMax;
+ int iItem;
+ int iSubItem;
+ LPARAM lParam;
+} NMLVGETINFOTIPA, *LPNMLVGETINFOTIPA;
+typedef struct tagNMLVGETINFOTIPW
+{
+ NMHDR hdr;
+ DWORD dwFlags;
+ LPWSTR pszText;
+ int cchTextMax;
+ int iItem;
+ int iSubItem;
+ LPARAM lParam;
+} NMLVGETINFOTIPW, *LPNMLVGETINFOTIPW;
+#endif /* _WIN32_IE >= 0x0400 */
+typedef struct tagNMTVCUSTOMDRAW {
+ NMCUSTOMDRAW nmcd;
+ COLORREF clrText;
+ COLORREF clrTextBk;
+#if _WIN32_IE >= 0x0400
+ int iLevel;
+#endif
+} NMTVCUSTOMDRAW, *LPNMTVCUSTOMDRAW;
+#if (_WIN32_IE >= 0x400)
+typedef struct _NMTBCUSTOMDRAW {
+ NMCUSTOMDRAW nmcd;
+ HBRUSH hbrMonoDither;
+ HBRUSH hbrLines;
+ HPEN hpenLines;
+ COLORREF clrText;
+ COLORREF clrMark;
+ COLORREF clrTextHighlight;
+ COLORREF clrBtnFace;
+ COLORREF clrBtnHighlight;
+ COLORREF clrHighlightHotTrack;
+ RECT rcText;
+ int nStringBkMode;
+ int nHLStringBkMode;
+#if (_WIN32_WINNT >= 0x0501)
+ int iListGap;
+#endif
+} NMTBCUSTOMDRAW, * LPNMTBCUSTOMDRAW;
+typedef struct tagNMITEMACTIVATE {
+ NMHDR hdr;
+ int iItem;
+ int iSubItem;
+ UINT uNewState;
+ UINT uOldState;
+ UINT uChanged;
+ POINT ptAction;
+ LPARAM lParam;
+ UINT uKeyFlags;
+} NMITEMACTIVATE, *LPNMITEMACTIVATE;
+#endif /* _WIN32_IE >= 0x0400 */
+typedef struct tagTBADDBITMAP {
+ HINSTANCE hInst;
+ UINT nID;
+} TBADDBITMAP,*LPTBADDBITMAP;
+typedef struct tagTBSAVEPARAMSA {
+ HKEY hkr;
+ LPCSTR pszSubKey;
+ LPCSTR pszValueName;
+} TBSAVEPARAMSA;
+typedef struct tagTBSAVEPARAMSW {
+ HKEY hkr;
+ LPCWSTR pszSubKey;
+ LPCWSTR pszValueName;
+} TBSAVEPARAMSW;
+typedef struct {
+ HINSTANCE hInstOld;
+ UINT nIDOld;
+ HINSTANCE hInstNew;
+ UINT nIDNew;
+ int nButtons;
+} TBREPLACEBITMAP,*LPTBREPLACEBITMAP;
+typedef struct tagNMTOOLBARA {
+ NMHDR hdr;
+ int iItem;
+ TBBUTTON tbButton;
+ int cchText;
+ LPSTR pszText;
+#if (_WIN32_IE >= 0x500)
+ RECT rcButton;
+#endif
+} NMTOOLBARA, *LPNMTOOLBARA;
+#define TBNOTIFYA NMTOOLBARA
+#define LPTBNOTIFYA LPNMTOOLBARA
+typedef struct tagNMTOOLBARW {
+ NMHDR hdr;
+ int iItem;
+ TBBUTTON tbButton;
+ int cchText;
+ LPWSTR pszText;
+#if (_WIN32_IE >= 0x500)
+ RECT rcButton;
+#endif
+} NMTOOLBARW, *LPNMTOOLBARW;
+#define TBNOTIFYW NMTOOLBARW
+#define LPTBNOTIFYW LPNMTOOLBARW
+typedef struct tagTOOLINFOA {
+ UINT cbSize;
+ UINT uFlags;
+ HWND hwnd;
+ UINT uId;
+ RECT rect;
+ HINSTANCE hinst;
+ LPSTR lpszText;
+#if (_WIN32_IE >= 0x0300)
+ LPARAM lParam;
+#endif
+} TTTOOLINFOA,*LPTTTOOLINFOA,*PTOOLINFOA;
+#define TOOLINFOA TTTOOLINFOA
+#define LPTOOLINFOA LPTTTOOLINFOA
+#define TTTOOLINFOA_V1_SIZE CCSIZEOF_STRUCT(TTTOOLINFOA, lpszText)
+#define TTTOOLINFOA_V2_SIZE CCSIZEOF_STRUCT(TTTOOLINFOA, lParam)
+#define TTTOOLINFOA_V3_SIZE CCSIZEOF_STRUCT(TTTOOLINFOA, lpReserved)
+typedef struct tagTOOLINFOW {
+ UINT cbSize;
+ UINT uFlags;
+ HWND hwnd;
+ UINT uId;
+ RECT rect;
+ HINSTANCE hinst;
+ LPWSTR lpszText;
+#if (_WIN32_IE >= 0x0300)
+ LPARAM lParam;
+#endif
+} TTTOOLINFOW,*LPTTTOOLINFOW,*PTOOLINFOW;
+#define TOOLINFOW TTTOOLINFOW
+#define LPTOOLINFOW LPTTTOOLINFOW
+#define TTTOOLINFOW_V1_SIZE CCSIZEOF_STRUCT(TTTOOLINFOW, lpszText)
+#define TTTOOLINFOW_V2_SIZE CCSIZEOF_STRUCT(TTTOOLINFOW, lParam)
+#define TTTOOLINFOW_V3_SIZE CCSIZEOF_STRUCT(TTTOOLINFOW, lpReserved)
+typedef struct _TT_HITTESTINFOA {
+ HWND hwnd;
+ POINT pt;
+ TOOLINFOA ti;
+} TTHITTESTINFOA,*LPTTHITTESTINFOA;
+#define LPHITTESTINFOA LPTTHITTESTINFOA
+typedef struct _TT_HITTESTINFOW {
+ HWND hwnd;
+ POINT pt;
+ TOOLINFOW ti;
+} TTHITTESTINFOW,*LPTTHITTESTINFOW;
+#define LPHITTESTINFOW LPTTHITTESTINFOW
+typedef struct tagNMTTDISPINFOA {
+ NMHDR hdr;
+ LPSTR lpszText;
+ char szText[80];
+ HINSTANCE hinst;
+ UINT uFlags;
+#if (_WIN32_IE >= 0x0300)
+ LPARAM lParam;
+#endif
+} NMTTDISPINFOA, *LPNMTTDISPINFOA;
+#define TOOLTIPTEXTA NMTTDISPINFOA
+#define LPTOOLTIPTEXTA LPNMTTDISPINFOA
+typedef struct tagNMTTDISPINFOW {
+ NMHDR hdr;
+ LPWSTR lpszText;
+ WCHAR szText[80];
+ HINSTANCE hinst;
+ UINT uFlags;
+#if (_WIN32_IE >= 0x0300)
+ LPARAM lParam;
+#endif
+} NMTTDISPINFOW, *LPNMTTDISPINFOW;
+#define TOOLTIPTEXTW NMTTDISPINFOW
+#define LPTOOLTIPTEXTW LPNMTTDISPINFOW
+typedef struct _UDACCEL {
+ UINT nSec;
+ UINT nInc;
+} UDACCEL,*LPUDACCEL;
+typedef struct _NM_UPDOWN {
+ NMHDR hdr;
+ int iPos;
+ int iDelta;
+} NMUPDOWN,*LPNMUPDOWN;
+/* for backward compatibility */
+#define NM_UPDOWN NMUPDOWN
+#define LPNM_UPDOWN LPNMUPDOWN
+typedef struct _LVITEMA {
+ UINT mask;
+ int iItem;
+ int iSubItem;
+ UINT state;
+ UINT stateMask;
+ LPSTR pszText;
+ int cchTextMax;
+ int iImage;
+ LPARAM lParam;
+#if (_WIN32_IE >= 0x0300)
+ int iIndent;
+#endif
+#if (_WIN32_WINNT >= 0x0501)
+ int iGroupId;
+ UINT cColumns;
+ PUINT puColumns;
+#endif
+} LVITEMA, FAR *LPLVITEMA;
+#define _LV_ITEMA _LVITEMA
+#define LV_ITEMA LVITEMA
+typedef struct _LVITEMW {
+ UINT mask;
+ int iItem;
+ int iSubItem;
+ UINT state;
+ UINT stateMask;
+ LPWSTR pszText;
+ int cchTextMax;
+ int iImage;
+ LPARAM lParam;
+#if (_WIN32_IE >= 0x0300)
+ int iIndent;
+#endif
+#if (_WIN32_WINNT >= 0x0501)
+ int iGroupId;
+ UINT cColumns;
+ PUINT puColumns;
+#endif
+} LVITEMW, FAR *LPLVITEMW;
+#define _LV_ITEMW _LVITEMW
+#define LV_ITEMW LVITEMW
+typedef struct tagLVFINDINFOA {
+ UINT flags;
+ LPCSTR psz;
+ LPARAM lParam;
+ POINT pt;
+ UINT vkDirection;
+} LVFINDINFOA, FAR* LPFINDINFOA;
+#define _LV_FINDINFOA tagLVFINDINFOA
+#define LV_FINDINFOA LVFINDINFOA
+typedef struct tagLVFINDINFOW {
+ UINT flags;
+ LPCWSTR psz;
+ LPARAM lParam;
+ POINT pt;
+ UINT vkDirection;
+} LVFINDINFOW, FAR* LPFINDINFOW;
+#define _LV_FINDINFOW tagLVFINDINFOW
+#define LV_FINDINFOW LVFINDINFOW
+typedef struct tagNMLVFINDITEMA {
+ NMHDR hdr;
+ int iStart;
+ LVFINDINFOA lvfi;
+} NMLVFINDITEMA, *PNMLVFINDITEMA, FAR *LPNMLVFINDITEMA;
+#define _NMLVFINDITEMA tagNMLVFINDITEMA
+typedef struct tagNMLVFINDITEMW {
+ NMHDR hdr;
+ int iStart;
+ LVFINDINFOW lvfi;
+} NMLVFINDITEMW, *PNMLVFINDITEMW, FAR *LPNMLVFINDITEMW;
+#define _NMLVFINDITEMW tagNMLVFINDITEMW
+typedef struct _LVHITTESTINFO {
+ POINT pt;
+ UINT flags;
+ int iItem;
+#if (_WIN32_IE >= 0x0300)
+ int iSubItem;
+#endif
+} LVHITTESTINFO, FAR *LPLVHITTESTINFO;
+#define _LV_HITTESTINFO _LVHITTESTINFO
+#define LV_HITTESTINFO LVHITTESTINFO
+typedef struct _LVCOLUMNA {
+ UINT mask;
+ int fmt;
+ int cx;
+ LPSTR pszText;
+ int cchTextMax;
+ int iSubItem;
+#if (_WIN32_IE >= 0x0300)
+ int iImage;
+ int iOrder;
+#endif
+} LVCOLUMNA, FAR *LPLVCOLUMNA;
+#define _LV_COLUMNA _LVCOLUMNA
+#define LV_COLUMNA LVCOLUMNA
+typedef struct _LVCOLUMNW {
+ UINT mask;
+ int fmt;
+ int cx;
+ LPWSTR pszText;
+ int cchTextMax;
+ int iSubItem;
+#if (_WIN32_IE >= 0x0300)
+ int iImage;
+ int iOrder;
+#endif
+} LVCOLUMNW, FAR *LPLVCOLUMNW;
+#define _LV_COLUMNW _LVCOLUMNW
+#define LV_COLUMNW LVCOLUMNW
+typedef int(CALLBACK *PFNLVCOMPARE)(LPARAM,LPARAM,LPARAM);
+typedef struct tagNMLISTVIEW {
+ NMHDR hdr;
+ int iItem;
+ int iSubItem;
+ UINT uNewState;
+ UINT uOldState;
+ UINT uChanged;
+ POINT ptAction;
+ LPARAM lParam;
+} NMLISTVIEW, *LPNMLISTVIEW;
+/* for backward compatibility */
+#define _NM_LISTVIEW tagNMLISTVIEW
+#define NM_LISTVIEW NMLISTVIEW
+#define LPNM_LISTVIEW LPNMLISTVIEW
+typedef struct tagNMLVDISPINFOA {
+ NMHDR hdr;
+ LV_ITEMA item;
+} NMLVDISPINFOA, FAR *LPNMLVDISPINFOA;
+#define _LV_DISPINFOA tagNMLVDISPINFOA
+#define LV_DISPINFOA NMLVDISPINFOA
+typedef struct tagNMLVDISPINFOW {
+ NMHDR hdr;
+ LV_ITEMW item;
+} NMLVDISPINFOW, FAR *LPNMLVDISPINFOW;
+#define _LV_DISPINFOW tagNMLVDISPINFOW
+#define LV_DISPINFOW NMLVDISPINFOW
+typedef struct _LV_KEYDOWN {
+ NMHDR hdr;
+ WORD wVKey;
+ UINT flags;
+} LV_KEYDOWN;
+typedef struct tagNMLVCACHEHINT {
+ NMHDR hdr;
+ int iFrom;
+ int iTo;
+} NMLVCACHEHINT, *LPNMLVCACHEHINT;
+#define NM_CACHEHINT NMLVCACHEHINT
+#define PNM_CACHEHINT LPNMLVCACHEHINT
+#define LPNM_CACHEHINT LPNMLVCACHEHINT
+
+typedef struct _TREEITEM *HTREEITEM;
+typedef struct tagTVITEMA {
+ UINT mask;
+ HTREEITEM hItem;
+ UINT state;
+ UINT stateMask;
+ LPSTR pszText;
+ int cchTextMax;
+ int iImage;
+ int iSelectedImage;
+ int cChildren;
+ LPARAM lParam;
+} TVITEMA,*LPTVITEMA;
+#define _TV_ITEMA tagTVITEMA
+#define TV_ITEMA TVITEMA
+#define LPTV_ITEMA LPTVITEMA
+typedef struct tagTVITEMW {
+ UINT mask;
+ HTREEITEM hItem;
+ UINT state;
+ UINT stateMask;
+ LPWSTR pszText;
+ int cchTextMax;
+ int iImage;
+ int iSelectedImage;
+ int cChildren;
+ LPARAM lParam;
+} TVITEMW,*LPTVITEMW;
+#define _TV_ITEMW tagTVITEMW
+#define TV_ITEMW TVITEMW
+#define LPTV_ITEMW LPTVITEMW
+#if (_WIN32_IE >= 0x0400)
+typedef struct tagTVITEMEXA {
+ UINT mask;
+ HTREEITEM hItem;
+ UINT state;
+ UINT stateMask;
+ LPSTR pszText;
+ int cchTextMax;
+ int iImage;
+ int iSelectedImage;
+ int cChildren;
+ LPARAM lParam;
+ int iIntegral;
+} TVITEMEXA, *LPTVITEMEXA;
+typedef struct tagTVITEMEXW {
+ UINT mask;
+ HTREEITEM hItem;
+ UINT state;
+ UINT stateMask;
+ LPWSTR pszText;
+ int cchTextMax;
+ int iImage;
+ int iSelectedImage;
+ int cChildren;
+ LPARAM lParam;
+ int iIntegral;
+} TVITEMEXW, *LPTVITEMEXW;
+#endif /* _WIN32_IE >= 0x0400 */
+typedef struct tagTVINSERTSTRUCTA {
+ HTREEITEM hParent;
+ HTREEITEM hInsertAfter;
+#if (_WIN32_IE >= 0x0400)
+ _ANONYMOUS_UNION union {
+ TVITEMEXA itemex;
+ TV_ITEMA item;
+ } DUMMYUNIONNAME;
+#else
+ TV_ITEMA item;
+#endif
+} TVINSERTSTRUCTA,*LPTVINSERTSTRUCTA;
+#define _TV_INSERTSTRUCTA tagTVINSERTSTRUCTA
+#define TV_INSERTSTRUCTA TVINSERTSTRUCTA
+#define LPTV_INSERTSTRUCTA LPTVINSERTSTRUCTA
+typedef struct tagTVINSERTSTRUCTW {
+ HTREEITEM hParent;
+ HTREEITEM hInsertAfter;
+#if (_WIN32_IE >= 0x0400)
+ _ANONYMOUS_UNION union {
+ TVITEMEXW itemex;
+ TV_ITEMW item;
+ } DUMMYUNIONNAME;
+#else
+ TV_ITEMW item;
+#endif
+} TVINSERTSTRUCTW,*LPTVINSERTSTRUCTW;
+#define _TV_INSERTSTRUCTW tagTVINSERTSTRUCTW
+#define TV_INSERTSTRUCTW TVINSERTSTRUCTW
+#define LPTV_INSERTSTRUCTW LPTVINSERTSTRUCTW
+typedef struct tagTVHITTESTINFO {
+ POINT pt;
+ UINT flags;
+ HTREEITEM hItem;
+} TVHITTESTINFO, *LPTVHITTESTINFO;
+#define _TV_HITTESTINFO tagTVHITTESTINFO
+#define TV_HITTESTINFO TVHITTESTINFO
+#define LPTV_HITTESTINFO LPTVHITTESTINFO
+typedef int(CALLBACK *PFNTVCOMPARE)(LPARAM,LPARAM,LPARAM);
+typedef struct tagTVSORTCB {
+ HTREEITEM hParent;
+ PFNTVCOMPARE lpfnCompare;
+ LPARAM lParam;
+} TVSORTCB,*LPTVSORTCB;
+#define _TV_SORTCB tagTVSORTCB
+#define TV_SORTCB TVSORTCB
+#define LPTV_SORTCB LPTVSORTCB
+typedef struct tagNMTREEVIEWA {
+ NMHDR hdr;
+ UINT action;
+ TV_ITEMA itemOld;
+ TV_ITEMA itemNew;
+ POINT ptDrag;
+} NMTREEVIEWA,*LPNMTREEVIEWA;
+#define _NM_TREEVIEWA tagNMTREEVIEWA
+#define NM_TREEVIEWA NMTREEVIEWA
+#define LPNM_TREEVIEWA LPNMTREEVIEWA
+typedef struct tagNMTREEVIEWW {
+ NMHDR hdr;
+ UINT action;
+ TV_ITEMW itemOld;
+ TV_ITEMW itemNew;
+ POINT ptDrag;
+} NMTREEVIEWW,*LPNMTREEVIEWW;
+#define _NM_TREEVIEWW tagNMTREEVIEWW
+#define NM_TREEVIEWW NMTREEVIEWW
+#define LPNM_TREEVIEWW LPNMTREEVIEWW
+typedef struct tagNMTVDISPINFOA {
+ NMHDR hdr;
+ TVITEMA item;
+} NMTVDISPINFOA, *LPNMTVDISPINFOA;
+#define _TV_DISPINFOA tagNMTVDISPINFOA
+#define TV_DISPINFOA NMTVDISPINFOA
+typedef struct tagNMTVDISPINFOW {
+ NMHDR hdr;
+ TVITEMW item;
+} NMTVDISPINFOW, *LPNMTVDISPINFOW;
+#define _TV_DISPINFOW tagNMTVDISPINFOW
+#define TV_DISPINFOW NMTVDISPINFOW
+#if (_WIN32_IE >= 0x0400)
+typedef struct tagNMTVGETINFOTIPA {
+ NMHDR hdr;
+ LPSTR pszText;
+ int cchTextMax;
+ HTREEITEM hItem;
+ LPARAM lParam;
+} NMTVGETINFOTIPA, *LPNMTVGETINFOTIPA;
+typedef struct tagNMTVGETINFOTIPW {
+ NMHDR hdr;
+ LPWSTR pszText;
+ int cchTextMax;
+ HTREEITEM hItem;
+ LPARAM lParam;
+} NMTVGETINFOTIPW, *LPNMTVGETINFOTIPW;
+#endif
+typedef struct _TV_KEYDOWN {
+ NMHDR hdr;
+ WORD wVKey;
+ UINT flags;
+} TV_KEYDOWN;
+typedef struct _TC_ITEMHEADERA {
+ UINT mask;
+ UINT lpReserved1;
+ UINT lpReserved2;
+ LPSTR pszText;
+ int cchTextMax;
+ int iImage;
+} TC_ITEMHEADERA;
+typedef struct _TC_ITEMHEADERW {
+ UINT mask;
+ UINT lpReserved1;
+ UINT lpReserved2;
+ LPWSTR pszText;
+ int cchTextMax;
+ int iImage;
+} TC_ITEMHEADERW;
+typedef struct tagTCITEMA {
+ UINT mask;
+#if (_WIN32_IE >= 0x0300)
+ DWORD dwState;
+ DWORD dwStateMask;
+#else
+ UINT lpReserved1;
+ UINT lpReserved2;
+#endif
+ LPSTR pszText;
+ int cchTextMax;
+ int iImage;
+ LPARAM lParam;
+} TCITEMA, *LPTCITEMA;
+#define TC_ITEMA TCITEMA
+typedef struct tagTCITEMW {
+ UINT mask;
+#if (_WIN32_IE >= 0x0300)
+ DWORD dwState;
+ DWORD dwStateMask;
+#else
+ UINT lpReserved1;
+ UINT lpReserved2;
+#endif
+ LPWSTR pszText;
+ int cchTextMax;
+ int iImage;
+ LPARAM lParam;
+} TCITEMW, *LPTCITEMW;
+#define TC_ITEMW TCITEMW
+typedef struct tagTCHITTESTINFO {
+ POINT pt;
+ UINT flags;
+} TCHITTESTINFO, *LPTCHITTESTINFO;
+#define TC_HITTESTINFO TCHITTESTINFO
+#define LPTC_HITTESTINFO LPTCHITTESTINFO
+typedef struct _TC_KEYDOWN {
+ NMHDR hdr;
+ WORD wVKey;
+ UINT flags;
+} TC_KEYDOWN;
+#if (_WIN32_IE >= 0x0300)
+typedef struct tagINITCOMMONCONTROLSEX {
+ DWORD dwSize;
+ DWORD dwICC;
+} INITCOMMONCONTROLSEX,*LPINITCOMMONCONTROLSEX;
+#endif
+typedef struct tagPBRANGE {
+ int iLow;
+ int iHigh;
+} PBRANGE,*PPBRANGE;
+typedef struct tagCOLORSCHEME {
+ DWORD dwSize;
+ COLORREF clrBtnHighlight;
+ COLORREF clrBtnShadow;
+} COLORSCHEME,*LPCOLORSCHEME;
+typedef struct tagMCHITTESTINFO {
+ UINT cbSize;
+ POINT pt;
+ UINT uHit;
+ SYSTEMTIME st;
+}MCHITTESTINFO, *PMCHITTESTINFO;
+typedef DWORD MONTHDAYSTATE;
+typedef MONTHDAYSTATE *LPMONTHDAYSTATE;
+typedef struct tagNMDAYSTATE {
+ NMHDR nmhdr;
+ SYSTEMTIME stStart;
+ int cDayState;
+ LPMONTHDAYSTATE prgDayState;
+}NMDAYSTATE,*LPNMDAYSTATE;
+typedef struct tagREBARINFO {
+ UINT cbSize;
+ UINT fMask;
+ HIMAGELIST himl;
+} REBARINFO,*LPREBARINFO;
+typedef struct tagREBARBANDINFOA {
+ UINT cbSize;
+ UINT fMask;
+ UINT fStyle;
+ COLORREF clrFore;
+ COLORREF clrBack;
+ LPSTR lpText;
+ UINT cch;
+ int iImage;
+ HWND hwndChild;
+ UINT cxMinChild;
+ UINT cyMinChild;
+ UINT cx;
+ HBITMAP hbmBack;
+ UINT wID;
+#if (_WIN32_IE >= 0x0400)
+ UINT cyChild;
+ UINT cyMaxChild;
+ UINT cyIntegral;
+ UINT cxIdeal;
+ LPARAM lParam;
+ UINT cxHeader;
+#endif
+} REBARBANDINFOA,*LPREBARBANDINFOA;
+typedef struct tagREBARBANDINFOW {
+ UINT cbSize;
+ UINT fMask;
+ UINT fStyle;
+ COLORREF clrFore;
+ COLORREF clrBack;
+ LPWSTR lpText;
+ UINT cch;
+ int iImage;
+ HWND hwndChild;
+ UINT cxMinChild;
+ UINT cyMinChild;
+ UINT cx;
+ HBITMAP hbmBack;
+ UINT wID;
+#if (_WIN32_IE >= 0x0400)
+ UINT cyChild;
+ UINT cyMaxChild;
+ UINT cyIntegral;
+ UINT cxIdeal;
+ LPARAM lParam;
+ UINT cxHeader;
+#endif
+} REBARBANDINFOW,*LPREBARBANDINFOW;
+typedef REBARBANDINFOA const *LPCREBARBANDINFOA;
+typedef REBARBANDINFOW const *LPCREBARBANDINFOW;
+#define REBARBANDINFOA_V3_SIZE CCSIZEOF_STRUCT(REBARBANDINFOA,wID)
+#define REBARBANDINFOW_V3_SIZE CCSIZEOF_STRUCT(REBARBANDINFOW, wID)
+#if (_WIN32_IE >= 0x0300)
+typedef struct tagNMLVODSTATECHANGE {
+ NMHDR hdr;
+ int iFrom;
+ int iTo;
+ UINT uNewState;
+ UINT uOldState;
+} NMLVODSTATECHANGE, *LPNMLVODSTATECHANGE;
+typedef struct tagIMAGELISTDRAWPARAMS {
+ DWORD cbSize;
+ HIMAGELIST himl;
+ int i;
+ HDC hdcDst;
+ int x;
+ int y;
+ int cx;
+ int cy;
+ int xBitmap;
+ int yBitmap;
+ COLORREF rgbBk;
+ COLORREF rgbFg;
+ UINT fStyle;
+ DWORD dwRop;
+#if (_WIN32_WINNT >= 0x0501)
+ DWORD fState;
+ DWORD Frame;
+ COLORREF crEffect;
+#endif
+} IMAGELISTDRAWPARAMS,*LPIMAGELISTDRAWPARAMS;
+#endif /* (_WIN32_IE >= 0x0300) */
+#if (_WIN32_IE >= 0x0400)
+typedef struct tagNMREBARCHILDSIZE {
+ NMHDR hdr;
+ UINT uBand;
+ UINT wID;
+ RECT rcChild;
+ RECT rcBand;
+} NMREBARCHILDSIZE,*LPNMREBARCHILDSIZE;
+typedef struct tagNMREBAR {
+ NMHDR hdr;
+ DWORD dwMask;
+ UINT uBand;
+ UINT fStyle;
+ UINT wID;
+ LPARAM lParam;
+} NMREBAR,*LPNMREBAR;
+typedef struct tagNMRBAUTOSIZE {
+ NMHDR hdr;
+ BOOL fChanged;
+ RECT rcTarget;
+ RECT rcActual;
+} NMRBAUTOSIZE,*LPNMRBAUTOSIZE;
+#if (_WIN32_IE >= 0x0500)
+typedef struct tagNMREBARCHEVRON {
+ NMHDR hdr;
+ UINT uBand;
+ UINT wID;
+ LPARAM lParam;
+ RECT rc;
+ LPARAM lParamNM;
+} NMREBARCHEVRON, *LPNMREBARCHEVRON;
+#endif
+typedef struct _RB_HITTESTINFO {
+ POINT pt;
+ UINT flags;
+ int iBand;
+} RBHITTESTINFO,*LPRBHITTESTINFO;
+#endif
+typedef struct _DSA *HDSA;
+typedef struct _DPA *HDPA;
+typedef INT (CALLBACK *PFNDPAENUMCALLBACK)(PVOID,PVOID);
+typedef INT (CALLBACK *PFNDSAENUMCALLBACK)(PVOID,PVOID);
+typedef INT (CALLBACK *PFNDPACOMPARE)(PVOID,PVOID,LPARAM);
+#if (_WIN32_WINNT >= 0x0501)
+typedef LRESULT (CALLBACK *SUBCLASSPROC)(HWND,UINT,WPARAM,LPARAM,UINT_PTR,DWORD_PTR);
+typedef struct tagLITEM {
+ UINT mask;
+ int iLink;
+ UINT state;
+ UINT stateMask;
+ WCHAR szID[MAX_LINKID_TEXT];
+ WCHAR szUrl[L_MAX_URL_LENGTH];
+} LITEM,*PLITEM;
+typedef struct tagLHITTESTINFO {
+ POINT pt;
+ LITEM item;
+} LHITTESTINFO,*PLHITTESTINFO;
+typedef struct tagNMLINK {
+ NMHDR hdr;
+ LITEM item;
+} NMLINK,*PNMLINK;
+#endif /* _WIN32_WINNT >= 0x0501 */
+
+#define INDEXTOOVERLAYMASK(i) ((i)<<8)
+#define INDEXTOSTATEIMAGEMASK(i) ((i)<<12)
+#define HANDLE_WM_NOTIFY(h,w,l,f) (f)((h),(int)(w),(NMHDR*)(l))
+#define FORWARD_WM_NOTIFY(h,i,p,f) (LRESULT)(f)((h),WM_NOTIFY,(WPARAM)(int)(i),(LPARAM)(NMHDR*)(p))
+#define CCSIZEOF_STRUCT(s,m) (((int)((PBYTE)(&((s*)0)->m)-((PBYTE)((s*)0))))+sizeof(((s*)0)->m))
+#define MAKEIPADDRESS(b1,b2,b3,b4) ((LPARAM)(((DWORD)(b1)<<24)+((DWORD)(b2)<<16)+((DWORD)(b3)<<8)+((DWORD)(b4))))
+#define MAKEIPRANGE(low,high) ((LPARAM)(WORD)(((BYTE)(high)<<8)+(BYTE)(low)))
+#define FIRST_IPADDRESS(a) ((a>>24) & 0xff)
+#define SECOND_IPADDRESS(a) ((a>>16) & 0xff)
+#define THIRD_IPADDRESS(a) ((a>>8) & 0xff)
+#define FOURTH_IPADDRESS(a) (a & 0xff)
+#define Animate_Create(w,i,s,hI) CreateWindow(ANIMATE_CLASS,NULL,s,0,0,0,0,w,(HMENU)(i),hI,NULL)
+#define Animate_Open(w,f) (BOOL)SNDMSG(w,ACM_OPEN,0,(LPARAM)f)
+#define Animate_OpenEx(w,h,s) (BOOL)SNDMSG(w,ACM_OPEN,(WPARAM)h,(LPARAM)(LPTSTR)(s))
+#define Animate_Play(w,f,t,r) (BOOL)SNDMSG(w,ACM_PLAY,(r),(LPARAM)MAKELONG(f,t))
+#define Animate_Stop(w) (BOOL)SNDMSG(w,ACM_STOP,0,0)
+#define Animate_Close(w) Animate_Open(w,NULL)
+#define Animate_Seek(w,f) Animate_Play(w,f,f,1)
+HBITMAP WINAPI CreateMappedBitmap(HINSTANCE,int,UINT,LPCOLORMAP,int);
+HWND WINAPI CreateStatusWindowA(LONG,LPCSTR,HWND,UINT);
+HWND WINAPI CreateStatusWindowW(LONG,LPCWSTR,HWND,UINT);
+HWND WINAPI CreateToolbarEx(HWND,DWORD,UINT,int,HINSTANCE,UINT,LPCTBBUTTON,int,int,int,int,int,UINT);
+HWND WINAPI CreateUpDownControl(DWORD,int,int,int,int,HWND,int,HINSTANCE,HWND,int,int,int);
+#define DateTime_GetMonthCal(hwnd) SNDMSG(hwnd, DTM_GETMONTHCAL, 0, 0)
+#define DateTime_GetMonthCalColor(hwnd, icolor) SNDMSG(hwnd, DTM_GETMONTHCAL, (WPARAM)icolor,0)
+#define DateTime_GetMonthCalFont(hwnd) SNDMSG(hwnd,DTM_GETMCFONT,0,0)
+#define DateTime_GetRange(hwnd,lpsystimearray) SNDMSG(hwnd,DTM_GETRANGE,0,(LPARAM)lpsystimearray)
+#define DateTime_GetSystemtime(hwnd,lpsystime) SNDMSG(hwnd,DTM_GETSYSTEMTIME,0,(LPARAM)lpsystime)
+#define DateTime_SetFormat(hwnd,lpszformat) SNDMSG(hwnd,DTM_SETFORMAT,0,(LPARAM)lpszformat)
+#define DateTime_SetMonthCalColor(hwnd,icolor,clr) SNDMSG(hwnd,DTM_SETMCCOLOR,(WPARAM)icolor,(LPARAM)clr)
+#define DateTime_SetMonthCalFont(hwnd,hfont,lparam) SNDMSG(hwnd,DTM_SETMCFONT,(WPARAM)hfont,(LPARAM)lparam)
+#define DateTime_SetRange(hwnd,flags,lpsystimearray) SNDMSG(hwnd,DTM_SETRANGE,(WPARAM)flags,(LPARAM)lpsystimearray)
+#define DateTime_SetSystemtime(hwnd,flag,lpsystime) SNDMSG(hwnd,DTM_SETSYSTEMTIME,(WPARAM)flag,(LPARAM)lpsystime)
+void WINAPI DrawInsert(HWND,HWND,int);
+void WINAPI DrawStatusTextA(HDC,LPRECT,LPCSTR,UINT);
+void WINAPI DrawStatusTextW(HDC,LPRECT,LPCWSTR,UINT);
+void WINAPI GetEffectiveClientRect(HWND,LPRECT,LPINT);
+#if (_WIN32_IE >= 0x0500)
+LANGID WINAPI GetMUILanguage(VOID);
+#endif
+#define Header_GetItemCount(w) (int)SNDMSG((w),HDM_GETITEMCOUNT,0,0)
+#define Header_InsertItem(w,i,phdi) (int)SNDMSG((w),HDM_INSERTITEM,(WPARAM)(int)(i),(LPARAM)(const HD_ITEM*)(phdi))
+#define Header_DeleteItem(w,i) (BOOL)SNDMSG((w),HDM_DELETEITEM,(WPARAM)(int)(i),0)
+#define Header_GetItem(w,i,phdi) (BOOL)SNDMSG((w),HDM_GETITEM,(WPARAM)(int)(i),(LPARAM)(HD_ITEM*)(phdi))
+#define Header_SetItem(w,i,phdi) (BOOL)SNDMSG((w),HDM_SETITEM,(WPARAM)(int)(i),(LPARAM)(const HD_ITEM*)(phdi))
+#define Header_Layout(w,l) (BOOL)SNDMSG((w),HDM_LAYOUT,0,(LPARAM)(HD_LAYOUT*)(l))
+#if (_WIN32_IE >= 0x0300)
+#define Header_OrderToIndex(w,o) (int)SNDMSG((w),HDM_ORDERTOINDEX,(WPARAM)(o),0)
+#define Header_GetItemRect(w,i,r) (BOOL)SNDMSG((w),HDM_GETITEMRECT,(WPARAM)(i),(LPARAM)(r))
+#define Header_GetOrderArray(w,l,a) (BOOL)SNDMSG((w),HDM_GETORDERARRAY,(WPARAM)(l),(LPARAM)(a))
+#define Header_SetOrderArray(w,l,a) (BOOL)SNDMSG((w),HDM_SETORDERARRAY,(WPARAM)(l),(LPARAM)(a))
+#define Header_CreateDragImage(w, i) (HIMAGELIST)SNDMSG((w), HDM_CREATEDRAGIMAGE, (WPARAM)i, 0)
+#define Header_SetImageList(w,l) (HIMAGELIST)SNDMSG((w), HDM_SETIMAGELIST, 0, (LPARAM)l)
+#define Header_GetImageList(w) (HIMAGELIST)SNDMSG((w),HDM_GETIMAGELIST,0,0)
+#endif
+#if (_WIN32_IE >= 0x0400)
+#define Header_GetUnicodeFormat(w) (BOOL)SNDMSG((w),HDM_GETUNICODEFORMAT,0,0)
+#define Header_SetUnicodeFormat(w,f) (BOOL)SNDMSG((w),HDM_SETUNICODEFORMAT,(WPARAM)(f),0)
+#endif
+HDSA WINAPI DSA_Create(INT,INT);
+BOOL WINAPI DSA_Destroy(HDSA);
+VOID WINAPI DSA_DestroyCallback(HDSA,PFNDSAENUMCALLBACK,PVOID);
+PVOID WINAPI DSA_GetItemPtr(HDSA,INT);
+INT WINAPI DSA_InsertItem(HDSA,INT,PVOID);
+HDPA WINAPI DPA_Create(INT);
+BOOL WINAPI DPA_Destroy(HDPA);
+PVOID WINAPI DPA_DeletePtr(HDPA,INT);
+BOOL WINAPI DPA_DeleteAllPtrs(HDPA);
+VOID WINAPI DPA_EnumCallback(HDPA,PFNDPAENUMCALLBACK,PVOID);
+VOID WINAPI DPA_DestroyCallback(HDPA,PFNDPAENUMCALLBACK,PVOID);
+BOOL WINAPI DPA_SetPtr(HDPA,INT,PVOID);
+INT WINAPI DPA_InsertPtr(HDPA,INT,PVOID);
+PVOID WINAPI DPA_GetPtr(HDPA,INT_PTR);
+BOOL WINAPI DPA_Sort(HDPA,PFNDPACOMPARE,LPARAM);
+INT WINAPI DPA_Search(HDPA,PVOID,INT,PFNDPACOMPARE,LPARAM,UINT);
+BOOL WINAPI Str_SetPtrW(LPWSTR*,LPCWSTR);
+#if (_WIN32_IE >= 0x0400)
+BOOL WINAPI FlatSB_EnableScrollBar(HWND,INT,UINT);
+BOOL WINAPI FlatSB_ShowScrollBar(HWND,INT,BOOL);
+BOOL WINAPI FlatSB_GetScrollRange(HWND,INT,LPINT,LPINT);
+BOOL WINAPI FlatSB_GetScrollInfo(HWND,INT,LPSCROLLINFO);
+INT WINAPI FlatSB_GetScrollPos(HWND,INT);
+BOOL WINAPI FlatSB_GetScrollProp(HWND,INT,LPINT);
+#ifdef _WIN64
+BOOL WINAPI FlatSB_GetScrollPropPtr(HWND,INT,PINT_PTR);
+#else
+#define FlatSB_GetScrollPropPtr FlatSB_GetScrollProp
+#endif
+INT WINAPI FlatSB_SetScrollPos(HWND,INT,INT,BOOL);
+INT WINAPI FlatSB_SetScrollInfo(HWND,INT,LPSCROLLINFO,BOOL);
+INT WINAPI FlatSB_SetScrollRange(HWND,INT,INT,INT,BOOL);
+BOOL WINAPI FlatSB_SetScrollProp(HWND,UINT,INT_PTR,BOOL);
+#define FlatSB_SetScrollPropPtr FlatSB_SetScrollProp
+BOOL WINAPI InitializeFlatSB(HWND);
+HRESULT WINAPI UninitializeFlatSB(HWND);
+#endif /* _WIN32_IE >= 0x0400 */
+#if (_WIN32_WINNT >= 0x0501)
+BOOL WINAPI SetWindowSubclass(HWND,SUBCLASSPROC,UINT_PTR,DWORD_PTR);
+BOOL WINAPI GetWindowSubclass(HWND,SUBCLASSPROC,UINT_PTR,DWORD_PTR*);
+BOOL WINAPI RemoveWindowSubclass(HWND,SUBCLASSPROC,UINT_PTR);
+LRESULT WINAPI DefSubclassProc(HWND,UINT,WPARAM,LPARAM);
+INT WINAPI DrawShadowText(HDC,LPCWSTR,UINT,RECT*,DWORD,COLORREF,COLORREF,INT,INT);
+#endif /* _WIN32_WINNT >= 0x0501 */
+int WINAPI ImageList_Add(HIMAGELIST,HBITMAP,HBITMAP);
+#define ImageList_AddIcon(l,i) ImageList_ReplaceIcon(l,-1,i)
+int WINAPI ImageList_AddMasked(HIMAGELIST,HBITMAP,COLORREF);
+BOOL WINAPI ImageList_BeginDrag(HIMAGELIST,int,int,int);
+HIMAGELIST WINAPI ImageList_Create(int,int,UINT,int,int);
+BOOL WINAPI ImageList_Destroy(HIMAGELIST);
+BOOL WINAPI ImageList_DragEnter(HWND,int,int);
+BOOL WINAPI ImageList_DragLeave(HWND);
+BOOL WINAPI ImageList_DragMove(int,int);
+BOOL WINAPI ImageList_DragShowNolock(BOOL);
+BOOL WINAPI ImageList_Draw(HIMAGELIST,int,HDC,int,int,UINT);
+BOOL WINAPI ImageList_DrawEx(HIMAGELIST,int,HDC,int,int,int,int,COLORREF,COLORREF,UINT);
+void WINAPI ImageList_EndDrag(VOID);
+#define ImageList_ExtractIcon(h,l,i) ImageList_GetIcon(l,i,0)
+COLORREF WINAPI ImageList_GetBkColor(HIMAGELIST);
+HIMAGELIST WINAPI ImageList_GetDragImage(LPPOINT,LPPOINT);
+HICON WINAPI ImageList_GetIcon(HIMAGELIST,int,UINT);
+BOOL WINAPI ImageList_GetIconSize(HIMAGELIST,int*,int*);
+int WINAPI ImageList_GetImageCount(HIMAGELIST);
+BOOL WINAPI ImageList_GetImageInfo(HIMAGELIST,int,IMAGEINFO*);
+#define ImageList_LoadBitmap(h,l,x,G,M) ImageList_LoadImage(h,l,x,G,M,IMAGE_BITMAP,0)
+HIMAGELIST WINAPI ImageList_LoadImageA(HINSTANCE,LPCSTR,int,int,COLORREF,UINT,UINT);
+HIMAGELIST WINAPI ImageList_LoadImageW(HINSTANCE,LPCWSTR,int,int,COLORREF,UINT,UINT);
+HIMAGELIST WINAPI ImageList_Merge(HIMAGELIST,int,HIMAGELIST,int,int,int);
+BOOL WINAPI ImageList_Remove(HIMAGELIST,int);
+#define ImageList_RemoveAll(l) ImageList_Remove(l,-1)
+BOOL WINAPI ImageList_Replace(HIMAGELIST,int,HBITMAP,HBITMAP);
+int WINAPI ImageList_ReplaceIcon(HIMAGELIST,int,HICON);
+COLORREF WINAPI ImageList_SetBkColor(HIMAGELIST,COLORREF);
+BOOL WINAPI ImageList_SetDragCursorImage(HIMAGELIST,int,int,int);
+BOOL WINAPI ImageList_SetIconSize(HIMAGELIST,int,int);
+BOOL WINAPI ImageList_SetOverlayImage(HIMAGELIST,int,int);
+#ifdef _OBJIDL_H
+HIMAGELIST WINAPI ImageList_Read(LPSTREAM);
+BOOL WINAPI ImageList_Write(HIMAGELIST,LPSTREAM);
+#endif
+#if (_WIN32_IE >= 0x0400)
+HIMAGELIST WINAPI ImageList_Duplicate(HIMAGELIST himl);
+#endif
+void WINAPI InitCommonControls(void);
+#if (_WIN32_IE >= 0x0300)
+BOOL WINAPI InitCommonControlsEx(LPINITCOMMONCONTROLSEX);
+#endif
+#if (_WIN32_IE >= 0x0500)
+VOID WINAPI InitMUILanguage(LANGID);
+#endif
+int WINAPI LBItemFromPt(HWND,POINT,BOOL);
+#define ListView_GetBkColor(w) (COLORREF)SNDMSG((w),LVM_GETBKCOLOR,0,0)
+#define ListView_GetImageList(w,i) (HIMAGELIST)SNDMSG((w),LVM_GETIMAGELIST,(i),0)
+#define ListView_GetItemCount(w) (int)SNDMSG((w),LVM_GETITEMCOUNT,0,0)
+#define ListView_GetItem(w,i) (BOOL)SNDMSG((w),LVM_GETITEM,0,(LPARAM)(i))
+#define ListView_SetBkColor(w,c) (BOOL)SNDMSG((w),LVM_SETBKCOLOR,0,(LPARAM)c)
+#define ListView_SetImageList(w,h,i) (HIMAGELIST)(UINT)SNDMSG((w),LVM_SETIMAGELIST,(i),(LPARAM)(h))
+#define ListView_SetItem(w,i) (BOOL)SNDMSG((w),LVM_SETITEM,0,(LPARAM)(const LV_ITEM*)(i))
+#define ListView_InsertItem(w,i) (int)SNDMSG((w),LVM_INSERTITEM,0,(LPARAM)(const LV_ITEM*)(i))
+#define ListView_DeleteItem(w,i) (BOOL)SNDMSG((w),LVM_DELETEITEM,i,0)
+#define ListView_DeleteAllItems(w) (BOOL)SNDMSG((w),LVM_DELETEALLITEMS,0,0)
+#define ListView_GetCallbackMask(w) (UINT)SNDMSG((w),LVM_GETCALLBACKMASK,0,0)
+#define ListView_SetCallbackMask(w,m) (BOOL)SNDMSG((w),LVM_SETCALLBACKMASK,m,0)
+#define ListView_GetNextItem(w,i,f) (int)SNDMSG((w),LVM_GETNEXTITEM,i,MAKELPARAM((f),0))
+#define ListView_FindItem(w,i,p) (int)SNDMSG((w), LVM_FINDITEM,(WPARAM)i,(LPARAM)(const LV_FINDINFO*)(p))
+#define ListView_GetItemRect(w,i,p,c) (BOOL)SNDMSG((w),LVM_GETITEMRECT,i,((p)?(((LPRECT)(p))->left=(c),(LPARAM)(LPRECT)(p)):0))
+#define ListView_SetItemPosition(w,i,x,y) (BOOL)SNDMSG((w),LVM_SETITEMPOSITION,i,MAKELPARAM(x,y))
+#define ListView_GetItemPosition(w,i,p) (BOOL)SNDMSG((w),LVM_GETITEMPOSITION,i,(LPARAM)p)
+#define ListView_GetItemSpacing(w,f) (DWORD)SNDMSG((w),LVM_GETITEMSPACING,f,0)
+#define ListView_GetStringWidth(w,s) (int)SNDMSG((w),LVM_GETSTRINGWIDTH,0,(LPARAM)s)
+#define ListView_HitTest(w,p) (int)SNDMSG((w),LVM_HITTEST,0,(LPARAM)(LV_HITTESTINFO*)(p))
+#define ListView_EnsureVisible(w,i,f) (BOOL)SNDMSG((w),LVM_ENSUREVISIBLE,i,MAKELPARAM((f),0))
+#define ListView_Scroll(w,x,y) (BOOL)SNDMSG((w),LVM_SCROLL,x,y)
+#define ListView_RedrawItems(w,f,l) (BOOL)SNDMSG((w),LVM_REDRAWITEMS,f,l)
+#define ListView_Arrange(w,c) (BOOL)SNDMSG((w),LVM_ARRANGE,c,0)
+#define ListView_EditLabel(w,i) (HWND)SNDMSG((w),LVM_EDITLABEL,i,0)
+#define ListView_GetEditControl(w) (HWND)SNDMSG((w),LVM_GETEDITCONTROL,0,0)
+#define ListView_GetColumn(w,i,p) (BOOL)SNDMSG((w),LVM_GETCOLUMN,i,(LPARAM)(LV_COLUMN*)(p))
+#define ListView_SetColumn(w,i,p) (BOOL)SNDMSG((w),LVM_SETCOLUMN,i,(LPARAM)(const LV_COLUMN*)(p))
+#define ListView_InsertColumn(w,i,p) (int)SNDMSG((w),LVM_INSERTCOLUMN,i,(LPARAM)(const LV_COLUMN*)(p))
+#define ListView_DeleteColumn(w,i) (BOOL)SNDMSG((w),LVM_DELETECOLUMN,i,0)
+#define ListView_GetColumnWidth(w,i) (int)SNDMSG((w),LVM_GETCOLUMNWIDTH,i,0)
+#define ListView_SetColumnWidth(w,i,x) (BOOL)SNDMSG((w),LVM_SETCOLUMNWIDTH,i,MAKELPARAM((x),0))
+#define ListView_CreateDragImage(w,i,p) (HIMAGELIST)SNDMSG((w),LVM_CREATEDRAGIMAGE,i,(LPARAM)(LPPOINT)(p))
+#define ListView_GetViewRect(w,p) (BOOL)SNDMSG((w),LVM_GETVIEWRECT,0,(LPARAM)(LPRECT)(p))
+#define ListView_GetTextColor(w) (COLORREF)SNDMSG((w),LVM_GETTEXTCOLOR,0,0)
+#define ListView_SetTextColor(w,c) (BOOL)SNDMSG((w),LVM_SETTEXTCOLOR,0,(LPARAM)(COLORREF)(c))
+#define ListView_GetTextBkColor(w) (COLORREF)SNDMSG((w),LVM_GETTEXTBKCOLOR,0,0)
+#define ListView_SetTextBkColor(w,c) (BOOL)SNDMSG((w),LVM_SETTEXTBKCOLOR,0,(LPARAM)(COLORREF)(c))
+#define ListView_GetTopIndex(w) (int)SNDMSG((w),LVM_GETTOPINDEX,0,0)
+#define ListView_GetCountPerPage(w) (int)SNDMSG((w),LVM_GETCOUNTPERPAGE,0,0)
+#define ListView_GetOrigin(w,p) (BOOL)SNDMSG((w),LVM_GETORIGIN,0,(LPARAM)(POINT*)(p))
+#define ListView_GetOrigin(w,p) (BOOL)SNDMSG((w),LVM_GETORIGIN,0,(LPARAM)(POINT*)(p))
+#define ListView_Update(w,i) (BOOL)SNDMSG((w),LVM_UPDATE,(WPARAM)(i),0)
+#define ListView_SetItemState(w,i,d,m) \
+{ \
+ LV_ITEM _lvi;\
+ _lvi.stateMask=m;\
+ _lvi.state=d;\
+ SNDMSG((w),LVM_SETITEMSTATE,i,(LPARAM)(LV_ITEM*)&_lvi);\
+}
+#define ListView_GetItemState(w,i,m) (UINT)SNDMSG((w),LVM_GETITEMSTATE,i,m)
+#define ListView_GetItemText(w,i,iS,s,n) \
+{ \
+ LV_ITEM _lvi;\
+ _lvi.iSubItem=iS;\
+ _lvi.cchTextMax=n;\
+ _lvi.pszText=s;\
+ SNDMSG((w),LVM_GETITEMTEXT,i,(LPARAM)(LV_ITEM*)&_lvi);\
+}
+#define ListView_SetItemText(w,i,iS,s) \
+{ \
+ LV_ITEM _lvi;\
+ _lvi.iSubItem=iS;\
+ _lvi.pszText=s;\
+ SNDMSG((w),LVM_SETITEMTEXT,i,(LPARAM)(LV_ITEM*)&_lvi);\
+}
+#define ListView_SetItemCount(w,n) (void)SNDMSG((w),LVM_SETITEMCOUNT,n,0)
+#define ListView_SortItems(w,f,l) (BOOL)SNDMSG((w),LVM_SORTITEMS,l,(LPARAM)f)
+#define ListView_SetItemPosition32(w,i,x,y) \
+{ \
+ POINT p={x,y}; \
+ SNDMSG((w),LVM_SETITEMPOSITION32,i,(LPARAM)&p);\
+}
+#define ListView_GetSelectedCount(w) (UINT)SNDMSG((w),LVM_GETSELECTEDCOUNT,0,0)
+#define ListView_GetCheckState(w,i) ((((UINT)(SNDMSG((w),LVM_GETITEMSTATE,(WPARAM)(i),LVIS_STATEIMAGEMASK)))>>12)-1)
+#define ListView_SetCheckState(w,i,f) ListView_SetItemState(w,i,INDEXTOSTATEIMAGEMASK((f)+1),LVIS_STATEIMAGEMASK)
+#define ListView_GetISearchString(w,lpsz) (BOOL)SNDMSG((w),LVM_GETISEARCHSTRING,0,(LPARAM)(LPTSTR)(lpsz))
+#define ListView_CancelEditLabel(w) (VOID)SNDMSG((w),LVM_CANCELEDITLABEL,0,0)
+#define ListView_EnableGroupView(w,i) (int)SNDMSG((w),LVM_ENABLEGROUPVIEW,(WPARAM)(i),0)
+#define ListView_GetGroupInfo(w,i,p) (int)SNDMSG((w),LVM_GETGROUPINFO,(WPARAM)(i),(LPARAM)(p))
+#define ListView_GetGroupMetrics(w,p) SNDMSG((w),LVM_GETGROUPMETRICS,0,(LPARAM)(p))
+#define ListView_GetInsertMark(w,p) (BOOL)SNDMSG((w),LVM_GETINSERTMARK,0,(LPARAM)(p))
+#define ListView_GetInsertMarkColor(w) (COLORREF)SNDMSG((w),LVM_GETINSERTMARKCOLOR,0,0)
+#define ListView_GetInsertMarkRect(w,p) (int)SNDMSG((w),LVM_GETINSERTMARKRECT,0,(LPARAM)(p))
+#define ListView_GetOutlineColor(w) (COLORREF)SNDMSG((w),LVM_GETOUTLINECOLOR,0,0)
+#define ListView_GetSelectedColumn(w) (UINT)SNDMSG((w),LVM_GETSELECTEDCOLUMN,0,0)
+#define ListView_GetTileInfo(w,p) SNDMSG((w),LVM_GETTILEINFO,0,(LPARAM)(p))
+#define ListView_GetTileViewInfo(w,p) SNDMSG((w),LVM_GETTILEVIEWINFO,0,(LPARAM)(p))
+#define ListView_GetView(w) (DWORD)SNDMSG((w),LVM_GETVIEW,0,0)
+#define ListView_HasGroup(w,i) (BOOL)SNDMSG((w),LVM_HASGROUP,(WPARAM)(i),0)
+#define ListView_InsertGroup(w,i,p) (int)SNDMSG((w),LVM_INSERTGROUP,(WPARAM)(i),(LPARAM)(p))
+#define ListView_InsertGroupSorted(w,p) SNDMSG((w),LVM_INSERTGROUPSORTED,(WPARAM)(p),0)
+#define ListView_InsertMarkHitTest(w,p,t) (BOOL)SNDMSG((w),LVM_INSERTMARKHITTEST,(WPARAM)(p),(LPARAM)(t))
+#define ListView_IsGroupViewEnabled(w) (BOOL)SNDMSG((w),LVM_ISGROUPVIEWENABLED,0,0)
+#define ListView_MapIDToIndex(w,i) (UINT)SNDMSG((w),LVM_MAPIDTOINDEX,(WPARAM)(i),0)
+#define ListView_MoveGroup(w,i,t) SNDMSG((w),LVM_MOVEGROUP,(WPARAM)(i),(LPARAM)(t))
+#define ListView_RemoveAllGroups(w) SNDMSG((w),LVM_REMOVEALLGROUPS,0,0)
+#define ListView_RemoveGroup(w,i) (int)SNDMSG((w),LVM_REMOVEGROUP,(WPARAM)(i),0)
+#define ListView_SetGroupInfo(w,i,p) (int)SNDMSG((w),LVM_SETGROUPINFO,(WPARAM)(i),(LPARAM)(p))
+#define ListView_SetGroupMetrics(w,p) SNDMSG((w),LVM_SETGROUPMETRICS,0,(LPARAM)(p))
+#define ListView_SetInfoTip(w,p) (BOOL)SNDMSG((w),LVM_SETINFOTIP,0,(LPARAM)(p))
+#define ListView_SetInsertMark(w,p) (BOOL)SNDMSG((w),LVM_SETINSERTMARK,0,(LPARAM)(p))
+#define ListView_SetInsertMarkColor(w,c) (COLORREF)SNDMSG((w),LVM_SETINSERTMARKCOLOR,0,(LPARAM)(c))
+#define ListView_SetOutlineColor(w,c) (COLORREF)SNDMSG((w),LVM_SETOUTLINECOLOR,0,(LPARAM)(c))
+#if (_WIN32_WINNT >= 0x0501)
+#define ListView_SetSelectedColumn(w,i) SNDMSG((w),LVM_SETSELECTEDCOLUMN,(WPARAM)i,0)
+#endif
+#define ListView_SetTileInfo(w,p) (BOOL)SNDMSG((w),LVM_SETTILEINFO,0,(LPARAM)(p))
+#define ListView_SetTileViewInfo(w,p) (BOOL)SNDMSG((w),LVM_SETTILEVIEWINFO,0,(LPARAM)(p))
+#define ListView_SetView(w,i) (int)SNDMSG((w),LVM_SETVIEW,(WPARAM)(i),0)
+#define ListView_SortGroups(w,c,p) (int)SNDMSG((w),LVM_SORTGROUPS,(WPARAM)(c),(LPARAM)(p))
+#define ListView_SortItemsEx(w,c,p) (BOOL)SNDMSG((w),LVM_SORTITEMSEX,(WPARAM)(p),(LPARAM)(c))
+
+#if (_WIN32_WINNT >= 0x0501)
+#define ComboBox_SetMinVisible(w,i) (BOOL)SNDMSG((w), CB_SETMINVISIBLE,(WPARAM)(i),0);
+#define ComboBox_GetMinVisible(w) (INT)SNDMSG((w),CB_GETMINVISIBLE,0,0);
+#endif
+
+BOOL WINAPI MakeDragList(HWND);
+void WINAPI MenuHelp(UINT,WPARAM,LPARAM,HMENU,HINSTANCE,HWND,PUINT);
+#define MonthCal_GetColor(hwnd,icolor) SNDMSG(hwnd,MCM_GETCOLOR,(WPARAM)icolor,(LPARAM)0)
+#define MonthCal_GetCurSel(hwnd,lpsystime) SNDMSG(hwnd,MCM_GETCURSEL,0,(LPARAM)lpsystime)
+#define MonthCal_GetFirstDayOfWeek(hwnd) SNDMSG(hwnd,MCM_GETFIRSTDAYOFWEEK,0,0)
+#define MonthCal_GetMaxSelCount(hwnd) SNDMSG(hwnd,MCM_GETMAXSELCOUNT,0,0)
+#define MonthCal_GetMaxTodayWidth(hwnd) SNDMSG(hwnd,MCM_GETMAXTODAYWIDTH,0,0)
+#define MonthCal_GetMinReqRect(hwnd,lpRectInfo) SNDMSG(hwnd,MCM_GETMINREQRECT,0,(LPARAM)lpRectInfo)
+#define MonthCal_GetMonthDelta(hwnd) SNDMSG(hwnd,MCM_GETMONTHDELTA,0,0)
+#define MonthCal_GetMonthRange(hwnd,flag,systimearray) SNDMSG(hwnd,MCM_GETMONTHRANGE,(WPARAM)flag,(LPARAM)systimearray)
+#define MonthCal_GetRange(hwnd,systimearray) SNDMSG(hwnd,MCM_GETRANGE,0,(LPARAM)systimearray)
+#define MonthCal_GetSelRange(hwnd,systimearray) SNDMSG(hwnd,MCM_GETSELRANGE,0,(LPARAM)systimearray)
+#define MonthCal_GetToday(hwnd,systime) SNDMSG(hwnd,MCM_GETTODAY,0,(LPARAM)systime)
+#define MonthCal_GetUnicodeFormat(hwnd) SNDMSG(hwnd,MCM_GETUNICODEFORMAT,0,0)
+#define MonthCal_HitTest(hwnd,pmchittest) SNDMSG(hwnd,MCM_HITTEST,0,(LPARAM)pmchittest)
+#define MonthCal_SetColor(hwnd,icolor,clr) SNDMSG(hwnd,MCM_SETCOLOR,(WPARAM)icolor,(LPARAM)clr)
+#define MonthCal_SetCurSel(hwnd,lpsystime) SNDMSG(hwnd,MCM_SETCURSEL,0,(LPARAM)lpsystime)
+#define MonthCal_SetDayState(hwnd,imonths,lpdatestatearray) SNDMSG(hwnd,MCM_SETDAYSTATE,(WPARAM)imonths,(LPARAM)lpdatestatearray)
+#define MonthCal_SetFirstDayOfWeek(hwnd,iday) SNDMSG(hwnd,MCM_SETFIRSTDAYOFWEEK,0,(LPARAM)iday)
+#define MonthCal_SetMaxSelCount(hwnd,imax) SNDMSG(hwnd,MCM_SETMAXSELCOUNT,(WPARAM)imax,0)
+#define MonthCal_SetMonthDelta(hwnd,idelta) SNDMSG(hwnd,MCM_SETMONTHDELTA,(WPARAM)idelta,0)
+#define MonthCal_SetSelRange(hwnd,systimearray) SNDMSG(hwnd,MCM_SETSELRANGE,0,(LPARAM)systimearray)
+#define MonthCal_SetToday(hwnd,systime) SNDMSG(hwnd,MCM_SETTODAY,0,(LPARAM)systime)
+#define MonthCal_SetUnicodeFormat(hwnd,unicode) SNDMSG(hwnd,MCM_SETUNICODEFORMAT,(WPARAM)unicode,0)
+#define MonthCal_SetRange(w,f,st) (BOOL)SNDMSG((w),MCM_SETRANGE,(WPARAM)(f),(LPARAM)(st))
+BOOL WINAPI ShowHideMenuCtl(HWND,UINT,PINT);
+#define TabCtrl_GetItem(w,i,p) (BOOL)SNDMSG((w),TCM_GETITEM,i,(LPARAM)(TC_ITEM*)(p))
+#define TabCtrl_SetItem(w,i,p) (BOOL)SNDMSG((w),TCM_SETITEM,i,(LPARAM)(TC_ITEM*)(p))
+#define TabCtrl_InsertItem(w,i,p) (int)SNDMSG((w),TCM_INSERTITEM,i,(LPARAM)(const TC_ITEM*)(p))
+#define TabCtrl_DeleteItem(w,i) (BOOL)SNDMSG((w),TCM_DELETEITEM,i,0)
+#define TabCtrl_DeleteAllItems(w) (BOOL)SNDMSG((w),TCM_DELETEALLITEMS,0,0)
+#define TabCtrl_GetItemRect(w,i,p) (BOOL)SNDMSG((w),TCM_GETITEMRECT,i,(LPARAM)(LPRECT)(p))
+#define TabCtrl_GetCurSel(w) (int)SNDMSG((w),TCM_GETCURSEL,0,0)
+#define TabCtrl_SetCurSel(w,i) (int)SNDMSG((w),TCM_SETCURSEL,i,0)
+#define TabCtrl_HitTest(w,p) (int)SNDMSG((w),TCM_HITTEST,0,(LPARAM)(TC_HITTESTINFO*)(p))
+#define TabCtrl_SetItemExtra(w,c) (BOOL)SNDMSG((w),TCM_SETITEMEXTRA,c,0)
+#define TabCtrl_AdjustRect(w,b,p) (int)SNDMSG((w),TCM_ADJUSTRECT,b,(LPARAM)(LPRECT)p)
+#define TabCtrl_SetItemSize(w,x,y) (DWORD)SNDMSG((w),TCM_SETITEMSIZE,0,MAKELPARAM(x,y))
+#define TabCtrl_RemoveImage(w,i) (void)SNDMSG((w),TCM_REMOVEIMAGE,i,0)
+#define TabCtrl_SetPadding(w,x,y) (void)SNDMSG((w),TCM_SETPADDING,0,MAKELPARAM(x,y))
+#define TabCtrl_GetRowCount(w) (int)SNDMSG((w),TCM_GETROWCOUNT,0,0)
+#define TabCtrl_GetToolTips(w) (HWND)SNDMSG((w),TCM_GETTOOLTIPS,0,0)
+#define TabCtrl_SetToolTips(w,t) (void)SNDMSG((w),TCM_SETTOOLTIPS,(WPARAM)t,0)
+#define TabCtrl_GetCurFocus(w) (int)SNDMSG((w),TCM_GETCURFOCUS,0,0)
+#define TabCtrl_SetCurFocus(w,i) (void)SNDMSG((w),TCM_SETCURFOCUS,i,0)
+#define TabCtrl_GetImageList(w) (HIMAGELIST)SNDMSG((w),TCM_GETIMAGELIST,0,0)
+#define TabCtrl_SetImageList(w,h) (HIMAGELIST)SNDMSG((w),TCM_SETIMAGELIST,0,(LPARAM)(UINT)(h))
+#define TabCtrl_GetItemCount(w) (int)SNDMSG((w),TCM_GETITEMCOUNT,0,0)
+BOOL WINAPI _TrackMouseEvent(LPTRACKMOUSEEVENT);
+#define TreeView_InsertItem(w,i) (HTREEITEM)SNDMSG((w),TVM_INSERTITEM,0,(LPARAM)(LPTV_INSERTSTRUCT)(i))
+#define TreeView_DeleteItem(w,i) (BOOL)SNDMSG((w),TVM_DELETEITEM,0,(LPARAM)(HTREEITEM)(i))
+#define TreeView_DeleteAllItems(w) (BOOL)SNDMSG((w),TVM_DELETEITEM,0,(LPARAM)TVI_ROOT)
+#define TreeView_Expand(w,i,c) (BOOL)SNDMSG((w),TVM_EXPAND,c,(LPARAM)(HTREEITEM)(i))
+#define TreeView_GetItemRect(w,i,p,c) (*(HTREEITEM*)p=(i),(BOOL)SNDMSG((w),TVM_GETITEMRECT,c,(LPARAM)(LPRECT)(p)))
+#define TreeView_GetCount(w) (UINT)SNDMSG((w),TVM_GETCOUNT,0,0)
+#define TreeView_GetIndent(w) (UINT)SNDMSG((w),TVM_GETINDENT,0,0)
+#define TreeView_SetIndent(w,i) (BOOL)SNDMSG((w),TVM_SETINDENT,i,0)
+#define TreeView_GetImageList(w,i) (HIMAGELIST)SNDMSG((w),TVM_GETIMAGELIST,i,0)
+#define TreeView_SetImageList(w,h,i) (HIMAGELIST)SNDMSG((w),TVM_SETIMAGELIST,i,(LPARAM)(HIMAGELIST)(h))
+#define TreeView_GetNextItem(w,i,c) (HTREEITEM)SNDMSG((w),TVM_GETNEXTITEM,c,(LPARAM)(HTREEITEM)(i))
+#define TreeView_GetChild(w,i) TreeView_GetNextItem(w,i,TVGN_CHILD)
+#define TreeView_GetNextSibling(w,i) TreeView_GetNextItem(w,i,TVGN_NEXT)
+#define TreeView_GetPrevSibling(w,i) TreeView_GetNextItem(w,i,TVGN_PREVIOUS)
+#define TreeView_GetParent(w,i) TreeView_GetNextItem(w,i,TVGN_PARENT)
+#define TreeView_GetFirstVisible(w) TreeView_GetNextItem(w,NULL,TVGN_FIRSTVISIBLE)
+#define TreeView_GetNextVisible(w,i) TreeView_GetNextItem(w,i,TVGN_NEXTVISIBLE)
+#define TreeView_GetPrevVisible(w,i) TreeView_GetNextItem(w,i,TVGN_PREVIOUSVISIBLE)
+#define TreeView_GetSelection(w) TreeView_GetNextItem(w,NULL,TVGN_CARET)
+#define TreeView_GetDropHilight(w) TreeView_GetNextItem(w,NULL,TVGN_DROPHILITE)
+#define TreeView_GetRoot(w) TreeView_GetNextItem(w,NULL,TVGN_ROOT)
+#define TreeView_Select(w,i,c) (BOOL)SNDMSG((w),TVM_SELECTITEM,c,(LPARAM)(HTREEITEM)(i))
+#define TreeView_SelectItem(w,i) TreeView_Select(w,i,TVGN_CARET)
+#define TreeView_SelectDropTarget(w,i) TreeView_Select(w,i,TVGN_DROPHILITE)
+#define TreeView_SelectSetFirstVisible(w,i) TreeView_Select(w,i,TVGN_FIRSTVISIBLE)
+#define TreeView_GetItem(w,i) (BOOL)SNDMSG((w),TVM_GETITEM,0,(LPARAM)(TV_ITEM*)(i))
+#define TreeView_SetItem(w,i) (BOOL)SNDMSG((w),TVM_SETITEM,0,(LPARAM)(const TV_ITEM*)(i))
+#define TreeView_EditLabel(w,i) (HWND)SNDMSG((w),TVM_EDITLABEL,0,(LPARAM)(HTREEITEM)(i))
+#define TreeView_GetEditControl(w) (HWND)SNDMSG((w),TVM_GETEDITCONTROL,0,0)
+#define TreeView_GetVisibleCount(w) (UINT)SNDMSG((w),TVM_GETVISIBLECOUNT,0,0)
+#define TreeView_HitTest(w,p) (HTREEITEM)SNDMSG((w),TVM_HITTEST,0,(LPARAM)(LPTV_HITTESTINFO)(p))
+#define TreeView_CreateDragImage(w,i) (HIMAGELIST)SNDMSG((w),TVM_CREATEDRAGIMAGE,0,(LPARAM)(HTREEITEM)(i))
+#define TreeView_SortChildren(w,i,r) (BOOL)SNDMSG((w),TVM_SORTCHILDREN,r,(LPARAM)(HTREEITEM)(i))
+#define TreeView_EnsureVisible(w,i) (BOOL)SNDMSG((w),TVM_ENSUREVISIBLE,0,(LPARAM)(HTREEITEM)(i))
+#define TreeView_SortChildrenCB(w,s,r) (BOOL)SNDMSG((w),TVM_SORTCHILDRENCB,r,(LPARAM)(LPTVSORTCB)(s))
+#define TreeView_EndEditLabelNow(w,f) (BOOL)SNDMSG((w),TVM_ENDEDITLABELNOW,f,0)
+#define TreeView_GetISearchString(w,s) (BOOL)SNDMSG((w),TVM_GETISEARCHSTRING,0,(LPARAM)s)
+#if (_WIN32_IE >= 0x0300)
+#define ListView_ApproximateViewRect(w,iw,ih,i) (DWORD)SNDMSG((w),LVM_APPROXIMATEVIEWRECT,(i),MAKELPARAM((iw),(ih)))
+#define ListView_SetExtendedListViewStyle(w,s) (DWORD)SNDMSG((w),LVM_SETEXTENDEDLISTVIEWSTYLE,0,(s))
+#define ListView_GetExtendedListViewStyle(w) (DWORD)SNDMSG((w),LVM_GETEXTENDEDLISTVIEWSTYLE,0,0)
+#define ListView_SetColumnOrderArray(w,i,a) (BOOL)SNDMSG((w),LVM_SETCOLUMNORDERARRAY,(WPARAM)(i),(LPARAM)(LPINT)(a))
+#define ListView_GetColumnOrderArray(w,i,a) (BOOL)SNDMSG((w),LVM_GETCOLUMNORDERARRAY,(WPARAM)(i),(LPARAM)(LPINT)(a))
+#define ListView_GetHeader(w) (HWND)SNDMSG((w),LVM_GETHEADER,0,0)
+#define ListView_GetHotCursor(w) (HCURSOR)SNDMSG((w),LVM_GETHOTCURSOR,0,0)
+#define ListView_GetHotItem(w) (INT)SNDMSG((w),LVM_GETHOTITEM,0,0)
+#define ListView_GetSubItemRect(w,i,is,c,p) (BOOL)SNDMSG((w),LVM_GETSUBITEMRECT,(WPARAM)(int)(i),((p)?(((LPRECT)(p))->left=(c),(((LPRECT)(p))->top=(is)),(LPARAM)(LPRECT)(p)):0))
+#define ListView_SetHotCursor(w,c) (HCURSOR)SNDMSG((w),LVM_SETHOTCURSOR,0,(LPARAM)(c))
+#define ListView_SetHotItem(w,i) (int)SNDMSG((w),LVM_SETHOTITEM,(WPARAM)(i),0)
+#define ListView_SetIconSpacing(w,x,y) (DWORD)SNDMSG((w),LVM_SETICONSPACING,0,MAKELONG(x,y))
+#define ListView_SubItemHitTest(w,p) (INT)SNDMSG((w),LVM_SUBITEMHITTEST,0,(LPARAM)(LPLVHITTESTINFO)(p))
+#define ListView_SetItemCountEx(w,i,f) (void)SNDMSG((w),LVM_SETITEMCOUNT,(WPARAM)(i),(LPARAM)(f))
+WINBOOL WINAPI ImageList_SetImageCount(HIMAGELIST,UINT);
+WINBOOL WINAPI ImageList_Copy(HIMAGELIST,int,HIMAGELIST,int,UINT);
+WINBOOL WINAPI ImageList_DrawIndirect(IMAGELISTDRAWPARAMS*);
+#define TabCtrl_SetMinTabWidth(hwnd,x) SNDMSG((hwnd),TCM_SETMINTABWIDTH,0,x)
+#define TabCtrl_DeselectAll(hwnd,fExcludeFocus) SNDMSG((hwnd),TCM_DESELECTALL,fExcludeFocus,0)
+#define TreeView_GetToolTips(w) (HWND)SNDMSG((w),TVM_GETTOOLTIPS,0,0)
+#define TreeView_SetToolTips(w,wt) (HWND)SNDMSG((w),TVM_SETTOOLTIPS,(WPARAM)(wt),0)
+#endif
+#if (_WIN32_IE >= 0x0400)
+#define ListView_GetBkImage(h,plvbki) (BOOL)SNDMSG((h),LVM_GETBKIMAGE,0,(LPARAM)(plvbki))
+#define ListView_SetBkImage(h,plvbki) (BOOL)SNDMSG((h),LVM_SETBKIMAGE,0,(LPARAM)(plvbki))
+#define ListView_SetExtendedListViewStyleEx(w,m,s) (DWORD)SNDMSG((w),LVM_SETEXTENDEDLISTVIEWSTYLE,(m),(s))
+#define ListView_SetWorkAreas(w,n,r) (BOOL)SNDMSG((w),LVM_SETWORKAREAS,(WPARAM)(n),(LPARAM)(RECT *)(r))
+#define ListView_GetWorkAreas(w,n,r) (BOOL)SNDMSG((w),LVM_GETWORKAREAS,(WPARAM)(n),(LPARAM)(RECT *)(r))
+#define ListView_GetNumberOfWorkAreas(w,n) (BOOL)SNDMSG((w),LVM_GETNUMBEROFWORKAREAS,0,(LPARAM)(UINT *)(n))
+#define ListView_SetHoverTime(w,t) (DWORD)SNDMSG((w),LVM_SETHOVERTIME,0,(LPARAM)(t))
+#define ListView_GetHoverTime(w) (DWORD)SNDMSG((w),LVM_GETHOVERTIME,0,0)
+#define ListView_GetSelectionMark(w) (INT)SNDMSG((w),LVM_GETSELECTIONMARK,0,0)
+#define ListView_SetSelectionMark(w,i) (INT)SNDMSG((w),LVM_SETSELECTIONMARK,0,(LPARAM)(i))
+#define ListView_SetToolTips(w,n) (HWND)SNDMSG((w),LVM_SETTOOLTIPS,(WPARAM)(n),0)
+#define ListView_GetToolTips(w) (HWND)SNDMSG((w),LVM_GETTOOLTIPS,0,0)
+#define ListView_SetUnicodeFormat(w,f) (BOOL)SNDMSG((w),LVM_SETUNICODEFORMAT,(WPARAM)(f),0)
+#define ListView_GetUnicodeFormat(w) (BOOL)SNDMSG((w),LVM_GETUNICODEFORMAT,0,0)
+#define TabCtrl_HighlightItem(w,i,fHighlight) SNDMSG((w),TCM_HIGHLIGHTITEM,(WPARAM)i,(LPARAM)MAKELONG(fHighlight,0))
+#define TabCtrl_SetExtendedStyle(w,dw) SNDMSG((w),TCM_SETEXTENDEDSTYLE,0,dw)
+#define TabCtrl_GetExtendedStyle(w) SNDMSG((w),TCM_GETEXTENDEDSTYLE,0,0)
+#define TabCtrl_SetUnicodeFormat(w,u) SNDMSG((w),TCM_SETUNICODEFORMAT,(WPARAM)(u),0)
+#define TabCtrl_GetUnicodeFormat(w) SNDMSG((w),TCM_GETUNICODEFORMAT,0,0)
+#define TreeView_GetBkColor(w) (COLORREF)SNDMSG((w),TVM_GETBKCOLOR,0,0)
+#define TreeView_GetInsertMarkColor(w) (COLORREF)SNDMSG((w),TVM_GETINSERTMARKCOLOR,0,0)
+#define TreeView_GetItemHeight(w) (int)SNDMSG((w),TVM_GETITEMHEIGHT,0,0)
+#define TreeView_GetScrollTime(w) (UINT)SNDMSG((w),TVM_GETSCROLLTIME,0,0)
+#define TreeView_GetTextColor(w) (COLORREF)SNDMSG((w),TVM_GETTEXTCOLOR,0,0)
+#define TreeView_SetBkColor(w,c) (COLORREF)SNDMSG((w),TVM_SETBKCOLOR,0,(LPARAM)(c))
+#define TreeView_SetInsertMarkColor(w,c) (COLORREF)SNDMSG((w),TVM_SETINSERTMARKCOLOR,0,(LPARAM)(c))
+#define TreeView_SetItemHeight(w,h) (int)SNDMSG((w),TVM_SETITEMHEIGHT,(WPARAM)(h),0)
+#define TreeView_SetScrollTime(w,t) (UINT)SNDMSG((w),TVM_SETSCROLLTIME,(WPARAM)(UINT)(t),0)
+#define TreeView_SetTextColor(w,c) (COLORREF)SNDMSG((w),TVM_SETTEXTCOLOR,0,(LPARAM)(c))
+#define TreeView_SetInsertMark(w,i,a) (BOOL)SNDMSG((w),TVM_SETINSERTMARK,(WPARAM)(a),(LPARAM)(i))
+#define TreeView_SetUnicodeFormat(w,u) (BOOL)SNDMSG((w),TVM_SETUNICODEFORMAT,(WPARAM)(u),0)
+#define TreeView_GetUnicodeFormat(w) (BOOL)SNDMSG((w),TVM_GETUNICODEFORMAT,0,0)
+#define TreeView_GetLastVisible(w) TreeView_GetNextItem(w,NULL,TVGN_LASTVISIBLE)
+#endif
+#if (_WIN32_IE >= 0x0500)
+#define TreeView_GetItemState(w,i,m) (UINT)SNDMSG((w),TVM_GETITEMSTATE,(WPARAM)(i),(LPARAM)(m))
+#define TreeView_SetItemState(w,i,d,m) \
+{ \
+ TVITEM _tvi;\
+ _tvi.mask=TVIF_STATE;\
+ _tvi.hItem=i; \
+ _tvi.stateMask=m;\
+ _tvi.state=d;\
+ SNDMSG((w),TVM_SETITEM,0,(LPARAM)(TVITEM*)&_tvi);\
+}
+#endif
+
+#ifdef UNICODE
+typedef HDITEMW HDITEM;
+typedef TOOLINFOW TOOLINFO,*PTOOLINFO,*LPTOOLINFO;
+typedef TTHITTESTINFOW TTHITTESTINFO,*LPHITTESTINFO,*LPTTHITTESTINFO;
+typedef TOOLTIPTEXTW TOOLTIPTEXT,*LPTOOLTIPTEXT;
+typedef NMTTDISPINFOW NMTTDISPINFO, *LPNMTTDISPINFO;
+typedef TV_ITEMW TV_ITEM,*LPTV_ITEM;
+typedef TVITEMW TVITEM,*LPTVITEM;
+#if (_WIN32_IE >= 0x0400)
+typedef TVITEMEXW TVITEMEX,*LPTVITEMEX;
+#endif
+typedef TV_INSERTSTRUCTW TV_INSERTSTRUCT,*LPTV_INSERTSTRUCT;
+typedef TVINSERTSTRUCTW TVINSERTSTRUCT,*LPTVINSERTSTRUCT;
+typedef NM_TREEVIEWW NM_TREEVIEW,*LPNM_TREEVIEW;
+typedef NMTREEVIEWW NMTREEVIEW,*LPNMTREEVIEW;
+typedef NMHDDISPINFOW NMHDDISPINFO, *LPNMHDDISPINFO;
+#define ACM_OPEN ACM_OPENW
+#define COMBOBOXEXITEM COMBOBOXEXITEMW
+#define PCOMBOBOXEXITEM PCOMBOBOXEXITEMW
+#define PCCOMBOBOXEXITEM PCCOMBOBOXEXITEMW
+#define CBEM_INSERTITEM CBEM_INSERTITEMW
+#define CBEM_SETITEM CBEM_SETITEMW
+#define CBEM_GETITEM CBEM_GETITEMW
+#define CBEN_ENDEDIT CBEN_ENDEDITW
+#define NMCBEENDEDIT NMCBEENDEDITW
+#define LPNMCBEENDEDIT LPNMCBEENDEDITW
+#define PNMCBEENDEDIT PNMCBEENDEDITW
+#if _WIN32_IE >= 0x0400
+#define NMCOMBOBOXEX NMCOMBOBOXEXW
+#define PNMCOMBOBOXEX PNMCOMBOBOXEXW
+#define CBEN_GETDISPINFO CBEN_GETDISPINFOW
+#define CBEN_DRAGBEGIN CBEN_DRAGBEGINW
+#define NMCBEDRAGBEGIN NMCBEDRAGBEGINW
+#define LPNMCBEDRAGBEGIN LPNMCBEDRAGBEGINW
+#define PNMCBEDRAGBEGIN PNMCBEDRAGBEGINW
+#endif /* _WIN32_IE >= 0x0400 */
+#define SB_GETTEXT SB_GETTEXTW
+#define SB_SETTEXT SB_SETTEXTW
+#define SB_GETTEXTLENGTH SB_GETTEXTLENGTHW
+#define HDM_INSERTITEM HDM_INSERTITEMW
+#define HDM_GETITEM HDM_GETITEMW
+#define HDM_SETITEM HDM_SETITEMW
+#define HDN_ITEMCHANGING HDN_ITEMCHANGINGW
+#define HDN_ITEMCHANGED HDN_ITEMCHANGEDW
+#define HDN_ITEMCLICK HDN_ITEMCLICKW
+#define HDN_ITEMDBLCLICK HDN_ITEMDBLCLICKW
+#define HDN_DIVIDERDBLCLICK HDN_DIVIDERDBLCLICKW
+#define HDN_BEGINTRACK HDN_BEGINTRACKW
+#define HDN_ENDTRACK HDN_ENDTRACKW
+#define HDN_TRACK HDN_TRACKW
+#if (_WIN32_IE >= 0x0300)
+#define HDN_GETDISPINFO HDN_GETDISPINFOW
+#endif
+#define HD_NOTIFY HD_NOTIFYW
+#define TBSAVEPARAMS TBSAVEPARAMSW
+#define TB_GETBUTTONTEXT TB_GETBUTTONTEXTW
+#define TB_SAVERESTORE TB_SAVERESTOREW
+#define TB_ADDSTRING TB_ADDSTRINGW
+#define TBN_GETBUTTONINFO TBN_GETBUTTONINFOW
+#if _WIN32_IE >= 0x400
+#define TB_GETBUTTONINFO TB_GETBUTTONINFOW
+#define TB_SETBUTTONINFO TB_SETBUTTONINFOW
+#define TB_INSERTBUTTON TB_INSERTBUTTONW
+#define TB_ADDBUTTONS TB_ADDBUTTONSW
+#define TB_MAPACCELERATOR TB_MAPACCELERATORW
+#define TB_GETSTRING TB_GETSTRINGW
+#define TBBUTTONINFO TBBUTTONINFOW
+#define LPTBBUTTONINFO LPTBBUTTONINFOW
+#define TBN_GETDISPINFO TBN_GETDISPINFOW
+#define NMTBDISPINFO NMTBDISPINFOW
+#define LPNMTBDISPINFO LPNMTBDISPINFOW
+#define NMTBGETINFOTIP NMTBGETINFOTIPW
+#define LPNMTBGETINFOTIP LPNMTBGETINFOTIPW
+#endif
+#define TBNOTIFY TBNOTIFYW
+#define LPTBNOTIFY LPTBNOTIFYW
+#define NMTOOLBAR NMTOOLBARW
+#define LPNMTOOLBAR LPNMTOOLBARW
+#define TTM_ADDTOOL TTM_ADDTOOLW
+#define TTM_DELTOOL TTM_DELTOOLW
+#define TTM_NEWTOOLRECT TTM_NEWTOOLRECTW
+#define TTM_GETTOOLINFO TTM_GETTOOLINFOW
+#define TTM_SETTOOLINFO TTM_SETTOOLINFOW
+#define TTM_HITTEST TTM_HITTESTW
+#define TTM_GETTEXT TTM_GETTEXTW
+#define TTM_UPDATETIPTEXT TTM_UPDATETIPTEXTW
+#define TTM_ENUMTOOLS TTM_ENUMTOOLSW
+#define TTM_GETCURRENTTOOL TTM_GETCURRENTTOOLW
+#define TTN_NEEDTEXT TTN_NEEDTEXTW
+#define TTN_GETDISPINFO TTN_GETDISPINFOW
+#define SB_GETTEXT SB_GETTEXTW
+#define SB_SETTEXT SB_SETTEXTW
+#define SB_GETTEXTLENGTH SB_GETTEXTLENGTHW
+#define LV_ITEM LV_ITEMW
+#define LVITEM LVITEMW
+#define LPSTR_TEXTCALLBACK LPSTR_TEXTCALLBACKW
+#if _WIN32_IE >= 0x0400
+#define LVBKIMAGE LVBKIMAGEW
+#define LPLVBKIMAGE LPLVBKIMAGEW
+#define LVM_SETBKIMAGE LVM_SETBKIMAGEW
+#define LVM_GETBKIMAGE LVM_GETBKIMAGEW
+#endif /* _WIN32_IE >= 0x400 */
+#define LVM_GETITEM LVM_GETITEMW
+#define LVM_SETITEM LVM_SETITEMW
+#define LVM_INSERTITEM LVM_INSERTITEMW
+#define LV_FINDINFO LV_FINDINFOW
+#define LVFINDINFO LVFINDINFOW
+#define LPFINDINFO LPFINDINFOW
+#define NMLVFINDITEM NMLVFINDITEMW
+#define PNMLVFINDITEM PNMLVFINDITEMW
+#define LPNMLVFINDITEM LPNMLVFINDITEMW
+#define LVM_FINDITEM LVM_FINDITEMW
+#define LVM_GETSTRINGWIDTH LVM_GETSTRINGWIDTHW
+#define LVM_EDITLABEL LVM_EDITLABELW
+#define LV_COLUMN LV_COLUMNW
+#define LVCOLUMN LVCOLUMNW
+#define LVM_GETCOLUMN LVM_GETCOLUMNW
+#define LVM_SETCOLUMN LVM_SETCOLUMNW
+#define LVM_INSERTCOLUMN LVM_INSERTCOLUMNW
+#define LVM_GETITEMTEXT LVM_GETITEMTEXTW
+#define LVM_SETITEMTEXT LVM_SETITEMTEXTW
+#define LVM_GETISEARCHSTRING LVM_GETISEARCHSTRINGW
+#define LVN_BEGINLABELEDIT LVN_BEGINLABELEDITW
+#define LVN_ENDLABELEDIT LVN_ENDLABELEDITW
+#define LVN_GETDISPINFO LVN_GETDISPINFOW
+#define LVN_SETDISPINFO LVN_SETDISPINFOW
+#define LVN_GETINFOTIP LVN_GETINFOTIPW
+#define NMLVGETINFOTIP NMLVGETINFOTIPW
+#define LPNMLVGETINFOTIP LPNMLVGETINFOTIPW
+#define LV_DISPINFO LV_DISPINFOW
+#define NMLVDISPINFO NMLVDISPINFOW
+#define LPNMLVDISPINFO LPNMLVDISPINFOW
+#define TVM_INSERTITEM TVM_INSERTITEMW
+#define TVM_GETITEM TVM_GETITEMW
+#define TVM_SETITEM TVM_SETITEMW
+#define TVM_EDITLABEL TVM_EDITLABELW
+#define TVM_GETISEARCHSTRING TVM_GETISEARCHSTRINGW
+#define TV_DISPINFO NMTVDISPINFOW
+#define NMTVDISPINFO NMTVDISPINFOW
+#define LPNMTVDISPINFO LPNMTVDISPINFOW
+#if (_WIN32_IE >= 0x0400)
+#define NMTVGETINFOTIP NMTVGETINFOTIPW
+#define LPNMTVGETINFOTIP LPNMTVGETINFOTIPW
+#define TVN_GETINFOTIP TVN_GETINFOTIPW
+#endif
+#define TVN_SELCHANGING TVN_SELCHANGINGW
+#define TVN_SELCHANGED TVN_SELCHANGEDW
+#define TVN_GETDISPINFO TVN_GETDISPINFOW
+#define TVN_SETDISPINFO TVN_SETDISPINFOW
+#define TVN_ITEMEXPANDING TVN_ITEMEXPANDINGW
+#define TVN_ITEMEXPANDED TVN_ITEMEXPANDEDW
+#define TVN_BEGINDRAG TVN_BEGINDRAGW
+#define TVN_BEGINRDRAG TVN_BEGINRDRAGW
+#define TVN_DELETEITEM TVN_DELETEITEMW
+#define TVN_BEGINLABELEDIT TVN_BEGINLABELEDITW
+#define TVN_ENDLABELEDIT TVN_ENDLABELEDITW
+#define TC_ITEMHEADER TC_ITEMHEADERW
+#define TC_ITEM TC_ITEMW
+#define TCITEM TCITEMW
+#define LPTCITEM LPTCITEMW
+#define TCM_GETITEM TCM_GETITEMW
+#define TCM_SETITEM TCM_SETITEMW
+#define TCM_INSERTITEM TCM_INSERTITEMW
+#define CreateStatusWindow CreateStatusWindowW
+#define DrawStatusText DrawStatusTextW
+#define ImageList_LoadImage ImageList_LoadImageW
+#define DTM_SETFORMAT DTM_SETFORMATW
+#define DTN_USERSTRING DTN_USERSTRINGW
+#define DTN_WMKEYDOWN DTN_WMKEYDOWNW
+#define DTN_FORMAT DTN_FORMATW
+#define DTN_FORMATQUERY DTN_FORMATQUERYW
+typedef REBARBANDINFOW REBARBANDINFO,*LPREBARBANDINFO;
+#define LPCREBARBANDINFO LPCREBARBANDINFOW
+#define REBARBANDINFO_V3_SIZE REBARBANDINFOW_V3_SIZE
+#define RB_INSERTBAND RB_INSERTBANDW
+#define RB_SETBANDINFO RB_SETBANDINFOW
+#else /* UNICODE */
+typedef HDITEMA HDITEM;
+typedef TOOLINFOA TOOLINFO,*PTOOLINFO,*LPTOOLINFO;
+typedef TTHITTESTINFOA TTHITTESTINFO,*LPHITTESTINFO,*LPTTHITTESTINFO;
+typedef TOOLTIPTEXTA TOOLTIPTEXT,*LPTOOLTIPTEXT;
+typedef NMTTDISPINFOA NMTTDISPINFO, *LPNMTTDISPINFO;
+typedef TV_ITEMA TV_ITEM,*LPTV_ITEM;
+typedef TVITEMA TVITEM,*LPTVITEM;
+#if (_WIN32_IE >= 0x0400)
+typedef TVITEMEXA TVITEMEX,*LPTVITEMEX;
+#endif
+typedef TV_INSERTSTRUCTA TV_INSERTSTRUCT,*LPTV_INSERTSTRUCT;
+typedef TVINSERTSTRUCTA TVINSERTSTRUCT,*LPTVINSERTSTRUCT;
+typedef NM_TREEVIEWA NM_TREEVIEW,*LPNM_TREEVIEW;
+typedef NMTREEVIEWA NMTREEVIEW,*LPNMTREEVIEW;
+typedef NMHDDISPINFOW NMHDDISPINFO, *LPNMHDDISPINFO;
+#define ACM_OPEN ACM_OPENA
+#define COMBOBOXEXITEM COMBOBOXEXITEMA
+#define PCOMBOBOXEXITEM PCOMBOBOXEXITEMA
+#define PCCOMBOBOXEXITEM PCCOMBOBOXEXITEMA
+#define CBEM_INSERTITEM CBEM_INSERTITEMA
+#define CBEM_SETITEM CBEM_SETITEMA
+#define CBEM_GETITEM CBEM_GETITEMA
+#define CBEN_ENDEDIT CBEN_ENDEDITA
+#define NMCBEENDEDIT NMCBEENDEDITA
+#define LPNMCBEENDEDIT LPNMCBEENDEDITA
+#define PNMCBEENDEDIT PNMCBEENDEDITA
+#if _WIN32_IE >= 0x0400
+#define TB_GETBUTTONINFO TB_GETBUTTONINFOA
+#define TB_SETBUTTONINFO TB_SETBUTTONINFOA
+#define TB_INSERTBUTTON TB_INSERTBUTTONA
+#define TB_ADDBUTTONS TB_ADDBUTTONSA
+#define TB_MAPACCELERATOR TB_MAPACCELERATORA
+#define TB_GETSTRING TB_GETSTRINGA
+#define NMCOMBOBOXEX NMCOMBOBOXEXA
+#define PNMCOMBOBOXEX PNMCOMBOBOXEXA
+#define CBEN_DRAGBEGIN CBEN_DRAGBEGINA
+#define CBEN_GETDISPINFO CBEN_GETDISPINFOA
+#define NMCBEDRAGBEGIN NMCBEDRAGBEGINA
+#define LPNMCBEDRAGBEGIN LPNMCBEDRAGBEGINA
+#define PNMCBEDRAGBEGIN PNMCBEDRAGBEGINA
+#define TBN_GETDISPINFO TBN_GETDISPINFOA
+#define NMTBDISPINFO NMTBDISPINFOA
+#define LPNMTBDISPINFO LPNMTBDISPINFOA
+#define NMTBGETINFOTIP NMTBGETINFOTIPA
+#define LPNMTBGETINFOTIP LPNMTBGETINFOTIPA
+#endif /* _WIN32_IE >= 0x0400 */
+#define SB_GETTEXT SB_GETTEXTA
+#define SB_SETTEXT SB_SETTEXTA
+#define SB_GETTEXTLENGTH SB_GETTEXTLENGTHA
+#define HDM_INSERTITEM HDM_INSERTITEMA
+#define HDM_GETITEM HDM_GETITEMA
+#define HDM_SETITEM HDM_SETITEMA
+#define HDN_ITEMCHANGING HDN_ITEMCHANGINGA
+#define HDN_ITEMCHANGED HDN_ITEMCHANGEDA
+#define HDN_ITEMCLICK HDN_ITEMCLICKA
+#define HDN_ITEMDBLCLICK HDN_ITEMDBLCLICKA
+#define HDN_DIVIDERDBLCLICK HDN_DIVIDERDBLCLICKA
+#define HDN_BEGINTRACK HDN_BEGINTRACKA
+#define HDN_ENDTRACK HDN_ENDTRACKA
+#define HDN_TRACK HDN_TRACKA
+#if (_WIN32_IE >= 0x0300)
+#define HDN_GETDISPINFO HDN_GETDISPINFOA
+#endif
+#define HD_NOTIFY HD_NOTIFYA
+#define TBSAVEPARAMS TBSAVEPARAMSA
+#define TB_GETBUTTONTEXT TB_GETBUTTONTEXTA
+#define TB_SAVERESTORE TB_SAVERESTOREA
+#define TB_ADDSTRING TB_ADDSTRINGA
+#define TBN_GETBUTTONINFO TBN_GETBUTTONINFOA
+#if _WIN32_IE >= 0x400
+#define TBBUTTONINFO TBBUTTONINFOA
+#define LPTBBUTTONINFO LPTBBUTTONINFOA
+#endif
+#define TBNOTIFY TBNOTIFYA
+#define LPTBNOTIFY LPTBNOTIFYA
+#define NMTOOLBAR NMTOOLBARA
+#define LPNMTOOLBAR LPNMTOOLBARA
+#define TTM_ADDTOOL TTM_ADDTOOLA
+#define TTM_DELTOOL TTM_DELTOOLA
+#define TTM_NEWTOOLRECT TTM_NEWTOOLRECTA
+#define TTM_GETTOOLINFO TTM_GETTOOLINFOA
+#define TTM_SETTOOLINFO TTM_SETTOOLINFOA
+#define TTM_HITTEST TTM_HITTESTA
+#define TTM_GETTEXT TTM_GETTEXTA
+#define TTM_UPDATETIPTEXT TTM_UPDATETIPTEXTA
+#define TTM_ENUMTOOLS TTM_ENUMTOOLSA
+#define TTM_GETCURRENTTOOL TTM_GETCURRENTTOOLA
+#define TTN_NEEDTEXT TTN_NEEDTEXTA
+#define TTN_GETDISPINFO TTN_GETDISPINFOA
+#define SB_GETTEXT SB_GETTEXTA
+#define SB_SETTEXT SB_SETTEXTA
+#define SB_GETTEXTLENGTH SB_GETTEXTLENGTHA
+#define LV_ITEM LV_ITEMA
+#define LVITEM LVITEMA
+#define LPSTR_TEXTCALLBACK LPSTR_TEXTCALLBACKA
+#if _WIN32_IE >= 0x0400
+#define LVBKIMAGE LVBKIMAGEA
+#define LPLVBKIMAGE LPLVBKIMAGEA
+#define LVM_SETBKIMAGE LVM_SETBKIMAGEA
+#define LVM_GETBKIMAGE LVM_GETBKIMAGEA
+#endif /* _WIN32_IE >= 0x0400 */
+#define LVM_GETITEM LVM_GETITEMA
+#define LVM_SETITEM LVM_SETITEMA
+#define LVM_INSERTITEM LVM_INSERTITEMA
+#define LV_FINDINFO LV_FINDINFOA
+#define LVFINDINFO LVFINDINFOA
+#define LPFINDINFO LPFINDINFOA
+#define NMLVFINDITEM NMLVFINDITEMA
+#define PNMLVFINDITEM PNMLVFINDITEMA
+#define LPNMLVFINDITEM LPNMLVFINDITEMA
+#define LVM_FINDITEM LVM_FINDITEMA
+#define LVM_GETSTRINGWIDTH LVM_GETSTRINGWIDTHA
+#define LVM_EDITLABEL LVM_EDITLABELA
+#define LV_COLUMN LV_COLUMNA
+#define LVCOLUMN LVCOLUMNA
+#define LVM_GETCOLUMN LVM_GETCOLUMNA
+#define LVM_SETCOLUMN LVM_SETCOLUMNA
+#define LVM_INSERTCOLUMN LVM_INSERTCOLUMNA
+#define LVM_GETITEMTEXT LVM_GETITEMTEXTA
+#define LVM_SETITEMTEXT LVM_SETITEMTEXTA
+#define LVM_GETISEARCHSTRING LVM_GETISEARCHSTRINGA
+#define LVN_BEGINLABELEDIT LVN_BEGINLABELEDITA
+#define LVN_ENDLABELEDIT LVN_ENDLABELEDITA
+#define LVN_GETDISPINFO LVN_GETDISPINFOA
+#define LVN_SETDISPINFO LVN_SETDISPINFOA
+#define LVN_GETINFOTIP LVN_GETINFOTIPA
+#define NMLVGETINFOTIP NMLVGETINFOTIPA
+#define LPNMLVGETINFOTIP LPNMLVGETINFOTIPA
+#define LV_DISPINFO LV_DISPINFOA
+#define NMLVDISPINFO NMLVDISPINFOA
+#define LPNMLVDISPINFO LPNMLVDISPINFOA
+#define TVM_INSERTITEM TVM_INSERTITEMA
+#define TVM_GETITEM TVM_GETITEMA
+#define TVM_SETITEM TVM_SETITEMA
+#define TVM_EDITLABEL TVM_EDITLABELA
+#define TVM_GETISEARCHSTRING TVM_GETISEARCHSTRINGA
+#define TV_DISPINFO NMTVDISPINFOA
+#define NMTVDISPINFO NMTVDISPINFOA
+#define LPNMTVDISPINFO LPNMTVDISPINFOA
+#if (_WIN32_IE >= 0x0400)
+#define NMTVGETINFOTIP NMTVGETINFOTIPA
+#define LPNMTVGETINFOTIP LPNMTVGETINFOTIPA
+#define TVN_GETINFOTIP TVN_GETINFOTIPA
+#endif
+#define TVN_SELCHANGING TVN_SELCHANGINGA
+#define TVN_SELCHANGED TVN_SELCHANGEDA
+#define TVN_GETDISPINFO TVN_GETDISPINFOA
+#define TVN_SETDISPINFO TVN_SETDISPINFOA
+#define TVN_ITEMEXPANDING TVN_ITEMEXPANDINGA
+#define TVN_ITEMEXPANDED TVN_ITEMEXPANDEDA
+#define TVN_BEGINDRAG TVN_BEGINDRAGA
+#define TVN_BEGINRDRAG TVN_BEGINRDRAGA
+#define TVN_DELETEITEM TVN_DELETEITEMA
+#define TVN_BEGINLABELEDIT TVN_BEGINLABELEDITA
+#define TVN_ENDLABELEDIT TVN_ENDLABELEDITA
+#define TC_ITEMHEADER TC_ITEMHEADERA
+#define TC_ITEM TC_ITEMA
+#define TCITEM TCITEMA
+#define LPTCITEM LPTCITEMA
+#define TCM_GETITEM TCM_GETITEMA
+#define TCM_SETITEM TCM_SETITEMA
+#define TCM_INSERTITEM TCM_INSERTITEMA
+#define CreateStatusWindow CreateStatusWindowA
+#define DrawStatusText DrawStatusTextA
+#define ImageList_LoadImage ImageList_LoadImageA
+#define DTM_SETFORMAT DTM_SETFORMATA
+#define DTN_USERSTRING DTN_USERSTRINGA
+#define DTN_WMKEYDOWN DTN_WMKEYDOWNA
+#define DTN_FORMAT DTN_FORMATA
+#define DTN_FORMATQUERY DTN_FORMATQUERYA
+typedef REBARBANDINFOA REBARBANDINFO,*LPREBARBANDINFO;
+#define LPCREBARBANDINFO LPCREBARBANDINFOA
+#define REBARBANDINFO_V3_SIZE REBARBANDINFOA_V3_SIZE
+#define RB_INSERTBAND RB_INSERTBANDA
+#define RB_SETBANDINFO RB_SETBANDINFOA
+#endif
+#endif /* RC_INVOKED */
+
+#ifdef _WIN32_WCE /* these are PPC only */
+
+COMMCTRLAPI HWND WINAPI CommandBar_Create(HINSTANCE, HWND, int);
+COMMCTRLAPI BOOL WINAPI CommandBar_Show(HWND, BOOL);
+COMMCTRLAPI int WINAPI CommandBar_AddBitmap(HWND, HINSTANCE, int, int, int, int);
+COMMCTRLAPI HWND WINAPI CommandBar_InsertComboBox(HWND, HINSTANCE, int, UINT, WORD, WORD);
+COMMCTRLAPI BOOL WINAPI CommandBar_InsertMenubar(HWND, HINSTANCE, WORD, WORD );
+COMMCTRLAPI BOOL WINAPI CommandBar_InsertMenubarEx(HWND, HINSTANCE, LPTSTR, WORD);
+COMMCTRLAPI BOOL WINAPI CommandBar_DrawMenuBar(HWND, WORD);
+COMMCTRLAPI HMENU WINAPI CommandBar_GetMenu(HWND, WORD);
+COMMCTRLAPI BOOL WINAPI CommandBar_AddAdornments(HWND, DWORD, DWORD);
+COMMCTRLAPI int WINAPI CommandBar_Height(HWND hwndCB);
+
+/* These two are not in the DLL */
+#define CommandBar_InsertButton(hwnd,i,lptbbutton) \
+ SendMessage((hwnd),TB_INSERTBUTTON,(i),(lptbbutton))
+#define CommandBar_Destroy(hwnd) \
+ DestroyWindow(hwnd)
+
+
+#endif /* _WIN32_WCE */
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/commdlg.h b/tcc/include/winapi/commdlg.h
new file mode 100644
index 0000000..4c38774
--- /dev/null
+++ b/tcc/include/winapi/commdlg.h
@@ -0,0 +1,609 @@
+#ifndef _COMMDLG_H
+#define _COMMDLG_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#pragma pack(push,1)
+
+#define LBSELCHSTRINGA "commdlg_LBSelChangedNotify"
+#define SHAREVISTRINGA "commdlg_ShareViolation"
+#define FILEOKSTRINGA "commdlg_FileNameOK"
+#define COLOROKSTRINGA "commdlg_ColorOK"
+#define SETRGBSTRINGA "commdlg_SetRGBColor"
+#define HELPMSGSTRINGA "commdlg_help"
+#define FINDMSGSTRINGA "commdlg_FindReplace"
+#define LBSELCHSTRINGW L"commdlg_LBSelChangedNotify"
+#define SHAREVISTRINGW L"commdlg_ShareViolation"
+#define FILEOKSTRINGW L"commdlg_FileNameOK"
+#define COLOROKSTRINGW L"commdlg_ColorOK"
+#define SETRGBSTRINGW L"commdlg_SetRGBColor"
+#define HELPMSGSTRINGW L"commdlg_help"
+#define FINDMSGSTRINGW L"commdlg_FindReplace"
+#ifndef CDN_FIRST
+#define CDN_FIRST ((UINT)-601) /* also in commctrl.h */
+#define CDN_LAST ((UINT)-699)
+#endif
+#define CDN_INITDONE CDN_FIRST
+#define CDN_SELCHANGE (CDN_FIRST-1U)
+#define CDN_FOLDERCHANGE (CDN_FIRST-2U)
+#define CDN_SHAREVIOLATION (CDN_FIRST-3U)
+#define CDN_HELP (CDN_FIRST-4U)
+#define CDN_FILEOK (CDN_FIRST-5U)
+#define CDN_TYPECHANGE (CDN_FIRST-6U)
+#define CDM_FIRST (WM_USER+100)
+#define CDM_LAST (WM_USER+200)
+#define CDM_GETSPEC CDM_FIRST
+#define CDM_GETFILEPATH (CDM_FIRST+1)
+#define CDM_GETFOLDERPATH (CDM_FIRST+2)
+#define CDM_GETFOLDERIDLIST (CDM_FIRST+3)
+#define CDM_SETCONTROLTEXT (CDM_FIRST+4)
+#define CDM_HIDECONTROL (CDM_FIRST+5)
+#define CDM_SETDEFEXT (CDM_FIRST+6)
+#define CC_RGBINIT 1
+#define CC_FULLOPEN 2
+#define CC_PREVENTFULLOPEN 4
+#define CC_SHOWHELP 8
+#define CC_ENABLEHOOK 16
+#define CC_ENABLETEMPLATE 32
+#define CC_ENABLETEMPLATEHANDLE 64
+#define CC_SOLIDCOLOR 128
+#define CC_ANYCOLOR 256
+#define CF_SCREENFONTS 1
+#define CF_PRINTERFONTS 2
+#define CF_BOTH 3
+#define CF_SHOWHELP 4
+#define CF_ENABLEHOOK 8
+#define CF_ENABLETEMPLATE 16
+#define CF_ENABLETEMPLATEHANDLE 32
+#define CF_INITTOLOGFONTSTRUCT 64
+#define CF_USESTYLE 128
+#define CF_EFFECTS 256
+#define CF_APPLY 512
+#define CF_ANSIONLY 1024
+#define CF_SCRIPTSONLY CF_ANSIONLY
+#define CF_NOVECTORFONTS 2048
+#define CF_NOOEMFONTS 2048
+#define CF_NOSIMULATIONS 4096
+#define CF_LIMITSIZE 8192
+#define CF_FIXEDPITCHONLY 16384
+#define CF_WYSIWYG 32768
+#define CF_FORCEFONTEXIST 65536
+#define CF_SCALABLEONLY 131072
+#define CF_TTONLY 262144
+#define CF_NOFACESEL 524288
+#define CF_NOSTYLESEL 1048576
+#define CF_NOSIZESEL 2097152
+#define CF_SELECTSCRIPT 4194304
+#define CF_NOSCRIPTSEL 8388608
+#define CF_NOVERTFONTS 0x1000000
+#define SIMULATED_FONTTYPE 0x8000
+#define PRINTER_FONTTYPE 0x4000
+#define SCREEN_FONTTYPE 0x2000
+#define BOLD_FONTTYPE 0x100
+#define ITALIC_FONTTYPE 0x0200
+#define REGULAR_FONTTYPE 0x0400
+#define WM_CHOOSEFONT_GETLOGFONT (WM_USER+1)
+#define WM_CHOOSEFONT_SETLOGFONT (WM_USER+101)
+#define WM_CHOOSEFONT_SETFLAGS (WM_USER+102)
+#define OFN_ALLOWMULTISELECT 512
+#define OFN_CREATEPROMPT 0x2000
+#define OFN_ENABLEHOOK 32
+#define OFN_ENABLESIZING 0x800000
+#define OFN_ENABLETEMPLATE 64
+#define OFN_ENABLETEMPLATEHANDLE 128
+#define OFN_EXPLORER 0x80000
+#define OFN_EXTENSIONDIFFERENT 0x400
+#define OFN_FILEMUSTEXIST 0x1000
+#define OFN_HIDEREADONLY 4
+#define OFN_LONGNAMES 0x200000
+#define OFN_NOCHANGEDIR 8
+#define OFN_NODEREFERENCELINKS 0x100000
+#define OFN_NOLONGNAMES 0x40000
+#define OFN_NONETWORKBUTTON 0x20000
+#define OFN_NOREADONLYRETURN 0x8000
+#define OFN_NOTESTFILECREATE 0x10000
+#define OFN_NOVALIDATE 256
+#define OFN_OVERWRITEPROMPT 2
+#define OFN_PATHMUSTEXIST 0x800
+#define OFN_READONLY 1
+#define OFN_SHAREAWARE 0x4000
+#define OFN_SHOWHELP 16
+#define OFN_SHAREFALLTHROUGH 2
+#define OFN_SHARENOWARN 1
+#define OFN_SHAREWARN 0
+#define OFN_NODEREFERENCELINKS 0x100000
+#if (_WIN32_WINNT >= 0x0500)
+#define OFN_DONTADDTORECENT 0x02000000
+#endif
+#define FR_DIALOGTERM 64
+#define FR_DOWN 1
+#define FR_ENABLEHOOK 256
+#define FR_ENABLETEMPLATE 512
+#define FR_ENABLETEMPLATEHANDLE 0x2000
+#define FR_FINDNEXT 8
+#define FR_HIDEUPDOWN 0x4000
+#define FR_HIDEMATCHCASE 0x8000
+#define FR_HIDEWHOLEWORD 0x10000
+#define FR_MATCHALEFHAMZA 0x80000000
+#define FR_MATCHCASE 4
+#define FR_MATCHDIAC 0x20000000
+#define FR_MATCHKASHIDA 0x40000000
+#define FR_NOMATCHCASE 0x800
+#define FR_NOUPDOWN 0x400
+#define FR_NOWHOLEWORD 4096
+#define FR_REPLACE 16
+#define FR_REPLACEALL 32
+#define FR_SHOWHELP 128
+#define FR_WHOLEWORD 2
+#define PD_ALLPAGES 0x00000000
+#define PD_SELECTION 0x00000001
+#define PD_PAGENUMS 0x00000002
+#define PD_NOSELECTION 0x00000004
+#define PD_NOPAGENUMS 0x00000008
+#define PD_COLLATE 0x00000010
+#define PD_PRINTTOFILE 0x00000020
+#define PD_PRINTSETUP 0x00000040
+#define PD_NOWARNING 0x00000080
+#define PD_RETURNDC 0x00000100
+#define PD_RETURNIC 0x00000200
+#define PD_RETURNDEFAULT 0x00000400
+#define PD_SHOWHELP 0x00000800
+#define PD_ENABLEPRINTHOOK 0x00001000
+#define PD_ENABLESETUPHOOK 0x00002000
+#define PD_ENABLEPRINTTEMPLATE 0x00004000
+#define PD_ENABLESETUPTEMPLATE 0x00008000
+#define PD_ENABLEPRINTTEMPLATEHANDLE 0x00010000
+#define PD_ENABLESETUPTEMPLATEHANDLE 0x00020000
+#define PD_USEDEVMODECOPIES 0x00040000
+#define PD_USEDEVMODECOPIESANDCOLLATE 0x00040000
+#define PD_DISABLEPRINTTOFILE 0x00080000
+#define PD_HIDEPRINTTOFILE 0x00100000
+#define PD_NONETWORKBUTTON 0x00200000
+#if (_WIN32_WINNT >= 0x0500)
+#define PD_CURRENTPAGE 0x00400000
+#define PD_NOCURRENTPAGE 0x00800000
+#define PD_EXCLUSIONFLAGS 0x01000000
+#define PD_USELARGETEMPLATE 0x10000000
+#define PD_RESULT_CANCEL 0
+#define PD_RESULT_PRINT 1
+#define PD_RESULT_APPLY 2
+#define START_PAGE_GENERAL 0XFFFFFFFF
+#endif
+#define PSD_DEFAULTMINMARGINS 0
+#define PSD_INWININIINTLMEASURE 0
+#define PSD_MINMARGINS 1
+#define PSD_MARGINS 2
+#define PSD_INTHOUSANDTHSOFINCHES 4
+#define PSD_INHUNDREDTHSOFMILLIMETERS 8
+#define PSD_DISABLEMARGINS 16
+#define PSD_DISABLEPRINTER 32
+#define PSD_NOWARNING 128
+#define PSD_DISABLEORIENTATION 256
+#define PSD_DISABLEPAPER 512
+#define PSD_RETURNDEFAULT 1024
+#define PSD_SHOWHELP 2048
+#define PSD_ENABLEPAGESETUPHOOK 8192
+#define PSD_ENABLEPAGESETUPTEMPLATE 0x8000
+#define PSD_ENABLEPAGESETUPTEMPLATEHANDLE 0x20000
+#define PSD_ENABLEPAGEPAINTHOOK 0x40000
+#define PSD_DISABLEPAGEPAINTING 0x80000
+#define WM_PSD_PAGESETUPDLG WM_USER
+#define WM_PSD_FULLPAGERECT (WM_USER+1)
+#define WM_PSD_MINMARGINRECT (WM_USER+2)
+#define WM_PSD_MARGINRECT (WM_USER+3)
+#define WM_PSD_GREEKTEXTRECT (WM_USER+4)
+#define WM_PSD_ENVSTAMPRECT (WM_USER+5)
+#define WM_PSD_YAFULLPAGERECT (WM_USER+6)
+#define CD_LBSELNOITEMS (-1)
+#define CD_LBSELCHANGE 0
+#define CD_LBSELSUB 1
+#define CD_LBSELADD 2
+#define DN_DEFAULTPRN 1
+#if (_WIN32_WINNT >= 0x0500)
+#define OPENFILENAME_SIZE_VERSION_400 76
+#endif
+
+#ifndef SNDMSG
+#ifdef __cplusplus
+#define SNDMSG ::SendMessage
+#else
+#define SNDMSG SendMessage
+#endif
+#endif /* ifndef SNDMSG */
+
+#define CommDlg_OpenSave_GetSpec(d,s,m) ((int)SNDMSG((d),CDM_GETSPEC,(m),(LPARAM)(s)))
+#define CommDlg_OpenSave_GetSpecA CommDlg_OpenSave_GetSpec
+#define CommDlg_OpenSave_GetSpecW CommDlg_OpenSave_GetSpec
+#define CommDlg_OpenSave_GetFilePath(d,s,m) ((int)SNDMSG((d),CDM_GETFILEPATH,(m),(LPARAM)(s)))
+#define CommDlg_OpenSave_GetFilePathA CommDlg_OpenSave_GetFilePath
+#define CommDlg_OpenSave_GetFilePathW CommDlg_OpenSave_GetFilePath
+#define CommDlg_OpenSave_GetFolderPath(d,s,m) ((int)SNDMSG((d),CDM_GETFOLDERPATH,(m),(LPARAM)(LPSTR)(s)))
+#define CommDlg_OpenSave_GetFolderPathA CommDlg_OpenSave_GetFolderPath
+#define CommDlg_OpenSave_GetFolderPathW CommDlg_OpenSave_GetFolderPath
+#define CommDlg_OpenSave_GetFolderIDList(d,i,m) ((int)SNDMSG((d),CDM_GETFOLDERIDLIST,(m),(LPARAM)(i)))
+#define CommDlg_OpenSave_SetControlText(d,i,t) ((void)SNDMSG((d),CDM_SETCONTROLTEXT,(i),(LPARAM)(t)))
+#define CommDlg_OpenSave_HideControl(d,i) ((void)SNDMSG((d),CDM_HIDECONTROL,(i),0))
+#define CommDlg_OpenSave_SetDefExt(d,e) ((void)SNDMSG((d),CDM_SETDEFEXT,0,(LPARAM)(e)))
+
+typedef UINT (APIENTRY *__CDHOOKPROC)(HWND,UINT,WPARAM,LPARAM);
+typedef __CDHOOKPROC LPCCHOOKPROC;
+typedef __CDHOOKPROC LPCFHOOKPROC;
+typedef __CDHOOKPROC LPFRHOOKPROC;
+typedef __CDHOOKPROC LPOFNHOOKPROC;
+typedef __CDHOOKPROC LPPAGEPAINTHOOK;
+typedef __CDHOOKPROC LPPAGESETUPHOOK;
+typedef __CDHOOKPROC LPSETUPHOOKPROC;
+typedef __CDHOOKPROC LPPRINTHOOKPROC;
+typedef struct tagCHOOSECOLORA {
+ DWORD lStructSize;
+ HWND hwndOwner;
+ HWND hInstance;
+ COLORREF rgbResult;
+ COLORREF* lpCustColors;
+ DWORD Flags;
+ LPARAM lCustData;
+ LPCCHOOKPROC lpfnHook;
+ LPCSTR lpTemplateName;
+} CHOOSECOLORA,*LPCHOOSECOLORA;
+typedef struct tagCHOOSECOLORW {
+ DWORD lStructSize;
+ HWND hwndOwner;
+ HWND hInstance;
+ COLORREF rgbResult;
+ COLORREF* lpCustColors;
+ DWORD Flags;
+ LPARAM lCustData;
+ LPCCHOOKPROC lpfnHook;
+ LPCWSTR lpTemplateName;
+} CHOOSECOLORW,*LPCHOOSECOLORW;
+typedef struct tagCHOOSEFONTA {
+ DWORD lStructSize;
+ HWND hwndOwner;
+ HDC hDC;
+ LPLOGFONTA lpLogFont;
+ INT iPointSize;
+ DWORD Flags;
+ DWORD rgbColors;
+ LPARAM lCustData;
+ LPCFHOOKPROC lpfnHook;
+ LPCSTR lpTemplateName;
+ HINSTANCE hInstance;
+ LPSTR lpszStyle;
+ WORD nFontType;
+ WORD ___MISSING_ALIGNMENT__;
+ INT nSizeMin;
+ INT nSizeMax;
+} CHOOSEFONTA,*LPCHOOSEFONTA;
+typedef struct tagCHOOSEFONTW {
+ DWORD lStructSize;
+ HWND hwndOwner;
+ HDC hDC;
+ LPLOGFONTW lpLogFont;
+ INT iPointSize;
+ DWORD Flags;
+ DWORD rgbColors;
+ LPARAM lCustData;
+ LPCFHOOKPROC lpfnHook;
+ LPCWSTR lpTemplateName;
+ HINSTANCE hInstance;
+ LPWSTR lpszStyle;
+ WORD nFontType;
+ WORD ___MISSING_ALIGNMENT__;
+ INT nSizeMin;
+ INT nSizeMax;
+} CHOOSEFONTW,*LPCHOOSEFONTW;
+typedef struct tagDEVNAMES {
+ WORD wDriverOffset;
+ WORD wDeviceOffset;
+ WORD wOutputOffset;
+ WORD wDefault;
+} DEVNAMES,*LPDEVNAMES;
+typedef struct {
+ DWORD lStructSize;
+ HWND hwndOwner;
+ HINSTANCE hInstance;
+ DWORD Flags;
+ LPSTR lpstrFindWhat;
+ LPSTR lpstrReplaceWith;
+ WORD wFindWhatLen;
+ WORD wReplaceWithLen;
+ LPARAM lCustData;
+ LPFRHOOKPROC lpfnHook;
+ LPCSTR lpTemplateName;
+} FINDREPLACEA,*LPFINDREPLACEA;
+typedef struct {
+ DWORD lStructSize;
+ HWND hwndOwner;
+ HINSTANCE hInstance;
+ DWORD Flags;
+ LPWSTR lpstrFindWhat;
+ LPWSTR lpstrReplaceWith;
+ WORD wFindWhatLen;
+ WORD wReplaceWithLen;
+ LPARAM lCustData;
+ LPFRHOOKPROC lpfnHook;
+ LPCWSTR lpTemplateName;
+} FINDREPLACEW,*LPFINDREPLACEW;
+typedef struct tagOFNA {
+ DWORD lStructSize;
+ HWND hwndOwner;
+ HINSTANCE hInstance;
+ LPCSTR lpstrFilter;
+ LPSTR lpstrCustomFilter;
+ DWORD nMaxCustFilter;
+ DWORD nFilterIndex;
+ LPSTR lpstrFile;
+ DWORD nMaxFile;
+ LPSTR lpstrFileTitle;
+ DWORD nMaxFileTitle;
+ LPCSTR lpstrInitialDir;
+ LPCSTR lpstrTitle;
+ DWORD Flags;
+ WORD nFileOffset;
+ WORD nFileExtension;
+ LPCSTR lpstrDefExt;
+ DWORD lCustData;
+ LPOFNHOOKPROC lpfnHook;
+ LPCSTR lpTemplateName;
+#if (_WIN32_WINNT >= 0x0500)
+ void * pvReserved;
+ DWORD dwReserved;
+ DWORD FlagsEx;
+#endif /* (_WIN32_WINNT >= 0x0500) */
+} OPENFILENAMEA,*LPOPENFILENAMEA;
+typedef struct tagOFNW {
+ DWORD lStructSize;
+ HWND hwndOwner;
+ HINSTANCE hInstance;
+ LPCWSTR lpstrFilter;
+ LPWSTR lpstrCustomFilter;
+ DWORD nMaxCustFilter;
+ DWORD nFilterIndex;
+ LPWSTR lpstrFile;
+ DWORD nMaxFile;
+ LPWSTR lpstrFileTitle;
+ DWORD nMaxFileTitle;
+ LPCWSTR lpstrInitialDir;
+ LPCWSTR lpstrTitle;
+ DWORD Flags;
+ WORD nFileOffset;
+ WORD nFileExtension;
+ LPCWSTR lpstrDefExt;
+ DWORD lCustData;
+ LPOFNHOOKPROC lpfnHook;
+ LPCWSTR lpTemplateName;
+#if (_WIN32_WINNT >= 0x0500)
+ void * pvReserved;
+ DWORD dwReserved;
+ DWORD FlagsEx;
+#endif /* (_WIN32_WINNT >= 0x0500) */
+} OPENFILENAMEW,*LPOPENFILENAMEW;
+typedef struct _OFNOTIFYA {
+ NMHDR hdr;
+ LPOPENFILENAMEA lpOFN;
+ LPSTR pszFile;
+} OFNOTIFYA,*LPOFNOTIFYA;
+typedef struct _OFNOTIFYW {
+ NMHDR hdr;
+ LPOPENFILENAMEW lpOFN;
+ LPWSTR pszFile;
+} OFNOTIFYW,*LPOFNOTIFYW;
+typedef struct tagPSDA {
+ DWORD lStructSize;
+ HWND hwndOwner;
+ HGLOBAL hDevMode;
+ HGLOBAL hDevNames;
+ DWORD Flags;
+ POINT ptPaperSize;
+ RECT rtMinMargin;
+ RECT rtMargin;
+ HINSTANCE hInstance;
+ LPARAM lCustData;
+ LPPAGESETUPHOOK lpfnPageSetupHook;
+ LPPAGEPAINTHOOK lpfnPagePaintHook;
+ LPCSTR lpPageSetupTemplateName;
+ HGLOBAL hPageSetupTemplate;
+} PAGESETUPDLGA,*LPPAGESETUPDLGA;
+typedef struct tagPSDW {
+ DWORD lStructSize;
+ HWND hwndOwner;
+ HGLOBAL hDevMode;
+ HGLOBAL hDevNames;
+ DWORD Flags;
+ POINT ptPaperSize;
+ RECT rtMinMargin;
+ RECT rtMargin;
+ HINSTANCE hInstance;
+ LPARAM lCustData;
+ LPPAGESETUPHOOK lpfnPageSetupHook;
+ LPPAGEPAINTHOOK lpfnPagePaintHook;
+ LPCWSTR lpPageSetupTemplateName;
+ HGLOBAL hPageSetupTemplate;
+} PAGESETUPDLGW,*LPPAGESETUPDLGW;
+typedef struct tagPDA {
+ DWORD lStructSize;
+ HWND hwndOwner;
+ HANDLE hDevMode;
+ HANDLE hDevNames;
+ HDC hDC;
+ DWORD Flags;
+ WORD nFromPage;
+ WORD nToPage;
+ WORD nMinPage;
+ WORD nMaxPage;
+ WORD nCopies;
+ HINSTANCE hInstance;
+ DWORD lCustData;
+ LPPRINTHOOKPROC lpfnPrintHook;
+ LPSETUPHOOKPROC lpfnSetupHook;
+ LPCSTR lpPrintTemplateName;
+ LPCSTR lpSetupTemplateName;
+ HANDLE hPrintTemplate;
+ HANDLE hSetupTemplate;
+} PRINTDLGA,*LPPRINTDLGA;
+typedef struct tagPDW {
+ DWORD lStructSize;
+ HWND hwndOwner;
+ HANDLE hDevMode;
+ HANDLE hDevNames;
+ HDC hDC;
+ DWORD Flags;
+ WORD nFromPage;
+ WORD nToPage;
+ WORD nMinPage;
+ WORD nMaxPage;
+ WORD nCopies;
+ HINSTANCE hInstance;
+ DWORD lCustData;
+ LPPRINTHOOKPROC lpfnPrintHook;
+ LPSETUPHOOKPROC lpfnSetupHook;
+ LPCWSTR lpPrintTemplateName;
+ LPCWSTR lpSetupTemplateName;
+ HANDLE hPrintTemplate;
+ HANDLE hSetupTemplate;
+} PRINTDLGW,*LPPRINTDLGW;
+#if (WINVER >= 0x0500) && !defined (_OBJC_NO_COM)
+#include <unknwn.h> /* for LPUNKNOWN */
+#include <prsht.h> /* for HPROPSHEETPAGE */
+typedef struct tagPRINTPAGERANGE {
+ DWORD nFromPage;
+ DWORD nToPage;
+} PRINTPAGERANGE, *LPPRINTPAGERANGE;
+typedef struct tagPDEXA {
+ DWORD lStructSize;
+ HWND hwndOwner;
+ HGLOBAL hDevMode;
+ HGLOBAL hDevNames;
+ HDC hDC;
+ DWORD Flags;
+ DWORD Flags2;
+ DWORD ExclusionFlags;
+ DWORD nPageRanges;
+ DWORD nMaxPageRanges;
+ LPPRINTPAGERANGE lpPageRanges;
+ DWORD nMinPage;
+ DWORD nMaxPage;
+ DWORD nCopies;
+ HINSTANCE hInstance;
+ LPCSTR lpPrintTemplateName;
+ LPUNKNOWN lpCallback;
+ DWORD nPropertyPages;
+ HPROPSHEETPAGE *lphPropertyPages;
+ DWORD nStartPage;
+ DWORD dwResultAction;
+} PRINTDLGEXA, *LPPRINTDLGEXA;
+typedef struct tagPDEXW {
+ DWORD lStructSize;
+ HWND hwndOwner;
+ HGLOBAL hDevMode;
+ HGLOBAL hDevNames;
+ HDC hDC;
+ DWORD Flags;
+ DWORD Flags2;
+ DWORD ExclusionFlags;
+ DWORD nPageRanges;
+ DWORD nMaxPageRanges;
+ LPPRINTPAGERANGE lpPageRanges;
+ DWORD nMinPage;
+ DWORD nMaxPage;
+ DWORD nCopies;
+ HINSTANCE hInstance;
+ LPCWSTR lpPrintTemplateName;
+ LPUNKNOWN lpCallback;
+ DWORD nPropertyPages;
+ HPROPSHEETPAGE *lphPropertyPages;
+ DWORD nStartPage;
+ DWORD dwResultAction;
+} PRINTDLGEXW, *LPPRINTDLGEXW;
+#endif /* WINVER >= 0x0500 */
+
+BOOL WINAPI ChooseColorA(LPCHOOSECOLORA);
+BOOL WINAPI ChooseColorW(LPCHOOSECOLORW);
+BOOL WINAPI ChooseFontA(LPCHOOSEFONTA);
+BOOL WINAPI ChooseFontW(LPCHOOSEFONTW);
+DWORD WINAPI CommDlgExtendedError(void);
+HWND WINAPI FindTextA(LPFINDREPLACEA);
+HWND WINAPI FindTextW(LPFINDREPLACEW);
+short WINAPI GetFileTitleA(LPCSTR,LPSTR,WORD);
+short WINAPI GetFileTitleW(LPCWSTR,LPWSTR,WORD);
+BOOL WINAPI GetOpenFileNameA(LPOPENFILENAMEA);
+BOOL WINAPI GetOpenFileNameW(LPOPENFILENAMEW);
+BOOL WINAPI GetSaveFileNameA(LPOPENFILENAMEA);
+BOOL WINAPI GetSaveFileNameW(LPOPENFILENAMEW);
+BOOL WINAPI PageSetupDlgA(LPPAGESETUPDLGA);
+BOOL WINAPI PageSetupDlgW(LPPAGESETUPDLGW);
+BOOL WINAPI PrintDlgA(LPPRINTDLGA);
+BOOL WINAPI PrintDlgW(LPPRINTDLGW);
+HWND WINAPI ReplaceTextA(LPFINDREPLACEA);
+HWND WINAPI ReplaceTextW(LPFINDREPLACEW);
+#if (WINVER >= 0x0500) && !defined (_OBJC_NO_COM)
+HRESULT WINAPI PrintDlgExA(LPPRINTDLGEXA);
+HRESULT WINAPI PrintDlgExW(LPPRINTDLGEXW);
+#endif /* WINVER >= 0x0500 */
+
+#ifdef UNICODE
+#define LBSELCHSTRING LBSELCHSTRINGW
+#define SHAREVISTRING SHAREVISTRINGW
+#define FILEOKSTRING FILEOKSTRINGW
+#define COLOROKSTRING COLOROKSTRINGW
+#define SETRGBSTRING SETRGBSTRINGW
+#define HELPMSGSTRING HELPMSGSTRINGW
+#define FINDMSGSTRING FINDMSGSTRINGW
+typedef CHOOSECOLORW CHOOSECOLOR,*LPCHOOSECOLOR;
+typedef CHOOSEFONTW CHOOSEFONT,*LPCHOOSEFONT;
+typedef FINDREPLACEW FINDREPLACE,*LPFINDREPLACE;
+typedef OPENFILENAMEW OPENFILENAME,*LPOPENFILENAME;
+typedef OFNOTIFYW OFNOTIFY,*LPOFNOTIFY;
+typedef PAGESETUPDLGW PAGESETUPDLG,*LPPAGESETUPDLG;
+typedef PRINTDLGW PRINTDLG,*LPPRINTDLG;
+#define ChooseColor ChooseColorW
+#define ChooseFont ChooseFontW
+#define FindText FindTextW
+#define GetFileTitle GetFileTitleW
+#define GetOpenFileName GetOpenFileNameW
+#define GetSaveFileName GetSaveFileNameW
+#define PageSetupDlg PageSetupDlgW
+#define PrintDlg PrintDlgW
+#define ReplaceText ReplaceTextW
+#if (WINVER >= 0x0500) && !defined (_OBJC_NO_COM)
+typedef PRINTDLGEXW PRINTDLGEX, *LPPRINTDLGEX;
+#define PrintDlgEx PrintDlgExW
+#endif /* WINVER >= 0x0500 */
+#else /* UNICODE */
+#define LBSELCHSTRING LBSELCHSTRINGA
+#define SHAREVISTRING SHAREVISTRINGA
+#define FILEOKSTRING FILEOKSTRINGA
+#define COLOROKSTRING COLOROKSTRINGA
+#define SETRGBSTRING SETRGBSTRINGA
+#define HELPMSGSTRING HELPMSGSTRINGA
+#define FINDMSGSTRING FINDMSGSTRINGA
+typedef CHOOSECOLORA CHOOSECOLOR,*LPCHOOSECOLOR;
+typedef CHOOSEFONTA CHOOSEFONT,*LPCHOOSEFONT;
+typedef FINDREPLACEA FINDREPLACE,*LPFINDREPLACE;
+typedef OPENFILENAMEA OPENFILENAME,*LPOPENFILENAME;
+typedef OFNOTIFYA OFNOTIFY,*LPOFNOTIFY;
+typedef PAGESETUPDLGA PAGESETUPDLG,*LPPAGESETUPDLG;
+typedef PRINTDLGA PRINTDLG,*LPPRINTDLG;
+#define ChooseColor ChooseColorA
+#define ChooseFont ChooseFontA
+#define FindText FindTextA
+#define GetFileTitle GetFileTitleA
+#define GetOpenFileName GetOpenFileNameA
+#define GetSaveFileName GetSaveFileNameA
+#define PageSetupDlg PageSetupDlgA
+#define PrintDlg PrintDlgA
+#define ReplaceText ReplaceTextA
+#if (WINVER >= 0x0500) && !defined (_OBJC_NO_COM)
+typedef PRINTDLGEXA PRINTDLGEX, *LPPRINTDLGEX;
+#define PrintDlgEx PrintDlgExA
+#endif /* WINVER >= 0x0500 */
+#endif /* UNICODE */
+#pragma pack(pop)
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/control.h b/tcc/include/winapi/control.h
new file mode 100644
index 0000000..9f9f7cf
--- /dev/null
+++ b/tcc/include/winapi/control.h
@@ -0,0 +1,18 @@
+#ifndef _CONTROL_H
+#define _CONTROL_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--- DirectShow Reference - DirectShow Data Types */
+typedef LONG_PTR OAEVENT;
+typedef LONG_PTR OAHWND;
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/cpl.h b/tcc/include/winapi/cpl.h
new file mode 100644
index 0000000..aaec597
--- /dev/null
+++ b/tcc/include/winapi/cpl.h
@@ -0,0 +1,61 @@
+#ifndef _CPL_H
+#define _CPL_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#define WM_CPL_LAUNCH (WM_USER+1000)
+#define WM_CPL_LAUNCHED (WM_USER+1001)
+#define CPL_DYNAMIC_RES 0
+#define CPL_INIT 1
+#define CPL_GETCOUNT 2
+#define CPL_INQUIRE 3
+#define CPL_SELECT 4
+#define CPL_DBLCLK 5
+#define CPL_STOP 6
+#define CPL_EXIT 7
+#define CPL_NEWINQUIRE 8
+#define CPL_STARTWPARMSA 9
+#define CPL_STARTWPARMSW 10
+#define CPL_SETUP 200
+typedef LONG(APIENTRY *APPLET_PROC)(HWND,UINT,LONG,LONG);
+typedef struct tagCPLINFO {
+ int idIcon;
+ int idName;
+ int idInfo;
+ LONG lData;
+} CPLINFO,*LPCPLINFO;
+typedef struct tagNEWCPLINFOA {
+ DWORD dwSize;
+ DWORD dwFlags;
+ DWORD dwHelpContext;
+ LONG lData;
+ HICON hIcon;
+ CHAR szName[32];
+ CHAR szInfo[64];
+ CHAR szHelpFile[128];
+} NEWCPLINFOA,*LPNEWCPLINFOA;
+typedef struct tagNEWCPLINFOW {
+ DWORD dwSize;
+ DWORD dwFlags;
+ DWORD dwHelpContext;
+ LONG lData;
+ HICON hIcon;
+ WCHAR szName[32];
+ WCHAR szInfo[64];
+ WCHAR szHelpFile[128];
+} NEWCPLINFOW,*LPNEWCPLINFOW;
+#ifdef UNICODE
+#define CPL_STARTWPARMS CPL_STARTWPARMSW
+typedef NEWCPLINFOW NEWCPLINFO,*LPNEWCPLINFO;
+#else
+#define CPL_STARTWPARMS CPL_STARTWPARMSA
+typedef NEWCPLINFOA NEWCPLINFO,*LPNEWCPLINFO;
+#endif
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/cplext.h b/tcc/include/winapi/cplext.h
new file mode 100644
index 0000000..34333b5
--- /dev/null
+++ b/tcc/include/winapi/cplext.h
@@ -0,0 +1,12 @@
+#ifndef _CPLEXT_H
+#define _CPLEXT_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#define CPLPAGE_MOUSE_BUTTONS 1
+#define CPLPAGE_MOUSE_PTRMOTION 2
+#define CPLPAGE_MOUSE_WHEEL 3
+#define CPLPAGE_KEYBOARD_SPEED 1
+#define CPLPAGE_DISPLAY_BACKGROUND 1
+#endif
diff --git a/tcc/include/winapi/custcntl.h b/tcc/include/winapi/custcntl.h
new file mode 100644
index 0000000..8a9d5ff
--- /dev/null
+++ b/tcc/include/winapi/custcntl.h
@@ -0,0 +1,102 @@
+#ifndef _CUSTCNTL_H
+#define _CUSTCNTL_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define CCF_NOTEXT 1
+#define CCHCCCLASS 32
+#define CCHCCDESC 32
+#define CCHCCTEXT 256
+
+typedef struct tagCCSTYLEA {
+ DWORD flStyle;
+ DWORD flExtStyle;
+ CHAR szText[CCHCCTEXT];
+ LANGID lgid;
+ WORD wReserved1;
+} CCSTYLEA,*LPCCSTYLEA;
+typedef struct tagCCSTYLEW {
+ DWORD flStyle;
+ DWORD flExtStyle;
+ WCHAR szText[CCHCCTEXT];
+ LANGID lgid;
+ WORD wReserved1;
+} CCSTYLEW,*LPCCSTYLEW;
+typedef struct tagCCSTYLEFLAGA {
+ DWORD flStyle;
+ DWORD flStyleMask;
+ LPSTR pszStyle;
+} CCSTYLEFLAGA,*LPCCSTYLEFLAGA;
+typedef struct tagCCSTYLEFLAGW {
+ DWORD flStyle;
+ DWORD flStyleMask;
+ LPWSTR pszStyle;
+} CCSTYLEFLAGW,*LPCCSTYLEFLAGW;
+typedef BOOL(CALLBACK* LPFNCCSTYLEA)(HWND,LPCCSTYLEA);
+typedef INT(CALLBACK* LPFNCCSIZETOTEXTA)(DWORD,DWORD,HFONT,LPSTR);
+typedef struct tagCCINFOA {
+ CHAR szClass[CCHCCCLASS];
+ DWORD flOptions;
+ CHAR szDesc[CCHCCDESC];
+ UINT cxDefault;
+ UINT cyDefault;
+ DWORD flStyleDefault;
+ DWORD flExtStyleDefault;
+ DWORD flCtrlTypeMask;
+ CHAR szTextDefault[CCHCCTEXT];
+ INT cStyleFlags;
+ LPCCSTYLEFLAGA aStyleFlags;
+ LPFNCCSTYLEA lpfnStyle;
+ LPFNCCSIZETOTEXTA lpfnSizeToText;
+ DWORD dwReserved1;
+ DWORD dwReserved2;
+} CCINFOA,*LPCCINFOA;
+typedef UINT(CALLBACK* LPFNCCINFOA)(LPCCINFOA);
+typedef BOOL(CALLBACK* LPFNCCSTYLEW)(HWND,LPCCSTYLEW);
+typedef INT (CALLBACK* LPFNCCSIZETOTEXTW)(DWORD,DWORD,HFONT,LPWSTR);
+typedef struct tagCCINFOW {
+ WCHAR szClass[CCHCCCLASS];
+ DWORD flOptions;
+ WCHAR szDesc[CCHCCDESC];
+ UINT cxDefault;
+ UINT cyDefault;
+ DWORD flStyleDefault;
+ DWORD flExtStyleDefault;
+ DWORD flCtrlTypeMask;
+ WCHAR szTextDefault[CCHCCTEXT];
+ INT cStyleFlags;
+ LPCCSTYLEFLAGW aStyleFlags;
+ LPFNCCSTYLEW lpfnStyle;
+ LPFNCCSIZETOTEXTW lpfnSizeToText;
+ DWORD dwReserved1;
+ DWORD dwReserved2;
+} CCINFOW,*LPCCINFOW;
+typedef UINT(CALLBACK* LPFNCCINFOW)(LPCCINFOW);
+
+UINT CALLBACK CustomControlInfoA(LPCCINFOA acci);
+UINT CALLBACK CustomControlInfoW(LPCCINFOW acci);
+
+#ifdef UNICODE
+typedef CCSTYLEW CCSTYLE,*LPCCSTYLE;
+typedef CCSTYLEFLAGW CCSTYLEFLAG,*LPCCSTYLEFLAG;
+typedef CCINFOW CCINFO,*LPCCINFO;
+#define LPFNCCSTYLE LPFNCCSTYLEW
+#define LPFNCCSIZETOTEXT LPFNCCSIZETOTEXTW
+#define LPFNCCINFO LPFNCCINFOW
+#else
+typedef CCSTYLEA CCSTYLE,*LPCCSTYLE;
+typedef CCSTYLEFLAGA CCSTYLEFLAG,*LPCCSTYLEFLAG;
+typedef CCINFOA CCINFO,*LPCCINFO;
+#define LPFNCCSTYLE LPFNCCSTYLEA
+#define LPFNCCSIZETOTEXT LPFNCCSIZETOTEXTA
+#define LPFNCCINFO LPFNCCINFOA
+#endif
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/dbt.h b/tcc/include/winapi/dbt.h
new file mode 100644
index 0000000..69c15af
--- /dev/null
+++ b/tcc/include/winapi/dbt.h
@@ -0,0 +1,154 @@
+#ifndef _DBT_H
+#define _DBT_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#define DBT_NO_DISK_SPACE 0x47
+#define DBT_CONFIGMGPRIVATE 0x7FFF
+#define DBT_DEVICEARRIVAL 0x8000
+#define DBT_DEVICEQUERYREMOVE 0x8001
+#define DBT_DEVICEQUERYREMOVEFAILED 0x8002
+#define DBT_DEVICEREMOVEPENDING 0x8003
+#define DBT_DEVICEREMOVECOMPLETE 0x8004
+#define DBT_DEVICETYPESPECIFIC 0x8005
+#define DBT_DEVTYP_OEM 0
+#define DBT_DEVTYP_DEVNODE 1
+#define DBT_DEVTYP_VOLUME 2
+#define DBT_DEVTYP_PORT 3
+#define DBT_DEVTYP_NET 4
+#if (_WIN32_WINDOWS >= 0x0410 || _WIN32_WINNT >= 0x0500)
+#define DBT_DEVTYP_DEVICEINTERFACE 5
+#define DBT_DEVTYP_HANDLE 6
+#endif /* (_WIN32_WINDOWS >= 0x0410 || _WIN32_WINNT >= 0x0500) */
+#define DBT_APPYBEGIN 0
+#define DBT_APPYEND 1
+#define DBT_DEVNODES_CHANGED 7
+#define DBT_QUERYCHANGECONFIG 0x17
+#define DBT_CONFIGCHANGED 0x18
+#define DBT_CONFIGCHANGECANCELED 0x19
+#define DBT_MONITORCHANGE 0x1B
+#define DBT_SHELLLOGGEDON 32
+#define DBT_CONFIGMGAPI32 34
+#define DBT_VXDINITCOMPLETE 35
+#define DBT_VOLLOCKQUERYLOCK 0x8041
+#define DBT_VOLLOCKLOCKTAKEN 0x8042
+#define DBT_VOLLOCKLOCKFAILED 0x8043
+#define DBT_VOLLOCKQUERYUNLOCK 0x8044
+#define DBT_VOLLOCKLOCKRELEASED 0x8045
+#define DBT_VOLLOCKUNLOCKFAILED 0x8046
+#define DBT_USERDEFINED 0xFFFF
+#define DBTF_MEDIA 1
+#define DBTF_NET 2
+
+/* Also defined in winuser.h */
+#define BSM_ALLCOMPONENTS 0
+#define BSM_APPLICATIONS 8
+#define BSM_ALLDESKTOPS 16
+#define BSM_INSTALLABLEDRIVERS 4
+#define BSM_NETDRIVER 2
+#define BSM_VXDS 1
+#define BSF_FLUSHDISK 0x00000004
+#define BSF_FORCEIFHUNG 0x00000020
+#define BSF_IGNORECURRENTTASK 0x00000002
+#define BSF_NOHANG 0x00000008
+#define BSF_NOTIMEOUTIFNOTHUNG 0x00000040
+#define BSF_POSTMESSAGE 0x00000010
+#define BSF_QUERY 0x00000001
+#if (_WIN32_WINNT >= 0x0500)
+#define BSF_ALLOWSFW 0x00000080
+#define BSF_SENDNOTIFYMESSAGE 0x00000100
+#endif /* (_WIN32_WINNT >= 0x0500) */
+#if (_WIN32_WINNT >= 0x0501)
+#define BSF_LUID 0x00000400
+#define BSF_RETURNHDESK 0x00000200
+#endif /* (_WIN32_WINNT >= 0x0501) */
+
+#define BSF_MSGSRV32ISOK_BIT 31
+#define BSF_MSGSRV32ISOK 0x80000000
+
+typedef struct _DEV_BROADCAST_HDR {
+ DWORD dbch_size;
+ DWORD dbch_devicetype;
+ DWORD dbch_reserved;
+} DEV_BROADCAST_HDR,*PDEV_BROADCAST_HDR;
+typedef struct _DEV_BROADCAST_OEM {
+ DWORD dbco_size;
+ DWORD dbco_devicetype;
+ DWORD dbco_reserved;
+ DWORD dbco_identifier;
+ DWORD dbco_suppfunc;
+} DEV_BROADCAST_OEM,*PDEV_BROADCAST_OEM;
+typedef struct _DEV_BROADCAST_PORT_A {
+ DWORD dbcp_size;
+ DWORD dbcp_devicetype;
+ DWORD dbcp_reserved;
+ char dbcp_name[1];
+} DEV_BROADCAST_PORT_A, *PDEV_BROADCAST_PORT_A;
+typedef struct _DEV_BROADCAST_PORT_W {
+ DWORD dbcp_size;
+ DWORD dbcp_devicetype;
+ DWORD dbcp_reserved;
+ wchar_t dbcp_name[1];
+} DEV_BROADCAST_PORT_W, *PDEV_BROADCAST_PORT_W;
+typedef struct _DEV_BROADCAST_USERDEFINED {
+ struct _DEV_BROADCAST_HDR dbud_dbh;
+ char dbud_szName[1];
+} DEV_BROADCAST_USERDEFINED;
+typedef struct _DEV_BROADCAST_VOLUME {
+ DWORD dbcv_size;
+ DWORD dbcv_devicetype;
+ DWORD dbcv_reserved;
+ DWORD dbcv_unitmask;
+ WORD dbcv_flags;
+} DEV_BROADCAST_VOLUME,*PDEV_BROADCAST_VOLUME;
+
+#ifdef UNICODE
+typedef DEV_BROADCAST_PORT_W DEV_BROADCAST_PORT, *PDEV_BROADCAST_PORT;
+#else
+typedef DEV_BROADCAST_PORT_A DEV_BROADCAST_PORT, *PDEV_BROADCAST_PORT;
+#endif
+
+#if (_WIN32_WINDOWS >= 0x0410 || _WIN32_WINNT >= 0x0500)
+typedef struct _DEV_BROADCAST_DEVICEINTERFACE_A {
+ DWORD dbcc_size;
+ DWORD dbcc_devicetype;
+ DWORD dbcc_reserved;
+ GUID dbcc_classguid;
+ char dbcc_name[1];
+} DEV_BROADCAST_DEVICEINTERFACE_A, *PDEV_BROADCAST_DEVICEINTERFACE_A;
+typedef struct _DEV_BROADCAST_DEVICEINTERFACE_W {
+ DWORD dbcc_size;
+ DWORD dbcc_devicetype;
+ DWORD dbcc_reserved;
+ GUID dbcc_classguid;
+ wchar_t dbcc_name[1];
+} DEV_BROADCAST_DEVICEINTERFACE_W, *PDEV_BROADCAST_DEVICEINTERFACE_W;
+
+#ifdef UNICODE
+typedef DEV_BROADCAST_DEVICEINTERFACE_W DEV_BROADCAST_DEVICEINTERFACE;
+typedef PDEV_BROADCAST_DEVICEINTERFACE_W PDEV_BROADCAST_DEVICEINTERFACE;
+#else
+typedef DEV_BROADCAST_DEVICEINTERFACE_A DEV_BROADCAST_DEVICEINTERFACE;
+typedef PDEV_BROADCAST_DEVICEINTERFACE_A PDEV_BROADCAST_DEVICEINTERFACE;
+#endif
+
+typedef struct _DEV_BROADCAST_HANDLE {
+ DWORD dbch_size;
+ DWORD dbch_devicetype;
+ DWORD dbch_reserved;
+ HANDLE dbch_handle;
+ DWORD dbch_hdevnotify;
+ GUID dbch_eventguid;
+ LONG dbch_nameoffset;
+ BYTE dbch_data[1];
+} DEV_BROADCAST_HANDLE, *PDEV_BROADCAST_HANDLE;
+#endif /* (_WIN32_WINDOWS >= 0x0410 || _WIN32_WINNT >= 0x0500) */
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/dde.h b/tcc/include/winapi/dde.h
new file mode 100644
index 0000000..b13e9ce
--- /dev/null
+++ b/tcc/include/winapi/dde.h
@@ -0,0 +1,64 @@
+#ifndef _DDE_H
+#define _DDE_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#define WM_DDE_FIRST 0x03E0
+#define WM_DDE_INITIATE (WM_DDE_FIRST)
+#define WM_DDE_TERMINATE (WM_DDE_FIRST+1)
+#define WM_DDE_ADVISE (WM_DDE_FIRST+2)
+#define WM_DDE_UNADVISE (WM_DDE_FIRST+3)
+#define WM_DDE_ACK (WM_DDE_FIRST+4)
+#define WM_DDE_DATA (WM_DDE_FIRST+5)
+#define WM_DDE_REQUEST (WM_DDE_FIRST+6)
+#define WM_DDE_POKE (WM_DDE_FIRST+7)
+#define WM_DDE_EXECUTE (WM_DDE_FIRST+8)
+#define WM_DDE_LAST (WM_DDE_FIRST+8)
+
+#ifndef RC_INVOKED
+typedef struct {
+ unsigned short bAppReturnCode:8,reserved:6,fBusy:1,fAck:1;
+} DDEACK;
+typedef struct {
+ unsigned short reserved:14,fDeferUpd:1,fAckReq:1;
+ short cfFormat;
+} DDEADVISE;
+typedef struct {
+ unsigned short unused:12,fResponse:1,fRelease:1,reserved:1,fAckReq:1;
+ short cfFormat;
+ BYTE Value[1];
+} DDEDATA;
+typedef struct {
+ unsigned short unused:13,fRelease:1,fReserved:2;
+ short cfFormat;
+ BYTE Value[1];
+} DDEPOKE;
+typedef struct {
+ unsigned short unused:13,
+ fRelease:1,
+ fDeferUpd:1,
+ fAckReq:1;
+ short cfFormat;
+} DDELN;
+
+typedef struct {
+ unsigned short unused:12,fAck:1,fRelease:1,fReserved:1,fAckReq:1;
+ short cfFormat;
+ BYTE rgb[1];
+} DDEUP;
+BOOL WINAPI DdeSetQualityOfService(HWND,const SECURITY_QUALITY_OF_SERVICE*,PSECURITY_QUALITY_OF_SERVICE);
+BOOL WINAPI ImpersonateDdeClientWindow(HWND,HWND);
+LPARAM WINAPI PackDDElParam(UINT,UINT_PTR,UINT_PTR);
+BOOL WINAPI UnpackDDElParam(UINT,LPARAM,PUINT_PTR,PUINT_PTR);
+BOOL WINAPI FreeDDElParam(UINT,LPARAM);
+LPARAM WINAPI ReuseDDElParam(LPARAM,UINT,UINT,UINT_PTR,UINT_PTR);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/ddeml.h b/tcc/include/winapi/ddeml.h
new file mode 100644
index 0000000..67b4199
--- /dev/null
+++ b/tcc/include/winapi/ddeml.h
@@ -0,0 +1,314 @@
+#ifndef _DDEML_H
+#define _DDEML_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define EXPENTRY CALLBACK
+#define CP_WINANSI 1004
+#define CP_WINUNICODE 1200
+#define XTYPF_NOBLOCK 2
+#define XTYPF_NODATA 4
+#define XTYPF_ACKREQ 8
+#define XCLASS_MASK 0xFC00
+#define XCLASS_BOOL 0x1000
+#define XCLASS_DATA 0x2000
+#define XCLASS_FLAGS 0x4000
+#define XCLASS_NOTIFICATION 0x8000
+#define XST_NULL 0
+#define XST_INCOMPLETE 1
+#define XST_CONNECTED 2
+#define XST_INIT1 3
+#define XST_INIT2 4
+#define XST_REQSENT 5
+#define XST_DATARCVD 6
+#define XST_POKESENT 7
+#define XST_POKEACKRCVD 8
+#define XST_EXECSENT 9
+#define XST_EXECACKRCVD 10
+#define XST_ADVSENT 11
+#define XST_UNADVSENT 12
+#define XST_ADVACKRCVD 13
+#define XST_UNADVACKRCVD 14
+#define XST_ADVDATASENT 15
+#define XST_ADVDATAACKRCVD 16
+#define XTYP_ERROR (XCLASS_NOTIFICATION|XTYPF_NOBLOCK)
+#define XTYP_ADVDATA (16|XCLASS_FLAGS)
+#define XTYP_ADVREQ (32|XCLASS_DATA|XTYPF_NOBLOCK)
+#define XTYP_ADVSTART (0x30|XCLASS_BOOL)
+#define XTYP_ADVSTOP (0x0040|XCLASS_NOTIFICATION)
+#define XTYP_EXECUTE (0x0050|XCLASS_FLAGS)
+#define XTYP_CONNECT (0x0060|XCLASS_BOOL|XTYPF_NOBLOCK)
+#define XTYP_CONNECT_CONFIRM (0x0070|XCLASS_NOTIFICATION|XTYPF_NOBLOCK)
+#define XTYP_XACT_COMPLETE (0x0080|XCLASS_NOTIFICATION)
+#define XTYP_POKE (0x0090|XCLASS_FLAGS)
+#define XTYP_REGISTER (0x00A0|XCLASS_NOTIFICATION|XTYPF_NOBLOCK)
+#define XTYP_REQUEST (0x00B0|XCLASS_DATA)
+#define XTYP_DISCONNECT (0x00C0|XCLASS_NOTIFICATION|XTYPF_NOBLOCK)
+#define XTYP_UNREGISTER (0x00D0|XCLASS_NOTIFICATION|XTYPF_NOBLOCK)
+#define XTYP_WILDCONNECT (0x00E0|XCLASS_DATA|XTYPF_NOBLOCK)
+#define XTYP_MASK 0xF0
+#define XTYP_SHIFT 4
+#define TIMEOUT_ASYNC 0xFFFFFFFF
+#define QID_SYNC 0xFFFFFFFF
+#define ST_CONNECTED 1
+#define ST_ADVISE 2
+#define ST_ISLOCAL 4
+#define ST_BLOCKED 8
+#define ST_CLIENT 16
+#define ST_TERMINATED 32
+#define ST_INLIST 64
+#define ST_BLOCKNEXT 128
+#define ST_ISSELF 256
+#define CADV_LATEACK 0xFFFF
+#define DMLERR_NO_ERROR 0
+#define DMLERR_FIRST 0x4000
+#define DMLERR_ADVACKTIMEOUT 0x4000
+#define DMLERR_BUSY 0x4001
+#define DMLERR_DATAACKTIMEOUT 0x4002
+#define DMLERR_DLL_NOT_INITIALIZED 0x4003
+#define DMLERR_DLL_USAGE 0x4004
+#define DMLERR_EXECACKTIMEOUT 0x4005
+#define DMLERR_INVALIDPARAMETER 0x4006
+#define DMLERR_LOW_MEMORY 0x4007
+#define DMLERR_MEMORY_ERROR 0x4008
+#define DMLERR_NOTPROCESSED 0x4009
+#define DMLERR_NO_CONV_ESTABLISHED 0x400a
+#define DMLERR_POKEACKTIMEOUT 0x400b
+#define DMLERR_POSTMSG_FAILED 0x400c
+#define DMLERR_REENTRANCY 0x400d
+#define DMLERR_SERVER_DIED 0x400e
+#define DMLERR_SYS_ERROR 0x400f
+#define DMLERR_UNADVACKTIMEOUT 0x4010
+#define DMLERR_UNFOUND_QUEUE_ID 0x4011
+#define DMLERR_LAST 0x4011
+#define DDE_FACK 0x8000
+#define DDE_FBUSY 0x4000
+#define DDE_FDEFERUPD 0x4000
+#define DDE_FACKREQ 0x8000
+#define DDE_FRELEASE 0x2000
+#define DDE_FREQUESTED 0x1000
+#define DDE_FAPPSTATUS 0x00ff
+#define DDE_FNOTPROCESSED 0
+#define DDE_FACKRESERVED (~(DDE_FACK|DDE_FBUSY|DDE_FAPPSTATUS))
+#define DDE_FADVRESERVED (~(DDE_FACKREQ|DDE_FDEFERUPD))
+#define DDE_FDATRESERVED (~(DDE_FACKREQ|DDE_FRELEASE|DDE_FREQUESTED))
+#define DDE_FPOKRESERVED (~DDE_FRELEASE)
+#define MSGF_DDEMGR 0x8001
+#define CBR_BLOCK ((HDDEDATA)0xffffffff)
+#define CBF_FAIL_SELFCONNECTIONS 0x1000
+#define CBF_FAIL_CONNECTIONS 0x2000
+#define CBF_FAIL_ADVISES 0x4000
+#define CBF_FAIL_EXECUTES 0x8000
+#define CBF_FAIL_POKES 0x10000
+#define CBF_FAIL_REQUESTS 0x20000
+#define CBF_FAIL_ALLSVRXACTIONS 0x3f000
+#define CBF_SKIP_CONNECT_CONFIRMS 0x40000
+#define CBF_SKIP_REGISTRATIONS 0x80000
+#define CBF_SKIP_UNREGISTRATIONS 0x100000
+#define CBF_SKIP_DISCONNECTS 0x200000
+#define CBF_SKIP_ALLNOTIFICATIONS 0x3c0000
+#define APPCMD_CLIENTONLY 0x10L
+#define APPCMD_FILTERINITS 0x20L
+#define APPCMD_MASK 0xFF0L
+#define APPCLASS_STANDARD 0
+#define APPCLASS_MASK 0xFL
+#define EC_ENABLEALL 0
+#define EC_ENABLEONE ST_BLOCKNEXT
+#define EC_DISABLE ST_BLOCKED
+#define EC_QUERYWAITING 2
+#define DNS_REGISTER 1
+#define DNS_UNREGISTER 2
+#define DNS_FILTERON 4
+#define DNS_FILTEROFF 8
+#define HDATA_APPOWNED 1
+#define MAX_MONITORS 4
+#define APPCLASS_MONITOR 1L
+#define XTYP_MONITOR (XCLASS_NOTIFICATION|XTYPF_NOBLOCK|0xF0)
+#define MF_HSZ_INFO 0x1000000
+#define MF_SENDMSGS 0x2000000
+#define MF_POSTMSGS 0x4000000
+#define MF_CALLBACKS 0x8000000
+#define MF_ERRORS 0x10000000
+#define MF_LINKS 0x20000000
+#define MF_CONV 0x40000000
+#define MF_MASK 0xFF000000
+#define MH_CREATE 1
+#define MH_KEEP 2
+#define MH_DELETE 3
+#define MH_CLEANUP 4
+
+DECLARE_HANDLE(HCONVLIST);
+DECLARE_HANDLE(HCONV);
+DECLARE_HANDLE(HSZ);
+DECLARE_HANDLE(HDDEDATA);
+typedef HDDEDATA CALLBACK FNCALLBACK(UINT,UINT,HCONV,HSZ,HSZ,HDDEDATA,DWORD,DWORD);
+typedef HDDEDATA(CALLBACK *PFNCALLBACK)(UINT,UINT,HCONV,HSZ,HSZ,HDDEDATA,DWORD,DWORD);
+typedef struct tagHSZPAIR {
+ HSZ hszSvc;
+ HSZ hszTopic;
+} HSZPAIR, *PHSZPAIR;
+typedef struct tagCONVCONTEXT {
+ UINT cb;
+ UINT wFlags;
+ UINT wCountryID;
+ int iCodePage;
+ DWORD dwLangID;
+ DWORD dwSecurity;
+ SECURITY_QUALITY_OF_SERVICE qos;
+} CONVCONTEXT,*PCONVCONTEXT;
+typedef struct tagCONVINFO {
+ DWORD cb;
+ DWORD hUser;
+ HCONV hConvPartner;
+ HSZ hszSvcPartner;
+ HSZ hszServiceReq;
+ HSZ hszTopic;
+ HSZ hszItem;
+ UINT wFmt;
+ UINT wType;
+ UINT wStatus;
+ UINT wConvst;
+ UINT wLastError;
+ HCONVLIST hConvList;
+ CONVCONTEXT ConvCtxt;
+ HWND hwnd;
+ HWND hwndPartner;
+} CONVINFO,*PCONVINFO;
+typedef struct tagDDEML_MSG_HOOK_DATA {
+ UINT uiLo;
+ UINT uiHi;
+ DWORD cbData;
+ DWORD Data[8];
+} DDEML_MSG_HOOK_DATA;
+typedef struct tagMONHSZSTRUCT {
+ UINT cb;
+ BOOL fsAction;
+ DWORD dwTime;
+ HSZ hsz;
+ HANDLE hTask;
+ TCHAR str[1];
+} MONHSZSTRUCT, *PMONHSZSTRUCT;
+typedef struct tagMONLINKSTRUCT {
+ UINT cb;
+ DWORD dwTime;
+ HANDLE hTask;
+ BOOL fEstablished;
+ BOOL fNoData;
+ HSZ hszSvc;
+ HSZ hszTopic;
+ HSZ hszItem;
+ UINT wFmt;
+ BOOL fServer;
+ HCONV hConvServer;
+ HCONV hConvClient;
+} MONLINKSTRUCT, *PMONLINKSTRUCT;
+typedef struct tagMONCONVSTRUCT {
+ UINT cb;
+ BOOL fConnect;
+ DWORD dwTime;
+ HANDLE hTask;
+ HSZ hszSvc;
+ HSZ hszTopic;
+ HCONV hConvClient;
+ HCONV hConvServer;
+} MONCONVSTRUCT, *PMONCONVSTRUCT;
+typedef struct tagMONCBSTRUCT {
+ UINT cb;
+ DWORD dwTime;
+ HANDLE hTask;
+ DWORD dwRet;
+ UINT wType;
+ UINT wFmt;
+ HCONV hConv;
+ HSZ hsz1;
+ HSZ hsz2;
+ HDDEDATA hData;
+ ULONG_PTR dwData1;
+ ULONG_PTR dwData2;
+ CONVCONTEXT cc;
+ DWORD cbData;
+ DWORD Data[8];
+} MONCBSTRUCT, *PMONCBSTRUCT;
+typedef struct tagMONERRSTRUCT {
+ UINT cb;
+ UINT wLastError;
+ DWORD dwTime;
+ HANDLE hTask;
+} MONERRSTRUCT, *PMONERRSTRUCT;
+typedef struct tagMONMSGSTRUCT {
+ UINT cb;
+ HWND hwndTo;
+ DWORD dwTime;
+ HANDLE hTask;
+ UINT wMsg;
+ WPARAM wParam;
+ LPARAM lParam;
+ DDEML_MSG_HOOK_DATA dmhd;
+} MONMSGSTRUCT, *PMONMSGSTRUCT;
+
+BOOL WINAPI DdeAbandonTransaction(DWORD,HCONV,DWORD);
+PBYTE WINAPI DdeAccessData(HDDEDATA,PDWORD);
+HDDEDATA WINAPI DdeAddData(HDDEDATA,PBYTE,DWORD,DWORD);
+HDDEDATA WINAPI DdeClientTransaction(PBYTE,DWORD,HCONV,HSZ,UINT,UINT,DWORD,PDWORD);
+int WINAPI DdeCmpStringHandles(HSZ,HSZ);
+HCONV WINAPI DdeConnect(DWORD,HSZ,HSZ,PCONVCONTEXT);
+HCONVLIST WINAPI DdeConnectList(DWORD,HSZ,HSZ,HCONVLIST,PCONVCONTEXT);
+HDDEDATA WINAPI DdeCreateDataHandle(DWORD,PBYTE,DWORD,DWORD,HSZ,UINT,UINT);
+HSZ WINAPI DdeCreateStringHandleA(DWORD,LPCSTR,int);
+HSZ WINAPI DdeCreateStringHandleW(DWORD,LPCWSTR,int);
+BOOL WINAPI DdeDisconnect(HCONV);
+BOOL WINAPI DdeDisconnectList(HCONVLIST);
+BOOL WINAPI DdeEnableCallback(DWORD,HCONV,UINT);
+BOOL WINAPI DdeFreeDataHandle(HDDEDATA);
+BOOL WINAPI DdeFreeStringHandle(DWORD,HSZ);
+DWORD WINAPI DdeGetData(HDDEDATA,PBYTE,DWORD,DWORD);
+UINT WINAPI DdeGetLastError(DWORD);
+BOOL WINAPI DdeImpersonateClient(HCONV);
+UINT WINAPI DdeInitializeA(PDWORD,PFNCALLBACK,DWORD,DWORD);
+UINT WINAPI DdeInitializeW(PDWORD,PFNCALLBACK,DWORD,DWORD);
+BOOL WINAPI DdeKeepStringHandle(DWORD,HSZ);
+HDDEDATA WINAPI DdeNameService(DWORD,HSZ,HSZ,UINT);
+BOOL WINAPI DdePostAdvise(DWORD,HSZ,HSZ);
+UINT WINAPI DdeQueryConvInfo(HCONV,DWORD,PCONVINFO);
+HCONV WINAPI DdeQueryNextServer(HCONVLIST,HCONV);
+DWORD WINAPI DdeQueryStringA(DWORD,HSZ,LPSTR,DWORD,int);
+DWORD WINAPI DdeQueryStringW(DWORD,HSZ,LPWSTR,DWORD,int);
+HCONV WINAPI DdeReconnect(HCONV);
+BOOL WINAPI DdeSetUserHandle(HCONV,DWORD,DWORD);
+BOOL WINAPI DdeUnaccessData(HDDEDATA);
+BOOL WINAPI DdeUninitialize(DWORD);
+
+#ifdef UNICODE
+#define SZDDESYS_TOPIC L"System"
+#define SZDDESYS_ITEM_TOPICS L"Topics"
+#define SZDDESYS_ITEM_SYSITEMS L"SysItems"
+#define SZDDESYS_ITEM_RTNMSG L"ReturnMessage"
+#define SZDDESYS_ITEM_STATUS L"Status"
+#define SZDDESYS_ITEM_FORMATS L"Formats"
+#define SZDDESYS_ITEM_HELP L"Help"
+#define SZDDE_ITEM_ITEMLIST L"TopicItemList"
+#define DdeCreateStringHandle DdeCreateStringHandleW
+#define DdeInitialize DdeInitializeW
+#define DdeQueryString DdeQueryStringW
+#else
+#define SZDDESYS_TOPIC "System"
+#define SZDDESYS_ITEM_TOPICS "Topics"
+#define SZDDESYS_ITEM_SYSITEMS "SysItems"
+#define SZDDESYS_ITEM_RTNMSG "ReturnMessage"
+#define SZDDESYS_ITEM_STATUS "Status"
+#define SZDDESYS_ITEM_FORMATS "Formats"
+#define SZDDESYS_ITEM_HELP "Help"
+#define SZDDE_ITEM_ITEMLIST "TopicItemList"
+#define DdeCreateStringHandle DdeCreateStringHandleA
+#define DdeInitialize DdeInitializeA
+#define DdeQueryString DdeQueryStringA
+#endif
+#ifdef __cplusplus
+}
+#endif
+#endif /* _DDEML_H */
diff --git a/tcc/include/winapi/ddk/atm.h b/tcc/include/winapi/ddk/atm.h
new file mode 100644
index 0000000..d302293
--- /dev/null
+++ b/tcc/include/winapi/ddk/atm.h
@@ -0,0 +1,507 @@
+/*
+ * atm.h
+ *
+ * ATM support
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __ATM_H
+#define __ATM_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef ULONG ATM_ADDRESSTYPE;
+
+#define SAP_TYPE_NSAP 1
+#define SAP_TYPE_E164 2
+
+#define ATM_MEDIA_SPECIFIC 1
+
+#define CALLMGR_SPECIFIC_Q2931 1
+
+#define ATM_NSAP 0
+#define ATM_E164 1
+
+#define ATM_MAC_ADDRESS_LENGTH 6
+#define ATM_ADDRESS_LENGTH 20
+
+typedef ULONG ATM_AAL_TYPE, *PATM_AAL_TYPE;
+
+#define AAL_TYPE_AAL0 1
+#define AAL_TYPE_AAL1 2
+#define AAL_TYPE_AAL34 4
+#define AAL_TYPE_AAL5 8
+
+#define ATM_ADDR_BLANK_CHAR L' '
+#define ATM_ADDR_E164_START_CHAR L'+'
+#define ATM_ADDR_PUNCTUATION_CHAR L'.'
+
+typedef enum {
+ IE_AALParameters,
+ IE_TrafficDescriptor,
+ IE_BroadbandBearerCapability,
+ IE_BHLI,
+ IE_BLLI,
+ IE_CalledPartyNumber,
+ IE_CalledPartySubaddress,
+ IE_CallingPartyNumber,
+ IE_CallingPartySubaddress,
+ IE_Cause,
+ IE_QOSClass,
+ IE_TransitNetworkSelection,
+ IE_BroadbandSendingComplete,
+ IE_LIJCallId,
+ IE_Raw
+} Q2931_IE_TYPE;
+
+typedef struct _Q2931_IE {
+ Q2931_IE_TYPE IEType;
+ ULONG IELength;
+ UCHAR IE[1];
+} Q2931_IE, *PQ2931_IE;
+
+typedef struct _AAL1_PARAMETERS {
+ UCHAR Subtype;
+ UCHAR CBRRate;
+ USHORT Multiplier;
+ UCHAR SourceClockRecoveryMethod;
+ UCHAR ErrorCorrectionMethod;
+ USHORT StructuredDataTransferBlocksize;
+ UCHAR PartiallyFilledCellsMethod;
+} AAL1_PARAMETERS, *PAAL1_PARAMETERS;
+
+typedef struct _AAL34_PARAMETERS {
+ USHORT ForwardMaxCPCSSDUSize;
+ USHORT BackwardMaxCPCSSDUSize;
+ USHORT LowestMID;
+ USHORT HighestMID;
+ UCHAR SSCSType;
+} AAL34_PARAMETERS, *PAAL34_PARAMETERS;
+
+/* AAL5_PARAMETERS.Mode constants */
+#define AAL5_MODE_MESSAGE 0x01
+#define AAL5_MODE_STREAMING 0x02
+
+/* AAL5_PARAMETERS.SSCSType constants */
+#define AAL5_SSCS_NULL 0x00
+#define AAL5_SSCS_SSCOP_ASSURED 0x01
+#define AAL5_SSCS_SSCOP_NON_ASSURED 0x02
+#define AAL5_SSCS_FRAME_RELAY 0x04
+
+typedef struct _AAL5_PARAMETERS {
+ ULONG ForwardMaxCPCSSDUSize;
+ ULONG BackwardMaxCPCSSDUSize;
+ UCHAR Mode;
+ UCHAR SSCSType;
+} AAL5_PARAMETERS, *PAAL5_PARAMETERS;
+
+typedef struct _AALUSER_PARAMETERS {
+ ULONG UserDefined;
+} AALUSER_PARAMETERS, *PAALUSER_PARAMETERS;
+
+typedef struct _AAL_PARAMETERS_IE {
+ ATM_AAL_TYPE AALType;
+ union {
+ AAL1_PARAMETERS AAL1Parameters;
+ AAL34_PARAMETERS AAL34Parameters;
+ AAL5_PARAMETERS AAL5Parameters;
+ AALUSER_PARAMETERS AALUserParameters;
+ } AALSpecificParameters;
+} AAL_PARAMETERS_IE, *PAAL_PARAMETERS_IE;
+
+
+/* FIXME: Should the union be anonymous in C++ too? If so,
+ can't define named types _ATM_AAL5_INFO and _ATM_AAL0_INFO
+ within anonymous union for C++. */
+typedef struct _ATM_AAL_OOB_INFO
+{
+ ATM_AAL_TYPE AalType;
+#ifndef __cplusplus
+ _ANONYMOUS_UNION
+#endif
+ union {
+ struct _ATM_AAL5_INFO {
+ BOOLEAN CellLossPriority;
+ UCHAR UserToUserIndication;
+ UCHAR CommonPartIndicator;
+ } ATM_AAL5_INFO;
+
+ struct _ATM_AAL0_INFO {
+ BOOLEAN CellLossPriority;
+ UCHAR PayLoadTypeIdentifier;
+ } ATM_AAL0_INFO;
+#ifndef __cplusplus
+ } DUMMYUNIONNAME;
+#else
+ } u;
+#endif
+} ATM_AAL_OOB_INFO, *PATM_AAL_OOB_INFO;
+
+typedef struct _ATM_ADDRESS {
+ ATM_ADDRESSTYPE AddressType;
+ ULONG NumberOfDigits;
+ UCHAR Address[ATM_ADDRESS_LENGTH];
+} ATM_ADDRESS, *PATM_ADDRESS;
+
+/* ATM_BHLI_IE.HighLayerInfoType constants */
+#define BHLI_ISO 0x00
+#define BHLI_UserSpecific 0x01
+#define BHLI_HighLayerProfile 0x02
+#define BHLI_VendorSpecificAppId 0x03
+
+typedef struct _ATM_BHLI_IE {
+ ULONG HighLayerInfoType;
+ ULONG HighLayerInfoLength;
+ UCHAR HighLayerInfo[8];
+} ATM_BHLI_IE, *PATM_BHLI_IE;
+
+/* ATM_BLLI_IE.Layer2Protocol constants */
+#define BLLI_L2_ISO_1745 0x01
+#define BLLI_L2_Q921 0x02
+#define BLLI_L2_X25L 0x06
+#define BLLI_L2_X25M 0x07
+#define BLLI_L2_ELAPB 0x08
+#define BLLI_L2_HDLC_ARM 0x09
+#define BLLI_L2_HDLC_NRM 0x0A
+#define BLLI_L2_HDLC_ABM 0x0B
+#define BLLI_L2_LLC 0x0C
+#define BLLI_L2_X75 0x0D
+#define BLLI_L2_Q922 0x0E
+#define BLLI_L2_USER_SPECIFIED 0x10
+#define BLLI_L2_ISO_7776 0x11
+
+/* ATM_BLLI_IE.Layer3Protocol constants */
+#define BLLI_L3_X25 0x06
+#define BLLI_L3_ISO_8208 0x07
+#define BLLI_L3_X223 0x08
+#define BLLI_L3_SIO_8473 0x09
+#define BLLI_L3_T70 0x0A
+#define BLLI_L3_ISO_TR9577 0x0B
+#define BLLI_L3_USER_SPECIFIED 0x10
+
+/* ATM_BLLI_IE.Layer3IPI constants */
+#define BLLI_L3_IPI_SNAP 0x80
+#define BLLI_L3_IPI_IP 0xCC
+
+typedef struct _ATM_BLLI_IE {
+ ULONG Layer2Protocol;
+ UCHAR Layer2Mode;
+ UCHAR Layer2WindowSize;
+ ULONG Layer2UserSpecifiedProtocol;
+ ULONG Layer3Protocol;
+ UCHAR Layer3Mode;
+ UCHAR Layer3DefaultPacketSize;
+ UCHAR Layer3PacketWindowSize;
+ ULONG Layer3UserSpecifiedProtocol;
+ ULONG Layer3IPI;
+ UCHAR SnapId[5];
+} ATM_BLLI_IE, *PATM_BLLI_IE;
+
+/* ATM_BROADBAND_BEARER_CAPABILITY_IE.BearerClass constants */
+#define BCOB_A 0x00
+#define BCOB_C 0x01
+#define BCOB_X 0x02
+
+/* ATM_BROADBAND_BEARER_CAPABILITY_IE.TrafficType constants */
+#define TT_NOIND 0x00
+#define TT_CBR 0x04
+#define TT_VBR 0x08
+
+/* ATM_BROADBAND_BEARER_CAPABILITY_IE.TimingRequirements constants */
+#define TR_NOIND 0x00
+#define TR_END_TO_END 0x01
+#define TR_NO_END_TO_END 0x02
+
+/* ATM_BROADBAND_BEARER_CAPABILITY_IE.ClippingSusceptability constants */
+#define CLIP_NOT 0x00
+#define CLIP_SUS 0x20
+
+/* ATM_BROADBAND_BEARER_CAPABILITY_IE.UserPlaneConnectionConfig constants */
+#define UP_P2P 0x00
+#define UP_P2MP 0x01
+
+typedef struct _ATM_BROADBAND_BEARER_CAPABILITY_IE {
+ UCHAR BearerClass;
+ UCHAR TrafficType;
+ UCHAR TimingRequirements;
+ UCHAR ClippingSusceptability;
+ UCHAR UserPlaneConnectionConfig;
+} ATM_BROADBAND_BEARER_CAPABILITY_IE, *PATM_BROADBAND_BEARER_CAPABILITY_IE;
+
+typedef struct _ATM_BROADBAND_SENDING_COMPLETE_IE {
+ UCHAR SendingComplete;
+} ATM_BROADBAND_SENDING_COMPLETE_IE, *PATM_BROADBAND_SENDING_COMPLETE_IE;
+
+typedef struct _ATM_CALLING_PARTY_NUMBER_IE {
+ ATM_ADDRESS Number;
+ UCHAR PresentationIndication;
+ UCHAR ScreeningIndicator;
+} ATM_CALLING_PARTY_NUMBER_IE, *PATM_CALLING_PARTY_NUMBER_IE;
+
+/* ATM_CAUSE_IE.Location constants */
+#define ATM_CAUSE_LOC_USER 0x00
+#define ATM_CAUSE_LOC_PRIVATE_LOCAL 0x01
+#define ATM_CAUSE_LOC_PUBLIC_LOCAL 0x02
+#define ATM_CAUSE_LOC_TRANSIT_NETWORK 0x03
+#define ATM_CAUSE_LOC_PUBLIC_REMOTE 0x04
+#define ATM_CAUSE_LOC_PRIVATE_REMOTE 0x05
+#define ATM_CAUSE_LOC_INTERNATIONAL_NETWORK 0x07
+#define ATM_CAUSE_LOC_BEYOND_INTERWORKING 0x0A
+
+/* ATM_CAUSE_IE.Cause constants */
+#define ATM_CAUSE_UNALLOCATED_NUMBER 0x01
+#define ATM_CAUSE_NO_ROUTE_TO_TRANSIT_NETWORK 0x02
+#define ATM_CAUSE_NO_ROUTE_TO_DESTINATION 0x03
+#define ATM_CAUSE_VPI_VCI_UNACCEPTABLE 0x0A
+#define ATM_CAUSE_NORMAL_CALL_CLEARING 0x10
+#define ATM_CAUSE_USER_BUSY 0x11
+#define ATM_CAUSE_NO_USER_RESPONDING 0x12
+#define ATM_CAUSE_CALL_REJECTED 0x15
+#define ATM_CAUSE_NUMBER_CHANGED 0x16
+#define ATM_CAUSE_USER_REJECTS_CLIR 0x17
+#define ATM_CAUSE_DESTINATION_OUT_OF_ORDER 0x1B
+#define ATM_CAUSE_INVALID_NUMBER_FORMAT 0x1C
+#define ATM_CAUSE_STATUS_ENQUIRY_RESPONSE 0x1E
+#define ATM_CAUSE_NORMAL_UNSPECIFIED 0x1F
+#define ATM_CAUSE_VPI_VCI_UNAVAILABLE 0x23
+#define ATM_CAUSE_NETWORK_OUT_OF_ORDER 0x26
+#define ATM_CAUSE_TEMPORARY_FAILURE 0x29
+#define ATM_CAUSE_ACCESS_INFORMAION_DISCARDED 0x2B
+#define ATM_CAUSE_NO_VPI_VCI_AVAILABLE 0x2D
+#define ATM_CAUSE_RESOURCE_UNAVAILABLE 0x2F
+#define ATM_CAUSE_QOS_UNAVAILABLE 0x31
+#define ATM_CAUSE_USER_CELL_RATE_UNAVAILABLE 0x33
+#define ATM_CAUSE_BEARER_CAPABILITY_UNAUTHORIZED 0x39
+#define ATM_CAUSE_BEARER_CAPABILITY_UNAVAILABLE 0x3A
+#define ATM_CAUSE_OPTION_UNAVAILABLE 0x3F
+#define ATM_CAUSE_BEARER_CAPABILITY_UNIMPLEMENTED 0x41
+#define ATM_CAUSE_UNSUPPORTED_TRAFFIC_PARAMETERS 0x49
+#define ATM_CAUSE_INVALID_CALL_REFERENCE 0x51
+#define ATM_CAUSE_CHANNEL_NONEXISTENT 0x52
+#define ATM_CAUSE_INCOMPATIBLE_DESTINATION 0x58
+#define ATM_CAUSE_INVALID_ENDPOINT_REFERENCE 0x59
+#define ATM_CAUSE_INVALID_TRANSIT_NETWORK_SELECTION 0x5B
+#define ATM_CAUSE_TOO_MANY_PENDING_ADD_PARTY 0x5C
+#define ATM_CAUSE_AAL_PARAMETERS_UNSUPPORTED 0x5D
+#define ATM_CAUSE_MANDATORY_IE_MISSING 0x60
+#define ATM_CAUSE_UNIMPLEMENTED_MESSAGE_TYPE 0x61
+#define ATM_CAUSE_UNIMPLEMENTED_IE 0x63
+#define ATM_CAUSE_INVALID_IE_CONTENTS 0x64
+#define ATM_CAUSE_INVALID_STATE_FOR_MESSAGE 0x65
+#define ATM_CAUSE_RECOVERY_ON_TIMEOUT 0x66
+#define ATM_CAUSE_INCORRECT_MESSAGE_LENGTH 0x68
+#define ATM_CAUSE_PROTOCOL_ERROR 0x6F
+
+/* ATM_CAUSE_IE.Diagnostics constants */
+#define ATM_CAUSE_COND_UNKNOWN 0x00
+#define ATM_CAUSE_COND_PERMANENT 0x01
+#define ATM_CAUSE_COND_TRANSIENT 0x02
+#define ATM_CAUSE_REASON_USER 0x00
+#define ATM_CAUSE_REASON_IE_MISSING 0x04
+#define ATM_CAUSE_REASON_IE_INSUFFICIENT 0x08
+#define ATM_CAUSE_PU_PROVIDER 0x00
+#define ATM_CAUSE_PU_USER 0x08
+#define ATM_CAUSE_NA_NORMAL 0x00
+#define ATM_CAUSE_NA_ABNORMAL 0x04
+
+typedef struct _ATM_CAUSE_IE {
+ UCHAR Location;
+ UCHAR Cause;
+ UCHAR DiagnosticsLength;
+ UCHAR Diagnostics[4];
+} ATM_CAUSE_IE, *PATM_CAUSE_IE;
+
+
+typedef ULONG ATM_SERVICE_CATEGORY, *PATM_SERVICE_CATEGORY;
+
+/* ATM_FLOW_PARAMETERS.ServiceCategory constants */
+#define ATM_SERVICE_CATEGORY_CBR 1
+#define ATM_SERVICE_CATEGORY_VBR 2
+#define ATM_SERVICE_CATEGORY_UBR 4
+#define ATM_SERVICE_CATEGORY_ABR 8
+
+/* ATM_FLOW_PARAMETERS.Reserved1 constants */
+#define ATM_FLOW_PARAMS_RSVD1_MPP 0x01
+
+typedef struct _ATM_FLOW_PARAMETERS {
+ ATM_SERVICE_CATEGORY ServiceCategory;
+ ULONG AverageCellRate;
+ ULONG PeakCellRate;
+ ULONG MinimumCellRate;
+ ULONG InitialCellRate;
+ ULONG BurstLengthCells;
+ ULONG MaxSduSize;
+ ULONG TransientBufferExposure;
+ ULONG CumulativeRMFixedRTT;
+ UCHAR RateIncreaseFactor;
+ UCHAR RateDecreaseFactor;
+ USHORT ACRDecreaseTimeFactor;
+ UCHAR MaximumCellsPerForwardRMCell;
+ UCHAR MaximumForwardRMCellInterval;
+ UCHAR CutoffDecreaseFactor;
+ UCHAR Reserved1;
+ ULONG MissingRMCellCount;
+ ULONG Reserved2;
+ ULONG Reserved3;
+} ATM_FLOW_PARAMETERS, *PATM_FLOW_PARAMETERS;
+
+typedef struct _ATM_VPIVCI {
+ ULONG Vpi;
+ ULONG Vci;
+} ATM_VPIVCI, *PATM_VPIVCI;
+
+typedef struct _ATM_MEDIA_PARAMETERS {
+ ATM_VPIVCI ConnectionId;
+ ATM_AAL_TYPE AALType;
+ ULONG CellDelayVariationCLP0;
+ ULONG CellDelayVariationCLP1;
+ ULONG CellLossRatioCLP0;
+ ULONG CellLossRatioCLP1;
+ ULONG CellTransferDelayCLP0;
+ ULONG CellTransferDelayCLP1;
+ ULONG DefaultCLP;
+ ATM_FLOW_PARAMETERS Transmit;
+ ATM_FLOW_PARAMETERS Receive;
+} ATM_MEDIA_PARAMETERS, *PATM_MEDIA_PARAMETERS;
+
+typedef struct _ATM_PVC_SAP {
+ ATM_BLLI_IE Blli;
+ ATM_BHLI_IE Bhli;
+} ATM_PVC_SAP, *PATM_PVC_SAP;
+
+/* ATM_QOS_CLASS_IE constants */
+#define QOS_CLASS0 0x00
+#define QOS_CLASS1 0x01
+#define QOS_CLASS2 0x02
+#define QOS_CLASS3 0x03
+#define QOS_CLASS4 0x04
+
+typedef struct _ATM_QOS_CLASS_IE {
+ UCHAR QOSClassForward;
+ UCHAR QOSClassBackward;
+} ATM_QOS_CLASS_IE, *PATM_QOS_CLASS_IE;
+
+typedef struct _ATM_RAW_IE {
+ ULONG RawIELength;
+ ULONG RawIEType;
+ UCHAR RawIEValue[1];
+} ATM_RAW_IE, *PATM_RAW_IE;
+
+typedef struct _ATM_SAP {
+ ATM_BLLI_IE Blli;
+ ATM_BHLI_IE Bhli;
+ ULONG NumberOfAddresses;
+ UCHAR Addresses[1];
+} ATM_SAP, *PATM_SAP;
+
+typedef struct _ATM_TRAFFIC_DESCRIPTOR {
+ ULONG PeakCellRateCLP0;
+ ULONG PeakCellRateCLP01;
+ ULONG SustainableCellRateCLP0;
+ ULONG SustainableCellRateCLP01;
+ ULONG MaximumBurstSizeCLP0;
+ ULONG MaximumBurstSizeCLP01;
+ BOOLEAN BestEffort;
+ BOOLEAN Tagging;
+} ATM_TRAFFIC_DESCRIPTOR, *PATM_TRAFFIC_DESCRIPTOR;
+
+typedef struct _ATM_TRAFFIC_DESCRIPTOR_IE {
+ ATM_TRAFFIC_DESCRIPTOR ForwardTD;
+ ATM_TRAFFIC_DESCRIPTOR BackwardTD;
+ BOOLEAN BestEffort;
+} ATM_TRAFFIC_DESCRIPTOR_IE, *PATM_TRAFFIC_DESCRIPTOR_IE;
+
+/* ATM_TRANSIT_NETWORK_SELECTION_IE.TypeOfNetworkId constants */
+#define TNS_TYPE_NATIONAL 0x40
+
+/* ATM_TRANSIT_NETWORK_SELECTION_IE.NetworkIdPlan constants */
+#define TNS_PLAN_CARRIER_ID_CODE 0x01
+
+typedef struct _ATM_TRANSIT_NETWORK_SELECTION_IE {
+ UCHAR TypeOfNetworkId;
+ UCHAR NetworkIdPlan;
+ UCHAR NetworkIdLength;
+ UCHAR NetworkId[1];
+} ATM_TRANSIT_NETWORK_SELECTION_IE, *PATM_TRANSIT_NETWORK_SELECTION_IE;
+
+typedef struct _ATM_LIJ_CALLID_IE {
+ ULONG Identifier;
+} ATM_LIJ_CALLID_IE, *PATM_LIJ_CALLID_IE;
+
+/* Q2931_ADD_PVC.Flags constants */
+#define CO_FLAG_SIGNALING_VC 0x00000001
+#define CO_FLAG_NO_DEST_SAP 0x00000002
+
+typedef struct _Q2931_ADD_PVC {
+ ATM_ADDRESS CalledParty;
+ ATM_ADDRESS CallingParty;
+ ATM_VPIVCI ConnectionId;
+ ATM_AAL_TYPE AALType;
+ ATM_FLOW_PARAMETERS ForwardFP;
+ ATM_FLOW_PARAMETERS BackwardFP;
+ ULONG Flags;
+ ATM_PVC_SAP LocalSap;
+ ATM_PVC_SAP DestinationSap;
+ BOOLEAN LIJIdPresent;
+ ATM_LIJ_CALLID_IE LIJId;
+} Q2931_ADD_PVC, *PQ2931_ADD_PVC;
+
+typedef struct _Q2931_DELETE_PVC {
+ ATM_VPIVCI ConnectionId;
+} Q2931_DELETE_PVC, *PQ2931_DELETE_PVC;
+
+typedef ATM_ADDRESS ATM_CALLED_PARTY_NUMBER_IE;
+typedef ATM_ADDRESS ATM_CALLED_PARTY_SUBADDRESS_IE;
+typedef ATM_ADDRESS ATM_CALLING_PARTY_SUBADDRESS_IE;
+
+typedef struct _Q2931_CALLMGR_PARAMETERS {
+ ATM_ADDRESS CalledParty;
+ ATM_ADDRESS CallingParty;
+ ULONG InfoElementCount;
+ UCHAR InfoElements[1];
+} Q2931_CALLMGR_PARAMETERS, *PQ2931_CALLMGR_PARAMETERS;
+
+typedef struct _ATM_VC_RATES_SUPPORTED {
+ ULONG MinCellRate;
+ ULONG MaxCellRate;
+} ATM_VC_RATES_SUPPORTED, *PATM_VC_RATES_SUPPORTED;
+
+typedef ULONG ATM_SERVICE_REGISTRY_TYPE;
+
+/* ATM_SERVICE_ADDRESS_LIST.ServiceRegistryType constants */
+#define ATM_SERVICE_REGISTRY_LECS 1
+#define ATM_SERVICE_REGISTRY_ANS 2
+
+typedef struct _ATM_SERVICE_ADDRESS_LIST {
+ ATM_SERVICE_REGISTRY_TYPE ServiceRegistryType;
+ ULONG NumberOfAddressesAvailable;
+ ULONG NumberOfAddressesReturned;
+ ATM_ADDRESS Address[1];
+} ATM_SERVICE_ADDRESS_LIST, *PATM_SERVICE_ADDRESS_LIST;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __ATM_H */
diff --git a/tcc/include/winapi/ddk/batclass.h b/tcc/include/winapi/ddk/batclass.h
new file mode 100644
index 0000000..d92a9ed
--- /dev/null
+++ b/tcc/include/winapi/ddk/batclass.h
@@ -0,0 +1,298 @@
+/*
+ * batclass.h
+ *
+ * Battery class driver interface
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __BATCLASS_H
+#define __BATCLASS_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+
+#if defined(_BATTERYCLASS_)
+ #define BCLASSAPI DECLSPEC_EXPORT
+#else
+ #define BCLASSAPI DECLSPEC_IMPORT
+#endif
+
+
+/* Battery device GUIDs */
+
+DEFINE_GUID(GUID_DEVICE_BATTERY,
+ 0x72631e54L, 0x78A4, 0x11d0, 0xbc, 0xf7, 0x00, 0xaa, 0x00, 0xb7, 0xb3, 0x2a);
+
+DEFINE_GUID(BATTERY_STATUS_WMI_GUID,
+ 0xfc4670d1, 0xebbf, 0x416e, 0x87, 0xce, 0x37, 0x4a, 0x4e, 0xbc, 0x11, 0x1a);
+
+DEFINE_GUID(BATTERY_RUNTIME_WMI_GUID,
+ 0x535a3767, 0x1ac2, 0x49bc, 0xa0, 0x77, 0x3f, 0x7a, 0x02, 0xe4, 0x0a, 0xec);
+
+DEFINE_GUID(BATTERY_TEMPERATURE_WMI_GUID,
+ 0x1a52a14d, 0xadce, 0x4a44, 0x9a, 0x3e, 0xc8, 0xd8, 0xf1, 0x5f, 0xf2, 0xc2);
+
+DEFINE_GUID(BATTERY_FULL_CHARGED_CAPACITY_WMI_GUID,
+ 0x40b40565, 0x96f7, 0x4435, 0x86, 0x94, 0x97, 0xe0, 0xe4, 0x39, 0x59, 0x05);
+
+DEFINE_GUID(BATTERY_CYCLE_COUNT_WMI_GUID,
+ 0xef98db24, 0x0014, 0x4c25, 0xa5, 0x0b, 0xc7, 0x24, 0xae, 0x5c, 0xd3, 0x71);
+
+DEFINE_GUID(BATTERY_STATIC_DATA_WMI_GUID,
+ 0x05e1e463, 0xe4e2, 0x4ea9, 0x80, 0xcb, 0x9b, 0xd4, 0xb3, 0xca, 0x06, 0x55);
+
+DEFINE_GUID(BATTERY_STATUS_CHANGE_WMI_GUID,
+ 0xcddfa0c3, 0x7c5b, 0x4e43, 0xa0, 0x34, 0x05, 0x9f, 0xa5, 0xb8, 0x43, 0x64);
+
+DEFINE_GUID(BATTERY_TAG_CHANGE_WMI_GUID,
+ 0x5e1f6e19, 0x8786, 0x4d23, 0x94, 0xfc, 0x9e, 0x74, 0x6b, 0xd5, 0xd8, 0x88);
+
+
+/* BATTERY_INFORMATION.Capabilities constants */
+#define BATTERY_SET_CHARGE_SUPPORTED 0x00000001
+#define BATTERY_SET_DISCHARGE_SUPPORTED 0x00000002
+#define BATTERY_SET_RESUME_SUPPORTED 0x00000004
+#define BATTERY_IS_SHORT_TERM 0x20000000
+#define BATTERY_CAPACITY_RELATIVE 0x40000000
+#define BATTERY_SYSTEM_BATTERY 0x80000000
+
+typedef struct _BATTERY_INFORMATION {
+ ULONG Capabilities;
+ UCHAR Technology;
+ UCHAR Reserved[3];
+ UCHAR Chemistry[4];
+ ULONG DesignedCapacity;
+ ULONG FullChargedCapacity;
+ ULONG DefaultAlert1;
+ ULONG DefaultAlert2;
+ ULONG CriticalBias;
+ ULONG CycleCount;
+} BATTERY_INFORMATION, *PBATTERY_INFORMATION;
+
+typedef struct _BATTERY_MANUFACTURE_DATE {
+ UCHAR Day;
+ UCHAR Month;
+ USHORT Year;
+} BATTERY_MANUFACTURE_DATE, *PBATTERY_MANUFACTURE_DATE;
+
+typedef struct _BATTERY_NOTIFY {
+ ULONG PowerState;
+ ULONG LowCapacity;
+ ULONG HighCapacity;
+} BATTERY_NOTIFY, *PBATTERY_NOTIFY;
+
+/* BATTERY_STATUS.PowerState flags */
+#define BATTERY_POWER_ON_LINE 0x00000001
+#define BATTERY_DISCHARGING 0x00000002
+#define BATTERY_CHARGING 0x00000004
+#define BATTERY_CRITICAL 0x00000008
+
+/* BATTERY_STATUS.Voltage constant */
+#define BATTERY_UNKNOWN_VOLTAGE 0xFFFFFFFF
+
+/* BATTERY_STATUS.Rate constant */
+#define BATTERY_UNKNOWN_RATE 0x80000000
+
+typedef struct _BATTERY_STATUS {
+ ULONG PowerState;
+ ULONG Capacity;
+ ULONG Voltage;
+ LONG Rate;
+} BATTERY_STATUS, *PBATTERY_STATUS;
+
+/* BATTERY_INFORMATION.Capacity constants */
+#define BATTERY_UNKNOWN_CAPACITY 0xFFFFFFFF
+
+typedef enum _BATTERY_QUERY_INFORMATION_LEVEL {
+ BatteryInformation = 0,
+ BatteryGranularityInformation,
+ BatteryTemperature,
+ BatteryEstimatedTime,
+ BatteryDeviceName,
+ BatteryManufactureDate,
+ BatteryManufactureName,
+ BatteryUniqueID,
+ BatterySerialNumber
+} BATTERY_QUERY_INFORMATION_LEVEL;
+
+/* BatteryEstimatedTime constant */
+#define BATTERY_UNKNOWN_TIME 0x80000000
+
+/* NTSTATUS possibly returned by BCLASS_QUERY_STATUS */
+#define BATTERY_TAG_INVALID 0
+
+typedef struct _BATTERY_QUERY_INFORMATION {
+ ULONG BatteryTag;
+ BATTERY_QUERY_INFORMATION_LEVEL InformationLevel;
+ LONG AtRate;
+} BATTERY_QUERY_INFORMATION, *PBATTERY_QUERY_INFORMATION;
+
+typedef enum _BATTERY_SET_INFORMATION_LEVEL {
+ BatteryCriticalBias = 0,
+ BatteryCharge,
+ BatteryDischarge
+} BATTERY_SET_INFORMATION_LEVEL;
+
+#define MAX_BATTERY_STRING_SIZE 128
+
+typedef struct _BATTERY_SET_INFORMATION {
+ ULONG BatteryTag;
+ BATTERY_SET_INFORMATION_LEVEL InformationLevel;
+ UCHAR Buffer[1];
+} BATTERY_SET_INFORMATION, *PBATTERY_SET_INFORMATION;
+
+typedef struct _BATTERY_WAIT_STATUS {
+ ULONG BatteryTag;
+ ULONG Timeout;
+ ULONG PowerState;
+ ULONG LowCapacity;
+ ULONG HighCapacity;
+} BATTERY_WAIT_STATUS, *PBATTERY_WAIT_STATUS;
+
+
+#define IOCTL_BATTERY_QUERY_TAG \
+ CTL_CODE(FILE_DEVICE_BATTERY, 0x10, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_BATTERY_QUERY_INFORMATION \
+ CTL_CODE(FILE_DEVICE_BATTERY, 0x11, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_BATTERY_SET_INFORMATION \
+ CTL_CODE(FILE_DEVICE_BATTERY, 0x12, METHOD_BUFFERED, FILE_WRITE_ACCESS)
+
+#define IOCTL_BATTERY_QUERY_STATUS \
+ CTL_CODE(FILE_DEVICE_BATTERY, 0x13, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+
+typedef NTSTATUS DDKAPI
+(*BCLASS_DISABLE_STATUS_NOTIFY)(
+ /*IN*/ PVOID Context);
+
+typedef NTSTATUS DDKAPI
+(*BCLASS_QUERY_INFORMATION)(
+ /*IN*/ PVOID Context,
+ /*IN*/ ULONG BatteryTag,
+ /*IN*/ BATTERY_QUERY_INFORMATION_LEVEL Level,
+ /*IN*/ LONG AtRate /*OPTIONAL*/,
+ /*OUT*/ PVOID Buffer,
+ /*IN*/ ULONG BufferLength,
+ /*OUT*/ PULONG ReturnedLength);
+
+typedef NTSTATUS DDKAPI
+(*BCLASS_QUERY_STATUS)(
+ /*IN*/ PVOID Context,
+ /*IN*/ ULONG BatteryTag,
+ /*OUT*/ PBATTERY_STATUS BatteryStatus);
+
+typedef NTSTATUS DDKAPI
+(*BCLASS_QUERY_TAG)(
+ /*IN*/ PVOID Context,
+ /*OUT*/ PULONG BatteryTag);
+
+typedef NTSTATUS DDKAPI
+(*BCLASS_SET_INFORMATION)(
+ /*IN*/ PVOID Context,
+ /*IN*/ ULONG BatteryTag,
+ /*IN*/ BATTERY_SET_INFORMATION_LEVEL Level,
+ /*IN*/ PVOID Buffer /*OPTIONAL*/);
+
+typedef NTSTATUS DDKAPI
+(*BCLASS_SET_STATUS_NOTIFY)(
+ /*IN*/ PVOID Context,
+ /*IN*/ ULONG BatteryTag,
+ /*IN*/ PBATTERY_NOTIFY BatteryNotify);
+
+
+typedef struct _BATTERY_MINIPORT_INFO {
+ USHORT MajorVersion;
+ USHORT MinorVersion;
+ PVOID Context;
+ BCLASS_QUERY_TAG QueryTag;
+ BCLASS_QUERY_INFORMATION QueryInformation;
+ BCLASS_SET_INFORMATION SetInformation;
+ BCLASS_QUERY_STATUS QueryStatus;
+ BCLASS_SET_STATUS_NOTIFY SetStatusNotify;
+ BCLASS_DISABLE_STATUS_NOTIFY DisableStatusNotify;
+ PDEVICE_OBJECT Pdo;
+ PUNICODE_STRING DeviceName;
+} BATTERY_MINIPORT_INFO, *PBATTERY_MINIPORT_INFO;
+
+/* BATTERY_MINIPORT_INFO.XxxVersion */
+#define BATTERY_CLASS_MAJOR_VERSION 0x0001
+#define BATTERY_CLASS_MINOR_VERSION 0x0000
+
+
+BCLASSAPI
+NTSTATUS
+DDKAPI
+BatteryClassInitializeDevice(
+ /*IN*/ PBATTERY_MINIPORT_INFO MiniportInfo,
+ /*IN*/ PVOID *ClassData);
+
+BCLASSAPI
+NTSTATUS
+DDKAPI
+BatteryClassIoctl(
+ /*IN*/ PVOID ClassData,
+ /*IN*/ PIRP Irp);
+
+BCLASSAPI
+NTSTATUS
+DDKAPI
+BatteryClassQueryWmiDataBlock(
+ /*IN*/ PVOID ClassData,
+ /*IN*/ PDEVICE_OBJECT DeviceObject,
+ /*IN*/ PIRP Irp,
+ /*IN*/ ULONG GuidIndex,
+ /*IN OUT*/ PULONG InstanceLengthArray,
+ /*IN*/ ULONG OutBufferSize,
+ /*OUT*/ PUCHAR Buffer);
+
+BCLASSAPI
+NTSTATUS
+DDKAPI
+BatteryClassStatusNotify(
+ /*IN*/ PVOID ClassData);
+
+BCLASSAPI
+NTSTATUS
+DDKAPI
+BatteryClassSystemControl(
+ /*IN*/ PVOID ClassData,
+ /*IN*/ PWMILIB_CONTEXT WmiLibContext,
+ /*IN*/ PDEVICE_OBJECT DeviceObject,
+ /*IN*/ PIRP Irp,
+ /*OUT*/ PSYSCTL_IRP_DISPOSITION Disposition);
+
+BCLASSAPI
+NTSTATUS
+DDKAPI
+BatteryClassUnload(
+ /*IN*/ PVOID ClassData);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __BATCLASS_H */
diff --git a/tcc/include/winapi/ddk/cfg.h b/tcc/include/winapi/ddk/cfg.h
new file mode 100644
index 0000000..107bd4a
--- /dev/null
+++ b/tcc/include/winapi/ddk/cfg.h
@@ -0,0 +1,139 @@
+/*
+ * cfg.h
+ *
+ * PnP Configuration Manager shared definitions between user mode and kernel mode code
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __CFG_H
+#define __CFG_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define CM_PROB_NOT_CONFIGURED 0x00000001
+#define CM_PROB_DEVLOADER_FAILED 0x00000002
+#define CM_PROB_OUT_OF_MEMORY 0x00000003
+#define CM_PROB_ENTRY_IS_WRONG_TYPE 0x00000004
+#define CM_PROB_LACKED_ARBITRATOR 0x00000005
+#define CM_PROB_BOOT_CONFIG_CONFLICT 0x00000006
+#define CM_PROB_FAILED_FILTER 0x00000007
+#define CM_PROB_DEVLOADER_NOT_FOUND 0x00000008
+#define CM_PROB_INVALID_DATA 0x00000009
+#define CM_PROB_FAILED_START 0x0000000A
+#define CM_PROB_LIAR 0x0000000B
+#define CM_PROB_NORMAL_CONFLICT 0x0000000C
+#define CM_PROB_NOT_VERIFIED 0x0000000D
+#define CM_PROB_NEED_RESTART 0x0000000E
+#define CM_PROB_REENUMERATION 0x0000000F
+#define CM_PROB_PARTIAL_LOG_CONF 0x00000010
+#define CM_PROB_UNKNOWN_RESOURCE 0x00000011
+#define CM_PROB_REINSTALL 0x00000012
+#define CM_PROB_REGISTRY 0x00000013
+#define CM_PROB_VXDLDR 0x00000014
+#define CM_PROB_WILL_BE_REMOVED 0x00000015
+#define CM_PROB_DISABLED 0x00000016
+#define CM_PROB_DEVLOADER_NOT_READY 0x00000017
+#define CM_PROB_DEVICE_NOT_THERE 0x00000018
+#define CM_PROB_MOVED 0x00000019
+#define CM_PROB_TOO_EARLY 0x0000001A
+#define CM_PROB_NO_VALID_LOG_CONF 0x0000001B
+#define CM_PROB_FAILED_INSTALL 0x0000001C
+#define CM_PROB_HARDWARE_DISABLED 0x0000001D
+#define CM_PROB_CANT_SHARE_IRQ 0x0000001E
+#define CM_PROB_FAILED_ADD 0x0000001F
+#define CM_PROB_DISABLED_SERVICE 0x00000020
+#define CM_PROB_TRANSLATION_FAILED 0x00000021
+#define CM_PROB_NO_SOFTCONFIG 0x00000022
+#define CM_PROB_BIOS_TABLE 0x00000023
+#define CM_PROB_IRQ_TRANSLATION_FAILED 0x00000024
+#define CM_PROB_FAILED_DRIVER_ENTRY 0x00000025
+#define CM_PROB_DRIVER_FAILED_PRIOR_UNLOAD 0x00000026
+#define CM_PROB_DRIVER_FAILED_LOAD 0x00000027
+#define CM_PROB_DRIVER_SERVICE_KEY_INVALID 0x00000028
+#define CM_PROB_LEGACY_SERVICE_NO_DEVICES 0x00000029
+#define CM_PROB_DUPLICATE_DEVICE 0x0000002A
+#define CM_PROB_FAILED_POST_START 0x0000002B
+#define CM_PROB_HALTED 0x0000002C
+#define CM_PROB_PHANTOM 0x0000002D
+#define CM_PROB_SYSTEM_SHUTDOWN 0x0000002E
+#define CM_PROB_HELD_FOR_EJECT 0x0000002F
+#define CM_PROB_DRIVER_BLOCKED 0x00000030
+#define CM_PROB_REGISTRY_TOO_LARGE 0x00000031
+
+#define LCPRI_FORCECONFIG 0x00000000
+#define LCPRI_BOOTCONFIG 0x00000001
+#define LCPRI_DESIRED 0x00002000
+#define LCPRI_NORMAL 0x00003000
+#define LCPRI_LASTBESTCONFIG 0x00003FFF
+#define LCPRI_SUBOPTIMAL 0x00005000
+#define LCPRI_LASTSOFTCONFIG 0x00007FFF
+#define LCPRI_RESTART 0x00008000
+#define LCPRI_REBOOT 0x00009000
+#define LCPRI_POWEROFF 0x0000A000
+#define LCPRI_HARDRECONFIG 0x0000C000
+#define LCPRI_HARDWIRED 0x0000E000
+#define LCPRI_IMPOSSIBLE 0x0000F000
+#define LCPRI_DISABLED 0x0000FFFF
+#define MAX_LCPRI 0x0000FFFF
+
+#define DN_ROOT_ENUMERATED 0x00000001 /* Was enumerated by ROOT */
+#define DN_DRIVER_LOADED 0x00000002 /* Has Register_Device_Driver */
+#define DN_ENUM_LOADED 0x00000004 /* Has Register_Enumerator */
+#define DN_STARTED 0x00000008 /* Is currently configured */
+#define DN_MANUAL 0x00000010 /* Manually installed */
+#define DN_NEED_TO_ENUM 0x00000020 /* May need reenumeration */
+#define DN_NOT_FIRST_TIME 0x00000040 /* Has received a config */
+#define DN_HARDWARE_ENUM 0x00000080 /* Enum generates hardware ID */
+#define DN_LIAR 0x00000100 /* Lied about can reconfig once */
+#define DN_HAS_MARK 0x00000200 /* Not CM_Create_DevNode lately */
+#define DN_HAS_PROBLEM 0x00000400 /* Need device installer */
+#define DN_FILTERED 0x00000800 /* Is filtered */
+#define DN_MOVED 0x00001000 /* Has been moved */
+#define DN_DISABLEABLE 0x00002000 /* Can be rebalanced */
+#define DN_REMOVABLE 0x00004000 /* Can be removed */
+#define DN_PRIVATE_PROBLEM 0x00008000 /* Has a private problem */
+#define DN_MF_PARENT 0x00010000 /* Multi function parent */
+#define DN_MF_CHILD 0x00020000 /* Multi function child */
+#define DN_WILL_BE_REMOVED 0x00040000 /* Devnode is being removed */
+
+typedef enum _PNP_VETO_TYPE {
+ PNP_VetoTypeUnknown,
+ PNP_VetoLegacyDevice,
+ PNP_VetoPendingClose,
+ PNP_VetoWindowsApp,
+ PNP_VetoWindowsService,
+ PNP_VetoOutstandingOpen,
+ PNP_VetoDevice,
+ PNP_VetoDriver,
+ PNP_VetoIllegalDeviceRequest,
+ PNP_VetoInsufficientPower,
+ PNP_VetoNonDisableable,
+ PNP_VetoLegacyDriver
+} PNP_VETO_TYPE, *PPNP_VETO_TYPE;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __CFG_H */
diff --git a/tcc/include/winapi/ddk/cfgmgr32.h b/tcc/include/winapi/ddk/cfgmgr32.h
new file mode 100644
index 0000000..4595ce7
--- /dev/null
+++ b/tcc/include/winapi/ddk/cfgmgr32.h
@@ -0,0 +1,1533 @@
+/*
+ * cfgmgr32.h
+ *
+ * PnP configuration manager
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __CFGMGR32_H
+#define __CFGMGR32_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+
+#if defined(_CFGMGR32_)
+#define CMAPI DECLSPEC_EXPORT
+#else
+#define CMAPI DECLSPEC_IMPORT
+#endif
+
+#include "cfg.h"
+
+#include <pshpack1.h>
+
+#define CR_SUCCESS 0x00000000
+#define CR_DEFAULT 0x00000001
+#define CR_OUT_OF_MEMORY 0x00000002
+#define CR_INVALID_POINTER 0x00000003
+#define CR_INVALID_FLAG 0x00000004
+#define CR_INVALID_DEVNODE 0x00000005
+#define CR_INVALID_DEVINST CR_INVALID_DEVNODE
+#define CR_INVALID_RES_DES 0x00000006
+#define CR_INVALID_LOG_CONF 0x00000007
+#define CR_INVALID_ARBITRATOR 0x00000008
+#define CR_INVALID_NODELIST 0x00000009
+#define CR_DEVNODE_HAS_REQS 0x0000000A
+#define CR_DEVINST_HAS_REQS CR_DEVNODE_HAS_REQS
+#define CR_INVALID_RESOURCEID 0x0000000B
+#define CR_DLVXD_NOT_FOUND 0x0000000C
+#define CR_NO_SUCH_DEVNODE 0x0000000D
+#define CR_NO_SUCH_DEVINST CR_NO_SUCH_DEVNODE
+#define CR_NO_MORE_LOG_CONF 0x0000000E
+#define CR_NO_MORE_RES_DES 0x0000000F
+#define CR_ALREADY_SUCH_DEVNODE 0x00000010
+#define CR_ALREADY_SUCH_DEVINST CR_ALREADY_SUCH_DEVNODE
+#define CR_INVALID_RANGE_LIST 0x00000011
+#define CR_INVALID_RANGE 0x00000012
+#define CR_FAILURE 0x00000013
+#define CR_NO_SUCH_LOGICAL_DEV 0x00000014
+#define CR_CREATE_BLOCKED 0x00000015
+#define CR_NOT_SYSTEM_VM 0x00000016
+#define CR_REMOVE_VETOED 0x00000017
+#define CR_APM_VETOED 0x00000018
+#define CR_INVALID_LOAD_TYPE 0x00000019
+#define CR_BUFFER_SMALL 0x0000001A
+#define CR_NO_ARBITRATOR 0x0000001B
+#define CR_NO_REGISTRY_HANDLE 0x0000001C
+#define CR_REGISTRY_ERROR 0x0000001D
+#define CR_INVALID_DEVICE_ID 0x0000001E
+#define CR_INVALID_DATA 0x0000001F
+#define CR_INVALID_API 0x00000020
+#define CR_DEVLOADER_NOT_READY 0x00000021
+#define CR_NEED_RESTART 0x00000022
+#define CR_NO_MORE_HW_PROFILES 0x00000023
+#define CR_DEVICE_NOT_THERE 0x00000024
+#define CR_NO_SUCH_VALUE 0x00000025
+#define CR_WRONG_TYPE 0x00000026
+#define CR_INVALID_PRIORITY 0x00000027
+#define CR_NOT_DISABLEABLE 0x00000028
+#define CR_FREE_RESOURCES 0x00000029
+#define CR_QUERY_VETOED 0x0000002A
+#define CR_CANT_SHARE_IRQ 0x0000002B
+#define CR_NO_DEPENDENT 0x0000002C
+#define CR_SAME_RESOURCES 0x0000002D
+#define CR_NO_SUCH_REGISTRY_KEY 0x0000002E
+#define CR_INVALID_MACHINENAME 0x0000002F
+#define CR_REMOTE_COMM_FAILURE 0x00000030
+#define CR_MACHINE_UNAVAILABLE 0x00000031
+#define CR_NO_CM_SERVICES 0x00000032
+#define CR_ACCESS_DENIED 0x00000033
+#define CR_CALL_NOT_IMPLEMENTED 0x00000034
+#define CR_INVALID_PROPERTY 0x00000035
+#define CR_DEVICE_INTERFACE_ACTIVE 0x00000036
+#define CR_NO_SUCH_DEVICE_INTERFACE 0x00000037
+#define CR_INVALID_REFERENCE_STRING 0x00000038
+#define CR_INVALID_CONFLICT_LIST 0x00000039
+#define CR_INVALID_INDEX 0x0000003A
+#define CR_INVALID_STRUCTURE_SIZE 0x0000003B
+
+
+typedef DWORD RETURN_TYPE;
+typedef RETURN_TYPE CONFIGRET;
+
+typedef HANDLE HMACHINE;
+typedef HMACHINE *PHMACHINE;
+
+typedef DWORD_PTR RES_DES;
+typedef RES_DES *PRES_DES;
+
+typedef DWORD_PTR RANGE_ELEMENT;
+typedef RANGE_ELEMENT *PRANGE_ELEMENT;
+
+typedef ULONG_PTR CONFLICT_LIST;
+typedef CONFLICT_LIST *PCONFLICT_LIST;
+
+typedef DWORD_PTR LOG_CONF;
+typedef LOG_CONF *PLOG_CONF;
+
+typedef ULONG PRIORITY;
+typedef PRIORITY *PPRIORITY;
+
+typedef DWORD_PTR RANGE_LIST;
+typedef RANGE_LIST *PRANGE_LIST;
+
+typedef DWORD DEVNODE, DEVINST;
+typedef DEVNODE *PDEVNODE, *PDEVINST;
+
+typedef CHAR *DEVNODEID_A, *DEVINSTID_A;
+typedef WCHAR *DEVNODEID_W, *DEVINSTID_W;
+
+#ifdef UNICODE
+typedef DEVNODEID_W DEVNODEID;
+typedef DEVINSTID_W DEVINSTID;
+#else
+typedef DEVNODEID_A DEVNODEID;
+typedef DEVINSTID_A DEVINSTID;
+#endif
+
+typedef ULONG REGDISPOSITION;
+
+typedef ULONG RESOURCEID;
+typedef RESOURCEID *PRESOURCEID;
+
+#define CM_RESDES_WIDTH_DEFAULT 0x00000000
+#define CM_RESDES_WIDTH_32 0x00000001
+#define CM_RESDES_WIDTH_64 0x00000002
+#define CM_RESDES_WIDTH_BITS 0x00000003
+
+
+#define MAX_CONFIG_VALUE 9999
+#define MAX_INSTANCE_VALUE 9999
+
+#define MAX_DEVICE_ID_LEN 200
+#define MAX_DEVNODE_ID_LEN MAX_DEVICE_ID_LEN
+
+#define MAX_CLASS_NAME_LEN 32
+#define MAX_GUID_STRING_LEN 39
+#define MAX_PROFILE_LEN 80
+
+
+#define ResType_All 0x00000000
+#define ResType_None 0x00000000
+#define ResType_Mem 0x00000001
+#define ResType_IO 0x00000002
+#define ResType_DMA 0x00000003
+#define ResType_IRQ 0x00000004
+#define ResType_DoNotUse 0x00000005
+#define ResType_BusNumber 0x00000006
+#define ResType_MAX 0x00000006
+#define ResType_Ignored_Bit 0x00008000
+#define ResType_ClassSpecific 0x0000FFFF
+#define ResType_Reserved 0x00008000
+#define ResType_DevicePrivate 0x00008001
+#define ResType_PcCardConfig 0x00008002
+#define ResType_MfCardConfig 0x00008003
+
+#define CM_GETIDLIST_FILTER_NONE 0x00000000
+#define CM_GETIDLIST_FILTER_ENUMERATOR 0x00000001
+#define CM_GETIDLIST_FILTER_SERVICE 0x00000002
+#define CM_GETIDLIST_FILTER_EJECTRELATIONS 0x00000004
+#define CM_GETIDLIST_FILTER_REMOVALRELATIONS 0x00000008
+#define CM_GETIDLIST_FILTER_POWERRELATIONS 0x00000010
+#define CM_GETIDLIST_FILTER_BUSRELATIONS 0x00000020
+#define CM_GETIDLIST_DONOTGENERATE 0x10000040
+#define CM_GETIDLIST_FILTER_BITS 0x1000007F
+
+#define CM_GET_DEVICE_INTERFACE_LIST_PRESENT 0x00000000
+#define CM_GET_DEVICE_INTERFACE_LIST_ALL_DEVICES 0x00000001
+#define CM_GET_DEVICE_INTERFACE_LIST_BITS 0x00000001
+
+
+typedef struct BusNumber_Des_s {
+ DWORD BUSD_Count;
+ DWORD BUSD_Type;
+ DWORD BUSD_Flags;
+ ULONG BUSD_Alloc_Base;
+ ULONG BUSD_Alloc_End;
+} BUSNUMBER_DES, *PBUSNUMBER_DES;
+
+typedef struct BusNumber_Range_s {
+ ULONG BUSR_Min;
+ ULONG BUSR_Max;
+ ULONG BUSR_nBusNumbers;
+ ULONG BUSR_Flags;
+} BUSNUMBER_RANGE, *PBUSNUMBER_RANGE;
+
+#define BusNumberType_Range sizeof(BUSNUMBER_RANGE)
+
+typedef struct BusNumber_Resource_s {
+ BUSNUMBER_DES BusNumber_Header;
+ BUSNUMBER_RANGE BusNumber_Data[ANYSIZE_ARRAY];
+} BUSNUMBER_RESOURCE, *PBUSNUMBER_RESOURCE;
+
+typedef struct CS_Des_s {
+ DWORD CSD_SignatureLength;
+ DWORD CSD_LegacyDataOffset;
+ DWORD CSD_LegacyDataSize;
+ DWORD CSD_Flags;
+ GUID CSD_ClassGuid;
+ BYTE CSD_Signature[ANYSIZE_ARRAY];
+} CS_DES, *PCS_DES;
+
+typedef struct CS_Resource_s {
+ CS_DES CS_Header;
+} CS_RESOURCE, *PCS_RESOURCE;
+
+typedef struct DevPrivate_Des_s {
+ DWORD PD_Count;
+ DWORD PD_Type;
+ DWORD PD_Data1;
+ DWORD PD_Data2;
+ DWORD PD_Data3;
+ DWORD PD_Flags;
+} DEVPRIVATE_DES, *PDEVPRIVATE_DES;
+
+typedef struct DevPrivate_Range_s {
+ DWORD PR_Data1;
+ DWORD PR_Data2;
+ DWORD PR_Data3;
+} DEVPRIVATE_RANGE, *PDEVPRIVATE_RANGE;
+
+#define PType_Range sizeof(DEVPRIVATE_RANGE)
+
+typedef struct DevPrivate_Resource_s {
+ DEVPRIVATE_DES PRV_Header;
+ DEVPRIVATE_RANGE PRV_Data[ANYSIZE_ARRAY];
+} DEVPRIVATE_RESOURCE, *PDEVPRIVATE_RESOURCE;
+
+/* DMA_DES.DD_Flags constants and masks */
+#define mDD_Width 0x3
+#define fDD_BYTE 0x0
+#define fDD_WORD 0x1
+#define fDD_DWORD 0x2
+#define fDD_BYTE_AND_WORD 0x3
+
+#define mDD_BusMaster 0x4
+#define fDD_NoBusMaster 0x0
+#define fDD_BusMaster 0x4
+
+#define mDD_Type 0x18
+#define fDD_TypeStandard 0x00
+#define fDD_TypeA 0x08
+#define fDD_TypeB 0x10
+#define fDD_TypeF 0x18
+
+typedef struct DMA_Des_s {
+ DWORD DD_Count;
+ DWORD DD_Type;
+ DWORD DD_Flags;
+ ULONG DD_Alloc_Chan;
+} DMA_DES, *PDMA_DES;
+
+typedef struct DMA_Range_s {
+ ULONG DR_Min;
+ ULONG DR_Max;
+ ULONG DR_Flags;
+} DMA_RANGE, *PDMA_RANGE;
+
+#define DType_Range sizeof(DMA_RANGE)
+
+typedef struct DMA_Resource_s {
+ DMA_DES DMA_Header;
+ DMA_RANGE DMA_Data[ANYSIZE_ARRAY];
+} DMA_RESOURCE, *PDMA_RESOURCE;
+
+/* IO_DES.Type constants and masks */
+#define fIOD_PortType 0x1
+#define fIOD_Memory 0x0
+#define fIOD_IO 0x1
+#define fIOD_DECODE 0x00fc
+#define fIOD_10_BIT_DECODE 0x0004
+#define fIOD_12_BIT_DECODE 0x0008
+#define fIOD_16_BIT_DECODE 0x0010
+#define fIOD_POSITIVE_DECODE 0x0020
+#define fIOD_PASSIVE_DECODE 0x0040
+#define fIOD_WINDOW_DECODE 0x0080
+
+typedef struct IO_Des_s {
+ DWORD IOD_Count;
+ DWORD IOD_Type;
+ DWORDLONG IOD_Alloc_Base;
+ DWORDLONG IOD_Alloc_End;
+ DWORD IOD_DesFlags;
+} IO_DES, *PIO_DES;
+
+/* IO_RANGE.IOR_Alias constants */
+#define IO_ALIAS_10_BIT_DECODE 0x00000004
+#define IO_ALIAS_12_BIT_DECODE 0x00000010
+#define IO_ALIAS_16_BIT_DECODE 0x00000000
+#define IO_ALIAS_POSITIVE_DECODE 0x000000FF
+
+typedef struct IO_Range_s {
+ DWORDLONG IOR_Align;
+ DWORD IOR_nPorts;
+ DWORDLONG IOR_Min;
+ DWORDLONG IOR_Max;
+ DWORD IOR_RangeFlags;
+ DWORDLONG IOR_Alias;
+} IO_RANGE, *PIO_RANGE;
+
+#define IOType_Range sizeof(IO_RANGE)
+
+typedef struct IO_Resource_s {
+ IO_DES IO_Header;
+ IO_RANGE IO_Data[ANYSIZE_ARRAY];
+} IO_RESOURCE, *PIO_RESOURCE;
+
+/* IRQ_DES.IRQD_flags constants */
+#define mIRQD_Share 0x1
+#define fIRQD_Exclusive 0x0
+#define fIRQD_Share 0x1
+
+#define fIRQD_Share_Bit 0
+#define fIRQD_Level_Bit 1
+
+#define mIRQD_Edge_Level 0x2
+#define fIRQD_Level 0x0
+#define fIRQD_Edge 0x2
+
+typedef struct IRQ_Des_32_s {
+ DWORD IRQD_Count;
+ DWORD IRQD_Type;
+ DWORD IRQD_Flags;
+ ULONG IRQD_Alloc_Num;
+ ULONG32 IRQD_Affinity;
+} IRQ_DES_32, *PIRQ_DES_32;
+
+typedef struct IRQ_Des_64_s {
+ DWORD IRQD_Count;
+ DWORD IRQD_Type;
+ DWORD IRQD_Flags;
+ ULONG IRQD_Alloc_Num;
+ ULONG64 IRQD_Affinity;
+} IRQ_DES_64, *PIRQ_DES_64;
+
+#ifdef _WIN64
+typedef IRQ_DES_64 IRQ_DES;
+typedef PIRQ_DES_64 PIRQ_DES;
+#else
+typedef IRQ_DES_32 IRQ_DES;
+typedef PIRQ_DES_32 PIRQ_DES;
+#endif
+
+typedef struct IRQ_Range_s {
+ ULONG IRQR_Min;
+ ULONG IRQR_Max;
+ ULONG IRQR_Flags;
+} IRQ_RANGE, *PIRQ_RANGE;
+
+#define IRQType_Range sizeof(IRQ_RANGE)
+
+typedef struct IRQ_Resource_s {
+ IRQ_DES IRQ_Header;
+ IRQ_RANGE IRQ_Data[ANYSIZE_ARRAY];
+} IRQ_RESOURCE, *PIRQ_RESOURCE;
+
+/* MEM_DES.MD_Flags constants */
+#define mMD_MemoryType 0x1
+#define fMD_MemoryType mMD_MemoryType
+#define fMD_ROM 0x0
+#define fMD_RAM 0x1
+
+#define mMD_32_24 0x2
+#define fMD_32_24 mMD_32_24
+#define fMD_24 0x0
+#define fMD_32 0x2
+
+#define mMD_Prefetchable 0x4
+#define fMD_Prefetchable mMD_Prefetchable
+#define fMD_Pref mMD_Prefetchable
+#define fMD_PrefetchDisallowed 0x0
+#define fMD_PrefetchAllowed 0x4
+
+#define mMD_Readable 0x8
+#define fMD_Readable mMD_Readable
+#define fMD_ReadAllowed 0x0
+#define fMD_ReadDisallowed 0x8
+
+#define mMD_CombinedWrite 0x10
+#define fMD_CombinedWrite mMD_CombinedWrite
+#define fMD_CombinedWriteDisallowed 0x0
+#define fMD_CombinedWriteAllowed 0x10
+
+#define mMD_Cacheable 0x20
+#define fMD_NonCacheable 0x0
+#define fMD_Cacheable 0x20
+
+typedef struct Mem_Des_s {
+ DWORD MD_Count;
+ DWORD MD_Type;
+ DWORDLONG MD_Alloc_Base;
+ DWORDLONG MD_Alloc_End;
+ DWORD MD_Flags;
+ DWORD MD_Reserved;
+} MEM_DES, *PMEM_DES;
+
+typedef struct Mem_Range_s {
+ DWORDLONG MR_Align;
+ ULONG MR_nBytes;
+ DWORDLONG MR_Min;
+ DWORDLONG MR_Max;
+ DWORD MR_Flags;
+ DWORD MR_Reserved;
+} MEM_RANGE, *PMEM_RANGE;
+
+#define MType_Range sizeof(MEM_RANGE)
+
+typedef struct Mem_Resource_s {
+ MEM_DES MEM_Header;
+ MEM_RANGE MEM_Data[ANYSIZE_ARRAY];
+} MEM_RESOURCE, *PMEM_RESOURCE;
+
+/* MFCARD_DES.PMF_Flags constants */
+#define fPMF_AUDIO_ENABLE 0x8
+#define mPMF_AUDIO_ENABLE fPMF_AUDIO_ENABLE
+
+typedef struct MfCard_Des_s {
+ DWORD PMF_Count;
+ DWORD PMF_Type;
+ DWORD PMF_Flags;
+ BYTE PMF_ConfigOptions;
+ BYTE PMF_IoResourceIndex;
+ BYTE PMF_Reserved[2];
+ DWORD PMF_ConfigRegisterBase;
+} MFCARD_DES, *PMFCARD_DES;
+
+typedef struct MfCard_Resource_s {
+ MFCARD_DES MfCard_Header;
+} MFCARD_RESOURCE, *PMFCARD_RESOURCE;
+
+/* PCCARD_DES.PCD_Flags constants */
+
+typedef struct PcCard_Des_s {
+ DWORD PCD_Count;
+ DWORD PCD_Type;
+ DWORD PCD_Flags;
+ BYTE PCD_ConfigIndex;
+ BYTE PCD_Reserved[3];
+ DWORD PCD_MemoryCardBase1;
+ DWORD PCD_MemoryCardBase2;
+} PCCARD_DES, *PPCCARD_DES;
+
+#define mPCD_IO_8_16 0x1
+#define fPCD_IO_8 0x0
+#define fPCD_IO_16 0x1
+#define mPCD_MEM_8_16 0x2
+#define fPCD_MEM_8 0x0
+#define fPCD_MEM_16 0x2
+#define mPCD_MEM_A_C 0xC
+#define fPCD_MEM1_A 0x4
+#define fPCD_MEM2_A 0x8
+#define fPCD_IO_ZW_8 0x10
+#define fPCD_IO_SRC_16 0x20
+#define fPCD_IO_WS_16 0x40
+#define mPCD_MEM_WS 0x300
+#define fPCD_MEM_WS_ONE 0x100
+#define fPCD_MEM_WS_TWO 0x200
+#define fPCD_MEM_WS_THREE 0x300
+
+#define fPCD_MEM_A 0x4
+
+#define fPCD_ATTRIBUTES_PER_WINDOW 0x8000
+
+#define fPCD_IO1_16 0x00010000
+#define fPCD_IO1_ZW_8 0x00020000
+#define fPCD_IO1_SRC_16 0x00040000
+#define fPCD_IO1_WS_16 0x00080000
+
+#define fPCD_IO2_16 0x00100000
+#define fPCD_IO2_ZW_8 0x00200000
+#define fPCD_IO2_SRC_16 0x00400000
+#define fPCD_IO2_WS_16 0x00800000
+
+#define mPCD_MEM1_WS 0x03000000
+#define fPCD_MEM1_WS_ONE 0x01000000
+#define fPCD_MEM1_WS_TWO 0x02000000
+#define fPCD_MEM1_WS_THREE 0x03000000
+#define fPCD_MEM1_16 0x04000000
+
+#define mPCD_MEM2_WS 0x30000000
+#define fPCD_MEM2_WS_ONE 0x10000000
+#define fPCD_MEM2_WS_TWO 0x20000000
+#define fPCD_MEM2_WS_THREE 0x30000000
+#define fPCD_MEM2_16 0x40000000
+
+#define PCD_MAX_MEMORY 2
+#define PCD_MAX_IO 2
+
+typedef struct PcCard_Resource_s {
+ PCCARD_DES PcCard_Header;
+} PCCARD_RESOURCE, *PPCCARD_RESOURCE;
+
+
+/* CONFLICT_DETAILS.CD.ulMask constants */
+#define CM_CDMASK_DEVINST 0x00000001
+#define CM_CDMASK_RESDES 0x00000002
+#define CM_CDMASK_FLAGS 0x00000004
+#define CM_CDMASK_DESCRIPTION 0x00000008
+#define CM_CDMASK_VALID 0x0000000F
+
+/* CONFLICT_DETAILS.CD.ulFlags constants */
+#define CM_CDFLAGS_DRIVER 0x00000001
+#define CM_CDFLAGS_ROOT_OWNED 0x00000002
+#define CM_CDFLAGS_RESERVED 0x00000004
+
+typedef struct _CONFLICT_DETAILS_A {
+ ULONG CD_ulSize;
+ ULONG CD_ulMask;
+ DEVINST CD_dnDevInst;
+ RES_DES CD_rdResDes;
+ ULONG CD_ulFlags;
+ CHAR CD_szDescription[MAX_PATH];
+} CONFLICT_DETAILS_A , *PCONFLICT_DETAILS_A;
+
+typedef struct _CONFLICT_DETAILS_W {
+ ULONG CD_ulSize;
+ ULONG CD_ulMask;
+ DEVINST CD_dnDevInst;
+ RES_DES CD_rdResDes;
+ ULONG CD_ulFlags;
+ WCHAR CD_szDescription[MAX_PATH];
+} CONFLICT_DETAILS_W , *PCONFLICT_DETAILS_W;
+
+#ifdef UNICODE
+typedef CONFLICT_DETAILS_W CONFLICT_DETAILS;
+typedef PCONFLICT_DETAILS_W PCONFLICT_DETAILS;
+#else
+typedef CONFLICT_DETAILS_A CONFLICT_DETAILS;
+typedef PCONFLICT_DETAILS_A PCONFLICT_DETAILS;
+#endif
+
+
+
+/* CM_Add_Empty_Log_Conf.ulFlags constants */
+#define PRIORITY_EQUAL_FIRST 0x00000008
+#define PRIORITY_EQUAL_LAST 0x00000000
+#define PRIORITY_BIT 0x00000008
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Add_Empty_Log_Conf(
+ /*OUT*/ PLOG_CONF plcLogConf,
+ /*IN*/ DEVINST dnDevInst,
+ /*IN*/ PRIORITY Priority,
+ /*IN*/ ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Add_Empty_Log_Conf_Ex(
+ /*OUT*/ PLOG_CONF plcLogConf,
+ /*IN*/ DEVINST dnDevInst,
+ /*IN*/ PRIORITY Priority,
+ /*IN*/ ULONG ulFlags,
+ /*IN*/ HMACHINE hMachine);
+
+/* CM_Add_ID.ulFlags constants */
+#define CM_ADD_ID_HARDWARE 0x00000000
+#define CM_ADD_ID_COMPATIBLE 0x00000001
+#define CM_ADD_ID_BITS 0x00000001
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Add_IDA(
+ /*IN*/ DEVINST dnDevInst,
+ /*IN*/ PSTR pszID,
+ /*IN*/ ULONG ulFlags,
+ /*IN*/ HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Add_ID_ExA(
+ /*IN*/ DEVINST dnDevInst,
+ /*IN*/ PSTR pszID,
+ /*IN*/ ULONG ulFlags,
+ /*IN*/ HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Add_ID_ExW(
+ /*IN*/ DEVINST dnDevInst,
+ /*IN*/ PWSTR pszID,
+ /*IN*/ ULONG ulFlags,
+ /*IN*/ HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Add_IDW(
+ /*IN*/ DEVINST dnDevInst,
+ /*IN*/ PWSTR pszID,
+ /*IN*/ ULONG ulFlags,
+ /*IN*/ HMACHINE hMachine);
+
+#ifdef UNICODE
+#define CM_Add_ID CM_Add_IDW
+#define CM_Add_ID_Ex CM_Add_ID_ExW
+#else
+#define CM_Add_ID CM_Add_IDA
+#define CM_Add_ID_Ex CM_Add_ID_ExA
+#endif /* UNICODE */
+
+/* FIXME: Obsolete CM_Add_Range */
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Add_Res_Des(
+ /*OUT*/ PRES_DES prdResDes,
+ /*IN*/ LOG_CONF lcLogConf,
+ /*IN*/ RESOURCEID ResourceID,
+ /*IN*/ PCVOID ResourceData,
+ /*IN*/ ULONG ResourceLen,
+ /*IN*/ ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Add_Res_Des_Ex(
+ /*OUT*/ PRES_DES prdResDes,
+ /*IN*/ LOG_CONF lcLogConf,
+ /*IN*/ RESOURCEID ResourceID,
+ /*IN*/ PCVOID ResourceData,
+ /*IN*/ ULONG ResourceLen,
+ /*IN*/ ULONG ulFlags,
+ /*IN*/ HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Connect_MachineA(
+ /*IN*/ PCSTR UNCServerName,
+ /*OUT*/ PHMACHINE phMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Connect_MachineW(
+ /*IN*/ PCWSTR UNCServerName,
+ /*OUT*/ PHMACHINE phMachine);
+
+#ifdef UNICODE
+#define CM_Connect_Machine CM_Connect_MachineW
+#else
+#define CM_Connect_Machine CM_Connect_MachineA
+#endif /* UNICODE */
+
+/* FIXME: Obsolete CM_Create_DevNode */
+/* FIXME: Obsolete CM_Create_DevNodeEx */
+/* FIXME: Obsolete CM_Create_Range_List */
+/* FIXME: Obsolete CM_Delete_Class_Key */
+/* FIXME: Obsolete CM_Delete_Class_Key_Ex */
+/* FIXME: Obsolete CM_Delete_DevNode_Key */
+/* FIXME: Obsolete CM_Delete_DevNode_Key_Ex */
+/* FIXME: Obsolete CM_Delete_Range */
+/* FIXME: Obsolete CM_Detected_Resource_Conflict */
+/* FIXME: Obsolete CM_Detected_Resource_Conflict_Ex */
+/* FIXME: Obsolete CM_Disable_DevNode */
+/* FIXME: Obsolete CM_Disable_DevNodeEx */
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Disconnect_Machine(
+ /*IN*/ HMACHINE hMachine);
+
+/* FIXME: Obsolete CM_Enable_DevNode */
+/* FIXME: Obsolete CM_Enable_DevNodeEx */
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Enumerate_Classes(
+ /*IN*/ ULONG ulClassIndex,
+ /*OUT*/ LPGUID ClassGuid,
+ /*IN*/ ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Enumerate_Classes_Ex(
+ /*IN*/ ULONG ulClassIndex,
+ /*OUT*/ LPGUID ClassGuid,
+ /*IN*/ ULONG ulFlags,
+ /*IN*/ HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Enumerate_EnumeratorsA(
+ /*IN*/ ULONG ulEnumIndex,
+ /*OUT*/ PCHAR Buffer,
+ /*IN OUT*/ PULONG pulLength,
+ /*IN*/ ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Enumerate_Enumerators_ExA(
+ /*IN*/ ULONG ulEnumIndex,
+ /*OUT*/ PCHAR Buffer,
+ /*IN OUT*/ PULONG pulLength,
+ /*IN*/ ULONG ulFlags,
+ /*IN*/ HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Enumerate_Enumerators_ExW(
+ /*IN*/ ULONG ulEnumIndex,
+ /*OUT*/ PWCHAR Buffer,
+ /*IN OUT*/ PULONG pulLength,
+ /*IN*/ ULONG ulFlags,
+ /*IN*/ HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Enumerate_EnumeratorsW(
+ /*IN*/ ULONG ulEnumIndex,
+ /*OUT*/ PWCHAR Buffer,
+ /*IN OUT*/ PULONG pulLength,
+ /*IN*/ ULONG ulFlags);
+
+#ifdef UNICODE
+#define CM_Enumerate_Enumerators CM_Enumerate_EnumeratorsW
+#define CM_Enumerate_Enumerators_Ex CM_Enumerate_Enumerators_ExW
+#else
+#define CM_Enumerate_Enumerators CM_Enumerate_EnumeratorsA
+#define CM_Enumerate_Enumerators_Ex CM_Enumerate_Enumerators_ExW
+#endif /* UNICODE */
+
+/* FIXME: Obsolete CM_Find_Range */
+/* FIXME: Obsolete CM_First_Range */
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Free_Log_Conf(
+ /*IN*/ LOG_CONF lcLogConfToBeFreed,
+ /*IN*/ ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Free_Log_Conf_Ex(
+ /*IN*/ LOG_CONF lcLogConfToBeFreed,
+ /*IN*/ ULONG ulFlags,
+ /*IN*/ HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Free_Log_Conf_Handle(
+ /*IN*/ LOG_CONF lcLogConf);
+
+/* FIXME: Obsolete CM_Free_Range_List */
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Free_Res_Des(
+ /*OUT*/ PRES_DES prdResDes,
+ /*IN*/ RES_DES rdResDes,
+ /*IN*/ ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Free_Res_Des_Ex(
+ /*OUT*/ PRES_DES prdResDes,
+ /*IN*/ RES_DES rdResDes,
+ /*IN*/ ULONG ulFlags,
+ /*IN*/ HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Free_Res_Des_Handle(
+ /*IN*/ RES_DES rdResDes);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Free_Resource_Conflict_Handle(
+ /*IN*/ CONFLICT_LIST clConflictList);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Child(
+ /*OUT*/ PDEVINST pdnDevInst,
+ /*IN*/ DEVINST dnDevInst,
+ /*IN*/ ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Child_Ex(
+ /*OUT*/ PDEVINST pdnDevInst,
+ /*IN*/ DEVINST dnDevInst,
+ /*IN*/ ULONG ulFlags,
+ /*IN*/ HMACHINE hMachine);
+
+/* FIXME: Obsolete CM_Get_Class_Name */
+/* FIXME: Obsolete CM_Get_Class_Name_Ex */
+/* FIXME: Obsolete CM_Get_Class_Key_Name */
+/* FIXME: Obsolete CM_Get_Class_Key_Name_Ex */
+/* FIXME: Obsolete CM_Get_Class_Registry_Property */
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Depth(
+ /*OUT*/ PULONG pulDepth,
+ /*IN*/ DEVINST dnDevInst,
+ /*IN*/ ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Depth_Ex(
+ /*OUT*/ PULONG pulDepth,
+ /*IN*/ DEVINST dnDevInst,
+ /*IN*/ ULONG ulFlags,
+ /*IN*/ HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_IDA(
+ /*IN*/ DEVINST dnDevInst,
+ /*OUT*/ PCHAR Buffer,
+ /*IN*/ ULONG BufferLen,
+ /*IN*/ ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_ID_ExA(
+ /*IN*/ DEVINST dnDevInst,
+ /*OUT*/ PCHAR Buffer,
+ /*IN*/ ULONG BufferLen,
+ /*IN*/ ULONG ulFlags,
+ /*IN*/ HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_ID_ExW(
+ /*IN*/ DEVINST dnDevInst,
+ /*OUT*/ PWCHAR Buffer,
+ /*IN*/ ULONG BufferLen,
+ /*IN*/ ULONG ulFlags,
+ /*IN*/ HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_IDW(
+ /*IN*/ DEVINST dnDevInst,
+ /*OUT*/ PWCHAR Buffer,
+ /*IN*/ ULONG BufferLen,
+ /*IN*/ ULONG ulFlags);
+
+#ifdef UNICODE
+#define CM_Get_Device_ID CM_Get_Device_IDW
+#define CM_Get_Device_ID_Ex CM_Get_Device_ID_ExW
+#else
+#define CM_Get_Device_ID CM_Get_Device_IDA
+#define CM_Get_Device_ID_Ex CM_Get_Device_ID_ExW
+#endif /* UNICODE */
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_ID_ListA(
+ /*IN*/ PCSTR pszFilter, /*OPTIONAL*/
+ /*OUT*/ PCHAR Buffer,
+ /*IN*/ ULONG BufferLen,
+ /*IN*/ ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_ID_List_ExA(
+ /*IN*/ PCSTR pszFilter, /*OPTIONAL*/
+ /*OUT*/ PCHAR Buffer,
+ /*IN*/ ULONG BufferLen,
+ /*IN*/ ULONG ulFlags,
+ /*IN*/ HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_ID_List_ExW(
+ /*IN*/ PCWSTR pszFilter, /*OPTIONAL*/
+ /*OUT*/ PWCHAR Buffer,
+ /*IN*/ ULONG BufferLen,
+ /*IN*/ ULONG ulFlags,
+ /*IN*/ HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_ID_ListW(
+ /*IN*/ PCWSTR pszFilter, /*OPTIONAL*/
+ /*OUT*/ PWCHAR Buffer,
+ /*IN*/ ULONG BufferLen,
+ /*IN*/ ULONG ulFlags);
+
+#ifdef UNICODE
+#define CM_Get_Device_ID_List CM_Get_Device_ID_ListW
+#define CM_Get_Device_ID_List_Ex CM_Get_Device_ID_List_ExW
+#else
+#define CM_Get_Device_ID_List CM_Get_Device_ID_ListA
+#define CM_Get_Device_ID_List_Ex CM_Get_Device_ID_List_ExA
+#endif /* UNICODE */
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_ID_List_SizeA(
+ /*OUT*/ PULONG pulLen,
+ /*IN*/ PCSTR pszFilter, /*OPTIONAL*/
+ /*IN*/ ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_ID_List_Size_ExA(
+ /*OUT*/ PULONG pulLen,
+ /*IN*/ PCSTR pszFilter, /*OPTIONAL*/
+ /*IN*/ ULONG ulFlags,
+ /*IN*/ HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_ID_List_Size_ExW(
+ /*OUT*/ PULONG pulLen,
+ /*IN*/ PCWSTR pszFilter, /*OPTIONAL*/
+ /*IN*/ ULONG ulFlags,
+ /*IN*/ HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_ID_List_SizeW(
+ /*OUT*/ PULONG pulLen,
+ /*IN*/ PCWSTR pszFilter, /*OPTIONAL*/
+ /*IN*/ ULONG ulFlags);
+
+#ifdef UNICODE
+#define CM_Get_Device_ID_List_Size CM_Get_Device_ID_List_SizeW
+#define CM_Get_Device_ID_List_Size_Ex CM_Get_Device_ID_List_Size_ExW
+#else
+#define CM_Get_Device_ID_List_Size CM_Get_Device_ID_List_SizeA
+#define CM_Get_Device_ID_List_Size_Ex CM_Get_Device_ID_List_Size_ExA
+#endif /* UNICODE */
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_ID_Size(
+ /*OUT*/ PULONG pulLen,
+ /*IN*/ DEVINST dnDevInst,
+ /*IN*/ ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Device_ID_Size_Ex(
+ /*OUT*/ PULONG pulLen,
+ /*IN*/ DEVINST dnDevInst,
+ /*IN*/ ULONG ulFlags,
+ /*IN*/ HMACHINE hMachine);
+
+/* FIXME: Obsolete CM_Get_Device_Interface_Alias */
+/* FIXME: Obsolete CM_Get_Device_Interface_Alias_Ex */
+/* FIXME: Obsolete CM_Get_Device_Interface_List */
+/* FIXME: Obsolete CM_Get_Device_Interface_List_Ex */
+/* FIXME: Obsolete CM_Get_Device_Interface_List_Size */
+/* FIXME: Obsolete CM_Get_Device_Interface_List_Size_Ex */
+/* FIXME: Obsolete CM_Get_DevNode_Custom_Property */
+/* FIXME: Obsolete CM_Get_DevNode_Custom_Property_Ex */
+/* FIXME: Obsolete CM_Get_DevNode_Registry_Property */
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_DevNode_Status(
+ /*OUT*/ PULONG pulStatus,
+ /*OUT*/ PULONG pulProblemNumber,
+ /*IN*/ DEVINST dnDevInst,
+ /*IN*/ ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_DevNode_Status_Ex(
+ /*OUT*/ PULONG pulStatus,
+ /*OUT*/ PULONG pulProblemNumber,
+ /*IN*/ DEVINST dnDevInst,
+ /*IN*/ ULONG ulFlags,
+ /*IN*/ HMACHINE hMachine);
+
+#define CM_Get_DevInst_Status CM_Get_DevNode_Status
+#define CM_Get_DevInst_Status_Ex CM_Get_DevNode_Status_Ex
+
+/* CM_Get_First_Log_Conf.ulFlags constants */
+#define BASIC_LOG_CONF 0x00000000 /* Specifies the req list. */
+#define FILTERED_LOG_CONF 0x00000001 /* Specifies the filtered req list. */
+#define ALLOC_LOG_CONF 0x00000002 /* Specifies the Alloc Element. */
+#define BOOT_LOG_CONF 0x00000003 /* Specifies the RM Alloc Element. */
+#define FORCED_LOG_CONF 0x00000004 /* Specifies the Forced Log Conf */
+#define OVERRIDE_LOG_CONF 0x00000005 /* Specifies the Override req list. */
+#define NUM_LOG_CONF 0x00000006 /* Number of Log Conf type */
+#define LOG_CONF_BITS 0x00000007 /* The bits of the log conf type. */
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_First_Log_Conf(
+ /*OUT*/ PLOG_CONF plcLogConf, /*OPTIONAL*/
+ /*IN*/ DEVINST dnDevInst,
+ /*IN*/ ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_First_Log_Conf_Ex(
+ /*OUT*/ PLOG_CONF plcLogConf, /*OPTIONAL*/
+ /*IN*/ DEVINST dnDevInst,
+ /*IN*/ ULONG ulFlags,
+ /*IN*/ HMACHINE hMachine);
+
+/* FIXME: Obsolete CM_Get_Global_State */
+/* FIXME: Obsolete CM_Get_Global_State_Ex */
+/* FIXME: Obsolete CM_Get_Hardware_Profile_Info */
+/* FIXME: Obsolete CM_Get_Hardware_Profile_Info_Ex */
+/* FIXME: Obsolete CM_Get_HW_Prof_Flags */
+/* FIXME: Obsolete CM_Get_HW_Prof_Flags_Ex */
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Log_Conf_Priority(
+ /*IN*/ LOG_CONF lcLogConf,
+ /*OUT*/ PPRIORITY pPriority,
+ /*IN*/ ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Log_Conf_Priority_Ex(
+ /*IN*/ LOG_CONF lcLogConf,
+ /*OUT*/ PPRIORITY pPriority,
+ /*IN*/ ULONG ulFlags,
+ /*IN*/ HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Next_Log_Conf(
+ /*OUT*/ PLOG_CONF plcLogConf, /*OPTIONAL*/
+ /*IN*/ LOG_CONF lcLogConf,
+ /*IN*/ ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Next_Log_Conf_Ex(
+ /*OUT*/ PLOG_CONF plcLogConf, /*OPTIONAL*/
+ /*IN*/ LOG_CONF lcLogConf,
+ /*IN*/ ULONG ulFlags,
+ /*IN*/ HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Next_Res_Des(
+ /*OUT*/ PRES_DES prdResDes,
+ /*IN*/ RES_DES rdResDes,
+ /*IN*/ RESOURCEID ForResource,
+ /*OUT*/ PRESOURCEID pResourceID,
+ /*IN*/ ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Next_Res_Des_Ex(
+ /*OUT*/ PRES_DES prdResDes,
+ /*IN*/ RES_DES rdResDes,
+ /*IN*/ RESOURCEID ForResource,
+ /*OUT*/ PRESOURCEID pResourceID,
+ /*IN*/ ULONG ulFlags,
+ /*IN*/ HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Parent(
+ /*OUT*/ PDEVINST pdnDevInst,
+ /*IN*/ DEVINST dnDevInst,
+ /*IN*/ ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Parent_Ex(
+ /*OUT*/ PDEVINST pdnDevInst,
+ /*IN*/ DEVINST dnDevInst,
+ /*IN*/ ULONG ulFlags,
+ /*IN*/ HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Res_Des_Data(
+ /*IN*/ RES_DES rdResDes,
+ /*OUT*/ PVOID Buffer,
+ /*IN*/ ULONG BufferLen,
+ /*IN*/ ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Res_Des_Data_Ex(
+ /*IN*/ RES_DES rdResDes,
+ /*OUT*/ PVOID Buffer,
+ /*IN*/ ULONG BufferLen,
+ /*IN*/ ULONG ulFlags,
+ /*IN*/ HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Res_Des_Data_Size(
+ /*OUT*/ PULONG pulSize,
+ /*IN*/ RES_DES rdResDes,
+ /*IN*/ ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Res_Des_Data_Size_Ex(
+ /*OUT*/ PULONG pulSize,
+ /*IN*/ RES_DES rdResDes,
+ /*IN*/ ULONG ulFlags,
+ /*IN*/ HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Resource_Conflict_Count(
+ /*IN*/ CONFLICT_LIST clConflictList,
+ /*OUT*/ PULONG pulCount);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Resource_Conflict_DetailsA(
+ /*IN*/ CONFLICT_LIST clConflictList,
+ /*IN*/ ULONG ulIndex,
+ /*IN OUT*/ PCONFLICT_DETAILS_A pConflictDetails);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Resource_Conflict_DetailsW(
+ /*IN*/ CONFLICT_LIST clConflictList,
+ /*IN*/ ULONG ulIndex,
+ /*IN OUT*/ PCONFLICT_DETAILS_W pConflictDetails);
+
+#ifdef UNICODE
+#define CM_Get_Resource_Conflict_Details CM_Get_Resource_Conflict_DetailsW
+#else
+#define CM_Get_Resource_Conflict_Details CM_Get_Resource_Conflict_DetailsA
+#endif /* UNICODE */
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Sibling(
+ /*OUT*/ PDEVINST pdnDevInst,
+ /*IN*/ DEVINST DevInst,
+ /*IN*/ ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Get_Sibling_Ex(
+ /*OUT*/ PDEVINST pdnDevInst,
+ /*IN*/ DEVINST DevInst,
+ /*IN*/ ULONG ulFlags,
+ /*IN*/ HMACHINE hMachine);
+
+CMAPI
+WORD
+WINAPI
+CM_Get_Version(
+ VOID);
+
+CMAPI
+WORD
+WINAPI
+CM_Get_Version_Ex(
+ /*IN*/ HMACHINE hMachine);
+
+/* FIXME: Obsolete CM_Intersect_Range_List */
+/* FIXME: Obsolete CM_Invert_Range_List */
+/* FIXME: Obsolete CM_Is_Dock_Station_Present */
+/* FIXME: Obsolete CM_Is_Dock_Station_Present_Ex */
+
+/* CM_Locate_DevNode.ulFlags constants */
+#define CM_LOCATE_DEVNODE_NORMAL 0x00000000
+#define CM_LOCATE_DEVNODE_PHANTOM 0x00000001
+#define CM_LOCATE_DEVNODE_CANCELREMOVE 0x00000002
+#define CM_LOCATE_DEVNODE_NOVALIDATION 0x00000004
+#define CM_LOCATE_DEVNODE_BITS 0x00000007
+
+#define CM_LOCATE_DEVINST_NORMAL CM_LOCATE_DEVNODE_NORMAL
+#define CM_LOCATE_DEVINST_PHANTOM CM_LOCATE_DEVNODE_PHANTOM
+#define CM_LOCATE_DEVINST_CANCELREMOVE CM_LOCATE_DEVNODE_CANCELREMOVE
+#define CM_LOCATE_DEVINST_NOVALIDATION CM_LOCATE_DEVNODE_NOVALIDATION
+#define CM_LOCATE_DEVINST_BITS CM_LOCATE_DEVNODE_BITS
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Locate_DevNodeA(
+ /*OUT*/ PDEVINST pdnDevInst,
+ /*IN*/ DEVINSTID_A pDeviceID, /*OPTIONAL*/
+ /*IN*/ ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Locate_DevNode_ExA(
+ /*OUT*/ PDEVINST pdnDevInst,
+ /*IN*/ DEVINSTID_A pDeviceID, /*OPTIONAL*/
+ /*IN*/ ULONG ulFlags,
+ /*IN*/ HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Locate_DevNode_ExW(
+ /*OUT*/ PDEVINST pdnDevInst,
+ /*IN*/ DEVINSTID_W pDeviceID, /*OPTIONAL*/
+ /*IN*/ ULONG ulFlags,
+ /*IN*/ HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Locate_DevNodeW(
+ /*OUT*/ PDEVINST pdnDevInst,
+ /*IN*/ DEVINSTID_W pDeviceID, /*OPTIONAL*/
+ /*IN*/ ULONG ulFlags);
+
+#define CM_Locate_DevInstA CM_Locate_DevNodeA
+#define CM_Locate_DevInstW CM_Locate_DevNodeW
+#define CM_Locate_DevInst_ExA CM_Locate_DevNode_ExA
+#define CM_Locate_DevInst_ExW CM_Locate_DevNode_ExW
+
+#ifdef UNICODE
+#define CM_Locate_DevNode CM_Locate_DevNodeW
+#define CM_Locate_DevInst CM_Locate_DevNodeW
+#define CM_Locate_DevNode_Ex CM_Locate_DevNode_ExW
+#define CM_Locate_DevInst_Ex CM_Locate_DevNode_ExW
+#else
+#define CM_Locate_DevNode CM_Locate_DevNodeA
+#define CM_Locate_DevInst CM_Locate_DevNodeA
+#define CM_Locate_DevNode_Ex CM_Locate_DevNode_ExA
+#define CM_Locate_DevInst_Ex CM_Locate_DevNode_ExA
+#endif /* UNICODE */
+
+/* FIXME: Obsolete CM_Merge_Range_List */
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Modify_Res_Des(
+ /*OUT*/ PRES_DES prdResDes,
+ /*IN*/ RES_DES rdResDes,
+ /*IN*/ RESOURCEID ResourceID,
+ /*IN*/ PCVOID ResourceData,
+ /*IN*/ ULONG ResourceLen,
+ /*IN*/ ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Modify_Res_Des_Ex(
+ /*OUT*/ PRES_DES prdResDes,
+ /*IN*/ RES_DES rdResDes,
+ /*IN*/ RESOURCEID ResourceID,
+ /*IN*/ PCVOID ResourceData,
+ /*IN*/ ULONG ResourceLen,
+ /*IN*/ ULONG ulFlags,
+ /*IN*/ HMACHINE hMachine);
+
+/* FIXME: Obsolete CM_Move_DevNode */
+/* FIXME: Obsolete CM_Move_DevNode_Ex */
+/* FIXME: Obsolete CM_Next_Range */
+/* FIXME: Obsolete CM_Open_Class_Key */
+/* FIXME: Obsolete CM_Open_Class_Key_Ex */
+/* FIXME: Obsolete CM_Open_DevNode_Key */
+/* FIXME: Obsolete CM_Open_DevNode_Key_Ex */
+
+/* CM_Query_And_Remove_SubTree.ulFlags constants */
+#define CM_REMOVE_UI_OK 0x00000000
+#define CM_REMOVE_UI_NOT_OK 0x00000001
+#define CM_REMOVE_NO_RESTART 0x00000002
+#define CM_REMOVE_BITS 0x00000003
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Query_And_Remove_SubTreeA(
+ /*IN*/ DEVINST dnAncestor,
+ /*OUT*/ PPNP_VETO_TYPE pVetoType,
+ /*OUT*/ LPSTR pszVetoName,
+ /*IN*/ ULONG ulNameLength,
+ /*IN*/ ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Query_And_Remove_SubTreeW(
+ /*IN*/ DEVINST dnAncestor,
+ /*OUT*/ PPNP_VETO_TYPE pVetoType,
+ /*OUT*/ LPWSTR pszVetoName,
+ /*IN*/ ULONG ulNameLength,
+ /*IN*/ ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Query_And_Remove_SubTree_ExA(
+ /*IN*/ DEVINST dnAncestor,
+ /*OUT*/ PPNP_VETO_TYPE pVetoType,
+ /*OUT*/ LPSTR pszVetoName,
+ /*IN*/ ULONG ulNameLength,
+ /*IN*/ ULONG ulFlags,
+ /*IN*/ HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Query_And_Remove_SubTree_ExW(
+ /*IN*/ DEVINST dnAncestor,
+ /*OUT*/ PPNP_VETO_TYPE pVetoType,
+ /*OUT*/ LPWSTR pszVetoName,
+ /*IN*/ ULONG ulNameLength,
+ /*IN*/ ULONG ulFlags,
+ /*IN*/ HMACHINE hMachine);
+
+/* FIXME: Obsolete CM_Query_Arbitrator_Free_Data */
+/* FIXME: Obsolete CM_Query_Arbitrator_Free_Data_Ex */
+/* FIXME: Obsolete CM_Query_Arbitrator_Free_Size */
+/* FIXME: Obsolete CM_Query_Arbitrator_Free_Size_Ex */
+/* FIXME: Obsolete CM_Query_Arbitrator_Free_Size_Ex */
+/* FIXME: Obsolete CM_Query_Remove_SubTree */
+/* FIXME: Obsolete CM_Query_Remove_SubTree_Ex */
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Query_Resource_Conflict_List(
+ /*OUT*/ PCONFLICT_LIST pclConflictList,
+ /*IN*/ DEVINST dnDevInst,
+ /*IN*/ RESOURCEID ResourceID,
+ /*IN*/ PCVOID ResourceData,
+ /*IN*/ ULONG ResourceLen,
+ /*IN*/ ULONG ulFlags,
+ /*IN*/ HMACHINE hMachine);
+
+/* CM_Reenumerate_DevNode.ulFlags constants */
+#define CM_REENUMERATE_NORMAL 0x00000000
+#define CM_REENUMERATE_SYNCHRONOUS 0x00000001
+#define CM_REENUMERATE_RETRY_INSTALLATION 0x00000002
+#define CM_REENUMERATE_ASYNCHRONOUS 0x00000004
+#define CM_REENUMERATE_BITS 0x00000007
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Reenumerate_DevNode(
+ /*IN*/ DEVINST dnDevInst,
+ /*IN*/ ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Reenumerate_DevNode_Ex(
+ /*IN*/ DEVINST dnDevInst,
+ /*IN*/ ULONG ulFlags,
+ /*IN*/ HMACHINE hMachine);
+
+#define CM_Reenumerate_DevInst CM_Reenumerate_DevNode
+#define CM_Reenumerate_DevInst_Ex CM_Reenumerate_DevNode_Ex
+
+/* FIXME: Obsolete CM_Register_Device_Driver */
+/* FIXME: Obsolete CM_Register_Device_Driver_Ex */
+/* FIXME: Obsolete CM_Register_Device_Interface */
+/* FIXME: Obsolete CM_Register_Device_Interface_Ex */
+/* FIXME: Obsolete CM_Remove_SubTree */
+/* FIXME: Obsolete CM_Remove_SubTree_Ex */
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Request_Device_EjectA(
+ /*IN*/ DEVINST dnDevInst,
+ /*OUT*/ PPNP_VETO_TYPE pVetoType,
+ /*OUT*/ LPSTR pszVetoName,
+ /*IN*/ ULONG ulNameLength,
+ /*IN*/ ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Request_Device_Eject_ExW(
+ /*IN*/ DEVINST dnDevInst,
+ /*OUT*/ PPNP_VETO_TYPE pVetoType,
+ /*OUT*/ LPWSTR pszVetoName,
+ /*IN*/ ULONG ulNameLength,
+ /*IN*/ ULONG ulFlags,
+ /*IN*/ HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Request_Device_Eject_ExA(
+ /*IN*/ DEVINST dnDevInst,
+ /*OUT*/ PPNP_VETO_TYPE pVetoType,
+ /*OUT*/ LPSTR pszVetoName,
+ /*IN*/ ULONG ulNameLength,
+ /*IN*/ ULONG ulFlags,
+ /*IN*/ HMACHINE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Request_Device_EjectW(
+ /*IN*/ DEVINST dnDevInst,
+ /*OUT*/ PPNP_VETO_TYPE pVetoType,
+ /*OUT*/ LPWSTR pszVetoName,
+ /*IN*/ ULONG ulNameLength,
+ /*IN*/ ULONG ulFlags);
+
+#ifdef UNICODE
+#define CM_Request_Device_Eject CM_Request_Device_EjectW
+#define CM_Request_Device_Eject_Ex CM_Request_Device_Eject_ExW
+#else
+#define CM_Request_Device_Eject CM_Request_Device_EjectA
+#define CM_Request_Device_Eject_Ex CM_Request_Device_Eject_ExA
+#endif /* UNICODE */
+
+/* FIXME: Obsolete CM_Request_Eject_PC */
+/* FIXME: Obsolete CM_Request_Eject_PC_Ex */
+/* FIXME: Obsolete CM_Run_Detection */
+/* FIXME: Obsolete CM_Run_Detection_Ex */
+/* FIXME: Obsolete CM_Set_Class_Registry_Property */
+/* FIXME: Obsolete CM_Set_DevNode_Problem */
+/* FIXME: Obsolete CM_Set_DevNode_Problem_Ex */
+/* FIXME: Obsolete CM_Set_DevNode_Registry_Property */
+/* FIXME: Obsolete CM_Set_DevNode_Registry_Property_Ex */
+/* FIXME: Obsolete CM_Set_HW_Prof */
+/* FIXME: Obsolete CM_Set_HW_Prof_Ex */
+/* FIXME: Obsolete CM_Set_HW_Prof_Flags */
+/* FIXME: Obsolete CM_Set_HW_Prof_Flags_Ex */
+/* FIXME: Obsolete CM_Setup_DevNode */
+/* FIXME: Obsolete CM_Setup_DevNode_Ex */
+/* FIXME: Obsolete CM_Test_Range_Available */
+/* FIXME: Obsolete CM_Uninstall_DevNode */
+/* FIXME: Obsolete CM_Uninstall_DevNode_Ex */
+/* FIXME: Obsolete CM_Unregister_Device_Interface */
+/* FIXME: Obsolete CM_Unregister_Device_Interface_Ex */
+
+#define CM_WaitNoPendingInstallEvents CMP_WaitNoPendingInstallEvents
+
+CMAPI
+DWORD
+WINAPI
+CMP_WaitNoPendingInstallEvents(
+ /*IN*/ DWORD dwTimeout);
+
+#include <poppack.h>
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __CFGMGR32_H */
diff --git a/tcc/include/winapi/ddk/d4drvif.h b/tcc/include/winapi/ddk/d4drvif.h
new file mode 100644
index 0000000..c10e781
--- /dev/null
+++ b/tcc/include/winapi/ddk/d4drvif.h
@@ -0,0 +1,104 @@
+/*
+ * d4drvif.h
+ *
+ * DOT4 driver IOCTL interface
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __D4DRVIF_H
+#define __D4DRVIF_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+#include "d4iface.h"
+
+#define FILE_DEVICE_DOT4 0x3a
+#define IOCTL_DOT4_USER_BASE 2049
+
+#define IOCTL_DOT4_ADD_ACTIVITY_BROADCAST \
+ CTL_CODE(FILE_DEVICE_DOT4, IOCTL_DOT4_USER_BASE + 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_DOT4_CLOSE_CHANNEL \
+ CTL_CODE(FILE_DEVICE_DOT4, IOCTL_DOT4_USER_BASE + 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_DOT4_CREATE_SOCKET \
+ CTL_CODE(FILE_DEVICE_DOT4, IOCTL_DOT4_USER_BASE + 7, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
+
+#define IOCTL_DOT4_DESTROY_SOCKET \
+ CTL_CODE(FILE_DEVICE_DOT4, IOCTL_DOT4_USER_BASE + 9, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
+
+#define IOCTL_DOT4_OPEN_CHANNEL \
+ CTL_CODE(FILE_DEVICE_DOT4, IOCTL_DOT4_USER_BASE + 0, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
+
+#define IOCTL_DOT4_READ \
+ CTL_CODE(FILE_DEVICE_DOT4, IOCTL_DOT4_USER_BASE + 2, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
+
+#define IOCTL_DOT4_REMOVE_ACTIVITY_BROADCAST \
+ CTL_CODE(FILE_DEVICE_DOT4, IOCTL_DOT4_USER_BASE + 5, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_DOT4_WAIT_ACTIVITY_BROADCAST \
+ CTL_CODE(FILE_DEVICE_DOT4, IOCTL_DOT4_USER_BASE + 6, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
+
+#define IOCTL_DOT4_WAIT_FOR_CHANNEL \
+ CTL_CODE(FILE_DEVICE_DOT4, IOCTL_DOT4_USER_BASE + 8, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
+
+#define IOCTL_DOT4_WRITE \
+ CTL_CODE(FILE_DEVICE_DOT4, IOCTL_DOT4_USER_BASE + 3, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
+
+
+#define MAX_SERVICE_LENGTH 40
+
+typedef struct _DOT4_DC_CREATE_DATA {
+ unsigned char bPsid;
+ CHAR pServiceName[MAX_SERVICE_LENGTH + 1];
+ unsigned char bType;
+ ULONG ulBufferSize;
+ USHORT usMaxHtoPPacketSize;
+ USHORT usMaxPtoHPacketSize;
+ unsigned char bHsid;
+} DOT4_DC_CREATE_DATA, *PDOT4_DC_CREATE_DATA;
+
+typedef struct _DOT4_DC_DESTROY_DATA {
+ unsigned char bHsid;
+} DOT4_DC_DESTROY_DATA, *PDOT4_DC_DESTROY_DATA;
+
+typedef struct _DOT4_DC_OPEN_DATA {
+ unsigned char bHsid;
+ unsigned char fAddActivity;
+ CHANNEL_HANDLE hChannelHandle;
+} DOT4_DC_OPEN_DATA, *PDOT4_DC_OPEN_DATA;
+
+typedef struct _DOT4_DRIVER_CMD {
+ CHANNEL_HANDLE hChannelHandle;
+ ULONG ulSize;
+ ULONG ulOffset;
+ ULONG ulTimeout;
+} DOT4_DRIVER_CMD, *PDOT4_DRIVER_CMD;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __D4DRVIF_H */
diff --git a/tcc/include/winapi/ddk/d4iface.h b/tcc/include/winapi/ddk/d4iface.h
new file mode 100644
index 0000000..245bc4c
--- /dev/null
+++ b/tcc/include/winapi/ddk/d4iface.h
@@ -0,0 +1,84 @@
+/*
+ * d4iface.h
+ *
+ * DOT4 interface
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __D4IFACE_H
+#define __D4IFACE_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+
+#define DOT4_MAX_CHANNELS 128
+#define NO_TIMEOUT 0
+
+#define DOT4_CHANNEL 0
+#define HP_MESSAGE_PROCESSOR 1
+#define PRINTER_CHANNEL 2
+#define SCANNER_CHANNEL 4
+#define MIO_COMMAND_PROCESSOR 5
+#define ECHO_CHANNEL 6
+#define FAX_SEND_CHANNEL 7
+#define FAX_RECV_CHANNEL 8
+#define DIAGNOSTIC_CHANNEL 9
+#define HP_RESERVED 10
+#define IMAGE_DOWNLOAD 11
+#define HOST_DATASTORE_UPLOAD 12
+#define HOST_DATASTORE_DOWNLOAD 13
+#define CONFIG_UPLOAD 14
+#define CONFIG_DOWNLOAD 15
+
+#define STREAM_TYPE_CHANNEL 1
+#define PACKET_TYPE_CHANNEL 2
+
+/* DOT4_ACTIVITY.ulMessage flags */
+#define DOT4_STREAM_RECEIVED 0x100
+#define DOT4_STREAM_CREDITS 0x101
+#define DOT4_MESSAGE_RECEIVED 0x102
+#define DOT4_DISCONNECT 0x103
+#define DOT4_CHANNEL_CLOSED 0x105
+
+typedef unsigned long CHANNEL_HANDLE, *PCHANNEL_HANDLE;
+
+typedef struct _DOT4_ACTIVITY {
+ ULONG ulMessage;
+ ULONG ulByteCount;
+ CHANNEL_HANDLE hChannel;
+} DOT4_ACTIVITY, *PDOT4_ACTIVITY;
+
+typedef struct _DOT4_WMI_XFER_INFO {
+ ULONG ulStreamBytesWritten;
+ ULONG ulStreamBytesRead;
+ ULONG ulPacketBytesWritten;
+ ULONG ulPacketBytesRead;
+} DOT4_WMI_XFER_INFO, *PDOT4_WMI_XFER_INFO;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __D4IFACE_H */
diff --git a/tcc/include/winapi/ddk/ddkmapi.h b/tcc/include/winapi/ddk/ddkmapi.h
new file mode 100644
index 0000000..7772b34
--- /dev/null
+++ b/tcc/include/winapi/ddk/ddkmapi.h
@@ -0,0 +1,334 @@
+/*
+ * ddkmapi.h
+ *
+ * DirectDraw support for DxApi function
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __DDKMAPI_H
+#define __DDKMAPI_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+
+#if defined(_DXAPI_)
+ #define DXAPI DECLSPEC_EXPORT
+#else
+ #define DXAPI DECLSPEC_IMPORT
+#endif
+
+DXAPI
+DWORD
+FAR PASCAL
+DxApi(
+ /*IN*/ DWORD dwFunctionNum,
+ /*IN*/ LPVOID lpvInBuffer,
+ /*IN*/ DWORD cbInBuffer,
+ /*OUT*/ LPVOID lpvOutBuffer,
+ /*OUT*/ DWORD cbOutBuffer);
+
+typedef DWORD (FAR PASCAL *LPDXAPI)(
+ DWORD dwFunctionNum,
+ LPVOID lpvInBuffer,
+ DWORD cbInBuffer,
+ LPVOID lpvOutBuffer,
+ DWORD cbOutBuffer);
+
+
+#define DXAPI_MAJORVERSION 1
+#define DXAPI_MINORVERSION 0
+
+#define DD_FIRST_DXAPI 0x500
+
+#define DD_DXAPI_GETVERSIONNUMBER (DD_FIRST_DXAPI)
+#define DD_DXAPI_CLOSEHANDLE (DD_FIRST_DXAPI+1)
+#define DD_DXAPI_OPENDIRECTDRAW (DD_FIRST_DXAPI+2)
+#define DD_DXAPI_OPENSURFACE (DD_FIRST_DXAPI+3)
+#define DD_DXAPI_OPENVIDEOPORT (DD_FIRST_DXAPI+4)
+#define DD_DXAPI_GETKERNELCAPS (DD_FIRST_DXAPI+5)
+#define DD_DXAPI_GET_VP_FIELD_NUMBER (DD_FIRST_DXAPI+6)
+#define DD_DXAPI_SET_VP_FIELD_NUMBER (DD_FIRST_DXAPI+7)
+#define DD_DXAPI_SET_VP_SKIP_FIELD (DD_FIRST_DXAPI+8)
+#define DD_DXAPI_GET_SURFACE_STATE (DD_FIRST_DXAPI+9)
+#define DD_DXAPI_SET_SURFACE_STATE (DD_FIRST_DXAPI+10)
+#define DD_DXAPI_LOCK (DD_FIRST_DXAPI+11)
+#define DD_DXAPI_FLIP_OVERLAY (DD_FIRST_DXAPI+12)
+#define DD_DXAPI_FLIP_VP (DD_FIRST_DXAPI+13)
+#define DD_DXAPI_GET_CURRENT_VP_AUTOFLIP_SURFACE (DD_FIRST_DXAPI+14)
+#define DD_DXAPI_GET_LAST_VP_AUTOFLIP_SURFACE (DD_FIRST_DXAPI+15)
+#define DD_DXAPI_REGISTER_CALLBACK (DD_FIRST_DXAPI+16)
+#define DD_DXAPI_UNREGISTER_CALLBACK (DD_FIRST_DXAPI+17)
+#define DD_DXAPI_GET_POLARITY (DD_FIRST_DXAPI+18)
+#define DD_DXAPI_OPENVPCAPTUREDEVICE (DD_FIRST_DXAPI+19)
+#define DD_DXAPI_ADDVPCAPTUREBUFFER (DD_FIRST_DXAPI+20)
+#define DD_DXAPI_FLUSHVPCAPTUREBUFFERS (DD_FIRST_DXAPI+21)
+
+
+typedef struct _DDCAPBUFFINFO {
+ DWORD dwFieldNumber;
+ DWORD bPolarity;
+ LARGE_INTEGER liTimeStamp;
+ DWORD ddRVal;
+} DDCAPBUFFINFO, FAR * LPDDCAPBUFFINFO;
+
+/* DDADDVPCAPTUREBUFF.dwFlags constants */
+#define DDADDBUFF_SYSTEMMEMORY 0x0001
+#define DDADDBUFF_NONLOCALVIDMEM 0x0002
+#define DDADDBUFF_INVERT 0x0004
+
+typedef struct _DDADDVPCAPTUREBUFF {
+ HANDLE hCapture;
+ DWORD dwFlags;
+ PMDL pMDL;
+ PKEVENT pKEvent;
+ LPDDCAPBUFFINFO lpBuffInfo;
+} DDADDVPCAPTUREBUFF, FAR * LPDDADDVPCAPTUREBUFF;
+
+typedef struct _DDCLOSEHANDLE {
+ HANDLE hHandle;
+} DDCLOSEHANDLE, FAR *LPDDCLOSEHANDLE;
+
+typedef struct _DDFLIPOVERLAY {
+ HANDLE hDirectDraw;
+ HANDLE hCurrentSurface;
+ HANDLE hTargetSurface;
+ DWORD dwFlags;
+} DDFLIPOVERLAY, FAR *LPDDFLIPOVERLAY;
+
+typedef struct _DDFLIPVIDEOPORT {
+ HANDLE hDirectDraw;
+ HANDLE hVideoPort;
+ HANDLE hCurrentSurface;
+ HANDLE hTargetSurface;
+ DWORD dwFlags;
+} DDFLIPVIDEOPORT, FAR *LPDDFLIPVIDEOPORT;
+
+typedef struct _DDGETAUTOFLIPIN {
+ HANDLE hDirectDraw;
+ HANDLE hVideoPort;
+} DDGETAUTOFLIPIN, FAR *LPDDGETAUTOFLIPIN;
+
+typedef struct _DDGETAUTOFLIPOUT {
+ DWORD ddRVal;
+ HANDLE hVideoSurface;
+ HANDLE hVBISurface;
+ BOOL bPolarity;
+} DDGETAUTOFLIPOUT, FAR *LPDDGETAUTOFLIPOUT;
+
+typedef struct _DDGETPOLARITYIN {
+ HANDLE hDirectDraw;
+ HANDLE hVideoPort;
+} DDGETPOLARITYIN, FAR *LPDDGETPOLARITYIN;
+
+typedef struct _DDGETPOLARITYOUT {
+ DWORD ddRVal;
+ BOOL bPolarity;
+} DDGETPOLARITYOUT, FAR *LPDDGETPOLARITYOUT;
+
+typedef struct _DDGETSURFACESTATEIN {
+ HANDLE hDirectDraw;
+ HANDLE hSurface;
+} DDGETSURFACESTATEIN, FAR *LPDDGETSURFACESTATEIN;
+
+/* DDGETSURFACESTATEOUT.dwStateCaps/dwStateStatus constants */
+#define DDSTATE_BOB 0x0001
+#define DDSTATE_WEAVE 0x0002
+#define DDSTATE_EXPLICITLY_SET 0x0004
+#define DDSTATE_SOFTWARE_AUTOFLIP 0x0008
+#define DDSTATE_SKIPEVENFIELDS 0x0010
+
+typedef struct _DDGETSURFACESTATEOUT {
+ DWORD ddRVal;
+ DWORD dwStateCaps;
+ DWORD dwStateStatus;
+} DDGETSURFACESTATEOUT, FAR *LPDDGETSURFACESTATEOUT;
+
+typedef struct _DDGETFIELDNUMIN {
+ HANDLE hDirectDraw;
+ HANDLE hVideoPort;
+} DDGETFIELDNUMIN, FAR *LPDDGETFIELDNUMIN;
+
+typedef struct _DDGETFIELDNUMOUT {
+ DWORD ddRVal;
+ DWORD dwFieldNum;
+} DDGETFIELDNUMOUT, FAR *LPDDGETFIELDNUMOUT;
+
+typedef struct _DDGETKERNELCAPSOUT {
+ DWORD ddRVal;
+ DWORD dwCaps;
+ DWORD dwIRQCaps;
+} DDGETKERNELCAPSOUT, FAR *LPDDGETKERNELCAPSOUT;
+
+typedef struct _DDGETVERSIONNUMBER {
+ DWORD ddRVal;
+ DWORD dwMajorVersion;
+ DWORD dwMinorVersion;
+} DDGETVERSIONNUMBER, FAR *LPDDGETVERSIONNUMBER;
+
+typedef struct _DDLOCKIN {
+ HANDLE hDirectDraw;
+ HANDLE hSurface;
+} DDLOCKIN, FAR *LPDDLOCKIN;
+
+typedef struct _DDLOCKOUT {
+ DWORD ddRVal;
+ DWORD dwSurfHeight;
+ DWORD dwSurfWidth;
+ LONG lSurfPitch;
+ PVOID lpSurface;
+ DWORD SurfaceCaps;
+ DWORD dwFormatFlags;
+ DWORD dwFormatFourCC;
+ DWORD dwFormatBitCount;
+ _ANONYMOUS_UNION union {
+ DWORD dwRBitMask;
+ DWORD dwYBitMask;
+ } DUMMYUNIONNAME;
+ _ANONYMOUS_UNION union {
+ DWORD dwGBitMask;
+ DWORD dwUBitMask;
+ } DUMMYUNIONNAME2;
+ _ANONYMOUS_UNION union {
+ DWORD dwBBitMask;
+ DWORD dwVBitMask;
+ } DUMMYUNIONNAME3;
+} DDLOCKOUT, FAR *LPDDLOCKOUT;
+
+/* LPDD_NOTIFYCALLBACK.dwFlags constants */
+#define DDNOTIFY_DISPLAY_VSYNC 0x0001
+#define DDNOTIFY_VP_VSYNC 0x0002
+#define DDNOTIFY_VP_LINE 0x0004
+#define DDNOTIFY_PRERESCHANGE 0x0008
+#define DDNOTIFY_POSTRESCHANGE 0x0010
+#define DDNOTIFY_PREDOSBOX 0x0020
+#define DDNOTIFY_POSTDOSBOX 0x0040
+#define DDNOTIFY_CLOSEDIRECTDRAW 0x0080
+#define DDNOTIFY_CLOSESURFACE 0x0100
+#define DDNOTIFY_CLOSEVIDEOPORT 0x0200
+#define DDNOTIFY_CLOSECAPTURE 0x0400
+
+typedef ULONG (FAR PASCAL *LPDD_NOTIFYCALLBACK)(
+ DWORD dwFlags,
+ PVOID pContext,
+ DWORD dwParam1,
+ DWORD dwParam2);
+
+typedef struct _DDOPENDIRECTDRAWIN {
+ ULONG_PTR dwDirectDrawHandle;
+ LPDD_NOTIFYCALLBACK pfnDirectDrawClose;
+ PVOID pContext;
+} DDOPENDIRECTDRAWIN, FAR *LPDDOPENDIRECTDRAWIN;
+
+typedef struct _DDOPENDIRECTDRAWOUT {
+ DWORD ddRVal;
+ HANDLE hDirectDraw;
+} DDOPENDIRECTDRAWOUT, FAR *LPDDOPENDIRECTDRAWOUT;
+
+typedef struct _DDOPENSURFACEIN {
+ HANDLE hDirectDraw;
+ ULONG_PTR dwSurfaceHandle;
+ LPDD_NOTIFYCALLBACK pfnSurfaceClose;
+ PVOID pContext;
+} DDOPENSURFACEIN, FAR *LPDDOPENSURFACEIN;
+
+typedef struct _DDOPENSURFACEOUT {
+ DWORD ddRVal;
+ HANDLE hSurface;
+} DDOPENSURFACEOUT, FAR *LPDDOPENSURFACEOUT;
+
+typedef struct _DDOPENVIDEOPORTIN {
+ HANDLE hDirectDraw;
+ ULONG dwVideoPortHandle;
+ LPDD_NOTIFYCALLBACK pfnVideoPortClose;
+ PVOID pContext;
+} DDOPENVIDEOPORTIN, FAR *LPDDOPENVIDEOPORTIN;
+
+typedef struct _DDOPENVIDEOPORTOUT {
+ DWORD ddRVal;
+ HANDLE hVideoPort;
+} DDOPENVIDEOPORTOUT, FAR *LPDDOPENVIDEOPORTOUT;
+
+/* DDOPENVPCAPTUREDEVICEIN.dwFlags constants */
+#define DDOPENCAPTURE_VIDEO 0x0001
+#define DDOPENCAPTURE_VBI 0x0002
+
+typedef struct _DDOPENVPCAPTUREDEVICEIN {
+ HANDLE hDirectDraw;
+ HANDLE hVideoPort;
+ DWORD dwStartLine;
+ DWORD dwEndLine;
+ DWORD dwCaptureEveryNFields;
+ LPDD_NOTIFYCALLBACK pfnCaptureClose;
+ PVOID pContext;
+ DWORD dwFlags;
+} DDOPENVPCAPTUREDEVICEIN, FAR * LPDDOPENVPCAPTUREDEVICEIN;
+
+typedef struct _DDOPENVPCAPTUREDEVICEOUT {
+ DWORD ddRVal;
+ HANDLE hCapture;
+} DDOPENVPCAPTUREDEVICEOUT, FAR * LPDDOPENVPCAPTUREDEVICEOUT;
+
+/* DDREGISTERCALLBACK.dwEvents constants */
+#define DDEVENT_DISPLAY_VSYNC 0x0001
+#define DDEVENT_VP_VSYNC 0x0002
+#define DDEVENT_VP_LINE 0x0004
+#define DDEVENT_PRERESCHANGE 0x0008
+#define DDEVENT_POSTRESCHANGE 0x0010
+#define DDEVENT_PREDOSBOX 0x0020
+#define DDEVENT_POSTDOSBOX 0x0040
+
+typedef struct _DDREGISTERCALLBACK {
+ HANDLE hDirectDraw;
+ ULONG dwEvents;
+ LPDD_NOTIFYCALLBACK pfnCallback;
+ ULONG_PTR dwParam1;
+ ULONG_PTR dwParam2;
+ PVOID pContext;
+} DDREGISTERCALLBACK, FAR *LPDDREGISTERCALLBACK;
+
+typedef struct _DDSETSURFACETATE {
+ HANDLE hDirectDraw;
+ HANDLE hSurface;
+ DWORD dwState;
+ DWORD dwStartField;
+} DDSETSURFACESTATE, FAR *LPDDSETSURFACESTATE;
+
+typedef struct _DDSETFIELDNUM {
+ HANDLE hDirectDraw;
+ HANDLE hVideoPort;
+ DWORD dwFieldNum;
+} DDSETFIELDNUM, FAR *LPDDSETFIELDNUM;
+
+typedef struct _DDSETSKIPFIELD {
+ HANDLE hDirectDraw;
+ HANDLE hVideoPort;
+ DWORD dwStartField;
+} DDSETSKIPFIELD, FAR *LPDDSETSKIPFIELD;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __DDKMAPI_H */
diff --git a/tcc/include/winapi/ddk/hidclass.h b/tcc/include/winapi/ddk/hidclass.h
new file mode 100644
index 0000000..4cbc6fc
--- /dev/null
+++ b/tcc/include/winapi/ddk/hidclass.h
@@ -0,0 +1,153 @@
+/*
+ * hidclass.h
+ *
+ * HID class driver interface
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __HIDCLASS_H
+#define __HIDCLASS_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+#include "hidpi.h"
+
+#define HID_REVISION 0x00000001
+
+DEFINE_GUID (GUID_DEVINTERFACE_HID, \
+ 0x4D1E55B2L, 0xF16F, 0x11CF, 0x88, 0xCB, 0x00, 0x11, 0x11, 0x00, 0x00, 0x30);
+DEFINE_GUID (GUID_HID_INTERFACE_NOTIFY, \
+ 0x2c4e2e88L, 0x25e6, 0x4c33, 0x88, 0x2f, 0x3d, 0x82, 0xe6, 0x07, 0x36, 0x81);
+DEFINE_GUID (GUID_HID_INTERFACE_HIDPARSE, \
+ 0xf5c315a5, 0x69ac, 0x4bc2, 0x92, 0x79, 0xd0, 0xb6, 0x45, 0x76, 0xf4, 0x4b);
+
+#define GUID_CLASS_INPUT GUID_DEVINTERFACE_HID
+
+#define GUID_CLASS_INPUT_STR "4D1E55B2-F16F-11CF-88CB-001111000030"
+
+
+#define HID_CTL_CODE(id) \
+ CTL_CODE (FILE_DEVICE_KEYBOARD, (id), METHOD_NEITHER, FILE_ANY_ACCESS)
+#define HID_BUFFER_CTL_CODE(id) \
+ CTL_CODE (FILE_DEVICE_KEYBOARD, (id), METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define HID_IN_CTL_CODE(id) \
+ CTL_CODE (FILE_DEVICE_KEYBOARD, (id), METHOD_IN_DIRECT, FILE_ANY_ACCESS)
+#define HID_OUT_CTL_CODE(id) \
+ CTL_CODE (FILE_DEVICE_KEYBOARD, (id), METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
+
+
+#define IOCTL_GET_PHYSICAL_DESCRIPTOR HID_OUT_CTL_CODE(102)
+#define IOCTL_HID_FLUSH_QUEUE HID_CTL_CODE(101)
+#define IOCTL_HID_GET_COLLECTION_DESCRIPTOR HID_CTL_CODE(100)
+#define IOCTL_HID_GET_COLLECTION_INFORMATION HID_BUFFER_CTL_CODE(106)
+#define IOCTL_HID_GET_FEATURE HID_OUT_CTL_CODE(100)
+#define IOCTL_HID_GET_HARDWARE_ID HID_OUT_CTL_CODE(103)
+#define IOCTL_HID_GET_INDEXED_STRING HID_OUT_CTL_CODE(120)
+#define IOCTL_HID_GET_INPUT_REPORT HID_OUT_CTL_CODE(104)
+#define IOCTL_HID_GET_MANUFACTURER_STRING HID_OUT_CTL_CODE(110)
+#define IOCTL_GET_NUM_DEVICE_INPUT_BUFFERS HID_BUFFER_CTL_CODE(104)
+#define IOCTL_HID_GET_POLL_FREQUENCY_MSEC HID_BUFFER_CTL_CODE(102)
+#define IOCTL_HID_GET_PRODUCT_STRING HID_OUT_CTL_CODE(111)
+#define IOCTL_HID_GET_SERIALNUMBER_STRING HID_OUT_CTL_CODE(112)
+#define IOCTL_HID_SET_FEATURE HID_IN_CTL_CODE(100)
+#define IOCTL_SET_NUM_DEVICE_INPUT_BUFFERS HID_BUFFER_CTL_CODE(105)
+#define IOCTL_HID_SET_OUTPUT_REPORT HID_IN_CTL_CODE(101)
+#define IOCTL_HID_SET_POLL_FREQUENCY_MSEC HID_BUFFER_CTL_CODE(103)
+
+#define IOCTL_HID_GET_DRIVER_CONFIG HID_BUFFER_CTL_CODE(100)
+#define IOCTL_HID_SET_DRIVER_CONFIG HID_BUFFER_CTL_CODE(101)
+#define IOCTL_HID_GET_MS_GENRE_DESCRIPTOR HID_OUT_CTL_CODE(121)
+
+
+enum DeviceObjectState {
+ DeviceObjectStarted = 0,
+ DeviceObjectStopped,
+ DeviceObjectRemoved
+};
+
+typedef VOID DDKAPI (*PHID_STATUS_CHANGE)(
+ PVOID Context,
+ enum DeviceObjectState State);
+
+typedef NTSTATUS DDKAPI (*PHIDP_GETCAPS)(
+ /*IN*/ PHIDP_PREPARSED_DATA PreparsedData,
+ /*OUT*/ PHIDP_CAPS Capabilities);
+
+typedef struct _HID_COLLECTION_INFORMATION {
+ ULONG DescriptorSize;
+ BOOLEAN Polled;
+ UCHAR Reserved1[1];
+ USHORT VendorID;
+ USHORT ProductID;
+ USHORT VersionNumber;
+} HID_COLLECTION_INFORMATION, *PHID_COLLECTION_INFORMATION;
+
+typedef struct _HID_DRIVER_CONFIG {
+ ULONG Size;
+ ULONG RingBufferSize;
+} HID_DRIVER_CONFIG, *PHID_DRIVER_CONFIG;
+
+typedef struct _HID_INTERFACE_HIDPARSE {
+#ifdef __cplusplus
+ INTERFACE i;
+#else
+ /* GCC doesn't support including unnamed structs, so INTERFACE is
+ expanded here */
+ USHORT Size;
+ USHORT Version;
+ PVOID Context;
+ PINTERFACE_REFERENCE InterfaceReference;
+ PINTERFACE_DEREFERENCE InterfaceDereference;
+#endif
+ PHIDP_GETCAPS HidpGetCaps;
+} HID_INTERFACE_HIDPARSE, *PHID_INTERFACE_HIDPARSE;
+
+typedef struct _HID_INTERFACE_NOTIFY_PNP {
+#ifdef __cplusplus
+ INTERFACE i;
+#else
+ /* GCC doesn't support including unnamed structs, so INTERFACE is
+ expanded here */
+ USHORT Size;
+ USHORT Version;
+ PVOID Context;
+ PINTERFACE_REFERENCE InterfaceReference;
+ PINTERFACE_DEREFERENCE InterfaceDereference;
+#endif
+ PHID_STATUS_CHANGE StatusChangeFn;
+ PVOID CallbackContext;
+} HID_INTERFACE_NOTIFY_PNP, *PHID_INTERFACE_NOTIFY_PNP;
+
+typedef struct _HID_XFER_PACKET {
+ PUCHAR reportBuffer;
+ ULONG reportBufferLen;
+ UCHAR reportId;
+} HID_XFER_PACKET, *PHID_XFER_PACKET;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __HIDCLASS_H */
diff --git a/tcc/include/winapi/ddk/hidpi.h b/tcc/include/winapi/ddk/hidpi.h
new file mode 100644
index 0000000..10ea48c
--- /dev/null
+++ b/tcc/include/winapi/ddk/hidpi.h
@@ -0,0 +1,604 @@
+/*
+ * hidpi.h
+ *
+ * Public Interface for HID parsing library.
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __HIDPI_H
+#define __HIDPI_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+#include "hidusage.h"
+
+#if defined(_HIDPI_)
+ #define HIDAPI DECLSPEC_EXPORT
+#else
+ #define HIDAPI DECLSPEC_IMPORT
+#endif
+
+typedef PUCHAR PHIDP_REPORT_DESCRIPTOR;
+typedef struct _HIDP_PREPARSED_DATA * PHIDP_PREPARSED_DATA;
+
+typedef struct _HIDP_UNKNOWN_TOKEN {
+ UCHAR Token;
+ UCHAR Reserved[3];
+ ULONG BitField;
+} HIDP_UNKNOWN_TOKEN, *PHIDP_UNKNOWN_TOKEN;
+
+typedef enum _HIDP_KEYBOARD_DIRECTION {
+ HidP_Keyboard_Break,
+ HidP_Keyboard_Make
+} HIDP_KEYBOARD_DIRECTION;
+
+typedef struct _HIDP_KEYBOARD_MODIFIER_STATE {
+ _ANONYMOUS_UNION union {
+ _ANONYMOUS_STRUCT struct {
+ ULONG LeftControl : 1;
+ ULONG LeftShift : 1;
+ ULONG LeftAlt : 1;
+ ULONG LeftGUI : 1;
+ ULONG RightControl : 1;
+ ULONG RightShift : 1;
+ ULONG RightAlt : 1;
+ ULONG RigthGUI : 1;
+ ULONG CapsLock : 1;
+ ULONG ScollLock : 1;
+ ULONG NumLock : 1;
+ ULONG Reserved : 21;
+ } DUMMYSTRUCTNAME;
+ ULONG ul;
+ } DUMMYUNIONNAME;
+} HIDP_KEYBOARD_MODIFIER_STATE, *PHIDP_KEYBOARD_MODIFIER_STATE;
+
+typedef BOOLEAN (DDKAPI *PHIDP_INSERT_SCANCODES)(
+ /*IN*/ PVOID Context,
+ /*IN*/ PCHAR NewScanCodes,
+ /*IN*/ ULONG Length);
+
+typedef struct _USAGE_AND_PAGE {
+ USAGE Usage;
+ USAGE UsagePage;
+} USAGE_AND_PAGE, *PUSAGE_AND_PAGE;
+
+HIDAPI
+NTSTATUS
+DDKAPI
+HidP_TranslateUsageAndPagesToI8042ScanCodes(
+ /*IN*/ PUSAGE_AND_PAGE ChangedUsageList,
+ /*IN*/ ULONG UsageListLength,
+ /*IN*/ HIDP_KEYBOARD_DIRECTION KeyAction,
+ /*IN OUT*/ PHIDP_KEYBOARD_MODIFIER_STATE ModifierState,
+ /*IN*/ PHIDP_INSERT_SCANCODES InsertCodesProcedure,
+ /*IN*/ PVOID InsertCodesContext);
+
+HIDAPI
+NTSTATUS
+DDKAPI
+HidP_TranslateUsagesToI8042ScanCodes(
+ /*IN*/ PUSAGE ChangedUsageList,
+ /*IN*/ ULONG UsageListLength,
+ /*IN*/ HIDP_KEYBOARD_DIRECTION KeyAction,
+ /*IN OUT*/ PHIDP_KEYBOARD_MODIFIER_STATE ModifierState,
+ /*IN*/ PHIDP_INSERT_SCANCODES InsertCodesProcedure,
+ /*IN*/ PVOID InsertCodesContext);
+
+typedef struct _HIDP_BUTTON_CAPS {
+ USAGE UsagePage;
+ UCHAR ReportID;
+ BOOLEAN IsAlias;
+ USHORT BitField;
+ USHORT LinkCollection;
+ USAGE LinkUsage;
+ USAGE LinkUsagePage;
+ BOOLEAN IsRange;
+ BOOLEAN IsStringRange;
+ BOOLEAN IsDesignatorRange;
+ BOOLEAN IsAbsolute;
+ ULONG Reserved[10];
+ _ANONYMOUS_UNION union {
+ struct {
+ USAGE UsageMin, UsageMax;
+ USHORT StringMin, StringMax;
+ USHORT DesignatorMin, DesignatorMax;
+ USHORT DataIndexMin, DataIndexMax;
+ } Range;
+ struct {
+ USAGE Usage, Reserved1;
+ USHORT StringIndex, Reserved2;
+ USHORT DesignatorIndex, Reserved3;
+ USHORT DataIndex, Reserved4;
+ } NotRange;
+ } DUMMYUNIONNAME;
+} HIDP_BUTTON_CAPS, *PHIDP_BUTTON_CAPS;
+
+typedef struct _HIDP_CAPS {
+ USAGE Usage;
+ USAGE UsagePage;
+ USHORT InputReportByteLength;
+ USHORT OutputReportByteLength;
+ USHORT FeatureReportByteLength;
+ USHORT Reserved[17];
+ USHORT NumberLinkCollectionNodes;
+ USHORT NumberInputButtonCaps;
+ USHORT NumberInputValueCaps;
+ USHORT NumberInputDataIndices;
+ USHORT NumberOutputButtonCaps;
+ USHORT NumberOutputValueCaps;
+ USHORT NumberOutputDataIndices;
+ USHORT NumberFeatureButtonCaps;
+ USHORT NumberFeatureValueCaps;
+ USHORT NumberFeatureDataIndices;
+} HIDP_CAPS, *PHIDP_CAPS;
+
+typedef struct _HIDP_DATA {
+ USHORT DataIndex;
+ USHORT Reserved;
+ _ANONYMOUS_UNION union {
+ ULONG RawValue;
+ BOOLEAN On;
+ } DUMMYUNIONNAME;
+} HIDP_DATA, *PHIDP_DATA;
+
+typedef struct _HIDP_EXTENDED_ATTRIBUTES {
+ UCHAR NumGlobalUnknowns;
+ UCHAR Reserved[3];
+ PHIDP_UNKNOWN_TOKEN GlobalUnknowns;
+ ULONG Data[1];
+} HIDP_EXTENDED_ATTRIBUTES, *PHIDP_EXTENDED_ATTRIBUTES;
+
+#define HIDP_LINK_COLLECTION_ROOT ((USHORT) -1)
+#define HIDP_LINK_COLLECTION_UNSPECIFIED ((USHORT) 0)
+
+typedef struct _HIDP_LINK_COLLECTION_NODE {
+ USAGE LinkUsage;
+ USAGE LinkUsagePage;
+ USHORT Parent;
+ USHORT NumberOfChildren;
+ USHORT NextSibling;
+ USHORT FirstChild;
+ ULONG CollectionType: 8;
+ ULONG IsAlias: 1;
+ ULONG Reserved: 23;
+ PVOID UserContext;
+} HIDP_LINK_COLLECTION_NODE, *PHIDP_LINK_COLLECTION_NODE;
+
+typedef struct _HIDP_VALUE_CAPS {
+ USAGE UsagePage;
+ UCHAR ReportID;
+ BOOLEAN IsAlias;
+ USHORT BitField;
+ USHORT LinkCollection;
+ USAGE LinkUsage;
+ USAGE LinkUsagePage;
+ BOOLEAN IsRange;
+ BOOLEAN IsStringRange;
+ BOOLEAN IsDesignatorRange;
+ BOOLEAN IsAbsolute;
+ BOOLEAN HasNull;
+ UCHAR Reserved;
+ USHORT BitSize;
+ USHORT ReportCount;
+ USHORT Reserved2[5];
+ ULONG UnitsExp;
+ ULONG Units;
+ LONG LogicalMin, LogicalMax;
+ LONG PhysicalMin, PhysicalMax;
+ _ANONYMOUS_UNION union {
+ struct {
+ USAGE UsageMin, UsageMax;
+ USHORT StringMin, StringMax;
+ USHORT DesignatorMin, DesignatorMax;
+ USHORT DataIndexMin, DataIndexMax;
+ } Range;
+ struct {
+ USAGE Usage, Reserved1;
+ USHORT StringIndex, Reserved2;
+ USHORT DesignatorIndex, Reserved3;
+ USHORT DataIndex, Reserved4;
+ } NotRange;
+ } DUMMYUNIONNAME;
+} HIDP_VALUE_CAPS, *PHIDP_VALUE_CAPS;
+
+typedef enum _HIDP_REPORT_TYPE {
+ HidP_Input,
+ HidP_Output,
+ HidP_Feature
+} HIDP_REPORT_TYPE;
+
+#define FACILITY_HID_ERROR_CODE 0x11
+
+#define HIDP_ERROR_CODES(SEV, CODE) \
+ ((NTSTATUS) (((SEV) << 28) | (FACILITY_HID_ERROR_CODE << 16) | (CODE)))
+
+#define HIDP_STATUS_SUCCESS (HIDP_ERROR_CODES(0x0, 0))
+#define HIDP_STATUS_NULL (HIDP_ERROR_CODES(0x8, 1))
+#define HIDP_STATUS_INVALID_PREPARSED_DATA (HIDP_ERROR_CODES(0xC, 1))
+#define HIDP_STATUS_INVALID_REPORT_TYPE (HIDP_ERROR_CODES(0xC, 2))
+#define HIDP_STATUS_INVALID_REPORT_LENGTH (HIDP_ERROR_CODES(0xC, 3))
+#define HIDP_STATUS_USAGE_NOT_FOUND (HIDP_ERROR_CODES(0xC, 4))
+#define HIDP_STATUS_VALUE_OUT_OF_RANGE (HIDP_ERROR_CODES(0xC, 5))
+#define HIDP_STATUS_BAD_LOG_PHY_VALUES (HIDP_ERROR_CODES(0xC, 6))
+#define HIDP_STATUS_BUFFER_TOO_SMALL (HIDP_ERROR_CODES(0xC, 7))
+#define HIDP_STATUS_INTERNAL_ERROR (HIDP_ERROR_CODES(0xC, 8))
+#define HIDP_STATUS_I8042_TRANS_UNKNOWN (HIDP_ERROR_CODES(0xC, 9))
+#define HIDP_STATUS_INCOMPATIBLE_REPORT_ID (HIDP_ERROR_CODES(0xC, 0xA))
+#define HIDP_STATUS_NOT_VALUE_ARRAY (HIDP_ERROR_CODES(0xC, 0xB))
+#define HIDP_STATUS_IS_VALUE_ARRAY (HIDP_ERROR_CODES(0xC, 0xC))
+#define HIDP_STATUS_DATA_INDEX_NOT_FOUND (HIDP_ERROR_CODES(0xC, 0xD))
+#define HIDP_STATUS_DATA_INDEX_OUT_OF_RANGE (HIDP_ERROR_CODES(0xC, 0xE))
+#define HIDP_STATUS_BUTTON_NOT_PRESSED (HIDP_ERROR_CODES(0xC, 0xF))
+#define HIDP_STATUS_REPORT_DOES_NOT_EXIST (HIDP_ERROR_CODES(0xC, 0x10))
+#define HIDP_STATUS_NOT_IMPLEMENTED (HIDP_ERROR_CODES(0xC, 0x20))
+#define HIDP_STATUS_I8242_TRANS_UNKNOWN HIDP_STATUS_I8042_TRANS_UNKNOWN
+
+
+
+/*
+ * NTSTATUS
+ * HidP_GetButtonCaps(
+ * IN HIDP_REPORT_TYPE ReportType,
+ * OUT PHIDP_BUTTON_CAPS ButtonCaps,
+ * IN OUT PULONG ButtonCapsLength,
+ * IN PHIDP_PREPARSED_DATA PreparsedData);
+ */
+#define HidP_GetButtonCaps(_Type_, _Caps_, _Len_, _Data_) \
+ HidP_GetSpecificButtonCaps(_Type_, 0, 0, 0, _Caps_, _Len_, _Data_)
+
+/*
+ * NTSTATUS
+ * HidP_GetButtons(
+ * IN HIDP_REPORT_TYPE ReportType,
+ * IN USAGE UsagePage,
+ * IN USHORT LinkCollection,
+ * OUT USAGE *UsageList,
+ * IN OUT ULONG *UsageLength,
+ * IN PHIDP_PREPARSED_DATA PreparsedData,
+ * IN PCHAR Report,
+ * IN ULONG ReportLength);
+ */
+#define HidP_GetButtons(Rty, UPa, LCo, ULi, ULe, Ppd, Rep, RLe) \
+ HidP_GetUsages(Rty, UPa, LCo, ULi, ULe, Ppd, Rep, RLe)
+
+#define HidP_GetButtonListLength(RTy, UPa, Ppd) \
+ HidP_GetUsageListLength(Rty, UPa, Ppd)
+
+
+/*
+ * NTSTATUS
+ * HidP_GetButtonsEx(
+ * IN HIDP_REPORT_TYPE ReportType,
+ * IN USHORT LinkCollection,
+ * OUT PUSAGE_AND_PAGE ButtonList,
+ * IN OUT ULONG *UsageLength,
+ * IN PHIDP_PREPARSED_DATA PreparsedData,
+ * IN PCHAR Report,
+ * IN ULONG ReportLength);
+ */
+#define HidP_GetButtonsEx(RT, LC, BL, UL, PD, R, RL) \
+ HidP_GetUsagesEx(RT, LC, BL, UL, PD, R, RL)
+
+HIDAPI
+NTSTATUS
+DDKAPI
+HidP_GetCaps(
+ /*IN*/ PHIDP_PREPARSED_DATA PreparsedData,
+ /*OUT*/ PHIDP_CAPS Capabilities);
+
+HIDAPI
+NTSTATUS
+DDKAPI
+HidP_GetData(
+ /*IN*/ HIDP_REPORT_TYPE ReportType,
+ /*OUT*/ PHIDP_DATA DataList,
+ /*IN OUT*/ PULONG DataLength,
+ /*IN*/ PHIDP_PREPARSED_DATA PreparsedData,
+ /*IN*/ PCHAR Report,
+ /*IN*/ ULONG ReportLength);
+
+HIDAPI
+NTSTATUS
+DDKAPI
+HidP_GetExtendedAttributes(
+ /*IN*/ HIDP_REPORT_TYPE ReportType,
+ /*IN*/ USHORT DataIndex,
+ /*IN*/ PHIDP_PREPARSED_DATA PreparsedData,
+ /*OUT*/ PHIDP_EXTENDED_ATTRIBUTES Attributes,
+ /*IN OUT*/ PULONG LengthAttributes);
+
+HIDAPI
+NTSTATUS
+DDKAPI
+HidP_GetLinkCollectionNodes(
+ /*OUT*/ PHIDP_LINK_COLLECTION_NODE LinkCollectionNodes,
+ /*IN OUT*/ PULONG LinkCollectionNodesLength,
+ /*IN*/ PHIDP_PREPARSED_DATA PreparsedData);
+
+HIDAPI
+NTSTATUS
+DDKAPI
+HidP_GetScaledUsageValue(
+ /*IN*/ HIDP_REPORT_TYPE ReportType,
+ /*IN*/ USAGE UsagePage,
+ /*IN*/ USHORT LinkCollection /*OPTIONAL*/,
+ /*IN*/ USAGE Usage,
+ /*OUT*/ PLONG UsageValue,
+ /*IN*/ PHIDP_PREPARSED_DATA PreparsedData,
+ /*IN*/ PCHAR Report,
+ /*IN*/ ULONG ReportLength);
+
+HIDAPI
+NTSTATUS
+DDKAPI
+HidP_GetSpecificButtonCaps(
+ /*IN*/ HIDP_REPORT_TYPE ReportType,
+ /*IN*/ USAGE UsagePage,
+ /*IN*/ USHORT LinkCollection,
+ /*IN*/ USAGE Usage,
+ /*OUT*/ PHIDP_BUTTON_CAPS ButtonCaps,
+ /*IN OUT*/ PULONG ButtonCapsLength,
+ /*IN*/ PHIDP_PREPARSED_DATA PreparsedData);
+
+HIDAPI
+NTSTATUS
+DDKAPI
+HidP_GetSpecificValueCaps(
+ /*IN*/ HIDP_REPORT_TYPE ReportType,
+ /*IN*/ USAGE UsagePage,
+ /*IN*/ USHORT LinkCollection,
+ /*IN*/ USAGE Usage,
+ /*OUT*/ PHIDP_VALUE_CAPS ValueCaps,
+ /*IN OUT*/ PULONG ValueCapsLength,
+ /*IN*/ PHIDP_PREPARSED_DATA PreparsedData);
+
+HIDAPI
+NTSTATUS
+DDKAPI
+HidP_GetUsages(
+ /*IN*/ HIDP_REPORT_TYPE ReportType,
+ /*IN*/ USAGE UsagePage,
+ /*IN*/ USHORT LinkCollection /*OPTIONAL*/,
+ /*OUT*/ USAGE *UsageList,
+ /*IN OUT*/ ULONG *UsageLength,
+ /*IN*/ PHIDP_PREPARSED_DATA PreparsedData,
+ /*IN*/ PCHAR Report,
+ /*IN*/ ULONG ReportLength);
+
+HIDAPI
+NTSTATUS
+DDKAPI
+HidP_GetUsagesEx(
+ /*IN*/ HIDP_REPORT_TYPE ReportType,
+ /*IN*/ USHORT LinkCollection,
+ /*OUT*/ PUSAGE_AND_PAGE ButtonList,
+ /*IN OUT*/ ULONG *UsageLength,
+ /*IN*/ PHIDP_PREPARSED_DATA PreparsedData,
+ /*IN*/ PCHAR Report,
+ /*IN*/ ULONG ReportLength);
+
+HIDAPI
+NTSTATUS
+DDKAPI
+HidP_GetUsageValue(
+ /*IN*/ HIDP_REPORT_TYPE ReportType,
+ /*IN*/ USAGE UsagePage,
+ /*IN*/ USHORT LinkCollection,
+ /*IN*/ USAGE Usage,
+ /*OUT*/ PULONG UsageValue,
+ /*IN*/ PHIDP_PREPARSED_DATA PreparsedData,
+ /*IN*/ PCHAR Report,
+ /*IN*/ ULONG ReportLength);
+
+HIDAPI
+NTSTATUS
+DDKAPI
+HidP_GetUsageValueArray(
+ /*IN*/ HIDP_REPORT_TYPE ReportType,
+ /*IN*/ USAGE UsagePage,
+ /*IN*/ USHORT LinkCollection /*OPTIONAL*/,
+ /*IN*/ USAGE Usage,
+ /*OUT*/ PCHAR UsageValue,
+ /*IN*/ USHORT UsageValueByteLength,
+ /*IN*/ PHIDP_PREPARSED_DATA PreparsedData,
+ /*IN*/ PCHAR Report,
+ /*IN*/ ULONG ReportLength);
+
+/*
+ * NTSTATUS
+ * HidP_GetValueCaps(
+ * IN HIDP_REPORT_TYPE ReportType,
+ * OUT PHIDP_VALUE_CAPS ValueCaps,
+ * IN OUT PULONG ValueCapsLength,
+ * IN PHIDP_PREPARSED_DATA PreparsedData);
+ */
+#define HidP_GetValueCaps(_Type_, _Caps_, _Len_, _Data_) \
+ HidP_GetSpecificValueCaps (_Type_, 0, 0, 0, _Caps_, _Len_, _Data_)
+
+HIDAPI
+NTSTATUS
+DDKAPI
+HidP_InitializeReportForID(
+ /*IN*/ HIDP_REPORT_TYPE ReportType,
+ /*IN*/ UCHAR ReportID,
+ /*IN*/ PHIDP_PREPARSED_DATA PreparsedData,
+ /*IN OUT*/ PCHAR Report,
+ /*IN*/ ULONG ReportLength);
+
+/*
+ * BOOLEAN
+ * HidP_IsSameUsageAndPage(
+ * USAGE_AND_PAGE u1,
+ * USAGE_AND_PAGE u2);
+ */
+#define HidP_IsSameUsageAndPage(u1, u2) ((* (PULONG) &u1) == (* (PULONG) &u2))
+
+HIDAPI
+ULONG
+DDKAPI
+HidP_MaxDataListLength(
+ /*IN*/ HIDP_REPORT_TYPE ReportType,
+ /*IN*/ PHIDP_PREPARSED_DATA PreparsedData);
+
+HIDAPI
+ULONG
+DDKAPI
+HidP_MaxUsageListLength(
+ /*IN*/ HIDP_REPORT_TYPE ReportType,
+ /*IN*/ USAGE UsagePage /*OPTIONAL*/,
+ /*IN*/ PHIDP_PREPARSED_DATA PreparsedData);
+
+/*
+ * NTSTATUS
+ * HidP_SetButtons(
+ * IN HIDP_REPORT_TYPE ReportType,
+ * IN USAGE UsagePage,
+ * IN USHORT LinkCollection,
+ * IN PUSAGE UsageList,
+ * IN OUT PULONG UsageLength,
+ * IN PHIDP_PREPARSED_DATA PreparsedData,
+ * IN OUT PCHAR Report,
+ * IN ULONG ReportLength);
+ */
+#define HidP_SetButtons(RT, UP, LC, UL1, UL2, PD, R, RL) \
+ HidP_SetUsages(RT, UP, LC, UL1, UL2, PD, R, RL)
+
+HIDAPI
+NTSTATUS
+DDKAPI
+HidP_SetData(
+ /*IN*/ HIDP_REPORT_TYPE ReportType,
+ /*IN*/ PHIDP_DATA DataList,
+ /*IN OUT*/ PULONG DataLength,
+ /*IN*/ PHIDP_PREPARSED_DATA PreparsedData,
+ /*IN OUT*/ PCHAR Report,
+ /*IN*/ ULONG ReportLength);
+
+HIDAPI
+NTSTATUS
+DDKAPI
+HidP_SetScaledUsageValue(
+ /*IN*/ HIDP_REPORT_TYPE ReportType,
+ /*IN*/ USAGE UsagePage,
+ /*IN*/ USHORT LinkCollection /*OPTIONAL*/,
+ /*IN*/ USAGE Usage,
+ /*IN*/ LONG UsageValue,
+ /*IN*/ PHIDP_PREPARSED_DATA PreparsedData,
+ /*IN OUT*/ PCHAR Report,
+ /*IN*/ ULONG ReportLength);
+
+HIDAPI
+NTSTATUS
+DDKAPI
+HidP_SetUsages(
+ /*IN*/ HIDP_REPORT_TYPE ReportType,
+ /*IN*/ USAGE UsagePage,
+ /*IN*/ USHORT LinkCollection /*OPTIONAL*/,
+ /*IN*/ PUSAGE UsageList,
+ /*IN OUT*/ PULONG UsageLength,
+ /*IN*/ PHIDP_PREPARSED_DATA PreparsedData,
+ /*IN OUT*/ PCHAR Report,
+ /*IN*/ ULONG ReportLength);
+
+HIDAPI
+NTSTATUS
+DDKAPI
+HidP_SetUsageValue(
+ /*IN*/ HIDP_REPORT_TYPE ReportType,
+ /*IN*/ USAGE UsagePage,
+ /*IN*/ USHORT LinkCollection,
+ /*IN*/ USAGE Usage,
+ /*IN*/ ULONG UsageValue,
+ /*IN*/ PHIDP_PREPARSED_DATA PreparsedData,
+ /*IN OUT*/ PCHAR Report,
+ /*IN*/ ULONG ReportLength);
+
+HIDAPI
+NTSTATUS
+DDKAPI
+HidP_SetUsageValueArray(
+ /*IN*/ HIDP_REPORT_TYPE ReportType,
+ /*IN*/ USAGE UsagePage,
+ /*IN*/ USHORT LinkCollection /*OPTIONAL*/,
+ /*IN*/ USAGE Usage,
+ /*IN*/ PCHAR UsageValue,
+ /*IN*/ USHORT UsageValueByteLength,
+ /*IN*/ PHIDP_PREPARSED_DATA PreparsedData,
+ /*OUT*/ PCHAR Report,
+ /*IN*/ ULONG ReportLength);
+
+/*
+ * NTSTATUS
+ * HidP_UnsetButtons(
+ * IN HIDP_REPORT_TYPE ReportType,
+ * IN USAGE UsagePage,
+ * IN USHORT LinkCollection,
+ * IN PUSAGE UsageList,
+ * IN OUT PULONG UsageLength,
+ * IN PHIDP_PREPARSED_DATA PreparsedData,
+ * IN OUT PCHAR Report,
+ * IN ULONG ReportLength);
+ */
+#define HidP_UnsetButtons(RT, UP, LC, UL1, UL2, PD, R, RL) \
+ HidP_UnsetUsages(RT, UP, LC, UL1, UL2, PD, R, RL)
+
+HIDAPI
+NTSTATUS
+DDKAPI
+HidP_UnsetUsages(
+ /*IN*/ HIDP_REPORT_TYPE ReportType,
+ /*IN*/ USAGE UsagePage,
+ /*IN*/ USHORT LinkCollection,
+ /*IN*/ PUSAGE UsageList,
+ /*IN OUT*/ PULONG UsageLength,
+ /*IN*/ PHIDP_PREPARSED_DATA PreparsedData,
+ /*IN OUT*/ PCHAR Report,
+ /*IN*/ ULONG ReportLength);
+
+HIDAPI
+NTSTATUS
+DDKAPI
+HidP_UsageAndPageListDifference(
+ /*IN*/ PUSAGE_AND_PAGE PreviousUsageList,
+ /*IN*/ PUSAGE_AND_PAGE CurrentUsageList,
+ /*OUT*/ PUSAGE_AND_PAGE BreakUsageList,
+ /*OUT*/ PUSAGE_AND_PAGE MakeUsageList,
+ /*IN*/ ULONG UsageListLength);
+
+HIDAPI
+NTSTATUS
+DDKAPI
+HidP_UsageListDifference(
+ /*IN*/ PUSAGE PreviousUsageList,
+ /*IN*/ PUSAGE CurrentUsageList,
+ /*OUT*/ PUSAGE BreakUsageList,
+ /*OUT*/ PUSAGE MakeUsageList,
+ /*IN*/ ULONG UsageListLength);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __HIDPI_H */
diff --git a/tcc/include/winapi/ddk/hidsdi.h b/tcc/include/winapi/ddk/hidsdi.h
new file mode 100755
index 0000000..eee6a96
--- /dev/null
+++ b/tcc/include/winapi/ddk/hidsdi.h
@@ -0,0 +1,73 @@
+/*
+ * hidsdi.h
+ *
+ * This file is part of the w32api package.
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+#ifndef _HIDSDI_H
+#define _HIDSDI_H
+
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <ddk/hidusage.h>
+#include <ddk/hidpi.h>
+
+#ifndef WINHIDSDI
+#define WINHIDSDI DECLSPEC_IMPORT
+#endif
+
+#include <pshpack4.h>
+
+typedef struct _HIDD_CONFIGURATION {
+ PVOID cookie;
+ ULONG size;
+ ULONG RingBufferSize;
+} HIDD_CONFIGURATION, *PHIDD_CONFIGURATION;
+
+typedef struct _HIDD_ATTRIBUTES {
+ ULONG Size;
+ USHORT VendorID;
+ USHORT ProductID;
+ USHORT VersionNumber;
+} HIDD_ATTRIBUTES, *PHIDD_ATTRIBUTES;
+
+WINHIDSDI BOOL WINAPI HidD_GetAttributes (HANDLE, PHIDD_ATTRIBUTES);
+WINHIDSDI VOID WINAPI HidD_GetHidGuid (LPGUID);
+WINHIDSDI BOOL WINAPI HidD_GetPreparsedData(HANDLE, PHIDP_PREPARSED_DATA *);
+WINHIDSDI BOOL WINAPI HidD_FreePreparsedData(PHIDP_PREPARSED_DATA);
+WINHIDSDI BOOL WINAPI HidD_FlushQueue (HANDLE);
+WINHIDSDI BOOL WINAPI HidD_GetConfiguration (HANDLE, PHIDD_CONFIGURATION, ULONG);
+WINHIDSDI BOOL WINAPI HidD_SetConfiguration (HANDLE, PHIDD_CONFIGURATION, ULONG);
+WINHIDSDI BOOL WINAPI HidD_GetFeature (HANDLE, PVOID, ULONG);
+WINHIDSDI BOOL WINAPI HidD_SetFeature (HANDLE, PVOID, ULONG);
+WINHIDSDI BOOL WINAPI HidD_GetNumInputBuffers (HANDLE, PULONG);
+WINHIDSDI BOOL WINAPI HidD_SetNumInputBuffers (HANDLE HidDeviceObject, ULONG);
+WINHIDSDI BOOL WINAPI HidD_GetPhysicalDescriptor (HANDLE, PVOID, ULONG);
+WINHIDSDI BOOL WINAPI HidD_GetManufacturerString (HANDLE, PVOID, ULONG);
+WINHIDSDI BOOL WINAPI HidD_GetProductString ( HANDLE, PVOID, ULONG);
+WINHIDSDI BOOL WINAPI HidD_GetIndexedString ( HANDLE, ULONG, PVOID, ULONG);
+WINHIDSDI BOOL WINAPI HidD_GetSerialNumberString (HANDLE, PVOID, ULONG);
+
+#include <poppack.h>
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _HIDSDI_H */
diff --git a/tcc/include/winapi/ddk/hidusage.h b/tcc/include/winapi/ddk/hidusage.h
new file mode 100644
index 0000000..1f82af9
--- /dev/null
+++ b/tcc/include/winapi/ddk/hidusage.h
@@ -0,0 +1,210 @@
+/*
+ * hidusage.h
+ *
+ * HID usages
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __HIDUSAGE_H
+#define __HIDUSAGE_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef USHORT USAGE, *PUSAGE;
+
+#define HID_USAGE_GENERIC_POINTER ((USAGE) 0x01)
+#define HID_USAGE_GENERIC_MOUSE ((USAGE) 0x02)
+#define HID_USAGE_GENERIC_JOYSTICK ((USAGE) 0x04)
+#define HID_USAGE_GENERIC_GAMEPAD ((USAGE) 0x05)
+#define HID_USAGE_GENERIC_KEYBOARD ((USAGE) 0x06)
+#define HID_USAGE_GENERIC_KEYPAD ((USAGE) 0x07)
+#define HID_USAGE_GENERIC_SYSTEM_CTL ((USAGE) 0x80)
+#define HID_USAGE_GENERIC_X ((USAGE) 0x30)
+#define HID_USAGE_GENERIC_Y ((USAGE) 0x31)
+#define HID_USAGE_GENERIC_Z ((USAGE) 0x32)
+#define HID_USAGE_GENERIC_RX ((USAGE) 0x33)
+#define HID_USAGE_GENERIC_RY ((USAGE) 0x34)
+#define HID_USAGE_GENERIC_RZ ((USAGE) 0x35)
+#define HID_USAGE_GENERIC_SLIDER ((USAGE) 0x36)
+#define HID_USAGE_GENERIC_DIAL ((USAGE) 0x37)
+#define HID_USAGE_GENERIC_WHEEL ((USAGE) 0x38)
+#define HID_USAGE_GENERIC_HATSWITCH ((USAGE) 0x39)
+#define HID_USAGE_GENERIC_COUNTED_BUFFER ((USAGE) 0x3A)
+#define HID_USAGE_GENERIC_BYTE_COUNT ((USAGE) 0x3B)
+#define HID_USAGE_GENERIC_MOTION_WAKEUP ((USAGE) 0x3C)
+#define HID_USAGE_GENERIC_VX ((USAGE) 0x40)
+#define HID_USAGE_GENERIC_VY ((USAGE) 0x41)
+#define HID_USAGE_GENERIC_VZ ((USAGE) 0x42)
+#define HID_USAGE_GENERIC_VBRX ((USAGE) 0x43)
+#define HID_USAGE_GENERIC_VBRY ((USAGE) 0x44)
+#define HID_USAGE_GENERIC_VBRZ ((USAGE) 0x45)
+#define HID_USAGE_GENERIC_VNO ((USAGE) 0x46)
+#define HID_USAGE_GENERIC_SYSCTL_POWER ((USAGE) 0x81)
+#define HID_USAGE_GENERIC_SYSCTL_SLEEP ((USAGE) 0x82)
+#define HID_USAGE_GENERIC_SYSCTL_WAKE ((USAGE) 0x83)
+#define HID_USAGE_GENERIC_SYSCTL_CONTEXT_MENU ((USAGE) 0x84)
+#define HID_USAGE_GENERIC_SYSCTL_MAIN_MENU ((USAGE) 0x85)
+#define HID_USAGE_GENERIC_SYSCTL_APP_MENU ((USAGE) 0x86)
+#define HID_USAGE_GENERIC_SYSCTL_HELP_MENU ((USAGE) 0x87)
+#define HID_USAGE_GENERIC_SYSCTL_MENU_EXIT ((USAGE) 0x88)
+#define HID_USAGE_GENERIC_SYSCTL_MENU_SELECT ((USAGE) 0x89)
+#define HID_USAGE_GENERIC_SYSCTL_MENU_RIGHT ((USAGE) 0x8A)
+#define HID_USAGE_GENERIC_SYSCTL_MENU_LEFT ((USAGE) 0x8B)
+#define HID_USAGE_GENERIC_SYSCTL_MENU_UP ((USAGE) 0x8C)
+#define HID_USAGE_GENERIC_SYSCTL_MENU_DOWN ((USAGE) 0x8D)
+
+#define HID_USAGE_KEYBOARD_NOEVENT ((USAGE) 0x00)
+#define HID_USAGE_KEYBOARD_ROLLOVER ((USAGE) 0x01)
+#define HID_USAGE_KEYBOARD_POSTFAIL ((USAGE) 0x02)
+#define HID_USAGE_KEYBOARD_UNDEFINED ((USAGE) 0x03)
+#define HID_USAGE_KEYBOARD_aA ((USAGE) 0x04)
+#define HID_USAGE_KEYBOARD_zZ ((USAGE) 0x1D)
+#define HID_USAGE_KEYBOARD_ONE ((USAGE) 0x1E)
+#define HID_USAGE_KEYBOARD_ZERO ((USAGE) 0x27)
+#define HID_USAGE_KEYBOARD_LCTRL ((USAGE) 0xE0)
+#define HID_USAGE_KEYBOARD_LSHFT ((USAGE) 0xE1)
+#define HID_USAGE_KEYBOARD_LALT ((USAGE) 0xE2)
+#define HID_USAGE_KEYBOARD_LGUI ((USAGE) 0xE3)
+#define HID_USAGE_KEYBOARD_RCTRL ((USAGE) 0xE4)
+#define HID_USAGE_KEYBOARD_RSHFT ((USAGE) 0xE5)
+#define HID_USAGE_KEYBOARD_RALT ((USAGE) 0xE6)
+#define HID_USAGE_KEYBOARD_RGUI ((USAGE) 0xE7)
+#define HID_USAGE_KEYBOARD_SCROLL_LOCK ((USAGE) 0x47)
+#define HID_USAGE_KEYBOARD_NUM_LOCK ((USAGE) 0x53)
+#define HID_USAGE_KEYBOARD_CAPS_LOCK ((USAGE) 0x39)
+#define HID_USAGE_KEYBOARD_F1 ((USAGE) 0x3A)
+#define HID_USAGE_KEYBOARD_F12 ((USAGE) 0x45)
+#define HID_USAGE_KEYBOARD_RETURN ((USAGE) 0x28)
+#define HID_USAGE_KEYBOARD_ESCAPE ((USAGE) 0x29)
+#define HID_USAGE_KEYBOARD_DELETE ((USAGE) 0x2A)
+#define HID_USAGE_KEYBOARD_PRINT_SCREEN ((USAGE) 0x46)
+
+#define HID_USAGE_LED_NUM_LOCK ((USAGE) 0x01)
+#define HID_USAGE_LED_CAPS_LOCK ((USAGE) 0x02)
+#define HID_USAGE_LED_SCROLL_LOCK ((USAGE) 0x03)
+#define HID_USAGE_LED_COMPOSE ((USAGE) 0x04)
+#define HID_USAGE_LED_KANA ((USAGE) 0x05)
+#define HID_USAGE_LED_POWER ((USAGE) 0x06)
+#define HID_USAGE_LED_SHIFT ((USAGE) 0x07)
+#define HID_USAGE_LED_DO_NOT_DISTURB ((USAGE) 0x08)
+#define HID_USAGE_LED_MUTE ((USAGE) 0x09)
+#define HID_USAGE_LED_TONE_ENABLE ((USAGE) 0x0A)
+#define HID_USAGE_LED_HIGH_CUT_FILTER ((USAGE) 0x0B)
+#define HID_USAGE_LED_LOW_CUT_FILTER ((USAGE) 0x0C)
+#define HID_USAGE_LED_EQUALIZER_ENABLE ((USAGE) 0x0D)
+#define HID_USAGE_LED_SOUND_FIELD_ON ((USAGE) 0x0E)
+#define HID_USAGE_LED_SURROUND_FIELD_ON ((USAGE) 0x0F)
+#define HID_USAGE_LED_REPEAT ((USAGE) 0x10)
+#define HID_USAGE_LED_STEREO ((USAGE) 0x11)
+#define HID_USAGE_LED_SAMPLING_RATE_DETECT ((USAGE) 0x12)
+#define HID_USAGE_LED_SPINNING ((USAGE) 0x13)
+#define HID_USAGE_LED_CAV ((USAGE) 0x14)
+#define HID_USAGE_LED_CLV ((USAGE) 0x15)
+#define HID_USAGE_LED_RECORDING_FORMAT_DET ((USAGE) 0x16)
+#define HID_USAGE_LED_OFF_HOOK ((USAGE) 0x17)
+#define HID_USAGE_LED_RING ((USAGE) 0x18)
+#define HID_USAGE_LED_MESSAGE_WAITING ((USAGE) 0x19)
+#define HID_USAGE_LED_DATA_MODE ((USAGE) 0x1A)
+#define HID_USAGE_LED_BATTERY_OPERATION ((USAGE) 0x1B)
+#define HID_USAGE_LED_BATTERY_OK ((USAGE) 0x1C)
+#define HID_USAGE_LED_BATTERY_LOW ((USAGE) 0x1D)
+#define HID_USAGE_LED_SPEAKER ((USAGE) 0x1E)
+#define HID_USAGE_LED_HEAD_SET ((USAGE) 0x1F)
+#define HID_USAGE_LED_HOLD ((USAGE) 0x20)
+#define HID_USAGE_LED_MICROPHONE ((USAGE) 0x21)
+#define HID_USAGE_LED_COVERAGE ((USAGE) 0x22)
+#define HID_USAGE_LED_NIGHT_MODE ((USAGE) 0x23)
+#define HID_USAGE_LED_SEND_CALLS ((USAGE) 0x24)
+#define HID_USAGE_LED_CALL_PICKUP ((USAGE) 0x25)
+#define HID_USAGE_LED_CONFERENCE ((USAGE) 0x26)
+#define HID_USAGE_LED_STAND_BY ((USAGE) 0x27)
+#define HID_USAGE_LED_CAMERA_ON ((USAGE) 0x28)
+#define HID_USAGE_LED_CAMERA_OFF ((USAGE) 0x29)
+#define HID_USAGE_LED_ON_LINE ((USAGE) 0x2A)
+#define HID_USAGE_LED_OFF_LINE ((USAGE) 0x2B)
+#define HID_USAGE_LED_BUSY ((USAGE) 0x2C)
+#define HID_USAGE_LED_READY ((USAGE) 0x2D)
+#define HID_USAGE_LED_PAPER_OUT ((USAGE) 0x2E)
+#define HID_USAGE_LED_PAPER_JAM ((USAGE) 0x2F)
+#define HID_USAGE_LED_REMOTE ((USAGE) 0x30)
+#define HID_USAGE_LED_FORWARD ((USAGE) 0x31)
+#define HID_USAGE_LED_REVERSE ((USAGE) 0x32)
+#define HID_USAGE_LED_STOP ((USAGE) 0x33)
+#define HID_USAGE_LED_REWIND ((USAGE) 0x34)
+#define HID_USAGE_LED_FAST_FORWARD ((USAGE) 0x35)
+#define HID_USAGE_LED_PLAY ((USAGE) 0x36)
+#define HID_USAGE_LED_PAUSE ((USAGE) 0x37)
+#define HID_USAGE_LED_RECORD ((USAGE) 0x38)
+#define HID_USAGE_LED_ERROR ((USAGE) 0x39)
+#define HID_USAGE_LED_SELECTED_INDICATOR ((USAGE) 0x3A)
+#define HID_USAGE_LED_IN_USE_INDICATOR ((USAGE) 0x3B)
+#define HID_USAGE_LED_MULTI_MODE_INDICATOR ((USAGE) 0x3C)
+#define HID_USAGE_LED_INDICATOR_ON ((USAGE) 0x3D)
+#define HID_USAGE_LED_INDICATOR_FLASH ((USAGE) 0x3E)
+#define HID_USAGE_LED_INDICATOR_SLOW_BLINK ((USAGE) 0x3F)
+#define HID_USAGE_LED_INDICATOR_FAST_BLINK ((USAGE) 0x40)
+#define HID_USAGE_LED_INDICATOR_OFF ((USAGE) 0x41)
+#define HID_USAGE_LED_FLASH_ON_TIME ((USAGE) 0x42)
+#define HID_USAGE_LED_SLOW_BLINK_ON_TIME ((USAGE) 0x43)
+#define HID_USAGE_LED_SLOW_BLINK_OFF_TIME ((USAGE) 0x44)
+#define HID_USAGE_LED_FAST_BLINK_ON_TIME ((USAGE) 0x45)
+#define HID_USAGE_LED_FAST_BLINK_OFF_TIME ((USAGE) 0x46)
+#define HID_USAGE_LED_INDICATOR_COLOR ((USAGE) 0x47)
+#define HID_USAGE_LED_RED ((USAGE) 0x48)
+#define HID_USAGE_LED_GREEN ((USAGE) 0x49)
+#define HID_USAGE_LED_AMBER ((USAGE) 0x4A)
+#define HID_USAGE_LED_GENERIC_INDICATOR ((USAGE) 0x3B)
+
+#define HID_USAGE_PAGE_UNDEFINED ((USAGE) 0x00)
+#define HID_USAGE_PAGE_GENERIC ((USAGE) 0x01)
+#define HID_USAGE_PAGE_SIMULATION ((USAGE) 0x02)
+#define HID_USAGE_PAGE_VR ((USAGE) 0x03)
+#define HID_USAGE_PAGE_SPORT ((USAGE) 0x04)
+#define HID_USAGE_PAGE_GAME ((USAGE) 0x05)
+#define HID_USAGE_PAGE_KEYBOARD ((USAGE) 0x07)
+#define HID_USAGE_PAGE_LED ((USAGE) 0x08)
+#define HID_USAGE_PAGE_BUTTON ((USAGE) 0x09)
+#define HID_USAGE_PAGE_ORDINAL ((USAGE) 0x0A)
+#define HID_USAGE_PAGE_TELEPHONY ((USAGE) 0x0B)
+#define HID_USAGE_PAGE_CONSUMER ((USAGE) 0x0C)
+#define HID_USAGE_PAGE_DIGITIZER ((USAGE) 0x0D)
+#define HID_USAGE_PAGE_UNICODE ((USAGE) 0x10)
+#define HID_USAGE_PAGE_ALPHANUMERIC ((USAGE) 0x14)
+
+#define HID_USAGE_TELEPHONY_PHONE ((USAGE) 0x01)
+#define HID_USAGE_TELEPHONY_ANSWERING_MACHINE ((USAGE) 0x02)
+#define HID_USAGE_TELEPHONY_MESSAGE_CONTROLS ((USAGE) 0x03)
+#define HID_USAGE_TELEPHONY_HANDSET ((USAGE) 0x04)
+#define HID_USAGE_TELEPHONY_HEADSET ((USAGE) 0x05)
+#define HID_USAGE_TELEPHONY_KEYPAD ((USAGE) 0x06)
+#define HID_USAGE_TELEPHONY_PROGRAMMABLE_BUTTON ((USAGE) 0x07)
+
+#define HID_USAGE_SIMULATION_RUDDER ((USAGE) 0xBA)
+#define HID_USAGE_SIMULATION_THROTTLE ((USAGE) 0xBB)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __HIDUSAGE_H */
diff --git a/tcc/include/winapi/ddk/kbdmou.h b/tcc/include/winapi/ddk/kbdmou.h
new file mode 100644
index 0000000..400eac6
--- /dev/null
+++ b/tcc/include/winapi/ddk/kbdmou.h
@@ -0,0 +1,91 @@
+/*
+ * kbdmou.h
+ *
+ * Structures and definitions for Keyboard/Mouse class and port drivers.
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Filip Navara <xnavara@volny.cz>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __KBDMOU_H
+#define __KBDMOU_H
+
+#include <ddk/ntddkbd.h>
+#include <ddk/ntddmou.h>
+
+#define DD_KEYBOARD_PORT_DEVICE_NAME "\\Device\\KeyboardPort"
+#define DD_KEYBOARD_PORT_DEVICE_NAME_U L"\\Device\\KeyboardPort"
+#define DD_KEYBOARD_PORT_BASE_NAME_U L"KeyboardPort"
+#define DD_POINTER_PORT_DEVICE_NAME "\\Device\\PointerPort"
+#define DD_POINTER_PORT_DEVICE_NAME_U L"\\Device\\PointerPort"
+#define DD_POINTER_PORT_BASE_NAME_U L"PointerPort"
+
+#define DD_KEYBOARD_CLASS_BASE_NAME_U L"KeyboardClass"
+#define DD_POINTER_CLASS_BASE_NAME_U L"PointerClass"
+
+#define DD_KEYBOARD_RESOURCE_CLASS_NAME_U L"Keyboard"
+#define DD_POINTER_RESOURCE_CLASS_NAME_U L"Pointer"
+#define DD_KEYBOARD_MOUSE_COMBO_RESOURCE_CLASS_NAME_U L"Keyboard/Pointer"
+
+#define POINTER_PORTS_MAXIMUM 8
+#define KEYBOARD_PORTS_MAXIMUM 8
+
+#define KBDMOU_COULD_NOT_SEND_COMMAND 0x0000
+#define KBDMOU_COULD_NOT_SEND_PARAM 0x0001
+#define KBDMOU_NO_RESPONSE 0x0002
+#define KBDMOU_INCORRECT_RESPONSE 0x0004
+
+#define I8042_ERROR_VALUE_BASE 1000
+#define INPORT_ERROR_VALUE_BASE 2000
+#define SERIAL_MOUSE_ERROR_VALUE_BASE 3000
+
+#define IOCTL_INTERNAL_KEYBOARD_CONNECT \
+ CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0080, METHOD_NEITHER, FILE_ANY_ACCESS)
+
+#define IOCTL_INTERNAL_KEYBOARD_DISCONNECT \
+ CTL_CODE(FILE_DEVICE_KEYBOARD,0x0100, METHOD_NEITHER, FILE_ANY_ACCESS)
+
+#define IOCTL_INTERNAL_KEYBOARD_ENABLE \
+ CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0200, METHOD_NEITHER, FILE_ANY_ACCESS)
+
+#define IOCTL_INTERNAL_KEYBOARD_DISABLE \
+ CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0400, METHOD_NEITHER, FILE_ANY_ACCESS)
+
+#define IOCTL_INTERNAL_MOUSE_CONNECT \
+ CTL_CODE(FILE_DEVICE_MOUSE, 0x0080, METHOD_NEITHER, FILE_ANY_ACCESS)
+
+#define IOCTL_INTERNAL_MOUSE_DISCONNECT \
+ CTL_CODE(FILE_DEVICE_MOUSE, 0x0100, METHOD_NEITHER, FILE_ANY_ACCESS)
+
+#define IOCTL_INTERNAL_MOUSE_ENABLE \
+ CTL_CODE(FILE_DEVICE_MOUSE, 0x0200, METHOD_NEITHER, FILE_ANY_ACCESS)
+
+#define IOCTL_INTERNAL_MOUSE_DISABLE \
+ CTL_CODE(FILE_DEVICE_MOUSE, 0x0400, METHOD_NEITHER, FILE_ANY_ACCESS)
+
+typedef struct _CONNECT_DATA {
+ PDEVICE_OBJECT ClassDeviceObject;
+ PVOID ClassService;
+} CONNECT_DATA, *PCONNECT_DATA;
+
+typedef VOID
+(STDAPICALLTYPE *PSERVICE_CALLBACK_ROUTINE)(
+ /*IN*/ PVOID NormalContext,
+ /*IN*/ PVOID SystemArgument1,
+ /*IN*/ PVOID SystemArgument2,
+ /*IN OUT*/ PVOID SystemArgument3);
+
+#endif /* __KBDMOU_H */
diff --git a/tcc/include/winapi/ddk/mcd.h b/tcc/include/winapi/ddk/mcd.h
new file mode 100644
index 0000000..dcf13d6
--- /dev/null
+++ b/tcc/include/winapi/ddk/mcd.h
@@ -0,0 +1,143 @@
+/*
+ * mcd.h
+ *
+ * Media changer driver interface
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __MCD_H
+#define __MCD_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+#include "srb.h"
+#include "scsi.h"
+#include "ntddchgr.h"
+
+#if defined(_MCD_)
+ #define CHANGERAPI DECLSPEC_EXPORT
+#else
+ #define CHANGERAPI DECLSPEC_IMPORT
+#endif
+
+#ifdef DebugPrint
+#undef DebugPrint
+#endif
+
+#ifdef DBG
+#define DebugPrint(x) ChangerClassDebugPrint x
+#else
+#define DebugPrint(x)
+#endif
+
+#define MAXIMUM_CHANGER_INQUIRY_DATA 252
+
+CHANGERAPI
+PVOID
+DDKAPI
+ChangerClassAllocatePool(
+ /*IN*/ POOL_TYPE PoolType,
+ /*IN*/ ULONG NumberOfBytes);
+
+VOID
+ChangerClassDebugPrint(
+ ULONG DebugPrintLevel,
+ PCCHAR DebugMessage,
+ ...);
+
+CHANGERAPI
+PVOID
+DDKAPI
+ChangerClassFreePool(
+ /*IN*/ PVOID PoolToFree);
+
+CHANGERAPI
+NTSTATUS
+DDKAPI
+ChangerClassSendSrbSynchronous(
+ /*IN*/ PDEVICE_OBJECT DeviceObject,
+ /*IN*/ PSCSI_REQUEST_BLOCK Srb,
+ /*IN*/ PVOID Buffer,
+ /*IN*/ ULONG BufferSize,
+ /*IN*/ BOOLEAN WriteToDevice);
+
+
+typedef NTSTATUS DDKAPI
+(*CHANGER_INITIALIZE)(
+ /*IN*/ PDEVICE_OBJECT DeviceObject);
+
+typedef ULONG DDKAPI
+(*CHANGER_EXTENSION_SIZE)(
+ VOID);
+
+typedef VOID DDKAPI
+(*CHANGER_ERROR_ROUTINE)(
+ PDEVICE_OBJECT DeviceObject,
+ PSCSI_REQUEST_BLOCK Srb,
+ NTSTATUS *Status,
+ BOOLEAN *Retry);
+
+typedef NTSTATUS DDKAPI
+(*CHANGER_COMMAND_ROUTINE)(
+ /*IN*/ PDEVICE_OBJECT DeviceObject,
+ /*IN*/ PIRP Irp);
+
+typedef NTSTATUS DDKAPI
+(*CHANGER_PERFORM_DIAGNOSTICS)(
+ /*IN*/ PDEVICE_OBJECT DeviceObject,
+ /*OUT*/ PWMI_CHANGER_PROBLEM_DEVICE_ERROR ChangerDeviceError);
+
+typedef struct _MCD_INIT_DATA {
+ ULONG InitDataSize;
+ CHANGER_EXTENSION_SIZE ChangerAdditionalExtensionSize;
+ CHANGER_INITIALIZE ChangerInitialize;
+ CHANGER_ERROR_ROUTINE ChangerError;
+ CHANGER_PERFORM_DIAGNOSTICS ChangerPerformDiagnostics;
+ CHANGER_COMMAND_ROUTINE ChangerGetParameters;
+ CHANGER_COMMAND_ROUTINE ChangerGetStatus;
+ CHANGER_COMMAND_ROUTINE ChangerGetProductData;
+ CHANGER_COMMAND_ROUTINE ChangerSetAccess;
+ CHANGER_COMMAND_ROUTINE ChangerGetElementStatus;
+ CHANGER_COMMAND_ROUTINE ChangerInitializeElementStatus;
+ CHANGER_COMMAND_ROUTINE ChangerSetPosition;
+ CHANGER_COMMAND_ROUTINE ChangerExchangeMedium;
+ CHANGER_COMMAND_ROUTINE ChangerMoveMedium;
+ CHANGER_COMMAND_ROUTINE ChangerReinitializeUnit;
+ CHANGER_COMMAND_ROUTINE ChangerQueryVolumeTags;
+} MCD_INIT_DATA, *PMCD_INIT_DATA;
+
+CHANGERAPI
+NTSTATUS
+DDKAPI
+ChangerClassInitialize(
+ /*IN*/ PDRIVER_OBJECT DriverObject,
+ /*IN*/ PUNICODE_STRING RegistryPath,
+ /*IN*/ PMCD_INIT_DATA MCDInitData);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __MCD_H */
diff --git a/tcc/include/winapi/ddk/miniport.h b/tcc/include/winapi/ddk/miniport.h
new file mode 100644
index 0000000..d5a7017
--- /dev/null
+++ b/tcc/include/winapi/ddk/miniport.h
@@ -0,0 +1,77 @@
+/*
+ * miniport.h
+ *
+ * Type definitions for miniport drivers
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __MINIPORT_H
+#define __MINIPORT_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+
+#define EMULATOR_READ_ACCESS 0x01
+#define EMULATOR_WRITE_ACCESS 0x02
+
+typedef enum _EMULATOR_PORT_ACCESS_TYPE {
+ Uchar,
+ Ushort,
+ Ulong
+} EMULATOR_PORT_ACCESS_TYPE, *PEMULATOR_PORT_ACCESS_TYPE;
+
+
+typedef struct _EMULATOR_ACCESS_ENTRY {
+ ULONG BasePort;
+ ULONG NumConsecutivePorts;
+ EMULATOR_PORT_ACCESS_TYPE AccessType;
+ UCHAR AccessMode;
+ UCHAR StringSupport;
+ PVOID Routine;
+} EMULATOR_ACCESS_ENTRY, *PEMULATOR_ACCESS_ENTRY;
+
+#ifndef VIDEO_ACCESS_RANGE_DEFINED /* also in video.h */
+#define VIDEO_ACCESS_RANGE_DEFINED
+typedef struct _VIDEO_ACCESS_RANGE {
+ PHYSICAL_ADDRESS RangeStart;
+ ULONG RangeLength;
+ UCHAR RangeInIoSpace;
+ UCHAR RangeVisible;
+ UCHAR RangeShareable;
+ UCHAR RangePassive;
+} VIDEO_ACCESS_RANGE, *PVIDEO_ACCESS_RANGE;
+#endif
+
+typedef VOID DDKAPI
+(*PBANKED_SECTION_ROUTINE)(
+ /*IN*/ ULONG ReadBank,
+ /*IN*/ ULONG WriteBank,
+ /*IN*/ PVOID Context);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __MINIPORT_H */
diff --git a/tcc/include/winapi/ddk/minitape.h b/tcc/include/winapi/ddk/minitape.h
new file mode 100644
index 0000000..fef88a0
--- /dev/null
+++ b/tcc/include/winapi/ddk/minitape.h
@@ -0,0 +1,223 @@
+/*
+ * minitape.h
+ *
+ * Minitape driver interface
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+#ifndef __MINITAPE_H
+#define __MINITAPE_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#pragma pack(push,4)
+
+#include "ntddk.h"
+
+#define MEDIA_ERASEABLE 0x00000001
+#define MEDIA_WRITE_ONCE 0x00000002
+#define MEDIA_READ_ONLY 0x00000004
+#define MEDIA_READ_WRITE 0x00000008
+#define MEDIA_WRITE_PROTECTED 0x00000100
+#define MEDIA_CURRENTLY_MOUNTED 0x80000000
+
+typedef enum _TAPE_STATUS {
+ TAPE_STATUS_SEND_SRB_AND_CALLBACK,
+ TAPE_STATUS_CALLBACK,
+ TAPE_STATUS_CHECK_TEST_UNIT_READY,
+ TAPE_STATUS_SUCCESS,
+ TAPE_STATUS_INSUFFICIENT_RESOURCES,
+ TAPE_STATUS_NOT_IMPLEMENTED,
+ TAPE_STATUS_INVALID_DEVICE_REQUEST,
+ TAPE_STATUS_INVALID_PARAMETER,
+ TAPE_STATUS_MEDIA_CHANGED,
+ TAPE_STATUS_BUS_RESET,
+ TAPE_STATUS_SETMARK_DETECTED,
+ TAPE_STATUS_FILEMARK_DETECTED,
+ TAPE_STATUS_BEGINNING_OF_MEDIA,
+ TAPE_STATUS_END_OF_MEDIA,
+ TAPE_STATUS_BUFFER_OVERFLOW,
+ TAPE_STATUS_NO_DATA_DETECTED,
+ TAPE_STATUS_EOM_OVERFLOW,
+ TAPE_STATUS_NO_MEDIA,
+ TAPE_STATUS_IO_DEVICE_ERROR,
+ TAPE_STATUS_UNRECOGNIZED_MEDIA,
+ TAPE_STATUS_DEVICE_NOT_READY,
+ TAPE_STATUS_MEDIA_WRITE_PROTECTED,
+ TAPE_STATUS_DEVICE_DATA_ERROR,
+ TAPE_STATUS_NO_SUCH_DEVICE,
+ TAPE_STATUS_INVALID_BLOCK_LENGTH,
+ TAPE_STATUS_IO_TIMEOUT,
+ TAPE_STATUS_DEVICE_NOT_CONNECTED,
+ TAPE_STATUS_DATA_OVERRUN,
+ TAPE_STATUS_DEVICE_BUSY,
+ TAPE_STATUS_REQUIRES_CLEANING,
+ TAPE_STATUS_CLEANER_CARTRIDGE_INSTALLED
+} TAPE_STATUS, *PTAPE_STATUS;
+
+#define INQUIRYDATABUFFERSIZE 36
+#ifndef _INQUIRYDATA_DEFINED /* also in scsi.h */
+#define _INQUIRYDATA_DEFINED
+typedef struct _INQUIRYDATA {
+ UCHAR DeviceType : 5;
+ UCHAR DeviceTypeQualifier : 3;
+ UCHAR DeviceTypeModifier : 7;
+ UCHAR RemovableMedia : 1;
+ union {
+ UCHAR Versions;
+ struct {
+ UCHAR ANSIVersion : 3;
+ UCHAR ECMAVersion : 3;
+ UCHAR ISOVersion : 2;
+ };
+ };
+ UCHAR ResponseDataFormat : 4;
+ UCHAR HiSupport : 1;
+ UCHAR NormACA : 1;
+ UCHAR TerminateTask : 1;
+ UCHAR AERC : 1;
+ UCHAR AdditionalLength;
+ UCHAR Reserved;
+ UCHAR Addr16 : 1;
+ UCHAR Addr32 : 1;
+ UCHAR AckReqQ: 1;
+ UCHAR MediumChanger : 1;
+ UCHAR MultiPort : 1;
+ UCHAR ReservedBit2 : 1;
+ UCHAR EnclosureServices : 1;
+ UCHAR ReservedBit3 : 1;
+ UCHAR SoftReset : 1;
+ UCHAR CommandQueue : 1;
+ UCHAR TransferDisable : 1;
+ UCHAR LinkedCommands : 1;
+ UCHAR Synchronous : 1;
+ UCHAR Wide16Bit : 1;
+ UCHAR Wide32Bit : 1;
+ UCHAR RelativeAddressing : 1;
+ UCHAR VendorId[8];
+ UCHAR ProductId[16];
+ UCHAR ProductRevisionLevel[4];
+ UCHAR VendorSpecific[20];
+ UCHAR Reserved3[40];
+} INQUIRYDATA, *PINQUIRYDATA;
+#endif
+
+typedef struct _MODE_CAPABILITIES_PAGE {
+ UCHAR PageCode : 6;
+ UCHAR Reserved1 : 2;
+ UCHAR PageLength;
+ UCHAR Reserved2[2];
+ UCHAR RO : 1;
+ UCHAR Reserved3 : 4;
+ UCHAR SPREV : 1;
+ UCHAR Reserved4 : 2;
+ UCHAR Reserved5 : 3;
+ UCHAR EFMT : 1;
+ UCHAR Reserved6 : 1;
+ UCHAR QFA : 1;
+ UCHAR Reserved7 : 2;
+ UCHAR LOCK : 1;
+ UCHAR LOCKED : 1;
+ UCHAR PREVENT : 1;
+ UCHAR UNLOAD : 1;
+ UCHAR Reserved8 : 2;
+ UCHAR ECC : 1;
+ UCHAR CMPRS : 1;
+ UCHAR Reserved9 : 1;
+ UCHAR BLK512 : 1;
+ UCHAR BLK1024 : 1;
+ UCHAR Reserved10 : 4;
+ UCHAR SLOWB : 1;
+ UCHAR MaximumSpeedSupported[2];
+ UCHAR MaximumStoredDefectedListEntries[2];
+ UCHAR ContinuousTransferLimit[2];
+ UCHAR CurrentSpeedSelected[2];
+ UCHAR BufferSize[2];
+ UCHAR Reserved11[2];
+} MODE_CAPABILITIES_PAGE, *PMODE_CAPABILITIES_PAGE;
+
+typedef BOOLEAN DDKAPI
+(*TAPE_VERIFY_INQUIRY_ROUTINE)(
+ /*IN*/ PINQUIRYDATA InquiryData,
+ /*IN*/ PMODE_CAPABILITIES_PAGE ModeCapabilitiesPage);
+
+typedef VOID DDKAPI
+(*TAPE_EXTENSION_INIT_ROUTINE)(
+ /*IN*/ PVOID MinitapeExtension,
+ /*IN*/ PINQUIRYDATA InquiryData,
+ /*IN*/ PMODE_CAPABILITIES_PAGE ModeCapabilitiesPage);
+
+typedef VOID DDKAPI
+(*TAPE_ERROR_ROUTINE)(
+ /*IN*/ PVOID MinitapeExtension,
+ /*IN*/ PSCSI_REQUEST_BLOCK Srb,
+ /*IN OUT*/ PTAPE_STATUS TapeStatus);
+
+typedef TAPE_STATUS DDKAPI
+(*TAPE_PROCESS_COMMAND_ROUTINE)(
+ /*IN OUT*/ PVOID MinitapeExtension,
+ /*IN OUT*/ PVOID CommandExtension,
+ /*IN OUT*/ PVOID CommandParameters,
+ /*IN OUT*/ PSCSI_REQUEST_BLOCK Srb,
+ /*IN*/ ULONG CallNumber,
+ /*IN*/ TAPE_STATUS StatusOfLastCommand,
+ /*IN OUT*/ PULONG RetryFlags);
+
+#define TAPE_RETRY_MASK 0x0000FFFF
+#define IGNORE_ERRORS 0x00010000
+#define RETURN_ERRORS 0x00020000
+
+typedef struct _TAPE_INIT_DATA {
+ TAPE_VERIFY_INQUIRY_ROUTINE VerifyInquiry;
+ BOOLEAN QueryModeCapabilitiesPage;
+ ULONG MinitapeExtensionSize;
+ TAPE_EXTENSION_INIT_ROUTINE ExtensionInit;
+ ULONG DefaultTimeOutValue;
+ TAPE_ERROR_ROUTINE TapeError;
+ ULONG CommandExtensionSize;
+ TAPE_PROCESS_COMMAND_ROUTINE CreatePartition;
+ TAPE_PROCESS_COMMAND_ROUTINE Erase;
+ TAPE_PROCESS_COMMAND_ROUTINE GetDriveParameters;
+ TAPE_PROCESS_COMMAND_ROUTINE GetMediaParameters;
+ TAPE_PROCESS_COMMAND_ROUTINE GetPosition;
+ TAPE_PROCESS_COMMAND_ROUTINE GetStatus;
+ TAPE_PROCESS_COMMAND_ROUTINE Prepare;
+ TAPE_PROCESS_COMMAND_ROUTINE SetDriveParameters;
+ TAPE_PROCESS_COMMAND_ROUTINE SetMediaParameters;
+ TAPE_PROCESS_COMMAND_ROUTINE SetPosition;
+ TAPE_PROCESS_COMMAND_ROUTINE WriteMarks;
+ TAPE_PROCESS_COMMAND_ROUTINE PreProcessReadWrite /* OPTIONAL */;
+} TAPE_INIT_DATA, *PTAPE_INIT_DATA;
+
+typedef struct _TAPE_PHYS_POSITION {
+ ULONG SeekBlockAddress;
+ ULONG SpaceBlockCount;
+} TAPE_PHYS_POSITION, PTAPE_PHYS_POSITION;
+
+#pragma pack(pop)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __MINITAPE_H */
diff --git a/tcc/include/winapi/ddk/mountdev.h b/tcc/include/winapi/ddk/mountdev.h
new file mode 100644
index 0000000..1bfed03
--- /dev/null
+++ b/tcc/include/winapi/ddk/mountdev.h
@@ -0,0 +1,79 @@
+/*
+ * mountdev.h
+ *
+ * Mount point manager/mounted devices interface.
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __MOUNTDEV_H
+#define __MOUNTDEV_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+#include "mountmgr.h"
+
+#define IOCTL_MOUNTDEV_QUERY_DEVICE_NAME \
+ CTL_CODE(MOUNTDEVCONTROLTYPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_MOUNTDEV_QUERY_UNIQUE_ID \
+ CTL_CODE(MOUNTDEVCONTROLTYPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_MOUNTDEV_UNIQUE_ID_CHANGE_NOTIFY \
+ CTL_CODE(MOUNTDEVCONTROLTYPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_MOUNTDEV_QUERY_SUGGESTED_LINK_NAME \
+ CTL_CODE(MOUNTDEVCONTROLTYPE, 3, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_MOUNTDEV_LINK_CREATED \
+ CTL_CODE(MOUNTDEVCONTROLTYPE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_MOUNTDEV_LINK_DELETED \
+ CTL_CODE(MOUNTDEVCONTROLTYPE, 5, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+
+typedef struct _MOUNTDEV_SUGGESTED_LINK_NAME {
+ BOOLEAN UseOnlyIfThereAreNoOtherLinks;
+ USHORT NameLength;
+ WCHAR Name[1];
+} MOUNTDEV_SUGGESTED_LINK_NAME, *PMOUNTDEV_SUGGESTED_LINK_NAME;
+
+typedef struct _MOUNTDEV_UNIQUE_ID {
+ USHORT UniqueIdLength;
+ UCHAR UniqueId[1];
+} MOUNTDEV_UNIQUE_ID, *PMOUNTDEV_UNIQUE_ID;
+
+typedef struct _MOUNTDEV_UNIQUE_ID_CHANGE_NOTIFY_OUTPUT {
+ ULONG Size;
+ USHORT OldUniqueIdOffset;
+ USHORT OldUniqueIdLength;
+ USHORT NewUniqueIdOffset;
+ USHORT NewUniqueIdLength;
+} MOUNTDEV_UNIQUE_ID_CHANGE_NOTIFY_OUTPUT;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __MOUNTDEV_H */
diff --git a/tcc/include/winapi/ddk/mountmgr.h b/tcc/include/winapi/ddk/mountmgr.h
new file mode 100644
index 0000000..6a56db8
--- /dev/null
+++ b/tcc/include/winapi/ddk/mountmgr.h
@@ -0,0 +1,139 @@
+/*
+ * mountmgr.h
+ *
+ * Mount point manager interface.
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __MOUNTMGR_H
+#define __MOUNTMGR_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+
+DEFINE_GUID(MOUNTDEV_MOUNTED_DEVICE_GUID,
+ 0x53f5630d, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
+
+#define MOUNTMGRCONTROLTYPE ((ULONG)'m')
+#define MOUNTDEVCONTROLTYPE ((ULONG)'M')
+
+#define MOUNTMGR_DEVICE_NAME L"\\Device\\MountPointManager"
+#define MOUNTMGR_DOS_DEVICE_NAME L"\\\\.\\MountPointManager"
+
+#define IOCTL_MOUNTMGR_CREATE_POINT \
+ CTL_CODE(MOUNTMGRCONTROLTYPE, 0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+
+#define IOCTL_MOUNTMGR_QUERY_POINTS \
+ CTL_CODE(MOUNTMGRCONTROLTYPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_MOUNTMGR_DELETE_POINTS \
+ CTL_CODE(MOUNTMGRCONTROLTYPE, 1, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+
+#define IOCTL_MOUNTMGR_DELETE_POINTS_DBONLY \
+ CTL_CODE(MOUNTMGRCONTROLTYPE, 3, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+
+#define IOCTL_MOUNTMGR_NEXT_DRIVE_LETTER \
+ CTL_CODE(MOUNTMGRCONTROLTYPE, 4, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+
+#define IOCTL_MOUNTMGR_AUTO_DL_ASSIGNMENTS \
+ CTL_CODE(MOUNTMGRCONTROLTYPE, 5, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+
+#define IOCTL_MOUNTMGR_VOLUME_MOUNT_POINT_CREATED \
+ CTL_CODE(MOUNTMGRCONTROLTYPE, 6, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+
+#define IOCTL_MOUNTMGR_VOLUME_MOUNT_POINT_DELETED \
+ CTL_CODE(MOUNTMGRCONTROLTYPE, 7, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+
+#define IOCTL_MOUNTMGR_CHANGE_NOTIFY \
+ CTL_CODE(MOUNTMGRCONTROLTYPE, 8, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_MOUNTMGR_KEEP_LINKS_WHEN_OFFLINE \
+ CTL_CODE(MOUNTMGRCONTROLTYPE, 9, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+
+#define IOCTL_MOUNTMGR_CHECK_UNPROCESSED_VOLUMES \
+ CTL_CODE(MOUNTMGRCONTROLTYPE, 10, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_MOUNTMGR_VOLUME_ARRIVAL_NOTIFICATION \
+ CTL_CODE(MOUNTMGRCONTROLTYPE, 11, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+
+typedef struct _MOUNTDEV_NAME {
+ USHORT NameLength;
+ WCHAR Name[1];
+} MOUNTDEV_NAME, *PMOUNTDEV_NAME;
+
+typedef struct _MOUNTMGR_CHANGE_NOTIFY_INFO {
+ ULONG EpicNumber;
+} MOUNTMGR_CHANGE_NOTIFY_INFO, *PMOUNTMGR_CHANGE_NOTIFY_INFO;
+
+typedef struct _MOUNTMGR_CREATE_POINT_INPUT {
+ USHORT SymbolicLinkNameOffset;
+ USHORT SymbolicLinkNameLength;
+ USHORT DeviceNameOffset;
+ USHORT DeviceNameLength;
+} MOUNTMGR_CREATE_POINT_INPUT, *PMOUNTMGR_CREATE_POINT_INPUT;
+
+typedef struct _MOUNTMGR_DRIVE_LETTER_INFORMATION {
+ BOOLEAN DriveLetterWasAssigned;
+ UCHAR CurrentDriveLetter;
+} MOUNTMGR_DRIVE_LETTER_INFORMATION, *PMOUNTMGR_DRIVE_LETTER_INFORMATION;
+
+typedef struct _MOUNTMGR_DRIVE_LETTER_TARGET {
+ USHORT DeviceNameLength;
+ WCHAR DeviceName[1];
+} MOUNTMGR_DRIVE_LETTER_TARGET, *PMOUNTMGR_DRIVE_LETTER_TARGET;
+
+typedef struct _MOUNTMGR_MOUNT_POINT {
+ ULONG SymbolicLinkNameOffset;
+ USHORT SymbolicLinkNameLength;
+ ULONG UniqueIdOffset;
+ USHORT UniqueIdLength;
+ ULONG DeviceNameOffset;
+ USHORT DeviceNameLength;
+} MOUNTMGR_MOUNT_POINT, *PMOUNTMGR_MOUNT_POINT;
+
+typedef struct _MOUNTMGR_MOUNT_POINTS {
+ ULONG Size;
+ ULONG NumberOfMountPoints;
+ MOUNTMGR_MOUNT_POINT MountPoints[1];
+} MOUNTMGR_MOUNT_POINTS, *PMOUNTMGR_MOUNT_POINTS;
+
+typedef struct _MOUNTMGR_TARGET_NAME {
+ USHORT DeviceNameLength;
+ WCHAR DeviceName[1];
+} MOUNTMGR_TARGET_NAME, *PMOUNTMGR_TARGET_NAME;
+
+typedef struct _MOUNTMGR_VOLUME_MOUNT_POINT {
+ USHORT SourceVolumeNameOffset;
+ USHORT SourceVolumeNameLength;
+ USHORT TargetVolumeNameOffset;
+ USHORT TargetVolumeNameLength;
+} MOUNTMGR_VOLUME_MOUNT_POINT, *PMOUNTMGR_VOLUME_MOUNT_POINT;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __MOUNTMGR_H */
diff --git a/tcc/include/winapi/ddk/ndis.h b/tcc/include/winapi/ddk/ndis.h
new file mode 100644
index 0000000..2e61bea
--- /dev/null
+++ b/tcc/include/winapi/ddk/ndis.h
@@ -0,0 +1,5317 @@
+/*
+ * ndis.h
+ *
+ * Network Device Interface Specification definitions
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * DEFINES: i386 - Target platform is i386
+ * _NDIS_ - Define only for NDIS library
+ * NDIS_MINIPORT_DRIVER - Define only for NDIS miniport drivers
+ * NDIS40 - Use NDIS 4.0 structures by default
+ * NDIS50 - Use NDIS 5.0 structures by default
+ * NDIS50_MINIPORT - Building NDIS 5.0 miniport driver
+ * NDIS51_MINIPORT - Building NDIS 5.1 miniport driver
+ */
+#ifndef __NDIS_H
+#define __NDIS_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+#include "ntddndis.h"
+#include "netpnp.h"
+#include "netevent.h"
+#include <winsock2.h>
+
+#if defined(_NDIS_)
+ #define NDISAPI DECLSPEC_EXPORT
+#else
+ #define NDISAPI DECLSPEC_IMPORT
+#endif
+
+#if defined(NDIS50_MINIPORT)
+#ifndef NDIS50
+#define NDIS50
+#define NDIS_MINIPORT_MAJOR_VERSION 5
+#define NDIS_MINIPORT_MINOR_VERSION 0
+#endif
+#endif /* NDIS50_MINIPORT */
+
+#if defined(NDIS51_MINIPORT)
+#ifndef NDIS51
+#define NDIS51
+#define NDIS_MINIPORT_MAJOR_VERSION 5
+#define NDIS_MINIPORT_MINOR_VERSION 1
+#endif
+#endif /* NDIS51_MINIPORT */
+
+/* NDIS 3.0 is default */
+#if !defined(NDIS30) || !defined(NDIS40) || !defined(NDIS50) || !defined(NDIS51)
+#define NDIS30
+#endif /* !NDIS30 || !NDIS40 || !NDIS50 || !NDIS51 */
+
+#if 1
+/* FIXME: */
+typedef PVOID QUEUED_CLOSE;
+#endif
+
+typedef ULONG NDIS_OID, *PNDIS_OID;
+
+typedef struct _X_FILTER FDDI_FILTER, *PFDDI_FILTER;
+typedef struct _X_FILTER TR_FILTER, *PTR_FILTER;
+typedef struct _X_FILTER NULL_FILTER, *PNULL_FILTER;
+
+typedef struct _REFERENCE {
+ KSPIN_LOCK SpinLock;
+ USHORT ReferenceCount;
+ BOOLEAN Closing;
+} REFERENCE, * PREFERENCE;
+
+
+/* NDIS base types */
+
+typedef struct _NDIS_SPIN_LOCK {
+ KSPIN_LOCK SpinLock;
+ KIRQL OldIrql;
+} NDIS_SPIN_LOCK, * PNDIS_SPIN_LOCK;
+
+typedef struct _NDIS_EVENT {
+ KEVENT Event;
+} NDIS_EVENT, *PNDIS_EVENT;
+
+typedef PVOID NDIS_HANDLE, *PNDIS_HANDLE;
+typedef int NDIS_STATUS, *PNDIS_STATUS;
+
+typedef ANSI_STRING NDIS_ANSI_STRING, *PNDIS_ANSI_STRING;
+typedef UNICODE_STRING NDIS_STRING, *PNDIS_STRING;
+
+typedef MDL NDIS_BUFFER, *PNDIS_BUFFER;
+typedef ULONG NDIS_ERROR_CODE, *PNDIS_ERROR_CODE;
+
+
+/* NDIS_STATUS constants */
+#define NDIS_STATUS_SUCCESS ((NDIS_STATUS)STATUS_SUCCESS)
+#define NDIS_STATUS_PENDING ((NDIS_STATUS)STATUS_PENDING)
+#define NDIS_STATUS_NOT_RECOGNIZED ((NDIS_STATUS)0x00010001L)
+#define NDIS_STATUS_NOT_COPIED ((NDIS_STATUS)0x00010002L)
+#define NDIS_STATUS_NOT_ACCEPTED ((NDIS_STATUS)0x00010003L)
+#define NDIS_STATUS_CALL_ACTIVE ((NDIS_STATUS)0x00010007L)
+#define NDIS_STATUS_ONLINE ((NDIS_STATUS)0x40010003L)
+#define NDIS_STATUS_RESET_START ((NDIS_STATUS)0x40010004L)
+#define NDIS_STATUS_RESET_END ((NDIS_STATUS)0x40010005L)
+#define NDIS_STATUS_RING_STATUS ((NDIS_STATUS)0x40010006L)
+#define NDIS_STATUS_CLOSED ((NDIS_STATUS)0x40010007L)
+#define NDIS_STATUS_WAN_LINE_UP ((NDIS_STATUS)0x40010008L)
+#define NDIS_STATUS_WAN_LINE_DOWN ((NDIS_STATUS)0x40010009L)
+#define NDIS_STATUS_WAN_FRAGMENT ((NDIS_STATUS)0x4001000AL)
+#define NDIS_STATUS_MEDIA_CONNECT ((NDIS_STATUS)0x4001000BL)
+#define NDIS_STATUS_MEDIA_DISCONNECT ((NDIS_STATUS)0x4001000CL)
+#define NDIS_STATUS_HARDWARE_LINE_UP ((NDIS_STATUS)0x4001000DL)
+#define NDIS_STATUS_HARDWARE_LINE_DOWN ((NDIS_STATUS)0x4001000EL)
+#define NDIS_STATUS_INTERFACE_UP ((NDIS_STATUS)0x4001000FL)
+#define NDIS_STATUS_INTERFACE_DOWN ((NDIS_STATUS)0x40010010L)
+#define NDIS_STATUS_MEDIA_BUSY ((NDIS_STATUS)0x40010011L)
+#define NDIS_STATUS_MEDIA_SPECIFIC_INDICATION ((NDIS_STATUS)0x40010012L)
+#define NDIS_STATUS_WW_INDICATION NDIS_STATUS_MEDIA_SPECIFIC_INDICATION
+#define NDIS_STATUS_LINK_SPEED_CHANGE ((NDIS_STATUS)0x40010013L)
+#define NDIS_STATUS_WAN_GET_STATS ((NDIS_STATUS)0x40010014L)
+#define NDIS_STATUS_WAN_CO_FRAGMENT ((NDIS_STATUS)0x40010015L)
+#define NDIS_STATUS_WAN_CO_LINKPARAMS ((NDIS_STATUS)0x40010016L)
+
+#define NDIS_STATUS_NOT_RESETTABLE ((NDIS_STATUS)0x80010001L)
+#define NDIS_STATUS_SOFT_ERRORS ((NDIS_STATUS)0x80010003L)
+#define NDIS_STATUS_HARD_ERRORS ((NDIS_STATUS)0x80010004L)
+#define NDIS_STATUS_BUFFER_OVERFLOW ((NDIS_STATUS)STATUS_BUFFER_OVERFLOW)
+
+#define NDIS_STATUS_FAILURE ((NDIS_STATUS)STATUS_UNSUCCESSFUL)
+#define NDIS_STATUS_RESOURCES ((NDIS_STATUS)STATUS_INSUFFICIENT_RESOURCES)
+#define NDIS_STATUS_CLOSING ((NDIS_STATUS)0xC0010002L)
+#define NDIS_STATUS_BAD_VERSION ((NDIS_STATUS)0xC0010004L)
+#define NDIS_STATUS_BAD_CHARACTERISTICS ((NDIS_STATUS)0xC0010005L)
+#define NDIS_STATUS_ADAPTER_NOT_FOUND ((NDIS_STATUS)0xC0010006L)
+#define NDIS_STATUS_OPEN_FAILED ((NDIS_STATUS)0xC0010007L)
+#define NDIS_STATUS_DEVICE_FAILED ((NDIS_STATUS)0xC0010008L)
+#define NDIS_STATUS_MULTICAST_FULL ((NDIS_STATUS)0xC0010009L)
+#define NDIS_STATUS_MULTICAST_EXISTS ((NDIS_STATUS)0xC001000AL)
+#define NDIS_STATUS_MULTICAST_NOT_FOUND ((NDIS_STATUS)0xC001000BL)
+#define NDIS_STATUS_REQUEST_ABORTED ((NDIS_STATUS)0xC001000CL)
+#define NDIS_STATUS_RESET_IN_PROGRESS ((NDIS_STATUS)0xC001000DL)
+#define NDIS_STATUS_CLOSING_INDICATING ((NDIS_STATUS)0xC001000EL)
+#define NDIS_STATUS_NOT_SUPPORTED ((NDIS_STATUS)STATUS_NOT_SUPPORTED)
+#define NDIS_STATUS_INVALID_PACKET ((NDIS_STATUS)0xC001000FL)
+#define NDIS_STATUS_OPEN_LIST_FULL ((NDIS_STATUS)0xC0010010L)
+#define NDIS_STATUS_ADAPTER_NOT_READY ((NDIS_STATUS)0xC0010011L)
+#define NDIS_STATUS_ADAPTER_NOT_OPEN ((NDIS_STATUS)0xC0010012L)
+#define NDIS_STATUS_NOT_INDICATING ((NDIS_STATUS)0xC0010013L)
+#define NDIS_STATUS_INVALID_LENGTH ((NDIS_STATUS)0xC0010014L)
+#define NDIS_STATUS_INVALID_DATA ((NDIS_STATUS)0xC0010015L)
+#define NDIS_STATUS_BUFFER_TOO_SHORT ((NDIS_STATUS)0xC0010016L)
+#define NDIS_STATUS_INVALID_OID ((NDIS_STATUS)0xC0010017L)
+#define NDIS_STATUS_ADAPTER_REMOVED ((NDIS_STATUS)0xC0010018L)
+#define NDIS_STATUS_UNSUPPORTED_MEDIA ((NDIS_STATUS)0xC0010019L)
+#define NDIS_STATUS_GROUP_ADDRESS_IN_USE ((NDIS_STATUS)0xC001001AL)
+#define NDIS_STATUS_FILE_NOT_FOUND ((NDIS_STATUS)0xC001001BL)
+#define NDIS_STATUS_ERROR_READING_FILE ((NDIS_STATUS)0xC001001CL)
+#define NDIS_STATUS_ALREADY_MAPPED ((NDIS_STATUS)0xC001001DL)
+#define NDIS_STATUS_RESOURCE_CONFLICT ((NDIS_STATUS)0xC001001EL)
+#define NDIS_STATUS_NO_CABLE ((NDIS_STATUS)0xC001001FL)
+
+#define NDIS_STATUS_INVALID_SAP ((NDIS_STATUS)0xC0010020L)
+#define NDIS_STATUS_SAP_IN_USE ((NDIS_STATUS)0xC0010021L)
+#define NDIS_STATUS_INVALID_ADDRESS ((NDIS_STATUS)0xC0010022L)
+#define NDIS_STATUS_VC_NOT_ACTIVATED ((NDIS_STATUS)0xC0010023L)
+#define NDIS_STATUS_DEST_OUT_OF_ORDER ((NDIS_STATUS)0xC0010024L)
+#define NDIS_STATUS_VC_NOT_AVAILABLE ((NDIS_STATUS)0xC0010025L)
+#define NDIS_STATUS_CELLRATE_NOT_AVAILABLE ((NDIS_STATUS)0xC0010026L)
+#define NDIS_STATUS_INCOMPATABLE_QOS ((NDIS_STATUS)0xC0010027L)
+#define NDIS_STATUS_AAL_PARAMS_UNSUPPORTED ((NDIS_STATUS)0xC0010028L)
+#define NDIS_STATUS_NO_ROUTE_TO_DESTINATION ((NDIS_STATUS)0xC0010029L)
+
+#define NDIS_STATUS_TOKEN_RING_OPEN_ERROR ((NDIS_STATUS)0xC0011000L)
+#define NDIS_STATUS_INVALID_DEVICE_REQUEST ((NDIS_STATUS)STATUS_INVALID_DEVICE_REQUEST)
+#define NDIS_STATUS_NETWORK_UNREACHABLE ((NDIS_STATUS)STATUS_NETWORK_UNREACHABLE)
+
+
+/* NDIS error codes for error logging */
+
+#define NDIS_ERROR_CODE_RESOURCE_CONFLICT EVENT_NDIS_RESOURCE_CONFLICT
+#define NDIS_ERROR_CODE_OUT_OF_RESOURCES EVENT_NDIS_OUT_OF_RESOURCE
+#define NDIS_ERROR_CODE_HARDWARE_FAILURE EVENT_NDIS_HARDWARE_FAILURE
+#define NDIS_ERROR_CODE_ADAPTER_NOT_FOUND EVENT_NDIS_ADAPTER_NOT_FOUND
+#define NDIS_ERROR_CODE_INTERRUPT_CONNECT EVENT_NDIS_INTERRUPT_CONNECT
+#define NDIS_ERROR_CODE_DRIVER_FAILURE EVENT_NDIS_DRIVER_FAILURE
+#define NDIS_ERROR_CODE_BAD_VERSION EVENT_NDIS_BAD_VERSION
+#define NDIS_ERROR_CODE_TIMEOUT EVENT_NDIS_TIMEOUT
+#define NDIS_ERROR_CODE_NETWORK_ADDRESS EVENT_NDIS_NETWORK_ADDRESS
+#define NDIS_ERROR_CODE_UNSUPPORTED_CONFIGURATION EVENT_NDIS_UNSUPPORTED_CONFIGURATION
+#define NDIS_ERROR_CODE_INVALID_VALUE_FROM_ADAPTER EVENT_NDIS_INVALID_VALUE_FROM_ADAPTER
+#define NDIS_ERROR_CODE_MISSING_CONFIGURATION_PARAMETER EVENT_NDIS_MISSING_CONFIGURATION_PARAMETER
+#define NDIS_ERROR_CODE_BAD_IO_BASE_ADDRESS EVENT_NDIS_BAD_IO_BASE_ADDRESS
+#define NDIS_ERROR_CODE_RECEIVE_SPACE_SMALL EVENT_NDIS_RECEIVE_SPACE_SMALL
+#define NDIS_ERROR_CODE_ADAPTER_DISABLED EVENT_NDIS_ADAPTER_DISABLED
+
+
+/* Memory allocation flags. Used by Ndis[Allocate|Free]Memory */
+#define NDIS_MEMORY_CONTIGUOUS 0x00000001
+#define NDIS_MEMORY_NONCACHED 0x00000002
+
+/* NIC attribute flags. Used by NdisMSetAttributes(Ex) */
+#define NDIS_ATTRIBUTE_IGNORE_PACKET_TIMEOUT 0x00000001
+#define NDIS_ATTRIBUTE_IGNORE_REQUEST_TIMEOUT 0x00000002
+#define NDIS_ATTRIBUTE_IGNORE_TOKEN_RING_ERRORS 0x00000004
+#define NDIS_ATTRIBUTE_BUS_MASTER 0x00000008
+#define NDIS_ATTRIBUTE_INTERMEDIATE_DRIVER 0x00000010
+#define NDIS_ATTRIBUTE_DESERIALIZE 0x00000020
+#define NDIS_ATTRIBUTE_NO_HALT_ON_SUSPEND 0x00000040
+#define NDIS_ATTRIBUTE_SURPRISE_REMOVE_OK 0x00000080
+#define NDIS_ATTRIBUTE_NOT_CO_NDIS 0x00000100
+#define NDIS_ATTRIBUTE_USES_SAFE_BUFFER_APIS 0x00000200
+
+
+/* Lock */
+
+typedef union _NDIS_RW_LOCK_REFCOUNT {
+ UINT RefCount;
+ UCHAR cacheLine[16];
+} NDIS_RW_LOCK_REFCOUNT;
+
+typedef struct _NDIS_RW_LOCK {
+ union {
+ struct {
+ KSPIN_LOCK SpinLock;
+ PVOID Context;
+ } s;
+ UCHAR Reserved[16];
+ } u;
+
+ NDIS_RW_LOCK_REFCOUNT RefCount[MAXIMUM_PROCESSORS];
+} NDIS_RW_LOCK, *PNDIS_RW_LOCK;
+
+typedef struct _LOCK_STATE {
+ USHORT LockState;
+ KIRQL OldIrql;
+} LOCK_STATE, *PLOCK_STATE;
+
+
+
+/* Timer */
+
+typedef VOID DDKAPI
+(*PNDIS_TIMER_FUNCTION)(
+ /*IN*/ PVOID SystemSpecific1,
+ /*IN*/ PVOID FunctionContext,
+ /*IN*/ PVOID SystemSpecific2,
+ /*IN*/ PVOID SystemSpecific3);
+
+typedef struct _NDIS_TIMER {
+ KTIMER Timer;
+ KDPC Dpc;
+} NDIS_TIMER, *PNDIS_TIMER;
+
+
+
+/* Hardware */
+
+typedef CM_MCA_POS_DATA NDIS_MCA_POS_DATA, *PNDIS_MCA_POS_DATA;
+typedef CM_EISA_SLOT_INFORMATION NDIS_EISA_SLOT_INFORMATION, *PNDIS_EISA_SLOT_INFORMATION;
+typedef CM_EISA_FUNCTION_INFORMATION NDIS_EISA_FUNCTION_INFORMATION, *PNDIS_EISA_FUNCTION_INFORMATION;
+typedef CM_PARTIAL_RESOURCE_LIST NDIS_RESOURCE_LIST, *PNDIS_RESOURCE_LIST;
+
+/* Hardware status codes (OID_GEN_HARDWARE_STATUS) */
+typedef enum _NDIS_HARDWARE_STATUS {
+ NdisHardwareStatusReady,
+ NdisHardwareStatusInitializing,
+ NdisHardwareStatusReset,
+ NdisHardwareStatusClosing,
+ NdisHardwareStatusNotReady
+} NDIS_HARDWARE_STATUS, *PNDIS_HARDWARE_STATUS;
+
+/* OID_GEN_GET_TIME_CAPS */
+typedef struct _GEN_GET_TIME_CAPS {
+ ULONG Flags;
+ ULONG ClockPrecision;
+} GEN_GET_TIME_CAPS, *PGEN_GET_TIME_CAPS;
+
+/* Flag bits */
+#define READABLE_LOCAL_CLOCK 0x00000001
+#define CLOCK_NETWORK_DERIVED 0x00000002
+#define CLOCK_PRECISION 0x00000004
+#define RECEIVE_TIME_INDICATION_CAPABLE 0x00000008
+#define TIMED_SEND_CAPABLE 0x00000010
+#define TIME_STAMP_CAPABLE 0x00000020
+
+/* OID_GEN_GET_NETCARD_TIME */
+typedef struct _GEN_GET_NETCARD_TIME {
+ ULONGLONG ReadTime;
+} GEN_GET_NETCARD_TIME, *PGEN_GET_NETCARD_TIME;
+
+/* NDIS driver medium (OID_GEN_MEDIA_SUPPORTED / OID_GEN_MEDIA_IN_USE) */
+typedef enum _NDIS_MEDIUM {
+ NdisMedium802_3,
+ NdisMedium802_5,
+ NdisMediumFddi,
+ NdisMediumWan,
+ NdisMediumLocalTalk,
+ NdisMediumDix,
+ NdisMediumArcnetRaw,
+ NdisMediumArcnet878_2,
+ NdisMediumAtm,
+ NdisMediumWirelessWan,
+ NdisMediumIrda,
+ NdisMediumBpc,
+ NdisMediumCoWan,
+ NdisMedium1394,
+ NdisMediumMax
+} NDIS_MEDIUM, *PNDIS_MEDIUM;
+
+/* NDIS packet filter bits (OID_GEN_CURRENT_PACKET_FILTER) */
+#define NDIS_PACKET_TYPE_DIRECTED 0x00000001
+#define NDIS_PACKET_TYPE_MULTICAST 0x00000002
+#define NDIS_PACKET_TYPE_ALL_MULTICAST 0x00000004
+#define NDIS_PACKET_TYPE_BROADCAST 0x00000008
+#define NDIS_PACKET_TYPE_SOURCE_ROUTING 0x00000010
+#define NDIS_PACKET_TYPE_PROMISCUOUS 0x00000020
+#define NDIS_PACKET_TYPE_SMT 0x00000040
+#define NDIS_PACKET_TYPE_ALL_LOCAL 0x00000080
+#define NDIS_PACKET_TYPE_GROUP 0x00001000
+#define NDIS_PACKET_TYPE_ALL_FUNCTIONAL 0x00002000
+#define NDIS_PACKET_TYPE_FUNCTIONAL 0x00004000
+#define NDIS_PACKET_TYPE_MAC_FRAME 0x00008000
+
+/* NDIS protocol option bits (OID_GEN_PROTOCOL_OPTIONS) */
+#define NDIS_PROT_OPTION_ESTIMATED_LENGTH 0x00000001
+#define NDIS_PROT_OPTION_NO_LOOPBACK 0x00000002
+#define NDIS_PROT_OPTION_NO_RSVD_ON_RCVPKT 0x00000004
+
+/* NDIS MAC option bits (OID_GEN_MAC_OPTIONS) */
+#define NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA 0x00000001
+#define NDIS_MAC_OPTION_RECEIVE_SERIALIZED 0x00000002
+#define NDIS_MAC_OPTION_TRANSFERS_NOT_PEND 0x00000004
+#define NDIS_MAC_OPTION_NO_LOOPBACK 0x00000008
+#define NDIS_MAC_OPTION_FULL_DUPLEX 0x00000010
+#define NDIS_MAC_OPTION_EOTX_INDICATION 0x00000020
+#define NDIS_MAC_OPTION_8021P_PRIORITY 0x00000040
+#define NDIS_MAC_OPTION_RESERVED 0x80000000
+
+/* State of the LAN media (OID_GEN_MEDIA_CONNECT_STATUS) */
+typedef enum _NDIS_MEDIA_STATE {
+ NdisMediaStateConnected,
+ NdisMediaStateDisconnected
+} NDIS_MEDIA_STATE, *PNDIS_MEDIA_STATE;
+
+/* OID_GEN_SUPPORTED_GUIDS */
+typedef struct _NDIS_GUID {
+ GUID Guid;
+ union {
+ NDIS_OID Oid;
+ NDIS_STATUS Status;
+ } u;
+ ULONG Size;
+ ULONG Flags;
+} NDIS_GUID, *PNDIS_GUID;
+
+#define NDIS_GUID_TO_OID 0x00000001
+#define NDIS_GUID_TO_STATUS 0x00000002
+#define NDIS_GUID_ANSI_STRING 0x00000004
+#define NDIS_GUID_UNICODE_STRING 0x00000008
+#define NDIS_GUID_ARRAY 0x00000010
+
+
+typedef struct _NDIS_PACKET_POOL {
+ NDIS_SPIN_LOCK SpinLock;
+ struct _NDIS_PACKET *FreeList;
+ UINT PacketLength;
+ UCHAR Buffer[1];
+} NDIS_PACKET_POOL, * PNDIS_PACKET_POOL;
+
+/* NDIS_PACKET_PRIVATE.Flags constants */
+#define fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO 0x40
+#define fPACKET_ALLOCATED_BY_NDIS 0x80
+
+typedef struct _NDIS_PACKET_PRIVATE {
+ UINT PhysicalCount;
+ UINT TotalLength;
+ PNDIS_BUFFER Head;
+ PNDIS_BUFFER Tail;
+ PNDIS_PACKET_POOL Pool;
+ UINT Count;
+ ULONG Flags;
+ BOOLEAN ValidCounts;
+ UCHAR NdisPacketFlags;
+ USHORT NdisPacketOobOffset;
+} NDIS_PACKET_PRIVATE, * PNDIS_PACKET_PRIVATE;
+
+typedef struct _NDIS_PACKET {
+ NDIS_PACKET_PRIVATE Private;
+ _ANONYMOUS_UNION union {
+ _ANONYMOUS_STRUCT struct {
+ UCHAR MiniportReserved[2 * sizeof(PVOID)];
+ UCHAR WrapperReserved[2 * sizeof(PVOID)];
+ } DUMMYSTRUCTNAME;
+ _ANONYMOUS_STRUCT struct {
+ UCHAR MiniportReservedEx[3 * sizeof(PVOID)];
+ UCHAR WrapperReservedEx[sizeof(PVOID)];
+ } DUMMYSTRUCTNAME;
+ _ANONYMOUS_STRUCT struct {
+ UCHAR MacReserved[4 * sizeof(PVOID)];
+ } DUMMYSTRUCTNAME;
+ } DUMMYUNIONNAME;
+ ULONG_PTR Reserved[2];
+ UCHAR ProtocolReserved[1];
+} NDIS_PACKET, *PNDIS_PACKET, **PPNDIS_PACKET;
+
+typedef enum _NDIS_CLASS_ID {
+ NdisClass802_3Priority,
+ NdisClassWirelessWanMbxMailbox,
+ NdisClassIrdaPacketInfo,
+ NdisClassAtmAALInfo
+} NDIS_CLASS_ID;
+
+typedef struct MediaSpecificInformation {
+ UINT NextEntryOffset;
+ NDIS_CLASS_ID ClassId;
+ UINT Size;
+ UCHAR ClassInformation[1];
+} MEDIA_SPECIFIC_INFORMATION;
+
+typedef struct _NDIS_PACKET_OOB_DATA {
+ _ANONYMOUS_UNION union {
+ ULONGLONG TimeToSend;
+ ULONGLONG TimeSent;
+ } DUMMYUNIONNAME;
+ ULONGLONG TimeReceived;
+ UINT HeaderSize;
+ UINT SizeMediaSpecificInfo;
+ PVOID MediaSpecificInformation;
+ NDIS_STATUS Status;
+} NDIS_PACKET_OOB_DATA, *PNDIS_PACKET_OOB_DATA;
+
+typedef struct _NDIS_PM_PACKET_PATTERN {
+ ULONG Priority;
+ ULONG Reserved;
+ ULONG MaskSize;
+ ULONG PatternOffset;
+ ULONG PatternSize;
+ ULONG PatternFlags;
+} NDIS_PM_PACKET_PATTERN, *PNDIS_PM_PACKET_PATTERN;
+
+
+/* Request types used by NdisRequest */
+typedef enum _NDIS_REQUEST_TYPE {
+ NdisRequestQueryInformation,
+ NdisRequestSetInformation,
+ NdisRequestQueryStatistics,
+ NdisRequestOpen,
+ NdisRequestClose,
+ NdisRequestSend,
+ NdisRequestTransferData,
+ NdisRequestReset,
+ NdisRequestGeneric1,
+ NdisRequestGeneric2,
+ NdisRequestGeneric3,
+ NdisRequestGeneric4
+} NDIS_REQUEST_TYPE, *PNDIS_REQUEST_TYPE;
+
+typedef struct _NDIS_REQUEST {
+ UCHAR MacReserved[4 * sizeof(PVOID)];
+ NDIS_REQUEST_TYPE RequestType;
+ union _DATA {
+ struct QUERY_INFORMATION {
+ NDIS_OID Oid;
+ PVOID InformationBuffer;
+ UINT InformationBufferLength;
+ UINT BytesWritten;
+ UINT BytesNeeded;
+ } QUERY_INFORMATION;
+ struct SET_INFORMATION {
+ NDIS_OID Oid;
+ PVOID InformationBuffer;
+ UINT InformationBufferLength;
+ UINT BytesRead;
+ UINT BytesNeeded;
+ } SET_INFORMATION;
+ } DATA;
+#if (defined(NDIS50) || defined(NDIS51))
+ UCHAR NdisReserved[9 * sizeof(PVOID)];
+ union {
+ UCHAR CallMgrReserved[2 * sizeof(PVOID)];
+ UCHAR ProtocolReserved[2 * sizeof(PVOID)];
+ };
+ UCHAR MiniportReserved[2 * sizeof(PVOID)];
+#endif
+} NDIS_REQUEST, *PNDIS_REQUEST;
+
+
+
+/* Wide Area Networks definitions */
+
+typedef struct _NDIS_WAN_PACKET {
+ LIST_ENTRY WanPacketQueue;
+ PUCHAR CurrentBuffer;
+ ULONG CurrentLength;
+ PUCHAR StartBuffer;
+ PUCHAR EndBuffer;
+ PVOID ProtocolReserved1;
+ PVOID ProtocolReserved2;
+ PVOID ProtocolReserved3;
+ PVOID ProtocolReserved4;
+ PVOID MacReserved1;
+ PVOID MacReserved2;
+ PVOID MacReserved3;
+ PVOID MacReserved4;
+} NDIS_WAN_PACKET, *PNDIS_WAN_PACKET;
+
+
+
+/* DMA channel information */
+
+typedef struct _NDIS_DMA_DESCRIPTION {
+ BOOLEAN DemandMode;
+ BOOLEAN AutoInitialize;
+ BOOLEAN DmaChannelSpecified;
+ DMA_WIDTH DmaWidth;
+ DMA_SPEED DmaSpeed;
+ ULONG DmaPort;
+ ULONG DmaChannel;
+} NDIS_DMA_DESCRIPTION, *PNDIS_DMA_DESCRIPTION;
+
+typedef struct _NDIS_DMA_BLOCK {
+ PVOID MapRegisterBase;
+ KEVENT AllocationEvent;
+ PADAPTER_OBJECT SystemAdapterObject;
+ PVOID Miniport;
+ BOOLEAN InProgress;
+} NDIS_DMA_BLOCK, *PNDIS_DMA_BLOCK;
+
+
+/* Possible hardware architecture */
+typedef enum _NDIS_INTERFACE_TYPE {
+ NdisInterfaceInternal = Internal,
+ NdisInterfaceIsa = Isa,
+ NdisInterfaceEisa = Eisa,
+ NdisInterfaceMca = MicroChannel,
+ NdisInterfaceTurboChannel = TurboChannel,
+ NdisInterfacePci = PCIBus,
+ NdisInterfacePcMcia = PCMCIABus,
+ NdisInterfaceCBus = CBus,
+ NdisInterfaceMPIBus = MPIBus,
+ NdisInterfaceMPSABus = MPSABus,
+ NdisInterfaceProcessorInternal = ProcessorInternal,
+ NdisInterfaceInternalPowerBus = InternalPowerBus,
+ NdisInterfacePNPISABus = PNPISABus,
+ NdisInterfacePNPBus = PNPBus,
+ NdisMaximumInterfaceType
+} NDIS_INTERFACE_TYPE, *PNDIS_INTERFACE_TYPE;
+
+#define NdisInterruptLevelSensitive LevelSensitive
+#define NdisInterruptLatched Latched
+typedef KINTERRUPT_MODE NDIS_INTERRUPT_MODE, *PNDIS_INTERRUPT_MODE;
+
+
+typedef enum _NDIS_PARAMETER_TYPE {
+ NdisParameterInteger,
+ NdisParameterHexInteger,
+ NdisParameterString,
+ NdisParameterMultiString,
+ NdisParameterBinary
+} NDIS_PARAMETER_TYPE, *PNDIS_PARAMETER_TYPE;
+
+typedef struct {
+ USHORT Length;
+ PVOID Buffer;
+} BINARY_DATA;
+
+typedef struct _NDIS_CONFIGURATION_PARAMETER {
+ NDIS_PARAMETER_TYPE ParameterType;
+ union {
+ ULONG IntegerData;
+ NDIS_STRING StringData;
+ BINARY_DATA BinaryData;
+ } ParameterData;
+} NDIS_CONFIGURATION_PARAMETER, *PNDIS_CONFIGURATION_PARAMETER;
+
+
+typedef PHYSICAL_ADDRESS NDIS_PHYSICAL_ADDRESS, *PNDIS_PHYSICAL_ADDRESS;
+
+typedef struct _NDIS_PHYSICAL_ADDRESS_UNIT {
+ NDIS_PHYSICAL_ADDRESS PhysicalAddress;
+ UINT Length;
+} NDIS_PHYSICAL_ADDRESS_UNIT, *PNDIS_PHYSICAL_ADDRESS_UNIT;
+
+typedef struct _NDIS_WAN_LINE_DOWN {
+ UCHAR RemoteAddress[6];
+ UCHAR LocalAddress[6];
+} NDIS_WAN_LINE_DOWN, *PNDIS_WAN_LINE_DOWN;
+
+typedef struct _NDIS_WAN_LINE_UP {
+ ULONG LinkSpeed;
+ ULONG MaximumTotalSize;
+ NDIS_WAN_QUALITY Quality;
+ USHORT SendWindow;
+ UCHAR RemoteAddress[6];
+ /*OUT*/ UCHAR LocalAddress[6];
+ ULONG ProtocolBufferLength;
+ PUCHAR ProtocolBuffer;
+ USHORT ProtocolType;
+ NDIS_STRING DeviceName;
+} NDIS_WAN_LINE_UP, *PNDIS_WAN_LINE_UP;
+
+
+typedef VOID DDKAPI
+(*ADAPTER_SHUTDOWN_HANDLER)(
+ /*IN*/ PVOID ShutdownContext);
+
+
+typedef struct _OID_LIST OID_LIST, *POID_LIST;
+
+/* PnP state */
+
+typedef enum _NDIS_PNP_DEVICE_STATE {
+ NdisPnPDeviceAdded,
+ NdisPnPDeviceStarted,
+ NdisPnPDeviceQueryStopped,
+ NdisPnPDeviceStopped,
+ NdisPnPDeviceQueryRemoved,
+ NdisPnPDeviceRemoved,
+ NdisPnPDeviceSurpriseRemoved
+} NDIS_PNP_DEVICE_STATE;
+
+#define NDIS_DEVICE_NOT_STOPPABLE 0x00000001
+#define NDIS_DEVICE_NOT_REMOVEABLE 0x00000002
+#define NDIS_DEVICE_NOT_SUSPENDABLE 0x00000004
+#define NDIS_DEVICE_DISABLE_PM 0x00000008
+#define NDIS_DEVICE_DISABLE_WAKE_UP 0x00000010
+#define NDIS_DEVICE_DISABLE_WAKE_ON_RECONNECT 0x00000020
+#define NDIS_DEVICE_RESERVED 0x00000040
+#define NDIS_DEVICE_DISABLE_WAKE_ON_MAGIC_PACKET 0x00000080
+#define NDIS_DEVICE_DISABLE_WAKE_ON_PATTERN_MATCH 0x00000100
+
+
+/* OID_GEN_NETWORK_LAYER_ADDRESSES */
+typedef struct _NETWORK_ADDRESS {
+ USHORT AddressLength;
+ USHORT AddressType;
+ UCHAR Address[1];
+} NETWORK_ADDRESS, *PNETWORK_ADDRESS;
+
+typedef struct _NETWORK_ADDRESS_LIST {
+ LONG AddressCount;
+ USHORT AddressType;
+ NETWORK_ADDRESS Address[1];
+} NETWORK_ADDRESS_LIST, *PNETWORK_ADDRESS_LIST;
+
+/* Protocol types supported by NDIS */
+#define NDIS_PROTOCOL_ID_DEFAULT 0x00
+#define NDIS_PROTOCOL_ID_TCP_IP 0x02
+#define NDIS_PROTOCOL_ID_IPX 0x06
+#define NDIS_PROTOCOL_ID_NBF 0x07
+#define NDIS_PROTOCOL_ID_MAX 0x0F
+#define NDIS_PROTOCOL_ID_MASK 0x0F
+
+
+/* OID_GEN_TRANSPORT_HEADER_OFFSET */
+typedef struct _TRANSPORT_HEADER_OFFSET {
+ USHORT ProtocolType;
+ USHORT HeaderOffset;
+} TRANSPORT_HEADER_OFFSET, *PTRANSPORT_HEADER_OFFSET;
+
+
+/* OID_GEN_CO_LINK_SPEED / OID_GEN_CO_MINIMUM_LINK_SPEED */
+typedef struct _NDIS_CO_LINK_SPEED {
+ ULONG Outbound;
+ ULONG Inbound;
+} NDIS_CO_LINK_SPEED, *PNDIS_CO_LINK_SPEED;
+
+typedef ULONG NDIS_AF, *PNDIS_AF;
+#define CO_ADDRESS_FAMILY_Q2931 ((NDIS_AF)0x1)
+#define CO_ADDRESS_FAMILY_PSCHED ((NDIS_AF)0x2)
+#define CO_ADDRESS_FAMILY_L2TP ((NDIS_AF)0x3)
+#define CO_ADDRESS_FAMILY_IRDA ((NDIS_AF)0x4)
+#define CO_ADDRESS_FAMILY_1394 ((NDIS_AF)0x5)
+#define CO_ADDRESS_FAMILY_PPP ((NDIS_AF)0x6)
+#define CO_ADDRESS_FAMILY_TAPI ((NDIS_AF)0x800)
+#define CO_ADDRESS_FAMILY_TAPI_PROXY ((NDIS_AF)0x801)
+
+#define CO_ADDRESS_FAMILY_PROXY 0x80000000
+
+typedef struct {
+ NDIS_AF AddressFamily;
+ ULONG MajorVersion;
+ ULONG MinorVersion;
+} CO_ADDRESS_FAMILY, *PCO_ADDRESS_FAMILY;
+
+typedef struct _CO_FLOW_PARAMETERS {
+ ULONG TokenRate;
+ ULONG TokenBucketSize;
+ ULONG PeakBandwidth;
+ ULONG Latency;
+ ULONG DelayVariation;
+ SERVICETYPE ServiceType;
+ ULONG MaxSduSize;
+ ULONG MinimumPolicedSize;
+} CO_FLOW_PARAMETERS, *PCO_FLOW_PARAMETERS;
+
+typedef struct _CO_SPECIFIC_PARAMETERS {
+ ULONG ParamType;
+ ULONG Length;
+ UCHAR Parameters[1];
+} CO_SPECIFIC_PARAMETERS, *PCO_SPECIFIC_PARAMETERS;
+
+typedef struct _CO_CALL_MANAGER_PARAMETERS {
+ CO_FLOW_PARAMETERS Transmit;
+ CO_FLOW_PARAMETERS Receive;
+ CO_SPECIFIC_PARAMETERS CallMgrSpecific;
+} CO_CALL_MANAGER_PARAMETERS, *PCO_CALL_MANAGER_PARAMETERS;
+
+/* CO_MEDIA_PARAMETERS.Flags constants */
+#define RECEIVE_TIME_INDICATION 0x00000001
+#define USE_TIME_STAMPS 0x00000002
+#define TRANSMIT_VC 0x00000004
+#define RECEIVE_VC 0x00000008
+#define INDICATE_ERRED_PACKETS 0x00000010
+#define INDICATE_END_OF_TX 0x00000020
+#define RESERVE_RESOURCES_VC 0x00000040
+#define ROUND_DOWN_FLOW 0x00000080
+#define ROUND_UP_FLOW 0x00000100
+
+typedef struct _CO_MEDIA_PARAMETERS {
+ ULONG Flags;
+ ULONG ReceivePriority;
+ ULONG ReceiveSizeHint;
+ CO_SPECIFIC_PARAMETERS MediaSpecific;
+} CO_MEDIA_PARAMETERS, *PCO_MEDIA_PARAMETERS;
+
+/* CO_CALL_PARAMETERS.Flags constants */
+#define PERMANENT_VC 0x00000001
+#define CALL_PARAMETERS_CHANGED 0x00000002
+#define QUERY_CALL_PARAMETERS 0x00000004
+#define BROADCAST_VC 0x00000008
+#define MULTIPOINT_VC 0x00000010
+
+typedef struct _CO_CALL_PARAMETERS {
+ ULONG Flags;
+ PCO_CALL_MANAGER_PARAMETERS CallMgrParameters;
+ PCO_MEDIA_PARAMETERS MediaParameters;
+} CO_CALL_PARAMETERS, *PCO_CALL_PARAMETERS;
+
+typedef struct _CO_SAP {
+ ULONG SapType;
+ ULONG SapLength;
+ UCHAR Sap[1];
+} CO_SAP, *PCO_SAP;
+
+typedef struct _NDIS_IPSEC_PACKET_INFO {
+ _ANONYMOUS_UNION union {
+ struct {
+ NDIS_HANDLE OffloadHandle;
+ NDIS_HANDLE NextOffloadHandle;
+ } Transmit;
+ struct {
+ ULONG SA_DELETE_REQ : 1;
+ ULONG CRYPTO_DONE : 1;
+ ULONG NEXT_CRYPTO_DONE : 1;
+ ULONG CryptoStatus;
+ } Receive;
+ } DUMMYUNIONNAME;
+} NDIS_IPSEC_PACKET_INFO, *PNDIS_IPSEC_PACKET_INFO;
+
+/* NDIS_MAC_FRAGMENT.Errors constants */
+#define WAN_ERROR_CRC 0x00000001
+#define WAN_ERROR_FRAMING 0x00000002
+#define WAN_ERROR_HARDWAREOVERRUN 0x00000004
+#define WAN_ERROR_BUFFEROVERRUN 0x00000008
+#define WAN_ERROR_TIMEOUT 0x00000010
+#define WAN_ERROR_ALIGNMENT 0x00000020
+
+typedef struct _NDIS_MAC_FRAGMENT {
+ NDIS_HANDLE NdisLinkContext;
+ ULONG Errors;
+} NDIS_MAC_FRAGMENT, *PNDIS_MAC_FRAGMENT;
+
+typedef struct _NDIS_MAC_LINE_DOWN {
+ NDIS_HANDLE NdisLinkContext;
+} NDIS_MAC_LINE_DOWN, *PNDIS_MAC_LINE_DOWN;
+
+typedef struct _NDIS_MAC_LINE_UP {
+ ULONG LinkSpeed;
+ NDIS_WAN_QUALITY Quality;
+ USHORT SendWindow;
+ NDIS_HANDLE ConnectionWrapperID;
+ NDIS_HANDLE NdisLinkHandle;
+ NDIS_HANDLE NdisLinkContext;
+} NDIS_MAC_LINE_UP, *PNDIS_MAC_LINE_UP;
+
+typedef struct _NDIS_PACKET_8021Q_INFO {
+ _ANONYMOUS_UNION union {
+ struct {
+ UINT32 UserPriority : 3;
+ UINT32 CanonicalFormatId : 1;
+ UINT32 VlanId : 12;
+ UINT32 Reserved : 16;
+ } TagHeader;
+ PVOID Value;
+ } DUMMYUNIONNAME;
+} NDIS_PACKET_8021Q_INFO, *PNDIS_PACKET_8021Q_INFO;
+
+typedef enum _NDIS_PER_PACKET_INFO {
+ TcpIpChecksumPacketInfo,
+ IpSecPacketInfo,
+ TcpLargeSendPacketInfo,
+ ClassificationHandlePacketInfo,
+ NdisReserved,
+ ScatterGatherListPacketInfo,
+ Ieee8021QInfo,
+ OriginalPacketInfo,
+ PacketCancelId,
+ MaxPerPacketInfo
+} NDIS_PER_PACKET_INFO, *PNDIS_PER_PACKET_INFO;
+
+typedef struct _NDIS_PACKET_EXTENSION {
+ PVOID NdisPacketInfo[MaxPerPacketInfo];
+} NDIS_PACKET_EXTENSION, *PNDIS_PACKET_EXTENSION;
+
+/*
+ * PNDIS_PACKET
+ * NDIS_GET_ORIGINAL_PACKET(
+ * IN PNDIS_PACKET Packet);
+ */
+#define NDIS_GET_ORIGINAL_PACKET(Packet) \
+ NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, OriginalPacketInfo)
+
+/*
+ * PVOID
+ * NDIS_GET_PACKET_CANCEL_ID(
+ * IN PNDIS_PACKET Packet);
+ */
+#define NDIS_GET_PACKET_CANCEL_ID(Packet) \
+ NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, PacketCancelId)
+
+/*
+ * PNDIS_PACKET_EXTENSION
+ * NDIS_PACKET_EXTENSION_FROM_PACKET(
+ * IN PNDIS_PACKET Packet);
+ */
+#define NDIS_PACKET_EXTENSION_FROM_PACKET(Packet) \
+ ((PNDIS_PACKET_EXTENSION)((PUCHAR)(Packet) \
+ + (Packet)->Private.NdisPacketOobOffset + sizeof(NDIS_PACKET_OOB_DATA)))
+
+/*
+ * PVOID
+ * NDIS_PER_PACKET_INFO_FROM_PACKET(
+ * IN OUT PNDIS_PACKET Packet,
+ * IN NDIS_PER_PACKET_INFO InfoType);
+ */
+#define NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, InfoType) \
+ ((PNDIS_PACKET_EXTENSION)((PUCHAR)(Packet) + (Packet)->Private.NdisPacketOobOffset \
+ + sizeof(NDIS_PACKET_OOB_DATA)))->NdisPacketInfo[(InfoType)]
+
+/*
+ * VOID
+ * NDIS_SET_ORIGINAL_PACKET(
+ * IN OUT PNDIS_PACKET Packet,
+ * IN PNDIS_PACKET OriginalPacket);
+ */
+#define NDIS_SET_ORIGINAL_PACKET(Packet, OriginalPacket) \
+ NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, OriginalPacketInfo) = (OriginalPacket)
+
+/*
+ * VOID
+ * NDIS_SET_PACKET_CANCEL_ID(
+ * IN PNDIS_PACKET Packet
+ * IN ULONG_PTR CancelId);
+ */
+#define NDIS_SET_PACKET_CANCEL_ID(Packet, CancelId) \
+ NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, PacketCancelId) = (CancelId)
+
+typedef enum _NDIS_TASK {
+ TcpIpChecksumNdisTask,
+ IpSecNdisTask,
+ TcpLargeSendNdisTask,
+ MaxNdisTask
+} NDIS_TASK, *PNDIS_TASK;
+
+typedef struct _NDIS_TASK_IPSEC {
+ struct {
+ ULONG AH_ESP_COMBINED;
+ ULONG TRANSPORT_TUNNEL_COMBINED;
+ ULONG V4_OPTIONS;
+ ULONG RESERVED;
+ } Supported;
+
+ struct {
+ ULONG MD5 : 1;
+ ULONG SHA_1 : 1;
+ ULONG Transport : 1;
+ ULONG Tunnel : 1;
+ ULONG Send : 1;
+ ULONG Receive : 1;
+ } V4AH;
+
+ struct {
+ ULONG DES : 1;
+ ULONG RESERVED : 1;
+ ULONG TRIPLE_DES : 1;
+ ULONG NULL_ESP : 1;
+ ULONG Transport : 1;
+ ULONG Tunnel : 1;
+ ULONG Send : 1;
+ ULONG Receive : 1;
+ } V4ESP;
+} NDIS_TASK_IPSEC, *PNDIS_TASK_IPSEC;
+
+typedef enum _NDIS_ENCAPSULATION {
+ UNSPECIFIED_Encapsulation,
+ NULL_Encapsulation,
+ IEEE_802_3_Encapsulation,
+ IEEE_802_5_Encapsulation,
+ LLC_SNAP_ROUTED_Encapsulation,
+ LLC_SNAP_BRIDGED_Encapsulation
+} NDIS_ENCAPSULATION;
+
+typedef struct _NDIS_ENCAPSULATION_FORMAT {
+ NDIS_ENCAPSULATION Encapsulation;
+ struct {
+ ULONG FixedHeaderSize : 1;
+ ULONG Reserved : 31;
+ } Flags;
+ ULONG EncapsulationHeaderSize;
+} NDIS_ENCAPSULATION_FORMAT, *PNDIS_ENCAPSULATION_FORMAT;
+
+typedef struct _NDIS_TASK_OFFLOAD_HEADER
+{
+ ULONG Version;
+ ULONG Size;
+ ULONG Reserved;
+ UCHAR OffsetFirstTask;
+ NDIS_ENCAPSULATION_FORMAT EncapsulationFormat;
+} NDIS_TASK_OFFLOAD_HEADER, *PNDIS_TASK_OFFLOAD_HEADER;
+
+typedef struct _NDIS_TASK_OFFLOAD {
+ ULONG Version;
+ ULONG Size;
+ NDIS_TASK Task;
+ ULONG OffsetNextTask;
+ ULONG TaskBufferLength;
+ UCHAR TaskBuffer[1];
+} NDIS_TASK_OFFLOAD, *PNDIS_TASK_OFFLOAD;
+
+/* NDIS_TASK_OFFLOAD_HEADER.Version constants */
+#define NDIS_TASK_OFFLOAD_VERSION 1
+
+typedef struct _NDIS_TASK_TCP_IP_CHECKSUM {
+ struct {
+ ULONG IpOptionsSupported:1;
+ ULONG TcpOptionsSupported:1;
+ ULONG TcpChecksum:1;
+ ULONG UdpChecksum:1;
+ ULONG IpChecksum:1;
+ } V4Transmit;
+
+ struct {
+ ULONG IpOptionsSupported : 1;
+ ULONG TcpOptionsSupported : 1;
+ ULONG TcpChecksum : 1;
+ ULONG UdpChecksum : 1;
+ ULONG IpChecksum : 1;
+ } V4Receive;
+
+ struct {
+ ULONG IpOptionsSupported : 1;
+ ULONG TcpOptionsSupported : 1;
+ ULONG TcpChecksum : 1;
+ ULONG UdpChecksum : 1;
+ } V6Transmit;
+
+ struct {
+ ULONG IpOptionsSupported : 1;
+ ULONG TcpOptionsSupported : 1;
+ ULONG TcpChecksum : 1;
+ ULONG UdpChecksum : 1;
+ } V6Receive;
+} NDIS_TASK_TCP_IP_CHECKSUM, *PNDIS_TASK_TCP_IP_CHECKSUM;
+
+typedef struct _NDIS_TASK_TCP_LARGE_SEND {
+ ULONG Version;
+ ULONG MaxOffLoadSize;
+ ULONG MinSegmentCount;
+ BOOLEAN TcpOptions;
+ BOOLEAN IpOptions;
+} NDIS_TASK_TCP_LARGE_SEND, *PNDIS_TASK_TCP_LARGE_SEND;
+
+typedef struct _NDIS_TCP_IP_CHECKSUM_PACKET_INFO {
+ _ANONYMOUS_UNION union {
+ struct {
+ ULONG NdisPacketChecksumV4 : 1;
+ ULONG NdisPacketChecksumV6 : 1;
+ ULONG NdisPacketTcpChecksum : 1;
+ ULONG NdisPacketUdpChecksum : 1;
+ ULONG NdisPacketIpChecksum : 1;
+ } Transmit;
+
+ struct {
+ ULONG NdisPacketTcpChecksumFailed : 1;
+ ULONG NdisPacketUdpChecksumFailed : 1;
+ ULONG NdisPacketIpChecksumFailed : 1;
+ ULONG NdisPacketTcpChecksumSucceeded : 1;
+ ULONG NdisPacketUdpChecksumSucceeded : 1;
+ ULONG NdisPacketIpChecksumSucceeded : 1;
+ ULONG NdisPacketLoopback : 1;
+ } Receive;
+ ULONG Value;
+ } DUMMYUNIONNAME;
+} NDIS_TCP_IP_CHECKSUM_PACKET_INFO, *PNDIS_TCP_IP_CHECKSUM_PACKET_INFO;
+
+typedef struct _NDIS_WAN_CO_FRAGMENT {
+ ULONG Errors;
+} NDIS_WAN_CO_FRAGMENT, *PNDIS_WAN_CO_FRAGMENT;
+
+typedef struct _NDIS_WAN_FRAGMENT {
+ UCHAR RemoteAddress[6];
+ UCHAR LocalAddress[6];
+} NDIS_WAN_FRAGMENT, *PNDIS_WAN_FRAGMENT;
+
+typedef struct _WAN_CO_LINKPARAMS {
+ ULONG TransmitSpeed;
+ ULONG ReceiveSpeed;
+ ULONG SendWindow;
+} WAN_CO_LINKPARAMS, *PWAN_CO_LINKPARAMS;
+
+
+/* Call Manager */
+
+typedef VOID DDKAPI
+(*CM_ACTIVATE_VC_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE CallMgrVcContext,
+ /*IN*/ PCO_CALL_PARAMETERS CallParameters);
+
+typedef NDIS_STATUS DDKAPI
+(*CM_ADD_PARTY_HANDLER)(
+ /*IN*/ NDIS_HANDLE CallMgrVcContext,
+ /*IN OUT*/ PCO_CALL_PARAMETERS CallParameters,
+ /*IN*/ NDIS_HANDLE NdisPartyHandle,
+ /*OUT*/ PNDIS_HANDLE CallMgrPartyContext);
+
+typedef NDIS_STATUS DDKAPI
+(*CM_CLOSE_AF_HANDLER)(
+ /*IN*/ NDIS_HANDLE CallMgrAfContext);
+
+typedef NDIS_STATUS DDKAPI
+(*CM_CLOSE_CALL_HANDLER)(
+ /*IN*/ NDIS_HANDLE CallMgrVcContext,
+ /*IN*/ NDIS_HANDLE CallMgrPartyContext /*OPTIONAL*/,
+ /*IN*/ PVOID CloseData /*OPTIONAL*/,
+ /*IN*/ UINT Size /*OPTIONAL*/);
+
+typedef NDIS_STATUS DDKAPI
+(*CM_DEREG_SAP_HANDLER)(
+ /*IN*/ NDIS_HANDLE CallMgrSapContext);
+
+typedef VOID DDKAPI
+(*CM_DEACTIVATE_VC_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE CallMgrVcContext);
+
+typedef NDIS_STATUS DDKAPI
+(*CM_DROP_PARTY_HANDLER)(
+ /*IN*/ NDIS_HANDLE CallMgrPartyContext,
+ /*IN*/ PVOID CloseData /*OPTIONAL*/,
+ /*IN*/ UINT Size /*OPTIONAL*/);
+
+typedef VOID DDKAPI
+(*CM_INCOMING_CALL_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE CallMgrVcContext,
+ /*IN*/ PCO_CALL_PARAMETERS CallParameters);
+
+typedef NDIS_STATUS DDKAPI
+(*CM_MAKE_CALL_HANDLER)(
+ /*IN*/ NDIS_HANDLE CallMgrVcContext,
+ /*IN OUT*/ PCO_CALL_PARAMETERS CallParameters,
+ /*IN*/ NDIS_HANDLE NdisPartyHandle /*OPTIONAL*/,
+ /*OUT*/ PNDIS_HANDLE CallMgrPartyContext /*OPTIONAL*/);
+
+typedef NDIS_STATUS DDKAPI
+(*CM_MODIFY_CALL_QOS_HANDLER)(
+ /*IN*/ NDIS_HANDLE CallMgrVcContext,
+ /*IN*/ PCO_CALL_PARAMETERS CallParameters);
+
+typedef NDIS_STATUS DDKAPI
+(*CM_OPEN_AF_HANDLER)(
+ /*IN*/ NDIS_HANDLE CallMgrBindingContext,
+ /*IN*/ PCO_ADDRESS_FAMILY AddressFamily,
+ /*IN*/ NDIS_HANDLE NdisAfHandle,
+ /*OUT*/ PNDIS_HANDLE CallMgrAfContext);
+
+typedef NDIS_STATUS DDKAPI
+(*CM_REG_SAP_HANDLER)(
+ /*IN*/ NDIS_HANDLE CallMgrAfContext,
+ /*IN*/ PCO_SAP Sap,
+ /*IN*/ NDIS_HANDLE NdisSapHandle,
+ /*OUT*/ PNDIS_HANDLE CallMgrSapContext);
+
+typedef NDIS_STATUS DDKAPI
+(*CO_CREATE_VC_HANDLER)(
+ /*IN*/ NDIS_HANDLE ProtocolAfContext,
+ /*IN*/ NDIS_HANDLE NdisVcHandle,
+ /*OUT*/ PNDIS_HANDLE ProtocolVcContext);
+
+typedef NDIS_STATUS DDKAPI
+(*CO_DELETE_VC_HANDLER)(
+ /*IN*/ NDIS_HANDLE ProtocolVcContext);
+
+typedef VOID DDKAPI
+(*CO_REQUEST_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE ProtocolAfContext /*OPTIONAL*/,
+ /*IN*/ NDIS_HANDLE ProtocolVcContext /*OPTIONAL*/,
+ /*IN*/ NDIS_HANDLE ProtocolPartyContext /*OPTIONAL*/,
+ /*IN*/ PNDIS_REQUEST NdisRequest);
+
+typedef NDIS_STATUS DDKAPI
+(*CO_REQUEST_HANDLER)(
+ /*IN*/ NDIS_HANDLE ProtocolAfContext,
+ /*IN*/ NDIS_HANDLE ProtocolVcContext /*OPTIONAL*/,
+ /*IN*/ NDIS_HANDLE ProtocolPartyContext /*OPTIONAL*/,
+ /*IN OUT*/ PNDIS_REQUEST NdisRequest);
+
+typedef struct _NDIS_CALL_MANAGER_CHARACTERISTICS {
+ UCHAR MajorVersion;
+ UCHAR MinorVersion;
+ USHORT Filler;
+ UINT Reserved;
+ CO_CREATE_VC_HANDLER CmCreateVcHandler;
+ CO_DELETE_VC_HANDLER CmDeleteVcHandler;
+ CM_OPEN_AF_HANDLER CmOpenAfHandler;
+ CM_CLOSE_AF_HANDLER CmCloseAfHandler;
+ CM_REG_SAP_HANDLER CmRegisterSapHandler;
+ CM_DEREG_SAP_HANDLER CmDeregisterSapHandler;
+ CM_MAKE_CALL_HANDLER CmMakeCallHandler;
+ CM_CLOSE_CALL_HANDLER CmCloseCallHandler;
+ CM_INCOMING_CALL_COMPLETE_HANDLER CmIncomingCallCompleteHandler;
+ CM_ADD_PARTY_HANDLER CmAddPartyHandler;
+ CM_DROP_PARTY_HANDLER CmDropPartyHandler;
+ CM_ACTIVATE_VC_COMPLETE_HANDLER CmActivateVcCompleteHandler;
+ CM_DEACTIVATE_VC_COMPLETE_HANDLER CmDeactivateVcCompleteHandler;
+ CM_MODIFY_CALL_QOS_HANDLER CmModifyCallQoSHandler;
+ CO_REQUEST_HANDLER CmRequestHandler;
+ CO_REQUEST_COMPLETE_HANDLER CmRequestCompleteHandler;
+} NDIS_CALL_MANAGER_CHARACTERISTICS, *PNDIS_CALL_MANAGER_CHARACTERISTICS;
+
+
+
+/* Call Manager clients */
+
+typedef VOID (*CL_OPEN_AF_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE ProtocolAfContext,
+ /*IN*/ NDIS_HANDLE NdisAfHandle);
+
+typedef VOID DDKAPI
+(*CL_CLOSE_AF_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE ProtocolAfContext);
+
+typedef VOID DDKAPI
+(*CL_REG_SAP_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE ProtocolSapContext,
+ /*IN*/ PCO_SAP Sap,
+ /*IN*/ NDIS_HANDLE NdisSapHandle);
+
+typedef VOID DDKAPI
+(*CL_DEREG_SAP_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE ProtocolSapContext);
+
+typedef VOID DDKAPI
+(*CL_MAKE_CALL_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE ProtocolVcContext,
+ /*IN*/ NDIS_HANDLE NdisPartyHandle /*OPTIONAL*/,
+ /*IN*/ PCO_CALL_PARAMETERS CallParameters);
+
+typedef VOID DDKAPI
+(*CL_MODIFY_CALL_QOS_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE ProtocolVcContext,
+ /*IN*/ PCO_CALL_PARAMETERS CallParameters);
+
+typedef VOID DDKAPI
+(*CL_CLOSE_CALL_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE ProtocolVcContext,
+ /*IN*/ NDIS_HANDLE ProtocolPartyContext /*OPTIONAL*/);
+
+typedef VOID DDKAPI
+(*CL_ADD_PARTY_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE ProtocolPartyContext,
+ /*IN*/ NDIS_HANDLE NdisPartyHandle,
+ /*IN*/ PCO_CALL_PARAMETERS CallParameters);
+
+typedef VOID DDKAPI
+(*CL_DROP_PARTY_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE ProtocolPartyContext);
+
+typedef NDIS_STATUS DDKAPI
+(*CL_INCOMING_CALL_HANDLER)(
+ /*IN*/ NDIS_HANDLE ProtocolSapContext,
+ /*IN*/ NDIS_HANDLE ProtocolVcContext,
+ /*IN OUT*/ PCO_CALL_PARAMETERS CallParameters);
+
+typedef VOID DDKAPI
+(*CL_INCOMING_CALL_QOS_CHANGE_HANDLER)(
+ /*IN*/ NDIS_HANDLE ProtocolVcContext,
+ /*IN*/ PCO_CALL_PARAMETERS CallParameters);
+
+typedef VOID DDKAPI
+(*CL_INCOMING_CLOSE_CALL_HANDLER)(
+ /*IN*/ NDIS_STATUS CloseStatus,
+ /*IN*/ NDIS_HANDLE ProtocolVcContext,
+ /*IN*/ PVOID CloseData /*OPTIONAL*/,
+ /*IN*/ UINT Size /*OPTIONAL*/);
+
+typedef VOID DDKAPI
+(*CL_INCOMING_DROP_PARTY_HANDLER)(
+ /*IN*/ NDIS_STATUS DropStatus,
+ /*IN*/ NDIS_HANDLE ProtocolPartyContext,
+ /*IN*/ PVOID CloseData /*OPTIONAL*/,
+ /*IN*/ UINT Size /*OPTIONAL*/);
+
+typedef VOID DDKAPI
+(*CL_CALL_CONNECTED_HANDLER)(
+ /*IN*/ NDIS_HANDLE ProtocolVcContext);
+
+
+typedef struct _NDIS_CLIENT_CHARACTERISTICS {
+ UCHAR MajorVersion;
+ UCHAR MinorVersion;
+ USHORT Filler;
+ UINT Reserved;
+ CO_CREATE_VC_HANDLER ClCreateVcHandler;
+ CO_DELETE_VC_HANDLER ClDeleteVcHandler;
+ CO_REQUEST_HANDLER ClRequestHandler;
+ CO_REQUEST_COMPLETE_HANDLER ClRequestCompleteHandler;
+ CL_OPEN_AF_COMPLETE_HANDLER ClOpenAfCompleteHandler;
+ CL_CLOSE_AF_COMPLETE_HANDLER ClCloseAfCompleteHandler;
+ CL_REG_SAP_COMPLETE_HANDLER ClRegisterSapCompleteHandler;
+ CL_DEREG_SAP_COMPLETE_HANDLER ClDeregisterSapCompleteHandler;
+ CL_MAKE_CALL_COMPLETE_HANDLER ClMakeCallCompleteHandler;
+ CL_MODIFY_CALL_QOS_COMPLETE_HANDLER ClModifyCallQoSCompleteHandler;
+ CL_CLOSE_CALL_COMPLETE_HANDLER ClCloseCallCompleteHandler;
+ CL_ADD_PARTY_COMPLETE_HANDLER ClAddPartyCompleteHandler;
+ CL_DROP_PARTY_COMPLETE_HANDLER ClDropPartyCompleteHandler;
+ CL_INCOMING_CALL_HANDLER ClIncomingCallHandler;
+ CL_INCOMING_CALL_QOS_CHANGE_HANDLER ClIncomingCallQoSChangeHandler;
+ CL_INCOMING_CLOSE_CALL_HANDLER ClIncomingCloseCallHandler;
+ CL_INCOMING_DROP_PARTY_HANDLER ClIncomingDropPartyHandler;
+ CL_CALL_CONNECTED_HANDLER ClCallConnectedHandler;
+} NDIS_CLIENT_CHARACTERISTICS, *PNDIS_CLIENT_CHARACTERISTICS;
+
+
+/* NDIS protocol structures */
+
+/* Prototypes for NDIS 3.0 protocol characteristics */
+
+typedef VOID DDKAPI
+(*OPEN_ADAPTER_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_HANDLE ProtocolBindingContext,
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_STATUS OpenErrorStatus);
+
+typedef VOID DDKAPI
+(*CLOSE_ADAPTER_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_HANDLE ProtocolBindingContext,
+ /*IN*/ NDIS_STATUS Status);
+
+typedef VOID DDKAPI
+(*RESET_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_HANDLE ProtocolBindingContext,
+ /*IN*/ NDIS_STATUS Status);
+
+typedef VOID DDKAPI
+(*REQUEST_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_HANDLE ProtocolBindingContext,
+ /*IN*/ PNDIS_REQUEST NdisRequest,
+ /*IN*/ NDIS_STATUS Status);
+
+typedef VOID DDKAPI
+(*STATUS_HANDLER)(
+ /*IN*/ NDIS_HANDLE ProtocolBindingContext,
+ /*IN*/ NDIS_STATUS GeneralStatus,
+ /*IN*/ PVOID StatusBuffer,
+ /*IN*/ UINT StatusBufferSize);
+
+typedef VOID DDKAPI
+(*STATUS_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_HANDLE ProtocolBindingContext);
+
+typedef VOID DDKAPI
+(*SEND_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_HANDLE ProtocolBindingContext,
+ /*IN*/ PNDIS_PACKET Packet,
+ /*IN*/ NDIS_STATUS Status);
+
+typedef VOID DDKAPI
+(*WAN_SEND_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_HANDLE ProtocolBindingContext,
+ /*IN*/ PNDIS_WAN_PACKET Packet,
+ /*IN*/ NDIS_STATUS Status);
+
+typedef VOID DDKAPI
+(*TRANSFER_DATA_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_HANDLE ProtocolBindingContext,
+ /*IN*/ PNDIS_PACKET Packet,
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ UINT BytesTransferred);
+
+typedef VOID DDKAPI
+(*WAN_TRANSFER_DATA_COMPLETE_HANDLER)(
+ VOID);
+
+
+typedef NDIS_STATUS DDKAPI
+(*RECEIVE_HANDLER)(
+ /*IN*/ NDIS_HANDLE ProtocolBindingContext,
+ /*IN*/ NDIS_HANDLE MacReceiveContext,
+ /*IN*/ PVOID HeaderBuffer,
+ /*IN*/ UINT HeaderBufferSize,
+ /*IN*/ PVOID LookAheadBuffer,
+ /*IN*/ UINT LookaheadBufferSize,
+ /*IN*/ UINT PacketSize);
+
+typedef NDIS_STATUS DDKAPI
+(*WAN_RECEIVE_HANDLER)(
+ /*IN*/ NDIS_HANDLE NdisLinkHandle,
+ /*IN*/ PUCHAR Packet,
+ /*IN*/ ULONG PacketSize);
+
+typedef VOID DDKAPI
+(*RECEIVE_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_HANDLE ProtocolBindingContext);
+
+
+/* Protocol characteristics for NDIS 3.0 protocols */
+
+#define NDIS30_PROTOCOL_CHARACTERISTICS_S \
+ UCHAR MajorNdisVersion; \
+ UCHAR MinorNdisVersion; \
+ _ANONYMOUS_UNION union { \
+ UINT Reserved; \
+ UINT Flags; \
+ } DUMMYUNIONNAME; \
+ OPEN_ADAPTER_COMPLETE_HANDLER OpenAdapterCompleteHandler; \
+ CLOSE_ADAPTER_COMPLETE_HANDLER CloseAdapterCompleteHandler; \
+ _ANONYMOUS_UNION union { \
+ SEND_COMPLETE_HANDLER SendCompleteHandler; \
+ WAN_SEND_COMPLETE_HANDLER WanSendCompleteHandler; \
+ } DUMMYUNIONNAME2; \
+ _ANONYMOUS_UNION union { \
+ TRANSFER_DATA_COMPLETE_HANDLER TransferDataCompleteHandler; \
+ WAN_TRANSFER_DATA_COMPLETE_HANDLER WanTransferDataCompleteHandler; \
+ } DUMMYUNIONNAME3; \
+ RESET_COMPLETE_HANDLER ResetCompleteHandler; \
+ REQUEST_COMPLETE_HANDLER RequestCompleteHandler; \
+ _ANONYMOUS_UNION union { \
+ RECEIVE_HANDLER ReceiveHandler; \
+ WAN_RECEIVE_HANDLER WanReceiveHandler; \
+ } DUMMYUNIONNAME4; \
+ RECEIVE_COMPLETE_HANDLER ReceiveCompleteHandler; \
+ STATUS_HANDLER StatusHandler; \
+ STATUS_COMPLETE_HANDLER StatusCompleteHandler; \
+ NDIS_STRING Name;
+
+typedef struct _NDIS30_PROTOCOL_CHARACTERISTICS {
+ NDIS30_PROTOCOL_CHARACTERISTICS_S
+} NDIS30_PROTOCOL_CHARACTERISTICS, *PNDIS30_PROTOCOL_CHARACTERISTICS;
+
+
+/* Prototypes for NDIS 4.0 protocol characteristics */
+
+typedef INT DDKAPI
+(*RECEIVE_PACKET_HANDLER)(
+ /*IN*/ NDIS_HANDLE ProtocolBindingContext,
+ /*IN*/ PNDIS_PACKET Packet);
+
+typedef VOID DDKAPI
+(*BIND_HANDLER)(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE BindContext,
+ /*IN*/ PNDIS_STRING DeviceName,
+ /*IN*/ PVOID SystemSpecific1,
+ /*IN*/ PVOID SystemSpecific2);
+
+typedef VOID DDKAPI
+(*UNBIND_HANDLER)(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE ProtocolBindingContext,
+ /*IN*/ NDIS_HANDLE UnbindContext);
+
+typedef NDIS_STATUS DDKAPI
+(*PNP_EVENT_HANDLER)(
+ /*IN*/ NDIS_HANDLE ProtocolBindingContext,
+ /*IN*/ PNET_PNP_EVENT NetPnPEvent);
+
+typedef VOID DDKAPI
+(*UNLOAD_PROTOCOL_HANDLER)(
+ VOID);
+
+
+/* Protocol characteristics for NDIS 4.0 protocols */
+
+#ifdef __cplusplus
+
+#define NDIS40_PROTOCOL_CHARACTERISTICS_S \
+ NDIS30_PROTOCOL_CHARACTERISTICS Ndis30Chars; \
+ RECEIVE_PACKET_HANDLER ReceivePacketHandler; \
+ BIND_HANDLER BindAdapterHandler; \
+ UNBIND_HANDLER UnbindAdapterHandler; \
+ PNP_EVENT_HANDLER PnPEventHandler; \
+ UNLOAD_PROTOCOL_HANDLER UnloadHandler;
+
+#else /* !__cplusplus */
+
+#define NDIS40_PROTOCOL_CHARACTERISTICS_S \
+ NDIS30_PROTOCOL_CHARACTERISTICS_S \
+ RECEIVE_PACKET_HANDLER ReceivePacketHandler; \
+ BIND_HANDLER BindAdapterHandler; \
+ UNBIND_HANDLER UnbindAdapterHandler; \
+ PNP_EVENT_HANDLER PnPEventHandler; \
+ UNLOAD_PROTOCOL_HANDLER UnloadHandler;
+
+#endif /* __cplusplus */
+
+typedef struct _NDIS40_PROTOCOL_CHARACTERISTICS {
+ NDIS40_PROTOCOL_CHARACTERISTICS_S
+} NDIS40_PROTOCOL_CHARACTERISTICS, *PNDIS40_PROTOCOL_CHARACTERISTICS;
+
+/* Prototypes for NDIS 5.0 protocol characteristics */
+
+typedef VOID DDKAPI
+(*CO_SEND_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE ProtocolVcContext,
+ /*IN*/ PNDIS_PACKET Packet);
+
+typedef VOID DDKAPI
+(*CO_STATUS_HANDLER)(
+ /*IN*/ NDIS_HANDLE ProtocolBindingContext,
+ /*IN*/ NDIS_HANDLE ProtocolVcContext /*OPTIONAL*/,
+ /*IN*/ NDIS_STATUS GeneralStatus,
+ /*IN*/ PVOID StatusBuffer,
+ /*IN*/ UINT StatusBufferSize);
+
+typedef UINT DDKAPI
+(*CO_RECEIVE_PACKET_HANDLER)(
+ /*IN*/ NDIS_HANDLE ProtocolBindingContext,
+ /*IN*/ NDIS_HANDLE ProtocolVcContext,
+ /*IN*/ PNDIS_PACKET Packet);
+
+typedef VOID DDKAPI
+(*CO_AF_REGISTER_NOTIFY_HANDLER)(
+ /*IN*/ NDIS_HANDLE ProtocolBindingContext,
+ /*IN*/ PCO_ADDRESS_FAMILY AddressFamily);
+
+#ifdef __cplusplus \
+
+#define NDIS50_PROTOCOL_CHARACTERISTICS_S \
+ NDIS40_PROTOCOL_CHARACTERISTICS Ndis40Chars; \
+ PVOID ReservedHandlers[4]; \
+ CO_SEND_COMPLETE_HANDLER CoSendCompleteHandler; \
+ CO_STATUS_HANDLER CoStatusHandler; \
+ CO_RECEIVE_PACKET_HANDLER CoReceivePacketHandler; \
+ CO_AF_REGISTER_NOTIFY_HANDLER CoAfRegisterNotifyHandler;
+
+#else /* !__cplusplus */
+
+#define NDIS50_PROTOCOL_CHARACTERISTICS_S \
+ NDIS40_PROTOCOL_CHARACTERISTICS_S \
+ PVOID ReservedHandlers[4]; \
+ CO_SEND_COMPLETE_HANDLER CoSendCompleteHandler; \
+ CO_STATUS_HANDLER CoStatusHandler; \
+ CO_RECEIVE_PACKET_HANDLER CoReceivePacketHandler; \
+ CO_AF_REGISTER_NOTIFY_HANDLER CoAfRegisterNotifyHandler;
+
+#endif /* !__cplusplus */
+
+typedef struct _NDIS50_PROTOCOL_CHARACTERISTICS {
+ NDIS50_PROTOCOL_CHARACTERISTICS_S
+} NDIS50_PROTOCOL_CHARACTERISTICS, *PNDIS50_PROTOCOL_CHARACTERISTICS;
+
+#if defined(NDIS50) || defined(NDIS51)
+typedef struct _NDIS_PROTOCOL_CHARACTERISTICS {
+ NDIS50_PROTOCOL_CHARACTERISTICS_S;
+} NDIS_PROTOCOL_CHARACTERISTICS, *PNDIS_PROTOCOL_CHARACTERISTICS;
+#elif defined(NDIS40)
+typedef struct _NDIS_PROTOCOL_CHARACTERISTICS {
+ NDIS40_PROTOCOL_CHARACTERISTICS_S;
+} NDIS_PROTOCOL_CHARACTERISTICS, *PNDIS_PROTOCOL_CHARACTERISTICS;
+#elif defined(NDIS30)
+typedef struct _NDIS_PROTOCOL_CHARACTERISTICS {
+ NDIS30_PROTOCOL_CHARACTERISTICS_S
+} NDIS_PROTOCOL_CHARACTERISTICS, *PNDIS_PROTOCOL_CHARACTERISTICS;
+#else
+#error Define an NDIS version
+#endif /* NDIS30 */
+
+
+
+/* Buffer management routines */
+
+NDISAPI
+VOID
+DDKAPI
+NdisAllocateBuffer(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*OUT*/ PNDIS_BUFFER *Buffer,
+ /*IN*/ NDIS_HANDLE PoolHandle,
+ /*IN*/ PVOID VirtualAddress,
+ /*IN*/ UINT Length);
+
+
+NDISAPI
+VOID
+DDKAPI
+NdisAllocateBufferPool(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*OUT*/ PNDIS_HANDLE PoolHandle,
+ /*IN*/ UINT NumberOfDescriptors);
+
+NDISAPI
+VOID
+DDKAPI
+NdisAllocatePacket(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*OUT*/ PNDIS_PACKET *Packet,
+ /*IN*/ NDIS_HANDLE PoolHandle);
+
+NDISAPI
+VOID
+DDKAPI
+NdisAllocatePacketPool(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*OUT*/ PNDIS_HANDLE PoolHandle,
+ /*IN*/ UINT NumberOfDescriptors,
+ /*IN*/ UINT ProtocolReservedLength);
+
+#define PROTOCOL_RESERVED_SIZE_IN_PACKET (4 * sizeof(PVOID))
+
+NDISAPI
+VOID
+DDKAPI
+NdisCopyBuffer(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*OUT*/ PNDIS_BUFFER *Buffer,
+ /*IN*/ NDIS_HANDLE PoolHandle,
+ /*IN*/ PVOID MemoryDescriptor,
+ /*IN*/ UINT Offset,
+ /*IN*/ UINT Length);
+
+NDISAPI
+VOID
+DDKAPI
+NdisCopyFromPacketToPacket(
+ /*IN*/ PNDIS_PACKET Destination,
+ /*IN*/ UINT DestinationOffset,
+ /*IN*/ UINT BytesToCopy,
+ /*IN*/ PNDIS_PACKET Source,
+ /*IN*/ UINT SourceOffset,
+ /*OUT*/ PUINT BytesCopied);
+
+NDISAPI
+VOID
+DDKAPI
+NdisDprAllocatePacket(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*OUT*/ PNDIS_PACKET *Packet,
+ /*IN*/ NDIS_HANDLE PoolHandle);
+
+NDISAPI
+VOID
+DDKAPI
+NdisDprAllocatePacketNonInterlocked(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*OUT*/ PNDIS_PACKET *Packet,
+ /*IN*/ NDIS_HANDLE PoolHandle);
+
+NDISAPI
+VOID
+DDKAPI
+NdisDprFreePacket(
+ /*IN*/ PNDIS_PACKET Packet);
+
+NDISAPI
+VOID
+DDKAPI
+NdisDprFreePacketNonInterlocked(
+ /*IN*/ PNDIS_PACKET Packet);
+
+NDISAPI
+VOID
+DDKAPI
+NdisFreeBufferPool(
+ /*IN*/ NDIS_HANDLE PoolHandle);
+
+NDISAPI
+VOID
+DDKAPI
+NdisFreePacket(
+ /*IN*/ PNDIS_PACKET Packet);
+
+NDISAPI
+VOID
+DDKAPI
+NdisFreePacketPool(
+ /*IN*/ NDIS_HANDLE PoolHandle);
+
+NDISAPI
+VOID
+DDKAPI
+NdisReturnPackets(
+ /*IN*/ PNDIS_PACKET *PacketsToReturn,
+ /*IN*/ UINT NumberOfPackets);
+
+NDISAPI
+VOID
+DDKAPI
+NdisUnchainBufferAtBack(
+ /*IN OUT*/ PNDIS_PACKET Packet,
+ /*OUT*/ PNDIS_BUFFER *Buffer);
+
+NDISAPI
+VOID
+DDKAPI
+NdisUnchainBufferAtFront(
+ /*IN OUT*/ PNDIS_PACKET Packet,
+ /*OUT*/ PNDIS_BUFFER *Buffer);
+
+NDISAPI
+VOID
+DDKAPI
+NdisAdjustBufferLength(
+ /*IN*/ PNDIS_BUFFER Buffer,
+ /*IN*/ UINT Length);
+
+NDISAPI
+ULONG
+DDKAPI
+NdisBufferLength(
+ /*IN*/ PNDIS_BUFFER Buffer);
+
+NDISAPI
+PVOID
+DDKAPI
+NdisBufferVirtualAddress(
+ /*IN*/ PNDIS_BUFFER Buffer);
+
+NDISAPI
+ULONG
+DDKAPI
+NDIS_BUFFER_TO_SPAN_PAGES(
+ /*IN*/ PNDIS_BUFFER Buffer);
+
+NDISAPI
+VOID
+DDKAPI
+NdisFreeBuffer(
+ /*IN*/ PNDIS_BUFFER Buffer);
+
+NDISAPI
+VOID
+DDKAPI
+NdisGetBufferPhysicalArraySize(
+ /*IN*/ PNDIS_BUFFER Buffer,
+ /*OUT*/ PUINT ArraySize);
+
+NDISAPI
+VOID
+DDKAPI
+NdisGetFirstBufferFromPacket(
+ /*IN*/ PNDIS_PACKET _Packet,
+ /*OUT*/ PNDIS_BUFFER *_FirstBuffer,
+ /*OUT*/ PVOID *_FirstBufferVA,
+ /*OUT*/ PUINT _FirstBufferLength,
+ /*OUT*/ PUINT _TotalBufferLength);
+
+NDISAPI
+VOID
+DDKAPI
+NdisQueryBuffer(
+ /*IN*/ PNDIS_BUFFER Buffer,
+ /*OUT*/ PVOID *VirtualAddress /*OPTIONAL*/,
+ /*OUT*/ PUINT Length);
+
+NDISAPI
+VOID
+DDKAPI
+NdisQueryBufferOffset(
+ /*IN*/ PNDIS_BUFFER Buffer,
+ /*OUT*/ PUINT Offset,
+ /*OUT*/ PUINT Length);
+
+NDISAPI
+VOID
+DDKAPI
+NdisFreeBuffer(
+ /*IN*/ PNDIS_BUFFER Buffer);
+
+
+/*
+ * VOID
+ * NdisGetBufferPhysicalArraySize(
+ * IN PNDIS_BUFFER Buffer,
+ * OUT PUINT ArraySize);
+ */
+#define NdisGetBufferPhysicalArraySize(Buffer, \
+ ArraySize) \
+{ \
+ (*(ArraySize) = NDIS_BUFFER_TO_SPAN_PAGES(Buffer)) \
+}
+
+
+/*
+ * VOID
+ * NdisGetFirstBufferFromPacket(
+ * IN PNDIS_PACKET _Packet,
+ * OUT PNDIS_BUFFER * _FirstBuffer,
+ * OUT PVOID * _FirstBufferVA,
+ * OUT PUINT _FirstBufferLength,
+ * OUT PUINT _TotalBufferLength)
+ */
+#define NdisGetFirstBufferFromPacket(_Packet, \
+ _FirstBuffer, \
+ _FirstBufferVA, \
+ _FirstBufferLength, \
+ _TotalBufferLength) \
+{ \
+ PNDIS_BUFFER _Buffer; \
+ \
+ _Buffer = (_Packet)->Private.Head; \
+ *(_FirstBuffer) = _Buffer; \
+ if (_Buffer != NULL) \
+ { \
+ *(_FirstBufferVA) = MmGetSystemAddressForMdl(_Buffer); \
+ *(_FirstBufferLength) = MmGetMdlByteCount(_Buffer); \
+ _Buffer = _Buffer->Next; \
+ *(_TotalBufferLength) = *(_FirstBufferLength); \
+ while (_Buffer != NULL) { \
+ *(_TotalBufferLength) += MmGetMdlByteCount(_Buffer); \
+ _Buffer = _Buffer->Next; \
+ } \
+ } \
+ else \
+ { \
+ *(_FirstBufferVA) = 0; \
+ *(_FirstBufferLength) = 0; \
+ *(_TotalBufferLength) = 0; \
+ } \
+}
+
+/*
+ * VOID
+ * NdisGetFirstBufferFromPacketSafe(
+ * IN PNDIS_PACKET _Packet,
+ * OUT PNDIS_BUFFER * _FirstBuffer,
+ * OUT PVOID * _FirstBufferVA,
+ * OUT PUINT _FirstBufferLength,
+ * OUT PUINT _TotalBufferLength),
+ * IN MM_PAGE_PRIORITY _Priority)
+ */
+#define NdisGetFirstBufferFromPacketSafe(_Packet, \
+ _FirstBuffer, \
+ _FirstBufferVA, \
+ _FirstBufferLength, \
+ _TotalBufferLength, \
+ _Priority) \
+{ \
+ PNDIS_BUFFER _Buffer; \
+ \
+ _Buffer = (_Packet)->Private.Head; \
+ *(_FirstBuffer) = _Buffer; \
+ if (_Buffer != NULL) \
+ { \
+ *(_FirstBufferVA) = MmGetSystemAddressForMdlSafe(_Buffer, _Priority); \
+ *(_FirstBufferLength) = MmGetMdlByteCount(_Buffer); \
+ _Buffer = _Buffer->Next; \
+ *(_TotalBufferLength) = *(_FirstBufferLength); \
+ while (_Buffer != NULL) { \
+ *(_TotalBufferLength) += MmGetMdlByteCount(_Buffer); \
+ _Buffer = _Buffer->Next; \
+ } \
+ } \
+ else \
+ { \
+ *(_FirstBufferVA) = 0; \
+ *(_FirstBufferLength) = 0; \
+ *(_TotalBufferLength) = 0; \
+ } \
+}
+
+/*
+ * VOID
+ * NdisQueryBuffer(
+ * IN PNDIS_BUFFER Buffer,
+ * OUT PVOID *VirtualAddress OPTIONAL,
+ * OUT PUINT Length)
+ */
+#define NdisQueryBuffer(Buffer, \
+ VirtualAddress, \
+ Length) \
+{ \
+ if (VirtualAddress) \
+ *((PVOID*)VirtualAddress) = MmGetSystemAddressForMdl(Buffer); \
+ \
+ *((PUINT)Length) = MmGetMdlByteCount(Buffer); \
+}
+
+
+/*
+ * VOID
+ * NdisQueryBufferOffset(
+ * IN PNDIS_BUFFER Buffer,
+ * OUT PUINT Offset,
+ * OUT PUINT Length);
+ */
+#define NdisQueryBufferOffset(Buffer, \
+ Offset, \
+ Length) \
+{ \
+ *((PUINT)Offset) = MmGetMdlByteOffset(Buffer); \
+ *((PUINT)Length) = MmGetMdlByteCount(Buffer); \
+}
+
+
+/*
+ * PVOID
+ * NDIS_BUFFER_LINKAGE(
+ * IN PNDIS_BUFFER Buffer);
+ */
+#define NDIS_BUFFER_LINKAGE(Buffer)(Buffer)->Next;
+
+
+/*
+ * VOID
+ * NdisChainBufferAtBack(
+ * IN OUT PNDIS_PACKET Packet,
+ * IN OUT PNDIS_BUFFER Buffer)
+ */
+#define NdisChainBufferAtBack(Packet, \
+ Buffer) \
+{ \
+ PNDIS_BUFFER NdisBuffer = (Buffer); \
+ \
+ while (NdisBuffer->Next != NULL) \
+ NdisBuffer = NdisBuffer->Next; \
+ \
+ NdisBuffer->Next = NULL; \
+ \
+ if ((Packet)->Private.Head != NULL) \
+ (Packet)->Private.Tail->Next = (Buffer); \
+ else \
+ (Packet)->Private.Head = (Buffer); \
+ \
+ (Packet)->Private.Tail = NdisBuffer; \
+ (Packet)->Private.ValidCounts = FALSE; \
+}
+
+
+/*
+ * VOID
+ * NdisChainBufferAtFront(
+ * IN OUT PNDIS_PACKET Packet,
+ * IN OUT PNDIS_BUFFER Buffer)
+ */
+#define NdisChainBufferAtFront(Packet, \
+ Buffer) \
+{ \
+ PNDIS_BUFFER _NdisBuffer = (Buffer); \
+ \
+ while (_NdisBuffer->Next != NULL) \
+ _NdisBuffer = _NdisBuffer->Next; \
+ \
+ if ((Packet)->Private.Head == NULL) \
+ (Packet)->Private.Tail = _NdisBuffer; \
+ \
+ _NdisBuffer->Next = (Packet)->Private.Head; \
+ (Packet)->Private.Head = (Buffer); \
+ (Packet)->Private.ValidCounts = FALSE; \
+}
+
+
+/*
+ * VOID
+ * NdisGetNextBuffer(
+ * IN PNDIS_BUFFER CurrentBuffer,
+ * OUT PNDIS_BUFFER * NextBuffer)
+ */
+#define NdisGetNextBuffer(CurrentBuffer, \
+ NextBuffer) \
+{ \
+ *(NextBuffer) = (CurrentBuffer)->Next; \
+}
+
+
+/*
+ * UINT
+ * NdisGetPacketFlags(
+ * IN PNDIS_PACKET Packet);
+ */
+#define NdisGetPacketFlags(Packet)(Packet)->Private.Flags;
+
+
+/*
+ * VOID
+ * NdisClearPacketFlags(
+ * IN PNDIS_PACKET Packet,
+ * IN UINT Flags);
+ */
+#define NdisClearPacketFlags(Packet, Flags) \
+ (Packet)->Private.Flags &= ~(Flags)
+
+
+/*
+ * VOID
+ * NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO(
+ * IN PNDIS_PACKET Packet,
+ * IN PPVOID pMediaSpecificInfo,
+ * IN PUINT pSizeMediaSpecificInfo);
+ */
+#define NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO(_Packet, \
+ _pMediaSpecificInfo, \
+ _pSizeMediaSpecificInfo) \
+{ \
+ if (!((_Packet)->Private.NdisPacketFlags & fPACKET_ALLOCATED_BY_NDIS) || \
+ !((_Packet)->Private.NdisPacketFlags & fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO)) \
+ { \
+ *(_pMediaSpecificInfo) = NULL; \
+ *(_pSizeMediaSpecificInfo) = 0; \
+ } \
+ else \
+ { \
+ *(_pMediaSpecificInfo) = ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
+ (_Packet)->Private.NdisPacketOobOffset))->MediaSpecificInformation; \
+ *(_pSizeMediaSpecificInfo) = ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
+ (_Packet)->Private.NdisPacketOobOffset))->SizeMediaSpecificInfo; \
+ } \
+}
+
+
+/*
+ * ULONG
+ * NDIS_GET_PACKET_PROTOCOL_TYPE(
+ * IN PNDIS_PACKET Packet);
+ */
+#define NDIS_GET_PACKET_PROTOCOL_TYPE(_Packet) \
+ ((_Packet)->Private.Flags & NDIS_PROTOCOL_ID_MASK)
+
+/*
+ * ULONG
+ * NDIS_GET_PACKET_HEADER_SIZE(
+ * IN PNDIS_PACKET Packet);
+ */
+#define NDIS_GET_PACKET_HEADER_SIZE(_Packet) \
+ ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
+ (_Packet)->Private.NdisPacketOobOffset))->HeaderSize
+
+
+/*
+ * NDIS_STATUS
+ * NDIS_GET_PACKET_STATUS(
+ * IN PNDIS_PACKET Packet);
+ */
+#define NDIS_GET_PACKET_STATUS(_Packet) \
+ ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
+ (_Packet)->Private.NdisPacketOobOffset))->Status
+
+
+/*
+ * ULONGLONG
+ * NDIS_GET_PACKET_TIME_RECEIVED(
+ * IN PNDIS_PACKET Packet);
+ */
+#define NDIS_GET_PACKET_TIME_RECEIVED(_Packet) \
+ ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
+ (_Packet)->Private.NdisPacketOobOffset))->TimeReceived
+
+
+/*
+ * ULONGLONG
+ * NDIS_GET_PACKET_TIME_SENT(
+ * IN PNDIS_PACKET Packet);
+ */
+#define NDIS_GET_PACKET_TIME_SENT(_Packet) \
+ ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
+ (_Packet)->Private.NdisPacketOobOffset))->TimeSent
+
+
+/*
+ * ULONGLONG
+ * NDIS_GET_PACKET_TIME_TO_SEND(
+ * IN PNDIS_PACKET Packet);
+ */
+#define NDIS_GET_PACKET_TIME_TO_SEND(_Packet) \
+ ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
+ (_Packet)->Private.NdisPacketOobOffset))->TimeToSend
+
+
+/*
+ * PNDIS_PACKET_OOB_DATA
+ * NDIS_OOB_DATA_FROM_PACKET(
+ * IN PNDIS_PACKET Packet);
+ */
+#define NDIS_OOB_DATA_FROM_PACKET(_Packet) \
+ (PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
+ (_Packet)->Private.NdisPacketOobOffset)
+
+
+/*
+ * VOID
+ * NdisQueryPacket(
+ * IN PNDIS_PACKET Packet,
+ * OUT PUINT PhysicalBufferCount OPTIONAL,
+ * OUT PUINT BufferCount OPTIONAL,
+ * OUT PNDIS_BUFFER *FirstBuffer OPTIONAL,
+ * OUT PUINT TotalPacketLength OPTIONAL);
+ */
+#define NdisQueryPacket(Packet, \
+ PhysicalBufferCount, \
+ BufferCount, \
+ FirstBuffer, \
+ TotalPacketLength) \
+{ \
+ if (FirstBuffer) \
+ *((PNDIS_BUFFER*)FirstBuffer) = (Packet)->Private.Head; \
+ if ((TotalPacketLength) || (BufferCount) || (PhysicalBufferCount)) \
+ { \
+ if (!(Packet)->Private.ValidCounts) { \
+ UINT _Offset; \
+ UINT _PacketLength; \
+ PNDIS_BUFFER _NdisBuffer; \
+ UINT _PhysicalBufferCount = 0; \
+ UINT _TotalPacketLength = 0; \
+ UINT _Count = 0; \
+ \
+ for (_NdisBuffer = (Packet)->Private.Head; \
+ _NdisBuffer != (PNDIS_BUFFER)NULL; \
+ _NdisBuffer = _NdisBuffer->Next) \
+ { \
+ _PhysicalBufferCount += NDIS_BUFFER_TO_SPAN_PAGES(_NdisBuffer); \
+ NdisQueryBufferOffset(_NdisBuffer, &_Offset, &_PacketLength); \
+ _TotalPacketLength += _PacketLength; \
+ _Count++; \
+ } \
+ (Packet)->Private.PhysicalCount = _PhysicalBufferCount; \
+ (Packet)->Private.TotalLength = _TotalPacketLength; \
+ (Packet)->Private.Count = _Count; \
+ (Packet)->Private.ValidCounts = TRUE; \
+ } \
+ \
+ if (PhysicalBufferCount) \
+ *((PUINT)PhysicalBufferCount) = (Packet)->Private.PhysicalCount; \
+ \
+ if (BufferCount) \
+ *((PUINT)BufferCount) = (Packet)->Private.Count; \
+ \
+ if (TotalPacketLength) \
+ *((PUINT)TotalPacketLength) = (Packet)->Private.TotalLength; \
+ } \
+}
+
+/*
+ * VOID
+ * NdisQueryPacketLength(
+ * IN PNDIS_PACKET Packet,
+ * OUT PUINT PhysicalBufferCount OPTIONAL,
+ * OUT PUINT BufferCount OPTIONAL,
+ * OUT PNDIS_BUFFER *FirstBuffer OPTIONAL,
+ * OUT PUINT TotalPacketLength OPTIONAL);
+ */
+#define NdisQueryPacketLength(Packet, \
+ TotalPacketLength) \
+{ \
+ if ((TotalPacketLength)) \
+ { \
+ if (!(Packet)->Private.ValidCounts) { \
+ UINT _Offset; \
+ UINT _PacketLength; \
+ PNDIS_BUFFER _NdisBuffer; \
+ UINT _PhysicalBufferCount = 0; \
+ UINT _TotalPacketLength = 0; \
+ UINT _Count = 0; \
+ \
+ for (_NdisBuffer = (Packet)->Private.Head; \
+ _NdisBuffer != (PNDIS_BUFFER)NULL; \
+ _NdisBuffer = _NdisBuffer->Next) \
+ { \
+ _PhysicalBufferCount += NDIS_BUFFER_TO_SPAN_PAGES(_NdisBuffer); \
+ NdisQueryBufferOffset(_NdisBuffer, &_Offset, &_PacketLength); \
+ _TotalPacketLength += _PacketLength; \
+ _Count++; \
+ } \
+ (Packet)->Private.PhysicalCount = _PhysicalBufferCount; \
+ (Packet)->Private.TotalLength = _TotalPacketLength; \
+ (Packet)->Private.Count = _Count; \
+ (Packet)->Private.ValidCounts = TRUE; \
+ } \
+ \
+ if (TotalPacketLength) \
+ *((PUINT)TotalPacketLength) = (Packet)->Private.TotalLength; \
+ } \
+}
+
+
+/*
+ * VOID
+ * NdisRecalculatePacketCounts(
+ * IN OUT PNDIS_PACKET Packet);
+ */
+#define NdisRecalculatePacketCounts(Packet) \
+{ \
+ PNDIS_BUFFER _Buffer = (Packet)->Private.Head; \
+ if (_Buffer != NULL) \
+ { \
+ while (_Buffer->Next != NULL) \
+ { \
+ ´_Buffer = _Buffer->Next; \
+ } \
+ (Packet)->Private.Tail = _Buffer; \
+ } \
+ (Packet)->Private.ValidCounts = FALSE; \
+}
+
+
+/*
+ * VOID
+ * NdisReinitializePacket(
+ * IN OUT PNDIS_PACKET Packet);
+ */
+#define NdisReinitializePacket(Packet) \
+{ \
+ (Packet)->Private.Head = (PNDIS_BUFFER)NULL; \
+ (Packet)->Private.ValidCounts = FALSE; \
+}
+
+
+/*
+ * VOID
+ * NdisSetPacketFlags(
+ * IN PNDIS_PACKET Packet,
+ * IN UINT Flags);
+ */
+#define NdisSetPacketFlags(Packet, Flags) \
+ (Packet)->Private.Flags |= (Flags);
+
+
+/*
+ * VOID
+ * NDIS_SET_PACKET_HEADER_SIZE(
+ * IN PNDIS_PACKET Packet,
+ * IN UINT HdrSize);
+ */
+#define NDIS_SET_PACKET_HEADER_SIZE(_Packet, _HdrSize) \
+ ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
+ (_Packet)->Private.NdisPacketOobOffset))->HeaderSize = (_HdrSize)
+
+
+/*
+ * VOID
+ * NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO(
+ * IN PNDIS_PACKET Packet,
+ * IN PVOID MediaSpecificInfo,
+ * IN UINT SizeMediaSpecificInfo);
+ */
+#define NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO(_Packet, \
+ _MediaSpecificInfo, \
+ _SizeMediaSpecificInfo) \
+{ \
+ if ((_Packet)->Private.NdisPacketFlags & fPACKET_ALLOCATED_BY_NDIS) \
+ { \
+ (_Packet)->Private.NdisPacketFlags |= fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO; \
+ ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
+ (_Packet)->Private.NdisPacketOobOffset))->MediaSpecificInformation = \
+ (_MediaSpecificInfo); \
+ ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
+ (_Packet)->Private.NdisPacketOobOffset))->SizeMediaSpecificInfo = \
+ (_SizeMediaSpecificInfo); \
+ } \
+}
+
+
+/*
+ * VOID
+ * NDIS_SET_PACKET_STATUS(
+ * IN PNDIS_PACKET Packet,
+ * IN NDIS_STATUS Status);
+ */
+#define NDIS_SET_PACKET_STATUS(_Packet, _Status) \
+ ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
+ (_Packet)->Private.NdisPacketOobOffset))->Status = (_Status)
+
+
+/*
+ * VOID
+ * NDIS_SET_PACKET_TIME_RECEIVED(
+ * IN PNDIS_PACKET Packet,
+ * IN ULONGLONG TimeReceived);
+ */
+#define NDIS_SET_PACKET_TIME_RECEIVED(_Packet, _TimeReceived) \
+ ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
+ (_Packet)->Private.NdisPacketOobOffset))->TimeReceived = (_TimeReceived)
+
+
+/*
+ * VOID
+ * NDIS_SET_PACKET_TIME_SENT(
+ * IN PNDIS_PACKET Packet,
+ * IN ULONGLONG TimeSent);
+ */
+#define NDIS_SET_PACKET_TIME_SENT(_Packet, _TimeSent) \
+ ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
+ (_Packet)->Private.NdisPacketOobOffset))->TimeSent = (_TimeSent)
+
+
+/*
+ * VOID
+ * NDIS_SET_PACKET_TIME_TO_SEND(
+ * IN PNDIS_PACKET Packet,
+ * IN ULONGLONG TimeToSend);
+ */
+#define NDIS_SET_PACKET_TIME_TO_SEND(_Packet, _TimeToSend) \
+ ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
+ (_Packet)->Private.NdisPacketOobOffset))->TimeToSend = (_TimeToSend)
+
+
+/*
+ * VOID
+ * NdisSetSendFlags(
+ * IN PNDIS_PACKET Packet,
+ * IN UINT Flags);
+ */
+#define NdisSetSendFlags(_Packet,_Flags)(_Packet)->Private.Flags = (_Flags)
+
+
+
+/* Memory management routines */
+
+/*
+ * VOID
+ * NdisCreateLookaheadBufferFromSharedMemory(
+ * IN PVOID pSharedMemory,
+ * IN UINT LookaheadLength,
+ * OUT PVOID *pLookaheadBuffer)
+ */
+#define NdisCreateLookaheadBufferFromSharedMemory(_pSharedMemory, \
+ _LookaheadLength, \
+ _pLookaheadBuffer) \
+ ((*(_pLookaheadBuffer)) = (_pSharedMemory))
+
+/*
+ * VOID
+ * NdisDestroyLookaheadBufferFromSharedMemory(
+ * IN PVOID pLookaheadBuffer)
+ */
+#define NdisDestroyLookaheadBufferFromSharedMemory(_pLookaheadBuffer)
+
+#if defined(i386)
+
+/*
+ * VOID
+ * NdisMoveFromMappedMemory(
+ * OUT PVOID Destination,
+ * IN PVOID Source,
+ * IN ULONG Length);
+ */
+#define NdisMoveFromMappedMemory(Destination, Source, Length) \
+ NdisMoveMappedMemory(Destination, Source, Length)
+
+/*
+ * VOID
+ * NdisMoveMappedMemory(
+ * OUT PVOID Destination,
+ * IN PVOID Source,
+ * IN ULONG Length);
+ */
+#define NdisMoveMappedMemory(Destination, Source, Length) \
+ RtlCopyMemory(Destination, Source, Length)
+
+/*
+ * VOID
+ * NdisMoveToMappedMemory(
+ * OUT PVOID Destination,
+ * IN PVOID Source,
+ * IN ULONG Length);
+ */
+#define NdisMoveToMappedMemory(Destination, Source, Length) \
+ NdisMoveMappedMemory(Destination, Source, Length)
+
+#endif /* i386 */
+
+/*
+ * VOID
+ * NdisMUpdateSharedMemory(
+ * IN NDIS_HANDLE MiniportAdapterHandle,
+ * IN ULONG Length,
+ * IN PVOID VirtualAddress,
+ * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
+ */
+#define NdisMUpdateSharedMemory(_H, _L, _V, _P) \
+ NdisUpdateSharedMemory(_H, _L, _V, _P)
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisAllocateMemory(
+ /*OUT*/ PVOID *VirtualAddress,
+ /*IN*/ UINT Length,
+ /*IN*/ UINT MemoryFlags,
+ /*IN*/ NDIS_PHYSICAL_ADDRESS HighestAcceptableAddress);
+
+NDISAPI
+VOID
+DDKAPI
+NdisFreeMemory(
+ /*IN*/ PVOID VirtualAddress,
+ /*IN*/ UINT Length,
+ /*IN*/ UINT MemoryFlags);
+
+NDISAPI
+VOID
+DDKAPI
+NdisImmediateReadSharedMemory(
+ /*IN*/ NDIS_HANDLE WrapperConfigurationContext,
+ /*IN*/ ULONG SharedMemoryAddress,
+ /*OUT*/ PUCHAR Buffer,
+ /*IN*/ ULONG Length);
+
+NDISAPI
+VOID
+DDKAPI
+NdisImmediateWriteSharedMemory(
+ /*IN*/ NDIS_HANDLE WrapperConfigurationContext,
+ /*IN*/ ULONG SharedMemoryAddress,
+ /*IN*/ PUCHAR Buffer,
+ /*IN*/ ULONG Length);
+
+NDISAPI
+VOID
+DDKAPI
+NdisMAllocateSharedMemory(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
+ /*IN*/ ULONG Length,
+ /*IN*/ BOOLEAN Cached,
+ /*OUT*/ PVOID *VirtualAddress,
+ /*OUT*/ PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisMAllocateSharedMemoryAsync(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
+ /*IN*/ ULONG Length,
+ /*IN*/ BOOLEAN Cached,
+ /*IN*/ PVOID Context);
+
+#if defined(NDIS50)
+
+#define NdisUpdateSharedMemory(NdisAdapterHandle, \
+ Length, \
+ VirtualAddress, \
+ PhysicalAddress)
+
+#else
+
+NDISAPI
+VOID
+DDKAPI
+NdisUpdateSharedMemory(
+ /*IN*/ NDIS_HANDLE NdisAdapterHandle,
+ /*IN*/ ULONG Length,
+ /*IN*/ PVOID VirtualAddress,
+ /*IN*/ NDIS_PHYSICAL_ADDRESS PhysicalAddress);
+
+#endif /* defined(NDIS50) */
+
+/*
+ * ULONG
+ * NdisGetPhysicalAddressHigh(
+ * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
+ */
+#define NdisGetPhysicalAddressHigh(PhysicalAddress) \
+ ((PhysicalAddress).HighPart)
+
+/*
+ * VOID
+ * NdisSetPhysicalAddressHigh(
+ * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress,
+ * IN ULONG Value);
+ */
+#define NdisSetPhysicalAddressHigh(PhysicalAddress, Value) \
+ ((PhysicalAddress).HighPart) = (Value)
+
+/*
+ * ULONG
+ * NdisGetPhysicalAddressLow(
+ * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
+ */
+#define NdisGetPhysicalAddressLow(PhysicalAddress) \
+ ((PhysicalAddress).LowPart)
+
+
+/*
+ * VOID
+ * NdisSetPhysicalAddressLow(
+ * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress,
+ * IN ULONG Value);
+ */
+#define NdisSetPhysicalAddressLow(PhysicalAddress, Value) \
+ ((PhysicalAddress).LowPart) = (Value)
+
+/*
+ * VOID
+ * NDIS_PHYSICAL_ADDRESS_CONST(
+ * IN ULONG Low,
+ * IN LONG High);
+ */
+#define NDIS_PHYSICAL_ADDRESS_CONST(Low, High) \
+ { {(ULONG)(Low), (LONG)(High)} }
+
+/*
+ * ULONG
+ * NdisEqualMemory(
+ * IN CONST VOID *Source1,
+ * IN CONST VOID *Source2,
+ * IN ULONG Length);
+ */
+#define NdisEqualMemory(Source1, Source2, Length) \
+ RtlEqualMemory(Source1, Source2, Length)
+
+/*
+ * VOID
+ * NdisFillMemory(
+ * IN PVOID Destination,
+ * IN ULONG Length,
+ * IN UCHAR Fill);
+ */
+#define NdisFillMemory(Destination, Length, Fill) \
+ RtlFillMemory(Destination, Length, Fill)
+
+/*
+ * VOID
+ * NdisZeroMappedMemory(
+ * IN PVOID Destination,
+ * IN ULONG Length);
+ */
+#define NdisZeroMappedMemory(Destination, Length) \
+ RtlZeroMemory(Destination, Length)
+
+/*
+ * VOID
+ * NdisMoveMemory(
+ * OUT PVOID Destination,
+ * IN PVOID Source,
+ * IN ULONG Length);
+ */
+#define NdisMoveMemory(Destination, Source, Length) \
+ RtlCopyMemory(Destination, Source, Length)
+
+
+/*
+ * VOID
+ * NdisRetrieveUlong(
+ * IN PULONG DestinationAddress,
+ * IN PULONG SourceAddress);
+ */
+#define NdisRetrieveUlong(DestinationAddress, SourceAddress) \
+ RtlRetrieveUlong(DestinationAddress, SourceAddress)
+
+
+/*
+ * VOID
+ * NdisStoreUlong(
+ * IN PULONG DestinationAddress,
+ * IN ULONG Value);
+ */
+#define NdisStoreUlong(DestinationAddress, Value) \
+ RtlStoreUlong(DestinationAddress, Value)
+
+
+/*
+ * VOID
+ * NdisZeroMemory(
+ * IN PVOID Destination,
+ * IN ULONG Length)
+ */
+#define NdisZeroMemory(Destination, Length) \
+ RtlZeroMemory(Destination, Length)
+
+
+
+/* Configuration routines */
+
+NDISAPI
+VOID
+DDKAPI
+NdisOpenConfiguration(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*OUT*/ PNDIS_HANDLE ConfigurationHandle,
+ /*IN*/ NDIS_HANDLE WrapperConfigurationContext);
+
+NDISAPI
+VOID
+DDKAPI
+NdisReadNetworkAddress(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*OUT*/ PVOID *NetworkAddress,
+ /*OUT*/ PUINT NetworkAddressLength,
+ /*IN*/ NDIS_HANDLE ConfigurationHandle);
+
+NDISAPI
+VOID
+DDKAPI
+NdisReadEisaSlotInformation(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE WrapperConfigurationContext,
+ /*OUT*/ PUINT SlotNumber,
+ /*OUT*/ PNDIS_EISA_FUNCTION_INFORMATION EisaData);
+
+NDISAPI
+VOID
+DDKAPI
+NdisReadEisaSlotInformationEx(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE WrapperConfigurationContext,
+ /*OUT*/ PUINT SlotNumber,
+ /*OUT*/ PNDIS_EISA_FUNCTION_INFORMATION *EisaData,
+ /*OUT*/ PUINT NumberOfFunctions);
+
+NDISAPI
+ULONG
+DDKAPI
+NdisReadPciSlotInformation(
+ /*IN*/ NDIS_HANDLE NdisAdapterHandle,
+ /*IN*/ ULONG SlotNumber,
+ /*IN*/ ULONG Offset,
+ /*IN*/ PVOID Buffer,
+ /*IN*/ ULONG Length);
+
+NDISAPI
+ULONG
+DDKAPI
+NdisWritePciSlotInformation(
+ /*IN*/ NDIS_HANDLE NdisAdapterHandle,
+ /*IN*/ ULONG SlotNumber,
+ /*IN*/ ULONG Offset,
+ /*IN*/ PVOID Buffer,
+ /*IN*/ ULONG Length);
+
+
+
+/* String management routines */
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisAnsiStringToUnicodeString(
+ /*IN OUT*/ PNDIS_STRING DestinationString,
+ /*IN*/ PNDIS_ANSI_STRING SourceString);
+
+/*
+ * BOOLEAN
+ * NdisEqualString(
+ * IN PNDIS_STRING String1,
+ * IN PNDIS_STRING String2,
+ * IN BOOLEAN CaseInsensitive);
+ */
+#define NdisEqualString(_String1, _String2, _CaseInsensitive) \
+ RtlEqualUnicodeString(_String1, _String2, _CaseInsensitive)
+
+NDISAPI
+VOID
+DDKAPI
+NdisInitAnsiString(
+ /*IN OUT*/ PNDIS_ANSI_STRING DestinationString,
+ /*IN*/ PCSTR SourceString);
+
+NDISAPI
+VOID
+DDKAPI
+NdisInitUnicodeString(
+ /*IN OUT*/ PNDIS_STRING DestinationString,
+ /*IN*/ PCWSTR SourceString);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisUnicodeStringToAnsiString(
+ /*IN OUT*/ PNDIS_ANSI_STRING DestinationString,
+ /*IN*/ PNDIS_STRING SourceString);
+
+#define NdisFreeString(_s) NdisFreeMemory((_s).Buffer, (_s).MaximumLength, 0)
+#define NdisPrintString(_s) DbgPrint("%ls", (_s).Buffer)
+
+
+/* Spin lock reoutines */
+
+/*
+ * VOID
+ * NdisAllocateSpinLock(
+ * IN PNDIS_SPIN_LOCK SpinLock);
+ */
+#define NdisAllocateSpinLock(_SpinLock) \
+ KeInitializeSpinLock(&(_SpinLock)->SpinLock)
+
+/*
+ * VOID
+ * NdisFreeSpinLock(
+ * IN PNDIS_SPIN_LOCK SpinLock);
+ */
+#define NdisFreeSpinLock(_SpinLock)
+
+/*
+ * VOID
+ * NdisAcquireSpinLock(
+ * IN PNDIS_SPIN_LOCK SpinLock);
+ */
+#define NdisAcquireSpinLock(_SpinLock) \
+ KeAcquireSpinLock(&(_SpinLock)->SpinLock, &(_SpinLock)->OldIrql)
+
+/*
+ * VOID
+ * NdisReleaseSpinLock(
+ * IN PNDIS_SPIN_LOCK SpinLock);
+ */
+#define NdisReleaseSpinLock(_SpinLock) \
+ KeReleaseSpinLock(&(_SpinLock)->SpinLock, (_SpinLock)->OldIrql)
+
+/*
+ * VOID
+ * NdisDprAcquireSpinLock(
+ * IN PNDIS_SPIN_LOCK SpinLock);
+ */
+#define NdisDprAcquireSpinLock(_SpinLock) \
+{ \
+ KeAcquireSpinLockAtDpcLevel(&(_SpinLock)->SpinLock); \
+ (_SpinLock)->OldIrql = DISPATCH_LEVEL; \
+}
+
+/*
+ * VOID
+ * NdisDprReleaseSpinLock(
+ * IN PNDIS_SPIN_LOCK SpinLock);
+ */
+#define NdisDprReleaseSpinLock(_SpinLock) \
+ KeReleaseSpinLockFromDpcLevel(&(_SpinLock)->SpinLock)
+
+
+
+/* I/O routines */
+
+/*
+ * VOID
+ * NdisRawReadPortBufferUchar(
+ * IN ULONG Port,
+ * OUT PUCHAR Buffer,
+ * IN ULONG Length);
+ */
+#define NdisRawReadPortBufferUchar(Port, Buffer, Length) \
+ READ_PORT_BUFFER_UCHAR((PUCHAR)(Port), (PUCHAR)(Buffer), (Length))
+
+/*
+ * VOID
+ * NdisRawReadPortBufferUlong(
+ * IN ULONG Port,
+ * OUT PULONG Buffer,
+ * IN ULONG Length);
+ */
+#define NdisRawReadPortBufferUlong(Port, Buffer, Length) \
+ READ_PORT_BUFFER_ULONG((PULONG)(Port), (PULONG)(Buffer), (Length))
+
+/*
+ * VOID
+ * NdisRawReadPortBufferUshort(
+ * IN ULONG Port,
+ * OUT PUSHORT Buffer,
+ * IN ULONG Length);
+ */
+#define NdisRawReadPortBufferUshort(Port, Buffer, Length) \
+ READ_PORT_BUFFER_USHORT((PUSHORT)(Port), (PUSHORT)(Buffer), (Length))
+
+
+/*
+ * VOID
+ * NdisRawReadPortUchar(
+ * IN ULONG Port,
+ * OUT PUCHAR Data);
+ */
+#define NdisRawReadPortUchar(Port, Data) \
+ *(Data) = READ_PORT_UCHAR((PUCHAR)(Port))
+
+/*
+ * VOID
+ * NdisRawReadPortUlong(
+ * IN ULONG Port,
+ * OUT PULONG Data);
+ */
+#define NdisRawReadPortUlong(Port, Data) \
+ *(Data) = READ_PORT_ULONG((PULONG)(Port))
+
+/*
+ * VOID
+ * NdisRawReadPortUshort(
+ * IN ULONG Port,
+ * OUT PUSHORT Data);
+ */
+#define NdisRawReadPortUshort(Port, Data) \
+ *(Data) = READ_PORT_USHORT((PUSHORT)(Port))
+
+
+/*
+ * VOID
+ * NdisRawWritePortBufferUchar(
+ * IN ULONG Port,
+ * IN PUCHAR Buffer,
+ * IN ULONG Length);
+ */
+#define NdisRawWritePortBufferUchar(Port, Buffer, Length) \
+ WRITE_PORT_BUFFER_UCHAR((PUCHAR)(Port), (PUCHAR)(Buffer), (Length))
+
+/*
+ * VOID
+ * NdisRawWritePortBufferUlong(
+ * IN ULONG Port,
+ * IN PULONG Buffer,
+ * IN ULONG Length);
+ */
+#define NdisRawWritePortBufferUlong(Port, Buffer, Length) \
+ WRITE_PORT_BUFFER_ULONG((PULONG)(Port), (PULONG)(Buffer), (Length))
+
+/*
+ * VOID
+ * NdisRawWritePortBufferUshort(
+ * IN ULONG Port,
+ * IN PUSHORT Buffer,
+ * IN ULONG Length);
+ */
+#define NdisRawWritePortBufferUshort(Port, Buffer, Length) \
+ WRITE_PORT_BUFFER_USHORT((PUSHORT)(Port), (PUSHORT)(Buffer), (Length))
+
+
+/*
+ * VOID
+ * NdisRawWritePortUchar(
+ * IN ULONG Port,
+ * IN UCHAR Data);
+ */
+#define NdisRawWritePortUchar(Port, Data) \
+ WRITE_PORT_UCHAR((PUCHAR)(Port), (UCHAR)(Data))
+
+/*
+ * VOID
+ * NdisRawWritePortUlong(
+ * IN ULONG Port,
+ * IN ULONG Data);
+ */
+#define NdisRawWritePortUlong(Port, Data) \
+ WRITE_PORT_ULONG((PULONG)(Port), (ULONG)(Data))
+
+/*
+ * VOID
+ * NdisRawWritePortUshort(
+ * IN ULONG Port,
+ * IN USHORT Data);
+ */
+#define NdisRawWritePortUshort(Port, Data) \
+ WRITE_PORT_USHORT((PUSHORT)(Port), (USHORT)(Data))
+
+
+/*
+ * VOID
+ * NdisReadRegisterUchar(
+ * IN PUCHAR Register,
+ * OUT PUCHAR Data);
+ */
+#define NdisReadRegisterUchar(Register, Data) \
+ *(Data) = *(Register)
+
+/*
+ * VOID
+ * NdisReadRegisterUlong(
+ * IN PULONG Register,
+ * OUT PULONG Data);
+ */
+#define NdisReadRegisterUlong(Register, Data) \
+ *(Data) = *(Register)
+
+/*
+ * VOID
+ * NdisReadRegisterUshort(
+ * IN PUSHORT Register,
+ * OUT PUSHORT Data);
+ */
+#define NdisReadRegisterUshort(Register, Data) \
+ *(Data) = *(Register)
+
+/*
+ * VOID
+ * NdisReadRegisterUchar(
+ * IN PUCHAR Register,
+ * IN UCHAR Data);
+ */
+#define NdisWriteRegisterUchar(Register, Data) \
+ WRITE_REGISTER_UCHAR((Register), (Data))
+
+/*
+ * VOID
+ * NdisReadRegisterUlong(
+ * IN PULONG Register,
+ * IN ULONG Data);
+ */
+#define NdisWriteRegisterUlong(Register, Data) \
+ WRITE_REGISTER_ULONG((Register), (Data))
+
+/*
+ * VOID
+ * NdisReadRegisterUshort(
+ * IN PUSHORT Register,
+ * IN USHORT Data);
+ */
+#define NdisWriteRegisterUshort(Register, Data) \
+ WRITE_REGISTER_USHORT((Register), (Data))
+
+
+/* Linked lists */
+
+/*
+ * VOID
+ * NdisInitializeListHead(
+ * IN PLIST_ENTRY ListHead);
+ */
+#define NdisInitializeListHead(_ListHead) \
+ InitializeListHead(_ListHead)
+
+/*
+ * PLIST_ENTRY
+ * NdisInterlockedInsertHeadList(
+ * IN PLIST_ENTRY ListHead,
+ * IN PLIST_ENTRY ListEntry,
+ * IN PNDIS_SPIN_LOCK SpinLock);
+ */
+#define NdisInterlockedInsertHeadList(_ListHead, _ListEntry, _SpinLock) \
+ ExInterlockedInsertHeadList(_ListHead, _ListEntry, &(_SpinLock)->SpinLock)
+
+/*
+ * PLIST_ENTRY
+ * NdisInterlockedInsertTailList(
+ * IN PLIST_ENTRY ListHead,
+ * IN PLIST_ENTRY ListEntry,
+ * IN PNDIS_SPIN_LOCK SpinLock);
+ */
+#define NdisInterlockedInsertTailList(_ListHead, _ListEntry, _SpinLock) \
+ ExInterlockedInsertTailList(_ListHead, _ListEntry, &(_SpinLock)->SpinLock)
+
+/*
+ * PLIST_ENTRY
+ * NdisInterlockedRemoveHeadList(
+ * IN PLIST_ENTRY ListHead,
+ * IN PNDIS_SPIN_LOCK SpinLock);
+*/
+#define NdisInterlockedRemoveHeadList(_ListHead, _SpinLock) \
+ ExInterlockedRemoveHeadList(_ListHead, &(_SpinLock)->SpinLock)
+
+/*
+ * VOID
+ * NdisInitializeSListHead(
+ * IN PSLIST_HEADER SListHead);
+ */
+#define NdisInitializeSListHead(SListHead) ExInitializeSListHead(SListHead)
+
+/*
+ * USHORT NdisQueryDepthSList(
+ * IN PSLIST_HEADER SListHead);
+ */
+#define NdisQueryDepthSList(SListHead) ExQueryDepthSList(SListHead)
+
+
+
+/* Interlocked routines */
+
+/*
+ * LONG
+ * NdisInterlockedDecrement(
+ * IN PLONG Addend);
+ */
+#define NdisInterlockedDecrement(Addend) InterlockedDecrement(Addend)
+
+/*
+ * LONG
+ * NdisInterlockedIncrement(
+ * IN PLONG Addend);
+ */
+#define NdisInterlockedIncrement(Addend) InterlockedIncrement(Addend)
+
+/*
+ * VOID
+ * NdisInterlockedAddUlong(
+ * IN PULONG Addend,
+ * IN ULONG Increment,
+ * IN PNDIS_SPIN_LOCK SpinLock);
+ */
+#define NdisInterlockedAddUlong(_Addend, _Increment, _SpinLock) \
+ ExInterlockedAddUlong(_Addend, _Increment, &(_SpinLock)->SpinLock)
+
+
+
+/* Miscellaneous routines */
+
+NDISAPI
+VOID
+DDKAPI
+NdisCloseConfiguration(
+ /*IN*/ NDIS_HANDLE ConfigurationHandle);
+
+NDISAPI
+VOID
+DDKAPI
+NdisReadConfiguration(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*OUT*/ PNDIS_CONFIGURATION_PARAMETER *ParameterValue,
+ /*IN*/ NDIS_HANDLE ConfigurationHandle,
+ /*IN*/ PNDIS_STRING Keyword,
+ /*IN*/ NDIS_PARAMETER_TYPE ParameterType);
+
+NDISAPI
+VOID
+DDKAPI
+NdisWriteConfiguration(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE WrapperConfigurationContext,
+ /*IN*/ PNDIS_STRING Keyword,
+ /*IN*/ PNDIS_CONFIGURATION_PARAMETER *ParameterValue);
+
+NDISAPI
+VOID
+DDKCDECLAPI
+NdisWriteErrorLogEntry(
+ /*IN*/ NDIS_HANDLE NdisAdapterHandle,
+ /*IN*/ NDIS_ERROR_CODE ErrorCode,
+ /*IN*/ ULONG NumberOfErrorValues,
+ /*IN*/ ...);
+
+/*
+ * VOID
+ * NdisStallExecution(
+ * IN UINT MicrosecondsToStall)
+ */
+#define NdisStallExecution KeStallExecutionProcessor
+
+/*
+ * VOID
+ * NdisGetCurrentSystemTime(
+ * IN PLARGE_INTEGER pSystemTime);
+ */
+#define NdisGetCurrentSystemTime KeQuerySystemTime
+
+NDISAPI
+VOID
+DDKAPI
+NdisGetCurrentProcessorCpuUsage(
+ /*OUT*/ PULONG pCpuUsage);
+
+
+
+/* NDIS helper macros */
+
+/*
+ * VOID
+ * NDIS_INIT_FUNCTION(FunctionName)
+ */
+#define NDIS_INIT_FUNCTION(FunctionName) \
+ alloc_text(init, FunctionName)
+
+/*
+ * VOID
+ * NDIS_PAGABLE_FUNCTION(FunctionName)
+ */
+#define NDIS_PAGEABLE_FUNCTION(FunctionName) \
+ alloc_text(page, FunctionName)
+
+#define NDIS_PAGABLE_FUNCTION NDIS_PAGEABLE_FUNCTION
+
+
+/* NDIS 4.0 extensions */
+
+NDISAPI
+VOID
+DDKAPI
+NdisMFreeSharedMemory(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
+ /*IN*/ ULONG Length,
+ /*IN*/ BOOLEAN Cached,
+ /*IN*/ PVOID VirtualAddress,
+ /*IN*/ NDIS_PHYSICAL_ADDRESS PhysicalAddress);
+
+NDISAPI
+VOID
+DDKAPI
+NdisMWanIndicateReceive(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
+ /*IN*/ NDIS_HANDLE NdisLinkContext,
+ /*IN*/ PUCHAR PacketBuffer,
+ /*IN*/ UINT PacketSize);
+
+#define NdisMIndicateReceivePacket(_handle, _packets, _number) \
+{ \
+ (*((PNDIS_MINIPORT_BLOCK)(_handle))->PacketIndicateHandler)(_handle, _packets, _number); \
+}
+
+NDISAPI
+VOID
+DDKAPI
+NdisMWanIndicateReceiveComplete(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle);
+
+NDISAPI
+VOID
+DDKAPI
+NdisMWanSendComplete(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
+ /*IN*/ PNDIS_WAN_PACKET Packet,
+ /*IN*/ NDIS_STATUS Status);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisPciAssignResources(
+ /*IN*/ NDIS_HANDLE NdisMacHandle,
+ /*IN*/ NDIS_HANDLE NdisWrapperHandle,
+ /*IN*/ NDIS_HANDLE WrapperConfigurationContext,
+ /*IN*/ ULONG SlotNumber,
+ /*OUT*/ PNDIS_RESOURCE_LIST *AssignedResources);
+
+
+/* NDIS 5.0 extensions */
+
+NDISAPI
+VOID
+DDKAPI
+NdisAcquireReadWriteLock(
+ /*IN*/ PNDIS_RW_LOCK Lock,
+ /*IN*/ BOOLEAN fWrite,
+ /*IN*/ PLOCK_STATE LockState);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisAllocateMemoryWithTag(
+ /*OUT*/ PVOID *VirtualAddress,
+ /*IN*/ UINT Length,
+ /*IN*/ ULONG Tag);
+
+NDISAPI
+VOID
+DDKAPI
+NdisAllocatePacketPoolEx(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*OUT*/ PNDIS_HANDLE PoolHandle,
+ /*IN*/ UINT NumberOfDescriptors,
+ /*IN*/ UINT NumberOfOverflowDescriptors,
+ /*IN*/ UINT ProtocolReservedLength);
+
+NDISAPI
+VOID
+DDKAPI
+NdisCompletePnPEvent(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE NdisBindingHandle,
+ /*IN*/ PNET_PNP_EVENT NetPnPEvent);
+
+NDISAPI
+VOID
+DDKAPI
+NdisGetCurrentProcessorCounts(
+ /*OUT*/ PULONG pIdleCount,
+ /*OUT*/ PULONG pKernelAndUser,
+ /*OUT*/ PULONG pIndex);
+
+NDISAPI
+VOID
+DDKAPI
+NdisGetDriverHandle(
+ /*IN*/ PNDIS_HANDLE NdisBindingHandle,
+ /*OUT*/ PNDIS_HANDLE NdisDriverHandle);
+
+NDISAPI
+PNDIS_PACKET
+DDKAPI
+NdisGetReceivedPacket(
+ /*IN*/ PNDIS_HANDLE NdisBindingHandle,
+ /*IN*/ PNDIS_HANDLE MacContext);
+
+NDISAPI
+VOID
+DDKAPI
+NdisGetSystemUptime(
+ /*OUT*/ PULONG pSystemUpTime);
+
+NDISAPI
+VOID
+DDKAPI
+NdisInitializeReadWriteLock(
+ /*IN*/ PNDIS_RW_LOCK Lock);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisMDeregisterDevice(
+ /*IN*/ NDIS_HANDLE NdisDeviceHandle);
+
+NDISAPI
+VOID
+DDKAPI
+NdisMGetDeviceProperty(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
+ /*IN OUT*/ PDEVICE_OBJECT *PhysicalDeviceObject /*OPTIONAL*/,
+ /*IN OUT*/ PDEVICE_OBJECT *FunctionalDeviceObject /*OPTIONAL*/,
+ /*IN OUT*/ PDEVICE_OBJECT *NextDeviceObject /*OPTIONAL*/,
+ /*IN OUT*/ PCM_RESOURCE_LIST *AllocatedResources /*OPTIONAL*/,
+ /*IN OUT*/ PCM_RESOURCE_LIST *AllocatedResourcesTranslated /*OPTIONAL*/);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisMInitializeScatterGatherDma(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
+ /*IN*/ BOOLEAN Dma64BitAddresses,
+ /*IN*/ ULONG MaximumPhysicalMapping);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisMPromoteMiniport(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisMQueryAdapterInstanceName(
+ /*OUT*/ PNDIS_STRING AdapterInstanceName,
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisMRegisterDevice(
+ /*IN*/ NDIS_HANDLE NdisWrapperHandle,
+ /*IN*/ PNDIS_STRING DeviceName,
+ /*IN*/ PNDIS_STRING SymbolicName,
+ /*IN*/ PDRIVER_DISPATCH MajorFunctions[],
+ /*OUT*/ PDEVICE_OBJECT *pDeviceObject,
+ /*OUT*/ NDIS_HANDLE *NdisDeviceHandle);
+
+NDISAPI
+VOID
+DDKAPI
+NdisMRegisterUnloadHandler(
+ /*IN*/ NDIS_HANDLE NdisWrapperHandle,
+ /*IN*/ PDRIVER_UNLOAD UnloadHandler);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisMRemoveMiniport(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisMSetMiniportSecondary(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
+ /*IN*/ NDIS_HANDLE PrimaryMiniportAdapterHandle);
+
+NDISAPI
+VOID
+DDKAPI
+NdisOpenConfigurationKeyByIndex(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE ConfigurationHandle,
+ /*IN*/ ULONG Index,
+ /*OUT*/ PNDIS_STRING KeyName,
+ /*OUT*/ PNDIS_HANDLE KeyHandle);
+
+NDISAPI
+VOID
+DDKAPI
+NdisOpenConfigurationKeyByName(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE ConfigurationHandle,
+ /*IN*/ PNDIS_STRING SubKeyName,
+ /*OUT*/ PNDIS_HANDLE SubKeyHandle);
+
+NDISAPI
+UINT
+DDKAPI
+NdisPacketPoolUsage(
+ /*IN*/ NDIS_HANDLE PoolHandle);
+
+NTOSAPI
+VOID
+DDKAPI
+NdisSetPacketPoolProtocolId(
+ /*IN*/ NDIS_HANDLE PacketPoolHandle,
+ /*IN*/ UINT ProtocolId);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisQueryAdapterInstanceName(
+ /*OUT*/ PNDIS_STRING AdapterInstanceName,
+ /*IN*/ NDIS_HANDLE NdisBindingHandle);
+
+NDISAPI
+ULONG
+DDKAPI
+NdisReadPcmciaAttributeMemory(
+ /*IN*/ NDIS_HANDLE NdisAdapterHandle,
+ /*IN*/ ULONG Offset,
+ /*IN*/ PVOID Buffer,
+ /*IN*/ ULONG Length);
+
+NDISAPI
+VOID
+DDKAPI
+NdisReleaseReadWriteLock(
+ /*IN*/ PNDIS_RW_LOCK Lock,
+ /*IN*/ PLOCK_STATE LockState);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisWriteEventLogEntry(
+ /*IN*/ PVOID LogHandle,
+ /*IN*/ NDIS_STATUS EventCode,
+ /*IN*/ ULONG UniqueEventValue,
+ /*IN*/ USHORT NumStrings,
+ /*IN*/ PVOID StringsList /*OPTIONAL*/,
+ /*IN*/ ULONG DataSize,
+ /*IN*/ PVOID Data /*OPTIONAL*/);
+
+NDISAPI
+ULONG
+DDKAPI
+NdisWritePcmciaAttributeMemory(
+ /*IN*/ NDIS_HANDLE NdisAdapterHandle,
+ /*IN*/ ULONG Offset,
+ /*IN*/ PVOID Buffer,
+ /*IN*/ ULONG Length);
+
+
+/* Connectionless services */
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisClAddParty(
+ /*IN*/ NDIS_HANDLE NdisVcHandle,
+ /*IN*/ NDIS_HANDLE ProtocolPartyContext,
+ /*IN OUT*/ PCO_CALL_PARAMETERS CallParameters,
+ /*OUT*/ PNDIS_HANDLE NdisPartyHandle);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisClCloseAddressFamily(
+ /*IN*/ NDIS_HANDLE NdisAfHandle);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisClCloseCall(
+ /*IN*/ NDIS_HANDLE NdisVcHandle,
+ /*IN*/ NDIS_HANDLE NdisPartyHandle /*OPTIONAL*/,
+ /*IN*/ PVOID Buffer /*OPTIONAL*/,
+ /*IN*/ UINT Size);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisClDeregisterSap(
+ /*IN*/ NDIS_HANDLE NdisSapHandle);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisClDropParty(
+ /*IN*/ NDIS_HANDLE NdisPartyHandle,
+ /*IN*/ PVOID Buffer /*OPTIONAL*/,
+ /*IN*/ UINT Size);
+
+NDISAPI
+VOID
+DDKAPI
+NdisClIncomingCallComplete(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE NdisVcHandle,
+ /*IN*/ PCO_CALL_PARAMETERS CallParameters);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisClMakeCall(
+ /*IN*/ NDIS_HANDLE NdisVcHandle,
+ /*IN OUT*/ PCO_CALL_PARAMETERS CallParameters,
+ /*IN*/ NDIS_HANDLE ProtocolPartyContext /*OPTIONAL*/,
+ /*OUT*/ PNDIS_HANDLE NdisPartyHandle /*OPTIONAL*/);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisClModifyCallQoS(
+ /*IN*/ NDIS_HANDLE NdisVcHandle,
+ /*IN*/ PCO_CALL_PARAMETERS CallParameters);
+
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisClOpenAddressFamily(
+ /*IN*/ NDIS_HANDLE NdisBindingHandle,
+ /*IN*/ PCO_ADDRESS_FAMILY AddressFamily,
+ /*IN*/ NDIS_HANDLE ProtocolAfContext,
+ /*IN*/ PNDIS_CLIENT_CHARACTERISTICS ClCharacteristics,
+ /*IN*/ UINT SizeOfClCharacteristics,
+ /*OUT*/ PNDIS_HANDLE NdisAfHandle);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisClRegisterSap(
+ /*IN*/ NDIS_HANDLE NdisAfHandle,
+ /*IN*/ NDIS_HANDLE ProtocolSapContext,
+ /*IN*/ PCO_SAP Sap,
+ /*OUT*/ PNDIS_HANDLE NdisSapHandle);
+
+
+/* Call Manager services */
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisCmActivateVc(
+ /*IN*/ NDIS_HANDLE NdisVcHandle,
+ /*IN OUT*/ PCO_CALL_PARAMETERS CallParameters);
+
+NDISAPI
+VOID
+DDKAPI
+NdisCmAddPartyComplete(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE NdisPartyHandle,
+ /*IN*/ NDIS_HANDLE CallMgrPartyContext /*OPTIONAL*/,
+ /*IN*/ PCO_CALL_PARAMETERS CallParameters);
+
+NDISAPI
+VOID
+DDKAPI
+NdisCmCloseAddressFamilyComplete(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE NdisAfHandle);
+
+NDISAPI
+VOID
+DDKAPI
+NdisCmCloseCallComplete(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE NdisVcHandle,
+ /*IN*/ NDIS_HANDLE NdisPartyHandle /*OPTIONAL*/);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisCmDeactivateVc(
+ /*IN*/ NDIS_HANDLE NdisVcHandle);
+
+NDISAPI
+VOID
+DDKAPI
+NdisCmDeregisterSapComplete(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE NdisSapHandle);
+
+NDISAPI
+VOID
+DDKAPI
+NdisCmDispatchCallConnected(
+ /*IN*/ NDIS_HANDLE NdisVcHandle);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisCmDispatchIncomingCall(
+ /*IN*/ NDIS_HANDLE NdisSapHandle,
+ /*IN*/ NDIS_HANDLE NdisVcHandle,
+ /*IN*/ PCO_CALL_PARAMETERS CallParameters);
+
+NDISAPI
+VOID
+DDKAPI
+NdisCmDispatchIncomingCallQoSChange(
+ /*IN*/ NDIS_HANDLE NdisVcHandle,
+ /*IN*/ PCO_CALL_PARAMETERS CallParameters);
+
+NDISAPI
+VOID
+DDKAPI
+NdisCmDispatchIncomingCloseCall(
+ /*IN*/ NDIS_STATUS CloseStatus,
+ /*IN*/ NDIS_HANDLE NdisVcHandle,
+ /*IN*/ PVOID Buffer /*OPTIONAL*/,
+ /*IN*/ UINT Size);
+
+NDISAPI
+VOID
+DDKAPI
+NdisCmDispatchIncomingDropParty(
+ /*IN*/ NDIS_STATUS DropStatus,
+ /*IN*/ NDIS_HANDLE NdisPartyHandle,
+ /*IN*/ PVOID Buffer /*OPTIONAL*/,
+ /*IN*/ UINT Size);
+
+NDISAPI
+VOID
+DDKAPI
+NdisCmDropPartyComplete(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE NdisPartyHandle);
+
+NDISAPI
+VOID
+DDKAPI
+NdisCmMakeCallComplete(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE NdisVcHandle,
+ /*IN*/ NDIS_HANDLE NdisPartyHandle /*OPTIONAL*/,
+ /*IN*/ NDIS_HANDLE CallMgrPartyContext /*OPTIONAL*/,
+ /*IN*/ PCO_CALL_PARAMETERS CallParameters);
+
+NDISAPI
+VOID
+DDKAPI
+NdisCmModifyCallQoSComplete(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE NdisVcHandle,
+ /*IN*/ PCO_CALL_PARAMETERS CallParameters);
+
+NDISAPI
+VOID
+DDKAPI
+NdisCmOpenAddressFamilyComplete(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE NdisAfHandle,
+ /*IN*/ NDIS_HANDLE CallMgrAfContext);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisCmRegisterAddressFamily(
+ /*IN*/ NDIS_HANDLE NdisBindingHandle,
+ /*IN*/ PCO_ADDRESS_FAMILY AddressFamily,
+ /*IN*/ PNDIS_CALL_MANAGER_CHARACTERISTICS CmCharacteristics,
+ /*IN*/ UINT SizeOfCmCharacteristics);
+
+NDISAPI
+VOID
+DDKAPI
+NdisCmRegisterSapComplete(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE NdisSapHandle,
+ /*IN*/ NDIS_HANDLE CallMgrSapContext);
+
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisMCmActivateVc(
+ /*IN*/ NDIS_HANDLE NdisVcHandle,
+ /*IN*/ PCO_CALL_PARAMETERS CallParameters);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisMCmCreateVc(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
+ /*IN*/ NDIS_HANDLE NdisAfHandle,
+ /*IN*/ NDIS_HANDLE MiniportVcContext,
+ /*OUT*/ PNDIS_HANDLE NdisVcHandle);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisMCmDeactivateVc(
+ /*IN*/ NDIS_HANDLE NdisVcHandle);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisMCmDeleteVc(
+ /*IN*/ NDIS_HANDLE NdisVcHandle);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisMCmRegisterAddressFamily(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
+ /*IN*/ PCO_ADDRESS_FAMILY AddressFamily,
+ /*IN*/ PNDIS_CALL_MANAGER_CHARACTERISTICS CmCharacteristics,
+ /*IN*/ UINT SizeOfCmCharacteristics);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisMCmRequest(
+ /*IN*/ NDIS_HANDLE NdisAfHandle,
+ /*IN*/ NDIS_HANDLE NdisVcHandle /*OPTIONAL*/,
+ /*IN*/ NDIS_HANDLE NdisPartyHandle /*OPTIONAL*/,
+ /*IN OUT*/ PNDIS_REQUEST NdisRequest);
+
+
+/* Connection-oriented services */
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisCoCreateVc(
+ /*IN*/ NDIS_HANDLE NdisBindingHandle,
+ /*IN*/ NDIS_HANDLE NdisAfHandle /*OPTIONAL*/,
+ /*IN*/ NDIS_HANDLE ProtocolVcContext,
+ /*IN OUT*/ PNDIS_HANDLE NdisVcHandle);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisCoDeleteVc(
+ /*IN*/ NDIS_HANDLE NdisVcHandle);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisCoRequest(
+ /*IN*/ NDIS_HANDLE NdisBindingHandle,
+ /*IN*/ NDIS_HANDLE NdisAfHandle /*OPTIONAL*/,
+ /*IN*/ NDIS_HANDLE NdisVcHandle /*OPTIONAL*/,
+ /*IN*/ NDIS_HANDLE NdisPartyHandle /*OPTIONAL*/,
+ /*IN OUT*/ PNDIS_REQUEST NdisRequest);
+
+NDISAPI
+VOID
+DDKAPI
+NdisCoRequestComplete(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE NdisAfHandle,
+ /*IN*/ NDIS_HANDLE NdisVcHandle /*OPTIONAL*/,
+ /*IN*/ NDIS_HANDLE NdisPartyHandle /*OPTIONAL*/,
+ /*IN*/ PNDIS_REQUEST NdisRequest);
+
+NDISAPI
+VOID
+DDKAPI
+NdisCoSendPackets(
+ /*IN*/ NDIS_HANDLE NdisVcHandle,
+ /*IN*/ PPNDIS_PACKET PacketArray,
+ /*IN*/ UINT NumberOfPackets);
+
+NDISAPI
+VOID
+DDKAPI
+NdisMCoActivateVcComplete(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE NdisVcHandle,
+ /*IN*/ PCO_CALL_PARAMETERS CallParameters);
+
+NDISAPI
+VOID
+DDKAPI
+NdisMCoDeactivateVcComplete(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE NdisVcHandle);
+
+NDISAPI
+VOID
+DDKAPI
+NdisMCoIndicateReceivePacket(
+ /*IN*/ NDIS_HANDLE NdisVcHandle,
+ /*IN*/ PPNDIS_PACKET PacketArray,
+ /*IN*/ UINT NumberOfPackets);
+
+NDISAPI
+VOID
+DDKAPI
+NdisMCoIndicateStatus(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
+ /*IN*/ NDIS_HANDLE NdisVcHandle /*OPTIONAL*/,
+ /*IN*/ NDIS_STATUS GeneralStatus,
+ /*IN*/ PVOID StatusBuffer /*OPTIONAL*/,
+ /*IN*/ ULONG StatusBufferSize);
+
+NDISAPI
+VOID
+DDKAPI
+NdisMCoReceiveComplete(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle);
+
+NDISAPI
+VOID
+DDKAPI
+NdisMCoRequestComplete(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
+ /*IN*/ PNDIS_REQUEST Request);
+
+NDISAPI
+VOID
+DDKAPI
+NdisMCoSendComplete(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE NdisVcHandle,
+ /*IN*/ PNDIS_PACKET Packet);
+
+
+/* NDIS 5.0 extensions for intermediate drivers */
+
+NDISAPI
+VOID
+DDKAPI
+NdisIMAssociateMiniport(
+ /*IN*/ NDIS_HANDLE DriverHandle,
+ /*IN*/ NDIS_HANDLE ProtocolHandle);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisIMCancelInitializeDeviceInstance(
+ /*IN*/ NDIS_HANDLE DriverHandle,
+ /*IN*/ PNDIS_STRING DeviceInstance);
+
+NDISAPI
+VOID
+DDKAPI
+NdisIMCopySendCompletePerPacketInfo(
+ /*IN*/ PNDIS_PACKET DstPacket,
+ /*IN*/ PNDIS_PACKET SrcPacket);
+
+NDISAPI
+VOID
+DDKAPI
+NdisIMCopySendPerPacketInfo(
+ /*IN*/ PNDIS_PACKET DstPacket,
+ /*IN*/ PNDIS_PACKET SrcPacket);
+
+NDISAPI
+VOID
+DDKAPI
+NdisIMDeregisterLayeredMiniport(
+ /*IN*/ NDIS_HANDLE DriverHandle);
+
+NDISAPI
+NDIS_HANDLE
+DDKAPI
+NdisIMGetBindingContext(
+ /*IN*/ NDIS_HANDLE NdisBindingHandle);
+
+NDISAPI
+NDIS_HANDLE
+DDKAPI
+NdisIMGetDeviceContext(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisIMInitializeDeviceInstanceEx(
+ /*IN*/ NDIS_HANDLE DriverHandle,
+ /*IN*/ PNDIS_STRING DriverInstance,
+ /*IN*/ NDIS_HANDLE DeviceContext /*OPTIONAL*/);
+
+NDISAPI
+PSINGLE_LIST_ENTRY
+DDKAPI
+NdisInterlockedPopEntrySList(
+ /*IN*/ PSLIST_HEADER ListHead,
+ /*IN*/ PKSPIN_LOCK Lock);
+
+NDISAPI
+PSINGLE_LIST_ENTRY
+DDKAPI
+NdisInterlockedPushEntrySList(
+ /*IN*/ PSLIST_HEADER ListHead,
+ /*IN*/ PSINGLE_LIST_ENTRY ListEntry,
+ /*IN*/ PKSPIN_LOCK Lock);
+
+NDISAPI
+VOID
+DDKAPI
+NdisQueryBufferSafe(
+ /*IN*/ PNDIS_BUFFER Buffer,
+ /*OUT*/ PVOID *VirtualAddress /*OPTIONAL*/,
+ /*OUT*/ PUINT Length,
+ /*IN*/ UINT Priority);
+
+
+/* Prototypes for NDIS_MINIPORT_CHARACTERISTICS */
+
+typedef BOOLEAN DDKAPI
+(*W_CHECK_FOR_HANG_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportAdapterContext);
+
+typedef VOID DDKAPI
+(*W_DISABLE_INTERRUPT_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportAdapterContext);
+
+typedef VOID DDKAPI
+(*W_ENABLE_INTERRUPT_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportAdapterContext);
+
+typedef VOID DDKAPI
+(*W_HALT_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportAdapterContext);
+
+typedef VOID DDKAPI
+(*W_HANDLE_INTERRUPT_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportAdapterContext);
+
+typedef NDIS_STATUS DDKAPI
+(*W_INITIALIZE_HANDLER)(
+ /*OUT*/ PNDIS_STATUS OpenErrorStatus,
+ /*OUT*/ PUINT SelectedMediumIndex,
+ /*IN*/ PNDIS_MEDIUM MediumArray,
+ /*IN*/ UINT MediumArraySize,
+ /*IN*/ NDIS_HANDLE MiniportAdapterContext,
+ /*IN*/ NDIS_HANDLE WrapperConfigurationContext);
+
+typedef VOID DDKAPI
+(*W_ISR_HANDLER)(
+ /*OUT*/ PBOOLEAN InterruptRecognized,
+ /*OUT*/ PBOOLEAN QueueMiniportHandleInterrupt,
+ /*IN*/ NDIS_HANDLE MiniportAdapterContext);
+
+typedef NDIS_STATUS DDKAPI
+(*W_QUERY_INFORMATION_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportAdapterContext,
+ /*IN*/ NDIS_OID Oid,
+ /*IN*/ PVOID InformationBuffer,
+ /*IN*/ ULONG InformationBufferLength,
+ /*OUT*/ PULONG BytesWritten,
+ /*OUT*/ PULONG BytesNeeded);
+
+typedef NDIS_STATUS DDKAPI
+(*W_RECONFIGURE_HANDLER)(
+ /*OUT*/ PNDIS_STATUS OpenErrorStatus,
+ /*IN*/ NDIS_HANDLE MiniportAdapterContext,
+ /*IN*/ NDIS_HANDLE WrapperConfigurationContext);
+
+typedef NDIS_STATUS DDKAPI
+(*W_RESET_HANDLER)(
+ /*OUT*/ PBOOLEAN AddressingReset,
+ /*IN*/ NDIS_HANDLE MiniportAdapterContext);
+
+typedef NDIS_STATUS DDKAPI
+(*W_SEND_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportAdapterContext,
+ /*IN*/ PNDIS_PACKET Packet,
+ /*IN*/ UINT Flags);
+
+typedef NDIS_STATUS DDKAPI
+(*WM_SEND_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportAdapterContext,
+ /*IN*/ NDIS_HANDLE NdisLinkHandle,
+ /*IN*/ PNDIS_WAN_PACKET Packet);
+
+typedef NDIS_STATUS DDKAPI
+(*W_SET_INFORMATION_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportAdapterContext,
+ /*IN*/ NDIS_OID Oid,
+ /*IN*/ PVOID InformationBuffer,
+ /*IN*/ ULONG InformationBufferLength,
+ /*OUT*/ PULONG BytesRead,
+ /*OUT*/ PULONG BytesNeeded);
+
+typedef NDIS_STATUS DDKAPI
+(*W_TRANSFER_DATA_HANDLER)(
+ /*OUT*/ PNDIS_PACKET Packet,
+ /*OUT*/ PUINT BytesTransferred,
+ /*IN*/ NDIS_HANDLE MiniportAdapterContext,
+ /*IN*/ NDIS_HANDLE MiniportReceiveContext,
+ /*IN*/ UINT ByteOffset,
+ /*IN*/ UINT BytesToTransfer);
+
+typedef NDIS_STATUS DDKAPI
+(*WM_TRANSFER_DATA_HANDLER)(
+ VOID);
+
+
+/* NDIS structures available only to miniport drivers */
+
+#define NDIS30_MINIPORT_CHARACTERISTICS_S \
+ UCHAR MajorNdisVersion; \
+ UCHAR MinorNdisVersion; \
+ UINT Reserved; \
+ W_CHECK_FOR_HANG_HANDLER CheckForHangHandler; \
+ W_DISABLE_INTERRUPT_HANDLER DisableInterruptHandler; \
+ W_ENABLE_INTERRUPT_HANDLER EnableInterruptHandler; \
+ W_HALT_HANDLER HaltHandler; \
+ W_HANDLE_INTERRUPT_HANDLER HandleInterruptHandler; \
+ W_INITIALIZE_HANDLER InitializeHandler; \
+ W_ISR_HANDLER ISRHandler; \
+ W_QUERY_INFORMATION_HANDLER QueryInformationHandler; \
+ W_RECONFIGURE_HANDLER ReconfigureHandler; \
+ W_RESET_HANDLER ResetHandler; \
+ _ANONYMOUS_UNION union { \
+ W_SEND_HANDLER SendHandler; \
+ WM_SEND_HANDLER WanSendHandler; \
+ } _UNION_NAME(u1); \
+ W_SET_INFORMATION_HANDLER SetInformationHandler; \
+ _ANONYMOUS_UNION union { \
+ W_TRANSFER_DATA_HANDLER TransferDataHandler; \
+ WM_TRANSFER_DATA_HANDLER WanTransferDataHandler; \
+ } _UNION_NAME(u2);
+
+typedef struct _NDIS30_MINIPORT_CHARACTERISTICS {
+ NDIS30_MINIPORT_CHARACTERISTICS_S
+} NDIS30_MINIPORT_CHARACTERISTICS, *PSNDIS30_MINIPORT_CHARACTERISTICS;
+
+
+/* Extensions for NDIS 4.0 miniports */
+
+typedef VOID DDKAPI
+(*W_SEND_PACKETS_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportAdapterContext,
+ /*IN*/ PPNDIS_PACKET PacketArray,
+ /*IN*/ UINT NumberOfPackets);
+
+typedef VOID DDKAPI
+(*W_RETURN_PACKET_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportAdapterContext,
+ /*IN*/ PNDIS_PACKET Packet);
+
+typedef VOID DDKAPI
+(*W_ALLOCATE_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportAdapterContext,
+ /*IN*/ PVOID VirtualAddress,
+ /*IN*/ PNDIS_PHYSICAL_ADDRESS PhysicalAddress,
+ /*IN*/ ULONG Length,
+ /*IN*/ PVOID Context);
+
+#ifdef __cplusplus
+
+#define NDIS40_MINIPORT_CHARACTERISTICS_S \
+ NDIS30_MINIPORT_CHARACTERISTICS Ndis30Chars; \
+ W_RETURN_PACKET_HANDLER ReturnPacketHandler; \
+ W_SEND_PACKETS_HANDLER SendPacketsHandler; \
+ W_ALLOCATE_COMPLETE_HANDLER AllocateCompleteHandler;
+
+#else /* !__cplusplus */
+
+#define NDIS40_MINIPORT_CHARACTERISTICS_S \
+ NDIS30_MINIPORT_CHARACTERISTICS_S \
+ W_RETURN_PACKET_HANDLER ReturnPacketHandler; \
+ W_SEND_PACKETS_HANDLER SendPacketsHandler; \
+ W_ALLOCATE_COMPLETE_HANDLER AllocateCompleteHandler;
+
+#endif /* !__cplusplus */
+
+typedef struct _NDIS40_MINIPORT_CHARACTERISTICS {
+ NDIS40_MINIPORT_CHARACTERISTICS_S
+} NDIS40_MINIPORT_CHARACTERISTICS, *PNDIS40_MINIPORT_CHARACTERISTICS;
+
+
+/* Extensions for NDIS 5.0 miniports */
+
+typedef NDIS_STATUS DDKAPI
+(*W_CO_CREATE_VC_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportAdapterContext,
+ /*IN*/ NDIS_HANDLE NdisVcHandle,
+ /*OUT*/ PNDIS_HANDLE MiniportVcContext);
+
+typedef NDIS_STATUS DDKAPI
+(*W_CO_DELETE_VC_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportVcContext);
+
+typedef NDIS_STATUS DDKAPI
+(*W_CO_ACTIVATE_VC_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportVcContext,
+ /*IN OUT*/ PCO_CALL_PARAMETERS CallParameters);
+
+typedef NDIS_STATUS DDKAPI
+(*W_CO_DEACTIVATE_VC_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportVcContext);
+
+typedef VOID DDKAPI
+(*W_CO_SEND_PACKETS_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportVcContext,
+ /*IN*/ PPNDIS_PACKET PacketArray,
+ /*IN*/ UINT NumberOfPackets);
+
+typedef NDIS_STATUS DDKAPI
+(*W_CO_REQUEST_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportAdapterContext,
+ /*IN*/ NDIS_HANDLE MiniportVcContext /*OPTIONAL*/,
+ /*IN OUT*/ PNDIS_REQUEST NdisRequest);
+
+#ifdef __cplusplus
+
+#define NDIS50_MINIPORT_CHARACTERISTICS_S \
+ NDIS40_MINIPORT_CHARACTERISTICS Ndis40Chars; \
+ W_CO_CREATE_VC_HANDLER CoCreateVcHandler; \
+ W_CO_DELETE_VC_HANDLER CoDeleteVcHandler; \
+ W_CO_ACTIVATE_VC_HANDLER CoActivateVcHandler; \
+ W_CO_DEACTIVATE_VC_HANDLER CoDeactivateVcHandler; \
+ W_CO_SEND_PACKETS_HANDLER CoSendPacketsHandler; \
+ W_CO_REQUEST_HANDLER CoRequestHandler;
+
+#else /* !__cplusplus */
+
+#define NDIS50_MINIPORT_CHARACTERISTICS_S \
+ NDIS40_MINIPORT_CHARACTERISTICS_S \
+ W_CO_CREATE_VC_HANDLER CoCreateVcHandler; \
+ W_CO_DELETE_VC_HANDLER CoDeleteVcHandler; \
+ W_CO_ACTIVATE_VC_HANDLER CoActivateVcHandler; \
+ W_CO_DEACTIVATE_VC_HANDLER CoDeactivateVcHandler; \
+ W_CO_SEND_PACKETS_HANDLER CoSendPacketsHandler; \
+ W_CO_REQUEST_HANDLER CoRequestHandler;
+
+#endif /* !__cplusplus */
+
+typedef struct _NDIS50_MINIPORT_CHARACTERISTICS {
+ NDIS50_MINIPORT_CHARACTERISTICS_S
+} NDIS50_MINIPORT_CHARACTERISTICS, *PSNDIS50_MINIPORT_CHARACTERISTICS;
+
+
+/* Extensions for NDIS 5.1 miniports */
+
+typedef VOID DDKAPI
+(*W_CANCEL_SEND_PACKETS_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportAdapterContext,
+ /*IN*/ PVOID CancelId);
+
+
+#if defined(NDIS51)
+typedef struct _NDIS_MINIPORT_CHARACTERISTICS {
+ NDIS50_MINIPORT_CHARACTERISTICS_S
+} NDIS_MINIPORT_CHARACTERISTICS, *PNDIS_MINIPORT_CHARACTERISTICS;
+#elif defined(NDIS50)
+typedef struct _NDIS_MINIPORT_CHARACTERISTICS {
+ NDIS50_MINIPORT_CHARACTERISTICS_S
+} NDIS_MINIPORT_CHARACTERISTICS, *PNDIS_MINIPORT_CHARACTERISTICS;
+#elif defined(NDIS40)
+typedef struct _NDIS_MINIPORT_CHARACTERISTICS {
+ NDIS40_MINIPORT_CHARACTERISTICS_S
+} NDIS_MINIPORT_CHARACTERISTICS, *PNDIS_MINIPORT_CHARACTERISTICS;
+#elif defined(NDIS30)
+typedef struct _NDIS_MINIPORT_CHARACTERISTICS {
+ NDIS30_MINIPORT_CHARACTERISTICS_S
+} NDIS_MINIPORT_CHARACTERISTICS, *PNDIS_MINIPORT_CHARACTERISTICS;
+#endif /* NDIS30 */
+
+
+typedef NDIS_STATUS DDKAPI
+(*SEND_HANDLER)(
+ /*IN*/ NDIS_HANDLE MacBindingHandle,
+ /*IN*/ PNDIS_PACKET Packet);
+
+typedef NDIS_STATUS DDKAPI
+(*TRANSFER_DATA_HANDLER)(
+ /*IN*/ NDIS_HANDLE MacBindingHandle,
+ /*IN*/ NDIS_HANDLE MacReceiveContext,
+ /*IN*/ UINT ByteOffset,
+ /*IN*/ UINT BytesToTransfer,
+ /*OUT*/ PNDIS_PACKET Packet,
+ /*OUT*/ PUINT BytesTransferred);
+
+typedef NDIS_STATUS DDKAPI
+(*RESET_HANDLER)(
+ /*IN*/ NDIS_HANDLE MacBindingHandle);
+
+typedef NDIS_STATUS DDKAPI
+(*REQUEST_HANDLER)(
+ /*IN*/ NDIS_HANDLE MacBindingHandle,
+ /*IN*/ PNDIS_REQUEST NdisRequest);
+
+
+
+/* Structures available only to full MAC drivers */
+
+typedef BOOLEAN DDKAPI
+(*PNDIS_INTERRUPT_SERVICE)(
+ /*IN*/ PVOID InterruptContext);
+
+typedef VOID DDKAPI
+(*PNDIS_DEFERRED_PROCESSING)(
+ /*IN*/ PVOID SystemSpecific1,
+ /*IN*/ PVOID InterruptContext,
+ /*IN*/ PVOID SystemSpecific2,
+ /*IN*/ PVOID SystemSpecific3);
+
+
+
+typedef struct _NDIS_MINIPORT_BLOCK NDIS_MINIPORT_BLOCK, *PNDIS_MINIPORT_BLOCK;
+typedef struct _NDIS_PROTOCOL_BLOCK NDIS_PROTOCOL_BLOCK, *PNDIS_PROTOCOL_BLOCK;
+typedef struct _NDIS_OPEN_BLOCK NDIS_OPEN_BLOCK, *PNDIS_OPEN_BLOCK;
+typedef struct _NDIS_M_DRIVER_BLOCK NDIS_M_DRIVER_BLOCK, *PNDIS_M_DRIVER_BLOCK;
+typedef struct _NDIS_AF_LIST NDIS_AF_LIST, *PNDIS_AF_LIST;
+
+
+typedef struct _NDIS_MINIPORT_INTERRUPT {
+ PKINTERRUPT InterruptObject;
+ KSPIN_LOCK DpcCountLock;
+ PVOID MiniportIdField;
+ W_ISR_HANDLER MiniportIsr;
+ W_HANDLE_INTERRUPT_HANDLER MiniportDpc;
+ KDPC InterruptDpc;
+ PNDIS_MINIPORT_BLOCK Miniport;
+ UCHAR DpcCount;
+ BOOLEAN Filler1;
+ KEVENT DpcsCompletedEvent;
+ BOOLEAN SharedInterrupt;
+ BOOLEAN IsrRequested;
+} NDIS_MINIPORT_INTERRUPT, *PNDIS_MINIPORT_INTERRUPT;
+
+typedef struct _NDIS_MINIPORT_TIMER {
+ KTIMER Timer;
+ KDPC Dpc;
+ PNDIS_TIMER_FUNCTION MiniportTimerFunction;
+ PVOID MiniportTimerContext;
+ PNDIS_MINIPORT_BLOCK Miniport;
+ struct _NDIS_MINIPORT_TIMER *NextDeferredTimer;
+} NDIS_MINIPORT_TIMER, *PNDIS_MINIPORT_TIMER;
+
+typedef struct _NDIS_INTERRUPT {
+ PKINTERRUPT InterruptObject;
+ KSPIN_LOCK DpcCountLock;
+ PNDIS_INTERRUPT_SERVICE MacIsr;
+ PNDIS_DEFERRED_PROCESSING MacDpc;
+ KDPC InterruptDpc;
+ PVOID InterruptContext;
+ UCHAR DpcCount;
+ BOOLEAN Removing;
+ KEVENT DpcsCompletedEvent;
+} NDIS_INTERRUPT, *PNDIS_INTERRUPT;
+
+
+typedef struct _MAP_REGISTER_ENTRY {
+ PVOID MapRegister;
+ BOOLEAN WriteToDevice;
+} MAP_REGISTER_ENTRY, *PMAP_REGISTER_ENTRY;
+
+
+typedef enum _NDIS_WORK_ITEM_TYPE {
+ NdisWorkItemRequest,
+ NdisWorkItemSend,
+ NdisWorkItemReturnPackets,
+ NdisWorkItemResetRequested,
+ NdisWorkItemResetInProgress,
+ NdisWorkItemHalt,
+ NdisWorkItemSendLoopback,
+ NdisWorkItemMiniportCallback,
+ NdisMaxWorkItems
+} NDIS_WORK_ITEM_TYPE, *PNDIS_WORK_ITEM_TYPE;
+
+#define NUMBER_OF_WORK_ITEM_TYPES NdisMaxWorkItems
+#define NUMBER_OF_SINGLE_WORK_ITEMS 6
+
+typedef struct _NDIS_MINIPORT_WORK_ITEM {
+ SINGLE_LIST_ENTRY Link;
+ NDIS_WORK_ITEM_TYPE WorkItemType;
+ PVOID WorkItemContext;
+} NDIS_MINIPORT_WORK_ITEM, *PNDIS_MINIPORT_WORK_ITEM;
+
+
+typedef struct _NDIS_BIND_PATHS {
+ UINT Number;
+ NDIS_STRING Paths[1];
+} NDIS_BIND_PATHS, *PNDIS_BIND_PATHS;
+
+#define DECLARE_UNKNOWN_STRUCT(BaseName) \
+ typedef struct _##BaseName BaseName, *P##BaseName;
+
+#define DECLARE_UNKNOWN_PROTOTYPE(Name) \
+ typedef VOID (*(Name))(VOID);
+
+#define ETH_LENGTH_OF_ADDRESS 6
+
+DECLARE_UNKNOWN_STRUCT(ETH_BINDING_INFO)
+
+DECLARE_UNKNOWN_PROTOTYPE(ETH_ADDRESS_CHANGE)
+DECLARE_UNKNOWN_PROTOTYPE(ETH_FILTER_CHANGE)
+DECLARE_UNKNOWN_PROTOTYPE(ETH_DEFERRED_CLOSE)
+
+typedef struct _ETH_FILTER {
+ PNDIS_SPIN_LOCK Lock;
+ CHAR (*MCastAddressBuf)[ETH_LENGTH_OF_ADDRESS];
+ struct _NDIS_MINIPORT_BLOCK *Miniport;
+ UINT CombinedPacketFilter;
+ PETH_BINDING_INFO OpenList;
+ ETH_ADDRESS_CHANGE AddressChangeAction;
+ ETH_FILTER_CHANGE FilterChangeAction;
+ ETH_DEFERRED_CLOSE CloseAction;
+ UINT MaxMulticastAddresses;
+ UINT NumAddresses;
+ UCHAR AdapterAddress[ETH_LENGTH_OF_ADDRESS];
+ UINT OldCombinedPacketFilter;
+ CHAR (*OldMCastAddressBuf)[ETH_LENGTH_OF_ADDRESS];
+ UINT OldNumAddresses;
+ PETH_BINDING_INFO DirectedList;
+ PETH_BINDING_INFO BMList;
+ PETH_BINDING_INFO MCastSet;
+#if defined(_NDIS_)
+ UINT NumOpens;
+ PVOID BindListLock;
+#endif
+} ETH_FILTER, *PETH_FILTER;
+
+typedef VOID DDKAPI
+(*ETH_RCV_COMPLETE_HANDLER)(
+ /*IN*/ PETH_FILTER Filter);
+
+typedef VOID DDKAPI
+(*ETH_RCV_INDICATE_HANDLER)(
+ /*IN*/ PETH_FILTER Filter,
+ /*IN*/ NDIS_HANDLE MacReceiveContext,
+ /*IN*/ PCHAR Address,
+ /*IN*/ PVOID HeaderBuffer,
+ /*IN*/ UINT HeaderBufferSize,
+ /*IN*/ PVOID LookaheadBuffer,
+ /*IN*/ UINT LookaheadBufferSize,
+ /*IN*/ UINT PacketSize);
+
+typedef VOID DDKAPI
+(*FDDI_RCV_COMPLETE_HANDLER)(
+ /*IN*/ PFDDI_FILTER Filter);
+
+typedef VOID DDKAPI
+(*FDDI_RCV_INDICATE_HANDLER)(
+ /*IN*/ PFDDI_FILTER Filter,
+ /*IN*/ NDIS_HANDLE MacReceiveContext,
+ /*IN*/ PCHAR Address,
+ /*IN*/ UINT AddressLength,
+ /*IN*/ PVOID HeaderBuffer,
+ /*IN*/ UINT HeaderBufferSize,
+ /*IN*/ PVOID LookaheadBuffer,
+ /*IN*/ UINT LookaheadBufferSize,
+ /*IN*/ UINT PacketSize);
+
+typedef VOID DDKAPI
+(*FILTER_PACKET_INDICATION_HANDLER)(
+ /*IN*/ NDIS_HANDLE Miniport,
+ /*IN*/ PPNDIS_PACKET PacketArray,
+ /*IN*/ UINT NumberOfPackets);
+
+typedef VOID DDKAPI
+(*TR_RCV_COMPLETE_HANDLER)(
+ /*IN*/ PTR_FILTER Filter);
+
+typedef VOID DDKAPI
+(*TR_RCV_INDICATE_HANDLER)(
+ /*IN*/ PTR_FILTER Filter,
+ /*IN*/ NDIS_HANDLE MacReceiveContext,
+ /*IN*/ PVOID HeaderBuffer,
+ /*IN*/ UINT HeaderBufferSize,
+ /*IN*/ PVOID LookaheadBuffer,
+ /*IN*/ UINT LookaheadBufferSize,
+ /*IN*/ UINT PacketSize);
+
+typedef VOID DDKAPI
+(*WAN_RCV_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
+ /*IN*/ NDIS_HANDLE NdisLinkContext);
+
+typedef VOID DDKAPI
+(*WAN_RCV_HANDLER)(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
+ /*IN*/ NDIS_HANDLE NdisLinkContext,
+ /*IN*/ PUCHAR Packet,
+ /*IN*/ ULONG PacketSize);
+
+typedef VOID DDKFASTAPI
+(*NDIS_M_DEQUEUE_WORK_ITEM)(
+ /*IN*/ PNDIS_MINIPORT_BLOCK Miniport,
+ /*IN*/ NDIS_WORK_ITEM_TYPE WorkItemType,
+ /*OUT*/ PVOID *WorkItemContext);
+
+typedef NDIS_STATUS DDKFASTAPI
+(*NDIS_M_QUEUE_NEW_WORK_ITEM)(
+ /*IN*/ PNDIS_MINIPORT_BLOCK Miniport,
+ /*IN*/ NDIS_WORK_ITEM_TYPE WorkItemType,
+ /*IN*/ PVOID WorkItemContext);
+
+typedef NDIS_STATUS DDKFASTAPI
+(*NDIS_M_QUEUE_WORK_ITEM)(
+ /*IN*/ PNDIS_MINIPORT_BLOCK Miniport,
+ /*IN*/ NDIS_WORK_ITEM_TYPE WorkItemType,
+ /*IN*/ PVOID WorkItemContext);
+
+typedef VOID DDKAPI
+(*NDIS_M_REQ_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
+ /*IN*/ NDIS_STATUS Status);
+
+typedef VOID DDKAPI
+(*NDIS_M_RESET_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ BOOLEAN AddressingReset);
+
+typedef VOID DDKAPI
+(*NDIS_M_SEND_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
+ /*IN*/ PNDIS_PACKET Packet,
+ /*IN*/ NDIS_STATUS Status);
+
+typedef VOID DDKAPI
+(*NDIS_M_SEND_RESOURCES_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle);
+
+typedef BOOLEAN DDKFASTAPI
+(*NDIS_M_START_SENDS)(
+ /*IN*/ PNDIS_MINIPORT_BLOCK Miniport);
+
+typedef VOID DDKAPI
+(*NDIS_M_STATUS_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportHandle,
+ /*IN*/ NDIS_STATUS GeneralStatus,
+ /*IN*/ PVOID StatusBuffer,
+ /*IN*/ UINT StatusBufferSize);
+
+typedef VOID DDKAPI
+(*NDIS_M_STS_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle);
+
+typedef VOID DDKAPI
+(*NDIS_M_TD_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
+ /*IN*/ PNDIS_PACKET Packet,
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ UINT BytesTransferred);
+
+typedef VOID (DDKAPI *NDIS_WM_SEND_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
+ /*IN*/ PVOID Packet,
+ /*IN*/ NDIS_STATUS Status);
+
+
+#if ARCNET
+
+#define ARC_SEND_BUFFERS 8
+#define ARC_HEADER_SIZE 4
+
+typedef struct _NDIS_ARC_BUF {
+ NDIS_HANDLE ArcnetBufferPool;
+ PUCHAR ArcnetLookaheadBuffer;
+ UINT NumFree;
+ ARC_BUFFER_LIST ArcnetBuffers[ARC_SEND_BUFFERS];
+} NDIS_ARC_BUF, *PNDIS_ARC_BUF;
+
+#endif /* ARCNET */
+
+#define NDIS_MINIPORT_WORK_QUEUE_SIZE 10
+
+typedef struct _NDIS_LOG {
+ PNDIS_MINIPORT_BLOCK Miniport;
+ KSPIN_LOCK LogLock;
+ PIRP Irp;
+ UINT TotalSize;
+ UINT CurrentSize;
+ UINT InPtr;
+ UINT OutPtr;
+ UCHAR LogBuf[1];
+} NDIS_LOG, *PNDIS_LOG;
+
+typedef struct _FILTERDBS {
+ _ANONYMOUS_UNION union {
+ PETH_FILTER EthDB;
+ PNULL_FILTER NullDB;
+ } DUMMYUNIONNAME;
+ PTR_FILTER TrDB;
+ PFDDI_FILTER FddiDB;
+#if ARCNET
+ PARC_FILTER ArcDB;
+#else /* !ARCNET */
+ PVOID XXXDB;
+#endif /* !ARCNET */
+} FILTERDBS, *PFILTERDBS;
+
+
+struct _NDIS_MINIPORT_BLOCK {
+ PVOID Signature;
+ PNDIS_MINIPORT_BLOCK NextMiniport;
+ PNDIS_M_DRIVER_BLOCK DriverHandle;
+ NDIS_HANDLE MiniportAdapterContext;
+ UNICODE_STRING MiniportName;
+ PNDIS_BIND_PATHS BindPaths;
+ NDIS_HANDLE OpenQueue;
+ REFERENCE Ref;
+ NDIS_HANDLE DeviceContext;
+ UCHAR Padding1;
+ UCHAR LockAcquired;
+ UCHAR PmodeOpens;
+ UCHAR AssignedProcessor;
+ KSPIN_LOCK Lock;
+ PNDIS_REQUEST MediaRequest;
+ PNDIS_MINIPORT_INTERRUPT Interrupt;
+ ULONG Flags;
+ ULONG PnPFlags;
+ LIST_ENTRY PacketList;
+ PNDIS_PACKET FirstPendingPacket;
+ PNDIS_PACKET ReturnPacketsQueue;
+ ULONG RequestBuffer;
+ PVOID SetMCastBuffer;
+ PNDIS_MINIPORT_BLOCK PrimaryMiniport;
+ PVOID WrapperContext;
+ PVOID BusDataContext;
+ ULONG PnPCapabilities;
+ PCM_RESOURCE_LIST Resources;
+ NDIS_TIMER WakeUpDpcTimer;
+ UNICODE_STRING BaseName;
+ UNICODE_STRING SymbolicLinkName;
+ ULONG CheckForHangSeconds;
+ USHORT CFHangTicks;
+ USHORT CFHangCurrentTick;
+ NDIS_STATUS ResetStatus;
+ NDIS_HANDLE ResetOpen;
+ FILTERDBS FilterDbs;
+ FILTER_PACKET_INDICATION_HANDLER PacketIndicateHandler;
+ NDIS_M_SEND_COMPLETE_HANDLER SendCompleteHandler;
+ NDIS_M_SEND_RESOURCES_HANDLER SendResourcesHandler;
+ NDIS_M_RESET_COMPLETE_HANDLER ResetCompleteHandler;
+ NDIS_MEDIUM MediaType;
+ ULONG BusNumber;
+ NDIS_INTERFACE_TYPE BusType;
+ NDIS_INTERFACE_TYPE AdapterType;
+ PDEVICE_OBJECT DeviceObject;
+ PDEVICE_OBJECT PhysicalDeviceObject;
+ PDEVICE_OBJECT NextDeviceObject;
+ PMAP_REGISTER_ENTRY MapRegisters;
+ PNDIS_AF_LIST CallMgrAfList;
+ PVOID MiniportThread;
+ PVOID SetInfoBuf;
+ USHORT SetInfoBufLen;
+ USHORT MaxSendPackets;
+ NDIS_STATUS FakeStatus;
+ PVOID LockHandler;
+ PUNICODE_STRING pAdapterInstanceName;
+ PNDIS_MINIPORT_TIMER TimerQueue;
+ UINT MacOptions;
+ PNDIS_REQUEST PendingRequest;
+ UINT MaximumLongAddresses;
+ UINT MaximumShortAddresses;
+ UINT CurrentLookahead;
+ UINT MaximumLookahead;
+ W_HANDLE_INTERRUPT_HANDLER HandleInterruptHandler;
+ W_DISABLE_INTERRUPT_HANDLER DisableInterruptHandler;
+ W_ENABLE_INTERRUPT_HANDLER EnableInterruptHandler;
+ W_SEND_PACKETS_HANDLER SendPacketsHandler;
+ NDIS_M_START_SENDS DeferredSendHandler;
+ ETH_RCV_INDICATE_HANDLER EthRxIndicateHandler;
+ TR_RCV_INDICATE_HANDLER TrRxIndicateHandler;
+ FDDI_RCV_INDICATE_HANDLER FddiRxIndicateHandler;
+ ETH_RCV_COMPLETE_HANDLER EthRxCompleteHandler;
+ TR_RCV_COMPLETE_HANDLER TrRxCompleteHandler;
+ FDDI_RCV_COMPLETE_HANDLER FddiRxCompleteHandler;
+ NDIS_M_STATUS_HANDLER StatusHandler;
+ NDIS_M_STS_COMPLETE_HANDLER StatusCompleteHandler;
+ NDIS_M_TD_COMPLETE_HANDLER TDCompleteHandler;
+ NDIS_M_REQ_COMPLETE_HANDLER QueryCompleteHandler;
+ NDIS_M_REQ_COMPLETE_HANDLER SetCompleteHandler;
+ NDIS_WM_SEND_COMPLETE_HANDLER WanSendCompleteHandler;
+ WAN_RCV_HANDLER WanRcvHandler;
+ WAN_RCV_COMPLETE_HANDLER WanRcvCompleteHandler;
+#if defined(_NDIS_)
+ PNDIS_MINIPORT_BLOCK NextGlobalMiniport;
+ SINGLE_LIST_ENTRY WorkQueue[NUMBER_OF_WORK_ITEM_TYPES];
+ SINGLE_LIST_ENTRY SingleWorkItems[NUMBER_OF_SINGLE_WORK_ITEMS];
+ UCHAR SendFlags;
+ UCHAR TrResetRing;
+ UCHAR ArcnetAddress;
+ UCHAR XState;
+ _ANONYMOUS_UNION union {
+#if ARCNET
+ PNDIS_ARC_BUF ArcBuf;
+#endif
+ PVOID BusInterface;
+ } DUMMYUNIONNAME;
+ PNDIS_LOG Log;
+ ULONG SlotNumber;
+ PCM_RESOURCE_LIST AllocatedResources;
+ PCM_RESOURCE_LIST AllocatedResourcesTranslated;
+ SINGLE_LIST_ENTRY PatternList;
+ NDIS_PNP_CAPABILITIES PMCapabilities;
+ DEVICE_CAPABILITIES DeviceCaps;
+ ULONG WakeUpEnable;
+ DEVICE_POWER_STATE CurrentDevicePowerState;
+ PIRP pIrpWaitWake;
+ SYSTEM_POWER_STATE WaitWakeSystemState;
+ LARGE_INTEGER VcIndex;
+ KSPIN_LOCK VcCountLock;
+ LIST_ENTRY WmiEnabledVcs;
+ PNDIS_GUID pNdisGuidMap;
+ PNDIS_GUID pCustomGuidMap;
+ USHORT VcCount;
+ USHORT cNdisGuidMap;
+ USHORT cCustomGuidMap;
+ USHORT CurrentMapRegister;
+ PKEVENT AllocationEvent;
+ USHORT BaseMapRegistersNeeded;
+ USHORT SGMapRegistersNeeded;
+ ULONG MaximumPhysicalMapping;
+ NDIS_TIMER MediaDisconnectTimer;
+ USHORT MediaDisconnectTimeOut;
+ USHORT InstanceNumber;
+ NDIS_EVENT OpenReadyEvent;
+ NDIS_PNP_DEVICE_STATE PnPDeviceState;
+ NDIS_PNP_DEVICE_STATE OldPnPDeviceState;
+ PGET_SET_DEVICE_DATA SetBusData;
+ PGET_SET_DEVICE_DATA GetBusData;
+ KDPC DeferredDpc;
+#if 0
+ /* FIXME: */
+ NDIS_STATS NdisStats;
+#else
+ ULONG NdisStats;
+#endif
+ PNDIS_PACKET IndicatedPacket[MAXIMUM_PROCESSORS];
+ PKEVENT RemoveReadyEvent;
+ PKEVENT AllOpensClosedEvent;
+ PKEVENT AllRequestsCompletedEvent;
+ ULONG InitTimeMs;
+ NDIS_MINIPORT_WORK_ITEM WorkItemBuffer[NUMBER_OF_SINGLE_WORK_ITEMS];
+ PDMA_ADAPTER SystemAdapterObject;
+ ULONG DriverVerifyFlags;
+ POID_LIST OidList;
+ USHORT InternalResetCount;
+ USHORT MiniportResetCount;
+ USHORT MediaSenseConnectCount;
+ USHORT MediaSenseDisconnectCount;
+ PNDIS_PACKET *xPackets;
+ ULONG UserModeOpenReferences;
+ _ANONYMOUS_UNION union {
+ PVOID SavedSendHandler;
+ PVOID SavedWanSendHandler;
+ } DUMMYUNIONNAME2;
+ PVOID SavedSendPacketsHandler;
+ PVOID SavedCancelSendPacketsHandler;
+ W_SEND_PACKETS_HANDLER WSendPacketsHandler;
+ ULONG MiniportAttributes;
+ PDMA_ADAPTER SavedSystemAdapterObject;
+ USHORT NumOpens;
+ USHORT CFHangXTicks;
+ ULONG RequestCount;
+ ULONG IndicatedPacketsCount;
+ ULONG PhysicalMediumType;
+ PNDIS_REQUEST LastRequest;
+ LONG DmaAdapterRefCount;
+ PVOID FakeMac;
+ ULONG LockDbg;
+ ULONG LockDbgX;
+ PVOID LockThread;
+ ULONG InfoFlags;
+ KSPIN_LOCK TimerQueueLock;
+ PKEVENT ResetCompletedEvent;
+ PKEVENT QueuedBindingCompletedEvent;
+ PKEVENT DmaResourcesReleasedEvent;
+ FILTER_PACKET_INDICATION_HANDLER SavedPacketIndicateHandler;
+ ULONG RegisteredInterrupts;
+ PNPAGED_LOOKASIDE_LIST SGListLookasideList;
+ ULONG ScatterGatherListSize;
+#endif /* _NDIS_ */
+};
+
+
+/* Handler prototypes for NDIS_OPEN_BLOCK */
+
+typedef NDIS_STATUS (DDKAPI *WAN_SEND_HANDLER)(
+ /*IN*/ NDIS_HANDLE MacBindingHandle,
+ /*IN*/ NDIS_HANDLE LinkHandle,
+ /*IN*/ PVOID Packet);
+
+/* NDIS 4.0 extension */
+
+typedef VOID (DDKAPI *SEND_PACKETS_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportAdapterContext,
+ /*IN*/ PPNDIS_PACKET PacketArray,
+ /*IN*/ UINT NumberOfPackets);
+
+
+typedef struct _NDIS_COMMON_OPEN_BLOCK {
+ PVOID MacHandle;
+ NDIS_HANDLE BindingHandle;
+ PNDIS_MINIPORT_BLOCK MiniportHandle;
+ PNDIS_PROTOCOL_BLOCK ProtocolHandle;
+ NDIS_HANDLE ProtocolBindingContext;
+ PNDIS_OPEN_BLOCK MiniportNextOpen;
+ PNDIS_OPEN_BLOCK ProtocolNextOpen;
+ NDIS_HANDLE MiniportAdapterContext;
+ BOOLEAN Reserved1;
+ BOOLEAN Reserved2;
+ BOOLEAN Reserved3;
+ BOOLEAN Reserved4;
+ PNDIS_STRING BindDeviceName;
+ KSPIN_LOCK Reserved5;
+ PNDIS_STRING RootDeviceName;
+ _ANONYMOUS_UNION union {
+ SEND_HANDLER SendHandler;
+ WAN_SEND_HANDLER WanSendHandler;
+ } DUMMYUNIONNAME;
+ TRANSFER_DATA_HANDLER TransferDataHandler;
+ SEND_COMPLETE_HANDLER SendCompleteHandler;
+ TRANSFER_DATA_COMPLETE_HANDLER TransferDataCompleteHandler;
+ RECEIVE_HANDLER ReceiveHandler;
+ RECEIVE_COMPLETE_HANDLER ReceiveCompleteHandler;
+ WAN_RECEIVE_HANDLER WanReceiveHandler;
+ REQUEST_COMPLETE_HANDLER RequestCompleteHandler;
+ RECEIVE_PACKET_HANDLER ReceivePacketHandler;
+ SEND_PACKETS_HANDLER SendPacketsHandler;
+ RESET_HANDLER ResetHandler;
+ REQUEST_HANDLER RequestHandler;
+ RESET_COMPLETE_HANDLER ResetCompleteHandler;
+ STATUS_HANDLER StatusHandler;
+ STATUS_COMPLETE_HANDLER StatusCompleteHandler;
+#if defined(_NDIS_)
+ ULONG Flags;
+ ULONG References;
+ KSPIN_LOCK SpinLock;
+ NDIS_HANDLE FilterHandle;
+ ULONG ProtocolOptions;
+ USHORT CurrentLookahead;
+ USHORT ConnectDampTicks;
+ USHORT DisconnectDampTicks;
+ W_SEND_HANDLER WSendHandler;
+ W_TRANSFER_DATA_HANDLER WTransferDataHandler;
+ W_SEND_PACKETS_HANDLER WSendPacketsHandler;
+ W_CANCEL_SEND_PACKETS_HANDLER CancelSendPacketsHandler;
+ ULONG WakeUpEnable;
+ PKEVENT CloseCompleteEvent;
+ QUEUED_CLOSE QC;
+ ULONG AfReferences;
+ PNDIS_OPEN_BLOCK NextGlobalOpen;
+#endif /* _NDIS_ */
+} NDIS_COMMON_OPEN_BLOCK;
+
+struct _NDIS_OPEN_BLOCK
+{
+ NDIS_COMMON_OPEN_BLOCK NdisCommonOpenBlock;
+#if defined(_NDIS_)
+ struct _NDIS_OPEN_CO
+ {
+ struct _NDIS_CO_AF_BLOCK * NextAf;
+ W_CO_CREATE_VC_HANDLER MiniportCoCreateVcHandler;
+ W_CO_REQUEST_HANDLER MiniportCoRequestHandler;
+ CO_CREATE_VC_HANDLER CoCreateVcHandler;
+ CO_DELETE_VC_HANDLER CoDeleteVcHandler;
+ PVOID CmActivateVcCompleteHandler;
+ PVOID CmDeactivateVcCompleteHandler;
+ PVOID CoRequestCompleteHandler;
+ LIST_ENTRY ActiveVcHead;
+ LIST_ENTRY InactiveVcHead;
+ LONG PendingAfNotifications;
+ PKEVENT AfNotifyCompleteEvent;
+ };
+#endif /* _NDIS_ */
+};
+
+
+
+/* Routines for NDIS miniport drivers */
+
+NTOSAPI
+VOID
+DDKAPI
+NdisMInitializeTimer(
+ /*IN*/ /*OUT*/ PNDIS_MINIPORT_TIMER Timer,
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
+ /*IN*/ PNDIS_TIMER_FUNCTION TimerFunction,
+ /*IN*/ PVOID FunctionContext);
+
+NTOSAPI
+VOID
+DDKAPI
+NdisMSetPeriodicTimer(
+ /*IN*/ PNDIS_MINIPORT_TIMER Timer,
+ /*IN*/ UINT MillisecondsPeriod);
+
+NTOSAPI
+VOID
+DDKAPI
+NdisMCancelTimer(
+ /*IN*/ PNDIS_MINIPORT_TIMER Timer,
+ /*OUT*/ PBOOLEAN TimerCancelled);
+
+NDISAPI
+VOID
+DDKAPI
+NdisInitializeWrapper(
+ /*OUT*/ PNDIS_HANDLE NdisWrapperHandle,
+ /*IN*/ PVOID SystemSpecific1,
+ /*IN*/ PVOID SystemSpecific2,
+ /*IN*/ PVOID SystemSpecific3);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisMAllocateMapRegisters(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
+ /*IN*/ UINT DmaChannel,
+ /*IN*/ BOOLEAN Dma32BitAddresses,
+ /*IN*/ ULONG PhysicalMapRegistersNeeded,
+ /*IN*/ ULONG MaximumPhysicalMapping);
+
+/*
+ * VOID
+ * NdisMArcIndicateReceive(
+ * IN NDIS_HANDLE MiniportAdapterHandle,
+ * IN PUCHAR HeaderBuffer,
+ * IN PUCHAR DataBuffer,
+ * IN UINT Length);
+ */
+#define NdisMArcIndicateReceive(MiniportAdapterHandle, \
+ HeaderBuffer, \
+ DataBuffer, \
+ Length) \
+{ \
+ ArcFilterDprIndicateReceive( \
+ (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FilterDbs.ArcDB), \
+ (HeaderBuffer), \
+ (DataBuffer), \
+ (Length)); \
+}
+
+/*
+ * VOID
+ * NdisMArcIndicateReceiveComplete(
+ * IN NDIS_HANDLE MiniportAdapterHandle);
+ */
+#define NdisMArcIndicateReceiveComplete(MiniportAdapterHandle) \
+{ \
+ if (((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->EthDB) \
+ { \
+ NdisMEthIndicateReceiveComplete(_H); \
+ } \
+ \
+ ArcFilterDprIndicateReceiveComplete( \
+ ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->ArcDB); \
+}
+
+NDISAPI
+VOID
+DDKAPI
+NdisMCloseLog(
+ /*IN*/ NDIS_HANDLE LogHandle);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisMCreateLog(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
+ /*IN*/ UINT Size,
+ /*OUT*/ PNDIS_HANDLE LogHandle);
+
+NDISAPI
+VOID
+DDKAPI
+NdisMDeregisterAdapterShutdownHandler(
+ /*IN*/ NDIS_HANDLE MiniportHandle);
+
+NDISAPI
+VOID
+DDKAPI
+NdisMDeregisterInterrupt(
+ /*IN*/ PNDIS_MINIPORT_INTERRUPT Interrupt);
+
+NDISAPI
+VOID
+DDKAPI
+NdisMDeregisterIoPortRange(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
+ /*IN*/ UINT InitialPort,
+ /*IN*/ UINT NumberOfPorts,
+ /*IN*/ PVOID PortOffset);
+
+/*
+ * VOID
+ * NdisMEthIndicateReceive(
+ * IN NDIS_HANDLE MiniportAdapterHandle,
+ * IN NDIS_HANDLE MiniportReceiveContext,
+ * IN PVOID HeaderBuffer,
+ * IN UINT HeaderBufferSize,
+ * IN PVOID LookaheadBuffer,
+ * IN UINT LookaheadBufferSize,
+ * IN UINT PacketSize);
+ */
+#define NdisMEthIndicateReceive(MiniportAdapterHandle, \
+ MiniportReceiveContext, \
+ HeaderBuffer, \
+ HeaderBufferSize, \
+ LookaheadBuffer, \
+ LookaheadBufferSize, \
+ PacketSize) \
+{ \
+ (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->EthRxIndicateHandler)( \
+ (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FilterDbs.EthDB), \
+ (MiniportReceiveContext), \
+ (HeaderBuffer), \
+ (HeaderBuffer), \
+ (HeaderBufferSize), \
+ (LookaheadBuffer), \
+ (LookaheadBufferSize), \
+ (PacketSize)); \
+}
+
+/*
+ * VOID
+ * NdisMEthIndicateReceiveComplete(
+ * IN NDIS_HANDLE MiniportAdapterHandle);
+ */
+#define NdisMEthIndicateReceiveComplete(MiniportAdapterHandle) \
+{ \
+ (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->EthRxCompleteHandler)( \
+ ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->FilterDbs.EthDB); \
+}
+
+/*
+ * VOID
+ * NdisMFddiIndicateReceive(
+ * IN NDIS_HANDLE MiniportAdapterHandle,
+ * IN NDIS_HANDLE MiniportReceiveContext,
+ * IN PVOID HeaderBuffer,
+ * IN UINT HeaderBufferSize,
+ * IN PVOID LookaheadBuffer,
+ * IN UINT LookaheadBufferSize,
+ * IN UINT PacketSize);
+ */
+#define NdisMFddiIndicateReceive(MiniportAdapterHandle, \
+ MiniportReceiveContext, \
+ HeaderBuffer, \
+ HeaderBufferSize, \
+ LookaheadBuffer, \
+ LookaheadBufferSize, \
+ PacketSize) \
+{ \
+ (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FddiRxIndicateHandler)( \
+ (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FilterDbs.FddiDB), \
+ (MiniportReceiveContext), \
+ (PUCHAR)(HeaderBuffer) + 1, \
+ (((*(PUCHAR*)(HeaderBuffer)) & 0x40) ? \
+ FDDI_LENGTH_OF_LONG_ADDRESS : \
+ FDDI_LENGTH_OF_SHORT_ADDRESS), \
+ (HeaderBuffer), \
+ (HeaderBufferSize), \
+ (LookaheadBuffer), \
+ (LookaheadBufferSize), \
+ (PacketSize)); \
+}
+
+
+
+/*
+ * VOID
+ * NdisMFddiIndicateReceiveComplete(
+ * IN NDIS_HANDLE MiniportAdapterHandle);
+ */
+#define NdisMFddiIndicateReceiveComplete(MiniportAdapterHandle) \
+{ \
+ (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FddiRxCompleteHandler)( \
+ ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->FilterDbs.FddiDB); \
+}
+
+NDISAPI
+VOID
+DDKAPI
+NdisMFlushLog(
+ /*IN*/ NDIS_HANDLE LogHandle);
+
+NDISAPI
+VOID
+DDKAPI
+NdisMFreeMapRegisters(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle);
+
+/*
+ * VOID
+ * NdisMIndicateStatus(
+ * IN NDIS_HANDLE MiniportAdapterHandle,
+ * IN NDIS_STATUS GeneralStatus,
+ * IN PVOID StatusBuffer,
+ * IN UINT StatusBufferSize);
+ */
+
+#define NdisMIndicateStatus(MiniportAdapterHandle, \
+ GeneralStatus, StatusBuffer, StatusBufferSize) \
+ (*((PNDIS_MINIPORT_BLOCK)(_M))->StatusHandler)( \
+ MiniportAdapterHandle, GeneralStatus, StatusBuffer, StatusBufferSize)
+
+/*
+ * VOID
+ * NdisMIndicateStatusComplete(
+ * IN NDIS_HANDLE MiniportAdapterHandle);
+ */
+#define NdisMIndicateStatusComplete(MiniportAdapterHandle) \
+ (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->StatusCompleteHandler)( \
+ MiniportAdapterHandle)
+
+/*
+ * VOID
+ * NdisMInitializeWrapper(
+ * OUT PNDIS_HANDLE NdisWrapperHandle,
+ * IN PVOID SystemSpecific1,
+ * IN PVOID SystemSpecific2,
+ * IN PVOID SystemSpecific3);
+ */
+#define NdisMInitializeWrapper(NdisWrapperHandle, \
+ SystemSpecific1, \
+ SystemSpecific2, \
+ SystemSpecific3) \
+ NdisInitializeWrapper((NdisWrapperHandle), \
+ (SystemSpecific1), \
+ (SystemSpecific2), \
+ (SystemSpecific3))
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisMMapIoSpace(
+ /*OUT*/ PVOID *VirtualAddress,
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
+ /*IN*/ NDIS_PHYSICAL_ADDRESS PhysicalAddress,
+ /*IN*/ UINT Length);
+
+/*
+ * VOID
+ * NdisMQueryInformationComplete(
+ * IN NDIS_HANDLE MiniportAdapterHandle,
+ * IN NDIS_STATUS Status);
+ */
+#define NdisMQueryInformationComplete(MiniportAdapterHandle, Status) \
+ (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->QueryCompleteHandler)(MiniportAdapterHandle, Status)
+
+NDISAPI
+VOID
+DDKAPI
+NdisMRegisterAdapterShutdownHandler(
+ /*IN*/ NDIS_HANDLE MiniportHandle,
+ /*IN*/ PVOID ShutdownContext,
+ /*IN*/ ADAPTER_SHUTDOWN_HANDLER ShutdownHandler);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisMRegisterInterrupt(
+ /*OUT*/ PNDIS_MINIPORT_INTERRUPT Interrupt,
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
+ /*IN*/ UINT InterruptVector,
+ /*IN*/ UINT InterruptLevel,
+ /*IN*/ BOOLEAN RequestIsr,
+ /*IN*/ BOOLEAN SharedInterrupt,
+ /*IN*/ NDIS_INTERRUPT_MODE InterruptMode);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisMRegisterIoPortRange(
+ /*OUT*/ PVOID *PortOffset,
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
+ /*IN*/ UINT InitialPort,
+ /*IN*/ UINT NumberOfPorts);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisMRegisterMiniport(
+ /*IN*/ NDIS_HANDLE NdisWrapperHandle,
+ /*IN*/ PNDIS_MINIPORT_CHARACTERISTICS MiniportCharacteristics,
+ /*IN*/ UINT CharacteristicsLength);
+
+
+#if !defined(_NDIS_)
+
+/*
+ * VOID
+ * NdisMResetComplete(
+ * IN NDIS_HANDLE MiniportAdapterHandle,
+ * IN NDIS_STATUS Status,
+ * IN BOOLEAN AddressingReset);
+ */
+#define NdisMResetComplete(MiniportAdapterHandle, \
+ Status, \
+ AddressingReset) \
+{ \
+ (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->ResetCompleteHandler)( \
+ MiniportAdapterHandle, Status, AddressingReset); \
+}
+
+/*
+ * VOID
+ * NdisMSendComplete(
+ * IN NDIS_HANDLE MiniportAdapterHandle,
+ * IN PNDIS_PACKET Packet,
+ * IN NDIS_STATUS Status);
+ */
+#define NdisMSendComplete(MiniportAdapterHandle, \
+ Packet, \
+ Status) \
+{ \
+ (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->SendCompleteHandler)( \
+ MiniportAdapterHandle, Packet, Status); \
+}
+
+/*
+ * VOID
+ * NdisMSendResourcesAvailable(
+ * IN NDIS_HANDLE MiniportAdapterHandle);
+ */
+#define NdisMSendResourcesAvailable(MiniportAdapterHandle) \
+{ \
+ (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->SendResourcesHandler)( \
+ MiniportAdapterHandle); \
+}
+
+/*
+ * VOID
+ * NdisMTransferDataComplete(
+ * IN NDIS_HANDLE MiniportAdapterHandle,
+ * IN PNDIS_PACKET Packet,
+ * IN NDIS_STATUS Status,
+ * IN UINT BytesTransferred);
+ */
+#define NdisMTransferDataComplete(MiniportAdapterHandle, \
+ Packet, \
+ Status, \
+ BytesTransferred) \
+{ \
+ (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TDCompleteHandler)( \
+ MiniportAdapterHandle, Packet, Status, BytesTransferred) \
+}
+
+#endif /* !_NDIS_ */
+
+
+/*
+ * VOID
+ * NdisMSetAttributes(
+ * IN NDIS_HANDLE MiniportAdapterHandle,
+ * IN NDIS_HANDLE MiniportAdapterContext,
+ * IN BOOLEAN BusMaster,
+ * IN NDIS_INTERFACE_TYPE AdapterType);
+ */
+#define NdisMSetAttributes(MiniportAdapterHandle, \
+ MiniportAdapterContext, \
+ BusMaster, \
+ AdapterType) \
+ NdisMSetAttributesEx(MiniportAdapterHandle, \
+ MiniportAdapterContext, \
+ 0, \
+ (BusMaster) ? NDIS_ATTRIBUTE_BUS_MASTER : 0, \
+ AdapterType)
+
+NDISAPI
+VOID
+DDKAPI
+NdisMSetAttributesEx(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
+ /*IN*/ NDIS_HANDLE MiniportAdapterContext,
+ /*IN*/ UINT CheckForHangTimeInSeconds /*OPTIONAL*/,
+ /*IN*/ ULONG AttributeFlags,
+ /*IN*/ NDIS_INTERFACE_TYPE AdapterType);
+
+/*
+ * VOID
+ * NdisMSetInformationComplete(
+ * IN NDIS_HANDLE MiniportAdapterHandle,
+ * IN NDIS_STATUS Status);
+ */
+#define NdisMSetInformationComplete(MiniportAdapterHandle, \
+ Status) \
+ (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->SetCompleteHandler)( \
+ MiniportAdapterHandle, Status)
+
+NDISAPI
+VOID
+DDKAPI
+NdisMSleep(
+ /*IN*/ ULONG MicrosecondsToSleep);
+
+NDISAPI
+BOOLEAN
+DDKAPI
+NdisMSynchronizeWithInterrupt(
+ /*IN*/ PNDIS_MINIPORT_INTERRUPT Interrupt,
+ /*IN*/ PVOID SynchronizeFunction,
+ /*IN*/ PVOID SynchronizeContext);
+
+/*
+ * VOID
+ * NdisMTrIndicateReceive(
+ * IN NDIS_HANDLE MiniportAdapterHandle,
+ * IN NDIS_HANDLE MiniportReceiveContext,
+ * IN PVOID HeaderBuffer,
+ * IN UINT HeaderBufferSize,
+ * IN PVOID LookaheadBuffer,
+ * IN UINT LookaheadBufferSize,
+ * IN UINT PacketSize);
+ */
+#define NdisMTrIndicateReceive(MiniportAdapterHandle, \
+ MiniportReceiveContext, \
+ HeaderBuffer, \
+ HeaderBufferSize, \
+ LookaheadBuffer, \
+ LookaheadBufferSize, \
+ PacketSize) \
+{ \
+ (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TrRxIndicateHandler)( \
+ (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FilterDbs.TrDB), \
+ (MiniportReceiveContext), \
+ (HeaderBuffer), \
+ (HeaderBuffer), \
+ (HeaderBufferSize), \
+ (LookaheadBuffer), \
+ (LookaheadBufferSize), \
+ (PacketSize)); \
+}
+
+/*
+ * VOID
+ * NdisMTrIndicateReceiveComplete(
+ * IN NDIS_HANDLE MiniportAdapterHandle);
+ */
+#define NdisMTrIndicateReceiveComplete(MiniportAdapterHandle) \
+{ \
+ (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TrRxCompleteHandler)( \
+ ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->FilterDbs.TrDB); \
+}
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisMWriteLogData(
+ /*IN*/ NDIS_HANDLE LogHandle,
+ /*IN*/ PVOID LogBuffer,
+ /*IN*/ UINT LogBufferSize);
+
+NDISAPI
+VOID
+DDKAPI
+NdisMQueryAdapterResources(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE WrapperConfigurationContext,
+ /*OUT*/ PNDIS_RESOURCE_LIST ResourceList,
+ /*IN OUT*/ PUINT BufferSize);
+
+NDISAPI
+VOID
+DDKAPI
+NdisTerminateWrapper(
+ /*IN*/ NDIS_HANDLE NdisWrapperHandle,
+ /*IN*/ PVOID SystemSpecific);
+
+NDISAPI
+VOID
+DDKAPI
+NdisMUnmapIoSpace(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
+ /*IN*/ PVOID VirtualAddress,
+ /*IN*/ UINT Length);
+
+
+
+/* NDIS intermediate miniport structures */
+
+typedef VOID (DDKAPI *W_MINIPORT_CALLBACK)(
+ /*IN*/ NDIS_HANDLE MiniportAdapterContext,
+ /*IN*/ PVOID CallbackContext);
+
+
+
+/* Routines for intermediate miniport drivers */
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisIMDeInitializeDeviceInstance(
+ /*IN*/ NDIS_HANDLE NdisMiniportHandle);
+
+/*
+ * NDIS_STATUS
+ * NdisIMInitializeDeviceInstance(
+ * IN NDIS_HANDLE DriverHandle,
+ * IN PNDIS_STRING DeviceInstance);
+ */
+#define NdisIMInitializeDeviceInstance(DriverHandle, DeviceInstance) \
+ NdisIMInitializeDeviceInstanceEx(DriverHandle, DeviceInstance, NULL)
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisIMRegisterLayeredMiniport(
+ /*IN*/ NDIS_HANDLE NdisWrapperHandle,
+ /*IN*/ PNDIS_MINIPORT_CHARACTERISTICS MiniportCharacteristics,
+ /*IN*/ UINT CharacteristicsLength,
+ /*OUT*/ PNDIS_HANDLE DriverHandle);
+
+
+/* Functions obsoleted by NDIS 5.0 */
+
+NDISAPI
+VOID
+DDKAPI
+NdisFreeDmaChannel(
+ /*IN*/ PNDIS_HANDLE NdisDmaHandle);
+
+NDISAPI
+VOID
+DDKAPI
+NdisSetupDmaTransfer(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*IN*/ PNDIS_HANDLE NdisDmaHandle,
+ /*IN*/ PNDIS_BUFFER Buffer,
+ /*IN*/ ULONG Offset,
+ /*IN*/ ULONG Length,
+ /*IN*/ BOOLEAN WriteToDevice);
+
+NDISAPI
+NTSTATUS
+DDKAPI
+NdisUpcaseUnicodeString(
+ /*OUT*/ PUNICODE_STRING DestinationString,
+ /*IN*/ PUNICODE_STRING SourceString);
+
+
+/* Routines for NDIS protocol drivers */
+
+NDISAPI
+VOID
+DDKAPI
+NdisRequest(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE NdisBindingHandle,
+ /*IN*/ PNDIS_REQUEST NdisRequest);
+
+NDISAPI
+VOID
+DDKAPI
+NdisReset(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE NdisBindingHandle);
+
+NDISAPI
+VOID
+DDKAPI
+NdisSend(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE NdisBindingHandle,
+ /*IN*/ PNDIS_PACKET Packet);
+
+NDISAPI
+VOID
+DDKAPI
+NdisSendPackets(
+ /*IN*/ NDIS_HANDLE NdisBindingHandle,
+ /*IN*/ PPNDIS_PACKET PacketArray,
+ /*IN*/ UINT NumberOfPackets);
+
+NDISAPI
+VOID
+DDKAPI
+NdisTransferData(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE NdisBindingHandle,
+ /*IN*/ NDIS_HANDLE MacReceiveContext,
+ /*IN*/ UINT ByteOffset,
+ /*IN*/ UINT BytesToTransfer,
+ /*IN OUT*/ PNDIS_PACKET Packet,
+ /*OUT*/ PUINT BytesTransferred);
+
+NDISAPI
+VOID
+DDKAPI
+NdisCloseAdapter(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE NdisBindingHandle);
+
+NDISAPI
+VOID
+DDKAPI
+NdisCompleteBindAdapter(
+ /*IN*/ NDIS_HANDLE BindAdapterContext,
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_STATUS OpenStatus);
+
+NDISAPI
+VOID
+DDKAPI
+NdisCompleteUnbindAdapter(
+ /*IN*/ NDIS_HANDLE UnbindAdapterContext,
+ /*IN*/ NDIS_STATUS Status);
+
+NDISAPI
+VOID
+DDKAPI
+NdisDeregisterProtocol(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE NdisProtocolHandle);
+
+NDISAPI
+VOID
+DDKAPI
+NdisOpenAdapter(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*OUT*/ PNDIS_STATUS OpenErrorStatus,
+ /*OUT*/ PNDIS_HANDLE NdisBindingHandle,
+ /*OUT*/ PUINT SelectedMediumIndex,
+ /*IN*/ PNDIS_MEDIUM MediumArray,
+ /*IN*/ UINT MediumArraySize,
+ /*IN*/ NDIS_HANDLE NdisProtocolHandle,
+ /*IN*/ NDIS_HANDLE ProtocolBindingContext,
+ /*IN*/ PNDIS_STRING AdapterName,
+ /*IN*/ UINT OpenOptions,
+ /*IN*/ PSTRING AddressingInformation);
+
+NDISAPI
+VOID
+DDKAPI
+NdisOpenProtocolConfiguration(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*OUT*/ PNDIS_HANDLE ConfigurationHandle,
+ /*IN*/ PNDIS_STRING ProtocolSection);
+
+NDISAPI
+VOID
+DDKAPI
+NdisRegisterProtocol(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*OUT*/ PNDIS_HANDLE NdisProtocolHandle,
+ /*IN*/ PNDIS_PROTOCOL_CHARACTERISTICS ProtocolCharacteristics,
+ /*IN*/ UINT CharacteristicsLength);
+
+/* Obsoleted in Windows XP */
+
+/* Prototypes for NDIS_MAC_CHARACTERISTICS */
+
+typedef NDIS_STATUS (*OPEN_ADAPTER_HANDLER)(
+ /*OUT*/ PNDIS_STATUS OpenErrorStatus,
+ /*OUT*/ NDIS_HANDLE *MacBindingHandle,
+ /*OUT*/ PUINT SelectedMediumIndex,
+ /*IN*/ PNDIS_MEDIUM MediumArray,
+ /*IN*/ UINT MediumArraySize,
+ /*IN*/ NDIS_HANDLE NdisBindingContext,
+ /*IN*/ NDIS_HANDLE MacAdapterContext,
+ /*IN*/ UINT OpenOptions,
+ /*IN*/ PSTRING AddressingInformation /*OPTIONAL*/);
+
+typedef NDIS_STATUS (DDKAPI *CLOSE_ADAPTER_HANDLER)(
+ /*IN*/ NDIS_HANDLE MacBindingHandle);
+
+typedef NDIS_STATUS (DDKAPI *WAN_TRANSFER_DATA_HANDLER)(
+ VOID);
+
+typedef NDIS_STATUS (DDKAPI *QUERY_GLOBAL_STATISTICS_HANDLER)(
+ /*IN*/ NDIS_HANDLE MacAdapterContext,
+ /*IN*/ PNDIS_REQUEST NdisRequest);
+
+typedef VOID (DDKAPI *UNLOAD_MAC_HANDLER)(
+ /*IN*/ NDIS_HANDLE MacMacContext);
+
+typedef NDIS_STATUS (DDKAPI *ADD_ADAPTER_HANDLER)(
+ /*IN*/ NDIS_HANDLE MacMacContext,
+ /*IN*/ NDIS_HANDLE WrapperConfigurationContext,
+ /*IN*/ PNDIS_STRING AdapterName);
+
+typedef VOID (*REMOVE_ADAPTER_HANDLER)(
+ /*IN*/ NDIS_HANDLE MacAdapterContext);
+
+typedef struct _NDIS_MAC_CHARACTERISTICS {
+ UCHAR MajorNdisVersion;
+ UCHAR MinorNdisVersion;
+ UINT Reserved;
+ OPEN_ADAPTER_HANDLER OpenAdapterHandler;
+ CLOSE_ADAPTER_HANDLER CloseAdapterHandler;
+ SEND_HANDLER SendHandler;
+ TRANSFER_DATA_HANDLER TransferDataHandler;
+ RESET_HANDLER ResetHandler;
+ REQUEST_HANDLER RequestHandler;
+ QUERY_GLOBAL_STATISTICS_HANDLER QueryGlobalStatisticsHandler;
+ UNLOAD_MAC_HANDLER UnloadMacHandler;
+ ADD_ADAPTER_HANDLER AddAdapterHandler;
+ REMOVE_ADAPTER_HANDLER RemoveAdapterHandler;
+ NDIS_STRING Name;
+} NDIS_MAC_CHARACTERISTICS, *PNDIS_MAC_CHARACTERISTICS;
+
+typedef NDIS_MAC_CHARACTERISTICS NDIS_WAN_MAC_CHARACTERISTICS;
+typedef NDIS_WAN_MAC_CHARACTERISTICS *PNDIS_WAN_MAC_CHARACTERISTICS;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __NDIS_H */
+
+/* EOF */
diff --git a/tcc/include/winapi/ddk/ndisguid.h b/tcc/include/winapi/ddk/ndisguid.h
new file mode 100644
index 0000000..27b8777
--- /dev/null
+++ b/tcc/include/winapi/ddk/ndisguid.h
@@ -0,0 +1,439 @@
+/*
+ * ndisguid.h
+ *
+ * GUIDs for NDIS drivers
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __NDISGUID_H
+#define __NDISGUID_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+DEFINE_GUID(GUID_NDIS_LAN_CLASS,
+ 0xad498944, 0x762f, 0x11d0, 0x8d, 0xcb, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_ENUMERATE_ADAPTER,
+ 0x981f2d7f, 0xb1f3, 0x11d0, 0x8d, 0xd7, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_ENUMERATE_VC,
+ 0x981f2d82, 0xb1f3, 0x11d0, 0x8d, 0xd7, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_NOTIFY_ADAPTER_ARRIVAL,
+ 0x981f2d81, 0xb1f3, 0x11d0, 0x8d, 0xd7, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_NOTIFY_ADAPTER_REMOVAL,
+ 0x981f2d80, 0xb1f3, 0x11d0, 0x8d, 0xd7, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_NOTIFY_VC_ARRIVAL,
+ 0x182f9e0c, 0xb1f3, 0x11d0, 0x8d, 0xd7, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_NOTIFY_VC_REMOVAL,
+ 0x981f2d79, 0xb1f3, 0x11d0, 0x8d, 0xd7, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_NOTIFY_BIND,
+ 0x5413531c, 0xb1f3, 0x11d0, 0x8d, 0xd7, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_NOTIFY_UNBIND,
+ 0x6e3ce1ec, 0xb1f3, 0x11d0, 0x8d, 0xd7, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_WAKE_ON_MAGIC_PACKET_ONLY,
+ 0xa14f1c97, 0x8839, 0x4f8a, 0x99, 0x96, 0xa2, 0x89, 0x96, 0xeb, 0xbf, 0x1d);
+
+
+DEFINE_GUID(GUID_NDIS_802_3_CURRENT_ADDRESS,
+ 0x44795700, 0xa61b, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_802_3_MAC_OPTIONS,
+ 0x44795703, 0xa61b, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_802_3_MAXIMUM_LIST_SIZE,
+ 0x44795702, 0xa61b, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_802_3_MULTICAST_LIST,
+ 0x44795701, 0xa61b, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_802_3_PERMANENT_ADDRESS,
+ 0x447956ff, 0xa61b, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_802_3_RCV_ERROR_ALIGNMENT,
+ 0x44795704, 0xa61b, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_802_3_XMIT_MORE_COLLISIONS,
+ 0x44795706, 0xa61b, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_802_3_XMIT_ONE_COLLISION,
+ 0x44795705, 0xa61b, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_802_5_CURRENT_ADDRESS,
+ 0x44795708, 0xa61b, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_802_5_CURRENT_FUNCTIONAL,
+ 0x44795709, 0xa61b, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_802_5_CURRENT_GROUP,
+ 0x4479570a, 0xa61b, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_802_5_CURRENT_RING_STATE,
+ 0xacf14032, 0xa61c, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_802_5_CURRENT_RING_STATUS,
+ 0x890a36ec, 0xa61c, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_802_5_LAST_OPEN_STATUS,
+ 0x4479570b, 0xa61b, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_802_5_PERMANENT_ADDRESS,
+ 0x44795707, 0xa61b, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_802_5_LINE_ERRORS,
+ 0xacf14033, 0xa61c, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_802_5_LOST_FRAMES,
+ 0xacf14034, 0xa61c, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+
+DEFINE_GUID(GUID_NDIS_802_11_ADD_WEP,
+ 0x4307bff0, 0x2129, 0x11d4, 0x97, 0xeb, 0x00, 0xc0, 0x4f, 0x79, 0xc4, 0x03);
+
+DEFINE_GUID(GUID_NDIS_802_11_AUTHENTICATION_MODE,
+ 0x43920a24, 0x2129, 0x11d4, 0x97, 0xeb, 0x00, 0xc0, 0x4f, 0x79, 0xc4, 0x03);
+
+DEFINE_GUID(GUID_NDIS_802_11_BSSID,
+ 0x2504b6c2, 0x1fa5, 0x11d4, 0x97, 0xeb, 0x00, 0xc0, 0x4f, 0x79, 0xc4, 0x03);
+
+DEFINE_GUID(GUID_NDIS_802_11_BSSID_LIST,
+ 0x69526f9a, 0x2062, 0x11d4, 0x97, 0xeb, 0x00, 0xc0, 0x4f, 0x79, 0xc4, 0x03);
+
+DEFINE_GUID(GUID_NDIS_802_11_BASIC_RATES,
+ 0x4a198516, 0x2068, 0x11d4, 0x97, 0xeb, 0x00, 0xc0, 0x4f, 0x79, 0xc4, 0x03);
+
+DEFINE_GUID(GUID_NDIS_802_11_CONFIGURATION,
+ 0x4a4df982, 0x2068, 0x11d4, 0x97, 0xeb, 0x00, 0xc0, 0x4f, 0x79, 0xc4, 0x03);
+
+DEFINE_GUID(GUID_NDIS_802_11_DESIRED_RATES,
+ 0x452ee08e, 0x2536, 0x11d4, 0x97, 0xeb, 0x00, 0xc0, 0x4f, 0x79, 0xc4, 0x03);
+
+DEFINE_GUID(GUID_NDIS_802_11_DISASSOCIATE,
+ 0x43671f40, 0x2129, 0x11d4, 0x97, 0xeb, 0x00, 0xc0, 0x4f, 0x79, 0xc4, 0x03);
+
+DEFINE_GUID(GUID_NDIS_802_11_FRAGMENTATION_THRESHOLD,
+ 0x69aaa7c4, 0x2062, 0x11d4, 0x97, 0xeb, 0x00, 0xc0, 0x4f, 0x79, 0xc4, 0x03);
+
+DEFINE_GUID(GUID_NDIS_802_11_INFRASTRUCTURE_MODE,
+ 0x697d5a7e, 0x2062, 0x11d4, 0x97, 0xeb, 0x00, 0xc0, 0x4f, 0x79, 0xc4, 0x03);
+
+DEFINE_GUID(GUID_NDIS_802_11_NETWORK_TYPES_SUPPORTED,
+ 0x8531d6e6, 0x2041, 0x11d4, 0x97, 0xeb, 0x00, 0xc0, 0x4f, 0x79, 0xc4, 0x03);
+
+DEFINE_GUID(GUID_NDIS_802_11_NETWORK_TYPE_IN_USE,
+ 0x857e2326, 0x2041, 0x11d4, 0x97, 0xeb, 0x00, 0xc0, 0x4f, 0x79, 0xc4, 0x03);
+
+DEFINE_GUID(GUID_NDIS_802_11_NUMBER_OF_ANTENNAS,
+ 0x01779336, 0x2064, 0x11d4, 0x97, 0xeb, 0x00, 0xc0, 0x4f, 0x79, 0xc4, 0x03);
+
+DEFINE_GUID(GUID_NDIS_802_11_POWER_MODE,
+ 0x85be837c, 0x2041, 0x11d4, 0x97, 0xeb, 0x00, 0xc0, 0x4f, 0x79, 0xc4, 0x03);
+
+DEFINE_GUID(GUID_NDIS_802_11_RATES_SUPPORTED,
+ 0x49db8722, 0x2068, 0x11d4, 0x97, 0xeb, 0x00, 0xc0, 0x4f, 0x79, 0xc4, 0x03);
+
+DEFINE_GUID(GUID_NDIS_802_11_REMOVE_WEP,
+ 0x433c345c, 0x2129, 0x11d4, 0x97, 0xeb, 0x00, 0xc0, 0x4f, 0x79, 0xc4, 0x03);
+
+DEFINE_GUID(GUID_NDIS_802_11_PRIVACY_FILTER,
+ 0x6733c4e9, 0x4792, 0x11d4, 0x97, 0xf1, 0x00, 0xc0, 0x4f, 0x79, 0xc4, 0x03);
+
+DEFINE_GUID(GUID_NDIS_802_11_RSSI,
+ 0x1507db16, 0x2053, 0x11d4, 0x97, 0xeb, 0x00, 0xc0, 0x4f, 0x79, 0xc4, 0x03);
+
+DEFINE_GUID(GUID_NDIS_802_11_RSSI_TRIGGER,
+ 0x155689b8, 0x2053, 0x11d4, 0x97, 0xeb, 0x00, 0xc0, 0x4f, 0x79, 0xc4, 0x03);
+
+DEFINE_GUID(GUID_NDIS_802_11_RTS_THRESHOLD,
+ 0x0134d07e, 0x2064, 0x11d4, 0x97, 0xeb, 0x00, 0xc0, 0x4f, 0x79, 0xc4, 0x03);
+
+DEFINE_GUID(GUID_NDIS_802_11_RX_ANTENNA_SELECTED,
+ 0x01ac07a2, 0x2064, 0x11d4, 0x97, 0xeb, 0x00, 0xc0, 0x4f, 0x79, 0xc4, 0x03);
+
+DEFINE_GUID(GUID_NDIS_802_11_SSID,
+ 0x7d2a90ea, 0x2041, 0x11d4, 0x97, 0xeb, 0x00, 0xc0, 0x4f, 0x79, 0xc4, 0x03);
+
+DEFINE_GUID(GUID_NDIS_802_11_STATISTICS,
+ 0x42bb73b0, 0x2129, 0x11d4, 0x97, 0xeb, 0x00, 0xc0, 0x4f, 0x79, 0xc4, 0x03);
+
+DEFINE_GUID(GUID_NDIS_802_11_TX_POWER_LEVEL,
+ 0x11e6ba76, 0x2053, 0x11d4, 0x97, 0xeb, 0x00, 0xc0, 0x4f, 0x79, 0xc4, 0x03);
+
+DEFINE_GUID(GUID_NDIS_802_11_TX_ANTENNA_SELECTED,
+ 0x01dbb74a, 0x2064, 0x11d4, 0x97, 0xeb, 0x00, 0xc0, 0x4f, 0x79, 0xc4, 0x03);
+
+
+DEFINE_GUID(GUID_NDIS_ATM_HW_CURRENT_ADDRESS,
+ 0x791ad1a1, 0xe35c, 0x11d0, 0x96, 0x92, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_ATM_MAX_AAL0_PACKET_SIZE,
+ 0x791ad1a5, 0xe35c, 0x11d0, 0x96, 0x92, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_ATM_MAX_AAL1_PACKET_SIZE,
+ 0x791ad1a6, 0xe35c, 0x11d0, 0x96, 0x92, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_ATM_MAX_AAL34_PACKET_SIZE,
+ 0x791ad1a7, 0xe35c, 0x11d0, 0x96, 0x92, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_ATM_MAX_AAL5_PACKET_SIZE,
+ 0x791ad191, 0xe35c, 0x11d0, 0x96, 0x92, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_ATM_MAX_ACTIVE_VCI_BITS,
+ 0x791ad1a3, 0xe35c, 0x11d0, 0x96, 0x92, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_ATM_MAX_ACTIVE_VCS,
+ 0x791ad1a2, 0xe35c, 0x11d0, 0x96, 0x92, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_ATM_MAX_ACTIVE_VPI_BITS,
+ 0x791ad1a4, 0xe35c, 0x11d0, 0x96, 0x92, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_ATM_SUPPORTED_AAL_TYPES,
+ 0x791ad1a0, 0xe35c, 0x11d0, 0x96, 0x92, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_ATM_SUPPORTED_SERVICE_CATEGORY,
+ 0x791ad19f, 0xe35c, 0x11d0, 0x96, 0x92, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_ATM_SUPPORTED_VC_RATES,
+ 0x791ad19e, 0xe35c, 0x11d0, 0x96, 0x92, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+
+DEFINE_GUID(GUID_NDIS_ATM_RCV_CELLS_DROPPED,
+ 0x0a21480c, 0xe35f, 0x11d0, 0x96, 0x92, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_ATM_RCV_CELLS_OK,
+ 0x0a21480a, 0xe35f, 0x11d0, 0x96, 0x92, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_ATM_XMIT_CELLS_OK,
+ 0x0a21480b, 0xe35f, 0x11d0, 0x96, 0x92, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+
+DEFINE_GUID(GUID_NDIS_FDDI_LONG_CURRENT_ADDR,
+ 0xacf14036, 0xa61c, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_FDDI_LONG_MAX_LIST_SIZE,
+ 0xacf14038, 0xa61c, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_FDDI_LONG_MULTICAST_LIST,
+ 0xacf14037, 0xa61c, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_FDDI_LONG_PERMANENT_ADDR,
+ 0xacf14035, 0xa61c, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_FDDI_SHORT_CURRENT_ADDR,
+ 0xacf1403a, 0xa61c, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_FDDI_SHORT_MAX_LIST_SIZE,
+ 0xacf1403c, 0xa61c, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_FDDI_SHORT_MULTICAST_LIST,
+ 0xacf1403b, 0xa61c, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_FDDI_SHORT_PERMANENT_ADDR,
+ 0xacf14039, 0xa61c, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+
+DEFINE_GUID(GUID_NDIS_FDDI_ATTACHMENT_TYPE,
+ 0xacf1403d, 0xa61c, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_FDDI_DOWNSTREAM_NODE_LONG,
+ 0xacf1403f, 0xa61c, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_FDDI_FRAME_ERRORS,
+ 0xacf14040, 0xa61c, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_FDDI_FRAMES_LOST,
+ 0xacf14041, 0xa61c, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_FDDI_LCT_FAILURES,
+ 0xacf14043, 0xa61c, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_FDDI_LCONNECTION_STATE,
+ 0xacf14045, 0xa61c, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_FDDI_LEM_REJECTS,
+ 0xacf14044, 0xa61c, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_FDDI_RING_MGT_STATE,
+ 0xacf14042, 0xa61c, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_FDDI_UPSTREAM_NODE_LONG,
+ 0xacf1403e, 0xa61c, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+
+DEFINE_GUID(GUID_NDIS_GEN_CURRENT_LOOKAHEAD,
+ 0x5ec10361, 0xa61a, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_GEN_CURRENT_PACKET_FILTER,
+ 0x5ec10360, 0xa61a, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_GEN_DRIVER_VERSION,
+ 0x5ec10362, 0xa61a, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_GEN_HARDWARE_STATUS,
+ 0x5ec10354, 0xa61a, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_GEN_MEDIA_IN_USE,
+ 0x5ec10356, 0xa61a, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_GEN_MEDIA_SUPPORTED,
+ 0x5ec10355, 0xa61a, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_GEN_LINK_SPEED,
+ 0x5ec10359, 0xa61a, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_GEN_MAC_OPTIONS,
+ 0x5ec10365, 0xa61a, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_GEN_MAXIMUM_LOOKAHEAD,
+ 0x5ec10357, 0xa61a, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_GEN_MAXIMUM_FRAME_SIZE,
+ 0x5ec10358, 0xa61a, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_GEN_MAXIMUM_SEND_PACKETS,
+ 0x5ec10367, 0xa61a, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_GEN_MAXIMUM_TOTAL_SIZE,
+ 0x5ec10363, 0xa61a, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_GEN_MEDIA_CONNECT_STATUS,
+ 0x5ec10366, 0xa61a, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_GEN_RECEIVE_BLOCK_SIZE,
+ 0x5ec1035d, 0xa61a, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_GEN_RECEIVE_BUFFER_SPACE,
+ 0x5ec1035b, 0xa61a, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_GEN_TRANSMIT_BUFFER_SPACE,
+ 0x5ec1035a, 0xa61a, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_GEN_TRANSMIT_BLOCK_SIZE,
+ 0x5ec1035c, 0xa61a, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_GEN_VENDOR_DESCRIPTION,
+ 0x5ec1035f, 0xa61a, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_GEN_VENDOR_DRIVER_VERSION,
+ 0x447956f9, 0xa61b, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_GEN_VENDOR_ID,
+ 0x5ec1035e, 0xa61a, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+
+DEFINE_GUID(GUID_NDIS_GEN_RCV_ERROR,
+ 0x447956fd, 0xa61b, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_GEN_RCV_NO_BUFFER,
+ 0x447956fe, 0xa61b, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_GEN_RCV_OK,
+ 0x447956fb, 0xa61b, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_GEN_XMIT_ERROR,
+ 0x447956fc, 0xa61b, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_GEN_XMIT_OK,
+ 0x447956fa, 0xa61b, 0x11d0, 0x8d, 0xd4, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+
+DEFINE_GUID(GUID_NDIS_GEN_CO_DRIVER_VERSION,
+ 0x791ad198, 0xe35c, 0x11d0, 0x96, 0x92, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_GEN_CO_HARDWARE_STATUS,
+ 0x791ad192, 0xe35c, 0x11d0, 0x96, 0x92, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_GEN_CO_LINK_SPEED,
+ 0x791ad195, 0xe35c, 0x11d0, 0x96, 0x92, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_GEN_CO_MAC_OPTIONS,
+ 0x791ad19a, 0xe35c, 0x11d0, 0x96, 0x92, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_GEN_CO_MEDIA_SUPPORTED,
+ 0x791ad193, 0xe35c, 0x11d0, 0x96, 0x92, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_GEN_CO_MEDIA_IN_USE,
+ 0x791ad194, 0xe35c, 0x11d0, 0x96, 0x92, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_GEN_CO_MEDIA_CONNECT_STATUS,
+ 0x791ad19b, 0xe35c, 0x11d0, 0x96, 0x92, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_GEN_CO_MINIMUM_LINK_SPEED,
+ 0x791ad19d, 0xe35c, 0x11d0, 0x96, 0x92, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_GEN_CO_VENDOR_DESCRIPTION,
+ 0x791ad197, 0xe35c, 0x11d0, 0x96, 0x92, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_GEN_CO_VENDOR_DRIVER_VERSION,
+ 0x791ad19c, 0xe35c, 0x11d0, 0x96, 0x92, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_GEN_CO_VENDOR_ID,
+ 0x791ad196, 0xe35c, 0x11d0, 0x96, 0x92, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+
+DEFINE_GUID(GUID_NDIS_GEN_CO_RCV_PDUS_ERROR,
+ 0x0a214808, 0xe35f, 0x11d0, 0x96, 0x92, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_GEN_CO_RCV_PDUS_OK,
+ 0x0a214806, 0xe35f, 0x11d0, 0x96, 0x92, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_GEN_CO_RCV_PDUS_NO_BUFFER,
+ 0x0a214809, 0xe35f, 0x11d0, 0x96, 0x92, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_GEN_CO_XMIT_PDUS_ERROR,
+ 0x0a214807, 0xe35f, 0x11d0, 0x96, 0x92, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_GEN_CO_XMIT_PDUS_OK,
+ 0x0a214805, 0xe35f, 0x11d0, 0x96, 0x92, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+
+DEFINE_GUID(GUID_NDIS_STATUS_LINK_SPEED_CHANGE,
+ 0x981f2d85, 0xb1f3, 0x11d0, 0x8d, 0xd7, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_STATUS_MEDIA_CONNECT,
+ 0x981f2d7d, 0xb1f3, 0x11d0, 0x8d, 0xd7, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_STATUS_MEDIA_DISCONNECT,
+ 0x981f2d7e, 0xb1f3, 0x11d0, 0x8d, 0xd7, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_STATUS_MEDIA_SPECIFIC_INDICATION,
+ 0x981f2d84, 0xb1f3, 0x11d0, 0x8d, 0xd7, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_STATUS_RESET_END,
+ 0x981f2d77, 0xb1f3, 0x11d0, 0x8d, 0xd7, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+DEFINE_GUID(GUID_NDIS_STATUS_RESET_START,
+ 0x981f2d76, 0xb1f3, 0x11d0, 0x8d, 0xd7, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __NDISGUID_H */
diff --git a/tcc/include/winapi/ddk/ndistapi.h b/tcc/include/winapi/ddk/ndistapi.h
new file mode 100644
index 0000000..1a8029e
--- /dev/null
+++ b/tcc/include/winapi/ddk/ndistapi.h
@@ -0,0 +1,1308 @@
+/*
+ * ndistapi.h
+ *
+ * NDIS Telephony API
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __NDISTAPI_H
+#define __NDISTAPI_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ndis.h"
+
+#ifndef NDIS_TAPI_CURRENT_VERSION
+#define NDIS_TAPI_CURRENT_VERSION 0x00010003
+#endif
+
+typedef ULONG_PTR HTAPI_LINE;
+typedef ULONG_PTR HDRV_LINE;
+typedef ULONG_PTR HTAPI_CALL;
+typedef ULONG_PTR HDRV_CALL;
+
+#define NDIS_STATUS_TAPI_ADDRESSBLOCKED ((NDIS_STATUS)0xC0012000L)
+#define NDIS_STATUS_TAPI_BEARERMODEUNAVAIL ((NDIS_STATUS)0xC0012001L)
+#define NDIS_STATUS_TAPI_CALLUNAVAIL ((NDIS_STATUS)0xC0012002L)
+#define NDIS_STATUS_TAPI_DIALBILLING ((NDIS_STATUS)0xC0012003L)
+#define NDIS_STATUS_TAPI_DIALDIALTONE ((NDIS_STATUS)0xC0012004L)
+#define NDIS_STATUS_TAPI_DIALPROMPT ((NDIS_STATUS)0xC0012005L)
+#define NDIS_STATUS_TAPI_DIALQUIET ((NDIS_STATUS)0xC0012006L)
+#define NDIS_STATUS_TAPI_INCOMPATIBLEEXTVERSION ((NDIS_STATUS)0xC0012007L)
+#define NDIS_STATUS_TAPI_INUSE ((NDIS_STATUS)0xC0012008L)
+#define NDIS_STATUS_TAPI_INVALADDRESS ((NDIS_STATUS)0xC0012009L)
+#define NDIS_STATUS_TAPI_INVALADDRESSID ((NDIS_STATUS)0xC001200AL)
+#define NDIS_STATUS_TAPI_INVALADDRESSMODE ((NDIS_STATUS)0xC001200BL)
+#define NDIS_STATUS_TAPI_INVALBEARERMODE ((NDIS_STATUS)0xC001200CL)
+#define NDIS_STATUS_TAPI_INVALCALLHANDLE ((NDIS_STATUS)0xC001200DL)
+#define NDIS_STATUS_TAPI_INVALCALLPARAMS ((NDIS_STATUS)0xC001200EL)
+#define NDIS_STATUS_TAPI_INVALCALLSTATE ((NDIS_STATUS)0xC001200FL)
+#define NDIS_STATUS_TAPI_INVALDEVICECLASS ((NDIS_STATUS)0xC0012010L)
+#define NDIS_STATUS_TAPI_INVALLINEHANDLE ((NDIS_STATUS)0xC0012011L)
+#define NDIS_STATUS_TAPI_INVALLINESTATE ((NDIS_STATUS)0xC0012012L)
+#define NDIS_STATUS_TAPI_INVALMEDIAMODE ((NDIS_STATUS)0xC0012013L)
+#define NDIS_STATUS_TAPI_INVALRATE ((NDIS_STATUS)0xC0012014L)
+#define NDIS_STATUS_TAPI_NODRIVER ((NDIS_STATUS)0xC0012015L)
+#define NDIS_STATUS_TAPI_OPERATIONUNAVAIL ((NDIS_STATUS)0xC0012016L)
+#define NDIS_STATUS_TAPI_RATEUNAVAIL ((NDIS_STATUS)0xC0012017L)
+#define NDIS_STATUS_TAPI_RESOURCEUNAVAIL ((NDIS_STATUS)0xC0012018L)
+#define NDIS_STATUS_TAPI_STRUCTURETOOSMALL ((NDIS_STATUS)0xC0012019L)
+#define NDIS_STATUS_TAPI_USERUSERINFOTOOBIG ((NDIS_STATUS)0xC001201AL)
+#define NDIS_STATUS_TAPI_ALLOCATED ((NDIS_STATUS)0xC001201BL)
+#define NDIS_STATUS_TAPI_INVALADDRESSSTATE ((NDIS_STATUS)0xC001201CL)
+#define NDIS_STATUS_TAPI_INVALPARAM ((NDIS_STATUS)0xC001201DL)
+#define NDIS_STATUS_TAPI_NODEVICE ((NDIS_STATUS)0xC001201EL)
+#define NDIS_STATUS_TAPI_DISCONNECTMODE_NORMAL ((NDIS_STATUS)0xC0012020L)
+#define NDIS_STATUS_TAPI_DISCONNECTMODE_UNKNOWN ((NDIS_STATUS)0xC0012021L)
+#define NDIS_STATUS_TAPI_DISCONNECTMODE_REJECT ((NDIS_STATUS)0xC0012022L)
+#define NDIS_STATUS_TAPI_DISCONNECTMODE_PICKUP ((NDIS_STATUS)0xC0012023L)
+#define NDIS_STATUS_TAPI_DISCONNECTMODE_FORWARDED ((NDIS_STATUS)0xC0012024L)
+#define NDIS_STATUS_TAPI_DISCONNECTMODE_BUSY ((NDIS_STATUS)0xC0012025L)
+#define NDIS_STATUS_TAPI_DISCONNECTMODE_NOANSWER ((NDIS_STATUS)0xC0012026L)
+#define NDIS_STATUS_TAPI_DISCONNECTMODE_BADADDRESS ((NDIS_STATUS)0xC0012027L)
+#define NDIS_STATUS_TAPI_DISCONNECTMODE_UNREACHABLE ((NDIS_STATUS)0xC0012028L)
+#define NDIS_STATUS_TAPI_DISCONNECTMODE_CONGESTION ((NDIS_STATUS)0xC0012029L)
+#define NDIS_STATUS_TAPI_DISCONNECTMODE_INCOMPATIBLE ((NDIS_STATUS)0xC001202AL)
+#define NDIS_STATUS_TAPI_DISCONNECTMODE_UNAVAIL ((NDIS_STATUS)0xC001202BL)
+#define NDIS_STATUS_TAPI_RECV_DIGIT ((NDIS_STATUS)0x40010020L)
+
+#define LINE_ADDRESSSTATE 0L
+#define LINE_CALLINFO 1L
+#define LINE_CALLSTATE 2L
+#define LINE_CLOSE 3L
+#define LINE_DEVSPECIFIC 4L
+#define LINE_DEVSPECIFICFEATURE 5L
+#define LINE_GATHERDIGITS 6L
+#define LINE_GENERATE 7L
+#define LINE_LINEDEVSTATE 8L
+#define LINE_MONITORDIGITS 9L
+#define LINE_MONITORMEDIA 10L
+#define LINE_MONITORTONE 11L
+#define LINE_REPLY 12L
+#define LINE_REQUEST 13L
+#define LINE_CREATE 19L
+#if (NDIS_TAPI_CURRENT_VERSION >= 0x00020000)
+#define LINE_AGENTSPECIFIC 21L
+#define LINE_AGENTSTATUS 22L
+#define LINE_APPNEWCALL 23L
+#define LINE_PROXYREQUEST 24L
+#define LINE_REMOVE 25L
+#endif
+#if (NDIS_TAPI_CURRENT_VERSION >= 0x00020002)
+#define LINE_AGENTSESSIONSTATUS 27L
+#define LINE_QUEUESTATUS 28L
+#define LINE_AGENTSTATUSEX 29L
+#define LINE_GROUPSTATUS 30L
+#define LINE_PROXYSTATUS 31L
+#endif
+#if (TAPI_CURRENT_VERSION >= 0x00030000)
+#define LINE_APPNEWCALLHUB 32L
+#define LINE_CALLHUBCLOSE 33L
+#define LINE_DEVSPECIFICEX 34L
+#endif
+
+#define TSPI_MESSAGE_BASE 500L
+#define LINE_NEWCALL TSPI_MESSAGE_BASE
+#define LINE_CALLDEVSPECIFIC (TSPI_MESSAGE_BASE + 1L)
+#define STRINGFORMAT_ASCII 0x00000001
+#define STRINGFORMAT_DBCS 0x00000002
+#define STRINGFORMAT_UNICODE 0x00000003
+#define STRINGFORMAT_BINARY 0x00000004
+
+#define LINEADDRCAPFLAGS_FWDNUMRINGS 0x00000001
+#define LINEADDRCAPFLAGS_PICKUPGROUPID 0x00000002
+#define LINEADDRCAPFLAGS_SECURE 0x00000004
+#define LINEADDRCAPFLAGS_BLOCKIDDEFAULT 0x00000008
+#define LINEADDRCAPFLAGS_BLOCKIDOVERRIDE 0x00000010
+#define LINEADDRCAPFLAGS_DIALED 0x00000020
+#define LINEADDRCAPFLAGS_ORIGOFFHOOK 0x00000040
+#define LINEADDRCAPFLAGS_DESTOFFHOOK 0x00000080
+#define LINEADDRCAPFLAGS_FWDCONSULT 0x00000100
+#define LINEADDRCAPFLAGS_SETUPCONFNULL 0x00000200
+#define LINEADDRCAPFLAGS_AUTORECONNECT 0x00000400
+#define LINEADDRCAPFLAGS_COMPLETIONID 0x00000800
+#define LINEADDRCAPFLAGS_TRANSFERHELD 0x00001000
+#define LINEADDRCAPFLAGS_TRANSFERMAKE 0x00002000
+#define LINEADDRCAPFLAGS_CONFERENCEHELD 0x00004000
+#define LINEADDRCAPFLAGS_CONFERENCEMAKE 0x00008000
+#define LINEADDRCAPFLAGS_PARTIALDIAL 0x00010000
+#define LINEADDRCAPFLAGS_FWDSTATUSVALID 0x00020000
+#define LINEADDRCAPFLAGS_FWDINTEXTADDR 0x00040000
+#define LINEADDRCAPFLAGS_FWDBUSYNAADDR 0x00080000
+#define LINEADDRCAPFLAGS_ACCEPTTOALERT 0x00100000
+#define LINEADDRCAPFLAGS_CONFDROP 0x00200000
+#define LINEADDRCAPFLAGS_PICKUPCALLWAIT 0x00400000
+#if (NDIS_TAPI_CURRENT_VERSION >= 0x00020000)
+#define LINEADDRCAPFLAGS_PREDICTIVEDIALER 0x00800000
+#define LINEADDRCAPFLAGS_QUEUE 0x01000000
+#define LINEADDRCAPFLAGS_ROUTEPOINT 0x02000000
+#define LINEADDRCAPFLAGS_HOLDMAKESNEW 0x04000000
+#define LINEADDRCAPFLAGS_NOINTERNALCALLS 0x08000000
+#define LINEADDRCAPFLAGS_NOEXTERNALCALLS 0x10000000
+#define LINEADDRCAPFLAGS_SETCALLINGID 0x20000000
+#endif
+#if (NDIS_TAPI_CURRENT_VERSION >= 0x00030000)
+#define LINEADDRCAPFLAGS_ACDGROUP 0x40000000
+#define LINEADDRCAPFLAGS_NOPSTNADDRESSTRANSLATION \
+ 0x80000000
+#endif
+
+#define LINEADDRESSMODE_ADDRESSID 0x00000001
+#define LINEADDRESSMODE_DIALABLEADDR 0x00000002
+#define LINEADDRESSSHARING_PRIVATE 0x00000001
+#define LINEADDRESSSHARING_BRIDGEDEXCL 0x00000002
+#define LINEADDRESSSHARING_BRIDGEDNEW 0x00000004
+#define LINEADDRESSSHARING_BRIDGEDSHARED 0x00000008
+#define LINEADDRESSSHARING_MONITORED 0x00000010
+#define LINEADDRESSSTATE_OTHER 0x00000001
+#define LINEADDRESSSTATE_DEVSPECIFIC 0x00000002
+#define LINEADDRESSSTATE_INUSEZERO 0x00000004
+#define LINEADDRESSSTATE_INUSEONE 0x00000008
+#define LINEADDRESSSTATE_INUSEMANY 0x00000010
+#define LINEADDRESSSTATE_NUMCALLS 0x00000020
+#define LINEADDRESSSTATE_FORWARD 0x00000040
+#define LINEADDRESSSTATE_TERMINALS 0x00000080
+
+#if (NDIS_TAPI_CURRENT_VERSION >= 0x00030000)
+#define LINEADDRESSTYPE_PHONENUMBER 0x00000001
+#define LINEADDRESSTYPE_SDP 0x00000002
+#define LINEADDRESSTYPE_EMAILNAME 0x00000004
+#define LINEADDRESSTYPE_DOMAINNAME 0x00000008
+#define LINEADDRESSTYPE_IPADDRESS 0x00000010
+#endif
+
+#define LINEADDRFEATURE_FORWARD 0x00000001
+#define LINEADDRFEATURE_MAKECALL 0x00000002
+#define LINEADDRFEATURE_PICKUP 0x00000004
+#define LINEADDRFEATURE_SETMEDIACONTROL 0x00000008
+#define LINEADDRFEATURE_SETTERMINAL 0x00000010
+#define LINEADDRFEATURE_SETUPCONF 0x00000020
+#define LINEADDRFEATURE_UNCOMPLETECALL 0x00000040
+#define LINEADDRFEATURE_UNPARK 0x00000080
+#if (NDIS_TAPI_CURRENT_VERSION >= 0x00020000)
+#define LINEADDRFEATURE_PICKUPHELD 0x00000100
+#define LINEADDRFEATURE_PICKUPGROUP 0x00000200
+#define LINEADDRFEATURE_PICKUPDIRECT 0x00000400
+#define LINEADDRFEATURE_PICKUPWAITING 0x00000800
+#define LINEADDRFEATURE_FORWARDFWD 0x00001000
+#define LINEADDRFEATURE_FORWARDDND 0x00002000
+#endif
+
+#define LINEANSWERMODE_NONE 0x00000001
+#define LINEANSWERMODE_DROP 0x00000002
+#define LINEANSWERMODE_HOLD 0x00000004
+
+#define LINEBEARERMODE_VOICE 0x00000001
+#define LINEBEARERMODE_SPEECH 0x00000002
+#define LINEBEARERMODE_MULTIUSE 0x00000004
+#define LINEBEARERMODE_DATA 0x00000008
+#define LINEBEARERMODE_ALTSPEECHDATA 0x00000010
+#define LINEBEARERMODE_NONCALLSIGNALING 0x00000020
+#define LINEBEARERMODE_PASSTHROUGH 0x00000040
+#if (NDIS_TAPI_CURRENT_VERSION >= 0x00020000)
+#define LINEBEARERMODE_RESTRICTEDDATA 0x00000080
+#endif
+
+#define LINEBUSYMODE_STATION 0x00000001
+#define LINEBUSYMODE_TRUNK 0x00000002
+#define LINEBUSYMODE_UNKNOWN 0x00000004
+#define LINEBUSYMODE_UNAVAIL 0x00000008
+
+#define LINECALLCOMPLCOND_BUSY 0x00000001
+#define LINECALLCOMPLCOND_NOANSWER 0x00000002
+
+#define LINECALLCOMPLMODE_CAMPON 0x00000001
+#define LINECALLCOMPLMODE_CALLBACK 0x00000002
+#define LINECALLCOMPLMODE_INTRUDE 0x00000004
+#define LINECALLCOMPLMODE_MESSAGE 0x00000008
+
+#define LINECALLFEATURE_ACCEPT 0x00000001
+#define LINECALLFEATURE_ADDTOCONF 0x00000002
+#define LINECALLFEATURE_ANSWER 0x00000004
+#define LINECALLFEATURE_BLINDTRANSFER 0x00000008
+#define LINECALLFEATURE_COMPLETECALL 0x00000010
+#define LINECALLFEATURE_COMPLETETRANSF 0x00000020
+#define LINECALLFEATURE_DIAL 0x00000040
+#define LINECALLFEATURE_DROP 0x00000080
+#define LINECALLFEATURE_GATHERDIGITS 0x00000100
+#define LINECALLFEATURE_GENERATEDIGITS 0x00000200
+#define LINECALLFEATURE_GENERATETONE 0x00000400
+#define LINECALLFEATURE_HOLD 0x00000800
+#define LINECALLFEATURE_MONITORDIGITS 0x00001000
+#define LINECALLFEATURE_MONITORMEDIA 0x00002000
+#define LINECALLFEATURE_MONITORTONES 0x00004000
+#define LINECALLFEATURE_PARK 0x00008000
+#define LINECALLFEATURE_PREPAREADDCONF 0x00010000
+#define LINECALLFEATURE_REDIRECT 0x00020000
+#define LINECALLFEATURE_REMOVEFROMCONF 0x00040000
+#define LINECALLFEATURE_SECURECALL 0x00080000
+#define LINECALLFEATURE_SENDUSERUSER 0x00100000
+#define LINECALLFEATURE_SETCALLPARAMS 0x00200000
+#define LINECALLFEATURE_SETMEDIACONTROL 0x00400000
+#define LINECALLFEATURE_SETTERMINAL 0x00800000
+#define LINECALLFEATURE_SETUPCONF 0x01000000
+#define LINECALLFEATURE_SETUPTRANSFER 0x02000000
+#define LINECALLFEATURE_SWAPHOLD 0x04000000
+#define LINECALLFEATURE_UNHOLD 0x08000000
+#define LINECALLFEATURE_RELEASEUSERUSERINFO \
+ 0x10000000
+#if (NDIS_TAPI_CURRENT_VERSION >= 0x00020000)
+#define LINECALLFEATURE_SETTREATMENT 0x20000000
+#define LINECALLFEATURE_SETQOS 0x40000000
+#define LINECALLFEATURE_SETCALLDATA 0x80000000
+#endif
+
+#define LINECALLINFOSTATE_OTHER 0x00000001
+#define LINECALLINFOSTATE_DEVSPECIFIC 0x00000002
+#define LINECALLINFOSTATE_BEARERMODE 0x00000004
+#define LINECALLINFOSTATE_RATE 0x00000008
+#define LINECALLINFOSTATE_MEDIAMODE 0x00000010
+#define LINECALLINFOSTATE_APPSPECIFIC 0x00000020
+#define LINECALLINFOSTATE_CALLID 0x00000040
+#define LINECALLINFOSTATE_RELATEDCALLID 0x00000080
+#define LINECALLINFOSTATE_ORIGIN 0x00000100
+#define LINECALLINFOSTATE_REASON 0x00000200
+#define LINECALLINFOSTATE_COMPLETIONID 0x00000400
+#define LINECALLINFOSTATE_NUMOWNERINCR 0x00000800
+#define LINECALLINFOSTATE_NUMOWNERDECR 0x00001000
+#define LINECALLINFOSTATE_NUMMONITORS 0x00002000
+#define LINECALLINFOSTATE_TRUNK 0x00004000
+#define LINECALLINFOSTATE_CALLERID 0x00008000
+#define LINECALLINFOSTATE_CALLEDID 0x00010000
+#define LINECALLINFOSTATE_CONNECTEDID 0x00020000
+#define LINECALLINFOSTATE_REDIRECTIONID 0x00040000
+#define LINECALLINFOSTATE_REDIRECTINGID 0x00080000
+#define LINECALLINFOSTATE_DISPLAY 0x00100000
+#define LINECALLINFOSTATE_USERUSERINFO 0x00200000
+#define LINECALLINFOSTATE_HIGHLEVELCOMP 0x00400000
+#define LINECALLINFOSTATE_LOWLEVELCOMP 0x00800000
+#define LINECALLINFOSTATE_CHARGINGINFO 0x01000000
+#define LINECALLINFOSTATE_TERMINAL 0x02000000
+#define LINECALLINFOSTATE_DIALPARAMS 0x04000000
+#define LINECALLINFOSTATE_MONITORMODES 0x08000000
+#if (NDIS_TAPI_CURRENT_VERSION >= 0x00020000)
+#define LINECALLINFOSTATE_TREATMENT 0x10000000
+#define LINECALLINFOSTATE_QOS 0x20000000
+#define LINECALLINFOSTATE_CALLDATA 0x40000000
+#endif
+
+#define LINECALLORIGIN_OUTBOUND 0x00000001
+#define LINECALLORIGIN_INTERNAL 0x00000002
+#define LINECALLORIGIN_EXTERNAL 0x00000004
+#define LINECALLORIGIN_UNKNOWN 0x00000010
+#define LINECALLORIGIN_UNAVAIL 0x00000020
+#define LINECALLORIGIN_CONFERENCE 0x00000040
+#define LINECALLORIGIN_INBOUND 0x00000080
+
+#define LINECALLPARAMFLAGS_SECURE 0x00000001
+#define LINECALLPARAMFLAGS_IDLE 0x00000002
+#define LINECALLPARAMFLAGS_BLOCKID 0x00000004
+#define LINECALLPARAMFLAGS_ORIGOFFHOOK 0x00000008
+#define LINECALLPARAMFLAGS_DESTOFFHOOK 0x00000010
+#if (NDIS_TAPI_CURRENT_VERSION >= 0x00020000)
+#define LINECALLPARAMFLAGS_NOHOLDCONFERENCE \
+ 0x00000020
+#define LINECALLPARAMFLAGS_PREDICTIVEDIAL 0x00000040
+#define LINECALLPARAMFLAGS_ONESTEPTRANSFER \
+ 0x00000080
+#endif
+
+#define LINECALLPARTYID_BLOCKED 0x00000001
+#define LINECALLPARTYID_OUTOFAREA 0x00000002
+#define LINECALLPARTYID_NAME 0x00000004
+#define LINECALLPARTYID_ADDRESS 0x00000008
+#define LINECALLPARTYID_PARTIAL 0x00000010
+#define LINECALLPARTYID_UNKNOWN 0x00000020
+#define LINECALLPARTYID_UNAVAIL 0x00000040
+
+#define LINECALLPRIVILEGE_NONE 0x00000001
+#define LINECALLPRIVILEGE_MONITOR 0x00000002
+#define LINECALLPRIVILEGE_OWNER 0x00000004
+
+#define LINECALLREASON_DIRECT 0x00000001
+#define LINECALLREASON_FWDBUSY 0x00000002
+#define LINECALLREASON_FWDNOANSWER 0x00000004
+#define LINECALLREASON_FWDUNCOND 0x00000008
+#define LINECALLREASON_PICKUP 0x00000010
+#define LINECALLREASON_UNPARK 0x00000020
+#define LINECALLREASON_REDIRECT 0x00000040
+#define LINECALLREASON_CALLCOMPLETION 0x00000080
+#define LINECALLREASON_TRANSFER 0x00000100
+#define LINECALLREASON_REMINDER 0x00000200
+#define LINECALLREASON_UNKNOWN 0x00000400
+#define LINECALLREASON_UNAVAIL 0x00000800
+#define LINECALLREASON_INTRUDE 0x00001000
+#define LINECALLREASON_PARKED 0x00002000
+#if (NDIS_TAPI_CURRENT_VERSION >= 0x00020000)
+#define LINECALLREASON_CAMPEDON 0x00004000
+#define LINECALLREASON_ROUTEREQUEST 0x00008000
+#endif
+
+#define LINECALLSELECT_LINE 0x00000001
+#define LINECALLSELECT_ADDRESS 0x00000002
+#define LINECALLSELECT_CALL 0x00000004
+#if (NDIS_TAPI_CURRENT_VERSION > 0x00020000)
+#define LINECALLSELECT_DEVICEID 0x00000008
+#endif
+#if (NDIS_TAPI_CURRENT_VERSION >= 0x00030000)
+#define LINECALLSELECT_CALLID 0x00000010
+#endif
+
+#define LINECALLSTATE_IDLE 0x00000001
+#define LINECALLSTATE_OFFERING 0x00000002
+#define LINECALLSTATE_ACCEPTED 0x00000004
+#define LINECALLSTATE_DIALTONE 0x00000008
+#define LINECALLSTATE_DIALING 0x00000010
+#define LINECALLSTATE_RINGBACK 0x00000020
+#define LINECALLSTATE_BUSY 0x00000040
+#define LINECALLSTATE_SPECIALINFO 0x00000080
+#define LINECALLSTATE_CONNECTED 0x00000100
+#define LINECALLSTATE_PROCEEDING 0x00000200
+#define LINECALLSTATE_ONHOLD 0x00000400
+#define LINECALLSTATE_CONFERENCED 0x00000800
+#define LINECALLSTATE_ONHOLDPENDCONF 0x00001000
+#define LINECALLSTATE_ONHOLDPENDTRANSFER 0x00002000
+#define LINECALLSTATE_DISCONNECTED 0x00004000
+#define LINECALLSTATE_UNKNOWN 0x00008000
+
+#define LINEDEVCAPFLAGS_CROSSADDRCONF 0x00000001
+#define LINEDEVCAPFLAGS_HIGHLEVCOMP 0x00000002
+#define LINEDEVCAPFLAGS_LOWLEVCOMP 0x00000004
+#define LINEDEVCAPFLAGS_MEDIACONTROL 0x00000008
+#define LINEDEVCAPFLAGS_MULTIPLEADDR 0x00000010
+#define LINEDEVCAPFLAGS_CLOSEDROP 0x00000020
+#define LINEDEVCAPFLAGS_DIALBILLING 0x00000040
+#define LINEDEVCAPFLAGS_DIALQUIET 0x00000080
+#define LINEDEVCAPFLAGS_DIALDIALTONE 0x00000100
+#if (NDIS_TAPI_CURRENT_VERSION >= 0x00030000)
+#define LINEDEVCAPFLAGS_MSP 0x00000200
+#define LINEDEVCAPFLAGS_CALLHUB 0x00000400
+#define LINEDEVCAPFLAGS_CALLHUBTRACKING 0x00000800
+#define LINEDEVCAPFLAGS_PRIVATEOBJECTS 0x00001000
+#endif
+
+#define LINEDEVSTATE_OTHER 0x00000001
+#define LINEDEVSTATE_RINGING 0x00000002
+#define LINEDEVSTATE_CONNECTED 0x00000004
+#define LINEDEVSTATE_DISCONNECTED 0x00000008
+#define LINEDEVSTATE_MSGWAITON 0x00000010
+#define LINEDEVSTATE_MSGWAITOFF 0x00000020
+#define LINEDEVSTATE_INSERVICE 0x00000040
+#define LINEDEVSTATE_OUTOFSERVICE 0x00000080
+#define LINEDEVSTATE_MAINTENANCE 0x00000100
+#define LINEDEVSTATE_OPEN 0x00000200
+#define LINEDEVSTATE_CLOSE 0x00000400
+#define LINEDEVSTATE_NUMCALLS 0x00000800
+#define LINEDEVSTATE_NUMCOMPLETIONS 0x00001000
+#define LINEDEVSTATE_TERMINALS 0x00002000
+#define LINEDEVSTATE_ROAMMODE 0x00004000
+#define LINEDEVSTATE_BATTERY 0x00008000
+#define LINEDEVSTATE_SIGNAL 0x00010000
+#define LINEDEVSTATE_DEVSPECIFIC 0x00020000
+#define LINEDEVSTATE_REINIT 0x00040000
+#define LINEDEVSTATE_LOCK 0x00080000
+
+#define LINEDEVSTATUSFLAGS_CONNECTED 0x00000001
+#define LINEDEVSTATUSFLAGS_MSGWAIT 0x00000002
+#define LINEDEVSTATUSFLAGS_INSERVICE 0x00000004
+#define LINEDEVSTATUSFLAGS_LOCKED 0x00000008
+
+#define LINEDIALTONEMODE_NORMAL 0x00000001
+#define LINEDIALTONEMODE_SPECIAL 0x00000002
+#define LINEDIALTONEMODE_INTERNAL 0x00000004
+#define LINEDIALTONEMODE_EXTERNAL 0x00000008
+#define LINEDIALTONEMODE_UNKNOWN 0x00000010
+#define LINEDIALTONEMODE_UNAVAIL 0x00000020
+
+#define LINEDIGITMODE_PULSE 0x00000001
+#define LINEDIGITMODE_DTMF 0x00000002
+#define LINEDIGITMODE_DTMFEND 0x00000004
+
+#define LINEDISCONNECTMODE_NORMAL 0x00000001
+#define LINEDISCONNECTMODE_UNKNOWN 0x00000002
+#define LINEDISCONNECTMODE_REJECT 0x00000004
+#define LINEDISCONNECTMODE_PICKUP 0x00000008
+#define LINEDISCONNECTMODE_FORWARDED 0x00000010
+#define LINEDISCONNECTMODE_BUSY 0x00000020
+#define LINEDISCONNECTMODE_NOANSWER 0x00000040
+#define LINEDISCONNECTMODE_BADADDRESS 0x00000080
+#define LINEDISCONNECTMODE_UNREACHABLE 0x00000100
+#define LINEDISCONNECTMODE_CONGESTION 0x00000200
+#define LINEDISCONNECTMODE_INCOMPATIBLE 0x00000400
+#define LINEDISCONNECTMODE_UNAVAIL 0x00000800
+#define LINEDISCONNECTMODE_NODIALTONE 0x00001000
+#if (NDIS_TAPI_CURRENT_VERSION >= 0x00020000)
+#define LINEDISCONNECTMODE_NUMBERCHANGED 0x00002000
+#define LINEDISCONNECTMODE_OUTOFORDER 0x00004000
+#define LINEDISCONNECTMODE_TEMPFAILURE 0x00008000
+#define LINEDISCONNECTMODE_QOSUNAVAIL 0x00010000
+#define LINEDISCONNECTMODE_BLOCKED 0x00020000
+#define LINEDISCONNECTMODE_DONOTDISTURB 0x00040000
+#define LINEDISCONNECTMODE_CANCELLED 0x00080000
+#endif
+
+#define LINEFEATURE_DEVSPECIFIC 0x00000001
+#define LINEFEATURE_DEVSPECIFICFEAT 0x00000002
+#define LINEFEATURE_FORWARD 0x00000004
+#define LINEFEATURE_MAKECALL 0x00000008
+#define LINEFEATURE_SETMEDIACONTROL 0x00000010
+#define LINEFEATURE_SETTERMINAL 0x00000020
+#if (NDIS_TAPI_CURRENT_VERSION >= 0x00020000)
+#define LINEFEATURE_SETDEVSTATUS 0x00000040
+#define LINEFEATURE_FORWARDFWD 0x00000080
+#define LINEFEATURE_FORWARDDND 0x00000100
+#endif
+
+#define LINEFORWARDMODE_UNCOND 0x00000001
+#define LINEFORWARDMODE_UNCONDINTERNAL 0x00000002
+#define LINEFORWARDMODE_UNCONDEXTERNAL 0x00000004
+#define LINEFORWARDMODE_UNCONDSPECIFIC 0x00000008
+#define LINEFORWARDMODE_BUSY 0x00000010
+#define LINEFORWARDMODE_BUSYINTERNAL 0x00000020
+#define LINEFORWARDMODE_BUSYEXTERNAL 0x00000040
+#define LINEFORWARDMODE_BUSYSPECIFIC 0x00000080
+#define LINEFORWARDMODE_NOANSW 0x00000100
+#define LINEFORWARDMODE_NOANSWINTERNAL 0x00000200
+#define LINEFORWARDMODE_NOANSWEXTERNAL 0x00000400
+#define LINEFORWARDMODE_NOANSWSPECIFIC 0x00000800
+#define LINEFORWARDMODE_BUSYNA 0x00001000
+#define LINEFORWARDMODE_BUSYNAINTERNAL 0x00002000
+#define LINEFORWARDMODE_BUSYNAEXTERNAL 0x00004000
+#define LINEFORWARDMODE_BUSYNASPECIFIC 0x00008000
+
+#define LINEGATHERTERM_BUFFERFULL 0x00000001
+#define LINEGATHERTERM_TERMDIGIT 0x00000002
+#define LINEGATHERTERM_FIRSTTIMEOUT 0x00000004
+#define LINEGATHERTERM_INTERTIMEOUT 0x00000008
+#define LINEGATHERTERM_CANCEL 0x00000010
+
+#define LINEGENERATETERM_DONE 0x00000001
+#define LINEGENERATETERM_CANCEL 0x00000002
+
+#define LINEMEDIACONTROL_NONE 0x00000001
+#define LINEMEDIACONTROL_START 0x00000002
+#define LINEMEDIACONTROL_RESET 0x00000004
+#define LINEMEDIACONTROL_PAUSE 0x00000008
+#define LINEMEDIACONTROL_RESUME 0x00000010
+#define LINEMEDIACONTROL_RATEUP 0x00000020
+#define LINEMEDIACONTROL_RATEDOWN 0x00000040
+#define LINEMEDIACONTROL_RATENORMAL 0x00000080
+#define LINEMEDIACONTROL_VOLUMEUP 0x00000100
+#define LINEMEDIACONTROL_VOLUMEDOWN 0x00000200
+#define LINEMEDIACONTROL_VOLUMENORMAL 0x00000400
+
+#define LINEMEDIAMODE_UNKNOWN 0x00000002
+#define LINEMEDIAMODE_INTERACTIVEVOICE 0x00000004
+#define LINEMEDIAMODE_AUTOMATEDVOICE 0x00000008
+#define LINEMEDIAMODE_DATAMODEM 0x00000010
+#define LINEMEDIAMODE_G3FAX 0x00000020
+#define LINEMEDIAMODE_TDD 0x00000040
+#define LINEMEDIAMODE_G4FAX 0x00000080
+#define LINEMEDIAMODE_DIGITALDATA 0x00000100
+#define LINEMEDIAMODE_TELETEX 0x00000200
+#define LINEMEDIAMODE_VIDEOTEX 0x00000400
+#define LINEMEDIAMODE_TELEX 0x00000800
+#define LINEMEDIAMODE_MIXED 0x00001000
+#define LINEMEDIAMODE_ADSI 0x00002000
+
+#define LINEMEDIAMODE_VOICEVIEW 0x00004000
+#define LAST_LINEMEDIAMODE 0x00004000
+#if (NDIS_TAPI_CURRENT_VERSION >= 0x00020001)
+#define LINEMEDIAMODE_VIDEO 0x00008000
+#define LAST_LINEMEDIAMODE 0x00008000
+#endif
+
+#define LINEPARKMODE_DIRECTED 0x00000001
+#define LINEPARKMODE_NONDIRECTED 0x00000002
+
+#define LINEREMOVEFROMCONF_NONE 0x00000001
+#define LINEREMOVEFROMCONF_LAST 0x00000002
+#define LINEREMOVEFROMCONF_ANY 0x00000003
+
+#define LINEREQUESTMODE_MAKECALL 0x00000001
+#define LINEREQUESTMODE_MEDIACALL 0x00000002
+#define LINEREQUESTMODE_DROP 0x00000004
+
+#define LAST_LINEREQUESTMODE LINEREQUESTMODE_MEDIACALL
+
+#define LINEROAMMODE_UNKNOWN 0x00000001
+#define LINEROAMMODE_UNAVAIL 0x00000002
+#define LINEROAMMODE_HOME 0x00000004
+#define LINEROAMMODE_ROAMA 0x00000008
+#define LINEROAMMODE_ROAMB 0x00000010
+
+#define LINESPECIALINFO_NOCIRCUIT 0x00000001
+#define LINESPECIALINFO_CUSTIRREG 0x00000002
+#define LINESPECIALINFO_REORDER 0x00000004
+#define LINESPECIALINFO_UNKNOWN 0x00000008
+#define LINESPECIALINFO_UNAVAIL 0x00000010
+
+#define LINETERMDEV_PHONE 0x00000001
+#define LINETERMDEV_HEADSET 0x00000002
+#define LINETERMDEV_SPEAKER 0x00000004
+
+#define LINETERMMODE_BUTTONS 0x00000001
+#define LINETERMMODE_LAMPS 0x00000002
+#define LINETERMMODE_DISPLAY 0x00000004
+#define LINETERMMODE_RINGER 0x00000008
+#define LINETERMMODE_HOOKSWITCH 0x00000010
+#define LINETERMMODE_MEDIATOLINE 0x00000020
+#define LINETERMMODE_MEDIAFROMLINE 0x00000040
+#define LINETERMMODE_MEDIABIDIRECT 0x00000080
+
+#define LINETERMSHARING_PRIVATE 0x00000001
+#define LINETERMSHARING_SHAREDEXCL 0x00000002
+#define LINETERMSHARING_SHAREDCONF 0x00000004
+
+#define LINETONEMODE_CUSTOM 0x00000001
+#define LINETONEMODE_RINGBACK 0x00000002
+#define LINETONEMODE_BUSY 0x00000004
+#define LINETONEMODE_BEEP 0x00000008
+#define LINETONEMODE_BILLING 0x00000010
+
+#define LINETRANSFERMODE_TRANSFER 0x00000001
+#define LINETRANSFERMODE_CONFERENCE 0x00000002
+
+#define LINETOLLLISTOPTION_ADD 0x00000001
+#define LINETOLLLISTOPTION_REMOVE 0x00000002
+
+#define LINETRANSLATEOPTION_CARDOVERRIDE 0x00000001
+
+#define LINETRANSLATERESULT_CANONICAL 0x00000001
+#define LINETRANSLATERESULT_INTERNATIONAL 0x00000002
+#define LINETRANSLATERESULT_LONGDISTANCE 0x00000004
+#define LINETRANSLATERESULT_LOCAL 0x00000008
+#define LINETRANSLATERESULT_INTOLLLIST 0x00000010
+#define LINETRANSLATERESULT_NOTINTOLLLIST 0x00000020
+#define LINETRANSLATERESULT_DIALBILLING 0x00000040
+#define LINETRANSLATERESULT_DIALQUIET 0x00000080
+#define LINETRANSLATERESULT_DIALDIALTONE 0x00000100
+#define LINETRANSLATERESULT_DIALPROMPT 0x00000200
+#if (NDIS_TAPI_CURRENT_VERSION >= 0x00020000)
+#define LINETRANSLATERESULT_VOICEDETECT 0x00000400
+#endif
+
+#if (NDIS_TAPI_CURRENT_VERSION >= 0x00030000)
+#define LINETRANSLATERESULT_NOTRANSLATION 0x00000800
+#endif
+
+
+typedef struct _NDIS_VAR_DATA_DESC {
+ USHORT Length;
+ USHORT MaximumLength;
+ LONG Offset;
+} NDIS_VAR_DATA_DESC, *PNDIS_VAR_DATA_DESC;
+
+typedef struct _LINE_DIAL_PARAMS {
+ ULONG ulDialPause;
+ ULONG ulDialSpeed;
+ ULONG ulDigitDuration;
+ ULONG ulWaitForDialtone;
+} LINE_DIAL_PARAMS, *PLINE_DIAL_PARAMS;
+
+typedef struct _LINE_ADDRESS_CAPS {
+ ULONG ulTotalSize;
+ ULONG ulNeededSize;
+ ULONG ulUsedSize;
+ ULONG ulLineDeviceID;
+ ULONG ulAddressSize;
+ ULONG ulAddressOffset;
+ ULONG ulDevSpecificSize;
+ ULONG ulDevSpecificOffset;
+ ULONG ulAddressSharing;
+ ULONG ulAddressStates;
+ ULONG ulCallInfoStates;
+ ULONG ulCallerIDFlags;
+ ULONG ulCalledIDFlags;
+ ULONG ulConnectedIDFlags;
+ ULONG ulRedirectionIDFlags;
+ ULONG ulRedirectingIDFlags;
+ ULONG ulCallStates;
+ ULONG ulDialToneModes;
+ ULONG ulBusyModes;
+ ULONG ulSpecialInfo;
+ ULONG ulDisconnectModes;
+ ULONG ulMaxNumActiveCalls;
+ ULONG ulMaxNumOnHoldCalls;
+ ULONG ulMaxNumOnHoldPendingCalls;
+ ULONG ulMaxNumConference;
+ ULONG ulMaxNumTransConf;
+ ULONG ulAddrCapFlags;
+ ULONG ulCallFeatures;
+ ULONG ulRemoveFromConfCaps;
+ ULONG ulRemoveFromConfState;
+ ULONG ulTransferModes;
+ ULONG ulParkModes;
+ ULONG ulForwardModes;
+ ULONG ulMaxForwardEntries;
+ ULONG ulMaxSpecificEntries;
+ ULONG ulMinFwdNumRings;
+ ULONG ulMaxFwdNumRings;
+ ULONG ulMaxCallCompletions;
+ ULONG ulCallCompletionConds;
+ ULONG ulCallCompletionModes;
+ ULONG ulNumCompletionMessages;
+ ULONG ulCompletionMsgTextEntrySize;
+ ULONG ulCompletionMsgTextSize;
+ ULONG ulCompletionMsgTextOffset;
+#if (NDIS_TAPI_CURRENT_VERSION >= 0x00010004)
+ ULONG ulAddressFeatures;
+#if (NDIS_TAPI_CURRENT_VERSION >= 0x00020000)
+ ULONG ulPredictiveAutoTransferStates;
+ ULONG ulNumCallTreatments;
+ ULONG ulCallTreatmentListSize;
+ ULONG ulCallTreatmentListOffset;
+ ULONG ulDeviceClassesSize;
+ ULONG ulDeviceClassesOffset;
+ ULONG ulMaxCallDataSize;
+ ULONG ulCallFeatures2;
+ ULONG ulMaxNoAnswerTimeout;
+ ULONG ulConnectedModes;
+ ULONG ulOfferingModes;
+ ULONG ulAvailableMediaModes;
+#endif
+#endif
+} LINE_ADDRESS_CAPS, *PLINE_ADDRESS_CAPS;
+
+typedef struct _LINE_ADDRESS_STATUS {
+ ULONG ulTotalSize;
+ ULONG ulNeededSize;
+ ULONG ulUsedSize;
+ ULONG ulNumInUse;
+ ULONG ulNumActiveCalls;
+ ULONG ulNumOnHoldCalls;
+ ULONG ulNumOnHoldPendCalls;
+ ULONG ulAddressFeatures;
+ ULONG ulNumRingsNoAnswer;
+ ULONG ulForwardNumEntries;
+ ULONG ulForwardSize;
+ ULONG ulForwardOffset;
+ ULONG ulTerminalModesSize;
+ ULONG ulTerminalModesOffset;
+ ULONG ulDevSpecificSize;
+ ULONG ulDevSpecificOffset;
+} LINE_ADDRESS_STATUS, *PLINE_ADDRESS_STATUS;
+
+typedef struct _LINE_CALL_INFO {
+ ULONG ulTotalSize;
+ ULONG ulNeededSize;
+ ULONG ulUsedSize;
+ ULONG hLine;
+ ULONG ulLineDeviceID;
+ ULONG ulAddressID;
+ ULONG ulBearerMode;
+ ULONG ulRate;
+ ULONG ulMediaMode;
+ ULONG ulAppSpecific;
+ ULONG ulCallID;
+ ULONG ulRelatedCallID;
+ ULONG ulCallParamFlags;
+ ULONG ulCallStates;
+ ULONG ulMonitorDigitModes;
+ ULONG ulMonitorMediaModes;
+ LINE_DIAL_PARAMS DialParams;
+ ULONG ulOrigin;
+ ULONG ulReason;
+ ULONG ulCompletionID;
+ ULONG ulNumOwners;
+ ULONG ulNumMonitors;
+ ULONG ulCountryCode;
+ ULONG ulTrunk;
+ ULONG ulCallerIDFlags;
+ ULONG ulCallerIDSize;
+ ULONG ulCallerIDOffset;
+ ULONG ulCallerIDNameSize;
+ ULONG ulCallerIDNameOffset;
+ ULONG ulCalledIDFlags;
+ ULONG ulCalledIDSize;
+ ULONG ulCalledIDOffset;
+ ULONG ulCalledIDNameSize;
+ ULONG ulCalledIDNameOffset;
+ ULONG ulConnectedIDFlags;
+ ULONG ulConnectedIDSize;
+ ULONG ulConnectedIDOffset;
+ ULONG ulConnectedIDNameSize;
+ ULONG ulConnectedIDNameOffset;
+ ULONG ulRedirectionIDFlags;
+ ULONG ulRedirectionIDSize;
+ ULONG ulRedirectionIDOffset;
+ ULONG ulRedirectionIDNameSize;
+ ULONG ulRedirectionIDNameOffset;
+ ULONG ulRedirectingIDFlags;
+ ULONG ulRedirectingIDSize;
+ ULONG ulRedirectingIDOffset;
+ ULONG ulRedirectingIDNameSize;
+ ULONG ulRedirectingIDNameOffset;
+ ULONG ulAppNameSize;
+ ULONG ulAppNameOffset;
+ ULONG ulDisplayableAddressSize;
+ ULONG ulDisplayableAddressOffset;
+ ULONG ulCalledPartySize;
+ ULONG ulCalledPartyOffset;
+ ULONG ulCommentSize;
+ ULONG ulCommentOffset;
+ ULONG ulDisplaySize;
+ ULONG ulDisplayOffset;
+ ULONG ulUserUserInfoSize;
+ ULONG ulUserUserInfoOffset;
+ ULONG ulHighLevelCompSize;
+ ULONG ulHighLevelCompOffset;
+ ULONG ulLowLevelCompSize;
+ ULONG ulLowLevelCompOffset;
+ ULONG ulChargingInfoSize;
+ ULONG ulChargingInfoOffset;
+ ULONG ulTerminalModesSize;
+ ULONG ulTerminalModesOffset;
+ ULONG ulDevSpecificSize;
+ ULONG ulDevSpecificOffset;
+#if (NDIS_TAPI_CURRENT_VERSION >= 0x00020000)
+ ULONG ulCallTreatment;
+ ULONG ulCallDataSize;
+ ULONG ulCallDataOffset;
+ ULONG ulSendingFlowspecSize;
+ ULONG ulSendingFlowspecOffset;
+ ULONG ulReceivingFlowspecSize;
+ ULONG ulReceivingFlowspecOffset;
+#endif
+#if (NDIS_TAPI_CURRENT_VERSION >= 0x00030000)
+ ULONG ulCallerIDAddressType;
+ ULONG ulCalledIDAddressType;
+ ULONG ulConnectedIDAddressType;
+ ULONG ulRedirectionIDAddressType;
+ ULONG ulRedirectingIDAddressType;
+#endif
+} LINE_CALL_INFO, *PLINE_CALL_INFO;
+
+typedef struct _LINE_CALL_PARAMS {
+ ULONG ulTotalSize;
+ ULONG ulBearerMode;
+ ULONG ulMinRate;
+ ULONG ulMaxRate;
+ ULONG ulMediaMode;
+ ULONG ulCallParamFlags;
+ ULONG ulAddressMode;
+ ULONG ulAddressID;
+ LINE_DIAL_PARAMS DialParams;
+ ULONG ulOrigAddressSize;
+ ULONG ulOrigAddressOffset;
+ ULONG ulDisplayableAddressSize;
+ ULONG ulDisplayableAddressOffset;
+ ULONG ulCalledPartySize;
+ ULONG ulCalledPartyOffset;
+ ULONG ulCommentSize;
+ ULONG ulCommentOffset;
+ ULONG ulUserUserInfoSize;
+ ULONG ulUserUserInfoOffset;
+ ULONG ulHighLevelCompSize;
+ ULONG ulHighLevelCompOffset;
+ ULONG ulLowLevelCompSize;
+ ULONG ulLowLevelCompOffset;
+ ULONG ulDevSpecificSize;
+ ULONG ulDevSpecificOffset;
+#if (NDIS_TAPI_CURRENT_VERSION >= 0x00020000)
+ ULONG ulPredictiveAutoTransferStates;
+ ULONG ulTargetAddressSize;
+ ULONG ulTargetAddressOffset;
+ ULONG ulSendingFlowspecSize;
+ ULONG ulSendingFlowspecOffset;
+ ULONG ulReceivingFlowspecSize;
+ ULONG ulReceivingFlowspecOffset;
+ ULONG ulDeviceClassSize;
+ ULONG ulDeviceClassOffset;
+ ULONG ulDeviceConfigSize;
+ ULONG ulDeviceConfigOffset;
+ ULONG ulCallDataSize;
+ ULONG ulCallDataOffset;
+ ULONG ulNoAnswerTimeout;
+ ULONG ulCallingPartyIDSize;
+ ULONG ulCallingPartyIDOffset;
+#endif
+#if (NDIS_TAPI_CURRENT_VERSION >= 0x00030000)
+ ULONG ulAddressType;
+#endif
+} LINE_CALL_PARAMS, *PLINE_CALL_PARAMS;
+
+typedef struct _LINE_CALL_STATUS {
+ ULONG ulTotalSize;
+ ULONG ulNeededSize;
+ ULONG ulUsedSize;
+ ULONG ulCallState;
+ ULONG ulCallStateMode;
+ ULONG ulCallPrivilege;
+ ULONG ulCallFeatures;
+ ULONG ulDevSpecificSize;
+ ULONG ulDevSpecificOffset;
+} LINE_CALL_STATUS, *PLINE_CALL_STATUS;
+
+typedef struct _LINE_DEV_CAPS {
+ ULONG ulTotalSize;
+ ULONG ulNeededSize;
+ ULONG ulUsedSize;
+ ULONG ulProviderInfoSize;
+ ULONG ulProviderInfoOffset;
+ ULONG ulSwitchInfoSize;
+ ULONG ulSwitchInfoOffset;
+ ULONG ulPermanentLineID;
+ ULONG ulLineNameSize;
+ ULONG ulLineNameOffset;
+ ULONG ulStringFormat;
+ ULONG ulAddressModes;
+ ULONG ulNumAddresses;
+ ULONG ulBearerModes;
+ ULONG ulMaxRate;
+ ULONG ulMediaModes;
+ ULONG ulGenerateToneModes;
+ ULONG ulGenerateToneMaxNumFreq;
+ ULONG ulGenerateDigitModes;
+ ULONG ulMonitorToneMaxNumFreq;
+ ULONG ulMonitorToneMaxNumEntries;
+ ULONG ulMonitorDigitModes;
+ ULONG ulGatherDigitsMinTimeout;
+ ULONG ulGatherDigitsMaxTimeout;
+ ULONG ulMedCtlDigitMaxListSize;
+ ULONG ulMedCtlMediaMaxListSize;
+ ULONG ulMedCtlToneMaxListSize;
+ ULONG ulMedCtlCallStateMaxListSize;
+ ULONG ulDevCapFlags;
+ ULONG ulMaxNumActiveCalls;
+ ULONG ulAnswerMode;
+ ULONG ulRingModes;
+ ULONG ulLineStates;
+ ULONG ulUUIAcceptSize;
+ ULONG ulUUIAnswerSize;
+ ULONG ulUUIMakeCallSize;
+ ULONG ulUUIDropSize;
+ ULONG ulUUISendUserUserInfoSize;
+ ULONG ulUUICallInfoSize;
+ LINE_DIAL_PARAMS MinDialParams;
+ LINE_DIAL_PARAMS MaxDialParams;
+ LINE_DIAL_PARAMS DefaultDialParams;
+ ULONG ulNumTerminals;
+ ULONG ulTerminalCapsSize;
+ ULONG ulTerminalCapsOffset;
+ ULONG ulTerminalTextEntrySize;
+ ULONG ulTerminalTextSize;
+ ULONG ulTerminalTextOffset;
+ ULONG ulDevSpecificSize;
+ ULONG ulDevSpecificOffset;
+#if (NDIS_TAPI_CURRENT_VERSION >= 0x00010004)
+ ULONG ulLineFeatures;
+#endif
+#if (NDIS_TAPI_CURRENT_VERSION >= 0x00020000)
+ ULONG ulSettableDevStatus;
+ ULONG ulDeviceClassesSize;
+ ULONG ulDeviceClassesOffset;
+#endif
+#if (NDIS_TAPI_CURRENT_VERSION >= 0x00020002)
+ GUID PermanentLineGuid;
+#endif
+#if (NDIS_TAPI_CURRENT_VERSION >= 0x00030000)
+ ULONG ulAddressTypes;
+ GUID ProtocolGuid;
+ ULONG ulAvailableTracking;
+#endif
+} LINE_DEV_CAPS, *PLINE_DEV_CAPS;
+
+typedef struct _LINE_DEV_STATUS {
+ ULONG ulTotalSize;
+ ULONG ulNeededSize;
+ ULONG ulUsedSize;
+ ULONG ulNumOpens;
+ ULONG ulOpenMediaModes;
+ ULONG ulNumActiveCalls;
+ ULONG ulNumOnHoldCalls;
+ ULONG ulNumOnHoldPendCalls;
+ ULONG ulLineFeatures;
+ ULONG ulNumCallCompletions;
+ ULONG ulRingMode;
+ ULONG ulSignalLevel;
+ ULONG ulBatteryLevel;
+ ULONG ulRoamMode;
+ ULONG ulDevStatusFlags;
+ ULONG ulTerminalModesSize;
+ ULONG ulTerminalModesOffset;
+ ULONG ulDevSpecificSize;
+ ULONG ulDevSpecificOffset;
+} LINE_DEV_STATUS, *PLINE_DEV_STATUS;
+
+typedef struct _LINE_EXTENSION_ID {
+ ULONG ulExtensionID0;
+ ULONG ulExtensionID1;
+ ULONG ulExtensionID2;
+ ULONG ulExtensionID3;
+} LINE_EXTENSION_ID, *PLINE_EXTENSION_ID;
+
+typedef struct _VAR_STRING {
+ ULONG ulTotalSize;
+ ULONG ulNeededSize;
+ ULONG ulUsedSize;
+ ULONG ulStringFormat;
+ ULONG ulStringSize;
+ ULONG ulStringOffset;
+} VAR_STRING, *PVAR_STRING;
+
+typedef struct _NDIS_TAPI_ANSWER {
+ /*IN*/ ULONG ulRequestID;
+ /*IN*/ HDRV_CALL hdCall;
+ /*IN*/ ULONG ulUserUserInfoSize;
+ /*IN*/ UCHAR UserUserInfo[1];
+} NDIS_TAPI_ANSWER, *PNDIS_TAPI_ANSWER;
+
+typedef struct _NDIS_TAPI_CLOSE {
+ /*IN*/ ULONG ulRequestID;
+ /*IN*/ HDRV_LINE hdLine;
+} NDIS_TAPI_CLOSE, *PNDIS_TAPI_CLOSE;
+
+typedef struct _NDIS_TAPI_CLOSE_CALL {
+ /*IN*/ ULONG ulRequestID;
+ /*IN*/ HDRV_CALL hdCall;
+} NDIS_TAPI_CLOSE_CALL, *PNDIS_TAPI_CLOSE_CALL;
+
+typedef struct _NDIS_TAPI_CONDITIONAL_MEDIA_DETECTION {
+ /*IN*/ ULONG ulRequestID;
+ /*IN*/ HDRV_LINE hdLine;
+ /*IN*/ ULONG ulMediaModes;
+ /*IN*/ LINE_CALL_PARAMS LineCallParams;
+} NDIS_TAPI_CONDITIONAL_MEDIA_DETECTION, *PNDIS_TAPI_CONDITIONAL_MEDIA_DETECTION;
+
+typedef struct _NDIS_TAPI_DROP {
+ /*IN*/ ULONG ulRequestID;
+ /*IN*/ HDRV_CALL hdCall;
+ /*IN*/ ULONG ulUserUserInfoSize;
+ /*IN*/ UCHAR UserUserInfo[1];
+} NDIS_TAPI_DROP, *PNDIS_TAPI_DROP;
+
+typedef struct _NDIS_TAPI_PROVIDER_SHUTDOWN {
+ /*IN*/ ULONG ulRequestID;
+} NDIS_TAPI_PROVIDER_SHUTDOWN, *PNDIS_TAPI_PROVIDER_SHUTDOWN;
+
+typedef struct _NDIS_TAPI_SET_APP_SPECIFIC {
+ /*IN*/ ULONG ulRequestID;
+ /*IN*/ HDRV_CALL hdCall;
+ /*IN*/ ULONG ulAppSpecific;
+} NDIS_TAPI_SET_APP_SPECIFIC, *PNDIS_TAPI_SET_APP_SPECIFIC;
+
+typedef struct _NDIS_TAPI_SET_CALL_PARAMS {
+ /*IN*/ ULONG ulRequestID;
+ /*IN*/ HDRV_CALL hdCall;
+ /*IN*/ ULONG ulBearerMode;
+ /*IN*/ ULONG ulMinRate;
+ /*IN*/ ULONG ulMaxRate;
+ /*IN*/ BOOLEAN bSetLineDialParams;
+ /*IN*/ LINE_DIAL_PARAMS LineDialParams;
+} NDIS_TAPI_SET_CALL_PARAMS, *PNDIS_TAPI_SET_CALL_PARAMS;
+
+typedef struct _NDIS_TAPI_SET_DEFAULT_MEDIA_DETECTION {
+ /*IN*/ ULONG ulRequestID;
+ /*IN*/ HDRV_LINE hdLine;
+ /*IN*/ ULONG ulMediaModes;
+} NDIS_TAPI_SET_DEFAULT_MEDIA_DETECTION, *PNDIS_TAPI_SET_DEFAULT_MEDIA_DETECTION;
+
+typedef struct _NDIS_TAPI_SET_DEV_CONFIG {
+ /*IN*/ ULONG ulRequestID;
+ /*IN*/ ULONG ulDeviceID;
+ /*IN*/ ULONG ulDeviceClassSize;
+ /*IN*/ ULONG ulDeviceClassOffset;
+ /*IN*/ ULONG ulDeviceConfigSize;
+ /*IN*/ UCHAR DeviceConfig[1];
+} NDIS_TAPI_SET_DEV_CONFIG, *PNDIS_TAPI_SET_DEV_CONFIG;
+
+typedef struct _NDIS_TAPI_SET_MEDIA_MODE {
+ /*IN*/ ULONG ulRequestID;
+ /*IN*/ HDRV_CALL hdCall;
+ /*IN*/ ULONG ulMediaMode;
+} NDIS_TAPI_SET_MEDIA_MODE, *PNDIS_TAPI_SET_MEDIA_MODE;
+
+typedef struct _NDIS_TAPI_SET_STATUS_MESSAGES {
+ /*IN*/ ULONG ulRequestID;
+ /*IN*/ HDRV_LINE hdLine;
+ /*IN*/ ULONG ulLineStates;
+ /*IN*/ ULONG ulAddressStates;
+} NDIS_TAPI_SET_STATUS_MESSAGES, *PNDIS_TAPI_SET_STATUS_MESSAGES;
+
+typedef struct _NDIS_TAPI_ACCEPT {
+ /*IN*/ ULONG ulRequestID;
+ /*IN*/ HDRV_CALL hdCall;
+ /*IN*/ ULONG ulUserUserInfoSize;
+ /*IN*/ UCHAR UserUserInfo[1];
+} NDIS_TAPI_ACCEPT, *PNDIS_TAPI_ACCEPT;
+
+typedef struct _NDIS_TAPI_DIAL {
+ /*IN*/ ULONG ulRequestID;
+ /*IN*/ HDRV_CALL hdCall;
+ /*IN*/ ULONG ulDestAddressSize;
+ /*IN*/ CHAR szDestAddress[1];
+} NDIS_TAPI_DIAL, *PNDIS_TAPI_DIAL;
+
+typedef struct _NDIS_TAPI_EVENT {
+ /*IN*/ HTAPI_LINE htLine;
+ /*IN*/ HTAPI_CALL htCall;
+ /*IN*/ ULONG ulMsg;
+ /*IN*/ ULONG ulParam1;
+ /*IN*/ ULONG ulParam2;
+ /*IN*/ ULONG ulParam3;
+} NDIS_TAPI_EVENT, *PNDIS_TAPI_EVENT;
+
+typedef struct _NDIS_TAPI_OPEN {
+ /*IN*/ ULONG ulRequestID;
+ /*IN*/ ULONG ulDeviceID;
+ /*IN*/ HTAPI_LINE htLine;
+ /*OUT*/ HDRV_LINE hdLine;
+} NDIS_TAPI_OPEN, *PNDIS_TAPI_OPEN;
+
+typedef struct _NDIS_TAPI_SECURE_CALL {
+ /*IN*/ ULONG ulRequestID;
+ /*IN*/ HDRV_CALL hdCall;
+} NDIS_TAPI_SECURE_CALL, *PNDIS_TAPI_SECURE_CALL;
+
+typedef struct _NDIS_TAPI_SELECT_EXT_VERSION {
+ /*IN*/ ULONG ulRequestID;
+ /*IN*/ HDRV_LINE hdLine;
+ /*IN*/ ULONG ulExtVersion;
+} NDIS_TAPI_SELECT_EXT_VERSION, *PNDIS_TAPI_SELECT_EXT_VERSION;
+
+typedef struct _NDIS_TAPI_SEND_USER_USER_INFO {
+ /*IN*/ ULONG ulRequestID;
+ /*IN*/ HDRV_CALL hdCall;
+ /*IN*/ ULONG ulUserUserInfoSize;
+ /*IN*/ UCHAR UserUserInfo[1];
+} NDIS_TAPI_SEND_USER_USER_INFO, *PNDIS_TAPI_SEND_USER_USER_INFO;
+
+
+typedef struct _NDIS_TAPI_CONFIG_DIALOG {
+ /*IN*/ ULONG ulRequestID;
+ /*IN*/ ULONG ulDeviceID;
+ /*IN*/ ULONG ulDeviceClassSize;
+ /*IN*/ ULONG ulDeviceClassOffset;
+ /*IN*/ ULONG ulLibraryNameTotalSize;
+ /*OUT*/ ULONG ulLibraryNameNeededSize;
+ /*OUT*/ CHAR szLibraryName[1];
+} NDIS_TAPI_CONFIG_DIALOG, *PNDIS_TAPI_CONFIG_DIALOG;
+
+typedef struct _NDIS_TAPI_DEV_SPECIFIC {
+ /*IN*/ ULONG ulRequestID;
+ /*IN*/ HDRV_LINE hdLine;
+ /*IN*/ ULONG ulAddressID;
+ /*IN*/ HDRV_CALL hdCall;
+ /*IN OUT*/ ULONG ulParamsSize;
+ /*IN OUT*/ UCHAR Params[1];
+} NDIS_TAPI_DEV_SPECIFIC, *PNDIS_TAPI_DEV_SPECIFIC;
+
+typedef struct _NDIS_TAPI_GET_ADDRESS_CAPS {
+ /*IN*/ ULONG ulRequestID;
+ /*IN*/ ULONG ulDeviceID;
+ /*IN*/ ULONG ulAddressID;
+ /*IN*/ ULONG ulExtVersion;
+ /*OUT*/ LINE_ADDRESS_CAPS LineAddressCaps;
+} NDIS_TAPI_GET_ADDRESS_CAPS, *PNDIS_TAPI_GET_ADDRESS_CAPS;
+
+typedef struct _NDIS_TAPI_GET_ADDRESS_ID {
+ /*IN*/ ULONG ulRequestID;
+ /*IN*/ HDRV_LINE hdLine;
+ /*OUT*/ ULONG ulAddressID;
+ /*IN*/ ULONG ulAddressMode;
+ /*IN*/ ULONG ulAddressSize;
+ /*IN*/ CHAR szAddress[1];
+} NDIS_TAPI_GET_ADDRESS_ID, *PNDIS_TAPI_GET_ADDRESS_ID;
+
+typedef struct _NDIS_TAPI_GET_ADDRESS_STATUS {
+ /*IN*/ ULONG ulRequestID;
+ /*IN*/ HDRV_LINE hdLine;
+ /*IN*/ ULONG ulAddressID;
+ /*OUT*/ LINE_ADDRESS_STATUS LineAddressStatus;
+} NDIS_TAPI_GET_ADDRESS_STATUS, *PNDIS_TAPI_GET_ADDRESS_STATUS;
+
+typedef struct _NDIS_TAPI_GET_CALL_ADDRESS_ID {
+ /*IN*/ ULONG ulRequestID;
+ /*IN*/ HDRV_CALL hdCall;
+ /*OUT*/ ULONG ulAddressID;
+} NDIS_TAPI_GET_CALL_ADDRESS_ID, *PNDIS_TAPI_GET_CALL_ADDRESS_ID;
+
+typedef struct _NDIS_TAPI_GET_CALL_INFO {
+ ULONG ulRequestID;
+ /*IN*/ HDRV_CALL hdCall;
+ /*OUT*/ LINE_CALL_INFO LineCallInfo;
+} NDIS_TAPI_GET_CALL_INFO, *PNDIS_TAPI_GET_CALL_INFO;
+
+typedef struct _NDIS_TAPI_GET_CALL_STATUS {
+ /*IN*/ ULONG ulRequestID;
+ /*IN*/ HDRV_CALL hdCall;
+ /*OUT*/ LINE_CALL_STATUS LineCallStatus;
+} NDIS_TAPI_GET_CALL_STATUS, *PNDIS_TAPI_GET_CALL_STATUS;
+
+typedef struct _NDIS_TAPI_GET_DEV_CAPS {
+ /*IN*/ ULONG ulRequestID;
+ /*IN*/ ULONG ulDeviceID;
+ /*IN*/ ULONG ulExtVersion;
+ /*OUT*/ LINE_DEV_CAPS LineDevCaps;
+} NDIS_TAPI_GET_DEV_CAPS, *PNDIS_TAPI_GET_DEV_CAPS;
+
+typedef struct _NDIS_TAPI_GET_DEV_CONFIG {
+ /*IN*/ ULONG ulRequestID;
+ /*IN*/ ULONG ulDeviceID;
+ /*IN*/ ULONG ulDeviceClassSize;
+ /*IN*/ ULONG ulDeviceClassOffset;
+ /*OUT*/ VAR_STRING DeviceConfig;
+} NDIS_TAPI_GET_DEV_CONFIG, *PNDIS_TAPI_GET_DEV_CONFIG;
+
+typedef struct _NDIS_TAPI_GET_EXTENSION_ID {
+ /*IN*/ ULONG ulRequestID;
+ /*IN*/ ULONG ulDeviceID;
+ /*OUT*/ LINE_EXTENSION_ID LineExtensionID;
+} NDIS_TAPI_GET_EXTENSION_ID, *PNDIS_TAPI_GET_EXTENSION_ID;
+
+typedef struct _NDIS_TAPI_GET_ID {
+ /*IN*/ ULONG ulRequestID;
+ /*IN*/ HDRV_LINE hdLine;
+ /*IN*/ ULONG ulAddressID;
+ /*IN*/ HDRV_CALL hdCall;
+ /*IN*/ ULONG ulSelect;
+ /*IN*/ ULONG ulDeviceClassSize;
+ /*IN*/ ULONG ulDeviceClassOffset;
+ /*OUT*/ VAR_STRING DeviceID;
+} NDIS_TAPI_GET_ID, *PNDIS_TAPI_GET_ID;
+
+typedef struct _NDIS_TAPI_GET_LINE_DEV_STATUS {
+ /*IN*/ ULONG ulRequestID;
+ /*IN*/ HDRV_LINE hdLine;
+ /*OUT*/ LINE_DEV_STATUS LineDevStatus;
+} NDIS_TAPI_GET_LINE_DEV_STATUS, *PNDIS_TAPI_GET_LINE_DEV_STATUS;
+
+typedef struct _NDIS_TAPI_MAKE_CALL {
+ /*IN*/ ULONG ulRequestID;
+ /*IN*/ HDRV_LINE hdLine;
+ /*IN*/ HTAPI_CALL htCall;
+ /*OUT*/ HDRV_CALL hdCall;
+ /*IN*/ ULONG ulDestAddressSize;
+ /*IN*/ ULONG ulDestAddressOffset;
+ /*IN*/ BOOLEAN bUseDefaultLineCallParams;
+ /*IN*/ LINE_CALL_PARAMS LineCallParams;
+} NDIS_TAPI_MAKE_CALL, *PNDIS_TAPI_MAKE_CALL;
+
+typedef struct _NDIS_TAPI_NEGOTIATE_EXT_VERSION {
+ /*IN*/ ULONG ulRequestID;
+ /*IN*/ ULONG ulDeviceID;
+ /*IN*/ ULONG ulLowVersion;
+ /*IN*/ ULONG ulHighVersion;
+ /*OUT*/ ULONG ulExtVersion;
+} NDIS_TAPI_NEGOTIATE_EXT_VERSION, *PNDIS_TAPI_NEGOTIATE_EXT_VERSION;
+
+typedef struct _NDIS_TAPI_PROVIDER_INITIALIZE {
+ /*IN*/ ULONG ulRequestID;
+ /*IN*/ ULONG ulDeviceIDBase;
+ /*OUT*/ ULONG ulNumLineDevs;
+ /*OUT*/ ULONG ulProviderID;
+} NDIS_TAPI_PROVIDER_INITIALIZE, *PNDIS_TAPI_PROVIDER_INITIALIZE;
+
+
+#define CO_TAPI_VERSION NDIS_TAPI_CURRENT_VERSION
+
+#define CO_TAPI_FLAG_OUTGOING_CALL 0x00000001
+#define CO_TAPI_FLAG_INCOMING_CALL 0x00000002
+#define CO_TAPI_FLAG_USE_DEFAULT_CALLPARAMS 0x00000004
+
+#define AF_TAPI_SAP_TYPE 0x00008000
+
+typedef struct _CO_TAPI_ADDRESS_CAPS {
+ /*IN*/ ULONG ulLineID;
+ /*IN*/ ULONG ulAddressID;
+ /*OUT*/ ULONG ulFlags;
+ /*OUT*/ LINE_ADDRESS_CAPS LineAddressCaps;
+} CO_TAPI_ADDRESS_CAPS, *PCO_TAPI_ADDRESS_CAPS;
+
+/* CO_TAPI_CM_CAPS.ulFlags constants */
+#define CO_TAPI_FLAG_PER_LINE_CAPS 0x00000001
+
+typedef struct _CO_TAPI_CM_CAPS {
+ /*OUT*/ ULONG ulCoTapiVersion;
+ /*OUT*/ ULONG ulNumLines;
+ /*OUT*/ ULONG ulFlags;
+} CO_TAPI_CM_CAPS, *PCO_TAPI_CM_CAPS;
+
+typedef struct _CO_TAPI_CALL_DIAGNOSTICS {
+ /*OUT*/ ULONG ulOrigin;
+ /*OUT*/ ULONG ulReason;
+ /*OUT*/ NDIS_VAR_DATA_DESC DiagInfo;
+} CO_TAPI_CALL_DIAGNOSTICS, *PCO_TAPI_CALL_DIAGNOSTICS;
+
+
+/* CO_TAPI_LINE_CAPS.ulFlags constants */
+#define CO_TAPI_FLAG_PER_ADDRESS_CAPS 0x00000001
+
+typedef struct _CO_TAPI_LINE_CAPS {
+ /*IN*/ ULONG ulLineID;
+ /*OUT*/ ULONG ulFlags;
+ /*OUT*/ LINE_DEV_CAPS LineDevCaps;
+} CO_TAPI_LINE_CAPS, *PCO_TAPI_LINE_CAPS;
+
+typedef struct _CO_TAPI_TRANSLATE_NDIS_CALLPARAMS {
+ /*IN*/ ULONG ulFlags;
+ /*IN*/ NDIS_VAR_DATA_DESC NdisCallParams;
+ /*OUT*/ NDIS_VAR_DATA_DESC LineCallInfo;
+} CO_TAPI_TRANSLATE_NDIS_CALLPARAMS, *PCO_TAPI_TRANSLATE_NDIS_CALLPARAMS;
+
+typedef struct _CO_TAPI_TRANSLATE_TAPI_CALLPARAMS {
+ /*IN*/ ULONG ulLineID;
+ /*IN*/ ULONG ulAddressID;
+ /*IN*/ ULONG ulFlags;
+ /*IN*/ NDIS_VAR_DATA_DESC DestAddress;
+ /*IN*/ NDIS_VAR_DATA_DESC LineCallParams;
+ /*OUT*/ NDIS_VAR_DATA_DESC NdisCallParams;
+} CO_TAPI_TRANSLATE_TAPI_CALLPARAMS, *PCO_TAPI_TRANSLATE_TAPI_CALLPARAMS;
+
+/* CO_TAPI_TRANSLATE_SAP.ulLineID constants */
+#define CO_TAPI_LINE_ID_UNSPECIFIED 0xFFFFFFFF
+
+/* CO_TAPI_TRANSLATE_SAP.ulAddressID constants */
+#define CO_TAPI_ADDRESS_ID_UNSPECIFIED 0xFFFFFFFF
+
+typedef struct _CO_TAPI_TRANSLATE_SAP {
+ /*IN*/ ULONG ulLineID;
+ /*IN*/ ULONG ulAddressID;
+ /*IN*/ ULONG ulMediaModes;
+ /*IN*/ ULONG Reserved;
+ /*OUT*/ ULONG NumberOfSaps;
+ /*OUT*/ NDIS_VAR_DATA_DESC NdisSapParams[1];
+} CO_AF_TAPI_SAP, *PCO_AF_TAPI_SAP;
+
+typedef struct _CO_AF_TAPI_INCOMING_CALL_PARAMETERS {
+ /*IN*/ ULONG ulLineID;
+ /*IN*/ ULONG ulAddressID;
+ /*IN*/ ULONG ulFlags;
+ /*IN*/ NDIS_VAR_DATA_DESC LineCallInfo;
+} CO_AF_TAPI_INCOMING_CALL_PARAMETERS, *PCO_AF_TAPI_INCOMING_CALL_PARAMETERS;
+
+typedef struct _CO_AF_TAPI_MAKE_CALL_PARAMETERS {
+ /*IN*/ ULONG ulLineID;
+ /*IN*/ ULONG ulAddressID;
+ /*IN*/ ULONG ulFlags;
+ /*IN*/ NDIS_VAR_DATA_DESC DestAddress;
+ /*IN*/ NDIS_VAR_DATA_DESC LineCallParams;
+} CO_AF_TAPI_MAKE_CALL_PARAMETERS, *PCO_AF_TAPI_MAKE_CALL_PARAMETERS;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __NDISTAPI_H */
diff --git a/tcc/include/winapi/ddk/ndiswan.h b/tcc/include/winapi/ddk/ndiswan.h
new file mode 100644
index 0000000..22ea978
--- /dev/null
+++ b/tcc/include/winapi/ddk/ndiswan.h
@@ -0,0 +1,251 @@
+/*
+ * ndiswan.h
+ *
+ * Definitions for NDIS WAN miniport drivers
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __NDISWAN_H
+#define __NDISWAN_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ndis.h"
+
+#define NDIS_USE_WAN_WRAPPER 0x00000001
+
+#define NDIS_STATUS_TAPI_INDICATION ((NDIS_STATUS)0x40010080L)
+
+/* NDIS_WAN_INFO.FramingBits constants */
+#define RAS_FRAMING 0x00000001
+#define RAS_COMPRESSION 0x00000002
+
+#define ARAP_V1_FRAMING 0x00000004
+#define ARAP_V2_FRAMING 0x00000008
+#define ARAP_FRAMING (ARAP_V1_FRAMING | ARAP_V2_FRAMING)
+
+#define PPP_MULTILINK_FRAMING 0x00000010
+#define PPP_SHORT_SEQUENCE_HDR_FORMAT 0x00000020
+#define PPP_MC_MULTILINK_FRAMING 0x00000040
+
+#define PPP_FRAMING 0x00000100
+#define PPP_COMPRESS_ADDRESS_CONTROL 0x00000200
+#define PPP_COMPRESS_PROTOCOL_FIELD 0x00000400
+#define PPP_ACCM_SUPPORTED 0x00000800
+
+#define SLIP_FRAMING 0x00001000
+#define SLIP_VJ_COMPRESSION 0x00002000
+#define SLIP_VJ_AUTODETECT 0x00004000
+
+#define MEDIA_NRZ_ENCODING 0x00010000
+#define MEDIA_NRZI_ENCODING 0x00020000
+#define MEDIA_NLPID 0x00040000
+
+#define RFC_1356_FRAMING 0x00100000
+#define RFC_1483_FRAMING 0x00200000
+#define RFC_1490_FRAMING 0x00400000
+#define LLC_ENCAPSULATION 0x00800000
+
+#define SHIVA_FRAMING 0x01000000
+#define NBF_PRESERVE_MAC_ADDRESS 0x01000000
+
+#define PASS_THROUGH_MODE 0x10000000
+#define RAW_PASS_THROUGH_MODE 0x20000000
+
+#define TAPI_PROVIDER 0x80000000
+
+typedef struct _NDIS_WAN_INFO {
+ /*OUT*/ ULONG MaxFrameSize;
+ /*OUT*/ ULONG MaxTransmit;
+ /*OUT*/ ULONG HeaderPadding;
+ /*OUT*/ ULONG TailPadding;
+ /*OUT*/ ULONG Endpoints;
+ /*OUT*/ UINT MemoryFlags;
+ /*OUT*/ NDIS_PHYSICAL_ADDRESS HighestAcceptableAddress;
+ /*OUT*/ ULONG FramingBits;
+ /*OUT*/ ULONG DesiredACCM;
+} NDIS_WAN_INFO, *PNDIS_WAN_INFO;
+
+typedef struct _NDIS_WAN_GET_LINK_INFO {
+ /*IN*/ NDIS_HANDLE NdisLinkHandle;
+ /*OUT*/ ULONG MaxSendFrameSize;
+ /*OUT*/ ULONG MaxRecvFrameSize;
+ /*OUT*/ ULONG HeaderPadding;
+ /*OUT*/ ULONG TailPadding;
+ /*OUT*/ ULONG SendFramingBits;
+ /*OUT*/ ULONG RecvFramingBits;
+ /*OUT*/ ULONG SendCompressionBits;
+ /*OUT*/ ULONG RecvCompressionBits;
+ /*OUT*/ ULONG SendACCM;
+ /*OUT*/ ULONG RecvACCM;
+} NDIS_WAN_GET_LINK_INFO, *PNDIS_WAN_GET_LINK_INFO;
+
+typedef struct _NDIS_WAN_SET_LINK_INFO {
+ /*IN*/ NDIS_HANDLE NdisLinkHandle;
+ /*IN*/ ULONG MaxSendFrameSize;
+ /*IN*/ ULONG MaxRecvFrameSize;
+ /*IN*/ ULONG HeaderPadding;
+ /*IN*/ ULONG TailPadding;
+ /*IN*/ ULONG SendFramingBits;
+ /*IN*/ ULONG RecvFramingBits;
+ /*IN*/ ULONG SendCompressionBits;
+ /*IN*/ ULONG RecvCompressionBits;
+ /*IN*/ ULONG SendACCM;
+ /*IN*/ ULONG RecvACCM;
+} NDIS_WAN_SET_LINK_INFO, *PNDIS_WAN_SET_LINK_INFO;
+
+/* NDIS_WAN_COMPRESS_INFO.MSCompType constants */
+#define NDISWAN_COMPRESSION 0x00000001
+#define NDISWAN_ENCRYPTION 0x00000010
+#define NDISWAN_40_ENCRYPTION 0x00000020
+#define NDISWAN_128_ENCRYPTION 0x00000040
+#define NDISWAN_56_ENCRYPTION 0x00000080
+#define NDISWAN_HISTORY_LESS 0x01000000
+
+/* NDIS_WAN_COMPRESS_INFO.CompType constants */
+#define COMPTYPE_OUI 0
+#define COMPTYPE_NT31RAS 254
+#define COMPTYPE_NONE 255
+
+typedef struct _NDIS_WAN_COMPRESS_INFO {
+ UCHAR SessionKey[8];
+ ULONG MSCompType;
+ UCHAR CompType;
+ USHORT CompLength;
+ _ANONYMOUS_UNION union {
+ struct {
+ UCHAR CompOUI[3];
+ UCHAR CompSubType;
+ UCHAR CompValues[32];
+ } Proprietary;
+ struct {
+ UCHAR CompValues[32];
+ } Public;
+ } DUMMYUNIONNAME;
+} NDIS_WAN_COMPRESS_INFO;
+
+typedef NDIS_WAN_COMPRESS_INFO *PNDIS_WAN_COMPRESS_INFO;
+
+typedef struct _NDIS_WAN_GET_COMP_INFO {
+ /*IN*/ NDIS_HANDLE NdisLinkHandle;
+ /*OUT*/ NDIS_WAN_COMPRESS_INFO SendCapabilities;
+ /*OUT*/ NDIS_WAN_COMPRESS_INFO RecvCapabilities;
+} NDIS_WAN_GET_COMP_INFO, *PNDIS_WAN_GET_COMP_INFO;
+
+typedef struct _NDIS_WAN_SET_COMP_INFO {
+ /*IN*/ NDIS_HANDLE NdisLinkHandle;
+ /*IN*/ NDIS_WAN_COMPRESS_INFO SendCapabilities;
+ /*IN*/ NDIS_WAN_COMPRESS_INFO RecvCapabilities;
+} NDIS_WAN_SET_COMP_INFO, *PNDIS_WAN_SET_COMP_INFO;
+
+typedef struct _NDIS_WAN_GET_STATS_INFO {
+ /*IN*/ NDIS_HANDLE NdisLinkHandle;
+ /*OUT*/ ULONG BytesSent;
+ /*OUT*/ ULONG BytesRcvd;
+ /*OUT*/ ULONG FramesSent;
+ /*OUT*/ ULONG FramesRcvd;
+ /*OUT*/ ULONG CRCErrors;
+ /*OUT*/ ULONG TimeoutErrors;
+ /*OUT*/ ULONG AlignmentErrors;
+ /*OUT*/ ULONG SerialOverrunErrors;
+ /*OUT*/ ULONG FramingErrors;
+ /*OUT*/ ULONG BufferOverrunErrors;
+ /*OUT*/ ULONG BytesTransmittedUncompressed;
+ /*OUT*/ ULONG BytesReceivedUncompressed;
+ /*OUT*/ ULONG BytesTransmittedCompressed;
+ /*OUT*/ ULONG BytesReceivedCompressed;
+} NDIS_WAN_GET_STATS_INFO, *PNDIS_WAN_GET_STATS_INFO;
+
+#define NdisMWanInitializeWrapper(NdisWrapperHandle, \
+ SystemSpecific1, \
+ SystemSpecific2, \
+ SystemSpecific3) \
+{ \
+ NdisMInitializeWrapper(NdisWrapperHandle, \
+ SystemSpecific1, \
+ SystemSpecific2, \
+ SystemSpecific3); \
+}
+
+typedef struct _NDIS_WAN_CO_INFO {
+ /*OUT*/ ULONG MaxFrameSize;
+ /*OUT*/ ULONG MaxSendWindow;
+ /*OUT*/ ULONG FramingBits;
+ /*OUT*/ ULONG DesiredACCM;
+} NDIS_WAN_CO_INFO, *PNDIS_WAN_CO_INFO;
+
+typedef struct _NDIS_WAN_CO_GET_LINK_INFO {
+ /*OUT*/ ULONG MaxSendFrameSize;
+ /*OUT*/ ULONG MaxRecvFrameSize;
+ /*OUT*/ ULONG SendFramingBits;
+ /*OUT*/ ULONG RecvFramingBits;
+ /*OUT*/ ULONG SendCompressionBits;
+ /*OUT*/ ULONG RecvCompressionBits;
+ /*OUT*/ ULONG SendACCM;
+ /*OUT*/ ULONG RecvACCM;
+} NDIS_WAN_CO_GET_LINK_INFO, *PNDIS_WAN_CO_GET_LINK_INFO;
+
+typedef struct _NDIS_WAN_CO_SET_LINK_INFO {
+ /*IN*/ ULONG MaxSendFrameSize;
+ /*IN*/ ULONG MaxRecvFrameSize;
+ /*IN*/ ULONG SendFramingBits;
+ /*IN*/ ULONG RecvFramingBits;
+ /*IN*/ ULONG SendCompressionBits;
+ /*IN*/ ULONG RecvCompressionBits;
+ /*IN*/ ULONG SendACCM;
+ /*IN*/ ULONG RecvACCM;
+} NDIS_WAN_CO_SET_LINK_INFO, *PNDIS_WAN_CO_SET_LINK_INFO;
+
+typedef struct _NDIS_WAN_CO_GET_COMP_INFO {
+ /*OUT*/ NDIS_WAN_COMPRESS_INFO SendCapabilities;
+ /*OUT*/ NDIS_WAN_COMPRESS_INFO RecvCapabilities;
+} NDIS_WAN_CO_GET_COMP_INFO, *PNDIS_WAN_CO_GET_COMP_INFO;
+
+typedef struct _NDIS_WAN_CO_SET_COMP_INFO {
+ /*IN*/ NDIS_WAN_COMPRESS_INFO SendCapabilities;
+ /*IN*/ NDIS_WAN_COMPRESS_INFO RecvCapabilities;
+} NDIS_WAN_CO_SET_COMP_INFO, *PNDIS_WAN_CO_SET_COMP_INFO;
+
+typedef struct _NDIS_WAN_CO_GET_STATS_INFO {
+ /*OUT*/ ULONG BytesSent;
+ /*OUT*/ ULONG BytesRcvd;
+ /*OUT*/ ULONG FramesSent;
+ /*OUT*/ ULONG FramesRcvd;
+ /*OUT*/ ULONG CRCErrors;
+ /*OUT*/ ULONG TimeoutErrors;
+ /*OUT*/ ULONG AlignmentErrors;
+ /*OUT*/ ULONG SerialOverrunErrors;
+ /*OUT*/ ULONG FramingErrors;
+ /*OUT*/ ULONG BufferOverrunErrors;
+ /*OUT*/ ULONG BytesTransmittedUncompressed;
+ /*OUT*/ ULONG BytesReceivedUncompressed;
+ /*OUT*/ ULONG BytesTransmittedCompressed;
+ /*OUT*/ ULONG BytesReceivedCompressed;
+} NDIS_WAN_CO_GET_STATS_INFO, *PNDIS_WAN_CO_GET_STATS_INFO;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __NDISWAN_H */
diff --git a/tcc/include/winapi/ddk/netevent.h b/tcc/include/winapi/ddk/netevent.h
new file mode 100644
index 0000000..0cf66e0
--- /dev/null
+++ b/tcc/include/winapi/ddk/netevent.h
@@ -0,0 +1,42 @@
+/*
+ * netevent.h
+ *
+ * Network events
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __NETEVENT_H
+#define __NETEVENT_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#define EVENT_TRANSPORT_REGISTER_FAILED 0xC000232CL
+
+#define EVENT_TRANSPORT_ADAPTER_NOT_FOUND 0xC000232EL
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __NETEVENT_H */
diff --git a/tcc/include/winapi/ddk/netpnp.h b/tcc/include/winapi/ddk/netpnp.h
new file mode 100644
index 0000000..09ea55e
--- /dev/null
+++ b/tcc/include/winapi/ddk/netpnp.h
@@ -0,0 +1,69 @@
+/*
+ * netpnp.h
+ *
+ * Network Plug and Play event support
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __NETPNP_H
+#define __NETPNP_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum _NET_PNP_EVENT_CODE {
+ NetEventSetPower,
+ NetEventQueryPower,
+ NetEventQueryRemoveDevice,
+ NetEventCancelRemoveDevice,
+ NetEventReconfigure,
+ NetEventBindList,
+ NetEventBindsComplete,
+ NetEventPnPCapabilities,
+ NetEventMaximum
+} NET_PNP_EVENT_CODE, *PNET_PNP_EVENT_CODE;
+
+typedef struct _NET_PNP_EVENT {
+ NET_PNP_EVENT_CODE NetEvent;
+ PVOID Buffer;
+ ULONG BufferLength;
+ ULONG_PTR NdisReserved[4];
+ ULONG_PTR TransportReserved[4];
+ ULONG_PTR TdiReserved[4];
+ ULONG_PTR TdiClientReserved[4];
+} NET_PNP_EVENT, *PNET_PNP_EVENT;
+
+typedef enum _NET_DEVICE_POWER_STATE {
+ NetDeviceStateUnspecified,
+ NetDeviceStateD0,
+ NetDeviceStateD1,
+ NetDeviceStateD2,
+ NetDeviceStateD3,
+ NetDeviceStateMaximum
+} NET_DEVICE_POWER_STATE, *PNET_DEVICE_POWER_STATE;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __NETPNP_H */
diff --git a/tcc/include/winapi/ddk/newdev.h b/tcc/include/winapi/ddk/newdev.h
new file mode 100644
index 0000000..9b4b6d1
--- /dev/null
+++ b/tcc/include/winapi/ddk/newdev.h
@@ -0,0 +1,66 @@
+/*
+ * newdev.h
+ *
+ * Driver installation DLL interface
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __NEWDEV_H
+#define __NEWDEV_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* UpdateDriverForPlugAndPlayDevices.InstallFlags constants */
+#define INSTALLFLAG_FORCE 0x00000001
+#define INSTALLFLAG_READONLY 0x00000002
+#define INSTALLFLAG_NONINTERACTIVE 0x00000004
+#define INSTALLFLAG_BITS 0x00000007
+
+BOOL WINAPI
+UpdateDriverForPlugAndPlayDevicesA(
+ HWND hwndParent,
+ LPCSTR HardwareId,
+ LPCSTR FullInfPath,
+ DWORD InstallFlags,
+ PBOOL bRebootRequired /*OPTIONAL*/);
+
+BOOL WINAPI
+UpdateDriverForPlugAndPlayDevicesW(
+ HWND hwndParent,
+ LPCWSTR HardwareId,
+ LPCWSTR FullInfPath,
+ DWORD InstallFlags,
+ PBOOL bRebootRequired /*OPTIONAL*/);
+
+#ifdef UNICODE
+#define UpdateDriverForPlugAndPlayDevices UpdateDriverForPlugAndPlayDevicesW
+#else
+#define UpdateDriverForPlugAndPlayDevices UpdateDriverForPlugAndPlayDevicesA
+#endif /* UNICODE */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __NEWDEV_H */
diff --git a/tcc/include/winapi/ddk/ntapi.h b/tcc/include/winapi/ddk/ntapi.h
new file mode 100644
index 0000000..cab4d52
--- /dev/null
+++ b/tcc/include/winapi/ddk/ntapi.h
@@ -0,0 +1,4073 @@
+/*
+ * ntapi.h
+ *
+ * Windows NT Native API
+ *
+ * Most structures in this file is obtained from Windows NT/2000 Native API
+ * Reference by Gary Nebbett, ISBN 1578701996.
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __NTAPI_H
+#define __NTAPI_H
+
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stdarg.h>
+#include <winbase.h>
+#include "ntddk.h"
+#include "ntpoapi.h"
+
+#pragma pack(push,4)
+
+typedef struct _PEB *PPEB;
+
+/* FIXME: Unknown definitions */
+typedef PVOID POBJECT_TYPE_LIST;
+typedef PVOID PEXECUTION_STATE;
+typedef PVOID PLANGID;
+
+#ifndef NtCurrentProcess
+#define NtCurrentProcess() ((HANDLE)0xFFFFFFFF)
+#endif /* NtCurrentProcess */
+#ifndef NtCurrentThread
+#define NtCurrentThread() ((HANDLE)0xFFFFFFFE)
+#endif /* NtCurrentThread */
+
+/* System information and control */
+
+typedef enum _SYSTEM_INFORMATION_CLASS {
+ SystemInformationClassMin = 0,
+ SystemBasicInformation = 0,
+ SystemProcessorInformation = 1,
+ SystemPerformanceInformation = 2,
+ SystemTimeOfDayInformation = 3,
+ SystemPathInformation = 4,
+ SystemNotImplemented1 = 4,
+ SystemProcessInformation = 5,
+ SystemProcessesAndThreadsInformation = 5,
+ SystemCallCountInfoInformation = 6,
+ SystemCallCounts = 6,
+ SystemDeviceInformation = 7,
+ SystemConfigurationInformation = 7,
+ SystemProcessorPerformanceInformation = 8,
+ SystemProcessorTimes = 8,
+ SystemFlagsInformation = 9,
+ SystemGlobalFlag = 9,
+ SystemCallTimeInformation = 10,
+ SystemNotImplemented2 = 10,
+ SystemModuleInformation = 11,
+ SystemLocksInformation = 12,
+ SystemLockInformation = 12,
+ SystemStackTraceInformation = 13,
+ SystemNotImplemented3 = 13,
+ SystemPagedPoolInformation = 14,
+ SystemNotImplemented4 = 14,
+ SystemNonPagedPoolInformation = 15,
+ SystemNotImplemented5 = 15,
+ SystemHandleInformation = 16,
+ SystemObjectInformation = 17,
+ SystemPageFileInformation = 18,
+ SystemPagefileInformation = 18,
+ SystemVdmInstemulInformation = 19,
+ SystemInstructionEmulationCounts = 19,
+ SystemVdmBopInformation = 20,
+ SystemInvalidInfoClass1 = 20,
+ SystemFileCacheInformation = 21,
+ SystemCacheInformation = 21,
+ SystemPoolTagInformation = 22,
+ SystemInterruptInformation = 23,
+ SystemProcessorStatistics = 23,
+ SystemDpcBehaviourInformation = 24,
+ SystemDpcInformation = 24,
+ SystemFullMemoryInformation = 25,
+ SystemNotImplemented6 = 25,
+ SystemLoadImage = 26,
+ SystemUnloadImage = 27,
+ SystemTimeAdjustmentInformation = 28,
+ SystemTimeAdjustment = 28,
+ SystemSummaryMemoryInformation = 29,
+ SystemNotImplemented7 = 29,
+ SystemNextEventIdInformation = 30,
+ SystemNotImplemented8 = 30,
+ SystemEventIdsInformation = 31,
+ SystemNotImplemented9 = 31,
+ SystemCrashDumpInformation = 32,
+ SystemExceptionInformation = 33,
+ SystemCrashDumpStateInformation = 34,
+ SystemKernelDebuggerInformation = 35,
+ SystemContextSwitchInformation = 36,
+ SystemRegistryQuotaInformation = 37,
+ SystemLoadAndCallImage = 38,
+ SystemPrioritySeparation = 39,
+ SystemPlugPlayBusInformation = 40,
+ SystemNotImplemented10 = 40,
+ SystemDockInformation = 41,
+ SystemNotImplemented11 = 41,
+ /* SystemPowerInformation = 42, Conflicts with POWER_INFORMATION_LEVEL 1 */
+ SystemInvalidInfoClass2 = 42,
+ SystemProcessorSpeedInformation = 43,
+ SystemInvalidInfoClass3 = 43,
+ SystemCurrentTimeZoneInformation = 44,
+ SystemTimeZoneInformation = 44,
+ SystemLookasideInformation = 45,
+ SystemSetTimeSlipEvent = 46,
+ SystemCreateSession = 47,
+ SystemDeleteSession = 48,
+ SystemInvalidInfoClass4 = 49,
+ SystemRangeStartInformation = 50,
+ SystemVerifierInformation = 51,
+ SystemAddVerifier = 52,
+ SystemSessionProcessesInformation = 53,
+ SystemInformationClassMax
+} SYSTEM_INFORMATION_CLASS;
+
+typedef struct _SYSTEM_BASIC_INFORMATION {
+ ULONG Unknown;
+ ULONG MaximumIncrement;
+ ULONG PhysicalPageSize;
+ ULONG NumberOfPhysicalPages;
+ ULONG LowestPhysicalPage;
+ ULONG HighestPhysicalPage;
+ ULONG AllocationGranularity;
+ ULONG LowestUserAddress;
+ ULONG HighestUserAddress;
+ ULONG ActiveProcessors;
+ UCHAR NumberProcessors;
+} SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION;
+
+typedef struct _SYSTEM_PROCESSOR_INFORMATION {
+ USHORT ProcessorArchitecture;
+ USHORT ProcessorLevel;
+ USHORT ProcessorRevision;
+ USHORT Unknown;
+ ULONG FeatureBits;
+} SYSTEM_PROCESSOR_INFORMATION, *PSYSTEM_PROCESSOR_INFORMATION;
+
+typedef struct _SYSTEM_PERFORMANCE_INFORMATION {
+ LARGE_INTEGER IdleTime;
+ LARGE_INTEGER ReadTransferCount;
+ LARGE_INTEGER WriteTransferCount;
+ LARGE_INTEGER OtherTransferCount;
+ ULONG ReadOperationCount;
+ ULONG WriteOperationCount;
+ ULONG OtherOperationCount;
+ ULONG AvailablePages;
+ ULONG TotalCommittedPages;
+ ULONG TotalCommitLimit;
+ ULONG PeakCommitment;
+ ULONG PageFaults;
+ ULONG WriteCopyFaults;
+ ULONG TransitionFaults;
+ ULONG CacheTransitionFaults;
+ ULONG DemandZeroFaults;
+ ULONG PagesRead;
+ ULONG PageReadIos;
+ ULONG CacheReads;
+ ULONG CacheIos;
+ ULONG PagefilePagesWritten;
+ ULONG PagefilePageWriteIos;
+ ULONG MappedFilePagesWritten;
+ ULONG MappedFilePageWriteIos;
+ ULONG PagedPoolUsage;
+ ULONG NonPagedPoolUsage;
+ ULONG PagedPoolAllocs;
+ ULONG PagedPoolFrees;
+ ULONG NonPagedPoolAllocs;
+ ULONG NonPagedPoolFrees;
+ ULONG TotalFreeSystemPtes;
+ ULONG SystemCodePage;
+ ULONG TotalSystemDriverPages;
+ ULONG TotalSystemCodePages;
+ ULONG SmallNonPagedLookasideListAllocateHits;
+ ULONG SmallPagedLookasideListAllocateHits;
+ ULONG Reserved3;
+ ULONG MmSystemCachePage;
+ ULONG PagedPoolPage;
+ ULONG SystemDriverPage;
+ ULONG FastReadNoWait;
+ ULONG FastReadWait;
+ ULONG FastReadResourceMiss;
+ ULONG FastReadNotPossible;
+ ULONG FastMdlReadNoWait;
+ ULONG FastMdlReadWait;
+ ULONG FastMdlReadResourceMiss;
+ ULONG FastMdlReadNotPossible;
+ ULONG MapDataNoWait;
+ ULONG MapDataWait;
+ ULONG MapDataNoWaitMiss;
+ ULONG MapDataWaitMiss;
+ ULONG PinMappedDataCount;
+ ULONG PinReadNoWait;
+ ULONG PinReadWait;
+ ULONG PinReadNoWaitMiss;
+ ULONG PinReadWaitMiss;
+ ULONG CopyReadNoWait;
+ ULONG CopyReadWait;
+ ULONG CopyReadNoWaitMiss;
+ ULONG CopyReadWaitMiss;
+ ULONG MdlReadNoWait;
+ ULONG MdlReadWait;
+ ULONG MdlReadNoWaitMiss;
+ ULONG MdlReadWaitMiss;
+ ULONG ReadAheadIos;
+ ULONG LazyWriteIos;
+ ULONG LazyWritePages;
+ ULONG DataFlushes;
+ ULONG DataPages;
+ ULONG ContextSwitches;
+ ULONG FirstLevelTbFills;
+ ULONG SecondLevelTbFills;
+ ULONG SystemCalls;
+} SYSTEM_PERFORMANCE_INFORMATION, *PSYSTEM_PERFORMANCE_INFORMATION;
+
+typedef struct _SYSTEM_TIME_OF_DAY_INFORMATION {
+ LARGE_INTEGER BootTime;
+ LARGE_INTEGER CurrentTime;
+ LARGE_INTEGER TimeZoneBias;
+ ULONG CurrentTimeZoneId;
+} SYSTEM_TIME_OF_DAY_INFORMATION, *PSYSTEM_TIME_OF_DAY_INFORMATION;
+
+typedef struct _VM_COUNTERS {
+ ULONG PeakVirtualSize;
+ ULONG VirtualSize;
+ ULONG PageFaultCount;
+ ULONG PeakWorkingSetSize;
+ ULONG WorkingSetSize;
+ ULONG QuotaPeakPagedPoolUsage;
+ ULONG QuotaPagedPoolUsage;
+ ULONG QuotaPeakNonPagedPoolUsage;
+ ULONG QuotaNonPagedPoolUsage;
+ ULONG PagefileUsage;
+ ULONG PeakPagefileUsage;
+} VM_COUNTERS;
+
+typedef enum _THREAD_STATE {
+ StateInitialized,
+ StateReady,
+ StateRunning,
+ StateStandby,
+ StateTerminated,
+ StateWait,
+ StateTransition,
+ StateUnknown
+} THREAD_STATE;
+
+typedef struct _SYSTEM_THREADS {
+ LARGE_INTEGER KernelTime;
+ LARGE_INTEGER UserTime;
+ LARGE_INTEGER CreateTime;
+ ULONG WaitTime;
+ PVOID StartAddress;
+ CLIENT_ID ClientId;
+ KPRIORITY Priority;
+ KPRIORITY BasePriority;
+ ULONG ContextSwitchCount;
+ THREAD_STATE State;
+ KWAIT_REASON WaitReason;
+} SYSTEM_THREADS, *PSYSTEM_THREADS;
+
+typedef struct _SYSTEM_PROCESSES {
+ ULONG NextEntryDelta;
+ ULONG ThreadCount;
+ ULONG Reserved1[6];
+ LARGE_INTEGER CreateTime;
+ LARGE_INTEGER UserTime;
+ LARGE_INTEGER KernelTime;
+ UNICODE_STRING ProcessName;
+ KPRIORITY BasePriority;
+ ULONG ProcessId;
+ ULONG InheritedFromProcessId;
+ ULONG HandleCount;
+ ULONG Reserved2[2];
+ VM_COUNTERS VmCounters;
+ IO_COUNTERS IoCounters;
+ SYSTEM_THREADS Threads[1];
+} SYSTEM_PROCESSES, *PSYSTEM_PROCESSES;
+
+typedef struct _SYSTEM_CALLS_INFORMATION {
+ ULONG Size;
+ ULONG NumberOfDescriptorTables;
+ ULONG NumberOfRoutinesInTable[1];
+ ULONG CallCounts[ANYSIZE_ARRAY];
+} SYSTEM_CALLS_INFORMATION, *PSYSTEM_CALLS_INFORMATION;
+
+typedef struct _SYSTEM_CONFIGURATION_INFORMATION {
+ ULONG DiskCount;
+ ULONG FloppyCount;
+ ULONG CdRomCount;
+ ULONG TapeCount;
+ ULONG SerialCount;
+ ULONG ParallelCount;
+} SYSTEM_CONFIGURATION_INFORMATION, *PSYSTEM_CONFIGURATION_INFORMATION;
+
+typedef struct _SYSTEM_PROCESSOR_TIMES {
+ LARGE_INTEGER IdleTime;
+ LARGE_INTEGER KernelTime;
+ LARGE_INTEGER UserTime;
+ LARGE_INTEGER DpcTime;
+ LARGE_INTEGER InterruptTime;
+ ULONG InterruptCount;
+} SYSTEM_PROCESSOR_TIMES, *PSYSTEM_PROCESSOR_TIMES;
+
+/* SYSTEM_GLOBAL_FLAG.GlobalFlag constants */
+#define FLG_STOP_ON_EXCEPTION 0x00000001
+#define FLG_SHOW_LDR_SNAPS 0x00000002
+#define FLG_DEBUG_INITIAL_COMMAND 0x00000004
+#define FLG_STOP_ON_HUNG_GUI 0x00000008
+#define FLG_HEAP_ENABLE_TAIL_CHECK 0x00000010
+#define FLG_HEAP_ENABLE_FREE_CHECK 0x00000020
+#define FLG_HEAP_VALIDATE_PARAMETERS 0x00000040
+#define FLG_HEAP_VALIDATE_ALL 0x00000080
+#define FLG_POOL_ENABLE_TAIL_CHECK 0x00000100
+#define FLG_POOL_ENABLE_FREE_CHECK 0x00000200
+#define FLG_POOL_ENABLE_TAGGING 0x00000400
+#define FLG_HEAP_ENABLE_TAGGING 0x00000800
+#define FLG_USER_STACK_TRACE_DB 0x00001000
+#define FLG_KERNEL_STACK_TRACE_DB 0x00002000
+#define FLG_MAINTAIN_OBJECT_TYPELIST 0x00004000
+#define FLG_HEAP_ENABLE_TAG_BY_DLL 0x00008000
+#define FLG_IGNORE_DEBUG_PRIV 0x00010000
+#define FLG_ENABLE_CSRDEBUG 0x00020000
+#define FLG_ENABLE_KDEBUG_SYMBOL_LOAD 0x00040000
+#define FLG_DISABLE_PAGE_KERNEL_STACKS 0x00080000
+#define FLG_HEAP_ENABLE_CALL_TRACING 0x00100000
+#define FLG_HEAP_DISABLE_COALESCING 0x00200000
+#define FLG_ENABLE_CLOSE_EXCEPTIONS 0x00400000
+#define FLG_ENABLE_EXCEPTION_LOGGING 0x00800000
+#define FLG_ENABLE_DBGPRINT_BUFFERING 0x08000000
+
+typedef struct _SYSTEM_GLOBAL_FLAG {
+ ULONG GlobalFlag;
+} SYSTEM_GLOBAL_FLAG, *PSYSTEM_GLOBAL_FLAG;
+
+typedef struct _SYSTEM_MODULE_INFORMATION_ENTRY {
+ ULONG Unknown1;
+ ULONG Unknown2;
+ PVOID Base;
+ ULONG Size;
+ ULONG Flags;
+ USHORT Index;
+ /* Length of module name not including the path, this
+ field contains valid value only for NTOSKRNL module */
+ USHORT NameLength;
+ USHORT LoadCount;
+ USHORT PathLength;
+ CHAR ImageName[256];
+} SYSTEM_MODULE_INFORMATION_ENTRY, *PSYSTEM_MODULE_INFORMATION_ENTRY;
+
+typedef struct _SYSTEM_MODULE_INFORMATION {
+ ULONG Count;
+ SYSTEM_MODULE_INFORMATION_ENTRY Module[1];
+} SYSTEM_MODULE_INFORMATION, *PSYSTEM_MODULE_INFORMATION;
+
+typedef struct _SYSTEM_LOCK_INFORMATION {
+ PVOID Address;
+ USHORT Type;
+ USHORT Reserved1;
+ ULONG ExclusiveOwnerThreadId;
+ ULONG ActiveCount;
+ ULONG ContentionCount;
+ ULONG Reserved2[2];
+ ULONG NumberOfSharedWaiters;
+ ULONG NumberOfExclusiveWaiters;
+} SYSTEM_LOCK_INFORMATION, *PSYSTEM_LOCK_INFORMATION;
+
+/*SYSTEM_HANDLE_INFORMATION.Flags cosntants */
+#define PROTECT_FROM_CLOSE 0x01
+#define INHERIT 0x02
+
+typedef struct _SYSTEM_HANDLE_INFORMATION {
+ ULONG ProcessId;
+ UCHAR ObjectTypeNumber;
+ UCHAR Flags;
+ USHORT Handle;
+ PVOID Object;
+ ACCESS_MASK GrantedAccess;
+} SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION;
+
+typedef struct _SYSTEM_OBJECT_TYPE_INFORMATION {
+ ULONG NextEntryOffset;
+ ULONG ObjectCount;
+ ULONG HandleCount;
+ ULONG TypeNumber;
+ ULONG InvalidAttributes;
+ GENERIC_MAPPING GenericMapping;
+ ACCESS_MASK ValidAccessMask;
+ POOL_TYPE PoolType;
+ UCHAR Unknown;
+ UNICODE_STRING Name;
+} SYSTEM_OBJECT_TYPE_INFORMATION, *PSYSTEM_OBJECT_TYPE_INFORMATION;
+
+/* SYSTEM_OBJECT_INFORMATION.Flags constants */
+#define FLG_SYSOBJINFO_SINGLE_HANDLE_ENTRY 0x40
+#define FLG_SYSOBJINFO_DEFAULT_SECURITY_QUOTA 0x20
+#define FLG_SYSOBJINFO_PERMANENT 0x10
+#define FLG_SYSOBJINFO_EXCLUSIVE 0x08
+#define FLG_SYSOBJINFO_CREATOR_INFO 0x04
+#define FLG_SYSOBJINFO_KERNEL_MODE 0x02
+
+typedef struct _SYSTEM_OBJECT_INFORMATION {
+ ULONG NextEntryOffset;
+ PVOID Object;
+ ULONG CreatorProcessId;
+ USHORT Unknown;
+ USHORT Flags;
+ ULONG PointerCount;
+ ULONG HandleCount;
+ ULONG PagedPoolUsage;
+ ULONG NonPagedPoolUsage;
+ ULONG ExclusiveProcessId;
+ PSECURITY_DESCRIPTOR SecurityDescriptor;
+ UNICODE_STRING Name;
+} SYSTEM_OBJECT_INFORMATION, *PSYSTEM_OBJECT_INFORMATION;
+
+typedef struct _SYSTEM_PAGEFILE_INFORMATION {
+ ULONG NextEntryOffset;
+ ULONG CurrentSize;
+ ULONG TotalUsed;
+ ULONG PeakUsed;
+ UNICODE_STRING FileName;
+} SYSTEM_PAGEFILE_INFORMATION, *PSYSTEM_PAGEFILE_INFORMATION;
+
+typedef struct _SYSTEM_INSTRUCTION_EMULATION_INFORMATION {
+ ULONG SegmentNotPresent;
+ ULONG TwoByteOpcode;
+ ULONG ESprefix;
+ ULONG CSprefix;
+ ULONG SSprefix;
+ ULONG DSprefix;
+ ULONG FSPrefix;
+ ULONG GSprefix;
+ ULONG OPER32prefix;
+ ULONG ADDR32prefix;
+ ULONG INSB;
+ ULONG INSW;
+ ULONG OUTSB;
+ ULONG OUTSW;
+ ULONG PUSHFD;
+ ULONG POPFD;
+ ULONG INTnn;
+ ULONG INTO;
+ ULONG IRETD;
+ ULONG INBimm;
+ ULONG INWimm;
+ ULONG OUTBimm;
+ ULONG OUTWimm;
+ ULONG INB;
+ ULONG INW;
+ ULONG OUTB;
+ ULONG OUTW;
+ ULONG LOCKprefix;
+ ULONG REPNEprefix;
+ ULONG REPprefix;
+ ULONG HLT;
+ ULONG CLI;
+ ULONG STI;
+ ULONG GenericInvalidOpcode;
+} SYSTEM_INSTRUCTION_EMULATION_INFORMATION, *PSYSTEM_INSTRUCTION_EMULATION_INFORMATION;
+
+typedef struct _SYSTEM_POOL_TAG_INFORMATION {
+ CHAR Tag[4];
+ ULONG PagedPoolAllocs;
+ ULONG PagedPoolFrees;
+ ULONG PagedPoolUsage;
+ ULONG NonPagedPoolAllocs;
+ ULONG NonPagedPoolFrees;
+ ULONG NonPagedPoolUsage;
+} SYSTEM_POOL_TAG_INFORMATION, *PSYSTEM_POOL_TAG_INFORMATION;
+
+typedef struct _SYSTEM_PROCESSOR_STATISTICS {
+ ULONG ContextSwitches;
+ ULONG DpcCount;
+ ULONG DpcRequestRate;
+ ULONG TimeIncrement;
+ ULONG DpcBypassCount;
+ ULONG ApcBypassCount;
+} SYSTEM_PROCESSOR_STATISTICS, *PSYSTEM_PROCESSOR_STATISTICS;
+
+typedef struct _SYSTEM_DPC_INFORMATION {
+ ULONG Reserved;
+ ULONG MaximumDpcQueueDepth;
+ ULONG MinimumDpcRate;
+ ULONG AdjustDpcThreshold;
+ ULONG IdealDpcRate;
+} SYSTEM_DPC_INFORMATION, *PSYSTEM_DPC_INFORMATION;
+
+typedef struct _SYSTEM_LOAD_IMAGE {
+ UNICODE_STRING ModuleName;
+ PVOID ModuleBase;
+ PVOID SectionPointer;
+ PVOID EntryPoint;
+ PVOID ExportDirectory;
+} SYSTEM_LOAD_IMAGE, *PSYSTEM_LOAD_IMAGE;
+
+typedef struct _SYSTEM_UNLOAD_IMAGE {
+ PVOID ModuleBase;
+} SYSTEM_UNLOAD_IMAGE, *PSYSTEM_UNLOAD_IMAGE;
+
+typedef struct _SYSTEM_QUERY_TIME_ADJUSTMENT {
+ ULONG TimeAdjustment;
+ ULONG MaximumIncrement;
+ BOOLEAN TimeSynchronization;
+} SYSTEM_QUERY_TIME_ADJUSTMENT, *PSYSTEM_QUERY_TIME_ADJUSTMENT;
+
+typedef struct _SYSTEM_SET_TIME_ADJUSTMENT {
+ ULONG TimeAdjustment;
+ BOOLEAN TimeSynchronization;
+} SYSTEM_SET_TIME_ADJUSTMENT, *PSYSTEM_SET_TIME_ADJUSTMENT;
+
+typedef struct _SYSTEM_CRASH_DUMP_INFORMATION {
+ HANDLE CrashDumpSectionHandle;
+ HANDLE Unknown;
+} SYSTEM_CRASH_DUMP_INFORMATION, *PSYSTEM_CRASH_DUMP_INFORMATION;
+
+typedef struct _SYSTEM_EXCEPTION_INFORMATION {
+ ULONG AlignmentFixupCount;
+ ULONG ExceptionDispatchCount;
+ ULONG FloatingEmulationCount;
+ ULONG Reserved;
+} SYSTEM_EXCEPTION_INFORMATION, *PSYSTEM_EXCEPTION_INFORMATION;
+
+typedef struct _SYSTEM_CRASH_DUMP_STATE_INFORMATION {
+ ULONG CrashDumpSectionExists;
+ ULONG Unknown;
+} SYSTEM_CRASH_DUMP_STATE_INFORMATION, *PSYSTEM_CRASH_DUMP_STATE_INFORMATION;
+
+typedef struct _SYSTEM_KERNEL_DEBUGGER_INFORMATION {
+ BOOLEAN DebuggerEnabled;
+ BOOLEAN DebuggerNotPresent;
+} SYSTEM_KERNEL_DEBUGGER_INFORMATION, *PSYSTEM_KERNEL_DEBUGGER_INFORMATION;
+
+typedef struct _SYSTEM_CONTEXT_SWITCH_INFORMATION {
+ ULONG ContextSwitches;
+ ULONG ContextSwitchCounters[11];
+} SYSTEM_CONTEXT_SWITCH_INFORMATION, *PSYSTEM_CONTEXT_SWITCH_INFORMATION;
+
+typedef struct _SYSTEM_REGISTRY_QUOTA_INFORMATION {
+ ULONG RegistryQuota;
+ ULONG RegistryQuotaInUse;
+ ULONG PagedPoolSize;
+} SYSTEM_REGISTRY_QUOTA_INFORMATION, *PSYSTEM_REGISTRY_QUOTA_INFORMATION;
+
+typedef struct _SYSTEM_LOAD_AND_CALL_IMAGE {
+ UNICODE_STRING ModuleName;
+} SYSTEM_LOAD_AND_CALL_IMAGE, *PSYSTEM_LOAD_AND_CALL_IMAGE;
+
+typedef struct _SYSTEM_PRIORITY_SEPARATION {
+ ULONG PrioritySeparation;
+} SYSTEM_PRIORITY_SEPARATION, *PSYSTEM_PRIORITY_SEPARATION;
+
+typedef struct _SYSTEM_TIME_ZONE_INFORMATION {
+ LONG Bias;
+ WCHAR StandardName[32];
+ LARGE_INTEGER StandardDate;
+ LONG StandardBias;
+ WCHAR DaylightName[32];
+ LARGE_INTEGER DaylightDate;
+ LONG DaylightBias;
+} SYSTEM_TIME_ZONE_INFORMATION, *PSYSTEM_TIME_ZONE_INFORMATION;
+
+typedef struct _SYSTEM_LOOKASIDE_INFORMATION {
+ USHORT Depth;
+ USHORT MaximumDepth;
+ ULONG TotalAllocates;
+ ULONG AllocateMisses;
+ ULONG TotalFrees;
+ ULONG FreeMisses;
+ POOL_TYPE Type;
+ ULONG Tag;
+ ULONG Size;
+} SYSTEM_LOOKASIDE_INFORMATION, *PSYSTEM_LOOKASIDE_INFORMATION;
+
+typedef struct _SYSTEM_SET_TIME_SLIP_EVENT {
+ HANDLE TimeSlipEvent;
+} SYSTEM_SET_TIME_SLIP_EVENT, *PSYSTEM_SET_TIME_SLIP_EVENT;
+
+typedef struct _SYSTEM_CREATE_SESSION {
+ ULONG SessionId;
+} SYSTEM_CREATE_SESSION, *PSYSTEM_CREATE_SESSION;
+
+typedef struct _SYSTEM_DELETE_SESSION {
+ ULONG SessionId;
+} SYSTEM_DELETE_SESSION, *PSYSTEM_DELETE_SESSION;
+
+typedef struct _SYSTEM_RANGE_START_INFORMATION {
+ PVOID SystemRangeStart;
+} SYSTEM_RANGE_START_INFORMATION, *PSYSTEM_RANGE_START_INFORMATION;
+
+typedef struct _SYSTEM_SESSION_PROCESSES_INFORMATION {
+ ULONG SessionId;
+ ULONG BufferSize;
+ PVOID Buffer;
+} SYSTEM_SESSION_PROCESSES_INFORMATION, *PSYSTEM_SESSION_PROCESSES_INFORMATION;
+
+typedef struct _SYSTEM_POOL_BLOCK {
+ BOOLEAN Allocated;
+ USHORT Unknown;
+ ULONG Size;
+ CHAR Tag[4];
+} SYSTEM_POOL_BLOCK, *PSYSTEM_POOL_BLOCK;
+
+typedef struct _SYSTEM_POOL_BLOCKS_INFORMATION {
+ ULONG PoolSize;
+ PVOID PoolBase;
+ USHORT Unknown;
+ ULONG NumberOfBlocks;
+ SYSTEM_POOL_BLOCK PoolBlocks[1];
+} SYSTEM_POOL_BLOCKS_INFORMATION, *PSYSTEM_POOL_BLOCKS_INFORMATION;
+
+typedef struct _SYSTEM_MEMORY_USAGE {
+ PVOID Name;
+ USHORT Valid;
+ USHORT Standby;
+ USHORT Modified;
+ USHORT PageTables;
+} SYSTEM_MEMORY_USAGE, *PSYSTEM_MEMORY_USAGE;
+
+typedef struct _SYSTEM_MEMORY_USAGE_INFORMATION {
+ ULONG Reserved;
+ PVOID EndOfData;
+ SYSTEM_MEMORY_USAGE MemoryUsage[1];
+} SYSTEM_MEMORY_USAGE_INFORMATION, *PSYSTEM_MEMORY_USAGE_INFORMATION;
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtQuerySystemInformation(
+ /*IN*/ SYSTEM_INFORMATION_CLASS SystemInformationClass,
+ /*IN OUT*/ PVOID SystemInformation,
+ /*IN*/ ULONG SystemInformationLength,
+ /*OUT*/ PULONG ReturnLength /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwQuerySystemInformation(
+ /*IN*/ SYSTEM_INFORMATION_CLASS SystemInformationClass,
+ /*IN OUT*/ PVOID SystemInformation,
+ /*IN*/ ULONG SystemInformationLength,
+ /*OUT*/ PULONG ReturnLength /*OPTIONAL*/);
+
+NTOSAPI
+NTAPI
+NTSTATUS
+NtQueryFullAttributesFile(
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,
+ /*OUT*/ PFILE_NETWORK_OPEN_INFORMATION FileInformation);
+
+NTOSAPI
+NTAPI
+NTSTATUS
+ZwQueryFullAttributesFile(
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,
+ /*OUT*/ PFILE_NETWORK_OPEN_INFORMATION FileInformation);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtSetSystemInformation(
+ /*IN*/ SYSTEM_INFORMATION_CLASS SystemInformationClass,
+ /*IN OUT*/ PVOID SystemInformation,
+ /*IN*/ ULONG SystemInformationLength);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwSetSystemInformation(
+ /*IN*/ SYSTEM_INFORMATION_CLASS SystemInformationClass,
+ /*IN OUT*/ PVOID SystemInformation,
+ /*IN*/ ULONG SystemInformationLength);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtQuerySystemEnvironmentValue(
+ /*IN*/ PUNICODE_STRING Name,
+ /*OUT*/ PVOID Value,
+ /*IN*/ ULONG ValueLength,
+ /*OUT*/ PULONG ReturnLength /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwQuerySystemEnvironmentValue(
+ /*IN*/ PUNICODE_STRING Name,
+ /*OUT*/ PVOID Value,
+ /*IN*/ ULONG ValueLength,
+ /*OUT*/ PULONG ReturnLength /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtSetSystemEnvironmentValue(
+ /*IN*/ PUNICODE_STRING Name,
+ /*IN*/ PUNICODE_STRING Value);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwSetSystemEnvironmentValue(
+ /*IN*/ PUNICODE_STRING Name,
+ /*IN*/ PUNICODE_STRING Value);
+
+typedef enum _SHUTDOWN_ACTION {
+ ShutdownNoReboot,
+ ShutdownReboot,
+ ShutdownPowerOff
+} SHUTDOWN_ACTION;
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtShutdownSystem(
+ /*IN*/ SHUTDOWN_ACTION Action);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwShutdownSystem(
+ /*IN*/ SHUTDOWN_ACTION Action);
+
+typedef enum _DEBUG_CONTROL_CODE {
+ DebugGetTraceInformation = 1,
+ DebugSetInternalBreakpoint,
+ DebugSetSpecialCall,
+ DebugClearSpecialCalls,
+ DebugQuerySpecialCalls,
+ DebugDbgBreakPoint,
+ DebugMaximum
+} DEBUG_CONTROL_CODE;
+
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtSystemDebugControl(
+ /*IN*/ DEBUG_CONTROL_CODE ControlCode,
+ /*IN*/ PVOID InputBuffer /*OPTIONAL*/,
+ /*IN*/ ULONG InputBufferLength,
+ /*OUT*/ PVOID OutputBuffer /*OPTIONAL*/,
+ /*IN*/ ULONG OutputBufferLength,
+ /*OUT*/ PULONG ReturnLength /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwSystemDebugControl(
+ /*IN*/ DEBUG_CONTROL_CODE ControlCode,
+ /*IN*/ PVOID InputBuffer /*OPTIONAL*/,
+ /*IN*/ ULONG InputBufferLength,
+ /*OUT*/ PVOID OutputBuffer /*OPTIONAL*/,
+ /*IN*/ ULONG OutputBufferLength,
+ /*OUT*/ PULONG ReturnLength /*OPTIONAL*/);
+
+
+
+/* Objects, Object directories, and symbolic links */
+
+typedef enum _OBJECT_INFORMATION_CLASS {
+ ObjectBasicInformation,
+ ObjectNameInformation,
+ ObjectTypeInformation,
+ ObjectAllTypesInformation,
+ ObjectHandleInformation
+} OBJECT_INFORMATION_CLASS;
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtQueryObject(
+ /*IN*/ HANDLE ObjectHandle,
+ /*IN*/ OBJECT_INFORMATION_CLASS ObjectInformationClass,
+ /*OUT*/ PVOID ObjectInformation,
+ /*IN*/ ULONG ObjectInformationLength,
+ /*OUT*/ PULONG ReturnLength /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwQueryObject(
+ /*IN*/ HANDLE ObjectHandle,
+ /*IN*/ OBJECT_INFORMATION_CLASS ObjectInformationClass,
+ /*OUT*/ PVOID ObjectInformation,
+ /*IN*/ ULONG ObjectInformationLength,
+ /*OUT*/ PULONG ReturnLength /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtSetInformationObject(
+ /*IN*/ HANDLE ObjectHandle,
+ /*IN*/ OBJECT_INFORMATION_CLASS ObjectInformationClass,
+ /*IN*/ PVOID ObjectInformation,
+ /*IN*/ ULONG ObjectInformationLength);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwSetInformationObject(
+ /*IN*/ HANDLE ObjectHandle,
+ /*IN*/ OBJECT_INFORMATION_CLASS ObjectInformationClass,
+ /*IN*/ PVOID ObjectInformation,
+ /*IN*/ ULONG ObjectInformationLength);
+
+/* OBJECT_BASIC_INFORMATION.Attributes constants */
+/* also in winbase.h */
+#define HANDLE_FLAG_INHERIT 0x01
+#define HANDLE_FLAG_PROTECT_FROM_CLOSE 0x02
+/* end winbase.h */
+#define PERMANENT 0x10
+#define EXCLUSIVE 0x20
+
+typedef struct _OBJECT_BASIC_INFORMATION {
+ ULONG Attributes;
+ ACCESS_MASK GrantedAccess;
+ ULONG HandleCount;
+ ULONG PointerCount;
+ ULONG PagedPoolUsage;
+ ULONG NonPagedPoolUsage;
+ ULONG Reserved[3];
+ ULONG NameInformationLength;
+ ULONG TypeInformationLength;
+ ULONG SecurityDescriptorLength;
+ LARGE_INTEGER CreateTime;
+} OBJECT_BASIC_INFORMATION, *POBJECT_BASIC_INFORMATION;
+#if 0
+/* FIXME: Enable later */
+typedef struct _OBJECT_TYPE_INFORMATION {
+ UNICODE_STRING Name;
+ ULONG ObjectCount;
+ ULONG HandleCount;
+ ULONG Reserved1[4];
+ ULONG PeakObjectCount;
+ ULONG PeakHandleCount;
+ ULONG Reserved2[4];
+ ULONG InvalidAttributes;
+ GENERIC_MAPPING GenericMapping;
+ ULONG ValidAccess;
+ UCHAR Unknown;
+ BOOLEAN MaintainHandleDatabase;
+ POOL_TYPE PoolType;
+ ULONG PagedPoolUsage;
+ ULONG NonPagedPoolUsage;
+} OBJECT_TYPE_INFORMATION, *POBJECT_TYPE_INFORMATION;
+
+typedef struct _OBJECT_ALL_TYPES_INFORMATION {
+ ULONG NumberOfTypes;
+ OBJECT_TYPE_INFORMATION TypeInformation;
+} OBJECT_ALL_TYPES_INFORMATION, *POBJECT_ALL_TYPES_INFORMATION;
+#endif
+typedef struct _OBJECT_HANDLE_ATTRIBUTE_INFORMATION {
+ BOOLEAN Inherit;
+ BOOLEAN ProtectFromClose;
+} OBJECT_HANDLE_ATTRIBUTE_INFORMATION, *POBJECT_HANDLE_ATTRIBUTE_INFORMATION;
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtDuplicateObject(
+ /*IN*/ HANDLE SourceProcessHandle,
+ /*IN*/ HANDLE SourceHandle,
+ /*IN*/ HANDLE TargetProcessHandle,
+ /*OUT*/ PHANDLE TargetHandle /*OPTIONAL*/,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ ULONG Attributes,
+ /*IN*/ ULONG Options);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwDuplicateObject(
+ /*IN*/ HANDLE SourceProcessHandle,
+ /*IN*/ HANDLE SourceHandle,
+ /*IN*/ HANDLE TargetProcessHandle,
+ /*OUT*/ PHANDLE TargetHandle /*OPTIONAL*/,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ ULONG Attributes,
+ /*IN*/ ULONG Options);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtQuerySecurityObject(
+ /*IN*/ HANDLE Handle,
+ /*IN*/ SECURITY_INFORMATION SecurityInformation,
+ /*OUT*/ PSECURITY_DESCRIPTOR SecurityDescriptor,
+ /*IN*/ ULONG SecurityDescriptorLength,
+ /*OUT*/ PULONG ReturnLength);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwQuerySecurityObject(
+ /*IN*/ HANDLE Handle,
+ /*IN*/ SECURITY_INFORMATION SecurityInformation,
+ /*OUT*/ PSECURITY_DESCRIPTOR SecurityDescriptor,
+ /*IN*/ ULONG SecurityDescriptorLength,
+ /*OUT*/ PULONG ReturnLength);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtSetSecurityObject(
+ /*IN*/ HANDLE Handle,
+ /*IN*/ SECURITY_INFORMATION SecurityInformation,
+ /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwSetSecurityObject(
+ /*IN*/ HANDLE Handle,
+ /*IN*/ SECURITY_INFORMATION SecurityInformation,
+ /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtOpenDirectoryObject(
+ /*OUT*/ PHANDLE DirectoryHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwOpenDirectoryObject(
+ /*OUT*/ PHANDLE DirectoryHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtQueryDirectoryObject(
+ /*IN*/ HANDLE DirectoryHandle,
+ /*OUT*/ PVOID Buffer,
+ /*IN*/ ULONG BufferLength,
+ /*IN*/ BOOLEAN ReturnSingleEntry,
+ /*IN*/ BOOLEAN RestartScan,
+ /*IN OUT*/ PULONG Context,
+ /*OUT*/ PULONG ReturnLength /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwQueryDirectoryObject(
+ /*IN*/ HANDLE DirectoryHandle,
+ /*OUT*/ PVOID Buffer,
+ /*IN*/ ULONG BufferLength,
+ /*IN*/ BOOLEAN ReturnSingleEntry,
+ /*IN*/ BOOLEAN RestartScan,
+ /*IN OUT*/ PULONG Context,
+ /*OUT*/ PULONG ReturnLength /*OPTIONAL*/);
+
+typedef struct _DIRECTORY_BASIC_INFORMATION {
+ UNICODE_STRING ObjectName;
+ UNICODE_STRING ObjectTypeName;
+} DIRECTORY_BASIC_INFORMATION, *PDIRECTORY_BASIC_INFORMATION;
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtCreateSymbolicLinkObject(
+ /*OUT*/ PHANDLE SymbolicLinkHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,
+ /*IN*/ PUNICODE_STRING TargetName);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwCreateSymbolicLinkObject(
+ /*OUT*/ PHANDLE SymbolicLinkHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,
+ /*IN*/ PUNICODE_STRING TargetName);
+
+
+
+
+/* Virtual memory */
+
+typedef enum _MEMORY_INFORMATION_CLASS {
+MemoryBasicInformation,
+MemoryWorkingSetList,
+MemorySectionName,
+MemoryBasicVlmInformation
+} MEMORY_INFORMATION_CLASS;
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtAllocateVirtualMemory(
+ /*IN*/ HANDLE ProcessHandle,
+ /*IN OUT*/ PVOID *BaseAddress,
+ /*IN*/ ULONG ZeroBits,
+ /*IN OUT*/ PULONG AllocationSize,
+ /*IN*/ ULONG AllocationType,
+ /*IN*/ ULONG Protect);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwAllocateVirtualMemory(
+ /*IN*/ HANDLE ProcessHandle,
+ /*IN OUT*/ PVOID *BaseAddress,
+ /*IN*/ ULONG ZeroBits,
+ /*IN OUT*/ PULONG AllocationSize,
+ /*IN*/ ULONG AllocationType,
+ /*IN*/ ULONG Protect);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtFreeVirtualMemory(
+ /*IN*/ HANDLE ProcessHandle,
+ /*IN OUT*/ PVOID *BaseAddress,
+ /*IN OUT*/ PULONG FreeSize,
+ /*IN*/ ULONG FreeType);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwFreeVirtualMemory(
+ /*IN*/ HANDLE ProcessHandle,
+ /*IN OUT*/ PVOID *BaseAddress,
+ /*IN OUT*/ PULONG FreeSize,
+ /*IN*/ ULONG FreeType);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtQueryVirtualMemory(
+ /*IN*/ HANDLE ProcessHandle,
+ /*IN*/ PVOID BaseAddress,
+ /*IN*/ MEMORY_INFORMATION_CLASS MemoryInformationClass,
+ /*OUT*/ PVOID MemoryInformation,
+ /*IN*/ ULONG MemoryInformationLength,
+ /*OUT*/ PULONG ReturnLength /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwQueryVirtualMemory(
+ /*IN*/ HANDLE ProcessHandle,
+ /*IN*/ PVOID BaseAddress,
+ /*IN*/ MEMORY_INFORMATION_CLASS MemoryInformationClass,
+ /*OUT*/ PVOID MemoryInformation,
+ /*IN*/ ULONG MemoryInformationLength,
+ /*OUT*/ PULONG ReturnLength /*OPTIONAL*/);
+
+/* MEMORY_WORKING_SET_LIST.WorkingSetList constants */
+#define WSLE_PAGE_READONLY 0x001
+#define WSLE_PAGE_EXECUTE 0x002
+#define WSLE_PAGE_READWRITE 0x004
+#define WSLE_PAGE_EXECUTE_READ 0x003
+#define WSLE_PAGE_WRITECOPY 0x005
+#define WSLE_PAGE_EXECUTE_READWRITE 0x006
+#define WSLE_PAGE_EXECUTE_WRITECOPY 0x007
+#define WSLE_PAGE_SHARE_COUNT_MASK 0x0E0
+#define WSLE_PAGE_SHAREABLE 0x100
+
+typedef struct _MEMORY_WORKING_SET_LIST {
+ ULONG NumberOfPages;
+ ULONG WorkingSetList[1];
+} MEMORY_WORKING_SET_LIST, *PMEMORY_WORKING_SET_LIST;
+
+typedef struct _MEMORY_SECTION_NAME {
+ UNICODE_STRING SectionFileName;
+} MEMORY_SECTION_NAME, *PMEMORY_SECTION_NAME;
+
+/* Zw[Lock|Unlock]VirtualMemory.LockType constants */
+#define LOCK_VM_IN_WSL 0x01
+#define LOCK_VM_IN_RAM 0x02
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtLockVirtualMemory(
+ /*IN*/ HANDLE ProcessHandle,
+ /*IN OUT*/ PVOID *BaseAddress,
+ /*IN OUT*/ PULONG LockSize,
+ /*IN*/ ULONG LockType);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwLockVirtualMemory(
+ /*IN*/ HANDLE ProcessHandle,
+ /*IN OUT*/ PVOID *BaseAddress,
+ /*IN OUT*/ PULONG LockSize,
+ /*IN*/ ULONG LockType);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtUnlockVirtualMemory(
+ /*IN*/ HANDLE ProcessHandle,
+ /*IN OUT*/ PVOID *BaseAddress,
+ /*IN OUT*/ PULONG LockSize,
+ /*IN*/ ULONG LockType);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwUnlockVirtualMemory(
+ /*IN*/ HANDLE ProcessHandle,
+ /*IN OUT*/ PVOID *BaseAddress,
+ /*IN OUT*/ PULONG LockSize,
+ /*IN*/ ULONG LockType);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtReadVirtualMemory(
+ /*IN*/ HANDLE ProcessHandle,
+ /*IN*/ PVOID BaseAddress,
+ /*OUT*/ PVOID Buffer,
+ /*IN*/ ULONG BufferLength,
+ /*OUT*/ PULONG ReturnLength /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwReadVirtualMemory(
+ /*IN*/ HANDLE ProcessHandle,
+ /*IN*/ PVOID BaseAddress,
+ /*OUT*/ PVOID Buffer,
+ /*IN*/ ULONG BufferLength,
+ /*OUT*/ PULONG ReturnLength /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtWriteVirtualMemory(
+ /*IN*/ HANDLE ProcessHandle,
+ /*IN*/ PVOID BaseAddress,
+ /*IN*/ PVOID Buffer,
+ /*IN*/ ULONG BufferLength,
+ /*OUT*/ PULONG ReturnLength /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwWriteVirtualMemory(
+ /*IN*/ HANDLE ProcessHandle,
+ /*IN*/ PVOID BaseAddress,
+ /*IN*/ PVOID Buffer,
+ /*IN*/ ULONG BufferLength,
+ /*OUT*/ PULONG ReturnLength /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtProtectVirtualMemory(
+ /*IN*/ HANDLE ProcessHandle,
+ /*IN OUT*/ PVOID *BaseAddress,
+ /*IN OUT*/ PULONG ProtectSize,
+ /*IN*/ ULONG NewProtect,
+ /*OUT*/ PULONG OldProtect);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwProtectVirtualMemory(
+ /*IN*/ HANDLE ProcessHandle,
+ /*IN OUT*/ PVOID *BaseAddress,
+ /*IN OUT*/ PULONG ProtectSize,
+ /*IN*/ ULONG NewProtect,
+ /*OUT*/ PULONG OldProtect);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtFlushVirtualMemory(
+ /*IN*/ HANDLE ProcessHandle,
+ /*IN OUT*/ PVOID *BaseAddress,
+ /*IN OUT*/ PULONG FlushSize,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwFlushVirtualMemory(
+ /*IN*/ HANDLE ProcessHandle,
+ /*IN OUT*/ PVOID *BaseAddress,
+ /*IN OUT*/ PULONG FlushSize,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtAllocateUserPhysicalPages(
+ /*IN*/ HANDLE ProcessHandle,
+ /*IN*/ PULONG NumberOfPages,
+ /*OUT*/ PULONG PageFrameNumbers);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwAllocateUserPhysicalPages(
+ /*IN*/ HANDLE ProcessHandle,
+ /*IN*/ PULONG NumberOfPages,
+ /*OUT*/ PULONG PageFrameNumbers);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtFreeUserPhysicalPages(
+ /*IN*/ HANDLE ProcessHandle,
+ /*IN OUT*/ PULONG NumberOfPages,
+ /*IN*/ PULONG PageFrameNumbers);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwFreeUserPhysicalPages(
+ /*IN*/ HANDLE ProcessHandle,
+ /*IN OUT*/ PULONG NumberOfPages,
+ /*IN*/ PULONG PageFrameNumbers);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtMapUserPhysicalPages(
+ /*IN*/ PVOID BaseAddress,
+ /*IN*/ PULONG NumberOfPages,
+ /*IN*/ PULONG PageFrameNumbers);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwMapUserPhysicalPages(
+ /*IN*/ PVOID BaseAddress,
+ /*IN*/ PULONG NumberOfPages,
+ /*IN*/ PULONG PageFrameNumbers);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtMapUserPhysicalPagesScatter(
+ /*IN*/ PVOID *BaseAddresses,
+ /*IN*/ PULONG NumberOfPages,
+ /*IN*/ PULONG PageFrameNumbers);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwMapUserPhysicalPagesScatter(
+ /*IN*/ PVOID *BaseAddresses,
+ /*IN*/ PULONG NumberOfPages,
+ /*IN*/ PULONG PageFrameNumbers);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtGetWriteWatch(
+ /*IN*/ HANDLE ProcessHandle,
+ /*IN*/ ULONG Flags,
+ /*IN*/ PVOID BaseAddress,
+ /*IN*/ ULONG RegionSize,
+ /*OUT*/ PULONG Buffer,
+ /*IN OUT*/ PULONG BufferEntries,
+ /*OUT*/ PULONG Granularity);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwGetWriteWatch(
+ /*IN*/ HANDLE ProcessHandle,
+ /*IN*/ ULONG Flags,
+ /*IN*/ PVOID BaseAddress,
+ /*IN*/ ULONG RegionSize,
+ /*OUT*/ PULONG Buffer,
+ /*IN OUT*/ PULONG BufferEntries,
+ /*OUT*/ PULONG Granularity);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtResetWriteWatch(
+ /*IN*/ HANDLE ProcessHandle,
+ /*IN*/ PVOID BaseAddress,
+ /*IN*/ ULONG RegionSize);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwResetWriteWatch(
+ /*IN*/ HANDLE ProcessHandle,
+ /*IN*/ PVOID BaseAddress,
+ /*IN*/ ULONG RegionSize);
+
+
+
+
+/* Sections */
+
+typedef enum _SECTION_INFORMATION_CLASS {
+ SectionBasicInformation,
+ SectionImageInformation
+} SECTION_INFORMATION_CLASS;
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtCreateSection(
+ /*OUT*/ PHANDLE SectionHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,
+ /*IN*/ PLARGE_INTEGER SectionSize /*OPTIONAL*/,
+ /*IN*/ ULONG Protect,
+ /*IN*/ ULONG Attributes,
+ /*IN*/ HANDLE FileHandle);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwCreateSection(
+ /*OUT*/ PHANDLE SectionHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,
+ /*IN*/ PLARGE_INTEGER SectionSize /*OPTIONAL*/,
+ /*IN*/ ULONG Protect,
+ /*IN*/ ULONG Attributes,
+ /*IN*/ HANDLE FileHandle);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtQuerySection(
+ /*IN*/ HANDLE SectionHandle,
+ /*IN*/ SECTION_INFORMATION_CLASS SectionInformationClass,
+ /*OUT*/ PVOID SectionInformation,
+ /*IN*/ ULONG SectionInformationLength,
+ /*OUT*/ PULONG ResultLength /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwQuerySection(
+ /*IN*/ HANDLE SectionHandle,
+ /*IN*/ SECTION_INFORMATION_CLASS SectionInformationClass,
+ /*OUT*/ PVOID SectionInformation,
+ /*IN*/ ULONG SectionInformationLength,
+ /*OUT*/ PULONG ResultLength /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtExtendSection(
+ /*IN*/ HANDLE SectionHandle,
+ /*IN*/ PLARGE_INTEGER SectionSize);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwExtendSection(
+ /*IN*/ HANDLE SectionHandle,
+ /*IN*/ PLARGE_INTEGER SectionSize);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtAreMappedFilesTheSame(
+ /*IN*/ PVOID Address1,
+ /*IN*/ PVOID Address2);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwAreMappedFilesTheSame(
+ /*IN*/ PVOID Address1,
+ /*IN*/ PVOID Address2);
+
+
+
+
+/* Threads */
+
+typedef struct _USER_STACK {
+ PVOID FixedStackBase;
+ PVOID FixedStackLimit;
+ PVOID ExpandableStackBase;
+ PVOID ExpandableStackLimit;
+ PVOID ExpandableStackBottom;
+} USER_STACK, *PUSER_STACK;
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtCreateThread(
+ /*OUT*/ PHANDLE ThreadHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,
+ /*IN*/ HANDLE ProcessHandle,
+ /*OUT*/ PCLIENT_ID ClientId,
+ /*IN*/ PCONTEXT ThreadContext,
+ /*IN*/ PUSER_STACK UserStack,
+ /*IN*/ BOOLEAN CreateSuspended);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwCreateThread(
+ /*OUT*/ PHANDLE ThreadHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,
+ /*IN*/ HANDLE ProcessHandle,
+ /*OUT*/ PCLIENT_ID ClientId,
+ /*IN*/ PCONTEXT ThreadContext,
+ /*IN*/ PUSER_STACK UserStack,
+ /*IN*/ BOOLEAN CreateSuspended);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtOpenThread(
+ /*OUT*/ PHANDLE ThreadHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,
+ /*IN*/ PCLIENT_ID ClientId);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwOpenThread(
+ /*OUT*/ PHANDLE ThreadHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,
+ /*IN*/ PCLIENT_ID ClientId);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtTerminateThread(
+ /*IN*/ HANDLE ThreadHandle /*OPTIONAL*/,
+ /*IN*/ NTSTATUS ExitStatus);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwTerminateThread(
+ /*IN*/ HANDLE ThreadHandle /*OPTIONAL*/,
+ /*IN*/ NTSTATUS ExitStatus);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtQueryInformationThread(
+ /*IN*/ HANDLE ThreadHandle,
+ /*IN*/ THREADINFOCLASS ThreadInformationClass,
+ /*OUT*/ PVOID ThreadInformation,
+ /*IN*/ ULONG ThreadInformationLength,
+ /*OUT*/ PULONG ReturnLength /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwQueryInformationThread(
+ /*IN*/ HANDLE ThreadHandle,
+ /*IN*/ THREADINFOCLASS ThreadInformationClass,
+ /*OUT*/ PVOID ThreadInformation,
+ /*IN*/ ULONG ThreadInformationLength,
+ /*OUT*/ PULONG ReturnLength /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtSetInformationThread(
+ /*IN*/ HANDLE ThreadHandle,
+ /*IN*/ THREADINFOCLASS ThreadInformationClass,
+ /*IN*/ PVOID ThreadInformation,
+ /*IN*/ ULONG ThreadInformationLength);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwSetInformationThread(
+ /*IN*/ HANDLE ThreadHandle,
+ /*IN*/ THREADINFOCLASS ThreadInformationClass,
+ /*IN*/ PVOID ThreadInformation,
+ /*IN*/ ULONG ThreadInformationLength);
+
+typedef struct _THREAD_BASIC_INFORMATION {
+ NTSTATUS ExitStatus;
+ PNT_TIB TebBaseAddress;
+ CLIENT_ID ClientId;
+ KAFFINITY AffinityMask;
+ KPRIORITY Priority;
+ KPRIORITY BasePriority;
+} THREAD_BASIC_INFORMATION, *PTHREAD_BASIC_INFORMATION;
+
+typedef struct _KERNEL_USER_TIMES {
+ LARGE_INTEGER CreateTime;
+ LARGE_INTEGER ExitTime;
+ LARGE_INTEGER KernelTime;
+ LARGE_INTEGER UserTime;
+} KERNEL_USER_TIMES, *PKERNEL_USER_TIMES;
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtSuspendThread(
+ /*IN*/ HANDLE ThreadHandle,
+ /*OUT*/ PULONG PreviousSuspendCount /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwSuspendThread(
+ /*IN*/ HANDLE ThreadHandle,
+ /*OUT*/ PULONG PreviousSuspendCount /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtResumeThread(
+ /*IN*/ HANDLE ThreadHandle,
+ /*OUT*/ PULONG PreviousSuspendCount /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwResumeThread(
+ /*IN*/ HANDLE ThreadHandle,
+ /*OUT*/ PULONG PreviousSuspendCount /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtGetContextThread(
+ /*IN*/ HANDLE ThreadHandle,
+ /*OUT*/ PCONTEXT Context);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwGetContextThread(
+ /*IN*/ HANDLE ThreadHandle,
+ /*OUT*/ PCONTEXT Context);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtSetContextThread(
+ /*IN*/ HANDLE ThreadHandle,
+ /*IN*/ PCONTEXT Context);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwSetContextThread(
+ /*IN*/ HANDLE ThreadHandle,
+ /*IN*/ PCONTEXT Context);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtQueueApcThread(
+ /*IN*/ HANDLE ThreadHandle,
+ /*IN*/ PKNORMAL_ROUTINE ApcRoutine,
+ /*IN*/ PVOID ApcContext /*OPTIONAL*/,
+ /*IN*/ PVOID Argument1 /*OPTIONAL*/,
+ /*IN*/ PVOID Argument2 /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwQueueApcThread(
+ /*IN*/ HANDLE ThreadHandle,
+ /*IN*/ PKNORMAL_ROUTINE ApcRoutine,
+ /*IN*/ PVOID ApcContext /*OPTIONAL*/,
+ /*IN*/ PVOID Argument1 /*OPTIONAL*/,
+ /*IN*/ PVOID Argument2 /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtTestAlert(
+ VOID);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwTestAlert(
+ VOID);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtAlertThread(
+ /*IN*/ HANDLE ThreadHandle);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwAlertThread(
+ /*IN*/ HANDLE ThreadHandle);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtAlertResumeThread(
+ /*IN*/ HANDLE ThreadHandle,
+ /*OUT*/ PULONG PreviousSuspendCount /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwAlertResumeThread(
+ /*IN*/ HANDLE ThreadHandle,
+ /*OUT*/ PULONG PreviousSuspendCount /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtRegisterThreadTerminatePort(
+ /*IN*/ HANDLE PortHandle);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwRegisterThreadTerminatePort(
+ /*IN*/ HANDLE PortHandle);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtImpersonateThread(
+ /*IN*/ HANDLE ThreadHandle,
+ /*IN*/ HANDLE TargetThreadHandle,
+ /*IN*/ PSECURITY_QUALITY_OF_SERVICE SecurityQos);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwImpersonateThread(
+ /*IN*/ HANDLE ThreadHandle,
+ /*IN*/ HANDLE TargetThreadHandle,
+ /*IN*/ PSECURITY_QUALITY_OF_SERVICE SecurityQos);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtImpersonateAnonymousToken(
+ /*IN*/ HANDLE ThreadHandle);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwImpersonateAnonymousToken(
+ /*IN*/ HANDLE ThreadHandle);
+
+
+
+
+/* Processes */
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtCreateProcess(
+ /*OUT*/ PHANDLE ProcessHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,
+ /*IN*/ HANDLE InheritFromProcessHandle,
+ /*IN*/ BOOLEAN InheritHandles,
+ /*IN*/ HANDLE SectionHandle /*OPTIONAL*/,
+ /*IN*/ HANDLE DebugPort /*OPTIONAL*/,
+ /*IN*/ HANDLE ExceptionPort /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwCreateProcess(
+ /*OUT*/ PHANDLE ProcessHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,
+ /*IN*/ HANDLE InheritFromProcessHandle,
+ /*IN*/ BOOLEAN InheritHandles,
+ /*IN*/ HANDLE SectionHandle /*OPTIONAL*/,
+ /*IN*/ HANDLE DebugPort /*OPTIONAL*/,
+ /*IN*/ HANDLE ExceptionPort /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtTerminateProcess(
+ /*IN*/ HANDLE ProcessHandle /*OPTIONAL*/,
+ /*IN*/ NTSTATUS ExitStatus);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwTerminateProcess(
+ /*IN*/ HANDLE ProcessHandle /*OPTIONAL*/,
+ /*IN*/ NTSTATUS ExitStatus);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtQueryInformationProcess(
+ /*IN*/ HANDLE ProcessHandle,
+ /*IN*/ PROCESSINFOCLASS ProcessInformationClass,
+ /*OUT*/ PVOID ProcessInformation,
+ /*IN*/ ULONG ProcessInformationLength,
+ /*OUT*/ PULONG ReturnLength /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwQueryInformationProcess(
+ /*IN*/ HANDLE ProcessHandle,
+ /*IN*/ PROCESSINFOCLASS ProcessInformationClass,
+ /*OUT*/ PVOID ProcessInformation,
+ /*IN*/ ULONG ProcessInformationLength,
+ /*OUT*/ PULONG ReturnLength /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtSetInformationProcess(
+ /*IN*/ HANDLE ProcessHandle,
+ /*IN*/ PROCESSINFOCLASS ProcessInformationClass,
+ /*IN*/ PVOID ProcessInformation,
+ /*IN*/ ULONG ProcessInformationLength);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwSetInformationProcess(
+ /*IN*/ HANDLE ProcessHandle,
+ /*IN*/ PROCESSINFOCLASS ProcessInformationClass,
+ /*IN*/ PVOID ProcessInformation,
+ /*IN*/ ULONG ProcessInformationLength);
+
+typedef struct _PROCESS_BASIC_INFORMATION {
+ NTSTATUS ExitStatus;
+ PPEB PebBaseAddress;
+ KAFFINITY AffinityMask;
+ KPRIORITY BasePriority;
+ ULONG UniqueProcessId;
+ ULONG InheritedFromUniqueProcessId;
+} PROCESS_BASIC_INFORMATION, *PPROCESS_BASIC_INFORMATION;
+
+typedef struct _PROCESS_ACCESS_TOKEN {
+ HANDLE Token;
+ HANDLE Thread;
+} PROCESS_ACCESS_TOKEN, *PPROCESS_ACCESS_TOKEN;
+
+/* DefaultHardErrorMode constants */
+/* also in winbase.h */
+#define SEM_FAILCRITICALERRORS 0x0001
+#define SEM_NOGPFAULTERRORBOX 0x0002
+#define SEM_NOALIGNMENTFAULTEXCEPT 0x0004
+#define SEM_NOOPENFILEERRORBOX 0x8000
+/* end winbase.h */
+typedef struct _POOLED_USAGE_AND_LIMITS {
+ ULONG PeakPagedPoolUsage;
+ ULONG PagedPoolUsage;
+ ULONG PagedPoolLimit;
+ ULONG PeakNonPagedPoolUsage;
+ ULONG NonPagedPoolUsage;
+ ULONG NonPagedPoolLimit;
+ ULONG PeakPagefileUsage;
+ ULONG PagefileUsage;
+ ULONG PagefileLimit;
+} POOLED_USAGE_AND_LIMITS, *PPOOLED_USAGE_AND_LIMITS;
+
+typedef struct _PROCESS_WS_WATCH_INFORMATION {
+ PVOID FaultingPc;
+ PVOID FaultingVa;
+} PROCESS_WS_WATCH_INFORMATION, *PPROCESS_WS_WATCH_INFORMATION;
+
+/* PROCESS_PRIORITY_CLASS.PriorityClass constants */
+#define PC_IDLE 1
+#define PC_NORMAL 2
+#define PC_HIGH 3
+#define PC_REALTIME 4
+#define PC_BELOW_NORMAL 5
+#define PC_ABOVE_NORMAL 6
+
+typedef struct _PROCESS_PRIORITY_CLASS {
+ BOOLEAN Foreground;
+ UCHAR PriorityClass;
+} PROCESS_PRIORITY_CLASS, *PPROCESS_PRIORITY_CLASS;
+
+/* PROCESS_DEVICEMAP_INFORMATION.DriveType constants */
+#define DRIVE_UNKNOWN 0
+#define DRIVE_NO_ROOT_DIR 1
+#define DRIVE_REMOVABLE 2
+#define DRIVE_FIXED 3
+#define DRIVE_REMOTE 4
+#define DRIVE_CDROM 5
+#define DRIVE_RAMDISK 6
+
+typedef struct _PROCESS_DEVICEMAP_INFORMATION {
+ _ANONYMOUS_UNION union {
+ struct {
+ HANDLE DirectoryHandle;
+ } Set;
+ struct {
+ ULONG DriveMap;
+ UCHAR DriveType[32];
+ } Query;
+ } DUMMYUNIONNAME;
+} PROCESS_DEVICEMAP_INFORMATION, *PPROCESS_DEVICEMAP_INFORMATION;
+
+typedef struct _PROCESS_SESSION_INFORMATION {
+ ULONG SessionId;
+} PROCESS_SESSION_INFORMATION, *PPROCESS_SESSION_INFORMATION;
+
+typedef struct _RTL_USER_PROCESS_PARAMETERS {
+ ULONG AllocationSize;
+ ULONG Size;
+ ULONG Flags;
+ ULONG DebugFlags;
+ HANDLE hConsole;
+ ULONG ProcessGroup;
+ HANDLE hStdInput;
+ HANDLE hStdOutput;
+ HANDLE hStdError;
+ UNICODE_STRING CurrentDirectoryName;
+ HANDLE CurrentDirectoryHandle;
+ UNICODE_STRING DllPath;
+ UNICODE_STRING ImagePathName;
+ UNICODE_STRING CommandLine;
+ PWSTR Environment;
+ ULONG dwX;
+ ULONG dwY;
+ ULONG dwXSize;
+ ULONG dwYSize;
+ ULONG dwXCountChars;
+ ULONG dwYCountChars;
+ ULONG dwFillAttribute;
+ ULONG dwFlags;
+ ULONG wShowWindow;
+ UNICODE_STRING WindowTitle;
+ UNICODE_STRING DesktopInfo;
+ UNICODE_STRING ShellInfo;
+ UNICODE_STRING RuntimeInfo;
+} RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS;
+
+NTSTATUS
+NTAPI
+RtlCreateProcessParameters(
+ /*OUT*/ PRTL_USER_PROCESS_PARAMETERS *ProcessParameters,
+ /*IN*/ PUNICODE_STRING ImageFile,
+ /*IN*/ PUNICODE_STRING DllPath /*OPTIONAL*/,
+ /*IN*/ PUNICODE_STRING CurrentDirectory /*OPTIONAL*/,
+ /*IN*/ PUNICODE_STRING CommandLine /*OPTIONAL*/,
+ /*IN*/ PWSTR Environment /*OPTIONAL*/,
+ /*IN*/ PUNICODE_STRING WindowTitle /*OPTIONAL*/,
+ /*IN*/ PUNICODE_STRING DesktopInfo /*OPTIONAL*/,
+ /*IN*/ PUNICODE_STRING ShellInfo /*OPTIONAL*/,
+ /*IN*/ PUNICODE_STRING RuntimeInfo /*OPTIONAL*/);
+
+NTSTATUS
+NTAPI
+RtlDestroyProcessParameters(
+ /*IN*/ PRTL_USER_PROCESS_PARAMETERS ProcessParameters);
+
+typedef struct _DEBUG_BUFFER {
+ HANDLE SectionHandle;
+ PVOID SectionBase;
+ PVOID RemoteSectionBase;
+ ULONG SectionBaseDelta;
+ HANDLE EventPairHandle;
+ ULONG Unknown[2];
+ HANDLE RemoteThreadHandle;
+ ULONG InfoClassMask;
+ ULONG SizeOfInfo;
+ ULONG AllocatedSize;
+ ULONG SectionSize;
+ PVOID ModuleInformation;
+ PVOID BackTraceInformation;
+ PVOID HeapInformation;
+ PVOID LockInformation;
+ PVOID Reserved[8];
+} DEBUG_BUFFER, *PDEBUG_BUFFER;
+
+PDEBUG_BUFFER
+NTAPI
+RtlCreateQueryDebugBuffer(
+ /*IN*/ ULONG Size,
+ /*IN*/ BOOLEAN EventPair);
+
+/* RtlQueryProcessDebugInformation.DebugInfoClassMask constants */
+#define PDI_MODULES 0x01
+#define PDI_BACKTRACE 0x02
+#define PDI_HEAPS 0x04
+#define PDI_HEAP_TAGS 0x08
+#define PDI_HEAP_BLOCKS 0x10
+#define PDI_LOCKS 0x20
+
+NTSTATUS
+NTAPI
+RtlQueryProcessDebugInformation(
+ /*IN*/ ULONG ProcessId,
+ /*IN*/ ULONG DebugInfoClassMask,
+ /*IN OUT*/ PDEBUG_BUFFER DebugBuffer);
+
+NTSTATUS
+NTAPI
+RtlDestroyQueryDebugBuffer(
+ /*IN*/ PDEBUG_BUFFER DebugBuffer);
+
+/* DEBUG_MODULE_INFORMATION.Flags constants */
+#define LDRP_STATIC_LINK 0x00000002
+#define LDRP_IMAGE_DLL 0x00000004
+#define LDRP_LOAD_IN_PROGRESS 0x00001000
+#define LDRP_UNLOAD_IN_PROGRESS 0x00002000
+#define LDRP_ENTRY_PROCESSED 0x00004000
+#define LDRP_ENTRY_INSERTED 0x00008000
+#define LDRP_CURRENT_LOAD 0x00010000
+#define LDRP_FAILED_BUILTIN_LOAD 0x00020000
+#define LDRP_DONT_CALL_FOR_THREADS 0x00040000
+#define LDRP_PROCESS_ATTACH_CALLED 0x00080000
+#define LDRP_DEBUG_SYMBOLS_LOADED 0x00100000
+#define LDRP_IMAGE_NOT_AT_BASE 0x00200000
+#define LDRP_WX86_IGNORE_MACHINETYPE 0x00400000
+
+typedef struct _DEBUG_MODULE_INFORMATION {
+ ULONG Reserved[2];
+ ULONG Base;
+ ULONG Size;
+ ULONG Flags;
+ USHORT Index;
+ USHORT Unknown;
+ USHORT LoadCount;
+ USHORT ModuleNameOffset;
+ CHAR ImageName[256];
+} DEBUG_MODULE_INFORMATION, *PDEBUG_MODULE_INFORMATION;
+
+typedef struct _DEBUG_HEAP_INFORMATION {
+ ULONG Base;
+ ULONG Flags;
+ USHORT Granularity;
+ USHORT Unknown;
+ ULONG Allocated;
+ ULONG Committed;
+ ULONG TagCount;
+ ULONG BlockCount;
+ ULONG Reserved[7];
+ PVOID Tags;
+ PVOID Blocks;
+} DEBUG_HEAP_INFORMATION, *PDEBUG_HEAP_INFORMATION;
+
+typedef struct _DEBUG_LOCK_INFORMATION {
+ PVOID Address;
+ USHORT Type;
+ USHORT CreatorBackTraceIndex;
+ ULONG OwnerThreadId;
+ ULONG ActiveCount;
+ ULONG ContentionCount;
+ ULONG EntryCount;
+ ULONG RecursionCount;
+ ULONG NumberOfSharedWaiters;
+ ULONG NumberOfExclusiveWaiters;
+} DEBUG_LOCK_INFORMATION, *PDEBUG_LOCK_INFORMATION;
+
+
+
+/* Jobs */
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtCreateJobObject(
+ /*OUT*/ PHANDLE JobHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwCreateJobObject(
+ /*OUT*/ PHANDLE JobHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtOpenJobObject(
+ /*OUT*/ PHANDLE JobHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwOpenJobObject(
+ /*OUT*/ PHANDLE JobHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtTerminateJobObject(
+ /*IN*/ HANDLE JobHandle,
+ /*IN*/ NTSTATUS ExitStatus);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwTerminateJobObject(
+ /*IN*/ HANDLE JobHandle,
+ /*IN*/ NTSTATUS ExitStatus);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtAssignProcessToJobObject(
+ /*IN*/ HANDLE JobHandle,
+ /*IN*/ HANDLE ProcessHandle);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwAssignProcessToJobObject(
+ /*IN*/ HANDLE JobHandle,
+ /*IN*/ HANDLE ProcessHandle);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtQueryInformationJobObject(
+ /*IN*/ HANDLE JobHandle,
+ /*IN*/ JOBOBJECTINFOCLASS JobInformationClass,
+ /*OUT*/ PVOID JobInformation,
+ /*IN*/ ULONG JobInformationLength,
+ /*OUT*/ PULONG ReturnLength /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwQueryInformationJobObject(
+ /*IN*/ HANDLE JobHandle,
+ /*IN*/ JOBOBJECTINFOCLASS JobInformationClass,
+ /*OUT*/ PVOID JobInformation,
+ /*IN*/ ULONG JobInformationLength,
+ /*OUT*/ PULONG ReturnLength /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtSetInformationJobObject(
+ /*IN*/ HANDLE JobHandle,
+ /*IN*/ JOBOBJECTINFOCLASS JobInformationClass,
+ /*IN*/ PVOID JobInformation,
+ /*IN*/ ULONG JobInformationLength);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwSetInformationJobObject(
+ /*IN*/ HANDLE JobHandle,
+ /*IN*/ JOBOBJECTINFOCLASS JobInformationClass,
+ /*IN*/ PVOID JobInformation,
+ /*IN*/ ULONG JobInformationLength);
+
+
+/* Tokens */
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtCreateToken(
+ /*OUT*/ PHANDLE TokenHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,
+ /*IN*/ TOKEN_TYPE Type,
+ /*IN*/ PLUID AuthenticationId,
+ /*IN*/ PLARGE_INTEGER ExpirationTime,
+ /*IN*/ PTOKEN_USER User,
+ /*IN*/ PTOKEN_GROUPS Groups,
+ /*IN*/ PTOKEN_PRIVILEGES Privileges,
+ /*IN*/ PTOKEN_OWNER Owner,
+ /*IN*/ PTOKEN_PRIMARY_GROUP PrimaryGroup,
+ /*IN*/ PTOKEN_DEFAULT_DACL DefaultDacl,
+ /*IN*/ PTOKEN_SOURCE Source
+);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwCreateToken(
+ /*OUT*/ PHANDLE TokenHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,
+ /*IN*/ TOKEN_TYPE Type,
+ /*IN*/ PLUID AuthenticationId,
+ /*IN*/ PLARGE_INTEGER ExpirationTime,
+ /*IN*/ PTOKEN_USER User,
+ /*IN*/ PTOKEN_GROUPS Groups,
+ /*IN*/ PTOKEN_PRIVILEGES Privileges,
+ /*IN*/ PTOKEN_OWNER Owner,
+ /*IN*/ PTOKEN_PRIMARY_GROUP PrimaryGroup,
+ /*IN*/ PTOKEN_DEFAULT_DACL DefaultDacl,
+ /*IN*/ PTOKEN_SOURCE Source
+);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtOpenProcessToken(
+ /*IN*/ HANDLE ProcessHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*OUT*/ PHANDLE TokenHandle);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwOpenProcessToken(
+ /*IN*/ HANDLE ProcessHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*OUT*/ PHANDLE TokenHandle);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtOpenThreadToken(
+ /*IN*/ HANDLE ThreadHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ BOOLEAN OpenAsSelf,
+ /*OUT*/ PHANDLE TokenHandle);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwOpenThreadToken(
+ /*IN*/ HANDLE ThreadHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ BOOLEAN OpenAsSelf,
+ /*OUT*/ PHANDLE TokenHandle);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtDuplicateToken(
+ /*IN*/ HANDLE ExistingTokenHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,
+ /*IN*/ BOOLEAN EffectiveOnly,
+ /*IN*/ TOKEN_TYPE TokenType,
+ /*OUT*/ PHANDLE NewTokenHandle);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwDuplicateToken(
+ /*IN*/ HANDLE ExistingTokenHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,
+ /*IN*/ BOOLEAN EffectiveOnly,
+ /*IN*/ TOKEN_TYPE TokenType,
+ /*OUT*/ PHANDLE NewTokenHandle);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtFilterToken(
+ /*IN*/ HANDLE ExistingTokenHandle,
+ /*IN*/ ULONG Flags,
+ /*IN*/ PTOKEN_GROUPS SidsToDisable,
+ /*IN*/ PTOKEN_PRIVILEGES PrivilegesToDelete,
+ /*IN*/ PTOKEN_GROUPS SidsToRestricted,
+ /*OUT*/ PHANDLE NewTokenHandle);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwFilterToken(
+ /*IN*/ HANDLE ExistingTokenHandle,
+ /*IN*/ ULONG Flags,
+ /*IN*/ PTOKEN_GROUPS SidsToDisable,
+ /*IN*/ PTOKEN_PRIVILEGES PrivilegesToDelete,
+ /*IN*/ PTOKEN_GROUPS SidsToRestricted,
+ /*OUT*/ PHANDLE NewTokenHandle);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtAdjustPrivilegesToken(
+ /*IN*/ HANDLE TokenHandle,
+ /*IN*/ BOOLEAN DisableAllPrivileges,
+ /*IN*/ PTOKEN_PRIVILEGES NewState,
+ /*IN*/ ULONG BufferLength,
+ /*OUT*/ PTOKEN_PRIVILEGES PreviousState /*OPTIONAL*/,
+ /*OUT*/ PULONG ReturnLength);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwAdjustPrivilegesToken(
+ /*IN*/ HANDLE TokenHandle,
+ /*IN*/ BOOLEAN DisableAllPrivileges,
+ /*IN*/ PTOKEN_PRIVILEGES NewState,
+ /*IN*/ ULONG BufferLength,
+ /*OUT*/ PTOKEN_PRIVILEGES PreviousState /*OPTIONAL*/,
+ /*OUT*/ PULONG ReturnLength);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtAdjustGroupsToken(
+ /*IN*/ HANDLE TokenHandle,
+ /*IN*/ BOOLEAN ResetToDefault,
+ /*IN*/ PTOKEN_GROUPS NewState,
+ /*IN*/ ULONG BufferLength,
+ /*OUT*/ PTOKEN_GROUPS PreviousState /*OPTIONAL*/,
+ /*OUT*/ PULONG ReturnLength);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwAdjustGroupsToken(
+ /*IN*/ HANDLE TokenHandle,
+ /*IN*/ BOOLEAN ResetToDefault,
+ /*IN*/ PTOKEN_GROUPS NewState,
+ /*IN*/ ULONG BufferLength,
+ /*OUT*/ PTOKEN_GROUPS PreviousState /*OPTIONAL*/,
+ /*OUT*/ PULONG ReturnLength);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtQueryInformationToken(
+ /*IN*/ HANDLE TokenHandle,
+ /*IN*/ TOKEN_INFORMATION_CLASS TokenInformationClass,
+ /*OUT*/ PVOID TokenInformation,
+ /*IN*/ ULONG TokenInformationLength,
+ /*OUT*/ PULONG ReturnLength);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwQueryInformationToken(
+ /*IN*/ HANDLE TokenHandle,
+ /*IN*/ TOKEN_INFORMATION_CLASS TokenInformationClass,
+ /*OUT*/ PVOID TokenInformation,
+ /*IN*/ ULONG TokenInformationLength,
+ /*OUT*/ PULONG ReturnLength);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtSetInformationToken(
+ /*IN*/ HANDLE TokenHandle,
+ /*IN*/ TOKEN_INFORMATION_CLASS TokenInformationClass,
+ /*IN*/ PVOID TokenInformation,
+ /*IN*/ ULONG TokenInformationLength);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwSetInformationToken(
+ /*IN*/ HANDLE TokenHandle,
+ /*IN*/ TOKEN_INFORMATION_CLASS TokenInformationClass,
+ /*IN*/ PVOID TokenInformation,
+ /*IN*/ ULONG TokenInformationLength);
+
+
+
+
+/* Time */
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtQuerySystemTime(
+ /*OUT*/ PLARGE_INTEGER CurrentTime);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwQuerySystemTime(
+ /*OUT*/ PLARGE_INTEGER CurrentTime);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtSetSystemTime(
+ /*IN*/ PLARGE_INTEGER NewTime,
+ /*OUT*/ PLARGE_INTEGER OldTime /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwSetSystemTime(
+ /*IN*/ PLARGE_INTEGER NewTime,
+ /*OUT*/ PLARGE_INTEGER OldTime /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtQueryPerformanceCounter(
+ /*OUT*/ PLARGE_INTEGER PerformanceCount,
+ /*OUT*/ PLARGE_INTEGER PerformanceFrequency /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwQueryPerformanceCounter(
+ /*OUT*/ PLARGE_INTEGER PerformanceCount,
+ /*OUT*/ PLARGE_INTEGER PerformanceFrequency /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtQueryTimerResolution(
+ /*OUT*/ PULONG CoarsestResolution,
+ /*OUT*/ PULONG FinestResolution,
+ /*OUT*/ PULONG ActualResolution);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwQueryTimerResolution(
+ /*OUT*/ PULONG CoarsestResolution,
+ /*OUT*/ PULONG FinestResolution,
+ /*OUT*/ PULONG ActualResolution);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtDelayExecution(
+ /*IN*/ BOOLEAN Alertable,
+ /*IN*/ PLARGE_INTEGER Interval);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwDelayExecution(
+ /*IN*/ BOOLEAN Alertable,
+ /*IN*/ PLARGE_INTEGER Interval);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtYieldExecution(
+ VOID);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwYieldExecution(
+ VOID);
+
+NTOSAPI
+ULONG
+NTAPI
+NtGetTickCount(
+ VOID);
+
+NTOSAPI
+ULONG
+NTAPI
+ZwGetTickCount(
+ VOID);
+
+
+
+
+/* Execution profiling */
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtCreateProfile(
+ /*OUT*/ PHANDLE ProfileHandle,
+ /*IN*/ HANDLE ProcessHandle,
+ /*IN*/ PVOID Base,
+ /*IN*/ ULONG Size,
+ /*IN*/ ULONG BucketShift,
+ /*IN*/ PULONG Buffer,
+ /*IN*/ ULONG BufferLength,
+ /*IN*/ KPROFILE_SOURCE Source,
+ /*IN*/ ULONG ProcessorMask);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwCreateProfile(
+ /*OUT*/ PHANDLE ProfileHandle,
+ /*IN*/ HANDLE ProcessHandle,
+ /*IN*/ PVOID Base,
+ /*IN*/ ULONG Size,
+ /*IN*/ ULONG BucketShift,
+ /*IN*/ PULONG Buffer,
+ /*IN*/ ULONG BufferLength,
+ /*IN*/ KPROFILE_SOURCE Source,
+ /*IN*/ ULONG ProcessorMask);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtSetIntervalProfile(
+ /*IN*/ ULONG Interval,
+ /*IN*/ KPROFILE_SOURCE Source);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwSetIntervalProfile(
+ /*IN*/ ULONG Interval,
+ /*IN*/ KPROFILE_SOURCE Source);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtQueryIntervalProfile(
+ /*IN*/ KPROFILE_SOURCE Source,
+ /*OUT*/ PULONG Interval);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwQueryIntervalProfile(
+ /*IN*/ KPROFILE_SOURCE Source,
+ /*OUT*/ PULONG Interval);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtStartProfile(
+ /*IN*/ HANDLE ProfileHandle);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwStartProfile(
+ /*IN*/ HANDLE ProfileHandle);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtStopProfile(
+ /*IN*/ HANDLE ProfileHandle);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwStopProfile(
+ /*IN*/ HANDLE ProfileHandle);
+
+/* Local Procedure Call (LPC) */
+
+typedef struct _LPC_MESSAGE {
+ USHORT DataSize;
+ USHORT MessageSize;
+ USHORT MessageType;
+ USHORT VirtualRangesOffset;
+ CLIENT_ID ClientId;
+ ULONG MessageId;
+ ULONG SectionSize;
+ UCHAR Data[ANYSIZE_ARRAY];
+} LPC_MESSAGE, *PLPC_MESSAGE;
+
+#define LPC_MESSAGE_BASE_SIZE 24
+
+typedef enum _LPC_TYPE {
+ LPC_NEW_MESSAGE,
+ LPC_REQUEST,
+ LPC_REPLY,
+ LPC_DATAGRAM,
+ LPC_LOST_REPLY,
+ LPC_PORT_CLOSED,
+ LPC_CLIENT_DIED,
+ LPC_EXCEPTION,
+ LPC_DEBUG_EVENT,
+ LPC_ERROR_EVENT,
+ LPC_CONNECTION_REQUEST,
+ LPC_CONNECTION_REFUSED,
+ LPC_MAXIMUM
+} LPC_TYPE;
+
+typedef struct _LPC_SECTION_WRITE {
+ ULONG Length;
+ HANDLE SectionHandle;
+ ULONG SectionOffset;
+ ULONG ViewSize;
+ PVOID ViewBase;
+ PVOID TargetViewBase;
+} LPC_SECTION_WRITE, *PLPC_SECTION_WRITE;
+
+typedef struct _LPC_SECTION_READ {
+ ULONG Length;
+ ULONG ViewSize;
+ PVOID ViewBase;
+} LPC_SECTION_READ, *PLPC_SECTION_READ;
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtCreatePort(
+ /*OUT*/ PHANDLE PortHandle,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,
+ /*IN*/ ULONG MaxDataSize,
+ /*IN*/ ULONG MaxMessageSize,
+ /*IN*/ ULONG Reserved);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwCreatePort(
+ /*OUT*/ PHANDLE PortHandle,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,
+ /*IN*/ ULONG MaxDataSize,
+ /*IN*/ ULONG MaxMessageSize,
+ /*IN*/ ULONG Reserved);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtCreateWaitablePort(
+ /*OUT*/ PHANDLE PortHandle,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,
+ /*IN*/ ULONG MaxDataSize,
+ /*IN*/ ULONG MaxMessageSize,
+ /*IN*/ ULONG Reserved);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwCreateWaitablePort(
+ /*OUT*/ PHANDLE PortHandle,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,
+ /*IN*/ ULONG MaxDataSize,
+ /*IN*/ ULONG MaxMessageSize,
+ /*IN*/ ULONG Reserved);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtConnectPort(
+ /*OUT*/ PHANDLE PortHandle,
+ /*IN*/ PUNICODE_STRING PortName,
+ /*IN*/ PSECURITY_QUALITY_OF_SERVICE SecurityQos,
+ /*IN OUT*/ PLPC_SECTION_WRITE WriteSection /*OPTIONAL*/,
+ /*IN OUT*/ PLPC_SECTION_READ ReadSection /*OPTIONAL*/,
+ /*OUT*/ PULONG MaxMessageSize /*OPTIONAL*/,
+ /*IN OUT*/ PVOID ConnectData /*OPTIONAL*/,
+ /*IN OUT*/ PULONG ConnectDataLength /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwConnectPort(
+ /*OUT*/ PHANDLE PortHandle,
+ /*IN*/ PUNICODE_STRING PortName,
+ /*IN*/ PSECURITY_QUALITY_OF_SERVICE SecurityQos,
+ /*IN OUT*/ PLPC_SECTION_WRITE WriteSection /*OPTIONAL*/,
+ /*IN OUT*/ PLPC_SECTION_READ ReadSection /*OPTIONAL*/,
+ /*OUT*/ PULONG MaxMessageSize /*OPTIONAL*/,
+ /*IN OUT*/ PVOID ConnectData /*OPTIONAL*/,
+ /*IN OUT*/ PULONG ConnectDataLength /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtListenPort(
+ /*IN*/ HANDLE PortHandle,
+ /*OUT*/ PLPC_MESSAGE Message);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwListenPort(
+ /*IN*/ HANDLE PortHandle,
+ /*OUT*/ PLPC_MESSAGE Message);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtAcceptConnectPort(
+ /*OUT*/ PHANDLE PortHandle,
+ /*IN*/ ULONG PortIdentifier,
+ /*IN*/ PLPC_MESSAGE Message,
+ /*IN*/ BOOLEAN Accept,
+ /*IN OUT*/ PLPC_SECTION_WRITE WriteSection /*OPTIONAL*/,
+ /*IN OUT*/ PLPC_SECTION_READ ReadSection /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwAcceptConnectPort(
+ /*OUT*/ PHANDLE PortHandle,
+ /*IN*/ ULONG PortIdentifier,
+ /*IN*/ PLPC_MESSAGE Message,
+ /*IN*/ BOOLEAN Accept,
+ /*IN OUT*/ PLPC_SECTION_WRITE WriteSection /*OPTIONAL*/,
+ /*IN OUT*/ PLPC_SECTION_READ ReadSection /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtCompleteConnectPort(
+ /*IN*/ HANDLE PortHandle);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwCompleteConnectPort(
+ /*IN*/ HANDLE PortHandle);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtRequestPort(
+ /*IN*/ HANDLE PortHandle,
+ /*IN*/ PLPC_MESSAGE RequestMessage);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwRequestPort(
+ /*IN*/ HANDLE PortHandle,
+ /*IN*/ PLPC_MESSAGE RequestMessage);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtRequestWaitReplyPort(
+ /*IN*/ HANDLE PortHandle,
+ /*IN*/ PLPC_MESSAGE RequestMessage,
+ /*OUT*/ PLPC_MESSAGE ReplyMessage);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwRequestWaitReplyPort(
+ /*IN*/ HANDLE PortHandle,
+ /*IN*/ PLPC_MESSAGE RequestMessage,
+ /*OUT*/ PLPC_MESSAGE ReplyMessage);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtReplyPort(
+ /*IN*/ HANDLE PortHandle,
+ /*IN*/ PLPC_MESSAGE ReplyMessage);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwReplyPort(
+ /*IN*/ HANDLE PortHandle,
+ /*IN*/ PLPC_MESSAGE ReplyMessage);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtReplyWaitReplyPort(
+ /*IN*/ HANDLE PortHandle,
+ /*IN OUT*/ PLPC_MESSAGE ReplyMessage);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwReplyWaitReplyPort(
+ /*IN*/ HANDLE PortHandle,
+ /*IN OUT*/ PLPC_MESSAGE ReplyMessage);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtReplyWaitReceivePort(
+ /*IN*/ HANDLE PortHandle,
+ /*OUT*/ PULONG PortIdentifier /*OPTIONAL*/,
+ /*IN*/ PLPC_MESSAGE ReplyMessage /*OPTIONAL*/,
+ /*OUT*/ PLPC_MESSAGE Message);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwReplyWaitReceivePort(
+ /*IN*/ HANDLE PortHandle,
+ /*OUT*/ PULONG PortIdentifier /*OPTIONAL*/,
+ /*IN*/ PLPC_MESSAGE ReplyMessage /*OPTIONAL*/,
+ /*OUT*/ PLPC_MESSAGE Message);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtReplyWaitReceivePortEx(
+ /*IN*/ HANDLE PortHandle,
+ /*OUT*/ PULONG PortIdentifier /*OPTIONAL*/,
+ /*IN*/ PLPC_MESSAGE ReplyMessage /*OPTIONAL*/,
+ /*OUT*/ PLPC_MESSAGE Message,
+ /*IN*/ PLARGE_INTEGER Timeout);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwReplyWaitReceivePortEx(
+ /*IN*/ HANDLE PortHandle,
+ /*OUT*/ PULONG PortIdentifier /*OPTIONAL*/,
+ /*IN*/ PLPC_MESSAGE ReplyMessage /*OPTIONAL*/,
+ /*OUT*/ PLPC_MESSAGE Message,
+ /*IN*/ PLARGE_INTEGER Timeout);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtReadRequestData(
+ /*IN*/ HANDLE PortHandle,
+ /*IN*/ PLPC_MESSAGE Message,
+ /*IN*/ ULONG Index,
+ /*OUT*/ PVOID Buffer,
+ /*IN*/ ULONG BufferLength,
+ /*OUT*/ PULONG ReturnLength /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwReadRequestData(
+ /*IN*/ HANDLE PortHandle,
+ /*IN*/ PLPC_MESSAGE Message,
+ /*IN*/ ULONG Index,
+ /*OUT*/ PVOID Buffer,
+ /*IN*/ ULONG BufferLength,
+ /*OUT*/ PULONG ReturnLength /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtWriteRequestData(
+ /*IN*/ HANDLE PortHandle,
+ /*IN*/ PLPC_MESSAGE Message,
+ /*IN*/ ULONG Index,
+ /*IN*/ PVOID Buffer,
+ /*IN*/ ULONG BufferLength,
+ /*OUT*/ PULONG ReturnLength /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwWriteRequestData(
+ /*IN*/ HANDLE PortHandle,
+ /*IN*/ PLPC_MESSAGE Message,
+ /*IN*/ ULONG Index,
+ /*IN*/ PVOID Buffer,
+ /*IN*/ ULONG BufferLength,
+ /*OUT*/ PULONG ReturnLength /*OPTIONAL*/);
+
+typedef enum _PORT_INFORMATION_CLASS {
+ PortBasicInformation
+} PORT_INFORMATION_CLASS;
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtQueryInformationPort(
+ /*IN*/ HANDLE PortHandle,
+ /*IN*/ PORT_INFORMATION_CLASS PortInformationClass,
+ /*OUT*/ PVOID PortInformation,
+ /*IN*/ ULONG PortInformationLength,
+ /*OUT*/ PULONG ReturnLength /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwQueryInformationPort(
+ /*IN*/ HANDLE PortHandle,
+ /*IN*/ PORT_INFORMATION_CLASS PortInformationClass,
+ /*OUT*/ PVOID PortInformation,
+ /*IN*/ ULONG PortInformationLength,
+ /*OUT*/ PULONG ReturnLength /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtImpersonateClientOfPort(
+ /*IN*/ HANDLE PortHandle,
+ /*IN*/ PLPC_MESSAGE Message);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwImpersonateClientOfPort(
+ /*IN*/ HANDLE PortHandle,
+ /*IN*/ PLPC_MESSAGE Message);
+
+
+
+
+/* Files */
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtDeleteFile(
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwDeleteFile(
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtFlushBuffersFile(
+ /*IN*/ HANDLE FileHandle,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwFlushBuffersFile(
+ /*IN*/ HANDLE FileHandle,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtCancelIoFile(
+ /*IN*/ HANDLE FileHandle,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwCancelIoFile(
+ /*IN*/ HANDLE FileHandle,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtReadFileScatter(
+ /*IN*/ HANDLE FileHandle,
+ /*IN*/ HANDLE Event /*OPTIONAL*/,
+ /*IN*/ PIO_APC_ROUTINE ApcRoutine /*OPTIONAL*/,
+ /*IN*/ PVOID ApcContext /*OPTIONAL*/,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock,
+ /*IN*/ PFILE_SEGMENT_ELEMENT Buffer,
+ /*IN*/ ULONG Length,
+ /*IN*/ PLARGE_INTEGER ByteOffset /*OPTIONAL*/,
+ /*IN*/ PULONG Key /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwReadFileScatter(
+ /*IN*/ HANDLE FileHandle,
+ /*IN*/ HANDLE Event /*OPTIONAL*/,
+ /*IN*/ PIO_APC_ROUTINE ApcRoutine /*OPTIONAL*/,
+ /*IN*/ PVOID ApcContext /*OPTIONAL*/,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock,
+ /*IN*/ PFILE_SEGMENT_ELEMENT Buffer,
+ /*IN*/ ULONG Length,
+ /*IN*/ PLARGE_INTEGER ByteOffset /*OPTIONAL*/,
+ /*IN*/ PULONG Key /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtWriteFileGather(
+ /*IN*/ HANDLE FileHandle,
+ /*IN*/ HANDLE Event /*OPTIONAL*/,
+ /*IN*/ PIO_APC_ROUTINE ApcRoutine /*OPTIONAL*/,
+ /*IN*/ PVOID ApcContext /*OPTIONAL*/,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock,
+ /*IN*/ PFILE_SEGMENT_ELEMENT Buffer,
+ /*IN*/ ULONG Length,
+ /*IN*/ PLARGE_INTEGER ByteOffset /*OPTIONAL*/,
+ /*IN*/ PULONG Key /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwWriteFileGather(
+ /*IN*/ HANDLE FileHandle,
+ /*IN*/ HANDLE Event /*OPTIONAL*/,
+ /*IN*/ PIO_APC_ROUTINE ApcRoutine /*OPTIONAL*/,
+ /*IN*/ PVOID ApcContext /*OPTIONAL*/,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock,
+ /*IN*/ PFILE_SEGMENT_ELEMENT Buffer,
+ /*IN*/ ULONG Length,
+ /*IN*/ PLARGE_INTEGER ByteOffset /*OPTIONAL*/,
+ /*IN*/ PULONG Key /*OPTIONAL*/);
+
+
+
+
+/* Registry keys */
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtSaveKey(
+ /*IN*/ HANDLE KeyHandle,
+ /*IN*/ HANDLE FileHandle);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwSaveKey(
+ /*IN*/ HANDLE KeyHandle,
+ /*IN*/ HANDLE FileHandle);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtSaveMergedKeys(
+ /*IN*/ HANDLE KeyHandle1,
+ /*IN*/ HANDLE KeyHandle2,
+ /*IN*/ HANDLE FileHandle);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwSaveMergedKeys(
+ /*IN*/ HANDLE KeyHandle1,
+ /*IN*/ HANDLE KeyHandle2,
+ /*IN*/ HANDLE FileHandle);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtRestoreKey(
+ /*IN*/ HANDLE KeyHandle,
+ /*IN*/ HANDLE FileHandle,
+ /*IN*/ ULONG Flags);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwRestoreKey(
+ /*IN*/ HANDLE KeyHandle,
+ /*IN*/ HANDLE FileHandle,
+ /*IN*/ ULONG Flags);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtLoadKey(
+ /*IN*/ POBJECT_ATTRIBUTES KeyObjectAttributes,
+ /*IN*/ POBJECT_ATTRIBUTES FileObjectAttributes);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwLoadKey(
+ /*IN*/ POBJECT_ATTRIBUTES KeyObjectAttributes,
+ /*IN*/ POBJECT_ATTRIBUTES FileObjectAttributes);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtLoadKey2(
+ /*IN*/ POBJECT_ATTRIBUTES KeyObjectAttributes,
+ /*IN*/ POBJECT_ATTRIBUTES FileObjectAttributes,
+ /*IN*/ ULONG Flags);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwLoadKey2(
+ /*IN*/ POBJECT_ATTRIBUTES KeyObjectAttributes,
+ /*IN*/ POBJECT_ATTRIBUTES FileObjectAttributes,
+ /*IN*/ ULONG Flags);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtUnloadKey(
+ /*IN*/ POBJECT_ATTRIBUTES KeyObjectAttributes);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwUnloadKey(
+ /*IN*/ POBJECT_ATTRIBUTES KeyObjectAttributes);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtQueryOpenSubKeys(
+ /*IN*/ POBJECT_ATTRIBUTES KeyObjectAttributes,
+ /*OUT*/ PULONG NumberOfKeys);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwQueryOpenSubKeys(
+ /*IN*/ POBJECT_ATTRIBUTES KeyObjectAttributes,
+ /*OUT*/ PULONG NumberOfKeys);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtReplaceKey(
+ /*IN*/ POBJECT_ATTRIBUTES NewFileObjectAttributes,
+ /*IN*/ HANDLE KeyHandle,
+ /*IN*/ POBJECT_ATTRIBUTES OldFileObjectAttributes);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwReplaceKey(
+ /*IN*/ POBJECT_ATTRIBUTES NewFileObjectAttributes,
+ /*IN*/ HANDLE KeyHandle,
+ /*IN*/ POBJECT_ATTRIBUTES OldFileObjectAttributes);
+
+typedef enum _KEY_SET_INFORMATION_CLASS {
+ KeyLastWriteTimeInformation
+} KEY_SET_INFORMATION_CLASS;
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtSetInformationKey(
+ /*IN*/ HANDLE KeyHandle,
+ /*IN*/ KEY_SET_INFORMATION_CLASS KeyInformationClass,
+ /*IN*/ PVOID KeyInformation,
+ /*IN*/ ULONG KeyInformationLength);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwSetInformationKey(
+ /*IN*/ HANDLE KeyHandle,
+ /*IN*/ KEY_SET_INFORMATION_CLASS KeyInformationClass,
+ /*IN*/ PVOID KeyInformation,
+ /*IN*/ ULONG KeyInformationLength);
+
+typedef struct _KEY_LAST_WRITE_TIME_INFORMATION {
+ LARGE_INTEGER LastWriteTime;
+} KEY_LAST_WRITE_TIME_INFORMATION, *PKEY_LAST_WRITE_TIME_INFORMATION;
+
+typedef struct _KEY_NAME_INFORMATION {
+ ULONG NameLength;
+ WCHAR Name[1];
+} KEY_NAME_INFORMATION, *PKEY_NAME_INFORMATION;
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtNotifyChangeKey(
+ /*IN*/ HANDLE KeyHandle,
+ /*IN*/ HANDLE EventHandle /*OPTIONAL*/,
+ /*IN*/ PIO_APC_ROUTINE ApcRoutine /*OPTIONAL*/,
+ /*IN*/ PVOID ApcContext /*OPTIONAL*/,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock,
+ /*IN*/ ULONG NotifyFilter,
+ /*IN*/ BOOLEAN WatchSubtree,
+ /*IN*/ PVOID Buffer,
+ /*IN*/ ULONG BufferLength,
+ /*IN*/ BOOLEAN Asynchronous);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwNotifyChangeKey(
+ /*IN*/ HANDLE KeyHandle,
+ /*IN*/ HANDLE EventHandle /*OPTIONAL*/,
+ /*IN*/ PIO_APC_ROUTINE ApcRoutine /*OPTIONAL*/,
+ /*IN*/ PVOID ApcContext /*OPTIONAL*/,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock,
+ /*IN*/ ULONG NotifyFilter,
+ /*IN*/ BOOLEAN WatchSubtree,
+ /*IN*/ PVOID Buffer,
+ /*IN*/ ULONG BufferLength,
+ /*IN*/ BOOLEAN Asynchronous);
+
+/* ZwNotifyChangeMultipleKeys.Flags constants */
+#define REG_MONITOR_SINGLE_KEY 0x00
+#define REG_MONITOR_SECOND_KEY 0x01
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtNotifyChangeMultipleKeys(
+ /*IN*/ HANDLE KeyHandle,
+ /*IN*/ ULONG Flags,
+ /*IN*/ POBJECT_ATTRIBUTES KeyObjectAttributes,
+ /*IN*/ HANDLE EventHandle /*OPTIONAL*/,
+ /*IN*/ PIO_APC_ROUTINE ApcRoutine /*OPTIONAL*/,
+ /*IN*/ PVOID ApcContext /*OPTIONAL*/,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock,
+ /*IN*/ ULONG NotifyFilter,
+ /*IN*/ BOOLEAN WatchSubtree,
+ /*IN*/ PVOID Buffer,
+ /*IN*/ ULONG BufferLength,
+ /*IN*/ BOOLEAN Asynchronous);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwNotifyChangeMultipleKeys(
+ /*IN*/ HANDLE KeyHandle,
+ /*IN*/ ULONG Flags,
+ /*IN*/ POBJECT_ATTRIBUTES KeyObjectAttributes,
+ /*IN*/ HANDLE EventHandle /*OPTIONAL*/,
+ /*IN*/ PIO_APC_ROUTINE ApcRoutine /*OPTIONAL*/,
+ /*IN*/ PVOID ApcContext /*OPTIONAL*/,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock,
+ /*IN*/ ULONG NotifyFilter,
+ /*IN*/ BOOLEAN WatchSubtree,
+ /*IN*/ PVOID Buffer,
+ /*IN*/ ULONG BufferLength,
+ /*IN*/ BOOLEAN Asynchronous);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtQueryMultipleValueKey(
+ /*IN*/ HANDLE KeyHandle,
+ /*IN OUT*/ PKEY_VALUE_ENTRY ValueList,
+ /*IN*/ ULONG NumberOfValues,
+ /*OUT*/ PVOID Buffer,
+ /*IN OUT*/ PULONG Length,
+ /*OUT*/ PULONG ReturnLength);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwQueryMultipleValueKey(
+ /*IN*/ HANDLE KeyHandle,
+ /*IN OUT*/ PKEY_VALUE_ENTRY ValueList,
+ /*IN*/ ULONG NumberOfValues,
+ /*OUT*/ PVOID Buffer,
+ /*IN OUT*/ PULONG Length,
+ /*OUT*/ PULONG ReturnLength);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtInitializeRegistry(
+ /*IN*/ BOOLEAN Setup);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwInitializeRegistry(
+ /*IN*/ BOOLEAN Setup);
+
+
+
+
+/* Security and auditing */
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtPrivilegeCheck(
+ /*IN*/ HANDLE TokenHandle,
+ /*IN*/ PPRIVILEGE_SET RequiredPrivileges,
+ /*OUT*/ PBOOLEAN Result);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwPrivilegeCheck(
+ /*IN*/ HANDLE TokenHandle,
+ /*IN*/ PPRIVILEGE_SET RequiredPrivileges,
+ /*OUT*/ PBOOLEAN Result);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtPrivilegeObjectAuditAlarm(
+ /*IN*/ PUNICODE_STRING SubsystemName,
+ /*IN*/ PVOID HandleId,
+ /*IN*/ HANDLE TokenHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ PPRIVILEGE_SET Privileges,
+ /*IN*/ BOOLEAN AccessGranted);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwPrivilegeObjectAuditAlarm(
+ /*IN*/ PUNICODE_STRING SubsystemName,
+ /*IN*/ PVOID HandleId,
+ /*IN*/ HANDLE TokenHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ PPRIVILEGE_SET Privileges,
+ /*IN*/ BOOLEAN AccessGranted);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtAccessCheck(
+ /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor,
+ /*IN*/ HANDLE TokenHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ PGENERIC_MAPPING GenericMapping,
+ /*IN*/ PPRIVILEGE_SET PrivilegeSet,
+ /*IN*/ PULONG PrivilegeSetLength,
+ /*OUT*/ PACCESS_MASK GrantedAccess,
+ /*OUT*/ PBOOLEAN AccessStatus);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwAccessCheck(
+ /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor,
+ /*IN*/ HANDLE TokenHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ PGENERIC_MAPPING GenericMapping,
+ /*IN*/ PPRIVILEGE_SET PrivilegeSet,
+ /*IN*/ PULONG PrivilegeSetLength,
+ /*OUT*/ PACCESS_MASK GrantedAccess,
+ /*OUT*/ PBOOLEAN AccessStatus);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtAccessCheckAndAuditAlarm(
+ /*IN*/ PUNICODE_STRING SubsystemName,
+ /*IN*/ PVOID HandleId,
+ /*IN*/ PUNICODE_STRING ObjectTypeName,
+ /*IN*/ PUNICODE_STRING ObjectName,
+ /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ PGENERIC_MAPPING GenericMapping,
+ /*IN*/ BOOLEAN ObjectCreation,
+ /*OUT*/ PACCESS_MASK GrantedAccess,
+ /*OUT*/ PBOOLEAN AccessStatus,
+ /*OUT*/ PBOOLEAN GenerateOnClose);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwAccessCheckAndAuditAlarm(
+ /*IN*/ PUNICODE_STRING SubsystemName,
+ /*IN*/ PVOID HandleId,
+ /*IN*/ PUNICODE_STRING ObjectTypeName,
+ /*IN*/ PUNICODE_STRING ObjectName,
+ /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ PGENERIC_MAPPING GenericMapping,
+ /*IN*/ BOOLEAN ObjectCreation,
+ /*OUT*/ PACCESS_MASK GrantedAccess,
+ /*OUT*/ PBOOLEAN AccessStatus,
+ /*OUT*/ PBOOLEAN GenerateOnClose);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtAccessCheckByType(
+ /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor,
+ /*IN*/ PSID PrincipalSelfSid,
+ /*IN*/ HANDLE TokenHandle,
+ /*IN*/ ULONG DesiredAccess,
+ /*IN*/ POBJECT_TYPE_LIST ObjectTypeList,
+ /*IN*/ ULONG ObjectTypeListLength,
+ /*IN*/ PGENERIC_MAPPING GenericMapping,
+ /*IN*/ PPRIVILEGE_SET PrivilegeSet,
+ /*IN*/ PULONG PrivilegeSetLength,
+ /*OUT*/ PACCESS_MASK GrantedAccess,
+ /*OUT*/ PULONG AccessStatus);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwAccessCheckByType(
+ /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor,
+ /*IN*/ PSID PrincipalSelfSid,
+ /*IN*/ HANDLE TokenHandle,
+ /*IN*/ ULONG DesiredAccess,
+ /*IN*/ POBJECT_TYPE_LIST ObjectTypeList,
+ /*IN*/ ULONG ObjectTypeListLength,
+ /*IN*/ PGENERIC_MAPPING GenericMapping,
+ /*IN*/ PPRIVILEGE_SET PrivilegeSet,
+ /*IN*/ PULONG PrivilegeSetLength,
+ /*OUT*/ PACCESS_MASK GrantedAccess,
+ /*OUT*/ PULONG AccessStatus);
+
+typedef enum _AUDIT_EVENT_TYPE {
+ AuditEventObjectAccess,
+ AuditEventDirectoryServiceAccess
+} AUDIT_EVENT_TYPE, *PAUDIT_EVENT_TYPE;
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtAccessCheckByTypeAndAuditAlarm(
+ /*IN*/ PUNICODE_STRING SubsystemName,
+ /*IN*/ PVOID HandleId,
+ /*IN*/ PUNICODE_STRING ObjectTypeName,
+ /*IN*/ PUNICODE_STRING ObjectName,
+ /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor,
+ /*IN*/ PSID PrincipalSelfSid,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ AUDIT_EVENT_TYPE AuditType,
+ /*IN*/ ULONG Flags,
+ /*IN*/ POBJECT_TYPE_LIST ObjectTypeList,
+ /*IN*/ ULONG ObjectTypeListLength,
+ /*IN*/ PGENERIC_MAPPING GenericMapping,
+ /*IN*/ BOOLEAN ObjectCreation,
+ /*OUT*/ PACCESS_MASK GrantedAccess,
+ /*OUT*/ PULONG AccessStatus,
+ /*OUT*/ PBOOLEAN GenerateOnClose);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwAccessCheckByTypeAndAuditAlarm(
+ /*IN*/ PUNICODE_STRING SubsystemName,
+ /*IN*/ PVOID HandleId,
+ /*IN*/ PUNICODE_STRING ObjectTypeName,
+ /*IN*/ PUNICODE_STRING ObjectName,
+ /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor,
+ /*IN*/ PSID PrincipalSelfSid,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ AUDIT_EVENT_TYPE AuditType,
+ /*IN*/ ULONG Flags,
+ /*IN*/ POBJECT_TYPE_LIST ObjectTypeList,
+ /*IN*/ ULONG ObjectTypeListLength,
+ /*IN*/ PGENERIC_MAPPING GenericMapping,
+ /*IN*/ BOOLEAN ObjectCreation,
+ /*OUT*/ PACCESS_MASK GrantedAccess,
+ /*OUT*/ PULONG AccessStatus,
+ /*OUT*/ PBOOLEAN GenerateOnClose);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtAccessCheckByTypeResultList(
+ /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor,
+ /*IN*/ PSID PrincipalSelfSid,
+ /*IN*/ HANDLE TokenHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_TYPE_LIST ObjectTypeList,
+ /*IN*/ ULONG ObjectTypeListLength,
+ /*IN*/ PGENERIC_MAPPING GenericMapping,
+ /*IN*/ PPRIVILEGE_SET PrivilegeSet,
+ /*IN*/ PULONG PrivilegeSetLength,
+ /*OUT*/ PACCESS_MASK GrantedAccessList,
+ /*OUT*/ PULONG AccessStatusList);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwAccessCheckByTypeResultList(
+ /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor,
+ /*IN*/ PSID PrincipalSelfSid,
+ /*IN*/ HANDLE TokenHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_TYPE_LIST ObjectTypeList,
+ /*IN*/ ULONG ObjectTypeListLength,
+ /*IN*/ PGENERIC_MAPPING GenericMapping,
+ /*IN*/ PPRIVILEGE_SET PrivilegeSet,
+ /*IN*/ PULONG PrivilegeSetLength,
+ /*OUT*/ PACCESS_MASK GrantedAccessList,
+ /*OUT*/ PULONG AccessStatusList);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtAccessCheckByTypeResultListAndAuditAlarm(
+ /*IN*/ PUNICODE_STRING SubsystemName,
+ /*IN*/ PVOID HandleId,
+ /*IN*/ PUNICODE_STRING ObjectTypeName,
+ /*IN*/ PUNICODE_STRING ObjectName,
+ /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor,
+ /*IN*/ PSID PrincipalSelfSid,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ AUDIT_EVENT_TYPE AuditType,
+ /*IN*/ ULONG Flags,
+ /*IN*/ POBJECT_TYPE_LIST ObjectTypeList,
+ /*IN*/ ULONG ObjectTypeListLength,
+ /*IN*/ PGENERIC_MAPPING GenericMapping,
+ /*IN*/ BOOLEAN ObjectCreation,
+ /*OUT*/ PACCESS_MASK GrantedAccessList,
+ /*OUT*/ PULONG AccessStatusList,
+ /*OUT*/ PULONG GenerateOnClose);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwAccessCheckByTypeResultListAndAuditAlarm(
+ /*IN*/ PUNICODE_STRING SubsystemName,
+ /*IN*/ PVOID HandleId,
+ /*IN*/ PUNICODE_STRING ObjectTypeName,
+ /*IN*/ PUNICODE_STRING ObjectName,
+ /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor,
+ /*IN*/ PSID PrincipalSelfSid,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ AUDIT_EVENT_TYPE AuditType,
+ /*IN*/ ULONG Flags,
+ /*IN*/ POBJECT_TYPE_LIST ObjectTypeList,
+ /*IN*/ ULONG ObjectTypeListLength,
+ /*IN*/ PGENERIC_MAPPING GenericMapping,
+ /*IN*/ BOOLEAN ObjectCreation,
+ /*OUT*/ PACCESS_MASK GrantedAccessList,
+ /*OUT*/ PULONG AccessStatusList,
+ /*OUT*/ PULONG GenerateOnClose);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtAccessCheckByTypeResultListAndAuditAlarmByHandle(
+ /*IN*/ PUNICODE_STRING SubsystemName,
+ /*IN*/ PVOID HandleId,
+ /*IN*/ HANDLE TokenHandle,
+ /*IN*/ PUNICODE_STRING ObjectTypeName,
+ /*IN*/ PUNICODE_STRING ObjectName,
+ /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor,
+ /*IN*/ PSID PrincipalSelfSid,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ AUDIT_EVENT_TYPE AuditType,
+ /*IN*/ ULONG Flags,
+ /*IN*/ POBJECT_TYPE_LIST ObjectTypeList,
+ /*IN*/ ULONG ObjectTypeListLength,
+ /*IN*/ PGENERIC_MAPPING GenericMapping,
+ /*IN*/ BOOLEAN ObjectCreation,
+ /*OUT*/ PACCESS_MASK GrantedAccessList,
+ /*OUT*/ PULONG AccessStatusList,
+ /*OUT*/ PULONG GenerateOnClose);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwAccessCheckByTypeResultListAndAuditAlarmByHandle(
+ /*IN*/ PUNICODE_STRING SubsystemName,
+ /*IN*/ PVOID HandleId,
+ /*IN*/ HANDLE TokenHandle,
+ /*IN*/ PUNICODE_STRING ObjectTypeName,
+ /*IN*/ PUNICODE_STRING ObjectName,
+ /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor,
+ /*IN*/ PSID PrincipalSelfSid,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ AUDIT_EVENT_TYPE AuditType,
+ /*IN*/ ULONG Flags,
+ /*IN*/ POBJECT_TYPE_LIST ObjectTypeList,
+ /*IN*/ ULONG ObjectTypeListLength,
+ /*IN*/ PGENERIC_MAPPING GenericMapping,
+ /*IN*/ BOOLEAN ObjectCreation,
+ /*OUT*/ PACCESS_MASK GrantedAccessList,
+ /*OUT*/ PULONG AccessStatusList,
+ /*OUT*/ PULONG GenerateOnClose);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtOpenObjectAuditAlarm(
+ /*IN*/ PUNICODE_STRING SubsystemName,
+ /*IN*/ PVOID *HandleId,
+ /*IN*/ PUNICODE_STRING ObjectTypeName,
+ /*IN*/ PUNICODE_STRING ObjectName,
+ /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor,
+ /*IN*/ HANDLE TokenHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ ACCESS_MASK GrantedAccess,
+ /*IN*/ PPRIVILEGE_SET Privileges /*OPTIONAL*/,
+ /*IN*/ BOOLEAN ObjectCreation,
+ /*IN*/ BOOLEAN AccessGranted,
+ /*OUT*/ PBOOLEAN GenerateOnClose);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwOpenObjectAuditAlarm(
+ /*IN*/ PUNICODE_STRING SubsystemName,
+ /*IN*/ PVOID *HandleId,
+ /*IN*/ PUNICODE_STRING ObjectTypeName,
+ /*IN*/ PUNICODE_STRING ObjectName,
+ /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor,
+ /*IN*/ HANDLE TokenHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ ACCESS_MASK GrantedAccess,
+ /*IN*/ PPRIVILEGE_SET Privileges /*OPTIONAL*/,
+ /*IN*/ BOOLEAN ObjectCreation,
+ /*IN*/ BOOLEAN AccessGranted,
+ /*OUT*/ PBOOLEAN GenerateOnClose);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtCloseObjectAuditAlarm(
+ /*IN*/ PUNICODE_STRING SubsystemName,
+ /*IN*/ PVOID HandleId,
+ /*IN*/ BOOLEAN GenerateOnClose);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwCloseObjectAuditAlarm(
+ /*IN*/ PUNICODE_STRING SubsystemName,
+ /*IN*/ PVOID HandleId,
+ /*IN*/ BOOLEAN GenerateOnClose);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtDeleteObjectAuditAlarm(
+ /*IN*/ PUNICODE_STRING SubsystemName,
+ /*IN*/ PVOID HandleId,
+ /*IN*/ BOOLEAN GenerateOnClose);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwDeleteObjectAuditAlarm(
+ /*IN*/ PUNICODE_STRING SubsystemName,
+ /*IN*/ PVOID HandleId,
+ /*IN*/ BOOLEAN GenerateOnClose);
+
+
+
+
+/* Plug and play and power management */
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwRequestWakeupLatency(
+ /*IN*/ LATENCY_TIME Latency);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwRequestDeviceWakeup(
+ /*IN*/ HANDLE DeviceHandle);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwCancelDeviceWakeupRequest(
+ /*IN*/ HANDLE DeviceHandle);
+
+NTOSAPI
+BOOLEAN
+NTAPI
+ZwIsSystemResumeAutomatic(
+ VOID);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwSetThreadExecutionState(
+ /*IN*/ EXECUTION_STATE ExecutionState,
+ /*OUT*/ PEXECUTION_STATE PreviousExecutionState);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwGetDevicePowerState(
+ /*IN*/ HANDLE DeviceHandle,
+ /*OUT*/ PDEVICE_POWER_STATE DevicePowerState);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwSetSystemPowerState(
+ /*IN*/ POWER_ACTION SystemAction,
+ /*IN*/ SYSTEM_POWER_STATE MinSystemState,
+ /*IN*/ ULONG Flags);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwInitiatePowerAction(
+ /*IN*/ POWER_ACTION SystemAction,
+ /*IN*/ SYSTEM_POWER_STATE MinSystemState,
+ /*IN*/ ULONG Flags,
+ /*IN*/ BOOLEAN Asynchronous);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwPowerInformation(
+ /*IN*/ POWER_INFORMATION_LEVEL PowerInformationLevel,
+ /*IN*/ PVOID InputBuffer /*OPTIONAL*/,
+ /*IN*/ ULONG InputBufferLength,
+ /*OUT*/ PVOID OutputBuffer /*OPTIONAL*/,
+ /*IN*/ ULONG OutputBufferLength);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtPlugPlayControl(
+ /*IN*/ ULONG ControlCode,
+ /*IN OUT*/ PVOID Buffer,
+ /*IN*/ ULONG BufferLength);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwPlugPlayControl(
+ /*IN*/ ULONG ControlCode,
+ /*IN OUT*/ PVOID Buffer,
+ /*IN*/ ULONG BufferLength);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtGetPlugPlayEvent(
+ /*IN*/ ULONG Reserved1,
+ /*IN*/ ULONG Reserved2,
+ /*OUT*/ PVOID Buffer,
+ /*IN*/ ULONG BufferLength);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwGetPlugPlayEvent(
+ /*IN*/ ULONG Reserved1,
+ /*IN*/ ULONG Reserved2,
+ /*OUT*/ PVOID Buffer,
+ /*IN*/ ULONG BufferLength);
+
+
+
+
+/* Miscellany */
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtRaiseException(
+ /*IN*/ PEXCEPTION_RECORD ExceptionRecord,
+ /*IN*/ PCONTEXT Context,
+ /*IN*/ BOOLEAN SearchFrames);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwRaiseException(
+ /*IN*/ PEXCEPTION_RECORD ExceptionRecord,
+ /*IN*/ PCONTEXT Context,
+ /*IN*/ BOOLEAN SearchFrames);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtContinue(
+ /*IN*/ PCONTEXT Context,
+ /*IN*/ BOOLEAN TestAlert);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwContinue(
+ /*IN*/ PCONTEXT Context,
+ /*IN*/ BOOLEAN TestAlert);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwW32Call(
+ /*IN*/ ULONG RoutineIndex,
+ /*IN*/ PVOID Argument,
+ /*IN*/ ULONG ArgumentLength,
+ /*OUT*/ PVOID *Result /*OPTIONAL*/,
+ /*OUT*/ PULONG ResultLength /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtSetLowWaitHighThread(
+ VOID);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwSetLowWaitHighThread(
+ VOID);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtSetHighWaitLowThread(
+ VOID);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwSetHighWaitLowThread(
+ VOID);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtLoadDriver(
+ /*IN*/ PUNICODE_STRING DriverServiceName);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwLoadDriver(
+ /*IN*/ PUNICODE_STRING DriverServiceName);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtUnloadDriver(
+ /*IN*/ PUNICODE_STRING DriverServiceName);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwUnloadDriver(
+ /*IN*/ PUNICODE_STRING DriverServiceName);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtFlushInstructionCache(
+ /*IN*/ HANDLE ProcessHandle,
+ /*IN*/ PVOID BaseAddress /*OPTIONAL*/,
+ /*IN*/ ULONG FlushSize);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwFlushInstructionCache(
+ /*IN*/ HANDLE ProcessHandle,
+ /*IN*/ PVOID BaseAddress /*OPTIONAL*/,
+ /*IN*/ ULONG FlushSize);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtFlushWriteBuffer(
+ VOID);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwFlushWriteBuffer(
+ VOID);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtQueryDefaultLocale(
+ /*IN*/ BOOLEAN ThreadOrSystem,
+ /*OUT*/ PLCID Locale);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwQueryDefaultLocale(
+ /*IN*/ BOOLEAN ThreadOrSystem,
+ /*OUT*/ PLCID Locale);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtSetDefaultLocale(
+ /*IN*/ BOOLEAN ThreadOrSystem,
+ /*IN*/ LCID Locale);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwSetDefaultLocale(
+ /*IN*/ BOOLEAN ThreadOrSystem,
+ /*IN*/ LCID Locale);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtQueryDefaultUILanguage(
+ /*OUT*/ PLANGID LanguageId);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwQueryDefaultUILanguage(
+ /*OUT*/ PLANGID LanguageId);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtSetDefaultUILanguage(
+ /*IN*/ LANGID LanguageId);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwSetDefaultUILanguage(
+ /*IN*/ LANGID LanguageId);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtQueryInstallUILanguage(
+ /*OUT*/ PLANGID LanguageId);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwQueryInstallUILanguage(
+ /*OUT*/ PLANGID LanguageId);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtAllocateLocallyUniqueId(
+ /*OUT*/ PLUID Luid);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtAllocateUuids(
+ /*OUT*/ PLARGE_INTEGER UuidLastTimeAllocated,
+ /*OUT*/ PULONG UuidDeltaTime,
+ /*OUT*/ PULONG UuidSequenceNumber,
+ /*OUT*/ PUCHAR UuidSeed);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwAllocateUuids(
+ /*OUT*/ PLARGE_INTEGER UuidLastTimeAllocated,
+ /*OUT*/ PULONG UuidDeltaTime,
+ /*OUT*/ PULONG UuidSequenceNumber,
+ /*OUT*/ PUCHAR UuidSeed);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtSetUuidSeed(
+ /*IN*/ PUCHAR UuidSeed);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwSetUuidSeed(
+ /*IN*/ PUCHAR UuidSeed);
+
+typedef enum _HARDERROR_RESPONSE_OPTION {
+ OptionAbortRetryIgnore,
+ OptionOk,
+ OptionOkCancel,
+ OptionRetryCancel,
+ OptionYesNo,
+ OptionYesNoCancel,
+ OptionShutdownSystem
+} HARDERROR_RESPONSE_OPTION, *PHARDERROR_RESPONSE_OPTION;
+
+typedef enum _HARDERROR_RESPONSE {
+ ResponseReturnToCaller,
+ ResponseNotHandled,
+ ResponseAbort,
+ ResponseCancel,
+ ResponseIgnore,
+ ResponseNo,
+ ResponseOk,
+ ResponseRetry,
+ ResponseYes
+} HARDERROR_RESPONSE, *PHARDERROR_RESPONSE;
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtRaiseHardError(
+ /*IN*/ NTSTATUS Status,
+ /*IN*/ ULONG NumberOfArguments,
+ /*IN*/ ULONG StringArgumentsMask,
+ /*IN*/ PULONG Arguments,
+ /*IN*/ HARDERROR_RESPONSE_OPTION ResponseOption,
+ /*OUT*/ PHARDERROR_RESPONSE Response);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwRaiseHardError(
+ /*IN*/ NTSTATUS Status,
+ /*IN*/ ULONG NumberOfArguments,
+ /*IN*/ ULONG StringArgumentsMask,
+ /*IN*/ PULONG Arguments,
+ /*IN*/ HARDERROR_RESPONSE_OPTION ResponseOption,
+ /*OUT*/ PHARDERROR_RESPONSE Response);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtSetDefaultHardErrorPort(
+ /*IN*/ HANDLE PortHandle);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwSetDefaultHardErrorPort(
+ /*IN*/ HANDLE PortHandle);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtDisplayString(
+ /*IN*/ PUNICODE_STRING String);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwDisplayString(
+ /*IN*/ PUNICODE_STRING String);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtCreatePagingFile(
+ /*IN*/ PUNICODE_STRING FileName,
+ /*IN*/ PULARGE_INTEGER InitialSize,
+ /*IN*/ PULARGE_INTEGER MaximumSize,
+ /*IN*/ ULONG Reserved);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwCreatePagingFile(
+ /*IN*/ PUNICODE_STRING FileName,
+ /*IN*/ PULARGE_INTEGER InitialSize,
+ /*IN*/ PULARGE_INTEGER MaximumSize,
+ /*IN*/ ULONG Reserved);
+
+typedef USHORT RTL_ATOM, *PRTL_ATOM;
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtAddAtom(
+ /*IN*/ PWSTR AtomName,
+ /*IN*/ ULONG AtomNameLength,
+ /*OUT*/ PRTL_ATOM Atom);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwAddAtom(
+ /*IN*/ PWSTR AtomName,
+ /*IN*/ ULONG AtomNameLength,
+ /*OUT*/ PRTL_ATOM Atom);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtFindAtom(
+ /*IN*/ PWSTR AtomName,
+ /*IN*/ ULONG AtomNameLength,
+ /*OUT*/ PRTL_ATOM Atom);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwFindAtom(
+ /*IN*/ PWSTR AtomName,
+ /*IN*/ ULONG AtomNameLength,
+ /*OUT*/ PRTL_ATOM Atom);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtDeleteAtom(
+ /*IN*/ RTL_ATOM Atom);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwDeleteAtom(
+ /*IN*/ RTL_ATOM Atom);
+
+typedef enum _ATOM_INFORMATION_CLASS {
+ AtomBasicInformation,
+ AtomListInformation
+} ATOM_INFORMATION_CLASS;
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtQueryInformationAtom(
+ /*IN*/ RTL_ATOM Atom,
+ /*IN*/ ATOM_INFORMATION_CLASS AtomInformationClass,
+ /*OUT*/ PVOID AtomInformation,
+ /*IN*/ ULONG AtomInformationLength,
+ /*OUT*/ PULONG ReturnLength /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwQueryInformationAtom(
+ /*IN*/ RTL_ATOM Atom,
+ /*IN*/ ATOM_INFORMATION_CLASS AtomInformationClass,
+ /*OUT*/ PVOID AtomInformation,
+ /*IN*/ ULONG AtomInformationLength,
+ /*OUT*/ PULONG ReturnLength /*OPTIONAL*/);
+
+typedef struct _ATOM_BASIC_INFORMATION {
+ USHORT ReferenceCount;
+ USHORT Pinned;
+ USHORT NameLength;
+ WCHAR Name[1];
+} ATOM_BASIC_INFORMATION, *PATOM_BASIC_INFORMATION;
+
+typedef struct _ATOM_LIST_INFORMATION {
+ ULONG NumberOfAtoms;
+ ATOM Atoms[1];
+} ATOM_LIST_INFORMATION, *PATOM_LIST_INFORMATION;
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtSetLdtEntries(
+ /*IN*/ ULONG Selector1,
+ /*IN*/ LDT_ENTRY LdtEntry1,
+ /*IN*/ ULONG Selector2,
+ /*IN*/ LDT_ENTRY LdtEntry2);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwSetLdtEntries(
+ /*IN*/ ULONG Selector1,
+ /*IN*/ LDT_ENTRY LdtEntry1,
+ /*IN*/ ULONG Selector2,
+ /*IN*/ LDT_ENTRY LdtEntry2);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+NtVdmControl(
+ /*IN*/ ULONG ControlCode,
+ /*IN*/ PVOID ControlData);
+
+NTOSAPI
+NTSTATUS
+NTAPI
+ZwVdmControl(
+ /*IN*/ ULONG ControlCode,
+ /*IN*/ PVOID ControlData);
+
+#pragma pack(pop)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __NTAPI_H */
diff --git a/tcc/include/winapi/ddk/ntdd8042.h b/tcc/include/winapi/ddk/ntdd8042.h
new file mode 100644
index 0000000..9701792
--- /dev/null
+++ b/tcc/include/winapi/ddk/ntdd8042.h
@@ -0,0 +1,213 @@
+/*
+ * ntdd8042.h
+ *
+ * i8042 IOCTL interface.
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __NTDD8042_H
+#define __NTDD8042_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+#include "ntddkbd.h"
+#include "ntddmou.h"
+
+#define IOCTL_INTERNAL_I8042_CONTROLLER_WRITE_BUFFER \
+ CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0FF2, METHOD_NEITHER, FILE_ANY_ACCESS)
+
+#define IOCTL_INTERNAL_I8042_HOOK_KEYBOARD \
+ CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0FF0, METHOD_NEITHER, FILE_ANY_ACCESS)
+
+#define IOCTL_INTERNAL_I8042_KEYBOARD_START_INFORMATION \
+ CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0FF3, METHOD_NEITHER, FILE_ANY_ACCESS)
+
+#define IOCTL_INTERNAL_I8042_KEYBOARD_WRITE_BUFFER \
+ CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0FF1, METHOD_NEITHER, FILE_ANY_ACCESS)
+
+#define IOCTL_INTERNAL_I8042_HOOK_MOUSE \
+ CTL_CODE(FILE_DEVICE_MOUSE, 0x0FF0, METHOD_NEITHER, FILE_ANY_ACCESS)
+
+#define IOCTL_INTERNAL_I8042_MOUSE_START_INFORMATION \
+ CTL_CODE(FILE_DEVICE_MOUSE, 0x0FF3, METHOD_NEITHER, FILE_ANY_ACCESS)
+
+#define IOCTL_INTERNAL_I8042_MOUSE_WRITE_BUFFER \
+ CTL_CODE(FILE_DEVICE_MOUSE, 0x0FF1, METHOD_NEITHER, FILE_ANY_ACCESS)
+
+#define I8042_POWER_SYS_BUTTON 0x0001
+#define I8042_SLEEP_SYS_BUTTON 0x0002
+#define I8042_WAKE_SYS_BUTTON 0x0004
+#define I8042_SYS_BUTTONS (I8042_POWER_SYS_BUTTON | \
+ I8042_SLEEP_SYS_BUTTON | \
+ I8042_WAKE_SYS_BUTTON)
+
+typedef enum _TRANSMIT_STATE {
+ Idle = 0,
+ SendingBytes
+} TRANSMIT_STATE;
+
+typedef struct _OUTPUT_PACKET {
+ PUCHAR Bytes;
+ ULONG CurrentByte;
+ ULONG ByteCount;
+ TRANSMIT_STATE State;
+} OUTPUT_PACKET, *POUTPUT_PACKET;
+
+typedef enum _KEYBOARD_SCAN_STATE {
+ Normal,
+ GotE0,
+ GotE1
+} KEYBOARD_SCAN_STATE, *PKEYBOARD_SCAN_STATE;
+
+typedef enum _MOUSE_STATE {
+ MouseIdle,
+ XMovement,
+ YMovement,
+ ZMovement,
+ MouseExpectingACK,
+ MouseResetting
+} MOUSE_STATE, *PMOUSE_STATE;
+
+typedef enum _MOUSE_RESET_SUBSTATE {
+ ExpectingReset,
+ ExpectingResetId,
+ ExpectingGetDeviceIdACK,
+ ExpectingGetDeviceIdValue,
+ ExpectingSetResolutionDefaultACK,
+ ExpectingSetResolutionDefaultValueACK,
+ ExpectingSetResolutionACK,
+ ExpectingSetResolutionValueACK,
+ ExpectingSetScaling1to1ACK,
+ ExpectingSetScaling1to1ACK2,
+ ExpectingSetScaling1to1ACK3,
+ ExpectingReadMouseStatusACK,
+ ExpectingReadMouseStatusByte1,
+ ExpectingReadMouseStatusByte2,
+ ExpectingReadMouseStatusByte3,
+ StartPnPIdDetection,
+ ExpectingLoopSetSamplingRateACK,
+ ExpectingLoopSetSamplingRateValueACK,
+ ExpectingPnpIdByte1,
+ ExpectingPnpIdByte2,
+ ExpectingPnpIdByte3,
+ ExpectingPnpIdByte4,
+ ExpectingPnpIdByte5,
+ ExpectingPnpIdByte6,
+ ExpectingPnpIdByte7,
+ EnableWheel,
+ Enable5Buttons,
+ ExpectingGetDeviceId2ACK,
+ ExpectingGetDeviceId2Value,
+ ExpectingSetSamplingRateACK,
+ ExpectingSetSamplingRateValueACK,
+ ExpectingEnableACK,
+ ExpectingFinalResolutionACK,
+ ExpectingFinalResolutionValueACK,
+ ExpectingGetDeviceIdDetectACK,
+ ExpectingGetDeviceIdDetectValue,
+ CustomHookStateMinimum = 100,
+ CustomHookStateMaximum = 999,
+ I8042ReservedMinimum = 1000
+} MOUSE_RESET_SUBSTATE, *PMOUSE_RESET_SUBSTATE;
+
+typedef struct _INTERNAL_I8042_START_INFORMATION {
+ ULONG Size;
+ PKINTERRUPT InterruptObject;
+ ULONG Reserved[8];
+} INTERNAL_I8042_START_INFORMATION, *PINTERNAL_I8042_START_INFORMATION;
+
+typedef VOID DDKAPI
+(*PI8042_ISR_WRITE_PORT)(
+ /*IN*/ PVOID Context,
+ /*IN*/ UCHAR Value);
+
+typedef VOID DDKAPI
+(*PI8042_QUEUE_PACKET)(
+ /*IN*/ PVOID Context);
+
+typedef NTSTATUS DDKAPI
+(*PI8042_SYNCH_READ_PORT) (
+ /*IN*/ PVOID Context,
+ /*OUT*/ PUCHAR Value,
+ /*IN*/ BOOLEAN WaitForACK);
+
+typedef NTSTATUS DDKAPI
+(*PI8042_SYNCH_WRITE_PORT)(
+ /*IN*/ PVOID Context,
+ /*IN*/ UCHAR Value,
+ /*IN*/ BOOLEAN WaitForACK);
+
+
+typedef NTSTATUS DDKAPI
+(*PI8042_KEYBOARD_INITIALIZATION_ROUTINE)(
+ /*IN*/ PVOID InitializationContext,
+ /*IN*/ PVOID SynchFuncContext,
+ /*IN*/ PI8042_SYNCH_READ_PORT ReadPort,
+ /*IN*/ PI8042_SYNCH_WRITE_PORT WritePort,
+ /*OUT*/ PBOOLEAN TurnTranslationOn);
+
+typedef BOOLEAN DDKAPI
+(*PI8042_KEYBOARD_ISR)(
+ PVOID IsrContext,
+ PKEYBOARD_INPUT_DATA CurrentInput,
+ POUTPUT_PACKET CurrentOutput,
+ UCHAR StatusByte,
+ PUCHAR Byte,
+ PBOOLEAN ContinueProcessing,
+ PKEYBOARD_SCAN_STATE ScanState);
+
+typedef struct _INTERNAL_I8042_HOOK_KEYBOARD {
+ /*OUT*/ PVOID Context;
+ /*OUT*/ PI8042_KEYBOARD_INITIALIZATION_ROUTINE InitializationRoutine;
+ /*OUT*/ PI8042_KEYBOARD_ISR IsrRoutine;
+ /*IN*/ PI8042_ISR_WRITE_PORT IsrWritePort;
+ /*IN*/ PI8042_QUEUE_PACKET QueueKeyboardPacket;
+ /*IN*/ PVOID CallContext;
+} INTERNAL_I8042_HOOK_KEYBOARD, *PINTERNAL_I8042_HOOK_KEYBOARD;
+
+typedef BOOLEAN DDKAPI
+(*PI8042_MOUSE_ISR)(
+ PVOID IsrContext,
+ PMOUSE_INPUT_DATA CurrentInput,
+ POUTPUT_PACKET CurrentOutput,
+ UCHAR StatusByte,
+ PUCHAR Byte,
+ PBOOLEAN ContinueProcessing,
+ PMOUSE_STATE MouseState,
+ PMOUSE_RESET_SUBSTATE ResetSubState);
+
+typedef struct _INTERNAL_I8042_HOOK_MOUSE {
+ /*OUT*/ PVOID Context;
+ /*OUT*/ PI8042_MOUSE_ISR IsrRoutine;
+ /*IN*/ PI8042_ISR_WRITE_PORT IsrWritePort;
+ /*IN*/ PI8042_QUEUE_PACKET QueueMousePacket;
+ /*IN*/ PVOID CallContext;
+} INTERNAL_I8042_HOOK_MOUSE, *PINTERNAL_I8042_HOOK_MOUSE;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __NTDD8042_H */
diff --git a/tcc/include/winapi/ddk/ntddbeep.h b/tcc/include/winapi/ddk/ntddbeep.h
new file mode 100644
index 0000000..6052a09
--- /dev/null
+++ b/tcc/include/winapi/ddk/ntddbeep.h
@@ -0,0 +1,54 @@
+/*
+ * ntddbeep.h
+ *
+ * Beep device IOCTL interface
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __NTDDBEEP_H
+#define __NTDDBEEP_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+
+#define DD_BEEP_DEVICE_NAME "\\Device\\Beep"
+#define DD_BEEP_DEVICE_NAME_U L"\\Device\\Beep"
+
+#define IOCTL_BEEP_SET \
+ CTL_CODE(FILE_DEVICE_BEEP, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+typedef struct _BEEP_SET_PARAMETERS {
+ ULONG Frequency;
+ ULONG Duration;
+} BEEP_SET_PARAMETERS, *PBEEP_SET_PARAMETERS;
+
+#define BEEP_FREQUENCY_MINIMUM 0x25
+#define BEEP_FREQUENCY_MAXIMUM 0x7FFF
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __NTDDBEEP_H */
diff --git a/tcc/include/winapi/ddk/ntddcdrm.h b/tcc/include/winapi/ddk/ntddcdrm.h
new file mode 100644
index 0000000..49cf29d
--- /dev/null
+++ b/tcc/include/winapi/ddk/ntddcdrm.h
@@ -0,0 +1,347 @@
+/*
+ * ntddcdrm.h
+ *
+ * CDROM IOCTL interface.
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __NTDDCDRM_H
+#define __NTDDCDRM_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+#include "ntddstor.h"
+
+#define IOCTL_CDROM_BASE FILE_DEVICE_CD_ROM
+
+#define IOCTL_CDROM_CHECK_VERIFY \
+ CTL_CODE(IOCTL_CDROM_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_CDROM_FIND_NEW_DEVICES \
+ CTL_CODE(IOCTL_CDROM_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_CDROM_GET_CONTROL \
+ CTL_CODE(IOCTL_CDROM_BASE, 0x000D, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_CDROM_GET_DRIVE_GEOMETRY \
+ CTL_CODE(IOCTL_CDROM_BASE, 0x0013, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_CDROM_GET_LAST_SESSION \
+ CTL_CODE(IOCTL_CDROM_BASE, 0x000E, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_CDROM_GET_VOLUME \
+ CTL_CODE(IOCTL_CDROM_BASE, 0x0005, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_CDROM_PAUSE_AUDIO \
+ CTL_CODE(IOCTL_CDROM_BASE, 0x0003, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_CDROM_PLAY_AUDIO_MSF \
+ CTL_CODE(IOCTL_CDROM_BASE, 0x0006, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_CDROM_RAW_READ \
+ CTL_CODE(IOCTL_CDROM_BASE, 0x000F, METHOD_OUT_DIRECT, FILE_READ_ACCESS)
+
+#define IOCTL_CDROM_READ_Q_CHANNEL \
+ CTL_CODE(IOCTL_CDROM_BASE, 0x000B, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_CDROM_READ_TOC \
+ CTL_CODE(IOCTL_CDROM_BASE, 0x0000, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_CDROM_READ_TOC_EX \
+ CTL_CODE(IOCTL_CDROM_BASE, 0x0015, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_CDROM_RESUME_AUDIO \
+ CTL_CODE(IOCTL_CDROM_BASE, 0x0004, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_CDROM_SEEK_AUDIO_MSF \
+ CTL_CODE(IOCTL_CDROM_BASE, 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_CDROM_SET_VOLUME \
+ CTL_CODE(IOCTL_CDROM_BASE, 0x000A, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_CDROM_SIMBAD \
+ CTL_CODE(IOCTL_CDROM_BASE, 0x1003, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_CDROM_STOP_AUDIO \
+ CTL_CODE(IOCTL_CDROM_BASE, 0x0002, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+
+#define MAXIMUM_NUMBER_TRACKS 100
+#define MAXIMUM_CDROM_SIZE 804
+#define MINIMUM_CDROM_READ_TOC_EX_SIZE 2
+
+typedef struct _TRACK_DATA {
+ UCHAR Reserved;
+ UCHAR Control : 4;
+ UCHAR Adr : 4;
+ UCHAR TrackNumber;
+ UCHAR Reserved1;
+ UCHAR Address[4];
+} TRACK_DATA, *PTRACK_DATA;
+
+/* CDROM_DISK_DATA.DiskData flags */
+#define CDROM_DISK_AUDIO_TRACK 0x00000001
+#define CDROM_DISK_DATA_TRACK 0x00000002
+
+typedef struct _CDROM_DISK_DATA {
+ ULONG DiskData;
+} CDROM_DISK_DATA, *PCDROM_DISK_DATA;
+
+typedef struct _CDROM_PLAY_AUDIO_MSF {
+ UCHAR StartingM;
+ UCHAR StartingS;
+ UCHAR StartingF;
+ UCHAR EndingM;
+ UCHAR EndingS;
+ UCHAR EndingF;
+} CDROM_PLAY_AUDIO_MSF, *PCDROM_PLAY_AUDIO_MSF;
+
+/* CDROM_READ_TOC_EX.Format constants */
+#define CDROM_READ_TOC_EX_FORMAT_TOC 0x00
+#define CDROM_READ_TOC_EX_FORMAT_SESSION 0x01
+#define CDROM_READ_TOC_EX_FORMAT_FULL_TOC 0x02
+#define CDROM_READ_TOC_EX_FORMAT_PMA 0x03
+#define CDROM_READ_TOC_EX_FORMAT_ATIP 0x04
+#define CDROM_READ_TOC_EX_FORMAT_CDTEXT 0x05
+
+typedef struct _CDROM_READ_TOC_EX {
+ UCHAR Format : 4;
+ UCHAR Reserved1 : 3;
+ UCHAR Msf : 1;
+ UCHAR SessionTrack;
+ UCHAR Reserved2;
+ UCHAR Reserved3;
+} CDROM_READ_TOC_EX, *PCDROM_READ_TOC_EX;
+
+typedef struct _CDROM_SEEK_AUDIO_MSF {
+ UCHAR M;
+ UCHAR S;
+ UCHAR F;
+} CDROM_SEEK_AUDIO_MSF, *PCDROM_SEEK_AUDIO_MSF;
+
+/* CDROM_SUB_Q_DATA_FORMAT.Format constants */
+#define IOCTL_CDROM_SUB_Q_CHANNEL 0x00
+#define IOCTL_CDROM_CURRENT_POSITION 0x01
+#define IOCTL_CDROM_MEDIA_CATALOG 0x02
+#define IOCTL_CDROM_TRACK_ISRC 0x03
+
+typedef struct _CDROM_SUB_Q_DATA_FORMAT {
+ UCHAR Format;
+ UCHAR Track;
+} CDROM_SUB_Q_DATA_FORMAT, *PCDROM_SUB_Q_DATA_FORMAT;
+
+typedef struct _CDROM_TOC {
+ UCHAR Length[2];
+ UCHAR FirstTrack;
+ UCHAR LastTrack;
+ TRACK_DATA TrackData[MAXIMUM_NUMBER_TRACKS];
+} CDROM_TOC, *PCDROM_TOC;
+
+#define CDROM_TOC_SIZE sizeof(CDROM_TOC)
+
+typedef struct _CDROM_TOC_ATIP_DATA_BLOCK {
+ UCHAR CdrwReferenceSpeed : 3;
+ UCHAR Reserved3 : 1;
+ UCHAR WritePower : 3;
+ UCHAR True1 : 1;
+ UCHAR Reserved4 : 6;
+ UCHAR UnrestrictedUse : 1;
+ UCHAR Reserved5 : 1;
+ UCHAR A3Valid : 1;
+ UCHAR A2Valid : 1;
+ UCHAR A1Valid : 1;
+ UCHAR Reserved6 : 3;
+ UCHAR IsCdrw : 1;
+ UCHAR True2 : 1;
+ UCHAR Reserved7;
+ UCHAR LeadInMsf[3];
+ UCHAR Reserved8;
+ UCHAR LeadOutMsf[3];
+ UCHAR Reserved9;
+ UCHAR A1Values[3];
+ UCHAR Reserved10;
+ UCHAR A2Values[3];
+ UCHAR Reserved11;
+ UCHAR A3Values[3];
+ UCHAR Reserved12;
+} CDROM_TOC_ATIP_DATA_BLOCK, *PCDROM_TOC_ATIP_DATA_BLOCK;
+
+typedef struct _CDROM_TOC_ATIP_DATA {
+ UCHAR Length[2];
+ UCHAR Reserved1;
+ UCHAR Reserved2;
+ CDROM_TOC_ATIP_DATA_BLOCK Descriptors[0];
+} CDROM_TOC_ATIP_DATA, *PCDROM_TOC_ATIP_DATA;
+
+/* CDROM_TOC_CD_TEXT_DATA_BLOCK.PackType constants */
+#define CDROM_CD_TEXT_PACK_ALBUM_NAME 0x80
+#define CDROM_CD_TEXT_PACK_PERFORMER 0x81
+#define CDROM_CD_TEXT_PACK_SONGWRITER 0x82
+#define CDROM_CD_TEXT_PACK_COMPOSER 0x83
+#define CDROM_CD_TEXT_PACK_ARRANGER 0x84
+#define CDROM_CD_TEXT_PACK_MESSAGES 0x85
+#define CDROM_CD_TEXT_PACK_DISC_ID 0x86
+#define CDROM_CD_TEXT_PACK_GENRE 0x87
+#define CDROM_CD_TEXT_PACK_TOC_INFO 0x88
+#define CDROM_CD_TEXT_PACK_TOC_INFO2 0x89
+#define CDROM_CD_TEXT_PACK_UPC_EAN 0x8e
+#define CDROM_CD_TEXT_PACK_SIZE_INFO 0x8f
+
+typedef struct _CDROM_TOC_CD_TEXT_DATA_BLOCK {
+ UCHAR PackType;
+ UCHAR TrackNumber : 7;
+ UCHAR ExtensionFlag : 1;
+ UCHAR SequenceNumber;
+ UCHAR CharacterPosition : 4;
+ UCHAR BlockNumber : 3;
+ UCHAR Unicode : 1;
+ _ANONYMOUS_UNION union {
+ UCHAR Text[12];
+ WCHAR WText[6];
+ } DUMMYUNIONNAME;
+ UCHAR CRC[2];
+} CDROM_TOC_CD_TEXT_DATA_BLOCK, *PCDROM_TOC_CD_TEXT_DATA_BLOCK;
+
+typedef struct _CDROM_TOC_CD_TEXT_DATA {
+ UCHAR Length[2];
+ UCHAR Reserved1;
+ UCHAR Reserved2;
+ CDROM_TOC_CD_TEXT_DATA_BLOCK Descriptors[0];
+} CDROM_TOC_CD_TEXT_DATA, *PCDROM_TOC_CD_TEXT_DATA;
+
+/* CDROM_TOC_FULL_TOC_DATA_BLOCK.Adr constants */
+#define ADR_NO_MODE_INFORMATION 0x0
+#define ADR_ENCODES_CURRENT_POSITION 0x1
+#define ADR_ENCODES_MEDIA_CATALOG 0x2
+#define ADR_ENCODES_ISRC 0x3
+
+typedef struct _CDROM_TOC_FULL_TOC_DATA_BLOCK {
+ UCHAR SessionNumber;
+ UCHAR Control : 4;
+ UCHAR Adr : 4;
+ UCHAR Reserved1;
+ UCHAR Point;
+ UCHAR MsfExtra[3];
+ UCHAR Zero;
+ UCHAR Msf[3];
+} CDROM_TOC_FULL_TOC_DATA_BLOCK, *PCDROM_TOC_FULL_TOC_DATA_BLOCK;
+
+typedef struct _CDROM_TOC_FULL_TOC_DATA {
+ UCHAR Length[2];
+ UCHAR FirstCompleteSession;
+ UCHAR LastCompleteSession;
+ CDROM_TOC_FULL_TOC_DATA_BLOCK Descriptors[0];
+} CDROM_TOC_FULL_TOC_DATA, *PCDROM_TOC_FULL_TOC_DATA;
+
+typedef struct _CDROM_TOC_PMA_DATA {
+ UCHAR Length[2];
+ UCHAR Reserved1;
+ UCHAR Reserved2;
+ CDROM_TOC_FULL_TOC_DATA_BLOCK Descriptors[0];
+} CDROM_TOC_PMA_DATA, *PCDROM_TOC_PMA_DATA;
+
+/* SUB_Q_HEADER.AudioStatus constants */
+#define AUDIO_STATUS_NOT_SUPPORTED 0x00
+#define AUDIO_STATUS_IN_PROGRESS 0x11
+#define AUDIO_STATUS_PAUSED 0x12
+#define AUDIO_STATUS_PLAY_COMPLETE 0x13
+#define AUDIO_STATUS_PLAY_ERROR 0x14
+#define AUDIO_STATUS_NO_STATUS 0x15
+
+typedef struct _SUB_Q_HEADER {
+ UCHAR Reserved;
+ UCHAR AudioStatus;
+ UCHAR DataLength[2];
+} SUB_Q_HEADER, *PSUB_Q_HEADER;
+
+typedef struct _SUB_Q_MEDIA_CATALOG_NUMBER {
+ SUB_Q_HEADER Header;
+ UCHAR FormatCode;
+ UCHAR Reserved[3];
+ UCHAR Reserved1 : 7;
+ UCHAR Mcval :1;
+ UCHAR MediaCatalog[15];
+} SUB_Q_MEDIA_CATALOG_NUMBER, *PSUB_Q_MEDIA_CATALOG_NUMBER;
+
+typedef struct _SUB_Q_TRACK_ISRC {
+ SUB_Q_HEADER Header;
+ UCHAR FormatCode;
+ UCHAR Reserved0;
+ UCHAR Track;
+ UCHAR Reserved1;
+ UCHAR Reserved2 : 7;
+ UCHAR Tcval : 1;
+ UCHAR TrackIsrc[15];
+} SUB_Q_TRACK_ISRC, *PSUB_Q_TRACK_ISRC;
+
+typedef struct _SUB_Q_CURRENT_POSITION {
+ SUB_Q_HEADER Header;
+ UCHAR FormatCode;
+ UCHAR Control : 4;
+ UCHAR ADR : 4;
+ UCHAR TrackNumber;
+ UCHAR IndexNumber;
+ UCHAR AbsoluteAddress[4];
+ UCHAR TrackRelativeAddress[4];
+} SUB_Q_CURRENT_POSITION, *PSUB_Q_CURRENT_POSITION;
+
+typedef union _SUB_Q_CHANNEL_DATA {
+ SUB_Q_CURRENT_POSITION CurrentPosition;
+ SUB_Q_MEDIA_CATALOG_NUMBER MediaCatalog;
+ SUB_Q_TRACK_ISRC TrackIsrc;
+} SUB_Q_CHANNEL_DATA, *PSUB_Q_CHANNEL_DATA;
+
+/* CDROM_AUDIO_CONTROL.LbaFormat constants */
+#define AUDIO_WITH_PREEMPHASIS 0x1
+#define DIGITAL_COPY_PERMITTED 0x2
+#define AUDIO_DATA_TRACK 0x4
+#define TWO_FOUR_CHANNEL_AUDIO 0x8
+
+typedef struct _CDROM_AUDIO_CONTROL {
+ UCHAR LbaFormat;
+ USHORT LogicalBlocksPerSecond;
+} CDROM_AUDIO_CONTROL, *PCDROM_AUDIO_CONTROL;
+
+typedef struct _VOLUME_CONTROL {
+ UCHAR PortVolume[4];
+} VOLUME_CONTROL, *PVOLUME_CONTROL;
+
+typedef enum _TRACK_MODE_TYPE {
+ YellowMode2,
+ XAForm2,
+ CDDA
+} TRACK_MODE_TYPE, *PTRACK_MODE_TYPE;
+
+typedef struct __RAW_READ_INFO {
+ LARGE_INTEGER DiskOffset;
+ ULONG SectorCount;
+ TRACK_MODE_TYPE TrackMode;
+} RAW_READ_INFO, *PRAW_READ_INFO;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __NTDDCDRM_H */
diff --git a/tcc/include/winapi/ddk/ntddcdvd.h b/tcc/include/winapi/ddk/ntddcdvd.h
new file mode 100644
index 0000000..82c2a60
--- /dev/null
+++ b/tcc/include/winapi/ddk/ntddcdvd.h
@@ -0,0 +1,213 @@
+/*
+ * ntddcdvd.h
+ *
+ * DVD IOCTL interface.
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __NTDDCDVD_H
+#define __NTDDCDVD_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+#include "ntddstor.h"
+
+#define IOCTL_DVD_BASE FILE_DEVICE_DVD
+
+#define IOCTL_DVD_END_SESSION \
+ CTL_CODE(IOCTL_DVD_BASE, 0x0403, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_DVD_GET_REGION \
+ CTL_CODE(IOCTL_DVD_BASE, 0x0405, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_DVD_READ_KEY \
+ CTL_CODE(IOCTL_DVD_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_DVD_READ_STRUCTURE \
+ CTL_CODE(IOCTL_DVD_BASE, 0x0450, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_DVD_SEND_KEY \
+ CTL_CODE(IOCTL_DVD_BASE, 0x0402, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_DVD_START_SESSION \
+ CTL_CODE(IOCTL_DVD_BASE, 0x0400, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_DVD_SET_READ_AHEAD \
+ CTL_CODE(IOCTL_DVD_BASE, 0x0404, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+
+typedef ULONG DVD_SESSION_ID, *PDVD_SESSION_ID;
+
+typedef struct _STORAGE_SET_READ_AHEAD {
+ LARGE_INTEGER TriggerAddress;
+ LARGE_INTEGER TargetAddress;
+} STORAGE_SET_READ_AHEAD, *PSTORAGE_SET_READ_AHEAD;
+
+typedef enum DVD_STRUCTURE_FORMAT {
+ DvdPhysicalDescriptor,
+ DvdCopyrightDescriptor,
+ DvdDiskKeyDescriptor,
+ DvdBCADescriptor,
+ DvdManufacturerDescriptor,
+ DvdMaxDescriptor
+} DVD_STRUCTURE_FORMAT, *PDVD_STRUCTURE_FORMAT;
+
+#include <pshpack1.h>
+typedef struct DVD_READ_STRUCTURE {
+ LARGE_INTEGER BlockByteOffset;
+ DVD_STRUCTURE_FORMAT Format;
+ DVD_SESSION_ID SessionId;
+ UCHAR LayerNumber;
+} DVD_READ_STRUCTURE, *PDVD_READ_STRUCTURE;
+#include <poppack.h>
+
+typedef struct _DVD_DESCRIPTOR_HEADER {
+ USHORT Length;
+ UCHAR Reserved[2];
+ UCHAR Data[0];
+} DVD_DESCRIPTOR_HEADER, *PDVD_DESCRIPTOR_HEADER;
+
+#include <pshpack1.h>
+typedef struct _DVD_LAYER_DESCRIPTOR {
+ UCHAR BookVersion : 4;
+ UCHAR BookType : 4;
+ UCHAR MinimumRate : 4;
+ UCHAR DiskSize : 4;
+ UCHAR LayerType : 4;
+ UCHAR TrackPath : 1;
+ UCHAR NumberOfLayers : 2;
+ UCHAR Reserved1 : 1;
+ UCHAR TrackDensity : 4;
+ UCHAR LinearDensity : 4;
+ ULONG StartingDataSector;
+ ULONG EndDataSector;
+ ULONG EndLayerZeroSector;
+ UCHAR Reserved5 : 7;
+ UCHAR BCAFlag : 1;
+ UCHAR Reserved6;
+} DVD_LAYER_DESCRIPTOR, *PDVD_LAYER_DESCRIPTOR;
+#include <poppack.h>
+
+typedef struct _DVD_COPYRIGHT_DESCRIPTOR {
+ UCHAR CopyrightProtectionType;
+ UCHAR RegionManagementInformation;
+ USHORT Reserved;
+} DVD_COPYRIGHT_DESCRIPTOR, *PDVD_COPYRIGHT_DESCRIPTOR;
+
+typedef struct _DVD_DISK_KEY_DESCRIPTOR {
+ UCHAR DiskKeyData[2048];
+} DVD_DISK_KEY_DESCRIPTOR, *PDVD_DISK_KEY_DESCRIPTOR;
+
+typedef enum _DVD_KEY_TYPE {
+ DvdChallengeKey = 0x01,
+ DvdBusKey1,
+ DvdBusKey2,
+ DvdTitleKey,
+ DvdAsf,
+ DvdSetRpcKey = 0x6,
+ DvdGetRpcKey = 0x8,
+ DvdDiskKey = 0x80,
+ DvdInvalidateAGID = 0x3f
+} DVD_KEY_TYPE;
+
+typedef struct _DVD_COPY_PROTECT_KEY {
+ ULONG KeyLength;
+ DVD_SESSION_ID SessionId;
+ DVD_KEY_TYPE KeyType;
+ ULONG KeyFlags;
+ union {
+ HANDLE FileHandle;
+ LARGE_INTEGER TitleOffset;
+ } Parameters;
+ UCHAR KeyData[0];
+} DVD_COPY_PROTECT_KEY, *PDVD_COPY_PROTECT_KEY;
+
+#define DVD_CHALLENGE_KEY_LENGTH (12 + sizeof(DVD_COPY_PROTECT_KEY))
+#define DVD_BUS_KEY_LENGTH (8 + sizeof(DVD_COPY_PROTECT_KEY))
+#define DVD_TITLE_KEY_LENGTH (8 + sizeof(DVD_COPY_PROTECT_KEY))
+#define DVD_DISK_KEY_LENGTH (2048 + sizeof(DVD_COPY_PROTECT_KEY))
+#define DVD_RPC_KEY_LENGTH (sizeof(DVD_RPC_KEY) + sizeof(DVD_COPY_PROTECT_KEY))
+#define DVD_SET_RPC_KEY_LENGTH (sizeof(DVD_SET_RPC_KEY) + sizeof(DVD_COPY_PROTECT_KEY))
+#define DVD_ASF_LENGTH (sizeof(DVD_ASF) + sizeof(DVD_COPY_PROTECT_KEY))
+
+#define DVD_END_ALL_SESSIONS ((DVD_SESSION_ID) 0xffffffff)
+
+
+#define DVD_CGMS_RESERVED_MASK 0x00000078
+
+#define DVD_CGMS_COPY_PROTECT_MASK 0x00000018
+#define DVD_CGMS_COPY_PERMITTED 0x00000000
+#define DVD_CGMS_COPY_ONCE 0x00000010
+#define DVD_CGMS_NO_COPY 0x00000018
+
+#define DVD_COPYRIGHT_MASK 0x00000040
+#define DVD_NOT_COPYRIGHTED 0x00000000
+#define DVD_COPYRIGHTED 0x00000040
+
+#define DVD_SECTOR_PROTECT_MASK 0x00000020
+#define DVD_SECTOR_NOT_PROTECTED 0x00000000
+#define DVD_SECTOR_PROTECTED 0x00000020
+
+
+typedef struct _DVD_BCA_DESCRIPTOR {
+ UCHAR BCAInformation[0];
+} DVD_BCA_DESCRIPTOR, *PDVD_BCA_DESCRIPTOR;
+
+typedef struct _DVD_MANUFACTURER_DESCRIPTOR {
+ UCHAR ManufacturingInformation[2048];
+} DVD_MANUFACTURER_DESCRIPTOR, *PDVD_MANUFACTURER_DESCRIPTOR;
+
+typedef struct _DVD_RPC_KEY {
+ UCHAR UserResetsAvailable : 3;
+ UCHAR ManufacturerResetsAvailable : 3;
+ UCHAR TypeCode : 2;
+ UCHAR RegionMask;
+ UCHAR RpcScheme;
+ UCHAR Reserved2[1];
+} DVD_RPC_KEY, *PDVD_RPC_KEY;
+
+typedef struct _DVD_SET_RPC_KEY {
+ UCHAR PreferredDriveRegionCode;
+ UCHAR Reserved[3];
+} DVD_SET_RPC_KEY, *PDVD_SET_RPC_KEY;
+
+typedef struct _DVD_ASF {
+ UCHAR Reserved0[3];
+ UCHAR SuccessFlag : 1;
+ UCHAR Reserved1 : 7;
+} DVD_ASF, *PDVD_ASF;
+
+typedef struct _DVD_REGION {
+ UCHAR CopySystem;
+ UCHAR RegionData;
+ UCHAR SystemRegion;
+ UCHAR ResetCount;
+} DVD_REGION, *PDVD_REGION;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __NTDDCDVD_H */
diff --git a/tcc/include/winapi/ddk/ntddchgr.h b/tcc/include/winapi/ddk/ntddchgr.h
new file mode 100644
index 0000000..8c9e81e
--- /dev/null
+++ b/tcc/include/winapi/ddk/ntddchgr.h
@@ -0,0 +1,353 @@
+/*
+ * ntddchgr.h
+ *
+ * Media changer IOCTL interface.
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __NTDDCHGR_H
+#define __NTDDCHGR_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+#include "ntddstor.h"
+
+#define DD_CHANGER_DEVICE_NAME "\\Device\\Changer"
+#define DD_CHANGER_DEVICE_NAME_U L"\\Device\\Changer"
+
+#define IOCTL_CHANGER_BASE FILE_DEVICE_CHANGER
+
+#define IOCTL_CHANGER_EXCHANGE_MEDIUM \
+ CTL_CODE(IOCTL_CHANGER_BASE, 0x0008, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_CHANGER_GET_ELEMENT_STATUS \
+ CTL_CODE(IOCTL_CHANGER_BASE, 0x0005, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+
+#define IOCTL_CHANGER_GET_PARAMETERS \
+ CTL_CODE(IOCTL_CHANGER_BASE, 0x0000, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_CHANGER_GET_PRODUCT_DATA \
+ CTL_CODE(IOCTL_CHANGER_BASE, 0x0002, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_CHANGER_GET_STATUS \
+ CTL_CODE(IOCTL_CHANGER_BASE, 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_CHANGER_INITIALIZE_ELEMENT_STATUS \
+ CTL_CODE(IOCTL_CHANGER_BASE, 0x0006, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_CHANGER_MOVE_MEDIUM \
+ CTL_CODE(IOCTL_CHANGER_BASE, 0x0009, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_CHANGER_QUERY_VOLUME_TAGS \
+ CTL_CODE(IOCTL_CHANGER_BASE, 0x000B, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+
+#define IOCTL_CHANGER_REINITIALIZE_TRANSPORT \
+ CTL_CODE(IOCTL_CHANGER_BASE, 0x000A, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_CHANGER_SET_ACCESS \
+ CTL_CODE(IOCTL_CHANGER_BASE, 0x0004, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+
+#define IOCTL_CHANGER_SET_POSITION \
+ CTL_CODE(IOCTL_CHANGER_BASE, 0x0007, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+
+#define MAX_VOLUME_ID_SIZE 36
+#define MAX_VOLUME_TEMPLATE_SIZE 40
+
+typedef enum _ELEMENT_TYPE {
+ AllElements,
+ ChangerTransport,
+ ChangerSlot,
+ ChangerIEPort,
+ ChangerDrive,
+ ChangerDoor,
+ ChangerKeypad,
+ ChangerMaxElement
+} ELEMENT_TYPE, *PELEMENT_TYPE;
+
+typedef struct _CHANGER_ELEMENT {
+ ELEMENT_TYPE ElementType;
+ ULONG ElementAddress;
+} CHANGER_ELEMENT, *PCHANGER_ELEMENT;
+
+typedef struct _CHANGER_ELEMENT_LIST {
+ CHANGER_ELEMENT Element;
+ ULONG NumberOfElements;
+} CHANGER_ELEMENT_LIST, *PCHANGER_ELEMENT_LIST;
+
+typedef struct _CHANGER_INITIALIZE_ELEMENT_STATUS {
+ CHANGER_ELEMENT_LIST ElementList;
+ BOOLEAN BarCodeScan;
+} CHANGER_INITIALIZE_ELEMENT_STATUS, *PCHANGER_INITIALIZE_ELEMENT_STATUS;
+
+typedef struct _CHANGER_READ_ELEMENT_STATUS {
+ CHANGER_ELEMENT_LIST ElementList;
+ BOOLEAN VolumeTagInfo;
+} CHANGER_READ_ELEMENT_STATUS, *PCHANGER_READ_ELEMENT_STATUS;
+
+
+typedef struct _CHANGER_SET_POSITION {
+ CHANGER_ELEMENT Transport;
+ CHANGER_ELEMENT Destination;
+ BOOLEAN Flip;
+} CHANGER_SET_POSITION, *PCHANGER_SET_POSITION;
+
+typedef struct _CHANGER_EXCHANGE_MEDIUM {
+ CHANGER_ELEMENT Transport;
+ CHANGER_ELEMENT Source;
+ CHANGER_ELEMENT Destination1;
+ CHANGER_ELEMENT Destination2;
+ BOOLEAN Flip1;
+ BOOLEAN Flip2;
+} CHANGER_EXCHANGE_MEDIUM, *PCHANGER_EXCHANGE_MEDIUM;
+
+typedef struct _CHANGER_MOVE_MEDIUM {
+ CHANGER_ELEMENT Transport;
+ CHANGER_ELEMENT Source;
+ CHANGER_ELEMENT Destination;
+ BOOLEAN Flip;
+} CHANGER_MOVE_MEDIUM, *PCHANGER_MOVE_MEDIUM;
+
+#define VENDOR_ID_LENGTH 8
+#define PRODUCT_ID_LENGTH 16
+#define REVISION_LENGTH 4
+#define SERIAL_NUMBER_LENGTH 32
+
+typedef struct _CHANGER_PRODUCT_DATA {
+ UCHAR VendorId[VENDOR_ID_LENGTH];
+ UCHAR ProductId[PRODUCT_ID_LENGTH];
+ UCHAR Revision[REVISION_LENGTH];
+ UCHAR SerialNumber[SERIAL_NUMBER_LENGTH];
+ UCHAR DeviceType;
+} CHANGER_PRODUCT_DATA, *PCHANGER_PRODUCT_DATA;
+
+/* CHANGER_SET_ACCESS.Control constants */
+#define LOCK_ELEMENT 0
+#define UNLOCK_ELEMENT 1
+#define EXTEND_IEPORT 2
+#define RETRACT_IEPORT 3
+
+typedef struct _CHANGER_SET_ACCESS {
+ CHANGER_ELEMENT Element;
+ ULONG Control;
+} CHANGER_SET_ACCESS, *PCHANGER_SET_ACCESS;
+
+
+typedef enum _CHANGER_DEVICE_PROBLEM_TYPE {
+ DeviceProblemNone,
+ DeviceProblemHardware,
+ DeviceProblemCHMError,
+ DeviceProblemDoorOpen,
+ DeviceProblemCalibrationError,
+ DeviceProblemTargetFailure,
+ DeviceProblemCHMMoveError,
+ DeviceProblemCHMZeroError,
+ DeviceProblemCartridgeInsertError,
+ DeviceProblemPositionError,
+ DeviceProblemSensorError,
+ DeviceProblemCartridgeEjectError,
+ DeviceProblemGripperError,
+ DeviceProblemDriveError
+} CHANGER_DEVICE_PROBLEM_TYPE, *PCHANGER_DEVICE_PROBLEM_TYPE;
+
+/* CHANGER_ELEMENT_STATUS(_EX).Flags constants */
+#define ELEMENT_STATUS_FULL 0x00000001
+#define ELEMENT_STATUS_IMPEXP 0x00000002
+#define ELEMENT_STATUS_EXCEPT 0x00000004
+#define ELEMENT_STATUS_ACCESS 0x00000008
+#define ELEMENT_STATUS_EXENAB 0x00000010
+#define ELEMENT_STATUS_INENAB 0x00000020
+#define ELEMENT_STATUS_PRODUCT_DATA 0x00000040
+#define ELEMENT_STATUS_LUN_VALID 0x00001000
+#define ELEMENT_STATUS_ID_VALID 0x00002000
+#define ELEMENT_STATUS_NOT_BUS 0x00008000
+#define ELEMENT_STATUS_INVERT 0x00400000
+#define ELEMENT_STATUS_SVALID 0x00800000
+#define ELEMENT_STATUS_PVOLTAG 0x10000000
+#define ELEMENT_STATUS_AVOLTAG 0x20000000
+
+/* CHANGER_ELEMENT_STATUS(_EX).ExceptionCode constants */
+#define ERROR_LABEL_UNREADABLE 0x00000001
+#define ERROR_LABEL_QUESTIONABLE 0x00000002
+#define ERROR_SLOT_NOT_PRESENT 0x00000004
+#define ERROR_DRIVE_NOT_INSTALLED 0x00000008
+#define ERROR_TRAY_MALFUNCTION 0x00000010
+#define ERROR_INIT_STATUS_NEEDED 0x00000011
+#define ERROR_UNHANDLED_ERROR 0xFFFFFFFF
+
+typedef struct _CHANGER_ELEMENT_STATUS {
+ CHANGER_ELEMENT Element;
+ CHANGER_ELEMENT SrcElementAddress;
+ ULONG Flags;
+ ULONG ExceptionCode;
+ UCHAR TargetId;
+ UCHAR Lun;
+ USHORT Reserved;
+ UCHAR PrimaryVolumeID[MAX_VOLUME_ID_SIZE];
+ UCHAR AlternateVolumeID[MAX_VOLUME_ID_SIZE];
+} CHANGER_ELEMENT_STATUS, *PCHANGER_ELEMENT_STATUS;
+
+typedef struct _CHANGER_ELEMENT_STATUS_EX {
+ CHANGER_ELEMENT Element;
+ CHANGER_ELEMENT SrcElementAddress;
+ ULONG Flags;
+ ULONG ExceptionCode;
+ UCHAR TargetId;
+ UCHAR Lun;
+ USHORT Reserved;
+ UCHAR PrimaryVolumeID[MAX_VOLUME_ID_SIZE];
+ UCHAR AlternateVolumeID[MAX_VOLUME_ID_SIZE];
+ UCHAR VendorIdentification[VENDOR_ID_LENGTH];
+ UCHAR ProductIdentification[PRODUCT_ID_LENGTH];
+ UCHAR SerialNumber[SERIAL_NUMBER_LENGTH];
+} CHANGER_ELEMENT_STATUS_EX, *PCHANGER_ELEMENT_STATUS_EX;
+
+/* CHANGER_SEND_VOLUME_TAG_INFORMATION.ActionCode constants */
+#define SEARCH_ALL 0x0
+#define SEARCH_PRIMARY 0x1
+#define SEARCH_ALTERNATE 0x2
+#define SEARCH_ALL_NO_SEQ 0x4
+#define SEARCH_PRI_NO_SEQ 0x5
+#define SEARCH_ALT_NO_SEQ 0x6
+#define ASSERT_PRIMARY 0x8
+#define ASSERT_ALTERNATE 0x9
+#define REPLACE_PRIMARY 0xA
+#define REPLACE_ALTERNATE 0xB
+#define UNDEFINE_PRIMARY 0xC
+#define UNDEFINE_ALTERNATE 0xD
+
+typedef struct _CHANGER_SEND_VOLUME_TAG_INFORMATION {
+ CHANGER_ELEMENT StartingElement;
+ ULONG ActionCode;
+ UCHAR VolumeIDTemplate[MAX_VOLUME_TEMPLATE_SIZE];
+} CHANGER_SEND_VOLUME_TAG_INFORMATION, *PCHANGER_SEND_VOLUME_TAG_INFORMATION;
+
+/* GET_CHANGER_PARAMETERS.Features0 constants */
+#define CHANGER_BAR_CODE_SCANNER_INSTALLED 0x00000001
+#define CHANGER_INIT_ELEM_STAT_WITH_RANGE 0x00000002
+#define CHANGER_CLOSE_IEPORT 0x00000004
+#define CHANGER_OPEN_IEPORT 0x00000008
+#define CHANGER_STATUS_NON_VOLATILE 0x00000010
+#define CHANGER_EXCHANGE_MEDIA 0x00000020
+#define CHANGER_CLEANER_SLOT 0x00000040
+#define CHANGER_LOCK_UNLOCK 0x00000080
+#define CHANGER_CARTRIDGE_MAGAZINE 0x00000100
+#define CHANGER_MEDIUM_FLIP 0x00000200
+#define CHANGER_POSITION_TO_ELEMENT 0x00000400
+#define CHANGER_REPORT_IEPORT_STATE 0x00000800
+#define CHANGER_STORAGE_DRIVE 0x00001000
+#define CHANGER_STORAGE_IEPORT 0x00002000
+#define CHANGER_STORAGE_SLOT 0x00004000
+#define CHANGER_STORAGE_TRANSPORT 0x00008000
+#define CHANGER_DRIVE_CLEANING_REQUIRED 0x00010000
+#define CHANGER_PREDISMOUNT_EJECT_REQUIRED 0x00020000
+#define CHANGER_CLEANER_ACCESS_NOT_VALID 0x00040000
+#define CHANGER_PREMOUNT_EJECT_REQUIRED 0x00080000
+#define CHANGER_VOLUME_IDENTIFICATION 0x00100000
+#define CHANGER_VOLUME_SEARCH 0x00200000
+#define CHANGER_VOLUME_ASSERT 0x00400000
+#define CHANGER_VOLUME_REPLACE 0x00800000
+#define CHANGER_VOLUME_UNDEFINE 0x01000000
+#define CHANGER_SERIAL_NUMBER_VALID 0x04000000
+#define CHANGER_DEVICE_REINITIALIZE_CAPABLE 0x08000000
+#define CHANGER_KEYPAD_ENABLE_DISABLE 0x10000000
+#define CHANGER_DRIVE_EMPTY_ON_DOOR_ACCESS 0x20000000
+#define CHANGER_RESERVED_BIT 0x80000000
+
+/* GET_CHANGER_PARAMETERS.Features1 constants */
+#define CHANGER_PREDISMOUNT_ALIGN_TO_SLOT 0x80000001
+#define CHANGER_PREDISMOUNT_ALIGN_TO_DRIVE 0x80000002
+#define CHANGER_CLEANER_AUTODISMOUNT 0x80000004
+#define CHANGER_TRUE_EXCHANGE_CAPABLE 0x80000008
+#define CHANGER_SLOTS_USE_TRAYS 0x80000010
+#define CHANGER_RTN_MEDIA_TO_ORIGINAL_ADDR 0x80000020
+#define CHANGER_CLEANER_OPS_NOT_SUPPORTED 0x80000040
+#define CHANGER_IEPORT_USER_CONTROL_OPEN 0x80000080
+#define CHANGER_IEPORT_USER_CONTROL_CLOSE 0x80000100
+#define CHANGER_MOVE_EXTENDS_IEPORT 0x80000200
+#define CHANGER_MOVE_RETRACTS_IEPORT 0x80000400
+
+/* GET_CHANGER_PARAMETERS.MoveFrom,ExchangeFrom,PositionCapabilities constants */
+#define CHANGER_TO_TRANSPORT 0x01
+#define CHANGER_TO_SLOT 0x02
+#define CHANGER_TO_IEPORT 0x04
+#define CHANGER_TO_DRIVE 0x08
+
+/* GET_CHANGER_PARAMETERS.LockUnlockCapabilities constants */
+#define LOCK_UNLOCK_IEPORT 0x01
+#define LOCK_UNLOCK_DOOR 0x02
+#define LOCK_UNLOCK_KEYPAD 0x04
+
+typedef struct _GET_CHANGER_PARAMETERS {
+ ULONG Size;
+ USHORT NumberTransportElements;
+ USHORT NumberStorageElements;
+ USHORT NumberCleanerSlots;
+ USHORT NumberIEElements;
+ USHORT NumberDataTransferElements;
+ USHORT NumberOfDoors;
+ USHORT FirstSlotNumber;
+ USHORT FirstDriveNumber;
+ USHORT FirstTransportNumber;
+ USHORT FirstIEPortNumber;
+ USHORT FirstCleanerSlotAddress;
+ USHORT MagazineSize;
+ ULONG DriveCleanTimeout;
+ ULONG Features0;
+ ULONG Features1;
+ UCHAR MoveFromTransport;
+ UCHAR MoveFromSlot;
+ UCHAR MoveFromIePort;
+ UCHAR MoveFromDrive;
+ UCHAR ExchangeFromTransport;
+ UCHAR ExchangeFromSlot;
+ UCHAR ExchangeFromIePort;
+ UCHAR ExchangeFromDrive;
+ UCHAR LockUnlockCapabilities;
+ UCHAR PositionCapabilities;
+ UCHAR Reserved1[2];
+ ULONG Reserved2[2];
+} GET_CHANGER_PARAMETERS, * PGET_CHANGER_PARAMETERS;
+
+typedef struct READ_ELEMENT_ADDRESS_INFO {
+ ULONG NumberOfElements;
+ CHANGER_ELEMENT_STATUS ElementStatus[1];
+} READ_ELEMENT_ADDRESS_INFO, *PREAD_ELEMENT_ADDRESS_INFO;
+
+typedef struct _TAPE_WMI_OPERATIONS {
+ ULONG Method;
+ ULONG DataBufferSize;
+ PVOID DataBuffer;
+} TAPE_WMI_OPERATIONS, *PTAPE_WMI_OPERATIONS;
+
+typedef struct _WMI_CHANGER_PROBLEM_DEVICE_ERROR {
+ ULONG ChangerProblemType;
+} WMI_CHANGER_PROBLEM_DEVICE_ERROR, *PWMI_CHANGER_PROBLEM_DEVICE_ERROR;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __NTDDCHGR_H */
diff --git a/tcc/include/winapi/ddk/ntdddisk.h b/tcc/include/winapi/ddk/ntdddisk.h
new file mode 100644
index 0000000..daf75c0
--- /dev/null
+++ b/tcc/include/winapi/ddk/ntdddisk.h
@@ -0,0 +1,521 @@
+/*
+ * ntdddisk.h
+ *
+ * Disk IOCTL interface.
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __NTDDDISK_H
+#define __NTDDDISK_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+#include "ntddstor.h"
+
+#define DD_DISK_DEVICE_NAME "\\Device\\UNKNOWN"
+#define DD_DISK_DEVICE_NAME_U L"\\Device\\UNKNOWN"
+
+#define IOCTL_DISK_BASE FILE_DEVICE_DISK
+
+#define IOCTL_DISK_CHECK_VERIFY \
+ CTL_CODE(IOCTL_DISK_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_DISK_CONTROLLER_NUMBER \
+ CTL_CODE(IOCTL_DISK_BASE, 0x0011, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_DISK_CREATE_DISK \
+ CTL_CODE(IOCTL_DISK_BASE, 0x0016, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+
+#define IOCTL_DISK_DELETE_DRIVE_LAYOUT \
+ CTL_CODE(IOCTL_DISK_BASE, 0x0040, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+
+#define IOCTL_DISK_FIND_NEW_DEVICES \
+ CTL_CODE(IOCTL_DISK_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_DISK_FORMAT_TRACKS \
+ CTL_CODE(IOCTL_DISK_BASE, 0x0006, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+
+#define IOCTL_DISK_FORMAT_TRACKS_EX \
+ CTL_CODE(IOCTL_DISK_BASE, 0x000b, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+
+#define IOCTL_DISK_GET_CACHE_INFORMATION \
+ CTL_CODE(IOCTL_DISK_BASE, 0x0035, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_DISK_GET_DRIVE_GEOMETRY \
+ CTL_CODE(IOCTL_DISK_BASE, 0x0000, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_DISK_GET_DRIVE_GEOMETRY_EX \
+ CTL_CODE(IOCTL_DISK_BASE, 0x0028, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_DISK_GET_DRIVE_LAYOUT \
+ CTL_CODE(IOCTL_DISK_BASE, 0x0003, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_DISK_GET_DRIVE_LAYOUT_EX \
+ CTL_CODE(IOCTL_DISK_BASE, 0x0014, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_DISK_GET_MEDIA_TYPES \
+ CTL_CODE(IOCTL_DISK_BASE, 0x0300, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_DISK_GET_LENGTH_INFO \
+ CTL_CODE(IOCTL_DISK_BASE, 0x0017, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_DISK_GET_PARTITION_INFO \
+ CTL_CODE(IOCTL_DISK_BASE, 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_DISK_GET_PARTITION_INFO_EX \
+ CTL_CODE(IOCTL_DISK_BASE, 0x0012, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_DISK_GROW_PARTITION \
+ CTL_CODE(IOCTL_DISK_BASE, 0x0034, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+
+#define IOCTL_DISK_INTERNAL_CLEAR_VERIFY \
+ CTL_CODE(IOCTL_DISK_BASE, 0x0101, METHOD_NEITHER, FILE_ANY_ACCESS)
+
+#define IOCTL_DISK_INTERNAL_SET_VERIFY \
+ CTL_CODE(IOCTL_DISK_BASE, 0x0100, METHOD_NEITHER, FILE_ANY_ACCESS)
+
+#define IOCTL_DISK_IS_WRITABLE \
+ CTL_CODE(IOCTL_DISK_BASE, 0x0009, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_DISK_PERFORMANCE \
+ CTL_CODE(IOCTL_DISK_BASE, 0x0008, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_DISK_PERFORMANCE_OFF \
+ CTL_CODE(IOCTL_DISK_BASE, 0x0018, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_DISK_REASSIGN_BLOCKS \
+ CTL_CODE(IOCTL_DISK_BASE, 0x0007, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+
+#define IOCTL_DISK_RESERVE \
+ CTL_CODE(IOCTL_DISK_BASE, 0x0204, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_DISK_SET_CACHE_INFORMATION \
+ CTL_CODE(IOCTL_DISK_BASE, 0x0036, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+
+#define IOCTL_DISK_SET_DRIVE_LAYOUT \
+ CTL_CODE(IOCTL_DISK_BASE, 0x0004, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+
+#define IOCTL_DISK_SET_DRIVE_LAYOUT_EX \
+ CTL_CODE(IOCTL_DISK_BASE, 0x0015, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+
+#define IOCTL_DISK_SET_PARTITION_INFO \
+ CTL_CODE(IOCTL_DISK_BASE, 0x0002, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+
+#define IOCTL_DISK_SET_PARTITION_INFO_EX \
+ CTL_CODE(IOCTL_DISK_BASE, 0x0013, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+
+#define IOCTL_DISK_UPDATE_DRIVE_SIZE \
+ CTL_CODE(IOCTL_DISK_BASE, 0x0032, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+
+#define IOCTL_DISK_VERIFY \
+ CTL_CODE(IOCTL_DISK_BASE, 0x0005, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define SMART_GET_VERSION \
+ CTL_CODE(IOCTL_DISK_BASE, 0x0020, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define SMART_RCV_DRIVE_DATA \
+ CTL_CODE(IOCTL_DISK_BASE, 0x0022, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+
+#define SMART_SEND_DRIVE_COMMAND \
+ CTL_CODE(IOCTL_DISK_BASE, 0x0021, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+
+
+#define PARTITION_ENTRY_UNUSED 0x00
+#define PARTITION_FAT_12 0x01
+#define PARTITION_XENIX_1 0x02
+#define PARTITION_XENIX_2 0x03
+#define PARTITION_FAT_16 0x04
+#define PARTITION_EXTENDED 0x05
+#define PARTITION_HUGE 0x06
+#define PARTITION_IFS 0x07
+#define PARTITION_OS2BOOTMGR 0x0A
+#define PARTITION_FAT32 0x0B
+#define PARTITION_FAT32_XINT13 0x0C
+#define PARTITION_XINT13 0x0E
+#define PARTITION_XINT13_EXTENDED 0x0F
+#define PARTITION_PREP 0x41
+#define PARTITION_LDM 0x42
+#define PARTITION_UNIX 0x63
+#define VALID_NTFT 0xC0
+#define PARTITION_NTFT 0x80
+
+#define IsFTPartition( PartitionType ) \
+ (((PartitionType) & PARTITION_NTFT) && \
+ IsRecognizedPartition(PartitionType))
+
+#define IsContainerPartition(PartitionType) \
+ (((PartitionType) == PARTITION_EXTENDED) || \
+ ((PartitionType) == PARTITION_XINT13_EXTENDED))
+
+#define IsRecognizedPartition(PartitionType) ( \
+ (((PartitionType) & PARTITION_NTFT) && (((PartitionType) & ~0xC0) == PARTITION_FAT_12)) || \
+ (((PartitionType) & PARTITION_NTFT) && (((PartitionType) & ~0xC0) == PARTITION_HUGE)) || \
+ (((PartitionType) & PARTITION_NTFT) && (((PartitionType) & ~0xC0) == PARTITION_IFS)) || \
+ (((PartitionType) & PARTITION_NTFT) && (((PartitionType) & ~0xC0) == PARTITION_FAT32)) || \
+ (((PartitionType) & PARTITION_NTFT) && (((PartitionType) & ~0xC0) == PARTITION_FAT32_XINT13)) || \
+ (((PartitionType) & PARTITION_NTFT) && (((PartitionType) & ~0xC0) == PARTITION_XINT13)) || \
+ ((PartitionType) == PARTITION_FAT_12) || \
+ ((PartitionType) == PARTITION_FAT_16) || \
+ ((PartitionType) == PARTITION_HUGE) || \
+ ((PartitionType) == PARTITION_IFS) || \
+ ((PartitionType) == PARTITION_FAT32) || \
+ ((PartitionType) == PARTITION_FAT32_XINT13) || \
+ ((PartitionType) == PARTITION_XINT13))
+
+#define WMI_DISK_GEOMETRY_GUID \
+ {0x25007f51, 0x57c2, 0x11d1, {0xa5, 0x28, 0x0, 0xa0, 0xc9, 0x6, 0x29, 0x10}}
+
+typedef USHORT BAD_TRACK_NUMBER;
+typedef USHORT *PBAD_TRACK_NUMBER;
+
+typedef 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
+} MEDIA_TYPE, *PMEDIA_TYPE;
+
+typedef enum _DETECTION_TYPE {
+ DetectNone,
+ DetectInt13,
+ DetectExInt13
+} DETECTION_TYPE;
+
+typedef struct _DISK_CONTROLLER_NUMBER {
+ ULONG ControllerNumber;
+ ULONG DiskNumber;
+} DISK_CONTROLLER_NUMBER, *PDISK_CONTROLLER_NUMBER;
+
+typedef struct _DISK_INT13_INFO {
+ USHORT DriveSelect;
+ ULONG MaxCylinders;
+ USHORT SectorsPerTrack;
+ USHORT MaxHeads;
+ USHORT NumberDrives;
+} DISK_INT13_INFO, *PDISK_INT13_INFO;
+
+typedef struct _DISK_EX_INT13_INFO {
+ USHORT ExBufferSize;
+ USHORT ExFlags;
+ ULONG ExCylinders;
+ ULONG ExHeads;
+ ULONG ExSectorsPerTrack;
+ ULONG64 ExSectorsPerDrive;
+ USHORT ExSectorSize;
+ USHORT ExReserved;
+} DISK_EX_INT13_INFO, *PDISK_EX_INT13_INFO;
+
+typedef struct _DISK_DETECTION_INFO {
+ ULONG SizeOfDetectInfo;
+ DETECTION_TYPE DetectionType;
+ _ANONYMOUS_UNION union {
+ _ANONYMOUS_STRUCT struct {
+ DISK_INT13_INFO Int13;
+ DISK_EX_INT13_INFO ExInt13;
+ } DUMMYSTRUCTNAME;
+ } DUMMYUNIONNAME;
+} DISK_DETECTION_INFO, *PDISK_DETECTION_INFO;
+
+typedef struct _DISK_GEOMETRY {
+ LARGE_INTEGER Cylinders;
+ MEDIA_TYPE MediaType;
+ ULONG TracksPerCylinder;
+ ULONG SectorsPerTrack;
+ ULONG BytesPerSector;
+} DISK_GEOMETRY, *PDISK_GEOMETRY;
+
+typedef struct _DISK_GEOMETRY_EX {
+ DISK_GEOMETRY Geometry;
+ LARGE_INTEGER DiskSize;
+ UCHAR Data[1];
+} DISK_GEOMETRY_EX, *PDISK_GEOMETRY_EX;
+
+#define DiskGeometryGetPartition(Geometry) \
+ ((PDISK_PARTITION_INFO)((Geometry) + 1))
+
+#define DiskGeometryGetDetect(Geometry)\
+ ((PDISK_DETECTION_INFO)(((PBYTE)DiskGeometryGetPartition(Geometry) + \
+ DiskGeometryGetPartition(Geometry)->SizeOfPartitionInfo)))
+
+typedef struct _PARTITION_INFORMATION {
+ LARGE_INTEGER StartingOffset;
+ LARGE_INTEGER PartitionLength;
+ DWORD HiddenSectors;
+ DWORD PartitionNumber;
+ BYTE PartitionType;
+ BOOLEAN BootIndicator;
+ BOOLEAN RecognizedPartition;
+ BOOLEAN RewritePartition;
+} PARTITION_INFORMATION, *PPARTITION_INFORMATION;
+
+typedef struct _PARTITION_INFORMATION_GPT {
+ GUID PartitionType;
+ GUID PartitionId;
+ ULONG64 Attributes;
+ WCHAR Name [36];
+} PARTITION_INFORMATION_GPT, *PPARTITION_INFORMATION_GPT;
+
+typedef struct _DISK_PARTITION_INFO {
+ ULONG SizeOfPartitionInfo;
+ PARTITION_STYLE PartitionStyle;
+ _ANONYMOUS_UNION union {
+ struct {
+ ULONG Signature;
+ ULONG CheckSum;
+ } Mbr;
+ struct {
+ GUID DiskId;
+ } Gpt;
+ } DUMMYUNIONNAME;
+} DISK_PARTITION_INFO, *PDISK_PARTITION_INFO;
+
+typedef struct _DISK_PERFORMANCE {
+ LARGE_INTEGER BytesRead;
+ LARGE_INTEGER BytesWritten;
+ LARGE_INTEGER ReadTime;
+ LARGE_INTEGER WriteTime;
+ LARGE_INTEGER IdleTime;
+ ULONG ReadCount;
+ ULONG WriteCount;
+ ULONG QueueDepth;
+ ULONG SplitCount;
+ LARGE_INTEGER QueryTime;
+ ULONG StorageDeviceNumber;
+ WCHAR StorageManagerName[8];
+} DISK_PERFORMANCE, *PDISK_PERFORMANCE;
+
+typedef struct _PARTITION_INFORMATION_EX {
+ PARTITION_STYLE PartitionStyle;
+ LARGE_INTEGER StartingOffset;
+ LARGE_INTEGER PartitionLength;
+ ULONG PartitionNumber;
+ BOOLEAN RewritePartition;
+ _ANONYMOUS_UNION union {
+ PARTITION_INFORMATION_MBR Mbr;
+ PARTITION_INFORMATION_GPT Gpt;
+ } DUMMYUNIONNAME;
+} PARTITION_INFORMATION_EX, *PPARTITION_INFORMATION_EX;
+
+typedef struct _FORMAT_EX_PARAMETERS {
+ MEDIA_TYPE MediaType;
+ ULONG StartCylinderNumber;
+ ULONG EndCylinderNumber;
+ ULONG StartHeadNumber;
+ ULONG EndHeadNumber;
+ USHORT FormatGapLength;
+ USHORT SectorsPerTrack;
+ USHORT SectorNumber[1];
+} FORMAT_EX_PARAMETERS, *PFORMAT_EX_PARAMETERS;
+
+typedef struct _FORMAT_PARAMETERS {
+ MEDIA_TYPE MediaType;
+ ULONG StartCylinderNumber;
+ ULONG EndCylinderNumber;
+ ULONG StartHeadNumber;
+ ULONG EndHeadNumber;
+} FORMAT_PARAMETERS, *PFORMAT_PARAMETERS;
+
+typedef struct _GET_LENGTH_INFORMATION {
+ LARGE_INTEGER Length;
+} GET_LENGTH_INFORMATION, *PGET_LENGTH_INFORMATION;
+
+typedef struct _REASSIGN_BLOCKS {
+ WORD Reserved;
+ WORD Count;
+ DWORD BlockNumber[1];
+} REASSIGN_BLOCKS, *PREASSIGN_BLOCKS;
+
+typedef struct _SET_PARTITION_INFORMATION {
+ UCHAR PartitionType;
+} SET_PARTITION_INFORMATION, *PSET_PARTITION_INFORMATION;
+
+typedef SET_PARTITION_INFORMATION SET_PARTITION_INFORMATION_MBR;
+typedef PARTITION_INFORMATION_GPT SET_PARTITION_INFORMATION_GPT;
+
+typedef struct _SET_PARTITION_INFORMATION_EX {
+ PARTITION_STYLE PartitionStyle;
+ _ANONYMOUS_UNION union {
+ SET_PARTITION_INFORMATION_MBR Mbr;
+ SET_PARTITION_INFORMATION_GPT Gpt;
+ } DUMMYUNIONNAME;
+} SET_PARTITION_INFORMATION_EX, *PSET_PARTITION_INFORMATION_EX;
+
+typedef struct _VERIFY_INFORMATION {
+ LARGE_INTEGER StartingOffset;
+ DWORD Length;
+} VERIFY_INFORMATION, *PVERIFY_INFORMATION;
+
+typedef enum {
+ EqualPriority,
+ KeepPrefetchedData,
+ KeepReadData
+} DISK_CACHE_RETENTION_PRIORITY;
+
+typedef struct _DISK_CACHE_INFORMATION {
+ BOOLEAN ParametersSavable;
+ BOOLEAN ReadCacheEnabled;
+ BOOLEAN WriteCacheEnabled;
+ DISK_CACHE_RETENTION_PRIORITY ReadRetentionPriority;
+ DISK_CACHE_RETENTION_PRIORITY WriteRetentionPriority;
+ USHORT DisablePrefetchTransferLength;
+ BOOLEAN PrefetchScalar;
+ _ANONYMOUS_UNION union {
+ struct {
+ USHORT Minimum;
+ USHORT Maximum;
+ USHORT MaximumBlocks;
+ } ScalarPrefetch;
+ struct {
+ USHORT Minimum;
+ USHORT Maximum;
+ } BlockPrefetch;
+ } DUMMYUNIONNAME;
+} DISK_CACHE_INFORMATION, *PDISK_CACHE_INFORMATION;
+
+typedef struct _DISK_GROW_PARTITION {
+ ULONG PartitionNumber;
+ LARGE_INTEGER BytesToGrow;
+} DISK_GROW_PARTITION, *PDISK_GROW_PARTITION;
+
+/* GETVERSIONINPARAMS.fCapabilities constants */
+#define CAP_ATA_ID_CMD 1
+#define CAP_ATAPI_ID_CMD 2
+#define CAP_SMART_CMD 4
+
+typedef struct _GETVERSIONINPARAMS {
+ UCHAR bVersion;
+ UCHAR bRevision;
+ UCHAR bReserved;
+ UCHAR bIDEDeviceMap;
+ ULONG fCapabilities;
+ ULONG dwReserved[4];
+} GETVERSIONINPARAMS, *PGETVERSIONINPARAMS, *LPGETVERSIONINPARAMS;
+
+/* IDEREGS.bCommandReg constants */
+#define ATAPI_ID_CMD 0xA1
+#define ID_CMD 0xEC
+#define SMART_CMD 0xB0
+
+#define SMART_CYL_LOW 0x4F
+#define SMART_CYL_HI 0xC2
+
+typedef struct _IDEREGS {
+ UCHAR bFeaturesReg;
+ UCHAR bSectorCountReg;
+ UCHAR bSectorNumberReg;
+ UCHAR bCylLowReg;
+ UCHAR bCylHighReg;
+ UCHAR bDriveHeadReg;
+ UCHAR bCommandReg;
+ UCHAR bReserved;
+} IDEREGS, *PIDEREGS, *LPIDEREGS;
+
+#include <pshpack1.h>
+typedef struct _SENDCMDINPARAMS {
+ ULONG cBufferSize;
+ IDEREGS irDriveRegs;
+ UCHAR bDriveNumber;
+ UCHAR bReserved[3];
+ ULONG dwReserved[4];
+ UCHAR bBuffer[1];
+} SENDCMDINPARAMS, *PSENDCMDINPARAMS, *LPSENDCMDINPARAMS;
+#include <poppack.h>
+
+/* DRIVERSTATUS.bDriverError constants */
+#define SMART_NO_ERROR 0
+#define SMART_IDE_ERROR 1
+#define SMART_INVALID_FLAG 2
+#define SMART_INVALID_COMMAND 3
+#define SMART_INVALID_BUFFER 4
+#define SMART_INVALID_DRIVE 5
+#define SMART_INVALID_IOCTL 6
+#define SMART_ERROR_NO_MEM 7
+#define SMART_INVALID_REGISTER 8
+#define SMART_NOT_SUPPORTED 9
+#define SMART_NO_IDE_DEVICE 10
+
+#define SMART_OFFLINE_ROUTINE_OFFLINE 0
+#define SMART_SHORT_SELFTEST_OFFLINE 1
+#define SMART_EXTENDED_SELFTEST_OFFLINE 2
+#define SMART_ABORT_OFFLINE_SELFTEST 127
+#define SMART_SHORT_SELFTEST_CAPTIVE 129
+#define SMART_EXTENDED_SELFTEST_CAPTIVE 130
+
+typedef struct _DRIVERSTATUS {
+ UCHAR bDriverError;
+ UCHAR bIDEError;
+ UCHAR bReserved[2];
+ ULONG dwReserved[2];
+} DRIVERSTATUS, *PDRIVERSTATUS, *LPDRIVERSTATUS;
+
+#define READ_ATTRIBUTE_BUFFER_SIZE 512
+#define IDENTIFY_BUFFER_SIZE 512
+#define READ_THRESHOLD_BUFFER_SIZE 512
+#define SMART_LOG_SECTOR_SIZE 512
+
+#include <pshpack1.h>
+typedef struct _SENDCMDOUTPARAMS {
+ ULONG cBufferSize;
+ DRIVERSTATUS DriverStatus;
+ UCHAR bBuffer[1];
+} SENDCMDOUTPARAMS, *PSENDCMDOUTPARAMS, *LPSENDCMDOUTPARAMS;
+#include <poppack.h>
+
+#define READ_ATTRIBUTES 0xD0
+#define READ_THRESHOLDS 0xD1
+#define ENABLE_DISABLE_AUTOSAVE 0xD2
+#define SAVE_ATTRIBUTE_VALUES 0xD3
+#define EXECUTE_OFFLINE_DIAGS 0xD4
+#define SMART_READ_LOG 0xD5
+#define SMART_WRITE_LOG 0xd6
+#define ENABLE_SMART 0xD8
+#define DISABLE_SMART 0xD9
+#define RETURN_SMART_STATUS 0xDA
+#define ENABLE_DISABLE_AUTO_OFFLINE 0xDB
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __NTDDDISK_H */
diff --git a/tcc/include/winapi/ddk/ntddk.h b/tcc/include/winapi/ddk/ntddk.h
new file mode 100644
index 0000000..60a99ef
--- /dev/null
+++ b/tcc/include/winapi/ddk/ntddk.h
@@ -0,0 +1,91 @@
+/*
+ * ntddk.h
+ *
+ * Windows Device Driver Kit
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * DEFINES:
+ * DBG - Debugging enabled/disabled (0/1)
+ * POOL_TAGGING - Enable pool tagging
+ * _X86_ - X86 environment
+ * __USE_NTOSKRNL__ - Use ntoskrnl.exe exports instead of kernel32.dll
+ */
+
+#ifndef __NTDDK_H
+#define __NTDDK_H
+
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifndef __USE_NTOSKRNL__
+#define __USE_NTOSKRNL__ 1
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stdarg.h>
+#include <windef.h>
+#include <ntdef.h>
+#include <basetyps.h>
+
+/* Base types, structures and definitions */
+typedef short CSHORT;
+typedef CONST int CINT;
+typedef CONST char *PCSZ;
+
+#ifndef STATIC
+#define STATIC static
+#endif
+
+#ifndef CALLBACK
+#define CALLBACK
+#endif
+
+#ifndef DECL_IMPORT
+#define DECL_IMPORT __declspec(dllimport)
+#endif
+
+#ifndef DECL_EXPORT
+#define DECL_EXPORT __declspec(dllexport)
+#endif
+
+/* Windows NT status codes */
+#include "ntstatus.h"
+
+/* Windows NT definitions exported to user mode */
+#include <winnt.h>
+
+/* Windows Device Driver Kit */
+#include "winddk.h"
+
+/* Definitions only in Windows XP */
+#include "winxp.h"
+
+/* Definitions only in Windows 2000 */
+#include "win2k.h"
+
+/* Definitions only in Windows NT 4 */
+#include "winnt4.h"
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __NTDDK_H */
diff --git a/tcc/include/winapi/ddk/ntddkbd.h b/tcc/include/winapi/ddk/ntddkbd.h
new file mode 100644
index 0000000..93bc690
--- /dev/null
+++ b/tcc/include/winapi/ddk/ntddkbd.h
@@ -0,0 +1,135 @@
+/*
+ * ntddkbd.h
+ *
+ * Keyboard IOCTL interface
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __NTDDKBD_H
+#define __NTDDKBD_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+
+#define DD_KEYBOARD_DEVICE_NAME "\\Device\\KeyboardClass"
+#define DD_KEYBOARD_DEVICE_NAME_U L"\\Device\\KeyboardClass"
+
+#define IOCTL_KEYBOARD_QUERY_ATTRIBUTES \
+ CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0000, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_KEYBOARD_QUERY_INDICATORS \
+ CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0010, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_KEYBOARD_QUERY_INDICATOR_TRANSLATION \
+ CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0020, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_KEYBOARD_QUERY_TYPEMATIC \
+ CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0008, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_KEYBOARD_SET_TYPEMATIC \
+ CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0001, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_KEYBOARD_SET_INDICATORS \
+ CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0002, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+
+DEFINE_GUID(GUID_DEVINTERFACE_KEYBOARD, \
+ 0x884b96c3, 0x56ef, 0x11d1, 0xbc, 0x8c, 0x00, 0xa0, 0xc9, 0x14, 0x05, 0xdd);
+
+#define KEYBOARD_ERROR_VALUE_BASE 10000
+
+/* KEYBOARD_INPUT_DATA.MakeCode constants */
+#define KEYBOARD_OVERRUN_MAKE_CODE 0xFF
+
+/* KEYBOARD_INPUT_DATA.Flags constants */
+#define KEY_MAKE 0
+#define KEY_BREAK 1
+#define KEY_E0 2
+#define KEY_E1 4
+
+typedef struct _KEYBOARD_INPUT_DATA {
+ USHORT UnitId;
+ USHORT MakeCode;
+ USHORT Flags;
+ USHORT Reserved;
+ ULONG ExtraInformation;
+} KEYBOARD_INPUT_DATA, *PKEYBOARD_INPUT_DATA;
+
+
+typedef struct _KEYBOARD_TYPEMATIC_PARAMETERS {
+ USHORT UnitId;
+ USHORT Rate;
+ USHORT Delay;
+} KEYBOARD_TYPEMATIC_PARAMETERS, *PKEYBOARD_TYPEMATIC_PARAMETERS;
+
+typedef struct _KEYBOARD_ID {
+ UCHAR Type;
+ UCHAR Subtype;
+} KEYBOARD_ID, *PKEYBOARD_ID;
+
+#define ENHANCED_KEYBOARD(Id) ((Id).Type == 2 || (Id).Type == 4 || FAREAST_KEYBOARD(Id))
+#define FAREAST_KEYBOARD(Id) ((Id).Type == 7 || (Id).Type == 8)
+
+typedef struct _KEYBOARD_INDICATOR_PARAMETERS {
+ USHORT UnitId;
+ USHORT LedFlags;
+} KEYBOARD_INDICATOR_PARAMETERS, *PKEYBOARD_INDICATOR_PARAMETERS;
+
+typedef struct _INDICATOR_LIST {
+ USHORT MakeCode;
+ USHORT IndicatorFlags;
+} INDICATOR_LIST, *PINDICATOR_LIST;
+
+typedef struct _KEYBOARD_INDICATOR_TRANSLATION {
+ USHORT NumberOfIndicatorKeys;
+ INDICATOR_LIST IndicatorList[1];
+} KEYBOARD_INDICATOR_TRANSLATION, *PKEYBOARD_INDICATOR_TRANSLATION;
+
+typedef struct _KEYBOARD_ATTRIBUTES {
+ KEYBOARD_ID KeyboardIdentifier;
+ USHORT KeyboardMode;
+ USHORT NumberOfFunctionKeys;
+ USHORT NumberOfIndicators;
+ USHORT NumberOfKeysTotal;
+ ULONG InputDataQueueLength;
+ KEYBOARD_TYPEMATIC_PARAMETERS KeyRepeatMinimum;
+ KEYBOARD_TYPEMATIC_PARAMETERS KeyRepeatMaximum;
+} KEYBOARD_ATTRIBUTES, *PKEYBOARD_ATTRIBUTES;
+
+typedef struct _KEYBOARD_UNIT_ID_PARAMETER {
+ USHORT UnitId;
+} KEYBOARD_UNIT_ID_PARAMETER, *PKEYBOARD_UNIT_ID_PARAMETER;
+
+typedef struct _KEYBOARD_IME_STATUS {
+ USHORT UnitId;
+ ULONG ImeOpen;
+ ULONG ImeConvMode;
+} KEYBOARD_IME_STATUS, *PKEYBOARD_IME_STATUS;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __NTDDKBD_H */
diff --git a/tcc/include/winapi/ddk/ntddmou.h b/tcc/include/winapi/ddk/ntddmou.h
new file mode 100644
index 0000000..fcf9445
--- /dev/null
+++ b/tcc/include/winapi/ddk/ntddmou.h
@@ -0,0 +1,115 @@
+/*
+ * ntddmou.h
+ *
+ * Mouse device IOCTL interface.
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __NTDDMOU_H
+#define __NTDDMOU_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+
+#define DD_MOUSE_DEVICE_NAME "\\Device\\PointerClass"
+#define DD_MOUSE_DEVICE_NAME_U L"\\Device\\PointerClass"
+
+#define IOCTL_MOUSE_QUERY_ATTRIBUTES \
+ CTL_CODE(FILE_DEVICE_MOUSE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+DEFINE_GUID(GUID_DEVINTERFACE_MOUSE, \
+ 0x378de44c, 0x56ef, 0x11d1, 0xbc, 0x8c, 0x00, 0xa0, 0xc9, 0x14, 0x05, 0xdd);
+
+#define MOUSE_ERROR_VALUE_BASE 20000
+
+/* MOUSE_INPUT_DATA.ButtonFlags constants */
+#define MOUSE_LEFT_BUTTON_DOWN 0x0001
+#define MOUSE_LEFT_BUTTON_UP 0x0002
+#define MOUSE_RIGHT_BUTTON_DOWN 0x0004
+#define MOUSE_RIGHT_BUTTON_UP 0x0008
+#define MOUSE_MIDDLE_BUTTON_DOWN 0x0010
+#define MOUSE_MIDDLE_BUTTON_UP 0x0020
+#define MOUSE_BUTTON_4_DOWN 0x0040
+#define MOUSE_BUTTON_4_UP 0x0080
+#define MOUSE_BUTTON_5_DOWN 0x0100
+#define MOUSE_BUTTON_5_UP 0x0200
+#define MOUSE_WHEEL 0x0400
+
+#define MOUSE_BUTTON_1_DOWN MOUSE_LEFT_BUTTON_DOWN
+#define MOUSE_BUTTON_1_UP MOUSE_LEFT_BUTTON_UP
+#define MOUSE_BUTTON_2_DOWN MOUSE_RIGHT_BUTTON_DOWN
+#define MOUSE_BUTTON_2_UP MOUSE_RIGHT_BUTTON_UP
+#define MOUSE_BUTTON_3_DOWN MOUSE_MIDDLE_BUTTON_DOWN
+#define MOUSE_BUTTON_3_UP MOUSE_MIDDLE_BUTTON_UP
+
+/* MOUSE_INPUT_DATA.Flags constants */
+#define MOUSE_MOVE_RELATIVE 0
+#define MOUSE_MOVE_ABSOLUTE 1
+#define MOUSE_VIRTUAL_DESKTOP 0x02
+#define MOUSE_ATTRIBUTES_CHANGED 0x04
+
+typedef struct _MOUSE_INPUT_DATA {
+ USHORT UnitId;
+ USHORT Flags;
+ _ANONYMOUS_UNION union {
+ ULONG Buttons;
+ _ANONYMOUS_STRUCT struct {
+ USHORT ButtonFlags;
+ USHORT ButtonData;
+ } DUMMYSTRUCTNAME;
+ } DUMMYUNIONNAME;
+ ULONG RawButtons;
+ LONG LastX;
+ LONG LastY;
+ ULONG ExtraInformation;
+} MOUSE_INPUT_DATA, *PMOUSE_INPUT_DATA;
+
+typedef struct _MOUSE_UNIT_ID_PARAMETER {
+ USHORT UnitId;
+} MOUSE_UNIT_ID_PARAMETER, *PMOUSE_UNIT_ID_PARAMETER;
+
+/* MOUSE_ATTRIBUTES.MouseIdentifier constants */
+#define MOUSE_INPORT_HARDWARE 0x0001
+#define MOUSE_I8042_HARDWARE 0x0002
+#define MOUSE_SERIAL_HARDWARE 0x0004
+#define BALLPOINT_I8042_HARDWARE 0x0008
+#define BALLPOINT_SERIAL_HARDWARE 0x0010
+#define WHEELMOUSE_I8042_HARDWARE 0x0020
+#define WHEELMOUSE_SERIAL_HARDWARE 0x0040
+#define MOUSE_HID_HARDWARE 0x0080
+#define WHEELMOUSE_HID_HARDWARE 0x0100
+
+typedef struct _MOUSE_ATTRIBUTES {
+ USHORT MouseIdentifier;
+ USHORT NumberOfButtons;
+ USHORT SampleRate;
+ ULONG InputDataQueueLength;
+} MOUSE_ATTRIBUTES, *PMOUSE_ATTRIBUTES;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __NTDDMOU_H */
diff --git a/tcc/include/winapi/ddk/ntddndis.h b/tcc/include/winapi/ddk/ntddndis.h
new file mode 100644
index 0000000..06b2cd0
--- /dev/null
+++ b/tcc/include/winapi/ddk/ntddndis.h
@@ -0,0 +1,188 @@
+/*
+ * ntddndis.h
+ *
+ * NDIS device driver interface
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __NTDDNDIS_H
+#define __NTDDNDIS_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#pragma pack(push,4)
+
+#include "ntddk.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum _NDIS_WAN_QUALITY {
+ NdisWanRaw,
+ NdisWanErrorControl,
+ NdisWanReliable
+} NDIS_WAN_QUALITY, *PNDIS_WAN_QUALITY;
+
+typedef enum _NDIS_DEVICE_POWER_STATE {
+ NdisDeviceStateUnspecified = 0,
+ NdisDeviceStateD0,
+ NdisDeviceStateD1,
+ NdisDeviceStateD2,
+ NdisDeviceStateD3,
+ NdisDeviceStateMaximum
+} NDIS_DEVICE_POWER_STATE, *PNDIS_DEVICE_POWER_STATE;
+
+typedef struct _NDIS_PM_WAKE_UP_CAPABILITIES {
+ NDIS_DEVICE_POWER_STATE MinMagicPacketWakeUp;
+ NDIS_DEVICE_POWER_STATE MinPatternWakeUp;
+ NDIS_DEVICE_POWER_STATE MinLinkChangeWakeUp;
+} NDIS_PM_WAKE_UP_CAPABILITIES, *PNDIS_PM_WAKE_UP_CAPABILITIES;
+
+/* NDIS_PNP_CAPABILITIES.Flags constants */
+#define NDIS_DEVICE_WAKE_UP_ENABLE 0x00000001
+#define NDIS_DEVICE_WAKE_ON_PATTERN_MATCH_ENABLE 0x00000002
+#define NDIS_DEVICE_WAKE_ON_MAGIC_PACKET_ENABLE 0x00000004
+
+typedef struct _NDIS_PNP_CAPABILITIES {
+ ULONG Flags;
+ NDIS_PM_WAKE_UP_CAPABILITIES WakeUpCapabilities;
+} NDIS_PNP_CAPABILITIES, *PNDIS_PNP_CAPABILITIES;
+
+/* Required Object IDs (OIDs) */
+#define OID_GEN_SUPPORTED_LIST 0x00010101
+#define OID_GEN_HARDWARE_STATUS 0x00010102
+#define OID_GEN_MEDIA_SUPPORTED 0x00010103
+#define OID_GEN_MEDIA_IN_USE 0x00010104
+#define OID_GEN_MAXIMUM_LOOKAHEAD 0x00010105
+#define OID_GEN_MAXIMUM_FRAME_SIZE 0x00010106
+#define OID_GEN_LINK_SPEED 0x00010107
+#define OID_GEN_TRANSMIT_BUFFER_SPACE 0x00010108
+#define OID_GEN_RECEIVE_BUFFER_SPACE 0x00010109
+#define OID_GEN_TRANSMIT_BLOCK_SIZE 0x0001010A
+#define OID_GEN_RECEIVE_BLOCK_SIZE 0x0001010B
+#define OID_GEN_VENDOR_ID 0x0001010C
+#define OID_GEN_VENDOR_DESCRIPTION 0x0001010D
+#define OID_GEN_CURRENT_PACKET_FILTER 0x0001010E
+#define OID_GEN_CURRENT_LOOKAHEAD 0x0001010F
+#define OID_GEN_DRIVER_VERSION 0x00010110
+#define OID_GEN_MAXIMUM_TOTAL_SIZE 0x00010111
+#define OID_GEN_PROTOCOL_OPTIONS 0x00010112
+#define OID_GEN_MAC_OPTIONS 0x00010113
+#define OID_GEN_MEDIA_CONNECT_STATUS 0x00010114
+#define OID_GEN_MAXIMUM_SEND_PACKETS 0x00010115
+#define OID_GEN_VENDOR_DRIVER_VERSION 0x00010116
+#define OID_GEN_SUPPORTED_GUIDS 0x00010117
+#define OID_GEN_NETWORK_LAYER_ADDRESSES 0x00010118
+#define OID_GEN_TRANSPORT_HEADER_OFFSET 0x00010119
+#define OID_GEN_MACHINE_NAME 0x0001021A
+#define OID_GEN_RNDIS_CONFIG_PARAMETER 0x0001021B
+#define OID_GEN_VLAN_ID 0x0001021C
+
+/* Optional OIDs */
+#define OID_GEN_MEDIA_CAPABILITIES 0x00010201
+#define OID_GEN_PHYSICAL_MEDIUM 0x00010202
+
+/* Required statistics OIDs */
+#define OID_GEN_XMIT_OK 0x00020101
+#define OID_GEN_RCV_OK 0x00020102
+#define OID_GEN_XMIT_ERROR 0x00020103
+#define OID_GEN_RCV_ERROR 0x00020104
+#define OID_GEN_RCV_NO_BUFFER 0x00020105
+
+/* Optional statistics OIDs */
+#define OID_GEN_DIRECTED_BYTES_XMIT 0x00020201
+#define OID_GEN_DIRECTED_FRAMES_XMIT 0x00020202
+#define OID_GEN_MULTICAST_BYTES_XMIT 0x00020203
+#define OID_GEN_MULTICAST_FRAMES_XMIT 0x00020204
+#define OID_GEN_BROADCAST_BYTES_XMIT 0x00020205
+#define OID_GEN_BROADCAST_FRAMES_XMIT 0x00020206
+#define OID_GEN_DIRECTED_BYTES_RCV 0x00020207
+#define OID_GEN_DIRECTED_FRAMES_RCV 0x00020208
+#define OID_GEN_MULTICAST_BYTES_RCV 0x00020209
+#define OID_GEN_MULTICAST_FRAMES_RCV 0x0002020A
+#define OID_GEN_BROADCAST_BYTES_RCV 0x0002020B
+#define OID_GEN_BROADCAST_FRAMES_RCV 0x0002020C
+#define OID_GEN_RCV_CRC_ERROR 0x0002020D
+#define OID_GEN_TRANSMIT_QUEUE_LENGTH 0x0002020E
+#define OID_GEN_GET_TIME_CAPS 0x0002020F
+#define OID_GEN_GET_NETCARD_TIME 0x00020210
+#define OID_GEN_NETCARD_LOAD 0x00020211
+#define OID_GEN_DEVICE_PROFILE 0x00020212
+#define OID_GEN_INIT_TIME_MS 0x00020213
+#define OID_GEN_RESET_COUNTS 0x00020214
+#define OID_GEN_MEDIA_SENSE_COUNTS 0x00020215
+#define OID_GEN_FRIENDLY_NAME 0x00020216
+#define OID_GEN_MINIPORT_INFO 0x00020217
+#define OID_GEN_RESET_VERIFY_PARAMETERS 0x00020218
+
+/* IEEE 802.3 (Ethernet) OIDs */
+#define NDIS_802_3_MAC_OPTION_PRIORITY 0x00000001
+
+#define OID_802_3_PERMANENT_ADDRESS 0x01010101
+#define OID_802_3_CURRENT_ADDRESS 0x01010102
+#define OID_802_3_MULTICAST_LIST 0x01010103
+#define OID_802_3_MAXIMUM_LIST_SIZE 0x01010104
+#define OID_802_3_MAC_OPTIONS 0x01010105
+#define OID_802_3_RCV_ERROR_ALIGNMENT 0x01020101
+#define OID_802_3_XMIT_ONE_COLLISION 0x01020102
+#define OID_802_3_XMIT_MORE_COLLISIONS 0x01020103
+#define OID_802_3_XMIT_DEFERRED 0x01020201
+#define OID_802_3_XMIT_MAX_COLLISIONS 0x01020202
+#define OID_802_3_RCV_OVERRUN 0x01020203
+#define OID_802_3_XMIT_UNDERRUN 0x01020204
+#define OID_802_3_XMIT_HEARTBEAT_FAILURE 0x01020205
+#define OID_802_3_XMIT_TIMES_CRS_LOST 0x01020206
+#define OID_802_3_XMIT_LATE_COLLISIONS 0x01020207
+
+/* OID_GEN_MINIPORT_INFO constants */
+#define NDIS_MINIPORT_BUS_MASTER 0x00000001
+#define NDIS_MINIPORT_WDM_DRIVER 0x00000002
+#define NDIS_MINIPORT_SG_LIST 0x00000004
+#define NDIS_MINIPORT_SUPPORTS_MEDIA_QUERY 0x00000008
+#define NDIS_MINIPORT_INDICATES_PACKETS 0x00000010
+#define NDIS_MINIPORT_IGNORE_PACKET_QUEUE 0x00000020
+#define NDIS_MINIPORT_IGNORE_REQUEST_QUEUE 0x00000040
+#define NDIS_MINIPORT_IGNORE_TOKEN_RING_ERRORS 0x00000080
+#define NDIS_MINIPORT_INTERMEDIATE_DRIVER 0x00000100
+#define NDIS_MINIPORT_IS_NDIS_5 0x00000200
+#define NDIS_MINIPORT_IS_CO 0x00000400
+#define NDIS_MINIPORT_DESERIALIZE 0x00000800
+#define NDIS_MINIPORT_REQUIRES_MEDIA_POLLING 0x00001000
+#define NDIS_MINIPORT_SUPPORTS_MEDIA_SENSE 0x00002000
+#define NDIS_MINIPORT_NETBOOT_CARD 0x00004000
+#define NDIS_MINIPORT_PM_SUPPORTED 0x00008000
+#define NDIS_MINIPORT_SUPPORTS_MAC_ADDRESS_OVERWRITE 0x00010000
+#define NDIS_MINIPORT_USES_SAFE_BUFFER_APIS 0x00020000
+#define NDIS_MINIPORT_HIDDEN 0x00040000
+#define NDIS_MINIPORT_SWENUM 0x00080000
+#define NDIS_MINIPORT_SURPRISE_REMOVE_OK 0x00100000
+#define NDIS_MINIPORT_NO_HALT_ON_SUSPEND 0x00200000
+#define NDIS_MINIPORT_HARDWARE_DEVICE 0x00400000
+#define NDIS_MINIPORT_SUPPORTS_CANCEL_SEND_PACKETS 0x00800000
+#define NDIS_MINIPORT_64BITS_DMA 0x01000000
+
+#pragma pack(pop)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __NTDDNDIS_H */
diff --git a/tcc/include/winapi/ddk/ntddpar.h b/tcc/include/winapi/ddk/ntddpar.h
new file mode 100644
index 0000000..1b42365
--- /dev/null
+++ b/tcc/include/winapi/ddk/ntddpar.h
@@ -0,0 +1,119 @@
+/*
+ * ntddpar.h
+ *
+ * Parallel port driver interface
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __NTDDPAR_H
+#define __NTDDPAR_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+
+/* Parallel port device GUIDs */
+
+DEFINE_GUID (GUID_DEVINTERFACE_PARALLEL,
+ 0x97F76EF0, 0xF883, 0x11D0, 0xAF, 0x1F, 0x00, 0x00, 0xF8, 0x00, 0x84, 0x5C);
+DEFINE_GUID (GUID_DEVINTERFACE_PARCLASS,
+ 0x811FC6A5, 0xF728, 0x11D0, 0xA5, 0x37, 0x00, 0x00, 0xF8, 0x75, 0x3E, 0xD1);
+
+#define GUID_PARALLEL_DEVICE GUID_DEVINTERFACE_PARALLEL
+#define GUID_PARCLASS_DEVICE GUID_DEVINTERFACE_PARCLASS
+
+
+#define IOCTL_IEEE1284_GET_MODE \
+ CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 5, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_IEEE1284_NEGOTIATE \
+ CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_PAR_GET_DEFAULT_MODES \
+ CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 10, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_PAR_GET_DEVICE_CAPS \
+ CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_PAR_IS_PORT_FREE \
+ CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 21, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_PAR_QUERY_DEVICE_ID \
+ CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 3, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_PAR_QUERY_DEVICE_ID_SIZE \
+ CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_PAR_QUERY_INFORMATION \
+ CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_PAR_QUERY_LOCATION \
+ CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 22, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_PAR_QUERY_RAW_DEVICE_ID \
+ CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_PAR_SET_INFORMATION \
+ CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_PAR_SET_READ_ADDRESS \
+ CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_PAR_SET_WRITE_ADDRESS \
+ CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+typedef struct _PAR_DEVICE_ID_SIZE_INFORMATION {
+ ULONG DeviceIdSize;
+} PAR_DEVICE_ID_SIZE_INFORMATION, *PPAR_DEVICE_ID_SIZE_INFORMATION;
+
+#define PARALLEL_INIT 0x01
+#define PARALLEL_AUTOFEED 0x02
+#define PARALLEL_PAPER_EMPTY 0x04
+#define PARALLEL_OFF_LINE 0x08
+#define PARALLEL_POWER_OFF 0x10
+#define PARALLEL_NOT_CONNECTED 0x20
+#define PARALLEL_BUSY 0x40
+#define PARALLEL_SELECTED 0x80
+
+typedef struct _PAR_QUERY_INFORMATION {
+ UCHAR Status;
+} PAR_QUERY_INFORMATION, *PPAR_QUERY_INFORMATION;
+
+typedef struct _PAR_SET_INFORMATION {
+ UCHAR Init;
+} PAR_SET_INFORMATION, *PPAR_SET_INFORMATION;
+
+typedef struct _PARCLASS_NEGOTIATION_MASK {
+ USHORT usReadMask;
+ USHORT usWriteMask;
+} PARCLASS_NEGOTIATION_MASK, *PPARCLASS_NEGOTIATION_MASK;
+
+#define NONE 0x0000
+#define CENTRONICS 0x0001
+#define IEEE_COMPATIBILITY 0x0002
+#define NIBBLE 0x0004
+#define CHANNEL_NIBBLE 0x0008
+#define BYTE_BIDIR 0x0010
+#define EPP_HW 0x0020
+#define EPP_SW 0x0040
+#define EPP_ANY 0x0060
+#define BOUNDED_ECP 0x0080
+#define ECP_HW_NOIRQ 0x0100
+#define ECP_HW_IRQ 0x0200
+#define ECP_SW 0x0400
+#define ECP_ANY 0x0780
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __NTDDPAR_H */
diff --git a/tcc/include/winapi/ddk/ntddpcm.h b/tcc/include/winapi/ddk/ntddpcm.h
new file mode 100644
index 0000000..fc65075
--- /dev/null
+++ b/tcc/include/winapi/ddk/ntddpcm.h
@@ -0,0 +1,165 @@
+/*
+ * ntddpcm.h
+ *
+ * PCMCIA IOCTL interface
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __NTDDPCM_H
+#define __NTDDPCM_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+
+#define IOCTL_PCMCIA_BASE FILE_DEVICE_CONTROLLER
+
+#define DD_PCMCIA_DEVICE_NAME "\\\\.\\Pcmcia"
+#define DD_PCMCIA_DEVICE_NAME_U L"\\\\.\\Pcmcia"
+
+#define IOCTL_GET_TUPLE_DATA \
+ CTL_CODE(IOCTL_PCMCIA_BASE, 3000, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_SOCKET_INFORMATION \
+ CTL_CODE(IOCTL_PCMCIA_BASE, 3004, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define DEVICE_IDENTIFIER_LENGTH 64
+#define DRIVER_NAME_LENGTH 32
+#define MANUFACTURER_NAME_LENGTH 64
+
+#define PcmciaInvalidControllerType 0xffffffff
+
+typedef struct _TUPLE_REQUEST {
+ USHORT Socket;
+} TUPLE_REQUEST, *PTUPLE_REQUEST;
+
+typedef enum _PCMCIA_CONTROLLER_CLASS {
+ PcmciaInvalidControllerClass = -1,
+ PcmciaIntelCompatible,
+ PcmciaCardBusCompatible,
+ PcmciaElcController,
+ PcmciaDatabook,
+ PcmciaPciPcmciaBridge,
+ PcmciaCirrusLogic,
+ PcmciaTI,
+ PcmciaTopic,
+ PcmciaRicoh,
+ PcmciaDatabookCB,
+ PcmciaOpti,
+ PcmciaTrid,
+ PcmciaO2Micro,
+ PcmciaNEC,
+ PcmciaNEC_98
+} PCMCIA_CONTROLLER_CLASS, *PPCMCIA_CONTROLLER_CLASS;
+
+typedef struct _PCMCIA_SOCKET_INFORMATION {
+ USHORT Socket;
+ USHORT TupleCrc;
+ UCHAR Manufacturer[MANUFACTURER_NAME_LENGTH];
+ UCHAR Identifier[DEVICE_IDENTIFIER_LENGTH];
+ UCHAR DriverName[DRIVER_NAME_LENGTH];
+ UCHAR DeviceFunctionId;
+ UCHAR Reserved;
+ UCHAR CardInSocket;
+ UCHAR CardEnabled;
+ ULONG ControllerType;
+} PCMCIA_SOCKET_INFORMATION, *PPCMCIA_SOCKET_INFORMATION;
+
+#define PcmciaClassFromControllerType(type) ((PCMCIA_CONTROLLER_CLASS)((type) & 0xff))
+#define PcmciaModelFromControllerType(type) (((type) >> 8) & 0x3ffff)
+#define PcmciaRevisionFromControllerType(type) ((type) >> 26)
+
+
+DEFINE_GUID(GUID_PCMCIA_INTERFACE_STANDARD, \
+ 0xbed5dadfL, 0x38fb, 0x11d1, 0x94, 0x62, 0x00, 0xc0, 0x4f, 0xb9, 0x60, 0xee);
+
+typedef ULONG MEMORY_SPACE;
+
+typedef ULONG STDCALL
+(*PPCMCIA_READ_WRITE_CONFIG)(
+ /*IN*/ PVOID Context,
+ /*IN*/ ULONG WhichSpace,
+ /*IN*/ PUCHAR Buffer,
+ /*IN*/ ULONG Offset,
+ /*IN*/ ULONG Length);
+
+#define PCCARD_PCI_CONFIGURATION_SPACE 0
+#define PCCARD_ATTRIBUTE_MEMORY 1
+#define PCCARD_COMMON_MEMORY 2
+#define PCCARD_ATTRIBUTE_MEMORY_INDIRECT 3
+#define PCCARD_COMMON_MEMORY_INDIRECT 4
+
+typedef struct _PCMCIA_BUS_INTERFACE_STANDARD {
+ USHORT Size;
+ USHORT Version;
+ PVOID Context;
+ PINTERFACE_REFERENCE InterfaceReference;
+ PINTERFACE_DEREFERENCE InterfaceDereference;
+ PPCMCIA_READ_WRITE_CONFIG ReadConfig;
+ PPCMCIA_READ_WRITE_CONFIG WriteConfig;
+} PCMCIA_BUS_INTERFACE_STANDARD, *PPCMCIA_BUS_INTERFACE_STANDARD;
+
+#define PCMCIA_MEMORY_8BIT_ACCESS 0
+#define PCMCIA_MEMORY_16BIT_ACCESS 1
+
+typedef BOOLEAN STDCALL
+(*PPCMCIA_MODIFY_MEMORY_WINDOW)(
+ /*IN*/ PVOID Context,
+ /*IN*/ ULONGLONG HostBase,
+ /*IN*/ ULONGLONG CardBase,
+ /*IN*/ BOOLEAN Enable,
+ /*IN*/ ULONG WindowSize /*OPTIONAL*/,
+ /*IN*/ UCHAR AccessSpeed /*OPTIONAL*/,
+ /*IN*/ UCHAR BusWidth /*OPTIONAL*/,
+ /*IN*/ BOOLEAN IsAttributeMemory /*OPTIONAL*/);
+
+#define PCMCIA_VPP_0V 0
+#define PCMCIA_VPP_12V 1
+#define PCMCIA_VPP_IS_VCC 2
+
+typedef BOOLEAN STDCALL
+(*PPCMCIA_SET_VPP)(
+ /*IN*/ PVOID Context,
+ /*IN*/ UCHAR VppLevel);
+
+typedef BOOLEAN STDCALL
+(*PPCMCIA_IS_WRITE_PROTECTED)(
+ /*IN*/ PVOID Context);
+
+typedef struct _PCMCIA_INTERFACE_STANDARD {
+ USHORT Size;
+ USHORT Version;
+ PINTERFACE_REFERENCE InterfaceReference;
+ PINTERFACE_DEREFERENCE InterfaceDereference;
+ PVOID Context;
+ PPCMCIA_MODIFY_MEMORY_WINDOW ModifyMemoryWindow;
+ PPCMCIA_SET_VPP SetVpp;
+ PPCMCIA_IS_WRITE_PROTECTED IsWriteProtected;
+} PCMCIA_INTERFACE_STANDARD, *PPCMCIA_INTERFACE_STANDARD;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __NTDDPCM_H */
diff --git a/tcc/include/winapi/ddk/ntddscsi.h b/tcc/include/winapi/ddk/ntddscsi.h
new file mode 100644
index 0000000..11629cb
--- /dev/null
+++ b/tcc/include/winapi/ddk/ntddscsi.h
@@ -0,0 +1,171 @@
+/*
+ * ntddscsi.h
+ *
+ * SCSI port IOCTL interface.
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __NTDDSCSI_H
+#define __NTDDSCSI_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+
+#define DD_SCSI_DEVICE_NAME "\\Device\\ScsiPort"
+#define DD_SCSI_DEVICE_NAME_U L"\\Device\\ScsiPort"
+
+#define IOCTL_SCSI_BASE FILE_DEVICE_CONTROLLER
+
+#define IOCTL_SCSI_GET_INQUIRY_DATA \
+ CTL_CODE(IOCTL_SCSI_BASE, 0x0403, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_SCSI_GET_CAPABILITIES \
+ CTL_CODE(IOCTL_SCSI_BASE, 0x0404, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_SCSI_GET_ADDRESS \
+ CTL_CODE(IOCTL_SCSI_BASE, 0x0406, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_SCSI_MINIPORT \
+ CTL_CODE(IOCTL_SCSI_BASE, 0x0402, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+
+#define IOCTL_SCSI_PASS_THROUGH \
+ CTL_CODE(IOCTL_SCSI_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+
+#define IOCTL_SCSI_PASS_THROUGH_DIRECT \
+ CTL_CODE(IOCTL_SCSI_BASE, 0x0405, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+
+#define IOCTL_SCSI_RESCAN_BUS \
+ CTL_CODE(IOCTL_SCSI_BASE, 0x0407, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+
+DEFINE_GUID(ScsiRawInterfaceGuid, \
+ 0x53f56309L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
+
+DEFINE_GUID(WmiScsiAddressGuid, \
+ 0x53f5630fL, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
+
+typedef struct _SCSI_PASS_THROUGH {
+ USHORT Length;
+ UCHAR ScsiStatus;
+ UCHAR PathId;
+ UCHAR TargetId;
+ UCHAR Lun;
+ UCHAR CdbLength;
+ UCHAR SenseInfoLength;
+ UCHAR DataIn;
+ ULONG DataTransferLength;
+ ULONG TimeOutValue;
+ ULONG_PTR DataBufferOffset;
+ ULONG SenseInfoOffset;
+ UCHAR Cdb[16];
+} SCSI_PASS_THROUGH, *PSCSI_PASS_THROUGH;
+
+typedef struct _SCSI_PASS_THROUGH_DIRECT {
+ USHORT Length;
+ UCHAR ScsiStatus;
+ UCHAR PathId;
+ UCHAR TargetId;
+ UCHAR Lun;
+ UCHAR CdbLength;
+ UCHAR SenseInfoLength;
+ UCHAR DataIn;
+ ULONG DataTransferLength;
+ ULONG TimeOutValue;
+ PVOID DataBuffer;
+ ULONG SenseInfoOffset;
+ UCHAR Cdb[16];
+} SCSI_PASS_THROUGH_DIRECT, *PSCSI_PASS_THROUGH_DIRECT;
+
+typedef struct _SRB_IO_CONTROL {
+ ULONG HeaderLength;
+ UCHAR Signature[8];
+ ULONG Timeout;
+ ULONG ControlCode;
+ ULONG ReturnCode;
+ ULONG Length;
+} SRB_IO_CONTROL, *PSRB_IO_CONTROL;
+
+typedef struct _SCSI_ADDRESS {
+ ULONG Length;
+ UCHAR PortNumber;
+ UCHAR PathId;
+ UCHAR TargetId;
+ UCHAR Lun;
+} SCSI_ADDRESS, *PSCSI_ADDRESS;
+
+typedef struct _SCSI_BUS_DATA {
+ UCHAR NumberOfLogicalUnits;
+ UCHAR InitiatorBusId;
+ ULONG InquiryDataOffset;
+}SCSI_BUS_DATA, *PSCSI_BUS_DATA;
+
+typedef struct _SCSI_ADAPTER_BUS_INFO {
+ UCHAR NumberOfBuses;
+ SCSI_BUS_DATA BusData[1];
+} SCSI_ADAPTER_BUS_INFO, *PSCSI_ADAPTER_BUS_INFO;
+
+typedef struct _IO_SCSI_CAPABILITIES {
+ ULONG Length;
+ ULONG MaximumTransferLength;
+ ULONG MaximumPhysicalPages;
+ ULONG SupportedAsynchronousEvents;
+ ULONG AlignmentMask;
+ BOOLEAN TaggedQueuing;
+ BOOLEAN AdapterScansDown;
+ BOOLEAN AdapterUsesPio;
+} IO_SCSI_CAPABILITIES, *PIO_SCSI_CAPABILITIES;
+
+typedef struct _SCSI_INQUIRY_DATA {
+ UCHAR PathId;
+ UCHAR TargetId;
+ UCHAR Lun;
+ BOOLEAN DeviceClaimed;
+ ULONG InquiryDataLength;
+ ULONG NextInquiryDataOffset;
+ UCHAR InquiryData[1];
+} SCSI_INQUIRY_DATA, *PSCSI_INQUIRY_DATA;
+
+#define SCSI_IOCTL_DATA_OUT 0
+#define SCSI_IOCTL_DATA_IN 1
+#define SCSI_IOCTL_DATA_UNSPECIFIED 2
+
+typedef struct _DUMP_POINTERS {
+ PADAPTER_OBJECT AdapterObject;
+ PVOID MappedRegisterBase;
+ PVOID DumpData;
+ PVOID CommonBufferVa;
+ LARGE_INTEGER CommonBufferPa;
+ ULONG CommonBufferSize;
+ BOOLEAN AllocateCommonBuffers;
+ BOOLEAN UseDiskDump;
+ UCHAR Spare1[2];
+ PVOID DeviceObject;
+} DUMP_POINTERS, *PDUMP_POINTERS;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __NTDDSCSI_H */
diff --git a/tcc/include/winapi/ddk/ntddser.h b/tcc/include/winapi/ddk/ntddser.h
new file mode 100644
index 0000000..cc0bd2a
--- /dev/null
+++ b/tcc/include/winapi/ddk/ntddser.h
@@ -0,0 +1,449 @@
+/*
+ * ntddser.h
+ *
+ * Serial port driver interface
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __NTDDSER_H
+#define __NTDDSER_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+
+/* GUIDs */
+
+DEFINE_GUID(GUID_DEVINTERFACE_COMPORT,
+ 0x86e0d1e0L, 0x8089, 0x11d0, 0x9c, 0xe4, 0x08, 0x00, 0x3e, 0x30, 0x1f, 0x73);
+
+DEFINE_GUID(GUID_DEVINTERFACE_SERENUM_BUS_ENUMERATOR,
+ 0x4D36E978L, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18);
+
+#define IOCTL_SERIAL_CLEAR_STATS \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 36, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_CLR_DTR \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 10, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_CLR_RTS \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 13, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_CONFIG_SIZE \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 32, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_GET_BAUD_RATE \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 20, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_GET_CHARS \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 22, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_GET_COMMSTATUS \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 27, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_GET_DTRRTS \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 30, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_GET_HANDFLOW \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 24, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_GET_LINE_CONTROL \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 21, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_GET_MODEM_CONTROL \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 37, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_GET_MODEMSTATUS \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 26, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_GET_PROPERTIES \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 29, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_GET_STATS \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 35, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_GET_TIMEOUTS \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_GET_WAIT_MASK \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 16, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_IMMEDIATE_CHAR \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_LSRMST_INSERT \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 31, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_PURGE \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 19, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_RESET_DEVICE \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 11, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_SET_BAUD_RATE \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_SET_BREAK_ON \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_SET_BREAK_OFF \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 5, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_SET_CHARS \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 23, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_SET_DTR \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_SET_FIFO_CONTROL \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 39, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_SET_HANDFLOW \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 25, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_SET_LINE_CONTROL \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 3, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_SET_MODEM_CONTROL \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 38, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_SET_QUEUE_SIZE \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_SET_RTS \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_SET_TIMEOUTS \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_SET_WAIT_MASK \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 17, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_SET_XOFF \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 14, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_SET_XON \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_WAIT_ON_MASK \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 18, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_XOFF_COUNTER \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 28, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_SERIAL_INTERNAL_BASIC_SETTINGS \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 3, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_INTERNAL_CANCEL_WAIT_WAKE \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_INTERNAL_DO_WAIT_WAKE \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_INTERNAL_RESTORE_SETTINGS \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_SERENUM_PORT_DESC \
+ CTL_CODE (FILE_DEVICE_SERENUM, 130, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERENUM_GET_PORT_NAME \
+ CTL_CODE (FILE_DEVICE_SERENUM, 131, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_INTERNAL_SERENUM_REMOVE_SELF \
+ CTL_CODE (FILE_DEVICE_SERENUM, 129, METHOD_NEITHER, FILE_ANY_ACCESS)
+
+
+typedef struct _SERIAL_BAUD_RATE {
+ ULONG BaudRate;
+} SERIAL_BAUD_RATE, *PSERIAL_BAUD_RATE;
+
+/* SERIAL_BAUD_RATE.BaudRate constants */
+#define SERIAL_BAUD_075 0x00000001
+#define SERIAL_BAUD_110 0x00000002
+#define SERIAL_BAUD_134_5 0x00000004
+#define SERIAL_BAUD_150 0x00000008
+#define SERIAL_BAUD_300 0x00000010
+#define SERIAL_BAUD_600 0x00000020
+#define SERIAL_BAUD_1200 0x00000040
+#define SERIAL_BAUD_1800 0x00000080
+#define SERIAL_BAUD_2400 0x00000100
+#define SERIAL_BAUD_4800 0x00000200
+#define SERIAL_BAUD_7200 0x00000400
+#define SERIAL_BAUD_9600 0x00000800
+#define SERIAL_BAUD_14400 0x00001000
+#define SERIAL_BAUD_19200 0x00002000
+#define SERIAL_BAUD_38400 0x00004000
+#define SERIAL_BAUD_56K 0x00008000
+#define SERIAL_BAUD_128K 0x00010000
+#define SERIAL_BAUD_115200 0x00020000
+#define SERIAL_BAUD_57600 0x00040000
+#define SERIAL_BAUD_USER 0x10000000
+
+typedef struct _SERIAL_CHARS {
+ UCHAR EofChar;
+ UCHAR ErrorChar;
+ UCHAR BreakChar;
+ UCHAR EventChar;
+ UCHAR XonChar;
+ UCHAR XoffChar;
+} SERIAL_CHARS, *PSERIAL_CHARS;
+
+typedef struct _SERIAL_STATUS {
+ ULONG Errors;
+ ULONG HoldReasons;
+ ULONG AmountInInQueue;
+ ULONG AmountInOutQueue;
+ BOOLEAN EofReceived;
+ BOOLEAN WaitForImmediate;
+} SERIAL_STATUS, *PSERIAL_STATUS;
+
+typedef struct _SERIAL_HANDFLOW {
+ ULONG ControlHandShake;
+ ULONG FlowReplace;
+ LONG XonLimit;
+ LONG XoffLimit;
+} SERIAL_HANDFLOW, *PSERIAL_HANDFLOW;
+
+#define SERIAL_DTR_MASK 0x00000003
+#define SERIAL_DTR_CONTROL 0x00000001
+#define SERIAL_DTR_HANDSHAKE 0x00000002
+#define SERIAL_CTS_HANDSHAKE 0x00000008
+#define SERIAL_DSR_HANDSHAKE 0x00000010
+#define SERIAL_DCD_HANDSHAKE 0x00000020
+#define SERIAL_OUT_HANDSHAKEMASK 0x00000038
+#define SERIAL_DSR_SENSITIVITY 0x00000040
+#define SERIAL_ERROR_ABORT 0x80000000
+#define SERIAL_CONTROL_INVALID 0x7fffff84
+#define SERIAL_AUTO_TRANSMIT 0x00000001
+#define SERIAL_AUTO_RECEIVE 0x00000002
+#define SERIAL_ERROR_CHAR 0x00000004
+#define SERIAL_NULL_STRIPPING 0x00000008
+#define SERIAL_BREAK_CHAR 0x00000010
+#define SERIAL_RTS_MASK 0x000000c0
+#define SERIAL_RTS_CONTROL 0x00000040
+#define SERIAL_RTS_HANDSHAKE 0x00000080
+#define SERIAL_TRANSMIT_TOGGLE 0x000000c0
+#define SERIAL_XOFF_CONTINUE 0x80000000
+#define SERIAL_FLOW_INVALID 0x7fffff20
+
+typedef struct _SERIAL_LINE_CONTROL {
+ UCHAR StopBits;
+ UCHAR Parity;
+ UCHAR WordLength;
+} SERIAL_LINE_CONTROL, *PSERIAL_LINE_CONTROL;
+
+/* SERIAL_LINE_CONTROL.StopBits constants */
+#define STOP_BIT_1 0x00
+#define STOP_BITS_1_5 0x01
+#define STOP_BITS_2 0x02
+
+/* SERIAL_LINE_CONTROL.Parity constants */
+#define NO_PARITY 0x00
+#define ODD_PARITY 0x01
+#define EVEN_PARITY 0x02
+#define MARK_PARITY 0x03
+#define SPACE_PARITY 0x04
+
+/* IOCTL_SERIAL_(GET_MODEM_CONTROL, SET_MODEM_CONTROL) flags */
+#define SERIAL_IOC_MCR_DTR 0x00000001
+#define SERIAL_IOC_MCR_RTS 0x00000002
+#define SERIAL_IOC_MCR_OUT1 0x00000004
+#define SERIAL_IOC_MCR_OUT2 0x00000008
+#define SERIAL_IOC_MCR_LOOP 0x00000010
+
+typedef struct _SERIAL_COMMPROP {
+ USHORT PacketLength;
+ USHORT PacketVersion;
+ ULONG ServiceMask;
+ ULONG Reserved1;
+ ULONG MaxTxQueue;
+ ULONG MaxRxQueue;
+ ULONG MaxBaud;
+ ULONG ProvSubType;
+ ULONG ProvCapabilities;
+ ULONG SettableParams;
+ ULONG SettableBaud;
+ USHORT SettableData;
+ USHORT SettableStopParity;
+ ULONG CurrentTxQueue;
+ ULONG CurrentRxQueue;
+ ULONG ProvSpec1;
+ ULONG ProvSpec2;
+ WCHAR ProvChar[1];
+} SERIAL_COMMPROP, *PSERIAL_COMMPROP;
+
+/* SERIAL_COMMPROP.SettableParams flags */
+#define SERIAL_SP_PARITY 0x0001
+#define SERIAL_SP_BAUD 0x0002
+#define SERIAL_SP_DATABITS 0x0004
+#define SERIAL_SP_STOPBITS 0x0008
+#define SERIAL_SP_HANDSHAKING 0x0010
+#define SERIAL_SP_PARITY_CHECK 0x0020
+#define SERIAL_SP_CARRIER_DETECT 0x0040
+
+/* SERIAL_COMMPROP.ProvCapabilities flags */
+#define SERIAL_PCF_DTRDSR 0x00000001
+#define SERIAL_PCF_RTSCTS 0x00000002
+#define SERIAL_PCF_CD 0x00000004
+#define SERIAL_PCF_PARITY_CHECK 0x00000008
+#define SERIAL_PCF_XONXOFF 0x00000010
+#define SERIAL_PCF_SETXCHAR 0x00000020
+#define SERIAL_PCF_TOTALTIMEOUTS 0x00000040
+#define SERIAL_PCF_INTTIMEOUTS 0x00000080
+#define SERIAL_PCF_SPECIALCHARS 0x00000100
+#define SERIAL_PCF_16BITMODE 0x00000200
+
+/* SERIAL_COMMPROP.SettableData flags */
+#define SERIAL_DATABITS_5 0x0001
+#define SERIAL_DATABITS_6 0x0002
+#define SERIAL_DATABITS_7 0x0004
+#define SERIAL_DATABITS_8 0x0008
+#define SERIAL_DATABITS_16 0x0010
+#define SERIAL_DATABITS_16X 0x0020
+
+/* SERIAL_COMMPROP.SettableStopParity flags */
+#define SERIAL_STOPBITS_10 0x0001
+#define SERIAL_STOPBITS_15 0x0002
+#define SERIAL_STOPBITS_20 0x0004
+#define SERIAL_PARITY_NONE 0x0100
+#define SERIAL_PARITY_ODD 0x0200
+#define SERIAL_PARITY_EVEN 0x0400
+#define SERIAL_PARITY_MARK 0x0800
+#define SERIAL_PARITY_SPACE 0x1000
+
+typedef struct _SERIALPERF_STATS {
+ ULONG ReceivedCount;
+ ULONG TransmittedCount;
+ ULONG FrameErrorCount;
+ ULONG SerialOverrunErrorCount;
+ ULONG BufferOverrunErrorCount;
+ ULONG ParityErrorCount;
+} SERIALPERF_STATS, *PSERIALPERF_STATS;
+
+typedef struct _SERIAL_TIMEOUTS {
+ ULONG ReadIntervalTimeout;
+ ULONG ReadTotalTimeoutMultiplier;
+ ULONG ReadTotalTimeoutConstant;
+ ULONG WriteTotalTimeoutMultiplier;
+ ULONG WriteTotalTimeoutConstant;
+} SERIAL_TIMEOUTS, *PSERIAL_TIMEOUTS;
+
+/* IOCTL_SERIAL_(GET_WAIT_MASK, SET_WAIT_MASK, WAIT_ON_MASK) flags */
+#define SERIAL_EV_RXCHAR 0x0001
+#define SERIAL_EV_RXFLAG 0x0002
+#define SERIAL_EV_TXEMPTY 0x0004
+#define SERIAL_EV_CTS 0x0008
+#define SERIAL_EV_DSR 0x0010
+#define SERIAL_EV_RLSD 0x0020
+#define SERIAL_EV_BREAK 0x0040
+#define SERIAL_EV_ERR 0x0080
+#define SERIAL_EV_RING 0x0100
+#define SERIAL_EV_PERR 0x0200
+#define SERIAL_EV_RX80FULL 0x0400
+#define SERIAL_EV_EVENT1 0x0800
+#define SERIAL_EV_EVENT2 0x1000
+
+/* IOCTL_SERIAL_LSRMST_INSERT constants */
+#define SERIAL_LSRMST_LSR_DATA 0x01
+#define SERIAL_LSRMST_LSR_NODATA 0x02
+#define SERIAL_LSRMST_MST 0x03
+#define SERIAL_LSRMST_ESCAPE 0x00
+
+/* IOCTL_SERIAL_PURGE constants */
+#define SERIAL_PURGE_TXABORT 0x00000001
+#define SERIAL_PURGE_RXABORT 0x00000002
+#define SERIAL_PURGE_TXCLEAR 0x00000004
+#define SERIAL_PURGE_RXCLEAR 0x00000008
+
+/* IOCTL_SERIAL_SET_FIFO_CONTROL constants */
+#define SERIAL_IOC_FCR_FIFO_ENABLE 0x00000001
+#define SERIAL_IOC_FCR_RCVR_RESET 0x00000002
+#define SERIAL_IOC_FCR_XMIT_RESET 0x00000004
+#define SERIAL_IOC_FCR_DMA_MODE 0x00000008
+#define SERIAL_IOC_FCR_RES1 0x00000010
+#define SERIAL_IOC_FCR_RES2 0x00000020
+#define SERIAL_IOC_FCR_RCVR_TRIGGER_LSB 0x00000040
+#define SERIAL_IOC_FCR_RCVR_TRIGGER_MSB 0x00000080
+
+typedef struct _SERIAL_QUEUE_SIZE {
+ ULONG InSize;
+ ULONG OutSize;
+} SERIAL_QUEUE_SIZE, *PSERIAL_QUEUE_SIZE;
+
+typedef struct _SERIAL_XOFF_COUNTER {
+ ULONG Timeout;
+ LONG Counter;
+ UCHAR XoffChar;
+} SERIAL_XOFF_COUNTER, *PSERIAL_XOFF_COUNTER;
+
+typedef struct _SERIAL_BASIC_SETTINGS {
+ SERIAL_TIMEOUTS Timeouts;
+ SERIAL_HANDFLOW HandFlow;
+ ULONG RxFifo;
+ ULONG TxFifo;
+} SERIAL_BASIC_SETTINGS, *PSERIAL_BASIC_SETTINGS;
+
+typedef struct _SERENUM_PORT_DESC {
+ ULONG Size;
+ PVOID PortHandle;
+ PHYSICAL_ADDRESS PortAddress;
+ USHORT Reserved[1];
+} SERENUM_PORT_DESC, *PSERENUM_PORT_DESC;
+
+typedef UCHAR STDCALL
+(*PSERENUM_READPORT)(
+ PVOID SerPortAddress);
+
+typedef VOID STDCALL
+(*PSERENUM_WRITEPORT)(
+ PVOID SerPortAddress,
+ UCHAR Value);
+
+typedef enum _SERENUM_PORTION {
+ SerenumFirstHalf,
+ SerenumSecondHalf,
+ SerenumWhole
+} SERENUM_PORTION;
+
+typedef struct _SERENUM_PORT_PARAMETERS {
+ ULONG Size;
+ PSERENUM_READPORT ReadAccessor;
+ PSERENUM_WRITEPORT WriteAccessor;
+ PVOID SerPortAddress;
+ PVOID HardwareHandle;
+ SERENUM_PORTION Portion;
+ USHORT NumberAxis;
+ USHORT Reserved[3];
+} SERENUM_PORT_PARAMETERS, *PSERENUM_PORT_PARAMETERS;
+
+#define SERIAL_ERROR_BREAK 0x00000001
+#define SERIAL_ERROR_FRAMING 0x00000002
+#define SERIAL_ERROR_OVERRUN 0x00000004
+#define SERIAL_ERROR_QUEUEOVERRUN 0x00000008
+#define SERIAL_ERROR_PARITY 0x00000010
+
+#define SERIAL_SP_UNSPECIFIED 0x00000000
+#define SERIAL_SP_RS232 0x00000001
+#define SERIAL_SP_PARALLEL 0x00000002
+#define SERIAL_SP_RS422 0x00000003
+#define SERIAL_SP_RS423 0x00000004
+#define SERIAL_SP_RS449 0x00000005
+#define SERIAL_SP_MODEM 0X00000006
+#define SERIAL_SP_FAX 0x00000021
+#define SERIAL_SP_SCANNER 0x00000022
+#define SERIAL_SP_BRIDGE 0x00000100
+#define SERIAL_SP_LAT 0x00000101
+#define SERIAL_SP_TELNET 0x00000102
+#define SERIAL_SP_X25 0x00000103
+#define SERIAL_SP_SERIALCOMM 0x00000001
+
+#define SERIAL_TX_WAITING_FOR_CTS 0x00000001
+#define SERIAL_TX_WAITING_FOR_DSR 0x00000002
+#define SERIAL_TX_WAITING_FOR_DCD 0x00000004
+#define SERIAL_TX_WAITING_FOR_XON 0x00000008
+#define SERIAL_TX_WAITING_XOFF_SENT 0x00000010
+#define SERIAL_TX_WAITING_ON_BREAK 0x00000020
+#define SERIAL_RX_WAITING_FOR_DSR 0x00000040
+
+#define SERIAL_DTR_STATE 0x00000001
+#define SERIAL_RTS_STATE 0x00000002
+#define SERIAL_CTS_STATE 0x00000010
+#define SERIAL_DSR_STATE 0x00000020
+#define SERIAL_RI_STATE 0x00000040
+#define SERIAL_DCD_STATE 0x00000080
+
+typedef struct _SERIALCONFIG {
+ ULONG Size;
+ USHORT Version;
+ ULONG SubType;
+ ULONG ProvOffset;
+ ULONG ProviderSize;
+ WCHAR ProviderData[1];
+} SERIALCONFIG,*PSERIALCONFIG;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __NTDDSER_H */
diff --git a/tcc/include/winapi/ddk/ntddstor.h b/tcc/include/winapi/ddk/ntddstor.h
new file mode 100644
index 0000000..232834a
--- /dev/null
+++ b/tcc/include/winapi/ddk/ntddstor.h
@@ -0,0 +1,333 @@
+/*
+ * ntddstor.h
+ *
+ * Storage class IOCTL interface.
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __NTDDSTOR_H
+#define __NTDDSTOR_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+
+#define IOCTL_STORAGE_BASE FILE_DEVICE_MASS_STORAGE
+
+#define IOCTL_STORAGE_CHECK_VERIFY \
+ CTL_CODE(IOCTL_STORAGE_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_STORAGE_CHECK_VERIFY2 \
+ CTL_CODE(IOCTL_STORAGE_BASE, 0x0200, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_STORAGE_EJECT_MEDIA \
+ CTL_CODE(IOCTL_STORAGE_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_STORAGE_EJECTION_CONTROL \
+ CTL_CODE(IOCTL_STORAGE_BASE, 0x0250, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_STORAGE_FIND_NEW_DEVICES \
+ CTL_CODE(IOCTL_STORAGE_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_STORAGE_GET_DEVICE_NUMBER \
+ CTL_CODE(IOCTL_STORAGE_BASE, 0x0420, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER \
+ CTL_CODE(IOCTL_STORAGE_BASE, 0x0304, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_STORAGE_GET_MEDIA_TYPES \
+ CTL_CODE(IOCTL_STORAGE_BASE, 0x0300, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_STORAGE_GET_MEDIA_TYPES_EX \
+ CTL_CODE(IOCTL_STORAGE_BASE, 0x0301, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_STORAGE_LOAD_MEDIA \
+ CTL_CODE(IOCTL_STORAGE_BASE, 0x0203, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_STORAGE_LOAD_MEDIA2 \
+ CTL_CODE(IOCTL_STORAGE_BASE, 0x0203, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_STORAGE_MCN_CONTROL \
+ CTL_CODE(IOCTL_STORAGE_BASE, 0x0251, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_STORAGE_MEDIA_REMOVAL \
+ CTL_CODE(IOCTL_STORAGE_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_STORAGE_PREDICT_FAILURE \
+ CTL_CODE(IOCTL_STORAGE_BASE, 0x0440, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_STORAGE_QUERY_PROPERTY \
+ CTL_CODE(IOCTL_STORAGE_BASE, 0x0500, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_STORAGE_RELEASE \
+ CTL_CODE(IOCTL_STORAGE_BASE, 0x0205, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_STORAGE_RESERVE \
+ CTL_CODE(IOCTL_STORAGE_BASE, 0x0204, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_STORAGE_RESET_BUS \
+ CTL_CODE(IOCTL_STORAGE_BASE, 0x0400, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+
+#define IOCTL_STORAGE_RESET_DEVICE \
+ CTL_CODE(IOCTL_STORAGE_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+
+
+DEFINE_GUID(GUID_DEVINTERFACE_DISK,
+ 0x53f56307L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
+
+DEFINE_GUID(GUID_DEVINTERFACE_CDROM,
+ 0x53f56308L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
+
+DEFINE_GUID(GUID_DEVINTERFACE_PARTITION,
+ 0x53f5630aL, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
+
+DEFINE_GUID(GUID_DEVINTERFACE_TAPE,
+ 0x53f5630bL, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
+
+DEFINE_GUID(GUID_DEVINTERFACE_WRITEONCEDISK,
+ 0x53f5630cL, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
+
+DEFINE_GUID(GUID_DEVINTERFACE_VOLUME,
+ 0x53f5630dL, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
+
+DEFINE_GUID(GUID_DEVINTERFACE_MEDIUMCHANGER,
+ 0x53f56310L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
+
+DEFINE_GUID(GUID_DEVINTERFACE_FLOPPY,
+ 0x53f56311L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
+
+DEFINE_GUID(GUID_DEVINTERFACE_CDCHANGER,
+ 0x53f56312L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
+
+DEFINE_GUID(GUID_DEVINTERFACE_STORAGEPORT,
+ 0x2accfe60L, 0xc130, 0x11d2, 0xb0, 0x82, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
+
+
+typedef enum _STORAGE_MEDIA_TYPE {
+ DDS_4mm = 0x20,
+ MiniQic,
+ Travan,
+ QIC,
+ MP_8mm,
+ AME_8mm,
+ AIT1_8mm,
+ DLT,
+ NCTP,
+ IBM_3480,
+ IBM_3490E,
+ IBM_Magstar_3590,
+ IBM_Magstar_MP,
+ STK_DATA_D3,
+ SONY_DTF,
+ DV_6mm,
+ DMI,
+ SONY_D2,
+ CLEANER_CARTRIDGE,
+ CD_ROM,
+ CD_R,
+ CD_RW,
+ DVD_ROM,
+ DVD_R,
+ DVD_RW,
+ MO_3_RW,
+ MO_5_WO,
+ MO_5_RW,
+ MO_5_LIMDOW,
+ PC_5_WO,
+ PC_5_RW,
+ PD_5_RW,
+ ABL_5_WO,
+ PINNACLE_APEX_5_RW,
+ SONY_12_WO,
+ PHILIPS_12_WO,
+ HITACHI_12_WO,
+ CYGNET_12_WO,
+ KODAK_14_WO,
+ MO_NFR_525,
+ NIKON_12_RW,
+ IOMEGA_ZIP,
+ IOMEGA_JAZ,
+ SYQUEST_EZ135,
+ SYQUEST_EZFLYER,
+ SYQUEST_SYJET,
+ AVATAR_F2,
+ MP2_8mm,
+ DST_S,
+ DST_M,
+ DST_L,
+ VXATape_1,
+ VXATape_2,
+ STK_9840,
+ LTO_Ultrium,
+ LTO_Accelis,
+ DVD_RAM,
+ AIT_8mm,
+ ADR_1,
+ ADR_2
+} STORAGE_MEDIA_TYPE, *PSTORAGE_MEDIA_TYPE;
+
+typedef enum _STORAGE_BUS_TYPE {
+ BusTypeUnknown = 0x00,
+ BusTypeScsi,
+ BusTypeAtapi,
+ BusTypeAta,
+ BusType1394,
+ BusTypeSsa,
+ BusTypeFibre,
+ BusTypeUsb,
+ BusTypeRAID,
+ BusTypeMaxReserved = 0x7F
+} STORAGE_BUS_TYPE, *PSTORAGE_BUS_TYPE;
+
+/* DEVICE_MEDIA_INFO.DeviceSpecific.DiskInfo.MediaCharacteristics constants */
+#define MEDIA_ERASEABLE 0x00000001
+#define MEDIA_WRITE_ONCE 0x00000002
+#define MEDIA_READ_ONLY 0x00000004
+#define MEDIA_READ_WRITE 0x00000008
+#define MEDIA_WRITE_PROTECTED 0x00000100
+#define MEDIA_CURRENTLY_MOUNTED 0x80000000
+
+typedef struct _DEVICE_MEDIA_INFO {
+ union {
+ struct {
+ LARGE_INTEGER Cylinders;
+ STORAGE_MEDIA_TYPE MediaType;
+ ULONG TracksPerCylinder;
+ ULONG SectorsPerTrack;
+ ULONG BytesPerSector;
+ ULONG NumberMediaSides;
+ ULONG MediaCharacteristics;
+ } DiskInfo;
+ struct {
+ LARGE_INTEGER Cylinders;
+ STORAGE_MEDIA_TYPE MediaType;
+ ULONG TracksPerCylinder;
+ ULONG SectorsPerTrack;
+ ULONG BytesPerSector;
+ ULONG NumberMediaSides;
+ ULONG MediaCharacteristics;
+ } RemovableDiskInfo;
+ struct {
+ STORAGE_MEDIA_TYPE MediaType;
+ ULONG MediaCharacteristics;
+ ULONG CurrentBlockSize;
+ STORAGE_BUS_TYPE BusType;
+ union {
+ struct {
+ UCHAR MediumType;
+ UCHAR DensityCode;
+ } ScsiInformation;
+ } BusSpecificData;
+ } TapeInfo;
+ } DeviceSpecific;
+} DEVICE_MEDIA_INFO, *PDEVICE_MEDIA_INFO;
+
+typedef struct _GET_MEDIA_TYPES {
+ ULONG DeviceType;
+ ULONG MediaInfoCount;
+ DEVICE_MEDIA_INFO MediaInfo[1];
+} GET_MEDIA_TYPES, *PGET_MEDIA_TYPES;
+
+typedef struct _STORAGE_ADAPTER_DESCRIPTOR {
+ ULONG Version;
+ ULONG Size;
+ ULONG MaximumTransferLength;
+ ULONG MaximumPhysicalPages;
+ ULONG AlignmentMask;
+ BOOLEAN AdapterUsesPio;
+ BOOLEAN AdapterScansDown;
+ BOOLEAN CommandQueueing;
+ BOOLEAN AcceleratedTransfer;
+ STORAGE_BUS_TYPE BusType;
+ USHORT BusMajorVersion;
+ USHORT BusMinorVersion;
+} STORAGE_ADAPTER_DESCRIPTOR, *PSTORAGE_ADAPTER_DESCRIPTOR;
+
+typedef struct _STORAGE_BUS_RESET_REQUEST {
+ UCHAR PathId;
+} STORAGE_BUS_RESET_REQUEST, *PSTORAGE_BUS_RESET_REQUEST;
+
+typedef struct _STORAGE_DESCRIPTOR_HEADER {
+ ULONG Version;
+ ULONG Size;
+} STORAGE_DESCRIPTOR_HEADER, *PSTORAGE_DESCRIPTOR_HEADER;
+
+typedef struct _STORAGE_DEVICE_DESCRIPTOR {
+ ULONG Version;
+ ULONG Size;
+ UCHAR DeviceType;
+ UCHAR DeviceTypeModifier;
+ BOOLEAN RemovableMedia;
+ BOOLEAN CommandQueueing;
+ ULONG VendorIdOffset;
+ ULONG ProductIdOffset;
+ ULONG ProductRevisionOffset;
+ ULONG SerialNumberOffset;
+ STORAGE_BUS_TYPE BusType;
+ ULONG RawPropertiesLength;
+ UCHAR RawDeviceProperties[1];
+} STORAGE_DEVICE_DESCRIPTOR, *PSTORAGE_DEVICE_DESCRIPTOR;
+
+typedef struct _STORAGE_DEVICE_ID_DESCRIPTOR {
+ ULONG Version;
+ ULONG Size;
+ ULONG NumberOfIdentifiers;
+ UCHAR Identifiers[1];
+} STORAGE_DEVICE_ID_DESCRIPTOR, *PSTORAGE_DEVICE_ID_DESCRIPTOR;
+
+typedef struct _STORAGE_DEVICE_NUMBER {
+ DEVICE_TYPE DeviceType;
+ ULONG DeviceNumber;
+ ULONG PartitionNumber;
+} STORAGE_DEVICE_NUMBER, *PSTORAGE_DEVICE_NUMBER;
+
+typedef struct _STORAGE_PREDICT_FAILURE {
+ ULONG PredictFailure;
+ UCHAR VendorSpecific[512];
+} STORAGE_PREDICT_FAILURE, *PSTORAGE_PREDICT_FAILURE;
+
+typedef enum _STORAGE_PROPERTY_ID {
+ StorageDeviceProperty = 0,
+ StorageAdapterProperty,
+ StorageDeviceIdProperty
+} STORAGE_PROPERTY_ID, *PSTORAGE_PROPERTY_ID;
+
+typedef enum _STORAGE_QUERY_TYPE {
+ PropertyStandardQuery = 0,
+ PropertyExistsQuery,
+ PropertyMaskQuery,
+ PropertyQueryMaxDefined
+} STORAGE_QUERY_TYPE, *PSTORAGE_QUERY_TYPE;
+
+typedef struct _STORAGE_PROPERTY_QUERY {
+ STORAGE_PROPERTY_ID PropertyId;
+ STORAGE_QUERY_TYPE QueryType;
+ UCHAR AdditionalParameters[1];
+} STORAGE_PROPERTY_QUERY, *PSTORAGE_PROPERTY_QUERY;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __NTDDSTOR_H */
diff --git a/tcc/include/winapi/ddk/ntddtape.h b/tcc/include/winapi/ddk/ntddtape.h
new file mode 100644
index 0000000..1b3b049
--- /dev/null
+++ b/tcc/include/winapi/ddk/ntddtape.h
@@ -0,0 +1,79 @@
+/*
+ * ntddtape.h
+ *
+ * Tape device IOCTL interface.
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __NTDDTAPE_H
+#define __NTDDTAPE_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+#include "ntddstor.h"
+
+#define DD_TAPE_DEVICE_NAME "\\Device\\Tape"
+#define DD_TAPE_DEVICE_NAME_U L"\\Device\\Tape"
+
+#define IOCTL_TAPE_BASE FILE_DEVICE_TAPE
+
+#define IOCTL_TAPE_CHECK_VERIFY CTL_CODE(IOCTL_TAPE_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_TAPE_CREATE_PARTITION CTL_CODE(IOCTL_TAPE_BASE, 0x000a, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_TAPE_ERASE CTL_CODE(IOCTL_TAPE_BASE, 0x0000, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_TAPE_FIND_NEW_DEVICES CTL_CODE(IOCTL_DISK_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_TAPE_GET_DRIVE_PARAMS CTL_CODE(IOCTL_TAPE_BASE, 0x0005, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_TAPE_GET_MEDIA_PARAMS CTL_CODE(IOCTL_TAPE_BASE, 0x0007, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_TAPE_GET_POSITION CTL_CODE(IOCTL_TAPE_BASE, 0x0003, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_TAPE_GET_STATUS CTL_CODE(IOCTL_TAPE_BASE, 0x0009, METHOD_BUFFERED, FILE_READ_ACCESS )
+
+#define IOCTL_TAPE_PREPARE CTL_CODE(IOCTL_TAPE_BASE, 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_TAPE_SET_DRIVE_PARAMS CTL_CODE(IOCTL_TAPE_BASE, 0x0006, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_TAPE_SET_MEDIA_PARAMS CTL_CODE(IOCTL_TAPE_BASE, 0x0008, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_TAPE_SET_POSITION CTL_CODE(IOCTL_TAPE_BASE, 0x0004, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_TAPE_WRITE_MARKS CTL_CODE(IOCTL_TAPE_BASE, 0x0002, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+
+
+typedef enum _TAPE_DRIVE_PROBLEM_TYPE {
+ TapeDriveProblemNone,
+ TapeDriveReadWriteWarning,
+ TapeDriveReadWriteError,
+ TapeDriveReadWarning,
+ TapeDriveWriteWarning,
+ TapeDriveReadError,
+ TapeDriveWriteError,
+ TapeDriveHardwareError,
+ TapeDriveUnsupportedMedia,
+ TapeDriveScsiConnectionError,
+ TapeDriveTimetoClean,
+ TapeDriveCleanDriveNow,
+ TapeDriveMediaLifeExpired,
+ TapeDriveSnappedTape
+} TAPE_DRIVE_PROBLEM_TYPE;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __NTDDTAPE_H */
diff --git a/tcc/include/winapi/ddk/ntddtdi.h b/tcc/include/winapi/ddk/ntddtdi.h
new file mode 100644
index 0000000..e907670
--- /dev/null
+++ b/tcc/include/winapi/ddk/ntddtdi.h
@@ -0,0 +1,61 @@
+/*
+ * ntddtdi.h
+ *
+ * TDI IOCTL interface
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __NTDDTDI_H
+#define __NTDDTDI_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+
+#define DD_TDI_DEVICE_NAME "\\Device\\UNKNOWN"
+#define DD_TDI_DEVICE_NAME_U L"\\Device\\UNKNOWN"
+
+#define _TDI_CONTROL_CODE(Request, Method) \
+ CTL_CODE(FILE_DEVICE_TRANSPORT, Request, Method, FILE_ANY_ACCESS)
+
+#define IOCTL_TDI_ACCEPT _TDI_CONTROL_CODE(0, METHOD_BUFFERED)
+#define IOCTL_TDI_CONNECT _TDI_CONTROL_CODE(1, METHOD_BUFFERED)
+#define IOCTL_TDI_DISCONNECT _TDI_CONTROL_CODE(2, METHOD_BUFFERED)
+#define IOCTL_TDI_LISTEN _TDI_CONTROL_CODE(3, METHOD_BUFFERED)
+#define IOCTL_TDI_QUERY_INFORMATION _TDI_CONTROL_CODE(4, METHOD_OUT_DIRECT)
+#define IOCTL_TDI_RECEIVE _TDI_CONTROL_CODE(5, METHOD_OUT_DIRECT)
+#define IOCTL_TDI_RECEIVE_DATAGRAM _TDI_CONTROL_CODE(6, METHOD_OUT_DIRECT)
+#define IOCTL_TDI_SEND _TDI_CONTROL_CODE(7, METHOD_IN_DIRECT)
+#define IOCTL_TDI_SEND_DATAGRAM _TDI_CONTROL_CODE(8, METHOD_IN_DIRECT)
+#define IOCTL_TDI_SET_EVENT_HANDLER _TDI_CONTROL_CODE(9, METHOD_BUFFERED)
+#define IOCTL_TDI_SET_INFORMATION _TDI_CONTROL_CODE(10, METHOD_IN_DIRECT)
+#define IOCTL_TDI_ASSOCIATE_ADDRESS _TDI_CONTROL_CODE(11, METHOD_BUFFERED)
+#define IOCTL_TDI_DISASSOCIATE_ADDRESS _TDI_CONTROL_CODE(12, METHOD_BUFFERED)
+#define IOCTL_TDI_ACTION _TDI_CONTROL_CODE(13, METHOD_OUT_DIRECT)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __NTDDTDI_H */
diff --git a/tcc/include/winapi/ddk/ntddvdeo.h b/tcc/include/winapi/ddk/ntddvdeo.h
new file mode 100644
index 0000000..2027de0
--- /dev/null
+++ b/tcc/include/winapi/ddk/ntddvdeo.h
@@ -0,0 +1,440 @@
+/*
+ * ntddvdeo.h
+ *
+ * Definitions for video devices
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __NTDDVDEO_H
+#define __NTDDVDEO_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+
+
+#define VIDEO_DEVICE_NAME "DISPLAY%d"
+#define WVIDEO_DEVICE_NAME L"DISPLAY%d"
+
+#define DD_FULLSCREEN_VIDEO_DEVICE_NAME L"\\Device\\FSVideo"
+
+DEFINE_GUID(GUID_DEVINTERFACE_DISPLAY_ADAPTER, \
+ 0x5b45201d, 0xf2f2, 0x4f3b, 0x85, 0xbb, 0x30, 0xff, 0x1f, 0x95, 0x35, 0x99);
+
+
+#define IOCTL_VIDEO_DISABLE_CURSOR \
+ CTL_CODE (FILE_DEVICE_VIDEO, 0x109, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_VIDEO_DISABLE_POINTER \
+ CTL_CODE(FILE_DEVICE_VIDEO, 0x10f, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_VIDEO_ENABLE_CURSOR \
+ CTL_CODE(FILE_DEVICE_VIDEO, 0x108, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_VIDEO_ENABLE_POINTER \
+ CTL_CODE(FILE_DEVICE_VIDEO, 0x10e, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_VIDEO_FREE_PUBLIC_ACCESS_RANGES \
+ CTL_CODE(FILE_DEVICE_VIDEO, 0x119, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_VIDEO_GET_BANK_SELECT_CODE \
+ CTL_CODE(FILE_DEVICE_VIDEO, 0x115, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_VIDEO_GET_CHILD_STATE \
+ CTL_CODE(FILE_DEVICE_VIDEO, 0x120, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_VIDEO_GET_POWER_MANAGEMENT \
+ CTL_CODE(FILE_DEVICE_VIDEO, 0x11c, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_VIDEO_HANDLE_VIDEOPARAMETERS \
+ CTL_CODE(FILE_DEVICE_VIDEO, 0x08, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_VIDEO_LOAD_AND_SET_FONT \
+ CTL_CODE(FILE_DEVICE_VIDEO, 0x105, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_VIDEO_MAP_VIDEO_MEMORY \
+ CTL_CODE(FILE_DEVICE_VIDEO, 0x116, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_VIDEO_QUERY_AVAIL_MODES \
+ CTL_CODE(FILE_DEVICE_VIDEO, 0x100, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_VIDEO_QUERY_COLOR_CAPABILITIES \
+ CTL_CODE(FILE_DEVICE_VIDEO, 0x11a, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_VIDEO_QUERY_CURRENT_MODE \
+ CTL_CODE(FILE_DEVICE_VIDEO, 0x102, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_VIDEO_QUERY_CURSOR_ATTR \
+ CTL_CODE(FILE_DEVICE_VIDEO, 0x10b, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_VIDEO_QUERY_CURSOR_POSITION \
+ CTL_CODE(FILE_DEVICE_VIDEO, 0x10d, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_VIDEO_QUERY_NUM_AVAIL_MODES \
+ CTL_CODE(FILE_DEVICE_VIDEO, 0x101, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_VIDEO_QUERY_POINTER_ATTR \
+ CTL_CODE(FILE_DEVICE_VIDEO, 0x111, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_VIDEO_QUERY_POINTER_CAPABILITIES \
+ CTL_CODE(FILE_DEVICE_VIDEO, 0x114, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_VIDEO_QUERY_POINTER_POSITION \
+ CTL_CODE(FILE_DEVICE_VIDEO, 0x113, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_VIDEO_QUERY_PUBLIC_ACCESS_RANGES \
+ CTL_CODE(FILE_DEVICE_VIDEO, 0x118, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_VIDEO_RESET_DEVICE \
+ CTL_CODE(FILE_DEVICE_VIDEO, 0x104, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_VIDEO_RESTORE_HARDWARE_STATE \
+ CTL_CODE(FILE_DEVICE_VIDEO, 0x81, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_VIDEO_SAVE_HARDWARE_STATE \
+ CTL_CODE(FILE_DEVICE_VIDEO, 0x80, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_VIDEO_SET_CHILD_STATE_CONFIGURATION \
+ CTL_CODE(FILE_DEVICE_VIDEO, 0x122, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_VIDEO_SET_COLOR_REGISTERS \
+ CTL_CODE(FILE_DEVICE_VIDEO, 0x107, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_VIDEO_SET_CURRENT_MODE \
+ CTL_CODE(FILE_DEVICE_VIDEO, 0x103, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_VIDEO_SET_CURSOR_ATTR \
+ CTL_CODE(FILE_DEVICE_VIDEO, 0x10a, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_VIDEO_SET_CURSOR_POSITION \
+ CTL_CODE(FILE_DEVICE_VIDEO, 0x10c, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_VIDEO_SET_PALETTE_REGISTERS \
+ CTL_CODE(FILE_DEVICE_VIDEO, 0x106, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_VIDEO_SET_POINTER_ATTR \
+ CTL_CODE(FILE_DEVICE_VIDEO, 0x110, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_VIDEO_SET_POINTER_POSITION \
+ CTL_CODE(FILE_DEVICE_VIDEO, 0x112, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_VIDEO_SET_POWER_MANAGEMENT \
+ CTL_CODE(FILE_DEVICE_VIDEO, 0x11b, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_VIDEO_SHARE_VIDEO_MEMORY \
+ CTL_CODE(FILE_DEVICE_VIDEO, 0x11d, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_VIDEO_SWITCH_DUALVIEW \
+ CTL_CODE(FILE_DEVICE_VIDEO, 0x123, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_VIDEO_UNMAP_VIDEO_MEMORY \
+ CTL_CODE(FILE_DEVICE_VIDEO, 0x117, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_VIDEO_UNSHARE_VIDEO_MEMORY \
+ CTL_CODE(FILE_DEVICE_VIDEO, 0x11e, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_VIDEO_VALIDATE_CHILD_STATE_CONFIGURATION \
+ CTL_CODE(FILE_DEVICE_VIDEO, 0x121, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+
+
+typedef struct _VIDEO_MEMORY {
+ PVOID RequestedVirtualAddress;
+} VIDEO_MEMORY, *PVIDEO_MEMORY;
+
+typedef struct _VIDEO_MEMORY_INFORMATION {
+ PVOID VideoRamBase;
+ ULONG VideoRamLength;
+ PVOID FrameBufferBase;
+ ULONG FrameBufferLength;
+} VIDEO_MEMORY_INFORMATION, *PVIDEO_MEMORY_INFORMATION;
+
+/* VIDEO_MODE.RequestedMode */
+#define VIDEO_MODE_MAP_MEM_LINEAR 0x40000000
+#define VIDEO_MODE_NO_ZERO_MEMORY 0x80000000
+
+typedef struct _VIDEO_MODE {
+ ULONG RequestedMode;
+} VIDEO_MODE, *PVIDEO_MODE;
+
+/* VIDEO_MODE_INFORMATION.AttributeFlags */
+#define VIDEO_MODE_COLOR 0x0001
+#define VIDEO_MODE_GRAPHICS 0x0002
+#define VIDEO_MODE_PALETTE_DRIVEN 0x0004
+#define VIDEO_MODE_MANAGED_PALETTE 0x0008
+#define VIDEO_MODE_INTERLACED 0x0010
+#define VIDEO_MODE_NO_OFF_SCREEN 0x0020
+#define VIDEO_MODE_NO_64_BIT_ACCESS 0x0040
+#define VIDEO_MODE_BANKED 0x0080
+#define VIDEO_MODE_LINEAR 0x0100
+
+typedef struct _VIDEO_MODE_INFORMATION {
+ ULONG Length;
+ ULONG ModeIndex;
+ ULONG VisScreenWidth;
+ ULONG VisScreenHeight;
+ ULONG ScreenStride;
+ ULONG NumberOfPlanes;
+ ULONG BitsPerPlane;
+ ULONG Frequency;
+ ULONG XMillimeter;
+ ULONG YMillimeter;
+ ULONG NumberRedBits;
+ ULONG NumberGreenBits;
+ ULONG NumberBlueBits;
+ ULONG RedMask;
+ ULONG GreenMask;
+ ULONG BlueMask;
+ ULONG AttributeFlags;
+ ULONG VideoMemoryBitmapWidth;
+ ULONG VideoMemoryBitmapHeight;
+ ULONG DriverSpecificAttributeFlags;
+} VIDEO_MODE_INFORMATION, *PVIDEO_MODE_INFORMATION;
+
+typedef struct _VIDEO_NUM_MODES {
+ ULONG NumModes;
+ ULONG ModeInformationLength;
+} VIDEO_NUM_MODES, *PVIDEO_NUM_MODES;
+
+typedef enum _VIDEO_POWER_STATE {
+ VideoPowerUnspecified = 0,
+ VideoPowerOn = 1,
+ VideoPowerStandBy,
+ VideoPowerSuspend,
+ VideoPowerOff,
+ VideoPowerHibernate,
+ VideoPowerShutdown,
+ VideoPowerMaximum
+} VIDEO_POWER_STATE, *PVIDEO_POWER_STATE;
+
+typedef struct _VIDEO_POWER_MANAGEMENT {
+ ULONG Length;
+ ULONG DPMSVersion;
+ ULONG PowerState;
+} VIDEO_POWER_MANAGEMENT, *PVIDEO_POWER_MANAGEMENT;
+
+typedef struct _VIDEO_PUBLIC_ACCESS_RANGES {
+ ULONG InIoSpace;
+ ULONG MappedInIoSpace;
+ PVOID VirtualAddress;
+} VIDEO_PUBLIC_ACCESS_RANGES, *PVIDEO_PUBLIC_ACCESS_RANGES;
+
+typedef struct _VIDEO_SHARE_MEMORY {
+ HANDLE ProcessHandle;
+ ULONG ViewOffset;
+ ULONG ViewSize;
+ PVOID RequestedVirtualAddress;
+} VIDEO_SHARE_MEMORY, *PVIDEO_SHARE_MEMORY;
+
+typedef struct _VIDEO_SHARE_MEMORY_INFORMATION {
+ ULONG SharedViewOffset;
+ ULONG SharedViewSize;
+ PVOID VirtualAddress;
+} VIDEO_SHARE_MEMORY_INFORMATION, *PVIDEO_SHARE_MEMORY_INFORMATION;
+
+/* VIDEO_BANK_SELECT.BankingFlags constants */
+#define PLANAR_HC 0x00000001
+
+/* VIDEO_BANK_SELECT.BankingType and PlanarHCBankingType constants */
+typedef enum _VIDEO_BANK_TYPE {
+ VideoNotBanked = 0,
+ VideoBanked1RW,
+ VideoBanked1R1W,
+ VideoBanked2RW,
+ NumVideoBankTypes
+} VIDEO_BANK_TYPE, *PVIDEO_BANK_TYPE;
+
+typedef struct _VIDEO_BANK_SELECT {
+ ULONG Length;
+ ULONG Size;
+ ULONG BankingFlags;
+ ULONG BankingType;
+ ULONG PlanarHCBankingType;
+ ULONG BitmapWidthInBytes;
+ ULONG BitmapSize;
+ ULONG Granularity;
+ ULONG PlanarHCGranularity;
+ ULONG CodeOffset;
+ ULONG PlanarHCBankCodeOffset;
+ ULONG PlanarHCEnableCodeOffset;
+ ULONG PlanarHCDisableCodeOffset;
+} VIDEO_BANK_SELECT, *PVIDEO_BANK_SELECT;
+
+typedef struct _VIDEO_LOAD_FONT_INFORMATION {
+ USHORT WidthInPixels;
+ USHORT HeightInPixels;
+ ULONG FontSize;
+ UCHAR Font[1];
+} VIDEO_LOAD_FONT_INFORMATION, *PVIDEO_LOAD_FONT_INFORMATION;
+
+/* VIDEO_COLOR_CAPABILITIES.AttributeFlags constants */
+#define VIDEO_DEVICE_COLOR 0x00000001
+#define VIDEO_OPTIONAL_GAMMET_TABLE 0x00000002
+
+typedef struct _VIDEO_COLOR_CAPABILITIES {
+ ULONG Length;
+ ULONG AttributeFlags;
+ LONG RedPhosphoreDecay;
+ LONG GreenPhosphoreDecay;
+ LONG BluePhosphoreDecay;
+ LONG WhiteChromaticity_x;
+ LONG WhiteChromaticity_y;
+ LONG WhiteChromaticity_Y;
+ LONG RedChromaticity_x;
+ LONG RedChromaticity_y;
+ LONG GreenChromaticity_x;
+ LONG GreenChromaticity_y;
+ LONG BlueChromaticity_x;
+ LONG BlueChromaticity_y;
+ LONG WhiteGamma;
+ LONG RedGamma;
+ LONG GreenGamma;
+ LONG BlueGamma;
+} VIDEO_COLOR_CAPABILITIES, *PVIDEO_COLOR_CAPABILITIES;
+
+typedef struct _VIDEO_CURSOR_ATTRIBUTES {
+ USHORT Width;
+ USHORT Height;
+ SHORT Column;
+ SHORT Row;
+ UCHAR Rate;
+ UCHAR Enable;
+} VIDEO_CURSOR_ATTRIBUTES, *PVIDEO_CURSOR_ATTRIBUTES;
+
+typedef struct _VIDEO_CURSOR_POSITION {
+ SHORT Column;
+ SHORT Row;
+} VIDEO_CURSOR_POSITION, *PVIDEO_CURSOR_POSITION;
+
+typedef struct _VIDEO_POINTER_ATTRIBUTES {
+ ULONG Flags;
+ ULONG Width;
+ ULONG Height;
+ ULONG WidthInBytes;
+ ULONG Enable;
+ SHORT Column;
+ SHORT Row;
+ UCHAR Pixels[1];
+} VIDEO_POINTER_ATTRIBUTES, *PVIDEO_POINTER_ATTRIBUTES;
+
+/* VIDEO_POINTER_CAPABILITIES.Flags */
+#define VIDEO_MODE_ASYNC_POINTER 0x01
+#define VIDEO_MODE_MONO_POINTER 0x02
+#define VIDEO_MODE_COLOR_POINTER 0x04
+#define VIDEO_MODE_ANIMATE_START 0x08
+#define VIDEO_MODE_ANIMATE_UPDATE 0x10
+
+typedef struct _VIDEO_POINTER_CAPABILITIES {
+ ULONG Flags;
+ ULONG MaxWidth;
+ ULONG MaxHeight;
+ ULONG HWPtrBitmapStart;
+ ULONG HWPtrBitmapEnd;
+} VIDEO_POINTER_CAPABILITIES, *PVIDEO_POINTER_CAPABILITIES;
+
+typedef struct _VIDEO_POINTER_POSITION {
+ SHORT Column;
+ SHORT Row;
+} VIDEO_POINTER_POSITION, *PVIDEO_POINTER_POSITION;
+
+
+/* VIDEO_HARDWARE_STATE_HEADER.VGAStateFlags constants */
+#define VIDEO_STATE_NON_STANDARD_VGA 0x00000001
+#define VIDEO_STATE_UNEMULATED_VGA_STATE 0x00000002
+#define VIDEO_STATE_PACKED_CHAIN4_MODE 0x00000004
+
+typedef struct _VIDEO_HARDWARE_STATE_HEADER {
+ ULONG Length;
+ UCHAR PortValue[0x30];
+ ULONG AttribIndexDataState;
+ ULONG BasicSequencerOffset;
+ ULONG BasicCrtContOffset;
+ ULONG BasicGraphContOffset;
+ ULONG BasicAttribContOffset;
+ ULONG BasicDacOffset;
+ ULONG BasicLatchesOffset;
+ ULONG ExtendedSequencerOffset;
+ ULONG ExtendedCrtContOffset;
+ ULONG ExtendedGraphContOffset;
+ ULONG ExtendedAttribContOffset;
+ ULONG ExtendedDacOffset;
+ ULONG ExtendedValidatorStateOffset;
+ ULONG ExtendedMiscDataOffset;
+ ULONG PlaneLength;
+ ULONG Plane1Offset;
+ ULONG Plane2Offset;
+ ULONG Plane3Offset;
+ ULONG Plane4Offset;
+ ULONG VGAStateFlags;
+ ULONG DIBOffset;
+ ULONG DIBBitsPerPixel;
+ ULONG DIBXResolution;
+ ULONG DIBYResolution;
+ ULONG DIBXlatOffset;
+ ULONG DIBXlatLength;
+ ULONG VesaInfoOffset;
+ PVOID FrameBufferData;
+} VIDEO_HARDWARE_STATE_HEADER, *PVIDEO_HARDWARE_STATE_HEADER;
+
+typedef struct _VIDEO_CLUTDATA {
+ UCHAR Red;
+ UCHAR Green;
+ UCHAR Blue;
+ UCHAR Unused;
+} VIDEO_CLUTDATA, *PVIDEO_CLUTDATA;
+
+typedef struct {
+ USHORT NumEntries;
+ USHORT FirstEntry;
+ union {
+ VIDEO_CLUTDATA RgbArray;
+ ULONG RgbLong;
+ } LookupTable[1];
+} VIDEO_CLUT, *PVIDEO_CLUT;
+
+typedef struct _VIDEO_PALETTE_DATA {
+ USHORT NumEntries;
+ USHORT FirstEntry;
+ USHORT Colors[1];
+} VIDEO_PALETTE_DATA, *PVIDEO_PALETTE_DATA;
+
+typedef struct _VIDEO_HARDWARE_STATE {
+ PVIDEO_HARDWARE_STATE_HEADER StateHeader;
+ ULONG StateLength;
+} VIDEO_HARDWARE_STATE, *PVIDEO_HARDWARE_STATE;
+
+#define VIDEO_CHILD_ACTIVE 0x00000001
+#define VIDEO_CHILD_DETACHED 0x00000002
+#define VIDEO_CHILD_NOPRUNE_FREQ 0x80000000
+#define VIDEO_CHILD_NOPRUNE_RESOLUTION 0x40000000
+
+#define VIDEO_DUALVIEW_REMOVABLE 0x00000001
+#define VIDEO_DUALVIEW_PRIMARY 0x80000000
+#define VIDEO_DUALVIEW_SECONDARY 0x40000000
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __NTDDVDEO_H */
diff --git a/tcc/include/winapi/ddk/ntddvol.h b/tcc/include/winapi/ddk/ntddvol.h
new file mode 100644
index 0000000..bc0932a
--- /dev/null
+++ b/tcc/include/winapi/ddk/ntddvol.h
@@ -0,0 +1,141 @@
+/*
+ * ntddvol.h
+ *
+ * Volume IOCTL interface.
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __NTDDVOL_H
+#define __NTDDVOL_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+
+#define IOCTL_VOLUME_BASE ((ULONG) 'V')
+
+#define IOCTL_VOLUME_LOGICAL_TO_PHYSICAL \
+ CTL_CODE(IOCTL_VOLUME_BASE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_VOLUME_PHYSICAL_TO_LOGICAL \
+ CTL_CODE(IOCTL_VOLUME_BASE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_VOLUME_READ_PLEX \
+ CTL_CODE(IOCTL_VOLUME_BASE, 11, METHOD_OUT_DIRECT, FILE_READ_ACCESS)
+
+#define IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS \
+ CTL_CODE(IOCTL_VOLUME_BASE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_VOLUME_IS_CLUSTERED \
+ CTL_CODE(IOCTL_VOLUME_BASE, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_VOLUME_QUERY_VOLUME_NUMBER \
+ CTL_CODE(IOCTL_VOLUME_BASE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_VOLUME_IS_PARTITION \
+ CTL_CODE(IOCTL_VOLUME_BASE, 10, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_VOLUME_SET_GPT_ATTRIBUTES \
+ CTL_CODE(IOCTL_VOLUME_BASE, 13, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_VOLUME_GET_GPT_ATTRIBUTES \
+ CTL_CODE(IOCTL_VOLUME_BASE, 14, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_VOLUME_SUPPORTS_ONLINE_OFFLINE \
+ CTL_CODE(IOCTL_VOLUME_BASE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_VOLUME_ONLINE \
+ CTL_CODE(IOCTL_VOLUME_BASE, 2, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+
+#define IOCTL_VOLUME_OFFLINE \
+ CTL_CODE(IOCTL_VOLUME_BASE, 3, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+
+#define IOCTL_VOLUME_IS_OFFLINE \
+ CTL_CODE(IOCTL_VOLUME_BASE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_VOLUME_IS_IO_CAPABLE \
+ CTL_CODE(IOCTL_VOLUME_BASE, 5, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_VOLUME_QUERY_FAILOVER_SET \
+ CTL_CODE(IOCTL_VOLUME_BASE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+
+typedef struct _VOLUME_LOGICAL_OFFSET {
+ LONGLONG LogicalOffset;
+} VOLUME_LOGICAL_OFFSET, *PVOLUME_LOGICAL_OFFSET;
+
+typedef struct _VOLUME_PHYSICAL_OFFSET {
+ ULONG DiskNumber;
+ LONGLONG Offset;
+} VOLUME_PHYSICAL_OFFSET, *PVOLUME_PHYSICAL_OFFSET;
+
+typedef struct _VOLUME_PHYSICAL_OFFSETS {
+ ULONG NumberOfPhysicalOffsets;
+ VOLUME_PHYSICAL_OFFSET PhysicalOffset[1];
+} VOLUME_PHYSICAL_OFFSETS, *PVOLUME_PHYSICAL_OFFSETS;
+
+typedef struct _VOLUME_READ_PLEX_INPUT {
+ LARGE_INTEGER ByteOffset;
+ ULONG Length;
+ ULONG PlexNumber;
+} VOLUME_READ_PLEX_INPUT, *PVOLUME_READ_PLEX_INPUT;
+
+typedef struct _VOLUME_GET_GPT_ATTRIBUTES_INFORMATION {
+ ULONGLONG GptAttributes;
+} VOLUME_GET_GPT_ATTRIBUTES_INFORMATION, *PVOLUME_GET_GPT_ATTRIBUTES_INFORMATION;
+
+typedef struct _VOLUME_SET_GPT_ATTRIBUTES_INFORMATION {
+ ULONGLONG GptAttributes;
+ BOOLEAN RevertOnClose;
+ BOOLEAN ApplyToAllConnectedVolumes;
+ USHORT Reserved1;
+ ULONG Reserved2;
+} VOLUME_SET_GPT_ATTRIBUTES_INFORMATION, *PVOLUME_SET_GPT_ATTRIBUTES_INFORMATION;
+
+typedef struct _DISK_EXTENT {
+ ULONG DiskNumber;
+ LARGE_INTEGER StartingOffset;
+ LARGE_INTEGER ExtentLength;
+} DISK_EXTENT, *PDISK_EXTENT;
+
+typedef struct _VOLUME_DISK_EXTENTS {
+ ULONG NumberOfDiskExtents;
+ DISK_EXTENT Extents[1];
+} VOLUME_DISK_EXTENTS, *PVOLUME_DISK_EXTENTS;
+
+typedef struct _VOLUME_NUMBER {
+ ULONG VolumeNumber;
+ WCHAR VolumeManagerName[8];
+} VOLUME_NUMBER, *PVOLUME_NUMBER;
+
+typedef struct _VOLUME_FAILOVER_SET {
+ ULONG NumberOfDisks;
+ ULONG DiskNumbers[1];
+} VOLUME_FAILOVER_SET, *PVOLUME_FAILOVER_SET;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __NTDDVOL_H */
diff --git a/tcc/include/winapi/ddk/ntifs.h b/tcc/include/winapi/ddk/ntifs.h
new file mode 100644
index 0000000..3612777
--- /dev/null
+++ b/tcc/include/winapi/ddk/ntifs.h
@@ -0,0 +1,5359 @@
+/*
+ * ntifs.h
+ *
+ * Windows NT Filesystem Driver Developer Kit
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Bo Brantén <bosse@acc.umu.se>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef _NTIFS_
+#define _NTIFS_
+#define _GNU_NTIFS_
+
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+#include "ntapi.h"
+
+#define VER_PRODUCTBUILD 10000
+
+#ifndef NTSYSAPI
+#define NTSYSAPI
+#endif
+
+#ifndef NTKERNELAPI
+#define NTKERNELAPI STDCALL
+#endif
+
+typedef struct _SE_EXPORTS *PSE_EXPORTS;
+
+extern PUCHAR *FsRtlLegalAnsiCharacterArray;
+extern PSE_EXPORTS SeExports;
+extern PACL SePublicDefaultDacl;
+extern PACL SeSystemDefaultDacl;
+
+#define ANSI_DOS_STAR ('<')
+#define ANSI_DOS_QM ('>')
+#define ANSI_DOS_DOT ('"')
+
+#define DOS_STAR (L'<')
+#define DOS_QM (L'>')
+#define DOS_DOT (L'"')
+
+/* also in winnt.h */
+#define ACCESS_ALLOWED_ACE_TYPE (0x0)
+#define ACCESS_DENIED_ACE_TYPE (0x1)
+#define SYSTEM_AUDIT_ACE_TYPE (0x2)
+#define SYSTEM_ALARM_ACE_TYPE (0x3)
+
+#define COMPRESSION_FORMAT_NONE (0x0000)
+#define COMPRESSION_FORMAT_DEFAULT (0x0001)
+#define COMPRESSION_FORMAT_LZNT1 (0x0002)
+#define COMPRESSION_ENGINE_STANDARD (0x0000)
+#define COMPRESSION_ENGINE_MAXIMUM (0x0100)
+#define COMPRESSION_ENGINE_HIBER (0x0200)
+
+#define FILE_ACTION_ADDED 0x00000001
+#define FILE_ACTION_REMOVED 0x00000002
+#define FILE_ACTION_MODIFIED 0x00000003
+#define FILE_ACTION_RENAMED_OLD_NAME 0x00000004
+#define FILE_ACTION_RENAMED_NEW_NAME 0x00000005
+#define FILE_ACTION_ADDED_STREAM 0x00000006
+#define FILE_ACTION_REMOVED_STREAM 0x00000007
+#define FILE_ACTION_MODIFIED_STREAM 0x00000008
+#define FILE_ACTION_REMOVED_BY_DELETE 0x00000009
+#define FILE_ACTION_ID_NOT_TUNNELLED 0x0000000A
+#define FILE_ACTION_TUNNELLED_ID_COLLISION 0x0000000B
+/* end winnt.h */
+
+#define FILE_EA_TYPE_BINARY 0xfffe
+#define FILE_EA_TYPE_ASCII 0xfffd
+#define FILE_EA_TYPE_BITMAP 0xfffb
+#define FILE_EA_TYPE_METAFILE 0xfffa
+#define FILE_EA_TYPE_ICON 0xfff9
+#define FILE_EA_TYPE_EA 0xffee
+#define FILE_EA_TYPE_MVMT 0xffdf
+#define FILE_EA_TYPE_MVST 0xffde
+#define FILE_EA_TYPE_ASN1 0xffdd
+#define FILE_EA_TYPE_FAMILY_IDS 0xff01
+
+#define FILE_NEED_EA 0x00000080
+
+/* also in winnt.h */
+#define FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001
+#define FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002
+#define FILE_NOTIFY_CHANGE_NAME 0x00000003
+#define FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004
+#define FILE_NOTIFY_CHANGE_SIZE 0x00000008
+#define FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010
+#define FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020
+#define FILE_NOTIFY_CHANGE_CREATION 0x00000040
+#define FILE_NOTIFY_CHANGE_EA 0x00000080
+#define FILE_NOTIFY_CHANGE_SECURITY 0x00000100
+#define FILE_NOTIFY_CHANGE_STREAM_NAME 0x00000200
+#define FILE_NOTIFY_CHANGE_STREAM_SIZE 0x00000400
+#define FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800
+#define FILE_NOTIFY_VALID_MASK 0x00000fff
+/* end winnt.h */
+
+#define FILE_OPLOCK_BROKEN_TO_LEVEL_2 0x00000007
+#define FILE_OPLOCK_BROKEN_TO_NONE 0x00000008
+
+#define FILE_OPBATCH_BREAK_UNDERWAY 0x00000009
+
+#define FILE_CASE_SENSITIVE_SEARCH 0x00000001
+#define FILE_CASE_PRESERVED_NAMES 0x00000002
+#define FILE_UNICODE_ON_DISK 0x00000004
+#define FILE_PERSISTENT_ACLS 0x00000008
+#define FILE_FILE_COMPRESSION 0x00000010
+#define FILE_VOLUME_QUOTAS 0x00000020
+#define FILE_SUPPORTS_SPARSE_FILES 0x00000040
+#define FILE_SUPPORTS_REPARSE_POINTS 0x00000080
+#define FILE_SUPPORTS_REMOTE_STORAGE 0x00000100
+#define FS_LFN_APIS 0x00004000
+#define FILE_VOLUME_IS_COMPRESSED 0x00008000
+#define FILE_SUPPORTS_OBJECT_IDS 0x00010000
+#define FILE_SUPPORTS_ENCRYPTION 0x00020000
+#define FILE_NAMED_STREAMS 0x00040000
+#define FILE_READ_ONLY_VOLUME 0x00080000
+#define FILE_SEQUENTIAL_WRITE_ONCE 0x00100000
+#define FILE_SUPPORTS_TRANSACTIONS 0x00200000
+/* Note: These flags only have a meaning starting with Windows 7/2008 R2.
+ Their absence on older OSes does NOT mean that a filesystem is missing
+ that property. */
+#define FILE_SUPPORTS_HARD_LINKS 0x00400000
+#define FILE_SUPPORTS_EXTENDED_ATTRIBUTES 0x00800000
+#define FILE_SUPPORTS_OPEN_BY_FILE_ID 0x01000000
+#define FILE_SUPPORTS_USN_JOURNAL 0x02000000
+
+#define FILE_PIPE_BYTE_STREAM_TYPE 0x00000000
+#define FILE_PIPE_MESSAGE_TYPE 0x00000001
+
+#define FILE_PIPE_BYTE_STREAM_MODE 0x00000000
+#define FILE_PIPE_MESSAGE_MODE 0x00000001
+
+#define FILE_PIPE_QUEUE_OPERATION 0x00000000
+#define FILE_PIPE_COMPLETE_OPERATION 0x00000001
+
+#define FILE_PIPE_INBOUND 0x00000000
+#define FILE_PIPE_OUTBOUND 0x00000001
+#define FILE_PIPE_FULL_DUPLEX 0x00000002
+
+#define FILE_PIPE_DISCONNECTED_STATE 0x00000001
+#define FILE_PIPE_LISTENING_STATE 0x00000002
+#define FILE_PIPE_CONNECTED_STATE 0x00000003
+#define FILE_PIPE_CLOSING_STATE 0x00000004
+
+#define FILE_PIPE_CLIENT_END 0x00000000
+#define FILE_PIPE_SERVER_END 0x00000001
+
+#define FILE_PIPE_READ_DATA 0x00000000
+#define FILE_PIPE_WRITE_SPACE 0x00000001
+
+#define FILE_STORAGE_TYPE_SPECIFIED 0x00000041 /* FILE_DIRECTORY_FILE | FILE_NON_DIRECTORY_FILE */
+#define FILE_STORAGE_TYPE_DEFAULT (StorageTypeDefault << FILE_STORAGE_TYPE_SHIFT)
+#define FILE_STORAGE_TYPE_DIRECTORY (StorageTypeDirectory << FILE_STORAGE_TYPE_SHIFT)
+#define FILE_STORAGE_TYPE_FILE (StorageTypeFile << FILE_STORAGE_TYPE_SHIFT)
+#define FILE_STORAGE_TYPE_DOCFILE (StorageTypeDocfile << FILE_STORAGE_TYPE_SHIFT)
+#define FILE_STORAGE_TYPE_JUNCTION_POINT (StorageTypeJunctionPoint << FILE_STORAGE_TYPE_SHIFT)
+#define FILE_STORAGE_TYPE_CATALOG (StorageTypeCatalog << FILE_STORAGE_TYPE_SHIFT)
+#define FILE_STORAGE_TYPE_STRUCTURED_STORAGE (StorageTypeStructuredStorage << FILE_STORAGE_TYPE_SHIFT)
+#define FILE_STORAGE_TYPE_EMBEDDING (StorageTypeEmbedding << FILE_STORAGE_TYPE_SHIFT)
+#define FILE_STORAGE_TYPE_STREAM (StorageTypeStream << FILE_STORAGE_TYPE_SHIFT)
+#define FILE_MINIMUM_STORAGE_TYPE FILE_STORAGE_TYPE_DEFAULT
+#define FILE_MAXIMUM_STORAGE_TYPE FILE_STORAGE_TYPE_STREAM
+#define FILE_STORAGE_TYPE_MASK 0x000f0000
+#define FILE_STORAGE_TYPE_SHIFT 16
+
+#define FILE_VC_QUOTA_NONE 0x00000000
+#define FILE_VC_QUOTA_TRACK 0x00000001
+#define FILE_VC_QUOTA_ENFORCE 0x00000002
+#define FILE_VC_QUOTA_MASK 0x00000003
+
+#define FILE_VC_QUOTAS_LOG_VIOLATIONS 0x00000004
+#define FILE_VC_CONTENT_INDEX_DISABLED 0x00000008
+
+#define FILE_VC_LOG_QUOTA_THRESHOLD 0x00000010
+#define FILE_VC_LOG_QUOTA_LIMIT 0x00000020
+#define FILE_VC_LOG_VOLUME_THRESHOLD 0x00000040
+#define FILE_VC_LOG_VOLUME_LIMIT 0x00000080
+
+#define FILE_VC_QUOTAS_INCOMPLETE 0x00000100
+#define FILE_VC_QUOTAS_REBUILDING 0x00000200
+
+#define FILE_VC_VALID_MASK 0x000003ff
+
+#define FSRTL_FLAG_FILE_MODIFIED (0x01)
+#define FSRTL_FLAG_FILE_LENGTH_CHANGED (0x02)
+#define FSRTL_FLAG_LIMIT_MODIFIED_PAGES (0x04)
+#define FSRTL_FLAG_ACQUIRE_MAIN_RSRC_EX (0x08)
+#define FSRTL_FLAG_ACQUIRE_MAIN_RSRC_SH (0x10)
+#define FSRTL_FLAG_USER_MAPPED_FILE (0x20)
+#define FSRTL_FLAG_EOF_ADVANCE_ACTIVE (0x80)
+
+#define FSRTL_FLAG2_DO_MODIFIED_WRITE (0x01)
+
+#define FSRTL_FSP_TOP_LEVEL_IRP (0x01)
+#define FSRTL_CACHE_TOP_LEVEL_IRP (0x02)
+#define FSRTL_MOD_WRITE_TOP_LEVEL_IRP (0x03)
+#define FSRTL_FAST_IO_TOP_LEVEL_IRP (0x04)
+#define FSRTL_MAX_TOP_LEVEL_IRP_FLAG (0x04)
+
+#define FSRTL_VOLUME_DISMOUNT 1
+#define FSRTL_VOLUME_DISMOUNT_FAILED 2
+#define FSRTL_VOLUME_LOCK 3
+#define FSRTL_VOLUME_LOCK_FAILED 4
+#define FSRTL_VOLUME_UNLOCK 5
+#define FSRTL_VOLUME_MOUNT 6
+
+#define FSRTL_WILD_CHARACTER 0x08
+
+#ifdef _X86_
+#define HARDWARE_PTE HARDWARE_PTE_X86
+#define PHARDWARE_PTE PHARDWARE_PTE_X86
+#else
+#define HARDWARE_PTE ULONG
+#define PHARDWARE_PTE PULONG
+#endif
+
+#define IO_CHECK_CREATE_PARAMETERS 0x0200
+#define IO_ATTACH_DEVICE 0x0400
+
+#define IO_ATTACH_DEVICE_API 0x80000000
+/* also in winnt.h */
+#define IO_COMPLETION_QUERY_STATE 0x0001
+#define IO_COMPLETION_MODIFY_STATE 0x0002
+#define IO_COMPLETION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
+/* end winnt.h */
+#define IO_FILE_OBJECT_NON_PAGED_POOL_CHARGE 64
+#define IO_FILE_OBJECT_PAGED_POOL_CHARGE 1024
+
+#define IO_TYPE_APC 18
+#define IO_TYPE_DPC 19
+#define IO_TYPE_DEVICE_QUEUE 20
+#define IO_TYPE_EVENT_PAIR 21
+#define IO_TYPE_INTERRUPT 22
+#define IO_TYPE_PROFILE 23
+
+#define IRP_BEING_VERIFIED 0x10
+
+#define MAILSLOT_CLASS_FIRSTCLASS 1
+#define MAILSLOT_CLASS_SECONDCLASS 2
+
+#define MAILSLOT_SIZE_AUTO 0
+
+#define MAP_PROCESS 1L
+#define MAP_SYSTEM 2L
+#define MEM_DOS_LIM 0x40000000
+/* also in winnt.h */
+#define MEM_IMAGE SEC_IMAGE
+/* end winnt.h */
+#define OB_TYPE_TYPE 1
+#define OB_TYPE_DIRECTORY 2
+#define OB_TYPE_SYMBOLIC_LINK 3
+#define OB_TYPE_TOKEN 4
+#define OB_TYPE_PROCESS 5
+#define OB_TYPE_THREAD 6
+#define OB_TYPE_EVENT 7
+#define OB_TYPE_EVENT_PAIR 8
+#define OB_TYPE_MUTANT 9
+#define OB_TYPE_SEMAPHORE 10
+#define OB_TYPE_TIMER 11
+#define OB_TYPE_PROFILE 12
+#define OB_TYPE_WINDOW_STATION 13
+#define OB_TYPE_DESKTOP 14
+#define OB_TYPE_SECTION 15
+#define OB_TYPE_KEY 16
+#define OB_TYPE_PORT 17
+#define OB_TYPE_ADAPTER 18
+#define OB_TYPE_CONTROLLER 19
+#define OB_TYPE_DEVICE 20
+#define OB_TYPE_DRIVER 21
+#define OB_TYPE_IO_COMPLETION 22
+#define OB_TYPE_FILE 23
+
+#define PIN_WAIT (1)
+#define PIN_EXCLUSIVE (2)
+#define PIN_NO_READ (4)
+#define PIN_IF_BCB (8)
+
+#define PORT_CONNECT 0x0001
+#define PORT_ALL_ACCESS (STANDARD_RIGHTS_ALL |\
+ PORT_CONNECT)
+/* also in winnt.h */
+#define SEC_BASED 0x00200000
+#define SEC_NO_CHANGE 0x00400000
+#define SEC_FILE 0x00800000
+#define SEC_IMAGE 0x01000000
+#define SEC_VLM 0x02000000
+#define SEC_RESERVE 0x04000000
+#define SEC_COMMIT 0x08000000
+#define SEC_NOCACHE 0x10000000
+
+#define SECURITY_WORLD_SID_AUTHORITY {0,0,0,0,0,1}
+#define SECURITY_WORLD_RID (0x00000000L)
+
+#define SID_REVISION 1
+
+#define TOKEN_ASSIGN_PRIMARY (0x0001)
+#define TOKEN_DUPLICATE (0x0002)
+#define TOKEN_IMPERSONATE (0x0004)
+#define TOKEN_QUERY (0x0008)
+#define TOKEN_QUERY_SOURCE (0x0010)
+#define TOKEN_ADJUST_PRIVILEGES (0x0020)
+#define TOKEN_ADJUST_GROUPS (0x0040)
+#define TOKEN_ADJUST_DEFAULT (0x0080)
+
+#define TOKEN_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\
+ TOKEN_ASSIGN_PRIMARY |\
+ TOKEN_DUPLICATE |\
+ TOKEN_IMPERSONATE |\
+ TOKEN_QUERY |\
+ TOKEN_QUERY_SOURCE |\
+ TOKEN_ADJUST_PRIVILEGES |\
+ TOKEN_ADJUST_GROUPS |\
+ TOKEN_ADJUST_DEFAULT)
+
+#define TOKEN_READ (STANDARD_RIGHTS_READ |\
+ TOKEN_QUERY)
+
+#define TOKEN_WRITE (STANDARD_RIGHTS_WRITE |\
+ TOKEN_ADJUST_PRIVILEGES |\
+ TOKEN_ADJUST_GROUPS |\
+ TOKEN_ADJUST_DEFAULT)
+
+#define TOKEN_EXECUTE (STANDARD_RIGHTS_EXECUTE)
+
+#define TOKEN_SOURCE_LENGTH 8
+/* end winnt.h */
+
+#define TOKEN_HAS_TRAVERSE_PRIVILEGE 0x01
+#define TOKEN_HAS_BACKUP_PRIVILEGE 0x02
+#define TOKEN_HAS_RESTORE_PRIVILEGE 0x04
+#define TOKEN_HAS_ADMIN_GROUP 0x08
+#define TOKEN_IS_RESTRICTED 0x10
+
+#define VACB_MAPPING_GRANULARITY (0x40000)
+#define VACB_OFFSET_SHIFT (18)
+
+#define FSCTL_REQUEST_OPLOCK_LEVEL_1 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_REQUEST_OPLOCK_LEVEL_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_REQUEST_BATCH_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_OPLOCK_BREAK_ACKNOWLEDGE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 3, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_OPBATCH_ACK_CLOSE_PENDING CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_OPLOCK_BREAK_NOTIFY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 5, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_LOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_UNLOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_DISMOUNT_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define FSCTL_IS_VOLUME_MOUNTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 10, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_IS_PATHNAME_VALID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 11, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_MARK_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define FSCTL_QUERY_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 14, METHOD_NEITHER, FILE_ANY_ACCESS)
+#define FSCTL_GET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_SET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 16, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
+
+
+#define FSCTL_MARK_AS_SYSTEM_HIVE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 19, METHOD_NEITHER, FILE_ANY_ACCESS)
+#define FSCTL_OPLOCK_BREAK_ACK_NO_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 20, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_INVALIDATE_VOLUMES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 21, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_QUERY_FAT_BPB CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 22, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_REQUEST_FILTER_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 23, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_FILESYSTEM_GET_STATISTICS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 24, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#if (VER_PRODUCTBUILD >= 1381)
+
+#define FSCTL_GET_NTFS_VOLUME_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 25, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_GET_NTFS_FILE_RECORD CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 26, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_GET_VOLUME_BITMAP CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 27, METHOD_NEITHER, FILE_ANY_ACCESS)
+#define FSCTL_GET_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 28, METHOD_NEITHER, FILE_ANY_ACCESS)
+#define FSCTL_MOVE_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 29, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_IS_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 30, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_GET_HFS_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 31, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_ALLOW_EXTENDED_DASD_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 32, METHOD_NEITHER, FILE_ANY_ACCESS)
+
+#endif /* (VER_PRODUCTBUILD >= 1381) */
+
+#if (VER_PRODUCTBUILD >= 2195)
+
+#define FSCTL_READ_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 33, METHOD_NEITHER, FILE_ANY_ACCESS)
+#define FSCTL_WRITE_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 34, METHOD_NEITHER, FILE_ANY_ACCESS)
+#define FSCTL_FIND_FILES_BY_SID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 35, METHOD_NEITHER, FILE_ANY_ACCESS)
+
+#define FSCTL_DUMP_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 37, METHOD_NEITHER, FILE_ANY_ACCESS)
+#define FSCTL_SET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 38, METHOD_BUFFERED, FILE_WRITE_DATA)
+#define FSCTL_GET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 39, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_DELETE_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 40, METHOD_BUFFERED, FILE_WRITE_DATA)
+#define FSCTL_SET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 41, METHOD_BUFFERED, FILE_WRITE_DATA)
+#define FSCTL_GET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 42, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_DELETE_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 43, METHOD_BUFFERED, FILE_WRITE_DATA)
+#define FSCTL_ENUM_USN_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 44, METHOD_NEITHER, FILE_READ_DATA)
+#define FSCTL_SECURITY_ID_CHECK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 45, METHOD_NEITHER, FILE_READ_DATA)
+#define FSCTL_READ_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 46, METHOD_NEITHER, FILE_READ_DATA)
+#define FSCTL_SET_OBJECT_ID_EXTENDED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 47, METHOD_BUFFERED, FILE_WRITE_DATA)
+#define FSCTL_CREATE_OR_GET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 48, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_SET_SPARSE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 49, METHOD_BUFFERED, FILE_WRITE_DATA)
+#define FSCTL_SET_ZERO_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 50, METHOD_BUFFERED, FILE_WRITE_DATA)
+#define FSCTL_QUERY_ALLOCATED_RANGES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 51, METHOD_NEITHER, FILE_READ_DATA)
+#define FSCTL_ENABLE_UPGRADE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 52, METHOD_BUFFERED, FILE_WRITE_DATA)
+#define FSCTL_SET_ENCRYPTION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 53, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_ENCRYPTION_FSCTL_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 54, METHOD_NEITHER, FILE_ANY_ACCESS)
+#define FSCTL_WRITE_RAW_ENCRYPTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 55, METHOD_NEITHER, FILE_ANY_ACCESS)
+#define FSCTL_READ_RAW_ENCRYPTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 56, METHOD_NEITHER, FILE_ANY_ACCESS)
+#define FSCTL_CREATE_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 57, METHOD_NEITHER, FILE_READ_DATA)
+#define FSCTL_READ_FILE_USN_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 58, METHOD_NEITHER, FILE_READ_DATA)
+#define FSCTL_WRITE_USN_CLOSE_RECORD CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 59, METHOD_NEITHER, FILE_READ_DATA)
+#define FSCTL_EXTEND_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 60, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_QUERY_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 61, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_DELETE_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 62, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_MARK_HANDLE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 63, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_SIS_COPYFILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 64, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_SIS_LINK_FILES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 65, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
+#define FSCTL_HSM_MSG CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 66, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
+#define FSCTL_NSS_CONTROL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 67, METHOD_BUFFERED, FILE_WRITE_DATA)
+#define FSCTL_HSM_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 68, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
+#define FSCTL_RECALL_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 69, METHOD_NEITHER, FILE_ANY_ACCESS)
+#define FSCTL_NSS_RCONTROL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 70, METHOD_BUFFERED, FILE_READ_DATA)
+#define FSCTL_READ_FROM_PLEX CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 71, METHOD_OUT_DIRECT, FILE_READ_DATA)
+#define FSCTL_FILE_PREFETCH CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 72, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
+
+#endif /* (VER_PRODUCTBUILD >= 2195) */
+
+#define FSCTL_MAILSLOT_PEEK CTL_CODE(FILE_DEVICE_MAILSLOT, 0, METHOD_NEITHER, FILE_READ_DATA)
+
+#define FSCTL_NETWORK_SET_CONFIGURATION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 102, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
+#define FSCTL_NETWORK_GET_CONFIGURATION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 103, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
+#define FSCTL_NETWORK_GET_CONNECTION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 104, METHOD_NEITHER, FILE_ANY_ACCESS)
+#define FSCTL_NETWORK_ENUMERATE_CONNECTIONS CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 105, METHOD_NEITHER, FILE_ANY_ACCESS)
+#define FSCTL_NETWORK_DELETE_CONNECTION CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 107, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_NETWORK_GET_STATISTICS CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 116, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_NETWORK_SET_DOMAIN_NAME CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 120, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_NETWORK_REMOTE_BOOT_INIT_SCRT CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 250, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define FSCTL_PIPE_ASSIGN_EVENT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_PIPE_DISCONNECT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_PIPE_LISTEN CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_PIPE_PEEK CTL_CODE(FILE_DEVICE_NAMED_PIPE, 3, METHOD_BUFFERED, FILE_READ_DATA)
+#define FSCTL_PIPE_QUERY_EVENT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_PIPE_TRANSCEIVE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 5, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
+#define FSCTL_PIPE_WAIT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_PIPE_IMPERSONATE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_PIPE_SET_CLIENT_PROCESS CTL_CODE(FILE_DEVICE_NAMED_PIPE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_PIPE_QUERY_CLIENT_PROCESS CTL_CODE(FILE_DEVICE_NAMED_PIPE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_PIPE_INTERNAL_READ CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2045, METHOD_BUFFERED, FILE_READ_DATA)
+#define FSCTL_PIPE_INTERNAL_WRITE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2046, METHOD_BUFFERED, FILE_WRITE_DATA)
+#define FSCTL_PIPE_INTERNAL_TRANSCEIVE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2047, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
+#define FSCTL_PIPE_INTERNAL_READ_OVFLOW CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2048, METHOD_BUFFERED, FILE_READ_DATA)
+
+#define IOCTL_REDIR_QUERY_PATH CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 99, METHOD_NEITHER, FILE_ANY_ACCESS)
+
+typedef PVOID PEJOB;
+typedef PVOID OPLOCK, *POPLOCK;
+typedef PVOID PWOW64_PROCESS;
+
+typedef struct _CACHE_MANAGER_CALLBACKS *PCACHE_MANAGER_CALLBACKS;
+typedef struct _EPROCESS_QUOTA_BLOCK *PEPROCESS_QUOTA_BLOCK;
+typedef struct _FILE_GET_QUOTA_INFORMATION *PFILE_GET_QUOTA_INFORMATION;
+typedef struct _HANDLE_TABLE *PHANDLE_TABLE;
+typedef struct _KEVENT_PAIR *PKEVENT_PAIR;
+typedef struct _KPROCESS *PKPROCESS;
+typedef struct _KQUEUE *PKQUEUE;
+typedef struct _KTRAP_FRAME *PKTRAP_FRAME;
+typedef struct _MAILSLOT_CREATE_PARAMETERS *PMAILSLOT_CREATE_PARAMETERS;
+typedef struct _MMWSL *PMMWSL;
+typedef struct _NAMED_PIPE_CREATE_PARAMETERS *PNAMED_PIPE_CREATE_PARAMETERS;
+typedef struct _OBJECT_DIRECTORY *POBJECT_DIRECTORY;
+typedef struct _PAGEFAULT_HISTORY *PPAGEFAULT_HISTORY;
+typedef struct _PS_IMPERSONATION_INFORMATION *PPS_IMPERSONATION_INFORMATION;
+typedef struct _SECTION_OBJECT *PSECTION_OBJECT;
+typedef struct _SHARED_CACHE_MAP *PSHARED_CACHE_MAP;
+typedef struct _TERMINATION_PORT *PTERMINATION_PORT;
+typedef struct _VACB *PVACB;
+typedef struct _VAD_HEADER *PVAD_HEADER;
+
+typedef struct _NOTIFY_SYNC
+{
+ ULONG Unknown0;
+ ULONG Unknown1;
+ ULONG Unknown2;
+ USHORT Unknown3;
+ USHORT Unknown4;
+ ULONG Unknown5;
+ ULONG Unknown6;
+ ULONG Unknown7;
+ ULONG Unknown8;
+ ULONG Unknown9;
+ ULONG Unknown10;
+} NOTIFY_SYNC, * PNOTIFY_SYNC;
+
+typedef enum _FAST_IO_POSSIBLE {
+ FastIoIsNotPossible,
+ FastIoIsPossible,
+ FastIoIsQuestionable
+} FAST_IO_POSSIBLE;
+
+typedef enum _FILE_STORAGE_TYPE {
+ StorageTypeDefault = 1,
+ StorageTypeDirectory,
+ StorageTypeFile,
+ StorageTypeJunctionPoint,
+ StorageTypeCatalog,
+ StorageTypeStructuredStorage,
+ StorageTypeEmbedding,
+ StorageTypeStream
+} FILE_STORAGE_TYPE;
+
+typedef enum _IO_COMPLETION_INFORMATION_CLASS {
+ IoCompletionBasicInformation
+} IO_COMPLETION_INFORMATION_CLASS;
+
+typedef enum _OBJECT_INFO_CLASS {
+ ObjectBasicInfo,
+ ObjectNameInfo,
+ ObjectTypeInfo,
+ ObjectAllTypesInfo,
+ ObjectProtectionInfo
+} OBJECT_INFO_CLASS;
+
+typedef struct _HARDWARE_PTE_X86 {
+ ULONG Valid : 1;
+ ULONG Write : 1;
+ ULONG Owner : 1;
+ ULONG WriteThrough : 1;
+ ULONG CacheDisable : 1;
+ ULONG Accessed : 1;
+ ULONG Dirty : 1;
+ ULONG LargePage : 1;
+ ULONG Global : 1;
+ ULONG CopyOnWrite : 1;
+ ULONG Prototype : 1;
+ ULONG reserved : 1;
+ ULONG PageFrameNumber : 20;
+} HARDWARE_PTE_X86, *PHARDWARE_PTE_X86;
+
+typedef struct _KAPC_STATE {
+ LIST_ENTRY ApcListHead[2];
+ PKPROCESS Process;
+ BOOLEAN KernelApcInProgress;
+ BOOLEAN KernelApcPending;
+ BOOLEAN UserApcPending;
+} KAPC_STATE, *PKAPC_STATE;
+
+typedef struct _KGDTENTRY {
+ USHORT LimitLow;
+ USHORT BaseLow;
+ union {
+ struct {
+ UCHAR BaseMid;
+ UCHAR Flags1;
+ UCHAR Flags2;
+ UCHAR BaseHi;
+ } Bytes;
+ struct {
+ ULONG BaseMid : 8;
+ ULONG Type : 5;
+ ULONG Dpl : 2;
+ ULONG Pres : 1;
+ ULONG LimitHi : 4;
+ ULONG Sys : 1;
+ ULONG Reserved_0 : 1;
+ ULONG Default_Big : 1;
+ ULONG Granularity : 1;
+ ULONG BaseHi : 8;
+ } Bits;
+ } HighWord;
+} KGDTENTRY, *PKGDTENTRY;
+
+typedef struct _KIDTENTRY {
+ USHORT Offset;
+ USHORT Selector;
+ USHORT Access;
+ USHORT ExtendedOffset;
+} KIDTENTRY, *PKIDTENTRY;
+
+#if (VER_PRODUCTBUILD >= 2600)
+
+typedef struct _MMSUPPORT_FLAGS {
+ ULONG SessionSpace : 1;
+ ULONG BeingTrimmed : 1;
+ ULONG SessionLeader : 1;
+ ULONG TrimHard : 1;
+ ULONG WorkingSetHard : 1;
+ ULONG AddressSpaceBeingDeleted : 1;
+ ULONG Available : 10;
+ ULONG AllowWorkingSetAdjustment : 8;
+ ULONG MemoryPriority : 8;
+} MMSUPPORT_FLAGS, *PMMSUPPORT_FLAGS;
+
+#else
+
+typedef struct _MMSUPPORT_FLAGS {
+ ULONG SessionSpace : 1;
+ ULONG BeingTrimmed : 1;
+ ULONG ProcessInSession : 1;
+ ULONG SessionLeader : 1;
+ ULONG TrimHard : 1;
+ ULONG WorkingSetHard : 1;
+ ULONG WriteWatch : 1;
+ ULONG Filler : 25;
+} MMSUPPORT_FLAGS, *PMMSUPPORT_FLAGS;
+
+#endif
+
+#if (VER_PRODUCTBUILD >= 2600)
+
+typedef struct _MMSUPPORT {
+ LARGE_INTEGER LastTrimTime;
+ MMSUPPORT_FLAGS Flags;
+ ULONG PageFaultCount;
+ ULONG PeakWorkingSetSize;
+ ULONG WorkingSetSize;
+ ULONG MinimumWorkingSetSize;
+ ULONG MaximumWorkingSetSize;
+ PMMWSL VmWorkingSetList;
+ LIST_ENTRY WorkingSetExpansionLinks;
+ ULONG Claim;
+ ULONG NextEstimationSlot;
+ ULONG NextAgingSlot;
+ ULONG EstimatedAvailable;
+ ULONG GrowthSinceLastEstimate;
+} MMSUPPORT, *PMMSUPPORT;
+
+#else
+
+typedef struct _MMSUPPORT {
+ LARGE_INTEGER LastTrimTime;
+ ULONG LastTrimFaultCount;
+ ULONG PageFaultCount;
+ ULONG PeakWorkingSetSize;
+ ULONG WorkingSetSize;
+ ULONG MinimumWorkingSetSize;
+ ULONG MaximumWorkingSetSize;
+ PMMWSL VmWorkingSetList;
+ LIST_ENTRY WorkingSetExpansionLinks;
+ BOOLEAN AllowWorkingSetAdjustment;
+ BOOLEAN AddressSpaceBeingDeleted;
+ UCHAR ForegroundSwitchCount;
+ UCHAR MemoryPriority;
+#if (VER_PRODUCTBUILD >= 2195)
+ union {
+ ULONG LongFlags;
+ MMSUPPORT_FLAGS Flags;
+ } u;
+ ULONG Claim;
+ ULONG NextEstimationSlot;
+ ULONG NextAgingSlot;
+ ULONG EstimatedAvailable;
+ ULONG GrowthSinceLastEstimate;
+#endif /* (VER_PRODUCTBUILD >= 2195) */
+} MMSUPPORT, *PMMSUPPORT;
+
+#endif
+
+typedef struct _SE_AUDIT_PROCESS_CREATION_INFO {
+ POBJECT_NAME_INFORMATION ImageFileName;
+} SE_AUDIT_PROCESS_CREATION_INFO, *PSE_AUDIT_PROCESS_CREATION_INFO;
+
+typedef struct _BITMAP_RANGE {
+ LIST_ENTRY Links;
+ LARGE_INTEGER BasePage;
+ ULONG FirstDirtyPage;
+ ULONG LastDirtyPage;
+ ULONG DirtyPages;
+ PULONG Bitmap;
+} BITMAP_RANGE, *PBITMAP_RANGE;
+
+typedef struct _CACHE_UNINITIALIZE_EVENT {
+ struct _CACHE_UNINITIALIZE_EVENT *Next;
+ KEVENT Event;
+} CACHE_UNINITIALIZE_EVENT, *PCACHE_UNINITIALIZE_EVENT;
+
+typedef struct _CC_FILE_SIZES {
+ LARGE_INTEGER AllocationSize;
+ LARGE_INTEGER FileSize;
+ LARGE_INTEGER ValidDataLength;
+} CC_FILE_SIZES, *PCC_FILE_SIZES;
+
+typedef struct _COMPRESSED_DATA_INFO {
+ USHORT CompressionFormatAndEngine;
+ UCHAR CompressionUnitShift;
+ UCHAR ChunkShift;
+ UCHAR ClusterShift;
+ UCHAR Reserved;
+ USHORT NumberOfChunks;
+ ULONG CompressedChunkSizes[ANYSIZE_ARRAY];
+} COMPRESSED_DATA_INFO, *PCOMPRESSED_DATA_INFO;
+
+typedef struct _DEVICE_MAP {
+ POBJECT_DIRECTORY DosDevicesDirectory;
+ POBJECT_DIRECTORY GlobalDosDevicesDirectory;
+ ULONG ReferenceCount;
+ ULONG DriveMap;
+ UCHAR DriveType[32];
+} DEVICE_MAP, *PDEVICE_MAP;
+
+#if (VER_PRODUCTBUILD >= 2600)
+
+typedef struct _EX_FAST_REF {
+ _ANONYMOUS_UNION union {
+ PVOID Object;
+ ULONG RefCnt : 3;
+ ULONG Value;
+ } DUMMYUNIONNAME;
+} EX_FAST_REF, *PEX_FAST_REF;
+
+typedef struct _EX_PUSH_LOCK {
+ _ANONYMOUS_UNION union {
+ _ANONYMOUS_STRUCT struct {
+ ULONG Waiting : 1;
+ ULONG Exclusive : 1;
+ ULONG Shared : 30;
+ } DUMMYSTRUCTNAME;
+ ULONG Value;
+ PVOID Ptr;
+ } DUMMYUNIONNAME;
+} EX_PUSH_LOCK, *PEX_PUSH_LOCK;
+
+typedef struct _EX_RUNDOWN_REF {
+ _ANONYMOUS_UNION union {
+ ULONG Count;
+ PVOID Ptr;
+ } DUMMYUNIONNAME;
+} EX_RUNDOWN_REF, *PEX_RUNDOWN_REF;
+
+#endif
+
+typedef struct _EPROCESS_QUOTA_ENTRY {
+ ULONG Usage;
+ ULONG Limit;
+ ULONG Peak;
+ ULONG Return;
+} EPROCESS_QUOTA_ENTRY, *PEPROCESS_QUOTA_ENTRY;
+
+typedef struct _EPROCESS_QUOTA_BLOCK {
+ EPROCESS_QUOTA_ENTRY QuotaEntry[3];
+ LIST_ENTRY QuotaList;
+ ULONG ReferenceCount;
+ ULONG ProcessCount;
+} EPROCESS_QUOTA_BLOCK, *PEPROCESS_QUOTA_BLOCK;
+
+/*
+ * When needing these parameters cast your PIO_STACK_LOCATION to
+ * PEXTENDED_IO_STACK_LOCATION
+ */
+#if !defined(_ALPHA_)
+#include <pshpack4.h>
+#endif
+typedef struct _EXTENDED_IO_STACK_LOCATION {
+
+ /* Included for padding */
+ UCHAR MajorFunction;
+ UCHAR MinorFunction;
+ UCHAR Flags;
+ UCHAR Control;
+
+ union {
+
+ struct {
+ PIO_SECURITY_CONTEXT SecurityContext;
+ ULONG Options;
+ USHORT Reserved;
+ USHORT ShareAccess;
+ PMAILSLOT_CREATE_PARAMETERS Parameters;
+ } CreateMailslot;
+
+ struct {
+ PIO_SECURITY_CONTEXT SecurityContext;
+ ULONG Options;
+ USHORT Reserved;
+ USHORT ShareAccess;
+ PNAMED_PIPE_CREATE_PARAMETERS Parameters;
+ } CreatePipe;
+
+ struct {
+ ULONG OutputBufferLength;
+ ULONG InputBufferLength;
+ ULONG FsControlCode;
+ PVOID Type3InputBuffer;
+ } FileSystemControl;
+
+ struct {
+ PLARGE_INTEGER Length;
+ ULONG Key;
+ LARGE_INTEGER ByteOffset;
+ } LockControl;
+
+ struct {
+ ULONG Length;
+ ULONG CompletionFilter;
+ } NotifyDirectory;
+
+ struct {
+ ULONG Length;
+ PUNICODE_STRING FileName;
+ FILE_INFORMATION_CLASS FileInformationClass;
+ ULONG FileIndex;
+ } QueryDirectory;
+
+ struct {
+ ULONG Length;
+ PVOID EaList;
+ ULONG EaListLength;
+ ULONG EaIndex;
+ } QueryEa;
+
+ struct {
+ ULONG Length;
+ PSID StartSid;
+ PFILE_GET_QUOTA_INFORMATION SidList;
+ ULONG SidListLength;
+ } QueryQuota;
+
+ struct {
+ ULONG Length;
+ } SetEa;
+
+ struct {
+ ULONG Length;
+ } SetQuota;
+
+ struct {
+ ULONG Length;
+ FS_INFORMATION_CLASS FsInformationClass;
+ } SetVolume;
+
+ } Parameters;
+ PDEVICE_OBJECT DeviceObject;
+ PFILE_OBJECT FileObject;
+ PIO_COMPLETION_ROUTINE CompletionRoutine;
+ PVOID Context;
+
+} EXTENDED_IO_STACK_LOCATION, *PEXTENDED_IO_STACK_LOCATION;
+#if !defined(_ALPHA_)
+#include <poppack.h>
+#endif
+
+typedef struct _FILE_ACCESS_INFORMATION {
+ ACCESS_MASK AccessFlags;
+} FILE_ACCESS_INFORMATION, *PFILE_ACCESS_INFORMATION;
+
+typedef struct _FILE_ALLOCATION_INFORMATION {
+ LARGE_INTEGER AllocationSize;
+} FILE_ALLOCATION_INFORMATION, *PFILE_ALLOCATION_INFORMATION;
+
+typedef struct _FILE_BOTH_DIR_INFORMATION {
+ ULONG NextEntryOffset;
+ ULONG FileIndex;
+ LARGE_INTEGER CreationTime;
+ LARGE_INTEGER LastAccessTime;
+ LARGE_INTEGER LastWriteTime;
+ LARGE_INTEGER ChangeTime;
+ LARGE_INTEGER EndOfFile;
+ LARGE_INTEGER AllocationSize;
+ ULONG FileAttributes;
+ ULONG FileNameLength;
+ ULONG EaSize;
+ CCHAR ShortNameLength;
+ WCHAR ShortName[12];
+ WCHAR FileName[1];
+} FILE_BOTH_DIR_INFORMATION, *PFILE_BOTH_DIR_INFORMATION;
+
+typedef struct _FILE_COMPLETION_INFORMATION {
+ HANDLE Port;
+ ULONG Key;
+} FILE_COMPLETION_INFORMATION, *PFILE_COMPLETION_INFORMATION;
+
+typedef struct _FILE_COMPRESSION_INFORMATION {
+ LARGE_INTEGER CompressedFileSize;
+ USHORT CompressionFormat;
+ UCHAR CompressionUnitShift;
+ UCHAR ChunkShift;
+ UCHAR ClusterShift;
+ UCHAR Reserved[3];
+} FILE_COMPRESSION_INFORMATION, *PFILE_COMPRESSION_INFORMATION;
+
+typedef struct _FILE_COPY_ON_WRITE_INFORMATION {
+ BOOLEAN ReplaceIfExists;
+ HANDLE RootDirectory;
+ ULONG FileNameLength;
+ WCHAR FileName[1];
+} FILE_COPY_ON_WRITE_INFORMATION, *PFILE_COPY_ON_WRITE_INFORMATION;
+
+typedef struct _FILE_DIRECTORY_INFORMATION {
+ ULONG NextEntryOffset;
+ ULONG FileIndex;
+ LARGE_INTEGER CreationTime;
+ LARGE_INTEGER LastAccessTime;
+ LARGE_INTEGER LastWriteTime;
+ LARGE_INTEGER ChangeTime;
+ LARGE_INTEGER EndOfFile;
+ LARGE_INTEGER AllocationSize;
+ ULONG FileAttributes;
+ ULONG FileNameLength;
+ WCHAR FileName[1];
+} FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION;
+
+typedef struct _FILE_FULL_DIRECTORY_INFORMATION {
+ ULONG NextEntryOffset;
+ ULONG FileIndex;
+ LARGE_INTEGER CreationTime;
+ LARGE_INTEGER LastAccessTime;
+ LARGE_INTEGER LastWriteTime;
+ LARGE_INTEGER ChangeTime;
+ LARGE_INTEGER EndOfFile;
+ LARGE_INTEGER AllocationSize;
+ ULONG FileAttributes;
+ ULONG FileNameLength;
+ ULONG EaSize;
+ WCHAR FileName[0];
+} FILE_FULL_DIRECTORY_INFORMATION, *PFILE_FULL_DIRECTORY_INFORMATION;
+
+typedef struct _FILE_BOTH_DIRECTORY_INFORMATION {
+ ULONG NextEntryOffset;
+ ULONG FileIndex;
+ LARGE_INTEGER CreationTime;
+ LARGE_INTEGER LastAccessTime;
+ LARGE_INTEGER LastWriteTime;
+ LARGE_INTEGER ChangeTime;
+ LARGE_INTEGER EndOfFile;
+ LARGE_INTEGER AllocationSize;
+ ULONG FileAttributes;
+ ULONG FileNameLength;
+ ULONG EaSize;
+ CHAR ShortNameLength;
+ WCHAR ShortName[12];
+ WCHAR FileName[0];
+} FILE_BOTH_DIRECTORY_INFORMATION, *PFILE_BOTH_DIRECTORY_INFORMATION;
+
+#if (VER_PRODUCTBUILD >= 2600)
+
+typedef struct _FILE_ID_FULL_DIRECTORY_INFORMATION {
+ ULONG NextEntryOffset;
+ ULONG FileIndex;
+ LARGE_INTEGER CreationTime;
+ LARGE_INTEGER LastAccessTime;
+ LARGE_INTEGER LastWriteTime;
+ LARGE_INTEGER ChangeTime;
+ LARGE_INTEGER EndOfFile;
+ LARGE_INTEGER AllocationSize;
+ ULONG FileAttributes;
+ ULONG FileNameLength;
+ ULONG EaSize;
+ LARGE_INTEGER FileId;
+ WCHAR FileName[0];
+} FILE_ID_FULL_DIRECTORY_INFORMATION, *PFILE_ID_FULL_DIRECTORY_INFORMATION;
+
+typedef struct _FILE_ID_BOTH_DIRECTORY_INFORMATION {
+ ULONG NextEntryOffset;
+ ULONG FileIndex;
+ LARGE_INTEGER CreationTime;
+ LARGE_INTEGER LastAccessTime;
+ LARGE_INTEGER LastWriteTime;
+ LARGE_INTEGER ChangeTime;
+ LARGE_INTEGER EndOfFile;
+ LARGE_INTEGER AllocationSize;
+ ULONG FileAttributes;
+ ULONG FileNameLength;
+ ULONG EaSize;
+ CHAR ShortNameLength;
+ WCHAR ShortName[12];
+ LARGE_INTEGER FileId;
+ WCHAR FileName[0];
+} FILE_ID_BOTH_DIRECTORY_INFORMATION, *PFILE_ID_BOTH_DIRECTORY_INFORMATION;
+
+#endif
+
+typedef struct _FILE_EA_INFORMATION {
+ ULONG EaSize;
+} FILE_EA_INFORMATION, *PFILE_EA_INFORMATION;
+
+typedef struct _FILE_FS_ATTRIBUTE_INFORMATION {
+ ULONG FileSystemAttributes;
+ ULONG MaximumComponentNameLength;
+ ULONG FileSystemNameLength;
+ WCHAR FileSystemName[1];
+} FILE_FS_ATTRIBUTE_INFORMATION, *PFILE_FS_ATTRIBUTE_INFORMATION;
+
+typedef struct _FILE_FS_CONTROL_INFORMATION {
+ LARGE_INTEGER FreeSpaceStartFiltering;
+ LARGE_INTEGER FreeSpaceThreshold;
+ LARGE_INTEGER FreeSpaceStopFiltering;
+ LARGE_INTEGER DefaultQuotaThreshold;
+ LARGE_INTEGER DefaultQuotaLimit;
+ ULONG FileSystemControlFlags;
+} FILE_FS_CONTROL_INFORMATION, *PFILE_FS_CONTROL_INFORMATION;
+
+typedef struct _FILE_FS_FULL_SIZE_INFORMATION {
+ LARGE_INTEGER TotalAllocationUnits;
+ LARGE_INTEGER CallerAvailableAllocationUnits;
+ LARGE_INTEGER ActualAvailableAllocationUnits;
+ ULONG SectorsPerAllocationUnit;
+ ULONG BytesPerSector;
+} FILE_FS_FULL_SIZE_INFORMATION, *PFILE_FS_FULL_SIZE_INFORMATION;
+
+typedef struct _FILE_FS_LABEL_INFORMATION {
+ ULONG VolumeLabelLength;
+ WCHAR VolumeLabel[1];
+} FILE_FS_LABEL_INFORMATION, *PFILE_FS_LABEL_INFORMATION;
+
+#if (VER_PRODUCTBUILD >= 2195)
+
+typedef struct _FILE_FS_OBJECT_ID_INFORMATION {
+ UCHAR ObjectId[16];
+ UCHAR ExtendedInfo[48];
+} FILE_FS_OBJECT_ID_INFORMATION, *PFILE_FS_OBJECT_ID_INFORMATION;
+
+#endif /* (VER_PRODUCTBUILD >= 2195) */
+
+typedef struct _FILE_FS_SIZE_INFORMATION {
+ LARGE_INTEGER TotalAllocationUnits;
+ LARGE_INTEGER AvailableAllocationUnits;
+ ULONG SectorsPerAllocationUnit;
+ ULONG BytesPerSector;
+} FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION;
+
+typedef struct _FILE_FS_VOLUME_INFORMATION {
+ LARGE_INTEGER VolumeCreationTime;
+ ULONG VolumeSerialNumber;
+ ULONG VolumeLabelLength;
+ BOOLEAN SupportsObjects;
+ WCHAR VolumeLabel[1];
+} FILE_FS_VOLUME_INFORMATION, *PFILE_FS_VOLUME_INFORMATION;
+
+typedef struct _FILE_FULL_DIR_INFORMATION {
+ ULONG NextEntryOffset;
+ ULONG FileIndex;
+ LARGE_INTEGER CreationTime;
+ LARGE_INTEGER LastAccessTime;
+ LARGE_INTEGER LastWriteTime;
+ LARGE_INTEGER ChangeTime;
+ LARGE_INTEGER EndOfFile;
+ LARGE_INTEGER AllocationSize;
+ ULONG FileAttributes;
+ ULONG FileNameLength;
+ ULONG EaSize;
+ WCHAR FileName[1];
+} FILE_FULL_DIR_INFORMATION, *PFILE_FULL_DIR_INFORMATION;
+
+typedef struct _FILE_GET_EA_INFORMATION {
+ ULONG NextEntryOffset;
+ UCHAR EaNameLength;
+ CHAR EaName[1];
+} FILE_GET_EA_INFORMATION, *PFILE_GET_EA_INFORMATION;
+
+typedef struct _FILE_GET_QUOTA_INFORMATION {
+ ULONG NextEntryOffset;
+ ULONG SidLength;
+ SID Sid;
+} FILE_GET_QUOTA_INFORMATION, *PFILE_GET_QUOTA_INFORMATION;
+
+typedef struct _FILE_INTERNAL_INFORMATION {
+ LARGE_INTEGER IndexNumber;
+} FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION;
+
+typedef struct _FILE_LINK_INFORMATION {
+ BOOLEAN ReplaceIfExists;
+ HANDLE RootDirectory;
+ ULONG FileNameLength;
+ WCHAR FileName[1];
+} FILE_LINK_INFORMATION, *PFILE_LINK_INFORMATION;
+
+typedef struct _FILE_LOCK_INFO {
+ LARGE_INTEGER StartingByte;
+ LARGE_INTEGER Length;
+ BOOLEAN ExclusiveLock;
+ ULONG Key;
+ PFILE_OBJECT FileObject;
+ PEPROCESS Process;
+ LARGE_INTEGER EndingByte;
+} FILE_LOCK_INFO, *PFILE_LOCK_INFO;
+
+/* raw internal file lock struct returned from FsRtlGetNextFileLock */
+typedef struct _FILE_SHARED_LOCK_ENTRY {
+ PVOID Unknown1;
+ PVOID Unknown2;
+ FILE_LOCK_INFO FileLock;
+} FILE_SHARED_LOCK_ENTRY, *PFILE_SHARED_LOCK_ENTRY;
+
+/* raw internal file lock struct returned from FsRtlGetNextFileLock */
+typedef struct _FILE_EXCLUSIVE_LOCK_ENTRY {
+ LIST_ENTRY ListEntry;
+ PVOID Unknown1;
+ PVOID Unknown2;
+ FILE_LOCK_INFO FileLock;
+} FILE_EXCLUSIVE_LOCK_ENTRY, *PFILE_EXCLUSIVE_LOCK_ENTRY;
+
+typedef NTSTATUS (*PCOMPLETE_LOCK_IRP_ROUTINE) (
+ /*IN*/ PVOID Context,
+ /*IN*/ PIRP Irp
+);
+
+typedef VOID (NTAPI *PUNLOCK_ROUTINE) (
+ /*IN*/ PVOID Context,
+ /*IN*/ PFILE_LOCK_INFO FileLockInfo
+);
+
+typedef struct _FILE_LOCK {
+ PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine;
+ PUNLOCK_ROUTINE UnlockRoutine;
+ BOOLEAN FastIoIsQuestionable;
+ BOOLEAN Pad[3];
+ PVOID LockInformation;
+ FILE_LOCK_INFO LastReturnedLockInfo;
+ PVOID LastReturnedLock;
+} FILE_LOCK, *PFILE_LOCK;
+
+typedef struct _FILE_MAILSLOT_PEEK_BUFFER {
+ ULONG ReadDataAvailable;
+ ULONG NumberOfMessages;
+ ULONG MessageLength;
+} FILE_MAILSLOT_PEEK_BUFFER, *PFILE_MAILSLOT_PEEK_BUFFER;
+
+typedef struct _FILE_MAILSLOT_QUERY_INFORMATION {
+ ULONG MaximumMessageSize;
+ ULONG MailslotQuota;
+ ULONG NextMessageSize;
+ ULONG MessagesAvailable;
+ LARGE_INTEGER ReadTimeout;
+} FILE_MAILSLOT_QUERY_INFORMATION, *PFILE_MAILSLOT_QUERY_INFORMATION;
+
+typedef struct _FILE_MAILSLOT_SET_INFORMATION {
+ LARGE_INTEGER ReadTimeout;
+} FILE_MAILSLOT_SET_INFORMATION, *PFILE_MAILSLOT_SET_INFORMATION;
+
+typedef struct _FILE_MODE_INFORMATION {
+ ULONG Mode;
+} FILE_MODE_INFORMATION, *PFILE_MODE_INFORMATION;
+
+typedef struct _FILE_ALL_INFORMATION {
+ FILE_BASIC_INFORMATION BasicInformation;
+ FILE_STANDARD_INFORMATION StandardInformation;
+ FILE_INTERNAL_INFORMATION InternalInformation;
+ FILE_EA_INFORMATION EaInformation;
+ FILE_ACCESS_INFORMATION AccessInformation;
+ FILE_POSITION_INFORMATION PositionInformation;
+ FILE_MODE_INFORMATION ModeInformation;
+ FILE_ALIGNMENT_INFORMATION AlignmentInformation;
+ FILE_NAME_INFORMATION NameInformation;
+} FILE_ALL_INFORMATION, *PFILE_ALL_INFORMATION;
+
+typedef struct _FILE_NAMES_INFORMATION {
+ ULONG NextEntryOffset;
+ ULONG FileIndex;
+ ULONG FileNameLength;
+ WCHAR FileName[1];
+} FILE_NAMES_INFORMATION, *PFILE_NAMES_INFORMATION;
+
+typedef struct _FILE_OBJECTID_INFORMATION {
+ LONGLONG FileReference;
+ UCHAR ObjectId[16];
+ _ANONYMOUS_UNION union {
+ struct {
+ UCHAR BirthVolumeId[16];
+ UCHAR BirthObjectId[16];
+ UCHAR DomainId[16];
+ } ;
+ UCHAR ExtendedInfo[48];
+ } DUMMYUNIONNAME;
+} FILE_OBJECTID_INFORMATION, *PFILE_OBJECTID_INFORMATION;
+
+typedef struct _FILE_OLE_CLASSID_INFORMATION {
+ GUID ClassId;
+} FILE_OLE_CLASSID_INFORMATION, *PFILE_OLE_CLASSID_INFORMATION;
+
+typedef struct _FILE_OLE_ALL_INFORMATION {
+ FILE_BASIC_INFORMATION BasicInformation;
+ FILE_STANDARD_INFORMATION StandardInformation;
+ FILE_INTERNAL_INFORMATION InternalInformation;
+ FILE_EA_INFORMATION EaInformation;
+ FILE_ACCESS_INFORMATION AccessInformation;
+ FILE_POSITION_INFORMATION PositionInformation;
+ FILE_MODE_INFORMATION ModeInformation;
+ FILE_ALIGNMENT_INFORMATION AlignmentInformation;
+ USN LastChangeUsn;
+ USN ReplicationUsn;
+ LARGE_INTEGER SecurityChangeTime;
+ FILE_OLE_CLASSID_INFORMATION OleClassIdInformation;
+ FILE_OBJECTID_INFORMATION ObjectIdInformation;
+ FILE_STORAGE_TYPE StorageType;
+ ULONG OleStateBits;
+ ULONG OleId;
+ ULONG NumberOfStreamReferences;
+ ULONG StreamIndex;
+ ULONG SecurityId;
+ BOOLEAN ContentIndexDisable;
+ BOOLEAN InheritContentIndexDisable;
+ FILE_NAME_INFORMATION NameInformation;
+} FILE_OLE_ALL_INFORMATION, *PFILE_OLE_ALL_INFORMATION;
+
+typedef struct _FILE_OLE_DIR_INFORMATION {
+ ULONG NextEntryOffset;
+ ULONG FileIndex;
+ LARGE_INTEGER CreationTime;
+ LARGE_INTEGER LastAccessTime;
+ LARGE_INTEGER LastWriteTime;
+ LARGE_INTEGER ChangeTime;
+ LARGE_INTEGER EndOfFile;
+ LARGE_INTEGER AllocationSize;
+ ULONG FileAttributes;
+ ULONG FileNameLength;
+ FILE_STORAGE_TYPE StorageType;
+ GUID OleClassId;
+ ULONG OleStateBits;
+ BOOLEAN ContentIndexDisable;
+ BOOLEAN InheritContentIndexDisable;
+ WCHAR FileName[1];
+} FILE_OLE_DIR_INFORMATION, *PFILE_OLE_DIR_INFORMATION;
+
+typedef struct _FILE_OLE_INFORMATION {
+ LARGE_INTEGER SecurityChangeTime;
+ FILE_OLE_CLASSID_INFORMATION OleClassIdInformation;
+ FILE_OBJECTID_INFORMATION ObjectIdInformation;
+ FILE_STORAGE_TYPE StorageType;
+ ULONG OleStateBits;
+ BOOLEAN ContentIndexDisable;
+ BOOLEAN InheritContentIndexDisable;
+} FILE_OLE_INFORMATION, *PFILE_OLE_INFORMATION;
+
+typedef struct _FILE_OLE_STATE_BITS_INFORMATION {
+ ULONG StateBits;
+ ULONG StateBitsMask;
+} FILE_OLE_STATE_BITS_INFORMATION, *PFILE_OLE_STATE_BITS_INFORMATION;
+
+typedef struct _FILE_PIPE_ASSIGN_EVENT_BUFFER {
+ HANDLE EventHandle;
+ ULONG KeyValue;
+} FILE_PIPE_ASSIGN_EVENT_BUFFER, *PFILE_PIPE_ASSIGN_EVENT_BUFFER;
+
+typedef struct _FILE_PIPE_CLIENT_PROCESS_BUFFER {
+ PVOID ClientSession;
+ PVOID ClientProcess;
+} FILE_PIPE_CLIENT_PROCESS_BUFFER, *PFILE_PIPE_CLIENT_PROCESS_BUFFER;
+
+typedef struct _FILE_PIPE_EVENT_BUFFER {
+ ULONG NamedPipeState;
+ ULONG EntryType;
+ ULONG ByteCount;
+ ULONG KeyValue;
+ ULONG NumberRequests;
+} FILE_PIPE_EVENT_BUFFER, *PFILE_PIPE_EVENT_BUFFER;
+
+typedef struct _FILE_PIPE_INFORMATION {
+ ULONG ReadMode;
+ ULONG CompletionMode;
+} FILE_PIPE_INFORMATION, *PFILE_PIPE_INFORMATION;
+
+typedef struct _FILE_PIPE_LOCAL_INFORMATION {
+ ULONG NamedPipeType;
+ ULONG NamedPipeConfiguration;
+ ULONG MaximumInstances;
+ ULONG CurrentInstances;
+ ULONG InboundQuota;
+ ULONG ReadDataAvailable;
+ ULONG OutboundQuota;
+ ULONG WriteQuotaAvailable;
+ ULONG NamedPipeState;
+ ULONG NamedPipeEnd;
+} FILE_PIPE_LOCAL_INFORMATION, *PFILE_PIPE_LOCAL_INFORMATION;
+
+typedef struct _FILE_PIPE_REMOTE_INFORMATION {
+ LARGE_INTEGER CollectDataTime;
+ ULONG MaximumCollectionCount;
+} FILE_PIPE_REMOTE_INFORMATION, *PFILE_PIPE_REMOTE_INFORMATION;
+
+typedef struct _FILE_PIPE_WAIT_FOR_BUFFER {
+ LARGE_INTEGER Timeout;
+ ULONG NameLength;
+ BOOLEAN TimeoutSpecified;
+ WCHAR Name[1];
+} FILE_PIPE_WAIT_FOR_BUFFER, *PFILE_PIPE_WAIT_FOR_BUFFER;
+
+typedef struct _FILE_QUOTA_INFORMATION {
+ ULONG NextEntryOffset;
+ ULONG SidLength;
+ LARGE_INTEGER ChangeTime;
+ LARGE_INTEGER QuotaUsed;
+ LARGE_INTEGER QuotaThreshold;
+ LARGE_INTEGER QuotaLimit;
+ SID Sid;
+} FILE_QUOTA_INFORMATION, *PFILE_QUOTA_INFORMATION;
+
+typedef struct _FILE_RENAME_INFORMATION {
+ BOOLEAN ReplaceIfExists;
+ HANDLE RootDirectory;
+ ULONG FileNameLength;
+ WCHAR FileName[1];
+} FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION;
+
+typedef struct _FILE_STREAM_INFORMATION {
+ ULONG NextEntryOffset;
+ ULONG StreamNameLength;
+ LARGE_INTEGER StreamSize;
+ LARGE_INTEGER StreamAllocationSize;
+ WCHAR StreamName[1];
+} FILE_STREAM_INFORMATION, *PFILE_STREAM_INFORMATION;
+
+typedef struct _FILE_TRACKING_INFORMATION {
+ HANDLE DestinationFile;
+ ULONG ObjectInformationLength;
+ CHAR ObjectInformation[1];
+} FILE_TRACKING_INFORMATION, *PFILE_TRACKING_INFORMATION;
+
+typedef struct _FSRTL_COMMON_FCB_HEADER {
+ CSHORT NodeTypeCode;
+ CSHORT NodeByteSize;
+ UCHAR Flags;
+ UCHAR IsFastIoPossible;
+#if (VER_PRODUCTBUILD >= 1381)
+ UCHAR Flags2;
+ UCHAR Reserved;
+#endif /* (VER_PRODUCTBUILD >= 1381) */
+ PERESOURCE Resource;
+ PERESOURCE PagingIoResource;
+ LARGE_INTEGER AllocationSize;
+ LARGE_INTEGER FileSize;
+ LARGE_INTEGER ValidDataLength;
+} FSRTL_COMMON_FCB_HEADER, *PFSRTL_COMMON_FCB_HEADER;
+
+typedef struct _GENERATE_NAME_CONTEXT {
+ USHORT Checksum;
+ BOOLEAN CheckSumInserted;
+ UCHAR NameLength;
+ WCHAR NameBuffer[8];
+ ULONG ExtensionLength;
+ WCHAR ExtensionBuffer[4];
+ ULONG LastIndexValue;
+} GENERATE_NAME_CONTEXT, *PGENERATE_NAME_CONTEXT;
+
+typedef struct _HANDLE_TABLE_ENTRY {
+ PVOID Object;
+ ULONG ObjectAttributes;
+ ULONG GrantedAccess;
+ USHORT GrantedAccessIndex;
+ USHORT CreatorBackTraceIndex;
+ ULONG NextFreeTableEntry;
+} HANDLE_TABLE_ENTRY, *PHANDLE_TABLE_ENTRY;
+
+typedef struct _MAPPING_PAIR {
+ ULONGLONG Vcn;
+ ULONGLONG Lcn;
+} MAPPING_PAIR, *PMAPPING_PAIR;
+
+typedef struct _GET_RETRIEVAL_DESCRIPTOR {
+ ULONG NumberOfPairs;
+ ULONGLONG StartVcn;
+ MAPPING_PAIR Pair[1];
+} GET_RETRIEVAL_DESCRIPTOR, *PGET_RETRIEVAL_DESCRIPTOR;
+
+typedef struct _IO_CLIENT_EXTENSION {
+ struct _IO_CLIENT_EXTENSION *NextExtension;
+ PVOID ClientIdentificationAddress;
+} IO_CLIENT_EXTENSION, *PIO_CLIENT_EXTENSION;
+
+typedef struct _IO_COMPLETION_BASIC_INFORMATION {
+ LONG Depth;
+} IO_COMPLETION_BASIC_INFORMATION, *PIO_COMPLETION_BASIC_INFORMATION;
+
+typedef struct _KEVENT_PAIR {
+ USHORT Type;
+ USHORT Size;
+ KEVENT Event1;
+ KEVENT Event2;
+} KEVENT_PAIR, *PKEVENT_PAIR;
+
+typedef struct _KQUEUE {
+ DISPATCHER_HEADER Header;
+ LIST_ENTRY EntryListHead;
+ ULONG CurrentCount;
+ ULONG MaximumCount;
+ LIST_ENTRY ThreadListHead;
+} KQUEUE, *PKQUEUE, *RESTRICTED_POINTER PRKQUEUE;
+
+typedef struct _MAILSLOT_CREATE_PARAMETERS {
+ ULONG MailslotQuota;
+ ULONG MaximumMessageSize;
+ LARGE_INTEGER ReadTimeout;
+ BOOLEAN TimeoutSpecified;
+} MAILSLOT_CREATE_PARAMETERS, *PMAILSLOT_CREATE_PARAMETERS;
+
+typedef struct _MBCB {
+ CSHORT NodeTypeCode;
+ CSHORT NodeIsInZone;
+ ULONG PagesToWrite;
+ ULONG DirtyPages;
+ ULONG Reserved;
+ LIST_ENTRY BitmapRanges;
+ LONGLONG ResumeWritePage;
+ BITMAP_RANGE BitmapRange1;
+ BITMAP_RANGE BitmapRange2;
+ BITMAP_RANGE BitmapRange3;
+} MBCB, *PMBCB;
+
+typedef struct _MOVEFILE_DESCRIPTOR {
+ HANDLE FileHandle;
+ ULONG Reserved;
+ LARGE_INTEGER StartVcn;
+ LARGE_INTEGER TargetLcn;
+ ULONG NumVcns;
+ ULONG Reserved1;
+} MOVEFILE_DESCRIPTOR, *PMOVEFILE_DESCRIPTOR;
+
+typedef struct _NAMED_PIPE_CREATE_PARAMETERS {
+ ULONG NamedPipeType;
+ ULONG ReadMode;
+ ULONG CompletionMode;
+ ULONG MaximumInstances;
+ ULONG InboundQuota;
+ ULONG OutboundQuota;
+ LARGE_INTEGER DefaultTimeout;
+ BOOLEAN TimeoutSpecified;
+} NAMED_PIPE_CREATE_PARAMETERS, *PNAMED_PIPE_CREATE_PARAMETERS;
+
+typedef struct _OBJECT_BASIC_INFO {
+ ULONG Attributes;
+ ACCESS_MASK GrantedAccess;
+ ULONG HandleCount;
+ ULONG ReferenceCount;
+ ULONG PagedPoolUsage;
+ ULONG NonPagedPoolUsage;
+ ULONG Reserved[3];
+ ULONG NameInformationLength;
+ ULONG TypeInformationLength;
+ ULONG SecurityDescriptorLength;
+ LARGE_INTEGER CreateTime;
+} OBJECT_BASIC_INFO, *POBJECT_BASIC_INFO;
+
+typedef struct _OBJECT_HANDLE_ATTRIBUTE_INFO {
+ BOOLEAN Inherit;
+ BOOLEAN ProtectFromClose;
+} OBJECT_HANDLE_ATTRIBUTE_INFO, *POBJECT_HANDLE_ATTRIBUTE_INFO;
+
+typedef struct _OBJECT_NAME_INFO {
+ UNICODE_STRING ObjectName;
+ WCHAR ObjectNameBuffer[1];
+} OBJECT_NAME_INFO, *POBJECT_NAME_INFO;
+
+typedef struct _OBJECT_PROTECTION_INFO {
+ BOOLEAN Inherit;
+ BOOLEAN ProtectHandle;
+} OBJECT_PROTECTION_INFO, *POBJECT_PROTECTION_INFO;
+
+typedef struct _OBJECT_TYPE_INFO {
+ UNICODE_STRING ObjectTypeName;
+ UCHAR Unknown[0x58];
+ WCHAR ObjectTypeNameBuffer[1];
+} OBJECT_TYPE_INFO, *POBJECT_TYPE_INFO;
+
+typedef struct _OBJECT_ALL_TYPES_INFO {
+ ULONG NumberOfObjectTypes;
+ OBJECT_TYPE_INFO ObjectsTypeInfo[1];
+} OBJECT_ALL_TYPES_INFO, *POBJECT_ALL_TYPES_INFO;
+
+typedef struct _PAGEFAULT_HISTORY {
+ ULONG CurrentIndex;
+ ULONG MaxIndex;
+ KSPIN_LOCK SpinLock;
+ PVOID Reserved;
+ PROCESS_WS_WATCH_INFORMATION WatchInfo[1];
+} PAGEFAULT_HISTORY, *PPAGEFAULT_HISTORY;
+
+typedef struct _PATHNAME_BUFFER {
+ ULONG PathNameLength;
+ WCHAR Name[1];
+} PATHNAME_BUFFER, *PPATHNAME_BUFFER;
+
+#if (VER_PRODUCTBUILD >= 2600)
+
+typedef struct _PRIVATE_CACHE_MAP_FLAGS {
+ ULONG DontUse : 16;
+ ULONG ReadAheadActive : 1;
+ ULONG ReadAheadEnabled : 1;
+ ULONG Available : 14;
+} PRIVATE_CACHE_MAP_FLAGS, *PPRIVATE_CACHE_MAP_FLAGS;
+
+typedef struct _PRIVATE_CACHE_MAP {
+ _ANONYMOUS_UNION union {
+ CSHORT NodeTypeCode;
+ PRIVATE_CACHE_MAP_FLAGS Flags;
+ ULONG UlongFlags;
+ } DUMMYUNIONNAME;
+ ULONG ReadAheadMask;
+ PFILE_OBJECT FileObject;
+ LARGE_INTEGER FileOffset1;
+ LARGE_INTEGER BeyondLastByte1;
+ LARGE_INTEGER FileOffset2;
+ LARGE_INTEGER BeyondLastByte2;
+ LARGE_INTEGER ReadAheadOffset[2];
+ ULONG ReadAheadLength[2];
+ KSPIN_LOCK ReadAheadSpinLock;
+ LIST_ENTRY PrivateLinks;
+} PRIVATE_CACHE_MAP, *PPRIVATE_CACHE_MAP;
+
+#endif
+
+typedef struct _PS_IMPERSONATION_INFORMATION {
+ PACCESS_TOKEN Token;
+ BOOLEAN CopyOnOpen;
+ BOOLEAN EffectiveOnly;
+ SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
+} PS_IMPERSONATION_INFORMATION, *PPS_IMPERSONATION_INFORMATION;
+
+typedef struct _PUBLIC_BCB {
+ CSHORT NodeTypeCode;
+ CSHORT NodeByteSize;
+ ULONG MappedLength;
+ LARGE_INTEGER MappedFileOffset;
+} PUBLIC_BCB, *PPUBLIC_BCB;
+
+typedef struct _QUERY_PATH_REQUEST {
+ ULONG PathNameLength;
+ PIO_SECURITY_CONTEXT SecurityContext;
+ WCHAR FilePathName[1];
+} QUERY_PATH_REQUEST, *PQUERY_PATH_REQUEST;
+
+typedef struct _QUERY_PATH_RESPONSE {
+ ULONG LengthAccepted;
+} QUERY_PATH_RESPONSE, *PQUERY_PATH_RESPONSE;
+
+typedef struct _RETRIEVAL_POINTERS_BUFFER {
+ ULONG ExtentCount;
+ LARGE_INTEGER StartingVcn;
+ struct {
+ LARGE_INTEGER NextVcn;
+ LARGE_INTEGER Lcn;
+ } Extents[1];
+} RETRIEVAL_POINTERS_BUFFER, *PRETRIEVAL_POINTERS_BUFFER;
+
+typedef struct _RTL_SPLAY_LINKS {
+ struct _RTL_SPLAY_LINKS *Parent;
+ struct _RTL_SPLAY_LINKS *LeftChild;
+ struct _RTL_SPLAY_LINKS *RightChild;
+} RTL_SPLAY_LINKS, *PRTL_SPLAY_LINKS;
+
+typedef struct _SE_EXPORTS {
+
+ LUID SeCreateTokenPrivilege;
+ LUID SeAssignPrimaryTokenPrivilege;
+ LUID SeLockMemoryPrivilege;
+ LUID SeIncreaseQuotaPrivilege;
+ LUID SeUnsolicitedInputPrivilege;
+ LUID SeTcbPrivilege;
+ LUID SeSecurityPrivilege;
+ LUID SeTakeOwnershipPrivilege;
+ LUID SeLoadDriverPrivilege;
+ LUID SeCreatePagefilePrivilege;
+ LUID SeIncreaseBasePriorityPrivilege;
+ LUID SeSystemProfilePrivilege;
+ LUID SeSystemtimePrivilege;
+ LUID SeProfileSingleProcessPrivilege;
+ LUID SeCreatePermanentPrivilege;
+ LUID SeBackupPrivilege;
+ LUID SeRestorePrivilege;
+ LUID SeShutdownPrivilege;
+ LUID SeDebugPrivilege;
+ LUID SeAuditPrivilege;
+ LUID SeSystemEnvironmentPrivilege;
+ LUID SeChangeNotifyPrivilege;
+ LUID SeRemoteShutdownPrivilege;
+
+ PSID SeNullSid;
+ PSID SeWorldSid;
+ PSID SeLocalSid;
+ PSID SeCreatorOwnerSid;
+ PSID SeCreatorGroupSid;
+
+ PSID SeNtAuthoritySid;
+ PSID SeDialupSid;
+ PSID SeNetworkSid;
+ PSID SeBatchSid;
+ PSID SeInteractiveSid;
+ PSID SeLocalSystemSid;
+ PSID SeAliasAdminsSid;
+ PSID SeAliasUsersSid;
+ PSID SeAliasGuestsSid;
+ PSID SeAliasPowerUsersSid;
+ PSID SeAliasAccountOpsSid;
+ PSID SeAliasSystemOpsSid;
+ PSID SeAliasPrintOpsSid;
+ PSID SeAliasBackupOpsSid;
+
+ PSID SeAuthenticatedUsersSid;
+
+ PSID SeRestrictedSid;
+ PSID SeAnonymousLogonSid;
+
+ LUID SeUndockPrivilege;
+ LUID SeSyncAgentPrivilege;
+ LUID SeEnableDelegationPrivilege;
+
+} SE_EXPORTS, *PSE_EXPORTS;
+
+typedef struct _SECTION_BASIC_INFORMATION {
+ PVOID BaseAddress;
+ ULONG Attributes;
+ LARGE_INTEGER Size;
+} SECTION_BASIC_INFORMATION, *PSECTION_BASIC_INFORMATION;
+
+typedef struct _SECTION_IMAGE_INFORMATION {
+ PVOID EntryPoint;
+ ULONG Unknown1;
+ ULONG StackReserve;
+ ULONG StackCommit;
+ ULONG Subsystem;
+ USHORT MinorSubsystemVersion;
+ USHORT MajorSubsystemVersion;
+ ULONG Unknown2;
+ ULONG Characteristics;
+ USHORT ImageNumber;
+ BOOLEAN Executable;
+ UCHAR Unknown3;
+ ULONG Unknown4[3];
+} SECTION_IMAGE_INFORMATION, *PSECTION_IMAGE_INFORMATION;
+
+#if (VER_PRODUCTBUILD >= 2600)
+
+typedef struct _SHARED_CACHE_MAP {
+ CSHORT NodeTypeCode;
+ CSHORT NodeByteSize;
+ ULONG OpenCount;
+ LARGE_INTEGER FileSize;
+ LIST_ENTRY BcbList;
+ LARGE_INTEGER SectionSize;
+ LARGE_INTEGER ValidDataLength;
+ LARGE_INTEGER ValidDataGoal;
+ PVACB InitialVacbs[4];
+ PVACB *Vacbs;
+ PFILE_OBJECT FileObject;
+ PVACB ActiveVacb;
+ PVOID NeedToZero;
+ ULONG ActivePage;
+ ULONG NeedToZeroPage;
+ KSPIN_LOCK ActiveVacbSpinLock;
+ ULONG VacbActiveCount;
+ ULONG DirtyPages;
+ LIST_ENTRY SharedCacheMapLinks;
+ ULONG Flags;
+ NTSTATUS Status;
+ PMBCB Mbcb;
+ PVOID Section;
+ PKEVENT CreateEvent;
+ PKEVENT WaitOnActiveCount;
+ ULONG PagesToWrite;
+ LONGLONG BeyondLastFlush;
+ PCACHE_MANAGER_CALLBACKS Callbacks;
+ PVOID LazyWriteContext;
+ LIST_ENTRY PrivateList;
+ PVOID LogHandle;
+ PVOID FlushToLsnRoutine;
+ ULONG DirtyPageThreshold;
+ ULONG LazyWritePassCount;
+ PCACHE_UNINITIALIZE_EVENT UninitializeEvent;
+ PVACB NeedToZeroVacb;
+ KSPIN_LOCK BcbSpinLock;
+ PVOID Reserved;
+ KEVENT Event;
+ EX_PUSH_LOCK VacbPushLock;
+ PRIVATE_CACHE_MAP PrivateCacheMap;
+} SHARED_CACHE_MAP, *PSHARED_CACHE_MAP;
+
+#endif
+
+typedef struct _STARTING_VCN_INPUT_BUFFER {
+ LARGE_INTEGER StartingVcn;
+} STARTING_VCN_INPUT_BUFFER, *PSTARTING_VCN_INPUT_BUFFER;
+
+typedef struct _SYSTEM_CACHE_INFORMATION {
+ ULONG CurrentSize;
+ ULONG PeakSize;
+ ULONG PageFaultCount;
+ ULONG MinimumWorkingSet;
+ ULONG MaximumWorkingSet;
+ ULONG Unused[4];
+} SYSTEM_CACHE_INFORMATION, *PSYSTEM_CACHE_INFORMATION;
+
+typedef struct _TERMINATION_PORT {
+ struct _TERMINATION_PORT* Next;
+ PVOID Port;
+} TERMINATION_PORT, *PTERMINATION_PORT;
+
+typedef struct _SECURITY_CLIENT_CONTEXT {
+ SECURITY_QUALITY_OF_SERVICE SecurityQos;
+ PACCESS_TOKEN ClientToken;
+ BOOLEAN DirectlyAccessClientToken;
+ BOOLEAN DirectAccessEffectiveOnly;
+ BOOLEAN ServerIsRemote;
+ TOKEN_CONTROL ClientTokenControl;
+} SECURITY_CLIENT_CONTEXT, *PSECURITY_CLIENT_CONTEXT;
+
+typedef struct _TUNNEL {
+ FAST_MUTEX Mutex;
+ PRTL_SPLAY_LINKS Cache;
+ LIST_ENTRY TimerQueue;
+ USHORT NumEntries;
+} TUNNEL, *PTUNNEL;
+
+typedef struct _VACB {
+ PVOID BaseAddress;
+ PSHARED_CACHE_MAP SharedCacheMap;
+ union {
+ LARGE_INTEGER FileOffset;
+ USHORT ActiveCount;
+ } Overlay;
+ LIST_ENTRY LruList;
+} VACB, *PVACB;
+
+typedef struct _VAD_HEADER {
+ PVOID StartVPN;
+ PVOID EndVPN;
+ PVAD_HEADER ParentLink;
+ PVAD_HEADER LeftLink;
+ PVAD_HEADER RightLink;
+ ULONG Flags; /* LSB = CommitCharge */
+ PVOID ControlArea;
+ PVOID FirstProtoPte;
+ PVOID LastPTE;
+ ULONG Unknown;
+ LIST_ENTRY Secured;
+} VAD_HEADER, *PVAD_HEADER;
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+CcCanIWrite (
+ /*IN*/ PFILE_OBJECT FileObject,
+ /*IN*/ ULONG BytesToWrite,
+ /*IN*/ BOOLEAN Wait,
+ /*IN*/ BOOLEAN Retrying
+);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+CcCopyRead (
+ /*IN*/ PFILE_OBJECT FileObject,
+ /*IN*/ PLARGE_INTEGER FileOffset,
+ /*IN*/ ULONG Length,
+ /*IN*/ BOOLEAN Wait,
+ /*OUT*/ PVOID Buffer,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatus
+);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+CcCopyWrite (
+ /*IN*/ PFILE_OBJECT FileObject,
+ /*IN*/ PLARGE_INTEGER FileOffset,
+ /*IN*/ ULONG Length,
+ /*IN*/ BOOLEAN Wait,
+ /*IN*/ PVOID Buffer
+);
+
+#define CcCopyWriteWontFlush(FO, FOFF, LEN) ((LEN) <= 0x10000)
+
+typedef VOID (NTAPI *PCC_POST_DEFERRED_WRITE) (
+ /*IN*/ PVOID Context1,
+ /*IN*/ PVOID Context2
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+CcDeferWrite (
+ /*IN*/ PFILE_OBJECT FileObject,
+ /*IN*/ PCC_POST_DEFERRED_WRITE PostRoutine,
+ /*IN*/ PVOID Context1,
+ /*IN*/ PVOID Context2,
+ /*IN*/ ULONG BytesToWrite,
+ /*IN*/ BOOLEAN Retrying
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+CcFastCopyRead (
+ /*IN*/ PFILE_OBJECT FileObject,
+ /*IN*/ ULONG FileOffset,
+ /*IN*/ ULONG Length,
+ /*IN*/ ULONG PageCount,
+ /*OUT*/ PVOID Buffer,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatus
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+CcFastCopyWrite (
+ /*IN*/ PFILE_OBJECT FileObject,
+ /*IN*/ ULONG FileOffset,
+ /*IN*/ ULONG Length,
+ /*IN*/ PVOID Buffer
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+CcFlushCache (
+ /*IN*/ PSECTION_OBJECT_POINTERS SectionObjectPointer,
+ /*IN*/ PLARGE_INTEGER FileOffset /*OPTIONAL*/,
+ /*IN*/ ULONG Length,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatus /*OPTIONAL*/
+);
+
+typedef VOID (*PDIRTY_PAGE_ROUTINE) (
+ /*IN*/ PFILE_OBJECT FileObject,
+ /*IN*/ PLARGE_INTEGER FileOffset,
+ /*IN*/ ULONG Length,
+ /*IN*/ PLARGE_INTEGER OldestLsn,
+ /*IN*/ PLARGE_INTEGER NewestLsn,
+ /*IN*/ PVOID Context1,
+ /*IN*/ PVOID Context2
+);
+
+NTKERNELAPI
+LARGE_INTEGER
+NTAPI
+CcGetDirtyPages (
+ /*IN*/ PVOID LogHandle,
+ /*IN*/ PDIRTY_PAGE_ROUTINE DirtyPageRoutine,
+ /*IN*/ PVOID Context1,
+ /*IN*/ PVOID Context2
+);
+
+NTKERNELAPI
+PFILE_OBJECT
+NTAPI
+CcGetFileObjectFromBcb (
+ /*IN*/ PVOID Bcb
+);
+
+NTKERNELAPI
+PFILE_OBJECT
+NTAPI
+CcGetFileObjectFromSectionPtrs (
+ /*IN*/ PSECTION_OBJECT_POINTERS SectionObjectPointer
+);
+
+#define CcGetFileSizePointer(FO) ( \
+ ((PLARGE_INTEGER)((FO)->SectionObjectPointer->SharedCacheMap) + 1) \
+)
+
+#if (VER_PRODUCTBUILD >= 2195)
+
+NTKERNELAPI
+LARGE_INTEGER
+NTAPI
+CcGetFlushedValidData (
+ /*IN*/ PSECTION_OBJECT_POINTERS SectionObjectPointer,
+ /*IN*/ BOOLEAN BcbListHeld
+);
+
+#endif /* (VER_PRODUCTBUILD >= 2195) */
+
+NTKERNELAPI
+LARGE_INTEGER
+CcGetLsnForFileObject (
+ /*IN*/ PFILE_OBJECT FileObject,
+ /*OUT*/ PLARGE_INTEGER OldestLsn /*OPTIONAL*/
+);
+
+typedef BOOLEAN (NTAPI *PACQUIRE_FOR_LAZY_WRITE) (
+ /*IN*/ PVOID Context,
+ /*IN*/ BOOLEAN Wait
+);
+
+typedef VOID (NTAPI *PRELEASE_FROM_LAZY_WRITE) (
+ /*IN*/ PVOID Context
+);
+
+typedef BOOLEAN (NTAPI *PACQUIRE_FOR_READ_AHEAD) (
+ /*IN*/ PVOID Context,
+ /*IN*/ BOOLEAN Wait
+);
+
+typedef VOID (NTAPI *PRELEASE_FROM_READ_AHEAD) (
+ /*IN*/ PVOID Context
+);
+
+typedef struct _CACHE_MANAGER_CALLBACKS {
+ PACQUIRE_FOR_LAZY_WRITE AcquireForLazyWrite;
+ PRELEASE_FROM_LAZY_WRITE ReleaseFromLazyWrite;
+ PACQUIRE_FOR_READ_AHEAD AcquireForReadAhead;
+ PRELEASE_FROM_READ_AHEAD ReleaseFromReadAhead;
+} CACHE_MANAGER_CALLBACKS, *PCACHE_MANAGER_CALLBACKS;
+
+NTKERNELAPI
+VOID
+NTAPI
+CcInitializeCacheMap (
+ /*IN*/ PFILE_OBJECT FileObject,
+ /*IN*/ PCC_FILE_SIZES FileSizes,
+ /*IN*/ BOOLEAN PinAccess,
+ /*IN*/ PCACHE_MANAGER_CALLBACKS Callbacks,
+ /*IN*/ PVOID LazyWriteContext
+);
+
+#define CcIsFileCached(FO) ( \
+ ((FO)->SectionObjectPointer != NULL) && \
+ (((PSECTION_OBJECT_POINTERS)(FO)->SectionObjectPointer)->SharedCacheMap != NULL) \
+)
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+CcIsThereDirtyData (
+ /*IN*/ PVPB Vpb
+);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+CcMapData (
+ /*IN*/ PFILE_OBJECT FileObject,
+ /*IN*/ PLARGE_INTEGER FileOffset,
+ /*IN*/ ULONG Length,
+ /*IN*/ BOOLEAN Wait,
+ /*OUT*/ PVOID *Bcb,
+ /*OUT*/ PVOID *Buffer
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+CcMdlRead (
+ /*IN*/ PFILE_OBJECT FileObject,
+ /*IN*/ PLARGE_INTEGER FileOffset,
+ /*IN*/ ULONG Length,
+ /*OUT*/ PMDL *MdlChain,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatus
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+CcMdlReadComplete (
+ /*IN*/ PFILE_OBJECT FileObject,
+ /*IN*/ PMDL MdlChain
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+CcMdlWriteComplete (
+ /*IN*/ PFILE_OBJECT FileObject,
+ /*IN*/ PLARGE_INTEGER FileOffset,
+ /*IN*/ PMDL MdlChain
+);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+CcPinMappedData (
+ /*IN*/ PFILE_OBJECT FileObject,
+ /*IN*/ PLARGE_INTEGER FileOffset,
+ /*IN*/ ULONG Length,
+#if (VER_PRODUCTBUILD >= 2195)
+ /*IN*/ ULONG Flags,
+#else
+ /*IN*/ BOOLEAN Wait,
+#endif
+ /*IN OUT*/ PVOID *Bcb
+);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+CcPinRead (
+ /*IN*/ PFILE_OBJECT FileObject,
+ /*IN*/ PLARGE_INTEGER FileOffset,
+ /*IN*/ ULONG Length,
+#if (VER_PRODUCTBUILD >= 2195)
+ /*IN*/ ULONG Flags,
+#else
+ /*IN*/ BOOLEAN Wait,
+#endif
+ /*OUT*/ PVOID *Bcb,
+ /*OUT*/ PVOID *Buffer
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+CcPrepareMdlWrite (
+ /*IN*/ PFILE_OBJECT FileObject,
+ /*IN*/ PLARGE_INTEGER FileOffset,
+ /*IN*/ ULONG Length,
+ /*OUT*/ PMDL *MdlChain,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatus
+);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+CcPreparePinWrite (
+ /*IN*/ PFILE_OBJECT FileObject,
+ /*IN*/ PLARGE_INTEGER FileOffset,
+ /*IN*/ ULONG Length,
+ /*IN*/ BOOLEAN Zero,
+#if (VER_PRODUCTBUILD >= 2195)
+ /*IN*/ ULONG Flags,
+#else
+ /*IN*/ BOOLEAN Wait,
+#endif
+ /*OUT*/ PVOID *Bcb,
+ /*OUT*/ PVOID *Buffer
+);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+CcPurgeCacheSection (
+ /*IN*/ PSECTION_OBJECT_POINTERS SectionObjectPointer,
+ /*IN*/ PLARGE_INTEGER FileOffset /*OPTIONAL*/,
+ /*IN*/ ULONG Length,
+ /*IN*/ BOOLEAN UninitializeCacheMaps
+);
+
+#define CcReadAhead(FO, FOFF, LEN) ( \
+ if ((LEN) >= 256) { \
+ CcScheduleReadAhead((FO), (FOFF), (LEN)); \
+ } \
+)
+
+#if (VER_PRODUCTBUILD >= 2195)
+
+NTKERNELAPI
+PVOID
+NTAPI
+CcRemapBcb (
+ /*IN*/ PVOID Bcb
+);
+
+#endif /* (VER_PRODUCTBUILD >= 2195) */
+
+NTKERNELAPI
+VOID
+NTAPI
+CcRepinBcb (
+ /*IN*/ PVOID Bcb
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+CcScheduleReadAhead (
+ /*IN*/ PFILE_OBJECT FileObject,
+ /*IN*/ PLARGE_INTEGER FileOffset,
+ /*IN*/ ULONG Length
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+CcSetAdditionalCacheAttributes (
+ /*IN*/ PFILE_OBJECT FileObject,
+ /*IN*/ BOOLEAN DisableReadAhead,
+ /*IN*/ BOOLEAN DisableWriteBehind
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+CcSetBcbOwnerPointer (
+ /*IN*/ PVOID Bcb,
+ /*IN*/ PVOID OwnerPointer
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+CcSetDirtyPageThreshold (
+ /*IN*/ PFILE_OBJECT FileObject,
+ /*IN*/ ULONG DirtyPageThreshold
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+CcSetDirtyPinnedData (
+ /*IN*/ PVOID BcbVoid,
+ /*IN*/ PLARGE_INTEGER Lsn /*OPTIONAL*/
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+CcSetFileSizes (
+ /*IN*/ PFILE_OBJECT FileObject,
+ /*IN*/ PCC_FILE_SIZES FileSizes
+);
+
+typedef VOID (NTAPI *PFLUSH_TO_LSN) (
+ /*IN*/ PVOID LogHandle,
+ /*IN*/ PLARGE_INTEGER Lsn
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+CcSetLogHandleForFile (
+ /*IN*/ PFILE_OBJECT FileObject,
+ /*IN*/ PVOID LogHandle,
+ /*IN*/ PFLUSH_TO_LSN FlushToLsnRoutine
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+CcSetReadAheadGranularity (
+ /*IN*/ PFILE_OBJECT FileObject,
+ /*IN*/ ULONG Granularity /* default: PAGE_SIZE */
+ /* allowed: 2^n * PAGE_SIZE */
+);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+CcUninitializeCacheMap (
+ /*IN*/ PFILE_OBJECT FileObject,
+ /*IN*/ PLARGE_INTEGER TruncateSize /*OPTIONAL*/,
+ /*IN*/ PCACHE_UNINITIALIZE_EVENT UninitializeCompleteEvent /*OPTIONAL*/
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+CcUnpinData (
+ /*IN*/ PVOID Bcb
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+CcUnpinDataForThread (
+ /*IN*/ PVOID Bcb,
+ /*IN*/ ERESOURCE_THREAD ResourceThreadId
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+CcUnpinRepinnedBcb (
+ /*IN*/ PVOID Bcb,
+ /*IN*/ BOOLEAN WriteThrough,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatus
+);
+
+#if (VER_PRODUCTBUILD >= 2195)
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+CcWaitForCurrentLazyWriterActivity (
+ VOID
+);
+
+#endif /* (VER_PRODUCTBUILD >= 2195) */
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+CcZeroData (
+ /*IN*/ PFILE_OBJECT FileObject,
+ /*IN*/ PLARGE_INTEGER StartOffset,
+ /*IN*/ PLARGE_INTEGER EndOffset,
+ /*IN*/ BOOLEAN Wait
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+ExDisableResourceBoostLite (
+ /*IN*/ PERESOURCE Resource
+);
+
+NTKERNELAPI
+ULONG
+NTAPI
+ExQueryPoolBlockSize (
+ /*IN*/ PVOID PoolBlock,
+ /*OUT*/ PBOOLEAN QuotaCharged
+);
+
+#define FlagOn(x, f) ((x) & (f))
+
+NTKERNELAPI
+VOID
+NTAPI
+FsRtlAddToTunnelCache (
+ /*IN*/ PTUNNEL Cache,
+ /*IN*/ ULONGLONG DirectoryKey,
+ /*IN*/ PUNICODE_STRING ShortName,
+ /*IN*/ PUNICODE_STRING LongName,
+ /*IN*/ BOOLEAN KeyByShortName,
+ /*IN*/ ULONG DataLength,
+ /*IN*/ PVOID Data
+);
+
+#if (VER_PRODUCTBUILD >= 2195)
+
+PFILE_LOCK
+NTAPI
+FsRtlAllocateFileLock (
+ /*IN*/ PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine /*OPTIONAL*/,
+ /*IN*/ PUNLOCK_ROUTINE UnlockRoutine /*OPTIONAL*/
+);
+
+#endif /* (VER_PRODUCTBUILD >= 2195) */
+
+NTKERNELAPI
+PVOID
+NTAPI
+FsRtlAllocatePool (
+ /*IN*/ POOL_TYPE PoolType,
+ /*IN*/ ULONG NumberOfBytes
+);
+
+NTKERNELAPI
+PVOID
+NTAPI
+FsRtlAllocatePoolWithQuota (
+ /*IN*/ POOL_TYPE PoolType,
+ /*IN*/ ULONG NumberOfBytes
+);
+
+NTKERNELAPI
+PVOID
+NTAPI
+FsRtlAllocatePoolWithQuotaTag (
+ /*IN*/ POOL_TYPE PoolType,
+ /*IN*/ ULONG NumberOfBytes,
+ /*IN*/ ULONG Tag
+);
+
+NTKERNELAPI
+PVOID
+NTAPI
+FsRtlAllocatePoolWithTag (
+ /*IN*/ POOL_TYPE PoolType,
+ /*IN*/ ULONG NumberOfBytes,
+ /*IN*/ ULONG Tag
+);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+FsRtlAreNamesEqual (
+ /*IN*/ PUNICODE_STRING Name1,
+ /*IN*/ PUNICODE_STRING Name2,
+ /*IN*/ BOOLEAN IgnoreCase,
+ /*IN*/ PWCHAR UpcaseTable /*OPTIONAL*/
+);
+
+#define FsRtlAreThereCurrentFileLocks(FL) ( \
+ ((FL)->FastIoIsQuestionable) \
+)
+
+/*
+ FsRtlCheckLockForReadAccess:
+
+ All this really does is pick out the lock parameters from the irp (io stack
+ location?), get IoGetRequestorProcess, and pass values on to
+ FsRtlFastCheckLockForRead.
+*/
+NTKERNELAPI
+BOOLEAN
+NTAPI
+FsRtlCheckLockForReadAccess (
+ /*IN*/ PFILE_LOCK FileLock,
+ /*IN*/ PIRP Irp
+);
+
+/*
+ FsRtlCheckLockForWriteAccess:
+
+ All this really does is pick out the lock parameters from the irp (io stack
+ location?), get IoGetRequestorProcess, and pass values on to
+ FsRtlFastCheckLockForWrite.
+*/
+NTKERNELAPI
+BOOLEAN
+NTAPI
+FsRtlCheckLockForWriteAccess (
+ /*IN*/ PFILE_LOCK FileLock,
+ /*IN*/ PIRP Irp
+);
+
+typedef
+VOID NTAPI
+(*POPLOCK_WAIT_COMPLETE_ROUTINE) (
+ /*IN*/ PVOID Context,
+ /*IN*/ PIRP Irp
+);
+
+typedef
+VOID NTAPI
+(*POPLOCK_FS_PREPOST_IRP) (
+ /*IN*/ PVOID Context,
+ /*IN*/ PIRP Irp
+);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+FsRtlCheckOplock (
+ /*IN*/ POPLOCK Oplock,
+ /*IN*/ PIRP Irp,
+ /*IN*/ PVOID Context,
+ /*IN*/ POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine /*OPTIONAL*/,
+ /*IN*/ POPLOCK_FS_PREPOST_IRP PostIrpRoutine /*OPTIONAL*/
+);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+FsRtlCopyRead (
+ /*IN*/ PFILE_OBJECT FileObject,
+ /*IN*/ PLARGE_INTEGER FileOffset,
+ /*IN*/ ULONG Length,
+ /*IN*/ BOOLEAN Wait,
+ /*IN*/ ULONG LockKey,
+ /*OUT*/ PVOID Buffer,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatus,
+ /*IN*/ PDEVICE_OBJECT DeviceObject
+);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+FsRtlCopyWrite (
+ /*IN*/ PFILE_OBJECT FileObject,
+ /*IN*/ PLARGE_INTEGER FileOffset,
+ /*IN*/ ULONG Length,
+ /*IN*/ BOOLEAN Wait,
+ /*IN*/ ULONG LockKey,
+ /*IN*/ PVOID Buffer,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatus,
+ /*IN*/ PDEVICE_OBJECT DeviceObject
+);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+FsRtlCurrentBatchOplock (
+ /*IN*/ POPLOCK Oplock
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+FsRtlDeleteKeyFromTunnelCache (
+ /*IN*/ PTUNNEL Cache,
+ /*IN*/ ULONGLONG DirectoryKey
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+FsRtlDeleteTunnelCache (
+ /*IN*/ PTUNNEL Cache
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+FsRtlDeregisterUncProvider (
+ /*IN*/ HANDLE Handle
+);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+FsRtlDoesNameContainWildCards (
+ /*IN*/ PUNICODE_STRING Name
+);
+
+#define FsRtlEnterFileSystem KeEnterCriticalRegion
+
+#define FsRtlExitFileSystem KeLeaveCriticalRegion
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+FsRtlFastCheckLockForRead (
+ /*IN*/ PFILE_LOCK FileLock,
+ /*IN*/ PLARGE_INTEGER FileOffset,
+ /*IN*/ PLARGE_INTEGER Length,
+ /*IN*/ ULONG Key,
+ /*IN*/ PFILE_OBJECT FileObject,
+ /*IN*/ PEPROCESS Process
+);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+FsRtlFastCheckLockForWrite (
+ /*IN*/ PFILE_LOCK FileLock,
+ /*IN*/ PLARGE_INTEGER FileOffset,
+ /*IN*/ PLARGE_INTEGER Length,
+ /*IN*/ ULONG Key,
+ /*IN*/ PFILE_OBJECT FileObject,
+ /*IN*/ PEPROCESS Process
+);
+
+#define FsRtlFastLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11) ( \
+ FsRtlPrivateLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, NULL, A10, A11) \
+)
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+FsRtlFastUnlockAll (
+ /*IN*/ PFILE_LOCK FileLock,
+ /*IN*/ PFILE_OBJECT FileObject,
+ /*IN*/ PEPROCESS Process,
+ /*IN*/ PVOID Context /*OPTIONAL*/
+);
+/* ret: STATUS_RANGE_NOT_LOCKED */
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+FsRtlFastUnlockAllByKey (
+ /*IN*/ PFILE_LOCK FileLock,
+ /*IN*/ PFILE_OBJECT FileObject,
+ /*IN*/ PEPROCESS Process,
+ /*IN*/ ULONG Key,
+ /*IN*/ PVOID Context /*OPTIONAL*/
+);
+/* ret: STATUS_RANGE_NOT_LOCKED */
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+FsRtlFastUnlockSingle (
+ /*IN*/ PFILE_LOCK FileLock,
+ /*IN*/ PFILE_OBJECT FileObject,
+ /*IN*/ PLARGE_INTEGER FileOffset,
+ /*IN*/ PLARGE_INTEGER Length,
+ /*IN*/ PEPROCESS Process,
+ /*IN*/ ULONG Key,
+ /*IN*/ PVOID Context /*OPTIONAL*/,
+ /*IN*/ BOOLEAN AlreadySynchronized
+);
+/* ret: STATUS_RANGE_NOT_LOCKED */
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+FsRtlFindInTunnelCache (
+ /*IN*/ PTUNNEL Cache,
+ /*IN*/ ULONGLONG DirectoryKey,
+ /*IN*/ PUNICODE_STRING Name,
+ /*OUT*/ PUNICODE_STRING ShortName,
+ /*OUT*/ PUNICODE_STRING LongName,
+ /*IN OUT*/ PULONG DataLength,
+ /*OUT*/ PVOID Data
+);
+
+#if (VER_PRODUCTBUILD >= 2195)
+
+NTKERNELAPI
+VOID
+NTAPI
+FsRtlFreeFileLock (
+ /*IN*/ PFILE_LOCK FileLock
+);
+
+#endif /* (VER_PRODUCTBUILD >= 2195) */
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+FsRtlGetFileSize (
+ /*IN*/ PFILE_OBJECT FileObject,
+ /*IN OUT*/ PLARGE_INTEGER FileSize
+);
+
+/*
+ FsRtlGetNextFileLock:
+
+ ret: NULL if no more locks
+
+ Internals:
+ FsRtlGetNextFileLock uses FileLock->LastReturnedLockInfo and
+ FileLock->LastReturnedLock as storage.
+ LastReturnedLock is a pointer to the 'raw' lock inkl. double linked
+ list, and FsRtlGetNextFileLock needs this to get next lock on subsequent
+ calls with Restart = FALSE.
+*/
+NTKERNELAPI
+PFILE_LOCK_INFO
+NTAPI
+FsRtlGetNextFileLock (
+ /*IN*/ PFILE_LOCK FileLock,
+ /*IN*/ BOOLEAN Restart
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+FsRtlInitializeFileLock (
+ /*IN*/ PFILE_LOCK FileLock,
+ /*IN*/ PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine /*OPTIONAL*/,
+ /*IN*/ PUNLOCK_ROUTINE UnlockRoutine /*OPTIONAL*/
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+FsRtlInitializeOplock (
+ /*IN OUT*/ POPLOCK Oplock
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+FsRtlInitializeTunnelCache (
+ /*IN*/ PTUNNEL Cache
+);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+FsRtlIsNameInExpression (
+ /*IN*/ PUNICODE_STRING Expression,
+ /*IN*/ PUNICODE_STRING Name,
+ /*IN*/ BOOLEAN IgnoreCase,
+ /*IN*/ PWCHAR UpcaseTable /*OPTIONAL*/
+);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+FsRtlIsNtstatusExpected (
+ /*IN*/ NTSTATUS Ntstatus
+);
+
+#define FsRtlIsUnicodeCharacterWild(C) ( \
+ (((C) >= 0x40) ? \
+ FALSE : \
+ FlagOn((*FsRtlLegalAnsiCharacterArray)[(C)], FSRTL_WILD_CHARACTER )) \
+)
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+FsRtlMdlReadComplete (
+ /*IN*/ PFILE_OBJECT FileObject,
+ /*IN*/ PMDL MdlChain
+);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+FsRtlMdlReadCompleteDev (
+ /*IN*/ PFILE_OBJECT FileObject,
+ /*IN*/ PMDL MdlChain,
+ /*IN*/ PDEVICE_OBJECT DeviceObject
+);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+FsRtlMdlWriteComplete (
+ /*IN*/ PFILE_OBJECT FileObject,
+ /*IN*/ PLARGE_INTEGER FileOffset,
+ /*IN*/ PMDL MdlChain
+);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+FsRtlMdlWriteCompleteDev (
+ /*IN*/ PFILE_OBJECT FileObject,
+ /*IN*/ PLARGE_INTEGER FileOffset,
+ /*IN*/ PMDL MdlChain,
+ /*IN*/ PDEVICE_OBJECT DeviceObject
+);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+FsRtlNormalizeNtstatus (
+ /*IN*/ NTSTATUS Exception,
+ /*IN*/ NTSTATUS GenericException
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+FsRtlNotifyChangeDirectory (
+ /*IN*/ PNOTIFY_SYNC NotifySync,
+ /*IN*/ PVOID FsContext,
+ /*IN*/ PSTRING FullDirectoryName,
+ /*IN*/ PLIST_ENTRY NotifyList,
+ /*IN*/ BOOLEAN WatchTree,
+ /*IN*/ ULONG CompletionFilter,
+ /*IN*/ PIRP NotifyIrp
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+FsRtlNotifyCleanup (
+ /*IN*/ PNOTIFY_SYNC NotifySync,
+ /*IN*/ PLIST_ENTRY NotifyList,
+ /*IN*/ PVOID FsContext
+);
+
+typedef BOOLEAN (*PCHECK_FOR_TRAVERSE_ACCESS) (
+ /*IN*/ PVOID NotifyContext,
+ /*IN*/ PVOID TargetContext,
+ /*IN*/ PSECURITY_SUBJECT_CONTEXT SubjectContext
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+FsRtlNotifyFullChangeDirectory (
+ /*IN*/ PNOTIFY_SYNC NotifySync,
+ /*IN*/ PLIST_ENTRY NotifyList,
+ /*IN*/ PVOID FsContext,
+ /*IN*/ PSTRING FullDirectoryName,
+ /*IN*/ BOOLEAN WatchTree,
+ /*IN*/ BOOLEAN IgnoreBuffer,
+ /*IN*/ ULONG CompletionFilter,
+ /*IN*/ PIRP NotifyIrp,
+ /*IN*/ PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback /*OPTIONAL*/,
+ /*IN*/ PSECURITY_SUBJECT_CONTEXT SubjectContext /*OPTIONAL*/
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+FsRtlNotifyFullReportChange (
+ /*IN*/ PNOTIFY_SYNC NotifySync,
+ /*IN*/ PLIST_ENTRY NotifyList,
+ /*IN*/ PSTRING FullTargetName,
+ /*IN*/ USHORT TargetNameOffset,
+ /*IN*/ PSTRING StreamName /*OPTIONAL*/,
+ /*IN*/ PSTRING NormalizedParentName /*OPTIONAL*/,
+ /*IN*/ ULONG FilterMatch,
+ /*IN*/ ULONG Action,
+ /*IN*/ PVOID TargetContext
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+FsRtlNotifyInitializeSync (
+ /*IN*/ PNOTIFY_SYNC NotifySync
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+FsRtlNotifyReportChange (
+ /*IN*/ PNOTIFY_SYNC NotifySync,
+ /*IN*/ PLIST_ENTRY NotifyList,
+ /*IN*/ PSTRING FullTargetName,
+ /*IN*/ PUSHORT FileNamePartLength,
+ /*IN*/ ULONG FilterMatch
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+FsRtlNotifyUninitializeSync (
+ /*IN*/ PNOTIFY_SYNC NotifySync
+);
+
+#if (VER_PRODUCTBUILD >= 2195)
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+FsRtlNotifyVolumeEvent (
+ /*IN*/ PFILE_OBJECT FileObject,
+ /*IN*/ ULONG EventCode
+);
+
+#endif /* (VER_PRODUCTBUILD >= 2195) */
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+FsRtlOplockFsctrl (
+ /*IN*/ POPLOCK Oplock,
+ /*IN*/ PIRP Irp,
+ /*IN*/ ULONG OpenCount
+);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+FsRtlOplockIsFastIoPossible (
+ /*IN*/ POPLOCK Oplock
+);
+
+/*
+ FsRtlPrivateLock:
+
+ ret: IoStatus->Status: STATUS_PENDING, STATUS_LOCK_NOT_GRANTED
+
+ Internals:
+ -Calls IoCompleteRequest if Irp
+ -Uses exception handling / ExRaiseStatus with STATUS_INSUFFICIENT_RESOURCES
+*/
+NTKERNELAPI
+BOOLEAN
+NTAPI
+FsRtlPrivateLock (
+ /*IN*/ PFILE_LOCK FileLock,
+ /*IN*/ PFILE_OBJECT FileObject,
+ /*IN*/ PLARGE_INTEGER FileOffset,
+ /*IN*/ PLARGE_INTEGER Length,
+ /*IN*/ PEPROCESS Process,
+ /*IN*/ ULONG Key,
+ /*IN*/ BOOLEAN FailImmediately,
+ /*IN*/ BOOLEAN ExclusiveLock,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatus,
+ /*IN*/ PIRP Irp /*OPTIONAL*/,
+ /*IN*/ PVOID Context,
+ /*IN*/ BOOLEAN AlreadySynchronized
+);
+
+/*
+ FsRtlProcessFileLock:
+
+ ret:
+ -STATUS_INVALID_DEVICE_REQUEST
+ -STATUS_RANGE_NOT_LOCKED from unlock routines.
+ -STATUS_PENDING, STATUS_LOCK_NOT_GRANTED from FsRtlPrivateLock
+ (redirected IoStatus->Status).
+
+ Internals:
+ -switch ( Irp->CurrentStackLocation->MinorFunction )
+ lock: return FsRtlPrivateLock;
+ unlocksingle: return FsRtlFastUnlockSingle;
+ unlockall: return FsRtlFastUnlockAll;
+ unlockallbykey: return FsRtlFastUnlockAllByKey;
+ default: IofCompleteRequest with STATUS_INVALID_DEVICE_REQUEST;
+ return STATUS_INVALID_DEVICE_REQUEST;
+
+ -'AllwaysZero' is passed thru as 'AllwaysZero' to lock / unlock routines.
+ -'Irp' is passet thru as 'Irp' to FsRtlPrivateLock.
+*/
+NTKERNELAPI
+NTSTATUS
+NTAPI
+FsRtlProcessFileLock (
+ /*IN*/ PFILE_LOCK FileLock,
+ /*IN*/ PIRP Irp,
+ /*IN*/ PVOID Context /*OPTIONAL*/
+);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+FsRtlRegisterUncProvider (
+ /*IN OUT*/ PHANDLE MupHandle,
+ /*IN*/ PUNICODE_STRING RedirectorDeviceName,
+ /*IN*/ BOOLEAN MailslotsSupported
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+FsRtlUninitializeFileLock (
+ /*IN*/ PFILE_LOCK FileLock
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+FsRtlUninitializeOplock (
+ /*IN OUT*/ POPLOCK Oplock
+);
+
+NTSYSAPI
+VOID
+NTAPI
+HalDisplayString (
+ /*IN*/ PCHAR String
+);
+
+NTSYSAPI
+VOID
+NTAPI
+HalQueryRealTimeClock (
+ /*IN OUT*/ PTIME_FIELDS TimeFields
+);
+
+NTSYSAPI
+VOID
+NTAPI
+HalSetRealTimeClock (
+ /*IN*/ PTIME_FIELDS TimeFields
+);
+
+#define InitializeMessageHeader(m, l, t) { \
+ (m)->Length = (USHORT)(l); \
+ (m)->DataLength = (USHORT)(l - sizeof( LPC_MESSAGE )); \
+ (m)->MessageType = (USHORT)(t); \
+ (m)->DataInfoOffset = 0; \
+}
+
+NTKERNELAPI
+VOID
+NTAPI
+IoAcquireVpbSpinLock (
+ /*OUT*/ PKIRQL Irql
+);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoCheckDesiredAccess (
+ /*IN OUT*/ PACCESS_MASK DesiredAccess,
+ /*IN*/ ACCESS_MASK GrantedAccess
+);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoCheckEaBufferValidity (
+ /*IN*/ PFILE_FULL_EA_INFORMATION EaBuffer,
+ /*IN*/ ULONG EaLength,
+ /*OUT*/ PULONG ErrorOffset
+);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoCheckFunctionAccess (
+ /*IN*/ ACCESS_MASK GrantedAccess,
+ /*IN*/ UCHAR MajorFunction,
+ /*IN*/ UCHAR MinorFunction,
+ /*IN*/ ULONG IoControlCode,
+ /*IN*/ PFILE_INFORMATION_CLASS FileInformationClass /*OPTIONAL*/,
+ /*IN*/ PFS_INFORMATION_CLASS FsInformationClass /*OPTIONAL*/
+);
+
+#if (VER_PRODUCTBUILD >= 2195)
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoCheckQuotaBufferValidity (
+ /*IN*/ PFILE_QUOTA_INFORMATION QuotaBuffer,
+ /*IN*/ ULONG QuotaLength,
+ /*OUT*/ PULONG ErrorOffset
+);
+
+#endif /* (VER_PRODUCTBUILD >= 2195) */
+
+NTKERNELAPI
+PFILE_OBJECT
+NTAPI
+IoCreateStreamFileObject (
+ /*IN*/ PFILE_OBJECT FileObject /*OPTIONAL*/,
+ /*IN*/ PDEVICE_OBJECT DeviceObject /*OPTIONAL*/
+);
+
+#if (VER_PRODUCTBUILD >= 2195)
+
+NTKERNELAPI
+PFILE_OBJECT
+NTAPI
+IoCreateStreamFileObjectLite (
+ /*IN*/ PFILE_OBJECT FileObject /*OPTIONAL*/,
+ /*IN*/ PDEVICE_OBJECT DeviceObject /*OPTIONAL*/
+);
+
+#endif /* (VER_PRODUCTBUILD >= 2195) */
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+IoFastQueryNetworkAttributes (
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ ULONG OpenOptions,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatus,
+ /*OUT*/ PFILE_NETWORK_OPEN_INFORMATION Buffer
+);
+
+NTKERNELAPI
+PDEVICE_OBJECT
+NTAPI
+IoGetAttachedDevice (
+ /*IN*/ PDEVICE_OBJECT DeviceObject
+);
+
+NTKERNELAPI
+PDEVICE_OBJECT
+NTAPI
+IoGetBaseFileSystemDeviceObject (
+ /*IN*/ PFILE_OBJECT FileObject
+);
+
+NTKERNELAPI
+PEPROCESS
+NTAPI
+IoGetRequestorProcess (
+ /*IN*/ PIRP Irp
+);
+
+#if (VER_PRODUCTBUILD >= 2195)
+
+NTKERNELAPI
+ULONG
+NTAPI
+IoGetRequestorProcessId (
+ /*IN*/ PIRP Irp
+);
+
+#endif /* (VER_PRODUCTBUILD >= 2195) */
+
+NTKERNELAPI
+PIRP
+NTAPI
+IoGetTopLevelIrp (
+ VOID
+);
+
+#define IoIsFileOpenedExclusively(FileObject) ( \
+ (BOOLEAN) !( \
+ (FileObject)->SharedRead || \
+ (FileObject)->SharedWrite || \
+ (FileObject)->SharedDelete \
+ ) \
+)
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+IoIsOperationSynchronous (
+ /*IN*/ PIRP Irp
+);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+IoIsSystemThread (
+ /*IN*/ PETHREAD Thread
+);
+
+#if (VER_PRODUCTBUILD >= 2195)
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+IoIsValidNameGraftingBuffer (
+ /*IN*/ PIRP Irp,
+ /*IN*/ PREPARSE_DATA_BUFFER ReparseBuffer
+);
+
+#endif /* (VER_PRODUCTBUILD >= 2195) */
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoPageRead (
+ /*IN*/ PFILE_OBJECT FileObject,
+ /*IN*/ PMDL Mdl,
+ /*IN*/ PLARGE_INTEGER Offset,
+ /*IN*/ PKEVENT Event,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock
+);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoQueryFileInformation (
+ /*IN*/ PFILE_OBJECT FileObject,
+ /*IN*/ FILE_INFORMATION_CLASS FileInformationClass,
+ /*IN*/ ULONG Length,
+ /*OUT*/ PVOID FileInformation,
+ /*OUT*/ PULONG ReturnedLength
+);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoQueryVolumeInformation (
+ /*IN*/ PFILE_OBJECT FileObject,
+ /*IN*/ FS_INFORMATION_CLASS FsInformationClass,
+ /*IN*/ ULONG Length,
+ /*OUT*/ PVOID FsInformation,
+ /*OUT*/ PULONG ReturnedLength
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoRegisterFileSystem (
+ /*IN OUT*/ PDEVICE_OBJECT DeviceObject
+);
+
+#if (VER_PRODUCTBUILD >= 1381)
+
+typedef VOID (NTAPI *PDRIVER_FS_NOTIFICATION) (
+ /*IN*/ PDEVICE_OBJECT DeviceObject,
+ /*IN*/ BOOLEAN DriverActive
+);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoRegisterFsRegistrationChange (
+ /*IN*/ PDRIVER_OBJECT DriverObject,
+ /*IN*/ PDRIVER_FS_NOTIFICATION DriverNotificationRoutine
+);
+
+#endif /* (VER_PRODUCTBUILD >= 1381) */
+
+NTKERNELAPI
+VOID
+NTAPI
+IoReleaseVpbSpinLock (
+ /*IN*/ KIRQL Irql
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoSetDeviceToVerify (
+ /*IN*/ PETHREAD Thread,
+ /*IN*/ PDEVICE_OBJECT DeviceObject
+);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoSetInformation (
+ /*IN*/ PFILE_OBJECT FileObject,
+ /*IN*/ FILE_INFORMATION_CLASS FileInformationClass,
+ /*IN*/ ULONG Length,
+ /*IN*/ PVOID FileInformation
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoSetTopLevelIrp (
+ /*IN*/ PIRP Irp
+);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoSynchronousPageWrite (
+ /*IN*/ PFILE_OBJECT FileObject,
+ /*IN*/ PMDL Mdl,
+ /*IN*/ PLARGE_INTEGER FileOffset,
+ /*IN*/ PKEVENT Event,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock
+);
+
+NTKERNELAPI
+PEPROCESS
+NTAPI
+IoThreadToProcess (
+ /*IN*/ PETHREAD Thread
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+IoUnregisterFileSystem (
+ /*IN OUT*/ PDEVICE_OBJECT DeviceObject
+);
+
+#if (VER_PRODUCTBUILD >= 1381)
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoUnregisterFsRegistrationChange (
+ /*IN*/ PDRIVER_OBJECT DriverObject,
+ /*IN*/ PDRIVER_FS_NOTIFICATION DriverNotificationRoutine
+);
+
+#endif /* (VER_PRODUCTBUILD >= 1381) */
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+IoVerifyVolume (
+ /*IN*/ PDEVICE_OBJECT DeviceObject,
+ /*IN*/ BOOLEAN AllowRawMount
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeAttachProcess (
+ /*IN*/ PEPROCESS Process
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeDetachProcess (
+ VOID
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeInitializeQueue (
+ /*IN*/ PRKQUEUE Queue,
+ /*IN*/ ULONG Count /*OPTIONAL*/
+);
+
+NTKERNELAPI
+LONG
+NTAPI
+KeInsertHeadQueue (
+ /*IN*/ PRKQUEUE Queue,
+ /*IN*/ PLIST_ENTRY Entry
+);
+
+NTKERNELAPI
+LONG
+NTAPI
+KeInsertQueue (
+ /*IN*/ PRKQUEUE Queue,
+ /*IN*/ PLIST_ENTRY Entry
+);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+KeInsertQueueApc (
+ /*IN*/ PKAPC Apc,
+ /*IN*/ PVOID SystemArgument1,
+ /*IN*/ PVOID SystemArgument2,
+ /*IN*/ KPRIORITY PriorityBoost
+);
+
+NTKERNELAPI
+LONG
+NTAPI
+KeReadStateQueue (
+ /*IN*/ PRKQUEUE Queue
+);
+
+NTKERNELAPI
+PLIST_ENTRY
+NTAPI
+KeRemoveQueue (
+ /*IN*/ PRKQUEUE Queue,
+ /*IN*/ KPROCESSOR_MODE WaitMode,
+ /*IN*/ PLARGE_INTEGER Timeout /*OPTIONAL*/
+);
+
+NTKERNELAPI
+PLIST_ENTRY
+NTAPI
+KeRundownQueue (
+ /*IN*/ PRKQUEUE Queue
+);
+
+#if (VER_PRODUCTBUILD >= 2195)
+
+NTKERNELAPI
+VOID
+NTAPI
+KeStackAttachProcess (
+ /*IN*/ PKPROCESS Process,
+ /*OUT*/ PKAPC_STATE ApcState
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+KeUnstackDetachProcess (
+ /*IN*/ PKAPC_STATE ApcState
+);
+
+#endif /* (VER_PRODUCTBUILD >= 2195) */
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+MmCanFileBeTruncated (
+ /*IN*/ PSECTION_OBJECT_POINTERS SectionObjectPointer,
+ /*IN*/ PLARGE_INTEGER NewFileSize
+);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+MmFlushImageSection (
+ /*IN*/ PSECTION_OBJECT_POINTERS SectionObjectPointer,
+ /*IN*/ MMFLUSH_TYPE FlushType
+);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+MmForceSectionClosed (
+ /*IN*/ PSECTION_OBJECT_POINTERS SectionObjectPointer,
+ /*IN*/ BOOLEAN DelayClose
+);
+
+#if (VER_PRODUCTBUILD >= 1381)
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+MmIsRecursiveIoFault (
+ VOID
+);
+
+#else
+
+#define MmIsRecursiveIoFault() ( \
+ (PsGetCurrentThread()->DisablePageFaultClustering) | \
+ (PsGetCurrentThread()->ForwardClusterOnly) \
+)
+
+#endif
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+MmMapViewOfSection (
+ /*IN*/ PVOID SectionObject,
+ /*IN*/ PEPROCESS Process,
+ /*IN OUT*/ PVOID *BaseAddress,
+ /*IN*/ ULONG ZeroBits,
+ /*IN*/ ULONG CommitSize,
+ /*IN OUT*/ PLARGE_INTEGER SectionOffset /*OPTIONAL*/,
+ /*IN OUT*/ PULONG ViewSize,
+ /*IN*/ SECTION_INHERIT InheritDisposition,
+ /*IN*/ ULONG AllocationType,
+ /*IN*/ ULONG Protect
+);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+MmSetAddressRangeModified (
+ /*IN*/ PVOID Address,
+ /*IN*/ ULONG Length
+);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+ObCreateObject (
+ /*IN*/ KPROCESSOR_MODE ObjectAttributesAccessMode /*OPTIONAL*/,
+ /*IN*/ POBJECT_TYPE ObjectType,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes /*OPTIONAL*/,
+ /*IN*/ KPROCESSOR_MODE AccessMode,
+ /*IN OUT*/ PVOID ParseContext /*OPTIONAL*/,
+ /*IN*/ ULONG ObjectSize,
+ /*IN*/ ULONG PagedPoolCharge /*OPTIONAL*/,
+ /*IN*/ ULONG NonPagedPoolCharge /*OPTIONAL*/,
+ /*OUT*/ PVOID *Object
+);
+
+NTKERNELAPI
+ULONG
+NTAPI
+ObGetObjectPointerCount (
+ /*IN*/ PVOID Object
+);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+ObInsertObject (
+ /*IN*/ PVOID Object,
+ /*IN*/ PACCESS_STATE PassedAccessState /*OPTIONAL*/,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ ULONG AdditionalReferences,
+ /*OUT*/ PVOID *ReferencedObject /*OPTIONAL*/,
+ /*OUT*/ PHANDLE Handle
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+ObMakeTemporaryObject (
+ /*IN*/ PVOID Object
+);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+ObOpenObjectByPointer (
+ /*IN*/ PVOID Object,
+ /*IN*/ ULONG HandleAttributes,
+ /*IN*/ PACCESS_STATE PassedAccessState /*OPTIONAL*/,
+ /*IN*/ ACCESS_MASK DesiredAccess /*OPTIONAL*/,
+ /*IN*/ POBJECT_TYPE ObjectType /*OPTIONAL*/,
+ /*IN*/ KPROCESSOR_MODE AccessMode,
+ /*OUT*/ PHANDLE Handle
+);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+ObQueryNameString (
+ /*IN*/ PVOID Object,
+ /*OUT*/ POBJECT_NAME_INFORMATION ObjectNameInfo,
+ /*IN*/ ULONG Length,
+ /*OUT*/ PULONG ReturnLength
+);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+ObQueryObjectAuditingByHandle (
+ /*IN*/ HANDLE Handle,
+ /*OUT*/ PBOOLEAN GenerateOnClose
+);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+ObReferenceObjectByName (
+ /*IN*/ PUNICODE_STRING ObjectName,
+ /*IN*/ ULONG Attributes,
+ /*IN*/ PACCESS_STATE PassedAccessState /*OPTIONAL*/,
+ /*IN*/ ACCESS_MASK DesiredAccess /*OPTIONAL*/,
+ /*IN*/ POBJECT_TYPE ObjectType,
+ /*IN*/ KPROCESSOR_MODE AccessMode,
+ /*IN OUT*/ PVOID ParseContext /*OPTIONAL*/,
+ /*OUT*/ PVOID *Object
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+PsChargePoolQuota (
+ /*IN*/ PEPROCESS Process,
+ /*IN*/ POOL_TYPE PoolType,
+ /*IN*/ ULONG Amount
+);
+
+#define PsDereferenceImpersonationToken(T) \
+ {if (ARGUMENT_PRESENT(T)) { \
+ (ObDereferenceObject((T))); \
+ } else { \
+ ; \
+ } \
+}
+
+#define PsDereferencePrimaryToken(T) (ObDereferenceObject((T)))
+
+NTKERNELAPI
+ULONGLONG
+NTAPI
+PsGetProcessExitTime (
+ VOID
+);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+PsIsThreadTerminating (
+ /*IN*/ PETHREAD Thread
+);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+PsLookupProcessByProcessId (
+ /*IN*/ PVOID ProcessId,
+ /*OUT*/ PEPROCESS *Process
+);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+PsLookupProcessThreadByCid (
+ /*IN*/ PCLIENT_ID Cid,
+ /*OUT*/ PEPROCESS *Process /*OPTIONAL*/,
+ /*OUT*/ PETHREAD *Thread
+);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+PsLookupThreadByThreadId (
+ /*IN*/ PVOID UniqueThreadId,
+ /*OUT*/ PETHREAD *Thread
+);
+
+NTKERNELAPI
+PACCESS_TOKEN
+NTAPI
+PsReferenceImpersonationToken (
+ /*IN*/ PETHREAD Thread,
+ /*OUT*/ PBOOLEAN CopyOnUse,
+ /*OUT*/ PBOOLEAN EffectiveOnly,
+ /*OUT*/ PSECURITY_IMPERSONATION_LEVEL Level
+);
+
+NTKERNELAPI
+HANDLE
+NTAPI
+PsReferencePrimaryToken (
+ /*IN*/ PEPROCESS Process
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+PsReturnPoolQuota (
+ /*IN*/ PEPROCESS Process,
+ /*IN*/ POOL_TYPE PoolType,
+ /*IN*/ ULONG Amount
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+PsRevertToSelf (
+ VOID
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlAbsoluteToSelfRelativeSD (
+ /*IN*/ PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor,
+ /*IN OUT*/ PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor,
+ /*IN*/ PULONG BufferLength
+);
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlAllocateHeap (
+ /*IN*/ HANDLE HeapHandle,
+ /*IN*/ ULONG Flags,
+ /*IN*/ ULONG Size
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlCompressBuffer (
+ /*IN*/ USHORT CompressionFormatAndEngine,
+ /*IN*/ PUCHAR UncompressedBuffer,
+ /*IN*/ ULONG UncompressedBufferSize,
+ /*OUT*/ PUCHAR CompressedBuffer,
+ /*IN*/ ULONG CompressedBufferSize,
+ /*IN*/ ULONG UncompressedChunkSize,
+ /*OUT*/ PULONG FinalCompressedSize,
+ /*IN*/ PVOID WorkSpace
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlCompressChunks (
+ /*IN*/ PUCHAR UncompressedBuffer,
+ /*IN*/ ULONG UncompressedBufferSize,
+ /*OUT*/ PUCHAR CompressedBuffer,
+ /*IN*/ ULONG CompressedBufferSize,
+ /*IN OUT*/ PCOMPRESSED_DATA_INFO CompressedDataInfo,
+ /*IN*/ ULONG CompressedDataInfoLength,
+ /*IN*/ PVOID WorkSpace
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlConvertSidToUnicodeString (
+ /*OUT*/ PUNICODE_STRING DestinationString,
+ /*IN*/ PSID Sid,
+ /*IN*/ BOOLEAN AllocateDestinationString
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlCopySid (
+ /*IN*/ ULONG Length,
+ /*IN*/ PSID Destination,
+ /*IN*/ PSID Source
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlDecompressBuffer (
+ /*IN*/ USHORT CompressionFormat,
+ /*OUT*/ PUCHAR UncompressedBuffer,
+ /*IN*/ ULONG UncompressedBufferSize,
+ /*IN*/ PUCHAR CompressedBuffer,
+ /*IN*/ ULONG CompressedBufferSize,
+ /*OUT*/ PULONG FinalUncompressedSize
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlDecompressChunks (
+ /*OUT*/ PUCHAR UncompressedBuffer,
+ /*IN*/ ULONG UncompressedBufferSize,
+ /*IN*/ PUCHAR CompressedBuffer,
+ /*IN*/ ULONG CompressedBufferSize,
+ /*IN*/ PUCHAR CompressedTail,
+ /*IN*/ ULONG CompressedTailSize,
+ /*IN*/ PCOMPRESSED_DATA_INFO CompressedDataInfo
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlDecompressFragment (
+ /*IN*/ USHORT CompressionFormat,
+ /*OUT*/ PUCHAR UncompressedFragment,
+ /*IN*/ ULONG UncompressedFragmentSize,
+ /*IN*/ PUCHAR CompressedBuffer,
+ /*IN*/ ULONG CompressedBufferSize,
+ /*IN*/ ULONG FragmentOffset,
+ /*OUT*/ PULONG FinalUncompressedSize,
+ /*IN*/ PVOID WorkSpace
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlDescribeChunk (
+ /*IN*/ USHORT CompressionFormat,
+ /*IN OUT*/ PUCHAR *CompressedBuffer,
+ /*IN*/ PUCHAR EndOfCompressedBufferPlus1,
+ /*OUT*/ PUCHAR *ChunkBuffer,
+ /*OUT*/ PULONG ChunkSize
+);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlEqualSid (
+ /*IN*/ PSID Sid1,
+ /*IN*/ PSID Sid2
+);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlFillMemoryUlong (
+ /*IN*/ PVOID Destination,
+ /*IN*/ ULONG Length,
+ /*IN*/ ULONG Fill
+);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlFreeHeap (
+ /*IN*/ HANDLE HeapHandle,
+ /*IN*/ ULONG Flags,
+ /*IN*/ PVOID P
+);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlGenerate8dot3Name (
+ /*IN*/ PUNICODE_STRING Name,
+ /*IN*/ BOOLEAN AllowExtendedCharacters,
+ /*IN OUT*/ PGENERATE_NAME_CONTEXT Context,
+ /*OUT*/ PUNICODE_STRING Name8dot3
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlGetCompressionWorkSpaceSize (
+ /*IN*/ USHORT CompressionFormatAndEngine,
+ /*OUT*/ PULONG CompressBufferWorkSpaceSize,
+ /*OUT*/ PULONG CompressFragmentWorkSpaceSize
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlGetDaclSecurityDescriptor (
+ /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor,
+ /*OUT*/ PBOOLEAN DaclPresent,
+ /*OUT*/ PACL *Dacl,
+ /*OUT*/ PBOOLEAN DaclDefaulted
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlGetGroupSecurityDescriptor (
+ /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor,
+ /*OUT*/ PSID *Group,
+ /*OUT*/ PBOOLEAN GroupDefaulted
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlGetOwnerSecurityDescriptor (
+ /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor,
+ /*OUT*/ PSID *Owner,
+ /*OUT*/ PBOOLEAN OwnerDefaulted
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlInitializeSid (
+ /*IN OUT*/ PSID Sid,
+ /*IN*/ PSID_IDENTIFIER_AUTHORITY IdentifierAuthority,
+ /*IN*/ UCHAR SubAuthorityCount
+);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlIsNameLegalDOS8Dot3 (
+ /*IN*/ PUNICODE_STRING UnicodeName,
+ /*IN*/ PANSI_STRING AnsiName,
+ PBOOLEAN Unknown
+);
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlLengthRequiredSid (
+ /*IN*/ UCHAR SubAuthorityCount
+);
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlLengthSid (
+ /*IN*/ PSID Sid
+);
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlNtStatusToDosError (
+ /*IN*/ NTSTATUS Status
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlReserveChunk (
+ /*IN*/ USHORT CompressionFormat,
+ /*IN OUT*/ PUCHAR *CompressedBuffer,
+ /*IN*/ PUCHAR EndOfCompressedBufferPlus1,
+ /*OUT*/ PUCHAR *ChunkBuffer,
+ /*IN*/ ULONG ChunkSize
+);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlSecondsSince1970ToTime (
+ /*IN*/ ULONG SecondsSince1970,
+ /*OUT*/ PLARGE_INTEGER Time
+);
+
+#if (VER_PRODUCTBUILD >= 2195)
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlSelfRelativeToAbsoluteSD (
+ /*IN*/ PSECURITY_DESCRIPTOR SelfRelativeSD,
+ /*OUT*/ PSECURITY_DESCRIPTOR AbsoluteSD,
+ /*IN*/ PULONG AbsoluteSDSize,
+ /*IN*/ PACL Dacl,
+ /*IN*/ PULONG DaclSize,
+ /*IN*/ PACL Sacl,
+ /*IN*/ PULONG SaclSize,
+ /*IN*/ PSID Owner,
+ /*IN*/ PULONG OwnerSize,
+ /*IN*/ PSID PrimaryGroup,
+ /*IN*/ PULONG PrimaryGroupSize
+);
+
+#endif /* (VER_PRODUCTBUILD >= 2195) */
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlSetGroupSecurityDescriptor (
+ /*IN OUT*/ PSECURITY_DESCRIPTOR SecurityDescriptor,
+ /*IN*/ PSID Group,
+ /*IN*/ BOOLEAN GroupDefaulted
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlSetOwnerSecurityDescriptor (
+ /*IN OUT*/ PSECURITY_DESCRIPTOR SecurityDescriptor,
+ /*IN*/ PSID Owner,
+ /*IN*/ BOOLEAN OwnerDefaulted
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlSetSaclSecurityDescriptor (
+ /*IN OUT*/ PSECURITY_DESCRIPTOR SecurityDescriptor,
+ /*IN*/ BOOLEAN SaclPresent,
+ /*IN*/ PACL Sacl,
+ /*IN*/ BOOLEAN SaclDefaulted
+);
+
+NTSYSAPI
+PUCHAR
+NTAPI
+RtlSubAuthorityCountSid (
+ /*IN*/ PSID Sid
+);
+
+NTSYSAPI
+PULONG
+NTAPI
+RtlSubAuthoritySid (
+ /*IN*/ PSID Sid,
+ /*IN*/ ULONG SubAuthority
+);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlValidSid (
+ /*IN*/ PSID Sid
+);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+SeAppendPrivileges (
+ PACCESS_STATE AccessState,
+ PPRIVILEGE_SET Privileges
+);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+SeAuditingFileEvents (
+ /*IN*/ BOOLEAN AccessGranted,
+ /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor
+);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+SeAuditingFileOrGlobalEvents (
+ /*IN*/ BOOLEAN AccessGranted,
+ /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor,
+ /*IN*/ PSECURITY_SUBJECT_CONTEXT SubjectContext
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+SeCaptureSubjectContext (
+ /*OUT*/ PSECURITY_SUBJECT_CONTEXT SubjectContext
+);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+SeCreateAccessState (
+ /*OUT*/ PACCESS_STATE AccessState,
+ /*IN*/ PVOID AuxData,
+ /*IN*/ ACCESS_MASK AccessMask,
+ /*IN*/ PGENERIC_MAPPING Mapping
+);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+SeCreateClientSecurity (
+ /*IN*/ PETHREAD Thread,
+ /*IN*/ PSECURITY_QUALITY_OF_SERVICE QualityOfService,
+ /*IN*/ BOOLEAN RemoteClient,
+ /*OUT*/ PSECURITY_CLIENT_CONTEXT ClientContext
+);
+
+#if (VER_PRODUCTBUILD >= 2195)
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+SeCreateClientSecurityFromSubjectContext (
+ /*IN*/ PSECURITY_SUBJECT_CONTEXT SubjectContext,
+ /*IN*/ PSECURITY_QUALITY_OF_SERVICE QualityOfService,
+ /*IN*/ BOOLEAN ServerIsRemote,
+ /*OUT*/ PSECURITY_CLIENT_CONTEXT ClientContext
+);
+
+#endif /* (VER_PRODUCTBUILD >= 2195) */
+
+#define SeDeleteClientSecurity(C) { \
+ if (SeTokenType((C)->ClientToken) == TokenPrimary) { \
+ PsDereferencePrimaryToken( (C)->ClientToken ); \
+ } else { \
+ PsDereferenceImpersonationToken( (C)->ClientToken ); \
+ } \
+}
+
+NTKERNELAPI
+VOID
+NTAPI
+SeDeleteObjectAuditAlarm (
+ /*IN*/ PVOID Object,
+ /*IN*/ HANDLE Handle
+);
+
+#define SeEnableAccessToExports() SeExports = *(PSE_EXPORTS *)SeExports;
+
+NTKERNELAPI
+VOID
+NTAPI
+SeFreePrivileges (
+ /*IN*/ PPRIVILEGE_SET Privileges
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+SeImpersonateClient (
+ /*IN*/ PSECURITY_CLIENT_CONTEXT ClientContext,
+ /*IN*/ PETHREAD ServerThread /*OPTIONAL*/
+);
+
+#if (VER_PRODUCTBUILD >= 2195)
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+SeImpersonateClientEx (
+ /*IN*/ PSECURITY_CLIENT_CONTEXT ClientContext,
+ /*IN*/ PETHREAD ServerThread /*OPTIONAL*/
+);
+
+#endif /* (VER_PRODUCTBUILD >= 2195) */
+
+NTKERNELAPI
+VOID
+NTAPI
+SeLockSubjectContext (
+ /*IN*/ PSECURITY_SUBJECT_CONTEXT SubjectContext
+);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+SeMarkLogonSessionForTerminationNotification (
+ /*IN*/ PLUID LogonId
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+SeOpenObjectAuditAlarm (
+ /*IN*/ PUNICODE_STRING ObjectTypeName,
+ /*IN*/ PVOID Object /*OPTIONAL*/,
+ /*IN*/ PUNICODE_STRING AbsoluteObjectName /*OPTIONAL*/,
+ /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor,
+ /*IN*/ PACCESS_STATE AccessState,
+ /*IN*/ BOOLEAN ObjectCreated,
+ /*IN*/ BOOLEAN AccessGranted,
+ /*IN*/ KPROCESSOR_MODE AccessMode,
+ /*OUT*/ PBOOLEAN GenerateOnClose
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+SeOpenObjectForDeleteAuditAlarm (
+ /*IN*/ PUNICODE_STRING ObjectTypeName,
+ /*IN*/ PVOID Object /*OPTIONAL*/,
+ /*IN*/ PUNICODE_STRING AbsoluteObjectName /*OPTIONAL*/,
+ /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor,
+ /*IN*/ PACCESS_STATE AccessState,
+ /*IN*/ BOOLEAN ObjectCreated,
+ /*IN*/ BOOLEAN AccessGranted,
+ /*IN*/ KPROCESSOR_MODE AccessMode,
+ /*OUT*/ PBOOLEAN GenerateOnClose
+);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+SePrivilegeCheck (
+ /*IN OUT*/ PPRIVILEGE_SET RequiredPrivileges,
+ /*IN*/ PSECURITY_SUBJECT_CONTEXT SubjectContext,
+ /*IN*/ KPROCESSOR_MODE AccessMode
+);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+SeQueryAuthenticationIdToken (
+ /*IN*/ PACCESS_TOKEN Token,
+ /*OUT*/ PLUID LogonId
+);
+
+#if (VER_PRODUCTBUILD >= 2195)
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+SeQueryInformationToken (
+ /*IN*/ PACCESS_TOKEN Token,
+ /*IN*/ TOKEN_INFORMATION_CLASS TokenInformationClass,
+ /*OUT*/ PVOID *TokenInformation
+);
+
+#endif /* (VER_PRODUCTBUILD >= 2195) */
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+SeQuerySecurityDescriptorInfo (
+ /*IN*/ PSECURITY_INFORMATION SecurityInformation,
+ /*OUT*/ PSECURITY_DESCRIPTOR SecurityDescriptor,
+ /*IN OUT*/ PULONG Length,
+ /*IN*/ PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor
+);
+
+#if (VER_PRODUCTBUILD >= 2195)
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+SeQuerySessionIdToken (
+ /*IN*/ PACCESS_TOKEN Token,
+ /*IN*/ PULONG SessionId
+);
+
+#endif /* (VER_PRODUCTBUILD >= 2195) */
+
+#define SeQuerySubjectContextToken( SubjectContext ) \
+ ( ARGUMENT_PRESENT( \
+ ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->ClientToken \
+ ) ? \
+ ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->ClientToken : \
+ ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->PrimaryToken )
+
+typedef NTSTATUS (*PSE_LOGON_SESSION_TERMINATED_ROUTINE) (
+ /*IN*/ PLUID LogonId
+);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+SeRegisterLogonSessionTerminatedRoutine (
+ /*IN*/ PSE_LOGON_SESSION_TERMINATED_ROUTINE CallbackRoutine
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+SeReleaseSubjectContext (
+ /*IN*/ PSECURITY_SUBJECT_CONTEXT SubjectContext
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+SeSetAccessStateGenericMapping (
+ PACCESS_STATE AccessState,
+ PGENERIC_MAPPING GenericMapping
+);
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+SeSetSecurityDescriptorInfo (
+ /*IN*/ PVOID Object /*OPTIONAL*/,
+ /*IN*/ PSECURITY_INFORMATION SecurityInformation,
+ /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor,
+ /*IN OUT*/ PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor,
+ /*IN*/ POOL_TYPE PoolType,
+ /*IN*/ PGENERIC_MAPPING GenericMapping
+);
+
+#if (VER_PRODUCTBUILD >= 2195)
+
+NTKERNELAPI
+NTSTATUS
+NTAPI
+SeSetSecurityDescriptorInfoEx (
+ /*IN*/ PVOID Object /*OPTIONAL*/,
+ /*IN*/ PSECURITY_INFORMATION SecurityInformation,
+ /*IN*/ PSECURITY_DESCRIPTOR ModificationDescriptor,
+ /*IN OUT*/ PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor,
+ /*IN*/ ULONG AutoInheritFlags,
+ /*IN*/ POOL_TYPE PoolType,
+ /*IN*/ PGENERIC_MAPPING GenericMapping
+);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+SeTokenIsAdmin (
+ /*IN*/ PACCESS_TOKEN Token
+);
+
+NTKERNELAPI
+BOOLEAN
+NTAPI
+SeTokenIsRestricted (
+ /*IN*/ PACCESS_TOKEN Token
+);
+
+#endif /* (VER_PRODUCTBUILD >= 2195) */
+
+NTKERNELAPI
+TOKEN_TYPE
+NTAPI
+SeTokenType (
+ /*IN*/ PACCESS_TOKEN Token
+);
+
+NTKERNELAPI
+VOID
+NTAPI
+SeUnlockSubjectContext (
+ /*IN*/ PSECURITY_SUBJECT_CONTEXT SubjectContext
+);
+
+NTKERNELAPI
+NTSTATUS
+SeUnregisterLogonSessionTerminatedRoutine (
+ /*IN*/ PSE_LOGON_SESSION_TERMINATED_ROUTINE CallbackRoutine
+);
+
+#if (VER_PRODUCTBUILD >= 2195)
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtAdjustPrivilegesToken (
+ /*IN*/ HANDLE TokenHandle,
+ /*IN*/ BOOLEAN DisableAllPrivileges,
+ /*IN*/ PTOKEN_PRIVILEGES NewState,
+ /*IN*/ ULONG BufferLength,
+ /*OUT*/ PTOKEN_PRIVILEGES PreviousState /*OPTIONAL*/,
+ /*OUT*/ PULONG ReturnLength
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwAdjustPrivilegesToken (
+ /*IN*/ HANDLE TokenHandle,
+ /*IN*/ BOOLEAN DisableAllPrivileges,
+ /*IN*/ PTOKEN_PRIVILEGES NewState,
+ /*IN*/ ULONG BufferLength,
+ /*OUT*/ PTOKEN_PRIVILEGES PreviousState /*OPTIONAL*/,
+ /*OUT*/ PULONG ReturnLength
+);
+
+#endif /* (VER_PRODUCTBUILD >= 2195) */
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtAlertThread (
+ /*IN*/ HANDLE ThreadHandle
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwAlertThread (
+ /*IN*/ HANDLE ThreadHandle
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtAllocateVirtualMemory (
+ /*IN*/ HANDLE ProcessHandle,
+ /*IN OUT*/ PVOID *BaseAddress,
+ /*IN*/ ULONG ZeroBits,
+ /*IN OUT*/ PULONG RegionSize,
+ /*IN*/ ULONG AllocationType,
+ /*IN*/ ULONG Protect
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwAllocateVirtualMemory (
+ /*IN*/ HANDLE ProcessHandle,
+ /*IN OUT*/ PVOID *BaseAddress,
+ /*IN*/ ULONG ZeroBits,
+ /*IN OUT*/ PULONG RegionSize,
+ /*IN*/ ULONG AllocationType,
+ /*IN*/ ULONG Protect
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtAccessCheckAndAuditAlarm (
+ /*IN*/ PUNICODE_STRING SubsystemName,
+ /*IN*/ PVOID HandleId,
+ /*IN*/ PUNICODE_STRING ObjectTypeName,
+ /*IN*/ PUNICODE_STRING ObjectName,
+ /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ PGENERIC_MAPPING GenericMapping,
+ /*IN*/ BOOLEAN ObjectCreation,
+ /*OUT*/ PACCESS_MASK GrantedAccess,
+ /*OUT*/ PBOOLEAN AccessStatus,
+ /*OUT*/ PBOOLEAN GenerateOnClose
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwAccessCheckAndAuditAlarm (
+ /*IN*/ PUNICODE_STRING SubsystemName,
+ /*IN*/ PVOID HandleId,
+ /*IN*/ PUNICODE_STRING ObjectTypeName,
+ /*IN*/ PUNICODE_STRING ObjectName,
+ /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ PGENERIC_MAPPING GenericMapping,
+ /*IN*/ BOOLEAN ObjectCreation,
+ /*OUT*/ PACCESS_MASK GrantedAccess,
+ /*OUT*/ PBOOLEAN AccessStatus,
+ /*OUT*/ PBOOLEAN GenerateOnClose
+);
+
+#if (VER_PRODUCTBUILD >= 2195)
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtCancelIoFile (
+ /*IN*/ HANDLE FileHandle,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwCancelIoFile (
+ /*IN*/ HANDLE FileHandle,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock
+);
+
+#endif /* (VER_PRODUCTBUILD >= 2195) */
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtClearEvent (
+ /*IN*/ HANDLE EventHandle
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwClearEvent (
+ /*IN*/ HANDLE EventHandle
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtCloseObjectAuditAlarm (
+ /*IN*/ PUNICODE_STRING SubsystemName,
+ /*IN*/ PVOID HandleId,
+ /*IN*/ BOOLEAN GenerateOnClose
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwCloseObjectAuditAlarm (
+ /*IN*/ PUNICODE_STRING SubsystemName,
+ /*IN*/ PVOID HandleId,
+ /*IN*/ BOOLEAN GenerateOnClose
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtCreateSection (
+ /*OUT*/ PHANDLE SectionHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes /*OPTIONAL*/,
+ /*IN*/ PLARGE_INTEGER MaximumSize /*OPTIONAL*/,
+ /*IN*/ ULONG SectionPageProtection,
+ /*IN*/ ULONG AllocationAttributes,
+ /*IN*/ HANDLE FileHandle /*OPTIONAL*/
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwCreateSection (
+ /*OUT*/ PHANDLE SectionHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes /*OPTIONAL*/,
+ /*IN*/ PLARGE_INTEGER MaximumSize /*OPTIONAL*/,
+ /*IN*/ ULONG SectionPageProtection,
+ /*IN*/ ULONG AllocationAttributes,
+ /*IN*/ HANDLE FileHandle /*OPTIONAL*/
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtCreateSymbolicLinkObject (
+ /*OUT*/ PHANDLE SymbolicLinkHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,
+ /*IN*/ PUNICODE_STRING TargetName
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwCreateSymbolicLinkObject (
+ /*OUT*/ PHANDLE SymbolicLinkHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,
+ /*IN*/ PUNICODE_STRING TargetName
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtDeleteFile (
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwDeleteFile (
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtDeleteValueKey (
+ /*IN*/ HANDLE Handle,
+ /*IN*/ PUNICODE_STRING Name
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwDeleteValueKey (
+ /*IN*/ HANDLE Handle,
+ /*IN*/ PUNICODE_STRING Name
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtDeviceIoControlFile (
+ /*IN*/ HANDLE FileHandle,
+ /*IN*/ HANDLE Event /*OPTIONAL*/,
+ /*IN*/ PIO_APC_ROUTINE ApcRoutine /*OPTIONAL*/,
+ /*IN*/ PVOID ApcContext /*OPTIONAL*/,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock,
+ /*IN*/ ULONG IoControlCode,
+ /*IN*/ PVOID InputBuffer /*OPTIONAL*/,
+ /*IN*/ ULONG InputBufferLength,
+ /*OUT*/ PVOID OutputBuffer /*OPTIONAL*/,
+ /*IN*/ ULONG OutputBufferLength
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwDeviceIoControlFile (
+ /*IN*/ HANDLE FileHandle,
+ /*IN*/ HANDLE Event /*OPTIONAL*/,
+ /*IN*/ PIO_APC_ROUTINE ApcRoutine /*OPTIONAL*/,
+ /*IN*/ PVOID ApcContext /*OPTIONAL*/,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock,
+ /*IN*/ ULONG IoControlCode,
+ /*IN*/ PVOID InputBuffer /*OPTIONAL*/,
+ /*IN*/ ULONG InputBufferLength,
+ /*OUT*/ PVOID OutputBuffer /*OPTIONAL*/,
+ /*IN*/ ULONG OutputBufferLength
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtDisplayString (
+ /*IN*/ PUNICODE_STRING String
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwDisplayString (
+ /*IN*/ PUNICODE_STRING String
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtDuplicateObject (
+ /*IN*/ HANDLE SourceProcessHandle,
+ /*IN*/ HANDLE SourceHandle,
+ /*IN*/ HANDLE TargetProcessHandle /*OPTIONAL*/,
+ /*OUT*/ PHANDLE TargetHandle /*OPTIONAL*/,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ ULONG HandleAttributes,
+ /*IN*/ ULONG Options
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwDuplicateObject (
+ /*IN*/ HANDLE SourceProcessHandle,
+ /*IN*/ HANDLE SourceHandle,
+ /*IN*/ HANDLE TargetProcessHandle /*OPTIONAL*/,
+ /*OUT*/ PHANDLE TargetHandle /*OPTIONAL*/,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ ULONG HandleAttributes,
+ /*IN*/ ULONG Options
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtDuplicateToken (
+ /*IN*/ HANDLE ExistingTokenHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,
+ /*IN*/ BOOLEAN EffectiveOnly,
+ /*IN*/ TOKEN_TYPE TokenType,
+ /*OUT*/ PHANDLE NewTokenHandle
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwDuplicateToken (
+ /*IN*/ HANDLE ExistingTokenHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,
+ /*IN*/ BOOLEAN EffectiveOnly,
+ /*IN*/ TOKEN_TYPE TokenType,
+ /*OUT*/ PHANDLE NewTokenHandle
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtFlushInstructionCache (
+ /*IN*/ HANDLE ProcessHandle,
+ /*IN*/ PVOID BaseAddress /*OPTIONAL*/,
+ /*IN*/ ULONG FlushSize
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwFlushInstructionCache (
+ /*IN*/ HANDLE ProcessHandle,
+ /*IN*/ PVOID BaseAddress /*OPTIONAL*/,
+ /*IN*/ ULONG FlushSize
+);
+
+#if (VER_PRODUCTBUILD >= 2195)
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtFlushVirtualMemory (
+ /*IN*/ HANDLE ProcessHandle,
+ /*IN OUT*/ PVOID *BaseAddress,
+ /*IN OUT*/ PULONG FlushSize,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwFlushVirtualMemory (
+ /*IN*/ HANDLE ProcessHandle,
+ /*IN OUT*/ PVOID *BaseAddress,
+ /*IN OUT*/ PULONG FlushSize,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock
+);
+
+#endif /* (VER_PRODUCTBUILD >= 2195) */
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtFreeVirtualMemory (
+ /*IN*/ HANDLE ProcessHandle,
+ /*IN OUT*/ PVOID *BaseAddress,
+ /*IN OUT*/ PULONG RegionSize,
+ /*IN*/ ULONG FreeType
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwFreeVirtualMemory (
+ /*IN*/ HANDLE ProcessHandle,
+ /*IN OUT*/ PVOID *BaseAddress,
+ /*IN OUT*/ PULONG RegionSize,
+ /*IN*/ ULONG FreeType
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtFsControlFile (
+ /*IN*/ HANDLE FileHandle,
+ /*IN*/ HANDLE Event /*OPTIONAL*/,
+ /*IN*/ PIO_APC_ROUTINE ApcRoutine /*OPTIONAL*/,
+ /*IN*/ PVOID ApcContext /*OPTIONAL*/,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock,
+ /*IN*/ ULONG FsControlCode,
+ /*IN*/ PVOID InputBuffer /*OPTIONAL*/,
+ /*IN*/ ULONG InputBufferLength,
+ /*OUT*/ PVOID OutputBuffer /*OPTIONAL*/,
+ /*IN*/ ULONG OutputBufferLength
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwFsControlFile (
+ /*IN*/ HANDLE FileHandle,
+ /*IN*/ HANDLE Event /*OPTIONAL*/,
+ /*IN*/ PIO_APC_ROUTINE ApcRoutine /*OPTIONAL*/,
+ /*IN*/ PVOID ApcContext /*OPTIONAL*/,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock,
+ /*IN*/ ULONG FsControlCode,
+ /*IN*/ PVOID InputBuffer /*OPTIONAL*/,
+ /*IN*/ ULONG InputBufferLength,
+ /*OUT*/ PVOID OutputBuffer /*OPTIONAL*/,
+ /*IN*/ ULONG OutputBufferLength
+);
+
+#if (VER_PRODUCTBUILD >= 2195)
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtInitiatePowerAction (
+ /*IN*/ POWER_ACTION SystemAction,
+ /*IN*/ SYSTEM_POWER_STATE MinSystemState,
+ /*IN*/ ULONG Flags,
+ /*IN*/ BOOLEAN Asynchronous
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwInitiatePowerAction (
+ /*IN*/ POWER_ACTION SystemAction,
+ /*IN*/ SYSTEM_POWER_STATE MinSystemState,
+ /*IN*/ ULONG Flags,
+ /*IN*/ BOOLEAN Asynchronous
+);
+
+#endif /* (VER_PRODUCTBUILD >= 2195) */
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtLoadDriver (
+ /* "\\Registry\\Machine\\System\\CurrentControlSet\\Services\\<DriverName>" */
+ /*IN*/ PUNICODE_STRING RegistryPath
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwLoadDriver (
+ /* "\\Registry\\Machine\\System\\CurrentControlSet\\Services\\<DriverName>" */
+ /*IN*/ PUNICODE_STRING RegistryPath
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtLoadKey (
+ /*IN*/ POBJECT_ATTRIBUTES KeyObjectAttributes,
+ /*IN*/ POBJECT_ATTRIBUTES FileObjectAttributes
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwLoadKey (
+ /*IN*/ POBJECT_ATTRIBUTES KeyObjectAttributes,
+ /*IN*/ POBJECT_ATTRIBUTES FileObjectAttributes
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtNotifyChangeKey (
+ /*IN*/ HANDLE KeyHandle,
+ /*IN*/ HANDLE EventHandle /*OPTIONAL*/,
+ /*IN*/ PIO_APC_ROUTINE ApcRoutine /*OPTIONAL*/,
+ /*IN*/ PVOID ApcContext /*OPTIONAL*/,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock,
+ /*IN*/ ULONG NotifyFilter,
+ /*IN*/ BOOLEAN WatchSubtree,
+ /*IN*/ PVOID Buffer,
+ /*IN*/ ULONG BufferLength,
+ /*IN*/ BOOLEAN Asynchronous
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwNotifyChangeKey (
+ /*IN*/ HANDLE KeyHandle,
+ /*IN*/ HANDLE EventHandle /*OPTIONAL*/,
+ /*IN*/ PIO_APC_ROUTINE ApcRoutine /*OPTIONAL*/,
+ /*IN*/ PVOID ApcContext /*OPTIONAL*/,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock,
+ /*IN*/ ULONG NotifyFilter,
+ /*IN*/ BOOLEAN WatchSubtree,
+ /*IN*/ PVOID Buffer,
+ /*IN*/ ULONG BufferLength,
+ /*IN*/ BOOLEAN Asynchronous
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtOpenDirectoryObject (
+ /*OUT*/ PHANDLE DirectoryHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwOpenDirectoryObject (
+ /*OUT*/ PHANDLE DirectoryHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtOpenEvent (
+ /*OUT*/ PHANDLE EventHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwOpenEvent (
+ /*OUT*/ PHANDLE EventHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtOpenProcess (
+ /*OUT*/ PHANDLE ProcessHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,
+ /*IN*/ PCLIENT_ID ClientId /*OPTIONAL*/
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwOpenProcess (
+ /*OUT*/ PHANDLE ProcessHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,
+ /*IN*/ PCLIENT_ID ClientId /*OPTIONAL*/
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtOpenProcessToken (
+ /*IN*/ HANDLE ProcessHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*OUT*/ PHANDLE TokenHandle
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwOpenProcessToken (
+ /*IN*/ HANDLE ProcessHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*OUT*/ PHANDLE TokenHandle
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtOpenThread (
+ /*OUT*/ PHANDLE ThreadHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,
+ /*IN*/ PCLIENT_ID ClientId
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwOpenThread (
+ /*OUT*/ PHANDLE ThreadHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,
+ /*IN*/ PCLIENT_ID ClientId
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtOpenThreadToken (
+ /*IN*/ HANDLE ThreadHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ BOOLEAN OpenAsSelf,
+ /*OUT*/ PHANDLE TokenHandle
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwOpenThreadToken (
+ /*IN*/ HANDLE ThreadHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ BOOLEAN OpenAsSelf,
+ /*OUT*/ PHANDLE TokenHandle
+);
+
+#if (VER_PRODUCTBUILD >= 2195)
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtPowerInformation (
+ /*IN*/ POWER_INFORMATION_LEVEL PowerInformationLevel,
+ /*IN*/ PVOID InputBuffer /*OPTIONAL*/,
+ /*IN*/ ULONG InputBufferLength,
+ /*OUT*/ PVOID OutputBuffer /*OPTIONAL*/,
+ /*IN*/ ULONG OutputBufferLength
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwPowerInformation (
+ /*IN*/ POWER_INFORMATION_LEVEL PowerInformationLevel,
+ /*IN*/ PVOID InputBuffer /*OPTIONAL*/,
+ /*IN*/ ULONG InputBufferLength,
+ /*OUT*/ PVOID OutputBuffer /*OPTIONAL*/,
+ /*IN*/ ULONG OutputBufferLength
+);
+
+#endif /* (VER_PRODUCTBUILD >= 2195) */
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtPulseEvent (
+ /*IN*/ HANDLE EventHandle,
+ /*OUT*/ PULONG PreviousState /*OPTIONAL*/
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwPulseEvent (
+ /*IN*/ HANDLE EventHandle,
+ /*OUT*/ PULONG PreviousState /*OPTIONAL*/
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtQueryDefaultLocale (
+ /*IN*/ BOOLEAN ThreadOrSystem,
+ /*OUT*/ PLCID Locale
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwQueryDefaultLocale (
+ /*IN*/ BOOLEAN ThreadOrSystem,
+ /*OUT*/ PLCID Locale
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtQueryDirectoryFile (
+ /*IN*/ HANDLE FileHandle,
+ /*IN*/ HANDLE Event /*OPTIONAL*/,
+ /*IN*/ PIO_APC_ROUTINE ApcRoutine /*OPTIONAL*/,
+ /*IN*/ PVOID ApcContext /*OPTIONAL*/,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock,
+ /*OUT*/ PVOID FileInformation,
+ /*IN*/ ULONG Length,
+ /*IN*/ FILE_INFORMATION_CLASS FileInformationClass,
+ /*IN*/ BOOLEAN ReturnSingleEntry,
+ /*IN*/ PUNICODE_STRING FileName /*OPTIONAL*/,
+ /*IN*/ BOOLEAN RestartScan
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwQueryDirectoryFile (
+ /*IN*/ HANDLE FileHandle,
+ /*IN*/ HANDLE Event /*OPTIONAL*/,
+ /*IN*/ PIO_APC_ROUTINE ApcRoutine /*OPTIONAL*/,
+ /*IN*/ PVOID ApcContext /*OPTIONAL*/,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock,
+ /*OUT*/ PVOID FileInformation,
+ /*IN*/ ULONG Length,
+ /*IN*/ FILE_INFORMATION_CLASS FileInformationClass,
+ /*IN*/ BOOLEAN ReturnSingleEntry,
+ /*IN*/ PUNICODE_STRING FileName /*OPTIONAL*/,
+ /*IN*/ BOOLEAN RestartScan
+);
+
+#if (VER_PRODUCTBUILD >= 2195)
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtQueryDirectoryObject (
+ /*IN*/ HANDLE DirectoryHandle,
+ /*OUT*/ PVOID Buffer,
+ /*IN*/ ULONG Length,
+ /*IN*/ BOOLEAN ReturnSingleEntry,
+ /*IN*/ BOOLEAN RestartScan,
+ /*IN OUT*/ PULONG Context,
+ /*OUT*/ PULONG ReturnLength /*OPTIONAL*/
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwQueryDirectoryObject (
+ /*IN*/ HANDLE DirectoryHandle,
+ /*OUT*/ PVOID Buffer,
+ /*IN*/ ULONG Length,
+ /*IN*/ BOOLEAN ReturnSingleEntry,
+ /*IN*/ BOOLEAN RestartScan,
+ /*IN OUT*/ PULONG Context,
+ /*OUT*/ PULONG ReturnLength /*OPTIONAL*/
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtQueryEaFile (
+ /*IN*/ HANDLE FileHandle,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock,
+ /*OUT*/ PVOID Buffer,
+ /*IN*/ ULONG Length,
+ /*IN*/ BOOLEAN ReturnSingleEntry,
+ /*IN*/ PVOID EaList /*OPTIONAL*/,
+ /*IN*/ ULONG EaListLength,
+ /*IN*/ PULONG EaIndex /*OPTIONAL*/,
+ /*IN*/ BOOLEAN RestartScan
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwQueryEaFile (
+ /*IN*/ HANDLE FileHandle,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock,
+ /*OUT*/ PVOID Buffer,
+ /*IN*/ ULONG Length,
+ /*IN*/ BOOLEAN ReturnSingleEntry,
+ /*IN*/ PVOID EaList /*OPTIONAL*/,
+ /*IN*/ ULONG EaListLength,
+ /*IN*/ PULONG EaIndex /*OPTIONAL*/,
+ /*IN*/ BOOLEAN RestartScan
+);
+
+#endif /* (VER_PRODUCTBUILD >= 2195) */
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtQueryInformationProcess (
+ /*IN*/ HANDLE ProcessHandle,
+ /*IN*/ PROCESSINFOCLASS ProcessInformationClass,
+ /*OUT*/ PVOID ProcessInformation,
+ /*IN*/ ULONG ProcessInformationLength,
+ /*OUT*/ PULONG ReturnLength /*OPTIONAL*/
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwQueryInformationProcess (
+ /*IN*/ HANDLE ProcessHandle,
+ /*IN*/ PROCESSINFOCLASS ProcessInformationClass,
+ /*OUT*/ PVOID ProcessInformation,
+ /*IN*/ ULONG ProcessInformationLength,
+ /*OUT*/ PULONG ReturnLength /*OPTIONAL*/
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtQueryInformationToken (
+ /*IN*/ HANDLE TokenHandle,
+ /*IN*/ TOKEN_INFORMATION_CLASS TokenInformationClass,
+ /*OUT*/ PVOID TokenInformation,
+ /*IN*/ ULONG Length,
+ /*OUT*/ PULONG ResultLength
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwQueryInformationToken (
+ /*IN*/ HANDLE TokenHandle,
+ /*IN*/ TOKEN_INFORMATION_CLASS TokenInformationClass,
+ /*OUT*/ PVOID TokenInformation,
+ /*IN*/ ULONG Length,
+ /*OUT*/ PULONG ResultLength
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtQueryObject (
+ /*IN*/ HANDLE ObjectHandle,
+ /*IN*/ OBJECT_INFORMATION_CLASS ObjectInformationClass,
+ /*OUT*/ PVOID ObjectInformation,
+ /*IN*/ ULONG Length,
+ /*OUT*/ PULONG ResultLength
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwQueryObject (
+ /*IN*/ HANDLE ObjectHandle,
+ /*IN*/ OBJECT_INFORMATION_CLASS ObjectInformationClass,
+ /*OUT*/ PVOID ObjectInformation,
+ /*IN*/ ULONG Length,
+ /*OUT*/ PULONG ResultLength
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtQuerySection (
+ /*IN*/ HANDLE SectionHandle,
+ /*IN*/ SECTION_INFORMATION_CLASS SectionInformationClass,
+ /*OUT*/ PVOID SectionInformation,
+ /*IN*/ ULONG SectionInformationLength,
+ /*OUT*/ PULONG ResultLength /*OPTIONAL*/
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwQuerySection (
+ /*IN*/ HANDLE SectionHandle,
+ /*IN*/ SECTION_INFORMATION_CLASS SectionInformationClass,
+ /*OUT*/ PVOID SectionInformation,
+ /*IN*/ ULONG SectionInformationLength,
+ /*OUT*/ PULONG ResultLength /*OPTIONAL*/
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtQuerySecurityObject (
+ /*IN*/ HANDLE FileHandle,
+ /*IN*/ SECURITY_INFORMATION SecurityInformation,
+ /*OUT*/ PSECURITY_DESCRIPTOR SecurityDescriptor,
+ /*IN*/ ULONG Length,
+ /*OUT*/ PULONG ResultLength
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwQuerySecurityObject (
+ /*IN*/ HANDLE FileHandle,
+ /*IN*/ SECURITY_INFORMATION SecurityInformation,
+ /*OUT*/ PSECURITY_DESCRIPTOR SecurityDescriptor,
+ /*IN*/ ULONG Length,
+ /*OUT*/ PULONG ResultLength
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtQuerySystemInformation (
+ /*IN*/ SYSTEM_INFORMATION_CLASS SystemInformationClass,
+ /*OUT*/ PVOID SystemInformation,
+ /*IN*/ ULONG Length,
+ /*OUT*/ PULONG ReturnLength
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwQuerySystemInformation (
+ /*IN*/ SYSTEM_INFORMATION_CLASS SystemInformationClass,
+ /*OUT*/ PVOID SystemInformation,
+ /*IN*/ ULONG Length,
+ /*OUT*/ PULONG ReturnLength
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtQueryVolumeInformationFile (
+ /*IN*/ HANDLE FileHandle,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock,
+ /*OUT*/ PVOID FsInformation,
+ /*IN*/ ULONG Length,
+ /*IN*/ FS_INFORMATION_CLASS FsInformationClass
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwQueryVolumeInformationFile (
+ /*IN*/ HANDLE FileHandle,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock,
+ /*OUT*/ PVOID FsInformation,
+ /*IN*/ ULONG Length,
+ /*IN*/ FS_INFORMATION_CLASS FsInformationClass
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtReplaceKey (
+ /*IN*/ POBJECT_ATTRIBUTES NewFileObjectAttributes,
+ /*IN*/ HANDLE KeyHandle,
+ /*IN*/ POBJECT_ATTRIBUTES OldFileObjectAttributes
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwReplaceKey (
+ /*IN*/ POBJECT_ATTRIBUTES NewFileObjectAttributes,
+ /*IN*/ HANDLE KeyHandle,
+ /*IN*/ POBJECT_ATTRIBUTES OldFileObjectAttributes
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtResetEvent (
+ /*IN*/ HANDLE EventHandle,
+ /*OUT*/ PULONG PreviousState /*OPTIONAL*/
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwResetEvent (
+ /*IN*/ HANDLE EventHandle,
+ /*OUT*/ PULONG PreviousState /*OPTIONAL*/
+);
+
+#if (VER_PRODUCTBUILD >= 2195)
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtRestoreKey (
+ /*IN*/ HANDLE KeyHandle,
+ /*IN*/ HANDLE FileHandle,
+ /*IN*/ ULONG Flags
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwRestoreKey (
+ /*IN*/ HANDLE KeyHandle,
+ /*IN*/ HANDLE FileHandle,
+ /*IN*/ ULONG Flags
+);
+
+#endif /* (VER_PRODUCTBUILD >= 2195) */
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtSaveKey (
+ /*IN*/ HANDLE KeyHandle,
+ /*IN*/ HANDLE FileHandle
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwSaveKey (
+ /*IN*/ HANDLE KeyHandle,
+ /*IN*/ HANDLE FileHandle
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtSetDefaultLocale (
+ /*IN*/ BOOLEAN ThreadOrSystem,
+ /*IN*/ LCID Locale
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwSetDefaultLocale (
+ /*IN*/ BOOLEAN ThreadOrSystem,
+ /*IN*/ LCID Locale
+);
+
+#if (VER_PRODUCTBUILD >= 2195)
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtSetDefaultUILanguage (
+ /*IN*/ LANGID LanguageId
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwSetDefaultUILanguage (
+ /*IN*/ LANGID LanguageId
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtSetEaFile (
+ /*IN*/ HANDLE FileHandle,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock,
+ /*OUT*/ PVOID Buffer,
+ /*IN*/ ULONG Length
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwSetEaFile (
+ /*IN*/ HANDLE FileHandle,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock,
+ /*OUT*/ PVOID Buffer,
+ /*IN*/ ULONG Length
+);
+
+#endif /* (VER_PRODUCTBUILD >= 2195) */
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtSetEvent (
+ /*IN*/ HANDLE EventHandle,
+ /*OUT*/ PULONG PreviousState /*OPTIONAL*/
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwSetEvent (
+ /*IN*/ HANDLE EventHandle,
+ /*OUT*/ PULONG PreviousState /*OPTIONAL*/
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtSetInformationObject (
+ /*IN*/ HANDLE ObjectHandle,
+ /*IN*/ OBJECT_INFORMATION_CLASS ObjectInformationClass,
+ /*IN*/ PVOID ObjectInformation,
+ /*IN*/ ULONG ObjectInformationLength
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwSetInformationObject (
+ /*IN*/ HANDLE ObjectHandle,
+ /*IN*/ OBJECT_INFORMATION_CLASS ObjectInformationClass,
+ /*IN*/ PVOID ObjectInformation,
+ /*IN*/ ULONG ObjectInformationLength
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtSetInformationProcess (
+ /*IN*/ HANDLE ProcessHandle,
+ /*IN*/ PROCESSINFOCLASS ProcessInformationClass,
+ /*IN*/ PVOID ProcessInformation,
+ /*IN*/ ULONG ProcessInformationLength
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwSetInformationProcess (
+ /*IN*/ HANDLE ProcessHandle,
+ /*IN*/ PROCESSINFOCLASS ProcessInformationClass,
+ /*IN*/ PVOID ProcessInformation,
+ /*IN*/ ULONG ProcessInformationLength
+);
+
+#if (VER_PRODUCTBUILD >= 2195)
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtSetSecurityObject (
+ /*IN*/ HANDLE Handle,
+ /*IN*/ SECURITY_INFORMATION SecurityInformation,
+ /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwSetSecurityObject (
+ /*IN*/ HANDLE Handle,
+ /*IN*/ SECURITY_INFORMATION SecurityInformation,
+ /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor
+);
+
+#endif /* (VER_PRODUCTBUILD >= 2195) */
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtSetSystemInformation (
+ /*IN*/ SYSTEM_INFORMATION_CLASS SystemInformationClass,
+ /*IN*/ PVOID SystemInformation,
+ /*IN*/ ULONG Length
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwSetSystemInformation (
+ /*IN*/ SYSTEM_INFORMATION_CLASS SystemInformationClass,
+ /*IN*/ PVOID SystemInformation,
+ /*IN*/ ULONG Length
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtSetSystemTime (
+ /*IN*/ PLARGE_INTEGER NewTime,
+ /*OUT*/ PLARGE_INTEGER OldTime /*OPTIONAL*/
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwSetSystemTime (
+ /*IN*/ PLARGE_INTEGER NewTime,
+ /*OUT*/ PLARGE_INTEGER OldTime /*OPTIONAL*/
+);
+
+#if (VER_PRODUCTBUILD >= 2195)
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtSetVolumeInformationFile (
+ /*IN*/ HANDLE FileHandle,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock,
+ /*IN*/ PVOID FsInformation,
+ /*IN*/ ULONG Length,
+ /*IN*/ FS_INFORMATION_CLASS FsInformationClass
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwSetVolumeInformationFile (
+ /*IN*/ HANDLE FileHandle,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock,
+ /*IN*/ PVOID FsInformation,
+ /*IN*/ ULONG Length,
+ /*IN*/ FS_INFORMATION_CLASS FsInformationClass
+);
+
+#endif /* (VER_PRODUCTBUILD >= 2195) */
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtTerminateProcess (
+ /*IN*/ HANDLE ProcessHandle /*OPTIONAL*/,
+ /*IN*/ NTSTATUS ExitStatus
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwTerminateProcess (
+ /*IN*/ HANDLE ProcessHandle /*OPTIONAL*/,
+ /*IN*/ NTSTATUS ExitStatus
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtUnloadDriver (
+ /* "\\Registry\\Machine\\System\\CurrentControlSet\\Services\\<DriverName>" */
+ /*IN*/ PUNICODE_STRING RegistryPath
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwUnloadDriver (
+ /* "\\Registry\\Machine\\System\\CurrentControlSet\\Services\\<DriverName>" */
+ /*IN*/ PUNICODE_STRING RegistryPath
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtUnloadKey (
+ /*IN*/ POBJECT_ATTRIBUTES KeyObjectAttributes
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwUnloadKey (
+ /*IN*/ POBJECT_ATTRIBUTES KeyObjectAttributes
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtWaitForSingleObject (
+ /*IN*/ HANDLE Handle,
+ /*IN*/ BOOLEAN Alertable,
+ /*IN*/ PLARGE_INTEGER Timeout /*OPTIONAL*/
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwWaitForSingleObject (
+ /*IN*/ HANDLE Handle,
+ /*IN*/ BOOLEAN Alertable,
+ /*IN*/ PLARGE_INTEGER Timeout /*OPTIONAL*/
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtWaitForMultipleObjects (
+ /*IN*/ ULONG HandleCount,
+ /*IN*/ PHANDLE Handles,
+ /*IN*/ WAIT_TYPE WaitType,
+ /*IN*/ BOOLEAN Alertable,
+ /*IN*/ PLARGE_INTEGER Timeout /*OPTIONAL*/
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwWaitForMultipleObjects (
+ /*IN*/ ULONG HandleCount,
+ /*IN*/ PHANDLE Handles,
+ /*IN*/ WAIT_TYPE WaitType,
+ /*IN*/ BOOLEAN Alertable,
+ /*IN*/ PLARGE_INTEGER Timeout /*OPTIONAL*/
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtYieldExecution (
+ VOID
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwYieldExecution (
+ VOID
+);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _NTIFS_ */
diff --git a/tcc/include/winapi/ddk/ntpoapi.h b/tcc/include/winapi/ddk/ntpoapi.h
new file mode 100644
index 0000000..5173c65
--- /dev/null
+++ b/tcc/include/winapi/ddk/ntpoapi.h
@@ -0,0 +1,229 @@
+/*
+ * ntpoapi.h
+ *
+ * APIs for power management.
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __NTPOAPI_H
+#define __NTPOAPI_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+#include "batclass.h"
+
+#define POWER_PERF_SCALE 100
+#define PERF_LEVEL_TO_PERCENT(x) (((x) * 1000) / (POWER_PERF_SCALE * 10))
+#define PERCENT_TO_PERF_LEVEL(x) (((x) * POWER_PERF_SCALE * 10) / 1000)
+
+typedef struct _PROCESSOR_IDLE_TIMES {
+ ULONGLONG StartTime;
+ ULONGLONG EndTime;
+ ULONG IdleHandlerReserved[4];
+} PROCESSOR_IDLE_TIMES, *PPROCESSOR_IDLE_TIMES;
+
+typedef BOOLEAN DDKFASTAPI
+(*PPROCESSOR_IDLE_HANDLER)(
+ /*IN OUT*/ PPROCESSOR_IDLE_TIMES IdleTimes);
+
+typedef struct _PROCESSOR_IDLE_HANDLER_INFO {
+ ULONG HardwareLatency;
+ PPROCESSOR_IDLE_HANDLER Handler;
+} PROCESSOR_IDLE_HANDLER_INFO, *PPROCESSOR_IDLE_HANDLER_INFO;
+
+typedef VOID DDKFASTAPI
+(*PSET_PROCESSOR_THROTTLE)(
+ /*IN*/ UCHAR Throttle);
+
+typedef NTSTATUS DDKFASTAPI
+(*PSET_PROCESSOR_THROTTLE2)(
+ /*IN*/ UCHAR Throttle);
+
+#define MAX_IDLE_HANDLERS 3
+
+typedef struct _PROCESSOR_STATE_HANDLER {
+ UCHAR ThrottleScale;
+ BOOLEAN ThrottleOnIdle;
+ PSET_PROCESSOR_THROTTLE SetThrottle;
+ ULONG NumIdleHandlers;
+ PROCESSOR_IDLE_HANDLER_INFO IdleHandler[MAX_IDLE_HANDLERS];
+} PROCESSOR_STATE_HANDLER, *PPROCESSOR_STATE_HANDLER;
+
+typedef enum _POWER_STATE_HANDLER_TYPE {
+ PowerStateSleeping1,
+ PowerStateSleeping2,
+ PowerStateSleeping3,
+ PowerStateSleeping4,
+ PowerStateSleeping4Firmware,
+ PowerStateShutdownReset,
+ PowerStateShutdownOff,
+ PowerStateMaximum
+} POWER_STATE_HANDLER_TYPE, *PPOWER_STATE_HANDLER_TYPE;
+
+typedef NTSTATUS DDKAPI
+(*PENTER_STATE_SYSTEM_HANDLER)(
+ /*IN*/ PVOID SystemContext);
+
+typedef NTSTATUS DDKAPI
+(*PENTER_STATE_HANDLER)(
+ /*IN*/ PVOID Context,
+ /*IN*/ PENTER_STATE_SYSTEM_HANDLER SystemHandler /*OPTIONAL*/,
+ /*IN*/ PVOID SystemContext,
+ /*IN*/ LONG NumberProcessors,
+ /*IN*/ VOLATILE PLONG Number);
+
+typedef struct _POWER_STATE_HANDLER {
+ POWER_STATE_HANDLER_TYPE Type;
+ BOOLEAN RtcWake;
+ UCHAR Spare[3];
+ PENTER_STATE_HANDLER Handler;
+ PVOID Context;
+} POWER_STATE_HANDLER, *PPOWER_STATE_HANDLER;
+
+typedef NTSTATUS STDCALL
+(*PENTER_STATE_NOTIFY_HANDLER)(
+ /*IN*/ POWER_STATE_HANDLER_TYPE State,
+ /*IN*/ PVOID Context,
+ /*IN*/ BOOLEAN Entering);
+
+typedef struct _POWER_STATE_NOTIFY_HANDLER {
+ PENTER_STATE_NOTIFY_HANDLER Handler;
+ PVOID Context;
+} POWER_STATE_NOTIFY_HANDLER, *PPOWER_STATE_NOTIFY_HANDLER;
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+NtPowerInformation(
+ /*IN*/ POWER_INFORMATION_LEVEL InformationLevel,
+ /*IN*/ PVOID InputBuffer /*OPTIONAL*/,
+ /*IN*/ ULONG InputBufferLength,
+ /*OUT*/ PVOID OutputBuffer /*OPTIONAL*/,
+ /*IN*/ ULONG OutputBufferLength);
+
+#define PROCESSOR_STATE_TYPE_PERFORMANCE 1
+#define PROCESSOR_STATE_TYPE_THROTTLE 2
+
+typedef struct _PROCESSOR_PERF_LEVEL {
+ UCHAR PercentFrequency;
+ UCHAR Reserved;
+ USHORT Flags;
+} PROCESSOR_PERF_LEVEL, *PPROCESSOR_PERF_LEVEL;
+
+typedef struct _PROCESSOR_PERF_STATE {
+ UCHAR PercentFrequency;
+ UCHAR MinCapacity;
+ USHORT Power;
+ UCHAR IncreaseLevel;
+ UCHAR DecreaseLevel;
+ USHORT Flags;
+ ULONG IncreaseTime;
+ ULONG DecreaseTime;
+ ULONG IncreaseCount;
+ ULONG DecreaseCount;
+ ULONGLONG PerformanceTime;
+} PROCESSOR_PERF_STATE, *PPROCESSOR_PERF_STATE;
+
+typedef struct _PROCESSOR_STATE_HANDLER2 {
+ ULONG NumIdleHandlers;
+ PROCESSOR_IDLE_HANDLER_INFO IdleHandler[MAX_IDLE_HANDLERS];
+ PSET_PROCESSOR_THROTTLE2 SetPerfLevel;
+ ULONG HardwareLatency;
+ UCHAR NumPerfStates;
+ PROCESSOR_PERF_LEVEL PerfLevel[1];
+} PROCESSOR_STATE_HANDLER2, *PPROCESSOR_STATE_HANDLER2;
+
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+NtSetThreadExecutionState(
+ /*IN*/ EXECUTION_STATE esFlags,
+ /*OUT*/ EXECUTION_STATE *PreviousFlags);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+NtRequestWakeupLatency(
+ /*IN*/ LATENCY_TIME latency);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+NtInitiatePowerAction(
+ /*IN*/ POWER_ACTION SystemAction,
+ /*IN*/ SYSTEM_POWER_STATE MinSystemState,
+ /*IN*/ ULONG Flags,
+ /*IN*/ BOOLEAN Asynchronous);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+NtSetSystemPowerState(
+ /*IN*/ POWER_ACTION SystemAction,
+ /*IN*/ SYSTEM_POWER_STATE MinSystemState,
+ /*IN*/ ULONG Flags);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+NtGetDevicePowerState(
+ /*IN*/ HANDLE Device,
+ /*OUT*/ DEVICE_POWER_STATE *State);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+NtCancelDeviceWakeupRequest(
+ /*IN*/ HANDLE Device);
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+NtIsSystemResumeAutomatic(
+ VOID);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+NtRequestDeviceWakeup(
+ /*IN*/ HANDLE Device);
+
+#define WINLOGON_LOCK_ON_SLEEP 0x00000001
+
+typedef struct _PROCESSOR_POWER_INFORMATION {
+ ULONG Number;
+ ULONG MaxMhz;
+ ULONG CurrentMhz;
+ ULONG MhzLimit;
+ ULONG MaxIdleState;
+ ULONG CurrentIdleState;
+} PROCESSOR_POWER_INFORMATION, *PPROCESSOR_POWER_INFORMATION;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __NTPOAPI_H */
diff --git a/tcc/include/winapi/ddk/ntstatus.h b/tcc/include/winapi/ddk/ntstatus.h
new file mode 100644
index 0000000..d325d9f
--- /dev/null
+++ b/tcc/include/winapi/ddk/ntstatus.h
@@ -0,0 +1,1105 @@
+/*
+ * ntstatus.h
+ *
+ * Windows NT status codes
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef _NTSTATUS_H
+#define _NTSTATUS_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if !defined(STATUS_SUCCESS)
+#define STATUS_SUCCESS ((NTSTATUS)0x00000000L)
+#endif /* !STATUS_SUCCESS */
+#define FACILITY_DEBUGGER 0x1
+#define FACILITY_RPC_RUNTIME 0x2
+#define FACILITY_RPC_STUBS 0x3
+#define FACILITY_IO_ERROR_CODE 0x4
+#define FACILITY_TERMINAL_SERVER 0xA
+#define FACILITY_USB_ERROR_CODE 0x10
+#define FACILITY_HID_ERROR_CODE 0x11
+#define FACILITY_FIREWIRE_ERROR_CODE 0x12
+#define FACILITY_CLUSTER_ERROR_CODE 0x13
+#define FACILITY_ACPI_ERROR_CODE 0x14
+#define FACILITY_SXS_ERROR_CODE 0x15
+#define STATUS_SEVERITY_SUCCESS 0x0
+#define STATUS_SEVERITY_INFORMATIONAL 0x1
+#define STATUS_SEVERITY_WARNING 0x2
+#define STATUS_SEVERITY_ERROR 0x3
+#define STATUS_WAIT_0 ((NTSTATUS)0x00000000L)
+#define STATUS_WAIT_1 ((NTSTATUS)0x00000001L)
+#define STATUS_WAIT_2 ((NTSTATUS)0x00000002L)
+#define STATUS_WAIT_3 ((NTSTATUS)0x00000003L)
+#define STATUS_WAIT_63 ((NTSTATUS)0x0000003FL)
+#define STATUS_ABANDONED ((NTSTATUS)0x00000080L)
+#define STATUS_ABANDONED_WAIT_0 ((NTSTATUS)0x00000080L)
+#define STATUS_ABANDONED_WAIT_63 ((NTSTATUS)0x000000BFL)
+#define STATUS_USER_APC ((NTSTATUS)0x000000C0L)
+#define STATUS_KERNEL_APC ((NTSTATUS)0x00000100L)
+#define STATUS_ALERTED ((NTSTATUS)0x00000101L)
+#define STATUS_TIMEOUT ((NTSTATUS)0x00000102L)
+#define STATUS_PENDING ((NTSTATUS)0x00000103L)
+#define STATUS_REPARSE ((NTSTATUS)0x00000104L)
+#define STATUS_MORE_ENTRIES ((NTSTATUS)0x00000105L)
+#define STATUS_NOT_ALL_ASSIGNED ((NTSTATUS)0x00000106L)
+#define STATUS_SOME_NOT_MAPPED ((NTSTATUS)0x00000107L)
+#define STATUS_OPLOCK_BREAK_IN_PROGRESS ((NTSTATUS)0x00000108L)
+#define STATUS_VOLUME_MOUNTED ((NTSTATUS)0x00000109L)
+#define STATUS_RXACT_COMMITTED ((NTSTATUS)0x0000010AL)
+#define STATUS_NOTIFY_CLEANUP ((NTSTATUS)0x0000010BL)
+#define STATUS_NOTIFY_ENUM_DIR ((NTSTATUS)0x0000010CL)
+#define STATUS_NO_QUOTAS_FOR_ACCOUNT ((NTSTATUS)0x0000010DL)
+#define STATUS_PRIMARY_TRANSPORT_CONNECT_FAILED ((NTSTATUS)0x0000010EL)
+#define STATUS_PAGE_FAULT_TRANSITION ((NTSTATUS)0x00000110L)
+#define STATUS_PAGE_FAULT_DEMAND_ZERO ((NTSTATUS)0x00000111L)
+#define STATUS_PAGE_FAULT_COPY_ON_WRITE ((NTSTATUS)0x00000112L)
+#define STATUS_PAGE_FAULT_GUARD_PAGE ((NTSTATUS)0x00000113L)
+#define STATUS_PAGE_FAULT_PAGING_FILE ((NTSTATUS)0x00000114L)
+#define STATUS_CACHE_PAGE_LOCKED ((NTSTATUS)0x00000115L)
+#define STATUS_CRASH_DUMP ((NTSTATUS)0x00000116L)
+#define STATUS_BUFFER_ALL_ZEROS ((NTSTATUS)0x00000117L)
+#define STATUS_REPARSE_OBJECT ((NTSTATUS)0x00000118L)
+#define STATUS_RESOURCE_REQUIREMENTS_CHANGED ((NTSTATUS)0x00000119L)
+#define STATUS_TRANSLATION_COMPLETE ((NTSTATUS)0x00000120L)
+#define STATUS_DS_MEMBERSHIP_EVALUATED_LOCALLY ((NTSTATUS)0x00000121L)
+#define STATUS_NOTHING_TO_TERMINATE ((NTSTATUS)0x00000122L)
+#define STATUS_PROCESS_NOT_IN_JOB ((NTSTATUS)0x00000123L)
+#define STATUS_PROCESS_IN_JOB ((NTSTATUS)0x00000124L)
+#define STATUS_OBJECT_NAME_EXISTS ((NTSTATUS)0x40000000L)
+#define STATUS_THREAD_WAS_SUSPENDED ((NTSTATUS)0x40000001L)
+#define STATUS_WORKING_SET_LIMIT_RANGE ((NTSTATUS)0x40000002L)
+#define STATUS_IMAGE_NOT_AT_BASE ((NTSTATUS)0x40000003L)
+#define STATUS_RXACT_STATE_CREATED ((NTSTATUS)0x40000004L)
+#define STATUS_SEGMENT_NOTIFICATION ((NTSTATUS)0x40000005L)
+#define STATUS_LOCAL_USER_SESSION_KEY ((NTSTATUS)0x40000006L)
+#define STATUS_BAD_CURRENT_DIRECTORY ((NTSTATUS)0x40000007L)
+#define STATUS_SERIAL_MORE_WRITES ((NTSTATUS)0x40000008L)
+#define STATUS_REGISTRY_RECOVERED ((NTSTATUS)0x40000009L)
+#define STATUS_FT_READ_RECOVERY_FROM_BACKUP ((NTSTATUS)0x4000000AL)
+#define STATUS_FT_WRITE_RECOVERY ((NTSTATUS)0x4000000BL)
+#define STATUS_SERIAL_COUNTER_TIMEOUT ((NTSTATUS)0x4000000CL)
+#define STATUS_NULL_LM_PASSWORD ((NTSTATUS)0x4000000DL)
+#define STATUS_IMAGE_MACHINE_TYPE_MISMATCH ((NTSTATUS)0x4000000EL)
+#define STATUS_RECEIVE_PARTIAL ((NTSTATUS)0x4000000FL)
+#define STATUS_RECEIVE_EXPEDITED ((NTSTATUS)0x40000010L)
+#define STATUS_RECEIVE_PARTIAL_EXPEDITED ((NTSTATUS)0x40000011L)
+#define STATUS_EVENT_DONE ((NTSTATUS)0x40000012L)
+#define STATUS_EVENT_PENDING ((NTSTATUS)0x40000013L)
+#define STATUS_CHECKING_FILE_SYSTEM ((NTSTATUS)0x40000014L)
+#define STATUS_FATAL_APP_EXIT ((NTSTATUS)0x40000015L)
+#define STATUS_PREDEFINED_HANDLE ((NTSTATUS)0x40000016L)
+#define STATUS_WAS_UNLOCKED ((NTSTATUS)0x40000017L)
+#define STATUS_SERVICE_NOTIFICATION ((NTSTATUS)0x40000018L)
+#define STATUS_WAS_LOCKED ((NTSTATUS)0x40000019L)
+#define STATUS_LOG_HARD_ERROR ((NTSTATUS)0x4000001AL)
+#define STATUS_ALREADY_WIN32 ((NTSTATUS)0x4000001BL)
+#define STATUS_WX86_UNSIMULATE ((NTSTATUS)0x4000001CL)
+#define STATUS_WX86_CONTINUE ((NTSTATUS)0x4000001DL)
+#define STATUS_WX86_SINGLE_STEP ((NTSTATUS)0x4000001EL)
+#define STATUS_WX86_BREAKPOINT ((NTSTATUS)0x4000001FL)
+#define STATUS_WX86_EXCEPTION_CONTINUE ((NTSTATUS)0x40000020L)
+#define STATUS_WX86_EXCEPTION_LASTCHANCE ((NTSTATUS)0x40000021L)
+#define STATUS_WX86_EXCEPTION_CHAIN ((NTSTATUS)0x40000022L)
+#define STATUS_IMAGE_MACHINE_TYPE_MISMATCH_EXE ((NTSTATUS)0x40000023L)
+#define STATUS_NO_YIELD_PERFORMED ((NTSTATUS)0x40000024L)
+#define STATUS_TIMER_RESUME_IGNORED ((NTSTATUS)0x40000025L)
+#define STATUS_ARBITRATION_UNHANDLED ((NTSTATUS)0x40000026L)
+#define STATUS_CARDBUS_NOT_SUPPORTED ((NTSTATUS)0x40000027L)
+#define STATUS_WX86_CREATEWX86TIB ((NTSTATUS)0x40000028L)
+#define STATUS_MP_PROCESSOR_MISMATCH ((NTSTATUS)0x40000029L)
+#define STATUS_HIBERNATED ((NTSTATUS)0x4000002AL)
+#define STATUS_RESUME_HIBERNATION ((NTSTATUS)0x4000002BL)
+#define STATUS_GUARD_PAGE_VIOLATION ((NTSTATUS)0x80000001L)
+#define STATUS_DATATYPE_MISALIGNMENT ((NTSTATUS)0x80000002L)
+#define STATUS_BREAKPOINT ((NTSTATUS)0x80000003L)
+#define STATUS_SINGLE_STEP ((NTSTATUS)0x80000004L)
+#define STATUS_BUFFER_OVERFLOW ((NTSTATUS)0x80000005L)
+#define STATUS_NO_MORE_FILES ((NTSTATUS)0x80000006L)
+#define STATUS_WAKE_SYSTEM_DEBUGGER ((NTSTATUS)0x80000007L)
+#define STATUS_HANDLES_CLOSED ((NTSTATUS)0x8000000AL)
+#define STATUS_NO_INHERITANCE ((NTSTATUS)0x8000000BL)
+#define STATUS_GUID_SUBSTITUTION_MADE ((NTSTATUS)0x8000000CL)
+#define STATUS_PARTIAL_COPY ((NTSTATUS)0x8000000DL)
+#define STATUS_DEVICE_PAPER_EMPTY ((NTSTATUS)0x8000000EL)
+#define STATUS_DEVICE_POWERED_OFF ((NTSTATUS)0x8000000FL)
+#define STATUS_DEVICE_OFF_LINE ((NTSTATUS)0x80000010L)
+#define STATUS_DEVICE_BUSY ((NTSTATUS)0x80000011L)
+#define STATUS_NO_MORE_EAS ((NTSTATUS)0x80000012L)
+#define STATUS_INVALID_EA_NAME ((NTSTATUS)0x80000013L)
+#define STATUS_EA_LIST_INCONSISTENT ((NTSTATUS)0x80000014L)
+#define STATUS_INVALID_EA_FLAG ((NTSTATUS)0x80000015L)
+#define STATUS_VERIFY_REQUIRED ((NTSTATUS)0x80000016L)
+#define STATUS_EXTRANEOUS_INFORMATION ((NTSTATUS)0x80000017L)
+#define STATUS_RXACT_COMMIT_NECESSARY ((NTSTATUS)0x80000018L)
+#define STATUS_NO_MORE_ENTRIES ((NTSTATUS)0x8000001AL)
+#define STATUS_FILEMARK_DETECTED ((NTSTATUS)0x8000001BL)
+#define STATUS_MEDIA_CHANGED ((NTSTATUS)0x8000001CL)
+#define STATUS_BUS_RESET ((NTSTATUS)0x8000001DL)
+#define STATUS_END_OF_MEDIA ((NTSTATUS)0x8000001EL)
+#define STATUS_BEGINNING_OF_MEDIA ((NTSTATUS)0x8000001FL)
+#define STATUS_MEDIA_CHECK ((NTSTATUS)0x80000020L)
+#define STATUS_SETMARK_DETECTED ((NTSTATUS)0x80000021L)
+#define STATUS_NO_DATA_DETECTED ((NTSTATUS)0x80000022L)
+#define STATUS_REDIRECTOR_HAS_OPEN_HANDLES ((NTSTATUS)0x80000023L)
+#define STATUS_SERVER_HAS_OPEN_HANDLES ((NTSTATUS)0x80000024L)
+#define STATUS_ALREADY_DISCONNECTED ((NTSTATUS)0x80000025L)
+#define STATUS_LONGJUMP ((NTSTATUS)0x80000026L)
+#define STATUS_CLEANER_CARTRIDGE_INSTALLED ((NTSTATUS)0x80000027L)
+#define STATUS_PLUGPLAY_QUERY_VETOED ((NTSTATUS)0x80000028L)
+#define STATUS_UNWIND_CONSOLIDATE ((NTSTATUS)0x80000029L)
+#define STATUS_CLUSTER_NODE_ALREADY_UP ((NTSTATUS)0x80130001L)
+#define STATUS_CLUSTER_NODE_ALREADY_DOWN ((NTSTATUS)0x80130002L)
+#define STATUS_CLUSTER_NETWORK_ALREADY_ONLINE ((NTSTATUS)0x80130003L)
+#define STATUS_CLUSTER_NETWORK_ALREADY_OFFLINE ((NTSTATUS)0x80130004L)
+#define STATUS_CLUSTER_NODE_ALREADY_MEMBER ((NTSTATUS)0x80130005L)
+#define STATUS_UNSUCCESSFUL ((NTSTATUS)0xC0000001L)
+#define STATUS_NOT_IMPLEMENTED ((NTSTATUS)0xC0000002L)
+#define STATUS_INVALID_INFO_CLASS ((NTSTATUS)0xC0000003L)
+#define STATUS_INFO_LENGTH_MISMATCH ((NTSTATUS)0xC0000004L)
+#define STATUS_ACCESS_VIOLATION ((NTSTATUS)0xC0000005L)
+#define STATUS_IN_PAGE_ERROR ((NTSTATUS)0xC0000006L)
+#define STATUS_PAGEFILE_QUOTA ((NTSTATUS)0xC0000007L)
+#define STATUS_INVALID_HANDLE ((NTSTATUS)0xC0000008L)
+#define STATUS_BAD_INITIAL_STACK ((NTSTATUS)0xC0000009L)
+#define STATUS_BAD_INITIAL_PC ((NTSTATUS)0xC000000AL)
+#define STATUS_INVALID_CID ((NTSTATUS)0xC000000BL)
+#define STATUS_TIMER_NOT_CANCELED ((NTSTATUS)0xC000000CL)
+#define STATUS_INVALID_PARAMETER ((NTSTATUS)0xC000000DL)
+#define STATUS_NO_SUCH_DEVICE ((NTSTATUS)0xC000000EL)
+#define STATUS_NO_SUCH_FILE ((NTSTATUS)0xC000000FL)
+#define STATUS_INVALID_DEVICE_REQUEST ((NTSTATUS)0xC0000010L)
+#define STATUS_END_OF_FILE ((NTSTATUS)0xC0000011L)
+#define STATUS_WRONG_VOLUME ((NTSTATUS)0xC0000012L)
+#define STATUS_NO_MEDIA_IN_DEVICE ((NTSTATUS)0xC0000013L)
+#define STATUS_UNRECOGNIZED_MEDIA ((NTSTATUS)0xC0000014L)
+#define STATUS_NONEXISTENT_SECTOR ((NTSTATUS)0xC0000015L)
+#define STATUS_MORE_PROCESSING_REQUIRED ((NTSTATUS)0xC0000016L)
+#define STATUS_NO_MEMORY ((NTSTATUS)0xC0000017L)
+#define STATUS_CONFLICTING_ADDRESSES ((NTSTATUS)0xC0000018L)
+#define STATUS_NOT_MAPPED_VIEW ((NTSTATUS)0xC0000019L)
+#define STATUS_UNABLE_TO_FREE_VM ((NTSTATUS)0xC000001AL)
+#define STATUS_UNABLE_TO_DELETE_SECTION ((NTSTATUS)0xC000001BL)
+#define STATUS_INVALID_SYSTEM_SERVICE ((NTSTATUS)0xC000001CL)
+#define STATUS_ILLEGAL_INSTRUCTION ((NTSTATUS)0xC000001DL)
+#define STATUS_INVALID_LOCK_SEQUENCE ((NTSTATUS)0xC000001EL)
+#define STATUS_INVALID_VIEW_SIZE ((NTSTATUS)0xC000001FL)
+#define STATUS_INVALID_FILE_FOR_SECTION ((NTSTATUS)0xC0000020L)
+#define STATUS_ALREADY_COMMITTED ((NTSTATUS)0xC0000021L)
+#define STATUS_ACCESS_DENIED ((NTSTATUS)0xC0000022L)
+#define STATUS_BUFFER_TOO_SMALL ((NTSTATUS)0xC0000023L)
+#define STATUS_OBJECT_TYPE_MISMATCH ((NTSTATUS)0xC0000024L)
+#define STATUS_NONCONTINUABLE_EXCEPTION ((NTSTATUS)0xC0000025L)
+#define STATUS_INVALID_DISPOSITION ((NTSTATUS)0xC0000026L)
+#define STATUS_UNWIND ((NTSTATUS)0xC0000027L)
+#define STATUS_BAD_STACK ((NTSTATUS)0xC0000028L)
+#define STATUS_INVALID_UNWIND_TARGET ((NTSTATUS)0xC0000029L)
+#define STATUS_NOT_LOCKED ((NTSTATUS)0xC000002AL)
+#define STATUS_PARITY_ERROR ((NTSTATUS)0xC000002BL)
+#define STATUS_UNABLE_TO_DECOMMIT_VM ((NTSTATUS)0xC000002CL)
+#define STATUS_NOT_COMMITTED ((NTSTATUS)0xC000002DL)
+#define STATUS_INVALID_PORT_ATTRIBUTES ((NTSTATUS)0xC000002EL)
+#define STATUS_PORT_MESSAGE_TOO_LONG ((NTSTATUS)0xC000002FL)
+#define STATUS_INVALID_PARAMETER_MIX ((NTSTATUS)0xC0000030L)
+#define STATUS_INVALID_QUOTA_LOWER ((NTSTATUS)0xC0000031L)
+#define STATUS_DISK_CORRUPT_ERROR ((NTSTATUS)0xC0000032L)
+#define STATUS_OBJECT_NAME_INVALID ((NTSTATUS)0xC0000033L)
+#define STATUS_OBJECT_NAME_NOT_FOUND ((NTSTATUS)0xC0000034L)
+#define STATUS_OBJECT_NAME_COLLISION ((NTSTATUS)0xC0000035L)
+#define STATUS_PORT_DISCONNECTED ((NTSTATUS)0xC0000037L)
+#define STATUS_DEVICE_ALREADY_ATTACHED ((NTSTATUS)0xC0000038L)
+#define STATUS_OBJECT_PATH_INVALID ((NTSTATUS)0xC0000039L)
+#define STATUS_OBJECT_PATH_NOT_FOUND ((NTSTATUS)0xC000003AL)
+#define STATUS_OBJECT_PATH_SYNTAX_BAD ((NTSTATUS)0xC000003BL)
+#define STATUS_DATA_OVERRUN ((NTSTATUS)0xC000003CL)
+#define STATUS_DATA_LATE_ERROR ((NTSTATUS)0xC000003DL)
+#define STATUS_DATA_ERROR ((NTSTATUS)0xC000003EL)
+#define STATUS_CRC_ERROR ((NTSTATUS)0xC000003FL)
+#define STATUS_SECTION_TOO_BIG ((NTSTATUS)0xC0000040L)
+#define STATUS_PORT_CONNECTION_REFUSED ((NTSTATUS)0xC0000041L)
+#define STATUS_INVALID_PORT_HANDLE ((NTSTATUS)0xC0000042L)
+#define STATUS_SHARING_VIOLATION ((NTSTATUS)0xC0000043L)
+#define STATUS_QUOTA_EXCEEDED ((NTSTATUS)0xC0000044L)
+#define STATUS_INVALID_PAGE_PROTECTION ((NTSTATUS)0xC0000045L)
+#define STATUS_MUTANT_NOT_OWNED ((NTSTATUS)0xC0000046L)
+#define STATUS_SEMAPHORE_LIMIT_EXCEEDED ((NTSTATUS)0xC0000047L)
+#define STATUS_PORT_ALREADY_SET ((NTSTATUS)0xC0000048L)
+#define STATUS_SECTION_NOT_IMAGE ((NTSTATUS)0xC0000049L)
+#define STATUS_SUSPEND_COUNT_EXCEEDED ((NTSTATUS)0xC000004AL)
+#define STATUS_THREAD_IS_TERMINATING ((NTSTATUS)0xC000004BL)
+#define STATUS_BAD_WORKING_SET_LIMIT ((NTSTATUS)0xC000004CL)
+#define STATUS_INCOMPATIBLE_FILE_MAP ((NTSTATUS)0xC000004DL)
+#define STATUS_SECTION_PROTECTION ((NTSTATUS)0xC000004EL)
+#define STATUS_EAS_NOT_SUPPORTED ((NTSTATUS)0xC000004FL)
+#define STATUS_EA_TOO_LARGE ((NTSTATUS)0xC0000050L)
+#define STATUS_NONEXISTENT_EA_ENTRY ((NTSTATUS)0xC0000051L)
+#define STATUS_NO_EAS_ON_FILE ((NTSTATUS)0xC0000052L)
+#define STATUS_EA_CORRUPT_ERROR ((NTSTATUS)0xC0000053L)
+#define STATUS_FILE_LOCK_CONFLICT ((NTSTATUS)0xC0000054L)
+#define STATUS_LOCK_NOT_GRANTED ((NTSTATUS)0xC0000055L)
+#define STATUS_DELETE_PENDING ((NTSTATUS)0xC0000056L)
+#define STATUS_CTL_FILE_NOT_SUPPORTED ((NTSTATUS)0xC0000057L)
+#define STATUS_UNKNOWN_REVISION ((NTSTATUS)0xC0000058L)
+#define STATUS_REVISION_MISMATCH ((NTSTATUS)0xC0000059L)
+#define STATUS_INVALID_OWNER ((NTSTATUS)0xC000005AL)
+#define STATUS_INVALID_PRIMARY_GROUP ((NTSTATUS)0xC000005BL)
+#define STATUS_NO_IMPERSONATION_TOKEN ((NTSTATUS)0xC000005CL)
+#define STATUS_CANT_DISABLE_MANDATORY ((NTSTATUS)0xC000005DL)
+#define STATUS_NO_LOGON_SERVERS ((NTSTATUS)0xC000005EL)
+#define STATUS_NO_SUCH_LOGON_SESSION ((NTSTATUS)0xC000005FL)
+#define STATUS_NO_SUCH_PRIVILEGE ((NTSTATUS)0xC0000060L)
+#define STATUS_PRIVILEGE_NOT_HELD ((NTSTATUS)0xC0000061L)
+#define STATUS_INVALID_ACCOUNT_NAME ((NTSTATUS)0xC0000062L)
+#define STATUS_USER_EXISTS ((NTSTATUS)0xC0000063L)
+#define STATUS_NO_SUCH_USER ((NTSTATUS)0xC0000064L)
+#define STATUS_GROUP_EXISTS ((NTSTATUS)0xC0000065L)
+#define STATUS_NO_SUCH_GROUP ((NTSTATUS)0xC0000066L)
+#define STATUS_MEMBER_IN_GROUP ((NTSTATUS)0xC0000067L)
+#define STATUS_MEMBER_NOT_IN_GROUP ((NTSTATUS)0xC0000068L)
+#define STATUS_LAST_ADMIN ((NTSTATUS)0xC0000069L)
+#define STATUS_WRONG_PASSWORD ((NTSTATUS)0xC000006AL)
+#define STATUS_ILL_FORMED_PASSWORD ((NTSTATUS)0xC000006BL)
+#define STATUS_PASSWORD_RESTRICTION ((NTSTATUS)0xC000006CL)
+#define STATUS_LOGON_FAILURE ((NTSTATUS)0xC000006DL)
+#define STATUS_ACCOUNT_RESTRICTION ((NTSTATUS)0xC000006EL)
+#define STATUS_INVALID_LOGON_HOURS ((NTSTATUS)0xC000006FL)
+#define STATUS_INVALID_WORKSTATION ((NTSTATUS)0xC0000070L)
+#define STATUS_PASSWORD_EXPIRED ((NTSTATUS)0xC0000071L)
+#define STATUS_ACCOUNT_DISABLED ((NTSTATUS)0xC0000072L)
+#define STATUS_NONE_MAPPED ((NTSTATUS)0xC0000073L)
+#define STATUS_TOO_MANY_LUIDS_REQUESTED ((NTSTATUS)0xC0000074L)
+#define STATUS_LUIDS_EXHAUSTED ((NTSTATUS)0xC0000075L)
+#define STATUS_INVALID_SUB_AUTHORITY ((NTSTATUS)0xC0000076L)
+#define STATUS_INVALID_ACL ((NTSTATUS)0xC0000077L)
+#define STATUS_INVALID_SID ((NTSTATUS)0xC0000078L)
+#define STATUS_INVALID_SECURITY_DESCR ((NTSTATUS)0xC0000079L)
+#define STATUS_PROCEDURE_NOT_FOUND ((NTSTATUS)0xC000007AL)
+#define STATUS_INVALID_IMAGE_FORMAT ((NTSTATUS)0xC000007BL)
+#define STATUS_NO_TOKEN ((NTSTATUS)0xC000007CL)
+#define STATUS_BAD_INHERITANCE_ACL ((NTSTATUS)0xC000007DL)
+#define STATUS_RANGE_NOT_LOCKED ((NTSTATUS)0xC000007EL)
+#define STATUS_DISK_FULL ((NTSTATUS)0xC000007FL)
+#define STATUS_SERVER_DISABLED ((NTSTATUS)0xC0000080L)
+#define STATUS_SERVER_NOT_DISABLED ((NTSTATUS)0xC0000081L)
+#define STATUS_TOO_MANY_GUIDS_REQUESTED ((NTSTATUS)0xC0000082L)
+#define STATUS_GUIDS_EXHAUSTED ((NTSTATUS)0xC0000083L)
+#define STATUS_INVALID_ID_AUTHORITY ((NTSTATUS)0xC0000084L)
+#define STATUS_AGENTS_EXHAUSTED ((NTSTATUS)0xC0000085L)
+#define STATUS_INVALID_VOLUME_LABEL ((NTSTATUS)0xC0000086L)
+#define STATUS_SECTION_NOT_EXTENDED ((NTSTATUS)0xC0000087L)
+#define STATUS_NOT_MAPPED_DATA ((NTSTATUS)0xC0000088L)
+#define STATUS_RESOURCE_DATA_NOT_FOUND ((NTSTATUS)0xC0000089L)
+#define STATUS_RESOURCE_TYPE_NOT_FOUND ((NTSTATUS)0xC000008AL)
+#define STATUS_RESOURCE_NAME_NOT_FOUND ((NTSTATUS)0xC000008BL)
+#define STATUS_ARRAY_BOUNDS_EXCEEDED ((NTSTATUS)0xC000008CL)
+#define STATUS_FLOAT_DENORMAL_OPERAND ((NTSTATUS)0xC000008DL)
+#define STATUS_FLOAT_DIVIDE_BY_ZERO ((NTSTATUS)0xC000008EL)
+#define STATUS_FLOAT_INEXACT_RESULT ((NTSTATUS)0xC000008FL)
+#define STATUS_FLOAT_INVALID_OPERATION ((NTSTATUS)0xC0000090L)
+#define STATUS_FLOAT_OVERFLOW ((NTSTATUS)0xC0000091L)
+#define STATUS_FLOAT_STACK_CHECK ((NTSTATUS)0xC0000092L)
+#define STATUS_FLOAT_UNDERFLOW ((NTSTATUS)0xC0000093L)
+#define STATUS_INTEGER_DIVIDE_BY_ZERO ((NTSTATUS)0xC0000094L)
+#define STATUS_INTEGER_OVERFLOW ((NTSTATUS)0xC0000095L)
+#define STATUS_PRIVILEGED_INSTRUCTION ((NTSTATUS)0xC0000096L)
+#define STATUS_TOO_MANY_PAGING_FILES ((NTSTATUS)0xC0000097L)
+#define STATUS_FILE_INVALID ((NTSTATUS)0xC0000098L)
+#define STATUS_ALLOTTED_SPACE_EXCEEDED ((NTSTATUS)0xC0000099L)
+#define STATUS_INSUFFICIENT_RESOURCES ((NTSTATUS)0xC000009AL)
+#define STATUS_DFS_EXIT_PATH_FOUND ((NTSTATUS)0xC000009BL)
+#define STATUS_DEVICE_DATA_ERROR ((NTSTATUS)0xC000009CL)
+#define STATUS_DEVICE_NOT_CONNECTED ((NTSTATUS)0xC000009DL)
+#define STATUS_DEVICE_POWER_FAILURE ((NTSTATUS)0xC000009EL)
+#define STATUS_FREE_VM_NOT_AT_BASE ((NTSTATUS)0xC000009FL)
+#define STATUS_MEMORY_NOT_ALLOCATED ((NTSTATUS)0xC00000A0L)
+#define STATUS_WORKING_SET_QUOTA ((NTSTATUS)0xC00000A1L)
+#define STATUS_MEDIA_WRITE_PROTECTED ((NTSTATUS)0xC00000A2L)
+#define STATUS_DEVICE_NOT_READY ((NTSTATUS)0xC00000A3L)
+#define STATUS_INVALID_GROUP_ATTRIBUTES ((NTSTATUS)0xC00000A4L)
+#define STATUS_BAD_IMPERSONATION_LEVEL ((NTSTATUS)0xC00000A5L)
+#define STATUS_CANT_OPEN_ANONYMOUS ((NTSTATUS)0xC00000A6L)
+#define STATUS_BAD_VALIDATION_CLASS ((NTSTATUS)0xC00000A7L)
+#define STATUS_BAD_TOKEN_TYPE ((NTSTATUS)0xC00000A8L)
+#define STATUS_BAD_MASTER_BOOT_RECORD ((NTSTATUS)0xC00000A9L)
+#define STATUS_INSTRUCTION_MISALIGNMENT ((NTSTATUS)0xC00000AAL)
+#define STATUS_INSTANCE_NOT_AVAILABLE ((NTSTATUS)0xC00000ABL)
+#define STATUS_PIPE_NOT_AVAILABLE ((NTSTATUS)0xC00000ACL)
+#define STATUS_INVALID_PIPE_STATE ((NTSTATUS)0xC00000ADL)
+#define STATUS_PIPE_BUSY ((NTSTATUS)0xC00000AEL)
+#define STATUS_ILLEGAL_FUNCTION ((NTSTATUS)0xC00000AFL)
+#define STATUS_PIPE_DISCONNECTED ((NTSTATUS)0xC00000B0L)
+#define STATUS_PIPE_CLOSING ((NTSTATUS)0xC00000B1L)
+#define STATUS_PIPE_CONNECTED ((NTSTATUS)0xC00000B2L)
+#define STATUS_PIPE_LISTENING ((NTSTATUS)0xC00000B3L)
+#define STATUS_INVALID_READ_MODE ((NTSTATUS)0xC00000B4L)
+#define STATUS_IO_TIMEOUT ((NTSTATUS)0xC00000B5L)
+#define STATUS_FILE_FORCED_CLOSED ((NTSTATUS)0xC00000B6L)
+#define STATUS_PROFILING_NOT_STARTED ((NTSTATUS)0xC00000B7L)
+#define STATUS_PROFILING_NOT_STOPPED ((NTSTATUS)0xC00000B8L)
+#define STATUS_COULD_NOT_INTERPRET ((NTSTATUS)0xC00000B9L)
+#define STATUS_FILE_IS_A_DIRECTORY ((NTSTATUS)0xC00000BAL)
+#define STATUS_NOT_SUPPORTED ((NTSTATUS)0xC00000BBL)
+#define STATUS_REMOTE_NOT_LISTENING ((NTSTATUS)0xC00000BCL)
+#define STATUS_DUPLICATE_NAME ((NTSTATUS)0xC00000BDL)
+#define STATUS_BAD_NETWORK_PATH ((NTSTATUS)0xC00000BEL)
+#define STATUS_NETWORK_BUSY ((NTSTATUS)0xC00000BFL)
+#define STATUS_DEVICE_DOES_NOT_EXIST ((NTSTATUS)0xC00000C0L)
+#define STATUS_TOO_MANY_COMMANDS ((NTSTATUS)0xC00000C1L)
+#define STATUS_ADAPTER_HARDWARE_ERROR ((NTSTATUS)0xC00000C2L)
+#define STATUS_INVALID_NETWORK_RESPONSE ((NTSTATUS)0xC00000C3L)
+#define STATUS_UNEXPECTED_NETWORK_ERROR ((NTSTATUS)0xC00000C4L)
+#define STATUS_BAD_REMOTE_ADAPTER ((NTSTATUS)0xC00000C5L)
+#define STATUS_PRINT_QUEUE_FULL ((NTSTATUS)0xC00000C6L)
+#define STATUS_NO_SPOOL_SPACE ((NTSTATUS)0xC00000C7L)
+#define STATUS_PRINT_CANCELLED ((NTSTATUS)0xC00000C8L)
+#define STATUS_NETWORK_NAME_DELETED ((NTSTATUS)0xC00000C9L)
+#define STATUS_NETWORK_ACCESS_DENIED ((NTSTATUS)0xC00000CAL)
+#define STATUS_BAD_DEVICE_TYPE ((NTSTATUS)0xC00000CBL)
+#define STATUS_BAD_NETWORK_NAME ((NTSTATUS)0xC00000CCL)
+#define STATUS_TOO_MANY_NAMES ((NTSTATUS)0xC00000CDL)
+#define STATUS_TOO_MANY_SESSIONS ((NTSTATUS)0xC00000CEL)
+#define STATUS_SHARING_PAUSED ((NTSTATUS)0xC00000CFL)
+#define STATUS_REQUEST_NOT_ACCEPTED ((NTSTATUS)0xC00000D0L)
+#define STATUS_REDIRECTOR_PAUSED ((NTSTATUS)0xC00000D1L)
+#define STATUS_NET_WRITE_FAULT ((NTSTATUS)0xC00000D2L)
+#define STATUS_PROFILING_AT_LIMIT ((NTSTATUS)0xC00000D3L)
+#define STATUS_NOT_SAME_DEVICE ((NTSTATUS)0xC00000D4L)
+#define STATUS_FILE_RENAMED ((NTSTATUS)0xC00000D5L)
+#define STATUS_VIRTUAL_CIRCUIT_CLOSED ((NTSTATUS)0xC00000D6L)
+#define STATUS_NO_SECURITY_ON_OBJECT ((NTSTATUS)0xC00000D7L)
+#define STATUS_CANT_WAIT ((NTSTATUS)0xC00000D8L)
+#define STATUS_PIPE_EMPTY ((NTSTATUS)0xC00000D9L)
+#define STATUS_CANT_ACCESS_DOMAIN_INFO ((NTSTATUS)0xC00000DAL)
+#define STATUS_CANT_TERMINATE_SELF ((NTSTATUS)0xC00000DBL)
+#define STATUS_INVALID_SERVER_STATE ((NTSTATUS)0xC00000DCL)
+#define STATUS_INVALID_DOMAIN_STATE ((NTSTATUS)0xC00000DDL)
+#define STATUS_INVALID_DOMAIN_ROLE ((NTSTATUS)0xC00000DEL)
+#define STATUS_NO_SUCH_DOMAIN ((NTSTATUS)0xC00000DFL)
+#define STATUS_DOMAIN_EXISTS ((NTSTATUS)0xC00000E0L)
+#define STATUS_DOMAIN_LIMIT_EXCEEDED ((NTSTATUS)0xC00000E1L)
+#define STATUS_OPLOCK_NOT_GRANTED ((NTSTATUS)0xC00000E2L)
+#define STATUS_INVALID_OPLOCK_PROTOCOL ((NTSTATUS)0xC00000E3L)
+#define STATUS_INTERNAL_DB_CORRUPTION ((NTSTATUS)0xC00000E4L)
+#define STATUS_INTERNAL_ERROR ((NTSTATUS)0xC00000E5L)
+#define STATUS_GENERIC_NOT_MAPPED ((NTSTATUS)0xC00000E6L)
+#define STATUS_BAD_DESCRIPTOR_FORMAT ((NTSTATUS)0xC00000E7L)
+#define STATUS_INVALID_USER_BUFFER ((NTSTATUS)0xC00000E8L)
+#define STATUS_UNEXPECTED_IO_ERROR ((NTSTATUS)0xC00000E9L)
+#define STATUS_UNEXPECTED_MM_CREATE_ERR ((NTSTATUS)0xC00000EAL)
+#define STATUS_UNEXPECTED_MM_MAP_ERROR ((NTSTATUS)0xC00000EBL)
+#define STATUS_UNEXPECTED_MM_EXTEND_ERR ((NTSTATUS)0xC00000ECL)
+#define STATUS_NOT_LOGON_PROCESS ((NTSTATUS)0xC00000EDL)
+#define STATUS_LOGON_SESSION_EXISTS ((NTSTATUS)0xC00000EEL)
+#define STATUS_INVALID_PARAMETER_1 ((NTSTATUS)0xC00000EFL)
+#define STATUS_INVALID_PARAMETER_2 ((NTSTATUS)0xC00000F0L)
+#define STATUS_INVALID_PARAMETER_3 ((NTSTATUS)0xC00000F1L)
+#define STATUS_INVALID_PARAMETER_4 ((NTSTATUS)0xC00000F2L)
+#define STATUS_INVALID_PARAMETER_5 ((NTSTATUS)0xC00000F3L)
+#define STATUS_INVALID_PARAMETER_6 ((NTSTATUS)0xC00000F4L)
+#define STATUS_INVALID_PARAMETER_7 ((NTSTATUS)0xC00000F5L)
+#define STATUS_INVALID_PARAMETER_8 ((NTSTATUS)0xC00000F6L)
+#define STATUS_INVALID_PARAMETER_9 ((NTSTATUS)0xC00000F7L)
+#define STATUS_INVALID_PARAMETER_10 ((NTSTATUS)0xC00000F8L)
+#define STATUS_INVALID_PARAMETER_11 ((NTSTATUS)0xC00000F9L)
+#define STATUS_INVALID_PARAMETER_12 ((NTSTATUS)0xC00000FAL)
+#define STATUS_REDIRECTOR_NOT_STARTED ((NTSTATUS)0xC00000FBL)
+#define STATUS_REDIRECTOR_STARTED ((NTSTATUS)0xC00000FCL)
+#define STATUS_STACK_OVERFLOW ((NTSTATUS)0xC00000FDL)
+#define STATUS_NO_SUCH_PACKAGE ((NTSTATUS)0xC00000FEL)
+#define STATUS_BAD_FUNCTION_TABLE ((NTSTATUS)0xC00000FFL)
+#define STATUS_VARIABLE_NOT_FOUND ((NTSTATUS)0xC0000100L)
+#define STATUS_DIRECTORY_NOT_EMPTY ((NTSTATUS)0xC0000101L)
+#define STATUS_FILE_CORRUPT_ERROR ((NTSTATUS)0xC0000102L)
+#define STATUS_NOT_A_DIRECTORY ((NTSTATUS)0xC0000103L)
+#define STATUS_BAD_LOGON_SESSION_STATE ((NTSTATUS)0xC0000104L)
+#define STATUS_LOGON_SESSION_COLLISION ((NTSTATUS)0xC0000105L)
+#define STATUS_NAME_TOO_LONG ((NTSTATUS)0xC0000106L)
+#define STATUS_FILES_OPEN ((NTSTATUS)0xC0000107L)
+#define STATUS_CONNECTION_IN_USE ((NTSTATUS)0xC0000108L)
+#define STATUS_MESSAGE_NOT_FOUND ((NTSTATUS)0xC0000109L)
+#define STATUS_PROCESS_IS_TERMINATING ((NTSTATUS)0xC000010AL)
+#define STATUS_INVALID_LOGON_TYPE ((NTSTATUS)0xC000010BL)
+#define STATUS_NO_GUID_TRANSLATION ((NTSTATUS)0xC000010CL)
+#define STATUS_CANNOT_IMPERSONATE ((NTSTATUS)0xC000010DL)
+#define STATUS_IMAGE_ALREADY_LOADED ((NTSTATUS)0xC000010EL)
+#define STATUS_ABIOS_NOT_PRESENT ((NTSTATUS)0xC000010FL)
+#define STATUS_ABIOS_LID_NOT_EXIST ((NTSTATUS)0xC0000110L)
+#define STATUS_ABIOS_LID_ALREADY_OWNED ((NTSTATUS)0xC0000111L)
+#define STATUS_ABIOS_NOT_LID_OWNER ((NTSTATUS)0xC0000112L)
+#define STATUS_ABIOS_INVALID_COMMAND ((NTSTATUS)0xC0000113L)
+#define STATUS_ABIOS_INVALID_LID ((NTSTATUS)0xC0000114L)
+#define STATUS_ABIOS_SELECTOR_NOT_AVAILABLE ((NTSTATUS)0xC0000115L)
+#define STATUS_ABIOS_INVALID_SELECTOR ((NTSTATUS)0xC0000116L)
+#define STATUS_NO_LDT ((NTSTATUS)0xC0000117L)
+#define STATUS_INVALID_LDT_SIZE ((NTSTATUS)0xC0000118L)
+#define STATUS_INVALID_LDT_OFFSET ((NTSTATUS)0xC0000119L)
+#define STATUS_INVALID_LDT_DESCRIPTOR ((NTSTATUS)0xC000011AL)
+#define STATUS_INVALID_IMAGE_NE_FORMAT ((NTSTATUS)0xC000011BL)
+#define STATUS_RXACT_INVALID_STATE ((NTSTATUS)0xC000011CL)
+#define STATUS_RXACT_COMMIT_FAILURE ((NTSTATUS)0xC000011DL)
+#define STATUS_MAPPED_FILE_SIZE_ZERO ((NTSTATUS)0xC000011EL)
+#define STATUS_TOO_MANY_OPENED_FILES ((NTSTATUS)0xC000011FL)
+#define STATUS_CANCELLED ((NTSTATUS)0xC0000120L)
+#define STATUS_CANNOT_DELETE ((NTSTATUS)0xC0000121L)
+#define STATUS_INVALID_COMPUTER_NAME ((NTSTATUS)0xC0000122L)
+#define STATUS_FILE_DELETED ((NTSTATUS)0xC0000123L)
+#define STATUS_SPECIAL_ACCOUNT ((NTSTATUS)0xC0000124L)
+#define STATUS_SPECIAL_GROUP ((NTSTATUS)0xC0000125L)
+#define STATUS_SPECIAL_USER ((NTSTATUS)0xC0000126L)
+#define STATUS_MEMBERS_PRIMARY_GROUP ((NTSTATUS)0xC0000127L)
+#define STATUS_FILE_CLOSED ((NTSTATUS)0xC0000128L)
+#define STATUS_TOO_MANY_THREADS ((NTSTATUS)0xC0000129L)
+#define STATUS_THREAD_NOT_IN_PROCESS ((NTSTATUS)0xC000012AL)
+#define STATUS_TOKEN_ALREADY_IN_USE ((NTSTATUS)0xC000012BL)
+#define STATUS_PAGEFILE_QUOTA_EXCEEDED ((NTSTATUS)0xC000012CL)
+#define STATUS_COMMITMENT_LIMIT ((NTSTATUS)0xC000012DL)
+#define STATUS_INVALID_IMAGE_LE_FORMAT ((NTSTATUS)0xC000012EL)
+#define STATUS_INVALID_IMAGE_NOT_MZ ((NTSTATUS)0xC000012FL)
+#define STATUS_INVALID_IMAGE_PROTECT ((NTSTATUS)0xC0000130L)
+#define STATUS_INVALID_IMAGE_WIN_16 ((NTSTATUS)0xC0000131L)
+#define STATUS_LOGON_SERVER_CONFLICT ((NTSTATUS)0xC0000132L)
+#define STATUS_TIME_DIFFERENCE_AT_DC ((NTSTATUS)0xC0000133L)
+#define STATUS_SYNCHRONIZATION_REQUIRED ((NTSTATUS)0xC0000134L)
+#define STATUS_DLL_NOT_FOUND ((NTSTATUS)0xC0000135L)
+#define STATUS_OPEN_FAILED ((NTSTATUS)0xC0000136L)
+#define STATUS_IO_PRIVILEGE_FAILED ((NTSTATUS)0xC0000137L)
+#define STATUS_ORDINAL_NOT_FOUND ((NTSTATUS)0xC0000138L)
+#define STATUS_ENTRYPOINT_NOT_FOUND ((NTSTATUS)0xC0000139L)
+#define STATUS_CONTROL_C_EXIT ((NTSTATUS)0xC000013AL)
+#define STATUS_LOCAL_DISCONNECT ((NTSTATUS)0xC000013BL)
+#define STATUS_REMOTE_DISCONNECT ((NTSTATUS)0xC000013CL)
+#define STATUS_REMOTE_RESOURCES ((NTSTATUS)0xC000013DL)
+#define STATUS_LINK_FAILED ((NTSTATUS)0xC000013EL)
+#define STATUS_LINK_TIMEOUT ((NTSTATUS)0xC000013FL)
+#define STATUS_INVALID_CONNECTION ((NTSTATUS)0xC0000140L)
+#define STATUS_INVALID_ADDRESS ((NTSTATUS)0xC0000141L)
+#define STATUS_DLL_INIT_FAILED ((NTSTATUS)0xC0000142L)
+#define STATUS_MISSING_SYSTEMFILE ((NTSTATUS)0xC0000143L)
+#define STATUS_UNHANDLED_EXCEPTION ((NTSTATUS)0xC0000144L)
+#define STATUS_APP_INIT_FAILURE ((NTSTATUS)0xC0000145L)
+#define STATUS_PAGEFILE_CREATE_FAILED ((NTSTATUS)0xC0000146L)
+#define STATUS_NO_PAGEFILE ((NTSTATUS)0xC0000147L)
+#define STATUS_INVALID_LEVEL ((NTSTATUS)0xC0000148L)
+#define STATUS_WRONG_PASSWORD_CORE ((NTSTATUS)0xC0000149L)
+#define STATUS_ILLEGAL_FLOAT_CONTEXT ((NTSTATUS)0xC000014AL)
+#define STATUS_PIPE_BROKEN ((NTSTATUS)0xC000014BL)
+#define STATUS_REGISTRY_CORRUPT ((NTSTATUS)0xC000014CL)
+#define STATUS_REGISTRY_IO_FAILED ((NTSTATUS)0xC000014DL)
+#define STATUS_NO_EVENT_PAIR ((NTSTATUS)0xC000014EL)
+#define STATUS_UNRECOGNIZED_VOLUME ((NTSTATUS)0xC000014FL)
+#define STATUS_SERIAL_NO_DEVICE_INITED ((NTSTATUS)0xC0000150L)
+#define STATUS_NO_SUCH_ALIAS ((NTSTATUS)0xC0000151L)
+#define STATUS_MEMBER_NOT_IN_ALIAS ((NTSTATUS)0xC0000152L)
+#define STATUS_MEMBER_IN_ALIAS ((NTSTATUS)0xC0000153L)
+#define STATUS_ALIAS_EXISTS ((NTSTATUS)0xC0000154L)
+#define STATUS_LOGON_NOT_GRANTED ((NTSTATUS)0xC0000155L)
+#define STATUS_TOO_MANY_SECRETS ((NTSTATUS)0xC0000156L)
+#define STATUS_SECRET_TOO_LONG ((NTSTATUS)0xC0000157L)
+#define STATUS_INTERNAL_DB_ERROR ((NTSTATUS)0xC0000158L)
+#define STATUS_FULLSCREEN_MODE ((NTSTATUS)0xC0000159L)
+#define STATUS_TOO_MANY_CONTEXT_IDS ((NTSTATUS)0xC000015AL)
+#define STATUS_LOGON_TYPE_NOT_GRANTED ((NTSTATUS)0xC000015BL)
+#define STATUS_NOT_REGISTRY_FILE ((NTSTATUS)0xC000015CL)
+#define STATUS_NT_CROSS_ENCRYPTION_REQUIRED ((NTSTATUS)0xC000015DL)
+#define STATUS_DOMAIN_CTRLR_CONFIG_ERROR ((NTSTATUS)0xC000015EL)
+#define STATUS_FT_MISSING_MEMBER ((NTSTATUS)0xC000015FL)
+#define STATUS_ILL_FORMED_SERVICE_ENTRY ((NTSTATUS)0xC0000160L)
+#define STATUS_ILLEGAL_CHARACTER ((NTSTATUS)0xC0000161L)
+#define STATUS_UNMAPPABLE_CHARACTER ((NTSTATUS)0xC0000162L)
+#define STATUS_UNDEFINED_CHARACTER ((NTSTATUS)0xC0000163L)
+#define STATUS_FLOPPY_VOLUME ((NTSTATUS)0xC0000164L)
+#define STATUS_FLOPPY_ID_MARK_NOT_FOUND ((NTSTATUS)0xC0000165L)
+#define STATUS_FLOPPY_WRONG_CYLINDER ((NTSTATUS)0xC0000166L)
+#define STATUS_FLOPPY_UNKNOWN_ERROR ((NTSTATUS)0xC0000167L)
+#define STATUS_FLOPPY_BAD_REGISTERS ((NTSTATUS)0xC0000168L)
+#define STATUS_DISK_RECALIBRATE_FAILED ((NTSTATUS)0xC0000169L)
+#define STATUS_DISK_OPERATION_FAILED ((NTSTATUS)0xC000016AL)
+#define STATUS_DISK_RESET_FAILED ((NTSTATUS)0xC000016BL)
+#define STATUS_SHARED_IRQ_BUSY ((NTSTATUS)0xC000016CL)
+#define STATUS_FT_ORPHANING ((NTSTATUS)0xC000016DL)
+#define STATUS_BIOS_FAILED_TO_CONNECT_INTERRUPT ((NTSTATUS)0xC000016EL)
+#define STATUS_PARTITION_FAILURE ((NTSTATUS)0xC0000172L)
+#define STATUS_INVALID_BLOCK_LENGTH ((NTSTATUS)0xC0000173L)
+#define STATUS_DEVICE_NOT_PARTITIONED ((NTSTATUS)0xC0000174L)
+#define STATUS_UNABLE_TO_LOCK_MEDIA ((NTSTATUS)0xC0000175L)
+#define STATUS_UNABLE_TO_UNLOAD_MEDIA ((NTSTATUS)0xC0000176L)
+#define STATUS_EOM_OVERFLOW ((NTSTATUS)0xC0000177L)
+#define STATUS_NO_MEDIA ((NTSTATUS)0xC0000178L)
+#define STATUS_NO_SUCH_MEMBER ((NTSTATUS)0xC000017AL)
+#define STATUS_INVALID_MEMBER ((NTSTATUS)0xC000017BL)
+#define STATUS_KEY_DELETED ((NTSTATUS)0xC000017CL)
+#define STATUS_NO_LOG_SPACE ((NTSTATUS)0xC000017DL)
+#define STATUS_TOO_MANY_SIDS ((NTSTATUS)0xC000017EL)
+#define STATUS_LM_CROSS_ENCRYPTION_REQUIRED ((NTSTATUS)0xC000017FL)
+#define STATUS_KEY_HAS_CHILDREN ((NTSTATUS)0xC0000180L)
+#define STATUS_CHILD_MUST_BE_VOLATILE ((NTSTATUS)0xC0000181L)
+#define STATUS_DEVICE_CONFIGURATION_ERROR ((NTSTATUS)0xC0000182L)
+#define STATUS_DRIVER_INTERNAL_ERROR ((NTSTATUS)0xC0000183L)
+#define STATUS_INVALID_DEVICE_STATE ((NTSTATUS)0xC0000184L)
+#define STATUS_IO_DEVICE_ERROR ((NTSTATUS)0xC0000185L)
+#define STATUS_DEVICE_PROTOCOL_ERROR ((NTSTATUS)0xC0000186L)
+#define STATUS_BACKUP_CONTROLLER ((NTSTATUS)0xC0000187L)
+#define STATUS_LOG_FILE_FULL ((NTSTATUS)0xC0000188L)
+#define STATUS_TOO_LATE ((NTSTATUS)0xC0000189L)
+#define STATUS_NO_TRUST_LSA_SECRET ((NTSTATUS)0xC000018AL)
+#define STATUS_NO_TRUST_SAM_ACCOUNT ((NTSTATUS)0xC000018BL)
+#define STATUS_TRUSTED_DOMAIN_FAILURE ((NTSTATUS)0xC000018CL)
+#define STATUS_TRUSTED_RELATIONSHIP_FAILURE ((NTSTATUS)0xC000018DL)
+#define STATUS_EVENTLOG_FILE_CORRUPT ((NTSTATUS)0xC000018EL)
+#define STATUS_EVENTLOG_CANT_START ((NTSTATUS)0xC000018FL)
+#define STATUS_TRUST_FAILURE ((NTSTATUS)0xC0000190L)
+#define STATUS_MUTANT_LIMIT_EXCEEDED ((NTSTATUS)0xC0000191L)
+#define STATUS_NETLOGON_NOT_STARTED ((NTSTATUS)0xC0000192L)
+#define STATUS_ACCOUNT_EXPIRED ((NTSTATUS)0xC0000193L)
+#define STATUS_POSSIBLE_DEADLOCK ((NTSTATUS)0xC0000194L)
+#define STATUS_NETWORK_CREDENTIAL_CONFLICT ((NTSTATUS)0xC0000195L)
+#define STATUS_REMOTE_SESSION_LIMIT ((NTSTATUS)0xC0000196L)
+#define STATUS_EVENTLOG_FILE_CHANGED ((NTSTATUS)0xC0000197L)
+#define STATUS_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT ((NTSTATUS)0xC0000198L)
+#define STATUS_NOLOGON_WORKSTATION_TRUST_ACCOUNT ((NTSTATUS)0xC0000199L)
+#define STATUS_NOLOGON_SERVER_TRUST_ACCOUNT ((NTSTATUS)0xC000019AL)
+#define STATUS_DOMAIN_TRUST_INCONSISTENT ((NTSTATUS)0xC000019BL)
+#define STATUS_FS_DRIVER_REQUIRED ((NTSTATUS)0xC000019CL)
+#define STATUS_NO_USER_SESSION_KEY ((NTSTATUS)0xC0000202L)
+#define STATUS_USER_SESSION_DELETED ((NTSTATUS)0xC0000203L)
+#define STATUS_RESOURCE_LANG_NOT_FOUND ((NTSTATUS)0xC0000204L)
+#define STATUS_INSUFF_SERVER_RESOURCES ((NTSTATUS)0xC0000205L)
+#define STATUS_INVALID_BUFFER_SIZE ((NTSTATUS)0xC0000206L)
+#define STATUS_INVALID_ADDRESS_COMPONENT ((NTSTATUS)0xC0000207L)
+#define STATUS_INVALID_ADDRESS_WILDCARD ((NTSTATUS)0xC0000208L)
+#define STATUS_TOO_MANY_ADDRESSES ((NTSTATUS)0xC0000209L)
+#define STATUS_ADDRESS_ALREADY_EXISTS ((NTSTATUS)0xC000020AL)
+#define STATUS_ADDRESS_CLOSED ((NTSTATUS)0xC000020BL)
+#define STATUS_CONNECTION_DISCONNECTED ((NTSTATUS)0xC000020CL)
+#define STATUS_CONNECTION_RESET ((NTSTATUS)0xC000020DL)
+#define STATUS_TOO_MANY_NODES ((NTSTATUS)0xC000020EL)
+#define STATUS_TRANSACTION_ABORTED ((NTSTATUS)0xC000020FL)
+#define STATUS_TRANSACTION_TIMED_OUT ((NTSTATUS)0xC0000210L)
+#define STATUS_TRANSACTION_NO_RELEASE ((NTSTATUS)0xC0000211L)
+#define STATUS_TRANSACTION_NO_MATCH ((NTSTATUS)0xC0000212L)
+#define STATUS_TRANSACTION_RESPONDED ((NTSTATUS)0xC0000213L)
+#define STATUS_TRANSACTION_INVALID_ID ((NTSTATUS)0xC0000214L)
+#define STATUS_TRANSACTION_INVALID_TYPE ((NTSTATUS)0xC0000215L)
+#define STATUS_NOT_SERVER_SESSION ((NTSTATUS)0xC0000216L)
+#define STATUS_NOT_CLIENT_SESSION ((NTSTATUS)0xC0000217L)
+#define STATUS_CANNOT_LOAD_REGISTRY_FILE ((NTSTATUS)0xC0000218L)
+#define STATUS_DEBUG_ATTACH_FAILED ((NTSTATUS)0xC0000219L)
+#define STATUS_SYSTEM_PROCESS_TERMINATED ((NTSTATUS)0xC000021AL)
+#define STATUS_DATA_NOT_ACCEPTED ((NTSTATUS)0xC000021BL)
+#define STATUS_NO_BROWSER_SERVERS_FOUND ((NTSTATUS)0xC000021CL)
+#define STATUS_VDM_HARD_ERROR ((NTSTATUS)0xC000021DL)
+#define STATUS_DRIVER_CANCEL_TIMEOUT ((NTSTATUS)0xC000021EL)
+#define STATUS_REPLY_MESSAGE_MISMATCH ((NTSTATUS)0xC000021FL)
+#define STATUS_MAPPED_ALIGNMENT ((NTSTATUS)0xC0000220L)
+#define STATUS_IMAGE_CHECKSUM_MISMATCH ((NTSTATUS)0xC0000221L)
+#define STATUS_LOST_WRITEBEHIND_DATA ((NTSTATUS)0xC0000222L)
+#define STATUS_CLIENT_SERVER_PARAMETERS_INVALID ((NTSTATUS)0xC0000223L)
+#define STATUS_PASSWORD_MUST_CHANGE ((NTSTATUS)0xC0000224L)
+#define STATUS_NOT_FOUND ((NTSTATUS)0xC0000225L)
+#define STATUS_NOT_TINY_STREAM ((NTSTATUS)0xC0000226L)
+#define STATUS_RECOVERY_FAILURE ((NTSTATUS)0xC0000227L)
+#define STATUS_STACK_OVERFLOW_READ ((NTSTATUS)0xC0000228L)
+#define STATUS_FAIL_CHECK ((NTSTATUS)0xC0000229L)
+#define STATUS_DUPLICATE_OBJECTID ((NTSTATUS)0xC000022AL)
+#define STATUS_OBJECTID_EXISTS ((NTSTATUS)0xC000022BL)
+#define STATUS_CONVERT_TO_LARGE ((NTSTATUS)0xC000022CL)
+#define STATUS_RETRY ((NTSTATUS)0xC000022DL)
+#define STATUS_FOUND_OUT_OF_SCOPE ((NTSTATUS)0xC000022EL)
+#define STATUS_ALLOCATE_BUCKET ((NTSTATUS)0xC000022FL)
+#define STATUS_PROPSET_NOT_FOUND ((NTSTATUS)0xC0000230L)
+#define STATUS_MARSHALL_OVERFLOW ((NTSTATUS)0xC0000231L)
+#define STATUS_INVALID_VARIANT ((NTSTATUS)0xC0000232L)
+#define STATUS_DOMAIN_CONTROLLER_NOT_FOUND ((NTSTATUS)0xC0000233L)
+#define STATUS_ACCOUNT_LOCKED_OUT ((NTSTATUS)0xC0000234L)
+#define STATUS_HANDLE_NOT_CLOSABLE ((NTSTATUS)0xC0000235L)
+#define STATUS_CONNECTION_REFUSED ((NTSTATUS)0xC0000236L)
+#define STATUS_GRACEFUL_DISCONNECT ((NTSTATUS)0xC0000237L)
+#define STATUS_ADDRESS_ALREADY_ASSOCIATED ((NTSTATUS)0xC0000238L)
+#define STATUS_ADDRESS_NOT_ASSOCIATED ((NTSTATUS)0xC0000239L)
+#define STATUS_CONNECTION_INVALID ((NTSTATUS)0xC000023AL)
+#define STATUS_CONNECTION_ACTIVE ((NTSTATUS)0xC000023BL)
+#define STATUS_NETWORK_UNREACHABLE ((NTSTATUS)0xC000023CL)
+#define STATUS_HOST_UNREACHABLE ((NTSTATUS)0xC000023DL)
+#define STATUS_PROTOCOL_UNREACHABLE ((NTSTATUS)0xC000023EL)
+#define STATUS_PORT_UNREACHABLE ((NTSTATUS)0xC000023FL)
+#define STATUS_REQUEST_ABORTED ((NTSTATUS)0xC0000240L)
+#define STATUS_CONNECTION_ABORTED ((NTSTATUS)0xC0000241L)
+#define STATUS_BAD_COMPRESSION_BUFFER ((NTSTATUS)0xC0000242L)
+#define STATUS_USER_MAPPED_FILE ((NTSTATUS)0xC0000243L)
+#define STATUS_AUDIT_FAILED ((NTSTATUS)0xC0000244L)
+#define STATUS_TIMER_RESOLUTION_NOT_SET ((NTSTATUS)0xC0000245L)
+#define STATUS_CONNECTION_COUNT_LIMIT ((NTSTATUS)0xC0000246L)
+#define STATUS_LOGIN_TIME_RESTRICTION ((NTSTATUS)0xC0000247L)
+#define STATUS_LOGIN_WKSTA_RESTRICTION ((NTSTATUS)0xC0000248L)
+#define STATUS_IMAGE_MP_UP_MISMATCH ((NTSTATUS)0xC0000249L)
+#define STATUS_INSUFFICIENT_LOGON_INFO ((NTSTATUS)0xC0000250L)
+#define STATUS_BAD_DLL_ENTRYPOINT ((NTSTATUS)0xC0000251L)
+#define STATUS_BAD_SERVICE_ENTRYPOINT ((NTSTATUS)0xC0000252L)
+#define STATUS_LPC_REPLY_LOST ((NTSTATUS)0xC0000253L)
+#define STATUS_IP_ADDRESS_CONFLICT1 ((NTSTATUS)0xC0000254L)
+#define STATUS_IP_ADDRESS_CONFLICT2 ((NTSTATUS)0xC0000255L)
+#define STATUS_REGISTRY_QUOTA_LIMIT ((NTSTATUS)0xC0000256L)
+#define STATUS_PATH_NOT_COVERED ((NTSTATUS)0xC0000257L)
+#define STATUS_NO_CALLBACK_ACTIVE ((NTSTATUS)0xC0000258L)
+#define STATUS_LICENSE_QUOTA_EXCEEDED ((NTSTATUS)0xC0000259L)
+#define STATUS_PWD_TOO_SHORT ((NTSTATUS)0xC000025AL)
+#define STATUS_PWD_TOO_RECENT ((NTSTATUS)0xC000025BL)
+#define STATUS_PWD_HISTORY_CONFLICT ((NTSTATUS)0xC000025CL)
+#define STATUS_PLUGPLAY_NO_DEVICE ((NTSTATUS)0xC000025EL)
+#define STATUS_UNSUPPORTED_COMPRESSION ((NTSTATUS)0xC000025FL)
+#define STATUS_INVALID_HW_PROFILE ((NTSTATUS)0xC0000260L)
+#define STATUS_INVALID_PLUGPLAY_DEVICE_PATH ((NTSTATUS)0xC0000261L)
+#define STATUS_DRIVER_ORDINAL_NOT_FOUND ((NTSTATUS)0xC0000262L)
+#define STATUS_DRIVER_ENTRYPOINT_NOT_FOUND ((NTSTATUS)0xC0000263L)
+#define STATUS_RESOURCE_NOT_OWNED ((NTSTATUS)0xC0000264L)
+#define STATUS_TOO_MANY_LINKS ((NTSTATUS)0xC0000265L)
+#define STATUS_QUOTA_LIST_INCONSISTENT ((NTSTATUS)0xC0000266L)
+#define STATUS_FILE_IS_OFFLINE ((NTSTATUS)0xC0000267L)
+#define STATUS_EVALUATION_EXPIRATION ((NTSTATUS)0xC0000268L)
+#define STATUS_ILLEGAL_DLL_RELOCATION ((NTSTATUS)0xC0000269L)
+#define STATUS_LICENSE_VIOLATION ((NTSTATUS)0xC000026AL)
+#define STATUS_DLL_INIT_FAILED_LOGOFF ((NTSTATUS)0xC000026BL)
+#define STATUS_DRIVER_UNABLE_TO_LOAD ((NTSTATUS)0xC000026CL)
+#define STATUS_DFS_UNAVAILABLE ((NTSTATUS)0xC000026DL)
+#define STATUS_VOLUME_DISMOUNTED ((NTSTATUS)0xC000026EL)
+#define STATUS_WX86_INTERNAL_ERROR ((NTSTATUS)0xC000026FL)
+#define STATUS_WX86_FLOAT_STACK_CHECK ((NTSTATUS)0xC0000270L)
+#define STATUS_VALIDATE_CONTINUE ((NTSTATUS)0xC0000271L)
+#define STATUS_NO_MATCH ((NTSTATUS)0xC0000272L)
+#define STATUS_NO_MORE_MATCHES ((NTSTATUS)0xC0000273L)
+#define STATUS_NOT_A_REPARSE_POINT ((NTSTATUS)0xC0000275L)
+#define STATUS_IO_REPARSE_TAG_INVALID ((NTSTATUS)0xC0000276L)
+#define STATUS_IO_REPARSE_TAG_MISMATCH ((NTSTATUS)0xC0000277L)
+#define STATUS_IO_REPARSE_DATA_INVALID ((NTSTATUS)0xC0000278L)
+#define STATUS_IO_REPARSE_TAG_NOT_HANDLED ((NTSTATUS)0xC0000279L)
+#define STATUS_REPARSE_POINT_NOT_RESOLVED ((NTSTATUS)0xC0000280L)
+#define STATUS_DIRECTORY_IS_A_REPARSE_POINT ((NTSTATUS)0xC0000281L)
+#define STATUS_RANGE_LIST_CONFLICT ((NTSTATUS)0xC0000282L)
+#define STATUS_SOURCE_ELEMENT_EMPTY ((NTSTATUS)0xC0000283L)
+#define STATUS_DESTINATION_ELEMENT_FULL ((NTSTATUS)0xC0000284L)
+#define STATUS_ILLEGAL_ELEMENT_ADDRESS ((NTSTATUS)0xC0000285L)
+#define STATUS_MAGAZINE_NOT_PRESENT ((NTSTATUS)0xC0000286L)
+#define STATUS_REINITIALIZATION_NEEDED ((NTSTATUS)0xC0000287L)
+#define STATUS_DEVICE_REQUIRES_CLEANING ((NTSTATUS)0x80000288L)
+#define STATUS_DEVICE_DOOR_OPEN ((NTSTATUS)0x80000289L)
+#define STATUS_ENCRYPTION_FAILED ((NTSTATUS)0xC000028AL)
+#define STATUS_DECRYPTION_FAILED ((NTSTATUS)0xC000028BL)
+#define STATUS_RANGE_NOT_FOUND ((NTSTATUS)0xC000028CL)
+#define STATUS_NO_RECOVERY_POLICY ((NTSTATUS)0xC000028DL)
+#define STATUS_NO_EFS ((NTSTATUS)0xC000028EL)
+#define STATUS_WRONG_EFS ((NTSTATUS)0xC000028FL)
+#define STATUS_NO_USER_KEYS ((NTSTATUS)0xC0000290L)
+#define STATUS_FILE_NOT_ENCRYPTED ((NTSTATUS)0xC0000291L)
+#define STATUS_NOT_EXPORT_FORMAT ((NTSTATUS)0xC0000292L)
+#define STATUS_FILE_ENCRYPTED ((NTSTATUS)0xC0000293L)
+#define STATUS_WAKE_SYSTEM ((NTSTATUS)0x40000294L)
+#define STATUS_WMI_GUID_NOT_FOUND ((NTSTATUS)0xC0000295L)
+#define STATUS_WMI_INSTANCE_NOT_FOUND ((NTSTATUS)0xC0000296L)
+#define STATUS_WMI_ITEMID_NOT_FOUND ((NTSTATUS)0xC0000297L)
+#define STATUS_WMI_TRY_AGAIN ((NTSTATUS)0xC0000298L)
+#define STATUS_SHARED_POLICY ((NTSTATUS)0xC0000299L)
+#define STATUS_POLICY_OBJECT_NOT_FOUND ((NTSTATUS)0xC000029AL)
+#define STATUS_POLICY_ONLY_IN_DS ((NTSTATUS)0xC000029BL)
+#define STATUS_VOLUME_NOT_UPGRADED ((NTSTATUS)0xC000029CL)
+#define STATUS_REMOTE_STORAGE_NOT_ACTIVE ((NTSTATUS)0xC000029DL)
+#define STATUS_REMOTE_STORAGE_MEDIA_ERROR ((NTSTATUS)0xC000029EL)
+#define STATUS_NO_TRACKING_SERVICE ((NTSTATUS)0xC000029FL)
+#define STATUS_SERVER_SID_MISMATCH ((NTSTATUS)0xC00002A0L)
+#define STATUS_DS_NO_ATTRIBUTE_OR_VALUE ((NTSTATUS)0xC00002A1L)
+#define STATUS_DS_INVALID_ATTRIBUTE_SYNTAX ((NTSTATUS)0xC00002A2L)
+#define STATUS_DS_ATTRIBUTE_TYPE_UNDEFINED ((NTSTATUS)0xC00002A3L)
+#define STATUS_DS_ATTRIBUTE_OR_VALUE_EXISTS ((NTSTATUS)0xC00002A4L)
+#define STATUS_DS_BUSY ((NTSTATUS)0xC00002A5L)
+#define STATUS_DS_UNAVAILABLE ((NTSTATUS)0xC00002A6L)
+#define STATUS_DS_NO_RIDS_ALLOCATED ((NTSTATUS)0xC00002A7L)
+#define STATUS_DS_NO_MORE_RIDS ((NTSTATUS)0xC00002A8L)
+#define STATUS_DS_INCORRECT_ROLE_OWNER ((NTSTATUS)0xC00002A9L)
+#define STATUS_DS_RIDMGR_INIT_ERROR ((NTSTATUS)0xC00002AAL)
+#define STATUS_DS_OBJ_CLASS_VIOLATION ((NTSTATUS)0xC00002ABL)
+#define STATUS_DS_CANT_ON_NON_LEAF ((NTSTATUS)0xC00002ACL)
+#define STATUS_DS_CANT_ON_RDN ((NTSTATUS)0xC00002ADL)
+#define STATUS_DS_CANT_MOD_OBJ_CLASS ((NTSTATUS)0xC00002AEL)
+#define STATUS_DS_CROSS_DOM_MOVE_FAILED ((NTSTATUS)0xC00002AFL)
+#define STATUS_DS_GC_NOT_AVAILABLE ((NTSTATUS)0xC00002B0L)
+#define STATUS_DIRECTORY_SERVICE_REQUIRED ((NTSTATUS)0xC00002B1L)
+#define STATUS_REPARSE_ATTRIBUTE_CONFLICT ((NTSTATUS)0xC00002B2L)
+#define STATUS_CANT_ENABLE_DENY_ONLY ((NTSTATUS)0xC00002B3L)
+#define STATUS_FLOAT_MULTIPLE_FAULTS ((NTSTATUS)0xC00002B4L)
+#define STATUS_FLOAT_MULTIPLE_TRAPS ((NTSTATUS)0xC00002B5L)
+#define STATUS_DEVICE_REMOVED ((NTSTATUS)0xC00002B6L)
+#define STATUS_JOURNAL_DELETE_IN_PROGRESS ((NTSTATUS)0xC00002B7L)
+#define STATUS_JOURNAL_NOT_ACTIVE ((NTSTATUS)0xC00002B8L)
+#define STATUS_NOINTERFACE ((NTSTATUS)0xC00002B9L)
+#define STATUS_DS_ADMIN_LIMIT_EXCEEDED ((NTSTATUS)0xC00002C1L)
+#define STATUS_DRIVER_FAILED_SLEEP ((NTSTATUS)0xC00002C2L)
+#define STATUS_MUTUAL_AUTHENTICATION_FAILED ((NTSTATUS)0xC00002C3L)
+#define STATUS_CORRUPT_SYSTEM_FILE ((NTSTATUS)0xC00002C4L)
+#define STATUS_DATATYPE_MISALIGNMENT_ERROR ((NTSTATUS)0xC00002C5L)
+#define STATUS_WMI_READ_ONLY ((NTSTATUS)0xC00002C6L)
+#define STATUS_WMI_SET_FAILURE ((NTSTATUS)0xC00002C7L)
+#define STATUS_COMMITMENT_MINIMUM ((NTSTATUS)0xC00002C8L)
+#define STATUS_REG_NAT_CONSUMPTION ((NTSTATUS)0xC00002C9L)
+#define STATUS_TRANSPORT_FULL ((NTSTATUS)0xC00002CAL)
+#define STATUS_DS_SAM_INIT_FAILURE ((NTSTATUS)0xC00002CBL)
+#define STATUS_ONLY_IF_CONNECTED ((NTSTATUS)0xC00002CCL)
+#define STATUS_DS_SENSITIVE_GROUP_VIOLATION ((NTSTATUS)0xC00002CDL)
+#define STATUS_PNP_RESTART_ENUMERATION ((NTSTATUS)0xC00002CEL)
+#define STATUS_JOURNAL_ENTRY_DELETED ((NTSTATUS)0xC00002CFL)
+#define STATUS_DS_CANT_MOD_PRIMARYGROUPID ((NTSTATUS)0xC00002D0L)
+#define STATUS_SYSTEM_IMAGE_BAD_SIGNATURE ((NTSTATUS)0xC00002D1L)
+#define STATUS_PNP_REBOOT_REQUIRED ((NTSTATUS)0xC00002D2L)
+#define STATUS_POWER_STATE_INVALID ((NTSTATUS)0xC00002D3L)
+#define STATUS_DS_INVALID_GROUP_TYPE ((NTSTATUS)0xC00002D4L)
+#define STATUS_DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN ((NTSTATUS)0xC00002D5L)
+#define STATUS_DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN ((NTSTATUS)0xC00002D6L)
+#define STATUS_DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER ((NTSTATUS)0xC00002D7L)
+#define STATUS_DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER ((NTSTATUS)0xC00002D8L)
+#define STATUS_DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER ((NTSTATUS)0xC00002D9L)
+#define STATUS_DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER ((NTSTATUS)0xC00002DAL)
+#define STATUS_DS_LOCAL_CANT_HAVE_CROSSDOMAIN_LOCAL_MEMBER ((NTSTATUS)0xC00002DBL)
+#define STATUS_DS_HAVE_PRIMARY_MEMBERS ((NTSTATUS)0xC00002DCL)
+#define STATUS_WMI_NOT_SUPPORTED ((NTSTATUS)0xC00002DDL)
+#define STATUS_INSUFFICIENT_POWER ((NTSTATUS)0xC00002DEL)
+#define STATUS_SAM_NEED_BOOTKEY_PASSWORD ((NTSTATUS)0xC00002DFL)
+#define STATUS_SAM_NEED_BOOTKEY_FLOPPY ((NTSTATUS)0xC00002E0L)
+#define STATUS_DS_CANT_START ((NTSTATUS)0xC00002E1L)
+#define STATUS_DS_INIT_FAILURE ((NTSTATUS)0xC00002E2L)
+#define STATUS_SAM_INIT_FAILURE ((NTSTATUS)0xC00002E3L)
+#define STATUS_DS_GC_REQUIRED ((NTSTATUS)0xC00002E4L)
+#define STATUS_DS_LOCAL_MEMBER_OF_LOCAL_ONLY ((NTSTATUS)0xC00002E5L)
+#define STATUS_DS_NO_FPO_IN_UNIVERSAL_GROUPS ((NTSTATUS)0xC00002E6L)
+#define STATUS_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED ((NTSTATUS)0xC00002E7L)
+#define STATUS_MULTIPLE_FAULT_VIOLATION ((NTSTATUS)0xC00002E8L)
+#define STATUS_CURRENT_DOMAIN_NOT_ALLOWED ((NTSTATUS)0xC00002E9L)
+#define STATUS_CANNOT_MAKE ((NTSTATUS)0xC00002EAL)
+#define STATUS_SYSTEM_SHUTDOWN ((NTSTATUS)0xC00002EBL)
+#define STATUS_DS_INIT_FAILURE_CONSOLE ((NTSTATUS)0xC00002ECL)
+#define STATUS_DS_SAM_INIT_FAILURE_CONSOLE ((NTSTATUS)0xC00002EDL)
+#define STATUS_UNFINISHED_CONTEXT_DELETED ((NTSTATUS)0xC00002EEL)
+#define STATUS_NO_TGT_REPLY ((NTSTATUS)0xC00002EFL)
+#define STATUS_OBJECTID_NOT_FOUND ((NTSTATUS)0xC00002F0L)
+#define STATUS_NO_IP_ADDRESSES ((NTSTATUS)0xC00002F1L)
+#define STATUS_WRONG_CREDENTIAL_HANDLE ((NTSTATUS)0xC00002F2L)
+#define STATUS_CRYPTO_SYSTEM_INVALID ((NTSTATUS)0xC00002F3L)
+#define STATUS_MAX_REFERRALS_EXCEEDED ((NTSTATUS)0xC00002F4L)
+#define STATUS_MUST_BE_KDC ((NTSTATUS)0xC00002F5L)
+#define STATUS_STRONG_CRYPTO_NOT_SUPPORTED ((NTSTATUS)0xC00002F6L)
+#define STATUS_TOO_MANY_PRINCIPALS ((NTSTATUS)0xC00002F7L)
+#define STATUS_NO_PA_DATA ((NTSTATUS)0xC00002F8L)
+#define STATUS_PKINIT_NAME_MISMATCH ((NTSTATUS)0xC00002F9L)
+#define STATUS_SMARTCARD_LOGON_REQUIRED ((NTSTATUS)0xC00002FAL)
+#define STATUS_KDC_INVALID_REQUEST ((NTSTATUS)0xC00002FBL)
+#define STATUS_KDC_UNABLE_TO_REFER ((NTSTATUS)0xC00002FCL)
+#define STATUS_KDC_UNKNOWN_ETYPE ((NTSTATUS)0xC00002FDL)
+#define STATUS_SHUTDOWN_IN_PROGRESS ((NTSTATUS)0xC00002FEL)
+#define STATUS_SERVER_SHUTDOWN_IN_PROGRESS ((NTSTATUS)0xC00002FFL)
+#define STATUS_NOT_SUPPORTED_ON_SBS ((NTSTATUS)0xC0000300L)
+#define STATUS_WMI_GUID_DISCONNECTED ((NTSTATUS)0xC0000301L)
+#define STATUS_WMI_ALREADY_DISABLED ((NTSTATUS)0xC0000302L)
+#define STATUS_WMI_ALREADY_ENABLED ((NTSTATUS)0xC0000303L)
+#define STATUS_MFT_TOO_FRAGMENTED ((NTSTATUS)0xC0000304L)
+#define STATUS_COPY_PROTECTION_FAILURE ((NTSTATUS)0xC0000305L)
+#define STATUS_CSS_AUTHENTICATION_FAILURE ((NTSTATUS)0xC0000306L)
+#define STATUS_CSS_KEY_NOT_PRESENT ((NTSTATUS)0xC0000307L)
+#define STATUS_CSS_KEY_NOT_ESTABLISHED ((NTSTATUS)0xC0000308L)
+#define STATUS_CSS_SCRAMBLED_SECTOR ((NTSTATUS)0xC0000309L)
+#define STATUS_CSS_REGION_MISMATCH ((NTSTATUS)0xC000030AL)
+#define STATUS_CSS_RESETS_EXHAUSTED ((NTSTATUS)0xC000030BL)
+#define STATUS_PKINIT_FAILURE ((NTSTATUS)0xC0000320L)
+#define STATUS_SMARTCARD_SUBSYSTEM_FAILURE ((NTSTATUS)0xC0000321L)
+#define STATUS_NO_KERB_KEY ((NTSTATUS)0xC0000322L)
+#define STATUS_HOST_DOWN ((NTSTATUS)0xC0000350L)
+#define STATUS_UNSUPPORTED_PREAUTH ((NTSTATUS)0xC0000351L)
+#define STATUS_EFS_ALG_BLOB_TOO_BIG ((NTSTATUS)0xC0000352L)
+#define STATUS_PORT_NOT_SET ((NTSTATUS)0xC0000353L)
+#define STATUS_DEBUGGER_INACTIVE ((NTSTATUS)0xC0000354L)
+#define STATUS_DS_VERSION_CHECK_FAILURE ((NTSTATUS)0xC0000355L)
+#define STATUS_AUDITING_DISABLED ((NTSTATUS)0xC0000356L)
+#define STATUS_PRENT4_MACHINE_ACCOUNT ((NTSTATUS)0xC0000357L)
+#define STATUS_DS_AG_CANT_HAVE_UNIVERSAL_MEMBER ((NTSTATUS)0xC0000358L)
+#define STATUS_INVALID_IMAGE_WIN_32 ((NTSTATUS)0xC0000359L)
+#define STATUS_INVALID_IMAGE_WIN_64 ((NTSTATUS)0xC000035AL)
+#define STATUS_BAD_BINDINGS ((NTSTATUS)0xC000035BL)
+#define STATUS_NETWORK_SESSION_EXPIRED ((NTSTATUS)0xC000035CL)
+#define STATUS_APPHELP_BLOCK ((NTSTATUS)0xC000035DL)
+#define STATUS_ALL_SIDS_FILTERED ((NTSTATUS)0xC000035EL)
+#define STATUS_NOT_SAFE_MODE_DRIVER ((NTSTATUS)0xC000035FL)
+#define STATUS_ACCESS_DISABLED_BY_POLICY_DEFAULT ((NTSTATUS)0xC0000361L)
+#define STATUS_ACCESS_DISABLED_BY_POLICY_PATH ((NTSTATUS)0xC0000362L)
+#define STATUS_ACCESS_DISABLED_BY_POLICY_PUBLISHER ((NTSTATUS)0xC0000363L)
+#define STATUS_ACCESS_DISABLED_BY_POLICY_OTHER ((NTSTATUS)0xC0000364L)
+#define STATUS_FAILED_DRIVER_ENTRY ((NTSTATUS)0xC0000365L)
+#define STATUS_DEVICE_ENUMERATION_ERROR ((NTSTATUS)0xC0000366L)
+#define STATUS_WAIT_FOR_OPLOCK ((NTSTATUS)0x00000367L)
+#define STATUS_MOUNT_POINT_NOT_RESOLVED ((NTSTATUS)0xC0000368L)
+#define STATUS_INVALID_DEVICE_OBJECT_PARAMETER ((NTSTATUS)0xC0000369L)
+#define STATUS_MCA_OCCURED ((NTSTATUS)0xC000036AL)
+#define STATUS_DRIVER_BLOCKED_CRITICAL ((NTSTATUS)0xC000036BL)
+#define STATUS_DRIVER_BLOCKED ((NTSTATUS)0xC000036CL)
+#define STATUS_DRIVER_DATABASE_ERROR ((NTSTATUS)0xC000036DL)
+#define STATUS_SYSTEM_HIVE_TOO_LARGE ((NTSTATUS)0xC000036EL)
+#define STATUS_INVALID_IMPORT_OF_NON_DLL ((NTSTATUS)0xC000036FL)
+#define STATUS_DS_SHUTTING_DOWN ((NTSTATUS)0x40000370L)
+#define STATUS_SMARTCARD_WRONG_PIN ((NTSTATUS)0xC0000380L)
+#define STATUS_SMARTCARD_CARD_BLOCKED ((NTSTATUS)0xC0000381L)
+#define STATUS_SMARTCARD_CARD_NOT_AUTHENTICATED ((NTSTATUS)0xC0000382L)
+#define STATUS_SMARTCARD_NO_CARD ((NTSTATUS)0xC0000383L)
+#define STATUS_SMARTCARD_NO_KEY_CONTAINER ((NTSTATUS)0xC0000384L)
+#define STATUS_SMARTCARD_NO_CERTIFICATE ((NTSTATUS)0xC0000385L)
+#define STATUS_SMARTCARD_NO_KEYSET ((NTSTATUS)0xC0000386L)
+#define STATUS_SMARTCARD_IO_ERROR ((NTSTATUS)0xC0000387L)
+#define STATUS_DOWNGRADE_DETECTED ((NTSTATUS)0xC0000388L)
+#define STATUS_SMARTCARD_CERT_REVOKED ((NTSTATUS)0xC0000389L)
+#define STATUS_ISSUING_CA_UNTRUSTED ((NTSTATUS)0xC000038AL)
+#define STATUS_REVOCATION_OFFLINE_C ((NTSTATUS)0xC000038BL)
+#define STATUS_PKINIT_CLIENT_FAILURE ((NTSTATUS)0xC000038CL)
+#define STATUS_SMARTCARD_CERT_EXPIRED ((NTSTATUS)0xC000038DL)
+#define STATUS_DRIVER_FAILED_PRIOR_UNLOAD ((NTSTATUS)0xC000038EL)
+#define STATUS_WOW_ASSERTION ((NTSTATUS)0xC0009898L)
+#define RPC_NT_INVALID_STRING_BINDING ((NTSTATUS)0xC0020001L)
+#define RPC_NT_WRONG_KIND_OF_BINDING ((NTSTATUS)0xC0020002L)
+#define RPC_NT_INVALID_BINDING ((NTSTATUS)0xC0020003L)
+#define RPC_NT_PROTSEQ_NOT_SUPPORTED ((NTSTATUS)0xC0020004L)
+#define RPC_NT_INVALID_RPC_PROTSEQ ((NTSTATUS)0xC0020005L)
+#define RPC_NT_INVALID_STRING_UUID ((NTSTATUS)0xC0020006L)
+#define RPC_NT_INVALID_ENDPOINT_FORMAT ((NTSTATUS)0xC0020007L)
+#define RPC_NT_INVALID_NET_ADDR ((NTSTATUS)0xC0020008L)
+#define RPC_NT_NO_ENDPOINT_FOUND ((NTSTATUS)0xC0020009L)
+#define RPC_NT_INVALID_TIMEOUT ((NTSTATUS)0xC002000AL)
+#define RPC_NT_OBJECT_NOT_FOUND ((NTSTATUS)0xC002000BL)
+#define RPC_NT_ALREADY_REGISTERED ((NTSTATUS)0xC002000CL)
+#define RPC_NT_TYPE_ALREADY_REGISTERED ((NTSTATUS)0xC002000DL)
+#define RPC_NT_ALREADY_LISTENING ((NTSTATUS)0xC002000EL)
+#define RPC_NT_NO_PROTSEQS_REGISTERED ((NTSTATUS)0xC002000FL)
+#define RPC_NT_NOT_LISTENING ((NTSTATUS)0xC0020010L)
+#define RPC_NT_UNKNOWN_MGR_TYPE ((NTSTATUS)0xC0020011L)
+#define RPC_NT_UNKNOWN_IF ((NTSTATUS)0xC0020012L)
+#define RPC_NT_NO_BINDINGS ((NTSTATUS)0xC0020013L)
+#define RPC_NT_NO_PROTSEQS ((NTSTATUS)0xC0020014L)
+#define RPC_NT_CANT_CREATE_ENDPOINT ((NTSTATUS)0xC0020015L)
+#define RPC_NT_OUT_OF_RESOURCES ((NTSTATUS)0xC0020016L)
+#define RPC_NT_SERVER_UNAVAILABLE ((NTSTATUS)0xC0020017L)
+#define RPC_NT_SERVER_TOO_BUSY ((NTSTATUS)0xC0020018L)
+#define RPC_NT_INVALID_NETWORK_OPTIONS ((NTSTATUS)0xC0020019L)
+#define RPC_NT_NO_CALL_ACTIVE ((NTSTATUS)0xC002001AL)
+#define RPC_NT_CALL_FAILED ((NTSTATUS)0xC002001BL)
+#define RPC_NT_CALL_FAILED_DNE ((NTSTATUS)0xC002001CL)
+#define RPC_NT_PROTOCOL_ERROR ((NTSTATUS)0xC002001DL)
+#define RPC_NT_UNSUPPORTED_TRANS_SYN ((NTSTATUS)0xC002001FL)
+#define RPC_NT_UNSUPPORTED_TYPE ((NTSTATUS)0xC0020021L)
+#define RPC_NT_INVALID_TAG ((NTSTATUS)0xC0020022L)
+#define RPC_NT_INVALID_BOUND ((NTSTATUS)0xC0020023L)
+#define RPC_NT_NO_ENTRY_NAME ((NTSTATUS)0xC0020024L)
+#define RPC_NT_INVALID_NAME_SYNTAX ((NTSTATUS)0xC0020025L)
+#define RPC_NT_UNSUPPORTED_NAME_SYNTAX ((NTSTATUS)0xC0020026L)
+#define RPC_NT_UUID_NO_ADDRESS ((NTSTATUS)0xC0020028L)
+#define RPC_NT_DUPLICATE_ENDPOINT ((NTSTATUS)0xC0020029L)
+#define RPC_NT_UNKNOWN_AUTHN_TYPE ((NTSTATUS)0xC002002AL)
+#define RPC_NT_MAX_CALLS_TOO_SMALL ((NTSTATUS)0xC002002BL)
+#define RPC_NT_STRING_TOO_LONG ((NTSTATUS)0xC002002CL)
+#define RPC_NT_PROTSEQ_NOT_FOUND ((NTSTATUS)0xC002002DL)
+#define RPC_NT_PROCNUM_OUT_OF_RANGE ((NTSTATUS)0xC002002EL)
+#define RPC_NT_BINDING_HAS_NO_AUTH ((NTSTATUS)0xC002002FL)
+#define RPC_NT_UNKNOWN_AUTHN_SERVICE ((NTSTATUS)0xC0020030L)
+#define RPC_NT_UNKNOWN_AUTHN_LEVEL ((NTSTATUS)0xC0020031L)
+#define RPC_NT_INVALID_AUTH_IDENTITY ((NTSTATUS)0xC0020032L)
+#define RPC_NT_UNKNOWN_AUTHZ_SERVICE ((NTSTATUS)0xC0020033L)
+#define EPT_NT_INVALID_ENTRY ((NTSTATUS)0xC0020034L)
+#define EPT_NT_CANT_PERFORM_OP ((NTSTATUS)0xC0020035L)
+#define EPT_NT_NOT_REGISTERED ((NTSTATUS)0xC0020036L)
+#define RPC_NT_NOTHING_TO_EXPORT ((NTSTATUS)0xC0020037L)
+#define RPC_NT_INCOMPLETE_NAME ((NTSTATUS)0xC0020038L)
+#define RPC_NT_INVALID_VERS_OPTION ((NTSTATUS)0xC0020039L)
+#define RPC_NT_NO_MORE_MEMBERS ((NTSTATUS)0xC002003AL)
+#define RPC_NT_NOT_ALL_OBJS_UNEXPORTED ((NTSTATUS)0xC002003BL)
+#define RPC_NT_INTERFACE_NOT_FOUND ((NTSTATUS)0xC002003CL)
+#define RPC_NT_ENTRY_ALREADY_EXISTS ((NTSTATUS)0xC002003DL)
+#define RPC_NT_ENTRY_NOT_FOUND ((NTSTATUS)0xC002003EL)
+#define RPC_NT_NAME_SERVICE_UNAVAILABLE ((NTSTATUS)0xC002003FL)
+#define RPC_NT_INVALID_NAF_ID ((NTSTATUS)0xC0020040L)
+#define RPC_NT_CANNOT_SUPPORT ((NTSTATUS)0xC0020041L)
+#define RPC_NT_NO_CONTEXT_AVAILABLE ((NTSTATUS)0xC0020042L)
+#define RPC_NT_INTERNAL_ERROR ((NTSTATUS)0xC0020043L)
+#define RPC_NT_ZERO_DIVIDE ((NTSTATUS)0xC0020044L)
+#define RPC_NT_ADDRESS_ERROR ((NTSTATUS)0xC0020045L)
+#define RPC_NT_FP_DIV_ZERO ((NTSTATUS)0xC0020046L)
+#define RPC_NT_FP_UNDERFLOW ((NTSTATUS)0xC0020047L)
+#define RPC_NT_FP_OVERFLOW ((NTSTATUS)0xC0020048L)
+#define RPC_NT_NO_MORE_ENTRIES ((NTSTATUS)0xC0030001L)
+#define RPC_NT_SS_CHAR_TRANS_OPEN_FAIL ((NTSTATUS)0xC0030002L)
+#define RPC_NT_SS_CHAR_TRANS_SHORT_FILE ((NTSTATUS)0xC0030003L)
+#define RPC_NT_SS_IN_NULL_CONTEXT ((NTSTATUS)0xC0030004L)
+#define RPC_NT_SS_CONTEXT_MISMATCH ((NTSTATUS)0xC0030005L)
+#define RPC_NT_SS_CONTEXT_DAMAGED ((NTSTATUS)0xC0030006L)
+#define RPC_NT_SS_HANDLES_MISMATCH ((NTSTATUS)0xC0030007L)
+#define RPC_NT_SS_CANNOT_GET_CALL_HANDLE ((NTSTATUS)0xC0030008L)
+#define RPC_NT_NULL_REF_POINTER ((NTSTATUS)0xC0030009L)
+#define RPC_NT_ENUM_VALUE_OUT_OF_RANGE ((NTSTATUS)0xC003000AL)
+#define RPC_NT_BYTE_COUNT_TOO_SMALL ((NTSTATUS)0xC003000BL)
+#define RPC_NT_BAD_STUB_DATA ((NTSTATUS)0xC003000CL)
+#define RPC_NT_CALL_IN_PROGRESS ((NTSTATUS)0xC0020049L)
+#define RPC_NT_NO_MORE_BINDINGS ((NTSTATUS)0xC002004AL)
+#define RPC_NT_GROUP_MEMBER_NOT_FOUND ((NTSTATUS)0xC002004BL)
+#define EPT_NT_CANT_CREATE ((NTSTATUS)0xC002004CL)
+#define RPC_NT_INVALID_OBJECT ((NTSTATUS)0xC002004DL)
+#define RPC_NT_NO_INTERFACES ((NTSTATUS)0xC002004FL)
+#define RPC_NT_CALL_CANCELLED ((NTSTATUS)0xC0020050L)
+#define RPC_NT_BINDING_INCOMPLETE ((NTSTATUS)0xC0020051L)
+#define RPC_NT_COMM_FAILURE ((NTSTATUS)0xC0020052L)
+#define RPC_NT_UNSUPPORTED_AUTHN_LEVEL ((NTSTATUS)0xC0020053L)
+#define RPC_NT_NO_PRINC_NAME ((NTSTATUS)0xC0020054L)
+#define RPC_NT_NOT_RPC_ERROR ((NTSTATUS)0xC0020055L)
+#define RPC_NT_UUID_LOCAL_ONLY ((NTSTATUS)0x40020056L)
+#define RPC_NT_SEC_PKG_ERROR ((NTSTATUS)0xC0020057L)
+#define RPC_NT_NOT_CANCELLED ((NTSTATUS)0xC0020058L)
+#define RPC_NT_INVALID_ES_ACTION ((NTSTATUS)0xC0030059L)
+#define RPC_NT_WRONG_ES_VERSION ((NTSTATUS)0xC003005AL)
+#define RPC_NT_WRONG_STUB_VERSION ((NTSTATUS)0xC003005BL)
+#define RPC_NT_INVALID_PIPE_OBJECT ((NTSTATUS)0xC003005CL)
+#define RPC_NT_INVALID_PIPE_OPERATION ((NTSTATUS)0xC003005DL)
+#define RPC_NT_WRONG_PIPE_VERSION ((NTSTATUS)0xC003005EL)
+#define RPC_NT_PIPE_CLOSED ((NTSTATUS)0xC003005FL)
+#define RPC_NT_PIPE_DISCIPLINE_ERROR ((NTSTATUS)0xC0030060L)
+#define RPC_NT_PIPE_EMPTY ((NTSTATUS)0xC0030061L)
+#define RPC_NT_INVALID_ASYNC_HANDLE ((NTSTATUS)0xC0020062L)
+#define RPC_NT_INVALID_ASYNC_CALL ((NTSTATUS)0xC0020063L)
+#define RPC_NT_SEND_INCOMPLETE ((NTSTATUS)0x400200AFL)
+#define STATUS_ACPI_INVALID_OPCODE ((NTSTATUS)0xC0140001L)
+#define STATUS_ACPI_STACK_OVERFLOW ((NTSTATUS)0xC0140002L)
+#define STATUS_ACPI_ASSERT_FAILED ((NTSTATUS)0xC0140003L)
+#define STATUS_ACPI_INVALID_INDEX ((NTSTATUS)0xC0140004L)
+#define STATUS_ACPI_INVALID_ARGUMENT ((NTSTATUS)0xC0140005L)
+#define STATUS_ACPI_FATAL ((NTSTATUS)0xC0140006L)
+#define STATUS_ACPI_INVALID_SUPERNAME ((NTSTATUS)0xC0140007L)
+#define STATUS_ACPI_INVALID_ARGTYPE ((NTSTATUS)0xC0140008L)
+#define STATUS_ACPI_INVALID_OBJTYPE ((NTSTATUS)0xC0140009L)
+#define STATUS_ACPI_INVALID_TARGETTYPE ((NTSTATUS)0xC014000AL)
+#define STATUS_ACPI_INCORRECT_ARGUMENT_COUNT ((NTSTATUS)0xC014000BL)
+#define STATUS_ACPI_ADDRESS_NOT_MAPPED ((NTSTATUS)0xC014000CL)
+#define STATUS_ACPI_INVALID_EVENTTYPE ((NTSTATUS)0xC014000DL)
+#define STATUS_ACPI_HANDLER_COLLISION ((NTSTATUS)0xC014000EL)
+#define STATUS_ACPI_INVALID_DATA ((NTSTATUS)0xC014000FL)
+#define STATUS_ACPI_INVALID_REGION ((NTSTATUS)0xC0140010L)
+#define STATUS_ACPI_INVALID_ACCESS_SIZE ((NTSTATUS)0xC0140011L)
+#define STATUS_ACPI_ACQUIRE_GLOBAL_LOCK ((NTSTATUS)0xC0140012L)
+#define STATUS_ACPI_ALREADY_INITIALIZED ((NTSTATUS)0xC0140013L)
+#define STATUS_ACPI_NOT_INITIALIZED ((NTSTATUS)0xC0140014L)
+#define STATUS_ACPI_INVALID_MUTEX_LEVEL ((NTSTATUS)0xC0140015L)
+#define STATUS_ACPI_MUTEX_NOT_OWNED ((NTSTATUS)0xC0140016L)
+#define STATUS_ACPI_MUTEX_NOT_OWNER ((NTSTATUS)0xC0140017L)
+#define STATUS_ACPI_RS_ACCESS ((NTSTATUS)0xC0140018L)
+#define STATUS_ACPI_INVALID_TABLE ((NTSTATUS)0xC0140019L)
+#define STATUS_ACPI_REG_HANDLER_FAILED ((NTSTATUS)0xC0140020L)
+#define STATUS_ACPI_POWER_REQUEST_FAILED ((NTSTATUS)0xC0140021L)
+#define STATUS_CTX_WINSTATION_NAME_INVALID ((NTSTATUS)0xC00A0001L)
+#define STATUS_CTX_INVALID_PD ((NTSTATUS)0xC00A0002L)
+#define STATUS_CTX_PD_NOT_FOUND ((NTSTATUS)0xC00A0003L)
+#define STATUS_CTX_CDM_CONNECT ((NTSTATUS)0x400A0004L)
+#define STATUS_CTX_CDM_DISCONNECT ((NTSTATUS)0x400A0005L)
+#define STATUS_CTX_CLOSE_PENDING ((NTSTATUS)0xC00A0006L)
+#define STATUS_CTX_NO_OUTBUF ((NTSTATUS)0xC00A0007L)
+#define STATUS_CTX_MODEM_INF_NOT_FOUND ((NTSTATUS)0xC00A0008L)
+#define STATUS_CTX_INVALID_MODEMNAME ((NTSTATUS)0xC00A0009L)
+#define STATUS_CTX_RESPONSE_ERROR ((NTSTATUS)0xC00A000AL)
+#define STATUS_CTX_MODEM_RESPONSE_TIMEOUT ((NTSTATUS)0xC00A000BL)
+#define STATUS_CTX_MODEM_RESPONSE_NO_CARRIER ((NTSTATUS)0xC00A000CL)
+#define STATUS_CTX_MODEM_RESPONSE_NO_DIALTONE ((NTSTATUS)0xC00A000DL)
+#define STATUS_CTX_MODEM_RESPONSE_BUSY ((NTSTATUS)0xC00A000EL)
+#define STATUS_CTX_MODEM_RESPONSE_VOICE ((NTSTATUS)0xC00A000FL)
+#define STATUS_CTX_TD_ERROR ((NTSTATUS)0xC00A0010L)
+#define STATUS_CTX_LICENSE_CLIENT_INVALID ((NTSTATUS)0xC00A0012L)
+#define STATUS_CTX_LICENSE_NOT_AVAILABLE ((NTSTATUS)0xC00A0013L)
+#define STATUS_CTX_LICENSE_EXPIRED ((NTSTATUS)0xC00A0014L)
+#define STATUS_CTX_WINSTATION_NOT_FOUND ((NTSTATUS)0xC00A0015L)
+#define STATUS_CTX_WINSTATION_NAME_COLLISION ((NTSTATUS)0xC00A0016L)
+#define STATUS_CTX_WINSTATION_BUSY ((NTSTATUS)0xC00A0017L)
+#define STATUS_CTX_BAD_VIDEO_MODE ((NTSTATUS)0xC00A0018L)
+#define STATUS_CTX_GRAPHICS_INVALID ((NTSTATUS)0xC00A0022L)
+#define STATUS_CTX_NOT_CONSOLE ((NTSTATUS)0xC00A0024L)
+#define STATUS_CTX_CLIENT_QUERY_TIMEOUT ((NTSTATUS)0xC00A0026L)
+#define STATUS_CTX_CONSOLE_DISCONNECT ((NTSTATUS)0xC00A0027L)
+#define STATUS_CTX_CONSOLE_CONNECT ((NTSTATUS)0xC00A0028L)
+#define STATUS_CTX_SHADOW_DENIED ((NTSTATUS)0xC00A002AL)
+#define STATUS_CTX_WINSTATION_ACCESS_DENIED ((NTSTATUS)0xC00A002BL)
+#define STATUS_CTX_INVALID_WD ((NTSTATUS)0xC00A002EL)
+#define STATUS_CTX_WD_NOT_FOUND ((NTSTATUS)0xC00A002FL)
+#define STATUS_CTX_SHADOW_INVALID ((NTSTATUS)0xC00A0030L)
+#define STATUS_CTX_SHADOW_DISABLED ((NTSTATUS)0xC00A0031L)
+#define STATUS_RDP_PROTOCOL_ERROR ((NTSTATUS)0xC00A0032L)
+#define STATUS_CTX_CLIENT_LICENSE_NOT_SET ((NTSTATUS)0xC00A0033L)
+#define STATUS_CTX_CLIENT_LICENSE_IN_USE ((NTSTATUS)0xC00A0034L)
+#define STATUS_CTX_SHADOW_ENDED_BY_MODE_CHANGE ((NTSTATUS)0xC00A0035L)
+#define STATUS_CTX_SHADOW_NOT_RUNNING ((NTSTATUS)0xC00A0036L)
+#define STATUS_PNP_BAD_MPS_TABLE ((NTSTATUS)0xC0040035L)
+#define STATUS_PNP_TRANSLATION_FAILED ((NTSTATUS)0xC0040036L)
+#define STATUS_PNP_IRQ_TRANSLATION_FAILED ((NTSTATUS)0xC0040037L)
+#define STATUS_SXS_SECTION_NOT_FOUND ((NTSTATUS)0xC0150001L)
+#define STATUS_SXS_CANT_GEN_ACTCTX ((NTSTATUS)0xC0150002L)
+#define STATUS_SXS_INVALID_ACTCTXDATA_FORMAT ((NTSTATUS)0xC0150003L)
+#define STATUS_SXS_ASSEMBLY_NOT_FOUND ((NTSTATUS)0xC0150004L)
+#define STATUS_SXS_MANIFEST_FORMAT_ERROR ((NTSTATUS)0xC0150005L)
+#define STATUS_SXS_MANIFEST_PARSE_ERROR ((NTSTATUS)0xC0150006L)
+#define STATUS_SXS_ACTIVATION_CONTEXT_DISABLED ((NTSTATUS)0xC0150007L)
+#define STATUS_SXS_KEY_NOT_FOUND ((NTSTATUS)0xC0150008L)
+#define STATUS_SXS_VERSION_CONFLICT ((NTSTATUS)0xC0150009L)
+#define STATUS_SXS_WRONG_SECTION_TYPE ((NTSTATUS)0xC015000AL)
+#define STATUS_SXS_THREAD_QUERIES_DISABLED ((NTSTATUS)0xC015000BL)
+#define STATUS_SXS_ASSEMBLY_MISSING ((NTSTATUS)0xC015000CL)
+#define STATUS_SXS_RELEASE_ACTIVATION_CONTEXT ((NTSTATUS)0x4015000DL)
+#define STATUS_SXS_PROCESS_DEFAULT_ALREADY_SET ((NTSTATUS)0xC015000EL)
+#define STATUS_SXS_EARLY_DEACTIVATION ((NTSTATUS)0xC015000FL)
+#define STATUS_SXS_INVALID_DEACTIVATION ((NTSTATUS)0xC0150010L)
+#define STATUS_SXS_MULTIPLE_DEACTIVATION ((NTSTATUS)0xC0150011L)
+#define STATUS_SXS_SYSTEM_DEFAULT_ACTIVATION_CONTEXT_EMPTY ((NTSTATUS)0xC0150012L)
+#define STATUS_SXS_PROCESS_TERMINATION_REQUESTED ((NTSTATUS)0xC0150013L)
+#define STATUS_CLUSTER_INVALID_NODE ((NTSTATUS)0xC0130001L)
+#define STATUS_CLUSTER_NODE_EXISTS ((NTSTATUS)0xC0130002L)
+#define STATUS_CLUSTER_JOIN_IN_PROGRESS ((NTSTATUS)0xC0130003L)
+#define STATUS_CLUSTER_NODE_NOT_FOUND ((NTSTATUS)0xC0130004L)
+#define STATUS_CLUSTER_LOCAL_NODE_NOT_FOUND ((NTSTATUS)0xC0130005L)
+#define STATUS_CLUSTER_NETWORK_EXISTS ((NTSTATUS)0xC0130006L)
+#define STATUS_CLUSTER_NETWORK_NOT_FOUND ((NTSTATUS)0xC0130007L)
+#define STATUS_CLUSTER_NETINTERFACE_EXISTS ((NTSTATUS)0xC0130008L)
+#define STATUS_CLUSTER_NETINTERFACE_NOT_FOUND ((NTSTATUS)0xC0130009L)
+#define STATUS_CLUSTER_INVALID_REQUEST ((NTSTATUS)0xC013000AL)
+#define STATUS_CLUSTER_INVALID_NETWORK_PROVIDER ((NTSTATUS)0xC013000BL)
+#define STATUS_CLUSTER_NODE_DOWN ((NTSTATUS)0xC013000CL)
+#define STATUS_CLUSTER_NODE_UNREACHABLE ((NTSTATUS)0xC013000DL)
+#define STATUS_CLUSTER_NODE_NOT_MEMBER ((NTSTATUS)0xC013000EL)
+#define STATUS_CLUSTER_JOIN_NOT_IN_PROGRESS ((NTSTATUS)0xC013000FL)
+#define STATUS_CLUSTER_INVALID_NETWORK ((NTSTATUS)0xC0130010L)
+#define STATUS_CLUSTER_NO_NET_ADAPTERS ((NTSTATUS)0xC0130011L)
+#define STATUS_CLUSTER_NODE_UP ((NTSTATUS)0xC0130012L)
+#define STATUS_CLUSTER_NODE_PAUSED ((NTSTATUS)0xC0130013L)
+#define STATUS_CLUSTER_NODE_NOT_PAUSED ((NTSTATUS)0xC0130014L)
+#define STATUS_CLUSTER_NO_SECURITY_CONTEXT ((NTSTATUS)0xC0130015L)
+#define STATUS_CLUSTER_NETWORK_NOT_INTERNAL ((NTSTATUS)0xC0130016L)
+#define STATUS_CLUSTER_POISONED ((NTSTATUS)0xC0130017L)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tcc/include/winapi/ddk/parallel.h b/tcc/include/winapi/ddk/parallel.h
new file mode 100644
index 0000000..06230b8
--- /dev/null
+++ b/tcc/include/winapi/ddk/parallel.h
@@ -0,0 +1,277 @@
+/*
+ * parallel.h
+ *
+ * ParPort driver interface
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __PARALLEL_H
+#define __PARALLEL_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+#include "ntddpar.h"
+
+#define DD_PARALLEL_PORT_BASE_NAME "ParallelPort"
+#define DD_PARALLEL_PORT_BASE_NAME_U L"ParallelPort"
+
+#define IOCTL_INTERNAL_DESELECT_DEVICE \
+ CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 24, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_INTERNAL_GET_MORE_PARALLEL_PORT_INFO \
+ CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 17, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_INTERNAL_GET_PARALLEL_PNP_INFO \
+ CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 21, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_INTERNAL_GET_PARALLEL_PORT_INFO \
+ CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_INTERNAL_INIT_1284_3_BUS \
+ CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 22, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_INTERNAL_PARALLEL_CLEAR_CHIP_MODE \
+ CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 20, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_INTERNAL_PARALLEL_CONNECT_INTERRUPT \
+ CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 13, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_INTERNAL_PARALLEL_DISCONNECT_INTERRUPT \
+ CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 14, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_INTERNAL_PARALLEL_PORT_ALLOCATE \
+ CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 11, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_INTERNAL_PARALLEL_PORT_FREE \
+ CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 40, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_INTERNAL_PARALLEL_SET_CHIP_MODE \
+ CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 19, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_INTERNAL_RELEASE_PARALLEL_PORT_INFO \
+ CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_INTERNAL_SELECT_DEVICE \
+ CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 23, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+
+typedef struct _PARALLEL_1284_COMMAND {
+ UCHAR ID;
+ UCHAR Port;
+ ULONG CommandFlags;
+} PARALLEL_1284_COMMAND, *PPARALLEL_1284_COMMAND;
+
+/* PARALLEL_1284_COMMAND.CommandFlags */
+#define PAR_END_OF_CHAIN_DEVICE 0x00000001
+#define PAR_HAVE_PORT_KEEP_PORT 0x00000002
+
+typedef struct _MORE_PARALLEL_PORT_INFORMATION {
+ INTERFACE_TYPE InterfaceType;
+ ULONG BusNumber;
+ ULONG InterruptLevel;
+ ULONG InterruptVector;
+ KAFFINITY InterruptAffinity;
+ KINTERRUPT_MODE InterruptMode;
+} MORE_PARALLEL_PORT_INFORMATION, *PMORE_PARALLEL_PORT_INFORMATION;
+
+typedef NTSTATUS DDKAPI
+(*PPARALLEL_SET_CHIP_MODE)(
+ /*IN*/ PVOID SetChipContext,
+ /*IN*/ UCHAR ChipMode);
+
+typedef NTSTATUS DDKAPI
+(*PPARALLEL_CLEAR_CHIP_MODE)(
+ /*IN*/ PVOID ClearChipContext,
+ /*IN*/ UCHAR ChipMode);
+
+typedef NTSTATUS DDKAPI
+(*PPARCHIP_CLEAR_CHIP_MODE)(
+ /*IN*/ PVOID ClearChipContext,
+ /*IN*/ UCHAR ChipMode);
+
+typedef NTSTATUS DDKAPI
+(*PPARALLEL_TRY_SELECT_ROUTINE)(
+ /*IN*/ PVOID TrySelectContext,
+ /*IN*/ PVOID TrySelectCommand);
+
+typedef NTSTATUS DDKAPI
+(*PPARALLEL_DESELECT_ROUTINE)(
+ /*IN*/ PVOID DeselectContext,
+ /*IN*/ PVOID DeselectCommand);
+
+/* PARALLEL_PNP_INFORMATION.HardwareCapabilities */
+#define PPT_NO_HARDWARE_PRESENT 0x00000000
+#define PPT_ECP_PRESENT 0x00000001
+#define PPT_EPP_PRESENT 0x00000002
+#define PPT_EPP_32_PRESENT 0x00000004
+#define PPT_BYTE_PRESENT 0x00000008
+#define PPT_BIDI_PRESENT 0x00000008
+#define PPT_1284_3_PRESENT 0x00000010
+
+typedef struct _PARALLEL_PNP_INFORMATION {
+ PHYSICAL_ADDRESS OriginalEcpController;
+ PUCHAR EcpController;
+ ULONG SpanOfEcpController;
+ ULONG PortNumber;
+ ULONG HardwareCapabilities;
+ PPARALLEL_SET_CHIP_MODE TrySetChipMode;
+ PPARALLEL_CLEAR_CHIP_MODE ClearChipMode;
+ ULONG FifoDepth;
+ ULONG FifoWidth;
+ PHYSICAL_ADDRESS EppControllerPhysicalAddress;
+ ULONG SpanOfEppController;
+ ULONG Ieee1284_3DeviceCount;
+ PPARALLEL_TRY_SELECT_ROUTINE TrySelectDevice;
+ PPARALLEL_DESELECT_ROUTINE DeselectDevice;
+ PVOID Context;
+ ULONG CurrentMode;
+ PWSTR PortName;
+} PARALLEL_PNP_INFORMATION, *PPARALLEL_PNP_INFORMATION;
+
+typedef BOOLEAN DDKAPI
+(*PPARALLEL_TRY_ALLOCATE_ROUTINE)(
+ /*IN*/ PVOID TryAllocateContext);
+
+typedef VOID DDKAPI
+(*PPARALLEL_FREE_ROUTINE)(
+ /*IN*/ PVOID FreeContext);
+
+typedef ULONG DDKAPI
+(*PPARALLEL_QUERY_WAITERS_ROUTINE)(
+ /*IN*/ PVOID QueryAllocsContext);
+
+typedef struct _PARALLEL_PORT_INFORMATION {
+ PHYSICAL_ADDRESS OriginalController;
+ PUCHAR Controller;
+ ULONG SpanOfController;
+ PPARALLEL_TRY_ALLOCATE_ROUTINE TryAllocatePort;
+ PPARALLEL_FREE_ROUTINE FreePort;
+ PPARALLEL_QUERY_WAITERS_ROUTINE QueryNumWaiters;
+ PVOID Context;
+} PARALLEL_PORT_INFORMATION, *PPARALLEL_PORT_INFORMATION;
+
+/* PARALLEL_CHIP_MODE.ModeFlags */
+#define INITIAL_MODE 0x00
+#define PARCHIP_ECR_ARBITRATOR 0x01
+
+typedef struct _PARALLEL_CHIP_MODE {
+ UCHAR ModeFlags;
+ BOOLEAN success;
+} PARALLEL_CHIP_MODE, *PPARALLEL_CHIP_MODE;
+
+typedef VOID DDKAPI
+(*PPARALLEL_DEFERRED_ROUTINE)(
+ /*IN*/ PVOID DeferredContext);
+
+typedef struct _PARALLEL_INTERRUPT_SERVICE_ROUTINE {
+ PKSERVICE_ROUTINE InterruptServiceRoutine;
+ PVOID InterruptServiceContext;
+ PPARALLEL_DEFERRED_ROUTINE DeferredPortCheckRoutine;
+ PVOID DeferredPortCheckContext;
+} PARALLEL_INTERRUPT_SERVICE_ROUTINE, *PPARALLEL_INTERRUPT_SERVICE_ROUTINE;
+
+
+#define IOCTL_INTERNAL_DISCONNECT_IDLE \
+ CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 32, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_INTERNAL_LOCK_PORT \
+ CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 37, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_INTERNAL_LOCK_PORT_NO_SELECT \
+ CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 52, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_INTERNAL_PARCLASS_CONNECT \
+ CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 30, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_INTERNAL_PARCLASS_DISCONNECT \
+ CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 31, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_INTERNAL_UNLOCK_PORT \
+ CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 38, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_INTERNAL_UNLOCK_PORT_NO_DESELECT \
+ CTL_CODE (FILE_DEVICE_PARALLEL_PORT, 53, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+typedef USHORT DDKAPI
+(*PDETERMINE_IEEE_MODES)(
+ /*IN*/ PVOID Context);
+
+typedef enum _PARALLEL_SAFETY {
+ SAFE_MODE,
+ UNSAFE_MODE
+} PARALLEL_SAFETY;
+
+typedef NTSTATUS DDKAPI
+(*PNEGOTIATE_IEEE_MODE)(
+ /*IN*/ PVOID Context,
+ /*IN*/ USHORT ModeMaskFwd,
+ /*IN*/ USHORT ModeMaskRev,
+ /*IN*/ PARALLEL_SAFETY ModeSafety,
+ /*IN*/ BOOLEAN IsForward);
+
+typedef NTSTATUS DDKAPI
+(*PTERMINATE_IEEE_MODE)(
+ /*IN*/ PVOID Context);
+
+typedef NTSTATUS DDKAPI
+(*PPARALLEL_IEEE_FWD_TO_REV)(
+ /*IN*/ PVOID Context);
+
+typedef NTSTATUS DDKAPI
+(*PPARALLEL_IEEE_REV_TO_FWD)(
+ /*IN*/ PVOID Context);
+
+typedef NTSTATUS DDKAPI
+(*PPARALLEL_READ)(
+ /*IN*/ PVOID Context,
+ /*OUT*/ PVOID Buffer,
+ /*IN*/ ULONG NumBytesToRead,
+ /*OUT*/ PULONG NumBytesRead,
+ /*IN*/ UCHAR Channel);
+
+typedef NTSTATUS DDKAPI
+(*PPARALLEL_WRITE)(
+ /*IN*/ PVOID Context,
+ /*OUT*/ PVOID Buffer,
+ /*IN*/ ULONG NumBytesToWrite,
+ /*OUT*/ PULONG NumBytesWritten,
+ /*IN*/ UCHAR Channel);
+
+typedef NTSTATUS DDKAPI
+(*PPARALLEL_TRYSELECT_DEVICE)(
+ /*IN*/ PVOID Context,
+ /*IN*/ PARALLEL_1284_COMMAND Command);
+
+typedef NTSTATUS DDKAPI
+(*PPARALLEL_DESELECT_DEVICE)(
+ /*IN*/ PVOID Context,
+ /*IN*/ PARALLEL_1284_COMMAND Command);
+
+typedef struct _PARCLASS_INFORMATION {
+ PUCHAR Controller;
+ PUCHAR EcrController;
+ ULONG SpanOfController;
+ PDETERMINE_IEEE_MODES DetermineIeeeModes;
+ PNEGOTIATE_IEEE_MODE NegotiateIeeeMode;
+ PTERMINATE_IEEE_MODE TerminateIeeeMode;
+ PPARALLEL_IEEE_FWD_TO_REV IeeeFwdToRevMode;
+ PPARALLEL_IEEE_REV_TO_FWD IeeeRevToFwdMode;
+ PPARALLEL_READ ParallelRead;
+ PPARALLEL_WRITE ParallelWrite;
+ PVOID ParclassContext;
+ ULONG HardwareCapabilities;
+ ULONG FifoDepth;
+ ULONG FifoWidth;
+ PPARALLEL_TRYSELECT_DEVICE ParallelTryselect;
+ PPARALLEL_DESELECT_DEVICE ParallelDeSelect;
+} PARCLASS_INFORMATION, *PPARCLASS_INFORMATION;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __PARALLEL_H */
diff --git a/tcc/include/winapi/ddk/pfhook.h b/tcc/include/winapi/ddk/pfhook.h
new file mode 100644
index 0000000..1b42bfa
--- /dev/null
+++ b/tcc/include/winapi/ddk/pfhook.h
@@ -0,0 +1,76 @@
+/*
+ * pfhook.h
+ *
+ * Packet filter API
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __PFHOOK_H
+#define __PFHOOK_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+
+#define DD_IPFLTRDRVR_DEVICE_NAME L"\\Device\\IPFILTERDRIVER"
+
+#define INVALID_PF_IF_INDEX 0xffffffff
+#define ZERO_PF_IP_ADDR 0
+
+typedef ULONG IPAddr;
+
+typedef enum _PF_FORWARD_ACTION {
+ PF_FORWARD = 0,
+ PF_DROP = 1,
+ PF_PASS = 2,
+ PF_ICMP_ON_DROP = 3
+} PF_FORWARD_ACTION;
+
+typedef PF_FORWARD_ACTION STDCALL
+(*PacketFilterExtensionPtr)(
+ /*IN*/ unsigned char *PacketHeader,
+ /*IN*/ unsigned char *Packet,
+ /*IN*/ unsigned int PacketLength,
+ /*IN*/ unsigned int RecvInterfaceIndex,
+ /*IN*/ unsigned int SendInterfaceIndex,
+ /*IN*/ IPAddr RecvLinkNextHop,
+ /*IN*/ IPAddr SendLinkNextHop);
+
+typedef struct _PF_SET_EXTENSION_HOOK_INFO {
+ PacketFilterExtensionPtr ExtensionPointer;
+} PF_SET_EXTENSION_HOOK_INFO, *PPF_SET_EXTENSION_HOOK_INFO;
+
+#define FSCTL_IPFLTRDRVR_BASE FILE_DEVICE_NETWORK
+
+#define _IPFLTRDRVR_CTL_CODE(function, method, access) \
+ CTL_CODE(FSCTL_IPFLTRDRVR_BASE, function, method, access)
+
+#define IOCTL_PF_SET_EXTENSION_POINTER \
+ _IPFLTRDRVR_CTL_CODE(22, METHOD_BUFFERED, FILE_WRITE_ACCESS)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __PFHOOK_H */
diff --git a/tcc/include/winapi/ddk/poclass.h b/tcc/include/winapi/ddk/poclass.h
new file mode 100644
index 0000000..2a45ad2
--- /dev/null
+++ b/tcc/include/winapi/ddk/poclass.h
@@ -0,0 +1,118 @@
+/*
+ * poclass.h
+ *
+ * Power policy driver interface
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __POCLASS_H
+#define __POCLASS_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+#include "batclass.h"
+
+DEFINE_GUID(GUID_CLASS_INPUT,
+ 0x4D1E55B2L, 0xF16F, 0x11CF, 0x88, 0xCB, 0x00, 0x11, 0x11, 0x00, 0x00, 0x30);
+
+DEFINE_GUID(GUID_DEVICE_LID,
+ 0x4AFA3D52L, 0x74A7, 0x11d0, 0xbe, 0x5e, 0x00, 0xA0, 0xC9, 0x06, 0x28, 0x57);
+
+DEFINE_GUID(GUID_DEVICE_MEMORY,
+ 0x3fd0f03dL, 0x92e0, 0x45fb, 0xb7, 0x5c, 0x5e, 0xd8, 0xff, 0xb0, 0x10, 0x21);
+
+DEFINE_GUID(GUID_DEVICE_MESSAGE_INDICATOR,
+ 0XCD48A365L, 0xfa94, 0x4ce2, 0xa2, 0x32, 0xa1, 0xb7, 0x64, 0xe5, 0xd8, 0xb4);
+
+DEFINE_GUID(GUID_DEVICE_PROCESSOR,
+ 0x97fadb10L, 0x4e33, 0x40ae, 0x35, 0x9c, 0x8b, 0xef, 0x02, 0x9d, 0xbd, 0xd0);
+
+DEFINE_GUID(GUID_DEVICE_SYS_BUTTON,
+ 0x4AFA3D53L, 0x74A7, 0x11d0, 0xbe, 0x5e, 0x00, 0xA0, 0xC9, 0x06, 0x28, 0x57);
+
+DEFINE_GUID(GUID_DEVICE_THERMAL_ZONE,
+ 0x4AFA3D51L, 0x74A7, 0x11d0, 0xbe, 0x5e, 0x00, 0xA0, 0xC9, 0x06, 0x28, 0x57);
+
+
+#define IOCTL_GET_PROCESSOR_OBJ_INFO \
+ CTL_CODE(FILE_DEVICE_BATTERY, 0x60, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_GET_SYS_BUTTON_CAPS \
+ CTL_CODE(FILE_DEVICE_BATTERY, 0x50, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_GET_SYS_BUTTON_EVENT \
+ CTL_CODE(FILE_DEVICE_BATTERY, 0x51, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_SET_SYS_MESSAGE_INDICATOR \
+ CTL_CODE(FILE_DEVICE_BATTERY, 0x70, METHOD_BUFFERED, FILE_WRITE_ACCESS)
+
+#define IOCTL_NOTIFY_SWITCH_EVENT \
+ CTL_CODE(FILE_DEVICE_BATTERY, 0x40, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_THERMAL_QUERY_INFORMATION \
+ CTL_CODE(FILE_DEVICE_BATTERY, 0x20, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_THERMAL_SET_COOLING_POLICY \
+ CTL_CODE(FILE_DEVICE_BATTERY, 0x21, METHOD_BUFFERED, FILE_WRITE_ACCESS)
+
+#define IOCTL_QUERY_LID \
+ CTL_CODE(FILE_DEVICE_BATTERY, 0x30, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_RUN_ACTIVE_COOLING_METHOD \
+ CTL_CODE(FILE_DEVICE_BATTERY, 0x22, METHOD_BUFFERED, FILE_WRITE_ACCESS)
+
+#define SYS_BUTTON_POWER 0x00000001
+#define SYS_BUTTON_SLEEP 0x00000002
+#define SYS_BUTTON_LID 0x00000004
+#define SYS_BUTTON_WAKE 0x80000000
+
+#define MAX_ACTIVE_COOLING_LEVELS 10
+#define ACTIVE_COOLING 0
+#define PASSIVE_COOLING 1
+
+typedef struct _THERMAL_INFORMATION {
+ ULONG ThermalStamp;
+ ULONG ThermalConstant1;
+ ULONG ThermalConstant2;
+ KAFFINITY Processors;
+ ULONG SamplingPeriod;
+ ULONG CurrentTemperature;
+ ULONG PassiveTripPoint;
+ ULONG CriticalTripPoint;
+ UCHAR ActiveTripPointCount;
+ ULONG ActiveTripPoint[MAX_ACTIVE_COOLING_LEVELS];
+} THERMAL_INFORMATION, *PTHERMAL_INFORMATION;
+
+typedef struct _PROCESSOR_OBJECT_INFO {
+ ULONG PhysicalID;
+ ULONG PBlkAddress;
+ UCHAR PBlkLength;
+} PROCESSOR_OBJECT_INFO, *PPROCESSOR_OBJECT_INFO;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __POCLASS_H */
diff --git a/tcc/include/winapi/ddk/scsi.h b/tcc/include/winapi/ddk/scsi.h
new file mode 100644
index 0000000..885db66
--- /dev/null
+++ b/tcc/include/winapi/ddk/scsi.h
@@ -0,0 +1,1701 @@
+/*
+ * scsi.h
+ *
+ * SCSI port and class interface.
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __SCSI_H
+#define __SCSI_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+
+typedef union _CDB {
+ struct _CDB6GENERIC {
+ UCHAR OperationCode;
+ UCHAR Immediate : 1;
+ UCHAR CommandUniqueBits : 4;
+ UCHAR LogicalUnitNumber : 3;
+ UCHAR CommandUniqueBytes[3];
+ UCHAR Link : 1;
+ UCHAR Flag : 1;
+ UCHAR Reserved : 4;
+ UCHAR VendorUnique : 2;
+ } CDB6GENERIC, *PCDB6GENERIC;
+
+ struct _CDB6READWRITE {
+ UCHAR OperationCode;
+ UCHAR LogicalBlockMsb1 : 5;
+ UCHAR LogicalUnitNumber : 3;
+ UCHAR LogicalBlockMsb0;
+ UCHAR LogicalBlockLsb;
+ UCHAR TransferBlocks;
+ UCHAR Control;
+ } CDB6READWRITE, *PCDB6READWRITE;
+
+ struct _CDB6INQUIRY {
+ UCHAR OperationCode;
+ UCHAR Reserved1 : 5;
+ UCHAR LogicalUnitNumber : 3;
+ UCHAR PageCode;
+ UCHAR IReserved;
+ UCHAR AllocationLength;
+ UCHAR Control;
+ } CDB6INQUIRY, *PCDB6INQUIRY;
+
+ struct _CDB6INQUIRY3 {
+ UCHAR OperationCode;
+ UCHAR EnableVitalProductData : 1;
+ UCHAR CommandSupportData : 1;
+ UCHAR Reserved1 : 6;
+ UCHAR PageCode;
+ UCHAR Reserved2;
+ UCHAR AllocationLength;
+ UCHAR Control;
+ } CDB6INQUIRY3, *PCDB6INQUIRY3;
+
+ struct _CDB6VERIFY {
+ UCHAR OperationCode;
+ UCHAR Fixed : 1;
+ UCHAR ByteCompare : 1;
+ UCHAR Immediate : 1;
+ UCHAR Reserved : 2;
+ UCHAR LogicalUnitNumber : 3;
+ UCHAR VerificationLength[3];
+ UCHAR Control;
+ } CDB6VERIFY, *PCDB6VERIFY;
+
+ struct _CDB6FORMAT {
+ UCHAR OperationCode;
+ UCHAR FormatControl : 5;
+ UCHAR LogicalUnitNumber : 3;
+ UCHAR FReserved1;
+ UCHAR InterleaveMsb;
+ UCHAR InterleaveLsb;
+ UCHAR FReserved2;
+ } CDB6FORMAT, *PCDB6FORMAT;
+
+ struct _CDB10 {
+ UCHAR OperationCode;
+ UCHAR RelativeAddress : 1;
+ UCHAR Reserved1 : 2;
+ UCHAR ForceUnitAccess : 1;
+ UCHAR DisablePageOut : 1;
+ UCHAR LogicalUnitNumber : 3;
+ UCHAR LogicalBlockByte0;
+ UCHAR LogicalBlockByte1;
+ UCHAR LogicalBlockByte2;
+ UCHAR LogicalBlockByte3;
+ UCHAR Reserved2;
+ UCHAR TransferBlocksMsb;
+ UCHAR TransferBlocksLsb;
+ UCHAR Control;
+ } CDB10, *PCDB10;
+
+ struct _CDB12 {
+ UCHAR OperationCode;
+ UCHAR RelativeAddress : 1;
+ UCHAR Reserved1 : 2;
+ UCHAR ForceUnitAccess : 1;
+ UCHAR DisablePageOut : 1;
+ UCHAR LogicalUnitNumber : 3;
+ UCHAR LogicalBlock[4];
+ UCHAR TransferLength[4];
+ UCHAR Reserved2;
+ UCHAR Control;
+ } CDB12, *PCDB12;
+
+ struct _PAUSE_RESUME {
+ UCHAR OperationCode;
+ UCHAR Reserved1 : 5;
+ UCHAR LogicalUnitNumber : 3;
+ UCHAR Reserved2[6];
+ UCHAR Action;
+ UCHAR Control;
+ } PAUSE_RESUME, *PPAUSE_RESUME;
+
+ struct _READ_TOC {
+ UCHAR OperationCode;
+ UCHAR Reserved0 : 1;
+ UCHAR Msf : 1;
+ UCHAR Reserved1 : 3;
+ UCHAR LogicalUnitNumber : 3;
+ UCHAR Format2 : 4;
+ UCHAR Reserved2 : 4;
+ UCHAR Reserved3[3];
+ UCHAR StartingTrack;
+ UCHAR AllocationLength[2];
+ UCHAR Control : 6;
+ UCHAR Format : 2;
+ } READ_TOC, *PREAD_TOC;
+
+ struct _READ_DISK_INFORMATION {
+ UCHAR OperationCode;
+ UCHAR Reserved1 : 5;
+ UCHAR Lun : 3;
+ UCHAR Reserved2[5];
+ UCHAR AllocationLength[2];
+ UCHAR Control;
+ } READ_DISK_INFORMATION, *PREAD_DISK_INFORMATION;
+
+ struct _READ_TRACK_INFORMATION {
+ UCHAR OperationCode;
+ UCHAR Track : 1;
+ UCHAR Reserved1 : 3;
+ UCHAR Reserved2 : 1;
+ UCHAR Lun : 3;
+ UCHAR BlockAddress[4];
+ UCHAR Reserved3;
+ UCHAR AllocationLength[2];
+ UCHAR Control;
+ } READ_TRACK_INFORMATION, *PREAD_TRACK_INFORMATION;
+
+ struct _RESERVE_TRACK_RZONE {
+ UCHAR OperationCode;
+ UCHAR Reserved1[4];
+ UCHAR ReservationSize[4];
+ UCHAR Control;
+ } RESERVE_TRACK_RZONE, *PRESERVE_TRACK_RZONE;
+
+ struct _SEND_OPC_INFORMATION {
+ UCHAR OperationCode;
+ UCHAR DoOpc : 1;
+ UCHAR Reserved : 7;
+ UCHAR Reserved1[5];
+ UCHAR ParameterListLength[2];
+ UCHAR Reserved2;
+ } SEND_OPC_INFORMATION, *PSEND_OPC_INFORMATION;
+
+ struct _CLOSE_TRACK {
+ UCHAR OperationCode;
+ UCHAR Immediate : 1;
+ UCHAR Reserved1 : 7;
+ UCHAR Track : 1;
+ UCHAR Session : 1;
+ UCHAR Reserved2 : 6;
+ UCHAR Reserved3;
+ UCHAR TrackNumber[2];
+ UCHAR Reserved4[3];
+ UCHAR Control;
+ } CLOSE_TRACK, *PCLOSE_TRACK;
+
+ struct _SEND_CUE_SHEET {
+ UCHAR OperationCode;
+ UCHAR Reserved[5];
+ UCHAR CueSheetSize[3];
+ UCHAR Control;
+ } SEND_CUE_SHEET, *PSEND_CUE_SHEET;
+
+ struct _READ_HEADER {
+ UCHAR OperationCode;
+ UCHAR Reserved1 : 1;
+ UCHAR Msf : 1;
+ UCHAR Reserved2 : 3;
+ UCHAR Lun : 3;
+ UCHAR LogicalBlockAddress[4];
+ UCHAR Reserved3;
+ UCHAR AllocationLength[2];
+ UCHAR Control;
+ } READ_HEADER, *PREAD_HEADER;
+
+ struct _PLAY_AUDIO {
+ UCHAR OperationCode;
+ UCHAR Reserved1 : 5;
+ UCHAR LogicalUnitNumber : 3;
+ UCHAR StartingBlockAddress[4];
+ UCHAR Reserved2;
+ UCHAR PlayLength[2];
+ UCHAR Control;
+ } PLAY_AUDIO, *PPLAY_AUDIO;
+
+ struct _PLAY_AUDIO_MSF {
+ UCHAR OperationCode;
+ UCHAR Reserved1 : 5;
+ UCHAR LogicalUnitNumber : 3;
+ UCHAR Reserved2;
+ UCHAR StartingM;
+ UCHAR StartingS;
+ UCHAR StartingF;
+ UCHAR EndingM;
+ UCHAR EndingS;
+ UCHAR EndingF;
+ UCHAR Control;
+ } PLAY_AUDIO_MSF, *PPLAY_AUDIO_MSF;
+
+/* FIXME: Should the union be anonymous in C++ too? If so,
+ can't define named types _LBA and _MSF within anonymous union
+ for C++. */
+ struct _PLAY_CD {
+ UCHAR OperationCode;
+ UCHAR Reserved1 : 1;
+ UCHAR CMSF : 1;
+ UCHAR ExpectedSectorType : 3;
+ UCHAR Lun : 3;
+#ifndef __cplusplus
+ _ANONYMOUS_UNION
+#endif
+ union {
+ struct _LBA {
+ UCHAR StartingBlockAddress[4];
+ UCHAR PlayLength[4];
+ } LBA;
+
+ struct _MSF {
+ UCHAR Reserved1;
+ UCHAR StartingM;
+ UCHAR StartingS;
+ UCHAR StartingF;
+ UCHAR EndingM;
+ UCHAR EndingS;
+ UCHAR EndingF;
+ UCHAR Reserved2;
+ } MSF;
+ #ifndef __cplusplus
+ }DUMMYUNIONNAME;
+ #else
+ }u;
+ #endif
+
+ UCHAR Audio : 1;
+ UCHAR Composite : 1;
+ UCHAR Port1 : 1;
+ UCHAR Port2 : 1;
+ UCHAR Reserved2 : 3;
+ UCHAR Speed : 1;
+ UCHAR Control;
+ } PLAY_CD, *PPLAY_CD;
+
+ struct _SCAN_CD {
+ UCHAR OperationCode;
+ UCHAR RelativeAddress : 1;
+ UCHAR Reserved1 : 3;
+ UCHAR Direct : 1;
+ UCHAR Lun : 3;
+ UCHAR StartingAddress[4];
+ UCHAR Reserved2[3];
+ UCHAR Reserved3 : 6;
+ UCHAR Type : 2;
+ UCHAR Reserved4;
+ UCHAR Control;
+ } SCAN_CD, *PSCAN_CD;
+
+ struct _STOP_PLAY_SCAN {
+ UCHAR OperationCode;
+ UCHAR Reserved1 : 5;
+ UCHAR Lun : 3;
+ UCHAR Reserved2[7];
+ UCHAR Control;
+ } STOP_PLAY_SCAN, *PSTOP_PLAY_SCAN;
+
+ struct _SUBCHANNEL {
+ UCHAR OperationCode;
+ UCHAR Reserved0 : 1;
+ UCHAR Msf : 1;
+ UCHAR Reserved1 : 3;
+ UCHAR LogicalUnitNumber : 3;
+ UCHAR Reserved2 : 6;
+ UCHAR SubQ : 1;
+ UCHAR Reserved3 : 1;
+ UCHAR Format;
+ UCHAR Reserved4[2];
+ UCHAR TrackNumber;
+ UCHAR AllocationLength[2];
+ UCHAR Control;
+ } SUBCHANNEL, *PSUBCHANNEL;
+
+ struct _READ_CD {
+ UCHAR OperationCode;
+ UCHAR RelativeAddress : 1;
+ UCHAR Reserved0 : 1;
+ UCHAR ExpectedSectorType : 3;
+ UCHAR Lun : 3;
+ UCHAR StartingLBA[4];
+ UCHAR TransferBlocks[3];
+ UCHAR Reserved2 : 1;
+ UCHAR ErrorFlags : 2;
+ UCHAR IncludeEDC : 1;
+ UCHAR IncludeUserData : 1;
+ UCHAR HeaderCode : 2;
+ UCHAR IncludeSyncData : 1;
+ UCHAR SubChannelSelection : 3;
+ UCHAR Reserved3 : 5;
+ UCHAR Control;
+ } READ_CD, *PREAD_CD;
+
+ struct _READ_CD_MSF {
+ UCHAR OperationCode;
+ UCHAR RelativeAddress : 1;
+ UCHAR Reserved1 : 1;
+ UCHAR ExpectedSectorType : 3;
+ UCHAR Lun : 3;
+ UCHAR Reserved2;
+ UCHAR StartingM;
+ UCHAR StartingS;
+ UCHAR StartingF;
+ UCHAR EndingM;
+ UCHAR EndingS;
+ UCHAR EndingF;
+ UCHAR Reserved3;
+ UCHAR Reserved4 : 1;
+ UCHAR ErrorFlags : 2;
+ UCHAR IncludeEDC : 1;
+ UCHAR IncludeUserData : 1;
+ UCHAR HeaderCode : 2;
+ UCHAR IncludeSyncData : 1;
+ UCHAR SubChannelSelection : 3;
+ UCHAR Reserved5 : 5;
+ UCHAR Control;
+ } READ_CD_MSF, *PREAD_CD_MSF;
+
+ struct _PLXTR_READ_CDDA {
+ UCHAR OperationCode;
+ UCHAR Reserved0 : 5;
+ UCHAR LogicalUnitNumber : 3;
+ UCHAR LogicalBlockByte0;
+ UCHAR LogicalBlockByte1;
+ UCHAR LogicalBlockByte2;
+ UCHAR LogicalBlockByte3;
+ UCHAR TransferBlockByte0;
+ UCHAR TransferBlockByte1;
+ UCHAR TransferBlockByte2;
+ UCHAR TransferBlockByte3;
+ UCHAR SubCode;
+ UCHAR Control;
+ } PLXTR_READ_CDDA, *PPLXTR_READ_CDDA;
+
+ struct _NEC_READ_CDDA {
+ UCHAR OperationCode;
+ UCHAR Reserved0;
+ UCHAR LogicalBlockByte0;
+ UCHAR LogicalBlockByte1;
+ UCHAR LogicalBlockByte2;
+ UCHAR LogicalBlockByte3;
+ UCHAR Reserved1;
+ UCHAR TransferBlockByte0;
+ UCHAR TransferBlockByte1;
+ UCHAR Control;
+ } NEC_READ_CDDA, *PNEC_READ_CDDA;
+
+ struct _MODE_SENSE {
+ UCHAR OperationCode;
+ UCHAR Reserved1 : 3;
+ UCHAR Dbd : 1;
+ UCHAR Reserved2 : 1;
+ UCHAR LogicalUnitNumber : 3;
+ UCHAR PageCode : 6;
+ UCHAR Pc : 2;
+ UCHAR Reserved3;
+ UCHAR AllocationLength;
+ UCHAR Control;
+ } MODE_SENSE, *PMODE_SENSE;
+
+ struct _MODE_SENSE10 {
+ UCHAR OperationCode;
+ UCHAR Reserved1 : 3;
+ UCHAR Dbd : 1;
+ UCHAR Reserved2 : 1;
+ UCHAR LogicalUnitNumber : 3;
+ UCHAR PageCode : 6;
+ UCHAR Pc : 2;
+ UCHAR Reserved3[4];
+ UCHAR AllocationLength[2];
+ UCHAR Control;
+ } MODE_SENSE10, *PMODE_SENSE10;
+
+ struct _MODE_SELECT {
+ UCHAR OperationCode;
+ UCHAR SPBit : 1;
+ UCHAR Reserved1 : 3;
+ UCHAR PFBit : 1;
+ UCHAR LogicalUnitNumber : 3;
+ UCHAR Reserved2[2];
+ UCHAR ParameterListLength;
+ UCHAR Control;
+ } MODE_SELECT, *PMODE_SELECT;
+
+ struct _MODE_SELECT10 {
+ UCHAR OperationCode;
+ UCHAR SPBit : 1;
+ UCHAR Reserved1 : 3;
+ UCHAR PFBit : 1;
+ UCHAR LogicalUnitNumber : 3;
+ UCHAR Reserved2[5];
+ UCHAR ParameterListLength[2];
+ UCHAR Control;
+ } MODE_SELECT10, *PMODE_SELECT10;
+
+ struct _LOCATE {
+ UCHAR OperationCode;
+ UCHAR Immediate : 1;
+ UCHAR CPBit : 1;
+ UCHAR BTBit : 1;
+ UCHAR Reserved1 : 2;
+ UCHAR LogicalUnitNumber : 3;
+ UCHAR Reserved3;
+ UCHAR LogicalBlockAddress[4];
+ UCHAR Reserved4;
+ UCHAR Partition;
+ UCHAR Control;
+ } LOCATE, *PLOCATE;
+
+ struct _LOGSENSE {
+ UCHAR OperationCode;
+ UCHAR SPBit : 1;
+ UCHAR PPCBit : 1;
+ UCHAR Reserved1 : 3;
+ UCHAR LogicalUnitNumber : 3;
+ UCHAR PageCode : 6;
+ UCHAR PCBit : 2;
+ UCHAR Reserved2;
+ UCHAR Reserved3;
+ UCHAR ParameterPointer[2];
+ UCHAR AllocationLength[2];
+ UCHAR Control;
+ } LOGSENSE, *PLOGSENSE;
+
+ struct _LOGSELECT {
+ UCHAR OperationCode;
+ UCHAR SPBit : 1;
+ UCHAR PCRBit : 1;
+ UCHAR Reserved1 : 3;
+ UCHAR LogicalUnitNumber : 3;
+ UCHAR Reserved : 6;
+ UCHAR PCBit : 2;
+ UCHAR Reserved2[4];
+ UCHAR ParameterListLength[2];
+ UCHAR Control;
+ } LOGSELECT, *PLOGSELECT;
+
+ struct _PRINT {
+ UCHAR OperationCode;
+ UCHAR Reserved : 5;
+ UCHAR LogicalUnitNumber : 3;
+ UCHAR TransferLength[3];
+ UCHAR Control;
+ } PRINT, *PPRINT;
+
+ struct _SEEK {
+ UCHAR OperationCode;
+ UCHAR Reserved1 : 5;
+ UCHAR LogicalUnitNumber : 3;
+ UCHAR LogicalBlockAddress[4];
+ UCHAR Reserved2[3];
+ UCHAR Control;
+ } SEEK, *PSEEK;
+
+ struct _ERASE {
+ UCHAR OperationCode;
+ UCHAR Long : 1;
+ UCHAR Immediate : 1;
+ UCHAR Reserved1 : 3;
+ UCHAR LogicalUnitNumber : 3;
+ UCHAR Reserved2[3];
+ UCHAR Control;
+ } ERASE, *PERASE;
+
+ struct _START_STOP {
+ UCHAR OperationCode;
+ UCHAR Immediate: 1;
+ UCHAR Reserved1 : 4;
+ UCHAR LogicalUnitNumber : 3;
+ UCHAR Reserved2[2];
+ UCHAR Start : 1;
+ UCHAR LoadEject : 1;
+ UCHAR Reserved3 : 6;
+ UCHAR Control;
+ } START_STOP, *PSTART_STOP;
+
+ struct _MEDIA_REMOVAL {
+ UCHAR OperationCode;
+ UCHAR Reserved1 : 5;
+ UCHAR LogicalUnitNumber : 3;
+ UCHAR Reserved2[2];
+
+ UCHAR Prevent : 1;
+ UCHAR Persistant : 1;
+ UCHAR Reserved3 : 6;
+
+ UCHAR Control;
+ } MEDIA_REMOVAL, *PMEDIA_REMOVAL;
+
+ struct _SEEK_BLOCK {
+ UCHAR OperationCode;
+ UCHAR Immediate : 1;
+ UCHAR Reserved1 : 7;
+ UCHAR BlockAddress[3];
+ UCHAR Link : 1;
+ UCHAR Flag : 1;
+ UCHAR Reserved2 : 4;
+ UCHAR VendorUnique : 2;
+ } SEEK_BLOCK, *PSEEK_BLOCK;
+
+ struct _REQUEST_BLOCK_ADDRESS {
+ UCHAR OperationCode;
+ UCHAR Reserved1[3];
+ UCHAR AllocationLength;
+ UCHAR Link : 1;
+ UCHAR Flag : 1;
+ UCHAR Reserved2 : 4;
+ UCHAR VendorUnique : 2;
+ } REQUEST_BLOCK_ADDRESS, *PREQUEST_BLOCK_ADDRESS;
+
+ struct _PARTITION {
+ UCHAR OperationCode;
+ UCHAR Immediate : 1;
+ UCHAR Sel: 1;
+ UCHAR PartitionSelect : 6;
+ UCHAR Reserved1[3];
+ UCHAR Control;
+ } PARTITION, *PPARTITION;
+
+ struct _WRITE_TAPE_MARKS {
+ UCHAR OperationCode;
+ UCHAR Immediate : 1;
+ UCHAR WriteSetMarks: 1;
+ UCHAR Reserved : 3;
+ UCHAR LogicalUnitNumber : 3;
+ UCHAR TransferLength[3];
+ UCHAR Control;
+ } WRITE_TAPE_MARKS, *PWRITE_TAPE_MARKS;
+
+ struct _SPACE_TAPE_MARKS {
+ UCHAR OperationCode;
+ UCHAR Code : 3;
+ UCHAR Reserved : 2;
+ UCHAR LogicalUnitNumber : 3;
+ UCHAR NumMarksMSB ;
+ UCHAR NumMarks;
+ UCHAR NumMarksLSB;
+ union {
+ UCHAR value;
+ struct {
+ UCHAR Link : 1;
+ UCHAR Flag : 1;
+ UCHAR Reserved : 4;
+ UCHAR VendorUnique : 2;
+ } Fields;
+ } Byte6;
+ } SPACE_TAPE_MARKS, *PSPACE_TAPE_MARKS;
+
+ struct _READ_POSITION {
+ UCHAR Operation;
+ UCHAR BlockType : 1;
+ UCHAR Reserved1 : 4;
+ UCHAR Lun : 3;
+ UCHAR Reserved2[7];
+ UCHAR Control;
+ } READ_POSITION, *PREAD_POSITION;
+
+ struct _CDB6READWRITETAPE {
+ UCHAR OperationCode;
+ UCHAR VendorSpecific : 5;
+ UCHAR Reserved : 3;
+ UCHAR TransferLenMSB;
+ UCHAR TransferLen;
+ UCHAR TransferLenLSB;
+ UCHAR Link : 1;
+ UCHAR Flag : 1;
+ UCHAR Reserved1 : 4;
+ UCHAR VendorUnique : 2;
+ } CDB6READWRITETAPE, *PCDB6READWRITETAPE;
+
+ struct _INIT_ELEMENT_STATUS {
+ UCHAR OperationCode;
+ UCHAR Reserved1 : 5;
+ UCHAR LogicalUnitNubmer : 3;
+ UCHAR Reserved2[3];
+ UCHAR Reserved3 : 7;
+ UCHAR NoBarCode : 1;
+ } INIT_ELEMENT_STATUS, *PINIT_ELEMENT_STATUS;
+
+ struct _INITIALIZE_ELEMENT_RANGE {
+ UCHAR OperationCode;
+ UCHAR Range : 1;
+ UCHAR Reserved1 : 4;
+ UCHAR LogicalUnitNubmer : 3;
+ UCHAR FirstElementAddress[2];
+ UCHAR Reserved2[2];
+ UCHAR NumberOfElements[2];
+ UCHAR Reserved3;
+ UCHAR Reserved4 : 7;
+ UCHAR NoBarCode : 1;
+ } INITIALIZE_ELEMENT_RANGE, *PINITIALIZE_ELEMENT_RANGE;
+
+ struct _POSITION_TO_ELEMENT {
+ UCHAR OperationCode;
+ UCHAR Reserved1 : 5;
+ UCHAR LogicalUnitNumber : 3;
+ UCHAR TransportElementAddress[2];
+ UCHAR DestinationElementAddress[2];
+ UCHAR Reserved2[2];
+ UCHAR Flip : 1;
+ UCHAR Reserved3 : 7;
+ UCHAR Control;
+ } POSITION_TO_ELEMENT, *PPOSITION_TO_ELEMENT;
+
+ struct _MOVE_MEDIUM {
+ UCHAR OperationCode;
+ UCHAR Reserved1 : 5;
+ UCHAR LogicalUnitNumber : 3;
+ UCHAR TransportElementAddress[2];
+ UCHAR SourceElementAddress[2];
+ UCHAR DestinationElementAddress[2];
+ UCHAR Reserved2[2];
+ UCHAR Flip : 1;
+ UCHAR Reserved3 : 7;
+ UCHAR Control;
+ } MOVE_MEDIUM, *PMOVE_MEDIUM;
+
+ struct _EXCHANGE_MEDIUM {
+ UCHAR OperationCode;
+ UCHAR Reserved1 : 5;
+ UCHAR LogicalUnitNumber : 3;
+ UCHAR TransportElementAddress[2];
+ UCHAR SourceElementAddress[2];
+ UCHAR Destination1ElementAddress[2];
+ UCHAR Destination2ElementAddress[2];
+ UCHAR Flip1 : 1;
+ UCHAR Flip2 : 1;
+ UCHAR Reserved3 : 6;
+ UCHAR Control;
+ } EXCHANGE_MEDIUM, *PEXCHANGE_MEDIUM;
+
+ struct _READ_ELEMENT_STATUS {
+ UCHAR OperationCode;
+ UCHAR ElementType : 4;
+ UCHAR VolTag : 1;
+ UCHAR LogicalUnitNumber : 3;
+ UCHAR StartingElementAddress[2];
+ UCHAR NumberOfElements[2];
+ UCHAR Reserved1;
+ UCHAR AllocationLength[3];
+ UCHAR Reserved2;
+ UCHAR Control;
+ } READ_ELEMENT_STATUS, *PREAD_ELEMENT_STATUS;
+
+ struct _SEND_VOLUME_TAG {
+ UCHAR OperationCode;
+ UCHAR ElementType : 4;
+ UCHAR Reserved1 : 1;
+ UCHAR LogicalUnitNumber : 3;
+ UCHAR StartingElementAddress[2];
+ UCHAR Reserved2;
+ UCHAR ActionCode : 5;
+ UCHAR Reserved3 : 3;
+ UCHAR Reserved4[2];
+ UCHAR ParameterListLength[2];
+ UCHAR Reserved5;
+ UCHAR Control;
+ } SEND_VOLUME_TAG, *PSEND_VOLUME_TAG;
+
+ struct _REQUEST_VOLUME_ELEMENT_ADDRESS {
+ UCHAR OperationCode;
+ UCHAR ElementType : 4;
+ UCHAR VolTag : 1;
+ UCHAR LogicalUnitNumber : 3;
+ UCHAR StartingElementAddress[2];
+ UCHAR NumberElements[2];
+ UCHAR Reserved1;
+ UCHAR AllocationLength[3];
+ UCHAR Reserved2;
+ UCHAR Control;
+ } REQUEST_VOLUME_ELEMENT_ADDRESS, *PREQUEST_VOLUME_ELEMENT_ADDRESS;
+
+ struct _LOAD_UNLOAD {
+ UCHAR OperationCode;
+ UCHAR Immediate : 1;
+ UCHAR Reserved1 : 4;
+ UCHAR Lun : 3;
+ UCHAR Reserved2[2];
+ UCHAR Start : 1;
+ UCHAR LoadEject : 1;
+ UCHAR Reserved3: 6;
+ UCHAR Reserved4[3];
+ UCHAR Slot;
+ UCHAR Reserved5[3];
+ } LOAD_UNLOAD, *PLOAD_UNLOAD;
+
+ struct _MECH_STATUS {
+ UCHAR OperationCode;
+ UCHAR Reserved : 5;
+ UCHAR Lun : 3;
+ UCHAR Reserved1[6];
+ UCHAR AllocationLength[2];
+ UCHAR Reserved2[1];
+ UCHAR Control;
+ } MECH_STATUS, *PMECH_STATUS;
+
+ struct _SYNCHRONIZE_CACHE10 {
+
+ UCHAR OperationCode;
+
+ UCHAR RelAddr : 1;
+ UCHAR Immediate : 1;
+ UCHAR Reserved : 3;
+ UCHAR Lun : 3;
+
+ UCHAR LogicalBlockAddress[4];
+ UCHAR Reserved2;
+ UCHAR BlockCount[2];
+ UCHAR Control;
+ } SYNCHRONIZE_CACHE10, *PSYNCHRONIZE_CACHE10;
+
+ struct _GET_EVENT_STATUS_NOTIFICATION {
+ UCHAR OperationCode;
+
+ UCHAR Immediate : 1;
+ UCHAR Reserved : 4;
+ UCHAR Lun : 3;
+
+ UCHAR Reserved2[2];
+ UCHAR NotificationClassRequest;
+ UCHAR Reserved3[2];
+ UCHAR EventListLength[2];
+
+ UCHAR Control;
+ } GET_EVENT_STATUS_NOTIFICATION, *PGET_EVENT_STATUS_NOTIFICATION;
+
+ struct _READ_DVD_STRUCTURE {
+ UCHAR OperationCode;
+ UCHAR Reserved1 : 5;
+ UCHAR Lun : 3;
+ UCHAR RMDBlockNumber[4];
+ UCHAR LayerNumber;
+ UCHAR Format;
+ UCHAR AllocationLength[2];
+ UCHAR Reserved3 : 6;
+ UCHAR AGID : 2;
+ UCHAR Control;
+ } READ_DVD_STRUCTURE, *PREAD_DVD_STRUCTURE;
+
+ struct _SEND_DVD_STRUCTURE {
+ UCHAR OperationCode;
+ UCHAR Reserved1 : 5;
+ UCHAR Lun : 3;
+ UCHAR Reserved2[5];
+ UCHAR Format;
+ UCHAR ParameterListLength[2];
+ UCHAR Reserved3;
+ UCHAR Control;
+ } SEND_DVD_STRUCTURE, *PSEND_DVD_STRUCTURE;
+
+ struct _SEND_KEY {
+ UCHAR OperationCode;
+ UCHAR Reserved1 : 5;
+ UCHAR Lun : 3;
+ UCHAR Reserved2[6];
+ UCHAR ParameterListLength[2];
+ UCHAR KeyFormat : 6;
+ UCHAR AGID : 2;
+ UCHAR Control;
+ } SEND_KEY, *PSEND_KEY;
+
+ struct _REPORT_KEY {
+ UCHAR OperationCode;
+ UCHAR Reserved1 : 5;
+ UCHAR Lun : 3;
+ UCHAR LogicalBlockAddress[4];
+ UCHAR Reserved2[2];
+ UCHAR AllocationLength[2];
+ UCHAR KeyFormat : 6;
+ UCHAR AGID : 2;
+ UCHAR Control;
+ } REPORT_KEY, *PREPORT_KEY;
+
+ struct _SET_READ_AHEAD {
+ UCHAR OperationCode;
+ UCHAR Reserved1 : 5;
+ UCHAR Lun : 3;
+ UCHAR TriggerLBA[4];
+ UCHAR ReadAheadLBA[4];
+ UCHAR Reserved2;
+ UCHAR Control;
+ } SET_READ_AHEAD, *PSET_READ_AHEAD;
+
+ struct _READ_FORMATTED_CAPACITIES {
+ UCHAR OperationCode;
+ UCHAR Reserved1 : 5;
+ UCHAR Lun : 3;
+ UCHAR Reserved2[5];
+ UCHAR AllocationLength[2];
+ UCHAR Control;
+ } READ_FORMATTED_CAPACITIES, *PREAD_FORMATTED_CAPACITIES;
+
+ struct _REPORT_LUNS {
+ UCHAR OperationCode;
+ UCHAR Reserved1[5];
+ UCHAR AllocationLength[4];
+ UCHAR Reserved2[1];
+ UCHAR Control;
+ } REPORT_LUNS, *PREPORT_LUNS;
+
+ struct _PERSISTENT_RESERVE_IN {
+ UCHAR OperationCode;
+ UCHAR ServiceAction : 5;
+ UCHAR Reserved1 : 3;
+ UCHAR Reserved2[5];
+ UCHAR AllocationLength[2];
+ UCHAR Control;
+ } PERSISTENT_RESERVE_IN, *PPERSISTENT_RESERVE_IN;
+
+ struct _PERSISTENT_RESERVE_OUT {
+ UCHAR OperationCode;
+ UCHAR ServiceAction : 5;
+ UCHAR Reserved1 : 3;
+ UCHAR Type : 4;
+ UCHAR Scope : 4;
+ UCHAR Reserved2[4];
+ UCHAR ParameterListLength[2];
+ UCHAR Control;
+ } PERSISTENT_RESERVE_OUT, *PPERSISTENT_RESERVE_OUT;
+
+ struct _GET_CONFIGURATION {
+ UCHAR OperationCode;
+ UCHAR RequestType : 1;
+ UCHAR Reserved1 : 7;
+ UCHAR StartingFeature[2];
+ UCHAR Reserved2[3];
+ UCHAR AllocationLength[2];
+ UCHAR Control;
+ } GET_CONFIGURATION, *PGET_CONFIGURATION;
+
+ struct _SET_CD_SPEED {
+ UCHAR OperationCode;
+ UCHAR Reserved1;
+ UCHAR ReadSpeed[2];
+ UCHAR WriteSpeed[2];
+ UCHAR Reserved2[5];
+ UCHAR Control;
+ } SET_CD_SPEED, *PSET_CD_SPEED;
+
+ ULONG AsUlong[4];
+ UCHAR AsByte[16];
+} CDB, *PCDB;
+
+#ifndef _INQUIRYDATA_DEFINED /* also in minitape.h */
+#define _INQUIRYDATA_DEFINED
+
+#define INQUIRYDATABUFFERSIZE 36
+
+typedef struct _INQUIRYDATA {
+ UCHAR DeviceType : 5;
+ UCHAR DeviceTypeQualifier : 3;
+ UCHAR DeviceTypeModifier : 7;
+ UCHAR RemovableMedia : 1;
+ _ANONYMOUS_UNION union {
+ UCHAR Versions;
+ _ANONYMOUS_STRUCT struct {
+ UCHAR ANSIVersion : 3;
+ UCHAR ECMAVersion : 3;
+ UCHAR ISOVersion : 2;
+ } DUMMYSTRUCTNAME;
+ } DUMMYUNIONNAME;
+ UCHAR ResponseDataFormat : 4;
+ UCHAR HiSupport : 1;
+ UCHAR NormACA : 1;
+ UCHAR TerminateTask : 1;
+ UCHAR AERC : 1;
+ UCHAR AdditionalLength;
+ UCHAR Reserved;
+ UCHAR Addr16 : 1;
+ UCHAR Addr32 : 1;
+ UCHAR AckReqQ: 1;
+ UCHAR MediumChanger : 1;
+ UCHAR MultiPort : 1;
+ UCHAR ReservedBit2 : 1;
+ UCHAR EnclosureServices : 1;
+ UCHAR ReservedBit3 : 1;
+ UCHAR SoftReset : 1;
+ UCHAR CommandQueue : 1;
+ UCHAR TransferDisable : 1;
+ UCHAR LinkedCommands : 1;
+ UCHAR Synchronous : 1;
+ UCHAR Wide16Bit : 1;
+ UCHAR Wide32Bit : 1;
+ UCHAR RelativeAddressing : 1;
+ UCHAR VendorId[8];
+ UCHAR ProductId[16];
+ UCHAR ProductRevisionLevel[4];
+ UCHAR VendorSpecific[20];
+ UCHAR Reserved3[40];
+} INQUIRYDATA, *PINQUIRYDATA;
+#endif
+
+/* INQUIRYDATA.DeviceType constants */
+#define DIRECT_ACCESS_DEVICE 0x00
+#define SEQUENTIAL_ACCESS_DEVICE 0x01
+#define PRINTER_DEVICE 0x02
+#define PROCESSOR_DEVICE 0x03
+#define WRITE_ONCE_READ_MULTIPLE_DEVICE 0x04
+#define READ_ONLY_DIRECT_ACCESS_DEVICE 0x05
+#define SCANNER_DEVICE 0x06
+#define OPTICAL_DEVICE 0x07
+#define MEDIUM_CHANGER 0x08
+#define COMMUNICATION_DEVICE 0x09
+#define LOGICAL_UNIT_NOT_PRESENT_DEVICE 0x7F
+#define DEVICE_QUALIFIER_NOT_SUPPORTED 0x03
+
+/* INQUIRYDATA.DeviceTypeQualifier constants */
+#define DEVICE_CONNECTED 0x00
+
+#define SCSISTAT_GOOD 0x00
+#define SCSISTAT_CHECK_CONDITION 0x02
+#define SCSISTAT_CONDITION_MET 0x04
+#define SCSISTAT_BUSY 0x08
+#define SCSISTAT_INTERMEDIATE 0x10
+#define SCSISTAT_INTERMEDIATE_COND_MET 0x14
+#define SCSISTAT_RESERVATION_CONFLICT 0x18
+#define SCSISTAT_COMMAND_TERMINATED 0x22
+#define SCSISTAT_QUEUE_FULL 0x28
+
+/* Mode Sense/Select page constants */
+#define MODE_PAGE_ERROR_RECOVERY 0x01
+#define MODE_PAGE_DISCONNECT 0x02
+#define MODE_PAGE_FORMAT_DEVICE 0x03
+#define MODE_PAGE_RIGID_GEOMETRY 0x04
+#define MODE_PAGE_FLEXIBILE 0x05
+#define MODE_PAGE_WRITE_PARAMETERS 0x05
+#define MODE_PAGE_VERIFY_ERROR 0x07
+#define MODE_PAGE_CACHING 0x08
+#define MODE_PAGE_PERIPHERAL 0x09
+#define MODE_PAGE_CONTROL 0x0A
+#define MODE_PAGE_MEDIUM_TYPES 0x0B
+#define MODE_PAGE_NOTCH_PARTITION 0x0C
+#define MODE_PAGE_CD_AUDIO_CONTROL 0x0E
+#define MODE_PAGE_DATA_COMPRESS 0x0F
+#define MODE_PAGE_DEVICE_CONFIG 0x10
+#define MODE_PAGE_MEDIUM_PARTITION 0x11
+#define MODE_PAGE_CDVD_FEATURE_SET 0x18
+#define MODE_PAGE_POWER_CONDITION 0x1A
+#define MODE_PAGE_FAULT_REPORTING 0x1C
+#define MODE_PAGE_CDVD_INACTIVITY 0x1D
+#define MODE_PAGE_ELEMENT_ADDRESS 0x1D
+#define MODE_PAGE_TRANSPORT_GEOMETRY 0x1E
+#define MODE_PAGE_DEVICE_CAPABILITIES 0x1F
+#define MODE_PAGE_CAPABILITIES 0x2A
+#define MODE_SENSE_RETURN_ALL 0x3f
+#define MODE_SENSE_CURRENT_VALUES 0x00
+#define MODE_SENSE_CHANGEABLE_VALUES 0x40
+#define MODE_SENSE_DEFAULT_VAULES 0x80
+#define MODE_SENSE_SAVED_VALUES 0xc0
+
+/* SCSI CDB operation codes */
+#define SCSIOP_TEST_UNIT_READY 0x00
+#define SCSIOP_REZERO_UNIT 0x01
+#define SCSIOP_REWIND 0x01
+#define SCSIOP_REQUEST_BLOCK_ADDR 0x02
+#define SCSIOP_REQUEST_SENSE 0x03
+#define SCSIOP_FORMAT_UNIT 0x04
+#define SCSIOP_READ_BLOCK_LIMITS 0x05
+#define SCSIOP_REASSIGN_BLOCKS 0x07
+#define SCSIOP_INIT_ELEMENT_STATUS 0x07
+#define SCSIOP_READ6 0x08
+#define SCSIOP_RECEIVE 0x08
+#define SCSIOP_WRITE6 0x0A
+#define SCSIOP_PRINT 0x0A
+#define SCSIOP_SEND 0x0A
+#define SCSIOP_SEEK6 0x0B
+#define SCSIOP_TRACK_SELECT 0x0B
+#define SCSIOP_SLEW_PRINT 0x0B
+#define SCSIOP_SEEK_BLOCK 0x0C
+#define SCSIOP_PARTITION 0x0D
+#define SCSIOP_READ_REVERSE 0x0F
+#define SCSIOP_WRITE_FILEMARKS 0x10
+#define SCSIOP_FLUSH_BUFFER 0x10
+#define SCSIOP_SPACE 0x11
+#define SCSIOP_INQUIRY 0x12
+#define SCSIOP_VERIFY6 0x13
+#define SCSIOP_RECOVER_BUF_DATA 0x14
+#define SCSIOP_MODE_SELECT 0x15
+#define SCSIOP_RESERVE_UNIT 0x16
+#define SCSIOP_RELEASE_UNIT 0x17
+#define SCSIOP_COPY 0x18
+#define SCSIOP_ERASE 0x19
+#define SCSIOP_MODE_SENSE 0x1A
+#define SCSIOP_START_STOP_UNIT 0x1B
+#define SCSIOP_STOP_PRINT 0x1B
+#define SCSIOP_LOAD_UNLOAD 0x1B
+#define SCSIOP_RECEIVE_DIAGNOSTIC 0x1C
+#define SCSIOP_SEND_DIAGNOSTIC 0x1D
+#define SCSIOP_MEDIUM_REMOVAL 0x1E
+
+#define SCSIOP_READ_FORMATTED_CAPACITY 0x23
+#define SCSIOP_READ_CAPACITY 0x25
+#define SCSIOP_READ 0x28
+#define SCSIOP_WRITE 0x2A
+#define SCSIOP_SEEK 0x2B
+#define SCSIOP_LOCATE 0x2B
+#define SCSIOP_POSITION_TO_ELEMENT 0x2B
+#define SCSIOP_WRITE_VERIFY 0x2E
+#define SCSIOP_VERIFY 0x2F
+#define SCSIOP_SEARCH_DATA_HIGH 0x30
+#define SCSIOP_SEARCH_DATA_EQUAL 0x31
+#define SCSIOP_SEARCH_DATA_LOW 0x32
+#define SCSIOP_SET_LIMITS 0x33
+#define SCSIOP_READ_POSITION 0x34
+#define SCSIOP_SYNCHRONIZE_CACHE 0x35
+#define SCSIOP_COMPARE 0x39
+#define SCSIOP_COPY_COMPARE 0x3A
+#define SCSIOP_WRITE_DATA_BUFF 0x3B
+#define SCSIOP_READ_DATA_BUFF 0x3C
+#define SCSIOP_CHANGE_DEFINITION 0x40
+#define SCSIOP_READ_SUB_CHANNEL 0x42
+#define SCSIOP_READ_TOC 0x43
+#define SCSIOP_READ_HEADER 0x44
+#define SCSIOP_PLAY_AUDIO 0x45
+#define SCSIOP_GET_CONFIGURATION 0x46
+#define SCSIOP_PLAY_AUDIO_MSF 0x47
+#define SCSIOP_PLAY_TRACK_INDEX 0x48
+#define SCSIOP_PLAY_TRACK_RELATIVE 0x49
+#define SCSIOP_GET_EVENT_STATUS 0x4A
+#define SCSIOP_PAUSE_RESUME 0x4B
+#define SCSIOP_LOG_SELECT 0x4C
+#define SCSIOP_LOG_SENSE 0x4D
+#define SCSIOP_STOP_PLAY_SCAN 0x4E
+#define SCSIOP_READ_DISK_INFORMATION 0x51
+#define SCSIOP_READ_TRACK_INFORMATION 0x52
+#define SCSIOP_RESERVE_TRACK_RZONE 0x53
+#define SCSIOP_SEND_OPC_INFORMATION 0x54
+#define SCSIOP_MODE_SELECT10 0x55
+#define SCSIOP_MODE_SENSE10 0x5A
+#define SCSIOP_CLOSE_TRACK_SESSION 0x5B
+#define SCSIOP_READ_BUFFER_CAPACITY 0x5C
+#define SCSIOP_SEND_CUE_SHEET 0x5D
+#define SCSIOP_PERSISTENT_RESERVE_IN 0x5E
+#define SCSIOP_PERSISTENT_RESERVE_OUT 0x5F
+
+#define SCSIOP_REPORT_LUNS 0xA0
+#define SCSIOP_BLANK 0xA1
+#define SCSIOP_SEND_KEY 0xA3
+#define SCSIOP_REPORT_KEY 0xA4
+#define SCSIOP_MOVE_MEDIUM 0xA5
+#define SCSIOP_LOAD_UNLOAD_SLOT 0xA6
+#define SCSIOP_EXCHANGE_MEDIUM 0xA6
+#define SCSIOP_SET_READ_AHEAD 0xA7
+#define SCSIOP_READ_DVD_STRUCTURE 0xAD
+#define SCSIOP_REQUEST_VOL_ELEMENT 0xB5
+#define SCSIOP_SEND_VOLUME_TAG 0xB6
+#define SCSIOP_READ_ELEMENT_STATUS 0xB8
+#define SCSIOP_READ_CD_MSF 0xB9
+#define SCSIOP_SCAN_CD 0xBA
+#define SCSIOP_SET_CD_SPEED 0xBB
+#define SCSIOP_PLAY_CD 0xBC
+#define SCSIOP_MECHANISM_STATUS 0xBD
+#define SCSIOP_READ_CD 0xBE
+#define SCSIOP_SEND_DVD_STRUCTURE 0xBF
+#define SCSIOP_INIT_ELEMENT_RANGE 0xE7
+
+#define SCSIOP_DENON_EJECT_DISC 0xE6
+#define SCSIOP_DENON_STOP_AUDIO 0xE7
+#define SCSIOP_DENON_PLAY_AUDIO 0xE8
+#define SCSIOP_DENON_READ_TOC 0xE9
+#define SCSIOP_DENON_READ_SUBCODE 0xEB
+
+#define SCSIMESS_MODIFY_DATA_POINTER 0x00
+#define SCSIMESS_SYNCHRONOUS_DATA_REQ 0x01
+#define SCSIMESS_WIDE_DATA_REQUEST 0x03
+
+#define SCSIMESS_MODIFY_DATA_LENGTH 5
+#define SCSIMESS_SYNCH_DATA_LENGTH 3
+#define SCSIMESS_WIDE_DATA_LENGTH 2
+
+#define SCSIMESS_ABORT 0x06
+#define SCSIMESS_ABORT_WITH_TAG 0x0D
+#define SCSIMESS_BUS_DEVICE_RESET 0x0C
+#define SCSIMESS_CLEAR_QUEUE 0x0E
+#define SCSIMESS_COMMAND_COMPLETE 0x00
+#define SCSIMESS_DISCONNECT 0x04
+#define SCSIMESS_EXTENDED_MESSAGE 0x01
+#define SCSIMESS_IDENTIFY 0x80
+#define SCSIMESS_IDENTIFY_WITH_DISCON 0xC0
+#define SCSIMESS_IGNORE_WIDE_RESIDUE 0x23
+#define SCSIMESS_INITIATE_RECOVERY 0x0F
+#define SCSIMESS_INIT_DETECTED_ERROR 0x05
+#define SCSIMESS_LINK_CMD_COMP 0x0A
+#define SCSIMESS_LINK_CMD_COMP_W_FLAG 0x0B
+#define SCSIMESS_MESS_PARITY_ERROR 0x09
+#define SCSIMESS_MESSAGE_REJECT 0x07
+#define SCSIMESS_NO_OPERATION 0x08
+#define SCSIMESS_HEAD_OF_QUEUE_TAG 0x21
+#define SCSIMESS_ORDERED_QUEUE_TAG 0x22
+#define SCSIMESS_SIMPLE_QUEUE_TAG 0x20
+#define SCSIMESS_RELEASE_RECOVERY 0x10
+#define SCSIMESS_RESTORE_POINTERS 0x03
+#define SCSIMESS_SAVE_DATA_POINTER 0x02
+#define SCSIMESS_TERMINATE_IO_PROCESS 0x11
+
+#define CDB_FORCE_MEDIA_ACCESS 0x08
+
+#define CDB_RETURN_ON_COMPLETION 0
+#define CDB_RETURN_IMMEDIATE 1
+
+#define CDB_INQUIRY_EVPD 0x01
+
+#define LUN0_FORMAT_SAVING_DEFECT_LIST 0
+#define USE_DEFAULTMSB 0
+#define USE_DEFAULTLSB 0
+
+#define START_UNIT_CODE 0x01
+#define STOP_UNIT_CODE 0x00
+
+typedef struct _SENSE_DATA {
+ UCHAR ErrorCode : 7;
+ UCHAR Valid : 1;
+ UCHAR SegmentNumber;
+ UCHAR SenseKey : 4;
+ UCHAR Reserved : 1;
+ UCHAR IncorrectLength : 1;
+ UCHAR EndOfMedia : 1;
+ UCHAR FileMark : 1;
+ UCHAR Information[4];
+ UCHAR AdditionalSenseLength;
+ UCHAR CommandSpecificInformation[4];
+ UCHAR AdditionalSenseCode;
+ UCHAR AdditionalSenseCodeQualifier;
+ UCHAR FieldReplaceableUnitCode;
+ UCHAR SenseKeySpecific[3];
+} SENSE_DATA, *PSENSE_DATA;
+
+#define SENSE_BUFFER_SIZE 18
+
+/* Sense codes */
+#define SCSI_SENSE_NO_SENSE 0x00
+#define SCSI_SENSE_RECOVERED_ERROR 0x01
+#define SCSI_SENSE_NOT_READY 0x02
+#define SCSI_SENSE_MEDIUM_ERROR 0x03
+#define SCSI_SENSE_HARDWARE_ERROR 0x04
+#define SCSI_SENSE_ILLEGAL_REQUEST 0x05
+#define SCSI_SENSE_UNIT_ATTENTION 0x06
+#define SCSI_SENSE_DATA_PROTECT 0x07
+#define SCSI_SENSE_BLANK_CHECK 0x08
+#define SCSI_SENSE_UNIQUE 0x09
+#define SCSI_SENSE_COPY_ABORTED 0x0A
+#define SCSI_SENSE_ABORTED_COMMAND 0x0B
+#define SCSI_SENSE_EQUAL 0x0C
+#define SCSI_SENSE_VOL_OVERFLOW 0x0D
+#define SCSI_SENSE_MISCOMPARE 0x0E
+#define SCSI_SENSE_RESERVED 0x0F
+
+/* Additional tape bit */
+#define SCSI_ILLEGAL_LENGTH 0x20
+#define SCSI_EOM 0x40
+#define SCSI_FILE_MARK 0x80
+
+/* Additional Sense codes */
+#define SCSI_ADSENSE_NO_SENSE 0x00
+#define SCSI_ADSENSE_NO_SEEK_COMPLETE 0x02
+#define SCSI_ADSENSE_LUN_NOT_READY 0x04
+#define SCSI_ADSENSE_WRITE_ERROR 0x0C
+#define SCSI_ADSENSE_TRACK_ERROR 0x14
+#define SCSI_ADSENSE_SEEK_ERROR 0x15
+#define SCSI_ADSENSE_REC_DATA_NOECC 0x17
+#define SCSI_ADSENSE_REC_DATA_ECC 0x18
+#define SCSI_ADSENSE_ILLEGAL_COMMAND 0x20
+#define SCSI_ADSENSE_ILLEGAL_BLOCK 0x21
+#define SCSI_ADSENSE_INVALID_CDB 0x24
+#define SCSI_ADSENSE_INVALID_LUN 0x25
+#define SCSI_ADSENSE_WRITE_PROTECT 0x27
+#define SCSI_ADSENSE_MEDIUM_CHANGED 0x28
+#define SCSI_ADSENSE_BUS_RESET 0x29
+#define SCSI_ADSENSE_INSUFFICIENT_TIME_FOR_OPERATION 0x2E
+#define SCSI_ADSENSE_INVALID_MEDIA 0x30
+#define SCSI_ADSENSE_NO_MEDIA_IN_DEVICE 0x3a
+#define SCSI_ADSENSE_POSITION_ERROR 0x3b
+#define SCSI_ADSENSE_OPERATOR_REQUEST 0x5a
+#define SCSI_ADSENSE_FAILURE_PREDICTION_THRESHOLD_EXCEEDED 0x5d
+#define SCSI_ADSENSE_ILLEGAL_MODE_FOR_THIS_TRACK 0x64
+#define SCSI_ADSENSE_COPY_PROTECTION_FAILURE 0x6f
+#define SCSI_ADSENSE_POWER_CALIBRATION_ERROR 0x73
+#define SCSI_ADSENSE_VENDOR_UNIQUE 0x80
+#define SCSI_ADSENSE_MUSIC_AREA 0xA0
+#define SCSI_ADSENSE_DATA_AREA 0xA1
+#define SCSI_ADSENSE_VOLUME_OVERFLOW 0xA7
+
+#define SCSI_SENSEQ_CAUSE_NOT_REPORTABLE 0x00
+#define SCSI_SENSEQ_BECOMING_READY 0x01
+#define SCSI_SENSEQ_INIT_COMMAND_REQUIRED 0x02
+#define SCSI_SENSEQ_MANUAL_INTERVENTION_REQUIRED 0x03
+#define SCSI_SENSEQ_FORMAT_IN_PROGRESS 0x04
+#define SCSI_SENSEQ_REBUILD_IN_PROGRESS 0x05
+#define SCSI_SENSEQ_RECALCULATION_IN_PROGRESS 0x06
+#define SCSI_SENSEQ_OPERATION_IN_PROGRESS 0x07
+#define SCSI_SENSEQ_LONG_WRITE_IN_PROGRESS 0x08
+#define SCSI_SENSEQ_LOSS_OF_STREAMING 0x09
+#define SCSI_SENSEQ_PADDING_BLOCKS_ADDED 0x0A
+
+
+#define FILE_DEVICE_SCSI 0x0000001b
+
+#define IOCTL_SCSI_EXECUTE_IN ((FILE_DEVICE_SCSI << 16) + 0x0011)
+#define IOCTL_SCSI_EXECUTE_OUT ((FILE_DEVICE_SCSI << 16) + 0x0012)
+#define IOCTL_SCSI_EXECUTE_NONE ((FILE_DEVICE_SCSI << 16) + 0x0013)
+
+/* SMART support in ATAPI */
+#define IOCTL_SCSI_MINIPORT_SMART_VERSION ((FILE_DEVICE_SCSI << 16) + 0x0500)
+#define IOCTL_SCSI_MINIPORT_IDENTIFY ((FILE_DEVICE_SCSI << 16) + 0x0501)
+#define IOCTL_SCSI_MINIPORT_READ_SMART_ATTRIBS ((FILE_DEVICE_SCSI << 16) + 0x0502)
+#define IOCTL_SCSI_MINIPORT_READ_SMART_THRESHOLDS ((FILE_DEVICE_SCSI << 16) + 0x0503)
+#define IOCTL_SCSI_MINIPORT_ENABLE_SMART ((FILE_DEVICE_SCSI << 16) + 0x0504)
+#define IOCTL_SCSI_MINIPORT_DISABLE_SMART ((FILE_DEVICE_SCSI << 16) + 0x0505)
+#define IOCTL_SCSI_MINIPORT_RETURN_STATUS ((FILE_DEVICE_SCSI << 16) + 0x0506)
+#define IOCTL_SCSI_MINIPORT_ENABLE_DISABLE_AUTOSAVE ((FILE_DEVICE_SCSI << 16) + 0x0507)
+#define IOCTL_SCSI_MINIPORT_SAVE_ATTRIBUTE_VALUES ((FILE_DEVICE_SCSI << 16) + 0x0508)
+#define IOCTL_SCSI_MINIPORT_EXECUTE_OFFLINE_DIAGS ((FILE_DEVICE_SCSI << 16) + 0x0509)
+#define IOCTL_SCSI_MINIPORT_ENABLE_DISABLE_AUTO_OFFLINE ((FILE_DEVICE_SCSI << 16) + 0x050a)
+#define IOCTL_SCSI_MINIPORT_READ_SMART_LOG ((FILE_DEVICE_SCSI << 16) + 0x050b)
+#define IOCTL_SCSI_MINIPORT_WRITE_SMART_LOG ((FILE_DEVICE_SCSI << 16) + 0x050c)
+
+/* CLUSTER support */
+#define IOCTL_SCSI_MINIPORT_NOT_QUORUM_CAPABLE ((FILE_DEVICE_SCSI << 16) + 0x0520)
+#define IOCTL_SCSI_MINIPORT_NOT_CLUSTER_CAPABLE ((FILE_DEVICE_SCSI << 16) + 0x0521)
+
+/* READ_TOC formats */
+#define READ_TOC_FORMAT_TOC 0x00
+#define READ_TOC_FORMAT_SESSION 0x01
+#define READ_TOC_FORMAT_FULL_TOC 0x02
+#define READ_TOC_FORMAT_PMA 0x03
+#define READ_TOC_FORMAT_ATIP 0x04
+
+/* Read Capacity Data. Returned in Big Endian format */
+typedef struct _READ_CAPACITY_DATA {
+ ULONG LogicalBlockAddress;
+ ULONG BytesPerBlock;
+} READ_CAPACITY_DATA, *PREAD_CAPACITY_DATA;
+
+/* Read Block Limits Data. Returned in Big Endian format */
+typedef struct _READ_BLOCK_LIMITS {
+ UCHAR Reserved;
+ UCHAR BlockMaximumSize[3];
+ UCHAR BlockMinimumSize[2];
+} READ_BLOCK_LIMITS_DATA, *PREAD_BLOCK_LIMITS_DATA;
+
+
+typedef struct _MODE_PARAMETER_HEADER {
+ UCHAR ModeDataLength;
+ UCHAR MediumType;
+ UCHAR DeviceSpecificParameter;
+ UCHAR BlockDescriptorLength;
+}MODE_PARAMETER_HEADER, *PMODE_PARAMETER_HEADER;
+
+typedef struct _MODE_PARAMETER_HEADER10 {
+ UCHAR ModeDataLength[2];
+ UCHAR MediumType;
+ UCHAR DeviceSpecificParameter;
+ UCHAR Reserved[2];
+ UCHAR BlockDescriptorLength[2];
+} MODE_PARAMETER_HEADER10, *PMODE_PARAMETER_HEADER10;
+
+#define MODE_FD_SINGLE_SIDE 0x01
+#define MODE_FD_DOUBLE_SIDE 0x02
+#define MODE_FD_MAXIMUM_TYPE 0x1E
+#define MODE_DSP_FUA_SUPPORTED 0x10
+#define MODE_DSP_WRITE_PROTECT 0x80
+
+typedef struct _MODE_PARAMETER_BLOCK {
+ UCHAR DensityCode;
+ UCHAR NumberOfBlocks[3];
+ UCHAR Reserved;
+ UCHAR BlockLength[3];
+} MODE_PARAMETER_BLOCK, *PMODE_PARAMETER_BLOCK;
+
+typedef struct _MODE_DISCONNECT_PAGE {
+ UCHAR PageCode : 6;
+ UCHAR Reserved : 1;
+ UCHAR PageSavable : 1;
+ UCHAR PageLength;
+ UCHAR BufferFullRatio;
+ UCHAR BufferEmptyRatio;
+ UCHAR BusInactivityLimit[2];
+ UCHAR BusDisconnectTime[2];
+ UCHAR BusConnectTime[2];
+ UCHAR MaximumBurstSize[2];
+ UCHAR DataTransferDisconnect : 2;
+ UCHAR Reserved2[3];
+}MODE_DISCONNECT_PAGE, *PMODE_DISCONNECT_PAGE;
+
+typedef struct _MODE_CACHING_PAGE {
+ UCHAR PageCode : 6;
+ UCHAR Reserved : 1;
+ UCHAR PageSavable : 1;
+ UCHAR PageLength;
+ UCHAR ReadDisableCache : 1;
+ UCHAR MultiplicationFactor : 1;
+ UCHAR WriteCacheEnable : 1;
+ UCHAR Reserved2 : 5;
+ UCHAR WriteRetensionPriority : 4;
+ UCHAR ReadRetensionPriority : 4;
+ UCHAR DisablePrefetchTransfer[2];
+ UCHAR MinimumPrefetch[2];
+ UCHAR MaximumPrefetch[2];
+ UCHAR MaximumPrefetchCeiling[2];
+}MODE_CACHING_PAGE, *PMODE_CACHING_PAGE;
+
+typedef struct _MODE_CDROM_WRITE_PARAMETERS_PAGE {
+ UCHAR PageLength;
+ UCHAR WriteType : 4;
+ UCHAR TestWrite : 1;
+ UCHAR LinkSizeValid : 1;
+ UCHAR BufferUnderrunFreeEnabled : 1;
+ UCHAR Reserved2 : 1;
+ UCHAR TrackMode : 4;
+ UCHAR Copy : 1;
+ UCHAR FixedPacket : 1;
+ UCHAR MultiSession : 2;
+ UCHAR DataBlockType : 4;
+ UCHAR Reserved3 : 4;
+ UCHAR LinkSize;
+ UCHAR Reserved4;
+ UCHAR HostApplicationCode : 6;
+ UCHAR Reserved5 : 2;
+ UCHAR SessionFormat;
+ UCHAR Reserved6;
+ UCHAR PacketSize[4];
+ UCHAR AudioPauseLength[2];
+ UCHAR Reserved7 : 7;
+ UCHAR MediaCatalogNumberValid : 1;
+ UCHAR MediaCatalogNumber[13];
+ UCHAR MediaCatalogNumberZero;
+ UCHAR MediaCatalogNumberAFrame;
+ UCHAR Reserved8 : 7;
+ UCHAR ISRCValid : 1;
+ UCHAR ISRCCountry[2];
+ UCHAR ISRCOwner[3];
+ UCHAR ISRCRecordingYear[2];
+ UCHAR ISRCSerialNumber[5];
+ UCHAR ISRCZero;
+ UCHAR ISRCAFrame;
+ UCHAR ISRCReserved;
+ UCHAR SubHeaderData[4];
+} MODE_CDROM_WRITE_PARAMETERS_PAGE, *PMODE_CDROM_WRITE_PARAMETERS_PAGE;
+
+typedef struct _MODE_FLEXIBLE_DISK_PAGE {
+ UCHAR PageCode : 6;
+ UCHAR Reserved : 1;
+ UCHAR PageSavable : 1;
+ UCHAR PageLength;
+ UCHAR TransferRate[2];
+ UCHAR NumberOfHeads;
+ UCHAR SectorsPerTrack;
+ UCHAR BytesPerSector[2];
+ UCHAR NumberOfCylinders[2];
+ UCHAR StartWritePrecom[2];
+ UCHAR StartReducedCurrent[2];
+ UCHAR StepRate[2];
+ UCHAR StepPluseWidth;
+ UCHAR HeadSettleDelay[2];
+ UCHAR MotorOnDelay;
+ UCHAR MotorOffDelay;
+ UCHAR Reserved2 : 5;
+ UCHAR MotorOnAsserted : 1;
+ UCHAR StartSectorNumber : 1;
+ UCHAR TrueReadySignal : 1;
+ UCHAR StepPlusePerCyclynder : 4;
+ UCHAR Reserved3 : 4;
+ UCHAR WriteCompenstation;
+ UCHAR HeadLoadDelay;
+ UCHAR HeadUnloadDelay;
+ UCHAR Pin2Usage : 4;
+ UCHAR Pin34Usage : 4;
+ UCHAR Pin1Usage : 4;
+ UCHAR Pin4Usage : 4;
+ UCHAR MediumRotationRate[2];
+ UCHAR Reserved4[2];
+} MODE_FLEXIBLE_DISK_PAGE, *PMODE_FLEXIBLE_DISK_PAGE;
+
+typedef struct _MODE_FORMAT_PAGE {
+ UCHAR PageCode : 6;
+ UCHAR Reserved : 1;
+ UCHAR PageSavable : 1;
+ UCHAR PageLength;
+ UCHAR TracksPerZone[2];
+ UCHAR AlternateSectorsPerZone[2];
+ UCHAR AlternateTracksPerZone[2];
+ UCHAR AlternateTracksPerLogicalUnit[2];
+ UCHAR SectorsPerTrack[2];
+ UCHAR BytesPerPhysicalSector[2];
+ UCHAR Interleave[2];
+ UCHAR TrackSkewFactor[2];
+ UCHAR CylinderSkewFactor[2];
+ UCHAR Reserved2 : 4;
+ UCHAR SurfaceFirst : 1;
+ UCHAR RemovableMedia : 1;
+ UCHAR HardSectorFormating : 1;
+ UCHAR SoftSectorFormating : 1;
+ UCHAR Reserved3[3];
+} MODE_FORMAT_PAGE, *PMODE_FORMAT_PAGE;
+
+typedef struct _MODE_RIGID_GEOMETRY_PAGE {
+ UCHAR PageCode : 6;
+ UCHAR Reserved : 1;
+ UCHAR PageSavable : 1;
+ UCHAR PageLength;
+ UCHAR NumberOfCylinders[3];
+ UCHAR NumberOfHeads;
+ UCHAR StartWritePrecom[3];
+ UCHAR StartReducedCurrent[3];
+ UCHAR DriveStepRate[2];
+ UCHAR LandZoneCyclinder[3];
+ UCHAR RotationalPositionLock : 2;
+ UCHAR Reserved2 : 6;
+ UCHAR RotationOffset;
+ UCHAR Reserved3;
+ UCHAR RoataionRate[2];
+ UCHAR Reserved4[2];
+} MODE_RIGID_GEOMETRY_PAGE, *PMODE_RIGID_GEOMETRY_PAGE;
+
+typedef struct _MODE_READ_WRITE_RECOVERY_PAGE {
+ UCHAR PageCode : 6;
+ UCHAR Reserved1 : 1;
+ UCHAR PSBit : 1;
+ UCHAR PageLength;
+ UCHAR DCRBit : 1;
+ UCHAR DTEBit : 1;
+ UCHAR PERBit : 1;
+ UCHAR EERBit : 1;
+ UCHAR RCBit : 1;
+ UCHAR TBBit : 1;
+ UCHAR ARRE : 1;
+ UCHAR AWRE : 1;
+ UCHAR ReadRetryCount;
+ UCHAR Reserved4[4];
+ UCHAR WriteRetryCount;
+ UCHAR Reserved5[3];
+} MODE_READ_WRITE_RECOVERY_PAGE, *PMODE_READ_WRITE_RECOVERY_PAGE;
+
+typedef struct _MODE_READ_RECOVERY_PAGE {
+ UCHAR PageCode : 6;
+ UCHAR Reserved1 : 1;
+ UCHAR PSBit : 1;
+ UCHAR PageLength;
+ UCHAR DCRBit : 1;
+ UCHAR DTEBit : 1;
+ UCHAR PERBit : 1;
+ UCHAR Reserved2 : 1;
+ UCHAR RCBit : 1;
+ UCHAR TBBit : 1;
+ UCHAR Reserved3 : 2;
+ UCHAR ReadRetryCount;
+ UCHAR Reserved4[4];
+} MODE_READ_RECOVERY_PAGE, *PMODE_READ_RECOVERY_PAGE;
+
+typedef struct _MODE_INFO_EXCEPTIONS {
+ UCHAR PageCode : 6;
+ UCHAR Reserved1 : 1;
+ UCHAR PSBit : 1;
+ UCHAR PageLength;
+ _ANONYMOUS_UNION union {
+ UCHAR Flags;
+ _ANONYMOUS_STRUCT struct {
+ UCHAR LogErr : 1;
+ UCHAR Reserved2 : 1;
+ UCHAR Test : 1;
+ UCHAR Dexcpt : 1;
+ UCHAR Reserved3 : 3;
+ UCHAR Perf : 1;
+ } DUMMYSTRUCTNAME;
+ } DUMMYUNIONNAME;
+ UCHAR ReportMethod : 4;
+ UCHAR Reserved4 : 4;
+ UCHAR IntervalTimer[4];
+ UCHAR ReportCount[4];
+} MODE_INFO_EXCEPTIONS, *PMODE_INFO_EXCEPTIONS;
+
+/* CDROM audio control */
+#define CDB_AUDIO_PAUSE 0x00
+#define CDB_AUDIO_RESUME 0x01
+#define CDB_DEVICE_START 0x11
+#define CDB_DEVICE_STOP 0x10
+#define CDB_EJECT_MEDIA 0x10
+#define CDB_LOAD_MEDIA 0x01
+#define CDB_SUBCHANNEL_HEADER 0x00
+#define CDB_SUBCHANNEL_BLOCK 0x01
+
+#define CDROM_AUDIO_CONTROL_PAGE 0x0E
+#define MODE_SELECT_IMMEDIATE 0x04
+#define MODE_SELECT_PFBIT 0x10
+
+#define CDB_USE_MSF 0x01
+
+typedef struct _PORT_OUTPUT {
+ UCHAR ChannelSelection;
+ UCHAR Volume;
+} PORT_OUTPUT, *PPORT_OUTPUT;
+
+typedef struct _AUDIO_OUTPUT {
+ UCHAR CodePage;
+ UCHAR ParameterLength;
+ UCHAR Immediate;
+ UCHAR Reserved[2];
+ UCHAR LbaFormat;
+ UCHAR LogicalBlocksPerSecond[2];
+ PORT_OUTPUT PortOutput[4];
+} AUDIO_OUTPUT, *PAUDIO_OUTPUT;
+
+/* Multisession CDROMs */
+#define GET_LAST_SESSION 0x01
+#define GET_SESSION_DATA 0x02;
+
+/* Atapi 2.5 changers */
+typedef struct _MECHANICAL_STATUS_INFORMATION_HEADER {
+ UCHAR CurrentSlot : 5;
+ UCHAR ChangerState : 2;
+ UCHAR Fault : 1;
+ UCHAR Reserved : 5;
+ UCHAR MechanismState : 3;
+ UCHAR CurrentLogicalBlockAddress[3];
+ UCHAR NumberAvailableSlots;
+ UCHAR SlotTableLength[2];
+} MECHANICAL_STATUS_INFORMATION_HEADER, *PMECHANICAL_STATUS_INFORMATION_HEADER;
+
+typedef struct _SLOT_TABLE_INFORMATION {
+ UCHAR DiscChanged : 1;
+ UCHAR Reserved : 6;
+ UCHAR DiscPresent : 1;
+ UCHAR Reserved2[3];
+} SLOT_TABLE_INFORMATION, *PSLOT_TABLE_INFORMATION;
+
+typedef struct _MECHANICAL_STATUS {
+ MECHANICAL_STATUS_INFORMATION_HEADER MechanicalStatusHeader;
+ SLOT_TABLE_INFORMATION SlotTableInfo[1];
+} MECHANICAL_STATUS, *PMECHANICAL_STATUS;
+
+
+/* Tape definitions */
+typedef struct _TAPE_POSITION_DATA {
+ UCHAR Reserved1 : 2;
+ UCHAR BlockPositionUnsupported : 1;
+ UCHAR Reserved2 : 3;
+ UCHAR EndOfPartition : 1;
+ UCHAR BeginningOfPartition : 1;
+ UCHAR PartitionNumber;
+ USHORT Reserved3;
+ UCHAR FirstBlock[4];
+ UCHAR LastBlock[4];
+ UCHAR Reserved4;
+ UCHAR NumberOfBlocks[3];
+ UCHAR NumberOfBytes[4];
+} TAPE_POSITION_DATA, *PTAPE_POSITION_DATA;
+
+/* This structure is used to convert little endian ULONGs
+ to SCSI CDB big endians values. */
+typedef union _EIGHT_BYTE {
+ _ANONYMOUS_STRUCT struct {
+ UCHAR Byte0;
+ UCHAR Byte1;
+ UCHAR Byte2;
+ UCHAR Byte3;
+ UCHAR Byte4;
+ UCHAR Byte5;
+ UCHAR Byte6;
+ UCHAR Byte7;
+ } DUMMYSTRUCTNAME;
+ ULONGLONG AsULongLong;
+} EIGHT_BYTE, *PEIGHT_BYTE;
+
+typedef union _FOUR_BYTE {
+ _ANONYMOUS_STRUCT struct {
+ UCHAR Byte0;
+ UCHAR Byte1;
+ UCHAR Byte2;
+ UCHAR Byte3;
+ } DUMMYSTRUCTNAME;
+ ULONG AsULong;
+} FOUR_BYTE, *PFOUR_BYTE;
+
+typedef union _TWO_BYTE {
+ _ANONYMOUS_STRUCT struct {
+ UCHAR Byte0;
+ UCHAR Byte1;
+ } DUMMYSTRUCTNAME;
+ USHORT AsUShort;
+} TWO_BYTE, *PTWO_BYTE;
+
+/* Byte reversing macro for converting between
+ big- and little-endian formats */
+#define REVERSE_BYTES_QUAD(Destination, Source) { \
+ PEIGHT_BYTE _val1 = (PEIGHT_BYTE)(Destination); \
+ PEIGHT_BYTE _val2 = (PEIGHT_BYTE)(Source); \
+ _val1->Byte7 = _val2->Byte0; \
+ _val1->Byte6 = _val2->Byte1; \
+ _val1->Byte5 = _val2->Byte2; \
+ _val1->Byte4 = _val2->Byte3; \
+ _val1->Byte3 = _val2->Byte4; \
+ _val1->Byte2 = _val2->Byte5; \
+ _val1->Byte1 = _val2->Byte6; \
+ _val1->Byte0 = _val2->Byte7; \
+}
+
+#define REVERSE_BYTES(Destination, Source) { \
+ PFOUR_BYTE _val1 = (PFOUR_BYTE)(Destination); \
+ PFOUR_BYTE _val2 = (PFOUR_BYTE)(Source); \
+ _val1->Byte3 = _val2->Byte0; \
+ _val1->Byte2 = _val2->Byte1; \
+ _val1->Byte1 = _val2->Byte2; \
+ _val1->Byte0 = _val2->Byte3; \
+}
+
+#define REVERSE_BYTES_SHORT(Destination, Source) { \
+ PTWO_BYTE _val1 = (PTWO_BYTE)(Destination); \
+ PTWO_BYTE _val2 = (PTWO_BYTE)(Source); \
+ _val1->Byte1 = _val2->Byte0; \
+ _val1->Byte0 = _val2->Byte1; \
+}
+
+#define REVERSE_SHORT(Short) { \
+ UCHAR _val; \
+ PTWO_BYTE _val2 = (PTWO_BYTE)(Short); \
+ _val = _val2->Byte0; \
+ _val2->Byte0 = _val2->Byte1; \
+ _val2->Byte1 = _val; \
+}
+
+#define REVERSE_LONG(Long) { \
+ UCHAR _val; \
+ PFOUR_BYTE _val2 = (PFOUR_BYTE)(Long); \
+ _val = _val2->Byte3; \
+ _val2->Byte3 = _val2->Byte0; \
+ _val2->Byte0 = _val; \
+ _val = _val2->Byte2; \
+ _val2->Byte2 = _val2->Byte1; \
+ _val2->Byte1 = _val; \
+}
+
+#define WHICH_BIT(Data, Bit) { \
+ UCHAR _val; \
+ for (_val = 0; _val < 32; _val++) { \
+ if (((Data) >> _val) == 1) { \
+ break; \
+ } \
+ } \
+ ASSERT(_val != 32); \
+ (Bit) = _val; \
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __SCSI_H */
diff --git a/tcc/include/winapi/ddk/scsiscan.h b/tcc/include/winapi/ddk/scsiscan.h
new file mode 100644
index 0000000..5468328
--- /dev/null
+++ b/tcc/include/winapi/ddk/scsiscan.h
@@ -0,0 +1,130 @@
+/*
+ * scsiscan.h
+ *
+ * SCSI scanner driver interface
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __SCSISCAN_H
+#define __SCSISCAN_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+
+#define IOCTL_SCSISCAN_CMD \
+ CTL_CODE(FILE_DEVICE_SCANNER, SCSISCAN_CMD_CODE, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
+
+#define IOCTL_SCSISCAN_LOCKDEVICE \
+ CTL_CODE(FILE_DEVICE_SCANNER, SCSISCAN_LOCKDEVICE, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
+
+#define IOCTL_SCSISCAN_SET_TIMEOUT \
+ CTL_CODE(FILE_DEVICE_SCANNER, SCSISCAN_SET_TIMEOUT, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_SCSISCAN_GET_INFO \
+ CTL_CODE(FILE_DEVICE_SCANNER, SCSISCAN_GET_INFO, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
+
+#define IOCTL_SCSISCAN_UNLOCKDEVICE \
+ CTL_CODE(FILE_DEVICE_SCANNER, SCSISCAN_UNLOCKDEVICE, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
+
+
+/* SCSISCAN_CMD.SrbFlags constants */
+#define SRB_FLAGS_DISABLE_SYNCH_TRANSFER 0x00000008
+#define SRB_FLAGS_DISABLE_AUTOSENSE 0x00000020
+#define SRB_FLAGS_DATA_IN 0x00000040
+#define SRB_FLAGS_DATA_OUT 0x00000080
+#define SRB_FLAGS_NO_DATA_TRANSFER 0x00000000
+
+/* SCSISCAN_CMD.pSrbStatus constants */
+#define SRB_STATUS_PENDING 0x00
+#define SRB_STATUS_SUCCESS 0x01
+#define SRB_STATUS_ABORTED 0x02
+#define SRB_STATUS_ABORT_FAILED 0x03
+#define SRB_STATUS_ERROR 0x04
+#define SRB_STATUS_BUSY 0x05
+#define SRB_STATUS_INVALID_REQUEST 0x06
+#define SRB_STATUS_INVALID_PATH_ID 0x07
+#define SRB_STATUS_NO_DEVICE 0x08
+#define SRB_STATUS_TIMEOUT 0x09
+#define SRB_STATUS_SELECTION_TIMEOUT 0x0A
+#define SRB_STATUS_COMMAND_TIMEOUT 0x0B
+#define SRB_STATUS_MESSAGE_REJECTED 0x0D
+#define SRB_STATUS_BUS_RESET 0x0E
+#define SRB_STATUS_PARITY_ERROR 0x0F
+#define SRB_STATUS_REQUEST_SENSE_FAILED 0x10
+#define SRB_STATUS_NO_HBA 0x11
+#define SRB_STATUS_DATA_OVERRUN 0x12
+#define SRB_STATUS_UNEXPECTED_BUS_FREE 0x13
+#define SRB_STATUS_PHASE_SEQUENCE_FAILURE 0x14
+#define SRB_STATUS_BAD_SRB_BLOCK_LENGTH 0x15
+#define SRB_STATUS_REQUEST_FLUSHED 0x16
+#define SRB_STATUS_INVALID_LUN 0x20
+#define SRB_STATUS_INVALID_TARGET_ID 0x21
+#define SRB_STATUS_BAD_FUNCTION 0x22
+#define SRB_STATUS_ERROR_RECOVERY 0x23
+#define SRB_STATUS_QUEUE_FROZEN 0x40
+#define SRB_STATUS_AUTOSENSE_VALID 0x80
+
+#define SRB_STATUS(Status) (Status & ~(SRB_STATUS_AUTOSENSE_VALID | SRB_STATUS_QUEUE_FROZEN))
+
+typedef struct _SCSISCAN_CMD {
+ ULONG Reserved1;
+ ULONG Size;
+ ULONG SrbFlags;
+ UCHAR CdbLength;
+ UCHAR SenseLength;
+ UCHAR Reserved2;
+ UCHAR Reserved3;
+ ULONG TransferLength;
+ UCHAR Cdb[16];
+ PUCHAR pSrbStatus;
+ PUCHAR pSenseBuffer;
+} SCSISCAN_CMD, *PSCSISCAN_CMD;
+
+#define MAX_STRING 128
+
+/* SCSISCAN_INFO.Flags constants */
+#define SCSISCAN_RESERVED 0x000
+#define SCSISCAN_CMD_CODE 0x004
+#define SCSISCAN_LOCKDEVICE 0x005
+#define SCSISCAN_UNLOCKDEVICE 0x006
+#define SCSISCAN_SET_TIMEOUT 0x007
+#define SCSISCAN_GET_INFO 0x008
+
+typedef struct _SCSISCAN_INFO {
+ ULONG Size;
+ ULONG Flags;
+ UCHAR PortNumber;
+ UCHAR PathId;
+ UCHAR TargetId;
+ UCHAR Lun;
+ UCHAR AdapterName[MAX_STRING];
+ ULONG Reserved;
+} SCSISCAN_INFO, *PSCSISCAN_INFO;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __SCSISCAN_H */
diff --git a/tcc/include/winapi/ddk/scsiwmi.h b/tcc/include/winapi/ddk/scsiwmi.h
new file mode 100644
index 0000000..7aae2a8
--- /dev/null
+++ b/tcc/include/winapi/ddk/scsiwmi.h
@@ -0,0 +1,215 @@
+/*
+ * scsiwmi.h
+ *
+ * SCSI WMILIB interface.
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __SCSIWMI_H
+#define __SCSIWMI_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#pragma pack(push,4)
+
+#include "ntddk.h"
+#include "srb.h"
+
+
+typedef struct _SCSIWMI_REQUEST_CONTEXT {
+ PVOID UserContext;
+ ULONG BufferSize;
+ PUCHAR Buffer;
+ UCHAR MinorFunction;
+ UCHAR ReturnStatus;
+ ULONG ReturnSize;
+} SCSIWMI_REQUEST_CONTEXT, *PSCSIWMI_REQUEST_CONTEXT;
+
+#ifdef _GUID_DEFINED
+# warning _GUID_DEFINED is deprecated, use GUID_DEFINED instead
+#endif
+
+#if ! (defined _GUID_DEFINED || defined GUID_DEFINED)
+#define GUID_DEFINED
+typedef struct _GUID {
+ unsigned long Data1;
+ unsigned short Data2;
+ unsigned short Data3;
+ unsigned char Data4[ 8 ];
+} GUID;
+#endif
+
+#ifndef _LPCGUID_DEFINED
+#define _LPCGUID_DEFINED
+typedef const GUID *LPCGUID;
+#endif
+
+typedef struct _SCSIWMIGUIDREGINFO {
+ LPCGUID Guid;
+ ULONG InstanceCount;
+ ULONG Flags;
+} SCSIWMIGUIDREGINFO, *PSCSIWMIGUIDREGINFO;
+
+typedef UCHAR DDKAPI
+(*PSCSIWMI_QUERY_REGINFO)(
+ /*IN*/ PVOID DeviceContext,
+ /*IN*/ PSCSIWMI_REQUEST_CONTEXT RequestContext,
+ /*OUT*/ PWCHAR *MofResourceName);
+
+typedef BOOLEAN DDKAPI
+(*PSCSIWMI_QUERY_DATABLOCK)(
+ /*IN*/ PVOID Context,
+ /*IN*/ PSCSIWMI_REQUEST_CONTEXT DispatchContext,
+ /*IN*/ ULONG GuidIndex,
+ /*IN*/ ULONG InstanceIndex,
+ /*IN*/ ULONG InstanceCount,
+ /*IN OUT*/ PULONG InstanceLengthArray,
+ /*IN*/ ULONG BufferAvail,
+ /*OUT*/ PUCHAR Buffer);
+
+typedef BOOLEAN DDKAPI
+(*PSCSIWMI_SET_DATABLOCK)(
+ /*IN*/ PVOID DeviceContext,
+ /*IN*/ PSCSIWMI_REQUEST_CONTEXT RequestContext,
+ /*IN*/ ULONG GuidIndex,
+ /*IN*/ ULONG InstanceIndex,
+ /*IN*/ ULONG BufferSize,
+ /*IN*/ PUCHAR Buffer);
+
+typedef BOOLEAN DDKAPI
+(*PSCSIWMI_SET_DATAITEM)(
+ /*IN*/ PVOID DeviceContext,
+ /*IN*/ PSCSIWMI_REQUEST_CONTEXT RequestContext,
+ /*IN*/ ULONG GuidIndex,
+ /*IN*/ ULONG InstanceIndex,
+ /*IN*/ ULONG DataItemId,
+ /*IN*/ ULONG BufferSize,
+ /*IN*/ PUCHAR Buffer);
+
+typedef BOOLEAN DDKAPI
+(*PSCSIWMI_EXECUTE_METHOD)(
+ /*IN*/ PVOID DeviceContext,
+ /*IN*/ PSCSIWMI_REQUEST_CONTEXT RequestContext,
+ /*IN*/ ULONG GuidIndex,
+ /*IN*/ ULONG InstanceIndex,
+ /*IN*/ ULONG MethodId,
+ /*IN*/ ULONG InBufferSize,
+ /*IN*/ ULONG OutBufferSize,
+ /*IN OUT*/ PUCHAR Buffer);
+
+typedef enum _SCSIWMI_ENABLE_DISABLE_CONTROL {
+ ScsiWmiEventControl,
+ ScsiWmiDataBlockControl
+} SCSIWMI_ENABLE_DISABLE_CONTROL;
+
+typedef BOOLEAN DDKAPI
+(*PSCSIWMI_FUNCTION_CONTROL)(
+ /*IN*/ PVOID DeviceContext,
+ /*IN*/ PSCSIWMI_REQUEST_CONTEXT RequestContext,
+ /*IN*/ ULONG GuidIndex,
+ /*IN*/ SCSIWMI_ENABLE_DISABLE_CONTROL Function,
+ /*IN*/ BOOLEAN Enable);
+
+typedef struct _SCSIWMILIB_CONTEXT {
+ ULONG GuidCount;
+ PSCSIWMIGUIDREGINFO GuidList;
+ PSCSIWMI_QUERY_REGINFO QueryWmiRegInfo;
+ PSCSIWMI_QUERY_DATABLOCK QueryWmiDataBlock;
+ PSCSIWMI_SET_DATABLOCK SetWmiDataBlock;
+ PSCSIWMI_SET_DATAITEM SetWmiDataItem;
+ PSCSIWMI_EXECUTE_METHOD ExecuteWmiMethod;
+ PSCSIWMI_FUNCTION_CONTROL WmiFunctionControl;
+} SCSI_WMILIB_CONTEXT, *PSCSI_WMILIB_CONTEXT;
+
+SCSIPORTAPI
+BOOLEAN
+DDKAPI
+ScsiPortWmiDispatchFunction(
+ /*IN*/ PSCSI_WMILIB_CONTEXT WmiLibInfo,
+ /*IN*/ UCHAR MinorFunction,
+ /*IN*/ PVOID DeviceContext,
+ /*IN*/ PSCSIWMI_REQUEST_CONTEXT RequestContext,
+ /*IN*/ PVOID DataPath,
+ /*IN*/ ULONG BufferSize,
+ /*IN*/ PVOID Buffer);
+
+#define ScsiPortWmiFireAdapterEvent( \
+ HwDeviceExtension, \
+ Guid, \
+ InstanceIndex, \
+ EventDataSize, \
+ EventData) \
+ ScsiPortWmiFireLogicalUnitEvent( \
+ HwDeviceExtension, \
+ 0xff, \
+ 0, \
+ 0, \
+ Guid, \
+ InstanceIndex, \
+ EventDataSize, \
+ EventData)
+
+/*
+ * ULONG
+ * ScsiPortWmiGetReturnSize(
+ * PSCSIWMI_REQUEST_CONTEXT RequestContext);
+ */
+#define ScsiPortWmiGetReturnSize(RequestContext) \
+ ((RequestContext)->ReturnSize)
+
+/* UCHAR
+ * ScsiPortWmiGetReturnStatus(
+ * PSCSIWMI_REQUEST_CONTEXT RequestContext);
+ */
+#define ScsiPortWmiGetReturnStatus(RequestContext) \
+ ((RequestContext)->ReturnStatus)
+
+SCSIPORTAPI
+VOID
+DDKAPI
+ScsiPortWmiPostProcess(
+ /*IN*/ PSCSIWMI_REQUEST_CONTEXT RequestContext,
+ /*IN*/ UCHAR SrbStatus,
+ /*IN*/ ULONG BufferUsed);
+
+SCSIPORTAPI
+VOID
+DDKAPI
+ScsiPortWmiFireLogicalUnitEvent(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ UCHAR PathId,
+ /*IN*/ UCHAR TargetId,
+ /*IN*/ UCHAR Lun,
+ /*IN*/ LPGUID Guid,
+ /*IN*/ ULONG InstanceIndex,
+ /*IN*/ ULONG EventDataSize,
+ /*IN*/ PVOID EventData);
+
+#pragma pack(pop)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __SCSIWMI_H */
diff --git a/tcc/include/winapi/ddk/smbus.h b/tcc/include/winapi/ddk/smbus.h
new file mode 100644
index 0000000..a88d397
--- /dev/null
+++ b/tcc/include/winapi/ddk/smbus.h
@@ -0,0 +1,190 @@
+/*
+ * smbus.h
+ *
+ * System Management Bus driver interface
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __SMBUS_H
+#define __SMBUS_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if !defined(SMBCLASS)
+ #define SMBCLASSAPI DECLSPEC_IMPORT
+#else
+ #define SMBCLASSAPI DECLSPEC_EXPORT
+#endif
+
+#define SMB_BUS_REQUEST \
+ CTL_CODE(FILE_DEVICE_UNKNOWN, 0, METHOD_NEITHER, FILE_ANY_ACCESS)
+
+#define SMB_DEREGISTER_ALARM_NOTIFY \
+ CTL_CODE(FILE_DEVICE_UNKNOWN, 2, METHOD_NEITHER, FILE_ANY_ACCESS)
+
+#define SMB_REGISTER_ALARM_NOTIFY \
+ CTL_CODE(FILE_DEVICE_UNKNOWN, 1, METHOD_NEITHER, FILE_ANY_ACCESS)
+
+
+struct _SMB_CLASS;
+
+#define SMB_MAX_DATA_SIZE 32
+
+/* SMB_REQUEST.Status constants */
+#define SMB_STATUS_OK 0x00
+#define SMB_UNKNOWN_FAILURE 0x07
+#define SMB_ADDRESS_NOT_ACKNOWLEDGED 0x10
+#define SMB_DEVICE_ERROR 0x11
+#define SMB_COMMAND_ACCESS_DENIED 0x12
+#define SMB_UNKNOWN_ERROR 0x13
+#define SMB_DEVICE_ACCESS_DENIED 0x17
+#define SMB_TIMEOUT 0x18
+#define SMB_UNSUPPORTED_PROTOCOL 0x19
+#define SMB_BUS_BUSY 0x1A
+
+/* SMB_REQUEST.Protocol constants */
+#define SMB_WRITE_QUICK 0x00
+#define SMB_READ_QUICK 0x01
+#define SMB_SEND_BYTE 0x02
+#define SMB_RECEIVE_BYTE 0x03
+#define SMB_WRITE_BYTE 0x04
+#define SMB_READ_BYTE 0x05
+#define SMB_WRITE_WORD 0x06
+#define SMB_READ_WORD 0x07
+#define SMB_WRITE_BLOCK 0x08
+#define SMB_READ_BLOCK 0x09
+#define SMB_PROCESS_CALL 0x0A
+#define SMB_MAXIMUM_PROTOCOL 0x0A
+
+typedef struct _SMB_REQUEST {
+ UCHAR Status;
+ UCHAR Protocol;
+ UCHAR Address;
+ UCHAR Command;
+ UCHAR BlockLength;
+ UCHAR Data[SMB_MAX_DATA_SIZE];
+} SMB_REQUEST, *PSMB_REQUEST;
+
+typedef VOID STDCALL
+(*SMB_ALARM_NOTIFY)(
+ PVOID Context,
+ UCHAR Address,
+ USHORT Data);
+
+typedef struct _SMB_REGISTER_ALARM {
+ UCHAR MinAddress;
+ UCHAR MaxAddress;
+ SMB_ALARM_NOTIFY NotifyFunction;
+ PVOID NotifyContext;
+} SMB_REGISTER_ALARM, *PSMB_REGISTER_ALARM;
+
+/* SMB_CLASS.XxxVersion constants */
+#define SMB_CLASS_MAJOR_VERSION 0x0001
+#define SMB_CLASS_MINOR_VERSION 0x0000
+
+typedef NTSTATUS DDKAPI
+(*SMB_RESET_DEVICE)(
+ /*IN*/ struct _SMB_CLASS *SmbClass,
+ /*IN*/ PVOID SmbMiniport);
+
+typedef VOID DDKAPI
+(*SMB_START_IO)(
+ /*IN*/ struct _SMB_CLASS *SmbClass,
+ /*IN*/ PVOID SmbMiniport);
+
+typedef NTSTATUS DDKAPI
+(*SMB_STOP_DEVICE)(
+ /*IN*/ struct _SMB_CLASS *SmbClass,
+ /*IN*/ PVOID SmbMiniport);
+
+typedef struct _SMB_CLASS {
+ USHORT MajorVersion;
+ USHORT MinorVersion;
+ PVOID Miniport;
+ PDEVICE_OBJECT DeviceObject;
+ PDEVICE_OBJECT PDO;
+ PDEVICE_OBJECT LowerDeviceObject;
+ PIRP CurrentIrp;
+ PSMB_REQUEST CurrentSmb;
+ SMB_RESET_DEVICE ResetDevice;
+ SMB_START_IO StartIo;
+ SMB_STOP_DEVICE StopDevice;
+} SMB_CLASS, *PSMB_CLASS;
+
+SMBCLASSAPI
+VOID
+DDKAPI
+SmbClassAlarm(
+ /*IN*/ PSMB_CLASS SmbClass,
+ /*IN*/ UCHAR Address,
+ /*IN*/ USHORT Data);
+
+SMBCLASSAPI
+VOID
+DDKAPI
+SmbClassCompleteRequest(
+ /*IN*/ PSMB_CLASS SmbClass);
+
+typedef NTSTATUS DDKAPI
+(*PSMB_INITIALIZE_MINIPORT)(
+ /*IN*/ PSMB_CLASS SmbClass,
+ /*IN*/ PVOID MiniportExtension,
+ /*IN*/ PVOID MiniportContext);
+
+SMBCLASSAPI
+NTSTATUS
+DDKAPI
+SmbClassCreateFdo(
+ /*IN*/ PDRIVER_OBJECT DriverObject,
+ /*IN*/ PDEVICE_OBJECT PDO,
+ /*IN*/ ULONG MiniportExtensionSize,
+ /*IN*/ PSMB_INITIALIZE_MINIPORT MiniportInitialize,
+ /*IN*/ PVOID MiniportContext,
+ /*OUT*/ PDEVICE_OBJECT *FDO);
+
+SMBCLASSAPI
+NTSTATUS
+DDKAPI
+SmbClassInitializeDevice(
+ /*IN*/ ULONG MajorVersion,
+ /*IN*/ ULONG MinorVersion,
+ /*IN*/ PDRIVER_OBJECT DriverObject);
+
+SMBCLASSAPI
+VOID
+DDKAPI
+SmbClassLockDevice(
+ /*IN*/ PSMB_CLASS SmbClass);
+
+SMBCLASSAPI
+VOID
+DDKAPI
+SmbClassUnlockDevice(
+ /*IN*/ PSMB_CLASS SmbClass);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __SMBUS_H */
diff --git a/tcc/include/winapi/ddk/srb.h b/tcc/include/winapi/ddk/srb.h
new file mode 100644
index 0000000..a93854c
--- /dev/null
+++ b/tcc/include/winapi/ddk/srb.h
@@ -0,0 +1,753 @@
+/*
+ * scsi.h
+ *
+ * Interface between SCSI miniport drivers and the SCSI port driver.
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __SRB_H
+#define __SRB_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+
+#if defined(_SCSIPORT_)
+ #define SCSIPORTAPI DECLSPEC_EXPORT
+#else
+ #define SCSIPORTAPI DECLSPEC_IMPORT
+#endif
+
+#ifdef DBG
+#define DebugPrint(x) ScsiDebugPrint x
+#else
+#define DebugPrint(x)
+#endif
+
+typedef PHYSICAL_ADDRESS SCSI_PHYSICAL_ADDRESS, *PSCSI_PHYSICAL_ADDRESS;
+
+#define SP_UNINITIALIZED_VALUE ((ULONG) ~0)
+#define SP_UNTAGGED ((UCHAR) ~0)
+
+#define SRB_SIMPLE_TAG_REQUEST 0x20
+#define SRB_HEAD_OF_QUEUE_TAG_REQUEST 0x21
+#define SRB_ORDERED_QUEUE_TAG_REQUEST 0x22
+
+#define SRB_STATUS_QUEUE_FROZEN 0x40
+#define SRB_STATUS_AUTOSENSE_VALID 0x80
+
+#define SRB_STATUS(Status) \
+ (Status & ~(SRB_STATUS_AUTOSENSE_VALID | SRB_STATUS_QUEUE_FROZEN))
+
+#define MAXIMUM_CDB_SIZE 12
+
+#ifdef DBG
+#define SCSI_PORT_SIGNATURE 0x54524f50
+#endif
+
+
+#define SCSI_MAXIMUM_LOGICAL_UNITS 8
+#define SCSI_MAXIMUM_TARGETS_PER_BUS 128
+#define SCSI_MAXIMUM_LUNS_PER_TARGET 255
+#define SCSI_MAXIMUM_BUSES 8
+#define SCSI_MINIMUM_PHYSICAL_BREAKS 16
+#define SCSI_MAXIMUM_PHYSICAL_BREAKS 255
+#define SCSI_MAXIMUM_TARGETS 8
+
+#define SRB_FUNCTION_WMI 0x17
+
+#define SRB_WMI_FLAGS_ADAPTER_REQUEST 0x0001
+
+#define SP_BUS_PARITY_ERROR 0x0001
+#define SP_UNEXPECTED_DISCONNECT 0x0002
+#define SP_INVALID_RESELECTION 0x0003
+#define SP_BUS_TIME_OUT 0x0004
+#define SP_PROTOCOL_ERROR 0x0005
+#define SP_INTERNAL_ADAPTER_ERROR 0x0006
+#define SP_REQUEST_TIMEOUT 0x0007
+#define SP_IRQ_NOT_RESPONDING 0x0008
+#define SP_BAD_FW_WARNING 0x0009
+#define SP_BAD_FW_ERROR 0x000a
+#define SP_LOST_WMI_MINIPORT_REQUEST 0x000b
+
+/* SCSI_REQUEST_BLOCK.Function constants */
+#define SRB_FUNCTION_EXECUTE_SCSI 0x00
+#define SRB_FUNCTION_CLAIM_DEVICE 0x01
+#define SRB_FUNCTION_IO_CONTROL 0x02
+#define SRB_FUNCTION_RECEIVE_EVENT 0x03
+#define SRB_FUNCTION_RELEASE_QUEUE 0x04
+#define SRB_FUNCTION_ATTACH_DEVICE 0x05
+#define SRB_FUNCTION_RELEASE_DEVICE 0x06
+#define SRB_FUNCTION_SHUTDOWN 0x07
+#define SRB_FUNCTION_FLUSH 0x08
+#define SRB_FUNCTION_ABORT_COMMAND 0x10
+#define SRB_FUNCTION_RELEASE_RECOVERY 0x11
+#define SRB_FUNCTION_RESET_BUS 0x12
+#define SRB_FUNCTION_RESET_DEVICE 0x13
+#define SRB_FUNCTION_TERMINATE_IO 0x14
+#define SRB_FUNCTION_FLUSH_QUEUE 0x15
+#define SRB_FUNCTION_REMOVE_DEVICE 0x16
+#define SRB_FUNCTION_WMI 0x17
+#define SRB_FUNCTION_LOCK_QUEUE 0x18
+#define SRB_FUNCTION_UNLOCK_QUEUE 0x19
+#define SRB_FUNCTION_RESET_LOGICAL_UNIT 0x20
+
+/* SCSI_REQUEST_BLOCK.SrbStatus constants */
+#define SRB_STATUS_PENDING 0x00
+#define SRB_STATUS_SUCCESS 0x01
+#define SRB_STATUS_ABORTED 0x02
+#define SRB_STATUS_ABORT_FAILED 0x03
+#define SRB_STATUS_ERROR 0x04
+#define SRB_STATUS_BUSY 0x05
+#define SRB_STATUS_INVALID_REQUEST 0x06
+#define SRB_STATUS_INVALID_PATH_ID 0x07
+#define SRB_STATUS_NO_DEVICE 0x08
+#define SRB_STATUS_TIMEOUT 0x09
+#define SRB_STATUS_SELECTION_TIMEOUT 0x0A
+#define SRB_STATUS_COMMAND_TIMEOUT 0x0B
+#define SRB_STATUS_MESSAGE_REJECTED 0x0D
+#define SRB_STATUS_BUS_RESET 0x0E
+#define SRB_STATUS_PARITY_ERROR 0x0F
+#define SRB_STATUS_REQUEST_SENSE_FAILED 0x10
+#define SRB_STATUS_NO_HBA 0x11
+#define SRB_STATUS_DATA_OVERRUN 0x12
+#define SRB_STATUS_UNEXPECTED_BUS_FREE 0x13
+#define SRB_STATUS_PHASE_SEQUENCE_FAILURE 0x14
+#define SRB_STATUS_BAD_SRB_BLOCK_LENGTH 0x15
+#define SRB_STATUS_REQUEST_FLUSHED 0x16
+#define SRB_STATUS_INVALID_LUN 0x20
+#define SRB_STATUS_INVALID_TARGET_ID 0x21
+#define SRB_STATUS_BAD_FUNCTION 0x22
+#define SRB_STATUS_ERROR_RECOVERY 0x23
+#define SRB_STATUS_NOT_POWERED 0x24
+#define SRB_STATUS_INTERNAL_ERROR 0x30
+
+/* SCSI_REQUEST_BLOCK.SrbFlags constants */
+#define SRB_FLAGS_QUEUE_ACTION_ENABLE 0x00000002
+#define SRB_FLAGS_DISABLE_DISCONNECT 0x00000004
+#define SRB_FLAGS_DISABLE_SYNCH_TRANSFER 0x00000008
+#define SRB_FLAGS_BYPASS_FROZEN_QUEUE 0x00000010
+#define SRB_FLAGS_DISABLE_AUTOSENSE 0x00000020
+#define SRB_FLAGS_DATA_IN 0x00000040
+#define SRB_FLAGS_DATA_OUT 0x00000080
+#define SRB_FLAGS_NO_DATA_TRANSFER 0x00000000
+#define SRB_FLAGS_UNSPECIFIED_DIRECTION (SRB_FLAGS_DATA_IN | SRB_FLAGS_DATA_OUT)
+#define SRB_FLAGS_NO_QUEUE_FREEZE 0x00000100
+#define SRB_FLAGS_ADAPTER_CACHE_ENABLE 0x00000200
+#define SRB_FLAGS_FREE_SENSE_BUFFER 0x00000400
+#define SRB_FLAGS_IS_ACTIVE 0x00010000
+#define SRB_FLAGS_ALLOCATED_FROM_ZONE 0x00020000
+#define SRB_FLAGS_SGLIST_FROM_POOL 0x00040000
+#define SRB_FLAGS_BYPASS_LOCKED_QUEUE 0x00080000
+#define SRB_FLAGS_NO_KEEP_AWAKE 0x00100000
+#define SRB_FLAGS_PORT_DRIVER_ALLOCSENSE 0x00200000
+#define SRB_FLAGS_PORT_DRIVER_SENSEHASPORT 0x00400000
+#define SRB_FLAGS_DONT_START_NEXT_PACKET 0x00800000
+#define SRB_FLAGS_PORT_DRIVER_RESERVED 0x0F000000
+#define SRB_FLAGS_CLASS_DRIVER_RESERVED 0xF0000000
+
+typedef struct _SCSI_REQUEST_BLOCK {
+ USHORT Length;
+ UCHAR Function;
+ UCHAR SrbStatus;
+ UCHAR ScsiStatus;
+ UCHAR PathId;
+ UCHAR TargetId;
+ UCHAR Lun;
+ UCHAR QueueTag;
+ UCHAR QueueAction;
+ UCHAR CdbLength;
+ UCHAR SenseInfoBufferLength;
+ ULONG SrbFlags;
+ ULONG DataTransferLength;
+ ULONG TimeOutValue;
+ PVOID DataBuffer;
+ PVOID SenseInfoBuffer;
+ struct _SCSI_REQUEST_BLOCK *NextSrb;
+ PVOID OriginalRequest;
+ PVOID SrbExtension;
+ _ANONYMOUS_UNION union {
+ ULONG InternalStatus;
+ ULONG QueueSortKey;
+ } DUMMYUNIONNAME;
+#if defined(_WIN64)
+ ULONG Reserved;
+#endif
+ UCHAR Cdb[16];
+} SCSI_REQUEST_BLOCK, *PSCSI_REQUEST_BLOCK;
+
+#define SCSI_REQUEST_BLOCK_SIZE sizeof(SCSI_REQUEST_BLOCK)
+
+typedef struct _ACCESS_RANGE {
+ SCSI_PHYSICAL_ADDRESS RangeStart;
+ ULONG RangeLength;
+ BOOLEAN RangeInMemory;
+} ACCESS_RANGE, *PACCESS_RANGE;
+
+/* PORT_CONFIGURATION_INFORMATION.Dma64BitAddresses constants */
+#define SCSI_DMA64_MINIPORT_SUPPORTED 0x01
+#define SCSI_DMA64_SYSTEM_SUPPORTED 0x80
+
+typedef struct _PORT_CONFIGURATION_INFORMATION {
+ ULONG Length;
+ ULONG SystemIoBusNumber;
+ INTERFACE_TYPE AdapterInterfaceType;
+ ULONG BusInterruptLevel;
+ ULONG BusInterruptVector;
+ KINTERRUPT_MODE InterruptMode;
+ ULONG MaximumTransferLength;
+ ULONG NumberOfPhysicalBreaks;
+ ULONG DmaChannel;
+ ULONG DmaPort;
+ DMA_WIDTH DmaWidth;
+ DMA_SPEED DmaSpeed;
+ ULONG AlignmentMask;
+ ULONG NumberOfAccessRanges;
+ ACCESS_RANGE (*AccessRanges)[];
+ PVOID Reserved;
+ UCHAR NumberOfBuses;
+ UCHAR InitiatorBusId[8];
+ BOOLEAN ScatterGather;
+ BOOLEAN Master;
+ BOOLEAN CachesData;
+ BOOLEAN AdapterScansDown;
+ BOOLEAN AtdiskPrimaryClaimed;
+ BOOLEAN AtdiskSecondaryClaimed;
+ BOOLEAN Dma32BitAddresses;
+ BOOLEAN DemandMode;
+ BOOLEAN MapBuffers;
+ BOOLEAN NeedPhysicalAddresses;
+ BOOLEAN TaggedQueuing;
+ BOOLEAN AutoRequestSense;
+ BOOLEAN MultipleRequestPerLu;
+ BOOLEAN ReceiveEvent;
+ BOOLEAN RealModeInitialized;
+ BOOLEAN BufferAccessScsiPortControlled;
+ UCHAR MaximumNumberOfTargets;
+ UCHAR ReservedUchars[2];
+ ULONG SlotNumber;
+ ULONG BusInterruptLevel2;
+ ULONG BusInterruptVector2;
+ KINTERRUPT_MODE InterruptMode2;
+ ULONG DmaChannel2;
+ ULONG DmaPort2;
+ DMA_WIDTH DmaWidth2;
+ DMA_SPEED DmaSpeed2;
+ ULONG DeviceExtensionSize;
+ ULONG SpecificLuExtensionSize;
+ ULONG SrbExtensionSize;
+ UCHAR Dma64BitAddresses;
+ BOOLEAN ResetTargetSupported;
+ UCHAR MaximumNumberOfLogicalUnits;
+ BOOLEAN WmiDataProvider;
+} PORT_CONFIGURATION_INFORMATION, *PPORT_CONFIGURATION_INFORMATION;
+
+#define CONFIG_INFO_VERSION_2 sizeof(PORT_CONFIGURATION_INFORMATION)
+
+typedef enum _SCSI_NOTIFICATION_TYPE {
+ RequestComplete,
+ NextRequest,
+ NextLuRequest,
+ ResetDetected,
+ CallDisableInterrupts,
+ CallEnableInterrupts,
+ RequestTimerCall,
+ BusChangeDetected,
+ WMIEvent,
+ WMIReregister
+} SCSI_NOTIFICATION_TYPE, *PSCSI_NOTIFICATION_TYPE;
+
+#ifdef __GNUC__
+__extension__ /* enums limited to range of integer */
+#endif
+typedef enum _SCSI_ADAPTER_CONTROL_TYPE {
+ ScsiQuerySupportedControlTypes = 0,
+ ScsiStopAdapter,
+ ScsiRestartAdapter,
+ ScsiSetBootConfig,
+ ScsiSetRunningConfig,
+ ScsiAdapterControlMax,
+ MakeAdapterControlTypeSizeOfUlong = 0xffffffff
+} SCSI_ADAPTER_CONTROL_TYPE, *PSCSI_ADAPTER_CONTROL_TYPE;
+
+typedef enum _SCSI_ADAPTER_CONTROL_STATUS {
+ ScsiAdapterControlSuccess = 0,
+ ScsiAdapterControlUnsuccessful
+} SCSI_ADAPTER_CONTROL_STATUS, *PSCSI_ADAPTER_CONTROL_STATUS;
+
+typedef struct _SCSI_SUPPORTED_CONTROL_TYPE_LIST {
+ ULONG MaxControlType;
+ BOOLEAN SupportedTypeList[0];
+} SCSI_SUPPORTED_CONTROL_TYPE_LIST, *PSCSI_SUPPORTED_CONTROL_TYPE_LIST;
+
+typedef SCSI_ADAPTER_CONTROL_STATUS DDKAPI
+(*PHW_ADAPTER_CONTROL)(
+ /*IN*/ PVOID DeviceExtension,
+ /*IN*/ SCSI_ADAPTER_CONTROL_TYPE ControlType,
+ /*IN*/ PVOID Parameters);
+
+typedef BOOLEAN DDKAPI
+(*PHW_ADAPTER_STATE)(
+ /*IN*/ PVOID DeviceExtension,
+ /*IN*/ PVOID Context,
+ /*IN*/ BOOLEAN SaveState);
+
+#define SP_RETURN_NOT_FOUND 0
+#define SP_RETURN_FOUND 1
+#define SP_RETURN_ERROR 2
+#define SP_RETURN_BAD_CONFIG 3
+
+typedef ULONG DDKAPI
+(*PHW_FIND_ADAPTER)(
+ /*IN*/ PVOID DeviceExtension,
+ /*IN*/ PVOID HwContext,
+ /*IN*/ PVOID BusInformation,
+ /*IN*/ PCHAR ArgumentString,
+ /*IN OUT*/ PPORT_CONFIGURATION_INFORMATION ConfigInfo,
+ /*OUT*/ PBOOLEAN Again);
+
+typedef BOOLEAN DDKAPI
+(*PHW_INITIALIZE)(
+ /*IN*/ PVOID DeviceExtension);
+
+typedef BOOLEAN DDKAPI
+(*PHW_INTERRUPT)(
+ /*IN*/ PVOID DeviceExtension);
+
+typedef BOOLEAN DDKAPI
+(*PHW_RESET_BUS)(
+ /*IN*/ PVOID DeviceExtension,
+ /*IN*/ ULONG PathId);
+
+typedef VOID DDKAPI
+(*PHW_DMA_STARTED)(
+ /*IN*/ PVOID DeviceExtension);
+
+typedef BOOLEAN DDKAPI
+(*PHW_STARTIO)(
+ /*IN*/ PVOID DeviceExtension,
+ /*IN*/ PSCSI_REQUEST_BLOCK Srb);
+
+typedef VOID DDKAPI
+(*PHW_TIMER)(
+ /*IN*/ PVOID DeviceExtension);
+
+typedef struct _HW_INITIALIZATION_DATA {
+ ULONG HwInitializationDataSize;
+ INTERFACE_TYPE AdapterInterfaceType;
+ PHW_INITIALIZE HwInitialize;
+ PHW_STARTIO HwStartIo;
+ PHW_INTERRUPT HwInterrupt;
+ PHW_FIND_ADAPTER HwFindAdapter;
+ PHW_RESET_BUS HwResetBus;
+ PHW_DMA_STARTED HwDmaStarted;
+ PHW_ADAPTER_STATE HwAdapterState;
+ ULONG DeviceExtensionSize;
+ ULONG SpecificLuExtensionSize;
+ ULONG SrbExtensionSize;
+ ULONG NumberOfAccessRanges;
+ PVOID Reserved;
+ BOOLEAN MapBuffers;
+ BOOLEAN NeedPhysicalAddresses;
+ BOOLEAN TaggedQueuing;
+ BOOLEAN AutoRequestSense;
+ BOOLEAN MultipleRequestPerLu;
+ BOOLEAN ReceiveEvent;
+ USHORT VendorIdLength;
+ PVOID VendorId;
+ USHORT ReservedUshort;
+ USHORT DeviceIdLength;
+ PVOID DeviceId;
+ PHW_ADAPTER_CONTROL HwAdapterControl;
+} HW_INITIALIZATION_DATA, *PHW_INITIALIZATION_DATA;
+
+SCSIPORTAPI
+VOID
+DDKAPI
+ScsiPortCompleteRequest(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ UCHAR PathId,
+ /*IN*/ UCHAR TargetId,
+ /*IN*/ UCHAR Lun,
+ /*IN*/ UCHAR SrbStatus);
+
+/*
+ * ULONG
+ * ScsiPortConvertPhysicalAddressToUlong(
+ * IN SCSI_PHYSICAL_ADDRESS Address);
+ */
+#define ScsiPortConvertPhysicalAddressToUlong(Address) ((Address).LowPart)
+
+SCSIPORTAPI
+SCSI_PHYSICAL_ADDRESS
+DDKAPI
+ScsiPortConvertUlongToPhysicalAddress(
+ /*IN*/ ULONG UlongAddress);
+
+SCSIPORTAPI
+VOID
+DDKAPI
+ScsiPortFlushDma(
+ /*IN*/ PVOID DeviceExtension);
+
+SCSIPORTAPI
+VOID
+DDKAPI
+ScsiPortFreeDeviceBase(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PVOID MappedAddress);
+
+SCSIPORTAPI
+ULONG
+DDKAPI
+ScsiPortGetBusData(
+ /*IN*/ PVOID DeviceExtension,
+ /*IN*/ ULONG BusDataType,
+ /*IN*/ ULONG SystemIoBusNumber,
+ /*IN*/ ULONG SlotNumber,
+ /*IN*/ PVOID Buffer,
+ /*IN*/ ULONG Length);
+
+SCSIPORTAPI
+PVOID
+DDKAPI
+ScsiPortGetDeviceBase(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ INTERFACE_TYPE BusType,
+ /*IN*/ ULONG SystemIoBusNumber,
+ /*IN*/ SCSI_PHYSICAL_ADDRESS IoAddress,
+ /*IN*/ ULONG NumberOfBytes,
+ /*IN*/ BOOLEAN InIoSpace);
+
+SCSIPORTAPI
+PVOID
+DDKAPI
+ScsiPortGetLogicalUnit(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ UCHAR PathId,
+ /*IN*/ UCHAR TargetId,
+ /*IN*/ UCHAR Lun);
+
+SCSIPORTAPI
+SCSI_PHYSICAL_ADDRESS
+DDKAPI
+ScsiPortGetPhysicalAddress(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PSCSI_REQUEST_BLOCK Srb /*OPTIONAL*/,
+ /*IN*/ PVOID VirtualAddress,
+ /*OUT*/ ULONG *Length);
+
+SCSIPORTAPI
+PSCSI_REQUEST_BLOCK
+DDKAPI
+ScsiPortGetSrb(
+ /*IN*/ PVOID DeviceExtension,
+ /*IN*/ UCHAR PathId,
+ /*IN*/ UCHAR TargetId,
+ /*IN*/ UCHAR Lun,
+ /*IN*/ LONG QueueTag);
+
+SCSIPORTAPI
+PVOID
+DDKAPI
+ScsiPortGetUncachedExtension(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PPORT_CONFIGURATION_INFORMATION ConfigInfo,
+ /*IN*/ ULONG NumberOfBytes);
+
+SCSIPORTAPI
+PVOID
+DDKAPI
+ScsiPortGetVirtualAddress(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ SCSI_PHYSICAL_ADDRESS PhysicalAddress);
+
+SCSIPORTAPI
+ULONG
+DDKAPI
+ScsiPortInitialize(
+ /*IN*/ PVOID Argument1,
+ /*IN*/ PVOID Argument2,
+ /*IN*/ struct _HW_INITIALIZATION_DATA *HwInitializationData,
+ /*IN*/ PVOID HwContext /*OPTIONAL*/);
+
+SCSIPORTAPI
+VOID
+DDKAPI
+ScsiPortIoMapTransfer(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PSCSI_REQUEST_BLOCK Srb,
+ /*IN*/ ULONG LogicalAddress,
+ /*IN*/ ULONG Length);
+
+SCSIPORTAPI
+VOID
+DDKAPI
+ScsiPortLogError(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PSCSI_REQUEST_BLOCK Srb /*OPTIONAL*/,
+ /*IN*/ UCHAR PathId,
+ /*IN*/ UCHAR TargetId,
+ /*IN*/ UCHAR Lun,
+ /*IN*/ ULONG ErrorCode,
+ /*IN*/ ULONG UniqueId);
+
+SCSIPORTAPI
+VOID
+DDKAPI
+ScsiPortMoveMemory(
+ /*IN*/ PVOID WriteBuffer,
+ /*IN*/ PVOID ReadBuffer,
+ /*IN*/ ULONG Length);
+
+SCSIPORTAPI
+VOID
+DDKCDECLAPI
+ScsiPortNotification(
+ /*IN*/ SCSI_NOTIFICATION_TYPE NotificationType,
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ ...);
+
+SCSIPORTAPI
+VOID
+DDKAPI
+ScsiPortQuerySystemTime(
+ /*OUT*/ PLARGE_INTEGER CurrentTime);
+
+SCSIPORTAPI
+VOID
+DDKAPI
+ScsiPortReadPortBufferUchar(
+ /*IN*/ PUCHAR Port,
+ /*IN*/ PUCHAR Buffer,
+ /*IN*/ ULONG Count);
+
+SCSIPORTAPI
+VOID
+DDKAPI
+ScsiPortReadPortBufferUlong(
+ /*IN*/ PULONG Port,
+ /*IN*/ PULONG Buffer,
+ /*IN*/ ULONG Count);
+
+SCSIPORTAPI
+VOID
+DDKAPI
+ScsiPortReadPortBufferUshort(
+ /*IN*/ PUSHORT Port,
+ /*IN*/ PUSHORT Buffer,
+ /*IN*/ ULONG Count);
+
+SCSIPORTAPI
+UCHAR
+DDKAPI
+ScsiPortReadPortUchar(
+ /*IN*/ PUCHAR Port);
+
+SCSIPORTAPI
+ULONG
+DDKAPI
+ScsiPortReadPortUlong(
+ /*IN*/ PULONG Port);
+
+SCSIPORTAPI
+USHORT
+DDKAPI
+ScsiPortReadPortUshort(
+ /*IN*/ PUSHORT Port);
+
+SCSIPORTAPI
+VOID
+DDKAPI
+ScsiPortReadRegisterBufferUchar(
+ /*IN*/ PUCHAR Register,
+ /*IN*/ PUCHAR Buffer,
+ /*IN*/ ULONG Count);
+
+SCSIPORTAPI
+VOID
+DDKAPI
+ScsiPortReadRegisterBufferUlong(
+ /*IN*/ PULONG Register,
+ /*IN*/ PULONG Buffer,
+ /*IN*/ ULONG Count);
+
+SCSIPORTAPI
+VOID
+DDKAPI
+ScsiPortReadRegisterBufferUshort(
+ /*IN*/ PUSHORT Register,
+ /*IN*/ PUSHORT Buffer,
+ /*IN*/ ULONG Count);
+
+SCSIPORTAPI
+UCHAR
+DDKAPI
+ScsiPortReadRegisterUchar(
+ /*IN*/ PUCHAR Register);
+
+SCSIPORTAPI
+ULONG
+DDKAPI
+ScsiPortReadRegisterUlong(
+ /*IN*/ PULONG Register);
+
+SCSIPORTAPI
+USHORT
+DDKAPI
+ScsiPortReadRegisterUshort(
+ /*IN*/ PUSHORT Register);
+
+SCSIPORTAPI
+ULONG
+DDKAPI
+ScsiPortSetBusDataByOffset(
+ /*IN*/ PVOID DeviceExtension,
+ /*IN*/ ULONG BusDataType,
+ /*IN*/ ULONG SystemIoBusNumber,
+ /*IN*/ ULONG SlotNumber,
+ /*IN*/ PVOID Buffer,
+ /*IN*/ ULONG Offset,
+ /*IN*/ ULONG Length);
+
+SCSIPORTAPI
+VOID
+DDKAPI
+ScsiPortStallExecution(
+ /*IN*/ ULONG Delay);
+
+SCSIPORTAPI
+BOOLEAN
+DDKAPI
+ScsiPortValidateRange(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ INTERFACE_TYPE BusType,
+ /*IN*/ ULONG SystemIoBusNumber,
+ /*IN*/ SCSI_PHYSICAL_ADDRESS IoAddress,
+ /*IN*/ ULONG NumberOfBytes,
+ /*IN*/ BOOLEAN InIoSpace);
+
+SCSIPORTAPI
+VOID
+DDKAPI
+ScsiPortWritePortBufferUchar(
+ /*IN*/ PUCHAR Port,
+ /*IN*/ PUCHAR Buffer,
+ /*IN*/ ULONG Count);
+
+SCSIPORTAPI
+VOID
+DDKAPI
+ScsiPortWritePortBufferUlong(
+ /*IN*/ PULONG Port,
+ /*IN*/ PULONG Buffer,
+ /*IN*/ ULONG Count);
+
+SCSIPORTAPI
+VOID
+DDKAPI
+ScsiPortWritePortBufferUshort(
+ /*IN*/ PUSHORT Port,
+ /*IN*/ PUSHORT Buffer,
+ /*IN*/ ULONG Count);
+
+SCSIPORTAPI
+VOID
+DDKAPI
+ScsiPortWritePortUchar(
+ /*IN*/ PUCHAR Port,
+ /*IN*/ UCHAR Value);
+
+SCSIPORTAPI
+VOID
+DDKAPI
+ScsiPortWritePortUlong(
+ /*IN*/ PULONG Port,
+ /*IN*/ ULONG Value);
+
+SCSIPORTAPI
+VOID
+DDKAPI
+ScsiPortWritePortUshort(
+ /*IN*/ PUSHORT Port,
+ /*IN*/ USHORT Value);
+
+SCSIPORTAPI
+VOID
+DDKAPI
+ScsiPortWriteRegisterBufferUchar(
+ /*IN*/ PUCHAR Register,
+ /*IN*/ PUCHAR Buffer,
+ /*IN*/ ULONG Count);
+
+SCSIPORTAPI
+VOID
+DDKAPI
+ScsiPortWriteRegisterBufferUlong(
+ /*IN*/ PULONG Register,
+ /*IN*/ PULONG Buffer,
+ /*IN*/ ULONG Count);
+
+SCSIPORTAPI
+VOID
+DDKAPI
+ScsiPortWriteRegisterBufferUshort(
+ /*IN*/ PUSHORT Register,
+ /*IN*/ PUSHORT Buffer,
+ /*IN*/ ULONG Count);
+
+SCSIPORTAPI
+VOID
+DDKAPI
+ScsiPortWriteRegisterUchar(
+ /*IN*/ PUCHAR Register,
+ /*IN*/ ULONG Value);
+
+SCSIPORTAPI
+VOID
+DDKAPI
+ScsiPortWriteRegisterUlong(
+ /*IN*/ PULONG Register,
+ /*IN*/ ULONG Value);
+
+SCSIPORTAPI
+VOID
+DDKAPI
+ScsiPortWriteRegisterUshort(
+ /*IN*/ PUSHORT Register,
+ /*IN*/ USHORT Value);
+
+SCSIPORTAPI
+VOID
+DDKCDECLAPI
+ScsiDebugPrint(
+ /*IN*/ ULONG DebugPrintLevel,
+ /*IN*/ PCCHAR DebugMessage,
+ /*IN*/ ...);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __SRB_H */
diff --git a/tcc/include/winapi/ddk/storport.h b/tcc/include/winapi/ddk/storport.h
new file mode 100644
index 0000000..a7df9a1
--- /dev/null
+++ b/tcc/include/winapi/ddk/storport.h
@@ -0,0 +1,422 @@
+/*
+ * storport.h
+ *
+ * StorPort interface
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __STORPORT_H
+#define __STORPORT_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+#include "srb.h"
+
+#if defined(_STORPORT_)
+ #define STORPORTAPI DECLSPEC_EXPORT
+#else
+ #define STORPORTAPI DECLSPEC_IMPORT
+#endif
+
+
+typedef PHYSICAL_ADDRESS STOR_PHYSICAL_ADDRESS;
+
+typedef struct _STOR_SCATTER_GATHER_ELEMENT {
+ STOR_PHYSICAL_ADDRESS PhysicalAddress;
+ ULONG Length;
+ ULONG_PTR Reserved;
+} STOR_SCATTER_GATHER_ELEMENT, *PSTOR_SCATTER_GATHER_ELEMENT;
+
+typedef struct _STOR_SCATTER_GATHER_LIST {
+ ULONG NumberOfElements;
+ ULONG_PTR Reserved;
+ STOR_SCATTER_GATHER_ELEMENT List[0];
+} STOR_SCATTER_GATHER_LIST, *PSTOR_SCATTER_GATHER_LIST;
+
+typedef struct _SCSI_WMI_REQUEST_BLOCK {
+ USHORT Length;
+ UCHAR Function;
+ UCHAR SrbStatus;
+ UCHAR WMISubFunction;
+ UCHAR PathId;
+ UCHAR TargetId;
+ UCHAR Lun;
+ UCHAR Reserved1;
+ UCHAR WMIFlags;
+ UCHAR Reserved2[2];
+ ULONG SrbFlags;
+ ULONG DataTransferLength;
+ ULONG TimeOutValue;
+ PVOID DataBuffer;
+ PVOID DataPath;
+ PVOID Reserved3;
+ PVOID OriginalRequest;
+ PVOID SrbExtension;
+ ULONG Reserved4;
+ UCHAR Reserved5[16];
+} SCSI_WMI_REQUEST_BLOCK, *PSCSI_WMI_REQUEST_BLOCK;
+
+
+STORPORTAPI
+ULONG
+DDKAPI
+StorPortInitialize(
+ /*IN*/ PVOID Argument1,
+ /*IN*/ PVOID Argument2,
+ /*IN*/ PHW_INITIALIZATION_DATA HwInitializationData,
+ /*IN*/ PVOID Unused);
+
+STORPORTAPI
+VOID
+DDKAPI
+StorPortFreeDeviceBase(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PVOID MappedAddress);
+
+STORPORTAPI
+ULONG
+DDKAPI
+StorPortGetBusData(
+ /*IN*/ PVOID DeviceExtension,
+ /*IN*/ ULONG BusDataType,
+ /*IN*/ ULONG SystemIoBusNumber,
+ /*IN*/ ULONG SlotNumber,
+ /*IN*/ PVOID Buffer,
+ /*IN*/ ULONG Length);
+
+STORPORTAPI
+ULONG
+DDKAPI
+StorPortSetBusDataByOffset(
+ /*IN*/ PVOID DeviceExtension,
+ /*IN*/ ULONG BusDataType,
+ /*IN*/ ULONG SystemIoBusNumber,
+ /*IN*/ ULONG SlotNumber,
+ /*IN*/ PVOID Buffer,
+ /*IN*/ ULONG Offset,
+ /*IN*/ ULONG Length);
+
+STORPORTAPI
+PVOID
+DDKAPI
+StorPortGetDeviceBase(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ INTERFACE_TYPE BusType,
+ /*IN*/ ULONG SystemIoBusNumber,
+ /*IN*/ SCSI_PHYSICAL_ADDRESS IoAddress,
+ /*IN*/ ULONG NumberOfBytes,
+ /*IN*/ BOOLEAN InIoSpace);
+
+STORPORTAPI
+PVOID
+DDKAPI
+StorPortGetLogicalUnit(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ UCHAR PathId,
+ /*IN*/ UCHAR TargetId,
+ /*IN*/ UCHAR Lun);
+
+STORPORTAPI
+PSCSI_REQUEST_BLOCK
+DDKAPI
+StorPortGetSrb(
+ /*IN*/ PVOID DeviceExtension,
+ /*IN*/ UCHAR PathId,
+ /*IN*/ UCHAR TargetId,
+ /*IN*/ UCHAR Lun,
+ /*IN*/ LONG QueueTag);
+
+STORPORTAPI
+STOR_PHYSICAL_ADDRESS
+DDKAPI
+StorPortGetPhysicalAddress(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PSCSI_REQUEST_BLOCK Srb,
+ /*IN*/ PVOID VirtualAddress,
+ /*OUT*/ ULONG *Length);
+
+STORPORTAPI
+PVOID
+DDKAPI
+StorPortGetVirtualAddress(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ STOR_PHYSICAL_ADDRESS PhysicalAddress);
+
+STORPORTAPI
+PVOID
+DDKAPI
+StorPortGetUncachedExtension(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PPORT_CONFIGURATION_INFORMATION ConfigInfo,
+ /*IN*/ ULONG NumberOfBytes);
+
+STORPORTAPI
+VOID
+DDKCDECLAPI
+StorPortNotification(
+ /*IN*/ SCSI_NOTIFICATION_TYPE NotificationType,
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ ...);
+
+STORPORTAPI
+VOID
+DDKAPI
+StorPortLogError(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PSCSI_REQUEST_BLOCK Srb /*OPTIONAL*/,
+ /*IN*/ UCHAR PathId,
+ /*IN*/ UCHAR TargetId,
+ /*IN*/ UCHAR Lun,
+ /*IN*/ ULONG ErrorCode,
+ /*IN*/ ULONG UniqueId);
+
+STORPORTAPI
+VOID
+DDKAPI
+StorPortCompleteRequest(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ UCHAR PathId,
+ /*IN*/ UCHAR TargetId,
+ /*IN*/ UCHAR Lun,
+ /*IN*/ UCHAR SrbStatus);
+
+STORPORTAPI
+VOID
+DDKAPI
+StorPortMoveMemory(
+ /*IN*/ PVOID WriteBuffer,
+ /*IN*/ PVOID ReadBuffer,
+ /*IN*/ ULONG Length);
+
+STORPORTAPI
+VOID
+DDKAPI
+StorPortStallExecution(
+ /*IN*/ ULONG Delay);
+
+STORPORTAPI
+STOR_PHYSICAL_ADDRESS
+DDKAPI
+StorPortConvertUlong64ToPhysicalAddress(
+ /*IN*/ ULONG64 UlongAddress);
+
+STORPORTAPI
+ULONG64
+DDKAPI
+StorPortConvertPhysicalAddressToUlong64(
+ /*IN*/ STOR_PHYSICAL_ADDRESS Address);
+
+STORPORTAPI
+BOOLEAN
+DDKAPI
+StorPortValidateRange(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ INTERFACE_TYPE BusType,
+ /*IN*/ ULONG SystemIoBusNumber,
+ /*IN*/ STOR_PHYSICAL_ADDRESS IoAddress,
+ /*IN*/ ULONG NumberOfBytes,
+ /*IN*/ BOOLEAN InIoSpace);
+
+STORPORTAPI
+VOID
+DDKCDECLAPI
+StorPortDebugPrint(
+ /*IN*/ ULONG DebugPrintLevel,
+ /*IN*/ PCCHAR DebugMessage,
+ /*IN*/ ...);
+
+STORPORTAPI
+UCHAR
+DDKAPI
+StorPortReadPortUchar(
+ /*IN*/ PUCHAR Port);
+
+STORPORTAPI
+ULONG
+DDKAPI
+StorPortReadPortUlong(
+ /*IN*/ PULONG Port);
+
+STORPORTAPI
+USHORT
+DDKAPI
+StorPortReadPortUshort(
+ /*IN*/ PUSHORT Port);
+
+STORPORTAPI
+UCHAR
+DDKAPI
+StorPortReadRegisterUchar(
+ /*IN*/ PUCHAR Register);
+
+STORPORTAPI
+ULONG
+DDKAPI
+StorPortReadRegisterUlong(
+ /*IN*/ PULONG Register);
+
+STORPORTAPI
+USHORT
+DDKAPI
+StorPortReadRegisterUshort(
+ /*IN*/ PUSHORT Register);
+
+STORPORTAPI
+VOID
+DDKAPI
+StorPortWritePortUchar(
+ /*IN*/ PUCHAR Port,
+ /*IN*/ UCHAR Value);
+
+STORPORTAPI
+VOID
+DDKAPI
+StorPortWritePortUlong(
+ /*IN*/ PULONG Port,
+ /*IN*/ ULONG Value);
+
+STORPORTAPI
+VOID
+DDKAPI
+StorPortWritePortUshort(
+ /*IN*/ PUSHORT Port,
+ /*IN*/ USHORT Value);
+
+STORPORTAPI
+VOID
+DDKAPI
+StorPortWriteRegisterUchar(
+ /*IN*/ PUCHAR Port,
+ /*IN*/ UCHAR Value);
+
+STORPORTAPI
+VOID
+DDKAPI
+StorPortWriteRegisterUlong(
+ /*IN*/ PULONG Port,
+ /*IN*/ ULONG Value);
+
+STORPORTAPI
+VOID
+DDKAPI
+StorPortWriteRegisterUshort(
+ /*IN*/ PUSHORT Port,
+ /*IN*/ USHORT Value);
+
+STORPORTAPI
+BOOLEAN
+DDKAPI
+StorPortPauseDevice(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ UCHAR PathId,
+ /*IN*/ UCHAR TargetId,
+ /*IN*/ UCHAR Lun,
+ /*IN*/ ULONG TimeOut);
+
+STORPORTAPI
+BOOLEAN
+DDKAPI
+StorPortResumeDevice(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ UCHAR PathId,
+ /*IN*/ UCHAR TargetId,
+ /*IN*/ UCHAR Lun);
+
+STORPORTAPI
+BOOLEAN
+DDKAPI
+StorPortPause(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ ULONG TimeOut);
+
+STORPORTAPI
+BOOLEAN
+DDKAPI
+StorPortResume(
+ /*IN*/ PVOID HwDeviceExtension);
+
+STORPORTAPI
+BOOLEAN
+DDKAPI
+StorPortDeviceBusy(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ UCHAR PathId,
+ /*IN*/ UCHAR TargetId,
+ /*IN*/ UCHAR Lun,
+ /*IN*/ ULONG RequestsToComplete);
+
+STORPORTAPI
+BOOLEAN
+DDKAPI
+StorPortDeviceReady(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ UCHAR PathId,
+ /*IN*/ UCHAR TargetId,
+ /*IN*/ UCHAR Lun);
+
+STORPORTAPI
+BOOLEAN
+DDKAPI
+StorPortBusy(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ ULONG RequestsToComplete);
+
+STORPORTAPI
+BOOLEAN
+DDKAPI
+StorPortReady(
+ /*IN*/ PVOID HwDeviceExtension);
+
+STORPORTAPI
+PSTOR_SCATTER_GATHER_LIST
+DDKAPI
+StorPortGetScatterGatherList(
+ /*IN*/ PVOID DeviceExtension,
+ /*IN*/ PSCSI_REQUEST_BLOCK Srb);
+
+typedef BOOLEAN DDKAPI
+(*PSTOR_SYNCHRONIZED_ACCESS)(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PVOID Context);
+
+STORPORTAPI
+VOID
+DDKAPI
+StorPortSynchronizeAccess(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PSTOR_SYNCHRONIZED_ACCESS SynchronizedAccessRoutine,
+ /*IN*/ PVOID Context);
+
+#ifdef DBG
+#define DebugPrint(x) StorPortDebugPrint x
+#else
+#define DebugPrint(x)
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __STORPORT_H */
diff --git a/tcc/include/winapi/ddk/tdi.h b/tcc/include/winapi/ddk/tdi.h
new file mode 100644
index 0000000..0a48b41
--- /dev/null
+++ b/tcc/include/winapi/ddk/tdi.h
@@ -0,0 +1,593 @@
+/*
+ * tdi.h
+ *
+ * TDI user mode definitions
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __TDI_H
+#define __TDI_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+#include "ntddtdi.h"
+#include "tdistat.h"
+#include "netpnp.h"
+
+/* Basic types */
+
+typedef LONG TDI_STATUS;
+typedef PVOID CONNECTION_CONTEXT;
+
+typedef struct _TDI_CONNECTION_INFORMATION {
+ LONG UserDataLength;
+ PVOID UserData;
+ LONG OptionsLength;
+ PVOID Options;
+ LONG RemoteAddressLength;
+ PVOID RemoteAddress;
+} TDI_CONNECTION_INFORMATION, *PTDI_CONNECTION_INFORMATION;
+
+typedef struct _TDI_REQUEST {
+ union {
+ HANDLE AddressHandle;
+ CONNECTION_CONTEXT ConnectionContext;
+ HANDLE ControlChannel;
+ } Handle;
+ PVOID RequestNotifyObject;
+ PVOID RequestContext;
+ TDI_STATUS TdiStatus;
+} TDI_REQUEST, *PTDI_REQUEST;
+
+typedef struct _TDI_REQUEST_STATUS {
+ TDI_STATUS Status;
+ PVOID RequestContext;
+ ULONG BytesTransferred;
+} TDI_REQUEST_STATUS, *PTDI_REQUEST_STATUS;
+
+typedef struct _TDI_CONNECT_REQUEST {
+ TDI_REQUEST Request;
+ PTDI_CONNECTION_INFORMATION RequestConnectionInformation;
+ PTDI_CONNECTION_INFORMATION ReturnConnectionInformation;
+ LARGE_INTEGER Timeout;
+} TDI_REQUEST_CONNECT, *PTDI_REQUEST_CONNECT;
+
+typedef struct _TDI_REQUEST_ACCEPT {
+ TDI_REQUEST Request;
+ PTDI_CONNECTION_INFORMATION RequestConnectionInformation;
+ PTDI_CONNECTION_INFORMATION ReturnConnectionInformation;
+} TDI_REQUEST_ACCEPT, *PTDI_REQUEST_ACCEPT;
+
+typedef struct _TDI_REQUEST_LISTEN {
+ TDI_REQUEST Request;
+ PTDI_CONNECTION_INFORMATION RequestConnectionInformation;
+ PTDI_CONNECTION_INFORMATION ReturnConnectionInformation;
+ USHORT ListenFlags;
+} TDI_REQUEST_LISTEN, *PTDI_REQUEST_LISTEN;
+
+typedef struct _TDI_DISCONNECT_REQUEST {
+ TDI_REQUEST Request;
+ LARGE_INTEGER Timeout;
+} TDI_REQUEST_DISCONNECT, *PTDI_REQUEST_DISCONNECT;
+
+typedef struct _TDI_REQUEST_SEND {
+ TDI_REQUEST Request;
+ USHORT SendFlags;
+} TDI_REQUEST_SEND, *PTDI_REQUEST_SEND;
+
+typedef struct _TDI_REQUEST_RECEIVE {
+ TDI_REQUEST Request;
+ USHORT ReceiveFlags;
+} TDI_REQUEST_RECEIVE, *PTDI_REQUEST_RECEIVE;
+
+typedef struct _TDI_REQUEST_SEND_DATAGRAM {
+ TDI_REQUEST Request;
+ PTDI_CONNECTION_INFORMATION SendDatagramInformation;
+} TDI_REQUEST_SEND_DATAGRAM, *PTDI_REQUEST_SEND_DATAGRAM;
+
+typedef struct _TDI_REQUEST_RECEIVE_DATAGRAM {
+ TDI_REQUEST Request;
+ PTDI_CONNECTION_INFORMATION ReceiveDatagramInformation;
+ PTDI_CONNECTION_INFORMATION ReturnInformation;
+ USHORT ReceiveFlags;
+} TDI_REQUEST_RECEIVE_DATAGRAM, *PTDI_REQUEST_RECEIVE_DATAGRAM;
+
+typedef struct _TDI_REQUEST_SET_EVENT {
+ TDI_REQUEST Request;
+ LONG EventType;
+ PVOID EventHandler;
+ PVOID EventContext;
+} TDI_REQUEST_SET_EVENT_HANDLER, *PTDI_REQUEST_SET_EVENT_HANDLER;
+
+#define TDI_RECEIVE_BROADCAST 0x00000004
+#define TDI_RECEIVE_MULTICAST 0x00000008
+#define TDI_RECEIVE_PARTIAL 0x00000010
+#define TDI_RECEIVE_NORMAL 0x00000020
+#define TDI_RECEIVE_EXPEDITED 0x00000040
+#define TDI_RECEIVE_PEEK 0x00000080
+#define TDI_RECEIVE_NO_RESPONSE_EXP 0x00000100
+#define TDI_RECEIVE_COPY_LOOKAHEAD 0x00000200
+#define TDI_RECEIVE_ENTIRE_MESSAGE 0x00000400
+#define TDI_RECEIVE_AT_DISPATCH_LEVEL 0x00000800
+#define TDI_RECEIVE_CONTROL_INFO 0x00001000
+
+/* Listen flags */
+#define TDI_QUERY_ACCEPT 0x00000001
+
+/* Options used for both SendOptions and ReceiveIndicators */
+#define TDI_SEND_EXPEDITED 0x0020
+#define TDI_SEND_PARTIAL 0x0040
+#define TDI_SEND_NO_RESPONSE_EXPECTED 0x0080
+#define TDI_SEND_NON_BLOCKING 0x0100
+#define TDI_SEND_AND_DISCONNECT 0x0200
+
+/* Disconnect Flags */
+#define TDI_DISCONNECT_WAIT 0x0001
+#define TDI_DISCONNECT_ABORT 0x0002
+#define TDI_DISCONNECT_RELEASE 0x0004
+
+/* TdiRequest structure for TdiQueryInformation request */
+typedef struct _TDI_REQUEST_QUERY_INFORMATION {
+ TDI_REQUEST Request;
+ ULONG QueryType;
+ PTDI_CONNECTION_INFORMATION RequestConnectionInformation;
+} TDI_REQUEST_QUERY_INFORMATION, *PTDI_REQUEST_QUERY_INFORMATION;
+
+/* TdiRequest structure for TdiSetInformation request */
+typedef struct _TDI_REQUEST_SET_INFORMATION {
+ TDI_REQUEST Request;
+ ULONG SetType;
+ PTDI_CONNECTION_INFORMATION RequestConnectionInformation;
+} TDI_REQUEST_SET_INFORMATION, *PTDI_REQUEST_SET_INFORMATION;
+
+typedef TDI_REQUEST_SET_INFORMATION TDI_REQ_SET_INFORMATION, *PTDI_REQ_SET_INFORMATION;
+
+typedef union _TDI_REQUEST_TYPE {
+ TDI_REQUEST_ACCEPT TdiAccept;
+ TDI_REQUEST_CONNECT TdiConnect;
+ TDI_REQUEST_DISCONNECT TdiDisconnect;
+ TDI_REQUEST_LISTEN TdiListen;
+ TDI_REQUEST_QUERY_INFORMATION TdiQueryInformation;
+ TDI_REQUEST_RECEIVE TdiReceive;
+ TDI_REQUEST_RECEIVE_DATAGRAM TdiReceiveDatagram;
+ TDI_REQUEST_SEND TdiSend;
+ TDI_REQUEST_SEND_DATAGRAM TdiSendDatagram;
+ TDI_REQUEST_SET_EVENT_HANDLER TdiSetEventHandler;
+ TDI_REQUEST_SET_INFORMATION TdiSetInformation;
+} TDI_REQUEST_TYPE, *PTDI_REQUEST_TYPE;
+
+/* Query information types */
+
+/* Generic query info types that must be supported by all transports */
+#define TDI_QUERY_BROADCAST_ADDRESS 0x00000001
+#define TDI_QUERY_PROVIDER_INFO 0x00000002
+#define TDI_QUERY_ADDRESS_INFO 0x00000003
+#define TDI_QUERY_CONNECTION_INFO 0x00000004
+#define TDI_QUERY_PROVIDER_STATISTICS 0x00000005
+#define TDI_QUERY_DATAGRAM_INFO 0x00000006
+#define TDI_QUERY_DATA_LINK_ADDRESS 0x00000007
+#define TDI_QUERY_NETWORK_ADDRESS 0x00000008
+#define TDI_QUERY_MAX_DATAGRAM_INFO 0x00000009
+
+/* Netbios specific query information types */
+#define TDI_QUERY_ADAPTER_STATUS 0x00000100
+#define TDI_QUERY_SESSION_STATUS 0x00000200
+#define TDI_QUERY_FIND_NAME 0x00000300
+
+/* Structures used for TdiQueryInformation and TdiSetInformation */
+
+typedef struct _TDI_ENDPOINT_INFO {
+ ULONG State;
+ ULONG Event;
+ ULONG TransmittedTsdus;
+ ULONG ReceivedTsdus;
+ ULONG TransmissionErrors;
+ ULONG ReceiveErrors;
+ ULONG MinimumLookaheadData;
+ ULONG MaximumLookaheadData;
+ ULONG PriorityLevel;
+ ULONG SecurityLevel;
+ ULONG SecurityCompartment;
+} TDI_ENDPOINT_INFO, *PTDI_ENDPOINT_INFO;
+
+typedef struct _TDI_CONNECTION_INFO {
+ ULONG State;
+ ULONG Event;
+ ULONG TransmittedTsdus;
+ ULONG ReceivedTsdus;
+ ULONG TransmissionErrors;
+ ULONG ReceiveErrors;
+ LARGE_INTEGER Throughput;
+ LARGE_INTEGER Delay;
+ ULONG SendBufferSize;
+ ULONG ReceiveBufferSize;
+ BOOLEAN Unreliable;
+} TDI_CONNECTION_INFO, *PTDI_CONNECTION_INFO;
+
+typedef struct _TDI_DATAGRAM_INFO {
+ ULONG MaximumDatagramBytes;
+ ULONG MaximumDatagramCount;
+} TDI_DATAGRAM_INFO, *PTDI_DATAGRAM_INFO;
+
+typedef struct _TDI_MAX_DATAGRAM_INFO {
+ ULONG MaxDatagramSize;
+} TDI_MAX_DATAGRAM_INFO, *PTDI_MAX_DATAGRAM_INFO;
+
+typedef struct _TDI_PROVIDER_INFO {
+ ULONG Version;
+ ULONG MaxSendSize;
+ ULONG MaxConnectionUserData;
+ ULONG MaxDatagramSize;
+ ULONG ServiceFlags;
+ ULONG MinimumLookaheadData;
+ ULONG MaximumLookaheadData;
+ ULONG NumberOfResources;
+ LARGE_INTEGER StartTime;
+} TDI_PROVIDER_INFO, *PTDI_PROVIDER_INFO;
+
+#define TDI_SERVICE_CONNECTION_MODE 0x00000001
+#define TDI_SERVICE_ORDERLY_RELEASE 0x00000002
+#define TDI_SERVICE_CONNECTIONLESS_MODE 0x00000004
+#define TDI_SERVICE_ERROR_FREE_DELIVERY 0x00000008
+#define TDI_SERVICE_SECURITY_LEVEL 0x00000010
+#define TDI_SERVICE_BROADCAST_SUPPORTED 0x00000020
+#define TDI_SERVICE_MULTICAST_SUPPORTED 0x00000040
+#define TDI_SERVICE_DELAYED_ACCEPTANCE 0x00000080
+#define TDI_SERVICE_EXPEDITED_DATA 0x00000100
+#define TDI_SERVICE_INTERNAL_BUFFERING 0x00000200
+#define TDI_SERVICE_ROUTE_DIRECTED 0x00000400
+#define TDI_SERVICE_NO_ZERO_LENGTH 0x00000800
+#define TDI_SERVICE_POINT_TO_POINT 0x00001000
+#define TDI_SERVICE_MESSAGE_MODE 0x00002000
+#define TDI_SERVICE_HALF_DUPLEX 0x00004000
+#define TDI_SERVICE_DGRAM_CONNECTION 0x00008000
+#define TDI_SERVICE_FORCE_ACCESS_CHECK 0x00010000
+#define TDI_SERVICE_SEND_AND_DISCONNECT 0x00020000
+#define TDI_SERVICE_DIRECT_ACCEPT 0x00040000
+#define TDI_SERVICE_ACCEPT_LOCAL_ADDR 0x00080000
+
+typedef struct _TDI_PROVIDER_RESOURCE_STATS {
+ ULONG ResourceId;
+ ULONG MaximumResourceUsed;
+ ULONG AverageResourceUsed;
+ ULONG ResourceExhausted;
+} TDI_PROVIDER_RESOURCE_STATS, *PTDI_PROVIDER_RESOURCE_STATS;
+
+typedef struct _TDI_PROVIDER_STATISTICS {
+ ULONG Version;
+ ULONG OpenConnections;
+ ULONG ConnectionsAfterNoRetry;
+ ULONG ConnectionsAfterRetry;
+ ULONG LocalDisconnects;
+ ULONG RemoteDisconnects;
+ ULONG LinkFailures;
+ ULONG AdapterFailures;
+ ULONG SessionTimeouts;
+ ULONG CancelledConnections;
+ ULONG RemoteResourceFailures;
+ ULONG LocalResourceFailures;
+ ULONG NotFoundFailures;
+ ULONG NoListenFailures;
+ ULONG DatagramsSent;
+ LARGE_INTEGER DatagramBytesSent;
+ ULONG DatagramsReceived;
+ LARGE_INTEGER DatagramBytesReceived;
+ ULONG PacketsSent;
+ ULONG PacketsReceived;
+ ULONG DataFramesSent;
+ LARGE_INTEGER DataFrameBytesSent;
+ ULONG DataFramesReceived;
+ LARGE_INTEGER DataFrameBytesReceived;
+ ULONG DataFramesResent;
+ LARGE_INTEGER DataFrameBytesResent;
+ ULONG DataFramesRejected;
+ LARGE_INTEGER DataFrameBytesRejected;
+ ULONG ResponseTimerExpirations;
+ ULONG AckTimerExpirations;
+ ULONG MaximumSendWindow;
+ ULONG AverageSendWindow;
+ ULONG PiggybackAckQueued;
+ ULONG PiggybackAckTimeouts;
+ LARGE_INTEGER WastedPacketSpace;
+ ULONG WastedSpacePackets;
+ ULONG NumberOfResources;
+ TDI_PROVIDER_RESOURCE_STATS ResourceStats[1];
+} TDI_PROVIDER_STATISTICS, *PTDI_PROVIDER_STATISTICS;
+
+#define TDI_EVENT_CONNECT 0
+#define TDI_EVENT_DISCONNECT 1
+#define TDI_EVENT_ERROR 2
+#define TDI_EVENT_RECEIVE 3
+#define TDI_EVENT_RECEIVE_DATAGRAM 4
+#define TDI_EVENT_RECEIVE_EXPEDITED 5
+#define TDI_EVENT_SEND_POSSIBLE 6
+
+typedef struct _TDI_REQUEST_ASSOCIATE {
+ TDI_REQUEST Request;
+ HANDLE AddressHandle;
+} TDI_REQUEST_ASSOCIATE_ADDRESS, *PTDI_REQUEST_ASSOCIATE_ADDRESS;
+
+#define NDIS_PACKET_POOL_TAG_FOR_NWLNKIPX 'iPDN'
+#define NDIS_PACKET_POOL_TAG_FOR_NWLNKSPX 'sPDN'
+#define NDIS_PACKET_POOL_TAG_FOR_NWLNKNB 'nPDN'
+#define NDIS_PACKET_POOL_TAG_FOR_TCPIP 'tPDN'
+#define NDIS_PACKET_POOL_TAG_FOR_NBF 'bPDN'
+#define NDIS_PACKET_POOL_TAG_FOR_APPLETALK 'aPDN'
+
+typedef struct _TA_ADDRESS {
+ USHORT AddressLength;
+ USHORT AddressType;
+ UCHAR Address[1];
+} TA_ADDRESS, *PTA_ADDRESS;
+
+#define TDI_ADDRESS_TYPE_UNSPEC 0
+#define TDI_ADDRESS_TYPE_UNIX 1
+#define TDI_ADDRESS_TYPE_IP 2
+#define TDI_ADDRESS_TYPE_IMPLINK 3
+#define TDI_ADDRESS_TYPE_PUP 4
+#define TDI_ADDRESS_TYPE_CHAOS 5
+#define TDI_ADDRESS_TYPE_NS 6
+#define TDI_ADDRESS_TYPE_IPX 6
+#define TDI_ADDRESS_TYPE_NBS 7
+#define TDI_ADDRESS_TYPE_ECMA 8
+#define TDI_ADDRESS_TYPE_DATAKIT 9
+#define TDI_ADDRESS_TYPE_CCITT 10
+#define TDI_ADDRESS_TYPE_SNA 11
+#define TDI_ADDRESS_TYPE_DECnet 12
+#define TDI_ADDRESS_TYPE_DLI 13
+#define TDI_ADDRESS_TYPE_LAT 14
+#define TDI_ADDRESS_TYPE_HYLINK 15
+#define TDI_ADDRESS_TYPE_APPLETALK 16
+#define TDI_ADDRESS_TYPE_NETBIOS 17
+#define TDI_ADDRESS_TYPE_8022 18
+#define TDI_ADDRESS_TYPE_OSI_TSAP 19
+#define TDI_ADDRESS_TYPE_NETONE 20
+#define TDI_ADDRESS_TYPE_VNS 21
+#define TDI_ADDRESS_TYPE_NETBIOS_EX 22
+#define TDI_ADDRESS_TYPE_IP6 23
+#define TDI_ADDRESS_TYPE_NETBIOS_UNICODE_EX 24
+
+#define TdiTransportAddress "TransportAddress"
+#define TdiConnectionContext "ConnectionContext"
+#define TDI_TRANSPORT_ADDRESS_LENGTH (sizeof(TdiTransportAddress) - 1)
+#define TDI_CONNECTION_CONTEXT_LENGTH (sizeof(TdiConnectionContext) - 1)
+
+typedef struct _TRANSPORT_ADDRESS {
+ LONG TAAddressCount;
+ TA_ADDRESS Address[1];
+} TRANSPORT_ADDRESS, *PTRANSPORT_ADDRESS;
+
+typedef struct _TDI_ACTION_HEADER {
+ ULONG TransportId;
+ USHORT ActionCode;
+ USHORT Reserved;
+} TDI_ACTION_HEADER, *PTDI_ACTION_HEADER;
+
+typedef struct _TDI_ADDRESS_INFO {
+ ULONG ActivityCount;
+ TRANSPORT_ADDRESS Address;
+} TDI_ADDRESS_INFO, *PTDI_ADDRESS_INFO;
+
+#include "pshpack1.h"
+
+typedef struct _TDI_ADDRESS_8022 {
+ UCHAR MACAddress[6];
+} TDI_ADDRESS_8022, *PTDI_ADDRESS_8022;
+
+#define TDI_ADDRESS_LENGTH_8022 sizeof(TDI_ADDRESS_8022);
+
+typedef struct _TDI_ADDRESS_APPLETALK {
+ USHORT Network;
+ UCHAR Node;
+ UCHAR Socket;
+} TDI_ADDRESS_APPLETALK, *PTDI_ADDRESS_APPLETALK;
+
+#define TDI_ADDRESS_LENGTH_APPLETALK sizeof(TDI_ADDRESS_APPLETALK)
+
+typedef struct _TDI_ADDRESS_IP {
+ USHORT sin_port;
+ ULONG in_addr;
+ UCHAR sin_zero[8];
+} TDI_ADDRESS_IP, *PTDI_ADDRESS_IP;
+
+#define TDI_ADDRESS_LENGTH_IP sizeof(TDI_ADDRESS_IP)
+
+typedef struct _TDI_ADDRESS_IPX {
+ ULONG NetworkAddress;
+ UCHAR NodeAddress[6];
+ USHORT Socket;
+} TDI_ADDRESS_IPX, *PTDI_ADDRESS_IPX;
+
+#define TDI_ADDRESS_LENGTH_IPX sizeof(TDI_ADDRESS_IPX)
+
+/* TDI_ADDRESS_NETBIOS.NetbiosNameType constants */
+#define TDI_ADDRESS_NETBIOS_TYPE_UNIQUE 0x0000
+#define TDI_ADDRESS_NETBIOS_TYPE_GROUP 0x0001
+#define TDI_ADDRESS_NETBIOS_TYPE_QUICK_UNIQUE 0x0002
+#define TDI_ADDRESS_NETBIOS_TYPE_QUICK_GROUP 0x0003
+
+typedef struct _TDI_ADDRESS_NETBIOS {
+ USHORT NetbiosNameType;
+ UCHAR NetbiosName[16];
+} TDI_ADDRESS_NETBIOS, *PTDI_ADDRESS_NETBIOS;
+
+#define TDI_ADDRESS_LENGTH_NETBIOS sizeof(TDI_ADDRESS_NETBIOS)
+
+typedef struct _TDI_ADDRESS_NETBIOS_EX {
+ UCHAR EndpointName[16];
+ TDI_ADDRESS_NETBIOS NetbiosAddress;
+} TDI_ADDRESS_NETBIOS_EX, *PTDI_ADDRESS_NETBIOS_EX;
+
+#define TDI_ADDRESS_LENGTH_NETBIOS_EX sizeof(TDI_ADDRESS_NETBIOS_EX)
+
+/* TDI_ADDRESS_NETONE.NetoneNameType constants */
+#define TDI_ADDRESS_NETONE_TYPE_UNIQUE 0x0000
+#define TDI_ADDRESS_NETONE_TYPE_ROTORED 0x0001
+
+typedef struct _TDI_ADDRESS_NETONE {
+ USHORT NetoneNameType;
+ UCHAR NetoneName[20];
+} TDI_ADDRESS_NETONE, *PTDI_ADDRESS_NETONE;
+
+#define TDI_ADDRESS_LENGTH_NETONE sizeof(TDI_ADDRESS_NETONE)
+
+typedef struct _TDI_ADDRESS_NS
+{
+ ULONG NetworkAddress;
+ UCHAR NodeAddress[6];
+ USHORT Socket;
+} TDI_ADDRESS_NS, *PTDI_ADDRESS_NS;
+
+#define TDI_ADDRESS_LENGTH_NS sizeof(TDI_ADDRESS_NS)
+
+#define ISO_MAX_ADDR_LENGTH 64
+
+/* TDI_ADDRESS_OSI_TSAP.tp_addr_type constants */
+#define ISO_HIERARCHICAL 0
+#define ISO_NON_HIERARCHICAL 1
+
+typedef struct _TDI_ADDRESS_OSI_TSAP {
+ USHORT tp_addr_type;
+ USHORT tp_taddr_len;
+ USHORT tp_tsel_len;
+ UCHAR tp_addr[ISO_MAX_ADDR_LENGTH];
+} TDI_ADDRESS_OSI_TSAP, *PTDI_ADDRESS_OSI_TSAP;
+
+#define TDI_ADDRESS_LENGTH_OSI_TSAP sizeof(TDI_ADDRESS_OSI_TSAP)
+
+typedef struct _TDI_ADDRESS_VNS {
+ UCHAR net_address[4];
+ UCHAR subnet_addr[2];
+ UCHAR port[2];
+ UCHAR hops;
+ UCHAR filler[5];
+} TDI_ADDRESS_VNS, *PTDI_ADDRESS_VNS;
+
+#define TDI_ADDRESS_LENGTH_VNS sizeof(TDI_ADDRESS_VNS)
+
+typedef struct _TDI_ADDRESS_IP6 {
+ USHORT sin6_port;
+ ULONG sin6_flowinfo;
+ USHORT sin6_addr[8];
+ ULONG sin6_scope_id;
+} TDI_ADDRESS_IP6, *PTDI_ADDRESS_IP6;
+
+#define TDI_ADDRESS_LENGTH_IP6 sizeof(TDI_ADDRESS_IP6)
+
+enum eNameBufferType {
+ NBT_READONLY = 0,
+ NBT_WRITEONLY,
+ NBT_READWRITE,
+ NBT_WRITTEN
+};
+
+typedef struct _TDI_ADDRESS_NETBIOS_UNICODE_EX {
+ USHORT NetbiosNameType;
+ enum eNameBufferType NameBufferType;
+ UNICODE_STRING EndpointName;
+ UNICODE_STRING RemoteName;
+ WCHAR EndpointBuffer[17];
+ WCHAR RemoteNameBuffer[1];
+} TDI_ADDRESS_NETBIOS_UNICODE_EX, *PTDI_ADDRESS_NETBIOS_UNICODE_EX;
+
+typedef struct _TA_APPLETALK_ADDR {
+ LONG TAAddressCount;
+ struct _AddrAtalk {
+ USHORT AddressLength;
+ USHORT AddressType;
+ TDI_ADDRESS_APPLETALK Address[1];
+ } Address[1];
+} TA_APPLETALK_ADDRESS, *PTA_APPLETALK_ADDRESS;
+
+typedef struct _TA_ADDRESS_IP {
+ LONG TAAddressCount;
+ struct _AddrIp {
+ USHORT AddressLength;
+ USHORT AddressType;
+ TDI_ADDRESS_IP Address[1];
+ } Address[1];
+} TA_IP_ADDRESS, *PTA_IP_ADDRESS;
+
+typedef struct _TA_ADDRESS_IPX {
+ LONG TAAddressCount;
+ struct _AddrIpx {
+ USHORT AddressLength;
+ USHORT AddressType;
+ TDI_ADDRESS_IPX Address[1];
+ } Address[1];
+} TA_IPX_ADDRESS, *PTA_IPX_ADDRESS;
+
+typedef struct _TA_NETBIOS_ADDRESS {
+ LONG TAAddressCount;
+ struct _Addr{
+ USHORT AddressLength;
+ USHORT AddressType;
+ TDI_ADDRESS_NETBIOS Address[1];
+ } Address[1];
+} TA_NETBIOS_ADDRESS, *PTA_NETBIOS_ADDRESS;
+
+typedef struct _TA_ADDRESS_NS {
+ LONG TAAddressCount;
+ struct _AddrNs {
+ USHORT AddressLength;
+ USHORT AddressType;
+ TDI_ADDRESS_NS Address[1];
+ } Address[1];
+} TA_NS_ADDRESS, *PTA_NS_ADDRESS;
+
+typedef struct _TA_ADDRESS_VNS {
+ LONG TAAddressCount;
+ struct _AddrVns {
+ USHORT AddressLength;
+ USHORT AddressType;
+ TDI_ADDRESS_VNS Address[1];
+ } Address[1];
+} TA_VNS_ADDRESS, *PTA_VNS_ADDRESS;
+
+typedef struct _TA_ADDRESS_IP6 {
+ LONG TAAddressCount;
+ struct _AddrIp6 {
+ USHORT AddressLength;
+ USHORT AddressType;
+ TDI_ADDRESS_IP6 Address[1];
+ } Address [1];
+} TA_IP6_ADDRESS, *PTA_IP6_ADDRESS;
+
+typedef struct _TA_ADDRESS_NETBIOS_UNICODE_EX {
+ LONG TAAddressCount;
+ struct _AddrNetbiosWCharEx {
+ USHORT AddressLength;
+ USHORT AddressType;
+ TDI_ADDRESS_NETBIOS_UNICODE_EX Address[1];
+ } Address [1];
+} TA_NETBIOS_UNICODE_EX_ADDRESS, *PTA_NETBIOS_UNICODE_EX_ADDRESS;
+
+#include "poppack.h"
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __TDI_H */
diff --git a/tcc/include/winapi/ddk/tdiinfo.h b/tcc/include/winapi/ddk/tdiinfo.h
new file mode 100644
index 0000000..ba7e1e7
--- /dev/null
+++ b/tcc/include/winapi/ddk/tdiinfo.h
@@ -0,0 +1,110 @@
+/*
+ * tdiinfo.h
+ *
+ * TDI set and query information interface
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __TDIINFO_H
+#define __TDIINFO_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+
+typedef struct TDIEntityID {
+ ULONG tei_entity;
+ ULONG tei_instance;
+} TDIEntityID;
+
+#define MAX_TDI_ENTITIES 4096
+#define INVALID_ENTITY_INSTANCE -1
+#define GENERIC_ENTITY 0
+#define ENTITY_LIST_ID 0
+#define ENTITY_TYPE_ID 1
+
+#define AT_ENTITY 0x280
+#define CL_NL_ENTITY 0x301
+#define CL_TL_ENTITY 0x401
+#define CO_NL_ENTITY 0x300
+#define CO_TL_ENTITY 0x400
+#define ER_ENTITY 0x380
+#define IF_ENTITY 0x200
+
+#define AT_ARP 0x280
+#define AT_NULL 0x282
+#define CL_TL_NBF 0x401
+#define CL_TL_UDP 0x403
+#define CL_NL_IPX 0x301
+#define CL_NL_IP 0x303
+#define CO_TL_NBF 0x400
+#define CO_TL_SPX 0x402
+#define CO_TL_TCP 0x404
+#define CO_TL_SPP 0x406
+#define ER_ICMP 0x380
+#define IF_GENERIC 0x200
+#define IF_MIB 0x202
+
+/* TDIObjectID.toi_class constants */
+#define INFO_CLASS_GENERIC 0x100
+#define INFO_CLASS_PROTOCOL 0x200
+#define INFO_CLASS_IMPLEMENTATION 0x300
+
+/* TDIObjectID.toi_type constants */
+#define INFO_TYPE_PROVIDER 0x100
+#define INFO_TYPE_ADDRESS_OBJECT 0x200
+#define INFO_TYPE_CONNECTION 0x300
+
+typedef struct _TDIObjectID {
+ TDIEntityID toi_entity;
+ ULONG toi_class;
+ ULONG toi_type;
+ ULONG toi_id;
+} TDIObjectID;
+
+#define CONTEXT_SIZE 16
+
+typedef struct _TCP_REQUEST_QUERY_INFORMATION_EX {
+ TDIObjectID ID;
+ ULONG_PTR Context[CONTEXT_SIZE / sizeof(ULONG_PTR)];
+} TCP_REQUEST_QUERY_INFORMATION_EX, *PTCP_REQUEST_QUERY_INFORMATION_EX;
+
+#if defined(_WIN64)
+typedef struct _TCP_REQUEST_QUERY_INFORMATION_EX32 {
+ TDIObjectID ID;
+ ULONG32 Context[CONTEXT_SIZE / sizeof(ULONG32)];
+} TCP_REQUEST_QUERY_INFORMATION_EX32, *PTCP_REQUEST_QUERY_INFORMATION_EX32;
+#endif /* _WIN64 */
+
+typedef struct _TCP_REQUEST_SET_INFORMATION_EX {
+ TDIObjectID ID;
+ UINT BufferSize;
+ UCHAR Buffer[1];
+} TCP_REQUEST_SET_INFORMATION_EX, *PTCP_REQUEST_SET_INFORMATION_EX;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __TDIINFO_H */
diff --git a/tcc/include/winapi/ddk/tdikrnl.h b/tcc/include/winapi/ddk/tdikrnl.h
new file mode 100644
index 0000000..1223c26
--- /dev/null
+++ b/tcc/include/winapi/ddk/tdikrnl.h
@@ -0,0 +1,1162 @@
+/*
+ * tdikrnl.h
+ *
+ * TDI kernel mode definitions
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __TDIKRNL_H
+#define __TDIKRNL_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+#include "tdi.h"
+
+#if defined(_TDI_)
+ #define TDIKRNLAPI DECLSPEC_EXPORT
+#else
+ #define TDIKRNLAPI DECLSPEC_IMPORT
+#endif
+
+
+typedef struct _TDI_REQUEST_KERNEL {
+ ULONG RequestFlags;
+ PTDI_CONNECTION_INFORMATION RequestConnectionInformation;
+ PTDI_CONNECTION_INFORMATION ReturnConnectionInformation;
+ PVOID RequestSpecific;
+} TDI_REQUEST_KERNEL, *PTDI_REQUEST_KERNEL;
+
+/* Request codes */
+#define TDI_ASSOCIATE_ADDRESS 0x01
+#define TDI_DISASSOCIATE_ADDRESS 0x02
+#define TDI_CONNECT 0x03
+#define TDI_LISTEN 0x04
+#define TDI_ACCEPT 0x05
+#define TDI_DISCONNECT 0x06
+#define TDI_SEND 0x07
+#define TDI_RECEIVE 0x08
+#define TDI_SEND_DATAGRAM 0x09
+#define TDI_RECEIVE_DATAGRAM 0x0A
+#define TDI_SET_EVENT_HANDLER 0x0B
+#define TDI_QUERY_INFORMATION 0x0C
+#define TDI_SET_INFORMATION 0x0D
+#define TDI_ACTION 0x0E
+
+#define TDI_DIRECT_SEND 0x27
+#define TDI_DIRECT_SEND_DATAGRAM 0x29
+
+#define TDI_TRANSPORT_ADDRESS_FILE 1
+#define TDI_CONNECTION_FILE 2
+#define TDI_CONTROL_CHANNEL_FILE 3
+
+/* Internal TDI IOCTLS */
+#define IOCTL_TDI_QUERY_DIRECT_SEND_HANDLER _TDI_CONTROL_CODE(0x80, METHOD_NEITHER)
+#define IOCTL_TDI_QUERY_DIRECT_SENDDG_HANDLER _TDI_CONTROL_CODE(0x81, METHOD_NEITHER)
+
+/* TdiAssociateAddress */
+typedef struct _TDI_REQUEST_KERNEL_ASSOCIATE {
+ HANDLE AddressHandle;
+} TDI_REQUEST_KERNEL_ASSOCIATE, *PTDI_REQUEST_KERNEL_ASSOCIATE;
+
+/* TdiDisassociateAddress */
+typedef TDI_REQUEST_KERNEL TDI_REQUEST_KERNEL_DISASSOCIATE,
+ *PTDI_REQUEST_KERNEL_DISASSOCIATE;
+
+/* TdiAccept */
+typedef struct _TDI_REQUEST_KERNEL_ACCEPT {
+ PTDI_CONNECTION_INFORMATION RequestConnectionInformation;
+ PTDI_CONNECTION_INFORMATION ReturnConnectionInformation;
+} TDI_REQUEST_KERNEL_ACCEPT, *PTDI_REQUEST_KERNEL_ACCEPT;
+
+/* TdiConnect */
+typedef TDI_REQUEST_KERNEL TDI_REQUEST_KERNEL_CONNECT,
+ *PTDI_REQUEST_KERNEL_CONNECT;
+
+/* TdiDisconnect */
+typedef TDI_REQUEST_KERNEL TDI_REQUEST_KERNEL_DISCONNECT,
+ *PTDI_REQUEST_KERNEL_DISCONNECT;
+
+/* TdiListen */
+typedef TDI_REQUEST_KERNEL TDI_REQUEST_KERNEL_LISTEN,
+ *PTDI_REQUEST_KERNEL_LISTEN;
+
+/* TdiReceive */
+typedef struct _TDI_REQUEST_KERNEL_RECEIVE {
+ ULONG ReceiveLength;
+ ULONG ReceiveFlags;
+} TDI_REQUEST_KERNEL_RECEIVE, *PTDI_REQUEST_KERNEL_RECEIVE;
+
+/* TdiReceiveDatagram */
+typedef struct _TDI_REQUEST_KERNEL_RECEIVEDG {
+ ULONG ReceiveLength;
+ PTDI_CONNECTION_INFORMATION ReceiveDatagramInformation;
+ PTDI_CONNECTION_INFORMATION ReturnDatagramInformation;
+ ULONG ReceiveFlags;
+} TDI_REQUEST_KERNEL_RECEIVEDG, *PTDI_REQUEST_KERNEL_RECEIVEDG;
+
+/* TdiSend */
+typedef struct _TDI_REQUEST_KERNEL_SEND {
+ ULONG SendLength;
+ ULONG SendFlags;
+} TDI_REQUEST_KERNEL_SEND, *PTDI_REQUEST_KERNEL_SEND;
+
+/* TdiSendDatagram */
+typedef struct _TDI_REQUEST_KERNEL_SENDDG {
+ ULONG SendLength;
+ PTDI_CONNECTION_INFORMATION SendDatagramInformation;
+} TDI_REQUEST_KERNEL_SENDDG, *PTDI_REQUEST_KERNEL_SENDDG;
+
+/* TdiSetEventHandler */
+typedef struct _TDI_REQUEST_KERNEL_SET_EVENT {
+ LONG EventType;
+ PVOID EventHandler;
+ PVOID EventContext;
+} TDI_REQUEST_KERNEL_SET_EVENT, *PTDI_REQUEST_KERNEL_SET_EVENT;
+
+/* TdiQueryInformation */
+typedef struct _TDI_REQUEST_KERNEL_QUERY_INFO {
+ LONG QueryType;
+ PTDI_CONNECTION_INFORMATION RequestConnectionInformation;
+} TDI_REQUEST_KERNEL_QUERY_INFORMATION, *PTDI_REQUEST_KERNEL_QUERY_INFORMATION;
+
+/* TdiSetInformation */
+typedef struct _TDI_REQUEST_KERNEL_SET_INFO {
+ LONG SetType;
+ PTDI_CONNECTION_INFORMATION RequestConnectionInformation;
+} TDI_REQUEST_KERNEL_SET_INFORMATION, *PTDI_REQUEST_KERNEL_SET_INFORMATION;
+
+
+/* Event types */
+#define TDI_EVENT_CONNECT 0
+#define TDI_EVENT_DISCONNECT 1
+#define TDI_EVENT_ERROR 2
+#define TDI_EVENT_RECEIVE 3
+#define TDI_EVENT_RECEIVE_DATAGRAM 4
+#define TDI_EVENT_RECEIVE_EXPEDITED 5
+#define TDI_EVENT_SEND_POSSIBLE 6
+#define TDI_EVENT_CHAINED_RECEIVE 7
+#define TDI_EVENT_CHAINED_RECEIVE_DATAGRAM 8
+#define TDI_EVENT_CHAINED_RECEIVE_EXPEDITED 9
+#define TDI_EVENT_ERROR_EX 10
+
+typedef NTSTATUS DDKAPI
+(*PTDI_IND_CONNECT)(
+ /*IN*/ PVOID TdiEventContext,
+ /*IN*/ LONG RemoteAddressLength,
+ /*IN*/ PVOID RemoteAddress,
+ /*IN*/ LONG UserDataLength,
+ /*IN*/ PVOID UserData,
+ /*IN*/ LONG OptionsLength,
+ /*IN*/ PVOID Options,
+ /*OUT*/ CONNECTION_CONTEXT *ConnectionContext,
+ /*OUT*/ PIRP *AcceptIrp);
+
+TDIKRNLAPI
+NTSTATUS
+DDKAPI
+TdiDefaultConnectHandler(
+ /*IN*/ PVOID TdiEventContext,
+ /*IN*/ LONG RemoteAddressLength,
+ /*IN*/ PVOID RemoteAddress,
+ /*IN*/ LONG UserDataLength,
+ /*IN*/ PVOID UserData,
+ /*IN*/ LONG OptionsLength,
+ /*IN*/ PVOID Options,
+ /*OUT*/ CONNECTION_CONTEXT *ConnectionContext,
+ /*OUT*/ PIRP *AcceptIrp);
+
+typedef NTSTATUS DDKAPI
+(*PTDI_IND_DISCONNECT)(
+ /*IN*/ PVOID TdiEventContext,
+ /*IN*/ CONNECTION_CONTEXT ConnectionContext,
+ /*IN*/ LONG DisconnectDataLength,
+ /*IN*/ PVOID DisconnectData,
+ /*IN*/ LONG DisconnectInformationLength,
+ /*IN*/ PVOID DisconnectInformation,
+ /*IN*/ ULONG DisconnectFlags);
+
+TDIKRNLAPI
+NTSTATUS
+DDKAPI
+TdiDefaultDisconnectHandler(
+ /*IN*/ PVOID TdiEventContext,
+ /*IN*/ CONNECTION_CONTEXT ConnectionContext,
+ /*IN*/ LONG DisconnectDataLength,
+ /*IN*/ PVOID DisconnectData,
+ /*IN*/ LONG DisconnectInformationLength,
+ /*IN*/ PVOID DisconnectInformation,
+ /*IN*/ ULONG DisconnectFlags);
+
+typedef NTSTATUS DDKAPI
+(*PTDI_IND_ERROR)(
+ /*IN*/ PVOID TdiEventContext,
+ /*IN*/ NTSTATUS Status);
+
+typedef NTSTATUS DDKAPI
+(*PTDI_IND_ERROR_EX)(
+ /*IN*/ PVOID TdiEventContext,
+ /*IN*/ NTSTATUS Status,
+ /*IN*/ PVOID Buffer);
+
+TDIKRNLAPI
+NTSTATUS
+DDKAPI
+TdiDefaultErrorHandler(
+ /*IN*/ PVOID TdiEventContext,
+ /*IN*/ NTSTATUS Status);
+
+typedef NTSTATUS DDKAPI
+(*PTDI_IND_RECEIVE)(
+ /*IN*/ PVOID TdiEventContext,
+ /*IN*/ CONNECTION_CONTEXT ConnectionContext,
+ /*IN*/ ULONG ReceiveFlags,
+ /*IN*/ ULONG BytesIndicated,
+ /*IN*/ ULONG BytesAvailable,
+ /*OUT*/ ULONG *BytesTaken,
+ /*IN*/ PVOID Tsdu,
+ /*OUT*/ PIRP *IoRequestPacket);
+
+TDIKRNLAPI
+NTSTATUS
+DDKAPI
+TdiDefaultReceiveHandler(
+ /*IN*/ PVOID TdiEventContext,
+ /*IN*/ CONNECTION_CONTEXT ConnectionContext,
+ /*IN*/ ULONG ReceiveFlags,
+ /*IN*/ ULONG BytesIndicated,
+ /*IN*/ ULONG BytesAvailable,
+ /*OUT*/ ULONG *BytesTaken,
+ /*IN*/ PVOID Tsdu,
+ /*OUT*/ PIRP *IoRequestPacket);
+
+typedef NTSTATUS DDKAPI
+(*PTDI_IND_RECEIVE_DATAGRAM)(
+ /*IN*/ PVOID TdiEventContext,
+ /*IN*/ LONG SourceAddressLength,
+ /*IN*/ PVOID SourceAddress,
+ /*IN*/ LONG OptionsLength,
+ /*IN*/ PVOID Options,
+ /*IN*/ ULONG ReceiveDatagramFlags,
+ /*IN*/ ULONG BytesIndicated,
+ /*IN*/ ULONG BytesAvailable,
+ /*OUT*/ ULONG *BytesTaken,
+ /*IN*/ PVOID Tsdu,
+ /*OUT*/ PIRP *IoRequestPacket);
+
+TDIKRNLAPI
+NTSTATUS DDKAPI
+TdiDefaultRcvDatagramHandler(
+ /*IN*/ PVOID TdiEventContext,
+ /*IN*/ LONG SourceAddressLength,
+ /*IN*/ PVOID SourceAddress,
+ /*IN*/ LONG OptionsLength,
+ /*IN*/ PVOID Options,
+ /*IN*/ ULONG ReceiveDatagramFlags,
+ /*IN*/ ULONG BytesIndicated,
+ /*IN*/ ULONG BytesAvailable,
+ /*OUT*/ ULONG *BytesTaken,
+ /*IN*/ PVOID Tsdu,
+ /*OUT*/ PIRP *IoRequestPacket);
+
+typedef NTSTATUS DDKAPI
+(*PTDI_IND_RECEIVE_EXPEDITED)(
+ /*IN*/ PVOID TdiEventContext,
+ /*IN*/ CONNECTION_CONTEXT ConnectionContext,
+ /*IN*/ ULONG ReceiveFlags,
+ /*IN*/ ULONG BytesIndicated,
+ /*IN*/ ULONG BytesAvailable,
+ /*OUT*/ ULONG *BytesTaken,
+ /*IN*/ PVOID Tsdu,
+ /*OUT*/ PIRP *IoRequestPacket);
+
+TDIKRNLAPI
+NTSTATUS
+DDKAPI
+TdiDefaultRcvExpeditedHandler(
+ /*IN*/ PVOID TdiEventContext,
+ /*IN*/ CONNECTION_CONTEXT ConnectionContext,
+ /*IN*/ ULONG ReceiveFlags,
+ /*IN*/ ULONG BytesIndicated,
+ /*IN*/ ULONG BytesAvailable,
+ /*OUT*/ ULONG *BytesTaken,
+ /*IN*/ PVOID Tsdu,
+ /*OUT*/ PIRP *IoRequestPacket);
+
+typedef NTSTATUS DDKAPI
+(*PTDI_IND_CHAINED_RECEIVE)(
+ /*IN*/ PVOID TdiEventContext,
+ /*IN*/ CONNECTION_CONTEXT ConnectionContext,
+ /*IN*/ ULONG ReceiveFlags,
+ /*IN*/ ULONG ReceiveLength,
+ /*IN*/ ULONG StartingOffset,
+ /*IN*/ PMDL Tsdu,
+ /*IN*/ PVOID TsduDescriptor);
+
+TDIKRNLAPI
+NTSTATUS
+DDKAPI
+TdiDefaultChainedReceiveHandler(
+ /*IN*/ PVOID TdiEventContext,
+ /*IN*/ CONNECTION_CONTEXT ConnectionContext,
+ /*IN*/ ULONG ReceiveFlags,
+ /*IN*/ ULONG ReceiveLength,
+ /*IN*/ ULONG StartingOffset,
+ /*IN*/ PMDL Tsdu,
+ /*IN*/ PVOID TsduDescriptor);
+
+typedef NTSTATUS DDKAPI
+(*PTDI_IND_CHAINED_RECEIVE_DATAGRAM)(
+ /*IN*/ PVOID TdiEventContext,
+ /*IN*/ LONG SourceAddressLength,
+ /*IN*/ PVOID SourceAddress,
+ /*IN*/ LONG OptionsLength,
+ /*IN*/ PVOID Options,
+ /*IN*/ ULONG ReceiveDatagramFlags,
+ /*IN*/ ULONG ReceiveDatagramLength,
+ /*IN*/ ULONG StartingOffset,
+ /*IN*/ PMDL Tsdu,
+ /*IN*/ PVOID TsduDescriptor);
+
+TDIKRNLAPI
+NTSTATUS
+DDKAPI
+TdiDefaultChainedRcvDatagramHandler(
+ /*IN*/ PVOID TdiEventContext,
+ /*IN*/ LONG SourceAddressLength,
+ /*IN*/ PVOID SourceAddress,
+ /*IN*/ LONG OptionsLength,
+ /*IN*/ PVOID Options,
+ /*IN*/ ULONG ReceiveDatagramFlags,
+ /*IN*/ ULONG ReceiveDatagramLength,
+ /*IN*/ ULONG StartingOffset,
+ /*IN*/ PMDL Tsdu,
+ /*IN*/ PVOID TsduDescriptor);
+
+typedef NTSTATUS DDKAPI
+(*PTDI_IND_CHAINED_RECEIVE_EXPEDITED)(
+ /*IN*/ PVOID TdiEventContext,
+ /*IN*/ CONNECTION_CONTEXT ConnectionContext,
+ /*IN*/ ULONG ReceiveFlags,
+ /*IN*/ ULONG ReceiveLength,
+ /*IN*/ ULONG StartingOffset,
+ /*IN*/ PMDL Tsdu,
+ /*IN*/ PVOID TsduDescriptor);
+
+TDIKRNLAPI
+NTSTATUS
+DDKAPI
+TdiDefaultChainedRcvExpeditedHandler(
+ /*IN*/ PVOID TdiEventContext,
+ /*IN*/ CONNECTION_CONTEXT ConnectionContext,
+ /*IN*/ ULONG ReceiveFlags,
+ /*IN*/ ULONG ReceiveLength,
+ /*IN*/ ULONG StartingOffset,
+ /*IN*/ PMDL Tsdu,
+ /*IN*/ PVOID TsduDescriptor);
+
+typedef NTSTATUS DDKAPI
+(*PTDI_IND_SEND_POSSIBLE)(
+ /*IN*/ PVOID TdiEventContext,
+ /*IN*/ PVOID ConnectionContext,
+ /*IN*/ ULONG BytesAvailable);
+
+TDIKRNLAPI
+NTSTATUS
+DDKAPI
+TdiDefaultSendPossibleHandler(
+ /*IN*/ PVOID TdiEventContext,
+ /*IN*/ PVOID ConnectionContext,
+ /*IN*/ ULONG BytesAvailable);
+
+
+
+ /* Macros and functions to build IRPs */
+
+#define TdiBuildBaseIrp( \
+ bIrp, bDevObj, bFileObj, bCompRoutine, bContxt, bIrpSp, bMinor) \
+{ \
+ bIrpSp->MajorFunction = IRP_MJ_INTERNAL_DEVICE_CONTROL; \
+ bIrpSp->MinorFunction = (bMinor); \
+ bIrpSp->DeviceObject = (bDevObj); \
+ bIrpSp->FileObject = (bFileObj); \
+ if (bCompRoutine) \
+ IoSetCompletionRoutine(bIrp, bCompRoutine, bContxt, TRUE, TRUE, TRUE) \
+ else \
+ IoSetCompletionRoutine(bIrp, NULL, NULL, FALSE, FALSE, FALSE); \
+}
+
+ /*
+ * VOID
+ * TdiBuildAccept(
+ * IN PIRP Irp,
+ * IN PDEVICE_OBJECT DevObj,
+ * IN PFILE_OBJECT FileObj,
+ * IN PVOID CompRoutine,
+ * IN PVOID Contxt,
+ * IN PTDI_CONNECTION_INFORMATION RequestConnectionInfo,
+ * OUT PTDI_CONNECTION_INFORMATION ReturnConnectionInfo);
+ */
+#define TdiBuildAccept( \
+ Irp, DevObj, FileObj, CompRoutine, Contxt, \
+ RequestConnectionInfo, ReturnConnectionInfo) \
+{ \
+ PTDI_REQUEST_KERNEL_ACCEPT _Request; \
+ PIO_STACK_LOCATION _IrpSp; \
+ \
+ _IrpSp = IoGetNextIrpStackLocation(Irp); \
+ \
+ TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \
+ Contxt, _IrpSp, TDI_ACCEPT); \
+ \
+ _Request = (PTDI_REQUEST_KERNEL_ACCEPT)&_IrpSp->Parameters; \
+ _Request->RequestConnectionInformation = (RequestConnectionInfo); \
+ _Request->ReturnConnectionInformation = (ReturnConnectionInfo); \
+}
+
+ /*
+ * VOID
+ * TdiBuildAction(
+ * IN PIRP Irp,
+ * IN PDEVICE_OBJECT DevObj,
+ * IN PFILE_OBJECT FileObj,
+ * IN PVOID CompRoutine,
+ * IN PVOID Contxt,
+ * IN PMDL MdlAddr);
+ */
+#define TdiBuildAction( \
+ Irp, DevObj, FileObj, CompRoutine, Contxt, MdlAddr) \
+{ \
+ PIO_STACK_LOCATION _IrpSp; \
+ \
+ _IrpSp = IoGetNextIrpStackLocation(Irp); \
+ \
+ TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \
+ Contxt, _IrpSp, TDI_ACTION); \
+ \
+ (Irp)->MdlAddress = (MdlAddr); \
+}
+
+ /*
+ * VOID
+ * TdiBuildAssociateAddress(
+ * IN PIRP Irp,
+ * IN PDEVICE_OBJECT DevObj,
+ * IN PFILE_OBJECT FileObj,
+ * IN PVOID CompRoutine,
+ * IN PVOID Contxt,
+ * IN HANDLE AddrHandle);
+ */
+#define TdiBuildAssociateAddress( \
+ Irp, DevObj, FileObj, CompRoutine, Contxt, AddrHandle) \
+{ \
+ PTDI_REQUEST_KERNEL_ASSOCIATE _Request; \
+ PIO_STACK_LOCATION _IrpSp; \
+ \
+ _IrpSp = IoGetNextIrpStackLocation(Irp); \
+ \
+ TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \
+ Contxt, _IrpSp, TDI_ASSOCIATE_ADDRESS); \
+ \
+ _Request = (PTDI_REQUEST_KERNEL_ASSOCIATE)&_IrpSp->Parameters; \
+ _Request->AddressHandle = (HANDLE)(AddrHandle); \
+}
+
+ /*
+ * VOID
+ * TdiBuildConnect(
+ * IN PIRP Irp,
+ * IN PDEVICE_OBJECT DevObj,
+ * IN PFILE_OBJECT FileObj,
+ * IN PVOID CompRoutine,
+ * IN PVOID Contxt,
+ * IN PLARGE_INTEGER Time,
+ * IN PTDI_CONNECTION_INFORMATION RequestConnectionInfo,
+ * OUT PTDI_CONNECTION_INFORMATION ReturnConnectionInfo);
+ */
+#define TdiBuildConnect( \
+ Irp, DevObj, FileObj, CompRoutine, Contxt, \
+ Time, RequestConnectionInfo, ReturnConnectionInfo) \
+{ \
+ PTDI_REQUEST_KERNEL _Request; \
+ PIO_STACK_LOCATION _IrpSp; \
+ \
+ _IrpSp = IoGetNextIrpStackLocation(Irp); \
+ \
+ TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \
+ Contxt, _IrpSp, TDI_CONNECT); \
+ \
+ _Request = (PTDI_REQUEST_KERNEL)&_IrpSp->Parameters; \
+ _Request->RequestConnectionInformation = (RequestConnectionInfo); \
+ _Request->ReturnConnectionInformation = (ReturnConnectionInfo); \
+ _Request->RequestSpecific = (PVOID)(Time); \
+}
+
+ /*
+ * VOID
+ * TdiBuildDisassociateAddress(
+ * IN PIRP Irp,
+ * IN PDEVICE_OBJECT DevObj,
+ * IN PFILE_OBJECT FileObj,
+ * IN PVOID CompRoutine,
+ * IN PVOID Contxt);
+ */
+#define TdiBuildDisassociateAddress( \
+ Irp, DevObj, FileObj, CompRoutine, Contxt) \
+{ \
+ PIO_STACK_LOCATION _IrpSp; \
+ \
+ _IrpSp = IoGetNextIrpStackLocation(Irp); \
+ \
+ TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \
+ Contxt, _IrpSp, TDI_DISASSOCIATE_ADDRESS); \
+}
+
+ /*
+ * VOID
+ * TdiBuildDisconnect(
+ * IN PIRP Irp,
+ * IN PDEVICE_OBJECT DevObj,
+ * IN PFILE_OBJECT FileObj,
+ * IN PVOID CompRoutine,
+ * IN PVOID Contxt,
+ * IN PLARGE_INTEGER Time,
+ * IN PULONG Flags,
+ * IN PTDI_CONNECTION_INFORMATION RequestConnectionInfo,
+ * OUT PTDI_CONNECTION_INFORMATION ReturnConnectionInfo);
+ */
+#define TdiBuildDisconnect( \
+ Irp, DevObj, FileObj, CompRoutine, Contxt, Time, \
+ Flags, RequestConnectionInfo, ReturnConnectionInfo) \
+{ \
+ PTDI_REQUEST_KERNEL _Request; \
+ PIO_STACK_LOCATION _IrpSp; \
+ \
+ _IrpSp = IoGetNextIrpStackLocation(Irp); \
+ \
+ TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \
+ Contxt, _IrpSp, TDI_DISCONNECT); \
+ \
+ _Request = (PTDI_REQUEST_KERNEL)&_IrpSp->Parameters; \
+ _Request->RequestConnectionInformation = (RequestConnectionInfo); \
+ _Request->ReturnConnectionInformation = (ReturnConnectionInfo); \
+ _Request->RequestSpecific = (PVOID)(Time); \
+ _Request->RequestFlags = (Flags); \
+}
+
+ /*
+ * PIRP
+ * TdiBuildInternalDeviceControlIrp(
+ * IN CCHAR IrpSubFunction,
+ * IN PDEVICE_OBJECT DeviceObject,
+ * IN PFILE_OBJECT FileObject,
+ * IN PKEVENT Event,
+ * IN PIO_STATUS_BLOCK IoStatusBlock);
+ */
+#define TdiBuildInternalDeviceControlIrp( \
+ IrpSubFunction, DeviceObject, \
+ FileObject, Event, IoStatusBlock) \
+ IoBuildDeviceIoControlRequest( \
+ 0x00000003, DeviceObject, \
+ NULL, 0, NULL, 0, \
+ TRUE, Event, IoStatusBlock)
+
+ /*
+ * VOID
+ * TdiBuildListen(
+ * IN PIRP Irp,
+ * IN PDEVICE_OBJECT DevObj,
+ * IN PFILE_OBJECT FileObj,
+ * IN PVOID CompRoutine,
+ * IN PVOID Contxt,
+ * IN ULONG Flags,
+ * IN PTDI_CONNECTION_INFORMATION RequestConnectionInfo,
+ * OUT PTDI_CONNECTION_INFORMATION ReturnConnectionInfo);
+ */
+#define TdiBuildListen( \
+ Irp, DevObj, FileObj, CompRoutine, Contxt, \
+ Flags, RequestConnectionInfo, ReturnConnectionInfo) \
+{ \
+ PTDI_REQUEST_KERNEL _Request; \
+ PIO_STACK_LOCATION _IrpSp; \
+ \
+ _IrpSp = IoGetNextIrpStackLocation(Irp); \
+ \
+ TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \
+ Contxt, _IrpSp, TDI_LISTEN); \
+ \
+ _Request = (PTDI_REQUEST_KERNEL)&_IrpSp->Parameters; \
+ _Request->RequestConnectionInformation = (RequestConnectionInfo); \
+ _Request->ReturnConnectionInformation = (ReturnConnectionInfo); \
+ _Request->RequestFlags = (Flags); \
+}
+
+TDIKRNLAPI
+VOID
+DDKAPI
+TdiBuildNetbiosAddress(
+ /*IN*/ PUCHAR NetbiosName,
+ /*IN*/ BOOLEAN IsGroupName,
+ /*IN OUT*/ PTA_NETBIOS_ADDRESS NetworkName);
+
+TDIKRNLAPI
+NTSTATUS
+DDKAPI
+TdiBuildNetbiosAddressEa(
+ /*IN*/ PUCHAR Buffer,
+ /*IN*/ BOOLEAN IsGroupName,
+ /*IN*/ PUCHAR NetbiosName);
+
+ /*
+ * VOID
+ * TdiBuildQueryInformation(
+ * IN PIRP Irp,
+ * IN PDEVICE_OBJECT DevObj,
+ * IN PFILE_OBJECT FileObj,
+ * IN PVOID CompRoutine,
+ * IN PVOID Contxt,
+ * IN UINT QType,
+ * IN PMDL MdlAddr);
+ */
+#define TdiBuildQueryInformation( \
+ Irp, DevObj, FileObj, CompRoutine, Contxt, QType, MdlAddr) \
+{ \
+ PTDI_REQUEST_KERNEL_QUERY_INFORMATION _Request; \
+ PIO_STACK_LOCATION _IrpSp; \
+ \
+ _IrpSp = IoGetNextIrpStackLocation(Irp); \
+ \
+ TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \
+ Contxt, _IrpSp, TDI_QUERY_INFORMATION); \
+ \
+ _Request = (PTDI_REQUEST_KERNEL_QUERY_INFORMATION)&_IrpSp->Parameters; \
+ _Request->RequestConnectionInformation = NULL; \
+ _Request->QueryType = (ULONG)(QType); \
+ (Irp)->MdlAddress = (MdlAddr); \
+}
+
+ /*
+ * VOID
+ * TdiBuildReceive(
+ * IN PIRP Irp,
+ * IN PDEVICE_OBJECT DevObj,
+ * IN PFILE_OBJECT FileObj,
+ * IN PVOID CompRoutine,
+ * IN PVOID Contxt,
+ * IN PMDL MdlAddr,
+ * IN ULONG InFlags,
+ * IN ULONG ReceiveLen);
+ */
+#define TdiBuildReceive( \
+ Irp, DevObj, FileObj, CompRoutine, Contxt, \
+ MdlAddr, InFlags, ReceiveLen) \
+{ \
+ PTDI_REQUEST_KERNEL_RECEIVE _Request; \
+ PIO_STACK_LOCATION _IrpSp; \
+ \
+ _IrpSp = IoGetNextIrpStackLocation(Irp); \
+ \
+ TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \
+ Contxt, _IrpSp, TDI_RECEIVE); \
+ \
+ _Request = (PTDI_REQUEST_KERNEL_RECEIVE)&_IrpSp->Parameters; \
+ _Request->ReceiveFlags = (InFlags); \
+ _Request->ReceiveLength = (ReceiveLen); \
+ (Irp)->MdlAddress = (MdlAddr); \
+}
+
+ /*
+ * VOID
+ * TdiBuildReceiveDatagram(
+ * IN PIRP Irp,
+ * IN PDEVICE_OBJECT DevObj,
+ * IN PFILE_OBJECT FileObj,
+ * IN PVOID CompRoutine,
+ * IN PVOID Contxt,
+ * IN PMDL MdlAddr,
+ * IN ULONG ReceiveLen,
+ * IN PTDI_CONNECTION_INFORMATION ReceiveDatagramInfo,
+ * OUT PTDI_CONNECTION_INFORMATION ReturnInfo,
+ * ULONG InFlags);
+ */
+#define TdiBuildReceiveDatagram( \
+ Irp, DevObj, FileObj, CompRoutine, Contxt, MdlAddr, \
+ ReceiveLen, ReceiveDatagramInfo, ReturnInfo, InFlags) \
+{ \
+ PTDI_REQUEST_KERNEL_RECEIVEDG _Request; \
+ PIO_STACK_LOCATION _IrpSp; \
+ \
+ _IrpSp = IoGetNextIrpStackLocation(Irp); \
+ \
+ TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \
+ Contxt, _IrpSp, TDI_RECEIVE_DATAGRAM); \
+ \
+ _Request = (PTDI_REQUEST_KERNEL_RECEIVEDG)&_IrpSp->Parameters; \
+ _Request->ReceiveDatagramInformation = (ReceiveDatagramInfo); \
+ _Request->ReturnDatagramInformation = (ReturnInfo); \
+ _Request->ReceiveLength = (ReceiveLen); \
+ _Request->ReceiveFlags = (InFlags); \
+ (Irp)->MdlAddress = (MdlAddr); \
+}
+
+ /*
+ * VOID
+ * TdiBuildSend(
+ * IN PIRP Irp,
+ * IN PDEVICE_OBJECT DevObj,
+ * IN PFILE_OBJECT FileObj,
+ * IN PVOID CompRoutine,
+ * IN PVOID Contxt,
+ * IN PMDL MdlAddr,
+ * IN ULONG InFlags,
+ * IN ULONG SendLen);
+ */
+#define TdiBuildSend( \
+ Irp, DevObj, FileObj, CompRoutine, Contxt, \
+ MdlAddr, InFlags, SendLen) \
+{ \
+ PTDI_REQUEST_KERNEL_SEND _Request; \
+ PIO_STACK_LOCATION _IrpSp; \
+ \
+ _IrpSp = IoGetNextIrpStackLocation(Irp); \
+ \
+ TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \
+ Contxt, _IrpSp, TDI_SEND); \
+ \
+ _Request = (PTDI_REQUEST_KERNEL_SEND)&_IrpSp->Parameters; \
+ _Request->SendFlags = (InFlags); \
+ _Request->SendLength = (SendLen); \
+ (Irp)->MdlAddress = (MdlAddr); \
+}
+
+ /*
+ * VOID
+ * TdiBuildSendDatagram(
+ * IN PIRP Irp,
+ * IN PDEVICE_OBJECT DevObj,
+ * IN PFILE_OBJECT FileObj,
+ * IN PVOID CompRoutine,
+ * IN PVOID Contxt,
+ * IN PMDL MdlAddr,
+ * IN ULONG SendLen,
+ * IN PTDI_CONNECTION_INFORMATION SendDatagramInfo);
+ */
+#define TdiBuildSendDatagram( \
+ Irp, DevObj, FileObj, CompRoutine, Contxt, \
+ MdlAddr, SendLen, SendDatagramInfo) \
+{ \
+ PTDI_REQUEST_KERNEL_SENDDG _Request; \
+ PIO_STACK_LOCATION _IrpSp; \
+ \
+ _IrpSp = IoGetNextIrpStackLocation(Irp); \
+ \
+ TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \
+ Contxt, _IrpSp, TDI_SEND_DATAGRAM); \
+ \
+ _Request = (PTDI_REQUEST_KERNEL_SENDDG)&_IrpSp->Parameters; \
+ _Request->SendDatagramInformation = (SendDatagramInfo); \
+ _Request->SendLength = (SendLen); \
+ (Irp)->MdlAddress = (MdlAddr); \
+}
+
+ /*
+ * VOID
+ * TdiBuildSetEventHandler(
+ * IN PIRP Irp,
+ * IN PDEVICE_OBJECT DevObj,
+ * IN PFILE_OBJECT FileObj,
+ * IN PVOID CompRoutine,
+ * IN PVOID Contxt,
+ * IN INT InEventType,
+ * IN PVOID InEventHandler,
+ * IN PVOID InEventContext);
+ */
+#define TdiBuildSetEventHandler( \
+ Irp, DevObj, FileObj, CompRoutine, Contxt, \
+ InEventType, InEventHandler, InEventContext) \
+{ \
+ PTDI_REQUEST_KERNEL_SET_EVENT _Request; \
+ PIO_STACK_LOCATION _IrpSp; \
+ \
+ _IrpSp = IoGetNextIrpStackLocation(Irp); \
+ \
+ TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \
+ Contxt, _IrpSp, TDI_SET_EVENT_HANDLER); \
+ \
+ _Request = (PTDI_REQUEST_KERNEL_SET_EVENT)&_IrpSp->Parameters; \
+ _Request->EventType = (InEventType); \
+ _Request->EventHandler = (PVOID)(InEventHandler); \
+ _Request->EventContext = (PVOID)(InEventContext); \
+}
+
+ /*
+ * VOID
+ * TdiBuildSetInformation(
+ * IN PIRP Irp,
+ * IN PDEVICE_OBJECT DevObj,
+ * IN PFILE_OBJECT FileObj,
+ * IN PVOID CompRoutine,
+ * IN PVOID Contxt,
+ * IN UINT SType,
+ * IN PMDL MdlAddr);
+ */
+#define TdiBuildSetInformation( \
+ Irp, DevObj, FileObj, CompRoutine, Contxt, SType, MdlAddr) \
+{ \
+ PTDI_REQUEST_KERNEL_SET_INFORMATION _Request; \
+ PIO_STACK_LOCATION _IrpSp; \
+ \
+ _IrpSp = IoGetNextIrpStackLocation(Irp); \
+ \
+ TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \
+ Contxt, _IrpSp, TDI_SET_INFORMATION); \
+ \
+ _Request = (PTDI_REQUEST_KERNEL_SET_INFORMATION)&_IrpSp->Parameters; \
+ _Request->RequestConnectionInformation = NULL; \
+ _Request->SetType = (ULONG)(SType); \
+ (Irp)->MdlAddress = (MdlAddr); \
+}
+
+ /* TDI20_CLIENT_INTERFACE_INFO.TdiVersion constants */
+#define TDI_CURRENT_MAJOR_VERSION 2
+#define TDI_CURRENT_MINOR_VERSION 0
+
+#define TDI_CURRENT_VERSION ((TDI_CURRENT_MINOR_VERSION) << 8 \
+ | (TDI_CURRENT_MAJOR_VERSION))
+
+#define TDI_VERSION_ONE 0x0001
+
+typedef enum _TDI_PNP_OPCODE {
+ TDI_PNP_OP_MIN,
+ TDI_PNP_OP_ADD,
+ TDI_PNP_OP_DEL,
+ TDI_PNP_OP_UPDATE,
+ TDI_PNP_OP_PROVIDERREADY,
+ TDI_PNP_OP_NETREADY,
+ TDI_PNP_OP_ADD_IGNORE_BINDING,
+ TDI_PNP_OP_DELETE_IGNORE_BINDING,
+ TDI_PNP_OP_MAX
+} TDI_PNP_OPCODE;
+
+ /* TDI_PNP_CONTEXT.ContextType */
+#define TDI_PNP_CONTEXT_TYPE_IF_NAME 0x1
+#define TDI_PNP_CONTEXT_TYPE_IF_ADDR 0x2
+#define TDI_PNP_CONTEXT_TYPE_PDO 0x3
+#define TDI_PNP_CONTEXT_TYPE_FIRST_OR_LAST_IF 0x4
+
+typedef struct _TDI_PNP_CONTEXT {
+ USHORT ContextSize;
+ USHORT ContextType;
+ UCHAR ContextData[1];
+} TDI_PNP_CONTEXT, *PTDI_PNP_CONTEXT;
+
+typedef VOID DDKAPI
+(*TDI_ADD_ADDRESS_HANDLER)(
+ /*IN*/ PTA_ADDRESS Address);
+
+typedef VOID DDKAPI
+(*TDI_ADD_ADDRESS_HANDLER_V2)(
+ /*IN*/ PTA_ADDRESS Address,
+ /*IN*/ PUNICODE_STRING DeviceName,
+ /*IN*/ PTDI_PNP_CONTEXT Context);
+
+typedef VOID DDKAPI
+(*TDI_BINDING_HANDLER)(
+ /*IN*/ TDI_PNP_OPCODE PnPOpcode,
+ /*IN*/ PUNICODE_STRING DeviceName,
+ /*IN*/ PWSTR MultiSZBindList);
+
+typedef VOID DDKAPI
+(*TDI_BIND_HANDLER)(
+ /*IN*/ PUNICODE_STRING DeviceName);
+
+typedef VOID DDKAPI
+(*TDI_DEL_ADDRESS_HANDLER)(
+ /*IN*/ PTA_ADDRESS Address);
+
+typedef VOID DDKAPI
+(*TDI_DEL_ADDRESS_HANDLER_V2)(
+ /*IN*/ PTA_ADDRESS Address,
+ /*IN*/ PUNICODE_STRING DeviceName,
+ /*IN*/ PTDI_PNP_CONTEXT Context);
+
+typedef NTSTATUS DDKAPI
+(*TDI_PNP_POWER_HANDLER)(
+ /*IN*/ PUNICODE_STRING DeviceName,
+ /*IN*/ PNET_PNP_EVENT PowerEvent,
+ /*IN*/ PTDI_PNP_CONTEXT Context1,
+ /*IN*/ PTDI_PNP_CONTEXT Context2);
+
+typedef VOID DDKAPI
+(*TDI_UNBIND_HANDLER)(
+ /*IN*/ PUNICODE_STRING DeviceName);
+
+typedef VOID DDKAPI
+(*ProviderPnPPowerComplete)(
+ /*IN*/ PNET_PNP_EVENT NetEvent,
+ /*IN*/ NTSTATUS ProviderStatus);
+
+typedef struct _TDI20_CLIENT_INTERFACE_INFO {
+ _ANONYMOUS_UNION union {
+ _ANONYMOUS_STRUCT struct {
+ UCHAR MajorTdiVersion;
+ UCHAR MinorTdiVersion;
+ } DUMMYSTRUCTNAME;
+ USHORT TdiVersion;
+ } DUMMYUNIONNAME;
+ USHORT Unused;
+ PUNICODE_STRING ClientName;
+ TDI_PNP_POWER_HANDLER PnPPowerHandler;
+ _ANONYMOUS_UNION union {
+ TDI_BINDING_HANDLER BindingHandler;
+ _ANONYMOUS_STRUCT struct {
+ TDI_BIND_HANDLER BindHandler;
+ TDI_UNBIND_HANDLER UnBindHandler;
+ } DUMMYSTRUCTNAME;
+ }DUMMYUNIONNAME2;
+ _ANONYMOUS_UNION union {
+ _ANONYMOUS_STRUCT struct {
+ TDI_ADD_ADDRESS_HANDLER_V2 AddAddressHandlerV2;
+ TDI_DEL_ADDRESS_HANDLER_V2 DelAddressHandlerV2;
+ } DUMMYSTRUCTNAME;
+ _ANONYMOUS_STRUCT struct {
+ TDI_ADD_ADDRESS_HANDLER AddAddressHandler;
+ TDI_DEL_ADDRESS_HANDLER DelAddressHandler;
+ } DUMMYSTRUCTNAME2;
+ } DUMMYUNIONNAME3;
+} TDI20_CLIENT_INTERFACE_INFO, *PTDI20_CLIENT_INTERFACE_INFO;
+
+typedef TDI20_CLIENT_INTERFACE_INFO TDI_CLIENT_INTERFACE_INFO;
+typedef TDI_CLIENT_INTERFACE_INFO *PTDI_CLIENT_INTERFACE_INFO;
+
+
+ /* TDI functions */
+
+ /*
+ * VOID
+ * TdiCompleteRequest(
+ * IN PIRP Irp,
+ * IN NTSTATUS Status);
+ */
+#define TdiCompleteRequest(Irp, Status) \
+{ \
+ (Irp)->IoStatus.Status = (Status); \
+ IoCompleteRequest((Irp), IO_NETWORK_INCREMENT); \
+}
+
+TDIKRNLAPI
+NTSTATUS
+DDKAPI
+TdiCopyBufferToMdl(
+ /*IN*/ PVOID SourceBuffer,
+ /*IN*/ ULONG SourceOffset,
+ /*IN*/ ULONG SourceBytesToCopy,
+ /*IN*/ PMDL DestinationMdlChain,
+ /*IN*/ ULONG DestinationOffset,
+ /*IN*/ PULONG BytesCopied);
+
+ /*
+ * VOID
+ * TdiCopyLookaheadData(
+ * IN PVOID Destination,
+ * IN PVOID Source,
+ * IN ULONG Length,
+ * IN ULONG ReceiveFlags);
+ */
+#define TdiCopyLookaheadData(Destination, Source, Length, ReceiveFlags) \
+ RtlCopyMemory(Destination, Source, Length)
+
+TDIKRNLAPI
+NTSTATUS
+DDKAPI
+TdiCopyMdlChainToMdlChain (
+ /*IN*/ PMDL SourceMdlChain,
+ /*IN*/ ULONG SourceOffset,
+ /*IN*/ PMDL DestinationMdlChain,
+ /*IN*/ ULONG DestinationOffset,
+ /*OUT*/ PULONG BytesCopied);
+
+TDIKRNLAPI
+NTSTATUS
+DDKAPI
+TdiCopyMdlToBuffer(
+ /*IN*/ PMDL SourceMdlChain,
+ /*IN*/ ULONG SourceOffset,
+ /*IN*/ PVOID DestinationBuffer,
+ /*IN*/ ULONG DestinationOffset,
+ /*IN*/ ULONG DestinationBufferSize,
+ /*OUT*/ PULONG BytesCopied);
+
+TDIKRNLAPI
+NTSTATUS
+DDKAPI
+TdiDeregisterAddressChangeHandler(
+ /*IN*/ HANDLE BindingHandle);
+
+TDIKRNLAPI
+NTSTATUS
+DDKAPI
+TdiDeregisterDeviceObject(
+ /*IN*/ HANDLE DevRegistrationHandle);
+
+TDIKRNLAPI
+NTSTATUS
+DDKAPI
+TdiDeregisterNetAddress(
+ /*IN*/ HANDLE AddrRegistrationHandle);
+
+TDIKRNLAPI
+NTSTATUS
+DDKAPI
+TdiDeregisterPnPHandlers(
+ /*IN*/ HANDLE BindingHandle);
+
+TDIKRNLAPI
+NTSTATUS
+DDKAPI
+TdiDeregisterProvider(
+ /*IN*/ HANDLE ProviderHandle);
+
+TDIKRNLAPI
+NTSTATUS
+DDKAPI
+TdiEnumerateAddresses(
+ /*IN*/ HANDLE BindingHandle);
+
+TDIKRNLAPI
+VOID
+DDKAPI
+TdiInitialize(
+ VOID);
+
+TDIKRNLAPI
+VOID
+DDKAPI
+TdiMapBuffer(
+ /*IN*/ PMDL MdlChain);
+
+TDIKRNLAPI
+NTSTATUS
+DDKAPI
+TdiMapUserRequest(
+ /*IN*/ PDEVICE_OBJECT DeviceObject,
+ /*IN*/ PIRP Irp,
+ /*IN*/ PIO_STACK_LOCATION IrpSp);
+
+TDIKRNLAPI
+BOOLEAN
+DDKAPI
+TdiMatchPdoWithChainedReceiveContext(
+ /*IN*/ PVOID TsduDescriptor,
+ /*IN*/ PVOID PDO);
+
+TDIKRNLAPI
+VOID
+DDKAPI
+TdiPnPPowerComplete(
+ /*IN*/ HANDLE BindingHandle,
+ /*IN*/ PNET_PNP_EVENT PowerEvent,
+ /*IN*/ NTSTATUS Status);
+
+TDIKRNLAPI
+NTSTATUS
+DDKAPI
+TdiPnPPowerRequest(
+ /*IN*/ PUNICODE_STRING DeviceName,
+ /*IN*/ PNET_PNP_EVENT PowerEvent,
+ /*IN*/ PTDI_PNP_CONTEXT Context1,
+ /*IN*/ PTDI_PNP_CONTEXT Context2,
+ /*IN*/ ProviderPnPPowerComplete ProtocolCompletionHandler);
+
+TDIKRNLAPI
+NTSTATUS
+DDKAPI
+TdiProviderReady(
+ /*IN*/ HANDLE ProviderHandle);
+
+TDIKRNLAPI
+NTSTATUS
+DDKAPI
+TdiRegisterAddressChangeHandler(
+ /*IN*/ TDI_ADD_ADDRESS_HANDLER AddHandler,
+ /*IN*/ TDI_DEL_ADDRESS_HANDLER DeleteHandler,
+ /*OUT*/ HANDLE *BindingHandle);
+
+TDIKRNLAPI
+NTSTATUS
+DDKAPI
+TdiRegisterDeviceObject(
+ /*IN*/ PUNICODE_STRING DeviceName,
+ /*OUT*/ HANDLE *DevRegistrationHandle);
+
+TDIKRNLAPI
+NTSTATUS
+DDKAPI
+TdiRegisterNetAddress(
+ /*IN*/ PTA_ADDRESS Address,
+ /*IN*/ PUNICODE_STRING DeviceName,
+ /*IN*/ PTDI_PNP_CONTEXT Context,
+ /*OUT*/ HANDLE *AddrRegistrationHandle);
+
+TDIKRNLAPI
+NTSTATUS
+DDKAPI
+TdiRegisterNotificationHandler(
+ /*IN*/ TDI_BIND_HANDLER BindHandler,
+ /*IN*/ TDI_UNBIND_HANDLER UnbindHandler,
+ /*OUT*/ HANDLE *BindingHandle);
+
+TDIKRNLAPI
+NTSTATUS
+DDKAPI
+TdiRegisterPnPHandlers(
+ /*IN*/ PTDI_CLIENT_INTERFACE_INFO ClientInterfaceInfo,
+ /*IN*/ ULONG InterfaceInfoSize,
+ /*OUT*/ HANDLE *BindingHandle);
+
+TDIKRNLAPI
+NTSTATUS
+DDKAPI
+TdiRegisterProvider(
+ /*IN*/ PUNICODE_STRING ProviderName,
+ /*OUT*/ HANDLE *ProviderHandle);
+
+TDIKRNLAPI
+VOID
+DDKAPI
+TdiReturnChainedReceives(
+ /*IN*/ PVOID *TsduDescriptors,
+ /*IN*/ ULONG NumberOfTsdus);
+
+TDIKRNLAPI
+VOID
+DDKAPI
+TdiUnmapBuffer(
+ /*IN*/ PMDL MdlChain);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __TDIKRNL_H */
diff --git a/tcc/include/winapi/ddk/tdistat.h b/tcc/include/winapi/ddk/tdistat.h
new file mode 100644
index 0000000..f0588d2
--- /dev/null
+++ b/tcc/include/winapi/ddk/tdistat.h
@@ -0,0 +1,83 @@
+/*
+ * tdistat.h
+ *
+ * TDI status codes
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __TDISTAT_H
+#define __TDISTAT_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define TDI_SUCCESS STATUS_SUCCESS
+#define TDI_NO_RESOURCES STATUS_INSUFFICIENT_RESOURCES
+#define TDI_ADDR_IN_USE STATUS_ADDRESS_ALREADY_EXISTS
+#define TDI_BAD_ADDR STATUS_INVALID_ADDRESS_COMPONENT
+#define TDI_NO_FREE_ADDR STATUS_TOO_MANY_ADDRESSES
+#define TDI_ADDR_INVALID STATUS_INVALID_ADDRESS
+#define TDI_ADDR_DELETED STATUS_ADDRESS_CLOSED
+#define TDI_BUFFER_OVERFLOW STATUS_BUFFER_OVERFLOW
+#define TDI_BAD_EVENT_TYPE STATUS_INVALID_PARAMETER
+#define TDI_BAD_OPTION STATUS_INVALID_PARAMETER
+#define TDI_CONN_REFUSED STATUS_CONNECTION_REFUSED
+#define TDI_INVALID_CONNECTION STATUS_CONNECTION_INVALID
+#define TDI_ALREADY_ASSOCIATED STATUS_ADDRESS_ALREADY_ASSOCIATED
+#define TDI_NOT_ASSOCIATED STATUS_ADDRESS_NOT_ASSOCIATED
+#define TDI_CONNECTION_ACTIVE STATUS_CONNECTION_ACTIVE
+#define TDI_CONNECTION_ABORTED STATUS_CONNECTION_ABORTED
+#define TDI_CONNECTION_RESET STATUS_CONNECTION_RESET
+#define TDI_TIMED_OUT STATUS_IO_TIMEOUT
+#define TDI_GRACEFUL_DISC STATUS_GRACEFUL_DISCONNECT
+#define TDI_NOT_ACCEPTED STATUS_DATA_NOT_ACCEPTED
+#define TDI_MORE_PROCESSING STATUS_MORE_PROCESSING_REQUIRED
+#define TDI_INVALID_STATE STATUS_INVALID_DEVICE_STATE
+#define TDI_INVALID_PARAMETER STATUS_INVALID_PARAMETER
+#define TDI_DEST_NET_UNREACH STATUS_NETWORK_UNREACHABLE
+#define TDI_DEST_HOST_UNREACH STATUS_HOST_UNREACHABLE
+#define TDI_DEST_UNREACHABLE TDI_DEST_HOST_UNREACH
+#define TDI_DEST_PROT_UNREACH STATUS_PROTOCOL_UNREACHABLE
+#define TDI_DEST_PORT_UNREACH STATUS_PORT_UNREACHABLE
+#define TDI_INVALID_QUERY STATUS_INVALID_DEVICE_REQUEST
+#define TDI_REQ_ABORTED STATUS_REQUEST_ABORTED
+#define TDI_BUFFER_TOO_SMALL STATUS_BUFFER_TOO_SMALL
+#define TDI_CANCELLED STATUS_CANCELLED
+#define TDI_BUFFER_TOO_BIG STATUS_INVALID_BUFFER_SIZE
+#define TDI_INVALID_REQUEST STATUS_INVALID_DEVICE_REQUEST
+#define TDI_PENDING STATUS_PENDING
+#define TDI_ITEM_NOT_FOUND STATUS_OBJECT_NAME_NOT_FOUND
+
+#define TDI_STATUS_BAD_VERSION 0xC0010004L
+#define TDI_STATUS_BAD_CHARACTERISTICS 0xC0010005L
+
+#define TDI_OPTION_EOL 0
+
+#define TDI_ADDRESS_OPTION_REUSE 1
+#define TDI_ADDRESS_OPTION_DHCP 2
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __TDISTAT_H */
diff --git a/tcc/include/winapi/ddk/tvout.h b/tcc/include/winapi/ddk/tvout.h
new file mode 100644
index 0000000..0310ae4
--- /dev/null
+++ b/tcc/include/winapi/ddk/tvout.h
@@ -0,0 +1,116 @@
+/*
+ * tvout.h
+ *
+ * Definitions for TV-out support
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __TVOUT_H
+#define __TVOUT_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+
+/* VIDEOPARAMETERS.dwCommand constants */
+#define VP_COMMAND_GET 0x00000001
+#define VP_COMMAND_SET 0x00000002
+
+/* VIDEOPARAMETERS.dwFlags constants */
+#define VP_FLAGS_TV_MODE 0x00000001
+#define VP_FLAGS_TV_STANDARD 0x00000002
+#define VP_FLAGS_FLICKER 0x00000004
+#define VP_FLAGS_OVERSCAN 0x00000008
+#define VP_FLAGS_MAX_UNSCALED 0x00000010
+#define VP_FLAGS_POSITION 0x00000020
+#define VP_FLAGS_BRIGHTNESS 0x00000040
+#define VP_FLAGS_CONTRAST 0x00000080
+#define VP_FLAGS_COPYPROTECT 0x00000100
+
+/* VIDEOPARAMETERS.dwMode constants */
+#define VP_MODE_WIN_GRAPHICS 0x00000001
+#define VP_MODE_TV_PLAYBACK 0x00000002
+
+/* VIDEOPARAMETERS.dwTVStandard/dwAvailableTVStandard constants */
+#define VP_TV_STANDARD_NTSC_M 0x00000001
+#define VP_TV_STANDARD_NTSC_M_J 0x00000002
+#define VP_TV_STANDARD_PAL_B 0x00000004
+#define VP_TV_STANDARD_PAL_D 0x00000008
+#define VP_TV_STANDARD_PAL_H 0x00000010
+#define VP_TV_STANDARD_PAL_I 0x00000020
+#define VP_TV_STANDARD_PAL_M 0x00000040
+#define VP_TV_STANDARD_PAL_N 0x00000080
+#define VP_TV_STANDARD_SECAM_B 0x00000100
+#define VP_TV_STANDARD_SECAM_D 0x00000200
+#define VP_TV_STANDARD_SECAM_G 0x00000400
+#define VP_TV_STANDARD_SECAM_H 0x00000800
+#define VP_TV_STANDARD_SECAM_K 0x00001000
+#define VP_TV_STANDARD_SECAM_K1 0x00002000
+#define VP_TV_STANDARD_SECAM_L 0x00004000
+#define VP_TV_STANDARD_WIN_VGA 0x00008000
+#define VP_TV_STANDARD_NTSC_433 0x00010000
+#define VP_TV_STANDARD_PAL_G 0x00020000
+#define VP_TV_STANDARD_PAL_60 0x00040000
+#define VP_TV_STANDARD_SECAM_L1 0x00080000
+
+/* VIDEOPARAMETERS.dwMode constants */
+#define VP_CP_TYPE_APS_TRIGGER 0x00000001
+#define VP_CP_TYPE_MACROVISION 0x00000002
+
+/* VIDEOPARAMETERS.dwCPCommand constants */
+#define VP_CP_CMD_ACTIVATE 0x00000001
+#define VP_CP_CMD_DEACTIVATE 0x00000002
+#define VP_CP_CMD_CHANGE 0x00000004
+
+typedef struct _VIDEOPARAMETERS {
+ GUID Guid;
+ DWORD dwOffset;
+ DWORD dwCommand;
+ DWORD dwFlags;
+ DWORD dwMode;
+ DWORD dwTVStandard;
+ DWORD dwAvailableModes;
+ DWORD dwAvailableTVStandard;
+ DWORD dwFlickerFilter;
+ DWORD dwOverScanX;
+ DWORD dwOverScanY;
+ DWORD dwMaxUnscaledX;
+ DWORD dwMaxUnscaledY;
+ DWORD dwPositionX;
+ DWORD dwPositionY;
+ DWORD dwBrightness;
+ DWORD dwContrast;
+ DWORD dwCPType;
+ DWORD dwCPCommand;
+ DWORD dwCPStandard;
+ DWORD dwCPKey;
+ BYTE bCP_APSTriggerBits;
+ BYTE bOEMCopyProtection[256];
+} VIDEOPARAMETERS, *PVIDEOPARAMETERS, FAR *LPVIDEOPARAMETERS;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __TVOUT_H */
diff --git a/tcc/include/winapi/ddk/upssvc.h b/tcc/include/winapi/ddk/upssvc.h
new file mode 100644
index 0000000..561a163
--- /dev/null
+++ b/tcc/include/winapi/ddk/upssvc.h
@@ -0,0 +1,94 @@
+/*
+ * upssvc.h
+ *
+ * UPS service interface
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __UPSSVC_H
+#define __UPSSVC_H
+
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+
+#if defined(_APCUPS_)
+ #define UPSAPI DECLSPEC_EXPORT
+#else
+ #define UPSAPI DECLSPEC_IMPORT
+#endif
+
+
+#define UPS_ONLINE 1
+#define UPS_ONBATTERY 2
+#define UPS_LOWBATTERY 4
+#define UPS_NOCOMM 8
+#define UPS_CRITICAL 16
+
+UPSAPI
+VOID
+DDKAPI
+UPSCancelWait(VOID);
+
+UPSAPI
+DWORD
+DDKAPI
+UPSGetState(VOID);
+
+#define UPS_INITUNKNOWNERROR 0
+#define UPS_INITOK 1
+#define UPS_INITNOSUCHDRIVER 2
+#define UPS_INITBADINTERFACE 3
+#define UPS_INITREGISTRYERROR 4
+#define UPS_INITCOMMOPENERROR 5
+#define UPS_INITCOMMSETUPERROR 6
+
+UPSAPI
+DWORD
+DDKAPI
+UPSInit(VOID);
+
+UPSAPI
+VOID
+DDKAPI
+UPSStop(VOID);
+
+UPSAPI
+VOID
+DDKAPI
+UPSTurnOff(
+ /*IN*/ DWORD aTurnOffDelay);
+
+UPSAPI
+VOID
+DDKAPI
+UPSWaitForStateChange(
+ /*IN*/ DWORD aCurrentState,
+ /*IN*/ DWORD anInterval);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __UPSSVC_H */
diff --git a/tcc/include/winapi/ddk/usb.h b/tcc/include/winapi/ddk/usb.h
new file mode 100644
index 0000000..18dac4c
--- /dev/null
+++ b/tcc/include/winapi/ddk/usb.h
@@ -0,0 +1,471 @@
+/*
+ * usb.h
+ *
+ * USB support.
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __USB_H
+#define __USB_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __USBDI_H
+#error usbdi.h cannot be included with usb.h
+#else
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+#include "usb100.h"
+
+typedef LONG USBD_STATUS;
+typedef PVOID USBD_PIPE_HANDLE;
+typedef PVOID USBD_CONFIGURATION_HANDLE;
+typedef PVOID USBD_INTERFACE_HANDLE;
+
+#define USBD_STATUS_SUCCESS ((USBD_STATUS)0x00000000L)
+#define USBD_STATUS_PENDING ((USBD_STATUS)0x40000000L)
+#define USBD_STATUS_CRC ((USBD_STATUS)0xC0000001L)
+#define USBD_STATUS_BTSTUFF ((USBD_STATUS)0xC0000002L)
+#define USBD_STATUS_DATA_TOGGLE_MISMATCH ((USBD_STATUS)0xC0000003L)
+#define USBD_STATUS_STALL_PID ((USBD_STATUS)0xC0000004L)
+#define USBD_STATUS_DEV_NOT_RESPONDING ((USBD_STATUS)0xC0000005L)
+#define USBD_STATUS_PID_CHECK_FAILURE ((USBD_STATUS)0xC0000006L)
+#define USBD_STATUS_UNEXPECTED_PID ((USBD_STATUS)0xC0000007L)
+#define USBD_STATUS_DATA_OVERRUN ((USBD_STATUS)0xC0000008L)
+#define USBD_STATUS_DATA_UNDERRUN ((USBD_STATUS)0xC0000009L)
+#define USBD_STATUS_RESERVED1 ((USBD_STATUS)0xC000000AL)
+#define USBD_STATUS_RESERVED2 ((USBD_STATUS)0xC000000BL)
+#define USBD_STATUS_BUFFER_OVERRUN ((USBD_STATUS)0xC000000CL)
+#define USBD_STATUS_BUFFER_UNDERRUN ((USBD_STATUS)0xC000000DL)
+#define USBD_STATUS_NOT_ACCESSED ((USBD_STATUS)0xC000000FL)
+#define USBD_STATUS_FIFO ((USBD_STATUS)0xC0000010L)
+#define USBD_STATUS_XACT_ERROR ((USBD_STATUS)0xC0000011L)
+#define USBD_STATUS_BABBLE_DETECTED ((USBD_STATUS)0xC0000012L)
+#define USBD_STATUS_DATA_BUFFER_ERROR ((USBD_STATUS)0xC0000013L)
+#define USBD_STATUS_ENDPOINT_HALTED ((USBD_STATUS)0xC0000030L)
+#define USBD_STATUS_INVALID_URB_FUNCTION ((USBD_STATUS)0x80000200L)
+#define USBD_STATUS_INVALID_PARAMETER ((USBD_STATUS)0x80000300L)
+#define USBD_STATUS_ERROR_BUSY ((USBD_STATUS)0x80000400L)
+#define USBD_STATUS_INVALID_PIPE_HANDLE ((USBD_STATUS)0x80000600L)
+#define USBD_STATUS_NO_BANDWIDTH ((USBD_STATUS)0x80000700L)
+#define USBD_STATUS_INTERNAL_HC_ERROR ((USBD_STATUS)0x80000800L)
+#define USBD_STATUS_ERROR_SHORT_TRANSFER ((USBD_STATUS)0x80000900L)
+#define USBD_STATUS_BAD_START_FRAME ((USBD_STATUS)0xC0000A00L)
+#define USBD_STATUS_ISOCH_REQUEST_FAILED ((USBD_STATUS)0xC0000B00L)
+#define USBD_STATUS_FRAME_CONTROL_OWNED ((USBD_STATUS)0xC0000C00L)
+#define USBD_STATUS_FRAME_CONTROL_NOT_OWNED \
+ ((USBD_STATUS)0xC0000D00L)
+#define USBD_STATUS_NOT_SUPPORTED ((USBD_STATUS)0xC0000E00L)
+#define USBD_STATUS_INAVLID_CONFIGURATION_DESCRIPTOR \
+ ((USBD_STATUS)0xC0000F00L)
+#define USBD_STATUS_INSUFFICIENT_RESOURCES \
+ ((USBD_STATUS)0xC0001000L)
+#define USBD_STATUS_SET_CONFIG_FAILED ((USBD_STATUS)0xC0002000L)
+#define USBD_STATUS_BUFFER_TOO_SMALL ((USBD_STATUS)0xC0003000L)
+#define USBD_STATUS_INTERFACE_NOT_FOUND ((USBD_STATUS)0xC0004000L)
+#define USBD_STATUS_INAVLID_PIPE_FLAGS ((USBD_STATUS)0xC0005000L)
+#define USBD_STATUS_TIMEOUT ((USBD_STATUS)0xC0006000L)
+#define USBD_STATUS_DEVICE_GONE ((USBD_STATUS)0xC0007000L)
+#define USBD_STATUS_STATUS_NOT_MAPPED ((USBD_STATUS)0xC0008000L)
+#define USBD_STATUS_CANCELED ((USBD_STATUS)0xC0010000L)
+#define USBD_STATUS_ISO_NOT_ACCESSED_BY_HW \
+ ((USBD_STATUS)0xC0020000L)
+#define USBD_STATUS_ISO_TD_ERROR ((USBD_STATUS)0xC0030000L)
+#define USBD_STATUS_ISO_NA_LATE_USBPORT ((USBD_STATUS)0xC0040000L)
+#define USBD_STATUS_ISO_NOT_ACCESSED_LATE ((USBD_STATUS)0xC0050000L)
+
+#define USBD_SUCCESS(Status) ((USBD_STATUS)(Status) >= 0)
+#define USBD_PENDING(Status) ((ULONG)(Status) >> 30 == 1)
+#define USBD_ERROR(Status) ((USBD_STATUS)(Status) < 0)
+
+/* URB TransferFlags constants */
+#define USBD_TRANSFER_DIRECTION(x) ((x) & USBD_TRANSFER_DIRECTION_IN)
+#define USBD_TRANSFER_DIRECTION_OUT 0
+#define USBD_TRANSFER_DIRECTION_BIT 0
+#define USBD_TRANSFER_DIRECTION_IN (1 << USBD_TRANSFER_DIRECTION_BIT)
+#define USBD_SHORT_TRANSFER_OK_BIT 1
+#define USBD_SHORT_TRANSFER_OK (1 << USBD_SHORT_TRANSFER_OK_BIT)
+#define USBD_START_ISO_TRANSFER_ASAP_BIT 2
+#define USBD_START_ISO_TRANSFER_ASAP (1 << USBD_START_ISO_TRANSFER_ASAP_BIT)
+#define USBD_DEFAULT_PIPE_TRANSFER_BIT 3
+#define USBD_DEFAULT_PIPE_TRANSFER (1 << USBD_DEFAULT_PIPE_TRANSFER_BIT)
+
+#define USBD_TRANSFER_DIRECTION_FLAG(flags) ((flags) & USBD_TRANSFER_DIRECTION)
+
+#define VALID_TRANSFER_FLAGS_MASK \
+ (USBD_SHORT_TRANSFER_OK | \
+ USBD_TRANSFER_DIRECTION | \
+ USBD_START_ISO_TRANSFER_ASAP | \
+ USBD_DEFAULT_PIPE_TRANSFER)
+
+#define USB_DEFAULT_DEVICE_ADDRESS 0
+#define USB_DEFAULT_ENDPOINT_ADDRESS 0
+#define USB_DEFAULT_MAX_PACKET 64
+#define USBD_ISO_START_FRAME_RANGE 1024
+#define USBD_DEFAULT_MAXIMUM_TRANSFER_SIZE 0xFFFFFFFF
+
+typedef enum _USB_CONTROLLER_FLAVOR {
+ USB_HcGeneric = 0,
+ OHCI_Generic = 100,
+ OHCI_Hydra,
+ OHCI_NEC,
+ UHCI_Generic = 200,
+ UHCI_Piix4,
+ UHCI_Piix3,
+ UHCI_Ich2_1,
+ UHCI_Ich2_2,
+ UHCI_Ich1,
+ UHCI_VIA = 250,
+ EHCI_Generic = 1000,
+ EHCI_NEC = 2000,
+ EHCI_Lucent = 3000
+} USB_CONTROLLER_FLAVOR;
+
+struct _URB_HEADER {
+ USHORT Length;
+ USHORT Function;
+ USBD_STATUS Status;
+ PVOID UsbdDeviceHandle;
+ ULONG UsbdFlags;
+};
+
+typedef struct _USBD_VERSION_INFORMATION {
+ ULONG USBDI_Version;
+ ULONG Supported_USB_Version;
+} USBD_VERSION_INFORMATION, *PUSBD_VERSION_INFORMATION;
+
+struct _URB_HCD_AREA {
+ PVOID Reserved8[8];
+};
+
+struct _URB_BULK_OR_INTERRUPT_TRANSFER {
+ struct _URB_HEADER Hdr;
+ USBD_PIPE_HANDLE PipeHandle;
+ ULONG TransferFlags;
+ ULONG TransferBufferLength;
+ PVOID TransferBuffer;
+ PMDL TransferBufferMDL;
+ struct _URB *UrbLink;
+ struct _URB_HCD_AREA hca;
+};
+
+struct _URB_CONTROL_DESCRIPTOR_REQUEST {
+ struct _URB_HEADER Hdr;
+ PVOID Reserved;
+ ULONG Reserved0;
+ ULONG TransferBufferLength;
+ PVOID TransferBuffer;
+ PMDL TransferBufferMDL;
+ struct _URB *UrbLink;
+ struct _URB_HCD_AREA hca;
+ USHORT Reserved1;
+ UCHAR Index;
+ UCHAR DescriptorType;
+ USHORT LanguageId;
+ USHORT Reserved2;
+};
+
+struct _URB_CONTROL_FEATURE_REQUEST {
+ struct _URB_HEADER Hdr;
+ PVOID Reserved;
+ ULONG Reserved2;
+ ULONG Reserved3;
+ PVOID Reserved4;
+ PMDL Reserved5;
+ struct _URB *UrbLink;
+ struct _URB_HCD_AREA hca;
+ USHORT Reserved0;
+ USHORT FeatureSelector;
+ USHORT Index;
+ USHORT Reserved1;
+};
+
+struct _URB_CONTROL_GET_CONFIGURATION_REQUEST {
+ struct _URB_HEADER Hdr;
+ PVOID Reserved;
+ ULONG Reserved0;
+ ULONG TransferBufferLength;
+ PVOID TransferBuffer;
+ PMDL TransferBufferMDL;
+ struct _URB *UrbLink;
+ struct _URB_HCD_AREA hca;
+ UCHAR Reserved1[8];
+};
+
+struct _URB_CONTROL_GET_INTERFACE_REQUEST {
+ struct _URB_HEADER Hdr;
+ PVOID Reserved;
+ ULONG Reserved0;
+ ULONG TransferBufferLength;
+ PVOID TransferBuffer;
+ PMDL TransferBufferMDL;
+ struct _URB *UrbLink;
+ struct _URB_HCD_AREA hca;
+ UCHAR Reserved1[4];
+ USHORT Interface;
+ USHORT Reserved2;
+};
+
+struct _URB_CONTROL_GET_STATUS_REQUEST {
+ struct _URB_HEADER Hdr;
+ PVOID Reserved;
+ ULONG Reserved0;
+ ULONG TransferBufferLength;
+ PVOID TransferBuffer;
+ PMDL TransferBufferMDL;
+ struct _URB *UrbLink;
+ struct _URB_HCD_AREA hca;
+ UCHAR Reserved1[4];
+ USHORT Index;
+ USHORT Reserved2;
+};
+
+struct _URB_CONTROL_TRANSFER {
+ struct _URB_HEADER Hdr;
+ USBD_PIPE_HANDLE PipeHandle;
+ ULONG TransferFlags;
+ ULONG TransferBufferLength;
+ PVOID TransferBuffer;
+ PMDL TransferBufferMDL;
+ struct _URB *UrbLink;
+ struct _URB_HCD_AREA hca;
+ UCHAR SetupPacket[8];
+};
+
+struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST {
+ struct _URB_HEADER Hdr;
+ PVOID Reserved;
+ ULONG TransferFlags;
+ ULONG TransferBufferLength;
+ PVOID TransferBuffer;
+ PMDL TransferBufferMDL;
+ struct _URB *UrbLink;
+ struct _URB_HCD_AREA hca;
+ UCHAR RequestTypeReservedBits;
+ UCHAR Request;
+ USHORT Value;
+ USHORT Index;
+ USHORT Reserved1;
+};
+
+struct _URB_FRAME_LENGTH_CONTROL {
+ struct _URB_HEADER Hdr;
+};
+
+struct _URB_GET_CURRENT_FRAME_NUMBER {
+ struct _URB_HEADER Hdr;
+ ULONG FrameNumber;
+};
+
+struct _URB_GET_FRAME_LENGTH {
+ struct _URB_HEADER Hdr;
+ ULONG FrameLength;
+ ULONG FrameNumber;
+};
+
+typedef struct _USBD_ISO_PACKET_DESCRIPTOR {
+ ULONG Offset;
+ ULONG Length;
+ USBD_STATUS Status;
+} USBD_ISO_PACKET_DESCRIPTOR, *PUSBD_ISO_PACKET_DESCRIPTOR;
+
+struct _URB_ISOCH_TRANSFER {
+ struct _URB_HEADER Hdr;
+ USBD_PIPE_HANDLE PipeHandle;
+ ULONG TransferFlags;
+ ULONG TransferBufferLength;
+ PVOID TransferBuffer;
+ PMDL TransferBufferMDL;
+ struct _URB *UrbLink;
+ struct _URB_HCD_AREA hca;
+ ULONG StartFrame;
+ ULONG NumberOfPackets;
+ ULONG ErrorCount;
+ USBD_ISO_PACKET_DESCRIPTOR IsoPacket[1];
+};
+
+typedef enum _USBD_PIPE_TYPE {
+ UsbdPipeTypeControl,
+ UsbdPipeTypeIsochronous,
+ UsbdPipeTypeBulk,
+ UsbdPipeTypeInterrupt
+} USBD_PIPE_TYPE;
+
+typedef struct _USBD_PIPE_INFORMATION {
+ USHORT MaximumPacketSize;
+ UCHAR EndpointAddress;
+ UCHAR Interval;
+ USBD_PIPE_TYPE PipeType;
+ USBD_PIPE_HANDLE PipeHandle;
+ ULONG MaximumTransferSize;
+ ULONG PipeFlags;
+} USBD_PIPE_INFORMATION, *PUSBD_PIPE_INFORMATION ;
+
+#define USBD_PIPE_DIRECTION_IN(pipeInformation) \
+ ((pipeInformation)->EndpointAddress & USB_ENDPOINT_DIRECTION_MASK)
+
+typedef struct _USBD_INTERFACE_INFORMATION {
+ USHORT Length;
+ UCHAR InterfaceNumber;
+ UCHAR AlternateSetting;
+ UCHAR Class;
+ UCHAR SubClass;
+ UCHAR Protocol;
+ UCHAR Reserved;
+ USBD_INTERFACE_HANDLE InterfaceHandle;
+ ULONG NumberOfPipes;
+ USBD_PIPE_INFORMATION Pipes[1];
+} USBD_INTERFACE_INFORMATION, *PUSBD_INTERFACE_INFORMATION;
+
+struct _URB_SELECT_INTERFACE {
+ struct _URB_HEADER Hdr;
+ USBD_CONFIGURATION_HANDLE ConfigurationHandle;
+ USBD_INTERFACE_INFORMATION Interface;
+};
+
+struct _URB_SELECT_CONFIGURATION {
+ struct _URB_HEADER Hdr;
+ PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor;
+ USBD_CONFIGURATION_HANDLE ConfigurationHandle;
+ USBD_INTERFACE_INFORMATION Interface;
+};
+
+struct _URB_PIPE_REQUEST {
+ struct _URB_HEADER Hdr;
+ USBD_PIPE_HANDLE PipeHandle;
+ ULONG Reserved;
+};
+
+struct _URB_SET_FRAME_LENGTH {
+ struct _URB_HEADER Hdr;
+ LONG FrameLengthDelta;
+};
+
+typedef struct _URB {
+ _ANONYMOUS_UNION union {
+ struct _URB_HEADER UrbHeader;
+ struct _URB_SELECT_INTERFACE UrbSelectInterface;
+ struct _URB_SELECT_CONFIGURATION UrbSelectConfiguration;
+ struct _URB_PIPE_REQUEST UrbPipeRequest;
+ struct _URB_FRAME_LENGTH_CONTROL UrbFrameLengthControl;
+ struct _URB_GET_FRAME_LENGTH UrbGetFrameLength;
+ struct _URB_SET_FRAME_LENGTH UrbSetFrameLength;
+ struct _URB_GET_CURRENT_FRAME_NUMBER UrbGetCurrentFrameNumber;
+ struct _URB_CONTROL_TRANSFER UrbControlTransfer;
+ struct _URB_BULK_OR_INTERRUPT_TRANSFER UrbBulkOrInterruptTransfer;
+ struct _URB_ISOCH_TRANSFER UrbIsochronousTransfer;
+ struct _URB_CONTROL_DESCRIPTOR_REQUEST UrbControlDescriptorRequest;
+ struct _URB_CONTROL_GET_STATUS_REQUEST UrbControlGetStatusRequest;
+ struct _URB_CONTROL_FEATURE_REQUEST UrbControlFeatureRequest;
+ struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST UrbControlVendorClassRequest;
+ struct _URB_CONTROL_GET_INTERFACE_REQUEST UrbControlGetInterfaceRequest;
+ struct _URB_CONTROL_GET_CONFIGURATION_REQUEST UrbControlGetConfigurationRequest;
+ } DUMMYUNIONNAME;
+} URB, *PURB;
+
+#define URB_FROM_IRP(Irp) ((IoGetCurrentIrpStackLocation(Irp))->Parameters.Others.Argument1)
+
+#define URB_FUNCTION_SELECT_CONFIGURATION 0x0000
+#define URB_FUNCTION_SELECT_INTERFACE 0x0001
+#define URB_FUNCTION_ABORT_PIPE 0x0002
+#define URB_FUNCTION_TAKE_FRAME_LENGTH_CONTROL 0x0003
+#define URB_FUNCTION_RELEASE_FRAME_LENGTH_CONTROL 0x0004
+#define URB_FUNCTION_GET_FRAME_LENGTH 0x0005
+#define URB_FUNCTION_SET_FRAME_LENGTH 0x0006
+#define URB_FUNCTION_GET_CURRENT_FRAME_NUMBER 0x0007
+#define URB_FUNCTION_CONTROL_TRANSFER 0x0008
+#define URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER 0x0009
+#define URB_FUNCTION_ISOCH_TRANSFER 0x000A
+#define URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE 0x000B
+#define URB_FUNCTION_SET_DESCRIPTOR_TO_DEVICE 0x000C
+#define URB_FUNCTION_SET_FEATURE_TO_DEVICE 0x000D
+#define URB_FUNCTION_SET_FEATURE_TO_INTERFACE 0x000E
+#define URB_FUNCTION_SET_FEATURE_TO_ENDPOINT 0x000F
+#define URB_FUNCTION_CLEAR_FEATURE_TO_DEVICE 0x0010
+#define URB_FUNCTION_CLEAR_FEATURE_TO_INTERFACE 0x0011
+#define URB_FUNCTION_CLEAR_FEATURE_TO_ENDPOINT 0x0012
+#define URB_FUNCTION_GET_STATUS_FROM_DEVICE 0x0013
+#define URB_FUNCTION_GET_STATUS_FROM_INTERFACE 0x0014
+#define URB_FUNCTION_GET_STATUS_FROM_ENDPOINT 0x0015
+#define URB_FUNCTION_RESERVED_0X0016 0x0016
+#define URB_FUNCTION_VENDOR_DEVICE 0x0017
+#define URB_FUNCTION_VENDOR_INTERFACE 0x0018
+#define URB_FUNCTION_VENDOR_ENDPOINT 0x0019
+#define URB_FUNCTION_CLASS_DEVICE 0x001A
+#define URB_FUNCTION_CLASS_INTERFACE 0x001B
+#define URB_FUNCTION_CLASS_ENDPOINT 0x001C
+#define URB_FUNCTION_RESERVE_0X001D 0x001D
+#define URB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL 0x001E
+#define URB_FUNCTION_CLASS_OTHER 0x001F
+#define URB_FUNCTION_VENDOR_OTHER 0x0020
+#define URB_FUNCTION_GET_STATUS_FROM_OTHER 0x0021
+#define URB_FUNCTION_CLEAR_FEATURE_TO_OTHER 0x0022
+#define URB_FUNCTION_SET_FEATURE_TO_OTHER 0x0023
+#define URB_FUNCTION_GET_DESCRIPTOR_FROM_ENDPOINT 0x0024
+#define URB_FUNCTION_SET_DESCRIPTOR_TO_ENDPOINT 0x0025
+#define URB_FUNCTION_GET_CONFIGURATION 0x0026
+#define URB_FUNCTION_GET_INTERFACE 0x0027
+#define URB_FUNCTION_GET_DESCRIPTOR_FROM_INTERFACE 0x0028
+#define URB_FUNCTION_SET_DESCRIPTOR_TO_INTERFACE 0x0029
+#define URB_FUNCTION_GET_MS_FEATURE_DESCRIPTOR 0x002A
+#define URB_FUNCTION_RESERVE_0X002B 0x002B
+#define URB_FUNCTION_RESERVE_0X002C 0x002C
+#define URB_FUNCTION_RESERVE_0X002D 0x002D
+#define URB_FUNCTION_RESERVE_0X002E 0x002E
+#define URB_FUNCTION_RESERVE_0X002F 0x002F
+#define URB_FUNCTION_SYNC_RESET_PIPE 0x0030
+#define URB_FUNCTION_SYNC_CLEAR_STALL 0x0031
+
+#define USBD_PF_CHANGE_MAX_PACKET 0x00000001
+#define USBD_PF_SHORT_PACKET_OPT 0x00000002
+#define USBD_PF_ENABLE_RT_THREAD_ACCESS 0x00000004
+#define USBD_PF_MAP_ADD_TRANSFERS 0x00000008
+
+#define USBD_PF_VALID_MASK (USBD_PF_CHANGE_MAX_PACKET | \
+ USBD_PF_SHORT_PACKET_OPT | \
+ USBD_PF_ENABLE_RT_THREAD_ACCESS | \
+ USBD_PF_MAP_ADD_TRANSFERS)
+
+#define OS_STRING_DESCRIPTOR_INDEX 0xEE
+
+#define MS_GENRE_DESCRIPTOR_INDEX 0x0001
+#define MS_POWER_DESCRIPTOR_INDEX 0x0002
+
+#define MS_OS_STRING_SIGNATURE L"MSFT100"
+
+typedef struct _OS_STRING {
+ UCHAR bLength;
+ UCHAR bDescriptorType;
+ WCHAR MicrosoftString[7];
+ UCHAR bVendorCode;
+ UCHAR bPad;
+} OS_STRING, *POS_STRING;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* defined __USBDI_H */
+
+#endif /* __USB_H */
diff --git a/tcc/include/winapi/ddk/usb100.h b/tcc/include/winapi/ddk/usb100.h
new file mode 100644
index 0000000..53b774b
--- /dev/null
+++ b/tcc/include/winapi/ddk/usb100.h
@@ -0,0 +1,237 @@
+/*
+ * usb100.h
+ *
+ * USB 1.0 support
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __USB100_H
+#define __USB100_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+
+#define MAXIMUM_USB_STRING_LENGTH 255
+
+#define USB_DEVICE_CLASS_RESERVED 0x00
+#define USB_DEVICE_CLASS_AUDIO 0x01
+#define USB_DEVICE_CLASS_COMMUNICATIONS 0x02
+#define USB_DEVICE_CLASS_HUMAN_INTERFACE 0x03
+#define USB_DEVICE_CLASS_MONITOR 0x04
+#define USB_DEVICE_CLASS_PHYSICAL_INTERFACE 0x05
+#define USB_DEVICE_CLASS_POWER 0x06
+#define USB_DEVICE_CLASS_PRINTER 0x07
+#define USB_DEVICE_CLASS_STORAGE 0x08
+#define USB_DEVICE_CLASS_HUB 0x09
+#define USB_DEVICE_CLASS_VENDOR_SPECIFIC 0xFF
+
+#define USB_RESERVED_DESCRIPTOR_TYPE 0x06
+#define USB_CONFIG_POWER_DESCRIPTOR_TYPE 0x07
+#define USB_INTERFACE_POWER_DESCRIPTOR_TYPE 0x08
+
+#define USB_REQUEST_GET_STATUS 0x00
+#define USB_REQUEST_CLEAR_FEATURE 0x01
+#define USB_REQUEST_SET_FEATURE 0x03
+#define USB_REQUEST_SET_ADDRESS 0x05
+#define USB_REQUEST_GET_DESCRIPTOR 0x06
+#define USB_REQUEST_SET_DESCRIPTOR 0x07
+#define USB_REQUEST_GET_CONFIGURATION 0x08
+#define USB_REQUEST_SET_CONFIGURATION 0x09
+#define USB_REQUEST_GET_INTERFACE 0x0A
+#define USB_REQUEST_SET_INTERFACE 0x0B
+#define USB_REQUEST_SYNC_FRAME 0x0C
+
+#define USB_GETSTATUS_SELF_POWERED 0x01
+#define USB_GETSTATUS_REMOTE_WAKEUP_ENABLED 0x02
+
+#define BMREQUEST_HOST_TO_DEVICE 0
+#define BMREQUEST_DEVICE_TO_HOST 1
+
+#define BMREQUEST_STANDARD 0
+#define BMREQUEST_CLASS 1
+#define BMREQUEST_VENDOR 2
+
+#define BMREQUEST_TO_DEVICE 0
+#define BMREQUEST_TO_INTERFACE 1
+#define BMREQUEST_TO_ENDPOINT 2
+#define BMREQUEST_TO_OTHER 3
+
+/* USB_COMMON_DESCRIPTOR.bDescriptorType constants */
+#define USB_DEVICE_DESCRIPTOR_TYPE 0x01
+#define USB_CONFIGURATION_DESCRIPTOR_TYPE 0x02
+#define USB_STRING_DESCRIPTOR_TYPE 0x03
+#define USB_INTERFACE_DESCRIPTOR_TYPE 0x04
+#define USB_ENDPOINT_DESCRIPTOR_TYPE 0x05
+
+typedef struct _USB_COMMON_DESCRIPTOR {
+ UCHAR bLength;
+ UCHAR bDescriptorType;
+} USB_COMMON_DESCRIPTOR, *PUSB_COMMON_DESCRIPTOR;
+
+#define USB_DESCRIPTOR_MAKE_TYPE_AND_INDEX(d, i) ((USHORT)((USHORT)d << 8 | i))
+
+/* USB_CONFIGURATION_DESCRIPTOR.bmAttributes constants */
+#define USB_CONFIG_POWERED_MASK 0xc0
+#define USB_CONFIG_BUS_POWERED 0x80
+#define USB_CONFIG_SELF_POWERED 0x40
+#define USB_CONFIG_REMOTE_WAKEUP 0x20
+
+#include <pshpack1.h>
+typedef struct _USB_CONFIGURATION_DESCRIPTOR {
+ UCHAR bLength;
+ UCHAR bDescriptorType;
+ USHORT wTotalLength;
+ UCHAR bNumInterfaces;
+ UCHAR bConfigurationValue;
+ UCHAR iConfiguration;
+ UCHAR bmAttributes;
+ UCHAR MaxPower;
+} USB_CONFIGURATION_DESCRIPTOR, *PUSB_CONFIGURATION_DESCRIPTOR;
+#include <poppack.h>
+
+typedef struct _USB_DEVICE_DESCRIPTOR {
+ UCHAR bLength;
+ UCHAR bDescriptorType;
+ USHORT bcdUSB;
+ UCHAR bDeviceClass;
+ UCHAR bDeviceSubClass;
+ UCHAR bDeviceProtocol;
+ UCHAR bMaxPacketSize0;
+ USHORT idVendor;
+ USHORT idProduct;
+ USHORT bcdDevice;
+ UCHAR iManufacturer;
+ UCHAR iProduct;
+ UCHAR iSerialNumber;
+ UCHAR bNumConfigurations;
+} USB_DEVICE_DESCRIPTOR, *PUSB_DEVICE_DESCRIPTOR;
+
+#define USB_ENDPOINT_DIRECTION_MASK 0x80
+
+#define USB_ENDPOINT_DIRECTION_OUT(x) (!((x) & USB_ENDPOINT_DIRECTION_MASK))
+#define USB_ENDPOINT_DIRECTION_IN(x) ((x) & USB_ENDPOINT_DIRECTION_MASK)
+
+/* USB_ENDPOINT_DESCRIPTOR.bmAttributes constants */
+#define USB_ENDPOINT_TYPE_MASK 0x03
+#define USB_ENDPOINT_TYPE_CONTROL 0x00
+#define USB_ENDPOINT_TYPE_ISOCHRONOUS 0x01
+#define USB_ENDPOINT_TYPE_BULK 0x02
+#define USB_ENDPOINT_TYPE_INTERRUPT 0x03
+
+#include <pshpack1.h>
+typedef struct _USB_ENDPOINT_DESCRIPTOR {
+ UCHAR bLength;
+ UCHAR bDescriptorType;
+ UCHAR bEndpointAddress;
+ UCHAR bmAttributes;
+ USHORT wMaxPacketSize;
+ UCHAR bInterval;
+} USB_ENDPOINT_DESCRIPTOR, *PUSB_ENDPOINT_DESCRIPTOR;
+#include <poppack.h>
+
+#define USB_FEATURE_ENDPOINT_STALL 0x0000
+#define USB_FEATURE_REMOTE_WAKEUP 0x0001
+
+typedef struct _USB_INTERFACE_DESCRIPTOR {
+ UCHAR bLength;
+ UCHAR bDescriptorType;
+ UCHAR bInterfaceNumber;
+ UCHAR bAlternateSetting;
+ UCHAR bNumEndpoints;
+ UCHAR bInterfaceClass;
+ UCHAR bInterfaceSubClass;
+ UCHAR bInterfaceProtocol;
+ UCHAR iInterface;
+} USB_INTERFACE_DESCRIPTOR, *PUSB_INTERFACE_DESCRIPTOR;
+
+typedef struct _USB_STRING_DESCRIPTOR {
+ UCHAR bLength;
+ UCHAR bDescriptorType;
+ WCHAR bString[1];
+} USB_STRING_DESCRIPTOR, *PUSB_STRING_DESCRIPTOR;
+
+#include <pshpack1.h>
+typedef struct _USB_HUB_DESCRIPTOR {
+ UCHAR bDescriptorLength;
+ UCHAR bDescriptorType;
+ UCHAR bNumberOfPorts;
+ USHORT wHubCharacteristics;
+ UCHAR bPowerOnToPowerGood;
+ UCHAR bHubControlCurrent;
+ UCHAR bRemoveAndPowerMask[64];
+} USB_HUB_DESCRIPTOR, *PUSB_HUB_DESCRIPTOR;
+#include <poppack.h>
+
+#define USB_SUPPORT_D0_COMMAND 0x01
+#define USB_SUPPORT_D1_COMMAND 0x02
+#define USB_SUPPORT_D2_COMMAND 0x04
+#define USB_SUPPORT_D3_COMMAND 0x08
+
+#define USB_SUPPORT_D1_WAKEUP 0x10
+#define USB_SUPPORT_D2_WAKEUP 0x20
+
+typedef struct _USB_CONFIGURATION_POWER_DESCRIPTOR {
+ UCHAR bLength;
+ UCHAR bDescriptorType;
+ UCHAR SelfPowerConsumedD0[3];
+ UCHAR bPowerSummaryId;
+ UCHAR bBusPowerSavingD1;
+ UCHAR bSelfPowerSavingD1;
+ UCHAR bBusPowerSavingD2;
+ UCHAR bSelfPowerSavingD2;
+ UCHAR bBusPowerSavingD3;
+ UCHAR bSelfPowerSavingD3;
+ USHORT TransitionTimeFromD1;
+ USHORT TransitionTimeFromD2;
+ USHORT TransitionTimeFromD3;
+} USB_CONFIGURATION_POWER_DESCRIPTOR, *PUSB_CONFIGURATION_POWER_DESCRIPTOR;
+
+#define USB_FEATURE_INTERFACE_POWER_D0 0x0002
+#define USB_FEATURE_INTERFACE_POWER_D1 0x0003
+#define USB_FEATURE_INTERFACE_POWER_D2 0x0004
+#define USB_FEATURE_INTERFACE_POWER_D3 0x0005
+
+#include <pshpack1.h>
+typedef struct _USB_INTERFACE_POWER_DESCRIPTOR {
+ UCHAR bLength;
+ UCHAR bDescriptorType;
+ UCHAR bmCapabilitiesFlags;
+ UCHAR bBusPowerSavingD1;
+ UCHAR bSelfPowerSavingD1;
+ UCHAR bBusPowerSavingD2;
+ UCHAR bSelfPowerSavingD2;
+ UCHAR bBusPowerSavingD3;
+ UCHAR bSelfPowerSavingD3;
+ USHORT TransitionTimeFromD1;
+ USHORT TransitionTimeFromD2;
+ USHORT TransitionTimeFromD3;
+} USB_INTERFACE_POWER_DESCRIPTOR, *PUSB_INTERFACE_POWER_DESCRIPTOR;
+#include <poppack.h>
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __USB100_H */
diff --git a/tcc/include/winapi/ddk/usbcamdi.h b/tcc/include/winapi/ddk/usbcamdi.h
new file mode 100644
index 0000000..3a0f9de
--- /dev/null
+++ b/tcc/include/winapi/ddk/usbcamdi.h
@@ -0,0 +1,404 @@
+/*
+ * usbcamdi.h
+ *
+ * USB Camera driver interface.
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __USBCAMDI_H
+#define __USBCAMDI_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#if !defined(__USB_H) && !defined(__USBDI_H)
+#error include usb.h or usbdi.h before usbcamdi.h
+#else
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#pragma pack(push,4)
+
+#include "ntddk.h"
+
+#if defined(_BATTERYCLASS_)
+ #define USBCAMAPI DECLSPEC_EXPORT
+#else
+ #define USBCAMAPI DECLSPEC_IMPORT
+#endif
+
+
+/* FIXME: Unknown definition */
+typedef PVOID PHW_STREAM_REQUEST_BLOCK;
+
+DEFINE_GUID(GUID_USBCAMD_INTERFACE,
+ 0x2bcb75c0, 0xb27f, 0x11d1, 0xba, 0x41, 0x0, 0xa0, 0xc9, 0xd, 0x2b, 0x5);
+
+#define USBCAMD_PROCESSPACKETEX_DropFrame 0x0002
+#define USBCAMD_PROCESSPACKETEX_NextFrameIsStill 0x0004
+#define USBCAMD_PROCESSPACKETEX_CurrentFrameIsStill 0x0008
+
+#define USBCAMD_DATA_PIPE 0x0001
+#define USBCAMD_MULTIPLEX_PIPE 0x0002
+#define USBCAMD_SYNC_PIPE 0x0004
+#define USBCAMD_DONT_CARE_PIPE 0x0008
+
+#define USBCAMD_VIDEO_STREAM 0x1
+#define USBCAMD_STILL_STREAM 0x2
+#define USBCAMD_VIDEO_STILL_STREAM (USBCAMD_VIDEO_STREAM | USBCAMD_STILL_STREAM)
+
+#define USBCAMD_STOP_STREAM 0x00000001
+#define USBCAMD_START_STREAM 0x00000000
+
+typedef struct _pipe_config_descriptor {
+ CHAR StreamAssociation;
+ UCHAR PipeConfigFlags;
+} USBCAMD_Pipe_Config_Descriptor, *PUSBCAMD_Pipe_Config_Descriptor;
+
+typedef enum {
+ USBCAMD_CamControlFlag_NoVideoRawProcessing = 1,
+ USBCAMD_CamControlFlag_NoStillRawProcessing = 2,
+ USBCAMD_CamControlFlag_AssociatedFormat = 4,
+ USBCAMD_CamControlFlag_EnableDeviceEvents = 8
+} USBCAMD_CamControlFlags;
+
+typedef NTSTATUS DDKAPI
+(*PCAM_ALLOCATE_BW_ROUTINE)(
+ PDEVICE_OBJECT BusDeviceObject,
+ PVOID DeviceContext,
+ PULONG RawFrameLength,
+ PVOID Format);
+
+typedef NTSTATUS DDKAPI
+(*PCAM_ALLOCATE_BW_ROUTINE_EX)(
+ PDEVICE_OBJECT BusDeviceObject,
+ PVOID DeviceContext,
+ PULONG RawFrameLength,
+ PVOID Format,
+ ULONG StreamNumber);
+
+typedef NTSTATUS DDKAPI
+(*PCAM_CONFIGURE_ROUTINE)(
+ PDEVICE_OBJECT BusDeviceObject,
+ PVOID DeviceContext,
+ PUSBD_INTERFACE_INFORMATION Interface,
+ PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor,
+ PLONG DataPipeIndex,
+ PLONG SyncPipeIndex);
+
+typedef NTSTATUS DDKAPI
+(*PCAM_CONFIGURE_ROUTINE_EX)(
+ PDEVICE_OBJECT BusDeviceObject,
+ PVOID DeviceContext,
+ PUSBD_INTERFACE_INFORMATION Interface,
+ PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor,
+ ULONG PipeConfigListSize,
+ PUSBCAMD_Pipe_Config_Descriptor PipeConfig,
+ PUSB_DEVICE_DESCRIPTOR DeviceDescriptor);
+
+typedef NTSTATUS DDKAPI
+(*PCAM_FREE_BW_ROUTINE)(
+ PDEVICE_OBJECT BusDeviceObject,
+ PVOID DeviceContext);
+
+typedef NTSTATUS DDKAPI
+(*PCAM_FREE_BW_ROUTINE_EX)(
+ PDEVICE_OBJECT BusDeviceObject,
+ PVOID DeviceContext,
+ ULONG StreamNumber);
+
+typedef NTSTATUS DDKAPI
+(*PCAM_INITIALIZE_ROUTINE)(
+ PDEVICE_OBJECT BusDeviceObject,
+ PVOID DeviceContext);
+
+typedef VOID DDKAPI
+(*PCAM_NEW_FRAME_ROUTINE)(
+ PVOID DeviceContext,
+ PVOID FrameContext);
+
+typedef VOID DDKAPI
+(*PCAM_NEW_FRAME_ROUTINE_EX)(
+ PVOID DeviceContext,
+ PVOID FrameContext,
+ ULONG StreamNumber,
+ PULONG FrameLength);
+
+typedef NTSTATUS DDKAPI
+(*PCAM_PROCESS_RAW_FRAME_ROUTINE)(
+ PDEVICE_OBJECT BusDeviceObject,
+ PVOID DeviceContext,
+ PVOID FrameContext,
+ PVOID FrameBuffer,
+ ULONG FrameLength,
+ PVOID RawFrameBuffer,
+ ULONG RawFrameLength,
+ ULONG NumberOfPackets,
+ PULONG BytesReturned);
+
+typedef NTSTATUS DDKAPI
+(*PCAM_PROCESS_RAW_FRAME_ROUTINE_EX)(
+ PDEVICE_OBJECT BusDeviceObject,
+ PVOID DeviceContext,
+ PVOID FrameContext,
+ PVOID FrameBuffer,
+ ULONG FrameLength,
+ PVOID RawFrameBuffer,
+ ULONG RawFrameLength,
+ ULONG NumberOfPackets,
+ PULONG BytesReturned,
+ ULONG ActualRawFrameLength,
+ ULONG StreamNumber);
+
+typedef ULONG DDKAPI
+(*PCAM_PROCESS_PACKET_ROUTINE)(
+ PDEVICE_OBJECT BusDeviceObject,
+ PVOID DeviceContext,
+ PVOID CurrentFrameContext,
+ PUSBD_ISO_PACKET_DESCRIPTOR SyncPacket,
+ PVOID SyncBuffer,
+ PUSBD_ISO_PACKET_DESCRIPTOR DataPacket,
+ PVOID DataBuffer,
+ PBOOLEAN FrameComplete,
+ PBOOLEAN NextFrameIsStill);
+
+typedef ULONG DDKAPI
+(*PCAM_PROCESS_PACKET_ROUTINE_EX)(
+ PDEVICE_OBJECT BusDeviceObject,
+ PVOID DeviceContext,
+ PVOID CurrentFrameContext,
+ PUSBD_ISO_PACKET_DESCRIPTOR SyncPacket,
+ PVOID SyncBuffer,
+ PUSBD_ISO_PACKET_DESCRIPTOR DataPacket,
+ PVOID DataBuffer,
+ PBOOLEAN FrameComplete,
+ PULONG PacketFlag,
+ PULONG ValidDataOffset);
+
+typedef NTSTATUS DDKAPI
+(*PCAM_STATE_ROUTINE)(
+ PDEVICE_OBJECT BusDeviceObject,
+ PVOID DeviceContext);
+
+typedef NTSTATUS DDKAPI
+(*PCAM_START_CAPTURE_ROUTINE)(
+ PDEVICE_OBJECT BusDeviceObject,
+ PVOID DeviceContext);
+
+typedef NTSTATUS DDKAPI
+(*PCAM_START_CAPTURE_ROUTINE_EX)(
+ PDEVICE_OBJECT BusDeviceObject,
+ PVOID DeviceContext,
+ ULONG StreamNumber);
+
+typedef NTSTATUS DDKAPI
+(*PCAM_STOP_CAPTURE_ROUTINE)(
+ PDEVICE_OBJECT BusDeviceObject,
+ PVOID DeviceContext);
+
+typedef NTSTATUS DDKAPI
+(*PCAM_STOP_CAPTURE_ROUTINE_EX)(
+ PDEVICE_OBJECT BusDeviceObject,
+ PVOID DeviceContext,
+ ULONG StreamNumber);
+
+typedef struct _USBCAMD_DEVICE_DATA {
+ ULONG Sig;
+ PCAM_INITIALIZE_ROUTINE CamInitialize;
+ PCAM_INITIALIZE_ROUTINE CamUnInitialize;
+ PCAM_PROCESS_PACKET_ROUTINE CamProcessUSBPacket;
+ PCAM_NEW_FRAME_ROUTINE CamNewVideoFrame;
+ PCAM_PROCESS_RAW_FRAME_ROUTINE CamProcessRawVideoFrame;
+ PCAM_START_CAPTURE_ROUTINE CamStartCapture;
+ PCAM_STOP_CAPTURE_ROUTINE CamStopCapture;
+ PCAM_CONFIGURE_ROUTINE CamConfigure;
+ PCAM_STATE_ROUTINE CamSaveState;
+ PCAM_STATE_ROUTINE CamRestoreState;
+ PCAM_ALLOCATE_BW_ROUTINE CamAllocateBandwidth;
+ PCAM_FREE_BW_ROUTINE CamFreeBandwidth;
+} USBCAMD_DEVICE_DATA, *PUSBCAMD_DEVICE_DATA;
+
+typedef struct _USBCAMD_DEVICE_DATA2 {
+ ULONG Sig;
+ PCAM_INITIALIZE_ROUTINE CamInitialize;
+ PCAM_INITIALIZE_ROUTINE CamUnInitialize;
+ PCAM_PROCESS_PACKET_ROUTINE_EX CamProcessUSBPacketEx;
+ PCAM_NEW_FRAME_ROUTINE_EX CamNewVideoFrameEx;
+ PCAM_PROCESS_RAW_FRAME_ROUTINE_EX CamProcessRawVideoFrameEx;
+ PCAM_START_CAPTURE_ROUTINE_EX CamStartCaptureEx;
+ PCAM_STOP_CAPTURE_ROUTINE_EX CamStopCaptureEx;
+ PCAM_CONFIGURE_ROUTINE_EX CamConfigureEx;
+ PCAM_STATE_ROUTINE CamSaveState;
+ PCAM_STATE_ROUTINE CamRestoreState;
+ PCAM_ALLOCATE_BW_ROUTINE_EX CamAllocateBandwidthEx;
+ PCAM_FREE_BW_ROUTINE_EX CamFreeBandwidthEx;
+} USBCAMD_DEVICE_DATA2, *PUSBCAMD_DEVICE_DATA2;
+
+USBCAMAPI
+ULONG
+DDKAPI
+USBCAMD_InitializeNewInterface(
+ /*IN*/ PVOID DeviceContext,
+ /*IN*/ PVOID DeviceData,
+ /*IN*/ ULONG Version,
+ /*IN*/ ULONG CamControlFlag);
+
+typedef VOID DDKAPI
+(*PCOMMAND_COMPLETE_FUNCTION)(
+ PVOID DeviceContext,
+ PVOID CommandContext,
+ NTSTATUS NtStatus);
+
+typedef NTSTATUS DDKAPI
+(*PFNUSBCAMD_BulkReadWrite)(
+ /*IN*/ PVOID DeviceContext,
+ /*IN*/ USHORT PipeIndex,
+ /*IN*/ PVOID Buffer,
+ /*IN*/ ULONG BufferLength,
+ /*IN*/ PCOMMAND_COMPLETE_FUNCTION CommandComplete,
+ /*IN*/ PVOID CommandContext);
+
+typedef NTSTATUS DDKAPI
+(*PFNUSBCAMD_SetIsoPipeState)(
+ /*IN*/ PVOID DeviceContext,
+ /*IN*/ ULONG PipeStateFlags);
+
+typedef NTSTATUS DDKAPI
+(*PFNUSBCAMD_CancelBulkReadWrite)(
+ /*IN*/ PVOID DeviceContext,
+ /*IN*/ ULONG PipeIndex);
+
+typedef NTSTATUS DDKAPI
+(*PFNUSBCAMD_SetVideoFormat)(
+ /*IN*/ PVOID DeviceContext,
+ /*IN*/ PHW_STREAM_REQUEST_BLOCK pSrb);
+
+typedef NTSTATUS DDKAPI
+(*PFNUSBCAMD_WaitOnDeviceEvent)(
+ /*IN*/ PVOID DeviceContext,
+ /*IN*/ ULONG PipeIndex,
+ /*IN*/ PVOID Buffer,
+ /*IN*/ ULONG BufferLength,
+ /*IN*/ PCOMMAND_COMPLETE_FUNCTION EventComplete,
+ /*IN*/ PVOID EventContext,
+ /*IN*/ BOOLEAN LoopBack);
+
+USBCAMAPI
+PVOID
+DDKAPI
+USBCAMD_AdapterReceivePacket(
+ /*IN*/ PHW_STREAM_REQUEST_BLOCK Srb,
+ /*IN*/ PUSBCAMD_DEVICE_DATA DeviceData,
+ /*IN*/ PDEVICE_OBJECT *DeviceObject,
+ /*IN*/ BOOLEAN NeedsCompletion);
+
+USBCAMAPI
+NTSTATUS
+DDKAPI
+USBCAMD_ControlVendorCommand(
+ /*IN*/ PVOID DeviceContext,
+ /*IN*/ UCHAR Request,
+ /*IN*/ USHORT Value,
+ /*IN*/ USHORT Index,
+ /*IN*/ PVOID Buffer,
+ /*IN OUT*/ PULONG BufferLength,
+ /*IN*/ BOOLEAN GetData,
+ /*IN*/ PCOMMAND_COMPLETE_FUNCTION CommandComplete,
+ /*IN*/ PVOID CommandContext);
+
+typedef VOID DDKAPI
+(*PADAPTER_RECEIVE_PACKET_ROUTINE)(
+ /*IN*/ PHW_STREAM_REQUEST_BLOCK Srb);
+
+USBCAMAPI
+ULONG
+DDKAPI
+USBCAMD_DriverEntry(
+ PVOID Context1,
+ PVOID Context2,
+ ULONG DeviceContextSize,
+ ULONG FrameContextSize,
+ PADAPTER_RECEIVE_PACKET_ROUTINE ReceivePacket);
+
+USBCAMAPI
+NTSTATUS
+DDKAPI
+USBCAMD_GetRegistryKeyValue(
+ /*IN*/ HANDLE Handle,
+ /*IN*/ PWCHAR KeyNameString,
+ /*IN*/ ULONG KeyNameStringLength,
+ /*IN*/ PVOID Data,
+ /*IN*/ ULONG DataLength);
+
+USBCAMAPI
+NTSTATUS
+DDKAPI
+USBCAMD_SelectAlternateInterface(
+ /*IN*/ PVOID DeviceContext,
+ /*IN OUT*/ PUSBD_INTERFACE_INFORMATION RequestInterface);
+
+#define USBCAMD_VERSION_200 0x200
+
+typedef struct _USBCAMD_INTERFACE {
+ INTERFACE Interface;
+ PFNUSBCAMD_WaitOnDeviceEvent USBCAMD_WaitOnDeviceEvent;
+ PFNUSBCAMD_BulkReadWrite USBCAMD_BulkReadWrite;
+ PFNUSBCAMD_SetVideoFormat USBCAMD_SetVideoFormat;
+ PFNUSBCAMD_SetIsoPipeState USBCAMD_SetIsoPipeState;
+ PFNUSBCAMD_CancelBulkReadWrite USBCAMD_CancelBulkReadWrite;
+} USBCAMD_INTERFACE, *PUSBCAMD_INTERFACE;
+
+typedef VOID DDKAPI
+(*PSTREAM_RECEIVE_PACKET)(
+ /*IN*/ PVOID Srb,
+ /*IN*/ PVOID DeviceContext,
+ /*IN*/ PBOOLEAN Completed);
+
+#if defined(DEBUG_LOG)
+
+USBCAMAPI
+VOID
+DDKAPI
+USBCAMD_Debug_LogEntry(
+ /*IN*/ CHAR *Name,
+ /*IN*/ ULONG Info1,
+ /*IN*/ ULONG Info2,
+ /*IN*/ ULONG Info3);
+
+#define ILOGENTRY(sig, info1, info2, info3) \
+ USBCAMD_Debug_LogEntry(sig, (ULONG)info1, (ULONG)info2, (ULONG)info3)
+
+#else
+
+#define ILOGENTRY(sig, info1, info2, info3)
+
+#endif /* DEBUG_LOG */
+
+#pragma pack(pop)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !defined(__USB_H) && !defined(__USBDI_H) */
+
+
+#endif /* __USBCAMDI_H */
diff --git a/tcc/include/winapi/ddk/usbdi.h b/tcc/include/winapi/ddk/usbdi.h
new file mode 100644
index 0000000..99d2475
--- /dev/null
+++ b/tcc/include/winapi/ddk/usbdi.h
@@ -0,0 +1,407 @@
+/*
+ * usbdi.h
+ *
+ * USBD and USB device driver definitions
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __USBDI_H
+#define __USBDI_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __USB_H
+#error usb.h cannot be included with usbdi.h
+#else
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+#include "usbioctl.h"
+
+#define USBDI_VERSION 0x300
+
+#define USB_DEFAULT_DEVICE_ADDRESS 0
+#define USB_DEFAULT_ENDPOINT_ADDRESS 0
+#define USB_DEFAULT_MAX_PACKET 64
+
+#define URB_FROM_IRP(Irp) ((IoGetCurrentIrpStackLocation(Irp))->Parameters.Others.Argument1)
+
+#define URB_FUNCTION_SELECT_CONFIGURATION 0x0000
+#define URB_FUNCTION_SELECT_INTERFACE 0x0001
+#define URB_FUNCTION_ABORT_PIPE 0x0002
+#define URB_FUNCTION_TAKE_FRAME_LENGTH_CONTROL 0x0003
+#define URB_FUNCTION_RELEASE_FRAME_LENGTH_CONTROL 0x0004
+#define URB_FUNCTION_GET_FRAME_LENGTH 0x0005
+#define URB_FUNCTION_SET_FRAME_LENGTH 0x0006
+#define URB_FUNCTION_GET_CURRENT_FRAME_NUMBER 0x0007
+#define URB_FUNCTION_CONTROL_TRANSFER 0x0008
+#define URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER 0x0009
+#define URB_FUNCTION_ISOCH_TRANSFER 0x000A
+#define URB_FUNCTION_RESET_PIPE 0x001E
+#define URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE 0x000B
+#define URB_FUNCTION_GET_DESCRIPTOR_FROM_ENDPOINT 0x0024
+#define URB_FUNCTION_GET_DESCRIPTOR_FROM_INTERFACE 0x0028
+#define URB_FUNCTION_SET_DESCRIPTOR_TO_DEVICE 0x000C
+#define URB_FUNCTION_SET_DESCRIPTOR_TO_ENDPOINT 0x0025
+#define URB_FUNCTION_SET_DESCRIPTOR_TO_INTERFACE 0x0029
+#define URB_FUNCTION_SET_FEATURE_TO_DEVICE 0x000D
+#define URB_FUNCTION_SET_FEATURE_TO_INTERFACE 0x000E
+#define URB_FUNCTION_SET_FEATURE_TO_ENDPOINT 0x000F
+#define URB_FUNCTION_SET_FEATURE_TO_OTHER 0x0023
+#define URB_FUNCTION_CLEAR_FEATURE_TO_DEVICE 0x0010
+#define URB_FUNCTION_CLEAR_FEATURE_TO_INTERFACE 0x0011
+#define URB_FUNCTION_CLEAR_FEATURE_TO_ENDPOINT 0x0012
+#define URB_FUNCTION_CLEAR_FEATURE_TO_OTHER 0x0022
+#define URB_FUNCTION_GET_STATUS_FROM_DEVICE 0x0013
+#define URB_FUNCTION_GET_STATUS_FROM_INTERFACE 0x0014
+#define URB_FUNCTION_GET_STATUS_FROM_ENDPOINT 0x0015
+#define URB_FUNCTION_GET_STATUS_FROM_OTHER 0x0021
+#define URB_FUNCTION_RESERVED0 0x0016
+#define URB_FUNCTION_VENDOR_DEVICE 0x0017
+#define URB_FUNCTION_VENDOR_INTERFACE 0x0018
+#define URB_FUNCTION_VENDOR_ENDPOINT 0x0019
+#define URB_FUNCTION_VENDOR_OTHER 0x0020
+#define URB_FUNCTION_CLASS_DEVICE 0x001A
+#define URB_FUNCTION_CLASS_INTERFACE 0x001B
+#define URB_FUNCTION_CLASS_ENDPOINT 0x001C
+#define URB_FUNCTION_CLASS_OTHER 0x001F
+#define URB_FUNCTION_RESERVED 0x001D
+#define URB_FUNCTION_GET_CONFIGURATION 0x0026
+#define URB_FUNCTION_GET_INTERFACE 0x0027
+#define URB_FUNCTION_LAST 0x0029
+
+typedef LONG USBD_STATUS;
+typedef PVOID USBD_PIPE_HANDLE;
+typedef PVOID USBD_CONFIGURATION_HANDLE;
+typedef PVOID USBD_INTERFACE_HANDLE;
+
+#define USBD_ERROR(Status) ((USBD_STATUS)(Status) < 0)
+#define USBD_HALTED(Status) ((ULONG)(Status) >> 30 == 3)
+#define USBD_PENDING(Status) ((ULONG)(Status) >> 30 == 1)
+#define USBD_STATUS(Status) ((ULONG)(Status) & 0x0FFFFFFFL)
+#define USBD_SUCCESS(Status) ((USBD_STATUS)(Status) >= 0)
+
+#define USBD_STATUS_SUCCESS ((USBD_STATUS)0x00000000L)
+#define USBD_STATUS_PENDING ((USBD_STATUS)0x40000000L)
+#define USBD_STATUS_HALTED ((USBD_STATUS)0xC0000000L)
+#define USBD_STATUS_ERROR ((USBD_STATUS)0x80000000L)
+#define USBD_STATUS_NO_MEMORY ((USBD_STATUS)0x80000100L)
+#define USBD_STATUS_INVALID_URB_FUNCTION ((USBD_STATUS)0x80000200L)
+#define USBD_STATUS_INVALID_PARAMETER ((USBD_STATUS)0x80000300L)
+#define USBD_STATUS_ERROR_BUSY ((USBD_STATUS)0x80000400L)
+#define USBD_STATUS_REQUEST_FAILED ((USBD_STATUS)0x80000500L)
+#define USBD_STATUS_INVALID_PIPE_HANDLE ((USBD_STATUS)0x80000600L)
+#define USBD_STATUS_NO_BANDWIDTH ((USBD_STATUS)0x80000700L)
+#define USBD_STATUS_INTERNAL_HC_ERROR ((USBD_STATUS)0x80000800L)
+#define USBD_STATUS_ERROR_SHORT_TRANSFER ((USBD_STATUS)0x80000900L)
+#define USBD_STATUS_CRC ((USBD_STATUS)0xC0000001L)
+#define USBD_STATUS_BTSTUFF ((USBD_STATUS)0xC0000002L)
+#define USBD_STATUS_DATA_TOGGLE_MISMATCH ((USBD_STATUS)0xC0000003L)
+#define USBD_STATUS_STALL_PID ((USBD_STATUS)0xC0000004L)
+#define USBD_STATUS_DEV_NOT_RESPONDING ((USBD_STATUS)0xC0000005L)
+#define USBD_STATUS_PID_CHECK_FAILURE ((USBD_STATUS)0xC0000006L)
+#define USBD_STATUS_UNEXPECTED_PID ((USBD_STATUS)0xC0000007L)
+#define USBD_STATUS_DATA_OVERRUN ((USBD_STATUS)0xC0000008L)
+#define USBD_STATUS_DATA_UNDERRUN ((USBD_STATUS)0xC0000009L)
+#define USBD_STATUS_RESERVED1 ((USBD_STATUS)0xC000000AL)
+#define USBD_STATUS_RESERVED2 ((USBD_STATUS)0xC000000BL)
+#define USBD_STATUS_BUFFER_OVERRUN ((USBD_STATUS)0xC000000CL)
+#define USBD_STATUS_BUFFER_UNDERRUN ((USBD_STATUS)0xC000000DL)
+#define USBD_STATUS_NOT_ACCESSED ((USBD_STATUS)0xC000000FL)
+#define USBD_STATUS_FIFO ((USBD_STATUS)0xC0000010L)
+#define USBD_STATUS_ENDPOINT_HALTED ((USBD_STATUS)0xC0000030L)
+#define USBD_STATUS_BAD_START_FRAME ((USBD_STATUS)0xC0000A00L)
+#define USBD_STATUS_ISOCH_REQUEST_FAILED ((USBD_STATUS)0xC0000B00L)
+#define USBD_STATUS_FRAME_CONTROL_OWNED ((USBD_STATUS)0xC0000C00L)
+#define USBD_STATUS_FRAME_CONTROL_NOT_OWNED \
+ ((USBD_STATUS)0xC0000D00L)
+#define USBD_STATUS_INAVLID_CONFIGURATION_DESCRIPTOR \
+ ((USBD_STATUS)0xC0000F00L)
+#define USBD_STATUS_CANCELING ((USBD_STATUS)0x00020000L)
+
+#define USBD_PIPE_DIRECTION_IN(pipeInformation) \
+ ((pipeInformation)->EndpointAddress & USB_ENDPOINT_DIRECTION_MASK)
+
+struct _URB_HEADER {
+ USHORT Length;
+ USHORT Function;
+ USBD_STATUS Status;
+ PVOID UsbdDeviceHandle;
+ ULONG UsbdFlags;
+};
+
+struct _URB_HCD_AREA {
+ PVOID HcdEndpoint;
+ PIRP HcdIrp;
+ LIST_ENTRY HcdListEntry;
+ LIST_ENTRY HcdListEntry2;
+ PVOID HcdCurrentIoFlushPointer;
+ PVOID HcdExtension;
+};
+
+struct _URB_BULK_OR_INTERRUPT_TRANSFER {
+ struct _URB_HEADER Hdr;
+ USBD_PIPE_HANDLE PipeHandle;
+ ULONG TransferFlags;
+ ULONG TransferBufferLength;
+ PVOID TransferBuffer;
+ PMDL TransferBufferMDL;
+ struct _URB *UrbLink;
+ struct _URB_HCD_AREA hca;
+};
+
+struct _URB_CONTROL_DESCRIPTOR_REQUEST {
+ struct _URB_HEADER Hdr;
+ PVOID Reserved;
+ ULONG Reserved0;
+ ULONG TransferBufferLength;
+ PVOID TransferBuffer;
+ PMDL TransferBufferMDL;
+ struct _URB *UrbLink;
+ struct _URB_HCD_AREA hca;
+ USHORT Reserved1;
+ UCHAR Index;
+ UCHAR DescriptorType;
+ USHORT LanguageId;
+ USHORT Reserved2;
+};
+
+struct _URB_CONTROL_FEATURE_REQUEST {
+ struct _URB_HEADER Hdr;
+ PVOID Reserved;
+ ULONG Reserved2;
+ ULONG Reserved3;
+ PVOID Reserved4;
+ PMDL Reserved5;
+ struct _URB *UrbLink;
+ struct _URB_HCD_AREA hca;
+ USHORT Reserved0;
+ USHORT FeatureSelector;
+ USHORT Index;
+ USHORT Reserved1;
+};
+
+struct _URB_CONTROL_GET_CONFIGURATION_REQUEST {
+ struct _URB_HEADER Hdr;
+ PVOID Reserved;
+ ULONG Reserved0;
+ ULONG TransferBufferLength;
+ PVOID TransferBuffer;
+ PMDL TransferBufferMDL;
+ struct _URB *UrbLink;
+ struct _URB_HCD_AREA hca;
+ UCHAR Reserved1[8];
+};
+
+struct _URB_CONTROL_GET_INTERFACE_REQUEST {
+ struct _URB_HEADER Hdr;
+ PVOID Reserved;
+ ULONG Reserved0;
+ ULONG TransferBufferLength;
+ PVOID TransferBuffer;
+ PMDL TransferBufferMDL;
+ struct _URB *UrbLink;
+ struct _URB_HCD_AREA hca;
+ UCHAR Reserved1[4];
+ USHORT Interface;
+ USHORT Reserved2;
+};
+
+struct _URB_CONTROL_GET_STATUS_REQUEST {
+ struct _URB_HEADER Hdr;
+ PVOID Reserved;
+ ULONG Reserved0;
+ ULONG TransferBufferLength;
+ PVOID TransferBuffer;
+ PMDL TransferBufferMDL;
+ struct _URB *UrbLink;
+ struct _URB_HCD_AREA hca;
+ UCHAR Reserved1[4];
+ USHORT Index;
+ USHORT Reserved2;
+};
+
+struct _URB_CONTROL_TRANSFER {
+ struct _URB_HEADER Hdr;
+ USBD_PIPE_HANDLE PipeHandle;
+ ULONG TransferFlags;
+ ULONG TransferBufferLength;
+ PVOID TransferBuffer;
+ PMDL TransferBufferMDL;
+ struct _URB *UrbLink;
+ struct _URB_HCD_AREA hca;
+ UCHAR SetupPacket[8];
+};
+
+struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST {
+ struct _URB_HEADER Hdr;
+ PVOID Reserved;
+ ULONG TransferFlags;
+ ULONG TransferBufferLength;
+ PVOID TransferBuffer;
+ PMDL TransferBufferMDL;
+ struct _URB *UrbLink;
+ struct _URB_HCD_AREA hca;
+ UCHAR RequestTypeReservedBits;
+ UCHAR Request;
+ USHORT Value;
+ USHORT Index;
+ USHORT Reserved1;
+};
+
+struct _URB_FRAME_LENGTH_CONTROL {
+ struct _URB_HEADER Hdr;
+};
+
+struct _URB_GET_CURRENT_FRAME_NUMBER {
+ struct _URB_HEADER Hdr;
+ ULONG FrameNumber;
+};
+
+struct _URB_GET_FRAME_LENGTH {
+ struct _URB_HEADER Hdr;
+ ULONG FrameLength;
+ ULONG FrameNumber;
+};
+
+typedef struct _USBD_ISO_PACKET_DESCRIPTOR {
+ ULONG Offset;
+ ULONG Length;
+ USBD_STATUS Status;
+} USBD_ISO_PACKET_DESCRIPTOR, *PUSBD_ISO_PACKET_DESCRIPTOR;
+
+struct _URB_ISOCH_TRANSFER {
+ struct _URB_HEADER Hdr;
+ USBD_PIPE_HANDLE PipeHandle;
+ ULONG TransferFlags;
+ ULONG TransferBufferLength;
+ PVOID TransferBuffer;
+ PMDL TransferBufferMDL;
+ struct _URB *UrbLink;
+ struct _URB_HCD_AREA hca;
+ ULONG StartFrame;
+ ULONG NumberOfPackets;
+ ULONG ErrorCount;
+ USBD_ISO_PACKET_DESCRIPTOR IsoPacket[1];
+};
+
+struct _URB_PIPE_REQUEST {
+ struct _URB_HEADER Hdr;
+ USBD_PIPE_HANDLE PipeHandle;
+ ULONG Reserved;
+};
+
+struct _URB_SET_FRAME_LENGTH {
+ struct _URB_HEADER Hdr;
+ LONG FrameLengthDelta;
+};
+
+typedef struct _USBD_DEVICE_INFORMATION {
+ ULONG OffsetNext;
+ PVOID UsbdDeviceHandle;
+ USB_DEVICE_DESCRIPTOR DeviceDescriptor;
+} USBD_DEVICE_INFORMATION, *PUSBD_DEVICE_INFORMATION;
+
+typedef enum _USBD_PIPE_TYPE {
+ UsbdPipeTypeControl,
+ UsbdPipeTypeIsochronous,
+ UsbdPipeTypeBulk,
+ UsbdPipeTypeInterrupt
+} USBD_PIPE_TYPE;
+
+/* USBD_PIPE_INFORMATION.PipeFlags constants */
+#define USBD_PF_CHANGE_MAX_PACKET 0x00000001
+#define USBD_PF_DOUBLE_BUFFER 0x00000002
+#define USBD_PF_ENABLE_RT_THREAD_ACCESS 0x00000004
+#define USBD_PF_MAP_ADD_TRANSFERS 0x00000008
+
+typedef struct _USBD_PIPE_INFORMATION {
+ USHORT MaximumPacketSize;
+ UCHAR EndpointAddress;
+ UCHAR Interval;
+ USBD_PIPE_TYPE PipeType;
+ USBD_PIPE_HANDLE PipeHandle;
+ ULONG MaximumTransferSize;
+ ULONG PipeFlags;
+} USBD_PIPE_INFORMATION, *PUSBD_PIPE_INFORMATION;
+
+typedef struct _USBD_INTERFACE_INFORMATION {
+ USHORT Length;
+ UCHAR InterfaceNumber;
+ UCHAR AlternateSetting;
+ UCHAR Class;
+ UCHAR SubClass;
+ UCHAR Protocol;
+ UCHAR Reserved;
+ USBD_INTERFACE_HANDLE InterfaceHandle;
+ ULONG NumberOfPipes;
+ USBD_PIPE_INFORMATION Pipes[1];
+} USBD_INTERFACE_INFORMATION, *PUSBD_INTERFACE_INFORMATION;
+
+struct _URB_SELECT_CONFIGURATION {
+ struct _URB_HEADER Hdr;
+ PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor;
+ USBD_CONFIGURATION_HANDLE ConfigurationHandle;
+ USBD_INTERFACE_INFORMATION Interface;
+};
+
+struct _URB_SELECT_INTERFACE {
+ struct _URB_HEADER Hdr;
+ USBD_CONFIGURATION_HANDLE ConfigurationHandle;
+ USBD_INTERFACE_INFORMATION Interface;
+};
+
+typedef struct _USBD_VERSION_INFORMATION {
+ ULONG USBDI_Version;
+ ULONG Supported_USB_Version;
+} USBD_VERSION_INFORMATION, *PUSBD_VERSION_INFORMATION;
+
+typedef struct _URB {
+ union {
+ struct _URB_HEADER UrbHeader;
+ struct _URB_SELECT_INTERFACE UrbSelectInterface;
+ struct _URB_SELECT_CONFIGURATION UrbSelectConfiguration;
+ struct _URB_PIPE_REQUEST UrbPipeRequest;
+ struct _URB_FRAME_LENGTH_CONTROL UrbFrameLengthControl;
+ struct _URB_GET_FRAME_LENGTH UrbGetFrameLength;
+ struct _URB_SET_FRAME_LENGTH UrbSetFrameLength;
+ struct _URB_GET_CURRENT_FRAME_NUMBER UrbGetCurrentFrameNumber;
+ struct _URB_CONTROL_TRANSFER UrbControlTransfer;
+ struct _URB_BULK_OR_INTERRUPT_TRANSFER UrbBulkOrInterruptTransfer;
+ struct _URB_ISOCH_TRANSFER UrbIsochronousTransfer;
+ struct _URB_CONTROL_DESCRIPTOR_REQUEST UrbControlDescriptorRequest;
+ struct _URB_CONTROL_GET_STATUS_REQUEST UrbControlGetStatusRequest;
+ struct _URB_CONTROL_FEATURE_REQUEST UrbControlFeatureRequest;
+ struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST UrbControlVendorClassRequest;
+ struct _URB_CONTROL_GET_INTERFACE_REQUEST UrbControlGetInterfaceRequest;
+ struct _URB_CONTROL_GET_CONFIGURATION_REQUEST UrbControlGetConfigurationRequest;
+ };
+} URB, *PURB;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* defined __USB_H */
+
+#endif /* __USBDI_H */
diff --git a/tcc/include/winapi/ddk/usbioctl.h b/tcc/include/winapi/ddk/usbioctl.h
new file mode 100644
index 0000000..abd30b6
--- /dev/null
+++ b/tcc/include/winapi/ddk/usbioctl.h
@@ -0,0 +1,353 @@
+/*
+ * usbioctl.h
+ *
+ * USB IOCTL interface.
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __USBIOCTL_H
+#define __USBIOCTL_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+#include "usb100.h"
+#include "usbiodef.h"
+
+#define USBD_PORT_ENABLED 1
+#define USBD_PORT_CONNECTED 2
+
+#define IOCTL_INTERNAL_USB_CYCLE_PORT \
+ CTL_CODE(FILE_DEVICE_USB, USB_CYCLE_PORT, METHOD_NEITHER, FILE_ANY_ACCESS)
+
+#define IOCTL_INTERNAL_USB_ENABLE_PORT \
+ CTL_CODE(FILE_DEVICE_USB, USB_ENABLE_PORT, METHOD_NEITHER, FILE_ANY_ACCESS)
+
+#define IOCTL_INTERNAL_USB_GET_BUS_INFO \
+ CTL_CODE(FILE_DEVICE_USB, USB_GET_BUS_INFO, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_INTERNAL_USB_GET_BUSGUID_INFO \
+ CTL_CODE(FILE_DEVICE_USB, USB_GET_BUSGUID_INFO, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_INTERNAL_USB_GET_CONTROLLER_NAME \
+ CTL_CODE(FILE_DEVICE_USB, USB_GET_CONTROLLER_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_INTERNAL_USB_GET_DEVICE_HANDLE \
+ CTL_CODE(FILE_DEVICE_USB, USB_GET_DEVICE_HANDLE, METHOD_NEITHER, FILE_ANY_ACCESS)
+
+#define IOCTL_INTERNAL_USB_GET_HUB_COUNT \
+ CTL_CODE(FILE_DEVICE_USB, USB_GET_HUB_COUNT, METHOD_NEITHER, FILE_ANY_ACCESS)
+
+#define IOCTL_INTERNAL_USB_GET_HUB_NAME \
+ CTL_CODE(FILE_DEVICE_USB, USB_GET_HUB_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_INTERNAL_USB_GET_PARENT_HUB_INFO \
+ CTL_CODE(FILE_DEVICE_USB, USB_GET_PARENT_HUB_INFO, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_INTERNAL_USB_GET_PORT_STATUS \
+ CTL_CODE(FILE_DEVICE_USB, USB_GET_PORT_STATUS, METHOD_NEITHER, FILE_ANY_ACCESS)
+
+#define IOCTL_INTERNAL_USB_RESET_PORT \
+ CTL_CODE(FILE_DEVICE_USB, USB_RESET_PORT, METHOD_NEITHER, FILE_ANY_ACCESS)
+
+#define IOCTL_INTERNAL_USB_GET_ROOTHUB_PDO \
+ CTL_CODE(FILE_DEVICE_USB, USB_GET_ROOTHUB_PDO, METHOD_NEITHER, FILE_ANY_ACCESS)
+
+#define IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION \
+ CTL_CODE(FILE_DEVICE_USB, USB_IDLE_NOTIFICATION, METHOD_NEITHER, FILE_ANY_ACCESS)
+
+#define IOCTL_INTERNAL_USB_SUBMIT_URB \
+ CTL_CODE(FILE_DEVICE_USB, USB_SUBMIT_URB, METHOD_NEITHER, FILE_ANY_ACCESS)
+
+
+#define IOCTL_USB_DIAG_IGNORE_HUBS_ON \
+ CTL_CODE(FILE_DEVICE_USB, USB_DIAG_IGNORE_HUBS_ON, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_USB_DIAG_IGNORE_HUBS_OFF \
+ CTL_CODE(FILE_DEVICE_USB, USB_DIAG_IGNORE_HUBS_OFF, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_USB_DIAGNOSTIC_MODE_OFF \
+ CTL_CODE(FILE_DEVICE_USB, HCD_DIAGNOSTIC_MODE_OFF, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_USB_DIAGNOSTIC_MODE_ON \
+ CTL_CODE(FILE_DEVICE_USB, HCD_DIAGNOSTIC_MODE_ON, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION \
+ CTL_CODE(FILE_DEVICE_USB, USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_USB_GET_HUB_CAPABILITIES \
+ CTL_CODE(FILE_DEVICE_USB, USB_GET_HUB_CAPABILITIES, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_USB_GET_ROOT_HUB_NAME \
+ CTL_CODE(FILE_DEVICE_USB, HCD_GET_ROOT_HUB_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_GET_HCD_DRIVERKEY_NAME \
+ CTL_CODE(FILE_DEVICE_USB, HCD_GET_DRIVERKEY_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_USB_GET_NODE_INFORMATION \
+ CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_INFORMATION, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_USB_GET_NODE_CONNECTION_INFORMATION \
+ CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_INFORMATION, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_USB_GET_NODE_CONNECTION_ATTRIBUTES \
+ CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_ATTRIBUTES, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_USB_GET_NODE_CONNECTION_NAME \
+ CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_USB_GET_NODE_CONNECTION_DRIVERKEY_NAME \
+ CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_DRIVERKEY_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_USB_HCD_DISABLE_PORT \
+ CTL_CODE(FILE_DEVICE_USB, HCD_DISABLE_PORT, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_USB_HCD_ENABLE_PORT \
+ CTL_CODE(FILE_DEVICE_USB, HCD_ENABLE_PORT, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_USB_HCD_GET_STATS_1 \
+ CTL_CODE(FILE_DEVICE_USB, HCD_GET_STATS_1, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_USB_HCD_GET_STATS_2 \
+ CTL_CODE(FILE_DEVICE_USB, HCD_GET_STATS_2, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+
+typedef struct _USB_HUB_CAPABILITIES {
+ ULONG HubIs2xCapable : 1;
+} USB_HUB_CAPABILITIES, *PUSB_HUB_CAPABILITIES;
+
+typedef enum _USB_CONNECTION_STATUS {
+ NoDeviceConnected,
+ DeviceConnected,
+ DeviceFailedEnumeration,
+ DeviceGeneralFailure,
+ DeviceCausedOvercurrent,
+ DeviceNotEnoughPower,
+ DeviceNotEnoughBandwidth,
+ DeviceHubNestedTooDeeply,
+ DeviceInLegacyHub
+} USB_CONNECTION_STATUS, *PUSB_CONNECTION_STATUS;
+
+#include <pshpack1.h>
+
+typedef struct _USB_DESCRIPTOR_REQUEST {
+ ULONG ConnectionIndex;
+ struct {
+ UCHAR bmRequest;
+ UCHAR bRequest;
+ USHORT wValue;
+ USHORT wIndex;
+ USHORT wLength;
+ } SetupPacket;
+ UCHAR Data[0];
+} USB_DESCRIPTOR_REQUEST, *PUSB_DESCRIPTOR_REQUEST;
+
+typedef struct _USB_HCD_DRIVERKEY_NAME {
+ ULONG ActualLength;
+ WCHAR DriverKeyName[1];
+} USB_HCD_DRIVERKEY_NAME, *PUSB_HCD_DRIVERKEY_NAME;
+
+typedef struct _HCD_ISO_STAT_COUNTERS {
+ USHORT LateUrbs;
+ USHORT DoubleBufferedPackets;
+ USHORT TransfersCF_5ms;
+ USHORT TransfersCF_2ms;
+ USHORT TransfersCF_1ms;
+ USHORT MaxInterruptLatency;
+ USHORT BadStartFrame;
+ USHORT StaleUrbs;
+ USHORT IsoPacketNotAccesed;
+ USHORT IsoPacketHWError;
+ USHORT SmallestUrbPacketCount;
+ USHORT LargestUrbPacketCount;
+ USHORT IsoCRC_Error;
+ USHORT IsoOVERRUN_Error;
+ USHORT IsoINTERNAL_Error;
+ USHORT IsoUNKNOWN_Error;
+ ULONG IsoBytesTransferred;
+ USHORT LateMissedCount;
+ USHORT HWIsoMissedCount;
+ ULONG Reserved7[8];
+} HCD_ISO_STAT_COUNTERS, *PHCD_ISO_STAT_COUNTERS;
+
+typedef struct _HCD_STAT_COUNTERS {
+ ULONG BytesTransferred;
+ USHORT IsoMissedCount;
+ USHORT DataOverrunErrorCount;
+ USHORT CrcErrorCount;
+ USHORT ScheduleOverrunCount;
+ USHORT TimeoutErrorCount;
+ USHORT InternalHcErrorCount;
+ USHORT BufferOverrunErrorCount;
+ USHORT SWErrorCount;
+ USHORT StallPidCount;
+ USHORT PortDisableCount;
+} HCD_STAT_COUNTERS, *PHCD_STAT_COUNTERS;
+
+typedef struct _HCD_STAT_INFORMATION_1 {
+ ULONG Reserved1;
+ ULONG Reserved2;
+ ULONG ResetCounters;
+ LARGE_INTEGER TimeRead;
+ HCD_STAT_COUNTERS Counters;
+} HCD_STAT_INFORMATION_1, *PHCD_STAT_INFORMATION_1;
+
+typedef struct _HCD_STAT_INFORMATION_2 {
+ ULONG Reserved1;
+ ULONG Reserved2;
+ ULONG ResetCounters;
+ LARGE_INTEGER TimeRead;
+ LONG LockedMemoryUsed;
+ HCD_STAT_COUNTERS Counters;
+ HCD_ISO_STAT_COUNTERS IsoCounters;
+} HCD_STAT_INFORMATION_2, *PHCD_STAT_INFORMATION_2;
+
+typedef struct _USB_HUB_INFORMATION {
+ USB_HUB_DESCRIPTOR HubDescriptor;
+ BOOLEAN HubIsBusPowered;
+} USB_HUB_INFORMATION, *PUSB_HUB_INFORMATION;
+
+typedef struct _USB_HUB_NAME {
+ ULONG ActualLength;
+ WCHAR HubName[1];
+} USB_HUB_NAME, *PUSB_HUB_NAME;
+
+typedef enum _USB_HUB_NODE {
+ UsbHub,
+ UsbMIParent
+} USB_HUB_NODE;
+
+typedef VOID STDCALL
+(*USB_IDLE_CALLBACK)(
+ PVOID Context);
+
+typedef struct _USB_IDLE_CALLBACK_INFO {
+ USB_IDLE_CALLBACK IdleCallback;
+ PVOID IdleContext;
+} USB_IDLE_CALLBACK_INFO, *PUSB_IDLE_CALLBACK_INFO;
+
+typedef struct _USB_NODE_CONNECTION_ATTRIBUTES {
+ ULONG ConnectionIndex;
+ USB_CONNECTION_STATUS ConnectionStatus;
+ ULONG PortAttributes;
+} USB_NODE_CONNECTION_ATTRIBUTES, *PUSB_NODE_CONNECTION_ATTRIBUTES;
+
+typedef struct _USB_NODE_CONNECTION_DRIVERKEY_NAME {
+ ULONG ConnectionIndex;
+ ULONG ActualLength;
+ WCHAR DriverKeyName[1];
+} USB_NODE_CONNECTION_DRIVERKEY_NAME, *PUSB_NODE_CONNECTION_DRIVERKEY_NAME;
+
+typedef struct _USB_PIPE_INFO {
+ USB_ENDPOINT_DESCRIPTOR EndpointDescriptor;
+ ULONG ScheduleOffset;
+} USB_PIPE_INFO, *PUSB_PIPE_INFO;
+
+typedef struct _USB_NODE_CONNECTION_INFORMATION {
+ ULONG ConnectionIndex;
+ USB_DEVICE_DESCRIPTOR DeviceDescriptor;
+ UCHAR CurrentConfigurationValue;
+ BOOLEAN LowSpeed;
+ BOOLEAN DeviceIsHub;
+ USHORT DeviceAddress;
+ ULONG NumberOfOpenPipes;
+ USB_CONNECTION_STATUS ConnectionStatus;
+ USB_PIPE_INFO PipeList[0];
+} USB_NODE_CONNECTION_INFORMATION, *PUSB_NODE_CONNECTION_INFORMATION;
+
+typedef struct _USB_NODE_CONNECTION_NAME {
+ ULONG ConnectionIndex;
+ ULONG ActualLength;
+ WCHAR NodeName[1];
+} USB_NODE_CONNECTION_NAME, *PUSB_NODE_CONNECTION_NAME;
+
+typedef struct _USB_MI_PARENT_INFORMATION {
+ ULONG NumberOfInterfaces;
+} USB_MI_PARENT_INFORMATION, *PUSB_MI_PARENT_INFORMATION;
+
+typedef struct _USB_NODE_INFORMATION {
+ USB_HUB_NODE NodeType;
+ union {
+ USB_HUB_INFORMATION HubInformation;
+ USB_MI_PARENT_INFORMATION MiParentInformation;
+ } u;
+} USB_NODE_INFORMATION, *PUSB_NODE_INFORMATION;
+
+#define WMI_USB_DRIVER_INFORMATION 0
+#define WMI_USB_DRIVER_NOTIFICATION 1
+#define WMI_USB_POWER_DEVICE_ENABLE 2
+
+typedef enum _USB_NOTIFICATION_TYPE {
+ EnumerationFailure = 0,
+ InsufficentBandwidth,
+ InsufficentPower,
+ OverCurrent,
+ ResetOvercurrent,
+ AcquireBusInfo,
+ AcquireHubName,
+ AcquireControllerName,
+ HubOvercurrent,
+ HubPowerChange,
+ HubNestedTooDeeply,
+ ModernDeviceInLegacyHub
+} USB_NOTIFICATION_TYPE;
+
+typedef struct _USB_ACQUIRE_INFO {
+ USB_NOTIFICATION_TYPE NotificationType;
+ ULONG TotalSize;
+ WCHAR Buffer[1];
+} USB_ACQUIRE_INFO, *PUSB_ACQUIRE_INFO;
+
+typedef struct _USB_NOTIFICATION {
+ USB_NOTIFICATION_TYPE NotificationType;
+} USB_NOTIFICATION, *PUSB_NOTIFICATION;
+
+typedef struct _USB_BUS_NOTIFICATION {
+ USB_NOTIFICATION_TYPE NotificationType;
+ ULONG TotalBandwidth;
+ ULONG ConsumedBandwidth;
+ ULONG ControllerNameLength;
+} USB_BUS_NOTIFICATION, *PUSB_BUS_NOTIFICATION;
+
+typedef struct _USB_CONNECTION_NOTIFICATION {
+ USB_NOTIFICATION_TYPE NotificationType;
+ ULONG ConnectionNumber;
+ ULONG RequestedBandwidth;
+ ULONG EnumerationFailReason;
+ ULONG PowerRequested;
+ ULONG HubNameLength;
+} USB_CONNECTION_NOTIFICATION, *PUSB_CONNECTION_NOTIFICATION;
+
+typedef struct _USB_ROOT_HUB_NAME {
+ ULONG ActualLength;
+ WCHAR RootHubName[1];
+} USB_ROOT_HUB_NAME, *PUSB_ROOT_HUB_NAME;
+
+#include <poppack.h>
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __USBIOCTL_H */
diff --git a/tcc/include/winapi/ddk/usbiodef.h b/tcc/include/winapi/ddk/usbiodef.h
new file mode 100644
index 0000000..5faa344
--- /dev/null
+++ b/tcc/include/winapi/ddk/usbiodef.h
@@ -0,0 +1,106 @@
+/*
+ * usbiodef.h
+ *
+ * USB IOCTL definitions
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __USBIODEF_H
+#define __USBIODEF_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+
+DEFINE_GUID(GUID_DEVINTERFACE_USB_HUB, \
+ 0xf18a0e88, 0xc30c, 0x11d0, 0x88, 0x15, 0x00, 0xa0, 0xc9, 0x06, 0xbe, 0xd8);
+
+DEFINE_GUID(GUID_DEVINTERFACE_USB_DEVICE,
+ 0xA5DCBF10L, 0x6530, 0x11D2, 0x90, 0x1F, 0x00, 0xC0, 0x4F, 0xB9, 0x51, 0xED);
+
+DEFINE_GUID(GUID_DEVINTERFACE_USB_HOST_CONTROLLER,
+ 0x3abf6f2d, 0x71c4, 0x462a, 0x8a, 0x92, 0x1e, 0x68, 0x61, 0xe6, 0xaf, 0x27);
+
+DEFINE_GUID(GUID_USB_WMI_STD_DATA,
+ 0x4E623B20L, 0xCB14, 0x11D1, 0xB3, 0x31, 0x00, 0xA0, 0xC9, 0x59, 0xBB, 0xD2);
+
+DEFINE_GUID(GUID_USB_WMI_STD_NOTIFICATION,
+ 0x4E623B20L, 0xCB14, 0x11D1, 0xB3, 0x31, 0x00, 0xA0, 0xC9, 0x59, 0xBB, 0xD2);
+
+#define GUID_CLASS_USBHUB GUID_DEVINTERFACE_USB_HUB
+#define GUID_CLASS_USB_DEVICE GUID_DEVINTERFACE_USB_DEVICE
+#define GUID_CLASS_USB_HOST_CONTROLLER GUID_DEVINTERFACE_USB_HOST_CONTROLLER
+
+#define USB_SUBMIT_URB 0
+#define USB_RESET_PORT 1
+#define USB_GET_ROOTHUB_PDO 3
+#define USB_GET_PORT_STATUS 4
+#define USB_ENABLE_PORT 5
+#define USB_GET_HUB_COUNT 6
+#define USB_CYCLE_PORT 7
+#define USB_GET_HUB_NAME 8
+#define USB_IDLE_NOTIFICATION 9
+#define USB_GET_BUS_INFO 264
+#define USB_GET_CONTROLLER_NAME 265
+#define USB_GET_BUSGUID_INFO 266
+#define USB_GET_PARENT_HUB_INFO 267
+#define USB_GET_DEVICE_HANDLE 268
+
+#define HCD_GET_STATS_1 255
+#define HCD_DIAGNOSTIC_MODE_ON 256
+#define HCD_DIAGNOSTIC_MODE_OFF 257
+#define HCD_GET_ROOT_HUB_NAME 258
+#define HCD_GET_DRIVERKEY_NAME 265
+#define HCD_GET_STATS_2 266
+#define HCD_DISABLE_PORT 268
+#define HCD_ENABLE_PORT 269
+#define HCD_USER_REQUEST 270
+
+#define USB_GET_NODE_INFORMATION 258
+#define USB_GET_NODE_CONNECTION_INFORMATION 259
+#define USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION 260
+#define USB_GET_NODE_CONNECTION_NAME 261
+#define USB_DIAG_IGNORE_HUBS_ON 262
+#define USB_DIAG_IGNORE_HUBS_OFF 263
+#define USB_GET_NODE_CONNECTION_DRIVERKEY_NAME 264
+#define USB_GET_HUB_CAPABILITIES 271
+#define USB_GET_NODE_CONNECTION_ATTRIBUTES 272
+
+#define FILE_DEVICE_USB FILE_DEVICE_UNKNOWN
+
+#define USB_CTL(id) CTL_CODE(FILE_DEVICE_USB, \
+ (id), \
+ METHOD_BUFFERED, \
+ FILE_ANY_ACCESS)
+
+#define USB_KERNEL_CTL(id) CTL_CODE(FILE_DEVICE_USB, \
+ (id), \
+ METHOD_NEITHER, \
+ FILE_ANY_ACCESS)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __USBIODEF_H */
diff --git a/tcc/include/winapi/ddk/usbscan.h b/tcc/include/winapi/ddk/usbscan.h
new file mode 100644
index 0000000..f22b0b5
--- /dev/null
+++ b/tcc/include/winapi/ddk/usbscan.h
@@ -0,0 +1,158 @@
+/*
+ * usbscan.h
+ *
+ * USB scanner definitions
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __USBSCAN_H
+#define __USBSCAN_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+
+#define FILE_DEVICE_USB_SCAN 0x8000
+#define IOCTL_INDEX 0x0800
+
+#define IOCTL_CANCEL_IO \
+ CTL_CODE(FILE_DEVICE_USB_SCAN, IOCTL_INDEX + 1, METHOD_BUFFERED,FILE_ANY_ACCESS)
+
+#define IOCTL_GET_VERSION \
+ CTL_CODE(FILE_DEVICE_USB_SCAN, IOCTL_INDEX + 0, METHOD_BUFFERED,FILE_ANY_ACCESS)
+
+#define IOCTL_GET_CHANNEL_ALIGN_RQST \
+ CTL_CODE(FILE_DEVICE_USB_SCAN, IOCTL_INDEX + 5, METHOD_BUFFERED,FILE_ANY_ACCESS)
+
+#define IOCTL_GET_DEVICE_DESCRIPTOR \
+ CTL_CODE(FILE_DEVICE_USB_SCAN, IOCTL_INDEX + 6, METHOD_BUFFERED,FILE_ANY_ACCESS)
+
+#define IOCTL_GET_PIPE_CONFIGURATION \
+ CTL_CODE(FILE_DEVICE_USB_SCAN, IOCTL_INDEX + 10,METHOD_BUFFERED,FILE_ANY_ACCESS)
+
+#define IOCTL_GET_USB_DESCRIPTOR \
+ CTL_CODE(FILE_DEVICE_USB_SCAN, IOCTL_INDEX + 8, METHOD_BUFFERED,FILE_ANY_ACCESS)
+
+#define IOCTL_READ_REGISTERS \
+ CTL_CODE(FILE_DEVICE_USB_SCAN, IOCTL_INDEX + 3, METHOD_BUFFERED,FILE_ANY_ACCESS)
+
+#define IOCTL_RESET_PIPE \
+ CTL_CODE(FILE_DEVICE_USB_SCAN, IOCTL_INDEX + 7, METHOD_BUFFERED,FILE_ANY_ACCESS)
+
+#define IOCTL_SEND_USB_REQUEST \
+ CTL_CODE(FILE_DEVICE_USB_SCAN, IOCTL_INDEX + 9, METHOD_BUFFERED,FILE_ANY_ACCESS)
+
+#define IOCTL_SET_TIMEOUT \
+ CTL_CODE(FILE_DEVICE_USB_SCAN, IOCTL_INDEX + 11,METHOD_BUFFERED,FILE_ANY_ACCESS)
+
+#define IOCTL_WAIT_ON_DEVICE_EVENT \
+ CTL_CODE(FILE_DEVICE_USB_SCAN, IOCTL_INDEX + 2, METHOD_BUFFERED,FILE_ANY_ACCESS)
+
+#define IOCTL_WRITE_REGISTERS \
+ CTL_CODE(FILE_DEVICE_USB_SCAN, IOCTL_INDEX + 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+
+#define MAX_NUM_PIPES 8
+
+#define BULKIN_FLAG 0x80
+
+typedef struct _CHANNEL_INFO {
+ /*OUT*/ ULONG EventChannelSize;
+ /*OUT*/ ULONG uReadDataAlignment;
+ /*OUT*/ ULONG uWriteDataAlignment;
+}CHANNEL_INFO, *PCHANNEL_INFO;
+
+typedef struct _DEVICE_DESCRIPTOR {
+ /*OUT*/ USHORT usVendorId;
+ /*OUT*/ USHORT usProductId;
+ /*OUT*/ USHORT usBcdDevice;
+ /*OUT*/ USHORT usLanguageId;
+} DEVICE_DESCRIPTOR, *PDEVICE_DESCRIPTOR;
+
+typedef struct _DRV_VERSION {
+ /*OUT*/ ULONG major;
+ /*OUT*/ ULONG minor;
+ /*OUT*/ ULONG internal;
+} DRV_VERSION, *PDRV_VERSION;
+
+typedef struct _IO_BLOCK {
+ /*IN*/ ULONG uOffset;
+ /*IN*/ ULONG uLength;
+ /*IN OUT*/ PUCHAR pbyData;
+ /*IN*/ ULONG uIndex;
+} IO_BLOCK, *PIO_BLOCK;
+
+typedef struct _IO_BLOCK_EX {
+ /*IN*/ ULONG uOffset;
+ /*IN*/ ULONG uLength;
+ /*IN OUT*/ PUCHAR pbyData;
+ /*IN*/ ULONG uIndex;
+ /*IN*/ UCHAR bRequest;
+ /*IN*/ UCHAR bmRequestType;
+ /*IN*/ UCHAR fTransferDirectionIn;
+} IO_BLOCK_EX, *PIO_BLOCK_EX;
+
+typedef struct _USBSCAN_GET_DESCRIPTOR {
+ /*IN*/ UCHAR DescriptorType;
+ /*IN*/ UCHAR Index;
+ /*IN*/ USHORT LanguageId;
+} USBSCAN_GET_DESCRIPTOR, *PUSBSCAN_GET_DESCRIPTOR;
+
+typedef enum _RAW_PIPE_TYPE {
+ USBSCAN_PIPE_CONTROL,
+ USBSCAN_PIPE_ISOCHRONOUS,
+ USBSCAN_PIPE_BULK,
+ USBSCAN_PIPE_INTERRUPT
+} RAW_PIPE_TYPE;
+
+typedef struct _USBSCAN_PIPE_INFORMATION {
+ USHORT MaximumPacketSize;
+ UCHAR EndpointAddress;
+ UCHAR Interval;
+ RAW_PIPE_TYPE PipeType;
+} USBSCAN_PIPE_INFORMATION, *PUSBSCAN_PIPE_INFORMATION;
+
+typedef struct _USBSCAN_PIPE_CONFIGURATION {
+ /*OUT*/ ULONG NumberOfPipes;
+ /*OUT*/ USBSCAN_PIPE_INFORMATION PipeInfo[MAX_NUM_PIPES];
+} USBSCAN_PIPE_CONFIGURATION, *PUSBSCAN_PIPE_CONFIGURATION;
+
+typedef struct _USBSCAN_TIMEOUT {
+ /*IN*/ ULONG TimeoutRead;
+ /*IN*/ ULONG TimeoutWrite;
+ /*IN*/ ULONG TimeoutEvent;
+} USBSCAN_TIMEOUT, *PUSBSCAN_TIMEOUT;
+
+typedef enum _PIPE_TYPE {
+ EVENT_PIPE,
+ READ_DATA_PIPE,
+ WRITE_DATA_PIPE,
+ ALL_PIPE
+} PIPE_TYPE;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __USBSCAN_H */
diff --git a/tcc/include/winapi/ddk/usbuser.h b/tcc/include/winapi/ddk/usbuser.h
new file mode 100644
index 0000000..4c4b9e9
--- /dev/null
+++ b/tcc/include/winapi/ddk/usbuser.h
@@ -0,0 +1,328 @@
+/*
+ * usbuser.h
+ *
+ * USB user mode IOCTL interface
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __USBUSER_H
+#define __USBUSER_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+#include "usb.h"
+#include "usbiodef.h"
+
+#include <pshpack1.h>
+
+#define USBUSER_VERSION 0x0004
+
+#define IOCTL_USB_USER_REQUEST USB_CTL(HCD_USER_REQUEST)
+
+#ifndef IOCTL_USB_DIAGNOSTIC_MODE_ON
+#define IOCTL_USB_DIAGNOSTIC_MODE_ON USB_CTL(HCD_DIAGNOSTIC_MODE_ON)
+#endif
+#ifndef IOCTL_USB_DIAGNOSTIC_MODE_OFF
+#define IOCTL_USB_DIAGNOSTIC_MODE_OFF USB_CTL(HCD_DIAGNOSTIC_MODE_OFF)
+#endif
+
+#ifndef IOCTL_USB_GET_ROOT_HUB_NAME
+#define IOCTL_USB_GET_ROOT_HUB_NAME USB_CTL(HCD_GET_ROOT_HUB_NAME)
+#endif
+#ifndef IOCTL_GET_HCD_DRIVERKEY_NAME
+#define IOCTL_GET_HCD_DRIVERKEY_NAME USB_CTL(HCD_GET_DRIVERKEY_NAME)
+#endif
+
+typedef enum _USB_USER_ERROR_CODE {
+ UsbUserSuccess = 0,
+ UsbUserNotSupported,
+ UsbUserInvalidRequestCode,
+ UsbUserFeatureDisabled,
+ UsbUserInvalidHeaderParameter,
+ UsbUserInvalidParameter,
+ UsbUserMiniportError,
+ UsbUserBufferTooSmall,
+ UsbUserErrorNotMapped,
+ UsbUserDeviceNotStarted,
+ UsbUserNoDeviceConnected
+} USB_USER_ERROR_CODE;
+
+#define USBUSER_GET_CONTROLLER_INFO_0 0x00000001
+#define USBUSER_GET_CONTROLLER_DRIVER_KEY 0x00000002
+#define USBUSER_PASS_THRU 0x00000003
+#define USBUSER_GET_POWER_STATE_MAP 0x00000004
+#define USBUSER_GET_BANDWIDTH_INFORMATION 0x00000005
+#define USBUSER_GET_BUS_STATISTICS_0 0x00000006
+#define USBUSER_GET_ROOTHUB_SYMBOLIC_NAME 0x00000007
+#define USBUSER_GET_USB_DRIVER_VERSION 0x00000008
+#define USBUSER_GET_USB2_HW_VERSION 0x00000009
+#define USBUSER_OP_SEND_ONE_PACKET 0x10000001
+#define USBUSER_OP_RAW_RESET_PORT 0x20000001
+#define USBUSER_OP_OPEN_RAW_DEVICE 0x20000002
+#define USBUSER_OP_CLOSE_RAW_DEVICE 0x20000003
+#define USBUSER_OP_SEND_RAW_COMMAND 0x20000004
+#define USBUSER_INVALID_REQUEST 0xFFFFFFF0
+#define USBUSER_OP_MASK_DEVONLY_API 0x10000000
+#define USBUSER_OP_MASK_HCTEST_API 0x20000000
+
+#define USB_PACKETFLAG_LOW_SPEED 0x00000001
+#define USB_PACKETFLAG_FULL_SPEED 0x00000002
+#define USB_PACKETFLAG_HIGH_SPEED 0x00000004
+#define USB_PACKETFLAG_ASYNC_IN 0x00000008
+#define USB_PACKETFLAG_ASYNC_OUT 0x00000010
+#define USB_PACKETFLAG_ISO_IN 0x00000020
+#define USB_PACKETFLAG_ISO_OUT 0x00000040
+#define USB_PACKETFLAG_SETUP 0x00000080
+#define USB_PACKETFLAG_TOGGLE0 0x00000100
+#define USB_PACKETFLAG_TOGGLE1 0x00000200
+
+typedef struct _PACKET_PARAMETERS {
+ UCHAR DeviceAddress;
+ UCHAR EndpointAddress;
+ USHORT MaximumPacketSize;
+ ULONG Timeout;
+ ULONG Flags;
+ ULONG DataLength;
+ USHORT HubDeviceAddress;
+ USHORT PortTTNumber;
+ UCHAR ErrorCount;
+ UCHAR Pad[3];
+ USBD_STATUS UsbdStatusCode;
+ UCHAR Data[4];
+} PACKET_PARAMETERS, *PPACKET_PARAMETERS;
+
+typedef struct _RAW_RESET_PORT_PARAMETERS {
+ USHORT PortNumber;
+ USHORT PortStatus;
+} RAW_RESET_PORT_PARAMETERS, *PRAW_RESET_PORT_PARAMETERS;
+
+typedef struct _USB_BANDWIDTH_INFO {
+ ULONG DeviceCount;
+ ULONG TotalBusBandwidth;
+ ULONG Total32secBandwidth;
+ ULONG AllocedBulkAndControl;
+ ULONG AllocedIso;
+ ULONG AllocedInterrupt_1ms;
+ ULONG AllocedInterrupt_2ms;
+ ULONG AllocedInterrupt_4ms;
+ ULONG AllocedInterrupt_8ms;
+ ULONG AllocedInterrupt_16ms;
+ ULONG AllocedInterrupt_32ms;
+} USB_BANDWIDTH_INFO, *PUSB_BANDWIDTH_INFO;
+
+typedef struct _USBUSER_REQUEST_HEADER {
+ ULONG UsbUserRequest;
+ USB_USER_ERROR_CODE UsbUserStatusCode;
+ ULONG RequestBufferLength;
+ ULONG ActualBufferLength;
+} USBUSER_REQUEST_HEADER, *PUSBUSER_REQUEST_HEADER;
+
+typedef struct _USBUSER_BANDWIDTH_INFO_REQUEST {
+ USBUSER_REQUEST_HEADER Header;
+ USB_BANDWIDTH_INFO BandwidthInformation;
+} USBUSER_BANDWIDTH_INFO_REQUEST, *PUSBUSER_BANDWIDTH_INFO_REQUEST;
+
+typedef struct _USB_BUS_STATISTICS_0 {
+ ULONG DeviceCount;
+ LARGE_INTEGER CurrentSystemTime;
+ ULONG CurrentUsbFrame;
+ ULONG BulkBytes;
+ ULONG IsoBytes;
+ ULONG InterruptBytes;
+ ULONG ControlDataBytes;
+ ULONG PciInterruptCount;
+ ULONG HardResetCount;
+ ULONG WorkerSignalCount;
+ ULONG CommonBufferBytes;
+ ULONG WorkerIdleTimeMs;
+ BOOLEAN RootHubEnabled;
+ UCHAR RootHubDevicePowerState;
+ UCHAR Unused;
+ UCHAR NameIndex;
+} USB_BUS_STATISTICS_0, *PUSB_BUS_STATISTICS_0;
+
+typedef struct _USBUSER_BUS_STATISTICS_0_REQUEST {
+ USBUSER_REQUEST_HEADER Header;
+ USB_BUS_STATISTICS_0 BusStatistics0;
+} USBUSER_BUS_STATISTICS_0_REQUEST, *PUSBUSER_BUS_STATISTICS_0_REQUEST;
+
+/* USB_CONTROLLER_INFO_0.HcFeatureFlags constants */
+#define USB_HC_FEATURE_FLAG_PORT_POWER_SWITCHING 0x00000001
+#define USB_HC_FEATURE_FLAG_SEL_SUSPEND 0x00000002
+#define USB_HC_FEATURE_LEGACY_BIOS 0x00000004
+
+typedef struct _USB_CLOSE_RAW_DEVICE_PARAMETERS {
+ ULONG xxx;
+} USB_CLOSE_RAW_DEVICE_PARAMETERS , *PUSB_CLOSE_RAW_DEVICE_PARAMETERS;
+
+typedef struct _USBUSER_CLOSE_RAW_DEVICE {
+ USBUSER_REQUEST_HEADER Header;
+ USB_CLOSE_RAW_DEVICE_PARAMETERS Parameters;
+} USBUSER_CLOSE_RAW_DEVICE, *PUSBUSER_CLOSE_RAW_DEVICE;
+
+typedef struct _USB_CONTROLLER_INFO_0 {
+ ULONG PciVendorId;
+ ULONG PciDeviceId;
+ ULONG PciRevision;
+ ULONG NumberOfRootPorts;
+ USB_CONTROLLER_FLAVOR ControllerFlavor;
+ ULONG HcFeatureFlags;
+} USB_CONTROLLER_INFO_0 , *PUSB_CONTROLLER_INFO_0;
+
+typedef struct _USBUSER_CONTROLLER_INFO_0 {
+ USBUSER_REQUEST_HEADER Header;
+ USB_CONTROLLER_INFO_0 Info0;
+} USBUSER_CONTROLLER_INFO_0, *PUSBUSER_CONTROLLER_INFO_0;
+
+typedef struct _USB_DRIVER_VERSION_PARAMETERS {
+ ULONG DriverTrackingCode;
+ ULONG USBDI_Version;
+ ULONG USBUSER_Version;
+ BOOLEAN CheckedPortDriver;
+ BOOLEAN CheckedMiniportDriver;
+ USHORT USB_Version;
+} USB_DRIVER_VERSION_PARAMETERS , *PUSB_DRIVER_VERSION_PARAMETERS;
+
+typedef struct _USBUSER_GET_DRIVER_VERSION {
+ USBUSER_REQUEST_HEADER Header;
+ USB_DRIVER_VERSION_PARAMETERS Parameters;
+} USBUSER_GET_DRIVER_VERSION, *PUSBUSER_GET_DRIVER_VERSION;
+
+typedef struct _USB_OPEN_RAW_DEVICE_PARAMETERS {
+ USHORT PortStatus;
+ USHORT MaxPacketEp0;
+} USB_OPEN_RAW_DEVICE_PARAMETERS , *PUSB_OPEN_RAW_DEVICE_PARAMETERS;
+
+typedef struct _USBUSER_OPEN_RAW_DEVICE {
+ USBUSER_REQUEST_HEADER Header;
+ USB_OPEN_RAW_DEVICE_PARAMETERS Parameters;
+} USBUSER_OPEN_RAW_DEVICE, *PUSBUSER_OPEN_RAW_DEVICE;
+
+typedef enum _WDMUSB_POWER_STATE {
+ WdmUsbPowerNotMapped = 0,
+ WdmUsbPowerSystemUnspecified = 100,
+ WdmUsbPowerSystemWorking,
+ WdmUsbPowerSystemSleeping1,
+ WdmUsbPowerSystemSleeping2,
+ WdmUsbPowerSystemSleeping3,
+ WdmUsbPowerSystemHibernate,
+ WdmUsbPowerSystemShutdown,
+ WdmUsbPowerDeviceUnspecified = 200,
+ WdmUsbPowerDeviceD0,
+ WdmUsbPowerDeviceD1,
+ WdmUsbPowerDeviceD2,
+ WdmUsbPowerDeviceD3
+} WDMUSB_POWER_STATE;
+
+typedef struct _USB_POWER_INFO {
+ WDMUSB_POWER_STATE SystemState;
+ WDMUSB_POWER_STATE HcDevicePowerState;
+ WDMUSB_POWER_STATE HcDeviceWake;
+ WDMUSB_POWER_STATE HcSystemWake;
+ WDMUSB_POWER_STATE RhDevicePowerState;
+ WDMUSB_POWER_STATE RhDeviceWake;
+ WDMUSB_POWER_STATE RhSystemWake;
+ WDMUSB_POWER_STATE LastSystemSleepState;
+ BOOLEAN CanWakeup;
+ BOOLEAN IsPowered;
+} USB_POWER_INFO, *PUSB_POWER_INFO;
+
+typedef struct _USBUSER_POWER_INFO_REQUEST {
+ USBUSER_REQUEST_HEADER Header;
+ USB_POWER_INFO PowerInformation;
+} USBUSER_POWER_INFO_REQUEST, *PUSBUSER_POWER_INFO_REQUEST;
+
+typedef struct _USB_UNICODE_NAME {
+ ULONG Length;
+ WCHAR String[1];
+} USB_UNICODE_NAME, *PUSB_UNICODE_NAME;
+
+typedef struct _USBUSER_CONTROLLER_UNICODE_NAME {
+ USBUSER_REQUEST_HEADER Header;
+ USB_UNICODE_NAME UnicodeName;
+} USBUSER_CONTROLLER_UNICODE_NAME, *PUSBUSER_CONTROLLER_UNICODE_NAME;
+
+typedef struct _USB_PASS_THRU_PARAMETERS {
+ GUID FunctionGUID;
+ ULONG ParameterLength;
+ UCHAR Parameters[4];
+} USB_PASS_THRU_PARAMETERS, *PUSB_PASS_THRU_PARAMETERS;
+
+typedef struct _USBUSER_PASS_THRU_REQUEST {
+ USBUSER_REQUEST_HEADER Header;
+ USB_PASS_THRU_PARAMETERS PassThru;
+} USBUSER_PASS_THRU_REQUEST, *PUSBUSER_PASS_THRU_REQUEST;
+
+typedef struct _USBUSER_RAW_RESET_ROOT_PORT {
+ USBUSER_REQUEST_HEADER Header;
+ RAW_RESET_PORT_PARAMETERS Parameters;
+} USBUSER_RAW_RESET_ROOT_PORT, *PUSBUSER_RAW_RESET_ROOT_PORT;
+
+typedef struct _USBUSER_SEND_ONE_PACKET {
+ USBUSER_REQUEST_HEADER Header;
+ PACKET_PARAMETERS PacketParameters;
+} USBUSER_SEND_ONE_PACKET, *PUSBUSER_SEND_ONE_PACKET;
+
+typedef struct _USB_SEND_RAW_COMMAND_PARAMETERS {
+ UCHAR Usb_bmRequest;
+ UCHAR Usb_bRequest;
+ USHORT Usb_wVlaue;
+ USHORT Usb_wIndex;
+ USHORT Usb_wLength;
+ USHORT DeviceAddress;
+ USHORT MaximumPacketSize;
+ ULONG Timeout;
+ ULONG DataLength;
+ USBD_STATUS UsbdStatusCode;
+ UCHAR Data[4];
+} USB_SEND_RAW_COMMAND_PARAMETERS, *PUSB_SEND_RAW_COMMAND_PARAMETERS;
+
+typedef struct _USBUSER_SEND_RAW_COMMAND {
+ USBUSER_REQUEST_HEADER Header;
+ USB_SEND_RAW_COMMAND_PARAMETERS Parameters;
+} USBUSER_SEND_RAW_COMMAND, *PUSBUSER_SEND_RAW_COMMAND;
+
+/* USB_USB2HW_VERSION_PARAMETERS.Usb2HwRevision constants */
+#define USB2HW_UNKNOWN 0x00
+#define USB2HW_A0 0xA0
+#define USB2HW_A1 0xA1
+#define USB2HW_B0 0xB0
+
+typedef struct _USB_USB2HW_VERSION_PARAMETERS {
+ UCHAR Usb2HwRevision;
+} USB_USB2HW_VERSION_PARAMETERS, *PUSB_USB2HW_VERSION_PARAMETERS;
+
+typedef struct _USBUSER_GET_USB2HW_VERSION {
+ USBUSER_REQUEST_HEADER Header;
+ USB_USB2HW_VERSION_PARAMETERS Parameters;
+} USBUSER_GET_USB2HW_VERSION, *PUSBUSER_GET_USB2HW_VERSION;
+
+#include <poppack.h>
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __USBUSER_H */
diff --git a/tcc/include/winapi/ddk/video.h b/tcc/include/winapi/ddk/video.h
new file mode 100644
index 0000000..52e8212
--- /dev/null
+++ b/tcc/include/winapi/ddk/video.h
@@ -0,0 +1,1566 @@
+/*
+ * video.h
+ *
+ * Video port and miniport driver interface
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __VIDEO_H
+#define __VIDEO_H
+
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __WINDDI_H
+#error winddi.h cannot be included with video.h
+#else
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+
+#if defined(_VIDEOPORT_)
+ #define VPAPI DECLSPEC_EXPORT
+#else
+ #define VPAPI DECLSPEC_IMPORT
+#endif
+
+#include "videoagp.h"
+#include "ntddvdeo.h"
+
+
+typedef LONG VP_STATUS;
+typedef VP_STATUS *PVP_STATUS;
+typedef struct __DMA_PARAMETERS * PDMA;
+typedef struct _VIDEO_PORT_EVENT *PEVENT;
+typedef struct _VIDEO_PORT_SPIN_LOCK *PSPIN_LOCK;
+typedef struct __VP_DMA_ADAPTER *PVP_DMA_ADAPTER;
+
+#define DISPLAY_ADAPTER_HW_ID 0xFFFFFFFF
+
+#define EVENT_TYPE_MASK 1
+#define SYNCHRONIZATION_EVENT 0
+#define NOTIFICATION_EVENT 1
+
+#define INITIAL_EVENT_STATE_MASK 2
+#define INITIAL_EVENT_NOT_SIGNALED 0
+#define INITIAL_EVENT_SIGNALED 2
+
+typedef enum VIDEO_DEBUG_LEVEL {
+ Error = 0,
+ Warn,
+ Trace,
+ Info
+} VIDEO_DEBUG_LEVEL, *PVIDEO_DEBUG_LEVEL;
+
+typedef enum {
+ VideoPortUnlockAfterDma = 1,
+ VideoPortKeepPagesLocked,
+ VideoPortDmaInitOnly
+} DMA_FLAGS;
+
+typedef enum _HW_DMA_RETURN {
+ DmaAsyncReturn,
+ DmaSyncReturn
+} HW_DMA_RETURN, *PHW_DMA_RETURN;
+
+typedef HW_DMA_RETURN
+(*PVIDEO_HW_START_DMA)(
+ PVOID HwDeviceExtension,
+ PDMA pDma);
+
+
+#ifdef DBG
+
+#define PAGED_CODE() \
+ if (VideoPortGetCurrentIrql() > 1 /* APC_LEVEL */) \
+ { \
+ VideoPortDebugPrint(Error, "Video: Pageable code called at IRQL %d\n", VideoPortGetCurrentIrql() ); \
+ ASSERT(FALSE); \
+ }
+
+#else
+
+#define PAGED_CODE()
+
+#endif
+
+typedef struct _VIDEO_HARDWARE_CONFIGURATION_DATA {
+ INTERFACE_TYPE InterfaceType;
+ ULONG BusNumber;
+ USHORT Version;
+ USHORT Revision;
+ USHORT Irql;
+ USHORT Vector;
+ ULONG ControlBase;
+ ULONG ControlSize;
+ ULONG CursorBase;
+ ULONG CursorSize;
+ ULONG FrameBase;
+ ULONG FrameSize;
+} VIDEO_HARDWARE_CONFIGURATION_DATA, *PVIDEO_HARDWARE_CONFIGURATION_DATA;
+
+#define SIZE_OF_NT4_VIDEO_PORT_CONFIG_INFO 0x42
+#define SIZE_OF_NT4_VIDEO_HW_INITIALIZATION_DATA 0x28
+#define SIZE_OF_W2K_VIDEO_HW_INITIALIZATION_DATA 0x50
+
+typedef enum _VIDEO_DEVICE_DATA_TYPE {
+ VpMachineData = 0,
+ VpCmosData,
+ VpBusData,
+ VpControllerData,
+ VpMonitorData
+} VIDEO_DEVICE_DATA_TYPE, *PVIDEO_DEVICE_DATA_TYPE;
+
+
+
+/* Video miniport driver functions */
+
+typedef struct _VP_SCATTER_GATHER_ELEMENT {
+ PHYSICAL_ADDRESS Address;
+ ULONG Length;
+ ULONG_PTR Reserved;
+} VP_SCATTER_GATHER_ELEMENT, *PVP_SCATTER_GATHER_ELEMENT;
+
+typedef struct _VP_SCATTER_GATHER_LIST {
+ ULONG NumberOfElements;
+ ULONG_PTR Reserved;
+ VP_SCATTER_GATHER_ELEMENT Elements[0];
+} VP_SCATTER_GATHER_LIST, *PVP_SCATTER_GATHER_LIST;
+
+typedef VOID DDKAPI
+(*PEXECUTE_DMA)(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PVP_DMA_ADAPTER VpDmaAdapter,
+ /*IN*/ PVP_SCATTER_GATHER_LIST SGList,
+ /*IN*/ PVOID Context);
+
+typedef PVOID DDKAPI
+(*PVIDEO_PORT_GET_PROC_ADDRESS)(
+/*IN*/ PVOID HwDeviceExtension,
+/*IN*/ PUCHAR FunctionName);
+
+typedef struct _VIDEO_PORT_CONFIG_INFO {
+ ULONG Length;
+ ULONG SystemIoBusNumber;
+ INTERFACE_TYPE AdapterInterfaceType;
+ ULONG BusInterruptLevel;
+ ULONG BusInterruptVector;
+ KINTERRUPT_MODE InterruptMode;
+ ULONG NumEmulatorAccessEntries;
+ PEMULATOR_ACCESS_ENTRY EmulatorAccessEntries;
+ ULONG_PTR EmulatorAccessEntriesContext;
+ PHYSICAL_ADDRESS VdmPhysicalVideoMemoryAddress;
+ ULONG VdmPhysicalVideoMemoryLength;
+ ULONG HardwareStateSize;
+ ULONG DmaChannel;
+ ULONG DmaPort;
+ UCHAR DmaShareable;
+ UCHAR InterruptShareable;
+ BOOLEAN Master;
+ DMA_WIDTH DmaWidth;
+ DMA_SPEED DmaSpeed;
+ BOOLEAN bMapBuffers;
+ BOOLEAN NeedPhysicalAddresses;
+ BOOLEAN DemandMode;
+ ULONG MaximumTransferLength;
+ ULONG NumberOfPhysicalBreaks;
+ BOOLEAN ScatterGather;
+ ULONG MaximumScatterGatherChunkSize;
+ PVIDEO_PORT_GET_PROC_ADDRESS VideoPortGetProcAddress;
+ PWSTR DriverRegistryPath;
+ ULONGLONG SystemMemorySize;
+} VIDEO_PORT_CONFIG_INFO, *PVIDEO_PORT_CONFIG_INFO;
+
+typedef VP_STATUS DDKAPI
+(*PVIDEO_HW_FIND_ADAPTER)(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PVOID HwContext,
+ /*IN*/ PWSTR ArgumentString,
+ /*IN OUT*/ PVIDEO_PORT_CONFIG_INFO ConfigInfo,
+ /*OUT*/ PUCHAR Again);
+
+typedef VP_STATUS DDKAPI
+(*PVIDEO_HW_POWER_GET)(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ ULONG HwId,
+ /*IN OUT*/ PVIDEO_POWER_MANAGEMENT VideoPowerControl);
+
+/* PVIDEO_HW_GET_CHILD_DESCRIPTOR return values */
+#define VIDEO_ENUM_MORE_DEVICES ERROR_CONTINUE
+#define VIDEO_ENUM_NO_MORE_DEVICES ERROR_NO_MORE_DEVICES
+#define VIDEO_ENUM_INVALID_DEVICE ERROR_INVALID_NAME
+
+/* PVIDEO_HW_GET_CHILD_DESCRIPTOR.ChildEnumInfo constants */
+typedef struct _VIDEO_CHILD_ENUM_INFO {
+ ULONG Size;
+ ULONG ChildDescriptorSize;
+ ULONG ChildIndex;
+ ULONG ACPIHwId;
+ PVOID ChildHwDeviceExtension;
+} VIDEO_CHILD_ENUM_INFO, *PVIDEO_CHILD_ENUM_INFO;
+
+/* PVIDEO_HW_GET_CHILD_DESCRIPTOR.VideoChildType constants */
+typedef enum _VIDEO_CHILD_TYPE {
+ Monitor = 1,
+ NonPrimaryChip,
+ VideoChip,
+ Other
+} VIDEO_CHILD_TYPE, *PVIDEO_CHILD_TYPE;
+
+typedef VP_STATUS DDKAPI
+(*PVIDEO_HW_GET_CHILD_DESCRIPTOR)(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PVIDEO_CHILD_ENUM_INFO ChildEnumInfo,
+ /*OUT*/ PVIDEO_CHILD_TYPE VideoChildType,
+ /*OUT*/ PUCHAR pChildDescriptor,
+ /*OUT*/ PULONG UId,
+ /*OUT*/ PULONG pUnused);
+
+typedef BOOLEAN DDKAPI
+(*PVIDEO_HW_INITIALIZE)(
+ /*IN*/ PVOID HwDeviceExtension);
+
+typedef BOOLEAN DDKAPI
+(*PVIDEO_HW_INTERRUPT)(
+ /*IN*/ PVOID HwDeviceExtension);
+
+/* VIDEO_ACCESS_RANGE.RangePassive */
+#define VIDEO_RANGE_PASSIVE_DECODE 1
+#define VIDEO_RANGE_10_BIT_DECODE 2
+
+#ifndef VIDEO_ACCESS_RANGE_DEFINED /* also in miniport.h */
+#define VIDEO_ACCESS_RANGE_DEFINED
+typedef struct _VIDEO_ACCESS_RANGE {
+ PHYSICAL_ADDRESS RangeStart;
+ ULONG RangeLength;
+ UCHAR RangeInIoSpace;
+ UCHAR RangeVisible;
+ UCHAR RangeShareable;
+ UCHAR RangePassive;
+} VIDEO_ACCESS_RANGE, *PVIDEO_ACCESS_RANGE;
+#endif
+
+typedef VOID DDKAPI
+(*PVIDEO_HW_LEGACYRESOURCES)(
+ /*IN*/ ULONG VendorId,
+ /*IN*/ ULONG DeviceId,
+ /*IN OUT*/ PVIDEO_ACCESS_RANGE *LegacyResourceList,
+ /*IN OUT*/ PULONG LegacyResourceCount);
+
+typedef VP_STATUS DDKAPI
+(*PMINIPORT_QUERY_DEVICE_ROUTINE)(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PVOID Context,
+ /*IN*/ VIDEO_DEVICE_DATA_TYPE DeviceDataType,
+ /*IN*/ PVOID Identifier,
+ /*IN*/ ULONG IdentifierLength,
+ /*IN*/ PVOID ConfigurationData,
+ /*IN*/ ULONG ConfigurationDataLength,
+ /*IN OUT*/ PVOID ComponentInformation,
+ /*IN*/ ULONG ComponentInformationLength);
+
+typedef struct _QUERY_INTERFACE {
+ CONST GUID *InterfaceType;
+ USHORT Size;
+ USHORT Version;
+ PINTERFACE Interface;
+ PVOID InterfaceSpecificData;
+} QUERY_INTERFACE, *PQUERY_INTERFACE;
+
+typedef VP_STATUS DDKAPI
+(*PVIDEO_HW_QUERY_INTERFACE)(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN OUT*/ PQUERY_INTERFACE QueryInterface);
+
+typedef VP_STATUS DDKAPI
+(*PMINIPORT_GET_REGISTRY_ROUTINE)(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PVOID Context,
+ /*IN OUT*/ PWSTR ValueName,
+ /*IN OUT*/ PVOID ValueData,
+ /*IN*/ ULONG ValueLength);
+
+typedef BOOLEAN DDKAPI
+(*PVIDEO_HW_RESET_HW)(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ ULONG Columns,
+ /*IN*/ ULONG Rows);
+
+typedef VP_STATUS DDKAPI
+(*PVIDEO_HW_POWER_SET)(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ ULONG HwId,
+ /*IN*/ PVIDEO_POWER_MANAGEMENT VideoPowerControl);
+
+typedef struct _STATUS_BLOCK {
+ _ANONYMOUS_UNION union {
+ VP_STATUS Status;
+ PVOID Pointer;
+ } DUMMYUNIONNAME;
+ ULONG_PTR Information;
+} STATUS_BLOCK, *PSTATUS_BLOCK;
+
+typedef struct _VIDEO_REQUEST_PACKET {
+ ULONG IoControlCode;
+ PSTATUS_BLOCK StatusBlock;
+ PVOID InputBuffer;
+ ULONG InputBufferLength;
+ PVOID OutputBuffer;
+ ULONG OutputBufferLength;
+} VIDEO_REQUEST_PACKET, *PVIDEO_REQUEST_PACKET;
+
+typedef BOOLEAN DDKAPI
+(*PVIDEO_HW_START_IO)(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PVIDEO_REQUEST_PACKET RequestPacket);
+
+typedef BOOLEAN DDKAPI
+(*PMINIPORT_SYNCHRONIZE_ROUTINE)(
+ /*IN*/ PVOID Context);
+
+typedef VOID DDKAPI
+(*PVIDEO_HW_TIMER)(
+ /*IN*/ PVOID HwDeviceExtension);
+
+typedef VOID DDKAPI
+(*PMINIPORT_DPC_ROUTINE)(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PVOID Context);
+
+typedef VP_STATUS DDKAPI
+(*PDRIVER_IO_PORT_UCHAR)(
+ /*IN*/ ULONG_PTR Context,
+ /*IN*/ ULONG Port,
+ /*IN*/ UCHAR AccessMode,
+ /*IN*/ PUCHAR Data);
+
+typedef VP_STATUS DDKAPI
+(*PDRIVER_IO_PORT_UCHAR_STRING)(
+ /*IN*/ ULONG_PTR Context,
+ /*IN*/ ULONG Port,
+ /*IN*/ UCHAR AccessMode,
+ /*IN*/ PUCHAR Data,
+ /*IN*/ ULONG DataLength);
+
+typedef VP_STATUS DDKAPI
+(*PDRIVER_IO_PORT_ULONG)(
+ /*IN*/ ULONG_PTR Context,
+ /*IN*/ ULONG Port,
+ /*IN*/ UCHAR AccessMode,
+ /*IN*/ PULONG Data);
+
+typedef VP_STATUS DDKAPI
+(*PDRIVER_IO_PORT_ULONG_STRING)(
+ /*IN*/ ULONG_PTR Context,
+ /*IN*/ ULONG Port,
+ /*IN*/ UCHAR AccessMode,
+ /*IN*/ PULONG Data,
+ /*IN*/ ULONG DataLength);
+
+typedef VP_STATUS DDKAPI
+(*PDRIVER_IO_PORT_USHORT)(
+ /*IN*/ ULONG_PTR Context,
+ /*IN*/ ULONG Port,
+ /*IN*/ UCHAR AccessMode,
+ /*IN*/ PUSHORT Data);
+
+typedef VP_STATUS DDKAPI
+(*PDRIVER_IO_PORT_USHORT_STRING)(
+ /*IN*/ ULONG_PTR Context,
+ /*IN*/ ULONG Port,
+ /*IN*/ UCHAR AccessMode,
+ /*IN*/ PUSHORT Data,
+ /*IN*/ ULONG DataLength);
+
+
+
+typedef struct _INT10_BIOS_ARGUMENTS {
+ ULONG Eax;
+ ULONG Ebx;
+ ULONG Ecx;
+ ULONG Edx;
+ ULONG Esi;
+ ULONG Edi;
+ ULONG Ebp;
+ USHORT SegDs;
+ USHORT SegEs;
+} INT10_BIOS_ARGUMENTS, *PINT10_BIOS_ARGUMENTS;
+
+typedef struct _VIDEO_CHILD_STATE {
+ ULONG Id;
+ ULONG State;
+} VIDEO_CHILD_STATE, *PVIDEO_CHILD_STATE;
+
+typedef struct _VIDEO_CHILD_STATE_CONFIGURATION {
+ ULONG Count;
+ VIDEO_CHILD_STATE ChildStateArray[ANYSIZE_ARRAY];
+} VIDEO_CHILD_STATE_CONFIGURATION, *PVIDEO_CHILD_STATE_CONFIGURATION;
+
+typedef struct _VIDEO_HW_INITIALIZATION_DATA {
+ ULONG HwInitDataSize;
+ INTERFACE_TYPE AdapterInterfaceType;
+ PVIDEO_HW_FIND_ADAPTER HwFindAdapter;
+ PVIDEO_HW_INITIALIZE HwInitialize;
+ PVIDEO_HW_INTERRUPT HwInterrupt;
+ PVIDEO_HW_START_IO HwStartIO;
+ ULONG HwDeviceExtensionSize;
+ ULONG StartingDeviceNumber;
+ PVIDEO_HW_RESET_HW HwResetHw;
+ PVIDEO_HW_TIMER HwTimer;
+ PVIDEO_HW_START_DMA HwStartDma;
+ PVIDEO_HW_POWER_SET HwSetPowerState;
+ PVIDEO_HW_POWER_GET HwGetPowerState;
+ PVIDEO_HW_GET_CHILD_DESCRIPTOR HwGetVideoChildDescriptor;
+ PVIDEO_HW_QUERY_INTERFACE HwQueryInterface;
+ ULONG HwChildDeviceExtensionSize;
+ PVIDEO_ACCESS_RANGE HwLegacyResourceList;
+ ULONG HwLegacyResourceCount;
+ PVIDEO_HW_LEGACYRESOURCES HwGetLegacyResources;
+ BOOLEAN AllowEarlyEnumeration;
+ ULONG Reserved;
+} VIDEO_HW_INITIALIZATION_DATA, *PVIDEO_HW_INITIALIZATION_DATA;
+
+ /* VIDEO_PORT_AGP_INTERFACE.Version contants */
+#define VIDEO_PORT_AGP_INTERFACE_VERSION_1 1
+
+typedef struct _VIDEO_PORT_AGP_INTERFACE {
+ SHORT Size;
+ SHORT Version;
+ PVOID Context;
+ PINTERFACE_REFERENCE InterfaceReference;
+ PINTERFACE_DEREFERENCE InterfaceDereference;
+ PAGP_RESERVE_PHYSICAL AgpReservePhysical;
+ PAGP_RELEASE_PHYSICAL AgpReleasePhysical;
+ PAGP_COMMIT_PHYSICAL AgpCommitPhysical;
+ PAGP_FREE_PHYSICAL AgpFreePhysical;
+ PAGP_RESERVE_VIRTUAL AgpReserveVirtual;
+ PAGP_RELEASE_VIRTUAL AgpReleaseVirtual;
+ PAGP_COMMIT_VIRTUAL AgpCommitVirtual;
+ PAGP_FREE_VIRTUAL AgpFreeVirtual;
+ ULONGLONG AgpAllocationLimit;
+} VIDEO_PORT_AGP_INTERFACE, *PVIDEO_PORT_AGP_INTERFACE;
+
+ /* VIDEO_PORT_AGP_INTERFACE_2.Version constants */
+#define VIDEO_PORT_AGP_INTERFACE_VERSION_2 2
+
+typedef struct _VIDEO_PORT_AGP_INTERFACE_2 {
+ /*IN*/ USHORT Size;
+ /*IN*/ USHORT Version;
+ /*OUT*/ PVOID Context;
+ /*OUT*/ PINTERFACE_REFERENCE InterfaceReference;
+ /*OUT*/ PINTERFACE_DEREFERENCE InterfaceDereference;
+ /*OUT*/ PAGP_RESERVE_PHYSICAL AgpReservePhysical;
+ /*OUT*/ PAGP_RELEASE_PHYSICAL AgpReleasePhysical;
+ /*OUT*/ PAGP_COMMIT_PHYSICAL AgpCommitPhysical;
+ /*OUT*/ PAGP_FREE_PHYSICAL AgpFreePhysical;
+ /*OUT*/ PAGP_RESERVE_VIRTUAL AgpReserveVirtual;
+ /*OUT*/ PAGP_RELEASE_VIRTUAL AgpReleaseVirtual;
+ /*OUT*/ PAGP_COMMIT_VIRTUAL AgpCommitVirtual;
+ /*OUT*/ PAGP_FREE_VIRTUAL AgpFreeVirtual;
+ /*OUT*/ ULONGLONG AgpAllocationLimit;
+ /*OUT*/ PAGP_SET_RATE AgpSetRate;
+} VIDEO_PORT_AGP_INTERFACE_2, *PVIDEO_PORT_AGP_INTERFACE_2;
+
+#define VIDEO_PORT_I2C_INTERFACE_VERSION_1 1
+
+typedef VOID DDKAPI
+(*PVIDEO_WRITE_CLOCK_LINE)(
+ PVOID HwDeviceExtension,
+ UCHAR Data);
+
+typedef VOID DDKAPI
+(*PVIDEO_WRITE_DATA_LINE)(
+ PVOID HwDeviceExtension,
+ UCHAR Data);
+
+typedef BOOLEAN DDKAPI
+(*PVIDEO_READ_CLOCK_LINE)(
+ PVOID HwDeviceExtension);
+
+typedef BOOLEAN DDKAPI
+(*PVIDEO_READ_DATA_LINE)(
+ PVOID HwDeviceExtension);
+
+typedef struct _I2C_CALLBACKS
+{
+ /*IN*/ PVIDEO_WRITE_CLOCK_LINE WriteClockLine;
+ /*IN*/ PVIDEO_WRITE_DATA_LINE WriteDataLine;
+ /*IN*/ PVIDEO_READ_CLOCK_LINE ReadClockLine;
+ /*IN*/ PVIDEO_READ_DATA_LINE ReadDataLine;
+} I2C_CALLBACKS, *PI2C_CALLBACKS;
+
+typedef BOOLEAN DDKAPI
+(*PI2C_START)(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PI2C_CALLBACKS I2CCallbacks);
+
+typedef BOOLEAN DDKAPI
+(*PI2C_STOP)(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PI2C_CALLBACKS I2CCallbacks);
+
+typedef BOOLEAN DDKAPI
+(*PI2C_WRITE)(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PI2C_CALLBACKS I2CCallbacks,
+ /*IN*/ PUCHAR Buffer,
+ /*IN*/ ULONG Length);
+
+typedef BOOLEAN DDKAPI
+(*PI2C_READ)(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PI2C_CALLBACKS I2CCallbacks,
+ /*OUT*/ PUCHAR Buffer,
+ /*IN*/ ULONG Length);
+
+typedef struct _VIDEO_PORT_I2C_INTERFACE {
+ USHORT Size;
+ USHORT Version;
+ PVOID Context;
+ PINTERFACE_REFERENCE InterfaceReference;
+ PINTERFACE_DEREFERENCE InterfaceDereference;
+ PI2C_START I2CStart;
+ PI2C_STOP I2CStop;
+ PI2C_WRITE I2CWrite;
+ PI2C_READ I2CRead;
+} VIDEO_PORT_I2C_INTERFACE, *PVIDEO_PORT_I2C_INTERFACE;
+
+ /* VIDEO_PORT_INT10_INTERFACE.Version constants */
+#define VIDEO_PORT_INT10_INTERFACE_VERSION_1 1
+
+typedef VP_STATUS DDKAPI
+(*PINT10_ALLOCATE_BUFFER)(
+ /*IN*/ PVOID Context,
+ /*OUT*/ PUSHORT Seg,
+ /*OUT*/ PUSHORT Off,
+ /*IN OUT*/ PULONG Length);
+
+typedef VP_STATUS DDKAPI
+(*PINT10_CALL_BIOS)(
+ /*IN*/ PVOID Context,
+ /*IN OUT*/ PINT10_BIOS_ARGUMENTS BiosArguments);
+
+typedef VP_STATUS DDKAPI
+(*PINT10_FREE_BUFFER)(
+ /*IN*/ PVOID Context,
+ /*IN*/ USHORT Seg,
+ /*IN*/ USHORT Off);
+
+typedef VP_STATUS DDKAPI
+(*PINT10_READ_MEMORY)(
+ /*IN*/ PVOID Context,
+ /*IN*/ USHORT Seg,
+ /*IN*/ USHORT Off,
+ /*OUT*/ PVOID Buffer,
+ /*IN*/ ULONG Length);
+
+typedef VP_STATUS DDKAPI
+(*PINT10_WRITE_MEMORY)(
+ /*IN*/ PVOID Context,
+ /*IN*/ USHORT Seg,
+ /*IN*/ USHORT Off,
+ /*IN*/ PVOID Buffer,
+ /*IN*/ ULONG Length);
+
+typedef struct _VIDEO_PORT_INT10_INTERFACE {
+ /*IN*/ USHORT Size;
+ /*IN*/ USHORT Version;
+ /*OUT*/ PVOID Context;
+ /*OUT*/ PINTERFACE_REFERENCE InterfaceReference;
+ /*OUT*/ PINTERFACE_DEREFERENCE InterfaceDereference;
+ /*OUT*/ PINT10_ALLOCATE_BUFFER Int10AllocateBuffer;
+ /*OUT*/ PINT10_FREE_BUFFER Int10FreeBuffer;
+ /*OUT*/ PINT10_READ_MEMORY Int10ReadMemory;
+ /*OUT*/ PINT10_WRITE_MEMORY Int10WriteMemory;
+ /*OUT*/ PINT10_CALL_BIOS Int10CallBios;
+} VIDEO_PORT_INT10_INTERFACE, *PVIDEO_PORT_INT10_INTERFACE;
+
+ /* Flags for VideoPortGetDeviceBase and VideoPortMapMemory */
+#define VIDEO_MEMORY_SPACE_MEMORY 0x00
+#define VIDEO_MEMORY_SPACE_IO 0x01
+#define VIDEO_MEMORY_SPACE_USER_MODE 0x02
+#define VIDEO_MEMORY_SPACE_DENSE 0x04
+#define VIDEO_MEMORY_SPACE_P6CACHE 0x08
+
+typedef struct _VIDEO_X86_BIOS_ARGUMENTS {
+ ULONG Eax;
+ ULONG Ebx;
+ ULONG Ecx;
+ ULONG Edx;
+ ULONG Esi;
+ ULONG Edi;
+ ULONG Ebp;
+} VIDEO_X86_BIOS_ARGUMENTS, *PVIDEO_X86_BIOS_ARGUMENTS;
+
+typedef struct _VP_DEVICE_DESCRIPTION {
+ BOOLEAN ScatterGather;
+ BOOLEAN Dma32BitAddresses;
+ BOOLEAN Dma64BitAddresses;
+ ULONG MaximumLength;
+} VP_DEVICE_DESCRIPTION, *PVP_DEVICE_DESCRIPTION;
+
+typedef struct _VPOSVERSIONINFO {
+ /*IN*/ ULONG Size;
+ /*OUT*/ ULONG MajorVersion;
+ /*OUT*/ ULONG MinorVersion;
+ /*OUT*/ ULONG BuildNumber;
+ /*OUT*/ USHORT ServicePackMajor;
+ /*OUT*/ USHORT ServicePackMinor;
+} VPOSVERSIONINFO, *PVPOSVERSIONINFO;
+
+
+
+ /* Video port functions for miniports */
+
+VPAPI
+VOID
+DDKAPI
+VideoDebugPrint(
+ /*IN*/ ULONG DebugPrintLevel,
+ /*IN*/ PCHAR DebugMessage,
+ /*IN*/ ...);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortAcquireDeviceLock(
+ /*IN*/ PVOID HwDeviceExtension);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortAcquireSpinLock(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PSPIN_LOCK SpinLock,
+ /*OUT*/ PUCHAR OldIrql);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortAcquireSpinLockAtDpcLevel(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PSPIN_LOCK SpinLock);
+
+VPAPI
+VP_STATUS
+DDKAPI
+VideoPortAllocateBuffer(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ ULONG Size,
+ /*OUT*/ PVOID *Buffer);
+
+VPAPI
+PVOID
+DDKAPI
+VideoPortAllocateCommonBuffer(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PVP_DMA_ADAPTER VpDmaAdapter,
+ /*IN*/ ULONG DesiredLength,
+ /*OUT*/ PPHYSICAL_ADDRESS LogicalAddress,
+ /*IN*/ BOOLEAN CacheEnabled,
+ PVOID Reserved);
+
+VPAPI
+PVOID
+DDKAPI
+VideoPortAllocateContiguousMemory(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ ULONG NumberOfBytes,
+ /*IN*/ PHYSICAL_ADDRESS HighestAcceptableAddress);
+
+ /* VideoPortAllocatePool.PoolType constants */
+typedef enum _VP_POOL_TYPE {
+ VpNonPagedPool = 0,
+ VpPagedPool,
+ VpNonPagedPoolCacheAligned = 4,
+ VpPagedPoolCacheAligned
+} VP_POOL_TYPE, *PVP_POOL_TYPE;
+
+VPAPI
+PVOID
+DDKAPI
+VideoPortAllocatePool(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ VP_POOL_TYPE PoolType,
+ /*IN*/ SIZE_T NumberOfBytes,
+ /*IN*/ ULONG Tag);
+
+VPAPI
+PDMA
+DDKAPI
+VideoPortAssociateEventsWithDmaHandle(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN OUT*/ PVIDEO_REQUEST_PACKET pVrp,
+ /*IN*/ PVOID MappedUserEvent,
+ /*IN*/ PVOID DisplayDriverEvent);
+
+ /* VideoPortCheckForDeviceExistence.Flags constants */
+#define CDE_USE_SUBSYSTEM_IDS 0x00000001
+#define CDE_USE_REVISION 0x00000002
+
+VPAPI
+BOOLEAN
+DDKAPI
+VideoPortCheckForDeviceExistence(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ USHORT VendorId,
+ /*IN*/ USHORT DeviceId,
+ /*IN*/ UCHAR RevisionId,
+ /*IN*/ USHORT SubVendorId,
+ /*IN*/ USHORT SubSystemId,
+ /*IN*/ ULONG Flags);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortClearEvent(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PEVENT pEvent);
+
+VPAPI
+ULONG
+DDKAPI
+VideoPortCompareMemory(
+ /*IN*/ PVOID Source1,
+ /*IN*/ PVOID Source2,
+ /*IN*/ ULONG Length);
+
+VPAPI
+VP_STATUS
+DDKAPI
+VideoPortCompleteDma(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PVP_DMA_ADAPTER VpDmaAdapter,
+ /*IN*/ PVP_SCATTER_GATHER_LIST VpScatterGather,
+ /*IN*/ BOOLEAN WriteToDevice);
+
+VPAPI
+VP_STATUS
+DDKAPI
+VideoPortCreateEvent(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ ULONG EventFlag,
+ /*IN*/ PVOID Unused,
+ /*OUT*/ PEVENT *ppEvent);
+
+VPAPI
+VP_STATUS
+DDKAPI
+VideoPortCreateSecondaryDisplay(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN OUT*/ PVOID *SecondaryDeviceExtension,
+ /*IN*/ ULONG ulFlag);
+
+VPAPI
+VP_STATUS
+DDKAPI
+VideoPortCreateSpinLock(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*OUT*/ PSPIN_LOCK *SpinLock);
+
+typedef struct _DDC_CONTROL {
+ /*IN*/ ULONG Size;
+ /*IN*/ I2C_CALLBACKS I2CCallbacks;
+ /*IN*/ UCHAR EdidSegment;
+} DDC_CONTROL, *PDDC_CONTROL;
+
+VPAPI
+BOOLEAN
+DDKAPI
+VideoPortDDCMonitorHelper(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PVOID DDCControl,
+ /*IN OUT*/ PUCHAR EdidBuffer,
+ /*IN*/ ULONG EdidBufferSize);
+
+VPAPI
+VOID
+DDKCDECLAPI
+VideoPortDebugPrint(
+ /*IN*/ VIDEO_DEBUG_LEVEL DebugPrintLevel,
+ /*IN*/ PCHAR DebugMessage,
+ /*IN*/ ...);
+
+VPAPI
+VP_STATUS
+DDKAPI
+VideoPortDeleteEvent(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PEVENT pEvent);
+
+VPAPI
+VP_STATUS
+DDKAPI
+VideoPortDeleteSpinLock(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PSPIN_LOCK SpinLock);
+
+VPAPI
+VP_STATUS
+DDKAPI
+VideoPortDisableInterrupt(
+ /*IN*/ PVOID HwDeviceExtension);
+
+VPAPI
+PDMA
+DDKAPI
+VideoPortDoDma(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PDMA pDma,
+ /*IN*/ DMA_FLAGS DmaFlags);
+
+VPAPI
+VP_STATUS
+DDKAPI
+VideoPortEnableInterrupt(
+ /*IN*/ PVOID HwDeviceExtension);
+
+VPAPI
+VP_STATUS
+DDKAPI
+VideoPortEnumerateChildren(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PVOID Reserved);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortFreeCommonBuffer(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ ULONG Length,
+ /*IN*/ PVOID VirtualAddress,
+ /*IN*/ PHYSICAL_ADDRESS LogicalAddress,
+ /*IN*/ BOOLEAN CacheEnabled);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortFreeDeviceBase(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PVOID MappedAddress);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortFreePool(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PVOID Ptr);
+
+VPAPI
+VP_STATUS
+DDKAPI
+VideoPortGetAccessRanges(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ ULONG NumRequestedResources,
+ /*IN*/ PIO_RESOURCE_DESCRIPTOR RequestedResources /*OPTIONAL*/,
+ /*IN*/ ULONG NumAccessRanges,
+ /*OUT*/ PVIDEO_ACCESS_RANGE AccessRanges,
+ /*IN*/ PVOID VendorId,
+ /*IN*/ PVOID DeviceId,
+ /*OUT*/ PULONG Slot);
+
+VPAPI
+PVOID
+DDKAPI
+VideoPortGetAssociatedDeviceExtension(
+ /*IN*/ PVOID DeviceObject);
+
+VPAPI
+ULONG
+DDKAPI
+VideoPortGetAssociatedDeviceID(
+ /*IN*/ PVOID DeviceObject);
+
+VPAPI
+ULONG
+DDKAPI
+VideoPortGetBusData(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ BUS_DATA_TYPE BusDataType,
+ /*IN*/ ULONG SlotNumber,
+ /*IN OUT*/ PVOID Buffer,
+ /*IN*/ ULONG Offset,
+ /*IN*/ ULONG Length);
+
+VPAPI
+ULONG
+DDKAPI
+VideoPortGetBytesUsed(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PDMA pDma);
+
+VPAPI
+PVOID
+DDKAPI
+VideoPortGetCommonBuffer(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ ULONG DesiredLength,
+ /*IN*/ ULONG Alignment,
+ /*OUT*/ PPHYSICAL_ADDRESS LogicalAddress,
+ /*OUT*/ PULONG pActualLength,
+ /*IN*/ BOOLEAN CacheEnabled);
+
+VPAPI
+UCHAR
+DDKAPI
+VideoPortGetCurrentIrql(
+ VOID);
+
+VPAPI
+PVOID
+DDKAPI
+VideoPortGetDeviceBase(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PHYSICAL_ADDRESS IoAddress,
+ /*IN*/ ULONG NumberOfUchars,
+ /*IN*/ UCHAR InIoSpace);
+
+VPAPI
+VP_STATUS
+DDKAPI
+VideoPortGetDeviceData(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ VIDEO_DEVICE_DATA_TYPE DeviceDataType,
+ /*IN*/ PMINIPORT_QUERY_DEVICE_ROUTINE CallbackRoutine,
+ /*IN*/ PVOID Context);
+
+VPAPI
+PVP_DMA_ADAPTER
+DDKAPI
+VideoPortGetDmaAdapter(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PVP_DEVICE_DESCRIPTION VpDeviceDescription);
+
+VPAPI
+PVOID
+DDKAPI
+VideoPortGetDmaContext(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PDMA pDma);
+
+VPAPI
+PVOID
+DDKAPI
+VideoPortGetMdl(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PDMA pDma);
+
+VPAPI
+VP_STATUS
+DDKAPI
+VideoPortGetRegistryParameters(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PWSTR ParameterName,
+ /*IN*/ UCHAR IsParameterFileName,
+ /*IN*/ PMINIPORT_GET_REGISTRY_ROUTINE CallbackRoutine,
+ /*IN*/ PVOID Context);
+
+VPAPI
+PVOID
+DDKAPI
+VideoPortGetRomImage(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PVOID Unused1,
+ /*IN*/ ULONG Unused2,
+ /*IN*/ ULONG Length);
+
+VPAPI
+VP_STATUS
+DDKAPI
+VideoPortGetVersion(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN OUT*/ PVPOSVERSIONINFO pVpOsVersionInfo);
+
+VPAPI
+VP_STATUS
+DDKAPI
+VideoPortGetVgaStatus(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*OUT*/ PULONG VgaStatus);
+
+VPAPI
+ULONG
+DDKAPI
+VideoPortInitialize(
+ /*IN*/ PVOID Argument1,
+ /*IN*/ PVOID Argument2,
+ /*IN*/ PVIDEO_HW_INITIALIZATION_DATA HwInitializationData,
+ /*IN*/ PVOID HwContext);
+
+VPAPI
+VP_STATUS
+DDKAPI
+VideoPortInt10(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PVIDEO_X86_BIOS_ARGUMENTS BiosArguments);
+
+VPAPI
+LONG
+DDKFASTAPI
+VideoPortInterlockedDecrement(
+ /*IN*/ PLONG Addend);
+
+VPAPI
+LONG
+DDKFASTAPI
+VideoPortInterlockedExchange(
+ /*IN OUT*/ PLONG Target,
+ /*IN*/ LONG Value);
+
+VPAPI
+LONG
+DDKFASTAPI
+VideoPortInterlockedIncrement(
+ /*IN*/ PLONG Addend);
+
+typedef enum _VP_LOCK_OPERATION {
+ VpReadAccess = 0,
+ VpWriteAccess,
+ VpModifyAccess
+} VP_LOCK_OPERATION;
+
+VPAPI
+PVOID
+DDKAPI
+VideoPortLockBuffer(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PVOID BaseAddress,
+ /*IN*/ ULONG Length,
+ /*IN*/ VP_LOCK_OPERATION Operation);
+
+VPAPI
+BOOLEAN
+DDKAPI
+VideoPortLockPages(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN OUT*/ PVIDEO_REQUEST_PACKET pVrp,
+ /*IN OUT*/ PEVENT pUEvent,
+ /*IN*/ PEVENT pDisplayEvent,
+ /*IN*/ DMA_FLAGS DmaFlags);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortLogError(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PVIDEO_REQUEST_PACKET Vrp /*OPTIONAL*/,
+ /*IN*/ VP_STATUS ErrorCode,
+ /*IN*/ ULONG UniqueId);
+
+VPAPI
+VP_STATUS
+DDKAPI
+VideoPortMapBankedMemory(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PHYSICAL_ADDRESS PhysicalAddress,
+ /*IN OUT*/ PULONG Length,
+ PULONG InIoSpace,
+ PVOID *VirtualAddress,
+ ULONG BankLength,
+ UCHAR ReadWriteBank,
+ PBANKED_SECTION_ROUTINE BankRoutine,
+ PVOID Context);
+
+VPAPI
+PDMA
+DDKAPI
+VideoPortMapDmaMemory(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PVIDEO_REQUEST_PACKET pVrp,
+ /*IN*/ PHYSICAL_ADDRESS BoardAddress,
+ /*IN*/ PULONG Length,
+ /*IN*/ PULONG InIoSpace,
+ /*IN*/ PVOID MappedUserEvent,
+ /*IN*/ PVOID DisplayDriverEvent,
+ /*IN OUT*/ PVOID *VirtualAddress);
+
+VPAPI
+VP_STATUS
+DDKAPI
+VideoPortMapMemory(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PHYSICAL_ADDRESS PhysicalAddress,
+ /*IN OUT*/ PULONG Length,
+ /*IN*/ PULONG InIoSpace,
+ /*IN OUT*/ PVOID *VirtualAddress);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortMoveMemory(
+ /*IN*/ PVOID Destination,
+ /*IN*/ PVOID Source,
+ /*IN*/ ULONG Length);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortPutDmaAdapter(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PVP_DMA_ADAPTER VpDmaAdapter);
+
+VPAPI
+LONGLONG
+DDKAPI
+VideoPortQueryPerformanceCounter(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*OUT*/ PLONGLONG PerformanceFrequency /*OPTIONAL*/);
+
+ /* VideoPortQueryServices.ServicesType constants */
+typedef enum _VIDEO_PORT_SERVICES {
+ VideoPortServicesAGP = 1,
+ VideoPortServicesI2C,
+ VideoPortServicesHeadless,
+ VideoPortServicesInt10
+} VIDEO_PORT_SERVICES;
+
+VPAPI
+VP_STATUS
+DDKAPI
+VideoPortQueryServices(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ VIDEO_PORT_SERVICES ServicesType,
+ /*IN OUT*/ PINTERFACE Interface);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortQuerySystemTime(
+ /*OUT*/ PLARGE_INTEGER CurrentTime);
+
+VPAPI
+BOOLEAN
+DDKAPI
+VideoPortQueueDpc(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PMINIPORT_DPC_ROUTINE CallbackRoutine,
+ /*IN*/ PVOID Context);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortReadPortBufferUchar(
+ /*IN*/ PUCHAR Port,
+ /*OUT*/ PUCHAR Buffer,
+ /*IN*/ ULONG Count);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortReadPortBufferUlong(
+ /*IN*/ PULONG Port,
+ /*OUT*/ PULONG Buffer,
+ /*IN*/ ULONG Count);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortReadPortBufferUshort(
+ /*IN*/ PUSHORT Port,
+ /*OUT*/ PUSHORT Buffer,
+ /*IN*/ ULONG Count);
+
+VPAPI
+UCHAR
+DDKAPI
+VideoPortReadPortUchar(
+ /*IN*/ PUCHAR Port);
+
+VPAPI
+ULONG
+DDKAPI
+VideoPortReadPortUlong(
+ /*IN*/ PULONG Port);
+
+VPAPI
+USHORT
+DDKAPI
+VideoPortReadPortUshort(
+ /*IN*/ PUSHORT Port);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortReadRegisterBufferUchar(
+ /*IN*/ PUCHAR Register,
+ /*OUT*/ PUCHAR Buffer,
+ /*IN*/ ULONG Count);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortReadRegisterBufferUlong(
+ /*IN*/ PULONG Register,
+ /*OUT*/ PULONG Buffer,
+ /*IN*/ ULONG Count);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortReadRegisterBufferUshort(
+ /*IN*/ PUSHORT Register,
+ /*OUT*/ PUSHORT Buffer,
+ /*IN*/ ULONG Count);
+
+VPAPI
+UCHAR
+DDKAPI
+VideoPortReadRegisterUchar(
+ /*IN*/ PUCHAR Register);
+
+VPAPI
+ULONG
+DDKAPI
+VideoPortReadRegisterUlong(
+ /*IN*/ PULONG Register);
+
+VPAPI
+USHORT
+DDKAPI
+VideoPortReadRegisterUshort(
+ /*IN*/ PUSHORT Register);
+
+VPAPI
+LONG
+DDKAPI
+VideoPortReadStateEvent(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PEVENT pEvent);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortReleaseBuffer(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PVOID Buffer);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortReleaseCommonBuffer(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PVP_DMA_ADAPTER VpDmaAdapter,
+ /*IN*/ ULONG Length,
+ /*IN*/ PHYSICAL_ADDRESS LogicalAddress,
+ /*IN*/ PVOID VirtualAddress,
+ /*IN*/ BOOLEAN CacheEnabled);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortReleaseDeviceLock(
+ /*IN*/ PVOID HwDeviceExtension);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortReleaseSpinLock(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PSPIN_LOCK SpinLock,
+ /*IN*/ UCHAR NewIrql);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortReleaseSpinLockFromDpcLevel(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PSPIN_LOCK SpinLock);
+
+VPAPI
+BOOLEAN
+DDKAPI
+VideoPortScanRom(
+ PVOID HwDeviceExtension,
+ PUCHAR RomBase,
+ ULONG RomLength,
+ PUCHAR String);
+
+VPAPI
+ULONG
+DDKAPI
+VideoPortSetBusData(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ BUS_DATA_TYPE BusDataType,
+ /*IN*/ ULONG SlotNumber,
+ /*IN*/ PVOID Buffer,
+ /*IN*/ ULONG Offset,
+ /*IN*/ ULONG Length);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortSetBytesUsed(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN OUT*/ PDMA pDma,
+ /*IN*/ ULONG BytesUsed);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortSetDmaContext(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*OUT*/ PDMA pDma,
+ /*IN*/ PVOID InstanceContext);
+
+VPAPI
+LONG
+DDKAPI
+VideoPortSetEvent(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PEVENT pEvent);
+
+VPAPI
+VP_STATUS
+DDKAPI
+VideoPortSetRegistryParameters(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PWSTR ValueName,
+ /*IN*/ PVOID ValueData,
+ /*IN*/ ULONG ValueLength);
+
+VPAPI
+VP_STATUS
+DDKAPI
+VideoPortSetTrappedEmulatorPorts(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ ULONG NumAccessRanges,
+ /*IN*/ PVIDEO_ACCESS_RANGE AccessRange);
+
+VPAPI
+BOOLEAN
+DDKAPI
+VideoPortSignalDmaComplete(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PVOID pDmaHandle);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortStallExecution(
+ /*IN*/ ULONG Microseconds);
+
+VPAPI
+VP_STATUS
+DDKAPI
+VideoPortStartDma(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PVP_DMA_ADAPTER VpDmaAdapter,
+ /*IN*/ PVOID Mdl,
+ /*IN*/ ULONG Offset,
+ /*IN OUT*/ PULONG pLength,
+ /*IN*/ PEXECUTE_DMA ExecuteDmaRoutine,
+ /*IN*/ PVOID Context,
+ /*IN*/ BOOLEAN WriteToDevice);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortStartTimer(
+ /*IN*/ PVOID HwDeviceExtension);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortStopTimer(
+ /*IN*/ PVOID HwDeviceExtension);
+
+ /* VideoPortSynchronizeExecution.Priority constants */
+typedef enum VIDEO_SYNCHRONIZE_PRIORITY {
+ VpLowPriority = 0,
+ VpMediumPriority,
+ VpHighPriority
+} VIDEO_SYNCHRONIZE_PRIORITY, *PVIDEO_SYNCHRONIZE_PRIORITY;
+
+VPAPI
+BOOLEAN
+DDKAPI
+VideoPortSynchronizeExecution(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ VIDEO_SYNCHRONIZE_PRIORITY Priority,
+ /*IN*/ PMINIPORT_SYNCHRONIZE_ROUTINE SynchronizeRoutine,
+ /*IN*/ PVOID Context);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortUnLockBuffer(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PVOID Mdl);
+
+VPAPI
+BOOLEAN
+DDKAPI
+VideoPortUnlockPages(
+ /*IN*/ PVOID hwDeviceExtension,
+ /*IN OUT*/ PDMA pDma);
+
+VPAPI
+BOOLEAN
+DDKAPI
+VideoPortUnmapDmaMemory(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PVOID VirtualAddress,
+ /*IN*/ HANDLE ProcessHandle,
+ /*IN*/ PDMA BoardMemoryHandle);
+
+VPAPI
+VP_STATUS
+DDKAPI
+VideoPortUnmapMemory(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN OUT*/ PVOID VirtualAddress,
+ /*IN*/ HANDLE ProcessHandle);
+
+VPAPI
+VP_STATUS
+DDKAPI
+VideoPortVerifyAccessRanges(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ ULONG NumAccessRanges,
+ /*IN*/ PVIDEO_ACCESS_RANGE AccessRanges);
+
+VPAPI
+VP_STATUS
+DDKAPI
+VideoPortWaitForSingleObject(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PVOID Object,
+ /*IN*/ PLARGE_INTEGER Timeout /*OPTIONAL*/);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortWritePortBufferUchar(
+ /*IN*/ PUCHAR Port,
+ /*IN*/ PUCHAR Buffer,
+ /*IN*/ ULONG Count);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortWritePortBufferUlong(
+ /*IN*/ PULONG Port,
+ /*IN*/ PULONG Buffer,
+ /*IN*/ ULONG Count);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortWritePortBufferUshort(
+ /*IN*/ PUSHORT Port,
+ /*IN*/ PUSHORT Buffer,
+ /*IN*/ ULONG Count);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortWritePortUchar(
+ /*IN*/ PUCHAR Port,
+ /*IN*/ UCHAR Value);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortWritePortUlong(
+ /*IN*/ PULONG Port,
+ /*IN*/ ULONG Value);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortWritePortUshort(
+ /*IN*/ PUSHORT Port,
+ /*IN*/ USHORT Value);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortWriteRegisterBufferUchar(
+ /*IN*/ PUCHAR Register,
+ /*IN*/ PUCHAR Buffer,
+ /*IN*/ ULONG Count);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortWriteRegisterBufferUlong(
+ /*IN*/ PULONG Register,
+ /*IN*/ PULONG Buffer,
+ /*IN*/ ULONG Count);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortWriteRegisterBufferUshort(
+ /*IN*/ PUSHORT Register,
+ /*IN*/ PUSHORT Buffer,
+ /*IN*/ ULONG Count);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortWriteRegisterUchar(
+ /*IN*/ PUCHAR Register,
+ /*IN*/ UCHAR Value);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortWriteRegisterUlong(
+ /*IN*/ PULONG Register,
+ /*IN*/ ULONG Value);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortWriteRegisterUshort(
+ /*IN*/ PUSHORT Register,
+ /*IN*/ USHORT Value);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortZeroDeviceMemory(
+ /*IN*/ PVOID Destination,
+ /*IN*/ ULONG Length);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortZeroMemory(
+ /*IN*/ PVOID Destination,
+ /*2IN*/ ULONG Length);
+
+#ifdef DBG
+#define VideoDebugPrint(x) VideoPortDebugPrint x
+#else
+#define VideoDebugPrint(x)
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* defined __WINDDI_H */
+
+#endif /* __VIDEO_H */
diff --git a/tcc/include/winapi/ddk/videoagp.h b/tcc/include/winapi/ddk/videoagp.h
new file mode 100644
index 0000000..299def2
--- /dev/null
+++ b/tcc/include/winapi/ddk/videoagp.h
@@ -0,0 +1,129 @@
+/*
+ * videoagp.h
+ *
+ * Video miniport AGP interface
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __VIDEOAGP_H
+#define __VIDEOAGP_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+#include "video.h"
+
+
+#define VIDEO_AGP_RATE_1X 0x00000001
+#define VIDEO_AGP_RATE_2X 0x00000002
+#define VIDEO_AGP_RATE_4X 0x00000004
+#define VIDEO_AGP_RATE_8X 0x00000008
+
+typedef enum _VIDEO_PORT_CACHE_TYPE {
+ VpNonCached = 0,
+ VpWriteCombined,
+ VpCached
+} VIDEO_PORT_CACHE_TYPE;
+
+typedef BOOLEAN DDKAPI
+(*PAGP_COMMIT_PHYSICAL)(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PVOID PhysicalReserveContext,
+ /*IN*/ ULONG Pages,
+ /*IN*/ ULONG Offset);
+
+typedef PVOID DDKAPI
+(*PAGP_COMMIT_VIRTUAL)(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PVOID VirtualReserveContext,
+ /*IN*/ ULONG Pages,
+ /*IN*/ ULONG Offset);
+
+typedef VOID DDKAPI
+(*PAGP_FREE_PHYSICAL)(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PVOID PhysicalReserveContext,
+ /*IN*/ ULONG Pages,
+ /*IN*/ ULONG Offset);
+
+typedef VOID DDKAPI
+(*PAGP_FREE_VIRTUAL)(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PVOID VirtualReserveContext,
+ /*IN*/ ULONG Pages,
+ /*IN*/ ULONG Offset);
+
+typedef VOID DDKAPI
+(*PAGP_RELEASE_PHYSICAL)(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PVOID PhysicalReserveContext);
+
+typedef VOID DDKAPI
+(*PAGP_RELEASE_VIRTUAL)(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PVOID VirtualReserveContext);
+
+typedef PHYSICAL_ADDRESS DDKAPI
+(*PAGP_RESERVE_PHYSICAL)(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ ULONG Pages,
+ /*IN*/ VIDEO_PORT_CACHE_TYPE Caching,
+ /*OUT*/ PVOID *PhysicalReserveContext);
+
+typedef PVOID DDKAPI
+(*PAGP_RESERVE_VIRTUAL)(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ HANDLE ProcessHandle,
+ /*IN*/ PVOID PhysicalReserveContext,
+ /*OUT*/ PVOID *VirtualReserveContext);
+
+typedef BOOLEAN DDKAPI
+(*PAGP_SET_RATE)(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ ULONG AgpRate);
+
+typedef struct _VIDEO_PORT_AGP_SERVICES {
+ PAGP_RESERVE_PHYSICAL AgpReservePhysical;
+ PAGP_RELEASE_PHYSICAL AgpReleasePhysical;
+ PAGP_COMMIT_PHYSICAL AgpCommitPhysical;
+ PAGP_FREE_PHYSICAL AgpFreePhysical;
+ PAGP_RESERVE_VIRTUAL AgpReserveVirtual;
+ PAGP_RELEASE_VIRTUAL AgpReleaseVirtual;
+ PAGP_COMMIT_VIRTUAL AgpCommitVirtual;
+ PAGP_FREE_VIRTUAL AgpFreeVirtual;
+ ULONGLONG AllocationLimit;
+} VIDEO_PORT_AGP_SERVICES, *PVIDEO_PORT_AGP_SERVICES;
+
+VPAPI
+BOOLEAN
+DDKAPI
+VideoPortGetAgpServices(
+ /*IN*/ PVOID HwDeviceExtension,
+ /*IN*/ PVIDEO_PORT_AGP_SERVICES AgpServices);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __VIDEOAGP_H */
diff --git a/tcc/include/winapi/ddk/win2k.h b/tcc/include/winapi/ddk/win2k.h
new file mode 100644
index 0000000..84eadd0
--- /dev/null
+++ b/tcc/include/winapi/ddk/win2k.h
@@ -0,0 +1,106 @@
+/*
+ * win2k.h
+ *
+ * Definitions only used in Windows 2000 and earlier versions
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __WIN2K_H
+#define __WIN2K_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+
+#pragma pack(push,4)
+
+typedef enum _BUS_DATA_TYPE {
+ ConfigurationSpaceUndefined = -1,
+ Cmos,
+ EisaConfiguration,
+ Pos,
+ CbusConfiguration,
+ PCIConfiguration,
+ VMEConfiguration,
+ NuBusConfiguration,
+ PCMCIAConfiguration,
+ MPIConfiguration,
+ MPSAConfiguration,
+ PNPISAConfiguration,
+ SgiInternalConfiguration,
+ MaximumBusDataType
+} BUS_DATA_TYPE, *PBUS_DATA_TYPE;
+
+NTOSAPI
+VOID
+DDKAPI
+ExReleaseResourceForThreadLite(
+ /*IN*/ PERESOURCE Resource,
+ /*IN*/ ERESOURCE_THREAD ResourceThreadId);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoReadPartitionTable(
+ /*IN*/ PDEVICE_OBJECT DeviceObject,
+ /*IN*/ ULONG SectorSize,
+ /*IN*/ BOOLEAN ReturnRecognizedPartitions,
+ /*OUT*/ struct _DRIVE_LAYOUT_INFORMATION **PartitionBuffer);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoSetPartitionInformation(
+ /*IN*/ PDEVICE_OBJECT DeviceObject,
+ /*IN*/ ULONG SectorSize,
+ /*IN*/ ULONG PartitionNumber,
+ /*IN*/ ULONG PartitionType);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoWritePartitionTable(
+ /*IN*/ PDEVICE_OBJECT DeviceObject,
+ /*IN*/ ULONG SectorSize,
+ /*IN*/ ULONG SectorsPerTrack,
+ /*IN*/ ULONG NumberOfHeads,
+ /*IN*/ struct _DRIVE_LAYOUT_INFORMATION *PartitionBuffer);
+
+/*
+ * PVOID MmGetSystemAddressForMdl(
+ * IN PMDL Mdl);
+ */
+#define MmGetSystemAddressForMdl(Mdl) \
+ (((Mdl)->MdlFlags & (MDL_MAPPED_TO_SYSTEM_VA | \
+ MDL_SOURCE_IS_NONPAGED_POOL)) ? \
+ ((Mdl)->MappedSystemVa) : \
+ (MmMapLockedPages((Mdl), KernelMode)))
+
+#pragma pack(pop)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WIN2K_H */
diff --git a/tcc/include/winapi/ddk/winddi.h b/tcc/include/winapi/ddk/winddi.h
new file mode 100644
index 0000000..fefb15d
--- /dev/null
+++ b/tcc/include/winapi/ddk/winddi.h
@@ -0,0 +1,4258 @@
+/*
+ * winddi.h
+ *
+ * GDI device driver interface
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __WINDDI_H
+#define __WINDDI_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __VIDEO_H
+#error video.h cannot be included with winddi.h
+#else
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+#include <wingdi.h>
+
+#ifndef __DD_INCLUDED__
+/* FIXME: Some DirectDraw structures not added yet */
+typedef ULONG_PTR FLATPTR;
+typedef struct _DD_SURFACECALLBACKS {
+} DD_SURFACECALLBACKS, *PDD_SURFACECALLBACKS;
+typedef struct _DD_PALETTECALLBACKS {
+} DD_PALETTECALLBACKS, *PDD_PALETTECALLBACKS;
+typedef struct _DD_CALLBACKS {
+} DD_CALLBACKS, *PDD_CALLBACKS;
+typedef struct _DD_HALINFO {
+} DD_HALINFO, *PDD_HALINFO;
+typedef struct _VIDEOMEMORY {
+} VIDEOMEMORY, *LPVIDEOMEMORY;
+typedef struct _DD_DIRECTDRAW_GLOBAL {
+} DD_DIRECTDRAW_GLOBAL, *LPDD_DIRECTDRAW_GLOBAL;
+typedef struct _DD_SURFACE_LOCAL {
+} DD_SURFACE_LOCAL, *PDD_SURFACE_LOCAL, *LPDD_SURFACE_LOCAL;
+#endif
+
+#ifndef __DDRAWI_INCLUDED__
+typedef PVOID LPVIDMEM;
+#endif
+
+#if !defined(__DD_INCLUDED__) && !defined(__DDRAWI_INCLUDED__)
+typedef struct _DDSCAPS {
+} DDSCAPS, *PDDSCAPS;
+typedef struct _DDSCAPSEX {
+} DDSCAPSEX, *PDDSCAPSEX;
+typedef PVOID LPVMEMHEAP;
+#endif
+
+#if defined(_WIN32K_)
+#define WIN32KAPI DECL_EXPORT
+#else
+#define WIN32KAPI DECL_IMPORT
+#endif
+
+#define DDI_DRIVER_VERSION_NT4 0x00020000
+#define DDI_DRIVER_VERSION_SP3 0x00020003
+#define DDI_DRIVER_VERSION_NT5 0x00030000
+#define DDI_DRIVER_VERSION_NT5_01 0x00030100
+
+#define GDI_DRIVER_VERSION 0x4000
+
+#ifdef _X86_
+
+typedef DWORD FLOATL;
+
+#else /* !_X86_ */
+
+typedef FLOAT FLOATL;
+
+#endif
+
+typedef SHORT FWORD;
+typedef LONG LDECI4;
+typedef ULONG IDENT;
+
+typedef ULONG_PTR HFF;
+typedef ULONG_PTR HFC;
+
+typedef LONG PTRDIFF;
+typedef PTRDIFF *PPTRDIFF;
+typedef LONG FIX;
+typedef FIX *PFIX;
+typedef ULONG ROP4;
+typedef ULONG MIX;
+typedef ULONG HGLYPH;
+typedef HGLYPH *PHGLYPH;
+
+typedef LONG_PTR (DDKAPI *PFN)();
+
+DECLARE_HANDLE(HBM);
+DECLARE_HANDLE(HDEV);
+DECLARE_HANDLE(HSURF);
+DECLARE_HANDLE(DHSURF);
+DECLARE_HANDLE(DHPDEV);
+DECLARE_HANDLE(HDRVOBJ);
+
+
+#define GDI_DRIVER_VERSION 0x4000
+
+typedef struct _ENG_EVENT *PEVENT;
+
+#define OPENGL_CMD 4352
+#define OPENGL_GETINFO 4353
+#define WNDOBJ_SETUP 4354
+
+#define FD_ERROR 0xFFFFFFFF
+#define DDI_ERROR 0xFFFFFFFF
+
+#define HFF_INVALID ((HFF) 0)
+#define HFC_INVALID ((HFC) 0)
+#define HGLYPH_INVALID ((HGLYPH) -1)
+
+#define FP_ALTERNATEMODE 1
+#define FP_WINDINGMODE 2
+
+#define DN_ACCELERATION_LEVEL 1
+#define DN_DEVICE_ORIGIN 2
+#define DN_SLEEP_MODE 3
+#define DN_DRAWING_BEGIN 4
+
+#define DCR_SOLID 0
+#define DCR_DRIVER 1
+#define DCR_HALFTONE 2
+
+#define GX_IDENTITY 0
+#define GX_OFFSET 1
+#define GX_SCALE 2
+#define GX_GENERAL 3
+
+typedef struct _POINTE {
+ FLOATL x;
+ FLOATL y;
+} POINTE, *PPOINTE;
+
+typedef union _FLOAT_LONG {
+ FLOATL e;
+ LONG l;
+} FLOAT_LONG, *PFLOAT_LONG;
+
+typedef struct _POINTFIX {
+ FIX x;
+ FIX y;
+} POINTFIX, *PPOINTFIX;
+
+typedef struct _RECTFX {
+ FIX xLeft;
+ FIX yTop;
+ FIX xRight;
+ FIX yBottom;
+} RECTFX, *PRECTFX;
+
+typedef struct _POINTQF {
+ LARGE_INTEGER x;
+ LARGE_INTEGER y;
+} POINTQF, *PPOINTQF;
+
+
+typedef struct _BLENDOBJ {
+ BLENDFUNCTION BlendFunction;
+} BLENDOBJ,*PBLENDOBJ;
+
+/* BRUSHOBJ.flColorType */
+#define BR_DEVICE_ICM 0x01
+#define BR_HOST_ICM 0x02
+#define BR_CMYKCOLOR 0x04
+#define BR_ORIGCOLOR 0x08
+
+typedef struct _BRUSHOBJ {
+ ULONG iSolidColor;
+ PVOID pvRbrush;
+ FLONG flColorType;
+} BRUSHOBJ;
+
+typedef struct _CIECHROMA {
+ LDECI4 x;
+ LDECI4 y;
+ LDECI4 Y;
+} CIECHROMA;
+
+typedef struct _RUN {
+ LONG iStart;
+ LONG iStop;
+} RUN, *PRUN;
+
+typedef struct _CLIPLINE {
+ POINTFIX ptfxA;
+ POINTFIX ptfxB;
+ LONG lStyleState;
+ ULONG c;
+ RUN arun[1];
+} CLIPLINE, *PCLIPLINE;
+
+/* CLIPOBJ.iDComplexity constants */
+#define DC_TRIVIAL 0
+#define DC_RECT 1
+#define DC_COMPLEX 3
+
+/* CLIPOBJ.iFComplexity constants */
+#define FC_RECT 1
+#define FC_RECT4 2
+#define FC_COMPLEX 3
+
+/* CLIPOBJ.iMode constants */
+#define TC_RECTANGLES 0
+#define TC_PATHOBJ 2
+
+/* CLIPOBJ.fjOptions constants */
+#define OC_BANK_CLIP 1
+
+typedef struct _CLIPOBJ {
+ ULONG iUniq;
+ RECTL rclBounds;
+ BYTE iDComplexity;
+ BYTE iFComplexity;
+ BYTE iMode;
+ BYTE fjOptions;
+} CLIPOBJ;
+
+typedef struct _COLORINFO {
+ CIECHROMA Red;
+ CIECHROMA Green;
+ CIECHROMA Blue;
+ CIECHROMA Cyan;
+ CIECHROMA Magenta;
+ CIECHROMA Yellow;
+ CIECHROMA AlignmentWhite;
+ LDECI4 RedGamma;
+ LDECI4 GreenGamma;
+ LDECI4 BlueGamma;
+ LDECI4 MagentaInCyanDye;
+ LDECI4 YellowInCyanDye;
+ LDECI4 CyanInMagentaDye;
+ LDECI4 YellowInMagentaDye;
+ LDECI4 CyanInYellowDye;
+ LDECI4 MagentaInYellowDye;
+} COLORINFO, *PCOLORINFO;
+
+/* DEVHTADJDATA.DeviceFlags constants */
+#define DEVHTADJF_COLOR_DEVICE 0x00000001
+#define DEVHTADJF_ADDITIVE_DEVICE 0x00000002
+
+typedef struct _DEVHTINFO {
+ DWORD HTFlags;
+ DWORD HTPatternSize;
+ DWORD DevPelsDPI;
+ COLORINFO ColorInfo;
+} DEVHTINFO, *PDEVHTINFO;
+
+typedef struct _DEVHTADJDATA {
+ DWORD DeviceFlags;
+ DWORD DeviceXDPI;
+ DWORD DeviceYDPI;
+ PDEVHTINFO pDefHTInfo;
+ PDEVHTINFO pAdjHTInfo;
+} DEVHTADJDATA, *PDEVHTADJDATA;
+
+/* DEVINFO.flGraphicsCaps flags */
+#define GCAPS_BEZIERS 0x00000001
+#define GCAPS_GEOMETRICWIDE 0x00000002
+#define GCAPS_ALTERNATEFILL 0x00000004
+#define GCAPS_WINDINGFILL 0x00000008
+#define GCAPS_HALFTONE 0x00000010
+#define GCAPS_COLOR_DITHER 0x00000020
+#define GCAPS_HORIZSTRIKE 0x00000040
+#define GCAPS_VERTSTRIKE 0x00000080
+#define GCAPS_OPAQUERECT 0x00000100
+#define GCAPS_VECTORFONT 0x00000200
+#define GCAPS_MONO_DITHER 0x00000400
+#define GCAPS_ASYNCCHANGE 0x00000800
+#define GCAPS_ASYNCMOVE 0x00001000
+#define GCAPS_DONTJOURNAL 0x00002000
+#define GCAPS_DIRECTDRAW 0x00004000
+#define GCAPS_ARBRUSHOPAQUE 0x00008000
+#define GCAPS_PANNING 0x00010000
+#define GCAPS_HIGHRESTEXT 0x00040000
+#define GCAPS_PALMANAGED 0x00080000
+#define GCAPS_DITHERONREALIZE 0x00200000
+#define GCAPS_NO64BITMEMACCESS 0x00400000
+#define GCAPS_FORCEDITHER 0x00800000
+#define GCAPS_GRAY16 0x01000000
+#define GCAPS_ICM 0x02000000
+#define GCAPS_CMYKCOLOR 0x04000000
+#define GCAPS_LAYERED 0x08000000
+#define GCAPS_ARBRUSHTEXT 0x10000000
+#define GCAPS_SCREENPRECISION 0x20000000
+#define GCAPS_FONT_RASTERIZER 0x40000000
+#define GCAPS_NUP 0x80000000
+
+/* DEVINFO.iDitherFormat constants */
+#define BMF_1BPP 1L
+#define BMF_4BPP 2L
+#define BMF_8BPP 3L
+#define BMF_16BPP 4L
+#define BMF_24BPP 5L
+#define BMF_32BPP 6L
+#define BMF_4RLE 7L
+#define BMF_8RLE 8L
+#define BMF_JPEG 9L
+#define BMF_PNG 10L
+
+/* DEVINFO.flGraphicsCaps2 flags */
+#define GCAPS2_JPEGSRC 0x00000001
+#define GCAPS2_xxxx 0x00000002
+#define GCAPS2_PNGSRC 0x00000008
+#define GCAPS2_CHANGEGAMMARAMP 0x00000010
+#define GCAPS2_ALPHACURSOR 0x00000020
+#define GCAPS2_SYNCFLUSH 0x00000040
+#define GCAPS2_SYNCTIMER 0x00000080
+#define GCAPS2_ICD_MULTIMON 0x00000100
+#define GCAPS2_MOUSETRAILS 0x00000200
+#define GCAPS2_RESERVED1 0x00000400
+
+typedef struct _DEVINFO {
+ FLONG flGraphicsCaps;
+ LOGFONTW lfDefaultFont;
+ LOGFONTW lfAnsiVarFont;
+ LOGFONTW lfAnsiFixFont;
+ ULONG cFonts;
+ ULONG iDitherFormat;
+ USHORT cxDither;
+ USHORT cyDither;
+ HPALETTE hpalDefault;
+ FLONG flGraphicsCaps2;
+} DEVINFO, *PDEVINFO;
+
+typedef struct _DRIVEROBJ *PDRIVEROBJ;
+
+typedef BOOL DDKAPI CALLBACK
+(*FREEOBJPROC)(
+ /*IN*/ PDRIVEROBJ pDriverObj);
+
+typedef struct _DRIVEROBJ {
+ PVOID pvObj;
+ FREEOBJPROC pFreeProc;
+ HDEV hdev;
+ DHPDEV dhpdev;
+} DRIVEROBJ;
+
+/* DRVFN.iFunc constants */
+#define INDEX_DrvEnablePDEV 0L
+#define INDEX_DrvCompletePDEV 1L
+#define INDEX_DrvDisablePDEV 2L
+#define INDEX_DrvEnableSurface 3L
+#define INDEX_DrvDisableSurface 4L
+#define INDEX_DrvAssertMode 5L
+#define INDEX_DrvOffset 6L
+#define INDEX_DrvResetPDEV 7L
+#define INDEX_DrvDisableDriver 8L
+#define INDEX_DrvCreateDeviceBitmap 10L
+#define INDEX_DrvDeleteDeviceBitmap 11L
+#define INDEX_DrvRealizeBrush 12L
+#define INDEX_DrvDitherColor 13L
+#define INDEX_DrvStrokePath 14L
+#define INDEX_DrvFillPath 15L
+#define INDEX_DrvStrokeAndFillPath 16L
+#define INDEX_DrvPaint 17L
+#define INDEX_DrvBitBlt 18L
+#define INDEX_DrvCopyBits 19L
+#define INDEX_DrvStretchBlt 20L
+#define INDEX_DrvSetPalette 22L
+#define INDEX_DrvTextOut 23L
+#define INDEX_DrvEscape 24L
+#define INDEX_DrvDrawEscape 25L
+#define INDEX_DrvQueryFont 26L
+#define INDEX_DrvQueryFontTree 27L
+#define INDEX_DrvQueryFontData 28L
+#define INDEX_DrvSetPointerShape 29L
+#define INDEX_DrvMovePointer 30L
+#define INDEX_DrvLineTo 31L
+#define INDEX_DrvSendPage 32L
+#define INDEX_DrvStartPage 33L
+#define INDEX_DrvEndDoc 34L
+#define INDEX_DrvStartDoc 35L
+#define INDEX_DrvGetGlyphMode 37L
+#define INDEX_DrvSynchronize 38L
+#define INDEX_DrvSaveScreenBits 40L
+#define INDEX_DrvGetModes 41L
+#define INDEX_DrvFree 42L
+#define INDEX_DrvDestroyFont 43L
+#define INDEX_DrvQueryFontCaps 44L
+#define INDEX_DrvLoadFontFile 45L
+#define INDEX_DrvUnloadFontFile 46L
+#define INDEX_DrvFontManagement 47L
+#define INDEX_DrvQueryTrueTypeTable 48L
+#define INDEX_DrvQueryTrueTypeOutline 49L
+#define INDEX_DrvGetTrueTypeFile 50L
+#define INDEX_DrvQueryFontFile 51L
+#define INDEX_DrvMovePanning 52L
+#define INDEX_DrvQueryAdvanceWidths 53L
+#define INDEX_DrvSetPixelFormat 54L
+#define INDEX_DrvDescribePixelFormat 55L
+#define INDEX_DrvSwapBuffers 56L
+#define INDEX_DrvStartBanding 57L
+#define INDEX_DrvNextBand 58L
+#define INDEX_DrvGetDirectDrawInfo 59L
+#define INDEX_DrvEnableDirectDraw 60L
+#define INDEX_DrvDisableDirectDraw 61L
+#define INDEX_DrvQuerySpoolType 62L
+#define INDEX_DrvIcmCreateColorTransform 64L
+#define INDEX_DrvIcmDeleteColorTransform 65L
+#define INDEX_DrvIcmCheckBitmapBits 66L
+#define INDEX_DrvIcmSetDeviceGammaRamp 67L
+#define INDEX_DrvGradientFill 68L
+#define INDEX_DrvStretchBltROP 69L
+#define INDEX_DrvPlgBlt 70L
+#define INDEX_DrvAlphaBlend 71L
+#define INDEX_DrvSynthesizeFont 72L
+#define INDEX_DrvGetSynthesizedFontFiles 73L
+#define INDEX_DrvTransparentBlt 74L
+#define INDEX_DrvQueryPerBandInfo 75L
+#define INDEX_DrvQueryDeviceSupport 76L
+#define INDEX_DrvReserved1 77L
+#define INDEX_DrvReserved2 78L
+#define INDEX_DrvReserved3 79L
+#define INDEX_DrvReserved4 80L
+#define INDEX_DrvReserved5 81L
+#define INDEX_DrvReserved6 82L
+#define INDEX_DrvReserved7 83L
+#define INDEX_DrvReserved8 84L
+#define INDEX_DrvDeriveSurface 85L
+#define INDEX_DrvQueryGlyphAttrs 86L
+#define INDEX_DrvNotify 87L
+#define INDEX_DrvSynchronizeSurface 88L
+#define INDEX_DrvResetDevice 89L
+#define INDEX_DrvReserved9 90L
+#define INDEX_DrvReserved10 91L
+#define INDEX_DrvReserved11 92L
+#define INDEX_LAST 93L
+
+typedef struct _DRVFN {
+ ULONG iFunc;
+ PFN pfn;
+} DRVFN, *PDRVFN;
+
+/* DRVENABLEDATA.iDriverVersion constants */
+#define DDI_DRIVER_VERSION_NT4 0x00020000
+#define DDI_DRIVER_VERSION_SP3 0x00020003
+#define DDI_DRIVER_VERSION_NT5 0x00030000
+#define DDI_DRIVER_VERSION_NT5_01 0x00030100
+
+typedef struct _DRVENABLEDATA {
+ ULONG iDriverVersion;
+ ULONG c;
+ DRVFN *pdrvfn;
+} DRVENABLEDATA, *PDRVENABLEDATA;
+
+DECLARE_HANDLE(HSEMAPHORE);
+
+typedef struct {
+ DWORD nSize;
+ HDC hdc;
+ PBYTE pvEMF;
+ PBYTE pvCurrentRecord;
+} EMFINFO, *PEMFINFO;
+
+typedef struct _ENGSAFESEMAPHORE {
+ HSEMAPHORE hsem;
+ LONG lCount;
+} ENGSAFESEMAPHORE;
+
+typedef struct _ENG_TIME_FIELDS {
+ USHORT usYear;
+ USHORT usMonth;
+ USHORT usDay;
+ USHORT usHour;
+ USHORT usMinute;
+ USHORT usSecond;
+ USHORT usMilliseconds;
+ USHORT usWeekday;
+} ENG_TIME_FIELDS, *PENG_TIME_FIELDS;
+
+typedef struct _ENUMRECTS {
+ ULONG c;
+ RECTL arcl[1];
+} ENUMRECTS;
+
+typedef struct _FD_XFORM {
+ FLOATL eXX;
+ FLOATL eXY;
+ FLOATL eYX;
+ FLOATL eYY;
+} FD_XFORM, *PFD_XFORM;
+
+/* FD_DEVICEMETRICS.flRealizedType constants */
+#define FDM_TYPE_BM_SIDE_CONST 0x00000001
+#define FDM_TYPE_MAXEXT_EQUAL_BM_SIDE 0x00000002
+#define FDM_TYPE_CHAR_INC_EQUAL_BM_BASE 0x00000004
+#define FDM_TYPE_ZERO_BEARINGS 0x00000008
+#define FDM_TYPE_CONST_BEARINGS 0x00000010
+
+typedef struct _FD_DEVICEMETRICS {
+ FLONG flRealizedType;
+ POINTE pteBase;
+ POINTE pteSide;
+ LONG lD;
+ FIX fxMaxAscender;
+ FIX fxMaxDescender;
+ POINTL ptlUnderline1;
+ POINTL ptlStrikeout;
+ POINTL ptlULThickness;
+ POINTL ptlSOThickness;
+ ULONG cxMax;
+ ULONG cyMax;
+ ULONG cjGlyphMax;
+ FD_XFORM fdxQuantized;
+ LONG lNonLinearExtLeading;
+ LONG lNonLinearIntLeading;
+ LONG lNonLinearMaxCharWidth;
+ LONG lNonLinearAvgCharWidth;
+ LONG lMinA;
+ LONG lMinC;
+ LONG lMinD;
+ LONG alReserved[1];
+} FD_DEVICEMETRICS, *PFD_DEVICEMETRICS;
+
+/* FD_GLYPHATTR.iMode constants */
+#define FO_ATTR_MODE_ROTATE 1
+
+typedef struct _FD_GLYPHATTR {
+ ULONG cjThis;
+ ULONG cGlyphs;
+ ULONG iMode;
+ BYTE aGlyphAttr[1];
+} FD_GLYPHATTR, *PFD_GLYPHATTR;
+
+/* FD_GLYPHSET.flAccel */
+#define GS_UNICODE_HANDLES 0x00000001
+#define GS_8BIT_HANDLES 0x00000002
+#define GS_16BIT_HANDLES 0x00000004
+
+typedef struct _WCRUN {
+ WCHAR wcLow;
+ USHORT cGlyphs;
+ HGLYPH *phg;
+} WCRUN, *PWCRUN;
+
+typedef struct _FD_GLYPHSET {
+ ULONG cjThis;
+ FLONG flAccel;
+ ULONG cGlyphsSupported;
+ ULONG cRuns;
+ WCRUN awcrun[1];
+} FD_GLYPHSET, *PFD_GLYPHSET;
+
+typedef struct _FD_KERNINGPAIR {
+ WCHAR wcFirst;
+ WCHAR wcSecond;
+ FWORD fwdKern;
+} FD_KERNINGPAIR;
+
+typedef struct _FLOATOBJ
+{
+ ULONG ul1;
+ ULONG ul2;
+} FLOATOBJ, *PFLOATOBJ;
+
+typedef struct _FLOATOBJ_XFORM {
+ FLOATOBJ eM11;
+ FLOATOBJ eM12;
+ FLOATOBJ eM21;
+ FLOATOBJ eM22;
+ FLOATOBJ eDx;
+ FLOATOBJ eDy;
+} FLOATOBJ_XFORM, *PFLOATOBJ_XFORM, FAR *LPFLOATOBJ_XFORM;
+
+/* FONTDIFF.fsSelection */
+#define FM_SEL_ITALIC 0x0001
+#define FM_SEL_UNDERSCORE 0x0002
+#define FM_SEL_NEGATIVE 0x0004
+#define FM_SEL_OUTLINED 0x0008
+#define FM_SEL_STRIKEOUT 0x0010
+#define FM_SEL_BOLD 0x0020
+#define FM_SEL_REGULAR 0x0040
+
+typedef struct _FONTDIFF {
+ BYTE jReserved1;
+ BYTE jReserved2;
+ BYTE jReserved3;
+ BYTE bWeight;
+ USHORT usWinWeight;
+ FSHORT fsSelection;
+ FWORD fwdAveCharWidth;
+ FWORD fwdMaxCharInc;
+ POINTL ptlCaret;
+} FONTDIFF;
+
+typedef struct _FONTSIM {
+ PTRDIFF dpBold;
+ PTRDIFF dpItalic;
+ PTRDIFF dpBoldItalic;
+} FONTSIM;
+
+/* FONTINFO.flCaps constants */
+#define FO_DEVICE_FONT 1L
+#define FO_OUTLINE_CAPABLE 2L
+
+typedef struct _FONTINFO {
+ ULONG cjThis;
+ FLONG flCaps;
+ ULONG cGlyphsSupported;
+ ULONG cjMaxGlyph1;
+ ULONG cjMaxGlyph4;
+ ULONG cjMaxGlyph8;
+ ULONG cjMaxGlyph32;
+} FONTINFO, *PFONTINFO;
+
+/* FONTOBJ.flFontType constants */
+#define FO_TYPE_RASTER RASTER_FONTTYPE
+#define FO_TYPE_DEVICE DEVICE_FONTTYPE
+#define FO_TYPE_TRUETYPE TRUETYPE_FONTTYPE
+#define FO_TYPE_OPENTYPE OPENTYPE_FONTTYPE
+
+#define FO_SIM_BOLD 0x00002000
+#define FO_SIM_ITALIC 0x00004000
+#define FO_EM_HEIGHT 0x00008000
+#define FO_GRAY16 0x00010000
+#define FO_NOGRAY16 0x00020000
+#define FO_NOHINTS 0x00040000
+#define FO_NO_CHOICE 0x00080000
+#define FO_CFF 0x00100000
+#define FO_POSTSCRIPT 0x00200000
+#define FO_MULTIPLEMASTER 0x00400000
+#define FO_VERT_FACE 0x00800000
+#define FO_DBCS_FONT 0X01000000
+#define FO_NOCLEARTYPE 0x02000000
+#define FO_CLEARTYPE_X 0x10000000
+#define FO_CLEARTYPE_Y 0x20000000
+
+typedef struct _FONTOBJ {
+ ULONG iUniq;
+ ULONG iFace;
+ ULONG cxMax;
+ FLONG flFontType;
+ ULONG_PTR iTTUniq;
+ ULONG_PTR iFile;
+ SIZE sizLogResPpi;
+ ULONG ulStyleSize;
+ PVOID pvConsumer;
+ PVOID pvProducer;
+} FONTOBJ;
+
+typedef struct _GAMMARAMP {
+ WORD Red[256];
+ WORD Green[256];
+ WORD Blue[256];
+} GAMMARAMP, *PGAMMARAMP;
+
+/* GDIINFO.ulPrimaryOrder constants */
+#define PRIMARY_ORDER_ABC 0
+#define PRIMARY_ORDER_ACB 1
+#define PRIMARY_ORDER_BAC 2
+#define PRIMARY_ORDER_BCA 3
+#define PRIMARY_ORDER_CBA 4
+#define PRIMARY_ORDER_CAB 5
+
+/* GDIINFO.ulHTPatternSize constants */
+#define HT_PATSIZE_2x2 0
+#define HT_PATSIZE_2x2_M 1
+#define HT_PATSIZE_4x4 2
+#define HT_PATSIZE_4x4_M 3
+#define HT_PATSIZE_6x6 4
+#define HT_PATSIZE_6x6_M 5
+#define HT_PATSIZE_8x8 6
+#define HT_PATSIZE_8x8_M 7
+#define HT_PATSIZE_10x10 8
+#define HT_PATSIZE_10x10_M 9
+#define HT_PATSIZE_12x12 10
+#define HT_PATSIZE_12x12_M 11
+#define HT_PATSIZE_14x14 12
+#define HT_PATSIZE_14x14_M 13
+#define HT_PATSIZE_16x16 14
+#define HT_PATSIZE_16x16_M 15
+#define HT_PATSIZE_SUPERCELL 16
+#define HT_PATSIZE_SUPERCELL_M 17
+#define HT_PATSIZE_USER 18
+#define HT_PATSIZE_MAX_INDEX HT_PATSIZE_USER
+#define HT_PATSIZE_DEFAULT HT_PATSIZE_SUPERCELL_M
+#define HT_USERPAT_CX_MIN 4
+#define HT_USERPAT_CX_MAX 256
+#define HT_USERPAT_CY_MIN 4
+#define HT_USERPAT_CY_MAX 256
+
+/* GDIINFO.ulHTOutputFormat constants */
+#define HT_FORMAT_1BPP 0
+#define HT_FORMAT_4BPP 2
+#define HT_FORMAT_4BPP_IRGB 3
+#define HT_FORMAT_8BPP 4
+#define HT_FORMAT_16BPP 5
+#define HT_FORMAT_24BPP 6
+#define HT_FORMAT_32BPP 7
+
+/* GDIINFO.flHTFlags */
+#define HT_FLAG_SQUARE_DEVICE_PEL 0x00000001
+#define HT_FLAG_HAS_BLACK_DYE 0x00000002
+#define HT_FLAG_ADDITIVE_PRIMS 0x00000004
+#define HT_FLAG_USE_8BPP_BITMASK 0x00000008
+#define HT_FLAG_INK_HIGH_ABSORPTION 0x00000010
+#define HT_FLAG_INK_ABSORPTION_INDICES 0x00000060
+#define HT_FLAG_DO_DEVCLR_XFORM 0x00000080
+#define HT_FLAG_OUTPUT_CMY 0x00000100
+#define HT_FLAG_PRINT_DRAFT_MODE 0x00000200
+#define HT_FLAG_INVERT_8BPP_BITMASK_IDX 0x00000400
+#define HT_FLAG_8BPP_CMY332_MASK 0xFF000000
+
+#define MAKE_CMYMASK_BYTE(c,m,y) ((BYTE)(((BYTE)(c) & 0x07) << 5) \
+ |(BYTE)(((BYTE)(m) & 0x07) << 2) \
+ |(BYTE)((BYTE)(y) & 0x03))
+
+#define MAKE_CMY332_MASK(c,m,y) ((DWORD)(((DWORD)(c) & 0x07) << 29)\
+ |(DWORD)(((DWORD)(m) & 0x07) << 26)\
+ |(DWORD)(((DWORD)(y) & 0x03) << 24))
+
+/* GDIINFO.flHTFlags constants */
+#define HT_FLAG_INK_ABSORPTION_IDX0 0x00000000
+#define HT_FLAG_INK_ABSORPTION_IDX1 0x00000020
+#define HT_FLAG_INK_ABSORPTION_IDX2 0x00000040
+#define HT_FLAG_INK_ABSORPTION_IDX3 0x00000060
+
+#define HT_FLAG_HIGHEST_INK_ABSORPTION (HT_FLAG_INK_HIGH_ABSORPTION \
+ |HT_FLAG_INK_ABSORPTION_IDX3)
+#define HT_FLAG_HIGHER_INK_ABSORPTION (HT_FLAG_INK_HIGH_ABSORPTION \
+ |HT_FLAG_INK_ABSORPTION_IDX2)
+#define HT_FLAG_HIGH_INK_ABSORPTION (HT_FLAG_INK_HIGH_ABSORPTION \
+ |HT_FLAG_INK_ABSORPTION_IDX1)
+#define HT_FLAG_NORMAL_INK_ABSORPTION HT_FLAG_INK_ABSORPTION_IDX0
+#define HT_FLAG_LOW_INK_ABSORPTION HT_FLAG_INK_ABSORPTION_IDX1
+#define HT_FLAG_LOWER_INK_ABSORPTION HT_FLAG_INK_ABSORPTION_IDX2
+#define HT_FLAG_LOWEST_INK_ABSORPTION HT_FLAG_INK_ABSORPTION_IDX3
+
+#define HT_BITMASKPALRGB (DWORD)'0BGR'
+#define HT_SET_BITMASKPAL2RGB(pPal) (*((LPDWORD)(pPal)) = HT_BITMASKPALRGB)
+#define HT_IS_BITMASKPALRGB(pPal) (*((LPDWORD)(pPal)) == (DWORD)0)
+
+/* GDIINFO.ulPhysicalPixelCharacteristics constants */
+#define PPC_DEFAULT 0x0
+#define PPC_UNDEFINED 0x1
+#define PPC_RGB_ORDER_VERTICAL_STRIPES 0x2
+#define PPC_BGR_ORDER_VERTICAL_STRIPES 0x3
+#define PPC_RGB_ORDER_HORIZONTAL_STRIPES 0x4
+#define PPC_BGR_ORDER_HORIZONTAL_STRIPES 0x5
+
+#define PPG_DEFAULT 0
+#define PPG_SRGB 1
+
+typedef struct _GDIINFO {
+ ULONG ulVersion;
+ ULONG ulTechnology;
+ ULONG ulHorzSize;
+ ULONG ulVertSize;
+ ULONG ulHorzRes;
+ ULONG ulVertRes;
+ ULONG cBitsPixel;
+ ULONG cPlanes;
+ ULONG ulNumColors;
+ ULONG flRaster;
+ ULONG ulLogPixelsX;
+ ULONG ulLogPixelsY;
+ ULONG flTextCaps;
+ ULONG ulDACRed;
+ ULONG ulDACGreen;
+ ULONG ulDACBlue;
+ ULONG ulAspectX;
+ ULONG ulAspectY;
+ ULONG ulAspectXY;
+ LONG xStyleStep;
+ LONG yStyleStep;
+ LONG denStyleStep;
+ POINTL ptlPhysOffset;
+ SIZEL szlPhysSize;
+ ULONG ulNumPalReg;
+ COLORINFO ciDevice;
+ ULONG ulDevicePelsDPI;
+ ULONG ulPrimaryOrder;
+ ULONG ulHTPatternSize;
+ ULONG ulHTOutputFormat;
+ ULONG flHTFlags;
+ ULONG ulVRefresh;
+ ULONG ulBltAlignment;
+ ULONG ulPanningHorzRes;
+ ULONG ulPanningVertRes;
+ ULONG xPanningAlignment;
+ ULONG yPanningAlignment;
+ ULONG cxHTPat;
+ ULONG cyHTPat;
+ LPBYTE pHTPatA;
+ LPBYTE pHTPatB;
+ LPBYTE pHTPatC;
+ ULONG flShadeBlend;
+ ULONG ulPhysicalPixelCharacteristics;
+ ULONG ulPhysicalPixelGamma;
+} GDIINFO, *PGDIINFO;
+
+/* PATHDATA.flags constants */
+#define PD_BEGINSUBPATH 0x00000001
+#define PD_ENDSUBPATH 0x00000002
+#define PD_RESETSTYLE 0x00000004
+#define PD_CLOSEFIGURE 0x00000008
+#define PD_BEZIERS 0x00000010
+#define PD_ALL (PD_BEGINSUBPATH \
+ |PD_ENDSUBPATH \
+ |PD_RESETSTYLE \
+ |PD_CLOSEFIGURE \
+ PD_BEZIERS)
+
+typedef struct _PATHDATA {
+ FLONG flags;
+ ULONG count;
+ POINTFIX *glypptfx;
+} PATHDATA, *PPATHDATA;
+
+/* PATHOBJ.fl constants */
+#define PO_BEZIERS 0x00000001
+#define PO_ELLIPSE 0x00000002
+#define PO_ALL_INTEGERS 0x00000004
+#define PO_ENUM_AS_INTEGERS 0x00000008
+
+typedef struct _PATHOBJ {
+ FLONG fl;
+ ULONG cCurves;
+} PATHOBJ;
+
+typedef struct _GLYPHBITS {
+ POINTL ptlOrigin;
+ SIZEL sizlBitmap;
+ BYTE aj[1];
+} GLYPHBITS;
+
+typedef union _GLYPHDEF {
+ GLYPHBITS *pgb;
+ PATHOBJ *ppo;
+} GLYPHDEF;
+
+typedef struct _GLYPHPOS {
+ HGLYPH hg;
+ GLYPHDEF *pgdf;
+ POINTL ptl;
+} GLYPHPOS, *PGLYPHPOS;
+
+typedef struct _GLYPHDATA {
+ GLYPHDEF gdf;
+ HGLYPH hg;
+ FIX fxD;
+ FIX fxA;
+ FIX fxAB;
+ FIX fxInkTop;
+ FIX fxInkBottom;
+ RECTL rclInk;
+ POINTQF ptqD;
+} GLYPHDATA;
+
+typedef struct _IFIEXTRA {
+ ULONG ulIdentifier;
+ PTRDIFF dpFontSig;
+ ULONG cig;
+ PTRDIFF dpDesignVector;
+ PTRDIFF dpAxesInfoW;
+ ULONG aulReserved[1];
+} IFIEXTRA, *PIFIEXTRA;
+
+/* IFIMETRICS constants */
+
+#define FM_VERSION_NUMBER 0x0
+
+/* IFIMETRICS.fsType constants */
+#define FM_TYPE_LICENSED 0x2
+#define FM_READONLY_EMBED 0x4
+#define FM_EDITABLE_EMBED 0x8
+#define FM_NO_EMBEDDING FM_TYPE_LICENSED
+
+/* IFIMETRICS.flInfo constants */
+#define FM_INFO_TECH_TRUETYPE 0x00000001
+#define FM_INFO_TECH_BITMAP 0x00000002
+#define FM_INFO_TECH_STROKE 0x00000004
+#define FM_INFO_TECH_OUTLINE_NOT_TRUETYPE 0x00000008
+#define FM_INFO_ARB_XFORMS 0x00000010
+#define FM_INFO_1BPP 0x00000020
+#define FM_INFO_4BPP 0x00000040
+#define FM_INFO_8BPP 0x00000080
+#define FM_INFO_16BPP 0x00000100
+#define FM_INFO_24BPP 0x00000200
+#define FM_INFO_32BPP 0x00000400
+#define FM_INFO_INTEGER_WIDTH 0x00000800
+#define FM_INFO_CONSTANT_WIDTH 0x00001000
+#define FM_INFO_NOT_CONTIGUOUS 0x00002000
+#define FM_INFO_TECH_MM 0x00004000
+#define FM_INFO_RETURNS_OUTLINES 0x00008000
+#define FM_INFO_RETURNS_STROKES 0x00010000
+#define FM_INFO_RETURNS_BITMAPS 0x00020000
+#define FM_INFO_DSIG 0x00040000
+#define FM_INFO_RIGHT_HANDED 0x00080000
+#define FM_INFO_INTEGRAL_SCALING 0x00100000
+#define FM_INFO_90DEGREE_ROTATIONS 0x00200000
+#define FM_INFO_OPTICALLY_FIXED_PITCH 0x00400000
+#define FM_INFO_DO_NOT_ENUMERATE 0x00800000
+#define FM_INFO_ISOTROPIC_SCALING_ONLY 0x01000000
+#define FM_INFO_ANISOTROPIC_SCALING_ONLY 0x02000000
+#define FM_INFO_TECH_CFF 0x04000000
+#define FM_INFO_FAMILY_EQUIV 0x08000000
+#define FM_INFO_DBCS_FIXED_PITCH 0x10000000
+#define FM_INFO_NONNEGATIVE_AC 0x20000000
+#define FM_INFO_IGNORE_TC_RA_ABLE 0x40000000
+#define FM_INFO_TECH_TYPE1 0x80000000
+
+#define MAXCHARSETS 16
+
+/* IFIMETRICS.ulPanoseCulture constants */
+#define FM_PANOSE_CULTURE_LATIN 0x0
+
+typedef struct _IFIMETRICS {
+ ULONG cjThis;
+ ULONG cjIfiExtra;
+ PTRDIFF dpwszFamilyName;
+ PTRDIFF dpwszStyleName;
+ PTRDIFF dpwszFaceName;
+ PTRDIFF dpwszUniqueName;
+ PTRDIFF dpFontSim;
+ LONG lEmbedId;
+ LONG lItalicAngle;
+ LONG lCharBias;
+ PTRDIFF dpCharSets;
+ BYTE jWinCharSet;
+ BYTE jWinPitchAndFamily;
+ USHORT usWinWeight;
+ ULONG flInfo;
+ USHORT fsSelection;
+ USHORT fsType;
+ FWORD fwdUnitsPerEm;
+ FWORD fwdLowestPPEm;
+ FWORD fwdWinAscender;
+ FWORD fwdWinDescender;
+ FWORD fwdMacAscender;
+ FWORD fwdMacDescender;
+ FWORD fwdMacLineGap;
+ FWORD fwdTypoAscender;
+ FWORD fwdTypoDescender;
+ FWORD fwdTypoLineGap;
+ FWORD fwdAveCharWidth;
+ FWORD fwdMaxCharInc;
+ FWORD fwdCapHeight;
+ FWORD fwdXHeight;
+ FWORD fwdSubscriptXSize;
+ FWORD fwdSubscriptYSize;
+ FWORD fwdSubscriptXOffset;
+ FWORD fwdSubscriptYOffset;
+ FWORD fwdSuperscriptXSize;
+ FWORD fwdSuperscriptYSize;
+ FWORD fwdSuperscriptXOffset;
+ FWORD fwdSuperscriptYOffset;
+ FWORD fwdUnderscoreSize;
+ FWORD fwdUnderscorePosition;
+ FWORD fwdStrikeoutSize;
+ FWORD fwdStrikeoutPosition;
+ BYTE chFirstChar;
+ BYTE chLastChar;
+ BYTE chDefaultChar;
+ BYTE chBreakChar;
+ WCHAR wcFirstChar;
+ WCHAR wcLastChar;
+ WCHAR wcDefaultChar;
+ WCHAR wcBreakChar;
+ POINTL ptlBaseline;
+ POINTL ptlAspect;
+ POINTL ptlCaret;
+ RECTL rclFontBox;
+ BYTE achVendId[4];
+ ULONG cKerningPairs;
+ ULONG ulPanoseCulture;
+ PANOSE panose;
+#if defined(_WIN64)
+ PVOID Align;
+#endif
+} IFIMETRICS, *PIFIMETRICS;
+
+/* LINEATTRS.fl */
+#define LA_GEOMETRIC 0x00000001
+#define LA_ALTERNATE 0x00000002
+#define LA_STARTGAP 0x00000004
+#define LA_STYLED 0x00000008
+
+/* LINEATTRS.iJoin */
+#define JOIN_ROUND 0L
+#define JOIN_BEVEL 1L
+#define JOIN_MITER 2L
+
+/* LINEATTRS.iEndCap */
+#define ENDCAP_ROUND 0L
+#define ENDCAP_SQUARE 1L
+#define ENDCAP_BUTT 2L
+
+typedef struct _LINEATTRS {
+ FLONG fl;
+ ULONG iJoin;
+ ULONG iEndCap;
+ FLOAT_LONG elWidth;
+ FLOATL eMiterLimit;
+ ULONG cstyle;
+ PFLOAT_LONG pstyle;
+ FLOAT_LONG elStyleState;
+} LINEATTRS, *PLINEATTRS;
+
+typedef struct _PALOBJ {
+ ULONG ulReserved;
+} PALOBJ;
+
+typedef struct _PERBANDINFO {
+ BOOL bRepeatThisBand;
+ SIZEL szlBand;
+ ULONG ulHorzRes;
+ ULONG ulVertRes;
+} PERBANDINFO, *PPERBANDINFO;
+
+/* STROBJ.flAccel constants */
+#define SO_FLAG_DEFAULT_PLACEMENT 0x00000001
+#define SO_HORIZONTAL 0x00000002
+#define SO_VERTICAL 0x00000004
+#define SO_REVERSED 0x00000008
+#define SO_ZERO_BEARINGS 0x00000010
+#define SO_CHAR_INC_EQUAL_BM_BASE 0x00000020
+#define SO_MAXEXT_EQUAL_BM_SIDE 0x00000040
+#define SO_DO_NOT_SUBSTITUTE_DEVICE_FONT 0x00000080
+#define SO_GLYPHINDEX_TEXTOUT 0x00000100
+#define SO_ESC_NOT_ORIENT 0x00000200
+#define SO_DXDY 0x00000400
+#define SO_CHARACTER_EXTRA 0x00000800
+#define SO_BREAK_EXTRA 0x00001000
+
+typedef struct _STROBJ {
+ ULONG cGlyphs;
+ FLONG flAccel;
+ ULONG ulCharInc;
+ RECTL rclBkGround;
+ GLYPHPOS *pgp;
+ LPWSTR pwszOrg;
+} STROBJ;
+
+typedef struct _SURFACEALIGNMENT {
+ union {
+ struct {
+ DWORD dwStartAlignment;
+ DWORD dwPitchAlignment;
+ DWORD dwReserved1;
+ DWORD dwReserved2;
+ } Linear;
+ struct {
+ DWORD dwXAlignment;
+ DWORD dwYAlignment;
+ DWORD dwReserved1;
+ DWORD dwReserved2;
+ } Rectangular;
+ };
+} SURFACEALIGNMENT, *LPSURFACEALIGNMENT;
+
+/* SURFOBJ.iType constants */
+#define STYPE_BITMAP 0L
+#define STYPE_DEVICE 1L
+#define STYPE_DEVBITMAP 3L
+
+/* SURFOBJ.fjBitmap constants */
+#define BMF_TOPDOWN 0x0001
+#define BMF_NOZEROINIT 0x0002
+#define BMF_DONTCACHE 0x0004
+#define BMF_USERMEM 0x0008
+#define BMF_KMSECTION 0x0010
+#define BMF_NOTSYSMEM 0x0020
+#define BMF_WINDOW_BLT 0x0040
+#define BMF_UMPDMEM 0x0080
+#define BMF_RESERVED 0xFF00
+
+typedef struct _SURFOBJ {
+ DHSURF dhsurf;
+ HSURF hsurf;
+ DHPDEV dhpdev;
+ HDEV hdev;
+ SIZEL sizlBitmap;
+ ULONG cjBits;
+ PVOID pvBits;
+ PVOID pvScan0;
+ LONG lDelta;
+ ULONG iUniq;
+ ULONG iBitmapFormat;
+ USHORT iType;
+ USHORT fjBitmap;
+} SURFOBJ;
+
+typedef struct _TYPE1_FONT {
+ HANDLE hPFM;
+ HANDLE hPFB;
+ ULONG ulIdentifier;
+} TYPE1_FONT;
+
+typedef struct _WNDOBJ {
+ CLIPOBJ coClient;
+ PVOID pvConsumer;
+ RECTL rclClient;
+ SURFOBJ *psoOwner;
+} WNDOBJ, *PWNDOBJ;
+
+typedef struct _XFORML {
+ FLOATL eM11;
+ FLOATL eM12;
+ FLOATL eM21;
+ FLOATL eM22;
+ FLOATL eDx;
+ FLOATL eDy;
+} XFORML, *PXFORML;
+
+typedef struct _XFORMOBJ {
+ ULONG ulReserved;
+} XFORMOBJ;
+
+/* XLATEOBJ.flXlate constants */
+#define XO_TRIVIAL 0x00000001
+#define XO_TABLE 0x00000002
+#define XO_TO_MONO 0x00000004
+#define XO_FROM_CMYK 0x00000008
+#define XO_DEVICE_ICM 0x00000010
+#define XO_HOST_ICM 0x00000020
+
+typedef struct _XLATEOBJ {
+ ULONG iUniq;
+ FLONG flXlate;
+ USHORT iSrcType;
+ USHORT iDstType;
+ ULONG cEntries;
+ ULONG *pulXlate;
+} XLATEOBJ;
+
+typedef VOID DDKAPI (CALLBACK *WNDOBJCHANGEPROC)(
+ /*IN*/ WNDOBJ *pwo,
+ /*IN*/ FLONG fl);
+
+
+WIN32KAPI
+HANDLE
+DDKAPI
+BRUSHOBJ_hGetColorTransform(
+ /*IN*/ BRUSHOBJ *pbo);
+
+WIN32KAPI
+PVOID
+DDKAPI
+BRUSHOBJ_pvAllocRbrush(
+ /*IN*/ BRUSHOBJ *pbo,
+ /*IN*/ ULONG cj);
+
+WIN32KAPI
+PVOID
+DDKAPI
+BRUSHOBJ_pvGetRbrush(
+ /*IN*/ BRUSHOBJ *pbo);
+
+WIN32KAPI
+ULONG
+DDKAPI
+BRUSHOBJ_ulGetBrushColor(
+ /*IN*/ BRUSHOBJ *pbo);
+
+WIN32KAPI
+BOOL
+DDKAPI
+CLIPOBJ_bEnum(
+ /*IN*/ CLIPOBJ *pco,
+ /*IN*/ ULONG cj,
+
+ /*OUT*/ ULONG *pv);
+
+/* CLIPOBJ_cEnumStart.iType constants */
+#define CT_RECTANGLES 0L
+
+/* CLIPOBJ_cEnumStart.iDirection constants */
+#define CD_RIGHTDOWN 0x00000000
+#define CD_LEFTDOWN 0x00000001
+#define CD_LEFTWARDS 0x00000001
+#define CD_RIGHTUP 0x00000002
+#define CD_UPWARDS 0x00000002
+#define CD_LEFTUP 0x00000003
+#define CD_ANY 0x00000004
+
+WIN32KAPI
+ULONG
+DDKAPI
+CLIPOBJ_cEnumStart(
+ /*IN*/ CLIPOBJ *pco,
+ /*IN*/ BOOL bAll,
+ /*IN*/ ULONG iType,
+ /*IN*/ ULONG iDirection,
+ /*IN*/ ULONG cLimit);
+
+WIN32KAPI
+PATHOBJ*
+DDKAPI
+CLIPOBJ_ppoGetPath(
+ /*IN*/ CLIPOBJ *pco);
+
+WIN32KAPI
+VOID
+DDKAPI
+EngAcquireSemaphore(
+ /*IN*/ HSEMAPHORE hsem);
+
+#define FL_ZERO_MEMORY 0x00000001
+#define FL_NONPAGED_MEMORY 0x00000002
+
+WIN32KAPI
+PVOID
+DDKAPI
+EngAllocMem(
+ /*IN*/ ULONG Flags,
+ /*IN*/ ULONG MemSize,
+ /*IN*/ ULONG Tag);
+
+WIN32KAPI
+PVOID
+DDKAPI
+EngAllocPrivateUserMem(
+ /*IN*/ PDD_SURFACE_LOCAL psl,
+ /*IN*/ SIZE_T cj,
+ /*IN*/ ULONG tag);
+
+WIN32KAPI
+PVOID
+DDKAPI
+EngAllocUserMem(
+ /*IN*/ SIZE_T cj,
+ /*IN*/ ULONG tag);
+
+WIN32KAPI
+BOOL
+DDKAPI
+EngAlphaBlend(
+ /*IN*/ SURFOBJ *psoDest,
+ /*IN*/ SURFOBJ *psoSrc,
+ /*IN*/ CLIPOBJ *pco,
+ /*IN*/ XLATEOBJ *pxlo,
+ /*IN*/ RECTL *prclDest,
+ /*IN*/ RECTL *prclSrc,
+ /*IN*/ BLENDOBJ *pBlendObj);
+
+/* EngAssociateSurface.flHooks constants */
+#define HOOK_BITBLT 0x00000001
+#define HOOK_STRETCHBLT 0x00000002
+#define HOOK_PLGBLT 0x00000004
+#define HOOK_TEXTOUT 0x00000008
+#define HOOK_PAINT 0x00000010
+#define HOOK_STROKEPATH 0x00000020
+#define HOOK_FILLPATH 0x00000040
+#define HOOK_STROKEANDFILLPATH 0x00000080
+#define HOOK_LINETO 0x00000100
+#define HOOK_COPYBITS 0x00000400
+#define HOOK_MOVEPANNING 0x00000800
+#define HOOK_SYNCHRONIZE 0x00001000
+#define HOOK_STRETCHBLTROP 0x00002000
+#define HOOK_SYNCHRONIZEACCESS 0x00004000
+#define HOOK_TRANSPARENTBLT 0x00008000
+#define HOOK_ALPHABLEND 0x00010000
+#define HOOK_GRADIENTFILL 0x00020000
+#define HOOK_FLAGS 0x0003b5ff
+
+WIN32KAPI
+BOOL
+DDKAPI
+EngAssociateSurface(
+ /*IN*/ HSURF hsurf,
+ /*IN*/ HDEV hdev,
+ /*IN*/ FLONG flHooks);
+
+WIN32KAPI
+BOOL
+DDKAPI
+EngBitBlt(
+ /*IN*/ SURFOBJ *psoTrg,
+ /*IN*/ SURFOBJ *psoSrc,
+ /*IN*/ SURFOBJ *psoMask,
+ /*IN*/ CLIPOBJ *pco,
+ /*IN*/ XLATEOBJ *pxlo,
+ /*IN*/ RECTL *prclTrg,
+ /*IN*/ POINTL *pptlSrc,
+ /*IN*/ POINTL *pptlMask,
+ /*IN*/ BRUSHOBJ *pbo,
+ /*IN*/ POINTL *pptlBrush,
+ /*IN*/ ROP4 rop4);
+
+WIN32KAPI
+BOOL
+DDKAPI
+EngCheckAbort(
+ /*IN*/ SURFOBJ *pso);
+
+WIN32KAPI
+VOID
+DDKAPI
+EngClearEvent(
+ /*IN*/ PEVENT pEvent);
+
+WIN32KAPI
+FD_GLYPHSET*
+DDKAPI
+EngComputeGlyphSet(
+ /*IN*/ INT nCodePage,
+ /*IN*/ INT nFirstChar,
+ /*IN*/ INT cChars);
+
+/* EngControlSprites.fl constants */
+#define ECS_TEARDOWN 0x00000001
+#define ECS_REDRAW 0x00000002
+
+WIN32KAPI
+BOOL
+DDKAPI
+EngControlSprites(
+ /*IN*/ WNDOBJ *pwo,
+ /*IN*/ FLONG fl);
+
+WIN32KAPI
+BOOL
+DDKAPI
+EngCopyBits(
+
+ /*OUT*/ SURFOBJ *psoDest,
+ /*IN*/ SURFOBJ *psoSrc,
+ /*IN*/ CLIPOBJ *pco,
+ /*IN*/ XLATEOBJ *pxlo,
+ /*IN*/ RECTL *prclDest,
+ /*IN*/ POINTL *pptlSrc);
+
+WIN32KAPI
+HBITMAP
+DDKAPI
+EngCreateBitmap(
+ /*IN*/ SIZEL sizl,
+ /*IN*/ LONG lWidth,
+ /*IN*/ ULONG iFormat,
+ /*IN*/ FLONG fl,
+ /*IN*/ PVOID pvBits);
+
+WIN32KAPI
+CLIPOBJ*
+DDKAPI
+EngCreateClip(
+ VOID);
+
+WIN32KAPI
+HBITMAP
+DDKAPI
+EngCreateDeviceBitmap(
+ /*IN*/ DHSURF dhsurf,
+ /*IN*/ SIZEL sizl,
+ /*IN*/ ULONG iFormatCompat);
+
+WIN32KAPI
+HSURF
+DDKAPI
+EngCreateDeviceSurface(
+ DHSURF dhsurf,
+ SIZEL sizl,
+ ULONG iFormatCompat);
+
+#if 0
+WIN32KAPI
+HDRVOBJ
+DDKAPI
+EngCreateDriverObj(
+ PVOID pvObj,
+ FREEOBJPROC pFreeObjProc,
+ HDEV hdev);
+#endif
+
+WIN32KAPI
+BOOL
+DDKAPI
+EngCreateEvent(
+
+ /*OUT*/ PEVENT *ppEvent);
+
+/* EngCreatePalette.iMode constants */
+#define PAL_INDEXED 0x00000001
+#define PAL_BITFIELDS 0x00000002
+#define PAL_RGB 0x00000004
+#define PAL_BGR 0x00000008
+#define PAL_CMYK 0x00000010
+
+WIN32KAPI
+HPALETTE
+DDKAPI
+EngCreatePalette(
+ /*IN*/ ULONG iMode,
+ /*IN*/ ULONG cColors,
+ /*IN*/ ULONG *pulColors,
+ /*IN*/ FLONG flRed,
+ /*IN*/ FLONG flGreen,
+ /*IN*/ FLONG flBlue);
+
+WIN32KAPI
+PATHOBJ*
+DDKAPI
+EngCreatePath(
+ VOID);
+
+WIN32KAPI
+HSEMAPHORE
+DDKAPI
+EngCreateSemaphore(
+ VOID);
+
+/* EngCreateWnd.fl constants */
+#define WO_RGN_CLIENT_DELTA 0x00000001
+#define WO_RGN_CLIENT 0x00000002
+#define WO_RGN_SURFACE_DELTA 0x00000004
+#define WO_RGN_SURFACE 0x00000008
+#define WO_RGN_UPDATE_ALL 0x00000010
+#define WO_RGN_WINDOW 0x00000020
+#define WO_DRAW_NOTIFY 0x00000040
+#define WO_SPRITE_NOTIFY 0x00000080
+#define WO_RGN_DESKTOP_COORD 0x00000100
+
+WIN32KAPI
+WNDOBJ*
+DDKAPI
+EngCreateWnd(
+ SURFOBJ *pso,
+ HWND hwnd,
+ WNDOBJCHANGEPROC pfn,
+ FLONG fl,
+ int iPixelFormat);
+
+WIN32KAPI
+VOID
+DDKAPI
+EngDebugBreak(
+ VOID);
+
+WIN32KAPI
+VOID
+DDKAPI
+EngDebugPrint(
+ /*IN*/ PCHAR StandardPrefix,
+ /*IN*/ PCHAR DebugMessage,
+ /*IN*/ va_list ap);
+
+WIN32KAPI
+VOID
+DDKAPI
+EngDeleteClip(
+ /*IN*/ CLIPOBJ *pco);
+
+WIN32KAPI
+BOOL
+DDKAPI
+EngDeleteDriverObj(
+ /*IN*/ HDRVOBJ hdo,
+ /*IN*/ BOOL bCallBack,
+ /*IN*/ BOOL bLocked);
+
+WIN32KAPI
+BOOL
+DDKAPI
+EngDeleteEvent(
+ /*IN*/ PEVENT pEvent);
+
+WIN32KAPI
+BOOL
+DDKAPI
+EngDeleteFile(
+ /*IN*/ LPWSTR pwszFileName);
+
+WIN32KAPI
+BOOL
+DDKAPI
+EngDeletePalette(
+ /*IN*/ HPALETTE hpal);
+
+WIN32KAPI
+VOID
+DDKAPI
+EngDeletePath(
+ /*IN*/ PATHOBJ *ppo);
+
+WIN32KAPI
+VOID
+DDKAPI
+EngDeleteSafeSemaphore(
+ /*IN OUT*/ ENGSAFESEMAPHORE *pssem);
+
+WIN32KAPI
+VOID
+DDKAPI
+EngDeleteSemaphore(
+ /*IN OUT*/ HSEMAPHORE hsem);
+
+WIN32KAPI
+BOOL
+DDKAPI
+EngDeleteSurface(
+ /*IN*/ HSURF hsurf);
+
+WIN32KAPI
+VOID
+DDKAPI
+EngDeleteWnd(
+ /*IN*/ WNDOBJ *pwo);
+
+WIN32KAPI
+DWORD
+DDKAPI
+EngDeviceIoControl(
+ /*IN*/ HANDLE hDevice,
+ /*IN*/ DWORD dwIoControlCode,
+ /*IN*/ LPVOID lpInBuffer,
+ /*IN*/ DWORD nInBufferSize,
+ /*IN OUT*/ LPVOID lpOutBuffer,
+ /*IN*/ DWORD nOutBufferSize,
+
+ /*OUT*/ LPDWORD lpBytesReturned);
+
+WIN32KAPI
+ULONG
+DDKAPI
+EngDitherColor(
+ /*IN*/ HDEV hdev,
+ /*IN*/ ULONG iMode,
+ /*IN*/ ULONG rgb,
+
+ /*OUT*/ ULONG *pul);
+
+WIN32KAPI
+BOOL
+DDKAPI
+EngEnumForms(
+ /*IN*/ HANDLE hPrinter,
+ /*IN*/ DWORD Level,
+
+ /*OUT*/ LPBYTE pForm,
+ /*IN*/ DWORD cbBuf,
+
+ /*OUT*/ LPDWORD pcbNeeded,
+
+ /*OUT*/ LPDWORD pcReturned);
+
+WIN32KAPI
+BOOL
+DDKAPI
+EngEraseSurface(
+ /*IN*/ SURFOBJ *pso,
+ /*IN*/ RECTL *prcl,
+ /*IN*/ ULONG iColor);
+
+WIN32KAPI
+BOOL
+DDKAPI
+EngFillPath(
+ /*IN*/ SURFOBJ *pso,
+ /*IN*/ PATHOBJ *ppo,
+ /*IN*/ CLIPOBJ *pco,
+ /*IN*/ BRUSHOBJ *pbo,
+ /*IN*/ POINTL *pptlBrushOrg,
+ /*IN*/ MIX mix,
+ /*IN*/ FLONG flOptions);
+
+WIN32KAPI
+PVOID
+DDKAPI
+EngFindImageProcAddress(
+ /*IN*/ HANDLE hModule,
+ /*IN*/ LPSTR lpProcName);
+
+WIN32KAPI
+PVOID
+DDKAPI
+EngFindResource(
+ /*IN*/ HANDLE h,
+ /*IN*/ int iName,
+ /*IN*/ int iType,
+
+ /*OUT*/ PULONG pulSize);
+
+WIN32KAPI
+PVOID
+DDKAPI
+EngFntCacheAlloc(
+ /*IN*/ ULONG FastCheckSum,
+ /*IN*/ ULONG ulSize);
+
+/* EngFntCacheFault.iFaultMode constants */
+#define ENG_FNT_CACHE_READ_FAULT 0x00000001
+#define ENG_FNT_CACHE_WRITE_FAULT 0x00000002
+
+WIN32KAPI
+VOID
+DDKAPI
+EngFntCacheFault(
+ /*IN*/ ULONG ulFastCheckSum,
+ /*IN*/ ULONG iFaultMode);
+
+WIN32KAPI
+PVOID
+DDKAPI
+EngFntCacheLookUp(
+ /*IN*/ ULONG FastCheckSum,
+
+ /*OUT*/ ULONG *pulSize);
+
+WIN32KAPI
+VOID
+DDKAPI
+EngFreeMem(
+ /*IN*/ PVOID Mem);
+
+WIN32KAPI
+VOID
+DDKAPI
+EngFreeModule(
+ /*IN*/ HANDLE h);
+
+WIN32KAPI
+VOID
+DDKAPI
+EngFreePrivateUserMem(
+ /*IN*/ PDD_SURFACE_LOCAL psl,
+ /*IN*/ PVOID pv);
+
+WIN32KAPI
+VOID
+DDKAPI
+EngFreeUserMem(
+ /*IN*/ PVOID pv);
+
+WIN32KAPI
+VOID
+DDKAPI
+EngGetCurrentCodePage(
+
+ /*OUT*/ PUSHORT OemCodePage,
+
+ /*OUT*/ PUSHORT AnsiCodePage);
+
+WIN32KAPI
+HANDLE
+DDKAPI
+EngGetCurrentProcessId(
+ VOID);
+
+WIN32KAPI
+HANDLE
+DDKAPI
+EngGetCurrentThreadId(
+ VOID);
+
+WIN32KAPI
+LPWSTR
+DDKAPI
+EngGetDriverName(
+ /*IN*/ HDEV hdev);
+
+WIN32KAPI
+BOOL
+DDKAPI
+EngGetFileChangeTime(
+ /*IN*/ HANDLE h,
+
+ /*OUT*/ LARGE_INTEGER *pChangeTime);
+
+WIN32KAPI
+BOOL
+DDKAPI
+EngGetFilePath(
+ /*IN*/ HANDLE h,
+
+ /*OUT*/ WCHAR (*pDest)[MAX_PATH+1]);
+
+WIN32KAPI
+BOOL
+DDKAPI
+EngGetForm(
+ /*IN*/ HANDLE hPrinter,
+ /*IN*/ LPWSTR pFormName,
+ /*IN*/ DWORD Level,
+
+ /*OUT*/ LPBYTE pForm,
+ /*IN*/ DWORD cbBuf,
+
+ /*OUT*/ LPDWORD pcbNeeded);
+
+WIN32KAPI
+ULONG
+DDKAPI
+EngGetLastError(
+ VOID);
+
+WIN32KAPI
+BOOL
+DDKAPI
+EngGetPrinter(
+ /*IN*/ HANDLE hPrinter,
+ /*IN*/ DWORD dwLevel,
+
+ /*OUT*/ LPBYTE pPrinter,
+ /*IN*/ DWORD cbBuf,
+
+ /*OUT*/ LPDWORD pcbNeeded);
+
+WIN32KAPI
+DWORD
+DDKAPI
+EngGetPrinterData(
+ /*IN*/ HANDLE hPrinter,
+ /*IN*/ LPWSTR pValueName,
+
+ /*OUT*/ LPDWORD pType,
+
+ /*OUT*/ LPBYTE pData,
+ /*IN*/ DWORD nSize,
+
+ /*OUT*/ LPDWORD pcbNeeded);
+
+WIN32KAPI
+LPWSTR
+DDKAPI
+EngGetPrinterDataFileName(
+ /*IN*/ HDEV hdev);
+
+WIN32KAPI
+BOOL
+DDKAPI
+EngGetPrinterDriver(
+ /*IN*/ HANDLE hPrinter,
+ /*IN*/ LPWSTR pEnvironment,
+ /*IN*/ DWORD dwLevel,
+
+ /*OUT*/ BYTE *lpbDrvInfo,
+ /*IN*/ DWORD cbBuf,
+
+ /*OUT*/ DWORD *pcbNeeded);
+
+WIN32KAPI
+HANDLE
+DDKAPI
+EngGetProcessHandle(
+ VOID);
+
+WIN32KAPI
+BOOL
+DDKAPI
+EngGetType1FontList(
+ /*IN*/ HDEV hdev,
+
+ /*OUT*/ TYPE1_FONT *pType1Buffer,
+ /*IN*/ ULONG cjType1Buffer,
+
+ /*OUT*/ PULONG pulLocalFonts,
+
+ /*OUT*/ PULONG pulRemoteFonts,
+
+ /*OUT*/ LARGE_INTEGER *pLastModified);
+
+WIN32KAPI
+BOOL
+DDKAPI
+EngGradientFill(
+ /*IN*/ SURFOBJ *psoDest,
+ /*IN*/ CLIPOBJ *pco,
+ /*IN*/ XLATEOBJ *pxlo,
+ /*IN*/ TRIVERTEX *pVertex,
+ /*IN*/ ULONG nVertex,
+ /*IN*/ PVOID pMesh,
+ /*IN*/ ULONG nMesh,
+ /*IN*/ RECTL *prclExtents,
+ /*IN*/ POINTL *pptlDitherOrg,
+ /*IN*/ ULONG ulMode);
+
+/* EngHangNotification return values */
+#define EHN_RESTORED 0x00000000
+#define EHN_ERROR 0x00000001
+
+WIN32KAPI
+ULONG
+DDKAPI
+EngHangNotification(
+ /*IN*/ HDEV hDev,
+ /*IN*/ PVOID Reserved);
+
+WIN32KAPI
+BOOL
+DDKAPI
+EngInitializeSafeSemaphore(
+
+ /*OUT*/ ENGSAFESEMAPHORE *pssem);
+
+WIN32KAPI
+BOOL
+DDKAPI
+EngIsSemaphoreOwned(
+ /*IN*/ HSEMAPHORE hsem);
+
+WIN32KAPI
+BOOL
+DDKAPI
+EngIsSemaphoreOwnedByCurrentThread(
+ /*IN*/ HSEMAPHORE hsem);
+
+WIN32KAPI
+BOOL
+DDKAPI
+EngLineTo(
+ SURFOBJ *pso,
+ CLIPOBJ *pco,
+ BRUSHOBJ *pbo,
+ LONG x1,
+ LONG y1,
+ LONG x2,
+ LONG y2,
+ RECTL *prclBounds,
+ MIX mix);
+
+WIN32KAPI
+HANDLE
+DDKAPI
+EngLoadImage(
+ /*IN*/ LPWSTR pwszDriver);
+
+WIN32KAPI
+HANDLE
+DDKAPI
+EngLoadModule(
+ /*IN*/ LPWSTR pwsz);
+
+WIN32KAPI
+HANDLE
+DDKAPI
+EngLoadModuleForWrite(
+ /*IN*/ LPWSTR pwsz,
+ /*IN*/ ULONG cjSizeOfModule);
+
+WIN32KAPI
+PDD_SURFACE_LOCAL
+DDKAPI
+EngLockDirectDrawSurface(
+ /*IN*/ HANDLE hSurface);
+
+WIN32KAPI
+DRIVEROBJ*
+DDKAPI
+EngLockDriverObj(
+ /*IN*/ HDRVOBJ hdo);
+
+WIN32KAPI
+SURFOBJ*
+DDKAPI
+EngLockSurface(
+ /*IN*/ HSURF hsurf);
+
+WIN32KAPI
+BOOL
+DDKAPI
+EngLpkInstalled(
+ VOID);
+
+WIN32KAPI
+PEVENT
+DDKAPI
+EngMapEvent(
+ /*IN*/ HDEV hDev,
+ /*IN*/ HANDLE hUserObject,
+ /*IN*/ PVOID Reserved1,
+ /*IN*/ PVOID Reserved2,
+ /*IN*/ PVOID Reserved3);
+
+WIN32KAPI
+PVOID
+DDKAPI
+EngMapFile(
+ /*IN*/ LPWSTR pwsz,
+ /*IN*/ ULONG cjSize,
+
+ /*OUT*/ ULONG_PTR *piFile);
+
+WIN32KAPI
+BOOL
+DDKAPI
+EngMapFontFile(
+ ULONG_PTR iFile,
+ PULONG *ppjBuf,
+ ULONG *pcjBuf);
+
+WIN32KAPI
+BOOL
+DDKAPI
+EngMapFontFileFD(
+ /*IN*/ ULONG_PTR iFile,
+
+ /*OUT*/ PULONG *ppjBuf,
+
+ /*OUT*/ ULONG *pcjBuf);
+
+WIN32KAPI
+PVOID
+DDKAPI
+EngMapModule(
+ /*IN*/ HANDLE h,
+
+ /*OUT*/ PULONG pSize);
+
+WIN32KAPI
+BOOL
+DDKAPI
+EngMarkBandingSurface(
+ /*IN*/ HSURF hsurf);
+
+/* EngModifySurface.flSurface constants */
+#define MS_NOTSYSTEMMEMORY 0x00000001
+#define MS_SHAREDACCESS 0x00000002
+
+WIN32KAPI
+BOOL
+DDKAPI
+EngModifySurface(
+ /*IN*/ HSURF hsurf,
+ /*IN*/ HDEV hdev,
+ /*IN*/ FLONG flHooks,
+ /*IN*/ FLONG flSurface,
+ /*IN*/ DHSURF dhsurf,
+ /*IN*/ VOID *pvScan0,
+ /*IN*/ LONG lDelta,
+ /*IN*/ VOID *pvReserved);
+
+WIN32KAPI
+VOID
+DDKAPI
+EngMovePointer(
+ /*IN*/ SURFOBJ *pso,
+ /*IN*/ LONG x,
+ /*IN*/ LONG y,
+ /*IN*/ RECTL *prcl);
+
+WIN32KAPI
+int
+DDKAPI
+EngMulDiv(
+ /*IN*/ int a,
+ /*IN*/ int b,
+ /*IN*/ int c);
+
+WIN32KAPI
+VOID
+DDKAPI
+EngMultiByteToUnicodeN(
+
+ /*OUT*/ LPWSTR UnicodeString,
+ /*IN*/ ULONG MaxBytesInUnicodeString,
+
+ /*OUT*/ PULONG BytesInUnicodeString,
+ /*IN*/ PCHAR MultiByteString,
+ /*IN*/ ULONG BytesInMultiByteString);
+
+WIN32KAPI
+INT
+DDKAPI
+EngMultiByteToWideChar(
+ /*IN*/ UINT CodePage,
+
+ /*OUT*/ LPWSTR WideCharString,
+ /*IN*/ INT BytesInWideCharString,
+ /*IN*/ LPSTR MultiByteString,
+ /*IN*/ INT BytesInMultiByteString);
+
+WIN32KAPI
+BOOL
+DDKAPI
+EngPaint(
+ /*IN*/ SURFOBJ *pso,
+ /*IN*/ CLIPOBJ *pco,
+ /*IN*/ BRUSHOBJ *pbo,
+ /*IN*/ POINTL *pptlBrushOrg,
+ /*IN*/ MIX mix);
+
+WIN32KAPI
+BOOL
+DDKAPI
+EngPlgBlt(
+ /*IN*/ SURFOBJ *psoTrg,
+ /*IN*/ SURFOBJ *psoSrc,
+ /*IN*/ SURFOBJ *psoMsk,
+ /*IN*/ CLIPOBJ *pco,
+ /*IN*/ XLATEOBJ *pxlo,
+ /*IN*/ COLORADJUSTMENT *pca,
+ /*IN*/ POINTL *pptlBrushOrg,
+ /*IN*/ POINTFIX *pptfx,
+ /*IN*/ RECTL *prcl,
+ /*IN*/ POINTL *pptl,
+ /*IN*/ ULONG iMode);
+
+WIN32KAPI
+VOID
+DDKAPI
+EngProbeForRead(
+ /*IN*/ PVOID Address,
+ /*IN*/ ULONG Length,
+ /*IN*/ ULONG Alignment);
+
+WIN32KAPI
+VOID
+DDKAPI
+EngProbeForReadAndWrite(
+ /*IN*/ PVOID Address,
+ /*IN*/ ULONG Length,
+ /*IN*/ ULONG Alignment);
+
+typedef enum _ENG_DEVICE_ATTRIBUTE {
+ QDA_RESERVED = 0,
+ QDA_ACCELERATION_LEVEL
+} ENG_DEVICE_ATTRIBUTE;
+
+WIN32KAPI
+BOOL
+DDKAPI
+EngQueryDeviceAttribute(
+ /*IN*/ HDEV hdev,
+ /*IN*/ ENG_DEVICE_ATTRIBUTE devAttr,
+ /*IN*/ VOID *pvIn,
+ /*IN*/ ULONG ulInSize,
+
+ /*OUT*/ VOID *pvOut,
+
+ /*OUT*/ ULONG ulOutSize);
+
+WIN32KAPI
+LARGE_INTEGER
+DDKAPI
+EngQueryFileTimeStamp(
+ /*IN*/ LPWSTR pwsz);
+
+WIN32KAPI
+VOID
+DDKAPI
+EngQueryLocalTime(
+
+ /*OUT*/ PENG_TIME_FIELDS ptf);
+
+WIN32KAPI
+ULONG
+DDKAPI
+EngQueryPalette(
+ /*IN*/ HPALETTE hPal,
+
+ /*OUT*/ ULONG *piMode,
+ /*IN*/ ULONG cColors,
+
+ /*OUT*/ ULONG *pulColors);
+
+WIN32KAPI
+VOID
+DDKAPI
+EngQueryPerformanceCounter(
+
+ /*OUT*/ LONGLONG *pPerformanceCount);
+
+WIN32KAPI
+VOID
+DDKAPI
+EngQueryPerformanceFrequency(
+
+ /*OUT*/ LONGLONG *pFrequency);
+
+typedef enum _ENG_SYSTEM_ATTRIBUTE {
+ EngProcessorFeature = 1,
+ EngNumberOfProcessors,
+ EngOptimumAvailableUserMemory,
+ EngOptimumAvailableSystemMemory,
+} ENG_SYSTEM_ATTRIBUTE;
+
+#define QSA_MMX 0x00000100
+#define QSA_SSE 0x00002000
+#define QSA_3DNOW 0x00004000
+
+WIN32KAPI
+BOOL
+DDKAPI
+EngQuerySystemAttribute(
+ /*IN*/ ENG_SYSTEM_ATTRIBUTE CapNum,
+
+ /*OUT*/ PDWORD pCapability);
+
+WIN32KAPI
+LONG
+DDKAPI
+EngReadStateEvent(
+ /*IN*/ PEVENT pEvent);
+
+WIN32KAPI
+VOID
+DDKAPI
+EngReleaseSemaphore(
+ /*IN*/ HSEMAPHORE hsem);
+
+WIN32KAPI
+BOOL
+DDKAPI
+EngRestoreFloatingPointState(
+ /*IN*/ VOID *pBuffer);
+
+WIN32KAPI
+ULONG
+DDKAPI
+EngSaveFloatingPointState(
+
+ /*OUT*/ VOID *pBuffer,
+ /*IN*/ ULONG cjBufferSize);
+
+WIN32KAPI
+HANDLE
+DDKAPI
+EngSecureMem(
+ /*IN*/ PVOID Address,
+ /*IN*/ ULONG Length);
+
+WIN32KAPI
+LONG
+DDKAPI
+EngSetEvent(
+ /*IN*/ PEVENT pEvent);
+
+WIN32KAPI
+VOID
+DDKAPI
+EngSetLastError(
+ /*IN*/ ULONG iError);
+
+WIN32KAPI
+ULONG
+DDKAPI
+EngSetPointerShape(
+ /*IN*/ SURFOBJ *pso,
+ /*IN*/ SURFOBJ *psoMask,
+ /*IN*/ SURFOBJ *psoColor,
+ /*IN*/ XLATEOBJ *pxlo,
+ /*IN*/ LONG xHot,
+ /*IN*/ LONG yHot,
+ /*IN*/ LONG x,
+ /*IN*/ LONG y,
+ /*IN*/ RECTL *prcl,
+ /*IN*/ FLONG fl);
+
+WIN32KAPI
+BOOL
+DDKAPI
+EngSetPointerTag(
+ /*IN*/ HDEV hdev,
+ /*IN*/ SURFOBJ *psoMask,
+ /*IN*/ SURFOBJ *psoColor,
+ /*IN*/ XLATEOBJ *pxlo,
+ /*IN*/ FLONG fl);
+
+WIN32KAPI
+DWORD
+DDKAPI
+EngSetPrinterData(
+ /*IN*/ HANDLE hPrinter,
+ /*IN*/ LPWSTR pType,
+ /*IN*/ DWORD dwType,
+ /*IN*/ LPBYTE lpbPrinterData,
+ /*IN*/ DWORD cjPrinterData);
+
+typedef int DDKCDECLAPI (*SORTCOMP)(const void *pv1, const void *pv2);
+
+WIN32KAPI
+VOID
+DDKAPI
+EngSort(
+ /*IN OUT*/ PBYTE pjBuf,
+ /*IN*/ ULONG c,
+ /*IN*/ ULONG cjElem,
+ /*IN*/ SORTCOMP pfnComp);
+
+WIN32KAPI
+BOOL
+DDKAPI
+EngStretchBlt(
+ /*IN*/ SURFOBJ *psoDest,
+ /*IN*/ SURFOBJ *psoSrc,
+ /*IN*/ SURFOBJ *psoMask,
+ /*IN*/ CLIPOBJ *pco,
+ /*IN*/ XLATEOBJ *pxlo,
+ /*IN*/ COLORADJUSTMENT *pca,
+ /*IN*/ POINTL *pptlHTOrg,
+ /*IN*/ RECTL *prclDest,
+ /*IN*/ RECTL *prclSrc,
+ /*IN*/ POINTL *pptlMask,
+ /*IN*/ ULONG iMode);
+
+WIN32KAPI
+BOOL
+DDKAPI
+EngStretchBltROP(
+ /*IN*/ SURFOBJ *psoDest,
+ /*IN*/ SURFOBJ *psoSrc,
+ /*IN*/ SURFOBJ *psoMask,
+ /*IN*/ CLIPOBJ *pco,
+ /*IN*/ XLATEOBJ *pxlo,
+ /*IN*/ COLORADJUSTMENT *pca,
+ /*IN*/ POINTL *pptlHTOrg,
+ /*IN*/ RECTL *prclDest,
+ /*IN*/ RECTL *prclSrc,
+ /*IN*/ POINTL *pptlMask,
+ /*IN*/ ULONG iMode,
+ /*IN*/ BRUSHOBJ *pbo,
+ /*IN*/ DWORD rop4);
+
+WIN32KAPI
+BOOL
+DDKAPI
+EngStrokeAndFillPath(
+ /*IN*/ SURFOBJ *pso,
+ /*IN*/ PATHOBJ *ppo,
+ /*IN*/ CLIPOBJ *pco,
+ /*IN*/ XFORMOBJ *pxo,
+ /*IN*/ BRUSHOBJ *pboStroke,
+ /*IN*/ LINEATTRS *plineattrs,
+ /*IN*/ BRUSHOBJ *pboFill,
+ /*IN*/ POINTL *pptlBrushOrg,
+ /*IN*/ MIX mixFill,
+ /*IN*/ FLONG flOptions);
+
+WIN32KAPI
+BOOL
+DDKAPI
+EngStrokePath(
+ /*IN*/ SURFOBJ *pso,
+ /*IN*/ PATHOBJ *ppo,
+ /*IN*/ CLIPOBJ *pco,
+ /*IN*/ XFORMOBJ *pxo,
+ /*IN*/ BRUSHOBJ *pbo,
+ /*IN*/ POINTL *pptlBrushOrg,
+ /*IN*/ LINEATTRS *plineattrs,
+ /*IN*/ MIX mix);
+
+WIN32KAPI
+BOOL
+DDKAPI
+EngTextOut(
+ /*IN*/ SURFOBJ *pso,
+ /*IN*/ STROBJ *pstro,
+ /*IN*/ FONTOBJ *pfo,
+ /*IN*/ CLIPOBJ *pco,
+ /*IN*/ RECTL *prclExtra,
+ /*IN*/ RECTL *prclOpaque,
+ /*IN*/ BRUSHOBJ *pboFore,
+ /*IN*/ BRUSHOBJ *pboOpaque,
+ /*IN*/ POINTL *pptlOrg,
+ /*IN*/ MIX mix);
+
+WIN32KAPI
+BOOL
+DDKAPI
+EngTransparentBlt(
+ /*IN*/ SURFOBJ *psoDst,
+ /*IN*/ SURFOBJ *psoSrc,
+ /*IN*/ CLIPOBJ *pco,
+ /*IN*/ XLATEOBJ *pxlo,
+ /*IN*/ RECTL *prclDst,
+ /*IN*/ RECTL *prclSrc,
+ /*IN*/ ULONG iTransColor,
+ /*IN*/ ULONG ulReserved);
+
+WIN32KAPI
+VOID
+DDKAPI
+EngUnicodeToMultiByteN(
+
+ /*OUT*/ PCHAR MultiByteString,
+ /*IN*/ ULONG MaxBytesInMultiByteString,
+
+ /*OUT*/ PULONG BytesInMultiByteString,
+ /*IN*/ PWSTR UnicodeString,
+ /*IN*/ ULONG BytesInUnicodeString);
+
+WIN32KAPI
+VOID
+DDKAPI
+EngUnloadImage(
+ /*IN*/ HANDLE hModule);
+
+WIN32KAPI
+BOOL
+DDKAPI
+EngUnlockDirectDrawSurface(
+ /*IN*/ PDD_SURFACE_LOCAL pSurface);
+
+WIN32KAPI
+BOOL
+DDKAPI
+EngUnlockDriverObj(
+ /*IN*/ HDRVOBJ hdo);
+
+WIN32KAPI
+VOID
+DDKAPI
+EngUnlockSurface(
+ /*IN*/ SURFOBJ *pso);
+
+WIN32KAPI
+BOOL
+DDKAPI
+EngUnmapEvent(
+ /*IN*/ PEVENT pEvent);
+
+WIN32KAPI
+BOOL
+DDKAPI
+EngUnmapFile(
+ /*IN*/ ULONG_PTR iFile);
+
+WIN32KAPI
+VOID
+DDKAPI
+EngUnmapFontFile(
+ ULONG_PTR iFile);
+
+WIN32KAPI
+VOID
+DDKAPI
+EngUnmapFontFileFD(
+ /*IN*/ ULONG_PTR iFile);
+
+WIN32KAPI
+VOID
+DDKAPI
+EngUnsecureMem(
+ /*IN*/ HANDLE hSecure);
+
+WIN32KAPI
+BOOL
+DDKAPI
+EngWaitForSingleObject(
+ /*IN*/ PEVENT pEvent,
+ /*IN*/ PLARGE_INTEGER pTimeOut);
+
+WIN32KAPI
+INT
+DDKAPI
+EngWideCharToMultiByte(
+ /*IN*/ UINT CodePage,
+ /*IN*/ LPWSTR WideCharString,
+ /*IN*/ INT BytesInWideCharString,
+
+ /*OUT*/ LPSTR MultiByteString,
+ /*IN*/ INT BytesInMultiByteString);
+
+WIN32KAPI
+BOOL
+DDKAPI
+EngWritePrinter(
+ /*IN*/ HANDLE hPrinter,
+ /*IN*/ LPVOID pBuf,
+ /*IN*/ DWORD cbBuf,
+
+ /*OUT*/ LPDWORD pcWritten);
+
+WIN32KAPI
+VOID
+DDKAPI
+FLOATOBJ_Add(
+ /*IN OUT*/ PFLOATOBJ pf,
+ /*IN*/ PFLOATOBJ pf1);
+
+WIN32KAPI
+VOID
+DDKAPI
+FLOATOBJ_AddFloat(
+ /*IN OUT*/ PFLOATOBJ pf,
+ /*IN*/ FLOATL f);
+
+WIN32KAPI
+VOID
+DDKAPI
+FLOATOBJ_AddLong(
+ /*IN OUT*/ PFLOATOBJ pf,
+ /*IN*/ LONG l);
+
+WIN32KAPI
+VOID
+DDKAPI
+FLOATOBJ_Div(
+ /*IN OUT*/ PFLOATOBJ pf,
+ /*IN*/ PFLOATOBJ pf1);
+
+WIN32KAPI
+VOID
+DDKAPI
+FLOATOBJ_DivFloat(
+ /*IN OUT*/ PFLOATOBJ pf,
+ /*IN*/ FLOATL f);
+
+WIN32KAPI
+VOID
+DDKAPI
+FLOATOBJ_DivLong(
+ /*IN OUT*/ PFLOATOBJ pf,
+ /*IN*/ LONG l);
+
+WIN32KAPI
+BOOL
+DDKAPI
+FLOATOBJ_Equal(
+ /*IN*/ PFLOATOBJ pf,
+ /*IN*/ PFLOATOBJ pf1);
+
+WIN32KAPI
+BOOL
+DDKAPI
+FLOATOBJ_EqualLong(
+ /*IN*/ PFLOATOBJ pf,
+ /*IN*/ LONG l);
+
+WIN32KAPI
+LONG
+DDKAPI
+FLOATOBJ_GetFloat(
+ /*IN*/ PFLOATOBJ pf);
+
+WIN32KAPI
+LONG
+DDKAPI
+FLOATOBJ_GetLong(
+ /*IN*/ PFLOATOBJ pf);
+
+WIN32KAPI
+BOOL
+DDKAPI
+FLOATOBJ_GreaterThan(
+ /*IN*/ PFLOATOBJ pf,
+ /*IN*/ PFLOATOBJ pf1);
+
+WIN32KAPI
+BOOL
+DDKAPI
+FLOATOBJ_GreaterThanLong(
+ /*IN*/ PFLOATOBJ pf,
+ /*IN*/ LONG l);
+
+WIN32KAPI
+BOOL
+DDKAPI
+FLOATOBJ_LessThan(
+ /*IN*/ PFLOATOBJ pf,
+ /*IN*/ PFLOATOBJ pf1);
+
+WIN32KAPI
+BOOL
+DDKAPI
+FLOATOBJ_LessThanLong(
+ /*IN*/ PFLOATOBJ pf,
+ /*IN*/ LONG l);
+
+WIN32KAPI
+VOID
+DDKAPI
+FLOATOBJ_Mul(
+ /*IN OUT*/ PFLOATOBJ pf,
+ /*IN*/ PFLOATOBJ pf1);
+
+WIN32KAPI
+VOID
+DDKAPI
+FLOATOBJ_MulFloat(
+ /*IN OUT*/ PFLOATOBJ pf,
+ /*IN*/ FLOATL f);
+
+WIN32KAPI
+VOID
+DDKAPI
+FLOATOBJ_MulLong(
+ /*IN OUT*/ PFLOATOBJ pf,
+ /*IN*/ LONG l);
+
+WIN32KAPI
+VOID
+DDKAPI
+FLOATOBJ_Neg(
+ /*IN OUT*/ PFLOATOBJ pf);
+
+WIN32KAPI
+VOID
+DDKAPI
+FLOATOBJ_SetFloat(
+
+ /*OUT*/ PFLOATOBJ pf,
+ /*IN*/ FLOATL f);
+
+WIN32KAPI
+VOID
+DDKAPI
+FLOATOBJ_SetLong(
+
+ /*OUT*/ PFLOATOBJ pf,
+ /*IN*/ LONG l);
+
+WIN32KAPI
+VOID
+DDKAPI
+FLOATOBJ_Sub(
+ /*IN OUT*/ PFLOATOBJ pf,
+ /*IN*/ PFLOATOBJ pf1);
+
+WIN32KAPI
+VOID
+DDKAPI
+FLOATOBJ_SubFloat(
+ /*IN OUT*/ PFLOATOBJ pf,
+ /*IN*/ FLOATL f);
+
+WIN32KAPI
+VOID
+DDKAPI
+FLOATOBJ_SubLong(
+ /*IN OUT*/ PFLOATOBJ pf,
+ /*IN*/ LONG l);
+
+WIN32KAPI
+ULONG
+DDKAPI
+FONTOBJ_cGetAllGlyphHandles(
+ /*IN*/ FONTOBJ *pfo,
+
+ /*OUT*/ HGLYPH *phg);
+
+WIN32KAPI
+ULONG
+DDKAPI
+FONTOBJ_cGetGlyphs(
+ /*IN*/ FONTOBJ *pfo,
+ /*IN*/ ULONG iMode,
+ /*IN*/ ULONG cGlyph,
+ /*IN*/ HGLYPH *phg,
+
+ /*OUT*/ PVOID *ppvGlyph);
+
+WIN32KAPI
+FD_GLYPHSET*
+DDKAPI
+FONTOBJ_pfdg(
+ /*IN*/ FONTOBJ *pfo);
+
+WIN32KAPI
+IFIMETRICS*
+DDKAPI
+FONTOBJ_pifi(
+ /*IN*/ FONTOBJ *pfo);
+
+WIN32KAPI
+PBYTE
+DDKAPI
+FONTOBJ_pjOpenTypeTablePointer(
+ /*IN*/ FONTOBJ *pfo,
+ /*IN*/ ULONG ulTag,
+
+ /*OUT*/ ULONG *pcjTable);
+
+WIN32KAPI
+PFD_GLYPHATTR
+DDKAPI
+FONTOBJ_pQueryGlyphAttrs(
+ /*IN*/ FONTOBJ *pfo,
+ /*IN*/ ULONG iMode);
+
+WIN32KAPI
+PVOID
+DDKAPI
+FONTOBJ_pvTrueTypeFontFile(
+ /*IN*/ FONTOBJ *pfo,
+
+ /*OUT*/ ULONG *pcjFile);
+
+WIN32KAPI
+LPWSTR
+DDKAPI
+FONTOBJ_pwszFontFilePaths(
+ /*IN*/ FONTOBJ *pfo,
+
+ /*OUT*/ ULONG *pcwc);
+
+WIN32KAPI
+XFORMOBJ*
+DDKAPI
+FONTOBJ_pxoGetXform(
+ /*IN*/ FONTOBJ *pfo);
+
+WIN32KAPI
+VOID
+DDKAPI
+FONTOBJ_vGetInfo(
+ /*IN*/ FONTOBJ *pfo,
+ /*IN*/ ULONG cjSize,
+
+ /*OUT*/ FONTINFO *pfi);
+
+WIN32KAPI
+FLATPTR
+DDKAPI
+HeapVidMemAllocAligned(
+ /*IN*/ LPVIDMEM lpVidMem,
+ /*IN*/ DWORD dwWidth,
+ /*IN*/ DWORD dwHeight,
+ /*IN*/ LPSURFACEALIGNMENT lpAlignment,
+
+ /*OUT*/ LPLONG lpNewPitch);
+
+WIN32KAPI
+LONG
+DDKAPI
+HT_ComputeRGBGammaTable(
+ /*IN*/ USHORT GammaTableEntries,
+ /*IN*/ USHORT GammaTableType,
+ /*IN*/ USHORT RedGamma,
+ /*IN*/ USHORT GreenGamma,
+ /*IN*/ USHORT BlueGamma,
+
+ /*OUT*/ LPBYTE pGammaTable);
+
+WIN32KAPI
+LONG
+DDKAPI
+HT_Get8BPPFormatPalette(
+
+ /*OUT*/ LPPALETTEENTRY pPaletteEntry,
+ /*IN*/ USHORT RedGamma,
+ /*IN*/ USHORT GreenGamma,
+ /*IN*/ USHORT BlueGamma);
+
+WIN32KAPI
+LONG
+DDKAPI
+HT_Get8BPPMaskPalette(
+ /*IN OUT*/ LPPALETTEENTRY pPaletteEntry,
+ /*IN*/ BOOL Use8BPPMaskPal,
+ /*IN*/ BYTE CMYMask,
+ /*IN*/ USHORT RedGamma,
+ /*IN*/ USHORT GreenGamma,
+ /*IN*/ USHORT BlueGamma);
+
+WIN32KAPI
+LONG
+DDKAPI
+HTUI_DeviceColorAdjustment(
+ /*IN*/ LPSTR pDeviceName,
+
+ /*OUT*/ PDEVHTADJDATA pDevHTAdjData);
+
+WIN32KAPI
+ULONG
+DDKAPI
+PALOBJ_cGetColors(
+ /*IN*/ PALOBJ *ppalo,
+ /*IN*/ ULONG iStart,
+ /*IN*/ ULONG cColors,
+
+ /*OUT*/ ULONG *pulColors);
+
+WIN32KAPI
+BOOL
+DDKAPI
+PATHOBJ_bCloseFigure(
+ /*IN*/ PATHOBJ *ppo);
+
+WIN32KAPI
+BOOL
+DDKAPI
+PATHOBJ_bEnum(
+ /*IN*/ PATHOBJ *ppo,
+
+ /*OUT*/ PATHDATA *ppd);
+
+WIN32KAPI
+BOOL
+DDKAPI
+PATHOBJ_bEnumClipLines(
+ /*IN*/ PATHOBJ *ppo,
+ /*IN*/ ULONG cb,
+
+ /*OUT*/ CLIPLINE *pcl);
+
+WIN32KAPI
+BOOL
+DDKAPI
+PATHOBJ_bMoveTo(
+ /*IN*/ PATHOBJ *ppo,
+ /*IN*/ POINTFIX ptfx);
+
+WIN32KAPI
+BOOL
+DDKAPI
+PATHOBJ_bPolyBezierTo(
+ /*IN*/ PATHOBJ *ppo,
+ /*IN*/ POINTFIX *pptfx,
+ /*IN*/ ULONG cptfx);
+
+WIN32KAPI
+BOOL
+DDKAPI
+PATHOBJ_bPolyLineTo(
+ /*IN*/ PATHOBJ *ppo,
+ /*IN*/ POINTFIX *pptfx,
+ /*IN*/ ULONG cptfx);
+
+WIN32KAPI
+VOID
+DDKAPI
+PATHOBJ_vEnumStart(
+ /*IN*/ PATHOBJ *ppo);
+
+WIN32KAPI
+VOID
+DDKAPI
+PATHOBJ_vEnumStartClipLines(
+ /*IN*/ PATHOBJ *ppo,
+ /*IN*/ CLIPOBJ *pco,
+ /*IN*/ SURFOBJ *pso,
+ /*IN*/ LINEATTRS *pla);
+
+WIN32KAPI
+VOID
+DDKAPI
+PATHOBJ_vGetBounds(
+ /*IN*/ PATHOBJ *ppo,
+
+ /*OUT*/ PRECTFX prectfx);
+
+WIN32KAPI
+BOOL
+DDKAPI
+STROBJ_bEnum(
+ /*IN*/ STROBJ *pstro,
+
+ /*OUT*/ ULONG *pc,
+
+ /*OUT*/ PGLYPHPOS *ppgpos);
+
+WIN32KAPI
+BOOL
+DDKAPI
+STROBJ_bEnumPositionsOnly(
+ /*IN*/ STROBJ *pstro,
+
+ /*OUT*/ ULONG *pc,
+
+ /*OUT*/ PGLYPHPOS *ppgpos);
+
+WIN32KAPI
+BOOL
+DDKAPI
+STROBJ_bGetAdvanceWidths(
+ /*IN*/ STROBJ *pso,
+ /*IN*/ ULONG iFirst,
+ /*IN*/ ULONG c,
+
+ /*OUT*/ POINTQF *pptqD);
+
+WIN32KAPI
+DWORD
+DDKAPI
+STROBJ_dwGetCodePage(
+ /*IN*/ STROBJ *pstro);
+
+WIN32KAPI
+FIX
+DDKAPI
+STROBJ_fxBreakExtra(
+ /*IN*/ STROBJ *pstro);
+
+WIN32KAPI
+FIX
+DDKAPI
+STROBJ_fxCharacterExtra(
+ /*IN*/ STROBJ *pstro);
+
+WIN32KAPI
+VOID
+DDKAPI
+STROBJ_vEnumStart(
+ /*IN*/ STROBJ *pstro);
+
+WIN32KAPI
+VOID
+DDKAPI
+VidMemFree(
+ /*IN*/ LPVMEMHEAP pvmh,
+ /*IN*/ FLATPTR ptr);
+
+WIN32KAPI
+BOOL
+DDKAPI
+WNDOBJ_bEnum(
+ /*IN*/ WNDOBJ *pwo,
+ /*IN*/ ULONG cj,
+
+ /*OUT*/ ULONG *pul);
+
+WIN32KAPI
+ULONG
+DDKAPI
+WNDOBJ_cEnumStart(
+ /*IN*/ WNDOBJ *pwo,
+ /*IN*/ ULONG iType,
+ /*IN*/ ULONG iDirection,
+ /*IN*/ ULONG cLimit);
+
+WIN32KAPI
+VOID
+DDKAPI
+WNDOBJ_vSetConsumer(
+ /*IN*/ WNDOBJ *pwo,
+ /*IN*/ PVOID pvConsumer);
+
+/* XFORMOBJ_bApplyXform.iMode constants */
+#define XF_LTOL 0L
+#define XF_INV_LTOL 1L
+#define XF_LTOFX 2L
+#define XF_INV_FXTOL 3L
+
+WIN32KAPI
+BOOL
+DDKAPI
+XFORMOBJ_bApplyXform(
+ /*IN*/ XFORMOBJ *pxo,
+ /*IN*/ ULONG iMode,
+ /*IN*/ ULONG cPoints,
+ /*IN*/ PVOID pvIn,
+
+ /*OUT*/ PVOID pvOut);
+
+WIN32KAPI
+ULONG
+DDKAPI
+XFORMOBJ_iGetFloatObjXform(
+ /*IN*/ XFORMOBJ *pxo,
+
+ /*OUT*/ FLOATOBJ_XFORM *pxfo);
+
+WIN32KAPI
+ULONG
+DDKAPI
+XFORMOBJ_iGetXform(
+ /*IN*/ XFORMOBJ *pxo,
+
+ /*OUT*/ XFORML *pxform);
+
+/* XLATEOBJ_cGetPalette.iPal constants */
+#define XO_SRCPALETTE 1
+#define XO_DESTPALETTE 2
+#define XO_DESTDCPALETTE 3
+#define XO_SRCBITFIELDS 4
+#define XO_DESTBITFIELDS 5
+
+WIN32KAPI
+ULONG
+DDKAPI
+XLATEOBJ_cGetPalette(
+ /*IN*/ XLATEOBJ *pxlo,
+ /*IN*/ ULONG iPal,
+ /*IN*/ ULONG cPal,
+
+ /*OUT*/ ULONG *pPal);
+
+WIN32KAPI
+HANDLE
+DDKAPI
+XLATEOBJ_hGetColorTransform(
+ /*IN*/ XLATEOBJ *pxlo);
+
+WIN32KAPI
+ULONG
+DDKAPI
+XLATEOBJ_iXlate(
+ /*IN*/ XLATEOBJ *pxlo,
+ /*IN*/ ULONG iColor);
+
+WIN32KAPI
+ULONG*
+DDKAPI
+XLATEOBJ_piVector(
+ /*IN*/ XLATEOBJ *pxlo);
+
+
+
+/* Graphics Driver Functions */
+
+BOOL
+DDKAPI
+DrvAlphaBlend(
+ /*IN*/ SURFOBJ *psoDest,
+ /*IN*/ SURFOBJ *psoSrc,
+ /*IN*/ CLIPOBJ *pco,
+ /*IN*/ XLATEOBJ *pxlo,
+ /*IN*/ RECTL *prclDest,
+ /*IN*/ RECTL *prclSrc,
+ /*IN*/ BLENDOBJ *pBlendObj);
+
+BOOL
+DDKAPI
+DrvAssertMode(
+ /*IN*/ DHPDEV dhpdev,
+ /*IN*/ BOOL bEnable);
+
+BOOL
+DDKAPI
+DrvBitBlt(
+ /*IN*/ SURFOBJ *psoTrg,
+ /*IN*/ SURFOBJ *psoSrc,
+ /*IN*/ SURFOBJ *psoMask,
+ /*IN*/ CLIPOBJ *pco,
+ /*IN*/ XLATEOBJ *pxlo,
+ /*IN*/ RECTL *prclTrg,
+ /*IN*/ POINTL *pptlSrc,
+ /*IN*/ POINTL *pptlMask,
+ /*IN*/ BRUSHOBJ *pbo,
+ /*IN*/ POINTL *pptlBrush,
+ /*IN*/ ROP4 rop4);
+
+VOID
+DDKAPI
+DrvCompletePDEV(
+ /*IN*/ DHPDEV dhpdev,
+ /*IN*/ HDEV hdev);
+
+BOOL
+DDKAPI
+DrvCopyBits(
+ /*IN*/ SURFOBJ *psoDest,
+ /*IN*/ SURFOBJ *psoSrc,
+ /*IN*/ CLIPOBJ *pco,
+ /*IN*/ XLATEOBJ *pxlo,
+ /*IN*/ RECTL *prclDest,
+ /*IN*/ POINTL *pptlSrc);
+
+HBITMAP
+DDKAPI
+DrvCreateDeviceBitmap(
+ /*IN*/ DHPDEV dhpdev,
+ /*IN*/ SIZEL sizl,
+ /*IN*/ ULONG iFormat);
+
+VOID
+DDKAPI
+DrvDeleteDeviceBitmap(
+ /*IN*/ DHSURF dhsurf);
+
+HBITMAP
+DDKAPI
+DrvDeriveSurface(
+ DD_DIRECTDRAW_GLOBAL *pDirectDraw,
+ DD_SURFACE_LOCAL *pSurface);
+
+LONG
+DDKAPI
+DrvDescribePixelFormat(
+ /*IN*/ DHPDEV dhpdev,
+ /*IN*/ LONG iPixelFormat,
+ /*IN*/ ULONG cjpfd,
+
+ /*OUT*/ PIXELFORMATDESCRIPTOR *ppfd);
+
+VOID
+DDKAPI
+DrvDestroyFont(
+ /*IN*/ FONTOBJ *pfo);
+
+VOID
+DDKAPI
+DrvDisableDriver(
+ VOID);
+
+VOID
+DDKAPI
+DrvDisablePDEV(
+ /*IN*/ DHPDEV dhpdev);
+
+VOID
+DDKAPI
+DrvDisableSurface(
+ /*IN*/ DHPDEV dhpdev);
+
+#define DM_DEFAULT 0x00000001
+#define DM_MONOCHROME 0x00000002
+
+ULONG
+DDKAPI
+DrvDitherColor(
+ /*IN*/ DHPDEV dhpdev,
+ /*IN*/ ULONG iMode,
+ /*IN*/ ULONG rgb,
+
+ /*OUT*/ ULONG *pul);
+
+ULONG
+DDKAPI
+DrvDrawEscape(
+ /*IN*/ SURFOBJ *pso,
+ /*IN*/ ULONG iEsc,
+ /*IN*/ CLIPOBJ *pco,
+ /*IN*/ RECTL *prcl,
+ /*IN*/ ULONG cjIn,
+ /*IN*/ PVOID pvIn);
+
+BOOL
+DDKAPI
+DrvEnableDriver(
+ /*IN*/ ULONG iEngineVersion,
+ /*IN*/ ULONG cj,
+
+ /*OUT*/ DRVENABLEDATA *pded);
+
+DHPDEV
+DDKAPI
+DrvEnablePDEV(
+ /*IN*/ DEVMODEW *pdm,
+ /*IN*/ LPWSTR pwszLogAddress,
+ /*IN*/ ULONG cPat,
+
+ /*OUT*/ HSURF *phsurfPatterns,
+ /*IN*/ ULONG cjCaps,
+
+ /*OUT*/ ULONG *pdevcaps,
+ /*IN*/ ULONG cjDevInfo,
+
+ /*OUT*/ DEVINFO *pdi,
+ /*IN*/ HDEV hdev,
+ /*IN*/ LPWSTR pwszDeviceName,
+ /*IN*/ HANDLE hDriver);
+
+HSURF
+DDKAPI
+DrvEnableSurface(
+ /*IN*/ DHPDEV dhpdev);
+
+/* DrvEndDoc.fl constants */
+#define ED_ABORTDOC 0x00000001
+
+BOOL
+DDKAPI
+DrvEndDoc(
+ /*IN*/ SURFOBJ *pso,
+ /*IN*/ FLONG fl);
+
+ULONG
+DDKAPI
+DrvEscape(
+ /*IN*/ SURFOBJ *pso,
+ /*IN*/ ULONG iEsc,
+ /*IN*/ ULONG cjIn,
+ /*IN*/ PVOID pvIn,
+ /*IN*/ ULONG cjOut,
+
+ /*OUT*/ PVOID pvOut);
+
+BOOL
+DDKAPI
+DrvFillPath(
+ /*IN*/ SURFOBJ *pso,
+ /*IN*/ PATHOBJ *ppo,
+ /*IN*/ CLIPOBJ *pco,
+ /*IN*/ BRUSHOBJ *pbo,
+ /*IN*/ POINTL *pptlBrushOrg,
+ /*IN*/ MIX mix,
+ /*IN*/ FLONG flOptions);
+
+ULONG
+DDKAPI
+DrvFontManagement(
+ /*IN*/ SURFOBJ *pso,
+ /*IN*/ FONTOBJ *pfo,
+ /*IN*/ ULONG iMode,
+ /*IN*/ ULONG cjIn,
+ /*IN*/ PVOID pvIn,
+ /*IN*/ ULONG cjOut,
+
+ /*OUT*/ PVOID pvOut);
+
+VOID
+DDKAPI
+DrvFree(
+ /*IN*/ PVOID pv,
+ /*IN*/ ULONG_PTR id);
+
+/* DrvGetGlyphMode return values */
+#define FO_HGLYPHS 0L
+#define FO_GLYPHBITS 1L
+#define FO_PATHOBJ 2L
+
+ULONG
+DDKAPI
+DrvGetGlyphMode(
+ /*IN*/ DHPDEV dhpdev,
+ /*IN*/ FONTOBJ *pfo);
+
+ULONG
+DDKAPI
+DrvGetModes(
+ /*IN*/ HANDLE hDriver,
+ /*IN*/ ULONG cjSize,
+
+ /*OUT*/ DEVMODEW *pdm);
+
+PVOID
+DDKAPI
+DrvGetTrueTypeFile(
+ /*IN*/ ULONG_PTR iFile,
+ /*IN*/ ULONG *pcj);
+
+BOOL
+DDKAPI
+DrvGradientFill(
+ /*IN*/ SURFOBJ *psoDest,
+ /*IN*/ CLIPOBJ *pco,
+ /*IN*/ XLATEOBJ *pxlo,
+ /*IN*/ TRIVERTEX *pVertex,
+ /*IN*/ ULONG nVertex,
+ /*IN*/ PVOID pMesh,
+ /*IN*/ ULONG nMesh,
+ /*IN*/ RECTL *prclExtents,
+ /*IN*/ POINTL *pptlDitherOrg,
+ /*IN*/ ULONG ulMode);
+
+BOOL
+DDKAPI
+DrvIcmCheckBitmapBits(
+ /*IN*/ DHPDEV dhpdev,
+ /*IN*/ HANDLE hColorTransform,
+ /*IN*/ SURFOBJ *pso,
+
+ /*OUT*/ PBYTE paResults);
+
+HANDLE
+DDKAPI
+DrvIcmCreateColorTransform(
+ /*IN*/ DHPDEV dhpdev,
+ /*IN*/ LPLOGCOLORSPACEW pLogColorSpace,
+ /*IN*/ PVOID pvSourceProfile,
+ /*IN*/ ULONG cjSourceProfile,
+ /*IN*/ PVOID pvDestProfile,
+ /*IN*/ ULONG cjDestProfile,
+ /*IN*/ PVOID pvTargetProfile,
+ /*IN*/ ULONG cjTargetProfile,
+ /*IN*/ DWORD dwReserved);
+
+BOOL
+DDKAPI
+DrvIcmDeleteColorTransform(
+ /*IN*/ DHPDEV dhpdev,
+ /*IN*/ HANDLE hcmXform);
+
+/* DrvIcmSetDeviceGammaRamp.iFormat constants */
+#define IGRF_RGB_256BYTES 0x00000000
+#define IGRF_RGB_256WORDS 0x00000001
+
+BOOL
+DDKAPI
+DrvIcmSetDeviceGammaRamp(
+ /*IN*/ DHPDEV dhpdev,
+ /*IN*/ ULONG iFormat,
+ /*IN*/ LPVOID lpRamp);
+
+BOOL
+DDKAPI
+DrvLineTo(
+ SURFOBJ *pso,
+ CLIPOBJ *pco,
+ BRUSHOBJ *pbo,
+ LONG x1,
+ LONG y1,
+ LONG x2,
+ LONG y2,
+ RECTL *prclBounds,
+ MIX mix);
+
+ULONG_PTR
+DDKAPI
+DrvLoadFontFile(
+ ULONG cFiles,
+ ULONG_PTR *piFile,
+ PVOID *ppvView,
+ ULONG *pcjView,
+ DESIGNVECTOR *pdv,
+ ULONG ulLangID,
+ ULONG ulFastCheckSum);
+
+VOID
+DDKAPI
+DrvMovePointer(
+ /*IN*/ SURFOBJ *pso,
+ /*IN*/ LONG x,
+ /*IN*/ LONG y,
+ /*IN*/ RECTL *prcl);
+
+BOOL
+DDKAPI
+DrvNextBand(
+ /*IN*/ SURFOBJ *pso,
+ /*IN*/ POINTL *pptl);
+
+VOID
+DDKAPI
+DrvNotify(
+ /*IN*/ SURFOBJ *pso,
+ /*IN*/ ULONG iType,
+ /*IN*/ PVOID pvData);
+
+BOOL
+DDKAPI
+DrvOffset(
+ /*IN*/ SURFOBJ *pso,
+ /*IN*/ LONG x,
+ /*IN*/ LONG y,
+ /*IN*/ FLONG flReserved);
+
+BOOL
+DDKAPI
+DrvPaint(
+ /*IN*/ SURFOBJ *pso,
+ /*IN*/ CLIPOBJ *pco,
+ /*IN*/ BRUSHOBJ *pbo,
+ /*IN*/ POINTL *pptlBrushOrg,
+ /*IN*/ MIX mix);
+
+BOOL
+DDKAPI
+DrvPlgBlt(
+ /*IN*/ SURFOBJ *psoTrg,
+ /*IN*/ SURFOBJ *psoSrc,
+ /*IN*/ SURFOBJ *psoMsk,
+ /*IN*/ CLIPOBJ *pco,
+ /*IN*/ XLATEOBJ *pxlo,
+ /*IN*/ COLORADJUSTMENT *pca,
+ /*IN*/ POINTL *pptlBrushOrg,
+ /*IN*/ POINTFIX *pptfx,
+ /*IN*/ RECTL *prcl,
+ /*IN*/ POINTL *pptl,
+ /*IN*/ ULONG iMode);
+
+/* DrvQueryAdvanceWidths.iMode constants */
+#define QAW_GETWIDTHS 0
+#define QAW_GETEASYWIDTHS 1
+
+BOOL
+DDKAPI
+DrvQueryAdvanceWidths(
+ /*IN*/ DHPDEV dhpdev,
+ /*IN*/ FONTOBJ *pfo,
+ /*IN*/ ULONG iMode,
+ /*IN*/ HGLYPH *phg,
+
+ /*OUT*/ PVOID pvWidths,
+ /*IN*/ ULONG cGlyphs);
+
+/* DrvQueryDeviceSupport.iType constants */
+#define QDS_CHECKJPEGFORMAT 0x00000000
+#define QDS_CHECKPNGFORMAT 0x00000001
+
+BOOL
+DDKAPI
+DrvQueryDeviceSupport(
+ SURFOBJ *pso,
+ XLATEOBJ *pxlo,
+ XFORMOBJ *pxo,
+ ULONG iType,
+ ULONG cjIn,
+ PVOID pvIn,
+ ULONG cjOut,
+ PVOID pvOut);
+
+/* DrvQueryDriverInfo.dwMode constants */
+#define DRVQUERY_USERMODE 0x00000001
+
+BOOL
+DDKAPI
+DrvQueryDriverInfo(
+ DWORD dwMode,
+ PVOID pBuffer,
+ DWORD cbBuf,
+ PDWORD pcbNeeded);
+
+PIFIMETRICS
+DDKAPI
+DrvQueryFont(
+ /*IN*/ DHPDEV dhpdev,
+ /*IN*/ ULONG_PTR iFile,
+ /*IN*/ ULONG iFace,
+ /*IN*/ ULONG_PTR *pid);
+
+/* DrvQueryFontCaps.pulCaps constants */
+#define QC_OUTLINES 0x00000001
+#define QC_1BIT 0x00000002
+#define QC_4BIT 0x00000004
+
+#define QC_FONTDRIVERCAPS (QC_OUTLINES | QC_1BIT | QC_4BIT)
+
+LONG
+DDKAPI
+DrvQueryFontCaps(
+ /*IN*/ ULONG culCaps,
+
+ /*OUT*/ ULONG *pulCaps);
+
+/* DrvQueryFontData.iMode constants */
+#define QFD_GLYPHANDBITMAP 1L
+#define QFD_GLYPHANDOUTLINE 2L
+#define QFD_MAXEXTENTS 3L
+#define QFD_TT_GLYPHANDBITMAP 4L
+#define QFD_TT_GRAY1_BITMAP 5L
+#define QFD_TT_GRAY2_BITMAP 6L
+#define QFD_TT_GRAY4_BITMAP 8L
+#define QFD_TT_GRAY8_BITMAP 9L
+
+#define QFD_TT_MONO_BITMAP QFD_TT_GRAY1_BITMAP
+
+LONG
+DDKAPI
+DrvQueryFontData(
+ /*IN*/ DHPDEV dhpdev,
+ /*IN*/ FONTOBJ *pfo,
+ /*IN*/ ULONG iMode,
+ /*IN*/ HGLYPH hg,
+ /*IN OUT*/ GLYPHDATA *pgd,
+ /*IN OUT*/ PVOID pv,
+ /*IN*/ ULONG cjSize);
+
+/* DrvQueryFontFile.ulMode constants */
+#define QFF_DESCRIPTION 0x00000001
+#define QFF_NUMFACES 0x00000002
+
+LONG
+DDKAPI
+DrvQueryFontFile(
+ /*IN*/ ULONG_PTR iFile,
+ /*IN*/ ULONG ulMode,
+ /*IN*/ ULONG cjBuf,
+ /*IN*/ ULONG *pulBuf);
+
+/* DrvQueryFontTree.iMode constants */
+#define QFT_UNICODE 0L
+#define QFT_LIGATURES 1L
+#define QFT_KERNPAIRS 2L
+#define QFT_GLYPHSET 3L
+
+PVOID
+DDKAPI
+DrvQueryFontTree(
+ /*IN*/ DHPDEV dhpdev,
+ /*IN*/ ULONG_PTR iFile,
+ /*IN*/ ULONG iFace,
+ /*IN*/ ULONG iMode,
+ /*IN*/ ULONG_PTR *pid);
+
+PFD_GLYPHATTR
+DDKAPI
+DrvQueryGlyphAttrs(
+ /*IN*/ FONTOBJ *pfo,
+ /*IN*/ ULONG iMode);
+
+ULONG
+DDKAPI
+DrvQueryPerBandInfo(
+ /*IN*/ SURFOBJ *pso,
+ /*IN OUT*/ PERBANDINFO *pbi);
+
+/* DrvQueryTrueTypeOutline.bMetricsOnly constants */
+#define TTO_METRICS_ONLY 0x00000001
+#define TTO_QUBICS 0x00000002
+#define TTO_UNHINTED 0x00000004
+
+LONG
+DDKAPI
+DrvQueryTrueTypeOutline(
+ /*IN*/ DHPDEV dhpdev,
+ /*IN*/ FONTOBJ *pfo,
+ /*IN*/ HGLYPH hglyph,
+ /*IN*/ BOOL bMetricsOnly,
+ /*IN*/ GLYPHDATA *pgldt,
+ /*IN*/ ULONG cjBuf,
+
+ /*OUT*/ TTPOLYGONHEADER *ppoly);
+
+LONG
+DDKAPI
+DrvQueryTrueTypeTable(
+ /*IN*/ ULONG_PTR iFile,
+ /*IN*/ ULONG ulFont,
+ /*IN*/ ULONG ulTag,
+ /*IN*/ PTRDIFF dpStart,
+ /*IN*/ ULONG cjBuf,
+
+ /*OUT*/ BYTE *pjBuf,
+
+ /*OUT*/ PBYTE *ppjTable,
+
+ /*OUT*/ ULONG *pcjTable);
+
+/* DrvRealizeBrush.iHatch constants */
+#define RB_DITHERCOLOR 0x80000000L
+
+#define HS_DDI_MAX 6
+
+BOOL
+DDKAPI
+DrvRealizeBrush(
+ /*IN*/ BRUSHOBJ *pbo,
+ /*IN*/ SURFOBJ *psoTarget,
+ /*IN*/ SURFOBJ *psoPattern,
+ /*IN*/ SURFOBJ *psoMask,
+ /*IN*/ XLATEOBJ *pxlo,
+ /*IN*/ ULONG iHatch);
+
+/* DrvResetDevice return values */
+#define DRD_SUCCESS 0
+#define DRD_ERROR 1
+
+ULONG
+DDKAPI
+DrvResetDevice(
+ /*IN*/ DHPDEV dhpdev,
+ /*IN*/ PVOID Reserved);
+
+BOOL
+DDKAPI
+DrvResetPDEV(
+ DHPDEV dhpdevOld,
+ DHPDEV dhpdevNew);
+
+/* DrvSaveScreenBits.iMode constants */
+#define SS_SAVE 0x00000000
+#define SS_RESTORE 0x00000001
+#define SS_FREE 0x00000002
+
+ULONG_PTR
+DDKAPI
+DrvSaveScreenBits(
+ /*IN*/ SURFOBJ *pso,
+ /*IN*/ ULONG iMode,
+ /*IN*/ ULONG_PTR ident,
+ /*IN*/ RECTL *prcl);
+
+BOOL
+DDKAPI
+DrvSendPage(
+ /*IN*/ SURFOBJ *pso);
+
+BOOL
+DDKAPI
+DrvSetPalette(
+ /*IN*/ DHPDEV dhpdev,
+ /*IN*/ PALOBJ *ppalo,
+ /*IN*/ FLONG fl,
+ /*IN*/ ULONG iStart,
+ /*IN*/ ULONG cColors);
+
+BOOL
+DDKAPI
+DrvSetPixelFormat(
+ /*IN*/ SURFOBJ *pso,
+ /*IN*/ LONG iPixelFormat,
+ /*IN*/ HWND hwnd);
+
+/* DrvSetPointerShape return values */
+#define SPS_ERROR 0x00000000
+#define SPS_DECLINE 0x00000001
+#define SPS_ACCEPT_NOEXCLUDE 0x00000002
+#define SPS_ACCEPT_EXCLUDE 0x00000003
+#define SPS_ACCEPT_SYNCHRONOUS 0x00000004
+
+/* DrvSetPointerShape.fl constants */
+#define SPS_CHANGE 0x00000001L
+#define SPS_ASYNCCHANGE 0x00000002L
+#define SPS_ANIMATESTART 0x00000004L
+#define SPS_ANIMATEUPDATE 0x00000008L
+#define SPS_ALPHA 0x00000010L
+#define SPS_LENGTHMASK 0x00000F00L
+#define SPS_FREQMASK 0x000FF000L
+
+ULONG
+DDKAPI
+DrvSetPointerShape(
+ /*IN*/ SURFOBJ *pso,
+ /*IN*/ SURFOBJ *psoMask,
+ /*IN*/ SURFOBJ *psoColor,
+ /*IN*/ XLATEOBJ *pxlo,
+ /*IN*/ LONG xHot,
+ /*IN*/ LONG yHot,
+ /*IN*/ LONG x,
+ /*IN*/ LONG y,
+ /*IN*/ RECTL *prcl,
+ /*IN*/ FLONG fl);
+
+BOOL
+DDKAPI
+DrvStartBanding(
+ /*IN*/ SURFOBJ *pso,
+ /*IN*/ POINTL *pptl);
+
+BOOL
+DDKAPI
+DrvStartDoc(
+ /*IN*/ SURFOBJ *pso,
+ /*IN*/ LPWSTR pwszDocName,
+ /*IN*/ DWORD dwJobId);
+
+BOOL
+DDKAPI
+DrvStartPage(
+ /*IN*/ SURFOBJ *pso);
+
+BOOL
+DDKAPI
+DrvStretchBlt(
+ /*IN*/ SURFOBJ *psoDest,
+ /*IN*/ SURFOBJ *psoSrc,
+ /*IN*/ SURFOBJ *psoMask,
+ /*IN*/ CLIPOBJ *pco,
+ /*IN*/ XLATEOBJ *pxlo,
+ /*IN*/ COLORADJUSTMENT *pca,
+ /*IN*/ POINTL *pptlHTOrg,
+ /*IN*/ RECTL *prclDest,
+ /*IN*/ RECTL *prclSrc,
+ /*IN*/ POINTL *pptlMask,
+ /*IN*/ ULONG iMode);
+
+BOOL
+DDKAPI
+DrvStretchBltROP(
+ /*IN*/ SURFOBJ *psoDest,
+ /*IN*/ SURFOBJ *psoSrc,
+ /*IN*/ SURFOBJ *psoMask,
+ /*IN*/ CLIPOBJ *pco,
+ /*IN*/ XLATEOBJ *pxlo,
+ /*IN*/ COLORADJUSTMENT *pca,
+ /*IN*/ POINTL *pptlHTOrg,
+ /*IN*/ RECTL *prclDest,
+ /*IN*/ RECTL *prclSrc,
+ /*IN*/ POINTL *pptlMask,
+ /*IN*/ ULONG iMode,
+ /*IN*/ BRUSHOBJ *pbo,
+ /*IN*/ DWORD rop4);
+
+BOOL
+DDKAPI
+DrvStrokeAndFillPath(
+ /*IN*/ SURFOBJ *pso,
+ /*IN*/ PATHOBJ *ppo,
+ /*IN*/ CLIPOBJ *pco,
+ /*IN*/ XFORMOBJ *pxo,
+ /*IN*/ BRUSHOBJ *pboStroke,
+ /*IN*/ LINEATTRS *plineattrs,
+ /*IN*/ BRUSHOBJ *pboFill,
+ /*IN*/ POINTL *pptlBrushOrg,
+ /*IN*/ MIX mixFill,
+ /*IN*/ FLONG flOptions);
+
+BOOL
+DDKAPI
+DrvStrokePath(
+ /*IN*/ SURFOBJ *pso,
+ /*IN*/ PATHOBJ *ppo,
+ /*IN*/ CLIPOBJ *pco,
+ /*IN*/ XFORMOBJ *pxo,
+ /*IN*/ BRUSHOBJ *pbo,
+ /*IN*/ POINTL *pptlBrushOrg,
+ /*IN*/ LINEATTRS *plineattrs,
+ /*IN*/ MIX mix);
+
+BOOL
+DDKAPI
+DrvSwapBuffers(
+ /*IN*/ SURFOBJ *pso,
+ /*IN*/ WNDOBJ *pwo);
+
+VOID
+DDKAPI
+DrvSynchronize(
+ /*IN*/ DHPDEV dhpdev,
+ /*IN*/ RECTL *prcl);
+
+/* DrvSynchronizeSurface.fl constants */
+#define DSS_TIMER_EVENT 0x00000001
+#define DSS_FLUSH_EVENT 0x00000002
+
+VOID
+DDKAPI
+DrvSynchronizeSurface(
+ /*IN*/ SURFOBJ *pso,
+ /*IN*/ RECTL *prcl,
+ /*IN*/ FLONG fl);
+
+BOOL
+DDKAPI
+DrvTextOut(
+ /*IN*/ SURFOBJ *pso,
+ /*IN*/ STROBJ *pstro,
+ /*IN*/ FONTOBJ *pfo,
+ /*IN*/ CLIPOBJ *pco,
+ /*IN*/ RECTL *prclExtra,
+ /*IN*/ RECTL *prclOpaque,
+ /*IN*/ BRUSHOBJ *pboFore,
+ /*IN*/ BRUSHOBJ *pboOpaque,
+ /*IN*/ POINTL *pptlOrg,
+ /*IN*/ MIX mix);
+
+BOOL
+DDKAPI
+DrvTransparentBlt(
+ /*IN*/ SURFOBJ *psoDst,
+ /*IN*/ SURFOBJ *psoSrc,
+ /*IN*/ CLIPOBJ *pco,
+ /*IN*/ XLATEOBJ *pxlo,
+ /*IN*/ RECTL *prclDst,
+ /*IN*/ RECTL *prclSrc,
+ /*IN*/ ULONG iTransColor,
+ /*IN*/ ULONG ulReserved);
+
+BOOL
+DDKAPI
+DrvUnloadFontFile(
+ /*IN*/ ULONG_PTR iFile);
+
+/* WNDOBJCHANGEPROC.fl constants */
+#define WOC_RGN_CLIENT_DELTA 0x00000001
+#define WOC_RGN_CLIENT 0x00000002
+#define WOC_RGN_SURFACE_DELTA 0x00000004
+#define WOC_RGN_SURFACE 0x00000008
+#define WOC_CHANGED 0x00000010
+#define WOC_DELETE 0x00000020
+#define WOC_DRAWN 0x00000040
+#define WOC_SPRITE_OVERLAP 0x00000080
+#define WOC_SPRITE_NO_OVERLAP 0x00000100
+
+typedef VOID DDKAPI
+(CALLBACK * WNDOBJCHANGEPROC)(
+ WNDOBJ *pwo,
+ FLONG fl);
+
+
+typedef BOOL DDKAPI
+(*PFN_DrvAlphaBlend)(
+ /*IN*/ SURFOBJ *psoDest,
+ /*IN*/ SURFOBJ *psoSrc,
+ /*IN*/ CLIPOBJ *pco,
+ /*IN*/ XLATEOBJ *pxlo,
+ /*IN*/ RECTL *prclDest,
+ /*IN*/ RECTL *prclSrc,
+ /*IN*/ BLENDOBJ *pBlendObj);
+
+typedef BOOL DDKAPI
+(*PFN_DrvAssertMode)(
+ /*IN*/ DHPDEV dhpdev,
+ /*IN*/ BOOL bEnable);
+
+typedef BOOL DDKAPI
+(*PFN_DrvBitBlt)(
+ /*IN*/ SURFOBJ *psoTrg,
+ /*IN*/ SURFOBJ *psoSrc,
+ /*IN*/ SURFOBJ *psoMask,
+ /*IN*/ CLIPOBJ *pco,
+ /*IN*/ XLATEOBJ *pxlo,
+ /*IN*/ RECTL *prclTrg,
+ /*IN*/ POINTL *pptlSrc,
+ /*IN*/ POINTL *pptlMask,
+ /*IN*/ BRUSHOBJ *pbo,
+ /*IN*/ POINTL *pptlBrush,
+ /*IN*/ ROP4 rop4);
+
+typedef VOID DDKAPI
+(*PFN_DrvCompletePDEV)(
+ /*IN*/ DHPDEV dhpdev,
+ /*IN*/ HDEV hdev);
+
+typedef BOOL DDKAPI
+(*PFN_DrvCopyBits)(
+ /*IN*/ SURFOBJ *psoDest,
+ /*IN*/ SURFOBJ *psoSrc,
+ /*IN*/ CLIPOBJ *pco,
+ /*IN*/ XLATEOBJ *pxlo,
+ /*IN*/ RECTL *prclDest,
+ /*IN*/ POINTL *pptlSrc);
+
+typedef HBITMAP DDKAPI
+(*PFN_DrvCreateDeviceBitmap)(
+ /*IN*/ DHPDEV dhpdev,
+ /*IN*/ SIZEL sizl,
+ /*IN*/ ULONG iFormat);
+
+typedef VOID DDKAPI
+(*PFN_DrvDeleteDeviceBitmap)(
+ /*IN*/ DHSURF dhsurf);
+
+typedef HBITMAP DDKAPI
+(*PFN_DrvDeriveSurface)(
+ DD_DIRECTDRAW_GLOBAL *pDirectDraw,
+ DD_SURFACE_LOCAL *pSurface);
+
+typedef LONG DDKAPI
+(*PFN_DrvDescribePixelFormat)(
+ /*IN*/ DHPDEV dhpdev,
+ /*IN*/ LONG iPixelFormat,
+ /*IN*/ ULONG cjpfd,
+
+ /*OUT*/ PIXELFORMATDESCRIPTOR *ppfd);
+
+typedef VOID DDKAPI
+(*PFN_DrvDestroyFont)(
+ /*IN*/ FONTOBJ *pfo);
+
+typedef VOID DDKAPI
+(*PFN_DrvDisableDriver)(
+ VOID);
+
+typedef VOID DDKAPI
+(*PFN_DrvDisablePDEV)(
+ /*IN*/ DHPDEV dhpdev);
+
+typedef VOID DDKAPI
+(*PFN_DrvDisableSurface)(
+ /*IN*/ DHPDEV dhpdev);
+
+typedef ULONG DDKAPI
+(*PFN_DrvDitherColor)(
+ /*IN*/ DHPDEV dhpdev,
+ /*IN*/ ULONG iMode,
+ /*IN*/ ULONG rgb,
+
+ /*OUT*/ ULONG *pul);
+
+typedef ULONG DDKAPI
+(*PFN_DrvDrawEscape)(
+ /*IN*/ SURFOBJ *pso,
+ /*IN*/ ULONG iEsc,
+ /*IN*/ CLIPOBJ *pco,
+ /*IN*/ RECTL *prcl,
+ /*IN*/ ULONG cjIn,
+ /*IN*/ PVOID pvIn);
+
+typedef BOOL DDKAPI
+(*PFN_DrvEnableDriver)(
+ /*IN*/ ULONG iEngineVersion,
+ /*IN*/ ULONG cj,
+
+ /*OUT*/ DRVENABLEDATA *pded);
+#if 0
+typedef DHPDEV DDKAPI
+(*PFN_DrvEnablePDEV)(
+ /*IN*/ DEVMODEW *pdm,
+ /*IN*/ LPWSTR pwszLogAddress,
+ /*IN*/ ULONG cPat,
+
+ /*OUT*/ HSURF *phsurfPatterns,
+ /*IN*/ ULONG cjCaps,
+
+ /*OUT*/ ULONG *pdevcaps,
+ /*IN*/ ULONG cjDevInfo,
+
+ /*OUT*/ DEVINFO *pdi,
+ /*IN*/ HDEV hdev,
+ /*IN*/ LPWSTR pwszDeviceName,
+ /*IN*/ HANDLE hDriver);
+#endif
+typedef HSURF DDKAPI
+(*PFN_DrvEnableSurface)(
+ /*IN*/ DHPDEV dhpdev);
+
+typedef BOOL DDKAPI
+(*PFN_DrvEndDoc)(
+ /*IN*/ SURFOBJ *pso,
+ /*IN*/ FLONG fl);
+
+typedef ULONG DDKAPI
+(*PFN_DrvEscape)(
+ /*IN*/ SURFOBJ *pso,
+ /*IN*/ ULONG iEsc,
+ /*IN*/ ULONG cjIn,
+ /*IN*/ PVOID pvIn,
+ /*IN*/ ULONG cjOut,
+
+ /*OUT*/ PVOID pvOut);
+
+typedef BOOL DDKAPI
+(*PFN_DrvFillPath)(
+ /*IN*/ SURFOBJ *pso,
+ /*IN*/ PATHOBJ *ppo,
+ /*IN*/ CLIPOBJ *pco,
+ /*IN*/ BRUSHOBJ *pbo,
+ /*IN*/ POINTL *pptlBrushOrg,
+ /*IN*/ MIX mix,
+ /*IN*/ FLONG flOptions);
+
+typedef ULONG DDKAPI
+(*PFN_DrvFontManagement)(
+ /*IN*/ SURFOBJ *pso,
+ /*IN*/ FONTOBJ *pfo,
+ /*IN*/ ULONG iMode,
+ /*IN*/ ULONG cjIn,
+ /*IN*/ PVOID pvIn,
+ /*IN*/ ULONG cjOut,
+
+ /*OUT*/ PVOID pvOut);
+
+typedef VOID DDKAPI
+(*PFN_DrvFree)(
+ /*IN*/ PVOID pv,
+ /*IN*/ ULONG_PTR id);
+
+typedef ULONG DDKAPI
+(*PFN_DrvGetGlyphMode)(
+ /*IN*/ DHPDEV dhpdev,
+ /*IN*/ FONTOBJ *pfo);
+
+typedef ULONG DDKAPI
+(*PFN_DrvGetModes)(
+ /*IN*/ HANDLE hDriver,
+ /*IN*/ ULONG cjSize,
+
+ /*OUT*/ DEVMODEW *pdm);
+
+typedef PVOID DDKAPI
+(*PFN_DrvGetTrueTypeFile)(
+ /*IN*/ ULONG_PTR iFile,
+ /*IN*/ ULONG *pcj);
+
+typedef BOOL DDKAPI
+(*PFN_DrvGradientFill)(
+ /*IN*/ SURFOBJ *psoDest,
+ /*IN*/ CLIPOBJ *pco,
+ /*IN*/ XLATEOBJ *pxlo,
+ /*IN*/ TRIVERTEX *pVertex,
+ /*IN*/ ULONG nVertex,
+ /*IN*/ PVOID pMesh,
+ /*IN*/ ULONG nMesh,
+ /*IN*/ RECTL *prclExtents,
+ /*IN*/ POINTL *pptlDitherOrg,
+ /*IN*/ ULONG ulMode);
+
+typedef BOOL DDKAPI
+(*PFN_DrvIcmCheckBitmapBits)(
+ /*IN*/ DHPDEV dhpdev,
+ /*IN*/ HANDLE hColorTransform,
+ /*IN*/ SURFOBJ *pso,
+
+ /*OUT*/ PBYTE paResults);
+
+typedef HANDLE DDKAPI
+(*PFN_DrvIcmCreateColorTransform)(
+ /*IN*/ DHPDEV dhpdev,
+ /*IN*/ LPLOGCOLORSPACEW pLogColorSpace,
+ /*IN*/ PVOID pvSourceProfile,
+ /*IN*/ ULONG cjSourceProfile,
+ /*IN*/ PVOID pvDestProfile,
+ /*IN*/ ULONG cjDestProfile,
+ /*IN*/ PVOID pvTargetProfile,
+ /*IN*/ ULONG cjTargetProfile,
+ /*IN*/ DWORD dwReserved);
+
+typedef BOOL DDKAPI
+(*PFN_DrvIcmDeleteColorTransform)(
+ /*IN*/ DHPDEV dhpdev,
+ /*IN*/ HANDLE hcmXform);
+
+typedef BOOL DDKAPI
+(*PFN_DrvIcmSetDeviceGammaRamp)(
+ /*IN*/ DHPDEV dhpdev,
+ /*IN*/ ULONG iFormat,
+ /*IN*/ LPVOID lpRamp);
+
+typedef BOOL DDKAPI
+(*PFN_DrvLineTo)(
+ SURFOBJ *pso,
+ CLIPOBJ *pco,
+ BRUSHOBJ *pbo,
+ LONG x1,
+ LONG y1,
+ LONG x2,
+ LONG y2,
+ RECTL *prclBounds,
+ MIX mix);
+
+typedef ULONG_PTR DDKAPI
+(*PFN_DrvLoadFontFile)(
+ ULONG cFiles,
+ ULONG_PTR *piFile,
+ PVOID *ppvView,
+ ULONG *pcjView,
+ DESIGNVECTOR *pdv,
+ ULONG ulLangID,
+ ULONG ulFastCheckSum);
+
+typedef VOID DDKAPI
+(*PFN_DrvMovePointer)(
+ /*IN*/ SURFOBJ *pso,
+ /*IN*/ LONG x,
+ /*IN*/ LONG y,
+ /*IN*/ RECTL *prcl);
+
+typedef BOOL DDKAPI
+(*PFN_DrvNextBand)(
+ /*IN*/ SURFOBJ *pso,
+ /*IN*/ POINTL *pptl);
+
+typedef VOID DDKAPI
+(*PFN_DrvNotify)(
+ /*IN*/ SURFOBJ *pso,
+ /*IN*/ ULONG iType,
+ /*IN*/ PVOID pvData);
+
+typedef BOOL DDKAPI
+(*PFN_DrvOffset)(
+ /*IN*/ SURFOBJ *pso,
+ /*IN*/ LONG x,
+ /*IN*/ LONG y,
+ /*IN*/ FLONG flReserved);
+
+typedef BOOL DDKAPI
+(*PFN_DrvPaint)(
+ /*IN*/ SURFOBJ *pso,
+ /*IN*/ CLIPOBJ *pco,
+ /*IN*/ BRUSHOBJ *pbo,
+ /*IN*/ POINTL *pptlBrushOrg,
+ /*IN*/ MIX mix);
+
+typedef BOOL DDKAPI
+(*PFN_DrvPlgBlt)(
+ /*IN*/ SURFOBJ *psoTrg,
+ /*IN*/ SURFOBJ *psoSrc,
+ /*IN*/ SURFOBJ *psoMsk,
+ /*IN*/ CLIPOBJ *pco,
+ /*IN*/ XLATEOBJ *pxlo,
+ /*IN*/ COLORADJUSTMENT *pca,
+ /*IN*/ POINTL *pptlBrushOrg,
+ /*IN*/ POINTFIX *pptfx,
+ /*IN*/ RECTL *prcl,
+ /*IN*/ POINTL *pptl,
+ /*IN*/ ULONG iMode);
+
+typedef BOOL DDKAPI
+(*PFN_DrvQueryAdvanceWidths)(
+ /*IN*/ DHPDEV dhpdev,
+ /*IN*/ FONTOBJ *pfo,
+ /*IN*/ ULONG iMode,
+ /*IN*/ HGLYPH *phg,
+
+ /*OUT*/ PVOID pvWidths,
+ /*IN*/ ULONG cGlyphs);
+
+typedef BOOL DDKAPI
+(*PFN_DrvQueryDeviceSupport)(
+ SURFOBJ *pso,
+ XLATEOBJ *pxlo,
+ XFORMOBJ *pxo,
+ ULONG iType,
+ ULONG cjIn,
+ PVOID pvIn,
+ ULONG cjOut,
+ PVOID pvOut);
+
+typedef BOOL DDKAPI
+(*PFN_DrvQueryDriverInfo)(
+ DWORD dwMode,
+ PVOID pBuffer,
+ DWORD cbBuf,
+ PDWORD pcbNeeded);
+
+typedef PIFIMETRICS DDKAPI
+(*PFN_DrvQueryFont)(
+ /*IN*/ DHPDEV dhpdev,
+ /*IN*/ ULONG_PTR iFile,
+ /*IN*/ ULONG iFace,
+ /*IN*/ ULONG_PTR *pid);
+
+typedef LONG DDKAPI
+(*PFN_DrvQueryFontCaps)(
+ /*IN*/ ULONG culCaps,
+
+ /*OUT*/ ULONG *pulCaps);
+
+typedef LONG DDKAPI
+(*PFN_DrvQueryFontData)(
+ /*IN*/ DHPDEV dhpdev,
+ /*IN*/ FONTOBJ *pfo,
+ /*IN*/ ULONG iMode,
+ /*IN*/ HGLYPH hg,
+ /*IN OUT*/ GLYPHDATA *pgd,
+ /*IN OUT*/ PVOID pv,
+ /*IN*/ ULONG cjSize);
+
+typedef LONG DDKAPI
+(*PFN_DrvQueryFontFile)(
+ /*IN*/ ULONG_PTR iFile,
+ /*IN*/ ULONG ulMode,
+ /*IN*/ ULONG cjBuf,
+ /*IN*/ ULONG *pulBuf);
+
+typedef PVOID DDKAPI
+(*PFN_DrvQueryFontTree)(
+ /*IN*/ DHPDEV dhpdev,
+ /*IN*/ ULONG_PTR iFile,
+ /*IN*/ ULONG iFace,
+ /*IN*/ ULONG iMode,
+ /*IN*/ ULONG_PTR *pid);
+
+typedef PFD_GLYPHATTR DDKAPI
+(*PFN_DrvQueryGlyphAttrs)(
+ /*IN*/ FONTOBJ *pfo,
+ /*IN*/ ULONG iMode);
+
+typedef ULONG DDKAPI
+(*PFN_DrvQueryPerBandInfo)(
+ /*IN*/ SURFOBJ *pso,
+ /*IN OUT*/ PERBANDINFO *pbi);
+
+typedef LONG DDKAPI
+(*PFN_DrvQueryTrueTypeOutline)(
+ /*IN*/ DHPDEV dhpdev,
+ /*IN*/ FONTOBJ *pfo,
+ /*IN*/ HGLYPH hglyph,
+ /*IN*/ BOOL bMetricsOnly,
+ /*IN*/ GLYPHDATA *pgldt,
+ /*IN*/ ULONG cjBuf,
+ /*OUT*/ TTPOLYGONHEADER *ppoly);
+
+typedef LONG DDKAPI
+(*PFN_DrvQueryTrueTypeTable)(
+ /*IN*/ ULONG_PTR iFile,
+ /*IN*/ ULONG ulFont,
+ /*IN*/ ULONG ulTag,
+ /*IN*/ PTRDIFF dpStart,
+ /*IN*/ ULONG cjBuf,
+ /*OUT*/ BYTE *pjBuf,
+ /*OUT*/ PBYTE *ppjTable,
+ /*OUT*/ ULONG *pcjTable);
+
+typedef BOOL DDKAPI
+(*PFN_DrvRealizeBrush)(
+ /*IN*/ BRUSHOBJ *pbo,
+ /*IN*/ SURFOBJ *psoTarget,
+ /*IN*/ SURFOBJ *psoPattern,
+ /*IN*/ SURFOBJ *psoMask,
+ /*IN*/ XLATEOBJ *pxlo,
+ /*IN*/ ULONG iHatch);
+
+typedef ULONG DDKAPI
+(*PFN_DrvResetDevice)(
+ /*IN*/ DHPDEV dhpdev,
+ /*IN*/ PVOID Reserved);
+
+typedef BOOL DDKAPI
+(*PFN_DrvResetPDEV)(
+ DHPDEV dhpdevOld,
+ DHPDEV dhpdevNew);
+
+typedef ULONG_PTR DDKAPI
+(*PFN_DrvSaveScreenBits)(
+ /*IN*/ SURFOBJ *pso,
+ /*IN*/ ULONG iMode,
+ /*IN*/ ULONG_PTR ident,
+ /*IN*/ RECTL *prcl);
+
+typedef BOOL DDKAPI
+(*PFN_DrvSendPage)(
+ /*IN*/ SURFOBJ *pso);
+
+typedef BOOL DDKAPI
+(*PFN_DrvSetPalette)(
+ /*IN*/ DHPDEV dhpdev,
+ /*IN*/ PALOBJ *ppalo,
+ /*IN*/ FLONG fl,
+ /*IN*/ ULONG iStart,
+ /*IN*/ ULONG cColors);
+
+typedef BOOL DDKAPI
+(*PFN_DrvSetPixelFormat)(
+ /*IN*/ SURFOBJ *pso,
+ /*IN*/ LONG iPixelFormat,
+ /*IN*/ HWND hwnd);
+
+typedef ULONG DDKAPI
+(*PFN_DrvSetPointerShape)(
+ /*IN*/ SURFOBJ *pso,
+ /*IN*/ SURFOBJ *psoMask,
+ /*IN*/ SURFOBJ *psoColor,
+ /*IN*/ XLATEOBJ *pxlo,
+ /*IN*/ LONG xHot,
+ /*IN*/ LONG yHot,
+ /*IN*/ LONG x,
+ /*IN*/ LONG y,
+ /*IN*/ RECTL *prcl,
+ /*IN*/ FLONG fl);
+
+typedef BOOL DDKAPI
+(*PFN_DrvStartBanding)(
+ /*IN*/ SURFOBJ *pso,
+ /*IN*/ POINTL *pptl);
+
+typedef BOOL DDKAPI
+(*PFN_DrvStartDoc)(
+ /*IN*/ SURFOBJ *pso,
+ /*IN*/ LPWSTR pwszDocName,
+ /*IN*/ DWORD dwJobId);
+
+typedef BOOL DDKAPI
+(*PFN_DrvStartPage)(
+ /*IN*/ SURFOBJ *pso);
+
+typedef BOOL DDKAPI
+(*PFN_DrvStretchBlt)(
+ /*IN*/ SURFOBJ *psoDest,
+ /*IN*/ SURFOBJ *psoSrc,
+ /*IN*/ SURFOBJ *psoMask,
+ /*IN*/ CLIPOBJ *pco,
+ /*IN*/ XLATEOBJ *pxlo,
+ /*IN*/ COLORADJUSTMENT *pca,
+ /*IN*/ POINTL *pptlHTOrg,
+ /*IN*/ RECTL *prclDest,
+ /*IN*/ RECTL *prclSrc,
+ /*IN*/ POINTL *pptlMask,
+ /*IN*/ ULONG iMode);
+
+typedef BOOL DDKAPI
+(*PFN_DrvStretchBltROP)(
+ /*IN*/ SURFOBJ *psoDest,
+ /*IN*/ SURFOBJ *psoSrc,
+ /*IN*/ SURFOBJ *psoMask,
+ /*IN*/ CLIPOBJ *pco,
+ /*IN*/ XLATEOBJ *pxlo,
+ /*IN*/ COLORADJUSTMENT *pca,
+ /*IN*/ POINTL *pptlHTOrg,
+ /*IN*/ RECTL *prclDest,
+ /*IN*/ RECTL *prclSrc,
+ /*IN*/ POINTL *pptlMask,
+ /*IN*/ ULONG iMode,
+ /*IN*/ BRUSHOBJ *pbo,
+ /*IN*/ DWORD rop4);
+
+typedef BOOL DDKAPI
+(*PFN_DrvStrokeAndFillPath)(
+ /*IN*/ SURFOBJ *pso,
+ /*IN*/ PATHOBJ *ppo,
+ /*IN*/ CLIPOBJ *pco,
+ /*IN*/ XFORMOBJ *pxo,
+ /*IN*/ BRUSHOBJ *pboStroke,
+ /*IN*/ LINEATTRS *plineattrs,
+ /*IN*/ BRUSHOBJ *pboFill,
+ /*IN*/ POINTL *pptlBrushOrg,
+ /*IN*/ MIX mixFill,
+ /*IN*/ FLONG flOptions);
+
+typedef BOOL DDKAPI
+(*PFN_DrvStrokePath)(
+ /*IN*/ SURFOBJ *pso,
+ /*IN*/ PATHOBJ *ppo,
+ /*IN*/ CLIPOBJ *pco,
+ /*IN*/ XFORMOBJ *pxo,
+ /*IN*/ BRUSHOBJ *pbo,
+ /*IN*/ POINTL *pptlBrushOrg,
+ /*IN*/ LINEATTRS *plineattrs,
+ /*IN*/ MIX mix);
+
+typedef BOOL DDKAPI
+(*PFN_DrvSwapBuffers)(
+ /*IN*/ SURFOBJ *pso,
+ /*IN*/ WNDOBJ *pwo);
+
+typedef VOID DDKAPI
+(*PFN_DrvSynchronize)(
+ /*IN*/ DHPDEV dhpdev,
+ /*IN*/ RECTL *prcl);
+
+typedef VOID DDKAPI
+(*PFN_DrvSynchronizeSurface)(
+ /*IN*/ SURFOBJ *pso,
+ /*IN*/ RECTL *prcl,
+ /*IN*/ FLONG fl);
+
+typedef BOOL DDKAPI
+(*PFN_DrvTextOut)(
+ /*IN*/ SURFOBJ *pso,
+ /*IN*/ STROBJ *pstro,
+ /*IN*/ FONTOBJ *pfo,
+ /*IN*/ CLIPOBJ *pco,
+ /*IN*/ RECTL *prclExtra,
+ /*IN*/ RECTL *prclOpaque,
+ /*IN*/ BRUSHOBJ *pboFore,
+ /*IN*/ BRUSHOBJ *pboOpaque,
+ /*IN*/ POINTL *pptlOrg,
+ /*IN*/ MIX mix);
+
+typedef BOOL DDKAPI
+(*PFN_DrvTransparentBlt)(
+ /*IN*/ SURFOBJ *psoDst,
+ /*IN*/ SURFOBJ *psoSrc,
+ /*IN*/ CLIPOBJ *pco,
+ /*IN*/ XLATEOBJ *pxlo,
+ /*IN*/ RECTL *prclDst,
+ /*IN*/ RECTL *prclSrc,
+ /*IN*/ ULONG iTransColor,
+ /*IN*/ ULONG ulReserved);
+
+typedef BOOL DDKAPI
+(*PFN_DrvUnloadFontFile)(
+ /*IN*/ ULONG_PTR iFile);
+
+
+WIN32KAPI
+VOID
+DDKAPI
+DrvDisableDirectDraw(
+ /*IN*/ DHPDEV dhpdev);
+
+WIN32KAPI
+BOOL
+DDKAPI
+DrvEnableDirectDraw(
+ /*IN*/ DHPDEV dhpdev,
+ /*OUT*/ DD_CALLBACKS *pCallBacks,
+ /*OUT*/ DD_SURFACECALLBACKS *pSurfaceCallBacks,
+ /*OUT*/ DD_PALETTECALLBACKS *pPaletteCallBacks);
+
+WIN32KAPI
+BOOL
+DDKAPI
+DrvGetDirectDrawInfo(
+ /*IN*/ DHPDEV dhpdev,
+ /*OUT*/ DD_HALINFO *pHalInfo,
+ /*OUT*/ DWORD *pdwNumHeaps,
+ /*OUT*/ VIDEOMEMORY *pvmList,
+ /*OUT*/ DWORD *pdwNumFourCCCodes,
+ /*OUT*/ DWORD *pdwFourCC);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* defined __VIDEO_H */
+
+#endif /* __WINDDI_H */
diff --git a/tcc/include/winapi/ddk/winddk.h b/tcc/include/winapi/ddk/winddk.h
new file mode 100644
index 0000000..4b8f782
--- /dev/null
+++ b/tcc/include/winapi/ddk/winddk.h
@@ -0,0 +1,9452 @@
+/*
+ * winddk.h
+ *
+ * Windows Device Driver Kit
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __WINDDK_H
+#define __WINDDK_H
+
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+** Definitions specific to this Device Driver Kit
+*/
+#define DDKAPI __stdcall
+#define DDKFASTAPI __fastcall
+#define DDKCDECLAPI __cdecl
+
+#if defined(_NTOSKRNL_)
+#ifndef NTOSAPI
+#define NTOSAPI DECL_EXPORT
+#endif
+#define DECLARE_INTERNAL_OBJECT(x) typedef struct _##x; typedef struct _##x *P##x;
+#define DECLARE_INTERNAL_OBJECT2(x,y) typedef struct _##x; typedef struct _##x *P##y;
+#else
+#ifndef NTOSAPI
+#define NTOSAPI DECL_IMPORT
+#endif
+#define DECLARE_INTERNAL_OBJECT(x) struct _##x; typedef struct _##x *P##x;
+#define DECLARE_INTERNAL_OBJECT2(x,y) struct _##x; typedef struct _##x *P##y;
+#endif
+
+/* Pseudo modifiers for parameters
+ We don't use these unnecessary defines in the w32api headers. Define
+ them by default since that is what people expect, but allow users
+ to avoid the pollution. */
+#ifndef _NO_W32_PSEUDO_MODIFIERS
+#define IN
+#define OUT
+#define OPTIONAL
+#define UNALLIGNED
+#endif
+
+#define CONST const
+#define VOLATILE volatile
+
+#define RESTRICTED_POINTER
+#define POINTER_ALIGNMENT
+
+#ifdef NONAMELESSUNION
+# define _DDK_DUMMYUNION_MEMBER(name) DUMMYUNIONNAME.name
+# define _DDK_DUMMYUNION_N_MEMBER(n, name) DUMMYUNIONNAME##n.name
+#else
+# define _DDK_DUMMYUNION_MEMBER(name) name
+# define _DDK_DUMMYUNION_N_MEMBER(n, name) name
+#endif
+
+/*
+** Forward declarations
+*/
+
+struct _IRP;
+struct _MDL;
+struct _KAPC;
+struct _KDPC;
+struct _KPCR;
+struct _KPRCB;
+struct _KTSS;
+struct _FILE_OBJECT;
+struct _DMA_ADAPTER;
+struct _DEVICE_OBJECT;
+struct _DRIVER_OBJECT;
+struct _SECTION_OBJECT;
+struct _IO_STATUS_BLOCK;
+struct _DEVICE_DESCRIPTION;
+struct _SCATTER_GATHER_LIST;
+
+DECLARE_INTERNAL_OBJECT(ADAPTER_OBJECT)
+DECLARE_INTERNAL_OBJECT(DMA_ADAPTER)
+DECLARE_INTERNAL_OBJECT(IO_STATUS_BLOCK)
+DECLARE_INTERNAL_OBJECT(SECTION_OBJECT)
+
+#if 1
+/* FIXME: Unknown definitions */
+struct _SET_PARTITION_INFORMATION_EX;
+typedef ULONG WAIT_TYPE;
+typedef HANDLE TRACEHANDLE;
+typedef PVOID PWMILIB_CONTEXT;
+typedef PVOID PSYSCTL_IRP_DISPOSITION;
+typedef ULONG LOGICAL;
+#endif
+
+/*
+** Routines specific to this DDK
+*/
+
+#define TAG(_a, _b, _c, _d) (ULONG) \
+ (((_a) << 0) + ((_b) << 8) + ((_c) << 16) + ((_d) << 24))
+
+#ifdef __GNUC__
+static __inline struct _KPCR * KeGetCurrentKPCR(
+ VOID)
+{
+ ULONG Value;
+
+ __asm__ __volatile__ (
+#if (__GNUC__ >= 3)
+ /* support -masm=intel */
+ "mov{l} {%%fs:0x18, %0|%0, %%fs:0x18}\n\t"
+#else
+ "movl %%fs:0x18, %0\n\t"
+#endif
+ : "=r" (Value)
+ : /* no inputs */
+ );
+ return (struct _KPCR *) Value;
+}
+
+#elif defined( __WATCOMC__ )
+
+extern struct _KPCR * KeGetCurrentKPCR( void );
+#pragma aux KeGetCurrentKPCR = \
+ "mov eax, fs:[0x18]" \
+ value [ eax ];
+
+#endif
+
+/*
+** Simple structures
+*/
+
+typedef LONG KPRIORITY;
+typedef UCHAR KIRQL, *PKIRQL;
+typedef ULONG_PTR KSPIN_LOCK, *PKSPIN_LOCK;
+typedef ULONG_PTR KAFFINITY, *PKAFFINITY;
+typedef CCHAR KPROCESSOR_MODE;
+
+typedef enum _MODE {
+ KernelMode,
+ UserMode,
+ MaximumMode
+} MODE;
+
+
+/* Structures not exposed to drivers */
+typedef struct _IO_TIMER *PIO_TIMER;
+typedef struct _EPROCESS *PEPROCESS;
+typedef struct _ETHREAD *PETHREAD;
+typedef struct _KINTERRUPT *PKINTERRUPT;
+typedef struct _OBJECT_TYPE *POBJECT_TYPE;
+typedef struct _KTHREAD *PKTHREAD, *PRKTHREAD;
+typedef struct _COMPRESSED_DATA_INFO *PCOMPRESSED_DATA_INFO;
+typedef struct _HAL_DISPATCH_TABLE *PHAL_DISPATCH_TABLE;
+typedef struct _HAL_PRIVATE_DISPATCH_TABLE *PHAL_PRIVATE_DISPATCH_TABLE;
+typedef struct _DRIVE_LAYOUT_INFORMATION *PDRIVE_LAYOUT_INFORMATION;
+typedef struct _DRIVE_LAYOUT_INFORMATION_EX *PDRIVE_LAYOUT_INFORMATION_EX;
+
+/* Constants */
+#define MAXIMUM_PROCESSORS 32
+
+#define MAXIMUM_WAIT_OBJECTS 64
+
+#define METHOD_BUFFERED 0
+#define METHOD_IN_DIRECT 1
+#define METHOD_OUT_DIRECT 2
+#define METHOD_NEITHER 3
+
+#define LOW_PRIORITY 0
+#define LOW_REALTIME_PRIORITY 16
+#define HIGH_PRIORITY 31
+#define MAXIMUM_PRIORITY 32
+
+#define FILE_SUPERSEDED 0x00000000
+#define FILE_OPENED 0x00000001
+#define FILE_CREATED 0x00000002
+#define FILE_OVERWRITTEN 0x00000003
+#define FILE_EXISTS 0x00000004
+#define FILE_DOES_NOT_EXIST 0x00000005
+
+/* also in winnt.h */
+#define FILE_LIST_DIRECTORY 0x00000001
+#define FILE_READ_DATA 0x00000001
+#define FILE_ADD_FILE 0x00000002
+#define FILE_WRITE_DATA 0x00000002
+#define FILE_ADD_SUBDIRECTORY 0x00000004
+#define FILE_APPEND_DATA 0x00000004
+#define FILE_CREATE_PIPE_INSTANCE 0x00000004
+#define FILE_READ_EA 0x00000008
+#define FILE_WRITE_EA 0x00000010
+#define FILE_EXECUTE 0x00000020
+#define FILE_TRAVERSE 0x00000020
+#define FILE_DELETE_CHILD 0x00000040
+#define FILE_READ_ATTRIBUTES 0x00000080
+#define FILE_WRITE_ATTRIBUTES 0x00000100
+
+#define FILE_SHARE_READ 0x00000001
+#define FILE_SHARE_WRITE 0x00000002
+#define FILE_SHARE_DELETE 0x00000004
+#define FILE_SHARE_VALID_FLAGS 0x00000007
+
+#define FILE_ATTRIBUTE_READONLY 0x00000001
+#define FILE_ATTRIBUTE_HIDDEN 0x00000002
+#define FILE_ATTRIBUTE_SYSTEM 0x00000004
+#define FILE_ATTRIBUTE_DIRECTORY 0x00000010
+#define FILE_ATTRIBUTE_ARCHIVE 0x00000020
+#define FILE_ATTRIBUTE_DEVICE 0x00000040
+#define FILE_ATTRIBUTE_NORMAL 0x00000080
+#define FILE_ATTRIBUTE_TEMPORARY 0x00000100
+#define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200
+#define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400
+#define FILE_ATTRIBUTE_COMPRESSED 0x00000800
+#define FILE_ATTRIBUTE_OFFLINE 0x00001000
+#define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000
+#define FILE_ATTRIBUTE_ENCRYPTED 0x00004000
+
+#define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7
+#define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7
+
+#define FILE_COPY_STRUCTURED_STORAGE 0x00000041
+#define FILE_STRUCTURED_STORAGE 0x00000441
+
+#define FILE_VALID_OPTION_FLAGS 0x00ffffff
+#define FILE_VALID_PIPE_OPTION_FLAGS 0x00000032
+#define FILE_VALID_MAILSLOT_OPTION_FLAGS 0x00000032
+#define FILE_VALID_SET_FLAGS 0x00000036
+
+#define FILE_SUPERSEDE 0x00000000
+#define FILE_OPEN 0x00000001
+#define FILE_CREATE 0x00000002
+#define FILE_OPEN_IF 0x00000003
+#define FILE_OVERWRITE 0x00000004
+#define FILE_OVERWRITE_IF 0x00000005
+#define FILE_MAXIMUM_DISPOSITION 0x00000005
+
+#define FILE_DIRECTORY_FILE 0x00000001
+#define FILE_WRITE_THROUGH 0x00000002
+#define FILE_SEQUENTIAL_ONLY 0x00000004
+#define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
+#define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
+#define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
+#define FILE_NON_DIRECTORY_FILE 0x00000040
+#define FILE_CREATE_TREE_CONNECTION 0x00000080
+#define FILE_COMPLETE_IF_OPLOCKED 0x00000100
+#define FILE_NO_EA_KNOWLEDGE 0x00000200
+#define FILE_OPEN_FOR_RECOVERY 0x00000400
+#define FILE_RANDOM_ACCESS 0x00000800
+#define FILE_DELETE_ON_CLOSE 0x00001000
+#define FILE_OPEN_BY_FILE_ID 0x00002000
+#define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000
+#define FILE_NO_COMPRESSION 0x00008000
+#define FILE_RESERVE_OPFILTER 0x00100000
+#define FILE_OPEN_REPARSE_POINT 0x00200000
+#define FILE_OPEN_NO_RECALL 0x00400000
+#define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000
+
+#define FILE_ANY_ACCESS 0x00000000
+#define FILE_SPECIAL_ACCESS FILE_ANY_ACCESS
+#define FILE_READ_ACCESS 0x00000001
+#define FILE_WRITE_ACCESS 0x00000002
+
+#define FILE_ALL_ACCESS \
+ (STANDARD_RIGHTS_REQUIRED | \
+ SYNCHRONIZE | \
+ 0x1FF)
+
+#define FILE_GENERIC_EXECUTE \
+ (STANDARD_RIGHTS_EXECUTE | \
+ FILE_READ_ATTRIBUTES | \
+ FILE_EXECUTE | \
+ SYNCHRONIZE)
+
+#define FILE_GENERIC_READ \
+ (STANDARD_RIGHTS_READ | \
+ FILE_READ_DATA | \
+ FILE_READ_ATTRIBUTES | \
+ FILE_READ_EA | \
+ SYNCHRONIZE)
+
+#define FILE_GENERIC_WRITE \
+ (STANDARD_RIGHTS_WRITE | \
+ FILE_WRITE_DATA | \
+ FILE_WRITE_ATTRIBUTES | \
+ FILE_WRITE_EA | \
+ FILE_APPEND_DATA | \
+ SYNCHRONIZE)
+/* end winnt.h */
+
+#define DIRECTORY_QUERY (0x0001)
+#define DIRECTORY_TRAVERSE (0x0002)
+#define DIRECTORY_CREATE_OBJECT (0x0004)
+#define DIRECTORY_CREATE_SUBDIRECTORY (0x0008)
+#define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF)
+
+/* Exported object types */
+extern NTOSAPI POBJECT_TYPE ExDesktopObjectType;
+extern NTOSAPI POBJECT_TYPE ExEventObjectType;
+extern NTOSAPI POBJECT_TYPE ExSemaphoreObjectType;
+extern NTOSAPI POBJECT_TYPE ExWindowStationObjectType;
+extern NTOSAPI POBJECT_TYPE IoAdapterObjectType;
+extern NTOSAPI ULONG IoDeviceHandlerObjectSize;
+extern NTOSAPI POBJECT_TYPE IoDeviceHandlerObjectType;
+extern NTOSAPI POBJECT_TYPE IoDeviceObjectType;
+extern NTOSAPI POBJECT_TYPE IoDriverObjectType;
+extern NTOSAPI POBJECT_TYPE IoFileObjectType;
+extern NTOSAPI POBJECT_TYPE LpcPortObjectType;
+extern NTOSAPI POBJECT_TYPE MmSectionObjectType;
+extern NTOSAPI POBJECT_TYPE SeTokenObjectType;
+
+extern NTOSAPI CCHAR KeNumberProcessors;
+extern NTOSAPI PHAL_DISPATCH_TABLE HalDispatchTable;
+extern NTOSAPI PHAL_PRIVATE_DISPATCH_TABLE HalPrivateDispatchTable;
+
+
+/*
+** IRP function codes
+*/
+
+#define IRP_MJ_CREATE 0x00
+#define IRP_MJ_CREATE_NAMED_PIPE 0x01
+#define IRP_MJ_CLOSE 0x02
+#define IRP_MJ_READ 0x03
+#define IRP_MJ_WRITE 0x04
+#define IRP_MJ_QUERY_INFORMATION 0x05
+#define IRP_MJ_SET_INFORMATION 0x06
+#define IRP_MJ_QUERY_EA 0x07
+#define IRP_MJ_SET_EA 0x08
+#define IRP_MJ_FLUSH_BUFFERS 0x09
+#define IRP_MJ_QUERY_VOLUME_INFORMATION 0x0a
+#define IRP_MJ_SET_VOLUME_INFORMATION 0x0b
+#define IRP_MJ_DIRECTORY_CONTROL 0x0c
+#define IRP_MJ_FILE_SYSTEM_CONTROL 0x0d
+#define IRP_MJ_DEVICE_CONTROL 0x0e
+#define IRP_MJ_INTERNAL_DEVICE_CONTROL 0x0f
+#define IRP_MJ_SCSI 0x0f
+#define IRP_MJ_SHUTDOWN 0x10
+#define IRP_MJ_LOCK_CONTROL 0x11
+#define IRP_MJ_CLEANUP 0x12
+#define IRP_MJ_CREATE_MAILSLOT 0x13
+#define IRP_MJ_QUERY_SECURITY 0x14
+#define IRP_MJ_SET_SECURITY 0x15
+#define IRP_MJ_POWER 0x16
+#define IRP_MJ_SYSTEM_CONTROL 0x17
+#define IRP_MJ_DEVICE_CHANGE 0x18
+#define IRP_MJ_QUERY_QUOTA 0x19
+#define IRP_MJ_SET_QUOTA 0x1a
+#define IRP_MJ_PNP 0x1b
+#define IRP_MJ_PNP_POWER 0x1b
+#define IRP_MJ_MAXIMUM_FUNCTION 0x1b
+
+#define IRP_MN_QUERY_DIRECTORY 0x01
+#define IRP_MN_NOTIFY_CHANGE_DIRECTORY 0x02
+
+#define IRP_MN_USER_FS_REQUEST 0x00
+#define IRP_MN_MOUNT_VOLUME 0x01
+#define IRP_MN_VERIFY_VOLUME 0x02
+#define IRP_MN_LOAD_FILE_SYSTEM 0x03
+#define IRP_MN_TRACK_LINK 0x04
+#define IRP_MN_KERNEL_CALL 0x04
+
+#define IRP_MN_LOCK 0x01
+#define IRP_MN_UNLOCK_SINGLE 0x02
+#define IRP_MN_UNLOCK_ALL 0x03
+#define IRP_MN_UNLOCK_ALL_BY_KEY 0x04
+
+#define IRP_MN_NORMAL 0x00
+#define IRP_MN_DPC 0x01
+#define IRP_MN_MDL 0x02
+#define IRP_MN_COMPLETE 0x04
+#define IRP_MN_COMPRESSED 0x08
+
+#define IRP_MN_MDL_DPC (IRP_MN_MDL | IRP_MN_DPC)
+#define IRP_MN_COMPLETE_MDL (IRP_MN_COMPLETE | IRP_MN_MDL)
+#define IRP_MN_COMPLETE_MDL_DPC (IRP_MN_COMPLETE_MDL | IRP_MN_DPC)
+
+#define IRP_MN_SCSI_CLASS 0x01
+
+#define IRP_MN_START_DEVICE 0x00
+#define IRP_MN_QUERY_REMOVE_DEVICE 0x01
+#define IRP_MN_REMOVE_DEVICE 0x02
+#define IRP_MN_CANCEL_REMOVE_DEVICE 0x03
+#define IRP_MN_STOP_DEVICE 0x04
+#define IRP_MN_QUERY_STOP_DEVICE 0x05
+#define IRP_MN_CANCEL_STOP_DEVICE 0x06
+
+#define IRP_MN_QUERY_DEVICE_RELATIONS 0x07
+#define IRP_MN_QUERY_INTERFACE 0x08
+#define IRP_MN_QUERY_CAPABILITIES 0x09
+#define IRP_MN_QUERY_RESOURCES 0x0A
+#define IRP_MN_QUERY_RESOURCE_REQUIREMENTS 0x0B
+#define IRP_MN_QUERY_DEVICE_TEXT 0x0C
+#define IRP_MN_FILTER_RESOURCE_REQUIREMENTS 0x0D
+
+#define IRP_MN_READ_CONFIG 0x0F
+#define IRP_MN_WRITE_CONFIG 0x10
+#define IRP_MN_EJECT 0x11
+#define IRP_MN_SET_LOCK 0x12
+#define IRP_MN_QUERY_ID 0x13
+#define IRP_MN_QUERY_PNP_DEVICE_STATE 0x14
+#define IRP_MN_QUERY_BUS_INFORMATION 0x15
+#define IRP_MN_DEVICE_USAGE_NOTIFICATION 0x16
+#define IRP_MN_SURPRISE_REMOVAL 0x17
+#define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18
+
+#define IRP_MN_WAIT_WAKE 0x00
+#define IRP_MN_POWER_SEQUENCE 0x01
+#define IRP_MN_SET_POWER 0x02
+#define IRP_MN_QUERY_POWER 0x03
+
+#define IRP_MN_QUERY_ALL_DATA 0x00
+#define IRP_MN_QUERY_SINGLE_INSTANCE 0x01
+#define IRP_MN_CHANGE_SINGLE_INSTANCE 0x02
+#define IRP_MN_CHANGE_SINGLE_ITEM 0x03
+#define IRP_MN_ENABLE_EVENTS 0x04
+#define IRP_MN_DISABLE_EVENTS 0x05
+#define IRP_MN_ENABLE_COLLECTION 0x06
+#define IRP_MN_DISABLE_COLLECTION 0x07
+#define IRP_MN_REGINFO 0x08
+#define IRP_MN_EXECUTE_METHOD 0x09
+
+#define IRP_MN_REGINFO_EX 0x0b
+
+typedef enum _IO_ALLOCATION_ACTION {
+ KeepObject = 1,
+ DeallocateObject,
+ DeallocateObjectKeepRegisters
+} IO_ALLOCATION_ACTION, *PIO_ALLOCATION_ACTION;
+
+typedef IO_ALLOCATION_ACTION
+(DDKAPI *PDRIVER_CONTROL)(
+ /*IN*/ struct _DEVICE_OBJECT *DeviceObject,
+ /*IN*/ struct _IRP *Irp,
+ /*IN*/ PVOID MapRegisterBase,
+ /*IN*/ PVOID Context);
+
+typedef VOID
+(DDKAPI *PDRIVER_LIST_CONTROL)(
+ /*IN*/ struct _DEVICE_OBJECT *DeviceObject,
+ /*IN*/ struct _IRP *Irp,
+ /*IN*/ struct _SCATTER_GATHER_LIST *ScatterGather,
+ /*IN*/ PVOID Context);
+
+typedef NTSTATUS
+(DDKAPI *PDRIVER_ADD_DEVICE)(
+ /*IN*/ struct _DRIVER_OBJECT *DriverObject,
+ /*IN*/ struct _DEVICE_OBJECT *PhysicalDeviceObject);
+
+typedef NTSTATUS
+(DDKAPI *PIO_COMPLETION_ROUTINE)(
+ /*IN*/ struct _DEVICE_OBJECT *DeviceObject,
+ /*IN*/ struct _IRP *Irp,
+ /*IN*/ PVOID Context);
+
+typedef VOID
+(DDKAPI *PDRIVER_CANCEL)(
+ /*IN*/ struct _DEVICE_OBJECT *DeviceObject,
+ /*IN*/ struct _IRP *Irp);
+
+typedef VOID
+(DDKAPI *PKDEFERRED_ROUTINE)(
+ /*IN*/ struct _KDPC *Dpc,
+ /*IN*/ PVOID DeferredContext,
+ /*IN*/ PVOID SystemArgument1,
+ /*IN*/ PVOID SystemArgument2);
+
+typedef NTSTATUS
+(DDKAPI *PDRIVER_DISPATCH)(
+ /*IN*/ struct _DEVICE_OBJECT *DeviceObject,
+ /*IN*/ struct _IRP *Irp);
+
+typedef VOID
+(DDKAPI *PIO_DPC_ROUTINE)(
+ /*IN*/ struct _KDPC *Dpc,
+ /*IN*/ struct _DEVICE_OBJECT *DeviceObject,
+ /*IN*/ struct _IRP *Irp,
+ /*IN*/ PVOID Context);
+
+typedef NTSTATUS
+(DDKAPI *PMM_DLL_INITIALIZE)(
+ /*IN*/ PUNICODE_STRING RegistryPath);
+
+typedef NTSTATUS
+(DDKAPI *PMM_DLL_UNLOAD)(
+ VOID);
+
+typedef NTSTATUS
+(DDKAPI *PDRIVER_ENTRY)(
+ /*IN*/ struct _DRIVER_OBJECT *DriverObject,
+ /*IN*/ PUNICODE_STRING RegistryPath);
+
+typedef NTSTATUS
+(DDKAPI *PDRIVER_INITIALIZE)(
+ /*IN*/ struct _DRIVER_OBJECT *DriverObject,
+ /*IN*/ PUNICODE_STRING RegistryPath);
+
+typedef BOOLEAN
+(DDKAPI *PKSERVICE_ROUTINE)(
+ /*IN*/ struct _KINTERRUPT *Interrupt,
+ /*IN*/ PVOID ServiceContext);
+
+typedef VOID
+(DDKAPI *PIO_TIMER_ROUTINE)(
+ /*IN*/ struct _DEVICE_OBJECT *DeviceObject,
+ /*IN*/ PVOID Context);
+
+typedef VOID
+(DDKAPI *PDRIVER_REINITIALIZE)(
+ /*IN*/ struct _DRIVER_OBJECT *DriverObject,
+ /*IN*/ PVOID Context,
+ /*IN*/ ULONG Count);
+
+typedef NTSTATUS
+(DDKAPI *PDRIVER_STARTIO)(
+ /*IN*/ struct _DEVICE_OBJECT *DeviceObject,
+ /*IN*/ struct _IRP *Irp);
+
+typedef BOOLEAN
+(DDKAPI *PKSYNCHRONIZE_ROUTINE)(
+ /*IN*/ PVOID SynchronizeContext);
+
+typedef VOID
+(DDKAPI *PDRIVER_UNLOAD)(
+ /*IN*/ struct _DRIVER_OBJECT *DriverObject);
+
+
+
+/*
+** Plug and Play structures
+*/
+
+typedef VOID DDKAPI
+(*PINTERFACE_REFERENCE)(
+ PVOID Context);
+
+typedef VOID DDKAPI
+(*PINTERFACE_DEREFERENCE)(
+ PVOID Context);
+
+typedef BOOLEAN DDKAPI
+(*PTRANSLATE_BUS_ADDRESS)(
+ /*IN*/ PVOID Context,
+ /*IN*/ PHYSICAL_ADDRESS BusAddress,
+ /*IN*/ ULONG Length,
+ /*IN OUT*/ PULONG AddressSpace,
+ /*OUT*/ PPHYSICAL_ADDRESS TranslatedAddress);
+
+typedef struct _DMA_ADAPTER* DDKAPI
+(*PGET_DMA_ADAPTER)(
+ /*IN*/ PVOID Context,
+ /*IN*/ struct _DEVICE_DESCRIPTION *DeviceDescriptor,
+ /*OUT*/ PULONG NumberOfMapRegisters);
+
+typedef ULONG DDKAPI
+(*PGET_SET_DEVICE_DATA)(
+ /*IN*/ PVOID Context,
+ /*IN*/ ULONG DataType,
+ /*IN*/ PVOID Buffer,
+ /*IN*/ ULONG Offset,
+ /*IN*/ ULONG Length);
+
+typedef union _POWER_STATE {
+ SYSTEM_POWER_STATE SystemState;
+ DEVICE_POWER_STATE DeviceState;
+} POWER_STATE, *PPOWER_STATE;
+
+typedef enum _POWER_STATE_TYPE {
+ SystemPowerState,
+ DevicePowerState
+} POWER_STATE_TYPE, *PPOWER_STATE_TYPE;
+
+typedef struct _BUS_INTERFACE_STANDARD {
+ USHORT Size;
+ USHORT Version;
+ PVOID Context;
+ PINTERFACE_REFERENCE InterfaceReference;
+ PINTERFACE_DEREFERENCE InterfaceDereference;
+ PTRANSLATE_BUS_ADDRESS TranslateBusAddress;
+ PGET_DMA_ADAPTER GetDmaAdapter;
+ PGET_SET_DEVICE_DATA SetBusData;
+ PGET_SET_DEVICE_DATA GetBusData;
+} BUS_INTERFACE_STANDARD, *PBUS_INTERFACE_STANDARD;
+
+typedef struct _DEVICE_CAPABILITIES {
+ USHORT Size;
+ USHORT Version;
+ ULONG DeviceD1 : 1;
+ ULONG DeviceD2 : 1;
+ ULONG LockSupported : 1;
+ ULONG EjectSupported : 1;
+ ULONG Removable : 1;
+ ULONG DockDevice : 1;
+ ULONG UniqueID : 1;
+ ULONG SilentInstall : 1;
+ ULONG RawDeviceOK : 1;
+ ULONG SurpriseRemovalOK : 1;
+ ULONG WakeFromD0 : 1;
+ ULONG WakeFromD1 : 1;
+ ULONG WakeFromD2 : 1;
+ ULONG WakeFromD3 : 1;
+ ULONG HardwareDisabled : 1;
+ ULONG NonDynamic : 1;
+ ULONG WarmEjectSupported : 1;
+ ULONG NoDisplayInUI : 1;
+ ULONG Reserved : 14;
+ ULONG Address;
+ ULONG UINumber;
+ DEVICE_POWER_STATE DeviceState[PowerSystemMaximum];
+ SYSTEM_POWER_STATE SystemWake;
+ DEVICE_POWER_STATE DeviceWake;
+ ULONG D1Latency;
+ ULONG D2Latency;
+ ULONG D3Latency;
+} DEVICE_CAPABILITIES, *PDEVICE_CAPABILITIES;
+
+typedef struct _DEVICE_INTERFACE_CHANGE_NOTIFICATION {
+ USHORT Version;
+ USHORT Size;
+ GUID Event;
+ GUID InterfaceClassGuid;
+ PUNICODE_STRING SymbolicLinkName;
+} DEVICE_INTERFACE_CHANGE_NOTIFICATION, *PDEVICE_INTERFACE_CHANGE_NOTIFICATION;
+
+typedef struct _HWPROFILE_CHANGE_NOTIFICATION {
+ USHORT Version;
+ USHORT Size;
+ GUID Event;
+} HWPROFILE_CHANGE_NOTIFICATION, *PHWPROFILE_CHANGE_NOTIFICATION;
+
+#undef INTERFACE
+
+typedef struct _INTERFACE {
+ USHORT Size;
+ USHORT Version;
+ PVOID Context;
+ PINTERFACE_REFERENCE InterfaceReference;
+ PINTERFACE_DEREFERENCE InterfaceDereference;
+} INTERFACE, *PINTERFACE;
+
+typedef struct _PLUGPLAY_NOTIFICATION_HEADER {
+ USHORT Version;
+ USHORT Size;
+ GUID Event;
+} PLUGPLAY_NOTIFICATION_HEADER, *PPLUGPLAY_NOTIFICATION_HEADER;
+
+typedef ULONG PNP_DEVICE_STATE, *PPNP_DEVICE_STATE;
+
+/* PNP_DEVICE_STATE */
+
+#define PNP_DEVICE_DISABLED 0x00000001
+#define PNP_DEVICE_DONT_DISPLAY_IN_UI 0x00000002
+#define PNP_DEVICE_FAILED 0x00000004
+#define PNP_DEVICE_REMOVED 0x00000008
+#define PNP_DEVICE_RESOURCE_REQUIREMENTS_CHANGED 0x00000010
+#define PNP_DEVICE_NOT_DISABLEABLE 0x00000020
+
+typedef struct _TARGET_DEVICE_CUSTOM_NOTIFICATION {
+ USHORT Version;
+ USHORT Size;
+ GUID Event;
+ struct _FILE_OBJECT *FileObject;
+ LONG NameBufferOffset;
+ UCHAR CustomDataBuffer[1];
+} TARGET_DEVICE_CUSTOM_NOTIFICATION, *PTARGET_DEVICE_CUSTOM_NOTIFICATION;
+
+typedef struct _TARGET_DEVICE_REMOVAL_NOTIFICATION {
+ USHORT Version;
+ USHORT Size;
+ GUID Event;
+ struct _FILE_OBJECT *FileObject;
+} TARGET_DEVICE_REMOVAL_NOTIFICATION, *PTARGET_DEVICE_REMOVAL_NOTIFICATION;
+
+typedef enum _BUS_QUERY_ID_TYPE {
+ BusQueryDeviceID,
+ BusQueryHardwareIDs,
+ BusQueryCompatibleIDs,
+ BusQueryInstanceID,
+ BusQueryDeviceSerialNumber
+} BUS_QUERY_ID_TYPE, *PBUS_QUERY_ID_TYPE;
+
+typedef enum _DEVICE_TEXT_TYPE {
+ DeviceTextDescription,
+ DeviceTextLocationInformation
+} DEVICE_TEXT_TYPE, *PDEVICE_TEXT_TYPE;
+
+typedef enum _DEVICE_USAGE_NOTIFICATION_TYPE {
+ DeviceUsageTypeUndefined,
+ DeviceUsageTypePaging,
+ DeviceUsageTypeHibernation,
+ DeviceUsageTypeDumpFile
+} DEVICE_USAGE_NOTIFICATION_TYPE;
+
+typedef struct _POWER_SEQUENCE {
+ ULONG SequenceD1;
+ ULONG SequenceD2;
+ ULONG SequenceD3;
+} POWER_SEQUENCE, *PPOWER_SEQUENCE;
+
+typedef enum {
+ DevicePropertyDeviceDescription,
+ DevicePropertyHardwareID,
+ DevicePropertyCompatibleIDs,
+ DevicePropertyBootConfiguration,
+ DevicePropertyBootConfigurationTranslated,
+ DevicePropertyClassName,
+ DevicePropertyClassGuid,
+ DevicePropertyDriverKeyName,
+ DevicePropertyManufacturer,
+ DevicePropertyFriendlyName,
+ DevicePropertyLocationInformation,
+ DevicePropertyPhysicalDeviceObjectName,
+ DevicePropertyBusTypeGuid,
+ DevicePropertyLegacyBusType,
+ DevicePropertyBusNumber,
+ DevicePropertyEnumeratorName,
+ DevicePropertyAddress,
+ DevicePropertyUINumber,
+ DevicePropertyInstallState,
+ DevicePropertyRemovalPolicy
+} DEVICE_REGISTRY_PROPERTY;
+
+typedef enum _IO_NOTIFICATION_EVENT_CATEGORY {
+ EventCategoryReserved,
+ EventCategoryHardwareProfileChange,
+ EventCategoryDeviceInterfaceChange,
+ EventCategoryTargetDeviceChange
+} IO_NOTIFICATION_EVENT_CATEGORY;
+
+#define PNPNOTIFY_DEVICE_INTERFACE_INCLUDE_EXISTING_INTERFACES 0x00000001
+
+typedef NTSTATUS DDKAPI
+(*PDRIVER_NOTIFICATION_CALLBACK_ROUTINE)(
+ /*IN*/ PVOID NotificationStructure,
+ /*IN*/ PVOID Context);
+
+typedef VOID DDKAPI
+(*PDEVICE_CHANGE_COMPLETE_CALLBACK)(
+ /*IN*/ PVOID Context);
+
+
+
+/*
+** System structures
+*/
+
+#define SYMBOLIC_LINK_QUERY 0x0001
+#define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
+
+/* also in winnt,h */
+#define DUPLICATE_CLOSE_SOURCE 0x00000001
+#define DUPLICATE_SAME_ACCESS 0x00000002
+#define DUPLICATE_SAME_ATTRIBUTES 0x00000004
+/* end winnt.h */
+
+typedef struct _OBJECT_NAME_INFORMATION {
+ UNICODE_STRING Name;
+} OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION;
+
+typedef VOID DDKAPI
+(*PIO_APC_ROUTINE)(
+ /*IN*/ PVOID ApcContext,
+ /*IN*/ PIO_STATUS_BLOCK IoStatusBlock,
+ /*IN*/ ULONG Reserved);
+
+typedef struct _IO_STATUS_BLOCK {
+ _ANONYMOUS_UNION union {
+ NTSTATUS Status;
+ PVOID Pointer;
+ } DUMMYUNIONNAME;
+ ULONG_PTR Information;
+} IO_STATUS_BLOCK;
+
+typedef VOID DDKAPI
+(*PKNORMAL_ROUTINE)(
+ /*IN*/ PVOID NormalContext,
+ /*IN*/ PVOID SystemArgument1,
+ /*IN*/ PVOID SystemArgument2);
+
+typedef VOID DDKAPI
+(*PKKERNEL_ROUTINE)(
+ /*IN*/ struct _KAPC *Apc,
+ /*IN OUT*/ PKNORMAL_ROUTINE *NormalRoutine,
+ /*IN OUT*/ PVOID *NormalContext,
+ /*IN OUT*/ PVOID *SystemArgument1,
+ /*IN OUT*/ PVOID *SystemArgument2);
+
+typedef VOID DDKAPI
+(*PKRUNDOWN_ROUTINE)(
+ /*IN*/ struct _KAPC *Apc);
+
+typedef BOOLEAN DDKAPI
+(*PKTRANSFER_ROUTINE)(
+ VOID);
+
+typedef struct _KAPC {
+ CSHORT Type;
+ CSHORT Size;
+ ULONG Spare0;
+ struct _KTHREAD *Thread;
+ LIST_ENTRY ApcListEntry;
+ PKKERNEL_ROUTINE KernelRoutine;
+ PKRUNDOWN_ROUTINE RundownRoutine;
+ PKNORMAL_ROUTINE NormalRoutine;
+ PVOID NormalContext;
+ PVOID SystemArgument1;
+ PVOID SystemArgument2;
+ CCHAR ApcStateIndex;
+ KPROCESSOR_MODE ApcMode;
+ BOOLEAN Inserted;
+} KAPC, *PKAPC, *RESTRICTED_POINTER PRKAPC;
+
+typedef struct _KDEVICE_QUEUE {
+ CSHORT Type;
+ CSHORT Size;
+ LIST_ENTRY DeviceListHead;
+ KSPIN_LOCK Lock;
+ BOOLEAN Busy;
+} KDEVICE_QUEUE, *PKDEVICE_QUEUE, *RESTRICTED_POINTER PRKDEVICE_QUEUE;
+
+typedef struct _KDEVICE_QUEUE_ENTRY {
+ LIST_ENTRY DeviceListEntry;
+ ULONG SortKey;
+ BOOLEAN Inserted;
+} KDEVICE_QUEUE_ENTRY, *PKDEVICE_QUEUE_ENTRY,
+*RESTRICTED_POINTER PRKDEVICE_QUEUE_ENTRY;
+
+#define LOCK_QUEUE_WAIT 1
+#define LOCK_QUEUE_OWNER 2
+
+typedef enum _KSPIN_LOCK_QUEUE_NUMBER {
+ LockQueueDispatcherLock,
+ LockQueueContextSwapLock,
+ LockQueuePfnLock,
+ LockQueueSystemSpaceLock,
+ LockQueueVacbLock,
+ LockQueueMasterLock,
+ LockQueueNonPagedPoolLock,
+ LockQueueIoCancelLock,
+ LockQueueWorkQueueLock,
+ LockQueueIoVpbLock,
+ LockQueueIoDatabaseLock,
+ LockQueueIoCompletionLock,
+ LockQueueNtfsStructLock,
+ LockQueueAfdWorkQueueLock,
+ LockQueueBcbLock,
+ LockQueueMaximumLock
+} KSPIN_LOCK_QUEUE_NUMBER, *PKSPIN_LOCK_QUEUE_NUMBER;
+
+typedef struct _KSPIN_LOCK_QUEUE {
+ struct _KSPIN_LOCK_QUEUE *VOLATILE Next;
+ PKSPIN_LOCK VOLATILE Lock;
+} KSPIN_LOCK_QUEUE, *PKSPIN_LOCK_QUEUE;
+
+typedef struct _KLOCK_QUEUE_HANDLE {
+ KSPIN_LOCK_QUEUE LockQueue;
+ KIRQL OldIrql;
+} KLOCK_QUEUE_HANDLE, *PKLOCK_QUEUE_HANDLE;
+
+typedef struct _KDPC {
+ CSHORT Type;
+ UCHAR Number;
+ UCHAR Importance;
+ LIST_ENTRY DpcListEntry;
+ PKDEFERRED_ROUTINE DeferredRoutine;
+ PVOID DeferredContext;
+ PVOID SystemArgument1;
+ PVOID SystemArgument2;
+ PULONG_PTR Lock;
+} KDPC, *PKDPC, *RESTRICTED_POINTER PRKDPC;
+
+typedef struct _WAIT_CONTEXT_BLOCK {
+ KDEVICE_QUEUE_ENTRY WaitQueueEntry;
+ struct _DRIVER_CONTROL *DeviceRoutine;
+ PVOID DeviceContext;
+ ULONG NumberOfMapRegisters;
+ PVOID DeviceObject;
+ PVOID CurrentIrp;
+ PKDPC BufferChainingDpc;
+} WAIT_CONTEXT_BLOCK, *PWAIT_CONTEXT_BLOCK;
+
+typedef struct _DISPATCHER_HEADER {
+ UCHAR Type;
+ UCHAR Absolute;
+ UCHAR Size;
+ UCHAR Inserted;
+ LONG SignalState;
+ LIST_ENTRY WaitListHead;
+} DISPATCHER_HEADER, *PDISPATCHER_HEADER;
+
+typedef struct _KEVENT {
+ DISPATCHER_HEADER Header;
+} KEVENT, *PKEVENT, *RESTRICTED_POINTER PRKEVENT;
+
+typedef struct _KSEMAPHORE {
+ DISPATCHER_HEADER Header;
+ LONG Limit;
+} KSEMAPHORE, *PKSEMAPHORE, *RESTRICTED_POINTER PRKSEMAPHORE;
+
+typedef struct _FAST_MUTEX {
+ LONG Count;
+ struct _KTHREAD *Owner;
+ ULONG Contention;
+ KEVENT Event;
+ ULONG OldIrql;
+} FAST_MUTEX, *PFAST_MUTEX;
+
+typedef struct _KTIMER {
+ DISPATCHER_HEADER Header;
+ ULARGE_INTEGER DueTime;
+ LIST_ENTRY TimerListEntry;
+ struct _KDPC *Dpc;
+ LONG Period;
+} KTIMER, *PKTIMER, *RESTRICTED_POINTER PRKTIMER;
+
+typedef struct _KMUTANT {
+ DISPATCHER_HEADER Header;
+ LIST_ENTRY MutantListEntry;
+ struct _KTHREAD *RESTRICTED_POINTER OwnerThread;
+ BOOLEAN Abandoned;
+ UCHAR ApcDisable;
+} KMUTANT, *PKMUTANT, *RESTRICTED_POINTER PRKMUTANT, KMUTEX, *PKMUTEX, *RESTRICTED_POINTER PRKMUTEX;
+
+typedef enum _TIMER_TYPE {
+ NotificationTimer,
+ SynchronizationTimer
+} TIMER_TYPE;
+
+#define EVENT_INCREMENT 1
+#define IO_NO_INCREMENT 0
+#define IO_CD_ROM_INCREMENT 1
+#define IO_DISK_INCREMENT 1
+#define IO_KEYBOARD_INCREMENT 6
+#define IO_MAILSLOT_INCREMENT 2
+#define IO_MOUSE_INCREMENT 6
+#define IO_NAMED_PIPE_INCREMENT 2
+#define IO_NETWORK_INCREMENT 2
+#define IO_PARALLEL_INCREMENT 1
+#define IO_SERIAL_INCREMENT 2
+#define IO_SOUND_INCREMENT 8
+#define IO_VIDEO_INCREMENT 1
+#define SEMAPHORE_INCREMENT 1
+
+typedef struct _IRP {
+ CSHORT Type;
+ USHORT Size;
+ struct _MDL *MdlAddress;
+ ULONG Flags;
+ union {
+ struct _IRP *MasterIrp;
+ LONG IrpCount;
+ PVOID SystemBuffer;
+ } AssociatedIrp;
+ LIST_ENTRY ThreadListEntry;
+ IO_STATUS_BLOCK IoStatus;
+ KPROCESSOR_MODE RequestorMode;
+ BOOLEAN PendingReturned;
+ CHAR StackCount;
+ CHAR CurrentLocation;
+ BOOLEAN Cancel;
+ KIRQL CancelIrql;
+ CCHAR ApcEnvironment;
+ UCHAR AllocationFlags;
+ PIO_STATUS_BLOCK UserIosb;
+ PKEVENT UserEvent;
+ union {
+ struct {
+ PIO_APC_ROUTINE UserApcRoutine;
+ PVOID UserApcContext;
+ } AsynchronousParameters;
+ LARGE_INTEGER AllocationSize;
+ } Overlay;
+ PDRIVER_CANCEL CancelRoutine;
+ PVOID UserBuffer;
+ union {
+ struct {
+ _ANONYMOUS_UNION union {
+ KDEVICE_QUEUE_ENTRY DeviceQueueEntry;
+ _ANONYMOUS_STRUCT struct {
+ PVOID DriverContext[4];
+ } DUMMYSTRUCTNAME;
+ } DUMMYUNIONNAME;
+ PETHREAD Thread;
+ PCHAR AuxiliaryBuffer;
+ _ANONYMOUS_STRUCT struct {
+ LIST_ENTRY ListEntry;
+ _ANONYMOUS_UNION union {
+ struct _IO_STACK_LOCATION *CurrentStackLocation;
+ ULONG PacketType;
+ } DUMMYUNIONNAME;
+ } DUMMYSTRUCTNAME;
+ struct _FILE_OBJECT *OriginalFileObject;
+ } Overlay;
+ KAPC Apc;
+ PVOID CompletionKey;
+ } Tail;
+} IRP;
+typedef struct _IRP *PIRP;
+
+/* IRP.Flags */
+
+#define SL_FORCE_ACCESS_CHECK 0x01
+#define SL_OPEN_PAGING_FILE 0x02
+#define SL_OPEN_TARGET_DIRECTORY 0x04
+#define SL_CASE_SENSITIVE 0x80
+
+#define SL_KEY_SPECIFIED 0x01
+#define SL_OVERRIDE_VERIFY_VOLUME 0x02
+#define SL_WRITE_THROUGH 0x04
+#define SL_FT_SEQUENTIAL_WRITE 0x08
+
+#define SL_FAIL_IMMEDIATELY 0x01
+#define SL_EXCLUSIVE_LOCK 0x02
+
+#define SL_RESTART_SCAN 0x01
+#define SL_RETURN_SINGLE_ENTRY 0x02
+#define SL_INDEX_SPECIFIED 0x04
+
+#define SL_WATCH_TREE 0x01
+
+#define SL_ALLOW_RAW_MOUNT 0x01
+
+#define CTL_CODE(DeviceType, Function, Method, Access)( \
+ ((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method))
+
+#define DEVICE_TYPE_FROM_CTL_CODE(ctl) (((ULONG) (ctl & 0xffff0000)) >> 16)
+
+enum
+{
+ IRP_NOCACHE = 0x1,
+ IRP_PAGING_IO = 0x2,
+ IRP_MOUNT_COMPLETION = 0x2,
+ IRP_SYNCHRONOUS_API = 0x4,
+ IRP_ASSOCIATED_IRP = 0x8,
+ IRP_BUFFERED_IO = 0x10,
+ IRP_DEALLOCATE_BUFFER = 0x20,
+ IRP_INPUT_OPERATION = 0x40,
+ IRP_SYNCHRONOUS_PAGING_IO = 0x40,
+ IRP_CREATE_OPERATION = 0x80,
+ IRP_READ_OPERATION = 0x100,
+ IRP_WRITE_OPERATION = 0x200,
+ IRP_CLOSE_OPERATION = 0x400,
+ IRP_DEFER_IO_COMPLETION = 0x800,
+ IRP_OB_QUERY_NAME = 0x1000,
+ IRP_HOLD_DEVICE_QUEUE = 0x2000,
+ IRP_RETRY_IO_COMPLETION = 0x4000
+};
+
+
+typedef struct _DRIVE_LAYOUT_INFORMATION_MBR {
+ ULONG Signature;
+} DRIVE_LAYOUT_INFORMATION_MBR, *PDRIVE_LAYOUT_INFORMATION_MBR;
+
+typedef struct _DRIVE_LAYOUT_INFORMATION_GPT {
+ GUID DiskId;
+ LARGE_INTEGER StartingUsableOffset;
+ LARGE_INTEGER UsableLength;
+ ULONG MaxPartitionCount;
+} DRIVE_LAYOUT_INFORMATION_GPT, *PDRIVE_LAYOUT_INFORMATION_GPT;
+
+typedef struct _PARTITION_INFORMATION_MBR {
+ UCHAR PartitionType;
+ BOOLEAN BootIndicator;
+ BOOLEAN RecognizedPartition;
+ ULONG HiddenSectors;
+} PARTITION_INFORMATION_MBR, *PPARTITION_INFORMATION_MBR;
+
+
+typedef struct _BOOTDISK_INFORMATION {
+ LONGLONG BootPartitionOffset;
+ LONGLONG SystemPartitionOffset;
+ ULONG BootDeviceSignature;
+ ULONG SystemDeviceSignature;
+} BOOTDISK_INFORMATION, *PBOOTDISK_INFORMATION;
+
+typedef struct _BOOTDISK_INFORMATION_EX {
+ LONGLONG BootPartitionOffset;
+ LONGLONG SystemPartitionOffset;
+ ULONG BootDeviceSignature;
+ ULONG SystemDeviceSignature;
+ GUID BootDeviceGuid;
+ GUID SystemDeviceGuid;
+ BOOLEAN BootDeviceIsGpt;
+ BOOLEAN SystemDeviceIsGpt;
+} BOOTDISK_INFORMATION_EX, *PBOOTDISK_INFORMATION_EX;
+
+typedef struct _EISA_MEMORY_TYPE {
+ UCHAR ReadWrite : 1;
+ UCHAR Cached : 1;
+ UCHAR Reserved0 : 1;
+ UCHAR Type : 2;
+ UCHAR Shared : 1;
+ UCHAR Reserved1 : 1;
+ UCHAR MoreEntries : 1;
+} EISA_MEMORY_TYPE, *PEISA_MEMORY_TYPE;
+
+#include <pshpack1.h>
+typedef struct _EISA_MEMORY_CONFIGURATION {
+ EISA_MEMORY_TYPE ConfigurationByte;
+ UCHAR DataSize;
+ USHORT AddressLowWord;
+ UCHAR AddressHighByte;
+ USHORT MemorySize;
+} EISA_MEMORY_CONFIGURATION, *PEISA_MEMORY_CONFIGURATION;
+#include <poppack.h>
+
+typedef struct _EISA_IRQ_DESCRIPTOR {
+ UCHAR Interrupt : 4;
+ UCHAR Reserved : 1;
+ UCHAR LevelTriggered : 1;
+ UCHAR Shared : 1;
+ UCHAR MoreEntries : 1;
+} EISA_IRQ_DESCRIPTOR, *PEISA_IRQ_DESCRIPTOR;
+
+typedef struct _EISA_IRQ_CONFIGURATION {
+ EISA_IRQ_DESCRIPTOR ConfigurationByte;
+ UCHAR Reserved;
+} EISA_IRQ_CONFIGURATION, *PEISA_IRQ_CONFIGURATION;
+
+typedef struct _DMA_CONFIGURATION_BYTE0 {
+ UCHAR Channel : 3;
+ UCHAR Reserved : 3;
+ UCHAR Shared : 1;
+ UCHAR MoreEntries : 1;
+} DMA_CONFIGURATION_BYTE0;
+
+typedef struct _DMA_CONFIGURATION_BYTE1 {
+ UCHAR Reserved0 : 2;
+ UCHAR TransferSize : 2;
+ UCHAR Timing : 2;
+ UCHAR Reserved1 : 2;
+} DMA_CONFIGURATION_BYTE1;
+
+typedef struct _EISA_DMA_CONFIGURATION {
+ DMA_CONFIGURATION_BYTE0 ConfigurationByte0;
+ DMA_CONFIGURATION_BYTE1 ConfigurationByte1;
+} EISA_DMA_CONFIGURATION, *PEISA_DMA_CONFIGURATION;
+
+#include <pshpack1.h>
+typedef struct _EISA_PORT_DESCRIPTOR {
+ UCHAR NumberPorts : 5;
+ UCHAR Reserved : 1;
+ UCHAR Shared : 1;
+ UCHAR MoreEntries : 1;
+} EISA_PORT_DESCRIPTOR, *PEISA_PORT_DESCRIPTOR;
+
+typedef struct _EISA_PORT_CONFIGURATION {
+ EISA_PORT_DESCRIPTOR Configuration;
+ USHORT PortAddress;
+} EISA_PORT_CONFIGURATION, *PEISA_PORT_CONFIGURATION;
+#include <poppack.h>
+
+typedef struct _CM_EISA_FUNCTION_INFORMATION {
+ ULONG CompressedId;
+ UCHAR IdSlotFlags1;
+ UCHAR IdSlotFlags2;
+ UCHAR MinorRevision;
+ UCHAR MajorRevision;
+ UCHAR Selections[26];
+ UCHAR FunctionFlags;
+ UCHAR TypeString[80];
+ EISA_MEMORY_CONFIGURATION EisaMemory[9];
+ EISA_IRQ_CONFIGURATION EisaIrq[7];
+ EISA_DMA_CONFIGURATION EisaDma[4];
+ EISA_PORT_CONFIGURATION EisaPort[20];
+ UCHAR InitializationData[60];
+} CM_EISA_FUNCTION_INFORMATION, *PCM_EISA_FUNCTION_INFORMATION;
+
+/* CM_EISA_FUNCTION_INFORMATION.FunctionFlags */
+
+#define EISA_FUNCTION_ENABLED 0x80
+#define EISA_FREE_FORM_DATA 0x40
+#define EISA_HAS_PORT_INIT_ENTRY 0x20
+#define EISA_HAS_PORT_RANGE 0x10
+#define EISA_HAS_DMA_ENTRY 0x08
+#define EISA_HAS_IRQ_ENTRY 0x04
+#define EISA_HAS_MEMORY_ENTRY 0x02
+#define EISA_HAS_TYPE_ENTRY 0x01
+#define EISA_HAS_INFORMATION \
+ (EISA_HAS_PORT_RANGE + EISA_HAS_DMA_ENTRY + EISA_HAS_IRQ_ENTRY \
+ + EISA_HAS_MEMORY_ENTRY + EISA_HAS_TYPE_ENTRY)
+
+typedef struct _CM_EISA_SLOT_INFORMATION {
+ UCHAR ReturnCode;
+ UCHAR ReturnFlags;
+ UCHAR MajorRevision;
+ UCHAR MinorRevision;
+ USHORT Checksum;
+ UCHAR NumberFunctions;
+ UCHAR FunctionInformation;
+ ULONG CompressedId;
+} CM_EISA_SLOT_INFORMATION, *PCM_EISA_SLOT_INFORMATION;
+
+/* CM_EISA_SLOT_INFORMATION.ReturnCode */
+
+#define EISA_INVALID_SLOT 0x80
+#define EISA_INVALID_FUNCTION 0x81
+#define EISA_INVALID_CONFIGURATION 0x82
+#define EISA_EMPTY_SLOT 0x83
+#define EISA_INVALID_BIOS_CALL 0x86
+
+typedef struct _CM_FLOPPY_DEVICE_DATA {
+ USHORT Version;
+ USHORT Revision;
+ CHAR Size[8];
+ ULONG MaxDensity;
+ ULONG MountDensity;
+ UCHAR StepRateHeadUnloadTime;
+ UCHAR HeadLoadTime;
+ UCHAR MotorOffTime;
+ UCHAR SectorLengthCode;
+ UCHAR SectorPerTrack;
+ UCHAR ReadWriteGapLength;
+ UCHAR DataTransferLength;
+ UCHAR FormatGapLength;
+ UCHAR FormatFillCharacter;
+ UCHAR HeadSettleTime;
+ UCHAR MotorSettleTime;
+ UCHAR MaximumTrackValue;
+ UCHAR DataTransferRate;
+} CM_FLOPPY_DEVICE_DATA, *PCM_FLOPPY_DEVICE_DATA;
+
+typedef enum _INTERFACE_TYPE {
+ InterfaceTypeUndefined = -1,
+ Internal,
+ Isa,
+ Eisa,
+ MicroChannel,
+ TurboChannel,
+ PCIBus,
+ VMEBus,
+ NuBus,
+ PCMCIABus,
+ CBus,
+ MPIBus,
+ MPSABus,
+ ProcessorInternal,
+ InternalPowerBus,
+ PNPISABus,
+ PNPBus,
+ MaximumInterfaceType
+} INTERFACE_TYPE, *PINTERFACE_TYPE;
+
+typedef struct _PNP_BUS_INFORMATION {
+ GUID BusTypeGuid;
+ INTERFACE_TYPE LegacyBusType;
+ ULONG BusNumber;
+} PNP_BUS_INFORMATION, *PPNP_BUS_INFORMATION;
+
+#include <pshpack1.h>
+typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR {
+ UCHAR Type;
+ UCHAR ShareDisposition;
+ USHORT Flags;
+ union {
+ struct {
+ PHYSICAL_ADDRESS Start;
+ ULONG Length;
+ } Generic;
+ struct {
+ PHYSICAL_ADDRESS Start;
+ ULONG Length;
+ } Port;
+ struct {
+ ULONG Level;
+ ULONG Vector;
+ ULONG Affinity;
+ } Interrupt;
+ struct {
+ PHYSICAL_ADDRESS Start;
+ ULONG Length;
+ } Memory;
+ struct {
+ ULONG Channel;
+ ULONG Port;
+ ULONG Reserved1;
+ } Dma;
+ struct {
+ ULONG Data[3];
+ } DevicePrivate;
+ struct {
+ ULONG Start;
+ ULONG Length;
+ ULONG Reserved;
+ } BusNumber;
+ struct {
+ ULONG DataSize;
+ ULONG Reserved1;
+ ULONG Reserved2;
+ } DeviceSpecificData;
+ } u;
+} CM_PARTIAL_RESOURCE_DESCRIPTOR, *PCM_PARTIAL_RESOURCE_DESCRIPTOR;
+
+/* CM_PARTIAL_RESOURCE_DESCRIPTOR.Type */
+
+#define CmResourceTypeNull 0
+#define CmResourceTypePort 1
+#define CmResourceTypeInterrupt 2
+#define CmResourceTypeMemory 3
+#define CmResourceTypeDma 4
+#define CmResourceTypeDeviceSpecific 5
+#define CmResourceTypeBusNumber 6
+#define CmResourceTypeMaximum 7
+#define CmResourceTypeNonArbitrated 128
+#define CmResourceTypeConfigData 128
+#define CmResourceTypeDevicePrivate 129
+#define CmResourceTypePcCardConfig 130
+#define CmResourceTypeMfCardConfig 131
+
+/* CM_PARTIAL_RESOURCE_DESCRIPTOR.ShareDisposition */
+
+typedef enum _CM_SHARE_DISPOSITION {
+ CmResourceShareUndetermined,
+ CmResourceShareDeviceExclusive,
+ CmResourceShareDriverExclusive,
+ CmResourceShareShared
+} CM_SHARE_DISPOSITION;
+
+/* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypePort */
+
+#define CM_RESOURCE_PORT_MEMORY 0x0000
+#define CM_RESOURCE_PORT_IO 0x0001
+#define CM_RESOURCE_PORT_10_BIT_DECODE 0x0004
+#define CM_RESOURCE_PORT_12_BIT_DECODE 0x0008
+#define CM_RESOURCE_PORT_16_BIT_DECODE 0x0010
+#define CM_RESOURCE_PORT_POSITIVE_DECODE 0x0020
+#define CM_RESOURCE_PORT_PASSIVE_DECODE 0x0040
+#define CM_RESOURCE_PORT_WINDOW_DECODE 0x0080
+
+/* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeInterrupt */
+
+#define CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE 0x0000
+#define CM_RESOURCE_INTERRUPT_LATCHED 0x0001
+
+/* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeMemory */
+
+#define CM_RESOURCE_MEMORY_READ_WRITE 0x0000
+#define CM_RESOURCE_MEMORY_READ_ONLY 0x0001
+#define CM_RESOURCE_MEMORY_WRITE_ONLY 0x0002
+#define CM_RESOURCE_MEMORY_PREFETCHABLE 0x0004
+#define CM_RESOURCE_MEMORY_COMBINEDWRITE 0x0008
+#define CM_RESOURCE_MEMORY_24 0x0010
+#define CM_RESOURCE_MEMORY_CACHEABLE 0x0020
+
+/* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeDma */
+
+#define CM_RESOURCE_DMA_8 0x0000
+#define CM_RESOURCE_DMA_16 0x0001
+#define CM_RESOURCE_DMA_32 0x0002
+#define CM_RESOURCE_DMA_8_AND_16 0x0004
+#define CM_RESOURCE_DMA_BUS_MASTER 0x0008
+#define CM_RESOURCE_DMA_TYPE_A 0x0010
+#define CM_RESOURCE_DMA_TYPE_B 0x0020
+#define CM_RESOURCE_DMA_TYPE_F 0x0040
+
+typedef struct _CM_PARTIAL_RESOURCE_LIST {
+ USHORT Version;
+ USHORT Revision;
+ ULONG Count;
+ CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors[1];
+} CM_PARTIAL_RESOURCE_LIST, *PCM_PARTIAL_RESOURCE_LIST;
+
+typedef struct _CM_FULL_RESOURCE_DESCRIPTOR {
+ INTERFACE_TYPE InterfaceType;
+ ULONG BusNumber;
+ CM_PARTIAL_RESOURCE_LIST PartialResourceList;
+} CM_FULL_RESOURCE_DESCRIPTOR, *PCM_FULL_RESOURCE_DESCRIPTOR;
+
+typedef struct _CM_RESOURCE_LIST {
+ ULONG Count;
+ CM_FULL_RESOURCE_DESCRIPTOR List[1];
+} CM_RESOURCE_LIST, *PCM_RESOURCE_LIST;
+
+typedef struct _CM_INT13_DRIVE_PARAMETER {
+ USHORT DriveSelect;
+ ULONG MaxCylinders;
+ USHORT SectorsPerTrack;
+ USHORT MaxHeads;
+ USHORT NumberDrives;
+} CM_INT13_DRIVE_PARAMETER, *PCM_INT13_DRIVE_PARAMETER;
+#include <poppack.h>
+
+typedef struct _CM_KEYBOARD_DEVICE_DATA {
+ USHORT Version;
+ USHORT Revision;
+ UCHAR Type;
+ UCHAR Subtype;
+ USHORT KeyboardFlags;
+} CM_KEYBOARD_DEVICE_DATA, *PCM_KEYBOARD_DEVICE_DATA;
+
+#define KEYBOARD_INSERT_ON 0x80
+#define KEYBOARD_CAPS_LOCK_ON 0x40
+#define KEYBOARD_NUM_LOCK_ON 0x20
+#define KEYBOARD_SCROLL_LOCK_ON 0x10
+#define KEYBOARD_ALT_KEY_DOWN 0x08
+#define KEYBOARD_CTRL_KEY_DOWN 0x04
+#define KEYBOARD_LEFT_SHIFT_DOWN 0x02
+#define KEYBOARD_RIGHT_SHIFT_DOWN 0x01
+
+typedef struct _CM_MCA_POS_DATA {
+ USHORT AdapterId;
+ UCHAR PosData1;
+ UCHAR PosData2;
+ UCHAR PosData3;
+ UCHAR PosData4;
+} CM_MCA_POS_DATA, *PCM_MCA_POS_DATA;
+
+typedef struct CM_Power_Data_s {
+ ULONG PD_Size;
+ DEVICE_POWER_STATE PD_MostRecentPowerState;
+ ULONG PD_Capabilities;
+ ULONG PD_D1Latency;
+ ULONG PD_D2Latency;
+ ULONG PD_D3Latency;
+ DEVICE_POWER_STATE PD_PowerStateMapping[PowerSystemMaximum];
+} CM_POWER_DATA, *PCM_POWER_DATA;
+
+#define PDCAP_D0_SUPPORTED 0x00000001
+#define PDCAP_D1_SUPPORTED 0x00000002
+#define PDCAP_D2_SUPPORTED 0x00000004
+#define PDCAP_D3_SUPPORTED 0x00000008
+#define PDCAP_WAKE_FROM_D0_SUPPORTED 0x00000010
+#define PDCAP_WAKE_FROM_D1_SUPPORTED 0x00000020
+#define PDCAP_WAKE_FROM_D2_SUPPORTED 0x00000040
+#define PDCAP_WAKE_FROM_D3_SUPPORTED 0x00000080
+#define PDCAP_WARM_EJECT_SUPPORTED 0x00000100
+
+typedef struct _CM_SCSI_DEVICE_DATA {
+ USHORT Version;
+ USHORT Revision;
+ UCHAR HostIdentifier;
+} CM_SCSI_DEVICE_DATA, *PCM_SCSI_DEVICE_DATA;
+
+typedef struct _CM_SERIAL_DEVICE_DATA {
+ USHORT Version;
+ USHORT Revision;
+ ULONG BaudClock;
+} CM_SERIAL_DEVICE_DATA, *PCM_SERIAL_DEVICE_DATA;
+
+/* IO_RESOURCE_DESCRIPTOR.Option */
+
+#define IO_RESOURCE_PREFERRED 0x01
+#define IO_RESOURCE_DEFAULT 0x02
+#define IO_RESOURCE_ALTERNATIVE 0x08
+
+typedef struct _IO_RESOURCE_DESCRIPTOR {
+ UCHAR Option;
+ UCHAR Type;
+ UCHAR ShareDisposition;
+ UCHAR Spare1;
+ USHORT Flags;
+ USHORT Spare2;
+ union {
+ struct {
+ ULONG Length;
+ ULONG Alignment;
+ PHYSICAL_ADDRESS MinimumAddress;
+ PHYSICAL_ADDRESS MaximumAddress;
+ } Port;
+ struct {
+ ULONG Length;
+ ULONG Alignment;
+ PHYSICAL_ADDRESS MinimumAddress;
+ PHYSICAL_ADDRESS MaximumAddress;
+ } Memory;
+ struct {
+ ULONG MinimumVector;
+ ULONG MaximumVector;
+ } Interrupt;
+ struct {
+ ULONG MinimumChannel;
+ ULONG MaximumChannel;
+ } Dma;
+ struct {
+ ULONG Length;
+ ULONG Alignment;
+ PHYSICAL_ADDRESS MinimumAddress;
+ PHYSICAL_ADDRESS MaximumAddress;
+ } Generic;
+ struct {
+ ULONG Data[3];
+ } DevicePrivate;
+ struct {
+ ULONG Length;
+ ULONG MinBusNumber;
+ ULONG MaxBusNumber;
+ ULONG Reserved;
+ } BusNumber;
+ struct {
+ ULONG Priority;
+ ULONG Reserved1;
+ ULONG Reserved2;
+ } ConfigData;
+ } u;
+} IO_RESOURCE_DESCRIPTOR, *PIO_RESOURCE_DESCRIPTOR;
+
+typedef struct _IO_RESOURCE_LIST {
+ USHORT Version;
+ USHORT Revision;
+ ULONG Count;
+ IO_RESOURCE_DESCRIPTOR Descriptors[1];
+} IO_RESOURCE_LIST, *PIO_RESOURCE_LIST;
+
+typedef struct _IO_RESOURCE_REQUIREMENTS_LIST {
+ ULONG ListSize;
+ INTERFACE_TYPE InterfaceType;
+ ULONG BusNumber;
+ ULONG SlotNumber;
+ ULONG Reserved[3];
+ ULONG AlternativeLists;
+ IO_RESOURCE_LIST List[1];
+} IO_RESOURCE_REQUIREMENTS_LIST, *PIO_RESOURCE_REQUIREMENTS_LIST;
+
+typedef struct _CONTROLLER_OBJECT {
+ CSHORT Type;
+ CSHORT Size;
+ PVOID ControllerExtension;
+ KDEVICE_QUEUE DeviceWaitQueue;
+ ULONG Spare1;
+ LARGE_INTEGER Spare2;
+} CONTROLLER_OBJECT, *PCONTROLLER_OBJECT;
+
+typedef enum _DMA_WIDTH {
+ Width8Bits,
+ Width16Bits,
+ Width32Bits,
+ MaximumDmaWidth
+} DMA_WIDTH, *PDMA_WIDTH;
+
+typedef enum _DMA_SPEED {
+ Compatible,
+ TypeA,
+ TypeB,
+ TypeC,
+ TypeF,
+ MaximumDmaSpeed
+} DMA_SPEED, *PDMA_SPEED;
+
+/* DEVICE_DESCRIPTION.Version */
+
+#define DEVICE_DESCRIPTION_VERSION 0x0000
+#define DEVICE_DESCRIPTION_VERSION1 0x0001
+#define DEVICE_DESCRIPTION_VERSION2 0x0002
+
+typedef struct _DEVICE_DESCRIPTION {
+ ULONG Version;
+ BOOLEAN Master;
+ BOOLEAN ScatterGather;
+ BOOLEAN DemandMode;
+ BOOLEAN AutoInitialize;
+ BOOLEAN Dma32BitAddresses;
+ BOOLEAN IgnoreCount;
+ BOOLEAN Reserved1;
+ BOOLEAN Dma64BitAddresses;
+ ULONG BusNumber;
+ ULONG DmaChannel;
+ INTERFACE_TYPE InterfaceType;
+ DMA_WIDTH DmaWidth;
+ DMA_SPEED DmaSpeed;
+ ULONG MaximumLength;
+ ULONG DmaPort;
+} DEVICE_DESCRIPTION, *PDEVICE_DESCRIPTION;
+
+/* VPB.Flags */
+#define VPB_MOUNTED 0x0001
+#define VPB_LOCKED 0x0002
+#define VPB_PERSISTENT 0x0004
+#define VPB_REMOVE_PENDING 0x0008
+#define VPB_RAW_MOUNT 0x0010
+
+#define MAXIMUM_VOLUME_LABEL_LENGTH (32 * sizeof(WCHAR))
+
+typedef struct _VPB {
+ CSHORT Type;
+ CSHORT Size;
+ USHORT Flags;
+ USHORT VolumeLabelLength;
+ struct _DEVICE_OBJECT *DeviceObject;
+ struct _DEVICE_OBJECT *RealDevice;
+ ULONG SerialNumber;
+ ULONG ReferenceCount;
+ WCHAR VolumeLabel[MAXIMUM_VOLUME_LABEL_LENGTH / sizeof(WCHAR)];
+} VPB, *PVPB;
+
+/* DEVICE_OBJECT.Flags */
+
+#define DO_VERIFY_VOLUME 0x00000002
+#define DO_BUFFERED_IO 0x00000004
+#define DO_EXCLUSIVE 0x00000008
+#define DO_DIRECT_IO 0x00000010
+#define DO_MAP_IO_BUFFER 0x00000020
+#define DO_DEVICE_HAS_NAME 0x00000040
+#define DO_DEVICE_INITIALIZING 0x00000080
+#define DO_SYSTEM_BOOT_PARTITION 0x00000100
+#define DO_LONG_TERM_REQUESTS 0x00000200
+#define DO_NEVER_LAST_DEVICE 0x00000400
+#define DO_SHUTDOWN_REGISTERED 0x00000800
+#define DO_BUS_ENUMERATED_DEVICE 0x00001000
+#define DO_POWER_PAGABLE 0x00002000
+#define DO_POWER_INRUSH 0x00004000
+#define DO_LOW_PRIORITY_FILESYSTEM 0x00010000
+
+/* DEVICE_OBJECT.Characteristics */
+
+#define FILE_REMOVABLE_MEDIA 0x00000001
+#define FILE_READ_ONLY_DEVICE 0x00000002
+#define FILE_FLOPPY_DISKETTE 0x00000004
+#define FILE_WRITE_ONCE_MEDIA 0x00000008
+#define FILE_REMOTE_DEVICE 0x00000010
+#define FILE_DEVICE_IS_MOUNTED 0x00000020
+#define FILE_VIRTUAL_VOLUME 0x00000040
+#define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080
+#define FILE_DEVICE_SECURE_OPEN 0x00000100
+
+/* DEVICE_OBJECT.AlignmentRequirement */
+
+#define FILE_BYTE_ALIGNMENT 0x00000000
+#define FILE_WORD_ALIGNMENT 0x00000001
+#define FILE_LONG_ALIGNMENT 0x00000003
+#define FILE_QUAD_ALIGNMENT 0x00000007
+#define FILE_OCTA_ALIGNMENT 0x0000000f
+#define FILE_32_BYTE_ALIGNMENT 0x0000001f
+#define FILE_64_BYTE_ALIGNMENT 0x0000003f
+#define FILE_128_BYTE_ALIGNMENT 0x0000007f
+#define FILE_256_BYTE_ALIGNMENT 0x000000ff
+#define FILE_512_BYTE_ALIGNMENT 0x000001ff
+
+/* DEVICE_OBJECT.DeviceType */
+
+#define DEVICE_TYPE ULONG
+
+#define FILE_DEVICE_BEEP 0x00000001
+#define FILE_DEVICE_CD_ROM 0x00000002
+#define FILE_DEVICE_CD_ROM_FILE_SYSTEM 0x00000003
+#define FILE_DEVICE_CONTROLLER 0x00000004
+#define FILE_DEVICE_DATALINK 0x00000005
+#define FILE_DEVICE_DFS 0x00000006
+#define FILE_DEVICE_DISK 0x00000007
+#define FILE_DEVICE_DISK_FILE_SYSTEM 0x00000008
+#define FILE_DEVICE_FILE_SYSTEM 0x00000009
+#define FILE_DEVICE_INPORT_PORT 0x0000000a
+#define FILE_DEVICE_KEYBOARD 0x0000000b
+#define FILE_DEVICE_MAILSLOT 0x0000000c
+#define FILE_DEVICE_MIDI_IN 0x0000000d
+#define FILE_DEVICE_MIDI_OUT 0x0000000e
+#define FILE_DEVICE_MOUSE 0x0000000f
+#define FILE_DEVICE_MULTI_UNC_PROVIDER 0x00000010
+#define FILE_DEVICE_NAMED_PIPE 0x00000011
+#define FILE_DEVICE_NETWORK 0x00000012
+#define FILE_DEVICE_NETWORK_BROWSER 0x00000013
+#define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014
+#define FILE_DEVICE_NULL 0x00000015
+#define FILE_DEVICE_PARALLEL_PORT 0x00000016
+#define FILE_DEVICE_PHYSICAL_NETCARD 0x00000017
+#define FILE_DEVICE_PRINTER 0x00000018
+#define FILE_DEVICE_SCANNER 0x00000019
+#define FILE_DEVICE_SERIAL_MOUSE_PORT 0x0000001a
+#define FILE_DEVICE_SERIAL_PORT 0x0000001b
+#define FILE_DEVICE_SCREEN 0x0000001c
+#define FILE_DEVICE_SOUND 0x0000001d
+#define FILE_DEVICE_STREAMS 0x0000001e
+#define FILE_DEVICE_TAPE 0x0000001f
+#define FILE_DEVICE_TAPE_FILE_SYSTEM 0x00000020
+#define FILE_DEVICE_TRANSPORT 0x00000021
+#define FILE_DEVICE_UNKNOWN 0x00000022
+#define FILE_DEVICE_VIDEO 0x00000023
+#define FILE_DEVICE_VIRTUAL_DISK 0x00000024
+#define FILE_DEVICE_WAVE_IN 0x00000025
+#define FILE_DEVICE_WAVE_OUT 0x00000026
+#define FILE_DEVICE_8042_PORT 0x00000027
+#define FILE_DEVICE_NETWORK_REDIRECTOR 0x00000028
+#define FILE_DEVICE_BATTERY 0x00000029
+#define FILE_DEVICE_BUS_EXTENDER 0x0000002a
+#define FILE_DEVICE_MODEM 0x0000002b
+#define FILE_DEVICE_VDM 0x0000002c
+#define FILE_DEVICE_MASS_STORAGE 0x0000002d
+#define FILE_DEVICE_SMB 0x0000002e
+#define FILE_DEVICE_KS 0x0000002f
+#define FILE_DEVICE_CHANGER 0x00000030
+#define FILE_DEVICE_SMARTCARD 0x00000031
+#define FILE_DEVICE_ACPI 0x00000032
+#define FILE_DEVICE_DVD 0x00000033
+#define FILE_DEVICE_FULLSCREEN_VIDEO 0x00000034
+#define FILE_DEVICE_DFS_FILE_SYSTEM 0x00000035
+#define FILE_DEVICE_DFS_VOLUME 0x00000036
+#define FILE_DEVICE_SERENUM 0x00000037
+#define FILE_DEVICE_TERMSRV 0x00000038
+#define FILE_DEVICE_KSEC 0x00000039
+#define FILE_DEVICE_FIPS 0x0000003a
+
+typedef struct _DEVICE_OBJECT {
+ CSHORT Type;
+ USHORT Size;
+ LONG ReferenceCount;
+ struct _DRIVER_OBJECT *DriverObject;
+ struct _DEVICE_OBJECT *NextDevice;
+ struct _DEVICE_OBJECT *AttachedDevice;
+ struct _IRP *CurrentIrp;
+ PIO_TIMER Timer;
+ ULONG Flags;
+ ULONG Characteristics;
+ PVPB Vpb;
+ PVOID DeviceExtension;
+ DEVICE_TYPE DeviceType;
+ CCHAR StackSize;
+ union {
+ LIST_ENTRY ListEntry;
+ WAIT_CONTEXT_BLOCK Wcb;
+ } Queue;
+ ULONG AlignmentRequirement;
+ KDEVICE_QUEUE DeviceQueue;
+ KDPC Dpc;
+ ULONG ActiveThreadCount;
+ PSECURITY_DESCRIPTOR SecurityDescriptor;
+ KEVENT DeviceLock;
+ USHORT SectorSize;
+ USHORT Spare1;
+ struct _DEVOBJ_EXTENSION *DeviceObjectExtension;
+ PVOID Reserved;
+} DEVICE_OBJECT;
+typedef struct _DEVICE_OBJECT *PDEVICE_OBJECT;
+
+typedef enum _DEVICE_RELATION_TYPE {
+ BusRelations,
+ EjectionRelations,
+ PowerRelations,
+ RemovalRelations,
+ TargetDeviceRelation,
+ SingleBusRelations
+} DEVICE_RELATION_TYPE, *PDEVICE_RELATION_TYPE;
+
+typedef struct _DEVICE_RELATIONS {
+ ULONG Count;
+ PDEVICE_OBJECT Objects[1];
+} DEVICE_RELATIONS, *PDEVICE_RELATIONS;
+
+typedef struct _SCATTER_GATHER_ELEMENT {
+ PHYSICAL_ADDRESS Address;
+ ULONG Length;
+ ULONG_PTR Reserved;
+} SCATTER_GATHER_ELEMENT, *PSCATTER_GATHER_ELEMENT;
+
+typedef struct _SCATTER_GATHER_LIST {
+ ULONG NumberOfElements;
+ ULONG_PTR Reserved;
+ SCATTER_GATHER_ELEMENT Elements[0];
+} SCATTER_GATHER_LIST, *PSCATTER_GATHER_LIST;
+
+typedef struct _MDL {
+ struct _MDL *Next;
+ CSHORT Size;
+ CSHORT MdlFlags;
+ struct _EPROCESS *Process;
+ PVOID MappedSystemVa;
+ PVOID StartVa;
+ ULONG ByteCount;
+ ULONG ByteOffset;
+} MDL, *PMDL;
+
+#define MDL_MAPPED_TO_SYSTEM_VA 0x0001
+#define MDL_PAGES_LOCKED 0x0002
+#define MDL_SOURCE_IS_NONPAGED_POOL 0x0004
+#define MDL_ALLOCATED_FIXED_SIZE 0x0008
+#define MDL_PARTIAL 0x0010
+#define MDL_PARTIAL_HAS_BEEN_MAPPED 0x0020
+#define MDL_IO_PAGE_READ 0x0040
+#define MDL_WRITE_OPERATION 0x0080
+#define MDL_PARENT_MAPPED_SYSTEM_VA 0x0100
+#define MDL_FREE_EXTRA_PTES 0x0200
+#define MDL_IO_SPACE 0x0800
+#define MDL_NETWORK_HEADER 0x1000
+#define MDL_MAPPING_CAN_FAIL 0x2000
+#define MDL_ALLOCATED_MUST_SUCCEED 0x4000
+
+#define MDL_MAPPING_FLAGS ( \
+ MDL_MAPPED_TO_SYSTEM_VA | \
+ MDL_PAGES_LOCKED | \
+ MDL_SOURCE_IS_NONPAGED_POOL | \
+ MDL_PARTIAL_HAS_BEEN_MAPPED | \
+ MDL_PARENT_MAPPED_SYSTEM_VA | \
+ MDL_SYSTEM_VA | \
+ MDL_IO_SPACE)
+
+typedef VOID DDKAPI
+(*PPUT_DMA_ADAPTER)(
+ /*IN*/ PDMA_ADAPTER DmaAdapter);
+
+typedef PVOID DDKAPI
+(*PALLOCATE_COMMON_BUFFER)(
+ /*IN*/ PDMA_ADAPTER DmaAdapter,
+ /*IN*/ ULONG Length,
+ /*OUT*/ PPHYSICAL_ADDRESS LogicalAddress,
+ /*IN*/ BOOLEAN CacheEnabled);
+
+typedef VOID DDKAPI
+(*PFREE_COMMON_BUFFER)(
+ /*IN*/ PDMA_ADAPTER DmaAdapter,
+ /*IN*/ ULONG Length,
+ /*IN*/ PHYSICAL_ADDRESS LogicalAddress,
+ /*IN*/ PVOID VirtualAddress,
+ /*IN*/ BOOLEAN CacheEnabled);
+
+typedef NTSTATUS DDKAPI
+(*PALLOCATE_ADAPTER_CHANNEL)(
+ /*IN*/ PDMA_ADAPTER DmaAdapter,
+ /*IN*/ PDEVICE_OBJECT DeviceObject,
+ /*IN*/ ULONG NumberOfMapRegisters,
+ /*IN*/ PDRIVER_CONTROL ExecutionRoutine,
+ /*IN*/ PVOID Context);
+
+typedef BOOLEAN DDKAPI
+(*PFLUSH_ADAPTER_BUFFERS)(
+ /*IN*/ PDMA_ADAPTER DmaAdapter,
+ /*IN*/ PMDL Mdl,
+ /*IN*/ PVOID MapRegisterBase,
+ /*IN*/ PVOID CurrentVa,
+ /*IN*/ ULONG Length,
+ /*IN*/ BOOLEAN WriteToDevice);
+
+typedef VOID DDKAPI
+(*PFREE_ADAPTER_CHANNEL)(
+ /*IN*/ PDMA_ADAPTER DmaAdapter);
+
+typedef VOID DDKAPI
+(*PFREE_MAP_REGISTERS)(
+ /*IN*/ PDMA_ADAPTER DmaAdapter,
+ PVOID MapRegisterBase,
+ ULONG NumberOfMapRegisters);
+
+typedef PHYSICAL_ADDRESS DDKAPI
+(*PMAP_TRANSFER)(
+ /*IN*/ PDMA_ADAPTER DmaAdapter,
+ /*IN*/ PMDL Mdl,
+ /*IN*/ PVOID MapRegisterBase,
+ /*IN*/ PVOID CurrentVa,
+ /*IN OUT*/ PULONG Length,
+ /*IN*/ BOOLEAN WriteToDevice);
+
+typedef ULONG DDKAPI
+(*PGET_DMA_ALIGNMENT)(
+ /*IN*/ PDMA_ADAPTER DmaAdapter);
+
+typedef ULONG DDKAPI
+(*PREAD_DMA_COUNTER)(
+ /*IN*/ PDMA_ADAPTER DmaAdapter);
+
+typedef NTSTATUS DDKAPI
+(*PGET_SCATTER_GATHER_LIST)(
+ /*IN*/ PDMA_ADAPTER DmaAdapter,
+ /*IN*/ PDEVICE_OBJECT DeviceObject,
+ /*IN*/ PMDL Mdl,
+ /*IN*/ PVOID CurrentVa,
+ /*IN*/ ULONG Length,
+ /*IN*/ PDRIVER_LIST_CONTROL ExecutionRoutine,
+ /*IN*/ PVOID Context,
+ /*IN*/ BOOLEAN WriteToDevice);
+
+typedef VOID DDKAPI
+(*PPUT_SCATTER_GATHER_LIST)(
+ /*IN*/ PDMA_ADAPTER DmaAdapter,
+ /*IN*/ PSCATTER_GATHER_LIST ScatterGather,
+ /*IN*/ BOOLEAN WriteToDevice);
+
+typedef NTSTATUS DDKAPI
+(*PCALCULATE_SCATTER_GATHER_LIST_SIZE)(
+ /*IN*/ PDMA_ADAPTER DmaAdapter,
+ /*IN*/ PMDL Mdl /*OPTIONAL*/,
+ /*IN*/ PVOID CurrentVa,
+ /*IN*/ ULONG Length,
+ /*OUT*/ PULONG ScatterGatherListSize,
+ /*OUT*/ PULONG pNumberOfMapRegisters /*OPTIONAL*/);
+
+typedef NTSTATUS DDKAPI
+(*PBUILD_SCATTER_GATHER_LIST)(
+ /*IN*/ PDMA_ADAPTER DmaAdapter,
+ /*IN*/ PDEVICE_OBJECT DeviceObject,
+ /*IN*/ PMDL Mdl,
+ /*IN*/ PVOID CurrentVa,
+ /*IN*/ ULONG Length,
+ /*IN*/ PDRIVER_LIST_CONTROL ExecutionRoutine,
+ /*IN*/ PVOID Context,
+ /*IN*/ BOOLEAN WriteToDevice,
+ /*IN*/ PVOID ScatterGatherBuffer,
+ /*IN*/ ULONG ScatterGatherLength);
+
+typedef NTSTATUS DDKAPI
+(*PBUILD_MDL_FROM_SCATTER_GATHER_LIST)(
+ /*IN*/ PDMA_ADAPTER DmaAdapter,
+ /*IN*/ PSCATTER_GATHER_LIST ScatterGather,
+ /*IN*/ PMDL OriginalMdl,
+ /*OUT*/ PMDL *TargetMdl);
+
+typedef struct _DMA_OPERATIONS {
+ ULONG Size;
+ PPUT_DMA_ADAPTER PutDmaAdapter;
+ PALLOCATE_COMMON_BUFFER AllocateCommonBuffer;
+ PFREE_COMMON_BUFFER FreeCommonBuffer;
+ PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel;
+ PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers;
+ PFREE_ADAPTER_CHANNEL FreeAdapterChannel;
+ PFREE_MAP_REGISTERS FreeMapRegisters;
+ PMAP_TRANSFER MapTransfer;
+ PGET_DMA_ALIGNMENT GetDmaAlignment;
+ PREAD_DMA_COUNTER ReadDmaCounter;
+ PGET_SCATTER_GATHER_LIST GetScatterGatherList;
+ PPUT_SCATTER_GATHER_LIST PutScatterGatherList;
+ PCALCULATE_SCATTER_GATHER_LIST_SIZE CalculateScatterGatherList;
+ PBUILD_SCATTER_GATHER_LIST BuildScatterGatherList;
+ PBUILD_MDL_FROM_SCATTER_GATHER_LIST BuildMdlFromScatterGatherList;
+} DMA_OPERATIONS, *PDMA_OPERATIONS;
+
+typedef struct _DMA_ADAPTER {
+ USHORT Version;
+ USHORT Size;
+ PDMA_OPERATIONS DmaOperations;
+} DMA_ADAPTER;
+
+typedef enum _FILE_INFORMATION_CLASS {
+ FileDirectoryInformation = 1,
+ FileFullDirectoryInformation,
+ FileBothDirectoryInformation,
+ FileBasicInformation,
+ FileStandardInformation,
+ FileInternalInformation,
+ FileEaInformation,
+ FileAccessInformation,
+ FileNameInformation,
+ FileRenameInformation,
+ FileLinkInformation,
+ FileNamesInformation,
+ FileDispositionInformation,
+ FilePositionInformation,
+ FileFullEaInformation,
+ FileModeInformation,
+ FileAlignmentInformation,
+ FileAllInformation,
+ FileAllocationInformation,
+ FileEndOfFileInformation,
+ FileAlternateNameInformation,
+ FileStreamInformation,
+ FilePipeInformation,
+ FilePipeLocalInformation,
+ FilePipeRemoteInformation,
+ FileMailslotQueryInformation,
+ FileMailslotSetInformation,
+ FileCompressionInformation,
+ FileObjectIdInformation,
+ FileCompletionInformation,
+ FileMoveClusterInformation,
+ FileQuotaInformation,
+ FileReparsePointInformation,
+ FileNetworkOpenInformation,
+ FileAttributeTagInformation,
+ FileTrackingInformation,
+ FileIdBothDirectoryInformation,
+ FileIdFullDirectoryInformation,
+ FileValidDataLengthInformation,
+ FileShortNameInformation,
+ FileMaximumInformation
+} FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;
+
+typedef struct _FILE_POSITION_INFORMATION {
+ LARGE_INTEGER CurrentByteOffset;
+} FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION;
+
+typedef struct _FILE_ALIGNMENT_INFORMATION {
+ ULONG AlignmentRequirement;
+} FILE_ALIGNMENT_INFORMATION;
+
+typedef struct _FILE_NAME_INFORMATION {
+ ULONG FileNameLength;
+ WCHAR FileName[1];
+} FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION;
+
+typedef struct _FILE_BASIC_INFORMATION {
+ LARGE_INTEGER CreationTime;
+ LARGE_INTEGER LastAccessTime;
+ LARGE_INTEGER LastWriteTime;
+ LARGE_INTEGER ChangeTime;
+ ULONG FileAttributes;
+} FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION;
+
+typedef struct _FILE_STANDARD_INFORMATION {
+ LARGE_INTEGER AllocationSize;
+ LARGE_INTEGER EndOfFile;
+ ULONG NumberOfLinks;
+ BOOLEAN DeletePending;
+ BOOLEAN Directory;
+} FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION;
+
+typedef struct _FILE_NETWORK_OPEN_INFORMATION {
+ LARGE_INTEGER CreationTime;
+ LARGE_INTEGER LastAccessTime;
+ LARGE_INTEGER LastWriteTime;
+ LARGE_INTEGER ChangeTime;
+ LARGE_INTEGER AllocationSize;
+ LARGE_INTEGER EndOfFile;
+ ULONG FileAttributes;
+} FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION;
+
+typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION {
+ ULONG FileAttributes;
+ ULONG ReparseTag;
+} FILE_ATTRIBUTE_TAG_INFORMATION, *PFILE_ATTRIBUTE_TAG_INFORMATION;
+
+typedef struct _FILE_DISPOSITION_INFORMATION {
+ BOOLEAN DoDeleteFile;
+} FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION;
+
+typedef struct _FILE_END_OF_FILE_INFORMATION {
+ LARGE_INTEGER EndOfFile;
+} FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION;
+
+typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION {
+ LARGE_INTEGER ValidDataLength;
+} FILE_VALID_DATA_LENGTH_INFORMATION, *PFILE_VALID_DATA_LENGTH_INFORMATION;
+
+typedef enum _FSINFOCLASS {
+ FileFsVolumeInformation = 1,
+ FileFsLabelInformation,
+ FileFsSizeInformation,
+ FileFsDeviceInformation,
+ FileFsAttributeInformation,
+ FileFsControlInformation,
+ FileFsFullSizeInformation,
+ FileFsObjectIdInformation,
+ FileFsDriverPathInformation,
+ FileFsMaximumInformation
+} FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS;
+
+typedef struct _FILE_FS_DEVICE_INFORMATION {
+ DEVICE_TYPE DeviceType;
+ ULONG Characteristics;
+} FILE_FS_DEVICE_INFORMATION, *PFILE_FS_DEVICE_INFORMATION;
+
+typedef struct _FILE_FULL_EA_INFORMATION {
+ ULONG NextEntryOffset;
+ UCHAR Flags;
+ UCHAR EaNameLength;
+ USHORT EaValueLength;
+ CHAR EaName[1];
+} FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION;
+
+typedef ULONG_PTR ERESOURCE_THREAD;
+typedef ERESOURCE_THREAD *PERESOURCE_THREAD;
+
+typedef struct _OWNER_ENTRY {
+ ERESOURCE_THREAD OwnerThread;
+ _ANONYMOUS_UNION union {
+ LONG OwnerCount;
+ ULONG TableSize;
+ } DUMMYUNIONNAME;
+} OWNER_ENTRY, *POWNER_ENTRY;
+
+/* ERESOURCE.Flag */
+
+#define ResourceNeverExclusive 0x0010
+#define ResourceReleaseByOtherThread 0x0020
+#define ResourceOwnedExclusive 0x0080
+
+#define RESOURCE_HASH_TABLE_SIZE 64
+
+typedef struct _ERESOURCE {
+ LIST_ENTRY SystemResourcesList;
+ POWNER_ENTRY OwnerTable;
+ SHORT ActiveCount;
+ USHORT Flag;
+ PKSEMAPHORE SharedWaiters;
+ PKEVENT ExclusiveWaiters;
+ OWNER_ENTRY OwnerThreads[2];
+ ULONG ContentionCount;
+ USHORT NumberOfSharedWaiters;
+ USHORT NumberOfExclusiveWaiters;
+ _ANONYMOUS_UNION union {
+ PVOID Address;
+ ULONG_PTR CreatorBackTraceIndex;
+ } DUMMYUNIONNAME;
+ KSPIN_LOCK SpinLock;
+} ERESOURCE, *PERESOURCE;
+
+/* NOTE: PVOID for methods to avoid 'assignment from incompatible pointer type' warning */
+typedef struct _DRIVER_EXTENSION {
+ struct _DRIVER_OBJECT *DriverObject;
+ PVOID AddDevice;
+ ULONG Count;
+ UNICODE_STRING ServiceKeyName;
+} DRIVER_EXTENSION, *PDRIVER_EXTENSION;
+
+typedef BOOLEAN DDKAPI
+(*PFAST_IO_CHECK_IF_POSSIBLE)(
+ /*IN*/ struct _FILE_OBJECT *FileObject,
+ /*IN*/ PLARGE_INTEGER FileOffset,
+ /*IN*/ ULONG Length,
+ /*IN*/ BOOLEAN Wait,
+ /*IN*/ ULONG LockKey,
+ /*IN*/ BOOLEAN CheckForReadOperation,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatus,
+ /*IN*/ struct _DEVICE_OBJECT *DeviceObject);
+
+typedef BOOLEAN DDKAPI
+(*PFAST_IO_READ)(
+ /*IN*/ struct _FILE_OBJECT *FileObject,
+ /*IN*/ PLARGE_INTEGER FileOffset,
+ /*IN*/ ULONG Length,
+ /*IN*/ BOOLEAN Wait,
+ /*IN*/ ULONG LockKey,
+ /*OUT*/ PVOID Buffer,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatus,
+ /*IN*/ struct _DEVICE_OBJECT *DeviceObject);
+
+typedef BOOLEAN DDKAPI
+(*PFAST_IO_WRITE)(
+ /*IN*/ struct _FILE_OBJECT *FileObject,
+ /*IN*/ PLARGE_INTEGER FileOffset,
+ /*IN*/ ULONG Length,
+ /*IN*/ BOOLEAN Wait,
+ /*IN*/ ULONG LockKey,
+ /*IN*/ PVOID Buffer,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatus,
+ /*IN*/ struct _DEVICE_OBJECT *DeviceObject);
+
+typedef BOOLEAN DDKAPI
+(*PFAST_IO_QUERY_BASIC_INFO)(
+ /*IN*/ struct _FILE_OBJECT *FileObject,
+ /*IN*/ BOOLEAN Wait,
+ /*OUT*/ PFILE_BASIC_INFORMATION Buffer,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatus,
+ /*IN*/ struct _DEVICE_OBJECT *DeviceObject);
+
+typedef BOOLEAN DDKAPI
+(*PFAST_IO_QUERY_STANDARD_INFO)(
+ /*IN*/ struct _FILE_OBJECT *FileObject,
+ /*IN*/ BOOLEAN Wait,
+ /*OUT*/ PFILE_STANDARD_INFORMATION Buffer,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatus,
+ /*IN*/ struct _DEVICE_OBJECT *DeviceObject);
+
+typedef BOOLEAN DDKAPI
+(*PFAST_IO_LOCK)(
+ /*IN*/ struct _FILE_OBJECT *FileObject,
+ /*IN*/ PLARGE_INTEGER FileOffset,
+ /*IN*/ PLARGE_INTEGER Length,
+ PEPROCESS ProcessId,
+ ULONG Key,
+ BOOLEAN FailImmediately,
+ BOOLEAN ExclusiveLock,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatus,
+ /*IN*/ struct _DEVICE_OBJECT *DeviceObject);
+
+typedef BOOLEAN DDKAPI
+(*PFAST_IO_UNLOCK_SINGLE)(
+ /*IN*/ struct _FILE_OBJECT *FileObject,
+ /*IN*/ PLARGE_INTEGER FileOffset,
+ /*IN*/ PLARGE_INTEGER Length,
+ PEPROCESS ProcessId,
+ ULONG Key,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatus,
+ /*IN*/ struct _DEVICE_OBJECT *DeviceObject);
+
+typedef BOOLEAN DDKAPI
+(*PFAST_IO_UNLOCK_ALL)(
+ /*IN*/ struct _FILE_OBJECT *FileObject,
+ PEPROCESS ProcessId,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatus,
+ /*IN*/ struct _DEVICE_OBJECT *DeviceObject);
+
+typedef BOOLEAN DDKAPI
+(*PFAST_IO_UNLOCK_ALL_BY_KEY)(
+ /*IN*/ struct _FILE_OBJECT *FileObject,
+ PVOID ProcessId,
+ ULONG Key,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatus,
+ /*IN*/ struct _DEVICE_OBJECT *DeviceObject);
+
+typedef BOOLEAN DDKAPI
+(*PFAST_IO_DEVICE_CONTROL)(
+ /*IN*/ struct _FILE_OBJECT *FileObject,
+ /*IN*/ BOOLEAN Wait,
+ /*IN*/ PVOID InputBuffer /*OPTIONAL*/,
+ /*IN*/ ULONG InputBufferLength,
+ /*OUT*/ PVOID OutputBuffer /*OPTIONAL*/,
+ /*IN*/ ULONG OutputBufferLength,
+ /*IN*/ ULONG IoControlCode,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatus,
+ /*IN*/ struct _DEVICE_OBJECT *DeviceObject);
+
+typedef VOID DDKAPI
+(*PFAST_IO_ACQUIRE_FILE)(
+ /*IN*/ struct _FILE_OBJECT *FileObject);
+
+typedef VOID DDKAPI
+(*PFAST_IO_RELEASE_FILE)(
+ /*IN*/ struct _FILE_OBJECT *FileObject);
+
+typedef VOID DDKAPI
+(*PFAST_IO_DETACH_DEVICE)(
+ /*IN*/ struct _DEVICE_OBJECT *SourceDevice,
+ /*IN*/ struct _DEVICE_OBJECT *TargetDevice);
+
+typedef BOOLEAN DDKAPI
+(*PFAST_IO_QUERY_NETWORK_OPEN_INFO)(
+ /*IN*/ struct _FILE_OBJECT *FileObject,
+ /*IN*/ BOOLEAN Wait,
+ /*OUT*/ struct _FILE_NETWORK_OPEN_INFORMATION *Buffer,
+ /*OUT*/ struct _IO_STATUS_BLOCK *IoStatus,
+ /*IN*/ struct _DEVICE_OBJECT *DeviceObject);
+
+typedef NTSTATUS DDKAPI
+(*PFAST_IO_ACQUIRE_FOR_MOD_WRITE)(
+ /*IN*/ struct _FILE_OBJECT *FileObject,
+ /*IN*/ PLARGE_INTEGER EndingOffset,
+ /*OUT*/ struct _ERESOURCE **ResourceToRelease,
+ /*IN*/ struct _DEVICE_OBJECT *DeviceObject);
+
+typedef BOOLEAN DDKAPI
+(*PFAST_IO_MDL_READ)(
+ /*IN*/ struct _FILE_OBJECT *FileObject,
+ /*IN*/ PLARGE_INTEGER FileOffset,
+ /*IN*/ ULONG Length,
+ /*IN*/ ULONG LockKey,
+ /*OUT*/ PMDL *MdlChain,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatus,
+ /*IN*/ struct _DEVICE_OBJECT *DeviceObject);
+
+typedef BOOLEAN DDKAPI
+(*PFAST_IO_MDL_READ_COMPLETE)(
+ /*IN*/ struct _FILE_OBJECT *FileObject,
+ /*IN*/ PMDL MdlChain,
+ /*IN*/ struct _DEVICE_OBJECT *DeviceObject);
+
+typedef BOOLEAN DDKAPI
+(*PFAST_IO_PREPARE_MDL_WRITE)(
+ /*IN*/ struct _FILE_OBJECT *FileObject,
+ /*IN*/ PLARGE_INTEGER FileOffset,
+ /*IN*/ ULONG Length,
+ /*IN*/ ULONG LockKey,
+ /*OUT*/ PMDL *MdlChain,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatus,
+ /*IN*/ struct _DEVICE_OBJECT *DeviceObject);
+
+typedef BOOLEAN DDKAPI
+(*PFAST_IO_MDL_WRITE_COMPLETE)(
+ /*IN*/ struct _FILE_OBJECT *FileObject,
+ /*IN*/ PLARGE_INTEGER FileOffset,
+ /*IN*/ PMDL MdlChain,
+ /*IN*/ struct _DEVICE_OBJECT *DeviceObject);
+
+typedef BOOLEAN DDKAPI
+(*PFAST_IO_READ_COMPRESSED)(
+ /*IN*/ struct _FILE_OBJECT *FileObject,
+ /*IN*/ PLARGE_INTEGER FileOffset,
+ /*IN*/ ULONG Length,
+ /*IN*/ ULONG LockKey,
+ /*OUT*/ PVOID Buffer,
+ /*OUT*/ PMDL *MdlChain,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatus,
+ /*OUT*/ struct _COMPRESSED_DATA_INFO *CompressedDataInfo,
+ /*IN*/ ULONG CompressedDataInfoLength,
+ /*IN*/ struct _DEVICE_OBJECT *DeviceObject);
+
+typedef BOOLEAN DDKAPI
+(*PFAST_IO_WRITE_COMPRESSED)(
+ /*IN*/ struct _FILE_OBJECT *FileObject,
+ /*IN*/ PLARGE_INTEGER FileOffset,
+ /*IN*/ ULONG Length,
+ /*IN*/ ULONG LockKey,
+ /*IN*/ PVOID Buffer,
+ /*OUT*/ PMDL *MdlChain,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatus,
+ /*IN*/ struct _COMPRESSED_DATA_INFO *CompressedDataInfo,
+ /*IN*/ ULONG CompressedDataInfoLength,
+ /*IN*/ struct _DEVICE_OBJECT *DeviceObject);
+
+typedef BOOLEAN DDKAPI
+(*PFAST_IO_MDL_READ_COMPLETE_COMPRESSED)(
+ /*IN*/ struct _FILE_OBJECT *FileObject,
+ /*IN*/ PMDL MdlChain,
+ /*IN*/ struct _DEVICE_OBJECT *DeviceObject);
+
+typedef BOOLEAN DDKAPI
+(*PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED)(
+ /*IN*/ struct _FILE_OBJECT *FileObject,
+ /*IN*/ PLARGE_INTEGER FileOffset,
+ /*IN*/ PMDL MdlChain,
+ /*IN*/ struct _DEVICE_OBJECT *DeviceObject);
+
+typedef BOOLEAN DDKAPI
+(*PFAST_IO_QUERY_OPEN)(
+ /*IN*/ struct _IRP *Irp,
+ /*OUT*/ PFILE_NETWORK_OPEN_INFORMATION NetworkInformation,
+ /*IN*/ struct _DEVICE_OBJECT *DeviceObject);
+
+typedef NTSTATUS DDKAPI
+(*PFAST_IO_RELEASE_FOR_MOD_WRITE)(
+ /*IN*/ struct _FILE_OBJECT *FileObject,
+ /*IN*/ struct _ERESOURCE *ResourceToRelease,
+ /*IN*/ struct _DEVICE_OBJECT *DeviceObject);
+
+typedef NTSTATUS DDKAPI
+(*PFAST_IO_ACQUIRE_FOR_CCFLUSH)(
+ /*IN*/ struct _FILE_OBJECT *FileObject,
+ /*IN*/ struct _DEVICE_OBJECT *DeviceObject);
+
+typedef NTSTATUS DDKAPI
+(*PFAST_IO_RELEASE_FOR_CCFLUSH) (
+ /*IN*/ struct _FILE_OBJECT *FileObject,
+ /*IN*/ struct _DEVICE_OBJECT *DeviceObject);
+
+typedef struct _FAST_IO_DISPATCH {
+ ULONG SizeOfFastIoDispatch;
+ PFAST_IO_CHECK_IF_POSSIBLE FastIoCheckIfPossible;
+ PFAST_IO_READ FastIoRead;
+ PFAST_IO_WRITE FastIoWrite;
+ PFAST_IO_QUERY_BASIC_INFO FastIoQueryBasicInfo;
+ PFAST_IO_QUERY_STANDARD_INFO FastIoQueryStandardInfo;
+ PFAST_IO_LOCK FastIoLock;
+ PFAST_IO_UNLOCK_SINGLE FastIoUnlockSingle;
+ PFAST_IO_UNLOCK_ALL FastIoUnlockAll;
+ PFAST_IO_UNLOCK_ALL_BY_KEY FastIoUnlockAllByKey;
+ PFAST_IO_DEVICE_CONTROL FastIoDeviceControl;
+ PFAST_IO_ACQUIRE_FILE AcquireFileForNtCreateSection;
+ PFAST_IO_RELEASE_FILE ReleaseFileForNtCreateSection;
+ PFAST_IO_DETACH_DEVICE FastIoDetachDevice;
+ PFAST_IO_QUERY_NETWORK_OPEN_INFO FastIoQueryNetworkOpenInfo;
+ PFAST_IO_ACQUIRE_FOR_MOD_WRITE AcquireForModWrite;
+ PFAST_IO_MDL_READ MdlRead;
+ PFAST_IO_MDL_READ_COMPLETE MdlReadComplete;
+ PFAST_IO_PREPARE_MDL_WRITE PrepareMdlWrite;
+ PFAST_IO_MDL_WRITE_COMPLETE MdlWriteComplete;
+ PFAST_IO_READ_COMPRESSED FastIoReadCompressed;
+ PFAST_IO_WRITE_COMPRESSED FastIoWriteCompressed;
+ PFAST_IO_MDL_READ_COMPLETE_COMPRESSED MdlReadCompleteCompressed;
+ PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED MdlWriteCompleteCompressed;
+ PFAST_IO_QUERY_OPEN FastIoQueryOpen;
+ PFAST_IO_RELEASE_FOR_MOD_WRITE ReleaseForModWrite;
+ PFAST_IO_ACQUIRE_FOR_CCFLUSH AcquireForCcFlush;
+ PFAST_IO_RELEASE_FOR_CCFLUSH ReleaseForCcFlush;
+} FAST_IO_DISPATCH, *PFAST_IO_DISPATCH;
+
+typedef struct _DRIVER_OBJECT {
+ CSHORT Type;
+ CSHORT Size;
+ PDEVICE_OBJECT DeviceObject;
+ ULONG Flags;
+ PVOID DriverStart;
+ ULONG DriverSize;
+ PVOID DriverSection;
+ PDRIVER_EXTENSION DriverExtension;
+ UNICODE_STRING DriverName;
+ PUNICODE_STRING HardwareDatabase;
+ PFAST_IO_DISPATCH FastIoDispatch;
+ PDRIVER_INITIALIZE DriverInit;
+ PDRIVER_STARTIO DriverStartIo;
+ PDRIVER_UNLOAD DriverUnload;
+ PDRIVER_DISPATCH MajorFunction[IRP_MJ_MAXIMUM_FUNCTION + 1];
+} DRIVER_OBJECT;
+typedef struct _DRIVER_OBJECT *PDRIVER_OBJECT;
+
+typedef struct _SECTION_OBJECT_POINTERS {
+ PVOID DataSectionObject;
+ PVOID SharedCacheMap;
+ PVOID ImageSectionObject;
+} SECTION_OBJECT_POINTERS, *PSECTION_OBJECT_POINTERS;
+
+typedef struct _IO_COMPLETION_CONTEXT {
+ PVOID Port;
+ PVOID Key;
+} IO_COMPLETION_CONTEXT, *PIO_COMPLETION_CONTEXT;
+
+/* FILE_OBJECT.Flags */
+
+#define FO_FILE_OPEN 0x00000001
+#define FO_SYNCHRONOUS_IO 0x00000002
+#define FO_ALERTABLE_IO 0x00000004
+#define FO_NO_INTERMEDIATE_BUFFERING 0x00000008
+#define FO_WRITE_THROUGH 0x00000010
+#define FO_SEQUENTIAL_ONLY 0x00000020
+#define FO_CACHE_SUPPORTED 0x00000040
+#define FO_NAMED_PIPE 0x00000080
+#define FO_STREAM_FILE 0x00000100
+#define FO_MAILSLOT 0x00000200
+#define FO_GENERATE_AUDIT_ON_CLOSE 0x00000400
+#define FO_DIRECT_DEVICE_OPEN 0x00000800
+#define FO_FILE_MODIFIED 0x00001000
+#define FO_FILE_SIZE_CHANGED 0x00002000
+#define FO_CLEANUP_COMPLETE 0x00004000
+#define FO_TEMPORARY_FILE 0x00008000
+#define FO_DELETE_ON_CLOSE 0x00010000
+#define FO_OPENED_CASE_SENSITIVE 0x00020000
+#define FO_HANDLE_CREATED 0x00040000
+#define FO_FILE_FAST_IO_READ 0x00080000
+#define FO_RANDOM_ACCESS 0x00100000
+#define FO_FILE_OPEN_CANCELLED 0x00200000
+#define FO_VOLUME_OPEN 0x00400000
+#define FO_FILE_OBJECT_HAS_EXTENSION 0x00800000
+#define FO_REMOTE_ORIGIN 0x01000000
+
+typedef struct _FILE_OBJECT {
+ CSHORT Type;
+ CSHORT Size;
+ PDEVICE_OBJECT DeviceObject;
+ PVPB Vpb;
+ PVOID FsContext;
+ PVOID FsContext2;
+ PSECTION_OBJECT_POINTERS SectionObjectPointer;
+ PVOID PrivateCacheMap;
+ NTSTATUS FinalStatus;
+ struct _FILE_OBJECT *RelatedFileObject;
+ BOOLEAN LockOperation;
+ BOOLEAN DeletePending;
+ BOOLEAN ReadAccess;
+ BOOLEAN WriteAccess;
+ BOOLEAN DeleteAccess;
+ BOOLEAN SharedRead;
+ BOOLEAN SharedWrite;
+ BOOLEAN SharedDelete;
+ ULONG Flags;
+ UNICODE_STRING FileName;
+ LARGE_INTEGER CurrentByteOffset;
+ ULONG Waiters;
+ ULONG Busy;
+ PVOID LastLock;
+ KEVENT Lock;
+ KEVENT Event;
+ PIO_COMPLETION_CONTEXT CompletionContext;
+} FILE_OBJECT;
+typedef struct _FILE_OBJECT *PFILE_OBJECT;
+
+typedef enum _SECURITY_OPERATION_CODE {
+ SetSecurityDescriptor,
+ QuerySecurityDescriptor,
+ DeleteSecurityDescriptor,
+ AssignSecurityDescriptor
+} SECURITY_OPERATION_CODE, *PSECURITY_OPERATION_CODE;
+
+#define INITIAL_PRIVILEGE_COUNT 3
+
+typedef struct _INITIAL_PRIVILEGE_SET {
+ ULONG PrivilegeCount;
+ ULONG Control;
+ LUID_AND_ATTRIBUTES Privilege[INITIAL_PRIVILEGE_COUNT];
+} INITIAL_PRIVILEGE_SET, * PINITIAL_PRIVILEGE_SET;
+
+typedef struct _SECURITY_SUBJECT_CONTEXT {
+ PACCESS_TOKEN ClientToken;
+ SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
+ PACCESS_TOKEN PrimaryToken;
+ PVOID ProcessAuditId;
+} SECURITY_SUBJECT_CONTEXT, *PSECURITY_SUBJECT_CONTEXT;
+
+#include <pshpack4.h>
+typedef struct _ACCESS_STATE {
+ LUID OperationID;
+ BOOLEAN SecurityEvaluated;
+ BOOLEAN GenerateAudit;
+ BOOLEAN GenerateOnClose;
+ BOOLEAN PrivilegesAllocated;
+ ULONG Flags;
+ ACCESS_MASK RemainingDesiredAccess;
+ ACCESS_MASK PreviouslyGrantedAccess;
+ ACCESS_MASK OriginalDesiredAccess;
+ SECURITY_SUBJECT_CONTEXT SubjectSecurityContext;
+ PSECURITY_DESCRIPTOR SecurityDescriptor;
+ PVOID AuxData;
+ union {
+ INITIAL_PRIVILEGE_SET InitialPrivilegeSet;
+ PRIVILEGE_SET PrivilegeSet;
+ } Privileges;
+
+ BOOLEAN AuditPrivileges;
+ UNICODE_STRING ObjectName;
+ UNICODE_STRING ObjectTypeName;
+} ACCESS_STATE, *PACCESS_STATE;
+#include <poppack.h>
+
+typedef struct _IO_SECURITY_CONTEXT {
+ PSECURITY_QUALITY_OF_SERVICE SecurityQos;
+ PACCESS_STATE AccessState;
+ ACCESS_MASK DesiredAccess;
+ ULONG FullCreateOptions;
+} IO_SECURITY_CONTEXT, *PIO_SECURITY_CONTEXT;
+
+struct _IO_CSQ;
+
+typedef struct _IO_CSQ_IRP_CONTEXT {
+ ULONG Type;
+ struct _IRP *Irp;
+ struct _IO_CSQ *Csq;
+} IO_CSQ_IRP_CONTEXT, *PIO_CSQ_IRP_CONTEXT;
+
+typedef VOID DDKAPI
+(*PIO_CSQ_INSERT_IRP)(
+ /*IN*/ struct _IO_CSQ *Csq,
+ /*IN*/ PIRP Irp);
+
+typedef VOID DDKAPI
+(*PIO_CSQ_REMOVE_IRP)(
+ /*IN*/ struct _IO_CSQ *Csq,
+ /*IN*/ PIRP Irp);
+
+typedef PIRP DDKAPI
+(*PIO_CSQ_PEEK_NEXT_IRP)(
+ /*IN*/ struct _IO_CSQ *Csq,
+ /*IN*/ PIRP Irp,
+ /*IN*/ PVOID PeekContext);
+
+typedef VOID DDKAPI
+(*PIO_CSQ_ACQUIRE_LOCK)(
+ /*IN*/ struct _IO_CSQ *Csq,
+ /*OUT*/ PKIRQL Irql);
+
+typedef VOID DDKAPI
+(*PIO_CSQ_RELEASE_LOCK)(
+ /*IN*/ struct _IO_CSQ *Csq,
+ /*IN*/ KIRQL Irql);
+
+typedef VOID DDKAPI
+(*PIO_CSQ_COMPLETE_CANCELED_IRP)(
+ /*IN*/ struct _IO_CSQ *Csq,
+ /*IN*/ PIRP Irp);
+
+typedef struct _IO_CSQ {
+ ULONG Type;
+ PIO_CSQ_INSERT_IRP CsqInsertIrp;
+ PIO_CSQ_REMOVE_IRP CsqRemoveIrp;
+ PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp;
+ PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock;
+ PIO_CSQ_RELEASE_LOCK CsqReleaseLock;
+ PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp;
+ PVOID ReservePointer;
+} IO_CSQ, *PIO_CSQ;
+
+#include <pshpack4.h>
+typedef struct _IO_STACK_LOCATION {
+ UCHAR MajorFunction;
+ UCHAR MinorFunction;
+ UCHAR Flags;
+ UCHAR Control;
+ union {
+ struct {
+ PIO_SECURITY_CONTEXT SecurityContext;
+ ULONG Options;
+ USHORT POINTER_ALIGNMENT FileAttributes;
+ USHORT ShareAccess;
+ ULONG POINTER_ALIGNMENT EaLength;
+ } Create;
+ struct {
+ ULONG Length;
+ ULONG POINTER_ALIGNMENT Key;
+ LARGE_INTEGER ByteOffset;
+ } Read;
+ struct {
+ ULONG Length;
+ ULONG POINTER_ALIGNMENT Key;
+ LARGE_INTEGER ByteOffset;
+ } Write;
+ struct {
+ ULONG Length;
+ FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass;
+ } QueryFile;
+ struct {
+ ULONG Length;
+ FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass;
+ PFILE_OBJECT FileObject;
+ _ANONYMOUS_UNION union {
+ _ANONYMOUS_STRUCT struct {
+ BOOLEAN ReplaceIfExists;
+ BOOLEAN AdvanceOnly;
+ } DUMMYSTRUCTNAME;
+ ULONG ClusterCount;
+ HANDLE DeleteHandle;
+ } DUMMYUNIONNAME;
+ } SetFile;
+ struct {
+ ULONG Length;
+ FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass;
+ } QueryVolume;
+ struct {
+ ULONG OutputBufferLength;
+ ULONG POINTER_ALIGNMENT InputBufferLength;
+ ULONG POINTER_ALIGNMENT IoControlCode;
+ PVOID Type3InputBuffer;
+ } DeviceIoControl;
+ struct {
+ SECURITY_INFORMATION SecurityInformation;
+ ULONG POINTER_ALIGNMENT Length;
+ } QuerySecurity;
+ struct {
+ SECURITY_INFORMATION SecurityInformation;
+ PSECURITY_DESCRIPTOR SecurityDescriptor;
+ } SetSecurity;
+ struct {
+ PVPB Vpb;
+ PDEVICE_OBJECT DeviceObject;
+ } MountVolume;
+ struct {
+ PVPB Vpb;
+ PDEVICE_OBJECT DeviceObject;
+ } VerifyVolume;
+ struct {
+ struct _SCSI_REQUEST_BLOCK *Srb;
+ } Scsi;
+ struct {
+ DEVICE_RELATION_TYPE Type;
+ } QueryDeviceRelations;
+ struct {
+ CONST GUID *InterfaceType;
+ USHORT Size;
+ USHORT Version;
+ PINTERFACE Interface;
+ PVOID InterfaceSpecificData;
+ } QueryInterface;
+ struct {
+ PDEVICE_CAPABILITIES Capabilities;
+ } DeviceCapabilities;
+ struct {
+ PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList;
+ } FilterResourceRequirements;
+ struct {
+ ULONG WhichSpace;
+ PVOID Buffer;
+ ULONG Offset;
+ ULONG POINTER_ALIGNMENT Length;
+ } ReadWriteConfig;
+ struct {
+ BOOLEAN Lock;
+ } SetLock;
+ struct {
+ BUS_QUERY_ID_TYPE IdType;
+ } QueryId;
+ struct {
+ DEVICE_TEXT_TYPE DeviceTextType;
+ LCID POINTER_ALIGNMENT LocaleId;
+ } QueryDeviceText;
+ struct {
+ BOOLEAN InPath;
+ BOOLEAN Reserved[3];
+ DEVICE_USAGE_NOTIFICATION_TYPE POINTER_ALIGNMENT Type;
+ } UsageNotification;
+ struct {
+ SYSTEM_POWER_STATE PowerState;
+ } WaitWake;
+ struct {
+ PPOWER_SEQUENCE PowerSequence;
+ } PowerSequence;
+ struct {
+ ULONG SystemContext;
+ POWER_STATE_TYPE POINTER_ALIGNMENT Type;
+ POWER_STATE POINTER_ALIGNMENT State;
+ POWER_ACTION POINTER_ALIGNMENT ShutdownType;
+ } Power;
+ struct {
+ PCM_RESOURCE_LIST AllocatedResources;
+ PCM_RESOURCE_LIST AllocatedResourcesTranslated;
+ } StartDevice;
+ struct {
+ ULONG_PTR ProviderId;
+ PVOID DataPath;
+ ULONG BufferSize;
+ PVOID Buffer;
+ } WMI;
+ struct {
+ PVOID Argument1;
+ PVOID Argument2;
+ PVOID Argument3;
+ PVOID Argument4;
+ } Others;
+ } Parameters;
+ PDEVICE_OBJECT DeviceObject;
+ PFILE_OBJECT FileObject;
+ PIO_COMPLETION_ROUTINE CompletionRoutine;
+ PVOID Context;
+} IO_STACK_LOCATION, *PIO_STACK_LOCATION;
+#include <poppack.h>
+
+/* IO_STACK_LOCATION.Control */
+
+#define SL_PENDING_RETURNED 0x01
+#define SL_INVOKE_ON_CANCEL 0x20
+#define SL_INVOKE_ON_SUCCESS 0x40
+#define SL_INVOKE_ON_ERROR 0x80
+
+typedef enum _KEY_INFORMATION_CLASS {
+ KeyBasicInformation,
+ KeyNodeInformation,
+ KeyFullInformation,
+ KeyNameInformation,
+ KeyCachedInformation,
+ KeyFlagsInformation
+} KEY_INFORMATION_CLASS;
+
+typedef struct _KEY_BASIC_INFORMATION {
+ LARGE_INTEGER LastWriteTime;
+ ULONG TitleIndex;
+ ULONG NameLength;
+ WCHAR Name[1];
+} KEY_BASIC_INFORMATION, *PKEY_BASIC_INFORMATION;
+
+typedef struct _KEY_FULL_INFORMATION {
+ LARGE_INTEGER LastWriteTime;
+ ULONG TitleIndex;
+ ULONG ClassOffset;
+ ULONG ClassLength;
+ ULONG SubKeys;
+ ULONG MaxNameLen;
+ ULONG MaxClassLen;
+ ULONG Values;
+ ULONG MaxValueNameLen;
+ ULONG MaxValueDataLen;
+ WCHAR Class[1];
+} KEY_FULL_INFORMATION, *PKEY_FULL_INFORMATION;
+
+typedef struct _KEY_NODE_INFORMATION {
+ LARGE_INTEGER LastWriteTime;
+ ULONG TitleIndex;
+ ULONG ClassOffset;
+ ULONG ClassLength;
+ ULONG NameLength;
+ WCHAR Name[1];
+} KEY_NODE_INFORMATION, *PKEY_NODE_INFORMATION;
+
+typedef struct _KEY_VALUE_BASIC_INFORMATION {
+ ULONG TitleIndex;
+ ULONG Type;
+ ULONG NameLength;
+ WCHAR Name[1];
+} KEY_VALUE_BASIC_INFORMATION, *PKEY_VALUE_BASIC_INFORMATION;
+
+typedef struct _KEY_VALUE_FULL_INFORMATION {
+ ULONG TitleIndex;
+ ULONG Type;
+ ULONG DataOffset;
+ ULONG DataLength;
+ ULONG NameLength;
+ WCHAR Name[1];
+} KEY_VALUE_FULL_INFORMATION, *PKEY_VALUE_FULL_INFORMATION;
+
+typedef struct _KEY_VALUE_PARTIAL_INFORMATION {
+ ULONG TitleIndex;
+ ULONG Type;
+ ULONG DataLength;
+ UCHAR Data[1];
+} KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION;
+
+typedef struct _KEY_VALUE_PARTIAL_INFORMATION_ALIGN64 {
+ ULONG Type;
+ ULONG DataLength;
+ UCHAR Data[1];
+} KEY_VALUE_PARTIAL_INFORMATION_ALIGN64, *PKEY_VALUE_PARTIAL_INFORMATION_ALIGN64;
+
+typedef struct _KEY_VALUE_ENTRY {
+ PUNICODE_STRING ValueName;
+ ULONG DataLength;
+ ULONG DataOffset;
+ ULONG Type;
+} KEY_VALUE_ENTRY, *PKEY_VALUE_ENTRY;
+
+typedef enum _KEY_VALUE_INFORMATION_CLASS {
+ KeyValueBasicInformation,
+ KeyValueFullInformation,
+ KeyValuePartialInformation,
+ KeyValueFullInformationAlign64,
+ KeyValuePartialInformationAlign64
+} KEY_VALUE_INFORMATION_CLASS;
+
+/* KEY_VALUE_Xxx.Type */
+
+#define REG_NONE 0
+#define REG_SZ 1
+#define REG_EXPAND_SZ 2
+#define REG_BINARY 3
+#define REG_DWORD 4
+#define REG_DWORD_LITTLE_ENDIAN 4
+#define REG_DWORD_BIG_ENDIAN 5
+#define REG_LINK 6
+#define REG_MULTI_SZ 7
+#define REG_RESOURCE_LIST 8
+#define REG_FULL_RESOURCE_DESCRIPTOR 9
+#define REG_RESOURCE_REQUIREMENTS_LIST 10
+#define REG_QWORD 11
+#define REG_QWORD_LITTLE_ENDIAN 11
+
+#define PCI_TYPE0_ADDRESSES 6
+#define PCI_TYPE1_ADDRESSES 2
+#define PCI_TYPE2_ADDRESSES 5
+
+typedef struct _PCI_COMMON_CONFIG {
+ USHORT VendorID;
+ USHORT DeviceID;
+ USHORT Command;
+ USHORT Status;
+ UCHAR RevisionID;
+ UCHAR ProgIf;
+ UCHAR SubClass;
+ UCHAR BaseClass;
+ UCHAR CacheLineSize;
+ UCHAR LatencyTimer;
+ UCHAR HeaderType;
+ UCHAR BIST;
+ union {
+ struct _PCI_HEADER_TYPE_0 {
+ ULONG BaseAddresses[PCI_TYPE0_ADDRESSES];
+ ULONG CIS;
+ USHORT SubVendorID;
+ USHORT SubSystemID;
+ ULONG ROMBaseAddress;
+ UCHAR CapabilitiesPtr;
+ UCHAR Reserved1[3];
+ ULONG Reserved2;
+ UCHAR InterruptLine;
+ UCHAR InterruptPin;
+ UCHAR MinimumGrant;
+ UCHAR MaximumLatency;
+ } type0;
+ struct _PCI_HEADER_TYPE_1 {
+ ULONG BaseAddresses[PCI_TYPE1_ADDRESSES];
+ UCHAR PrimaryBus;
+ UCHAR SecondaryBus;
+ UCHAR SubordinateBus;
+ UCHAR SecondaryLatency;
+ UCHAR IOBase;
+ UCHAR IOLimit;
+ USHORT SecondaryStatus;
+ USHORT MemoryBase;
+ USHORT MemoryLimit;
+ USHORT PrefetchBase;
+ USHORT PrefetchLimit;
+ ULONG PrefetchBaseUpper32;
+ ULONG PrefetchLimitUpper32;
+ USHORT IOBaseUpper16;
+ USHORT IOLimitUpper16;
+ UCHAR CapabilitiesPtr;
+ UCHAR Reserved1[3];
+ ULONG ROMBaseAddress;
+ UCHAR InterruptLine;
+ UCHAR InterruptPin;
+ USHORT BridgeControl;
+ } type1;
+ struct _PCI_HEADER_TYPE_2 {
+ ULONG SocketRegistersBaseAddress;
+ UCHAR CapabilitiesPtr;
+ UCHAR Reserved;
+ USHORT SecondaryStatus;
+ UCHAR PrimaryBus;
+ UCHAR SecondaryBus;
+ UCHAR SubordinateBus;
+ UCHAR SecondaryLatency;
+ struct {
+ ULONG Base;
+ ULONG Limit;
+ } Range[PCI_TYPE2_ADDRESSES - 1];
+ UCHAR InterruptLine;
+ UCHAR InterruptPin;
+ USHORT BridgeControl;
+ } type2;
+ } u;
+ UCHAR DeviceSpecific[192];
+} PCI_COMMON_CONFIG, *PPCI_COMMON_CONFIG;
+
+/* PCI_COMMON_CONFIG.Command */
+
+#define PCI_ENABLE_IO_SPACE 0x0001
+#define PCI_ENABLE_MEMORY_SPACE 0x0002
+#define PCI_ENABLE_BUS_MASTER 0x0004
+#define PCI_ENABLE_SPECIAL_CYCLES 0x0008
+#define PCI_ENABLE_WRITE_AND_INVALIDATE 0x0010
+#define PCI_ENABLE_VGA_COMPATIBLE_PALETTE 0x0020
+#define PCI_ENABLE_PARITY 0x0040
+#define PCI_ENABLE_WAIT_CYCLE 0x0080
+#define PCI_ENABLE_SERR 0x0100
+#define PCI_ENABLE_FAST_BACK_TO_BACK 0x0200
+
+/* PCI_COMMON_CONFIG.Status */
+
+#define PCI_STATUS_CAPABILITIES_LIST 0x0010
+#define PCI_STATUS_66MHZ_CAPABLE 0x0020
+#define PCI_STATUS_UDF_SUPPORTED 0x0040
+#define PCI_STATUS_FAST_BACK_TO_BACK 0x0080
+#define PCI_STATUS_DATA_PARITY_DETECTED 0x0100
+#define PCI_STATUS_DEVSEL 0x0600
+#define PCI_STATUS_SIGNALED_TARGET_ABORT 0x0800
+#define PCI_STATUS_RECEIVED_TARGET_ABORT 0x1000
+#define PCI_STATUS_RECEIVED_MASTER_ABORT 0x2000
+#define PCI_STATUS_SIGNALED_SYSTEM_ERROR 0x4000
+#define PCI_STATUS_DETECTED_PARITY_ERROR 0x8000
+
+/* PCI_COMMON_CONFIG.HeaderType */
+
+#define PCI_MULTIFUNCTION 0x80
+#define PCI_DEVICE_TYPE 0x00
+#define PCI_BRIDGE_TYPE 0x01
+#define PCI_CARDBUS_BRIDGE_TYPE 0x02
+
+#define PCI_CONFIGURATION_TYPE(PciData) \
+ (((PPCI_COMMON_CONFIG) (PciData))->HeaderType & ~PCI_MULTIFUNCTION)
+
+#define PCI_MULTIFUNCTION_DEVICE(PciData) \
+ ((((PPCI_COMMON_CONFIG) (PciData))->HeaderType & PCI_MULTIFUNCTION) != 0)
+
+typedef struct _PCI_SLOT_NUMBER {
+ union {
+ struct {
+ ULONG DeviceNumber : 5;
+ ULONG FunctionNumber : 3;
+ ULONG Reserved : 24;
+ } bits;
+ ULONG AsULONG;
+ } u;
+} PCI_SLOT_NUMBER, *PPCI_SLOT_NUMBER;
+
+typedef enum _POOL_TYPE {
+ NonPagedPool,
+ PagedPool,
+ NonPagedPoolMustSucceed,
+ DontUseThisType,
+ NonPagedPoolCacheAligned,
+ PagedPoolCacheAligned,
+ NonPagedPoolCacheAlignedMustS,
+ MaxPoolType,
+ NonPagedPoolSession = 32,
+ PagedPoolSession,
+ NonPagedPoolMustSucceedSession,
+ DontUseThisTypeSession,
+ NonPagedPoolCacheAlignedSession,
+ PagedPoolCacheAlignedSession,
+ NonPagedPoolCacheAlignedMustSSession
+} POOL_TYPE;
+
+typedef enum _EX_POOL_PRIORITY {
+ LowPoolPriority,
+ LowPoolPrioritySpecialPoolOverrun = 8,
+ LowPoolPrioritySpecialPoolUnderrun = 9,
+ NormalPoolPriority = 16,
+ NormalPoolPrioritySpecialPoolOverrun = 24,
+ NormalPoolPrioritySpecialPoolUnderrun = 25,
+ HighPoolPriority = 32,
+ HighPoolPrioritySpecialPoolOverrun = 40,
+ HighPoolPrioritySpecialPoolUnderrun = 41
+} EX_POOL_PRIORITY;
+
+/* PRIVILEGE_SET.Control */
+
+#define PRIVILEGE_SET_ALL_NECESSARY 1
+
+typedef struct _RTL_OSVERSIONINFOW {
+ ULONG dwOSVersionInfoSize;
+ ULONG dwMajorVersion;
+ ULONG dwMinorVersion;
+ ULONG dwBuildNumber;
+ ULONG dwPlatformId;
+ WCHAR szCSDVersion[128];
+} RTL_OSVERSIONINFOW, *PRTL_OSVERSIONINFOW;
+
+typedef struct _RTL_OSVERSIONINFOEXW {
+ ULONG dwOSVersionInfoSize;
+ ULONG dwMajorVersion;
+ ULONG dwMinorVersion;
+ ULONG dwBuildNumber;
+ ULONG dwPlatformId;
+ WCHAR szCSDVersion[128];
+ USHORT wServicePackMajor;
+ USHORT wServicePackMinor;
+ USHORT wSuiteMask;
+ UCHAR wProductType;
+ UCHAR wReserved;
+} RTL_OSVERSIONINFOEXW, *PRTL_OSVERSIONINFOEXW;
+
+NTOSAPI
+ULONGLONG
+DDKAPI
+VerSetConditionMask(
+ /*IN*/ ULONGLONG ConditionMask,
+ /*IN*/ ULONG TypeMask,
+ /*IN*/ UCHAR Condition);
+
+#define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType) \
+ ((ConditionMask) = VerSetConditionMask((ConditionMask), \
+ (TypeBitMask), (ComparisonType)))
+
+/* RtlVerifyVersionInfo() TypeMask */
+
+#define VER_MINORVERSION 0x0000001
+#define VER_MAJORVERSION 0x0000002
+#define VER_BUILDNUMBER 0x0000004
+#define VER_PLATFORMID 0x0000008
+#define VER_SERVICEPACKMINOR 0x0000010
+#define VER_SERVICEPACKMAJOR 0x0000020
+#define VER_SUITENAME 0x0000040
+#define VER_PRODUCT_TYPE 0x0000080
+
+/* RtlVerifyVersionInfo() ComparisonType */
+
+#define VER_EQUAL 1
+#define VER_GREATER 2
+#define VER_GREATER_EQUAL 3
+#define VER_LESS 4
+#define VER_LESS_EQUAL 5
+#define VER_AND 6
+#define VER_OR 7
+
+#define VER_CONDITION_MASK 7
+#define VER_NUM_BITS_PER_CONDITION_MASK 3
+
+typedef struct _RTL_BITMAP {
+ ULONG SizeOfBitMap;
+ PULONG Buffer;
+} RTL_BITMAP, *PRTL_BITMAP;
+
+typedef struct _RTL_BITMAP_RUN {
+ ULONG StartingIndex;
+ ULONG NumberOfBits;
+} RTL_BITMAP_RUN, *PRTL_BITMAP_RUN;
+
+typedef NTSTATUS DDKAPI
+(*PRTL_QUERY_REGISTRY_ROUTINE)(
+ /*IN*/ PWSTR ValueName,
+ /*IN*/ ULONG ValueType,
+ /*IN*/ PVOID ValueData,
+ /*IN*/ ULONG ValueLength,
+ /*IN*/ PVOID Context,
+ /*IN*/ PVOID EntryContext);
+
+#define RTL_REGISTRY_ABSOLUTE 0
+#define RTL_REGISTRY_SERVICES 1
+#define RTL_REGISTRY_CONTROL 2
+#define RTL_REGISTRY_WINDOWS_NT 3
+#define RTL_REGISTRY_DEVICEMAP 4
+#define RTL_REGISTRY_USER 5
+
+/* RTL_QUERY_REGISTRY_TABLE.Flags */
+#define RTL_QUERY_REGISTRY_SUBKEY 0x00000001
+#define RTL_QUERY_REGISTRY_TOPKEY 0x00000002
+#define RTL_QUERY_REGISTRY_REQUIRED 0x00000004
+#define RTL_QUERY_REGISTRY_NOVALUE 0x00000008
+#define RTL_QUERY_REGISTRY_NOEXPAND 0x00000010
+#define RTL_QUERY_REGISTRY_DIRECT 0x00000020
+#define RTL_QUERY_REGISTRY_DELETE 0x00000040
+
+typedef struct _RTL_QUERY_REGISTRY_TABLE {
+ PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine;
+ ULONG Flags;
+ PWSTR Name;
+ PVOID EntryContext;
+ ULONG DefaultType;
+ PVOID DefaultData;
+ ULONG DefaultLength;
+} RTL_QUERY_REGISTRY_TABLE, *PRTL_QUERY_REGISTRY_TABLE;
+
+typedef struct _TIME_FIELDS {
+ CSHORT Year;
+ CSHORT Month;
+ CSHORT Day;
+ CSHORT Hour;
+ CSHORT Minute;
+ CSHORT Second;
+ CSHORT Milliseconds;
+ CSHORT Weekday;
+} TIME_FIELDS, *PTIME_FIELDS;
+
+typedef PVOID DDKAPI
+(*PALLOCATE_FUNCTION)(
+ /*IN*/ POOL_TYPE PoolType,
+ /*IN*/ SIZE_T NumberOfBytes,
+ /*IN*/ ULONG Tag);
+
+typedef VOID DDKAPI
+(*PFREE_FUNCTION)(
+ /*IN*/ PVOID Buffer);
+
+#define GENERAL_LOOKASIDE_S \
+ SLIST_HEADER ListHead; \
+ USHORT Depth; \
+ USHORT MaximumDepth; \
+ ULONG TotalAllocates; \
+ _ANONYMOUS_UNION union { \
+ ULONG AllocateMisses; \
+ ULONG AllocateHits; \
+ } DUMMYUNIONNAME; \
+ ULONG TotalFrees; \
+ _ANONYMOUS_UNION union { \
+ ULONG FreeMisses; \
+ ULONG FreeHits; \
+ } DUMMYUNIONNAME2; \
+ POOL_TYPE Type; \
+ ULONG Tag; \
+ ULONG Size; \
+ PALLOCATE_FUNCTION Allocate; \
+ PFREE_FUNCTION Free; \
+ LIST_ENTRY ListEntry; \
+ ULONG LastTotalAllocates; \
+ _ANONYMOUS_UNION union { \
+ ULONG LastAllocateMisses; \
+ ULONG LastAllocateHits; \
+ } DUMMYUNIONNAME3; \
+ ULONG Future[2];
+
+typedef struct _GENERAL_LOOKASIDE {
+ GENERAL_LOOKASIDE_S
+} GENERAL_LOOKASIDE, *PGENERAL_LOOKASIDE;
+
+typedef struct _NPAGED_LOOKASIDE_LIST {
+ GENERAL_LOOKASIDE_S
+ KSPIN_LOCK Obsoleted;
+} NPAGED_LOOKASIDE_LIST, *PNPAGED_LOOKASIDE_LIST;
+
+typedef struct _PAGED_LOOKASIDE_LIST {
+ GENERAL_LOOKASIDE_S
+ FAST_MUTEX Obsoleted;
+} PAGED_LOOKASIDE_LIST, *PPAGED_LOOKASIDE_LIST;
+
+typedef struct _CALLBACK_OBJECT *PCALLBACK_OBJECT;
+
+typedef VOID DDKAPI (*PCALLBACK_FUNCTION)(
+ /*IN*/ PVOID CallbackContext,
+ /*IN*/ PVOID Argument1,
+ /*IN*/ PVOID Argument2);
+
+typedef enum _EVENT_TYPE {
+ NotificationEvent,
+ SynchronizationEvent
+} EVENT_TYPE;
+
+typedef enum _KWAIT_REASON {
+ Executive,
+ FreePage,
+ PageIn,
+ PoolAllocation,
+ DelayExecution,
+ Suspended,
+ UserRequest,
+ WrExecutive,
+ WrFreePage,
+ WrPageIn,
+ WrPoolAllocation,
+ WrDelayExecution,
+ WrSuspended,
+ WrUserRequest,
+ WrEventPair,
+ WrQueue,
+ WrLpcReceive,
+ WrLpcReply,
+ WrVirtualMemory,
+ WrPageOut,
+ WrRendezvous,
+ Spare2,
+ Spare3,
+ Spare4,
+ Spare5,
+ Spare6,
+ WrKernel,
+ MaximumWaitReason
+} KWAIT_REASON;
+
+typedef struct _KWAIT_BLOCK {
+ LIST_ENTRY WaitListEntry;
+ struct _KTHREAD * RESTRICTED_POINTER Thread;
+ PVOID Object;
+ struct _KWAIT_BLOCK * RESTRICTED_POINTER NextWaitBlock;
+ USHORT WaitKey;
+ USHORT WaitType;
+} KWAIT_BLOCK, *PKWAIT_BLOCK, *RESTRICTED_POINTER PRKWAIT_BLOCK;
+
+typedef struct _IO_REMOVE_LOCK_TRACKING_BLOCK * PIO_REMOVE_LOCK_TRACKING_BLOCK;
+
+typedef struct _IO_REMOVE_LOCK_COMMON_BLOCK {
+ BOOLEAN Removed;
+ BOOLEAN Reserved[3];
+ LONG IoCount;
+ KEVENT RemoveEvent;
+} IO_REMOVE_LOCK_COMMON_BLOCK;
+
+typedef struct _IO_REMOVE_LOCK_DBG_BLOCK {
+ LONG Signature;
+ LONG HighWatermark;
+ LONGLONG MaxLockedTicks;
+ LONG AllocateTag;
+ LIST_ENTRY LockList;
+ KSPIN_LOCK Spin;
+ LONG LowMemoryCount;
+ ULONG Reserved1[4];
+ PVOID Reserved2;
+ PIO_REMOVE_LOCK_TRACKING_BLOCK Blocks;
+} IO_REMOVE_LOCK_DBG_BLOCK;
+
+typedef struct _IO_REMOVE_LOCK {
+ IO_REMOVE_LOCK_COMMON_BLOCK Common;
+#ifdef DBG
+ IO_REMOVE_LOCK_DBG_BLOCK Dbg;
+#endif
+} IO_REMOVE_LOCK, *PIO_REMOVE_LOCK;
+
+typedef struct _IO_WORKITEM *PIO_WORKITEM;
+
+typedef VOID DDKAPI
+(*PIO_WORKITEM_ROUTINE)(
+ /*IN*/ PDEVICE_OBJECT DeviceObject,
+ /*IN*/ PVOID Context);
+
+typedef struct _SHARE_ACCESS {
+ ULONG OpenCount;
+ ULONG Readers;
+ ULONG Writers;
+ ULONG Deleters;
+ ULONG SharedRead;
+ ULONG SharedWrite;
+ ULONG SharedDelete;
+} SHARE_ACCESS, *PSHARE_ACCESS;
+
+typedef enum _KINTERRUPT_MODE {
+ LevelSensitive,
+ Latched
+} KINTERRUPT_MODE;
+
+typedef VOID DDKAPI
+(*PKINTERRUPT_ROUTINE)(
+ VOID);
+
+typedef enum _KPROFILE_SOURCE {
+ ProfileTime,
+ ProfileAlignmentFixup,
+ ProfileTotalIssues,
+ ProfilePipelineDry,
+ ProfileLoadInstructions,
+ ProfilePipelineFrozen,
+ ProfileBranchInstructions,
+ ProfileTotalNonissues,
+ ProfileDcacheMisses,
+ ProfileIcacheMisses,
+ ProfileCacheMisses,
+ ProfileBranchMispredictions,
+ ProfileStoreInstructions,
+ ProfileFpInstructions,
+ ProfileIntegerInstructions,
+ Profile2Issue,
+ Profile3Issue,
+ Profile4Issue,
+ ProfileSpecialInstructions,
+ ProfileTotalCycles,
+ ProfileIcacheIssues,
+ ProfileDcacheAccesses,
+ ProfileMemoryBarrierCycles,
+ ProfileLoadLinkedIssues,
+ ProfileMaximum
+} KPROFILE_SOURCE;
+
+typedef enum _CREATE_FILE_TYPE {
+ CreateFileTypeNone,
+ CreateFileTypeNamedPipe,
+ CreateFileTypeMailslot
+} CREATE_FILE_TYPE;
+
+typedef struct _CONFIGURATION_INFORMATION {
+ ULONG DiskCount;
+ ULONG FloppyCount;
+ ULONG CdRomCount;
+ ULONG TapeCount;
+ ULONG ScsiPortCount;
+ ULONG SerialCount;
+ ULONG ParallelCount;
+ BOOLEAN AtDiskPrimaryAddressClaimed;
+ BOOLEAN AtDiskSecondaryAddressClaimed;
+ ULONG Version;
+ ULONG MediumChangerCount;
+} CONFIGURATION_INFORMATION, *PCONFIGURATION_INFORMATION;
+
+typedef enum _CONFIGURATION_TYPE {
+ ArcSystem,
+ CentralProcessor,
+ FloatingPointProcessor,
+ PrimaryIcache,
+ PrimaryDcache,
+ SecondaryIcache,
+ SecondaryDcache,
+ SecondaryCache,
+ EisaAdapter,
+ TcAdapter,
+ ScsiAdapter,
+ DtiAdapter,
+ MultiFunctionAdapter,
+ DiskController,
+ TapeController,
+ CdromController,
+ WormController,
+ SerialController,
+ NetworkController,
+ DisplayController,
+ ParallelController,
+ PointerController,
+ KeyboardController,
+ AudioController,
+ OtherController,
+ DiskPeripheral,
+ FloppyDiskPeripheral,
+ TapePeripheral,
+ ModemPeripheral,
+ MonitorPeripheral,
+ PrinterPeripheral,
+ PointerPeripheral,
+ KeyboardPeripheral,
+ TerminalPeripheral,
+ OtherPeripheral,
+ LinePeripheral,
+ NetworkPeripheral,
+ SystemMemory,
+ DockingInformation,
+ RealModeIrqRoutingTable,
+ MaximumType
+} CONFIGURATION_TYPE, *PCONFIGURATION_TYPE;
+
+typedef NTSTATUS (*PIO_QUERY_DEVICE_ROUTINE)(
+ /*IN*/ PVOID Context,
+ /*IN*/ PUNICODE_STRING PathName,
+ /*IN*/ INTERFACE_TYPE BusType,
+ /*IN*/ ULONG BusNumber,
+ /*IN*/ PKEY_VALUE_FULL_INFORMATION *BusInformation,
+ /*IN*/ CONFIGURATION_TYPE ControllerType,
+ /*IN*/ ULONG ControllerNumber,
+ /*IN*/ PKEY_VALUE_FULL_INFORMATION *ControllerInformation,
+ /*IN*/ CONFIGURATION_TYPE PeripheralType,
+ /*IN*/ ULONG PeripheralNumber,
+ /*IN*/ PKEY_VALUE_FULL_INFORMATION *PeripheralInformation);
+
+typedef enum _WORK_QUEUE_TYPE {
+ CriticalWorkQueue,
+ DelayedWorkQueue,
+ HyperCriticalWorkQueue,
+ MaximumWorkQueue
+} WORK_QUEUE_TYPE;
+
+typedef VOID DDKAPI
+(*PWORKER_THREAD_ROUTINE)(
+ /*IN*/ PVOID Parameter);
+
+typedef struct _WORK_QUEUE_ITEM {
+ LIST_ENTRY List;
+ PWORKER_THREAD_ROUTINE WorkerRoutine;
+ PVOID Parameter;
+} WORK_QUEUE_ITEM, *PWORK_QUEUE_ITEM;
+
+typedef enum _KBUGCHECK_BUFFER_DUMP_STATE {
+ BufferEmpty,
+ BufferInserted,
+ BufferStarted,
+ BufferFinished,
+ BufferIncomplete
+} KBUGCHECK_BUFFER_DUMP_STATE;
+
+typedef VOID DDKAPI
+(*PKBUGCHECK_CALLBACK_ROUTINE)(
+ /*IN*/ PVOID Buffer,
+ /*IN*/ ULONG Length);
+
+typedef struct _KBUGCHECK_CALLBACK_RECORD {
+ LIST_ENTRY Entry;
+ PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine;
+ PVOID Buffer;
+ ULONG Length;
+ PUCHAR Component;
+ ULONG_PTR Checksum;
+ UCHAR State;
+} KBUGCHECK_CALLBACK_RECORD, *PKBUGCHECK_CALLBACK_RECORD;
+
+/*
+ * VOID
+ * KeInitializeCallbackRecord(
+ * IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord)
+ */
+#define KeInitializeCallbackRecord(CallbackRecord) \
+ CallbackRecord->State = BufferEmpty;
+
+typedef enum _KDPC_IMPORTANCE {
+ LowImportance,
+ MediumImportance,
+ HighImportance
+} KDPC_IMPORTANCE;
+
+typedef enum _MEMORY_CACHING_TYPE_ORIG {
+ MmFrameBufferCached = 2
+} MEMORY_CACHING_TYPE_ORIG;
+
+typedef enum _MEMORY_CACHING_TYPE {
+ MmNonCached = FALSE,
+ MmCached = TRUE,
+ MmWriteCombined = MmFrameBufferCached,
+ MmHardwareCoherentCached,
+ MmNonCachedUnordered,
+ MmUSWCCached,
+ MmMaximumCacheType
+} MEMORY_CACHING_TYPE;
+
+typedef enum _MM_PAGE_PRIORITY {
+ LowPagePriority,
+ NormalPagePriority = 16,
+ HighPagePriority = 32
+} MM_PAGE_PRIORITY;
+
+typedef enum _LOCK_OPERATION {
+ IoReadAccess,
+ IoWriteAccess,
+ IoModifyAccess
+} LOCK_OPERATION;
+
+typedef enum _MM_SYSTEM_SIZE {
+ MmSmallSystem,
+ MmMediumSystem,
+ MmLargeSystem
+} MM_SYSTEM_SIZE;
+
+typedef struct _OBJECT_HANDLE_INFORMATION {
+ ULONG HandleAttributes;
+ ACCESS_MASK GrantedAccess;
+} OBJECT_HANDLE_INFORMATION, *POBJECT_HANDLE_INFORMATION;
+
+typedef struct _CLIENT_ID {
+ HANDLE UniqueProcess;
+ HANDLE UniqueThread;
+} CLIENT_ID, *PCLIENT_ID;
+
+typedef VOID DDKAPI
+(*PKSTART_ROUTINE)(
+ /*IN*/ PVOID StartContext);
+
+typedef VOID DDKAPI
+(*PCREATE_PROCESS_NOTIFY_ROUTINE)(
+ /*IN*/ HANDLE ParentId,
+ /*IN*/ HANDLE ProcessId,
+ /*IN*/ BOOLEAN Create);
+
+typedef VOID DDKAPI
+(*PCREATE_THREAD_NOTIFY_ROUTINE)(
+ /*IN*/ HANDLE ProcessId,
+ /*IN*/ HANDLE ThreadId,
+ /*IN*/ BOOLEAN Create);
+
+typedef struct _IMAGE_INFO {
+ _ANONYMOUS_UNION union {
+ ULONG Properties;
+ _ANONYMOUS_STRUCT struct {
+ ULONG ImageAddressingMode : 8;
+ ULONG SystemModeImage : 1;
+ ULONG ImageMappedToAllPids : 1;
+ ULONG Reserved : 22;
+ } DUMMYSTRUCTNAME;
+ } DUMMYUNIONNAME;
+ PVOID ImageBase;
+ ULONG ImageSelector;
+ SIZE_T ImageSize;
+ ULONG ImageSectionNumber;
+} IMAGE_INFO, *PIMAGE_INFO;
+
+#define IMAGE_ADDRESSING_MODE_32BIT 3
+
+typedef VOID DDKAPI
+(*PLOAD_IMAGE_NOTIFY_ROUTINE)(
+ /*IN*/ PUNICODE_STRING FullImageName,
+ /*IN*/ HANDLE ProcessId,
+ /*IN*/ PIMAGE_INFO ImageInfo);
+
+typedef enum _PROCESSINFOCLASS {
+ ProcessBasicInformation,
+ ProcessQuotaLimits,
+ ProcessIoCounters,
+ ProcessVmCounters,
+ ProcessTimes,
+ ProcessBasePriority,
+ ProcessRaisePriority,
+ ProcessDebugPort,
+ ProcessExceptionPort,
+ ProcessAccessToken,
+ ProcessLdtInformation,
+ ProcessLdtSize,
+ ProcessDefaultHardErrorMode,
+ ProcessIoPortHandlers,
+ ProcessPooledUsageAndLimits,
+ ProcessWorkingSetWatch,
+ ProcessUserModeIOPL,
+ ProcessEnableAlignmentFaultFixup,
+ ProcessPriorityClass,
+ ProcessWx86Information,
+ ProcessHandleCount,
+ ProcessAffinityMask,
+ ProcessPriorityBoost,
+ ProcessDeviceMap,
+ ProcessSessionInformation,
+ ProcessForegroundInformation,
+ ProcessWow64Information,
+ ProcessImageFileName,
+ ProcessLUIDDeviceMapsEnabled,
+ ProcessBreakOnTermination,
+ ProcessDebugObjectHandle,
+ ProcessDebugFlags,
+ ProcessHandleTracing,
+ MaxProcessInfoClass
+} PROCESSINFOCLASS;
+
+typedef enum _THREADINFOCLASS {
+ ThreadBasicInformation,
+ ThreadTimes,
+ ThreadPriority,
+ ThreadBasePriority,
+ ThreadAffinityMask,
+ ThreadImpersonationToken,
+ ThreadDescriptorTableEntry,
+ ThreadEnableAlignmentFaultFixup,
+ ThreadEventPair_Reusable,
+ ThreadQuerySetWin32StartAddress,
+ ThreadZeroTlsCell,
+ ThreadPerformanceCount,
+ ThreadAmILastThread,
+ ThreadIdealProcessor,
+ ThreadPriorityBoost,
+ ThreadSetTlsArrayAddress,
+ ThreadIsIoPending,
+ ThreadHideFromDebugger,
+ ThreadBreakOnTermination,
+ MaxThreadInfoClass
+} THREADINFOCLASS;
+
+#define ES_SYSTEM_REQUIRED 0x00000001
+#define ES_DISPLAY_REQUIRED 0x00000002
+#define ES_USER_PRESENT 0x00000004
+#define ES_CONTINUOUS 0x80000000
+
+typedef ULONG EXECUTION_STATE;
+
+typedef VOID DDKAPI
+(*PREQUEST_POWER_COMPLETE)(
+ /*IN*/ PDEVICE_OBJECT DeviceObject,
+ /*IN*/ UCHAR MinorFunction,
+ /*IN*/ POWER_STATE PowerState,
+ /*IN*/ PVOID Context,
+ /*IN*/ PIO_STATUS_BLOCK IoStatus);
+
+typedef enum _TRACE_INFORMATION_CLASS {
+ TraceIdClass,
+ TraceHandleClass,
+ TraceEnableFlagsClass,
+ TraceEnableLevelClass,
+ GlobalLoggerHandleClass,
+ EventLoggerHandleClass,
+ AllLoggerHandlesClass,
+ TraceHandleByNameClass
+} TRACE_INFORMATION_CLASS;
+
+typedef NTSTATUS DDKAPI
+(*PEX_CALLBACK_FUNCTION)(
+ /*IN*/ PVOID CallbackContext,
+ /*IN*/ PVOID Argument1,
+ /*IN*/ PVOID Argument2);
+
+
+
+/*
+** Storage structures
+*/
+typedef enum _PARTITION_STYLE {
+ PARTITION_STYLE_MBR,
+ PARTITION_STYLE_GPT
+} PARTITION_STYLE;
+
+typedef struct _CREATE_DISK_MBR {
+ ULONG Signature;
+} CREATE_DISK_MBR, *PCREATE_DISK_MBR;
+
+typedef struct _CREATE_DISK_GPT {
+ GUID DiskId;
+ ULONG MaxPartitionCount;
+} CREATE_DISK_GPT, *PCREATE_DISK_GPT;
+
+typedef struct _CREATE_DISK {
+ PARTITION_STYLE PartitionStyle;
+ _ANONYMOUS_UNION union {
+ CREATE_DISK_MBR Mbr;
+ CREATE_DISK_GPT Gpt;
+ } DUMMYUNIONNAME;
+} CREATE_DISK, *PCREATE_DISK;
+
+typedef struct _DISK_SIGNATURE {
+ ULONG PartitionStyle;
+ _ANONYMOUS_UNION union {
+ struct {
+ ULONG Signature;
+ ULONG CheckSum;
+ } Mbr;
+ struct {
+ GUID DiskId;
+ } Gpt;
+ } DUMMYUNIONNAME;
+} DISK_SIGNATURE, *PDISK_SIGNATURE;
+
+typedef VOID DDKFASTAPI
+(*PTIME_UPDATE_NOTIFY_ROUTINE)(
+ /*IN*/ HANDLE ThreadId,
+ /*IN*/ KPROCESSOR_MODE Mode);
+
+#define DBG_STATUS_CONTROL_C 1
+#define DBG_STATUS_SYSRQ 2
+#define DBG_STATUS_BUGCHECK_FIRST 3
+#define DBG_STATUS_BUGCHECK_SECOND 4
+#define DBG_STATUS_FATAL 5
+#define DBG_STATUS_DEBUG_CONTROL 6
+#define DBG_STATUS_WORKER 7
+
+typedef struct _PHYSICAL_MEMORY_RANGE {
+ PHYSICAL_ADDRESS BaseAddress;
+ LARGE_INTEGER NumberOfBytes;
+} PHYSICAL_MEMORY_RANGE, *PPHYSICAL_MEMORY_RANGE;
+
+typedef ULONG_PTR
+(*PDRIVER_VERIFIER_THUNK_ROUTINE)(
+ /*IN*/ PVOID Context);
+
+typedef struct _DRIVER_VERIFIER_THUNK_PAIRS {
+ PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine;
+ PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine;
+} DRIVER_VERIFIER_THUNK_PAIRS, *PDRIVER_VERIFIER_THUNK_PAIRS;
+
+#define DRIVER_VERIFIER_SPECIAL_POOLING 0x0001
+#define DRIVER_VERIFIER_FORCE_IRQL_CHECKING 0x0002
+#define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES 0x0004
+#define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS 0x0008
+#define DRIVER_VERIFIER_IO_CHECKING 0x0010
+
+#define RTL_RANGE_LIST_ADD_IF_CONFLICT 0x00000001
+#define RTL_RANGE_LIST_ADD_SHARED 0x00000002
+
+#define RTL_RANGE_LIST_SHARED_OK 0x00000001
+#define RTL_RANGE_LIST_NULL_CONFLICT_OK 0x00000002
+
+#define RTL_RANGE_LIST_SHARED_OK 0x00000001
+#define RTL_RANGE_LIST_NULL_CONFLICT_OK 0x00000002
+
+#define RTL_RANGE_LIST_MERGE_IF_CONFLICT RTL_RANGE_LIST_ADD_IF_CONFLICT
+
+typedef struct _RTL_RANGE {
+ ULONGLONG Start;
+ ULONGLONG End;
+ PVOID UserData;
+ PVOID Owner;
+ UCHAR Attributes;
+ UCHAR Flags;
+} RTL_RANGE, *PRTL_RANGE;
+
+#define RTL_RANGE_SHARED 0x01
+#define RTL_RANGE_CONFLICT 0x02
+
+typedef struct _RTL_RANGE_LIST {
+ LIST_ENTRY ListHead;
+ ULONG Flags;
+ ULONG Count;
+ ULONG Stamp;
+} RTL_RANGE_LIST, *PRTL_RANGE_LIST;
+
+typedef struct _RANGE_LIST_ITERATOR {
+ PLIST_ENTRY RangeListHead;
+ PLIST_ENTRY MergedHead;
+ PVOID Current;
+ ULONG Stamp;
+} RTL_RANGE_LIST_ITERATOR, *PRTL_RANGE_LIST_ITERATOR;
+
+typedef BOOLEAN
+(*PRTL_CONFLICT_RANGE_CALLBACK)(
+ /*IN*/ PVOID Context,
+ /*IN*/ PRTL_RANGE Range);
+
+#define HASH_STRING_ALGORITHM_DEFAULT 0
+#define HASH_STRING_ALGORITHM_X65599 1
+#define HASH_STRING_ALGORITHM_INVALID 0xffffffff
+
+typedef enum _SUITE_TYPE {
+ SmallBusiness,
+ Enterprise,
+ BackOffice,
+ CommunicationServer,
+ TerminalServer,
+ SmallBusinessRestricted,
+ EmbeddedNT,
+ DataCenter,
+ SingleUserTS,
+ Personal,
+ Blade,
+ MaxSuiteType
+} SUITE_TYPE;
+
+typedef VOID DDKAPI
+(*PTIMER_APC_ROUTINE)(
+ /*IN*/ PVOID TimerContext,
+ /*IN*/ ULONG TimerLowValue,
+ /*IN*/ LONG TimerHighValue);
+
+
+
+/*
+** WMI structures
+*/
+
+typedef VOID DDKAPI
+(*WMI_NOTIFICATION_CALLBACK)(
+ PVOID Wnode,
+ PVOID Context);
+
+
+/*
+** Architecture specific structures
+*/
+
+#ifdef _X86_
+
+typedef ULONG PFN_NUMBER, *PPFN_NUMBER;
+
+#define PASSIVE_LEVEL 0
+#define LOW_LEVEL 0
+#define APC_LEVEL 1
+#define DISPATCH_LEVEL 2
+#define SYNCH_LEVEL 27
+#define PROFILE_LEVEL 27
+#define CLOCK1_LEVEL 28
+#define CLOCK2_LEVEL 28
+#define IPI_LEVEL 29
+#define POWER_LEVEL 30
+#define HIGH_LEVEL 31
+
+typedef struct _KPCR_TIB {
+ PVOID ExceptionList; /* 00 */
+ PVOID StackBase; /* 04 */
+ PVOID StackLimit; /* 08 */
+ PVOID SubSystemTib; /* 0C */
+ _ANONYMOUS_UNION union {
+ PVOID FiberData; /* 10 */
+ DWORD Version; /* 10 */
+ } DUMMYUNIONNAME;
+ PVOID ArbitraryUserPointer; /* 14 */
+ struct _NT_TIB *Self; /* 18 */
+} KPCR_TIB, *PKPCR_TIB; /* 1C */
+
+#define PCR_MINOR_VERSION 1
+#define PCR_MAJOR_VERSION 1
+
+typedef struct _KPCR {
+ KPCR_TIB Tib; /* 00 */
+ struct _KPCR *Self; /* 1C */
+ struct _KPRCB *PCRCB; /* 20 */
+ KIRQL Irql; /* 24 */
+ ULONG IRR; /* 28 */
+ ULONG IrrActive; /* 2C */
+ ULONG IDR; /* 30 */
+ PVOID KdVersionBlock; /* 34 */
+ PUSHORT IDT; /* 38 */
+ PUSHORT GDT; /* 3C */
+ struct _KTSS *TSS; /* 40 */
+ USHORT MajorVersion; /* 44 */
+ USHORT MinorVersion; /* 46 */
+ KAFFINITY SetMember; /* 48 */
+ ULONG StallScaleFactor; /* 4C */
+ UCHAR SpareUnused; /* 50 */
+ UCHAR Number; /* 51 */
+} KPCR, *PKPCR; /* 54 */
+
+typedef struct _KFLOATING_SAVE {
+ ULONG ControlWord;
+ ULONG StatusWord;
+ ULONG ErrorOffset;
+ ULONG ErrorSelector;
+ ULONG DataOffset;
+ ULONG DataSelector;
+ ULONG Cr0NpxState;
+ ULONG Spare1;
+} KFLOATING_SAVE, *PKFLOATING_SAVE;
+
+#define PAGE_SIZE 0x1000
+#define PAGE_SHIFT 12L
+
+extern NTOSAPI PVOID *MmHighestUserAddress;
+extern NTOSAPI PVOID *MmSystemRangeStart;
+extern NTOSAPI ULONG *MmUserProbeAddress;
+
+#define MM_HIGHEST_USER_ADDRESS *MmHighestUserAddress
+#define MM_SYSTEM_RANGE_START *MmSystemRangeStart
+#define MM_USER_PROBE_ADDRESS *MmUserProbeAddress
+#define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
+#define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0C00000
+
+#define KI_USER_SHARED_DATA 0xffdf0000
+#define SharedUserData ((KUSER_SHARED_DATA * CONST) KI_USER_SHARED_DATA)
+
+#define EFLAG_SIGN 0x8000
+#define EFLAG_ZERO 0x4000
+#define EFLAG_SELECT (EFLAG_SIGN | EFLAG_ZERO)
+
+#define RESULT_NEGATIVE ((EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
+#define RESULT_ZERO ((~EFLAG_SIGN & EFLAG_ZERO) & EFLAG_SELECT)
+#define RESULT_POSITIVE ((~EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
+
+typedef enum _INTERLOCKED_RESULT {
+ ResultNegative = RESULT_NEGATIVE,
+ ResultZero = RESULT_ZERO,
+ ResultPositive = RESULT_POSITIVE
+} INTERLOCKED_RESULT;
+
+NTOSAPI
+KIRQL
+DDKAPI
+KeGetCurrentIrql(
+ VOID);
+
+/*
+ * ULONG
+ * KeGetCurrentProcessorNumber(
+ * VOID)
+ */
+#define KeGetCurrentProcessorNumber() \
+ ((ULONG)KeGetCurrentKPCR()->Number)
+
+
+#if __USE_NTOSKRNL__
+/* CAREFUL: These are exported from ntoskrnl.exe as __fastcall functions,
+ but are also exported from kernel32.dll and declared in winbase.h as
+ __stdcall */
+#if !defined(__INTERLOCKED_DECLARED)
+#define __INTERLOCKED_DECLARED
+
+NTOSAPI
+LONG
+DDKFASTAPI
+InterlockedIncrement(
+ /*IN*/ LONG VOLATILE *Addend);
+
+NTOSAPI
+LONG
+DDKFASTAPI
+InterlockedDecrement(
+ /*IN*/ LONG VOLATILE *Addend);
+
+NTOSAPI
+LONG
+DDKFASTAPI
+InterlockedCompareExchange(
+ /*IN OUT*/ PLONG VOLATILE Destination,
+ /*IN*/ LONG Exchange,
+ /*IN*/ LONG Comparand);
+
+NTOSAPI
+LONG
+DDKFASTAPI
+InterlockedExchange(
+ /*IN OUT*/ PLONG VOLATILE Target,
+ /*IN*/ LONG Value);
+
+NTOSAPI
+LONG
+DDKFASTAPI
+InterlockedExchangeAdd(
+ /*IN OUT*/ PLONG VOLATILE Addend,
+ /*IN*/ LONG Value);
+
+/*
+ * PVOID
+ * InterlockedExchangePointer(
+ * IN OUT PVOID VOLATILE *Target,
+ * IN PVOID Value)
+ */
+#define InterlockedExchangePointer(Target, Value) \
+ ((PVOID) InterlockedExchange((PLONG) Target, (LONG) Value))
+
+/*
+ * PVOID
+ * InterlockedCompareExchangePointer(
+ * IN OUT PVOID *Destination,
+ * IN PVOID Exchange,
+ * IN PVOID Comparand)
+ */
+#define InterlockedCompareExchangePointer(Destination, Exchange, Comparand) \
+ ((PVOID) InterlockedCompareExchange((PLONG) Destination, (LONG) Exchange, (LONG) Comparand))
+
+#if (_WIN32_WINNT >= 0x0501)
+PSLIST_ENTRY
+DDKFASTAPI
+InterlockedPopEntrySList(
+ /*IN*/ PSLIST_HEADER ListHead);
+
+NTOSAPI
+PSLIST_ENTRY
+DDKFASTAPI
+InterlockedPushEntrySList(
+ /*IN*/ PSLIST_HEADER ListHead,
+ /*IN*/ PSLIST_ENTRY ListEntry);
+#endif /* _WIN32_WINNT >= 0x0501 */
+
+#endif /* !__INTERLOCKED_DECLARED */
+#endif /* __USE_NTOSKRNL__ */
+
+NTOSAPI
+VOID
+DDKFASTAPI
+KefAcquireSpinLockAtDpcLevel(
+ /*IN*/ PKSPIN_LOCK SpinLock);
+
+NTOSAPI
+VOID
+DDKFASTAPI
+KefReleaseSpinLockFromDpcLevel(
+ /*IN*/ PKSPIN_LOCK SpinLock);
+
+#define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock)
+#define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock)
+
+#define RtlCopyMemoryNonTemporal RtlCopyMemory
+
+#define KeGetDcacheFillSize() 1L
+
+#endif /* _X86_ */
+
+
+
+/*
+** Utillity functions
+*/
+
+#define ARGUMENT_PRESENT(ArgumentPointer) \
+ ((BOOLEAN) ((PVOID)ArgumentPointer != (PVOID)NULL))
+
+/*
+ * ULONG
+ * BYTE_OFFSET(
+ * IN PVOID Va)
+ */
+#define BYTE_OFFSET(Va) \
+ ((ULONG) ((ULONG_PTR) (Va) & (PAGE_SIZE - 1)))
+
+/*
+ * ULONG
+ * BYTES_TO_PAGES(
+ * IN ULONG Size)
+ */
+#define BYTES_TO_PAGES(Size) \
+ ((ULONG) ((ULONG_PTR) (Size) >> PAGE_SHIFT) + (((ULONG) (Size) & (PAGE_SIZE - 1)) != 0))
+
+/*
+ * PCHAR
+ * CONTAINING_RECORD(
+ * IN PCHAR Address,
+ * IN TYPE Type,
+ * IN PCHAR Field);
+ */
+#ifndef CONTAINING_RECORD
+#define CONTAINING_RECORD(Address, Type, Field) \
+ ((Type *) (((ULONG_PTR) Address) - FIELD_OFFSET(Type, Field)))
+#endif
+
+/* LONG
+ * FIELD_OFFSET(
+ * IN TYPE Type,
+ * IN PCHAR Field);
+ */
+#ifndef FIELD_OFFSET
+#define FIELD_OFFSET(Type, Field) \
+ ((LONG) (&(((Type *) 0)->Field)))
+#endif
+
+/*
+ * PVOID
+ * PAGE_ALIGN(
+ * IN PVOID Va)
+ */
+#define PAGE_ALIGN(Va) \
+ ((PVOID) ((ULONG_PTR)(Va) & ~(PAGE_SIZE - 1)))
+
+/*
+ * ULONG_PTR
+ * ROUND_TO_PAGES(
+ * IN ULONG_PTR Size)
+ */
+#define ROUND_TO_PAGES(Size) \
+ ((ULONG_PTR) (((ULONG_PTR) Size + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1)))
+
+NTOSAPI
+VOID
+DDKAPI
+RtlAssert(
+ /*IN*/ PVOID FailedAssertion,
+ /*IN*/ PVOID FileName,
+ /*IN*/ ULONG LineNumber,
+ /*IN*/ PCHAR Message);
+
+#ifdef DBG
+
+#define ASSERT(exp) \
+ ((!(exp)) ? \
+ (RtlAssert( #exp, __FILE__, __LINE__, NULL ), FALSE) : TRUE)
+
+#define ASSERTMSG(msg, exp) \
+ ((!(exp)) ? \
+ (RtlAssert( #exp, __FILE__, __LINE__, msg ), FALSE) : TRUE)
+
+#define RTL_SOFT_ASSERT(exp) \
+ ((!(_exp)) ? \
+ (DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n", __FILE__, __LINE__, #exp), FALSE) : TRUE)
+
+#define RTL_SOFT_ASSERTMSG(msg, exp) \
+ ((!(exp)) ? \
+ (DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n Message: %s\n", __FILE__, __LINE__, #exp, (msg)), FALSE) : TRUE)
+
+#define RTL_VERIFY(exp) ASSERT(exp)
+#define RTL_VERIFYMSG(msg, exp) ASSERT(msg, exp)
+
+#define RTL_SOFT_VERIFY(exp) RTL_SOFT_ASSERT(exp)
+#define RTL_SOFT_VERIFYMSG(msg, exp) RTL_SOFT_ASSERTMSG(msg, exp)
+
+#else /* !DBG */
+
+#define ASSERT(exp) ((VOID) 0)
+#define ASSERTMSG(msg, exp) ((VOID) 0)
+
+#define RTL_SOFT_ASSERT(exp) ((VOID) 0)
+#define RTL_SOFT_ASSERTMSG(msg, exp) ((VOID) 0)
+
+#define RTL_VERIFY(exp) ((exp) ? TRUE : FALSE)
+#define RTL_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE)
+
+#define RTL_SOFT_VERIFY(exp) ((exp) ? TRUE : FALSE)
+#define RTL_SOFT_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE)
+
+#endif /* DBG */
+
+
+/*
+** Driver support routines
+*/
+
+/** Runtime library routines **/
+
+/*
+ * VOID
+ * InitializeListHead(
+ * IN PLIST_ENTRY ListHead)
+ */
+#define InitializeListHead(_ListHead) \
+{ \
+ (_ListHead)->Flink = (_ListHead); \
+ (_ListHead)->Blink = (_ListHead); \
+}
+
+/*
+ * VOID
+ * InsertHeadList(
+ * IN PLIST_ENTRY ListHead,
+ * IN PLIST_ENTRY Entry)
+ */
+#define InsertHeadList(_ListHead, \
+ _Entry) \
+{ \
+ PLIST_ENTRY _OldFlink; \
+ _OldFlink = (_ListHead)->Flink; \
+ (_Entry)->Flink = _OldFlink; \
+ (_Entry)->Blink = (_ListHead); \
+ _OldFlink->Blink = (_Entry); \
+ (_ListHead)->Flink = (_Entry); \
+}
+
+/*
+ * VOID
+ * InsertTailList(
+ * IN PLIST_ENTRY ListHead,
+ * IN PLIST_ENTRY Entry)
+ */
+#define InsertTailList(_ListHead, \
+ _Entry) \
+{ \
+ PLIST_ENTRY _OldBlink; \
+ _OldBlink = (_ListHead)->Blink; \
+ (_Entry)->Flink = (_ListHead); \
+ (_Entry)->Blink = _OldBlink; \
+ _OldBlink->Flink = (_Entry); \
+ (_ListHead)->Blink = (_Entry); \
+}
+
+/*
+ * BOOLEAN
+ * IsListEmpty(
+ * IN PLIST_ENTRY ListHead)
+ */
+#define IsListEmpty(_ListHead) \
+ ((_ListHead)->Flink == (_ListHead))
+
+static __inline PSINGLE_LIST_ENTRY
+PopEntryList(
+ /*IN*/ PSINGLE_LIST_ENTRY ListHead)
+{
+ PSINGLE_LIST_ENTRY Entry;
+
+ Entry = ListHead->Next;
+ if (Entry != NULL)
+ {
+ ListHead->Next = Entry->Next;
+ }
+ return Entry;
+}
+
+/*
+ * VOID
+ * PushEntryList(
+ * IN PSINGLE_LIST_ENTRY ListHead,
+ * IN PSINGLE_LIST_ENTRY Entry)
+ */
+#define PushEntryList(_ListHead, \
+ _Entry) \
+{ \
+ (_Entry)->Next = (_ListHead)->Next; \
+ (_ListHead)->Next = (_Entry); \
+}
+
+/*
+ * VOID
+ * RemoveEntryList(
+ * IN PLIST_ENTRY Entry)
+ */
+#define RemoveEntryList(_Entry) \
+{ \
+ PLIST_ENTRY _OldFlink; \
+ PLIST_ENTRY _OldBlink; \
+ _OldFlink = (_Entry)->Flink; \
+ _OldBlink = (_Entry)->Blink; \
+ _OldFlink->Blink = _OldBlink; \
+ _OldBlink->Flink = _OldFlink; \
+ (_Entry)->Flink = NULL; \
+ (_Entry)->Blink = NULL; \
+}
+
+static __inline PLIST_ENTRY
+RemoveHeadList(
+ /*IN*/ PLIST_ENTRY ListHead)
+{
+ PLIST_ENTRY OldFlink;
+ PLIST_ENTRY OldBlink;
+ PLIST_ENTRY Entry;
+
+ Entry = ListHead->Flink;
+ OldFlink = ListHead->Flink->Flink;
+ OldBlink = ListHead->Flink->Blink;
+ OldFlink->Blink = OldBlink;
+ OldBlink->Flink = OldFlink;
+
+ if (Entry != ListHead)
+ {
+ Entry->Flink = NULL;
+ Entry->Blink = NULL;
+ }
+
+ return Entry;
+}
+
+static __inline PLIST_ENTRY
+RemoveTailList(
+ /*IN*/ PLIST_ENTRY ListHead)
+{
+ PLIST_ENTRY OldFlink;
+ PLIST_ENTRY OldBlink;
+ PLIST_ENTRY Entry;
+
+ Entry = ListHead->Blink;
+ OldFlink = ListHead->Blink->Flink;
+ OldBlink = ListHead->Blink->Blink;
+ OldFlink->Blink = OldBlink;
+ OldBlink->Flink = OldFlink;
+
+ if (Entry != ListHead)
+ {
+ Entry->Flink = NULL;
+ Entry->Blink = NULL;
+ }
+
+ return Entry;
+}
+
+/*
+ * USHORT
+ * QueryDepthSList(
+ * IN PSLIST_HEADER SListHead)
+ */
+#define QueryDepthSList(_SListHead) \
+ ((USHORT) ((_SListHead)->Alignment & 0xffff))
+
+#define InterlockedFlushSList(ListHead) ExInterlockedFlushSList(ListHead)
+
+NTOSAPI
+ULONG
+DDKAPI
+RtlAnsiStringToUnicodeSize(
+ /*IN*/ PANSI_STRING AnsiString);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+RtlAddRange(
+ /*IN OUT*/ PRTL_RANGE_LIST RangeList,
+ /*IN*/ ULONGLONG Start,
+ /*IN*/ ULONGLONG End,
+ /*IN*/ UCHAR Attributes,
+ /*IN*/ ULONG Flags,
+ /*IN*/ PVOID UserData /*OPTIONAL*/,
+ /*IN*/ PVOID Owner /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+RtlAnsiStringToUnicodeString(
+ /*IN OUT*/ PUNICODE_STRING DestinationString,
+ /*IN*/ PANSI_STRING SourceString,
+ /*IN*/ BOOLEAN AllocateDestinationString);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+RtlAppendUnicodeStringToString(
+ /*IN OUT*/ PUNICODE_STRING Destination,
+ /*IN*/ PUNICODE_STRING Source);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+RtlAppendUnicodeToString(
+ /*IN OUT*/ PUNICODE_STRING Destination,
+ /*IN*/ PCWSTR Source);
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+RtlAreBitsClear(
+ /*IN*/ PRTL_BITMAP BitMapHeader,
+ /*IN*/ ULONG StartingIndex,
+ /*IN*/ ULONG Length);
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+RtlAreBitsSet(
+ /*IN*/ PRTL_BITMAP BitMapHeader,
+ /*IN*/ ULONG StartingIndex,
+ /*IN*/ ULONG Length);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+RtlCharToInteger(
+ /*IN*/ PCSZ String,
+ /*IN*/ ULONG Base /*OPTIONAL*/,
+ /*IN OUT*/ PULONG Value);
+
+NTOSAPI
+ULONG
+DDKAPI
+RtlCheckBit(
+ /*IN*/ PRTL_BITMAP BitMapHeader,
+ /*IN*/ ULONG BitPosition);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+RtlCheckRegistryKey(
+ /*IN*/ ULONG RelativeTo,
+ /*IN*/ PWSTR Path);
+
+NTOSAPI
+VOID
+DDKAPI
+RtlClearAllBits(
+ /*IN*/ PRTL_BITMAP BitMapHeader);
+
+NTOSAPI
+VOID
+DDKAPI
+RtlClearBit(
+ PRTL_BITMAP BitMapHeader,
+ ULONG BitNumber);
+
+NTOSAPI
+VOID
+DDKAPI
+RtlClearBits(
+ /*IN*/ PRTL_BITMAP BitMapHeader,
+ /*IN*/ ULONG StartingIndex,
+ /*IN*/ ULONG NumberToClear);
+
+NTOSAPI
+SIZE_T
+DDKAPI
+RtlCompareMemory(
+ /*IN*/ CONST VOID *Source1,
+ /*IN*/ CONST VOID *Source2,
+ /*IN*/ SIZE_T Length);
+
+NTOSAPI
+LONG
+DDKAPI
+RtlCompareString(
+ /*IN*/ PSTRING String1,
+ /*IN*/ PSTRING String2,
+ BOOLEAN CaseInSensitive);
+
+NTOSAPI
+LONG
+DDKAPI
+RtlCompareUnicodeString(
+ /*IN*/ PUNICODE_STRING String1,
+ /*IN*/ PUNICODE_STRING String2,
+ /*IN*/ BOOLEAN CaseInSensitive);
+
+NTOSAPI
+LARGE_INTEGER
+DDKAPI
+RtlConvertLongToLargeInteger(
+ /*IN*/ LONG SignedInteger);
+
+NTOSAPI
+LUID
+DDKAPI
+RtlConvertLongToLuid(
+ /*IN*/ LONG Long);
+
+NTOSAPI
+LARGE_INTEGER
+DDKAPI
+RtlConvertUlongToLargeInteger(
+ /*IN*/ ULONG UnsignedInteger);
+
+NTOSAPI
+LUID
+DDKAPI
+RtlConvertUlongToLuid(
+ ULONG Ulong);
+
+/*
+ * VOID
+ * RtlCopyMemory(
+ * IN VOID UNALIGNED *Destination,
+ * IN CONST VOID UNALIGNED *Source,
+ * IN SIZE_T Length)
+ */
+#ifndef RtlCopyMemory
+#define RtlCopyMemory(Destination, Source, Length) \
+ memcpy(Destination, Source, Length);
+#endif
+
+#ifndef RtlCopyBytes
+#define RtlCopyBytes RtlCopyMemory
+#endif
+
+NTOSAPI
+VOID
+DDKAPI
+RtlCopyMemory32(
+ /*IN*/ VOID UNALIGNED *Destination,
+ /*IN*/ CONST VOID UNALIGNED *Source,
+ /*IN*/ ULONG Length);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+RtlCopyRangeList(
+ /*OUT*/ PRTL_RANGE_LIST CopyRangeList,
+ /*IN*/ PRTL_RANGE_LIST RangeList);
+
+NTOSAPI
+VOID
+DDKAPI
+RtlCopyString(
+ /*IN OUT*/ PSTRING DestinationString,
+ /*IN*/ PSTRING SourceString /*OPTIONAL*/);
+
+NTOSAPI
+VOID
+DDKAPI
+RtlCopyUnicodeString(
+ /*IN OUT*/ PUNICODE_STRING DestinationString,
+ /*IN*/ PUNICODE_STRING SourceString);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+RtlCreateRegistryKey(
+ /*IN*/ ULONG RelativeTo,
+ /*IN*/ PWSTR Path);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+RtlCreateSecurityDescriptor(
+ /*IN OUT*/ PSECURITY_DESCRIPTOR SecurityDescriptor,
+ /*IN*/ ULONG Revision);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+RtlDeleteOwnersRanges(
+ /*IN OUT*/ PRTL_RANGE_LIST RangeList,
+ /*IN*/ PVOID Owner);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+RtlDeleteRange(
+ /*IN OUT*/ PRTL_RANGE_LIST RangeList,
+ /*IN*/ ULONGLONG Start,
+ /*IN*/ ULONGLONG End,
+ /*IN*/ PVOID Owner);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+RtlDeleteRegistryValue(
+ /*IN*/ ULONG RelativeTo,
+ /*IN*/ PCWSTR Path,
+ /*IN*/ PCWSTR ValueName);
+
+NTOSAPI
+BOOL
+DDKAPI
+RtlDosPathNameToNtPathName_U(
+ /*IN*/ PCWSTR DosPathName,
+ /*OUT*/ PUNICODE_STRING NtPathName,
+ /*OUT*/ PCWSTR *NtFileNamePart,
+ /*OUT*/ VOID *DirectoryInfo);
+
+/*
+ * BOOLEAN
+ * RtlEqualLuid(
+ * IN LUID Luid1,
+ * IN LUID Luid2)
+ */
+#define RtlEqualLuid(_Luid1, \
+ _Luid2) \
+ ((Luid1.LowPart == Luid2.LowPart) && (Luid1.HighPart == Luid2.HighPart))
+
+/*
+ * ULONG
+ * RtlEqualMemory(
+ * IN VOID UNALIGNED *Destination,
+ * IN CONST VOID UNALIGNED *Source,
+ * IN SIZE_T Length)
+ */
+#define RtlEqualMemory(Destination, Source, Length) (!memcmp(Destination, Source, Length))
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+RtlEqualString(
+ /*IN*/ PSTRING String1,
+ /*IN*/ PSTRING String2,
+ /*IN*/ BOOLEAN CaseInSensitive);
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+RtlEqualUnicodeString(
+ /*IN*/ CONST UNICODE_STRING *String1,
+ /*IN*/ CONST UNICODE_STRING *String2,
+ /*IN*/ BOOLEAN CaseInSensitive);
+
+/*
+ * VOID
+ * RtlFillMemory(
+ * IN VOID UNALIGNED *Destination,
+ * IN SIZE_T Length,
+ * IN UCHAR Fill)
+ */
+#ifndef RtlFillMemory
+#define RtlFillMemory(Destination, Length, Fill) \
+ memset(Destination, Fill, Length)
+#endif
+
+#ifndef RtlFillBytes
+#define RtlFillBytes RtlFillMemory
+#endif
+
+NTOSAPI
+ULONG
+DDKAPI
+RtlFindClearBits(
+ /*IN*/ PRTL_BITMAP BitMapHeader,
+ /*IN*/ ULONG NumberToFind,
+ /*IN*/ ULONG HintIndex);
+
+NTOSAPI
+ULONG
+DDKAPI
+RtlFindClearBitsAndSet(
+ /*IN*/ PRTL_BITMAP BitMapHeader,
+ /*IN*/ ULONG NumberToFind,
+ /*IN*/ ULONG HintIndex);
+
+NTOSAPI
+ULONG
+DDKAPI
+RtlFindClearRuns(
+ /*IN*/ PRTL_BITMAP BitMapHeader,
+ /*OUT*/ PRTL_BITMAP_RUN RunArray,
+ /*IN*/ ULONG SizeOfRunArray,
+ /*IN*/ BOOLEAN LocateLongestRuns);
+
+NTOSAPI
+ULONG
+DDKAPI
+RtlFindFirstRunClear(
+ /*IN*/ PRTL_BITMAP BitMapHeader,
+ /*OUT*/ PULONG StartingIndex);
+
+NTOSAPI
+ULONG
+DDKAPI
+RtlFindLastBackwardRunClear(
+ /*IN*/ PRTL_BITMAP BitMapHeader,
+ /*IN*/ ULONG FromIndex,
+ /*OUT*/ PULONG StartingRunIndex);
+
+NTOSAPI
+CCHAR
+DDKAPI
+RtlFindLeastSignificantBit(
+ /*IN*/ ULONGLONG Set);
+
+NTOSAPI
+ULONG
+DDKAPI
+RtlFindLongestRunClear(
+ /*IN*/ PRTL_BITMAP BitMapHeader,
+ /*OUT*/ PULONG StartingIndex);
+
+NTOSAPI
+CCHAR
+DDKAPI
+RtlFindMostSignificantBit(
+ /*IN*/ ULONGLONG Set);
+
+NTOSAPI
+ULONG
+DDKAPI
+RtlFindNextForwardRunClear(
+ /*IN*/ PRTL_BITMAP BitMapHeader,
+ /*IN*/ ULONG FromIndex,
+ /*OUT*/ PULONG StartingRunIndex);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+RtlFindRange(
+ /*IN*/ PRTL_RANGE_LIST RangeList,
+ /*IN*/ ULONGLONG Minimum,
+ /*IN*/ ULONGLONG Maximum,
+ /*IN*/ ULONG Length,
+ /*IN*/ ULONG Alignment,
+ /*IN*/ ULONG Flags,
+ /*IN*/ UCHAR AttributeAvailableMask,
+ /*IN*/ PVOID Context /*OPTIONAL*/,
+ /*IN*/ PRTL_CONFLICT_RANGE_CALLBACK Callback /*OPTIONAL*/,
+ /*OUT*/ PULONGLONG Start);
+
+NTOSAPI
+ULONG
+DDKAPI
+RtlFindSetBits(
+ /*IN*/ PRTL_BITMAP BitMapHeader,
+ /*IN*/ ULONG NumberToFind,
+ /*IN*/ ULONG HintIndex);
+
+NTOSAPI
+ULONG
+DDKAPI
+RtlFindSetBitsAndClear(
+ /*IN*/ PRTL_BITMAP BitMapHeader,
+ /*IN*/ ULONG NumberToFind,
+ /*IN*/ ULONG HintIndex);
+
+NTOSAPI
+VOID
+DDKAPI
+RtlFreeAnsiString(
+ /*IN*/ PANSI_STRING AnsiString);
+
+NTOSAPI
+VOID
+DDKAPI
+RtlFreeRangeList(
+ /*IN*/ PRTL_RANGE_LIST RangeList);
+
+NTOSAPI
+VOID
+DDKAPI
+RtlFreeUnicodeString(
+ /*IN*/ PUNICODE_STRING UnicodeString);
+
+NTOSAPI
+VOID
+DDKAPI
+RtlGetCallersAddress(
+ /*OUT*/ PVOID *CallersAddress,
+ /*OUT*/ PVOID *CallersCaller);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+RtlGetVersion(
+ /*IN OUT*/ PRTL_OSVERSIONINFOW lpVersionInformation);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+RtlGetFirstRange(
+ /*IN*/ PRTL_RANGE_LIST RangeList,
+ /*OUT*/ PRTL_RANGE_LIST_ITERATOR Iterator,
+ /*OUT*/ PRTL_RANGE *Range);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+RtlGetNextRange(
+ /*IN OUT*/ PRTL_RANGE_LIST_ITERATOR Iterator,
+ /*OUT*/ PRTL_RANGE *Range,
+ /*IN*/ BOOLEAN MoveForwards);
+
+#define FOR_ALL_RANGES(RangeList, Iterator, Current) \
+ for (RtlGetFirstRange((RangeList), (Iterator), &(Current)); \
+ (Current) != NULL; \
+ RtlGetNextRange((Iterator), &(Current), TRUE))
+
+#define FOR_ALL_RANGES_BACKWARDS(RangeList, Iterator, Current) \
+ for (RtlGetLastRange((RangeList), (Iterator), &(Current)); \
+ (Current) != NULL; \
+ RtlGetNextRange((Iterator), &(Current), FALSE))
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+RtlGUIDFromString(
+ /*IN*/ PUNICODE_STRING GuidString,
+ /*OUT*/ GUID *Guid);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+RtlHashUnicodeString(
+ /*IN*/ CONST UNICODE_STRING *String,
+ /*IN*/ BOOLEAN CaseInSensitive,
+ /*IN*/ ULONG HashAlgorithm,
+ /*OUT*/ PULONG HashValue);
+
+NTOSAPI
+VOID
+DDKAPI
+RtlInitAnsiString(
+ /*IN OUT*/ PANSI_STRING DestinationString,
+ /*IN*/ PCSZ SourceString);
+
+NTOSAPI
+VOID
+DDKAPI
+RtlInitializeBitMap(
+ /*IN*/ PRTL_BITMAP BitMapHeader,
+ /*IN*/ PULONG BitMapBuffer,
+ /*IN*/ ULONG SizeOfBitMap);
+
+NTOSAPI
+VOID
+DDKAPI
+RtlInitializeRangeList(
+ /*IN OUT*/ PRTL_RANGE_LIST RangeList);
+
+NTOSAPI
+VOID
+DDKAPI
+RtlInitString(
+ /*IN OUT*/ PSTRING DestinationString,
+ /*IN*/ PCSZ SourceString);
+
+NTOSAPI
+VOID
+DDKAPI
+RtlInitUnicodeString(
+ /*IN OUT*/ PUNICODE_STRING DestinationString,
+ /*IN*/ PCWSTR SourceString);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+RtlInt64ToUnicodeString(
+ /*IN*/ ULONGLONG Value,
+ /*IN*/ ULONG Base /*OPTIONAL*/,
+ /*IN OUT*/ PUNICODE_STRING String);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+RtlIntegerToUnicodeString(
+ /*IN*/ ULONG Value,
+ /*IN*/ ULONG Base /*OPTIONAL*/,
+ /*IN OUT*/ PUNICODE_STRING String);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+RtlIntPtrToUnicodeString(
+ PLONG Value,
+ ULONG Base /*OPTIONAL*/,
+ PUNICODE_STRING String);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+RtlInvertRangeList(
+ /*OUT*/ PRTL_RANGE_LIST InvertedRangeList,
+ /*IN*/ PRTL_RANGE_LIST RangeList);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+RtlIsRangeAvailable(
+ /*IN*/ PRTL_RANGE_LIST RangeList,
+ /*IN*/ ULONGLONG Start,
+ /*IN*/ ULONGLONG End,
+ /*IN*/ ULONG Flags,
+ /*IN*/ UCHAR AttributeAvailableMask,
+ /*IN*/ PVOID Context /*OPTIONAL*/,
+ /*IN*/ PRTL_CONFLICT_RANGE_CALLBACK Callback /*OPTIONAL*/,
+ /*OUT*/ PBOOLEAN Available);
+
+/*
+ * BOOLEAN
+ * RtlIsZeroLuid(
+ * IN PLUID L1)
+ */
+#define RtlIsZeroLuid(_L1) \
+ ((BOOLEAN) ((!(_L1)->LowPart) && (!(_L1)->HighPart)))
+
+NTOSAPI
+ULONG
+DDKAPI
+RtlLengthSecurityDescriptor(
+ /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor);
+
+NTOSAPI
+VOID
+DDKAPI
+RtlMapGenericMask(
+ /*IN OUT*/ PACCESS_MASK AccessMask,
+ /*IN*/ PGENERIC_MAPPING GenericMapping);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+RtlMergeRangeLists(
+ /*OUT*/ PRTL_RANGE_LIST MergedRangeList,
+ /*IN*/ PRTL_RANGE_LIST RangeList1,
+ /*IN*/ PRTL_RANGE_LIST RangeList2,
+ /*IN*/ ULONG Flags);
+
+/*
+ * VOID
+ * RtlMoveMemory(
+ * IN VOID UNALIGNED *Destination,
+ * IN CONST VOID UNALIGNED *Source,
+ * IN SIZE_T Length)
+ */
+#define RtlMoveMemory memmove
+
+NTOSAPI
+ULONG
+DDKAPI
+RtlNumberOfClearBits(
+ /*IN*/ PRTL_BITMAP BitMapHeader);
+
+NTOSAPI
+ULONG
+DDKAPI
+RtlNumberOfSetBits(
+ /*IN*/ PRTL_BITMAP BitMapHeader);
+
+NTOSAPI
+VOID
+DDKFASTAPI
+RtlPrefetchMemoryNonTemporal(
+ /*IN*/ PVOID Source,
+ /*IN*/ SIZE_T Length);
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+RtlPrefixUnicodeString(
+ /*IN*/ PUNICODE_STRING String1,
+ /*IN*/ PUNICODE_STRING String2,
+ /*IN*/ BOOLEAN CaseInSensitive);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+RtlQueryRegistryValues(
+ /*IN*/ ULONG RelativeTo,
+ /*IN*/ PCWSTR Path,
+ /*IN*/ PRTL_QUERY_REGISTRY_TABLE QueryTable,
+ /*IN*/ PVOID Context,
+ /*IN*/ PVOID Environment /*OPTIONAL*/);
+
+NTOSAPI
+VOID
+DDKAPI
+RtlRetrieveUlong(
+ /*IN OUT*/ PULONG DestinationAddress,
+ /*IN*/ PULONG SourceAddress);
+
+NTOSAPI
+VOID
+DDKAPI
+RtlRetrieveUshort(
+ /*IN OUT*/ PUSHORT DestinationAddress,
+ /*IN*/ PUSHORT SourceAddress);
+
+NTOSAPI
+VOID
+DDKAPI
+RtlSetAllBits(
+ /*IN*/ PRTL_BITMAP BitMapHeader);
+
+NTOSAPI
+VOID
+DDKAPI
+RtlSetBit(
+ PRTL_BITMAP BitMapHeader,
+ ULONG BitNumber);
+
+NTOSAPI
+VOID
+DDKAPI
+RtlSetBits(
+ /*IN*/ PRTL_BITMAP BitMapHeader,
+ /*IN*/ ULONG StartingIndex,
+ /*IN*/ ULONG NumberToSet);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+RtlSetDaclSecurityDescriptor(
+ /*IN OUT*/ PSECURITY_DESCRIPTOR SecurityDescriptor,
+ /*IN*/ BOOLEAN DaclPresent,
+ /*IN*/ PACL Dacl /*OPTIONAL*/,
+ /*IN*/ BOOLEAN DaclDefaulted /*OPTIONAL*/);
+
+NTOSAPI
+VOID
+DDKAPI
+RtlStoreUlong(
+ /*IN*/ PULONG Address,
+ /*IN*/ ULONG Value);
+
+NTOSAPI
+VOID
+DDKAPI
+RtlStoreUlonglong(
+ /*IN OUT*/ PULONGLONG Address,
+ ULONGLONG Value);
+
+NTOSAPI
+VOID
+DDKAPI
+RtlStoreUlongPtr(
+ /*IN OUT*/ PULONG_PTR Address,
+ /*IN*/ ULONG_PTR Value);
+
+NTOSAPI
+VOID
+DDKAPI
+RtlStoreUshort(
+ /*IN*/ PUSHORT Address,
+ /*IN*/ USHORT Value);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+RtlStringFromGUID(
+ /*IN*/ REFGUID Guid,
+ /*OUT*/ PUNICODE_STRING GuidString);
+
+#define RtlStringCbCopyA(dst, dst_len, src) strncpy(dst, src, dst_len)
+#define RtlStringCbPrintfA(args...) snprintf(args)
+#define RtlStringCbVPrintfA(args...) vsnprintf(args)
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+RtlTestBit(
+ /*IN*/ PRTL_BITMAP BitMapHeader,
+ /*IN*/ ULONG BitNumber);
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+RtlTimeFieldsToTime(
+ /*IN*/ PTIME_FIELDS TimeFields,
+ /*IN*/ PLARGE_INTEGER Time);
+
+NTOSAPI
+VOID
+DDKAPI
+RtlTimeToTimeFields(
+ /*IN*/ PLARGE_INTEGER Time,
+ /*IN*/ PTIME_FIELDS TimeFields);
+
+NTOSAPI
+ULONG
+DDKFASTAPI
+RtlUlongByteSwap(
+ /*IN*/ ULONG Source);
+
+NTOSAPI
+ULONGLONG
+DDKFASTAPI
+RtlUlonglongByteSwap(
+ /*IN*/ ULONGLONG Source);
+
+NTOSAPI
+ULONG
+DDKAPI
+RtlUnicodeStringToAnsiSize(
+ /*IN*/ PUNICODE_STRING UnicodeString);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+RtlUnicodeStringToAnsiString(
+ /*IN OUT*/ PANSI_STRING DestinationString,
+ /*IN*/ PUNICODE_STRING SourceString,
+ /*IN*/ BOOLEAN AllocateDestinationString);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+RtlUnicodeStringToInteger(
+ /*IN*/ PUNICODE_STRING String,
+ /*IN*/ ULONG Base /*OPTIONAL*/,
+ /*OUT*/ PULONG Value);
+
+NTOSAPI
+WCHAR
+DDKAPI
+RtlUpcaseUnicodeChar(
+ /*IN*/ WCHAR SourceCharacter);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+RtlUpcaseUnicodeString(
+ /*IN OUT*/ PUNICODE_STRING DestinationString /*OPTIONAL*/,
+ /*IN*/ PCUNICODE_STRING SourceString,
+ /*IN*/ BOOLEAN AllocateDestinationString);
+
+NTOSAPI
+CHAR
+DDKAPI
+RtlUpperChar(
+ /*IN*/ CHAR Character);
+
+NTOSAPI
+VOID
+DDKAPI
+RtlUpperString(
+ /*IN OUT*/ PSTRING DestinationString,
+ /*IN*/ PSTRING SourceString);
+
+NTOSAPI
+USHORT
+DDKFASTAPI
+RtlUshortByteSwap(
+ /*IN*/ USHORT Source);
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+RtlValidRelativeSecurityDescriptor(
+ /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptorInput,
+ /*IN*/ ULONG SecurityDescriptorLength,
+ /*IN*/ SECURITY_INFORMATION RequiredInformation);
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+RtlValidSecurityDescriptor(
+ /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+RtlVerifyVersionInfo(
+ /*IN*/ PRTL_OSVERSIONINFOEXW VersionInfo,
+ /*IN*/ ULONG TypeMask,
+ /*IN*/ ULONGLONG ConditionMask);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+RtlVolumeDeviceToDosName(
+ /*IN*/ PVOID VolumeDeviceObject,
+ /*OUT*/ PUNICODE_STRING DosName);
+
+NTOSAPI
+ULONG
+DDKAPI
+RtlWalkFrameChain(
+ /*OUT*/ PVOID *Callers,
+ /*IN*/ ULONG Count,
+ /*IN*/ ULONG Flags);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+RtlWriteRegistryValue(
+ /*IN*/ ULONG RelativeTo,
+ /*IN*/ PCWSTR Path,
+ /*IN*/ PCWSTR ValueName,
+ /*IN*/ ULONG ValueType,
+ /*IN*/ PVOID ValueData,
+ /*IN*/ ULONG ValueLength);
+
+NTOSAPI
+ULONG
+DDKAPI
+RtlxUnicodeStringToAnsiSize(
+ /*IN*/ PUNICODE_STRING UnicodeString);
+
+/*
+ * VOID
+ * RtlZeroMemory(
+ * IN VOID UNALIGNED *Destination,
+ * IN SIZE_T Length)
+ */
+#ifndef RtlZeroMemory
+#define RtlZeroMemory(Destination, Length) \
+ memset(Destination, 0, Length)
+#endif
+
+#ifndef RtlZeroBytes
+#define RtlZeroBytes RtlZeroMemory
+#endif
+
+
+/** Executive support routines **/
+
+NTOSAPI
+VOID
+DDKFASTAPI
+ExAcquireFastMutex(
+ /*IN*/ PFAST_MUTEX FastMutex);
+
+NTOSAPI
+VOID
+DDKFASTAPI
+ExAcquireFastMutexUnsafe(
+ /*IN*/ PFAST_MUTEX FastMutex);
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+ExAcquireResourceExclusiveLite(
+ /*IN*/ PERESOURCE Resource,
+ /*IN*/ BOOLEAN Wait);
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+ExAcquireResourceSharedLite(
+ /*IN*/ PERESOURCE Resource,
+ /*IN*/ BOOLEAN Wait);
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+ExAcquireSharedStarveExclusive(
+ /*IN*/ PERESOURCE Resource,
+ /*IN*/ BOOLEAN Wait);
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+ExAcquireSharedWaitForExclusive(
+ /*IN*/ PERESOURCE Resource,
+ /*IN*/ BOOLEAN Wait);
+
+
+NTOSAPI
+PSINGLE_LIST_ENTRY
+DDKFASTAPI
+ExInterlockedPopEntrySList(
+ /*IN*/ PSLIST_HEADER ListHead,
+ /*IN*/ PKSPIN_LOCK Lock);
+
+
+NTOSAPI
+PSINGLE_LIST_ENTRY
+DDKFASTAPI
+ExInterlockedPushEntrySList(
+ /*IN*/ PSLIST_HEADER ListHead,
+ /*IN*/ PSINGLE_LIST_ENTRY ListEntry,
+ /*IN*/ PKSPIN_LOCK Lock);
+
+
+#if (__USE_NTOSKRNL__) && (_WIN32_WINNT >= 0x0501)
+#define ExInterlockedPopEntrySList(_ListHead, \
+ _Lock) \
+ InterlockedPopEntrySList(_ListHead)
+
+#define ExInterlockedPushEntrySList(_ListHead, \
+ _ListEntry, \
+ _Lock) \
+ InterlockedPushEntrySList(_ListHead, _ListEntry)
+#endif /* __USE_NTOSKRNL__ */
+
+#define ExQueryDepthSList(ListHead) QueryDepthSList(ListHead)
+
+static __inline PVOID
+ExAllocateFromNPagedLookasideList(
+ /*IN*/ PNPAGED_LOOKASIDE_LIST Lookaside)
+{
+ PVOID Entry;
+
+ Lookaside->TotalAllocates++;
+ Entry = ExInterlockedPopEntrySList(&Lookaside->ListHead,
+ &Lookaside->Obsoleted);
+ if (Entry == NULL) {
+ Lookaside->_DDK_DUMMYUNION_MEMBER(AllocateMisses)++;
+ Entry = (Lookaside->Allocate)(Lookaside->Type,
+ Lookaside->Size,
+ Lookaside->Tag);
+ }
+ return Entry;
+}
+
+static __inline VOID
+ExFreeToNPagedLookasideList(
+ /*IN*/ PNPAGED_LOOKASIDE_LIST Lookaside,
+ /*IN*/ PVOID Entry)
+{
+ Lookaside->TotalFrees++;
+ if (ExQueryDepthSList(&Lookaside->ListHead) >= Lookaside->Depth) {
+ Lookaside->_DDK_DUMMYUNION_N_MEMBER(2,FreeMisses)++;
+ (Lookaside->Free)(Entry);
+ } else {
+ ExInterlockedPushEntrySList(&Lookaside->ListHead,
+ (PSLIST_ENTRY)Entry,
+ &Lookaside->Obsoleted);
+ }
+}
+
+#if (__USE_NTOSKRNL__) && (_WIN32_WINNT >= 0x0501)
+
+static __inline PVOID
+ExAllocateFromPagedLookasideList(
+ /*IN*/ PPAGED_LOOKASIDE_LIST Lookaside)
+{
+ PVOID Entry;
+
+ Lookaside->TotalAllocates++;
+ Entry = InterlockedPopEntrySList(&Lookaside->ListHead);
+ if (Entry == NULL) {
+ Lookaside->_DDK_DUMMYUNION_MEMBER(AllocateMisses)++;
+ Entry = (Lookaside->Allocate)(Lookaside->Type,
+ Lookaside->Size,
+ Lookaside->Tag);
+ }
+ return Entry;
+}
+
+static __inline VOID
+ExFreeToPagedLookasideList(
+ /*IN*/ PPAGED_LOOKASIDE_LIST Lookaside,
+ /*IN*/ PVOID Entry)
+{
+ Lookaside->TotalFrees++;
+ if (ExQueryDepthSList(&Lookaside->ListHead) >= Lookaside->Depth) {
+ Lookaside->_DDK_DUMMYUNION_N_MEMBER(2,FreeMisses)++;
+ (Lookaside->Free)(Entry);
+ } else {
+ InterlockedPushEntrySList(&Lookaside->ListHead,
+ (PSLIST_ENTRY)Entry);
+ }
+}
+
+#else /* (__USE_NTOSKRNL__) && (_WIN32_WINNT >= 0x0501) */
+
+NTOSAPI
+PVOID
+DDKAPI
+ExAllocateFromPagedLookasideList(
+ /*IN*/ PPAGED_LOOKASIDE_LIST Lookaside);
+
+NTOSAPI
+VOID
+DDKAPI
+ExFreeToPagedLookasideList(
+ /*IN*/ PPAGED_LOOKASIDE_LIST Lookaside,
+ /*IN*/ PVOID Entry);
+
+#endif /* (__USE_NTOSKRNL__) && (_WIN32_WINNT >= 0x0501) */
+
+NTOSAPI
+PVOID
+DDKAPI
+ExAllocatePoolWithQuotaTag(
+ /*IN*/ POOL_TYPE PoolType,
+ /*IN*/ SIZE_T NumberOfBytes,
+ /*IN*/ ULONG Tag);
+
+NTOSAPI
+PVOID
+DDKAPI
+ExAllocatePoolWithTag(
+ /*IN*/ POOL_TYPE PoolType,
+ /*IN*/ SIZE_T NumberOfBytes,
+ /*IN*/ ULONG Tag);
+
+#ifdef POOL_TAGGING
+
+#define ExAllocatePoolWithQuota(p,n) ExAllocatePoolWithQuotaTag(p,n,' kdD')
+#define ExAllocatePool(p,n) ExAllocatePoolWithTag(p,n,' kdD')
+
+#else /* !POOL_TAGGING */
+
+NTOSAPI
+PVOID
+DDKAPI
+ExAllocatePool(
+ /*IN*/ POOL_TYPE PoolType,
+ /*IN*/ SIZE_T NumberOfBytes);
+
+NTOSAPI
+PVOID
+DDKAPI
+ExAllocatePoolWithQuota(
+ /*IN*/ POOL_TYPE PoolType,
+ /*IN*/ SIZE_T NumberOfBytes);
+
+#endif /* POOL_TAGGING */
+
+NTOSAPI
+PVOID
+DDKAPI
+ExAllocatePoolWithTagPriority(
+ /*IN*/ POOL_TYPE PoolType,
+ /*IN*/ SIZE_T NumberOfBytes,
+ /*IN*/ ULONG Tag,
+ /*IN*/ EX_POOL_PRIORITY Priority);
+
+NTOSAPI
+VOID
+DDKAPI
+ExConvertExclusiveToSharedLite(
+ /*IN*/ PERESOURCE Resource);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+ExCreateCallback(
+ /*OUT*/ PCALLBACK_OBJECT *CallbackObject,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,
+ /*IN*/ BOOLEAN Create,
+ /*IN*/ BOOLEAN AllowMultipleCallbacks);
+
+NTOSAPI
+VOID
+DDKAPI
+ExDeleteNPagedLookasideList(
+ /*IN*/ PNPAGED_LOOKASIDE_LIST Lookaside);
+
+NTOSAPI
+VOID
+DDKAPI
+ExDeletePagedLookasideList(
+ /*IN*/ PPAGED_LOOKASIDE_LIST Lookaside);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+ExDeleteResourceLite(
+ /*IN*/ PERESOURCE Resource);
+
+NTOSAPI
+VOID
+DDKAPI
+ExFreePool(
+ /*IN*/ PVOID P);
+
+#define PROTECTED_POOL 0x80000000
+
+#ifdef POOL_TAGGING
+#define ExFreePool(P) ExFreePoolWithTag(P, 0)
+#endif
+
+NTOSAPI
+VOID
+DDKAPI
+ExFreePoolWithTag(
+ /*IN*/ PVOID P,
+ /*IN*/ ULONG Tag);
+
+/*
+ * ERESOURCE_THREAD
+ * ExGetCurrentResourceThread(
+ * VOID);
+ */
+#define ExGetCurrentResourceThread() ((ERESOURCE_THREAD) PsGetCurrentThread())
+
+NTOSAPI
+ULONG
+DDKAPI
+ExGetExclusiveWaiterCount(
+ /*IN*/ PERESOURCE Resource);
+
+NTOSAPI
+KPROCESSOR_MODE
+DDKAPI
+ExGetPreviousMode(
+ VOID);
+
+NTOSAPI
+ULONG
+DDKAPI
+ExGetSharedWaiterCount(
+ /*IN*/ PERESOURCE Resource);
+
+NTOSAPI
+VOID
+DDKAPI
+KeInitializeEvent(
+ /*IN*/ PRKEVENT Event,
+ /*IN*/ EVENT_TYPE Type,
+ /*IN*/ BOOLEAN State);
+
+/*
+ * VOID DDKAPI
+ * ExInitializeFastMutex(
+ * IN PFAST_MUTEX FastMutex)
+ */
+#define ExInitializeFastMutex(_FastMutex) \
+{ \
+ (_FastMutex)->Count = 1; \
+ (_FastMutex)->Owner = NULL; \
+ (_FastMutex)->Contention = 0; \
+ KeInitializeEvent(&(_FastMutex)->Event, SynchronizationEvent, FALSE); \
+}
+
+NTOSAPI
+VOID
+DDKAPI
+ExInitializeNPagedLookasideList(
+ /*IN*/ PNPAGED_LOOKASIDE_LIST Lookaside,
+ /*IN*/ PALLOCATE_FUNCTION Allocate /*OPTIONAL*/,
+ /*IN*/ PFREE_FUNCTION Free /*OPTIONAL*/,
+ /*IN*/ ULONG Flags,
+ /*IN*/ SIZE_T Size,
+ /*IN*/ ULONG Tag,
+ /*IN*/ USHORT Depth);
+
+NTOSAPI
+VOID
+DDKAPI
+ExInitializePagedLookasideList(
+ /*IN*/ PPAGED_LOOKASIDE_LIST Lookaside,
+ /*IN*/ PALLOCATE_FUNCTION Allocate /*OPTIONAL*/,
+ /*IN*/ PFREE_FUNCTION Free /*OPTIONAL*/,
+ /*IN*/ ULONG Flags,
+ /*IN*/ SIZE_T Size,
+ /*IN*/ ULONG Tag,
+ /*IN*/ USHORT Depth);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+ExInitializeResourceLite(
+ /*IN*/ PERESOURCE Resource);
+
+/*
+ * VOID
+ * InitializeSListHead(
+ * IN PSLIST_HEADER SListHead)
+ */
+#define InitializeSListHead(_SListHead) \
+ (_SListHead)->Alignment = 0
+
+#define ExInitializeSListHead InitializeSListHead
+
+NTOSAPI
+LARGE_INTEGER
+DDKAPI
+ExInterlockedAddLargeInteger(
+ /*IN*/ PLARGE_INTEGER Addend,
+ /*IN*/ LARGE_INTEGER Increment,
+ /*IN*/ PKSPIN_LOCK Lock);
+
+NTOSAPI
+VOID
+DDKFASTAPI
+ExInterlockedAddLargeStatistic(
+ /*IN*/ PLARGE_INTEGER Addend,
+ /*IN*/ ULONG Increment);
+
+NTOSAPI
+ULONG
+DDKAPI
+ExInterlockedAddUlong(
+ /*IN*/ PULONG Addend,
+ /*IN*/ ULONG Increment,
+ PKSPIN_LOCK Lock);
+
+NTOSAPI
+ULONG
+DDKFASTAPI
+ExfInterlockedAddUlong(
+ /*IN*/ PULONG Addend,
+ /*IN*/ ULONG Increment,
+ PKSPIN_LOCK Lock);
+
+
+NTOSAPI
+LONGLONG
+DDKFASTAPI
+ExInterlockedCompareExchange64(
+ /*IN OUT*/ PLONGLONG Destination,
+ /*IN*/ PLONGLONG Exchange,
+ /*IN*/ PLONGLONG Comparand,
+ /*IN*/ PKSPIN_LOCK Lock);
+
+NTOSAPI
+PSINGLE_LIST_ENTRY
+DDKFASTAPI
+ExInterlockedFlushSList(
+ /*IN*/ PSLIST_HEADER ListHead);
+
+NTOSAPI
+PLIST_ENTRY
+DDKAPI
+ExInterlockedInsertHeadList(
+ /*IN*/ PLIST_ENTRY ListHead,
+ /*IN*/ PLIST_ENTRY ListEntry,
+ /*IN*/ PKSPIN_LOCK Lock);
+
+NTOSAPI
+PLIST_ENTRY
+DDKFASTAPI
+ExfInterlockedInsertHeadList(
+ /*IN*/ PLIST_ENTRY ListHead,
+ /*IN*/ PLIST_ENTRY ListEntry,
+ /*IN*/ PKSPIN_LOCK Lock);
+
+NTOSAPI
+PLIST_ENTRY
+DDKAPI
+ExInterlockedInsertTailList(
+ /*IN*/ PLIST_ENTRY ListHead,
+ /*IN*/ PLIST_ENTRY ListEntry,
+ /*IN*/ PKSPIN_LOCK Lock);
+
+NTOSAPI
+PLIST_ENTRY
+DDKFASTAPI
+ExfInterlockedInsertTailList(
+ /*IN*/ PLIST_ENTRY ListHead,
+ /*IN*/ PLIST_ENTRY ListEntry,
+ /*IN*/ PKSPIN_LOCK Lock);
+
+NTOSAPI
+PSINGLE_LIST_ENTRY
+DDKAPI
+ExInterlockedPopEntryList(
+ /*IN*/ PSINGLE_LIST_ENTRY ListHead,
+ /*IN*/ PKSPIN_LOCK Lock);
+
+NTOSAPI
+PSINGLE_LIST_ENTRY
+DDKFASTAPI
+ExfInterlockedPopEntryList(
+ /*IN*/ PSINGLE_LIST_ENTRY ListHead,
+ /*IN*/ PKSPIN_LOCK Lock);
+
+
+NTOSAPI
+PSINGLE_LIST_ENTRY
+DDKAPI
+ExInterlockedPushEntryList(
+ /*IN*/ PSINGLE_LIST_ENTRY ListHead,
+ /*IN*/ PSINGLE_LIST_ENTRY ListEntry,
+ /*IN*/ PKSPIN_LOCK Lock);
+
+NTOSAPI
+PSINGLE_LIST_ENTRY
+DDKFASTAPI
+ExfInterlockedPushEntryList(
+ /*IN*/ PSINGLE_LIST_ENTRY ListHead,
+ /*IN*/ PSINGLE_LIST_ENTRY ListEntry,
+ /*IN*/ PKSPIN_LOCK Lock);
+
+
+NTOSAPI
+PLIST_ENTRY
+DDKAPI
+ExInterlockedRemoveHeadList(
+ /*IN*/ PLIST_ENTRY ListHead,
+ /*IN*/ PKSPIN_LOCK Lock);
+
+NTOSAPI
+PLIST_ENTRY
+DDKFASTAPI
+ExfInterlockedRemoveHeadList(
+ /*IN*/ PLIST_ENTRY ListHead,
+ /*IN*/ PKSPIN_LOCK Lock);
+
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+ExIsProcessorFeaturePresent(
+ /*IN*/ ULONG ProcessorFeature);
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+ExIsResourceAcquiredExclusiveLite(
+ /*IN*/ PERESOURCE Resource);
+
+NTOSAPI
+USHORT
+DDKAPI
+ExIsResourceAcquiredLite(
+ /*IN*/ PERESOURCE Resource);
+
+NTOSAPI
+USHORT
+DDKAPI
+ExIsResourceAcquiredSharedLite(
+ /*IN*/ PERESOURCE Resource);
+
+NTOSAPI
+VOID
+DDKAPI
+ExLocalTimeToSystemTime(
+ /*IN*/ PLARGE_INTEGER LocalTime,
+ /*OUT*/ PLARGE_INTEGER SystemTime);
+
+NTOSAPI
+VOID
+DDKAPI
+ExNotifyCallback(
+ /*IN*/ PCALLBACK_OBJECT CallbackObject,
+ /*IN*/ PVOID Argument1,
+ /*IN*/ PVOID Argument2);
+
+NTOSAPI
+VOID
+DDKAPI
+ExRaiseAccessViolation(
+ VOID);
+
+NTOSAPI
+VOID
+DDKAPI
+ExRaiseDatatypeMisalignment(
+ VOID);
+
+NTOSAPI
+VOID
+DDKAPI
+ExRaiseStatus(
+ /*IN*/ NTSTATUS Status);
+
+NTOSAPI
+PVOID
+DDKAPI
+ExRegisterCallback(
+ /*IN*/ PCALLBACK_OBJECT CallbackObject,
+ /*IN*/ PCALLBACK_FUNCTION CallbackFunction,
+ /*IN*/ PVOID CallbackContext);
+
+NTOSAPI
+VOID
+DDKAPI
+ExReinitializeResourceLite(
+ /*IN*/ PERESOURCE Resource);
+
+NTOSAPI
+VOID
+DDKFASTAPI
+ExReleaseFastMutex(
+ /*IN*/ PFAST_MUTEX FastMutex);
+
+NTOSAPI
+VOID
+DDKFASTAPI
+ExReleaseFastMutexUnsafe(
+ /*IN*/ PFAST_MUTEX FastMutex);
+
+NTOSAPI
+VOID
+DDKAPI
+ExReleaseResourceForThreadLite(
+ /*IN*/ PERESOURCE Resource,
+ /*IN*/ ERESOURCE_THREAD ResourceThreadId);
+
+NTOSAPI
+VOID
+DDKFASTAPI
+ExReleaseResourceLite(
+ /*IN*/ PERESOURCE Resource);
+
+NTOSAPI
+VOID
+DDKAPI
+ExSetResourceOwnerPointer(
+ /*IN*/ PERESOURCE Resource,
+ /*IN*/ PVOID OwnerPointer);
+
+NTOSAPI
+ULONG
+DDKAPI
+ExSetTimerResolution(
+ /*IN*/ ULONG DesiredTime,
+ /*IN*/ BOOLEAN SetResolution);
+
+NTOSAPI
+VOID
+DDKAPI
+ExSystemTimeToLocalTime(
+ /*IN*/ PLARGE_INTEGER SystemTime,
+ /*OUT*/ PLARGE_INTEGER LocalTime);
+
+NTOSAPI
+BOOLEAN
+DDKFASTAPI
+ExTryToAcquireFastMutex(
+ /*IN*/ PFAST_MUTEX FastMutex);
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+ExTryToAcquireResourceExclusiveLite(
+ /*IN*/ PERESOURCE Resource);
+
+NTOSAPI
+VOID
+DDKAPI
+ExUnregisterCallback(
+ /*IN*/ PVOID CbRegistration);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+ExUuidCreate(
+ /*OUT*/ UUID *Uuid);
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+ExVerifySuite(
+ /*IN*/ SUITE_TYPE SuiteType);
+
+#ifdef DBG
+
+#define PAGED_CODE() { \
+ if (KeGetCurrentIrql() > APC_LEVEL) { \
+ KdPrint( ("NTDDK: Pageable code called at IRQL > APC_LEVEL (%d)\n", KeGetCurrentIrql() )); \
+ ASSERT(FALSE); \
+ } \
+}
+
+#else
+
+#define PAGED_CODE()
+
+#endif
+
+NTOSAPI
+VOID
+DDKAPI
+ProbeForRead(
+ /*IN*/ CONST VOID *Address,
+ /*IN*/ ULONG Length,
+ /*IN*/ ULONG Alignment);
+
+NTOSAPI
+VOID
+DDKAPI
+ProbeForWrite(
+ /*IN*/ CONST VOID *Address,
+ /*IN*/ ULONG Length,
+ /*IN*/ ULONG Alignment);
+
+
+
+/** Configuration manager routines **/
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+CmRegisterCallback(
+ /*IN*/ PEX_CALLBACK_FUNCTION Function,
+ /*IN*/ PVOID Context,
+ /*IN OUT*/ PLARGE_INTEGER Cookie);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+CmUnRegisterCallback(
+ /*IN*/ LARGE_INTEGER Cookie);
+
+
+
+/** Filesystem runtime library routines **/
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+FsRtlIsTotalDeviceFailure(
+ /*IN*/ NTSTATUS Status);
+
+
+
+/** Hardware abstraction layer routines **/
+
+NTOSAPI
+VOID
+DDKFASTAPI
+HalExamineMBR(
+ /*IN*/ PDEVICE_OBJECT DeviceObject,
+ /*IN*/ ULONG SectorSize,
+ /*IN*/ ULONG MBRTypeIdentifier,
+ /*OUT*/ PVOID Buffer);
+
+NTOSAPI
+VOID
+DDKAPI
+READ_PORT_BUFFER_UCHAR(
+ /*IN*/ PUCHAR Port,
+ /*IN*/ PUCHAR Buffer,
+ /*IN*/ ULONG Count);
+
+NTOSAPI
+VOID
+DDKAPI
+READ_PORT_BUFFER_ULONG(
+ /*IN*/ PULONG Port,
+ /*IN*/ PULONG Buffer,
+ /*IN*/ ULONG Count);
+
+NTOSAPI
+VOID
+DDKAPI
+READ_PORT_BUFFER_USHORT(
+ /*IN*/ PUSHORT Port,
+ /*IN*/ PUSHORT Buffer,
+ /*IN*/ ULONG Count);
+
+NTOSAPI
+UCHAR
+DDKAPI
+READ_PORT_UCHAR(
+ /*IN*/ PUCHAR Port);
+
+NTOSAPI
+ULONG
+DDKAPI
+READ_PORT_ULONG(
+ /*IN*/ PULONG Port);
+
+NTOSAPI
+USHORT
+DDKAPI
+READ_PORT_USHORT(
+ /*IN*/ PUSHORT Port);
+
+NTOSAPI
+VOID
+DDKAPI
+READ_REGISTER_BUFFER_UCHAR(
+ /*IN*/ PUCHAR Register,
+ /*IN*/ PUCHAR Buffer,
+ /*IN*/ ULONG Count);
+
+NTOSAPI
+VOID
+DDKAPI
+READ_REGISTER_BUFFER_ULONG(
+ /*IN*/ PULONG Register,
+ /*IN*/ PULONG Buffer,
+ /*IN*/ ULONG Count);
+
+NTOSAPI
+VOID
+DDKAPI
+READ_REGISTER_BUFFER_USHORT(
+ /*IN*/ PUSHORT Register,
+ /*IN*/ PUSHORT Buffer,
+ /*IN*/ ULONG Count);
+
+NTOSAPI
+UCHAR
+DDKAPI
+READ_REGISTER_UCHAR(
+ /*IN*/ PUCHAR Register);
+
+NTOSAPI
+ULONG
+DDKAPI
+READ_REGISTER_ULONG(
+ /*IN*/ PULONG Register);
+
+NTOSAPI
+USHORT
+DDKAPI
+READ_REGISTER_USHORT(
+ /*IN*/ PUSHORT Register);
+
+NTOSAPI
+VOID
+DDKAPI
+WRITE_PORT_BUFFER_UCHAR(
+ /*IN*/ PUCHAR Port,
+ /*IN*/ PUCHAR Buffer,
+ /*IN*/ ULONG Count);
+
+NTOSAPI
+VOID
+DDKAPI
+WRITE_PORT_BUFFER_ULONG(
+ /*IN*/ PULONG Port,
+ /*IN*/ PULONG Buffer,
+ /*IN*/ ULONG Count);
+
+NTOSAPI
+VOID
+DDKAPI
+WRITE_PORT_BUFFER_USHORT(
+ /*IN*/ PUSHORT Port,
+ /*IN*/ PUSHORT Buffer,
+ /*IN*/ ULONG Count);
+
+NTOSAPI
+VOID
+DDKAPI
+WRITE_PORT_UCHAR(
+ /*IN*/ PUCHAR Port,
+ /*IN*/ UCHAR Value);
+
+NTOSAPI
+VOID
+DDKAPI
+WRITE_PORT_ULONG(
+ /*IN*/ PULONG Port,
+ /*IN*/ ULONG Value);
+
+NTOSAPI
+VOID
+DDKAPI
+WRITE_PORT_USHORT(
+ /*IN*/ PUSHORT Port,
+ /*IN*/ USHORT Value);
+
+NTOSAPI
+VOID
+DDKAPI
+WRITE_REGISTER_BUFFER_UCHAR(
+ /*IN*/ PUCHAR Register,
+ /*IN*/ PUCHAR Buffer,
+ /*IN*/ ULONG Count);
+
+NTOSAPI
+VOID
+DDKAPI
+WRITE_REGISTER_BUFFER_ULONG(
+ /*IN*/ PULONG Register,
+ /*IN*/ PULONG Buffer,
+ /*IN*/ ULONG Count);
+
+NTOSAPI
+VOID
+DDKAPI
+WRITE_REGISTER_BUFFER_USHORT(
+ /*IN*/ PUSHORT Register,
+ /*IN*/ PUSHORT Buffer,
+ /*IN*/ ULONG Count);
+
+NTOSAPI
+VOID
+DDKAPI
+WRITE_REGISTER_UCHAR(
+ /*IN*/ PUCHAR Register,
+ /*IN*/ UCHAR Value);
+
+NTOSAPI
+VOID
+DDKAPI
+WRITE_REGISTER_ULONG(
+ /*IN*/ PULONG Register,
+ /*IN*/ ULONG Value);
+
+NTOSAPI
+VOID
+DDKAPI
+WRITE_REGISTER_USHORT(
+ /*IN*/ PUSHORT Register,
+ /*IN*/ USHORT Value);
+
+/** I/O manager routines **/
+
+NTOSAPI
+VOID
+DDKAPI
+IoAcquireCancelSpinLock(
+ /*OUT*/ PKIRQL Irql);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoAcquireRemoveLockEx(
+ /*IN*/ PIO_REMOVE_LOCK RemoveLock,
+ /*IN*/ PVOID Tag /*OPTIONAL*/,
+ /*IN*/ PCSTR File,
+ /*IN*/ ULONG Line,
+ /*IN*/ ULONG RemlockSize);
+
+/*
+ * NTSTATUS
+ * IoAcquireRemoveLock(
+ * IN PIO_REMOVE_LOCK RemoveLock,
+ * IN PVOID Tag OPTIONAL)
+ */
+#define IoAcquireRemoveLock(_RemoveLock, \
+ _Tag) \
+ IoAcquireRemoveLockEx(_RemoveLock, _Tag, __FILE__, __LINE__, sizeof(IO_REMOVE_LOCK))
+
+/*
+ * VOID
+ * IoAdjustPagingPathCount(
+ * IN PLONG Count,
+ * IN BOOLEAN Increment)
+ */
+#define IoAdjustPagingPathCount(_Count, \
+ _Increment) \
+{ \
+ if (_Increment) \
+ { \
+ InterlockedIncrement(_Count); \
+ } \
+ else \
+ { \
+ InterlockedDecrement(_Count); \
+ } \
+}
+
+NTOSAPI
+VOID
+DDKAPI
+IoAllocateController(
+ /*IN*/ PCONTROLLER_OBJECT ControllerObject,
+ /*IN*/ PDEVICE_OBJECT DeviceObject,
+ /*IN*/ PDRIVER_CONTROL ExecutionRoutine,
+ /*IN*/ PVOID Context);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoAllocateDriverObjectExtension(
+ /*IN*/ PDRIVER_OBJECT DriverObject,
+ /*IN*/ PVOID ClientIdentificationAddress,
+ /*IN*/ ULONG DriverObjectExtensionSize,
+ /*OUT*/ PVOID *DriverObjectExtension);
+
+typedef struct _IO_ERROR_LOG_PACKET {
+ UCHAR MajorFunctionCode;
+ UCHAR RetryCount;
+ USHORT DumpDataSize;
+ USHORT NumberOfStrings;
+ USHORT StringOffset;
+ USHORT EventCategory;
+ NTSTATUS ErrorCode;
+ ULONG UniqueErrorValue;
+ NTSTATUS FinalStatus;
+ ULONG SequenceNumber;
+ ULONG IoControlCode;
+ LARGE_INTEGER DeviceOffset;
+ ULONG DumpData[1];
+} IO_ERROR_LOG_PACKET, *PIO_ERROR_LOG_PACKET;
+
+NTOSAPI
+PVOID
+DDKAPI
+IoAllocateErrorLogEntry(
+ /*IN*/ PVOID IoObject,
+ /*IN*/ UCHAR EntrySize);
+
+NTOSAPI
+PIRP
+DDKAPI
+IoAllocateIrp(
+ /*IN*/ CCHAR StackSize,
+ /*IN*/ BOOLEAN ChargeQuota);
+
+NTOSAPI
+PMDL
+DDKAPI
+IoAllocateMdl(
+ /*IN*/ PVOID VirtualAddress,
+ /*IN*/ ULONG Length,
+ /*IN*/ BOOLEAN SecondaryBuffer,
+ /*IN*/ BOOLEAN ChargeQuota,
+ /*IN OUT*/ PIRP Irp /*OPTIONAL*/);
+
+NTOSAPI
+PIO_WORKITEM
+DDKAPI
+IoAllocateWorkItem(
+ /*IN*/ PDEVICE_OBJECT DeviceObject);
+
+/*
+ * VOID IoAssignArcName(
+ * IN PUNICODE_STRING ArcName,
+ * IN PUNICODE_STRING DeviceName);
+ */
+#define IoAssignArcName(_ArcName, _DeviceName) ( \
+ IoCreateSymbolicLink((_ArcName), (_DeviceName)))
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoAttachDevice(
+ /*IN*/ PDEVICE_OBJECT SourceDevice,
+ /*IN*/ PUNICODE_STRING TargetDevice,
+ /*OUT*/ PDEVICE_OBJECT *AttachedDevice);
+
+NTOSAPI
+PDEVICE_OBJECT
+DDKAPI
+IoAttachDeviceToDeviceStack(
+ /*IN*/ PDEVICE_OBJECT SourceDevice,
+ /*IN*/ PDEVICE_OBJECT TargetDevice);
+
+NTOSAPI
+PIRP
+DDKAPI
+IoBuildAsynchronousFsdRequest(
+ /*IN*/ ULONG MajorFunction,
+ /*IN*/ PDEVICE_OBJECT DeviceObject,
+ /*IN OUT*/ PVOID Buffer /*OPTIONAL*/,
+ /*IN*/ ULONG Length /*OPTIONAL*/,
+ /*IN*/ PLARGE_INTEGER StartingOffset /*OPTIONAL*/,
+ /*IN*/ PIO_STATUS_BLOCK IoStatusBlock /*OPTIONAL*/);
+
+NTOSAPI
+PIRP
+DDKAPI
+IoBuildDeviceIoControlRequest(
+ /*IN*/ ULONG IoControlCode,
+ /*IN*/ PDEVICE_OBJECT DeviceObject,
+ /*IN*/ PVOID InputBuffer /*OPTIONAL*/,
+ /*IN*/ ULONG InputBufferLength,
+ /*OUT*/ PVOID OutputBuffer /*OPTIONAL*/,
+ /*IN*/ ULONG OutputBufferLength,
+ /*IN*/ BOOLEAN InternalDeviceIoControl,
+ /*IN*/ PKEVENT Event,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock);
+
+NTOSAPI
+VOID
+DDKAPI
+IoBuildPartialMdl(
+ /*IN*/ PMDL SourceMdl,
+ /*IN OUT*/ PMDL TargetMdl,
+ /*IN*/ PVOID VirtualAddress,
+ /*IN*/ ULONG Length);
+
+NTOSAPI
+PIRP
+DDKAPI
+IoBuildSynchronousFsdRequest(
+ /*IN*/ ULONG MajorFunction,
+ /*IN*/ PDEVICE_OBJECT DeviceObject,
+ /*IN OUT*/ PVOID Buffer /*OPTIONAL*/,
+ /*IN*/ ULONG Length /*OPTIONAL*/,
+ /*IN*/ PLARGE_INTEGER StartingOffset /*OPTIONAL*/,
+ /*IN*/ PKEVENT Event,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock);
+
+NTOSAPI
+NTSTATUS
+DDKFASTAPI
+IofCallDriver(
+ /*IN*/ PDEVICE_OBJECT DeviceObject,
+ /*IN OUT*/ PIRP Irp);
+
+/*
+ * NTSTATUS
+ * IoCallDriver(
+ * IN PDEVICE_OBJECT DeviceObject,
+ * IN OUT PIRP Irp)
+ */
+#define IoCallDriver IofCallDriver
+
+NTOSAPI
+VOID
+DDKAPI
+IoCancelFileOpen(
+ /*IN*/ PDEVICE_OBJECT DeviceObject,
+ /*IN*/ PFILE_OBJECT FileObject);
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+IoCancelIrp(
+ /*IN*/ PIRP Irp);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoCheckShareAccess(
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ ULONG DesiredShareAccess,
+ /*IN OUT*/ PFILE_OBJECT FileObject,
+ /*IN OUT*/ PSHARE_ACCESS ShareAccess,
+ /*IN*/ BOOLEAN Update);
+
+NTOSAPI
+VOID
+DDKFASTAPI
+IofCompleteRequest(
+ /*IN*/ PIRP Irp,
+ /*IN*/ CCHAR PriorityBoost);
+
+/*
+ * VOID
+ * IoCompleteRequest(
+ * IN PIRP Irp,
+ * IN CCHAR PriorityBoost)
+ */
+#define IoCompleteRequest IofCompleteRequest
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoConnectInterrupt(
+ /*OUT*/ PKINTERRUPT *InterruptObject,
+ /*IN*/ PKSERVICE_ROUTINE ServiceRoutine,
+ /*IN*/ PVOID ServiceContext,
+ /*IN*/ PKSPIN_LOCK SpinLock /*OPTIONAL*/,
+ /*IN*/ ULONG Vector,
+ /*IN*/ KIRQL Irql,
+ /*IN*/ KIRQL SynchronizeIrql,
+ /*IN*/ KINTERRUPT_MODE InterruptMode,
+ /*IN*/ BOOLEAN ShareVector,
+ /*IN*/ KAFFINITY ProcessorEnableMask,
+ /*IN*/ BOOLEAN FloatingSave);
+
+/*
+ * PIO_STACK_LOCATION
+ * IoGetCurrentIrpStackLocation(
+ * IN PIRP Irp)
+ */
+#define IoGetCurrentIrpStackLocation(_Irp) \
+ ((_Irp)->Tail.Overlay.CurrentStackLocation)
+
+/*
+ * PIO_STACK_LOCATION
+ * IoGetNextIrpStackLocation(
+ * IN PIRP Irp)
+ */
+#define IoGetNextIrpStackLocation(_Irp) \
+ ((_Irp)->Tail.Overlay.CurrentStackLocation - 1)
+
+/*
+ * VOID
+ * IoCopyCurrentIrpStackLocationToNext(
+ * IN PIRP Irp)
+ */
+#define IoCopyCurrentIrpStackLocationToNext(_Irp) \
+{ \
+ PIO_STACK_LOCATION _IrpSp; \
+ PIO_STACK_LOCATION _NextIrpSp; \
+ _IrpSp = IoGetCurrentIrpStackLocation(_Irp); \
+ _NextIrpSp = IoGetNextIrpStackLocation(_Irp); \
+ RtlCopyMemory(_NextIrpSp, _IrpSp, \
+ FIELD_OFFSET(IO_STACK_LOCATION, CompletionRoutine)); \
+ _NextIrpSp->Control = 0; \
+}
+
+NTOSAPI
+PCONTROLLER_OBJECT
+DDKAPI
+IoCreateController(
+ /*IN*/ ULONG Size);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoCreateDevice(
+ /*IN*/ PDRIVER_OBJECT DriverObject,
+ /*IN*/ ULONG DeviceExtensionSize,
+ /*IN*/ PUNICODE_STRING DeviceName /*OPTIONAL*/,
+ /*IN*/ DEVICE_TYPE DeviceType,
+ /*IN*/ ULONG DeviceCharacteristics,
+ /*IN*/ BOOLEAN Exclusive,
+ /*OUT*/ PDEVICE_OBJECT *DeviceObject);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoCreateDisk(
+ /*IN*/ PDEVICE_OBJECT DeviceObject,
+ /*IN*/ PCREATE_DISK Disk);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoCreateFile(
+ /*OUT*/ PHANDLE FileHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock,
+ /*IN*/ PLARGE_INTEGER AllocationSize /*OPTIONAL*/,
+ /*IN*/ ULONG FileAttributes,
+ /*IN*/ ULONG ShareAccess,
+ /*IN*/ ULONG Disposition,
+ /*IN*/ ULONG CreateOptions,
+ /*IN*/ PVOID EaBuffer /*OPTIONAL*/,
+ /*IN*/ ULONG EaLength,
+ /*IN*/ CREATE_FILE_TYPE CreateFileType,
+ /*IN*/ PVOID ExtraCreateParameters /*OPTIONAL*/,
+ /*IN*/ ULONG Options);
+
+NTOSAPI
+PKEVENT
+DDKAPI
+IoCreateNotificationEvent(
+ /*IN*/ PUNICODE_STRING EventName,
+ /*OUT*/ PHANDLE EventHandle);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoCreateSymbolicLink(
+ /*IN*/ PUNICODE_STRING SymbolicLinkName,
+ /*IN*/ PUNICODE_STRING DeviceName);
+
+NTOSAPI
+PKEVENT
+DDKAPI
+IoCreateSynchronizationEvent(
+ /*IN*/ PUNICODE_STRING EventName,
+ /*OUT*/ PHANDLE EventHandle);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoCreateUnprotectedSymbolicLink(
+ /*IN*/ PUNICODE_STRING SymbolicLinkName,
+ /*IN*/ PUNICODE_STRING DeviceName);
+
+NTOSAPI
+VOID
+DDKAPI
+IoCsqInitialize(
+ PIO_CSQ Csq,
+ /*IN*/ PIO_CSQ_INSERT_IRP CsqInsertIrp,
+ /*IN*/ PIO_CSQ_REMOVE_IRP CsqRemoveIrp,
+ /*IN*/ PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp,
+ /*IN*/ PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock,
+ /*IN*/ PIO_CSQ_RELEASE_LOCK CsqReleaseLock,
+ /*IN*/ PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp);
+
+NTOSAPI
+VOID
+DDKAPI
+IoCsqInsertIrp(
+ /*IN*/ PIO_CSQ Csq,
+ /*IN*/ PIRP Irp,
+ /*IN*/ PIO_CSQ_IRP_CONTEXT Context);
+
+NTOSAPI
+PIRP
+DDKAPI
+IoCsqRemoveIrp(
+ /*IN*/ PIO_CSQ Csq,
+ /*IN*/ PIO_CSQ_IRP_CONTEXT Context);
+
+NTOSAPI
+PIRP
+DDKAPI
+IoCsqRemoveNextIrp(
+ /*IN*/ PIO_CSQ Csq,
+ /*IN*/ PVOID PeekContext);
+
+NTOSAPI
+VOID
+DDKAPI
+IoDeleteController(
+ /*IN*/ PCONTROLLER_OBJECT ControllerObject);
+
+NTOSAPI
+VOID
+DDKAPI
+IoDeleteDevice(
+ /*IN*/ PDEVICE_OBJECT DeviceObject);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoDeleteSymbolicLink(
+ /*IN*/ PUNICODE_STRING SymbolicLinkName);
+
+/*
+ * VOID
+ * IoDeassignArcName(
+ * IN PUNICODE_STRING ArcName)
+ */
+#define IoDeassignArcName IoDeleteSymbolicLink
+
+NTOSAPI
+VOID
+DDKAPI
+IoDetachDevice(
+ /*IN OUT*/ PDEVICE_OBJECT TargetDevice);
+
+NTOSAPI
+VOID
+DDKAPI
+IoDisconnectInterrupt(
+ /*IN*/ PKINTERRUPT InterruptObject);
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+IoForwardIrpSynchronously(
+ /*IN*/ PDEVICE_OBJECT DeviceObject,
+ /*IN*/ PIRP Irp);
+
+#define IoForwardAndCatchIrp IoForwardIrpSynchronously
+
+NTOSAPI
+VOID
+DDKAPI
+IoFreeController(
+ /*IN*/ PCONTROLLER_OBJECT ControllerObject);
+
+NTOSAPI
+VOID
+DDKAPI
+IoFreeErrorLogEntry(
+ PVOID ElEntry);
+
+NTOSAPI
+VOID
+DDKAPI
+IoFreeIrp(
+ /*IN*/ PIRP Irp);
+
+NTOSAPI
+VOID
+DDKAPI
+IoFreeMdl(
+ /*IN*/ PMDL Mdl);
+
+NTOSAPI
+VOID
+DDKAPI
+IoFreeWorkItem(
+ /*IN*/ PIO_WORKITEM pIOWorkItem);
+
+NTOSAPI
+PDEVICE_OBJECT
+DDKAPI
+IoGetAttachedDevice(
+ /*IN*/ PDEVICE_OBJECT DeviceObject);
+
+NTOSAPI
+PDEVICE_OBJECT
+DDKAPI
+IoGetAttachedDeviceReference(
+ /*IN*/ PDEVICE_OBJECT DeviceObject);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoGetBootDiskInformation(
+ /*IN OUT*/ PBOOTDISK_INFORMATION BootDiskInformation,
+ /*IN*/ ULONG Size);
+
+NTOSAPI
+PCONFIGURATION_INFORMATION
+DDKAPI
+IoGetConfigurationInformation(
+ VOID);
+
+NTOSAPI
+PEPROCESS
+DDKAPI
+IoGetCurrentProcess(
+ VOID);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoGetDeviceInterfaceAlias(
+ /*IN*/ PUNICODE_STRING SymbolicLinkName,
+ /*IN*/ CONST GUID *AliasInterfaceClassGuid,
+ /*OUT*/ PUNICODE_STRING AliasSymbolicLinkName);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoGetDeviceInterfaces(
+ /*IN*/ CONST GUID *InterfaceClassGuid,
+ /*IN*/ PDEVICE_OBJECT PhysicalDeviceObject /*OPTIONAL*/,
+ /*IN*/ ULONG Flags,
+ /*OUT*/ PWSTR *SymbolicLinkList);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoGetDeviceObjectPointer(
+ /*IN*/ PUNICODE_STRING ObjectName,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*OUT*/ PFILE_OBJECT *FileObject,
+ /*OUT*/ PDEVICE_OBJECT *DeviceObject);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoGetDeviceProperty(
+ /*IN*/ PDEVICE_OBJECT DeviceObject,
+ /*IN*/ DEVICE_REGISTRY_PROPERTY DeviceProperty,
+ /*IN*/ ULONG BufferLength,
+ /*OUT*/ PVOID PropertyBuffer,
+ /*OUT*/ PULONG ResultLength);
+
+NTOSAPI
+PDEVICE_OBJECT
+DDKAPI
+IoGetDeviceToVerify(
+ /*IN*/ PETHREAD Thread);
+
+NTOSAPI
+PDMA_ADAPTER
+DDKAPI
+IoGetDmaAdapter(
+ /*IN*/ PDEVICE_OBJECT PhysicalDeviceObject,
+ /*IN*/ PDEVICE_DESCRIPTION DeviceDescription,
+ /*IN OUT*/ PULONG NumberOfMapRegisters);
+
+NTOSAPI
+PVOID
+DDKAPI
+IoGetDriverObjectExtension(
+ /*IN*/ PDRIVER_OBJECT DriverObject,
+ /*IN*/ PVOID ClientIdentificationAddress);
+
+NTOSAPI
+PGENERIC_MAPPING
+DDKAPI
+IoGetFileObjectGenericMapping(
+ VOID);
+
+/*
+ * ULONG
+ * IoGetFunctionCodeFromCtlCode(
+ * IN ULONG ControlCode)
+ */
+#define IoGetFunctionCodeFromCtlCode(_ControlCode) \
+ (((_ControlCode) >> 2) & 0x00000FFF)
+
+NTOSAPI
+PVOID
+DDKAPI
+IoGetInitialStack(
+ VOID);
+
+NTOSAPI
+PDEVICE_OBJECT
+DDKAPI
+IoGetRelatedDeviceObject(
+ /*IN*/ PFILE_OBJECT FileObject);
+
+NTOSAPI
+ULONG
+DDKAPI
+IoGetRemainingStackSize(
+ VOID);
+
+NTOSAPI
+VOID
+DDKAPI
+IoGetStackLimits(
+ /*OUT*/ PULONG_PTR LowLimit,
+ /*OUT*/ PULONG_PTR HighLimit);
+
+NTOSAPI
+VOID
+DDKAPI
+KeInitializeDpc(
+ /*IN*/ PRKDPC Dpc,
+ /*IN*/ PKDEFERRED_ROUTINE DeferredRoutine,
+ /*IN*/ PVOID DeferredContext);
+
+/*
+ * VOID
+ * IoInitializeDpcRequest(
+ * IN PDEVICE_OBJECT DeviceObject,
+ * IN PIO_DPC_ROUTINE DpcRoutine)
+ */
+#define IoInitializeDpcRequest(_DeviceObject, \
+ _DpcRoutine) \
+ KeInitializeDpc(&(_DeviceObject)->Dpc, \
+ (PKDEFERRED_ROUTINE) (_DpcRoutine), \
+ _DeviceObject)
+
+NTOSAPI
+VOID
+DDKAPI
+IoInitializeIrp(
+ /*IN OUT*/ PIRP Irp,
+ /*IN*/ USHORT PacketSize,
+ /*IN*/ CCHAR StackSize);
+
+NTOSAPI
+VOID
+DDKAPI
+IoInitializeRemoveLockEx(
+ /*IN*/ PIO_REMOVE_LOCK Lock,
+ /*IN*/ ULONG AllocateTag,
+ /*IN*/ ULONG MaxLockedMinutes,
+ /*IN*/ ULONG HighWatermark,
+ /*IN*/ ULONG RemlockSize);
+
+/* VOID
+ * IoInitializeRemoveLock(
+ * IN PIO_REMOVE_LOCK Lock,
+ * IN ULONG AllocateTag,
+ * IN ULONG MaxLockedMinutes,
+ * IN ULONG HighWatermark)
+ */
+#define IoInitializeRemoveLock( \
+ Lock, AllocateTag, MaxLockedMinutes, HighWatermark) \
+ IoInitializeRemoveLockEx(Lock, AllocateTag, MaxLockedMinutes, \
+ HighWatermark, sizeof(IO_REMOVE_LOCK))
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoInitializeTimer(
+ /*IN*/ PDEVICE_OBJECT DeviceObject,
+ /*IN*/ PIO_TIMER_ROUTINE TimerRoutine,
+ /*IN*/ PVOID Context);
+
+NTOSAPI
+VOID
+DDKAPI
+IoInvalidateDeviceRelations(
+ /*IN*/ PDEVICE_OBJECT DeviceObject,
+ /*IN*/ DEVICE_RELATION_TYPE Type);
+
+NTOSAPI
+VOID
+DDKAPI
+IoInvalidateDeviceState(
+ /*IN*/ PDEVICE_OBJECT PhysicalDeviceObject);
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+IoIs32bitProcess(
+ /*IN*/ PIRP Irp /*OPTIONAL*/);
+
+/*
+ * BOOLEAN
+ * IoIsErrorUserInduced(
+ * IN NTSTATUS Status);
+ */
+#define IoIsErrorUserInduced(Status) \
+ ((BOOLEAN)(((Status) == STATUS_DEVICE_NOT_READY) || \
+ ((Status) == STATUS_IO_TIMEOUT) || \
+ ((Status) == STATUS_MEDIA_WRITE_PROTECTED) || \
+ ((Status) == STATUS_NO_MEDIA_IN_DEVICE) || \
+ ((Status) == STATUS_VERIFY_REQUIRED) || \
+ ((Status) == STATUS_UNRECOGNIZED_MEDIA) || \
+ ((Status) == STATUS_WRONG_VOLUME)))
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+IoIsWdmVersionAvailable(
+ /*IN*/ UCHAR MajorVersion,
+ /*IN*/ UCHAR MinorVersion);
+
+NTOSAPI
+PIRP
+DDKAPI
+IoMakeAssociatedIrp(
+ /*IN*/ PIRP Irp,
+ /*IN*/ CCHAR StackSize);
+
+/*
+ * VOID
+ * IoMarkIrpPending(
+ * IN OUT PIRP Irp)
+ */
+#define IoMarkIrpPending(_Irp) \
+ (IoGetCurrentIrpStackLocation(_Irp)->Control |= SL_PENDING_RETURNED)
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoOpenDeviceInterfaceRegistryKey(
+ /*IN*/ PUNICODE_STRING SymbolicLinkName,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*OUT*/ PHANDLE DeviceInterfaceKey);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoOpenDeviceRegistryKey(
+ /*IN*/ PDEVICE_OBJECT DeviceObject,
+ /*IN*/ ULONG DevInstKeyType,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*OUT*/ PHANDLE DevInstRegKey);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoQueryDeviceDescription(
+ /*IN*/ PINTERFACE_TYPE BusType /*OPTIONAL*/,
+ /*IN*/ PULONG BusNumber /*OPTIONAL*/,
+ /*IN*/ PCONFIGURATION_TYPE ControllerType /*OPTIONAL*/,
+ /*IN*/ PULONG ControllerNumber /*OPTIONAL*/,
+ /*IN*/ PCONFIGURATION_TYPE PeripheralType /*OPTIONAL*/,
+ /*IN*/ PULONG PeripheralNumber /*OPTIONAL*/,
+ /*IN*/ PIO_QUERY_DEVICE_ROUTINE CalloutRoutine,
+ /*IN*/ PVOID Context);
+
+NTOSAPI
+VOID
+DDKAPI
+IoQueueWorkItem(
+ /*IN*/ PIO_WORKITEM pIOWorkItem,
+ /*IN*/ PIO_WORKITEM_ROUTINE Routine,
+ /*IN*/ WORK_QUEUE_TYPE QueueType,
+ /*IN*/ PVOID Context);
+
+NTOSAPI
+VOID
+DDKAPI
+IoRaiseHardError(
+ /*IN*/ PIRP Irp,
+ /*IN*/ PVPB Vpb /*OPTIONAL*/,
+ /*IN*/ PDEVICE_OBJECT RealDeviceObject);
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+IoRaiseInformationalHardError(
+ /*IN*/ NTSTATUS ErrorStatus,
+ /*IN*/ PUNICODE_STRING String /*OPTIONAL*/,
+ /*IN*/ PKTHREAD Thread /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoReadDiskSignature(
+ /*IN*/ PDEVICE_OBJECT DeviceObject,
+ /*IN*/ ULONG BytesPerSector,
+ /*OUT*/ PDISK_SIGNATURE Signature);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoReadPartitionTableEx(
+ /*IN*/ PDEVICE_OBJECT DeviceObject,
+ /*IN*/ struct _DRIVE_LAYOUT_INFORMATION_EX **PartitionBuffer);
+
+NTOSAPI
+VOID
+DDKAPI
+IoRegisterBootDriverReinitialization(
+ /*IN*/ PDRIVER_OBJECT DriverObject,
+ /*IN*/ PDRIVER_REINITIALIZE DriverReinitializationRoutine,
+ /*IN*/ PVOID Context);
+
+NTOSAPI
+VOID
+DDKAPI
+IoRegisterBootDriverReinitialization(
+ /*IN*/ PDRIVER_OBJECT DriverObject,
+ /*IN*/ PDRIVER_REINITIALIZE DriverReinitializationRoutine,
+ /*IN*/ PVOID Context);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoRegisterDeviceInterface(
+ /*IN*/ PDEVICE_OBJECT PhysicalDeviceObject,
+ /*IN*/ CONST GUID *InterfaceClassGuid,
+ /*IN*/ PUNICODE_STRING ReferenceString /*OPTIONAL*/,
+ /*OUT*/ PUNICODE_STRING SymbolicLinkName);
+
+NTOSAPI
+VOID
+DDKAPI
+IoRegisterDriverReinitialization(
+ /*IN*/ PDRIVER_OBJECT DriverObject,
+ /*IN*/ PDRIVER_REINITIALIZE DriverReinitializationRoutine,
+ /*IN*/ PVOID Context);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoRegisterPlugPlayNotification(
+ /*IN*/ IO_NOTIFICATION_EVENT_CATEGORY EventCategory,
+ /*IN*/ ULONG EventCategoryFlags,
+ /*IN*/ PVOID EventCategoryData /*OPTIONAL*/,
+ /*IN*/ PDRIVER_OBJECT DriverObject,
+ /*IN*/ PDRIVER_NOTIFICATION_CALLBACK_ROUTINE CallbackRoutine,
+ /*IN*/ PVOID Context,
+ /*OUT*/ PVOID *NotificationEntry);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoRegisterShutdownNotification(
+ /*IN*/ PDEVICE_OBJECT DeviceObject);
+
+NTOSAPI
+VOID
+DDKAPI
+IoReleaseCancelSpinLock(
+ /*IN*/ KIRQL Irql);
+
+NTOSAPI
+VOID
+DDKAPI
+IoReleaseRemoveLockAndWaitEx(
+ /*IN*/ PIO_REMOVE_LOCK RemoveLock,
+ /*IN*/ PVOID Tag,
+ /*IN*/ ULONG RemlockSize);
+
+/*
+ * VOID
+ * IoReleaseRemoveLockAndWait(
+ * IN PIO_REMOVE_LOCK RemoveLock,
+ * IN PVOID Tag)
+ */
+#define IoReleaseRemoveLockAndWait(_RemoveLock, \
+ _Tag) \
+ IoReleaseRemoveLockAndWaitEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
+
+NTOSAPI
+VOID
+DDKAPI
+IoReleaseRemoveLockEx(
+ /*IN*/ PIO_REMOVE_LOCK RemoveLock,
+ /*IN*/ PVOID Tag,
+ /*IN*/ ULONG RemlockSize);
+
+/*
+ * VOID
+ * IoReleaseRemoveLock(
+ * IN PIO_REMOVE_LOCK RemoveLock,
+ * IN PVOID Tag)
+ */
+#define IoReleaseRemoveLock(_RemoveLock, \
+ _Tag) \
+ IoReleaseRemoveLockEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
+
+NTOSAPI
+VOID
+DDKAPI
+IoRemoveShareAccess(
+ /*IN*/ PFILE_OBJECT FileObject,
+ /*IN OUT*/ PSHARE_ACCESS ShareAccess);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoReportDetectedDevice(
+ /*IN*/ PDRIVER_OBJECT DriverObject,
+ /*IN*/ INTERFACE_TYPE LegacyBusType,
+ /*IN*/ ULONG BusNumber,
+ /*IN*/ ULONG SlotNumber,
+ /*IN*/ PCM_RESOURCE_LIST ResourceList,
+ /*IN*/ PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements /*OPTIONAL*/,
+ /*IN*/ BOOLEAN ResourceAssigned,
+ /*IN OUT*/ PDEVICE_OBJECT *DeviceObject);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoReportResourceForDetection(
+ /*IN*/ PDRIVER_OBJECT DriverObject,
+ /*IN*/ PCM_RESOURCE_LIST DriverList /*OPTIONAL*/,
+ /*IN*/ ULONG DriverListSize /*OPTIONAL*/,
+ /*IN*/ PDEVICE_OBJECT DeviceObject /*OPTIONAL*/,
+ /*IN*/ PCM_RESOURCE_LIST DeviceList /*OPTIONAL*/,
+ /*IN*/ ULONG DeviceListSize /*OPTIONAL*/,
+ /*OUT*/ PBOOLEAN ConflictDetected);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoReportResourceUsage(
+ /*IN*/ PUNICODE_STRING DriverClassName /*OPTIONAL*/,
+ /*IN*/ PDRIVER_OBJECT DriverObject,
+ /*IN*/ PCM_RESOURCE_LIST DriverList /*OPTIONAL*/,
+ /*IN*/ ULONG DriverListSize /*OPTIONAL*/,
+ /*IN*/ PDEVICE_OBJECT DeviceObject,
+ /*IN*/ PCM_RESOURCE_LIST DeviceList /*OPTIONAL*/,
+ /*IN*/ ULONG DeviceListSize /*OPTIONAL*/,
+ /*IN*/ BOOLEAN OverrideConflict,
+ /*OUT*/ PBOOLEAN ConflictDetected);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoReportTargetDeviceChange(
+ /*IN*/ PDEVICE_OBJECT PhysicalDeviceObject,
+ /*IN*/ PVOID NotificationStructure);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoReportTargetDeviceChangeAsynchronous(
+ /*IN*/ PDEVICE_OBJECT PhysicalDeviceObject,
+ /*IN*/ PVOID NotificationStructure,
+ /*IN*/ PDEVICE_CHANGE_COMPLETE_CALLBACK Callback /*OPTIONAL*/,
+ /*IN*/ PVOID Context /*OPTIONAL*/);
+
+NTOSAPI
+VOID
+DDKAPI
+IoRequestDeviceEject(
+ /*IN*/ PDEVICE_OBJECT PhysicalDeviceObject);
+
+/*
+ * VOID
+ * IoRequestDpc(
+ * IN PDEVICE_OBJECT DeviceObject,
+ * IN PIRP Irp,
+ * IN PVOID Context);
+ */
+#define IoRequestDpc(DeviceObject, Irp, Context)( \
+ KeInsertQueueDpc(&(DeviceObject)->Dpc, (Irp), (Context)))
+
+NTOSAPI
+VOID
+DDKAPI
+IoReuseIrp(
+ /*IN OUT*/ PIRP Irp,
+ /*IN*/ NTSTATUS Status);
+
+/*
+ * PDRIVER_CANCEL
+ * IoSetCancelRoutine(
+ * IN PIRP Irp,
+ * IN PDRIVER_CANCEL CancelRoutine)
+ */
+#define IoSetCancelRoutine(_Irp, \
+ _CancelRoutine) \
+ ((PDRIVER_CANCEL) InterlockedExchangePointer( \
+ (PVOID *) &(_Irp)->CancelRoutine, (PVOID) (_CancelRoutine)))
+
+/*
+ * VOID
+ * IoSetCompletionRoutine(
+ * IN PIRP Irp,
+ * IN PIO_COMPLETION_ROUTINE CompletionRoutine,
+ * IN PVOID Context,
+ * IN BOOLEAN InvokeOnSuccess,
+ * IN BOOLEAN InvokeOnError,
+ * IN BOOLEAN InvokeOnCancel)
+ */
+#define IoSetCompletionRoutine(_Irp, \
+ _CompletionRoutine, \
+ _Context, \
+ _InvokeOnSuccess, \
+ _InvokeOnError, \
+ _InvokeOnCancel) \
+{ \
+ PIO_STACK_LOCATION _IrpSp; \
+ ASSERT(_InvokeOnSuccess || _InvokeOnError || _InvokeOnCancel ? \
+ _CompletionRoutine != NULL : TRUE); \
+ _IrpSp = IoGetNextIrpStackLocation(_Irp); \
+ _IrpSp->CompletionRoutine = (PIO_COMPLETION_ROUTINE)(_CompletionRoutine); \
+ _IrpSp->Context = (_Context); \
+ _IrpSp->Control = 0; \
+ if (_InvokeOnSuccess) _IrpSp->Control = SL_INVOKE_ON_SUCCESS; \
+ if (_InvokeOnError) _IrpSp->Control |= SL_INVOKE_ON_ERROR; \
+ if (_InvokeOnCancel) _IrpSp->Control |= SL_INVOKE_ON_CANCEL; \
+}
+
+NTOSAPI
+VOID
+DDKAPI
+IoSetCompletionRoutineEx(
+ /*IN*/ PDEVICE_OBJECT DeviceObject,
+ /*IN*/ PIRP Irp,
+ /*IN*/ PIO_COMPLETION_ROUTINE CompletionRoutine,
+ /*IN*/ PVOID Context,
+ /*IN*/ BOOLEAN InvokeOnSuccess,
+ /*IN*/ BOOLEAN InvokeOnError,
+ /*IN*/ BOOLEAN InvokeOnCancel);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoSetDeviceInterfaceState(
+ /*IN*/ PUNICODE_STRING SymbolicLinkName,
+ /*IN*/ BOOLEAN Enable);
+
+NTOSAPI
+VOID
+DDKAPI
+IoSetHardErrorOrVerifyDevice(
+ /*IN*/ PIRP Irp,
+ /*IN*/ PDEVICE_OBJECT DeviceObject);
+
+/*
+ * VOID
+ * IoSetNextIrpStackLocation(
+ * IN OUT PIRP Irp)
+ */
+#define IoSetNextIrpStackLocation(_Irp) \
+{ \
+ (_Irp)->CurrentLocation--; \
+ (_Irp)->Tail.Overlay.CurrentStackLocation--; \
+}
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoSetPartitionInformationEx(
+ /*IN*/ PDEVICE_OBJECT DeviceObject,
+ /*IN*/ ULONG PartitionNumber,
+ /*IN*/ struct _SET_PARTITION_INFORMATION_EX *PartitionInfo);
+
+NTOSAPI
+VOID
+DDKAPI
+IoSetShareAccess(
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ ULONG DesiredShareAccess,
+ /*IN OUT*/ PFILE_OBJECT FileObject,
+ /*OUT*/ PSHARE_ACCESS ShareAccess);
+
+NTOSAPI
+VOID
+DDKAPI
+IoSetStartIoAttributes(
+ /*IN*/ PDEVICE_OBJECT DeviceObject,
+ /*IN*/ BOOLEAN DeferredStartIo,
+ /*IN*/ BOOLEAN NonCancelable);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoSetSystemPartition(
+ /*IN*/ PUNICODE_STRING VolumeNameString);
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+IoSetThreadHardErrorMode(
+ /*IN*/ BOOLEAN EnableHardErrors);
+
+/*
+ * USHORT
+ * IoSizeOfIrp(
+ * IN CCHAR StackSize)
+ */
+#define IoSizeOfIrp(_StackSize) \
+ ((USHORT) (sizeof(IRP) + ((_StackSize) * (sizeof(IO_STACK_LOCATION)))))
+
+/*
+ * VOID
+ * IoSkipCurrentIrpStackLocation(
+ * IN PIRP Irp)
+ */
+#define IoSkipCurrentIrpStackLocation(_Irp) \
+{ \
+ (_Irp)->CurrentLocation++; \
+ (_Irp)->Tail.Overlay.CurrentStackLocation++; \
+}
+
+NTOSAPI
+VOID
+DDKAPI
+IoStartNextPacket(
+ /*IN*/ PDEVICE_OBJECT DeviceObject,
+ /*IN*/ BOOLEAN Cancelable);
+
+NTOSAPI
+VOID
+DDKAPI
+IoStartNextPacketByKey(
+ /*IN*/ PDEVICE_OBJECT DeviceObject,
+ /*IN*/ BOOLEAN Cancelable,
+ /*IN*/ ULONG Key);
+
+NTOSAPI
+VOID
+DDKAPI
+IoStartPacket(
+ /*IN*/ PDEVICE_OBJECT DeviceObject,
+ /*IN*/ PIRP Irp,
+ /*IN*/ PULONG Key /*OPTIONAL*/,
+ /*IN*/ PDRIVER_CANCEL CancelFunction /*OPTIONAL*/);
+
+NTOSAPI
+VOID
+DDKAPI
+IoStartTimer(
+ /*IN*/ PDEVICE_OBJECT DeviceObject);
+
+NTOSAPI
+VOID
+DDKAPI
+IoStopTimer(
+ /*IN*/ PDEVICE_OBJECT DeviceObject);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoUnregisterPlugPlayNotification(
+ /*IN*/ PVOID NotificationEntry);
+
+NTOSAPI
+VOID
+DDKAPI
+IoUnregisterShutdownNotification(
+ /*IN*/ PDEVICE_OBJECT DeviceObject);
+
+NTOSAPI
+VOID
+DDKAPI
+IoUpdateShareAccess(
+ /*IN*/ PFILE_OBJECT FileObject,
+ /*IN OUT*/ PSHARE_ACCESS ShareAccess);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoVerifyPartitionTable(
+ /*IN*/ PDEVICE_OBJECT DeviceObject,
+ /*IN*/ BOOLEAN FixErrors);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoVolumeDeviceToDosName(
+ /*IN*/ PVOID VolumeDeviceObject,
+ /*OUT*/ PUNICODE_STRING DosName);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoWMIAllocateInstanceIds(
+ /*IN*/ GUID *Guid,
+ /*IN*/ ULONG InstanceCount,
+ /*OUT*/ ULONG *FirstInstanceId);
+
+NTOSAPI
+ULONG
+DDKAPI
+IoWMIDeviceObjectToProviderId(
+ /*IN*/ PDEVICE_OBJECT DeviceObject);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoWMIDeviceObjectToInstanceName(
+ /*IN*/ PVOID DataBlockObject,
+ /*IN*/ PDEVICE_OBJECT DeviceObject,
+ /*OUT*/ PUNICODE_STRING InstanceName);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoWMIExecuteMethod(
+ /*IN*/ PVOID DataBlockObject,
+ /*IN*/ PUNICODE_STRING InstanceName,
+ /*IN*/ ULONG MethodId,
+ /*IN*/ ULONG InBufferSize,
+ /*IN OUT*/ PULONG OutBufferSize,
+ /*IN OUT*/ PUCHAR InOutBuffer);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoWMIHandleToInstanceName(
+ /*IN*/ PVOID DataBlockObject,
+ /*IN*/ HANDLE FileHandle,
+ /*OUT*/ PUNICODE_STRING InstanceName);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoWMIOpenBlock(
+ /*IN*/ GUID *DataBlockGuid,
+ /*IN*/ ULONG DesiredAccess,
+ /*OUT*/ PVOID *DataBlockObject);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoWMIQueryAllData(
+ /*IN*/ PVOID DataBlockObject,
+ /*IN OUT*/ ULONG *InOutBufferSize,
+ /*OUT*/ PVOID OutBuffer);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoWMIQueryAllDataMultiple(
+ /*IN*/ PVOID *DataBlockObjectList,
+ /*IN*/ ULONG ObjectCount,
+ /*IN OUT*/ ULONG *InOutBufferSize,
+ /*OUT*/ PVOID OutBuffer);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoWMIQuerySingleInstance(
+ /*IN*/ PVOID DataBlockObject,
+ /*IN*/ PUNICODE_STRING InstanceName,
+ /*IN OUT*/ ULONG *InOutBufferSize,
+ /*OUT*/ PVOID OutBuffer);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoWMIQuerySingleInstanceMultiple(
+ /*IN*/ PVOID *DataBlockObjectList,
+ /*IN*/ PUNICODE_STRING InstanceNames,
+ /*IN*/ ULONG ObjectCount,
+ /*IN OUT*/ ULONG *InOutBufferSize,
+ /*OUT*/ PVOID OutBuffer);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoWMIRegistrationControl(
+ /*IN*/ PDEVICE_OBJECT DeviceObject,
+ /*IN*/ ULONG Action);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoWMISetNotificationCallback(
+ /*IN*/ PVOID Object,
+ /*IN*/ WMI_NOTIFICATION_CALLBACK Callback,
+ /*IN*/ PVOID Context);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoWMISetSingleInstance(
+ /*IN*/ PVOID DataBlockObject,
+ /*IN*/ PUNICODE_STRING InstanceName,
+ /*IN*/ ULONG Version,
+ /*IN*/ ULONG ValueBufferSize,
+ /*IN*/ PVOID ValueBuffer);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoWMISetSingleItem(
+ /*IN*/ PVOID DataBlockObject,
+ /*IN*/ PUNICODE_STRING InstanceName,
+ /*IN*/ ULONG DataItemId,
+ /*IN*/ ULONG Version,
+ /*IN*/ ULONG ValueBufferSize,
+ /*IN*/ PVOID ValueBuffer);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoWMISuggestInstanceName(
+ /*IN*/ PDEVICE_OBJECT PhysicalDeviceObject /*OPTIONAL*/,
+ /*IN*/ PUNICODE_STRING SymbolicLinkName /*OPTIONAL*/,
+ /*IN*/ BOOLEAN CombineNames,
+ /*OUT*/ PUNICODE_STRING SuggestedInstanceName);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoWMIWriteEvent(
+ /*IN*/ PVOID WnodeEventItem);
+
+NTOSAPI
+VOID
+DDKAPI
+IoWriteErrorLogEntry(
+ /*IN*/ PVOID ElEntry);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoWritePartitionTableEx(
+ /*IN*/ PDEVICE_OBJECT DeviceObject,
+ /*IN*/ struct _DRIVE_LAYOUT_INFORMATION_EX *PartitionBuffer);
+
+
+
+/** Kernel routines **/
+
+NTOSAPI
+VOID
+DDKFASTAPI
+KeAcquireInStackQueuedSpinLock(
+ /*IN*/ PKSPIN_LOCK SpinLock,
+ /*IN*/ PKLOCK_QUEUE_HANDLE LockHandle);
+
+NTOSAPI
+VOID
+DDKFASTAPI
+KeAcquireInStackQueuedSpinLockAtDpcLevel(
+ /*IN*/ PKSPIN_LOCK SpinLock,
+ /*IN*/ PKLOCK_QUEUE_HANDLE LockHandle);
+
+NTOSAPI
+KIRQL
+DDKAPI
+KeAcquireInterruptSpinLock(
+ /*IN*/ PKINTERRUPT Interrupt);
+
+NTOSAPI
+VOID
+DDKAPI
+KeAcquireSpinLock(
+ /*IN*/ PKSPIN_LOCK SpinLock,
+ /*OUT*/ PKIRQL OldIrql);
+
+/* System Service Dispatch Table */
+typedef PVOID (NTAPI * SSDT)(VOID);
+typedef SSDT * PSSDT;
+
+/* System Service Parameters Table */
+typedef UCHAR SSPT, * PSSPT;
+
+typedef struct _SSDT_ENTRY {
+ PSSDT SSDT;
+ PULONG ServiceCounterTable;
+ ULONG NumberOfServices;
+ PSSPT SSPT;
+} SSDT_ENTRY, *PSSDT_ENTRY;
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+KeAddSystemServiceTable(
+ /*IN*/ PSSDT SSDT,
+ /*IN*/ PULONG ServiceCounterTable,
+ /*IN*/ ULONG NumberOfServices,
+ /*IN*/ PSSPT SSPT,
+ /*IN*/ ULONG TableIndex);
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+KeAreApcsDisabled(
+ VOID);
+
+NTOSAPI
+VOID
+DDKAPI
+KeAttachProcess(
+ /*IN*/ PEPROCESS Process);
+
+NTOSAPI
+VOID
+DDKAPI
+KeBugCheck(
+ /*IN*/ ULONG BugCheckCode);
+
+NTOSAPI
+VOID
+DDKAPI
+KeBugCheckEx(
+ /*IN*/ ULONG BugCheckCode,
+ /*IN*/ ULONG_PTR BugCheckParameter1,
+ /*IN*/ ULONG_PTR BugCheckParameter2,
+ /*IN*/ ULONG_PTR BugCheckParameter3,
+ /*IN*/ ULONG_PTR BugCheckParameter4);
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+KeCancelTimer(
+ /*IN*/ PKTIMER Timer);
+
+NTOSAPI
+VOID
+DDKAPI
+KeClearEvent(
+ /*IN*/ PRKEVENT Event);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+KeDelayExecutionThread(
+ /*IN*/ KPROCESSOR_MODE WaitMode,
+ /*IN*/ BOOLEAN Alertable,
+ /*IN*/ PLARGE_INTEGER Interval);
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+KeDeregisterBugCheckCallback(
+ /*IN*/ PKBUGCHECK_CALLBACK_RECORD CallbackRecord);
+
+NTOSAPI
+VOID
+DDKAPI
+KeDetachProcess(
+ VOID);
+
+NTOSAPI
+VOID
+DDKAPI
+KeEnterCriticalRegion(
+ VOID);
+
+/*
+ * VOID
+ * KeFlushIoBuffers(
+ * IN PMDL Mdl,
+ * IN BOOLEAN ReadOperation,
+ * IN BOOLEAN DmaOperation)
+ */
+#define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation)
+
+NTOSAPI
+VOID
+DDKAPI
+KeFlushQueuedDpcs(VOID);
+
+NTOSAPI
+PRKTHREAD
+DDKAPI
+KeGetCurrentThread(
+ VOID);
+
+NTOSAPI
+KPROCESSOR_MODE
+DDKAPI
+KeGetPreviousMode(
+ VOID);
+
+NTOSAPI
+ULONG
+DDKAPI
+KeGetRecommendedSharedDataAlignment(
+ VOID);
+
+NTOSAPI
+VOID
+DDKAPI
+KeInitializeApc(
+ /*IN*/ PKAPC Apc,
+ /*IN*/ PKTHREAD Thread,
+ /*IN*/ UCHAR StateIndex,
+ /*IN*/ PKKERNEL_ROUTINE KernelRoutine,
+ /*IN*/ PKRUNDOWN_ROUTINE RundownRoutine,
+ /*IN*/ PKNORMAL_ROUTINE NormalRoutine,
+ /*IN*/ UCHAR Mode,
+ /*IN*/ PVOID Context);
+
+NTOSAPI
+VOID
+DDKAPI
+KeInitializeDeviceQueue(
+ /*IN*/ PKDEVICE_QUEUE DeviceQueue);
+
+NTOSAPI
+VOID
+DDKAPI
+KeInitializeMutex(
+ /*IN*/ PRKMUTEX Mutex,
+ /*IN*/ ULONG Level);
+
+NTOSAPI
+VOID
+DDKAPI
+KeInitializeSemaphore(
+ /*IN*/ PRKSEMAPHORE Semaphore,
+ /*IN*/ LONG Count,
+ /*IN*/ LONG Limit);
+
+NTOSAPI
+VOID
+DDKAPI
+KeInitializeSpinLock(
+ /*IN*/ PKSPIN_LOCK SpinLock);
+
+NTOSAPI
+VOID
+DDKAPI
+KeInitializeTimer(
+ /*IN*/ PKTIMER Timer);
+
+NTOSAPI
+VOID
+DDKAPI
+KeInitializeTimerEx(
+ /*IN*/ PKTIMER Timer,
+ /*IN*/ TIMER_TYPE Type);
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+KeInsertByKeyDeviceQueue(
+ /*IN*/ PKDEVICE_QUEUE DeviceQueue,
+ /*IN*/ PKDEVICE_QUEUE_ENTRY DeviceQueueEntry,
+ /*IN*/ ULONG SortKey);
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+KeInsertDeviceQueue(
+ /*IN*/ PKDEVICE_QUEUE DeviceQueue,
+ /*IN*/ PKDEVICE_QUEUE_ENTRY DeviceQueueEntry);
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+KeInsertQueueDpc(
+ /*IN*/ PRKDPC Dpc,
+ /*IN*/ PVOID SystemArgument1,
+ /*IN*/ PVOID SystemArgument2);
+
+NTOSAPI
+VOID
+DDKAPI
+KeLeaveCriticalRegion(
+ VOID);
+
+#define KeMemoryBarrier() asm("mfence;")
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+KePulseEvent(
+ /*IN*/ PRKEVENT Event,
+ /*IN*/ KPRIORITY Increment,
+ /*IN*/ BOOLEAN Wait);
+
+NTOSAPI
+ULONGLONG
+DDKAPI
+KeQueryInterruptTime(
+ VOID);
+
+NTOSAPI
+LARGE_INTEGER
+DDKAPI
+KeQueryPerformanceCounter(
+ /*OUT*/ PLARGE_INTEGER PerformanceFrequency /*OPTIONAL*/);
+
+NTOSAPI
+KPRIORITY
+DDKAPI
+KeQueryPriorityThread(
+ /*IN*/ PRKTHREAD Thread);
+
+NTOSAPI
+VOID
+DDKAPI
+KeQuerySystemTime(
+ /*OUT*/ PLARGE_INTEGER CurrentTime);
+
+NTOSAPI
+VOID
+DDKAPI
+KeQueryTickCount(
+ /*OUT*/ PLARGE_INTEGER TickCount);
+
+NTOSAPI
+ULONG
+DDKAPI
+KeQueryTimeIncrement(
+ VOID);
+
+NTOSAPI
+LONG
+DDKAPI
+KeReadStateEvent(
+ /*IN*/ PRKEVENT Event);
+
+NTOSAPI
+LONG
+DDKAPI
+KeReadStateMutex(
+ /*IN*/ PRKMUTEX Mutex);
+
+NTOSAPI
+LONG
+DDKAPI
+KeReadStateSemaphore(
+ /*IN*/ PRKSEMAPHORE Semaphore);
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+KeReadStateTimer(
+ /*IN*/ PKTIMER Timer);
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+KeRegisterBugCheckCallback(
+ /*IN*/ PKBUGCHECK_CALLBACK_RECORD CallbackRecord,
+ /*IN*/ PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine,
+ /*IN*/ PVOID Buffer,
+ /*IN*/ ULONG Length,
+ /*IN*/ PUCHAR Component);
+
+NTOSAPI
+VOID
+DDKFASTAPI
+KeReleaseInStackQueuedSpinLock(
+ /*IN*/ PKLOCK_QUEUE_HANDLE LockHandle);
+
+NTOSAPI
+VOID
+DDKFASTAPI
+KeReleaseInStackQueuedSpinLockFromDpcLevel(
+ /*IN*/ PKLOCK_QUEUE_HANDLE LockHandle);
+
+NTOSAPI
+VOID
+DDKAPI
+KeReleaseInterruptSpinLock(
+ /*IN*/ PKINTERRUPT Interrupt,
+ /*IN*/ KIRQL OldIrql);
+
+NTOSAPI
+LONG
+DDKAPI
+KeReleaseMutex(
+ /*IN*/ PRKMUTEX Mutex,
+ /*IN*/ BOOLEAN Wait);
+
+NTOSAPI
+LONG
+DDKAPI
+KeReleaseSemaphore(
+ /*IN*/ PRKSEMAPHORE Semaphore,
+ /*IN*/ KPRIORITY Increment,
+ /*IN*/ LONG Adjustment,
+ /*IN*/ BOOLEAN Wait);
+
+NTOSAPI
+VOID
+DDKAPI
+KeReleaseSpinLock(
+ /*IN*/ PKSPIN_LOCK SpinLock,
+ /*IN*/ KIRQL NewIrql);
+
+NTOSAPI
+PKDEVICE_QUEUE_ENTRY
+DDKAPI
+KeRemoveByKeyDeviceQueue(
+ /*IN*/ PKDEVICE_QUEUE DeviceQueue,
+ /*IN*/ ULONG SortKey);
+
+NTOSAPI
+PKDEVICE_QUEUE_ENTRY
+DDKAPI
+KeRemoveDeviceQueue(
+ /*IN*/ PKDEVICE_QUEUE DeviceQueue);
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+KeRemoveEntryDeviceQueue(
+ /*IN*/ PKDEVICE_QUEUE DeviceQueue,
+ /*IN*/ PKDEVICE_QUEUE_ENTRY DeviceQueueEntry);
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+KeRemoveQueueDpc(
+ /*IN*/ PRKDPC Dpc);
+
+NTOSAPI
+LONG
+DDKAPI
+KeResetEvent(
+ /*IN*/ PRKEVENT Event);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+KeRestoreFloatingPointState(
+ /*IN*/ PKFLOATING_SAVE FloatSave);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+KeSaveFloatingPointState(
+ /*OUT*/ PKFLOATING_SAVE FloatSave);
+
+NTOSAPI
+LONG
+DDKAPI
+KeSetBasePriorityThread(
+ /*IN*/ PRKTHREAD Thread,
+ /*IN*/ LONG Increment);
+
+NTOSAPI
+LONG
+DDKAPI
+KeSetEvent(
+ /*IN*/ PRKEVENT Event,
+ /*IN*/ KPRIORITY Increment,
+ /*IN*/ BOOLEAN Wait);
+
+NTOSAPI
+VOID
+DDKAPI
+KeSetImportanceDpc(
+ /*IN*/ PRKDPC Dpc,
+ /*IN*/ KDPC_IMPORTANCE Importance);
+
+NTOSAPI
+KPRIORITY
+DDKAPI
+KeSetPriorityThread(
+ /*IN*/ PKTHREAD Thread,
+ /*IN*/ KPRIORITY Priority);
+
+NTOSAPI
+VOID
+DDKAPI
+KeSetTargetProcessorDpc(
+ /*IN*/ PRKDPC Dpc,
+ /*IN*/ CCHAR Number);
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+KeSetTimer(
+ /*IN*/ PKTIMER Timer,
+ /*IN*/ LARGE_INTEGER DueTime,
+ /*IN*/ PKDPC Dpc /*OPTIONAL*/);
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+KeSetTimerEx(
+ /*IN*/ PKTIMER Timer,
+ /*IN*/ LARGE_INTEGER DueTime,
+ /*IN*/ LONG Period /*OPTIONAL*/,
+ /*IN*/ PKDPC Dpc /*OPTIONAL*/);
+
+NTOSAPI
+VOID
+DDKFASTAPI
+KeSetTimeUpdateNotifyRoutine(
+ /*IN*/ PTIME_UPDATE_NOTIFY_ROUTINE NotifyRoutine);
+
+NTOSAPI
+VOID
+DDKAPI
+KeStallExecutionProcessor(
+ /*IN*/ ULONG MicroSeconds);
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+KeSynchronizeExecution(
+ /*IN*/ PKINTERRUPT Interrupt,
+ /*IN*/ PKSYNCHRONIZE_ROUTINE SynchronizeRoutine,
+ /*IN*/ PVOID SynchronizeContext);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+KeWaitForMultipleObjects(
+ /*IN*/ ULONG Count,
+ /*IN*/ PVOID Object[],
+ /*IN*/ WAIT_TYPE WaitType,
+ /*IN*/ KWAIT_REASON WaitReason,
+ /*IN*/ KPROCESSOR_MODE WaitMode,
+ /*IN*/ BOOLEAN Alertable,
+ /*IN*/ PLARGE_INTEGER Timeout /*OPTIONAL */,
+ /*IN*/ PKWAIT_BLOCK WaitBlockArray /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+KeWaitForMutexObject(
+ /*IN*/ PRKMUTEX Mutex,
+ /*IN*/ KWAIT_REASON WaitReason,
+ /*IN*/ KPROCESSOR_MODE WaitMode,
+ /*IN*/ BOOLEAN Alertable,
+ /*IN*/ PLARGE_INTEGER Timeout /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+KeWaitForSingleObject(
+ /*IN*/ PVOID Object,
+ /*IN*/ KWAIT_REASON WaitReason,
+ /*IN*/ KPROCESSOR_MODE WaitMode,
+ /*IN*/ BOOLEAN Alertable,
+ /*IN*/ PLARGE_INTEGER Timeout /*OPTIONAL*/);
+
+NTOSAPI
+VOID
+DDKAPI
+KeRaiseIrql(
+ /*IN*/ KIRQL new_irql,
+ /*OUT*/ PKIRQL old_irql);
+
+NTOSAPI
+VOID
+DDKAPI
+KeLowerIrql(
+ /*IN*/ KIRQL irql);
+
+NTOSAPI
+KIRQL
+DDKAPI
+KeRaiseIrqlToDpcLevel(
+ VOID);
+
+/** Memory manager routines **/
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+MmAdvanceMdl(
+ /*IN*/ PMDL Mdl,
+ /*IN*/ ULONG NumberOfBytes);
+
+NTOSAPI
+PVOID
+DDKAPI
+MmAllocateContiguousMemory(
+ /*IN*/ ULONG NumberOfBytes,
+ /*IN*/ PHYSICAL_ADDRESS HighestAcceptableAddress);
+
+NTOSAPI
+PVOID
+DDKAPI
+MmAllocateContiguousMemorySpecifyCache(
+ /*IN*/ SIZE_T NumberOfBytes,
+ /*IN*/ PHYSICAL_ADDRESS LowestAcceptableAddress,
+ /*IN*/ PHYSICAL_ADDRESS HighestAcceptableAddress,
+ /*IN*/ PHYSICAL_ADDRESS BoundaryAddressMultiple /*OPTIONAL*/,
+ /*IN*/ MEMORY_CACHING_TYPE CacheType);
+
+NTOSAPI
+PVOID
+DDKAPI
+MmAllocateMappingAddress(
+ /*IN*/ SIZE_T NumberOfBytes,
+ /*IN*/ ULONG PoolTag);
+
+NTOSAPI
+PVOID
+DDKAPI
+MmAllocateNonCachedMemory(
+ /*IN*/ ULONG NumberOfBytes);
+
+NTOSAPI
+PMDL
+DDKAPI
+MmAllocatePagesForMdl(
+ /*IN*/ PHYSICAL_ADDRESS LowAddress,
+ /*IN*/ PHYSICAL_ADDRESS HighAddress,
+ /*IN*/ PHYSICAL_ADDRESS SkipBytes,
+ /*IN*/ SIZE_T TotalBytes);
+
+NTOSAPI
+VOID
+DDKAPI
+MmBuildMdlForNonPagedPool(
+ /*IN OUT*/ PMDL MemoryDescriptorList);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+MmCreateSection(
+ /*OUT*/ PSECTION_OBJECT *SectionObject,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes /*OPTIONAL*/,
+ /*IN*/ PLARGE_INTEGER MaximumSize,
+ /*IN*/ ULONG SectionPageProtection,
+ /*IN*/ ULONG AllocationAttributes,
+ /*IN*/ HANDLE FileHandle /*OPTIONAL*/,
+ /*IN*/ PFILE_OBJECT File /*OPTIONAL*/);
+
+typedef enum _MMFLUSH_TYPE {
+ MmFlushForDelete,
+ MmFlushForWrite
+} MMFLUSH_TYPE;
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+MmFlushImageSection(
+ /*IN*/ PSECTION_OBJECT_POINTERS SectionObjectPointer,
+ /*IN*/ MMFLUSH_TYPE FlushType);
+
+NTOSAPI
+VOID
+DDKAPI
+MmFreeContiguousMemory(
+ /*IN*/ PVOID BaseAddress);
+
+NTOSAPI
+VOID
+DDKAPI
+MmFreeContiguousMemorySpecifyCache(
+ /*IN*/ PVOID BaseAddress,
+ /*IN*/ SIZE_T NumberOfBytes,
+ /*IN*/ MEMORY_CACHING_TYPE CacheType);
+
+NTOSAPI
+VOID
+DDKAPI
+MmFreeMappingAddress(
+ /*IN*/ PVOID BaseAddress,
+ /*IN*/ ULONG PoolTag);
+
+NTOSAPI
+VOID
+DDKAPI
+MmFreeNonCachedMemory(
+ /*IN*/ PVOID BaseAddress,
+ /*IN*/ SIZE_T NumberOfBytes);
+
+NTOSAPI
+VOID
+DDKAPI
+MmFreePagesFromMdl(
+ /*IN*/ PMDL MemoryDescriptorList);
+
+/*
+ * ULONG
+ * MmGetMdlByteCount(
+ * IN PMDL Mdl)
+ */
+#define MmGetMdlByteCount(_Mdl) \
+ ((_Mdl)->ByteCount)
+
+/*
+ * ULONG
+ * MmGetMdlByteOffset(
+ * IN PMDL Mdl)
+ */
+#define MmGetMdlByteOffset(_Mdl) \
+ ((_Mdl)->ByteOffset)
+
+/*
+ * PPFN_NUMBER
+ * MmGetMdlPfnArray(
+ * IN PMDL Mdl)
+ */
+#define MmGetMdlPfnArray(_Mdl) \
+ ((PPFN_NUMBER) ((_Mdl) + 1))
+
+/*
+ * PVOID
+ * MmGetMdlVirtualAddress(
+ * IN PMDL Mdl)
+ */
+#define MmGetMdlVirtualAddress(_Mdl) \
+ ((PVOID) ((PCHAR) ((_Mdl)->StartVa) + (_Mdl)->ByteOffset))
+
+NTOSAPI
+PHYSICAL_ADDRESS
+DDKAPI
+MmGetPhysicalAddress(
+ /*IN*/ PVOID BaseAddress);
+
+NTOSAPI
+PPHYSICAL_MEMORY_RANGE
+DDKAPI
+MmGetPhysicalMemoryRanges(
+ VOID);
+
+NTOSAPI
+PVOID
+DDKAPI
+MmGetVirtualForPhysical(
+ /*IN*/ PHYSICAL_ADDRESS PhysicalAddress);
+
+NTOSAPI
+PVOID
+DDKAPI
+MmMapLockedPagesSpecifyCache(
+ /*IN*/ PMDL MemoryDescriptorList,
+ /*IN*/ KPROCESSOR_MODE AccessMode,
+ /*IN*/ MEMORY_CACHING_TYPE CacheType,
+ /*IN*/ PVOID BaseAddress,
+ /*IN*/ ULONG BugCheckOnFailure,
+ /*IN*/ MM_PAGE_PRIORITY Priority);
+
+NTOSAPI
+PVOID
+DDKAPI
+MmMapLockedPagesWithReservedMapping(
+ /*IN*/ PVOID MappingAddress,
+ /*IN*/ ULONG PoolTag,
+ /*IN*/ PMDL MemoryDescriptorList,
+ /*IN*/ MEMORY_CACHING_TYPE CacheType);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+MmMapUserAddressesToPage(
+ /*IN*/ PVOID BaseAddress,
+ /*IN*/ SIZE_T NumberOfBytes,
+ /*IN*/ PVOID PageAddress);
+
+NTOSAPI
+PVOID
+DDKAPI
+MmMapVideoDisplay(
+ /*IN*/ PHYSICAL_ADDRESS PhysicalAddress,
+ /*IN*/ SIZE_T NumberOfBytes,
+ /*IN*/ MEMORY_CACHING_TYPE CacheType);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+MmMapViewInSessionSpace(
+ /*IN*/ PVOID Section,
+ /*OUT*/ PVOID *MappedBase,
+ /*IN OUT*/ PSIZE_T ViewSize);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+MmMapViewInSystemSpace(
+ /*IN*/ PVOID Section,
+ /*OUT*/ PVOID *MappedBase,
+ /*IN*/ PSIZE_T ViewSize);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+MmMarkPhysicalMemoryAsBad(
+ /*IN*/ PPHYSICAL_ADDRESS StartAddress,
+ /*IN OUT*/ PLARGE_INTEGER NumberOfBytes);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+MmMarkPhysicalMemoryAsGood(
+ /*IN*/ PPHYSICAL_ADDRESS StartAddress,
+ /*IN OUT*/ PLARGE_INTEGER NumberOfBytes);
+
+/*
+ * PVOID
+ * MmGetSystemAddressForMdlSafe(
+ * IN PMDL Mdl,
+ * IN MM_PAGE_PRIORITY Priority)
+ */
+#define MmGetSystemAddressForMdlSafe(_Mdl, _Priority) \
+ ((_Mdl)->MdlFlags & (MDL_MAPPED_TO_SYSTEM_VA \
+ | MDL_SOURCE_IS_NONPAGED_POOL)) ? \
+ (_Mdl)->MappedSystemVa : \
+ (PVOID) MmMapLockedPagesSpecifyCache((_Mdl), \
+ KernelMode, MmCached, NULL, FALSE, _Priority)
+
+NTOSAPI
+PVOID
+DDKAPI
+MmGetSystemRoutineAddress(
+ /*IN*/ PUNICODE_STRING SystemRoutineName);
+
+/*
+ * ULONG
+ * ADDRESS_AND_SIZE_TO_SPAN_PAGES(
+ * IN PVOID Va,
+ * IN ULONG Size)
+ */
+#define ADDRESS_AND_SIZE_TO_SPAN_PAGES(_Va, \
+ _Size) \
+ ((ULONG) ((((ULONG_PTR) (_Va) & (PAGE_SIZE - 1)) \
+ + (_Size) + (PAGE_SIZE - 1)) >> PAGE_SHIFT))
+
+/*
+ * VOID
+ * MmInitializeMdl(
+ * IN PMDL MemoryDescriptorList,
+ * IN PVOID BaseVa,
+ * IN SIZE_T Length)
+ */
+#define MmInitializeMdl(_MemoryDescriptorList, \
+ _BaseVa, \
+ _Length) \
+{ \
+ (_MemoryDescriptorList)->Next = (PMDL) NULL; \
+ (_MemoryDescriptorList)->Size = (CSHORT) (sizeof(MDL) + \
+ (sizeof(PFN_NUMBER) * ADDRESS_AND_SIZE_TO_SPAN_PAGES(_BaseVa, _Length))); \
+ (_MemoryDescriptorList)->MdlFlags = 0; \
+ (_MemoryDescriptorList)->StartVa = (PVOID) PAGE_ALIGN(_BaseVa); \
+ (_MemoryDescriptorList)->ByteOffset = BYTE_OFFSET(_BaseVa); \
+ (_MemoryDescriptorList)->ByteCount = (ULONG) _Length; \
+}
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+MmIsAddressValid(
+ /*IN*/ PVOID VirtualAddress);
+
+NTOSAPI
+LOGICAL
+DDKAPI
+MmIsDriverVerifying(
+ /*IN*/ PDRIVER_OBJECT DriverObject);
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+MmIsThisAnNtAsSystem(
+ VOID);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+MmIsVerifierEnabled(
+ /*OUT*/ PULONG VerifierFlags);
+
+NTOSAPI
+PVOID
+DDKAPI
+MmLockPagableDataSection(
+ /*IN*/ PVOID AddressWithinSection);
+
+NTOSAPI
+PVOID
+DDKAPI
+MmLockPagableImageSection(
+ /*IN*/ PVOID AddressWithinSection);
+
+/*
+ * PVOID
+ * MmLockPagableCodeSection(
+ * IN PVOID AddressWithinSection)
+ */
+#define MmLockPagableCodeSection MmLockPagableDataSection
+
+NTOSAPI
+VOID
+DDKAPI
+MmLockPagableSectionByHandle(
+ /*IN*/ PVOID ImageSectionHandle);
+
+NTOSAPI
+PVOID
+DDKAPI
+MmMapIoSpace(
+ /*IN*/ PHYSICAL_ADDRESS PhysicalAddress,
+ /*IN*/ ULONG NumberOfBytes,
+ /*IN*/ MEMORY_CACHING_TYPE CacheEnable);
+
+NTOSAPI
+PVOID
+DDKAPI
+MmMapLockedPages(
+ /*IN*/ PMDL MemoryDescriptorList,
+ /*IN*/ KPROCESSOR_MODE AccessMode);
+
+NTOSAPI
+VOID
+DDKAPI
+MmPageEntireDriver(
+ /*IN*/ PVOID AddressWithinSection);
+
+NTOSAPI
+VOID
+DDKAPI
+MmProbeAndLockProcessPages(
+ /*IN OUT*/ PMDL MemoryDescriptorList,
+ /*IN*/ PEPROCESS Process,
+ /*IN*/ KPROCESSOR_MODE AccessMode,
+ /*IN*/ LOCK_OPERATION Operation);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+MmProtectMdlSystemAddress(
+ /*IN*/ PMDL MemoryDescriptorList,
+ /*IN*/ ULONG NewProtect);
+
+NTOSAPI
+VOID
+DDKAPI
+MmUnmapLockedPages(
+ /*IN*/ PVOID BaseAddress,
+ /*IN*/ PMDL MemoryDescriptorList);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+MmUnmapViewInSessionSpace(
+ /*IN*/ PVOID MappedBase);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+MmUnmapViewInSystemSpace(
+ /*IN*/ PVOID MappedBase);
+
+NTOSAPI
+VOID
+DDKAPI
+MmUnsecureVirtualMemory(
+ /*IN*/ HANDLE SecureHandle);
+
+/*
+ * VOID
+ * MmPrepareMdlForReuse(
+ * IN PMDL Mdl)
+ */
+#define MmPrepareMdlForReuse(_Mdl) \
+{ \
+ if (((_Mdl)->MdlFlags & MDL_PARTIAL_HAS_BEEN_MAPPED) != 0) { \
+ ASSERT(((_Mdl)->MdlFlags & MDL_PARTIAL) != 0); \
+ MmUnmapLockedPages((_Mdl)->MappedSystemVa, (_Mdl)); \
+ } else if (((_Mdl)->MdlFlags & MDL_PARTIAL) == 0) { \
+ ASSERT(((_Mdl)->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA) == 0); \
+ } \
+}
+
+NTOSAPI
+VOID
+DDKAPI
+MmProbeAndLockPages(
+ /*IN OUT*/ PMDL MemoryDescriptorList,
+ /*IN*/ KPROCESSOR_MODE AccessMode,
+ /*IN*/ LOCK_OPERATION Operation);
+
+NTOSAPI
+MM_SYSTEM_SIZE
+DDKAPI
+MmQuerySystemSize(
+ VOID);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+MmRemovePhysicalMemory(
+ /*IN*/ PPHYSICAL_ADDRESS StartAddress,
+ /*IN OUT*/ PLARGE_INTEGER NumberOfBytes);
+
+NTOSAPI
+VOID
+DDKAPI
+MmResetDriverPaging(
+ /*IN*/ PVOID AddressWithinSection);
+
+NTOSAPI
+HANDLE
+DDKAPI
+MmSecureVirtualMemory(
+ /*IN*/ PVOID Address,
+ /*IN*/ SIZE_T Size,
+ /*IN*/ ULONG ProbeMode);
+
+NTOSAPI
+ULONG
+DDKAPI
+MmSizeOfMdl(
+ /*IN*/ PVOID Base,
+ /*IN*/ SIZE_T Length);
+
+NTOSAPI
+VOID
+DDKAPI
+MmUnlockPagableImageSection(
+ /*IN*/ PVOID ImageSectionHandle);
+
+NTOSAPI
+VOID
+DDKAPI
+MmUnlockPages(
+ /*IN*/ PMDL MemoryDescriptorList);
+
+NTOSAPI
+VOID
+DDKAPI
+MmUnmapIoSpace(
+ /*IN*/ PVOID BaseAddress,
+ /*IN*/ SIZE_T NumberOfBytes);
+
+NTOSAPI
+VOID
+DDKAPI
+MmUnmapReservedMapping(
+ /*IN*/ PVOID BaseAddress,
+ /*IN*/ ULONG PoolTag,
+ /*IN*/ PMDL MemoryDescriptorList);
+
+NTOSAPI
+VOID
+DDKAPI
+MmUnmapVideoDisplay(
+ /*IN*/ PVOID BaseAddress,
+ /*IN*/ SIZE_T NumberOfBytes);
+
+
+
+/** Object manager routines **/
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+ObAssignSecurity(
+ /*IN*/ PACCESS_STATE AccessState,
+ /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor,
+ /*IN*/ PVOID Object,
+ /*IN*/ POBJECT_TYPE Type);
+
+NTOSAPI
+VOID
+DDKAPI
+ObDereferenceSecurityDescriptor(
+ PSECURITY_DESCRIPTOR SecurityDescriptor,
+ ULONG Count);
+
+NTOSAPI
+VOID
+DDKFASTAPI
+ObfDereferenceObject(
+ /*IN*/ PVOID Object);
+
+/*
+ * VOID
+ * ObDereferenceObject(
+ * IN PVOID Object)
+ */
+#define ObDereferenceObject ObfDereferenceObject
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+ObGetObjectSecurity(
+ /*IN*/ PVOID Object,
+ /*OUT*/ PSECURITY_DESCRIPTOR *SecurityDescriptor,
+ /*OUT*/ PBOOLEAN MemoryAllocated);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+ObInsertObject(
+ /*IN*/ PVOID Object,
+ /*IN*/ PACCESS_STATE PassedAccessState /*OPTIONAL*/,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ ULONG AdditionalReferences,
+ /*OUT*/ PVOID* ReferencedObject /*OPTIONAL*/,
+ /*OUT*/ PHANDLE Handle);
+
+NTOSAPI
+VOID
+DDKFASTAPI
+ObfReferenceObject(
+ /*IN*/ PVOID Object);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+ObLogSecurityDescriptor(
+ /*IN*/ PSECURITY_DESCRIPTOR InputSecurityDescriptor,
+ /*OUT*/ PSECURITY_DESCRIPTOR *OutputSecurityDescriptor,
+ /*IN*/ ULONG RefBias);
+/*
+ * VOID
+ * ObReferenceObject(
+ * IN PVOID Object)
+ */
+#define ObReferenceObject ObfReferenceObject
+
+NTOSAPI
+VOID
+DDKAPI
+ObMakeTemporaryObject(
+ /*IN*/ PVOID Object);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+ObOpenObjectByName(
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,
+ /*IN*/ POBJECT_TYPE ObjectType,
+ /*IN OUT*/ PVOID ParseContext /*OPTIONAL*/,
+ /*IN*/ KPROCESSOR_MODE AccessMode,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ PACCESS_STATE PassedAccessState,
+ /*OUT*/ PHANDLE Handle);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+ObOpenObjectByPointer(
+ /*IN*/ PVOID Object,
+ /*IN*/ ULONG HandleAttributes,
+ /*IN*/ PACCESS_STATE PassedAccessState /*OPTIONAL*/,
+ /*IN*/ ACCESS_MASK DesiredAccess /*OPTIONAL*/,
+ /*IN*/ POBJECT_TYPE ObjectType /*OPTIONAL*/,
+ /*IN*/ KPROCESSOR_MODE AccessMode,
+ /*OUT*/ PHANDLE Handle);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+ObQueryObjectAuditingByHandle(
+ /*IN*/ HANDLE Handle,
+ /*OUT*/ PBOOLEAN GenerateOnClose);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+ObReferenceObjectByHandle(
+ /*IN*/ HANDLE Handle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_TYPE ObjectType /*OPTIONAL*/,
+ /*IN*/ KPROCESSOR_MODE AccessMode,
+ /*OUT*/ PVOID *Object,
+ /*OUT*/ POBJECT_HANDLE_INFORMATION HandleInformation /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+ObReferenceObjectByName(
+ /*IN*/ PUNICODE_STRING ObjectPath,
+ /*IN*/ ULONG Attributes,
+ /*IN*/ PACCESS_STATE PassedAccessState /*OPTIONAL*/,
+ /*IN*/ ACCESS_MASK DesiredAccess /*OPTIONAL*/,
+ /*IN*/ POBJECT_TYPE ObjectType,
+ /*IN*/ KPROCESSOR_MODE AccessMode,
+ /*IN OUT*/ PVOID ParseContext /*OPTIONAL*/,
+ /*OUT*/ PVOID *Object);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+ObReferenceObjectByPointer(
+ /*IN*/ PVOID Object,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_TYPE ObjectType,
+ /*IN*/ KPROCESSOR_MODE AccessMode);
+
+NTOSAPI
+VOID
+DDKAPI
+ObReferenceSecurityDescriptor(
+ /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor,
+ /*IN*/ ULONG Count);
+
+NTOSAPI
+VOID
+DDKAPI
+ObReleaseObjectSecurity(
+ /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor,
+ /*IN*/ BOOLEAN MemoryAllocated);
+
+
+
+/** Process manager routines **/
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+PsCreateSystemProcess(
+ /*IN*/ PHANDLE ProcessHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+PsCreateSystemThread(
+ /*OUT*/ PHANDLE ThreadHandle,
+ /*IN*/ ULONG DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes /*OPTIONAL*/,
+ /*IN*/ HANDLE ProcessHandle /*OPTIONAL*/,
+ /*OUT*/ PCLIENT_ID ClientId /*OPTIONAL*/,
+ /*IN*/ PKSTART_ROUTINE StartRoutine,
+ /*IN*/ PVOID StartContext);
+
+/*
+ * PEPROCESS
+ * PsGetCurrentProcess(VOID)
+ */
+#define PsGetCurrentProcess IoGetCurrentProcess
+
+NTOSAPI
+HANDLE
+DDKAPI
+PsGetCurrentProcessId(
+ VOID);
+
+/*
+ * PETHREAD
+ * PsGetCurrentThread(VOID)
+ */
+#define PsGetCurrentThread() \
+ ((PETHREAD) KeGetCurrentThread())
+
+NTOSAPI
+HANDLE
+DDKAPI
+PsGetCurrentThreadId(
+ VOID);
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+PsGetVersion(
+ PULONG MajorVersion /*OPTIONAL*/,
+ PULONG MinorVersion /*OPTIONAL*/,
+ PULONG BuildNumber /*OPTIONAL*/,
+ PUNICODE_STRING CSDVersion /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+PsRemoveCreateThreadNotifyRoutine(
+ /*IN*/ PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+PsRemoveLoadImageNotifyRoutine(
+ /*IN*/ PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+PsSetCreateProcessNotifyRoutine(
+ /*IN*/ PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine,
+ /*IN*/ BOOLEAN Remove);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+PsSetCreateThreadNotifyRoutine(
+ /*IN*/ PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+PsSetLoadImageNotifyRoutine(
+ /*IN*/ PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+PsTerminateSystemThread(
+ /*IN*/ NTSTATUS ExitStatus);
+
+
+
+/** Security reference monitor routines **/
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+SeAccessCheck(
+ /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor,
+ /*IN*/ PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext,
+ /*IN*/ BOOLEAN SubjectContextLocked,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ ACCESS_MASK PreviouslyGrantedAccess,
+ /*OUT*/ PPRIVILEGE_SET *Privileges /*OPTIONAL*/,
+ /*IN*/ PGENERIC_MAPPING GenericMapping,
+ /*IN*/ KPROCESSOR_MODE AccessMode,
+ /*OUT*/ PACCESS_MASK GrantedAccess,
+ /*OUT*/ PNTSTATUS AccessStatus);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+SeAssignSecurity(
+ /*IN*/ PSECURITY_DESCRIPTOR ParentDescriptor /*OPTIONAL*/,
+ /*IN*/ PSECURITY_DESCRIPTOR ExplicitDescriptor /*OPTIONAL*/,
+ /*OUT*/ PSECURITY_DESCRIPTOR *NewDescriptor,
+ /*IN*/ BOOLEAN IsDirectoryObject,
+ /*IN*/ PSECURITY_SUBJECT_CONTEXT SubjectContext,
+ /*IN*/ PGENERIC_MAPPING GenericMapping,
+ /*IN*/ POOL_TYPE PoolType);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+SeAssignSecurityEx(
+ /*IN*/ PSECURITY_DESCRIPTOR ParentDescriptor /*OPTIONAL*/,
+ /*IN*/ PSECURITY_DESCRIPTOR ExplicitDescriptor /*OPTIONAL*/,
+ /*OUT*/ PSECURITY_DESCRIPTOR *NewDescriptor,
+ /*IN*/ GUID *ObjectType /*OPTIONAL*/,
+ /*IN*/ BOOLEAN IsDirectoryObject,
+ /*IN*/ ULONG AutoInheritFlags,
+ /*IN*/ PSECURITY_SUBJECT_CONTEXT SubjectContext,
+ /*IN*/ PGENERIC_MAPPING GenericMapping,
+ /*IN*/ POOL_TYPE PoolType);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+SeDeassignSecurity(
+ /*IN OUT*/ PSECURITY_DESCRIPTOR *SecurityDescriptor);
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+SeSinglePrivilegeCheck(
+ LUID PrivilegeValue,
+ KPROCESSOR_MODE PreviousMode);
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+SeValidSecurityDescriptor(
+ /*IN*/ ULONG Length,
+ /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor);
+
+
+
+/** NtXxx routines **/
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+NtOpenProcess(
+ /*OUT*/ PHANDLE ProcessHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,
+ /*IN*/ PCLIENT_ID ClientId /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+NtQueryInformationProcess(
+ /*IN*/ HANDLE ProcessHandle,
+ /*IN*/ PROCESSINFOCLASS ProcessInformationClass,
+ /*OUT*/ PVOID ProcessInformation,
+ /*IN*/ ULONG ProcessInformationLength,
+ /*OUT*/ PULONG ReturnLength /*OPTIONAL*/);
+
+
+
+/** NtXxx and ZwXxx routines **/
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+NtCancelTimer(
+ /*IN*/ HANDLE TimerHandle,
+ /*OUT*/ PBOOLEAN CurrentState /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+ZwCancelTimer(
+ /*IN*/ HANDLE TimerHandle,
+ /*OUT*/ PBOOLEAN CurrentState /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+NtClose(
+ /*IN*/ HANDLE Handle);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+ZwClose(
+ /*IN*/ HANDLE Handle);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+NtCreateDirectoryObject(
+ /*OUT*/ PHANDLE DirectoryHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+ZwCreateDirectoryObject(
+ /*OUT*/ PHANDLE DirectoryHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+NtCreateEvent(
+ /*OUT*/ PHANDLE EventHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,
+ /*IN*/ BOOLEAN ManualReset,
+ /*IN*/ BOOLEAN InitialState);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+ZwCreateEvent(
+ /*OUT*/ PHANDLE EventHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,
+ /*IN*/ BOOLEAN ManualReset,
+ /*IN*/ BOOLEAN InitialState);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+NtCreateFile(
+ /*OUT*/ PHANDLE FileHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock,
+ /*IN*/ PLARGE_INTEGER AllocationSize /*OPTIONAL*/,
+ /*IN*/ ULONG FileAttributes,
+ /*IN*/ ULONG ShareAccess,
+ /*IN*/ ULONG CreateDisposition,
+ /*IN*/ ULONG CreateOptions,
+ /*IN*/ PVOID EaBuffer /*OPTIONAL*/,
+ /*IN*/ ULONG EaLength);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+ZwCreateFile(
+ /*OUT*/ PHANDLE FileHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock,
+ /*IN*/ PLARGE_INTEGER AllocationSize /*OPTIONAL*/,
+ /*IN*/ ULONG FileAttributes,
+ /*IN*/ ULONG ShareAccess,
+ /*IN*/ ULONG CreateDisposition,
+ /*IN*/ ULONG CreateOptions,
+ /*IN*/ PVOID EaBuffer /*OPTIONAL*/,
+ /*IN*/ ULONG EaLength);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+NtCreateKey(
+ /*OUT*/ PHANDLE KeyHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,
+ /*IN*/ ULONG TitleIndex,
+ /*IN*/ PUNICODE_STRING Class /*OPTIONAL*/,
+ /*IN*/ ULONG CreateOptions,
+ /*OUT*/ PULONG Disposition /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+ZwCreateKey(
+ /*OUT*/ PHANDLE KeyHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,
+ /*IN*/ ULONG TitleIndex,
+ /*IN*/ PUNICODE_STRING Class /*OPTIONAL*/,
+ /*IN*/ ULONG CreateOptions,
+ /*OUT*/ PULONG Disposition /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+NtCreateTimer(
+ /*OUT*/ PHANDLE TimerHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes /*OPTIONAL*/,
+ /*IN*/ TIMER_TYPE TimerType);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+ZwCreateTimer(
+ /*OUT*/ PHANDLE TimerHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes /*OPTIONAL*/,
+ /*IN*/ TIMER_TYPE TimerType);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+NtDeleteKey(
+ /*IN*/ HANDLE KeyHandle);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+ZwDeleteKey(
+ /*IN*/ HANDLE KeyHandle);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+NtDeleteValueKey(
+ /*IN*/ HANDLE KeyHandle,
+ /*IN*/ PUNICODE_STRING ValueName);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+ZwDeleteValueKey(
+ /*IN*/ HANDLE KeyHandle,
+ /*IN*/ PUNICODE_STRING ValueName);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+NtDeviceIoControlFile(
+ /*IN*/ HANDLE DeviceHandle,
+ /*IN*/ HANDLE Event /*OPTIONAL*/,
+ /*IN*/ PIO_APC_ROUTINE UserApcRoutine /*OPTIONAL*/,
+ /*IN*/ PVOID UserApcContext /*OPTIONAL*/,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock,
+ /*IN*/ ULONG IoControlCode,
+ /*IN*/ PVOID InputBuffer,
+ /*IN*/ ULONG InputBufferSize,
+ /*OUT*/ PVOID OutputBuffer,
+ /*IN*/ ULONG OutputBufferSize);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+ZwDeviceIoControlFile(
+ /*IN*/ HANDLE DeviceHandle,
+ /*IN*/ HANDLE Event /*OPTIONAL*/,
+ /*IN*/ PIO_APC_ROUTINE UserApcRoutine /*OPTIONAL*/,
+ /*IN*/ PVOID UserApcContext /*OPTIONAL*/,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock,
+ /*IN*/ ULONG IoControlCode,
+ /*IN*/ PVOID InputBuffer,
+ /*IN*/ ULONG InputBufferSize,
+ /*OUT*/ PVOID OutputBuffer,
+ /*IN*/ ULONG OutputBufferSize);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+NtEnumerateKey(
+ /*IN*/ HANDLE KeyHandle,
+ /*IN*/ ULONG Index,
+ /*IN*/ KEY_INFORMATION_CLASS KeyInformationClass,
+ /*OUT*/ PVOID KeyInformation,
+ /*IN*/ ULONG Length,
+ /*OUT*/ PULONG ResultLength);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+ZwEnumerateKey(
+ /*IN*/ HANDLE KeyHandle,
+ /*IN*/ ULONG Index,
+ /*IN*/ KEY_INFORMATION_CLASS KeyInformationClass,
+ /*OUT*/ PVOID KeyInformation,
+ /*IN*/ ULONG Length,
+ /*OUT*/ PULONG ResultLength);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+NtEnumerateValueKey(
+ /*IN*/ HANDLE KeyHandle,
+ /*IN*/ ULONG Index,
+ /*IN*/ KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass,
+ /*OUT*/ PVOID KeyValueInformation,
+ /*IN*/ ULONG Length,
+ /*OUT*/ PULONG ResultLength);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+ZwEnumerateValueKey(
+ /*IN*/ HANDLE KeyHandle,
+ /*IN*/ ULONG Index,
+ /*IN*/ KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass,
+ /*OUT*/ PVOID KeyValueInformation,
+ /*IN*/ ULONG Length,
+ /*OUT*/ PULONG ResultLength);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+NtFlushKey(
+ /*IN*/ HANDLE KeyHandle);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+ZwFlushKey(
+ /*IN*/ HANDLE KeyHandle);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+NtMakeTemporaryObject(
+ /*IN*/ HANDLE Handle);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+ZwMakeTemporaryObject(
+ /*IN*/ HANDLE Handle);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+NtMapViewOfSection(
+ /*IN*/ HANDLE SectionHandle,
+ /*IN*/ HANDLE ProcessHandle,
+ /*IN OUT*/ PVOID *BaseAddress,
+ /*IN*/ ULONG ZeroBits,
+ /*IN*/ ULONG CommitSize,
+ /*IN OUT*/ PLARGE_INTEGER SectionOffset /*OPTIONAL*/,
+ /*IN OUT*/ PSIZE_T ViewSize,
+ /*IN*/ SECTION_INHERIT InheritDisposition,
+ /*IN*/ ULONG AllocationType,
+ /*IN*/ ULONG Protect);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+ZwMapViewOfSection(
+ /*IN*/ HANDLE SectionHandle,
+ /*IN*/ HANDLE ProcessHandle,
+ /*IN OUT*/ PVOID *BaseAddress,
+ /*IN*/ ULONG ZeroBits,
+ /*IN*/ ULONG CommitSize,
+ /*IN OUT*/ PLARGE_INTEGER SectionOffset /*OPTIONAL*/,
+ /*IN OUT*/ PSIZE_T ViewSize,
+ /*IN*/ SECTION_INHERIT InheritDisposition,
+ /*IN*/ ULONG AllocationType,
+ /*IN*/ ULONG Protect);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+NtOpenFile(
+ /*OUT*/ PHANDLE FileHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock,
+ /*IN*/ ULONG ShareAccess,
+ /*IN*/ ULONG OpenOptions);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+ZwOpenFile(
+ /*OUT*/ PHANDLE FileHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock,
+ /*IN*/ ULONG ShareAccess,
+ /*IN*/ ULONG OpenOptions);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+NtOpenKey(
+ /*OUT*/ PHANDLE KeyHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+ZwOpenKey(
+ /*OUT*/ PHANDLE KeyHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+NtOpenSection(
+ /*OUT*/ PHANDLE SectionHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+ZwOpenSection(
+ /*OUT*/ PHANDLE SectionHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+NtOpenSymbolicLinkObject(
+ /*OUT*/ PHANDLE LinkHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+ZwOpenSymbolicLinkObject(
+ /*OUT*/ PHANDLE LinkHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+NtOpenTimer(
+ /*OUT*/ PHANDLE TimerHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+ZwOpenTimer(
+ /*OUT*/ PHANDLE TimerHandle,
+ /*IN*/ ACCESS_MASK DesiredAccess,
+ /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+NtQueryInformationFile(
+ /*IN*/ HANDLE FileHandle,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock,
+ /*OUT*/ PVOID FileInformation,
+ /*IN*/ ULONG Length,
+ /*IN*/ FILE_INFORMATION_CLASS FileInformationClass);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+ZwQueryInformationFile(
+ /*IN*/ HANDLE FileHandle,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock,
+ /*OUT*/ PVOID FileInformation,
+ /*IN*/ ULONG Length,
+ /*IN*/ FILE_INFORMATION_CLASS FileInformationClass);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+NtQueryKey(
+ /*IN*/ HANDLE KeyHandle,
+ /*IN*/ KEY_INFORMATION_CLASS KeyInformationClass,
+ /*OUT*/ PVOID KeyInformation,
+ /*IN*/ ULONG Length,
+ /*OUT*/ PULONG ResultLength);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+ZwQueryKey(
+ /*IN*/ HANDLE KeyHandle,
+ /*IN*/ KEY_INFORMATION_CLASS KeyInformationClass,
+ /*OUT*/ PVOID KeyInformation,
+ /*IN*/ ULONG Length,
+ /*OUT*/ PULONG ResultLength);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+NtQuerySymbolicLinkObject(
+ /*IN*/ HANDLE LinkHandle,
+ /*IN OUT*/ PUNICODE_STRING LinkTarget,
+ /*OUT*/ PULONG ReturnedLength /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+ZwQuerySymbolicLinkObject(
+ /*IN*/ HANDLE LinkHandle,
+ /*IN OUT*/ PUNICODE_STRING LinkTarget,
+ /*OUT*/ PULONG ReturnedLength /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+NtQueryValueKey(
+ /*IN*/ HANDLE KeyHandle,
+ /*IN*/ PUNICODE_STRING ValueName,
+ /*IN*/ KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass,
+ /*OUT*/ PVOID KeyValueInformation,
+ /*IN*/ ULONG Length,
+ /*OUT*/ PULONG ResultLength);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+ZwQueryValueKey(
+ /*IN*/ HANDLE KeyHandle,
+ /*IN*/ PUNICODE_STRING ValueName,
+ /*IN*/ KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass,
+ /*OUT*/ PVOID KeyValueInformation,
+ /*IN*/ ULONG Length,
+ /*OUT*/ PULONG ResultLength);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+NtReadFile(
+ /*IN*/ HANDLE FileHandle,
+ /*IN*/ HANDLE Event /*OPTIONAL*/,
+ /*IN*/ PIO_APC_ROUTINE ApcRoutine /*OPTIONAL*/,
+ /*IN*/ PVOID ApcContext /*OPTIONAL*/,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock,
+ /*OUT*/ PVOID Buffer,
+ /*IN*/ ULONG Length,
+ /*IN*/ PLARGE_INTEGER ByteOffset /*OPTIONAL*/,
+ /*IN*/ PULONG Key /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+ZwReadFile(
+ /*IN*/ HANDLE FileHandle,
+ /*IN*/ HANDLE Event /*OPTIONAL*/,
+ /*IN*/ PIO_APC_ROUTINE ApcRoutine /*OPTIONAL*/,
+ /*IN*/ PVOID ApcContext /*OPTIONAL*/,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock,
+ /*OUT*/ PVOID Buffer,
+ /*IN*/ ULONG Length,
+ /*IN*/ PLARGE_INTEGER ByteOffset /*OPTIONAL*/,
+ /*IN*/ PULONG Key /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+NtSetEvent(
+ /*IN*/ HANDLE EventHandle,
+ /*IN*/ PULONG NumberOfThreadsReleased);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+ZwSetEvent(
+ /*IN*/ HANDLE EventHandle,
+ /*IN*/ PULONG NumberOfThreadsReleased);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+NtSetInformationFile(
+ /*IN*/ HANDLE FileHandle,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock,
+ /*IN*/ PVOID FileInformation,
+ /*IN*/ ULONG Length,
+ /*IN*/ FILE_INFORMATION_CLASS FileInformationClass);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+ZwSetInformationFile(
+ /*IN*/ HANDLE FileHandle,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock,
+ /*IN*/ PVOID FileInformation,
+ /*IN*/ ULONG Length,
+ /*IN*/ FILE_INFORMATION_CLASS FileInformationClass);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+NtSetInformationThread(
+ /*IN*/ HANDLE ThreadHandle,
+ /*IN*/ THREADINFOCLASS ThreadInformationClass,
+ /*IN*/ PVOID ThreadInformation,
+ /*IN*/ ULONG ThreadInformationLength);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+ZwSetInformationThread(
+ /*IN*/ HANDLE ThreadHandle,
+ /*IN*/ THREADINFOCLASS ThreadInformationClass,
+ /*IN*/ PVOID ThreadInformation,
+ /*IN*/ ULONG ThreadInformationLength);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+NtSetTimer(
+ /*IN*/ HANDLE TimerHandle,
+ /*IN*/ PLARGE_INTEGER DueTime,
+ /*IN*/ PTIMER_APC_ROUTINE TimerApcRoutine /*OPTIONAL*/,
+ /*IN*/ PVOID TimerContext /*OPTIONAL*/,
+ /*IN*/ BOOLEAN WakeTimer,
+ /*IN*/ LONG Period /*OPTIONAL*/,
+ /*OUT*/ PBOOLEAN PreviousState /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+ZwSetTimer(
+ /*IN*/ HANDLE TimerHandle,
+ /*IN*/ PLARGE_INTEGER DueTime,
+ /*IN*/ PTIMER_APC_ROUTINE TimerApcRoutine /*OPTIONAL*/,
+ /*IN*/ PVOID TimerContext /*OPTIONAL*/,
+ /*IN*/ BOOLEAN WakeTimer,
+ /*IN*/ LONG Period /*OPTIONAL*/,
+ /*OUT*/ PBOOLEAN PreviousState /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+NtSetValueKey(
+ /*IN*/ HANDLE KeyHandle,
+ /*IN*/ PUNICODE_STRING ValueName,
+ /*IN*/ ULONG TitleIndex /*OPTIONAL*/,
+ /*IN*/ ULONG Type,
+ /*IN*/ PVOID Data,
+ /*IN*/ ULONG DataSize);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+ZwSetValueKey(
+ /*IN*/ HANDLE KeyHandle,
+ /*IN*/ PUNICODE_STRING ValueName,
+ /*IN*/ ULONG TitleIndex /*OPTIONAL*/,
+ /*IN*/ ULONG Type,
+ /*IN*/ PVOID Data,
+ /*IN*/ ULONG DataSize);
+
+/* [Nt|Zw]MapViewOfSection.InheritDisposition constants */
+#define AT_EXTENDABLE_FILE 0x00002000
+#define SEC_NO_CHANGE 0x00400000
+#define AT_RESERVED 0x20000000
+#define AT_ROUND_TO_PAGE 0x40000000
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+NtUnmapViewOfSection(
+ /*IN*/ HANDLE ProcessHandle,
+ /*IN*/ PVOID BaseAddress);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+ZwUnmapViewOfSection(
+ /*IN*/ HANDLE ProcessHandle,
+ /*IN*/ PVOID BaseAddress);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+NtWaitForSingleObject(
+ /*IN*/ HANDLE Object,
+ /*IN*/ BOOLEAN Alertable,
+ /*IN*/ PLARGE_INTEGER Time);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+ZwWaitForSingleObject(
+ /*IN*/ HANDLE Object,
+ /*IN*/ BOOLEAN Alertable,
+ /*IN*/ PLARGE_INTEGER Time);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+NtWriteFile(
+ /*IN*/ HANDLE FileHandle,
+ /*IN*/ HANDLE Event /*OPTIONAL*/,
+ /*IN*/ PIO_APC_ROUTINE ApcRoutine /*OPTIONAL*/,
+ /*IN*/ PVOID ApcContext /*OPTIONAL*/,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock,
+ /*IN*/ PVOID Buffer,
+ /*IN*/ ULONG Length,
+ /*IN*/ PLARGE_INTEGER ByteOffset /*OPTIONAL*/,
+ /*IN*/ PULONG Key /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+ZwWriteFile(
+ /*IN*/ HANDLE FileHandle,
+ /*IN*/ HANDLE Event /*OPTIONAL*/,
+ /*IN*/ PIO_APC_ROUTINE ApcRoutine /*OPTIONAL*/,
+ /*IN*/ PVOID ApcContext /*OPTIONAL*/,
+ /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock,
+ /*IN*/ PVOID Buffer,
+ /*IN*/ ULONG Length,
+ /*IN*/ PLARGE_INTEGER ByteOffset /*OPTIONAL*/,
+ /*IN*/ PULONG Key /*OPTIONAL*/);
+
+
+
+/** Power management support routines **/
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+PoCallDriver(
+ /*IN*/ PDEVICE_OBJECT DeviceObject,
+ /*IN OUT*/ PIRP Irp);
+
+NTOSAPI
+PULONG
+DDKAPI
+PoRegisterDeviceForIdleDetection(
+ /*IN*/ PDEVICE_OBJECT DeviceObject,
+ /*IN*/ ULONG ConservationIdleTime,
+ /*IN*/ ULONG PerformanceIdleTime,
+ /*IN*/ DEVICE_POWER_STATE State);
+
+NTOSAPI
+PVOID
+DDKAPI
+PoRegisterSystemState(
+ /*IN*/ PVOID StateHandle,
+ /*IN*/ EXECUTION_STATE Flags);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+PoRequestPowerIrp(
+ /*IN*/ PDEVICE_OBJECT DeviceObject,
+ /*IN*/ UCHAR MinorFunction,
+ /*IN*/ POWER_STATE PowerState,
+ /*IN*/ PREQUEST_POWER_COMPLETE CompletionFunction,
+ /*IN*/ PVOID Context,
+ /*OUT*/ PIRP *Irp /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+PoRequestShutdownEvent(
+ /*OUT*/ PVOID *Event);
+
+NTOSAPI
+VOID
+DDKAPI
+PoSetDeviceBusy(
+ PULONG IdlePointer);
+
+NTOSAPI
+POWER_STATE
+DDKAPI
+PoSetPowerState(
+ /*IN*/ PDEVICE_OBJECT DeviceObject,
+ /*IN*/ POWER_STATE_TYPE Type,
+ /*IN*/ POWER_STATE State);
+
+NTOSAPI
+VOID
+DDKAPI
+PoSetSystemState(
+ /*IN*/ EXECUTION_STATE Flags);
+
+NTOSAPI
+VOID
+DDKAPI
+PoStartNextPowerIrp(
+ /*IN*/ PIRP Irp);
+
+NTOSAPI
+VOID
+DDKAPI
+PoUnregisterSystemState(
+ /*IN*/ PVOID StateHandle);
+
+
+
+/** WMI library support routines **/
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+WmiCompleteRequest(
+ /*IN*/ PDEVICE_OBJECT DeviceObject,
+ /*IN*/ PIRP Irp,
+ /*IN*/ NTSTATUS Status,
+ /*IN*/ ULONG BufferUsed,
+ /*IN*/ CCHAR PriorityBoost);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+WmiFireEvent(
+ /*IN*/ PDEVICE_OBJECT DeviceObject,
+ /*IN*/ LPGUID Guid,
+ /*IN*/ ULONG InstanceIndex,
+ /*IN*/ ULONG EventDataSize,
+ /*IN*/ PVOID EventData);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+WmiQueryTraceInformation(
+ /*IN*/ TRACE_INFORMATION_CLASS TraceInformationClass,
+ /*OUT*/ PVOID TraceInformation,
+ /*IN*/ ULONG TraceInformationLength,
+ /*OUT*/ PULONG RequiredLength /*OPTIONAL*/,
+ /*IN*/ PVOID Buffer /*OPTIONAL*/);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+WmiSystemControl(
+ /*IN*/ PWMILIB_CONTEXT WmiLibInfo,
+ /*IN*/ PDEVICE_OBJECT DeviceObject,
+ /*IN*/ PIRP Irp,
+ /*OUT*/ PSYSCTL_IRP_DISPOSITION IrpDisposition);
+
+NTOSAPI
+NTSTATUS
+DDKCDECLAPI
+WmiTraceMessage(
+ /*IN*/ TRACEHANDLE LoggerHandle,
+ /*IN*/ ULONG MessageFlags,
+ /*IN*/ LPGUID MessageGuid,
+ /*IN*/ USHORT MessageNumber,
+ /*IN*/ ...);
+
+#if 0
+/* FIXME: Get va_list from where? */
+NTOSAPI
+NTSTATUS
+DDKCDECLAPI
+WmiTraceMessageVa(
+ /*IN*/ TRACEHANDLE LoggerHandle,
+ /*IN*/ ULONG MessageFlags,
+ /*IN*/ LPGUID MessageGuid,
+ /*IN*/ USHORT MessageNumber,
+ /*IN*/ va_list MessageArgList);
+#endif
+
+
+/** Kernel debugger routines **/
+
+NTOSAPI
+VOID
+DDKAPI
+KdDisableDebugger(
+ VOID);
+
+NTOSAPI
+VOID
+DDKAPI
+KdEnableDebugger(
+ VOID);
+
+NTOSAPI
+VOID
+DDKAPI
+DbgBreakPoint(
+ VOID);
+
+NTOSAPI
+VOID
+DDKAPI
+DbgBreakPointWithStatus(
+ /*IN*/ ULONG Status);
+
+NTOSAPI
+ULONG
+DDKCDECLAPI
+DbgPrint(
+ /*IN*/ PCH Format,
+ /*IN*/ ...);
+
+NTOSAPI
+ULONG
+DDKCDECLAPI
+DbgPrintEx(
+ /*IN*/ ULONG ComponentId,
+ /*IN*/ ULONG Level,
+ /*IN*/ PCH Format,
+ /*IN*/ ...);
+
+NTOSAPI
+ULONG
+DDKCDECLAPI
+DbgPrintReturnControlC(
+ /*IN*/ PCH Format,
+ /*IN*/ ...);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+DbgQueryDebugFilterState(
+ /*IN*/ ULONG ComponentId,
+ /*IN*/ ULONG Level);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+DbgSetDebugFilterState(
+ /*IN*/ ULONG ComponentId,
+ /*IN*/ ULONG Level,
+ /*IN*/ BOOLEAN State);
+
+#ifdef DBG
+
+#define KdPrint(_x_) DbgPrint _x_
+#define KdPrintEx(_x_) DbgPrintEx _x_
+#define KdBreakPoint() DbgBreakPoint()
+#define KdBreakPointWithStatus(s) DbgBreakPointWithStatus(s)
+
+#else /* !DBG */
+
+#define KdPrint(_x_)
+#define KdPrintEx(_x_)
+#define KdBreakPoint()
+#define KdBreakPointWithStatus(s)
+
+#endif /* !DBG */
+
+extern NTOSAPI PBOOLEAN KdDebuggerNotPresent;
+extern NTOSAPI PBOOLEAN KdDebuggerEnabled;
+#define KD_DEBUGGER_ENABLED *KdDebuggerEnabled
+#define KD_DEBUGGER_NOT_PRESENT *KdDebuggerNotPresent
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINDDK_H */
diff --git a/tcc/include/winapi/ddk/winnt4.h b/tcc/include/winapi/ddk/winnt4.h
new file mode 100644
index 0000000..b7f6179
--- /dev/null
+++ b/tcc/include/winapi/ddk/winnt4.h
@@ -0,0 +1,623 @@
+/*
+ * winnt4.h
+ *
+ * Definitions only used in Windows NT 4.0 and earlier versions
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __WINNT4_H
+#define __WINNT4_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct _ZONE_SEGMENT_HEADER {
+ SINGLE_LIST_ENTRY SegmentList;
+ PVOID Reserved;
+} ZONE_SEGMENT_HEADER, *PZONE_SEGMENT_HEADER;
+
+typedef struct _ZONE_HEADER {
+ SINGLE_LIST_ENTRY FreeList;
+ SINGLE_LIST_ENTRY SegmentList;
+ ULONG BlockSize;
+ ULONG TotalSegmentSize;
+} ZONE_HEADER, *PZONE_HEADER;
+
+static __inline PVOID
+ExAllocateFromZone(
+ /*IN*/ PZONE_HEADER Zone)
+{
+ if (Zone->FreeList.Next)
+ Zone->FreeList.Next = Zone->FreeList.Next->Next;
+ return (PVOID) Zone->FreeList.Next;
+}
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+ExExtendZone(
+ /*IN*/ PZONE_HEADER Zone,
+ /*IN*/ PVOID Segment,
+ /*IN*/ ULONG SegmentSize);
+
+static __inline PVOID
+ExFreeToZone(
+ /*IN*/ PZONE_HEADER Zone,
+ /*IN*/ PVOID Block)
+{
+ ((PSINGLE_LIST_ENTRY) Block)->Next = Zone->FreeList.Next;
+ Zone->FreeList.Next = ((PSINGLE_LIST_ENTRY) Block);
+ return ((PSINGLE_LIST_ENTRY) Block)->Next;
+}
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+ExInitializeZone(
+ /*IN*/ PZONE_HEADER Zone,
+ /*IN*/ ULONG BlockSize,
+ /*IN*/ PVOID InitialSegment,
+ /*IN*/ ULONG InitialSegmentSize);
+
+/*
+ * PVOID
+ * ExInterlockedAllocateFromZone(
+ * IN PZONE_HEADER Zone,
+ * IN PKSPIN_LOCK Lock)
+ */
+#define ExInterlockedAllocateFromZone(Zone, \
+ Lock) \
+ ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock))
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+ExInterlockedExtendZone(
+ /*IN*/ PZONE_HEADER Zone,
+ /*IN*/ PVOID Segment,
+ /*IN*/ ULONG SegmentSize,
+ /*IN*/ PKSPIN_LOCK Lock);
+
+NTOSAPI
+PVOID
+DDKAPI
+ExInterlockedFreeToZone(
+ /*IN*/ PZONE_HEADER Zone,
+ /*IN*/ PVOID Block,
+ /*IN*/ PKSPIN_LOCK Lock);
+
+/*
+ * VOID
+ * ExInitializeWorkItem(
+ * IN PWORK_QUEUE_ITEM Item,
+ * IN PWORKER_THREAD_ROUTINE Routine,
+ * IN PVOID Context)
+ */
+#define ExInitializeWorkItem(Item, \
+ Routine, \
+ Context) \
+{ \
+ (Item)->WorkerRoutine = Routine; \
+ (Item)->Parameter = Context; \
+ (Item)->List.Flink = NULL; \
+}
+
+/*
+ * BOOLEAN
+ * ExIsFullZone(
+ * IN PZONE_HEADER Zone)
+ */
+#define ExIsFullZone(Zone) \
+ ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL)
+
+NTOSAPI
+VOID
+DDKAPI
+ExQueueWorkItem(
+ /*IN*/ PWORK_QUEUE_ITEM WorkItem,
+ /*IN*/ WORK_QUEUE_TYPE QueueType);
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+ExIsObjectInFirstZoneSegment(
+ /*IN*/ PZONE_HEADER Zone,
+ /*IN*/ PVOID Object);
+
+NTOSAPI
+VOID
+DDKAPI
+ExReleaseResource(
+ /*IN*/ PERESOURCE Resource);
+
+#define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite
+#define ExAcquireResourceShared ExAcquireResourceSharedLite
+#define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite
+#define ExDeleteResource ExDeleteResourceLite
+#define ExInitializeResource ExInitializeResourceLite
+#define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite
+#define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite
+#define ExIsResourceAcquired ExIsResourceAcquiredSharedLite
+#define ExReleaseResourceForThread ExReleaseResourceForThreadLite
+
+NTOSAPI
+INTERLOCKED_RESULT
+DDKAPI
+ExInterlockedDecrementLong(
+ /*IN*/ PLONG Addend,
+ /*IN*/ PKSPIN_LOCK Lock);
+
+NTOSAPI
+ULONG
+DDKAPI
+ExInterlockedExchangeUlong(
+ /*IN*/ PULONG Target,
+ /*IN*/ ULONG Value,
+ /*IN*/ PKSPIN_LOCK Lock);
+
+NTOSAPI
+INTERLOCKED_RESULT
+DDKAPI
+ExInterlockedIncrementLong(
+ /*IN*/ PLONG Addend,
+ /*IN*/ PKSPIN_LOCK Lock);
+
+NTOSAPI
+PVOID
+DDKAPI
+HalAllocateCommonBuffer(
+ /*IN*/ PADAPTER_OBJECT AdapterObject,
+ /*IN*/ ULONG Length,
+ /*OUT*/ PPHYSICAL_ADDRESS LogicalAddress,
+ /*IN*/ BOOLEAN CacheEnabled);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+HalAssignSlotResources(
+ /*IN*/ PUNICODE_STRING RegistryPath,
+ /*IN*/ PUNICODE_STRING DriverClassName,
+ /*IN*/ PDRIVER_OBJECT DriverObject,
+ /*IN*/ PDEVICE_OBJECT DeviceObject,
+ /*IN*/ INTERFACE_TYPE BusType,
+ /*IN*/ ULONG BusNumber,
+ /*IN*/ ULONG SlotNumber,
+ /*IN OUT*/ PCM_RESOURCE_LIST *AllocatedResources);
+
+NTOSAPI
+VOID
+DDKAPI
+HalFreeCommonBuffer(
+ /*IN*/ PADAPTER_OBJECT AdapterObject,
+ /*IN*/ ULONG Length,
+ /*IN*/ PHYSICAL_ADDRESS LogicalAddress,
+ /*IN*/ PVOID VirtualAddress,
+ /*IN*/ BOOLEAN CacheEnabled);
+
+NTOSAPI
+PADAPTER_OBJECT
+DDKAPI
+HalGetAdapter(
+ /*IN*/ PDEVICE_DESCRIPTION DeviceDescription,
+ /*IN OUT*/ PULONG NumberOfMapRegisters);
+
+NTOSAPI
+ULONG
+DDKAPI
+HalGetBusData(
+ /*IN*/ BUS_DATA_TYPE BusDataType,
+ /*IN*/ ULONG BusNumber,
+ /*IN*/ ULONG SlotNumber,
+ /*IN*/ PVOID Buffer,
+ /*IN*/ ULONG Length);
+
+NTOSAPI
+ULONG
+DDKAPI
+HalGetBusDataByOffset(
+ /*IN*/ BUS_DATA_TYPE BusDataType,
+ /*IN*/ ULONG BusNumber,
+ /*IN*/ ULONG SlotNumber,
+ /*IN*/ PVOID Buffer,
+ /*IN*/ ULONG Offset,
+ /*IN*/ ULONG Length);
+
+NTOSAPI
+ULONG
+DDKAPI
+HalGetDmaAlignmentRequirement(
+ VOID);
+
+NTOSAPI
+ULONG
+DDKAPI
+HalGetInterruptVector(
+ /*IN*/ INTERFACE_TYPE InterfaceType,
+ /*IN*/ ULONG BusNumber,
+ /*IN*/ ULONG BusInterruptLevel,
+ /*IN*/ ULONG BusInterruptVector,
+ /*OUT*/ PKIRQL Irql,
+ /*OUT*/ PKAFFINITY Affinity);
+
+NTOSAPI
+ULONG
+DDKAPI
+HalReadDmaCounter(
+ /*IN*/ PADAPTER_OBJECT AdapterObject);
+
+NTOSAPI
+ULONG
+DDKAPI
+HalSetBusData(
+ /*IN*/ BUS_DATA_TYPE BusDataType,
+ /*IN*/ ULONG BusNumber,
+ /*IN*/ ULONG SlotNumber,
+ /*IN*/ PVOID Buffer,
+ /*IN*/ ULONG Length);
+
+NTOSAPI
+ULONG
+DDKAPI
+HalSetBusDataByOffset(
+ /*IN*/ BUS_DATA_TYPE BusDataType,
+ /*IN*/ ULONG BusNumber,
+ /*IN*/ ULONG SlotNumber,
+ /*IN*/ PVOID Buffer,
+ /*IN*/ ULONG Offset,
+ /*IN*/ ULONG Length);
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+HalTranslateBusAddress(
+ /*IN*/ INTERFACE_TYPE InterfaceType,
+ /*IN*/ ULONG BusNumber,
+ /*IN*/ PHYSICAL_ADDRESS BusAddress,
+ /*IN OUT*/ PULONG AddressSpace,
+ /*OUT*/ PPHYSICAL_ADDRESS TranslatedAddress);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoAllocateAdapterChannel(
+ /*IN*/ PADAPTER_OBJECT AdapterObject,
+ /*IN*/ PDEVICE_OBJECT DeviceObject,
+ /*IN*/ ULONG NumberOfMapRegisters,
+ /*IN*/ PDRIVER_CONTROL ExecutionRoutine,
+ /*IN*/ PVOID Context);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoAssignResources(
+ /*IN*/ PUNICODE_STRING RegistryPath,
+ /*IN*/ PUNICODE_STRING DriverClassName /*OPTIONAL*/,
+ /*IN*/ PDRIVER_OBJECT DriverObject,
+ /*IN*/ PDEVICE_OBJECT DeviceObject /*OPTIONAL*/,
+ /*IN*/ PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources,
+ /*IN OUT*/ PCM_RESOURCE_LIST *AllocatedResources);
+
+NTOSAPI
+NTSTATUS
+DDKAPI
+IoAttachDeviceByPointer(
+ /*IN*/ PDEVICE_OBJECT SourceDevice,
+ /*IN*/ PDEVICE_OBJECT TargetDevice);
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+IoFlushAdapterBuffers(
+ /*IN*/ PADAPTER_OBJECT AdapterObject,
+ /*IN*/ PMDL Mdl,
+ /*IN*/ PVOID MapRegisterBase,
+ /*IN*/ PVOID CurrentVa,
+ /*IN*/ ULONG Length,
+ /*IN*/ BOOLEAN WriteToDevice);
+
+NTOSAPI
+VOID
+DDKAPI
+IoFreeAdapterChannel(
+ /*IN*/ PADAPTER_OBJECT AdapterObject);
+
+NTOSAPI
+VOID
+DDKAPI
+IoFreeMapRegisters(
+ /*IN*/ PADAPTER_OBJECT AdapterObject,
+ /*IN*/ PVOID MapRegisterBase,
+ /*IN*/ ULONG NumberOfMapRegisters);
+
+NTOSAPI
+PHYSICAL_ADDRESS
+DDKAPI
+IoMapTransfer(
+ /*IN*/ PADAPTER_OBJECT AdapterObject,
+ /*IN*/ PMDL Mdl,
+ /*IN*/ PVOID MapRegisterBase,
+ /*IN*/ PVOID CurrentVa,
+ /*IN OUT*/ PULONG Length,
+ /*IN*/ BOOLEAN WriteToDevice);
+
+NTOSAPI
+PMDL
+DDKAPI
+MmCreateMdl(
+ /*IN*/ PMDL MemoryDescriptorList /*OPTIONAL*/,
+ /*IN*/ PVOID Base,
+ /*IN*/ SIZE_T Length);
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+MmIsNonPagedSystemAddressValid(
+ /*IN*/ PVOID VirtualAddress);
+
+NTOSAPI
+LARGE_INTEGER
+DDKAPI
+RtlEnlargedIntegerMultiply(
+ /*IN*/ LONG Multiplicand,
+ /*IN*/ LONG Multiplier);
+
+NTOSAPI
+ULONG
+DDKAPI
+RtlEnlargedUnsignedDivide(
+ /*IN*/ ULARGE_INTEGER Dividend,
+ /*IN*/ ULONG Divisor,
+ /*IN OUT*/ PULONG Remainder);
+
+NTOSAPI
+LARGE_INTEGER
+DDKAPI
+RtlEnlargedUnsignedMultiply(
+ /*IN*/ ULONG Multiplicand,
+ /*IN*/ ULONG Multiplier);
+
+NTOSAPI
+LARGE_INTEGER
+DDKAPI
+RtlExtendedIntegerMultiply(
+ /*IN*/ LARGE_INTEGER Multiplicand,
+ /*IN*/ LONG Multiplier);
+
+NTOSAPI
+LARGE_INTEGER
+DDKAPI
+RtlExtendedLargeIntegerDivide(
+ /*IN*/ LARGE_INTEGER Dividend,
+ /*IN*/ ULONG Divisor,
+ /*IN OUT*/ PULONG Remainder);
+
+NTOSAPI
+LARGE_INTEGER
+DDKAPI
+RtlExtendedMagicDivide(
+ /*IN*/ LARGE_INTEGER Dividend,
+ /*IN*/ LARGE_INTEGER MagicDivisor,
+ /*IN*/ CCHAR ShiftCount);
+
+NTOSAPI
+LARGE_INTEGER
+DDKAPI
+RtlLargeIntegerAdd(
+ /*IN*/ LARGE_INTEGER Addend1,
+ /*IN*/ LARGE_INTEGER Addend2);
+
+NTOSAPI
+VOID
+DDKAPI
+RtlLargeIntegerAnd(
+ /*IN OUT*/ LARGE_INTEGER Result,
+ /*IN*/ LARGE_INTEGER Source,
+ /*IN*/ LARGE_INTEGER Mask);
+
+NTOSAPI
+LARGE_INTEGER
+DDKAPI
+RtlLargeIntegerArithmeticShift(
+ /*IN*/ LARGE_INTEGER LargeInteger,
+ /*IN*/ CCHAR ShiftCount);
+
+NTOSAPI
+LARGE_INTEGER
+DDKAPI
+RtlLargeIntegerDivide(
+ /*IN*/ LARGE_INTEGER Dividend,
+ /*IN*/ LARGE_INTEGER Divisor,
+ /*IN OUT*/ PLARGE_INTEGER Remainder);
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+RtlLargeIntegerEqualTo(
+ /*IN*/ LARGE_INTEGER Operand1,
+ /*IN*/ LARGE_INTEGER Operand2);
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+RtlLargeIntegerEqualToZero(
+ /*IN*/ LARGE_INTEGER Operand);
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+RtlLargeIntegerGreaterOrEqualToZero(
+ /*IN*/ LARGE_INTEGER Operand);
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+RtlLargeIntegerGreaterThan(
+ /*IN*/ LARGE_INTEGER Operand1,
+ /*IN*/ LARGE_INTEGER Operand2);
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+RtlLargeIntegerGreaterThanOrEqualTo(
+ /*IN*/ LARGE_INTEGER Operand1,
+ /*IN*/ LARGE_INTEGER Operand2);
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+RtlLargeIntegerGreaterThanZero(
+ /*IN*/ LARGE_INTEGER Operand);
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+RtlLargeIntegerLessOrEqualToZero(
+ /*IN*/ LARGE_INTEGER Operand);
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+RtlLargeIntegerLessThan(
+ /*IN*/ LARGE_INTEGER Operand1,
+ /*IN*/ LARGE_INTEGER Operand2);
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+RtlLargeIntegerLessThanOrEqualTo(
+ /*IN*/ LARGE_INTEGER Operand1,
+ /*IN*/ LARGE_INTEGER Operand2);
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+RtlLargeIntegerLessThanZero(
+ /*IN*/ LARGE_INTEGER Operand);
+
+NTOSAPI
+LARGE_INTEGER
+DDKAPI
+RtlLargeIntegerNegate(
+ /*IN*/ LARGE_INTEGER Subtrahend);
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+RtlLargeIntegerNotEqualTo(
+ /*IN*/ LARGE_INTEGER Operand1,
+ /*IN*/ LARGE_INTEGER Operand2);
+
+NTOSAPI
+BOOLEAN
+DDKAPI
+RtlLargeIntegerNotEqualToZero(
+ /*IN*/ LARGE_INTEGER Operand);
+
+NTOSAPI
+LARGE_INTEGER
+DDKAPI
+RtlLargeIntegerShiftLeft(
+ /*IN*/ LARGE_INTEGER LargeInteger,
+ /*IN*/ CCHAR ShiftCount);
+
+NTOSAPI
+LARGE_INTEGER
+DDKAPI
+RtlLargeIntegerShiftRight(
+ /*IN*/ LARGE_INTEGER LargeInteger,
+ /*IN*/ CCHAR ShiftCount);
+
+NTOSAPI
+LARGE_INTEGER
+DDKAPI
+RtlLargeIntegerSubtract(
+ /*IN*/ LARGE_INTEGER Minuend,
+ /*IN*/ LARGE_INTEGER Subtrahend);
+
+
+/*
+ * ULONG
+ * COMPUTE_PAGES_SPANNED(
+ * IN PVOID Va,
+ * IN ULONG Size)
+ */
+#define COMPUTE_PAGES_SPANNED(Va, \
+ Size) \
+ (ADDRESS_AND_SIZE_TO_SPAN_PAGES(Va, Size))
+
+
+/*
+** Architecture specific functions
+*/
+
+#ifdef _X86_
+
+NTOSAPI
+INTERLOCKED_RESULT
+DDKAPI
+Exi386InterlockedIncrementLong(
+ /*IN*/ PLONG Addend);
+
+NTOSAPI
+INTERLOCKED_RESULT
+DDKFASTAPI
+Exfi386InterlockedIncrementLong(
+ /*IN*/ PLONG Addend);
+
+NTOSAPI
+INTERLOCKED_RESULT
+DDKAPI
+Exi386InterlockedDecrementLong(
+ /*IN*/ PLONG Addend);
+
+NTOSAPI
+INTERLOCKED_RESULT
+DDKFASTAPI
+Exfi386InterlockedDecrementLong(
+ /*IN*/ PLONG Addend);
+
+NTOSAPI
+ULONG
+DDKAPI
+Exi386InterlockedExchangeUlong(
+ /*IN*/ PULONG Target,
+ /*IN*/ ULONG Value);
+
+NTOSAPI
+ULONG
+DDKFASTAPI
+Exfi386InterlockedExchangeUlong(
+ /*IN*/ PULONG Target,
+ /*IN*/ ULONG Value);
+
+#define ExInterlockedIncrementLong(Addend,Lock) Exfi386InterlockedIncrementLong(Addend)
+#define ExInterlockedDecrementLong(Addend,Lock) Exfi386InterlockedDecrementLong(Addend)
+#define ExInterlockedExchangeUlong(Target, Value, Lock) Exfi386InterlockedExchangeUlong(Target, Value)
+
+#endif /* _X86_ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINNT4_H */
diff --git a/tcc/include/winapi/ddk/winxp.h b/tcc/include/winapi/ddk/winxp.h
new file mode 100644
index 0000000..28e34a8
--- /dev/null
+++ b/tcc/include/winapi/ddk/winxp.h
@@ -0,0 +1,38 @@
+/*
+ * winxp.h
+ *
+ * Definitions only used in Windows XP and earlier versions
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __WINXP_H
+#define __WINXP_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINXP_H */
diff --git a/tcc/include/winapi/ddk/ws2san.h b/tcc/include/winapi/ddk/ws2san.h
new file mode 100644
index 0000000..dbb65a4
--- /dev/null
+++ b/tcc/include/winapi/ddk/ws2san.h
@@ -0,0 +1,248 @@
+/*
+ * ws2san.h
+ *
+ * WinSock Direct (SAN) support
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __WS2SAN_H
+#define __WS2SAN_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <winsock2.h>
+#include "ntddk.h"
+
+
+#define WSPAPI STDCALL
+
+/* FIXME: Unknown definitions */
+typedef PVOID LPWSPDATA;
+typedef PDWORD LPWSATHREADID;
+typedef PVOID LPWSPPROC_TABLE;
+typedef struct _WSPUPCALLTABLEEX WSPUPCALLTABLEEX;
+typedef WSPUPCALLTABLEEX *LPWSPUPCALLTABLEEX;
+
+#define SO_MAX_RDMA_SIZE 0x700D
+#define SO_RDMA_THRESHOLD_SIZE 0x700E
+
+#define WSAID_REGISTERMEMORY \
+ {0xC0B422F5, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}}
+
+#define WSAID_DEREGISTERMEMORY \
+ {0xC0B422F6, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}}
+
+#define WSAID_REGISTERRDMAMEMORY \
+ {0xC0B422F7, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}}
+
+#define WSAID_DEREGISTERRDMAMEMORY \
+ {0xC0B422F8, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}}
+
+#define WSAID_RDMAWRITE \
+ {0xC0B422F9, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}}
+
+#define WSAID_RDMAREAD \
+ {0xC0B422FA, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}}
+
+#define WSAID_MEMORYREGISTRATIONCACHECALLBACK \
+ {0xE5DA4AF8, 0xD824, 0x48CD, {0xA7, 0x99, 0x63, 0x37, 0xA9, 0x8E, 0xD2, 0xAF}}
+
+typedef struct _WSABUFEX {
+ u_long len;
+ char FAR *buf;
+ HANDLE handle;
+} WSABUFEX, FAR * LPWSABUFEX;
+
+#if 0
+typedef struct _WSPUPCALLTABLEEX {
+ 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;
+ LPWPUCOMPLETEOVERLAPPEDREQUEST lpWPUCompleteOverlappedRequest;
+} WSPUPCALLTABLEEX, FAR * LPWSPUPCALLTABLEEX;
+#endif
+
+int WSPAPI
+WSPStartupEx(
+ /*IN*/ WORD wVersionRequested,
+ /*OUT*/ LPWSPDATA lpWSPData,
+ /*IN*/ LPWSAPROTOCOL_INFOW lpProtocolInfo,
+ /*IN*/ LPWSPUPCALLTABLEEX lpUpcallTable,
+ /*OUT*/ LPWSPPROC_TABLE lpProcTable);
+
+typedef int WSPAPI
+(*LPWSPSTARTUPEX)(
+ /*IN*/ WORD wVersionRequested,
+ /*OUT*/ LPWSPDATA lpWSPData,
+ /*IN*/ LPWSAPROTOCOL_INFOW lpProtocolInfo,
+ /*IN*/ LPWSPUPCALLTABLEEX lpUpcallTable,
+ /*OUT*/ LPWSPPROC_TABLE lpProcTable);
+
+#define MEM_READ 1
+#define MEM_WRITE 2
+#define MEM_READWRITE 3
+
+int WSPAPI
+WSPDeregisterMemory(
+ /*IN*/ SOCKET s,
+ /*IN*/ HANDLE Handle,
+ /*OUT*/ LPINT lpErrno);
+
+typedef int WSPAPI
+(*LPFN_WSPDEREGISTERMEMORY)(
+ /*IN*/ SOCKET s,
+ /*IN*/ HANDLE Handle,
+ /*OUT*/ LPINT lpErrno);
+
+int WSPAPI
+WSPDeregisterRdmaMemory(
+ /*IN*/ SOCKET s,
+ /*IN*/ LPVOID lpRdmaBufferDescriptor,
+ /*IN*/ DWORD dwDescriptorLength,
+ /*OUT*/ LPINT lpErrno);
+
+typedef int WSPAPI
+(*LPFN_WSPDEREGISTERRDMAMEMORY)(
+ /*IN*/ SOCKET s,
+ /*IN*/ LPVOID lpRdmaBufferDescriptor,
+ /*IN*/ DWORD dwDescriptorLength,
+ /*OUT*/ LPINT lpErrno);
+
+int WSPAPI
+WSPMemoryRegistrationCacheCallback(
+ /*IN*/ PVOID lpvAddress,
+ /*IN*/ SIZE_T Size,
+ /*OUT*/ LPINT lpErrno);
+
+typedef int WSPAPI
+(*LPFN_WSPMEMORYREGISTRATIONCACHECALLBACK)(
+ /*IN*/ PVOID lpvAddress,
+ /*IN*/ SIZE_T Size,
+ /*OUT*/ LPINT lpErrno);
+
+int WSPAPI
+WSPRdmaRead(
+ /*IN*/ SOCKET s,
+ /*IN*/ LPWSABUFEX lpBuffers,
+ /*IN*/ DWORD dwBufferCount,
+ /*IN*/ LPVOID lpTargetBufferDescriptor,
+ /*IN*/ DWORD dwTargetDescriptorLength,
+ /*IN*/ DWORD dwTargetBufferOffset,
+ /*OUT*/ LPDWORD lpdwNumberOfBytesRead,
+ /*IN*/ DWORD dwFlags,
+ /*IN*/ LPWSAOVERLAPPED lpOverlapped,
+ /*IN*/ LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
+ /*IN*/ LPWSATHREADID lpThreadId,
+ /*OUT*/ LPINT lpErrno);
+
+typedef int WSPAPI
+(*LPFN_WSPRDMAREAD)(
+ /*IN*/ SOCKET s,
+ /*IN*/ LPWSABUFEX lpBuffers,
+ /*IN*/ DWORD dwBufferCount,
+ /*IN*/ LPVOID lpTargetBufferDescriptor,
+ /*IN*/ DWORD dwTargetDescriptorLength,
+ /*IN*/ DWORD dwTargetBufferOffset,
+ /*OUT*/ LPDWORD lpdwNumberOfBytesRead,
+ /*IN*/ DWORD dwFlags,
+ /*IN*/ LPWSAOVERLAPPED lpOverlapped,
+ /*IN*/ LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
+ /*IN*/ LPWSATHREADID lpThreadId,
+ /*OUT*/ LPINT lpErrno);
+
+int WSPAPI
+WSPRdmaWrite(
+ /*IN*/ SOCKET s,
+ /*IN*/ LPWSABUFEX lpBuffers,
+ /*IN*/ DWORD dwBufferCount,
+ /*IN*/ LPVOID lpTargetBufferDescriptor,
+ /*IN*/ DWORD dwTargetDescriptorLength,
+ /*IN*/ DWORD dwTargetBufferOffset,
+ /*OUT*/ LPDWORD lpdwNumberOfBytesWritten,
+ /*IN*/ DWORD dwFlags,
+ /*IN*/ LPWSAOVERLAPPED lpOverlapped,
+ /*IN*/ LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
+ /*IN*/ LPWSATHREADID lpThreadId,
+ /*OUT*/ LPINT lpErrno);
+
+typedef int WSPAPI
+(*LPFN_WSPRDMAWRITE)(
+ /*IN*/ SOCKET s,
+ /*IN*/ LPWSABUFEX lpBuffers,
+ /*IN*/ DWORD dwBufferCount,
+ /*IN*/ LPVOID lpTargetBufferDescriptor,
+ /*IN*/ DWORD dwTargetDescriptorLength,
+ /*IN*/ DWORD dwTargetBufferOffset,
+ /*OUT*/ LPDWORD lpdwNumberOfBytesWritten,
+ /*IN*/ DWORD dwFlags,
+ /*IN*/ LPWSAOVERLAPPED lpOverlapped,
+ /*IN*/ LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
+ /*IN*/ LPWSATHREADID lpThreadId,
+ /*OUT*/ LPINT lpErrno);
+
+HANDLE WSPAPI
+WSPRegisterMemory(
+ /*IN*/ SOCKET s,
+ /*IN*/ PVOID lpBuffer,
+ /*IN*/ DWORD dwBufferLength,
+ /*IN*/ DWORD dwFlags,
+ /*OUT*/ LPINT lpErrno);
+
+int WSPAPI
+WSPRegisterRdmaMemory(
+ /*IN*/ SOCKET s,
+ /*IN*/ PVOID lpBuffer,
+ /*IN*/ DWORD dwBufferLength,
+ /*IN*/ DWORD dwFlags,
+ /*OUT*/ LPVOID lpRdmaBufferDescriptor,
+ /*IN OUT*/ LPDWORD lpdwDescriptorLength,
+ /*OUT*/ LPINT lpErrno);
+
+typedef int WSPAPI
+(*LPFN_WSPREGISTERRDMAMEMORY)(
+ /*IN*/ SOCKET s,
+ /*IN*/ PVOID lpBuffer,
+ /*IN*/ DWORD dwBufferLength,
+ /*IN*/ DWORD dwFlags,
+ /*OUT*/ LPVOID lpRdmaBufferDescriptor,
+ /*IN OUT*/ LPDWORD lpdwDescriptorLength,
+ /*OUT*/ LPINT lpErrno);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WS2SAN_H */
diff --git a/tcc/include/winapi/ddk/xfilter.h b/tcc/include/winapi/ddk/xfilter.h
new file mode 100644
index 0000000..3940b44
--- /dev/null
+++ b/tcc/include/winapi/ddk/xfilter.h
@@ -0,0 +1,239 @@
+/*
+ * xfilter.h
+ *
+ * Address filtering for NDIS MACs
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __XFILTER_H
+#define __XFILTER_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+
+
+#define ETH_LENGTH_OF_ADDRESS 6
+
+#define ETH_IS_BROADCAST(Address) \
+ ((((PUCHAR)(Address))[0] == ((UCHAR)0xff)) && (((PUCHAR)(Address))[1] == ((UCHAR)0xff)))
+
+#define ETH_IS_MULTICAST(Address) \
+ (BOOLEAN)(((PUCHAR)(Address))[0] & ((UCHAR)0x01))
+
+#define ETH_COMPARE_NETWORK_ADDRESSES(_A, _B, _Result) \
+{ \
+ if (*(ULONG UNALIGNED *)&(_A)[2] > *(ULONG UNALIGNED *)&(_B)[2]) \
+ { \
+ *(_Result) = 1; \
+ } \
+ else if (*(ULONG UNALIGNED *)&(_A)[2] < *(ULONG UNALIGNED *)&(_B)[2]) \
+ { \
+ *(_Result) = (UINT)-1; \
+ } \
+ else if (*(USHORT UNALIGNED *)(_A) > *(USHORT UNALIGNED *)(_B)) \
+ { \
+ *(_Result) = 1; \
+ } \
+ else if (*(USHORT UNALIGNED *)(_A) < *(USHORT UNALIGNED *)(_B)) \
+ { \
+ *(_Result) = (UINT)-1; \
+ } \
+ else \
+ { \
+ *(_Result) = 0; \
+ } \
+}
+
+#define ETH_COMPARE_NETWORK_ADDRESSES_EQ(_A,_B, _Result) \
+{ \
+ if ((*(ULONG UNALIGNED *)&(_A)[2] == *(ULONG UNALIGNED *)&(_B)[2]) && \
+ (*(USHORT UNALIGNED *)(_A) == *(USHORT UNALIGNED *)(_B))) \
+ { \
+ *(_Result) = 0; \
+ } \
+ else \
+ { \
+ *(_Result) = 1; \
+ } \
+}
+
+#define ETH_COPY_NETWORK_ADDRESS(_D, _S) \
+{ \
+ *((ULONG UNALIGNED *)(_D)) = *((ULONG UNALIGNED *)(_S)); \
+ *((USHORT UNALIGNED *)((UCHAR *)(_D) + 4)) = *((USHORT UNALIGNED *)((UCHAR *)(_S) + 4)); \
+}
+
+#define FDDI_LENGTH_OF_LONG_ADDRESS 6
+#define FDDI_LENGTH_OF_SHORT_ADDRESS 2
+
+#define FDDI_IS_BROADCAST(Address, AddressLength, Result) \
+ *Result = ((*(PUCHAR)(Address) == (UCHAR)0xFF) && \
+ (*((PUCHAR)(Address) + 1) == (UCHAR)0xFF))
+
+#define FDDI_IS_MULTICAST(Address, AddressLength, Result) \
+ *Result = (BOOLEAN)(*(UCHAR *)(Address) & (UCHAR)0x01)
+
+#define FDDI_IS_SMT(FcByte, Result) \
+{ \
+ *Result = ((FcByte & ((UCHAR)0xf0)) == 0x40); \
+}
+
+
+#define FDDI_COMPARE_NETWORK_ADDRESSES(_A, _B, _Length, _Result) \
+{ \
+ if (*(USHORT UNALIGNED *)(_A) > *(USHORT UNALIGNED *)(_B)) \
+ { \
+ *(_Result) = 1; \
+ } \
+ else if (*(USHORT UNALIGNED *)(_A) < *(USHORT UNALIGNED *)(_B)) \
+ { \
+ *(_Result) = (UINT)-1; \
+ } \
+ else if (_Length == 2) \
+ { \
+ *(_Result) = 0; \
+ } \
+ else if (*(ULONG UNALIGNED *)((PUCHAR)(_A) + 2) > *(ULONG UNALIGNED *)((PUCHAR)(_B) + 2)) \
+ { \
+ *(_Result) = 1; \
+ } \
+ else if (*(ULONG UNALIGNED *)((PUCHAR)(_A) + 2) < *(ULONG UNALIGNED *)((PUCHAR)(_B) + 2)) \
+ { \
+ *(_Result) = (UINT)-1; \
+ } \
+ else \
+ { \
+ *(_Result) = 0; \
+ } \
+}
+
+#define FDDI_COMPARE_NETWORK_ADDRESSES_EQ(_A, _B, _Length, _Result) \
+{ \
+ if ((*(USHORT UNALIGNED *)(_A) == *(USHORT UNALIGNED *)(_B)) && \
+ (((_Length) == 2) || \
+ (*(ULONG UNALIGNED *)((PUCHAR)(_A) + 2) == *(ULONG UNALIGNED *)((PUCHAR)(_B) + 2)))) \
+ { \
+ *(_Result) = 0; \
+ } \
+ else \
+ { \
+ *(_Result) = 1; \
+ } \
+}
+
+#define FDDI_COPY_NETWORK_ADDRESS(D, S, AddressLength) \
+{ \
+ PCHAR _D = (D); \
+ PCHAR _S = (S); \
+ UINT _C = (AddressLength); \
+ for ( ; _C > 0 ; _D++, _S++, _C--) \
+ { \
+ *_D = *_S; \
+ } \
+}
+
+#define TR_LENGTH_OF_FUNCTIONAL 4
+#define TR_LENGTH_OF_ADDRESS 6
+
+typedef ULONG TR_FUNCTIONAL_ADDRESS;
+typedef ULONG TR_GROUP_ADDRESS;
+
+#define TR_IS_NOT_DIRECTED(_Address, _Result) \
+{ \
+ *(_Result) = (BOOLEAN)((_Address)[0] & 0x80); \
+}
+
+#define TR_IS_FUNCTIONAL(_Address, _Result) \
+{ \
+ *(_Result) = (BOOLEAN)(((_Address)[0] & 0x80) && !((_Address)[2] & 0x80)); \
+}
+
+#define TR_IS_GROUP(_Address, _Result) \
+{ \
+ *(_Result) = (BOOLEAN)((_Address)[0] & (_Address)[2] & 0x80); \
+}
+
+#define TR_IS_SOURCE_ROUTING(_Address, _Result) \
+{ \
+ *(_Result) = (BOOLEAN)((_Address)[0] & 0x80); \
+}
+
+#define TR_IS_MAC_FRAME(_PacketHeader) ((((PUCHAR)_PacketHeader)[1] & 0xFC) == 0)
+
+#define TR_IS_BROADCAST(_Address, _Result) \
+{ \
+ *(_Result) = (BOOLEAN)(((*(UNALIGNED USHORT *)&(_Address)[0] == 0xFFFF) || \
+ (*(UNALIGNED USHORT *)&(_Address)[0] == 0x00C0)) && \
+ (*(UNALIGNED ULONG *)&(_Address)[2] == 0xFFFFFFFF)); \
+}
+
+#define TR_COMPARE_NETWORK_ADDRESSES(_A, _B, _Result) \
+{ \
+ if (*(ULONG UNALIGNED *)&(_A)[2] > *(ULONG UNALIGNED *)&(_B)[2]) \
+ { \
+ *(_Result) = 1; \
+ } \
+ else if (*(ULONG UNALIGNED *)&(_A)[2] < *(ULONG UNALIGNED *)&(_B)[2]) \
+ { \
+ *(_Result) = (UINT)-1; \
+ } \
+ else if (*(USHORT UNALIGNED *)(_A) > *(USHORT UNALIGNED *)(_B)) \
+ { \
+ *(_Result) = 1; \
+ } \
+ else if (*(USHORT UNALIGNED *)(_A) < *(USHORT UNALIGNED *)(_B)) \
+ { \
+ *(_Result) = (UINT)-1; \
+ } \
+ else \
+ { \
+ *(_Result) = 0; \
+ } \
+}
+
+#define TR_COPY_NETWORK_ADDRESS(_D, _S) \
+{ \
+ *((ULONG UNALIGNED *)(_D)) = *((ULONG UNALIGNED *)(_S)); \
+ *((USHORT UNALIGNED *)((UCHAR *)(_D)+4)) = *((USHORT UNALIGNED *)((UCHAR *)(_S) + 4)); \
+}
+
+#define TR_COMPARE_NETWORK_ADDRESSES_EQ(_A, _B, _Result) \
+{ \
+ if ((*(ULONG UNALIGNED *)&(_A)[2] == *(ULONG UNALIGNED *)&(_B)[2]) && \
+ (*(USHORT UNALIGNED *)&(_A)[0] == *(USHORT UNALIGNED *)&(_B)[0])) \
+ { \
+ *(_Result) = 0; \
+ } \
+ else \
+ { \
+ *(_Result) = 1; \
+ } \
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __XFILTER_H */
diff --git a/tcc/include/winapi/devguid.h b/tcc/include/winapi/devguid.h
new file mode 100644
index 0000000..817a162
--- /dev/null
+++ b/tcc/include/winapi/devguid.h
@@ -0,0 +1,65 @@
+#ifndef _DEVGUID_H
+#define _DEVGUID_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern const GUID GUID_DEVCLASS_WCEUSBS;
+extern const GUID GUID_DEVCLASS_USB;
+extern const GUID GUID_DEVCLASS_PNPPRINTERS;
+extern const GUID GUID_DEVCLASS_DOT4;
+extern const GUID GUID_DEVCLASS_DOT4PRINT;
+extern const GUID GUID_DEVCLASS_CDROM;
+extern const GUID GUID_DEVCLASS_COMPUTER;
+extern const GUID GUID_DEVCLASS_DISKDRIVE;
+extern const GUID GUID_DEVCLASS_DISPLAY;
+extern const GUID GUID_DEVCLASS_FDC;
+extern const GUID GUID_DEVCLASS_HDC;
+extern const GUID GUID_DEVCLASS_KEYBOARD;
+extern const GUID GUID_DEVCLASS_MEDIA;
+extern const GUID GUID_DEVCLASS_MODEM;
+extern const GUID GUID_DEVCLASS_MONITOR;
+extern const GUID GUID_DEVCLASS_MOUSE;
+extern const GUID GUID_DEVCLASS_MTD;
+extern const GUID GUID_DEVCLASS_MULTIFUNCTION;
+extern const GUID GUID_DEVCLASS_NET;
+extern const GUID GUID_DEVCLASS_NETCLIENT;
+extern const GUID GUID_DEVCLASS_NETSERVICE;
+extern const GUID GUID_DEVCLASS_NETTRANS;
+extern const GUID GUID_DEVCLASS_PCMCIA;
+extern const GUID GUID_DEVCLASS_PORTS;
+extern const GUID GUID_DEVCLASS_PRINTER;
+extern const GUID GUID_DEVCLASS_SCSIADAPTER;
+extern const GUID GUID_DEVCLASS_SYSTEM;
+extern const GUID GUID_DEVCLASS_UNKNOWN;
+extern const GUID GUID_DEVCLASS_FLOPPYDISK;
+extern const GUID GUID_DEVCLASS_PROCESSOR;
+extern const GUID GUID_DEVCLASS_MULTIPORTSERIAL;
+extern const GUID GUID_DEVCLASS_SMARTCARDREADER;
+extern const GUID GUID_DEVCLASS_VOLUMESNAPSHOT;
+extern const GUID GUID_DEVCLASS_1394DEBUG;
+extern const GUID GUID_DEVCLASS_1394;
+extern const GUID GUID_DEVCLASS_INFRARED;
+extern const GUID GUID_DEVCLASS_IMAGE;
+extern const GUID GUID_DEVCLASS_TAPEDRIVE;
+extern const GUID GUID_DEVCLASS_VOLUME;
+extern const GUID GUID_DEVCLASS_BATTERY;
+extern const GUID GUID_DEVCLASS_HIDCLASS;
+extern const GUID GUID_DEVCLASS_61883;
+extern const GUID GUID_DEVCLASS_LEGACYDRIVER;
+extern const GUID GUID_DEVCLASS_SDHOST;
+extern const GUID GUID_DEVCLASS_AVC;
+extern const GUID GUID_DEVCLASS_ENUM1394;
+extern const GUID GUID_DEVCLASS_MEDIUMCHANGER;
+extern const GUID GUID_DEVCLASS_NTAPM;
+extern const GUID GUID_DEVCLASS_SBP2;
+extern const GUID GUID_DEVCLASS_BLUETOOTH;
+extern const GUID GUID_DEVCLASS_PROBES;
+#ifdef __cplusplus
+}
+#endif
+#endif /* _DEVGUID_H */
diff --git a/tcc/include/winapi/dhcpcsdk.h b/tcc/include/winapi/dhcpcsdk.h
new file mode 100644
index 0000000..1d27df7
--- /dev/null
+++ b/tcc/include/winapi/dhcpcsdk.h
@@ -0,0 +1,42 @@
+#ifndef _DHCPCDSK_H
+#define _DHCPCDSK_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if (_WIN32_WINNT >= 0x0500)
+#define DHCPCAPI_REGISTER_HANDLE_EVENT 0x00000001
+#define DHCPCAPI_REQUEST_PERSISTENT 0x00000001
+#define DHCPCAPI_REQUEST_SYNCHRONOUS 0x00000002
+typedef struct _DHCPAPI_CLASSID {
+ ULONG Flags;
+ LPBYTE Data;
+ ULONG nBytesData;
+} DHCPCAPI_CLASSID,*PDHCPCAPI_CLASSID,*LPDHCPCAPI_CLASSID;
+typedef struct _DHCPAPI_PARAMS {
+ ULONG Flags;
+ ULONG OptionId;
+ BOOL IsVendor;
+ LPBYTE Data;
+ DWORD nBytesData;
+} DHCPAPI_PARAMS,*PDHCPAPI_PARAMS,*LPDHCPAPI_PARAMS;
+typedef struct _DHCPAPI_PARAMS_ARRAY {
+ ULONG nParams;
+ LPDHCPAPI_PARAMS Params;
+} DHCPCAPI_PARAMS_ARRAY,*PDHCPCAPI_PARAMS_ARRAY,*LPDHCPCAPI_PARAMS_ARRAY;
+VOID WINAPI DhcpCApiCleanup(void);
+DWORD WINAPI DhcpCApiInitialize(LPDWORD);
+DWORD WINAPI DhcpDeRegisterParamChange(DWORD,LPVOID,LPVOID);
+DWORD WINAPI DhcpRegisterParamChange(DWORD,LPVOID,PWSTR,LPDHCPCAPI_CLASSID,DHCPCAPI_PARAMS_ARRAY,LPVOID);
+DWORD WINAPI DhcpRemoveDNSRegistrations(void);
+DWORD WINAPI DhcpUndoRequestParams(DWORD,LPVOID,LPWSTR,LPWSTR);
+#endif /* (_WIN32_WINNT >= 0x0500) */
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/directx/d3d9.h b/tcc/include/winapi/directx/d3d9.h
new file mode 100644
index 0000000..920c129
--- /dev/null
+++ b/tcc/include/winapi/directx/d3d9.h
@@ -0,0 +1,1288 @@
+/*
+
+ d3d9.h - Header file for the Direct3D9 API
+
+ Written by Filip Navara <xnavara@volny.cz>
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+*/
+
+#ifndef _D3D9_H
+#define _D3D9_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifndef DIRECT3D_VERSION
+#define DIRECT3D_VERSION 0x0900
+#endif
+
+#if (DIRECT3D_VERSION >= 0x0900)
+
+#include <objbase.h>
+#include "d3d9types.h"
+#include "d3d9caps.h"
+
+#define D3D_SDK_VERSION 31
+#define D3DCREATE_FPU_PRESERVE 0x02
+#define D3DCREATE_MULTITHREADED 0x04
+#define D3DCREATE_PUREDEVICE 0x10
+#define D3DCREATE_SOFTWARE_VERTEXPROCESSING 0x20
+#define D3DCREATE_HARDWARE_VERTEXPROCESSING 0x40
+#define D3DCREATE_MIXED_VERTEXPROCESSING 0x80
+#define D3DSPD_IUNKNOWN 1
+#define D3DSGR_NO_CALIBRATION 0
+#define D3DSGR_CALIBRATE 1
+#define MAKE_D3DHRESULT(code) MAKE_HRESULT(1,0x876,code)
+#define MAKE_D3DSTATUS(code) MAKE_HRESULT(0,0x876,code)
+#define D3D_OK 0
+#define D3DOK_NOAUTOGEN MAKE_D3DSTATUS(2159)
+#define D3DERR_WRONGTEXTUREFORMAT MAKE_D3DHRESULT(2072)
+#define D3DERR_UNSUPPORTEDCOLOROPERATION MAKE_D3DHRESULT(2073)
+#define D3DERR_UNSUPPORTEDCOLORARG MAKE_D3DHRESULT(2074)
+#define D3DERR_UNSUPPORTEDALPHAOPERATION MAKE_D3DHRESULT(2075)
+#define D3DERR_UNSUPPORTEDALPHAARG MAKE_D3DHRESULT(2076)
+#define D3DERR_TOOMANYOPERATIONS MAKE_D3DHRESULT(2077)
+#define D3DERR_CONFLICTINGTEXTUREFILTER MAKE_D3DHRESULT(2078)
+#define D3DERR_UNSUPPORTEDFACTORVALUE MAKE_D3DHRESULT(2079)
+#define D3DERR_CONFLICTINGRENDERSTATE MAKE_D3DHRESULT(2081)
+#define D3DERR_UNSUPPORTEDTEXTUREFILTER MAKE_D3DHRESULT(2082)
+#define D3DERR_CONFLICTINGTEXTUREPALETTE MAKE_D3DHRESULT(2086)
+#define D3DERR_DRIVERINTERNALERROR MAKE_D3DHRESULT(2087)
+#define D3DERR_NOTFOUND MAKE_D3DHRESULT(2150)
+#define D3DERR_MOREDATA MAKE_D3DHRESULT(2151)
+#define D3DERR_DEVICELOST MAKE_D3DHRESULT(2152)
+#define D3DERR_DEVICENOTRESET MAKE_D3DHRESULT(2153)
+#define D3DERR_NOTAVAILABLE MAKE_D3DHRESULT(2154)
+#define D3DERR_OUTOFVIDEOMEMORY MAKE_D3DHRESULT(380)
+#define D3DERR_INVALIDDEVICE MAKE_D3DHRESULT(2155)
+#define D3DERR_INVALIDCALL MAKE_D3DHRESULT(2156)
+#define D3DERR_DRIVERINVALIDCALL MAKE_D3DHRESULT(2157)
+#define D3DERR_WASSTILLDRAWING MAKE_D3DHRESULT(540)
+#define D3DADAPTER_DEFAULT 0
+#define D3DCURSOR_IMMEDIATE_UPDATE 1
+#define D3DENUM_HOST_ADAPTER 1
+#define D3DPRESENTFLAG_LOCKABLE_BACKBUFFER 1
+#define D3DPV_DONOTCOPYDATA 1
+#define D3DENUM_NO_WHQL_LEVEL 2
+#define D3DPRESENT_BACK_BUFFERS_MAX 3
+#define VALID_D3DENUM_FLAGS 3
+#define D3DMAXNUMPRIMITIVES 0xFFFF
+#define D3DMAXNUMVERTICES 0xFFFF
+#define D3DCURRENT_DISPLAY_MODE 0xEFFFFF
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern const GUID IID_IDirect3D9;
+extern const GUID IID_IDirect3DDevice9;
+extern const GUID IID_IDirect3DVolume9;
+extern const GUID IID_IDirect3DSwapChain9;
+extern const GUID IID_IDirect3DResource9;
+extern const GUID IID_IDirect3DSurface9;
+extern const GUID IID_IDirect3DVertexBuffer9;
+extern const GUID IID_IDirect3DIndexBuffer9;
+extern const GUID IID_IDirect3DBaseTexture9;
+extern const GUID IID_IDirect3DCubeTexture9;
+extern const GUID IID_IDirect3DTexture9;
+extern const GUID IID_IDirect3DVolumeTexture9;
+extern const GUID IID_IDirect3DVertexDeclaration9;
+extern const GUID IID_IDirect3DVertexShader9;
+extern const GUID IID_IDirect3DPixelShader9;
+extern const GUID IID_IDirect3DStateBlock9;
+extern const GUID IID_IDirect3DQuery9;
+#ifdef __cplusplus
+};
+#endif
+
+typedef _COM_interface IDirect3D9 IDirect3D9;
+typedef _COM_interface IDirect3DDevice9 IDirect3DDevice9;
+typedef _COM_interface IDirect3DVolume9 IDirect3DVolume9;
+typedef _COM_interface IDirect3DSwapChain9 IDirect3DSwapChain9;
+typedef _COM_interface IDirect3DResource9 IDirect3DResource9;
+typedef _COM_interface IDirect3DSurface9 IDirect3DSurface9;
+typedef _COM_interface IDirect3DVertexBuffer9 IDirect3DVertexBuffer9;
+typedef _COM_interface IDirect3DIndexBuffer9 IDirect3DIndexBuffer9;
+typedef _COM_interface IDirect3DBaseTexture9 IDirect3DBaseTexture9;
+typedef _COM_interface IDirect3DCubeTexture9 IDirect3DCubeTexture9;
+typedef _COM_interface IDirect3DTexture9 IDirect3DTexture9;
+typedef _COM_interface IDirect3DVolumeTexture9 IDirect3DVolumeTexture9;
+typedef _COM_interface IDirect3DVertexDeclaration9 IDirect3DVertexDeclaration9;
+typedef _COM_interface IDirect3DVertexShader9 IDirect3DVertexShader9;
+typedef _COM_interface IDirect3DPixelShader9 IDirect3DPixelShader9;
+typedef _COM_interface IDirect3DStateBlock9 IDirect3DStateBlock9;
+typedef _COM_interface IDirect3DQuery9 IDirect3DQuery9;
+
+#undef INTERFACE
+#define INTERFACE IDirect3D9
+DECLARE_INTERFACE_(IDirect3D9,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(RegisterSoftwareDevice)(THIS_ void* pInitializeFunction) PURE;
+ STDMETHOD_(UINT,GetAdapterCount)(THIS) PURE;
+ STDMETHOD(GetAdapterIdentifier)(THIS_ UINT,DWORD,D3DADAPTER_IDENTIFIER9*) PURE;
+ STDMETHOD_(UINT,GetAdapterModeCount)(THIS_ UINT,D3DFORMAT) PURE;
+ STDMETHOD(EnumAdapterModes)(THIS_ UINT,D3DFORMAT,UINT,D3DDISPLAYMODE*) PURE;
+ STDMETHOD(GetAdapterDisplayMode)(THIS_ UINT,D3DDISPLAYMODE*) PURE;
+ STDMETHOD(CheckDeviceType)(THIS_ UINT,D3DDEVTYPE,D3DFORMAT,D3DFORMAT,BOOL) PURE;
+ STDMETHOD(CheckDeviceFormat)(THIS_ UINT,D3DDEVTYPE,D3DFORMAT,DWORD,D3DRESOURCETYPE,D3DFORMAT) PURE;
+ STDMETHOD(CheckDeviceMultiSampleType)(THIS_ UINT,D3DDEVTYPE,D3DFORMAT,BOOL,D3DMULTISAMPLE_TYPE,DWORD*) PURE;
+ STDMETHOD(CheckDepthStencilMatch)(THIS_ UINT,D3DDEVTYPE,D3DFORMAT,D3DFORMAT,D3DFORMAT) PURE;
+ STDMETHOD(CheckDeviceFormatConversion)(THIS_ UINT,D3DDEVTYPE,D3DFORMAT,D3DFORMAT) PURE;
+ STDMETHOD(GetDeviceCaps)(THIS_ UINT,D3DDEVTYPE,D3DCAPS9*) PURE;
+ STDMETHOD_(HMONITOR,GetAdapterMonitor)(THIS_ UINT) PURE;
+ STDMETHOD(CreateDevice)(THIS_ UINT,D3DDEVTYPE,HWND,DWORD,D3DPRESENT_PARAMETERS*,IDirect3DDevice9**) PURE;
+};
+typedef struct IDirect3D9 *LPDIRECT3D9, *PDIRECT3D9;
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirect3D9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3D9_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3D9_Release(p) (p)->lpVtbl->Release(p)
+#define IDirect3D9_RegisterSoftwareDevice(p,a) (p)->lpVtbl->RegisterSoftwareDevice(p,a)
+#define IDirect3D9_GetAdapterCount(p) (p)->lpVtbl->GetAdapterCount(p)
+#define IDirect3D9_GetAdapterIdentifier(p,a,b,c) (p)->lpVtbl->GetAdapterIdentifier(p,a,b,c)
+#define IDirect3D9_GetAdapterModeCount(p,a,b) (p)->lpVtbl->GetAdapterModeCount(p,a,b)
+#define IDirect3D9_EnumAdapterModes(p,a,b,c,d) (p)->lpVtbl->EnumAdapterModes(p,a,b,c,d)
+#define IDirect3D9_GetAdapterDisplayMode(p,a,b) (p)->lpVtbl->GetAdapterDisplayMode(p,a,b)
+#define IDirect3D9_CheckDeviceType(p,a,b,c,d,e) (p)->lpVtbl->CheckDeviceType(p,a,b,c,d,e)
+#define IDirect3D9_CheckDeviceFormat(p,a,b,c,d,e,f) (p)->lpVtbl->CheckDeviceFormat(p,a,b,c,d,e,f)
+#define IDirect3D9_CheckDeviceMultiSampleType(p,a,b,c,d,e,f) (p)->lpVtbl->CheckDeviceMultiSampleType(p,a,b,c,d,e,f)
+#define IDirect3D9_CheckDepthStencilMatch(p,a,b,c,d,e) (p)->lpVtbl->CheckDepthStencilMatch(p,a,b,c,d,e)
+#define IDirect3D9_CheckDeviceFormatConversion(p,a,b,c,d) (p)->lpVtbl->CheckDeviceFormatConversion(p,a,b,c,d)
+#define IDirect3D9_GetDeviceCaps(p,a,b,c) (p)->lpVtbl->GetDeviceCaps(p,a,b,c)
+#define IDirect3D9_GetAdapterMonitor(p,a) (p)->lpVtbl->GetAdapterMonitor(p,a)
+#define IDirect3D9_CreateDevice(p,a,b,c,d,e,f) (p)->lpVtbl->CreateDevice(p,a,b,c,d,e,f)
+#else
+#define IDirect3D9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3D9_AddRef(p) (p)->AddRef()
+#define IDirect3D9_Release(p) (p)->Release()
+#define IDirect3D9_RegisterSoftwareDevice(p,a) (p)->RegisterSoftwareDevice(a)
+#define IDirect3D9_GetAdapterCount(p) (p)->GetAdapterCount()
+#define IDirect3D9_GetAdapterIdentifier(p,a,b,c) (p)->GetAdapterIdentifier(a,b,c)
+#define IDirect3D9_GetAdapterModeCount(p,a,b) (p)->GetAdapterModeCount(a,b)
+#define IDirect3D9_EnumAdapterModes(p,a,b,c,d) (p)->EnumAdapterModes(a,b,c,d)
+#define IDirect3D9_GetAdapterDisplayMode(p,a,b) (p)->GetAdapterDisplayMode(a,b)
+#define IDirect3D9_CheckDeviceType(p,a,b,c,d,e) (p)->CheckDeviceType(a,b,c,d,e)
+#define IDirect3D9_CheckDeviceFormat(p,a,b,c,d,e,f) (p)->CheckDeviceFormat(a,b,c,d,e,f)
+#define IDirect3D9_CheckDeviceMultiSampleType(p,a,b,c,d,e,f) (p)->CheckDeviceMultiSampleType(a,b,c,d,e,f)
+#define IDirect3D9_CheckDepthStencilMatch(p,a,b,c,d,e) (p)->CheckDepthStencilMatch(a,b,c,d,e)
+#define IDirect3D9_CheckDeviceFormatConversion(p,a,b,c,d) (p)->CheckDeviceFormatConversion(a,b,c,d)
+#define IDirect3D9_GetDeviceCaps(p,a,b,c) (p)->GetDeviceCaps(a,b,c)
+#define IDirect3D9_GetAdapterMonitor(p,a) (p)->GetAdapterMonitor(a)
+#define IDirect3D9_CreateDevice(p,a,b,c,d,e,f) (p)->CreateDevice(a,b,c,d,e,f)
+#endif
+
+#undef INTERFACE
+#define INTERFACE IDirect3DDevice9
+DECLARE_INTERFACE_(IDirect3DDevice9,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(TestCooperativeLevel)(THIS) PURE;
+ STDMETHOD_(UINT,GetAvailableTextureMem)(THIS) PURE;
+ STDMETHOD(EvictManagedResources)(THIS) PURE;
+ STDMETHOD(GetDirect3D)(THIS_ IDirect3D9**) PURE;
+ STDMETHOD(GetDeviceCaps)(THIS_ D3DCAPS9*) PURE;
+ STDMETHOD(GetDisplayMode)(THIS_ UINT,D3DDISPLAYMODE*) PURE;
+ STDMETHOD(GetCreationParameters)(THIS_ D3DDEVICE_CREATION_PARAMETERS*) PURE;
+ STDMETHOD(SetCursorProperties)(THIS_ UINT,UINT,IDirect3DSurface9*) PURE;
+ STDMETHOD_(void,SetCursorPosition)(THIS_ int,int,DWORD) PURE;
+ STDMETHOD_(BOOL,ShowCursor)(THIS_ BOOL) PURE;
+ STDMETHOD(CreateAdditionalSwapChain)(THIS_ D3DPRESENT_PARAMETERS*,IDirect3DSwapChain9**) PURE;
+ STDMETHOD(GetSwapChain)(THIS_ UINT,IDirect3DSwapChain9**) PURE;
+ STDMETHOD_(UINT,GetNumberOfSwapChains)(THIS) PURE;
+ STDMETHOD(Reset)(THIS_ D3DPRESENT_PARAMETERS*) PURE;
+ STDMETHOD(Present)(THIS_ CONST RECT*,CONST RECT*,HWND,CONST RGNDATA*) PURE;
+ STDMETHOD(GetBackBuffer)(THIS_ UINT,UINT,D3DBACKBUFFER_TYPE,IDirect3DSurface9**) PURE;
+ STDMETHOD(GetRasterStatus)(THIS_ UINT,D3DRASTER_STATUS*) PURE;
+ STDMETHOD(SetDialogBoxMode)(THIS_ BOOL) PURE;
+ STDMETHOD_(void,SetGammaRamp)(THIS_ UINT,DWORD,CONST D3DGAMMARAMP*) PURE;
+ STDMETHOD_(void,GetGammaRamp)(THIS_ UINT,D3DGAMMARAMP*) PURE;
+ STDMETHOD(CreateTexture)(THIS_ UINT,UINT,UINT,DWORD,D3DFORMAT,D3DPOOL,IDirect3DTexture9**,HANDLE*) PURE;
+ STDMETHOD(CreateVolumeTexture)(THIS_ UINT,UINT,UINT,UINT,DWORD,D3DFORMAT,D3DPOOL,IDirect3DVolumeTexture9**,HANDLE*) PURE;
+ STDMETHOD(CreateCubeTexture)(THIS_ UINT,UINT,DWORD,D3DFORMAT,D3DPOOL,IDirect3DCubeTexture9**, HANDLE*) PURE;
+ STDMETHOD(CreateVertexBuffer)(THIS_ UINT,DWORD,DWORD,D3DPOOL,IDirect3DVertexBuffer9**, HANDLE*) PURE;
+ STDMETHOD(CreateIndexBuffer)(THIS_ UINT,DWORD,D3DFORMAT,D3DPOOL,IDirect3DIndexBuffer9**,HANDLE*) PURE;
+ STDMETHOD(CreateRenderTarget)(THIS_ UINT,UINT,D3DFORMAT,D3DMULTISAMPLE_TYPE,DWORD,BOOL,IDirect3DSurface9**,HANDLE*) PURE;
+ STDMETHOD(CreateDepthStencilSurface)(THIS_ UINT,UINT,D3DFORMAT,D3DMULTISAMPLE_TYPE,DWORD,BOOL,IDirect3DSurface9**,HANDLE*) PURE;
+ STDMETHOD(UpdateSurface)(THIS_ IDirect3DSurface9*,CONST RECT*,IDirect3DSurface9*,CONST POINT*) PURE;
+ STDMETHOD(UpdateTexture)(THIS_ IDirect3DBaseTexture9*,IDirect3DBaseTexture9*) PURE;
+ STDMETHOD(GetRenderTargetData)(THIS_ IDirect3DSurface9*,IDirect3DSurface9*) PURE;
+ STDMETHOD(GetFrontBufferData)(THIS_ UINT,IDirect3DSurface9*) PURE;
+ STDMETHOD(StretchRect)(THIS_ IDirect3DSurface9*,CONST RECT*,IDirect3DSurface9*,CONST RECT*,D3DTEXTUREFILTERTYPE) PURE;
+ STDMETHOD(ColorFill)(THIS_ IDirect3DSurface9*,CONST RECT*,D3DCOLOR) PURE;
+ STDMETHOD(CreateOffscreenPlainSurface)(THIS_ UINT,UINT,D3DFORMAT,D3DPOOL,IDirect3DSurface9**,HANDLE*) PURE;
+ STDMETHOD(SetRenderTarget)(THIS_ DWORD,IDirect3DSurface9*) PURE;
+ STDMETHOD(GetRenderTarget)(THIS_ DWORD,IDirect3DSurface9**) PURE;
+ STDMETHOD(SetDepthStencilSurface)(THIS_ IDirect3DSurface9*) PURE;
+ STDMETHOD(GetDepthStencilSurface)(THIS_ IDirect3DSurface9**) PURE;
+ STDMETHOD(BeginScene)(THIS) PURE;
+ STDMETHOD(EndScene)(THIS) PURE;
+ STDMETHOD(Clear)(THIS_ DWORD,CONST D3DRECT*,DWORD,D3DCOLOR,float,DWORD) PURE;
+ STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE,CONST D3DMATRIX*) PURE;
+ STDMETHOD(GetTransform)(THIS_ D3DTRANSFORMSTATETYPE,D3DMATRIX*) PURE;
+ STDMETHOD(MultiplyTransform)(THIS_ D3DTRANSFORMSTATETYPE,CONST D3DMATRIX*) PURE;
+ STDMETHOD(SetViewport)(THIS_ CONST D3DVIEWPORT9*) PURE;
+ STDMETHOD(GetViewport)(THIS_ D3DVIEWPORT9*) PURE;
+ STDMETHOD(SetMaterial)(THIS_ CONST D3DMATERIAL9*) PURE;
+ STDMETHOD(GetMaterial)(THIS_ D3DMATERIAL9*) PURE;
+ STDMETHOD(SetLight)(THIS_ DWORD,CONST D3DLIGHT9*) PURE;
+ STDMETHOD(GetLight)(THIS_ DWORD,D3DLIGHT9*) PURE;
+ STDMETHOD(LightEnable)(THIS_ DWORD,BOOL) PURE;
+ STDMETHOD(GetLightEnable)(THIS_ DWORD,BOOL*) PURE;
+ STDMETHOD(SetClipPlane)(THIS_ DWORD,CONST float*) PURE;
+ STDMETHOD(GetClipPlane)(THIS_ DWORD,float*) PURE;
+ STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE,DWORD) PURE;
+ STDMETHOD(GetRenderState)(THIS_ D3DRENDERSTATETYPE,DWORD*) PURE;
+ STDMETHOD(CreateStateBlock)(THIS_ D3DSTATEBLOCKTYPE,IDirect3DStateBlock9**) PURE;
+ STDMETHOD(BeginStateBlock)(THIS) PURE;
+ STDMETHOD(EndStateBlock)(THIS_ IDirect3DStateBlock9**) PURE;
+ STDMETHOD(SetClipStatus)(THIS_ CONST D3DCLIPSTATUS9*) PURE;
+ STDMETHOD(GetClipStatus)(THIS_ D3DCLIPSTATUS9*) PURE;
+ STDMETHOD(GetTexture)(THIS_ DWORD,IDirect3DBaseTexture9**) PURE;
+ STDMETHOD(SetTexture)(THIS_ DWORD,IDirect3DBaseTexture9*) PURE;
+ STDMETHOD(GetTextureStageState)(THIS_ DWORD,D3DTEXTURESTAGESTATETYPE,DWORD*) PURE;
+ STDMETHOD(SetTextureStageState)(THIS_ DWORD,D3DTEXTURESTAGESTATETYPE,DWORD) PURE;
+ STDMETHOD(GetSamplerState)(THIS_ DWORD,D3DSAMPLERSTATETYPE,DWORD*) PURE;
+ STDMETHOD(SetSamplerState)(THIS_ DWORD,D3DSAMPLERSTATETYPE,DWORD) PURE;
+ STDMETHOD(ValidateDevice)(THIS_ DWORD*) PURE;
+ STDMETHOD(SetPaletteEntries)(THIS_ UINT,CONST PALETTEENTRY*) PURE;
+ STDMETHOD(GetPaletteEntries)(THIS_ UINT,PALETTEENTRY*) PURE;
+ STDMETHOD(SetCurrentTexturePalette)(THIS_ UINT) PURE;
+ STDMETHOD(GetCurrentTexturePalette)(THIS_ UINT*) PURE;
+ STDMETHOD(SetScissorRect)(THIS_ CONST RECT*) PURE;
+ STDMETHOD(GetScissorRect)(THIS_ RECT*) PURE;
+ STDMETHOD(SetSoftwareVertexProcessing)(THIS_ BOOL) PURE;
+ STDMETHOD_(BOOL,GetSoftwareVertexProcessing)(THIS) PURE;
+ STDMETHOD(SetNPatchMode)(THIS_ float) PURE;
+ STDMETHOD_(float,GetNPatchMode)(THIS) PURE;
+ STDMETHOD(DrawPrimitive)(THIS_ D3DPRIMITIVETYPE,UINT,UINT) PURE;
+ STDMETHOD(DrawIndexedPrimitive)(THIS_ D3DPRIMITIVETYPE,INT,UINT,UINT,UINT,UINT) PURE;
+ STDMETHOD(DrawPrimitiveUP)(THIS_ D3DPRIMITIVETYPE,UINT,CONST void*,UINT) PURE;
+ STDMETHOD(DrawIndexedPrimitiveUP)(THIS_ D3DPRIMITIVETYPE,UINT,UINT,UINT,CONST void*,D3DFORMAT,CONST void*,UINT) PURE;
+ STDMETHOD(ProcessVertices)(THIS_ UINT,UINT,UINT,IDirect3DVertexBuffer9*,IDirect3DVertexDeclaration9*,DWORD) PURE;
+ STDMETHOD(CreateVertexDeclaration)(THIS_ CONST D3DVERTEXELEMENT9*,IDirect3DVertexDeclaration9**) PURE;
+ STDMETHOD(SetVertexDeclaration)(THIS_ IDirect3DVertexDeclaration9*) PURE;
+ STDMETHOD(GetVertexDeclaration)(THIS_ IDirect3DVertexDeclaration9**) PURE;
+ STDMETHOD(SetFVF)(THIS_ DWORD) PURE;
+ STDMETHOD(GetFVF)(THIS_ DWORD*) PURE;
+ STDMETHOD(CreateVertexShader)(THIS_ CONST DWORD*,IDirect3DVertexShader9**) PURE;
+ STDMETHOD(SetVertexShader)(THIS_ IDirect3DVertexShader9*) PURE;
+ STDMETHOD(GetVertexShader)(THIS_ IDirect3DVertexShader9**) PURE;
+ STDMETHOD(SetVertexShaderConstantF)(THIS_ UINT,CONST float*,UINT) PURE;
+ STDMETHOD(GetVertexShaderConstantF)(THIS_ UINT,float*,UINT) PURE;
+ STDMETHOD(SetVertexShaderConstantI)(THIS_ UINT,CONST int*,UINT) PURE;
+ STDMETHOD(GetVertexShaderConstantI)(THIS_ UINT,int*,UINT) PURE;
+ STDMETHOD(SetVertexShaderConstantB)(THIS_ UINT,CONST BOOL*,UINT) PURE;
+ STDMETHOD(GetVertexShaderConstantB)(THIS_ UINT,BOOL*,UINT) PURE;
+ STDMETHOD(SetStreamSource)(THIS_ UINT,IDirect3DVertexBuffer9*,UINT,UINT) PURE;
+ STDMETHOD(GetStreamSource)(THIS_ UINT,IDirect3DVertexBuffer9**,UINT*,UINT*) PURE;
+ STDMETHOD(SetStreamSourceFreq)(THIS_ UINT,UINT) PURE;
+ STDMETHOD(GetStreamSourceFreq)(THIS_ UINT,UINT*) PURE;
+ STDMETHOD(SetIndices)(THIS_ IDirect3DIndexBuffer9*) PURE;
+ STDMETHOD(GetIndices)(THIS_ IDirect3DIndexBuffer9**) PURE;
+ STDMETHOD(CreatePixelShader)(THIS_ CONST DWORD*,IDirect3DPixelShader9**) PURE;
+ STDMETHOD(SetPixelShader)(THIS_ IDirect3DPixelShader9*) PURE;
+ STDMETHOD(GetPixelShader)(THIS_ IDirect3DPixelShader9**) PURE;
+ STDMETHOD(SetPixelShaderConstantF)(THIS_ UINT,CONST float*,UINT) PURE;
+ STDMETHOD(GetPixelShaderConstantF)(THIS_ UINT,float*,UINT) PURE;
+ STDMETHOD(SetPixelShaderConstantI)(THIS_ UINT,CONST int*,UINT) PURE;
+ STDMETHOD(GetPixelShaderConstantI)(THIS_ UINT,int*,UINT) PURE;
+ STDMETHOD(SetPixelShaderConstantB)(THIS_ UINT,CONST BOOL*,UINT) PURE;
+ STDMETHOD(GetPixelShaderConstantB)(THIS_ UINT,BOOL*,UINT) PURE;
+ STDMETHOD(DrawRectPatch)(THIS_ UINT,CONST float*,CONST D3DRECTPATCH_INFO*) PURE;
+ STDMETHOD(DrawTriPatch)(THIS_ UINT,CONST float*,CONST D3DTRIPATCH_INFO*) PURE;
+ STDMETHOD(DeletePatch)(THIS_ UINT) PURE;
+ STDMETHOD(CreateQuery)(THIS_ D3DQUERYTYPE,IDirect3DQuery9**) PURE;
+};
+typedef struct IDirect3DDevice9 *LPDIRECT3DDEVICE9, *PDIRECT3DDEVICE9;
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirect3DDevice9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DDevice9_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DDevice9_Release(p) (p)->lpVtbl->Release(p)
+#define IDirect3DDevice9_TestCooperativeLevel(p) (p)->lpVtbl->TestCooperativeLevel(p)
+#define IDirect3DDevice9_GetAvailableTextureMem(p) (p)->lpVtbl->GetAvailableTextureMem(p)
+#define IDirect3DDevice9_EvictManagedResources(p) (p)->lpVtbl->EvictManagedResources(p)
+#define IDirect3DDevice9_GetDirect3D(p,a) (p)->lpVtbl->GetDirect3D(p,a)
+#define IDirect3DDevice9_GetDeviceCaps(p,a) (p)->lpVtbl->GetDeviceCaps(p,a)
+#define IDirect3DDevice9_GetDisplayMode(p,a,b) (p)->lpVtbl->GetDisplayMode(p,a,b)
+#define IDirect3DDevice9_GetCreationParameters(p,a) (p)->lpVtbl->GetCreationParameters(p,a)
+#define IDirect3DDevice9_SetCursorProperties(p,a,b,c) (p)->lpVtbl->SetCursorProperties(p,a,b,c)
+#define IDirect3DDevice9_SetCursorPosition(p,a,b,c) (p)->lpVtbl->SetCursorPosition(p,a,b,c)
+#define IDirect3DDevice9_ShowCursor(p,a) (p)->lpVtbl->ShowCursor(p,a)
+#define IDirect3DDevice9_CreateAdditionalSwapChain(p,a,b) (p)->lpVtbl->CreateAdditionalSwapChain(p,a,b)
+#define IDirect3DDevice9_GetSwapChain(p,a,b) (p)->lpVtbl->GetSwapChain(p,a,b)
+#define IDirect3DDevice9_GetNumberOfSwapChains(p) (p)->lpVtbl->GetNumberOfSwapChains(p)
+#define IDirect3DDevice9_Reset(p,a) (p)->lpVtbl->Reset(p,a)
+#define IDirect3DDevice9_Present(p,a,b,c,d) (p)->lpVtbl->Present(p,a,b,c,d)
+#define IDirect3DDevice9_GetBackBuffer(p,a,b,c,d) (p)->lpVtbl->GetBackBuffer(p,a,b,c,d)
+#define IDirect3DDevice9_GetRasterStatus(p,a,b) (p)->lpVtbl->GetRasterStatus(p,a,b)
+#define IDirect3DDevice9_SetDialogBoxMode(p,a) (p)->lpVtbl->SetDialogBoxMode(p,a)
+#define IDirect3DDevice9_SetGammaRamp(p,a,b,c) (p)->lpVtbl->SetGammaRamp(p,a,b,c)
+#define IDirect3DDevice9_GetGammaRamp(p,a,b) (p)->lpVtbl->GetGammaRamp(p,a,b)
+#define IDirect3DDevice9_CreateTexture(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CreateTexture(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9_CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i) (p)->lpVtbl->CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i)
+#define IDirect3DDevice9_CreateCubeTexture(p,a,b,c,d,e,f,g) (p)->lpVtbl->CreateCubeTexture(p,a,b,c,d,e,f,g)
+#define IDirect3DDevice9_CreateVertexBuffer(p,a,b,c,d,e,f) (p)->lpVtbl->CreateVertexBuffer(p,a,b,c,d,e,f)
+#define IDirect3DDevice9_CreateIndexBuffer(p,a,b,c,d,e,f) (p)->lpVtbl->CreateIndexBuffer(p,a,b,c,d,e,f)
+#define IDirect3DDevice9_CreateRenderTarget(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CreateRenderTarget(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9_CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9_UpdateSurface(p,a,b,c,d) (p)->lpVtbl->UpdateSurface(p,a,b,c,d)
+#define IDirect3DDevice9_UpdateTexture(p,a,b) (p)->lpVtbl->UpdateTexture(p,a,b)
+#define IDirect3DDevice9_GetRenderTargetData(p,a,b) (p)->lpVtbl->GetRenderTargetData(p,a,b)
+#define IDirect3DDevice9_GetFrontBufferData(p,a,b) (p)->lpVtbl->GetFrontBufferData(p,a,b)
+#define IDirect3DDevice9_StretchRect(p,a,b,c,d,e) (p)->lpVtbl->StretchRect(p,a,b,c,d,e)
+#define IDirect3DDevice9_ColorFill(p,a,b,c) (p)->lpVtbl->ColorFill(p,a,b,c)
+#define IDirect3DDevice9_CreateOffscreenPlainSurface(p,a,b,c,d,e,f) (p)->lpVtbl->CreateOffscreenPlainSurface(p,a,b,c,d,e,f)
+#define IDirect3DDevice9_SetRenderTarget(p,a,b) (p)->lpVtbl->SetRenderTarget(p,a,b)
+#define IDirect3DDevice9_GetRenderTarget(p,a,b) (p)->lpVtbl->GetRenderTarget(p,a,b)
+#define IDirect3DDevice9_SetDepthStencilSurface(p,a) (p)->lpVtbl->SetDepthStencilSurface(p,a)
+#define IDirect3DDevice9_GetDepthStencilSurface(p,a) (p)->lpVtbl->GetDepthStencilSurface(p,a)
+#define IDirect3DDevice9_BeginScene(p) (p)->lpVtbl->BeginScene(p)
+#define IDirect3DDevice9_EndScene(p) (p)->lpVtbl->EndScene(p)
+#define IDirect3DDevice9_Clear(p,a,b,c,d,e,f) (p)->lpVtbl->Clear(p,a,b,c,d,e,f)
+#define IDirect3DDevice9_SetTransform(p,a,b) (p)->lpVtbl->SetTransform(p,a,b)
+#define IDirect3DDevice9_GetTransform(p,a,b) (p)->lpVtbl->GetTransform(p,a,b)
+#define IDirect3DDevice9_MultiplyTransform(p,a,b) (p)->lpVtbl->MultiplyTransform(p,a,b)
+#define IDirect3DDevice9_SetViewport(p,a) (p)->lpVtbl->SetViewport(p,a)
+#define IDirect3DDevice9_GetViewport(p,a) (p)->lpVtbl->GetViewport(p,a)
+#define IDirect3DDevice9_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a)
+#define IDirect3DDevice9_GetMaterial(p,a) (p)->lpVtbl->GetMaterial(p,a)
+#define IDirect3DDevice9_SetLight(p,a,b) (p)->lpVtbl->SetLight(p,a,b)
+#define IDirect3DDevice9_GetLight(p,a,b) (p)->lpVtbl->GetLight(p,a,b)
+#define IDirect3DDevice9_LightEnable(p,a,b) (p)->lpVtbl->LightEnable(p,a,b)
+#define IDirect3DDevice9_GetLightEnable(p,a,b) (p)->lpVtbl->GetLightEnable(p,a,b)
+#define IDirect3DDevice9_SetClipPlane(p,a,b) (p)->lpVtbl->SetClipPlane(p,a,b)
+#define IDirect3DDevice9_GetClipPlane(p,a,b) (p)->lpVtbl->GetClipPlane(p,a,b)
+#define IDirect3DDevice9_SetRenderState(p,a,b) (p)->lpVtbl->SetRenderState(p,a,b)
+#define IDirect3DDevice9_GetRenderState(p,a,b) (p)->lpVtbl->GetRenderState(p,a,b)
+#define IDirect3DDevice9_CreateStateBlock(p,a,b) (p)->lpVtbl->CreateStateBlock(p,a,b)
+#define IDirect3DDevice9_BeginStateBlock(p) (p)->lpVtbl->BeginStateBlock(p)
+#define IDirect3DDevice9_EndStateBlock(p,a) (p)->lpVtbl->EndStateBlock(p,a)
+#define IDirect3DDevice9_SetClipStatus(p,a) (p)->lpVtbl->SetClipStatus(p,a)
+#define IDirect3DDevice9_GetClipStatus(p,a) (p)->lpVtbl->GetClipStatus(p,a)
+#define IDirect3DDevice9_GetTexture(p,a,b) (p)->lpVtbl->GetTexture(p,a,b)
+#define IDirect3DDevice9_SetTexture(p,a,b) (p)->lpVtbl->SetTexture(p,a,b)
+#define IDirect3DDevice9_GetTextureStageState(p,a,b,c) (p)->lpVtbl->GetTextureStageState(p,a,b,c)
+#define IDirect3DDevice9_SetTextureStageState(p,a,b,c) (p)->lpVtbl->SetTextureStageState(p,a,b,c)
+#define IDirect3DDevice9_GetSamplerState(p,a,b,c) (p)->lpVtbl->GetSamplerState(p,a,b,c)
+#define IDirect3DDevice9_SetSamplerState(p,a,b,c) (p)->lpVtbl->SetSamplerState(p,a,b,c)
+#define IDirect3DDevice9_ValidateDevice(p,a) (p)->lpVtbl->ValidateDevice(p,a)
+#define IDirect3DDevice9_SetPaletteEntries(p,a,b) (p)->lpVtbl->SetPaletteEntries(p,a,b)
+#define IDirect3DDevice9_GetPaletteEntries(p,a,b) (p)->lpVtbl->GetPaletteEntries(p,a,b)
+#define IDirect3DDevice9_SetCurrentTexturePalette(p,a) (p)->lpVtbl->SetCurrentTexturePalette(p,a)
+#define IDirect3DDevice9_GetCurrentTexturePalette(p,a) (p)->lpVtbl->GetCurrentTexturePalette(p,a)
+#define IDirect3DDevice9_SetScissorRect(p,a) (p)->lpVtbl->SetScissorRect(p,a)
+#define IDirect3DDevice9_GetScissorRect(p,a) (p)->lpVtbl->GetScissorRect(p,a)
+#define IDirect3DDevice9_SetSoftwareVertexProcessing(p,a) (p)->lpVtbl->SetSoftwareVertexProcessing(p,a)
+#define IDirect3DDevice9_GetSoftwareVertexProcessing(p) (p)->lpVtbl->GetSoftwareVertexProcessing(p)
+#define IDirect3DDevice9_SetNPatchMode(p,a) (p)->lpVtbl->SetNPatchMode(p,a)
+#define IDirect3DDevice9_GetNPatchMode(p) (p)->lpVtbl->GetNPatchMode(p)
+#define IDirect3DDevice9_DrawPrimitive(p,a,b,c) (p)->lpVtbl->DrawPrimitive(p,a,b,c)
+#define IDirect3DDevice9_DrawIndexedPrimitive(p,a,b,c,d,e,f) (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e,f)
+#define IDirect3DDevice9_DrawPrimitiveUP(p,a,b,c,d) (p)->lpVtbl->DrawPrimitiveUP(p,a,b,c,d)
+#define IDirect3DDevice9_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9_ProcessVertices(p,a,b,c,d,e,f) (p)->lpVtbl->ProcessVertices(p,a,b,c,d,e,f)
+#define IDirect3DDevice9_CreateVertexDeclaration(p,a,b) (p)->lpVtbl->CreateVertexDeclaration(p,a,b)
+#define IDirect3DDevice9_SetVertexDeclaration(p,a) (p)->lpVtbl->SetVertexDeclaration(p,a)
+#define IDirect3DDevice9_GetVertexDeclaration(p,a) (p)->lpVtbl->GetVertexDeclaration(p,a)
+#define IDirect3DDevice9_SetFVF(p,a) (p)->lpVtbl->SetFVF(p,a)
+#define IDirect3DDevice9_GetFVF(p,a) (p)->lpVtbl->GetFVF(p,a)
+#define IDirect3DDevice9_CreateVertexShader(p,a,b) (p)->lpVtbl->CreateVertexShader(p,a,b)
+#define IDirect3DDevice9_SetVertexShader(p,a) (p)->lpVtbl->SetVertexShader(p,a)
+#define IDirect3DDevice9_GetVertexShader(p,a) (p)->lpVtbl->GetVertexShader(p,a)
+#define IDirect3DDevice9_SetVertexShaderConstantF(p,a,b,c) (p)->lpVtbl->SetVertexShaderConstantF(p,a,b,c)
+#define IDirect3DDevice9_GetVertexShaderConstantF(p,a,b,c) (p)->lpVtbl->GetVertexShaderConstantF(p,a,b,c)
+#define IDirect3DDevice9_SetVertexShaderConstantI(p,a,b,c) (p)->lpVtbl->SetVertexShaderConstantI(p,a,b,c)
+#define IDirect3DDevice9_GetVertexShaderConstantI(p,a,b,c) (p)->lpVtbl->GetVertexShaderConstantI(p,a,b,c)
+#define IDirect3DDevice9_SetVertexShaderConstantB(p,a,b,c) (p)->lpVtbl->SetVertexShaderConstantB(p,a,b,c)
+#define IDirect3DDevice9_GetVertexShaderConstantB(p,a,b,c) (p)->lpVtbl->GetVertexShaderConstantB(p,a,b,c)
+#define IDirect3DDevice9_SetStreamSource(p,a,b,c,d) (p)->lpVtbl->SetStreamSource(p,a,b,c,d)
+#define IDirect3DDevice9_GetStreamSource(p,a,b,c,d) (p)->lpVtbl->GetStreamSource(p,a,b,c,d)
+#define IDirect3DDevice9_SetStreamSourceFreq(p,a,b) (p)->lpVtbl->SetStreamSourceFreq(p,a,b)
+#define IDirect3DDevice9_GetStreamSourceFreq(p,a,b) (p)->lpVtbl->GetStreamSourceFreq(p,a,b)
+#define IDirect3DDevice9_SetIndices(p,a) (p)->lpVtbl->SetIndices(p,a)
+#define IDirect3DDevice9_GetIndices(p,a) (p)->lpVtbl->GetIndices(p,a)
+#define IDirect3DDevice9_CreatePixelShader(p,a,b) (p)->lpVtbl->CreatePixelShader(p,a,b)
+#define IDirect3DDevice9_SetPixelShader(p,a) (p)->lpVtbl->SetPixelShader(p,a)
+#define IDirect3DDevice9_GetPixelShader(p,a) (p)->lpVtbl->GetPixelShader(p,a)
+#define IDirect3DDevice9_SetPixelShaderConstantF(p,a,b,c) (p)->lpVtbl->SetPixelShaderConstantF(p,a,b,c)
+#define IDirect3DDevice9_GetPixelShaderConstantF(p,a,b,c) (p)->lpVtbl->GetPixelShaderConstantF(p,a,b,c)
+#define IDirect3DDevice9_SetPixelShaderConstantI(p,a,b,c) (p)->lpVtbl->SetPixelShaderConstantI(p,a,b,c)
+#define IDirect3DDevice9_GetPixelShaderConstantI(p,a,b,c) (p)->lpVtbl->GetPixelShaderConstantI(p,a,b,c)
+#define IDirect3DDevice9_SetPixelShaderConstantB(p,a,b,c) (p)->lpVtbl->SetPixelShaderConstantB(p,a,b,c)
+#define IDirect3DDevice9_GetPixelShaderConstantB(p,a,b,c) (p)->lpVtbl->GetPixelShaderConstantB(p,a,b,c)
+#define IDirect3DDevice9_DrawRectPatch(p,a,b,c) (p)->lpVtbl->DrawRectPatch(p,a,b,c)
+#define IDirect3DDevice9_DrawTriPatch(p,a,b,c) (p)->lpVtbl->DrawTriPatch(p,a,b,c)
+#define IDirect3DDevice9_DeletePatch(p,a) (p)->lpVtbl->DeletePatch(p,a)
+#define IDirect3DDevice9_CreateQuery(p,a,b) (p)->lpVtbl->CreateQuery(p,a,b)
+#else
+#define IDirect3DDevice9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DDevice9_AddRef(p) (p)->AddRef()
+#define IDirect3DDevice9_Release(p) (p)->Release()
+#define IDirect3DDevice9_TestCooperativeLevel(p) (p)->TestCooperativeLevel()
+#define IDirect3DDevice9_GetAvailableTextureMem(p) (p)->GetAvailableTextureMem()
+#define IDirect3DDevice9_EvictManagedResources(p) (p)->EvictManagedResources()
+#define IDirect3DDevice9_GetDirect3D(p,a) (p)->GetDirect3D(a)
+#define IDirect3DDevice9_GetDeviceCaps(p,a) (p)->GetDeviceCaps(a)
+#define IDirect3DDevice9_GetDisplayMode(p,a,b) (p)->GetDisplayMode(a,b)
+#define IDirect3DDevice9_GetCreationParameters(p,a) (p)->GetCreationParameters(a)
+#define IDirect3DDevice9_SetCursorProperties(p,a,b,c) (p)->SetCursorProperties(a,b,c)
+#define IDirect3DDevice9_SetCursorPosition(p,a,b,c) (p)->SetCursorPosition(a,b,c)
+#define IDirect3DDevice9_ShowCursor(p,a) (p)->ShowCursor(a)
+#define IDirect3DDevice9_CreateAdditionalSwapChain(p,a,b) (p)->CreateAdditionalSwapChain(a,b)
+#define IDirect3DDevice9_GetSwapChain(p,a,b) (p)->GetSwapChain(a,b)
+#define IDirect3DDevice9_GetNumberOfSwapChains(p) (p)->GetNumberOfSwapChains()
+#define IDirect3DDevice9_Reset(p,a) (p)->Reset(a)
+#define IDirect3DDevice9_Present(p,a,b,c,d) (p)->Present(a,b,c,d)
+#define IDirect3DDevice9_GetBackBuffer(p,a,b,c,d) (p)->GetBackBuffer(a,b,c,d)
+#define IDirect3DDevice9_GetRasterStatus(p,a,b) (p)->GetRasterStatus(a,b)
+#define IDirect3DDevice9_SetDialogBoxMode(p,a) (p)->SetDialogBoxMode(a)
+#define IDirect3DDevice9_SetGammaRamp(p,a,b,c) (p)->SetGammaRamp(a,b,c)
+#define IDirect3DDevice9_GetGammaRamp(p,a,b) (p)->GetGammaRamp(a,b)
+#define IDirect3DDevice9_CreateTexture(p,a,b,c,d,e,f,g,h) (p)->CreateTexture(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9_CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i) (p)->CreateVolumeTexture(a,b,c,d,e,f,g,h,i)
+#define IDirect3DDevice9_CreateCubeTexture(p,a,b,c,d,e,f,g) (p)->CreateCubeTexture(a,b,c,d,e,f,g)
+#define IDirect3DDevice9_CreateVertexBuffer(p,a,b,c,d,e,f) (p)->CreateVertexBuffer(a,b,c,d,e,f)
+#define IDirect3DDevice9_CreateIndexBuffer(p,a,b,c,d,e,f) (p)->CreateIndexBuffer(a,b,c,d,e,f)
+#define IDirect3DDevice9_CreateRenderTarget(p,a,b,c,d,e,f,g,h) (p)->CreateRenderTarget(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9_CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h) (p)->CreateDepthStencilSurface(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9_UpdateSurface(p,a,b,c,d) (p)->UpdateSurface(a,b,c,d)
+#define IDirect3DDevice9_UpdateTexture(p,a,b) (p)->UpdateTexture(a,b)
+#define IDirect3DDevice9_GetRenderTargetData(p,a,b) (p)->GetRenderTargetData(a,b)
+#define IDirect3DDevice9_GetFrontBufferData(p,a,b) (p)->GetFrontBufferData(a,b)
+#define IDirect3DDevice9_StretchRect(p,a,b,c,d,e) (p)->StretchRect(a,b,c,d,e)
+#define IDirect3DDevice9_ColorFill(p,a,b,c) (p)->ColorFill(a,b,c)
+#define IDirect3DDevice9_CreateOffscreenPlainSurface(p,a,b,c,d,e,f) (p)->CreateOffscreenPlainSurface(a,b,c,d,e,f)
+#define IDirect3DDevice9_SetRenderTarget(p,a,b) (p)->SetRenderTarget(a,b)
+#define IDirect3DDevice9_GetRenderTarget(p,a,b) (p)->GetRenderTarget(a,b)
+#define IDirect3DDevice9_SetDepthStencilSurface(p,a) (p)->SetDepthStencilSurface(a)
+#define IDirect3DDevice9_GetDepthStencilSurface(p,a) (p)->GetDepthStencilSurface(a)
+#define IDirect3DDevice9_BeginScene(p) (p)->BeginScene()
+#define IDirect3DDevice9_EndScene(p) (p)->EndScene()
+#define IDirect3DDevice9_Clear(p,a,b,c,d,e,f) (p)->Clear(a,b,c,d,e,f)
+#define IDirect3DDevice9_SetTransform(p,a,b) (p)->SetTransform(a,b)
+#define IDirect3DDevice9_GetTransform(p,a,b) (p)->GetTransform(a,b)
+#define IDirect3DDevice9_MultiplyTransform(p,a,b) (p)->MultiplyTransform(a,b)
+#define IDirect3DDevice9_SetViewport(p,a) (p)->SetViewport(a)
+#define IDirect3DDevice9_GetViewport(p,a) (p)->GetViewport(a)
+#define IDirect3DDevice9_SetMaterial(p,a) (p)->SetMaterial(a)
+#define IDirect3DDevice9_GetMaterial(p,a) (p)->GetMaterial(a)
+#define IDirect3DDevice9_SetLight(p,a,b) (p)->SetLight(a,b)
+#define IDirect3DDevice9_GetLight(p,a,b) (p)->GetLight(a,b)
+#define IDirect3DDevice9_LightEnable(p,a,b) (p)->LightEnable(a,b)
+#define IDirect3DDevice9_GetLightEnable(p,a,b) (p)->GetLightEnable(a,b)
+#define IDirect3DDevice9_SetClipPlane(p,a,b) (p)->SetClipPlane(a,b)
+#define IDirect3DDevice9_GetClipPlane(p,a,b) (p)->GetClipPlane(a,b)
+#define IDirect3DDevice9_SetRenderState(p,a,b) (p)->SetRenderState(a,b)
+#define IDirect3DDevice9_GetRenderState(p,a,b) (p)->GetRenderState(a,b)
+#define IDirect3DDevice9_CreateStateBlock(p,a,b) (p)->CreateStateBlock(a,b)
+#define IDirect3DDevice9_BeginStateBlock(p) (p)->BeginStateBlock()
+#define IDirect3DDevice9_EndStateBlock(p,a) (p)->EndStateBlock(a)
+#define IDirect3DDevice9_SetClipStatus(p,a) (p)->SetClipStatus(a)
+#define IDirect3DDevice9_GetClipStatus(p,a) (p)->GetClipStatus(a)
+#define IDirect3DDevice9_GetTexture(p,a,b) (p)->GetTexture(a,b)
+#define IDirect3DDevice9_SetTexture(p,a,b) (p)->SetTexture(a,b)
+#define IDirect3DDevice9_GetTextureStageState(p,a,b,c) (p)->GetTextureStageState(a,b,c)
+#define IDirect3DDevice9_SetTextureStageState(p,a,b,c) (p)->SetTextureStageState(a,b,c)
+#define IDirect3DDevice9_GetSamplerState(p,a,b,c) (p)->GetSamplerState(a,b,c)
+#define IDirect3DDevice9_SetSamplerState(p,a,b,c) (p)->SetSamplerState(a,b,c)
+#define IDirect3DDevice9_ValidateDevice(p,a) (p)->ValidateDevice(a)
+#define IDirect3DDevice9_SetPaletteEntries(p,a,b) (p)->SetPaletteEntries(a,b)
+#define IDirect3DDevice9_GetPaletteEntries(p,a,b) (p)->GetPaletteEntries(a,b)
+#define IDirect3DDevice9_SetCurrentTexturePalette(p,a) (p)->SetCurrentTexturePalette(a)
+#define IDirect3DDevice9_GetCurrentTexturePalette(p,a) (p)->GetCurrentTexturePalette(a)
+#define IDirect3DDevice9_SetScissorRect(p,a) (p)->SetScissorRect(a)
+#define IDirect3DDevice9_GetScissorRect(p,a) (p)->GetScissorRect(a)
+#define IDirect3DDevice9_SetSoftwareVertexProcessing(p,a) (p)->SetSoftwareVertexProcessing(a)
+#define IDirect3DDevice9_GetSoftwareVertexProcessing(p) (p)->GetSoftwareVertexProcessing()
+#define IDirect3DDevice9_SetNPatchMode(p,a) (p)->SetNPatchMode(a)
+#define IDirect3DDevice9_GetNPatchMode(p) (p)->GetNPatchMode()
+#define IDirect3DDevice9_DrawPrimitive(p,a,b,c) (p)->DrawPrimitive(a,b,c)
+#define IDirect3DDevice9_DrawIndexedPrimitive(p,a,b,c,d,e,f) (p)->DrawIndexedPrimitive(a,b,c,d,e,f)
+#define IDirect3DDevice9_DrawPrimitiveUP(p,a,b,c,d) (p)->DrawPrimitiveUP(a,b,c,d)
+#define IDirect3DDevice9_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) (p)->DrawIndexedPrimitiveUP(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9_ProcessVertices(p,a,b,c,d,e,f) (p)->ProcessVertices(a,b,c,d,e,f)
+#define IDirect3DDevice9_CreateVertexDeclaration(p,a,b) (p)->CreateVertexDeclaration(a,b)
+#define IDirect3DDevice9_SetVertexDeclaration(p,a) (p)->SetVertexDeclaration(a)
+#define IDirect3DDevice9_GetVertexDeclaration(p,a) (p)->GetVertexDeclaration(a)
+#define IDirect3DDevice9_SetFVF(p,a) (p)->SetFVF(a)
+#define IDirect3DDevice9_GetFVF(p,a) (p)->GetFVF(a)
+#define IDirect3DDevice9_CreateVertexShader(p,a,b) (p)->CreateVertexShader(a,b)
+#define IDirect3DDevice9_SetVertexShader(p,a) (p)->SetVertexShader(a)
+#define IDirect3DDevice9_GetVertexShader(p,a) (p)->GetVertexShader(a)
+#define IDirect3DDevice9_SetVertexShaderConstantF(p,a,b,c) (p)->SetVertexShaderConstantF(a,b,c)
+#define IDirect3DDevice9_GetVertexShaderConstantF(p,a,b,c) (p)->GetVertexShaderConstantF(a,b,c)
+#define IDirect3DDevice9_SetVertexShaderConstantI(p,a,b,c) (p)->SetVertexShaderConstantI(a,b,c)
+#define IDirect3DDevice9_GetVertexShaderConstantI(p,a,b,c) (p)->GetVertexShaderConstantI(a,b,c)
+#define IDirect3DDevice9_SetVertexShaderConstantB(p,a,b,c) (p)->SetVertexShaderConstantB(a,b,c)
+#define IDirect3DDevice9_GetVertexShaderConstantB(p,a,b,c) (p)->GetVertexShaderConstantB(a,b,c)
+#define IDirect3DDevice9_SetStreamSource(p,a,b,c,d) (p)->SetStreamSource(a,b,c,d)
+#define IDirect3DDevice9_GetStreamSource(p,a,b,c,d) (p)->GetStreamSource(a,b,c,d)
+#define IDirect3DDevice9_SetStreamSourceFreq(p,a,b) (p)->SetStreamSourceFreq(a,b)
+#define IDirect3DDevice9_GetStreamSourceFreq(p,a,b) (p)->GetStreamSourceFreq(a,b)
+#define IDirect3DDevice9_SetIndices(p,a) (p)->SetIndices(a)
+#define IDirect3DDevice9_GetIndices(p,a) (p)->GetIndices(a)
+#define IDirect3DDevice9_CreatePixelShader(p,a,b) (p)->CreatePixelShader(a,b)
+#define IDirect3DDevice9_SetPixelShader(p,a) (p)->SetPixelShader(a)
+#define IDirect3DDevice9_GetPixelShader(p,a) (p)->GetPixelShader(a)
+#define IDirect3DDevice9_SetPixelShaderConstantF(p,a,b,c) (p)->SetPixelShaderConstantF(a,b,c)
+#define IDirect3DDevice9_GetPixelShaderConstantF(p,a,b,c) (p)->GetPixelShaderConstantF(a,b,c)
+#define IDirect3DDevice9_SetPixelShaderConstantI(p,a,b,c) (p)->SetPixelShaderConstantI(a,b,c)
+#define IDirect3DDevice9_GetPixelShaderConstantI(p,a,b,c) (p)->GetPixelShaderConstantI(a,b,c)
+#define IDirect3DDevice9_SetPixelShaderConstantB(p,a,b,c) (p)->SetPixelShaderConstantB(a,b,c)
+#define IDirect3DDevice9_GetPixelShaderConstantB(p,a,b,c) (p)->GetPixelShaderConstantB(a,b,c)
+#define IDirect3DDevice9_DrawRectPatch(p,a,b,c) (p)->DrawRectPatch(a,b,c)
+#define IDirect3DDevice9_DrawTriPatch(p,a,b,c) (p)->DrawTriPatch(a,b,c)
+#define IDirect3DDevice9_DeletePatch(p,a) (p)->DeletePatch(a)
+#define IDirect3DDevice9_CreateQuery(p,a,b) (p)->CreateQuery(a,b)
+#endif
+
+#undef INTERFACE
+#define INTERFACE IDirect3DVolume9
+DECLARE_INTERFACE_(IDirect3DVolume9,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9**) PURE;
+ STDMETHOD(SetPrivateData)(THIS_ REFGUID,CONST void*,DWORD,DWORD) PURE;
+ STDMETHOD(GetPrivateData)(THIS_ REFGUID,void*,DWORD*) PURE;
+ STDMETHOD(FreePrivateData)(THIS_ REFGUID) PURE;
+ STDMETHOD(GetContainer)(THIS_ REFIID,void**) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3DVOLUME_DESC*) PURE;
+ STDMETHOD(LockBox)(THIS_ D3DLOCKED_BOX*,CONST D3DBOX*,DWORD) PURE;
+ STDMETHOD(UnlockBox)(THIS) PURE;
+};
+typedef struct IDirect3DVolume9 *LPDIRECT3DVOLUME9, *PDIRECT3DVOLUME9;
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirect3DVolume9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DVolume9_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DVolume9_Release(p) (p)->lpVtbl->Release(p)
+#define IDirect3DVolume9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DVolume9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DVolume9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DVolume9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DVolume9_GetContainer(p,a,b) (p)->lpVtbl->GetContainer(p,a,b)
+#define IDirect3DVolume9_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a)
+#define IDirect3DVolume9_LockBox(p,a,b,c) (p)->lpVtbl->LockBox(p,a,b,c)
+#define IDirect3DVolume9_UnlockBox(p) (p)->lpVtbl->UnlockBox(p)
+#else
+#define IDirect3DVolume9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DVolume9_AddRef(p) (p)->AddRef()
+#define IDirect3DVolume9_Release(p) (p)->Release()
+#define IDirect3DVolume9_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DVolume9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DVolume9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)
+#define IDirect3DVolume9_FreePrivateData(p,a) (p)->FreePrivateData(a)
+#define IDirect3DVolume9_GetContainer(p,a,b) (p)->GetContainer(a,b)
+#define IDirect3DVolume9_GetDesc(p,a) (p)->GetDesc(a)
+#define IDirect3DVolume9_LockBox(p,a,b,c) (p)->LockBox(a,b,c)
+#define IDirect3DVolume9_UnlockBox(p) (p)->UnlockBox()
+#endif
+
+#undef INTERFACE
+#define INTERFACE IDirect3DSwapChain9
+DECLARE_INTERFACE_(IDirect3DSwapChain9,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(Present)(THIS_ CONST RECT*,CONST RECT*,HWND,CONST RGNDATA*,DWORD) PURE;
+ STDMETHOD(GetFrontBufferData)(THIS_ IDirect3DSurface9*) PURE;
+ STDMETHOD(GetBackBuffer)(THIS_ UINT,D3DBACKBUFFER_TYPE,IDirect3DSurface9**) PURE;
+ STDMETHOD(GetRasterStatus)(THIS_ D3DRASTER_STATUS*) PURE;
+ STDMETHOD(GetDisplayMode)(THIS_ D3DDISPLAYMODE*) PURE;
+ STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9**) PURE;
+ STDMETHOD(GetPresentParameters)(THIS_ D3DPRESENT_PARAMETERS*) PURE;
+};
+typedef struct IDirect3DSwapChain9 *LPDIRECT3DSWAPCHAIN9, *PDIRECT3DSWAPCHAIN9;
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirect3DSwapChain9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DSwapChain9_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DSwapChain9_Release(p) (p)->lpVtbl->Release(p)
+#define IDirect3DSwapChain9_Present(p,a,b,c,d,e) (p)->lpVtbl->Present(p,a,b,c,d,e)
+#define IDirect3DSwapChain9_GetFrontBufferData(p,a) (p)->lpVtbl->GetFrontBufferData(p,a)
+#define IDirect3DSwapChain9_GetBackBuffer(p,a,b,c) (p)->lpVtbl->GetBackBuffer(p,a,b,c)
+#define IDirect3DSwapChain9_GetRasterStatus(p,a) (p)->lpVtbl->GetRasterStatus(p,a)
+#define IDirect3DSwapChain9_GetDisplayMode(p,a) (p)->lpVtbl->GetDisplayMode(p,a)
+#define IDirect3DSwapChain9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DSwapChain9_GetPresentParameters(p,a) (p)->lpVtbl->GetPresentParameters(p,a)
+#else
+#define IDirect3DSwapChain9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DSwapChain9_AddRef(p) (p)->AddRef()
+#define IDirect3DSwapChain9_Release(p) (p)->Release()
+#define IDirect3DSwapChain9_Present(p,a,b,c,d,e) (p)->Present(a,b,c,d,e)
+#define IDirect3DSwapChain9_GetFrontBufferData(p,a) (p)->GetFrontBufferData(a)
+#define IDirect3DSwapChain9_GetBackBuffer(p,a,b,c) (p)->GetBackBuffer(a,b,c)
+#define IDirect3DSwapChain9_GetRasterStatus(p,a) (p)->GetRasterStatus(a)
+#define IDirect3DSwapChain9_GetDisplayMode(p,a) (p)->GetDisplayMode(a)
+#define IDirect3DSwapChain9_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DSwapChain9_GetPresentParameters(p,a) (p)->GetPresentParameters(a)
+#endif
+
+#undef INTERFACE
+#define INTERFACE IDirect3DResource9
+DECLARE_INTERFACE_(IDirect3DResource9,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9**) PURE;
+ STDMETHOD(SetPrivateData)(THIS_ REFGUID,CONST void*,DWORD,DWORD) PURE;
+ STDMETHOD(GetPrivateData)(THIS_ REFGUID,void*,DWORD*) PURE;
+ STDMETHOD(FreePrivateData)(THIS_ REFGUID) PURE;
+ STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD) PURE;
+ STDMETHOD_(DWORD,GetPriority)(THIS) PURE;
+ STDMETHOD_(void,PreLoad)(THIS) PURE;
+ STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE;
+};
+typedef struct IDirect3DResource9 *LPDIRECT3DRESOURCE9, *PDIRECT3DRESOURCE9;
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirect3DResource9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DResource9_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DResource9_Release(p) (p)->lpVtbl->Release(p)
+#define IDirect3DResource9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DResource9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DResource9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DResource9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DResource9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DResource9_GetPriority(p) (p)->lpVtbl->GetPriority(p)
+#define IDirect3DResource9_PreLoad(p) (p)->lpVtbl->PreLoad(p)
+#define IDirect3DResource9_GetType(p) (p)->lpVtbl->GetType(p)
+#else
+#define IDirect3DResource9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DResource9_AddRef(p) (p)->AddRef()
+#define IDirect3DResource9_Release(p) (p)->Release()
+#define IDirect3DResource9_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DResource9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DResource9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)
+#define IDirect3DResource9_FreePrivateData(p,a) (p)->FreePrivateData(a)
+#define IDirect3DResource9_SetPriority(p,a) (p)->SetPriority(a)
+#define IDirect3DResource9_GetPriority(p) (p)->GetPriority()
+#define IDirect3DResource9_PreLoad(p) (p)->PreLoad()
+#define IDirect3DResource9_GetType(p) (p)->GetType()
+#endif
+
+#undef INTERFACE
+#define INTERFACE IDirect3DSurface9
+DECLARE_INTERFACE_(IDirect3DSurface9,IDirect3DResource9)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9**) PURE;
+ STDMETHOD(SetPrivateData)(THIS_ REFGUID,CONST void*,DWORD,DWORD) PURE;
+ STDMETHOD(GetPrivateData)(THIS_ REFGUID,void*,DWORD*) PURE;
+ STDMETHOD(FreePrivateData)(THIS_ REFGUID) PURE;
+ STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD) PURE;
+ STDMETHOD_(DWORD,GetPriority)(THIS) PURE;
+ STDMETHOD_(void,PreLoad)(THIS) PURE;
+ STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE;
+ STDMETHOD(GetContainer)(THIS_ REFIID,void**) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3DSURFACE_DESC*) PURE;
+ STDMETHOD(LockRect)(THIS_ D3DLOCKED_RECT*,CONST RECT*,DWORD) PURE;
+ STDMETHOD(UnlockRect)(THIS) PURE;
+ STDMETHOD(GetDC)(THIS_ HDC*) PURE;
+ STDMETHOD(ReleaseDC)(THIS_ HDC) PURE;
+};
+typedef struct IDirect3DSurface9 *LPDIRECT3DSURFACE9, *PDIRECT3DSURFACE9;
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirect3DSurface9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DSurface9_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DSurface9_Release(p) (p)->lpVtbl->Release(p)
+#define IDirect3DSurface9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DSurface9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DSurface9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DSurface9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DSurface9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DSurface9_GetPriority(p) (p)->lpVtbl->GetPriority(p)
+#define IDirect3DSurface9_PreLoad(p) (p)->lpVtbl->PreLoad(p)
+#define IDirect3DSurface9_GetType(p) (p)->lpVtbl->GetType(p)
+#define IDirect3DSurface9_GetContainer(p,a,b) (p)->lpVtbl->GetContainer(p,a,b)
+#define IDirect3DSurface9_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a)
+#define IDirect3DSurface9_LockRect(p,a,b,c) (p)->lpVtbl->LockRect(p,a,b,c)
+#define IDirect3DSurface9_UnlockRect(p) (p)->lpVtbl->UnlockRect(p)
+#define IDirect3DSurface9_GetDC(p,a) (p)->lpVtbl->GetDC(p,a)
+#define IDirect3DSurface9_ReleaseDC(p,a) (p)->lpVtbl->ReleaseDC(p,a)
+#else
+#define IDirect3DSurface9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DSurface9_AddRef(p) (p)->AddRef()
+#define IDirect3DSurface9_Release(p) (p)->Release()
+#define IDirect3DSurface9_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DSurface9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DSurface9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)
+#define IDirect3DSurface9_FreePrivateData(p,a) (p)->FreePrivateData(a)
+#define IDirect3DSurface9_SetPriority(p,a) (p)->SetPriority(a)
+#define IDirect3DSurface9_GetPriority(p) (p)->GetPriority()
+#define IDirect3DSurface9_PreLoad(p) (p)->PreLoad()
+#define IDirect3DSurface9_GetType(p) (p)->GetType()
+#define IDirect3DSurface9_GetContainer(p,a,b) (p)->GetContainer(a,b)
+#define IDirect3DSurface9_GetDesc(p,a) (p)->GetDesc(a)
+#define IDirect3DSurface9_LockRect(p,a,b,c) (p)->LockRect(a,b,c)
+#define IDirect3DSurface9_UnlockRect(p) (p)->UnlockRect()
+#define IDirect3DSurface9_GetDC(p,a) (p)->GetDC(a)
+#define IDirect3DSurface9_ReleaseDC(p,a) (p)->ReleaseDC(a)
+#endif
+
+#undef INTERFACE
+#define INTERFACE IDirect3DVertexBuffer9
+DECLARE_INTERFACE_(IDirect3DVertexBuffer9,IDirect3DResource9)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9**) PURE;
+ STDMETHOD(SetPrivateData)(THIS_ REFGUID,CONST void*,DWORD,DWORD) PURE;
+ STDMETHOD(GetPrivateData)(THIS_ REFGUID,void*,DWORD*) PURE;
+ STDMETHOD(FreePrivateData)(THIS_ REFGUID) PURE;
+ STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD) PURE;
+ STDMETHOD_(DWORD,GetPriority)(THIS) PURE;
+ STDMETHOD_(void,PreLoad)(THIS) PURE;
+ STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE;
+ STDMETHOD(Lock)(THIS_ UINT,UINT,void**,DWORD) PURE;
+ STDMETHOD(Unlock)(THIS) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3DVERTEXBUFFER_DESC*) PURE;
+};
+typedef struct IDirect3DVertexBuffer9 *LPDIRECT3DVERTEXBUFFER9, *PDIRECT3DVERTEXBUFFER9;
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirect3DVertexBuffer9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DVertexBuffer9_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DVertexBuffer9_Release(p) (p)->lpVtbl->Release(p)
+#define IDirect3DVertexBuffer9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DVertexBuffer9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DVertexBuffer9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DVertexBuffer9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DVertexBuffer9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DVertexBuffer9_GetPriority(p) (p)->lpVtbl->GetPriority(p)
+#define IDirect3DVertexBuffer9_PreLoad(p) (p)->lpVtbl->PreLoad(p)
+#define IDirect3DVertexBuffer9_GetType(p) (p)->lpVtbl->GetType(p)
+#define IDirect3DVertexBuffer9_Lock(p,a,b,c,d) (p)->lpVtbl->Lock(p,a,b,c,d)
+#define IDirect3DVertexBuffer9_Unlock(p) (p)->lpVtbl->Unlock(p)
+#define IDirect3DVertexBuffer9_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a)
+#else
+#define IDirect3DVertexBuffer9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DVertexBuffer9_AddRef(p) (p)->AddRef()
+#define IDirect3DVertexBuffer9_Release(p) (p)->Release()
+#define IDirect3DVertexBuffer9_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DVertexBuffer9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DVertexBuffer9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)
+#define IDirect3DVertexBuffer9_FreePrivateData(p,a) (p)->FreePrivateData(a)
+#define IDirect3DVertexBuffer9_SetPriority(p,a) (p)->SetPriority(a)
+#define IDirect3DVertexBuffer9_GetPriority(p) (p)->GetPriority()
+#define IDirect3DVertexBuffer9_PreLoad(p) (p)->PreLoad()
+#define IDirect3DVertexBuffer9_GetType(p) (p)->GetType()
+#define IDirect3DVertexBuffer9_Lock(p,a,b,c,d) (p)->Lock(a,b,c,d)
+#define IDirect3DVertexBuffer9_Unlock(p) (p)->Unlock()
+#define IDirect3DVertexBuffer9_GetDesc(p,a) (p)->GetDesc(a)
+#endif
+
+#undef INTERFACE
+#define INTERFACE IDirect3DIndexBuffer9
+DECLARE_INTERFACE_(IDirect3DIndexBuffer9,IDirect3DResource9)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9**) PURE;
+ STDMETHOD(SetPrivateData)(THIS_ REFGUID,CONST void*,DWORD,DWORD) PURE;
+ STDMETHOD(GetPrivateData)(THIS_ REFGUID,void*,DWORD*) PURE;
+ STDMETHOD(FreePrivateData)(THIS_ REFGUID) PURE;
+ STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD) PURE;
+ STDMETHOD_(DWORD,GetPriority)(THIS) PURE;
+ STDMETHOD_(void,PreLoad)(THIS) PURE;
+ STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE;
+ STDMETHOD(Lock)(THIS_ UINT,UINT,void**,DWORD) PURE;
+ STDMETHOD(Unlock)(THIS) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3DINDEXBUFFER_DESC*) PURE;
+};
+typedef struct IDirect3DIndexBuffer9 *LPDIRECT3DINDEXBUFFER9, *PDIRECT3DINDEXBUFFER9;
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirect3DIndexBuffer9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DIndexBuffer9_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DIndexBuffer9_Release(p) (p)->lpVtbl->Release(p)
+#define IDirect3DIndexBuffer9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DIndexBuffer9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DIndexBuffer9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DIndexBuffer9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DIndexBuffer9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DIndexBuffer9_GetPriority(p) (p)->lpVtbl->GetPriority(p)
+#define IDirect3DIndexBuffer9_PreLoad(p) (p)->lpVtbl->PreLoad(p)
+#define IDirect3DIndexBuffer9_GetType(p) (p)->lpVtbl->GetType(p)
+#define IDirect3DIndexBuffer9_Lock(p,a,b,c,d) (p)->lpVtbl->Lock(p,a,b,c,d)
+#define IDirect3DIndexBuffer9_Unlock(p) (p)->lpVtbl->Unlock(p)
+#define IDirect3DIndexBuffer9_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a)
+#else
+#define IDirect3DIndexBuffer9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DIndexBuffer9_AddRef(p) (p)->AddRef()
+#define IDirect3DIndexBuffer9_Release(p) (p)->Release()
+#define IDirect3DIndexBuffer9_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DIndexBuffer9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DIndexBuffer9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)
+#define IDirect3DIndexBuffer9_FreePrivateData(p,a) (p)->FreePrivateData(a)
+#define IDirect3DIndexBuffer9_SetPriority(p,a) (p)->SetPriority(a)
+#define IDirect3DIndexBuffer9_GetPriority(p) (p)->GetPriority()
+#define IDirect3DIndexBuffer9_PreLoad(p) (p)->PreLoad()
+#define IDirect3DIndexBuffer9_GetType(p) (p)->GetType()
+#define IDirect3DIndexBuffer9_Lock(p,a,b,c,d) (p)->Lock(a,b,c,d)
+#define IDirect3DIndexBuffer9_Unlock(p) (p)->Unlock()
+#define IDirect3DIndexBuffer9_GetDesc(p,a) (p)->GetDesc(a)
+#endif
+
+#undef INTERFACE
+#define INTERFACE IDirect3DBaseTexture9
+DECLARE_INTERFACE_(IDirect3DBaseTexture9,IDirect3DResource9)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9**) PURE;
+ STDMETHOD(SetPrivateData)(THIS_ REFGUID,CONST void*,DWORD,DWORD) PURE;
+ STDMETHOD(GetPrivateData)(THIS_ REFGUID,void*,DWORD*) PURE;
+ STDMETHOD(FreePrivateData)(THIS_ REFGUID) PURE;
+ STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD) PURE;
+ STDMETHOD_(DWORD,GetPriority)(THIS) PURE;
+ STDMETHOD_(void,PreLoad)(THIS) PURE;
+ STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE;
+ STDMETHOD_(DWORD,SetLOD)(THIS_ DWORD) PURE;
+ STDMETHOD_(DWORD,GetLOD)(THIS) PURE;
+ STDMETHOD_(DWORD,GetLevelCount)(THIS) PURE;
+ STDMETHOD(SetAutoGenFilterType)(THIS_ D3DTEXTUREFILTERTYPE) PURE;
+ STDMETHOD_(D3DTEXTUREFILTERTYPE,GetAutoGenFilterType)(THIS) PURE;
+ STDMETHOD_(void,GenerateMipSubLevels)(THIS) PURE;
+};
+typedef struct IDirect3DBaseTexture9 *LPDIRECT3DBASETEXTURE9, *PDIRECT3DBASETEXTURE9;
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirect3DBaseTexture9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DBaseTexture9_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DBaseTexture9_Release(p) (p)->lpVtbl->Release(p)
+#define IDirect3DBaseTexture9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DBaseTexture9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DBaseTexture9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DBaseTexture9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DBaseTexture9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DBaseTexture9_GetPriority(p) (p)->lpVtbl->GetPriority(p)
+#define IDirect3DBaseTexture9_PreLoad(p) (p)->lpVtbl->PreLoad(p)
+#define IDirect3DBaseTexture9_GetType(p) (p)->lpVtbl->GetType(p)
+#define IDirect3DBaseTexture9_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a)
+#define IDirect3DBaseTexture9_GetLOD(p) (p)->lpVtbl->GetLOD(p)
+#define IDirect3DBaseTexture9_GetLevelCount(p) (p)->lpVtbl->GetLevelCount(p)
+#define IDirect3DBaseTexture9_SetAutoGenFilterType(p,a) (p)->lpVtbl->SetAutoGenFilterType(p,a)
+#define IDirect3DBaseTexture9_GetAutoGenFilterType(p) (p)->lpVtbl->GetAutoGenFilterType(p)
+#define IDirect3DBaseTexture9_GenerateMipSubLevels(p) (p)->lpVtbl->GenerateMipSubLevels(p)
+#else
+#define IDirect3DBaseTexture9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DBaseTexture9_AddRef(p) (p)->AddRef()
+#define IDirect3DBaseTexture9_Release(p) (p)->Release()
+#define IDirect3DBaseTexture9_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DBaseTexture9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DBaseTexture9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)
+#define IDirect3DBaseTexture9_FreePrivateData(p,a) (p)->FreePrivateData(a)
+#define IDirect3DBaseTexture9_SetPriority(p,a) (p)->SetPriority(a)
+#define IDirect3DBaseTexture9_GetPriority(p) (p)->GetPriority()
+#define IDirect3DBaseTexture9_PreLoad(p) (p)->PreLoad()
+#define IDirect3DBaseTexture9_GetType(p) (p)->GetType()
+#define IDirect3DBaseTexture9_SetLOD(p,a) (p)->SetLOD(a)
+#define IDirect3DBaseTexture9_GetLOD(p) (p)->GetLOD()
+#define IDirect3DBaseTexture9_GetLevelCount(p) (p)->GetLevelCount()
+#define IDirect3DBaseTexture9_SetAutoGenFilterType(p,a) (p)->SetAutoGenFilterType(a)
+#define IDirect3DBaseTexture9_GetAutoGenFilterType(p) (p)->GetAutoGenFilterType()
+#define IDirect3DBaseTexture9_GenerateMipSubLevels(p) (p)->GenerateMipSubLevels()
+#endif
+
+#undef INTERFACE
+#define INTERFACE IDirect3DCubeTexture9
+DECLARE_INTERFACE_(IDirect3DCubeTexture9,IDirect3DBaseTexture9)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9**) PURE;
+ STDMETHOD(SetPrivateData)(THIS_ REFGUID,CONST void*,DWORD,DWORD) PURE;
+ STDMETHOD(GetPrivateData)(THIS_ REFGUID,void*,DWORD*) PURE;
+ STDMETHOD(FreePrivateData)(THIS_ REFGUID) PURE;
+ STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD) PURE;
+ STDMETHOD_(DWORD,GetPriority)(THIS) PURE;
+ STDMETHOD_(void,PreLoad)(THIS) PURE;
+ STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE;
+ STDMETHOD_(DWORD,SetLOD)(THIS_ DWORD) PURE;
+ STDMETHOD_(DWORD,GetLOD)(THIS) PURE;
+ STDMETHOD_(DWORD,GetLevelCount)(THIS) PURE;
+ STDMETHOD(SetAutoGenFilterType)(THIS_ D3DTEXTUREFILTERTYPE) PURE;
+ STDMETHOD_(D3DTEXTUREFILTERTYPE,GetAutoGenFilterType)(THIS) PURE;
+ STDMETHOD_(void,GenerateMipSubLevels)(THIS) PURE;
+ STDMETHOD(GetLevelDesc)(THIS_ UINT,D3DSURFACE_DESC*) PURE; \
+ STDMETHOD(GetCubeMapSurface)(THIS_ D3DCUBEMAP_FACES,UINT,IDirect3DSurface9**) PURE; \
+ STDMETHOD(LockRect)(THIS_ D3DCUBEMAP_FACES,UINT,D3DLOCKED_RECT*,CONST RECT*,DWORD) PURE; \
+ STDMETHOD(UnlockRect)(THIS_ D3DCUBEMAP_FACES,UINT) PURE; \
+ STDMETHOD(AddDirtyRect)(THIS_ D3DCUBEMAP_FACES,CONST RECT*) PURE;
+};
+typedef struct IDirect3DCubeTexture9 *LPDIRECT3DCUBETEXTURE9, *PDIRECT3DCUBETEXTURE9;
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirect3DCubeTexture9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DCubeTexture9_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DCubeTexture9_Release(p) (p)->lpVtbl->Release(p)
+#define IDirect3DCubeTexture9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DCubeTexture9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DCubeTexture9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DCubeTexture9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DCubeTexture9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DCubeTexture9_GetPriority(p) (p)->lpVtbl->GetPriority(p)
+#define IDirect3DCubeTexture9_PreLoad(p) (p)->lpVtbl->PreLoad(p)
+#define IDirect3DCubeTexture9_GetType(p) (p)->lpVtbl->GetType(p)
+#define IDirect3DCubeTexture9_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a)
+#define IDirect3DCubeTexture9_GetLOD(p) (p)->lpVtbl->GetLOD(p)
+#define IDirect3DCubeTexture9_GetLevelCount(p) (p)->lpVtbl->GetLevelCount(p)
+#define IDirect3DCubeTexture9_SetAutoGenFilterType(p,a) (p)->lpVtbl->SetAutoGenFilterType(p,a)
+#define IDirect3DCubeTexture9_GetAutoGenFilterType(p) (p)->lpVtbl->GetAutoGenFilterType(p)
+#define IDirect3DCubeTexture9_GenerateMipSubLevels(p) (p)->lpVtbl->GenerateMipSubLevels(p)
+#define IDirect3DCubeTexture9_GetLevelDesc(p,a,b) (p)->lpVtbl->GetLevelDesc(p,a,b)
+#define IDirect3DCubeTexture9_GetCubeMapSurface(p,a,b,c) (p)->lpVtbl->GetCubeMapSurface(p,a,b,c)
+#define IDirect3DCubeTexture9_LockRect(p,a,b,c,d,e) (p)->lpVtbl->LockRect(p,a,b,c,d,e)
+#define IDirect3DCubeTexture9_UnlockRect(p,a,b) (p)->lpVtbl->UnlockRect(p,a,b)
+#define IDirect3DCubeTexture9_AddDirtyRect(p,a,b) (p)->lpVtbl->AddDirtyRect(p,a,b)
+#else
+#define IDirect3DCubeTexture9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DCubeTexture9_AddRef(p) (p)->AddRef()
+#define IDirect3DCubeTexture9_Release(p) (p)->Release()
+#define IDirect3DCubeTexture9_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DCubeTexture9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DCubeTexture9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)
+#define IDirect3DCubeTexture9_FreePrivateData(p,a) (p)->FreePrivateData(a)
+#define IDirect3DCubeTexture9_SetPriority(p,a) (p)->SetPriority(a)
+#define IDirect3DCubeTexture9_GetPriority(p) (p)->GetPriority()
+#define IDirect3DCubeTexture9_PreLoad(p) (p)->PreLoad()
+#define IDirect3DCubeTexture9_GetType(p) (p)->GetType()
+#define IDirect3DCubeTexture9_SetLOD(p,a) (p)->SetLOD(a)
+#define IDirect3DCubeTexture9_GetLOD(p) (p)->GetLOD()
+#define IDirect3DCubeTexture9_GetLevelCount(p) (p)->GetLevelCount()
+#define IDirect3DCubeTexture9_SetAutoGenFilterType(p,a) (p)->SetAutoGenFilterType(a)
+#define IDirect3DCubeTexture9_GetAutoGenFilterType(p) (p)->GetAutoGenFilterType()
+#define IDirect3DCubeTexture9_GenerateMipSubLevels(p) (p)->GenerateMipSubLevels()
+#define IDirect3DCubeTexture9_GetLevelDesc(p,a,b) (p)->GetLevelDesc(a,b)
+#define IDirect3DCubeTexture9_GetCubeMapSurface(p,a,b,c) (p)->GetCubeMapSurface(a,b,c)
+#define IDirect3DCubeTexture9_LockRect(p,a,b,c,d,e) (p)->LockRect(a,b,c,d,e)
+#define IDirect3DCubeTexture9_UnlockRect(p,a,b) (p)->UnlockRect(a,b)
+#define IDirect3DCubeTexture9_AddDirtyRect(p,a,b) (p)->AddDirtyRect(a,b)
+#endif
+
+#undef INTERFACE
+#define INTERFACE IDirect3DTexture9
+DECLARE_INTERFACE_(IDirect3DTexture9,IDirect3DBaseTexture9)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9**) PURE;
+ STDMETHOD(SetPrivateData)(THIS_ REFGUID,CONST void*,DWORD,DWORD) PURE;
+ STDMETHOD(GetPrivateData)(THIS_ REFGUID,void*,DWORD*) PURE;
+ STDMETHOD(FreePrivateData)(THIS_ REFGUID) PURE;
+ STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD) PURE;
+ STDMETHOD_(DWORD,GetPriority)(THIS) PURE;
+ STDMETHOD_(void,PreLoad)(THIS) PURE;
+ STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE;
+ STDMETHOD_(DWORD,SetLOD)(THIS_ DWORD) PURE;
+ STDMETHOD_(DWORD,GetLOD)(THIS) PURE;
+ STDMETHOD_(DWORD,GetLevelCount)(THIS) PURE;
+ STDMETHOD(SetAutoGenFilterType)(THIS_ D3DTEXTUREFILTERTYPE) PURE;
+ STDMETHOD_(D3DTEXTUREFILTERTYPE,GetAutoGenFilterType)(THIS) PURE;
+ STDMETHOD_(void,GenerateMipSubLevels)(THIS) PURE;
+ STDMETHOD(GetLevelDesc)(THIS_ UINT,D3DSURFACE_DESC*) PURE;
+ STDMETHOD(GetSurfaceLevel)(THIS_ UINT,IDirect3DSurface9**) PURE;
+ STDMETHOD(LockRect)(THIS_ UINT,D3DLOCKED_RECT*,CONST RECT*,DWORD) PURE;
+ STDMETHOD(UnlockRect)(THIS_ UINT) PURE;
+ STDMETHOD(AddDirtyRect)(THIS_ CONST RECT*) PURE;
+};
+typedef struct IDirect3DTexture9 *LPDIRECT3DTEXTURE9, *PDIRECT3DTEXTURE9;
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirect3DTexture9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DTexture9_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DTexture9_Release(p) (p)->lpVtbl->Release(p)
+#define IDirect3DTexture9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DTexture9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DTexture9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DTexture9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DTexture9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DTexture9_GetPriority(p) (p)->lpVtbl->GetPriority(p)
+#define IDirect3DTexture9_PreLoad(p) (p)->lpVtbl->PreLoad(p)
+#define IDirect3DTexture9_GetType(p) (p)->lpVtbl->GetType(p)
+#define IDirect3DTexture9_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a)
+#define IDirect3DTexture9_GetLOD(p) (p)->lpVtbl->GetLOD(p)
+#define IDirect3DTexture9_GetLevelCount(p) (p)->lpVtbl->GetLevelCount(p)
+#define IDirect3DTexture9_SetAutoGenFilterType(p,a) (p)->lpVtbl->SetAutoGenFilterType(p,a)
+#define IDirect3DTexture9_GetAutoGenFilterType(p) (p)->lpVtbl->GetAutoGenFilterType(p)
+#define IDirect3DTexture9_GenerateMipSubLevels(p) (p)->lpVtbl->GenerateMipSubLevels(p)
+#define IDirect3DTexture9_GetLevelDesc(p,a,b) (p)->lpVtbl->GetLevelDesc(p,a,b)
+#define IDirect3DTexture9_GetSurfaceLevel(p,a,b) (p)->lpVtbl->GetSurfaceLevel(p,a,b)
+#define IDirect3DTexture9_LockRect(p,a,b,c,d) (p)->lpVtbl->LockRect(p,a,b,c,d)
+#define IDirect3DTexture9_UnlockRect(p,a) (p)->lpVtbl->UnlockRect(p,a)
+#define IDirect3DTexture9_AddDirtyRect(p,a) (p)->lpVtbl->AddDirtyRect(p,a)
+#else
+#define IDirect3DTexture9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DTexture9_AddRef(p) (p)->AddRef()
+#define IDirect3DTexture9_Release(p) (p)->Release()
+#define IDirect3DTexture9_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DTexture9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DTexture9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)
+#define IDirect3DTexture9_FreePrivateData(p,a) (p)->FreePrivateData(a)
+#define IDirect3DTexture9_SetPriority(p,a) (p)->SetPriority(a)
+#define IDirect3DTexture9_GetPriority(p) (p)->GetPriority()
+#define IDirect3DTexture9_PreLoad(p) (p)->PreLoad()
+#define IDirect3DTexture9_GetType(p) (p)->GetType()
+#define IDirect3DTexture9_SetLOD(p,a) (p)->SetLOD(a)
+#define IDirect3DTexture9_GetLOD(p) (p)->GetLOD()
+#define IDirect3DTexture9_GetLevelCount(p) (p)->GetLevelCount()
+#define IDirect3DTexture9_SetAutoGenFilterType(p,a) (p)->SetAutoGenFilterType(a)
+#define IDirect3DTexture9_GetAutoGenFilterType(p) (p)->GetAutoGenFilterType()
+#define IDirect3DTexture9_GenerateMipSubLevels(p) (p)->GenerateMipSubLevels()
+#define IDirect3DTexture9_GetLevelDesc(p,a,b) (p)->GetLevelDesc(a,b)
+#define IDirect3DTexture9_GetSurfaceLevel(p,a,b) (p)->GetSurfaceLevel(a,b)
+#define IDirect3DTexture9_LockRect(p,a,b,c,d) (p)->LockRect(a,b,c,d)
+#define IDirect3DTexture9_UnlockRect(p,a) (p)->UnlockRect(a)
+#define IDirect3DTexture9_AddDirtyRect(p,a) (p)->AddDirtyRect(a)
+#endif
+
+#undef INTERFACE
+#define INTERFACE IDirect3DVolumeTexture9
+DECLARE_INTERFACE_(IDirect3DVolumeTexture9,IDirect3DBaseTexture9)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9**) PURE;
+ STDMETHOD(SetPrivateData)(THIS_ REFGUID,CONST void*,DWORD,DWORD) PURE;
+ STDMETHOD(GetPrivateData)(THIS_ REFGUID,void*,DWORD*) PURE;
+ STDMETHOD(FreePrivateData)(THIS_ REFGUID) PURE;
+ STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD) PURE;
+ STDMETHOD_(DWORD,GetPriority)(THIS) PURE;
+ STDMETHOD_(void,PreLoad)(THIS) PURE;
+ STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE;
+ STDMETHOD_(DWORD,SetLOD)(THIS_ DWORD) PURE;
+ STDMETHOD_(DWORD,GetLOD)(THIS) PURE;
+ STDMETHOD_(DWORD,GetLevelCount)(THIS) PURE;
+ STDMETHOD(SetAutoGenFilterType)(THIS_ D3DTEXTUREFILTERTYPE) PURE;
+ STDMETHOD_(D3DTEXTUREFILTERTYPE,GetAutoGenFilterType)(THIS) PURE;
+ STDMETHOD_(void,GenerateMipSubLevels)(THIS) PURE;
+ STDMETHOD(GetLevelDesc)(THIS_ UINT,D3DVOLUME_DESC*) PURE;
+ STDMETHOD(GetVolumeLevel)(THIS_ UINT,IDirect3DVolume9**) PURE;
+ STDMETHOD(LockBox)(THIS_ UINT,D3DLOCKED_BOX*,CONST D3DBOX*,DWORD) PURE;
+ STDMETHOD(UnlockBox)(THIS_ UINT) PURE;
+ STDMETHOD(AddDirtyBox)(THIS_ CONST D3DBOX*) PURE;
+};
+typedef struct IDirect3DVolumeTexture9 *LPDIRECT3DVOLUMETEXTURE9, *PDIRECT3DVOLUMETEXTURE9;
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirect3DVolumeTexture9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DVolumeTexture9_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DVolumeTexture9_Release(p) (p)->lpVtbl->Release(p)
+#define IDirect3DVolumeTexture9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DVolumeTexture9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DVolumeTexture9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DVolumeTexture9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DVolumeTexture9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DVolumeTexture9_GetPriority(p) (p)->lpVtbl->GetPriority(p)
+#define IDirect3DVolumeTexture9_PreLoad(p) (p)->lpVtbl->PreLoad(p)
+#define IDirect3DVolumeTexture9_GetType(p) (p)->lpVtbl->GetType(p)
+#define IDirect3DVolumeTexture9_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a)
+#define IDirect3DVolumeTexture9_GetLOD(p) (p)->lpVtbl->GetLOD(p)
+#define IDirect3DVolumeTexture9_GetLevelCount(p) (p)->lpVtbl->GetLevelCount(p)
+#define IDirect3DVolumeTexture9_SetAutoGenFilterType(p,a) (p)->lpVtbl->SetAutoGenFilterType(p,a)
+#define IDirect3DVolumeTexture9_GetAutoGenFilterType(p) (p)->lpVtbl->GetAutoGenFilterType(p)
+#define IDirect3DVolumeTexture9_GenerateMipSubLevels(p) (p)->lpVtbl->GenerateMipSubLevels(p)
+#define IDirect3DVolumeTexture9_GetLevelDesc(p,a,b) (p)->lpVtbl->GetLevelDesc(p,a,b)
+#define IDirect3DVolumeTexture9_GetVolumeLevel(p,a,b) (p)->lpVtbl->GetVolumeLevel(p,a,b)
+#define IDirect3DVolumeTexture9_LockBox(p,a,b,c,d) (p)->lpVtbl->LockBox(p,a,b,c,d)
+#define IDirect3DVolumeTexture9_UnlockBox(p,a) (p)->lpVtbl->UnlockBox(p,a)
+#define IDirect3DVolumeTexture9_AddDirtyBox(p,a) (p)->lpVtbl->AddDirtyBox(p,a)
+#else
+#define IDirect3DVolumeTexture9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DVolumeTexture9_AddRef(p) (p)->AddRef()
+#define IDirect3DVolumeTexture9_Release(p) (p)->Release()
+#define IDirect3DVolumeTexture9_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DVolumeTexture9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DVolumeTexture9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)
+#define IDirect3DVolumeTexture9_FreePrivateData(p,a) (p)->FreePrivateData(a)
+#define IDirect3DVolumeTexture9_SetPriority(p,a) (p)->SetPriority(a)
+#define IDirect3DVolumeTexture9_GetPriority(p) (p)->GetPriority()
+#define IDirect3DVolumeTexture9_PreLoad(p) (p)->PreLoad()
+#define IDirect3DVolumeTexture9_GetType(p) (p)->GetType()
+#define IDirect3DVolumeTexture9_SetLOD(p,a) (p)->SetLOD(a)
+#define IDirect3DVolumeTexture9_GetLOD(p) (p)->GetLOD()
+#define IDirect3DVolumeTexture9_GetLevelCount(p) (p)->GetLevelCount()
+#define IDirect3DVolumeTexture9_SetAutoGenFilterType(p,a) (p)->SetAutoGenFilterType(a)
+#define IDirect3DVolumeTexture9_GetAutoGenFilterType(p) (p)->GetAutoGenFilterType()
+#define IDirect3DVolumeTexture9_GenerateMipSubLevels(p) (p)->GenerateMipSubLevels()
+#define IDirect3DVolumeTexture9_GetLevelDesc(p,a,b) (p)->GetLevelDesc(a,b)
+#define IDirect3DVolumeTexture9_GetVolumeLevel(p,a,b) (p)->GetVolumeLevel(a,b)
+#define IDirect3DVolumeTexture9_LockBox(p,a,b,c,d) (p)->LockBox(a,b,c,d)
+#define IDirect3DVolumeTexture9_UnlockBox(p,a) (p)->UnlockBox(a)
+#define IDirect3DVolumeTexture9_AddDirtyBox(p,a) (p)->AddDirtyBox(a)
+#endif
+
+#undef INTERFACE
+#define INTERFACE IDirect3DVertexDeclaration9
+DECLARE_INTERFACE_(IDirect3DVertexDeclaration9,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9**) PURE;
+ STDMETHOD(GetDeclaration)(THIS_ D3DVERTEXELEMENT9*,UINT*) PURE;
+};
+typedef struct IDirect3DVertexDeclaration9 *LPDIRECT3DVERTEXDECLARATION9, *PDIRECT3DVERTEXDECLARATION9;
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirect3DVertexDeclaration9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DVertexDeclaration9_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DVertexDeclaration9_Release(p) (p)->lpVtbl->Release(p)
+#define IDirect3DVertexDeclaration9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DVertexDeclaration9_GetDeclaration(p,a,b) (p)->lpVtbl->GetDeclaration(p,a,b)
+#else
+#define IDirect3DVertexDeclaration9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DVertexDeclaration9_AddRef(p) (p)->AddRef()
+#define IDirect3DVertexDeclaration9_Release(p) (p)->Release()
+#define IDirect3DVertexDeclaration9_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DVertexDeclaration9_GetDeclaration(p,a,b) (p)->GetDeclaration(a,b)
+#endif
+
+#undef INTERFACE
+#define INTERFACE IDirect3DVertexShader9
+DECLARE_INTERFACE_(IDirect3DVertexShader9,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9**) PURE;
+ STDMETHOD(GetFunction)(THIS_ void*,UINT*) PURE;
+};
+typedef struct IDirect3DVertexShader9 *LPDIRECT3DVERTEXSHADER9, *PDIRECT3DVERTEXSHADER9;
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirect3DVertexShader9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DVertexShader9_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DVertexShader9_Release(p) (p)->lpVtbl->Release(p)
+#define IDirect3DVertexShader9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DVertexShader9_GetFunction(p,a,b) (p)->lpVtbl->GetFunction(p,a,b)
+#else
+#define IDirect3DVertexShader9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DVertexShader9_AddRef(p) (p)->AddRef()
+#define IDirect3DVertexShader9_Release(p) (p)->Release()
+#define IDirect3DVertexShader9_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DVertexShader9_GetFunction(p,a,b) (p)->GetFunction(a,b)
+#endif
+
+#undef INTERFACE
+#define INTERFACE IDirect3DPixelShader9
+DECLARE_INTERFACE_(IDirect3DPixelShader9,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9**) PURE;
+ STDMETHOD(GetFunction)(THIS_ void*,UINT*) PURE;
+};
+typedef struct IDirect3DPixelShader9 *LPDIRECT3DPIXELSHADER9, *PDIRECT3DPIXELSHADER9;
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirect3DPixelShader9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DPixelShader9_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DPixelShader9_Release(p) (p)->lpVtbl->Release(p)
+#define IDirect3DPixelShader9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DPixelShader9_GetFunction(p,a,b) (p)->lpVtbl->GetFunction(p,a,b)
+#else
+#define IDirect3DPixelShader9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DPixelShader9_AddRef(p) (p)->AddRef()
+#define IDirect3DPixelShader9_Release(p) (p)->Release()
+#define IDirect3DPixelShader9_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DPixelShader9_GetFunction(p,a,b) (p)->GetFunction(a,b)
+#endif
+
+#undef INTERFACE
+#define INTERFACE IDirect3DStateBlock9
+DECLARE_INTERFACE_(IDirect3DStateBlock9,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9**) PURE;
+ STDMETHOD(Capture)(THIS) PURE;
+ STDMETHOD(Apply)(THIS) PURE;
+};
+typedef struct IDirect3DStateBlock9 *LPDIRECT3DSTATEBLOCK9, *PDIRECT3DSTATEBLOCK9;
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirect3DStateBlock9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DStateBlock9_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DStateBlock9_Release(p) (p)->lpVtbl->Release(p)
+#define IDirect3DStateBlock9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DStateBlock9_Capture(p) (p)->lpVtbl->Capture(p)
+#define IDirect3DStateBlock9_Apply(p) (p)->lpVtbl->Apply(p)
+#else
+#define IDirect3DStateBlock9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DStateBlock9_AddRef(p) (p)->AddRef()
+#define IDirect3DStateBlock9_Release(p) (p)->Release()
+#define IDirect3DStateBlock9_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DStateBlock9_Capture(p) (p)->Capture()
+#define IDirect3DStateBlock9_Apply(p) (p)->Apply()
+#endif
+
+#undef INTERFACE
+#define INTERFACE IDirect3DQuery9
+DECLARE_INTERFACE_(IDirect3DQuery9,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9**) PURE;
+ STDMETHOD_(D3DQUERYTYPE, GetType)(THIS) PURE;
+ STDMETHOD_(DWORD, GetDataSize)(THIS) PURE;
+ STDMETHOD(Issue)(THIS_ DWORD) PURE;
+ STDMETHOD(GetData)(THIS_ void*,DWORD,DWORD) PURE;
+};
+typedef struct IDirect3DQuery9 *LPDIRECT3DQUERY9, *PDIRECT3DQUERY9;
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirect3DQuery9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DQuery9_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DQuery9_Release(p) (p)->lpVtbl->Release(p)
+#define IDirect3DQuery9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DQuery9_GetType(p) (p)->lpVtbl->GetType(p)
+#define IDirect3DQuery9_GetDataSize(p) (p)->lpVtbl->GetDataSize(p)
+#define IDirect3DQuery9_Issue(p,a) (p)->lpVtbl->Issue(p,a)
+#define IDirect3DQuery9_GetData(p,a,b,c) (p)->lpVtbl->GetData(p,a,b,c)
+#else
+#define IDirect3DQuery9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DQuery9_AddRef(p) (p)->AddRef()
+#define IDirect3DQuery9_Release(p) (p)->Release()
+#define IDirect3DQuery9_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DQuery9_GetType(p) (p)->GetType()
+#define IDirect3DQuery9_GetDataSize(p) (p)->GetDataSize()
+#define IDirect3DQuery9_Issue(p,a) (p)->Issue(a)
+#define IDirect3DQuery9_GetData(p,a,b,c) (p)->GetData(a,b,c)
+#endif
+
+#ifdef __cplusplus
+extern "C" IDirect3D9* WINAPI Direct3DCreate9(UINT SDKVersion);
+#else
+extern IDirect3D9* WINAPI Direct3DCreate9(UINT SDKVersion);
+#endif
+
+#endif
+#endif
diff --git a/tcc/include/winapi/directx/d3d9caps.h b/tcc/include/winapi/directx/d3d9caps.h
new file mode 100644
index 0000000..9858cf2
--- /dev/null
+++ b/tcc/include/winapi/directx/d3d9caps.h
@@ -0,0 +1,338 @@
+/*
+
+ d3d9caps.h - Header file for the Direct3D9 API
+
+ Written by Filip Navara <xnavara@volny.cz>
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+*/
+
+#ifndef _D3D9_CAPS_H
+#define _D3D9_CAPS_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifndef DIRECT3D_VERSION
+#define DIRECT3D_VERSION 0x0900
+#endif
+
+#if (DIRECT3D_VERSION >= 0x0900)
+
+#define D3DCURSORCAPS_COLOR 1
+#define D3DCURSORCAPS_LOWRES 2
+#define D3DDEVCAPS_EXECUTESYSTEMMEMORY 0x10
+#define D3DDEVCAPS_EXECUTEVIDEOMEMORY 0x20
+#define D3DDEVCAPS_TLVERTEXSYSTEMMEMORY 0x40
+#define D3DDEVCAPS_TLVERTEXVIDEOMEMORY 0x80
+#define D3DDEVCAPS_TEXTURESYSTEMMEMORY 0x100
+#define D3DDEVCAPS_TEXTUREVIDEOMEMORY 0x200
+#define D3DDEVCAPS_DRAWPRIMTLVERTEX 0x400
+#define D3DDEVCAPS_CANRENDERAFTERFLIP 0x800
+#define D3DDEVCAPS_TEXTURENONLOCALVIDMEM 0x1000
+#define D3DDEVCAPS_DRAWPRIMITIVES2 0x2000
+#define D3DDEVCAPS_SEPARATETEXTUREMEMORIES 0x4000
+#define D3DDEVCAPS_DRAWPRIMITIVES2EX 0x8000
+#define D3DDEVCAPS_HWTRANSFORMANDLIGHT 0x10000
+#define D3DDEVCAPS_CANBLTSYSTONONLOCAL 0x20000
+#define D3DDEVCAPS_HWRASTERIZATION 0x80000
+#define D3DDEVCAPS_PUREDEVICE 0x100000
+#define D3DDEVCAPS_QUINTICRTPATCHES 0x200000
+#define D3DDEVCAPS_RTPATCHES 0x400000
+#define D3DDEVCAPS_RTPATCHHANDLEZERO 0x800000
+#define D3DDEVCAPS_NPATCHES 0x1000000
+#define D3DDEVCAPS2_STREAMOFFSET 0x01
+#define D3DDEVCAPS2_DMAPNPATCH 0x02
+#define D3DDEVCAPS2_ADAPTIVETESSRTPATCH 0x04
+#define D3DDEVCAPS2_ADAPTIVETESSNPATCH 0x08
+#define D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES 0x10
+#define D3DDEVCAPS2_PRESAMPLEDDMAPNPATCH 0x20
+#define D3DDEVCAPS2_VERTEXELEMENTSCANSHARESTREAMOFFSET 0x40
+#define D3DFVFCAPS_TEXCOORDCOUNTMASK 0xFFFF
+#define D3DFVFCAPS_DONOTSTRIPELEMENTS 0x80000
+#define D3DFVFCAPS_PSIZE 0x100000
+#define D3DLINECAPS_TEXTURE 0x01
+#define D3DLINECAPS_ZTEST 0x02
+#define D3DLINECAPS_BLEND 0x04
+#define D3DLINECAPS_ALPHACMP 0x08
+#define D3DLINECAPS_FOG 0x10
+#define D3DLINECAPS_ANTIALIAS 0x20
+#define D3DPBLENDCAPS_ZERO 0x01
+#define D3DPBLENDCAPS_ONE 0x02
+#define D3DPBLENDCAPS_SRCCOLOR 0x04
+#define D3DPBLENDCAPS_INVSRCCOLOR 0x08
+#define D3DPBLENDCAPS_SRCALPHA 0x10
+#define D3DPBLENDCAPS_INVSRCALPHA 0x20
+#define D3DPBLENDCAPS_DESTALPHA 0x40
+#define D3DPBLENDCAPS_INVDESTALPHA 0x80
+#define D3DPBLENDCAPS_DESTCOLOR 0x100
+#define D3DPBLENDCAPS_INVDESTCOLOR 0x200
+#define D3DPBLENDCAPS_SRCALPHASAT 0x400
+#define D3DPBLENDCAPS_BOTHSRCALPHA 0x800
+#define D3DPBLENDCAPS_BOTHINVSRCALPHA 0x1000
+#define D3DPBLENDCAPS_BLENDFACTOR 0x2000
+#define D3DPCMPCAPS_NEVER 0x01
+#define D3DPCMPCAPS_LESS 0x02
+#define D3DPCMPCAPS_EQUAL 0x04
+#define D3DPCMPCAPS_LESSEQUAL 0x08
+#define D3DPCMPCAPS_GREATER 0x10
+#define D3DPCMPCAPS_NOTEQUAL 0x20
+#define D3DPCMPCAPS_GREATEREQUAL 0x40
+#define D3DPCMPCAPS_ALWAYS 0x80
+#define D3DPMISCCAPS_MASKZ 0x02
+#define D3DPMISCCAPS_CULLNONE 0x10
+#define D3DPMISCCAPS_CULLCW 0x20
+#define D3DPMISCCAPS_CULLCCW 0x40
+#define D3DPMISCCAPS_COLORWRITEENABLE 0x80
+#define D3DPMISCCAPS_CLIPPLANESCALEDPOINTS 0x100
+#define D3DPMISCCAPS_CLIPTLVERTS 0x200
+#define D3DPMISCCAPS_TSSARGTEMP 0x400
+#define D3DPMISCCAPS_BLENDOP 0x800
+#define D3DPMISCCAPS_NULLREFERENCE 0x1000
+#define D3DPMISCCAPS_INDEPENDENTWRITEMASKS 0x4000
+#define D3DPMISCCAPS_PERSTAGECONSTANT 0x8000
+#define D3DPMISCCAPS_FOGANDSPECULARALPHA 0x10000
+#define D3DPMISCCAPS_SEPARATEALPHABLEND 0x20000
+#define D3DPMISCCAPS_MRTINDEPENDENTBITDEPTHS 0x40000
+#define D3DPMISCCAPS_MRTPOSTPIXELSHADERBLENDING 0x80000
+#define D3DPMISCCAPS_FOGVERTEXCLAMPED 0x100000
+#define D3DPRASTERCAPS_DITHER 0x01
+#define D3DPRASTERCAPS_ZTEST 0x10
+#define D3DPRASTERCAPS_FOGVERTEX 0x80
+#define D3DPRASTERCAPS_FOGTABLE 0x100
+#define D3DPRASTERCAPS_MIPMAPLODBIAS 0x2000
+#define D3DPRASTERCAPS_ZBUFFERLESSHSR 0x8000
+#define D3DPRASTERCAPS_FOGRANGE 0x10000
+#define D3DPRASTERCAPS_ANISOTROPY 0x20000
+#define D3DPRASTERCAPS_WBUFFER 0x40000
+#define D3DPRASTERCAPS_WFOG 0x100000
+#define D3DPRASTERCAPS_ZFOG 0x200000
+#define D3DPRASTERCAPS_COLORPERSPECTIVE 0x400000
+#define D3DPRASTERCAPS_SCISSORTEST 0x1000000
+#define D3DPRASTERCAPS_SLOPESCALEDEPTHBIAS 0x2000000
+#define D3DPRASTERCAPS_DEPTHBIAS 0x4000000
+#define D3DPRASTERCAPS_MULTISAMPLE_TOGGLE 0x8000000
+#define D3DPRESENT_INTERVAL_DEFAULT 0x00
+#define D3DPRESENT_INTERVAL_ONE 0x01
+#define D3DPRESENT_INTERVAL_TWO 0x02
+#define D3DPRESENT_INTERVAL_THREE 0x04
+#define D3DPRESENT_INTERVAL_FOUR 0x08
+#define D3DPRESENT_INTERVAL_IMMEDIATE 0x80000000L
+#define D3DPSHADECAPS_COLORGOURAUDRGB 0x08
+#define D3DPSHADECAPS_SPECULARGOURAUDRGB 0x200
+#define D3DPSHADECAPS_ALPHAGOURAUDBLEND 0x4000
+#define D3DPSHADECAPS_FOGGOURAUD 0x80000
+#define D3DPTADDRESSCAPS_WRAP 0x01
+#define D3DPTADDRESSCAPS_MIRROR 0x02
+#define D3DPTADDRESSCAPS_CLAMP 0x04
+#define D3DPTADDRESSCAPS_BORDER 0x08
+#define D3DPTADDRESSCAPS_INDEPENDENTUV 0x10
+#define D3DPTADDRESSCAPS_MIRRORONCE 0x20
+#define D3DPTEXTURECAPS_PERSPECTIVE 0x01
+#define D3DPTEXTURECAPS_POW2 0x02
+#define D3DPTEXTURECAPS_ALPHA 0x04
+#define D3DPTEXTURECAPS_SQUAREONLY 0x20
+#define D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE 0x40
+#define D3DPTEXTURECAPS_ALPHAPALETTE 0x80
+#define D3DPTEXTURECAPS_NONPOW2CONDITIONAL 0x100
+#define D3DPTEXTURECAPS_PROJECTED 0x400
+#define D3DPTEXTURECAPS_CUBEMAP 0x800
+#define D3DPTEXTURECAPS_VOLUMEMAP 0x2000
+#define D3DPTEXTURECAPS_MIPMAP 0x4000
+#define D3DPTEXTURECAPS_MIPVOLUMEMAP 0x8000
+#define D3DPTEXTURECAPS_MIPCUBEMAP 0x10000
+#define D3DPTEXTURECAPS_CUBEMAP_POW2 0x20000
+#define D3DPTEXTURECAPS_VOLUMEMAP_POW2 0x40000
+#define D3DPTEXTURECAPS_NOPROJECTEDBUMPENV 0x200000
+#define D3DPTFILTERCAPS_MINFPOINT 0x100
+#define D3DPTFILTERCAPS_MINFLINEAR 0x200
+#define D3DPTFILTERCAPS_MINFANISOTROPIC 0x400
+#define D3DPTFILTERCAPS_MINFPYRAMIDALQUAD 0x800
+#define D3DPTFILTERCAPS_MINFGAUSSIANQUAD 0x1000
+#define D3DPTFILTERCAPS_MIPFPOINT 0x10000
+#define D3DPTFILTERCAPS_MIPFLINEAR 0x20000
+#define D3DPTFILTERCAPS_MAGFPOINT 0x1000000
+#define D3DPTFILTERCAPS_MAGFLINEAR 0x2000000
+#define D3DPTFILTERCAPS_MAGFANISOTROPIC 0x4000000
+#define D3DPTFILTERCAPS_MAGFPYRAMIDALQUAD 0x8000000
+#define D3DPTFILTERCAPS_MAGFGAUSSIANQUAD 0x10000000
+#define D3DSTENCILCAPS_KEEP 0x01
+#define D3DSTENCILCAPS_ZERO 0x02
+#define D3DSTENCILCAPS_REPLACE 0x04
+#define D3DSTENCILCAPS_INCRSAT 0x08
+#define D3DSTENCILCAPS_DECRSAT 0x10
+#define D3DSTENCILCAPS_INVERT 0x20
+#define D3DSTENCILCAPS_INCR 0x40
+#define D3DSTENCILCAPS_DECR 0x80
+#define D3DSTENCILCAPS_TWOSIDED 0x100
+#define D3DTEXOPCAPS_DISABLE 0x01
+#define D3DTEXOPCAPS_SELECTARG1 0x02
+#define D3DTEXOPCAPS_SELECTARG2 0x04
+#define D3DTEXOPCAPS_MODULATE 0x08
+#define D3DTEXOPCAPS_MODULATE2X 0x10
+#define D3DTEXOPCAPS_MODULATE4X 0x20
+#define D3DTEXOPCAPS_ADD 0x40
+#define D3DTEXOPCAPS_ADDSIGNED 0x80
+#define D3DTEXOPCAPS_ADDSIGNED2X 0x100
+#define D3DTEXOPCAPS_SUBTRACT 0x200
+#define D3DTEXOPCAPS_ADDSMOOTH 0x400
+#define D3DTEXOPCAPS_BLENDDIFFUSEALPHA 0x800
+#define D3DTEXOPCAPS_BLENDTEXTUREALPHA 0x1000
+#define D3DTEXOPCAPS_BLENDFACTORALPHA 0x2000
+#define D3DTEXOPCAPS_BLENDTEXTUREALPHAPM 0x4000
+#define D3DTEXOPCAPS_BLENDCURRENTALPHA 0x8000
+#define D3DTEXOPCAPS_PREMODULATE 0x10000
+#define D3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR 0x20000
+#define D3DTEXOPCAPS_MODULATECOLOR_ADDALPHA 0x40000
+#define D3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR 0x80000
+#define D3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA 0x100000
+#define D3DTEXOPCAPS_BUMPENVMAP 0x200000
+#define D3DTEXOPCAPS_BUMPENVMAPLUMINANCE 0x400000
+#define D3DTEXOPCAPS_DOTPRODUCT3 0x800000
+#define D3DTEXOPCAPS_MULTIPLYADD 0x1000000
+#define D3DTEXOPCAPS_LERP 0x2000000
+#define D3DVTXPCAPS_TEXGEN 0x01
+#define D3DVTXPCAPS_MATERIALSOURCE7 0x02
+#define D3DVTXPCAPS_DIRECTIONALLIGHTS 0x08
+#define D3DVTXPCAPS_POSITIONALLIGHTS 0x10
+#define D3DVTXPCAPS_LOCALVIEWER 0x20
+#define D3DVTXPCAPS_TWEENING 0x40
+#define D3DVTXPCAPS_TEXGEN_SPHEREMAP 0x100
+#define D3DVTXPCAPS_NO_TEXGEN_NONLOCALVIEWER 0x200
+#define D3DCAPS_READ_SCANLINE 0x20000
+#define D3DCAPS2_FULLSCREENGAMMA 0x20000L
+#define D3DCAPS2_CANCALIBRATEGAMMA 0x100000L
+#define D3DCAPS2_RESERVED 0x2000000L
+#define D3DCAPS2_CANMANAGERESOURCE 0x10000000L
+#define D3DCAPS2_DYNAMICTEXTURES 0x20000000L
+#define D3DCAPS2_CANAUTOGENMIPMAP 0x40000000L
+#define D3DCAPS3_ALPHA_FULLSCREEN_FLIP_OR_DISCARD 0x20
+#define D3DCAPS3_LINEAR_TO_SRGB_PRESENTATION 0x80
+#define D3DCAPS3_COPY_TO_VIDMEM 0x100
+#define D3DCAPS3_COPY_TO_SYSTEMMEM 0x200
+#define D3DCAPS3_RESERVED 0x8000001fL
+#define D3DDTCAPS_UBYTE4 0x01
+#define D3DDTCAPS_UBYTE4N 0x02
+#define D3DDTCAPS_SHORT2N 0x04
+#define D3DDTCAPS_SHORT4N 0x08
+#define D3DDTCAPS_USHORT2N 0x10
+#define D3DDTCAPS_USHORT4N 0x20
+#define D3DDTCAPS_UDEC3 0x40
+#define D3DDTCAPS_DEC3N 0x80
+#define D3DDTCAPS_FLOAT16_2 0x100
+#define D3DDTCAPS_FLOAT16_4 0x200
+#define D3DMIN30SHADERINSTRUCTIONS 512
+#define D3DMAX30SHADERINSTRUCTIONS 32768
+#define D3DPS20_MAX_DYNAMICFLOWCONTROLDEPTH 24
+#define D3DPS20_MIN_DYNAMICFLOWCONTROLDEPTH 0
+#define D3DPS20_MAX_NUMTEMPS 32
+#define D3DPS20_MIN_NUMTEMPS 12
+#define D3DPS20_MAX_STATICFLOWCONTROLDEPTH 4
+#define D3DPS20_MIN_STATICFLOWCONTROLDEPTH 0
+#define D3DPS20_MAX_NUMINSTRUCTIONSLOTS 512
+#define D3DPS20_MIN_NUMINSTRUCTIONSLOTS 96
+#define D3DPS20CAPS_ARBITRARYSWIZZLE 0x1
+#define D3DPS20CAPS_GRADIENTINSTRUCTIONS 0x2
+#define D3DPS20CAPS_PREDICATION 0x4
+#define D3DPS20CAPS_NODEPENDENTREADLIMIT 0x8
+#define D3DPS20CAPS_NOTEXINSTRUCTIONLIMIT 0x10
+#define D3DVS20_MAX_DYNAMICFLOWCONTROLDEPTH 24
+#define D3DVS20_MIN_DYNAMICFLOWCONTROLDEPTH 0
+#define D3DVS20_MAX_NUMTEMPS 32
+#define D3DVS20_MIN_NUMTEMPS 12
+#define D3DVS20_MAX_STATICFLOWCONTROLDEPTH 4
+#define D3DVS20_MIN_STATICFLOWCONTROLDEPTH 1
+#define D3DVS20CAPS_PREDICATION 1
+
+typedef struct _D3DVSHADERCAPS2_0 {
+ DWORD Caps;
+ INT DynamicFlowControlDepth;
+ INT NumTemps;
+ INT StaticFlowControlDepth;
+} D3DVSHADERCAPS2_0;
+
+typedef struct _D3DPSHADERCAPS2_0 {
+ DWORD Caps;
+ INT DynamicFlowControlDepth;
+ INT NumTemps;
+ INT StaticFlowControlDepth;
+ INT NumInstructionSlots;
+} D3DPSHADERCAPS2_0;
+
+typedef struct _D3DCAPS9 {
+ D3DDEVTYPE DeviceType;
+ UINT AdapterOrdinal;
+ DWORD Caps;
+ DWORD Caps2;
+ DWORD Caps3;
+ DWORD PresentationIntervals;
+ DWORD CursorCaps;
+ DWORD DevCaps;
+ DWORD PrimitiveMiscCaps;
+ DWORD RasterCaps;
+ DWORD ZCmpCaps;
+ DWORD SrcBlendCaps;
+ DWORD DestBlendCaps;
+ DWORD AlphaCmpCaps;
+ DWORD ShadeCaps;
+ DWORD TextureCaps;
+ DWORD TextureFilterCaps;
+ DWORD CubeTextureFilterCaps;
+ DWORD VolumeTextureFilterCaps;
+ DWORD TextureAddressCaps;
+ DWORD VolumeTextureAddressCaps;
+ DWORD LineCaps;
+ DWORD MaxTextureWidth;
+ DWORD MaxTextureHeight;
+ DWORD MaxVolumeExtent;
+ DWORD MaxTextureRepeat;
+ DWORD MaxTextureAspectRatio;
+ DWORD MaxAnisotropy;
+ float MaxVertexW;
+ float GuardBandLeft;
+ float GuardBandTop;
+ float GuardBandRight;
+ float GuardBandBottom;
+ float ExtentsAdjust;
+ DWORD StencilCaps;
+ DWORD FVFCaps;
+ DWORD TextureOpCaps;
+ DWORD MaxTextureBlendStages;
+ DWORD MaxSimultaneousTextures;
+ DWORD VertexProcessingCaps;
+ DWORD MaxActiveLights;
+ DWORD MaxUserClipPlanes;
+ DWORD MaxVertexBlendMatrices;
+ DWORD MaxVertexBlendMatrixIndex;
+ float MaxPointSize;
+ DWORD MaxPrimitiveCount;
+ DWORD MaxVertexIndex;
+ DWORD MaxStreams;
+ DWORD MaxStreamStride;
+ DWORD VertexShaderVersion;
+ DWORD MaxVertexShaderConst;
+ DWORD PixelShaderVersion;
+ float PixelShader1xMaxValue;
+ DWORD DevCaps2;
+ float MaxNpatchTessellationLevel;
+ DWORD Reserved5;
+ UINT MasterAdapterOrdinal;
+ UINT AdapterOrdinalInGroup;
+ UINT NumberOfAdaptersInGroup;
+ DWORD DeclTypes;
+ DWORD NumSimultaneousRTs;
+ DWORD StretchRectFilterCaps;
+ D3DVSHADERCAPS2_0 VS20Caps;
+ D3DPSHADERCAPS2_0 PS20Caps;
+ DWORD VertexTextureFilterCaps;
+ DWORD MaxVShaderInstructionsExecuted;
+ DWORD MaxPShaderInstructionsExecuted;
+ DWORD MaxVertexShader30InstructionSlots;
+ DWORD MaxPixelShader30InstructionSlots;
+} D3DCAPS9;
+
+#endif
+#endif
diff --git a/tcc/include/winapi/directx/d3d9types.h b/tcc/include/winapi/directx/d3d9types.h
new file mode 100644
index 0000000..6b74f63
--- /dev/null
+++ b/tcc/include/winapi/directx/d3d9types.h
@@ -0,0 +1,1272 @@
+/*
+
+ d3d9types.h - Header file for the Direct3D9 API
+
+ Written by Filip Navara <xnavara@volny.cz>
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+*/
+
+#ifndef _D3D9_TYPES_H
+#define _D3D9_TYPES_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifndef DIRECT3D_VERSION
+#define DIRECT3D_VERSION 0x0900
+#endif
+
+#if (DIRECT3D_VERSION >= 0x0900)
+
+#include <pshpack4.h>
+
+#define D3DCLEAR_TARGET 0x01
+#define D3DCLEAR_ZBUFFER 0x02
+#define D3DCLEAR_STENCIL 0x04
+#define D3DCLIPPLANE0 0x01
+#define D3DCLIPPLANE1 0x02
+#define D3DCLIPPLANE2 0x04
+#define D3DCLIPPLANE3 0x08
+#define D3DCLIPPLANE4 0x10
+#define D3DCLIPPLANE5 0x20
+#define D3DCOLOR_ARGB(a,r,g,b) ((D3DCOLOR)((((a)&0xff)<<24)|(((r)&0xff)<<16)|(((g)&0xff)<<8)|((b)&0xff)))
+#define D3DCOLOR_COLORVALUE(r,g,b,a) D3DCOLOR_RGBA((DWORD)((r)*255.f),(DWORD)((g)*255.f),(DWORD)((b)*255.f),(DWORD)((a)*255.f))
+#define D3DCOLOR_RGBA(r,g,b,a) D3DCOLOR_ARGB(a,r,g,b)
+#define D3DCOLOR_XRGB(r,g,b) D3DCOLOR_ARGB(0xff,r,g,b)
+#define D3DCOLOR_XYUV(y,u,v) D3DCOLOR_ARGB(0xff,y,u,v)
+#define D3DCOLOR_AYUV(a,y,u,v) D3DCOLOR_ARGB(a,y,u,v)
+#define D3DCOLORWRITEENABLE_RED 0x01
+#define D3DCOLORWRITEENABLE_GREEN 0x02
+#define D3DCOLORWRITEENABLE_BLUE 0x04
+#define D3DCOLORWRITEENABLE_ALPHA 0x08
+#define D3DCS_LEFT 0x01
+#define D3DCS_RIGHT 0x02
+#define D3DCS_TOP 0x04
+#define D3DCS_BOTTOM 0x08
+#define D3DCS_FRONT 0x10
+#define D3DCS_BACK 0x20
+#define D3DCS_PLANE0 0x40
+#define D3DCS_PLANE1 0x80
+#define D3DCS_PLANE2 0x100
+#define D3DCS_PLANE3 0x200
+#define D3DCS_PLANE4 0x400
+#define D3DCS_PLANE5 0x800
+#define D3DCS_ALL (D3DCS_LEFT|D3DCS_RIGHT|D3DCS_TOP|D3DCS_BOTTOM|D3DCS_FRONT|D3DCS_BACK|D3DCS_PLANE0|D3DCS_PLANE1|D3DCS_PLANE2|D3DCS_PLANE3|D3DCS_PLANE4|D3DCS_PLANE5)
+#define D3DDECL_END() {0xff,0,D3DDECLTYPE_UNUSED,0,0,0}
+#define D3DDP_MAXTEXCOORD 8
+#define D3DPV_DONOTCOPYDATA 0x01
+#define D3DTA_SELECTMASK 0x0f
+#define D3DTA_DIFFUSE 0x00
+#define D3DTA_CURRENT 0x01
+#define D3DTA_TEXTURE 0x02
+#define D3DTA_TFACTOR 0x03
+#define D3DTA_SPECULAR 0x04
+#define D3DTA_TEMP 0x05
+#define D3DTA_CONSTANT 0x06
+#define D3DTA_COMPLEMENT 0x10
+#define D3DTA_ALPHAREPLICATE 0x20
+#define D3DFVF_RESERVED0 0x01
+#define D3DFVF_POSITION_MASK 0x4000E
+#define D3DFVF_XYZ 0x02
+#define D3DFVF_XYZRHW 0x04
+#define D3DFVF_XYZB1 0x06
+#define D3DFVF_XYZB2 0x08
+#define D3DFVF_XYZB3 0x0a
+#define D3DFVF_XYZB4 0x0c
+#define D3DFVF_XYZB5 0x0e
+#define D3DFVF_XYZW 0x4002
+#define D3DFVF_NORMAL 0x10
+#define D3DFVF_PSIZE 0x20
+#define D3DFVF_DIFFUSE 0x40
+#define D3DFVF_SPECULAR 0x80
+#define D3DFVF_TEXCOUNT_MASK 0xf00
+#define D3DFVF_TEXCOUNT_SHIFT 8
+#define D3DFVF_TEX0 0x0000
+#define D3DFVF_TEX1 0x0100
+#define D3DFVF_TEX2 0x0200
+#define D3DFVF_TEX3 0x0300
+#define D3DFVF_TEX4 0x0400
+#define D3DFVF_TEX5 0x0500
+#define D3DFVF_TEX6 0x0600
+#define D3DFVF_TEX7 0x0700
+#define D3DFVF_TEX8 0x0800
+#define D3DFVF_TEXCOORDSIZE1(i) (D3DFVF_TEXTUREFORMAT1 << (i * 2 + 16))
+#define D3DFVF_TEXCOORDSIZE2(i) (D3DFVF_TEXTUREFORMAT2)
+#define D3DFVF_TEXCOORDSIZE3(i) (D3DFVF_TEXTUREFORMAT3 << (i * 2 + 16))
+#define D3DFVF_TEXCOORDSIZE4(i) (D3DFVF_TEXTUREFORMAT4 << (i * 2 + 16))
+#define D3DFVF_TEXTUREFORMAT1 3
+#define D3DFVF_TEXTUREFORMAT2 0
+#define D3DFVF_TEXTUREFORMAT3 1
+#define D3DFVF_TEXTUREFORMAT4 2
+#define D3DFVF_LASTBETA_UBYTE4 0x1000
+#define D3DFVF_LASTBETA_D3DCOLOR 0x8000
+#define D3DFVF_RESERVED2 0x6000
+#define D3DDMAPSAMPLER 256
+#define D3DVERTEXTEXTURESAMPLER0 (D3DDMAPSAMPLER+1)
+#define D3DVERTEXTEXTURESAMPLER1 (D3DDMAPSAMPLER+2)
+#define D3DVERTEXTEXTURESAMPLER2 (D3DDMAPSAMPLER+3)
+#define D3DVERTEXTEXTURESAMPLER3 (D3DDMAPSAMPLER+4)
+#define D3DVS_ADDRESSMODE_SHIFT 13
+#define D3DVS_ADDRESSMODE_MASK (1 << D3DVS_ADDRESSMODE_SHIFT)
+#define D3DVS_SWIZZLE_SHIFT 16
+#define D3DVS_SWIZZLE_MASK 0x00FF0000
+#define D3DVS_X_X (0 << D3DVS_SWIZZLE_SHIFT)
+#define D3DVS_X_Y (1 << D3DVS_SWIZZLE_SHIFT)
+#define D3DVS_X_Z (2 << D3DVS_SWIZZLE_SHIFT)
+#define D3DVS_X_W (3 << D3DVS_SWIZZLE_SHIFT)
+#define D3DVS_Y_X (0 << (D3DVS_SWIZZLE_SHIFT + 2))
+#define D3DVS_Y_Y (1 << (D3DVS_SWIZZLE_SHIFT + 2))
+#define D3DVS_Y_Z (2 << (D3DVS_SWIZZLE_SHIFT + 2))
+#define D3DVS_Y_W (3 << (D3DVS_SWIZZLE_SHIFT + 2))
+#define D3DVS_Z_X (0 << (D3DVS_SWIZZLE_SHIFT + 4))
+#define D3DVS_Z_Y (1 << (D3DVS_SWIZZLE_SHIFT + 4))
+#define D3DVS_Z_Z (2 << (D3DVS_SWIZZLE_SHIFT + 4))
+#define D3DVS_Z_W (3 << (D3DVS_SWIZZLE_SHIFT + 4))
+#define D3DVS_W_X (0 << (D3DVS_SWIZZLE_SHIFT + 6))
+#define D3DVS_W_Y (1 << (D3DVS_SWIZZLE_SHIFT + 6))
+#define D3DVS_W_Z (2 << (D3DVS_SWIZZLE_SHIFT + 6))
+#define D3DVS_W_W (3 << (D3DVS_SWIZZLE_SHIFT + 6))
+#define D3DVS_NOSWIZZLE (D3DVS_X_X|D3DVS_Y_Y|D3DVS_Z_Z|D3DVS_W_W)
+#define D3DPRESENT_RATE_DEFAULT 0
+#define D3DRENDERSTATE_WRAPBIAS 128UL
+#define D3DSHADER_ADDRESSMODE_SHIFT 13
+#define D3DSHADER_ADDRESSMODE_MASK (1 << D3DSHADER_ADDRESSMODE_SHIFT)
+#define D3DSHADER_COMPARISON_SHIFT D3DSP_OPCODESPECIFICCONTROL_SHIFT
+#define D3DSHADER_COMPARISON_MASK (0x07 << D3DSHADER_COMPARISON_SHIFT)
+#define D3DSHADER_INSTRUCTION_PREDICATED 0x10000000
+#define D3DSI_COISSUE 0x40000000
+#define D3DSI_COMMENTSIZE_SHIFT 16
+#define D3DSI_COMMENTSIZE_MASK 0x7fff0000
+#define D3DSI_OPCODE_MASK 0xffff
+#define D3DSI_INSTLENGTH_MASK 0xf000000
+#define D3DSI_INSTLENGTH_SHIFT 24
+#define D3DSI_TEXLD_PROJECT (0x01 << D3DSP_OPCODESPECIFICCONTROL_SHIFT)
+#define D3DSI_TEXLD_BIAS (0x02 << D3DSP_OPCODESPECIFICCONTROL_SHIFT)
+#define D3DSINCOSCONST1 -1.5500992e-006f, -2.1701389e-005f, 0.0026041667f, 0.00026041668f
+#define D3DSINCOSCONST2 -0.020833334f, -0.12500000f, 1.0f, 0.50000000f
+#define D3DSP_OPCODESPECIFICCONTROL_MASK 0xff0000
+#define D3DSP_OPCODESPECIFICCONTROL_SHIFT 16
+#define D3DSP_DCL_USAGE_SHIFT 0
+#define D3DSP_DCL_USAGE_MASK 0x0000000f
+#define D3DSP_DCL_USAGEINDEX_SHIFT 16
+#define D3DSP_DCL_USAGEINDEX_MASK 0x000f0000
+#define D3DSP_TEXTURETYPE_SHIFT 27
+#define D3DSP_TEXTURETYPE_MASK 0x78000000
+#define D3DSP_REGNUM_MASK 0x7ff
+#define D3DSP_WRITEMASK_0 0x10000
+#define D3DSP_WRITEMASK_1 0x20000
+#define D3DSP_WRITEMASK_2 0x40000
+#define D3DSP_WRITEMASK_3 0x80000
+#define D3DSP_WRITEMASK_ALL 0xf0000
+#define D3DSP_DSTMOD_SHIFT 20
+#define D3DSP_DSTMOD_MASK 0xf00000
+#define D3DSPDM_NONE 0
+#define D3DSPDM_SATURATE (1 << D3DSP_DSTMOD_SHIFT)
+#define D3DSPDM_PARTIALPRECISION (2 << D3DSP_DSTMOD_SHIFT)
+#define D3DSPDM_MSAMPCENTROID (4 << D3DSP_DSTMOD_SHIFT)
+#define D3DSP_DSTSHIFT_SHIFT 24
+#define D3DSP_DSTSHIFT_MASK 0xf000000
+#define D3DSP_NOSWIZZLE ((0 << (D3DSP_SWIZZLE_SHIFT + 0)) | (1 << (D3DSP_SWIZZLE_SHIFT + 2)) | (2 << (D3DSP_SWIZZLE_SHIFT + 4)) | (3 << (D3DSP_SWIZZLE_SHIFT + 6)))
+#define D3DSP_REPLICATERED 0
+#define D3DSP_REPLICATEGREEN ((1 << (D3DSP_SWIZZLE_SHIFT + 0)) | (1 << (D3DSP_SWIZZLE_SHIFT + 2)) | (1 << (D3DSP_SWIZZLE_SHIFT + 4)) | (1 << (D3DSP_SWIZZLE_SHIFT + 6)))
+#define D3DSP_REPLICATEBLUE ((2 << (D3DSP_SWIZZLE_SHIFT + 0)) | (2 << (D3DSP_SWIZZLE_SHIFT + 2)) | (2 << (D3DSP_SWIZZLE_SHIFT + 4)) | (2 << (D3DSP_SWIZZLE_SHIFT + 6)))
+#define D3DSP_REPLICATEALPHA ((3 << (D3DSP_SWIZZLE_SHIFT + 0)) | (3 << (D3DSP_SWIZZLE_SHIFT + 2)) | (3 << (D3DSP_SWIZZLE_SHIFT + 4)) | (3 << (D3DSP_SWIZZLE_SHIFT + 6)))
+#define D3DSP_REGTYPE_SHIFT 28
+#define D3DSP_REGTYPE_SHIFT2 8
+#define D3DSP_REGTYPE_MASK 0x70000000
+#define D3DSP_REGTYPE_MASK2 0x1800
+#define D3DSP_SRCMOD_SHIFT 24
+#define D3DSP_SRCMOD_MASK 0xf000000
+#define D3DSP_SWIZZLE_SHIFT 16
+#define D3DSP_SWIZZLE_MASK 0xff0000
+#define D3DTS_WORLDMATRIX(index) (D3DTRANSFORMSTATETYPE)(index + 256)
+#define D3DTS_WORLD D3DTS_WORLDMATRIX(0)
+#define D3DTS_WORLD1 D3DTS_WORLDMATRIX(1)
+#define D3DTS_WORLD2 D3DTS_WORLDMATRIX(2)
+#define D3DTS_WORLD3 D3DTS_WORLDMATRIX(3)
+#define D3DTSS_TCI_PASSTHRU 0x00
+#define D3DTSS_TCI_CAMERASPACENORMAL 0x10000
+#define D3DTSS_TCI_CAMERASPACEPOSITION 0x20000
+#define D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR 0x30000
+#define D3DTSS_TCI_SPHEREMAP 0x40000
+#define D3DUSAGE_RENDERTARGET 0x01
+#define D3DUSAGE_DEPTHSTENCIL 0x02
+#define D3DUSAGE_WRITEONLY 0x08
+#define D3DUSAGE_SOFTWAREPROCESSING 0x10
+#define D3DUSAGE_DONOTCLIP 0x20
+#define D3DUSAGE_POINTS 0x40
+#define D3DUSAGE_RTPATCHES 0x80
+#define D3DUSAGE_NPATCHES 0x100
+#define D3DUSAGE_DYNAMIC 0x200
+#define D3DUSAGE_AUTOGENMIPMAP 0x400
+#define D3DUSAGE_DMAP 0x4000
+#define D3DUSAGE_QUERY_LEGACYBUMPMAP 0x8000
+#define D3DUSAGE_QUERY_SRGBREAD 0x10000
+#define D3DUSAGE_QUERY_FILTER 0x20000
+#define D3DUSAGE_QUERY_SRGBWRITE 0x40000
+#define D3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING 0x80000
+#define D3DUSAGE_QUERY_VERTEXTEXTURE 0x100000
+#define D3DWRAP_U 0x01
+#define D3DWRAP_V 0x02
+#define D3DWRAP_W 0x04
+#define D3DWRAPCOORD_0 0x01
+#define D3DWRAPCOORD_1 0x02
+#define D3DWRAPCOORD_2 0x04
+#define D3DWRAPCOORD_3 0x08
+#define MAX_DEVICE_IDENTIFIER_STRING 512
+#define MAXD3DDECLLENGTH 64
+#define MAXD3DDECLMETHOD D3DDECLMETHOD_LOOKUPPRESAMPLED
+#define MAXD3DDECLTYPE D3DDECLTYPE_UNUSED
+#define MAXD3DDECLUSAGE D3DDECLUSAGE_SAMPLE
+#define MAXD3DDECLUSAGEINDEX 15
+#define D3DMAXUSERCLIPPLANES 32
+#define D3D_MAX_SIMULTANEOUS_RENDERTARGETS 4
+#define D3DPS_VERSION(major,minor) (0xffff0000 | ((major) << 8) | (minor))
+#define D3DVS_VERSION(major,minor) (0xfffe0000 | ((major) << 8) | (minor))
+#define D3DSHADER_VERSION_MAJOR(version) (((version) >> 8) & 0xff)
+#define D3DSHADER_VERSION_MINOR(version) (((version) >> 0) & 0xff)
+#define D3DSHADER_COMMENT(s) ((((s) << D3DSI_COMMENTSIZE_SHIFT) & D3DSI_COMMENTSIZE_MASK) | D3DSIO_COMMENT)
+#define D3DPS_END() 0xffff
+#define D3DVS_END() 0xffff
+#define D3DPRESENTFLAG_LOCKABLE_BACKBUFFER 0x01
+#define D3DPRESENTFLAG_DISCARD_DEPTHSTENCIL 0x02
+#define D3DPRESENTFLAG_DEVICECLIP 0x04
+#define D3DPRESENTFLAG_VIDEO 0x10
+#define D3DLOCK_READONLY 0x10
+#define D3DLOCK_NOSYSLOCK 0x800
+#define D3DLOCK_NOOVERWRITE 0x1000
+#define D3DLOCK_DISCARD 0x2000
+#define D3DLOCK_DONOTWAIT 0x4000
+#define D3DLOCK_NO_DIRTY_UPDATE 0x8000
+#define D3DISSUE_END 0x01
+#define D3DISSUE_BEGIN 0x02
+#define D3DGETDATA_FLUSH 0x01
+#define D3DRTYPECOUNT (D3DRTYPE_INDEXBUFFER+1)
+
+#define MAKEFOURCC(a,b,c,d) \
+ ((DWORD)(BYTE)(a) | ((DWORD)(BYTE)(b) << 8) | \
+ ((DWORD)(BYTE)(c) << 16) | ((DWORD)(BYTE)(d) << 24 ))
+
+typedef DWORD D3DCOLOR;
+
+typedef enum _D3DBACKBUFFER_TYPE {
+ D3DBACKBUFFER_TYPE_MONO = 0,
+ D3DBACKBUFFER_TYPE_LEFT = 1,
+ D3DBACKBUFFER_TYPE_RIGHT = 2,
+ D3DBACKBUFFER_TYPE_FORCE_DWORD = 0xffffffff
+} D3DBACKBUFFER_TYPE;
+
+typedef enum _D3DBASISTYPE {
+ D3DBASIS_BEZIER = 0,
+ D3DBASIS_BSPLINE = 1,
+ D3DBASIS_INTERPOLATE = 2,
+ D3DBASIS_FORCE_DWORD = 0xffffffff
+} D3DBASISTYPE;
+
+typedef enum _D3DBLEND {
+ D3DBLEND_ZERO = 1,
+ D3DBLEND_ONE = 2,
+ D3DBLEND_SRCCOLOR = 3,
+ D3DBLEND_INVSRCCOLOR = 4,
+ D3DBLEND_SRCALPHA = 5,
+ D3DBLEND_INVSRCALPHA = 6,
+ D3DBLEND_DESTALPHA = 7,
+ D3DBLEND_INVDESTALPHA = 8,
+ D3DBLEND_DESTCOLOR = 9,
+ D3DBLEND_INVDESTCOLOR = 10,
+ D3DBLEND_SRCALPHASAT = 11,
+ D3DBLEND_BOTHSRCALPHA = 12,
+ D3DBLEND_BOTHINVSRCALPHA = 13,
+ D3DBLEND_BLENDFACTOR = 14,
+ D3DBLEND_INVBLENDFACTOR = 15,
+ D3DBLEND_FORCE_DWORD = 0xffffffff
+} D3DBLEND;
+
+typedef enum _D3DBLENDOP {
+ D3DBLENDOP_ADD = 1,
+ D3DBLENDOP_SUBTRACT = 2,
+ D3DBLENDOP_REVSUBTRACT = 3,
+ D3DBLENDOP_MIN = 4,
+ D3DBLENDOP_MAX = 5,
+ D3DBLENDOP_FORCE_DWORD = 0x7fffffff
+} D3DBLENDOP;
+
+typedef enum _D3DCMPFUNC {
+ D3DCMP_NEVER = 1,
+ D3DCMP_LESS = 2,
+ D3DCMP_EQUAL = 3,
+ D3DCMP_LESSEQUAL = 4,
+ D3DCMP_GREATER = 5,
+ D3DCMP_NOTEQUAL = 6,
+ D3DCMP_GREATEREQUAL = 7,
+ D3DCMP_ALWAYS = 8,
+ D3DCMP_FORCE_DWORD = 0xffffffff
+} D3DCMPFUNC;
+
+typedef enum _D3DCUBEMAP_FACES {
+ D3DCUBEMAP_FACE_POSITIVE_X = 0,
+ D3DCUBEMAP_FACE_NEGATIVE_X = 1,
+ D3DCUBEMAP_FACE_POSITIVE_Y = 2,
+ D3DCUBEMAP_FACE_NEGATIVE_Y = 3,
+ D3DCUBEMAP_FACE_POSITIVE_Z = 4,
+ D3DCUBEMAP_FACE_NEGATIVE_Z = 5,
+ D3DCUBEMAP_FACE_FORCE_DWORD = 0xffffffff
+} D3DCUBEMAP_FACES;
+
+typedef enum _D3DCULL {
+ D3DCULL_NONE = 1,
+ D3DCULL_CW = 2,
+ D3DCULL_CCW = 3,
+ D3DCULL_FORCE_DWORD = 0xffffffff
+} D3DCULL;
+
+typedef enum _D3DDEBUGMONITORTOKENS {
+ D3DDMT_ENABLE = 0,
+ D3DDMT_DISABLE = 1,
+ D3DDMT_FORCE_DWORD = 0xffffffff
+} D3DDEBUGMONITORTOKENS;
+
+typedef enum _D3DDECLMETHOD
+{
+ D3DDECLMETHOD_DEFAULT = 0,
+ D3DDECLMETHOD_PARTIALU = 1,
+ D3DDECLMETHOD_PARTIALV = 2,
+ D3DDECLMETHOD_CROSSUV = 3,
+ D3DDECLMETHOD_UV = 4,
+ D3DDECLMETHOD_LOOKUP = 5,
+ D3DDECLMETHOD_LOOKUPPRESAMPLED = 6
+} D3DDECLMETHOD;
+
+typedef enum _D3DDECLTYPE
+{
+ D3DDECLTYPE_FLOAT1 = 0,
+ D3DDECLTYPE_FLOAT2 = 1,
+ D3DDECLTYPE_FLOAT3 = 2,
+ D3DDECLTYPE_FLOAT4 = 3,
+ D3DDECLTYPE_D3DCOLOR = 4,
+ D3DDECLTYPE_UBYTE4 = 5,
+ D3DDECLTYPE_SHORT2 = 6,
+ D3DDECLTYPE_SHORT4 = 7,
+ D3DDECLTYPE_UBYTE4N = 8,
+ D3DDECLTYPE_SHORT2N = 9,
+ D3DDECLTYPE_SHORT4N = 10,
+ D3DDECLTYPE_USHORT2N = 11,
+ D3DDECLTYPE_USHORT4N = 12,
+ D3DDECLTYPE_UDEC3 = 13,
+ D3DDECLTYPE_DEC3N = 14,
+ D3DDECLTYPE_FLOAT16_2 = 15,
+ D3DDECLTYPE_FLOAT16_4 = 16,
+ D3DDECLTYPE_UNUSED = 17,
+} D3DDECLTYPE;
+
+typedef enum _D3DDECLUSAGE
+{
+ D3DDECLUSAGE_POSITION = 0,
+ D3DDECLUSAGE_BLENDWEIGHT = 1,
+ D3DDECLUSAGE_BLENDINDICES = 2,
+ D3DDECLUSAGE_NORMAL = 3,
+ D3DDECLUSAGE_PSIZE = 4,
+ D3DDECLUSAGE_TEXCOORD = 5,
+ D3DDECLUSAGE_TANGENT = 6,
+ D3DDECLUSAGE_BINORMAL = 7,
+ D3DDECLUSAGE_TESSFACTOR = 8,
+ D3DDECLUSAGE_POSITIONT = 9,
+ D3DDECLUSAGE_COLOR = 10,
+ D3DDECLUSAGE_FOG = 11,
+ D3DDECLUSAGE_DEPTH = 12,
+ D3DDECLUSAGE_SAMPLE = 13
+} D3DDECLUSAGE;
+
+typedef enum _D3DDEGREETYPE {
+ D3DDEGREE_LINEAR = 1,
+ D3DDEGREE_QUADRATIC = 2,
+ D3DDEGREE_CUBIC = 3,
+ D3DDEGREE_QUINTIC = 5,
+ D3DDEGREE_FORCE_DWORD = 0xffffffff,
+} D3DDEGREETYPE;
+
+typedef enum _D3DDEVTYPE {
+ D3DDEVTYPE_HAL = 1,
+ D3DDEVTYPE_REF = 2,
+ D3DDEVTYPE_SW = 3,
+ D3DDEVTYPE_FORCE_DWORD = 0xffffffff
+} D3DDEVTYPE;
+
+typedef enum _D3DFILLMODE {
+ D3DFILL_POINT = 1,
+ D3DFILL_WIREFRAME = 2,
+ D3DFILL_SOLID = 3,
+ D3DFILL_FORCE_DWORD = 0xffffffff
+} D3DFILLMODE;
+
+typedef enum _D3DFOGMODE {
+ D3DFOG_NONE = 0,
+ D3DFOG_EXP = 1,
+ D3DFOG_EXP2 = 2,
+ D3DFOG_LINEAR = 3,
+ D3DFOG_FORCE_DWORD = 0xffffffff
+} D3DFOGMODE;
+
+typedef enum _D3DFORMAT {
+ D3DFMT_UNKNOWN = 0,
+ D3DFMT_R8G8B8 = 20,
+ D3DFMT_A8R8G8B8 = 21,
+ D3DFMT_X8R8G8B8 = 22,
+ D3DFMT_R5G6B5 = 23,
+ D3DFMT_X1R5G5B5 = 24,
+ D3DFMT_A1R5G5B5 = 25,
+ D3DFMT_A4R4G4B4 = 26,
+ D3DFMT_R3G3B2 = 27,
+ D3DFMT_A8 = 28,
+ D3DFMT_A8R3G3B2 = 29,
+ D3DFMT_X4R4G4B4 = 30,
+ D3DFMT_A2B10G10R10 = 31,
+ D3DFMT_A8B8G8R8 = 32,
+ D3DFMT_X8B8G8R8 = 33,
+ D3DFMT_G16R16 = 34,
+ D3DFMT_A2R10G10B10 = 35,
+ D3DFMT_A16B16G16R16 = 36,
+ D3DFMT_A8P8 = 40,
+ D3DFMT_P8 = 41,
+ D3DFMT_L8 = 50,
+ D3DFMT_A8L8 = 51,
+ D3DFMT_A4L4 = 52,
+ D3DFMT_V8U8 = 60,
+ D3DFMT_L6V5U5 = 61,
+ D3DFMT_X8L8V8U8 = 62,
+ D3DFMT_Q8W8V8U8 = 63,
+ D3DFMT_V16U16 = 64,
+ D3DFMT_A2W10V10U10 = 67,
+ D3DFMT_UYVY = MAKEFOURCC('U','Y','V','Y'),
+ D3DFMT_R8G8_B8G8 = MAKEFOURCC('R','G','B','G'),
+ D3DFMT_YUY2 = MAKEFOURCC('Y','U','Y','2'),
+ D3DFMT_G8R8_G8B8 = MAKEFOURCC('G','R','G','B'),
+ D3DFMT_DXT1 = MAKEFOURCC('D','X','T','1'),
+ D3DFMT_DXT2 = MAKEFOURCC('D','X','T','2'),
+ D3DFMT_DXT3 = MAKEFOURCC('D','X','T','3'),
+ D3DFMT_DXT4 = MAKEFOURCC('D','X','T','4'),
+ D3DFMT_DXT5 = MAKEFOURCC('D','X','T','5'),
+ D3DFMT_D16_LOCKABLE = 70,
+ D3DFMT_D32 = 71,
+ D3DFMT_D15S1 = 73,
+ D3DFMT_D24S8 = 75,
+ D3DFMT_D24X8 = 77,
+ D3DFMT_D24X4S4 = 79,
+ D3DFMT_D16 = 80,
+ D3DFMT_L16 = 81,
+ D3DFMT_D32F_LOCKABLE = 82,
+ D3DFMT_D24FS8 = 83,
+ D3DFMT_VERTEXDATA = 100,
+ D3DFMT_INDEX16 = 101,
+ D3DFMT_INDEX32 = 102,
+ D3DFMT_Q16W16V16U16 = 110,
+ D3DFMT_MULTI2_ARGB8 = MAKEFOURCC('M','E','T','1'),
+ D3DFMT_R16F = 111,
+ D3DFMT_G16R16F = 112,
+ D3DFMT_A16B16G16R16F = 113,
+ D3DFMT_R32F = 114,
+ D3DFMT_G32R32F = 115,
+ D3DFMT_A32B32G32R32F = 116,
+ D3DFMT_CxV8U8 = 117,
+ D3DFMT_FORCE_DWORD = 0xffffffff
+} D3DFORMAT;
+
+typedef enum _D3DLIGHTTYPE {
+ D3DLIGHT_POINT = 1,
+ D3DLIGHT_SPOT = 2,
+ D3DLIGHT_DIRECTIONAL = 3,
+ D3DLIGHT_FORCE_DWORD = 0xffffffff
+} D3DLIGHTTYPE;
+
+typedef enum _D3DMATERIALCOLORSOURCE
+{
+ D3DMCS_MATERIAL = 0,
+ D3DMCS_COLOR1 = 1,
+ D3DMCS_COLOR2 = 2,
+ D3DMCS_FORCE_DWORD = 0xffffffff
+} D3DMATERIALCOLORSOURCE;
+
+typedef enum _D3DMULTISAMPLE_TYPE {
+ D3DMULTISAMPLE_NONE = 0,
+ D3DMULTISAMPLE_NONMASKABLE = 1,
+ D3DMULTISAMPLE_2_SAMPLES = 2,
+ D3DMULTISAMPLE_3_SAMPLES = 3,
+ D3DMULTISAMPLE_4_SAMPLES = 4,
+ D3DMULTISAMPLE_5_SAMPLES = 5,
+ D3DMULTISAMPLE_6_SAMPLES = 6,
+ D3DMULTISAMPLE_7_SAMPLES = 7,
+ D3DMULTISAMPLE_8_SAMPLES = 8,
+ D3DMULTISAMPLE_9_SAMPLES = 9,
+ D3DMULTISAMPLE_10_SAMPLES = 10,
+ D3DMULTISAMPLE_11_SAMPLES = 11,
+ D3DMULTISAMPLE_12_SAMPLES = 12,
+ D3DMULTISAMPLE_13_SAMPLES = 13,
+ D3DMULTISAMPLE_14_SAMPLES = 14,
+ D3DMULTISAMPLE_15_SAMPLES = 15,
+ D3DMULTISAMPLE_16_SAMPLES = 16,
+ D3DMULTISAMPLE_FORCE_DWORD = 0xffffffff
+} D3DMULTISAMPLE_TYPE;
+
+typedef enum _D3DORDERTYPE {
+ D3DORDER_LINEAR = 1,
+ D3DORDER_QUADRATIC = 2,
+ D3DORDER_CUBIC = 3,
+ D3DORDER_QUINTIC = 5,
+ D3DORDER_FORCE_DWORD = 0xffffffff
+} D3DORDERTYPE;
+
+typedef enum _D3DPATCHEDGESTYLE
+{
+ D3DPATCHEDGE_DISCRETE = 0,
+ D3DPATCHEDGE_CONTINUOUS = 1,
+ D3DPATCHEDGE_FORCE_DWORD = 0xffffffff
+} D3DPATCHEDGESTYLE;
+
+typedef enum _D3DPOOL {
+ D3DPOOL_DEFAULT = 0,
+ D3DPOOL_MANAGED = 1,
+ D3DPOOL_SYSTEMMEM = 2,
+ D3DPOOL_SCRATCH = 3,
+ D3DPOOL_FORCE_DWORD = 0xffffffff
+} D3DPOOL;
+
+typedef enum _D3DPRIMITIVETYPE {
+ D3DPT_POINTLIST = 1,
+ D3DPT_LINELIST = 2,
+ D3DPT_LINESTRIP = 3,
+ D3DPT_TRIANGLELIST = 4,
+ D3DPT_TRIANGLESTRIP = 5,
+ D3DPT_TRIANGLEFAN = 6,
+ D3DPT_FORCE_DWORD = 0xffffffff
+} D3DPRIMITIVETYPE;
+
+typedef enum _D3DQUERYTYPE {
+ D3DQUERYTYPE_VCACHE = 4,
+ D3DQUERYTYPE_RESOURCEMANAGER = 5,
+ D3DQUERYTYPE_VERTEXSTATS = 6,
+ D3DQUERYTYPE_EVENT = 8,
+ D3DQUERYTYPE_OCCLUSION = 9
+} D3DQUERYTYPE;
+
+typedef enum _D3DRENDERSTATETYPE {
+ D3DRS_ZENABLE = 7,
+ D3DRS_FILLMODE = 8,
+ D3DRS_SHADEMODE = 9,
+ D3DRS_ZWRITEENABLE = 14,
+ D3DRS_ALPHATESTENABLE = 15,
+ D3DRS_LASTPIXEL = 16,
+ D3DRS_SRCBLEND = 19,
+ D3DRS_DESTBLEND = 20,
+ D3DRS_CULLMODE = 22,
+ D3DRS_ZFUNC = 23,
+ D3DRS_ALPHAREF = 24,
+ D3DRS_ALPHAFUNC = 25,
+ D3DRS_DITHERENABLE = 26,
+ D3DRS_ALPHABLENDENABLE = 27,
+ D3DRS_FOGENABLE = 28,
+ D3DRS_SPECULARENABLE = 29,
+ D3DRS_FOGCOLOR = 34,
+ D3DRS_FOGTABLEMODE = 35,
+ D3DRS_FOGSTART = 36,
+ D3DRS_FOGEND = 37,
+ D3DRS_FOGDENSITY = 38,
+ D3DRS_RANGEFOGENABLE = 48,
+ D3DRS_STENCILENABLE = 52,
+ D3DRS_STENCILFAIL = 53,
+ D3DRS_STENCILZFAIL = 54,
+ D3DRS_STENCILPASS = 55,
+ D3DRS_STENCILFUNC = 56,
+ D3DRS_STENCILREF = 57,
+ D3DRS_STENCILMASK = 58,
+ D3DRS_STENCILWRITEMASK = 59,
+ D3DRS_TEXTUREFACTOR = 60,
+ D3DRS_WRAP0 = 128,
+ D3DRS_WRAP1 = 129,
+ D3DRS_WRAP2 = 130,
+ D3DRS_WRAP3 = 131,
+ D3DRS_WRAP4 = 132,
+ D3DRS_WRAP5 = 133,
+ D3DRS_WRAP6 = 134,
+ D3DRS_WRAP7 = 135,
+ D3DRS_CLIPPING = 136,
+ D3DRS_LIGHTING = 137,
+ D3DRS_AMBIENT = 139,
+ D3DRS_FOGVERTEXMODE = 140,
+ D3DRS_COLORVERTEX = 141,
+ D3DRS_LOCALVIEWER = 142,
+ D3DRS_NORMALIZENORMALS = 143,
+ D3DRS_DIFFUSEMATERIALSOURCE = 145,
+ D3DRS_SPECULARMATERIALSOURCE = 146,
+ D3DRS_AMBIENTMATERIALSOURCE = 147,
+ D3DRS_EMISSIVEMATERIALSOURCE = 148,
+ D3DRS_VERTEXBLEND = 151,
+ D3DRS_CLIPPLANEENABLE = 152,
+ D3DRS_POINTSIZE = 154,
+ D3DRS_POINTSIZE_MIN = 155,
+ D3DRS_POINTSPRITEENABLE = 156,
+ D3DRS_POINTSCALEENABLE = 157,
+ D3DRS_POINTSCALE_A = 158,
+ D3DRS_POINTSCALE_B = 159,
+ D3DRS_POINTSCALE_C = 160,
+ D3DRS_MULTISAMPLEANTIALIAS = 161,
+ D3DRS_MULTISAMPLEMASK = 162,
+ D3DRS_PATCHEDGESTYLE = 163,
+ D3DRS_DEBUGMONITORTOKEN = 165,
+ D3DRS_POINTSIZE_MAX = 166,
+ D3DRS_INDEXEDVERTEXBLENDENABLE = 167,
+ D3DRS_COLORWRITEENABLE = 168,
+ D3DRS_TWEENFACTOR = 170,
+ D3DRS_BLENDOP = 171,
+ D3DRS_POSITIONDEGREE = 172,
+ D3DRS_NORMALDEGREE = 173,
+ D3DRS_SCISSORTESTENABLE = 174,
+ D3DRS_SLOPESCALEDEPTHBIAS = 175,
+ D3DRS_ANTIALIASEDLINEENABLE = 176,
+ D3DRS_MINTESSELLATIONLEVEL = 178,
+ D3DRS_MAXTESSELLATIONLEVEL = 179,
+ D3DRS_ADAPTIVETESS_X = 180,
+ D3DRS_ADAPTIVETESS_Y = 181,
+ D3DRS_ADAPTIVETESS_Z = 182,
+ D3DRS_ADAPTIVETESS_W = 183,
+ D3DRS_ENABLEADAPTIVETESSELLATION = 184,
+ D3DRS_TWOSIDEDSTENCILMODE = 185,
+ D3DRS_CCW_STENCILFAIL = 186,
+ D3DRS_CCW_STENCILZFAIL = 187,
+ D3DRS_CCW_STENCILPASS = 188,
+ D3DRS_CCW_STENCILFUNC = 189,
+ D3DRS_COLORWRITEENABLE1 = 190,
+ D3DRS_COLORWRITEENABLE2 = 191,
+ D3DRS_COLORWRITEENABLE3 = 192,
+ D3DRS_BLENDFACTOR = 193,
+ D3DRS_SRGBWRITEENABLE = 194,
+ D3DRS_DEPTHBIAS = 195,
+ D3DRS_WRAP8 = 198,
+ D3DRS_WRAP9 = 199,
+ D3DRS_WRAP10 = 200,
+ D3DRS_WRAP11 = 201,
+ D3DRS_WRAP12 = 202,
+ D3DRS_WRAP13 = 203,
+ D3DRS_WRAP14 = 204,
+ D3DRS_WRAP15 = 205,
+ D3DRS_SEPARATEALPHABLENDENABLE = 206,
+ D3DRS_SRCBLENDALPHA = 207,
+ D3DRS_DESTBLENDALPHA = 208,
+ D3DRS_BLENDOPALPHA = 209,
+ D3DRS_FORCE_DWORD = 0xffffffff
+} D3DRENDERSTATETYPE;
+
+typedef enum _D3DRESOURCETYPE {
+ D3DRTYPE_SURFACE = 1,
+ D3DRTYPE_VOLUME = 2,
+ D3DRTYPE_TEXTURE = 3,
+ D3DRTYPE_VOLUMETEXTURE = 4,
+ D3DRTYPE_CUBETEXTURE = 5,
+ D3DRTYPE_VERTEXBUFFER = 6,
+ D3DRTYPE_INDEXBUFFER = 7,
+ D3DRTYPE_FORCE_DWORD = 0xffffffff
+} D3DRESOURCETYPE;
+
+typedef enum _D3DSAMPLER_TEXTURE_TYPE
+{
+ D3DSTT_UNKNOWN = 0 << D3DSP_TEXTURETYPE_SHIFT,
+ D3DSTT_2D = 2 << D3DSP_TEXTURETYPE_SHIFT,
+ D3DSTT_CUBE = 3 << D3DSP_TEXTURETYPE_SHIFT,
+ D3DSTT_VOLUME = 4 << D3DSP_TEXTURETYPE_SHIFT,
+ D3DSTT_FORCE_DWORD = 0xffffffff
+} D3DSAMPLER_TEXTURE_TYPE;
+
+typedef enum _D3DSAMPLERSTATETYPE {
+ D3DSAMP_ADDRESSU = 1,
+ D3DSAMP_ADDRESSV = 2,
+ D3DSAMP_ADDRESSW = 3,
+ D3DSAMP_BORDERCOLOR = 4,
+ D3DSAMP_MAGFILTER = 5,
+ D3DSAMP_MINFILTER = 6,
+ D3DSAMP_MIPFILTER = 7,
+ D3DSAMP_MIPMAPLODBIAS = 8,
+ D3DSAMP_MAXMIPLEVEL = 9,
+ D3DSAMP_MAXANISOTROPY = 10,
+ D3DSAMP_SRGBTEXTURE = 11,
+ D3DSAMP_ELEMENTINDEX = 12,
+ D3DSAMP_DMAPOFFSET = 13,
+ D3DSAMP_FORCE_DWORD = 0xffffffff,
+} D3DSAMPLERSTATETYPE;
+
+typedef enum _D3DSHADEMODE {
+ D3DSHADE_FLAT = 1,
+ D3DSHADE_GOURAUD = 2,
+ D3DSHADE_PHONG = 3,
+ D3DSHADE_FORCE_DWORD = 0xffffffff
+} D3DSHADEMODE;
+
+typedef enum _D3DSHADER_ADDRESSMODE_TYPE
+{
+ D3DSHADER_ADDRMODE_ABSOLUTE = (0 << D3DSHADER_ADDRESSMODE_SHIFT),
+ D3DSHADER_ADDRMODE_RELATIVE = (1 << D3DSHADER_ADDRESSMODE_SHIFT),
+ D3DSHADER_ADDRMODE_FORCE_DWORD = 0xffffffff
+} D3DSHADER_ADDRESSMODE_TYPE;
+
+typedef enum _D3DSHADER_COMPARISON
+{
+ D3DSPC_RESERVED0 = 0,
+ D3DSPC_GT = 1,
+ D3DSPC_EQ = 2,
+ D3DSPC_GE = 3,
+ D3DSPC_LT = 4,
+ D3DSPC_NE = 5,
+ D3DSPC_LE = 6,
+ D3DSPC_RESERVED1 = 7
+} D3DSHADER_COMPARISON;
+
+typedef enum _D3DSHADER_INSTRUCTION_OPCODE_TYPE
+{
+ D3DSIO_NOP = 0,
+ D3DSIO_MOV = 1,
+ D3DSIO_ADD = 2,
+ D3DSIO_SUB = 3,
+ D3DSIO_MAD = 4,
+ D3DSIO_MUL = 5,
+ D3DSIO_RCP = 6,
+ D3DSIO_RSQ = 7,
+ D3DSIO_DP3 = 8,
+ D3DSIO_DP4 = 9,
+ D3DSIO_MIN = 10,
+ D3DSIO_MAX = 11,
+ D3DSIO_SLT = 12,
+ D3DSIO_SGE = 13,
+ D3DSIO_EXP = 14,
+ D3DSIO_LOG = 15,
+ D3DSIO_LIT = 16,
+ D3DSIO_DST = 17,
+ D3DSIO_LRP = 18,
+ D3DSIO_FRC = 19,
+ D3DSIO_M4x4 = 20,
+ D3DSIO_M4x3 = 21,
+ D3DSIO_M3x4 = 22,
+ D3DSIO_M3x3 = 23,
+ D3DSIO_M3x2 = 24,
+ D3DSIO_CALL = 25,
+ D3DSIO_CALLNZ = 26,
+ D3DSIO_LOOP = 27,
+ D3DSIO_RET = 28,
+ D3DSIO_ENDLOOP = 29,
+ D3DSIO_LABEL = 30,
+ D3DSIO_DCL = 31,
+ D3DSIO_POW = 32,
+ D3DSIO_CRS = 33,
+ D3DSIO_SGN = 34,
+ D3DSIO_ABS = 35,
+ D3DSIO_NRM = 36,
+ D3DSIO_SINCOS = 37,
+ D3DSIO_REP = 38,
+ D3DSIO_ENDREP = 39,
+ D3DSIO_IF = 40,
+ D3DSIO_IFC = 41,
+ D3DSIO_ELSE = 42,
+ D3DSIO_ENDIF = 43,
+ D3DSIO_BREAK = 44,
+ D3DSIO_BREAKC = 45,
+ D3DSIO_MOVA = 46,
+ D3DSIO_DEFB = 47,
+ D3DSIO_DEFI = 48,
+ D3DSIO_TEXCOORD = 64,
+ D3DSIO_TEXKILL = 65,
+ D3DSIO_TEX = 66,
+ D3DSIO_TEXBEM = 67,
+ D3DSIO_TEXBEML = 68,
+ D3DSIO_TEXREG2AR = 69,
+ D3DSIO_TEXREG2GB = 70,
+ D3DSIO_TEXM3x2PAD = 71,
+ D3DSIO_TEXM3x2TEX = 72,
+ D3DSIO_TEXM3x3PAD = 73,
+ D3DSIO_TEXM3x3TEX = 74,
+ D3DSIO_RESERVED0 = 75,
+ D3DSIO_TEXM3x3SPEC = 76,
+ D3DSIO_TEXM3x3VSPEC = 77,
+ D3DSIO_EXPP = 78,
+ D3DSIO_LOGP = 79,
+ D3DSIO_CND = 80,
+ D3DSIO_DEF = 81,
+ D3DSIO_TEXREG2RGB = 82,
+ D3DSIO_TEXDP3TEX = 83,
+ D3DSIO_TEXM3x2DEPTH = 84,
+ D3DSIO_TEXDP3 = 85,
+ D3DSIO_TEXM3x3 = 86,
+ D3DSIO_TEXDEPTH = 87,
+ D3DSIO_CMP = 88,
+ D3DSIO_BEM = 89,
+ D3DSIO_DP2ADD = 90,
+ D3DSIO_DSX = 91,
+ D3DSIO_DSY = 92,
+ D3DSIO_TEXLDD = 93,
+ D3DSIO_SETP = 94,
+ D3DSIO_TEXLDL = 95,
+ D3DSIO_BREAKP = 96,
+ D3DSIO_PHASE = 0xfffd,
+ D3DSIO_COMMENT = 0xfffe,
+ D3DSIO_END = 0xffff,
+ D3DSIO_FORCE_DWORD = 0xffffffff
+} D3DSHADER_INSTRUCTION_OPCODE_TYPE;
+
+typedef enum _D3DSHADER_MISCTYPE_OFFSETS
+{
+ D3DSMO_POSITION = 0,
+ D3DSMO_FACE = 1
+} D3DSHADER_MISCTYPE_OFFSETS;
+
+typedef enum _D3DSHADER_PARAM_REGISTER_TYPE
+{
+ D3DSPR_TEMP = 0,
+ D3DSPR_INPUT = 1,
+ D3DSPR_CONST = 2,
+ D3DSPR_ADDR = 3,
+ D3DSPR_TEXTURE = 3,
+ D3DSPR_RASTOUT = 4,
+ D3DSPR_ATTROUT = 5,
+ D3DSPR_TEXCRDOUT = 6,
+ D3DSPR_OUTPUT = 6,
+ D3DSPR_CONSTINT = 7,
+ D3DSPR_COLOROUT = 8,
+ D3DSPR_DEPTHOUT = 9,
+ D3DSPR_SAMPLER = 10,
+ D3DSPR_CONST2 = 11,
+ D3DSPR_CONST3 = 12,
+ D3DSPR_CONST4 = 13,
+ D3DSPR_CONSTBOOL = 14,
+ D3DSPR_LOOP = 15,
+ D3DSPR_TEMPFLOAT16 = 16,
+ D3DSPR_MISCTYPE = 17,
+ D3DSPR_LABEL = 18,
+ D3DSPR_PREDICATE = 19,
+ D3DSPR_FORCE_DWORD = 0xffffffff
+} D3DSHADER_PARAM_REGISTER_TYPE;
+
+typedef enum _D3DSHADER_PARAM_SRCMOD_TYPE
+{
+ D3DSPSM_NONE = 0 << D3DSP_SRCMOD_SHIFT,
+ D3DSPSM_NEG = 1 << D3DSP_SRCMOD_SHIFT,
+ D3DSPSM_BIAS = 2 << D3DSP_SRCMOD_SHIFT,
+ D3DSPSM_BIASNEG = 3 << D3DSP_SRCMOD_SHIFT,
+ D3DSPSM_SIGN = 4 << D3DSP_SRCMOD_SHIFT,
+ D3DSPSM_SIGNNEG = 5 << D3DSP_SRCMOD_SHIFT,
+ D3DSPSM_COMP = 6 << D3DSP_SRCMOD_SHIFT,
+ D3DSPSM_X2 = 7 << D3DSP_SRCMOD_SHIFT,
+ D3DSPSM_X2NEG = 8 << D3DSP_SRCMOD_SHIFT,
+ D3DSPSM_DZ = 9 << D3DSP_SRCMOD_SHIFT,
+ D3DSPSM_DW = 10 << D3DSP_SRCMOD_SHIFT,
+ D3DSPSM_ABS = 11 << D3DSP_SRCMOD_SHIFT,
+ D3DSPSM_ABSNEG = 12 << D3DSP_SRCMOD_SHIFT,
+ D3DSPSM_NOT = 13 << D3DSP_SRCMOD_SHIFT,
+ D3DSPSM_FORCE_DWORD = 0xffffffff
+} D3DSHADER_PARAM_SRCMOD_TYPE;
+
+typedef enum _D3DVS_ADDRESSMODE_TYPE
+{
+ D3DVS_ADDRMODE_ABSOLUTE = (0 << D3DVS_ADDRESSMODE_SHIFT),
+ D3DVS_ADDRMODE_RELATIVE = (1 << D3DVS_ADDRESSMODE_SHIFT),
+ D3DVS_ADDRMODE_FORCE_DWORD = 0xffffffff
+} D3DVS_ADDRESSMODE_TYPE;
+
+typedef enum _D3DVS_RASTOUT_OFFSETS
+{
+ D3DSRO_POSITION = 0,
+ D3DSRO_FOG = 1,
+ D3DSRO_POINT_SIZE = 2,
+ D3DSRO_FORCE_DWORD = 0xffffffff
+} D3DVS_RASTOUT_OFFSETS;
+
+typedef enum _D3DSTENCILOP {
+ D3DSTENCILOP_KEEP = 1,
+ D3DSTENCILOP_ZERO = 2,
+ D3DSTENCILOP_REPLACE = 3,
+ D3DSTENCILOP_INCRSAT = 4,
+ D3DSTENCILOP_DECRSAT = 5,
+ D3DSTENCILOP_INVERT = 6,
+ D3DSTENCILOP_INCR = 7,
+ D3DSTENCILOP_DECR = 8,
+ D3DSTENCILOP_FORCE_DWORD = 0x7fffffff
+} D3DSTENCILOP;
+
+typedef enum _D3DSTATEBLOCKTYPE {
+ D3DSBT_ALL = 1,
+ D3DSBT_PIXELSTATE = 2,
+ D3DSBT_VERTEXSTATE = 3,
+ D3DSBT_FORCE_DWORD = 0xffffffff
+} D3DSTATEBLOCKTYPE;
+
+typedef enum _D3DSWAPEFFECT {
+ D3DSWAPEFFECT_DISCARD = 1,
+ D3DSWAPEFFECT_FLIP = 2,
+ D3DSWAPEFFECT_COPY = 3,
+ D3DSWAPEFFECT_COPY_VSYNC = 4,
+ D3DSWAPEFFECT_FORCE_DWORD = 0xffffffff
+} D3DSWAPEFFECT;
+
+typedef enum _D3DTEXTUREADDRESS {
+ D3DTADDRESS_WRAP = 1,
+ D3DTADDRESS_MIRROR = 2,
+ D3DTADDRESS_CLAMP = 3,
+ D3DTADDRESS_BORDER = 4,
+ D3DTADDRESS_MIRRORONCE = 5,
+ D3DTADDRESS_FORCE_DWORD = 0xffffffff
+} D3DTEXTUREADDRESS;
+
+typedef enum _D3DTEXTUREFILTERTYPE {
+ D3DTEXF_NONE = 0,
+ D3DTEXF_POINT = 1,
+ D3DTEXF_LINEAR = 2,
+ D3DTEXF_ANISOTROPIC = 3,
+ D3DTEXF_PYRAMIDALQUAD = 6,
+ D3DTEXF_GAUSSIANQUAD = 7,
+ D3DTEXF_FORCE_DWORD = 0xffffffff
+} D3DTEXTUREFILTERTYPE;
+
+typedef enum _D3DTEXTURESTAGESTATETYPE {
+ D3DTSS_COLOROP = 1,
+ D3DTSS_COLORARG1 = 2,
+ D3DTSS_COLORARG2 = 3,
+ D3DTSS_ALPHAOP = 4,
+ D3DTSS_ALPHAARG1 = 5,
+ D3DTSS_ALPHAARG2 = 6,
+ D3DTSS_BUMPENVMAT00 = 7,
+ D3DTSS_BUMPENVMAT01 = 8,
+ D3DTSS_BUMPENVMAT10 = 9,
+ D3DTSS_BUMPENVMAT11 = 10,
+ D3DTSS_TEXCOORDINDEX = 11,
+ D3DTSS_BUMPENVLSCALE = 22,
+ D3DTSS_BUMPENVLOFFSET = 23,
+ D3DTSS_TEXTURETRANSFORMFLAGS = 24,
+ D3DTSS_ADDRESSW = 25,
+ D3DTSS_COLORARG0 = 26,
+ D3DTSS_ALPHAARG0 = 27,
+ D3DTSS_RESULTARG = 28,
+ D3DTSS_CONSTANT = 32,
+ D3DTSS_FORCE_DWORD = 0xffffffff
+} D3DTEXTURESTAGESTATETYPE;
+
+typedef enum _D3DTEXTUREOP {
+ D3DTOP_DISABLE = 1,
+ D3DTOP_SELECTARG1 = 2,
+ D3DTOP_SELECTARG2 = 3,
+ D3DTOP_MODULATE = 4,
+ D3DTOP_MODULATE2X = 5,
+ D3DTOP_MODULATE4X = 6,
+ D3DTOP_ADD = 7,
+ D3DTOP_ADDSIGNED = 8,
+ D3DTOP_ADDSIGNED2X = 9,
+ D3DTOP_SUBTRACT = 10,
+ D3DTOP_ADDSMOOTH = 11,
+ D3DTOP_BLENDDIFFUSEALPHA = 12,
+ D3DTOP_BLENDTEXTUREALPHA = 13,
+ D3DTOP_BLENDFACTORALPHA = 14,
+ D3DTOP_BLENDTEXTUREALPHAPM = 15,
+ D3DTOP_BLENDCURRENTALPHA = 16,
+ D3DTOP_PREMODULATE = 17,
+ D3DTOP_MODULATEALPHA_ADDCOLOR = 18,
+ D3DTOP_MODULATECOLOR_ADDALPHA = 19,
+ D3DTOP_MODULATEINVALPHA_ADDCOLOR = 20,
+ D3DTOP_MODULATEINVCOLOR_ADDALPHA = 21,
+ D3DTOP_BUMPENVMAP = 22,
+ D3DTOP_BUMPENVMAPLUMINANCE = 23,
+ D3DTOP_DOTPRODUCT3 = 24,
+ D3DTOP_MULTIPLYADD = 25,
+ D3DTOP_LERP = 26,
+ D3DTOP_FORCE_DWORD = 0xffffffff,
+} D3DTEXTUREOP;
+
+typedef enum _D3DTEXTURETRANSFORMFLAGS {
+ D3DTTFF_DISABLE = 0,
+ D3DTTFF_COUNT1 = 1,
+ D3DTTFF_COUNT2 = 2,
+ D3DTTFF_COUNT3 = 3,
+ D3DTTFF_COUNT4 = 4,
+ D3DTTFF_PROJECTED = 256,
+ D3DTTFF_FORCE_DWORD = 0xffffffff,
+} D3DTEXTURETRANSFORMFLAGS;
+
+typedef enum _D3DTRANSFORMSTATETYPE {
+ D3DTS_VIEW = 2,
+ D3DTS_PROJECTION = 3,
+ D3DTS_TEXTURE0 = 16,
+ D3DTS_TEXTURE1 = 17,
+ D3DTS_TEXTURE2 = 18,
+ D3DTS_TEXTURE3 = 19,
+ D3DTS_TEXTURE4 = 20,
+ D3DTS_TEXTURE5 = 21,
+ D3DTS_TEXTURE6 = 22,
+ D3DTS_TEXTURE7 = 23,
+ D3DTS_FORCE_DWORD = 0xffffffff
+} D3DTRANSFORMSTATETYPE;
+
+typedef enum _D3DVERTEXBLENDFLAGS
+{
+ D3DVBF_DISABLE = 0,
+ D3DVBF_1WEIGHTS = 1,
+ D3DVBF_2WEIGHTS = 2,
+ D3DVBF_3WEIGHTS = 3,
+ D3DVBF_TWEENING = 255,
+ D3DVBF_0WEIGHTS = 256,
+ D3DVBF_FORCE_DWORD = 0xffffffff
+} D3DVERTEXBLENDFLAGS;
+
+typedef enum _D3DZBUFFERTYPE {
+ D3DZB_FALSE = 0,
+ D3DZB_TRUE = 1,
+ D3DZB_USEW = 2,
+ D3DZB_FORCE_DWORD = 0xffffffff
+} D3DZBUFFERTYPE;
+
+typedef struct _D3DADAPTER_IDENTIFIER9 {
+ char Driver[MAX_DEVICE_IDENTIFIER_STRING];
+ char Description[MAX_DEVICE_IDENTIFIER_STRING];
+ char DeviceName[32];
+ LARGE_INTEGER DriverVersion;
+ DWORD VendorId;
+ DWORD DeviceId;
+ DWORD SubSysId;
+ DWORD Revision;
+ GUID DeviceIdentifier;
+ DWORD WHQLLevel;
+} D3DADAPTER_IDENTIFIER9;
+
+typedef struct _D3DBOX {
+ UINT Left;
+ UINT Top;
+ UINT Right;
+ UINT Bottom;
+ UINT Front;
+ UINT Back;
+} D3DBOX;
+
+typedef struct _D3DCLIPSTATUS9 {
+ DWORD ClipUnion;
+ DWORD ClipIntersection;
+} D3DCLIPSTATUS9;
+
+typedef struct _D3DCOLORVALUE {
+ float r;
+ float g;
+ float b;
+ float a;
+} D3DCOLORVALUE;
+
+typedef struct _D3DRESOURCESTATS
+{
+ BOOL bThrashing;
+ DWORD ApproxBytesDownloaded;
+ DWORD NumEvicts;
+ DWORD NumVidCreates;
+ DWORD LastPri;
+ DWORD NumUsed;
+ DWORD NumUsedInVidMem;
+ DWORD WorkingSet;
+ DWORD WorkingSetBytes;
+ DWORD TotalManaged;
+ DWORD TotalBytes;
+} D3DRESOURCESTATS;
+
+typedef struct _D3DDEVICE_CREATION_PARAMETERS {
+ UINT AdapterOrdinal;
+ D3DDEVTYPE DeviceType;
+ HWND hFocusWindow;
+ DWORD BehaviorFlags;
+} D3DDEVICE_CREATION_PARAMETERS;
+
+typedef struct _D3DDEVINFO_RESOURCEMANAGER {
+ D3DRESOURCESTATS stats[D3DRTYPECOUNT];
+} D3DDEVINFO_RESOURCEMANAGER, *LPD3DDEVINFO_RESOURCEMANAGER;
+
+typedef struct _D3DDEVINFO_D3DVERTEXSTATS {
+ DWORD NumRenderedTriangles;
+ DWORD NumExtraClippingTriangles;
+} D3DDEVINFO_D3DVERTEXSTATS, *LPD3DDEVINFO_D3DVERTEXSTATS;
+
+typedef struct _D3DDEVINFO_VCACHE {
+ DWORD Pattern;
+ DWORD OptMethod;
+ DWORD CacheSize;
+ DWORD MagicNumber;
+} D3DDEVINFO_VCACHE, *LPD3DDEVINFO_VCACHE;
+
+typedef struct _D3DDISPLAYMODE {
+ UINT Width;
+ UINT Height;
+ UINT RefreshRate;
+ D3DFORMAT Format;
+} D3DDISPLAYMODE;
+
+typedef struct _D3DGAMMARAMP {
+ WORD red[256];
+ WORD green[256];
+ WORD blue[256];
+} D3DGAMMARAMP;
+
+typedef struct _D3DINDEXBUFFER_DESC {
+ D3DFORMAT Format;
+ D3DRESOURCETYPE Type;
+ DWORD Usage;
+ D3DPOOL Pool;
+ UINT Size;
+} D3DINDEXBUFFER_DESC;
+
+typedef struct _D3DVECTOR {
+ float x;
+ float y;
+ float z;
+} D3DVECTOR;
+
+typedef struct _D3DLIGHT9 {
+ D3DLIGHTTYPE Type;
+ D3DCOLORVALUE Diffuse;
+ D3DCOLORVALUE Specular;
+ D3DCOLORVALUE Ambient;
+ D3DVECTOR Position;
+ D3DVECTOR Direction;
+ float Range;
+ float Falloff;
+ float Attenuation0;
+ float Attenuation1;
+ float Attenuation2;
+ float Theta;
+ float Phi;
+} D3DLIGHT9;
+
+typedef struct _D3DLOCKED_BOX {
+ INT RowPitch;
+ INT SlicePitch;
+ void *pBits;
+} D3DLOCKED_BOX;
+
+typedef struct _D3DLOCKED_RECT {
+ INT Pitch;
+ void *pBits;
+} D3DLOCKED_RECT;
+
+typedef struct _D3DMATERIAL9 {
+ D3DCOLORVALUE Diffuse;
+ D3DCOLORVALUE Ambient;
+ D3DCOLORVALUE Specular;
+ D3DCOLORVALUE Emissive;
+ float Power;
+} D3DMATERIAL9;
+
+typedef struct _D3DMATRIX {
+ union {
+ struct {
+ float _11, _12, _13, _14;
+ float _21, _22, _23, _24;
+ float _31, _32, _33, _34;
+ float _41, _42, _43, _44;
+ };
+ float m[4][4];
+ };
+} D3DMATRIX;
+
+typedef struct _D3DPRESENT_PARAMETERS {
+ UINT BackBufferWidth;
+ UINT BackBufferHeight;
+ D3DFORMAT BackBufferFormat;
+ UINT BackBufferCount;
+ D3DMULTISAMPLE_TYPE MultiSampleType;
+ DWORD MultiSampleQuality;
+ D3DSWAPEFFECT SwapEffect;
+ HWND hDeviceWindow;
+ BOOL Windowed;
+ BOOL EnableAutoDepthStencil;
+ D3DFORMAT AutoDepthStencilFormat;
+ DWORD Flags;
+ UINT FullScreen_RefreshRateInHz;
+ UINT PresentationInterval;
+} D3DPRESENT_PARAMETERS;
+
+typedef struct _D3DRANGE
+{
+ UINT Offset;
+ UINT Size;
+} D3DRANGE;
+
+typedef struct _D3DRASTER_STATUS {
+ BOOL InVBlank;
+ UINT ScanLine;
+} D3DRASTER_STATUS;
+
+typedef struct _D3DRECT {
+ LONG x1;
+ LONG y1;
+ LONG x2;
+ LONG y2;
+} D3DRECT;
+
+typedef struct _D3DRECTPATCH_INFO {
+ UINT StartVertexOffsetWidth;
+ UINT StartVertexOffsetHeight;
+ UINT Width;
+ UINT Height;
+ UINT Stride;
+ D3DBASISTYPE Basis;
+ D3DORDERTYPE Order;
+} D3DRECTPATCH_INFO;
+
+typedef struct _D3DSURFACE_DESC {
+ D3DFORMAT Format;
+ D3DRESOURCETYPE Type;
+ DWORD Usage;
+ D3DPOOL Pool;
+ UINT Size;
+ D3DMULTISAMPLE_TYPE MultiSampleType;
+ UINT Width;
+ UINT Height;
+} D3DSURFACE_DESC;
+
+typedef struct _D3DTRIPATCH_INFO {
+ UINT StartVertexOffset;
+ UINT NumVertices;
+ D3DBASISTYPE Basis;
+ D3DORDERTYPE Order;
+} D3DTRIPATCH_INFO;
+
+typedef struct _D3DVERTEXBUFFER_DESC {
+ D3DFORMAT Format;
+ D3DRESOURCETYPE Type;
+ DWORD Usage;
+ D3DPOOL Pool;
+ UINT Size;
+ DWORD FVF;
+} D3DVERTEXBUFFER_DESC;
+
+typedef struct _D3DVERTEXELEMENT9 {
+ WORD Stream;
+ WORD Offset;
+ BYTE Type;
+ BYTE Method;
+ BYTE Usage;
+ BYTE UsageIndex;
+} D3DVERTEXELEMENT9, *LPD3DVERTEXELEMENT9;
+
+typedef struct _D3DVIEWPORT9 {
+ DWORD X;
+ DWORD Y;
+ DWORD Width;
+ DWORD Height;
+ float MinZ;
+ float MaxZ;
+} D3DVIEWPORT9;
+
+typedef struct _D3DVOLUME_DESC {
+ D3DFORMAT Format;
+ D3DRESOURCETYPE Type;
+ DWORD Usage;
+ D3DPOOL Pool;
+ UINT Width;
+ UINT Height;
+ UINT Depth;
+} D3DVOLUME_DESC;
+
+#include <poppack.h>
+
+#endif
+#endif
diff --git a/tcc/include/winapi/directx/dxerr8.h b/tcc/include/winapi/directx/dxerr8.h
new file mode 100644
index 0000000..9bf21ea
--- /dev/null
+++ b/tcc/include/winapi/directx/dxerr8.h
@@ -0,0 +1,53 @@
+/*
+
+ dxerr8.h - Header file for the DirectX 8 Error API
+
+ Written by Filip Navara <xnavara@volny.cz>
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+*/
+
+#ifndef _DXERR8_H
+#define _DXERR8_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+const char *WINAPI DXGetErrorString8A(HRESULT);
+const WCHAR *WINAPI DXGetErrorString8W(HRESULT);
+const char* WINAPI DXGetErrorDescription8A(HRESULT);
+const WCHAR* WINAPI DXGetErrorDescription8W(HRESULT);
+HRESULT WINAPI DXTraceA(const char*,DWORD,HRESULT,const char*,BOOL);
+HRESULT WINAPI DXTraceW(const char*,DWORD,HRESULT,const WCHAR*,BOOL);
+
+#ifdef UNICODE
+#define DXGetErrorString8 DXGetErrorString8W
+#define DXGetErrorDescription8 DXGetErrorDescription8W
+#define DXTrace DXTraceW
+#else
+#define DXGetErrorString8 DXGetErrorString8A
+#define DXGetErrorDescription8 DXGetErrorDescription8A
+#define DXTrace DXTraceA
+#endif
+
+#if defined(DEBUG) || defined(_DEBUG)
+#define DXTRACE_MSG(str) DXTrace(__FILE__,(DWORD)__LINE__,0,str,FALSE)
+#define DXTRACE_ERR(str,hr) DXTrace(__FILE__,(DWORD)__LINE__,hr,str,TRUE)
+#define DXTRACE_ERR_NOMSGBOX(str,hr) DXTrace(__FILE__,(DWORD)__LINE__,hr,str,FALSE)
+#else
+#define DXTRACE_MSG(str) (0L)
+#define DXTRACE_ERR(str,hr) (hr)
+#define DXTRACE_ERR_NOMSGBOX(str,hr) (hr)
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/directx/dxerr9.h b/tcc/include/winapi/directx/dxerr9.h
new file mode 100644
index 0000000..36605c9
--- /dev/null
+++ b/tcc/include/winapi/directx/dxerr9.h
@@ -0,0 +1,53 @@
+/*
+
+ dxerr9.h - Header file for the DirectX 9 Error API
+
+ Written by Filip Navara <xnavara@volny.cz>
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+*/
+
+#ifndef _DXERR9_H
+#define _DXERR9_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+const char *WINAPI DXGetErrorString9A(HRESULT);
+const WCHAR *WINAPI DXGetErrorString9W(HRESULT);
+const char* WINAPI DXGetErrorDescription9A(HRESULT);
+const WCHAR* WINAPI DXGetErrorDescription9W(HRESULT);
+HRESULT WINAPI DXTraceA(const char*,DWORD,HRESULT,const char*,BOOL);
+HRESULT WINAPI DXTraceW(const char*,DWORD,HRESULT,const WCHAR*,BOOL);
+
+#ifdef UNICODE
+#define DXGetErrorString9 DXGetErrorString9W
+#define DXGetErrorDescription9 DXGetErrorDescription9W
+#define DXTrace DXTraceW
+#else
+#define DXGetErrorString9 DXGetErrorString9A
+#define DXGetErrorDescription9 DXGetErrorDescription9A
+#define DXTrace DXTraceA
+#endif
+
+#if defined(DEBUG) || defined(_DEBUG)
+#define DXTRACE_MSG(str) DXTrace(__FILE__,(DWORD)__LINE__,0,str,FALSE)
+#define DXTRACE_ERR(str,hr) DXTrace(__FILE__,(DWORD)__LINE__,hr,str,FALSE)
+#define DXTRACE_ERR_MSGBOX(str,hr) DXTrace(__FILE__,(DWORD)__LINE__,hr,str,TRUE)
+#else
+#define DXTRACE_MSG(str) (0L)
+#define DXTRACE_ERR(str,hr) (hr)
+#define DXTRACE_ERR_MSGBOX(str,hr) (hr)
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/dlgs.h b/tcc/include/winapi/dlgs.h
new file mode 100644
index 0000000..82525ab
--- /dev/null
+++ b/tcc/include/winapi/dlgs.h
@@ -0,0 +1,186 @@
+#ifndef _DLGS_H
+#define _DLGS_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#define FILEOPENORD 1536
+#define MULTIFILEOPENORD 1537
+#define PRINTDLGORD 1538
+#define PRNSETUPDLGORD 1539
+#define FINDDLGORD 1540
+#define REPLACEDLGORD 1541
+#define FONTDLGORD 1542
+#define FORMATDLGORD31 1543
+#define FORMATDLGORD30 1544
+#define PAGESETUPDLGORD 1546
+#define ctlFirst 0x400
+#define ctlLast 0x4ff
+#define chx1 0x410
+#define chx2 0x411
+#define chx3 0x412
+#define chx4 0x413
+#define chx5 0x414
+#define chx6 0x415
+#define chx7 0x416
+#define chx8 0x417
+#define chx9 0x418
+#define chx10 0x419
+#define chx11 0x41a
+#define chx12 0x41b
+#define chx13 0x41c
+#define chx14 0x41d
+#define chx15 0x41e
+#define chx16 0x41f
+#define cmb1 0x470
+#define cmb2 0x471
+#define cmb3 0x472
+#define cmb4 0x473
+#define cmb5 0x474
+#define cmb6 0x475
+#define cmb7 0x476
+#define cmb8 0x477
+#define cmb9 0x478
+#define cmb10 0x479
+#define cmb11 0x47a
+#define cmb12 0x47b
+#define cmb13 0x47c
+#define cmb14 0x47d
+#define cmb15 0x47e
+#define cmb16 0x47f
+#define edt1 0x480
+#define edt2 0x481
+#define edt3 0x482
+#define edt4 0x483
+#define edt5 0x484
+#define edt6 0x485
+#define edt7 0x486
+#define edt8 0x487
+#define edt9 0x488
+#define edt10 0x489
+#define edt11 0x48a
+#define edt12 0x48b
+#define edt13 0x48c
+#define edt14 0x48d
+#define edt15 0x48e
+#define edt16 0x48f
+#define frm1 0x434
+#define frm2 0x435
+#define frm3 0x436
+#define frm4 0x437
+#define grp1 0x430
+#define grp2 0x431
+#define grp3 0x432
+#define grp4 0x433
+#define ico1 0x43c
+#define ico2 0x43d
+#define ico3 0x43e
+#define ico4 0x43f
+#define lst1 0x460
+#define lst2 0x461
+#define lst3 0x462
+#define lst4 0x463
+#define lst5 0x464
+#define lst6 0x465
+#define lst7 0x466
+#define lst8 0x467
+#define lst9 0x468
+#define lst10 0x469
+#define lst11 0x46a
+#define lst12 0x46b
+#define lst13 0x46c
+#define lst14 0x46d
+#define lst15 0x46e
+#define lst16 0x46f
+#define psh1 0x400
+#define psh2 0x401
+#define psh3 0x402
+#define psh4 0x403
+#define psh5 0x404
+#define psh6 0x405
+#define psh7 0x406
+#define psh8 0x407
+#define psh9 0x408
+#define psh10 0x409
+#define psh11 0x40a
+#define psh12 0x40b
+#define psh13 0x40c
+#define psh14 0x40d
+#define psh15 0x40e
+#define pshHelp 0x40e
+#define psh16 0x40f
+#define rad1 0x420
+#define rad2 0x421
+#define rad3 0x422
+#define rad4 0x423
+#define rad5 0x424
+#define rad6 0x425
+#define rad7 0x426
+#define rad8 0x427
+#define rad9 0x428
+#define rad10 0x429
+#define rad11 0x42a
+#define rad12 0x42b
+#define rad13 0x42c
+#define rad14 0x42d
+#define rad15 0x42e
+#define rad16 0x42f
+#define rct1 0x438
+#define rct2 0x439
+#define rct3 0x43a
+#define rct4 0x43b
+#define scr1 0x490
+#define scr2 0x491
+#define scr3 0x492
+#define scr4 0x493
+#define scr5 0x494
+#define scr6 0x495
+#define scr7 0x496
+#define scr8 0x497
+#define stc1 0x440
+#define stc2 0x441
+#define stc3 0x442
+#define stc4 0x443
+#define stc5 0x444
+#define stc6 0x445
+#define stc7 0x446
+#define stc8 0x447
+#define stc9 0x448
+#define stc10 0x449
+#define stc11 0x44a
+#define stc12 0x44b
+#define stc13 0x44c
+#define stc14 0x44d
+#define stc15 0x44e
+#define stc16 0x44f
+#define stc17 0x450
+#define stc18 0x451
+#define stc19 0x452
+#define stc20 0x453
+#define stc21 0x454
+#define stc22 0x455
+#define stc23 0x456
+#define stc24 0x457
+#define stc25 0x458
+#define stc26 0x459
+#define stc27 0x45a
+#define stc28 0x45b
+#define stc29 0x45c
+#define stc30 0x45d
+#define stc31 0x45e
+#define stc32 0x45f
+#ifndef RC_INVOKED
+typedef struct tagCRGB {
+ BYTE bRed;
+ BYTE bGreen;
+ BYTE bBlue;
+ BYTE bExtra;
+} CRGB;
+#endif
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/docobj.h b/tcc/include/winapi/docobj.h
new file mode 100644
index 0000000..e6666bf
--- /dev/null
+++ b/tcc/include/winapi/docobj.h
@@ -0,0 +1,147 @@
+#ifndef _DOCOBJ_H
+#define _DOCOBJ_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define OLECMDERR_E_UNKNOWNGROUP (-2147221244)
+#define OLECMDERR_E_DISABLED (-2147221247)
+#define OLECMDERR_E_NOHELP (-2147221246)
+#define OLECMDERR_E_CANCELED (-2147221245)
+#define OLECMDERR_E_NOTSUPPORTED (-2147221248)
+
+typedef enum {
+ 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;
+typedef enum {
+ OLECMDF_SUPPORTED = 1,
+ OLECMDF_ENABLED = 2,
+ OLECMDF_LATCHED = 4,
+ OLECMDF_NINCHED = 8
+} OLECMDF;
+typedef enum {
+ OLECMDEXECOPT_DODEFAULT = 0,
+ OLECMDEXECOPT_PROMPTUSER = 1,
+ OLECMDEXECOPT_DONTPROMPTUSER = 2,
+ OLECMDEXECOPT_SHOWHELP = 3
+} OLECMDEXECOPT;
+
+typedef struct _tagOLECMDTEXT {
+ DWORD cmdtextf;
+ ULONG cwActual;
+ ULONG cwBuf;
+ wchar_t rgwz[1];
+} OLECMDTEXT;
+typedef struct _tagOLECMD {
+ ULONG cmdID;
+ DWORD cmdf;
+} OLECMD;
+
+typedef _COM_interface IOleInPlaceSite *LPOLEINPLACESITE;
+typedef _COM_interface IEnumOleDocumentViews *LPENUMOLEDOCUMENTVIEWS;
+
+EXTERN_C const IID IID_IContinueCallback;
+EXTERN_C const IID IID_IEnumOleDocumentViews;
+EXTERN_C const IID IID_IPrint;
+
+EXTERN_C const IID IID_IOleDocumentView;
+#define INTERFACE IOleDocumentView
+DECLARE_INTERFACE_(IOleDocumentView,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+
+ STDMETHOD(SetInPlaceSite)(THIS_ LPOLEINPLACESITE) PURE;
+ STDMETHOD(GetInPlaceSite)(THIS_ LPOLEINPLACESITE*) PURE;
+ STDMETHOD(GetDocument)(THIS_ IUnknown**) PURE;
+ STDMETHOD(SetRect)(THIS_ LPRECT) PURE;
+ STDMETHOD(GetRect)(THIS_ LPRECT) PURE;
+ STDMETHOD(SetRectComplex)(THIS_ LPRECT,LPRECT,LPRECT,LPRECT) PURE;
+ STDMETHOD(Show)(THIS_ BOOL) PURE;
+ STDMETHOD(UIActivate)(THIS_ BOOL) PURE;
+ STDMETHOD(Open)(THIS) PURE;
+ STDMETHOD(Close)(THIS_ DWORD) PURE;
+ STDMETHOD(SaveViewState)(THIS_ IStream*) PURE;
+ STDMETHOD(ApplyViewState)(THIS_ IStream*) PURE;
+ STDMETHOD(Clone)(THIS_ LPOLEINPLACESITE,IOleDocumentView**) PURE;
+};
+#undef INTERFACE
+DECLARE_ENUMERATOR_(IEnumOleDocumentViews,IOleDocumentView);
+
+EXTERN_C const IID IID_IOleDocument;
+#define INTERFACE IOleDocument
+DECLARE_INTERFACE_(IOleDocument,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+
+ STDMETHOD(CreateView)(THIS_ LPOLEINPLACESITE,IStream*,DWORD,IOleDocumentView**) PURE;
+ STDMETHOD(GetDocMiscStatus)(THIS_ DWORD*) PURE;
+ STDMETHOD(EnumViews)(THIS_ LPENUMOLEDOCUMENTVIEWS*,IOleDocumentView**) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IOleCommandTarget;
+#define INTERFACE IOleCommandTarget
+DECLARE_INTERFACE_(IOleCommandTarget,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+
+ STDMETHOD(QueryStatus)(THIS_ const GUID*,ULONG,OLECMD*,OLECMDTEXT*) PURE;
+ STDMETHOD(Exec)(THIS_ const GUID*,DWORD,DWORD,VARIANTARG*,VARIANTARG*) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IOleDocumentSite;
+#define INTERFACE IOleDocumentSite
+DECLARE_INTERFACE_(IOleDocumentSite,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+
+ STDMETHOD(ActivateMe)(THIS_ IOleDocumentView*) PURE;
+};
+#undef INTERFACE
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/dsadmin.h b/tcc/include/winapi/dsadmin.h
new file mode 100644
index 0000000..e2eb1ce
--- /dev/null
+++ b/tcc/include/winapi/dsadmin.h
@@ -0,0 +1,38 @@
+/*
+ * dsadmin.h - Active Directory
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may use,
+ * modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+#ifndef _DSADMIN_H
+#define _DSADMIN_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--- Active Directory Reference - Active Directory Structures - Active Directory Admin Structures */
+#if (_WIN32_WINNT >= 0x0500)
+typedef struct {
+ DWORD dwSize;
+ HICON hObjClassIcon;
+ LPWSTR lpszWizTitle;
+ LPWSTR lpszContDisplayName;
+} DSA_NEWOBJ_DISPINFO,*LPDSA_NEWOBJ_DISPINFO;
+#endif /* (_WIN32_WINNT >= 0x0500) */
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/dsclient.h b/tcc/include/winapi/dsclient.h
new file mode 100644
index 0000000..341ca99
--- /dev/null
+++ b/tcc/include/winapi/dsclient.h
@@ -0,0 +1,186 @@
+/*
+ * dsclient.h - Active Directory
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may use,
+ * modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+#ifndef _DSCLIENT_H
+#define _DSCLIENT_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if (_WIN32_WINNT >= 0x0500)
+/*--- Active Directory Reference - Active Directory Functions - Active Directory Display Functions - BFFCallBack */
+#define DSBM_QUERYINSERTW 0x0064
+#define DSBM_QUERYINSERTA 0x0065
+#define DSBM_CHANGEIMAGESTATE 0x0066
+#define DSBM_HELP 0x0067
+#define DSBM_CONTEXTMENU 0x0068
+#ifdef UNICODE
+#define DSBM_QUERYINSERT DSBM_QUERYINSERTW
+#else
+#define DSBM_QUERYINSERT DSBM_QUERYINSERTA
+#endif
+/*--- Active Directory Reference - Active Directory Structures - Active Directory Display Structures */
+typedef struct _DOMAINDESC {
+ LPWSTR pszName;
+ LPWSTR pszPath;
+ LPWSTR pszNCName;
+ LPWSTR pszTrustParent;
+ LPWSTR pszObjectClass;
+ ULONG ulFlags;
+ BOOL fDownLevel;
+ struct _DOMAINDESC* pdChildList;
+ struct _DOMAINDESC* pdNextSibling;
+} DOMAIN_DESC,DOMAINDESC,*PDOMAIN_DESC,*LPDOMAINDESC;
+typedef struct {
+ DWORD dsSize;
+ DWORD dwCount;
+ DOMAINDESC aDomains[1];
+} DOMAINTREE,DOMAIN_TREE,*PDOMAIN_TREE,*LPDOMAINTREE;
+#define DSB_MAX_DISPLAYNAME_CHARS 64
+typedef struct {
+ DWORD cbStruct;
+ LPCWSTR pszADsPath;
+ LPCWSTR pszClass;
+ DWORD dwMask;
+ DWORD dwState;
+ DWORD dwStateMask;
+ CHAR szDisplayName[DSB_MAX_DISPLAYNAME_CHARS];
+ CHAR szIconLocation[MAX_PATH];
+ INT iIconResID;
+} DSBITEMA,*PDSBITEMA;
+typedef struct {
+ DWORD cbStruct;
+ LPCWSTR pszADsPath;
+ LPCWSTR pszClass;
+ DWORD dwMask;
+ DWORD dwState;
+ DWORD dwStateMask;
+ CHAR szDisplayName[DSB_MAX_DISPLAYNAME_CHARS];
+ CHAR szIconLocation[MAX_PATH];
+ INT iIconResID;
+} DSBITEMW,*PDSBITEMW;
+#define DSBF_STATE 0x00000001
+#define DSBF_ICONLOCATION 0x00000002
+#define DSBF_DISPLAYNAME 0x00000004
+#define DSBS_CHECKED 0x00000001
+#define DSBS_HIDDEN 0x00000002
+#define DSBS_ROOT 0x00000004
+typedef struct {
+ DWORD cbStruct;
+ HWND hwndOwner;
+ LPCSTR pszCaption;
+ LPCSTR pszTitle;
+ LPCWSTR pszRoot;
+ LPWSTR pszPath;
+ ULONG cchPath;
+ DWORD dwFlags;
+ BFFCALLBACK pfnCallback;
+ LPARAM lParam;
+ DWORD dwReturnFormat;
+ LPCWSTR pUserName;
+ LPCWSTR pPassword;
+ LPWSTR pszObjectClass;
+ ULONG cchObjectClass;
+} DSBROWSEINFOA,*PDSBROWSEINFOA;
+typedef struct {
+ DWORD cbStruct;
+ HWND hwndOwner;
+ LPCWSTR pszCaption;
+ LPCWSTR pszTitle;
+ LPCWSTR pszRoot;
+ LPWSTR pszPath;
+ ULONG cchPath;
+ DWORD dwFlags;
+ BFFCALLBACK pfnCallback;
+ LPARAM lParam;
+ DWORD dwReturnFormat;
+ LPCWSTR pUserName;
+ LPCWSTR pPassword;
+ LPWSTR pszObjectClass;
+ ULONG cchObjectClass;
+} DSBROWSEINFOW,*PDSBROWSEINFOW;
+#define DSBI_NOBUTTONS 0x00000001
+#define DSBI_NOLINES 0x00000002
+#define DSBI_NOLINESATROOT 0x00000004
+#define DSBI_CHECKBOXES 0x00000100
+#define DSBI_NOROOT 0x00010000
+#define DSBI_INCLUDEHIDDEN 0x00020000
+#define DSBI_EXPANDONOPEN 0x00040000
+#define DSBI_ENTIREDIRECTORY 0x00090000
+#define DSBI_RETURN_FORMAT 0x00100000
+#define DSBI_HASCREDENTIALS 0x00200000
+#define DSBI_IGNORETREATASLEAF 0x00400000
+#define DSBI_SIMPLEAUTHENTICATE 0x00800000
+#define DSBI_RETURNOBJECTCLASS 0x01000000
+#define DSBI_DONTSIGNSEAL 0x02000000
+typedef struct {
+ DWORD dwFlags;
+ CLSID clsidWizardDialog;
+ CLSID clsidWizardPrimaryPage;
+ DWORD cWizardExtensions;
+ CLSID aWizardExtensions[1];
+} DSCLASSCREATIONINFO,*LPDSCLASSCREATIONINFO;
+#define DSCCIF_HASWIZARDDIALOG 0x00000001
+#define DSCCIF_HASWIZARDPRIMARYPAGE 0x00000002
+typedef struct _DSDISPLAYSPECOPTIONS {
+ DWORD dwSize;
+ DWORD dwFlags;
+ DWORD offsetAttribPrefix;
+ DWORD offsetUserName;
+ DWORD offsetPassword;
+ DWORD offsetServer;
+ DWORD offsetServerConfigPath;
+} DSDISPLAYSPECOPTIONS,*PDSDISPLAYSPECOPTIONS,*LPDSDISPLAYSPECOPTIONS;
+#define DSDSOF_HASUSERANDSERVERINFO 0x00000001
+#define DSDSOF_SIMPLEAUTHENTICATE 0x00000002
+#define DSDSOF_DONTSIGNSEAL 0x00000004
+#define DSDSOF_DSAVAILABLE 0x40000000
+typedef struct {
+ DWORD dwFlags;
+ DWORD dwProviderFlags;
+ DWORD offsetName;
+ DWORD offsetClass;
+} DSOBJECT,*LPDSOBJECT;
+#define DSOBJECT_ISCONTAINER 0x00000001
+#define DSOBJECT_READONLYPAGES 0x80000000
+#define DSPROVIDER_UNUSED_0 0x00000001
+#define DSPROVIDER_UNUSED_1 0x00000002
+#define DSPROVIDER_UNUSED_2 0x00000004
+#define DSPROVIDER_UNUSED_3 0x00000008
+#define DSPROVIDER_ADVANCED 0x00000010
+typedef struct {
+ CLSID clsidNamespace;
+ UINT cItems;
+ DSOBJECT aObjects[1];
+} DSOBJECTNAMES,*LPDSOBJECTNAMES;
+typedef struct {
+ DWORD offsetString;
+} DSPROPERTYPAGEINFO,*LPDSPROPERTYPAGEINFO;
+#ifdef UNICODE
+typedef DSBITEMW DSBITEM,*PDSBITEM;
+typedef DSBROWSEINFOW DSBROWSEINFO,*PDSBROWSEINFO;
+#else
+typedef DSBITEMA DSBITEM,*PDSBITEM;
+typedef DSBROWSEINFOA DSBROWSEINFO,*PDSBROWSEINFO;
+#endif
+#endif /* (_WIN32_WINNT >= 0x0500) */
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/dsgetdc.h b/tcc/include/winapi/dsgetdc.h
new file mode 100644
index 0000000..793cab2
--- /dev/null
+++ b/tcc/include/winapi/dsgetdc.h
@@ -0,0 +1,121 @@
+/*
+ * dsgetdc.h - Active Directory
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may use,
+ * modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+#ifndef _DSGETDC_H
+#define _DSGETDC_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--- Active Directory Reference - Active Directory Structures - Directory Service Structures */
+#if (_WIN32_WINNT >= 0x0500)
+#define DS_FORCE_REDISCOVERY 0x00000001
+#define DS_DIRECTORY_SERVICE_REQUIRED 0x00000010
+#define DS_DIRECTORY_SERVICE_PREFERRED 0x00000020
+#define DS_GC_SERVER_REQUIRED 0x00000040
+#define DS_PDC_REQUIRED 0x00000080
+#define DS_BACKGROUND_ONLY 0x00000100
+#define DS_IP_REQUIRED 0x00000200
+#define DS_KDC_REQUIRED 0x00000400
+#define DS_TIMESERV_REQUIRED 0x00000800
+#define DS_WRITABLE_REQUIRED 0x00001000
+#define DS_GOOD_TIMESERV_PREFERRED 0x00002000
+#define DS_AVOID_SELF 0x00004000
+#define DS_ONLY_LDAP_NEEDED 0x00008000
+#define DS_IS_FLAT_NAME 0x00010000
+#define DS_IS_DNS_NAME 0x00020000
+#define DS_RETURN_DNS_NAME 0x40000000
+#define DS_RETURN_FLAT_NAME 0x80000000
+typedef struct _DOMAIN_CONTROLLER_INFOA {
+ LPSTR DomainControllerName;
+ LPSTR DomainControllerAddress;
+ ULONG DomainControllerAddressType;
+ GUID DomainGuid;
+ LPSTR DomainName;
+ LPSTR DnsForestName;
+ ULONG Flags;
+ LPSTR DcSiteName;
+ LPSTR ClientSiteName;
+} DOMAIN_CONTROLLER_INFOA,*PDOMAIN_CONTROLLER_INFOA;
+typedef struct _DOMAIN_CONTROLLER_INFOW {
+ LPWSTR DomainControllerName;
+ LPWSTR DomainControllerAddress;
+ ULONG DomainControllerAddressType;
+ GUID DomainGuid;
+ LPWSTR DomainName;
+ LPWSTR DnsForestName;
+ ULONG Flags;
+ LPWSTR DcSiteName;
+ LPWSTR ClientSiteName;
+} DOMAIN_CONTROLLER_INFOW,*PDOMAIN_CONTROLLER_INFOW;
+#define DS_INET_ADDRESS 0x0001
+#define DS_NETBIOS_ADDRESS 0x0002
+#define DS_PDC_FLAG 0x00000001
+#define DS_GC_FLAG 0x00000004
+#define DS_DS_FLAG 0x00000010
+#define DS_KDC_FLAG 0x00000020
+#define DS_TIMESERV_FLAG 0x00000040
+#define DS_WRITABLE_FLAG 0x00000100
+#define DS_DNS_CONTROLLER_FLAG 0x20000000
+#define DS_DNS_DOMAIN_FLAG 0x40000000
+#define DS_DNS_FOREST_FLAG 0x80000000
+typedef struct _DS_DOMAIN_TRUSTSA {
+ LPSTR NetbiosDomainName;
+ LPSTR DnsDomainName;
+ ULONG Flags;
+ ULONG ParentIndex;
+ ULONG TrustType;
+ ULONG TrustAttributes;
+ PSID DomainSid;
+ GUID DomainGuid;
+} DS_DOMAIN_TRUSTSA,*PDS_DOMAIN_TRUSTSA;
+typedef struct _DS_DOMAIN_TRUSTSW {
+ LPWSTR NetbiosDomainName;
+ LPWSTR DnsDomainName;
+ ULONG Flags;
+ ULONG ParentIndex;
+ ULONG TrustType;
+ ULONG TrustAttributes;
+ PSID DomainSid;
+ GUID DomainGuid;
+} DS_DOMAIN_TRUSTSW,*PDS_DOMAIN_TRUSTSW;
+#define DS_DOMAIN_IN_FOREST 0x0001
+#define DS_DOMAIN_DIRECT_OUTBOUND 0x0002
+#define DS_DOMAIN_TREE_ROOT 0x0004
+#define DS_DOMAIN_PRIMARY 0x0008
+#define DS_DOMAIN_NATIVE_MODE 0x0010
+#define DS_DOMAIN_DIRECT_INBOUND 0x0020
+
+DWORD WINAPI DsGetDcNameW(LPCWSTR, LPCWSTR, GUID*, LPCWSTR, ULONG, PDOMAIN_CONTROLLER_INFOW*);
+DWORD WINAPI DsGetDcNameA(LPCSTR, LPCSTR, GUID*, LPCSTR, ULONG, PDOMAIN_CONTROLLER_INFOA*);
+
+#ifdef UNICODE
+typedef DOMAIN_CONTROLLER_INFOW DOMAIN_CONTROLLER_INFO,*PDOMAIN_CONTROLLER_INFO;
+typedef DS_DOMAIN_TRUSTSW DS_DOMAIN_TRUSTS,*PDS_DOMAIN_TRUSTS;
+#define DsGetDcName DsGetDcNameW
+#else
+typedef DOMAIN_CONTROLLER_INFOA DOMAIN_CONTROLLER_INFO,*PDOMAIN_CONTROLLER_INFO;
+typedef DS_DOMAIN_TRUSTSA DS_DOMAIN_TRUSTS,*PDS_DOMAIN_TRUSTS;
+#define DsGetDcName DsGetDcNameA
+#endif
+#endif /* (_WIN32_WINNT >= 0x0500) */
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/dshow.h b/tcc/include/winapi/dshow.h
new file mode 100644
index 0000000..da4bf68
--- /dev/null
+++ b/tcc/include/winapi/dshow.h
@@ -0,0 +1,108 @@
+#ifndef _DSHOW_H
+#define _DSHOW_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#include <strmif.h>
+#include <amaudio.h>
+#include <amvideo.h>
+#include <evcode.h>
+#include <audevcod.h>
+#include <dvdevcod.h>
+#include <errors.h>
+#include <vptype.h>
+#include <ks.h>
+#include <vidcap.h>
+#include <bdatypes.h>
+#include <dvdmedia.h>
+#include <il21dec.h>
+#include <ddraw.h> /* DDSCAPS2, DDPIXELFORMAT */
+#ifndef _WINGDI_H
+#include <wingdi.h> /* BITMAPINFOHEADER */
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--- DirectShow Reference - DirectShow Enumerated Types */
+typedef enum _AM_ASPECT_RATIO_MODE {
+ AM_ARMODE_STRETCHED,
+ AM_ARMODE_LETTER_BOX,
+ AM_ARMODE_CROP,
+ AM_ARMODE_STRETCHED_AS_PRIMARY
+} AM_ASPECT_RATIO_MODE;
+typedef enum _AM_WST_DRAWBGMODE {
+ AM_WST_DRAWBGMODE_Opaque,
+ AM_WST_DRAWBGMODE_Transparent
+} AM_WST_DRAWBGMODE,*PAM_WST_DRAWBGMODE;
+typedef enum _AM_WST_LEVEL {
+ AM_WST_LEVEL_1_5 = 0
+} AM_WST_LEVEL,*PAM_WST_LEVEL;
+typedef enum _AM_WST_SERVICE {
+ AM_WST_SERVICE_None = 0,
+ AM_WST_SERVICE_Text,
+ AM_WST_SERVICE_IDS,
+ AM_WST_SERVICE_Invalid
+} AM_WST_SERVICE,*PAM_WST_SERVICE;
+typedef enum _AM_WST_STATE {
+ AM_WST_STATE_Off = 0,
+ AM_WST_STATE_On
+} AM_WST_STATE,*PAM_WST_STATE;
+typedef enum _AM_WST_STYLE {
+ AM_WST_STYLE_None = 0,
+ AM_WST_STYLE_Invers
+} AM_WST_STYLE,*PAM_WST_STYLE;
+typedef enum {
+ AM_EXSEEK_CANSEEK= 1,
+ AM_EXSEEK_CANSCAN = 2,
+ AM_EXSEEK_MARKERSEEK = 4,
+ AM_EXSEEK_SCANWITHOUTCLOCK = 8,
+ AM_EXSEEK_NOSTANDARDREPAINT = 16,
+ AM_EXSEEK_BUFFERING = 32,
+ AM_EXSEEK_SENDS_VIDEOFRAMEREADY = 64
+} AMExtendedSeekingCapabilities;
+/*--- DirectShow Reference - DirectShow Structures */
+typedef struct _AM_WST_PAGE {
+ DWORD dwPageNr;
+ DWORD dwSubPageNr;
+ BYTE *pucPageData;
+} AM_WST_PAGE,*PAM_WST_PAGE;
+typedef struct _tag_AMVABeginFrameInfo{
+ DWORD dwDestSurfaceIndex;
+ LPVOID pInputData;
+ DWORD dwSizeInputData;
+ LPVOID pOutputData;
+ DWORD dwSizeOutputData;
+ } AMVABeginFrameInfo,*LPAMVABeginFrameInfo;
+typedef struct _tag_AMVACompBufferInfo{
+ DWORD dwNumCompBuffers;
+ DWORD dwWidthToCreate;
+ DWORD dwHeightToCreate;
+ DWORD dwBytesToAllocate;
+ DDSCAPS2 ddCompCaps;
+ DDPIXELFORMAT ddPixelFormat;
+} AMVACompBufferInfo,*LPAMVACompBufferInfo;
+typedef struct _tag_AMVAEndFrameInfo{
+ DWORD dwSizeMiscData;
+ LPVOID pMiscData;
+} AMVAEndFrameInfo,*LPAMVAEndFrameInfo;
+typedef struct _tag_AMVAInternalMemInfo{
+ DWORD dwScratchMemAlloc;
+} AMVAInternalMemInfo,*LPAMVAInternalMemInfo;
+typedef struct _tag_AMVAUncompBufferInfo{
+ DWORD dwMinNumSurfaces;
+ DWORD dwMaxNumSurfaces;
+ DDPIXELFORMAT ddUncompPixelFormat;
+} AMVAUncompBufferInfo,*LPAMVAUncompBufferInfo;
+ typedef struct _tag_AMVAUncompDataInfo{
+ DWORD dwUncompWidth;
+ DWORD dwUncompHeight;
+ DDPIXELFORMAT ddUncompPixelFormat;
+} AMVAUncompDataInfo,*LPAMVAUncompDataInfo;
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/dsquery.h b/tcc/include/winapi/dsquery.h
new file mode 100644
index 0000000..0f3f870
--- /dev/null
+++ b/tcc/include/winapi/dsquery.h
@@ -0,0 +1,72 @@
+/*
+ * dsquery.h - Active Directory
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may use,
+ * modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+#ifndef _DSQUERY_H
+#define _DSQUERY_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--- Active Directory Reference - Active Directory Structures - Active Directory Display Structures */
+#if (_WIN32_WINNT >= 0x0500)
+typedef struct {
+ DWORD dwFlags;
+ INT fmt;
+ INT cx;
+ INT idsName;
+ LONG offsetProperty;
+ DWORD dwReserved;
+} DSCOLUMN,*LPDSCOLUMN;
+#define DSCOLUMNPROP_ADSPATH -1
+#define DSCOLUMNPROP_OBJECTCLASS -2
+typedef struct {
+ DWORD cbStruct;
+ LONG cClasses;
+ DWORD offsetClass[1];
+} DSQUERYCLASSLIST,*LPDSQUERYCLASSLIST;
+typedef struct {
+ DWORD cbStruct;
+ DWORD dwFlags;
+ LPWSTR pDefaultScope;
+ LPWSTR pDefaultSaveLocation;
+ LPWSTR pUserName;
+ LPWSTR pPassword;
+ LPWSTR pServer;
+} DSQUERYINITPARAMS,*LPDSQUERYINITPARAMS;
+#define DSQPF_NOSAVE 0x00000001
+#define DSQPF_SAVELOCATION 0x00000002
+#define DSQPF_SHOWHIDDENOBJECTS 0x00000004
+#define DSQPF_ENABLEADMINFEATURES 0x00000008
+#define DSQPF_ENABLEADVANCEDFEATURES 0x00000010
+#define DSQPF_HASCREDENTIALS 0x00000020
+#define DSQPF_NOCHOOSECOLUMNS 0x00000040
+typedef struct {
+ DWORD cbStruct;
+ DWORD dwFlags;
+ HINSTANCE hInstance;
+ LONG offsetQuery;
+ LONG iColumns;
+ DWORD dwReserved;
+ DSCOLUMN aColumns[1];
+} DSQUERYPARAMS,*LPDSQUERYPARAMS;
+#endif /* (_WIN32_WINNT >= 0x0500) */
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/dsrole.h b/tcc/include/winapi/dsrole.h
new file mode 100644
index 0000000..6b950f9
--- /dev/null
+++ b/tcc/include/winapi/dsrole.h
@@ -0,0 +1,75 @@
+/*
+ * dsrole.h - Active Directory
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may use,
+ * modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+#ifndef _DSROLE_H
+#define _DSROLE_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if (_WIN32_WINNT >= 0x0500)
+/*--- Active Directory Reference - Active Directory Enumerations */
+typedef enum {
+ DsRole_RoleStandaloneWorkstation,
+ DsRole_RoleMemberWorkstation,
+ DsRole_RoleStandaloneServer,
+ DsRole_RoleMemberServer,
+ DsRole_RoleBackupDomainController,
+ DsRole_RolePrimaryDomainController
+} DSROLE_MACHINE_ROLE;
+typedef enum {
+ DsRoleOperationIdle,
+ DsRoleOperationActive,
+ DsRoleOperationNeedReboot
+} DSROLE_OPERATION_STATE;
+typedef enum {
+ DsRolePrimaryDomainInfoBasic,
+ DsRoleUpgradeStatus,
+ DsRoleOperationState
+} DSROLE_PRIMARY_DOMAIN_INFO_LEVEL;
+typedef enum {
+ DsRoleServerUnknown,
+ DsRoleServerPrimary,
+ DsRoleServerBackup
+} DSROLE_SERVER_STATE;
+/*--- Active Directory Reference - Active Directory Structures - Directory Service Structures */
+typedef struct {
+ DSROLE_OPERATION_STATE OperationState;
+} DSROLE_OPERATION_STATE_INFO;
+typedef struct _DSROLE_PRIMARY_DOMAIN_INFO_BASIC {
+ DSROLE_MACHINE_ROLE MachineRole;
+ ULONG Flags;
+ LPWSTR DomainNameFlat;
+ LPWSTR DomainNameDns;
+ LPWSTR DomainForestName;
+ GUID DomainGuid;
+} DSROLE_PRIMARY_DOMAIN_INFO_BASIC,*PDSROLE_PRIMARY_DOMAIN_INFO_BASIC;
+#define DSROLE_PRIMARY_DS_RUNNING 0x00000001
+#define DSROLE_PRIMARY_DS_MIXED_MODE 0x00000002
+#define DSROLE_UPGRADE_IN_PROGRESS 0x00000004
+#define DSROLE_PRIMARY_DOMAIN_GUID_PRESENT 0x01000000
+typedef struct _DSROLE_UPGRADE_STATUS_INFO {
+ ULONG OperationState;
+ DSROLE_SERVER_STATE PreviousServerState;
+} DSROLE_UPGRADE_STATUS_INFO,*PDSROLE_UPGRADE_STATUS_INFO;
+#endif /* (_WIN32_WINNT >= 0x0500) */
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/dvdevcod.h b/tcc/include/winapi/dvdevcod.h
new file mode 100644
index 0000000..2c8e5bd
--- /dev/null
+++ b/tcc/include/winapi/dvdevcod.h
@@ -0,0 +1,76 @@
+#ifndef _DVDEVCOD_H
+#define _DVDEVCOD_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define EC_DVD_ANGLE_CHANGE 0x0106
+#define EC_DVD_ANGLES_AVAILABLE 0x0113
+#define EC_DVD_AUDIO_STREAM_CHANGE 0x0104
+#define EC_DVD_BUTTON_AUTO_ACTIVATED 0x0115
+#define EC_DVD_BUTTON_CHANGE 0x0107
+#define EC_DVD_CHAPTER_AUTOSTOP 0x010E
+#define EC_DVD_CHAPTER_START 0x0103
+#define EC_DVD_CMD_START 0x0116
+#define EC_DVD_CMD_END 0x0117
+#define EC_DVD_CURRENT_HMSF_TIME 0x011A
+#define EC_DVD_CURRENT_TIME 0x010B
+#define EC_DVD_DISC_EJECTED 0x0118
+#define EC_DVD_DISC_INSERTED 0x0119
+#define EC_DVD_DOMAIN_CHANGE 0x0101
+#define EC_DVD_ERROR 0x010C
+#define EC_DVD_KARAOKE_MODE 0x011B
+#define EC_DVD_NO_FP_PGC 0x010F
+#define EC_DVD_PARENTAL_LEVEL_CHANGE 0x0111
+#define EC_DVD_PLAYBACK_RATE_CHANGE 0x0110
+#define EC_DVD_PLAYBACK_STOPPED 0x0112
+#define EC_DVD_PLAYPERIOD_AUTOSTOP 0x0114
+#define EC_DVD_STILL_OFF 0x010A
+#define EC_DVD_STILL_ON 0x0109
+#define EC_DVD_SUBPICTURE_STREAM_CHANGE 0x0105
+#define EC_DVD_TITLE_CHANGE 0x0102
+#define EC_DVD_VALID_UOPS_CHANGE 0x0108
+#define EC_DVD_WARNING 0x010D
+typedef enum _tagDVD_ERROR {
+ DVD_ERROR_Unexpected = 1,
+ DVD_ERROR_CopyProtectFail = 2,
+ DVD_ERROR_InvalidDVD1_0Disc = 3,
+ DVD_ERROR_InvalidDiscRegion = 4,
+ DVD_ERROR_LowParentalLevel = 5,
+ DVD_ERROR_MacrovisionFail = 6,
+ DVD_ERROR_IncompatibleSystemAndDecoderRegions = 7,
+ DVD_ERROR_IncompatibleDiscAndDecoderRegions = 8
+} DVD_ERROR;
+typedef enum _tagDVD_PB_STOPPED {
+ DVD_PB_STOPPED_Other = 0,
+ DVD_PB_STOPPED_NoBranch = 1,
+ DVD_PB_STOPPED_NoFirstPlayDomain = 2,
+ DVD_PB_STOPPED_StopCommand = 3,
+ DVD_PB_STOPPED_Reset = 4,
+ DVD_PB_STOPPED_DiscEjected = 5,
+ DVD_PB_STOPPED_IllegalNavCommand = 6,
+ DVD_PB_STOPPED_PlayPeriodAutoStop = 7,
+ DVD_PB_STOPPED_PlayChapterAutoStop = 8,
+ DVD_PB_STOPPED_ParentalFailure = 9,
+ DVD_PB_STOPPED_RegionFailure = 10,
+ DVD_PB_STOPPED_MacrovisionFailure = 11,
+ DVD_PB_STOPPED_DiscReadError = 12,
+ DVD_PB_STOPPED_CopyProtectFailure = 13
+} DVD_PB_STOPPED;
+typedef enum _tagDVD_WARNING {
+ DVD_WARNING_InvalidDVD1_0Disc = 1,
+ DVD_WARNING_FormatNotSupported = 2,
+ DVD_WARNING_IllegalNavCommand = 3,
+ DVD_WARNING_Open = 4,
+ DVD_WARNING_Seek = 5,
+ DVD_WARNING_Read = 6
+} DVD_WARNING;
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/dvdmedia.h b/tcc/include/winapi/dvdmedia.h
new file mode 100644
index 0000000..0a312c0
--- /dev/null
+++ b/tcc/include/winapi/dvdmedia.h
@@ -0,0 +1,101 @@
+#ifndef _DVDMEDIA_H
+#define _DVDMEDIA_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifndef _STRMIF_H
+#include <strmif.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--- DirectShow Reference - DirectShow Structures - AM_SAMPLE2_PROPERTIES Structure */
+#define AM_VIDEO_FLAG_FIELD_MASK 0x0003
+#define AM_VIDEO_FLAG_INTERLEAVED_FRAME 0x0000
+#define AM_VIDEO_FLAG_FIELD1 0x0001
+#define AM_VIDEO_FLAG_FIELD2 0x0002
+#define AM_VIDEO_FLAG_FIELD1FIRST 0x0004
+#define AM_VIDEO_FLAG_WEAVE 0x0008
+#define AM_VIDEO_FLAG_REPEAT_FIELD 0x0040
+/*--- DirectShow Reference - DirectShow Enumerated Types */
+enum AM_MPEG2Level {
+ AM_MPEG2Level_Low = 1,
+ AM_MPEG2Level_Main,
+ AM_MPEG2Level_High1440,
+ AM_MPEG2Level_High
+};
+enum AM_MPEG2Profile {
+ AM_MPEG2Profile_Simple = 1,
+ AM_MPEG2Profile_Main,
+ AM_MPEG2Profile_SNRScalable,
+ AM_MPEG2Profile_SpatiallyScalable,
+ AM_MPEG2Profile_High
+};
+typedef enum {
+ AM_RATE_ChangeRate = 1,
+ AM_RATE_FullDataRateMax = 2,
+ AM_RATE_ReverseDecode = 3,
+ AM_RATE_DecoderPosition = 4,
+ AM_RATE_DecoderVersion = 5
+} AM_PROPERTY_DVD_RATE_CHANGE;
+/*--- DirectShow Reference - DirectShow Structures */
+typedef struct tagVIDEOINFOHEADER2 {
+ RECT rcSource;
+ RECT rcTarget;
+ DWORD dwBitRate;
+ DWORD dwBitErrorRate;
+ REFERENCE_TIME AvgTimePerFrame;
+ DWORD dwInterlaceFlags;
+ DWORD dwCopyProtectFlags;
+ DWORD dwPictAspectRatioX;
+ DWORD dwPictAspectRatioY;
+ union {
+ DWORD dwControlFlags;
+ DWORD dwReserved1;
+ };
+ DWORD dwReserved2;
+ BITMAPINFOHEADER bmiHeader;
+} VIDEOINFOHEADER2;
+#define AMINTERLACE_IsInterlaced 0x00000001
+#define AMINTERLACE_1FieldPerSample 0x00000002
+#define AMINTERLACE_Field1First 0x00000004
+#define AMINTERLACE_FieldPatField1Only 0x00000000
+#define AMINTERLACE_FieldPatField2Only 0x00000010
+#define AMINTERLACE_FieldPatBothRegular 0x00000020
+#define AMINTERLACE_FieldPatBothIrregular 0x00000030
+#define AMINTERLACE_DisplayModeBobOnly 0x00000000
+#define AMINTERLACE_DisplayModeWeaveOnly 0x00000040
+#define AMINTERLACE_DisplayModeBobOrWeave 0x00000080
+#define AMINTERLACE_FieldPatternMask 0x00000030
+#define AMINTERLACE_DisplayModeMask 0x000000C0
+#define AMCONTROL_USED 0x00000001
+#define AMCONTROL_PAD_TO_4x3 0x00000002
+#define AMCONTROL_PAD_TO_16x9 0x00000004
+#define AMCONTROL_COLORINFO_PRESENT 0x00000008
+typedef struct tagMPEG2VIDEOINFO {
+ VIDEOINFOHEADER2 hdr;
+ DWORD dwStartTimeCode;
+ DWORD cbSequenceHeader;
+ DWORD dwProfile;
+ DWORD dwLevel;
+ DWORD dwFlags;
+ DWORD dwSequenceHeader[1];
+} MPEG2VIDEOINFO;
+#define AMMPEG2_DoPanScan 0x00000001
+#define AMMPEG2_DVDLine21Field1 0x00000002
+#define AMMPEG2_DVDLine21Field2 0x00000004
+#define AMMPEG2_SourceIsLetterboxed 0x00000008
+#define AMMPEG2_FilmCameraMode 0x00000010
+#define AMMPEG2_LetterboxAnalogOut 0x00000020
+#define AMMPEG2_DSS_UserData 0x00000040
+#define AMMPEG2_DVB_UserData 0x00000080
+#define AMMPEG2_27MhzTimebase 0x00000100
+#define AMMPEG2_WidescreenAnalogOut 0x00000200
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/edevdefs.h b/tcc/include/winapi/edevdefs.h
new file mode 100644
index 0000000..128631a
--- /dev/null
+++ b/tcc/include/winapi/edevdefs.h
@@ -0,0 +1,346 @@
+#ifndef _EDEVDEFS_H
+#define _EDEVDEFS_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#define ED_TOP 0x00000001
+#define ED_MIDDLE 0x00000002
+#define ED_BOTTOM 0x00000004
+#define ED_LEFT 0x00000100
+#define ED_CENTER 0x00000200
+#define ED_RIGHT 0x00000400
+#define ED_DEVCAP_CAN_RECORD 0x00001001
+#define ED_DEVCAP_CAN_RECORD_STROBE 0x00001002
+#define ED_DEVCAP_HAS_AUDIO 0x00001003
+#define ED_DEVCAP_HAS_VIDEO 0x00001004
+#define ED_DEVCAP_USES_FILES 0x00001005
+#define ED_DEVCAP_CAN_SAVE 0x00001006
+#define ED_DEVCAP_DEVICE_TYPE 0x00001007
+#define ED_DEVTYPE_VCR 0x00001008
+#define ED_DEVTYPE_LASERDISK 0x00001009
+#define ED_DEVTYPE_ATR 0x0000100A
+#define ED_DEVTYPE_DDR 0x0000100B
+#define ED_DEVTYPE_ROUTER 0x0000100C
+#define ED_DEVTYPE_KEYER 0x0000100D
+#define ED_DEVTYPE_MIXER_VIDEO 0x000010OE
+#define ED_DEVTYPE_DVE 0x000010OF
+#define ED_DEVTYPE_WIPEGEN 0x00001010
+#define ED_DEVTYPE_MIXER_AUDIO 0x00001011
+#define ED_DEVTYPE_CG 0x00001012
+#define ED_DEVTYPE_TBC 0x00001013
+#define ED_DEVTYPE_TCG 0x00001014
+#define ED_DEVTYPE_GPI 0x00001015
+#define ED_DEVTYPE_JOYSTICK 0x00001016
+#define ED_DEVTYPE_KEYBOARD 0x00001017
+#define ED_DEVCAP_EXTERNAL_DEVICE_ID 0x00001018
+#define ED_DEVCAP_TIMECODE_READ 0x00001019
+#define ED_DEVCAP_TIMECODE_WRITE 0x0000101A
+#define ED_DEVCAP_CTLTRK_READ 0x0000101B
+#define ED_DEVCAP_INDEX_READ 0x0000101C
+#define ED_DEVCAP_PREROLL 0x0000101D
+#define ED_DEVCAP_POSTROLL 0x0000101E
+#define ED_DEVCAP_SYNC_ACCURACY 0x0000101F
+#define ED_SYNCACC_PRECISE 0x00001020
+#define ED_SYNCACC_FRAME 0x00001021
+#define ED_SYNCACC_ROUGH 0x00001022
+#define ED_DEVCAP_NORMAL_RATE 0x00001023
+#define ED_RATE_24 0x00001024
+#define ED_RATE_25 0x00001025
+#define ED_RATE_2997 0x00001026
+#define ED_RATE_30 0x00001027
+#define ED_DEVCAP_CAN_PREVIEW 0x00001028
+#define ED_DEVCAP_CAN_MONITOR_SOURCES 0x00001029
+#define ED_DEVCAP_CAN_TEST 0x0000102A
+#define ED_DEVCAP_VIDEO_INPUTS 0x0000102B
+#define ED_DEVCAP_AUDIO_INPUTS 0x0000102C
+#define ED_DEVCAP_NEEDS_CALIBRATING 0x0000102D
+#define ED_DEVCAP_SEEK_TYPE 0x0000102E
+#define ED_SEEK_PERFECT 0x0000102F
+#define ED_SEEK_FAST 0x00001030
+#define ED_SEEK_SLOW 0x00001031
+#define ED_POWER_ON 0x00001032
+#define ED_POWER_OFF 0x00001033
+#define ED_POWER_STANDBY 0x00001034
+#define ED_ACTIVE 0x00001035
+#define ED_INACTIVE 0x00001036
+#define ED_ALL 0x00001037
+#define ED_TEST 0x00001038
+#define ED_TRANSCAP_CAN_EJECT 0x00001064
+#define ED_TRANSCAP_CAN_BUMP_PLAY 0x00001065
+#define ED_TRANSCAP_CAN_PLAY_BACKWARDS 0x00001066
+#define ED_TRANSCAP_CAN_SET_EE 0x00001067
+#define ED_TRANSCAP_CAN_SET_PB 0x00001068
+#define ED_TRANSCAP_CAN_DELAY_VIDEO_IN 0x00001069
+#define ED_TRANSCAP_CAN_DELAY_VIDEO_OUT 0x0000106A
+#define ED_TRANSCAP_CAN_DELAY_AUDIO_IN 0x0000106B
+#define ED_TRANSCAP_CAN_DELAY_AUDIO_OUT 0x0000106C
+#define ED_TRANSCAP_FWD_VARIABLE_MAX 0x0000106D
+#define ED_TRANSCAP_REV_VARIABLE_MAX 0x0000106E
+#define ED_TRANSCAP_NUM_AUDIO_TRACKS 0x0000106F
+#define ED_TRANSCAP_LTC_TRACK 0x00001070
+#define ED_TRANSCAP_NEEDS_TBC 0x00001071
+#define ED_TRANSCAP_NEEDS_CUEING 0x00001072
+#define ED_TRANSCAP_CAN_INSERT 0x00001073
+#define ED_TRANSCAP_CAN_ASSEMBLE 0x00001074
+#define ED_TRANSCAP_FIELD_STEP 0x00001075
+#define ED_TRANSCAP_CLOCK_INC_RATE 0x00001076
+#define ED_TRANSCAP_CAN_DETECT_LENGTH 0x00001077
+#define ED_TRANSCAP_CAN_FREEZE 0x00001078
+#define ED_TRANSCAP_HAS_TUNER 0x00001079
+#define ED_TRANSCAP_HAS_TIMER 0x0000107A
+#define ED_TRANSCAP_HAS_CLOCK 0x0000107B
+#define ED_MEDIA_SPIN_UP 0x00001082
+#define ED_MEDIA_SPIN_DOWN 0x00001083
+#define ED_MEDIA_UNLOAD 0x00001084
+#define ED_MODE_PLAY 0x000010C8
+#define ED_MODE_STOP 0x000010C9
+#define ED_MODE_FREEZE 0x000010CA
+#define ED_MODE_THAW 0x000010CB
+#define ED_MODE_FF 0x000010CC
+#define ED_MODE_REW 0x000010CD
+#define ED_MODE_RECORD 0x000010CE
+#define ED_MODE_RECORD_STROBE 0x000010CF
+#define ED_MODE_STEP 0x000010D0
+#define ED_MODE_STEP_FWD 0x000010D0
+#define ED_MODE_SHUTTLE 0x000010D1
+#define ED_MODE_EDIT_CUE 0x000010D2
+#define ED_MODE_VAR_SPEED 0x000010D3
+#define ED_MODE_PERFORM 0x000010D4
+#define ED_MODE_LINK_ON 0x00001118
+#define ED_MODE_LINK_OFF 0x00001119
+#define ED_TCG_TIMECODE_TYPE 0x00001190
+#define ED_TCG_SMPTE_LTC 0x00001191
+#define ED_TCG_SMPTE_VITC 0x00001192
+#define ED_TCG_MIDI_QF 0x00001193
+#define ED_TCG_MIDI_FULL 0x00001194
+#define ED_TCG_FRAMERATE 0x00001195
+#define ED_TCG_SYNC_SOURCE 0x0000119A
+#define ED_TCG_VIDEO 0x0000119B
+#define ED_TCG_READER 0x0000119C
+#define ED_TCG_FREE 0x0000119D
+#define ED_TCG_REFERENCE_SOURCE 0x0000119E
+#define ED_TCR_SOURCE 0x000011A0
+#define ED_TCR_LTC 0x000011A1
+#define ED_TCR_VITC 0x000011A2
+#define ED_TCR_CT 0x000011A3
+#define ED_TCR_FTC 0x000011A4
+#define ED_TCR_LAST_VALUE 0x000011A5
+#define ED_TCD_SOURCE 0x000011A6
+#define ED_TCR 0x000011A7
+#define ED_TCG 0x000011A8
+#define ED_TCD_SIZE 0x000011A9
+#define ED_SMALL 0x000011AA
+#define ED_MED 0x000011AB
+#define ED_LARGE 0x000011AC
+#define ED_TCD_POSITION 0x000011AD
+#define ED_TCD_INTENSITY 0x000011B4
+#define ED_HIGH 0x000011B5
+#define ED_LOW 0x000011B6
+#define ED_TCD_TRANSPARENCY 0x000011B7
+#define ED_TCD_INVERT 0x000011B8
+#define ED_MODE 0x000011F4
+#define ED_ERROR 0x000011F5
+#define ED_LOCAL 0x000011F6
+#define ED_RECORD_INHIBIT 0x000011F7
+#define ED_SERVO_LOCK 0x000011F8
+#define ED_MEDIA_PRESENT 0x000011F9
+#define ED_MEDIA_LENGTH 0x000011FA
+#define ED_MEDIA_SIZE 0x000011FB
+#define ED_MEDIA_TRACK_COUNT 0x000011FC
+#define ED_MEDIA_TRACK_LENGTH 0x000011FD
+#define ED_MEDIA_SIDE 0x000011FE
+#define ED_MEDIA_TYPE 0x000011FF
+#define ED_MEDIA_VHS 0x00001200
+#define ED_MEDIA_SVHS 0x00001201
+#define ED_MEDIA_HI8 0x00001202
+#define ED_MEDIA_UMATIC 0x00001203
+#define ED_MEDIA_DVC 0x00001204
+#define ED_MEDIA_1_INCH 0x00001205
+#define ED_MEDIA_D1 0x00001206
+#define ED_MEDIA_D2 0x00001207
+#define ED_MEDIA_D3 0x00001208
+#define ED_MEDIA_D5 0x00001209
+#define ED_MEDIA_DBETA 0x0000120A
+#define ED_MEDIA_BETA 0x0000120B
+#define ED_MEDIA_8MM 0x0000120C
+#define ED_MEDIA_DDR 0x0000120D
+#define ED_MEDIA_OTHER 0x0000120E
+#define ED_MEDIA_CLV 0x0000120F
+#define ED_MEDIA_CAV 0x00001210
+#define ED_MEDIA_POSITION 0x00001211
+#define ED_LINK_MODE 0x00001212
+#define ED_TRANSBASIC_TIME_FORMAT 0x0000121C
+#define ED_FORMAT_MILLISECONDS 0x0000121D
+#define ED_FORMAT_FRAMES 0x0000121E
+#define ED_FORMAT_REFERENCE_TIME 0x0000121F
+#define ED_FORMAT_HMSF 0x00001223
+#define ED_FORMAT_TMSF 0x00001224
+#define ED_TRANSBASIC_TIME_REFERENCE 0x00001225
+#define ED_TIMEREF_TIMECODE 0x00001226
+#define ED_TIMEREF_CONTROL_TRACK 0x00001227
+#define ED_TIMEREF_INDEX 0x00001228
+#define ED_TRANSBASIC_SUPERIMPOSE 0x00001229
+#define ED_TRANSBASIC_END_STOP_ACTION 0x0000122A
+#define ED_TRANSBASIC_RECORD_FORMAT 0x0000122B
+#define ED_RECORD_FORMAT_SP 0x0000122C
+#define ED_RECORD_FORMAT_LP 0x0000122D
+#define ED_RECORD_FORMAT_EP 0x0000122E
+#define ED_TRANSBASIC_STEP_COUNT 0x0000122F
+#define ED_TRANSBASIC_STEP_UNIT 0x00001230
+#define ED_STEP_FIELD 0x00001231
+#define ED_STEP_FRAME 0x00001232
+#define ED_STEP_3_2 0x00001233
+#define ED_TRANSBASIC_PREROLL 0x00001234
+#define ED_TRANSBASIC_RECPREROLL 0x00001235
+#define ED_TRANSBASIC_POSTROLL 0x00001236
+#define ED_TRANSBASIC_EDIT_DELAY 0x00001237
+#define ED_TRANSBASIC_PLAYTC_DELAY 0x00001238
+#define ED_TRANSBASIC_RECTC_DELAY 0x00001239
+#define ED_TRANSBASIC_EDIT_FIELD 0x0000123A
+#define ED_TRANSBASIC_FRAME_SERVO 0x0000123B
+#define ED_TRANSBASIC_CF_SERVO 0x0000123C
+#define ED_TRANSBASIC_SERVO_REF 0x0000123D
+#define ED_REF_EXTERNAL 0x0000123E
+#define ED_REF_INPUT 0x0000123F
+#define ED_REF_INTERNAL 0x00001240
+#define ED_REF_AUTO 0x00001241
+#define ED_TRANSBASIC_WARN_GL 0x00001242
+#define ED_TRANSBASIC_SET_TRACKING 0x00001243
+#define ED_TRACKING_PLUS 0x00001244
+#define ED_TRACKING_MINUS 0x00001245
+#define ED_TRACKING_RESET 0x00001246
+#define ED_TRANSBASIC_SET_FREEZE_TIMEOUT 0x00001247
+#define ED_TRANSBASIC_VOLUME_NAME 0x00001248
+#define ED_TRANSBASIC_BALLISTIC_1 0x00001249
+#define ED_TRANSBASIC_BALLISTIC_2 0x0000124A
+#define ED_TRANSBASIC_BALLISTIC_3 0x0000124B
+#define ED_TRANSBASIC_BALLISTIC_4 0x0000124C
+#define ED_TRANSBASIC_BALLISTIC_5 0x0000124D
+#define ED_TRANSBASIC_BALLISTIC_6 0x0000124E
+#define ED_TRANSBASIC_BALLISTIC_7 0x0000124F
+#define ED_TRANSBASIC_BALLISTIC_8 0x00001250
+#define ED_TRANSBASIC_BALLISTIC_9 0x00001251
+#define ED_TRANSBASIC_BALLISTIC_10 0x00001252
+#define ED_TRANSBASIC_BALLISTIC_11 0x00001253
+#define ED_TRANSBASIC_BALLISTIC_12 0x00001254
+#define ED_TRANSBASIC_BALLISTIC_13 0x00001255
+#define ED_TRANSBASIC_BALLISTIC_14 0x00001256
+#define ED_TRANSBASIC_BALLISTIC_15 0x00001257
+#define ED_TRANSBASIC_BALLISTIC_16 0x00001258
+#define ED_TRANSBASIC_BALLISTIC_17 0x00001259
+#define ED_TRANSBASIC_BALLISTIC_18 0x0000125A
+#define ED_TRANSBASIC_BALLISTIC_19 0x0000125B
+#define ED_TRANSBASIC_BALLISTIC_20 0x0000125C
+#define ED_TRANSBASIC_SETCLOCK 0x0000125D
+#define ED_TRANSBASIC_SET_COUNTER_FORMAT 0x0000125E
+#define ED_TRANSBASIC_SET_COUNTER_VALUE 0x0000125F
+#define ED_TRANSBASIC_SETTUNER_CH_UP 0x00001260
+#define ED_TRANSBASIC_SETTUNER_CH_DN 0x00001261
+#define ED_TRANSBASIC_SETTUNER_SK_UP 0x00001262
+#define ED_TRANSBASIC_SETTUNER_SK_DN 0x00001263
+#define ED_TRANSBASIC_SETTUNER_CH 0x00001264
+#define ED_TRANSBASIC_SETTUNER_NUM 0x00001265
+#define ED_TRANSBASIC_SETTIMER_EVENT 0x00001266
+#define ED_TRANSBASIC_SETTIMER_STARTDAY 0x00001267
+#define ED_TRANSBASIC_SETTIMER_STARTTIME 0x00001268
+#define ED_TRANSBASIC_SETTIMER_STOPDAY 0x00001269
+#define ED_TRANSBASIC_SETTIMER_STOPTIME 0x0000126A
+#define ED_TRANSVIDEO_SET_OUTPUT 0x00001276
+#define ED_E2E 0x00001277
+#define ED_PLAYBACK 0x00001278
+#define ED_OFF 0x00001279
+#define ED_TRANSVIDEO_SET_SOURCE 0x0000127A
+#define ED_TRANSAUDIO_ENABLE_OUTPUT 0x00001280
+#define ED_TRANSAUDIO_ENABLE_RECORD 0x00001282
+#define ED_TRANSAUDIO_ENABLE_SELSYNC 0x00001283
+#define ED_TRANSAUDIO_SET_SOURCE 0x00001284
+#define ED_TRANSAUDIO_SET_MONITOR 0x00001285
+#define ED_INVALID 0x0000128C
+#define ED_EXECUTING 0x0000128D
+#define ED_REGISTER 0x0000128E
+#define ED_DELETE 0x0000128F
+#define ED_EDIT_HEVENT 0x00001290
+#define ED_EDIT_TEST 0x00001291
+#define ED_EDIT_IMMEDIATE 0x00001292
+#define ED_EDIT_MODE 0x00001293
+#define ED_EDIT_MODE_ASSEMBLE 0x00001294
+#define ED_EDIT_MODE_INSERT 0x00001295
+#define ED_EDIT_MODE_CRASH_RECORD 0x00001296
+#define ED_EDIT_MODE_BOOKMARK_TIME 0x00001297
+#define ED_EDIT_MODE_BOOKMARK_CHAPTER 0x00001298
+#define ED_EDIT_MASTER 0x0000129A
+#define ED_EDIT_TRACK 0x0000129B
+#define ED_EDIT_SRC_INPOINT 0x0000129C
+#define ED_EDIT_SRC_OUTPOINT 0x0000129D
+#define ED_EDIT_REC_INPOINT 0x0000129E
+#define ED_EDIT_REC_OUTPOINT 0x0000129F
+#define ED_EDIT_REHEARSE_MODE 0x000012A0
+#define ED_EDIT_BVB 0x000012A1
+#define ED_EDIT_VBV 0x000012A2
+#define ED_EDIT_VVV 0x000012A3
+#define ED_EDIT_PERFORM 0x000012A4
+#define ED_EDIT_ABORT 0x000012A5
+#define ED_EDIT_TIMEOUT 0x000012A6
+#define ED_EDIT_SEEK 0x000012A7
+#define ED_EDIT_SEEK_EDIT_IN 0x000012A9
+#define ED_EDIT_SEEK_EDIT_OUT 0x000012AA
+#define ED_EDIT_SEEK_PREROLL 0x000012AB
+#define ED_EDIT_SEEK_PREROLL_CT 0x000012AC
+#define ED_EDIT_SEEK_BOOKMARK 0x000012AD
+#define ED_EDIT_OFFSET 0x000012AE
+#define ED_ERR_DEVICE_NOT_READY 0x000012BC
+#define ED_TRANSCAP_FWD_VARIABLE_MIN 0x00001320
+#define ED_TRANSCAP_REV_VARIABLE_MIN 0x00001321
+#define ED_TRANSCAP_FWD_SHUTTLE_MAX 0x00001322
+#define ED_TRANSCAP_FWD_SHUTTLE_MIN 0x00001323
+#define ED_TRANSCAP_REV_SHUTTLE_MAX 0x00001324
+#define ED_TRANSCAP_REV_SHUTTLE_MIN 0x00001325
+#define ED_TRANSCAP_MULTIPLE_EDITS 0x00001326
+#define ED_TRANSCAP_IS_MASTER 0x00001327
+#define ED_MODE_RECORD_FREEZE 0x00001328
+#define ED_MODE_STEP_REV 0x00001329
+#define ED_MODE_NOTIFY_ENABLE 0x0000132A
+#define ED_MODE_NOTIFY_DISABLE 0x0000132B
+#define ED_MODE_SHOT_SEARCH 0x0000132C
+#define ED_MEDIA_SX 0x0000132D
+#define ED_TRANSCAP_HAS_DT 0x0000132E
+#define ED_EDIT_PREREAD 0x0000132F
+#define ED_AUDIO_1 0x00000001
+#define ED_AUDIO_2 0x00000002
+#define ED_AUDIO_3 0x00000004
+#define ED_AUDIO_4 0x00000008
+#define ED_AUDIO_5 0x00000010
+#define ED_AUDIO_6 0x00000020
+#define ED_AUDIO_7 0x00000040
+#define ED_AUDIO_8 0x00000080
+#define ED_AUDIO_9 0x00000100
+#define ED_AUDIO_10 0x00000200
+#define ED_AUDIO_11 0x00000400
+#define ED_AUDIO_12 0x00000800
+#define ED_AUDIO_13 0x00001000
+#define ED_AUDIO_14 0x00002000
+#define ED_AUDIO_15 0x00004000
+#define ED_AUDIO_16 0x00008000
+#define ED_AUDIO_17 0x00010000
+#define ED_AUDIO_18 0x00020000
+#define ED_AUDIO_19 0x00040000
+#define ED_AUDIO_20 0x00080000
+#define ED_AUDIO_21 0x00100000
+#define ED_AUDIO_22 0x00200000
+#define ED_AUDIO_23 0x00400000
+#define ED_AUDIO_24 0x00800000
+#define ED_AUDIO_ALL 0x10000000
+#define ED_VIDEO 0x02000000
+#define DEV_PORT_SIM 0x00000001
+#define DEV_PORT_COM1 0x00000002
+#define DEV_PORT_COM2 0x00000003
+#define DEV_PORT_COM3 0x00000004
+#define DEV_PORT_COM4 0x00000005
+#define DEV_PORT_DIAQ 0x00000006
+#define DEV_PORT_ARTI 0x00000007
+#define DEV_PORT_1394 0x00000008
+#define DEV_PORT_USB 0x00000009
+#define DEV_PORT_MIN DEV_PORT_SIM
+
+#endif
diff --git a/tcc/include/winapi/errorrep.h b/tcc/include/winapi/errorrep.h
new file mode 100644
index 0000000..1361855
--- /dev/null
+++ b/tcc/include/winapi/errorrep.h
@@ -0,0 +1,40 @@
+#ifndef _ERRORREP_H
+#define _ERRORREP_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if (_WIN32_WINNT >= 0x0501)
+typedef enum {
+ frrvErr = 3,
+ frrvErrNoDW = 4,
+ frrvErrTimeout = 5,
+ frrvLaunchDebugger = 6,
+ frrvOk = 0,
+ frrvOkHeadless = 7,
+ frrvOkManifest = 1,
+ frrvOkQueued = 2
+} EFaultRepRetVal;
+BOOL WINAPI AddERExcludedApplicationA(LPCSTR);
+BOOL WINAPI AddERExcludedApplicationW(LPCWSTR);
+EFaultRepRetVal WINAPI ReportFault(LPEXCEPTION_POINTERS,DWORD);
+#endif
+
+#ifdef UNICODE
+#if (_WIN32_WINNT >= 0x0501)
+#define AddERExcludedApplication AddERExcludedApplicationW
+#endif
+#else
+#if (_WIN32_WINNT >= 0x0501)
+#define AddERExcludedApplication AddERExcludedApplicationA
+#endif
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/errors.h b/tcc/include/winapi/errors.h
new file mode 100644
index 0000000..7581899
--- /dev/null
+++ b/tcc/include/winapi/errors.h
@@ -0,0 +1,169 @@
+#ifndef _ERRORS_H
+#define _ERRORS_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--- DirectShow Reference - Constants and GUIDs - Error and Success Codes */
+#define VFW_S_NO_MORE_ITEMS 0x00040103
+#define VFW_S_DUPLICATE_NAME 0x0004022D
+#define VFW_S_STATE_INTERMEDIATE 0x00040237
+#define VFW_S_PARTIAL_RENDER 0x00040242
+#define VFW_S_SOME_DATA_IGNORED 0x00040245
+#define VFW_S_CONNECTIONS_DEFERRED 0x00040246
+#define VFW_S_RESOURCE_NOT_NEEDED 0x00040250
+#define VFW_S_MEDIA_TYPE_IGNORED 0x00040254
+#define VFW_S_VIDEO_NOT_RENDERED 0x00040257
+#define VFW_S_AUDIO_NOT_RENDERED 0x00040258
+#define VFW_S_RPZA 0x0004025A
+#define VFW_S_ESTIMATED 0x00040260
+#define VFW_S_RESERVED 0x00040263
+#define VFW_S_STREAM_OFF 0x00040267
+#define VFW_S_CANT_CUE 0x00040268
+#define VFW_S_NOPREVIEWPIN 0x0004027E
+#define VFW_S_DVD_NON_ONE_SEQUENTIAL 0x00040280
+#define VFW_S_DVD_CHANNEL_CONTENTS_NOT_AVAILABLE 0x0004028C
+#define VFW_S_DVD_NOT_ACCURATE 0x0004028D
+#define VFW_E_INVALIDMEDIATYPE 0x80040200
+#define VFW_E_INVALIDSUBTYPE 0x80040201
+#define VFW_E_NEED_OWNER 0x80040202
+#define VFW_E_ENUM_OUT_OF_SYNC 0x80040203
+#define VFW_E_ALREADY_CONNECTED 0x80040204
+#define VFW_E_FILTER_ACTIVE 0x80040205
+#define VFW_E_NO_TYPES 0x80040206
+#define VFW_E_NO_ACCEPTABLE_TYPES 0x80040207
+#define VFW_E_INVALID_DIRECTION 0x80040208
+#define VFW_E_NOT_CONNECTED 0x80040209
+#define VFW_E_NO_ALLOCATOR 0x8004020A
+#define VFW_E_RUNTIME_ERROR 0x8004020B
+#define VFW_E_BUFFER_NOTSET 0x8004020C
+#define VFW_E_BUFFER_OVERFLOW 0x8004020D
+#define VFW_E_BADALIGN 0x8004020E
+#define VFW_E_ALREADY_COMMITTED 0x8004020F
+#define VFW_E_BUFFERS_OUTSTANDING 0x80040210
+#define VFW_E_NOT_COMMITTED 0x80040211
+#define VFW_E_SIZENOTSET 0x80040212
+#define VFW_E_NO_CLOCK 0x80040213
+#define VFW_E_NO_SINK 0x80040214
+#define VFW_E_NO_INTERFACE 0x80040215
+#define VFW_E_NOT_FOUND 0x80040216
+#define VFW_E_CANNOT_CONNECT 0x80040217
+#define VFW_E_CANNOT_RENDER 0x80040218
+#define VFW_E_CHANGING_FORMAT 0x80040219
+#define VFW_E_NO_COLOR_KEY_SET 0x8004021A
+#define VFW_E_NOT_OVERLAY_CONNECTION 0x8004021B
+#define VFW_E_NOT_SAMPLE_CONNECTION 0x8004021C
+#define VFW_E_PALETTE_SET 0x8004021D
+#define VFW_E_COLOR_KEY_SET 0x8004021E
+#define VFW_E_NO_COLOR_KEY_FOUND 0x8004021F
+#define VFW_E_NO_PALETTE_AVAILABLE 0x80040220
+#define VFW_E_NO_DISPLAY_PALETTE 0x80040221
+#define VFW_E_TOO_MANY_COLORS 0x80040222
+#define VFW_E_STATE_CHANGED 0x80040223
+#define VFW_E_NOT_STOPPED 0x80040224
+#define VFW_E_NOT_PAUSED 0x80040225
+#define VFW_E_NOT_RUNNING 0x80040226
+#define VFW_E_WRONG_STATE 0x80040227
+#define VFW_E_START_TIME_AFTER_END 0x80040228
+#define VFW_E_INVALID_RECT 0x80040229
+#define VFW_E_TYPE_NOT_ACCEPTED 0x8004022A
+#define VFW_E_SAMPLE_REJECTED 0x8004022B
+#define VFW_E_SAMPLE_REJECTED_EOS 0x8004022C
+#define VFW_E_DUPLICATE_NAME 0x8004022D
+#define VFW_E_TIMEOUT 0x8004022E
+#define VFW_E_INVALID_FILE_FORMAT 0x8004022F
+#define VFW_E_ENUM_OUT_OF_RANGE 0x80040230
+#define VFW_E_CIRCULAR_GRAPH 0x80040231
+#define VFW_E_NOT_ALLOWED_TO_SAVE 0x80040232
+#define VFW_E_TIME_ALREADY_PASSED 0x80040233
+#define VFW_E_ALREADY_CANCELLED 0x80040234
+#define VFW_E_CORRUPT_GRAPH_FILE 0x80040235
+#define VFW_E_ADVISE_ALREADY_SET 0x80040236
+#define VFW_E_NO_MODEX_AVAILABLE 0x80040238
+#define VFW_E_NO_ADVISE_SET 0x80040239
+#define VFW_E_NO_FULLSCREEN 0x8004023A
+#define VFW_E_IN_FULLSCREEN_MODE 0x8004023B
+#define VFW_E_UNKNOWN_FILE_TYPE 0x80040240
+#define VFW_E_CANNOT_LOAD_SOURCE_FILTER 0x80040241
+#define VFW_E_FILE_TOO_SHORT 0x80040243
+#define VFW_E_INVALID_FILE_VERSION 0x80040244
+#define VFW_E_INVALID_CLSID 0x80040247
+#define VFW_E_INVALID_MEDIA_TYPE 0x80040248
+#define VFW_E_SAMPLE_TIME_NOT_SET 0x80040249
+#define VFW_E_MEDIA_TIME_NOT_SET 0x80040251
+#define VFW_E_NO_TIME_FORMAT_SET 0x80040252
+#define VFW_E_MONO_AUDIO_HW 0x80040253
+#define VFW_E_NO_DECOMPRESSOR 0x80040255
+#define VFW_E_NO_AUDIO_HARDWARE 0x80040256
+#define VFW_E_RPZA 0x80040259
+#define VFW_E_PROCESSOR_NOT_SUITABLE 0x8004025B
+#define VFW_E_UNSUPPORTED_AUDIO 0x8004025C
+#define VFW_E_UNSUPPORTED_VIDEO 0x8004025D
+#define VFW_E_MPEG_NOT_CONSTRAINED 0x8004025E
+#define VFW_E_NOT_IN_GRAPH 0x8004025F
+#define VFW_E_NO_TIME_FORMAT 0x80040261
+#define VFW_E_READ_ONLY 0x80040262
+#define VFW_E_BUFFER_UNDERFLOW 0x80040264
+#define VFW_E_UNSUPPORTED_STREAM 0x80040265
+#define VFW_E_NO_TRANSPORT 0x80040266
+#define VFW_E_BAD_VIDEOCD 0x80040269
+#define VFW_S_NO_STOP_TIME 0x80040270
+#define VFW_E_OUT_OF_VIDEO_MEMORY 0x80040271
+#define VFW_E_VP_NEGOTIATION_FAILED 0x80040272
+#define VFW_E_DDRAW_CAPS_NOT_SUITABLE 0x80040273
+#define VFW_E_NO_VP_HARDWARE 0x80040274
+#define VFW_E_NO_CAPTURE_HARDWARE 0x80040275
+#define VFW_E_DVD_OPERATION_INHIBITED 0x80040276
+#define VFW_E_DVD_INVALIDDOMAIN 0x80040277
+#define VFW_E_DVD_NO_BUTTON 0x80040278
+#define VFW_E_DVD_GRAPHNOTREADY 0x80040279
+#define VFW_E_DVD_RENDERFAIL 0x8004027A
+#define VFW_E_DVD_DECNOTENOUGH 0x8004027B
+#define VFW_E_DDRAW_VERSION_NOT_SUITABLE 0x8004027C
+#define VFW_E_COPYPROT_FAILED 0x8004027D
+#define VFW_E_TIME_EXPIRED 0x8004027F
+#define VFW_E_DVD_WRONG_SPEED 0x80040281
+#define VFW_E_DVD_MENU_DOES_NOT_EXIST 0x80040282
+#define VFW_E_DVD_CMD_CANCELLED 0x80040283
+#define VFW_E_DVD_STATE_WRONG_VERSION 0x80040284
+#define VFW_E_DVD_STATE_CORRUPT 0x80040285
+#define VFW_E_DVD_STATE_WRONG_DISC 0x80040286
+#define VFW_E_DVD_INCOMPATIBLE_REGION 0x80040287
+#define VFW_E_DVD_NO_ATTRIBUTES 0x80040288
+#define VFW_E_DVD_NO_GOUP_PGC 0x80040289
+#define VFW_E_DVD_LOW_PARENTAL_LEVEL 0x8004028A
+#define VFW_E_DVD_NOT_IN_KARAOKE_MODE 0x8004028B
+#define VFW_E_FRAME_STEP_UNSUPPORTED 0x8004028E
+#define VFW_E_DVD_STREAM_DISABLED 0x8004028F
+#define VFW_E_DVD_TITLE_UNKNOWN 0x80040290
+#define VFW_E_DVD_INVALID_DISC 0x80040291
+#define VFW_E_DVD_NO_RESUME_INFORMATION 0x80040292
+#define VFW_E_PIN_ALREADY_BLOCKED_ON_THIS_THREAD 0x80040293
+#define VFW_E_PIN_ALREADY_BLOCKED 0x80040294
+#define VFW_E_CERTIFICATION_FAILURE 0x80040295
+#define VFW_E_VMR_NOT_IN_MIXER_MODE 0x80040296
+#define VFW_E_VMR_NO_AP_SUPPLIED 0x80040297
+#define VFW_E_VMR_NO_DEINTERLACE_HW 0x80040298
+#define VFW_E_VMR_NO_PROCAMP_HW 0x80040299
+#define VFW_E_DVD_VMR9_INCOMPATIBLEDEC 0x8004029A
+#define VFW_E_NO_COPP_HW 0x8004029B
+#define VFW_E_BAD_KEY 0x800403F2
+/*--- DirectShow Reference - Functions */
+#define MAX_ERROR_TEXT_LEN 160
+/*--- DirectShow Reference - Functions */
+DWORD WINAPI AMGetErrorTextA(HRESULT,CHAR*,DWORD);
+DWORD WINAPI AMGetErrorTextW(HRESULT,WCHAR*,DWORD);
+#ifdef UNICODE
+#define AMGetErrorText AMGetErrorTextW
+#else
+#define AMGetErrorText AMGetErrorTextA
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/evcode.h b/tcc/include/winapi/evcode.h
new file mode 100644
index 0000000..11426e4
--- /dev/null
+++ b/tcc/include/winapi/evcode.h
@@ -0,0 +1,68 @@
+#ifndef _EVCODE_H
+#define _EVCODE_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--- DirectShow Reference - Constants and GUIDs - Event Notification Codes */
+#define EC_ACTIVATE 0x0013
+#define EC_BUFFERING_DATA 0x0011
+#define EC_BUILT 0x0300
+#define EC_CLOCK_CHANGED 0x000D
+#define EC_CLOCK_UNSET 0x0051
+#define EC_CODECAPI_EVENT 0x0057
+#define EC_COMPLETE 0x0001
+#define EC_DEVICE_LOST 0x001F
+#define EC_DISPLAY_CHANGED 0x0016
+#define EC_END_OF_SEGMENT 0x001C
+#define EC_ERROR_STILLPLAYING 0x0008
+#define EC_ERRORABORT 0x0003
+#define EC_EXTDEVICE_MODE_CHANGE 0x0031
+#define EC_FULLSCREEN_LOST 0x0012
+#define EC_GRAPH_CHANGED 0x0050
+#define EC_LENGTH_CHANGED 0x001E
+#define EC_NEED_RESTART 0x0014
+#define EC_NOTIFY_WINDOW 0x0019
+#define EC_OLE_EVENT 0x0018
+#define EC_OPENING_FILE 0x0010
+#define EC_PALETTE_CHANGED 0x0009
+#define EC_PAUSED 0x000E
+#define EC_PREPROCESS_COMPLETE 0x0056
+#define EC_QUALITY_CHANGE 0x000B
+#define EC_REPAINT 0x0005
+#define EC_SEGMENT_STARTED 0x001D
+#define EC_SHUTTING_DOWN 0x000C
+#define EC_SNDDEV_IN_ERROR 0x0200
+#define EC_SNDDEV_OUT_ERROR 0x0201
+#define EC_STARVATION 0x0017
+#define EC_STATE_CHANGE 0x0032
+#define EC_STEP_COMPLETE 0x0024
+#define EC_STREAM_CONTROL_STARTED 0x001B
+#define EC_STREAM_CONTROL_STOPPED 0x001A
+#define EC_STREAM_ERROR_STILLPLAYING 0x0007
+#define EC_STREAM_ERROR_STOPPED 0x0006
+#define EC_TIMECODE_AVAILABLE 0x0030
+#define EC_UNBUILT 0x0301
+#define EC_USERABORT 0x0002
+#define EC_VIDEO_SIZE_CHANGED 0x000A
+#define EC_VMR_RENDERDEVICE_SET 0x0053
+#define EC_VMR_SURFACE_FLIPPED 0x0054
+#define EC_VMR_RECONNECTION_FAILED 0x0055
+#define EC_WINDOW_DESTROYED 0x0015
+#define EC_WMT_EVENT 0x0252
+#define EC_WMT_INDEX_EVENT 0x0251
+#define EC_USER 0x8000
+/*--- DirectShow Reference - DirectShow Structures */
+typedef struct {
+ HRESULT hrStatus;
+ void *pData;
+} AM_WMT_EVENT_DATA;
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/exdisp.h b/tcc/include/winapi/exdisp.h
new file mode 100644
index 0000000..55c0288
--- /dev/null
+++ b/tcc/include/winapi/exdisp.h
@@ -0,0 +1,225 @@
+#ifndef _EXDISP_H
+#define _EXDISP_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+#ifdef __cplusplus
+extern "C" {
+#endif
+#include <oaidl.h>
+#include <ocidl.h>
+#include <docobj.h>
+
+EXTERN_C const CLSID CLSID_WebBrowser;
+EXTERN_C const IID DIID_DWebBrowserEvents;
+
+typedef enum {
+ navOpenInNewWindow = 0x1,
+ navNoHistory = 0x2,
+ navNoReadFromCache = 0x4,
+ navNoWriteTocache = 0x8,
+ navAllowAutosearch = 0x10,
+ navBrowserBar = 0x20,
+ navHyperLink = 0x40
+} BrowserNavConstants;
+
+EXTERN_C const IID IID_IWebBrowser;
+#define INTERFACE IWebBrowser
+DECLARE_INTERFACE_(IWebBrowser,IDispatch)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetTypeInfoCount)(THIS_ UINT*) PURE;
+ STDMETHOD(GetTypeInfo)(THIS_ UINT,LCID,LPTYPEINFO*) PURE;
+ STDMETHOD(GetIDsOfNames)(THIS_ REFIID,LPOLESTR*,UINT,LCID,DISPID*) PURE;
+ STDMETHOD(Invoke)(THIS_ DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*) PURE;
+
+ STDMETHOD(GoBack)(THIS) PURE;
+ STDMETHOD(GoForward)(THIS) PURE;
+ STDMETHOD(GoHome)(THIS) PURE;
+ STDMETHOD(GoSearch)(THIS) PURE;
+ STDMETHOD(Navigate)(THIS_ BSTR,VARIANT*,VARIANT*,VARIANT*,VARIANT*) PURE;
+ STDMETHOD(Refresh)(THIS) PURE;
+ STDMETHOD(Refresh2)(THIS_ VARIANT*) PURE;
+ STDMETHOD(Stop)(THIS) PURE;
+ STDMETHOD(get_Application)(THIS_ IDispatch**) PURE;
+ STDMETHOD(get_Parent)(THIS_ IDispatch**) PURE;
+ STDMETHOD(get_Container)(THIS_ IDispatch**) PURE;
+ STDMETHOD(get_Document)(THIS_ IDispatch**) PURE;
+ STDMETHOD(get_TopLevelContainer)(THIS_ VARIANT_BOOL*) PURE;
+ STDMETHOD(get_Type)(THIS_ BSTR*) PURE;
+ STDMETHOD(get_Left)(THIS_ long*) PURE;
+ STDMETHOD(put_Left)(THIS_ long) PURE;
+ STDMETHOD(get_Top)(THIS_ long*) PURE;
+ STDMETHOD(put_Top)(THIS_ long) PURE;
+ STDMETHOD(get_Width)(THIS_ long*) PURE;
+ STDMETHOD(put_Width)(THIS_ long) PURE;
+ STDMETHOD(get_Height)(THIS_ long*) PURE;
+ STDMETHOD(put_Height)(THIS_ long) PURE;
+ STDMETHOD(get_LocationName)(THIS_ BSTR*) PURE;
+ STDMETHOD(get_LocationURL)(THIS_ BSTR*) PURE;
+ STDMETHOD(get_Busy)(THIS_ VARIANT_BOOL*) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IWebBrowserApp;
+#define INTERFACE IWebBrowserApp
+DECLARE_INTERFACE_(IWebBrowserApp,IWebBrowser)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetTypeInfoCount)(THIS_ UINT*) PURE;
+ STDMETHOD(GetTypeInfo)(THIS_ UINT,LCID,LPTYPEINFO*) PURE;
+ STDMETHOD(GetIDsOfNames)(THIS_ REFIID,LPOLESTR*,UINT,LCID,DISPID*) PURE;
+ STDMETHOD(Invoke)(THIS_ DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*) PURE;
+
+ STDMETHOD(GoBack)(THIS) PURE;
+ STDMETHOD(GoForward)(THIS) PURE;
+ STDMETHOD(GoHome)(THIS) PURE;
+ STDMETHOD(GoSearch)(THIS) PURE;
+ STDMETHOD(Navigate)(THIS_ BSTR,VARIANT*,VARIANT*,VARIANT*,VARIANT*) PURE;
+ STDMETHOD(Refresh)(THIS) PURE;
+ STDMETHOD(Refresh2)(THIS_ VARIANT*) PURE;
+ STDMETHOD(Stop)(THIS) PURE;
+ STDMETHOD(get_Application)(THIS_ IDispatch**) PURE;
+ STDMETHOD(get_Parent)(THIS_ IDispatch**) PURE;
+ STDMETHOD(get_Container)(THIS_ IDispatch**) PURE;
+ STDMETHOD(get_Document)(THIS_ IDispatch**) PURE;
+ STDMETHOD(get_TopLevelContainer)(THIS_ VARIANT_BOOL*) PURE;
+ STDMETHOD(get_Type)(THIS_ BSTR*) PURE;
+ STDMETHOD(get_Left)(THIS_ long*) PURE;
+ STDMETHOD(put_Left)(THIS_ long) PURE;
+ STDMETHOD(get_Top)(THIS_ long*) PURE;
+ STDMETHOD(put_Top)(THIS_ long) PURE;
+ STDMETHOD(get_Width)(THIS_ long*) PURE;
+ STDMETHOD(put_Width)(THIS_ long) PURE;
+ STDMETHOD(get_Height)(THIS_ long*) PURE;
+ STDMETHOD(put_Height)(THIS_ long) PURE;
+ STDMETHOD(get_LocationName)(THIS_ BSTR*) PURE;
+ STDMETHOD(get_LocationURL)(THIS_ BSTR*) PURE;
+ STDMETHOD(get_Busy)(THIS_ VARIANT_BOOL*) PURE;
+
+ STDMETHOD(Quit)(THIS) PURE;
+ STDMETHOD(ClientToWindow)(THIS_ int*,int*) PURE;
+ STDMETHOD(PutProperty)(THIS_ BSTR,VARIANT) PURE;
+ STDMETHOD(GetProperty)(THIS_ BSTR,VARIANT*) PURE;
+ STDMETHOD(get_Name)(THIS_ BSTR*) PURE;
+ STDMETHOD(get_HWND)(THIS_ long*) PURE;
+ STDMETHOD(get_FullName)(THIS_ BSTR*) PURE;
+ STDMETHOD(get_Path)(THIS_ BSTR*) PURE;
+ STDMETHOD(get_Visible)(THIS_ VARIANT_BOOL*) PURE;
+ STDMETHOD(put_Visible)(THIS_ VARIANT_BOOL) PURE;
+ STDMETHOD(get_StatusBar)(THIS_ VARIANT_BOOL*) PURE;
+ STDMETHOD(put_StatusBar)(THIS_ VARIANT_BOOL) PURE;
+ STDMETHOD(get_StatusText)(THIS_ BSTR*) PURE;
+ STDMETHOD(put_StatusText)(THIS_ BSTR) PURE;
+ STDMETHOD(get_ToolBar)(THIS_ int*) PURE;
+ STDMETHOD(put_ToolBar)(THIS_ int) PURE;
+ STDMETHOD(get_MenuBar)(THIS_ VARIANT_BOOL*) PURE;
+ STDMETHOD(put_MenuBar)(THIS_ VARIANT_BOOL) PURE;
+ STDMETHOD(get_FullScreen)(THIS_ VARIANT_BOOL*) PURE;
+ STDMETHOD(put_FullScreen)(THIS_ VARIANT_BOOL) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IWebBrowser2;
+#define INTERFACE IWebBrowser2
+DECLARE_INTERFACE_(IWebBrowser2,IWebBrowserApp)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetTypeInfoCount)(THIS_ UINT*) PURE;
+ STDMETHOD(GetTypeInfo)(THIS_ UINT,LCID,LPTYPEINFO*) PURE;
+ STDMETHOD(GetIDsOfNames)(THIS_ REFIID,LPOLESTR*,UINT,LCID,DISPID*) PURE;
+ STDMETHOD(Invoke)(THIS_ DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*) PURE;
+
+ STDMETHOD(GoBack)(THIS) PURE;
+ STDMETHOD(GoForward)(THIS) PURE;
+ STDMETHOD(GoHome)(THIS) PURE;
+ STDMETHOD(GoSearch)(THIS) PURE;
+ STDMETHOD(Navigate)(THIS_ BSTR,VARIANT*,VARIANT*,VARIANT*,VARIANT*) PURE;
+ STDMETHOD(Refresh)(THIS) PURE;
+ STDMETHOD(Refresh2)(THIS_ VARIANT*) PURE;
+ STDMETHOD(Stop)(THIS) PURE;
+ STDMETHOD(get_Application)(THIS_ IDispatch**) PURE;
+ STDMETHOD(get_Parent)(THIS_ IDispatch**) PURE;
+ STDMETHOD(get_Container)(THIS_ IDispatch**) PURE;
+ STDMETHOD(get_Document)(THIS_ IDispatch**) PURE;
+ STDMETHOD(get_TopLevelContainer)(THIS_ VARIANT_BOOL*) PURE;
+ STDMETHOD(get_Type)(THIS_ BSTR*) PURE;
+ STDMETHOD(get_Left)(THIS_ long*) PURE;
+ STDMETHOD(put_Left)(THIS_ long) PURE;
+ STDMETHOD(get_Top)(THIS_ long*) PURE;
+ STDMETHOD(put_Top)(THIS_ long) PURE;
+ STDMETHOD(get_Width)(THIS_ long*) PURE;
+ STDMETHOD(put_Width)(THIS_ long) PURE;
+ STDMETHOD(get_Height)(THIS_ long*) PURE;
+ STDMETHOD(put_Height)(THIS_ long) PURE;
+ STDMETHOD(get_LocationName)(THIS_ BSTR*) PURE;
+ STDMETHOD(get_LocationURL)(THIS_ BSTR*) PURE;
+ STDMETHOD(get_Busy)(THIS_ VARIANT_BOOL*) PURE;
+
+ STDMETHOD(Quit)(THIS) PURE;
+ STDMETHOD(ClientToWindow)(THIS_ int*,int*) PURE;
+ STDMETHOD(PutProperty)(THIS_ BSTR,VARIANT) PURE;
+ STDMETHOD(GetProperty)(THIS_ BSTR,VARIANT*) PURE;
+ STDMETHOD(get_Name)(THIS_ BSTR*) PURE;
+ STDMETHOD(get_HWND)(THIS_ long*) PURE;
+ STDMETHOD(get_FullName)(THIS_ BSTR*) PURE;
+ STDMETHOD(get_Path)(THIS_ BSTR*) PURE;
+ STDMETHOD(get_Visible)(THIS_ VARIANT_BOOL*) PURE;
+ STDMETHOD(put_Visible)(THIS_ VARIANT_BOOL) PURE;
+ STDMETHOD(get_StatusBar)(THIS_ VARIANT_BOOL*) PURE;
+ STDMETHOD(put_StatusBar)(THIS_ VARIANT_BOOL) PURE;
+ STDMETHOD(get_StatusText)(THIS_ BSTR*) PURE;
+ STDMETHOD(put_StatusText)(THIS_ BSTR) PURE;
+ STDMETHOD(get_ToolBar)(THIS_ int*) PURE;
+ STDMETHOD(put_ToolBar)(THIS_ int) PURE;
+ STDMETHOD(get_MenuBar)(THIS_ VARIANT_BOOL*) PURE;
+ STDMETHOD(put_MenuBar)(THIS_ VARIANT_BOOL) PURE;
+ STDMETHOD(get_FullScreen)(THIS_ VARIANT_BOOL*) PURE;
+ STDMETHOD(put_FullScreen)(THIS_ VARIANT_BOOL) PURE;
+
+ STDMETHOD(Navigate2)(THIS_ VARIANT*,VARIANT*,VARIANT*,VARIANT*,VARIANT*) PURE;
+ STDMETHOD(QueryStatusWB)(THIS_ OLECMDID,OLECMDF*) PURE;
+ STDMETHOD(ExecWB)(THIS_ OLECMDID,OLECMDEXECOPT,VARIANT*,VARIANT*) PURE;
+ STDMETHOD(ShowBrowserBar)(THIS_ VARIANT*,VARIANT*,VARIANT*) PURE;
+ STDMETHOD(get_ReadyState)(THIS_ READYSTATE*) PURE;
+ STDMETHOD(get_Offline)(THIS_ VARIANT_BOOL*) PURE;
+ STDMETHOD(put_Offline)(THIS_ VARIANT_BOOL) PURE;
+ STDMETHOD(get_Silent)(THIS_ VARIANT_BOOL*) PURE;
+ STDMETHOD(put_Silent)(THIS_ VARIANT_BOOL) PURE;
+ STDMETHOD(get_RegistaerAsBrowser)(THIS_ VARIANT_BOOL*) PURE;
+ STDMETHOD(put_RegisterAsBrowser)(THIS_ VARIANT_BOOL) PURE;
+ STDMETHOD(get_RegistaerAsDropTarget)(THIS_ VARIANT_BOOL*) PURE;
+ STDMETHOD(put_RegisterAsDropTarget)(THIS_ VARIANT_BOOL) PURE;
+ STDMETHOD(get_TheaterMode)(THIS_ VARIANT_BOOL*) PURE;
+ STDMETHOD(put_TheaterMode)(THIS_ VARIANT_BOOL) PURE;
+ STDMETHOD(get_AddressBar)(THIS_ VARIANT_BOOL*) PURE;
+ STDMETHOD(put_AddressBar)(THIS_ VARIANT_BOOL) PURE;
+ STDMETHOD(get_Resizable)(THIS_ VARIANT_BOOL*) PURE;
+ STDMETHOD(put_Resizable)(THIS_ VARIANT_BOOL) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID DIID_DWebBrowserEvents2;
+#define INTERFACE DWebBrowserEvents2
+DECLARE_INTERFACE_(DWebBrowserEvents2,IDispatch)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetTypeInfoCount)(THIS_ UINT*) PURE;
+ STDMETHOD(GetTypeInfo)(THIS_ UINT,LCID,LPTYPEINFO*) PURE;
+ STDMETHOD(GetIDsOfNames)(THIS_ REFIID,LPOLESTR*,UINT,LCID,DISPID*) PURE;
+ STDMETHOD(Invoke)(THIS_ DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*) PURE;
+};
+#undef INTERFACE
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/exdispid.h b/tcc/include/winapi/exdispid.h
new file mode 100644
index 0000000..da2b0a4
--- /dev/null
+++ b/tcc/include/winapi/exdispid.h
@@ -0,0 +1,14 @@
+#ifndef _EXDISPID_H
+#define _EXDISPID_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#define DISPID_BEFORENAVIGATE2 250
+#define DISPID_NEWWINDOW2 251
+#define DISPID_PROGRESSCHANGE 108
+#define DISPID_DOCUMENTCOMPLETE 259
+#define DISPID_STATUSTEXTCHANGE 102
+#define DISPID_TITLECHANGE 113
+
+#endif
diff --git a/tcc/include/winapi/fltdefs.h b/tcc/include/winapi/fltdefs.h
new file mode 100644
index 0000000..eadf0ac
--- /dev/null
+++ b/tcc/include/winapi/fltdefs.h
@@ -0,0 +1,50 @@
+/*
+ * fltdefs.h - Routing and Remote Access Services
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may use,
+ * modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+#ifndef _FLTDEFS_H
+#define _FLTDEFS_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--- Packet Filtering Reference - Packet Filtering Enumerated Types */
+#if (_WIN32_WINNT >= 0x0500)
+typedef enum _GlobalFilter {
+ GF_FRAGMENTS = 2,
+ GF_STRONGHOST = 8,
+ GF_FRAGCACHE = 9
+} GLOBAL_FILTER,*PGLOBAL_FILTER;
+typedef enum _PfAddresType {
+ PF_IPV4,
+ PF_IPV6
+} PFADDRESSTYPE,*PPFADDRESSTYPE;
+typedef enum _PfForwardAction {
+ PF_ACTION_FORWARD = 0,
+ PF_ACTION_DROP
+} PFFORWARD_ACTION,*PPFFORWARD_ACTION;
+typedef enum _PfFrameType {
+ PFFT_FILTER = 1,
+ PFFT_FRAG = 2,
+ PFFT_SPOOF = 3
+} PFFRAMETYPE,*PPFFRAMETYPE;
+#endif /* (_WIN32_WINNT >= 0x0500) */
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/guiddef.h b/tcc/include/winapi/guiddef.h
new file mode 100644
index 0000000..4e7909a
--- /dev/null
+++ b/tcc/include/winapi/guiddef.h
@@ -0,0 +1,156 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+#ifndef GUID_DEFINED
+#define GUID_DEFINED
+typedef struct _GUID {
+ unsigned long Data1;
+ unsigned short Data2;
+ unsigned short Data3;
+ unsigned char Data4[8 ];
+} GUID;
+#endif
+
+#ifndef UUID_DEFINED
+#define UUID_DEFINED
+typedef GUID UUID;
+#endif
+
+#ifndef FAR
+#define FAR
+#endif
+
+#ifndef DECLSPEC_SELECTANY
+#define DECLSPEC_SELECTANY __declspec(selectany)
+#endif
+
+#ifndef EXTERN_C
+#ifdef __cplusplus
+#define EXTERN_C extern "C"
+#else
+#define EXTERN_C extern
+#endif
+#endif
+
+#ifdef DEFINE_GUID
+#undef DEFINE_GUID
+#endif
+
+#ifdef INITGUID
+#ifdef __cplusplus
+#define DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) EXTERN_C const GUID DECLSPEC_SELECTANY name = { l,w1,w2,{ b1,b2,b3,b4,b5,b6,b7,b8 } }
+#else
+#define DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) const GUID DECLSPEC_SELECTANY name = { l,w1,w2,{ b1,b2,b3,b4,b5,b6,b7,b8 } }
+#endif
+#else
+#define DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) EXTERN_C const GUID name
+#endif
+
+#define DEFINE_OLEGUID(name,l,w1,w2) DEFINE_GUID(name,l,w1,w2,0xC0,0,0,0,0,0,0,0x46)
+
+#ifndef _GUIDDEF_H_
+#define _GUIDDEF_H_
+
+#ifndef __LPGUID_DEFINED__
+#define __LPGUID_DEFINED__
+typedef GUID *LPGUID;
+#endif
+
+#ifndef __LPCGUID_DEFINED__
+#define __LPCGUID_DEFINED__
+typedef const GUID *LPCGUID;
+#endif
+
+#ifndef __IID_DEFINED__
+#define __IID_DEFINED__
+
+typedef GUID IID;
+typedef IID *LPIID;
+#define IID_NULL GUID_NULL
+#define IsEqualIID(riid1,riid2) IsEqualGUID(riid1,riid2)
+typedef GUID CLSID;
+typedef CLSID *LPCLSID;
+#define CLSID_NULL GUID_NULL
+#define IsEqualCLSID(rclsid1,rclsid2) IsEqualGUID(rclsid1,rclsid2)
+typedef GUID FMTID;
+typedef FMTID *LPFMTID;
+#define FMTID_NULL GUID_NULL
+#define IsEqualFMTID(rfmtid1,rfmtid2) IsEqualGUID(rfmtid1,rfmtid2)
+
+#ifdef __midl_proxy
+#define __MIDL_CONST
+#else
+#define __MIDL_CONST const
+#endif
+
+#ifndef _REFGUID_DEFINED
+#define _REFGUID_DEFINED
+#ifdef __cplusplus
+#define REFGUID const GUID &
+#else
+#define REFGUID const GUID *__MIDL_CONST
+#endif
+#endif
+
+#ifndef _REFIID_DEFINED
+#define _REFIID_DEFINED
+#ifdef __cplusplus
+#define REFIID const IID &
+#else
+#define REFIID const IID *__MIDL_CONST
+#endif
+#endif
+
+#ifndef _REFCLSID_DEFINED
+#define _REFCLSID_DEFINED
+#ifdef __cplusplus
+#define REFCLSID const IID &
+#else
+#define REFCLSID const IID *__MIDL_CONST
+#endif
+#endif
+
+#ifndef _REFFMTID_DEFINED
+#define _REFFMTID_DEFINED
+#ifdef __cplusplus
+#define REFFMTID const IID &
+#else
+#define REFFMTID const IID *__MIDL_CONST
+#endif
+#endif
+#endif
+
+#ifndef _SYS_GUID_OPERATORS_
+#define _SYS_GUID_OPERATORS_
+#include <string.h>
+
+#ifdef __cplusplus
+__inline int InlineIsEqualGUID(REFGUID rguid1,REFGUID rguid2) {
+ return (((unsigned long *) &rguid1)[0]==((unsigned long *) &rguid2)[0] && ((unsigned long *) &rguid1)[1]==((unsigned long *) &rguid2)[1] &&
+ ((unsigned long *) &rguid1)[2]==((unsigned long *) &rguid2)[2] && ((unsigned long *) &rguid1)[3]==((unsigned long *) &rguid2)[3]);
+}
+__inline int IsEqualGUID(REFGUID rguid1,REFGUID rguid2) { return !memcmp(&rguid1,&rguid2,sizeof(GUID)); }
+#else
+#define InlineIsEqualGUID(rguid1,rguid2) (((unsigned long *) rguid1)[0]==((unsigned long *) rguid2)[0] && ((unsigned long *) rguid1)[1]==((unsigned long *) rguid2)[1] && ((unsigned long *) rguid1)[2]==((unsigned long *) rguid2)[2] && ((unsigned long *) rguid1)[3]==((unsigned long *) rguid2)[3])
+#define IsEqualGUID(rguid1,rguid2) (!memcmp(rguid1,rguid2,sizeof(GUID)))
+#endif
+
+#ifdef __INLINE_ISEQUAL_GUID
+#undef IsEqualGUID
+#define IsEqualGUID(rguid1,rguid2) InlineIsEqualGUID(rguid1,rguid2)
+#endif
+
+#define IsEqualIID(riid1,riid2) IsEqualGUID(riid1,riid2)
+#define IsEqualCLSID(rclsid1,rclsid2) IsEqualGUID(rclsid1,rclsid2)
+
+#if !defined _SYS_GUID_OPERATOR_EQ_ && !defined _NO_SYS_GUID_OPERATOR_EQ_
+#define _SYS_GUID_OPERATOR_EQ_
+#ifdef __cplusplus
+__inline int operator==(REFGUID guidOne,REFGUID guidOther) { return IsEqualGUID(guidOne,guidOther); }
+__inline int operator!=(REFGUID guidOne,REFGUID guidOther) { return !(guidOne==guidOther); }
+#endif
+#endif
+#endif
+#endif
diff --git a/tcc/include/winapi/httpext.h b/tcc/include/winapi/httpext.h
new file mode 100644
index 0000000..b1be908
--- /dev/null
+++ b/tcc/include/winapi/httpext.h
@@ -0,0 +1,98 @@
+/*
+ httpext.h - Header for ISAPI extensions.
+
+ This file is part of a free library for the Win32 API.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+*/
+
+#ifndef _HTTPEXT_H
+#define _HTTPEXT_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#include <windows.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define HSE_VERSION_MAJOR 2
+#define HSE_VERSION_MINOR 0
+#define HSE_LOG_BUFFER_LEN 80
+#define HSE_MAX_EXT_DLL_NAME_LEN 256
+#define HSE_STATUS_SUCCESS 1
+#define HSE_STATUS_SUCCESS_AND_KEEP_CONN 2
+#define HSE_STATUS_PENDING 3
+#define HSE_STATUS_ERROR 4
+#define HSE_REQ_BASE 0
+#define HSE_REQ_SEND_URL_REDIRECT_RESP 1
+#define HSE_REQ_SEND_URL 2
+#define HSE_REQ_SEND_RESPONSE_HEADER 3
+#define HSE_REQ_DONE_WITH_SESSION 4
+#define HSE_REQ_SEND_RESPONSE_HEADER_EX 1016
+#define HSE_REQ_END_RESERVED 1000
+#define HSE_TERM_ADVISORY_UNLOAD 0x00000001
+#define HSE_TERM_MUST_UNLOAD 0x00000002
+#define HSE_IO_SYNC 0x00000001
+#define HSE_IO_ASYNC 0x00000002
+#define HSE_IO_DISCONNECT_AFTER_SEND 0x00000004
+#define HSE_IO_SEND_HEADERS 0x00000008
+typedef LPVOID HCONN;
+typedef struct _HSE_VERSION_INFO {
+ DWORD dwExtensionVersion;
+ CHAR lpszExtensionDesc[HSE_MAX_EXT_DLL_NAME_LEN];
+} HSE_VERSION_INFO, *LPHSE_VERSION_INFO;
+typedef struct _EXTENSION_CONTROL_BLOCK {
+ DWORD cbSize;
+ DWORD dwVersion;
+ HCONN ConnID;
+ DWORD dwHttpStatusCode;
+ CHAR lpszLogData[HSE_LOG_BUFFER_LEN];
+ LPSTR lpszMethod;
+ LPSTR lpszQueryString;
+ LPSTR lpszPathInfo;
+ LPSTR lpszPathTranslated;
+ DWORD cbTotalBytes;
+ DWORD cbAvailable;
+ LPBYTE lpbData;
+ LPSTR lpszContentType;
+ BOOL (PASCAL *GetServerVariable)(HCONN,LPSTR,LPVOID,LPDWORD);
+ BOOL (PASCAL *WriteClient)(HCONN,LPVOID,LPDWORD,DWORD);
+ BOOL (PASCAL *ReadClient)(HCONN,LPVOID,LPDWORD);
+ BOOL (PASCAL *ServerSupportFunction)(HCONN,DWORD,LPVOID,LPDWORD,LPDWORD);
+} EXTENSION_CONTROL_BLOCK, *LPEXTENSION_CONTROL_BLOCK;
+typedef BOOL (PASCAL *PFN_GETEXTENSIONVERSION)(HSE_VERSION_INFO*);
+typedef DWORD (PASCAL *PFN_HTTPEXTENSIONPROC)(EXTENSION_CONTROL_BLOCK*);
+typedef BOOL (PASCAL *PFN_TERMINATEEXTENSION)(DWORD);
+typedef VOID (PASCAL *PFN_HSE_IO_COMPLETION)(EXTENSION_CONTROL_BLOCK*,PVOID,DWORD,DWORD);
+typedef struct _HSE_TF_INFO {
+ PFN_HSE_IO_COMPLETION pfnHseIO;
+ PVOID pContext;
+ HANDLE hFile;
+ LPCSTR pszStatusCode;
+ DWORD BytesToWrite;
+ DWORD Offset;
+ PVOID pHead;
+ DWORD HeadLength;
+ PVOID pTail;
+ DWORD TailLength;
+ DWORD dwFlags;
+} HSE_TF_INFO, *LPHSE_TF_INFO;
+typedef struct _HSE_SEND_HEADER_EX_INFO {
+ LPCSTR pszStatus;
+ LPCSTR pszHeader;
+ DWORD cchStatus;
+ DWORD cchHeader;
+ BOOL fKeepConn;
+} HSE_SEND_HEADER_EX_INFO, * LPHSE_SEND_HEADER_EX_INF;
+BOOL PASCAL GetExtensionVersion(HSE_VERSION_INFO*);
+DWORD PASCAL HttpExtensionProc(EXTENSION_CONTROL_BLOCK*);
+BOOL PASCAL TerminateExtension(DWORD);
+#ifdef __cplusplus
+}
+#endif
+#endif /* _HTTPEXT_H */
diff --git a/tcc/include/winapi/icm.h b/tcc/include/winapi/icm.h
new file mode 100755
index 0000000..a18c8e5
--- /dev/null
+++ b/tcc/include/winapi/icm.h
@@ -0,0 +1,399 @@
+#ifndef _ICM_H
+#define _ICM_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if (_WIN32_WINDOWS >= 0x0410 || _WIN32_WINNT >= 0x0500)
+#define MAX_COLOR_CHANNELS 8
+#define PROFILE_FILENAME 1
+#define PROFILE_MEMBUFFER 2
+#define PROFILE_READ 1
+#define PROFILE_READWRITE 2
+#define CLASS_SCANNER 0x73636E72
+#define CLASS_MONITOR 0x6D6E7472
+#define CLASS_PRINTER 0x70727472
+#define CLASS_LINK 0x6C696E6B
+#define CLASS_COLORSPAC 0x73706163
+#define CLASS_ABSTRACT 0x61627374
+#define CLASS_NAMED 0x6E6D636C
+#define SPACE_XYZ 0x58595A20
+#define SPACE_Lab 0x4C616220
+#define SPACE_Luv 0x4C757620
+#define SPACE_YCbCr 0x59436272
+#define SPACE_Yxy 0x59787920
+#define SPACE_RGB 0x52474220
+#define SPACE_GRAY 0x47524159
+#define SPACE_HSV 0x48535620
+#define SPACE_HLS 0x484C5320
+#define SPACE_CMYK 0x434D594B
+#define SPACE_CMY 0x434D5920
+#define SPACE_2_CHANNEL 0x32434C52
+#define SPACE_3_CHANNEL 0x33434C52
+#define SPACE_4_CHANNEL 0x34434C52
+#define SPACE_5_CHANNEL 0x35434C52
+#define SPACE_6_CHANNEL 0x36434C52
+#define SPACE_7_CHANNEL 0x37434C52
+#define SPACE_8_CHANNEL 0x38434C52
+#define FLAG_EMBEDDEDPROFILE 1
+#define FLAG_DEPENDENTONDATA 2
+#define ATTRIB_TRANSPARENCY 1
+#define ATTRIB_MATTE 2
+#define INTENT_PERCEPTUAL 0
+#define INTENT_RELATIVE_COLORIMETRIC 1
+#define INTENT_SATURATION 2
+#define INTENT_ABSOLUTE_COLORIMETRIC 3
+#define COLOR_MATCH_VERSION 0x200
+#define CMS_DISABLEICM 0x1
+#define CMS_ENABLEPROOFING 0x2
+#define CMS_SETRENDERINTENT 0x4
+#define CMS_SETPROOFINTENT 0x8
+#define CMS_SETMONITORPROFILE 0x10
+#define CMS_SETPRINTERPROFILE 0x20
+#define CMS_SETTARGETPROFILE 0x40
+#define CMS_USEHOOK 0x80
+#define CMS_USEAPPLYCALLBACK 0x100
+#define CMS_USEDESCRIPTION 0x200
+#define CMS_TARGETOVERFLOW 0x20000000
+#define CMS_PRINTERROVERFLOW 0x40000000
+#define CMS_MONITOROVERFLOW 0x80000000
+
+DECLARE_HANDLE(HPROFILE);
+typedef HPROFILE *PHPROFILE,*LPHPROFILE;
+DECLARE_HANDLE(HTRANSFORM);\
+
+typedef BOOL (CALLBACK *PBMCALLBACKFN)(ULONG,ULONG,LPARAM);
+struct _tagCOLORMATCHSETUPA;
+struct _tagCOLORMATCHSETUPW;
+typedef BOOL (CALLBACK *PCMSCALLBACKA)(struct _tagCOLORMATCHSETUPA*,LPARAM);
+typedef BOOL (CALLBACK *PCMSCALLBACKW)(struct _tagCOLORMATCHSETUPW*,LPARAM);
+
+typedef CHAR COLOR_NAME[32];
+typedef COLOR_NAME *PCOLOR_NAME,*LPCOLOR_NAME;
+typedef DWORD TAGTYPE,*PTAGTYPE,*LPTAGTYPE;
+typedef enum
+{
+ BM_x555RGB = 0x0000,
+ BM_x555XYZ = 0x0101,
+ BM_x555Yxy,
+ BM_x555Lab,
+ BM_x555G3CH,
+ BM_RGBTRIPLETS = 0x0002,
+ BM_BGRTRIPLETS = 0x0004,
+ BM_XYZTRIPLETS = 0x0201,
+ BM_YxyTRIPLETS,
+ BM_LabTRIPLETS,
+ BM_G3CHTRIPLETS,
+ BM_5CHANNEL,
+ BM_6CHANNEL,
+ BM_7CHANNEL,
+ BM_8CHANNEL,
+ BM_GRAY,
+ BM_xRGBQUADS = 0x0008,
+ BM_xBGRQUADS = 0x0010,
+ BM_xG3CHQUADS = 0x0304,
+ BM_KYMCQUADS,
+ BM_CMYKQUADS = 0x0020,
+ BM_10b_RGB = 0x0009,
+ BM_10b_XYZ = 0x0401,
+ BM_10b_Yxy,
+ BM_10b_Lab,
+ BM_10b_G3CH,
+ BM_NAMED_INDEX,
+ BM_16b_RGB = 0x000A,
+ BM_16b_XYZ = 0x0501,
+ BM_16b_Yxy,
+ BM_16b_Lab,
+ BM_16b_G3CH,
+ BM_16b_GRAY,
+ BM_565RGB = 0x0001
+} BMFORMAT,*PBMFORMAT,*LPBMFORMAT;
+typedef enum
+{
+ COLOR_GRAY = 1,
+ COLOR_RGB,
+ COLOR_XYZ,
+ COLOR_Yxy,
+ COLOR_Lab,
+ COLOR_3_CHANNEL,
+ COLOR_CMYK,
+ COLOR_5_CHANNEL,
+ COLOR_6_CHANNEL,
+ COLOR_7_CHANNEL,
+ COLOR_8_CHANNEL,
+ COLOR_NAMED
+} COLORTYPE,*PCOLORTYPE,*LPCOLORTYPE;
+struct GRAYCOLOR {
+ WORD gray;
+};
+struct RGBCOLOR {
+ WORD red;
+ WORD green;
+ WORD blue;
+};
+struct CMYKCOLOR {
+ WORD cyan;
+ WORD magenta;
+ WORD yellow;
+ WORD black;
+};
+struct XYZCOLOR {
+ WORD X;
+ WORD Y;
+ WORD Z;
+};
+struct YxyCOLOR {
+ WORD Y;
+ WORD x;
+ WORD y;
+};
+struct LabCOLOR {
+ WORD L;
+ WORD a;
+ WORD b;
+};
+struct GENERIC3CHANNEL {
+ WORD ch1;
+ WORD ch2;
+ WORD ch3;
+};
+struct NAMEDCOLOR {
+ DWORD dwIndex;
+};
+struct HiFiCOLOR {
+ BYTE channel[MAX_COLOR_CHANNELS];
+};
+typedef union tagCOLOR {
+ struct GRAYCOLOR gray;
+ struct RGBCOLOR rgb;
+ struct CMYKCOLOR cmyk;
+ struct XYZCOLOR XYZ;
+ struct YxyCOLOR Yxy;
+ struct LabCOLOR Lab;
+ struct GENERIC3CHANNEL gen3ch;
+ struct NAMEDCOLOR named;
+ struct HiFiCOLOR hifi;
+} COLOR,*PCOLOR,*LPCOLOR;
+typedef struct _tagCOLORMATCHSETUPA {
+ DWORD dwSize;
+ DWORD dwVersion;
+ DWORD dwFlags;
+ HWND hwndOwner;
+ PCSTR pSourceName;
+ PCSTR pDisplayName;
+ PCSTR pPrinterName;
+ DWORD dwRenderIntent;
+ DWORD dwProofingIntent;
+ PSTR pMonitorProfile;
+ DWORD ccMonitorProfile;
+ PSTR pPrinterProfile;
+ DWORD ccPrinterProfile;
+ PSTR pTargetProfile;
+ DWORD ccTargetProfile;
+ DLGPROC lpfnHook;
+ LPARAM lParam;
+ PCMSCALLBACKA lpfnApplyCallback;
+ LPARAM lParamApplyCallback;
+} COLORMATCHSETUPA,*PCOLORMATCHSETUPA,*LPCOLORMATCHSETUPA;
+typedef struct _tagCOLORMATCHSETUPW {
+ DWORD dwSize;
+ DWORD dwVersion;
+ DWORD dwFlags;
+ HWND hwndOwner;
+ PCWSTR pSourceName;
+ PCWSTR pDisplayName;
+ PCWSTR pPrinterName;
+ DWORD dwRenderIntent;
+ DWORD dwProofingIntent;
+ PWSTR pMonitorProfile;
+ DWORD ccMonitorProfile;
+ PWSTR pPrinterProfile;
+ DWORD ccPrinterProfile;
+ PWSTR pTargetProfile;
+ DWORD ccTargetProfile;
+ DLGPROC lpfnHook;
+ LPARAM lParam;
+ PCMSCALLBACKW lpfnApplyCallback;
+ LPARAM lParamApplyCallback;
+} COLORMATCHSETUPW,*PCOLORMATCHSETUPW,*LPCOLORMATCHSETUPW;
+typedef struct tagENUMTYPEW {
+ DWORD dwSize;
+ DWORD dwVersion;
+ DWORD dwFields;
+ PCWSTR pDeviceName;
+ DWORD dwMediaType;
+ DWORD dwDitheringMode;
+ DWORD dwResolution[2];
+ DWORD dwCMMType;
+ DWORD dwClass;
+ DWORD dwDataColorSpace;
+ DWORD dwConnectionSpace;
+ DWORD dwSignature;
+ DWORD dwPlatform;
+ DWORD dwProfileFlags;
+ DWORD dwManufacturer;
+ DWORD dwModel;
+ DWORD dwAttributes[2];
+ DWORD dwRenderingIntent;
+ DWORD dwCreator;
+ DWORD dwDeviceClass;
+} ENUMTYPEW,*PENUMTYPEW,*LPENUMTYPEW;
+typedef struct tagENUMTYPEA {
+ DWORD dwSize;
+ DWORD dwVersion;
+ DWORD dwFields;
+ PCSTR pDeviceName;
+ DWORD dwMediaType;
+ DWORD dwDitheringMode;
+ DWORD dwResolution[2];
+ DWORD dwCMMType;
+ DWORD dwClass;
+ DWORD dwDataColorSpace;
+ DWORD dwConnectionSpace;
+ DWORD dwSignature;
+ DWORD dwPlatform;
+ DWORD dwProfileFlags;
+ DWORD dwManufacturer;
+ DWORD dwModel;
+ DWORD dwAttributes[2];
+ DWORD dwRenderingIntent;
+ DWORD dwCreator;
+ DWORD dwDeviceClass;
+} ENUMTYPEA,*PENUMTYPEA,*LPENUMTYPEA;
+typedef struct tagNAMED_PROFILE_INFO{
+ DWORD dwFlags;
+ DWORD dwCount;
+ DWORD dwCountDevCoordinates;
+ COLOR_NAME szPrefix;
+ COLOR_NAME szSuffix;
+} NAMED_PROFILE_INFO,*PNAMED_PROFILE_INFO,*LPNAMED_PROFILE_INFO;
+typedef struct tagPROFILE {
+ DWORD dwType;
+ PVOID pProfileData;
+ DWORD cbDataSize;
+} PROFILE,*PPROFILE,*LPPROFILE;
+typedef struct tagPROFILEHEADER {
+ DWORD phSize;
+ DWORD phCMMType;
+ DWORD phVersion;
+ DWORD phClass;
+ DWORD phDataColorSpace;
+ DWORD phConnectionSpace;
+ DWORD phDateTime[3];
+ DWORD phSignature;
+ DWORD phPlatform;
+ DWORD phProfileFlags;
+ DWORD phManufacturer;
+ DWORD phModel;
+ DWORD phAttributes[2];
+ DWORD phRenderingIntent;
+ CIEXYZ phIlluminant;
+ DWORD phCreator;
+ BYTE phReserved[44];
+} PROFILEHEADER,*PPROFILEHEADER,*LPPROFILEHEADER;
+
+BOOL WINAPI AssociateColorProfileWithDeviceA(PCSTR,PCSTR,PCSTR);
+BOOL WINAPI AssociateColorProfileWithDeviceW(PCWSTR,PCWSTR,PCWSTR);
+BOOL WINAPI CheckBitmapBits(HTRANSFORM,PVOID,BMFORMAT,DWORD,DWORD,DWORD,PBYTE,PBMCALLBACKFN,LPARAM);
+BOOL WINAPI CheckColors(HTRANSFORM,PCOLOR,DWORD,COLORTYPE,PBYTE);
+BOOL WINAPI CloseColorProfile(HPROFILE);
+BOOL WINAPI ConvertColorNameToIndex(HPROFILE,PCOLOR_NAME,PDWORD,DWORD);
+BOOL WINAPI ConvertIndexToColorName(HPROFILE,PDWORD,PCOLOR_NAME,DWORD);
+HTRANSFORM WINAPI CreateColorTransformA(LPLOGCOLORSPACEA,HPROFILE,HPROFILE,DWORD);
+HTRANSFORM WINAPI CreateColorTransformW(LPLOGCOLORSPACEW,HPROFILE,HPROFILE,DWORD);
+BOOL WINAPI CreateDeviceLinkProfile(PHPROFILE,DWORD,PDWORD,DWORD,DWORD,PBYTE*,DWORD);
+HTRANSFORM WINAPI CreateMultiProfileTransform(PHPROFILE,DWORD,PDWORD,DWORD,DWORD,DWORD);
+BOOL WINAPI CreateProfileFromLogColorSpaceA(LPLOGCOLORSPACEA,PBYTE*);
+BOOL WINAPI CreateProfileFromLogColorSpaceW(LPLOGCOLORSPACEW,PBYTE*);
+BOOL WINAPI DeleteColorTransform(HTRANSFORM);
+BOOL WINAPI DisassociateColorProfileFromDeviceA(PCSTR,PCSTR,PCSTR);
+BOOL WINAPI DisassociateColorProfileFromDeviceW(PCWSTR,PCWSTR,PCWSTR);
+BOOL WINAPI EnumColorProfilesA(PCSTR,PENUMTYPEA,PBYTE,PDWORD,PDWORD);
+BOOL WINAPI EnumColorProfilesW(PCWSTR,PENUMTYPEW,PBYTE,PDWORD,PDWORD);
+DWORD WINAPI GetCMMInfo(HTRANSFORM,DWORD);
+BOOL WINAPI GetColorDirectoryA(PCSTR,PSTR,PDWORD);
+BOOL WINAPI GetColorDirectoryW(PCWSTR,PWSTR,PDWORD);
+BOOL WINAPI GetColorProfileElement(HPROFILE,TAGTYPE,DWORD,PDWORD,PVOID,PBOOL);
+BOOL WINAPI GetColorProfileElementTag(HPROFILE,DWORD,PTAGTYPE);
+BOOL WINAPI GetColorProfileFromHandle(HPROFILE,PBYTE,PDWORD);
+BOOL WINAPI GetColorProfileHeader(HPROFILE,PPROFILEHEADER);
+BOOL WINAPI GetCountColorProfileElements(HPROFILE,PDWORD);
+BOOL WINAPI GetNamedProfileInfo(HPROFILE,PNAMED_PROFILE_INFO);
+BOOL WINAPI GetPS2ColorRenderingDictionary(HPROFILE,DWORD,PBYTE,PDWORD,PBOOL);
+BOOL WINAPI GetPS2ColorRenderingIntent(HPROFILE,DWORD,PBYTE,PDWORD);
+BOOL WINAPI GetPS2ColorSpaceArray(HPROFILE,DWORD,DWORD,PBYTE,PDWORD,PBOOL);
+BOOL WINAPI GetStandardColorSpaceProfileA(PCSTR,DWORD,PSTR,PDWORD);
+BOOL WINAPI GetStandardColorSpaceProfileW(PCWSTR,DWORD,PWSTR,PDWORD);
+BOOL WINAPI InstallColorProfileA(PCSTR,PCSTR);
+BOOL WINAPI InstallColorProfileW(PCWSTR,PCWSTR);
+BOOL WINAPI IsColorProfileTagPresent(HPROFILE,TAGTYPE,PBOOL);
+BOOL WINAPI IsColorProfileValid(HPROFILE,PBOOL);
+HPROFILE WINAPI OpenColorProfileA(PPROFILE,DWORD,DWORD,DWORD);
+HPROFILE WINAPI OpenColorProfileW(PPROFILE,DWORD,DWORD,DWORD);
+BOOL WINAPI RegisterCMMA(PCSTR,DWORD,PCSTR);
+BOOL WINAPI RegisterCMMW(PCWSTR,DWORD,PCWSTR);
+BOOL WINAPI SelectCMM(DWORD);
+BOOL WINAPI SetColorProfileElement(HPROFILE,TAGTYPE,DWORD,PDWORD,PVOID);
+BOOL WINAPI SetColorProfileElementReference(HPROFILE,TAGTYPE,TAGTYPE);
+BOOL WINAPI SetColorProfileElementSize(HPROFILE,TAGTYPE,DWORD);
+BOOL WINAPI SetColorProfileHeader(HPROFILE,PPROFILEHEADER);
+BOOL WINAPI SetStandardColorSpaceProfileA(PCSTR,DWORD,PCSTR);
+BOOL WINAPI SetStandardColorSpaceProfileW(PCWSTR,DWORD,PCSTR);
+BOOL WINAPI SetupColorMatchingA(PCOLORMATCHSETUPA);
+BOOL WINAPI SetupColorMatchingW(PCOLORMATCHSETUPW);
+BOOL WINAPI TranslateBitmapBits(HTRANSFORM,PVOID,BMFORMAT,DWORD,DWORD,DWORD,PVOID,BMFORMAT,DWORD,PBMCALLBACKFN,ULONG);
+BOOL WINAPI TranslateColors(HTRANSFORM,PCOLOR,DWORD,COLORTYPE,PCOLOR,COLORTYPE);
+BOOL WINAPI UninstallColorProfileA(PCSTR,PCSTR,BOOL);
+BOOL WINAPI UninstallColorProfileW(PCWSTR,PCWSTR,BOOL);
+BOOL WINAPI UnregisterCMMA(PCSTR,DWORD);
+BOOL WINAPI UnregisterCMMW(PCWSTR,DWORD);
+
+#ifdef UNICODE
+typedef PCMSCALLBACKW PCMSCALLBACK;
+typedef COLORMATCHSETUPW COLORMATCHSETUP,*PCOLORMATCHSETUP,*LPCOLORMATCHSETUP;
+typedef ENUMTYPEW ENUMTYPE,*PENUMTYPE,*LPENUMTYPE;
+#define AssociateColorProfileWithDevice AssociateColorProfileWithDeviceW
+#define CreateColorTransform CreateColorTransformW
+#define CreateProfileFromLogColorSpace CreateProfileFromLogColorSpaceW
+#define DisassociateColorProfileFromDevice DisassociateColorProfileFromDeviceW
+#define EnumColorProfiles EnumColorProfilesW
+#define GetColorDirectory GetColorDirectoryW
+#define GetStandardColorSpaceProfile GetStandardColorSpaceProfileW
+#define InstallColorProfile InstallColorProfileW
+#define OpenColorProfile OpenColorProfileW
+#define RegisterCMM RegisterCMMW
+#define SetStandardColorSpaceProfile SetStandardColorSpaceProfileW
+#define SetupColorMatching SetupColorMatchingW
+#define UninstallColorProfile UninstallColorProfileW
+#define UnregisterCMM UnregisterCMMW
+#else /* UNICODE */
+typedef PCMSCALLBACKA PCMSCALLBACK;
+typedef COLORMATCHSETUPA COLORMATCHSETUP,*PCOLORMATCHSETUP,*LPCOLORMATCHSETUP;
+typedef ENUMTYPEA ENUMTYPE,*PENUMTYPE,*LPENUMTYPE;
+#define AssociateColorProfileWithDevice AssociateColorProfileWithDeviceA
+#define CreateColorTransform CreateColorTransformA
+#define CreateProfileFromLogColorSpace CreateProfileFromLogColorSpaceA
+#define DisassociateColorProfileFromDevice DisassociateColorProfileFromDeviceA
+#define EnumColorProfiles EnumColorProfilesA
+#define GetColorDirectory GetColorDirectoryA
+#define GetStandardColorSpaceProfile GetStandardColorSpaceProfileA
+#define InstallColorProfile InstallColorProfileA
+#define OpenColorProfile OpenColorProfileA
+#define RegisterCMM RegisterCMMA
+#define SetStandardColorSpaceProfile SetStandardColorSpaceProfileA
+#define SetupColorMatching SetupColorMatchingA
+#define UninstallColorProfile UninstallColorProfileA
+#define UnregisterCMM UnregisterCMMA
+#endif /* !UNICODE */
+
+#endif /* (_WIN32_WINDOWS >= 0x0410 || _WIN32_WINNT >= 0x0500) */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _ICM_H */
diff --git a/tcc/include/winapi/idispids.h b/tcc/include/winapi/idispids.h
new file mode 100644
index 0000000..66585b4
--- /dev/null
+++ b/tcc/include/winapi/idispids.h
@@ -0,0 +1,10 @@
+#ifndef _IDISPIDS_H
+#define _IDISPIDS_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#define DISPID_AMBIENT_OFFLINEIFNOTCONNECTED (-5501)
+#define DISPID_AMBIENT_SILENT (-5502)
+
+#endif
diff --git a/tcc/include/winapi/il21dec.h b/tcc/include/winapi/il21dec.h
new file mode 100644
index 0000000..fea328e
--- /dev/null
+++ b/tcc/include/winapi/il21dec.h
@@ -0,0 +1,35 @@
+#ifndef _IL21DEC_H
+#define _IL21DEC_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--- DirectShow Reference - DirectShow Enumerated Types */
+typedef enum _AM_LINE21_CCLEVEL {
+ AM_L21_CCLEVEL_TC2
+} AM_LINE21_CCLEVEL,*PAM_LINE21_CCLEVEL;
+typedef enum _AM_LINE21_CCSERVICE {
+ AM_L21_CCSERVICE_None,
+ AM_L21_CCSERVICE_Caption1,
+ AM_L21_CCSERVICE_Caption2,
+ AM_L21_CCSERVICE_Text1,
+ AM_L21_CCSERVICE_Text2,
+ AM_L21_CCSERVICE_XDS,
+} AM_LINE21_CCSERVICE,*PAM_LINE21_CCSERVICE;
+typedef enum _AM_LINE21_CCSTATE {
+ AM_L21_CCSTATE_Off,
+ AM_L21_CCSTATE_On
+} AM_LINE21_CCSTATE,*PAM_LINE21_CCSTATE;
+typedef enum _AM_LINE21_DRAWBGMODE {
+ AM_L21_DRAWBGMODE_Opaque,
+ AM_L21_DRAWBGMODE_Transparent
+} AM_LINE21_DRAWBGMODE,*PAM_LINE21_DRAWBGMODE;
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/imagehlp.h b/tcc/include/winapi/imagehlp.h
new file mode 100644
index 0000000..448c51d
--- /dev/null
+++ b/tcc/include/winapi/imagehlp.h
@@ -0,0 +1,329 @@
+/*
+ imagehlp.h - Include file for IMAGEHLP.DLL APIs
+
+ Written by Mumit Khan <khan@nanotech.wisc.edu>
+
+ This file is part of a free library for the Win32 API.
+
+ NOTE: This strictly does not belong in the Win32 API since it's
+ really part of Platform SDK. However,GDB needs it and we might
+ as well provide it here.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+*/
+
+#ifndef _IMAGEHLP_H
+#define _IMAGEHLP_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define API_VERSION_NUMBER 7
+#define BIND_NO_BOUND_IMPORTS 0x00000001
+#define BIND_NO_UPDATE 0x00000002
+#define BIND_ALL_IMAGES 0x00000004
+#define BIND_CACHE_IMPORT_DLLS 0x00000008
+#define CBA_DEFERRED_SYMBOL_LOAD_START 1
+#define CBA_DEFERRED_SYMBOL_LOAD_COMPLETE 2
+#define CBA_DEFERRED_SYMBOL_LOAD_FAILURE 3
+#define CBA_SYMBOLS_UNLOADED 4
+#define CBA_DUPLICATE_SYMBOL 5
+#define CERT_PE_IMAGE_DIGEST_DEBUG_INFO 1
+#define CERT_PE_IMAGE_DIGEST_RESOURCES 2
+#define CERT_PE_IMAGE_DIGEST_ALL_IMPORT_INFO 4
+#define CERT_PE_IMAGE_DIGEST_NON_PE_INFO 8
+#define CERT_SECTION_TYPE_ANY 255
+#define CHECKSUM_SUCCESS 0
+#define CHECKSUM_OPEN_FAILURE 1
+#define CHECKSUM_MAP_FAILURE 2
+#define CHECKSUM_MAPVIEW_FAILURE 3
+#define CHECKSUM_UNICODE_FAILURE 4
+#define IMAGE_SEPARATION 65536
+#define SPLITSYM_REMOVE_PRIVATE 1
+#define SPLITSYM_EXTRACT_ALL 2
+#define SPLITSYM_SYMBOLPATH_IS_SRC 4
+#define SYMF_OMAP_GENERATED 1
+#define SYMF_OMAP_MODIFIED 2
+#define SYMOPT_CASE_INSENSITIVE 1
+#define SYMOPT_UNDNAME 2
+#define SYMOPT_DEFERRED_LOADS 4
+#define SYMOPT_NO_CPP 8
+#define SYMOPT_LOAD_LINES 16
+#define SYMOPT_OMAP_FIND_NEAREST 32
+#define UNDNAME_COMPLETE 0
+#define UNDNAME_NO_LEADING_UNDERSCORES 1
+#define UNDNAME_NO_MS_KEYWORDS 2
+#define UNDNAME_NO_FUNCTION_RETURNS 4
+#define UNDNAME_NO_ALLOCATION_MODEL 8
+#define UNDNAME_NO_ALLOCATION_LANGUAGE 16
+#define UNDNAME_NO_MS_THISTYPE 32
+#define UNDNAME_NO_CV_THISTYPE 64
+#define UNDNAME_NO_THISTYPE 96
+#define UNDNAME_NO_ACCESS_SPECIFIERS 128
+#define UNDNAME_NO_THROW_SIGNATURES 256
+#define UNDNAME_NO_MEMBER_TYPE 512
+#define UNDNAME_NO_RETURN_UDT_MODEL 1024
+#define UNDNAME_32_BIT_DECODE 2048
+#define UNDNAME_NAME_ONLY 4096
+#define UNDNAME_NO_ARGUMENTS 8192
+#define UNDNAME_NO_SPECIAL_SYMS 16384
+
+#define _IMAGEHLPAPI DECLSPEC_IMPORT WINAPI
+
+#ifndef RC_INVOKED
+
+typedef enum _IMAGEHLP_STATUS_REASON {
+ BindOutOfMemory,
+ BindRvaToVaFailed,
+ BindNoRoomInImage,
+ BindImportModuleFailed,
+ BindImportProcedureFailed,
+ BindImportModule,
+ BindImportProcedure,
+ BindForwarder,
+ BindForwarderNOT,
+ BindImageModified,
+ BindExpandFileHeaders,
+ BindImageComplete,
+ BindMismatchedSymbols,
+ BindSymbolsNotUpdated
+} IMAGEHLP_STATUS_REASON;
+typedef BOOL(STDCALL*PIMAGEHLP_STATUS_ROUTINE)(IMAGEHLP_STATUS_REASON,LPSTR,LPSTR,ULONG,ULONG);
+typedef struct _LOADED_IMAGE {
+ LPSTR ModuleName;
+ HANDLE hFile;
+ PUCHAR MappedAddress;
+ PIMAGE_NT_HEADERS FileHeader;
+ PIMAGE_SECTION_HEADER LastRvaSection;
+ ULONG NumberOfSections;
+ PIMAGE_SECTION_HEADER Sections;
+ ULONG Characteristics;
+ BOOLEAN fSystemImage;
+ BOOLEAN fDOSImage;
+ LIST_ENTRY Links;
+ ULONG SizeOfImage;
+} LOADED_IMAGE,*PLOADED_IMAGE;
+typedef struct _IMAGE_DEBUG_INFORMATION {
+ LIST_ENTRY List;
+ DWORD Size;
+ PVOID MappedBase;
+ USHORT Machine;
+ USHORT Characteristics;
+ DWORD CheckSum;
+ DWORD ImageBase;
+ DWORD SizeOfImage;
+ DWORD NumberOfSections;
+ PIMAGE_SECTION_HEADER Sections;
+ DWORD ExportedNamesSize;
+ LPSTR ExportedNames;
+ DWORD NumberOfFunctionTableEntries;
+ PIMAGE_FUNCTION_ENTRY FunctionTableEntries;
+ DWORD LowestFunctionStartingAddress;
+ DWORD HighestFunctionEndingAddress;
+ DWORD NumberOfFpoTableEntries;
+ PFPO_DATA FpoTableEntries;
+ DWORD SizeOfCoffSymbols;
+ PIMAGE_COFF_SYMBOLS_HEADER CoffSymbols;
+ DWORD SizeOfCodeViewSymbols;
+ PVOID CodeViewSymbols;
+ LPSTR ImageFilePath;
+ LPSTR ImageFileName;
+ LPSTR DebugFilePath;
+ DWORD TimeDateStamp;
+ BOOL RomImage;
+ PIMAGE_DEBUG_DIRECTORY DebugDirectory;
+ DWORD NumberOfDebugDirectories;
+ DWORD Reserved[3];
+} IMAGE_DEBUG_INFORMATION,*PIMAGE_DEBUG_INFORMATION;
+typedef enum {
+ AddrMode1616,
+ AddrMode1632,
+ AddrModeReal,
+ AddrModeFlat
+} ADDRESS_MODE;
+typedef struct _tagADDRESS {
+ DWORD Offset;
+ WORD Segment;
+ ADDRESS_MODE Mode;
+} ADDRESS,*LPADDRESS;
+typedef struct _KDHELP {
+ DWORD Thread;
+ DWORD ThCallbackStack;
+ DWORD NextCallback;
+ DWORD FramePointer;
+ DWORD KiCallUserMode;
+ DWORD KeUserCallbackDispatcher;
+ DWORD SystemRangeStart;
+} KDHELP,*PKDHELP;
+typedef struct _tagSTACKFRAME {
+ ADDRESS AddrPC;
+ ADDRESS AddrReturn;
+ ADDRESS AddrFrame;
+ ADDRESS AddrStack;
+ LPVOID FuncTableEntry;
+ DWORD Params[4];
+ BOOL Far;
+ BOOL Virtual;
+ DWORD Reserved[3];
+ KDHELP KdHelp;
+} STACKFRAME,*LPSTACKFRAME;
+typedef BOOL(STDCALL*PREAD_PROCESS_MEMORY_ROUTINE)(HANDLE ,LPCVOID,LPVOID,DWORD,LPDWORD);
+typedef LPVOID(STDCALL*PFUNCTION_TABLE_ACCESS_ROUTINE)(HANDLE,DWORD);
+typedef DWORD(STDCALL*PGET_MODULE_BASE_ROUTINE)(HANDLE,DWORD);
+typedef DWORD(STDCALL*PTRANSLATE_ADDRESS_ROUTINE)(HANDLE,HANDLE,LPADDRESS);
+typedef struct API_VERSION {
+ USHORT MajorVersion;
+ USHORT MinorVersion;
+ USHORT Revision;
+ USHORT Reserved;
+} API_VERSION,*LPAPI_VERSION;
+typedef BOOL(CALLBACK*PSYM_ENUMMODULES_CALLBACK)(LPSTR,ULONG,PVOID);
+typedef BOOL(CALLBACK*PSYM_ENUMSYMBOLS_CALLBACK)(LPSTR,ULONG,ULONG,PVOID);
+typedef BOOL(CALLBACK*PENUMLOADED_MODULES_CALLBACK)(LPSTR,ULONG,ULONG,PVOID);
+typedef BOOL(CALLBACK*PSYMBOL_REGISTERED_CALLBACK)(HANDLE,ULONG,PVOID,PVOID);
+typedef enum {
+ SymNone,
+ SymCoff,
+ SymCv,
+ SymPdb,
+ SymExport,
+ SymDeferred,
+ SymSym
+} SYM_TYPE;
+typedef struct _IMAGEHLP_SYMBOL {
+ DWORD SizeOfStruct;
+ DWORD Address;
+ DWORD Size;
+ DWORD Flags;
+ DWORD MaxNameLength;
+ CHAR Name[1];
+} IMAGEHLP_SYMBOL,*PIMAGEHLP_SYMBOL;
+typedef struct _IMAGEHLP_MODULE {
+ DWORD SizeOfStruct;
+ DWORD BaseOfImage;
+ DWORD ImageSize;
+ DWORD TimeDateStamp;
+ DWORD CheckSum;
+ DWORD NumSyms;
+ SYM_TYPE SymType;
+ CHAR ModuleName[32];
+ CHAR ImageName[256];
+ CHAR LoadedImageName[256];
+} IMAGEHLP_MODULE,*PIMAGEHLP_MODULE;
+typedef struct _IMAGEHLP_LINE {
+ DWORD SizeOfStruct;
+ DWORD Key;
+ DWORD LineNumber;
+ PCHAR FileName;
+ DWORD Address;
+} IMAGEHLP_LINE,*PIMAGEHLP_LINE;
+typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD {
+ DWORD SizeOfStruct;
+ DWORD BaseOfImage;
+ DWORD CheckSum;
+ DWORD TimeDateStamp;
+ CHAR FileName[MAX_PATH];
+ BOOLEAN Reparse;
+} IMAGEHLP_DEFERRED_SYMBOL_LOAD,*PIMAGEHLP_DEFERRED_SYMBOL_LOAD;
+typedef struct _IMAGEHLP_DUPLICATE_SYMBOL {
+ DWORD SizeOfStruct;
+ DWORD NumberOfDups;
+ PIMAGEHLP_SYMBOL Symbol;
+ ULONG SelectedSymbol;
+} IMAGEHLP_DUPLICATE_SYMBOL,*PIMAGEHLP_DUPLICATE_SYMBOL;
+typedef PVOID DIGEST_HANDLE;
+typedef BOOL(WINAPI*DIGEST_FUNCTION)(DIGEST_HANDLE refdata,PBYTE pData,DWORD dwLength);
+
+PIMAGE_NT_HEADERS _IMAGEHLPAPI CheckSumMappedFile(LPVOID,DWORD,LPDWORD,LPDWORD);
+DWORD _IMAGEHLPAPI MapFileAndCheckSumA(LPSTR,LPDWORD,LPDWORD);
+DWORD _IMAGEHLPAPI MapFileAndCheckSumW(PWSTR,LPDWORD,LPDWORD);
+BOOL _IMAGEHLPAPI TouchFileTimes(HANDLE,LPSYSTEMTIME);
+BOOL _IMAGEHLPAPI SplitSymbols(LPSTR,LPSTR,LPSTR,DWORD);
+HANDLE _IMAGEHLPAPI FindDebugInfoFile(LPSTR,LPSTR,LPSTR);
+HANDLE _IMAGEHLPAPI FindExecutableImage(LPSTR,LPSTR,LPSTR);
+BOOL _IMAGEHLPAPI UpdateDebugInfoFile(LPSTR,LPSTR,LPSTR,PIMAGE_NT_HEADERS);
+BOOL _IMAGEHLPAPI UpdateDebugInfoFileEx(LPSTR,LPSTR,LPSTR,PIMAGE_NT_HEADERS,DWORD);
+BOOL _IMAGEHLPAPI BindImage(/*IN*/ LPSTR,/*IN*/ LPSTR,/*IN*/ LPSTR);
+BOOL _IMAGEHLPAPI BindImageEx(/*IN*/ DWORD,/*IN*/ LPSTR,/*IN*/ LPSTR,/*IN*/ LPSTR,/*IN*/ PIMAGEHLP_STATUS_ROUTINE);
+BOOL _IMAGEHLPAPI ReBaseImage(/*IN*/ LPSTR,/*IN*/ LPSTR,/*IN*/ BOOL,/*IN*/ BOOL,/*IN*/ BOOL,/*IN*/ ULONG,/*OUT*/ ULONG*,/*OUT*/ ULONG*,/*OUT*/ ULONG*,/*IN OUT*/ ULONG*,/*IN*/ ULONG);
+
+PLOADED_IMAGE _IMAGEHLPAPI ImageLoad(LPSTR,LPSTR);
+BOOL _IMAGEHLPAPI ImageUnload(PLOADED_IMAGE);
+PIMAGE_NT_HEADERS _IMAGEHLPAPI ImageNtHeader(/*IN*/ PVOID);
+PVOID _IMAGEHLPAPI ImageDirectoryEntryToData(/*IN*/ PVOID,/*IN*/ BOOLEAN,/*IN*/ USHORT,/*OUT*/ PULONG);
+PIMAGE_SECTION_HEADER _IMAGEHLPAPI ImageRvaToSection(/*IN*/ PIMAGE_NT_HEADERS,/*IN*/ PVOID,/*IN*/ ULONG);
+PVOID _IMAGEHLPAPI ImageRvaToVa(/*IN*/ PIMAGE_NT_HEADERS,/*IN*/ PVOID,/*IN*/ ULONG,/*IN OUT*/ PIMAGE_SECTION_HEADER*);
+BOOL _IMAGEHLPAPI MapAndLoad(LPSTR,LPSTR,PLOADED_IMAGE,BOOL,BOOL);
+BOOL _IMAGEHLPAPI GetImageConfigInformation(PLOADED_IMAGE,PIMAGE_LOAD_CONFIG_DIRECTORY);
+DWORD _IMAGEHLPAPI GetImageUnusedHeaderBytes(PLOADED_IMAGE,LPDWORD);
+BOOL _IMAGEHLPAPI SetImageConfigInformation(PLOADED_IMAGE,PIMAGE_LOAD_CONFIG_DIRECTORY);
+BOOL _IMAGEHLPAPI UnMapAndLoad(PLOADED_IMAGE);
+PIMAGE_DEBUG_INFORMATION _IMAGEHLPAPI MapDebugInformation(HANDLE,LPSTR,LPSTR,DWORD);
+BOOL _IMAGEHLPAPI UnmapDebugInformation(PIMAGE_DEBUG_INFORMATION);
+HANDLE _IMAGEHLPAPI FindExecutableImage(LPSTR,LPSTR,LPSTR);
+BOOL _IMAGEHLPAPI SearchTreeForFile(LPSTR,LPSTR,LPSTR);
+BOOL _IMAGEHLPAPI MakeSureDirectoryPathExists(LPCSTR);
+DWORD _IMAGEHLPAPI WINAPI UnDecorateSymbolName(LPCSTR,LPSTR,DWORD, DWORD);
+BOOL
+_IMAGEHLPAPI
+StackWalk(DWORD,HANDLE,HANDLE,LPSTACKFRAME,LPVOID,PREAD_PROCESS_MEMORY_ROUTINE,PFUNCTION_TABLE_ACCESS_ROUTINE,PGET_MODULE_BASE_ROUTINE,PTRANSLATE_ADDRESS_ROUTINE);
+LPAPI_VERSION _IMAGEHLPAPI ImagehlpApiVersion(VOID);
+LPAPI_VERSION _IMAGEHLPAPI ImagehlpApiVersionEx(LPAPI_VERSION);
+DWORD _IMAGEHLPAPI GetTimestampForLoadedLibrary(HMODULE);
+BOOL _IMAGEHLPAPI RemovePrivateCvSymbolic(PCHAR,PCHAR*,ULONG*);
+VOID _IMAGEHLPAPI RemoveRelocations(PCHAR);
+DWORD _IMAGEHLPAPI SymSetOptions(/*IN*/ DWORD);
+DWORD _IMAGEHLPAPI SymGetOptions(VOID);
+BOOL _IMAGEHLPAPI SymCleanup(/*IN*/ HANDLE);
+BOOL _IMAGEHLPAPI SymEnumerateModules(/*IN*/ HANDLE,/*IN*/ PSYM_ENUMMODULES_CALLBACK,/*IN*/ PVOID);
+BOOL _IMAGEHLPAPI SymEnumerateSymbols(/*IN*/ HANDLE,/*IN*/ DWORD,/*IN*/ PSYM_ENUMSYMBOLS_CALLBACK,/*IN*/ PVOID);
+BOOL _IMAGEHLPAPI EnumerateLoadedModules(/*IN*/ HANDLE,/*IN*/ PENUMLOADED_MODULES_CALLBACK,/*IN*/ PVOID);
+LPVOID _IMAGEHLPAPI SymFunctionTableAccess(HANDLE,DWORD);
+BOOL _IMAGEHLPAPI SymGetModuleInfo(/*IN*/ HANDLE,/*IN*/ DWORD,/*OUT*/ PIMAGEHLP_MODULE);
+DWORD _IMAGEHLPAPI SymGetModuleBase(/*IN*/ HANDLE,/*IN*/ DWORD);
+BOOL _IMAGEHLPAPI SymGetSymFromAddr(/*IN*/ HANDLE,/*IN*/ DWORD,/*OUT*/ PDWORD,/*OUT*/ PIMAGEHLP_SYMBOL);
+BOOL _IMAGEHLPAPI SymGetSymFromName(/*IN*/ HANDLE,/*IN*/ LPSTR,/*OUT*/ PIMAGEHLP_SYMBOL);
+BOOL _IMAGEHLPAPI SymGetSymNext(/*IN*/ HANDLE,/*IN OUT*/ PIMAGEHLP_SYMBOL);
+BOOL _IMAGEHLPAPI SymGetSymPrev(/*IN*/ HANDLE,/*IN OUT*/ PIMAGEHLP_SYMBOL);
+BOOL _IMAGEHLPAPI SymGetLineFromAddr(/*IN*/ HANDLE,/*IN*/ DWORD,/*OUT*/ PDWORD,/*OUT*/ PIMAGEHLP_LINE);
+BOOL _IMAGEHLPAPI SymGetLineFromName(/*IN*/ HANDLE,/*IN*/ LPSTR,/*IN*/ LPSTR,/*IN*/ DWORD,/*OUT*/ PLONG,/*IN OUT*/ PIMAGEHLP_LINE);
+BOOL _IMAGEHLPAPI SymGetLineNext(/*IN*/ HANDLE,/*IN OUT*/ PIMAGEHLP_LINE);
+BOOL _IMAGEHLPAPI SymGetLinePrev(/*IN*/ HANDLE,/*IN OUT*/ PIMAGEHLP_LINE);
+BOOL _IMAGEHLPAPI SymMatchFileName(/*IN*/ LPSTR,/*IN*/ LPSTR,/*OUT*/ LPSTR*,/*OUT*/ LPSTR*);
+BOOL _IMAGEHLPAPI SymInitialize(/*IN*/ HANDLE,/*IN*/ LPSTR,/*IN*/ BOOL);
+BOOL _IMAGEHLPAPI SymGetSearchPath(/*IN*/ HANDLE,/*OUT*/ LPSTR,/*IN*/ DWORD);
+BOOL _IMAGEHLPAPI SymSetSearchPath(/*IN*/ HANDLE,/*IN*/ LPSTR);
+BOOL _IMAGEHLPAPI SymLoadModule(/*IN*/ HANDLE,/*IN*/ HANDLE,/*IN*/ PSTR,/*IN*/ PSTR,/*IN*/ DWORD,/*IN*/ DWORD);
+BOOL _IMAGEHLPAPI SymUnloadModule(/*IN*/ HANDLE,/*IN*/ DWORD);
+BOOL _IMAGEHLPAPI SymUnDName(/*IN*/ PIMAGEHLP_SYMBOL,/*OUT*/ LPSTR,/*IN*/ DWORD);
+BOOL _IMAGEHLPAPI SymRegisterCallback(/*IN*/ HANDLE,/*IN*/ PSYMBOL_REGISTERED_CALLBACK,/*IN*/ PVOID);
+BOOL _IMAGEHLPAPI ImageGetDigestStream(/*IN*/ HANDLE,/*IN*/ DWORD,/*IN*/ DIGEST_FUNCTION,/*IN*/ DIGEST_HANDLE);
+BOOL _IMAGEHLPAPI ImageAddCertificate(/*IN*/ HANDLE,/*IN*/ LPWIN_CERTIFICATE,/*OUT*/ PDWORD);
+BOOL _IMAGEHLPAPI ImageRemoveCertificate(/*IN*/ HANDLE,/*IN*/ DWORD);
+BOOL _IMAGEHLPAPI ImageEnumerateCertificates(/*IN*/ HANDLE,/*IN*/ WORD,/*OUT*/ PDWORD,/*IN OUT*/ PDWORD /*OPTIONAL*/,/*IN OUT*/ DWORD /*OPTIONAL*/);
+BOOL _IMAGEHLPAPI ImageGetCertificateData(/*IN*/ HANDLE,/*IN*/ DWORD,/*OUT*/ LPWIN_CERTIFICATE,/*IN OUT*/ PDWORD);
+BOOL _IMAGEHLPAPI ImageGetCertificateHeader(/*IN*/ HANDLE,/*IN*/ DWORD,/*IN OUT*/ LPWIN_CERTIFICATE);
+BOOL _IMAGEHLPAPI CopyPdb(CHAR const*,CHAR const*,BOOL);
+BOOL _IMAGEHLPAPI RemovePrivateCvSymbolicEx(PCHAR,ULONG,PCHAR*,ULONG*);
+
+#endif /* RC_INVOKED */
+
+#ifdef UNICODE
+#define MapFileAndCheckSum MapFileAndCheckSumW
+#else
+#define MapFileAndCheckSum MapFileAndCheckSumA
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _IMAGEHLP_H */
+
diff --git a/tcc/include/winapi/imm.h b/tcc/include/winapi/imm.h
new file mode 100644
index 0000000..4fb6905
--- /dev/null
+++ b/tcc/include/winapi/imm.h
@@ -0,0 +1,452 @@
+#ifndef _IMM_H
+#define _IMM_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#define WM_CONVERTREQUESTEX 0x108
+#define WM_IME_STARTCOMPOSITION 0x10D
+#define WM_IME_ENDCOMPOSITION 0x10E
+#define WM_IME_COMPOSITION 0x10F
+#define WM_IME_KEYLAST 0x10F
+#define WM_IME_SETCONTEXT 0x281
+#define WM_IME_NOTIFY 0x282
+#define WM_IME_CONTROL 0x283
+#define WM_IME_COMPOSITIONFULL 0x284
+#define WM_IME_SELECT 0x285
+#define WM_IME_CHAR 0x286
+#define WM_IME_KEYDOWN 0x290
+#define WM_IME_KEYUP 0x291
+#if (_WIN32_WINNT >= 0x0500)
+#define WM_IME_REQUEST 0x0288
+#endif
+#define IMC_GETCANDIDATEPOS 7
+#define IMC_SETCANDIDATEPOS 8
+#define IMC_GETCOMPOSITIONFONT 9
+#define IMC_SETCOMPOSITIONFONT 10
+#define IMC_GETCOMPOSITIONWINDOW 11
+#define IMC_SETCOMPOSITIONWINDOW 12
+#define IMC_GETSTATUSWINDOWPOS 15
+#define IMC_SETSTATUSWINDOWPOS 16
+#define IMC_CLOSESTATUSWINDOW 0x21
+#define IMC_OPENSTATUSWINDOW 0x22
+#define IMN_CLOSESTATUSWINDOW 1
+#define IMN_OPENSTATUSWINDOW 2
+#define IMN_CHANGECANDIDATE 3
+#define IMN_CLOSECANDIDATE 4
+#define IMN_OPENCANDIDATE 5
+#define IMN_SETCONVERSIONMODE 6
+#define IMN_SETSENTENCEMODE 7
+#define IMN_SETOPENSTATUS 8
+#define IMN_SETCANDIDATEPOS 9
+#define IMN_SETCOMPOSITIONFONT 10
+#define IMN_SETCOMPOSITIONWINDOW 11
+#define IMN_SETSTATUSWINDOWPOS 12
+#define IMN_GUIDELINE 13
+#define IMN_PRIVATE 14
+#define NI_OPENCANDIDATE 16
+#define NI_CLOSECANDIDATE 17
+#define NI_SELECTCANDIDATESTR 18
+#define NI_CHANGECANDIDATELIST 19
+#define NI_FINALIZECONVERSIONRESULT 20
+#define NI_COMPOSITIONSTR 21
+#define NI_SETCANDIDATE_PAGESTART 22
+#define NI_SETCANDIDATE_PAGESIZE 23
+#define NI_IMEMENUSELECTED 24
+#define ISC_SHOWUICANDIDATEWINDOW 1
+#define ISC_SHOWUICOMPOSITIONWINDOW 0x80000000
+#define ISC_SHOWUIGUIDELINE 0x40000000
+#define ISC_SHOWUIALLCANDIDATEWINDOW 15
+#define ISC_SHOWUIALL 0xC000000F
+#define CPS_COMPLETE 1
+#define CPS_CONVERT 2
+#define CPS_REVERT 3
+#define CPS_CANCEL 4
+#define IME_CHOTKEY_IME_NONIME_TOGGLE 16
+#define IME_CHOTKEY_SHAPE_TOGGLE 17
+#define IME_CHOTKEY_SYMBOL_TOGGLE 18
+#define IME_JHOTKEY_CLOSE_OPEN 0x30
+#define IME_KHOTKEY_SHAPE_TOGGLE 0x50
+#define IME_KHOTKEY_HANJACONVERT 0x51
+#define IME_KHOTKEY_ENGLISH 0x52
+#define IME_THOTKEY_IME_NONIME_TOGGLE 0x70
+#define IME_THOTKEY_SHAPE_TOGGLE 0x71
+#define IME_THOTKEY_SYMBOL_TOGGLE 0x72
+#define IME_HOTKEY_DSWITCH_FIRST 256
+#define IME_HOTKEY_DSWITCH_LAST 0x11F
+#define IME_ITHOTKEY_RESEND_RESULTSTR 512
+#define IME_ITHOTKEY_PREVIOUS_COMPOSITION 513
+#define IME_ITHOTKEY_UISTYLE_TOGGLE 514
+#define GCS_COMPREADSTR 1
+#define GCS_COMPREADATTR 2
+#define GCS_COMPREADCLAUSE 4
+#define GCS_COMPSTR 8
+#define GCS_COMPATTR 16
+#define GCS_COMPCLAUSE 32
+#define GCS_CURSORPOS 128
+#define GCS_DELTASTART 256
+#define GCS_RESULTREADSTR 512
+#define GCS_RESULTREADCLAUSE 1024
+#define GCS_RESULTSTR 2048
+#define GCS_RESULTCLAUSE 4096
+#define CS_INSERTCHAR 0x2000
+#define CS_NOMOVECARET 0x4000
+#define IMEVER_0310 0x3000A
+#define IMEVER_0400 0x40000
+#define IME_PROP_AT_CARET 0x10000
+#define IME_PROP_SPECIAL_UI 0x20000
+#define IME_PROP_CANDLIST_START_FROM_1 0x40000
+#define IME_PROP_UNICODE 0x80000
+#define UI_CAP_2700 1
+#define UI_CAP_ROT90 2
+#define UI_CAP_ROTANY 4
+#define SCS_CAP_COMPSTR 1
+#define SCS_CAP_MAKEREAD 2
+#define SELECT_CAP_CONVERSION 1
+#define SELECT_CAP_SENTENCE 2
+#define GGL_LEVEL 1
+#define GGL_INDEX 2
+#define GGL_STRING 3
+#define GGL_PRIVATE 4
+#define GL_LEVEL_NOGUIDELINE 0
+#define GL_LEVEL_FATAL 1
+#define GL_LEVEL_ERROR 2
+#define GL_LEVEL_WARNING 3
+#define GL_LEVEL_INFORMATION 4
+#define GL_ID_UNKNOWN 0
+#define GL_ID_NOMODULE 1
+#define GL_ID_NODICTIONARY 16
+#define GL_ID_CANNOTSAVE 17
+#define GL_ID_NOCONVERT 32
+#define GL_ID_TYPINGERROR 33
+#define GL_ID_TOOMANYSTROKE 34
+#define GL_ID_READINGCONFLICT 35
+#define GL_ID_INPUTREADING 36
+#define GL_ID_INPUTRADICAL 37
+#define GL_ID_INPUTCODE 38
+#define GL_ID_INPUTSYMBOL 39
+#define GL_ID_CHOOSECANDIDATE 40
+#define GL_ID_REVERSECONVERSION 41
+#define GL_ID_PRIVATE_FIRST 0x8000
+#define GL_ID_PRIVATE_LAST 0xFFFF
+#define IGP_GETIMEVERSION (DWORD)(-4)
+#define IGP_PROPERTY 4
+#define IGP_CONVERSION 8
+#define IGP_SENTENCE 12
+#define IGP_UI 16
+#define IGP_SETCOMPSTR 0x14
+#define IGP_SELECT 0x18
+#define SCS_SETSTR (GCS_COMPREADSTR|GCS_COMPSTR)
+#define SCS_CHANGEATTR (GCS_COMPREADATTR|GCS_COMPATTR)
+#define SCS_CHANGECLAUSE (GCS_COMPREADCLAUSE|GCS_COMPCLAUSE)
+#define ATTR_INPUT 0
+#define ATTR_TARGET_CONVERTED 1
+#define ATTR_CONVERTED 2
+#define ATTR_TARGET_NOTCONVERTED 3
+#define ATTR_INPUT_ERROR 4
+#define ATTR_FIXEDCONVERTED 5
+#define CFS_DEFAULT 0
+#define CFS_RECT 1
+#define CFS_POINT 2
+#define CFS_SCREEN 4
+#define CFS_FORCE_POSITION 32
+#define CFS_CANDIDATEPOS 64
+#define CFS_EXCLUDE 128
+#define GCL_CONVERSION 1
+#define GCL_REVERSECONVERSION 2
+#define GCL_REVERSE_LENGTH 3
+#define IME_CMODE_ALPHANUMERIC 0
+#define IME_CMODE_NATIVE 1
+#define IME_CMODE_CHINESE IME_CMODE_NATIVE
+#define IME_CMODE_HANGEUL IME_CMODE_NATIVE
+#define IME_CMODE_HANGUL IME_CMODE_NATIVE
+#define IME_CMODE_JAPANESE IME_CMODE_NATIVE
+#define IME_CMODE_KATAKANA 2
+#define IME_CMODE_LANGUAGE 3
+#define IME_CMODE_FULLSHAPE 8
+#define IME_CMODE_ROMAN 16
+#define IME_CMODE_CHARCODE 32
+#define IME_CMODE_HANJACONVERT 64
+#define IME_CMODE_SOFTKBD 128
+#define IME_CMODE_NOCONVERSION 256
+#define IME_CMODE_EUDC 512
+#define IME_CMODE_SYMBOL 1024
+#define IME_CMODE_FIXED 2048
+#define IME_SMODE_NONE 0
+#define IME_SMODE_PLAURALCLAUSE 1
+#define IME_SMODE_SINGLECONVERT 2
+#define IME_SMODE_AUTOMATIC 4
+#define IME_SMODE_PHRASEPREDICT 8
+#define IME_CAND_UNKNOWN 0
+#define IME_CAND_READ 1
+#define IME_CAND_CODE 2
+#define IME_CAND_MEANING 3
+#define IME_CAND_RADICAL 4
+#define IME_CAND_STROKE 5
+#define IMM_ERROR_NODATA (-1)
+#define IMM_ERROR_GENERAL (-2)
+#define IME_CONFIG_GENERAL 1
+#define IME_CONFIG_REGISTERWORD 2
+#define IME_CONFIG_SELECTDICTIONARY 3
+#define IME_ESC_QUERY_SUPPORT 3
+#define IME_ESC_RESERVED_FIRST 4
+#define IME_ESC_RESERVED_LAST 0x7FF
+#define IME_ESC_PRIVATE_FIRST 0x800
+#define IME_ESC_PRIVATE_LAST 0xFFF
+#define IME_ESC_SEQUENCE_TO_INTERNAL 0x1001
+#define IME_ESC_GET_EUDC_DICTIONARY 0x1003
+#define IME_ESC_SET_EUDC_DICTIONARY 0x1004
+#define IME_ESC_MAX_KEY 0x1005
+#define IME_ESC_IME_NAME 0x1006
+#define IME_ESC_SYNC_HOTKEY 0x1007
+#define IME_ESC_HANJA_MODE 0x1008
+#define IME_ESC_AUTOMATA 0x1009
+#define IME_REGWORD_STYLE_EUDC 1
+#define IME_REGWORD_STYLE_USER_FIRST 0x80000000
+#define IME_REGWORD_STYLE_USER_LAST 0xFFFFFFFF
+#define IMR_RECONVERTSTRING 4
+#define IMR_QUERYCHARPOSITION 6
+#define SOFTKEYBOARD_TYPE_T1 1
+#define SOFTKEYBOARD_TYPE_C1 2
+#define IMEMENUITEM_STRING_SIZE 80
+#define MOD_ALT 1
+#define MOD_CONTROL 2
+#define MOD_SHIFT 4
+#define MOD_WIN 8
+#define MOD_IGNORE_ALL_MODIFIER 1024
+#define MOD_ON_KEYUP 2048
+#define MOD_RIGHT 16384
+#define MOD_LEFT 32768
+#define IACE_CHILDREN 1
+#define IACE_DEFAULT 16
+#define IACE_IGNORENOCONTEXT 32
+#define IGIMIF_RIGHTMENU 1
+#define IGIMII_CMODE 1
+#define IGIMII_SMODE 2
+#define IGIMII_CONFIGURE 4
+#define IGIMII_TOOLS 8
+#define IGIMII_HELP 16
+#define IGIMII_OTHER 32
+#define IGIMII_INPUTTOOLS 64
+#define IMFT_RADIOCHECK 1
+#define IMFT_SEPARATOR 2
+#define IMFT_SUBMENU 4
+#define IMFS_GRAYED MFS_GRAYED
+#define IMFS_DISABLED MFS_DISABLED
+#define IMFS_CHECKED MFS_CHECKED
+#define IMFS_HILITE MFS_HILITE
+#define IMFS_ENABLED MFS_ENABLED
+#define IMFS_UNCHECKED MFS_UNCHECKED
+#define IMFS_UNHILITE MFS_UNHILITE
+#define IMFS_DEFAULT MFS_DEFAULT
+#ifndef VK_PROCESSKEY
+#define VK_PROCESSKEY 0x0E5
+#endif
+#define STYLE_DESCRIPTION_SIZE 32
+typedef DWORD HIMC;
+typedef DWORD HIMCC;
+typedef HKL *LPHKL;
+typedef struct tagCOMPOSITIONFORM {
+ DWORD dwStyle;
+ POINT ptCurrentPos;
+ RECT rcArea;
+} COMPOSITIONFORM,*PCOMPOSITIONFORM,*LPCOMPOSITIONFORM;
+typedef struct tagCANDIDATEFORM {
+ DWORD dwIndex;
+ DWORD dwStyle;
+ POINT ptCurrentPos;
+ RECT rcArea;
+} CANDIDATEFORM,*PCANDIDATEFORM,*LPCANDIDATEFORM;
+typedef struct tagCANDIDATELIST {
+ DWORD dwSize;
+ DWORD dwStyle;
+ DWORD dwCount;
+ DWORD dwSelection;
+ DWORD dwPageStart;
+ DWORD dwPageSize;
+ DWORD dwOffset[1];
+} CANDIDATELIST,*PCANDIDATELIST,*LPCANDIDATELIST;
+typedef struct tagIMECHARPOSITION {
+ DWORD dwSize;
+ DWORD dwCharPos;
+ POINT pt;
+ UINT cLineHeight;
+ RECT rcDocument;
+} IMECHARPOSITION, *PIMECHARPOSITION;
+typedef struct tagRECONVERTSTRING {
+ DWORD dwSize;
+ DWORD dwVersion;
+ DWORD dwStrLen;
+ DWORD dwStrOffset;
+ DWORD dwCompStrLen;
+ DWORD dwCompStrOffset;
+ DWORD dwTargetStrLen;
+ DWORD dwTargetStrOffset;
+} RECONVERTSTRING, *PRECONVERTSTRING;
+typedef struct tagREGISTERWORDA {
+ LPSTR lpReading;
+ LPSTR lpWord;
+} REGISTERWORDA,*PREGISTERWORDA,*LPREGISTERWORDA;
+typedef struct tagREGISTERWORDW {
+ LPWSTR lpReading;
+ LPWSTR lpWord;
+} REGISTERWORDW,*PREGISTERWORDW,*LPREGISTERWORDW;
+typedef struct tagSTYLEBUFA {
+ DWORD dwStyle;
+ CHAR szDescription[STYLE_DESCRIPTION_SIZE];
+} STYLEBUFA,*PSTYLEBUFA,*LPSTYLEBUFA;
+typedef struct tagSTYLEBUFW {
+ DWORD dwStyle;
+ WCHAR szDescription[STYLE_DESCRIPTION_SIZE];
+} STYLEBUFW,*PSTYLEBUFW,*LPSTYLEBUFW;
+typedef struct tagIMEMENUITEMINFOA {
+ UINT cbSize;
+ UINT fType;
+ UINT fState;
+ UINT wID;
+ HBITMAP hbmpChecked;
+ HBITMAP hbmpUnchecked;
+ DWORD dwItemData;
+ CHAR szString[IMEMENUITEM_STRING_SIZE];
+ HBITMAP hbmpItem;
+} IMEMENUITEMINFOA,*PIMEMENUITEMINFOA,*LPIMEMENUITEMINFOA;
+typedef struct tagIMEMENUITEMINFOW {
+ UINT cbSize;
+ UINT fType;
+ UINT fState;
+ UINT wID;
+ HBITMAP hbmpChecked;
+ HBITMAP hbmpUnchecked;
+ DWORD dwItemData;
+ WCHAR szString[IMEMENUITEM_STRING_SIZE];
+ HBITMAP hbmpItem;
+} IMEMENUITEMINFOW,*PIMEMENUITEMINFOW,*LPIMEMENUITEMINFOW;
+typedef int (CALLBACK *REGISTERWORDENUMPROCA)(LPCSTR, DWORD, LPCSTR, LPVOID);
+typedef int (CALLBACK *REGISTERWORDENUMPROCW)(LPCWSTR, DWORD, LPCWSTR, LPVOID);
+#ifdef UNICODE
+#define REGISTERWORDENUMPROC REGISTERWORDENUMPROCW
+typedef REGISTERWORDW REGISTERWORD,*PREGISTERWORD,*LPREGISTERWORD;
+typedef STYLEBUFW STYLEBUF,*PSTYLEBUF,*LPSTYLEBUF;
+typedef IMEMENUITEMINFOW IMEMENUITEMINFO,*PIMEMENUITEMINFO,*LPIMEMENUITEMINFO;
+#else
+#define REGISTERWORDENUMPROC REGISTERWORDENUMPROCA
+typedef REGISTERWORDA REGISTERWORD,*PREGISTERWORD,*LPREGISTERWORD;
+typedef STYLEBUFA STYLEBUF,*PSTYLEBUF,*LPSTYLEBUF;
+typedef IMEMENUITEMINFOA IMEMENUITEMINFO,*PIMEMENUITEMINFO,*LPIMEMENUITEMINFO;
+#endif
+HKL WINAPI ImmInstallIMEA(LPCSTR,LPCSTR);
+HKL WINAPI ImmInstallIMEW(LPCWSTR,LPCWSTR);
+HWND WINAPI ImmGetDefaultIMEWnd(HWND);
+UINT WINAPI ImmGetDescriptionA(HKL,LPSTR,UINT);
+UINT WINAPI ImmGetDescriptionW(HKL,LPWSTR,UINT);
+UINT WINAPI ImmGetIMEFileNameA(HKL,LPSTR,UINT);
+UINT WINAPI ImmGetIMEFileNameW(HKL,LPWSTR,UINT);
+DWORD WINAPI ImmGetProperty(HKL,DWORD);
+BOOL WINAPI ImmIsIME(HKL);
+BOOL WINAPI ImmSimulateHotKey(HWND,DWORD);
+HIMC WINAPI ImmCreateContext(void);
+BOOL WINAPI ImmDestroyContext(HIMC);
+HIMC WINAPI ImmGetContext(HWND);
+BOOL WINAPI ImmReleaseContext(HWND,HIMC);
+HIMC WINAPI ImmAssociateContext(HWND,HIMC);
+LONG WINAPI ImmGetCompositionStringA(HIMC,DWORD,PVOID,DWORD);
+LONG WINAPI ImmGetCompositionStringW(HIMC,DWORD,PVOID,DWORD);
+BOOL WINAPI ImmSetCompositionStringA(HIMC,DWORD,PCVOID,DWORD,PCVOID,DWORD);
+BOOL WINAPI ImmSetCompositionStringW(HIMC,DWORD,PCVOID,DWORD,PCVOID,DWORD);
+DWORD WINAPI ImmGetCandidateListCountA(HIMC,PDWORD);
+DWORD WINAPI ImmGetCandidateListCountW(HIMC,PDWORD);
+DWORD WINAPI ImmGetCandidateListA(HIMC,DWORD,PCANDIDATELIST,DWORD);
+DWORD WINAPI ImmGetCandidateListW(HIMC,DWORD,PCANDIDATELIST,DWORD);
+DWORD WINAPI ImmGetGuideLineA(HIMC,DWORD,LPSTR,DWORD);
+DWORD WINAPI ImmGetGuideLineW(HIMC,DWORD,LPWSTR,DWORD);
+BOOL WINAPI ImmGetConversionStatus(HIMC,LPDWORD,PDWORD);
+BOOL WINAPI ImmSetConversionStatus(HIMC,DWORD,DWORD);
+BOOL WINAPI ImmGetOpenStatus(HIMC);
+BOOL WINAPI ImmSetOpenStatus(HIMC,BOOL);
+#ifndef NOGDI
+BOOL WINAPI ImmGetCompositionFontA(HIMC,LPLOGFONTA);
+BOOL WINAPI ImmGetCompositionFontW(HIMC,LPLOGFONTW);
+BOOL WINAPI ImmSetCompositionFontA(HIMC,LPLOGFONTA);
+BOOL WINAPI ImmSetCompositionFontW(HIMC,LPLOGFONTW);
+#endif
+BOOL WINAPI ImmConfigureIMEA(HKL,HWND,DWORD,PVOID);
+BOOL WINAPI ImmConfigureIMEW(HKL,HWND,DWORD,PVOID);
+LRESULT WINAPI ImmEscapeA(HKL,HIMC,UINT,PVOID);
+LRESULT WINAPI ImmEscapeW(HKL,HIMC,UINT,PVOID);
+DWORD WINAPI ImmGetConversionListA(HKL,HIMC,LPCSTR,PCANDIDATELIST,DWORD,UINT);
+DWORD WINAPI ImmGetConversionListW(HKL,HIMC,LPCWSTR,PCANDIDATELIST,DWORD,UINT);
+BOOL WINAPI ImmNotifyIME(HIMC,DWORD,DWORD,DWORD);
+BOOL WINAPI ImmGetStatusWindowPos(HIMC,LPPOINT);
+BOOL WINAPI ImmSetStatusWindowPos(HIMC,LPPOINT);
+BOOL WINAPI ImmGetCompositionWindow(HIMC,PCOMPOSITIONFORM);
+BOOL WINAPI ImmSetCompositionWindow(HIMC,PCOMPOSITIONFORM);
+BOOL WINAPI ImmGetCandidateWindow(HIMC,DWORD,PCANDIDATEFORM);
+BOOL WINAPI ImmSetCandidateWindow(HIMC,PCANDIDATEFORM);
+BOOL WINAPI ImmIsUIMessageA(HWND,UINT,WPARAM,LPARAM);
+BOOL WINAPI ImmIsUIMessageW(HWND,UINT,WPARAM,LPARAM);
+UINT WINAPI ImmGetVirtualKey(HWND);
+BOOL WINAPI ImmRegisterWordA(HKL,LPCSTR,DWORD,LPCSTR);
+BOOL WINAPI ImmRegisterWordW(HKL,LPCWSTR,DWORD,LPCWSTR);
+BOOL WINAPI ImmUnregisterWordA(HKL,LPCSTR,DWORD,LPCSTR);
+BOOL WINAPI ImmUnregisterWordW(HKL,LPCWSTR,DWORD,LPCWSTR);
+UINT WINAPI ImmGetRegisterWordStyleA(HKL,UINT,PSTYLEBUFA);
+UINT WINAPI ImmGetRegisterWordStyleW(HKL,UINT,PSTYLEBUFW);
+UINT WINAPI ImmEnumRegisterWordA(HKL,REGISTERWORDENUMPROCA,LPCSTR,DWORD,LPCSTR,PVOID);
+UINT WINAPI ImmEnumRegisterWordW(HKL,REGISTERWORDENUMPROCW,LPCWSTR,DWORD,LPCWSTR,PVOID);
+BOOL WINAPI EnableEUDC(BOOL);
+BOOL WINAPI ImmDisableIME(DWORD);
+DWORD WINAPI ImmGetImeMenuItemsA(HIMC,DWORD,DWORD,LPIMEMENUITEMINFOA,LPIMEMENUITEMINFOA,DWORD);
+DWORD WINAPI ImmGetImeMenuItemsW(HIMC,DWORD,DWORD,LPIMEMENUITEMINFOW,LPIMEMENUITEMINFOW,DWORD);
+
+#ifdef UNICODE
+#define ImmEnumRegisterWord ImmEnumRegisterWordW
+#define ImmGetRegisterWordStyle ImmGetRegisterWordStyleW
+#define ImmUnregisterWord ImmUnregisterWordW
+#define ImmRegisterWord ImmRegisterWordW
+#define ImmInstallIME ImmInstallIMEW
+#define ImmIsUIMessage ImmIsUIMessageW
+#define ImmGetConversionList ImmGetConversionListW
+#define ImmEscape ImmEscapeW
+#define ImmConfigureIME ImmConfigureIMEW
+#ifndef NOGDI
+#define ImmSetCompositionFont ImmSetCompositionFontW
+#define ImmGetCompositionFont ImmGetCompositionFontW
+#endif
+#define ImmGetGuideLine ImmGetGuideLineW
+#define ImmGetCandidateList ImmGetCandidateListW
+#define ImmGetCandidateListCount ImmGetCandidateListCountW
+#define ImmSetCompositionString ImmSetCompositionStringW
+#define ImmGetCompositionString ImmGetCompositionStringW
+#define ImmGetDescription ImmGetDescriptionW
+#define ImmGetIMEFileName ImmGetIMEFileNameW
+#define ImmGetImeMenuItems ImmGetImeMenuItemsW
+#else
+#define ImmEnumRegisterWord ImmEnumRegisterWordA
+#define ImmGetRegisterWordStyle ImmGetRegisterWordStyleA
+#define ImmUnregisterWord ImmUnregisterWordA
+#define ImmRegisterWord ImmRegisterWordA
+#define ImmInstallIME ImmInstallIMEA
+#define ImmIsUIMessage ImmIsUIMessageA
+#define ImmGetConversionList ImmGetConversionListA
+#define ImmEscape ImmEscapeA
+#define ImmConfigureIME ImmConfigureIMEA
+#ifndef NOGDI
+#define ImmSetCompositionFont ImmSetCompositionFontA
+#define ImmGetCompositionFont ImmGetCompositionFontA
+#endif
+#define ImmGetGuideLine ImmGetGuideLineA
+#define ImmGetCandidateList ImmGetCandidateListA
+#define ImmGetCandidateListCount ImmGetCandidateListCountA
+#define ImmSetCompositionString ImmSetCompositionStringA
+#define ImmGetCompositionString ImmGetCompositionStringA
+#define ImmGetDescription ImmGetDescriptionA
+#define ImmGetIMEFileName ImmGetIMEFileNameA
+#define ImmGetImeMenuItems ImmGetImeMenuItemsW
+#endif
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/initguid.h b/tcc/include/winapi/initguid.h
new file mode 100644
index 0000000..b024c70
--- /dev/null
+++ b/tcc/include/winapi/initguid.h
@@ -0,0 +1,12 @@
+#ifndef _INITGUID_H
+#define _INITGUID_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifndef DEFINE_GUID
+#include <basetyps.h>
+#endif
+#undef DEFINE_GUID
+#define DEFINE_GUID(n,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) GUID_EXT const GUID n GUID_SECT = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}
+#endif
diff --git a/tcc/include/winapi/intshcut.h b/tcc/include/winapi/intshcut.h
new file mode 100644
index 0000000..9742ff9
--- /dev/null
+++ b/tcc/include/winapi/intshcut.h
@@ -0,0 +1,82 @@
+#ifndef _INTSHCUT_H
+#define _INTSHCUT_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#include <isguids.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+#define INTSHCUTAPI DECLSPEC_IMPORT
+#define E_FLAGS MAKE_SCODE(SEVERITY_ERROR,FACILITY_ITF,0x1000)
+#define IS_E_EXEC_FAILED MAKE_SCODE(SEVERITY_ERROR,FACILITY_ITF,0x2002)
+#define URL_E_INVALID_SYNTAX MAKE_SCODE(SEVERITY_ERROR,FACILITY_ITF,0x1001)
+#define URL_E_UNREGISTERED_PROTOCOL MAKE_SCODE(SEVERITY_ERROR,FACILITY_ITF,0x1002)
+typedef enum iurl_seturl_flags {
+ IURL_SETURL_FL_GUESS_PROTOCOL=1,
+ IURL_SETURL_FL_USE_DEFAULT_PROTOCOL,
+ ALL_IURL_SETURL_FLAGS=(IURL_SETURL_FL_GUESS_PROTOCOL|IURL_SETURL_FL_USE_DEFAULT_PROTOCOL)
+} IURL_SETURL_FLAGS;
+typedef enum iurl_invokecommand_flags {
+ IURL_INVOKECOMMAND_FL_ALLOW_UI=1,
+ IURL_INVOKECOMMAND_FL_USE_DEFAULT_VERB,
+ ALL_IURL_INVOKECOMMAND_FLAGS=(IURL_INVOKECOMMAND_FL_ALLOW_UI|IURL_INVOKECOMMAND_FL_USE_DEFAULT_VERB)
+} IURL_INVOKECOMMAND_FLAGS;
+typedef enum translateurl_in_flags {
+ TRANSLATEURL_FL_GUESS_PROTOCOL=1,
+ TRANSLATEURL_FL_USE_DEFAULT_PROTOCOL,
+ ALL_TRANSLATEURL_FLAGS=(TRANSLATEURL_FL_GUESS_PROTOCOL|TRANSLATEURL_FL_USE_DEFAULT_PROTOCOL)
+} TRANSLATEURL_IN_FLAGS;
+typedef enum urlassociationdialog_in_flags {
+ URLASSOCDLG_FL_USE_DEFAULT_NAME=1,
+ URLASSOCDLG_FL_REGISTER_ASSOC,
+ ALL_URLASSOCDLG_FLAGS=(URLASSOCDLG_FL_USE_DEFAULT_NAME|URLASSOCDLG_FL_REGISTER_ASSOC)
+} URLASSOCIATIONDIALOG_IN_FLAGS;
+typedef enum mimeassociationdialog_in_flags {
+ MIMEASSOCDLG_FL_REGISTER_ASSOC=1,
+ ALL_MIMEASSOCDLG_FLAGS=MIMEASSOCDLG_FL_REGISTER_ASSOC
+} MIMEASSOCIATIONDIALOG_IN_FLAGS;
+typedef struct urlinvokecommandinfo {
+ DWORD dwcbSize;
+ DWORD dwFlags;
+ HWND hwndParent;
+ PCSTR pcszVerb;
+} URLINVOKECOMMANDINFO,*PURLINVOKECOMMANDINFO;
+typedef const URLINVOKECOMMANDINFO CURLINVOKECOMMANDINFO;
+typedef const URLINVOKECOMMANDINFO *PCURLINVOKECOMMANDINFO;
+#define INTERFACE IUniformResourceLocator
+DECLARE_INTERFACE_(IUniformResourceLocator,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(SetURL)(THIS_ PCSTR,DWORD) PURE;
+ STDMETHOD(GetURL)(THIS_ PSTR*) PURE;
+ STDMETHOD(InvokeCommand)(THIS_ PURLINVOKECOMMANDINFO) PURE;
+};
+#undef INTERFACE
+typedef IUniformResourceLocator *PIUniformResourceLocator;
+typedef const IUniformResourceLocator CIUniformResourceLocator;
+typedef const IUniformResourceLocator *PCIUniformResourceLocator;
+
+BOOL WINAPI InetIsOffline(DWORD);
+HRESULT WINAPI MIMEAssociationDialogA(HWND,DWORD,PCSTR,PCSTR,PSTR,UINT);
+HRESULT WINAPI MIMEAssociationDialogW(HWND,DWORD,PCWSTR,PCWSTR,PWSTR,UINT);
+HRESULT WINAPI TranslateURLA(PCSTR,DWORD,PSTR*);
+HRESULT WINAPI TranslateURLW(PCWSTR,DWORD,PWSTR*);
+HRESULT WINAPI URLAssociationDialogA(HWND,DWORD,PCSTR,PCSTR,PSTR,UINT);
+HRESULT WINAPI URLAssociationDialogW(HWND,DWORD,PCWSTR,PCWSTR,PWSTR,UINT);
+#ifdef UNICODE
+#define TranslateURL TranslateURLW
+#define MIMEAssociationDialog MIMEAssociationDialogW
+#define URLAssociationDialog URLAssociationDialogW
+#else
+#define TranslateURL TranslateURLA
+#define MIMEAssociationDialog MIMEAssociationDialogA
+#define URLAssociationDialog URLAssociationDialogA
+#endif
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/ipexport.h b/tcc/include/winapi/ipexport.h
new file mode 100644
index 0000000..3fbf4ee
--- /dev/null
+++ b/tcc/include/winapi/ipexport.h
@@ -0,0 +1,88 @@
+#ifndef _IPEXPORT_H
+#define _IPEXPORT_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#ifndef ANY_SIZE
+#define ANY_SIZE 1
+#endif
+#define MAX_ADAPTER_NAME 128
+/* IP STATUS flags */
+#define IP_STATUS_BASE 11000
+#define IP_SUCCESS 0
+#define IP_BUF_TOO_SMALL (IP_STATUS_BASE + 1)
+#define IP_DEST_NET_UNREACHABLE (IP_STATUS_BASE + 2)
+#define IP_DEST_HOST_UNREACHABLE (IP_STATUS_BASE + 3)
+#define IP_DEST_PROT_UNREACHABLE (IP_STATUS_BASE + 4)
+#define IP_DEST_PORT_UNREACHABLE (IP_STATUS_BASE + 5)
+#define IP_NO_RESOURCES (IP_STATUS_BASE + 6)
+#define IP_BAD_OPTION (IP_STATUS_BASE + 7)
+#define IP_HW_ERROR (IP_STATUS_BASE + 8)
+#define IP_PACKET_TOO_BIG (IP_STATUS_BASE + 9)
+#define IP_REQ_TIMED_OUT (IP_STATUS_BASE + 10)
+#define IP_BAD_REQ (IP_STATUS_BASE + 11)
+#define IP_BAD_ROUTE (IP_STATUS_BASE + 12)
+#define IP_TTL_EXPIRED_TRANSIT (IP_STATUS_BASE + 13)
+#define IP_TTL_EXPIRED_REASSEM (IP_STATUS_BASE + 14)
+#define IP_PARAM_PROBLEM (IP_STATUS_BASE + 15)
+#define IP_SOURCE_QUENCH (IP_STATUS_BASE + 16)
+#define IP_OPTION_TOO_BIG (IP_STATUS_BASE + 17)
+#define IP_BAD_DESTINATION (IP_STATUS_BASE + 18)
+#define IP_ADDR_DELETED (IP_STATUS_BASE + 19)
+#define IP_SPEC_MTU_CHANGE (IP_STATUS_BASE + 20)
+#define IP_MTU_CHANGE (IP_STATUS_BASE + 21)
+#define IP_UNLOAD (IP_STATUS_BASE + 22)
+#define IP_GENERAL_FAILURE (IP_STATUS_BASE + 50)
+#define MAX_IP_STATUS IP_GENERAL_FAILURE
+#define IP_PENDING (IP_STATUS_BASE + 255)
+/* IP header Flags values */
+#define IP_FLAG_DF 0x2
+/* IP Option types */
+#define IP_OPT_EOL 0
+#define IP_OPT_NOP 1
+#define IP_OPT_SECURITY 0x82
+#define IP_OPT_LSRR 0x83
+#define IP_OPT_SSRR 0x89
+#define IP_OPT_RR 0x7
+#define IP_OPT_TS 0x44
+#define IP_OPT_SID 0x88
+#define IP_OPT_ROUTER_ALERT 0x94
+#define MAX_OPT_SIZE 40
+
+typedef unsigned long IPAddr, IPMask, IP_STATUS;
+typedef struct ip_option_information {
+ unsigned char Ttl;
+ unsigned char Tos;
+ unsigned char Flags;
+ unsigned char OptionsSize;
+ unsigned char* OptionsData;
+}IP_OPTION_INFORMATION, *PIP_OPTION_INFORMATION;
+typedef struct icmp_echo_reply {
+ IPAddr Address;
+ unsigned long Status;
+ unsigned long RoundTripTime;
+ unsigned short DataSize;
+ unsigned short Reserved;
+ void* Data;
+ struct ip_option_information Options;
+} ICMP_ECHO_REPLY, *PICMP_ECHO_REPLY;
+typedef struct {
+ ULONG Index;
+ WCHAR Name[MAX_ADAPTER_NAME];
+} IP_ADAPTER_INDEX_MAP, *PIP_ADAPTER_INDEX_MAP;
+typedef struct {
+ LONG NumAdapters;
+ IP_ADAPTER_INDEX_MAP Adapter[ANY_SIZE];
+} IP_INTERFACE_INFO, *PIP_INTERFACE_INFO;
+typedef struct _IP_UNIDIRECTIONAL_ADAPTER_ADDRESS {
+ ULONG NumAdapters;
+ IPAddr Address[1];
+} IP_UNIDIRECTIONAL_ADAPTER_ADDRESS, *PIP_UNIDIRECTIONAL_ADAPTER_ADDRESS;
+#ifdef __cplusplus
+}
+#endif
+#endif /* _IPEXPORT_H */
diff --git a/tcc/include/winapi/iphlpapi.h b/tcc/include/winapi/iphlpapi.h
new file mode 100644
index 0000000..c35c495
--- /dev/null
+++ b/tcc/include/winapi/iphlpapi.h
@@ -0,0 +1,77 @@
+#ifndef _IPHLPAPI_H
+#define _IPHLPAPI_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#include <iprtrmib.h>
+#include <ipexport.h>
+#include <iptypes.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if (_WIN32_WINNT >= 0x0501)
+#define GAA_FLAG_SKIP_UNICAST 0x00000001
+#define GAA_FLAG_SKIP_ANYCAST 0x00000002
+#define GAA_FLAG_SKIP_MULTICAST 0x00000004
+#define GAA_FLAG_SKIP_DNS_SERVER 0x00000008
+#define GAA_FLAG_INCLUDE_PREFIX 0x00000010
+#define GAA_FLAG_SKIP_FRIENDLY_NAME 0x00000020
+#endif
+
+DWORD WINAPI AddIPAddress(IPAddr,IPMask,DWORD,PULONG,PULONG);
+DWORD WINAPI CreateIpForwardEntry(PMIB_IPFORWARDROW);
+DWORD WINAPI CreateIpNetEntry(PMIB_IPNETROW);
+DWORD WINAPI CreateProxyArpEntry(DWORD,DWORD,DWORD);
+DWORD WINAPI DeleteIPAddress(ULONG);
+DWORD WINAPI DeleteIpForwardEntry(PMIB_IPFORWARDROW);
+DWORD WINAPI DeleteIpNetEntry(PMIB_IPNETROW);
+DWORD WINAPI DeleteProxyArpEntry(DWORD,DWORD,DWORD);
+DWORD WINAPI EnableRouter(HANDLE*,OVERLAPPED*);
+DWORD WINAPI FlushIpNetTable(DWORD);
+#if (_WIN32_WINNT >= 0x0501 && defined(_WINSOCK2_H))
+ULONG WINAPI GetAdaptersAddresses(ULONG,ULONG,PVOID,PIP_ADAPTER_ADDRESSES,PULONG);
+#endif
+DWORD WINAPI GetAdapterIndex(LPWSTR,PULONG);
+DWORD WINAPI GetAdaptersInfo(PIP_ADAPTER_INFO,PULONG);
+DWORD WINAPI GetBestInterface(IPAddr,PDWORD);
+DWORD WINAPI GetBestRoute(DWORD,DWORD,PMIB_IPFORWARDROW);
+#if (_WIN32_WINNT >= 0x0501)
+DWORD WINAPI GetExtendedTcpTable (PVOID,PDWORD,BOOL,ULONG,TCP_TABLE_CLASS,ULONG);
+#endif
+DWORD WINAPI GetFriendlyIfIndex(DWORD);
+DWORD WINAPI GetIcmpStatistics(PMIB_ICMP);
+DWORD WINAPI GetIfEntry(PMIB_IFROW);
+DWORD WINAPI GetIfTable(PMIB_IFTABLE,PULONG,BOOL);
+DWORD WINAPI GetInterfaceInfo(PIP_INTERFACE_INFO,PULONG);
+DWORD WINAPI GetIpAddrTable(PMIB_IPADDRTABLE,PULONG,BOOL);
+DWORD WINAPI GetIpForwardTable(PMIB_IPFORWARDTABLE,PULONG,BOOL);
+DWORD WINAPI GetIpNetTable(PMIB_IPNETTABLE,PULONG,BOOL);
+DWORD WINAPI GetIpStatistics(PMIB_IPSTATS);
+DWORD WINAPI GetNetworkParams(PFIXED_INFO,PULONG);
+DWORD WINAPI GetNumberOfInterfaces(PDWORD);
+DWORD WINAPI GetPerAdapterInfo(ULONG,PIP_PER_ADAPTER_INFO, PULONG);
+BOOL WINAPI GetRTTAndHopCount(IPAddr,PULONG,ULONG,PULONG);
+DWORD WINAPI GetTcpStatistics(PMIB_TCPSTATS);
+DWORD WINAPI GetTcpTable(PMIB_TCPTABLE,PDWORD,BOOL);
+DWORD WINAPI GetUniDirectionalAdapterInfo(PIP_UNIDIRECTIONAL_ADAPTER_ADDRESS,PULONG);
+DWORD WINAPI GetUdpStatistics(PMIB_UDPSTATS);
+DWORD WINAPI GetUdpTable(PMIB_UDPTABLE,PDWORD,BOOL);
+DWORD WINAPI IpReleaseAddress(PIP_ADAPTER_INDEX_MAP);
+DWORD WINAPI IpRenewAddress(PIP_ADAPTER_INDEX_MAP);
+DWORD WINAPI NotifyAddrChange(PHANDLE,LPOVERLAPPED);
+DWORD WINAPI NotifyRouteChange(PHANDLE,LPOVERLAPPED);
+DWORD WINAPI SendARP(IPAddr,IPAddr,PULONG,PULONG);
+DWORD WINAPI SetIfEntry(PMIB_IFROW);
+DWORD WINAPI SetIpForwardEntry(PMIB_IPFORWARDROW);
+DWORD WINAPI SetIpNetEntry(PMIB_IPNETROW);
+DWORD WINAPI SetIpStatistics(PMIB_IPSTATS);
+DWORD WINAPI SetIpTTL(UINT);
+DWORD WINAPI SetTcpEntry(PMIB_TCPROW);
+DWORD WINAPI UnenableRouter(OVERLAPPED*, LPDWORD);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* _IPHLPAPI_H */
diff --git a/tcc/include/winapi/ipifcons.h b/tcc/include/winapi/ipifcons.h
new file mode 100644
index 0000000..1b481c6
--- /dev/null
+++ b/tcc/include/winapi/ipifcons.h
@@ -0,0 +1,199 @@
+/*
+ ipifcons.h - Routing and Remote Access Services
+
+ This file is part of a free library for the Win32 API.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+*/
+#ifndef _IPIFCONS_H
+#define _IPIFCONS_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#define MIN_IF_TYPE 1
+#define IF_TYPE_OTHER 1
+#define IF_TYPE_REGULAR_1822 2
+#define IF_TYPE_HDH_1822 3
+#define IF_TYPE_DDN_X25 4
+#define IF_TYPE_RFC877_X25 5
+#define IF_TYPE_ETHERNET_CSMACD 6
+#define IF_TYPE_IS088023_CSMACD 7
+#define IF_TYPE_ISO88024_TOKENBUS 8
+#define IF_TYPE_ISO88025_TOKENRING 9
+#define IF_TYPE_ISO88026_MAN 10
+#define IF_TYPE_STARLAN 11
+#define IF_TYPE_PROTEON_10MBIT 12
+#define IF_TYPE_PROTEON_80MBIT 13
+#define IF_TYPE_HYPERCHANNEL 14
+#define IF_TYPE_FDDI 15
+#define IF_TYPE_LAP_B 16
+#define IF_TYPE_SDLC 17
+#define IF_TYPE_DS1 18
+#define IF_TYPE_E1 19
+#define IF_TYPE_BASIC_ISDN 20
+#define IF_TYPE_PRIMARY_ISDN 21
+#define IF_TYPE_PROP_POINT2POINT_SERIAL 22
+#define IF_TYPE_PPP 23
+#define IF_TYPE_SOFTWARE_LOOPBACK 24
+#define IF_TYPE_EON 25
+#define IF_TYPE_ETHERNET_3MBIT 26
+#define IF_TYPE_NSIP 27
+#define IF_TYPE_SLIP 28
+#define IF_TYPE_ULTRA 29
+#define IF_TYPE_DS3 30
+#define IF_TYPE_SIP 31
+#define IF_TYPE_FRAMERELAY 32
+#define IF_TYPE_RS232 33
+#define IF_TYPE_PARA 34
+#define IF_TYPE_ARCNET 35
+#define IF_TYPE_ARCNET_PLUS 36
+#define IF_TYPE_ATM 37
+#define IF_TYPE_MIO_X25 38
+#define IF_TYPE_SONET 39
+#define IF_TYPE_X25_PLE 40
+#define IF_TYPE_ISO88022_LLC 41
+#define IF_TYPE_LOCALTALK 42
+#define IF_TYPE_SMDS_DXI 43
+#define IF_TYPE_FRAMERELAY_SERVICE 44
+#define IF_TYPE_V35 45
+#define IF_TYPE_HSSI 46
+#define IF_TYPE_HIPPI 47
+#define IF_TYPE_MODEM 48
+#define IF_TYPE_AAL5 49
+#define IF_TYPE_SONET_PATH 50
+#define IF_TYPE_SONET_VT 51
+#define IF_TYPE_SMDS_ICIP 52
+#define IF_TYPE_PROP_VIRTUAL 53
+#define IF_TYPE_PROP_MULTIPLEXOR 54
+#define IF_TYPE_IEEE80212 55
+#define IF_TYPE_FIBRECHANNEL 56
+#define IF_TYPE_HIPPIINTERFACE 57
+#define IF_TYPE_FRAMERELAY_INTERCONNECT 58
+#define IF_TYPE_AFLANE_8023 59
+#define IF_TYPE_AFLANE_8025 60
+#define IF_TYPE_CCTEMUL 61
+#define IF_TYPE_FASTETHER 62
+#define IF_TYPE_ISDN 63
+#define IF_TYPE_V11 64
+#define IF_TYPE_V36 65
+#define IF_TYPE_G703_64K 66
+#define IF_TYPE_G703_2MB 67
+#define IF_TYPE_QLLC 68
+#define IF_TYPE_FASTETHER_FX 69
+#define IF_TYPE_CHANNEL 70
+#define IF_TYPE_IEEE80211 71
+#define IF_TYPE_IBM370PARCHAN 72
+#define IF_TYPE_ESCON 73
+#define IF_TYPE_DLSW 74
+#define IF_TYPE_ISDN_S 75
+#define IF_TYPE_ISDN_U 76
+#define IF_TYPE_LAP_D 77
+#define IF_TYPE_IPSWITCH 78
+#define IF_TYPE_RSRB 79
+#define IF_TYPE_ATM_LOGICAL 80
+#define IF_TYPE_DS0 81
+#define IF_TYPE_DS0_BUNDLE 82
+#define IF_TYPE_BSC 83
+#define IF_TYPE_ASYNC 84
+#define IF_TYPE_CNR 85
+#define IF_TYPE_ISO88025R_DTR 86
+#define IF_TYPE_EPLRS 87
+#define IF_TYPE_ARAP 88
+#define IF_TYPE_PROP_CNLS 89
+#define IF_TYPE_HOSTPAD 90
+#define IF_TYPE_TERMPAD 91
+#define IF_TYPE_FRAMERELAY_MPI 92
+#define IF_TYPE_X213 93
+#define IF_TYPE_ADSL 94
+#define IF_TYPE_RADSL 95
+#define IF_TYPE_SDSL 96
+#define IF_TYPE_VDSL 97
+#define IF_TYPE_ISO88025_CRFPRINT 98
+#define IF_TYPE_MYRINET 99
+#define IF_TYPE_VOICE_EM 100
+#define IF_TYPE_VOICE_FXO 101
+#define IF_TYPE_VOICE_FXS 102
+#define IF_TYPE_VOICE_ENCAP 103
+#define IF_TYPE_VOICE_OVERIP 104
+#define IF_TYPE_ATM_DXI 105
+#define IF_TYPE_ATM_FUNI 106
+#define IF_TYPE_ATM_IMA 107
+#define IF_TYPE_PPPMULTILINKBUNDLE 108
+#define IF_TYPE_IPOVER_CDLC 109
+#define IF_TYPE_IPOVER_CLAW 110
+#define IF_TYPE_STACKTOSTACK 111
+#define IF_TYPE_VIRTUALIPADDRESS 112
+#define IF_TYPE_MPC 113
+#define IF_TYPE_IPOVER_ATM 114
+#define IF_TYPE_ISO88025_FIBER 115
+#define IF_TYPE_TDLC 116
+#define IF_TYPE_GIGABITETHERNET 117
+#define IF_TYPE_HDLC 118
+#define IF_TYPE_LAP_F 119
+#define IF_TYPE_V37 120
+#define IF_TYPE_X25_MLP 121
+#define IF_TYPE_X25_HUNTGROUP 122
+#define IF_TYPE_TRANSPHDLC 123
+#define IF_TYPE_INTERLEAVE 124
+#define IF_TYPE_FAST 125
+#define IF_TYPE_IP 126
+#define IF_TYPE_DOCSCABLE_MACLAYER 127
+#define IF_TYPE_DOCSCABLE_DOWNSTREAM 128
+#define IF_TYPE_DOCSCABLE_UPSTREAM 129
+#define IF_TYPE_A12MPPSWITCH 130
+#define IF_TYPE_TUNNEL 131
+#define IF_TYPE_COFFEE 132
+#define IF_TYPE_CES 133
+#define IF_TYPE_ATM_SUBINTERFACE 134
+#define IF_TYPE_L2_VLAN 135
+#define IF_TYPE_L3_IPVLAN 136
+#define IF_TYPE_L3_IPXVLAN 137
+#define IF_TYPE_DIGITALPOWERLINE 138
+#define IF_TYPE_MEDIAMAILOVERIP 139
+#define IF_TYPE_DTM 140
+#define IF_TYPE_DCN 141
+#define IF_TYPE_IPFORWARD 142
+#define IF_TYPE_MSDSL 143
+#define IF_TYPE_IEEE1394 144
+#define IF_TYPE_RECEIVE_ONLY 145
+#define MAX_IF_TYPE 145
+#define IF_ACCESS_LOOPBACK 1
+#define IF_ACCESS_BROADCAST 2
+#define IF_ACCESS_POINTTOPOINT 3
+#define IF_ACCESS_POINTTOMULTIPOINT 4
+#define IF_CHECK_NONE 0x00
+#define IF_CHECK_MCAST 0x01
+#define IF_CHECK_SEND 0x02
+#define IF_CONNECTION_DEDICATED 1
+#define IF_CONNECTION_PASSIVE 2
+#define IF_CONNECTION_DEMAND 3
+#define IF_ADMIN_STATUS_UP 1
+#define IF_ADMIN_STATUS_DOWN 2
+#define IF_ADMIN_STATUS_TESTING 3
+#define IF_OPER_STATUS_NON_OPERATIONAL 0
+#define IF_OPER_STATUS_UNREACHABLE 1
+#define IF_OPER_STATUS_DISCONNECTED 2
+#define IF_OPER_STATUS_CONNECTING 3
+#define IF_OPER_STATUS_CONNECTED 4
+#define IF_OPER_STATUS_OPERATIONAL 5
+#define MIB_IF_ADMIN_STATUS_UP 1
+#define MIB_IF_ADMIN_STATUS_DOWN 2
+#define MIB_IF_ADMIN_STATUS_TESTING 3
+#define MIB_IF_OPER_STATUS_NON_OPERATIONAL 0
+#define MIB_IF_OPER_STATUS_UNREACHABLE 1
+#define MIB_IF_OPER_STATUS_DISCONNECTED 2
+#define MIB_IF_OPER_STATUS_CONNECTING 3
+#define MIB_IF_OPER_STATUS_CONNECTED 4
+#define MIB_IF_OPER_STATUS_OPERATIONAL 5
+#define MIB_IF_TYPE_OTHER 1
+#define MIB_IF_TYPE_ETHERNET 6
+#define MIB_IF_TYPE_TOKENRING 9
+#define MIB_IF_TYPE_FDDI 15
+#define MIB_IF_TYPE_PPP 23
+#define MIB_IF_TYPE_LOOPBACK 24
+#define MIB_IF_TYPE_SLIP 28
+
+#endif
diff --git a/tcc/include/winapi/ipinfoid.h b/tcc/include/winapi/ipinfoid.h
new file mode 100644
index 0000000..be5adb2
--- /dev/null
+++ b/tcc/include/winapi/ipinfoid.h
@@ -0,0 +1,43 @@
+/*
+ * ipinfoid.h - Routing and Remote Access Services
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may use,
+ * modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+#ifndef _IPINFOID_H
+#define _IPINFOID_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+/*--- Router Management Reference - Router Information Enumeration Types */
+#define IP_IN_FILTER_INFO 0xFFFF0001
+#define IP_OUT_FILTER_INFO 0xFFFF0002
+#define IP_GLOBAL_INFO 0xFFFF0003
+#define IP_INTERFACE_STATUS_INFO 0xFFFF0004
+#define IP_ROUTE_INFO 0xFFFF0005
+#define IP_PROT_PRIORITY_INFO 0xFFFF0006
+#define IP_ROUTER_DISC_INFO 0xFFFF0007
+#define IP_DEMAND_DIAL_FILTER_INFO 0xFFFF0009
+#define IP_MCAST_HEARBEAT_INFO 0xFFFF000A
+#define IP_MCAST_BOUNDARY_INFO 0xFFFF000B
+#define IP_IPINIP_CFG_INFO 0xFFFF000C
+#define IP_IFFILTER_INFO 0xFFFF000D
+#define IP_MCAST_LIMIT_INFO 0xFFFF000E
+/*#define IP_DEMAND_DIAL_FILTER_INFO_V6 */
+/*#define IP_FILTER_ENABLE_INFO_V6 */
+/*#define IP_IN_FILTER_INFO_V6 */
+/*#define IP_IFFILTER_INFO_V6 */
+/*#define IP_OUT_FILTER_INFO_V6 */
+/*#define IPV6_GLOBAL_INFO */
+/*#define IPV6_ROUTE_INFO */
+
+#endif
diff --git a/tcc/include/winapi/iprtrmib.h b/tcc/include/winapi/iprtrmib.h
new file mode 100644
index 0000000..fb5ff8e
--- /dev/null
+++ b/tcc/include/winapi/iprtrmib.h
@@ -0,0 +1,246 @@
+#ifndef _IPRTRMIB_H
+#define _IPRTRMIB_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#include <ipifcons.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+#ifndef ANY_SIZE
+#define ANY_SIZE 1
+#endif
+#define MAXLEN_PHYSADDR 8
+#define MAXLEN_IFDESCR 256
+#ifndef MAX_INTERFACE_NAME_LEN
+#define MAX_INTERFACE_NAME_LEN 256
+#endif
+#define MIB_IPNET_TYPE_OTHER 1
+#define MIB_IPNET_TYPE_INVALID 2
+#define MIB_IPNET_TYPE_DYNAMIC 3
+#define MIB_IPNET_TYPE_STATIC 4
+#define MIB_TCP_RTO_OTHER 1
+#define MIB_TCP_RTO_CONSTANT 2
+#define MIB_TCP_RTO_RSRE 3
+#define MIB_TCP_RTO_VANJ 4
+#define MIB_TCP_STATE_CLOSED 1
+#define MIB_TCP_STATE_LISTEN 2
+#define MIB_TCP_STATE_SYN_SENT 3
+#define MIB_TCP_STATE_SYN_RCVD 4
+#define MIB_TCP_STATE_ESTAB 5
+#define MIB_TCP_STATE_FIN_WAIT1 6
+#define MIB_TCP_STATE_FIN_WAIT2 7
+#define MIB_TCP_STATE_CLOSE_WAIT 8
+#define MIB_TCP_STATE_CLOSING 9
+#define MIB_TCP_STATE_LAST_ACK 10
+#define MIB_TCP_STATE_TIME_WAIT 11
+#define MIB_TCP_STATE_DELETE_TCB 12
+#define MIB_USE_CURRENT_TTL ((DWORD)-1)
+#define MIB_USE_CURRENT_FORWARDING ((DWORD)-1)
+#define MIB_TCP_MAXCONN_DYNAMIC ((DWORD)-1)
+typedef enum {
+ TCP_TABLE_BASIC_LISTENER,
+ TCP_TABLE_BASIC_CONNECTIONS,
+ TCP_TABLE_BASIC_ALL,
+ TCP_TABLE_OWNER_PID_LISTENER,
+ TCP_TABLE_OWNER_PID_CONNECTIONS,
+ TCP_TABLE_OWNER_PID_ALL,
+ TCP_TABLE_OWNER_MODULE_LISTENER,
+ TCP_TABLE_OWNER_MODULE_CONNECTIONS,
+ TCP_TABLE_OWNER_MODULE_ALL
+} TCP_TABLE_CLASS, *PTCP_TABLE_CLASS;
+typedef struct {
+ DWORD dwAddr;
+ DWORD dwIndex;
+ DWORD dwMask;
+ DWORD dwBCastAddr;
+ DWORD dwReasmSize;
+ unsigned short unused1;
+ unsigned short wType;
+} MIB_IPADDRROW, *PMIB_IPADDRROW;
+typedef struct {
+ DWORD dwNumEntries;
+ MIB_IPADDRROW table[ANY_SIZE];
+} MIB_IPADDRTABLE, *PMIB_IPADDRTABLE;
+typedef struct {
+ DWORD dwForwardDest;
+ DWORD dwForwardMask;
+ DWORD dwForwardPolicy;
+ DWORD dwForwardNextHop;
+ DWORD dwForwardIfIndex;
+ DWORD dwForwardType;
+ DWORD dwForwardProto;
+ DWORD dwForwardAge;
+ DWORD dwForwardNextHopAS;
+ DWORD dwForwardMetric1;
+ DWORD dwForwardMetric2;
+ DWORD dwForwardMetric3;
+ DWORD dwForwardMetric4;
+ DWORD dwForwardMetric5;
+} MIB_IPFORWARDROW, *PMIB_IPFORWARDROW;
+typedef struct {
+ DWORD dwNumEntries;
+ MIB_IPFORWARDROW table[ANY_SIZE];
+} MIB_IPFORWARDTABLE, *PMIB_IPFORWARDTABLE;
+typedef struct {
+ DWORD dwIndex;
+ DWORD dwPhysAddrLen;
+ BYTE bPhysAddr[MAXLEN_PHYSADDR];
+ DWORD dwAddr;
+ DWORD dwType;
+} MIB_IPNETROW, *PMIB_IPNETROW;
+typedef struct {
+ DWORD dwNumEntries;
+ MIB_IPNETROW table[ANY_SIZE];
+} MIB_IPNETTABLE, *PMIB_IPNETTABLE;
+typedef struct {
+ DWORD dwMsgs;
+ DWORD dwErrors;
+ DWORD dwDestUnreachs;
+ DWORD dwTimeExcds;
+ DWORD dwParmProbs;
+ DWORD dwSrcQuenchs;
+ DWORD dwRedirects;
+ DWORD dwEchos;
+ DWORD dwEchoReps;
+ DWORD dwTimestamps;
+ DWORD dwTimestampReps;
+ DWORD dwAddrMasks;
+ DWORD dwAddrMaskReps;
+} MIBICMPSTATS, *PMIBICMPSTATS;
+typedef struct {
+ MIBICMPSTATS icmpInStats;
+ MIBICMPSTATS icmpOutStats;
+} MIBICMPINFO, *PMIBICMPINFO;
+typedef struct {
+ MIBICMPINFO stats;
+} MIB_ICMP, *PMIB_ICMP;
+typedef struct {
+ WCHAR wszName[MAX_INTERFACE_NAME_LEN];
+ DWORD dwIndex;
+ DWORD dwType;
+ DWORD dwMtu;
+ DWORD dwSpeed;
+ DWORD dwPhysAddrLen;
+ BYTE bPhysAddr[MAXLEN_PHYSADDR];
+ DWORD dwAdminStatus;
+ DWORD dwOperStatus;
+ DWORD dwLastChange;
+ DWORD dwInOctets;
+ DWORD dwInUcastPkts;
+ DWORD dwInNUcastPkts;
+ DWORD dwInDiscards;
+ DWORD dwInErrors;
+ DWORD dwInUnknownProtos;
+ DWORD dwOutOctets;
+ DWORD dwOutUcastPkts;
+ DWORD dwOutNUcastPkts;
+ DWORD dwOutDiscards;
+ DWORD dwOutErrors;
+ DWORD dwOutQLen;
+ DWORD dwDescrLen;
+ BYTE bDescr[MAXLEN_IFDESCR];
+} MIB_IFROW, *PMIB_IFROW;
+typedef struct {
+ DWORD dwNumEntries;
+ MIB_IFROW table[ANY_SIZE];
+} MIB_IFTABLE, *PMIB_IFTABLE;
+typedef struct {
+ DWORD dwForwarding;
+ DWORD dwDefaultTTL;
+ DWORD dwInReceives;
+ DWORD dwInHdrErrors;
+ DWORD dwInAddrErrors;
+ DWORD dwForwDatagrams;
+ DWORD dwInUnknownProtos;
+ DWORD dwInDiscards;
+ DWORD dwInDelivers;
+ DWORD dwOutRequests;
+ DWORD dwRoutingDiscards;
+ DWORD dwOutDiscards;
+ DWORD dwOutNoRoutes;
+ DWORD dwReasmTimeout;
+ DWORD dwReasmReqds;
+ DWORD dwReasmOks;
+ DWORD dwReasmFails;
+ DWORD dwFragOks;
+ DWORD dwFragFails;
+ DWORD dwFragCreates;
+ DWORD dwNumIf;
+ DWORD dwNumAddr;
+ DWORD dwNumRoutes;
+} MIB_IPSTATS, *PMIB_IPSTATS;
+typedef struct {
+ DWORD dwRtoAlgorithm;
+ DWORD dwRtoMin;
+ DWORD dwRtoMax;
+ DWORD dwMaxConn;
+ DWORD dwActiveOpens;
+ DWORD dwPassiveOpens;
+ DWORD dwAttemptFails;
+ DWORD dwEstabResets;
+ DWORD dwCurrEstab;
+ DWORD dwInSegs;
+ DWORD dwOutSegs;
+ DWORD dwRetransSegs;
+ DWORD dwInErrs;
+ DWORD dwOutRsts;
+ DWORD dwNumConns;
+} MIB_TCPSTATS, *PMIB_TCPSTATS;
+typedef struct {
+ DWORD dwState;
+ DWORD dwLocalAddr;
+ DWORD dwLocalPort;
+ DWORD dwRemoteAddr;
+ DWORD dwRemotePort;
+} MIB_TCPROW, *PMIB_TCPROW;
+typedef struct {
+ DWORD dwNumEntries;
+ MIB_TCPROW table[ANY_SIZE];
+} MIB_TCPTABLE, *PMIB_TCPTABLE;
+typedef struct {
+ DWORD dwState;
+ DWORD dwLocalAddr;
+ DWORD dwLocalPort;
+ DWORD dwRemoteAddr;
+ DWORD dwRemotePort;
+ DWORD dwOwningPid;
+} MIB_TCPROW_OWNER_PID, *PMIB_TCPROW_OWNER_PID;
+typedef struct {
+ DWORD dwNumEntries;
+ MIB_TCPROW_OWNER_PID table[ANY_SIZE];
+} MIB_TCPTABLE_OWNER_PID, *PMIB_TCPTABLE_OWNER_PID;
+typedef struct {
+ DWORD dwInDatagrams;
+ DWORD dwNoPorts;
+ DWORD dwInErrors;
+ DWORD dwOutDatagrams;
+ DWORD dwNumAddrs;
+} MIB_UDPSTATS, *PMIB_UDPSTATS;
+typedef struct {
+ DWORD dwLocalAddr;
+ DWORD dwLocalPort;
+} MIB_UDPROW, *PMIB_UDPROW;
+typedef struct {
+ DWORD dwNumEntries;
+ MIB_UDPROW table[ANY_SIZE];
+} MIB_UDPTABLE, *PMIB_UDPTABLE;
+typedef struct {
+ UCHAR ucLocalAddr[16];
+ DWORD dwLocalScopeId;
+ DWORD dwLocalPort;
+ UCHAR ucRemoteAddr[16];
+ DWORD dwRemoteScopeId;
+ DWORD dwRemotePort;
+ DWORD dwState;
+ DWORD dwOwningPid;
+} MIB_TCP6ROW_OWNER_PID, *PMIB_TCP6ROW_OWNER_PID;
+typedef struct {
+ DWORD dwNumEntries;
+ MIB_TCP6ROW_OWNER_PID table[ANY_SIZE];
+} MIB_TCP6TABLE_OWNER_PID, *PMIB_TCP6TABLE_OWNER_PID;
+#ifdef __cplusplus
+}
+#endif
+#endif /* _IPRTRMIB_H */
diff --git a/tcc/include/winapi/iptypes.h b/tcc/include/winapi/iptypes.h
new file mode 100644
index 0000000..df281e6
--- /dev/null
+++ b/tcc/include/winapi/iptypes.h
@@ -0,0 +1,229 @@
+#ifndef _IPTYPES_H
+#define _IPTYPES_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#include <sys/types.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define DEFAULT_MINIMUM_ENTITIES 32
+#define MAX_ADAPTER_ADDRESS_LENGTH 8
+#define MAX_ADAPTER_DESCRIPTION_LENGTH 128
+#define MAX_ADAPTER_NAME_LENGTH 256
+#define MAX_DOMAIN_NAME_LEN 128
+#define MAX_HOSTNAME_LEN 128
+#define MAX_SCOPE_ID_LEN 256
+#define BROADCAST_NODETYPE 1
+#define PEER_TO_PEER_NODETYPE 2
+#define MIXED_NODETYPE 4
+#define HYBRID_NODETYPE 8
+#define IF_OTHER_ADAPTERTYPE 0
+#define IF_ETHERNET_ADAPTERTYPE 1
+#define IF_TOKEN_RING_ADAPTERTYPE 2
+#define IF_FDDI_ADAPTERTYPE 3
+#define IF_PPP_ADAPTERTYPE 4
+#define IF_LOOPBACK_ADAPTERTYPE 5
+#if (_WIN32_WINNT >= 0x0501)
+#define IP_ADAPTER_DDNS_ENABLED 0x00000001
+#define IP_ADAPTER_REGISTER_ADAPTER_SUFFIX 0x00000002
+#define IP_ADAPTER_DHCP_ENABLED 0x00000004
+#define IP_ADAPTER_RECEIVE_ONLY 0x00000008
+#define IP_ADAPTER_NO_MULTICAST 0x00000010
+#define IP_ADAPTER_IPV6_OTHER_STATEFUL_CONFIG 0x00000020
+#define IP_ADAPTER_ADDRESS_DNS_ELIGIBLE 0x00000001
+#define IP_ADAPTER_ADDRESS_TRANSIENT 0x00000002
+#endif
+
+typedef struct {
+ char String[16];
+} IP_ADDRESS_STRING, *PIP_ADDRESS_STRING, IP_MASK_STRING, *PIP_MASK_STRING;
+typedef struct _IP_ADDR_STRING {
+ struct _IP_ADDR_STRING* Next;
+ IP_ADDRESS_STRING IpAddress;
+ IP_MASK_STRING IpMask;
+ DWORD Context;
+} IP_ADDR_STRING, *PIP_ADDR_STRING;
+typedef struct _IP_ADAPTER_INFO {
+ struct _IP_ADAPTER_INFO* Next;
+ DWORD ComboIndex;
+ char AdapterName[MAX_ADAPTER_NAME_LENGTH+4];
+ char Description[MAX_ADAPTER_DESCRIPTION_LENGTH+4];
+ UINT AddressLength;
+ BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH];
+ DWORD Index;
+ UINT Type;
+ UINT DhcpEnabled;
+ PIP_ADDR_STRING CurrentIpAddress;
+ IP_ADDR_STRING IpAddressList;
+ IP_ADDR_STRING GatewayList;
+ IP_ADDR_STRING DhcpServer;
+ BOOL HaveWins;
+ IP_ADDR_STRING PrimaryWinsServer;
+ IP_ADDR_STRING SecondaryWinsServer;
+ time_t LeaseObtained;
+ time_t LeaseExpires;
+} IP_ADAPTER_INFO, *PIP_ADAPTER_INFO;
+typedef struct _IP_PER_ADAPTER_INFO {
+ UINT AutoconfigEnabled;
+ UINT AutoconfigActive;
+ PIP_ADDR_STRING CurrentDnsServer;
+ IP_ADDR_STRING DnsServerList;
+} IP_PER_ADAPTER_INFO, *PIP_PER_ADAPTER_INFO;
+typedef struct _FIXED_INFO {
+ char HostName[MAX_HOSTNAME_LEN+4] ;
+ char DomainName[MAX_DOMAIN_NAME_LEN+4];
+ PIP_ADDR_STRING CurrentDnsServer;
+ IP_ADDR_STRING DnsServerList;
+ UINT NodeType;
+ char ScopeId[MAX_SCOPE_ID_LEN+4];
+ UINT EnableRouting;
+ UINT EnableProxy;
+ UINT EnableDns;
+} FIXED_INFO, *PFIXED_INFO;
+#if (_WIN32_WINNT >= 0x0501) && defined(_WINSOCK2_H)
+typedef enum {
+ IfOperStatusUp = 1,
+ IfOperStatusDown,
+ IfOperStatusTesting,
+ IfOperStatusUnknown,
+ IfOperStatusDormant,
+ IfOperStatusNotPresent,
+ IfOperStatusLowerLayerDown
+} IF_OPER_STATUS;
+typedef enum {
+ IpDadStateInvalid = 0,
+ IpDadStateTentative,
+ IpDadStateDuplicate,
+ IpDadStateDeprecated,
+ IpDadStatePreferred
+} IP_DAD_STATE;
+typedef enum {
+ IpPrefixOriginOther = 0,
+ IpPrefixOriginManual,
+ IpPrefixOriginWellKnown,
+ IpPrefixOriginDhcp,
+ IpPrefixOriginRouterAdvertisement
+} IP_PREFIX_ORIGIN;
+typedef enum {
+ IpSuffixOriginOther = 0,
+ IpSuffixOriginManual,
+ IpSuffixOriginWellKnown,
+ IpSuffixOriginDhcp,
+ IpSuffixOriginLinkLayerAddress,
+ IpSuffixOriginRandom
+} IP_SUFFIX_ORIGIN;
+typedef enum {
+ ScopeLevelInterface = 1,
+ ScopeLevelLink = 2,
+ ScopeLevelSubnet = 3,
+ ScopeLevelAdmin = 4,
+ ScopeLevelSite = 5,
+ ScopeLevelOrganization = 8,
+ ScopeLevelGlobal = 14
+} SCOPE_LEVEL;
+typedef struct {
+ ULONG Index;
+ ULONG MediaType;
+ UCHAR ConnectionType;
+ UCHAR AccessType;
+ GUID DeviceGuid;
+ GUID InterfaceGuid;
+} IP_INTERFACE_NAME_INFO,*PIP_INTERFACE_NAME_INFO;
+typedef struct _IP_ADAPTER_ANYCAST_ADDRESS {
+ _ANONYMOUS_UNION union {
+ ULONGLONG Alignment;
+ _ANONYMOUS_STRUCT struct {
+ ULONG Length;
+ DWORD Flags;
+ } DUMMYSTRUCTNAME;
+ } DUMMYUNIONNAME;
+ struct _IP_ADAPTER_ANYCAST_ADDRESS* Next;
+ SOCKET_ADDRESS Address;
+} IP_ADAPTER_ANYCAST_ADDRESS,*PIP_ADAPTER_ANYCAST_ADDRESS;
+typedef struct _IP_ADAPTER_MULTICAST_ADDRESS {
+ _ANONYMOUS_UNION union {
+ ULONGLONG Alignment;
+ _ANONYMOUS_STRUCT struct {
+ ULONG Length;
+ DWORD Flags;
+ } DUMMYSTRUCTNAME;
+ } DUMMYUNIONNAME;
+ struct _IP_ADAPTER_MULTICAST_ADDRESS* Next;
+ SOCKET_ADDRESS Address;
+} IP_ADAPTER_MULTICAST_ADDRESS,*PIP_ADAPTER_MULTICAST_ADDRESS;
+typedef struct _IP_ADAPTER_UNICAST_ADDRESS {
+ _ANONYMOUS_UNION union {
+ ULONGLONG Alignment;
+ _ANONYMOUS_STRUCT struct {
+ ULONG Length;
+ DWORD Flags;
+ } DUMMYSTRUCTNAME;
+ } DUMMYUNIONNAME;
+ struct _IP_ADAPTER_UNICAST_ADDRESS* Next;
+ SOCKET_ADDRESS Address;
+ IP_PREFIX_ORIGIN PrefixOrigin;
+ IP_SUFFIX_ORIGIN SuffixOrigin;
+ IP_DAD_STATE DadState;
+ ULONG ValidLifetime;
+ ULONG PreferredLifetime;
+ ULONG LeaseLifetime;
+} IP_ADAPTER_UNICAST_ADDRESS,*PIP_ADAPTER_UNICAST_ADDRESS;
+typedef struct _IP_ADAPTER_DNS_SERVER_ADDRESS {
+ _ANONYMOUS_UNION union {
+ ULONGLONG Alignment;
+ _ANONYMOUS_STRUCT struct {
+ ULONG Length;
+ DWORD Reserved;
+ } DUMMYSTRUCTNAME;
+ } DUMMYUNIONNAME;
+ struct _IP_ADAPTER_DNS_SERVER_ADDRESS* Next;
+ SOCKET_ADDRESS Address;
+} IP_ADAPTER_DNS_SERVER_ADDRESS,*PIP_ADAPTER_DNS_SERVER_ADDRESS;
+typedef struct _IP_ADAPTER_PREFIX {
+ _ANONYMOUS_UNION union {
+ ULONGLONG Alignment;
+ _ANONYMOUS_STRUCT struct {
+ ULONG Length;
+ DWORD Flags;
+ } DUMMYSTRUCTNAME;
+ } DUMMYUNIONNAME;
+ struct _IP_ADAPTER_PREFIX* Next;
+ SOCKET_ADDRESS Address;
+ ULONG PrefixLength;
+} IP_ADAPTER_PREFIX,*PIP_ADAPTER_PREFIX;
+typedef struct _IP_ADAPTER_ADDRESSES {
+ _ANONYMOUS_UNION union {
+ ULONGLONG Alignment;
+ _ANONYMOUS_STRUCT struct {
+ ULONG Length;
+ DWORD IfIndex;
+ } DUMMYSTRUCTNAME;
+ } DUMMYUNIONNAME;
+ struct _IP_ADAPTER_ADDRESSES* Next;
+ PCHAR AdapterName;
+ PIP_ADAPTER_UNICAST_ADDRESS FirstUnicastAddress;
+ PIP_ADAPTER_ANYCAST_ADDRESS FirstAnycastAddress;
+ PIP_ADAPTER_MULTICAST_ADDRESS FirstMulticastAddress;
+ PIP_ADAPTER_DNS_SERVER_ADDRESS FirstDnsServerAddress;
+ PWCHAR DnsSuffix;
+ PWCHAR Description;
+ PWCHAR FriendlyName;
+ BYTE PhysicalAddress[MAX_ADAPTER_ADDRESS_LENGTH];
+ DWORD PhysicalAddressLength;
+ DWORD Flags;
+ DWORD Mtu;
+ DWORD IfType;
+ IF_OPER_STATUS OperStatus;
+ DWORD Ipv6IfIndex;
+ DWORD ZoneIndices[16];
+ PIP_ADAPTER_PREFIX FirstPrefix;
+} IP_ADAPTER_ADDRESSES,*PIP_ADAPTER_ADDRESSES;
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* _IPTYPES_H */
diff --git a/tcc/include/winapi/ipxconst.h b/tcc/include/winapi/ipxconst.h
new file mode 100644
index 0000000..bd52d34
--- /dev/null
+++ b/tcc/include/winapi/ipxconst.h
@@ -0,0 +1,36 @@
+/*
+ * ipxconst.h - Routing and Remote Access Services
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may use,
+ * modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+#ifndef _IPXCONST_H
+#define _IPXCONST_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--- Router Management Reference - Router Information Structures - IPX Information Structures */
+#if (_WIN32_WINNT >= 0x0500)
+#define ADMIN_STATE_DISABLED 0x00000001
+#define ADMIN_STATE_ENABLED 0x00000002
+#define ADMIN_STATE_ENABLED_ONLY_FOR_NETBIOS_STATIC_ROUTING 0x00000003
+#define ADMIN_STATE_ENABLED_ONLY_FOR_OPER_STATE_UP 0x00000004
+#endif /* (_WIN32_WINNT >= 0x0500) */
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/ipxrtdef.h b/tcc/include/winapi/ipxrtdef.h
new file mode 100644
index 0000000..5000456
--- /dev/null
+++ b/tcc/include/winapi/ipxrtdef.h
@@ -0,0 +1,58 @@
+/*
+ * ipxrtdef.h - Routing and Remote Access Services
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may use,
+ * modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+#ifndef _IPXRTDEF_H
+#define _IPXRTDEF_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#include <stm.h>
+#include <ipxconst.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--- Router Management Reference - Router Information Enumeration Types */
+#define IPX_INTERFACE_INFO_TYPE 0x0001
+#define IPX_STATIC_ROUTE_INFO_TYPE 0x0002
+#define IPX_STATIC_SERVICE_INFO_TYPE 0x0003
+#define IPX_SERVICE_FILTER_INFO_TYPE 0x0004
+#define IPX_ROUTE_FILTER_INFO_TYPE 0x0005
+#define IPX_IN_TRAFFIC_FILTER_INFO_TYPE 0x0006
+#define IPX_ADAPTER_INFO_TYPE 0x0007
+#define IPXWAN_INTERFACE_INFO_TYPE 0x0008
+#define IPX_GLOBAL_INFO_TYPE 0x0009
+#define IPX_STATIC_NETBIOS_NAME_INFO_TYPE 0x000A
+#define IPX_IN_TRAFFIC_FILTER_GLOBAL_INFO_TYPE 0x000B
+#define IPX_OUT_TRAFFIC_FILTER_INFO_TYPE 0x000C
+#define IPX_OUT_TRAFFIC_FILTER_GLOBAL_INFO_TYPE 0x000D
+/*--- Router Management Reference - Router Information Structures - IPX Information Structures */
+#if (_WIN32_WINNT >= 0x0500)
+typedef struct _IPX_IF_INFO {
+ ULONG AdminState;
+ ULONG NetbiosAccept;
+ ULONG NetbiosDeliver;
+} IPX_IF_INFO,*PIPX_IF_INFO;
+typedef IPX_SERVER_ENTRY IPX_STATIC_SERVICE_INFO,*PIPX_STATIC_SERVICE_INFO;
+typedef struct _IPXWAN_IF_INFO {
+ ULONG AdminState;
+} IPXWAN_IF_INFO,*PIPXWAN_IF_INFO;
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/ipxtfflt.h b/tcc/include/winapi/ipxtfflt.h
new file mode 100644
index 0000000..c089d6c
--- /dev/null
+++ b/tcc/include/winapi/ipxtfflt.h
@@ -0,0 +1,38 @@
+/*
+ * ipxtfflt.h - Routing and Remote Access Services
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may use,
+ * modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+#ifndef _IPXTFFLT_H
+#define _IPXTFFLT_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--- Router Management Reference - Router Information Structures - IPX Information Structures */
+#if 0
+typedef struct {
+ ???
+} IPX_TRAFFIC_FILTER_INFO,*PIPX_TRAFFIC_FILTER_INFO;
+typedef struct {
+ ???
+} IPX_TRAFFIC_FILTER_GLOBAL_INFO,*PIPX_TRAFFIC_FILTER_GLOBAL_INFO;
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/isguids.h b/tcc/include/winapi/isguids.h
new file mode 100644
index 0000000..d5655d2
--- /dev/null
+++ b/tcc/include/winapi/isguids.h
@@ -0,0 +1,15 @@
+#ifndef _ISGUID_H
+#define _ISGUID_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern const GUID CLSID_InternetShortcut;
+extern const GUID IID_IUniformResourceLocator;
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/ks.h b/tcc/include/winapi/ks.h
new file mode 100644
index 0000000..7154eae
--- /dev/null
+++ b/tcc/include/winapi/ks.h
@@ -0,0 +1,20 @@
+#ifndef _KS_H
+#define _KS_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--- DirectShow Reference - DirectShow Structures */
+typedef struct {
+ ULONG Size;
+ ULONG Count;
+} KSMULTIPLE_ITEM,*PKSMULTIPLE_ITEM;
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/ksmedia.h b/tcc/include/winapi/ksmedia.h
new file mode 100644
index 0000000..906649d
--- /dev/null
+++ b/tcc/include/winapi/ksmedia.h
@@ -0,0 +1,23 @@
+#ifndef _KSMEDIA_H
+#define _KSMEDIA_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--- DirectShow Reference - DirectShow Enumerated Types - CameraControlFlags Enumeration */
+#define KSPROPERTY_CAMERACONTROL_FLAGS_AUTO 0x0001L
+#define KSPROPERTY_CAMERACONTROL_FLAGS_MANUAL 0x0002L
+#define KSPROPERTY_CAMERACONTROL_FLAGS_ABSOLUTE 0x0000L
+#define KSPROPERTY_CAMERACONTROL_FLAGS_RELATIVE 0x0010L
+/*--- DirectShow Reference - DirectShow Enumerated Types - VideoProcAmpFlags Enumeration */
+#define KSPROPERTY_VIDEOPROCAMP_FLAGS_AUTO 0X0001L
+#define KSPROPERTY_VIDEOPROCAMP_FLAGS_MANUAL 0X0002L
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/largeint.h b/tcc/include/winapi/largeint.h
new file mode 100644
index 0000000..b2222a9
--- /dev/null
+++ b/tcc/include/winapi/largeint.h
@@ -0,0 +1,112 @@
+/*
+ largeint.h
+
+ Header for 64 bit integer arithmetics library
+
+ */
+#ifndef _LARGEINT_H
+#define _LARGEINT_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#include <windows.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef _HAVE_INT64
+#define _toi (__int64)
+#define _toui (unsigned __int64)
+#else
+#error "64 bit integers not supported"
+#endif
+
+/*
+ We don't let the compiler see the prototypes if we are compiling the
+ library because if it does it will choke on conflicting types in the
+ prototypes.
+*/
+
+#if defined(LARGEINT_PROTOS) || defined(__COMPILING_LARGEINT)
+
+#ifndef __COMPILING_LARGEINT
+/* addition/subtraction */
+LARGE_INTEGER WINAPI LargeIntegerAdd (LARGE_INTEGER, LARGE_INTEGER);
+LARGE_INTEGER WINAPI LargeIntegerSubtract (LARGE_INTEGER, LARGE_INTEGER);
+
+/* bit operations */
+LARGE_INTEGER WINAPI LargeIntegerArithmeticShift (LARGE_INTEGER, int);
+LARGE_INTEGER WINAPI LargeIntegerShiftLeft (LARGE_INTEGER, int);
+LARGE_INTEGER WINAPI LargeIntegerShiftRight (LARGE_INTEGER, int);
+LARGE_INTEGER WINAPI LargeIntegerNegate (LARGE_INTEGER);
+
+/* conversion */
+LARGE_INTEGER WINAPI ConvertLongToLargeInteger (LONG);
+LARGE_INTEGER WINAPI ConvertUlongToLargeInteger (ULONG);
+
+/* multiplication */
+LARGE_INTEGER WINAPI EnlargedIntegerMultiply (LONG, LONG);
+LARGE_INTEGER WINAPI EnlargedUnsignedMultiply (ULONG, ULONG);
+LARGE_INTEGER WINAPI ExtendedIntegerMultiply (LARGE_INTEGER, LONG);
+/* FIXME: is this not part of largeint? */
+LARGE_INTEGER WINAPI LargeIntegerMultiply (LARGE_INTEGER, LARGE_INTEGER);
+#endif /* __COMPILING_LARGEINT */
+
+#else
+
+#define LargeIntegerAdd(a,b) (LARGE_INTEGER)(_toi(a) + _toi(b))
+#define LargeIntegerSubtract(a,b) (LARGE_INTEGER)(_toi(a) - _toi(b))
+#define LargeIntegerRightShift(i,n) (LARGE_INTEGER)(_toi(i) >> (n))
+#define LargeIntegerArithmeticShift LargeIntegerRightShift
+#define LargeIntegerLeftShift(i,n) (LARGE_INTEGER)(_toi(i) << (n))
+#define LargeIntegerNegate(i) (LARGE_INTEGER)(- _toi(i))
+#define EnlargedIntegerMultiply(a,b) (LARGE_INTEGER)(_toi(a) * _toi(b))
+#define EnlargedUnsignedMultiply(a,b) (LARGE_INTEGER)(_toui(a) * _toui(b))
+#define ExtendedIntegerMultiply(a,b) (LARGE_INTEGER)(_toi(a) * _toi(b))
+/* FIXME: should this exist */
+#define LargeIntegerMultiply(a,b) (LARGE_INTEGER)(_toi(a) * _toi(b))
+#define ConvertLongToLargeInteger(l) (LARGE_INTEGER)(_toi(l))
+#define ConvertUlongToLargeInteger(ul) (LARGE_INTEGER)(_toui(ul))
+
+#endif /* LARGEINT_PROTOS || __COMPILING_LARGEINT */
+
+#ifndef __COMPILING_LARGEINT
+/* division; no macros of these because of multiple expansion */
+LARGE_INTEGER WINAPI LargeIntegerDivide (LARGE_INTEGER, LARGE_INTEGER, PLARGE_INTEGER);
+ULONG WINAPI EnlargedUnsignedDivide (ULARGE_INTEGER, ULONG, PULONG);
+LARGE_INTEGER WINAPI ExtendedLargeIntegerDivide (LARGE_INTEGER, ULONG, PULONG);
+LARGE_INTEGER WINAPI ExtendedMagicDivide (LARGE_INTEGER, LARGE_INTEGER, int);
+#endif /* __COMPILING_LARGEINT */
+
+#define LargeIntegerAnd(dest, src, m) \
+{ \
+ dest._STRUCT_NAME(u.)LowPart = s._STRUCT_NAME(u.)LowPart & m._STRUCT_NAME(u.)LowPart; \
+ dest._STRUCT_NAME(u.)HighPart = s._STRUCT_NAME(u.)HighPart & m._STRUCT_NAME(u.)HighPart; \
+}
+
+/* comparision */
+#define LargeIntegerGreaterThan(a,b) (_toi(a) > _toi(b))
+#define LargeIntegerGreaterThanOrEqual(a,b) (_toi(a) >= _toi(b))
+#define LargeIntegerEqualTo(a,b) (_toi(a) == _toi(b))
+#define LargeIntegerNotEqualTo(a,b) (_toi(a) != _toi(b))
+#define LargeIntegerLessThan(a,b) (_toi(a) < _toi(b))
+#define LargeIntegerLessThanOrEqualTo(a,b) (_toi(a) <= _toi(b))
+#define LargeIntegerGreaterThanZero(a) (_toi(a) > 0)
+#define LargeIntegerGreaterOrEqualToZero(a) ((a)._STRUCT_NAME(u.)HighPart > 0)
+#define LargeIntegerEqualToZero(a) !((a)._STRUCT_NAME(u.)LowPart | (a)._STRUCT_NAME(u.)HighPart)
+#define LargeIntegerNotEqualToZero(a) ((a)._STRUCT_NAME(u.)LowPart | (a)._STRUCT_NAME(u.)HighPart)
+#define LargeIntegerLessThanZero(a) ((a)._STRUCT_NAME(u.)HighPart < 0)
+#define LargeIntegerLessOrEqualToZero(a) (_toi(a) <= 0)
+
+#ifndef __COMPILING_LARGEINT
+#undef _toi
+#undef _toui
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _LARGEINT_H */
diff --git a/tcc/include/winapi/lm.h b/tcc/include/winapi/lm.h
new file mode 100644
index 0000000..db1779d
--- /dev/null
+++ b/tcc/include/winapi/lm.h
@@ -0,0 +1,27 @@
+#ifndef _LM_H
+#define _LM_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#include <lmcons.h>
+#include <lmaccess.h>
+#include <lmalert.h>
+#include <lmat.h>
+#include <lmaudit.h>
+#include <lmchdev.h>
+#include <lmconfig.h>
+#include <lmerr.h>
+#include <lmmsg.h>
+#include <lmshare.h>
+#include <lmapibuf.h>
+#include <lmremutl.h>
+#include <lmrepl.h>
+#include <lmuse.h>
+#include <lmerrlog.h>
+#include <lmsvc.h>
+#include <lmwksta.h>
+#include <lmserver.h>
+#include <lmstats.h>
+
+#endif
diff --git a/tcc/include/winapi/lmaccess.h b/tcc/include/winapi/lmaccess.h
new file mode 100644
index 0000000..5c14db8
--- /dev/null
+++ b/tcc/include/winapi/lmaccess.h
@@ -0,0 +1,654 @@
+#ifndef _LMACCESS_H
+#define _LMACCESS_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#include <lmcons.h>
+#define GROUP_SPECIALGRP_USERS L"USERS"
+#define GROUP_SPECIALGRP_ADMINS L"ADMINS"
+#define GROUP_SPECIALGRP_GUESTS L"GUESTS"
+#define GROUP_SPECIALGRP_LOCAL L"LOCAL"
+#define ACCESS_LETTERS "RWCXDAP "
+#define NETLOGON_CONTROL_QUERY 1
+#define NETLOGON_CONTROL_REPLICATE 2
+#define NETLOGON_CONTROL_SYNCHRONIZE 3
+#define NETLOGON_CONTROL_PDC_REPLICATE 4
+#define NETLOGON_CONTROL_REDISCOVER 5
+#define NETLOGON_CONTROL_TC_QUERY 6
+#define NETLOGON_CONTROL_BACKUP_CHANGE_LOG 65532
+#define NETLOGON_CONTROL_TRUNCATE_LOG 65533
+#define NETLOGON_CONTROL_SET_DBFLAG 65534
+#define NETLOGON_CONTROL_BREAKPOINT 65535
+#define UF_SCRIPT 1
+#define UF_ACCOUNTDISABLE 2
+#define UF_HOMEDIR_REQUIRED 8
+#define UF_LOCKOUT 16
+#define UF_PASSWD_NOTREQD 32
+#define UF_PASSWD_CANT_CHANGE 64
+#define UF_TEMP_DUPLICATE_ACCOUNT 256
+#define UF_NORMAL_ACCOUNT 512
+#define UF_INTERDOMAIN_TRUST_ACCOUNT 2048
+#define UF_WORKSTATION_TRUST_ACCOUNT 4096
+#define UF_SERVER_TRUST_ACCOUNT 8192
+#define UF_MNS_LOGON_ACCOUNT 131072
+#define UF_MACHINE_ACCOUNT_MASK (UF_INTERDOMAIN_TRUST_ACCOUNT|UF_WORKSTATION_TRUST_ACCOUNT|UF_SERVER_TRUST_ACCOUNT)
+#define UF_ACCOUNT_TYPE_MASK (UF_TEMP_DUPLICATE_ACCOUNT|UF_NORMAL_ACCOUNT|UF_INTERDOMAIN_TRUST_ACCOUNT|UF_WORKSTATION_TRUST_ACCOUNT|UF_SERVER_TRUST_ACCOUNT)
+#define UF_DONT_EXPIRE_PASSWD 65536
+#define UF_SETTABLE_BITS (UF_SCRIPT|UF_ACCOUNTDISABLE|UF_LOCKOUT|UF_HOMEDIR_REQUIRED|UF_PASSWD_NOTREQD|UF_PASSWD_CANT_CHANGE|UF_ACCOUNT_TYPE_MASK|UF_DONT_EXPIRE_PASSWD)
+#define FILTER_TEMP_DUPLICATE_ACCOUNT 1
+#define FILTER_NORMAL_ACCOUNT 2
+#define FILTER_INTERDOMAIN_TRUST_ACCOUNT 8
+#define FILTER_WORKSTATION_TRUST_ACCOUNT 16
+#define FILTER_SERVER_TRUST_ACCOUNT 32
+#define LG_INCLUDE_INDIRECT 1
+#define AF_OP_PRINT 1
+#define AF_OP_COMM 2
+#define AF_OP_SERVER 4
+#define AF_OP_ACCOUNTS 8
+#define AF_SETTABLE_BITS (AF_OP_PRINT|AF_OP_COMM|AF_OP_SERVER|AF_OP_ACCOUNTS)
+#define UAS_ROLE_STANDALONE 0
+#define UAS_ROLE_MEMBER 1
+#define UAS_ROLE_BACKUP 2
+#define UAS_ROLE_PRIMARY 3
+#define USER_NAME_PARMNUM 1
+#define USER_PASSWORD_PARMNUM 3
+#define USER_PASSWORD_AGE_PARMNUM 4
+#define USER_PRIV_PARMNUM 5
+#define USER_HOME_DIR_PARMNUM 6
+#define USER_COMMENT_PARMNUM 7
+#define USER_FLAGS_PARMNUM 8
+#define USER_SCRIPT_PATH_PARMNUM 9
+#define USER_AUTH_FLAGS_PARMNUM 10
+#define USER_FULL_NAME_PARMNUM 11
+#define USER_USR_COMMENT_PARMNUM 12
+#define USER_PARMS_PARMNUM 13
+#define USER_WORKSTATIONS_PARMNUM 14
+#define USER_LAST_LOGON_PARMNUM 15
+#define USER_LAST_LOGOFF_PARMNUM 16
+#define USER_ACCT_EXPIRES_PARMNUM 17
+#define USER_MAX_STORAGE_PARMNUM 18
+#define USER_UNITS_PER_WEEK_PARMNUM 19
+#define USER_LOGON_HOURS_PARMNUM 20
+#define USER_PAD_PW_COUNT_PARMNUM 21
+#define USER_NUM_LOGONS_PARMNUM 22
+#define USER_LOGON_SERVER_PARMNUM 23
+#define USER_COUNTRY_CODE_PARMNUM 24
+#define USER_CODE_PAGE_PARMNUM 25
+#define USER_PRIMARY_GROUP_PARMNUM 51
+#define USER_PROFILE 52
+#define USER_PROFILE_PARMNUM 52
+#define USER_HOME_DIR_DRIVE_PARMNUM 53
+#define USER_NAME_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+USER_NAME_PARMNUM)
+#define USER_PASSWORD_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+USER_PASSWORD_PARMNUM)
+#define USER_PASSWORD_AGE_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+USER_PASSWORD_AGE_PARMNUM)
+#define USER_PRIV_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+USER_PRIV_PARMNUM)
+#define USER_HOME_DIR_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+USER_HOME_DIR_PARMNUM)
+#define USER_COMMENT_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+USER_COMMENT_PARMNUM)
+#define USER_FLAGS_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+USER_FLAGS_PARMNUM)
+#define USER_SCRIPT_PATH_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+USER_SCRIPT_PATH_PARMNUM)
+#define USER_AUTH_FLAGS_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+USER_AUTH_FLAGS_PARMNUM)
+#define USER_FULL_NAME_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+USER_FULL_NAME_PARMNUM)
+#define USER_USR_COMMENT_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+USER_USR_COMMENT_PARMNUM)
+#define USER_PARMS_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+USER_PARMS_PARMNUM)
+#define USER_WORKSTATIONS_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+USER_WORKSTATIONS_PARMNUM)
+#define USER_LAST_LOGON_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+USER_LAST_LOGON_PARMNUM)
+#define USER_LAST_LOGOFF_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+USER_LAST_LOGOFF_PARMNUM)
+#define USER_ACCT_EXPIRES_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+USER_ACCT_EXPIRES_PARMNUM)
+#define USER_MAX_STORAGE_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+USER_MAX_STORAGE_PARMNUM)
+#define USER_UNITS_PER_WEEK_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+USER_UNITS_PER_WEEK_PARMNUM)
+#define USER_LOGON_HOURS_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+USER_LOGON_HOURS_PARMNUM)
+#define USER_PAD_PW_COUNT_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+USER_PAD_PW_COUNT_PARMNUM)
+#define USER_NUM_LOGONS_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+USER_NUM_LOGONS_PARMNUM)
+#define USER_LOGON_SERVER_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+USER_LOGON_SERVER_PARMNUM)
+#define USER_COUNTRY_CODE_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+USER_COUNTRY_CODE_PARMNUM)
+#define USER_CODE_PAGE_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+USER_CODE_PAGE_PARMNUM)
+#define USER_PRIMARY_GROUP_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+USER_PRIMARY_GROUP_PARMNUM)
+#define USER_POSIX_ID_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+USER_POSIX_ID_PARMNUM)
+#define USER_HOME_DIR_DRIVE_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+USER_HOME_DIR_DRIVE_PARMNUM)
+#define NULL_USERSETINFO_PASSWD " "
+#define TIMEQ_FOREVER ((ULONG)-1)
+#define USER_MAXSTORAGE_UNLIMITED ((ULONG)-1)
+#define USER_NO_LOGOFF ((ULONG)-1L)
+#define UNITS_PER_DAY 24
+#define UNITS_PER_WEEK 168
+#define USER_PRIV_MASK 3
+#define USER_PRIV_GUEST 0
+#define USER_PRIV_USER 1
+#define USER_PRIV_ADMIN 2
+#define MAX_PASSWD_LEN PWLEN
+#define DEF_MIN_PWLEN 6
+#define DEF_PWUNIQUENESS 5
+#define DEF_MAX_PWHIST 8
+#define DEF_MAX_PWAGE TIMEQ_FOREVER
+#define DEF_MIN_PWAGE 0
+#define DEF_FORCE_LOGOFF (ULONG)0xffffffff
+#define DEF_MAX_BADPW 0
+#define ONE_DAY 86400
+#define VALIDATED_LOGON 0
+#define PASSWORD_EXPIRED 2
+#define NON_VALIDATED_LOGON 3
+#define VALID_LOGOFF 1
+#define MODALS_MIN_PASSWD_LEN_PARMNUM 1
+#define MODALS_MAX_PASSWD_AGE_PARMNUM 2
+#define MODALS_MIN_PASSWD_AGE_PARMNUM 3
+#define MODALS_FORCE_LOGOFF_PARMNUM 4
+#define MODALS_PASSWD_HIST_LEN_PARMNUM 5
+#define MODALS_ROLE_PARMNUM 6
+#define MODALS_PRIMARY_PARMNUM 7
+#define MODALS_DOMAIN_NAME_PARMNUM 8
+#define MODALS_DOMAIN_ID_PARMNUM 9
+#define MODALS_LOCKOUT_DURATION_PARMNUM 10
+#define MODALS_LOCKOUT_OBSERVATION_WINDOW_PARMNUM 11
+#define MODALS_LOCKOUT_THRESHOLD_PARMNUM 12
+#define MODALS_MIN_PASSWD_LEN_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+MODALS_MIN_PASSWD_LEN_PARMNUM)
+#define MODALS_MAX_PASSWD_AGE_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+MODALS_MAX_PASSWD_AGE_PARMNUM)
+#define MODALS_MIN_PASSWD_AGE_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+MODALS_MIN_PASSWD_AGE_PARMNUM)
+#define MODALS_FORCE_LOGOFF_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+MODALS_FORCE_LOGOFF_PARMNUM)
+#define MODALS_PASSWD_HIST_LEN_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+MODALS_PASSWD_HIST_LEN_PARMNUM)
+#define MODALS_ROLE_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+MODALS_ROLE_PARMNUM)
+#define MODALS_PRIMARY_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+MODALS_PRIMARY_PARMNUM)
+#define MODALS_DOMAIN_NAME_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+MODALS_DOMAIN_NAME_PARMNUM)
+#define MODALS_DOMAIN_ID_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+MODALS_DOMAIN_ID_PARMNUM)
+#define GROUPIDMASK 0x8000
+#define GROUP_ALL_PARMNUM 0
+#define GROUP_NAME_PARMNUM 1
+#define GROUP_COMMENT_PARMNUM 2
+#define GROUP_ATTRIBUTES_PARMNUM 3
+#define GROUP_ALL_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+GROUP_ALL_PARMNUM)
+#define GROUP_NAME_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+GROUP_NAME_PARMNUM)
+#define GROUP_COMMENT_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+GROUP_COMMENT_PARMNUM)
+#define GROUP_ATTRIBUTES_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+GROUP_ATTRIBUTES_PARMNUM)
+#define GROUP_POSIX_ID_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+GROUP_POSIX_ID_PARMNUM)
+#define LOCALGROUP_NAME_PARMNUM 1
+#define LOCALGROUP_COMMENT_PARMNUM 2
+#define MAXPERMENTRIES 64
+#define ACCESS_NONE 0
+#define ACCESS_ALL (ACCESS_READ|ACCESS_WRITE|ACCESS_CREATE|ACCESS_EXEC|ACCESS_DELETE|ACCESS_ATRIB|ACCESS_PERM)
+#define ACCESS_READ 1
+#define ACCESS_WRITE 2
+#define ACCESS_CREATE 4
+#define ACCESS_EXEC 8
+#define ACCESS_DELETE 16
+#define ACCESS_ATRIB 32
+#define ACCESS_PERM 64
+#define ACCESS_GROUP 0x8000
+#define ACCESS_AUDIT 1
+#define ACCESS_SUCCESS_OPEN 16
+#define ACCESS_SUCCESS_WRITE 32
+#define ACCESS_SUCCESS_DELETE 64
+#define ACCESS_SUCCESS_ACL 128
+#define ACCESS_SUCCESS_MASK 240
+#define ACCESS_FAIL_OPEN 256
+#define ACCESS_FAIL_WRITE 512
+#define ACCESS_FAIL_DELETE 1024
+#define ACCESS_FAIL_ACL 2048
+#define ACCESS_FAIL_MASK 3840
+#define ACCESS_FAIL_SHIFT 4
+#define ACCESS_RESOURCE_NAME_PARMNUM 1
+#define ACCESS_ATTR_PARMNUM 2
+#define ACCESS_COUNT_PARMNUM 3
+#define ACCESS_ACCESS_LIST_PARMNUM 4
+#define ACCESS_RESOURCE_NAME_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+ACCESS_RESOURCE_NAME_PARMNUM)
+#define ACCESS_ATTR_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+ACCESS_ATTR_PARMNUM)
+#define ACCESS_COUNT_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+ACCESS_COUNT_PARMNUM)
+#define ACCESS_ACCESS_LIST_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+ACCESS_ACCESS_LIST_PARMNUM)
+#define NETLOGON_REPLICATION_NEEDED 1
+#define NETLOGON_REPLICATION_IN_PROGRESS 2
+#define NETLOGON_FULL_SYNC_REPLICATION 4
+#define NETLOGON_REDO_NEEDED 8
+
+typedef struct _USER_INFO_0 { LPWSTR usri0_name; }USER_INFO_0,*PUSER_INFO_0,*LPUSER_INFO_0;
+typedef struct _USER_INFO_1 {
+ LPWSTR usri1_name;
+ LPWSTR usri1_password;
+ DWORD usri1_password_age;
+ DWORD usri1_priv;
+ LPWSTR usri1_home_dir;
+ LPWSTR usri1_comment;
+ DWORD usri1_flags;
+ LPWSTR usri1_script_path;
+}USER_INFO_1,*PUSER_INFO_1,*LPUSER_INFO_1;
+typedef struct _USER_INFO_2 {
+ LPWSTR usri2_name;
+ LPWSTR usri2_password;
+ DWORD usri2_password_age;
+ DWORD usri2_priv;
+ LPWSTR usri2_home_dir;
+ LPWSTR usri2_comment;
+ DWORD usri2_flags;
+ LPWSTR usri2_script_path;
+ DWORD usri2_auth_flags;
+ LPWSTR usri2_full_name;
+ LPWSTR usri2_usr_comment;
+ LPWSTR usri2_parms;
+ LPWSTR usri2_workstations;
+ DWORD usri2_last_logon;
+ DWORD usri2_last_logoff;
+ DWORD usri2_acct_expires;
+ DWORD usri2_max_storage;
+ DWORD usri2_units_per_week;
+ PBYTE usri2_logon_hours;
+ DWORD usri2_bad_pw_count;
+ DWORD usri2_num_logons;
+ LPWSTR usri2_logon_server;
+ DWORD usri2_country_code;
+ DWORD usri2_code_page;
+}USER_INFO_2,*PUSER_INFO_2,*LPUSER_INFO_2;
+typedef struct _USER_INFO_3 {
+ LPWSTR usri3_name;
+ LPWSTR usri3_password;
+ DWORD usri3_password_age;
+ DWORD usri3_priv;
+ LPWSTR usri3_home_dir;
+ LPWSTR usri3_comment;
+ DWORD usri3_flags;
+ LPWSTR usri3_script_path;
+ DWORD usri3_auth_flags;
+ LPWSTR usri3_full_name;
+ LPWSTR usri3_usr_comment;
+ LPWSTR usri3_parms;
+ LPWSTR usri3_workstations;
+ DWORD usri3_last_logon;
+ DWORD usri3_last_logoff;
+ DWORD usri3_acct_expires;
+ DWORD usri3_max_storage;
+ DWORD usri3_units_per_week;
+ PBYTE usri3_logon_hours;
+ DWORD usri3_bad_pw_count;
+ DWORD usri3_num_logons;
+ LPWSTR usri3_logon_server;
+ DWORD usri3_country_code;
+ DWORD usri3_code_page;
+ DWORD usri3_user_id;
+ DWORD usri3_primary_group_id;
+ LPWSTR usri3_profile;
+ LPWSTR usri3_home_dir_drive;
+ DWORD usri3_password_expired;
+}USER_INFO_3,*PUSER_INFO_3,*LPUSER_INFO_3;
+typedef struct _USER_INFO_4 {
+ LPWSTR usri4_name;
+ LPWSTR usri4_password;
+ DWORD usri4_password_age;
+ DWORD usri4_priv;
+ LPWSTR usri4_home_dir;
+ LPWSTR usri4_comment;
+ DWORD usri4_flags;
+ LPWSTR usri4_script_path;
+ DWORD usri4_auth_flags;
+ LPWSTR usri4_full_name;
+ LPWSTR usri4_usr_comment;
+ LPWSTR usri4_parms;
+ LPWSTR usri4_workstations;
+ DWORD usri4_last_logon;
+ DWORD usri4_last_logoff;
+ DWORD usri4_acct_expires;
+ DWORD usri4_max_storage;
+ DWORD usri4_units_per_week;
+ PBYTE usri4_logon_hours;
+ DWORD usri4_bad_pw_count;
+ DWORD usri4_num_logons;
+ LPWSTR usri4_logon_server;
+ DWORD usri4_country_code;
+ DWORD usri4_code_page;
+ PSID usri4_user_sid;
+ DWORD usri4_primary_group_id;
+ LPWSTR usri4_profile;
+ LPWSTR usri4_home_dir_drive;
+ DWORD usri4_password_expired;
+}USER_INFO_4,*PUSER_INFO_4,*LPUSER_INFO_4;
+typedef struct _USER_INFO_10 {
+ LPWSTR usri10_name;
+ LPWSTR usri10_comment;
+ LPWSTR usri10_usr_comment;
+ LPWSTR usri10_full_name;
+}USER_INFO_10,*PUSER_INFO_10,*LPUSER_INFO_10;
+typedef struct _USER_INFO_11 {
+ LPWSTR usri11_name;
+ LPWSTR usri11_comment;
+ LPWSTR usri11_usr_comment;
+ LPWSTR usri11_full_name;
+ DWORD usri11_priv;
+ DWORD usri11_auth_flags;
+ DWORD usri11_password_age;
+ LPWSTR usri11_home_dir;
+ LPWSTR usri11_parms;
+ DWORD usri11_last_logon;
+ DWORD usri11_last_logoff;
+ DWORD usri11_bad_pw_count;
+ DWORD usri11_num_logons;
+ LPWSTR usri11_logon_server;
+ DWORD usri11_country_code;
+ LPWSTR usri11_workstations;
+ DWORD usri11_max_storage;
+ DWORD usri11_units_per_week;
+ PBYTE usri11_logon_hours;
+ DWORD usri11_code_page;
+}USER_INFO_11,*PUSER_INFO_11,*LPUSER_INFO_11;
+typedef struct _USER_INFO_20 {
+ LPWSTR usri20_name;
+ LPWSTR usri20_full_name;
+ LPWSTR usri20_comment;
+ DWORD usri20_flags;
+ DWORD usri20_user_id;
+}USER_INFO_20,*PUSER_INFO_20,*LPUSER_INFO_20;
+typedef struct _USER_INFO_21 {
+ BYTE usri21_password[ENCRYPTED_PWLEN];
+}USER_INFO_21,*PUSER_INFO_21,*LPUSER_INFO_21;
+typedef struct _USER_INFO_22 {
+ LPWSTR usri22_name;
+ BYTE usri22_password[ENCRYPTED_PWLEN];
+ DWORD usri22_password_age;
+ DWORD usri22_priv;
+ LPWSTR usri22_home_dir;
+ LPWSTR usri22_comment;
+ DWORD usri22_flags;
+ LPWSTR usri22_script_path;
+ DWORD usri22_auth_flags;
+ LPWSTR usri22_full_name;
+ LPWSTR usri22_usr_comment;
+ LPWSTR usri22_parms;
+ LPWSTR usri22_workstations;
+ DWORD usri22_last_logon;
+ DWORD usri22_last_logoff;
+ DWORD usri22_acct_expires;
+ DWORD usri22_max_storage;
+ DWORD usri22_units_per_week;
+ PBYTE usri22_logon_hours;
+ DWORD usri22_bad_pw_count;
+ DWORD usri22_num_logons;
+ LPWSTR usri22_logon_server;
+ DWORD usri22_country_code;
+ DWORD usri22_code_page;
+}USER_INFO_22,*PUSER_INFO_22,*LPUSER_INFO_22;
+typedef struct _USER_INFO_23 {
+ LPWSTR usri23_name;
+ LPWSTR usri23_full_name;
+ LPWSTR usri23_comment;
+ DWORD usri23_flags;
+ PSID usri23_user_sid;
+}USER_INFO_23,*PUSER_INFO_23,*LPUSER_INFO_23;
+typedef struct _USER_INFO_1003 {
+ LPWSTR usri1003_password;
+} USER_INFO_1003,*PUSER_INFO_1003,*LPUSER_INFO_1003;
+typedef struct _USER_INFO_1005 {
+ DWORD usri1005_priv;
+} USER_INFO_1005,*PUSER_INFO_1005,*LPUSER_INFO_1005;
+typedef struct _USER_INFO_1006 {
+ LPWSTR usri1006_home_dir;
+} USER_INFO_1006,*PUSER_INFO_1006,*LPUSER_INFO_1006;
+typedef struct _USER_INFO_1007 {
+ LPWSTR usri1007_comment;
+} USER_INFO_1007,*PUSER_INFO_1007,*LPUSER_INFO_1007;
+typedef struct _USER_INFO_1008 {
+ DWORD usri1008_flags;
+} USER_INFO_1008,*PUSER_INFO_1008,*LPUSER_INFO_1008;
+typedef struct _USER_INFO_1009 {
+ LPWSTR usri1009_script_path;
+} USER_INFO_1009,*PUSER_INFO_1009,*LPUSER_INFO_1009;
+typedef struct _USER_INFO_1010 {
+ DWORD usri1010_auth_flags;
+} USER_INFO_1010,*PUSER_INFO_1010,*LPUSER_INFO_1010;
+typedef struct _USER_INFO_1011 {
+ LPWSTR usri1011_full_name;
+} USER_INFO_1011,*PUSER_INFO_1011,*LPUSER_INFO_1011;
+typedef struct _USER_INFO_1012 {
+ LPWSTR usri1012_usr_comment;
+} USER_INFO_1012,*PUSER_INFO_1012,*LPUSER_INFO_1012;
+typedef struct _USER_INFO_1013 {
+ LPWSTR usri1013_parms;
+} USER_INFO_1013,*PUSER_INFO_1013,*LPUSER_INFO_1013;
+typedef struct _USER_INFO_1014 {
+ LPWSTR usri1014_workstations;
+} USER_INFO_1014,*PUSER_INFO_1014,*LPUSER_INFO_1014;
+typedef struct _USER_INFO_1017 {
+ DWORD usri1017_acct_expires;
+} USER_INFO_1017,*PUSER_INFO_1017,*LPUSER_INFO_1017;
+typedef struct _USER_INFO_1018 {
+ DWORD usri1018_max_storage;
+} USER_INFO_1018,*PUSER_INFO_1018,*LPUSER_INFO_1018;
+typedef struct _USER_INFO_1020 {
+ DWORD usri1020_units_per_week;
+ PBYTE usri1020_logon_hours;
+} USER_INFO_1020,*PUSER_INFO_1020,*LPUSER_INFO_1020;
+typedef struct _USER_INFO_1023 {
+ LPWSTR usri1023_logon_server;
+} USER_INFO_1023,*PUSER_INFO_1023,*LPUSER_INFO_1023;
+typedef struct _USER_INFO_1024 {
+ DWORD usri1024_country_code;
+} USER_INFO_1024,*PUSER_INFO_1024,*LPUSER_INFO_1024;
+typedef struct _USER_INFO_1025 {
+ DWORD usri1025_code_page;
+} USER_INFO_1025,*PUSER_INFO_1025,*LPUSER_INFO_1025;
+typedef struct _USER_INFO_1051 {
+ DWORD usri1051_primary_group_id;
+} USER_INFO_1051,*PUSER_INFO_1051,*LPUSER_INFO_1051;
+typedef struct _USER_INFO_1052 {
+ LPWSTR usri1052_profile;
+} USER_INFO_1052,*PUSER_INFO_1052,*LPUSER_INFO_1052;
+typedef struct _USER_INFO_1053 {
+ LPWSTR usri1053_home_dir_drive;
+} USER_INFO_1053,*PUSER_INFO_1053,*LPUSER_INFO_1053;
+typedef struct _USER_MODALS_INFO_0 {
+ DWORD usrmod0_min_passwd_len;
+ DWORD usrmod0_max_passwd_age;
+ DWORD usrmod0_min_passwd_age;
+ DWORD usrmod0_force_logoff;
+ DWORD usrmod0_password_hist_len;
+}USER_MODALS_INFO_0,*PUSER_MODALS_INFO_0,*LPUSER_MODALS_INFO_0;
+typedef struct _USER_MODALS_INFO_1 {
+ DWORD usrmod1_role;
+ LPWSTR usrmod1_primary;
+}USER_MODALS_INFO_1,*PUSER_MODALS_INFO_1,*LPUSER_MODALS_INFO_1;
+typedef struct _USER_MODALS_INFO_2 {
+ LPWSTR usrmod2_domain_name;
+ PSID usrmod2_domain_id;
+}USER_MODALS_INFO_2,*PUSER_MODALS_INFO_2,*LPUSER_MODALS_INFO_2;
+typedef struct _USER_MODALS_INFO_3 {
+ DWORD usrmod3_lockout_duration;
+ DWORD usrmod3_lockout_observation_window;
+ DWORD usrmod3_lockout_threshold;
+}USER_MODALS_INFO_3,*PUSER_MODALS_INFO_3,*LPUSER_MODALS_INFO_3;
+typedef struct _USER_MODALS_INFO_1001 {
+ DWORD usrmod1001_min_passwd_len;
+} USER_MODALS_INFO_1001,*PUSER_MODALS_INFO_1001,*LPUSER_MODALS_INFO_1001;
+typedef struct _USER_MODALS_INFO_1002 {
+ DWORD usrmod1002_max_passwd_age;
+} USER_MODALS_INFO_1002,*PUSER_MODALS_INFO_1002,*LPUSER_MODALS_INFO_1002;
+typedef struct _USER_MODALS_INFO_1003 {
+ DWORD usrmod1003_min_passwd_age;
+} USER_MODALS_INFO_1003,*PUSER_MODALS_INFO_1003,*LPUSER_MODALS_INFO_1003;
+typedef struct _USER_MODALS_INFO_1004 {
+ DWORD usrmod1004_force_logoff;
+} USER_MODALS_INFO_1004,*PUSER_MODALS_INFO_1004,*LPUSER_MODALS_INFO_1004;
+typedef struct _USER_MODALS_INFO_1005 {
+ DWORD usrmod1005_password_hist_len;
+} USER_MODALS_INFO_1005,*PUSER_MODALS_INFO_1005,*LPUSER_MODALS_INFO_1005;
+typedef struct _USER_MODALS_INFO_1006 {
+ DWORD usrmod1006_role;
+} USER_MODALS_INFO_1006,*PUSER_MODALS_INFO_1006,*LPUSER_MODALS_INFO_1006;
+typedef struct _USER_MODALS_INFO_1007 {
+ LPWSTR usrmod1007_primary;
+} USER_MODALS_INFO_1007,*PUSER_MODALS_INFO_1007,*LPUSER_MODALS_INFO_1007;
+typedef struct _GROUP_INFO_0 {
+ LPWSTR grpi0_name;
+}GROUP_INFO_0,*PGROUP_INFO_0,*LPGROUP_INFO_0;
+typedef struct _GROUP_INFO_1 {
+ LPWSTR grpi1_name;
+ LPWSTR grpi1_comment;
+}GROUP_INFO_1,*PGROUP_INFO_1,*LPGROUP_INFO_1;
+typedef struct _GROUP_INFO_2 {
+ LPWSTR grpi2_name;
+ LPWSTR grpi2_comment;
+ DWORD grpi2_group_id;
+ DWORD grpi2_attributes;
+}GROUP_INFO_2,*PGROUP_INFO_2;
+typedef struct _GROUP_INFO_3 {
+ LPWSTR grpi3_name;
+ LPWSTR grpi3_comment;
+ PSID grpi3_group_sid;
+ DWORD grpi3_attributes;
+}GROUP_INFO_3,*PGROUP_INFO_3;
+typedef struct _GROUP_INFO_1002 {
+ LPWSTR grpi1002_comment;
+} GROUP_INFO_1002,*PGROUP_INFO_1002,*LPGROUP_INFO_1002;
+typedef struct _GROUP_INFO_1005 {
+ DWORD grpi1005_attributes;
+} GROUP_INFO_1005,*PGROUP_INFO_1005,*LPGROUP_INFO_1005;
+typedef struct _GROUP_USERS_INFO_0 {
+ LPWSTR grui0_name;
+} GROUP_USERS_INFO_0,*PGROUP_USERS_INFO_0,*LPGROUP_USERS_INFO_0;
+typedef struct _GROUP_USERS_INFO_1 {
+ LPWSTR grui1_name;
+ DWORD grui1_attributes;
+} GROUP_USERS_INFO_1,*PGROUP_USERS_INFO_1,*LPGROUP_USERS_INFO_1;
+typedef struct _LOCALGROUP_INFO_0 {
+ LPWSTR lgrpi0_name;
+}LOCALGROUP_INFO_0,*PLOCALGROUP_INFO_0,*LPLOCALGROUP_INFO_0;
+typedef struct _LOCALGROUP_INFO_1 {
+ LPWSTR lgrpi1_name;
+ LPWSTR lgrpi1_comment;
+}LOCALGROUP_INFO_1,*PLOCALGROUP_INFO_1,*LPLOCALGROUP_INFO_1;
+typedef struct _LOCALGROUP_INFO_1002 {
+ LPWSTR lgrpi1002_comment;
+}LOCALGROUP_INFO_1002,*PLOCALGROUP_INFO_1002,*LPLOCALGROUP_INFO_1002;
+typedef struct _LOCALGROUP_MEMBERS_INFO_0 {
+ PSID lgrmi0_sid;
+} LOCALGROUP_MEMBERS_INFO_0,*PLOCALGROUP_MEMBERS_INFO_0,*LPLOCALGROUP_MEMBERS_INFO_0;
+typedef struct _LOCALGROUP_MEMBERS_INFO_1 {
+ PSID lgrmi1_sid;
+ SID_NAME_USE lgrmi1_sidusage;
+ LPWSTR lgrmi1_name;
+} LOCALGROUP_MEMBERS_INFO_1,*PLOCALGROUP_MEMBERS_INFO_1,*LPLOCALGROUP_MEMBERS_INFO_1;
+typedef struct _LOCALGROUP_MEMBERS_INFO_2 {
+ PSID lgrmi2_sid;
+ SID_NAME_USE lgrmi2_sidusage;
+ LPWSTR lgrmi2_domainandname;
+} LOCALGROUP_MEMBERS_INFO_2,*PLOCALGROUP_MEMBERS_INFO_2,*LPLOCALGROUP_MEMBERS_INFO_2;
+typedef struct _LOCALGROUP_MEMBERS_INFO_3 {
+ LPWSTR lgrmi3_domainandname;
+} LOCALGROUP_MEMBERS_INFO_3,*PLOCALGROUP_MEMBERS_INFO_3,
+*LPLOCALGROUP_MEMBERS_INFO_3;
+typedef struct _LOCALGROUP_USERS_INFO_0 {
+ LPWSTR lgrui0_name;
+} LOCALGROUP_USERS_INFO_0,*PLOCALGROUP_USERS_INFO_0,*LPLOCALGROUP_USERS_INFO_0;
+typedef struct _NET_DISPLAY_USER {
+ LPWSTR usri1_name;
+ LPWSTR usri1_comment;
+ DWORD usri1_flags;
+ LPWSTR usri1_full_name;
+ DWORD usri1_user_id;
+ DWORD usri1_next_index;
+} NET_DISPLAY_USER,*PNET_DISPLAY_USER;
+typedef struct _NET_DISPLAY_MACHINE {
+ LPWSTR usri2_name;
+ LPWSTR usri2_comment;
+ DWORD usri2_flags;
+ DWORD usri2_user_id;
+ DWORD usri2_next_index;
+} NET_DISPLAY_MACHINE,*PNET_DISPLAY_MACHINE;
+typedef struct _NET_DISPLAY_GROUP {
+ LPWSTR grpi3_name;
+ LPWSTR grpi3_comment;
+ DWORD grpi3_group_id;
+ DWORD grpi3_attributes;
+ DWORD grpi3_next_index;
+} NET_DISPLAY_GROUP,*PNET_DISPLAY_GROUP;
+typedef struct _ACCESS_INFO_0 {
+ LPTSTR acc0_resource_name;
+}ACCESS_INFO_0,*PACCESS_INFO_0,*LPACCESS_INFO_0;
+typedef struct _ACCESS_INFO_1 {
+ LPTSTR acc1_resource_name;
+ DWORD acc1_attr;
+ DWORD acc1_count;
+}ACCESS_INFO_1,*PACCESS_INFO_1,*LPACCESS_INFO_1;
+typedef struct _ACCESS_INFO_1002 {
+ DWORD acc1002_attr;
+} ACCESS_INFO_1002,*PACCESS_INFO_1002,*LPACCESS_INFO_1002;
+typedef struct _ACCESS_LIST {
+ LPTSTR acl_ugname;
+ DWORD acl_access;
+}ACCESS_LIST,*PACCESS_LIST,*LPACCESS_LIST;
+typedef struct _NETLOGON_INFO_1 {
+ DWORD netlog1_flags;
+ NET_API_STATUS netlog1_pdc_connection_status;
+} NETLOGON_INFO_1,*PNETLOGON_INFO_1;
+typedef struct _NETLOGON_INFO_2 {
+ DWORD netlog2_flags;
+ NET_API_STATUS netlog2_pdc_connection_status;
+ LPWSTR netlog2_trusted_dc_name;
+ NET_API_STATUS netlog2_tc_connection_status;
+} NETLOGON_INFO_2,*PNETLOGON_INFO_2;
+typedef struct _NETLOGON_INFO_3 {
+ DWORD netlog3_flags;
+ DWORD netlog3_logon_attempts;
+ DWORD netlog3_reserved1;
+ DWORD netlog3_reserved2;
+ DWORD netlog3_reserved3;
+ DWORD netlog3_reserved4;
+ DWORD netlog3_reserved5;
+} NETLOGON_INFO_3,*PNETLOGON_INFO_3;
+
+#if 0
+/* MS has these defined, but the RxNetAccessXX functions aren't documented nor do
+ they exist in any headers */
+#define NetAccessAdd RxNetAccessAdd
+#define NetAccessEnum RxNetAccessEnum
+#define NetAccessGetInfo RxNetAccessGetInfo
+#define NetAccessSetInfo RxNetAccessSetInfo
+#define NetAccessDel RxNetAccessDel
+#define NetAccessGetUserPerms RxNetAccessGetUserPerms
+/* These are obsolete */
+NET_API_STATUS WINAPI NetAccessAdd(LPCWSTR,DWORD,PBYTE,PDWORD);
+NET_API_STATUS WINAPI NetAccessEnum(LPCWSTR,LPCWSTR,DWORD,DWORD,PBYTE*,DWORD,PDWORD,PDWORD,PDWORD);
+NET_API_STATUS WINAPI NetAccessGetInfo(LPCWSTR,LPCWSTR,DWORD,PBYTE*);
+NET_API_STATUS WINAPI NetAccessSetInfo(LPCWSTR,LPCWSTR,DWORD,PBYTE,PDWORD);
+NET_API_STATUS WINAPI NetAccessDel(LPCWSTR,LPCWSTR);
+NET_API_STATUS WINAPI NetAccessGetUserPerms(LPCWSTR,LPCWSTR,LPCWSTR,PDWORD);
+#endif
+
+NET_API_STATUS WINAPI NetUserAdd(LPCWSTR,DWORD,PBYTE,PDWORD);
+NET_API_STATUS WINAPI NetUserEnum(LPCWSTR,DWORD,DWORD,PBYTE*,DWORD,PDWORD,PDWORD,PDWORD);
+NET_API_STATUS WINAPI NetUserGetInfo(LPCWSTR,LPCWSTR,DWORD,PBYTE*);
+NET_API_STATUS WINAPI NetUserSetInfo(LPCWSTR,LPCWSTR,DWORD,PBYTE,PDWORD);
+NET_API_STATUS WINAPI NetUserDel(LPCWSTR,LPCWSTR);
+NET_API_STATUS WINAPI NetUserGetGroups(LPCWSTR,LPCWSTR,DWORD,PBYTE*,DWORD,PDWORD,PDWORD);
+NET_API_STATUS WINAPI NetUserSetGroups(LPCWSTR,LPCWSTR,DWORD,PBYTE,DWORD);
+NET_API_STATUS WINAPI NetUserGetLocalGroups(LPCWSTR,LPCWSTR,DWORD,DWORD,PBYTE*,DWORD,PDWORD,PDWORD);
+NET_API_STATUS WINAPI NetUserModalsGet(LPCWSTR,DWORD,PBYTE*);
+NET_API_STATUS WINAPI NetUserModalsSet(LPCWSTR,DWORD,PBYTE,PDWORD);
+NET_API_STATUS WINAPI NetUserChangePassword(LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR);
+NET_API_STATUS WINAPI NetGroupAdd(LPCWSTR,DWORD,PBYTE,PDWORD);
+NET_API_STATUS WINAPI NetGroupAddUser(LPCWSTR,LPCWSTR,LPCWSTR);
+NET_API_STATUS WINAPI NetGroupEnum(LPCWSTR,DWORD,PBYTE*,DWORD,PDWORD,PDWORD,PDWORD);
+NET_API_STATUS WINAPI NetGroupGetInfo(LPCWSTR,LPCWSTR,DWORD,PBYTE*);
+NET_API_STATUS WINAPI NetGroupSetInfo(LPCWSTR,LPCWSTR,DWORD,PBYTE,PDWORD);
+NET_API_STATUS WINAPI NetGroupDel(LPCWSTR,LPCWSTR);
+NET_API_STATUS WINAPI NetGroupDelUser(LPCWSTR,LPCWSTR,LPCWSTR);
+NET_API_STATUS WINAPI NetGroupGetUsers(LPCWSTR,LPCWSTR,DWORD,PBYTE*,DWORD,PDWORD,PDWORD,PDWORD);
+NET_API_STATUS WINAPI NetGroupSetUsers(LPCWSTR,LPCWSTR,DWORD,PBYTE,DWORD);
+NET_API_STATUS WINAPI NetLocalGroupAdd(LPCWSTR,DWORD,PBYTE,PDWORD);
+NET_API_STATUS WINAPI NetLocalGroupAddMember(LPCWSTR,LPCWSTR,PSID);
+NET_API_STATUS WINAPI NetLocalGroupEnum(LPCWSTR,DWORD,PBYTE*,DWORD,PDWORD,PDWORD,PDWORD);
+NET_API_STATUS WINAPI NetLocalGroupGetInfo(LPCWSTR,LPCWSTR,DWORD,PBYTE*);
+NET_API_STATUS WINAPI NetLocalGroupSetInfo(LPCWSTR,LPCWSTR,DWORD,PBYTE,PDWORD);
+NET_API_STATUS WINAPI NetLocalGroupDel(LPCWSTR,LPCWSTR);
+NET_API_STATUS WINAPI NetLocalGroupDelMember(LPCWSTR,LPCWSTR,PSID);
+NET_API_STATUS WINAPI NetLocalGroupGetMembers(LPCWSTR,LPCWSTR,DWORD,PBYTE*,DWORD,
+PDWORD,PDWORD,PDWORD);
+NET_API_STATUS WINAPI NetLocalGroupSetMembers(LPCWSTR,LPCWSTR,DWORD,PBYTE,DWORD);
+NET_API_STATUS WINAPI NetLocalGroupAddMembers(LPCWSTR,LPCWSTR,DWORD,PBYTE,DWORD);
+NET_API_STATUS WINAPI NetLocalGroupDelMembers(LPCWSTR,LPCWSTR,DWORD,PBYTE,DWORD);
+NET_API_STATUS WINAPI NetQueryDisplayInformation(LPCWSTR,DWORD,DWORD,DWORD,DWORD,PDWORD,PVOID*);
+NET_API_STATUS WINAPI NetGetDisplayInformationIndex(LPCWSTR,DWORD,LPCWSTR,PDWORD);
+NET_API_STATUS WINAPI NetGetDCName(LPCWSTR,LPCWSTR,PBYTE*);
+NET_API_STATUS WINAPI NetGetAnyDCName(LPCWSTR,LPCWSTR,PBYTE*);
+NET_API_STATUS WINAPI I_NetLogonControl(LPCWSTR,DWORD,DWORD,PBYTE*);
+NET_API_STATUS WINAPI I_NetLogonControl2(LPCWSTR,DWORD,DWORD,PBYTE,PBYTE*);
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/lmalert.h b/tcc/include/winapi/lmalert.h
new file mode 100644
index 0000000..4f59edc
--- /dev/null
+++ b/tcc/include/winapi/lmalert.h
@@ -0,0 +1,60 @@
+#ifndef _LMALERT_H
+#define _LMALERT_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#define ALERTER_MAILSLOT TEXT("\\\\.\\MAILSLOT\\Alerter")
+#define ALERT_PRINT_EVENT TEXT("PRINTING")
+#define ALERT_MESSAGE_EVENT TEXT("MESSAGE")
+#define ALERT_ERRORLOG_EVENT TEXT("ERRORLOG")
+#define ALERT_ADMIN_EVENT TEXT("ADMIN")
+#define ALERT_USER_EVENT TEXT("USER")
+#define ALERT_OTHER_INFO(x) ((PBYTE)(x)+sizeof(STD_ALERT))
+#define ALERT_VAR_DATA(p) ((PBYTE)(p)+sizeof(*p))
+#define PRJOB_QSTATUS 3
+#define PRJOB_DEVSTATUS 508
+#define PRJOB_COMPLETE 4
+#define PRJOB_INTERV 8
+#define PRJOB_ 16
+#define PRJOB_DESTOFFLINE 32
+#define PRJOB_DESTPAUSED 64
+#define PRJOB_NOTIFY 128
+#define PRJOB_DESTNOPAPER 256
+#define PRJOB_DELETED 32768
+#define PRJOB_QS_QUEUED 0
+#define PRJOB_QS_PAUSED 1
+#define PRJOB_QS_SPOOLING 2
+#define PRJOB_QS_PRINTING 3
+#ifdef __cplusplus
+extern "C" {
+#endif
+typedef struct _ADMIN_OTHER_INFO {
+ DWORD alrtad_errcode;
+ DWORD alrtad_numstrings;
+}ADMIN_OTHER_INFO,*PADMIN_OTHER_INFO,*LPADMIN_OTHER_INFO;
+typedef struct _STD_ALERT {
+ DWORD alrt_timestamp;
+ TCHAR alrt_eventname[EVLEN+1];
+ TCHAR alrt_servicename[SNLEN+1];
+}STD_ALERT,*PSTD_ALERT,*LPSTD_ALERT;
+typedef struct _ERRLOG_OTHER_INFO {
+ DWORD alrter_errcode;
+ DWORD alrter_offset;
+}ERRLOG_OTHER_INFO,*PERRLOG_OTHER_INFO,*LPERRLOG_OTHER_INFO;
+typedef struct _PRINT_OTHER_INFO {
+ DWORD alrtpr_jobid;
+ DWORD alrtpr_status;
+ DWORD alrtpr_submitted;
+ DWORD alrtpr_size;
+}PRINT_OTHER_INFO,*PPRINT_OTHER_INFO,*LPPRINT_OTHER_INFO;
+typedef struct _USER_OTHER_INFO {
+ DWORD alrtus_errcode;
+ DWORD alrtus_numstrings;
+}USER_OTHER_INFO,*PUSER_OTHER_INFO,*LPUSER_OTHER_INFO;
+NET_API_STATUS WINAPI NetAlertRaise(LPCWSTR,PVOID,DWORD);
+NET_API_STATUS WINAPI NetAlertRaiseEx(LPCWSTR,PVOID,DWORD,LPCWSTR);
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/lmapibuf.h b/tcc/include/winapi/lmapibuf.h
new file mode 100644
index 0000000..54de811
--- /dev/null
+++ b/tcc/include/winapi/lmapibuf.h
@@ -0,0 +1,18 @@
+#ifndef _LMAPIBUF_H
+#define _LMAPIBUF_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+NET_API_STATUS WINAPI NetApiBufferAllocate(DWORD,PVOID*);
+NET_API_STATUS WINAPI NetApiBufferFree(PVOID);
+NET_API_STATUS WINAPI NetApiBufferReallocate(PVOID,DWORD,PVOID*);
+NET_API_STATUS WINAPI NetApiBufferSize(PVOID,PDWORD);
+NET_API_STATUS WINAPI NetapipBufferAllocate(DWORD,PVOID*);
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/lmat.h b/tcc/include/winapi/lmat.h
new file mode 100644
index 0000000..95999a8
--- /dev/null
+++ b/tcc/include/winapi/lmat.h
@@ -0,0 +1,39 @@
+#ifndef _LMAT_H
+#define _LMAT_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#define JOB_RUN_PERIODICALLY 1
+#define JOB_EXEC_ERROR 2
+#define JOB_RUNS_TODAY 4
+#define JOB_ADD_CURRENT_DATE 8
+#define JOB_NONINTERACTIVE 16
+#define JOB_INPUT_FLAGS (JOB_RUN_PERIODICALLY|JOB_ADD_CURRENT_DATE|JOB_NONINTERACTIVE)
+#define JOB_OUTPUT_FLAGS (JOB_RUN_PERIODICALLY|JOB_EXEC_ERROR|JOB_RUNS_TODAY|JOB_NONINTERACTIVE)
+typedef struct _AT_ENUM {
+ DWORD JobId;
+ DWORD JobTime;
+ DWORD DaysOfMonth;
+ UCHAR DaysOfWeek;
+ UCHAR Flags;
+ LPWSTR Command;
+} AT_ENUM,*PAT_ENUM,*LPAT_ENUM;
+typedef struct _AT_INFO {
+ DWORD JobTime;
+ DWORD DaysOfMonth;
+ UCHAR DaysOfWeek;
+ UCHAR Flags;
+ LPWSTR Command;
+} AT_INFO,*PAT_INFO,*LPAT_INFO;
+NET_API_STATUS WINAPI NetScheduleJobAdd(LPWSTR,PBYTE,LPDWORD);
+NET_API_STATUS WINAPI NetScheduleJobDel(LPWSTR,DWORD,DWORD);
+NET_API_STATUS WINAPI NetScheduleJobEnum(LPWSTR,PBYTE*,DWORD,PDWORD,PDWORD,PDWORD);
+NET_API_STATUS WINAPI NetScheduleJobGetInfo(LPWSTR,DWORD,PBYTE*);
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/lmaudit.h b/tcc/include/winapi/lmaudit.h
new file mode 100644
index 0000000..4a97baa
--- /dev/null
+++ b/tcc/include/winapi/lmaudit.h
@@ -0,0 +1,250 @@
+#ifndef _LMAUDIT_H
+#define _LMAUDIT_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#define REVISED_AUDIT_ENTRY_STRUCT
+#define LOGFLAGS_FORWARD 0
+#define LOGFLAGS_BACKWARD 1
+#define LOGFLAGS_SEEK 2
+#define ACTION_LOCKOUT 0
+#define ACTION_ADMINUNLOCK 1
+#define AE_GUEST 0
+#define AE_USER 1
+#define AE_ADMIN 2
+#define AE_NORMAL 0
+#define AE_USERLIMIT 0
+#define AE_GENERAL 0
+#define AE_ERROR 1
+#define AE_SESSDIS 1
+#define AE_BADPW 1
+#define AE_AUTODIS 2
+#define AE_UNSHARE 2
+#define AE_ADMINPRIVREQD 2
+#define AE_ADMINDIS 3
+#define AE_NOACCESSPERM 3
+#define AE_ACCRESTRICT 4
+#define AE_NORMAL_CLOSE 0
+#define AE_SES_CLOSE 1
+#define AE_ADMIN_CLOSE 2
+#define AE_LIM_UNKNOWN 0
+#define AE_LIM_LOGONHOURS 1
+#define AE_LIM_EXPIRED 2
+#define AE_LIM_INVAL_WKSTA 3
+#define AE_LIM_DISABLED 4
+#define AE_LIM_DELETED 5
+#define AE_MOD 0
+#define AE_DELETE 1
+#define AE_ADD 2
+#define AE_UAS_USER 0
+#define AE_UAS_GROUP 1
+#define AE_UAS_MODALS 2
+#define SVAUD_SERVICE 1
+#define SVAUD_GOODSESSLOGON 6
+#define SVAUD_BADSESSLOGON 24
+#define SVAUD_SESSLOGON (SVAUD_GOODSESSLOGON|SVAUD_BADSESSLOGON)
+#define SVAUD_GOODNETLOGON 96
+#define SVAUD_BADNETLOGON 384
+#define SVAUD_NETLOGON (SVAUD_GOODNETLOGON|SVAUD_BADNETLOGON)
+#define SVAUD_LOGON (SVAUD_NETLOGON|SVAUD_SESSLOGON)
+#define SVAUD_GOODUSE 0x600
+#define SVAUD_BADUSE 0x1800
+#define SVAUD_USE (SVAUD_GOODUSE|SVAUD_BADUSE)
+#define SVAUD_USERLIST 8192
+#define SVAUD_PERMISSIONS 16384
+#define SVAUD_RESOURCE 32768
+#define SVAUD_LOGONLIM 65536
+#define AA_AUDIT_ALL 1
+#define AA_A_OWNER 4
+#define AA_CLOSE 8
+#define AA_S_OPEN 16
+#define AA_S_WRITE 32
+#define AA_S_CREATE 32
+#define AA_S_DELETE 64
+#define AA_S_ACL 128
+#define AA_S_ALL 253
+#define AA_F_OPEN 256
+#define AA_F_WRITE 512
+#define AA_F_CREATE 512
+#define AA_F_DELETE 1024
+#define AA_F_ACL 2048
+#define AA_F_ALL (AA_F_OPEN|AA_F_WRITE|AA_F_DELETE|AA_F_ACL)
+#define AA_A_OPEN 2048
+#define AA_A_WRITE 4096
+#define AA_A_CREATE 8192
+#define AA_A_DELETE 16384
+#define AA_A_ACL 32768
+#define AA_A_ALL (AA_F_OPEN|AA_F_WRITE|AA_F_DELETE|AA_F_ACL)
+typedef struct _AUDIT_ENTRY {
+ DWORD ae_len;
+ DWORD ae_reserved;
+ DWORD ae_time;
+ DWORD ae_type;
+ DWORD ae_data_offset;
+ DWORD ae_data_size;
+} AUDIT_ENTRY,*PAUDIT_ENTRY,*LPAUDIT_ENTRY;
+typedef struct _HLOG {
+ DWORD time;
+ DWORD last_flags;
+ DWORD offset;
+ DWORD rec_offset;
+} HLOG,*PHLOG,*LPHLOG;
+typedef struct _AE_SRVSTATUS {
+ DWORD ae_sv_status;
+} AE_SRVSTATUS,*PAE_SRVSTATUS,*LPAE_SRVSTATUS;
+typedef struct _AE_SESSLOGON {
+ DWORD ae_so_compname;
+ DWORD ae_so_username;
+ DWORD ae_so_privilege;
+} AE_SESSLOGON,*PAE_SESSLOGON,*LPAE_SESSLOGON;
+typedef struct _AE_SESSLOGOFF {
+ DWORD ae_sf_compname;
+ DWORD ae_sf_username;
+ DWORD ae_sf_reason;
+} AE_SESSLOGOFF,*PAE_SESSLOGOFF,*LPAE_SESSLOGOFF;
+typedef struct _AE_SESSPWERR {
+ DWORD ae_sp_compname;
+ DWORD ae_sp_username;
+} AE_SESSPWERR,*PAE_SESSPWERR,*LPAE_SESSPWERR;
+typedef struct _AE_CONNSTART {
+ DWORD ae_ct_compname;
+ DWORD ae_ct_username;
+ DWORD ae_ct_netname;
+ DWORD ae_ct_connid;
+} AE_CONNSTART,*PAE_CONNSTART,*LPAE_CONNSTART;
+typedef struct _AE_CONNSTOP {
+ DWORD ae_cp_compname;
+ DWORD ae_cp_username;
+ DWORD ae_cp_netname;
+ DWORD ae_cp_connid;
+ DWORD ae_cp_reason;
+} AE_CONNSTOP,*PAE_CONNSTOP,*LPAE_CONNSTOP;
+typedef struct _AE_CONNREJ {
+ DWORD ae_cr_compname;
+ DWORD ae_cr_username;
+ DWORD ae_cr_netname;
+ DWORD ae_cr_reason;
+} AE_CONNREJ,*PAE_CONNREJ,*LPAE_CONNREJ;
+typedef struct _AE_RESACCESS {
+ DWORD ae_ra_compname;
+ DWORD ae_ra_username;
+ DWORD ae_ra_resname;
+ DWORD ae_ra_operation;
+ DWORD ae_ra_returncode;
+ DWORD ae_ra_restype;
+ DWORD ae_ra_fileid;
+} AE_RESACCESS,*PAE_RESACCESS,*LPAE_RESACCESS;
+typedef struct _AE_RESACCESSREJ {
+ DWORD ae_rr_compname;
+ DWORD ae_rr_username;
+ DWORD ae_rr_resname;
+ DWORD ae_rr_operation;
+} AE_RESACCESSREJ,*PAE_RESACCESSREJ,*LPAE_RESACCESSREJ;
+typedef struct _AE_CLOSEFILE {
+ DWORD ae_cf_compname;
+ DWORD ae_cf_username;
+ DWORD ae_cf_resname;
+ DWORD ae_cf_fileid;
+ DWORD ae_cf_duration;
+ DWORD ae_cf_reason;
+} AE_CLOSEFILE,*PAE_CLOSEFILE,*LPAE_CLOSEFILE;
+typedef struct _AE_SERVICESTAT {
+ DWORD ae_ss_compname;
+ DWORD ae_ss_username;
+ DWORD ae_ss_svcname;
+ DWORD ae_ss_status;
+ DWORD ae_ss_code;
+ DWORD ae_ss_text;
+ DWORD ae_ss_returnval;
+} AE_SERVICESTAT,*PAE_SERVICESTAT,*LPAE_SERVICESTAT;
+typedef struct _AE_ACLMOD {
+ DWORD ae_am_compname;
+ DWORD ae_am_username;
+ DWORD ae_am_resname;
+ DWORD ae_am_action;
+ DWORD ae_am_datalen;
+} AE_ACLMOD,*PAE_ACLMOD,*LPAE_ACLMOD;
+typedef struct _AE_UASMOD {
+ DWORD ae_um_compname;
+ DWORD ae_um_username;
+ DWORD ae_um_resname;
+ DWORD ae_um_rectype;
+ DWORD ae_um_action;
+ DWORD ae_um_datalen;
+} AE_UASMOD,*PAE_UASMOD,*LPAE_UASMOD;
+typedef struct _AE_NETLOGON {
+ DWORD ae_no_compname;
+ DWORD ae_no_username;
+ DWORD ae_no_privilege;
+ DWORD ae_no_authflags;
+} AE_NETLOGON,*PAE_NETLOGON,*LPAE_NETLOGON;
+typedef struct _AE_NETLOGOFF {
+ DWORD ae_nf_compname;
+ DWORD ae_nf_username;
+ DWORD ae_nf_reserved1;
+ DWORD ae_nf_reserved2;
+} AE_NETLOGOFF,*PAE_NETLOGOFF,*LPAE_NETLOGOFF;
+typedef struct _AE_ACCLIM {
+ DWORD ae_al_compname;
+ DWORD ae_al_username;
+ DWORD ae_al_resname;
+ DWORD ae_al_limit;
+} AE_ACCLIM,*PAE_ACCLIM,*LPAE_ACCLIM;
+typedef struct _AE_LOCKOUT {
+ DWORD ae_lk_compname;
+ DWORD ae_lk_username;
+ DWORD ae_lk_action;
+ DWORD ae_lk_bad_pw_count;
+} AE_LOCKOUT,*PAE_LOCKOUT,*LPAE_LOCKOUT;
+typedef struct _AE_GENERIC {
+ DWORD ae_ge_msgfile;
+ DWORD ae_ge_msgnum;
+ DWORD ae_ge_params;
+ DWORD ae_ge_param1;
+ DWORD ae_ge_param2;
+ DWORD ae_ge_param3;
+ DWORD ae_ge_param4;
+ DWORD ae_ge_param5;
+ DWORD ae_ge_param6;
+ DWORD ae_ge_param7;
+ DWORD ae_ge_param8;
+ DWORD ae_ge_param9;
+} AE_GENERIC,*PAE_GENERIC,*LPAE_GENERIC;
+NET_API_STATUS WINAPI NetAuditClear(LPCWSTR,LPCWSTR,LPCWSTR);
+NET_API_STATUS WINAPI NetAuditRead(LPTSTR,LPTSTR,LPHLOG,DWORD,PDWORD,DWORD,DWORD,PBYTE*,DWORD,PDWORD,PDWORD);
+NET_API_STATUS WINAPI NetAuditWrite(DWORD,PBYTE,DWORD,LPTSTR,PBYTE);
+
+/* These conflict with struct typedefs, why? */
+#define AE_SRVSTATUS 0
+#define AE_SESSLOGON 1
+#define AE_SESSLOGOFF 2
+#define AE_SESSPWERR 3
+#define AE_CONNSTART 4
+#define AE_CONNSTOP 5
+#define AE_CONNREJ 6
+#define AE_RESACCESS 7
+#define AE_RESACCESSREJ 8
+#define AE_CLOSEFILE 9
+#define AE_SERVICESTAT 11
+#define AE_ACLMOD 12
+#define AE_UASMOD 13
+#define AE_NETLOGON 14
+#define AE_NETLOGOFF 15
+#define AE_NETLOGDENIED 16
+#define AE_ACCLIMITEXCD 17
+#define AE_RESACCESS2 18
+#define AE_ACLMODFAIL 19
+#define AE_LOCKOUT 20
+#define AE_GENERIC_TYPE 21
+#define AE_SRVSTART 0
+#define AE_SRVPAUSED 1
+#define AE_SRVCONT 2
+#define AE_SRVSTOP 3
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/lmbrowsr.h b/tcc/include/winapi/lmbrowsr.h
new file mode 100644
index 0000000..4aee464
--- /dev/null
+++ b/tcc/include/winapi/lmbrowsr.h
@@ -0,0 +1,74 @@
+#ifndef _LMBROWSR_H
+#define _LMBROWSR_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#define BROWSER_ROLE_PDC 1
+#define BROWSER_ROLE_BDC 2
+typedef struct _BROWSER_STATISTICS {
+ LARGE_INTEGER StatisticsStartTime;
+ LARGE_INTEGER NumberOfServerAnnouncements;
+ LARGE_INTEGER NumberOfDomainAnnouncements;
+ ULONG NumberOfElectionPackets;
+ ULONG NumberOfMailslotWrites;
+ ULONG NumberOfGetBrowserServerListRequests;
+ ULONG NumberOfServerEnumerations;
+ ULONG NumberOfDomainEnumerations;
+ ULONG NumberOfOtherEnumerations;
+ ULONG NumberOfMissedServerAnnouncements;
+ ULONG NumberOfMissedMailslotDatagrams;
+ ULONG NumberOfMissedGetBrowserServerListRequests;
+ ULONG NumberOfFailedServerAnnounceAllocations;
+ ULONG NumberOfFailedMailslotAllocations;
+ ULONG NumberOfFailedMailslotReceives;
+ ULONG NumberOfFailedMailslotWrites;
+ ULONG NumberOfFailedMailslotOpens;
+ ULONG NumberOfDuplicateMasterAnnouncements;
+LARGE_INTEGER NumberOfIllegalDatagrams;
+} BROWSER_STATISTICS,*PBROWSER_STATISTICS,*LPBROWSER_STATISTICS;
+typedef struct _BROWSER_STATISTICS_100 {
+ LARGE_INTEGER StartTime;
+ LARGE_INTEGER NumberOfServerAnnouncements;
+ LARGE_INTEGER NumberOfDomainAnnouncements;
+ ULONG NumberOfElectionPackets;
+ ULONG NumberOfMailslotWrites;
+ ULONG NumberOfGetBrowserServerListRequests;
+ LARGE_INTEGER NumberOfIllegalDatagrams;
+} BROWSER_STATISTICS_100,*PBROWSER_STATISTICS_100;
+typedef struct _BROWSER_STATISTICS_101 {
+ LARGE_INTEGER StartTime;
+ LARGE_INTEGER NumberOfServerAnnouncements;
+ LARGE_INTEGER NumberOfDomainAnnouncements;
+ ULONG NumberOfElectionPackets;
+ ULONG NumberOfMailslotWrites;
+ ULONG NumberOfGetBrowserServerListRequests;
+ LARGE_INTEGER NumberOfIllegalDatagrams;
+ ULONG NumberOfMissedServerAnnouncements;
+ ULONG NumberOfMissedMailslotDatagrams;
+ ULONG NumberOfMissedGetBrowserServerListRequests;
+ ULONG NumberOfFailedServerAnnounceAllocations;
+ ULONG NumberOfFailedMailslotAllocations;
+ ULONG NumberOfFailedMailslotReceives;
+ ULONG NumberOfFailedMailslotWrites;
+ ULONG NumberOfFailedMailslotOpens;
+ ULONG NumberOfDuplicateMasterAnnouncements;
+} BROWSER_STATISTICS_101,*PBROWSER_STATISTICS_101;
+
+NET_API_STATUS WINAPI I_BrowserServerEnum(LPCWSTR,LPCWSTR,LPCWSTR,DWORD,PBYTE*,DWORD,PDWORD,PDWORD,DWORD,LPCWSTR,PDWORD);
+NET_API_STATUS WINAPI I_BrowserServerEnumEx(LPCWSTR,LPCWSTR,LPCWSTR,DWORD,PBYTE*,DWORD,PDWORD,PDWORD,DWORD,LPCWSTR,LPCWSTR);
+NET_API_STATUS I_BrowserQueryEmulatedDomains(LPWSTR,PBYTE*,PDWORD);
+NET_API_STATUS I_BrowserQueryOtherDomains(LPCWSTR,PBYTE*,PDWORD,PDWORD);
+NET_API_STATUS I_BrowserResetNetlogonState(LPCWSTR);
+NET_API_STATUS I_BrowserSetNetlogonState(LPWSTR,LPWSTR,LPWSTR,DWORD);
+NET_API_STATUS I_BrowserQueryStatistics(LPCWSTR,LPBROWSER_STATISTICS*);
+NET_API_STATUS I_BrowserResetStatistics(LPCWSTR);
+WORD I_BrowserServerEnumForXactsrv(LPCWSTR,LPCWSTR,ULONG,USHORT,PVOID,WORD,DWORD,PDWORD,PDWORD,DWORD,LPCWSTR,LPCWSTR,PWORD);
+NET_API_STATUS I_BrowserDebugTrace(PWCHAR,PCHAR);
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/lmchdev.h b/tcc/include/winapi/lmchdev.h
new file mode 100644
index 0000000..3a40968
--- /dev/null
+++ b/tcc/include/winapi/lmchdev.h
@@ -0,0 +1,61 @@
+#ifndef _LMCHDEV_H
+#define _LMCHDEV_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#define CHARDEVQ_NO_REQUESTS (-1)
+#define CHARDEV_CLOSE 0
+#define CHARDEVQ_MAX_PRIORITY 1
+#define CHARDEVQ_DEV_PARMNUM 1
+#define HANDLE_INFO_LEVEL_1 1
+#define HANDLE_CHARTIME_PARMNUM 1
+#define HANDLE_CHARCOUNT_PARMNUM 2
+#define CHARDEV_STAT_OPENED 2
+#define CHARDEVQ_PRIORITY_PARMNUM 2
+#define CHARDEVQ_DEVS_PARMNUM 3
+#define CHARDEV_STAT_ERROR 4
+#define CHARDEVQ_NUMUSERS_PARMNUM 4
+#define CHARDEVQ_NUMAHEAD_PARMNUM 5
+#define CHARDEVQ_DEF_PRIORITY 5
+#define CHARDEVQ_PRIORITY_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+CHARDEVQ_PRIORITY_PARMNUM)
+#define CHARDEVQ_DEVS_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+CHARDEVQ_DEVS_PARMNUM)
+#define CHARDEVQ_MIN_PRIORITY 9
+typedef struct _CHARDEV_INFO_0 { LPWSTR ch0_dev; } CHARDEV_INFO_0,*PCHARDEV_INFO_0,*LPCHARDEV_INFO_0;
+typedef struct _CHARDEV_INFO_1 {
+ LPWSTR ch1_dev;
+ DWORD ch1_status;
+ LPWSTR ch1_username;
+ DWORD ch1_time;
+} CHARDEV_INFO_1,*PCHARDEV_INFO_1,*LPCHARDEV_INFO_1;
+typedef struct _CHARDEVQ_INFO_0 { LPWSTR cq0_dev; } CHARDEVQ_INFO_0,*PCHARDEVQ_INFO_0,*LPCHARDEVQ_INFO_0;
+typedef struct _CHARDEVQ_INFO_1 {
+ LPWSTR cq1_dev;
+ DWORD cq1_priority;
+ LPWSTR cq1_devs;
+ DWORD cq1_numusers;
+ DWORD cq1_numahead;
+} CHARDEVQ_INFO_1,*PCHARDEVQ_INFO_1,*LPCHARDEVQ_INFO_1;
+typedef struct _CHARDEVQ_INFO_1002 { DWORD cq1002_priority; } CHARDEVQ_INFO_1002,*PCHARDEVQ_INFO_1002,*LPCHARDEVQ_INFO_1002;
+typedef struct _CHARDEVQ_INFO_1003 { LPWSTR cq1003_devs; } CHARDEVQ_INFO_1003,*PCHARDEVQ_INFO_1003,*LPCHARDEVQ_INFO_1003;
+typedef struct _HANDLE_INFO_1 {
+ DWORD hdli1_chartime;
+ DWORD hdli1_charcount;
+}HANDLE_INFO_1,*PHANDLE_INFO_1,*LPHANDLE_INFO_1;
+NET_API_STATUS WINAPI NetCharDevEnum(LPCWSTR,DWORD,PBYTE*,DWORD,PDWORD,PDWORD,PDWORD);
+NET_API_STATUS WINAPI NetCharDevGetInfo(LPCWSTR,LPCWSTR,DWORD,PBYTE*);
+NET_API_STATUS WINAPI NetCharDevControl(LPCWSTR,LPCWSTR,DWORD);
+NET_API_STATUS WINAPI NetCharDevQEnum(LPCWSTR,LPCWSTR,DWORD,PBYTE*,DWORD,PDWORD,PDWORD,PDWORD);
+NET_API_STATUS WINAPI NetCharDevQGetInfo(LPCWSTR,LPCWSTR,LPCWSTR,DWORD,PBYTE*);
+NET_API_STATUS WINAPI NetCharDevQSetInfo(LPCWSTR,LPCWSTR,DWORD,PBYTE,PDWORD);
+NET_API_STATUS WINAPI NetCharDevQPurge(LPCWSTR,LPCWSTR);
+NET_API_STATUS WINAPI NetCharDevQPurgeSelf(LPCWSTR,LPCWSTR,LPCWSTR);
+NET_API_STATUS WINAPI NetHandleGetInfo(HANDLE,DWORD,PBYTE*);
+NET_API_STATUS WINAPI NetHandleSetInfo(HANDLE,DWORD,PBYTE,DWORD,PDWORD);
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/lmconfig.h b/tcc/include/winapi/lmconfig.h
new file mode 100644
index 0000000..b75c6ab
--- /dev/null
+++ b/tcc/include/winapi/lmconfig.h
@@ -0,0 +1,21 @@
+#ifndef _LMCONFIG_H
+#define _LMCONFIG_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#define REVISED_CONFIG_APIS
+typedef struct _CONFIG_INFO_0 {
+ LPWSTR cfgi0_key;
+ LPWSTR cfgi0_data;
+} CONFIG_INFO_0,*PCONFIG_INFO_0,*LPCONFIG_INFO_0;
+NET_API_STATUS WINAPI NetConfigGet(LPCWSTR,LPCWSTR,LPCWSTR,PBYTE*);
+NET_API_STATUS WINAPI NetConfigGetAll(LPCWSTR,LPCWSTR,PBYTE*);
+NET_API_STATUS WINAPI NetConfigSet(LPCWSTR,LPCWSTR,LPCWSTR,DWORD,DWORD,PBYTE,DWORD);
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/lmcons.h b/tcc/include/winapi/lmcons.h
new file mode 100644
index 0000000..27566b3
--- /dev/null
+++ b/tcc/include/winapi/lmcons.h
@@ -0,0 +1,75 @@
+#ifndef _LMCONS_H
+#define _LMCONS_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#define MESSAGE_FILENAME TEXT("NETMSG")
+#define OS2MSG_FILENAME TEXT("BASE")
+#define HELP_MSG_FILENAME TEXT("NETH")
+#define NET_API_FUNCTION __stdcall
+#define NET_API_STATUS DWORD
+#define API_RET_TYPE NET_API_STATUS
+#define MIN_LANMAN_MESSAGE_ID NERR_BASE
+#define MAX_LANMAN_MESSAGE_ID 5799
+#ifndef CNLEN /* also in nddeapi.h */
+#define CNLEN 15
+#define UNCLEN (CNLEN + 2)
+#endif
+#define DNLEN 15
+#define LM20_CNLEN 15
+#define LM20_DNLEN 15
+#define LM20_SNLEN 15
+#define LM20_STXTLEN 63
+#define LM20_UNCLEN (LM20_CNLEN+2)
+#define LM20_NNLEN 12
+#define LM20_RMLEN (LM20_UNCLEN+1+LM20_NNLEN)
+#define NNLEN 80
+#define RMLEN (UNCLEN+1+NNLEN)
+#define SNLEN 80
+#define STXTLEN 256
+#define PATHLEN 256
+#define LM20_PATHLEN 256
+#define DEVLEN 80
+#define LM20_DEVLEN 8
+#define EVLEN 16
+#define UNLEN 256
+#define LM20_UNLEN 20
+#define GNLEN UNLEN
+#define LM20_GNLEN LM20_UNLEN
+#define PWLEN 256
+#define LM20_PWLEN 14
+#define SHPWLEN 8
+#define CLTYPE_LEN 12
+#define MAXCOMMENTSZ 256
+#define LM20_MAXCOMMENTSZ 48
+#define QNLEN NNLEN
+#define LM20_QNLEN LM20_NNLEN
+#define ALERTSZ 128
+#define MAXDEVENTRIES (sizeof(int)*8)
+#define NETBIOS_NAME_LEN 16
+#define MAX_PREFERRED_LENGTH ((DWORD)-1)
+#define CRYPT_KEY_LEN 7
+#define CRYPT_TXT_LEN 8
+#define ENCRYPTED_PWLEN 16
+#define SESSION_PWLEN 24
+#define SESSION_CRYPT_KLEN 21
+#define PARMNUM_ALL 0
+#define PARM_ERROR_UNKNOWN ((DWORD)-1)
+#define PARM_ERROR_NONE 0
+#define PARMNUM_BASE_INFOLEVEL 1000
+#define PLATFORM_ID_DOS 300
+#define PLATFORM_ID_OS2 400
+#define PLATFORM_ID_NT 500
+#define PLATFORM_ID_OSF 600
+#define PLATFORM_ID_VMS 700
+/* new typedef in W2K */
+#if defined( _WIN32_WINNT ) || defined( WINNT ) || defined( FORCE_UNICODE )
+#define LMSTR LPWSTR
+#define LMCSTR LPCWSTR
+#else
+#define LMSTR LPSTR
+#define LMCSTR LPCSTR
+#endif
+
+#endif
diff --git a/tcc/include/winapi/lmerr.h b/tcc/include/winapi/lmerr.h
new file mode 100644
index 0000000..58b1484
--- /dev/null
+++ b/tcc/include/winapi/lmerr.h
@@ -0,0 +1,306 @@
+#ifndef _LMERR_H
+#define _LMERR_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#include <winerror.h>
+#define NERR_Success 0
+#define NERR_BASE 2100
+#define NERR_NetNotStarted (NERR_BASE+2)
+#define NERR_UnknownServer (NERR_BASE+3)
+#define NERR_ShareMem (NERR_BASE+4)
+#define NERR_NoNetworkResource (NERR_BASE+5)
+#define NERR_RemoteOnly (NERR_BASE+6)
+#define NERR_DevNotRedirected (NERR_BASE+7)
+#define NERR_ServerNotStarted (NERR_BASE+14)
+#define NERR_ItemNotFound (NERR_BASE+15)
+#define NERR_UnknownDevDir (NERR_BASE+16)
+#define NERR_RedirectedPath (NERR_BASE+17)
+#define NERR_DuplicateShare (NERR_BASE+18)
+#define NERR_NoRoom (NERR_BASE+19)
+#define NERR_TooManyItems (NERR_BASE+21)
+#define NERR_InvalidMaxUsers (NERR_BASE+22)
+#define NERR_BufTooSmall (NERR_BASE+23)
+#define NERR_RemoteErr (NERR_BASE+27)
+#define NERR_LanmanIniError (NERR_BASE+31)
+#define NERR_NetworkError (NERR_BASE+36)
+#define NERR_WkstaInconsistentState (NERR_BASE+37)
+#define NERR_WkstaNotStarted (NERR_BASE+38)
+#define NERR_BrowserNotStarted (NERR_BASE+39)
+#define NERR_InternalError (NERR_BASE+40)
+#define NERR_BadTransactConfig (NERR_BASE+41)
+#define NERR_InvalidAPI (NERR_BASE+42)
+#define NERR_BadEventName (NERR_BASE+43)
+#define NERR_DupNameReboot (NERR_BASE+44)
+#define NERR_CfgCompNotFound (NERR_BASE+46)
+#define NERR_CfgParamNotFound (NERR_BASE+47)
+#define NERR_LineTooLong (NERR_BASE+49)
+#define NERR_QNotFound (NERR_BASE+50)
+#define NERR_JobNotFound (NERR_BASE+51)
+#define NERR_DestNotFound (NERR_BASE+52)
+#define NERR_DestExists (NERR_BASE+53)
+#define NERR_QExists (NERR_BASE+54)
+#define NERR_QNoRoom (NERR_BASE+55)
+#define NERR_JobNoRoom (NERR_BASE+56)
+#define NERR_DestNoRoom (NERR_BASE+57)
+#define NERR_DestIdle (NERR_BASE+58)
+#define NERR_DestInvalidOp (NERR_BASE+59)
+#define NERR_ProcNoRespond (NERR_BASE+60)
+#define NERR_SpoolerNotLoaded (NERR_BASE+61)
+#define NERR_DestInvalidState (NERR_BASE+62)
+#define NERR_QInvalidState (NERR_BASE+63)
+#define NERR_JobInvalidState (NERR_BASE+64)
+#define NERR_SpoolNoMemory (NERR_BASE+65)
+#define NERR_DriverNotFound (NERR_BASE+66)
+#define NERR_DataTypeInvalid (NERR_BASE+67)
+#define NERR_ProcNotFound (NERR_BASE+68)
+#define NERR_ServiceTableLocked (NERR_BASE+80)
+#define NERR_ServiceTableFull (NERR_BASE+81)
+#define NERR_ServiceInstalled (NERR_BASE+82)
+#define NERR_ServiceEntryLocked (NERR_BASE+83)
+#define NERR_ServiceNotInstalled (NERR_BASE+84)
+#define NERR_BadServiceName (NERR_BASE+85)
+#define NERR_ServiceCtlTimeout (NERR_BASE+86)
+#define NERR_ServiceCtlBusy (NERR_BASE+87)
+#define NERR_BadServiceProgName (NERR_BASE+88)
+#define NERR_ServiceNotCtrl (NERR_BASE+89)
+#define NERR_ServiceKillProc (NERR_BASE+90)
+#define NERR_ServiceCtlNotValid (NERR_BASE+91)
+#define NERR_NotInDispatchTbl (NERR_BASE+92)
+#define NERR_BadControlRecv (NERR_BASE+93)
+#define NERR_ServiceNotStarting (NERR_BASE+94)
+#define NERR_AlreadyLoggedOn (NERR_BASE+100)
+#define NERR_NotLoggedOn (NERR_BASE+101)
+#define NERR_BadUsername (NERR_BASE+102)
+#define NERR_BadPassword (NERR_BASE+103)
+#define NERR_UnableToAddName_W (NERR_BASE+104)
+#define NERR_UnableToAddName_F (NERR_BASE+105)
+#define NERR_UnableToDelName_W (NERR_BASE+106)
+#define NERR_UnableToDelName_F (NERR_BASE+107)
+#define NERR_LogonsPaused (NERR_BASE+109)
+#define NERR_LogonServerConflict (NERR_BASE+110)
+#define NERR_LogonNoUserPath (NERR_BASE+111)
+#define NERR_LogonScriptError (NERR_BASE+112)
+#define NERR_StandaloneLogon (NERR_BASE+114)
+#define NERR_LogonServerNotFound (NERR_BASE+115)
+#define NERR_LogonDomainExists (NERR_BASE+116)
+#define NERR_NonValidatedLogon (NERR_BASE+117)
+#define NERR_ACFNotFound (NERR_BASE+119)
+#define NERR_GroupNotFound (NERR_BASE+120)
+#define NERR_UserNotFound (NERR_BASE+121)
+#define NERR_ResourceNotFound (NERR_BASE+122)
+#define NERR_GroupExists (NERR_BASE+123)
+#define NERR_UserExists (NERR_BASE+124)
+#define NERR_ResourceExists (NERR_BASE+125)
+#define NERR_NotPrimary (NERR_BASE+126)
+#define NERR_ACFNotLoaded (NERR_BASE+127)
+#define NERR_ACFNoRoom (NERR_BASE+128)
+#define NERR_ACFFileIOFail (NERR_BASE+129)
+#define NERR_ACFTooManyLists (NERR_BASE+130)
+#define NERR_UserLogon (NERR_BASE+131)
+#define NERR_ACFNoParent (NERR_BASE+132)
+#define NERR_CanNotGrowSegment (NERR_BASE+133)
+#define NERR_SpeGroupOp (NERR_BASE+134)
+#define NERR_NotInCache (NERR_BASE+135)
+#define NERR_UserInGroup (NERR_BASE+136)
+#define NERR_UserNotInGroup (NERR_BASE+137)
+#define NERR_AccountUndefined (NERR_BASE+138)
+#define NERR_AccountExpired (NERR_BASE+139)
+#define NERR_InvalidWorkstation (NERR_BASE+140)
+#define NERR_InvalidLogonHours (NERR_BASE+141)
+#define NERR_PasswordExpired (NERR_BASE+142)
+#define NERR_PasswordCantChange (NERR_BASE+143)
+#define NERR_PasswordHistConflict (NERR_BASE+144)
+#define NERR_PasswordTooShort (NERR_BASE+145)
+#define NERR_PasswordTooRecent (NERR_BASE+146)
+#define NERR_InvalidDatabase (NERR_BASE+147)
+#define NERR_DatabaseUpToDate (NERR_BASE+148)
+#define NERR_SyncRequired (NERR_BASE+149)
+#define NERR_UseNotFound (NERR_BASE+150)
+#define NERR_BadAsgType (NERR_BASE+151)
+#define NERR_DeviceIsShared (NERR_BASE+152)
+#define NERR_NoComputerName (NERR_BASE+170)
+#define NERR_MsgAlreadyStarted (NERR_BASE+171)
+#define NERR_MsgInitFailed (NERR_BASE+172)
+#define NERR_NameNotFound (NERR_BASE+173)
+#define NERR_AlreadyForwarded (NERR_BASE+174)
+#define NERR_AddForwarded (NERR_BASE+175)
+#define NERR_AlreadyExists (NERR_BASE+176)
+#define NERR_TooManyNames (NERR_BASE+177)
+#define NERR_DelComputerName (NERR_BASE+178)
+#define NERR_LocalForward (NERR_BASE+179)
+#define NERR_GrpMsgProcessor (NERR_BASE+180)
+#define NERR_PausedRemote (NERR_BASE+181)
+#define NERR_BadReceive (NERR_BASE+182)
+#define NERR_NameInUse (NERR_BASE+183)
+#define NERR_MsgNotStarted (NERR_BASE+184)
+#define NERR_NotLocalName (NERR_BASE+185)
+#define NERR_NoForwardName (NERR_BASE+186)
+#define NERR_RemoteFull (NERR_BASE+187)
+#define NERR_NameNotForwarded (NERR_BASE+188)
+#define NERR_TruncatedBroadcast (NERR_BASE+189)
+#define NERR_InvalidDevice (NERR_BASE+194)
+#define NERR_WriteFault (NERR_BASE+195)
+#define NERR_DuplicateName (NERR_BASE+197)
+#define NERR_DeleteLater (NERR_BASE+198)
+#define NERR_IncompleteDel (NERR_BASE+199)
+#define NERR_MultipleNets (NERR_BASE+200)
+#define NERR_NetNameNotFound (NERR_BASE+210)
+#define NERR_DeviceNotShared (NERR_BASE+211)
+#define NERR_ClientNameNotFound (NERR_BASE+212)
+#define NERR_FileIdNotFound (NERR_BASE+214)
+#define NERR_ExecFailure (NERR_BASE+215)
+#define NERR_TmpFile (NERR_BASE+216)
+#define NERR_TooMuchData (NERR_BASE+217)
+#define NERR_DeviceShareConflict (NERR_BASE+218)
+#define NERR_BrowserTableIncomplete (NERR_BASE+219)
+#define NERR_NotLocalDomain (NERR_BASE+220)
+#define NERR_DevInvalidOpCode (NERR_BASE+231)
+#define NERR_DevNotFound (NERR_BASE+232)
+#define NERR_DevNotOpen (NERR_BASE+233)
+#define NERR_BadQueueDevString (NERR_BASE+234)
+#define NERR_BadQueuePriority (NERR_BASE+235)
+#define NERR_NoCommDevs (NERR_BASE+237)
+#define NERR_QueueNotFound (NERR_BASE+238)
+#define NERR_BadDevString (NERR_BASE+240)
+#define NERR_BadDev (NERR_BASE+241)
+#define NERR_InUseBySpooler (NERR_BASE+242)
+#define NERR_CommDevInUse (NERR_BASE+243)
+#define NERR_InvalidComputer (NERR_BASE+251)
+#define NERR_MaxLenExceeded (NERR_BASE+254)
+#define NERR_BadComponent (NERR_BASE+256)
+#define NERR_CantType (NERR_BASE+257)
+#define NERR_TooManyEntries (NERR_BASE+262)
+#define NERR_ProfileFileTooBig (NERR_BASE+270)
+#define NERR_ProfileOffset (NERR_BASE+271)
+#define NERR_ProfileCleanup (NERR_BASE+272)
+#define NERR_ProfileUnknownCmd (NERR_BASE+273)
+#define NERR_ProfileLoadErr (NERR_BASE+274)
+#define NERR_ProfileSaveErr (NERR_BASE+275)
+#define NERR_LogOverflow (NERR_BASE+277)
+#define NERR_LogFileChanged (NERR_BASE+278)
+#define NERR_LogFileCorrupt (NERR_BASE+279)
+#define NERR_SourceIsDir (NERR_BASE+280)
+#define NERR_BadSource (NERR_BASE+281)
+#define NERR_BadDest (NERR_BASE+282)
+#define NERR_DifferentServers (NERR_BASE+283)
+#define NERR_RunSrvPaused (NERR_BASE+285)
+#define NERR_ErrCommRunSrv (NERR_BASE+289)
+#define NERR_ErrorExecingGhost (NERR_BASE+291)
+#define NERR_ShareNotFound (NERR_BASE+292)
+#define NERR_InvalidLana (NERR_BASE+300)
+#define NERR_OpenFiles (NERR_BASE+301)
+#define NERR_ActiveConns (NERR_BASE+302)
+#define NERR_BadPasswordCore (NERR_BASE+303)
+#define NERR_DevInUse (NERR_BASE+304)
+#define NERR_LocalDrive (NERR_BASE+305)
+#define NERR_AlertExists (NERR_BASE+330)
+#define NERR_TooManyAlerts (NERR_BASE+331)
+#define NERR_NoSuchAlert (NERR_BASE+332)
+#define NERR_BadRecipient (NERR_BASE+333)
+#define NERR_AcctLimitExceeded (NERR_BASE+334)
+#define NERR_InvalidLogSeek (NERR_BASE+340)
+#define NERR_BadUasConfig (NERR_BASE+350)
+#define NERR_InvalidUASOp (NERR_BASE+351)
+#define NERR_LastAdmin (NERR_BASE+352)
+#define NERR_DCNotFound (NERR_BASE+353)
+#define NERR_LogonTrackingError (NERR_BASE+354)
+#define NERR_NetlogonNotStarted (NERR_BASE+355)
+#define NERR_CanNotGrowUASFile (NERR_BASE+356)
+#define NERR_TimeDiffAtDC (NERR_BASE+357)
+#define NERR_PasswordMismatch (NERR_BASE+358)
+#define NERR_NoSuchServer (NERR_BASE+360)
+#define NERR_NoSuchSession (NERR_BASE+361)
+#define NERR_NoSuchConnection (NERR_BASE+362)
+#define NERR_TooManyServers (NERR_BASE+363)
+#define NERR_TooManySessions (NERR_BASE+364)
+#define NERR_TooManyConnections (NERR_BASE+365)
+#define NERR_TooManyFiles (NERR_BASE+366)
+#define NERR_NoAlternateServers (NERR_BASE+367)
+#define NERR_TryDownLevel (NERR_BASE+370)
+#define NERR_UPSDriverNotStarted (NERR_BASE+380)
+#define NERR_UPSInvalidConfig (NERR_BASE+381)
+#define NERR_UPSInvalidCommPort (NERR_BASE+382)
+#define NERR_UPSSignalAsserted (NERR_BASE+383)
+#define NERR_UPSShutdownFailed (NERR_BASE+384)
+#define NERR_BadDosRetCode (NERR_BASE+400)
+#define NERR_ProgNeedsExtraMem (NERR_BASE+401)
+#define NERR_BadDosFunction (NERR_BASE+402)
+#define NERR_RemoteBootFailed (NERR_BASE+403)
+#define NERR_BadFileCheckSum (NERR_BASE+404)
+#define NERR_NoRplBootSystem (NERR_BASE+405)
+#define NERR_RplLoadrNetBiosErr (NERR_BASE+406)
+#define NERR_RplLoadrDiskErr (NERR_BASE+407)
+#define NERR_ImageParamErr (NERR_BASE+408)
+#define NERR_TooManyImageParams (NERR_BASE+409)
+#define NERR_NonDosFloppyUsed (NERR_BASE+410)
+#define NERR_RplBootRestart (NERR_BASE+411)
+#define NERR_RplSrvrCallFailed (NERR_BASE+412)
+#define NERR_CantConnectRplSrvr (NERR_BASE+413)
+#define NERR_CantOpenImageFile (NERR_BASE+414)
+#define NERR_CallingRplSrvr (NERR_BASE+415)
+#define NERR_StartingRplBoot (NERR_BASE+416)
+#define NERR_RplBootServiceTerm (NERR_BASE+417)
+#define NERR_RplBootStartFailed (NERR_BASE+418)
+#define NERR_RPL_CONNECTED (NERR_BASE+419)
+#define NERR_BrowserConfiguredToNotRun (NERR_BASE+450)
+#define NERR_RplNoAdaptersStarted (NERR_BASE+510)
+#define NERR_RplBadRegistry (NERR_BASE+511)
+#define NERR_RplBadDatabase (NERR_BASE+512)
+#define NERR_RplRplfilesShare (NERR_BASE+513)
+#define NERR_RplNotRplServer (NERR_BASE+514)
+#define NERR_RplCannotEnum (NERR_BASE+515)
+#define NERR_RplWkstaInfoCorrupted (NERR_BASE+516)
+#define NERR_RplWkstaNotFound (NERR_BASE+517)
+#define NERR_RplWkstaNameUnavailable (NERR_BASE+518)
+#define NERR_RplProfileInfoCorrupted (NERR_BASE+519)
+#define NERR_RplProfileNotFound (NERR_BASE+520)
+#define NERR_RplProfileNameUnavailable (NERR_BASE+521)
+#define NERR_RplProfileNotEmpty (NERR_BASE+522)
+#define NERR_RplConfigInfoCorrupted (NERR_BASE+523)
+#define NERR_RplConfigNotFound (NERR_BASE+524)
+#define NERR_RplAdapterInfoCorrupted (NERR_BASE+525)
+#define NERR_RplInternal (NERR_BASE+526)
+#define NERR_RplVendorInfoCorrupted (NERR_BASE+527)
+#define NERR_RplBootInfoCorrupted (NERR_BASE+528)
+#define NERR_RplWkstaNeedsUserAcct (NERR_BASE+529)
+#define NERR_RplNeedsRPLUSERAcct (NERR_BASE+530)
+#define NERR_RplBootNotFound (NERR_BASE+531)
+#define NERR_RplIncompatibleProfile (NERR_BASE+532)
+#define NERR_RplAdapterNameUnavailable (NERR_BASE+533)
+#define NERR_RplConfigNotEmpty (NERR_BASE+534)
+#define NERR_RplBootInUse (NERR_BASE+535)
+#define NERR_RplBackupDatabase (NERR_BASE+536)
+#define NERR_RplAdapterNotFound (NERR_BASE+537)
+#define NERR_RplVendorNotFound (NERR_BASE+538)
+#define NERR_RplVendorNameUnavailable (NERR_BASE+539)
+#define NERR_RplBootNameUnavailable (NERR_BASE+540)
+#define NERR_RplConfigNameUnavailable (NERR_BASE+541)
+#define NERR_DfsInternalCorruption (NERR_BASE+560)
+#define NERR_DfsVolumeDataCorrupt (NERR_BASE+561)
+#define NERR_DfsNoSuchVolume (NERR_BASE+562)
+#define NERR_DfsVolumeAlreadyExists (NERR_BASE+563)
+#define NERR_DfsAlreadyShared (NERR_BASE+564)
+#define NERR_DfsNoSuchShare (NERR_BASE+565)
+#define NERR_DfsNotALeafVolume (NERR_BASE+566)
+#define NERR_DfsLeafVolume (NERR_BASE+567)
+#define NERR_DfsVolumeHasMultipleServers (NERR_BASE+568)
+#define NERR_DfsCantCreateJunctionPoint (NERR_BASE+569)
+#define NERR_DfsServerNotDfsAware (NERR_BASE+570)
+#define NERR_DfsBadRenamePath (NERR_BASE+571)
+#define NERR_DfsVolumeIsOffline (NERR_BASE+572)
+#define NERR_DfsNoSuchServer (NERR_BASE+573)
+#define NERR_DfsCyclicalName (NERR_BASE+574)
+#define NERR_DfsNotSupportedInServerDfs (NERR_BASE+575)
+#define NERR_DfsDuplicateService (NERR_BASE+576)
+#define NERR_DfsCantRemoveLastServerShare (NERR_BASE+577)
+#define NERR_DfsVolumeIsInterDfs (NERR_BASE+578)
+#define NERR_DfsInconsistent (NERR_BASE+579)
+#define NERR_DfsServerUpgraded (NERR_BASE+580)
+#define NERR_DfsDataIsIdentical (NERR_BASE+581)
+#define NERR_DfsCantRemoveDfsRoot (NERR_BASE+582)
+#define NERR_DfsChildOrParentInDfs (NERR_BASE+583)
+#define NERR_DfsInternalError (NERR_BASE+590)
+#define MAX_NERR (NERR_BASE+899)
+#endif
diff --git a/tcc/include/winapi/lmerrlog.h b/tcc/include/winapi/lmerrlog.h
new file mode 100644
index 0000000..2f41603
--- /dev/null
+++ b/tcc/include/winapi/lmerrlog.h
@@ -0,0 +1,211 @@
+#ifndef _LMERRLOG_H
+#define _LMERRLOG_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#define ERRLOG_BASE 3100
+#define ERRLOG2_BASE 5700
+#define LOGFLAGS_FORWARD 0
+#define LOGFLAGS_BACKWARD 1
+#define LOGFLAGS_SEEK 2
+#define NELOG_Internal_Error ERRLOG_BASE
+#define NELOG_Resource_Shortage (ERRLOG_BASE+1)
+#define NELOG_Unable_To_Lock_Segment (ERRLOG_BASE+2)
+#define NELOG_Unable_To_Unlock_Segment (ERRLOG_BASE+3)
+#define NELOG_Uninstall_Service (ERRLOG_BASE+4)
+#define NELOG_Init_Exec_Fail (ERRLOG_BASE+5)
+#define NELOG_Ncb_Error (ERRLOG_BASE+6)
+#define NELOG_Net_Not_Started (ERRLOG_BASE+7)
+#define NELOG_Ioctl_Error (ERRLOG_BASE+8)
+#define NELOG_System_Semaphore (ERRLOG_BASE+9)
+#define NELOG_Init_OpenCreate_Err (ERRLOG_BASE+10)
+#define NELOG_NetBios (ERRLOG_BASE+11)
+#define NELOG_SMB_Illegal (ERRLOG_BASE+12)
+#define NELOG_Service_Fail (ERRLOG_BASE+13)
+#define NELOG_Entries_Lost (ERRLOG_BASE+14)
+#define NELOG_Init_Seg_Overflow (ERRLOG_BASE+20)
+#define NELOG_Srv_No_Mem_Grow (ERRLOG_BASE+21)
+#define NELOG_Access_File_Bad (ERRLOG_BASE+22)
+#define NELOG_Srvnet_Not_Started (ERRLOG_BASE+23)
+#define NELOG_Init_Chardev_Err (ERRLOG_BASE+24)
+#define NELOG_Remote_API (ERRLOG_BASE+25)
+#define NELOG_Ncb_TooManyErr (ERRLOG_BASE+26)
+#define NELOG_Mailslot_err (ERRLOG_BASE+27)
+#define NELOG_ReleaseMem_Alert (ERRLOG_BASE+28)
+#define NELOG_AT_cannot_write (ERRLOG_BASE+29)
+#define NELOG_Cant_Make_Msg_File (ERRLOG_BASE+30)
+#define NELOG_Exec_Netservr_NoMem (ERRLOG_BASE+31)
+#define NELOG_Server_Lock_Failure (ERRLOG_BASE+32)
+#define NELOG_Msg_Shutdown (ERRLOG_BASE+40)
+#define NELOG_Msg_Sem_Shutdown (ERRLOG_BASE+41)
+#define NELOG_Msg_Log_Err (ERRLOG_BASE+50)
+#define NELOG_VIO_POPUP_ERR (ERRLOG_BASE+51)
+#define NELOG_Msg_Unexpected_SMB_Type (ERRLOG_BASE+52)
+#define NELOG_Wksta_Infoseg (ERRLOG_BASE+60)
+#define NELOG_Wksta_Compname (ERRLOG_BASE+61)
+#define NELOG_Wksta_BiosThreadFailure (ERRLOG_BASE+62)
+#define NELOG_Wksta_IniSeg (ERRLOG_BASE+63)
+#define NELOG_Wksta_HostTab_Full (ERRLOG_BASE+64)
+#define NELOG_Wksta_Bad_Mailslot_SMB (ERRLOG_BASE+65)
+#define NELOG_Wksta_UASInit (ERRLOG_BASE+66)
+#define NELOG_Wksta_SSIRelogon (ERRLOG_BASE+67)
+#define NELOG_Build_Name (ERRLOG_BASE+70)
+#define NELOG_Name_Expansion (ERRLOG_BASE+71)
+#define NELOG_Message_Send (ERRLOG_BASE+72)
+#define NELOG_Mail_Slt_Err (ERRLOG_BASE+73)
+#define NELOG_AT_cannot_read (ERRLOG_BASE+74)
+#define NELOG_AT_sched_err (ERRLOG_BASE+75)
+#define NELOG_AT_schedule_file_created (ERRLOG_BASE+76)
+#define NELOG_Srvnet_NB_Open (ERRLOG_BASE+77)
+#define NELOG_AT_Exec_Err (ERRLOG_BASE+78)
+#define NELOG_Lazy_Write_Err (ERRLOG_BASE+80)
+#define NELOG_HotFix (ERRLOG_BASE+81)
+#define NELOG_HardErr_From_Server (ERRLOG_BASE+82)
+#define NELOG_LocalSecFail1 (ERRLOG_BASE+83)
+#define NELOG_LocalSecFail2 (ERRLOG_BASE+84)
+#define NELOG_LocalSecFail3 (ERRLOG_BASE+85)
+#define NELOG_LocalSecGeneralFail (ERRLOG_BASE+86)
+#define NELOG_NetWkSta_Internal_Error (ERRLOG_BASE+90)
+#define NELOG_NetWkSta_No_Resource (ERRLOG_BASE+91)
+#define NELOG_NetWkSta_SMB_Err (ERRLOG_BASE+92)
+#define NELOG_NetWkSta_VC_Err (ERRLOG_BASE+93)
+#define NELOG_NetWkSta_Stuck_VC_Err (ERRLOG_BASE+94)
+#define NELOG_NetWkSta_NCB_Err (ERRLOG_BASE+95)
+#define NELOG_NetWkSta_Write_Behind_Err (ERRLOG_BASE+96)
+#define NELOG_NetWkSta_Reset_Err (ERRLOG_BASE+97)
+#define NELOG_NetWkSta_Too_Many (ERRLOG_BASE+98)
+#define NELOG_Srv_Thread_Failure (ERRLOG_BASE+104)
+#define NELOG_Srv_Close_Failure (ERRLOG_BASE+105)
+#define NELOG_ReplUserCurDir (ERRLOG_BASE+106)
+#define NELOG_ReplCannotMasterDir (ERRLOG_BASE+107)
+#define NELOG_ReplUpdateError (ERRLOG_BASE+108)
+#define NELOG_ReplLostMaster (ERRLOG_BASE+109)
+#define NELOG_NetlogonAuthDCFail (ERRLOG_BASE+110)
+#define NELOG_ReplLogonFailed (ERRLOG_BASE+111)
+#define NELOG_ReplNetErr (ERRLOG_BASE+112)
+#define NELOG_ReplMaxFiles (ERRLOG_BASE+113)
+#define NELOG_ReplMaxTreeDepth (ERRLOG_BASE+114)
+#define NELOG_ReplBadMsg (ERRLOG_BASE+115)
+#define NELOG_ReplSysErr (ERRLOG_BASE+116)
+#define NELOG_ReplUserLoged (ERRLOG_BASE+117)
+#define NELOG_ReplBadImport (ERRLOG_BASE+118)
+#define NELOG_ReplBadExport (ERRLOG_BASE+119)
+#define NELOG_ReplSignalFileErr (ERRLOG_BASE+120)
+#define NELOG_DiskFT (ERRLOG_BASE+121)
+#define NELOG_ReplAccessDenied (ERRLOG_BASE+122)
+#define NELOG_NetlogonFailedPrimary (ERRLOG_BASE+123)
+#define NELOG_NetlogonPasswdSetFailed (ERRLOG_BASE+124)
+#define NELOG_NetlogonTrackingError (ERRLOG_BASE+125)
+#define NELOG_NetlogonSyncError (ERRLOG_BASE+126)
+#define NELOG_UPS_PowerOut (ERRLOG_BASE+130)
+#define NELOG_UPS_Shutdown (ERRLOG_BASE+131)
+#define NELOG_UPS_CmdFileError (ERRLOG_BASE+132)
+#define NELOG_UPS_CannotOpenDriver (ERRLOG_BASE+133)
+#define NELOG_UPS_PowerBack (ERRLOG_BASE+134)
+#define NELOG_UPS_CmdFileConfig (ERRLOG_BASE+135)
+#define NELOG_UPS_CmdFileExec (ERRLOG_BASE+136)
+#define NELOG_Missing_Parameter (ERRLOG_BASE+150)
+#define NELOG_Invalid_Config_Line (ERRLOG_BASE+151)
+#define NELOG_Invalid_Config_File (ERRLOG_BASE+152)
+#define NELOG_File_Changed (ERRLOG_BASE+153)
+#define NELOG_Files_Dont_Fit (ERRLOG_BASE+154)
+#define NELOG_Wrong_DLL_Version (ERRLOG_BASE+155)
+#define NELOG_Error_in_DLL (ERRLOG_BASE+156)
+#define NELOG_System_Error (ERRLOG_BASE+157)
+#define NELOG_FT_ErrLog_Too_Large (ERRLOG_BASE+158)
+#define NELOG_FT_Update_In_Progress (ERRLOG_BASE+159)
+#define NELOG_OEM_Code (ERRLOG_BASE+199)
+#define NELOG_NetlogonSSIInitError ERRLOG2_BASE
+#define NELOG_NetlogonFailedToUpdateTrustList (ERRLOG2_BASE+1)
+#define NELOG_NetlogonFailedToAddRpcInterface (ERRLOG2_BASE+2)
+#define NELOG_NetlogonFailedToReadMailslot (ERRLOG2_BASE+3)
+#define NELOG_NetlogonFailedToRegisterSC (ERRLOG2_BASE+4)
+#define NELOG_NetlogonChangeLogCorrupt (ERRLOG2_BASE+5)
+#define NELOG_NetlogonFailedToCreateShare (ERRLOG2_BASE+6)
+#define NELOG_NetlogonDownLevelLogonFailed (ERRLOG2_BASE+7)
+#define NELOG_NetlogonDownLevelLogoffFailed (ERRLOG2_BASE+8)
+#define NELOG_NetlogonNTLogonFailed (ERRLOG2_BASE+9)
+#define NELOG_NetlogonNTLogoffFailed (ERRLOG2_BASE+10)
+#define NELOG_NetlogonPartialSyncCallSuccess (ERRLOG2_BASE+11)
+#define NELOG_NetlogonPartialSyncCallFailed (ERRLOG2_BASE+12)
+#define NELOG_NetlogonFullSyncCallSuccess (ERRLOG2_BASE+13)
+#define NELOG_NetlogonFullSyncCallFailed (ERRLOG2_BASE+14)
+#define NELOG_NetlogonPartialSyncSuccess (ERRLOG2_BASE+15)
+#define NELOG_NetlogonPartialSyncFailed (ERRLOG2_BASE+16)
+#define NELOG_NetlogonFullSyncSuccess (ERRLOG2_BASE+17)
+#define NELOG_NetlogonFullSyncFailed (ERRLOG2_BASE+18)
+#define NELOG_NetlogonAuthNoDomainController (ERRLOG2_BASE+19)
+#define NELOG_NetlogonAuthNoTrustLsaSecret (ERRLOG2_BASE+20)
+#define NELOG_NetlogonAuthNoTrustSamAccount (ERRLOG2_BASE+21)
+#define NELOG_NetlogonServerAuthFailed (ERRLOG2_BASE+22)
+#define NELOG_NetlogonServerAuthNoTrustSamAccount (ERRLOG2_BASE+23)
+#define NELOG_FailedToRegisterSC (ERRLOG2_BASE+24)
+#define NELOG_FailedToSetServiceStatus (ERRLOG2_BASE+25)
+#define NELOG_FailedToGetComputerName (ERRLOG2_BASE+26)
+#define NELOG_DriverNotLoaded (ERRLOG2_BASE+27)
+#define NELOG_NoTranportLoaded (ERRLOG2_BASE+28)
+#define NELOG_NetlogonFailedDomainDelta (ERRLOG2_BASE+29)
+#define NELOG_NetlogonFailedGlobalGroupDelta (ERRLOG2_BASE+30)
+#define NELOG_NetlogonFailedLocalGroupDelta (ERRLOG2_BASE+31)
+#define NELOG_NetlogonFailedUserDelta (ERRLOG2_BASE+32)
+#define NELOG_NetlogonFailedPolicyDelta (ERRLOG2_BASE+33)
+#define NELOG_NetlogonFailedTrustedDomainDelta (ERRLOG2_BASE+34)
+#define NELOG_NetlogonFailedAccountDelta (ERRLOG2_BASE+35)
+#define NELOG_NetlogonFailedSecretDelta (ERRLOG2_BASE+36)
+#define NELOG_NetlogonSystemError (ERRLOG2_BASE+37)
+#define NELOG_NetlogonDuplicateMachineAccounts (ERRLOG2_BASE+38)
+#define NELOG_NetlogonTooManyGlobalGroups (ERRLOG2_BASE+39)
+#define NELOG_NetlogonBrowserDriver (ERRLOG2_BASE+40)
+#define NELOG_NetlogonAddNameFailure (ERRLOG2_BASE+41)
+#define NELOG_RplMessages (ERRLOG2_BASE+42)
+#define NELOG_RplXnsBoot (ERRLOG2_BASE+43)
+#define NELOG_RplSystem (ERRLOG2_BASE+44)
+#define NELOG_RplWkstaTimeout (ERRLOG2_BASE+45)
+#define NELOG_RplWkstaFileOpen (ERRLOG2_BASE+46)
+#define NELOG_RplWkstaFileRead (ERRLOG2_BASE+47)
+#define NELOG_RplWkstaMemory (ERRLOG2_BASE+48)
+#define NELOG_RplWkstaFileChecksum (ERRLOG2_BASE+49)
+#define NELOG_RplWkstaFileLineCount (ERRLOG2_BASE+50)
+#define NELOG_RplWkstaBbcFile (ERRLOG2_BASE+51)
+#define NELOG_RplWkstaFileSize (ERRLOG2_BASE+52)
+#define NELOG_RplWkstaInternal (ERRLOG2_BASE+53)
+#define NELOG_RplWkstaWrongVersion (ERRLOG2_BASE+54)
+#define NELOG_RplWkstaNetwork (ERRLOG2_BASE+55)
+#define NELOG_RplAdapterResource (ERRLOG2_BASE+56)
+#define NELOG_RplFileCopy (ERRLOG2_BASE+57)
+#define NELOG_RplFileDelete (ERRLOG2_BASE+58)
+#define NELOG_RplFilePerms (ERRLOG2_BASE+59)
+#define NELOG_RplCheckConfigs (ERRLOG2_BASE+60)
+#define NELOG_RplCreateProfiles (ERRLOG2_BASE+61)
+#define NELOG_RplRegistry (ERRLOG2_BASE+62)
+#define NELOG_RplReplaceRPLDISK (ERRLOG2_BASE+63)
+#define NELOG_RplCheckSecurity (ERRLOG2_BASE+64)
+#define NELOG_RplBackupDatabase (ERRLOG2_BASE+65)
+#define NELOG_RplInitDatabase (ERRLOG2_BASE+66)
+#define NELOG_RplRestoreDatabaseFailure (ERRLOG2_BASE+67)
+#define NELOG_RplRestoreDatabaseSuccess (ERRLOG2_BASE+68)
+#define NELOG_RplInitRestoredDatabase (ERRLOG2_BASE+69)
+#define NELOG_NetlogonSessionTypeWrong (ERRLOG2_BASE+70)
+#define REVISED_ERROR_LOG_STRUCT
+typedef struct _ERROR_LOG {
+ DWORD el_len;
+ DWORD el_reserved;
+ DWORD el_time;
+ DWORD el_error;
+ LPWSTR el_name;
+ LPWSTR el_text;
+ LPBYTE el_data;
+ DWORD el_data_size;
+ DWORD el_nstrings;
+} ERROR_LOG,*PERROR_LOG,*LPERROR_LOG;
+NET_API_STATUS WINAPI NetErrorLogClear(LPCWSTR,LPCWSTR,LPBYTE);
+NET_API_STATUS WINAPI NetErrorLogRead(LPCWSTR,LPWSTR,LPHLOG,DWORD,LPDWORD,DWORD,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD);
+NET_API_STATUS WINAPI NetErrorLogWrite(LPBYTE,DWORD,LPCWSTR,LPBYTE,DWORD,LPBYTE,DWORD,LPBYTE);
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/lmmsg.h b/tcc/include/winapi/lmmsg.h
new file mode 100644
index 0000000..9a4ea64
--- /dev/null
+++ b/tcc/include/winapi/lmmsg.h
@@ -0,0 +1,27 @@
+#ifndef _LMMSG_H
+#define _LMMSG_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#define MSGNAME_NOT_FORWARDED 0
+#define MSGNAME_FORWARDED_TO 4
+#define MSGNAME_FORWARDED_FROM 16
+typedef struct _MSG_INFO_0 { LPWSTR msgi0_name; }MSG_INFO_0,*PMSG_INFO_0,*LPMSG_INFO_0;
+typedef struct _MSG_INFO_1 {
+ LPWSTR msgi1_name;
+ DWORD msgi1_forward_flag;
+ LPWSTR msgi1_forward;
+}MSG_INFO_1,*PMSG_INFO_1,*LPMSG_INFO_1;
+NET_API_STATUS WINAPI NetMessageBufferSend(LPCWSTR,LPCWSTR,LPCWSTR,PBYTE,DWORD);
+NET_API_STATUS WINAPI NetMessageNameAdd(LPCWSTR,LPCWSTR);
+NET_API_STATUS WINAPI NetMessageNameDel(LPCWSTR,LPCWSTR);
+NET_API_STATUS WINAPI NetMessageNameEnum(LPCWSTR,DWORD,PBYTE*,DWORD,PDWORD,PDWORD,PDWORD);
+NET_API_STATUS WINAPI NetMessageNameGetInfo(LPCWSTR,LPCWSTR,DWORD,PBYTE*);
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/lmremutl.h b/tcc/include/winapi/lmremutl.h
new file mode 100644
index 0000000..0609240
--- /dev/null
+++ b/tcc/include/winapi/lmremutl.h
@@ -0,0 +1,45 @@
+#ifndef _LMREMUTL_H
+#define _LMREMUTL_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#define SUPPORTS_REMOTE_ADMIN_PROTOCOL 2
+#define SUPPORTS_RPC 4
+#define SUPPORTS_SAM_PROTOCOL 8
+#define SUPPORTS_UNICODE 16
+#define SUPPORTS_LOCAL 32
+#define SUPPORTS_ANY 0xFFFFFFFF
+#define NO_PERMISSION_REQUIRED 1
+#define ALLOCATE_RESPONSE 2
+#define USE_SPECIFIC_TRANSPORT 0x80000000
+#ifndef DESC_CHAR_UNICODE
+typedef CHAR DESC_CHAR;
+#else
+typedef WCHAR DESC_CHAR;
+#endif
+typedef DESC_CHAR *LPDESC;
+typedef struct _TIME_OF_DAY_INFO {
+ DWORD tod_elapsedt;
+ DWORD tod_msecs;
+ DWORD tod_hours;
+ DWORD tod_mins;
+ DWORD tod_secs;
+ DWORD tod_hunds;
+ LONG tod_timezone;
+ DWORD tod_tinterval;
+ DWORD tod_day;
+ DWORD tod_month;
+ DWORD tod_year;
+ DWORD tod_weekday;
+} TIME_OF_DAY_INFO,*PTIME_OF_DAY_INFO,*LPTIME_OF_DAY_INFO;
+NET_API_STATUS WINAPI NetRemoteTOD(LPCWSTR,PBYTE*);
+NET_API_STATUS WINAPI NetRemoteComputerSupports(LPCWSTR,DWORD,PDWORD);
+NET_API_STATUS RxRemoteApi(DWORD,LPCWSTR,LPDESC,LPDESC,LPDESC,LPDESC,LPDESC,LPDESC,LPDESC,DWORD,... );
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/lmrepl.h b/tcc/include/winapi/lmrepl.h
new file mode 100644
index 0000000..0cef98c
--- /dev/null
+++ b/tcc/include/winapi/lmrepl.h
@@ -0,0 +1,94 @@
+#ifndef _LMREPL_H
+#define _LMREPL_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#define REPL_ROLE_EXPORT 1
+#define REPL_ROLE_IMPORT 2
+#define REPL_ROLE_BOTH 3
+#define REPL_INTERVAL_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+0)
+#define REPL_PULSE_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+1)
+#define REPL_GUARDTIME_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+2)
+#define REPL_RANDOM_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+3)
+#define REPL_UNLOCK_NOFORCE 0
+#define REPL_UNLOCK_FORCE 1
+#define REPL_STATE_OK 0
+#define REPL_STATE_NO_MASTER 1
+#define REPL_STATE_NO_SYNC 2
+#define REPL_STATE_NEVER_REPLICATED 3
+#define REPL_INTEGRITY_FILE 1
+#define REPL_INTEGRITY_TREE 2
+#define REPL_EXTENT_FILE 1
+#define REPL_EXTENT_TREE 2
+#define REPL_EXPORT_INTEGRITY_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+0)
+#define REPL_EXPORT_EXTENT_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+1)
+typedef struct _REPL_INFO_0 {
+ DWORD rp0_role;
+ LPWSTR rp0_exportpath;
+ LPWSTR rp0_exportlist;
+ LPWSTR rp0_importpath;
+ LPWSTR rp0_importlist;
+ LPWSTR rp0_logonusername;
+ DWORD rp0_interval;
+ DWORD rp0_pulse;
+ DWORD rp0_guardtime;
+ DWORD rp0_random;
+} REPL_INFO_0,*PREPL_INFO_0,*LPREPL_INFO_0;
+typedef struct _REPL_INFO_1000 { DWORD rp1000_interval; } REPL_INFO_1000,*PREPL_INFO_1000,*LPREPL_INFO_1000;
+typedef struct _REPL_INFO_1001 { DWORD rp1001_pulse; } REPL_INFO_1001,*PREPL_INFO_1001,*LPREPL_INFO_1001;
+typedef struct _REPL_INFO_1002 { DWORD rp1002_guardtime; } REPL_INFO_1002,*PREPL_INFO_1002,*LPREPL_INFO_1002;
+typedef struct _REPL_INFO_1003 { DWORD rp1003_random; } REPL_INFO_1003,*PREPL_INFO_1003,*LPREPL_INFO_1003;
+
+NET_API_STATUS WINAPI NetReplGetInfo(LPCWSTR,DWORD,PBYTE*);
+NET_API_STATUS WINAPI NetReplSetInfo(LPCWSTR,DWORD,PBYTE,PDWORD);
+typedef struct _REPL_EDIR_INFO_0 {
+ LPWSTR rped0_dirname;
+} REPL_EDIR_INFO_0,*PREPL_EDIR_INFO_0,*LPREPL_EDIR_INFO_0;
+typedef struct _REPL_EDIR_INFO_1 {
+ LPWSTR rped1_dirname;
+ DWORD rped1_integrity;
+ DWORD rped1_extent;
+} REPL_EDIR_INFO_1,*PREPL_EDIR_INFO_1,*LPREPL_EDIR_INFO_1;
+typedef struct _REPL_EDIR_INFO_2 {
+ LPWSTR rped2_dirname;
+ DWORD rped2_integrity;
+ DWORD rped2_extent;
+ DWORD rped2_lockcount;
+ DWORD rped2_locktime;
+} REPL_EDIR_INFO_2,*PREPL_EDIR_INFO_2,*LPREPL_EDIR_INFO_2;
+typedef struct _REPL_EDIR_INFO_1000 {
+ DWORD rped1000_integrity;
+} REPL_EDIR_INFO_1000,*PREPL_EDIR_INFO_1000,*LPREPL_EDIR_INFO_1000;
+typedef struct _REPL_EDIR_INFO_1001 {
+ DWORD rped1001_extent;
+} REPL_EDIR_INFO_1001,*PREPL_EDIR_INFO_1001,*LPREPL_EDIR_INFO_1001;
+typedef struct _REPL_IDIR_INFO_0 { LPWSTR rpid0_dirname; } REPL_IDIR_INFO_0,*PREPL_IDIR_INFO_0,*LPREPL_IDIR_INFO_0;
+typedef struct _REPL_IDIR_INFO_1 {
+ LPWSTR rpid1_dirname;
+ DWORD rpid1_state;
+ LPWSTR rpid1_mastername;
+ DWORD rpid1_last_update_time;
+ DWORD rpid1_lockcount;
+ DWORD rpid1_locktime;
+} REPL_IDIR_INFO_1,*PREPL_IDIR_INFO_1,*LPREPL_IDIR_INFO_1;
+NET_API_STATUS WINAPI NetReplExportDirAdd(LPCWSTR,DWORD,PBYTE,PDWORD);
+NET_API_STATUS WINAPI NetReplExportDirDel(LPCWSTR,LPCWSTR);
+NET_API_STATUS WINAPI NetReplExportDirEnum(LPCWSTR,DWORD,PBYTE*,DWORD,PDWORD,PDWORD,PDWORD);
+NET_API_STATUS WINAPI NetReplExportDirGetInfo(LPCWSTR,LPCWSTR,DWORD,PBYTE*);
+NET_API_STATUS WINAPI NetReplExportDirSetInfo(LPCWSTR,LPCWSTR,DWORD,PBYTE,PDWORD);
+NET_API_STATUS WINAPI NetReplExportDirLock(LPCWSTR,LPCWSTR);
+NET_API_STATUS WINAPI NetReplExportDirUnlock(LPCWSTR,LPCWSTR,DWORD);
+NET_API_STATUS WINAPI NetReplImportDirAdd(LPCWSTR,DWORD,PBYTE,PDWORD);
+NET_API_STATUS WINAPI NetReplImportDirDel(LPCWSTR,LPCWSTR);
+NET_API_STATUS WINAPI NetReplImportDirEnum(LPCWSTR,DWORD,PBYTE*,DWORD,PDWORD,PDWORD,PDWORD);
+NET_API_STATUS WINAPI NetReplImportDirGetInfo(LPCWSTR,LPCWSTR,DWORD,PBYTE*);
+NET_API_STATUS WINAPI NetReplImportDirLock(LPCWSTR,LPCWSTR);
+NET_API_STATUS WINAPI NetReplImportDirUnlock(LPCWSTR,LPCWSTR,DWORD);
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/lmserver.h b/tcc/include/winapi/lmserver.h
new file mode 100644
index 0000000..7119714
--- /dev/null
+++ b/tcc/include/winapi/lmserver.h
@@ -0,0 +1,606 @@
+#ifndef _LMSERVER_H
+#define _LMSERVER_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#include <winsvc.h>
+#include <lmcons.h>
+typedef struct _SERVER_INFO_100 {
+DWORD sv100_platform_id;
+LPWSTR sv100_name;
+} SERVER_INFO_100,*PSERVER_INFO_100,*LPSERVER_INFO_100;
+typedef struct _SERVER_INFO_101 {
+DWORD sv101_platform_id;
+LPWSTR sv101_name;
+DWORD sv101_version_major;
+DWORD sv101_version_minor;
+DWORD sv101_type;
+LPWSTR sv101_comment;
+} SERVER_INFO_101,*PSERVER_INFO_101,*LPSERVER_INFO_101;
+typedef struct _SERVER_INFO_102 {
+DWORD sv102_platform_id;
+LPWSTR sv102_name;
+DWORD sv102_version_major;
+DWORD sv102_version_minor;
+DWORD sv102_type;
+LPWSTR sv102_comment;
+DWORD sv102_users;
+LONG sv102_disc;
+BOOL sv102_hidden;
+DWORD sv102_announce;
+DWORD sv102_anndelta;
+DWORD sv102_licenses;
+LPWSTR sv102_userpath;
+} SERVER_INFO_102,*PSERVER_INFO_102,*LPSERVER_INFO_102;
+typedef struct _SERVER_INFO_402 {
+DWORD sv402_ulist_mtime;
+DWORD sv402_glist_mtime;
+DWORD sv402_alist_mtime;
+LPWSTR sv402_alerts;
+DWORD sv402_security;
+DWORD sv402_numadmin;
+DWORD sv402_lanmask;
+LPWSTR sv402_guestacct;
+DWORD 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;
+LPWSTR sv402_srvheuristics;
+} SERVER_INFO_402,*PSERVER_INFO_402,*LPSERVER_INFO_402;
+typedef struct _SERVER_INFO_403 {
+DWORD sv403_ulist_mtime;
+DWORD sv403_glist_mtime;
+DWORD sv403_alist_mtime;
+LPWSTR sv403_alerts;
+DWORD sv403_security;
+DWORD sv403_numadmin;
+DWORD sv403_lanmask;
+LPWSTR sv403_guestacct;
+DWORD 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;
+LPWSTR sv403_srvheuristics;
+DWORD sv403_auditedevents;
+DWORD sv403_autoprofile;
+LPWSTR sv403_autopath;
+} SERVER_INFO_403,*PSERVER_INFO_403,*LPSERVER_INFO_403;
+typedef struct _SERVER_INFO_502 {
+DWORD 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;
+BOOL sv502_enablesoftcompat;
+BOOL sv502_enableforcedlogoff;
+BOOL sv502_timesource;
+BOOL sv502_acceptdownlevelapis;
+BOOL sv502_lmannounce;
+} SERVER_INFO_502,*PSERVER_INFO_502,*LPSERVER_INFO_502;
+typedef struct _SERVER_INFO_503 {
+DWORD 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;
+BOOL sv503_enablesoftcompat;
+BOOL sv503_enableforcedlogoff;
+BOOL sv503_timesource;
+BOOL sv503_acceptdownlevelapis;
+BOOL sv503_lmannounce;
+LPWSTR sv503_domain;
+DWORD 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;
+BOOL sv503_enableoplocks;
+BOOL sv503_enableoplockforceclose;
+BOOL sv503_enablefcbopens;
+BOOL sv503_enableraw;
+BOOL sv503_enablesharednetdrives;
+DWORD sv503_minfreeconnections;
+DWORD sv503_maxfreeconnections;
+} SERVER_INFO_503,*PSERVER_INFO_503,*LPSERVER_INFO_503;
+typedef struct _SERVER_INFO_599 {
+DWORD 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;
+BOOL sv599_enablesoftcompat;
+BOOL sv599_enableforcedlogoff;
+BOOL sv599_timesource;
+BOOL sv599_acceptdownlevelapis;
+BOOL sv599_lmannounce;
+LPWSTR sv599_domain;
+DWORD 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;
+BOOL sv599_enableoplocks;
+BOOL sv599_enableoplockforceclose;
+BOOL sv599_enablefcbopens;
+BOOL sv599_enableraw;
+BOOL sv599_enablesharednetdrives;
+DWORD 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;
+} SERVER_INFO_599,*PSERVER_INFO_599,*LPSERVER_INFO_599;
+typedef struct _SERVER_INFO_598 {
+DWORD 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;
+BOOL sv598_restrictnullsessaccess;
+BOOL sv598_enablewfw311directipx;
+DWORD 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;
+BOOL sv598_sendsfrompreferredprocessor;
+} SERVER_INFO_598,*PSERVER_INFO_598,*LPSERVER_INFO_598;
+typedef struct _SERVER_INFO_1005 {LPWSTR sv1005_comment; } SERVER_INFO_1005,*PSERVER_INFO_1005,*LPSERVER_INFO_1005;
+typedef struct _SERVER_INFO_1107 { DWORD sv1107_users; } SERVER_INFO_1107,*PSERVER_INFO_1107,*LPSERVER_INFO_1107;
+typedef struct _SERVER_INFO_1010 { LONG sv1010_disc; } SERVER_INFO_1010,*PSERVER_INFO_1010,*LPSERVER_INFO_1010;
+typedef struct _SERVER_INFO_1016 { BOOL sv1016_hidden; } SERVER_INFO_1016,*PSERVER_INFO_1016,*LPSERVER_INFO_1016;
+typedef struct _SERVER_INFO_1017 { DWORD sv1017_announce; } SERVER_INFO_1017,*PSERVER_INFO_1017,*LPSERVER_INFO_1017;
+typedef struct _SERVER_INFO_1018 { DWORD sv1018_anndelta; } SERVER_INFO_1018,*PSERVER_INFO_1018,*LPSERVER_INFO_1018;
+typedef struct _SERVER_INFO_1501 { DWORD sv1501_sessopens; } SERVER_INFO_1501,*PSERVER_INFO_1501,*LPSERVER_INFO_1501;
+typedef struct _SERVER_INFO_1502 { DWORD sv1502_sessvcs; } SERVER_INFO_1502,*PSERVER_INFO_1502,*LPSERVER_INFO_1502;
+typedef struct _SERVER_INFO_1503 { DWORD sv1503_opensearch; } SERVER_INFO_1503,*PSERVER_INFO_1503,*LPSERVER_INFO_1503;
+typedef struct _SERVER_INFO_1506 { DWORD sv1506_maxworkitems; } SERVER_INFO_1506,*PSERVER_INFO_1506,*LPSERVER_INFO_1506;
+typedef struct _SERVER_INFO_1509 { DWORD sv1509_maxrawbuflen; } SERVER_INFO_1509,*PSERVER_INFO_1509,*LPSERVER_INFO_1509;
+typedef struct _SERVER_INFO_1510 { DWORD sv1510_sessusers; } SERVER_INFO_1510,*PSERVER_INFO_1510,*LPSERVER_INFO_1510;
+typedef struct _SERVER_INFO_1511 { DWORD sv1511_sessconns; } SERVER_INFO_1511,*PSERVER_INFO_1511,*LPSERVER_INFO_1511;
+typedef struct _SERVER_INFO_1512 { DWORD sv1512_maxnonpagedmemoryusage; } SERVER_INFO_1512,*PSERVER_INFO_1512,*LPSERVER_INFO_1512;
+typedef struct _SERVER_INFO_1513 { DWORD sv1513_maxpagedmemoryusage; } SERVER_INFO_1513,*PSERVER_INFO_1513,*LPSERVER_INFO_1513;
+typedef struct _SERVER_INFO_1514 { BOOL sv1514_enablesoftcompat; } SERVER_INFO_1514,*PSERVER_INFO_1514,*LPSERVER_INFO_1514;
+typedef struct _SERVER_INFO_1515 { BOOL sv1515_enableforcedlogoff; } SERVER_INFO_1515,*PSERVER_INFO_1515,*LPSERVER_INFO_1515;
+typedef struct _SERVER_INFO_1516 { BOOL sv1516_timesource; } SERVER_INFO_1516,*PSERVER_INFO_1516,*LPSERVER_INFO_1516;
+typedef struct _SERVER_INFO_1518 { BOOL sv1518_lmannounce; } SERVER_INFO_1518,*PSERVER_INFO_1518,*LPSERVER_INFO_1518;
+typedef struct _SERVER_INFO_1520 { DWORD sv1520_maxcopyreadlen; } SERVER_INFO_1520,*PSERVER_INFO_1520,*LPSERVER_INFO_1520;
+typedef struct _SERVER_INFO_1521 { DWORD sv1521_maxcopywritelen; } SERVER_INFO_1521,*PSERVER_INFO_1521,*LPSERVER_INFO_1521;
+typedef struct _SERVER_INFO_1522 { DWORD sv1522_minkeepsearch; } SERVER_INFO_1522,*PSERVER_INFO_1522,*LPSERVER_INFO_1522;
+typedef struct _SERVER_INFO_1523 { DWORD sv1523_maxkeepsearch; } SERVER_INFO_1523,*PSERVER_INFO_1523,*LPSERVER_INFO_1523;
+typedef struct _SERVER_INFO_1524 { DWORD sv1524_minkeepcomplsearch; } SERVER_INFO_1524,*PSERVER_INFO_1524,*LPSERVER_INFO_1524;
+typedef struct _SERVER_INFO_1525 { DWORD sv1525_maxkeepcomplsearch; } SERVER_INFO_1525,*PSERVER_INFO_1525,*LPSERVER_INFO_1525;
+typedef struct _SERVER_INFO_1528 { DWORD sv1528_scavtimeout; } SERVER_INFO_1528,*PSERVER_INFO_1528,*LPSERVER_INFO_1528;
+typedef struct _SERVER_INFO_1529 { DWORD sv1529_minrcvqueue; } SERVER_INFO_1529,*PSERVER_INFO_1529,*LPSERVER_INFO_1529;
+typedef struct _SERVER_INFO_1530 { DWORD sv1530_minfreeworkitems; } SERVER_INFO_1530,*PSERVER_INFO_1530,*LPSERVER_INFO_1530;
+typedef struct _SERVER_INFO_1533 { DWORD sv1533_maxmpxct; } SERVER_INFO_1533,*PSERVER_INFO_1533,*LPSERVER_INFO_1533;
+typedef struct _SERVER_INFO_1534 { DWORD sv1534_oplockbreakwait; } SERVER_INFO_1534,*PSERVER_INFO_1534,*LPSERVER_INFO_1534;
+typedef struct _SERVER_INFO_1535 { DWORD sv1535_oplockbreakresponsewait; } SERVER_INFO_1535,*PSERVER_INFO_1535,*LPSERVER_INFO_1535;
+typedef struct _SERVER_INFO_1536 { BOOL sv1536_enableoplocks; } SERVER_INFO_1536,*PSERVER_INFO_1536,*LPSERVER_INFO_1536;
+typedef struct _SERVER_INFO_1537 { BOOL sv1537_enableoplockforceclose; } SERVER_INFO_1537,*PSERVER_INFO_1537,*LPSERVER_INFO_1537;
+typedef struct _SERVER_INFO_1538 { BOOL sv1538_enablefcbopens; } SERVER_INFO_1538,*PSERVER_INFO_1538,*LPSERVER_INFO_1538;
+typedef struct _SERVER_INFO_1539 { BOOL sv1539_enableraw; } SERVER_INFO_1539,*PSERVER_INFO_1539,*LPSERVER_INFO_1539;
+typedef struct _SERVER_INFO_1540 { BOOL sv1540_enablesharednetdrives; } SERVER_INFO_1540,*PSERVER_INFO_1540,*LPSERVER_INFO_1540;
+typedef struct _SERVER_INFO_1541 { BOOL sv1541_minfreeconnections; } SERVER_INFO_1541,*PSERVER_INFO_1541,*LPSERVER_INFO_1541;
+typedef struct _SERVER_INFO_1542 { BOOL sv1542_maxfreeconnections; } SERVER_INFO_1542,*PSERVER_INFO_1542,*LPSERVER_INFO_1542;
+typedef struct _SERVER_INFO_1543 { DWORD sv1543_initsesstable; } SERVER_INFO_1543,*PSERVER_INFO_1543,*LPSERVER_INFO_1543;
+typedef struct _SERVER_INFO_1544 { DWORD sv1544_initconntable; } SERVER_INFO_1544,*PSERVER_INFO_1544,*LPSERVER_INFO_1544;
+typedef struct _SERVER_INFO_1545 { DWORD sv1545_initfiletable; } SERVER_INFO_1545,*PSERVER_INFO_1545,*LPSERVER_INFO_1545;
+typedef struct _SERVER_INFO_1546 { DWORD sv1546_initsearchtable; } SERVER_INFO_1546,*PSERVER_INFO_1546,*LPSERVER_INFO_1546;
+typedef struct _SERVER_INFO_1547 { DWORD sv1547_alertschedule; } SERVER_INFO_1547,*PSERVER_INFO_1547,*LPSERVER_INFO_1547;
+typedef struct _SERVER_INFO_1548 { DWORD sv1548_errorthreshold; } SERVER_INFO_1548,*PSERVER_INFO_1548,*LPSERVER_INFO_1548;
+typedef struct _SERVER_INFO_1549 { DWORD sv1549_networkerrorthreshold; } SERVER_INFO_1549,*PSERVER_INFO_1549,*LPSERVER_INFO_1549;
+typedef struct _SERVER_INFO_1550 { DWORD sv1550_diskspacethreshold; } SERVER_INFO_1550,*PSERVER_INFO_1550,*LPSERVER_INFO_1550;
+typedef struct _SERVER_INFO_1552 { DWORD sv1552_maxlinkdelay; } SERVER_INFO_1552,*PSERVER_INFO_1552,*LPSERVER_INFO_1552;
+typedef struct _SERVER_INFO_1553 { DWORD sv1553_minlinkthroughput; } SERVER_INFO_1553,*PSERVER_INFO_1553,*LPSERVER_INFO_1553;
+typedef struct _SERVER_INFO_1554 { DWORD sv1554_linkinfovalidtime; } SERVER_INFO_1554,*PSERVER_INFO_1554,*LPSERVER_INFO_1554;
+typedef struct _SERVER_INFO_1555 { DWORD sv1555_scavqosinfoupdatetime; } SERVER_INFO_1555,*PSERVER_INFO_1555,*LPSERVER_INFO_1555;
+typedef struct _SERVER_INFO_1556 { DWORD sv1556_maxworkitemidletime; } SERVER_INFO_1556,*PSERVER_INFO_1556,*LPSERVER_INFO_1556;
+typedef struct _SERVER_INFO_1557 { DWORD sv1557_maxrawworkitems; } SERVER_INFO_1557,*PSERVER_INFO_1557,*LPSERVER_INFO_1557;
+typedef struct _SERVER_INFO_1560 { DWORD sv1560_producttype; } SERVER_INFO_1560,*PSERVER_INFO_1560,*LPSERVER_INFO_1560;
+typedef struct _SERVER_INFO_1561 { DWORD sv1561_serversize; } SERVER_INFO_1561,*PSERVER_INFO_1561,*LPSERVER_INFO_1561;
+typedef struct _SERVER_INFO_1562 { DWORD sv1562_connectionlessautodisc; } SERVER_INFO_1562,*PSERVER_INFO_1562,*LPSERVER_INFO_1562;
+typedef struct _SERVER_INFO_1563 { DWORD sv1563_sharingviolationretries; } SERVER_INFO_1563,*PSERVER_INFO_1563,*LPSERVER_INFO_1563;
+typedef struct _SERVER_INFO_1564 { DWORD sv1564_sharingviolationdelay; } SERVER_INFO_1564,*PSERVER_INFO_1564,*LPSERVER_INFO_1564;
+typedef struct _SERVER_INFO_1565 { DWORD sv1565_maxglobalopensearch; } SERVER_INFO_1565,*PSERVER_INFO_1565,*LPSERVER_INFO_1565;
+typedef struct _SERVER_INFO_1566 { BOOL sv1566_removeduplicatesearches; } SERVER_INFO_1566,*PSERVER_INFO_1566,*LPSERVER_INFO_1566;
+typedef struct _SERVER_INFO_1567 { DWORD sv1567_lockviolationretries; } SERVER_INFO_1567,*PSERVER_INFO_1567,*LPSERVER_INFO_1567;
+typedef struct _SERVER_INFO_1568 { DWORD sv1568_lockviolationoffset; } SERVER_INFO_1568,*PSERVER_INFO_1568,*LPSERVER_INFO_1568;
+typedef struct _SERVER_INFO_1569 { DWORD sv1569_lockviolationdelay; } SERVER_INFO_1569,*PSERVER_INFO_1569,*LPSERVER_INFO_1569;
+typedef struct _SERVER_INFO_1570 { DWORD sv1570_mdlreadswitchover; } SERVER_INFO_1570,*PSERVER_INFO_1570,*LPSERVER_INFO_1570;
+typedef struct _SERVER_INFO_1571 { DWORD sv1571_cachedopenlimit; } SERVER_INFO_1571,*PSERVER_INFO_1571,*LPSERVER_INFO_1571;
+typedef struct _SERVER_INFO_1572 { DWORD sv1572_criticalthreads; } SERVER_INFO_1572,*PSERVER_INFO_1572,*LPSERVER_INFO_1572;
+typedef struct _SERVER_INFO_1573 { DWORD sv1573_restrictnullsessaccess; } SERVER_INFO_1573,*PSERVER_INFO_1573,*LPSERVER_INFO_1573;
+typedef struct _SERVER_INFO_1574 { DWORD sv1574_enablewfw311directipx;} SERVER_INFO_1574,*PSERVER_INFO_1574,*LPSERVER_INFO_1574;
+typedef struct _SERVER_INFO_1575 { DWORD sv1575_otherqueueaffinity; } SERVER_INFO_1575,*PSERVER_INFO_1575,*LPSERVER_INFO_1575;
+typedef struct _SERVER_INFO_1576 { DWORD sv1576_queuesamplesecs; } SERVER_INFO_1576,*PSERVER_INFO_1576,*LPSERVER_INFO_1576;
+typedef struct _SERVER_INFO_1577 { DWORD sv1577_balancecount; } SERVER_INFO_1577,*PSERVER_INFO_1577,*LPSERVER_INFO_1577;
+typedef struct _SERVER_INFO_1578 { DWORD sv1578_preferredaffinity; } SERVER_INFO_1578,*PSERVER_INFO_1578,*LPSERVER_INFO_1578;
+typedef struct _SERVER_INFO_1579 { DWORD sv1579_maxfreerfcbs; } SERVER_INFO_1579,*PSERVER_INFO_1579,*LPSERVER_INFO_1579;
+typedef struct _SERVER_INFO_1580 { DWORD sv1580_maxfreemfcbs; } SERVER_INFO_1580,*PSERVER_INFO_1580,*LPSERVER_INFO_1580;
+typedef struct _SERVER_INFO_1581 { DWORD sv1581_maxfreemlcbs; } SERVER_INFO_1581,*PSERVER_INFO_1581,*LPSERVER_INFO_1581;
+typedef struct _SERVER_INFO_1582 { DWORD sv1582_maxfreepagedpoolchunks; } SERVER_INFO_1582,*PSERVER_INFO_1582,*LPSERVER_INFO_1582;
+typedef struct _SERVER_INFO_1583 { DWORD sv1583_minpagedpoolchunksize; } SERVER_INFO_1583,*PSERVER_INFO_1583,*LPSERVER_INFO_1583;
+typedef struct _SERVER_INFO_1584 { DWORD sv1584_maxpagedpoolchunksize; } SERVER_INFO_1584,*PSERVER_INFO_1584,*LPSERVER_INFO_1584;
+typedef struct _SERVER_INFO_1585 { BOOL sv1585_sendsfrompreferredprocessor; } SERVER_INFO_1585,*PSERVER_INFO_1585,*LPSERVER_INFO_1585;
+typedef struct _SERVER_INFO_1586 { BOOL sv1586_maxthreadsperqueue; } SERVER_INFO_1586,*PSERVER_INFO_1586,*LPSERVER_INFO_1586;
+typedef struct _SERVER_TRANSPORT_INFO_0 {
+DWORD svti0_numberofvcs;
+LPWSTR svti0_transportname;
+PBYTE svti0_transportaddress;
+DWORD svti0_transportaddresslength;
+LPWSTR svti0_networkaddress;
+} SERVER_TRANSPORT_INFO_0,*PSERVER_TRANSPORT_INFO_0,*LPSERVER_TRANSPORT_INFO_0;
+
+NET_API_STATUS WINAPI NetServerEnum(LPCWSTR,DWORD,PBYTE*,DWORD,PDWORD,PDWORD,DWORD,LPCWSTR,PDWORD);
+NET_API_STATUS WINAPI NetServerEnumEx(LPCWSTR,DWORD,PBYTE*,DWORD,PDWORD,PDWORD,DWORD,LPCWSTR,LPCWSTR);
+NET_API_STATUS WINAPI NetServerGetInfo(LPWSTR,DWORD,PBYTE*);
+NET_API_STATUS WINAPI NetServerSetInfo(LPWSTR,DWORD,PBYTE,PDWORD);
+NET_API_STATUS NetServerSetInfoCommandLine(WORD,LPWSTR*);
+NET_API_STATUS WINAPI NetServerDiskEnum(LPWSTR,DWORD,PBYTE*,DWORD,PDWORD,PDWORD,PDWORD);
+NET_API_STATUS WINAPI NetServerComputerNameAdd(LPWSTR,LPWSTR,LPWSTR);
+NET_API_STATUS WINAPI NetServerComputerNameDel(LPWSTR,LPWSTR);
+NET_API_STATUS WINAPI NetServerTransportAdd(LPWSTR,DWORD,PBYTE);
+NET_API_STATUS WINAPI NetServerTransportAddEx(LPWSTR,DWORD,PBYTE);
+NET_API_STATUS WINAPI NetServerTransportDel(LPWSTR,DWORD,PBYTE);
+NET_API_STATUS WINAPI NetServerTransportEnum(LPWSTR,DWORD,PBYTE*,DWORD,PDWORD,PDWORD,PDWORD);
+BOOL SetServiceBits(SERVICE_STATUS_HANDLE,DWORD,BOOL,BOOL);
+
+#define SVI1_NUM_ELEMENTS 5
+#define SVI2_NUM_ELEMENTS 40
+#define SVI3_NUM_ELEMENTS 44
+#define SV_MAX_CMD_LEN PATHLEN
+#define SW_AUTOPROF_LOAD_MASK 1
+#define SW_AUTOPROF_SAVE_MASK 2
+#define SV_MAX_SRV_HEUR_LEN 32
+#define SV_USERS_PER_LICENSE 5
+#define SV_PLATFORM_ID_OS2 400
+#define SV_PLATFORM_ID_NT 500
+#define MAJOR_VERSION_MASK 15
+#define SV_TYPE_WORKSTATION 1
+#define SV_TYPE_SERVER 2
+#define SV_TYPE_SQLSERVER 4
+#define SV_TYPE_DOMAIN_CTRL 8
+#define SV_TYPE_DOMAIN_BAKCTRL 16
+#define SV_TYPE_TIME_SOURCE 32
+#define SV_TYPE_AFP 64
+#define SV_TYPE_NOVELL 128
+#define SV_TYPE_DOMAIN_MEMBER 256
+#define SV_TYPE_PRINTQ_SERVER 512
+#define SV_TYPE_DIALIN_SERVER 1024
+#define SV_TYPE_XENIX_SERVER 2048
+#define SV_TYPE_SERVER_UNIX SV_TYPE_XENIX_SERVER
+#define SV_TYPE_NT 4096
+#define SV_TYPE_WFW 8192
+#define SV_TYPE_SERVER_MFPN 16384
+#define SV_TYPE_SERVER_NT 32768
+#define SV_TYPE_POTENTIAL_BROWSER 65536
+#define SV_TYPE_BACKUP_BROWSER 0x20000
+#define SV_TYPE_MASTER_BROWSER 0x40000
+#define SV_TYPE_DOMAIN_MASTER 0x80000
+#define SV_TYPE_SERVER_OSF 0x100000
+#define SV_TYPE_SERVER_VMS 0x200000
+#define SV_TYPE_WINDOWS 0x400000
+#define SV_TYPE_ALTERNATE_XPORT 0x20000000
+#define SV_TYPE_LOCAL_LIST_ONLY 0x40000000
+#define SV_TYPE_DOMAIN_ENUM 0x80000000
+#define SV_TYPE_ALL 0xFFFFFFFF
+#define SV_NODISC (-1)
+#define SV_USERSECURITY 1
+#define SV_SHARESECURITY 0
+#define SV_HIDDEN 1
+#define SV_VISIBLE 0
+#define SV_PLATFORM_ID_PARMNUM 101
+#define SV_NAME_PARMNUM 102
+#define SV_VERSION_MAJOR_PARMNUM 103
+#define SV_VERSION_MINOR_PARMNUM 104
+#define SV_TYPE_PARMNUM 105
+#define SV_COMMENT_PARMNUM 5
+#define SV_USERS_PARMNUM 107
+#define SV_DISC_PARMNUM 10
+#define SV_HIDDEN_PARMNUM 16
+#define SV_ANNOUNCE_PARMNUM 17
+#define SV_ANNDELTA_PARMNUM 18
+#define SV_USERPATH_PARMNUM 112
+#define SV_ULIST_MTIME_PARMNUM 401
+#define SV_GLIST_MTIME_PARMNUM 402
+#define SV_ALIST_MTIME_PARMNUM 403
+#define SV_ALERTS_PARMNUM 11
+#define SV_SECURITY_PARMNUM 405
+#define SV_NUMADMIN_PARMNUM 406
+#define SV_LANMASK_PARMNUM 407
+#define SV_GUESTACC_PARMNUM 408
+#define SV_CHDEVQ_PARMNUM 410
+#define SV_CHDEVJOBS_PARMNUM 411
+#define SV_CONNECTIONS_PARMNUM 412
+#define SV_SHARES_PARMNUM 413
+#define SV_OPENFILES_PARMNUM 414
+#define SV_SESSREQS_PARMNUM 417
+#define SV_ACTIVELOCKS_PARMNUM 419
+#define SV_NUMREQBUF_PARMNUM 420
+#define SV_NUMBIGBUF_PARMNUM 422
+#define SV_NUMFILETASKS_PARMNUM 423
+#define SV_ALERTSCHED_PARMNUM 37
+#define SV_ERRORALERT_PARMNUM 38
+#define SV_LOGONALERT_PARMNUM 39
+#define SV_ACCESSALERT_PARMNUM 40
+#define SV_DISKALERT_PARMNUM 41
+#define SV_NETIOALERT_PARMNUM 42
+#define SV_MAXAUDITSZ_PARMNUM 43
+#define SV_SRVHEURISTICS_PARMNUM 431
+#define SV_SESSOPENS_PARMNUM 501
+#define SV_SESSVCS_PARMNUM 502
+#define SV_OPENSEARCH_PARMNUM 503
+#define SV_SIZREQBUF_PARMNUM 504
+#define SV_INITWORKITEMS_PARMNUM 505
+#define SV_MAXWORKITEMS_PARMNUM 506
+#define SV_RAWWORKITEMS_PARMNUM 507
+#define SV_IRPSTACKSIZE_PARMNUM 508
+#define SV_MAXRAWBUFLEN_PARMNUM 509
+#define SV_SESSUSERS_PARMNUM 510
+#define SV_SESSCONNS_PARMNUM 511
+#define SV_MAXNONPAGEDMEMORYUSAGE_PARMNUM 512
+#define SV_MAXPAGEDMEMORYUSAGE_PARMNUM 513
+#define SV_ENABLESOFTCOMPAT_PARMNUM 514
+#define SV_ENABLEFORCEDLOGOFF_PARMNUM 515
+#define SV_TIMESOURCE_PARMNUM 516
+#define SV_ACCEPTDOWNLEVELAPIS_PARMNUM 517
+#define SV_LMANNOUNCE_PARMNUM 518
+#define SV_DOMAIN_PARMNUM 519
+#define SV_MAXCOPYREADLEN_PARMNUM 520
+#define SV_MAXCOPYWRITELEN_PARMNUM 521
+#define SV_MINKEEPSEARCH_PARMNUM 522
+#define SV_MAXKEEPSEARCH_PARMNUM 523
+#define SV_MINKEEPCOMPLSEARCH_PARMNUM 524
+#define SV_MAXKEEPCOMPLSEARCH_PARMNUM 525
+#define SV_THREADCOUNTADD_PARMNUM 526
+#define SV_NUMBLOCKTHREADS_PARMNUM 527
+#define SV_SCAVTIMEOUT_PARMNUM 528
+#define SV_MINRCVQUEUE_PARMNUM 529
+#define SV_MINFREEWORKITEMS_PARMNUM 530
+#define SV_XACTMEMSIZE_PARMNUM 531
+#define SV_THREADPRIORITY_PARMNUM 532
+#define SV_MAXMPXCT_PARMNUM 533
+#define SV_OPLOCKBREAKWAIT_PARMNUM 534
+#define SV_OPLOCKBREAKRESPONSEWAIT_PARMNUM 535
+#define SV_ENABLEOPLOCKS_PARMNUM 536
+#define SV_ENABLEOPLOCKFORCECLOSE_PARMNUM 537
+#define SV_ENABLEFCBOPENS_PARMNUM 538
+#define SV_ENABLERAW_PARMNUM 539
+#define SV_ENABLESHAREDNETDRIVES_PARMNUM 540
+#define SV_MINFREECONNECTIONS_PARMNUM 541
+#define SV_MAXFREECONNECTIONS_PARMNUM 542
+#define SV_INITSESSTABLE_PARMNUM 543
+#define SV_INITCONNTABLE_PARMNUM 544
+#define SV_INITFILETABLE_PARMNUM 545
+#define SV_INITSEARCHTABLE_PARMNUM 546
+#define SV_ALERTSCHEDULE_PARMNUM 547
+#define SV_ERRORTHRESHOLD_PARMNUM 548
+#define SV_NETWORKERRORTHRESHOLD_PARMNUM 549
+#define SV_DISKSPACETHRESHOLD_PARMNUM 550
+#define SV_MAXLINKDELAY_PARMNUM 552
+#define SV_MINLINKTHROUGHPUT_PARMNUM 553
+#define SV_LINKINFOVALIDTIME_PARMNUM 554
+#define SV_SCAVQOSINFOUPDATETIME_PARMNUM 555
+#define SV_MAXWORKITEMIDLETIME_PARMNUM 556
+#define SV_MAXRAWWORKITEMS_PARMNUM 557
+#define SV_PRODUCTTYPE_PARMNUM 560
+#define SV_SERVERSIZE_PARMNUM 561
+#define SV_CONNECTIONLESSAUTODISC_PARMNUM 562
+#define SV_SHARINGVIOLATIONRETRIES_PARMNUM 563
+#define SV_SHARINGVIOLATIONDELAY_PARMNUM 564
+#define SV_MAXGLOBALOPENSEARCH_PARMNUM 565
+#define SV_REMOVEDUPLICATESEARCHES_PARMNUM 566
+#define SV_LOCKVIOLATIONRETRIES_PARMNUM 567
+#define SV_LOCKVIOLATIONOFFSET_PARMNUM 568
+#define SV_LOCKVIOLATIONDELAY_PARMNUM 569
+#define SV_MDLREADSWITCHOVER_PARMNUM 570
+#define SV_CACHEDOPENLIMIT_PARMNUM 571
+#define SV_CRITICALTHREADS_PARMNUM 572
+#define SV_RESTRICTNULLSESSACCESS_PARMNUM 573
+#define SV_ENABLEWFW311DIRECTIPX_PARMNUM 574
+#define SV_OTHERQUEUEAFFINITY_PARMNUM 575
+#define SV_QUEUESAMPLESECS_PARMNUM 576
+#define SV_BALANCECOUNT_PARMNUM 577
+#define SV_PREFERREDAFFINITY_PARMNUM 578
+#define SV_MAXFREERFCBS_PARMNUM 579
+#define SV_MAXFREEMFCBS_PARMNUM 580
+#define SV_MAXFREELFCBS_PARMNUM 581
+#define SV_MAXFREEPAGEDPOOLCHUNKS_PARMNUM 582
+#define SV_MINPAGEDPOOLCHUNKSIZE_PARMNUM 583
+#define SV_MAXPAGEDPOOLCHUNKSIZE_PARMNUM 584
+#define SV_SENDSFROMPREFERREDPROCESSOR_PARMNUM 585
+#define SV_MAXTHREADSPERQUEUE_PARMNUM 586
+#define SV_COMMENT_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_COMMENT_PARMNUM)
+#define SV_USERS_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_USERS_PARMNUM)
+#define SV_DISC_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_DISC_PARMNUM)
+#define SV_HIDDEN_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_HIDDEN_PARMNUM)
+#define SV_ANNOUNCE_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_ANNOUNCE_PARMNUM)
+#define SV_ANNDELTA_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_ANNDELTA_PARMNUM)
+#define SV_SESSOPENS_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_SESSOPENS_PARMNUM)
+#define SV_SESSVCS_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_SESSVCS_PARMNUM)
+#define SV_OPENSEARCH_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_OPENSEARCH_PARMNUM)
+#define SV_MAXWORKITEMS_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_MAXWORKITEMS_PARMNUM)
+#define SV_MAXRAWBUFLEN_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_MAXRAWBUFLEN_PARMNUM)
+#define SV_SESSUSERS_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_SESSUSERS_PARMNUM)
+#define SV_SESSCONNS_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_SESSCONNS_PARMNUM)
+#define SV_MAXNONPAGEDMEMORYUSAGE_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_MAXNONPAGEDMEMORYUSAGE_PARMNUM)
+#define SV_MAXPAGEDMEMORYUSAGE_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_MAXPAGEDMEMORYUSAGE_PARMNUM)
+#define SV_ENABLESOFTCOMPAT_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_ENABLESOFTCOMPAT_PARMNUM)
+#define SV_ENABLEFORCEDLOGOFF_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_ENABLEFORCEDLOGOFF_PARMNUM)
+#define SV_TIMESOURCE_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_TIMESOURCE_PARMNUM)
+#define SV_LMANNOUNCE_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_LMANNOUNCE_PARMNUM)
+#define SV_MAXCOPYREADLEN_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_MAXCOPYREADLEN_PARMNUM)
+#define SV_MAXCOPYWRITELEN_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_MAXCOPYWRITELEN_PARMNUM)
+#define SV_MINKEEPSEARCH_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_MINKEEPSEARCH_PARMNUM)
+#define SV_MAXKEEPSEARCH_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_MAXKEEPSEARCH_PARMNUM)
+#define SV_MINKEEPCOMPLSEARCH_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_MINKEEPCOMPLSEARCH_PARMNUM)
+#define SV_MAXKEEPCOMPLSEARCH_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_MAXKEEPCOMPLSEARCH_PARMNUM)
+#define SV_SCAVTIMEOUT_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_SCAVTIMEOUT_PARMNUM)
+#define SV_MINRCVQUEUE_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_MINRCVQUEUE_PARMNUM)
+#define SV_MINFREEWORKITEMS_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_MINFREEWORKITEMS_PARMNUM)
+#define SV_MAXMPXCT_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_MAXMPXCT_PARMNUM)
+#define SV_OPLOCKBREAKWAIT_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_OPLOCKBREAKWAIT_PARMNUM)
+#define SV_OPLOCKBREAKRESPONSEWAIT_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_OPLOCKBREAKRESPONSEWAIT_PARMNUM)
+#define SV_ENABLEOPLOCKS_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_ENABLEOPLOCKS_PARMNUM)
+#define SV_ENABLEOPLOCKFORCECLOSE_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_ENABLEOPLOCKFORCECLOSE_PARMNUM)
+#define SV_ENABLEFCBOPENS_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_ENABLEFCBOPENS_PARMNUM)
+#define SV_ENABLERAW_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_ENABLERAW_PARMNUM)
+#define SV_ENABLESHAREDNETDRIVES_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_ENABLESHAREDNETDRIVES_PARMNUM)
+#define SV_MINFREECONNECTIONS_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_MINFREECONNECTIONS_PARMNUM)
+#define SV_MAXFREECONNECTIONS_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_MAXFREECONNECTIONS_PARMNUM)
+#define SV_INITSESSTABLE_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_INITSESSTABLE_PARMNUM)
+#define SV_INITCONNTABLE_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_INITCONNTABLE_PARMNUM)
+#define SV_INITFILETABLE_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_INITFILETABLE_PARMNUM)
+#define SV_INITSEARCHTABLE_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_INITSEARCHTABLE_PARMNUM)
+#define SV_ALERTSCHEDULE_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_ALERTSCHEDULE_PARMNUM)
+#define SV_ERRORTHRESHOLD_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_ERRORTHRESHOLD_PARMNUM)
+#define SV_NETWORKERRORTHRESHOLD_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_NETWORKERRORTHRESHOLD_PARMNUM)
+#define SV_DISKSPACETHRESHOLD_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_DISKSPACETHRESHOLD_PARMNUM)
+#define SV_MAXLINKDELAY_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_MAXLINKDELAY_PARMNUM)
+#define SV_MINLINKTHROUGHPUT_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_MINLINKTHROUGHPUT_PARMNUM)
+#define SV_LINKINFOVALIDTIME_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_LINKINFOVALIDTIME_PARMNUM)
+#define SV_SCAVQOSINFOUPDATETIME_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_SCAVQOSINFOUPDATETIME_PARMNUM)
+#define SV_MAXWORKITEMIDLETIME_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_MAXWORKITEMIDLETIME_PARMNUM)
+#define SV_MAXRAWWORKITEMS_INFOLOEVEL (PARMNUM_BASE_INFOLEVEL+SV_MAXRAWWORKITEMS_PARMNUM)
+#define SV_PRODUCTTYPE_INFOLOEVEL (PARMNUM_BASE_INFOLEVEL+SV_PRODUCTTYPE_PARMNUM)
+#define SV_SERVERSIZE_INFOLOEVEL (PARMNUM_BASE_INFOLEVEL+SV_SERVERSIZE_PARMNUM)
+#define SV_CONNECTIONLESSAUTODISC_INFOLOEVEL (PARMNUM_BASE_INFOLEVEL+SV_CONNECTIONLESSAUTODISC_PARMNUM)
+#define SV_SHARINGVIOLATIONRETRIES_INFOLOEVEL (PARMNUM_BASE_INFOLEVEL+SV_SHARINGVIOLATIONRETRIES_PARMNUM)
+#define SV_SHARINGVIOLATIONDELAY_INFOLOEVEL (PARMNUM_BASE_INFOLEVEL+SV_SHARINGVIOLATIONDELAY_PARMNUM)
+#define SV_MAXGLOBALOPENSEARCH_INFOLOEVEL (PARMNUM_BASE_INFOLEVEL+SV_MAXGLOBALOPENSEARCH_PARMNUM)
+#define SV_REMOVEDUPLICATESEARCHES_INFOLOEVEL (PARMNUM_BASE_INFOLEVEL+SV_REMOVEDUPLICATESEARCHES_PARMNUM)
+#define SV_LOCKVIOLATIONRETRIES_INFOLOEVEL (PARMNUM_BASE_INFOLEVEL+SV_LOCKVIOLATIONRETRIES_PARMNUM)
+#define SV_LOCKVIOLATIONOFFSET_INFOLOEVEL (PARMNUM_BASE_INFOLEVEL+SV_LOCKVIOLATIONOFFSET_PARMNUM)
+#define SV_LOCKVIOLATIONDELAY_INFOLOEVEL (PARMNUM_BASE_INFOLEVEL+SV_LOCKVIOLATIONDELAY_PARMNUM)
+#define SV_MDLREADSWITCHOVER_INFOLOEVEL (PARMNUM_BASE_INFOLEVEL+SV_MDLREADSWITCHOVER_PARMNUM)
+#define SV_CACHEDOPENLIMIT_INFOLOEVEL (PARMNUM_BASE_INFOLEVEL+SV_CACHEDOPENLIMIT_PARMNUM)
+#define SV_CRITICALTHREADS_INFOLOEVEL (PARMNUM_BASE_INFOLEVEL+SV_CRITICALTHREADS_PARMNUM)
+#define SV_RESTRICTNULLSESSACCESS_INFOLOEVEL (PARMNUM_BASE_INFOLEVEL+SV_RESTRICTNULLSESSACCESS_PARMNUM)
+#define SV_ENABLEWFW311DIRECTIPX_INFOLOEVEL (PARMNUM_BASE_INFOLEVEL+SV_ENABLEWFW311DIRECTIPX_PARMNUM)
+#define SV_OTHERQUEUEAFFINITY_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_OTHERQUEUEAFFINITY_PARMNUM)
+#define SV_QUEUESAMPLESECS_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_QUEUESAMPLESECS_PARMNUM)
+#define SV_BALANCECOUNT_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_BALANCECOUNT_PARMNUM)
+#define SV_PREFERREDAFFINITY_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_PREFERREDAFFINITY_PARMNUM)
+#define SV_MAXFREERFCBS_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_MAXFREERFCBS_PARMNUM)
+#define SV_MAXFREEMFCBS_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_MAXFREEMFCBS_PARMNUM)
+#define SV_MAXFREELFCBS_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_MAXFREELFCBS_PARMNUM)
+#define SV_MAXFREEPAGEDPOOLCHUNKS_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_MAXFREEPAGEDPOOLCHUNKS_PARMNUM)
+#define SV_MINPAGEDPOOLCHUNKSIZE_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_MINPAGEDPOOLCHUNKSIZE_PARMNUM)
+#define SV_MAXPAGEDPOOLCHUNKSIZE_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_MAXPAGEDPOOLCHUNKSIZE_PARMNUM)
+#define SV_SENDSFROMPREFERREDPROCESSOR_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_SENDSFROMPREFERREDPROCESSOR_PARMNUM)
+#define SV_MAXTHREADSPERQUEUE_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SV_MAXTHREADSPERQUEUE_PARMNUM)
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/lmshare.h b/tcc/include/winapi/lmshare.h
new file mode 100644
index 0000000..07fe927
--- /dev/null
+++ b/tcc/include/winapi/lmshare.h
@@ -0,0 +1,147 @@
+#ifndef _LMSHARE_H
+#define _LMSHARE_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#include <lmcons.h>
+#define SHARE_NETNAME_PARMNUM 1
+#define SHARE_TYPE_PARMNUM 3
+#define SHARE_REMARK_PARMNUM 4
+#define SHARE_PERMISSIONS_PARMNUM 5
+#define SHARE_MAX_USES_PARMNUM 6
+#define SHARE_CURRENT_USES_PARMNUM 7
+#define SHARE_PATH_PARMNUM 8
+#define SHARE_PASSWD_PARMNUM 9
+#define SHARE_FILE_SD_PARMNUM 501
+#define SHARE_REMARK_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SHARE_REMARK_PARMNUM)
+#define SHARE_MAX_USES_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SHARE_MAX_USES_PARMNUM)
+#define SHARE_FILE_SD_INFOLEVEL (PARMNUM_BASE_INFOLEVEL+SHARE_FILE_SD_PARMNUM)
+#define SHI1_NUM_ELEMENTS 4
+#define SHI2_NUM_ELEMENTS 10
+#define STYPE_DISKTREE 0
+#define STYPE_PRINTQ 1
+#define STYPE_DEVICE 2
+#define STYPE_IPC 3
+#define STYPE_DFS 100
+#define STYPE_SPECIAL 0x80000000
+#define SHI_USES_UNLIMITED (DWORD)(-1)
+#define SESS_GUEST 1
+#define SESS_NOENCRYPTION 2
+#define SESI1_NUM_ELEMENTS 8
+#define SESI2_NUM_ELEMENTS 9
+#define PERM_FILE_READ 1
+#define PERM_FILE_WRITE 2
+#define PERM_FILE_CREATE 4
+typedef struct _FILE_INFO_2 { DWORD fi2_id;} FILE_INFO_2,*PFILE_INFO_2,*LPFILE_INFO_2;
+typedef struct _FILE_INFO_3 {
+ DWORD fi3_id;
+ DWORD fi3_permissions;
+ DWORD fi3_num_locks;
+ LPTSTR fi3_pathname;
+ LPTSTR fi3_username;
+} FILE_INFO_3,*PFILE_INFO_3,*LPFILE_INFO_3;
+typedef struct _SHARE_INFO_0 { LPTSTR shi0_netname; } SHARE_INFO_0,*PSHARE_INFO_0,*LPSHARE_INFO_0;
+typedef struct _SHARE_INFO_1 {
+ LPTSTR shi1_netname;
+ DWORD shi1_type;
+ LPTSTR shi1_remark;
+} SHARE_INFO_1,*PSHARE_INFO_1,*LPSHARE_INFO_1;
+typedef struct _SHARE_INFO_2 {
+ LPTSTR shi2_netname;
+ DWORD shi2_type;
+ LPTSTR shi2_remark;
+ DWORD shi2_permissions;
+ DWORD shi2_max_uses;
+ DWORD shi2_current_uses;
+ LPTSTR shi2_path;
+ LPTSTR shi2_passwd;
+} SHARE_INFO_2,*PSHARE_INFO_2,*LPSHARE_INFO_2;
+typedef struct _SHARE_INFO_502 {
+ LPTSTR shi502_netname;
+ DWORD shi502_type;
+ LPTSTR shi502_remark;
+ DWORD shi502_permissions;
+ DWORD shi502_max_uses;
+ DWORD shi502_current_uses;
+ LPTSTR shi502_path;
+ LPTSTR shi502_passwd;
+ DWORD shi502_reserved;
+ PSECURITY_DESCRIPTOR shi502_security_descriptor;
+} SHARE_INFO_502,*PSHARE_INFO_502,*LPSHARE_INFO_502;
+typedef struct _SHARE_INFO_1004 {
+ LPTSTR shi1004_remark;
+} SHARE_INFO_1004,*PSHARE_INFO_1004,*LPSHARE_INFO_1004;
+typedef struct _SHARE_INFO_1006 {
+ DWORD shi1006_max_uses;
+} SHARE_INFO_1006,*PSHARE_INFO_1006,*LPSHARE_INFO_1006;
+typedef struct _SHARE_INFO_1501 {
+ DWORD shi1501_reserved;
+ PSECURITY_DESCRIPTOR shi1501_security_descriptor;
+} SHARE_INFO_1501,*PSHARE_INFO_1501,*LPSHARE_INFO_1501;
+typedef struct _SESSION_INFO_0 { LPWSTR sesi0_cname; } SESSION_INFO_0,*PSESSION_INFO_0,*LPSESSION_INFO_0;
+typedef struct _SESSION_INFO_1 {
+ LPTSTR sesi1_cname;
+ LPTSTR sesi1_username;
+ DWORD sesi1_num_opens;
+ DWORD sesi1_time;
+ DWORD sesi1_idle_time;
+ DWORD sesi1_user_flags;
+} SESSION_INFO_1,*PSESSION_INFO_1,*LPSESSION_INFO_1;
+typedef struct _SESSION_INFO_2 {
+ LPTSTR sesi2_cname;
+ LPTSTR sesi2_username;
+ DWORD sesi2_num_opens;
+ DWORD sesi2_time;
+ DWORD sesi2_idle_time;
+ DWORD sesi2_user_flags;
+ LPWSTR sesi2_cltype_name;
+} SESSION_INFO_2,*PSESSION_INFO_2,*LPSESSION_INFO_2;
+typedef struct _SESSION_INFO_10 {
+ LPWSTR sesi10_cname;
+ LPWSTR sesi10_username;
+ DWORD sesi10_time;
+ DWORD sesi10_idle_time;
+} SESSION_INFO_10,*PSESSION_INFO_10,*LPSESSION_INFO_10;
+typedef struct _SESSION_INFO_502 {
+ LPWSTR sesi502_cname;
+ LPWSTR sesi502_username;
+ DWORD sesi502_num_opens;
+ DWORD sesi502_time;
+ DWORD sesi502_idle_time;
+ DWORD sesi502_user_flags;
+ LPWSTR sesi502_cltype_name;
+ LPWSTR sesi502_transport;
+} SESSION_INFO_502,*PSESSION_INFO_502,*LPSESSION_INFO_502;
+typedef struct _CONNECTION_INFO_0 { DWORD coni0_id; } CONNECTION_INFO_0,*PCONNECTION_INFO_0,*LPCONNECTION_INFO_0;
+typedef struct _CONNECTION_INFO_1 {
+ DWORD coni1_id;
+ DWORD coni1_type;
+ DWORD coni1_num_opens;
+ DWORD coni1_num_users;
+ DWORD coni1_time;
+ LPWSTR coni1_username;
+ LPWSTR coni1_netname;
+} CONNECTION_INFO_1,*PCONNECTION_INFO_1,*LPCONNECTION_INFO_1;
+NET_API_STATUS WINAPI NetShareAdd(LPWSTR,DWORD,PBYTE,PDWORD);
+NET_API_STATUS WINAPI NetShareEnum(LPWSTR,DWORD,PBYTE*,DWORD,PDWORD,PDWORD,PDWORD);
+NET_API_STATUS WINAPI NetShareEnumSticky(LPWSTR,DWORD,PBYTE*,DWORD,PDWORD,PDWORD,PDWORD resume_handle);
+NET_API_STATUS WINAPI NetShareGetInfo(LPWSTR,LPWSTR,DWORD,PBYTE*);
+NET_API_STATUS WINAPI NetShareSetInfo(LPWSTR,LPWSTR,DWORD,PBYTE,PDWORD);
+NET_API_STATUS WINAPI NetShareDel(LPWSTR,LPWSTR,DWORD);
+NET_API_STATUS WINAPI NetShareDelSticky(LPWSTR,LPWSTR,DWORD);
+NET_API_STATUS WINAPI NetShareCheck(LPWSTR,LPWSTR,PDWORD);
+NET_API_STATUS WINAPI NetSessionEnum(LPWSTR,LPWSTR,LPWSTR,DWORD,PBYTE*,DWORD,PDWORD,PDWORD,PDWORD);
+NET_API_STATUS WINAPI NetSessionDel(LPWSTR,LPWSTR,LPWSTR);
+NET_API_STATUS WINAPI NetSessionGetInfo(LPWSTR,LPWSTR,LPWSTR,DWORD,PBYTE*);
+NET_API_STATUS WINAPI NetConnectionEnum(LPWSTR,LPWSTR,DWORD,PBYTE*,DWORD,PDWORD,PDWORD,PDWORD);
+NET_API_STATUS WINAPI NetFileClose(LPWSTR,DWORD);
+NET_API_STATUS WINAPI NetFileEnum(LPWSTR,LPWSTR,LPWSTR,DWORD,PBYTE*,DWORD,PDWORD,PDWORD,PDWORD);
+NET_API_STATUS WINAPI NetFileGetInfo(LPWSTR,DWORD,DWORD,PBYTE*);
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/lmsname.h b/tcc/include/winapi/lmsname.h
new file mode 100644
index 0000000..a840cb2
--- /dev/null
+++ b/tcc/include/winapi/lmsname.h
@@ -0,0 +1,58 @@
+#ifndef _LMSNAME_H
+#define _LMSNAME_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#define SERVICE_WORKSTATION TEXT("LanmanWorkstation")
+#define SERVICE_LM20_WORKSTATION TEXT("WORKSTATION")
+#define WORKSTATION_DISPLAY_NAME TEXT("Workstation")
+#define SERVICE_SERVER TEXT("LanmanServer")
+#define SERVICE_LM20_SERVER TEXT("SERVER")
+#define SERVER_DISPLAY_NAME TEXT("Server")
+#define SERVICE_BROWSER TEXT("BROWSER")
+#define SERVICE_LM20_BROWSER SERVICE_BROWSER
+#define SERVICE_MESSENGER TEXT("MESSENGER")
+#define SERVICE_LM20_MESSENGER SERVICE_MESSENGER
+#define SERVICE_NETRUN TEXT("NETRUN")
+#define SERVICE_LM20_NETRUN SERVICE_NETRUN
+#define SERVICE_SPOOLER TEXT("SPOOLER")
+#define SERVICE_LM20_SPOOLER SERVICE_SPOOLER
+#define SERVICE_ALERTER TEXT("ALERTER")
+#define SERVICE_LM20_ALERTER SERVICE_ALERTER
+#define SERVICE_NETLOGON TEXT("NETLOGON")
+#define SERVICE_LM20_NETLOGON SERVICE_NETLOGON
+#define SERVICE_NETPOPUP TEXT("NETPOPUP")
+#define SERVICE_LM20_NETPOPUP SERVICE_NETPOPUP
+#define SERVICE_SQLSERVER TEXT("SQLSERVER")
+#define SERVICE_LM20_SQLSERVER SERVICE_SQLSERVER
+#define SERVICE_REPL TEXT("REPLICATOR")
+#define SERVICE_LM20_REPL SERVICE_REPL
+#define SERVICE_RIPL TEXT("REMOTEBOOT")
+#define SERVICE_LM20_RIPL SERVICE_RIPL
+#define SERVICE_TIMESOURCE TEXT("TIMESOURCE")
+#define SERVICE_LM20_TIMESOURCE SERVICE_TIMESOURCE
+#define SERVICE_AFP TEXT("AFP")
+#define SERVICE_LM20_AFP SERVICE_AFP
+#define SERVICE_UPS TEXT("UPS")
+#define SERVICE_LM20_UPS SERVICE_UPS
+#define SERVICE_XACTSRV TEXT("XACTSRV")
+#define SERVICE_LM20_XACTSRV SERVICE_XACTSRV
+#define SERVICE_TCPIP TEXT("TCPIP")
+#define SERVICE_LM20_TCPIP SERVICE_TCPIP
+#define SERVICE_NBT TEXT("NBT")
+#define SERVICE_LM20_NBT SERVICE_NBT
+#define SERVICE_LMHOSTS TEXT("LMHOSTS")
+#define SERVICE_LM20_LMHOSTS SERVICE_LMHOSTS
+#define SERVICE_TELNET TEXT("Telnet")
+#define SERVICE_LM20_TELNET SERVICE_TELNET
+#define SERVICE_SCHEDULE TEXT("Schedule")
+#define SERVICE_LM20_SCHEDULE SERVICE_SCHEDULE
+#define SERVICE_NTLMSSP TEXT("NtLmSsp")
+#define SERVICE_DHCP TEXT("DHCP")
+#define SERVICE_LM20_DHCP SERVICE_DHCP
+#define SERVICE_NWSAP TEXT("NwSapAgent")
+#define SERVICE_LM20_NWSAP SERVICE_NWSAP
+#define NWSAP_DISPLAY_NAME TEXT("NW Sap Agent")
+#define SERVICE_NWCS TEXT("NWCWorkstation")
+#endif
diff --git a/tcc/include/winapi/lmstats.h b/tcc/include/winapi/lmstats.h
new file mode 100644
index 0000000..2a4a2c2
--- /dev/null
+++ b/tcc/include/winapi/lmstats.h
@@ -0,0 +1,114 @@
+#ifndef _LMSTATS_H
+#define _LMSTATS_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#define STATSOPT_CLR 1
+#define STATS_NO_VALUE ((ULONG)-1)
+#define STATS_OVERFLOW ((ULONG)-2)
+typedef struct _STAT_SERVER_0 {
+ DWORD 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;
+} STAT_SERVER_0,*PSTAT_SERVER_0,*LPSTAT_SERVER_0;
+#ifdef LM20_WORKSTATION_STATISTICS
+typedef struct _STAT_WORKSTATION_0 {
+ DWORD stw0_start;
+ DWORD stw0_numNCB_r;
+ DWORD stw0_numNCB_s;
+ DWORD stw0_numNCB_a;
+ DWORD stw0_fiNCB_r;
+ DWORD stw0_fiNCB_s;
+ DWORD stw0_fiNCB_a;
+ DWORD stw0_fcNCB_r;
+ DWORD stw0_fcNCB_s;
+ DWORD stw0_fcNCB_a;
+ DWORD stw0_sesstart;
+ DWORD stw0_sessfailcon;
+ DWORD stw0_sessbroke;
+ DWORD stw0_uses;
+ DWORD stw0_usefail;
+ DWORD stw0_autorec;
+ DWORD stw0_bytessent_r_lo;
+ DWORD stw0_bytessent_r_hi;
+ DWORD stw0_bytesrcvd_r_lo;
+ DWORD stw0_bytesrcvd_r_hi;
+ DWORD stw0_bytessent_s_lo;
+ DWORD stw0_bytessent_s_hi;
+ DWORD stw0_bytesrcvd_s_lo;
+ DWORD stw0_bytesrcvd_s_hi;
+ DWORD stw0_bytessent_a_lo;
+ DWORD stw0_bytessent_a_hi;
+ DWORD stw0_bytesrcvd_a_lo;
+ DWORD stw0_bytesrcvd_a_hi;
+ DWORD stw0_reqbufneed;
+ DWORD stw0_bigbufneed;
+} STAT_WORKSTATION_0,*PSTAT_WORKSTATION_0,*LPSTAT_WORKSTATION_0;
+#else
+typedef struct _STAT_WORKSTATION_0 {
+ LARGE_INTEGER 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;
+ DWORD 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;
+} STAT_WORKSTATION_0,*PSTAT_WORKSTATION_0,*LPSTAT_WORKSTATION_0;
+#endif
+
+NET_API_STATUS WINAPI NetStatisticsGet(LPWSTR,LPWSTR,DWORD,DWORD,PBYTE*);
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/lmsvc.h b/tcc/include/winapi/lmsvc.h
new file mode 100644
index 0000000..bb19ee0
--- /dev/null
+++ b/tcc/include/winapi/lmsvc.h
@@ -0,0 +1,134 @@
+#ifndef _LMSVC_H
+#define _LMSVC_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#include <lmsname.h>
+#define SERVICE_DOS_ENCRYPTION TEXT("ENCRYPT")
+#define SERVICE_UNINSTALLED 0
+#define SERVICE_INSTALL_PENDING 1
+#define SERVICE_UNINSTALL_PENDING 2
+#define SERVICE_INSTALLED 3
+#define SERVICE_INSTALL_STATE 3
+#define SERVICE_PAUSE_STATE 18
+#define LM20_SERVICE_ACTIVE 0
+#define LM20_SERVICE_CONTINUE_PENDING 4
+#define LM20_SERVICE_PAUSE_PENDING 8
+#define LM20_SERVICE_PAUSED 18
+#define SERVICE_NOT_UNINSTALLABLE 0
+#define SERVICE_UNINSTALLABLE 16
+#define SERVICE_NOT_PAUSABLE 0
+#define SERVICE_PAUSABLE 32
+#define SERVICE_REDIR_PAUSED 0x700
+#define SERVICE_REDIR_DISK_PAUSED 256
+#define SERVICE_REDIR_PRINT_PAUSED 512
+#define SERVICE_REDIR_COMM_PAUSED 1024
+#define SERVICE_CTRL_INTERROGATE 0
+#define SERVICE_CTRL_PAUSE 1
+#define SERVICE_CTRL_CONTINUE 2
+#define SERVICE_CTRL_UNINSTALL 3
+#define SERVICE_CTRL_REDIR_DISK 1
+#define SERVICE_CTRL_REDIR_PRINT 2
+#define SERVICE_CTRL_REDIR_COMM 4
+#define SERVICE_IP_NO_HINT 0
+#define SERVICE_CCP_NO_HINT 0
+#define SERVICE_IP_QUERY_HINT 0x10000
+#define SERVICE_CCP_QUERY_HINT 0x10000
+#define SERVICE_IP_CHKPT_NUM 255
+#define SERVICE_CCP_CHKPT_NUM 255
+#define SERVICE_IP_WAIT_TIME 0xFF00
+#define SERVICE_CCP_WAIT_TIME 0xFF00
+#define SERVICE_IP_WAITTIME_SHIFT 8
+#define SERVICE_NTIP_WAITTIME_SHIFT 12
+#define UPPER_HINT_MASK 0xFF00
+#define LOWER_HINT_MASK 255
+#define UPPER_GET_HINT_MASK 0xFF00000
+#define LOWER_GET_HINT_MASK 0xFF00
+#define SERVICE_NT_MAXTIME 0xFFFF
+#define SERVICE_RESRV_MASK 0x1FFFF
+#define SERVICE_MAXTIME 255
+#define SERVICE_BASE 3050
+#define SERVICE_UIC_NORMAL 0
+#define SERVICE_UIC_BADPARMVAL (SERVICE_BASE+1)
+#define SERVICE_UIC_MISSPARM (SERVICE_BASE+2)
+#define SERVICE_UIC_UNKPARM (SERVICE_BASE+3)
+#define SERVICE_UIC_RESOURCE (SERVICE_BASE+4)
+#define SERVICE_UIC_CONFIG (SERVICE_BASE+5)
+#define SERVICE_UIC_SYSTEM (SERVICE_BASE+6)
+#define SERVICE_UIC_INTERNAL (SERVICE_BASE+7)
+#define SERVICE_UIC_AMBIGPARM (SERVICE_BASE+8)
+#define SERVICE_UIC_DUPPARM (SERVICE_BASE+9)
+#define SERVICE_UIC_KILL (SERVICE_BASE+10)
+#define SERVICE_UIC_EXEC (SERVICE_BASE+11)
+#define SERVICE_UIC_SUBSERV (SERVICE_BASE+12)
+#define SERVICE_UIC_CONFLPARM (SERVICE_BASE+13)
+#define SERVICE_UIC_FILE (SERVICE_BASE+14)
+#define SERVICE_UIC_M_NULL 0
+#define SERVICE_UIC_M_MEMORY (SERVICE_BASE+20)
+#define SERVICE_UIC_M_DISK (SERVICE_BASE+21)
+#define SERVICE_UIC_M_THREADS (SERVICE_BASE+22)
+#define SERVICE_UIC_M_PROCESSES (SERVICE_BASE+23)
+#define SERVICE_UIC_M_SECURITY (SERVICE_BASE+24)
+#define SERVICE_UIC_M_LANROOT (SERVICE_BASE+25)
+#define SERVICE_UIC_M_REDIR (SERVICE_BASE+26)
+#define SERVICE_UIC_M_SERVER (SERVICE_BASE+27)
+#define SERVICE_UIC_M_SEC_FILE_ERR (SERVICE_BASE+28)
+#define SERVICE_UIC_M_FILES (SERVICE_BASE+29)
+#define SERVICE_UIC_M_LOGS (SERVICE_BASE+30)
+#define SERVICE_UIC_M_LANGROUP (SERVICE_BASE+31)
+#define SERVICE_UIC_M_MSGNAME (SERVICE_BASE+32)
+#define SERVICE_UIC_M_ANNOUNCE (SERVICE_BASE+33)
+#define SERVICE_UIC_M_UAS (SERVICE_BASE+34)
+#define SERVICE_UIC_M_SERVER_SEC_ERR (SERVICE_BASE+35)
+#define SERVICE_UIC_M_WKSTA (SERVICE_BASE+37)
+#define SERVICE_UIC_M_ERRLOG (SERVICE_BASE+38)
+#define SERVICE_UIC_M_FILE_UW (SERVICE_BASE+39)
+#define SERVICE_UIC_M_ADDPAK (SERVICE_BASE+40)
+#define SERVICE_UIC_M_LAZY (SERVICE_BASE+41)
+#define SERVICE_UIC_M_UAS_MACHINE_ACCT (SERVICE_BASE+42)
+#define SERVICE_UIC_M_UAS_SERVERS_NMEMB (SERVICE_BASE+43)
+#define SERVICE_UIC_M_UAS_SERVERS_NOGRP (SERVICE_BASE+44)
+#define SERVICE_UIC_M_UAS_INVALID_ROLE (SERVICE_BASE+45)
+#define SERVICE_UIC_M_NETLOGON_NO_DC (SERVICE_BASE+46)
+#define SERVICE_UIC_M_NETLOGON_DC_CFLCT (SERVICE_BASE+47)
+#define SERVICE_UIC_M_NETLOGON_AUTH (SERVICE_BASE+48)
+#define SERVICE_UIC_M_UAS_PROLOG (SERVICE_BASE+49)
+#define SERVICE2_BASE 5600
+#define SERVICE_UIC_M_NETLOGON_MPATH (SERVICE2_BASE+0)
+#define SERVICE_UIC_M_LSA_MACHINE_ACCT (SERVICE2_BASE+1)
+#define SERVICE_UIC_M_DATABASE_ERROR (SERVICE2_BASE+2)
+
+typedef struct _SERVICE_INFO_0 { LPWSTR svci0_name;} SERVICE_INFO_0,*PSERVICE_INFO_0,* LPSERVICE_INFO_0;
+typedef struct _SERVICE_INFO_1 {
+ LPWSTR svci1_name;
+ DWORD svci1_status;
+ DWORD svci1_code;
+ DWORD svci1_pid;
+} SERVICE_INFO_1,*PSERVICE_INFO_1,* LPSERVICE_INFO_1;
+typedef struct _SERVICE_INFO_2 {
+ LPWSTR svci2_name;
+ DWORD svci2_status;
+ DWORD svci2_code;
+ DWORD svci2_pid;
+ LPWSTR svci2_text;
+ DWORD svci2_specific_error;
+ LPWSTR svci2_display_name;
+} SERVICE_INFO_2,*PSERVICE_INFO_2,* LPSERVICE_INFO_2;
+
+NET_API_STATUS WINAPI NetServiceControl(LPCWSTR,LPCWSTR,DWORD,DWORD,PBYTE*);
+NET_API_STATUS WINAPI NetServiceEnum(LPCWSTR,DWORD,PBYTE*,DWORD,PDWORD,PDWORD,PDWORD);
+NET_API_STATUS WINAPI NetServiceGetInfo(LPCWSTR,LPCWSTR,DWORD,PBYTE*);
+NET_API_STATUS WINAPI NetServiceInstall(LPCWSTR,LPCWSTR,DWORD,LPCWSTR*,PBYTE*);
+#define SERVICE_IP_CODE(t,n) ((long)SERVICE_IP_QUERY_HINT|(long)(n|(t<<SERVICE_IP_WAITTIME_SHIFT)))
+#define SERVICE_CCP_CODE(t,n) ((long)SERVICE_CCP_QUERY_HINT|(long)(n|(t<<SERVICE_IP_WAITTIME_SHIFT)))
+#define SERVICE_UIC_CODE(c,m) ((long)(((long)c<<16)|(long)(USHORT)m))
+#define SERVICE_NT_CCP_CODE(t,n) (((long)SERVICE_CCP_QUERY_HINT)|((long)(n))|(((t)&LOWER_HINT_MASK)<<SERVICE_IP_WAITTIME_SHIFT)|(((t)&UPPER_HINT_MASK)<<SERVICE_NTIP_WAITTIME_SHIFT))
+#define SERVICE_NT_WAIT_GET(c) ((((c)&UPPER_GET_HINT_MASK)>>SERVICE_NTIP_WAITTIME_SHIFT)|(((c)&LOWER_GET_HINT_MASK)>>SERVICE_IP_WAITTIME_SHIFT))
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/lmuse.h b/tcc/include/winapi/lmuse.h
new file mode 100644
index 0000000..a63a71f
--- /dev/null
+++ b/tcc/include/winapi/lmuse.h
@@ -0,0 +1,60 @@
+#ifndef _LMUSE_H
+#define _LMUSE_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#include <lmuseflg.h>
+#define USE_LOCAL_PARMNUM 1
+#define USE_REMOTE_PARMNUM 2
+#define USE_PASSWORD_PARMNUM 3
+#define USE_ASGTYPE_PARMNUM 4
+#define USE_USERNAME_PARMNUM 5
+#define USE_DOMAINNAME_PARMNUM 6
+#define USE_OK 0
+#define USE_PAUSED 1
+#define USE_SESSLOST 2
+#define USE_DISCONN 2
+#define USE_NETERR 3
+#define USE_CONN 4
+#define USE_RECONN 5
+#define USE_WILDCARD ((DWORD)-1)
+#define USE_DISKDEV 0
+#define USE_SPOOLDEV 1
+#define USE_CHARDEV 2
+#define USE_IPC 3
+typedef struct _USE_INFO_0 {
+ LPWSTR ui0_local;
+ LPWSTR ui0_remote;
+}USE_INFO_0,*PUSE_INFO_0,*LPUSE_INFO_0;
+typedef struct _USE_INFO_1 {
+ LPWSTR ui1_local;
+ LPWSTR ui1_remote;
+ LPWSTR ui1_password;
+ DWORD ui1_status;
+ DWORD ui1_asg_type;
+ DWORD ui1_refcount;
+ DWORD ui1_usecount;
+}USE_INFO_1,*PUSE_INFO_1,*LPUSE_INFO_1;
+typedef struct _USE_INFO_2 {
+ LPWSTR ui2_local;
+ LPWSTR ui2_remote;
+ LPWSTR ui2_password;
+ DWORD ui2_status;
+ DWORD ui2_asg_type;
+ DWORD ui2_refcount;
+ DWORD ui2_usecount;
+ LPWSTR ui2_username;
+ LPWSTR ui2_domainname;
+}USE_INFO_2,*PUSE_INFO_2,*LPUSE_INFO_2;
+NET_API_STATUS WINAPI NetUseAdd(LPWSTR,DWORD,PBYTE,PDWORD);
+NET_API_STATUS WINAPI NetUseDel(LPWSTR,LPWSTR,DWORD);
+NET_API_STATUS WINAPI NetUseEnum(LPWSTR,DWORD,PBYTE*,DWORD,PDWORD,PDWORD,PDWORD);
+NET_API_STATUS WINAPI NetUseGetInfo(LPWSTR,LPWSTR,DWORD,PBYTE*);
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/lmuseflg.h b/tcc/include/winapi/lmuseflg.h
new file mode 100644
index 0000000..34162e4
--- /dev/null
+++ b/tcc/include/winapi/lmuseflg.h
@@ -0,0 +1,10 @@
+#ifndef _LMUSEFLG_H
+#define _LMUSEFLG_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#define USE_NOFORCE 0
+#define USE_FORCE 1
+#define USE_LOTS_OF_FORCE 2
+#endif
diff --git a/tcc/include/winapi/lmwksta.h b/tcc/include/winapi/lmwksta.h
new file mode 100644
index 0000000..a8c6ccb
--- /dev/null
+++ b/tcc/include/winapi/lmwksta.h
@@ -0,0 +1,233 @@
+#ifndef _LMWKSTA_H
+#define _LMWKSTA_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#include <lmuseflg.h>
+#define WKSTA_PLATFORM_ID_PARMNUM 100
+#define WKSTA_COMPUTERNAME_PARMNUM 1
+#define WKSTA_LANGROUP_PARMNUM 2
+#define WKSTA_VER_MAJOR_PARMNUM 4
+#define WKSTA_VER_MINOR_PARMNUM 5
+#define WKSTA_LOGGED_ON_USERS_PARMNUM 6
+#define WKSTA_LANROOT_PARMNUM 7
+#define WKSTA_LOGON_DOMAIN_PARMNUM 8
+#define WKSTA_LOGON_SERVER_PARMNUM 9
+#define WKSTA_CHARWAIT_PARMNUM 10
+#define WKSTA_CHARTIME_PARMNUM 11
+#define WKSTA_CHARCOUNT_PARMNUM 12
+#define WKSTA_KEEPCONN_PARMNUM 13
+#define WKSTA_KEEPSEARCH_PARMNUM 14
+#define WKSTA_MAXCMDS_PARMNUM 15
+#define WKSTA_NUMWORKBUF_PARMNUM 16
+#define WKSTA_MAXWRKCACHE_PARMNUM 17
+#define WKSTA_SESSTIMEOUT_PARMNUM 18
+#define WKSTA_SIZERROR_PARMNUM 19
+#define WKSTA_NUMALERTS_PARMNUM 20
+#define WKSTA_NUMSERVICES_PARMNUM 21
+#define WKSTA_NUMCHARBUF_PARMNUM 22
+#define WKSTA_SIZCHARBUF_PARMNUM 23
+#define WKSTA_ERRLOGSZ_PARMNUM 27
+#define WKSTA_PRINTBUFTIME_PARMNUM 28
+#define WKSTA_SIZWORKBUF_PARMNUM 29
+#define WKSTA_MAILSLOTS_PARMNUM 30
+#define WKSTA_NUMDGRAMBUF_PARMNUM 31
+#define WKSTA_WRKHEURISTICS_PARMNUM 32
+#define WKSTA_MAXTHREADS_PARMNUM 33
+#define WKSTA_LOCKQUOTA_PARMNUM 41
+#define WKSTA_LOCKINCREMENT_PARMNUM 42
+#define WKSTA_LOCKMAXIMUM_PARMNUM 43
+#define WKSTA_PIPEINCREMENT_PARMNUM 44
+#define WKSTA_PIPEMAXIMUM_PARMNUM 45
+#define WKSTA_DORMANTFILELIMIT_PARMNUM 46
+#define WKSTA_CACHEFILETIMEOUT_PARMNUM 47
+#define WKSTA_USEOPPORTUNISTICLOCKING_PARMNUM 48
+#define WKSTA_USEUNLOCKBEHIND_PARMNUM 49
+#define WKSTA_USECLOSEBEHIND_PARMNUM 50
+#define WKSTA_BUFFERNAMEDPIPES_PARMNUM 51
+#define WKSTA_USELOCKANDREADANDUNLOCK_PARMNUM 52
+#define WKSTA_UTILIZENTCACHING_PARMNUM 53
+#define WKSTA_USERAWREAD_PARMNUM 54
+#define WKSTA_USERAWWRITE_PARMNUM 55
+#define WKSTA_USEWRITERAWWITHDATA_PARMNUM 56
+#define WKSTA_USEENCRYPTION_PARMNUM 57
+#define WKSTA_BUFFILESWITHDENYWRITE_PARMNUM 58
+#define WKSTA_BUFFERREADONLYFILES_PARMNUM 59
+#define WKSTA_FORCECORECREATEMODE_PARMNUM 60
+#define WKSTA_USE512BYTESMAXTRANSFER_PARMNUM 61
+#define WKSTA_READAHEADTHRUPUT_PARMNUM 62
+#define WKSTA_OTH_DOMAINS_PARMNUM 101
+#define TRANSPORT_QUALITYOFSERVICE_PARMNUM 201
+#define TRANSPORT_NAME_PARMNUM 202
+
+typedef struct _WKSTA_INFO_100 {
+ DWORD wki100_platform_id;
+ LPWSTR wki100_computername;
+ LPWSTR wki100_langroup;
+ DWORD wki100_ver_major;
+ DWORD wki100_ver_minor;
+}WKSTA_INFO_100,*PWKSTA_INFO_100,*LPWKSTA_INFO_100;
+typedef struct _WKSTA_INFO_101 {
+ DWORD wki101_platform_id;
+ LPWSTR wki101_computername;
+ LPWSTR wki101_langroup;
+ DWORD wki101_ver_major;
+ DWORD wki101_ver_minor;
+ LPWSTR wki101_lanroot;
+}WKSTA_INFO_101,*PWKSTA_INFO_101,*LPWKSTA_INFO_101;
+typedef struct _WKSTA_INFO_102 {
+ DWORD wki102_platform_id;
+ LPWSTR wki102_computername;
+ LPWSTR wki102_langroup;
+ DWORD wki102_ver_major;
+ DWORD wki102_ver_minor;
+ LPWSTR wki102_lanroot;
+ DWORD wki102_logged_on_users;
+}WKSTA_INFO_102,*PWKSTA_INFO_102,*LPWKSTA_INFO_102;
+typedef struct _WKSTA_INFO_302{
+ DWORD 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;
+ LPWSTR wki302_wrk_heuristics;
+ DWORD wki302_mailslots;
+ DWORD wki302_num_dgram_buf;
+}WKSTA_INFO_302,*PWKSTA_INFO_302,*LPWKSTA_INFO_302;
+typedef struct _WKSTA_INFO_402{
+ DWORD 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;
+ LPWSTR wki402_wrk_heuristics;
+ DWORD wki402_mailslots;
+ DWORD wki402_num_dgram_buf;
+ DWORD wki402_max_threads;
+}WKSTA_INFO_402,*PWKSTA_INFO_402,*LPWKSTA_INFO_402;
+typedef struct _WKSTA_INFO_502{
+ DWORD 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;
+ BOOL 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;
+}WKSTA_INFO_502,*PWKSTA_INFO_502,*LPWKSTA_INFO_502;
+typedef struct _WKSTA_INFO_1010 { DWORD wki1010_char_wait;} WKSTA_INFO_1010,*PWKSTA_INFO_1010,*LPWKSTA_INFO_1010;
+typedef struct _WKSTA_INFO_1011 { DWORD wki1011_collection_time;} WKSTA_INFO_1011,*PWKSTA_INFO_1011,*LPWKSTA_INFO_1011;
+typedef struct _WKSTA_INFO_1012 { DWORD wki1012_maximum_collection_count;} WKSTA_INFO_1012,*PWKSTA_INFO_1012,*LPWKSTA_INFO_1012;
+typedef struct _WKSTA_INFO_1027 { DWORD wki1027_errlog_sz;} WKSTA_INFO_1027,*PWKSTA_INFO_1027,*LPWKSTA_INFO_1027;
+typedef struct _WKSTA_INFO_1028 { DWORD wki1028_print_buf_time;} WKSTA_INFO_1028,*PWKSTA_INFO_1028,*LPWKSTA_INFO_1028;
+typedef struct _WKSTA_INFO_1032 { DWORD wki1032_wrk_heuristics;} WKSTA_INFO_1032,*PWKSTA_INFO_1032,*LPWKSTA_INFO_1032;
+typedef struct _WKSTA_INFO_1013 { DWORD wki1013_keep_conn;} WKSTA_INFO_1013,*PWKSTA_INFO_1013,*LPWKSTA_INFO_1013;
+typedef struct _WKSTA_INFO_1018 { DWORD wki1018_sess_timeout;} WKSTA_INFO_1018,*PWKSTA_INFO_1018,*LPWKSTA_INFO_1018;
+typedef struct _WKSTA_INFO_1023 { DWORD wki1023_siz_char_buf;} WKSTA_INFO_1023,*PWKSTA_INFO_1023,*LPWKSTA_INFO_1023;
+typedef struct _WKSTA_INFO_1033 { DWORD wki1033_max_threads;} WKSTA_INFO_1033,*PWKSTA_INFO_1033,*LPWKSTA_INFO_1033;
+typedef struct _WKSTA_INFO_1041 { DWORD wki1041_lock_quota;} WKSTA_INFO_1041,*PWKSTA_INFO_1041,*LPWKSTA_INFO_1041;
+typedef struct _WKSTA_INFO_1042 { DWORD wki1042_lock_increment;} WKSTA_INFO_1042,*PWKSTA_INFO_1042,*LPWKSTA_INFO_1042;
+typedef struct _WKSTA_INFO_1043 { DWORD wki1043_lock_maximum;} WKSTA_INFO_1043,*PWKSTA_INFO_1043,*LPWKSTA_INFO_1043;
+typedef struct _WKSTA_INFO_1044 { DWORD wki1044_pipe_increment;} WKSTA_INFO_1044,*PWKSTA_INFO_1044,*LPWKSTA_INFO_1044;
+typedef struct _WKSTA_INFO_1045 { DWORD wki1045_pipe_maximum;} WKSTA_INFO_1045,*PWKSTA_INFO_1045,*LPWKSTA_INFO_1045;
+typedef struct _WKSTA_INFO_1046 { DWORD wki1046_dormant_file_limit;} WKSTA_INFO_1046,*PWKSTA_INFO_1046,*LPWKSTA_INFO_1046;
+typedef struct _WKSTA_INFO_1047 { DWORD wki1047_cache_file_timeout;} WKSTA_INFO_1047,*PWKSTA_INFO_1047,*LPWKSTA_INFO_1047;
+typedef struct _WKSTA_INFO_1048 { BOOL wki1048_use_opportunistic_locking;} WKSTA_INFO_1048,*PWKSTA_INFO_1048,*LPWKSTA_INFO_1048;
+typedef struct _WKSTA_INFO_1049 { BOOL wki1049_use_unlock_behind;} WKSTA_INFO_1049,*PWKSTA_INFO_1049,*LPWKSTA_INFO_1049;
+typedef struct _WKSTA_INFO_1050 { BOOL wki1050_use_close_behind;} WKSTA_INFO_1050,*PWKSTA_INFO_1050,*LPWKSTA_INFO_1050;
+typedef struct _WKSTA_INFO_1051 { BOOL wki1051_buf_named_pipes;} WKSTA_INFO_1051,*PWKSTA_INFO_1051,*LPWKSTA_INFO_1051;
+typedef struct _WKSTA_INFO_1052 { BOOL wki1052_use_lock_read_unlock;} WKSTA_INFO_1052,*PWKSTA_INFO_1052,*LPWKSTA_INFO_1052;
+typedef struct _WKSTA_INFO_1053 { BOOL wki1053_utilize_nt_caching;} WKSTA_INFO_1053,*PWKSTA_INFO_1053,*LPWKSTA_INFO_1053;
+typedef struct _WKSTA_INFO_1054 { BOOL wki1054_use_raw_read;} WKSTA_INFO_1054,*PWKSTA_INFO_1054,*LPWKSTA_INFO_1054;
+typedef struct _WKSTA_INFO_1055 { BOOL wki1055_use_raw_write;} WKSTA_INFO_1055,*PWKSTA_INFO_1055,*LPWKSTA_INFO_1055;
+typedef struct _WKSTA_INFO_1056 { BOOL wki1056_use_write_raw_data;} WKSTA_INFO_1056,*PWKSTA_INFO_1056,*LPWKSTA_INFO_1056;
+typedef struct _WKSTA_INFO_1057 { BOOL wki1057_use_encryption;} WKSTA_INFO_1057,*PWKSTA_INFO_1057,*LPWKSTA_INFO_1057;
+typedef struct _WKSTA_INFO_1058 { BOOL wki1058_buf_files_deny_write;} WKSTA_INFO_1058,*PWKSTA_INFO_1058,*LPWKSTA_INFO_1058;
+typedef struct _WKSTA_INFO_1059 { BOOL wki1059_buf_read_only_files;} WKSTA_INFO_1059,*PWKSTA_INFO_1059,*LPWKSTA_INFO_1059;
+typedef struct _WKSTA_INFO_1060 { BOOL wki1060_force_core_create_mode;} WKSTA_INFO_1060,*PWKSTA_INFO_1060,*LPWKSTA_INFO_1060;
+typedef struct _WKSTA_INFO_1061 { BOOL wki1061_use_512_byte_max_transfer;} WKSTA_INFO_1061,*PWKSTA_INFO_1061,*LPWKSTA_INFO_1061;
+typedef struct _WKSTA_INFO_1062 { DWORD wki1062_read_ahead_throughput;} WKSTA_INFO_1062,*PWKSTA_INFO_1062,*LPWKSTA_INFO_1062;
+typedef struct _WKSTA_USER_INFO_0 { LPWSTR wkui0_username;}WKSTA_USER_INFO_0,*PWKSTA_USER_INFO_0,*LPWKSTA_USER_INFO_0;
+typedef struct _WKSTA_USER_INFO_1 {
+ LPWSTR wkui1_username;
+ LPWSTR wkui1_logon_domain;
+ LPWSTR wkui1_oth_domains;
+ LPWSTR wkui1_logon_server;
+}WKSTA_USER_INFO_1,*PWKSTA_USER_INFO_1,*LPWKSTA_USER_INFO_1;
+typedef struct _WKSTA_USER_INFO_1101 { LPWSTR wkui1101_oth_domains;} WKSTA_USER_INFO_1101,*PWKSTA_USER_INFO_1101,*LPWKSTA_USER_INFO_1101;
+typedef struct _WKSTA_TRANSPORT_INFO_0 {
+ DWORD wkti0_quality_of_service;
+ DWORD wkti0_number_of_vcs;
+ LPWSTR wkti0_transport_name;
+ LPWSTR wkti0_transport_address;
+ BOOL wkti0_wan_ish;
+}WKSTA_TRANSPORT_INFO_0,*PWKSTA_TRANSPORT_INFO_0,*LPWKSTA_TRANSPORT_INFO_0;
+
+NET_API_STATUS WINAPI NetWkstaGetInfo(LPWSTR,DWORD,PBYTE*);
+NET_API_STATUS WINAPI NetWkstaSetInfo(LPWSTR,DWORD,PBYTE,PDWORD);
+NET_API_STATUS WINAPI NetWkstaUserGetInfo(LPWSTR,DWORD,PBYTE*);
+NET_API_STATUS WINAPI NetWkstaUserSetInfo(LPWSTR,DWORD,PBYTE,PDWORD);
+NET_API_STATUS WINAPI NetWkstaUserEnum(LPWSTR,DWORD,PBYTE*,DWORD,PDWORD,PDWORD,PDWORD);
+NET_API_STATUS WINAPI NetWkstaTransportAdd(LPWSTR,DWORD,PBYTE,PDWORD);
+NET_API_STATUS WINAPI NetWkstaTransportDel(LPWSTR,LPWSTR,DWORD);
+NET_API_STATUS WINAPI NetWkstaTransportEnum(LPWSTR,DWORD,PBYTE*,DWORD,PDWORD,PDWORD,PDWORD);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/lzexpand.h b/tcc/include/winapi/lzexpand.h
new file mode 100644
index 0000000..68d4807
--- /dev/null
+++ b/tcc/include/winapi/lzexpand.h
@@ -0,0 +1,40 @@
+#ifndef _LZEXPAND_H
+#define _LZEXPAND_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#define LZERROR_BADINHANDLE (-1)
+#define LZERROR_BADOUTHANDLE (-2)
+#define LZERROR_READ (-3)
+#define LZERROR_WRITE (-4)
+#define LZERROR_GLOBALLOC (-5)
+#define LZERROR_GLOBLOCK (-6)
+#define LZERROR_BADVALUE (-7)
+#define LZERROR_UNKNOWNALG (-8)
+LONG WINAPI CopyLZFile(INT,INT);
+INT WINAPI GetExpandedNameA(LPSTR,LPSTR);
+INT WINAPI GetExpandedNameW(LPWSTR,LPWSTR);
+VOID APIENTRY LZClose(INT);
+LONG APIENTRY LZCopy(INT,INT);
+VOID WINAPI LZDone(VOID);
+INT WINAPI LZInit(INT);
+INT WINAPI LZOpenFileA(LPSTR,LPOFSTRUCT,WORD);
+INT WINAPI LZOpenFileW(LPWSTR,LPOFSTRUCT,WORD);
+INT WINAPI LZRead(INT,LPSTR,INT);
+LONG WINAPI LZSeek(INT,LONG,INT);
+INT WINAPI LZStart(VOID);
+#ifdef UNICODE
+#define GetExpandedName GetExpandedNameW
+#define LZOpenFile LZOpenFileW
+#else
+#define GetExpandedName GetExpandedNameA
+#define LZOpenFile LZOpenFileA
+#endif
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/mapi.h b/tcc/include/winapi/mapi.h
new file mode 100644
index 0000000..8474f89
--- /dev/null
+++ b/tcc/include/winapi/mapi.h
@@ -0,0 +1,163 @@
+#ifndef _MAPI_H
+#define _MAPI_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define SUCCESS_SUCCESS 0
+#define MAPI_USER_ABORT 1
+#define MAPI_E_USER_ABORT 1
+#define MAPI_E_FAILURE 2
+#define MAPI_E_LOGIN_FAILURE 3
+#define MAPI_E_LOGON_FAILURE 3
+#define MAPI_E_DISK_FULL 4
+#define MAPI_E_INSUFFICIENT_MEMORY 5
+#define MAPI_E_ACCESS_DENIED 6
+#define MAPI_E_BLK_TOO_SMALL 6
+#define MAPI_E_TOO_MANY_SESSIONS 8
+#define MAPI_E_TOO_MANY_FILES 9
+#define MAPI_E_TOO_MANY_RECIPIENTS 10
+#define MAPI_E_ATTACHMENT_NOT_FOUND 11
+#define MAPI_E_ATTACHMENT_OPEN_FAILURE 12
+#define MAPI_E_ATTACHMENT_WRITE_FAILURE 13
+#define MAPI_E_UNKNOWN_RECIPIENT 14
+#define MAPI_E_BAD_RECIPTYPE 15
+#define MAPI_E_NO_MESSAGES 16
+#define MAPI_E_INVALID_MESSAGE 17
+#define MAPI_E_TEXT_TOO_LARGE 18
+#define MAPI_E_INVALID_SESSION 19
+#define MAPI_E_TYPE_NOT_SUPPORTED 20
+#define MAPI_E_AMBIGUOUS_RECIPIENT 21
+#define MAPI_E_AMBIGUOUS_RECIP 21
+#define MAPI_E_MESSAGE_IN_USE 22
+#define MAPI_E_NETWORK_FAILURE 23
+#define MAPI_E_INVALID_EDITFIELDS 24
+#define MAPI_E_INVALID_RECIPS 25
+#define MAPI_E_NOT_SUPPORTED 26
+
+#define MAPI_ORIG 0
+#define MAPI_TO 1
+#define MAPI_CC 2
+#define MAPI_BCC 3
+
+#define MAPI_LOGON_UI 0x0001
+#define MAPI_NEW_SESSION 0x0002
+#define MAPI_FORCE_DOWNLOAD 0x1000
+#define MAPI_LOGOFF_SHARED 0x0001
+#define MAPI_LOGOFF_UI 0x0002
+#define MAPI_DIALOG 0x0008
+#define MAPI_UNREAD_ONLY 0x0020
+#define MAPI_LONG_MSGID 0x4000
+#define MAPI_GUARANTEE_FIFO 0x0100
+#define MAPI_ENVELOPE_ONLY 0x0040
+#define MAPI_PEEK 0x0080
+#define MAPI_BODY_AS_FILE 0x0200
+#define MAPI_SUPPRESS_ATTACH 0x0800
+#define MAPI_AB_NOMODIFY 0x0400
+#define MAPI_OLE 0x0001
+#define MAPI_OLE_STATIC 0x0002
+#define MAPI_UNREAD 0x0001
+#define MAPI_RECEIPT_REQUESTED 0x0002
+#define MAPI_SENT 0x0004
+
+#ifndef RC_INVOKED
+typedef unsigned long FLAGS;
+typedef unsigned long LHANDLE;
+typedef unsigned long FAR *LPLHANDLE, FAR *LPULONG;
+
+typedef struct {
+ ULONG ulReserved;
+ ULONG ulRecipClass;
+ LPSTR lpszName;
+ LPSTR lpszAddress;
+ ULONG ulEIDSize;
+ LPVOID lpEntryID;
+} MapiRecipDesc, *lpMapiRecipDesc;
+typedef struct {
+ ULONG ulReserved;
+ ULONG flFlags;
+ ULONG nPosition;
+ LPSTR lpszPathName;
+ LPSTR lpszFileName;
+ LPVOID lpFileType;
+} MapiFileDesc, *lpMapiFileDesc;
+typedef struct {
+ ULONG ulReserved;
+ ULONG cbTag;
+ LPBYTE lpTag;
+ ULONG cbEncoding;
+ LPBYTE lpEncoding;
+} MapiFileTagExt, *lpMapiFileTagExt;
+typedef struct {
+ ULONG ulReserved;
+ LPSTR lpszSubject;
+ LPSTR lpszNoteText;
+ LPSTR lpszMessageType;
+ LPSTR lpszDateReceived;
+ LPSTR lpszConversationID;
+ FLAGS flFlags;
+ lpMapiRecipDesc lpOriginator;
+ ULONG nRecipCount;
+ lpMapiRecipDesc lpRecips;
+ ULONG nFileCount;
+ lpMapiFileDesc lpFiles;
+} MapiMessage, *lpMapiMessage;
+
+ULONG PASCAL MAPILogon (ULONG,LPSTR,LPSTR,FLAGS,ULONG,LPLHANDLE);
+ULONG PASCAL MAPISendMail (LHANDLE,ULONG,lpMapiMessage,FLAGS,ULONG);
+ULONG PASCAL MAPISendDocuments (ULONG,LPSTR,LPSTR,LPSTR,ULONG);
+ULONG PASCAL MAPIReadMail (LHANDLE,ULONG,LPSTR,FLAGS,ULONG,
+ lpMapiMessage*);
+ULONG PASCAL MAPIFindNext (LHANDLE,ULONG,LPSTR,LPSTR,FLAGS,ULONG,LPSTR);
+ULONG PASCAL MAPIResolveName (LHANDLE,ULONG,LPSTR,FLAGS,ULONG,
+ lpMapiRecipDesc*);
+ULONG PASCAL MAPIAddress (LHANDLE,ULONG,LPSTR,ULONG,LPSTR,ULONG,
+ lpMapiRecipDesc,FLAGS,ULONG,LPULONG,
+ lpMapiRecipDesc*);
+ULONG PASCAL MAPIFreeBuffer (LPVOID);
+ULONG PASCAL MAPIDetails (LHANDLE,ULONG,lpMapiRecipDesc,FLAGS,ULONG);
+ULONG PASCAL MAPISaveMail (LHANDLE,ULONG,lpMapiMessage lpszMessage,
+ FLAGS,ULONG,LPSTR);
+ULONG PASCAL MAPIDeleteMail (LHANDLE lpSession,ULONG,LPSTR,FLAGS,ULONG);
+ULONG PASCAL MAPILogoff (LHANDLE,ULONG,FLAGS,ULONG);
+/* Netscape extensions. */
+ULONG PASCAL MAPIGetNetscapeVersion (void);
+ULONG PASCAL MAPI_NSCP_SynchronizeClient (LHANDLE,ULONG);
+
+/* Handles for use with GetProcAddress */
+typedef ULONG (PASCAL * LPMAPILOGON) (ULONG,LPSTR,LPSTR,FLAGS,ULONG,
+ LPLHANDLE);
+typedef ULONG (PASCAL * LPMAPISENDMAIL) (LHANDLE,ULONG,lpMapiMessage,
+ FLAGS,ULONG);
+typedef ULONG (PASCAL * LPMAPISENDDOCUMENTS) (ULONG,LPSTR,LPSTR,
+ LPSTR,ULONG);
+typedef ULONG (PASCAL * LPMAPIREADMAIL) (LHANDLE,ULONG,LPSTR,FLAGS,
+ ULONG,lpMapiMessage*);
+typedef ULONG (PASCAL * LPMAPIFINDNEXT) (LHANDLE,ULONG,LPSTR,LPSTR,
+ FLAGS,ULONG,LPSTR);
+typedef ULONG (PASCAL * LPMAPIRESOLVENAME) (LHANDLE,ULONG,LPSTR,FLAGS,
+ ULONG,lpMapiRecipDesc*);
+typedef ULONG (PASCAL * LPMAPIADDRESS) (LHANDLE,ULONG,LPSTR,ULONG,LPSTR,
+ ULONG,lpMapiRecipDesc,FLAGS,ULONG,
+ LPULONG,lpMapiRecipDesc*);
+typedef ULONG (PASCAL * LPMAPIFREEBUFFER) (LPVOID lpv);
+typedef ULONG (PASCAL * LPMAPIDETAILS) (LHANDLE,ULONG,lpMapiRecipDesc,
+ FLAGS,ULONG);
+typedef ULONG (PASCAL * LPMAPISAVEMAIL) (LHANDLE,ULONG,lpMapiMessage,
+ FLAGS,ULONG,LPSTR);
+typedef ULONG (PASCAL * LPMAPIDELETEMAIL) (LHANDLE lpSession,ULONG,
+ LPSTR, FLAGS,ULONG);
+typedef ULONG (PASCAL * LPMAPILOGOFF)(LHANDLE,ULONG,FLAGS,ULONG);
+
+#endif /* RC_INVOKED */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* Not _MAPI_H */
+
diff --git a/tcc/include/winapi/mciavi.h b/tcc/include/winapi/mciavi.h
new file mode 100644
index 0000000..8535a7f
--- /dev/null
+++ b/tcc/include/winapi/mciavi.h
@@ -0,0 +1,25 @@
+#ifndef _MCIAVI_H
+#define _MCIAVI_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#define MCI_MCIAVI_PLAY_WINDOW 0x1000000
+#define MCI_MCIAVI_PLAY_FULLSCREEN 0x2000000
+#define MCI_MCIAVI_PLAY_FULLBY2 0x4000000
+#define MCI_AVI_STATUS_FRAMES_SKIPPED 0x8001
+#define MCI_AVI_STATUS_LAST_PLAY_SPEED 0x8002
+#define MCI_AVI_STATUS_AUDIO_BREAKS 0x8003
+#define MCI_AVI_SETVIDEO_DRAW_PROCEDURE 0x8000
+#define MCI_AVI_SETVIDEO_PALETTE_COLOR 0x8100
+#define MCI_AVI_SETVIDEO_PALETTE_HALFTONE 0x0000FFFF
+#define MCIERR_AVI_OLDAVIFORMAT (MCIERR_CUSTOM_DRIVER_BASE+100)
+#define MCIERR_AVI_NOTINTERLEAVED (MCIERR_CUSTOM_DRIVER_BASE+101)
+#define MCIERR_AVI_NODISPDIB (MCIERR_CUSTOM_DRIVER_BASE+102)
+#define MCIERR_AVI_CANTPLAYFULLSCREEN (MCIERR_CUSTOM_DRIVER_BASE+103)
+#define MCIERR_AVI_TOOBIGFORVGA (MCIERR_CUSTOM_DRIVER_BASE+104)
+#define MCIERR_AVI_NOCOMPRESSOR (MCIERR_CUSTOM_DRIVER_BASE+105)
+#define MCIERR_AVI_DISPLAYERROR (MCIERR_CUSTOM_DRIVER_BASE+106)
+#define MCIERR_AVI_AUDIOERROR (MCIERR_CUSTOM_DRIVER_BASE+107)
+#define MCIERR_AVI_BADPALETTE (MCIERR_CUSTOM_DRIVER_BASE+108)
+#endif
diff --git a/tcc/include/winapi/mcx.h b/tcc/include/winapi/mcx.h
new file mode 100644
index 0000000..c7173b7
--- /dev/null
+++ b/tcc/include/winapi/mcx.h
@@ -0,0 +1,77 @@
+#ifndef _MCX_H
+#define _MCX_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#define DIALOPTION_BILLING 64
+#define DIALOPTION_QUIET 128
+#define DIALOPTION_DIALTONE 256
+#define MDMVOLFLAG_LOW 1
+#define MDMVOLFLAG_MEDIUM 2
+#define MDMVOLFLAG_HIGH 4
+#define MDMVOL_LOW 0
+#define MDMVOL_MEDIUM 1
+#define MDMVOL_HIGH 2
+#define MDMSPKRFLAG_OFF 1
+#define MDMSPKRFLAG_DIAL 2
+#define MDMSPKRFLAG_ON 4
+#define MDMSPKRFLAG_CALLSETUP 8
+#define MDMSPKR_OFF 0
+#define MDMSPKR_DIAL 1
+#define MDMSPKR_ON 2
+#define MDMSPKR_CALLSETUP 3
+#define MDM_COMPRESSION 1
+#define MDM_ERROR_CONTROL 2
+#define MDM_FORCED_EC 4
+#define MDM_CELLULAR 8
+#define MDM_FLOWCONTROL_HARD 16
+#define MDM_FLOWCONTROL_SOFT 32
+#define MDM_CCITT_OVERRIDE 64
+#define MDM_SPEED_ADJUST 128
+#define MDM_TONE_DIAL 256
+#define MDM_BLIND_DIAL 512
+#define MDM_V23_OVERRIDE 1024
+typedef struct _MODEMDEVCAPS {
+ DWORD dwActualSize;
+ DWORD dwRequiredSize;
+ DWORD dwDevSpecificOffset;
+ DWORD dwDevSpecificSize;
+ DWORD dwModemProviderVersion;
+ DWORD dwModemManufacturerOffset;
+ DWORD dwModemManufacturerSize;
+ DWORD dwModemModelOffset;
+ DWORD dwModemModelSize;
+ DWORD dwModemVersionOffset;
+ DWORD dwModemVersionSize;
+ DWORD dwDialOptions;
+ DWORD dwCallSetupFailTimer;
+ DWORD dwInactivityTimeout;
+ DWORD dwSpeakerVolume;
+ DWORD dwSpeakerMode;
+ DWORD dwModemOptions;
+ DWORD dwMaxDTERate;
+ DWORD dwMaxDCERate;
+ BYTE abVariablePortion[1];
+} MODEMDEVCAPS,*PMODEMDEVCAPS,*LPMODEMDEVCAPS;
+typedef struct _MODEMSETTINGS {
+ DWORD dwActualSize;
+ DWORD dwRequiredSize;
+ DWORD dwDevSpecificOffset;
+ DWORD dwDevSpecificSize;
+ DWORD dwCallSetupFailTimer;
+ DWORD dwInactivityTimeout;
+ DWORD dwSpeakerVolume;
+ DWORD dwSpeakerMode;
+ DWORD dwPreferredModemOptions;
+ DWORD dwNegotiatedModemOptions;
+ DWORD dwNegotiatedDCERate;
+ BYTE abVariablePortion[1];
+} MODEMSETTINGS,*PMODEMSETTINGS,*LPMODEMSETTINGS;
+#ifdef __cplusplus
+}
+#endif
+#endif /* _MCX_H */
diff --git a/tcc/include/winapi/mgm.h b/tcc/include/winapi/mgm.h
new file mode 100644
index 0000000..d8f0d89
--- /dev/null
+++ b/tcc/include/winapi/mgm.h
@@ -0,0 +1,75 @@
+#ifndef _MGM_H
+#define _MGM_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if (_WIN32_WINNT >= 0x0500)
+#define MGM_JOIN_STATE_FLAG 0x00000001
+#define MGM_FORWARD_STATE_FLAG 0x00000002
+#define MGM_MFE_STATS_0 0x00000001
+#define MGM_MFE_STATS_1 0x00000002
+typedef enum _MGM_ENUM_TYPES {
+ ANY_SOURCE=0,
+ ALL_SOURCES
+} MGM_ENUM_TYPES;
+typedef struct _MGM_IF_ENTRY {
+ DWORD dwIfIndex;
+ DWORD dwIfNextHopAddr;
+ BOOL bIGMP;
+ BOOL bIsEnabled;
+} MGM_IF_ENTRY,*PMGM_IF_ENTRY;
+typedef DWORD(CALLBACK *PMGM_RPF_CALLBACK)(DWORD,DWORD,DWORD,DWORD,PDWORD,PDWORD,PDWORD,DWORD,PBYTE,PBYTE);
+typedef DWORD(CALLBACK *PMGM_CREATION_ALERT_CALLBACK)(DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,PMGM_IF_ENTRY);
+typedef DWORD(CALLBACK *PMGM_PRUNE_ALERT_CALLBACK)(DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,BOOL,PDWORD);
+typedef DWORD(CALLBACK *PMGM_JOIN_ALERT_CALLBACK)(DWORD,DWORD,DWORD,DWORD,BOOL);
+typedef DWORD(CALLBACK *PMGM_WRONG_IF_CALLBACK)(DWORD,DWORD,DWORD,DWORD,DWORD,PBYTE);
+typedef DWORD(CALLBACK *PMGM_LOCAL_JOIN_CALLBACK)(DWORD,DWORD,DWORD,DWORD,DWORD,DWORD);
+typedef DWORD(CALLBACK *PMGM_LOCAL_LEAVE_CALLBACK)(DWORD,DWORD,DWORD,DWORD,DWORD,DWORD);
+typedef DWORD(CALLBACK *PMGM_DISABLE_IGMP_CALLBACK)(DWORD,DWORD);
+typedef DWORD(CALLBACK *PMGM_ENABLE_IGMP_CALLBACK)(DWORD,DWORD);
+typedef struct _ROUTING_PROTOCOL_CONFIG {
+ DWORD dwCallbackFlags;
+ PMGM_RPF_CALLBACK pfnRpfCallback;
+ PMGM_CREATION_ALERT_CALLBACK pfnCreationAlertCallback;
+ PMGM_PRUNE_ALERT_CALLBACK pfnPruneAlertCallback;
+ PMGM_JOIN_ALERT_CALLBACK pfnJoinAlertCallback;
+ PMGM_WRONG_IF_CALLBACK pfnWrongIfCallback;
+ PMGM_LOCAL_JOIN_CALLBACK pfnLocalJoinCallback;
+ PMGM_LOCAL_LEAVE_CALLBACK pfnLocalLeaveCallback;
+ PMGM_DISABLE_IGMP_CALLBACK pfnDisableIgmpCallback;
+ PMGM_ENABLE_IGMP_CALLBACK pfnEnableIgmpCallback;
+} ROUTING_PROTOCOL_CONFIG,*PROUTING_PROTOCOL_CONFIG;
+typedef struct _SOURCE_GROUP_ENTRY {
+ DWORD dwSourceAddr;
+ DWORD dwSourceMask;
+ DWORD dwGroupAddr;
+ DWORD dwGroupMask;
+} SOURCE_GROUP_ENTRY,*PSOURCE_GROUP_ENTRY;
+DWORD WINAPI MgmAddGroupMembershipEntry(HANDLE,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD);
+DWORD WINAPI MgmDeleteGroupMembershipEntry(HANDLE,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD);
+DWORD WINAPI MgmDeRegisterMProtocol(HANDLE);
+DWORD WINAPI MgmGetFirstMfe(PDWORD,PBYTE,PDWORD);
+DWORD WINAPI MgmGetFirstMfeStats(PDWORD,PBYTE,PDWORD,DWORD);
+DWORD WINAPI MgmGetMfe(PMIB_IPMCAST_MFE,PDWORD,PBYTE);
+DWORD WINAPI MgmGetMfeStats(PMIB_IPMCAST_MFE,PDWORD,PBYTE,DWORD);
+DWORD WINAPI MgmGetNextMfe(PMIB_IPMCAST_MFE,PDWORD,PBYTE,PDWORD);
+DWORD WINAPI MgmGetNextMfeStats(PMIB_IPMCAST_MFE,PDWORD,PBYTE,PDWORD,DWORD);
+DWORD WINAPI MgmGetProtocolOnInterface(DWORD,DWORD,PDWORD,PDWORD);
+DWORD WINAPI MgmGroupEnumerationEnd(HANDLE);
+DWORD WINAPI MgmGroupEnumerationGetNext(HANDLE,PDWORD,PBYTE,PDWORD);
+DWORD WINAPI MgmGroupEnumerationStart(HANDLE,MGM_ENUM_TYPES,HANDLE*);
+DWORD WINAPI MgmRegisterMProtocol(PROUTING_PROTOCOL_CONFIG,DWORD,DWORD,HANDLE*);
+DWORD WINAPI MgmReleaseInterfaceOwnership(HANDLE,DWORD,DWORD);
+DWORD WINAPI MgmSetMfe(HANDLE,PMIB_IPMCAST_MFE);
+DWORD WINAPI MgmTakeInterfaceOwnership(HANDLE,DWORD,DWORD);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/mgmtapi.h b/tcc/include/winapi/mgmtapi.h
new file mode 100644
index 0000000..89e68e3
--- /dev/null
+++ b/tcc/include/winapi/mgmtapi.h
@@ -0,0 +1,58 @@
+/*
+ mgmtapi.h - Header file for the SNMP Management API
+
+ Written by Filip Navara <xnavara@volny.cz>
+
+ References (2003-08-25):
+ http://msdn.microsoft.com/library/en-us/snmp/snmp/snmp_reference.asp
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+*/
+
+#ifndef _MGMTAPI_H
+#define _MGMTAPI_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifndef _SNMP_H
+#include <snmp.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define SNMP_MGMTAPI_TIMEOUT 40
+#define SNMP_MGMTAPI_SELECT_FDERRORS 41
+#define SNMP_MGMTAPI_TRAP_ERRORS 42
+#define SNMP_MGMTAPI_TRAP_DUPINIT 43
+#define SNMP_MGMTAPI_NOTRAPS 44
+#define SNMP_MGMTAPI_AGAIN 45
+#define SNMP_MGMTAPI_INVALID_CTL 46
+#define SNMP_MGMTAPI_INVALID_SESSION 47
+#define SNMP_MGMTAPI_INVALID_BUFFER 48
+#define MGMCTL_SETAGENTPORT 1
+
+#ifndef RC_INVOKED
+
+typedef PVOID LPSNMP_MGR_SESSION;
+
+BOOL WINSNMPAPI SnmpMgrClose(LPSNMP_MGR_SESSION);
+BOOL WINSNMPAPI SnmpMgrCtl(LPSNMP_MGR_SESSION,DWORD,LPVOID,DWORD,LPVOID,DWORD,LPDWORD);
+BOOL WINSNMPAPI SnmpMgrGetTrap(AsnObjectIdentifier*,AsnNetworkAddress*,AsnInteger*,AsnInteger*,AsnTimeticks*,SnmpVarBindList*);
+BOOL WINSNMPAPI SnmpMgrGetTrapEx(AsnObjectIdentifier*,AsnNetworkAddress*,AsnNetworkAddress*,AsnInteger*,AsnInteger*,AsnOctetString*,AsnTimeticks*,SnmpVarBindList*);
+BOOL WINSNMPAPI SnmpMgrOidToStr(AsnObjectIdentifier*,LPSTR*);
+LPSNMP_MGR_SESSION WINSNMPAPI SnmpMgrOpen(LPSTR,LPSTR,INT,INT);
+INT WINSNMPAPI SnmpMgrRequest(LPSNMP_MGR_SESSION,BYTE,SnmpVarBindList*,AsnInteger*,AsnInteger*);
+BOOL WINSNMPAPI SnmpMgrStrToOid(LPSTR,AsnObjectIdentifier*);
+BOOL WINSNMPAPI SnmpMgrTrapListen(HANDLE*);
+
+#endif /* RC_INVOKED */
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/mlang.h b/tcc/include/winapi/mlang.h
new file mode 100755
index 0000000..17a1f50
--- /dev/null
+++ b/tcc/include/winapi/mlang.h
@@ -0,0 +1,349 @@
+#ifndef _MLANG_H
+#define _MLANG_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#include <windows.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#pragma pack(push,1)
+
+#define MAX_MIMECP_NAME 64
+#define MAX_MIMECSET_NAME 50
+#define MAX_SCRIPT_NAME 48
+#define MAX_MIMEFACE_NAME 32
+#define MAX_RFC1766_NAME 6
+#define MAX_LOCALE_NAME 32
+
+typedef enum tagMIMECONTF {
+ MIMECONTF_MAILNEWS = 0x00000001,
+ MIMECONTF_BROWSER = 0x00000002,
+ MIMECONTF_MINIMAL = 0x00000004,
+ MIMECONTF_IMPORT = 0x00000008,
+ MIMECONTF_SAVABLE_MAILNEWS = 0x00000100,
+ MIMECONTF_SAVABLE_BROWSER = 0x00000200,
+ MIMECONTF_EXPORT = 0x00000400,
+ MIMECONTF_PRIVCONVERTER = 0x00010000,
+ MIMECONTF_VALID = 0x00020000,
+ MIMECONTF_VALID_NLS = 0x00040000,
+ MIMECONTF_MIME_IE4 = 0x10000000,
+ MIMECONTF_MIME_LATEST = 0x20000000,
+ MIMECONTF_MIME_REGISTRY = 0x40000000
+} MIMECONTF;
+typedef enum tagMLCONVCHARF {
+ MLCONVCHARF_NONE = 0,
+ MLCONVCHARF_AUTODETECT = 1,
+ MLCONVCHARF_NCR_ENTITIZE = 2,
+ MLCONVCHARF_NAME_ENTITIZE = 4,
+ MLCONVCHARF_USEDEFCHAR = 8,
+ MLCONVCHARF_NOBESTFITCHARS = 16
+} MLCONVCHAR;
+typedef enum tagMLCPF {
+ MLDETECTF_MAILNEWS = 0x0001,
+ MLDETECTF_BROWSER = 0x0002,
+ MLDETECTF_VALID = 0x0004,
+ MLDETECTF_VALID_NLS = 0x0008,
+ MLDETECTF_PRESERVE_ORDER = 0x0010,
+ MLDETECTF_PREFERRED_ONLY = 0x0020,
+ MLDETECTF_FILTER_SPECIALCHAR = 0x0040
+} MLCP;
+typedef enum tagMLDETECTCP {
+ MLDETECTCP_NONE = 0,
+ MLDETECTCP_7BIT = 1,
+ MLDETECTCP_8BIT = 2,
+ MLDETECTCP_DBCS = 4,
+ MLDETECTCP_HTML = 8
+} MLDETECTCP;
+typedef enum tagSCRIPTFONTCONTF {
+ SCRIPTCONTF_FIXED_FONT = 0x00000001,
+ SCRIPTCONTF_PROPORTIONAL_FONT = 0x00000002,
+ SCRIPTCONTF_SCRIPT_USER = 0x00010000,
+ SCRIPTCONTF_SCRIPT_HIDE = 0x00020000,
+ SCRIPTCONTF_SCRIPT_SYSTEM = 0x00040000
+} SCRIPTFONTCONTF;
+typedef enum tagSCRIPTCONTF {
+ sidDefault,
+ sidMerge,
+ sidAsciiSym,
+ sidAsciiLatin,
+ sidLatin,
+ sidGreek,
+ sidCyrillic,
+ sidArmenian,
+ sidHebrew,
+ sidArabic,
+ sidDevanagari,
+ sidBengali,
+ sidGurmukhi,
+ sidGujarati,
+ sidOriya,
+ sidTamil,
+ sidTelugu,
+ sidKannada,
+ sidMalayalam,
+ sidThai,
+ sidLao,
+ sidTibetan,
+ sidGeorgian,
+ sidHangul,
+ sidKana,
+ sidBopomofo,
+ sidHan,
+ sidEthiopic,
+ sidCanSyllabic,
+ sidCherokee,
+ sidYi,
+ sidBraille,
+ sidRunic,
+ sidOgham,
+ sidSinhala,
+ sidSyriac,
+ sidBurmese,
+ sidKhmer,
+ sidThaana,
+ sidMongolian,
+ sidLim,
+ sidFEFirst = sidHangul,
+ sidFELast = sidHan
+} SCRIPTCONTF;
+
+typedef struct tagDetectEncodingInfo {
+ UINT nLangID;
+ UINT nCodePage;
+ INT nDocPercent;
+ INT nConfidence;
+} DetectEncodingInfo, *pDetectEncodingInfo;
+typedef struct tagMIMECPINFO {
+ DWORD dwFlags;
+ UINT uiCodePage;
+ UINT uiFamilyCodePage;
+ WCHAR wszDescription[MAX_MIMECP_NAME];
+ WCHAR wszWebCharset[MAX_MIMECSET_NAME];
+ WCHAR wszHeaderCharset[MAX_MIMECSET_NAME];
+ WCHAR wszBodyCharset[MAX_MIMECSET_NAME];
+ WCHAR wszFixedWidthFont[MAX_MIMEFACE_NAME];
+ WCHAR wszProportionalFont[MAX_MIMEFACE_NAME];
+ BYTE bGDICharset;
+} MIMECPINFO, *PMIMECPINFO;
+typedef struct tagMIMECSETINFO {
+ UINT uiCodePage;
+ UINT uiInternetEncoding;
+ WCHAR wszCharset[MAX_MIMECSET_NAME];
+} MIMECSETINFO, *PMIMECSETINFO;
+typedef struct tagRFC1766INFO {
+ LCID lcid;
+ WCHAR wszRfc1766[MAX_RFC1766_NAME];
+ WCHAR wszLocaleName[MAX_LOCALE_NAME];
+} RFC1766INFO, *PRFC1766INFO;
+typedef BYTE SCRIPT_ID;
+typedef struct tagSCRIPTINFO {
+ SCRIPT_ID ScriptId;
+ UINT uiCodePage;
+ WCHAR wszDescription[MAX_SCRIPT_NAME];
+ WCHAR wszFixedWidthFont[MAX_MIMEFACE_NAME];
+ WCHAR wszProportionalFont[MAX_MIMEFACE_NAME];
+} SCRIPTINFO, *PSCRIPTINFO;
+typedef struct tagUNICODERANGE {
+ WCHAR wcFrom;
+ WCHAR wcTo;
+} UNICODERANGE;
+
+typedef struct tagSCRIPTFONTINFO SCRIPTFONTINFO;
+
+EXTERN_C const IID IID_IEnumCodePage;
+#define INTERFACE IEnumCodePage
+DECLARE_INTERFACE_(IEnumCodePage,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(Clone)(THIS_ IEnumCodePage**) PURE;
+ STDMETHOD(Next)(THIS_ ULONG,PMIMECPINFO,ULONG*) PURE;
+ STDMETHOD(Reset)(THIS) PURE;
+ STDMETHOD(Skip)(THIS_ ULONG) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IEnumRfc1766;
+#define INTERFACE IEnumRfc1766
+DECLARE_INTERFACE_(IEnumRfc1766,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(Clone)(THIS_ IEnumRfc1766**) PURE;
+ STDMETHOD(Next)(THIS_ ULONG,PRFC1766INFO,ULONG*) PURE;
+ STDMETHOD(Reset)(THIS) PURE;
+ STDMETHOD(Skip)(THIS_ ULONG) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IEnumScript;
+#define INTERFACE IEnumScript
+DECLARE_INTERFACE_(IEnumScript,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(Clone)(THIS_ IEnumScript**) PURE;
+ STDMETHOD(Next)(THIS_ ULONG,PSCRIPTINFO,ULONG*) PURE;
+ STDMETHOD(Reset)(THIS) PURE;
+ STDMETHOD(Skip)(THIS_ ULONG) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IMLangCodePages;
+#define INTERFACE IMLangCodePages
+DECLARE_INTERFACE_(IMLangCodePages,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetCharCodePages)(THIS_ WCHAR,DWORD*) PURE;
+ STDMETHOD(GetStrCodePages)(THIS_ const WCHAR *,long,DWORD,DWORD*,long*) PURE;
+ STDMETHOD(CodePageToCodePages)(THIS_ UINT,DWORD*) PURE;
+ STDMETHOD(CodePagesToCodePage)(THIS_ DWORD,UINT,UINT*) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IMLangConvertCharset;
+#define INTERFACE IMLangConvertCharset
+DECLARE_INTERFACE_(IMLangConvertCharset,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(Initialize)(THIS_ UINT,UINT,DWORD) PURE;
+ STDMETHOD(GetSourceCodePage)(THIS_ UINT*) PURE;
+ STDMETHOD(GetDestinationCodePage)(THIS_ UINT*) PURE;
+ STDMETHOD(GetProperty)(THIS_ DWORD*) PURE;
+ STDMETHOD(DoConversion)(THIS_ BYTE*,UINT*,BYTE*,UINT*) PURE;
+ STDMETHOD(DoConversionToUnicode)(THIS_ CHAR*,UINT*,WCHAR*,UINT*) PURE;
+ STDMETHOD(DoConversionFromUnicode)(THIS_ WCHAR*,UINT*,CHAR*,UINT*) PURE;
+};
+#undef INTERFACE
+EXTERN_C const CLSID CLSID_CMLangConvertCharset;
+
+EXTERN_C const IID IID_IMLangFontLink;
+#define INTERFACE IMLangFontLink
+DECLARE_INTERFACE_(IMLangFontLink,IMLangCodePages)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetCharCodePages)(THIS_ WCHAR,DWORD*) PURE;
+ STDMETHOD(GetStrCodePages)(THIS_ const WCHAR *,long,DWORD,DWORD*,long*) PURE;
+ STDMETHOD(CodePageToCodePages)(THIS_ UINT,DWORD*) PURE;
+ STDMETHOD(CodePagesToCodePage)(THIS_ DWORD,UINT,UINT*) PURE;
+ STDMETHOD(GetFontCodePages)(THIS_ HDC,HFONT,DWORD*) PURE;
+ STDMETHOD(MapFont)(THIS_ HDC,DWORD,HFONT,HFONT*) PURE;
+ STDMETHOD(ReleaseFont)(THIS_ HFONT) PURE;
+ STDMETHOD(ResetFontMapping)(THIS) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IMLangFontLink2;
+#define INTERFACE IMLangFontLink2
+DECLARE_INTERFACE_(IMLangFontLink2,IMLangCodePages)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetCharCodePages)(THIS_ WCHAR,DWORD*) PURE;
+ STDMETHOD(GetStrCodePages)(THIS_ const WCHAR *,long,DWORD,DWORD*,long*) PURE;
+ STDMETHOD(CodePageToCodePages)(THIS_ UINT,DWORD*) PURE;
+ STDMETHOD(CodePagesToCodePage)(THIS_ DWORD,UINT,UINT*) PURE;
+ STDMETHOD(GetFontCodePages)(THIS_ HDC,HFONT,DWORD*) PURE;
+ STDMETHOD(ReleaseFont)(THIS_ HFONT) PURE;
+ STDMETHOD(ResetFontMapping)(THIS) PURE;
+ STDMETHOD(MapFont)(THIS_ HDC,DWORD,WCHAR,HFONT*) PURE;
+ STDMETHOD(GetFontUnicodeRange)(THIS_ HDC,UINT*,UNICODERANGE*) PURE;
+ STDMETHOD(GetScriptFontInfo)(THIS_ SCRIPT_ID,DWORD,UINT*,SCRIPTFONTINFO*) PURE;
+ STDMETHOD(CodePageToScriptID)(THIS) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IMLangLineBreakConsole;
+#define INTERFACE IMLangLineBreakConsole
+DECLARE_INTERFACE_(IMLangLineBreakConsole,IMLangCodePages)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(BreakLineML)(THIS) PURE;
+ STDMETHOD(BreakLineW)(THIS_ LCID,const WCHAR*,long,long,long*,long*) PURE;
+ STDMETHOD(BreakLineA)(THIS_ LCID,UINT,const CHAR*,long,long,long*,long*) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IMultiLanguage;
+#define INTERFACE IMultiLanguage
+DECLARE_INTERFACE_(IMultiLanguage,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetNumberOfCodePageInfo)(THIS_ UINT*) PURE;
+ STDMETHOD(GetCodePageInfo)(THIS_ UINT,PMIMECPINFO) PURE;
+ STDMETHOD(GetFamilyCodePage)(THIS_ UINT,UINT*) PURE;
+ STDMETHOD(EnumCodePages)(THIS_ DWORD,IEnumCodePage**) PURE;
+ STDMETHOD(GetCharsetInfo)(THIS_ BSTR,PMIMECSETINFO) PURE;
+ STDMETHOD(IsConvertible)(THIS_ DWORD,DWORD) PURE;
+ STDMETHOD(ConvertString)(THIS_ DWORD*,DWORD,DWORD,BYTE*,UINT*,BYTE*,UINT*) PURE;
+ STDMETHOD(ConvertStringToUnicode)(THIS_ DWORD*,DWORD,CHAR*,UINT*,WCHAR*,UINT*) PURE;
+ STDMETHOD(ConvertStringFromUnicode)(THIS_ DWORD*,DWORD,WCHAR*,UINT*,CHAR*,UINT*) PURE;
+ STDMETHOD(ConvertStringReset)(THIS) PURE;
+ STDMETHOD(GetRfc1766FromLcid)(THIS_ LCID,BSTR*) PURE;
+ STDMETHOD(GetLcidFromRfc1766)(THIS_ LCID*,BSTR) PURE;
+ STDMETHOD(EnumRfc1766)(THIS_ IEnumRfc1766**) PURE;
+ STDMETHOD(GetRfc1766Info)(THIS_ LCID,PRFC1766INFO) PURE;
+ STDMETHOD(CreateConvertCharset)(THIS_ UINT,UINT,DWORD,IMLangConvertCharset**) PURE;
+};
+#undef INTERFACE
+EXTERN_C const CLSID CLSID_CMultiLanguage;
+
+EXTERN_C const IID IID_IMultiLanguage2;
+#define INTERFACE IMultiLanguage2
+DECLARE_INTERFACE_(IMultiLanguage2,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetNumberOfCodePageInfo)(THIS_ UINT*) PURE;
+ STDMETHOD(GetCodePageInfo)(THIS_ UINT,PMIMECPINFO) PURE;
+ STDMETHOD(GetFamilyCodePage)(THIS_ UINT,UINT*) PURE;
+ STDMETHOD(EnumCodePages)(THIS_ DWORD,IEnumCodePage**) PURE;
+ STDMETHOD(GetCharsetInfo)(THIS_ BSTR,PMIMECSETINFO) PURE;
+ STDMETHOD(IsConvertible)(THIS_ DWORD,DWORD) PURE;
+ STDMETHOD(ConvertString)(THIS_ DWORD*,DWORD,DWORD,BYTE*,UINT*,BYTE*,UINT*) PURE;
+ STDMETHOD(ConvertStringToUnicode)(THIS_ DWORD*,DWORD,CHAR*,UINT*,WCHAR*,UINT*) PURE;
+ STDMETHOD(ConvertStringFromUnicode)(THIS_ DWORD*,DWORD,WCHAR*,UINT*,CHAR*,UINT*) PURE;
+ STDMETHOD(ConvertStringReset)(THIS) PURE;
+ STDMETHOD(GetRfc1766FromLcid)(THIS_ LCID,BSTR*) PURE;
+ STDMETHOD(GetLcidFromRfc1766)(THIS_ LCID*,BSTR) PURE;
+ STDMETHOD(EnumRfc1766)(THIS_ IEnumRfc1766**) PURE;
+ STDMETHOD(GetRfc1766Info)(THIS_ LCID,PRFC1766INFO) PURE;
+ STDMETHOD(CreateConvertCharset)(THIS_ UINT,UINT,DWORD,IMLangConvertCharset**) PURE;
+ STDMETHOD(ConvertStringInIStream)(THIS_ DWORD*,DWORD,WCHAR*,DWORD,DWORD,IStream*,IStream*) PURE;
+ STDMETHOD(ConvertStringToUnicodeEx)(THIS_ DWORD*,DWORD,CHAR*,UINT*,WCHAR*,UINT*,DWORD,WCHAR*) PURE;
+ STDMETHOD(ConvertStringFromUnicodeEx)(THIS_ DWORD*,DWORD,WCHAR*,UINT*,CHAR*,UINT*,DWORD,WCHAR*) PURE;
+ STDMETHOD(DetectCodepageInIStream)(THIS_ DWORD,DWORD,IStream*,DetectEncodingInfo*,INT*) PURE;
+ STDMETHOD(DetectInputCodepage)(THIS_ DWORD,DWORD,CHAR*,INT*,DetectEncodingInfo*,INT*) PURE;
+ STDMETHOD(ValidateCodePage)(THIS) PURE;
+ STDMETHOD(GetCodePageDescription)(THIS_ UINT,LCID,LPWSTR,int) PURE;
+ STDMETHOD(IsCodePageInstallable)(THIS) PURE;
+ STDMETHOD(SetMimeDBSource)(THIS_ MIMECONTF) PURE;
+ STDMETHOD(GetNumberOfScripts)(THIS_ UINT*) PURE;
+ STDMETHOD(EnumScripts)(THIS_ DWORD,LANGID,IEnumScript**) PURE;
+};
+#undef INTERFACE
+
+
+#pragma pack(pop)
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/mmreg.h b/tcc/include/winapi/mmreg.h
new file mode 100644
index 0000000..9867db0
--- /dev/null
+++ b/tcc/include/winapi/mmreg.h
@@ -0,0 +1,71 @@
+#ifndef _MMREG_H
+#define _MMREG_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifndef _MMSYSTEM_H
+#include <mmsystem.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--- DirectShow Reference - DirectShow Structures */
+typedef struct mpeg1waveformat_tag {
+ WAVEFORMATEX wfx;
+ WORD fwHeadLayer;
+ DWORD dwHeadBitrate;
+ WORD fwHeadMode;
+ WORD fwHeadModeExt;
+ WORD wHeadEmphasis;
+ WORD fwHeadFlags;
+ DWORD dwPTSLow;
+ DWORD dwPTSHigh;
+} MPEG1WAVEFORMAT;
+#define ACM_MPEG_LAYER1 0x0001
+#define ACM_MPEG_LAYER2 0x0002
+#define ACM_MPEG_LAYER3 0x0004
+#define ACM_MPEG_STEREO 0x0001
+#define ACM_MPEG_JOINTSTEREO 0x0002
+#define ACM_MPEG_DUALCHANNEL 0x0004
+#define ACM_MPEG_SINGLECHANNEL 0x0008
+#define ACM_MPEG_PRIVATEBIT 0x0001
+#define ACM_MPEG_COPYRIGHT 0x0002
+#define ACM_MPEG_ORIGINALHOME 0x0004
+#define ACM_MPEG_PROTECTIONBIT 0x0008
+#define ACM_MPEG_ID_MPEG1 0x0010
+typedef struct {
+ WAVEFORMATEX Format;
+ union {
+ WORD wValidBitsPerSample;
+ WORD wSamplesPerBlock;
+ WORD wReserved;
+ } Samples;
+ DWORD dwChannelMask;
+ GUID SubFormat;
+} WAVEFORMATEXTENSIBLE,*PWAVEFORMATEXTENSIBLE;
+#define SPEAKER_FRONT_LEFT 0x1
+#define SPEAKER_FRONT_RIGHT 0x2
+#define SPEAKER_FRONT_CENTER 0x4
+#define SPEAKER_LOW_FREQUENCY 0x8
+#define SPEAKER_BACK_LEFT 0x10
+#define SPEAKER_BACK_RIGHT 0x20
+#define SPEAKER_FRONT_LEFT_OF_CENTER 0x40
+#define SPEAKER_FRONT_RIGHT_OF_CENTER 0x80
+#define SPEAKER_BACK_CENTER 0x100
+#define SPEAKER_SIDE_LEFT 0x200
+#define SPEAKER_SIDE_RIGHT 0x400
+#define SPEAKER_TOP_CENTER 0x800
+#define SPEAKER_TOP_FRONT_LEFT 0x1000
+#define SPEAKER_TOP_FRONT_CENTER 0x2000
+#define SPEAKER_TOP_FRONT_RIGHT 0x4000
+#define SPEAKER_TOP_BACK_LEFT 0x8000
+#define SPEAKER_TOP_BACK_CENTER 0x10000
+#define SPEAKER_TOP_BACK_RIGHT 0x20000
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/mmsystem.h b/tcc/include/winapi/mmsystem.h
new file mode 100644
index 0000000..70c612a
--- /dev/null
+++ b/tcc/include/winapi/mmsystem.h
@@ -0,0 +1,1943 @@
+
+#ifndef _MMSYSTEM_H
+#define _MMSYSTEM_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+#pragma pack(push,1)
+#ifdef __cplusplus
+extern "C" {
+#endif
+#define WINMMAPI DECLSPEC_IMPORT
+#define _loadds
+#define _huge
+#define MAXPNAMELEN 32
+#define MAXERRORLENGTH 256
+#define MAX_JOYSTICKOEMVXDNAME 260
+#define _MMRESULT_
+#define TIME_MS 1
+#define TIME_SAMPLES 2
+#define TIME_BYTES 4
+#define TIME_SMPTE 8
+#define TIME_MIDI 16
+#define TIME_TICKS 32
+#define MAKEFOURCC(c0,c1,c2,c3) ((DWORD)(BYTE)(c0)|((DWORD)(BYTE)(c1)<<8)|((DWORD)(BYTE)(c2)<<16)|((DWORD)(BYTE)(c3)<<24))
+#ifndef mmioFOURCC
+#define mmioFOURCC(c0,c1,c2,c3) MAKEFOURCC(c0,c1,c2,c3)
+#endif
+#define MM_JOY1MOVE 0x3A0
+#define MM_JOY2MOVE 0x3A1
+#define MM_JOY1ZMOVE 0x3A2
+#define MM_JOY2ZMOVE 0x3A3
+#define MM_JOY1BUTTONDOWN 0x3B5
+#define MM_JOY2BUTTONDOWN 0x3B6
+#define MM_JOY1BUTTONUP 0x3B7
+#define MM_JOY2BUTTONUP 0x3B8
+#define MM_MCINOTIFY 0x3B9
+#define MM_WOM_OPEN 0x3BB
+#define MM_WOM_CLOSE 0x3BC
+#define MM_WOM_DONE 0x3BD
+#define MM_WIM_OPEN 0x3BE
+#define MM_WIM_CLOSE 0x3BF
+#define MM_WIM_DATA 0x3C0
+#define MM_MIM_OPEN 0x3C1
+#define MM_MIM_CLOSE 0x3C2
+#define MM_MIM_DATA 0x3C3
+#define MM_MIM_LONGDATA 0x3C4
+#define MM_MIM_ERROR 0x3C5
+#define MM_MIM_LONGERROR 0x3C6
+#define MM_MOM_OPEN 0x3C7
+#define MM_MOM_CLOSE 0x3C8
+#define MM_MOM_DONE 0x3C9
+#define MM_DRVM_OPEN 0x3D0
+#define MM_DRVM_CLOSE 0x3D1
+#define MM_DRVM_DATA 0x3D2
+#define MM_DRVM_ERROR 0x3D3
+#define MM_STREAM_OPEN 0x3D4
+#define MM_STREAM_CLOSE 0x3D5
+#define MM_STREAM_DONE 0x3D6
+#define MM_STREAM_ERROR 0x3D7
+#define MM_MOM_POSITIONCB 0x3CA
+#define MM_MCISIGNAL 0x3CB
+#define MM_MIM_MOREDATA 0x3CC
+#define MM_MIXM_LINE_CHANGE 0x3D0
+#define MM_MIXM_CONTROL_CHANGE 0x3D1
+#define MMSYSERR_BASE 0
+#define WAVERR_BASE 32
+#define MIDIERR_BASE 64
+#define TIMERR_BASE 96
+#define JOYERR_BASE 160
+#define MCIERR_BASE 256
+#define MIXERR_BASE 1024
+#define MCI_STRING_OFFSET 512
+#define MCI_VD_OFFSET 1024
+#define MCI_CD_OFFSET 1088
+#define MCI_WAVE_OFFSET 1152
+#define MCI_SEQ_OFFSET 1216
+#define MMSYSERR_NOERROR 0
+#define MMSYSERR_ERROR (MMSYSERR_BASE+1)
+#define MMSYSERR_BADDEVICEID (MMSYSERR_BASE+2)
+#define MMSYSERR_NOTENABLED (MMSYSERR_BASE+3)
+#define MMSYSERR_ALLOCATED (MMSYSERR_BASE+4)
+#define MMSYSERR_INVALHANDLE (MMSYSERR_BASE+5)
+#define MMSYSERR_NODRIVER (MMSYSERR_BASE+6)
+#define MMSYSERR_NOMEM (MMSYSERR_BASE+7)
+#define MMSYSERR_NOTSUPPORTED (MMSYSERR_BASE+8)
+#define MMSYSERR_BADERRNUM (MMSYSERR_BASE+9)
+#define MMSYSERR_INVALFLAG (MMSYSERR_BASE+10)
+#define MMSYSERR_INVALPARAM (MMSYSERR_BASE+11)
+#define MMSYSERR_HANDLEBUSY (MMSYSERR_BASE+12)
+#define MMSYSERR_INVALIDALIAS (MMSYSERR_BASE+13)
+#define MMSYSERR_BADDB (MMSYSERR_BASE+14)
+#define MMSYSERR_KEYNOTFOUND (MMSYSERR_BASE+15)
+#define MMSYSERR_READERROR (MMSYSERR_BASE+16)
+#define MMSYSERR_WRITEERROR (MMSYSERR_BASE+17)
+#define MMSYSERR_DELETEERROR (MMSYSERR_BASE+18)
+#define MMSYSERR_VALNOTFOUND (MMSYSERR_BASE+19)
+#define MMSYSERR_NODRIVERCB (MMSYSERR_BASE+20)
+#define MMSYSERR_LASTERROR (MMSYSERR_BASE+20)
+#define DRV_LOAD 1
+#define DRV_ENABLE 2
+#define DRV_OPEN 3
+#define DRV_CLOSE 4
+#define DRV_DISABLE 5
+#define DRV_FREE 6
+#define DRV_CONFIGURE 7
+#define DRV_QUERYCONFIGURE 8
+#define DRV_INSTALL 9
+#define DRV_REMOVE 10
+#define DRV_EXITSESSION 11
+#define DRV_POWER 15
+#define DRV_RESERVED 0x800
+#define DRV_USER 0x4000
+#define DRVCNF_CANCEL 0
+#define DRVCNF_OK 1
+#define DRVCNF_RESTART 2
+#define DRV_CANCEL DRVCNF_CANCEL
+#define DRV_OK DRVCNF_OK
+#define DRV_RESTART DRVCNF_RESTART
+#define DRV_MCI_FIRST DRV_RESERVED
+#define DRV_MCI_LAST (DRV_RESERVED+0xFFF)
+#define CALLBACK_TYPEMASK 0x70000
+#define CALLBACK_NULL 0
+#define CALLBACK_WINDOW 0x10000
+#define CALLBACK_TASK 0x20000
+#define CALLBACK_FUNCTION 0x30000
+#define CALLBACK_THREAD CALLBACK_TASK
+#define CALLBACK_EVENT 0x50000
+#define SND_SYNC 0
+#define SND_ASYNC 1
+#define SND_NODEFAULT 2
+#define SND_MEMORY 4
+#define SND_LOOP 8
+#define SND_NOSTOP 16
+#define SND_NOWAIT 0x2000
+#define SND_ALIAS 0x10000
+#define SND_ALIAS_ID 0x110000
+#define SND_FILENAME 0x20000
+#define SND_RESOURCE 0x40004
+#define SND_PURGE 0x40
+#define SND_APPLICATION 0x80
+#define SND_ALIAS_START 0
+#define sndAlias(c0,c1) (SND_ALIAS_START+((DWORD)(BYTE)(c0)|((DWORD)(BYTE)(c1)<<8)))
+#define SND_ALIAS_SYSTEMASTERISK sndAlias('S','*')
+#define SND_ALIAS_SYSTEMQUESTION sndAlias('S','?')
+#define SND_ALIAS_SYSTEMHAND sndAlias('S','H')
+#define SND_ALIAS_SYSTEMEXIT sndAlias('S','E')
+#define SND_ALIAS_SYSTEMSTART sndAlias('S','S')
+#define SND_ALIAS_SYSTEMWELCOME sndAlias('S','W')
+#define SND_ALIAS_SYSTEMEXCLAMATION sndAlias('S','!')
+#define SND_ALIAS_SYSTEMDEFAULT sndAlias('S','D')
+#define WAVERR_BADFORMAT (WAVERR_BASE + 0)
+#define WAVERR_STILLPLAYING (WAVERR_BASE + 1)
+#define WAVERR_UNPREPARED (WAVERR_BASE + 2)
+#define WAVERR_SYNC (WAVERR_BASE + 3)
+#define WAVERR_LASTERROR (WAVERR_BASE + 3)
+#define WOM_OPEN MM_WOM_OPEN
+#define WOM_CLOSE MM_WOM_CLOSE
+#define WOM_DONE MM_WOM_DONE
+#define WIM_OPEN MM_WIM_OPEN
+#define WIM_CLOSE MM_WIM_CLOSE
+#define WIM_DATA MM_WIM_DATA
+#define WAVE_MAPPER ((UINT)-1)
+#define WAVE_FORMAT_QUERY 1
+#define WAVE_ALLOWSYNC 2
+#define WAVE_MAPPED 4
+#define WAVE_FORMAT_DIRECT 8
+#define WAVE_FORMAT_DIRECT_QUERY (WAVE_FORMAT_QUERY|WAVE_FORMAT_DIRECT)
+#define WHDR_DONE 1
+#define WHDR_PREPARED 2
+#define WHDR_BEGINLOOP 4
+#define WHDR_ENDLOOP 8
+#define WHDR_INQUEUE 16
+#define WAVECAPS_PITCH 1
+#define WAVECAPS_PLAYBACKRATE 2
+#define WAVECAPS_VOLUME 4
+#define WAVECAPS_LRVOLUME 8
+#define WAVECAPS_SYNC 16
+#define WAVECAPS_SAMPLEACCURATE 32
+#define WAVECAPS_DIRECTSOUND 64
+#define WAVE_INVALIDFORMAT 0
+#define WAVE_FORMAT_1M08 1
+#define WAVE_FORMAT_1S08 2
+#define WAVE_FORMAT_1M16 4
+#define WAVE_FORMAT_1S16 8
+#define WAVE_FORMAT_2M08 16
+#define WAVE_FORMAT_2S08 32
+#define WAVE_FORMAT_2M16 64
+#define WAVE_FORMAT_2S16 128
+#define WAVE_FORMAT_4M08 256
+#define WAVE_FORMAT_4S08 512
+#define WAVE_FORMAT_4M16 1024
+#define WAVE_FORMAT_4S16 2048
+#define WAVE_FORMAT_PCM 1
+#define WAVE_FORMAT_EXTENSIBLE 0xFFFE
+#define MIDIERR_UNPREPARED MIDIERR_BASE
+#define MIDIERR_STILLPLAYING (MIDIERR_BASE+1)
+#define MIDIERR_NOMAP (MIDIERR_BASE+2)
+#define MIDIERR_NOTREADY (MIDIERR_BASE+3)
+#define MIDIERR_NODEVICE (MIDIERR_BASE+4)
+#define MIDIERR_INVALIDSETUP (MIDIERR_BASE+5)
+#define MIDIERR_BADOPENMODE (MIDIERR_BASE+6)
+#define MIDIERR_DONT_CONTINUE (MIDIERR_BASE+7)
+#define MIDIERR_LASTERROR (MIDIERR_BASE+7)
+#define MIDIPATCHSIZE 128
+#define MIM_OPEN MM_MIM_OPEN
+#define MIM_CLOSE MM_MIM_CLOSE
+#define MIM_DATA MM_MIM_DATA
+#define MIM_LONGDATA MM_MIM_LONGDATA
+#define MIM_ERROR MM_MIM_ERROR
+#define MIM_LONGERROR MM_MIM_LONGERROR
+#define MOM_OPEN MM_MOM_OPEN
+#define MOM_CLOSE MM_MOM_CLOSE
+#define MOM_DONE MM_MOM_DONE
+#define MIM_MOREDATA MM_MIM_MOREDATA
+#define MOM_POSITIONCB MM_MOM_POSITIONCB
+#define MIDIMAPPER ((UINT)-1)
+#define MIDI_MAPPER ((UINT)-1)
+#define MIDI_IO_STATUS 32
+#define MIDI_CACHE_ALL 1
+#define MIDI_CACHE_BESTFIT 2
+#define MIDI_CACHE_QUERY 3
+#define MIDI_UNCACHE 4
+#define MOD_MIDIPORT 1
+#define MOD_SYNTH 2
+#define MOD_SQSYNTH 3
+#define MOD_FMSYNTH 4
+#define MOD_MAPPER 5
+#define MIDICAPS_VOLUME 1
+#define MIDICAPS_LRVOLUME 2
+#define MIDICAPS_CACHE 4
+#define MIDICAPS_STREAM 8
+#define MHDR_DONE 1
+#define MHDR_PREPARED 2
+#define MHDR_INQUEUE 4
+#define MHDR_ISSTRM 8
+#define MEVT_F_SHORT 0
+#define MEVT_F_LONG 0x80000000
+#define MEVT_F_CALLBACK 0x40000000
+#define MEVT_EVENTTYPE(x) ((BYTE)(((x)>>24)&0xFF))
+#define MEVT_EVENTPARM(x) ((DWORD)((x)&0xFFFFFFL))
+#define MEVT_SHORTMSG 0
+#define MEVT_TEMPO 1
+#define MEVT_NOP 2
+#define MEVT_LONGMSG ((BYTE)0x80)
+#define MEVT_COMMENT ((BYTE)0x82)
+#define MEVT_VERSION ((BYTE)0x84)
+#define MIDISTRM_ERROR (-2)
+#define MIDIPROP_SET 0x80000000
+#define MIDIPROP_GET 0x40000000
+#define MIDIPROP_TIMEDIV 1
+#define MIDIPROP_TEMPO 2
+#define AUX_MAPPER ((UINT)-1)
+#define AUXCAPS_CDAUDIO 1
+#define AUXCAPS_AUXIN 2
+#define AUXCAPS_VOLUME 1
+#define AUXCAPS_LRVOLUME 2
+#define MIXER_SHORT_NAME_CHARS 16
+#define MIXER_LONG_NAME_CHARS 64
+#define MIXERR_INVALLINE MIXERR_BASE
+#define MIXERR_INVALCONTROL (MIXERR_BASE+1)
+#define MIXERR_INVALVALUE (MIXERR_BASE+2)
+#define MIXERR_LASTERROR (MIXERR_BASE+2)
+#define MIXER_OBJECTF_HANDLE 0x80000000
+#define MIXER_OBJECTF_MIXER 0
+#define MIXER_OBJECTF_HMIXER (MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_MIXER)
+#define MIXER_OBJECTF_WAVEOUT 0x10000000
+#define MIXER_OBJECTF_HWAVEOUT (MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_WAVEOUT)
+#define MIXER_OBJECTF_WAVEIN 0x20000000
+#define MIXER_OBJECTF_HWAVEIN (MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_WAVEIN)
+#define MIXER_OBJECTF_MIDIOUT 0x30000000
+#define MIXER_OBJECTF_HMIDIOUT (MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_MIDIOUT)
+#define MIXER_OBJECTF_MIDIIN 0x40000000
+#define MIXER_OBJECTF_HMIDIIN (MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_MIDIIN)
+#define MIXER_OBJECTF_AUX 0x50000000
+#define MIXERLINE_LINEF_ACTIVE 1
+#define MIXERLINE_LINEF_DISCONNECTED 0x8000
+#define MIXERLINE_LINEF_SOURCE 0x80000000
+#define MIXERLINE_COMPONENTTYPE_DST_FIRST 0
+#define MIXERLINE_COMPONENTTYPE_DST_UNDEFINED MIXERLINE_COMPONENTTYPE_DST_FIRST
+#define MIXERLINE_COMPONENTTYPE_DST_DIGITAL (MIXERLINE_COMPONENTTYPE_DST_FIRST+1)
+#define MIXERLINE_COMPONENTTYPE_DST_LINE (MIXERLINE_COMPONENTTYPE_DST_FIRST+2)
+#define MIXERLINE_COMPONENTTYPE_DST_MONITOR (MIXERLINE_COMPONENTTYPE_DST_FIRST+3)
+#define MIXERLINE_COMPONENTTYPE_DST_SPEAKERS (MIXERLINE_COMPONENTTYPE_DST_FIRST+4)
+#define MIXERLINE_COMPONENTTYPE_DST_HEADPHONES (MIXERLINE_COMPONENTTYPE_DST_FIRST+5)
+#define MIXERLINE_COMPONENTTYPE_DST_TELEPHONE (MIXERLINE_COMPONENTTYPE_DST_FIRST+6)
+#define MIXERLINE_COMPONENTTYPE_DST_WAVEIN (MIXERLINE_COMPONENTTYPE_DST_FIRST+7)
+#define MIXERLINE_COMPONENTTYPE_DST_VOICEIN (MIXERLINE_COMPONENTTYPE_DST_FIRST+8)
+#define MIXERLINE_COMPONENTTYPE_DST_LAST (MIXERLINE_COMPONENTTYPE_DST_FIRST+8)
+#define MIXERLINE_COMPONENTTYPE_SRC_FIRST 0x1000
+#define MIXERLINE_COMPONENTTYPE_SRC_UNDEFINED MIXERLINE_COMPONENTTYPE_SRC_FIRST
+#define MIXERLINE_COMPONENTTYPE_SRC_DIGITAL (MIXERLINE_COMPONENTTYPE_SRC_FIRST+1)
+#define MIXERLINE_COMPONENTTYPE_SRC_LINE (MIXERLINE_COMPONENTTYPE_SRC_FIRST+2)
+#define MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE (MIXERLINE_COMPONENTTYPE_SRC_FIRST+3)
+#define MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER (MIXERLINE_COMPONENTTYPE_SRC_FIRST+4)
+#define MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC (MIXERLINE_COMPONENTTYPE_SRC_FIRST+5)
+#define MIXERLINE_COMPONENTTYPE_SRC_TELEPHONE (MIXERLINE_COMPONENTTYPE_SRC_FIRST+6)
+#define MIXERLINE_COMPONENTTYPE_SRC_PCSPEAKER (MIXERLINE_COMPONENTTYPE_SRC_FIRST+7)
+#define MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT (MIXERLINE_COMPONENTTYPE_SRC_FIRST+8)
+#define MIXERLINE_COMPONENTTYPE_SRC_AUXILIARY (MIXERLINE_COMPONENTTYPE_SRC_FIRST+9)
+#define MIXERLINE_COMPONENTTYPE_SRC_ANALOG (MIXERLINE_COMPONENTTYPE_SRC_FIRST+10)
+#define MIXERLINE_COMPONENTTYPE_SRC_LAST (MIXERLINE_COMPONENTTYPE_SRC_FIRST+10)
+#define MIXERLINE_TARGETTYPE_UNDEFINED 0
+#define MIXERLINE_TARGETTYPE_WAVEOUT 1
+#define MIXERLINE_TARGETTYPE_WAVEIN 2
+#define MIXERLINE_TARGETTYPE_MIDIOUT 3
+#define MIXERLINE_TARGETTYPE_MIDIIN 4
+#define MIXERLINE_TARGETTYPE_AUX 5
+#define MIXER_GETLINEINFOF_DESTINATION 0
+#define MIXER_GETLINEINFOF_SOURCE 1
+#define MIXER_GETLINEINFOF_LINEID 2
+#define MIXER_GETLINEINFOF_COMPONENTTYPE 3
+#define MIXER_GETLINEINFOF_TARGETTYPE 4
+#define MIXER_GETLINEINFOF_QUERYMASK 15
+#define MIXERCONTROL_CONTROLF_UNIFORM 1
+#define MIXERCONTROL_CONTROLF_MULTIPLE 2
+#define MIXERCONTROL_CONTROLF_DISABLED 0x80000000
+#define MIXERCONTROL_CT_CLASS_MASK 0xF0000000
+#define MIXERCONTROL_CT_CLASS_CUSTOM 0
+#define MIXERCONTROL_CT_CLASS_METER 0x10000000
+#define MIXERCONTROL_CT_CLASS_SWITCH 0x20000000
+#define MIXERCONTROL_CT_CLASS_NUMBER 0x30000000
+#define MIXERCONTROL_CT_CLASS_SLIDER 0x40000000
+#define MIXERCONTROL_CT_CLASS_FADER 0x50000000
+#define MIXERCONTROL_CT_CLASS_TIME 0x60000000
+#define MIXERCONTROL_CT_CLASS_LIST 0x70000000
+#define MIXERCONTROL_CT_SUBCLASS_MASK 0xF000000
+#define MIXERCONTROL_CT_SC_SWITCH_BOOLEAN 0
+#define MIXERCONTROL_CT_SC_SWITCH_BUTTON 0x1000000
+#define MIXERCONTROL_CT_SC_METER_POLLED 0
+#define MIXERCONTROL_CT_SC_TIME_MICROSECS 0
+#define MIXERCONTROL_CT_SC_TIME_MILLISECS 0x1000000
+#define MIXERCONTROL_CT_SC_LIST_SINGLE 0
+#define MIXERCONTROL_CT_SC_LIST_MULTIPLE 0x1000000
+#define MIXERCONTROL_CT_UNITS_MASK 0xFF0000
+#define MIXERCONTROL_CT_UNITS_CUSTOM 0
+#define MIXERCONTROL_CT_UNITS_BOOLEAN 0x10000
+#define MIXERCONTROL_CT_UNITS_SIGNED 0x20000
+#define MIXERCONTROL_CT_UNITS_UNSIGNED 0x30000
+#define MIXERCONTROL_CT_UNITS_DECIBELS 0x40000
+#define MIXERCONTROL_CT_UNITS_PERCENT 0x50000
+#define MIXERCONTROL_CONTROLTYPE_CUSTOM (MIXERCONTROL_CT_CLASS_CUSTOM|MIXERCONTROL_CT_UNITS_CUSTOM)
+#define MIXERCONTROL_CONTROLTYPE_BOOLEANMETER (MIXERCONTROL_CT_CLASS_METER|MIXERCONTROL_CT_SC_METER_POLLED|MIXERCONTROL_CT_UNITS_BOOLEAN)
+#define MIXERCONTROL_CONTROLTYPE_SIGNEDMETER (MIXERCONTROL_CT_CLASS_METER|MIXERCONTROL_CT_SC_METER_POLLED|MIXERCONTROL_CT_UNITS_SIGNED)
+#define MIXERCONTROL_CONTROLTYPE_PEAKMETER (MIXERCONTROL_CONTROLTYPE_SIGNEDMETER+1)
+#define MIXERCONTROL_CONTROLTYPE_UNSIGNEDMETER (MIXERCONTROL_CT_CLASS_METER|MIXERCONTROL_CT_SC_METER_POLLED|MIXERCONTROL_CT_UNITS_UNSIGNED)
+#define MIXERCONTROL_CONTROLTYPE_BOOLEAN (MIXERCONTROL_CT_CLASS_SWITCH|MIXERCONTROL_CT_SC_SWITCH_BOOLEAN|MIXERCONTROL_CT_UNITS_BOOLEAN)
+#define MIXERCONTROL_CONTROLTYPE_ONOFF (MIXERCONTROL_CONTROLTYPE_BOOLEAN+1)
+#define MIXERCONTROL_CONTROLTYPE_MUTE (MIXERCONTROL_CONTROLTYPE_BOOLEAN+2)
+#define MIXERCONTROL_CONTROLTYPE_MONO (MIXERCONTROL_CONTROLTYPE_BOOLEAN+3)
+#define MIXERCONTROL_CONTROLTYPE_LOUDNESS (MIXERCONTROL_CONTROLTYPE_BOOLEAN+4)
+#define MIXERCONTROL_CONTROLTYPE_STEREOENH (MIXERCONTROL_CONTROLTYPE_BOOLEAN+5)
+#define MIXERCONTROL_CONTROLTYPE_BUTTON (MIXERCONTROL_CT_CLASS_SWITCH|MIXERCONTROL_CT_SC_SWITCH_BUTTON|MIXERCONTROL_CT_UNITS_BOOLEAN)
+#define MIXERCONTROL_CONTROLTYPE_DECIBELS (MIXERCONTROL_CT_CLASS_NUMBER|MIXERCONTROL_CT_UNITS_DECIBELS)
+#define MIXERCONTROL_CONTROLTYPE_SIGNED (MIXERCONTROL_CT_CLASS_NUMBER|MIXERCONTROL_CT_UNITS_SIGNED)
+#define MIXERCONTROL_CONTROLTYPE_UNSIGNED (MIXERCONTROL_CT_CLASS_NUMBER|MIXERCONTROL_CT_UNITS_UNSIGNED)
+#define MIXERCONTROL_CONTROLTYPE_PERCENT (MIXERCONTROL_CT_CLASS_NUMBER|MIXERCONTROL_CT_UNITS_PERCENT)
+#define MIXERCONTROL_CONTROLTYPE_SLIDER (MIXERCONTROL_CT_CLASS_SLIDER|MIXERCONTROL_CT_UNITS_SIGNED)
+#define MIXERCONTROL_CONTROLTYPE_PAN (MIXERCONTROL_CONTROLTYPE_SLIDER+1)
+#define MIXERCONTROL_CONTROLTYPE_QSOUNDPAN (MIXERCONTROL_CONTROLTYPE_SLIDER+2)
+#define MIXERCONTROL_CONTROLTYPE_FADER (MIXERCONTROL_CT_CLASS_FADER|MIXERCONTROL_CT_UNITS_UNSIGNED)
+#define MIXERCONTROL_CONTROLTYPE_VOLUME (MIXERCONTROL_CONTROLTYPE_FADER+1)
+#define MIXERCONTROL_CONTROLTYPE_BASS (MIXERCONTROL_CONTROLTYPE_FADER+2)
+#define MIXERCONTROL_CONTROLTYPE_TREBLE (MIXERCONTROL_CONTROLTYPE_FADER+3)
+#define MIXERCONTROL_CONTROLTYPE_EQUALIZER (MIXERCONTROL_CONTROLTYPE_FADER+4)
+#define MIXERCONTROL_CONTROLTYPE_SINGLESELECT (MIXERCONTROL_CT_CLASS_LIST|MIXERCONTROL_CT_SC_LIST_SINGLE|MIXERCONTROL_CT_UNITS_BOOLEAN)
+#define MIXERCONTROL_CONTROLTYPE_MUX (MIXERCONTROL_CONTROLTYPE_SINGLESELECT+1)
+#define MIXERCONTROL_CONTROLTYPE_MULTIPLESELECT (MIXERCONTROL_CT_CLASS_LIST|MIXERCONTROL_CT_SC_LIST_MULTIPLE|MIXERCONTROL_CT_UNITS_BOOLEAN)
+#define MIXERCONTROL_CONTROLTYPE_MIXER (MIXERCONTROL_CONTROLTYPE_MULTIPLESELECT+1)
+#define MIXERCONTROL_CONTROLTYPE_MICROTIME (MIXERCONTROL_CT_CLASS_TIME|MIXERCONTROL_CT_SC_TIME_MICROSECS|MIXERCONTROL_CT_UNITS_UNSIGNED)
+#define MIXERCONTROL_CONTROLTYPE_MILLITIME (MIXERCONTROL_CT_CLASS_TIME|MIXERCONTROL_CT_SC_TIME_MILLISECS|MIXERCONTROL_CT_UNITS_UNSIGNED)
+#define MIXER_GETLINECONTROLSF_ALL 0
+#define MIXER_GETLINECONTROLSF_ONEBYID 1
+#define MIXER_GETLINECONTROLSF_ONEBYTYPE 2
+#define MIXER_GETLINECONTROLSF_QUERYMASK 15
+#define MIXER_GETCONTROLDETAILSF_VALUE 0
+#define MIXER_GETCONTROLDETAILSF_LISTTEXT 1
+#define MIXER_GETCONTROLDETAILSF_QUERYMASK 15
+#define MIXER_SETCONTROLDETAILSF_VALUE 0
+#define MIXER_SETCONTROLDETAILSF_CUSTOM 1
+#define MIXER_SETCONTROLDETAILSF_QUERYMASK 15
+#define TIMERR_NOERROR 0
+#define TIMERR_NOCANDO (TIMERR_BASE+1)
+#define TIMERR_STRUCT (TIMERR_BASE+33)
+#define TIME_ONESHOT 0
+#define TIME_PERIODIC 1
+#define TIME_CALLBACK_FUNCTION 0
+#define TIME_CALLBACK_EVENT_SET 16
+#define TIME_CALLBACK_EVENT_PULSE 32
+#if (WINVER >= 0x0501)
+#define TIME_KILL_SYNCHRONOUS 0x0100
+#endif
+#define JOYERR_NOERROR (0)
+#define JOYERR_PARMS (JOYERR_BASE+5)
+#define JOYERR_NOCANDO (JOYERR_BASE+6)
+#define JOYERR_UNPLUGGED (JOYERR_BASE+7)
+#define JOY_BUTTON1 1
+#define JOY_BUTTON2 2
+#define JOY_BUTTON3 4
+#define JOY_BUTTON4 8
+#define JOY_BUTTON1CHG 256
+#define JOY_BUTTON2CHG 512
+#define JOY_BUTTON3CHG 1024
+#define JOY_BUTTON4CHG 2048
+#define JOY_BUTTON5 257
+#define JOY_BUTTON6 513
+#define JOY_BUTTON7 1025
+#define JOY_BUTTON8 2049
+#define JOY_BUTTON9 256
+#define JOY_BUTTON10 512
+#define JOY_BUTTON11 1024
+#define JOY_BUTTON12 2048
+#define JOY_BUTTON13 4096
+#define JOY_BUTTON14 8192
+#define JOY_BUTTON15 16384
+#define JOY_BUTTON16 32768
+#define JOY_BUTTON17 65536
+#define JOY_BUTTON18 0x20000
+#define JOY_BUTTON19 0x40000
+#define JOY_BUTTON20 0x80000
+#define JOY_BUTTON21 0x100000
+#define JOY_BUTTON22 0x200000
+#define JOY_BUTTON23 0x400000
+#define JOY_BUTTON24 0x800000
+#define JOY_BUTTON25 0x1000000
+#define JOY_BUTTON26 0x2000000
+#define JOY_BUTTON27 0x4000000
+#define JOY_BUTTON28 0x8000000
+#define JOY_BUTTON29 0x10000000
+#define JOY_BUTTON30 0x20000000
+#define JOY_BUTTON31 0x40000000
+#define JOY_BUTTON32 0x80000000
+#define JOY_POVCENTERED ((WORD)-1)
+#define JOY_POVFORWARD 0
+#define JOY_POVRIGHT 9000
+#define JOY_POVBACKWARD 18000
+#define JOY_POVLEFT 27000
+#define JOY_RETURNX 1
+#define JOY_RETURNY 2
+#define JOY_RETURNZ 4l
+#define JOY_RETURNR 8
+#define JOY_RETURNU 16
+#define JOY_RETURNV 32
+#define JOY_RETURNPOV 64
+#define JOY_RETURNBUTTONS 128
+#define JOY_RETURNRAWDATA 256
+#define JOY_RETURNPOVCTS 512
+#define JOY_RETURNCENTERED 1024
+#define JOY_USEDEADZONE 2048
+#define JOY_RETURNALL (JOY_RETURNX|JOY_RETURNY|JOY_RETURNZ|JOY_RETURNR|JOY_RETURNU|JOY_RETURNV|JOY_RETURNPOV|JOY_RETURNBUTTONS)
+#define JOY_CAL_READALWAYS 0x10000
+#define JOY_CAL_READXYONLY 0x20000
+#define JOY_CAL_READ3 0x40000
+#define JOY_CAL_READ4 0x80000
+#define JOY_CAL_READXONLY 0x100000
+#define JOY_CAL_READYONLY 0x200000
+#define JOY_CAL_READ5 0x400000
+#define JOY_CAL_READ6 0x800000
+#define JOY_CAL_READZONLY 0x1000000
+#define JOY_CAL_READRONLY 0x2000000
+#define JOY_CAL_READUONLY 0x4000000
+#define JOY_CAL_READVONLY 0x8000000
+#define JOYSTICKID1 0
+#define JOYSTICKID2 1
+#define JOYCAPS_HASZ 1
+#define JOYCAPS_HASR 2
+#define JOYCAPS_HASU 4
+#define JOYCAPS_HASV 8
+#define JOYCAPS_HASPOV 16
+#define JOYCAPS_POV4DIR 32
+#define JOYCAPS_POVCTS 64
+#define MMIOERR_BASE 256
+#define MMIOERR_FILENOTFOUND (MMIOERR_BASE+1)
+#define MMIOERR_OUTOFMEMORY (MMIOERR_BASE+2)
+#define MMIOERR_CANNOTOPEN (MMIOERR_BASE+3)
+#define MMIOERR_CANNOTCLOSE (MMIOERR_BASE+4)
+#define MMIOERR_CANNOTREAD (MMIOERR_BASE+5)
+#define MMIOERR_CANNOTWRITE (MMIOERR_BASE+6)
+#define MMIOERR_CANNOTSEEK (MMIOERR_BASE+7)
+#define MMIOERR_CANNOTEXPAND (MMIOERR_BASE+8)
+#define MMIOERR_CHUNKNOTFOUND (MMIOERR_BASE+9)
+#define MMIOERR_UNBUFFERED (MMIOERR_BASE+10)
+#define MMIOERR_PATHNOTFOUND (MMIOERR_BASE+11)
+#define MMIOERR_ACCESSDENIED (MMIOERR_BASE+12)
+#define MMIOERR_SHARINGVIOLATION (MMIOERR_BASE+13)
+#define MMIOERR_NETWORKERROR (MMIOERR_BASE+14)
+#define MMIOERR_TOOMANYOPENFILES (MMIOERR_BASE+15)
+#define MMIOERR_INVALIDFILE (MMIOERR_BASE+16)
+#define CFSEPCHAR '+'
+#define MMIO_RWMODE 3
+#define MMIO_SHAREMODE 0x70
+#define MMIO_CREATE 0x1000
+#define MMIO_PARSE 256
+#define MMIO_DELETE 512
+#define MMIO_EXIST 0x4000
+#define MMIO_ALLOCBUF 0x10000
+#define MMIO_GETTEMP 0x20000
+#define MMIO_DIRTY 0x10000000
+#define MMIO_READ 0
+#define MMIO_WRITE 1
+#define MMIO_READWRITE 2
+#define MMIO_COMPAT 0
+#define MMIO_EXCLUSIVE 16
+#define MMIO_DENYWRITE 32
+#define MMIO_DENYREAD 0x30
+#define MMIO_DENYNONE 64
+#define MMIO_FHOPEN 16
+#define MMIO_EMPTYBUF 16
+#define MMIO_TOUPPER 16
+#define MMIO_INSTALLPROC 0x10000
+#define MMIO_GLOBALPROC 0x10000000
+#define MMIO_REMOVEPROC 0x20000
+#define MMIO_UNICODEPROC 0x1000000
+#define MMIO_FINDPROC 0x40000
+#define MMIO_FINDCHUNK 16
+#define MMIO_FINDRIFF 32
+#define MMIO_FINDLIST 64
+#define MMIO_CREATERIFF 32
+#define MMIO_CREATELIST 64
+#define MMIOM_READ MMIO_READ
+#define MMIOM_WRITE MMIO_WRITE
+#define MMIOM_SEEK 2
+#define MMIOM_OPEN 3
+#define MMIOM_CLOSE 4
+#define MMIOM_WRITEFLUSH 5
+#define MMIOM_RENAME 6
+#define MMIOM_USER 0x8000
+#define FOURCC_RIFF mmioFOURCC('R', 'I', 'F', 'F')
+#define FOURCC_LIST mmioFOURCC('L', 'I', 'S', 'T')
+#define FOURCC_DOS mmioFOURCC('D', 'O', 'S', ' ')
+#define FOURCC_MEM mmioFOURCC('M', 'E', 'M', ' ')
+#define MMIO_DEFAULTBUFFER 8192
+#define MCIERR_INVALID_DEVICE_ID (MCIERR_BASE+1)
+#define MCIERR_UNRECOGNIZED_KEYWORD (MCIERR_BASE+3)
+#define MCIERR_UNRECOGNIZED_COMMAND (MCIERR_BASE+5)
+#define MCIERR_HARDWARE (MCIERR_BASE+6)
+#define MCIERR_INVALID_DEVICE_NAME (MCIERR_BASE+7)
+#define MCIERR_OUT_OF_MEMORY (MCIERR_BASE+8)
+#define MCIERR_DEVICE_OPEN (MCIERR_BASE+9)
+#define MCIERR_CANNOT_LOAD_DRIVER (MCIERR_BASE+10)
+#define MCIERR_MISSING_COMMAND_STRING (MCIERR_BASE+11)
+#define MCIERR_PARAM_OVERFLOW (MCIERR_BASE+12)
+#define MCIERR_MISSING_STRING_ARGUMENT (MCIERR_BASE+13)
+#define MCIERR_BAD_INTEGER (MCIERR_BASE+14)
+#define MCIERR_PARSER_INTERNAL (MCIERR_BASE+15)
+#define MCIERR_DRIVER_INTERNAL (MCIERR_BASE+16)
+#define MCIERR_MISSING_PARAMETER (MCIERR_BASE+17)
+#define MCIERR_UNSUPPORTED_FUNCTION (MCIERR_BASE+18)
+#define MCIERR_FILE_NOT_FOUND (MCIERR_BASE+19)
+#define MCIERR_DEVICE_NOT_READY (MCIERR_BASE+20)
+#define MCIERR_INTERNAL (MCIERR_BASE+21)
+#define MCIERR_DRIVER (MCIERR_BASE+22)
+#define MCIERR_CANNOT_USE_ALL (MCIERR_BASE+23)
+#define MCIERR_MULTIPLE (MCIERR_BASE+24)
+#define MCIERR_EXTENSION_NOT_FOUND (MCIERR_BASE+25)
+#define MCIERR_OUTOFRANGE (MCIERR_BASE+26)
+#define MCIERR_FLAGS_NOT_COMPATIBLE (MCIERR_BASE+28)
+#define MCIERR_FILE_NOT_SAVED (MCIERR_BASE+30)
+#define MCIERR_DEVICE_TYPE_REQUIRED (MCIERR_BASE+31)
+#define MCIERR_DEVICE_LOCKED (MCIERR_BASE+32)
+#define MCIERR_DUPLICATE_ALIAS (MCIERR_BASE+33)
+#define MCIERR_BAD_CONSTANT (MCIERR_BASE+34)
+#define MCIERR_MUST_USE_SHAREABLE (MCIERR_BASE+35)
+#define MCIERR_MISSING_DEVICE_NAME (MCIERR_BASE+36)
+#define MCIERR_BAD_TIME_FORMAT (MCIERR_BASE+37)
+#define MCIERR_NO_CLOSING_QUOTE (MCIERR_BASE+38)
+#define MCIERR_DUPLICATE_FLAGS (MCIERR_BASE+39)
+#define MCIERR_INVALID_FILE (MCIERR_BASE+40)
+#define MCIERR_NULL_PARAMETER_BLOCK (MCIERR_BASE+41)
+#define MCIERR_UNNAMED_RESOURCE (MCIERR_BASE+42)
+#define MCIERR_NEW_REQUIRES_ALIAS (MCIERR_BASE+43)
+#define MCIERR_NOTIFY_ON_AUTO_OPEN (MCIERR_BASE+44)
+#define MCIERR_NO_ELEMENT_ALLOWED (MCIERR_BASE+45)
+#define MCIERR_NONAPPLICABLE_FUNCTION (MCIERR_BASE+46)
+#define MCIERR_ILLEGAL_FOR_AUTO_OPEN (MCIERR_BASE+47)
+#define MCIERR_FILENAME_REQUIRED (MCIERR_BASE+48)
+#define MCIERR_EXTRA_CHARACTERS (MCIERR_BASE+49)
+#define MCIERR_DEVICE_NOT_INSTALLED (MCIERR_BASE+50)
+#define MCIERR_GET_CD (MCIERR_BASE+51)
+#define MCIERR_SET_CD (MCIERR_BASE+52)
+#define MCIERR_SET_DRIVE (MCIERR_BASE+53)
+#define MCIERR_DEVICE_LENGTH (MCIERR_BASE+54)
+#define MCIERR_DEVICE_ORD_LENGTH (MCIERR_BASE+55)
+#define MCIERR_NO_INTEGER (MCIERR_BASE+56)
+#define MCIERR_WAVE_OUTPUTSINUSE (MCIERR_BASE+64)
+#define MCIERR_WAVE_SETOUTPUTINUSE (MCIERR_BASE+65)
+#define MCIERR_WAVE_INPUTSINUSE (MCIERR_BASE+66)
+#define MCIERR_WAVE_SETINPUTINUSE (MCIERR_BASE+67)
+#define MCIERR_WAVE_OUTPUTUNSPECIFIED (MCIERR_BASE+68)
+#define MCIERR_WAVE_INPUTUNSPECIFIED (MCIERR_BASE+69)
+#define MCIERR_WAVE_OUTPUTSUNSUITABLE (MCIERR_BASE+70)
+#define MCIERR_WAVE_SETOUTPUTUNSUITABLE (MCIERR_BASE+71)
+#define MCIERR_WAVE_INPUTSUNSUITABLE (MCIERR_BASE+72)
+#define MCIERR_WAVE_SETINPUTUNSUITABLE (MCIERR_BASE+73)
+#define MCIERR_SEQ_DIV_INCOMPATIBLE (MCIERR_BASE+80)
+#define MCIERR_SEQ_PORT_INUSE (MCIERR_BASE+81)
+#define MCIERR_SEQ_PORT_NONEXISTENT (MCIERR_BASE+82)
+#define MCIERR_SEQ_PORT_MAPNODEVICE (MCIERR_BASE+83)
+#define MCIERR_SEQ_PORT_MISCERROR (MCIERR_BASE+84)
+#define MCIERR_SEQ_TIMER (MCIERR_BASE+85)
+#define MCIERR_SEQ_PORTUNSPECIFIED (MCIERR_BASE+86)
+#define MCIERR_SEQ_NOMIDIPRESENT (MCIERR_BASE+87)
+#define MCIERR_NO_WINDOW (MCIERR_BASE+90)
+#define MCIERR_CREATEWINDOW (MCIERR_BASE+91)
+#define MCIERR_FILE_READ (MCIERR_BASE+92)
+#define MCIERR_FILE_WRITE (MCIERR_BASE+93)
+#define MCIERR_NO_IDENTITY (MCIERR_BASE+94)
+#define MCIERR_CUSTOM_DRIVER_BASE (MCIERR_BASE+256)
+#define MCI_FIRST DRV_MCI_FIRST
+#define MCI_OPEN 0x803
+#define MCI_CLOSE 0x804
+#define MCI_ESCAPE 0x805
+#define MCI_PLAY 0x806
+#define MCI_SEEK 0x807
+#define MCI_STOP 0x808
+#define MCI_PAUSE 0x809
+#define MCI_INFO 0x80A
+#define MCI_GETDEVCAPS 0x80B
+#define MCI_SPIN 0x80C
+#define MCI_SET 0x80D
+#define MCI_STEP 0x80E
+#define MCI_RECORD 0x80F
+#define MCI_SYSINFO 0x810
+#define MCI_BREAK 0x811
+#define MCI_SAVE 0x813
+#define MCI_STATUS 0x814
+#define MCI_CUE 0x830
+#define MCI_REALIZE 0x840
+#define MCI_WINDOW 0x841
+#define MCI_PUT 0x842
+#define MCI_WHERE 0x843
+#define MCI_FREEZE 0x844
+#define MCI_UNFREEZE 0x845
+#define MCI_LOAD 0x850
+#define MCI_CUT 0x851
+#define MCI_COPY 0x852
+#define MCI_PASTE 0x853
+#define MCI_UPDATE 0x854
+#define MCI_RESUME 0x855
+#define MCI_DELETE 0x856
+#define MCI_USER_MESSAGES (DRV_MCI_FIRST+0x400)
+#define MCI_LAST 0xFFF
+#define MCI_ALL_DEVICE_ID ((MCIDEVICEID)-1)
+#define MCI_DEVTYPE_VCR 513
+#define MCI_DEVTYPE_VIDEODISC 514
+#define MCI_DEVTYPE_OVERLAY 515
+#define MCI_DEVTYPE_CD_AUDIO 516
+#define MCI_DEVTYPE_DAT 517
+#define MCI_DEVTYPE_SCANNER 518
+#define MCI_DEVTYPE_ANIMATION 519
+#define MCI_DEVTYPE_DIGITAL_VIDEO 520
+#define MCI_DEVTYPE_OTHER 521
+#define MCI_DEVTYPE_WAVEFORM_AUDIO 522
+#define MCI_DEVTYPE_SEQUENCER 523
+#define MCI_DEVTYPE_FIRST MCI_DEVTYPE_VCR
+#define MCI_DEVTYPE_LAST MCI_DEVTYPE_SEQUENCER
+#define MCI_DEVTYPE_FIRST_USER 0x1000
+#define MCI_MODE_NOT_READY (MCI_STRING_OFFSET+12)
+#define MCI_MODE_STOP (MCI_STRING_OFFSET+13)
+#define MCI_MODE_PLAY (MCI_STRING_OFFSET+14)
+#define MCI_MODE_RECORD (MCI_STRING_OFFSET+15)
+#define MCI_MODE_SEEK (MCI_STRING_OFFSET+16)
+#define MCI_MODE_PAUSE (MCI_STRING_OFFSET+17)
+#define MCI_MODE_OPEN (MCI_STRING_OFFSET+18)
+#define MCI_FORMAT_MILLISECONDS 0
+#define MCI_FORMAT_HMS 1
+#define MCI_FORMAT_MSF 2
+#define MCI_FORMAT_FRAMES 3
+#define MCI_FORMAT_SMPTE_24 4
+#define MCI_FORMAT_SMPTE_25 5
+#define MCI_FORMAT_SMPTE_30 6
+#define MCI_FORMAT_SMPTE_30DROP 7
+#define MCI_FORMAT_BYTES 8
+#define MCI_FORMAT_SAMPLES 9
+#define MCI_FORMAT_TMSF 10
+#define MCI_MSF_MINUTE(t) ((BYTE)(t))
+#define MCI_MSF_SECOND(t) ((BYTE)(((WORD)(t))>>8))
+#define MCI_MSF_FRAME(t) ((BYTE)((t)>>16))
+#define MCI_MAKE_MSF(m,s,f) ((DWORD)(((BYTE)(m)|((WORD)(s)<<8))|(((DWORD)(BYTE)(f))<<16)))
+#define MCI_TMSF_TRACK(t) ((BYTE)(t))
+#define MCI_TMSF_MINUTE(t) ((BYTE)(((WORD)(t))>>8))
+#define MCI_TMSF_SECOND(t) ((BYTE)((t)>>16))
+#define MCI_TMSF_FRAME(t) ((BYTE)((t)>>24))
+#define MCI_MAKE_TMSF(t,m,s,f) ((DWORD)(((BYTE)(t)|((WORD)(m)<<8))|(((DWORD)(BYTE)(s)|((WORD)(f)<<8))<<16)))
+#define MCI_HMS_HOUR(t) ((BYTE)(t))
+#define MCI_HMS_MINUTE(t) ((BYTE)(((WORD)(t))>>8))
+#define MCI_HMS_SECOND(t) ((BYTE)((t)>>16))
+#define MCI_MAKE_HMS(h,m,s) ((DWORD)(((BYTE)(h)|((WORD)(m)<<8))|(((DWORD)(BYTE)(s))<<16)))
+#define MCI_NOTIFY_SUCCESSFUL 1
+#define MCI_NOTIFY_SUPERSEDED 2
+#define MCI_NOTIFY_ABORTED 4
+#define MCI_NOTIFY_FAILURE 8
+#define MCI_NOTIFY 1
+#define MCI_WAIT 2
+#define MCI_FROM 4
+#define MCI_TO 8
+#define MCI_TRACK 16
+#define MCI_OPEN_SHAREABLE 256
+#define MCI_OPEN_ELEMENT 512
+#define MCI_OPEN_ALIAS 1024
+#define MCI_OPEN_ELEMENT_ID 2048
+#define MCI_OPEN_TYPE_ID 0x1000
+#define MCI_OPEN_TYPE 0x2000
+#define MCI_SEEK_TO_START 256
+#define MCI_SEEK_TO_END 512
+#define MCI_STATUS_ITEM 256
+#define MCI_STATUS_START 512
+#define MCI_STATUS_LENGTH 1
+#define MCI_STATUS_POSITION 2
+#define MCI_STATUS_NUMBER_OF_TRACKS 3
+#define MCI_STATUS_MODE 4
+#define MCI_STATUS_MEDIA_PRESENT 5
+#define MCI_STATUS_TIME_FORMAT 6
+#define MCI_STATUS_READY 7
+#define MCI_STATUS_CURRENT_TRACK 8
+#define MCI_INFO_PRODUCT 256
+#define MCI_INFO_FILE 512
+#define MCI_INFO_MEDIA_UPC 1024
+#define MCI_INFO_MEDIA_IDENTITY 2048
+#define MCI_INFO_NAME 0x1000
+#define MCI_INFO_COPYRIGHT 0x2000
+#define MCI_GETDEVCAPS_ITEM 256
+#define MCI_GETDEVCAPS_CAN_RECORD 1
+#define MCI_GETDEVCAPS_HAS_AUDIO 2
+#define MCI_GETDEVCAPS_HAS_VIDEO 3
+#define MCI_GETDEVCAPS_DEVICE_TYPE 4
+#define MCI_GETDEVCAPS_USES_FILES 5
+#define MCI_GETDEVCAPS_COMPOUND_DEVICE 6
+#define MCI_GETDEVCAPS_CAN_EJECT 7
+#define MCI_GETDEVCAPS_CAN_PLAY 8
+#define MCI_GETDEVCAPS_CAN_SAVE 9
+#define MCI_SYSINFO_QUANTITY 256
+#define MCI_SYSINFO_OPEN 512
+#define MCI_SYSINFO_NAME 1024
+#define MCI_SYSINFO_INSTALLNAME 2048
+#define MCI_SET_DOOR_OPEN 256
+#define MCI_SET_DOOR_CLOSED 512
+#define MCI_SET_TIME_FORMAT 1024
+#define MCI_SET_AUDIO 2048
+#define MCI_SET_VIDEO 0x1000
+#define MCI_SET_ON 0x2000
+#define MCI_SET_OFF 0x4000
+#define MCI_SET_AUDIO_ALL 0
+#define MCI_SET_AUDIO_LEFT 1
+#define MCI_SET_AUDIO_RIGHT 2
+#define MCI_BREAK_KEY 256
+#define MCI_BREAK_HWND 512
+#define MCI_BREAK_OFF 1024
+#define MCI_RECORD_INSERT 256
+#define MCI_RECORD_OVERWRITE 512
+#define MCI_SAVE_FILE 256
+#define MCI_LOAD_FILE 256
+#define MCI_VD_MODE_PARK (MCI_VD_OFFSET+1)
+#define MCI_VD_MEDIA_CLV (MCI_VD_OFFSET+2)
+#define MCI_VD_MEDIA_CAV (MCI_VD_OFFSET+3)
+#define MCI_VD_MEDIA_OTHER (MCI_VD_OFFSET+4)
+#define MCI_VD_FORMAT_TRACK 0x4001
+#define MCI_VD_PLAY_REVERSE 0x10000
+#define MCI_VD_PLAY_FAST 0x20000
+#define MCI_VD_PLAY_SPEED 0x40000
+#define MCI_VD_PLAY_SCAN 0x80000
+#define MCI_VD_PLAY_SLOW 0x100000
+#define MCI_VD_SEEK_REVERSE 0x10000
+#define MCI_VD_STATUS_SPEED 0x4002
+#define MCI_VD_STATUS_FORWARD 0x4003
+#define MCI_VD_STATUS_MEDIA_TYPE 0x4004
+#define MCI_VD_STATUS_SIDE 0x4005
+#define MCI_VD_STATUS_DISC_SIZE 0x4006
+#define MCI_VD_GETDEVCAPS_CLV 0x10000
+#define MCI_VD_GETDEVCAPS_CAV 0x20000
+#define MCI_VD_SPIN_UP 0x10000
+#define MCI_VD_SPIN_DOWN 0x20000
+#define MCI_VD_GETDEVCAPS_CAN_REVERSE 0x4002
+#define MCI_VD_GETDEVCAPS_FAST_RATE 0x4003
+#define MCI_VD_GETDEVCAPS_SLOW_RATE 0x4004
+#define MCI_VD_GETDEVCAPS_NORMAL_RATE 0x4005
+#define MCI_VD_STEP_FRAMES 0x10000
+#define MCI_VD_STEP_REVERSE 0x20000
+#define MCI_VD_ESCAPE_STRING 256
+#define MCI_CDA_STATUS_TYPE_TRACK 0x4001
+#define MCI_CDA_TRACK_AUDIO MCI_CD_OFFSET
+#define MCI_CDA_TRACK_OTHER (MCI_CD_OFFSET+1)
+#define MCI_WAVE_PCM MCI_WAVE_OFFSET
+#define MCI_WAVE_MAPPER (MCI_WAVE_OFFSET+1)
+#define MCI_WAVE_OPEN_BUFFER 0x10000
+#define MCI_WAVE_SET_FORMATTAG 0x10000
+#define MCI_WAVE_SET_CHANNELS 0x20000
+#define MCI_WAVE_SET_SAMPLESPERSEC 0x40000
+#define MCI_WAVE_SET_AVGBYTESPERSEC 0x80000
+#define MCI_WAVE_SET_BLOCKALIGN 0x100000
+#define MCI_WAVE_SET_BITSPERSAMPLE 0x200000
+#define MCI_WAVE_INPUT 0x400000
+#define MCI_WAVE_OUTPUT 0x800000
+#define MCI_WAVE_STATUS_FORMATTAG 0x4001
+#define MCI_WAVE_STATUS_CHANNELS 0x4002
+#define MCI_WAVE_STATUS_SAMPLESPERSEC 0x4003
+#define MCI_WAVE_STATUS_AVGBYTESPERSEC 0x4004
+#define MCI_WAVE_STATUS_BLOCKALIGN 0x4005
+#define MCI_WAVE_STATUS_BITSPERSAMPLE 0x4006
+#define MCI_WAVE_STATUS_LEVEL 0x4007
+#define MCI_WAVE_SET_ANYINPUT 0x4000000
+#define MCI_WAVE_SET_ANYOUTPUT 0x8000000
+#define MCI_WAVE_GETDEVCAPS_INPUTS 0x4001
+#define MCI_WAVE_GETDEVCAPS_OUTPUTS 0x4002
+#define MCI_SEQ_DIV_PPQN MCI_SEQ_OFFSET
+#define MCI_SEQ_DIV_SMPTE_24 (MCI_SEQ_OFFSET+1)
+#define MCI_SEQ_DIV_SMPTE_25 (MCI_SEQ_OFFSET+2)
+#define MCI_SEQ_DIV_SMPTE_30DROP (MCI_SEQ_OFFSET+3)
+#define MCI_SEQ_DIV_SMPTE_30 (MCI_SEQ_OFFSET+4)
+#define MCI_SEQ_FORMAT_SONGPTR 0x4001
+#define MCI_SEQ_FILE 0x4002
+#define MCI_SEQ_MIDI 0x4003
+#define MCI_SEQ_SMPTE 0x4004
+#define MCI_SEQ_NONE 65533
+#define MCI_SEQ_MAPPER 65535
+#define MCI_SEQ_STATUS_TEMPO 0x4002
+#define MCI_SEQ_STATUS_PORT 0x4003
+#define MCI_SEQ_STATUS_SLAVE 0x4007
+#define MCI_SEQ_STATUS_MASTER 0x4008
+#define MCI_SEQ_STATUS_OFFSET 0x4009
+#define MCI_SEQ_STATUS_DIVTYPE 0x400A
+#define MCI_SEQ_STATUS_NAME 0x400B
+#define MCI_SEQ_STATUS_COPYRIGHT 0x400C
+#define MCI_SEQ_SET_TEMPO 0x10000
+#define MCI_SEQ_SET_PORT 0x20000
+#define MCI_SEQ_SET_SLAVE 0x40000
+#define MCI_SEQ_SET_MASTER 0x80000
+#define MCI_SEQ_SET_OFFSET 0x1000000
+#define MCI_ANIM_OPEN_WS 0x10000
+#define MCI_ANIM_OPEN_PARENT 0x20000
+#define MCI_ANIM_OPEN_NOSTATIC 0x40000
+#define MCI_ANIM_PLAY_SPEED 0x10000
+#define MCI_ANIM_PLAY_REVERSE 0x20000
+#define MCI_ANIM_PLAY_FAST 0x40000
+#define MCI_ANIM_PLAY_SLOW 0x80000
+#define MCI_ANIM_PLAY_SCAN 0x100000
+#define MCI_ANIM_STEP_REVERSE 0x10000
+#define MCI_ANIM_STEP_FRAMES 0x20000
+#define MCI_ANIM_STATUS_SPEED 0x4001
+#define MCI_ANIM_STATUS_FORWARD 0x4002
+#define MCI_ANIM_STATUS_HWND 0x4003
+#define MCI_ANIM_STATUS_HPAL 0x4004
+#define MCI_ANIM_STATUS_STRETCH 0x4005
+#define MCI_ANIM_INFO_TEXT 0x10000
+#define MCI_ANIM_GETDEVCAPS_CAN_REVERSE 0x4001
+#define MCI_ANIM_GETDEVCAPS_FAST_RATE 0x4002
+#define MCI_ANIM_GETDEVCAPS_SLOW_RATE 0x4003
+#define MCI_ANIM_GETDEVCAPS_NORMAL_RATE 0x4004
+#define MCI_ANIM_GETDEVCAPS_PALETTES 0x4006
+#define MCI_ANIM_GETDEVCAPS_CAN_STRETCH 0x4007
+#define MCI_ANIM_GETDEVCAPS_MAX_WINDOWS 0x4008
+#define MCI_ANIM_REALIZE_NORM 0x10000
+#define MCI_ANIM_REALIZE_BKGD 0x20000
+#define MCI_ANIM_WINDOW_HWND 0x10000
+#define MCI_ANIM_WINDOW_STATE 0x40000
+#define MCI_ANIM_WINDOW_TEXT 0x80000
+#define MCI_ANIM_WINDOW_ENABLE_STRETCH 0x100000
+#define MCI_ANIM_WINDOW_DISABLE_STRETCH 0x200000
+#define MCI_ANIM_WINDOW_DEFAULT 0xL
+#define MCI_ANIM_RECT 0x10000
+#define MCI_ANIM_PUT_SOURCE 0x20000
+#define MCI_ANIM_PUT_DESTINATION 0x40000
+#define MCI_ANIM_WHERE_SOURCE 0x20000
+#define MCI_ANIM_WHERE_DESTINATION 0x40000
+#define MCI_ANIM_UPDATE_HDC 0x20000
+#define MCI_OVLY_OPEN_WS 0x10000
+#define MCI_OVLY_OPEN_PARENT 0x20000
+#define MCI_OVLY_STATUS_HWND 0x4001
+#define MCI_OVLY_STATUS_STRETCH 0x4002
+#define MCI_OVLY_INFO_TEXT 0x10000
+#define MCI_OVLY_GETDEVCAPS_CAN_STRETCH 0x4001
+#define MCI_OVLY_GETDEVCAPS_CAN_FREEZE 0x4002
+#define MCI_OVLY_GETDEVCAPS_MAX_WINDOWS 0x4003
+#define MCI_OVLY_WINDOW_HWND 0x10000
+#define MCI_OVLY_WINDOW_STATE 0x40000
+#define MCI_OVLY_WINDOW_TEXT 0x80000
+#define MCI_OVLY_WINDOW_ENABLE_STRETCH 0x100000
+#define MCI_OVLY_WINDOW_DISABLE_STRETCH 0x200000
+#define MCI_OVLY_WINDOW_DEFAULT 0xL
+#define MCI_OVLY_RECT 0x10000
+#define MCI_OVLY_PUT_SOURCE 0x20000
+#define MCI_OVLY_PUT_DESTINATION 0x40000
+#define MCI_OVLY_PUT_FRAME 0x80000
+#define MCI_OVLY_PUT_VIDEO 0x100000
+#define MCI_OVLY_WHERE_SOURCE 0x20000
+#define MCI_OVLY_WHERE_DESTINATION 0x40000
+#define MCI_OVLY_WHERE_FRAME 0x80000
+#define MCI_OVLY_WHERE_VIDEO 0x100000
+#define NEWTRANSPARENT 3
+#define QUERYROPSUPPORT 40
+#define SELECTDIB 41
+#define DIBINDEX(n) MAKELONG((n),0x10FF)
+#define SC_SCREENSAVE 0xF140
+#define CAPS1 94
+#define C1_TRANSPARENT 1
+#ifndef SEEK_SET
+#define SEEK_SET 0
+#endif
+#ifndef SEEK_CUR
+#define SEEK_CUR 1
+#endif
+#ifndef SEEK_END
+#define SEEK_END 2
+#endif
+
+typedef DWORD MCIERROR;
+typedef UINT MCIDEVICEID;
+typedef UINT(CALLBACK *YIELDPROC)(MCIDEVICEID,DWORD);
+typedef UINT MMVERSION;
+typedef UINT MMRESULT;
+typedef struct mmtime_tag {
+ UINT wType;
+ union {
+ DWORD ms;
+ DWORD sample;
+ DWORD cb;
+ DWORD ticks;
+ struct {
+ BYTE hour;
+ BYTE min;
+ BYTE sec;
+ BYTE frame;
+ BYTE fps;
+ BYTE dummy;
+ BYTE pad[2];
+ } smpte;
+ struct {
+ DWORD songptrpos;
+ } midi;
+ } u;
+} MMTIME,*PMMTIME,*LPMMTIME;
+DECLARE_HANDLE(HDRVR);
+typedef struct tagDRVCONFIGINFO {
+ DWORD dwDCISize;
+ LPCWSTR lpszDCISectionName;
+ LPCWSTR lpszDCIAliasName;
+} DRVCONFIGINFO,*PDRVCONFIGINFO,*LPDRVCONFIGINFO;
+typedef struct DRVCONFIGINFOEX {
+ DWORD dwDCISize;
+ LPCWSTR lpszDCISectionName;
+ LPCWSTR lpszDCIAliasName;
+ DWORD dnDevNode;
+} DRVCONFIGINFOEX,*PDRVCONFIGINFOEX,*LPDRVCONFIGINFOEX;
+typedef LRESULT(CALLBACK* DRIVERPROC)(DWORD,HDRVR,UINT,LPARAM,LPARAM);
+typedef void (CALLBACK DRVCALLBACK)(HDRVR,UINT,DWORD,DWORD,DWORD);
+typedef DRVCALLBACK *LPDRVCALLBACK;
+typedef DRVCALLBACK *PDRVCALLBACK;
+DECLARE_HANDLE(HWAVE);
+DECLARE_HANDLE(HWAVEIN);
+DECLARE_HANDLE(HWAVEOUT);
+typedef HWAVEIN *LPHWAVEIN;
+typedef HWAVEOUT *LPHWAVEOUT;
+typedef DRVCALLBACK WAVECALLBACK;
+typedef WAVECALLBACK *LPWAVECALLBACK;
+typedef struct wavehdr_tag {
+ LPSTR lpData;
+ DWORD dwBufferLength;
+ DWORD dwBytesRecorded;
+ DWORD dwUser;
+ DWORD dwFlags;
+ DWORD dwLoops;
+ struct wavehdr_tag *lpNext;
+ DWORD reserved;
+} WAVEHDR,*PWAVEHDR,*LPWAVEHDR;
+typedef struct tagWAVEOUTCAPSA {
+ WORD wMid;
+ WORD wPid;
+ MMVERSION vDriverVersion;
+ CHAR szPname[MAXPNAMELEN];
+ DWORD dwFormats;
+ WORD wChannels;
+ WORD wReserved1;
+ DWORD dwSupport;
+} WAVEOUTCAPSA,*PWAVEOUTCAPSA,*LPWAVEOUTCAPSA;
+typedef struct tagWAVEOUTCAPSW {
+ WORD wMid;
+ WORD wPid;
+ MMVERSION vDriverVersion;
+ WCHAR szPname[MAXPNAMELEN];
+ DWORD dwFormats;
+ WORD wChannels;
+ WORD wReserved1;
+ DWORD dwSupport;
+} WAVEOUTCAPSW,*PWAVEOUTCAPSW,*LPWAVEOUTCAPSW;
+typedef struct tagWAVEINCAPSA {
+ WORD wMid;
+ WORD wPid;
+ MMVERSION vDriverVersion;
+ CHAR szPname[MAXPNAMELEN];
+ DWORD dwFormats;
+ WORD wChannels;
+ WORD wReserved1;
+} WAVEINCAPSA,*PWAVEINCAPSA,*LPWAVEINCAPSA;
+typedef struct tagWAVEINCAPSW {
+ WORD wMid;
+ WORD wPid;
+ MMVERSION vDriverVersion;
+ WCHAR szPname[MAXPNAMELEN];
+ DWORD dwFormats;
+ WORD wChannels;
+ WORD wReserved1;
+} WAVEINCAPSW,*PWAVEINCAPSW,*LPWAVEINCAPSW;
+typedef struct waveformat_tag {
+ WORD wFormatTag;
+ WORD nChannels;
+ DWORD nSamplesPerSec;
+ DWORD nAvgBytesPerSec;
+ WORD nBlockAlign;
+} WAVEFORMAT,*PWAVEFORMAT,*LPWAVEFORMAT;
+typedef struct pcmwaveformat_tag {
+ WAVEFORMAT wf;
+ WORD wBitsPerSample;
+} PCMWAVEFORMAT, *PPCMWAVEFORMAT,*LPPCMWAVEFORMAT;
+#ifndef _LPCWAVEFORMATEX_DEFINED
+#define _LPCWAVEFORMATEX_DEFINED
+#define _WAVEFORMATEX_
+typedef struct tWAVEFORMATEX {
+ WORD wFormatTag;
+ WORD nChannels;
+ DWORD nSamplesPerSec;
+ DWORD nAvgBytesPerSec;
+ WORD nBlockAlign;
+ WORD wBitsPerSample;
+ WORD cbSize;
+} WAVEFORMATEX,*PWAVEFORMATEX,*LPWAVEFORMATEX;
+typedef const WAVEFORMATEX *LPCWAVEFORMATEX;
+#endif
+DECLARE_HANDLE(HMIDI);
+DECLARE_HANDLE(HMIDIIN);
+DECLARE_HANDLE(HMIDIOUT);
+DECLARE_HANDLE(HMIDISTRM);
+typedef HMIDI *LPHMIDI;
+typedef HMIDIIN *LPHMIDIIN;
+typedef HMIDIOUT *LPHMIDIOUT;
+typedef HMIDISTRM *LPHMIDISTRM;
+typedef DRVCALLBACK MIDICALLBACK;
+typedef MIDICALLBACK *LPMIDICALLBACK;
+typedef WORD PATCHARRAY[MIDIPATCHSIZE];
+typedef WORD *LPPATCHARRAY;
+typedef WORD KEYARRAY[MIDIPATCHSIZE];
+typedef WORD *LPKEYARRAY;
+typedef struct tagMIDIOUTCAPSA {
+ WORD wMid;
+ WORD wPid;
+ MMVERSION vDriverVersion;
+ CHAR szPname[MAXPNAMELEN];
+ WORD wTechnology;
+ WORD wVoices;
+ WORD wNotes;
+ WORD wChannelMask;
+ DWORD dwSupport;
+} MIDIOUTCAPSA,*PMIDIOUTCAPSA,*LPMIDIOUTCAPSA;
+typedef struct tagMIDIOUTCAPSW {
+ WORD wMid;
+ WORD wPid;
+ MMVERSION vDriverVersion;
+ WCHAR szPname[MAXPNAMELEN];
+ WORD wTechnology;
+ WORD wVoices;
+ WORD wNotes;
+ WORD wChannelMask;
+ DWORD dwSupport;
+} MIDIOUTCAPSW,*PMIDIOUTCAPSW,*LPMIDIOUTCAPSW;
+typedef struct tagMIDIINCAPSA {
+ WORD wMid;
+ WORD wPid;
+ MMVERSION vDriverVersion;
+ CHAR szPname[MAXPNAMELEN];
+ DWORD dwSupport;
+} MIDIINCAPSA,*PMIDIINCAPSA,*LPMIDIINCAPSA;
+typedef struct tagMIDIINCAPSW {
+ WORD wMid;
+ WORD wPid;
+ MMVERSION vDriverVersion;
+ WCHAR szPname[MAXPNAMELEN];
+ DWORD dwSupport;
+} MIDIINCAPSW,*PMIDIINCAPSW,*NPMIDIINCAPSW,*LPMIDIINCAPSW;
+typedef struct midihdr_tag {
+ LPSTR lpData;
+ DWORD dwBufferLength;
+ DWORD dwBytesRecorded;
+ DWORD dwUser;
+ DWORD dwFlags;
+ struct midihdr_tag *lpNext;
+ DWORD reserved;
+ DWORD dwOffset;
+ DWORD dwReserved[8];
+} MIDIHDR,*PMIDIHDR,*LPMIDIHDR;
+typedef struct midievent_tag {
+ DWORD dwDeltaTime;
+ DWORD dwStreamID;
+ DWORD dwEvent;
+ DWORD dwParms[1];
+} MIDIEVENT;
+typedef struct midistrmbuffver_tag {
+ DWORD dwVersion;
+ DWORD dwMid;
+ DWORD dwOEMVersion;
+} MIDISTRMBUFFVER;
+typedef struct midiproptimediv_tag {
+ DWORD cbStruct;
+ DWORD dwTimeDiv;
+} MIDIPROPTIMEDIV,*LPMIDIPROPTIMEDIV;
+typedef struct midiproptempo_tag {
+ DWORD cbStruct;
+ DWORD dwTempo;
+} MIDIPROPTEMPO,*LPMIDIPROPTEMPO;
+typedef struct tagAUXCAPSA {
+ WORD wMid;
+ WORD wPid;
+ MMVERSION vDriverVersion;
+ CHAR szPname[MAXPNAMELEN];
+ WORD wTechnology;
+ WORD wReserved1;
+ DWORD dwSupport;
+} AUXCAPSA,*PAUXCAPSA,*LPAUXCAPSA;
+typedef struct tagAUXCAPSW {
+ WORD wMid;
+ WORD wPid;
+ MMVERSION vDriverVersion;
+ WCHAR szPname[MAXPNAMELEN];
+ WORD wTechnology;
+ WORD wReserved1;
+ DWORD dwSupport;
+} AUXCAPSW,*PAUXCAPSW,*LPAUXCAPSW;
+DECLARE_HANDLE(HMIXEROBJ);
+typedef HMIXEROBJ *LPHMIXEROBJ;
+DECLARE_HANDLE(HMIXER);
+typedef HMIXER *LPHMIXER;
+typedef struct tagMIXERCAPSA {
+ WORD wMid;
+ WORD wPid;
+ MMVERSION vDriverVersion;
+ CHAR szPname[MAXPNAMELEN];
+ DWORD fdwSupport;
+ DWORD cDestinations;
+} MIXERCAPSA,*PMIXERCAPSA,*LPMIXERCAPSA;
+typedef struct tagMIXERCAPSW {
+ WORD wMid;
+ WORD wPid;
+ MMVERSION vDriverVersion;
+ WCHAR szPname[MAXPNAMELEN];
+ DWORD fdwSupport;
+ DWORD cDestinations;
+} MIXERCAPSW,*PMIXERCAPSW,*LPMIXERCAPSW;
+typedef struct tagMIXERLINEA {
+ DWORD cbStruct;
+ DWORD dwDestination;
+ DWORD dwSource;
+ DWORD dwLineID;
+ DWORD fdwLine;
+ DWORD dwUser;
+ DWORD dwComponentType;
+ DWORD cChannels;
+ DWORD cConnections;
+ DWORD cControls;
+ CHAR szShortName[MIXER_SHORT_NAME_CHARS];
+ CHAR szName[MIXER_LONG_NAME_CHARS];
+ struct {
+ DWORD dwType;
+ DWORD dwDeviceID;
+ WORD wMid;
+ WORD wPid;
+ MMVERSION vDriverVersion;
+ CHAR szPname[MAXPNAMELEN];
+ } Target;
+} MIXERLINEA,*PMIXERLINEA,*LPMIXERLINEA;
+typedef struct tagMIXERLINEW {
+ DWORD cbStruct;
+ DWORD dwDestination;
+ DWORD dwSource;
+ DWORD dwLineID;
+ DWORD fdwLine;
+ DWORD dwUser;
+ DWORD dwComponentType;
+ DWORD cChannels;
+ DWORD cConnections;
+ DWORD cControls;
+ WCHAR szShortName[MIXER_SHORT_NAME_CHARS];
+ WCHAR szName[MIXER_LONG_NAME_CHARS];
+ struct {
+ DWORD dwType;
+ DWORD dwDeviceID;
+ WORD wMid;
+ WORD wPid;
+ MMVERSION vDriverVersion;
+ WCHAR szPname[MAXPNAMELEN];
+ } Target;
+} MIXERLINEW,*PMIXERLINEW,*LPMIXERLINEW;
+typedef struct tagMIXERCONTROLA {
+ DWORD cbStruct;
+ DWORD dwControlID;
+ DWORD dwControlType;
+ DWORD fdwControl;
+ DWORD cMultipleItems;
+ CHAR szShortName[MIXER_SHORT_NAME_CHARS];
+ CHAR szName[MIXER_LONG_NAME_CHARS];
+ union {
+ _ANONYMOUS_STRUCT struct {
+ LONG lMinimum;
+ LONG lMaximum;
+ }_STRUCT_NAME(s);
+ _ANONYMOUS_STRUCT struct {
+ DWORD dwMinimum;
+ DWORD dwMaximum;
+ }_STRUCT_NAME(s1);
+ DWORD dwReserved[6];
+ } Bounds;
+ union {
+ DWORD cSteps;
+ DWORD cbCustomData;
+ DWORD dwReserved[6];
+ } Metrics;
+} MIXERCONTROLA,*PMIXERCONTROLA,*LPMIXERCONTROLA;
+typedef struct tagMIXERCONTROLW {
+ DWORD cbStruct;
+ DWORD dwControlID;
+ DWORD dwControlType;
+ DWORD fdwControl;
+ DWORD cMultipleItems;
+ WCHAR szShortName[MIXER_SHORT_NAME_CHARS];
+ WCHAR szName[MIXER_LONG_NAME_CHARS];
+ union {
+ _ANONYMOUS_STRUCT struct {
+ LONG lMinimum;
+ LONG lMaximum;
+ }_STRUCT_NAME(s);
+ _ANONYMOUS_STRUCT struct {
+ DWORD dwMinimum;
+ DWORD dwMaximum;
+ }_STRUCT_NAME(s1);
+ DWORD dwReserved[6];
+ } Bounds;
+ union {
+ DWORD cSteps;
+ DWORD cbCustomData;
+ DWORD dwReserved[6];
+ } Metrics;
+} MIXERCONTROLW,*PMIXERCONTROLW,*LPMIXERCONTROLW;
+typedef struct tagMIXERLINECONTROLSA {
+ DWORD cbStruct;
+ DWORD dwLineID;
+ _ANONYMOUS_UNION union {
+ DWORD dwControlID;
+ DWORD dwControlType;
+ } DUMMYUNIONNAME;
+ DWORD cControls;
+ DWORD cbmxctrl;
+ LPMIXERCONTROLA pamxctrl;
+} MIXERLINECONTROLSA,*PMIXERLINECONTROLSA,*LPMIXERLINECONTROLSA;
+typedef struct tagMIXERLINECONTROLSW {
+ DWORD cbStruct;
+ DWORD dwLineID;
+ _ANONYMOUS_UNION union {
+ DWORD dwControlID;
+ DWORD dwControlType;
+ } DUMMYUNIONNAME;
+ DWORD cControls;
+ DWORD cbmxctrl;
+ LPMIXERCONTROLW pamxctrl;
+} MIXERLINECONTROLSW,*PMIXERLINECONTROLSW,*LPMIXERLINECONTROLSW;
+typedef struct tMIXERCONTROLDETAILS {
+ DWORD cbStruct;
+ DWORD dwControlID;
+ DWORD cChannels;
+ _ANONYMOUS_UNION union {
+ HWND hwndOwner;
+ DWORD cMultipleItems;
+ } DUMMYUNIONNAME;
+ DWORD cbDetails;
+ PVOID paDetails;
+} MIXERCONTROLDETAILS,*PMIXERCONTROLDETAILS,*LPMIXERCONTROLDETAILS;
+typedef struct tagMIXERCONTROLDETAILS_LISTTEXTA {
+ DWORD dwParam1;
+ DWORD dwParam2;
+ CHAR szName[MIXER_LONG_NAME_CHARS];
+} MIXERCONTROLDETAILS_LISTTEXTA,*PMIXERCONTROLDETAILS_LISTTEXTA,*LPMIXERCONTROLDETAILS_LISTTEXTA;
+typedef struct tagMIXERCONTROLDETAILS_LISTTEXTW {
+ DWORD dwParam1;
+ DWORD dwParam2;
+ WCHAR szName[MIXER_LONG_NAME_CHARS];
+} MIXERCONTROLDETAILS_LISTTEXTW,*PMIXERCONTROLDETAILS_LISTTEXTW,*LPMIXERCONTROLDETAILS_LISTTEXTW;
+typedef struct tMIXERCONTROLDETAILS_BOOLEAN {
+ LONG fValue;
+} MIXERCONTROLDETAILS_BOOLEAN,*PMIXERCONTROLDETAILS_BOOLEAN,*LPMIXERCONTROLDETAILS_BOOLEAN;
+typedef struct tMIXERCONTROLDETAILS_SIGNED {
+ LONG lValue;
+} MIXERCONTROLDETAILS_SIGNED,*PMIXERCONTROLDETAILS_SIGNED,*LPMIXERCONTROLDETAILS_SIGNED;
+typedef struct tMIXERCONTROLDETAILS_UNSIGNED {
+ DWORD dwValue;
+} MIXERCONTROLDETAILS_UNSIGNED,*PMIXERCONTROLDETAILS_UNSIGNED,*LPMIXERCONTROLDETAILS_UNSIGNED;
+typedef void(CALLBACK TIMECALLBACK)(UINT,UINT,DWORD,DWORD,DWORD);
+typedef TIMECALLBACK *LPTIMECALLBACK;
+typedef struct timecaps_tag {
+ UINT wPeriodMin;
+ UINT wPeriodMax;
+} TIMECAPS,*PTIMECAPS,*LPTIMECAPS;
+typedef struct tagJOYCAPSA {
+ WORD wMid;
+ WORD wPid;
+ CHAR szPname[MAXPNAMELEN];
+ UINT wXmin;
+ UINT wXmax;
+ UINT wYmin;
+ UINT wYmax;
+ UINT wZmin;
+ UINT wZmax;
+ UINT wNumButtons;
+ UINT wPeriodMin;
+ UINT wPeriodMax;
+ UINT wRmin;
+ UINT wRmax;
+ UINT wUmin;
+ UINT wUmax;
+ UINT wVmin;
+ UINT wVmax;
+ UINT wCaps;
+ UINT wMaxAxes;
+ UINT wNumAxes;
+ UINT wMaxButtons;
+ CHAR szRegKey[MAXPNAMELEN];
+ CHAR szOEMVxD[MAX_JOYSTICKOEMVXDNAME];
+} JOYCAPSA,*PJOYCAPSA,*LPJOYCAPSA;
+typedef struct tagJOYCAPSW {
+ WORD wMid;
+ WORD wPid;
+ WCHAR szPname[MAXPNAMELEN];
+ UINT wXmin;
+ UINT wXmax;
+ UINT wYmin;
+ UINT wYmax;
+ UINT wZmin;
+ UINT wZmax;
+ UINT wNumButtons;
+ UINT wPeriodMin;
+ UINT wPeriodMax;
+ UINT wRmin;
+ UINT wRmax;
+ UINT wUmin;
+ UINT wUmax;
+ UINT wVmin;
+ UINT wVmax;
+ UINT wCaps;
+ UINT wMaxAxes;
+ UINT wNumAxes;
+ UINT wMaxButtons;
+ WCHAR szRegKey[MAXPNAMELEN];
+ WCHAR szOEMVxD[MAX_JOYSTICKOEMVXDNAME];
+} JOYCAPSW,*PJOYCAPSW,*LPJOYCAPSW;
+typedef struct joyinfo_tag {
+ UINT wXpos;
+ UINT wYpos;
+ UINT wZpos;
+ UINT wButtons;
+} JOYINFO,*PJOYINFO,*LPJOYINFO;
+typedef struct joyinfoex_tag {
+ DWORD dwSize;
+ DWORD dwFlags;
+ DWORD dwXpos;
+ DWORD dwYpos;
+ DWORD dwZpos;
+ DWORD dwRpos;
+ DWORD dwUpos;
+ DWORD dwVpos;
+ DWORD dwButtons;
+ DWORD dwButtonNumber;
+ DWORD dwPOV;
+ DWORD dwReserved1;
+ DWORD dwReserved2;
+} JOYINFOEX,*PJOYINFOEX,*LPJOYINFOEX;
+typedef DWORD FOURCC;
+typedef char *HPSTR;
+DECLARE_HANDLE(HMMIO);
+typedef LRESULT (CALLBACK MMIOPROC)(LPSTR,UINT,LPARAM,LPARAM);
+typedef MMIOPROC *LPMMIOPROC;
+typedef struct _MMIOINFO {
+ DWORD dwFlags;
+ FOURCC fccIOProc;
+ LPMMIOPROC pIOProc;
+ UINT wErrorRet;
+ HTASK htask;
+ LONG cchBuffer;
+ HPSTR pchBuffer;
+ HPSTR pchNext;
+ HPSTR pchEndRead;
+ HPSTR pchEndWrite;
+ LONG lBufOffset;
+ LONG lDiskOffset;
+ DWORD adwInfo[3];
+ DWORD dwReserved1;
+ DWORD dwReserved2;
+ HMMIO hmmio;
+} MMIOINFO,*PMMIOINFO,*LPMMIOINFO;
+typedef const MMIOINFO *LPCMMIOINFO;
+typedef struct _MMCKINFO {
+ FOURCC ckid;
+ DWORD cksize;
+ FOURCC fccType;
+ DWORD dwDataOffset;
+ DWORD dwFlags;
+} MMCKINFO,*PMMCKINFO,*LPMMCKINFO;
+typedef const MMCKINFO *LPCMMCKINFO;
+typedef struct tagMCI_GENERIC_PARMS {
+ DWORD dwCallback;
+} MCI_GENERIC_PARMS,*PMCI_GENERIC_PARMS,*LPMCI_GENERIC_PARMS;
+typedef struct tagMCI_OPEN_PARMSA {
+ DWORD dwCallback;
+ MCIDEVICEID wDeviceID;
+ LPCSTR lpstrDeviceType;
+ LPCSTR lpstrElementName;
+ LPCSTR lpstrAlias;
+} MCI_OPEN_PARMSA,*PMCI_OPEN_PARMSA,*LPMCI_OPEN_PARMSA;
+typedef struct tagMCI_OPEN_PARMSW {
+ DWORD dwCallback;
+ MCIDEVICEID wDeviceID;
+ LPCWSTR lpstrDeviceType;
+ LPCWSTR lpstrElementName;
+ LPCWSTR lpstrAlias;
+} MCI_OPEN_PARMSW,*PMCI_OPEN_PARMSW,*LPMCI_OPEN_PARMSW;
+typedef struct tagMCI_PLAY_PARMS {
+ DWORD dwCallback;
+ DWORD dwFrom;
+ DWORD dwTo;
+} MCI_PLAY_PARMS,*PMCI_PLAY_PARMS,*LPMCI_PLAY_PARMS;
+typedef struct tagMCI_SEEK_PARMS {
+ DWORD dwCallback;
+ DWORD dwTo;
+} MCI_SEEK_PARMS, *PMCI_SEEK_PARMS,*LPMCI_SEEK_PARMS;
+typedef struct tagMCI_STATUS_PARMS {
+ DWORD dwCallback;
+ DWORD dwReturn;
+ DWORD dwItem;
+ DWORD dwTrack;
+} MCI_STATUS_PARMS,*PMCI_STATUS_PARMS,*LPMCI_STATUS_PARMS;
+typedef struct tagMCI_INFO_PARMSA {
+ DWORD dwCallback;
+ LPSTR lpstrReturn;
+ DWORD dwRetSize;
+} MCI_INFO_PARMSA,*LPMCI_INFO_PARMSA;
+typedef struct tagMCI_INFO_PARMSW {
+ DWORD dwCallback;
+ LPWSTR lpstrReturn;
+ DWORD dwRetSize;
+} MCI_INFO_PARMSW,*LPMCI_INFO_PARMSW;
+typedef struct tagMCI_GETDEVCAPS_PARMS {
+ DWORD dwCallback;
+ DWORD dwReturn;
+ DWORD dwItem;
+} MCI_GETDEVCAPS_PARMS,*PMCI_GETDEVCAPS_PARMS,*LPMCI_GETDEVCAPS_PARMS;
+typedef struct tagMCI_SYSINFO_PARMSA {
+ DWORD dwCallback;
+ LPSTR lpstrReturn;
+ DWORD dwRetSize;
+ DWORD dwNumber;
+ UINT wDeviceType;
+} MCI_SYSINFO_PARMSA,*PMCI_SYSINFO_PARMSA,*LPMCI_SYSINFO_PARMSA;
+typedef struct tagMCI_SYSINFO_PARMSW {
+ DWORD dwCallback;
+ LPWSTR lpstrReturn;
+ DWORD dwRetSize;
+ DWORD dwNumber;
+ UINT wDeviceType;
+} MCI_SYSINFO_PARMSW,*PMCI_SYSINFO_PARMSW,*LPMCI_SYSINFO_PARMSW;
+typedef struct tagMCI_SET_PARMS {
+ DWORD dwCallback;
+ DWORD dwTimeFormat;
+ DWORD dwAudio;
+} MCI_SET_PARMS,*PMCI_SET_PARMS,*LPMCI_SET_PARMS;
+typedef struct tagMCI_BREAK_PARMS {
+ DWORD dwCallback;
+ int nVirtKey;
+ HWND hwndBreak;
+} MCI_BREAK_PARMS,*PMCI_BREAK_PARMS,*LPMCI_BREAK_PARMS;
+typedef struct tagMCI_SAVE_PARMSA {
+ DWORD dwCallback;
+ LPCSTR lpfilename;
+} MCI_SAVE_PARMSA,*PMCI_SAVE_PARMSA,*LPMCI_SAVE_PARMSA;
+typedef struct tagMCI_SAVE_PARMSW {
+ DWORD dwCallback;
+ LPCWSTR lpfilename;
+} MCI_SAVE_PARMSW,*PMCI_SAVE_PARMSW,*LPMCI_SAVE_PARMSW;
+typedef struct tagMCI_LOAD_PARMSA {
+ DWORD dwCallback;
+ LPCSTR lpfilename;
+} MCI_LOAD_PARMSA,*PMCI_LOAD_PARMSA,*LPMCI_LOAD_PARMSA;
+typedef struct tagMCI_LOAD_PARMSW {
+ DWORD dwCallback;
+ LPCWSTR lpfilename;
+} MCI_LOAD_PARMSW,*PMCI_LOAD_PARMSW,*LPMCI_LOAD_PARMSW;
+typedef struct tagMCI_RECORD_PARMS {
+ DWORD dwCallback;
+ DWORD dwFrom;
+ DWORD dwTo;
+} MCI_RECORD_PARMS,*LPMCI_RECORD_PARMS;
+typedef struct tagMCI_VD_PLAY_PARMS {
+ DWORD dwCallback;
+ DWORD dwFrom;
+ DWORD dwTo;
+ DWORD dwSpeed;
+} MCI_VD_PLAY_PARMS,*PMCI_VD_PLAY_PARMS,*LPMCI_VD_PLAY_PARMS;
+typedef struct tagMCI_VD_STEP_PARMS {
+ DWORD dwCallback;
+ DWORD dwFrames;
+} MCI_VD_STEP_PARMS,*PMCI_VD_STEP_PARMS,*LPMCI_VD_STEP_PARMS;
+typedef struct tagMCI_VD_ESCAPE_PARMSA {
+ DWORD dwCallback;
+ LPCSTR lpstrCommand;
+} MCI_VD_ESCAPE_PARMSA,*PMCI_VD_ESCAPE_PARMSA,*LPMCI_VD_ESCAPE_PARMSA;
+typedef struct tagMCI_VD_ESCAPE_PARMSW {
+ DWORD dwCallback;
+ LPCWSTR lpstrCommand;
+} MCI_VD_ESCAPE_PARMSW,*PMCI_VD_ESCAPE_PARMSW,*LPMCI_VD_ESCAPE_PARMSW;
+typedef struct tagMCI_WAVE_OPEN_PARMSA {
+ DWORD dwCallback;
+ MCIDEVICEID wDeviceID;
+ LPCSTR lpstrDeviceType;
+ LPCSTR lpstrElementName;
+ LPCSTR lpstrAlias;
+ DWORD dwBufferSeconds;
+} MCI_WAVE_OPEN_PARMSA,*PMCI_WAVE_OPEN_PARMSA,*LPMCI_WAVE_OPEN_PARMSA;
+typedef struct tagMCI_WAVE_OPEN_PARMSW {
+ DWORD dwCallback;
+ MCIDEVICEID wDeviceID;
+ LPCWSTR lpstrDeviceType;
+ LPCWSTR lpstrElementName;
+ LPCWSTR lpstrAlias;
+ DWORD dwBufferSeconds;
+} MCI_WAVE_OPEN_PARMSW,*PMCI_WAVE_OPEN_PARMSW,*LPMCI_WAVE_OPEN_PARMSW;
+typedef struct tagMCI_WAVE_DELETE_PARMS {
+ DWORD dwCallback;
+ DWORD dwFrom;
+ DWORD dwTo;
+} MCI_WAVE_DELETE_PARMS, *PMCI_WAVE_DELETE_PARMS,*LPMCI_WAVE_DELETE_PARMS;
+typedef struct tagMCI_WAVE_SET_PARMS {
+ DWORD dwCallback;
+ DWORD dwTimeFormat;
+ DWORD dwAudio;
+ UINT wInput;
+ UINT wOutput;
+ WORD wFormatTag;
+ WORD wReserved2;
+ WORD nChannels;
+ WORD wReserved3;
+ DWORD nSamplesPerSec;
+ DWORD nAvgBytesPerSec;
+ WORD nBlockAlign;
+ WORD wReserved4;
+ WORD wBitsPerSample;
+ WORD wReserved5;
+} MCI_WAVE_SET_PARMS,*PMCI_WAVE_SET_PARMS,*LPMCI_WAVE_SET_PARMS;
+
+LRESULT WINAPI CloseDriver(HDRVR,LONG,LONG);
+HDRVR WINAPI OpenDriver(LPCWSTR,LPCWSTR,LONG);
+LRESULT WINAPI SendDriverMessage(HDRVR,UINT,LONG,LONG);
+HMODULE WINAPI DrvGetModuleHandle(HDRVR);
+HMODULE WINAPI GetDriverModuleHandle(HDRVR);
+LRESULT WINAPI DefDriverProc(DWORD,HDRVR,UINT,LPARAM,LPARAM);
+UINT WINAPI mmsystemGetVersion(void);
+#define OutputDebugStr OutputDebugString
+BOOL WINAPI sndPlaySoundA(LPCSTR,UINT);
+BOOL WINAPI sndPlaySoundW(LPCWSTR,UINT);
+BOOL WINAPI PlaySoundA(LPCSTR,HMODULE,DWORD);
+BOOL WINAPI PlaySoundW(LPCWSTR,HMODULE,DWORD);
+UINT WINAPI waveOutGetNumDevs(void);
+MMRESULT WINAPI waveOutGetDevCapsA(UINT,LPWAVEOUTCAPSA,UINT);
+MMRESULT WINAPI waveOutGetDevCapsW(UINT,LPWAVEOUTCAPSW,UINT);
+MMRESULT WINAPI waveOutGetVolume(HWAVEOUT,PDWORD);
+MMRESULT WINAPI waveOutSetVolume(HWAVEOUT,DWORD);
+MMRESULT WINAPI waveOutGetErrorTextA(MMRESULT,LPSTR,UINT);
+MMRESULT WINAPI waveOutGetErrorTextW(MMRESULT,LPWSTR,UINT);
+MMRESULT WINAPI waveOutOpen(LPHWAVEOUT,UINT,LPCWAVEFORMATEX,DWORD,DWORD,DWORD);
+MMRESULT WINAPI waveOutClose(HWAVEOUT);
+MMRESULT WINAPI waveOutPrepareHeader(HWAVEOUT,LPWAVEHDR,UINT);
+MMRESULT WINAPI waveOutUnprepareHeader(HWAVEOUT,LPWAVEHDR,UINT);
+MMRESULT WINAPI waveOutWrite(HWAVEOUT,LPWAVEHDR,UINT);
+MMRESULT WINAPI waveOutPause(HWAVEOUT);
+MMRESULT WINAPI waveOutRestart(HWAVEOUT);
+MMRESULT WINAPI waveOutReset(HWAVEOUT);
+MMRESULT WINAPI waveOutBreakLoop(HWAVEOUT);
+MMRESULT WINAPI waveOutGetPosition(HWAVEOUT,LPMMTIME,UINT);
+MMRESULT WINAPI waveOutGetPitch(HWAVEOUT,PDWORD);
+MMRESULT WINAPI waveOutSetPitch(HWAVEOUT,DWORD);
+MMRESULT WINAPI waveOutGetPlaybackRate(HWAVEOUT,PDWORD);
+MMRESULT WINAPI waveOutSetPlaybackRate(HWAVEOUT,DWORD);
+MMRESULT WINAPI waveOutGetID(HWAVEOUT,LPUINT);
+MMRESULT WINAPI waveOutMessage(HWAVEOUT,UINT,DWORD,DWORD);
+UINT WINAPI waveInGetNumDevs(void);
+MMRESULT WINAPI waveInGetDevCapsA(UINT,LPWAVEINCAPSA,UINT);
+MMRESULT WINAPI waveInGetDevCapsW(UINT,LPWAVEINCAPSW,UINT);
+MMRESULT WINAPI waveInGetErrorTextA(MMRESULT,LPSTR,UINT);
+MMRESULT WINAPI waveInGetErrorTextW(MMRESULT,LPWSTR,UINT);
+MMRESULT WINAPI waveInOpen(LPHWAVEIN,UINT,LPCWAVEFORMATEX,DWORD,DWORD,DWORD);
+MMRESULT WINAPI waveInClose(HWAVEIN);
+MMRESULT WINAPI waveInPrepareHeader(HWAVEIN,LPWAVEHDR,UINT);
+MMRESULT WINAPI waveInUnprepareHeader(HWAVEIN,LPWAVEHDR,UINT);
+MMRESULT WINAPI waveInAddBuffer(HWAVEIN,LPWAVEHDR,UINT);
+MMRESULT WINAPI waveInStart(HWAVEIN);
+MMRESULT WINAPI waveInStop(HWAVEIN);
+MMRESULT WINAPI waveInReset(HWAVEIN);
+MMRESULT WINAPI waveInGetPosition(HWAVEIN,LPMMTIME,UINT);
+MMRESULT WINAPI waveInGetID(HWAVEIN,LPUINT);
+MMRESULT WINAPI waveInMessage(HWAVEIN,UINT,DWORD,DWORD);
+UINT WINAPI midiOutGetNumDevs(void);
+MMRESULT WINAPI midiStreamOpen(LPHMIDISTRM,LPUINT,DWORD,DWORD,DWORD,DWORD);
+MMRESULT WINAPI midiStreamClose(HMIDISTRM);
+MMRESULT WINAPI midiStreamProperty(HMIDISTRM,LPBYTE,DWORD);
+MMRESULT WINAPI midiStreamPosition(HMIDISTRM,LPMMTIME,UINT);
+MMRESULT WINAPI midiStreamOut(HMIDISTRM,LPMIDIHDR,UINT);
+MMRESULT WINAPI midiStreamPause(HMIDISTRM);
+MMRESULT WINAPI midiStreamRestart(HMIDISTRM);
+MMRESULT WINAPI midiStreamStop(HMIDISTRM);
+MMRESULT WINAPI midiConnect(HMIDI,HMIDIOUT,PVOID);
+MMRESULT WINAPI midiDisconnect(HMIDI,HMIDIOUT,PVOID);
+MMRESULT WINAPI midiOutGetDevCapsA(UINT,LPMIDIOUTCAPSA,UINT);
+MMRESULT WINAPI midiOutGetDevCapsW(UINT,LPMIDIOUTCAPSW,UINT);
+MMRESULT WINAPI midiOutGetVolume(HMIDIOUT,PDWORD);
+MMRESULT WINAPI midiOutSetVolume(HMIDIOUT,DWORD);
+MMRESULT WINAPI midiOutGetErrorTextA(MMRESULT,LPSTR,UINT);
+MMRESULT WINAPI midiOutGetErrorTextW(MMRESULT,LPWSTR,UINT);
+MMRESULT WINAPI midiOutOpen(LPHMIDIOUT,UINT,DWORD,DWORD,DWORD);
+MMRESULT WINAPI midiOutClose(HMIDIOUT);
+MMRESULT WINAPI midiOutPrepareHeader(HMIDIOUT,LPMIDIHDR,UINT);
+MMRESULT WINAPI midiOutUnprepareHeader(HMIDIOUT,LPMIDIHDR,UINT);
+MMRESULT WINAPI midiOutShortMsg(HMIDIOUT,DWORD);
+MMRESULT WINAPI midiOutLongMsg(HMIDIOUT,LPMIDIHDR,UINT);
+MMRESULT WINAPI midiOutReset(HMIDIOUT);
+MMRESULT WINAPI midiOutCachePatches(HMIDIOUT,UINT,LPWORD,UINT);
+MMRESULT WINAPI midiOutCacheDrumPatches(HMIDIOUT,UINT,LPWORD,UINT);
+MMRESULT WINAPI midiOutGetID(HMIDIOUT,LPUINT);
+MMRESULT WINAPI midiOutMessage(HMIDIOUT,UINT,DWORD,DWORD);
+UINT WINAPI midiInGetNumDevs(void);
+MMRESULT WINAPI midiInGetDevCapsA(UINT,LPMIDIINCAPSA,UINT);
+MMRESULT WINAPI midiInGetDevCapsW(UINT,LPMIDIINCAPSW,UINT);
+MMRESULT WINAPI midiInGetErrorTextA(MMRESULT,LPSTR,UINT);
+MMRESULT WINAPI midiInGetErrorTextW(MMRESULT,LPWSTR,UINT);
+MMRESULT WINAPI midiInOpen(LPHMIDIIN,UINT,DWORD,DWORD,DWORD);
+MMRESULT WINAPI midiInClose(HMIDIIN);
+MMRESULT WINAPI midiInPrepareHeader(HMIDIIN,LPMIDIHDR,UINT);
+MMRESULT WINAPI midiInUnprepareHeader(HMIDIIN,LPMIDIHDR,UINT);
+MMRESULT WINAPI midiInAddBuffer(HMIDIIN,LPMIDIHDR,UINT);
+MMRESULT WINAPI midiInStart(HMIDIIN);
+MMRESULT WINAPI midiInStop(HMIDIIN);
+MMRESULT WINAPI midiInReset(HMIDIIN);
+MMRESULT WINAPI midiInGetID(HMIDIIN,LPUINT);
+MMRESULT WINAPI midiInMessage(HMIDIIN,UINT,DWORD,DWORD);
+UINT WINAPI auxGetNumDevs(void);
+MMRESULT WINAPI auxGetDevCapsA(UINT,LPAUXCAPSA,UINT);
+MMRESULT WINAPI auxGetDevCapsW(UINT,LPAUXCAPSW,UINT);
+MMRESULT WINAPI auxSetVolume(UINT,DWORD);
+MMRESULT WINAPI auxGetVolume(UINT,PDWORD);
+MMRESULT WINAPI auxOutMessage(UINT,UINT,DWORD,DWORD);
+UINT WINAPI mixerGetNumDevs(void);
+MMRESULT WINAPI mixerGetDevCapsA(UINT,LPMIXERCAPSA,UINT);
+MMRESULT WINAPI mixerGetDevCapsW(UINT,LPMIXERCAPSW,UINT);
+MMRESULT WINAPI mixerOpen(LPHMIXER,UINT,DWORD,DWORD,DWORD);
+MMRESULT WINAPI mixerClose(HMIXER);
+DWORD WINAPI mixerMessage(HMIXER,UINT,DWORD,DWORD);
+MMRESULT WINAPI mixerGetLineInfoA(HMIXEROBJ,LPMIXERLINEA,DWORD);
+MMRESULT WINAPI mixerGetLineInfoW(HMIXEROBJ,LPMIXERLINEW,DWORD);
+MMRESULT WINAPI mixerGetID(HMIXEROBJ,PUINT,DWORD);
+MMRESULT WINAPI mixerGetLineControlsA(HMIXEROBJ,LPMIXERLINECONTROLSA,DWORD);
+MMRESULT WINAPI mixerGetLineControlsW(HMIXEROBJ,LPMIXERLINECONTROLSW,DWORD);
+MMRESULT WINAPI mixerGetControlDetailsA(HMIXEROBJ,LPMIXERCONTROLDETAILS,DWORD);
+MMRESULT WINAPI mixerGetControlDetailsW(HMIXEROBJ,LPMIXERCONTROLDETAILS,DWORD);
+MMRESULT WINAPI mixerSetControlDetails(HMIXEROBJ,LPMIXERCONTROLDETAILS,DWORD);
+MMRESULT WINAPI timeGetSystemTime(LPMMTIME,UINT);
+DWORD WINAPI timeGetTime(void);
+MMRESULT WINAPI timeSetEvent(UINT,UINT,LPTIMECALLBACK,DWORD,UINT);
+MMRESULT WINAPI timeKillEvent(UINT);
+MMRESULT WINAPI timeGetDevCaps(LPTIMECAPS,UINT);
+MMRESULT WINAPI timeBeginPeriod(UINT);
+MMRESULT WINAPI timeEndPeriod(UINT);
+UINT WINAPI joyGetNumDevs(void);
+MMRESULT WINAPI joyGetDevCapsA(UINT,LPJOYCAPSA,UINT);
+MMRESULT WINAPI joyGetDevCapsW(UINT,LPJOYCAPSW,UINT);
+MMRESULT WINAPI joyGetPos(UINT,LPJOYINFO);
+MMRESULT WINAPI joyGetPosEx(UINT,LPJOYINFOEX);
+MMRESULT WINAPI joyGetThreshold(UINT,LPUINT);
+MMRESULT WINAPI joyReleaseCapture(UINT);
+MMRESULT WINAPI joySetCapture(HWND,UINT,UINT,BOOL);
+MMRESULT WINAPI joySetThreshold(UINT,UINT);
+FOURCC WINAPI mmioStringToFOURCCA(LPCSTR,UINT);
+FOURCC WINAPI mmioStringToFOURCCW(LPCWSTR,UINT);
+LPMMIOPROC WINAPI mmioInstallIOProcA(FOURCC,LPMMIOPROC,DWORD);
+LPMMIOPROC WINAPI mmioInstallIOProcW(FOURCC,LPMMIOPROC,DWORD);
+HMMIO WINAPI mmioOpenA(LPSTR,LPMMIOINFO,DWORD);
+HMMIO WINAPI mmioOpenW(LPWSTR,LPMMIOINFO,DWORD);
+MMRESULT WINAPI mmioRenameA(LPCSTR,LPCSTR,LPCMMIOINFO,DWORD);
+MMRESULT WINAPI mmioRenameW(LPCWSTR,LPCWSTR,LPCMMIOINFO,DWORD);
+MMRESULT WINAPI mmioClose(HMMIO,UINT);
+LONG WINAPI mmioRead(HMMIO,HPSTR,LONG);
+LONG WINAPI mmioWrite(HMMIO,LPCSTR,LONG);
+LONG WINAPI mmioSeek(HMMIO,LONG,int);
+MMRESULT WINAPI mmioGetInfo(HMMIO,LPMMIOINFO,UINT);
+MMRESULT WINAPI mmioSetInfo(HMMIO,LPCMMIOINFO,UINT);
+MMRESULT WINAPI mmioSetBuffer(HMMIO,LPSTR,LONG,UINT);
+MMRESULT WINAPI mmioFlush(HMMIO,UINT);
+MMRESULT WINAPI mmioAdvance(HMMIO,LPMMIOINFO,UINT);
+LRESULT WINAPI mmioSendMessage(HMMIO,UINT,LPARAM,LPARAM);
+MMRESULT WINAPI mmioDescend(HMMIO,LPMMCKINFO,const MMCKINFO*,UINT);
+MMRESULT WINAPI mmioAscend(HMMIO,LPMMCKINFO,UINT);
+MMRESULT WINAPI mmioCreateChunk(HMMIO,LPMMCKINFO,UINT);
+MCIERROR WINAPI mciSendCommandA(MCIDEVICEID,UINT,DWORD,DWORD);
+MCIERROR WINAPI mciSendCommandW(MCIDEVICEID,UINT,DWORD,DWORD);
+MCIERROR WINAPI mciSendStringA(LPCSTR,LPSTR,UINT,HWND);
+MCIERROR WINAPI mciSendStringW(LPCWSTR,LPWSTR,UINT,HWND);
+MCIDEVICEID WINAPI mciGetDeviceIDA(LPCSTR);
+MCIDEVICEID WINAPI mciGetDeviceIDW(LPCWSTR);
+MCIDEVICEID WINAPI mciGetDeviceIDFromElementIDA(DWORD,LPCSTR);
+MCIDEVICEID WINAPI mciGetDeviceIDFromElementIDW(DWORD,LPCWSTR);
+BOOL WINAPI mciGetErrorStringA(MCIERROR,LPSTR,UINT);
+BOOL WINAPI mciGetErrorStringW(MCIERROR,LPWSTR,UINT);
+BOOL WINAPI mciSetYieldProc(MCIDEVICEID,YIELDPROC,DWORD);
+HTASK WINAPI mciGetCreatorTask(MCIDEVICEID);
+YIELDPROC WINAPI mciGetYieldProc(MCIDEVICEID,PDWORD);
+
+typedef struct tagMCI_SEQ_SET_PARMS {
+ DWORD dwCallback;
+ DWORD dwTimeFormat;
+ DWORD dwAudio;
+ DWORD dwTempo;
+ DWORD dwPort;
+ DWORD dwSlave;
+ DWORD dwMaster;
+ DWORD dwOffset;
+} MCI_SEQ_SET_PARMS,*PMCI_SEQ_SET_PARMS,*LPMCI_SEQ_SET_PARMS;
+typedef struct tagMCI_ANIM_OPEN_PARMSA {
+ DWORD dwCallback;
+ MCIDEVICEID wDeviceID;
+ LPCSTR lpstrDeviceType;
+ LPCSTR lpstrElementName;
+ LPCSTR lpstrAlias;
+ DWORD dwStyle;
+ HWND hWndParent;
+} MCI_ANIM_OPEN_PARMSA,*PMCI_ANIM_OPEN_PARMSA,*LPMCI_ANIM_OPEN_PARMSA;
+typedef struct tagMCI_ANIM_OPEN_PARMSW {
+ DWORD dwCallback;
+ MCIDEVICEID wDeviceID;
+ LPCWSTR lpstrDeviceType;
+ LPCWSTR lpstrElementName;
+ LPCWSTR lpstrAlias;
+ DWORD dwStyle;
+ HWND hWndParent;
+} MCI_ANIM_OPEN_PARMSW,*PMCI_ANIM_OPEN_PARMSW,*LPMCI_ANIM_OPEN_PARMSW;
+typedef struct tagMCI_ANIM_PLAY_PARMS {
+ DWORD dwCallback;
+ DWORD dwFrom;
+ DWORD dwTo;
+ DWORD dwSpeed;
+} MCI_ANIM_PLAY_PARMS,*PMCI_ANIM_PLAY_PARMS,*LPMCI_ANIM_PLAY_PARMS;
+typedef struct tagMCI_ANIM_STEP_PARMS {
+ DWORD dwCallback;
+ DWORD dwFrames;
+} MCI_ANIM_STEP_PARMS,*PMCI_ANIM_STEP_PARMS,*LPMCI_ANIM_STEP_PARMS;
+typedef struct tagMCI_ANIM_WINDOW_PARMSA {
+ DWORD dwCallback;
+ HWND hWnd;
+ UINT nCmdShow;
+ LPCSTR lpstrText;
+} MCI_ANIM_WINDOW_PARMSA,*PMCI_ANIM_WINDOW_PARMSA,*LPMCI_ANIM_WINDOW_PARMSA;
+typedef struct tagMCI_ANIM_WINDOW_PARMSW {
+ DWORD dwCallback;
+ HWND hWnd;
+ UINT nCmdShow;
+ LPCWSTR lpstrText;
+} MCI_ANIM_WINDOW_PARMSW,*PMCI_ANIM_WINDOW_PARMSW,*LPMCI_ANIM_WINDOW_PARMSW;
+typedef struct tagMCI_ANIM_RECT_PARMS {
+ DWORD dwCallback;
+#ifdef MCI_USE_OFFEXT
+ POINT ptOffset;
+ POINT ptExtent;
+#else
+ RECT rc;
+#endif
+} MCI_ANIM_RECT_PARMS,*PMCI_ANIM_RECT_PARMS,*LPMCI_ANIM_RECT_PARMS;
+typedef struct tagMCI_ANIM_UPDATE_PARMS {
+ DWORD dwCallback;
+ RECT rc;
+ HDC hDC;
+} MCI_ANIM_UPDATE_PARMS,*PMCI_ANIM_UPDATE_PARMS,*LPMCI_ANIM_UPDATE_PARMS;
+typedef struct tagMCI_OVLY_OPEN_PARMSA {
+ DWORD dwCallback;
+ MCIDEVICEID wDeviceID;
+ LPCSTR lpstrDeviceType;
+ LPCSTR lpstrElementName;
+ LPCSTR lpstrAlias;
+ DWORD dwStyle;
+ HWND hWndParent;
+} MCI_OVLY_OPEN_PARMSA,*PMCI_OVLY_OPEN_PARMSA,*LPMCI_OVLY_OPEN_PARMSA;
+typedef struct tagMCI_OVLY_OPEN_PARMSW {
+ DWORD dwCallback;
+ MCIDEVICEID wDeviceID;
+ LPCWSTR lpstrDeviceType;
+ LPCWSTR lpstrElementName;
+ LPCWSTR lpstrAlias;
+ DWORD dwStyle;
+ HWND hWndParent;
+} MCI_OVLY_OPEN_PARMSW,*PMCI_OVLY_OPEN_PARMSW,*LPMCI_OVLY_OPEN_PARMSW;
+typedef struct tagMCI_OVLY_WINDOW_PARMSA {
+ DWORD dwCallback;
+ HWND hWnd;
+ UINT nCmdShow;
+ LPCSTR lpstrText;
+} MCI_OVLY_WINDOW_PARMSA,*PMCI_OVLY_WINDOW_PARMSA,*LPMCI_OVLY_WINDOW_PARMSA;
+typedef struct tagMCI_OVLY_WINDOW_PARMSW {
+ DWORD dwCallback;
+ HWND hWnd;
+ UINT nCmdShow;
+ LPCWSTR lpstrText;
+} MCI_OVLY_WINDOW_PARMSW,*PMCI_OVLY_WINDOW_PARMSW,*LPMCI_OVLY_WINDOW_PARMSW;
+typedef struct tagMCI_OVLY_RECT_PARMS {
+ DWORD dwCallback;
+#ifdef MCI_USE_OFFEXT
+ POINT ptOffset;
+ POINT ptExtent;
+#else
+ RECT rc;
+#endif
+} MCI_OVLY_RECT_PARMS,*PMCI_OVLY_RECT_PARMS,*LPMCI_OVLY_RECT_PARMS;
+typedef struct tagMCI_OVLY_SAVE_PARMSA {
+ DWORD dwCallback;
+ LPCSTR lpfilename;
+ RECT rc;
+} MCI_OVLY_SAVE_PARMSA,*PMCI_OVLY_SAVE_PARMSA,*LPMCI_OVLY_SAVE_PARMSA;
+typedef struct tagMCI_OVLY_SAVE_PARMSW {
+ DWORD dwCallback;
+ LPCWSTR lpfilename;
+ RECT rc;
+} MCI_OVLY_SAVE_PARMSW,*PMCI_OVLY_SAVE_PARMSW,*LPMCI_OVLY_SAVE_PARMSW;
+typedef struct tagMCI_OVLY_LOAD_PARMSA {
+ DWORD dwCallback;
+ LPCSTR lpfilename;
+ RECT rc;
+} MCI_OVLY_LOAD_PARMSA,*PMCI_OVLY_LOAD_PARMSA,*LPMCI_OVLY_LOAD_PARMSA;
+typedef struct tagMCI_OVLY_LOAD_PARMSW {
+ DWORD dwCallback;
+ LPCWSTR lpfilename;
+ RECT rc;
+} MCI_OVLY_LOAD_PARMSW,*PMCI_OVLY_LOAD_PARMSW,*LPMCI_OVLY_LOAD_PARMSW;
+
+#ifdef UNICODE
+typedef WAVEOUTCAPSW WAVEOUTCAPS,*PWAVEOUTCAPS,*LPWAVEOUTCAPS;
+typedef WAVEINCAPSW WAVEINCAPS,*PWAVEINCAPS,*LPWAVEINCAPS;
+typedef MIDIOUTCAPSW MIDIOUTCAPS,*PMIDIOUTCAPS,*LPMIDIOUTCAPS;
+typedef MIDIINCAPSW MIDIINCAPS,*PMIDIINCAPS,*LPMIDIINCAPS;
+typedef AUXCAPSW AUXCAPS,*PAUXCAPS,*LPAUXCAPS;
+typedef MIXERCAPSW MIXERCAPS,*PMIXERCAPS,*LPMIXERCAPS;
+typedef MIXERLINEW MIXERLINE,*PMIXERLINE,*LPMIXERLINE;
+typedef MIXERCONTROLW MIXERCONTROL,*PMIXERCONTROL,*LPMIXERCONTROL;
+typedef MIXERLINECONTROLSW MIXERLINECONTROLS,*PMIXERLINECONTROLS,*LPMIXERLINECONTROLS;
+typedef MIXERCONTROLDETAILS_LISTTEXTW MIXERCONTROLDETAILS_LISTTEXT,*PMIXERCONTROLDETAILS_LISTTEXT,*LPMIXERCONTROLDETAILS_LISTTEXT;
+typedef JOYCAPSW JOYCAPS,*PJOYCAPS,*LPJOYCAPS;
+typedef MCI_OPEN_PARMSW MCI_OPEN_PARMS,*PMCI_OPEN_PARMS,*LPMCI_OPEN_PARMS;
+typedef MCI_INFO_PARMSW MCI_INFO_PARMS,*LPMCI_INFO_PARMS;
+typedef MCI_SYSINFO_PARMSW MCI_SYSINFO_PARMS,*PMCI_SYSINFO_PARMS,*LPMCI_SYSINFO_PARMS;
+typedef MCI_SAVE_PARMSW MCI_SAVE_PARMS,*PMCI_SAVE_PARMS,*LPMCI_SAVE_PARMS;
+typedef MCI_LOAD_PARMSW MCI_LOAD_PARMS,*PMCI_LOAD_PARMS,*LPMCI_LOAD_PARMS;
+typedef MCI_VD_ESCAPE_PARMSW MCI_VD_ESCAPE_PARMS,*PMCI_VD_ESCAPE_PARMS,*LPMCI_VD_ESCAPE_PARMS;
+typedef MCI_WAVE_OPEN_PARMSW MCI_WAVE_OPEN_PARMS,*PMCI_WAVE_OPEN_PARMS,*LPMCI_WAVE_OPEN_PARMS;
+typedef MCI_ANIM_OPEN_PARMSW MCI_ANIM_OPEN_PARMS,*PMCI_ANIM_OPEN_PARMS,*LPMCI_ANIM_OPEN_PARMS;
+typedef MCI_ANIM_WINDOW_PARMSW MCI_ANIM_WINDOW_PARMS,*PMCI_ANIM_WINDOW_PARMS,*LPMCI_ANIM_WINDOW_PARMS;
+typedef MCI_OVLY_OPEN_PARMSW MCI_OVLY_OPEN_PARMS,*PMCI_OVLY_OPEN_PARMS,*LPMCI_OVLY_OPEN_PARMS;
+typedef MCI_OVLY_WINDOW_PARMSW MCI_OVLY_WINDOW_PARMS,*PMCI_OVLY_WINDOW_PARMS,*LPMCI_OVLY_WINDOW_PARMS;
+typedef MCI_OVLY_SAVE_PARMSW MCI_OVLY_SAVE_PARMS,*PMCI_OVLY_SAVE_PARMS,*LPMCI_OVLY_SAVE_PARMS;
+#define sndPlaySound sndPlaySoundW
+#define PlaySound PlaySoundW
+#define waveOutGetDevCaps waveOutGetDevCapsW
+#define waveOutGetErrorText waveOutGetErrorTextW
+#define waveInGetDevCaps waveInGetDevCapsW
+#define waveInGetErrorText waveInGetErrorTextW
+#define midiOutGetDevCaps midiOutGetDevCapsW
+#define midiOutGetErrorText midiOutGetErrorTextW
+#define midiInGetDevCaps midiInGetDevCapsW
+#define midiInGetErrorText midiInGetErrorTextW
+#define auxGetDevCaps auxGetDevCapsW
+#define mixerGetDevCaps mixerGetDevCapsW
+#define mixerGetLineInfo mixerGetLineInfoW
+#define mixerGetLineControls mixerGetLineControlsW
+#define mixerGetControlDetails mixerGetControlDetailsW
+#define joyGetDevCaps joyGetDevCapsW
+#define mmioInstallIOProc mmioInstallIOProcW
+#define mmioStringToFOURCC mmioStringToFOURCCW
+#define mmioOpen mmioOpenW
+#define mmioRename mmioRenameW
+#define mciSendCommand mciSendCommandW
+#define mciSendString mciSendStringW
+#define mciGetDeviceID mciGetDeviceIDW
+#define mciGetDeviceIDFromElementID mciGetDeviceIDFromElementIDW
+#define mciGetErrorString mciGetErrorStringW
+#else
+typedef WAVEOUTCAPSA WAVEOUTCAPS,*PWAVEOUTCAPS,*LPWAVEOUTCAPS;
+typedef WAVEINCAPSA WAVEINCAPS,*PWAVEINCAPS,*LPWAVEINCAPS;
+typedef MIDIOUTCAPSA MIDIOUTCAPS,*PMIDIOUTCAPS,*LPMIDIOUTCAPS;
+typedef MIDIINCAPSA MIDIINCAPS,*PMIDIINCAPS,*LPMIDIINCAPS;
+typedef AUXCAPSA AUXCAPS,*PAUXCAPS,*LPAUXCAPS;
+typedef MIXERCAPSA MIXERCAPS,*PMIXERCAPS,*LPMIXERCAPS;
+typedef MIXERLINEA MIXERLINE,*PMIXERLINE,*LPMIXERLINE;
+typedef MIXERCONTROLA MIXERCONTROL,*PMIXERCONTROL,*LPMIXERCONTROL;
+typedef MIXERLINECONTROLSA MIXERLINECONTROLS,*PMIXERLINECONTROLS,*LPMIXERLINECONTROLS;
+typedef MIXERCONTROLDETAILS_LISTTEXTA MIXERCONTROLDETAILS_LISTTEXT,*PMIXERCONTROLDETAILS_LISTTEXT,*LPMIXERCONTROLDETAILS_LISTTEXT;
+typedef JOYCAPSA JOYCAPS,*PJOYCAPS,*LPJOYCAPS;
+typedef MCI_OPEN_PARMSA MCI_OPEN_PARMS,*PMCI_OPEN_PARMS,*LPMCI_OPEN_PARMS;
+typedef MCI_INFO_PARMSA MCI_INFO_PARMS,*LPMCI_INFO_PARMS;
+typedef MCI_SYSINFO_PARMSA MCI_SYSINFO_PARMS,*PMCI_SYSINFO_PARMS,*LPMCI_SYSINFO_PARMS;
+typedef MCI_SAVE_PARMSA MCI_SAVE_PARMS,*PMCI_SAVE_PARMS,*LPMCI_SAVE_PARMS;
+typedef MCI_LOAD_PARMSA MCI_LOAD_PARMS,*PMCI_LOAD_PARMS,*LPMCI_LOAD_PARMS;
+typedef MCI_VD_ESCAPE_PARMSA MCI_VD_ESCAPE_PARMS,*PMCI_VD_ESCAPE_PARMS,*LPMCI_VD_ESCAPE_PARMS;
+typedef MCI_WAVE_OPEN_PARMSA MCI_WAVE_OPEN_PARMS,*PMCI_WAVE_OPEN_PARMS,*LPMCI_WAVE_OPEN_PARMS;
+typedef MCI_ANIM_OPEN_PARMSA MCI_ANIM_OPEN_PARMS,*PMCI_ANIM_OPEN_PARMS,*LPMCI_ANIM_OPEN_PARMS;
+typedef MCI_ANIM_WINDOW_PARMSA MCI_ANIM_WINDOW_PARMS,*PMCI_ANIM_WINDOW_PARMS,*LPMCI_ANIM_WINDOW_PARMS;
+typedef MCI_OVLY_OPEN_PARMSA MCI_OVLY_OPEN_PARMS,*PMCI_OVLY_OPEN_PARMS,*LPMCI_OVLY_OPEN_PARMS;
+typedef MCI_OVLY_WINDOW_PARMSA MCI_OVLY_WINDOW_PARMS,*PMCI_OVLY_WINDOW_PARMS,*LPMCI_OVLY_WINDOW_PARMS;
+typedef MCI_OVLY_SAVE_PARMSA MCI_OVLY_SAVE_PARMS,*PMCI_OVLY_SAVE_PARMS,*LPMCI_OVLY_SAVE_PARMS;
+#define sndPlaySound sndPlaySoundA
+#define PlaySound PlaySoundA
+#define waveOutGetDevCaps waveOutGetDevCapsA
+#define waveOutGetErrorText waveOutGetErrorTextA
+#define waveInGetDevCaps waveInGetDevCapsA
+#define waveInGetErrorText waveInGetErrorTextA
+#define midiOutGetDevCaps midiOutGetDevCapsA
+#define midiOutGetErrorText midiOutGetErrorTextA
+#define midiInGetDevCaps midiInGetDevCapsA
+#define midiInGetErrorText midiInGetErrorTextA
+#define auxGetDevCaps auxGetDevCapsA
+#define mixerGetDevCaps mixerGetDevCapsA
+#define mixerGetLineInfo mixerGetLineInfoA
+#define mixerGetLineControls mixerGetLineControlsA
+#define mixerGetControlDetails mixerGetControlDetailsA
+#define joyGetDevCaps joyGetDevCapsA
+#define mmioInstallIOProc mmioInstallIOProcA
+#define mmioStringToFOURCC mmioStringToFOURCCA
+#define mmioOpen mmioOpenA
+#define mmioRename mmioRenameA
+#define mciSendCommand mciSendCommandA
+#define mciSendString mciSendStringA
+#define mciGetDeviceID mciGetDeviceIDA
+#define mciGetDeviceIDFromElementID mciGetDeviceIDFromElementIDA
+#define mciGetErrorString mciGetErrorStringA
+#endif
+#ifdef __cplusplus
+}
+#endif
+#pragma pack(pop)
+#endif
diff --git a/tcc/include/winapi/mpegtype.h b/tcc/include/winapi/mpegtype.h
new file mode 100644
index 0000000..9d8a218
--- /dev/null
+++ b/tcc/include/winapi/mpegtype.h
@@ -0,0 +1,29 @@
+#ifndef _MPEGTYPE_H
+#define _MPEGTYPE_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#include <strmif.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--- DirectShow Reference - DirectShow Structures */
+typedef struct tagAM_MPEGSTREAMTYPE {
+ DWORD dwStreamID;
+ DWORD dwReserved;
+ AM_MEDIA_TYPE mt;
+ BYTE bFormat[1];
+} AM_MPEGSTREAMTYPE;
+typedef struct tagAM_MPEGSYSTEMTYPE {
+ DWORD dwBitRate;
+ DWORD cStreams;
+ AM_MPEGSTREAMTYPE Streams[1];
+} AM_MPEGSYSTEMTYPE;
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/mprapi.h b/tcc/include/winapi/mprapi.h
new file mode 100644
index 0000000..0145264
--- /dev/null
+++ b/tcc/include/winapi/mprapi.h
@@ -0,0 +1,576 @@
+/*
+ * mprapi.h - Routing and Remote Access Services
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may use,
+ * modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+#ifndef _MPRAPI_H
+#define _MPRAPI_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#include <ras.h>
+#include <lmcons.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if (_WIN32_WINNT >= 0x0500)
+/*--- Router Management Reference - Router Management Enumerated Types */
+typedef enum _ROUTER_CONNECTION_STATE {
+ ROUTER_IF_STATE_UNREACHABLE,
+ ROUTER_IF_STATE_DISCONNECTED,
+ ROUTER_IF_STATE_CONNECTING,
+ ROUTER_IF_STATE_CONNECTED
+} ROUTER_CONNECTION_STATE;
+typedef enum _ROUTER_INTERFACE_TYPE {
+ ROUTER_IF_TYPE_CLIENT,
+ ROUTER_IF_TYPE_HOME_ROUTER,
+ ROUTER_IF_TYPE_FULL_ROUTER,
+ ROUTER_IF_TYPE_DEDICATED,
+ ROUTER_IF_TYPE_INTERNAL,
+ ROUTER_IF_TYPE_LOOPBACK,
+ ROUTER_IF_TYPE_TUNNEL1,
+ ROUTER_IF_TYPE_DIALOUT
+} ROUTER_INTERFACE_TYPE;
+#define MPR_INTERFACE_ADMIN_DISABLED 0x00000002
+#define MPR_INTERFACE_CONNECTION_FAILURE 0x00000004
+#define MPR_INTERFACE_DIALOUT_HOURS_RESTRICTION 0x00000010
+#define MPR_INTERFACE_OUT_OF_RESOURCES 0x00000001
+#define MPR_INTERFACE_SERVICE_PAUSED 0x00000008
+#define MPR_INTERFACE_NO_MEDIA_SENSE 0x00000020
+#define MPR_INTERFACE_NO_DEVICE 0x00000040
+/*--- Router Management MIB Reference - Transport and Protocol Constants */
+#define PID_ATALK 0x00000029
+#define PID_IP 0x00000021
+#define PID_IPX 0x0000002B
+#define PID_NBF 0x0000003F
+/*--- Remote Access Service Administration Reference - RAS Administration Enumerated Types */
+typedef enum _RAS_HARDWARE_CONDITION {
+ RAS_HARDWARE_OPERATIONAL,
+ RAS_HARDWARE_FAILURE
+} RAS_HARDWARE_CONDITION;
+typedef enum _RAS_PORT_CONDITION {
+ RAS_PORT_NON_OPERATIONAL,
+ RAS_PORT_DISCONNECTED,
+ RAS_PORT_CALLING_BACK,
+ RAS_PORT_LISTENING,
+ RAS_PORT_AUTHENTICATING,
+ RAS_PORT_AUTHENTICATED,
+ RAS_PORT_INITIALIZING
+} RAS_PORT_CONDITION;
+/*--- Remote Access Service Administration Reference - RAS Administration Structures */
+#define ATADDRESSLEN 32
+typedef struct _PPP_ATCP_INFO {
+ DWORD dwError;
+ WCHAR wszAddress[ATADDRESSLEN+1];
+} PPP_ATCP_INFO;
+typedef struct _PPP_CCP_INFO {
+ DWORD dwError;
+ DWORD dwCompressionAlgorithm;
+ DWORD dwOptions;
+ DWORD dwRemoteCompressionAlgorithm;
+ DWORD dwRemoteOptions;
+} PPP_CCP_INFO;
+#define RASCCPCA_STAC 0x00000005
+#define RASCCPCA_MPPC 0x00000006
+#define PPP_CCP_COMPRESSION 0x00000001
+#define PPP_CCP_ENCRYPTION40BITOLD 0x00000010
+#define PPP_CCP_ENCRYPTION40BIT 0x00000020
+#define PPP_CCP_ENCRYPTION128BIT 0x00000040
+#define PPP_CCP_ENCRYPTION56BIT 0x00000080
+#define PPP_CCP_HISTORYLESS 0x01000000
+#define IPADDRESSLEN 15
+typedef struct _PPP_IPCP_INFO {
+ DWORD dwError;
+ WCHAR wszAddress[IPADDRESSLEN+1];
+ WCHAR wszRemoteAddress[IPADDRESSLEN+1];
+} PPP_IPCP_INFO;
+typedef struct _PPP_IPCP_INFO2 {
+ DWORD dwError;
+ WCHAR wszAddress[IPADDRESSLEN+1];
+ WCHAR wszRemoteAddress[IPADDRESSLEN+1];
+ DWORD dwOptions;
+ DWORD dwRemoteOptons;
+} PPP_IPCP_INFO2;
+#define IPXADDRESSLEN 22
+typedef struct _PPP_IPXCP_INFO {
+ DWORD dwError;
+ WCHAR wszAddress[IPXADDRESSLEN+1];
+} PPP_IPXCP_INFO;
+typedef struct _PPP_LCP_INFO {
+ DWORD dwError;
+ DWORD dwAuthenticationProtocol;
+ DWORD dwAuthenticationData;
+ DWORD dwRemoteAuthenticationProtocol;
+ DWORD dwRemoteAuthenticationData;
+ DWORD dwTerminateReason;
+ DWORD dwRemoteTerminateReason;
+ DWORD dwOptions;
+ DWORD dwRemoteOptions;
+ DWORD dwEapTypeId;
+ DWORD dwRemoteEapTypeId;
+} PPP_LCP_INFO;
+#define PPP_LCP_PAP 0x0000C023
+#define PPP_LCP_SPAP 0x0000C027
+#define PPP_LCP_CHAP 0x0000C223
+#define PPP_LCP_EAP 0x0000C227
+#define PPP_LCP_CHAP_MD5 0x00000005
+#define PPP_LCP_CHAP_MS 0x00000080
+#define PPP_LCP_CHAP_MSV2 0x00000081
+#define PPP_LCP_MULTILINK_FRAMING 0x00000001
+typedef struct _PPP_NBFCP_INFO {
+ DWORD dwError;
+ WCHAR wszWksta[NETBIOS_NAME_LEN+1];
+} PPP_NBFCP_INFO;
+typedef struct _PPP_INFO {
+ PPP_NBFCP_INFO nbf;
+ PPP_IPCP_INFO ip;
+ PPP_IPXCP_INFO ipx;
+ PPP_ATCP_INFO at;
+} PPP_INFO;
+typedef struct _PPP_INFO_2 {
+ PPP_NBFCP_INFO nbf;
+ PPP_IPCP_INFO2 ip;
+ PPP_IPXCP_INFO ipx;
+ PPP_ATCP_INFO at;
+ PPP_CCP_INFO ccp;
+ PPP_LCP_INFO lcp;
+} PPP_INFO_2;
+#define MAX_INTERFACE_NAME_LEN 256
+typedef struct _RAS_CONNECTION_0 {
+ HANDLE hConnection;
+ HANDLE hInterface;
+ DWORD dwConnectDuration;
+ ROUTER_INTERFACE_TYPE dwInterfaceType;
+ DWORD dwConnectionFlags;
+ WCHAR wszInterfaceName[MAX_INTERFACE_NAME_LEN+1];
+ WCHAR wszUserName[UNLEN+1];
+ WCHAR wszLogonDomain[DNLEN+1];
+ WCHAR wszRemoteComputer[NETBIOS_NAME_LEN+1];
+} RAS_CONNECTION_0,*PRAS_CONNECTION_0;
+#define RAS_FLAGS_PPP_CONNECTION 0x00000001
+#define RAS_FLAGS_MESSENGER_PRESENT 0x00000002
+#define RAS_FLAGS_RAS_CONNECTION 0x00000004
+#define RAS_FLAGS_QUARANTINE_PRESENT 0x00000008
+typedef struct RAS_CONNECTION_1 {
+ HANDLE hConnection;
+ HANDLE hInterface;
+ PPP_INFO PppInfo;
+ DWORD dwBytesXmited;
+ DWORD dwBytesRcved;
+ DWORD dwFramesXmited;
+ DWORD dwFramesRcved;
+ DWORD dwCrcErr;
+ DWORD dwTimeoutErr;
+ DWORD dwAlignmentErr;
+ DWORD dwHardwareOverrunErr;
+ DWORD dwFramingErr;
+ DWORD dwBufferOverrunErr;
+ DWORD dwCompressionRatioIn;
+ DWORD dwCompressionRatioOut;
+} RAS_CONNECTION_1,*PRAS_CONNECTION_1;
+typedef struct _RAS_CONNECTION_2 {
+ HANDLE hConnection;
+ WCHAR wszUserName[UNLEN+1];
+ ROUTER_INTERFACE_TYPE dwInterfaceType;
+ GUID guid;
+ PPP_INFO_2 PppInfo2;
+} RAS_CONNECTION_2,*PRAS_CONNECTION_2;
+#define MAX_PORT_NAME 16
+#define MAX_MEDIA_NAME 16
+#define MAX_DEVICE_NAME 128
+#define MAX_DEVICETYPE_NAME 16
+typedef struct _RAS_PORT_0 {
+ HANDLE hPort;
+ HANDLE hConnection;
+ RAS_PORT_CONDITION dwPortCondition;
+ DWORD dwTotalNumberOfCalls;
+ DWORD dwConnectDuration;
+ WCHAR wszPortName[MAX_PORT_NAME+1];
+ WCHAR wszMediaName[MAX_MEDIA_NAME+1];
+ WCHAR wszDeviceName[MAX_DEVICE_NAME+1];
+ WCHAR wszDeviceType[MAX_DEVICETYPE_NAME+1];
+} RAS_PORT_0,*PRAS_PORT_0;
+typedef struct _RAS_PORT_1 {
+ HANDLE hPort;
+ HANDLE hConnection;
+ RAS_HARDWARE_CONDITION dwHardwareCondition;
+ DWORD dwLineSpeed;
+ DWORD dwBytesXmited;
+ DWORD dwBytesRcved;
+ DWORD dwFramesXmited;
+ DWORD dwFramesRcved;
+ DWORD dwCrcErr;
+ DWORD dwTimeoutErr;
+ DWORD dwAlignmentErr;
+ DWORD dwHardwareOverrunErr;
+ DWORD dwFramingErr;
+ DWORD dwBufferOverrunErr;
+ DWORD dwCompressionRatioIn;
+ DWORD dwCompressionRatioOut;
+} RAS_PORT_1,*PRAS_PORT_1;
+#define MAX_PHONE_NUMBER_LEN 128
+typedef struct _RAS_USER_0 {
+ BYTE bfPrivilege;
+ WCHAR wszPhoneNumber[MAX_PHONE_NUMBER_LEN+1];
+} RAS_USER_0,*PRAS_USER_0;
+#define RASPRIV_NoCallback 0x01
+#define RASPRIV_AdminSetCallback 0x02
+#define RASPRIV_CallerSetCallback 0x04
+#define RASPRIV_DialinPrivilege 0x08
+#define RASPRIV_CallbackType 0x07
+typedef struct _RAS_USER_1 {
+ BYTE bfPrivilege;
+ WCHAR wszPhoneNumber[MAX_PHONE_NUMBER_LEN+1];
+ BYTE bfPrivilege2;
+} RAS_USER_1,*PRAS_USER_1;
+#define RASPRIV2_DialinPolicy 0x01
+/*--- Router Management Reference - Router Management Structures */
+typedef struct _MPR_CREDENTIALSEX_0 {
+ DWORD dwSize;
+ LPBYTE lpbCredentialsInfo;
+} MPR_CREDENTIALSEX_0,*PMPR_CREDENTIALSEX_0;
+#if (_WIN32_WINNT >= 0x0502)
+typedef struct _MPR_CREDENTIALSEX_1 {
+ DWORD dwSize;
+ LPBYTE lpbCredentialsInfo;
+} MPR_CREDENTIALSEX_1,*PMPR_CREDENTIALSEX_1;
+#endif
+#define MPR_MaxDeviceType RAS_MaxDeviceType
+#define MPR_MaxDeviceName RAS_MaxDeviceName
+#define MPR_MaxPadType RAS_MaxPadType
+#define MPR_MaxX25Address RAS_MaxX25Address
+#define MPR_MaxFacilities RAS_MaxFacilities
+#define MPR_MaxUserData RAS_MaxUserData
+#define MPR_MaxPhoneNumber RAS_MaxPhoneNumber
+typedef struct _MPR_DEVICE_0 {
+ WCHAR szDeviceType[MPR_MaxDeviceType+1];
+ WCHAR szDeviceName[MPR_MaxDeviceName+1];
+} MPR_DEVICE_0,*PMPR_DEVICE_0;
+typedef struct _MPR_DEVICE_1 {
+ WCHAR szDeviceType[MPR_MaxDeviceType+1];
+ WCHAR szDeviceName[MPR_MaxDeviceName+1];
+ WCHAR szLocalPhoneNumber[MPR_MaxPhoneNumber+1];
+ PWCHAR szAlternates;
+} MPR_DEVICE_1,*PMPR_DEVICE_1;
+#define MAX_TRANSPORT_NAME_LEN 40
+typedef struct _MPR_IFTRANSPORT_0 {
+ DWORD dwTransportId;
+ HANDLE hIfTransport;
+ WCHAR wszIfTransportName[MAX_TRANSPORT_NAME_LEN+1];
+} MPR_IFTRANSPORT_0,*PMPR_IFTRANSPORT_0;
+typedef struct _MPR_INTERFACE_0 {
+ WCHAR wszInterfaceName[MAX_INTERFACE_NAME_LEN+1];
+ HANDLE hInterface;
+ BOOL fEnabled;
+ ROUTER_INTERFACE_TYPE dwIfType;
+ ROUTER_CONNECTION_STATE dwConnectionState;
+ DWORD fUnReachabilityReasons;
+ DWORD dwLastError;
+} MPR_INTERFACE_0,*PMPR_INTERFACE_0;
+typedef struct _MPR_INTERFACE_1 {
+ WCHAR wszInterfaceName[MAX_INTERFACE_NAME_LEN+1];
+ HANDLE hInterface;
+ BOOL fEnabled;
+ ROUTER_INTERFACE_TYPE IfType;
+ ROUTER_CONNECTION_STATE dwConnectionState;
+ DWORD fUnReachabilityReasons;
+ DWORD dwLastError;
+ LPWSTR lpwsDialoutHoursRestriction;
+} MPR_INTERFACE_1,*PMPR_INTERFACE_1;
+typedef struct _MPR_INTERFACE_2 {
+ WCHAR wszInterfaceName[MAX_INTERFACE_NAME_LEN+1];
+ HANDLE hInterface;
+ BOOL fEnabled;
+ ROUTER_INTERFACE_TYPE dwIfType;
+ ROUTER_CONNECTION_STATE dwConnectionState;
+ DWORD fUnReachabilityReasons;
+ DWORD dwLastError;
+ DWORD dwfOptions;
+ WCHAR szLocalPhoneNumber[RAS_MaxPhoneNumber+1];
+ PWCHAR szAlternates;
+ DWORD ipaddr;
+ DWORD ipaddrDns;
+ DWORD ipaddrDnsAlt;
+ DWORD ipaddrWins;
+ DWORD ipaddrWinsAlt;
+ DWORD dwfNetProtocols;
+ WCHAR szDeviceType[MPR_MaxDeviceType+1];
+ WCHAR szDeviceName[MPR_MaxDeviceName+1];
+ WCHAR szX25PadType[MPR_MaxPadType+1];
+ WCHAR szX25Address[MPR_MaxX25Address+1];
+ WCHAR szX25Facilities[MPR_MaxFacilities+1];
+ WCHAR szX25UserData[MPR_MaxUserData+1];
+ DWORD dwChannels;
+ DWORD dwSubEntries;
+ DWORD dwDialMode;
+ DWORD dwDialExtraPercent;
+ DWORD dwDialExtraSampleSeconds;
+ DWORD dwHangUpExtraPercent;
+ DWORD dwHangUpExtraSampleSeconds;
+ DWORD dwIdleDisconnectSeconds;
+ DWORD dwType;
+ DWORD dwEncryptionType;
+ DWORD dwCustomAuthKey;
+ DWORD dwCustomAuthDataSize;
+ LPBYTE lpbCustomAuthData;
+ GUID guidId;
+ DWORD dwVpnStrategy;
+} MPR_INTERFACE_2,*PMPR_INTERFACE_2;
+#define MPRIO_SpecificIpAddr RASEO_SpecificIpAddr
+#define MPRIO_SpecificNameServers RASEO_SpecificNameServers
+#define MPRIO_IpHeaderCompression RASEO_IpHeaderCompression
+#define MPRIO_RemoteDefaultGateway RASEO_RemoteDefaultGateway
+#define MPRIO_DisableLcpExtensions RASEO_DisableLcpExtensions
+#define MPRIO_SwCompression RASEO_SwCompression
+#define MPRIO_RequireEncryptedPw RASEO_RequireEncryptedPw
+#define MPRIO_RequireMsEncryptedPw RASEO_RequireMsEncryptedPw
+#define MPRIO_RequireDataEncryption RASEO_RequireDataEncryption
+#define MPRIO_NetworkLogon RASEO_NetworkLogon
+#define MPRIO_UseLogonCredentials RASEO_UseLogonCredentials
+#define MPRIO_PromoteAlternates RASEO_PromoteAlternates
+#define MPRIO_SecureLocalFiles RASEO_SecureLocalFiles
+#define MPRIO_RequireEAP RASEO_RequireEAP
+#define MPRIO_RequirePAP RASEO_RequirePAP
+#define MPRIO_RequireSPAP RASEO_RequireSPAP
+#define MPRIO_SharedPhoneNumbers RASEO_SharedPhoneNumbers
+#define MPRIO_RequireCHAP RASEO_RequireCHAP
+#define MPRIO_RequireMsCHAP RASEO_RequireMsCHAP
+#define MPRIO_RequireMsCHAP2 RASEO_RequireMsCHAP2
+#define MPRNP_Ipx RASNP_Ipx
+#define MPRNP_Ip RASNP_Ip
+#define MPRDT_Modem RASDT_Modem
+#define MPRDT_Isdn RASDT_Isdn
+#define MPRDT_X25 RASDT_X25
+#define MPRDT_Vpn RASDT_Vpn
+#define MPRDT_Pad RASDT_Pad
+#define MPRDT_Generic RASDT_Generic
+#define MPRDT_Serial RASDT_Serial
+#define MPRDT_FrameRelay RASDT_FrameRelay
+#define MPRDT_Atm RASDT_Atm
+#define MPRDT_Sonet RASDT_Sonet
+#define MPRDT_SW56 RASDT_SW56
+#define MPRDT_Irda RASDT_Irda
+#define MPRDT_Parallel RASDT_Parallel
+#define MPRDM_DialAll RASEDM_DialAll
+#define MPRDM_DialAsNeeded RASEDM_DialAsNeeded
+#define MPRIDS_Disabled RASIDS_Disabled
+#define MPRIDS_UseGlobalValue RASIDS_UseGlobalValue
+#define MPRET_Phone RASET_Phone
+#define MPRET_Vpn RASET_Vpn
+#define MPRET_Direct RASET_Direct
+#define MPR_ET_None ET_None
+#define MPR_ET_Require ET_Require
+#define MPR_ET_RequireMax ET_RequireMax
+#define MPR_ET_Optional ET_Optional
+#define MPR_VS_Default VS_Default
+#define MPR_VS_PptpOnly VS_PptpOnly
+#define MPR_VS_PptpFirst VS_PptpFirst
+#define MPR_VS_L2tpOnly VS_L2tpOnly
+#define MPR_VS_L2tpFirst VS_L2tpFirst
+#if (_WIN32_WINNT>=0x0600)
+typedef struct _MPR_INTERFACE_3 {
+ WCHAR wszInterfaceName[MAX_INTERFACE_NAME_LEN+1];
+ HANDLE hInterface;
+ BOOL fEnabled;
+ ROUTER_INTERFACE_TYPE dwIfType;
+ ROUTER_CONNECTION_STATE dwConnectionState;
+ DWORD fUnReachabilityReasons;
+ DWORD dwLastError;
+ DWORD dwfOptions;
+ WCHAR szLocalPhoneNumber[RAS_MaxPhoneNumber+1];
+ PWCHAR szAlternates;
+ DWORD ipaddr;
+ DWORD ipaddrDns;
+ DWORD ipaddrDnsAlt;
+ DWORD ipaddrWins;
+ DWORD ipaddrWinsAlt;
+ DWORD dwfNetProtocols;
+ WCHAR szDeviceType[MPR_MaxDeviceType+1];
+ WCHAR szDeviceName[MPR_MaxDeviceName+1];
+ WCHAR szX25PadType[MPR_MaxPadType+1];
+ WCHAR szX25Address[MPR_MaxX25Address+1];
+ WCHAR szX25Facilities[MPR_MaxFacilities+1];
+ WCHAR szX25UserData[MPR_MaxUserData+1];
+ DWORD dwChannels;
+ DWORD dwSubEntries;
+ DWORD dwDialMode;
+ DWORD dwDialExtraPercent;
+ DWORD dwDialExtraSampleSeconds;
+ DWORD dwHangUpExtraPercent;
+ DWORD dwHangUpExtraSampleSeconds;
+ DWORD dwIdleDisconnectSeconds;
+ DWORD dwType;
+ DWORD dwEncryptionType;
+ DWORD dwCustomAuthKey;
+ DWORD dwCustomAuthDataSize;
+ LPBYTE lpbCustomAuthData;
+ GUID guidId;
+ DWORD dwVpnStrategy;
+ ULONG AddressCount;
+ IN6_ADDR ipv6addrDns;
+ IN6_ADDR ipv6addrDnsAlt;
+ IN6_ADDR* ipv6addr;
+} MPR_INTERFACE_3,*PMPR_INTERFACE_3;
+#endif
+typedef struct _MPR_SERVER_0 {
+ BOOL fLanOnlyMode;
+ DWORD dwUpTime;
+ DWORD dwTotalPorts;
+ DWORD dwPortsInUse;
+} MPR_SERVER_0,*PMPR_SERVER_0;
+#if (_WIN32_WINNT >= 0x0502)
+typedef struct _MPR_SERVER_1 {
+ DWORD dwNumPptpPorts;
+ DWORD dwPptpPortFlags;
+ DWORD dwNumL2tpPorts;
+ DWORD dwL2tpPortFlags;
+} MPR_SERVER_1,*PMPR_SERVER_1;
+#define MPR_ENABLE_RAS_ON_DEVICE 0x00000001
+#define MPR_ENABLE_ROUTING_ON_DEVICE 0x00000002
+#endif
+typedef struct _MPR_TRANSPORT_0 {
+ DWORD dwTransportId;
+ HANDLE hTransport;
+ WCHAR wszTransportName[MAX_TRANSPORT_NAME_LEN+1];
+} MPR_TRANSPORT_0,*PMPR_TRANSPORT_0;
+typedef HANDLE RAS_SERVER_HANDLE;
+typedef HANDLE MPR_SERVER_HANDLE;
+/*--- Remote Access Service Administration Reference - RAS Administration Functions */
+DWORD WINAPI MprAdminConnectionClearStats(RAS_SERVER_HANDLE,HANDLE);
+DWORD WINAPI MprAdminConnectionEnum(RAS_SERVER_HANDLE,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,LPDWORD);
+DWORD WINAPI MprAdminConnectionGetInfo(RAS_SERVER_HANDLE,DWORD,HANDLE,LPBYTE*);
+DWORD WINAPI MprAdminConnectionRemoveQuarantine(HANDLE,HANDLE,BOOL);
+DWORD WINAPI MprAdminPortClearStats(RAS_SERVER_HANDLE,HANDLE);
+DWORD WINAPI MprAdminPortDisconnect(RAS_SERVER_HANDLE,HANDLE);
+DWORD WINAPI MprAdminPortEnum(RAS_SERVER_HANDLE,DWORD,HANDLE,LPBYTE*,DWORD,LPDWORD,LPDWORD,LPDWORD);
+DWORD WINAPI MprAdminPortGetInfo(RAS_SERVER_HANDLE,DWORD,HANDLE,LPBYTE);
+DWORD WINAPI MprAdminPortReset(RAS_SERVER_HANDLE,HANDLE);
+/*--- Remote Access Service Administration Reference - RAS Administration Functions - RAS Admin DLL Functions */
+BOOL WINAPI MprAdminAcceptNewConnection(RAS_CONNECTION_0*,RAS_CONNECTION_1*);
+BOOL WINAPI MprAdminAcceptNewConnection2(RAS_CONNECTION_0*,RAS_CONNECTION_1*,RAS_CONNECTION_2*);
+BOOL WINAPI MprAdminAcceptNewLink(RAS_PORT_0*,RAS_PORT_1*);
+#if (_WIN32_WINNT >= 0x0600)
+BOOL WINAPI MprAdminAcceptReauthentication(RAS_CONNECTION_0*,RAS_CONNECTION_1*,RAS_CONNECTION_2*,RAS_CONNECTION_3*);
+#endif
+void WINAPI MprAdminConnectionHangupNotification(RAS_CONNECTION_0*,RAS_CONNECTION_1*);
+void WINAPI MprAdminConnectionHangupNotification2(RAS_CONNECTION_0*,RAS_CONNECTION_1*,RAS_CONNECTION_2*);
+DWORD WINAPI MprAdminGetIpAddressForUser(WCHAR*,WCHAR*,DWORD*,BOOL*);
+#if (_WIN32_WINNT >= 0x0502)
+DWORD WINAPI MprAdminInitializeDll(void);
+DWORD WINAPI MprAdminTerminateDll(void);
+#endif
+void WINAPI MprAdminLinkHangupNotification(RAS_PORT_0*,RAS_PORT_1*);
+void WINAPI MprAdminReleaseIpAddress(WCHAR*,WCHAR*,DWORD*);
+/*--- Remote Access Service Administration Reference - RAS Administration Functions - RAS User Administration Functions */
+DWORD WINAPI MprAdminGetPDCServer(const WCHAR*,const WCHAR*,LPWSTR);
+DWORD WINAPI MprAdminSendUserMessage(MPR_SERVER_HANDLE,HANDLE,LPWSTR);
+DWORD WINAPI MprAdminUserGetInfo(const WCHAR*,const WCHAR*,DWORD,LPBYTE);
+DWORD WINAPI MprAdminUserSetInfo(const WCHAR*,const WCHAR*,DWORD,const LPBYTE);
+/*--- Router Management Reference - Router Administration Functions */
+DWORD WINAPI MprAdminBufferFree(LPVOID);
+DWORD WINAPI MprAdminDeregisterConnectionNotification(MPR_SERVER_HANDLE,HANDLE);
+DWORD WINAPI MprAdminEstablishDomainRasServer(PWCHAR,PWCHAR,BOOL);
+DWORD WINAPI MprAdminGetErrorString(DWORD,LPWSTR*);
+DWORD WINAPI MprAdminInterfaceConnect(MPR_SERVER_HANDLE,HANDLE,HANDLE,BOOL);
+DWORD WINAPI MprAdminInterfaceCreate(MPR_SERVER_HANDLE,DWORD,LPBYTE,HANDLE*);
+DWORD WINAPI MprAdminInterfaceDelete(MPR_SERVER_HANDLE,HANDLE);
+DWORD WINAPI MprAdminInterfaceDeviceGetInfo(MPR_SERVER_HANDLE,HANDLE,DWORD,DWORD,LPBYTE*);
+DWORD WINAPI MprAdminInterfaceDeviceSetInfo(MPR_SERVER_HANDLE,HANDLE,DWORD,DWORD,LPBYTE);
+DWORD WINAPI MprAdminInterfaceDisconnect(MPR_SERVER_HANDLE,HANDLE);
+DWORD WINAPI MprAdminInterfaceEnum(MPR_SERVER_HANDLE,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,LPDWORD);
+DWORD WINAPI MprAdminInterfaceGetCredentials(LPWSTR,LPWSTR,LPWSTR,LPWSTR,LPWSTR);
+DWORD WINAPI MprAdminInterfaceGetHandle(MPR_SERVER_HANDLE,LPWSTR,HANDLE*,BOOL);
+DWORD WINAPI MprAdminInterfaceGetInfo(MPR_SERVER_HANDLE,HANDLE,DWORD,LPBYTE*);
+DWORD WINAPI MprAdminInterfaceQueryUpdateResult(MPR_SERVER_HANDLE,HANDLE,DWORD,LPDWORD);
+DWORD WINAPI MprAdminInterfaceSetCredentials(LPWSTR,LPWSTR,LPWSTR,LPWSTR,LPWSTR);
+DWORD WINAPI MprAdminInterfaceSetCredentialsEx(MPR_SERVER_HANDLE,HANDLE,DWORD,LPBYTE);
+DWORD WINAPI MprAdminInterfaceSetInfo(MPR_SERVER_HANDLE,HANDLE,DWORD,LPBYTE);
+DWORD WINAPI MprAdminInterfaceTransportAdd(MPR_SERVER_HANDLE,HANDLE,DWORD,LPBYTE,DWORD);
+DWORD WINAPI MprAdminInterfaceTransportGetInfo(MPR_SERVER_HANDLE,HANDLE,DWORD,LPBYTE*,LPDWORD);
+DWORD WINAPI MprAdminInterfaceTransportRemove(MPR_SERVER_HANDLE,HANDLE,DWORD);
+DWORD WINAPI MprAdminInterfaceTransportSetInfo(MPR_SERVER_HANDLE,HANDLE,DWORD,LPBYTE,DWORD);
+DWORD WINAPI MprAdminInterfaceUpdatePhonebookInfo(MPR_SERVER_HANDLE,HANDLE);
+DWORD WINAPI MprAdminInterfaceUpdateRoutes(MPR_SERVER_HANDLE,HANDLE,DWORD,HANDLE);
+DWORD WINAPI MprAdminIsDomainRasServer(PWCHAR,PWCHAR,PBOOL);
+BOOL WINAPI MprAdminIsServiceRunning(LPWSTR);
+DWORD WINAPI MprAdminRegisterConnectionNotification(MPR_SERVER_HANDLE,HANDLE);
+DWORD WINAPI MprAdminServerConnect(LPWSTR,MPR_SERVER_HANDLE*);
+void WINAPI MprAdminServerDisconnect(MPR_SERVER_HANDLE);
+DWORD WINAPI MprAdminServerGetCredentials(MPR_SERVER_HANDLE,DWORD,LPBYTE*);
+DWORD WINAPI MprAdminInterfaceGetCredentialsEx(MPR_SERVER_HANDLE,HANDLE,DWORD,LPBYTE*);
+DWORD WINAPI MprAdminServerGetInfo(MPR_SERVER_HANDLE,DWORD,LPBYTE*);
+DWORD WINAPI MprAdminServerSetCredentials(MPR_SERVER_HANDLE,DWORD,LPBYTE);
+DWORD WINAPI MprAdminServerSetInfo(MPR_SERVER_HANDLE,DWORD,LPBYTE);
+DWORD WINAPI MprAdminTransportCreate(MPR_SERVER_HANDLE,DWORD,LPWSTR,LPBYTE,DWORD,LPBYTE,DWORD,LPWSTR);
+DWORD WINAPI MprAdminTransportGetInfo(MPR_SERVER_HANDLE,DWORD,LPBYTE*,LPDWORD,LPBYTE*,LPDWORD);
+DWORD WINAPI MprAdminTransportSetInfo(MPR_SERVER_HANDLE,DWORD,LPBYTE,DWORD,LPBYTE,DWORD);
+/*--- Router Management Reference - Router Configuration Functions */
+DWORD WINAPI MprConfigBufferFree(LPVOID);
+DWORD WINAPI MprConfigGetFriendlyName(HANDLE,PWCHAR,PWCHAR,DWORD);
+DWORD WINAPI MprConfigGetGuidName(HANDLE,PWCHAR,PWCHAR,DWORD);
+DWORD WINAPI MprConfigInterfaceCreate(HANDLE,DWORD,LPBYTE,HANDLE*);
+DWORD WINAPI MprConfigInterfaceDelete(HANDLE,HANDLE);
+DWORD WINAPI MprConfigInterfaceEnum(HANDLE,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,LPDWORD);
+DWORD WINAPI MprConfigInterfaceGetHandle(HANDLE,LPWSTR,HANDLE*);
+DWORD WINAPI MprConfigInterfaceGetInfo(HANDLE,HANDLE,DWORD,LPBYTE*,LPDWORD);
+DWORD WINAPI MprConfigInterfaceSetInfo(HANDLE,HANDLE,DWORD,LPBYTE);
+DWORD WINAPI MprConfigInterfaceTransportAdd(HANDLE,HANDLE,DWORD,LPWSTR,LPBYTE,DWORD,HANDLE*);
+DWORD WINAPI MprConfigInterfaceTransportEnum(HANDLE,HANDLE,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,LPDWORD);
+DWORD WINAPI MprConfigInterfaceTransportGetHandle(HANDLE,HANDLE,DWORD,HANDLE*);
+DWORD WINAPI MprConfigInterfaceTransportGetInfo(HANDLE,HANDLE,HANDLE,LPBYTE*,LPDWORD);
+DWORD WINAPI MprConfigInterfaceTransportRemove(HANDLE,HANDLE,HANDLE);
+DWORD WINAPI MprConfigInterfaceTransportSetInfo(HANDLE,HANDLE,HANDLE,LPBYTE,DWORD);
+DWORD WINAPI MprConfigServerBackup(HANDLE,LPWSTR);
+DWORD WINAPI MprConfigServerConnect(LPWSTR,HANDLE*);
+void WINAPI MprConfigServerDisconnect(HANDLE);
+DWORD WINAPI MprConfigServerGetInfo(HANDLE,DWORD,LPBYTE*);
+DWORD WINAPI MprConfigServerInstall(DWORD,PVOID);
+DWORD WINAPI MprConfigServerRestore(HANDLE,LPWSTR);
+DWORD WINAPI MprConfigServerSetInfo(HANDLE,DWORD,LPBYTE);
+DWORD WINAPI MprConfigTransportCreate(HANDLE,DWORD,LPWSTR,LPBYTE,DWORD,LPBYTE,DWORD,LPWSTR,HANDLE);
+DWORD WINAPI MprConfigTransportDelete(HANDLE,HANDLE);
+DWORD WINAPI MprConfigTransportEnum(HANDLE,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,LPDWORD);
+DWORD WINAPI MprConfigTransportGetHandle(HANDLE,DWORD,HANDLE*);
+DWORD WINAPI MprConfigTransportGetInfo(HANDLE,HANDLE,LPBYTE*,LPDWORD,LPBYTE*,LPDWORD,LPWSTR*);
+DWORD WINAPI MprConfigTransportSetInfo(HANDLE,HANDLE,LPBYTE,DWORD,LPBYTE,DWORD,LPWSTR);
+/*--- Router Management Reference - Information Header Functions */
+DWORD WINAPI MprInfoBlockAdd(LPVOID,DWORD,DWORD,DWORD,LPBYTE,LPVOID*);
+DWORD WINAPI MprInfoBlockFind(LPVOID,DWORD,LPDWORD,LPDWORD,LPBYTE*);
+DWORD WINAPI MprInfoBlockQuerySize(LPVOID);
+DWORD WINAPI MprInfoBlockRemove(LPVOID,DWORD,LPVOID*);
+DWORD WINAPI MprInfoBlockSet(LPVOID,DWORD,DWORD,DWORD,LPBYTE,LPVOID*);
+DWORD WINAPI MprInfoCreate(DWORD,LPVOID*);
+DWORD WINAPI MprInfoDelete(LPVOID);
+DWORD WINAPI MprInfoDuplicate(LPVOID,LPVOID*);
+DWORD WINAPI MprInfoRemoveAll(LPVOID,LPVOID*);
+/*--- Router Management MIB Reference - Router Management MIB Functions */
+typedef HANDLE MIB_SERVER_HANDLE;
+DWORD WINAPI MprAdminMIBBufferFree(LPVOID);
+DWORD WINAPI MprAdminMIBEntryCreate(MIB_SERVER_HANDLE,DWORD,DWORD,LPVOID,DWORD);
+DWORD WINAPI MprAdminMIBEntryDelete(MIB_SERVER_HANDLE,DWORD,DWORD,LPVOID,DWORD);
+DWORD WINAPI MprAdminMIBEntryGet(MIB_SERVER_HANDLE,DWORD,DWORD,LPVOID,DWORD,LPVOID*,LPDWORD);
+DWORD WINAPI MprAdminMIBEntryGetFirst(MIB_SERVER_HANDLE,DWORD,DWORD,LPVOID,DWORD,LPVOID*,LPDWORD);
+DWORD WINAPI MprAdminMIBEntryGetNext(MIB_SERVER_HANDLE,DWORD,DWORD,LPVOID,DWORD,LPVOID*,LPDWORD);
+DWORD WINAPI MprAdminMIBEntrySet(MIB_SERVER_HANDLE,DWORD,DWORD,LPVOID,DWORD);
+DWORD WINAPI MprAdminMIBGetTrapInfo(MIB_SERVER_HANDLE,DWORD,DWORD,LPVOID,DWORD,LPVOID*,LPDWORD);
+DWORD WINAPI MprAdminMIBServerConnect(LPWSTR,MIB_SERVER_HANDLE*);
+void WINAPI MprAdminMIBServerDisconnect(MIB_SERVER_HANDLE);
+DWORD WINAPI MprAdminMIBSetTrapInfo(DWORD,DWORD,HANDLE,LPVOID,DWORD,LPVOID*,LPDWORD);
+#endif /* (_WIN32_WINNT >= 0x0500) */
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/mq.h b/tcc/include/winapi/mq.h
new file mode 100644
index 0000000..cec1683
--- /dev/null
+++ b/tcc/include/winapi/mq.h
@@ -0,0 +1,534 @@
+#ifndef _MQ_H
+#define _MQ_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define PROPID_Q_INSTANCE 101
+#define PROPID_Q_TYPE 102
+#define PROPID_Q_PATHNAME 103
+#define PROPID_Q_JOURNAL 104
+#define PROPID_Q_QUOTA 105
+#define PROPID_Q_BASEPRIORITY 106
+#define PROPID_Q_JOURNAL_QUOTA 107
+#define PROPID_Q_LABEL 108
+#define PROPID_Q_CREATE_TIME 109
+#define PROPID_Q_MODIFY_TIME 110
+#define PROPID_Q_AUTHENTICATE 111
+#define PROPID_Q_PRIV_LEVEL 112
+#define PROPID_Q_TRANSACTION 113
+#define PROPID_Q_PATHNAME_DNS 124
+#define PROPID_Q_MULTICAST_ADDRESS 125
+#define PROPID_Q_ADS_PATH 126
+#define MQ_TRANSACTIONAL_NONE 0
+#define MQ_TRANSACTIONAL 1
+#define MQ_AUTHENTICATE_NONE 0
+#define MQ_AUTHENTICATE 1
+#define MQ_PRIV_LEVEL_NONE 0
+#define MQ_PRIV_LEVEL_OPTIONAL 1
+#define MQ_PRIV_LEVEL_BODY 2
+/*#define PROPID_M_ABORT_COUNT*/
+#define PROPID_M_CLASS 1
+#define PROPID_M_MSGID 2
+#define PROPID_M_CORRELATIONID 3
+#define PROPID_M_PRIORITY 4
+#define PROPID_M_DELIVERY 5
+#define PROPID_M_ACKNOWLEDGE 6
+#define PROPID_M_JOURNAL 7
+#define PROPID_M_APPSPECIFIC 8
+#define PROPID_M_BODY 9
+#define PROPID_M_BODY_SIZE 10
+#define PROPID_M_LABEL 11
+#define PROPID_M_LABEL_LEN 12
+#define PROPID_M_TIME_TO_REACH_QUEUE 13
+#define PROPID_M_TIME_TO_BE_RECEIVED 14
+#define PROPID_M_RESP_QUEUE 15
+#define PROPID_M_RESP_QUEUE_LEN 16
+#define PROPID_M_ADMIN_QUEUE 17
+#define PROPID_M_ADMIN_QUEUE_LEN 18
+#define PROPID_M_VERSION 19
+#define PROPID_M_SENDERID 20
+#define PROPID_M_SENDERID_LEN 21
+#define PROPID_M_SENDERID_TYPE 22
+#define PROPID_M_PRIV_LEVEL 23
+#define PROPID_M_AUTH_LEVEL 24
+#define PROPID_M_AUTHENTICATED 25
+#define PROPID_M_HASH_ALG 26
+#define PROPID_M_ENCRYPTION_ALG 27
+#define PROPID_M_SENDER_CERT 28
+#define PROPID_M_SENDER_CERT_LEN 29
+#define PROPID_M_SRC_MACHINE_ID 30
+#define PROPID_M_SENTTIME 31
+#define PROPID_M_ARRIVEDTIME 32
+#define PROPID_M_DEST_QUEUE 33
+#define PROPID_M_DEST_QUEUE_LEN 34
+#define PROPID_M_EXTENSION 35
+#define PROPID_M_EXTENSION_LEN 36
+#define PROPID_M_SECURITY_CONTEXT 37
+#define PROPID_M_CONNECTOR_TYPE 38
+#define PROPID_M_XACT_STATUS_QUEUE 39
+#define PROPID_M_XACT_STATUS_QUEUE_LEN 40
+#define PROPID_M_TRACE 41
+#define PROPID_M_BODY_TYPE 42
+#define PROPID_M_DEST_SYMM_KEY 43
+#define PROPID_M_DEST_SYMM_KEY_LEN 44
+#define PROPID_M_SIGNATURE 45
+#define PROPID_M_SIGNATURE_LEN 46
+#define PROPID_M_PROV_TYPE 47
+#define PROPID_M_PROV_NAME 48
+#define PROPID_M_PROV_NAME_LEN 49
+#define PROPID_M_FIRST_IN_XACT 50
+#define PROPID_M_LAST_IN_XACT 51
+#define PROPID_M_XACTID 52
+#define PROPID_M_AUTHENTICATED_EX 53
+#if (_WIN32_WINNT >= 0x0501)
+#define PROPID_M_RESP_FORMAT_NAME 54
+#define PROPID_M_RESP_FORMAT_NAME_LEN 55
+#define PROPID_M_DEST_FORMAT_NAME 58
+#define PROPID_M_DEST_FORMAT_NAME_LEN 59
+#define PROPID_M_LOOKUPID 60
+#define PROPID_M_SOAP_ENVELOPE 61
+#define PROPID_M_SOAP_ENVELOPE_LEN 62
+#define PROPID_M_COMPOUND_MESSAGE 63
+#define PROPID_M_COMPOUND_MESSAGE_SIZE 64
+#define PROPID_M_SOAP_HEADER 65
+#define PROPID_M_SOAP_BODY 66
+#endif
+/*#define PROPID_M_TOTAL_ABORT_COUNT*/
+#define PROPID_M_CORRELATIONID_SIZE 20
+#define PROPID_M_MSGID_SIZE 20
+#define PROPID_M_XACTID_SIZE 20
+#define MQMSG_DELIVERY_EXPRESS 0
+#define MQMSG_DELIVERY_RECOVERABLE 1
+#define MQMSG_JOURNAL_NONE 0
+#define MQMSG_DEADLETTER 1
+#define MQMSG_JOURNAL 2
+#define MQMSG_TRACE_NONE 0
+#define MQMSG_SEND_ROUTE_TO_REPORT_QUEUE 1
+#define MQMSG_SENDERID_TYPE_NONE 0
+#define MQMSG_SENDERID_TYPE_SID 1
+#define MQMSG_NOT_FIRST_IN_XACT 0
+#define MQMSG_FIRST_IN_XACT 1
+#define MQMSG_NOT_LAST_IN_XACT 0
+#define MQMSG_LAST_IN_XACT 1
+#define MQMSG_PRIV_LEVEL_NONE 0
+/*#define MQMSG_PRIV_LEVEL_BODY*/
+#define MQMSG_PRIV_LEVEL_BODY_BASE 1
+#define MQMSG_PRIV_LEVEL_BODY_ENHANCED 3
+#define MQMSG_AUTHENTICATION_NOT_REQUESTED 0
+#define MQMSG_AUTHENTICATION_REQUESTED 1
+#define MQMSG_AUTHENTICATION_REQUESTED_EX 3
+#define MQMSG_AUTH_LEVEL_NONE 0
+#define MQMSG_AUTH_LEVEL_ALWAYS 1
+#define MQMSG_AUTH_LEVEL_MSMQ10 2
+#define MQMSG_AUTH_LEVEL_MSMQ20 4
+#define MQMSG_AUTH_LEVEL_SIG10 2
+#define MQMSG_AUTH_LEVEL_SIG20 4
+#define MQMSG_AUTH_LEVEL_SIG30 8
+#define MQMSG_AUTHENTICATED_SIG10 1
+#define MQMSG_AUTHENTICATED_SIG20 3
+#define MQMSG_AUTHENTICATED_SIG30 5
+#define MQMSG_AUTHENTICATED_SIGXML 9
+#define PROPID_MGMT_MSMQ_ACTIVEQUEUES 1
+#define PROPID_MGMT_MSMQ_PRIVATEQ 2
+#define PROPID_MGMT_MSMQ_DSSERVER 3
+#define PROPID_MGMT_MSMQ_CONNECTED 4
+#define PROPID_MGMT_MSMQ_TYPE 5
+#define PROPID_MGMT_MSMQ_BYTES_IN_ALL_QUEUES 6
+#define PROPID_MGMT_QUEUE_PATHNAME 1
+#define PROPID_MGMT_QUEUE_FORMATNAME 2
+#define PROPID_MGMT_QUEUE_TYPE 3
+#define PROPID_MGMT_QUEUE_LOCATION 4
+#define PROPID_MGMT_QUEUE_XACT 5
+#define PROPID_MGMT_QUEUE_FOREIGN 6
+#define PROPID_MGMT_QUEUE_MESSAGE_COUNT 7
+#define PROPID_MGMT_QUEUE_BYTES_IN_QUEUE 8
+#define PROPID_MGMT_QUEUE_JOURNAL_MESSAGE_COUNT 9
+#define PROPID_MGMT_QUEUE_BYTES_IN_JOURNAL 10
+#define PROPID_MGMT_QUEUE_STATE 11
+#define PROPID_MGMT_QUEUE_NEXTHOPS 12
+#define PROPID_MGMT_QUEUE_EOD_LAST_ACK 13
+#define PROPID_MGMT_QUEUE_EOD_LAST_ACK_TIME 14
+#define PROPID_MGMT_QUEUE_EOD_LAST_ACK_COUNT 15
+#define PROPID_MGMT_QUEUE_EOD_FIRST_NON_ACK 16
+#define PROPID_MGMT_QUEUE_EOD_LAST_NON_ACK 17
+#define PROPID_MGMT_QUEUE_EOD_NEXT_SEQ 18
+#define PROPID_MGMT_QUEUE_EOD_NO_READ_COUNT 19
+#define PROPID_MGMT_QUEUE_EOD_NO_ACK_COUNT 20
+#define PROPID_MGMT_QUEUE_EOD_RESEND_TIME 21
+#define PROPID_MGMT_QUEUE_EOD_RESEND_INTERVAL 22
+#define PROPID_MGMT_QUEUE_EOD_RESEND_COUNT 23
+#define PROPID_MGMT_QUEUE_EOD_SOURCE_INFO 24
+/*#define PROPID_MGMT_QUEUE_SUBQUEUE_COUNT*/
+/*#define PROPID_MGMT_QUEUE_SUBQUEUE_NAMES*/
+#define PROPID_PC_VERSION 5801
+#define PROPID_PC_DS_ENABLED 5802
+#define PROPID_QM_SITE_ID 201
+#define PROPID_QM_MACHINE_ID 202
+#define PROPID_QM_PATHNAME 203
+#define PROPID_QM_CONNECTION 204
+#define PROPID_QM_ENCRYPTION_PK 205
+#define PROPID_QM_ENCRYPTION_PK_BASE 231
+#define PROPID_QM_ENCRYPTION_PK_ENHANCED 232
+#define PROPID_QM_PATHNAME_DNS 233
+#define MQ_OK 0x00000000
+#define MQ_INFORMATION_PROPERTY 0x400E0001
+#define MQ_INFORMATION_ILLEGAL_PROPERTY 0x400E0002
+#define MQ_INFORMATION_PROPERTY_IGNORED 0x400E0003
+#define MQ_INFORMATION_UNSUPPORTED_PROPERTY 0x400E0004
+#define MQ_INFORMATION_DUPLICATE_PROPERTY 0x400E0005
+#define MQ_INFORMATION_OPERATION_PENDING 0x400E0006
+#define MQ_INFORMATION_FORMATNAME_BUFFER_TOO_SMALL 0x400E0009
+#define MQ_INFORMATION_INTERNAL_USER_CERT_EXIST 0x400E000A
+#define MQ_INFORMATION_OWNER_IGNORED 0x400E000B
+#define MQ_ERROR 0xC00E0001
+#define MQ_ERROR_PROPERTY 0xC00E0002
+#define MQ_ERROR_QUEUE_NOT_FOUND 0xC00E0003
+#define MQ_ERROR_QUEUE_NOT_ACTIVE 0xC00E0004
+#define MQ_ERROR_QUEUE_EXISTS 0xC00E0005
+#define MQ_ERROR_INVALID_PARAMETER 0xC00E0006
+#define MQ_ERROR_INVALID_HANDLE 0xC00E0007
+#define MQ_ERROR_OPERATION_CANCELLED0xC00E0008
+#define MQ_ERROR_SHARING_VIOLATION 0xC00E0009
+#define MQ_ERROR_SERVICE_NOT_AVAILABLE 0xC00E000B
+#define MQ_ERROR_MACHINE_NOT_FOUND 0xC00E000D
+#define MQ_ERROR_ILLEGAL_SORT 0xC00E0010
+#define MQ_ERROR_ILLEGAL_USER 0xC00E0011
+#define MQ_ERROR_NO_DS 0xC00E0013
+#define MQ_ERROR_ILLEGAL_QUEUE_PATHNAME 0xC00E0014
+#define MQ_ERROR_ILLEGAL_PROPERTY_VALUE 0xC00E0018
+#define MQ_ERROR_ILLEGAL_PROPERTY_VT 0xC00E0019
+#define MQ_ERROR_BUFFER_OVERFLOW 0xC00E001A
+#define MQ_ERROR_IO_TIMEOUT 0xC00E001B
+#define MQ_ERROR_ILLEGAL_CURSOR_ACTION 0xC00E001C
+#define MQ_ERROR_MESSAGE_ALREADY_RECEIVED 0xC00E001D
+#define MQ_ERROR_ILLEGAL_FORMATNAME 0xC00E001E
+#define MQ_ERROR_FORMATNAME_BUFFER_TOO_SMALL 0xC00E001F
+#define MQ_ERROR_UNSUPPORTED_FORMATNAME_OPERATION 0xC00E0020
+#define MQ_ERROR_ILLEGAL_SECURITY_DESCRIPTOR 0xC00E0021
+#define MQ_ERROR_SENDERID_BUFFER_TOO_SMALL 0xC00E0022
+#define MQ_ERROR_SECURITY_DESCRIPTOR_TOO_SMALL 0xC00E0023
+#define MQ_ERROR_CANNOT_IMPERSONATE_CLIENT 0xC00E0024
+#define MQ_ERROR_ACCESS_DENIED 0xC00E0025
+#define MQ_ERROR_PRIVILEGE_NOT_HELD 0xC00E0026
+#define MQ_ERROR_INSUFFICIENT_RESOURCES 0xC00E0027
+#define MQ_ERROR_USER_BUFFER_TOO_SMALL 0xC00E0028
+#define MQ_ERROR_MESSAGE_STORAGE_FAILED 0xC00E002A
+#define MQ_ERROR_SENDER_CERT_BUFFER_TOO_SMALL 0xC00E002B
+#define MQ_ERROR_INVALID_CERTIFICATE 0xC00E002C
+#define MQ_ERROR_CORRUPTED_INTERNAL_CERTIFICATE 0xC00E002D
+#define MQ_ERROR_INTERNAL_USER_CERT_EXIST 0xC00E002E
+#define MQ_ERROR_NO_INTERNAL_USER_CERT 0xC00E002F
+#define MQ_ERROR_CORRUPTED_SECURITY_DATA 0xC00E0030
+#define MQ_ERROR_CORRUPTED_PERSONAL_CERT_STORE 0xC00E0031
+#define MQ_ERROR_COMPUTER_DOES_NOT_SUPPORT_ENCRYPTION 0xC00E0033
+#define MQ_ERROR_BAD_SECURITY_CONTEXT 0xC00E0035
+#define MQ_ERROR_COULD_NOT_GET_USER_SID 0xC00E0036
+#define MQ_ERROR_COULD_NOT_GET_ACCOUNT_INFO 0xC00E0037
+#define MQ_ERROR_ILLEGAL_MQCOLUMNS 0xC00E0038
+#define MQ_ERROR_ILLEGAL_PROPID 0xC00E0039
+#define MQ_ERROR_ILLEGAL_RELATION 0xC00E003A
+#define MQ_ERROR_ILLEGAL_PROPERTY_SIZE 0xC00E003B
+#define MQ_ERROR_ILLEGAL_RESTRICTION_PROPID 0xC00E003C
+#define MQ_ERROR_ILLEGAL_MQQUEUEPROPS 0xC00E003D
+#define MQ_ERROR_PROPERTY_NOTALLOWED 0xC00E003E
+#define MQ_ERROR_INSUFFICIENT_PROPERTIES 0xC00E003F
+#define MQ_ERROR_MACHINE_EXISTS 0xC00E0040
+#define MQ_ERROR_ILLEGAL_MQQMPROPS 0xC00E0041
+#define MQ_ERROR_DS_IS_FULL 0xC00E0042
+#define MQ_ERROR_DS_ERROR 0xC00E0043
+#define MQ_ERROR_INVALID_OWNER 0xC00E0044
+#define MQ_ERROR_UNSUPPORTED_ACCESS_MODE 0xC00E0045
+#define MQ_ERROR_RESULT_BUFFER_TOO_SMALL 0xC00E0046
+#define MQ_ERROR_DELETE_CN_IN_USE 0xC00E0048
+#define MQ_ERROR_NO_RESPONSE_FROM_OBJECT_SERVER 0xC00E0049
+#define MQ_ERROR_OBJECT_SERVER_NOT_AVAILABLE 0xC00E004A
+#define MQ_ERROR_QUEUE_NOT_AVAILABLE 0xC00E004B
+#define MQ_ERROR_DTC_CONNECT 0xC00E004C
+#define MQ_ERROR_TRANSACTION_IMPORT 0xC00E004E
+#define MQ_ERROR_TRANSACTION_USAGE 0xC00E0050
+#define MQ_ERROR_TRANSACTION_SEQUENCE 0xC00E0051
+#define MQ_ERROR_MISSING_CONNECTOR_TYPE 0xC00E0055
+#define MQ_ERROR_STALE_HANDLE 0xC00E0056
+#define MQ_ERROR_TRANSACTION_ENLIST 0xC00E0058
+#define MQ_ERROR_QUEUE_DELETED 0xC00E005A
+#define MQ_ERROR_ILLEGAL_CONTEXT 0xC00E005B
+#define MQ_ERROR_ILLEGAL_SORT_PROPID 0xC00E005C
+#define MQ_ERROR_LABEL_TOO_LONG 0xC00E005D
+#define MQ_ERROR_LABEL_BUFFER_TOO_SMALL 0xC00E005E
+#define MQ_ERROR_MQIS_SERVER_EMPTY 0xC00E005F
+#define MQ_ERROR_MQIS_READONLY_MODE 0xC00E0060
+#define MQ_ERROR_SYMM_KEY_BUFFER_TOO_SMALL 0xC00E0061
+#define MQ_ERROR_SIGNATURE_BUFFER_TOO_SMALL 0xC00E0062
+#define MQ_ERROR_PROV_NAME_BUFFER_TOO_SMALL 0xC00E0063
+#define MQ_ERROR_ILLEGAL_OPERATION 0xC00E0064
+#define MQ_ERROR_WRITE_NOT_ALLOWED 0xC00E0065
+#define MQ_ERROR_WKS_CANT_SERVE_CLIENT 0xC00E0066
+#define MQ_ERROR_DEPEND_WKS_LICENSE_OVERFLOW 0xC00E0067
+#define MQ_CORRUPTED_QUEUE_WAS_DELETED 0xC00E0068
+#define MQ_ERROR_REMOTE_MACHINE_NOT_AVAILABLE 0xC00E0069
+#define MQ_ERROR_UNSUPPORTED_OPERATION 0xC00E006A
+#define MQ_ERROR_ENCRYPTION_PROVIDER_NOT_SUPPORTED 0xC00E006B
+#define MQ_ERROR_CANNOT_SET_CRYPTO_SEC_DESCR 0xC00E006C
+#define MQ_ERROR_CERTIFICATE_NOT_PROVIDED 0xC00E006D
+#define MQ_ERROR_Q_DNS_PROPERTY_NOT_SUPPORTED 0xC00E006E
+#define MQ_ERROR_CANNOT_CREATE_CERT_STORE 0xC00E006F
+#define MQ_ERROR_CANNOT_OPEN_CERT_STORE 0xC00E0070
+#define MQ_ERROR_ILLEGAL_ENTERPRISE_OPERATION 0xC00E0071
+#define MQ_ERROR_CANNOT_GRANT_ADD_GUID 0xC00E0072
+#define MQ_ERROR_CANNOT_LOAD_MSMQOCM 0xC00E0073
+#define MQ_ERROR_NO_ENTRY_POINT_MSMQOCM 0xC00E0074
+#define MQ_ERROR_NO_MSMQ_SERVERS_ON_DC 0xC00E0075
+#define MQ_ERROR_CANNOT_JOIN_DOMAIN 0xC00E0076
+#define MQ_ERROR_CANNOT_CREATE_ON_GC 0xC00E0077
+#define MQ_ERROR_GUID_NOT_MATCHING 0xC00E0078
+#define MQ_ERROR_PUBLIC_KEY_NOT_FOUND 0xC00E0079
+#define MQ_ERROR_PUBLIC_KEY_DOES_NOT_EXIST 0xC00E007A
+#define MQ_ERROR_ILLEGAL_MQPRIVATEPROPS 0xC00E007B
+#define MQ_ERROR_NO_GC_IN_DOMAIN 0xC00E007C
+#define MQ_ERROR_NO_MSMQ_SERVERS_ON_GC 0xC00E007D
+#define MQ_ERROR_CANNOT_GET_DN 0xC00E007E
+#define MQ_ERROR_CANNOT_HASH_DATA_EX 0xC00E007F
+#define MQ_ERROR_CANNOT_SIGN_DATA_EX 0xC00E0080
+#define MQ_ERROR_CANNOT_CREATE_HASH_EX 0xC00E0081
+#define MQ_ERROR_FAIL_VERIFY_SIGNATURE_EX 0xC00E0082
+#define MQ_ERROR_CANNOT_DELETE_PSC_OBJECTS 0xC00E0083
+#define MQ_ERROR_NO_MQUSER_OU 0xC00E0084
+#define MQ_ERROR_CANNOT_LOAD_MQAD 0xC00E0085
+#define MQ_ERROR_CANNOT_LOAD_MQDSSRV 0xC00E0086
+#define MQ_ERROR_PROPERTIES_CONFLICT 0xC00E0087
+#define MQ_ERROR_MESSAGE_NOT_FOUND 0xC00E0088
+#define MQ_ERROR_CANT_RESOLVE_SITES 0xC00E0089
+#define MQ_ERROR_NOT_SUPPORTED_BY_DEPENDENT_CLIENTS 0xC00E008A
+#define MQ_ERROR_OPERATION_NOT_SUPPORTED_BY_REMOTE_COMPUTER 0xC00E008B
+#define MQ_ERROR_NOT_A_CORRECT_OBJECT_CLASS 0xC00E008C
+#define MQ_ERROR_MULTI_SORT_KEYS 0xC00E008D
+#define MQ_ERROR_GC_NEEDED 0xC00E008E
+#define MQ_ERROR_DS_BIND_ROOT_FOREST 0xC00E008F
+#define MQ_ERROR_DS_LOCAL_USER 0xC00E0090
+#define MQ_ERROR_Q_ADS_PROPERTY_NOT_SUPPORTED 0xC00E0091
+#define MQ_ERROR_BAD_XML_FORMAT 0xC00E0092
+#define MQ_ERROR_UNSUPPORTED_CLASS xC00E0093
+#define MQ_ERROR_UNINITIALIZED_OBJECT 0xC00E0094
+#define MQ_ERROR_CANNOT_CREATE_PSC_OBJECTS 0xC00E0095
+#define MQ_ERROR_CANNOT_UPDATE_PSC_OBJECTS 0xC00E0096
+#define MQSEC_DELETE_MESSAGE 0x00000001
+#define MQSEC_PEEK_MESSAGE 0x00000002
+#define MQSEC_WRITE_MESSAGE 0x00000004
+#define MQSEC_DELETE_JOURNAL_MESSAGE 0x00000008
+#define MQSEC_SET_QUEUE_PROPERTIES 0x00000010
+#define MQSEC_GET_QUEUE_PROPERTIES 0x00000020
+#define MQSEC_DELETE_QUEUE 0x00010000
+#define MQSEC_GET_QUEUE_PERMISSIONS 0x00020000
+#define MQSEC_CHANGE_QUEUE_PERMISSIONS 0x00040000
+#define MQSEC_TAKE_QUEUE_OWNERSHIP 0x00080000
+#define MQSEC_RECEIVE_MESSAGE (MQSEC_DELETE_MESSAGE|MQSEC_PEEK_MESSAGE)
+#define MQSEC_RECEIVE_JOURNAL_MESSAGE (MQSEC_DELETE_JOURNAL_MESSAGE|MQSEC_PEEK_MESSAGE)
+#define MQSEC_QUEUE_GENERIC_READ (MQSEC_GET_QUEUE_PROPERTIES|MQSEC_GET_QUEUE_PERMISSIONS|MQSEC_RECEIVE_MESSAGE|MQSEC_RECEIVE_JOURNAL_MESSAGE)
+#define MQSEC_QUEUE_GENERIC_WRITE (MQSEC_GET_QUEUE_PROPERTIES|MQSEC_GET_QUEUE_PERMISSIONS|MQSEC_WRITE_MESSAGE)
+#define MQSEC_QUEUE_GENERIC_ALL (MQSEC_RECEIVE_MESSAGE|MQSEC_RECEIVE_JOURNAL_MESSAGE|MQSEC_WRITE_MESSAGE|MQSEC_SET_QUEUE_PROPERTIES|MQSEC_GET_QUEUE_PROPERTIES|MQSEC_DELETE_QUEUE|MQSEC_GET_QUEUE_PERMISSIONS|MQSEC_CHANGE_QUEUE_PERMISSIONS|MQSEC_TAKE_QUEUE_OWNERSHIP)
+#define MSMQ_CONNECTED L"CONNECTED"
+#define MSMQ_DISCONNECTED L"DISCONNECTED"
+#define MQ_RECEIVE_ACCESS 0x00000001
+#define MQ_SEND_ACCESS 0x00000002
+#define MQ_PEEK_ACCESS 0x00000020
+#define MQ_ADMIN_ACCESS 0x00000080
+#define MQ_DENY_NONE 0x00000000
+#define MQ_DENY_RECEIVE_SHARE 0x00000001
+#define MQ_ACTION_RECEIVE 0x00000000
+#define MQ_ACTION_PEEK_CURRENT 0x80000000
+#define MQ_ACTION_PEEK_NEXT 0x80000001
+/*#define MQ_NO_TRANSACTION*/
+/*#define MQ_MTS_TRANSACTION*/
+/*#define MQ_SINGLE_MESSAGE*/
+/*#define MQ_XA_TRANSACTION*/
+#if (_WIN32_WINNT >= 0x0501)
+#define MQ_LOOKUP_PEEK_CURRENT 0x40000010
+#define MQ_LOOKUP_PEEK_NEXT 0x40000011
+#define MQ_LOOKUP_PEEK_PREV 0x40000012
+#define MQ_LOOKUP_PEEK_FIRST 0x40000014
+#define MQ_LOOKUP_PEEK_LAST 0x40000018
+#define MQ_LOOKUP_RECEIVE_CURRENT 0x40000020
+#define MQ_LOOKUP_RECEIVE_NEXT 0x40000021
+#define MQ_LOOKUP_RECEIVE_PREV 0x40000022
+#define MQ_LOOKUP_RECEIVE_FIRST 0x40000024
+#define MQ_LOOKUP_RECEIVE_LAST 0x40000028
+#endif
+#if (_WIN32_WINNT >= 0x0500)
+#define MQCERT_REGISTER_ALWAYS 0x00000001
+#define MQCERT_REGISTER_IF_NOT_EXIST 0x00000002
+#endif
+#define PRLT 0
+#define PRLE 1
+#define PRGT 2
+#define PRGE 3
+#define PREQ 4
+#define PRNE 5
+#define MQ_MIN_PRIORITY 0
+#define MQ_MAX_PRIORITY 7
+#define MQ_DEFAULT_PRIORITY 3
+#define QUERY_SORTASCEND 0
+#define QUERY_SORTDESCEND 1
+
+typedef struct tagMQCOLUMNSET {
+ ULONG cCol;
+ PROPID *aCol;
+} MQCOLUMNSET;
+typedef PROPID MGMTPROPID;
+typedef struct tagMQMGMTPROPS {
+ DWORD cProp;
+ MGMTPROPID *aPropID;
+ MQPROPVARIANT *aPropVar;
+ HRESULT *aStatus;
+} MQMGMTPROPS;
+typedef PROPID MSGPROPID;
+typedef struct tagMQMSGPROPS {
+ DWORD cProp;
+ MSGPROPID *aPropID;
+ MQPROPVARIANT *aPropVar;
+ HRESULT *aStatus;
+} MQMSGPROPS;
+typedef PROPID QMPROPID;
+typedef struct tagMQPRIVATEPROPS {
+ DWORD cProp;
+ QMPROPID *aPropID;
+ MQPROPVARIANT *aPropVar;
+ HRESULT *aStatus;
+} MQPRIVATEPROPS;
+typedef struct tagMQPROPERTYRESTRICTION {
+ ULONG rel;
+ PROPID prop;
+ MQPROPVARIANT prval;
+} MQPROPERTYRESTRICTION;
+typedef struct tagMQQMPROPS {
+ DWORD cProp;
+ QMPROPID *aPropID;
+ MQPROPVARIANT *aPropVar;
+ HRESULT *aStatus;
+} MQQMPROPS;
+typedef PROPID QUEUEPROPID;
+typedef struct tagMQQUEUEPROPS {
+ DWORD cProp;
+ QUEUEPROPID *aPropID;
+ MQPROPVARIANT *aPropVar;
+ HRESULT *aStatus;
+} MQQUEUEPROPS;
+typedef struct tagMQRESTRICTION {
+ ULONG cRes;
+ MQPROPERTYRESTRICTION *paPropRes;
+} MQRESTRICTION;
+typedef struct tagMQSORTKEY {
+ PROPID propColumn;
+ ULONG dwOrder;
+} MQSORTKEY;
+typedef struct tagMQSORTSET {
+ ULONG cCol;
+ MQSORTKEY *aCol;
+} MQSORTSET;
+typedef struct tagMQPROPVARIANT {
+ VARTYPE vt;
+ WORD wReserved1;
+ WORD wReserved2;
+ WORD wReserved3;
+ union {
+ UCHAR bVal;
+ SHORT iVal;
+ USHORT uiVal;
+ VARIANT_BOOL boolVal;
+ LONG lVal;
+ ULONG ulVal;
+ ULARGE_INTEGER uhVal;
+ SCODE scode;
+ DATE date;
+ CLSID _RPC_FAR *puuid;
+ BLOB blob;
+ LPOLESTR bstrVal;
+ LPSTR pszVal;
+ LPWSTR pwszVal;
+ CAUB caub;
+ CAI cai;
+ CAUI caui;
+ CABOOL cabool;
+ CAL cal;
+ CAUL caul;
+ CACLSID cauuid;
+ CABSTR cabstr;
+ CALPWSTR calpwstr;
+ CAPROPVARIANT capropvar;
+ };
+} MQPROPVARIANT;
+typedef struct tagSEQUENCE_INFO {
+ LONGLONG SeqID;
+ ULONG SeqNo;
+ ULONG PrevNo;
+} SEQUENCE_INFO;
+typedef HANDLE QUEUEHANDLE;
+typedef VOID (*PMQRECEIVECALLBACK)(VOID);
+
+#if (_WIN32_WINNT >= 0x0501)
+HRESULT WINAPI MQADsPathToFormatName(LPCWSTR,LPWSTR,LPDWORD);
+#endif
+HRESULT WINAPI MQBeginTransaction(ITransaction **);
+HRESULT WINAPI MQCloseCursor(HANDLE);
+HRESULT WINAPI MQCloseQueue(QUEUEHANDLE);
+HRESULT WINAPI MQCreateCursor(QUEUEHANDLE,PHANDLE);
+HRESULT WINAPI MQCreateQueue(PSECURITY_DESCRIPTOR,MQQUEUEPROPS *,LPWSTR,LPDWORD);
+HRESULT WINAPI MQDeleteQueue(LPCWSTR);
+VOID WINAPI MQFreeMemory(PVOID);
+VOID WINAPI MQFreeSecurityContext(HANDLE);
+HRESULT WINAPI MQGetMachineProperties(LPCWSTR,const GUID *,MQQMPROPS *);
+#if (_WIN32_WINNT >= 0x0500)
+HRESULT WINAPI MQGetOverlappedResult(LPOVERLAPPED);
+HRESULT WINAPI MQGetPrivateComputerInformation(LPCWSTR,MQPRIVATEPROPS *);
+#endif
+HRESULT WINAPI MQGetQueueProperties(LPCWSTR,MQQUEUEPROPS *);
+HRESULT WINAPI MQGetQueueSecurity(LPCWSTR,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,DWORD,LPDWORD);
+HRESULT WINAPI MQGetSecurityContext(LPVOID,DWORD,HANDLE *);
+HRESULT WINAPI MQGetMachineProperties(LPCWSTR,const GUID *,MQQMPROPS *);
+HRESULT WINAPI MQGetOverlappedResult(LPOVERLAPPED);
+HRESULT WINAPI MQGetPrivateComputerInformation(LPCWSTR,MQPRIVATEPROPS *);
+HRESULT WINAPI MQGetQueueProperties(LPCWSTR,MQQUEUEPROPS *);
+HRESULT WINAPI MQGetQueueSecurity(LPCWSTR,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,DWORD,LPDWORD);
+HRESULT WINAPI MQGetSecurityContext(LPVOID,DWORD,HANDLE *);
+#if (_WIN32_WINNT >= 0x0500)
+HRESULT WINAPI MQGetSecurityContextEx(LPVOID,DWORD,HANDLE *);
+#endif
+HRESULT WINAPI MQHandleToFormatName(QUEUEHANDLE,LPWSTR,LPDWORD);
+HRESULT WINAPI MQInstanceToFormatName(GUID *,LPWSTR,LPDWORD);
+HRESULT WINAPI MQLocateBegin(LPCWSTR,MQRESTRICTION *,MQCOLUMNSET *,MQSORTSET *,PHANDLE);
+HRESULT WINAPI MQLocateEnd(HANDLE);
+HRESULT WINAPI MQLocateNext(HANDLE,DWORD *,MQPROPVARIANT[]);
+#if (_WIN32_WINNT >= 0x0600)
+HRESULT WINAPI MQMarkMessageRejected(QUEUEHANDLE,ULONGLONG);
+#endif
+#if (_WIN32_WINNT >= 0x0501)
+HRESULT WINAPI MQMgmtAction(LPCWSTR,LPCWSTR,LPCWSTR);
+HRESULT WINAPI MQMgmtGetInfo(LPCWSTR,LPCWSTR,MQMGMTPROPS *);
+#endif
+#if (_WIN32_WINNT >= 0x0600)
+HRESULT WINAPI MQMoveMessage(QUEUEHANDLE,QUEUEHANDLE,ULONGLONG,ITransaction *);
+#endif
+HRESULT WINAPI MQOpenQueue(LPCWSTR,DWORD,DWORD,QUEUEHANDLE *);
+HRESULT WINAPI MQPathNameToFormatName(LPCWSTR,LPWSTR,LPDWORD);
+#if (_WIN32_WINNT >= 0x0501)
+HRESULT WINAPI MQPurgeQueue(QUEUEHANDLE);
+#endif
+HRESULT WINAPI MQReceiveMessage(QUEUEHANDLE,DWORD,DWORD,MQMSGPROPS *,LPOVERLAPPED,PMQRECEIVECALLBACK,HANDLE,ITransaction *);
+#if (_WIN32_WINNT >= 0x0501)
+HRESULT WINAPI MQReceiveMessageByLookupId(QUEUEHANDLE,ULONGLONG,DWORD,MQMSGPROPS *,LPOVERLAPPED,PMQRECEIVECALLBACK,ITransaction *);
+#endif
+#if (_WIN32_WINNT >= 0x0500)
+HRESULT WINAPI MQRegisterCertificate(DWORD,PVOID,DWORD);
+#endif
+HRESULT WINAPI MQSendMessage(QUEUEHANDLE,MQMSGPROPS *,ITransaction *);
+HRESULT WINAPI MQSetQueueProperties(LPCWSTR,MQQUEUEPROPS *);
+HRESULT WINAPI MQSetQueueSecurity(LPCWSTR,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/msacm.h b/tcc/include/winapi/msacm.h
new file mode 100644
index 0000000..4f21536
--- /dev/null
+++ b/tcc/include/winapi/msacm.h
@@ -0,0 +1,186 @@
+/*author: Adrian Sandor
+ written for MinGW*/
+#ifndef _MSACM_H
+#define _MSACM_H
+
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef HANDLE HACMDRIVERID, HACMDRIVER, *LPHACMDRIVER; /*they're handles, right?*/
+
+/*found through experimentation*/
+#define ACMDRIVERDETAILS_SHORTNAME_CHARS 32
+#define ACMDRIVERDETAILS_LONGNAME_CHARS 128
+#define ACMDRIVERDETAILS_COPYRIGHT_CHARS 80
+#define ACMDRIVERDETAILS_LICENSING_CHARS 128
+
+/*I don't know the right values for these macros*/
+#define ACMFORMATDETAILS_FORMAT_CHARS 256
+#define ACMFORMATTAGDETAILS_FORMATTAG_CHARS 256
+#define ACMDRIVERDETAILS_FEATURES_CHARS 256
+
+/*msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_acmformatdetails_str.asp*/
+typedef struct {
+ DWORD cbStruct;
+ DWORD dwFormatIndex;
+ DWORD dwFormatTag;
+ DWORD fdwSupport;
+ LPWAVEFORMATEX pwfx;
+ DWORD cbwfx;
+ char szFormat[ACMFORMATDETAILS_FORMAT_CHARS];
+} ACMFORMATDETAILSA, *LPACMFORMATDETAILSA;
+typedef struct {
+ DWORD cbStruct;
+ DWORD dwFormatIndex;
+ DWORD dwFormatTag;
+ DWORD fdwSupport;
+ LPWAVEFORMATEX pwfx;
+ DWORD cbwfx;
+ WCHAR szFormat[ACMFORMATDETAILS_FORMAT_CHARS];
+} ACMFORMATDETAILSW, *LPACMFORMATDETAILSW;
+
+/*msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_acmformattagdetails_str.asp*/
+typedef struct {
+ DWORD cbStruct;
+ DWORD dwFormatTagIndex;
+ DWORD dwFormatTag;
+ DWORD cbFormatSize;
+ DWORD fdwSupport;
+ DWORD cStandardFormats;
+ char szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS];
+} ACMFORMATTAGDETAILSA, *LPACMFORMATTAGDETAILSA;
+typedef struct {
+ DWORD cbStruct;
+ DWORD dwFormatTagIndex;
+ DWORD dwFormatTag;
+ DWORD cbFormatSize;
+ DWORD fdwSupport;
+ DWORD cStandardFormats;
+ WCHAR szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS];
+} ACMFORMATTAGDETAILSW, *LPACMFORMATTAGDETAILSW;
+
+/*msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_acmdriverdetails_str.asp*/
+typedef struct {
+ DWORD cbStruct;
+ FOURCC fccType;
+ FOURCC fccComp;
+ WORD wMid;
+ WORD wPid;
+ DWORD vdwACM;
+ DWORD vdwDriver;
+ DWORD fdwSupport;
+ DWORD cFormatTags;
+ DWORD cFilterTags;
+ HICON hicon;
+ char szShortName[ACMDRIVERDETAILS_SHORTNAME_CHARS];
+ char szLongName[ACMDRIVERDETAILS_LONGNAME_CHARS];
+ char szCopyright[ACMDRIVERDETAILS_COPYRIGHT_CHARS];
+ char szLicensing[ACMDRIVERDETAILS_LICENSING_CHARS];
+ char szFeatures[ACMDRIVERDETAILS_FEATURES_CHARS];
+} ACMDRIVERDETAILSA, *LPACMDRIVERDETAILSA;
+typedef struct {
+ DWORD cbStruct;
+ FOURCC fccType;
+ FOURCC fccComp;
+ WORD wMid;
+ WORD wPid;
+ DWORD vdwACM;
+ DWORD vdwDriver;
+ DWORD fdwSupport;
+ DWORD cFormatTags;
+ DWORD cFilterTags;
+ HICON hicon;
+ WCHAR szShortName[ACMDRIVERDETAILS_SHORTNAME_CHARS];
+ WCHAR szLongName[ACMDRIVERDETAILS_LONGNAME_CHARS];
+ WCHAR szCopyright[ACMDRIVERDETAILS_COPYRIGHT_CHARS];
+ WCHAR szLicensing[ACMDRIVERDETAILS_LICENSING_CHARS];
+ WCHAR szFeatures[ACMDRIVERDETAILS_FEATURES_CHARS];
+} ACMDRIVERDETAILSW, *LPACMDRIVERDETAILSW;
+
+/*msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_acmformatenumcallback.asp*/
+typedef BOOL (CALLBACK *ACMFORMATENUMCBA) (
+ HACMDRIVERID hadid,
+ LPACMFORMATDETAILSA pafd,
+ DWORD_PTR dwInstance,
+ DWORD fdwSupport
+);
+typedef BOOL (CALLBACK *ACMFORMATENUMCBW) (
+ HACMDRIVERID hadid,
+ LPACMFORMATDETAILSW pafd,
+ DWORD_PTR dwInstance,
+ DWORD fdwSupport
+);
+
+/*msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_acmformattagenumcallback.asp*/
+typedef BOOL (CALLBACK *ACMFORMATTAGENUMCBA) (
+ HACMDRIVERID hadid,
+ LPACMFORMATTAGDETAILSA paftd,
+ DWORD_PTR dwInstance,
+ DWORD fdwSupport
+);
+typedef BOOL (CALLBACK *ACMFORMATTAGENUMCBW) (
+ HACMDRIVERID hadid,
+ LPACMFORMATTAGDETAILSW paftd,
+ DWORD_PTR dwInstance,
+ DWORD fdwSupport
+);
+
+/*msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_acmdriverenumcallback.asp*/
+typedef BOOL (CALLBACK *ACMDRIVERENUMCB) (
+ HACMDRIVERID hadid,
+ DWORD_PTR dwInstance,
+ DWORD fdwSupport
+);
+
+/*and now the functions...*/
+
+/*msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_acmdriveropen.asp*/
+MMRESULT WINAPI acmDriverOpen(LPHACMDRIVER phad, HACMDRIVERID hadid, DWORD fdwOpen);
+/*msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_acmdriverenum.asp*/
+MMRESULT WINAPI acmDriverEnum(ACMDRIVERENUMCB fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum);
+/*msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_acmformatenum.asp*/
+MMRESULT WINAPI acmFormatEnumA(HACMDRIVER had, LPACMFORMATDETAILSA pafd, ACMFORMATENUMCBA fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum);
+MMRESULT WINAPI acmFormatEnumW(HACMDRIVER had, LPACMFORMATDETAILSW pafd, ACMFORMATENUMCBW fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum);
+/*msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_acmdriverclose.asp*/
+MMRESULT WINAPI acmDriverClose(HACMDRIVER had, DWORD fdwClose);
+/*msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_acmdriverdetails.asp*/
+MMRESULT WINAPI acmDriverDetailsA(HACMDRIVERID hadid, LPACMDRIVERDETAILSA padd, DWORD fdwDetails);
+MMRESULT WINAPI acmDriverDetailsW(HACMDRIVERID hadid, LPACMDRIVERDETAILSW padd, DWORD fdwDetails);
+/*msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_acmformattagenum.asp*/
+MMRESULT WINAPI acmFormatTagEnumA(HACMDRIVER had, LPACMFORMATTAGDETAILSA paftd, ACMFORMATTAGENUMCBA fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum);
+MMRESULT WINAPI acmFormatTagEnumW(HACMDRIVER had, LPACMFORMATTAGDETAILSW paftd, ACMFORMATTAGENUMCBW fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum);
+
+#ifdef UNICODE
+
+typedef ACMFORMATDETAILSW ACMFORMATDETAILS, *LPACMFORMATDETAILS;
+typedef ACMFORMATTAGDETAILSW ACMFORMATTAGDETAILS, *LPACMFORMATTAGDETAILS;
+typedef ACMDRIVERDETAILSW ACMDRIVERDETAILS, *LPACMDRIVERDETAILS;
+typedef ACMFORMATENUMCBW ACMFORMATENUMCB;
+typedef ACMFORMATTAGENUMCBW ACMFORMATTAGENUMCB;
+#define acmFormatEnum acmFormatEnumW
+#define acmDriverDetails acmDriverDetailsW
+#define acmFormatTagEnum acmFormatTagEnumW
+
+#else /*ifdef UNICODE*/
+
+typedef ACMFORMATDETAILSA ACMFORMATDETAILS, *LPACMFORMATDETAILS;
+typedef ACMFORMATTAGDETAILSA ACMFORMATTAGDETAILS, *LPACMFORMATTAGDETAILS;
+typedef ACMDRIVERDETAILSA ACMDRIVERDETAILS, *LPACMDRIVERDETAILS;
+typedef ACMFORMATENUMCBA ACMFORMATENUMCB;
+typedef ACMFORMATTAGENUMCBA ACMFORMATTAGENUMCB;
+#define acmFormatEnum acmFormatEnumA
+#define acmDriverDetails acmDriverDetailsA
+#define acmFormatTagEnum acmFormatTagEnumA
+
+#endif /*ifdef UNICODE*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tcc/include/winapi/mshtml.h b/tcc/include/winapi/mshtml.h
new file mode 100644
index 0000000..288a427
--- /dev/null
+++ b/tcc/include/winapi/mshtml.h
@@ -0,0 +1,704 @@
+#ifndef _MSHTML_H
+#define _MSHTML_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef _COM_interface IHTMLElementCollection *LPHTMLELEMENTCOLLECTION;
+typedef _COM_interface IHTMLElement *LPHTMLELEMENT;
+typedef _COM_interface IHTMLSelectionObject *LPHTMLSELECTIONOBJECT;
+typedef _COM_interface IHTMLFramesCollection *LPHTMLFRAMESCOLLECTION;
+typedef _COM_interface IHTMLLocation *LPHTMLLOCATION;
+typedef _COM_interface IHTMLWindow2 *LPHTMLWINDOW2;
+typedef _COM_interface IHTMLStyleSheetsCollection *LPHTMLSTYLESHEETSCOLLECTION;
+typedef _COM_interface IHTMLStyleSheet *LPHTMLSTYLESHEET;
+typedef _COM_interface IHTMLStyle *LPHTMLSTYLE;
+typedef _COM_interface IHTMLFiltersCollection *LPHTMLFILTERSCOLLECTION;
+typedef _COM_interface IHTMLLinkElement *LPHTMLLINKELEMENT;
+typedef _COM_interface IHTMLImgElement *LPHTMLIMGELEMENT;
+typedef _COM_interface IHTMLImageElementFactory *LPHTMLIMAGEELEMENTFACTORY;
+typedef _COM_interface IHTMLEventObj *LPHTMLEVENTOBJ;
+typedef _COM_interface IHTMLScreen *LPHTMLSCREEN;
+typedef _COM_interface IHTMLOptionElementFactory *LPHTMLOPTIONELEMENTFACTORY;
+typedef _COM_interface IOmHistory *LPOMHISTORY;
+typedef _COM_interface IOmNavigator *LPOMNAVIGATOR;
+
+EXTERN_C const IID IID_IHTMLLinkElement;
+#define INTERFACE IHTMLLinkElement
+DECLARE_INTERFACE_(IHTMLLinkElement,IDispatch)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetTypeInfoCount)(THIS_ UINT*) PURE;
+ STDMETHOD(GetTypeInfo)(THIS_ UINT,LCID,LPTYPEINFO*) PURE;
+ STDMETHOD(GetIDsOfNames)(THIS_ REFIID,LPOLESTR*,UINT,LCID,DISPID*) PURE;
+ STDMETHOD(Invoke)(THIS_ DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*) PURE;
+
+ STDMETHOD(put_href)(THIS_ BSTR) PURE;
+ STDMETHOD(get_href)(THIS_ BSTR*) PURE;
+ STDMETHOD(put_rel)(THIS_ BSTR) PURE;
+ STDMETHOD(get_rel)(THIS_ BSTR*) PURE;
+ STDMETHOD(put_rev)(THIS_ BSTR) PURE;
+ STDMETHOD(get_rev)(THIS_ BSTR*) PURE;
+ STDMETHOD(put_type)(THIS_ BSTR) PURE;
+ STDMETHOD(get_type)(THIS_ BSTR*) PURE;
+ STDMETHOD(get_readyState)(THIS_ BSTR*) PURE;
+ STDMETHOD(put_onreadystatechange)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_onreadystatechange)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_onload)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_onload)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_onerror)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_onerror)(THIS_ VARIANT*) PURE;
+ STDMETHOD(get_styleSheet)(THIS_ LPHTMLSTYLESHEET*) PURE;
+ STDMETHOD(put_disabled)(THIS_ VARIANT_BOOL) PURE;
+ STDMETHOD(get_disabled)(THIS_ VARIANT_BOOL*) PURE;
+ STDMETHOD(put_media)(THIS_ BSTR) PURE;
+ STDMETHOD(get_media)(THIS_ BSTR*) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IHTMLImgElement;
+#define INTERFACE IHTMLImgElement
+DECLARE_INTERFACE_(IHTMLImgElement,IDispatch)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetTypeInfoCount)(THIS_ UINT*) PURE;
+ STDMETHOD(GetTypeInfo)(THIS_ UINT,LCID,LPTYPEINFO*) PURE;
+ STDMETHOD(GetIDsOfNames)(THIS_ REFIID,LPOLESTR*,UINT,LCID,DISPID*) PURE;
+ STDMETHOD(Invoke)(THIS_ DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*) PURE;
+
+ STDMETHOD(put_isMap)(THIS_ VARIANT_BOOL) PURE;
+ STDMETHOD(get_isMap)(THIS_ VARIANT_BOOL*) PURE;
+ STDMETHOD(put_useMap)(THIS_ BSTR) PURE;
+ STDMETHOD(get_useMap)(THIS_ BSTR*) PURE;
+ STDMETHOD(get_mimeType)(THIS_ BSTR*) PURE;
+ STDMETHOD(get_fileSize)(THIS_ BSTR*) PURE;
+ STDMETHOD(get_fileCreatedDate)(THIS_ BSTR*) PURE;
+ STDMETHOD(get_fileModifiedDate)(THIS_ BSTR*) PURE;
+ STDMETHOD(get_fileUpdatedDate)(THIS_ BSTR*) PURE;
+ STDMETHOD(get_protocol)(THIS_ BSTR*) PURE;
+ STDMETHOD(get_href)(THIS_ BSTR*) PURE;
+ STDMETHOD(get_nameProp)(THIS_ BSTR*) PURE;
+ STDMETHOD(put_border)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_border)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_vspace)(THIS_ long) PURE;
+ STDMETHOD(get_vspace)(THIS_ long*) PURE;
+ STDMETHOD(put_hspace)(THIS_ long) PURE;
+ STDMETHOD(get_hspace)(THIS_ long*) PURE;
+ STDMETHOD(put_alt)(THIS_ BSTR) PURE;
+ STDMETHOD(get_alt)(THIS_ BSTR*) PURE;
+ STDMETHOD(put_src)(THIS_ BSTR) PURE;
+ STDMETHOD(get_src)(THIS_ BSTR*) PURE;
+ STDMETHOD(put_lowsrc)(THIS_ BSTR) PURE;
+ STDMETHOD(get_lowsrc)(THIS_ BSTR*) PURE;
+ STDMETHOD(put_vrml)(THIS_ BSTR) PURE;
+ STDMETHOD(get_vrml)(THIS_ BSTR*) PURE;
+ STDMETHOD(put_dynsrc)(THIS_ BSTR) PURE;
+ STDMETHOD(get_dynsrc)(THIS_ BSTR*) PURE;
+ STDMETHOD(get_readyState)(THIS_ BSTR*) PURE;
+ STDMETHOD(get_complete)(THIS_ VARIANT_BOOL*) PURE;
+ STDMETHOD(put_loop)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_loop)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_align)(THIS_ BSTR) PURE;
+ STDMETHOD(get_align)(THIS_ BSTR*) PURE;
+ STDMETHOD(put_onload)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_onload)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_onerror)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_onerror)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_onabort)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_onabort)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_name)(THIS_ BSTR) PURE;
+ STDMETHOD(get_name)(THIS_ BSTR*) PURE;
+ STDMETHOD(put_width)(THIS_ long) PURE;
+ STDMETHOD(get_width)(THIS_ long*) PURE;
+ STDMETHOD(put_height)(THIS_ long) PURE;
+ STDMETHOD(get_height)(THIS_ long*) PURE;
+ STDMETHOD(put_start)(THIS_ BSTR) PURE;
+ STDMETHOD(get_start)(THIS_ BSTR*) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IHTMLElementCollection;
+#define INTERFACE IHTMLElementCollection
+DECLARE_INTERFACE_(IHTMLElementCollection,IDispatch)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetTypeInfoCount)(THIS_ UINT*) PURE;
+ STDMETHOD(GetTypeInfo)(THIS_ UINT,LCID,LPTYPEINFO*) PURE;
+ STDMETHOD(GetIDsOfNames)(THIS_ REFIID,LPOLESTR*,UINT,LCID,DISPID*) PURE;
+ STDMETHOD(Invoke)(THIS_ DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*) PURE;
+
+ STDMETHOD(toString)(THIS_ BSTR*) PURE;
+ STDMETHOD(put_length)(THIS_ long) PURE;
+ STDMETHOD(get_length)(THIS_ long*) PURE;
+ STDMETHOD(get__newEnum)(THIS_ IUnknown**) PURE;
+ STDMETHOD(item)(THIS_ VARIANT,VARIANT,IDispatch**) PURE;
+ STDMETHOD(tags)(THIS_ VARIANT,IDispatch**) PURE;
+};
+#undef INTERFACE
+
+
+EXTERN_C const IID IID_IHTMLDocument;
+#define INTERFACE IHTMLDocument
+DECLARE_INTERFACE_(IHTMLDocument,IDispatch)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetTypeInfoCount)(THIS_ UINT*) PURE;
+ STDMETHOD(GetTypeInfo)(THIS_ UINT,LCID,LPTYPEINFO*) PURE;
+ STDMETHOD(GetIDsOfNames)(THIS_ REFIID,LPOLESTR*,UINT,LCID,DISPID*) PURE;
+ STDMETHOD(Invoke)(THIS_ DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*) PURE;
+
+ STDMETHOD(get_Script)(THIS_ IDispatch**) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IHTMLDocument2;
+#define INTERFACE IHTMLDocument2
+DECLARE_INTERFACE_(IHTMLDocument2,IHTMLDocument)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetTypeInfoCount)(THIS_ UINT*) PURE;
+ STDMETHOD(GetTypeInfo)(THIS_ UINT,LCID,LPTYPEINFO*) PURE;
+ STDMETHOD(GetIDsOfNames)(THIS_ REFIID,LPOLESTR*,UINT,LCID,DISPID*) PURE;
+ STDMETHOD(Invoke)(THIS_ DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*) PURE;
+
+ STDMETHOD(get_Script)(THIS_ IDispatch**) PURE;
+
+ STDMETHOD(get_all)(THIS_ LPHTMLELEMENTCOLLECTION*) PURE;
+ STDMETHOD(get_body)(THIS_ LPHTMLELEMENT*) PURE;
+ STDMETHOD(get_activeElement)(THIS_ LPHTMLELEMENT*) PURE;
+ STDMETHOD(get_images)(THIS_ LPHTMLELEMENTCOLLECTION*) PURE;
+ STDMETHOD(get_applets)(THIS_ LPHTMLELEMENTCOLLECTION*) PURE;
+ STDMETHOD(get_links)(THIS_ LPHTMLELEMENTCOLLECTION*) PURE;
+ STDMETHOD(get_forms)(THIS_ LPHTMLELEMENTCOLLECTION*) PURE;
+ STDMETHOD(get_anchors)(THIS_ LPHTMLELEMENTCOLLECTION*) PURE;
+ STDMETHOD(put_title)(THIS_ BSTR) PURE;
+ STDMETHOD(get_title)(THIS_ BSTR*) PURE;
+ STDMETHOD(get_scripts)(THIS_ LPHTMLELEMENTCOLLECTION*) PURE;
+ STDMETHOD(put_designMode)(THIS_ BSTR) PURE;
+ STDMETHOD(get_designMode)(THIS_ BSTR*) PURE;
+ STDMETHOD(get_selection)(THIS_ LPHTMLSELECTIONOBJECT*) PURE;
+ STDMETHOD(get_readyState)(THIS_ BSTR*) PURE;
+ STDMETHOD(get_frames)(THIS_ LPHTMLFRAMESCOLLECTION*) PURE;
+ STDMETHOD(get_embeds)(THIS_ LPHTMLELEMENTCOLLECTION*) PURE;
+ STDMETHOD(get_plugins)(THIS_ LPHTMLELEMENTCOLLECTION*) PURE;
+ STDMETHOD(put_alinkColor)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_alinkColor)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_bgColor)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_bgColor)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_fgColor)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_fgColor)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_linkColor)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_linkColor)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_vlinkColor)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_vlinkColor)(THIS_ VARIANT*) PURE;
+ STDMETHOD(get_referrer)(THIS_ BSTR*) PURE;
+ STDMETHOD(get_location)(THIS_ LPHTMLLOCATION*) PURE;
+ STDMETHOD(get_lastModified)(THIS_ BSTR*) PURE;
+ STDMETHOD(put_URL)(THIS_ BSTR) PURE;
+ STDMETHOD(get_URL)(THIS_ BSTR*) PURE;
+ STDMETHOD(put_domain)(THIS_ BSTR) PURE;
+ STDMETHOD(get_domain)(THIS_ BSTR*) PURE;
+ STDMETHOD(put_cookie)(THIS_ BSTR) PURE;
+ STDMETHOD(get_cookie)(THIS_ BSTR*) PURE;
+ STDMETHOD(put_expands)(THIS_ VARIANT_BOOL) PURE;
+ STDMETHOD(get_expands)(THIS_ VARIANT_BOOL*) PURE;
+ STDMETHOD(put_charset)(THIS_ BSTR) PURE;
+ STDMETHOD(get_charset)(THIS_ BSTR*) PURE;
+ STDMETHOD(put_defaultCharset)(THIS_ BSTR) PURE;
+ STDMETHOD(get_defaultCharset)(THIS_ BSTR*) PURE;
+ STDMETHOD(get_mimeType)(THIS_ BSTR*) PURE;
+ STDMETHOD(get_fileSize)(THIS_ BSTR*) PURE;
+ STDMETHOD(get_fileCreatedDate)(THIS_ BSTR*) PURE;
+ STDMETHOD(get_fileModifiedDate)(THIS_ BSTR*) PURE;
+ STDMETHOD(get_fileUpdatedDate)(THIS_ BSTR*) PURE;
+ STDMETHOD(get_security)(THIS_ BSTR*) PURE;
+ STDMETHOD(get_protocol)(THIS_ BSTR*) PURE;
+ STDMETHOD(get_nameProp)(THIS_ BSTR*) PURE;
+ STDMETHOD(write)(THIS_ SAFEARRAY*) PURE;
+ STDMETHOD(writeln)(THIS_ SAFEARRAY*) PURE;
+ STDMETHOD(open)(THIS_ BSTR,VARIANT,VARIANT,VARIANT,IDispatch**) PURE;
+ STDMETHOD(close)(THIS) PURE;
+ STDMETHOD(clear)(THIS) PURE;
+ STDMETHOD(queryCommandSupported)(THIS_ BSTR,VARIANT_BOOL*) PURE;
+ STDMETHOD(queryCommandEnabled)(THIS_ BSTR,VARIANT_BOOL*) PURE;
+ STDMETHOD(queryCommandState)(THIS_ BSTR,VARIANT_BOOL*) PURE;
+ STDMETHOD(queryCommandIndeterm)(THIS_ BSTR,VARIANT_BOOL*) PURE;
+ STDMETHOD(queryCommandText)(THIS_ BSTR,BSTR*) PURE;
+ STDMETHOD(queryCommandValue)(THIS_ BSTR,VARIANT*) PURE;
+ STDMETHOD(execCommand)(THIS_ BSTR,VARIANT_BOOL,VARIANT,VARIANT_BOOL*) PURE;
+ STDMETHOD(execCommandShowHelp)(THIS_ BSTR,VARIANT_BOOL*) PURE;
+ STDMETHOD(createElement)(THIS_ BSTR,LPHTMLELEMENT*) PURE;
+ STDMETHOD(put_onhelp)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_onhelp)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_onclick)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_onclick)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_ondblclick)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_ondblclick)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_onkeyup)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_onkeyup)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_onkeydown)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_onkeydown)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_onkeypress)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_onkeypress)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_onmouseup)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_onmouseup)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_onmousedown)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_onmousedown)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_onmousemove)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_onmousemove)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_onmouseout)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_onmouseout)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_onmouseover)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_onmouseover)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_onreadystatechange)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_onreadystatechange)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_onafterupdate)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_onafterupdate)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_onrowexit)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_onrowexit)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_onrowenter)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_onrowenter)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_ondragstart)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_ondragstart)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_onselectstart)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_onselectstart)(THIS_ VARIANT*) PURE;
+ STDMETHOD(elementFromPoint)(THIS_ long,long,LPHTMLELEMENT*) PURE;
+ STDMETHOD(get_parentWindow)(THIS_ LPHTMLWINDOW2*) PURE;
+ STDMETHOD(get_styleSheets)(THIS_ LPHTMLSTYLESHEETSCOLLECTION*) PURE;
+ STDMETHOD(put_onbeforeupdate)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_onbeforeupdate)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_onerrorupdate)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_onerrorupdate)(THIS_ VARIANT*) PURE;
+ STDMETHOD(toString)(THIS_ BSTR*) PURE;
+ STDMETHOD(createStyleSheet)(THIS_ BSTR,long,LPHTMLSTYLESHEET*) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IHTMLSelectionObject;
+#define INTERFACE IHTMLSelectionObject
+DECLARE_INTERFACE_(IHTMLSelectionObject,IDispatch)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetTypeInfoCount)(THIS_ UINT*) PURE;
+ STDMETHOD(GetTypeInfo)(THIS_ UINT,LCID,LPTYPEINFO*) PURE;
+ STDMETHOD(GetIDsOfNames)(THIS_ REFIID,LPOLESTR*,UINT,LCID,DISPID*) PURE;
+ STDMETHOD(Invoke)(THIS_ DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*) PURE;
+
+ STDMETHOD(createRange)(THIS_ IDispatch**) PURE;
+ STDMETHOD(empty)(THIS) PURE;
+ STDMETHOD(clear)(THIS) PURE;
+ STDMETHOD(get_type)(THIS_ BSTR*) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IHTMLTxtRange;
+#define INTERFACE IHTMLTxtRange
+DECLARE_INTERFACE_(IHTMLTxtRange,IDispatch)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetTypeInfoCount)(THIS_ UINT*) PURE;
+ STDMETHOD(GetTypeInfo)(THIS_ UINT,LCID,LPTYPEINFO*) PURE;
+ STDMETHOD(GetIDsOfNames)(THIS_ REFIID,LPOLESTR*,UINT,LCID,DISPID*) PURE;
+ STDMETHOD(Invoke)(THIS_ DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*) PURE;
+
+ STDMETHOD(get_htmlText)(THIS_ BSTR*) PURE;
+ STDMETHOD(put_text)(THIS_ BSTR) PURE;
+ STDMETHOD(get_text)(THIS_ BSTR*) PURE;
+ STDMETHOD(parentElement)(THIS_ LPHTMLELEMENT*) PURE;
+ STDMETHOD(duplicate)(THIS_ IHTMLTxtRange**) PURE;
+ STDMETHOD(inRange)(THIS_ IHTMLTxtRange*,VARIANT_BOOL*) PURE;
+ STDMETHOD(isEqual)(THIS_ IHTMLTxtRange*,VARIANT_BOOL*) PURE;
+ STDMETHOD(scrollIntoView)(THIS_ VARIANT_BOOL) PURE;
+ STDMETHOD(collapse)(THIS_ VARIANT_BOOL) PURE;
+ STDMETHOD(expand)(THIS_ BSTR,VARIANT_BOOL*) PURE;
+ STDMETHOD(move)(THIS_ BSTR,long,long*) PURE;
+ STDMETHOD(moveStart)(THIS_ BSTR,long,long*) PURE;
+ STDMETHOD(moveEnd)(THIS_ BSTR,long,long*) PURE;
+ STDMETHOD(select)(THIS) PURE;
+ STDMETHOD(pasteHTML)(THIS_ BSTR) PURE;
+ STDMETHOD(moveToElementText)(THIS_ LPHTMLELEMENT) PURE;
+ STDMETHOD(setEndPoint)(THIS_ BSTR,IHTMLTxtRange*) PURE;
+ STDMETHOD(compareEndPoints)(THIS_ BSTR,IHTMLTxtRange*,long*) PURE;
+ STDMETHOD(findText)(THIS_ BSTR,long,long,VARIANT_BOOL*) PURE;
+ STDMETHOD(moveToPoint)(THIS_ long,long) PURE;
+ STDMETHOD(getBookmark)(THIS_ BSTR*) PURE;
+ STDMETHOD(moveToBookbark)(THIS_ BSTR,VARIANT_BOOL*) PURE;
+ STDMETHOD(queryCommandSupported)(THIS_ BSTR,VARIANT_BOOL*) PURE;
+ STDMETHOD(queryCommandEnabled)(THIS_ BSTR,VARIANT_BOOL*) PURE;
+ STDMETHOD(queryCommandState)(THIS_ BSTR,VARIANT_BOOL*) PURE;
+ STDMETHOD(queryCommandIndeterm)(THIS_ BSTR,VARIANT_BOOL*) PURE;
+ STDMETHOD(queryCommandText)(THIS_ BSTR,BSTR*) PURE;
+ STDMETHOD(queryCommandValue)(THIS_ BSTR,VARIANT*) PURE;
+ STDMETHOD(execCommand)(THIS_ BSTR,VARIANT_BOOL,VARIANT,VARIANT_BOOL*) PURE;
+ STDMETHOD(execCommandShowHelp)(THIS_ BSTR,VARIANT_BOOL*) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IHTMLElement;
+#define INTERFACE IHTMLElement
+DECLARE_INTERFACE_(IHTMLElement,IDispatch)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetTypeInfoCount)(THIS_ UINT*) PURE;
+ STDMETHOD(GetTypeInfo)(THIS_ UINT,LCID,LPTYPEINFO*) PURE;
+ STDMETHOD(GetIDsOfNames)(THIS_ REFIID,LPOLESTR*,UINT,LCID,DISPID*) PURE;
+ STDMETHOD(Invoke)(THIS_ DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*) PURE;
+
+ STDMETHOD(setAttribute)(THIS_ BSTR,VARIANT,long) PURE;
+ STDMETHOD(getAttribute)(THIS_ BSTR,long,VARIANT*) PURE;
+ STDMETHOD(removeAttribute)(THIS_ BSTR,long,VARIANT_BOOL*) PURE;
+ STDMETHOD(put_className)(THIS_ BSTR) PURE;
+ STDMETHOD(get_className)(THIS_ BSTR*) PURE;
+ STDMETHOD(put_id)(THIS_ BSTR) PURE;
+ STDMETHOD(get_id)(THIS_ BSTR*) PURE;
+ STDMETHOD(get_tagName)(THIS_ BSTR*) PURE;
+ STDMETHOD(get_parentElement)(THIS_ LPHTMLELEMENT*) PURE;
+ STDMETHOD(get_style)(THIS_ LPHTMLSTYLE*) PURE;
+ STDMETHOD(put_onhelp)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_onhelp)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_onclick)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_onclick)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_ondblclick)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_ondblclick)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_onkeydown)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_onkeydown)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_onkeyup)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_onkeyup)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_onkeypress)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_onkeypress)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_onmouseout)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_onmouseout)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_onmouseover)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_onmouseover)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_onmousemove)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_onmousemove)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_onmousedown)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_onmousedown)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_onmouseup)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_onmouseup)(THIS_ VARIANT*) PURE;
+ STDMETHOD(get_document)(THIS_ IDispatch**) PURE;
+ STDMETHOD(put_title)(THIS_ BSTR) PURE;
+ STDMETHOD(get_title)(THIS_ BSTR*) PURE;
+ STDMETHOD(put_language)(THIS_ BSTR) PURE;
+ STDMETHOD(get_language)(THIS_ BSTR*) PURE;
+ STDMETHOD(put_onselectstart)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_onselectstart)(THIS_ VARIANT*) PURE;
+ STDMETHOD(scrollIntoView)(THIS_ VARIANT) PURE;
+ STDMETHOD(contains)(THIS_ LPHTMLELEMENT,VARIANT_BOOL*) PURE;
+ STDMETHOD(get_source3Index)(THIS_ long*) PURE;
+ STDMETHOD(get_recordNumber)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_lang)(THIS_ BSTR) PURE;
+ STDMETHOD(get_lang)(THIS_ BSTR*) PURE;
+ STDMETHOD(get_offsetLeft)(THIS_ long*) PURE;
+ STDMETHOD(get_offsetTop)(THIS_ long*) PURE;
+ STDMETHOD(get_offsetWidth)(THIS_ long*) PURE;
+ STDMETHOD(get_offsetHeight)(THIS_ long*) PURE;
+ STDMETHOD(get_offsetParent)(THIS_ LPHTMLELEMENT*) PURE;
+ STDMETHOD(put_innerHTML)(THIS_ BSTR) PURE;
+ STDMETHOD(get_innerHTML)(THIS_ BSTR*) PURE;
+ STDMETHOD(put_innerText)(THIS_ BSTR) PURE;
+ STDMETHOD(get_innerText)(THIS_ BSTR*) PURE;
+ STDMETHOD(put_outerHTML)(THIS_ BSTR) PURE;
+ STDMETHOD(get_outerHTML)(THIS_ BSTR*) PURE;
+ STDMETHOD(put_outerText)(THIS_ BSTR) PURE;
+ STDMETHOD(get_outerText)(THIS_ BSTR*) PURE;
+ STDMETHOD(insertAdjacentHTML)(THIS_ BSTR,BSTR) PURE;
+ STDMETHOD(insertAdjacentText)(THIS_ BSTR,BSTR) PURE;
+ STDMETHOD(get_parentTextEdit)(THIS_ LPHTMLELEMENT*) PURE;
+ STDMETHOD(isTextEdit)(THIS_ VARIANT_BOOL*) PURE;
+ STDMETHOD(click)(THIS) PURE;
+ STDMETHOD(get_filters)(THIS_ LPHTMLFILTERSCOLLECTION*) PURE;
+ STDMETHOD(put_ondragstart)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_ondragstart)(THIS_ VARIANT*) PURE;
+ STDMETHOD(toString)(THIS_ BSTR*) PURE;
+ STDMETHOD(put_onbeforeupdate)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_onbeforeupdate)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_onafterupdate)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_onafterupdate)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_onerrorupdate)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_onerrorupdate)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_onrowexit)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_onrowexit)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_onrowenter)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_onrowenter)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_ondatasetchanged)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_ondatasetchanged)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_ondataavailable)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_ondataavailable)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_ondatasetcomplete)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_ondatasetcomplete)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_onfilterchange)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_onfilterchange)(THIS_ VARIANT*) PURE;
+ STDMETHOD(get_children)(THIS_ IDispatch**) PURE;
+ STDMETHOD(get_all)(THIS_ IDispatch**) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IHTMLFramesCollection2;
+#define INTERFACE IHTMLFramesCollection2
+DECLARE_INTERFACE_(IHTMLFramesCollection2,IDispatch)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetTypeInfoCount)(THIS_ UINT*) PURE;
+ STDMETHOD(GetTypeInfo)(THIS_ UINT,LCID,LPTYPEINFO*) PURE;
+ STDMETHOD(GetIDsOfNames)(THIS_ REFIID,LPOLESTR*,UINT,LCID,DISPID*) PURE;
+ STDMETHOD(Invoke)(THIS_ DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*) PURE;
+
+ STDMETHOD(item)(THIS_ VARIANT*,VARIANT*) PURE;
+ STDMETHOD(get_length)(THIS_ long*) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IHTMLWindow2;
+#define INTERFACE IHTMLWindow2
+DECLARE_INTERFACE_(IHTMLWindow2,IHTMLFramesCollection2)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetTypeInfoCount)(THIS_ UINT*) PURE;
+ STDMETHOD(GetTypeInfo)(THIS_ UINT,LCID,LPTYPEINFO*) PURE;
+ STDMETHOD(GetIDsOfNames)(THIS_ REFIID,LPOLESTR*,UINT,LCID,DISPID*) PURE;
+ STDMETHOD(Invoke)(THIS_ DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*) PURE;
+ STDMETHOD(item)(THIS_ VARIANT*,VARIANT*) PURE;
+ STDMETHOD(get_length)(THIS_ long*) PURE;
+
+ STDMETHOD(get_frames)(THIS_ IHTMLFramesCollection2**) PURE;
+ STDMETHOD(put_defaultStatus)(THIS_ BSTR) PURE;
+ STDMETHOD(get_defaultStatus)(THIS_ BSTR*) PURE;
+ STDMETHOD(put_status)(THIS_ BSTR) PURE;
+ STDMETHOD(get_status)(THIS_ BSTR*) PURE;
+ STDMETHOD(setTimeout)(THIS_ BSTR,long,VARIANT*,long*) PURE;
+ STDMETHOD(clearTimeout)(THIS_ long) PURE;
+ STDMETHOD(alert)(THIS_ BSTR) PURE;
+ STDMETHOD(confirm)(THIS_ BSTR,VARIANT_BOOL*) PURE;
+ STDMETHOD(prompt)(THIS_ BSTR,BSTR,VARIANT*) PURE;
+ STDMETHOD(get_Image)(THIS_ LPHTMLIMAGEELEMENTFACTORY*) PURE;
+ STDMETHOD(get_location)(THIS_ LPHTMLLOCATION*) PURE;
+ STDMETHOD(get_history)(THIS_ LPOMHISTORY*) PURE;
+ STDMETHOD(close)(THIS) PURE;
+ STDMETHOD(put_opener)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_opener)(THIS_ VARIANT*) PURE;
+ STDMETHOD(get_navigator)(THIS_ LPOMNAVIGATOR*) PURE;
+ STDMETHOD(put_name)(THIS_ BSTR) PURE;
+ STDMETHOD(get_name)(THIS_ BSTR*) PURE;
+ STDMETHOD(get_parent)(THIS_ LPHTMLWINDOW2*) PURE;
+ STDMETHOD(open)(THIS_ BSTR,BSTR,BSTR,VARIANT_BOOL,LPHTMLWINDOW2*) PURE;
+ STDMETHOD(get_self)(THIS_ LPHTMLWINDOW2*) PURE;
+ STDMETHOD(get_top)(THIS_ LPHTMLWINDOW2*) PURE;
+ STDMETHOD(get_window)(THIS_ LPHTMLWINDOW2*) PURE;
+ STDMETHOD(navigate)(THIS_ BSTR) PURE;
+ STDMETHOD(put_onfocus)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_onfocus)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_onblur)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_onblur)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_onload)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_onload)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_onbeforeunload)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_onbeforeunload)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_onunload)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_onunload)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_onhelp)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_onhelp)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_onerror)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_onerror)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_onresize)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_onresize)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_onscroll)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_onscroll)(THIS_ VARIANT*) PURE;
+ STDMETHOD(get_document)(THIS_ IHTMLDocument2**) PURE;
+ STDMETHOD(get_event)(THIS_ LPHTMLEVENTOBJ*) PURE;
+ STDMETHOD(get__newEnum)(THIS_ IUnknown**) PURE;
+ STDMETHOD(showModalDialog)(THIS_ BSTR,VARIANT*,VARIANT*,VARIANT*) PURE;
+ STDMETHOD(showHelp)(THIS_ BSTR,VARIANT,BSTR) PURE;
+ STDMETHOD(get_screen)(THIS_ LPHTMLSCREEN*) PURE;
+ STDMETHOD(get_Option)(THIS_ LPHTMLOPTIONELEMENTFACTORY*) PURE;
+ STDMETHOD(focus)(THIS) PURE;
+ STDMETHOD(get_closed)(THIS_ VARIANT_BOOL*) PURE;
+ STDMETHOD(blur)(THIS) PURE;
+ STDMETHOD(scroll)(THIS_ long,long) PURE;
+ STDMETHOD(get_clientInformation)(THIS_ LPOMNAVIGATOR*) PURE;
+ STDMETHOD(setInterval)(THIS_ BSTR,long,VARIANT*,long*) PURE;
+ STDMETHOD(clearInterval)(THIS_ long) PURE;
+ STDMETHOD(put_offscreenBuffering)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_offscreenBuffering)(THIS_ VARIANT*) PURE;
+ STDMETHOD(execScript)(THIS_ BSTR,BSTR,VARIANT*) PURE;
+ STDMETHOD(toString)(THIS_ BSTR*) PURE;
+ STDMETHOD(scrollBy)(THIS_ long,long) PURE;
+ STDMETHOD(scrollTo)(THIS_ long,long) PURE;
+ STDMETHOD(moveTo)(THIS_ long,long) PURE;
+ STDMETHOD(moveBy)(THIS_ long,long) PURE;
+ STDMETHOD(resizeTo)(THIS_ long,long) PURE;
+ STDMETHOD(resizeBy)(THIS_ long,long) PURE;
+ STDMETHOD(get_external)(THIS_ IDispatch**) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IHTMLFrameBase;
+#define INTERFACE IHTMLFrameBase
+DECLARE_INTERFACE_(IHTMLFrameBase,IDispatch)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetTypeInfoCount)(THIS_ UINT*) PURE;
+ STDMETHOD(GetTypeInfo)(THIS_ UINT,LCID,LPTYPEINFO*) PURE;
+ STDMETHOD(GetIDsOfNames)(THIS_ REFIID,LPOLESTR*,UINT,LCID,DISPID*) PURE;
+ STDMETHOD(Invoke)(THIS_ DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*) PURE;
+
+ STDMETHOD(put_src)(THIS_ BSTR) PURE;
+ STDMETHOD(get_src)(THIS_ BSTR*) PURE;
+ STDMETHOD(put_name)(THIS_ BSTR) PURE;
+ STDMETHOD(get_name)(THIS_ BSTR*) PURE;
+ STDMETHOD(put_border)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_border)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_frameBorder)(THIS_ BSTR) PURE;
+ STDMETHOD(get_frameBorder)(THIS_ BSTR*) PURE;
+ STDMETHOD(put_frameSpacing)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_frameSpacing)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_marginWidth)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_marginWidth)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_marginHeight)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_marginHeight)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_noResize)(THIS_ VARIANT_BOOL) PURE;
+ STDMETHOD(get_noResize)(THIS_ VARIANT_BOOL*) PURE;
+ STDMETHOD(put_scrolling)(THIS_ BSTR) PURE;
+ STDMETHOD(get_scrolling)(THIS_ BSTR*) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IHTMLFrameBase2;
+#define INTERFACE IHTMLFrameBase2
+DECLARE_INTERFACE_(IHTMLFrameBase2,IDispatch)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetTypeInfoCount)(THIS_ UINT*) PURE;
+ STDMETHOD(GetTypeInfo)(THIS_ UINT,LCID,LPTYPEINFO*) PURE;
+ STDMETHOD(GetIDsOfNames)(THIS_ REFIID,LPOLESTR*,UINT,LCID,DISPID*) PURE;
+ STDMETHOD(Invoke)(THIS_ DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*) PURE;
+
+ STDMETHOD(get_contentWindow)(THIS_ IHTMLWindow2 **) PURE;
+ STDMETHOD(put_onload)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_onload)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_onreadystatechange)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_onreadystatechange)(THIS_ VARIANT*) PURE;
+ STDMETHOD(get_readyState)(THIS_ BSTR*) PURE;
+ STDMETHOD(put_allowTransparency)(THIS_ VARIANT_BOOL) PURE;
+ STDMETHOD(get_allowTransparency)(THIS_ VARIANT_BOOL*) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IHTMLFrameBase3;
+#define INTERFACE IHTMLFrameBase3
+DECLARE_INTERFACE_(IHTMLFrameBase3,IDispatch)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetTypeInfoCount)(THIS_ UINT*) PURE;
+ STDMETHOD(GetTypeInfo)(THIS_ UINT,LCID,LPTYPEINFO*) PURE;
+ STDMETHOD(GetIDsOfNames)(THIS_ REFIID,LPOLESTR*,UINT,LCID,DISPID*) PURE;
+ STDMETHOD(Invoke)(THIS_ DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*) PURE;
+
+ STDMETHOD(put_longDesc)(THIS_ BSTR) PURE;
+ STDMETHOD(get_longDesc)(THIS_ BSTR*) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IHTMLBodyElement;
+#define INTERFACE IHTMLBodyElement
+DECLARE_INTERFACE_(IHTMLBodyElement,IDispatch)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetTypeInfoCount)(THIS_ UINT*) PURE;
+ STDMETHOD(GetTypeInfo)(THIS_ UINT,LCID,LPTYPEINFO*) PURE;
+ STDMETHOD(GetIDsOfNames)(THIS_ REFIID,LPOLESTR*,UINT,LCID,DISPID*) PURE;
+ STDMETHOD(Invoke)(THIS_ DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*) PURE;
+
+ STDMETHOD(put_background)(THIS_ BSTR) PURE;
+ STDMETHOD(get_background)(THIS_ BSTR*) PURE;
+ STDMETHOD(put_bgProperties)(THIS_ BSTR) PURE;
+ STDMETHOD(get_bgProperties)(THIS_ BSTR*) PURE;
+ STDMETHOD(put_leftMargin)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_leftMargin)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_topMargin)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_topMargin)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_rightMargin)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_rightMargin)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_bottomMargin)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_bottomMargin)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_noWrap)(THIS_ VARIANT_BOOL) PURE;
+ STDMETHOD(get_noWrap)(THIS_ VARIANT_BOOL*) PURE;
+ STDMETHOD(put_bgColor)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_bgColor)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_text)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_text)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_link)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_link)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_vLink)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_vLink)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_aLink)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_aLink)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_onload)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_onload)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_onunload)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_onunload)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_scroll)(THIS_ BSTR) PURE;
+ STDMETHOD(get_scroll)(THIS_ BSTR*) PURE;
+ STDMETHOD(put_onselect)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_onselect)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_onbeforeunload)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_onbeforeunload)(THIS_ VARIANT*) PURE;
+ STDMETHOD(createTextRange)(THIS_ IHTMLTxtRange**) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IHTMLBodyElement2;
+#define INTERFACE IHTMLBodyElement2
+DECLARE_INTERFACE_(IHTMLBodyElement2,IDispatch)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetTypeInfoCount)(THIS_ UINT*) PURE;
+ STDMETHOD(GetTypeInfo)(THIS_ UINT,LCID,LPTYPEINFO*) PURE;
+ STDMETHOD(GetIDsOfNames)(THIS_ REFIID,LPOLESTR*,UINT,LCID,DISPID*) PURE;
+ STDMETHOD(Invoke)(THIS_ DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*) PURE;
+
+ STDMETHOD(put_onbeforeprint)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_onbeforeprint)(THIS_ VARIANT*) PURE;
+ STDMETHOD(put_onafterprint)(THIS_ VARIANT) PURE;
+ STDMETHOD(get_onafterprint)(THIS_ VARIANT*) PURE;
+};
+#undef INTERFACE
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/mswsock.h b/tcc/include/winapi/mswsock.h
new file mode 100644
index 0000000..0cea0b8
--- /dev/null
+++ b/tcc/include/winapi/mswsock.h
@@ -0,0 +1,113 @@
+/*
+ * mswsock.h
+ * MS-specific extensions to Windows Sockets, exported from mswsock.dll.
+ * These functions are N/A on Windows9x.
+ *
+ * This file is part of a free library for the Win32 API.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+#ifndef _MSWSOCK_H
+#define _MSWSOCK_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define SO_CONNDATA 0x7000
+#define SO_CONNOPT 0x7001
+#define SO_DISCDATA 0x7002
+#define SO_DISCOPT 0x7003
+#define SO_CONNDATALEN 0x7004
+#define SO_CONNOPTLEN 0x7005
+#define SO_DISCDATALEN 0x7006
+#define SO_DISCOPTLEN 0x7007
+#define SO_OPENTYPE 0x7008
+#define SO_SYNCHRONOUS_ALERT 0x10
+#define SO_SYNCHRONOUS_NONALERT 0x20
+#define SO_MAXDG 0x7009
+#define SO_MAXPATHDG 0x700A
+#define SO_UPDATE_ACCEPT_CONTEXT 0x700B
+#define SO_CONNECT_TIME 0x700C
+#define TCP_BSDURGENT 0x7000
+
+#define TF_DISCONNECT 1
+#define TF_REUSE_SOCKET 2
+#define TF_WRITE_BEHIND 4
+#define TF_USE_DEFAULT_WORKER 0
+#define TF_USE_SYSTEM_THREAD 16
+#define TF_USE_KERNEL_APC 32
+
+typedef struct _TRANSMIT_FILE_BUFFERS {
+ PVOID Head;
+ DWORD HeadLength;
+ PVOID Tail;
+ DWORD TailLength;
+} TRANSMIT_FILE_BUFFERS, *PTRANSMIT_FILE_BUFFERS, *LPTRANSMIT_FILE_BUFFERS;
+
+int PASCAL WSARecvEx(SOCKET,char*,int,int*);
+BOOL PASCAL TransmitFile(SOCKET,HANDLE,DWORD,DWORD,LPOVERLAPPED,LPTRANSMIT_FILE_BUFFERS,DWORD);
+BOOL PASCAL AcceptEx(SOCKET,SOCKET,PVOID,DWORD,DWORD,DWORD,LPDWORD,LPOVERLAPPED);
+VOID PASCAL GetAcceptExSockaddrs(PVOID,DWORD,DWORD,DWORD,struct sockaddr**, LPINT, struct sockaddr**, LPINT);
+
+#ifdef _WINSOCK2_H /* These require the winsock2 interface. */
+
+#define TP_ELEMENT_FILE 1
+#define TP_ELEMENT_MEMORY 2
+#define TP_ELEMENT_EOP 4
+
+typedef struct _TRANSMIT_PACKETS_ELEMENT {
+ ULONG dwElFlags;
+ ULONG cLength;
+ _ANONYMOUS_UNION
+ union {
+ struct {
+ LARGE_INTEGER nFileOffset;
+ HANDLE hFile;
+ };
+ PVOID pBuffer;
+ };
+} TRANSMIT_PACKETS_ELEMENT;
+
+typedef struct _WSAMSG {
+ LPSOCKADDR name;
+ INT namelen;
+ LPWSABUF lpBuffers;
+ DWORD dwBufferCount;
+ WSABUF Control;
+ DWORD dwFlags;
+} WSAMSG, *PWSAMSG, *LPWSAMSG;
+
+
+/* According to MSDN docs, the WSAMSG.Control buffer starts with a
+ cmsghdr header of the following form. See also RFC 2292. */
+
+typedef struct wsacmsghdr {
+ UINT cmsg_len;
+ INT cmsg_level;
+ INT cmsg_type;
+ /* followed by UCHAR cmsg_data[]; */
+} WSACMSGHDR;
+
+/* TODO: Standard Posix.1g macros as per RFC 2292, with WSA_uglification. */
+#if 0
+#define WSA_CMSG_FIRSTHDR(mhdr)
+#define WSA_CMSG_NXTHDR(mhdr, cmsg)
+#define WSA_CMSG_SPACE(length)
+#define WSA_CMSG_LEN(length)
+#endif
+
+BOOL PASCAL DisconnectEx(SOCKET,LPOVERLAPPED,DWORD,DWORD);
+int PASCAL WSARecvMsg(SOCKET,LPWSAMSG,LPDWORD,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE);
+
+#endif /* _WINSOCK2_H */
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* _MSWSOCK_H */
+
diff --git a/tcc/include/winapi/nb30.h b/tcc/include/winapi/nb30.h
new file mode 100644
index 0000000..c0ef0e5
--- /dev/null
+++ b/tcc/include/winapi/nb30.h
@@ -0,0 +1,186 @@
+#ifndef _NB30_H
+#define _NB30_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#define NCBNAMSZ 16
+#define MAX_LANA 254
+#define NAME_FLAGS_MASK 0x87
+#define GROUP_NAME 0x80
+#define UNIQUE_NAME 0x00
+#define REGISTERING 0x00
+#define REGISTERED 0x04
+#define DEREGISTERED 0x05
+#define DUPLICATE 0x06
+#define DUPLICATE_DEREG 0x07
+#define LISTEN_OUTSTANDING 0x01
+#define CALL_PENDING 0x02
+#define SESSION_ESTABLISHED 0x03
+#define HANGUP_PENDING 0x04
+#define HANGUP_COMPLETE 0x05
+#define SESSION_ABORTED 0x06
+#define ALL_TRANSPORTS "M\0\0\0"
+#define MS_NBF "MNBF"
+#define NCBCALL 0x10
+#define NCBLISTEN 0x11
+#define NCBHANGUP 0x12
+#define NCBSEND 0x14
+#define NCBRECV 0x15
+#define NCBRECVANY 0x16
+#define NCBCHAINSEND 0x17
+#define NCBDGSEND 0x20
+#define NCBDGRECV 0x21
+#define NCBDGSENDBC 0x22
+#define NCBDGRECVBC 0x23
+#define NCBADDNAME 0x30
+#define NCBDELNAME 0x31
+#define NCBRESET 0x32
+#define NCBASTAT 0x33
+#define NCBSSTAT 0x34
+#define NCBCANCEL 0x35
+#define NCBADDGRNAME 0x36
+#define NCBENUM 0x37
+#define NCBUNLINK 0x70
+#define NCBSENDNA 0x71
+#define NCBCHAINSENDNA 0x72
+#define NCBLANSTALERT 0x73
+#define NCBACTION 0x77
+#define NCBFINDNAME 0x78
+#define NCBTRACE 0x79
+#define ASYNCH 0x80
+#define NRC_GOODRET 0x00
+#define NRC_BUFLEN 0x01
+#define NRC_ILLCMD 0x03
+#define NRC_CMDTMO 0x05
+#define NRC_INCOMP 0x06
+#define NRC_BADDR 0x07
+#define NRC_SNUMOUT 0x08
+#define NRC_NORES 0x09
+#define NRC_SCLOSED 0x0a
+#define NRC_CMDCAN 0x0b
+#define NRC_DUPNAME 0x0d
+#define NRC_NAMTFUL 0x0e
+#define NRC_ACTSES 0x0f
+#define NRC_LOCTFUL 0x11
+#define NRC_REMTFUL 0x12
+#define NRC_ILLNN 0x13
+#define NRC_NOCALL 0x14
+#define NRC_NOWILD 0x15
+#define NRC_INUSE 0x16
+#define NRC_NAMERR 0x17
+#define NRC_SABORT 0x18
+#define NRC_NAMCONF 0x19
+#define NRC_IFBUSY 0x21
+#define NRC_TOOMANY 0x22
+#define NRC_BRIDGE 0x23
+#define NRC_CANOCCR 0x24
+#define NRC_CANCEL 0x26
+#define NRC_DUPENV 0x30
+#define NRC_ENVNOTDEF 0x34
+#define NRC_OSRESNOTAV 0x35
+#define NRC_MAXAPPS 0x36
+#define NRC_NOSAPS 0x37
+#define NRC_NORESOURCES 0x38
+#define NRC_INVADDRESS 0x39
+#define NRC_INVDDID 0x3B
+#define NRC_LOCKFAIL 0x3C
+#define NRC_OPENERR 0x3f
+#define NRC_SYSTEM 0x40
+#define NRC_PENDING 0xff
+#define NCB_POST void CALLBACK
+typedef struct _ACTION_HEADER {
+ ULONG transport_id;
+ USHORT action_code;
+ USHORT reserved;
+} ACTION_HEADER,*PACTION_HEADER;
+typedef struct _ADAPTER_STATUS {
+ UCHAR adapter_address[6];
+ UCHAR rev_major;
+ UCHAR reserved0;
+ UCHAR adapter_type;
+ UCHAR rev_minor;
+ WORD duration;
+ WORD frmr_recv;
+ WORD frmr_xmit;
+ WORD iframe_recv_err;
+ WORD xmit_aborts;
+ DWORD xmit_success;
+ DWORD recv_success;
+ WORD iframe_xmit_err;
+ WORD recv_buff_unavail;
+ WORD t1_timeouts;
+ WORD ti_timeouts;
+ DWORD reserved1;
+ WORD 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;
+} ADAPTER_STATUS,*PADAPTER_STATUS;
+typedef struct _FIND_NAME_BUFFER {
+ UCHAR length;
+ UCHAR access_control;
+ UCHAR frame_control;
+ UCHAR destination_addr[6];
+ UCHAR source_addr[6];
+ UCHAR routing_info[18];
+} FIND_NAME_BUFFER,*PFIND_NAME_BUFFER;
+typedef struct _FIND_NAME_HEADER {
+ WORD node_count;
+ UCHAR reserved;
+ UCHAR unique_group;
+} FIND_NAME_HEADER,*PFIND_NAME_HEADER;
+typedef struct _LANA_ENUM {
+ UCHAR length;
+ UCHAR lana[MAX_LANA+1];
+} LANA_ENUM,*PLANA_ENUM;
+typedef struct _NAME_BUFFER {
+ UCHAR name[NCBNAMSZ];
+ UCHAR name_num;
+ UCHAR name_flags;
+} NAME_BUFFER,*PNAME_BUFFER;
+typedef struct _NCB {
+ UCHAR ncb_command;
+ UCHAR ncb_retcode;
+ UCHAR ncb_lsn;
+ UCHAR ncb_num;
+ PUCHAR ncb_buffer;
+ WORD ncb_length;
+ UCHAR ncb_callname[NCBNAMSZ];
+ UCHAR ncb_name[NCBNAMSZ];
+ UCHAR ncb_rto;
+ UCHAR ncb_sto;
+ void (CALLBACK *ncb_post)(struct _NCB*);
+ UCHAR ncb_lana_num;
+ UCHAR ncb_cmd_cplt;
+ UCHAR ncb_reserve[10];
+ HANDLE ncb_event;
+} NCB,*PNCB;
+typedef struct _SESSION_BUFFER {
+ UCHAR lsn;
+ UCHAR state;
+ UCHAR local_name[NCBNAMSZ];
+ UCHAR remote_name[NCBNAMSZ];
+ UCHAR rcvs_outstanding;
+ UCHAR sends_outstanding;
+} SESSION_BUFFER,*PSESSION_BUFFER;
+typedef struct _SESSION_HEADER {
+ UCHAR sess_name;
+ UCHAR num_sess;
+ UCHAR rcv_dg_outstanding;
+ UCHAR rcv_any_outstanding;
+} SESSION_HEADER,*PSESSION_HEADER;
+UCHAR WINAPI Netbios(PNCB);
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/nddeapi.h b/tcc/include/winapi/nddeapi.h
new file mode 100644
index 0000000..a6ea207
--- /dev/null
+++ b/tcc/include/winapi/nddeapi.h
@@ -0,0 +1,133 @@
+#ifndef _NDDEAPI_H
+#define _NDDEAPI_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#ifndef CNLEN /* also in lmcons.h */
+#define CNLEN 15
+#define UNCLEN (CNLEN + 2)
+#endif
+#define SEP_CHAR ','
+#define BAR_CHAR "|"
+#define SEP_WCHAR L','
+#define BAR_WCHAR L"|"
+#define NDDE_NO_ERROR 0
+#define NDDE_ACCESS_DENIED 1
+#define NDDE_BUF_TOO_SMALL 2
+#define NDDE_ERROR_MORE_DATA 3
+#define NDDE_INVALID_SERVER 4
+#define NDDE_INVALID_SHARE 5
+#define NDDE_INVALID_PARAMETER 6
+#define NDDE_INVALID_LEVEL 7
+#define NDDE_INVALID_PASSWORD 8
+#define NDDE_INVALID_ITEMNAME 9
+#define NDDE_INVALID_TOPIC 10
+#define NDDE_INTERNAL_ERROR 11
+#define NDDE_OUT_OF_MEMORY 12
+#define NDDE_INVALID_APPNAME 13
+#define NDDE_NOT_IMPLEMENTED 14
+#define NDDE_SHARE_ALREADY_EXIST 15
+#define NDDE_SHARE_NOT_EXIST 16
+#define NDDE_INVALID_FILENAME 17
+#define NDDE_NOT_RUNNING 18
+#define NDDE_INVALID_WINDOW 19
+#define NDDE_INVALID_SESSION 20
+#define NDDE_INVALID_ITEM_LIST 21
+#define NDDE_SHARE_DATA_CORRUPTED 22
+#define NDDE_REGISTRY_ERROR 23
+#define NDDE_CANT_ACCESS_SERVER 24
+#define NDDE_INVALID_SPECIAL_COMMAND 25
+#define NDDE_INVALID_SECURITY_DESC 26
+#define NDDE_TRUST_SHARE_FAIL 27
+#define MAX_NDDESHARENAME 256
+#define MAX_DOMAINNAME 15
+#define MAX_USERNAME 15
+#define MAX_APPNAME 255
+#define MAX_TOPICNAME 255
+#define MAX_ITEMNAME 255
+#define NDDEF_NOPASSWORDPROMPT 0x0001
+#define NDDEF_NOCACHELOOKUP 0x0002
+#define NDDEF_STRIP_NDDE 0x0004
+#define SHARE_TYPE_OLD 0x01
+#define SHARE_TYPE_NEW 0x02
+#define SHARE_TYPE_STATIC 0x04
+#define NDDE_TRUST_SHARE_START 0x80000000L
+#define NDDE_TRUST_SHARE_INIT 0x40000000L
+#define NDDE_TRUST_SHARE_DEL 0x20000000L
+#define NDDE_TRUST_CMD_SHOW 0x10000000L
+#define NDDE_CMD_SHOW_MASK 0x0000FFFFL
+struct NDdeShareInfo_tag {
+ LONG lRevision;
+ LPTSTR lpszShareName;
+ LONG lShareType;
+ LPTSTR lpszAppTopicList;
+ LONG fSharedFlag;
+ LONG fService;
+ LONG fStartAppFlag;
+ LONG nCmdShow;
+ LONG qModifyId[2];
+ LONG cNumItems;
+ LPTSTR lpszItemList;
+} NDDESHAREINFO,*PNDDESHAREINFO;
+
+UINT WINAPI NDdeGetErrorStringA(UINT,LPSTR,DWORD);
+UINT WINAPI NDdeGetErrorStringW(UINT,LPWSTR,DWORD);
+UINT WINAPI NDdeGetShareSecurityA(LPSTR,LPSTR,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,DWORD,PDWORD);
+UINT WINAPI NDdeGetShareSecurityW(LPWSTR,LPWSTR,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,DWORD,PDWORD);
+UINT WINAPI NDdeGetTrustedShareA(LPSTR,LPSTR,PDWORD,PDWORD,PDWORD);
+UINT WINAPI NDdeGetTrustedShareW(LPWSTR,LPWSTR,PDWORD,PDWORD,PDWORD);
+BOOL WINAPI NDdeIsValidShareNameA(LPSTR);
+BOOL WINAPI NDdeIsValidShareNameW(LPWSTR);
+BOOL WINAPI NDdeIsValidAppTopicListA(LPSTR);
+BOOL WINAPI NDdeIsValidAppTopicListW(LPWSTR);
+UINT WINAPI NDdeSetShareSecurityA(LPSTR,LPSTR,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR);
+UINT WINAPI NDdeSetShareSecurityW(LPWSTR,LPWSTR,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR);
+UINT WINAPI NDdeSetTrustedShareA(LPSTR,LPSTR,DWORD);
+UINT WINAPI NDdeSetTrustedShareW(LPWSTR,LPWSTR,DWORD);
+UINT WINAPI NDdeShareAddA(LPSTR,UINT,PSECURITY_DESCRIPTOR,PBYTE,DWORD);
+UINT WINAPI NDdeShareAddW(LPWSTR,UINT,PSECURITY_DESCRIPTOR,PBYTE,DWORD);
+UINT WINAPI NDdeShareDelA(LPSTR,LPSTR,UINT);
+UINT WINAPI NDdeShareDelW(LPWSTR,LPWSTR,UINT);
+UINT WINAPI NDdeShareEnumA(LPSTR,UINT,PBYTE,DWORD,PDWORD,PDWORD);
+UINT WINAPI NDdeShareEnumW(LPWSTR,UINT,PBYTE,DWORD,PDWORD,PDWORD);
+UINT WINAPI NDdeShareGetInfoA(LPSTR,LPSTR,UINT,PBYTE,DWORD,PDWORD,PWORD);
+UINT WINAPI NDdeShareGetInfoW(LPWSTR,LPWSTR,UINT,PBYTE,DWORD,PDWORD,PWORD);
+UINT WINAPI NDdeShareSetInfoA(LPSTR,LPSTR,UINT,PBYTE,DWORD,WORD);
+UINT WINAPI NDdeShareSetInfoW(LPWSTR,LPWSTR,UINT,PBYTE,DWORD,WORD);
+UINT WINAPI NDdeTrustedShareEnumA(LPSTR,UINT,PBYTE,DWORD,PDWORD,PDWORD);
+UINT WINAPI NDdeTrustedShareEnumW(LPWSTR,UINT,PBYTE,DWORD,PDWORD,PDWORD);
+#ifdef UNICODE
+#define NDdeShareAdd NDdeShareAddW
+#define NDdeShareDel NDdeShareDelW
+#define NDdeSetShareSecurity NDdeSetShareSecurityW
+#define NDdeGetShareSecurity NDdeGetShareSecurityW
+#define NDdeShareEnum NDdeShareEnumW
+#define NDdeShareGetInfo NDdeShareGetInfoW
+#define NDdeShareSetInfo NDdeShareSetInfoW
+#define NDdeGetErrorString NDdeGetErrorStringW
+#define NDdeSetTrustedShare NDdeSetTrustedShareW
+#define NDdeGetTrustedShare NDdeGetTrustedShareW
+#define NDdeTrustedShareEnum NDdeTrustedShareEnumW
+#else
+#define NDdeShareAdd NDdeShareAddA
+#define NDdeShareDel NDdeShareDelA
+#define NDdeSetShareSecurity NDdeSetShareSecurityA
+#define NDdeGetShareSecurity NDdeGetShareSecurityA
+#define NDdeShareEnum NDdeShareEnumA
+#define NDdeShareGetInfo NDdeShareGetInfoA
+#define NDdeShareSetInfo NDdeShareSetInfoA
+#define NDdeGetErrorString NDdeGetErrorStringA
+#define NDdeIsValidShareName NDdeIsValidShareNameA
+#define NDdeIsValidAppTopicList NDdeIsValidAppTopicListA
+#define NDdeSetTrustedShare NDdeSetTrustedShareA
+#define NDdeGetTrustedShare NDdeGetTrustedShareA
+#define NDdeTrustedShareEnum NDdeTrustedShareEnumA
+#endif
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/nspapi.h b/tcc/include/winapi/nspapi.h
new file mode 100644
index 0000000..463b139
--- /dev/null
+++ b/tcc/include/winapi/nspapi.h
@@ -0,0 +1,126 @@
+#ifndef _NSPAPI_H
+#define _NSPAPI_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define NS_ALL 0
+
+#define NS_SAP 1
+#define NS_NDS 2
+#define NS_PEER_BROWSE 3
+
+#define NS_TCPIP_LOCAL 10
+#define NS_TCPIP_HOSTS 11
+#define NS_DNS 12
+#define NS_NETBT 13
+#define NS_WINS 14
+
+#define NS_NBP 20
+
+#define NS_MS 30
+#define NS_STDA 31
+#define NS_NTDS 32
+
+#define NS_X500 40
+#define NS_NIS 41
+#define NS_NISPLUS 42
+
+#define NS_WRQ 50
+
+#define SERVICE_REGISTER 1
+#define SERVICE_DEREGISTER 2
+#define SERVICE_FLUSH 3
+#define SERVICE_FLAG_HARD 0x00000002
+
+#ifndef RC_INVOKED
+
+#if defined (_WINSOCK_H) || defined (_WINSOCK2_H) /* needed for LPSOCKADDR */
+#ifndef __CSADDR_T_DEFINED /* also in winsock2.h, but not in winsock.h */
+#define __CSADDR_T_DEFINED
+typedef struct _SOCKET_ADDRESS {
+ LPSOCKADDR lpSockaddr;
+ INT iSockaddrLength;
+} SOCKET_ADDRESS,*PSOCKET_ADDRESS,*LPSOCKET_ADDRESS;
+typedef struct _CSADDR_INFO {
+ SOCKET_ADDRESS LocalAddr;
+ SOCKET_ADDRESS RemoteAddr;
+ INT iSocketType;
+ INT iProtocol;
+} CSADDR_INFO,*PCSADDR_INFO,*LPCSADDR_INFO;
+#endif
+#endif
+
+#ifndef __BLOB_T_DEFINED /* also in wtypes.h and winsock2.h */
+#define __BLOB_T_DEFINED
+typedef struct _BLOB {
+ ULONG cbSize;
+ BYTE *pBlobData;
+} BLOB,*PBLOB,*LPBLOB;
+#endif
+
+typedef struct _SERVICE_ADDRESS {
+ DWORD dwAddressType;
+ DWORD dwAddressFlags;
+ DWORD dwAddressLength;
+ DWORD dwPrincipalLength;
+ BYTE *lpAddress;
+ BYTE *lpPrincipal;
+} SERVICE_ADDRESS;
+typedef struct _SERVICE_ADDRESSES {
+ DWORD dwAddressCount;
+ SERVICE_ADDRESS Addresses[1];
+} SERVICE_ADDRESSES, *PSERVICE_ADDRESSES, *LPSERVICE_ADDRESSES;
+typedef struct _SERVICE_INFOA {
+ LPGUID lpServiceType;
+ LPSTR lpServiceName;
+ LPSTR lpComment;
+ LPSTR lpLocale;
+ DWORD dwDisplayHint;
+ DWORD dwVersion;
+ DWORD dwTime;
+ LPSTR lpMachineName;
+ LPSERVICE_ADDRESSES lpServiceAddress;
+ BLOB ServiceSpecificInfo;
+} SERVICE_INFOA, *LPSERVICE_INFOA;
+typedef struct _SERVICE_INFOW {
+ LPGUID lpServiceType;
+ LPWSTR lpServiceName;
+ LPWSTR lpComment;
+ LPWSTR lpLocale;
+ DWORD dwDisplayHint;
+ DWORD dwVersion;
+ DWORD dwTime;
+ LPWSTR lpMachineName;
+ LPSERVICE_ADDRESSES lpServiceAddress;
+ BLOB ServiceSpecificInfo;
+} SERVICE_INFOW, *LPSERVICE_INFOW;
+
+typedef void *LPSERVICE_ASYNC_INFO;
+INT WINAPI SetServiceA(DWORD,DWORD,DWORD,LPSERVICE_INFOA,LPSERVICE_ASYNC_INFO,LPDWORD);
+INT WINAPI SetServiceW(DWORD,DWORD,DWORD,LPSERVICE_INFOW,LPSERVICE_ASYNC_INFO,LPDWORD);
+INT WINAPI GetAddressByNameA(DWORD,LPGUID,LPSTR,LPINT,DWORD,LPSERVICE_ASYNC_INFO,LPVOID,LPDWORD,LPSTR,LPDWORD);
+INT WINAPI GetAddressByNameW(DWORD,LPGUID,LPWSTR,LPINT,DWORD,LPSERVICE_ASYNC_INFO,LPVOID,LPDWORD,LPWSTR,LPDWORD);
+
+#ifdef UNICODE
+typedef SERVICE_INFOW SERVICE_INFO, *LPSERVICE_INFO;
+#define _SERVICE_INFO SERVICE_INFOW
+#define SetService SetServiceW
+#define GetAddressByName GetAddressByNameW
+#else
+typedef SERVICE_INFOA SERVICE_INFO, *LPSERVICE_INFO;
+#define _SERVICE_INFO SERVICE_INFOA
+#define SetService SetServiceA
+#define GetAddressByName GetAddressByNameA
+#endif
+
+#endif /* RC_INVOKED */
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* _NSPAPI_H */
diff --git a/tcc/include/winapi/ntdef.h b/tcc/include/winapi/ntdef.h
new file mode 100644
index 0000000..83f4fa3
--- /dev/null
+++ b/tcc/include/winapi/ntdef.h
@@ -0,0 +1,60 @@
+#ifndef _NTDEF_H
+#define _NTDEF_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#define NTAPI __stdcall
+#define OBJ_INHERIT 2L
+#define OBJ_PERMANENT 16L
+#define OBJ_EXCLUSIVE 32L
+#define OBJ_CASE_INSENSITIVE 64L
+#define OBJ_OPENIF 128L
+#define OBJ_OPENLINK 256L
+#define OBJ_VALID_ATTRIBUTES 498L
+#define InitializeObjectAttributes(p,n,a,r,s) { \
+ (p)->Length = sizeof(OBJECT_ATTRIBUTES); \
+ (p)->RootDirectory = (r); \
+ (p)->Attributes = (a); \
+ (p)->ObjectName = (n); \
+ (p)->SecurityDescriptor = (s); \
+ (p)->SecurityQualityOfService = NULL; \
+}
+#ifndef NT_SUCCESS
+#define NT_SUCCESS(x) ((x)>=0)
+#define STATUS_SUCCESS ((NTSTATUS)0)
+#endif
+#if !defined(_NTSECAPI_H) && !defined(_SUBAUTH_H)
+typedef LONG NTSTATUS, *PNTSTATUS;
+typedef struct _UNICODE_STRING {
+ USHORT Length;
+ USHORT MaximumLength;
+ PWSTR Buffer;
+} UNICODE_STRING, *PUNICODE_STRING;
+typedef const UNICODE_STRING* PCUNICODE_STRING;
+typedef struct _STRING {
+ USHORT Length;
+ USHORT MaximumLength;
+ PCHAR Buffer;
+} STRING, *PSTRING;
+#endif
+typedef STRING ANSI_STRING;
+typedef PSTRING PANSI_STRING;
+typedef STRING OEM_STRING;
+typedef PSTRING POEM_STRING;
+typedef LARGE_INTEGER PHYSICAL_ADDRESS, *PPHYSICAL_ADDRESS;
+typedef enum _SECTION_INHERIT {
+ ViewShare = 1,
+ ViewUnmap = 2
+} SECTION_INHERIT;
+#if !defined(_NTSECAPI_H)
+typedef struct _OBJECT_ATTRIBUTES {
+ ULONG Length;
+ HANDLE RootDirectory;
+ PUNICODE_STRING ObjectName;
+ ULONG Attributes;
+ PVOID SecurityDescriptor;
+ PVOID SecurityQualityOfService;
+} OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;
+#endif
+#endif /* _NTDEF_H */
diff --git a/tcc/include/winapi/ntdll.h b/tcc/include/winapi/ntdll.h
new file mode 100644
index 0000000..b666613
--- /dev/null
+++ b/tcc/include/winapi/ntdll.h
@@ -0,0 +1,15 @@
+#ifndef _NTDLL_H
+#define _NTDLL_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+typedef enum _SHUTDOWN_ACTION {
+ ShutdownNoReboot,
+ ShutdownReboot,
+ ShutdownPowerOff
+ } SHUTDOWN_ACTION;
+
+DWORD WINAPI NtShutdownSystem (SHUTDOWN_ACTION Action);
+
+#endif /* _NTDLL_H */
diff --git a/tcc/include/winapi/ntdsapi.h b/tcc/include/winapi/ntdsapi.h
new file mode 100644
index 0000000..2218bee
--- /dev/null
+++ b/tcc/include/winapi/ntdsapi.h
@@ -0,0 +1,115 @@
+/*
+ * ntdsapi.h - Active Directory
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may use,
+ * modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+#ifndef _NTDSAPI_H
+#define _NTDSAPI_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--- Active Directory Reference - Active Directory Enumerations */
+#if (_WIN32_WINNT >= 0x0501)
+typedef enum _DS_MANGLE_FOR {
+ DS_MANGLE_UNKNOWN = 0,
+ DS_MANGLE_OBJECT_RDN_FOR_DELETION = 1,
+ DS_MANGLE_OBJECT_RDN_FOR_NAME_CONFLICT = 2
+} DS_MANGLE_FOR;
+#endif /* (_WIN32_WINNT >= 0x0501) */
+#if (_WIN32_WINNT >= 0x0500)
+typedef enum {
+ DS_NAME_NO_ERROR = 0,
+ DS_NAME_ERROR_RESOLVING = 1,
+ DS_NAME_ERROR_NOT_FOUND = 2,
+ DS_NAME_ERROR_NOT_UNIQUE = 3,
+ DS_NAME_ERROR_NO_MAPPING = 4,
+ DS_NAME_ERROR_DOMAIN_ONLY = 5,
+ DS_NAME_ERROR_NO_SYNTACTICAL_MAPPING = 6,
+ DS_NAME_ERROR_TRUST_REFERRAL = 7
+} DS_NAME_ERROR;
+typedef enum {
+ DS_NAME_NO_FLAGS = 0x0,
+ DS_NAME_FLAG_SYNTACTICAL_ONLY = 0x1,
+ DS_NAME_FLAG_EVAL_AT_DC = 0x2,
+ DS_NAME_FLAG_GCVERIFY = 0x4,
+ DS_NAME_FLAG_TRUST_REFERRAL = 0x8
+} DS_NAME_FLAGS;
+typedef enum {
+ DS_UNKNOWN_NAME = 0,
+ DS_FQDN_1779_NAME = 1,
+ DS_NT4_ACCOUNT_NAME = 2,
+ DS_DISPLAY_NAME = 3,
+ DS_UNIQUE_ID_NAME = 6,
+ DS_CANONICAL_NAME = 7,
+ DS_USER_PRINCIPAL_NAME = 8,
+ DS_CANONICAL_NAME_EX = 9,
+ DS_SERVICE_PRINCIPAL_NAME = 10,
+ DS_SID_OR_SID_HISTORY_NAME = 11,
+ DS_DNS_DOMAIN_NAME = 12
+} DS_NAME_FORMAT;
+typedef enum _DS_REPL_INFO_TYPE {
+ DS_REPL_INFO_NEIGHBORS = 0,
+ DS_REPL_INFO_CURSORS_FOR_NC = 1,
+ DS_REPL_INFO_METADATA_FOR_OBJ = 2,
+ DS_REPL_INFO_KCC_DSA_CONNECT_FAILURES = 3,
+ DS_REPL_INFO_KCC_DSA_LINK_FAILURES = 4,
+ DS_REPL_INFO_PENDING_OPS = 5,
+ DS_REPL_INFO_METADATA_FOR_ATTR_VALUE = 6,
+ DS_REPL_INFO_CURSORS_2_FOR_NC = 7,
+ DS_REPL_INFO_CURSORS_3_FOR_NC = 8,
+ DS_REPL_INFO_METADATA_2_FOR_OBJ = 9,
+ DS_REPL_INFO_METADATA_2_FOR_ATTR_VALUE = 10
+} DS_REPL_INFO_TYPE;
+typedef enum {
+ DS_REPL_OP_TYPE_SYNC = 0,
+ DS_REPL_OP_TYPE_ADD,
+ DS_REPL_OP_TYPE_DELETE,
+ DS_REPL_OP_TYPE_MODIFY,
+ DS_REPL_OP_TYPE_UPDATE_REFS
+} DS_REPL_OP_TYPE;
+typedef enum {
+ DS_REPSYNCALL_WIN32_ERROR_CONTACTING_SERVER = 0,
+ DS_REPSYNCALL_WIN32_ERROR_REPLICATING = 1,
+ DS_REPSYNCALL_SERVER_UNREACHABLE = 2
+} DS_REPSYNCALL_ERROR;
+typedef enum {
+ DS_REPSYNCALL_EVENT_ERROR = 0,
+ DS_REPSYNCALL_EVENT_SYNC_STARTED = 1,
+ DS_REPSYNCALL_EVENT_SYNC_COMPLETED = 2,
+ DS_REPSYNCALL_EVENT_FINISHED = 3
+} DS_REPSYNCALL_EVENT;
+typedef enum {
+ DS_SPN_DNS_HOST = 0,
+ DS_SPN_DN_HOST = 1,
+ DS_SPN_NB_HOST = 2,
+ DS_SPN_DOMAIN = 3,
+ DS_SPN_NB_DOMAIN = 4,
+ DS_SPN_SERVICE = 5
+} DS_SPN_NAME_TYPE;
+typedef enum {
+ DS_SPN_ADD_SPN_OP = 0,
+ DS_SPN_REPLACE_SPN_OP = 1,
+ DS_SPN_DELETE_SPN_OP = 2
+} DS_SPN_WRITE_OP;
+
+
+#endif /* (_WIN32_WINNT >= 0x0500) */
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/ntdsbcli.h b/tcc/include/winapi/ntdsbcli.h
new file mode 100644
index 0000000..3508fef
--- /dev/null
+++ b/tcc/include/winapi/ntdsbcli.h
@@ -0,0 +1,45 @@
+/*
+ * ntdsbcli.h - Active Directory
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may use,
+ * modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+#ifndef _NTDSBCLI_H
+#define _NTDSBCLI_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--- Active Directory Reference - Active Directory Structures - Directory Backup Structures */
+#if (_WIN32_WINNT >= 0x0500)
+typedef struct {
+ LPSTR szDatabaseName;
+ LPSTR szNewDatabaseName;
+} EDB_RSTMAPA,*PEDB_RSTMAPA;
+typedef struct {
+ LPWSTR szDatabaseName;
+ LPWSTR szNewDatabaseName;
+} EDB_RSTMAPW,*PEDB_RSTMAPW;
+#ifdef UNICODE
+typedef EDB_RSTMAPW EDB_RSTMAP,*PEDB_RSTMAP;
+#else
+typedef EDB_RSTMAPA EDB_RSTMAP,*PEDB_RSTMAP;
+#endif
+#endif /* (_WIN32_WINNT >= 0x0500) */
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/ntldap.h b/tcc/include/winapi/ntldap.h
new file mode 100644
index 0000000..29236a0
--- /dev/null
+++ b/tcc/include/winapi/ntldap.h
@@ -0,0 +1,60 @@
+/*
+ ntldap.h - Header file for the Windows LDAP API Extensions
+
+ Written by Filip Navara <xnavara@volny.cz>
+
+ References:
+ Lightweight Directory Access Protocol Reference
+ http://msdn.microsoft.com/library/en-us/netdir/ldap/ldap_reference.asp
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+*/
+
+#ifndef _NTLDAP_H
+#define _NTLDAP_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#define LDAP_SERVER_ASQ_OID "1.2.840.113556.1.4.1504"
+#define LDAP_SERVER_ASQ_OID_W L"1.2.840.113556.1.4.1504"
+#define LDAP_SERVER_DIRSYNC_OID "1.2.840.113556.1.4.841"
+#define LDAP_SERVER_DIRSYNC_OID_W L"1.2.840.113556.1.4.841"
+#define LDAP_SERVER_SD_FLAGS_OID "1.2.840.113556.1.4.801"
+#define LDAP_SERVER_SD_FLAGS_OID_W L"1.2.840.113556.1.4.801"
+#define LDAP_SERVER_FAST_BIND_OID "1.2.840.113556.1.4.1781"
+#define LDAP_SERVER_FAST_BIND_OID_W L"1.2.840.113556.1.4.1781"
+#define LDAP_MATCHING_RULE_BIT_OR "1.2.840.113556.1.4.804"
+#define LDAP_MATCHING_RULE_BIT_OR_W L"1.2.840.113556.1.4.804"
+#define LDAP_MATCHING_RULE_BIT_AND "1.2.840.113556.1.4.803"
+#define LDAP_MATCHING_RULE_BIT_AND_W L"1.2.840.113556.1.4.803"
+#define LDAP_SERVER_EXTENDED_DN_OID "1.2.840.113556.1.4.529"
+#define LDAP_SERVER_EXTENDED_DN_OID_W L"1.2.840.113556.1.4.529"
+#define LDAP_SERVER_LAZY_COMMIT_OID "1.2.840.113556.1.4.619"
+#define LDAP_SERVER_LAZY_COMMIT_OID_W L"1.2.840.113556.1.4.619"
+#define LDAP_SERVER_TREE_DELETE_OID "1.2.840.113556.1.4.805"
+#define LDAP_SERVER_TREE_DELETE_OID_W L"1.2.840.113556.1.4.805"
+#define LDAP_SERVER_VERIFY_NAME_OID "1.2.840.113556.1.4.1338"
+#define LDAP_SERVER_VERIFY_NAME_OID_W L"1.2.840.113556.1.4.1338"
+#define LDAP_SERVER_SHOW_DELETED_OID "1.2.840.113556.1.4.417"
+#define LDAP_SERVER_SHOW_DELETED_OID_W L"1.2.840.113556.1.4.417"
+#define LDAP_SERVER_NOTIFICATION_OID "1.2.840.113556.1.4.528"
+#define LDAP_SERVER_NOTIFICATION_OID_W L"1.2.840.113556.1.4.528"
+#define LDAP_SERVER_DOMAIN_SCOPE_OID "1.2.840.113556.1.4.1339"
+#define LDAP_SERVER_DOMAIN_SCOPE_OID_W L"1.2.840.113556.1.4.1339"
+#define LDAP_CAP_ACTIVE_DIRECTORY_OID "1.2.840.113556.1.4.800"
+#define LDAP_CAP_ACTIVE_DIRECTORY_OID_W L"1.2.840.113556.1.4.800"
+#define LDAP_SERVER_SEARCH_OPTIONS_OID "1.2.840.113556.1.4.1340"
+#define LDAP_SERVER_SEARCH_OPTIONS_OID_W L"1.2.840.113556.1.4.1340"
+#define LDAP_CAP_ACTIVE_DIRECTORY_V51_OID "1.2.840.113556.1.4.1670"
+#define LDAP_CAP_ACTIVE_DIRECTORY_V51_OID_W L"1.2.840.113556.1.4.1670"
+#define LDAP_SERVER_PERMISSIVE_MODIFY_OID "1.2.840.113556.1.4.1413"
+#define LDAP_SERVER_PERMISSIVE_MODIFY_OID_W L"1.2.840.113556.1.4.1413"
+#define LDAP_SERVER_CROSSDOM_MOVE_TARGET_OID "1.2.840.113556.1.4.521"
+#define LDAP_SERVER_CROSSDOM_MOVE_TARGET_OID_W L"1.2.840.113556.1.4.521"
+#define SERVER_SEARCH_FLAG_DOMAIN_SCOPE 1
+#define SERVER_SEARCH_FLAG_PHANTOM_ROOT 2
+
+#endif /* _NTLDAP_H */
diff --git a/tcc/include/winapi/ntsecapi.h b/tcc/include/winapi/ntsecapi.h
new file mode 100644
index 0000000..a57cfca
--- /dev/null
+++ b/tcc/include/winapi/ntsecapi.h
@@ -0,0 +1,612 @@
+#ifndef _NTSECAPI_H
+#define _NTSECAPI_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#define KERB_WRAP_NO_ENCRYPT 0x80000001
+#define LOGON_GUEST 1
+#define LOGON_NOENCRYPTION 2
+#define LOGON_CACHED_ACCOUNT 4
+#define LOGON_USED_LM_PASSWORD 8
+#define LOGON_EXTRA_SIDS 32
+#define LOGON_SUBAUTH_SESSION_KEY 64
+#define LOGON_SERVER_TRUST_ACCOUNT 128
+#define LOGON_NTLMV2_ENABLED 256
+#define LOGON_RESOURCE_GROUPS 512
+#define LOGON_PROFILE_PATH_RETURNED 1024
+#define LOGON_GRACE_LOGON 16777216
+#define LSA_MODE_PASSWORD_PROTECTED 1
+#define LSA_MODE_INDIVIDUAL_ACCOUNTS 2
+#define LSA_MODE_MANDATORY_ACCESS 3
+#define LSA_MODE_LOG_FULL 4
+#define LSA_SUCCESS(x) ((LONG)(x)>=0)
+#define MICROSOFT_KERBEROS_NAME_A "Kerberos"
+#define MICROSOFT_KERBEROS_NAME_W L"Kerberos"
+#define MSV1_0_ALLOW_SERVER_TRUST_ACCOUNT 32
+#define MSV1_0_ALLOW_WORKSTATION_TRUST_ACCOUNT 2048
+#define MSV1_0_CHALLENGE_LENGTH 8
+#define MSV1_0_CLEARTEXT_PASSWORD_ALLOWED 2
+#define MSV1_0_CRED_LM_PRESENT 1
+#define MSV1_0_CRED_NT_PRESENT 2
+#define MSV1_0_CRED_VERSION 0
+#define MSV1_0_DONT_TRY_GUEST_ACCOUNT 16
+#define MSV1_0_LANMAN_SESSION_KEY_LENGTH 8
+#define MSV1_0_MAX_NTLM3_LIFE 1800
+#define MSV1_0_MAX_AVL_SIZE 64000
+#define MSV1_0_MNS_LOGON 16777216
+#define MSV1_0_NTLM3_RESPONSE_LENGTH 16
+#define MSV1_0_NTLM3_OWF_LENGTH 16
+#define MSV1_0_NTLM3_INPUT_LENGTH (sizeof(MSV1_0_NTLM3_RESPONSE)-MSV1_0_NTLM3_RESPONSE_LENGTH)
+#define MSV1_0_OWF_PASSWORD_LENGTH 16
+#define MSV1_0_PACKAGE_NAME "MICROSOFT_AUTHENTICATION_PACKAGE_V1_0"
+#define MSV1_0_PACKAGE_NAMEW L"MICROSOFT_AUTHENTICATION_PACKAGE_V1_0"
+#define MSV1_0_PACKAGE_NAMEW_LENGTH sizeof(MSV1_0_PACKAGE_NAMEW)-sizeof(WCHAR)
+#define MSV1_0_RETURN_USER_PARAMETERS 8
+#define MSV1_0_RETURN_PASSWORD_EXPIRY 64
+#define MSV1_0_RETURN_PROFILE_PATH 512
+#define MSV1_0_SUBAUTHENTICATION_DLL_EX 1048576
+#define MSV1_0_SUBAUTHENTICATION_DLL 0xff000000
+#define MSV1_0_SUBAUTHENTICATION_DLL_SHIFT 24
+#define MSV1_0_SUBAUTHENTICATION_DLL_RAS 2
+#define MSV1_0_SUBAUTHENTICATION_DLL_IIS 132
+#define MSV1_0_SUBAUTHENTICATION_FLAGS 0xff000000
+#define MSV1_0_SUBAUTHENTICATION_KEY "System\\CurrentControlSet\\Control\\Lsa\\MSV1_0"
+#define MSV1_0_SUBAUTHENTICATION_VALUE "Auth"
+#define MSV1_0_TRY_GUEST_ACCOUNT_ONLY 256
+#define MSV1_0_TRY_SPECIFIED_DOMAIN_ONLY 1024
+#define MSV1_0_UPDATE_LOGON_STATISTICS 4
+#define MSV1_0_USE_CLIENT_CHALLENGE 128
+#define MSV1_0_USER_SESSION_KEY_LENGTH 16
+#define POLICY_VIEW_LOCAL_INFORMATION 1
+#define POLICY_VIEW_AUDIT_INFORMATION 2
+#define POLICY_GET_PRIVATE_INFORMATION 4
+#define POLICY_TRUST_ADMIN 8
+#define POLICY_CREATE_ACCOUNT 16
+#define POLICY_CREATE_SECRET 32
+#define POLICY_CREATE_PRIVILEGE 64
+#define POLICY_SET_DEFAULT_QUOTA_LIMITS 128
+#define POLICY_SET_AUDIT_REQUIREMENTS 256
+#define POLICY_AUDIT_LOG_ADMIN 512
+#define POLICY_SERVER_ADMIN 1024
+#define POLICY_LOOKUP_NAMES 2048
+#define POLICY_READ (STANDARD_RIGHTS_READ|6)
+#define POLICY_WRITE (STANDARD_RIGHTS_WRITE|2040)
+#define POLICY_EXECUTE (STANDARD_RIGHTS_EXECUTE|2049)
+#define POLICY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|4095)
+#define POLICY_AUDIT_EVENT_UNCHANGED 0
+#define POLICY_AUDIT_EVENT_SUCCESS 1
+#define POLICY_AUDIT_EVENT_FAILURE 2
+#define POLICY_AUDIT_EVENT_NONE 4
+#define POLICY_AUDIT_EVENT_MASK 7
+#define POLICY_LOCATION_LOCAL 1
+#define POLICY_LOCATION_DS 2
+#define POLICY_MACHINE_POLICY_LOCAL 0
+#define POLICY_MACHINE_POLICY_DEFAULTED 1
+#define POLICY_MACHINE_POLICY_EXPLICIT 2
+#define POLICY_MACHINE_POLICY_UNKNOWN 0xFFFFFFFF
+#define POLICY_QOS_SCHANEL_REQUIRED 1
+#define POLICY_QOS_OUTBOUND_INTEGRITY 2
+#define POLICY_QOS_OUTBOUND_CONFIDENTIALITY 4
+#define POLICY_QOS_INBOUND_INTEGREITY 8
+#define POLICY_QOS_INBOUND_CONFIDENTIALITY 16
+#define POLICY_QOS_ALLOW_LOCAL_ROOT_CERT_STORE 32
+#define POLICY_QOS_RAS_SERVER_ALLOWED 64
+#define POLICY_QOS_DHCP_SERVER_ALLOWD 128
+#define POLICY_KERBEROS_FORWARDABLE 1
+#define POLICY_KERBEROS_PROXYABLE 2
+#define POLICY_KERBEROS_RENEWABLE 4
+#define POLICY_KERBEROS_POSTDATEABLE 8
+#define SAM_PASSWORD_CHANGE_NOTIFY_ROUTINE "PasswordChangeNotify"
+#define SAM_INIT_NOTIFICATION_ROUTINE "InitializeChangeNotify"
+#define SAM_PASSWORD_FILTER_ROUTINE "PasswordFilter"
+#define SE_INTERACTIVE_LOGON_NAME TEXT("SeInteractiveLogonRight")
+#define SE_NETWORK_LOGON_NAME TEXT("SeNetworkLogonRight")
+#define SE_BATCH_LOGON_NAME TEXT("SeBatchLogonRight")
+#define SE_SERVICE_LOGON_NAME TEXT("SeServiceLogonRight")
+#define TRUST_ATTRIBUTE_NON_TRANSITIVE 1
+#define TRUST_ATTRIBUTE_UPLEVEL_ONLY 2
+#define TRUST_ATTRIBUTE_TREE_PARENT 4194304
+#define TRUST_ATTRIBUTES_VALID -16580609
+#define TRUST_AUTH_TYPE_NONE 0
+#define TRUST_AUTH_TYPE_NT4OWF 1
+#define TRUST_AUTH_TYPE_CLEAR 2
+#define TRUST_DIRECTION_DISABLED 0
+#define TRUST_DIRECTION_INBOUND 1
+#define TRUST_DIRECTION_OUTBOUND 2
+#define TRUST_DIRECTION_BIDIRECTIONAL 3
+#define TRUST_TYPE_DOWNLEVEL 1
+#define TRUST_TYPE_UPLEVEL 2
+#define TRUST_TYPE_MIT 3
+#define TRUST_TYPE_DCE 4
+#if !defined(_NTDEF_H) && !defined(_SUBAUTH_H)
+typedef LONG NTSTATUS, *PNTSTATUS;
+typedef struct _UNICODE_STRING {
+ USHORT Length;
+ USHORT MaximumLength;
+ PWSTR Buffer;
+} UNICODE_STRING, *PUNICODE_STRING;
+typedef const UNICODE_STRING* PCUNICODE_STRING;
+typedef struct _STRING {
+ USHORT Length;
+ USHORT MaximumLength;
+ PCHAR Buffer;
+} STRING, *PSTRING;
+#endif
+typedef UNICODE_STRING LSA_UNICODE_STRING, *PLSA_UNICODE_STRING;
+typedef STRING LSA_STRING, *PLSA_STRING;
+typedef enum _MSV1_0_LOGON_SUBMIT_TYPE {
+ MsV1_0InteractiveLogon = 2,
+ MsV1_0Lm20Logon,
+ MsV1_0NetworkLogon,
+ MsV1_0SubAuthLogon,
+ MsV1_0WorkstationUnlockLogon = 7
+} MSV1_0_LOGON_SUBMIT_TYPE, *PMSV1_0_LOGON_SUBMIT_TYPE;
+typedef enum _MSV1_0_PROFILE_BUFFER_TYPE {
+ MsV1_0InteractiveProfile = 2,
+ MsV1_0Lm20LogonProfile,
+ MsV1_0SmartCardProfile
+} MSV1_0_PROFILE_BUFFER_TYPE, *PMSV1_0_PROFILE_BUFFER_TYPE;
+typedef enum {
+ MsvAvEOL,
+ MsvAvNbComputerName,
+ MsvAvNbDomainName,
+ MsvAvDnsComputerName,
+ MsvAvDnsDomainName
+} MSV1_0_AVID;
+typedef 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_0_PROTOCOL_MESSAGE_TYPE, *PMSV1_0_PROTOCOL_MESSAGE_TYPE;
+typedef enum _POLICY_LSA_SERVER_ROLE {
+ PolicyServerRoleBackup = 2,
+ PolicyServerRolePrimary
+} POLICY_LSA_SERVER_ROLE, *PPOLICY_LSA_SERVER_ROLE;
+typedef enum _POLICY_SERVER_ENABLE_STATE {
+ PolicyServerEnabled = 2,
+ PolicyServerDisabled
+} POLICY_SERVER_ENABLE_STATE, *PPOLICY_SERVER_ENABLE_STATE;
+typedef enum _POLICY_INFORMATION_CLASS {
+ PolicyAuditLogInformation = 1,
+ PolicyAuditEventsInformation,
+ PolicyPrimaryDomainInformation,
+ PolicyPdAccountInformation,
+ PolicyAccountDomainInformation,
+ PolicyLsaServerRoleInformation,
+ PolicyReplicaSourceInformation,
+ PolicyDefaultQuotaInformation,
+ PolicyModificationInformation,
+ PolicyAuditFullSetInformation,
+ PolicyAuditFullQueryInformation,
+ PolicyDnsDomainInformation,
+ PolicyEfsInformation
+} POLICY_INFORMATION_CLASS, *PPOLICY_INFORMATION_CLASS;
+typedef enum _POLICY_AUDIT_EVENT_TYPE {
+ AuditCategorySystem,
+ AuditCategoryLogon,
+ AuditCategoryObjectAccess,
+ AuditCategoryPrivilegeUse,
+ AuditCategoryDetailedTracking,
+ AuditCategoryPolicyChange,
+ AuditCategoryAccountManagement,
+ AuditCategoryDirectoryServiceAccess,
+ AuditCategoryAccountLogon
+} POLICY_AUDIT_EVENT_TYPE, *PPOLICY_AUDIT_EVENT_TYPE;
+typedef enum _POLICY_LOCAL_INFORMATION_CLASS {
+ PolicyLocalAuditEventsInformation = 1,
+ PolicyLocalPdAccountInformation,
+ PolicyLocalAccountDomainInformation,
+ PolicyLocalLsaServerRoleInformation,
+ PolicyLocalReplicaSourceInformation,
+ PolicyLocalModificationInformation,
+ PolicyLocalAuditFullSetInformation,
+ PolicyLocalAuditFullQueryInformation,
+ PolicyLocalDnsDomainInformation,
+ PolicyLocalIPSecReferenceInformation,
+ PolicyLocalMachinePasswordInformation,
+ PolicyLocalQualityOfServiceInformation,
+ PolicyLocalPolicyLocationInformation
+} POLICY_LOCAL_INFORMATION_CLASS, *PPOLICY_LOCAL_INFORMATION_CLASS;
+typedef enum _POLICY_DOMAIN_INFORMATION_CLASS {
+ PolicyDomainIPSecReferenceInformation = 1,
+ PolicyDomainQualityOfServiceInformation,
+ PolicyDomainEfsInformation,
+ PolicyDomainPublicKeyInformation,
+ PolicyDomainPasswordPolicyInformation,
+ PolicyDomainLockoutInformation,
+ PolicyDomainKerberosTicketInformation
+} POLICY_DOMAIN_INFORMATION_CLASS, *PPOLICY_DOMAIN_INFORMATION_CLASS;
+typedef enum _SECURITY_LOGON_TYPE {
+ Interactive = 2,
+ Network,
+ Batch,
+ Service,
+ Proxy,
+ Unlock
+} SECURITY_LOGON_TYPE, *PSECURITY_LOGON_TYPE;
+typedef enum _TRUSTED_INFORMATION_CLASS {
+ TrustedDomainNameInformation = 1,
+ TrustedControllersInformation,
+ TrustedPosixOffsetInformation,
+ TrustedPasswordInformation,
+ TrustedDomainInformationBasic,
+ TrustedDomainInformationEx,
+ TrustedDomainAuthInformation,
+ TrustedDomainFullInformation
+} TRUSTED_INFORMATION_CLASS, *PTRUSTED_INFORMATION_CLASS;
+typedef struct _DOMAIN_PASSWORD_INFORMATION {
+ USHORT MinPasswordLength;
+ USHORT PasswordHistoryLength;
+ ULONG PasswordProperties;
+ LARGE_INTEGER MaxPasswordAge;
+ LARGE_INTEGER MinPasswordAge;
+} DOMAIN_PASSWORD_INFORMATION, *PDOMAIN_PASSWORD_INFORMATION;
+typedef ULONG LSA_ENUMERATION_HANDLE, *PLSA_ENUMERATION_HANDLE;
+typedef struct _LSA_ENUMERATION_INFORMATION {
+ PSID Sid;
+} LSA_ENUMERATION_INFORMATION, *PLSA_ENUMERATION_INFORMATION;
+typedef ULONG LSA_OPERATIONAL_MODE, *PLSA_OPERATIONAL_MODE;
+#if !defined(_NTDEF_H)
+typedef struct _LSA_OBJECT_ATTRIBUTES {
+ ULONG Length;
+ HANDLE RootDirectory;
+ PLSA_UNICODE_STRING ObjectName;
+ ULONG Attributes;
+ PVOID SecurityDescriptor;
+ PVOID SecurityQualityOfService;
+} OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;
+#endif
+typedef OBJECT_ATTRIBUTES LSA_OBJECT_ATTRIBUTES, *PLSA_OBJECT_ATTRIBUTES;
+typedef struct _LSA_TRUST_INFORMATION {
+ LSA_UNICODE_STRING Name;
+ PSID Sid;
+} LSA_TRUST_INFORMATION, *PLSA_TRUST_INFORMATION;
+typedef struct _LSA_REFERENCED_DOMAIN_LIST {
+ ULONG Entries;
+ PLSA_TRUST_INFORMATION Domains;
+} LSA_REFERENCED_DOMAIN_LIST, *PLSA_REFERENCED_DOMAIN_LIST;
+typedef struct _LSA_TRANSLATED_SID {
+ SID_NAME_USE Use;
+ ULONG RelativeId;
+ LONG DomainIndex;
+} LSA_TRANSLATED_SID, *PLSA_TRANSLATED_SID;
+typedef struct _LSA_TRANSLATED_NAME {
+ SID_NAME_USE Use;
+ LSA_UNICODE_STRING Name;
+ LONG DomainIndex;
+} LSA_TRANSLATED_NAME, *PLSA_TRANSLATED_NAME;
+typedef struct _MSV1_0_INTERACTIVE_LOGON {
+ MSV1_0_LOGON_SUBMIT_TYPE MessageType;
+ UNICODE_STRING LogonDomainName;
+ UNICODE_STRING UserName;
+ UNICODE_STRING Password;
+} MSV1_0_INTERACTIVE_LOGON, *PMSV1_0_INTERACTIVE_LOGON;
+typedef struct _MSV1_0_INTERACTIVE_PROFILE {
+ MSV1_0_PROFILE_BUFFER_TYPE MessageType;
+ USHORT LogonCount;
+ USHORT BadPasswordCount;
+ LARGE_INTEGER LogonTime;
+ LARGE_INTEGER LogoffTime;
+ LARGE_INTEGER KickOffTime;
+ LARGE_INTEGER PasswordLastSet;
+ LARGE_INTEGER PasswordCanChange;
+ LARGE_INTEGER PasswordMustChange;
+ UNICODE_STRING LogonScript;
+ UNICODE_STRING HomeDirectory;
+ UNICODE_STRING FullName;
+ UNICODE_STRING ProfilePath;
+ UNICODE_STRING HomeDirectoryDrive;
+ UNICODE_STRING LogonServer;
+ ULONG UserFlags;
+} MSV1_0_INTERACTIVE_PROFILE, *PMSV1_0_INTERACTIVE_PROFILE;
+typedef struct _MSV1_0_LM20_LOGON {
+ MSV1_0_LOGON_SUBMIT_TYPE MessageType;
+ UNICODE_STRING LogonDomainName;
+ UNICODE_STRING UserName;
+ UNICODE_STRING Workstation;
+ UCHAR ChallengeToClient[MSV1_0_CHALLENGE_LENGTH];
+ STRING CaseSensitiveChallengeResponse;
+ STRING CaseInsensitiveChallengeResponse;
+ ULONG ParameterControl;
+} MSV1_0_LM20_LOGON, * PMSV1_0_LM20_LOGON;
+typedef struct _MSV1_0_SUBAUTH_LOGON{ /* W2K only */
+ MSV1_0_LOGON_SUBMIT_TYPE MessageType;
+ UNICODE_STRING LogonDomainName;
+ UNICODE_STRING UserName;
+ UNICODE_STRING Workstation;
+ UCHAR ChallengeToClient[MSV1_0_CHALLENGE_LENGTH];
+ STRING AuthenticationInfo1;
+ STRING AuthenticationInfo2;
+ ULONG ParameterControl;
+ ULONG SubAuthPackageId;
+} MSV1_0_SUBAUTH_LOGON, * PMSV1_0_SUBAUTH_LOGON;
+typedef struct _MSV1_0_LM20_LOGON_PROFILE {
+ MSV1_0_PROFILE_BUFFER_TYPE MessageType;
+ LARGE_INTEGER KickOffTime;
+ LARGE_INTEGER LogoffTime;
+ ULONG UserFlags;
+ UCHAR UserSessionKey[MSV1_0_USER_SESSION_KEY_LENGTH];
+ UNICODE_STRING LogonDomainName;
+ UCHAR LanmanSessionKey[MSV1_0_LANMAN_SESSION_KEY_LENGTH];
+ UNICODE_STRING LogonServer;
+ UNICODE_STRING UserParameters;
+} MSV1_0_LM20_LOGON_PROFILE, * PMSV1_0_LM20_LOGON_PROFILE;
+typedef struct _MSV1_0_SUPPLEMENTAL_CREDENTIAL {
+ ULONG Version;
+ ULONG Flags;
+ UCHAR LmPassword[MSV1_0_OWF_PASSWORD_LENGTH];
+ UCHAR NtPassword[MSV1_0_OWF_PASSWORD_LENGTH];
+} MSV1_0_SUPPLEMENTAL_CREDENTIAL, *PMSV1_0_SUPPLEMENTAL_CREDENTIAL;
+typedef struct _MSV1_0_NTLM3_RESPONSE {
+ UCHAR Response[MSV1_0_NTLM3_RESPONSE_LENGTH];
+ UCHAR RespType;
+ UCHAR HiRespType;
+ USHORT Flags;
+ ULONG MsgWord;
+ ULONGLONG TimeStamp;
+ UCHAR ChallengeFromClient[MSV1_0_CHALLENGE_LENGTH];
+ ULONG AvPairsOff;
+ UCHAR Buffer[1];
+} MSV1_0_NTLM3_RESPONSE, *PMSV1_0_NTLM3_RESPONSE;
+typedef struct _MSV1_0_AV_PAIR {
+ USHORT AvId;
+ USHORT AvLen;
+} MSV1_0_AV_PAIR, *PMSV1_0_AV_PAIR;
+typedef struct _MSV1_0_CHANGEPASSWORD_REQUEST {
+ MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
+ UNICODE_STRING DomainName;
+ UNICODE_STRING AccountName;
+ UNICODE_STRING OldPassword;
+ UNICODE_STRING NewPassword;
+ BOOLEAN Impersonating;
+} MSV1_0_CHANGEPASSWORD_REQUEST, *PMSV1_0_CHANGEPASSWORD_REQUEST;
+typedef struct _MSV1_0_CHANGEPASSWORD_RESPONSE {
+ MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
+ BOOLEAN PasswordInfoValid;
+ DOMAIN_PASSWORD_INFORMATION DomainPasswordInfo;
+} MSV1_0_CHANGEPASSWORD_RESPONSE, *PMSV1_0_CHANGEPASSWORD_RESPONSE;
+typedef struct _MSV1_0_SUBAUTH_REQUEST{
+ MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
+ ULONG SubAuthPackageId;
+ ULONG SubAuthInfoLength;
+ PUCHAR SubAuthSubmitBuffer;
+} MSV1_0_SUBAUTH_REQUEST, *PMSV1_0_SUBAUTH_REQUEST;
+typedef struct _MSV1_0_SUBAUTH_RESPONSE{
+ MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
+ ULONG SubAuthInfoLength;
+ PUCHAR SubAuthReturnBuffer;
+} MSV1_0_SUBAUTH_RESPONSE, *PMSV1_0_SUBAUTH_RESPONSE;
+#define MSV1_0_DERIVECRED_TYPE_SHA1 0
+typedef struct _MSV1_0_DERIVECRED_REQUEST {
+ MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
+ LUID LogonId;
+ ULONG DeriveCredType;
+ ULONG DeriveCredInfoLength;
+ UCHAR DeriveCredSubmitBuffer[1];
+} MSV1_0_DERIVECRED_REQUEST, *PMSV1_0_DERIVECRED_REQUEST;
+typedef struct _MSV1_0_DERIVECRED_RESPONSE {
+ MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
+ ULONG DeriveCredInfoLength;
+ UCHAR DeriveCredReturnBuffer[1];
+} MSV1_0_DERIVECRED_RESPONSE, *PMSV1_0_DERIVECRED_RESPONSE;
+typedef ULONG POLICY_AUDIT_EVENT_OPTIONS, *PPOLICY_AUDIT_EVENT_OPTIONS;
+typedef struct _POLICY_PRIVILEGE_DEFINITION {
+ LSA_UNICODE_STRING Name;
+ LUID LocalValue;
+} POLICY_PRIVILEGE_DEFINITION, *PPOLICY_PRIVILEGE_DEFINITION;
+typedef struct _POLICY_AUDIT_LOG_INFO {
+ ULONG AuditLogPercentFull;
+ ULONG MaximumLogSize;
+ LARGE_INTEGER AuditRetentionPeriod;
+ BOOLEAN AuditLogFullShutdownInProgress;
+ LARGE_INTEGER TimeToShutdown;
+ ULONG NextAuditRecordId;
+} POLICY_AUDIT_LOG_INFO, *PPOLICY_AUDIT_LOG_INFO;
+typedef struct _POLICY_AUDIT_EVENTS_INFO {
+ BOOLEAN AuditingMode;
+ PPOLICY_AUDIT_EVENT_OPTIONS EventAuditingOptions;
+ ULONG MaximumAuditEventCount;
+} POLICY_AUDIT_EVENTS_INFO, *PPOLICY_AUDIT_EVENTS_INFO;
+typedef struct _POLICY_ACCOUNT_DOMAIN_INFO {
+ LSA_UNICODE_STRING DomainName;
+ PSID DomainSid;
+} POLICY_ACCOUNT_DOMAIN_INFO, *PPOLICY_ACCOUNT_DOMAIN_INFO;
+typedef struct _POLICY_PRIMARY_DOMAIN_INFO {
+ LSA_UNICODE_STRING Name;
+ PSID Sid;
+} POLICY_PRIMARY_DOMAIN_INFO, *PPOLICY_PRIMARY_DOMAIN_INFO;
+typedef struct _POLICY_DNS_DOMAIN_INFO {
+ LSA_UNICODE_STRING Name;
+ LSA_UNICODE_STRING DnsDomainName;
+ LSA_UNICODE_STRING DnsForestName;
+ GUID DomainGuid;
+ PSID Sid;
+} POLICY_DNS_DOMAIN_INFO, *PPOLICY_DNS_DOMAIN_INFO;
+typedef struct _POLICY_PD_ACCOUNT_INFO {
+ LSA_UNICODE_STRING Name;
+} POLICY_PD_ACCOUNT_INFO, *PPOLICY_PD_ACCOUNT_INFO;
+typedef struct _POLICY_LSA_SERVER_ROLE_INFO {
+ POLICY_LSA_SERVER_ROLE LsaServerRole;
+} POLICY_LSA_SERVER_ROLE_INFO, *PPOLICY_LSA_SERVER_ROLE_INFO;
+typedef struct _POLICY_REPLICA_SOURCE_INFO {
+ LSA_UNICODE_STRING ReplicaSource;
+ LSA_UNICODE_STRING ReplicaAccountName;
+} POLICY_REPLICA_SOURCE_INFO, *PPOLICY_REPLICA_SOURCE_INFO;
+typedef struct _POLICY_DEFAULT_QUOTA_INFO {
+ QUOTA_LIMITS QuotaLimits;
+} POLICY_DEFAULT_QUOTA_INFO, *PPOLICY_DEFAULT_QUOTA_INFO;
+typedef struct _POLICY_MODIFICATION_INFO {
+ LARGE_INTEGER ModifiedId;
+ LARGE_INTEGER DatabaseCreationTime;
+} POLICY_MODIFICATION_INFO, *PPOLICY_MODIFICATION_INFO;
+typedef struct _POLICY_AUDIT_FULL_SET_INFO {
+ BOOLEAN ShutDownOnFull;
+} POLICY_AUDIT_FULL_SET_INFO, *PPOLICY_AUDIT_FULL_SET_INFO;
+typedef struct _POLICY_AUDIT_FULL_QUERY_INFO {
+ BOOLEAN ShutDownOnFull;
+ BOOLEAN LogIsFull;
+} POLICY_AUDIT_FULL_QUERY_INFO, *PPOLICY_AUDIT_FULL_QUERY_INFO;
+typedef struct _POLICY_EFS_INFO {
+ ULONG InfoLength;
+ PUCHAR EfsBlob;
+} POLICY_EFS_INFO, *PPOLICY_EFS_INFO;
+typedef struct _POLICY_LOCAL_IPSEC_REFERENCE_INFO {
+ LSA_UNICODE_STRING ObjectPath;
+} POLICY_LOCAL_IPSEC_REFERENCE_INFO, *PPOLICY_LOCAL_IPSEC_REFERENCE_INFO;
+typedef struct _POLICY_LOCAL_MACHINE_PASSWORD_INFO {
+ LARGE_INTEGER PasswordChangeInterval;
+} POLICY_LOCAL_MACHINE_PASSWORD_INFO, *PPOLICY_LOCAL_MACHINE_PASSWORD_INFO;
+typedef struct _POLICY_LOCAL_POLICY_LOCATION_INFO {
+ ULONG PolicyLocation;
+} POLICY_LOCAL_POLICY_LOCATION_INFO, *PPOLICY_LOCAL_POLICY_LOCATION_INFO;
+typedef struct _POLICY_LOCAL_QUALITY_OF_SERVICE_INFO {
+ ULONG QualityOfService;
+} POLICY_LOCAL_QUALITY_OF_SERVICE_INFO, *PPOLICY_LOCAL_QUALITY_OF_SERVICE_INFO;
+typedef struct _POLICY_LOCAL_QUALITY_OF_SERVICE_INFO POLICY_DOMAIN_QUALITY_OF_SERVICE_INFO;
+typedef struct _POLICY_LOCAL_QUALITY_OF_SERVICE_INFO *PPOLICY_DOMAIN_QUALITY_OF_SERVICE_INFO;
+typedef struct _POLICY_DOMAIN_PUBLIC_KEY_INFO {
+ ULONG InfoLength;
+ PUCHAR PublicKeyInfo;
+} POLICY_DOMAIN_PUBLIC_KEY_INFO, *PPOLICY_DOMAIN_PUBLIC_KEY_INFO;
+typedef struct _POLICY_DOMAIN_LOCKOUT_INFO {
+ LARGE_INTEGER LockoutDuration;
+ LARGE_INTEGER LockoutObservationWindow;
+ USHORT LockoutThreshold;
+} POLICY_DOMAIN_LOCKOUT_INFO, *PPOLICY_DOMAIN_LOCKOUT_INFO;
+typedef struct _POLICY_DOMAIN_PASSWORD_INFO {
+ USHORT MinPasswordLength;
+ USHORT PasswordHistoryLength;
+ ULONG PasswordProperties;
+ LARGE_INTEGER MaxPasswordAge;
+ LARGE_INTEGER MinPasswordAge;
+} POLICY_DOMAIN_PASSWORD_INFO, *PPOLICY_DOMAIN_PASSWORD_INFO;
+typedef struct _POLICY_DOMAIN_KERBEROS_TICKET_INFO {
+ ULONG AuthenticationOptions;
+ LARGE_INTEGER MinTicketAge;
+ LARGE_INTEGER MaxTicketAge;
+ LARGE_INTEGER MaxRenewAge;
+ LARGE_INTEGER ProxyLifetime;
+ LARGE_INTEGER ForceLogoff;
+} POLICY_DOMAIN_KERBEROS_TICKET_INFO, *PPOLICY_DOMAIN_KERBEROS_TICKET_INFO;
+typedef PVOID LSA_HANDLE, *PLSA_HANDLE;
+typedef struct _TRUSTED_DOMAIN_NAME_INFO {
+ LSA_UNICODE_STRING Name;
+} TRUSTED_DOMAIN_NAME_INFO, *PTRUSTED_DOMAIN_NAME_INFO;
+typedef struct _TRUSTED_CONTROLLERS_INFO {
+ ULONG Entries;
+ PLSA_UNICODE_STRING Names;
+} TRUSTED_CONTROLLERS_INFO, *PTRUSTED_CONTROLLERS_INFO;
+typedef struct _TRUSTED_POSIX_OFFSET_INFO {
+ ULONG Offset;
+} TRUSTED_POSIX_OFFSET_INFO, *PTRUSTED_POSIX_OFFSET_INFO;
+typedef struct _TRUSTED_PASSWORD_INFO {
+ LSA_UNICODE_STRING Password;
+ LSA_UNICODE_STRING OldPassword;
+} TRUSTED_PASSWORD_INFO, *PTRUSTED_PASSWORD_INFO;
+typedef LSA_TRUST_INFORMATION TRUSTED_DOMAIN_INFORMATION_BASIC;
+typedef PLSA_TRUST_INFORMATION *PTRUSTED_DOMAIN_INFORMATION_BASIC;
+typedef struct _TRUSTED_DOMAIN_INFORMATION_EX {
+ LSA_UNICODE_STRING Name;
+ LSA_UNICODE_STRING FlatName;
+ PSID Sid;
+ ULONG TrustDirection;
+ ULONG TrustType;
+ ULONG TrustAttributes;
+} TRUSTED_DOMAIN_INFORMATION_EX, *PTRUSTED_DOMAIN_INFORMATION_EX;
+typedef struct _LSA_AUTH_INFORMATION {
+ LARGE_INTEGER LastUpdateTime;
+ ULONG AuthType;
+ ULONG AuthInfoLength;
+ PUCHAR AuthInfo;
+} LSA_AUTH_INFORMATION, *PLSA_AUTH_INFORMATION;
+typedef struct _TRUSTED_DOMAIN_AUTH_INFORMATION {
+ ULONG IncomingAuthInfos;
+ PLSA_AUTH_INFORMATION IncomingAuthenticationInformation;
+ PLSA_AUTH_INFORMATION IncomingPreviousAuthenticationInformation;
+ ULONG OutgoingAuthInfos;
+ PLSA_AUTH_INFORMATION OutgoingAuthenticationInformation;
+ PLSA_AUTH_INFORMATION OutgoingPreviousAuthenticationInformation;
+} TRUSTED_DOMAIN_AUTH_INFORMATION, *PTRUSTED_DOMAIN_AUTH_INFORMATION;
+typedef struct _TRUSTED_DOMAIN_FULL_INFORMATION {
+ TRUSTED_DOMAIN_INFORMATION_EX Information;
+ TRUSTED_POSIX_OFFSET_INFO PosixOffset;
+ TRUSTED_DOMAIN_AUTH_INFORMATION AuthInformation;
+} TRUSTED_DOMAIN_FULL_INFORMATION, *PTRUSTED_DOMAIN_FULL_INFORMATION;
+NTSTATUS NTAPI LsaAddAccountRights(LSA_HANDLE,PSID,PLSA_UNICODE_STRING,ULONG);
+NTSTATUS NTAPI LsaCallAuthenticationPackage(HANDLE,ULONG,PVOID,ULONG,PVOID*,
+ PULONG,PNTSTATUS);
+NTSTATUS NTAPI LsaClose(LSA_HANDLE);
+NTSTATUS NTAPI LsaConnectUntrusted(PHANDLE);
+NTSTATUS NTAPI LsaCreateTrustedDomainEx(LSA_HANDLE,
+ PTRUSTED_DOMAIN_INFORMATION_EX,
+ PTRUSTED_DOMAIN_AUTH_INFORMATION,ACCESS_MASK,
+ PLSA_HANDLE);
+NTSTATUS NTAPI LsaDeleteTrustedDomain(LSA_HANDLE,PSID);
+NTSTATUS NTAPI LsaDeregisterLogonProcess(HANDLE);
+NTSTATUS NTAPI LsaEnumerateAccountRights(LSA_HANDLE,PSID,PLSA_UNICODE_STRING*,PULONG);
+NTSTATUS NTAPI LsaEnumerateAccountsWithUserRight(LSA_HANDLE,PLSA_UNICODE_STRING,
+ PVOID*,PULONG);
+NTSTATUS NTAPI LsaEnumerateTrustedDomains(LSA_HANDLE,PLSA_ENUMERATION_HANDLE,
+ PVOID*,ULONG,PULONG);
+NTSTATUS NTAPI LsaEnumerateTrustedDomainsEx(LSA_HANDLE,PLSA_ENUMERATION_HANDLE,
+ TRUSTED_INFORMATION_CLASS,PVOID*,ULONG,PULONG);
+NTSTATUS NTAPI LsaFreeMemory(PVOID);
+NTSTATUS NTAPI LsaFreeReturnBuffer(PVOID);
+NTSTATUS NTAPI LsaLogonUser(HANDLE,PLSA_STRING,SECURITY_LOGON_TYPE,ULONG,PVOID,
+ ULONG,PTOKEN_GROUPS,PTOKEN_SOURCE,PVOID*,PULONG,
+ PLUID,PHANDLE,PQUOTA_LIMITS,PNTSTATUS);
+NTSTATUS NTAPI LsaLookupAuthenticationPackage(HANDLE,PLSA_STRING,PULONG);
+NTSTATUS NTAPI LsaLookupNames(LSA_HANDLE,ULONG,PLSA_UNICODE_STRING,
+ PLSA_REFERENCED_DOMAIN_LIST*,PLSA_TRANSLATED_SID*);
+NTSTATUS NTAPI LsaLookupSids(LSA_HANDLE,ULONG,PSID*,
+ PLSA_REFERENCED_DOMAIN_LIST*,PLSA_TRANSLATED_NAME*);
+ULONG NTAPI LsaNtStatusToWinError(NTSTATUS);
+NTSTATUS NTAPI LsaOpenPolicy(PLSA_UNICODE_STRING,PLSA_OBJECT_ATTRIBUTES,
+ ACCESS_MASK,PLSA_HANDLE);
+NTSTATUS NTAPI LsaQueryDomainInformationPolicy(LSA_HANDLE,
+ POLICY_DOMAIN_INFORMATION_CLASS,PVOID*);
+NTSTATUS NTAPI LsaQueryInformationPolicy(LSA_HANDLE,POLICY_INFORMATION_CLASS,PVOID*);
+NTSTATUS NTAPI LsaQueryLocalInformationPolicy(LSA_HANDLE,
+ POLICY_LOCAL_INFORMATION_CLASS,PVOID*);
+NTSTATUS NTAPI LsaQueryTrustedDomainInfo(LSA_HANDLE,PSID,
+ TRUSTED_INFORMATION_CLASS,PVOID*);
+NTSTATUS NTAPI LsaQueryTrustedDomainInfoByName(LSA_HANDLE,PLSA_UNICODE_STRING,
+ TRUSTED_INFORMATION_CLASS,PVOID*);
+NTSTATUS NTAPI LsaRegisterLogonProcess(PLSA_STRING,PHANDLE,PLSA_OPERATIONAL_MODE);
+NTSTATUS NTAPI LsaRemoveAccountRights(LSA_HANDLE,PSID,BOOLEAN,
+ PLSA_UNICODE_STRING,ULONG);
+NTSTATUS NTAPI LsaRetrievePrivateData(LSA_HANDLE,PLSA_UNICODE_STRING,
+ PLSA_UNICODE_STRING*);
+NTSTATUS NTAPI LsaSetDomainInformationPolicy(LSA_HANDLE,
+ POLICY_DOMAIN_INFORMATION_CLASS,PVOID);
+NTSTATUS NTAPI LsaSetInformationPolicy(LSA_HANDLE,POLICY_INFORMATION_CLASS, PVOID);
+NTSTATUS NTAPI LsaSetLocalInformationPolicy(LSA_HANDLE,
+ POLICY_LOCAL_INFORMATION_CLASS,PVOID);
+NTSTATUS NTAPI LsaSetTrustedDomainInformation(LSA_HANDLE,PSID,
+ TRUSTED_INFORMATION_CLASS,PVOID);
+NTSTATUS NTAPI LsaSetTrustedDomainInfoByName(LSA_HANDLE,PLSA_UNICODE_STRING,
+ TRUSTED_INFORMATION_CLASS,PVOID);
+NTSTATUS NTAPI LsaStorePrivateData(LSA_HANDLE,PLSA_UNICODE_STRING,
+ PLSA_UNICODE_STRING);
+typedef NTSTATUS (*PSAM_PASSWORD_NOTIFICATION_ROUTINE)(PUNICODE_STRING,
+ ULONG,PUNICODE_STRING);
+typedef BOOLEAN (*PSAM_INIT_NOTIFICATION_ROUTINE)(void);
+typedef BOOLEAN (*PSAM_PASSWORD_FILTER_ROUTINE)(PUNICODE_STRING,PUNICODE_STRING,
+ PUNICODE_STRING,BOOLEAN);
+#ifdef __cplusplus
+}
+#endif
+#endif /* _NTSECAPI_H */
diff --git a/tcc/include/winapi/ntsecpkg.h b/tcc/include/winapi/ntsecpkg.h
new file mode 100644
index 0000000..6aff8e5
--- /dev/null
+++ b/tcc/include/winapi/ntsecpkg.h
@@ -0,0 +1,431 @@
+#ifndef _NTSECPKG_H
+#define _NTSECPKG_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#include "windef.h"
+#include "ntsecapi.h"
+#include "security.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define ISC_REQ_DELEGATE 1
+#define ISC_REQ_MUTUAL_AUTH 2
+#define ISC_REQ_REPLAY_DETECT 4
+#define ISC_REQ_SEQUENCE_DETECT 8
+#define ISC_REQ_CONFIDENTIALITY 16
+#define ISC_REQ_USE_SESSION_KEY 32
+#define ISC_REQ_PROMPT_FOR_CREDS 64
+#define ISC_REQ_USE_SUPPLIED_CREDS 128
+#define ISC_REQ_ALLOCATE_MEMORY 256
+#define ISC_REQ_USE_DCE_STYLE 512
+#define ISC_REQ_DATAGRAM 1024
+#define ISC_REQ_CONNECTION 2048
+#define ISC_REQ_EXTENDED_ERROR 16384
+#define ISC_REQ_STREAM 32768
+#define ISC_REQ_INTEGRITY 65536
+#define ISC_REQ_MANUAL_CRED_VALIDATION 524288
+#define ISC_REQ_HTTP 268435456
+
+#define ISC_RET_EXTENDED_ERROR 16384
+
+#define ASC_REQ_DELEGATE 1
+#define ASC_REQ_MUTUAL_AUTH 2
+#define ASC_REQ_REPLAY_DETECT 4
+#define ASC_REQ_SEQUENCE_DETECT 8
+#define ASC_REQ_CONFIDENTIALITY 16
+#define ASC_REQ_USE_SESSION_KEY 32
+#define ASC_REQ_ALLOCATE_MEMORY 256
+#define ASC_REQ_USE_DCE_STYLE 512
+#define ASC_REQ_DATAGRAM 1024
+#define ASC_REQ_CONNECTION 2048
+#define ASC_REQ_EXTENDED_ERROR 32768
+#define ASC_REQ_STREAM 65536
+#define ASC_REQ_INTEGRITY 131072
+
+#define SECURITY_NATIVE_DREP 16
+#define SECURITY_NETWORK_DREP 0
+
+#define SECPKG_STATE_ENCRYPTION_PERMITTED 0x01
+#define SECPKG_STATE_STRONG_ENCRYPTION_PERMITTED 0x02
+#define SECPKG_STATE_DOMAIN_CONTROLLER 0x04
+#define SECPKG_STATE_WORKSTATION 0x08
+#define SECPKG_STATE_STANDALONE 0x10
+
+/* enum definitions for Secure Service Provider/Authentication Packages */
+typedef enum _LSA_TOKEN_INFORMATION_TYPE {
+ LsaTokenInformationNull,
+ LsaTokenInformationV1
+} LSA_TOKEN_INFORMATION_TYPE, *PLSA_TOKEN_INFORMATION_TYPE;
+typedef enum _SECPKG_EXTENDED_INFORMATION_CLASS
+{
+ SecpkgGssInfo = 1,
+ SecpkgContextThunks,
+ SecpkgMutualAuthLevel,
+ SecpkgMaxInfo
+} SECPKG_EXTENDED_INFORMATION_CLASS;
+typedef enum _SECPKG_NAME_TYPE {
+ SecNameSamCompatible,
+ SecNameAlternateId,
+ SecNameFlat,
+ SecNameDN
+} SECPKG_NAME_TYPE;
+
+/* struct definitions for SSP/AP */
+typedef struct _SECPKG_PRIMARY_CRED {
+ LUID LogonId;
+ UNICODE_STRING DownlevelName;
+ UNICODE_STRING DomainName;
+ UNICODE_STRING Password;
+ UNICODE_STRING OldPassword;
+ PSID UserSid;
+ ULONG Flags;
+ UNICODE_STRING DnsDomainName;
+ UNICODE_STRING Upn;
+ UNICODE_STRING LogonServer;
+ UNICODE_STRING Spare1;
+ UNICODE_STRING Spare2;
+ UNICODE_STRING Spare3;
+ UNICODE_STRING Spare4;
+} SECPKG_PRIMARY_CRED, *PSECPKG_PRIMARY_CRED;
+typedef struct _SECPKG_SUPPLEMENTAL_CRED {
+ UNICODE_STRING PackageName;
+ ULONG CredentialSize;
+ PUCHAR Credentials;
+} SECPKG_SUPPLEMENTAL_CRED, *PSECPKG_SUPPLEMENTAL_CRED;
+typedef struct _SECPKG_SUPPLEMENTAL_CRED_ARRAY {
+ ULONG CredentialCount;
+ SECPKG_SUPPLEMENTAL_CRED Credentials[1];
+} SECPKG_SUPPLEMENTAL_CRED_ARRAY, *PSECPKG_SUPPLEMENTAL_CRED_ARRAY;
+typedef struct _SECPKG_PARAMETERS {
+ ULONG Version;
+ ULONG MachineState;
+ ULONG SetupMode;
+ PSID DomainSid;
+ UNICODE_STRING DomainName;
+ UNICODE_STRING DnsDomainName;
+ GUID DomainGuid;
+} SECPKG_PARAMETERS, *PSECPKG_PARAMETERS,
+ SECPKG_EVENT_DOMAIN_CHANGE, *PSECPKG_EVENT_DOMAIN_CHANGE;
+typedef struct _SECPKG_CLIENT_INFO {
+ LUID LogonId;
+ ULONG ProcessID;
+ ULONG ThreadID;
+ BOOLEAN HasTcbPrivilege;
+ BOOLEAN Impersonating;
+ BOOLEAN Restricted;
+} SECPKG_CLIENT_INFO,
+ *PSECPKG_CLIENT_INFO;
+typedef struct _SECURITY_USER_DATA {
+ SECURITY_STRING UserName;
+ SECURITY_STRING LogonDomainName;
+ SECURITY_STRING LogonServer;
+ PSID pSid;
+} SECURITY_USER_DATA, *PSECURITY_USER_DATA,
+ SecurityUserData, *PSecurityUserData;
+typedef struct _SECPKG_GSS_INFO {
+ ULONG EncodedIdLength;
+ UCHAR EncodedId[4];
+} SECPKG_GSS_INFO, *PSECPKG_GSS_INFO;
+typedef struct _SECPKG_CONTEXT_THUNKS {
+ ULONG InfoLevelCount;
+ ULONG Levels[1];
+} SECPKG_CONTEXT_THUNKS, *PSECPKG_CONTEXT_THUNKS;
+typedef struct _SECPKG_MUTUAL_AUTH_LEVEL {
+ ULONG MutualAuthLevel;
+} SECPKG_MUTUAL_AUTH_LEVEL, *PSECPKG_MUTUAL_AUTH_LEVEL;
+typedef struct _SECPKG_CALL_INFO {
+ ULONG ProcessId;
+ ULONG ThreadId;
+ ULONG Attributes;
+ ULONG CallCount;
+} SECPKG_CALL_INFO, *PSECPKG_CALL_INFO;
+typedef struct _SECPKG_EXTENDED_INFORMATION {
+ SECPKG_EXTENDED_INFORMATION_CLASS Class;
+ union {
+ SECPKG_GSS_INFO GssInfo;
+ SECPKG_CONTEXT_THUNKS ContextThunks;
+ SECPKG_MUTUAL_AUTH_LEVEL MutualAuthLevel;
+ } Info;
+} SECPKG_EXTENDED_INFORMATION, *PSECPKG_EXTENDED_INFORMATION;
+
+/* callbacks implemented by SSP/AP dlls and called by the LSA */
+typedef VOID (NTAPI *PLSA_CALLBACK_FUNCTION)(ULONG_PTR, ULONG_PTR, PSecBuffer,
+ PSecBuffer);
+
+/* misc typedefs used in the below prototypes */
+typedef PVOID *PLSA_CLIENT_REQUEST;
+typedef ULONG LSA_SEC_HANDLE, *PLSA_SEC_HANDLE;
+typedef LPTHREAD_START_ROUTINE SEC_THREAD_START;
+typedef PSECURITY_ATTRIBUTES SEC_ATTRS;
+
+/* functions used by SSP/AP obtainable by dispatch tables */
+typedef NTSTATUS (NTAPI *PLSA_REGISTER_CALLBACK)(ULONG, PLSA_CALLBACK_FUNCTION);
+typedef NTSTATUS (NTAPI *PLSA_CREATE_LOGON_SESSION)(PLUID);
+typedef NTSTATUS (NTAPI *PLSA_DELETE_LOGON_SESSION)(PLUID);
+typedef NTSTATUS (NTAPI *PLSA_ADD_CREDENTIAL)(PLUID, ULONG, PLSA_STRING,
+ PLSA_STRING);
+typedef NTSTATUS (NTAPI *PLSA_GET_CREDENTIALS)(PLUID, ULONG, PULONG, BOOLEAN,
+ PLSA_STRING, PULONG, PLSA_STRING);
+typedef NTSTATUS (NTAPI *PLSA_DELETE_CREDENTIAL)(PLUID, ULONG, PLSA_STRING);
+typedef PVOID (NTAPI *PLSA_ALLOCATE_LSA_HEAP)(ULONG);
+typedef VOID (NTAPI *PLSA_FREE_LSA_HEAP)(PVOID);
+typedef NTSTATUS (NTAPI *PLSA_ALLOCATE_CLIENT_BUFFER)(PLSA_CLIENT_REQUEST,
+ ULONG, PVOID*);
+typedef NTSTATUS (NTAPI *PLSA_FREE_CLIENT_BUFFER)(PLSA_CLIENT_REQUEST, PVOID);
+typedef NTSTATUS (NTAPI *PLSA_COPY_TO_CLIENT_BUFFER)(PLSA_CLIENT_REQUEST, ULONG,
+ PVOID, PVOID);
+typedef NTSTATUS (NTAPI *PLSA_COPY_FROM_CLIENT_BUFFER)(PLSA_CLIENT_REQUEST,
+ ULONG, PVOID, PVOID);
+typedef NTSTATUS (NTAPI *PLSA_IMPERSONATE_CLIENT)(void);
+typedef NTSTATUS (NTAPI *PLSA_UNLOAD_PACKAGE)(void);
+typedef NTSTATUS (NTAPI *PLSA_DUPLICATE_HANDLE)(HANDLE, PHANDLE);
+typedef NTSTATUS (NTAPI *PLSA_SAVE_SUPPLEMENTAL_CREDENTIALS)(PLUID, ULONG,
+ PVOID, BOOLEAN);
+typedef HANDLE (NTAPI *PLSA_CREATE_THREAD)(SEC_ATTRS, ULONG, SEC_THREAD_START,
+ PVOID, ULONG, PULONG);
+typedef NTSTATUS (NTAPI *PLSA_GET_CLIENT_INFO)(PSECPKG_CLIENT_INFO);
+typedef HANDLE (NTAPI *PLSA_REGISTER_NOTIFICATION)(SEC_THREAD_START, PVOID,
+ ULONG, ULONG, ULONG, ULONG, HANDLE);
+typedef NTSTATUS (NTAPI *PLSA_CANCEL_NOTIFICATION)(HANDLE);
+typedef NTSTATUS (NTAPI *PLSA_MAP_BUFFER)(PSecBuffer, PSecBuffer);
+typedef NTSTATUS (NTAPI *PLSA_CREATE_TOKEN)(PLUID, PTOKEN_SOURCE,
+ SECURITY_LOGON_TYPE, SECURITY_IMPERSONATION_LEVEL, LSA_TOKEN_INFORMATION_TYPE,
+ PVOID, PTOKEN_GROUPS, PUNICODE_STRING, PUNICODE_STRING, PUNICODE_STRING,
+ PUNICODE_STRING, PHANDLE, PNTSTATUS);
+typedef VOID (NTAPI *PLSA_AUDIT_LOGON)(NTSTATUS, NTSTATUS, PUNICODE_STRING,
+ PUNICODE_STRING, PUNICODE_STRING, OPTIONAL PSID, SECURITY_LOGON_TYPE,
+ PTOKEN_SOURCE, PLUID);
+typedef NTSTATUS (NTAPI *PLSA_CALL_PACKAGE)(PUNICODE_STRING, PVOID, ULONG,
+ PVOID*, PULONG, PNTSTATUS);
+typedef VOID (NTAPI *PLSA_FREE_LSA_HEAP)(PVOID);
+typedef BOOLEAN (NTAPI *PLSA_GET_CALL_INFO)(PSECPKG_CALL_INFO);
+typedef NTSTATUS (NTAPI *PLSA_CALL_PACKAGEEX)(PUNICODE_STRING, PVOID, PVOID,
+ ULONG, PVOID*, PULONG, PNTSTATUS);
+typedef PVOID (NTAPI *PLSA_CREATE_SHARED_MEMORY)(ULONG, ULONG);
+typedef PVOID (NTAPI *PLSA_ALLOCATE_SHARED_MEMORY)(PVOID, ULONG);
+typedef VOID (NTAPI *PLSA_FREE_SHARED_MEMORY)(PVOID, PVOID);
+typedef BOOLEAN (NTAPI *PLSA_DELETE_SHARED_MEMORY)(PVOID);
+typedef NTSTATUS (NTAPI *PLSA_OPEN_SAM_USER)(PSECURITY_STRING, SECPKG_NAME_TYPE,
+ PSECURITY_STRING, BOOLEAN, ULONG, PVOID*);
+typedef NTSTATUS (NTAPI *PLSA_GET_USER_CREDENTIALS)(PVOID, PVOID *, PULONG,
+ PVOID *, PULONG);
+typedef NTSTATUS (NTAPI *PLSA_GET_USER_AUTH_DATA)(PVOID, PUCHAR *, PULONG);
+typedef NTSTATUS (NTAPI *PLSA_CLOSE_SAM_USER)(PVOID);
+typedef NTSTATUS (NTAPI *PLSA_CONVERT_AUTH_DATA_TO_TOKEN)(PVOID, ULONG,
+ SECURITY_IMPERSONATION_LEVEL, PTOKEN_SOURCE, SECURITY_LOGON_TYPE,
+ PUNICODE_STRING, PHANDLE, PLUID, PUNICODE_STRING, PNTSTATUS);
+typedef NTSTATUS (NTAPI *PLSA_CLIENT_CALLBACK)(PCHAR, ULONG_PTR, ULONG_PTR,
+ PSecBuffer, PSecBuffer);
+typedef NTSTATUS (NTAPI *PLSA_UPDATE_PRIMARY_CREDENTIALS)(PSECPKG_PRIMARY_CRED, PSECPKG_SUPPLEMENTAL_CRED_ARRAY);
+typedef NTSTATUS (NTAPI *PLSA_GET_AUTH_DATA_FOR_USER)(PSECURITY_STRING,
+ SECPKG_NAME_TYPE, PSECURITY_STRING, PUCHAR *, PULONG, PUNICODE_STRING);
+typedef NTSTATUS (NTAPI *PLSA_CRACK_SINGLE_NAME)(ULONG, BOOLEAN,
+ PUNICODE_STRING, PUNICODE_STRING, ULONG, PUNICODE_STRING, PUNICODE_STRING,
+ PULONG);
+typedef NTSTATUS (NTAPI *PLSA_AUDIT_ACCOUNT_LOGON)(ULONG, BOOLEAN,
+ PUNICODE_STRING, PUNICODE_STRING, PUNICODE_STRING, NTSTATUS);
+typedef NTSTATUS (NTAPI *PLSA_CALL_PACKAGE_PASSTHROUGH)(PUNICODE_STRING, PVOID,
+ PVOID, ULONG, PVOID*, PULONG, PNTSTATUS);
+
+/* Dispatch tables of functions used by SSP/AP */
+typedef struct SECPKG_DLL_FUNCTIONS {
+ PLSA_ALLOCATE_LSA_HEAP AllocateHeap;
+ PLSA_FREE_LSA_HEAP FreeHeap;
+ PLSA_REGISTER_CALLBACK RegisterCallback;
+} SECPKG_DLL_FUNCTIONS,
+ *PSECPKG_DLL_FUNCTIONS;
+typedef struct LSA_DISPATCH_TABLE {
+ PLSA_CREATE_LOGON_SESSION CreateLogonSession;
+ PLSA_DELETE_LOGON_SESSION DeleteLogonSession;
+ PLSA_ADD_CREDENTIAL AddCredential;
+ PLSA_GET_CREDENTIALS GetCredentials;
+ PLSA_DELETE_CREDENTIAL DeleteCredential;
+ PLSA_ALLOCATE_LSA_HEAP AllocateLsaHeap;
+ PLSA_FREE_LSA_HEAP FreeLsaHeap;
+ PLSA_ALLOCATE_CLIENT_BUFFER AllocateClientBuffer;
+ PLSA_FREE_CLIENT_BUFFER FreeClientBuffer;
+ PLSA_COPY_TO_CLIENT_BUFFER CopyToClientBuffer;
+ PLSA_COPY_FROM_CLIENT_BUFFER CopyFromClientBuffer;
+} LSA_DISPATCH_TABLE,
+ *PLSA_DISPATCH_TABLE;
+typedef struct _LSA_SECPKG_FUNCTION_TABLE {
+ PLSA_CREATE_LOGON_SESSION CreateLogonSession;
+ PLSA_DELETE_LOGON_SESSION DeleteLogonSession;
+ PLSA_ADD_CREDENTIAL AddCredential;
+ PLSA_GET_CREDENTIALS GetCredentials;
+ PLSA_DELETE_CREDENTIAL DeleteCredential;
+ PLSA_ALLOCATE_LSA_HEAP AllocateLsaHeap;
+ PLSA_FREE_LSA_HEAP FreeLsaHeap;
+ PLSA_ALLOCATE_CLIENT_BUFFER AllocateClientBuffer;
+ PLSA_FREE_CLIENT_BUFFER FreeClientBuffer;
+ PLSA_COPY_TO_CLIENT_BUFFER CopyToClientBuffer;
+ PLSA_COPY_FROM_CLIENT_BUFFER CopyFromClientBuffer;
+ PLSA_IMPERSONATE_CLIENT ImpersonateClient;
+ PLSA_UNLOAD_PACKAGE UnloadPackage;
+ PLSA_DUPLICATE_HANDLE DuplicateHandle;
+ PLSA_SAVE_SUPPLEMENTAL_CREDENTIALS SaveSupplementalCredentials;
+ PLSA_CREATE_THREAD CreateThread;
+ PLSA_GET_CLIENT_INFO GetClientInfo;
+ PLSA_REGISTER_NOTIFICATION RegisterNotification;
+ PLSA_CANCEL_NOTIFICATION CancelNotification;
+ PLSA_MAP_BUFFER MapBuffer;
+ PLSA_CREATE_TOKEN CreateToken;
+ PLSA_AUDIT_LOGON AuditLogon;
+ PLSA_CALL_PACKAGE CallPackage;
+ PLSA_FREE_LSA_HEAP FreeReturnBuffer;
+ PLSA_GET_CALL_INFO GetCallInfo;
+ PLSA_CALL_PACKAGEEX CallPackageEx;
+ PLSA_CREATE_SHARED_MEMORY CreateSharedMemory;
+ PLSA_ALLOCATE_SHARED_MEMORY AllocateSharedMemory;
+ PLSA_FREE_SHARED_MEMORY FreeSharedMemory;
+ PLSA_DELETE_SHARED_MEMORY DeleteSharedMemory;
+ PLSA_OPEN_SAM_USER OpenSamUser;
+ PLSA_GET_USER_CREDENTIALS GetUserCredentials;
+ PLSA_GET_USER_AUTH_DATA GetUserAuthData;
+ PLSA_CLOSE_SAM_USER CloseSamUser;
+ PLSA_CONVERT_AUTH_DATA_TO_TOKEN ConvertAuthDataToToken;
+ PLSA_CLIENT_CALLBACK ClientCallback;
+ PLSA_UPDATE_PRIMARY_CREDENTIALS UpdateCredentials;
+ PLSA_GET_AUTH_DATA_FOR_USER GetAuthDataForUser;
+ PLSA_CRACK_SINGLE_NAME CrackSingleName;
+ PLSA_AUDIT_ACCOUNT_LOGON AuditAccountLogon;
+ PLSA_CALL_PACKAGE_PASSTHROUGH CallPackagePassthrough;
+} LSA_SECPKG_FUNCTION_TABLE,
+ *PLSA_SECPKG_FUNCTION_TABLE;
+
+/* functions implemented by SSP/AP obtainable by dispatch tables */
+typedef NTSTATUS (NTAPI *PLSA_AP_INITIALIZE_PACKAGE)(ULONG, PLSA_DISPATCH_TABLE,
+ PLSA_STRING, PLSA_STRING, PLSA_STRING *);
+typedef NTSTATUS (NTAPI *PLSA_AP_LOGON_USER)(LPWSTR, LPWSTR, LPWSTR, LPWSTR,
+ DWORD, DWORD, PHANDLE);
+typedef NTSTATUS (NTAPI *PLSA_AP_CALL_PACKAGE)(PUNICODE_STRING, PVOID, ULONG,
+ PVOID *, PULONG, PNTSTATUS);
+typedef VOID (NTAPI *PLSA_AP_LOGON_TERMINATED)(PLUID);
+typedef NTSTATUS (NTAPI *PLSA_AP_CALL_PACKAGE_UNTRUSTED)(PLSA_CLIENT_REQUEST,
+ PVOID, PVOID, ULONG, PVOID *, PULONG, PNTSTATUS);
+typedef NTSTATUS (NTAPI *PLSA_AP_CALL_PACKAGE_PASSTHROUGH)(PUNICODE_STRING,
+ PVOID, PVOID, ULONG, PVOID *, PULONG, PNTSTATUS);
+typedef NTSTATUS (NTAPI *PLSA_AP_LOGON_USER_EX)(PLSA_CLIENT_REQUEST,
+ SECURITY_LOGON_TYPE, PVOID, PVOID, ULONG, PVOID *, PULONG, PLUID, PNTSTATUS,
+ PLSA_TOKEN_INFORMATION_TYPE, PVOID *, PUNICODE_STRING *, PUNICODE_STRING *,
+ PUNICODE_STRING *);
+typedef NTSTATUS (NTAPI *PLSA_AP_LOGON_USER_EX2)(PLSA_CLIENT_REQUEST,
+ SECURITY_LOGON_TYPE, PVOID, PVOID, ULONG, PVOID *, PULONG, PLUID, PNTSTATUS,
+ PLSA_TOKEN_INFORMATION_TYPE, PVOID *, PUNICODE_STRING *, PUNICODE_STRING *,
+ PUNICODE_STRING *, PSECPKG_PRIMARY_CRED, PSECPKG_SUPPLEMENTAL_CRED_ARRAY *);
+typedef NTSTATUS (SpInitializeFn)(ULONG_PTR, PSECPKG_PARAMETERS,
+ PLSA_SECPKG_FUNCTION_TABLE);
+typedef NTSTATUS (NTAPI SpShutDownFn)(void);
+typedef NTSTATUS (NTAPI SpGetInfoFn)(PSecPkgInfoW);
+typedef NTSTATUS (NTAPI SpAcceptCredentialsFn)(SECURITY_LOGON_TYPE,
+ PUNICODE_STRING, PSECPKG_PRIMARY_CRED, PSECPKG_SUPPLEMENTAL_CRED);
+typedef NTSTATUS (NTAPI SpAcquireCredentialsHandleFn)(PUNICODE_STRING, ULONG,
+ PLUID, PVOID, PVOID, PVOID, PLSA_SEC_HANDLE, PTimeStamp);
+typedef NTSTATUS (NTAPI SpQueryCredentialsAttributesFn)(LSA_SEC_HANDLE, ULONG,
+ PVOID);
+typedef NTSTATUS (NTAPI SpFreeCredentialsHandleFn)(LSA_SEC_HANDLE);
+typedef NTSTATUS (NTAPI SpSaveCredentialsFn)(LSA_SEC_HANDLE, PSecBuffer);
+typedef NTSTATUS (NTAPI SpGetCredentialsFn)(LSA_SEC_HANDLE, PSecBuffer);
+typedef NTSTATUS (NTAPI SpDeleteCredentialsFn)(LSA_SEC_HANDLE, PSecBuffer);
+typedef NTSTATUS (NTAPI SpInitLsaModeContextFn)(LSA_SEC_HANDLE, LSA_SEC_HANDLE,
+ PUNICODE_STRING, ULONG, ULONG, PSecBufferDesc, PLSA_SEC_HANDLE, PSecBufferDesc,
+ PULONG, PTimeStamp, PBOOLEAN, PSecBuffer);
+typedef NTSTATUS (NTAPI SpAcceptLsaModeContextFn)(LSA_SEC_HANDLE,
+ LSA_SEC_HANDLE, PSecBufferDesc, ULONG, ULONG, PLSA_SEC_HANDLE, PSecBufferDesc,
+ PULONG, PTimeStamp, PBOOLEAN, PSecBuffer);
+typedef NTSTATUS (NTAPI SpDeleteContextFn)(LSA_SEC_HANDLE);
+typedef NTSTATUS (NTAPI SpApplyControlTokenFn)(LSA_SEC_HANDLE, PSecBufferDesc);
+typedef NTSTATUS (NTAPI SpGetUserInfoFn)(PLUID, ULONG, PSecurityUserData *);
+typedef NTSTATUS (NTAPI SpGetExtendedInformationFn)(
+ SECPKG_EXTENDED_INFORMATION_CLASS, PSECPKG_EXTENDED_INFORMATION *);
+typedef NTSTATUS (NTAPI SpQueryContextAttributesFn)(LSA_SEC_HANDLE, ULONG,
+ PVOID);
+typedef NTSTATUS (NTAPI SpAddCredentialsFn)(LSA_SEC_HANDLE, PUNICODE_STRING,
+ PUNICODE_STRING, ULONG, PVOID, PVOID, PVOID, PTimeStamp);
+typedef NTSTATUS (NTAPI SpSetExtendedInformationFn)(
+ SECPKG_EXTENDED_INFORMATION_CLASS, PSECPKG_EXTENDED_INFORMATION);
+typedef NTSTATUS (NTAPI SpInstanceInitFn)(ULONG, PSECPKG_DLL_FUNCTIONS,
+ PVOID *);
+typedef NTSTATUS (NTAPI SpInitUserModeContextFn)(LSA_SEC_HANDLE, PSecBuffer);
+typedef NTSTATUS (NTAPI SpMakeSignatureFn)(LSA_SEC_HANDLE, ULONG,
+ PSecBufferDesc, ULONG);
+typedef NTSTATUS (NTAPI SpVerifySignatureFn)(LSA_SEC_HANDLE, PSecBufferDesc,
+ ULONG, PULONG);
+typedef NTSTATUS (NTAPI SpSealMessageFn)(LSA_SEC_HANDLE, ULONG, PSecBufferDesc,
+ ULONG);
+typedef NTSTATUS (NTAPI SpUnsealMessageFn)(LSA_SEC_HANDLE, PSecBufferDesc,
+ ULONG, PULONG);
+typedef NTSTATUS (NTAPI SpGetContextTokenFn)(LSA_SEC_HANDLE, PHANDLE);
+typedef NTSTATUS (NTAPI SpCompleteAuthTokenFn)(LSA_SEC_HANDLE, PSecBufferDesc);
+typedef NTSTATUS (NTAPI SpFormatCredentialsFn)(PSecBuffer, PSecBuffer);
+typedef NTSTATUS (NTAPI SpMarshallSupplementalCredsFn)(ULONG, PUCHAR, PULONG,
+ PVOID *);
+typedef NTSTATUS (NTAPI SpExportSecurityContextFn)(LSA_SEC_HANDLE, ULONG,
+ PSecBuffer, PHANDLE);
+typedef NTSTATUS (NTAPI SpImportSecurityContextFn)(PSecBuffer, HANDLE,
+ PLSA_SEC_HANDLE);
+
+/* Dispatch tables of functions implemented by SSP/AP */
+typedef struct SECPKG_FUNCTION_TABLE {
+ PLSA_AP_INITIALIZE_PACKAGE InitializePackage;
+ PLSA_AP_LOGON_USER LogonUser;
+ PLSA_AP_CALL_PACKAGE CallPackage;
+ PLSA_AP_LOGON_TERMINATED LogonTerminated;
+ PLSA_AP_CALL_PACKAGE_UNTRUSTED CallPackageUntrusted;
+ PLSA_AP_CALL_PACKAGE_PASSTHROUGH CallPackagePassthrough;
+ PLSA_AP_LOGON_USER_EX LogonUserEx;
+ PLSA_AP_LOGON_USER_EX2 LogonUserEx2;
+ SpInitializeFn *Initialize;
+ SpShutDownFn *Shutdown;
+ SpGetInfoFn *GetInfo;
+ SpAcceptCredentialsFn *AcceptCredentials;
+ SpAcquireCredentialsHandleFn *AcquireCredentialsHandle;
+ SpQueryCredentialsAttributesFn *QueryCredentialsAttributes;
+ SpFreeCredentialsHandleFn *FreeCredentialsHandle;
+ SpSaveCredentialsFn *SaveCredentials;
+ SpGetCredentialsFn *GetCredentials;
+ SpDeleteCredentialsFn *DeleteCredentials;
+ SpInitLsaModeContextFn *InitLsaModeContext;
+ SpAcceptLsaModeContextFn *AcceptLsaModeContext;
+ SpDeleteContextFn *DeleteContext;
+ SpApplyControlTokenFn *ApplyControlToken;
+ SpGetUserInfoFn *GetUserInfo;
+ SpGetExtendedInformationFn *GetExtendedInformation;
+ SpQueryContextAttributesFn *QueryContextAttributes;
+ SpAddCredentialsFn *AddCredentials;
+ SpSetExtendedInformationFn *SetExtendedInformation;
+} SECPKG_FUNCTION_TABLE,
+ *PSECPKG_FUNCTION_TABLE;
+
+typedef struct SECPKG_USER_FUNCTION_TABLE {
+ SpInstanceInitFn *InstanceInit;
+ SpInitUserModeContextFn *InitUserModeContext;
+ SpMakeSignatureFn *MakeSignature;
+ SpVerifySignatureFn *VerifySignature;
+ SpSealMessageFn *SealMessage;
+ SpUnsealMessageFn *UnsealMessage;
+ SpGetContextTokenFn *GetContextToken;
+ SpQueryContextAttributesFn *QueryContextAttributes;
+ SpCompleteAuthTokenFn *CompleteAuthToken;
+ SpDeleteContextFn *DeleteUserModeContext;
+ SpFormatCredentialsFn *FormatCredentials;
+ SpMarshallSupplementalCredsFn *MarshallSupplementalCreds;
+ SpExportSecurityContextFn *ExportContext;
+ SpImportSecurityContextFn *ImportContext;
+} SECPKG_USER_FUNCTION_TABLE,
+ *PSECPKG_USER_FUNCTION_TABLE;
+
+/* Entry points to SSP/AP */
+typedef NTSTATUS (NTAPI *SpLsaModeInitializeFn)(ULONG, PULONG,
+ PSECPKG_FUNCTION_TABLE *, PULONG);
+typedef NTSTATUS (WINAPI *SpUserModeInitializeFn)(ULONG, PULONG,
+ PSECPKG_USER_FUNCTION_TABLE *, PULONG);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* _NTSECPKG_H */
diff --git a/tcc/include/winapi/oaidl.h b/tcc/include/winapi/oaidl.h
new file mode 100644
index 0000000..b8a2985
--- /dev/null
+++ b/tcc/include/winapi/oaidl.h
@@ -0,0 +1,778 @@
+#ifndef _OAIDL_H
+#define _OAIDL_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifndef COM_NO_WINDOWS_H
+#include <windows.h>
+#include <ole2.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#ifdef NONAMELESSUNION
+#define __VARIANT_NAME_1 n1
+#define __VARIANT_NAME_2 n2
+#define __VARIANT_NAME_3 n3
+#define __VARIANT_NAME_4 n4
+#else
+#define __tagVARIANT
+#define __VARIANT_NAME_1
+#define __VARIANT_NAME_2
+#define __VARIANT_NAME_3
+#define __VARIANT_NAME_4
+#endif
+#define DISPID_UNKNOWN (-1)
+#define DISPID_VALUE (0)
+#define DISPID_PROPERTYPUT (-3)
+#define DISPID_NEWENUM (-4)
+#define DISPID_EVALUATE (-5)
+#define DISPID_CONSTRUCTOR (-6)
+#define DISPID_DESTRUCTOR (-7)
+#define DISPID_COLLECT (-8)
+#define FADF_AUTO (1)
+#define FADF_STATIC (2)
+#define FADF_EMBEDDED (4)
+#define FADF_FIXEDSIZE (16)
+#define FADF_RECORD (32)
+#define FADF_HAVEIID (64)
+#define FADF_HAVEVARTYPE (128)
+#define FADF_BSTR (256)
+#define FADF_UNKNOWN (512)
+#define FADF_DISPATCH (1024)
+#define FADF_VARIANT (2048)
+#define FADF_RESERVED (0xf0e8)
+#define FADF_DATADELETED (0x1000)
+#define FADF_CREATEVECTOR (0x2000)
+#define PARAMFLAG_NONE (0)
+#define PARAMFLAG_FIN (1)
+#define PARAMFLAG_FOUT (2)
+#define PARAMFLAG_FLCID (4)
+#define PARAMFLAG_FRETVAL (8)
+#define PARAMFLAG_FOPT (16)
+#define PARAMFLAG_FHASDEFAULT (32)
+#define IDLFLAG_NONE PARAMFLAG_NONE
+#define IDLFLAG_FIN PARAMFLAG_FIN
+#define IDLFLAG_FOUT PARAMFLAG_FOUT
+#define IDLFLAG_FLCID PARAMFLAG_FLCID
+#define IDLFLAG_FRETVAL PARAMFLAG_FRETVAL
+#define IMPLTYPEFLAG_FDEFAULT 1
+#define IMPLTYPEFLAG_FSOURCE 2
+#define IMPLTYPEFLAG_FRESTRICTED 4
+#define IMPLTYPEFLAG_FDEFAULTVTABLE 8
+
+typedef _COM_interface ITypeLib *LPTYPELIB;
+typedef _COM_interface ITypeLib2 *LPTYPELIB2;
+typedef _COM_interface ICreateTypeInfo *LPCREATETYPEINFO;
+typedef _COM_interface ICreateTypeInfo2 *LPCREATETYPEINFO2;
+typedef _COM_interface ICreateTypeLib *LPCREATETYPELIB;
+typedef _COM_interface ICreateTypeLib2 *LPCREATETYPELIB2;
+typedef _COM_interface ITypeComp *LPTYPECOMP;
+typedef _COM_interface ITypeInfo *LPTYPEINFO;
+typedef _COM_interface ITypeInfo2 *LPTYPEINFO2;
+typedef _COM_interface IErrorInfo *LPERRORINFO;
+typedef _COM_interface IDispatch *LPDISPATCH;
+typedef _COM_interface IEnumVARIANT *LPENUMVARIANT;
+typedef _COM_interface ICreateErrorInfo *LPCREATEERRORINFO;
+typedef _COM_interface ISupportErrorInfo *LPSUPPORTERRORINFO;
+typedef _COM_interface IRecordInfo *LPRECORDINFO;
+
+extern const IID IID_ITypeLib;
+extern const IID IID_ITypeLib2;
+extern const IID IID_ICreateTypeInfo;
+extern const IID IID_ICreateTypeInfo2;
+extern const IID IID_ICreateTypeLib;
+extern const IID IID_ICreateTypeLib2;
+extern const IID IID_ITypeInfo;
+extern const IID IID_ITypeInfo2;
+extern const IID IID_IErrorInfo;
+extern const IID IID_IDispatch;
+extern const IID IID_IEnumVARIANT;
+extern const IID IID_ICreateErrorInfo;
+extern const IID IID_ISupportErrorInfo;
+extern const IID IID_IRecordInfo;
+extern const IID IID_ITypeMarshal;
+
+typedef enum tagSYSKIND {
+ SYS_WIN16,SYS_WIN32,SYS_MAC
+} SYSKIND;
+typedef enum tagLIBFLAGS {
+ LIBFLAG_FRESTRICTED=1,LIBFLAG_FCONTROL=2,LIBFLAG_FHIDDEN=4,
+ LIBFLAG_FHASDISKIMAGE=8
+} LIBFLAGS;
+typedef struct tagTLIBATTR {
+ GUID guid;
+ LCID lcid;
+ SYSKIND syskind;
+ WORD wMajorVerNum;
+ WORD wMinorVerNum;
+ WORD wLibFlags;
+} TLIBATTR,*LPTLIBATTR;
+typedef CY CURRENCY;
+typedef struct tagSAFEARRAYBOUND {
+ ULONG cElements;
+ LONG lLbound;
+}SAFEARRAYBOUND,*LPSAFEARRAYBOUND;
+typedef struct _wireSAFEARR_BSTR
+{
+ ULONG Size;
+ wireBSTR *aBstr;
+}SAFEARR_BSTR;
+typedef struct _wireSAFEARR_UNKNOWN {
+ ULONG Size;
+ IUnknown **apUnknown;
+}SAFEARR_UNKNOWN;
+typedef struct _wireSAFEARR_DISPATCH {
+ ULONG Size;
+ LPDISPATCH *apDispatch;
+}SAFEARR_DISPATCH;
+typedef struct _wireSAFEARR_VARIANT {
+ ULONG Size;
+ struct _wireVARIANT *aVariant;
+}SAFEARR_VARIANT;
+typedef enum tagSF_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_TYPE;
+typedef struct _wireBRECORD {
+ ULONG fFlags;
+ ULONG clSize;
+ LPRECORDINFO* pRecInfo;
+ byte* pRecord;
+} *wireBRECORD;
+typedef struct _wireSAFEARR_BRECORD {
+ ULONG Size;
+ wireBRECORD* aRecord;
+ } SAFEARR_BRECORD;
+typedef struct _wireSAFEARR_HAVEIID {
+ ULONG Size;
+ IUnknown** apUnknown;
+ IID iid;
+ } SAFEARR_HAVEIID;
+typedef struct _wireSAFEARRAY_UNION {
+ ULONG sfType;
+ union {
+ SAFEARR_BSTR BstrStr;
+ SAFEARR_UNKNOWN UnknownStr;
+ SAFEARR_DISPATCH DispatchStr;
+ SAFEARR_VARIANT VariantStr;
+ SAFEARR_BRECORD RecordStr;
+ SAFEARR_HAVEIID HaveIidStr;
+ BYTE_SIZEDARR ByteStr;
+ WORD_SIZEDARR WordStr;
+ DWORD_SIZEDARR LongStr;
+ HYPER_SIZEDARR HyperStr;
+ }u;
+}SAFEARRAYUNION;
+typedef struct _wireSAFEARRAY {
+ USHORT cDims;
+ USHORT fFeatures;
+ ULONG cbElements;
+ ULONG cLocks;
+ SAFEARRAYUNION uArrayStructs;
+ SAFEARRAYBOUND rgsabound[1];
+}*wireSAFEARRAY;
+typedef wireSAFEARRAY *wirePSAFEARRAY;
+typedef struct tagSAFEARRAY {
+ USHORT cDims;
+ USHORT fFeatures;
+ ULONG cbElements;
+ ULONG cLocks;
+ PVOID pvData;
+ SAFEARRAYBOUND rgsabound[1];
+}SAFEARRAY,*LPSAFEARRAY;
+#if defined (__GNUC__) && !defined (NONAMELESSUNION)
+__extension__ /* no named members */
+#endif
+typedef struct tagVARIANT {
+ _ANONYMOUS_UNION union {
+ struct __tagVARIANT {
+ VARTYPE vt;
+ WORD wReserved1;
+ WORD wReserved2;
+ WORD wReserved3;
+ _ANONYMOUS_UNION union {
+ long lVal;
+ LONGLONG llVal;
+ unsigned char bVal;
+ short iVal;
+ float fltVal;
+ double dblVal;
+ VARIANT_BOOL boolVal;
+ SCODE scode;
+ CY cyVal;
+ DATE date;
+ BSTR bstrVal;
+ IUnknown *punkVal;
+ LPDISPATCH pdispVal;
+ SAFEARRAY *parray;
+ unsigned char *pbVal;
+ short *piVal;
+ long *plVal;
+ LONGLONG * pllVal;
+ float *pfltVal;
+ double *pdblVal;
+ VARIANT_BOOL *pboolVal;
+ _VARIANT_BOOL *pbool;
+ SCODE *pscode;
+ CY *pcyVal;
+ DATE *pdate;
+ BSTR *pbstrVal;
+ IUnknown **ppunkVal;
+ LPDISPATCH *ppdispVal;
+ SAFEARRAY **pparray;
+ struct tagVARIANT *pvarVal;
+ void *byref;
+ CHAR cVal;
+ USHORT uiVal;
+ ULONG ulVal;
+ ULONGLONG ullVal;
+ INT intVal;
+ UINT uintVal;
+ DECIMAL *pdecVal;
+ CHAR *pcVal;
+ USHORT *puiVal;
+ ULONG *pulVal;
+ ULONGLONG * pullVal;
+ INT *pintVal;
+ UINT *puintVal;
+ _ANONYMOUS_STRUCT struct {
+ PVOID pvRecord;
+ struct IRecordInfo *pRecInfo;
+ } __VARIANT_NAME_4;
+ } __VARIANT_NAME_3;
+ } __VARIANT_NAME_2;
+ DECIMAL decVal;
+ } __VARIANT_NAME_1;
+} VARIANT,*LPVARIANT;
+typedef VARIANT VARIANTARG;
+typedef VARIANT *LPVARIANTARG;
+typedef struct _wireVARIANT {
+ DWORD clSize;
+ DWORD rpcReserved;
+ USHORT vt;
+ USHORT wReserved1;
+ USHORT wReserved2;
+ USHORT wReserved3;
+ _ANONYMOUS_UNION union {
+ LONG lVal;
+ LONGLONG llVal;
+ BYTE bVal;
+ SHORT iVal;
+ FLOAT fltVal;
+ DOUBLE dblVal;
+ VARIANT_BOOL boolVal;
+ SCODE scode;
+ CY cyVal;
+ DATE date;
+ wireBSTR bstrVal;
+ IUnknown *punkVal;
+ LPDISPATCH pdispVal;
+ wirePSAFEARRAY parray;
+ wireBRECORD brecVal;
+ BYTE *pbVal;
+ SHORT *piVal;
+ LONG *plVal;
+ FLOAT *pfltVal;
+ DOUBLE *pdblVal;
+ VARIANT_BOOL *pboolVal;
+ SCODE *pscode;
+ CY *pcyVal;
+ DATE *pdate;
+ wireBSTR *pbstrVal;
+ IUnknown **ppunkVal;
+ LPDISPATCH *ppdispVal;
+ wirePSAFEARRAY *pparray;
+ struct _wireVARIANT *pvarVal;
+ CHAR cVal;
+ USHORT uiVal;
+ ULONG ulVal;
+ ULONGLONG ullVal;
+ INT intVal;
+ UINT uintVal;
+ DECIMAL decVal;
+ DECIMAL *pdecVal;
+ CHAR *pcVal;
+ USHORT *puiVal;
+ ULONG *pulVal;
+ INT *pintVal;
+ UINT *puintVal;
+ } DUMMYUNIONNAME;
+} *wireVARIANT;
+typedef LONG DISPID;
+typedef DISPID MEMBERID;
+typedef DWORD HREFTYPE;
+typedef enum tagTYPEKIND {
+ TKIND_ENUM,TKIND_RECORD,TKIND_MODULE,TKIND_INTERFACE,TKIND_DISPATCH,
+ TKIND_COCLASS,TKIND_ALIAS,TKIND_UNION,TKIND_MAX
+}TYPEKIND;
+typedef struct tagTYPEDESC {
+ _ANONYMOUS_UNION union {
+ struct tagTYPEDESC *lptdesc;
+ struct tagARRAYDESC *lpadesc;
+ HREFTYPE hreftype;
+ } DUMMYUNIONNAME;
+ VARTYPE vt;
+}TYPEDESC;
+typedef struct tagARRAYDESC {
+ TYPEDESC tdescElem;
+ USHORT cDims;
+ SAFEARRAYBOUND rgbounds[1];
+}ARRAYDESC;
+typedef struct tagPARAMDESCEX {
+ ULONG cBytes;
+ VARIANTARG varDefaultValue;
+}PARAMDESCEX,*LPPARAMDESCEX;
+typedef struct tagPARAMDESC {
+ LPPARAMDESCEX pparamdescex;
+ USHORT wParamFlags;
+}PARAMDESC,*LPPARAMDESC;
+typedef struct tagIDLDESC {
+ ULONG dwReserved;
+ USHORT wIDLFlags;
+}IDLDESC,*LPIDLDESC;
+typedef struct tagELEMDESC {
+ TYPEDESC tdesc;
+ _ANONYMOUS_UNION union {
+ IDLDESC idldesc;
+ PARAMDESC paramdesc;
+ } DUMMYUNIONNAME;
+} ELEMDESC,*LPELEMDESC;
+typedef struct tagTYPEATTR {
+ GUID guid;
+ LCID lcid;
+ DWORD dwReserved;
+ MEMBERID memidConstructor;
+ MEMBERID memidDestructor;
+ LPOLESTR lpstrSchema;
+ ULONG cbSizeInstance;
+ TYPEKIND typekind;
+ WORD cFuncs;
+ WORD cVars;
+ WORD cImplTypes;
+ WORD cbSizeVft;
+ WORD cbAlignment;
+ WORD wTypeFlags;
+ WORD wMajorVerNum;
+ WORD wMinorVerNum;
+ TYPEDESC tdescAlias;
+ IDLDESC idldescType;
+}TYPEATTR,*LPTYPEATTR;
+typedef struct tagDISPPARAMS {
+ VARIANTARG *rgvarg;
+ DISPID *rgdispidNamedArgs;
+ UINT cArgs;
+ UINT cNamedArgs;
+}DISPPARAMS;
+typedef struct tagEXCEPINFO {
+ WORD wCode;
+ WORD wReserved;
+ BSTR bstrSource;
+ BSTR bstrDescription;
+ BSTR bstrHelpFile;
+ DWORD dwHelpContext;
+ PVOID pvReserved;
+ HRESULT(__stdcall * pfnDeferredFillIn)(struct tagEXCEPINFO*);
+ SCODE scode;
+} EXCEPINFO,*LPEXCEPINFO;
+typedef enum tagCALLCONV {
+ CC_FASTCALL,CC_CDECL,CC_MSCPASCAL,CC_PASCAL=CC_MSCPASCAL,
+ CC_MACPASCAL,CC_STDCALL,CC_FPFASTCALL,CC_SYSCALL,CC_MPWCDECL,
+ CC_MPWPASCAL,CC_MAX=CC_MPWPASCAL
+}CALLCONV;
+typedef enum tagFUNCKIND {
+ FUNC_VIRTUAL,FUNC_PUREVIRTUAL,FUNC_NONVIRTUAL,
+ FUNC_STATIC,FUNC_DISPATCH
+}FUNCKIND;
+typedef enum tagINVOKEKIND {
+ INVOKE_FUNC=1,INVOKE_PROPERTYGET,INVOKE_PROPERTYPUT=4,
+ INVOKE_PROPERTYPUTREF=8
+}INVOKEKIND;
+typedef struct tagFUNCDESC {
+ MEMBERID memid;
+ SCODE *lprgscode;
+ ELEMDESC *lprgelemdescParam;
+ FUNCKIND funckind;
+ INVOKEKIND invkind;
+ CALLCONV callconv;
+ SHORT cParams;
+ SHORT cParamsOpt;
+ SHORT oVft;
+ SHORT cScodes;
+ ELEMDESC elemdescFunc;
+ WORD wFuncFlags;
+}FUNCDESC,*LPFUNCDESC;
+typedef enum tagVARKIND {
+ VAR_PERINSTANCE,VAR_STATIC,VAR_CONST,VAR_DISPATCH
+} VARKIND;
+typedef struct tagVARDESC {
+ MEMBERID memid;
+ LPOLESTR lpstrSchema;
+ _ANONYMOUS_UNION union {
+ ULONG oInst;
+ VARIANT *lpvarValue;
+ } DUMMYUNIONNAME;
+ ELEMDESC elemdescVar;
+ WORD wVarFlags;
+ VARKIND varkind;
+} VARDESC,*LPVARDESC;
+typedef enum tagTYPEFLAGS {
+ TYPEFLAG_FAPPOBJECT=1,TYPEFLAG_FCANCREATE=2,TYPEFLAG_FLICENSED=4,
+ TYPEFLAG_FPREDECLID=8,TYPEFLAG_FHIDDEN=16,TYPEFLAG_FCONTROL=32,
+ TYPEFLAG_FDUAL=64,TYPEFLAG_FNONEXTENSIBLE=128,
+ TYPEFLAG_FOLEAUTOMATION=256,TYPEFLAG_FRESTRICTED=512,
+ TYPEFLAG_FAGGREGATABLE=1024,TYPEFLAG_FREPLACEABLE=2048,
+ TYPEFLAG_FDISPATCHABLE=4096,TYPEFLAG_FREVERSEBIND=8192
+} TYPEFLAGS;
+typedef enum tagFUNCFLAGS {
+ FUNCFLAG_FRESTRICTED=1,FUNCFLAG_FSOURCE=2,FUNCFLAG_FBINDABLE=4,
+ FUNCFLAG_FREQUESTEDIT=8,FUNCFLAG_FDISPLAYBIND=16,FUNCFLAG_FDEFAULTBIND=32,
+ FUNCFLAG_FHIDDEN=64,FUNCFLAG_FUSESGETLASTERROR=128,FUNCFLAG_FDEFAULTCOLLELEM=256,
+ FUNCFLAG_FUIDEFAULT=512,FUNCFLAG_FNONBROWSABLE=1024,FUNCFLAG_FREPLACEABLE=2048,
+ FUNCFLAG_FIMMEDIATEBIND=4096
+} FUNCFLAGS;
+typedef enum tagVARFLAGS {
+ VARFLAG_FREADONLY=1,VARFLAG_FSOURCE=2,VARFLAG_FBINDABLE=4,VARFLAG_FREQUESTEDIT=8,
+ VARFLAG_FDISPLAYBIND=16,VARFLAG_FDEFAULTBIND=32,VARFLAG_FHIDDEN=64,VARFLAG_FRESTRICTED=128,
+ VARFLAG_FDEFAULTCOLLELEM=256,VARFLAG_FUIDEFAULT=512,VARFLAG_FNONBROWSABLE=1024,
+ VARFLAG_FREPLACEABLE=2048,VARFLAG_FIMMEDIATEBIND=4096
+} VARFLAGS;
+typedef struct tagCLEANLOCALSTORAGE {
+ IUnknown *pInterface;
+ PVOID pStorage;
+ DWORD flags;
+} CLEANLOCALSTORAGE;
+typedef struct tagCUSTDATAITEM {
+ GUID guid;
+ VARIANTARG varValue;
+} CUSTDATAITEM,*LPCUSTDATAITEM;
+typedef struct tagCUSTDATA {
+ DWORD cCustData;
+ LPCUSTDATAITEM prgCustData;
+} CUSTDATA,*LPCUSTDATA;
+
+typedef enum tagDESCKIND {
+ 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
+} DESCKIND;
+
+typedef union tagBINDPTR {
+ LPFUNCDESC lpfuncdesc;
+ LPVARDESC lpvardesc;
+ LPTYPECOMP lptcomp;
+} BINDPTR,*LPBINDPTR;
+
+#define INTERFACE IDispatch
+DECLARE_INTERFACE_(IDispatch,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetTypeInfoCount)(THIS_ UINT*) PURE;
+ STDMETHOD(GetTypeInfo)(THIS_ UINT,LCID,LPTYPEINFO*) PURE;
+ STDMETHOD(GetIDsOfNames)(THIS_ REFIID,LPOLESTR*,UINT,LCID,DISPID*) PURE;
+ STDMETHOD(Invoke)(THIS_ DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*) PURE;
+};
+#undef INTERFACE
+
+#ifdef COBJMACROS
+#define IDispatch_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDispatch_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDispatch_Release(p) (p)->lpVtbl->Release(p)
+#define IDispatch_GetTypeInfoCount(p,a) (p)->lpVtbl->GetTypeInfoCount(p,a)
+#define IDispatch_GetTypeInfo(p,a,b,c) (p)->lpVtbl->GetTypeInfo(p,a,b,c)
+#define IDispatch_GetIDsOfNames(p,a,b,c,d,e) (p)->lpVtbl->GetIDsOfNames(p,a,b,c,d,e)
+#define IDispatch_Invoke(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->Invoke(p,a,b,c,d,e,f,g,h)
+#endif
+
+#define INTERFACE IEnumVARIANT
+DECLARE_INTERFACE_(IEnumVARIANT,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(Next)(THIS_ ULONG,VARIANT*,ULONG*) PURE;
+ STDMETHOD(Skip)(THIS_ ULONG) PURE;
+ STDMETHOD(Reset)(THIS) PURE;
+ STDMETHOD(Clone)(THIS_ IEnumVARIANT**) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE ITypeComp
+DECLARE_INTERFACE_(ITypeComp,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(Bind)(THIS_ LPOLESTR,ULONG,WORD,LPTYPEINFO*,DESCKIND*,LPBINDPTR) PURE;
+ STDMETHOD(BindType)(THIS_ LPOLESTR,ULONG,LPTYPEINFO*,LPTYPECOMP*) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE ITypeInfo
+DECLARE_INTERFACE_(ITypeInfo,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetTypeAttr)(THIS_ LPTYPEATTR*) PURE;
+ STDMETHOD(GetTypeComp)(THIS_ LPTYPECOMP*) PURE;
+ STDMETHOD(GetFuncDesc)(THIS_ UINT,LPFUNCDESC*) PURE;
+ STDMETHOD(GetVarDesc)(THIS_ UINT,LPVARDESC*) PURE;
+ STDMETHOD(GetNames)(THIS_ MEMBERID,BSTR*,UINT,UINT*) PURE;
+ STDMETHOD(GetRefTypeOfImplType)(THIS_ UINT,HREFTYPE*) PURE;
+ STDMETHOD(GetImplTypeFlags)(THIS_ UINT,INT*) PURE;
+ STDMETHOD(GetIDsOfNames)(THIS_ LPOLESTR*,UINT,MEMBERID*) PURE;
+ STDMETHOD(Invoke)(THIS_ PVOID,MEMBERID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*) PURE;
+ STDMETHOD(GetDocumentation)(THIS_ MEMBERID,BSTR*,BSTR*,DWORD*,BSTR*) PURE;
+ STDMETHOD(GetDllEntry)(THIS_ MEMBERID,INVOKEKIND,BSTR*,BSTR*,WORD*) PURE;
+ STDMETHOD(GetRefTypeInfo)(THIS_ HREFTYPE,LPTYPEINFO*) PURE;
+ STDMETHOD(AddressOfMember)(THIS_ MEMBERID,INVOKEKIND,PVOID*) PURE;
+ STDMETHOD(CreateInstance)(THIS_ LPUNKNOWN,REFIID,PVOID*) PURE;
+ STDMETHOD(GetMops)(THIS_ MEMBERID,BSTR*) PURE;
+ STDMETHOD(GetContainingTypeLib)(THIS_ LPTYPELIB*,UINT*) PURE;
+ STDMETHOD_(void,ReleaseTypeAttr)(THIS_ LPTYPEATTR) PURE;
+ STDMETHOD_(void,ReleaseFuncDesc)(THIS_ LPFUNCDESC) PURE;
+ STDMETHOD_(void,ReleaseVarDesc)(THIS_ LPVARDESC) PURE;
+};
+#undef INTERFACE
+
+#ifdef COBJMACROS
+#define ITypeInfo_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define ITypeInfo_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define ITypeInfo_Release(p) (p)->lpVtbl->Release(p)
+#define ITypeInfo_GetTypeAttr(p,a) (p)->lpVtbl->GetTypeAttr(p,a)
+#define ITypeInfo_GetTypeComp(p,a) (p)->lpVtbl->GetTypeComp(p,a)
+#define ITypeInfo_GetFuncDesc(p,a,b) (p)->lpVtbl->GetFuncDesc(p,a,b)
+#define ITypeInfo_GetVarDesc(p,a,b) (p)->lpVtbl->GetVarDesc(p,a,b)
+#define ITypeInfo_GetNames(p,a,b,c,d) (p)->lpVtbl->GetNames(p,a,b,c,d)
+#define ITypeInfo_GetRefTypeOfImplType(p,a,b) (p)->lpVtbl->GetRefTypeOfImplType(p,a,b)
+#define ITypeInfo_GetImplTypeFlags(p,a,b) (p)->lpVtbl->GetImplTypeFlags(p,a,b)
+#define ITypeInfo_GetIDsOfNames(p,a,b,c) (p)->lpVtbl->GetIDsOfNames(p,a,b,c)
+#define ITypeInfo_Invoke(p,a,b,c,d,e,f,g) (p)->lpVtbl->Invoke(p,a,b,c,d,e,f,g)
+#define ITypeInfo_GetDocumentation(p,a,b,c,d,e) (p)->lpVtbl->GetDocumentation(p,a,b,c,d,e)
+#define ITypeInfo_GetDllEntry(p,a,b,c,d,e) (p)->lpVtbl->GetDllEntry(p,a,b,c,d,e)
+#define ITypeInfo_GetRefTypeInfo(p,a,b) (p)->lpVtbl->GetRefTypeInfo(p,a,b)
+#define ITypeInfo_AddressOfMember(p,a,b,c) (p)->lpVtbl->AddressOfMember(p,a,b,c)
+#define ITypeInfo_CreateInstance(p,a,b,c) (p)->lpVtbl->CreateInstance(p,a,b,c)
+#define ITypeInfo_GetMops(p,a,b) (p)->lpVtbl->GetMops(p,a,b)
+#define ITypeInfo_GetContainingTypeLib(p,a,b) (p)->lpVtbl->GetContainingTypeLib(p,a,b)
+#define ITypeInfo_ReleaseTypeAttr(p,a) (p)->lpVtbl->ReleaseTypeAttr(p,a)
+#define ITypeInfo_ReleaseFuncDesc(p,a) (p)->lpVtbl->ReleaseFuncDesc(p,a)
+#define ITypeInfo_ReleaseVarDesc(p,a) (p)->lpVtbl->ReleaseVarDesc(p,a)
+#endif
+
+#define INTERFACE ITypeInfo2
+DECLARE_INTERFACE_(ITypeInfo2,ITypeInfo)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetTypeAttr)(THIS_ LPTYPEATTR*) PURE;
+ STDMETHOD(GetTypeComp)(THIS_ LPTYPECOMP*) PURE;
+ STDMETHOD(GetFuncDesc)(THIS_ UINT,LPFUNCDESC*) PURE;
+ STDMETHOD(GetVarDesc)(THIS_ UINT,LPVARDESC*) PURE;
+ STDMETHOD(GetNames)(THIS_ MEMBERID,BSTR*,UINT,UINT*) PURE;
+ STDMETHOD(GetRefTypeOfImplType)(THIS_ UINT,HREFTYPE*) PURE;
+ STDMETHOD(GetImplTypeFlags)(THIS_ UINT,INT*) PURE;
+ STDMETHOD(GetIDsOfNames)(THIS_ LPOLESTR*,UINT,MEMBERID*) PURE;
+ STDMETHOD(Invoke)(THIS_ PVOID,MEMBERID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*) PURE;
+ STDMETHOD(GetDocumentation)(THIS_ MEMBERID,BSTR*,BSTR*,DWORD*,BSTR*) PURE;
+ STDMETHOD(GetDllEntry)(THIS_ MEMBERID,INVOKEKIND,BSTR*,BSTR*,WORD*) PURE;
+ STDMETHOD(GetRefTypeInfo)(THIS_ HREFTYPE,LPTYPEINFO*) PURE;
+ STDMETHOD(AddressOfMember)(THIS_ MEMBERID,INVOKEKIND,PVOID*) PURE;
+ STDMETHOD(CreateInstance)(THIS_ LPUNKNOWN,REFIID,PVOID*) PURE;
+ STDMETHOD(GetMops)(THIS_ MEMBERID,BSTR*) PURE;
+ STDMETHOD(GetContainingTypeLib)(THIS_ LPTYPELIB*,UINT*) PURE;
+ STDMETHOD_(void,ReleaseTypeAttr)(THIS_ LPTYPEATTR) PURE;
+ STDMETHOD_(void,ReleaseFuncDesc)(THIS_ LPFUNCDESC) PURE;
+ STDMETHOD_(void,ReleaseVarDesc)(THIS_ LPVARDESC) PURE;
+ STDMETHOD(GetTypeKind)(THIS_ TYPEKIND*) PURE;
+ STDMETHOD(GetTypeFlags)(THIS_ ULONG*) PURE;
+ STDMETHOD(GetFuncIndexOfMemId)(THIS_ MEMBERID,INVOKEKIND,UINT*) PURE;
+ STDMETHOD(GetVarIndexOfMemId)(THIS_ MEMBERID,UINT*) PURE;
+ STDMETHOD(GetCustData)(THIS_ REFGUID,VARIANT*) PURE;
+ STDMETHOD(GetFuncCustData)(THIS_ UINT,REFGUID,VARIANT*) PURE;
+ STDMETHOD(GetParamCustData)(THIS_ UINT,UINT,REFGUID,VARIANT*) PURE;
+ STDMETHOD(GetVarCustData)(THIS_ UINT,REFGUID,VARIANT*) PURE;
+ STDMETHOD(GetImplTypeCustData)(THIS_ UINT,REFGUID,VARIANT*) PURE;
+ STDMETHOD(GetDocumentation2)(THIS_ MEMBERID,LCID,BSTR*,DWORD*,BSTR*) PURE;
+ STDMETHOD(GetAllCustData)(THIS_ CUSTDATA*) PURE;
+ STDMETHOD(GetAllFuncCustData)(THIS_ UINT,CUSTDATA*) PURE;
+ STDMETHOD(GetAllParamCustData)(THIS_ UINT,UINT,CUSTDATA*) PURE;
+ STDMETHOD(GetAllVarCustData)(THIS_ UINT,CUSTDATA*) PURE;
+ STDMETHOD(GetAllImplTypeCustData)(THIS_ UINT,CUSTDATA*) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE ITypeLib
+DECLARE_INTERFACE_(ITypeLib,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD_(UINT,GetTypeInfoCount)(THIS) PURE;
+ STDMETHOD(GetTypeInfo)(THIS_ UINT,ITypeInfo**) PURE;
+ STDMETHOD(GetTypeInfoType)(THIS_ UINT,TYPEKIND*) PURE;
+ STDMETHOD(GetTypeInfoOfGuid)(THIS_ REFGUID,ITypeInfo**) PURE;
+ STDMETHOD(GetLibAttr)(THIS_ TLIBATTR**) PURE;
+ STDMETHOD(GetTypeComp)(THIS_ ITypeComp*) PURE;
+ STDMETHOD(GetDocumentation)(THIS_ INT,BSTR*,BSTR*,DWORD*,BSTR*) PURE;
+ STDMETHOD(IsName)(THIS_ LPOLESTR,ULONG,BOOL*) PURE;
+ STDMETHOD(FindName)(THIS_ LPOLESTR,ULONG,ITypeInfo**,MEMBERID*,USHORT*) PURE;
+ STDMETHOD_(void,ReleaseTLibAttr)(THIS_ TLIBATTR*) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE ITypeLib2
+DECLARE_INTERFACE_(ITypeLib2,ITypeLib)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD_(UINT,GetTypeInfoCount)(THIS) PURE;
+ STDMETHOD(GetTypeInfo)(THIS_ UINT,ITypeInfo**) PURE;
+ STDMETHOD(GetTypeInfoType)(THIS_ UINT,TYPEKIND*) PURE;
+ STDMETHOD(GetTypeInfoOfGuid)(THIS_ REFGUID,ITypeInfo**) PURE;
+ STDMETHOD(GetLibAttr)(THIS_ TLIBATTR**) PURE;
+ STDMETHOD(GetTypeComp)(THIS_ ITypeComp*) PURE;
+ STDMETHOD(GetDocumentation)(THIS_ INT,BSTR*,BSTR*,DWORD*,BSTR*) PURE;
+ STDMETHOD(IsName)(THIS_ LPOLESTR,ULONG,BOOL*) PURE;
+ STDMETHOD(FindName)(THIS_ LPOLESTR,ULONG,ITypeInfo**,MEMBERID*,USHORT*) PURE;
+ STDMETHOD_(void,ReleaseTLibAttr)(THIS_ TLIBATTR*) PURE;
+ STDMETHOD(GetCustData)(THIS_ REFGUID,VARIANT*) PURE;
+ STDMETHOD(GetLibStatistics)(THIS_ ULONG*,ULONG*) PURE;
+ STDMETHOD(GetDocumentation2)(THIS_ INT,LCID,BSTR*,DWORD*,BSTR*) PURE;
+ STDMETHOD(GetAllCustData)(THIS_ CUSTDATA*) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IErrorInfo;
+#define INTERFACE IErrorInfo
+DECLARE_INTERFACE_(IErrorInfo, IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetGUID)(THIS_ GUID*) PURE;
+ STDMETHOD(GetSource)(THIS_ BSTR*) PURE;
+ STDMETHOD(GetDescription)(THIS_ BSTR*) PURE;
+ STDMETHOD(GetHelpFile)(THIS_ BSTR*) PURE;
+ STDMETHOD(GetHelpContext)(THIS_ DWORD*) PURE;
+};
+#undef INTERFACE
+
+#ifdef COBJMACROS
+#define IErrorInfo_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define IErrorInfo_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define IErrorInfo_Release(T) (T)->lpVtbl->Release(T)
+#define IErrorInfo_GetGUID(T,a) (T)->lpVtbl->GetGUID(T,a)
+#define IErrorInfo_GetSource(T,a) (T)->lpVtbl->GetSource(T,a)
+#define IErrorInfo_GetDescription(T,a) (T)->lpVtbl->GetDescription(T,a)
+#define IErrorInfo_GetHelpFile(T,a) (T)->lpVtbl->GetHelpFile(T,a)
+#define IErrorInfo_GetHelpContext(T,a) (T)->lpVtbl->GetHelpContext(T,a)
+#endif
+
+EXTERN_C const IID IID_ICreateErrorInfo;
+#define INTERFACE ICreateErrorInfo
+DECLARE_INTERFACE_(ICreateErrorInfo, IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*)PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(SetGUID)(THIS_ REFGUID) PURE;
+ STDMETHOD(SetSource)(THIS_ LPOLESTR) PURE;
+ STDMETHOD(SetDescription)(THIS_ LPOLESTR) PURE;
+ STDMETHOD(SetHelpFile)(THIS_ LPOLESTR) PURE;
+ STDMETHOD(SetHelpContext)(THIS_ DWORD) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_ISupportErrorInfo;
+#define INTERFACE ISupportErrorInfo
+DECLARE_INTERFACE_(ISupportErrorInfo, IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(InterfaceSupportsErrorInfo)(THIS_ REFIID) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IRecordInfo;
+#define INTERFACE IRecordInfo
+DECLARE_INTERFACE_(IRecordInfo, IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(RecordInit)(THIS_ PVOID) PURE;
+ STDMETHOD(RecordClear)(THIS_ PVOID) PURE;
+ STDMETHOD(RecordCopy)(THIS_ PVOID, PVOID) PURE;
+ STDMETHOD(GetGuid)(THIS_ GUID*) PURE;
+ STDMETHOD(GetName)(THIS_ BSTR*) PURE;
+ STDMETHOD(GetSize)(THIS_ ULONG*) PURE;
+ STDMETHOD(GetTypeInfo)(THIS_ ITypeInfo**) PURE;
+ STDMETHOD(GetField)(THIS_ PVOID,LPCOLESTR,VARIANT*) PURE;
+ STDMETHOD(GetFieldNoCopy)(THIS_ PVOID,LPCOLESTR,VARIANT*,PVOID*) PURE;
+ STDMETHOD(PutField )(THIS_ ULONG,PVOID,LPCOLESTR, VARIANT*) PURE;
+ STDMETHOD(PutFieldNoCopy)(THIS_ ULONG,PVOID,LPCOLESTR,VARIANT*) PURE;
+ STDMETHOD(GetFieldNames)(THIS_ ULONG*,BSTR*) PURE;
+ STDMETHOD_(BOOL,IsMatchingType)(THIS_ THIS) PURE;
+ STDMETHOD_(PVOID,RecordCreate)(THIS) PURE;
+ STDMETHOD(RecordCreateCopy)(THIS_ PVOID,PVOID*) PURE;
+ STDMETHOD(RecordDestroy )(THIS_ PVOID) PURE;
+};
+#undef INTERFACE
+
+#ifdef COBJMACROS
+#define IRecordInfo_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IRecordInfo_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IRecordInfo_Release(p) (p)->lpVtbl->Release(p)
+#define IRecordInfo_RecordInit(p,a) (p)->lpVtbl->RecordInit(p,a)
+#define IRecordInfo_RecordClear(p,a) (p)->lpVtbl->RecordClear(p,a)
+#define IRecordInfo_RecordCopy(p,a,b) (p)->lpVtbl->RecordCopy(p,a,b)
+#define IRecordInfo_GetGuid(p,a) (p)->lpVtbl->GetGuid(p,a)
+#define IRecordInfo_GetName(p,a) (p)->lpVtbl->GetName(p,a)
+#define IRecordInfo_GetSize(p,a) (p)->lpVtbl->GetSize(p,a)
+#define IRecordInfo_GetTypeInfo(p,a) (p)->lpVtbl->GetTypeInfo(p,a)
+#define IRecordInfo_GetField(p,a,b,c) (p)->lpVtbl->GetField(p,a,b,c)
+#define IRecordInfo_GetFieldNoCopy(p,a,b,c,d) (p)->lpVtbl->GetFieldNoCopy(p,a,b,c,d)
+#define IRecordInfo_PutField(p,a,b,c,d) (p)->lpVtbl->PutField(p,a,b,c,d)
+#define IRecordInfo_PutFieldNoCopy(p,a,b,c,d) (p)->lpVtbl->PutFieldNoCopy(p,a,b,c,d)
+#define IRecordInfo_GetFieldNames(p,a,b) (p)->lpVtbl->GetFieldNames(p,a,b)
+#define IRecordInfo_IsMatchingType(p,a) (p)->lpVtbl->IsMatchingType(p,a)
+#define IRecordInfo_RecordCreate(p) (p)->lpVtbl->RecordCreate(p)
+#define IRecordInfo_RecordCreateCopy(p,a,b) (p)->lpVtbl->RecordCreateCopy(p,a,b)
+#define IRecordInfo_RecordDestroy(p,a) (p)->lpVtbl->RecordDestroy(p,a)
+#endif
+
+EXTERN_C const IID IID_ITypeMarshal;
+#define INTERFACE ITypeMarshal
+DECLARE_INTERFACE_(ITypeMarshal, IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(Size)(THIS_ PVOID,DWORD,PVOID,ULONG*) PURE;
+ STDMETHOD(Marshal)(THIS_ PVOID,DWORD,PVOID,ULONG,BYTE*,ULONG*) PURE;
+ STDMETHOD(Unmarshal)(THIS_ PVOID,DWORD,ULONG,BYTE*,ULONG*) PURE;
+ STDMETHOD(Free)(THIS_ PVOID) PURE;
+};
+#undef INTERFACE
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/objbase.h b/tcc/include/winapi/objbase.h
new file mode 100644
index 0000000..71d1097
--- /dev/null
+++ b/tcc/include/winapi/objbase.h
@@ -0,0 +1,203 @@
+/* Include here to prevent circular dependencies if windows.h
+ not already included */
+#include <rpc.h>
+#include <rpcndr.h>
+
+#ifndef _OBJBASE_H
+#define _OBJBASE_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#include <stdlib.h>
+#pragma pack(push,8)
+#include <basetyps.h>
+
+#define WINOLEAPI STDAPI
+#define WINOLEAPI_(type) STDAPI_(type)
+#define FARSTRUCT
+#define HUGEP
+#define LISet32(li,v) ((li).HighPart=(v)<0?-1:0,(li).LowPart=(v))
+#define ULISet32(li,v) ((li).HighPart=0,(li).LowPart=(v))
+#define CLSCTX_ALL (CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER|CLSCTX_LOCAL_SERVER)
+#define CLSCTX_INPROC (CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER)
+#define CLSCTX_SERVER (CLSCTX_INPROC_SERVER|CLSCTX_LOCAL_SERVER|CLSCTX_REMOTE_SERVER)
+#define MARSHALINTERFACE_MIN 500
+#define CWCSTORAGENAME 32
+#define STGM_DIRECT 0
+#define STGM_TRANSACTED 0x10000L
+#define STGM_SIMPLE 0x8000000L
+#define STGM_READ 0
+#define STGM_WRITE 1
+#define STGM_READWRITE 2
+#define STGM_SHARE_DENY_NONE 0x40
+#define STGM_SHARE_DENY_READ 0x30
+#define STGM_SHARE_DENY_WRITE 0x20
+#define STGM_SHARE_EXCLUSIVE 0x10
+#define STGM_PRIORITY 0x40000L
+#define STGM_DELETEONRELEASE 0x4000000
+#define STGM_NOSCRATCH 0x100000
+#define STGM_CREATE 0x1000
+#define STGM_CONVERT 0x20000
+#define STGM_NOSNAPSHOT 0x200000
+#define STGM_FAILIFTHERE 0
+#define CWCSTORAGENAME 32
+#define ASYNC_MODE_COMPATIBILITY 1
+#define ASYNC_MODE_DEFAULT 0
+#define STGTY_REPEAT 256
+#define STG_TOEND 0xFFFFFFFF
+#define STG_LAYOUT_SEQUENTIAL 0
+#define STG_LAYOUT_INTERLEAVED 1
+#define COM_RIGHTS_EXECUTE 1
+#define COM_RIGHTS_SAFE_FOR_SCRIPTING 2
+#define STGOPTIONS_VERSION 2
+typedef enum tagSTGFMT {
+ STGFMT_STORAGE = 0,
+ STGFMT_FILE = 3,
+ STGFMT_ANY = 4,
+ STGFMT_DOCFILE = 5
+} STGFMT;
+typedef struct tagSTGOPTIONS {
+ USHORT usVersion;
+ USHORT reserved;
+ ULONG ulSectorSize;
+ const WCHAR *pwcsTemplateFile;
+} STGOPTIONS;
+typedef enum tagREGCLS {
+ REGCLS_SINGLEUSE = 0,
+ REGCLS_MULTIPLEUSE = 1,
+ REGCLS_MULTI_SEPARATE = 2
+} REGCLS;
+#include <wtypes.h>
+#include <unknwn.h>
+#include <objidl.h>
+
+#ifdef __cplusplus
+inline BOOL IsEqualGUID(REFGUID rguid1, REFGUID rguid2)
+ { return !memcmp(&rguid1, &rguid2, sizeof(GUID)); }
+inline BOOL operator==(const GUID& guidOne, const GUID& guidOther)
+ { return !memcmp(&guidOne,&guidOther,sizeof(GUID)); }
+inline BOOL operator!=(const GUID& g1, const GUID& g2)
+ { return !(g1 == g2); }
+#else
+#define IsEqualGUID(rguid1, rguid2) (!memcmp(rguid1, rguid2, sizeof(GUID)))
+#endif
+#define IsEqualIID(id1,id2) IsEqualGUID(id1,id2)
+#define IsEqualCLSID(id1,id2) IsEqualGUID(id1,id2)
+#include <cguid.h>
+
+typedef enum tagCOINIT {
+ COINIT_APARTMENTTHREADED = 0x2,
+ COINIT_MULTITHREADED = 0x0,
+ COINIT_DISABLE_OLE1DDE = 0x4,
+ COINIT_SPEED_OVER_MEMORY = 0x8
+} COINIT;
+typedef enum tagSTDMSHLFLAGS {
+ SMEXF_SERVER = 0x01,
+ SMEXF_HANDLER = 0x02
+} STDMSHLFLAGS;
+
+WINOLEAPI_(DWORD) CoBuildVersion(void);
+WINOLEAPI CoInitialize(PVOID);
+WINOLEAPI CoInitializeEx(LPVOID,DWORD);
+WINOLEAPI_(void) CoUninitialize(void);
+WINOLEAPI CoGetMalloc(DWORD,LPMALLOC*);
+WINOLEAPI_(DWORD) CoGetCurrentProcess(void);
+WINOLEAPI CoRegisterMallocSpy(LPMALLOCSPY);
+WINOLEAPI CoRevokeMallocSpy(void);
+WINOLEAPI CoCreateStandardMalloc(DWORD,IMalloc**);
+#ifdef DBG
+WINOLEAPI_(ULONG) DebugCoGetRpcFault(void);
+WINOLEAPI_(void) DebugCoSetRpcFault(ULONG);
+#endif
+WINOLEAPI CoGetClassObject(REFCLSID,DWORD,COSERVERINFO*,REFIID,PVOID*);
+WINOLEAPI CoRegisterClassObject(REFCLSID,LPUNKNOWN,DWORD,DWORD,PDWORD);
+WINOLEAPI CoRevokeClassObject(DWORD);
+WINOLEAPI CoGetMarshalSizeMax(ULONG*,REFIID,LPUNKNOWN,DWORD,PVOID,DWORD);
+WINOLEAPI CoMarshalInterface(LPSTREAM,REFIID,LPUNKNOWN,DWORD,PVOID,DWORD);
+WINOLEAPI CoUnmarshalInterface(LPSTREAM,REFIID,PVOID*);
+WINOLEAPI CoMarshalHresult(LPSTREAM,HRESULT);
+WINOLEAPI CoUnmarshalHresult(LPSTREAM,HRESULT*);
+WINOLEAPI CoReleaseMarshalData(LPSTREAM);
+WINOLEAPI CoDisconnectObject(LPUNKNOWN,DWORD);
+WINOLEAPI CoLockObjectExternal(LPUNKNOWN,BOOL,BOOL);
+WINOLEAPI CoGetStandardMarshal(REFIID,LPUNKNOWN,DWORD,PVOID,DWORD,LPMARSHAL*);
+WINOLEAPI CoGetStdMarshalEx(LPUNKNOWN,DWORD,LPUNKNOWN*);
+WINOLEAPI_(BOOL) CoIsHandlerConnected(LPUNKNOWN);
+WINOLEAPI_(BOOL) CoHasStrongExternalConnections(LPUNKNOWN);
+WINOLEAPI CoMarshalInterThreadInterfaceInStream(REFIID,LPUNKNOWN,LPSTREAM*);
+WINOLEAPI CoGetInterfaceAndReleaseStream(LPSTREAM,REFIID,PVOID*);
+WINOLEAPI CoCreateFreeThreadedMarshaler(LPUNKNOWN,LPUNKNOWN*);
+WINOLEAPI_(HINSTANCE) CoLoadLibrary(LPOLESTR,BOOL);
+WINOLEAPI_(void) CoFreeLibrary(HINSTANCE);
+WINOLEAPI_(void) CoFreeAllLibraries(void);
+WINOLEAPI_(void) CoFreeUnusedLibraries(void);
+WINOLEAPI CoCreateInstance(REFCLSID,LPUNKNOWN,DWORD,REFIID,PVOID*);
+WINOLEAPI CoCreateInstanceEx(REFCLSID,IUnknown*,DWORD,COSERVERINFO*,DWORD,MULTI_QI*);
+WINOLEAPI StringFromCLSID(REFCLSID,LPOLESTR*);
+WINOLEAPI CLSIDFromString(LPOLESTR,LPCLSID);
+WINOLEAPI StringFromIID(REFIID,LPOLESTR*);
+WINOLEAPI IIDFromString(LPOLESTR,LPIID);
+WINOLEAPI_(BOOL) CoIsOle1Class(REFCLSID);
+WINOLEAPI ProgIDFromCLSID(REFCLSID,LPOLESTR*);
+WINOLEAPI CLSIDFromProgID(LPCOLESTR,LPCLSID);
+WINOLEAPI_(int) StringFromGUID2(REFGUID,LPOLESTR,int);
+WINOLEAPI CoCreateGuid(GUID*);
+WINOLEAPI_(BOOL) CoFileTimeToDosDateTime(FILETIME*,LPWORD,LPWORD);
+WINOLEAPI_(BOOL) CoDosDateTimeToFileTime(WORD,WORD,FILETIME*);
+WINOLEAPI CoFileTimeNow(FILETIME*);
+WINOLEAPI CoRegisterMessageFilter(LPMESSAGEFILTER,LPMESSAGEFILTER*);
+WINOLEAPI CoGetTreatAsClass(REFCLSID,LPCLSID);
+WINOLEAPI CoTreatAsClass(REFCLSID,REFCLSID);
+typedef HRESULT (STDAPICALLTYPE *LPFNGETCLASSOBJECT)(REFCLSID,REFIID,PVOID*);
+typedef HRESULT (STDAPICALLTYPE *LPFNCANUNLOADNOW)(void);
+STDAPI DllGetClassObject(REFCLSID,REFIID,PVOID*);
+STDAPI DllCanUnloadNow(void);
+WINOLEAPI_(PVOID) CoTaskMemAlloc(ULONG);
+WINOLEAPI_(PVOID) CoTaskMemRealloc(PVOID,ULONG);
+WINOLEAPI_(void) CoTaskMemFree(PVOID);
+WINOLEAPI CreateDataAdviseHolder(LPDATAADVISEHOLDER*);
+WINOLEAPI CreateDataCache(LPUNKNOWN,REFCLSID,REFIID,PVOID*);
+WINOLEAPI StgCreateDocfile(const OLECHAR*,DWORD,DWORD,IStorage**);
+WINOLEAPI StgCreateDocfileOnILockBytes(ILockBytes*,DWORD,DWORD,IStorage**);
+WINOLEAPI StgOpenStorage(const OLECHAR*,IStorage*,DWORD,SNB,DWORD,IStorage**);
+WINOLEAPI StgOpenStorageOnILockBytes(ILockBytes*,IStorage*,DWORD,SNB,DWORD,IStorage**);
+WINOLEAPI StgIsStorageFile(const OLECHAR*);
+WINOLEAPI StgIsStorageILockBytes(ILockBytes*);
+WINOLEAPI StgSetTimes(OLECHAR const*,FILETIME const*,FILETIME const*,FILETIME const*);
+WINOLEAPI StgCreateStorageEx(const WCHAR*,DWORD,DWORD,DWORD,STGOPTIONS*,void*,REFIID,void**);
+WINOLEAPI StgOpenStorageEx(const WCHAR*,DWORD,DWORD,DWORD,STGOPTIONS*,void*,REFIID,void**);
+WINOLEAPI BindMoniker(LPMONIKER,DWORD,REFIID,PVOID*);
+WINOLEAPI CoGetObject(LPCWSTR,BIND_OPTS*,REFIID,void**);
+WINOLEAPI MkParseDisplayName(LPBC,LPCOLESTR,ULONG*,LPMONIKER*);
+WINOLEAPI MonikerRelativePathTo(LPMONIKER,LPMONIKER,LPMONIKER*,BOOL);
+WINOLEAPI MonikerCommonPrefixWith(LPMONIKER,LPMONIKER,LPMONIKER*);
+WINOLEAPI CreateBindCtx(DWORD,LPBC*);
+WINOLEAPI CreateGenericComposite(LPMONIKER,LPMONIKER,LPMONIKER*);
+WINOLEAPI GetClassFile (LPCOLESTR,CLSID*);
+WINOLEAPI CreateFileMoniker(LPCOLESTR,LPMONIKER*);
+WINOLEAPI CreateItemMoniker(LPCOLESTR,LPCOLESTR,LPMONIKER*);
+WINOLEAPI CreateAntiMoniker(LPMONIKER*);
+WINOLEAPI CreatePointerMoniker(LPUNKNOWN,LPMONIKER*);
+WINOLEAPI GetRunningObjectTable(DWORD,LPRUNNINGOBJECTTABLE*);
+WINOLEAPI CoInitializeSecurity(PSECURITY_DESCRIPTOR,LONG,SOLE_AUTHENTICATION_SERVICE*, void*,DWORD,DWORD,void*,DWORD,void*);
+WINOLEAPI CoGetCallContext(REFIID,void**);
+WINOLEAPI CoQueryProxyBlanket(IUnknown*, DWORD*,DWORD*,OLECHAR**,DWORD*,DWORD*,RPC_AUTH_IDENTITY_HANDLE*,DWORD*);
+WINOLEAPI CoSetProxyBlanket(IUnknown*,DWORD,DWORD,OLECHAR*,DWORD,DWORD,RPC_AUTH_IDENTITY_HANDLE, DWORD);
+WINOLEAPI CoCopyProxy(IUnknown*,IUnknown**);
+WINOLEAPI CoQueryClientBlanket(DWORD*,DWORD*,OLECHAR**, DWORD*,DWORD*,RPC_AUTHZ_HANDLE*,DWORD*);
+WINOLEAPI CoImpersonateClient(void);
+WINOLEAPI CoRevertToSelf(void);
+WINOLEAPI CoQueryAuthenticationServices(DWORD*, SOLE_AUTHENTICATION_SERVICE**);
+WINOLEAPI CoSwitchCallContext(IUnknown*,IUnknown**);
+WINOLEAPI CoGetInstanceFromFile(COSERVERINFO*, CLSID*,IUnknown*,DWORD,DWORD,OLECHAR*,DWORD,MULTI_QI*);
+WINOLEAPI CoGetInstanceFromIStorage(COSERVERINFO*,CLSID*, IUnknown*,DWORD,struct IStorage*, DWORD,MULTI_QI*);
+WINOLEAPI_(ULONG) CoAddRefServerProcess(void);
+WINOLEAPI_(ULONG) CoReleaseServerProcess(void);
+WINOLEAPI CoResumeClassObjects(void);
+WINOLEAPI CoSuspendClassObjects(void);
+WINOLEAPI CoGetPSClsid(REFIID,CLSID*);
+WINOLEAPI CoRegisterPSClsid(REFIID,REFCLSID);
+
+#pragma pack(pop)
+#endif
diff --git a/tcc/include/winapi/objfwd.h b/tcc/include/winapi/objfwd.h
new file mode 100644
index 0000000..41d80d6
--- /dev/null
+++ b/tcc/include/winapi/objfwd.h
@@ -0,0 +1,57 @@
+#ifndef _OBJFWD_H
+#define _OBJFWD_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#include <basetyps.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+typedef _COM_interface IMoniker *LPMONIKER;
+typedef _COM_interface IStream *LPSTREAM;
+typedef _COM_interface IMarshal *LPMARSHAL;
+typedef _COM_interface IMalloc *LPMALLOC;
+typedef _COM_interface IMallocSpy *LPMALLOCSPY;
+typedef _COM_interface IMessageFilter *LPMESSAGEFILTER;
+typedef _COM_interface IPersist *LPPERSIST;
+typedef _COM_interface IPersistStream *LPPERSISTSTREAM;
+typedef _COM_interface IRunningObjectTable *LPRUNNINGOBJECTTABLE;
+typedef _COM_interface IBindCtx *LPBINDCTX,*LPBC;
+typedef _COM_interface IAdviseSink *LPADVISESINK;
+typedef _COM_interface IAdviseSink2 *LPADVISESINK2;
+typedef _COM_interface IDataObject *LPDATAOBJECT;
+typedef _COM_interface IDataAdviseHolder *LPDATAADVISEHOLDER;
+typedef _COM_interface IEnumMoniker *LPENUMMONIKER;
+typedef _COM_interface IEnumFORMATETC *LPENUMFORMATETC;
+typedef _COM_interface IEnumSTATDATA *LPENUMSTATDATA;
+typedef _COM_interface IEnumSTATSTG *LPENUMSTATSTG;
+typedef _COM_interface IEnumSTATPROPSTG LPENUMSTATPROPSTG;
+typedef _COM_interface IEnumString *LPENUMSTRING;
+typedef _COM_interface IEnumUnknown *LPENUMUNKNOWN;
+typedef _COM_interface IStorage *LPSTORAGE;
+typedef _COM_interface IPersistStorage *LPPERSISTSTORAGE;
+typedef _COM_interface ILockBytes *LPLOCKBYTES;
+typedef _COM_interface IStdMarshalInfo *LPSTDMARSHALINFO;
+typedef _COM_interface IExternalConnection *LPEXTERNALCONNECTION;
+typedef _COM_interface IRunnableObject *LPRUNNABLEOBJECT;
+typedef _COM_interface IROTData *LPROTDATA;
+typedef _COM_interface IPersistFile *LPPERSISTFILE;
+typedef _COM_interface IRootStorage *LPROOTSTORAGE;
+typedef _COM_interface IRpcChannelBuffer *LPRPCCHANNELBUFFER;
+typedef _COM_interface IRpcProxyBuffer *LPRPCPROXYBUFFER;
+typedef _COM_interface IRpcStubBuffer *LPRPCSTUBBUFFER;
+typedef _COM_interface IPropertyStorage *LPPROPERTYSTORAGE;
+typedef _COM_interface IEnumSTATPROPSETSTG *LPENUMSTATPROPSETSTG;
+typedef _COM_interface IPropertySetStorage *LPPROPERTYSETSTORAGE;
+typedef _COM_interface IClientSecurity *LPCLIENTSECURITY;
+typedef _COM_interface IServerSecurity *LPSERVERSECURITY;
+typedef _COM_interface IClassActivator *LPCLASSACTIVATOR;
+typedef _COM_interface IFillLockBytes *LPFILLLOCKBYTES;
+typedef _COM_interface IProgressNotify *LPPROGRESSNOTIFY;
+typedef _COM_interface ILayoutStorage *LPLAYOUTSTORAGE;
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/objidl.h b/tcc/include/winapi/objidl.h
new file mode 100644
index 0000000..8d70404
--- /dev/null
+++ b/tcc/include/winapi/objidl.h
@@ -0,0 +1,1771 @@
+#ifndef _OBJIDL_H
+#define _OBJIDL_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#include <objfwd.h>
+
+#define PIDSI_TITLE 0x00000002
+#define PIDSI_SUBJECT 0x00000003
+#define PIDSI_AUTHOR 0x00000004
+#define PIDSI_KEYWORDS 0x00000005
+#define PIDSI_COMMENTS 0x00000006
+#define PIDSI_TEMPLATE 0x00000007
+#define PIDSI_LASTAUTHOR 0x00000008
+#define PIDSI_REVNUMBER 0x00000009
+#define PIDSI_EDITTIME 0x0000000A
+#define PIDSI_LASTPRINTED 0x0000000B
+#define PIDSI_CREATE_DTM 0x0000000C
+#define PIDSI_LASTSAVE_DTM 0x0000000D
+#define PIDSI_PAGECOUNT 0x0000000E
+#define PIDSI_WORDCOUNT 0x0000000F
+#define PIDSI_CHARCOUNT 0x00000010
+#define PIDSI_THUMBNAIL 0x00000011
+#define PIDSI_APPNAME 0x00000012
+#define PIDSI_DOC_SECURITY 0x00000013
+#define PIDDSI_CATEGORY 0x00000002
+#define PIDDSI_PRESFORMAT 0x00000003
+#define PIDDSI_BYTECOUNT 0x00000004
+#define PIDDSI_LINECOUNT 0x00000005
+#define PIDDSI_PARCOUNT 0x00000006
+#define PIDDSI_SLIDECOUNT 0x00000007
+#define PIDDSI_NOTECOUNT 0x00000008
+#define PIDDSI_HIDDENCOUNT 0x00000009
+#define PIDDSI_MMCLIPCOUNT 0x0000000A
+#define PIDDSI_SCALE 0x0000000B
+#define PIDDSI_HEADINGPAIR 0x0000000C
+#define PIDDSI_DOCPARTS 0x0000000D
+#define PIDDSI_MANAGER 0x0000000E
+#define PIDDSI_COMPANY 0x0000000F
+#define PIDDSI_LINKSDIRTY 0x00000010
+#define PRSPEC_INVALID 0xFFFFFFFF
+#define PRSPEC_LPWSTR 0x00000000
+#define PRSPEC_PROPID 0x00000001
+
+typedef struct tagSTATSTG {
+ LPOLESTR pwcsName;
+ DWORD type;
+ ULARGE_INTEGER cbSize;
+ FILETIME mtime;
+ FILETIME ctime;
+ FILETIME atime;
+ DWORD grfMode;
+ DWORD grfLocksSupported;
+ CLSID clsid;
+ DWORD grfStateBits;
+ DWORD reserved;
+} STATSTG;
+typedef enum tagSTGTY {
+ STGTY_STORAGE=1,
+ STGTY_STREAM,
+ STGTY_LOCKBYTES,
+ STGTY_PROPERTY
+} STGTY;
+typedef enum tagSTREAM_SEEK {
+ STREAM_SEEK_SET,
+ STREAM_SEEK_CUR,
+ STREAM_SEEK_END
+} STREAM_SEEK;
+typedef struct tagINTERFACEINFO {
+ LPUNKNOWN pUnk;
+ IID iid;
+ WORD wMethod;
+} INTERFACEINFO,*LPINTERFACEINFO;
+typedef enum tagCALLTYPE {
+ CALLTYPE_TOPLEVEL=1,
+ CALLTYPE_NESTED,
+ CALLTYPE_ASYNC,
+ CALLTYPE_TOPLEVEL_CALLPENDING,
+ CALLTYPE_ASYNC_CALLPENDING
+} CALLTYPE;
+typedef enum tagPENDINGTYPE {
+ PENDINGTYPE_TOPLEVEL=1,
+ PENDINGTYPE_NESTED
+} PENDINGTYPE;
+typedef enum tagPENDINGMSG {
+ PENDINGMSG_CANCELCALL=0,
+ PENDINGMSG_WAITNOPROCESS,
+ PENDINGMSG_WAITDEFPROCESS
+} PENDINGMSG;
+typedef OLECHAR **SNB;
+typedef enum tagDATADIR {
+ DATADIR_GET=1,
+ DATADIR_SET
+} DATADIR;
+typedef WORD CLIPFORMAT,*LPCLIPFORMAT;
+typedef struct tagDVTARGETDEVICE {
+ DWORD tdSize;
+ WORD tdDriverNameOffset;
+ WORD tdDeviceNameOffset;
+ WORD tdPortNameOffset;
+ WORD tdExtDevmodeOffset;
+ BYTE tdData[1];
+} DVTARGETDEVICE;
+typedef struct tagFORMATETC {
+ CLIPFORMAT cfFormat;
+ DVTARGETDEVICE*ptd;
+ DWORD dwAspect;
+ LONG lindex;
+ DWORD tymed;
+} FORMATETC,*LPFORMATETC;
+typedef struct tagRemSTGMEDIUM {
+ DWORD tymed;
+ DWORD dwHandleType;
+ ULONG pData;
+ unsigned long pUnkForRelease;
+ unsigned long cbData;
+ BYTE data[1];
+} RemSTGMEDIUM;
+typedef struct tagHLITEM {
+ ULONG uHLID;
+ LPWSTR pwzFriendlyName;
+} HLITEM;
+typedef struct tagSTATDATA {
+ FORMATETC formatetc;
+ DWORD grfAdvf;
+ struct IAdviseSink *pAdvSink;
+ DWORD dwConnection;
+} STATDATA;
+typedef struct tagSTATPROPSETSTG {
+ FMTID fmtid;
+ CLSID clsid;
+ DWORD grfFlags;
+ FILETIME mtime;
+ FILETIME ctime;
+ FILETIME atime;
+} STATPROPSETSTG;
+typedef enum tagEXTCONN {
+ EXTCONN_STRONG=1,
+ EXTCONN_WEAK=2,
+ EXTCONN_CALLABLE=4
+} EXTCONN;
+typedef struct tagMULTI_QI {
+ const IID *pIID;
+ IUnknown *pItf;
+ HRESULT hr;
+} MULTI_QI;
+typedef struct _AUTH_IDENTITY {
+ USHORT *User;
+ ULONG UserLength;
+ USHORT *Domain;
+ ULONG DomainLength;
+ USHORT *Password;
+ ULONG PasswordLength;
+ ULONG Flags;
+} AUTH_IDENTITY;
+typedef struct _COAUTHINFO{
+ DWORD dwAuthnSvc;
+ DWORD dwAuthzSvc;
+ LPWSTR pwszServerPrincName;
+ DWORD dwAuthnLevel;
+ DWORD dwImpersonationLevel;
+ AUTH_IDENTITY *pAuthIdentityData;
+ DWORD dwCapabilities;
+} COAUTHINFO;
+typedef struct _COSERVERINFO {
+ DWORD dwReserved1;
+ LPWSTR pwszName;
+ COAUTHINFO *pAuthInfo;
+ DWORD dwReserved2;
+} COSERVERINFO;
+typedef struct tagBIND_OPTS {
+ DWORD cbStruct;
+ DWORD grfFlags;
+ DWORD grfMode;
+ DWORD dwTickCountDeadline;
+} BIND_OPTS,*LPBIND_OPTS;
+typedef struct tagBIND_OPTS2 {
+ DWORD cbStruct;
+ DWORD grfFlags;
+ DWORD grfMode;
+ DWORD dwTickCountDeadline;
+ DWORD dwTrackFlags;
+ DWORD dwClassContext;
+ LCID locale;
+ COSERVERINFO *pServerInfo;
+} BIND_OPTS2,*LPBIND_OPTS2;
+typedef enum tagBIND_FLAGS {
+ BIND_MAYBOTHERUSER=1,
+ BIND_JUSTTESTEXISTENCE
+} BIND_FLAGS;
+typedef struct tagSTGMEDIUM {
+ DWORD tymed;
+ _ANONYMOUS_UNION union {
+ HBITMAP hBitmap;
+ PVOID hMetaFilePict;
+ HENHMETAFILE hEnhMetaFile;
+ HGLOBAL hGlobal;
+ LPWSTR lpszFileName;
+ LPSTREAM pstm;
+ LPSTORAGE pstg;
+ } DUMMYUNIONNAME;
+ LPUNKNOWN pUnkForRelease;
+} STGMEDIUM,*LPSTGMEDIUM;
+typedef enum tagLOCKTYPE {
+ LOCK_WRITE=1,
+ LOCK_EXCLUSIVE=2,
+ LOCK_ONLYONCE=4
+} LOCKTYPE;
+typedef unsigned long RPCOLEDATAREP;
+typedef struct tagRPCOLEMESSAGE {
+ PVOID reserved1;
+ RPCOLEDATAREP dataRepresentation;
+ PVOID Buffer;
+ ULONG cbBuffer;
+ ULONG iMethod;
+ PVOID reserved2[5];
+ ULONG rpcFlags;
+} RPCOLEMESSAGE, *PRPCOLEMESSAGE;
+typedef enum tagMKSYS {
+ MKSYS_NONE,
+ MKSYS_GENERICCOMPOSITE,
+ MKSYS_FILEMONIKER,
+ MKSYS_ANTIMONIKER,
+ MKSYS_ITEMMONIKER,
+ MKSYS_POINTERMONIKER
+} MKSYS;
+typedef enum tagMKREDUCE {
+ MKRREDUCE_ALL,
+ MKRREDUCE_ONE=196608,
+ MKRREDUCE_TOUSER=131072,
+ MKRREDUCE_THROUGHUSER=65536
+} MKRREDUCE;
+typedef struct tagRemSNB {
+ unsigned long ulCntStr;
+ unsigned long ulCntChar;
+ OLECHAR rgString[1];
+} RemSNB;
+typedef enum tagADVF {
+ ADVF_NODATA=1,ADVF_PRIMEFIRST=2,ADVF_ONLYONCE=4,ADVF_DATAONSTOP=64,
+ ADVFCACHE_NOHANDLER=8,ADVFCACHE_FORCEBUILTIN=16,ADVFCACHE_ONSAVE=32
+} ADVF;
+typedef enum tagTYMED {
+ TYMED_HGLOBAL=1,TYMED_FILE=2,TYMED_ISTREAM=4,TYMED_ISTORAGE=8,
+ TYMED_GDI=16,TYMED_MFPICT=32,TYMED_ENHMF=64,TYMED_NULL=0
+} TYMED;
+typedef enum tagSERVERCALL {
+ SERVERCALL_ISHANDLED,SERVERCALL_REJECTED,SERVERCALL_RETRYLATER
+} SERVERCALL;
+typedef struct tagCAUB {
+ ULONG cElems;
+ unsigned char *pElems;
+}CAUB;
+typedef struct tagCAI {
+ ULONG cElems;
+ short *pElems;
+}CAI;
+typedef struct tagCAUI {
+ ULONG cElems;
+ USHORT *pElems;
+}CAUI;
+typedef struct tagCAL {
+ ULONG cElems;
+ long *pElems;
+}CAL;
+typedef struct tagCAUL {
+ ULONG cElems;
+ ULONG *pElems;
+}CAUL;
+typedef struct tagCAFLT {
+ ULONG cElems;
+ float *pElems;
+}CAFLT;
+typedef struct tagCADBL {
+ ULONG cElems;
+ double *pElems;
+}CADBL;
+typedef struct tagCACY {
+ ULONG cElems;
+ CY *pElems;
+}CACY;
+typedef struct tagCADATE {
+ ULONG cElems;
+ DATE *pElems;
+}CADATE;
+typedef struct tagCABSTR {
+ ULONG cElems;
+ BSTR *pElems;
+}CABSTR;
+typedef struct tagCABSTRBLOB {
+ ULONG cElems;
+ BSTRBLOB *pElems;
+}CABSTRBLOB;
+typedef struct tagCABOOL {
+ ULONG cElems;
+ VARIANT_BOOL *pElems;
+}CABOOL;
+typedef struct tagCASCODE {
+ ULONG cElems;
+ SCODE *pElems;
+}CASCODE;
+typedef struct tagCAH {
+ ULONG cElems;
+ LARGE_INTEGER *pElems;
+}CAH;
+typedef struct tagCAUH {
+ ULONG cElems;
+ ULARGE_INTEGER *pElems;
+}CAUH;
+typedef struct tagCALPSTR {
+ ULONG cElems;
+ LPSTR *pElems;
+}CALPSTR;
+typedef struct tagCALPWSTR {
+ ULONG cElems;
+ LPWSTR *pElems;
+}CALPWSTR;
+typedef struct tagCAFILETIME {
+ ULONG cElems;
+ FILETIME *pElems;
+}CAFILETIME;
+typedef struct tagCACLIPDATA {
+ ULONG cElems;
+ CLIPDATA *pElems;
+}CACLIPDATA;
+typedef struct tagCACLSID {
+ ULONG cElems;
+ CLSID *pElems;
+}CACLSID;
+typedef struct tagPROPVARIANT *LPPROPVARIANT;
+typedef struct tagCAPROPVARIANT {
+ ULONG cElems;
+ LPPROPVARIANT pElems;
+}CAPROPVARIANT;
+typedef struct tagPROPVARIANT {
+ VARTYPE vt;
+ WORD wReserved1;
+ WORD wReserved2;
+ WORD wReserved3;
+ _ANONYMOUS_UNION union {
+ CHAR cVal;
+ UCHAR bVal;
+ short iVal;
+ USHORT uiVal;
+ VARIANT_BOOL boolVal;
+#if 0
+/* bool is a standard type in C++, and a standard macro expanding
+ to the _Bool type in C99 (see stdbool.h) */
+ _VARIANT_BOOL bool;
+#endif
+ long lVal;
+ ULONG ulVal;
+ float fltVal;
+ SCODE scode;
+ LARGE_INTEGER hVal;
+ ULARGE_INTEGER uhVal;
+ double dblVal;
+ CY cyVal;
+ DATE date;
+ FILETIME filetime;
+ CLSID *puuid;
+ BLOB blob;
+ CLIPDATA *pclipdata;
+ LPSTREAM pStream;
+ LPSTORAGE pStorage;
+ BSTR bstrVal;
+ BSTRBLOB bstrblobVal;
+ LPSTR pszVal;
+ LPWSTR pwszVal;
+ CAUB caub;
+ CAI cai;
+ CAUI caui;
+ CABOOL cabool;
+ CAL cal;
+ CAUL caul;
+ CAFLT caflt;
+ CASCODE cascode;
+ CAH cah;
+ CAUH cauh;
+ CADBL cadbl;
+ CACY cacy;
+ CADATE cadate;
+ CAFILETIME cafiletime;
+ CACLSID cauuid;
+ CACLIPDATA caclipdata;
+ CABSTR cabstr;
+ CABSTRBLOB cabstrblob;
+ CALPSTR calpstr;
+ CALPWSTR calpwstr;
+ CAPROPVARIANT capropvar;
+ } DUMMYUNIONNAME;
+} PROPVARIANT;
+typedef struct tagPROPSPEC {
+ ULONG ulKind;
+ _ANONYMOUS_UNION union {
+ PROPID propid;
+ LPOLESTR lpwstr;
+ } DUMMYUNIONNAME;
+}PROPSPEC;
+typedef struct tagSTATPROPSTG {
+ LPOLESTR lpwstrName;
+ PROPID propid;
+ VARTYPE vt;
+} STATPROPSTG;
+typedef enum PROPSETFLAG {
+ PROPSETFLAG_DEFAULT,PROPSETFLAG_NONSIMPLE,PROPSETFLAG_ANSI,
+ PROPSETFLAG_UNBUFFERED=4
+} PROPSETFLAG;
+typedef struct tagSTORAGELAYOUT {
+ DWORD LayoutType;
+ OLECHAR* pwcsElementName;
+ LARGE_INTEGER cOffset;
+ LARGE_INTEGER cBytes;
+} STORAGELAYOUT;
+typedef struct tagSOLE_AUTHENTICATION_SERVICE {
+ DWORD dwAuthnSvc;
+ DWORD dwAuthzSvc;
+ OLECHAR *pPrincipalName;
+ HRESULT hr;
+} SOLE_AUTHENTICATION_SERVICE;
+#define COLE_DEFAULT_PRINCIPAL ( ( OLECHAR* )-1 )
+typedef enum tagEOLE_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
+} EOLE_AUTHENTICATION_CAPABILITIES;
+typedef struct tagSOLE_AUTHENTICATION_INFO {
+ DWORD dwAuthnSvc;
+ DWORD dwAuthzSvc;
+ void* pAuthInfo;
+} SOLE_AUTHENTICATION_INFO;
+#define COLE_DEFAULT_AUTHINFO ( ( void* )-1 )
+typedef struct tagSOLE_AUTHENTICATION_LIST {
+ DWORD cAuthInfo;
+ SOLE_AUTHENTICATION_INFO* aAuthInfo;
+} SOLE_AUTHENTICATION_LIST;
+
+EXTERN_C const FMTID FMTID_SummaryInformation;
+EXTERN_C const FMTID FMTID_DocSummaryInformation;
+EXTERN_C const FMTID FMTID_UserDefinedProperties;
+
+DECLARE_ENUMERATOR(FORMATETC);
+DECLARE_ENUMERATOR(HLITEM);
+DECLARE_ENUMERATOR(STATDATA);
+DECLARE_ENUMERATOR(STATPROPSETSTG);
+DECLARE_ENUMERATOR(STATPROPSTG);
+DECLARE_ENUMERATOR(STATSTG);
+DECLARE_ENUMERATOR_(IEnumString,LPOLESTR);
+DECLARE_ENUMERATOR_(IEnumMoniker,_COM_interface IMoniker*);
+DECLARE_ENUMERATOR_(IEnumUnknown,IUnknown*);
+
+EXTERN_C const IID IID_ISequentialStream;
+#define INTERFACE ISequentialStream
+DECLARE_INTERFACE_(ISequentialStream,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(Read)(THIS_ void*,ULONG,ULONG*) PURE;
+ STDMETHOD(Write)(THIS_ void const*,ULONG,ULONG*) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IStream;
+#define INTERFACE IStream
+DECLARE_INTERFACE_(IStream,ISequentialStream)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(Read)(THIS_ void*,ULONG,ULONG*) PURE;
+ STDMETHOD(Write)(THIS_ void const*,ULONG,ULONG*) PURE;
+ STDMETHOD(Seek)(THIS_ LARGE_INTEGER,DWORD,ULARGE_INTEGER*) PURE;
+ STDMETHOD(SetSize)(THIS_ ULARGE_INTEGER) PURE;
+ STDMETHOD(CopyTo)(THIS_ IStream*,ULARGE_INTEGER,ULARGE_INTEGER*,ULARGE_INTEGER*) PURE;
+ STDMETHOD(Commit)(THIS_ DWORD) PURE;
+ STDMETHOD(Revert)(THIS) PURE;
+ STDMETHOD(LockRegion)(THIS_ ULARGE_INTEGER,ULARGE_INTEGER,DWORD) PURE;
+ STDMETHOD(UnlockRegion)(THIS_ ULARGE_INTEGER,ULARGE_INTEGER,DWORD) PURE;
+ STDMETHOD(Stat)(THIS_ STATSTG*,DWORD) PURE;
+ STDMETHOD(Clone)(THIS_ LPSTREAM*) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IMarshal;
+#define INTERFACE IMarshal
+DECLARE_INTERFACE_(IMarshal,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetUnmarshalClass) (THIS_ REFIID,PVOID,DWORD,PVOID,DWORD,CLSID*) PURE;
+ STDMETHOD(GetMarshalSizeMax) (THIS_ REFIID,PVOID,DWORD,PVOID,PDWORD,ULONG*) PURE;
+ STDMETHOD(MarshalInterface) (THIS_ IStream*,REFIID,PVOID,DWORD,PVOID,DWORD) PURE;
+ STDMETHOD(UnmarshalInterface) (THIS_ IStream*,REFIID,void**) PURE;
+ STDMETHOD(ReleaseMarshalData) (THIS_ IStream*) PURE;
+ STDMETHOD(DisconnectObject) (THIS_ DWORD) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IStdMarshalInfo;
+#define INTERFACE IStdMarshalInfo
+DECLARE_INTERFACE_(IStdMarshalInfo,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetClassForHandler)(THIS_ DWORD,PVOID,CLSID*) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IMalloc;
+#define INTERFACE IMalloc
+DECLARE_INTERFACE_(IMalloc,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD_(void*,Alloc)(THIS_ ULONG) PURE;
+ STDMETHOD_(void*,Realloc)(THIS_ void*,ULONG) PURE;
+ STDMETHOD_(void,Free)(THIS_ void*) PURE;
+ STDMETHOD_(ULONG,GetSize)(THIS_ void*) PURE;
+ STDMETHOD_(int,DidAlloc)(THIS_ void*) PURE;
+ STDMETHOD_(void,HeapMinimize)(THIS) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IMallocSpy;
+#define INTERFACE IMallocSpy
+DECLARE_INTERFACE_(IMallocSpy,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD_(ULONG,PreAlloc)(THIS_ ULONG) PURE;
+ STDMETHOD_(void*,PostAlloc)(THIS_ void*) PURE;
+ STDMETHOD_(void*,PreFree)(THIS_ void*,BOOL) PURE;
+ STDMETHOD_(void,PostFree)(THIS_ BOOL) PURE;
+ STDMETHOD_(ULONG,PreRealloc)(THIS_ void*,ULONG,void**,BOOL) PURE;
+ STDMETHOD_(void*,PostRealloc)(THIS_ void*,BOOL) PURE;
+ STDMETHOD_(void*,PreGetSize)(THIS_ void*,BOOL) PURE;
+ STDMETHOD_(ULONG,PostGetSize)(THIS_ ULONG,BOOL) PURE;
+ STDMETHOD_(void*,PreDidAlloc)(THIS_ void*,BOOL) PURE;
+ STDMETHOD_(int,PostDidAlloc)(THIS_ void*,BOOL,int) PURE;
+ STDMETHOD_(void,PreHeapMinimize)(THIS) PURE;
+ STDMETHOD_(void,PostHeapMinimize)(THIS) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IMessageFilter;
+#define INTERFACE IMessageFilter
+DECLARE_INTERFACE_(IMessageFilter,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD_(DWORD,HandleInComingCall)(THIS_ DWORD,HTASK,DWORD,LPINTERFACEINFO) PURE;
+ STDMETHOD_(DWORD,RetryRejectedCall)(THIS_ HTASK,DWORD,DWORD) PURE;
+ STDMETHOD_(DWORD,MessagePending)(THIS_ HTASK,DWORD,DWORD) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IPersist;
+#define INTERFACE IPersist
+DECLARE_INTERFACE_(IPersist,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetClassID)(THIS_ CLSID*) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IPersistStream;
+#define INTERFACE IPersistStream
+DECLARE_INTERFACE_(IPersistStream,IPersist)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetClassID)(THIS_ LPCLSID) PURE;
+ STDMETHOD(IsDirty)(THIS) PURE;
+ STDMETHOD(Load)(THIS_ IStream*) PURE;
+ STDMETHOD(Save)(THIS_ IStream*,BOOL) PURE;
+ STDMETHOD(GetSizeMax)(THIS_ PULARGE_INTEGER) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IRunningObjectTable;
+#define INTERFACE IRunningObjectTable
+DECLARE_INTERFACE_(IRunningObjectTable,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(Register)(THIS_ DWORD,LPUNKNOWN,LPMONIKER,PDWORD) PURE;
+ STDMETHOD(Revoke)(THIS_ DWORD) PURE;
+ STDMETHOD(IsRunning)(THIS_ LPMONIKER) PURE;
+ STDMETHOD(GetObject)(THIS_ LPMONIKER,LPUNKNOWN*) PURE;
+ STDMETHOD(NoteChangeTime)(THIS_ DWORD,LPFILETIME) PURE;
+ STDMETHOD(GetTimeOfLastChange)(THIS_ LPMONIKER,LPFILETIME) PURE;
+ STDMETHOD(EnumRunning)(THIS_ IEnumMoniker**) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IBindCtx;
+#define INTERFACE IBindCtx
+DECLARE_INTERFACE_(IBindCtx,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(RegisterObjectBound)(THIS_ LPUNKNOWN) PURE;
+ STDMETHOD(RevokeObjectBound)(THIS_ LPUNKNOWN) PURE;
+ STDMETHOD(ReleaseBoundObjects)(THIS) PURE;
+ STDMETHOD(SetBindOptions)(THIS_ LPBIND_OPTS) PURE;
+ STDMETHOD(GetBindOptions)(THIS_ LPBIND_OPTS) PURE;
+ STDMETHOD(GetRunningObjectTable)(THIS_ IRunningObjectTable**) PURE;
+ STDMETHOD(RegisterObjectParam)(THIS_ LPOLESTR,IUnknown*) PURE;
+ STDMETHOD(GetObjectParam)(THIS_ LPOLESTR,IUnknown**) PURE;
+ STDMETHOD(EnumObjectParam)(THIS_ IEnumString**) PURE;
+ STDMETHOD(RevokeObjectParam)(THIS_ LPOLESTR) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IMoniker;
+#define INTERFACE IMoniker
+DECLARE_INTERFACE_(IMoniker,IPersistStream)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetClassID)(THIS_ LPCLSID) PURE;
+ STDMETHOD(IsDirty)(THIS) PURE;
+ STDMETHOD(Load)(THIS_ IStream*) PURE;
+ STDMETHOD(Save)(THIS_ IStream*,BOOL) PURE;
+ STDMETHOD(GetSizeMax)(THIS_ PULARGE_INTEGER) PURE;
+ STDMETHOD(BindToObject)(THIS_ IBindCtx*,IMoniker*,REFIID,PVOID*) PURE;
+ STDMETHOD(BindToStorage)(THIS_ IBindCtx*,IMoniker*,REFIID,PVOID*) PURE;
+ STDMETHOD(Reduce)(THIS_ IBindCtx*,DWORD,IMoniker**,IMoniker**) PURE;
+ STDMETHOD(ComposeWith)(THIS_ IMoniker*,BOOL,IMoniker**) PURE;
+ STDMETHOD(Enum)(THIS_ BOOL,IEnumMoniker**) PURE;
+ STDMETHOD(IsEqual)(THIS_ IMoniker*) PURE;
+ STDMETHOD(Hash)(THIS_ PDWORD) PURE;
+ STDMETHOD(IsRunning)(THIS_ IBindCtx*,IMoniker*,IMoniker*) PURE;
+ STDMETHOD(GetTimeOfLastChange)(THIS_ IBindCtx*,IMoniker*,LPFILETIME) PURE;
+ STDMETHOD(Inverse)(THIS_ IMoniker**) PURE;
+ STDMETHOD(CommonPrefixWith)(THIS_ IMoniker*,IMoniker**) PURE;
+ STDMETHOD(RelativePathTo)(THIS_ IMoniker*,IMoniker**) PURE;
+ STDMETHOD(GetDisplayName)(THIS_ IBindCtx*,IMoniker*,LPOLESTR*) PURE;
+ STDMETHOD(ParseDisplayName)(THIS_ IBindCtx*,IMoniker*,LPOLESTR,ULONG*,IMoniker**) PURE;
+ STDMETHOD(IsSystemMoniker)(THIS_ PDWORD) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IPersistStorage;
+#define INTERFACE IPersistStorage
+DECLARE_INTERFACE_(IPersistStorage,IPersist)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetClassID)(THIS_ CLSID*) PURE;
+ STDMETHOD(IsDirty)(THIS) PURE;
+ STDMETHOD(InitNew)(THIS_ LPSTORAGE) PURE;
+ STDMETHOD(Load)(THIS_ LPSTORAGE) PURE;
+ STDMETHOD(Save)(THIS_ LPSTORAGE,BOOL) PURE;
+ STDMETHOD(SaveCompleted)(THIS_ LPSTORAGE) PURE;
+ STDMETHOD(HandsOffStorage)(THIS) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IPersistFile;
+#define INTERFACE IPersistFile
+DECLARE_INTERFACE_(IPersistFile,IPersist)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetClassID)(THIS_ CLSID*) PURE;
+ STDMETHOD(IsDirty)(THIS) PURE;
+ STDMETHOD(Load)(THIS_ LPCOLESTR,DWORD) PURE;
+ STDMETHOD(Save)(THIS_ LPCOLESTR,BOOL) PURE;
+ STDMETHOD(SaveCompleted)(THIS_ LPCOLESTR) PURE;
+ STDMETHOD(GetCurFile)(THIS_ LPOLESTR*) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IAdviseSink;
+#define INTERFACE IAdviseSink
+DECLARE_INTERFACE_(IAdviseSink,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD_(void,OnDataChange)(THIS_ FORMATETC*,STGMEDIUM*) PURE;
+ STDMETHOD_(void,OnViewChange)(THIS_ DWORD,LONG) PURE;
+ STDMETHOD_(void,OnRename)(THIS_ IMoniker*) PURE;
+ STDMETHOD_(void,OnSave)(THIS) PURE;
+ STDMETHOD_(void,OnClose)(THIS) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IAdviseSink2;
+#define INTERFACE IAdviseSink2
+DECLARE_INTERFACE_(IAdviseSink2,IAdviseSink)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD_(void,OnDataChange)(THIS_ FORMATETC*,STGMEDIUM*) PURE;
+ STDMETHOD_(void,OnViewChange)(THIS_ DWORD,LONG) PURE;
+ STDMETHOD_(void,OnRename)(THIS_ IMoniker*) PURE;
+ STDMETHOD_(void,OnSave)(THIS) PURE;
+ STDMETHOD_(void,OnClose)(THIS) PURE;
+ STDMETHOD_(void,OnLinkSrcChange)(THIS_ IMoniker*);
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IDataObject;
+#define INTERFACE IDataObject
+DECLARE_INTERFACE_(IDataObject,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetData)(THIS_ FORMATETC*,STGMEDIUM*) PURE;
+ STDMETHOD(GetDataHere)(THIS_ FORMATETC*,STGMEDIUM*) PURE;
+ STDMETHOD(QueryGetData)(THIS_ FORMATETC*) PURE;
+ STDMETHOD(GetCanonicalFormatEtc)(THIS_ FORMATETC*,FORMATETC*) PURE;
+ STDMETHOD(SetData)(THIS_ FORMATETC*,STGMEDIUM*,BOOL) PURE;
+ STDMETHOD(EnumFormatEtc)(THIS_ DWORD,IEnumFORMATETC**) PURE;
+ STDMETHOD(DAdvise)(THIS_ FORMATETC*,DWORD,IAdviseSink*,PDWORD) PURE;
+ STDMETHOD(DUnadvise)(THIS_ DWORD) PURE;
+ STDMETHOD(EnumDAdvise)(THIS_ IEnumSTATDATA**) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IDataAdviseHolder;
+#define INTERFACE IDataAdviseHolder
+DECLARE_INTERFACE_(IDataAdviseHolder,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(Advise)(THIS_ IDataObject*,FORMATETC*,DWORD,IAdviseSink*,PDWORD) PURE;
+ STDMETHOD(Unadvise)(THIS_ DWORD) PURE;
+ STDMETHOD(EnumAdvise)(THIS_ IEnumSTATDATA**) PURE;
+ STDMETHOD(SendOnDataChange)(THIS_ IDataObject*,DWORD,DWORD) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IStorage;
+#define INTERFACE IStorage
+DECLARE_INTERFACE_(IStorage,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(CreateStream)(THIS_ LPCWSTR,DWORD,DWORD,DWORD,IStream**) PURE;
+ STDMETHOD(OpenStream)(THIS_ LPCWSTR,PVOID,DWORD,DWORD,IStream**) PURE;
+ STDMETHOD(CreateStorage)(THIS_ LPCWSTR,DWORD,DWORD,DWORD,IStorage**) PURE;
+ STDMETHOD(OpenStorage)(THIS_ LPCWSTR,IStorage*,DWORD,SNB,DWORD,IStorage**) PURE;
+ STDMETHOD(CopyTo)(THIS_ DWORD,IID const*,SNB,IStorage*) PURE;
+ STDMETHOD(MoveElementTo)(THIS_ LPCWSTR,IStorage*,LPCWSTR,DWORD) PURE;
+ STDMETHOD(Commit)(THIS_ DWORD) PURE;
+ STDMETHOD(Revert)(THIS) PURE;
+ STDMETHOD(EnumElements)(THIS_ DWORD,PVOID,DWORD,IEnumSTATSTG**) PURE;
+ STDMETHOD(DestroyElement)(THIS_ LPCWSTR) PURE;
+ STDMETHOD(RenameElement)(THIS_ LPCWSTR,LPCWSTR) PURE;
+ STDMETHOD(SetElementTimes)(THIS_ LPCWSTR,FILETIME const*,FILETIME const*,FILETIME const*) PURE;
+ STDMETHOD(SetClass)(THIS_ REFCLSID) PURE;
+ STDMETHOD(SetStateBits)(THIS_ DWORD,DWORD) PURE;
+ STDMETHOD(Stat)(THIS_ STATSTG*,DWORD) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IRootStorage;
+#define INTERFACE IRootStorage
+DECLARE_INTERFACE_(IRootStorage,IPersist)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(SwitchToFile)(THIS_ LPOLESTR) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IRpcChannelBuffer;
+#define INTERFACE IRpcChannelBuffer
+DECLARE_INTERFACE_(IRpcChannelBuffer,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetBuffer)(THIS_ RPCOLEMESSAGE*,REFIID) PURE;
+ STDMETHOD(SendReceive)(THIS_ RPCOLEMESSAGE*,PULONG) PURE;
+ STDMETHOD(FreeBuffer)(THIS_ RPCOLEMESSAGE*) PURE;
+ STDMETHOD(GetDestCtx)(THIS_ PDWORD,PVOID*) PURE;
+ STDMETHOD(IsConnected)(THIS) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IRpcProxyBuffer;
+#define INTERFACE IRpcProxyBuffer
+DECLARE_INTERFACE_(IRpcProxyBuffer,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(Connect)(THIS_ IRpcChannelBuffer*) PURE;
+ STDMETHOD_(void,Disconnect)(THIS) PURE;
+
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IRpcStubBuffer;
+#define INTERFACE IRpcStubBuffer
+DECLARE_INTERFACE_(IRpcStubBuffer,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(Connect)(THIS_ LPUNKNOWN) PURE;
+ STDMETHOD_(void,Disconnect)(THIS) PURE;
+ STDMETHOD(Invoke)(THIS_ RPCOLEMESSAGE*,LPRPCSTUBBUFFER) PURE;
+ STDMETHOD_(LPRPCSTUBBUFFER,IsIIDSupported)(THIS_ REFIID) PURE;
+ STDMETHOD_(ULONG,CountRefs)(THIS) PURE;
+ STDMETHOD(DebugServerQueryInterface)(THIS_ PVOID*) PURE;
+ STDMETHOD(DebugServerRelease)(THIS_ PVOID) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IPSFactoryBuffer;
+#define INTERFACE IPSFactoryBuffer
+DECLARE_INTERFACE_(IPSFactoryBuffer,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(CreateProxy)(THIS_ LPUNKNOWN,REFIID,LPRPCPROXYBUFFER*,PVOID*) PURE;
+ STDMETHOD(CreateStub)(THIS_ REFIID,LPUNKNOWN,LPRPCSTUBBUFFER*) PURE;
+};
+#undef INTERFACE
+typedef _COM_interface IPSFactoryBuffer *LPPSFACTORYBUFFER;
+
+EXTERN_C const IID IID_ILockBytes;
+#define INTERFACE ILockBytes
+DECLARE_INTERFACE_(ILockBytes,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(ReadAt)(THIS_ ULARGE_INTEGER,PVOID,ULONG,ULONG*) PURE;
+ STDMETHOD(WriteAt)(THIS_ ULARGE_INTEGER,PCVOID,ULONG,ULONG*) PURE;
+ STDMETHOD(Flush)(THIS) PURE;
+ STDMETHOD(SetSize)(THIS_ ULARGE_INTEGER) PURE;
+ STDMETHOD(LockRegion)(THIS_ ULARGE_INTEGER,ULARGE_INTEGER,DWORD) PURE;
+ STDMETHOD(UnlockRegion)(THIS_ ULARGE_INTEGER,ULARGE_INTEGER,DWORD) PURE;
+ STDMETHOD(Stat)(THIS_ STATSTG*,DWORD) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IExternalConnection;
+#define INTERFACE IExternalConnection
+DECLARE_INTERFACE_(IExternalConnection,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(AddConnection)(THIS_ DWORD,DWORD) PURE;
+ STDMETHOD(ReleaseConnection)(THIS_ DWORD,DWORD,BOOL) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IRunnableObject;
+#define INTERFACE IRunnableObject
+DECLARE_INTERFACE_(IRunnableObject,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetRunningClass)(THIS_ LPCLSID) PURE;
+ STDMETHOD(Run)(THIS_ LPBC) PURE;
+ STDMETHOD_(BOOL,IsRunning)(THIS) PURE;
+ STDMETHOD(LockRunning)(THIS_ BOOL,BOOL) PURE;
+ STDMETHOD(SetContainedObject)(THIS_ BOOL) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IROTData;
+#define INTERFACE IROTData
+DECLARE_INTERFACE_(IROTData,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetComparisonData)(THIS_ PVOID,ULONG,PULONG) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IChannelHook;
+#define INTERFACE IChannelHook
+DECLARE_INTERFACE_(IChannelHook,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD_(void,ClientGetSize)(THIS_ REFGUID,REFIID,PULONG) PURE;
+ STDMETHOD_(void,ClientFillBuffer)(THIS_ REFGUID,REFIID,PULONG,PVOID) PURE;
+ STDMETHOD_(void,ClientNotify)(THIS_ REFGUID,REFIID,ULONG,PVOID,DWORD,HRESULT) PURE;
+ STDMETHOD_(void,ServerNotify)(THIS_ REFGUID,REFIID,ULONG,PVOID,DWORD) PURE;
+ STDMETHOD_(void,ServerGetSize)(THIS_ REFGUID,REFIID,HRESULT,PULONG) PURE;
+ STDMETHOD_(void,ServerFillBuffer)(THIS_ REFGUID,REFIID,PULONG,PVOID,HRESULT) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IPropertyStorage;
+#define INTERFACE IPropertyStorage
+DECLARE_INTERFACE_(IPropertyStorage,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(ReadMultiple)(THIS_ ULONG,PROPSPEC const*,PROPVARIANT*) PURE;
+ STDMETHOD(WriteMultiple)(THIS_ ULONG,PROPSPEC const*,PROPVARIANT*,PROPID) PURE;
+ STDMETHOD(DeleteMultiple)(THIS_ ULONG,PROPSPEC const*) PURE;
+ STDMETHOD(ReadPropertyNames)(THIS_ ULONG,PROPID const*,LPWSTR*) PURE;
+ STDMETHOD(WritePropertyNames)(THIS_ ULONG,PROPID const*,LPWSTR const*) PURE;
+ STDMETHOD(DeletePropertyNames)(THIS_ ULONG,PROPID const*) PURE;
+ STDMETHOD(SetClass)(THIS_ REFCLSID) PURE;
+ STDMETHOD(Commit)(THIS_ DWORD) PURE;
+ STDMETHOD(Revert)(THIS) PURE;
+ STDMETHOD(Enum)(THIS_ IEnumSTATPROPSTG**) PURE;
+ STDMETHOD(Stat)(THIS_ STATPROPSTG*) PURE;
+ STDMETHOD(SetTimes)(THIS_ FILETIME const*,FILETIME const*,FILETIME const*) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IPropertySetStorage;
+#define INTERFACE IPropertySetStorage
+DECLARE_INTERFACE_(IPropertySetStorage,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(Create)(THIS_ REFFMTID,CLSID*,DWORD,DWORD,LPPROPERTYSTORAGE*) PURE;
+ STDMETHOD(Open)(THIS_ REFFMTID,DWORD,LPPROPERTYSTORAGE*) PURE;
+ STDMETHOD(Delete)(THIS_ REFFMTID) PURE;
+ STDMETHOD(Enum)(THIS_ IEnumSTATPROPSETSTG**) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IClientSecurity;
+#define INTERFACE IClientSecurity
+DECLARE_INTERFACE_(IClientSecurity,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(QueryBlanket)(THIS_ PVOID,PDWORD,PDWORD,OLECHAR**,PDWORD,PDWORD,RPC_AUTH_IDENTITY_HANDLE**,PDWORD*) PURE;
+ STDMETHOD(SetBlanket)(THIS_ PVOID,DWORD,DWORD,LPWSTR,DWORD,DWORD,RPC_AUTH_IDENTITY_HANDLE*,DWORD) PURE;
+ STDMETHOD(CopyProxy)(THIS_ LPUNKNOWN,LPUNKNOWN*) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IServerSecurity;
+#define INTERFACE IServerSecurity
+DECLARE_INTERFACE_(IServerSecurity,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(QueryBlanket)(THIS_ PDWORD,PDWORD,OLECHAR**,PDWORD,PDWORD,RPC_AUTHZ_HANDLE*,PDWORD*) PURE;
+ STDMETHOD(ImpersonateClient)(THIS) PURE;
+ STDMETHOD(RevertToSelf)(THIS) PURE;
+ STDMETHOD(IsImpersonating)(THIS) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IClassActivator;
+#define INTERFACE IClassActivator
+DECLARE_INTERFACE_(IClassActivator,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetClassObject)(THIS_ REFCLSID,DWORD,LCID,REFIID,PVOID*) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IFillLockBytes;
+#define INTERFACE IFillLockBytes
+DECLARE_INTERFACE_(IFillLockBytes,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(FillAppend)(THIS_ void const*,ULONG,PULONG) PURE;
+ STDMETHOD(FillAt)(THIS_ ULARGE_INTEGER,void const*,ULONG,PULONG) PURE;
+ STDMETHOD(SetFillSize)(THIS_ ULARGE_INTEGER) PURE;
+ STDMETHOD(Terminate)(THIS_ BOOL) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IProgressNotify;
+#define INTERFACE IProgressNotify
+DECLARE_INTERFACE_(IProgressNotify,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(OnProgress)(THIS_ DWORD,DWORD,BOOL,BOOL) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_ILayoutStorage;
+#define INTERFACE ILayoutStorage
+DECLARE_INTERFACE_(ILayoutStorage,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(LayoutScript)(THIS_ STORAGELAYOUT*,DWORD,DWORD) PURE;
+ STDMETHOD(BeginMonitor)(THIS) PURE;
+ STDMETHOD(EndMonitor)(THIS) PURE;
+ STDMETHOD(ReLayoutDocfile)(THIS_ OLECHAR*) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IGlobalInterfaceTable;
+#define INTERFACE IGlobalInterfaceTable
+DECLARE_INTERFACE_(IGlobalInterfaceTable,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(RegisterInterfaceInGlobal)(THIS_ IUnknown*,REFIID,DWORD*) PURE;
+ STDMETHOD(RevokeInterfaceFromGlobal)(THIS_ DWORD) PURE;
+ STDMETHOD(GetInterfaceFromGlobal)(THIS_ DWORD,REFIID,void**) PURE;
+};
+#undef INTERFACE
+
+#ifdef COBJMACROS
+#define IGlobalInterfaceTable_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define IGlobalInterfaceTable_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define IGlobalInterfaceTable_Release(T) (T)->lpVtbl->Release(T)
+#define IGlobalInterfaceTable_RegisterInterfaceInGlobal(T,a,b,c) (T)->lpVtbl->RegisterInterfaceInGlobal(T,a,b,c)
+#define IGlobalInterfaceTable_RevokeInterfaceFromGlobal(T,a) (T)->lpVtbl->RevokeInterfaceFromGlobal(T,a)
+#define IGlobalInterfaceTable_GetInterfaceFromGlobal(T,a,b,c) (T)->lpVtbl->GetInterfaceFromGlobal(T,a,b,c)
+#endif
+
+HRESULT STDMETHODCALLTYPE IMarshal_GetUnmarshalClass_Proxy(IMarshal*,REFIID,void*,DWORD,void*,DWORD,CLSID*);
+void STDMETHODCALLTYPE IMarshal_GetUnmarshalClass_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IMarshal_GetMarshalSizeMax_Proxy(IMarshal*,REFIID,void*,DWORD,void*,DWORD,DWORD*);
+void STDMETHODCALLTYPE IMarshal_GetMarshalSizeMax_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IMarshal_MarshalInterface_Proxy(IMarshal*,IStream*,REFIID,void*,DWORD,void*,DWORD);
+void STDMETHODCALLTYPE IMarshal_MarshalInterface_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IMarshal_UnmarshalInterface_Proxy(IMarshal*,IStream*,REFIID,void**);
+void STDMETHODCALLTYPE IMarshal_UnmarshalInterface_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IMarshal_ReleaseMarshalData_Proxy(IMarshal*,IStream*);
+void STDMETHODCALLTYPE IMarshal_ReleaseMarshalData_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IMarshal_DisconnectObject_Proxy(IMarshal*,DWORD);
+void STDMETHODCALLTYPE IMarshal_DisconnectObject_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+void* STDMETHODCALLTYPE IMalloc_Alloc_Proxy(IMalloc*,ULONG);
+void STDMETHODCALLTYPE IMalloc_Alloc_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+void* STDMETHODCALLTYPE IMalloc_Realloc_Proxy(IMalloc*,void*,ULONG);
+void STDMETHODCALLTYPE IMalloc_Realloc_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+void STDMETHODCALLTYPE IMalloc_Free_Proxy(IMalloc*,void*);
+void STDMETHODCALLTYPE IMalloc_Free_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+ULONG STDMETHODCALLTYPE IMalloc_GetSize_Proxy(IMalloc*,void*);
+void STDMETHODCALLTYPE IMalloc_GetSize_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+int STDMETHODCALLTYPE IMalloc_DidAlloc_Proxy(IMalloc*,void*);
+void STDMETHODCALLTYPE IMalloc_DidAlloc_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+void STDMETHODCALLTYPE IMalloc_HeapMinimize_Proxy(IMalloc*);
+void STDMETHODCALLTYPE IMalloc_HeapMinimize_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+ULONG STDMETHODCALLTYPE IMallocSpy_PreAlloc_Proxy(IMallocSpy*,ULONG cbRequest);
+void STDMETHODCALLTYPE IMallocSpy_PreAlloc_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+void* STDMETHODCALLTYPE IMallocSpy_PostAlloc_Proxy(IMallocSpy*,void*);
+void STDMETHODCALLTYPE IMallocSpy_PostAlloc_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+void* STDMETHODCALLTYPE IMallocSpy_PreFree_Proxy(IMallocSpy*,void*,BOOL);
+void STDMETHODCALLTYPE IMallocSpy_PreFree_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+void STDMETHODCALLTYPE IMallocSpy_PostFree_Proxy(IMallocSpy*,BOOL);
+void STDMETHODCALLTYPE IMallocSpy_PostFree_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+ULONG STDMETHODCALLTYPE IMallocSpy_PreRealloc_Proxy(IMallocSpy*,void*,ULONG,void**,BOOL);
+void STDMETHODCALLTYPE IMallocSpy_PreRealloc_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+void* STDMETHODCALLTYPE IMallocSpy_PostRealloc_Proxy(IMallocSpy*,void*,BOOL);
+void STDMETHODCALLTYPE IMallocSpy_PostRealloc_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+void* STDMETHODCALLTYPE IMallocSpy_PreGetSize_Proxy(IMallocSpy*,void*,BOOL);
+void STDMETHODCALLTYPE IMallocSpy_PreGetSize_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+ULONG STDMETHODCALLTYPE IMallocSpy_PostGetSize_Proxy(IMallocSpy*,ULONG,BOOL);
+void STDMETHODCALLTYPE IMallocSpy_PostGetSize_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+void* STDMETHODCALLTYPE IMallocSpy_PreDidAlloc_Proxy(IMallocSpy*,void*,BOOL);
+void STDMETHODCALLTYPE IMallocSpy_PreDidAlloc_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+int STDMETHODCALLTYPE IMallocSpy_PostDidAlloc_Proxy(IMallocSpy*,void*,BOOL,int);
+void STDMETHODCALLTYPE IMallocSpy_PostDidAlloc_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+void STDMETHODCALLTYPE IMallocSpy_PreHeapMinimize_Proxy(IMallocSpy* );
+void STDMETHODCALLTYPE IMallocSpy_PreHeapMinimize_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+void STDMETHODCALLTYPE IMallocSpy_PostHeapMinimize_Proxy(IMallocSpy*);
+void STDMETHODCALLTYPE IMallocSpy_PostHeapMinimize_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IStdMarshalInfo_GetClassForHandler_Proxy(IStdMarshalInfo*,DWORD,void*,CLSID*);
+void STDMETHODCALLTYPE IStdMarshalInfo_GetClassForHandler_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+DWORD STDMETHODCALLTYPE IExternalConnection_AddConnection_Proxy(IExternalConnection*,DWORD,DWORD);
+void STDMETHODCALLTYPE IExternalConnection_AddConnection_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+DWORD STDMETHODCALLTYPE IExternalConnection_ReleaseConnection_Proxy(IExternalConnection*,DWORD,DWORD,BOOL);
+void STDMETHODCALLTYPE IExternalConnection_ReleaseConnection_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IEnumUnknown_RemoteNext_Proxy(IEnumUnknown*,ULONG,IUnknown**,ULONG*);
+void STDMETHODCALLTYPE IEnumUnknown_RemoteNext_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IEnumUnknown_Skip_Proxy(IEnumUnknown*,ULONG);
+void STDMETHODCALLTYPE IEnumUnknown_Skip_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IEnumUnknown_Reset_Proxy(IEnumUnknown* );
+void STDMETHODCALLTYPE IEnumUnknown_Reset_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IEnumUnknown_Clone_Proxy(IEnumUnknown*,IEnumUnknown**);
+void STDMETHODCALLTYPE IEnumUnknown_Clone_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IBindCtx_RegisterObjectBound_Proxy(IBindCtx*,IUnknown*punk);
+void STDMETHODCALLTYPE IBindCtx_RegisterObjectBound_Stub(IRpcStubBuffer*,IRpcChannelBuffer*_pRpcChannelBuffer,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IBindCtx_RevokeObjectBound_Proxy(IBindCtx*,IUnknown*punk);
+void STDMETHODCALLTYPE IBindCtx_RevokeObjectBound_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IBindCtx_ReleaseBoundObjects_Proxy(IBindCtx*);
+void STDMETHODCALLTYPE IBindCtx_ReleaseBoundObjects_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IBindCtx_SetBindOptions_Proxy(IBindCtx*,BIND_OPTS*);
+void STDMETHODCALLTYPE IBindCtx_SetBindOptions_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IBindCtx_GetBindOptions_Proxy(IBindCtx*,BIND_OPTS*pbindopts);
+void STDMETHODCALLTYPE IBindCtx_GetBindOptions_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IBindCtx_GetRunningObjectTable_Proxy(IBindCtx*,IRunningObjectTable**);
+void STDMETHODCALLTYPE IBindCtx_GetRunningObjectTable_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IBindCtx_RegisterObjectParam_Proxy(IBindCtx*,LPCSTR,IUnknown*);
+void STDMETHODCALLTYPE IBindCtx_RegisterObjectParam_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IBindCtx_GetObjectParam_Proxy(IBindCtx*,LPCSTR,IUnknown**);
+void STDMETHODCALLTYPE IBindCtx_GetObjectParam_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IBindCtx_EnumObjectParam_Proxy(IBindCtx*,IEnumString**);
+void STDMETHODCALLTYPE IBindCtx_EnumObjectParam_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IBindCtx_RevokeObjectParam_Proxy(IBindCtx*,LPCSTR);
+void STDMETHODCALLTYPE IBindCtx_RevokeObjectParam_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IEnumMoniker_RemoteNext_Proxy(IEnumMoniker*,ULONG,IMoniker**,ULONG*);
+void STDMETHODCALLTYPE IEnumMoniker_RemoteNext_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IEnumMoniker_Skip_Proxy(IEnumMoniker*,ULONG);
+void STDMETHODCALLTYPE IEnumMoniker_Skip_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IEnumMoniker_Reset_Proxy(IEnumMoniker*);
+void STDMETHODCALLTYPE IEnumMoniker_Reset_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IEnumMoniker_Clone_Proxy(IEnumMoniker*,IEnumMoniker**);
+void STDMETHODCALLTYPE IEnumMoniker_Clone_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IRunnableObject_GetRunningClass_Proxy(IRunnableObject*,LPCLSID);
+void STDMETHODCALLTYPE IRunnableObject_GetRunningClass_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IRunnableObject_Run_Proxy(IRunnableObject*,LPBINDCTX);
+void STDMETHODCALLTYPE IRunnableObject_Run_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+BOOL STDMETHODCALLTYPE IRunnableObject_IsRunning_Proxy(IRunnableObject*);
+void STDMETHODCALLTYPE IRunnableObject_IsRunning_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IRunnableObject_LockRunning_Proxy(IRunnableObject*,BOOL,BOOL);
+void STDMETHODCALLTYPE IRunnableObject_LockRunning_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IRunnableObject_SetContainedObject_Proxy(IRunnableObject*,BOOL);
+void STDMETHODCALLTYPE IRunnableObject_SetContainedObject_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IRunningObjectTable_Register_Proxy(IRunningObjectTable*,DWORD,IUnknown*,IMoniker*,DWORD*);
+void STDMETHODCALLTYPE IRunningObjectTable_Register_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IRunningObjectTable_Revoke_Proxy(IRunningObjectTable*,DWORD);
+void STDMETHODCALLTYPE IRunningObjectTable_Revoke_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IRunningObjectTable_IsRunning_Proxy(IRunningObjectTable*,IMoniker*);
+void STDMETHODCALLTYPE IRunningObjectTable_IsRunning_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IRunningObjectTable_GetObject_Proxy(IRunningObjectTable*,IMoniker*,IUnknown**);
+void STDMETHODCALLTYPE IRunningObjectTable_GetObject_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IRunningObjectTable_NoteChangeTime_Proxy(IRunningObjectTable*,DWORD,FILETIME*);
+void STDMETHODCALLTYPE IRunningObjectTable_NoteChangeTime_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IRunningObjectTable_GetTimeOfLastChange_Proxy(IRunningObjectTable*,IMoniker*,FILETIME*);
+void STDMETHODCALLTYPE IRunningObjectTable_GetTimeOfLastChange_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IRunningObjectTable_EnumRunning_Proxy(IRunningObjectTable*,IEnumMoniker**);
+void STDMETHODCALLTYPE IRunningObjectTable_EnumRunning_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IPersist_GetClassID_Proxy(IPersist*,CLSID*);
+void STDMETHODCALLTYPE IPersist_GetClassID_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IPersistStream_IsDirty_Proxy(IPersistStream*);
+void STDMETHODCALLTYPE IPersistStream_IsDirty_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IPersistStream_Load_Proxy(IPersistStream*,IStream*);
+void STDMETHODCALLTYPE IPersistStream_Load_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IPersistStream_Save_Proxy(IPersistStream*,IStream*,BOOL);
+void STDMETHODCALLTYPE IPersistStream_Save_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IPersistStream_GetSizeMax_Proxy(IPersistStream*,ULARGE_INTEGER*);
+void STDMETHODCALLTYPE IPersistStream_GetSizeMax_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IMoniker_RemoteBindToObject_Proxy(IMoniker*,IBindCtx*,IMoniker*,REFIID,IUnknown**);
+void STDMETHODCALLTYPE IMoniker_RemoteBindToObject_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IMoniker_RemoteBindToStorage_Proxy(IMoniker*,IBindCtx*,IMoniker*,REFIID,IUnknown**);
+void STDMETHODCALLTYPE IMoniker_RemoteBindToStorage_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IMoniker_Reduce_Proxy(IMoniker*,IBindCtx*,DWORD,IMoniker**,IMoniker**);
+void STDMETHODCALLTYPE IMoniker_Reduce_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IMoniker_ComposeWith_Proxy(IMoniker*,IMoniker*,BOOL,IMoniker**);
+void STDMETHODCALLTYPE IMoniker_ComposeWith_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IMoniker_Enum_Proxy(IMoniker*,BOOL,IEnumMoniker**);
+void STDMETHODCALLTYPE IMoniker_Enum_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IMoniker_IsEqual_Proxy(IMoniker*,IMoniker*);
+void STDMETHODCALLTYPE IMoniker_IsEqual_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IMoniker_Hash_Proxy(IMoniker*,DWORD*);
+void STDMETHODCALLTYPE IMoniker_Hash_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IMoniker_IsRunning_Proxy(IMoniker*,IBindCtx*,IMoniker*,IMoniker*);
+void STDMETHODCALLTYPE IMoniker_IsRunning_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IMoniker_GetTimeOfLastChange_Proxy(IMoniker*,IBindCtx*,IMoniker*,FILETIME*);
+void STDMETHODCALLTYPE IMoniker_GetTimeOfLastChange_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IMoniker_Inverse_Proxy(IMoniker*,IMoniker**);
+void STDMETHODCALLTYPE IMoniker_Inverse_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IMoniker_CommonPrefixWith_Proxy(IMoniker*,IMoniker*,IMoniker**);
+void STDMETHODCALLTYPE IMoniker_CommonPrefixWith_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IMoniker_RelativePathTo_Proxy(IMoniker*,IMoniker*,IMoniker**);
+void STDMETHODCALLTYPE IMoniker_RelativePathTo_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IMoniker_GetDisplayName_Proxy(IMoniker*,IBindCtx*,IMoniker*,LPCSTR*);
+void STDMETHODCALLTYPE IMoniker_GetDisplayName_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IMoniker_ParseDisplayName_Proxy(IMoniker*,IBindCtx*,IMoniker*,LPCSTR,ULONG*,IMoniker**);
+void STDMETHODCALLTYPE IMoniker_ParseDisplayName_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IMoniker_IsSystemMoniker_Proxy(IMoniker*,DWORD*);
+void STDMETHODCALLTYPE IMoniker_IsSystemMoniker_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IROTData_GetComparisonData_Proxy(IROTData*,BYTE*,ULONG cbMax,ULONG*);
+void STDMETHODCALLTYPE IROTData_GetComparisonData_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IEnumString_RemoteNext_Proxy(IEnumString*,ULONG,LPCSTR*rgelt,ULONG*);
+void STDMETHODCALLTYPE IEnumString_RemoteNext_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IEnumString_Skip_Proxy(IEnumString*,ULONG);
+void STDMETHODCALLTYPE IEnumString_Skip_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IEnumString_Reset_Proxy(IEnumString*);
+void STDMETHODCALLTYPE IEnumString_Reset_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IEnumString_Clone_Proxy(IEnumString*,IEnumString**);
+void STDMETHODCALLTYPE IEnumString_Clone_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IStream_RemoteRead_Proxy(IStream*,BYTE*,ULONG,ULONG*);
+void STDMETHODCALLTYPE IStream_RemoteRead_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IStream_RemoteWrite_Proxy(IStream*,BYTE*pv,ULONG,ULONG*);
+void STDMETHODCALLTYPE IStream_RemoteWrite_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IStream_RemoteSeek_Proxy(IStream*,LARGE_INTEGER,DWORD,ULARGE_INTEGER*);
+void STDMETHODCALLTYPE IStream_RemoteSeek_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IStream_SetSize_Proxy(IStream*,ULARGE_INTEGER);
+void STDMETHODCALLTYPE IStream_SetSize_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IStream_RemoteCopyTo_Proxy(IStream*,IStream*,ULARGE_INTEGER,ULARGE_INTEGER*,ULARGE_INTEGER*);
+void STDMETHODCALLTYPE IStream_RemoteCopyTo_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IStream_Commit_Proxy(IStream*,DWORD);
+void STDMETHODCALLTYPE IStream_Commit_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IStream_Revert_Proxy(IStream*);
+void STDMETHODCALLTYPE IStream_Revert_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IStream_LockRegion_Proxy(IStream*,ULARGE_INTEGER,ULARGE_INTEGER,DWORD);
+void STDMETHODCALLTYPE IStream_LockRegion_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IStream_UnlockRegion_Proxy(IStream*,ULARGE_INTEGER,ULARGE_INTEGER,DWORD);
+void STDMETHODCALLTYPE IStream_UnlockRegion_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IStream_Stat_Proxy(IStream*,STATSTG*,DWORD);
+void STDMETHODCALLTYPE IStream_Stat_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IStream_Clone_Proxy(IStream*,IStream**);
+void STDMETHODCALLTYPE IStream_Clone_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IEnumSTATSTG_RemoteNext_Proxy(IEnumSTATSTG*,ULONG,STATSTG*,ULONG*);
+void STDMETHODCALLTYPE IEnumSTATSTG_RemoteNext_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IEnumSTATSTG_Skip_Proxy(IEnumSTATSTG*,ULONG celt);
+void STDMETHODCALLTYPE IEnumSTATSTG_Skip_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IEnumSTATSTG_Reset_Proxy(IEnumSTATSTG*);
+void STDMETHODCALLTYPE IEnumSTATSTG_Reset_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IEnumSTATSTG_Clone_Proxy(IEnumSTATSTG*,IEnumSTATSTG**);
+void STDMETHODCALLTYPE IEnumSTATSTG_Clone_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IStorage_CreateStream_Proxy(IStorage*,OLECHAR*,DWORD,DWORD,DWORD,IStream**);
+void STDMETHODCALLTYPE IStorage_CreateStream_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IStorage_RemoteOpenStream_Proxy(IStorage*,const OLECHAR*,unsigned long,BYTE*,DWORD,DWORD,IStream**);
+void STDMETHODCALLTYPE IStorage_RemoteOpenStream_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IStorage_CreateStorage_Proxy(IStorage*,OLECHAR*,DWORD,DWORD,DWORD,IStorage**);
+void STDMETHODCALLTYPE IStorage_CreateStorage_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IStorage_OpenStorage_Proxy(IStorage*,OLECHAR*,IStorage*,DWORD,SNB,DWORD,IStorage**);
+void STDMETHODCALLTYPE IStorage_OpenStorage_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IStorage_CopyTo_Proxy(IStorage*,DWORD,const IID*,SNB,IStorage*);
+void STDMETHODCALLTYPE IStorage_CopyTo_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IStorage_MoveElementTo_Proxy(IStorage*,const OLECHAR*,IStorage*,const OLECHAR*,DWORD);
+void STDMETHODCALLTYPE IStorage_MoveElementTo_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IStorage_Commit_Proxy(IStorage*,DWORD);
+void STDMETHODCALLTYPE IStorage_Commit_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IStorage_Revert_Proxy(IStorage*);
+void STDMETHODCALLTYPE IStorage_Revert_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IStorage_RemoteEnumElements_Proxy(IStorage*,DWORD,unsigned long,BYTE*,DWORD,IEnumSTATSTG**);
+void STDMETHODCALLTYPE IStorage_RemoteEnumElements_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IStorage_DestroyElement_Proxy(IStorage*,OLECHAR*);
+void STDMETHODCALLTYPE IStorage_DestroyElement_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IStorage_RenameElement_Proxy(IStorage*,const OLECHAR*,const OLECHAR*);
+void STDMETHODCALLTYPE IStorage_RenameElement_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IStorage_SetElementTimes_Proxy(IStorage*,const OLECHAR*,const FILETIME*,const FILETIME*,const FILETIME*);
+void STDMETHODCALLTYPE IStorage_SetElementTimes_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IStorage_SetClass_Proxy(IStorage*,REFCLSID);
+void STDMETHODCALLTYPE IStorage_SetClass_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IStorage_SetStateBits_Proxy(IStorage*,DWORD,DWORD);
+void STDMETHODCALLTYPE IStorage_SetStateBits_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IStorage_Stat_Proxy(IStorage*,STATSTG*,DWORD);
+void STDMETHODCALLTYPE IStorage_Stat_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IPersistFile_IsDirty_Proxy(IPersistFile*);
+void STDMETHODCALLTYPE IPersistFile_IsDirty_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IPersistFile_Load_Proxy(IPersistFile*,LPCOLESTR,DWORD);
+void STDMETHODCALLTYPE IPersistFile_Load_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IPersistFile_Save_Proxy(IPersistFile*,LPCOLESTR pszFileName,BOOL);
+void STDMETHODCALLTYPE IPersistFile_Save_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IPersistFile_SaveCompleted_Proxy(IPersistFile*,LPCOLESTR);
+void STDMETHODCALLTYPE IPersistFile_SaveCompleted_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IPersistFile_GetCurFile_Proxy(IPersistFile*,LPCSTR*);
+void STDMETHODCALLTYPE IPersistFile_GetCurFile_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IPersistStorage_IsDirty_Proxy(IPersistStorage*);
+void STDMETHODCALLTYPE IPersistStorage_IsDirty_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IPersistStorage_InitNew_Proxy(IPersistStorage*,IStorage*);
+void STDMETHODCALLTYPE IPersistStorage_InitNew_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IPersistStorage_Load_Proxy(IPersistStorage*,IStorage*);
+void STDMETHODCALLTYPE IPersistStorage_Load_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IPersistStorage_Save_Proxy(IPersistStorage*,IStorage*,BOOL);
+void STDMETHODCALLTYPE IPersistStorage_Save_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IPersistStorage_SaveCompleted_Proxy(IPersistStorage*,IStorage*);
+void STDMETHODCALLTYPE IPersistStorage_SaveCompleted_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IPersistStorage_HandsOffStorage_Proxy(IPersistStorage*);
+void STDMETHODCALLTYPE IPersistStorage_HandsOffStorage_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE ILockBytes_RemoteReadAt_Proxy(ILockBytes*,ULARGE_INTEGER,BYTE*,ULONG,ULONG*);
+void STDMETHODCALLTYPE ILockBytes_RemoteReadAt_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE ILockBytes_RemoteWriteAt_Proxy(ILockBytes*,ULARGE_INTEGER,BYTE*pv,ULONG,ULONG*);
+void STDMETHODCALLTYPE ILockBytes_RemoteWriteAt_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE ILockBytes_Flush_Proxy(ILockBytes*);
+void STDMETHODCALLTYPE ILockBytes_Flush_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE ILockBytes_SetSize_Proxy(ILockBytes*,ULARGE_INTEGER);
+void STDMETHODCALLTYPE ILockBytes_SetSize_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE ILockBytes_LockRegion_Proxy(ILockBytes*,ULARGE_INTEGER,ULARGE_INTEGER,DWORD);
+void STDMETHODCALLTYPE ILockBytes_LockRegion_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE ILockBytes_UnlockRegion_Proxy(ILockBytes*,ULARGE_INTEGER,ULARGE_INTEGER,DWORD);
+void STDMETHODCALLTYPE ILockBytes_UnlockRegion_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE ILockBytes_Stat_Proxy(ILockBytes*,STATSTG*,DWORD);
+void STDMETHODCALLTYPE ILockBytes_Stat_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IEnumFORMATETC_RemoteNext_Proxy(IEnumFORMATETC*,ULONG,FORMATETC*,ULONG*);
+void STDMETHODCALLTYPE IEnumFORMATETC_RemoteNext_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IEnumFORMATETC_Skip_Proxy(IEnumFORMATETC*,ULONG);
+void STDMETHODCALLTYPE IEnumFORMATETC_Skip_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IEnumFORMATETC_Reset_Proxy(IEnumFORMATETC*);
+void STDMETHODCALLTYPE IEnumFORMATETC_Reset_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IEnumFORMATETC_Clone_Proxy(IEnumFORMATETC*,IEnumFORMATETC**);
+void STDMETHODCALLTYPE IEnumFORMATETC_Clone_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IEnumFORMATETC_Next_Proxy(IEnumFORMATETC*,ULONG,FORMATETC*,ULONG*);
+HRESULT STDMETHODCALLTYPE IEnumFORMATETC_Next_Stub(IEnumFORMATETC*,ULONG,FORMATETC*,ULONG*);
+HRESULT STDMETHODCALLTYPE IEnumSTATDATA_RemoteNext_Proxy(IEnumSTATDATA*,ULONG,STATDATA*,ULONG*);
+void STDMETHODCALLTYPE IEnumSTATDATA_RemoteNext_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IEnumSTATDATA_Skip_Proxy(IEnumSTATDATA*,ULONG);
+void STDMETHODCALLTYPE IEnumSTATDATA_Skip_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IEnumSTATDATA_Reset_Proxy(IEnumSTATDATA*);
+void STDMETHODCALLTYPE IEnumSTATDATA_Reset_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IEnumSTATDATA_Clone_Proxy(IEnumSTATDATA*,IEnumSTATDATA**);
+void STDMETHODCALLTYPE IEnumSTATDATA_Clone_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IEnumSTATDATA_Next_Proxy(IEnumSTATDATA*,ULONG,STATDATA*,ULONG*);
+HRESULT STDMETHODCALLTYPE IEnumSTATDATA_Next_Stub(IEnumSTATDATA*,ULONG,STATDATA*,ULONG*);
+HRESULT STDMETHODCALLTYPE IRootStorage_SwitchToFile_Proxy(IRootStorage*,LPCSTR);
+void STDMETHODCALLTYPE IRootStorage_SwitchToFile_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+void STDMETHODCALLTYPE IAdviseSink_RemoteOnDataChange_Proxy(IAdviseSink*,FORMATETC*,RemSTGMEDIUM*);
+void STDMETHODCALLTYPE IAdviseSink_RemoteOnDataChange_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+void STDMETHODCALLTYPE IAdviseSink_RemoteOnViewChange_Proxy(IAdviseSink*,DWORD,LONG);
+void STDMETHODCALLTYPE IAdviseSink_RemoteOnViewChange_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+void STDMETHODCALLTYPE IAdviseSink_RemoteOnRename_Proxy(IAdviseSink*,IMoniker*);
+void STDMETHODCALLTYPE IAdviseSink_RemoteOnRename_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+void STDMETHODCALLTYPE IAdviseSink_RemoteOnSave_Proxy(IAdviseSink*);
+void STDMETHODCALLTYPE IAdviseSink_RemoteOnSave_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IAdviseSink_RemoteOnClose_Proxy(IAdviseSink*);
+void STDMETHODCALLTYPE IAdviseSink_RemoteOnClose_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+void STDMETHODCALLTYPE IAdviseSink_OnDataChange_Proxy(IAdviseSink*,FORMATETC*,STGMEDIUM*);
+void STDMETHODCALLTYPE IAdviseSink_OnDataChange_Stub(IAdviseSink*,FORMATETC*,RemSTGMEDIUM*);
+void STDMETHODCALLTYPE IAdviseSink_OnViewChange_Proxy(IAdviseSink*,DWORD,LONG);
+void STDMETHODCALLTYPE IAdviseSink_OnViewChange_Stub(IAdviseSink*,DWORD,LONG);
+void STDMETHODCALLTYPE IAdviseSink_OnRename_Proxy(IAdviseSink*,IMoniker*);
+void STDMETHODCALLTYPE IAdviseSink_OnRename_Stub(IAdviseSink*,IMoniker*);
+void STDMETHODCALLTYPE IAdviseSink_OnSave_Proxy(IAdviseSink*);
+void STDMETHODCALLTYPE IAdviseSink_OnSave_Stub(IAdviseSink*);
+void STDMETHODCALLTYPE IAdviseSink_OnClose_Proxy(IAdviseSink*);
+HRESULT STDMETHODCALLTYPE IAdviseSink_OnClose_Stub(IAdviseSink*);
+void STDMETHODCALLTYPE IAdviseSink2_RemoteOnLinkSrcChange_Proxy(IAdviseSink2*,IMoniker*);
+void STDMETHODCALLTYPE IAdviseSink2_RemoteOnLinkSrcChange_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+void STDMETHODCALLTYPE IAdviseSink2_OnLinkSrcChange_Proxy(IAdviseSink2*,IMoniker*);
+void STDMETHODCALLTYPE IAdviseSink2_OnLinkSrcChange_Stub(IAdviseSink2*,IMoniker*);
+HRESULT STDMETHODCALLTYPE IDataObject_RemoteGetData_Proxy(IDataObject*,FORMATETC*,RemSTGMEDIUM**);
+void STDMETHODCALLTYPE IDataObject_RemoteGetData_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IDataObject_RemoteGetDataHere_Proxy(IDataObject*,FORMATETC*,RemSTGMEDIUM**);
+void STDMETHODCALLTYPE IDataObject_RemoteGetDataHere_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IDataObject_QueryGetData_Proxy(IDataObject*,FORMATETC*);
+void STDMETHODCALLTYPE IDataObject_QueryGetData_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IDataObject_GetCanonicalFormatEtc_Proxy(IDataObject*,FORMATETC*,FORMATETC*);
+void STDMETHODCALLTYPE IDataObject_GetCanonicalFormatEtc_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IDataObject_RemoteSetData_Proxy(IDataObject*,FORMATETC*,RemSTGMEDIUM*,BOOL);
+void STDMETHODCALLTYPE IDataObject_RemoteSetData_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IDataObject_EnumFormatEtc_Proxy(IDataObject*,DWORD,IEnumFORMATETC**);
+void STDMETHODCALLTYPE IDataObject_EnumFormatEtc_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IDataObject_DAdvise_Proxy(IDataObject*,FORMATETC*,DWORD,IAdviseSink*,DWORD*);
+void STDMETHODCALLTYPE IDataObject_DAdvise_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IDataObject_DUnadvise_Proxy(IDataObject*,DWORD);
+void STDMETHODCALLTYPE IDataObject_DUnadvise_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IDataObject_EnumDAdvise_Proxy(IDataObject*,IEnumSTATDATA**);
+void STDMETHODCALLTYPE IDataObject_EnumDAdvise_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IDataObject_GetData_Proxy(IDataObject*,FORMATETC*,STGMEDIUM*);
+HRESULT STDMETHODCALLTYPE IDataObject_GetData_Stub(IDataObject*,FORMATETC*,RemSTGMEDIUM**);
+HRESULT STDMETHODCALLTYPE IDataObject_GetDataHere_Proxy(IDataObject*,FORMATETC*,STGMEDIUM*);
+HRESULT STDMETHODCALLTYPE IDataObject_GetDataHere_Stub(IDataObject*,FORMATETC*,RemSTGMEDIUM**);
+HRESULT STDMETHODCALLTYPE IDataObject_SetData_Proxy(IDataObject*,FORMATETC*,STGMEDIUM*,BOOL);
+HRESULT STDMETHODCALLTYPE IDataObject_SetData_Stub(IDataObject*,FORMATETC*,RemSTGMEDIUM*,BOOL);
+HRESULT STDMETHODCALLTYPE IDataAdviseHolder_Advise_Proxy(IDataAdviseHolder*,IDataObject*,FORMATETC*,DWORD,IAdviseSink*,DWORD*);
+void STDMETHODCALLTYPE IDataAdviseHolder_Advise_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IDataAdviseHolder_Unadvise_Proxy(IDataAdviseHolder*,DWORD);
+void STDMETHODCALLTYPE IDataAdviseHolder_Unadvise_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IDataAdviseHolder_EnumAdvise_Proxy(IDataAdviseHolder*,IEnumSTATDATA**);
+void STDMETHODCALLTYPE IDataAdviseHolder_EnumAdvise_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IDataAdviseHolder_SendOnDataChange_Proxy(IDataAdviseHolder*,IDataObject*,DWORD,DWORD);
+void STDMETHODCALLTYPE IDataAdviseHolder_SendOnDataChange_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+DWORD STDMETHODCALLTYPE IMessageFilter_HandleInComingCall_Proxy(IMessageFilter*,DWORD,HTASK,DWORD,LPINTERFACEINFO);
+void STDMETHODCALLTYPE IMessageFilter_HandleInComingCall_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+DWORD STDMETHODCALLTYPE IMessageFilter_RetryRejectedCall_Proxy(IMessageFilter*,HTASK,DWORD,DWORD);
+void STDMETHODCALLTYPE IMessageFilter_RetryRejectedCall_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+DWORD STDMETHODCALLTYPE IMessageFilter_MessagePending_Proxy(IMessageFilter*,HTASK,DWORD,DWORD);
+void STDMETHODCALLTYPE IMessageFilter_MessagePending_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IRpcChannelBuffer_GetBuffer_Proxy(IRpcChannelBuffer*,RPCOLEMESSAGE*,REFIID);
+void STDMETHODCALLTYPE IRpcChannelBuffer_GetBuffer_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IRpcChannelBuffer_SendReceive_Proxy(IRpcChannelBuffer*,RPCOLEMESSAGE*,ULONG*);
+void STDMETHODCALLTYPE IRpcChannelBuffer_SendReceive_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IRpcChannelBuffer_FreeBuffer_Proxy(IRpcChannelBuffer*,RPCOLEMESSAGE*);
+void STDMETHODCALLTYPE IRpcChannelBuffer_FreeBuffer_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IRpcChannelBuffer_GetDestCtx_Proxy(IRpcChannelBuffer*,DWORD*,void**);
+void STDMETHODCALLTYPE IRpcChannelBuffer_GetDestCtx_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IRpcChannelBuffer_IsConnected_Proxy(IRpcChannelBuffer*);
+void STDMETHODCALLTYPE IRpcChannelBuffer_IsConnected_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IRpcProxyBuffer_Connect_Proxy(IRpcProxyBuffer*,IRpcChannelBuffer*pRpcChannelBuffer);
+void STDMETHODCALLTYPE IRpcProxyBuffer_Connect_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+void STDMETHODCALLTYPE IRpcProxyBuffer_Disconnect_Proxy(IRpcProxyBuffer*);
+void STDMETHODCALLTYPE IRpcProxyBuffer_Disconnect_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IRpcStubBuffer_Connect_Proxy(IRpcStubBuffer*,IUnknown*);
+void STDMETHODCALLTYPE IRpcStubBuffer_Connect_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+void STDMETHODCALLTYPE IRpcStubBuffer_Disconnect_Proxy(IRpcStubBuffer*);
+void STDMETHODCALLTYPE IRpcStubBuffer_Disconnect_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IRpcStubBuffer_Invoke_Proxy(IRpcStubBuffer*,RPCOLEMESSAGE*,IRpcChannelBuffer*);
+void STDMETHODCALLTYPE IRpcStubBuffer_Invoke_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+IRpcStubBuffer*STDMETHODCALLTYPE IRpcStubBuffer_IsIIDSupported_Proxy(IRpcStubBuffer*,REFIID);
+void STDMETHODCALLTYPE IRpcStubBuffer_IsIIDSupported_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+ULONG STDMETHODCALLTYPE IRpcStubBuffer_CountRefs_Proxy(IRpcStubBuffer*);
+void STDMETHODCALLTYPE IRpcStubBuffer_CountRefs_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IRpcStubBuffer_DebugServerQueryInterface_Proxy(IRpcStubBuffer*,void**);
+void STDMETHODCALLTYPE IRpcStubBuffer_DebugServerQueryInterface_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+void STDMETHODCALLTYPE IRpcStubBuffer_DebugServerRelease_Proxy(IRpcStubBuffer*,void*);
+void STDMETHODCALLTYPE IRpcStubBuffer_DebugServerRelease_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IPSFactoryBuffer_CreateProxy_Proxy(IPSFactoryBuffer*,IUnknown*,REFIID,IRpcProxyBuffer**,void**);
+void STDMETHODCALLTYPE IPSFactoryBuffer_CreateProxy_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IPSFactoryBuffer_CreateStub_Proxy(IPSFactoryBuffer*,REFIID,IUnknown*,IRpcStubBuffer**);
+void STDMETHODCALLTYPE IPSFactoryBuffer_CreateStub_Stub(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,PDWORD);
+void STDMETHODCALLTYPE SNB_to_xmit(SNB*,RemSNB**);
+void STDMETHODCALLTYPE SNB_from_xmit(RemSNB*,SNB*);
+void STDMETHODCALLTYPE SNB_free_inst(SNB*);
+void STDMETHODCALLTYPE SNB_free_xmit(RemSNB*);
+HRESULT STDMETHODCALLTYPE IEnumUnknown_Next_Proxy(IEnumUnknown*,ULONG,IUnknown**,ULONG*);
+HRESULT STDMETHODCALLTYPE IEnumUnknown_Next_Stub(IEnumUnknown*,ULONG,IUnknown**,ULONG*);
+HRESULT STDMETHODCALLTYPE IEnumMoniker_Next_Proxy(IEnumMoniker*,ULONG,IMoniker**,ULONG*);
+HRESULT STDMETHODCALLTYPE IEnumMoniker_Next_Stub(IEnumMoniker*,ULONG,IMoniker**,ULONG*);
+HRESULT STDMETHODCALLTYPE IMoniker_BindToObject_Proxy(IMoniker*,IBindCtx*,IMoniker*,REFIID,void**);
+HRESULT STDMETHODCALLTYPE IMoniker_BindToObject_Stub(IMoniker*,IBindCtx*,IMoniker*,REFIID,IUnknown**);
+HRESULT STDMETHODCALLTYPE IMoniker_BindToStorage_Proxy(IMoniker*,IBindCtx*,IMoniker*,REFIID,void**);
+HRESULT STDMETHODCALLTYPE IMoniker_BindToStorage_Stub(IMoniker*,IBindCtx*,IMoniker*,REFIID,IUnknown**);
+HRESULT STDMETHODCALLTYPE IEnumString_Next_Proxy(IEnumString*,ULONG,LPCSTR*,ULONG*);
+HRESULT STDMETHODCALLTYPE IEnumString_Next_Stub(IEnumString*,ULONG,LPCSTR*,ULONG*);
+HRESULT STDMETHODCALLTYPE IStream_Read_Proxy(IStream*,void*,ULONG,ULONG*);
+HRESULT STDMETHODCALLTYPE IStream_Read_Stub(IStream*,BYTE*,ULONG,ULONG*);
+HRESULT STDMETHODCALLTYPE IStream_Write_Proxy(IStream*,void*,ULONG,ULONG*);
+HRESULT STDMETHODCALLTYPE IStream_Write_Stub(IStream*,BYTE*,ULONG,ULONG*);
+HRESULT STDMETHODCALLTYPE IStream_Seek_Proxy(IStream*,LARGE_INTEGER,DWORD,ULARGE_INTEGER*);
+HRESULT STDMETHODCALLTYPE IStream_Seek_Stub(IStream*,LARGE_INTEGER,DWORD,ULARGE_INTEGER*);
+HRESULT STDMETHODCALLTYPE IStream_CopyTo_Proxy(IStream*,IStream*,ULARGE_INTEGER,ULARGE_INTEGER*,ULARGE_INTEGER*);
+HRESULT STDMETHODCALLTYPE IStream_CopyTo_Stub(IStream*,IStream*,ULARGE_INTEGER,ULARGE_INTEGER*,ULARGE_INTEGER*);
+HRESULT STDMETHODCALLTYPE IEnumSTATSTG_Next_Proxy(IEnumSTATSTG*,ULONG,STATSTG*,ULONG*);
+HRESULT STDMETHODCALLTYPE IEnumSTATSTG_Next_Stub(IEnumSTATSTG*,ULONG,STATSTG*,ULONG*);
+HRESULT STDMETHODCALLTYPE IStorage_OpenStream_Proxy(IStorage*,OLECHAR*,void*,DWORD,DWORD,IStream**);
+HRESULT STDMETHODCALLTYPE IStorage_OpenStream_Stub(IStorage*,OLECHAR*,unsigned long,BYTE*,DWORD,DWORD,IStream** );
+HRESULT STDMETHODCALLTYPE IStorage_EnumElements_Proxy(IStorage*,DWORD,void*,DWORD,IEnumSTATSTG**);
+HRESULT STDMETHODCALLTYPE IStorage_EnumElements_Stub(IStorage*,DWORD,unsigned long,BYTE*,DWORD,IEnumSTATSTG**);
+HRESULT STDMETHODCALLTYPE ILockBytes_ReadAt_Proxy(ILockBytes*,ULARGE_INTEGER,void*,ULONG,ULONG*);
+HRESULT STDMETHODCALLTYPE ILockBytes_ReadAt_Stub(ILockBytes*,ULARGE_INTEGER,BYTE*,ULONG,ULONG*);
+HRESULT STDMETHODCALLTYPE ILockBytes_WriteAt_Proxy(ILockBytes*,ULARGE_INTEGER,const void*,ULONG,ULONG*);
+HRESULT STDMETHODCALLTYPE ILockBytes_WriteAt_Stub(ILockBytes*,ULARGE_INTEGER,BYTE*,ULONG,ULONG*);
+
+#if (!defined (__cplusplus) || defined (CINTERFACE)) \
+ && defined (COBJMACROS)
+#define IMarshal_QueryInterface(T,r,p) (T)->lpVtbl->QueryInterface(T,r,p)
+#define IMarshal_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMarshal_Release(This) (This)->lpVtbl->Release(This)
+#define IMarshal_GetUnmarshalClass(T,r,pv,dw,pvD,m,pC) (T)->lpVtbl->GetUnmarshalClass(T,r,pv,dw,pvD,m,pC)
+#define IMarshal_GetMarshalSizeMax(T,r,pv,dw,pD,m,p) (T)->lpVtbl->GetMarshalSizeMax(T,r,pv,dw,pD,m,p)
+#define IMarshal_MarshalInterface(T,p,r,pv,dw,pvD,m) (T)->lpVtbl->MarshalInterface(T,p,r,pv,dw,pv,m)
+#define IMarshal_UnmarshalInterface(T,p,r,pp) (T)->lpVtbl->UnmarshalInterface(T,p,r,pp)
+#define IMarshal_ReleaseMarshalData(T,p) (T)->lpVtbl->ReleaseMarshalData(T,p)
+#define IMarshal_DisconnectObject(T,d) (T)->lpVtbl->DisconnectObject(T,d)
+#define IMalloc_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMalloc_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMalloc_Release(This) (This)->lpVtbl->Release(This)
+#define IMalloc_Alloc(This,cb) (This)->lpVtbl->Alloc(This,cb)
+#define IMalloc_Realloc(This,pv,cb) (This)->lpVtbl->Realloc(This,pv,cb)
+#define IMalloc_Free(This,pv) (This)->lpVtbl->Free(This,pv)
+#define IMalloc_GetSize(This,pv) (This)->lpVtbl->GetSize(This,pv)
+#define IMalloc_DidAlloc(This,pv) (This)->lpVtbl->DidAlloc(This,pv)
+#define IMalloc_HeapMinimize(This) (This)->lpVtbl->HeapMinimize(This)
+#define IMallocSpy_QueryInterface(T,r,p) (T)->lpVtbl->QueryInterface(T,r,p)
+#define IMallocSpy_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMallocSpy_Release(This) (This)->lpVtbl->Release(This)
+#define IMallocSpy_PreAlloc(T,c) (T)->lpVtbl->PreAlloc(T,c)
+#define IMallocSpy_PostAlloc(This,p) (This)->lpVtbl->PostAlloc(This,p)
+#define IMallocSpy_PreFree(This,p,f) (This)->lpVtbl->PreFree(This,p,f)
+#define IMallocSpy_PostFree(This,fSpyed) (This)->lpVtbl->PostFree(This,fSpyed)
+#define IMallocSpy_PreRealloc(T,p,c,pp,f) (T)->lpVtbl->PreRealloc(T,p,c,pp,f)
+#define IMallocSpy_PostRealloc(T,p,f) (T)->lpVtbl->PostRealloc(T,p,f)
+#define IMallocSpy_PreGetSize(This,p,f) (This)->lpVtbl->PreGetSize(This,p,f)
+#define IMallocSpy_PostGetSize(This,cbActual,fSpyed) (This)->lpVtbl->PostGetSize(This,cbActual,fSpyed)
+#define IMallocSpy_PreDidAlloc(This,pRequest,fSpyed) (This)->lpVtbl->PreDidAlloc(This,pRequest,fSpyed)
+#define IMallocSpy_PostDidAlloc(This,pRequest,fSpyed,fActual) (This)->lpVtbl->PostDidAlloc(This,pRequest,fSpyed,fActual)
+#define IMallocSpy_PreHeapMinimize(T) (T)->lpVtbl->PreHeapMinimize(T)
+#define IMallocSpy_PostHeapMinimize(T) (T)->lpVtbl->PostHeapMinimize(T)
+#define IStdMarshalInfo_QueryInterface(T,r,p) (This)->lpVtbl->QueryInterface(T,r,p)
+#define IStdMarshalInfo_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IStdMarshalInfo_Release(This) (This)->lpVtbl->Release(This)
+#define IStdMarshalInfo_GetClassForHandler(This,D,p,C) (This)->lpVtbl->GetClassForHandler(This,D,p,C)
+#define IExternalConnection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IExternalConnection_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IExternalConnection_Release(This) (This)->lpVtbl->Release(This)
+#define IExternalConnection_AddConnection(T,e,r) (T)->lpVtbl->AddConnection(T,e,r)
+#define IExternalConnection_ReleaseConnection(This,e,r,f) (This)->lpVtbl->ReleaseConnection(This,e,r,f)
+#define IEnumUnknown_QueryInterface(T,r,p) (This)->lpVtbl->QueryInterface(T,r,p)
+#define IEnumUnknown_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IEnumUnknown_Release(This) (This)->lpVtbl->Release(This)
+#define IEnumUnknown_Next(This,celt,rgelt,p) (This)->lpVtbl->Next(This,celt,rgelt,p)
+#define IEnumUnknown_Skip(This,celt) (This)->lpVtbl->Skip(This,celt)
+#define IEnumUnknown_Reset(This) (This)->lpVtbl->Reset(This)
+#define IEnumUnknown_Clone(This,ppenum) (This)->lpVtbl->Clone(This,ppenum)
+#define IBindCtx_QueryInterface(T,r,p) (T)->lpVtbl->QueryInterface(T,r,p)
+#define IBindCtx_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBindCtx_Release(This) (This)->lpVtbl->Release(This)
+#define IBindCtx_RegisterObjectBound(T,p) (T)->lpVtbl->RegisterObjectBound(T,p)
+#define IBindCtx_RevokeObjectBound(T,p) (T)->lpVtbl->RevokeObjectBound(T,p)
+#define IBindCtx_ReleaseBoundObjects(T) (T)->lpVtbl->ReleaseBoundObjects(T)
+#define IBindCtx_SetBindOptions(T,p) (T)->lpVtbl->SetBindOptions(T,p)
+#define IBindCtx_GetBindOptions(This,pbindopts) (This)->lpVtbl->GetBindOptions(This,pbindopts)
+#define IBindCtx_GetRunningObjectTable(This,pprot) (This)->lpVtbl->GetRunningObjectTable(This,pprot)
+#define IBindCtx_RegisterObjectParam(This,pszKey,punk) (This)->lpVtbl->RegisterObjectParam(This,pszKey,punk)
+#define IBindCtx_GetObjectParam(This,pszKey,ppunk) (This)->lpVtbl->GetObjectParam(This,pszKey,ppunk)
+#define IBindCtx_EnumObjectParam(This,ppenum) (This)->lpVtbl->EnumObjectParam(This,ppenum)
+#define IBindCtx_RevokeObjectParam(This,pszKey) (This)->lpVtbl->RevokeObjectParam(This,pszKey)
+#define IEnumMoniker_QueryInterface(T,r,p) (T)->lpVtbl->QueryInterface(T,r,p)
+#define IEnumMoniker_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IEnumMoniker_Release(This) (This)->lpVtbl->Release(This)
+#define IEnumMoniker_Next(This,celt,rgelt,pceltFetched) (This)->lpVtbl->Next(This,celt,rgelt,pceltFetched)
+#define IEnumMoniker_Skip(This,celt) (This)->lpVtbl->Skip(This,celt)
+#define IEnumMoniker_Reset(This) (This)->lpVtbl->Reset(This)
+#define IEnumMoniker_Clone(This,ppenum) (This)->lpVtbl->Clone(This,ppenum)
+#define IRunnableObject_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IRunnableObject_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IRunnableObject_Release(This) (This)->lpVtbl->Release(This)
+#define IRunnableObject_GetRunningClass(This,lpClsid) (This)->lpVtbl->GetRunningClass(This,lpClsid)
+#define IRunnableObject_Run(This,pbc) (This)->lpVtbl->Run(This,pbc)
+#define IRunnableObject_IsRunning(This) (This)->lpVtbl->IsRunning(This)
+#define IRunnableObject_LockRunning(This,fLock,fLastUnlockCloses) (This)->lpVtbl->LockRunning(This,fLock,fLastUnlockCloses)
+#define IRunnableObject_SetContainedObject(This,fContained) (This)->lpVtbl->SetContainedObject(This,fContained)
+#define IRunningObjectTable_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IRunningObjectTable_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IRunningObjectTable_Release(This) (This)->lpVtbl->Release(This)
+#define IRunningObjectTable_Register(This,grfFlags,punkObject,pmkObjectName,pdwRegister) (This)->lpVtbl->Register(This,grfFlags,punkObject,pmkObjectName,pdwRegister)
+#define IRunningObjectTable_Revoke(This,dwRegister) (This)->lpVtbl->Revoke(This,dwRegister)
+#define IRunningObjectTable_IsRunning(This,pmkObjectName) (This)->lpVtbl->IsRunning(This,pmkObjectName)
+#define IRunningObjectTable_GetObject(This,pmkObjectName,ppunkObject) (This)->lpVtbl->GetObject(This,pmkObjectName,ppunkObject)
+#define IRunningObjectTable_NoteChangeTime(This,dwRegister,pfiletime) (This)->lpVtbl->NoteChangeTime(This,dwRegister,pfiletime)
+#define IRunningObjectTable_GetTimeOfLastChange(This,pmkObjectName,pfiletime) (This)->lpVtbl->GetTimeOfLastChange(This,pmkObjectName,pfiletime)
+#define IRunningObjectTable_EnumRunning(This,ppenumMoniker) (This)->lpVtbl->EnumRunning(This,ppenumMoniker)
+#define IPersist_QueryInterface(T,r,p) (T)->lpVtbl->QueryInterface(T,r,p)
+#define IPersist_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IPersist_Release(This) (This)->lpVtbl->Release(This)
+#define IPersist_GetClassID(This,pClassID) (This)->lpVtbl->GetClassID(This,pClassID)
+#define IPersistStream_QueryInterface(T,r,p) (T)->lpVtbl->QueryInterface(T,r,p)
+#define IPersistStream_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IPersistStream_Release(This) (This)->lpVtbl->Release(This)
+#define IPersistStream_GetClassID(T,p) (T)->lpVtbl->GetClassID(T,p)
+#define IPersistStream_IsDirty(This) (This)->lpVtbl->IsDirty(This)
+#define IPersistStream_Load(This,pStm) (This)->lpVtbl->Load(This,pStm)
+#define IPersistStream_Save(T,p,f) (T)->lpVtbl->Save(T,p,f)
+#define IPersistStream_GetSizeMax(T,p) (T)->lpVtbl->GetSizeMax(T,p)
+#define IMoniker_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMoniker_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMoniker_Release(This) (This)->lpVtbl->Release(This)
+#define IMoniker_GetClassID(This,pClassID) (This)->lpVtbl->GetClassID(This,pClassID)
+#define IMoniker_IsDirty(This) (This)->lpVtbl->IsDirty(This)
+#define IMoniker_Load(This,pStm) (This)->lpVtbl->Load(This,pStm)
+#define IMoniker_Save(This,pStm,fClearDirty) (This)->lpVtbl->Save(This,pStm,fClearDirty)
+#define IMoniker_GetSizeMax(This,pcbSize) (This)->lpVtbl->GetSizeMax(This,pcbSize)
+#define IMoniker_BindToObject(T,p,pm,r,pp) (T)->lpVtbl->BindToObject(T,p,pm,r,pp)
+#define IMoniker_BindToStorage(This,pbc,pmkToLeft,riid,ppvObj) (This)->lpVtbl->BindToStorage(This,pbc,pmkToLeft,riid,ppvObj)
+#define IMoniker_Reduce(This,pbc,dwReduceHowFar,ppmkToLeft,ppmkReduced) (This)->lpVtbl->Reduce(This,pbc,dwReduceHowFar,ppmkToLeft,ppmkReduced)
+#define IMoniker_ComposeWith(This,pmkRight,fOnlyIfNotGeneric,ppmkComposite) (This)->lpVtbl->ComposeWith(This,pmkRight,fOnlyIfNotGeneric,ppmkComposite)
+#define IMoniker_Enum(T,f,pp) (T)->lpVtbl->Enum(T,f,pp)
+#define IMoniker_IsEqual(This,p) (This)->lpVtbl->IsEqual(This,p)
+#define IMoniker_Hash(This,pdwHash) (This)->lpVtbl->Hash(This,pdwHash)
+#define IMoniker_IsRunning(T,pbc,Left,N) (T)->lpVtbl->IsRunning(T,pbc,Left,N)
+#define IMoniker_GetTimeOfLastChange(This,pbc,pmkToLeft,pFileTime) (This)->lpVtbl->GetTimeOfLastChange(This,pbc,pmkToLeft,pFileTime)
+#define IMoniker_Inverse(This,ppmk) (This)->lpVtbl->Inverse(This,ppmk)
+#define IMoniker_CommonPrefixWith(This,pmkOther,ppmkPrefix) (This)->lpVtbl->CommonPrefixWith(This,pmkOther,ppmkPrefix)
+#define IMoniker_RelativePathTo(This,pmkOther,ppmkRelPath) (This)->lpVtbl->RelativePathTo(This,pmkOther,ppmkRelPath)
+#define IMoniker_GetDisplayName(This,pbc,pmkToLeft,ppszDisplayName) (This)->lpVtbl->GetDisplayName(This,pbc,pmkToLeft,ppszDisplayName)
+#define IMoniker_ParseDisplayName(This,pbc,pmkToLeft,pszDisplayName,pchEaten,ppmkOut) (This)->lpVtbl->ParseDisplayName(This,pbc,pmkToLeft,pszDisplayName,pchEaten,ppmkOut)
+#define IMoniker_IsSystemMoniker(This,pdwMksys) (This)->lpVtbl->IsSystemMoniker(This,pdwMksys)
+#define IROTData_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IROTData_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IROTData_Release(This) (This)->lpVtbl->Release(This)
+#define IROTData_GetComparisonData(This,pbData,cbMax,pcbData) (This)->lpVtbl->GetComparisonData(This,pbData,cbMax,pcbData)
+#define IEnumString_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IEnumString_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IEnumString_Release(This) (This)->lpVtbl->Release(This)
+#define IEnumString_Next(This,celt,rgelt,pceltFetched) (This)->lpVtbl->Next(This,celt,rgelt,pceltFetched)
+#define IEnumString_Skip(This,celt) (This)->lpVtbl->Skip(This,celt)
+#define IEnumString_Reset(This) (This)->lpVtbl->Reset(This)
+#define IEnumString_Clone(This,ppenum) (This)->lpVtbl->Clone(This,ppenum)
+#define IStream_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IStream_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IStream_Release(This) (This)->lpVtbl->Release(This)
+#define IStream_Read(This,pv,cb,pcbRead) (This)->lpVtbl->Read(This,pv,cb,pcbRead)
+#define IStream_Write(This,pv,cb,pcbWritten) (This)->lpVtbl->Write(This,pv,cb,pcbWritten)
+#define IStream_Seek(This,dlibMove,dwOrigin,plibNewPosition) (This)->lpVtbl->Seek(This,dlibMove,dwOrigin,plibNewPosition)
+#define IStream_SetSize(This,libNewSize) (This)->lpVtbl->SetSize(This,libNewSize)
+#define IStream_CopyTo(This,pstm,cb,pcbRead,pcbWritten) (This)->lpVtbl->CopyTo(This,pstm,cb,pcbRead,pcbWritten)
+#define IStream_Commit(This,grfCommitFlags) (This)->lpVtbl->Commit(This,grfCommitFlags)
+#define IStream_Revert(This) (This)->lpVtbl->Revert(This)
+#define IStream_LockRegion(This,libOffset,cb,dwLockType) (This)->lpVtbl->LockRegion(This,libOffset,cb,dwLockType)
+#define IStream_UnlockRegion(This,libOffset,cb,dwLockType) (This)->lpVtbl->UnlockRegion(This,libOffset,cb,dwLockType)
+#define IStream_Stat(This,pstatstg,grfStatFlag) (This)->lpVtbl->Stat(This,pstatstg,grfStatFlag)
+#define IStream_Clone(This,ppstm) (This)->lpVtbl->Clone(This,ppstm)
+#define IEnumSTATSTG_QueryInterface(T,r,p) (T)->lpVtbl->QueryInterface(T,r,p)
+#define IEnumSTATSTG_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IEnumSTATSTG_Release(This) (This)->lpVtbl->Release(This)
+#define IEnumSTATSTG_Next(T,c,r,p) (T)->lpVtbl->Next(T,c,r,p)
+#define IEnumSTATSTG_Skip(This,celt) (This)->lpVtbl->Skip(This,celt)
+#define IEnumSTATSTG_Reset(This) (This)->lpVtbl->Reset(This)
+#define IEnumSTATSTG_Clone(This,ppenum) (This)->lpVtbl->Clone(This,ppenum)
+#define IStorage_QueryInterface(T,r,p) (T)->lpVtbl->QueryInterface(T,r,p)
+#define IStorage_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IStorage_Release(This) (This)->lpVtbl->Release(This)
+#define IStorage_CreateStream(T,p,g,r1,r2,pp) (T)->lpVtbl->CreateStream(T,p,g,r1,r2,pp)
+#define IStorage_OpenStream(T,p,r1,g,r2,pp) (T)->lpVtbl->OpenStream(T,p,r1,g,r2,pp)
+#define IStorage_CreateStorage(T,p,g,d,r2,pp) (T)->lpVtbl->CreateStorage(T,p,g,d,r2,pp)
+#define IStorage_OpenStorage(This,pwcsName,pstgPriority,grfMode,snbExclude,reserved,ppstg) (This)->lpVtbl->OpenStorage(This,pwcsName,pstgPriority,grfMode,snbExclude,reserved,ppstg)
+#define IStorage_CopyTo(This,ciidExclude,rgiidExclude,snbExclude,pstgDest) (This)->lpVtbl->CopyTo(This,ciidExclude,rgiidExclude,snbExclude,pstgDest)
+#define IStorage_MoveElementTo(This,pwcsName,pstgDest,pwcsNewName,grfFlags) (This)->lpVtbl->MoveElementTo(This,pwcsName,pstgDest,pwcsNewName,grfFlags)
+#define IStorage_Commit(This,g) (This)->lpVtbl->Commit(This,g)
+#define IStorage_Revert(This) (This)->lpVtbl->Revert(This)
+#define IStorage_EnumElements(This,reserved1,reserved2,reserved3,ppenum) (This)->lpVtbl->EnumElements(This,reserved1,reserved2,reserved3,ppenum)
+#define IStorage_DestroyElement(This,pwcsName) (This)->lpVtbl->DestroyElement(This,pwcsName)
+#define IStorage_RenameElement(This,pwcsOldName,pwcsNewName) (This)->lpVtbl->RenameElement(This,pwcsOldName,pwcsNewName)
+#define IStorage_SetElementTimes(This,pwcsName,pctime,patime,pmtime) (This)->lpVtbl->SetElementTimes(This,pwcsName,pctime,patime,pmtime)
+#define IStorage_SetClass(This,clsid) (This)->lpVtbl->SetClass(This,clsid)
+#define IStorage_SetStateBits(This,grfStateBits,grfMask) (This)->lpVtbl->SetStateBits(This,grfStateBits,grfMask)
+#define IStorage_Stat(This,p,g) (This)->lpVtbl->Stat(This,p,g)
+#define IPersistFile_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IPersistFile_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IPersistFile_Release(This) (This)->lpVtbl->Release(This)
+#define IPersistFile_GetClassID(This,pClassID) (This)->lpVtbl->GetClassID(This,pClassID)
+#define IPersistFile_IsDirty(This) (This)->lpVtbl->IsDirty(This)
+#define IPersistFile_Load(This,pszFileName,dwMode) (This)->lpVtbl->Load(This,pszFileName,dwMode)
+#define IPersistFile_Save(This,pszFileName,fRemember) (This)->lpVtbl->Save(This,pszFileName,fRemember)
+#define IPersistFile_SaveCompleted(This,pszFileName) (This)->lpVtbl->SaveCompleted(This,pszFileName)
+#define IPersistFile_GetCurFile(This,ppszFileName) (This)->lpVtbl->GetCurFile(This,ppszFileName)
+#define IPersistStorage_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IPersistStorage_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IPersistStorage_Release(This) (This)->lpVtbl->Release(This)
+#define IPersistStorage_GetClassID(This,pClassID) (This)->lpVtbl->GetClassID(This,pClassID)
+#define IPersistStorage_IsDirty(This) (This)->lpVtbl->IsDirty(This)
+#define IPersistStorage_InitNew(This,pStg) (This)->lpVtbl->InitNew(This,pStg)
+#define IPersistStorage_Load(This,pStg) (This)->lpVtbl->Load(This,pStg)
+#define IPersistStorage_Save(This,pStgSave,fSameAsLoad) (This)->lpVtbl->Save(This,pStgSave,fSameAsLoad)
+#define IPersistStorage_SaveCompleted(This,pStgNew) (This)->lpVtbl->SaveCompleted(This,pStgNew)
+#define IPersistStorage_HandsOffStorage(This) (This)->lpVtbl->HandsOffStorage(This)
+#define ILockBytes_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ILockBytes_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ILockBytes_Release(This) (This)->lpVtbl->Release(This)
+#define ILockBytes_ReadAt(This,ulOffset,pv,cb,pcbRead) (This)->lpVtbl->ReadAt(This,ulOffset,pv,cb,pcbRead)
+#define ILockBytes_WriteAt(This,ulOffset,pv,cb,pcbWritten) (This)->lpVtbl->WriteAt(This,ulOffset,pv,cb,pcbWritten)
+#define ILockBytes_Flush(This) (This)->lpVtbl->Flush(This)
+#define ILockBytes_SetSize(This,cb) (This)->lpVtbl->SetSize(This,cb)
+#define ILockBytes_LockRegion(This,libOffset,cb,dwLockType) (This)->lpVtbl->LockRegion(This,libOffset,cb,dwLockType)
+#define ILockBytes_UnlockRegion(This,libOffset,cb,dwLockType) (This)->lpVtbl->UnlockRegion(This,libOffset,cb,dwLockType)
+#define ILockBytes_Stat(This,pstatstg,grfStatFlag) (This)->lpVtbl->Stat(This,pstatstg,grfStatFlag)
+#define IEnumFORMATETC_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IEnumFORMATETC_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IEnumFORMATETC_Release(This) (This)->lpVtbl->Release(This)
+#define IEnumFORMATETC_Next(This,celt,rgelt,pceltFetched) (This)->lpVtbl->Next(This,celt,rgelt,pceltFetched)
+#define IEnumFORMATETC_Skip(This,celt) (This)->lpVtbl->Skip(This,celt)
+#define IEnumFORMATETC_Reset(This) (This)->lpVtbl->Reset(This)
+#define IEnumFORMATETC_Clone(This,ppenum) (This)->lpVtbl->Clone(This,ppenum)
+#define IEnumSTATDATA_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IEnumSTATDATA_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IEnumSTATDATA_Release(This) (This)->lpVtbl->Release(This)
+#define IEnumSTATDATA_Next(This,celt,rgelt,pceltFetched) (This)->lpVtbl->Next(This,celt,rgelt,pceltFetched)
+#define IEnumSTATDATA_Skip(This,celt) (This)->lpVtbl->Skip(This,celt)
+#define IEnumSTATDATA_Reset(This) (This)->lpVtbl->Reset(This)
+#define IEnumSTATDATA_Clone(This,ppenum) (This)->lpVtbl->Clone(This,ppenum)
+#define IRootStorage_QueryInterface(T,r,O) (T)->lpVtbl->QueryInterface(T,r,O)
+#define IRootStorage_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IRootStorage_Release(This) (This)->lpVtbl->Release(This)
+#define IRootStorage_SwitchToFile(This,pszFile) (This)->lpVtbl->SwitchToFile(This,pszFile)
+#define IAdviseSink_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IAdviseSink_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IAdviseSink_Release(This) (This)->lpVtbl->Release(This)
+#define IAdviseSink_OnDataChange(This,pFormatetc,pStgmed) (This)->lpVtbl->OnDataChange(This,pFormatetc,pStgmed)
+#define IAdviseSink_OnViewChange(This,dwAspect,lindex) (This)->lpVtbl->OnViewChange(This,dwAspect,lindex)
+#define IAdviseSink_OnRename(This,pmk) (This)->lpVtbl->OnRename(This,pmk)
+#define IAdviseSink_OnSave(This) (This)->lpVtbl->OnSave(This)
+#define IAdviseSink_OnClose(This) (This)->lpVtbl->OnClose(This)
+#define IAdviseSink2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IAdviseSink2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IAdviseSink2_Release(This) (This)->lpVtbl->Release(This)
+#define IAdviseSink2_OnDataChange(This,pFormatetc,pStgmed) (This)->lpVtbl->OnDataChange(This,pFormatetc,pStgmed)
+#define IAdviseSink2_OnViewChange(This,dwAspect,lindex) (This)->lpVtbl->OnViewChange(This,dwAspect,lindex)
+#define IAdviseSink2_OnRename(This,pmk) (This)->lpVtbl->OnRename(This,pmk)
+#define IAdviseSink2_OnSave(This) (This)->lpVtbl->OnSave(This)
+#define IAdviseSink2_OnClose(This) (This)->lpVtbl->OnClose(This)
+#define IAdviseSink2_OnLinkSrcChange(This,pmk) (This)->lpVtbl->OnLinkSrcChange(This,pmk)
+#define IDataObject_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDataObject_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDataObject_Release(This) (This)->lpVtbl->Release(This)
+#define IDataObject_GetData(This,pformatetcIn,pmedium) (This)->lpVtbl->GetData(This,pformatetcIn,pmedium)
+#define IDataObject_GetDataHere(This,pformatetc,pmedium) (This)->lpVtbl->GetDataHere(This,pformatetc,pmedium)
+#define IDataObject_QueryGetData(This,pformatetc) (This)->lpVtbl->QueryGetData(This,pformatetc)
+#define IDataObject_GetCanonicalFormatEtc(This,pformatectIn,pformatetcOut) (This)->lpVtbl->GetCanonicalFormatEtc(This,pformatectIn,pformatetcOut)
+#define IDataObject_SetData(This,pformatetc,pmedium,fRelease) (This)->lpVtbl->SetData(This,pformatetc,pmedium,fRelease)
+#define IDataObject_EnumFormatEtc(This,dwDirection,ppenumFormatEtc) (This)->lpVtbl->EnumFormatEtc(This,dwDirection,ppenumFormatEtc)
+#define IDataObject_DAdvise(This,pformatetc,advf,pAdvSink,pdwConnection) (This)->lpVtbl->DAdvise(This,pformatetc,advf,pAdvSink,pdwConnection)
+#define IDataObject_DUnadvise(This,dwConnection) (This)->lpVtbl->DUnadvise(This,dwConnection)
+#define IDataObject_EnumDAdvise(This,ppenumAdvise) (This)->lpVtbl->EnumDAdvise(This,ppenumAdvise)
+#define IDataAdviseHolder_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDataAdviseHolder_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDataAdviseHolder_Release(This) (This)->lpVtbl->Release(This)
+#define IDataAdviseHolder_Advise(This,pDataObject,pFetc,advf,pAdvise,pdwConnection) (This)->lpVtbl->Advise(This,pDataObject,pFetc,advf,pAdvise,pdwConnection)
+#define IDataAdviseHolder_Unadvise(This,dwConnection) (This)->lpVtbl->Unadvise(This,dwConnection)
+#define IDataAdviseHolder_EnumAdvise(This,ppenumAdvise) (This)->lpVtbl->EnumAdvise(This,ppenumAdvise)
+#define IDataAdviseHolder_SendOnDataChange(This,pDataObject,dwReserved,advf) (This)->lpVtbl->SendOnDataChange(This,pDataObject,dwReserved,advf)
+#define IMessageFilter_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMessageFilter_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMessageFilter_Release(This) (This)->lpVtbl->Release(This)
+#define IMessageFilter_HandleInComingCall(T,d,h,dw,lp) (T)->lpVtbl->HandleInComingCall(T,d,h,dw,lp)
+#define IMessageFilter_RetryRejectedCall(s,C,T,R) (s)->lpVtbl->RetryRejectedCall(s,C,T,R)
+#define IMessageFilter_MessagePending(s,C,T,P) (s)->lpVtbl->MessagePending(This,C,T,P)
+#define IRpcChannelBuffer_QueryInterface(T,r,p) (T)->lpVtbl->QueryInterface(T,r,p)
+#define IRpcChannelBuffer_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IRpcChannelBuffer_Release(This) (This)->lpVtbl->Release(This)
+#define IRpcChannelBuffer_GetBuffer(This,pMessage,riid) (This)->lpVtbl->GetBuffer(This,pMessage,riid)
+#define IRpcChannelBuffer_SendReceive(T,p,pS) (T)->lpVtbl->SendReceive(T,p,pS)
+#define IRpcChannelBuffer_FreeBuffer(T,p) (T)->lpVtbl->FreeBuffer(T,p)
+#define IRpcChannelBuffer_GetDestCtx(This,pdwDestContext,ppvDestContext) (This)->lpVtbl->GetDestCtx(This,pdwDestContext,ppvDestContext)
+#define IRpcChannelBuffer_IsConnected(This) (This)->lpVtbl->IsConnected(This)
+#define IRpcProxyBuffer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IRpcProxyBuffer_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IRpcProxyBuffer_Release(This) (This)->lpVtbl->Release(This)
+#define IRpcProxyBuffer_Connect(This,pRpcChannelBuffer) (This)->lpVtbl->Connect(This,pRpcChannelBuffer)
+#define IRpcProxyBuffer_Disconnect(This) (This)->lpVtbl->Disconnect(This)
+#define IRpcStubBuffer_QueryInterface(T,r,pp) (T)->lpVtbl->QueryInterface(T,r,pp)
+#define IRpcStubBuffer_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IRpcStubBuffer_Release(This) (This)->lpVtbl->Release(This)
+#define IRpcStubBuffer_Connect(This,p) (This)->lpVtbl->Connect(This,p)
+#define IRpcStubBuffer_Disconnect(This) (This)->lpVtbl->Disconnect(This)
+#define IRpcStubBuffer_Invoke(T,_prpcmsg,_p) (T)->lpVtbl->Invoke(T,_prpcmsg,_p)
+#define IRpcStubBuffer_IsIIDSupported(T,d) (T)->lpVtbl->IsIIDSupported(T,d)
+#define IRpcStubBuffer_CountRefs(This) (This)->lpVtbl->CountRefs(This)
+#define IRpcStubBuffer_DebugServerQueryInterface(T,p) (T)->lpVtbl->DebugServerQueryInterface(T,p)
+#define IRpcStubBuffer_DebugServerRelease(T,p) (T)->lpVtbl->DebugServerRelease(T,p)
+#define IPSFactoryBuffer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IPSFactoryBuffer_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IPSFactoryBuffer_Release(This) (This)->lpVtbl->Release(This)
+#define IPSFactoryBuffer_CreateProxy(T,U,r,P,p) (T)->lpVtbl->CreateProxy(T,U,r,P,p)
+#define IPSFactoryBuffer_CreateStub(T,r,U,p) (T)->lpVtbl->CreateStub(T,r,U,p)
+#define IClassActivator_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define IClassActivator_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define IClassActivator_Release(T) (T)->lpVtbl->Release(T)
+#define IClassActivator_GetClassObject(T,a,b,c,d,e) (T)->lpVtbl->GetClassObject(T,a,b,c,d,e)
+#endif /* COBJMACROS */
+
+#endif
diff --git a/tcc/include/winapi/objsafe.h b/tcc/include/winapi/objsafe.h
new file mode 100644
index 0000000..ffab650
--- /dev/null
+++ b/tcc/include/winapi/objsafe.h
@@ -0,0 +1,26 @@
+#ifndef _OBJSAFE_H
+#define _OBJSAFE_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define INTERFACESAFE_FOR_UNTRUSTED_CALLER 0x00000001
+#define INTERFACESAFE_FOR_UNTRUSTED_DATA 0x00000002
+
+EXTERN_C const IID IID_IObjectSafety;
+#define INTERFACE IObjectSafety
+DECLARE_INTERFACE_(IObjectSafety,IUnknown)
+{
+ STDMETHOD(GetInterfaceSafetyOptions)(THIS_ REFIID,DWORD*,DWORD*) PURE;
+ STDMETHOD(SetInterfaceSafetyOptions)(THIS_ REFIID,DWORD,DWORD) PURE;
+};
+#undef INTERFACE
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/objsel.h b/tcc/include/winapi/objsel.h
new file mode 100644
index 0000000..c298a55
--- /dev/null
+++ b/tcc/include/winapi/objsel.h
@@ -0,0 +1,118 @@
+/*
+ * objsel.h - Active Directory
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may use,
+ * modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+#ifndef _OBJSEL_H
+#define _OBJSEL_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--- Active Directory Reference - Active Directory Structures - Object Picker Dialog Box Structures */
+#if (_WIN32_WINNT >= 0x0500)
+typedef struct _DS_SELECTION {
+ PWSTR pwzName;
+ PWSTR pwzADsPath;
+ PWSTR pwzClass;
+ PWSTR pwzUPN;
+ VARIANT *pvarFetchedAttributes;
+ ULONG flScopeType;
+} DS_SELECTION,*PDS_SELECTION;
+typedef struct _DS_SELECTION_LIST {
+ ULONG cItems;
+ ULONG cFetchedAttributes;
+ DS_SELECTION aDsSelection[ANYSIZE_ARRAY];
+} DS_SELECTION_LIST,*PDS_SELECTION_LIST;
+
+typedef struct _DSOP_UPLEVEL_FILTER_FLAGS {
+ ULONG flBothModes;
+ ULONG flMixedModeOnly;
+ ULONG flNativeModeOnly;
+} DSOP_UPLEVEL_FILTER_FLAGS;
+#define DSOP_FILTER_INCLUDE_ADVANCED_VIEW 0x00000001
+#define DSOP_FILTER_USERS 0x00000002
+#define DSOP_FILTER_BUILTIN_GROUPS 0x00000004
+#define DSOP_FILTER_WELL_KNOWN_PRINCIPALS 0x00000008
+#define DSOP_FILTER_UNIVERSAL_GROUPS_DL 0x00000010
+#define DSOP_FILTER_UNIVERSAL_GROUPS_SE 0x00000020
+#define DSOP_FILTER_GLOBAL_GROUPS_DL 0x00000040
+#define DSOP_FILTER_GLOBAL_GROUPS_SE 0x00000080
+#define DSOP_FILTER_DOMAIN_LOCAL_GROUPS_DL 0x00000100
+#define DSOP_FILTER_DOMAIN_LOCAL_GROUPS_SE 0x00000200
+#define DSOP_FILTER_CONTACTS 0x00000400
+#define DSOP_FILTER_COMPUTERS 0x00000800
+typedef struct _DSOP_FILTER_FLAGS {
+ DSOP_UPLEVEL_FILTER_FLAGS Uplevel;
+ ULONG flDownlevel;
+} DSOP_FILTER_FLAGS;
+#define DSOP_DOWNLEVEL_FILTER_USERS 0x80000001
+#define DSOP_DOWNLEVEL_FILTER_LOCAL_GROUPS 0x80000002
+#define DSOP_DOWNLEVEL_FILTER_GLOBAL_GROUPS 0x80000004
+#define DSOP_DOWNLEVEL_FILTER_COMPUTERS 0x80000008
+#define DSOP_DOWNLEVEL_FILTER_WORLD 0x80000010
+#define DSOP_DOWNLEVEL_FILTER_AUTHENTICATED_USER 0x80000020
+#define DSOP_DOWNLEVEL_FILTER_ANONYMOUS 0x80000040
+#define DSOP_DOWNLEVEL_FILTER_BATCH 0x80000080
+#define DSOP_DOWNLEVEL_FILTER_CREATOR_OWNER 0x80000100
+#define DSOP_DOWNLEVEL_FILTER_CREATOR_GROUP 0x80000200
+#define DSOP_DOWNLEVEL_FILTER_DIALUP 0x80000400
+#define DSOP_DOWNLEVEL_FILTER_INTERACTIVE 0x80000800
+#define DSOP_DOWNLEVEL_FILTER_NETWORK 0x80001000
+#define DSOP_DOWNLEVEL_FILTER_SERVICE 0x80002000
+#define DSOP_DOWNLEVEL_FILTER_SYSTEM 0x80004000
+#define DSOP_DOWNLEVEL_FILTER_EXCLUDE_BUILTIN_GROUPS 0x80008000
+#define DSOP_DOWNLEVEL_FILTER_TERMINAL_SERVER 0x80010000
+#define DSOP_DOWNLEVEL_FILTER_ALL_WELLKNOWN_SIDS 0x80020000
+#define DSOP_DOWNLEVEL_FILTER_LOCAL_SERVICE 0x80040000
+#define DSOP_DOWNLEVEL_FILTER_NETWORK_SERVICE 0x80080000
+#define DSOP_DOWNLEVEL_FILTER_REMOTE_LOGON 0x80100000
+typedef struct _DSOP_SCOPE_INIT_INFO {
+ ULONG cbSize;
+ ULONG flType;
+ ULONG flScope;
+ DSOP_FILTER_FLAGS FilterFlags;
+ PCWSTR pwzDcName;
+ PCWSTR pwzADsPath;
+ HRESULT hr;
+} DSOP_SCOPE_INIT_INFO,*PDSOP_SCOPE_INIT_INFO,*PCDSOP_SCOPE_INIT_INFO;
+#define DSOP_SCOPE_TYPE_TARGET_COMPUTER 0x00000001
+#define DSOP_SCOPE_TYPE_UPLEVEL_JOINED_DOMAIN 0x00000002
+#define DSOP_SCOPE_TYPE_DOWNLEVEL_JOINED_DOMAIN 0x00000004
+#define DSOP_SCOPE_TYPE_ENTERPRISE_DOMAIN 0x00000008
+#define DSOP_SCOPE_TYPE_GLOBAL_CATALOG 0x00000010
+#define DSOP_SCOPE_TYPE_EXTERNAL_UPLEVEL_DOMAIN 0x00000020
+#define DSOP_SCOPE_TYPE_EXTERNAL_DOWNLEVEL_DOMAIN 0x00000040
+#define DSOP_SCOPE_TYPE_WORKGROUP 0x00000080
+#define DSOP_SCOPE_TYPE_USER_ENTERED_UPLEVEL_SCOPE 0x00000100
+#define DSOP_SCOPE_TYPE_USER_ENTERED_DOWNLEVEL_SCOPE 0x00000200
+typedef struct _DSOP_INIT_INFO {
+ ULONG cbSize;
+ PCWSTR pwzTargetComputer;
+ ULONG cDsScopeInfos;
+ PDSOP_SCOPE_INIT_INFO aDsScopeInfos;
+ ULONG flOptions;
+ ULONG cAttributesToFetch;
+ PCWSTR* apwzAttributeNames;
+} DSOP_INIT_INFO,*PDSOP_INIT_INFO;
+#define DSOP_FLAG_MULTISELECT 0x00000001
+#define DSOP_FLAG_SKIP_TARGET_COMPUTER_DC_CHECK 0x00000002
+#endif /* (_WIN32_WINNT >= 0x0500) */
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/ocidl.h b/tcc/include/winapi/ocidl.h
new file mode 100644
index 0000000..79f6b43
--- /dev/null
+++ b/tcc/include/winapi/ocidl.h
@@ -0,0 +1,837 @@
+#ifndef _OCIDL_H
+#define _OCIDL_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <ole2.h>
+
+typedef _COM_interface IErrorLog *LPERRORLOG;
+typedef _COM_interface IPropertyBag *LPPROPERTYBAG;
+typedef _COM_interface IPropertyBag2 *LPPROPERTYBAG2;
+typedef _COM_interface IEnumConnections *LPENUMCONNECTIONS;
+typedef _COM_interface IConnectionPoint *LPCONNECTIONPOINT;
+typedef _COM_interface IEnumConnectionPoints *LPENUMCONNECTIONPOINTS;
+typedef _COM_interface IPropertyPageSite *LPPROPERTYPAGESITE;
+typedef _COM_interface IFont *LPFONT;
+typedef _COM_interface IFontDisp *LPFONTDISP;
+typedef _COM_interface IOleUndoManager *LPOLEUNDOMANAGER;
+
+#ifndef OLE2ANSI
+typedef TEXTMETRICW TEXTMETRICOLE;
+#else
+typedef TEXTMETRIC TEXTMETRICOLE;
+#endif
+typedef TEXTMETRICOLE *LPTEXTMETRICOLE;
+typedef DWORD OLE_COLOR;
+typedef UINT OLE_HANDLE;
+typedef long OLE_XPOS_HIMETRIC;
+typedef long OLE_YPOS_HIMETRIC;
+typedef long OLE_XSIZE_HIMETRIC;
+typedef long OLE_YSIZE_HIMETRIC;
+
+typedef enum tagREADYSTATE {
+ READYSTATE_UNINITIALIZED = 0,
+ READYSTATE_LOADING = 1,
+ READYSTATE_LOADED = 2,
+ READYSTATE_INTERACTIVE = 3,
+ READYSTATE_COMPLETE = 4
+} READYSTATE;
+typedef enum tagPROPBAG2_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
+} PROPBAG2_TYPE;
+typedef struct tagPROPBAG2
+{
+ DWORD dwType;
+ VARTYPE vt;
+ CLIPFORMAT cfType;
+ DWORD dwHint;
+ LPOLESTR pstrName;
+ CLSID clsid;
+} PROPBAG2;
+typedef enum tagQACONTAINERFLAGS
+{
+ QACONTAINER_SHOWHATCHING = 1,
+ QACONTAINER_SHOWGRABHANDLES = 2,
+ QACONTAINER_USERMODE = 4,
+ QACONTAINER_DISPLAYASDEFAULT = 8,
+ QACONTAINER_UIDEAD = 16,
+ QACONTAINER_AUTOCLIP = 32,
+ QACONTAINER_MESSAGEREFLECT = 64,
+ QACONTAINER_SUPPORTSMNEMONICS = 128
+} QACONTAINERFLAGS;
+typedef struct tagQACONTAINER
+{
+ ULONG cbSize;
+ _COM_interface IOleClientSite *pClientSite;
+ _COM_interface IAdviseSinkEx *pAdviseSink;
+ _COM_interface IPropertyNotifySink *pPropertyNotifySink;
+ IUnknown *pUnkEventSink;
+ DWORD dwAmbientFlags;
+ OLE_COLOR colorFore;
+ OLE_COLOR colorBack;
+ _COM_interface IFont *pFont;
+ _COM_interface IOleUndoManager *pUndoMgr;
+ DWORD dwAppearance;
+ LONG lcid;
+ HPALETTE hpal;
+ _COM_interface IBindHost *pBindHost;
+ _COM_interface IOleControlSite *pOleControlSite;
+ _COM_interface IServiceProvider *pServiceProvider;
+} QACONTAINER;
+typedef struct tagQACONTROL
+{
+ ULONG cbSize;
+ DWORD dwMiscStatus;
+ DWORD dwViewStatus;
+ DWORD dwEventCookie;
+ DWORD dwPropNotifyCookie;
+ DWORD dwPointerActivationPolicy;
+} QACONTROL;
+typedef struct tagPOINTF {
+ float x;
+ float y;
+} POINTF,*LPPOINTF;
+typedef struct tagCONTROLINFO {
+ ULONG cb;
+ HACCEL hAccel;
+ USHORT cAccel;
+ DWORD dwFlags;
+} CONTROLINFO,*LPCONTROLINFO;
+typedef struct tagCONNECTDATA {
+ LPUNKNOWN pUnk;
+ DWORD dwCookie;
+} CONNECTDATA,*LPCONNECTDATA;
+typedef struct tagLICINFO {
+ long cbLicInfo;
+ BOOL fRuntimeKeyAvail;
+ BOOL fLicVerified;
+} LICINFO,*LPLICINFO;
+typedef struct tagCAUUID {
+ ULONG cElems;
+ GUID *pElems;
+} CAUUID,*LPCAUUID;
+typedef struct tagCALPOLESTR {
+ ULONG cElems;
+ LPOLESTR *pElems;
+} CALPOLESTR,*LPCALPOLESTR;
+typedef struct tagCADWORD {
+ ULONG cElems;
+ DWORD *pElems;
+} CADWORD,*LPCADWORD;
+typedef struct tagPROPPAGEINFO {
+ ULONG cb;
+ LPOLESTR pszTitle;
+ SIZE size;
+ LPOLESTR pszDocString;
+ LPOLESTR pszHelpFile;
+ DWORD dwHelpContext;
+} PROPPAGEINFO,*LPPROPPAGEINFO;
+
+EXTERN_C const IID IID_IOleControl;
+#define INTERFACE IOleControl
+DECLARE_INTERFACE_(IOleControl,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetControlInfo)(THIS_ LPCONTROLINFO) PURE;
+ STDMETHOD(OnMnemonic)(THIS_ LPMSG) PURE;
+ STDMETHOD(OnAmbientPropertyChange)(THIS_ DISPID) PURE;
+ STDMETHOD(FreezeEvents)(THIS_ BOOL) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IOleControlSite;
+#define INTERFACE IOleControlSite
+DECLARE_INTERFACE_(IOleControlSite,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(OnControlInfoChanged)(THIS) PURE;
+ STDMETHOD(LockInPlaceActive)(THIS_ BOOL) PURE;
+ STDMETHOD(GetExtendedControl)(THIS_ LPDISPATCH*) PURE;
+ STDMETHOD(TransformCoords)(THIS_ POINTL*,POINTF*,DWORD) PURE;
+ STDMETHOD(TranslateAccelerator)(THIS_ LPMSG,DWORD) PURE;
+ STDMETHOD(OnFocus)(THIS_ BOOL) PURE;
+ STDMETHOD(ShowPropertyFrame)(THIS) PURE;
+};
+#undef INTERFACE
+
+#ifdef COBJMACROS
+#define IOleControlSite_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define IOleControlSite_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define IOleControlSite_Release(T) (T)->lpVtbl->Release(T)
+#define IOleControlSite_OnControlInfoChanged(T) (T)->lpVtbl->OnControlInfoChanged(T)
+#define IOleControlSite_LockInPlaceActive(T,a) (T)->lpVtbl->LockInPlaceActive(T,a)
+#define IOleControlSite_GetExtendedControl(T,a) (T)->lpVtbl->GetExtendedControl(T,a)
+#define IOleControlSite_TransformCoords(T,a,b,c) (T)->lpVtbl->TransformCoords(T,a,b,c)
+#define IOleControlSite_TranslateAccelerator(T,a,b) (T)->lpVtbl->TranslateAccelerator(T,a,b)
+#define IOleControlSite_OnFocus(T,a) (T)->lpVtbl->OnFocus(T,a)
+#define IOleControlSite_ShowPropertyFrame(T) (T)->lpVtbl->ShowPropertyFrame(T)
+#endif
+
+EXTERN_C const IID IID_ISimpleFrameSite;
+#define INTERFACE ISimpleFrameSite
+DECLARE_INTERFACE_(ISimpleFrameSite,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(PreMessageFilter)(THIS_ HWND,UINT,WPARAM,LPARAM,LRESULT*,PDWORD) PURE;
+ STDMETHOD(PostMessageFilter)(THIS_ HWND,UINT,WPARAM,LPARAM,LRESULT*,DWORD) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IErrorLog;
+#define INTERFACE IErrorLog
+DECLARE_INTERFACE_(IErrorLog,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(AddError)(THIS_ LPCOLESTR,LPEXCEPINFO) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IPropertyBag;
+#define INTERFACE IPropertyBag
+DECLARE_INTERFACE_(IPropertyBag,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(Read)(THIS_ LPCOLESTR,LPVARIANT,LPERRORLOG) PURE;
+ STDMETHOD(Write)(THIS_ LPCOLESTR,LPVARIANT) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IPropertyBag2;
+#define INTERFACE IPropertyBag2
+DECLARE_INTERFACE_(IPropertyBag2,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(Read)(THIS_ ULONG,PROPBAG2*,LPERRORLOG,VARIANT*,HRESULT*) PURE;
+ STDMETHOD(Write)(THIS_ ULONG,PROPBAG2*,VARIANT*) PURE;
+ STDMETHOD(CountProperties)(THIS_ ULONG*) PURE;
+ STDMETHOD(GetPropertyInfo)(THIS_ ULONG,ULONG,PROPBAG2*,ULONG*) PURE;
+ STDMETHOD(LoadObject)(THIS_ LPCOLESTR,DWORD,IUnknown*,LPERRORLOG) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IPersistPropertyBag;
+#define INTERFACE IPersistPropertyBag
+DECLARE_INTERFACE_(IPersistPropertyBag,IPersist)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetClassID)(THIS_ LPCLSID) PURE;
+ STDMETHOD(InitNew)(THIS) PURE;
+ STDMETHOD(Load)(THIS_ LPPROPERTYBAG,LPERRORLOG) PURE;
+ STDMETHOD(Save)(THIS_ LPPROPERTYBAG,BOOL,BOOL) PURE;
+};
+#undef INTERFACE
+
+#ifdef COBJMACROS
+#define IPersistPropertyBag_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define IPersistPropertyBag_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define IPersistPropertyBag_Release(T) (T)->lpVtbl->Release(T)
+#define IPersistPropertyBag_GetClassID(T,a) (T)->lpVtbl->GetClassID(T,a)
+#define IPersistPropertyBag_InitNew(T) (T)->lpVtbl->InitNew(T)
+#define IPersistPropertyBag_Load(T,a,b) (T)->lpVtbl->Load(T,a,b)
+#define IPersistPropertyBag_Save(T,a,b,c) (T)->lpVtbl->Save(T,a,b,c)
+#endif
+
+EXTERN_C const IID IID_IPersistPropertyBag2;
+#define INTERFACE IPersistPropertyBag2
+DECLARE_INTERFACE_(IPersistPropertyBag2,IPersist)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetClassID)(THIS_ LPCLSID) PURE;
+ STDMETHOD(InitNew)(THIS) PURE;
+ STDMETHOD(Load)(THIS_ LPPROPERTYBAG2,LPERRORLOG) PURE;
+ STDMETHOD(Save)(THIS_ LPPROPERTYBAG2,BOOL,BOOL) PURE;
+ STDMETHOD(IsDirty)(THIS) PURE;
+};
+#undef INTERFACE
+
+#ifdef COBJMACROS
+#define IPersistPropertyBag2_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define IPersistPropertyBag2_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define IPersistPropertyBag2_Release(T) (T)->lpVtbl->Release(T)
+#define IPersistPropertyBag2_GetClassID(T,a) (T)->lpVtbl->GetClassID(T,a)
+#define IPersistPropertyBag2_InitNew(T) (T)->lpVtbl->InitNew(T)
+#define IPersistPropertyBag2_Load(T,a,b) (T)->lpVtbl->Load(T,a,b)
+#define IPersistPropertyBag2_Save(T,a,b,c) (T)->lpVtbl->Save(T,a,b,c)
+#define IPersistPropertyBag2_IsDirty(T) (T)->lpVtbl->IsDirty(T)
+#endif
+
+EXTERN_C const IID IID_IPersistStreamInit;
+#define INTERFACE IPersistStreamInit
+DECLARE_INTERFACE_(IPersistStreamInit,IPersist)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetClassID)(THIS_ LPCLSID) PURE;
+ STDMETHOD(IsDirty)(THIS) PURE;
+ STDMETHOD(Load)(THIS_ LPSTREAM) PURE;
+ STDMETHOD(Save)(THIS_ LPSTREAM,BOOL) PURE;
+ STDMETHOD(GetSizeMax)(THIS_ PULARGE_INTEGER) PURE;
+ STDMETHOD(InitNew)(THIS) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IPersistMemory;
+#define INTERFACE IPersistMemory
+DECLARE_INTERFACE_(IPersistMemory,IPersist)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetClassID)(THIS_ LPCLSID) PURE;
+ STDMETHOD(IsDirty)(THIS) PURE;
+ STDMETHOD(Load)(THIS_ PVOID,ULONG) PURE;
+ STDMETHOD(Save)(THIS_ PVOID,BOOL,ULONG) PURE;
+ STDMETHOD(GetSizeMax)(THIS_ PULONG) PURE;
+ STDMETHOD(InitNew)(THIS) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IPropertyNotifySink;
+#define INTERFACE IPropertyNotifySink
+DECLARE_INTERFACE_(IPropertyNotifySink,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(OnChanged)(THIS_ DISPID) PURE;
+ STDMETHOD(OnRequestEdit)(THIS_ DISPID) PURE;
+};
+#undef INTERFACE
+
+#ifdef COBJMACROS
+#define IPropertyNotifySink_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define IPropertyNotifySink_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define IPropertyNotifySink_Release(T) (T)->lpVtbl->Release(T)
+#define IPropertyNotifySink_OnChanged(T,a) (T)->lpVtbl->OnChanged(T,a)
+#define IPropertyNotifySink_OnRequestEdit(T,a) (T)->lpVtbl->OnRequestEdit(T,a)
+#endif
+
+EXTERN_C const IID IID_IProvideClassInfo;
+#define INTERFACE IProvideClassInfo
+DECLARE_INTERFACE_(IProvideClassInfo,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetClassInfo)(THIS_ LPTYPEINFO*) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IProvideClassInfo2;
+#define INTERFACE IProvideClassInfo2
+DECLARE_INTERFACE_(IProvideClassInfo2,IProvideClassInfo)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetClassInfo)(THIS_ LPTYPEINFO*) PURE;
+ STDMETHOD(GetGUID)(THIS_ DWORD,GUID*) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IConnectionPointContainer;
+#define INTERFACE IConnectionPointContainer
+DECLARE_INTERFACE_(IConnectionPointContainer,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(EnumConnectionPoints)(THIS_ LPENUMCONNECTIONPOINTS*) PURE;
+ STDMETHOD(FindConnectionPoint)(THIS_ REFIID,LPCONNECTIONPOINT*) PURE;
+};
+#undef INTERFACE
+
+#ifdef COBJMACROS
+#define IConnectionPointContainer_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define IConnectionPointContainer_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define IConnectionPointContainer_Release(T) (T)->lpVtbl->Release(T)
+#define IConnectionPointContainer_EnumConnectionPoints(T,a) (T)->lpVtbl->EnumConnectionPoints(T,a)
+#define IConnectionPointContainer_FindConnectionPoint(T,a,b) (T)->lpVtbl->FindConnectionPoint(T,a,b)
+#endif
+
+EXTERN_C const IID IID_IEnumConnectionPoints;
+#define INTERFACE IEnumConnectionPoints
+DECLARE_INTERFACE_(IEnumConnectionPoints,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(Next)(THIS_ ULONG,LPCONNECTIONPOINT*,ULONG*) PURE;
+ STDMETHOD(Skip)(THIS_ ULONG) PURE;
+ STDMETHOD(Reset)(THIS) PURE;
+ STDMETHOD(Clone)(THIS_ LPENUMCONNECTIONPOINTS*) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IConnectionPoint;
+#define INTERFACE IConnectionPoint
+DECLARE_INTERFACE_(IConnectionPoint,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetConnectionInterface)(THIS_ IID*) PURE;
+ STDMETHOD(GetConnectionPointContainer)(THIS_ IConnectionPointContainer**) PURE;
+ STDMETHOD(Advise)(THIS_ LPUNKNOWN,PDWORD) PURE;
+ STDMETHOD(Unadvise)(THIS_ DWORD) PURE;
+ STDMETHOD(EnumConnections)(THIS_ LPENUMCONNECTIONS*) PURE;
+};
+#undef INTERFACE
+
+#ifdef COBJMACROS
+#define IConnectionPoint_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define IConnectionPoint_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define IConnectionPoint_Release(T) (T)->lpVtbl->Release(T)
+#define IConnectionPoint_GetConnectionInterface(T,a) (T)->lpVtbl->GetConnectionInterface(T,a)
+#define IConnectionPoint_GetConnectionPointContainer(T,a) (T)->lpVtbl->GetConnectionPointContainer(T,a)
+#define IConnectionPoint_Advise(T,a,b) (T)->lpVtbl->Advise(T,a,b)
+#define IConnectionPoint_Unadvise(T,a) (T)->lpVtbl->Unadvise(T,a)
+#define IConnectionPoint_EnumConnections(T,a) (T)->lpVtbl->EnumConnections(T,a)
+#endif
+
+EXTERN_C const IID IID_IEnumConnections;
+#define INTERFACE IEnumConnections
+DECLARE_INTERFACE_(IEnumConnections,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(Next)(THIS_ ULONG,LPCONNECTDATA,PULONG) PURE;
+ STDMETHOD(Skip)(THIS_ ULONG) PURE;
+ STDMETHOD(Reset)(THIS) PURE;
+ STDMETHOD(Clone)(THIS_ LPENUMCONNECTIONS*) PURE;
+};
+#undef INTERFACE
+
+#ifdef COBJMACROS
+#define IEnumConnections_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define IEnumConnections_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define IEnumConnections_Release(T) (T)->lpVtbl->Release(T)
+#define IEnumConnections_Next(T,a,b,c) (T)->lpVtbl->Next(T,a,b,c)
+#define IEnumConnections_Skip(T,a) (T)->lpVtbl->Skip(T,a)
+#define IEnumConnections_Reset(T) (T)->lpVtbl->Reset(T)
+#define IEnumConnections_Clone(T,a) (T)->lpVtbl->Clone(T,a)
+#endif
+
+EXTERN_C const IID IID_IClassFactory2;
+#define INTERFACE IClassFactory2
+DECLARE_INTERFACE_(IClassFactory2,IClassFactory)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(CreateInstance)(THIS_ LPUNKNOWN,REFIID,PVOID*) PURE;
+ STDMETHOD(LockServer)(THIS_ BOOL) PURE;
+ STDMETHOD(GetLicInfo)(THIS_ LPLICINFO) PURE;
+ STDMETHOD(RequestLicKey)(THIS_ DWORD,BSTR*) PURE;
+ STDMETHOD(CreateInstanceLic)(THIS_ LPUNKNOWN,LPUNKNOWN,REFIID,BSTR,PVOID*) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_ISpecifyPropertyPages;
+#define INTERFACE ISpecifyPropertyPages
+DECLARE_INTERFACE_(ISpecifyPropertyPages,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetPages)(THIS_ CAUUID*) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IPerPropertyBrowsing;
+#define INTERFACE IPerPropertyBrowsing
+DECLARE_INTERFACE_(IPerPropertyBrowsing,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetDisplayString)(THIS_ DISPID,BSTR*) PURE;
+ STDMETHOD(MapPropertyToPage)(THIS_ DISPID,LPCLSID) PURE;
+ STDMETHOD(GetPredefinedStrings)(THIS_ DISPID,CALPOLESTR*,CADWORD*) PURE;
+ STDMETHOD(GetPredefinedValue)(THIS_ DISPID,DWORD,VARIANT*) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IPropertyPageSite;
+#define INTERFACE IPropertyPageSite
+DECLARE_INTERFACE_(IPropertyPageSite,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(OnStatusChange)(THIS_ DWORD) PURE;
+ STDMETHOD(GetLocaleID)(THIS_ LCID*) PURE;
+ STDMETHOD(GetPageContainer)(THIS_ LPUNKNOWN*) PURE;
+ STDMETHOD(TranslateAccelerator)(THIS_ LPMSG) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IPropertyPage;
+#define INTERFACE IPropertyPage
+DECLARE_INTERFACE_(IPropertyPage,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(SetPageSite)(THIS_ LPPROPERTYPAGESITE) PURE;
+ STDMETHOD(Activate)(THIS_ HWND,LPCRECT,BOOL) PURE;
+ STDMETHOD(Deactivate)(THIS) PURE;
+ STDMETHOD(GetPageInfo)(THIS_ LPPROPPAGEINFO) PURE;
+ STDMETHOD(SetObjects)(THIS_ ULONG,LPUNKNOWN*) PURE;
+ STDMETHOD(Show)(THIS_ UINT) PURE;
+ STDMETHOD(Move)(THIS_ LPCRECT) PURE;
+ STDMETHOD(IsPageDirty)(THIS) PURE;
+ STDMETHOD(Apply)(THIS) PURE;
+ STDMETHOD(Help)(THIS_ LPCOLESTR) PURE;
+ STDMETHOD(TranslateAccelerator)(THIS_ LPMSG) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IPropertyPage2;
+#define INTERFACE IPropertyPage2
+DECLARE_INTERFACE_(IPropertyPage2,IPropertyPage)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(SetPageSite)(THIS_ LPPROPERTYPAGESITE) PURE;
+ STDMETHOD(Activate)(THIS_ HWND,LPCRECT,BOOL) PURE;
+ STDMETHOD(Deactivate)(THIS) PURE;
+ STDMETHOD(GetPageInfo)(THIS_ LPPROPPAGEINFO) PURE;
+ STDMETHOD(SetObjects)(THIS_ ULONG,LPUNKNOWN*) PURE;
+ STDMETHOD(Show)(THIS_ UINT) PURE;
+ STDMETHOD(Move)(THIS_ LPCRECT) PURE;
+ STDMETHOD(IsPageDirty)(THIS) PURE;
+ STDMETHOD(Apply)(THIS) PURE;
+ STDMETHOD(Help)(THIS_ LPCOLESTR) PURE;
+ STDMETHOD(TranslateAccelerator)(THIS_ LPMSG) PURE;
+ STDMETHOD(EditProperty)(THIS_ DISPID) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IFont;
+#define INTERFACE IFont
+DECLARE_INTERFACE_(IFont,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(get_Name)(THIS_ BSTR*) PURE;
+ STDMETHOD(put_Name)(THIS_ BSTR) PURE;
+ STDMETHOD(get_Size)(THIS_ CY*) PURE;
+ STDMETHOD(put_Size)(THIS_ CY) PURE;
+ STDMETHOD(get_Bold)(THIS_ BOOL*) PURE;
+ STDMETHOD(put_Bold)(THIS_ BOOL) PURE;
+ STDMETHOD(get_Italic)(THIS_ BOOL*) PURE;
+ STDMETHOD(put_Italic)(THIS_ BOOL) PURE;
+ STDMETHOD(get_Underline)(THIS_ BOOL*) PURE;
+ STDMETHOD(put_Underline)(THIS_ BOOL) PURE;
+ STDMETHOD(get_Strikethrough)(THIS_ BOOL*) PURE;
+ STDMETHOD(put_Strikethrough)(THIS_ BOOL) PURE;
+ STDMETHOD(get_Weight)(THIS_ short*) PURE;
+ STDMETHOD(put_Weight)(THIS_ short) PURE;
+ STDMETHOD(get_Charset)(THIS_ short*) PURE;
+ STDMETHOD(put_Charset)(THIS_ short) PURE;
+ STDMETHOD(get_hFont)(THIS_ HFONT*) PURE;
+ STDMETHOD(Clone)(THIS_ IFont**) PURE;
+ STDMETHOD(IsEqual)(THIS_ IFont*) PURE;
+ STDMETHOD(SetRatio)(THIS_ long,long) PURE;
+ STDMETHOD(QueryTextMetrics)(THIS_ LPTEXTMETRICOLE) PURE;
+ STDMETHOD(AddRefHfont)(THIS_ HFONT) PURE;
+ STDMETHOD(ReleaseHfont)(THIS_ HFONT) PURE;
+ STDMETHOD(SetHdc)(THIS_ HDC) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IFontDisp;
+#define INTERFACE IFontDisp
+DECLARE_INTERFACE_(IFontDisp,IDispatch)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetTypeInfoCount)(THIS_ UINT*) PURE;
+ STDMETHOD(GetTypeInfo)(THIS_ UINT,LCID,LPTYPEINFO*) PURE;
+ STDMETHOD(GetIDsOfNames)(THIS_ REFIID,LPOLESTR*,UINT,LCID,DISPID*) PURE;
+ STDMETHOD(Invoke)(THIS_ DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IPicture;
+#define INTERFACE IPicture
+DECLARE_INTERFACE_(IPicture,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(get_Handle)(THIS_ OLE_HANDLE*) PURE;
+ STDMETHOD(get_hPal)(THIS_ OLE_HANDLE*) PURE;
+ STDMETHOD(get_Type)(THIS_ short*) PURE;
+ STDMETHOD(get_Width)(THIS_ OLE_XSIZE_HIMETRIC*) PURE;
+ STDMETHOD(get_Height)(THIS_ OLE_YSIZE_HIMETRIC*) PURE;
+ STDMETHOD(Render)(THIS_ HDC,long,long,long,long,OLE_XPOS_HIMETRIC,OLE_YPOS_HIMETRIC,OLE_XSIZE_HIMETRIC,OLE_YSIZE_HIMETRIC,LPCRECT) PURE;
+ STDMETHOD(set_hPal)(THIS_ OLE_HANDLE) PURE;
+ STDMETHOD(get_CurDC)(THIS_ HDC*) PURE;
+ STDMETHOD(SelectPicture)(THIS_ HDC,HDC*,OLE_HANDLE*) PURE;
+ STDMETHOD(get_KeepOriginalFormat)(THIS_ BOOL*) PURE;
+ STDMETHOD(put_KeepOriginalFormat)(THIS_ BOOL) PURE;
+ STDMETHOD(PictureChanged)(THIS) PURE;
+ STDMETHOD(SaveAsFile)(THIS_ LPSTREAM,BOOL,LONG*) PURE;
+ STDMETHOD(get_Attributes)(THIS_ PDWORD) PURE;
+};
+#undef INTERFACE
+
+#ifdef COBJMACROS
+#define IPicture_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IPicture_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IPicture_Release(p) (p)->lpVtbl->Release(p)
+#define IPicture_get_Handle(p,a) (p)->lpVtbl->get_Handle(p,a)
+#define IPicture_get_hPal(p,a) (p)->lpVtbl->get_hPal(p,a)
+#define IPicture_get_Type(p,a) (p)->lpVtbl->get_Type(p,a)
+#define IPicture_get_Width(p,a) (p)->lpVtbl->get_Width(p,a)
+#define IPicture_get_Height(p,a) (p)->lpVtbl->get_Height(p,a)
+#define IPicture_Render(p,a,b,c,d,e,f,g,h,i,j) (p)->lpVtbl->Render(p,a,b,c,d,e,f,g,h,i,j)
+#define IPicture_set_hPal(p,a) (p)->lpVtbl->set_hPal(p,a)
+#define IPicture_get_CurDC(p,a) (p)->lpVtbl->get_CurDC(p,a)
+#define IPicture_SelectPicture(p,a,b,c) (p)->lpVtbl->SelectPicture(p,a,b,c)
+#define IPicture_get_KeepOriginalFormat(p,a) (p)->lpVtbl->get_KeepOriginalFormat(p,a)
+#define IPicture_put_KeepOriginalFormat(p,a) (p)->lpVtbl->put_KeepOriginalFormat(p,a)
+#define IPicture_PictureChanged(p) (p)->lpVtbl->PictureChanged(p)
+#define IPicture_SaveAsFile(p,a,b,c) (p)->lpVtbl->SaveAsFile(p,a,b,c)
+#define IPicture_get_Attributes(p,a) (p)->lpVtbl->get_Attributes(p,a)
+#endif
+
+EXTERN_C const IID IID_IPictureDisp;
+#define INTERFACE IPictureDisp
+DECLARE_INTERFACE_(IPictureDisp,IDispatch)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetTypeInfoCount)(THIS_ UINT*) PURE;
+ STDMETHOD(GetTypeInfo)(THIS_ UINT,LCID,LPTYPEINFO*) PURE;
+ STDMETHOD(GetIDsOfNames)(THIS_ REFIID,LPOLESTR*,UINT,LCID,DISPID*) PURE;
+ STDMETHOD(Invoke)(THIS_ DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IOleInPlaceSiteEx;
+#define INTERFACE IOleInPlaceSiteEx
+DECLARE_INTERFACE_(IOleInPlaceSiteEx,IOleInPlaceSite)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetWindow)(THIS_ HWND*) PURE;
+ STDMETHOD(ContextSensitiveHelp)(THIS_ BOOL) PURE;
+ STDMETHOD(CanInPlaceActivate)(THIS) PURE;
+ STDMETHOD(OnInPlaceActivate)(THIS) PURE;
+ STDMETHOD(OnUIActivate)(THIS) PURE;
+ STDMETHOD(GetWindowContext)(THIS_ IOleInPlaceFrame**,IOleInPlaceUIWindow**,LPRECT,LPRECT,LPOLEINPLACEFRAMEINFO) PURE;
+ STDMETHOD(Scroll)(THIS_ SIZE) PURE;
+ STDMETHOD(OnUIDeactivate)(THIS_ BOOL) PURE;
+ STDMETHOD(OnInPlaceDeactivate)(THIS) PURE;
+ STDMETHOD(DiscardUndoState)(THIS) PURE;
+ STDMETHOD(DeactivateAndUndo)(THIS) PURE;
+ STDMETHOD(OnPosRectChange)(THIS_ LPCRECT) PURE;
+ STDMETHOD(OnInPlaceActivateEx)(THIS_ BOOL*,DWORD) PURE;
+ STDMETHOD(OnInPlaceDeactivateEx)(THIS_ BOOL) PURE;
+ STDMETHOD(RequestUIActivate)(THIS) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IObjectWithSite;
+#define INTERFACE IObjectWithSite
+DECLARE_INTERFACE_(IObjectWithSite,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(SetSite)(THIS_ IUnknown*) PURE;
+ STDMETHOD(GetSite)(THIS_ REFIID, void**) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IOleInPlaceSiteWindowless;
+#define INTERFACE IOleInPlaceSiteWindowless
+DECLARE_INTERFACE_(IOleInPlaceSiteWindowless,IOleInPlaceSiteEx)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetWindow)(THIS_ HWND*) PURE;
+ STDMETHOD(ContextSensitiveHelp)(THIS_ BOOL) PURE;
+ STDMETHOD(CanInPlaceActivate)(THIS) PURE;
+ STDMETHOD(OnInPlaceActivate)(THIS) PURE;
+ STDMETHOD(OnUIActivate)(THIS) PURE;
+ STDMETHOD(GetWindowContext)(THIS_ IOleInPlaceFrame**,IOleInPlaceUIWindow**,LPRECT,LPRECT,LPOLEINPLACEFRAMEINFO) PURE;
+ STDMETHOD(Scroll)(THIS_ SIZE) PURE;
+ STDMETHOD(OnUIDeactivate)(THIS_ BOOL) PURE;
+ STDMETHOD(OnInPlaceDeactivate)(THIS) PURE;
+ STDMETHOD(DiscardUndoState)(THIS) PURE;
+ STDMETHOD(DeactivateAndUndo)(THIS) PURE;
+ STDMETHOD(OnPosRectChange)(THIS_ LPCRECT) PURE;
+
+ STDMETHOD(OnInPlaceActivateEx)(THIS_ BOOL*,DWORD) PURE;
+ STDMETHOD(OnInPlaceDeactivateEx)(THIS_ BOOL) PURE;
+ STDMETHOD(RequestUIActivate)(THIS) PURE;
+
+ STDMETHOD(CanWindowlessActivate)(THIS) PURE;
+ STDMETHOD(GetCapture)(THIS) PURE;
+ STDMETHOD(SetCapture)(THIS_ BOOL) PURE;
+ STDMETHOD(GetFocus)(THIS) PURE;
+ STDMETHOD(SetFocus)(THIS_ BOOL) PURE;
+ STDMETHOD(GetDC)(THIS_ LPCRECT,DWORD,HDC*) PURE;
+ STDMETHOD(ReleaseDC)(THIS_ HDC) PURE;
+ STDMETHOD(InvalidateRect)(THIS_ LPCRECT,BOOL) PURE;
+ STDMETHOD(InvalidateRgn)(THIS_ HRGN,BOOL) PURE;
+ STDMETHOD(ScrollRect)(THIS_ INT,INT,LPCRECT,LPCRECT) PURE;
+ STDMETHOD(AdjustRect)(THIS_ LPCRECT) PURE;
+ STDMETHOD(OnDefWindowMessage)(THIS_ UINT,WPARAM,LPARAM,LRESULT*) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IAdviseSinkEx;
+#define INTERFACE IAdviseSinkEx
+DECLARE_INTERFACE_(IAdviseSinkEx,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD_(void,OnDataChange)(THIS_ FORMATETC*,STGMEDIUM*) PURE;
+ STDMETHOD_(void,OnViewChange)(THIS_ DWORD,LONG) PURE;
+ STDMETHOD_(void,OnRename)(THIS_ IMoniker*) PURE;
+ STDMETHOD_(void,OnSave)(THIS) PURE;
+ STDMETHOD_(void,OnClose)(THIS) PURE;
+ STDMETHOD(OnViewStatusChange)(THIS_ DWORD) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IPointerInactive;
+#define INTERFACE IPointerInactive
+DECLARE_INTERFACE_(IPointerInactive,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetActivationPolicy)(THIS_ DWORD*) PURE;
+ STDMETHOD(OnInactiveMouseMove)(THIS_ LPCRECT,LONG,LONG,DWORD) PURE;
+ STDMETHOD(OnInactiveSetCursor)(THIS_ LPCRECT,LONG,LONG,DWORD,BOOL) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IOleUndoUnit;
+#define INTERFACE IOleUndoUnit
+DECLARE_INTERFACE_(IOleUndoUnit,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(Do)(THIS_ LPOLEUNDOMANAGER) PURE;
+ STDMETHOD(GetDescription)(THIS_ BSTR*) PURE;
+ STDMETHOD(GetUnitType)(THIS_ CLSID*,LONG*) PURE;
+ STDMETHOD(OnNextAdd)(THIS) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IOleParentUndoUnit;
+#define INTERFACE IOleParentUndoUnit
+DECLARE_INTERFACE_(IOleParentUndoUnit,IOleUndoUnit)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(Do)(THIS_ LPOLEUNDOMANAGER) PURE;
+ STDMETHOD(GetDescription)(THIS_ BSTR*) PURE;
+ STDMETHOD(GetUnitType)(THIS_ CLSID*,LONG*) PURE;
+ STDMETHOD(OnNextAdd)(THIS) PURE;
+ STDMETHOD(Open)(THIS_ IOleParentUndoUnit*) PURE;
+ STDMETHOD(Close)(THIS_ IOleParentUndoUnit*,BOOL) PURE;
+ STDMETHOD(Add)(THIS_ IOleUndoUnit*) PURE;
+ STDMETHOD(FindUnit)(THIS_ IOleUndoUnit*) PURE;
+ STDMETHOD(GetParentState)(THIS_ DWORD*) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IEnumOleUndoUnits;
+#define INTERFACE IEnumOleUndoUnits
+DECLARE_INTERFACE_(IEnumOleUndoUnits,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(Next)(THIS_ ULONG,IOleUndoUnit**,ULONG*) PURE;
+ STDMETHOD(Skip)(THIS_ ULONG) PURE;
+ STDMETHOD(Reset)(THIS) PURE;
+ STDMETHOD(Clone)(THIS_ IEnumOleUndoUnits**) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IOleUndoManager;
+#define INTERFACE IOleUndoManager
+DECLARE_INTERFACE_(IOleUndoManager,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(Open)(THIS_ IOleParentUndoUnit*) PURE;
+ STDMETHOD(Close)(THIS_ IOleParentUndoUnit*,BOOL) PURE;
+ STDMETHOD(Add)(THIS_ IOleUndoUnit*) PURE;
+ STDMETHOD(GetOpenParentState)(THIS_ DWORD*) PURE;
+ STDMETHOD(DiscardFrom)(THIS_ IOleUndoUnit*) PURE;
+ STDMETHOD(UndoTo)(THIS_ IOleUndoUnit*) PURE;
+ STDMETHOD(RedoTo)(THIS_ IOleUndoUnit*) PURE;
+ STDMETHOD(EnumUndoable)(THIS_ IEnumOleUndoUnits**) PURE;
+ STDMETHOD(EnumRedoable)(THIS_ IEnumOleUndoUnits**) PURE;
+ STDMETHOD(GetLastUndoDescription)(THIS_ BSTR*) PURE;
+ STDMETHOD(GetLastRedoDescription)(THIS_ BSTR*) PURE;
+ STDMETHOD(Enable)(THIS_ BOOL) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IQuickActivate;
+#define INTERFACE IQuickActivate
+DECLARE_INTERFACE_(IQuickActivate,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(QuickActivate)(THIS_ QACONTAINER*,QACONTROL*) PURE;
+ STDMETHOD(SetContentExtent)(THIS_ LPSIZEL) PURE;
+ STDMETHOD(GetContentExtent)(THIS_ LPSIZEL) PURE;
+};
+#undef INTERFACE
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/odbcinst.h b/tcc/include/winapi/odbcinst.h
new file mode 100644
index 0000000..b90464f
--- /dev/null
+++ b/tcc/include/winapi/odbcinst.h
@@ -0,0 +1,148 @@
+#ifndef _ODBCINST_H
+#define _ODBCINST_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+#include <sql.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+#ifndef ODBCVER
+#define ODBCVER 0x0351
+#endif
+#define INSTAPI __stdcall
+#define ODBC_ADD_DSN 1
+#define ODBC_CONFIG_DSN 2
+#define ODBC_REMOVE_DSN 3
+#if (ODBCVER >= 0x0250)
+#define ODBC_ADD_SYS_DSN 4
+#define ODBC_CONFIG_SYS_DSN 5
+#define ODBC_REMOVE_SYS_DSN 6
+#define ODBC_INSTALL_INQUIRY 1
+#define ODBC_INSTALL_COMPLETE 2
+#define ODBC_INSTALL_DRIVER 1
+#define ODBC_REMOVE_DRIVER 2
+#define ODBC_CONFIG_DRIVER 3
+#define ODBC_CONFIG_DRIVER_MAX 100
+#endif /* (ODBCVER >= 0x0250) */
+#if (ODBCVER >= 0x0300)
+#define ODBC_REMOVE_DEFAULT_DSN 7
+#define ODBC_BOTH_DSN 0
+#define ODBC_USER_DSN 1
+#define ODBC_SYSTEM_DSN 2
+#define ODBC_ERROR_GENERAL_ERR 1
+#define ODBC_ERROR_INVALID_BUFF_LEN 2
+#define ODBC_ERROR_INVALID_HWND 3
+#define ODBC_ERROR_INVALID_STR 4
+#define ODBC_ERROR_INVALID_REQUEST_TYPE 5
+#define ODBC_ERROR_COMPONENT_NOT_FOUND 6
+#define ODBC_ERROR_INVALID_NAME 7
+#define ODBC_ERROR_INVALID_KEYWORD_VALUE 8
+#define ODBC_ERROR_INVALID_DSN 9
+#define ODBC_ERROR_INVALID_INF 10
+#define ODBC_ERROR_REQUEST_FAILED 11
+#define ODBC_ERROR_INVALID_PATH 12
+#define ODBC_ERROR_LOAD_LIB_FAILED 13
+#define ODBC_ERROR_INVALID_PARAM_SEQUENCE 14
+#define ODBC_ERROR_INVALID_LOG_FILE 15
+#define ODBC_ERROR_USER_CANCELED 16
+#define ODBC_ERROR_USAGE_UPDATE_FAILED 17
+#define ODBC_ERROR_CREATE_DSN_FAILED 18
+#define ODBC_ERROR_WRITING_SYSINFO_FAILED 19
+#define ODBC_ERROR_REMOVE_DSN_FAILED 20
+#define ODBC_ERROR_OUT_OF_MEM 21
+#define ODBC_ERROR_OUTPUT_STRING_TRUNCATED 22
+#endif /* ODBCVER >= 0x0300 */
+
+#ifndef RC_INVOKED
+BOOL INSTAPI ConfigDSN(HWND,WORD,LPCSTR,LPCSTR);
+BOOL INSTAPI ConfigDSNW(HWND,WORD,LPCWSTR,LPCWSTR);
+BOOL INSTAPI ConfigTranslator(HWND,DWORD*);
+BOOL INSTAPI SQLConfigDataSource(HWND,WORD,LPCSTR,LPCSTR);
+BOOL INSTAPI SQLConfigDataSourceW(HWND,WORD,LPCWSTR,LPCWSTR);
+BOOL INSTAPI SQLCreateDataSource(HWND,LPCSTR);
+BOOL INSTAPI SQLCreateDataSourceW(HWND,LPCWSTR);
+BOOL INSTAPI SQLGetAvailableDrivers(LPCSTR,LPSTR,WORD,WORD*);
+BOOL INSTAPI SQLGetAvailableDriversW(LPCWSTR,LPWSTR,WORD,WORD*);
+BOOL INSTAPI SQLGetInstalledDrivers(LPSTR,WORD,WORD*);
+BOOL INSTAPI SQLGetInstalledDriversW(LPWSTR,WORD,WORD*);
+int INSTAPI SQLGetPrivateProfileString(LPCSTR,LPCSTR,LPCSTR,LPSTR,int,LPCSTR);
+int INSTAPI SQLGetPrivateProfileStringW(LPCWSTR,LPCWSTR,LPCWSTR,LPWSTR,int,LPCWSTR);
+BOOL INSTAPI SQLGetTranslator(HWND,LPSTR,WORD,WORD*,LPSTR,WORD,WORD*,DWORD*);
+BOOL INSTAPI SQLGetTranslatorW(HWND,LPWSTR,WORD,WORD*,LPWSTR,WORD,WORD*,DWORD*);
+BOOL INSTAPI SQLInstallDriver(LPCSTR,LPCSTR,LPSTR,WORD,WORD*);
+BOOL INSTAPI SQLInstallDriverManager(LPSTR,WORD,WORD*);
+BOOL INSTAPI SQLInstallDriverManagerW(LPWSTR,WORD,WORD*);
+BOOL INSTAPI SQLInstallDriverW(LPCWSTR,LPCWSTR,LPWSTR,WORD,WORD*);
+BOOL INSTAPI SQLInstallODBC(HWND,LPCSTR,LPCSTR,LPCSTR);
+BOOL INSTAPI SQLInstallODBCW(HWND,LPCWSTR,LPCWSTR,LPCWSTR);
+BOOL INSTAPI SQLManageDataSources(HWND);
+BOOL INSTAPI SQLRemoveDefaultDataSource(void);
+BOOL INSTAPI SQLRemoveDSNFromIni(LPCSTR);
+BOOL INSTAPI SQLRemoveDSNFromIniW(LPCWSTR);
+BOOL INSTAPI SQLValidDSN(LPCSTR);
+BOOL INSTAPI SQLValidDSNW(LPCWSTR);
+BOOL INSTAPI SQLWriteDSNToIni(LPCSTR,LPCSTR);
+BOOL INSTAPI SQLWriteDSNToIniW(LPCWSTR,LPCWSTR);
+BOOL INSTAPI SQLWritePrivateProfileString(LPCSTR,LPCSTR,LPCSTR,LPCSTR);
+BOOL INSTAPI SQLWritePrivateProfileStringW(LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR);
+#if(ODBCVER >= 0x0250)
+BOOL INSTAPI ConfigDriver(HWND,WORD,LPCSTR,LPCSTR,LPSTR,WORD,WORD*);
+BOOL INSTAPI ConfigDriverW(HWND,WORD,LPCWSTR,LPCWSTR,LPWSTR,WORD,WORD*);
+BOOL INSTAPI SQLConfigDriver(HWND,WORD,LPCSTR,LPCSTR,LPSTR,WORD,WORD*);
+BOOL INSTAPI SQLConfigDriverW(HWND,WORD,LPCWSTR,LPCWSTR,LPWSTR,WORD,WORD*);
+BOOL INSTAPI SQLInstallTranslator(LPCSTR,LPCSTR,LPCSTR,LPSTR,WORD,WORD*,WORD,LPDWORD);
+BOOL INSTAPI SQLInstallTranslatorW(LPCWSTR,LPCWSTR,LPCWSTR,LPWSTR,WORD,WORD*,WORD,LPDWORD);
+BOOL INSTAPI SQLRemoveDriver(LPCSTR,BOOL,LPDWORD);
+BOOL INSTAPI SQLRemoveDriverManager(LPDWORD);
+BOOL INSTAPI SQLRemoveDriverW(LPCWSTR,BOOL,LPDWORD);
+BOOL INSTAPI SQLRemoveTranslator(LPCSTR,LPDWORD);
+BOOL INSTAPI SQLRemoveTranslatorW(LPCWSTR,LPDWORD);
+#endif /* ODBCVER >= 0x0250 */
+#if (ODBCVER >= 0x0300)
+BOOL INSTAPI SQLGetConfigMode(UWORD*);
+BOOL INSTAPI SQLInstallDriverEx(LPCSTR,LPCSTR,LPSTR,WORD,WORD*,WORD,LPDWORD);
+BOOL INSTAPI SQLInstallDriverExW(LPCWSTR,LPCWSTR,LPWSTR,WORD,WORD*,WORD,LPDWORD);
+SQLRETURN INSTAPI SQLInstallerError(WORD,DWORD*,LPSTR,WORD,WORD*);
+SQLRETURN INSTAPI SQLInstallerErrorW(WORD,DWORD*,LPWSTR,WORD,WORD*);
+BOOL INSTAPI SQLInstallTranslatorEx(LPCSTR,LPCSTR,LPSTR,WORD,WORD*,WORD,LPDWORD);
+BOOL INSTAPI SQLInstallTranslatorExW(LPCWSTR,LPCWSTR,LPWSTR,WORD,WORD*,WORD,LPDWORD);
+SQLRETURN INSTAPI SQLPostInstallerError(DWORD,LPCSTR);
+SQLRETURN INSTAPI SQLPostInstallerErrorW(DWORD,LPCWSTR);
+BOOL INSTAPI SQLReadFileDSN(LPCSTR,LPCSTR,LPCSTR,LPSTR,WORD,WORD*);
+BOOL INSTAPI SQLReadFileDSNW(LPCWSTR,LPCWSTR,LPCWSTR,LPWSTR,WORD,WORD*);
+BOOL INSTAPI SQLSetConfigMode(UWORD);
+BOOL INSTAPI SQLWriteFileDSN(LPCSTR,LPCSTR,LPCSTR,LPCSTR);
+BOOL INSTAPI SQLWriteFileDSNW(LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR);
+#endif /* ODBCVER >= 0x0300 */
+
+#if defined (UNICODE) && !defined (SQL_NOUNICODEMAP)
+#define SQLConfigDataSource SQLConfigDataSourceW
+#define SQLConfigDriver SQLConfigDriverW
+#define SQLCreateDataSource SQLCreateDataSourceW
+#define SQLGetAvailableDrivers SQLGetAvailableDriversW
+#define SQLGetInstalledDrivers SQLGetInstalledDriversW
+#define SQLGetPrivateProfileString SQLGetPrivateProfileStringW
+#define SQLGetTranslator SQLGetTranslatorW
+#define SQLInstallDriver SQLInstallDriverW
+#define SQLInstallDriverEx SQLInstallDriverExW
+#define SQLInstallDriverManager SQLInstallDriverManagerW
+#define SQLInstallerError SQLInstallerErrorW
+#define SQLInstallODBC SQLInstallODBCW
+#define SQLInstallTranslator SQLInstallTranslatorW
+#define SQLInstallTranslatorEx SQLInstallTranslatorExW
+#define SQLPostInstallerError SQLPostInstallerErrorW
+#define SQLReadFileDSN SQLReadFileDSNW
+#define SQLRemoveDriver SQLRemoveDriverW
+#define SQLRemoveDSNFromIni SQLRemoveDSNFromIniW
+#define SQLRemoveTranslator SQLRemoveTranslatorW
+#define SQLValidDSN SQLValidDSNW
+#define SQLWriteDSNToIni SQLWriteDSNToIniW
+#define SQLWriteFileDSN SQLWriteFileDSNW
+#define SQLWritePrivateProfileString SQLWritePrivateProfileStringW
+#endif /* UNICODE && !SQL_NOUNICODEMAP */
+#endif /* RC_INVOKED */
+#ifdef __cplusplus
+}
+#endif
+#endif /* _ODBCINST_H */
diff --git a/tcc/include/winapi/ole.h b/tcc/include/winapi/ole.h
new file mode 100644
index 0000000..d2dd202
--- /dev/null
+++ b/tcc/include/winapi/ole.h
@@ -0,0 +1,308 @@
+#ifndef _OLE_H
+#define _OLE_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#ifdef STRICT
+#define OLE_LPCSTR LPCSTR
+#define OLE_CONST const
+#else
+#define OLE_LPCSTR LPSTR
+#define OLE_CONST
+#endif
+#define LRESULT LONG
+#define HGLOBAL HANDLE
+#define OT_LINK 1L
+#define OT_EMBEDDED 2L
+#define OT_STATIC 3L
+#define OLEVERB_PRIMARY 0
+#define OF_SET 1
+#define OF_GET 2
+#define OF_HANDLER 4
+
+typedef struct _OLETARGETDEVICE {
+ USHORT otdDeviceNameOffset;
+ USHORT otdDriverNameOffset;
+ USHORT otdPortNameOffset;
+ USHORT otdExtDevmodeOffset;
+ USHORT otdExtDevmodeSize;
+ USHORT otdEnvironmentOffset;
+ USHORT otdEnvironmentSize;
+ BYTE otdData[1];
+} OLETARGETDEVICE;
+typedef OLETARGETDEVICE *LPOLETARGETDEVICE;
+typedef enum {
+OLE_OK,
+OLE_WAIT_FOR_RELEASE,
+OLE_BUSY,
+OLE_ERROR_PROTECT_ONLY,
+OLE_ERROR_MEMORY,
+OLE_ERROR_STREAM,
+OLE_ERROR_STATIC,
+OLE_ERROR_BLANK,
+OLE_ERROR_DRAW,
+OLE_ERROR_METAFILE,
+OLE_ERROR_ABORT,
+OLE_ERROR_CLIPBOARD,
+OLE_ERROR_FORMAT,
+OLE_ERROR_OBJECT,
+OLE_ERROR_OPTION,
+OLE_ERROR_PROTOCOL,
+OLE_ERROR_ADDRESS,
+OLE_ERROR_NOT_EQUAL,
+OLE_ERROR_HANDLE,
+OLE_ERROR_GENERIC,
+OLE_ERROR_CLASS,
+OLE_ERROR_SYNTAX,
+OLE_ERROR_DATATYPE,
+OLE_ERROR_PALETTE,
+OLE_ERROR_NOT_LINK,
+OLE_ERROR_NOT_EMPTY,
+OLE_ERROR_SIZE,
+OLE_ERROR_DRIVE,
+OLE_ERROR_NETWORK,
+OLE_ERROR_NAME,
+OLE_ERROR_TEMPLATE,
+OLE_ERROR_NEW,
+OLE_ERROR_EDIT,
+OLE_ERROR_OPEN,
+OLE_ERROR_NOT_OPEN,
+OLE_ERROR_LAUNCH,
+OLE_ERROR_COMM,
+OLE_ERROR_TERMINATE,
+OLE_ERROR_COMMAND,
+OLE_ERROR_SHOW,
+OLE_ERROR_DOVERB,
+OLE_ERROR_ADVISE_NATIVE,
+OLE_ERROR_ADVISE_PICT,
+OLE_ERROR_ADVISE_RENAME,
+OLE_ERROR_POKE_NATIVE,
+OLE_ERROR_REQUEST_NATIVE,
+OLE_ERROR_REQUEST_PICT,
+OLE_ERROR_SERVER_BLOCKED,
+OLE_ERROR_REGISTRATION,
+OLE_ERROR_ALREADY_REGISTERED,
+OLE_ERROR_TASK,
+OLE_ERROR_OUTOFDATE,
+OLE_ERROR_CANT_UPDATE_CLIENT,
+OLE_ERROR_UPDATE,
+OLE_ERROR_SETDATA_FORMAT,
+OLE_ERROR_STATIC_FROM_OTHER_OS,
+OLE_ERROR_FILE_VER,
+OLE_WARN_DELETE_DATA = 1000
+} OLESTATUS;
+typedef enum {
+ OLE_CHANGED,
+ OLE_SAVED,
+ OLE_CLOSED,
+ OLE_RENAMED,
+ OLE_QUERY_PAINT,
+ OLE_RELEASE,
+ OLE_QUERY_RETRY
+} OLE_NOTIFICATION;
+typedef enum {
+ OLE_NONE,
+ OLE_DELETE,
+ OLE_LNKPASTE,
+ OLE_EMBPASTE,
+ OLE_SHOW,
+ OLE_RUN,
+ OLE_ACTIVATE,
+ OLE_UPDATE,
+ OLE_CLOSE,
+ OLE_RECONNECT,
+ OLE_SETUPDATEOPTIONS,
+ OLE_SERVERUNLAUNCH,
+ OLE_LOADFROMSTREAM,
+ OLE_SETDATA,
+ OLE_REQUESTDATA,
+ OLE_OTHER,
+ OLE_CREATE,
+ OLE_CREATEFROMTEMPLATE,
+ OLE_CREATELINKFROMFILE,
+ OLE_COPYFROMLNK,
+ OLE_CREATEFROMFILE,
+ OLE_CREATEINVISIBLE
+} OLE_RELEASE_METHOD;
+typedef enum {
+ olerender_none,
+ olerender_draw,
+ olerender_format
+ } OLEOPT_RENDER;
+typedef WORD OLECLIPFORMAT;
+typedef enum {
+ oleupdate_always,
+ oleupdate_onsave,
+#ifdef OLE_INTERNAL
+ oleupdate_oncall,
+ oleupdate_onclose
+#else
+ oleupdate_oncall
+#endif
+} OLEOPT_UPDATE;
+typedef HANDLE HOBJECT;
+typedef LONG LHSERVER;
+typedef LONG LHCLIENTDOC;
+typedef LONG LHSERVERDOC;
+typedef struct _OLEOBJECT *LPOLEOBJECT;
+typedef struct _OLESTREAM *LPOLESTREAM;
+typedef struct _OLECLIENT *LPOLECLIENT;
+typedef struct _OLEOBJECTVTBL {
+ void *(CALLBACK* QueryProtocol)(LPOLEOBJECT,OLE_LPCSTR);
+ OLESTATUS (CALLBACK* Release)(LPOLEOBJECT);
+ OLESTATUS (CALLBACK* Show)(LPOLEOBJECT,BOOL);
+ OLESTATUS (CALLBACK* DoVerb)(LPOLEOBJECT,UINT,BOOL,BOOL);
+ OLESTATUS (CALLBACK* GetData)(LPOLEOBJECT,OLECLIPFORMAT,HANDLE*);
+ OLESTATUS (CALLBACK* SetData)(LPOLEOBJECT,OLECLIPFORMAT,HANDLE);
+ OLESTATUS (CALLBACK* SetTargetDevice)(LPOLEOBJECT,HGLOBAL);
+ OLESTATUS (CALLBACK* SetBounds)(LPOLEOBJECT,OLE_CONST RECT*);
+ OLECLIPFORMAT (CALLBACK* EnumFormats)(LPOLEOBJECT,OLECLIPFORMAT);
+ OLESTATUS (CALLBACK* SetColorScheme)(LPOLEOBJECT,OLE_CONST LOGPALETTE*);
+#ifndef SERVERONLY
+ OLESTATUS (CALLBACK* Delete)(LPOLEOBJECT);
+ OLESTATUS (CALLBACK* SetHostNames)(LPOLEOBJECT,OLE_LPCSTR,OLE_LPCSTR);
+ OLESTATUS (CALLBACK* SaveToStream)(LPOLEOBJECT,LPOLESTREAM);
+ OLESTATUS (CALLBACK* Clone)(LPOLEOBJECT,LPOLECLIENT,LHCLIENTDOC,OLE_LPCSTR,LPOLEOBJECT*);
+ OLESTATUS (CALLBACK* CopyFromLink)(LPOLEOBJECT,LPOLECLIENT,LHCLIENTDOC,OLE_LPCSTR,LPOLEOBJECT*);
+ OLESTATUS (CALLBACK* Equal)(LPOLEOBJECT,LPOLEOBJECT);
+ OLESTATUS (CALLBACK* CopyToClipboard)(LPOLEOBJECT);
+ OLESTATUS (CALLBACK* Draw)(LPOLEOBJECT,HDC,OLE_CONST RECT*,OLE_CONST RECT*,HDC);
+ OLESTATUS (CALLBACK* Activate)(LPOLEOBJECT,UINT,BOOL,BOOL,HWND,OLE_CONST RECT*);
+ OLESTATUS (CALLBACK* Execute)(LPOLEOBJECT,HGLOBAL,UINT);
+ OLESTATUS (CALLBACK* Close)(LPOLEOBJECT);
+ OLESTATUS (CALLBACK* Update)(LPOLEOBJECT);
+ OLESTATUS (CALLBACK* Reconnect)(LPOLEOBJECT);
+ OLESTATUS (CALLBACK* ObjectConvert)(LPOLEOBJECT,OLE_LPCSTR,LPOLECLIENT,LHCLIENTDOC,OLE_LPCSTR,LPOLEOBJECT*);
+ OLESTATUS (CALLBACK* GetLinkUpdateOptions)(LPOLEOBJECT,OLEOPT_UPDATE*);
+ OLESTATUS (CALLBACK* SetLinkUpdateOptions)(LPOLEOBJECT,OLEOPT_UPDATE);
+ OLESTATUS (CALLBACK* Rename)(LPOLEOBJECT,OLE_LPCSTR);
+ OLESTATUS (CALLBACK* QueryName)(LPOLEOBJECT,LPSTR,UINT*);
+ OLESTATUS (CALLBACK* QueryType)(LPOLEOBJECT,LONG*);
+ OLESTATUS (CALLBACK* QueryBounds)(LPOLEOBJECT,RECT*);
+ OLESTATUS (CALLBACK* QuerySize)(LPOLEOBJECT,DWORD*);
+ OLESTATUS (CALLBACK* QueryOpen)(LPOLEOBJECT);
+ OLESTATUS (CALLBACK* QueryOutOfDate)(LPOLEOBJECT);
+ OLESTATUS (CALLBACK* QueryReleaseStatus)(LPOLEOBJECT);
+ OLESTATUS (CALLBACK* QueryReleaseError)(LPOLEOBJECT);
+ OLE_RELEASE_METHOD (CALLBACK* QueryReleaseMethod)(LPOLEOBJECT);
+ OLESTATUS (CALLBACK* RequestData)(LPOLEOBJECT,OLECLIPFORMAT);
+ OLESTATUS (CALLBACK* ObjectLong)(LPOLEOBJECT,UINT,LONG*);
+ OLESTATUS (CALLBACK* ChangeData)(LPOLEOBJECT,HANDLE,LPOLECLIENT,BOOL);
+#endif
+} OLEOBJECTVTBL;
+typedef OLEOBJECTVTBL*LPOLEOBJECTVTBL;
+#ifndef OLE_INTERNAL
+typedef struct _OLEOBJECT { LPOLEOBJECTVTBL lpvtbl; } OLEOBJECT;
+#endif
+typedef struct _OLECLIENTVTBL { int (CALLBACK* CallBack)(LPOLECLIENT,OLE_NOTIFICATION,LPOLEOBJECT); } OLECLIENTVTBL;
+typedef OLECLIENTVTBL *LPOLECLIENTVTBL;
+typedef struct _OLECLIENT { LPOLECLIENTVTBL lpvtbl; } OLECLIENT;
+typedef struct _OLESTREAMVTBL {
+ DWORD (CALLBACK* Get)(LPOLESTREAM,void*,DWORD);
+ DWORD (CALLBACK* Put)(LPOLESTREAM,OLE_CONST void*,DWORD);
+} OLESTREAMVTBL;
+typedef OLESTREAMVTBL *LPOLESTREAMVTBL;
+typedef struct _OLESTREAM { LPOLESTREAMVTBL lpstbl; } OLESTREAM;
+typedef enum {
+ OLE_SERVER_MULTI,
+ OLE_SERVER_SINGLE
+} OLE_SERVER_USE;
+typedef struct _OLESERVER *LPOLESERVER;
+typedef struct _OLESERVERDOC *LPOLESERVERDOC;
+typedef struct _OLESERVERVTBL {
+ OLESTATUS (CALLBACK* Open)(LPOLESERVER,LHSERVERDOC,OLE_LPCSTR,LPOLESERVERDOC*);
+ OLESTATUS (CALLBACK* Create)(LPOLESERVER,LHSERVERDOC,OLE_LPCSTR,OLE_LPCSTR,LPOLESERVERDOC*);
+ OLESTATUS (CALLBACK* CreateFromTemplate)(LPOLESERVER,LHSERVERDOC,OLE_LPCSTR,OLE_LPCSTR,OLE_LPCSTR,LPOLESERVERDOC*);
+ OLESTATUS (CALLBACK* Edit)(LPOLESERVER,LHSERVERDOC,OLE_LPCSTR,OLE_LPCSTR,LPOLESERVERDOC*);
+ OLESTATUS (CALLBACK* Exit)(LPOLESERVER);
+ OLESTATUS (CALLBACK* Release)(LPOLESERVER);
+ OLESTATUS (CALLBACK* Execute)(LPOLESERVER,HGLOBAL);
+} OLESERVERVTBL;
+typedef OLESERVERVTBL *LPOLESERVERVTBL;
+typedef struct _OLESERVER { LPOLESERVERVTBL lpvtbl; } OLESERVER;
+typedef struct _OLESERVERDOCVTBL {
+ OLESTATUS (CALLBACK* Save)(LPOLESERVERDOC);
+ OLESTATUS (CALLBACK* Close)(LPOLESERVERDOC);
+ OLESTATUS (CALLBACK* SetHostNames)(LPOLESERVERDOC,OLE_LPCSTR,OLE_LPCSTR);
+ OLESTATUS (CALLBACK* SetDocDimensions)(LPOLESERVERDOC,OLE_CONST RECT*);
+ OLESTATUS (CALLBACK* GetObject)(LPOLESERVERDOC,OLE_LPCSTR,LPOLEOBJECT*,LPOLECLIENT);
+ OLESTATUS (CALLBACK* Release)(LPOLESERVERDOC);
+ OLESTATUS (CALLBACK* SetColorScheme)(LPOLESERVERDOC,OLE_CONST LOGPALETTE*);
+ OLESTATUS (CALLBACK* Execute)(LPOLESERVERDOC,HGLOBAL);
+} OLESERVERDOCVTBL;
+typedef OLESERVERDOCVTBL *LPOLESERVERDOCVTBL;
+typedef struct _OLESERVERDOC { LPOLESERVERDOCVTBL lpvtbl; } OLESERVERDOC;
+OLESTATUS WINAPI OleDelete(LPOLEOBJECT);
+OLESTATUS WINAPI OleRelease(LPOLEOBJECT);
+OLESTATUS WINAPI OleSaveToStream(LPOLEOBJECT,LPOLESTREAM);
+OLESTATUS WINAPI OleEqual(LPOLEOBJECT,LPOLEOBJECT );
+OLESTATUS WINAPI OleCopyToClipboard(LPOLEOBJECT);
+OLESTATUS WINAPI OleSetHostNames(LPOLEOBJECT,LPCSTR,LPCSTR);
+OLESTATUS WINAPI OleSetTargetDevice(LPOLEOBJECT,HGLOBAL);
+OLESTATUS WINAPI OleSetBounds(LPOLEOBJECT,LPCRECT);
+OLESTATUS WINAPI OleSetColorScheme(LPOLEOBJECT,const LOGPALETTE*);
+OLESTATUS WINAPI OleQueryBounds(LPOLEOBJECT,RECT*);
+OLESTATUS WINAPI OleQuerySize(LPOLEOBJECT,DWORD*);
+OLESTATUS WINAPI OleDraw(LPOLEOBJECT,HDC,LPCRECT,LPCRECT,HDC);
+OLESTATUS WINAPI OleQueryOpen(LPOLEOBJECT);
+OLESTATUS WINAPI OleActivate(LPOLEOBJECT,UINT,BOOL,BOOL,HWND,LPCRECT);
+OLESTATUS WINAPI OleExecute(LPOLEOBJECT,HGLOBAL,UINT);
+OLESTATUS WINAPI OleClose(LPOLEOBJECT);
+OLESTATUS WINAPI OleUpdate(LPOLEOBJECT);
+OLESTATUS WINAPI OleReconnect(LPOLEOBJECT);
+OLESTATUS WINAPI OleGetLinkUpdateOptions(LPOLEOBJECT,OLEOPT_UPDATE*);
+OLESTATUS WINAPI OleSetLinkUpdateOptions(LPOLEOBJECT,OLEOPT_UPDATE);
+WINAPI void *OleQueryProtocol(LPOLEOBJECT,LPCSTR);
+OLESTATUS WINAPI OleQueryReleaseStatus(LPOLEOBJECT);
+OLESTATUS WINAPI OleQueryReleaseError(LPOLEOBJECT);
+OLE_RELEASE_METHOD WINAPI OleQueryReleaseMethod(LPOLEOBJECT);
+OLESTATUS WINAPI OleQueryType(LPOLEOBJECT,LONG*);
+DWORD WINAPI OleQueryClientVersion(void);
+DWORD WINAPI OleQueryServerVersion(void);
+OLECLIPFORMAT WINAPI OleEnumFormats(LPOLEOBJECT,OLECLIPFORMAT);
+OLESTATUS WINAPI OleGetData(LPOLEOBJECT,OLECLIPFORMAT,HANDLE*);
+OLESTATUS WINAPI OleSetData(LPOLEOBJECT,OLECLIPFORMAT,HANDLE);
+OLESTATUS WINAPI OleQueryOutOfDate(LPOLEOBJECT);
+OLESTATUS WINAPI OleRequestData(LPOLEOBJECT,OLECLIPFORMAT);
+OLESTATUS WINAPI OleQueryLinkFromClip(LPCSTR,OLEOPT_RENDER,OLECLIPFORMAT);
+OLESTATUS WINAPI OleQueryCreateFromClip(LPCSTR,OLEOPT_RENDER,OLECLIPFORMAT);
+OLESTATUS WINAPI OleCreateFromClip(LPCSTR,LPOLECLIENT,LHCLIENTDOC,LPCSTR,LPOLEOBJECT*,OLEOPT_RENDER,OLECLIPFORMAT);
+OLESTATUS WINAPI OleCreateLinkFromClip(LPCSTR,LPOLECLIENT,LHCLIENTDOC,LPCSTR,LPOLEOBJECT*,OLEOPT_RENDER,OLECLIPFORMAT);
+OLESTATUS WINAPI OleCreateFromFile(LPCSTR,LPOLECLIENT,LPCSTR,LPCSTR,LHCLIENTDOC,LPCSTR,LPOLEOBJECT*,OLEOPT_RENDER,OLECLIPFORMAT);
+OLESTATUS WINAPI OleCreateLinkFromFile(LPCSTR,LPOLECLIENT,LPCSTR,LPCSTR,LPCSTR,LHCLIENTDOC,LPCSTR,LPOLEOBJECT*,OLEOPT_RENDER,OLECLIPFORMAT);
+OLESTATUS WINAPI OleLoadFromStream(LPOLESTREAM,LPCSTR,LPOLECLIENT,LHCLIENTDOC,LPCSTR,LPOLEOBJECT*);
+OLESTATUS WINAPI OleCreate(LPCSTR,LPOLECLIENT,LPCSTR,LHCLIENTDOC,LPCSTR,LPOLEOBJECT*,OLEOPT_RENDER,OLECLIPFORMAT);
+OLESTATUS WINAPI OleCreateInvisible(LPCSTR,LPOLECLIENT,LPCSTR,LHCLIENTDOC,LPCSTR,LPOLEOBJECT*,OLEOPT_RENDER,OLECLIPFORMAT,BOOL);
+OLESTATUS WINAPI OleCreateFromTemplate(LPCSTR,LPOLECLIENT,LPCSTR,LHCLIENTDOC,LPCSTR,LPOLEOBJECT*,OLEOPT_RENDER,OLECLIPFORMAT);
+OLESTATUS WINAPI OleClone(LPOLEOBJECT,LPOLECLIENT,LHCLIENTDOC,LPCSTR,LPOLEOBJECT*);
+OLESTATUS WINAPI OleCopyFromLink(LPOLEOBJECT,LPCSTR,LPOLECLIENT,LHCLIENTDOC,LPCSTR,LPOLEOBJECT*);
+OLESTATUS WINAPI OleObjectConvert(LPOLEOBJECT,LPCSTR,LPOLECLIENT,LHCLIENTDOC,LPCSTR,LPOLEOBJECT*);
+OLESTATUS WINAPI OleRename(LPOLEOBJECT,LPCSTR);
+OLESTATUS WINAPI OleQueryName(LPOLEOBJECT,LPSTR,UINT*);
+OLESTATUS WINAPI OleRevokeObject(LPOLECLIENT);
+BOOL WINAPI OleIsDcMeta(HDC);
+OLESTATUS WINAPI OleRegisterClientDoc(LPCSTR,LPCSTR,LONG,LHCLIENTDOC*);
+OLESTATUS WINAPI OleRevokeClientDoc(LHCLIENTDOC);
+OLESTATUS WINAPI OleRenameClientDoc(LHCLIENTDOC,LPCSTR);
+OLESTATUS WINAPI OleRevertClientDoc(LHCLIENTDOC);
+OLESTATUS WINAPI OleSavedClientDoc(LHCLIENTDOC);
+OLESTATUS WINAPI OleEnumObjects(LHCLIENTDOC,LPOLEOBJECT*);
+OLESTATUS WINAPI OleRegisterServer(LPCSTR,LPOLESERVER,LHSERVER*,HINSTANCE,OLE_SERVER_USE);
+OLESTATUS WINAPI OleRevokeServer(LHSERVER);
+OLESTATUS WINAPI OleBlockServer(LHSERVER);
+OLESTATUS WINAPI OleUnblockServer(LHSERVER,BOOL*);
+OLESTATUS WINAPI OleLockServer(LPOLEOBJECT,LHSERVER*);
+OLESTATUS WINAPI OleUnlockServer(LHSERVER);
+OLESTATUS WINAPI OleRegisterServerDoc(LHSERVER,LPCSTR,LPOLESERVERDOC,LHSERVERDOC*);
+OLESTATUS WINAPI OleRevokeServerDoc(LHSERVERDOC);
+OLESTATUS WINAPI OleRenameServerDoc(LHSERVERDOC,LPCSTR);
+OLESTATUS WINAPI OleRevertServerDoc(LHSERVERDOC);
+OLESTATUS WINAPI OleSavedServerDoc(LHSERVERDOC);
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/ole2.h b/tcc/include/winapi/ole2.h
new file mode 100644
index 0000000..c80a9a9
--- /dev/null
+++ b/tcc/include/winapi/ole2.h
@@ -0,0 +1,110 @@
+#ifndef _OLE2_H
+#define _OLE2_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#pragma pack(push,8)
+#include <winerror.h>
+#include <objbase.h>
+#include <olectlid.h>
+#include <oleauto.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#define E_DRAW VIEW_E_DRAW
+#define DATA_E_FORMATETC DV_E_FORMATETC
+#define OLEIVERB_PRIMARY (0L)
+#define OLEIVERB_SHOW (-1L)
+#define OLEIVERB_OPEN (-2L)
+#define OLEIVERB_HIDE (-3L)
+#define OLEIVERB_UIACTIVATE (-4L)
+#define OLEIVERB_INPLACEACTIVATE (-5L)
+#define OLEIVERB_DISCARDUNDOSTATE (-6L)
+#define EMBDHLP_INPROC_HANDLER 0x0000L
+#define EMBDHLP_INPROC_SERVER 0x0001L
+#define EMBDHLP_CREATENOW 0x00000000L
+#define EMBDHLP_DELAYCREATE 0x00010000L
+#include <oleidl.h>
+
+typedef struct _OLESTREAMVTBL *LPOLESTREAMVTBL;
+typedef struct _OLESTREAM {
+ LPOLESTREAMVTBL lpstbl;
+} OLESTREAM,*LPOLESTREAM;
+typedef struct _OLESTREAMVTBL {
+ DWORD (CALLBACK* Get)(LPOLESTREAM,void*,DWORD);
+ DWORD (CALLBACK* Put)(LPOLESTREAM,const void*,DWORD);
+} OLESTREAMVTBL;
+
+WINOLEAPI CreateDataAdviseHolder(LPDATAADVISEHOLDER*);
+WINOLEAPI_(DWORD) OleBuildVersion(void);
+WINOLEAPI ReadClassStg(LPSTORAGE,CLSID*);
+WINOLEAPI WriteClassStg(LPSTORAGE,REFCLSID);
+WINOLEAPI ReadClassStm(LPSTREAM,CLSID*);
+WINOLEAPI WriteClassStm(LPSTREAM,REFCLSID);
+WINOLEAPI WriteFmtUserTypeStg(LPSTORAGE,CLIPFORMAT,LPOLESTR);
+WINOLEAPI ReadFmtUserTypeStg(LPSTORAGE,CLIPFORMAT*,LPOLESTR*);
+WINOLEAPI OleInitialize(PVOID);
+WINOLEAPI_(void) OleUninitialize(void);
+WINOLEAPI OleQueryLinkFromData(LPDATAOBJECT);
+WINOLEAPI OleQueryCreateFromData(LPDATAOBJECT);
+WINOLEAPI OleCreate(REFCLSID,REFIID,DWORD,LPFORMATETC,LPOLECLIENTSITE,LPSTORAGE,PVOID*);
+WINOLEAPI OleCreateFromData(LPDATAOBJECT,REFIID,DWORD,LPFORMATETC,LPOLECLIENTSITE,LPSTORAGE,PVOID*);
+WINOLEAPI OleCreateLinkFromData(LPDATAOBJECT,REFIID,DWORD,LPFORMATETC,LPOLECLIENTSITE,LPSTORAGE,PVOID*);
+WINOLEAPI OleCreateStaticFromData(LPDATAOBJECT,REFIID,DWORD,LPFORMATETC,LPOLECLIENTSITE,LPSTORAGE,PVOID*);
+WINOLEAPI OleCreateLink(LPMONIKER,REFIID,DWORD,LPFORMATETC,LPOLECLIENTSITE,LPSTORAGE,PVOID*);
+WINOLEAPI OleCreateLinkToFile(LPCOLESTR,REFIID,DWORD,LPFORMATETC,LPOLECLIENTSITE,LPSTORAGE,PVOID*);
+WINOLEAPI OleCreateFromFile(REFCLSID,LPCOLESTR,REFIID,DWORD,LPFORMATETC,LPOLECLIENTSITE,LPSTORAGE,PVOID*);
+WINOLEAPI OleLoad(LPSTORAGE,REFIID,LPOLECLIENTSITE,PVOID*);
+WINOLEAPI OleSave(LPPERSISTSTORAGE,LPSTORAGE,BOOL);
+WINOLEAPI OleLoadFromStream(LPSTREAM,REFIID,PVOID*);
+WINOLEAPI OleSaveToStream(LPPERSISTSTREAM,LPSTREAM);
+WINOLEAPI OleSetContainedObject(LPUNKNOWN,BOOL);
+WINOLEAPI OleNoteObjectVisible(LPUNKNOWN,BOOL);
+WINOLEAPI RegisterDragDrop(HWND,LPDROPTARGET);
+WINOLEAPI RevokeDragDrop(HWND);
+WINOLEAPI DoDragDrop(LPDATAOBJECT,LPDROPSOURCE,DWORD,PDWORD);
+WINOLEAPI OleSetClipboard(LPDATAOBJECT);
+WINOLEAPI OleGetClipboard(LPDATAOBJECT*);
+WINOLEAPI OleFlushClipboard(void);
+WINOLEAPI OleIsCurrentClipboard(LPDATAOBJECT);
+WINOLEAPI_(HOLEMENU) OleCreateMenuDescriptor(HMENU,LPOLEMENUGROUPWIDTHS);
+WINOLEAPI OleSetMenuDescriptor(HOLEMENU,HWND,HWND,LPOLEINPLACEFRAME,LPOLEINPLACEACTIVEOBJECT);
+WINOLEAPI OleDestroyMenuDescriptor(HOLEMENU);
+WINOLEAPI OleTranslateAccelerator(LPOLEINPLACEFRAME,LPOLEINPLACEFRAMEINFO,LPMSG);
+WINOLEAPI_(HANDLE) OleDuplicateData(HANDLE,CLIPFORMAT,UINT);
+WINOLEAPI OleDraw(LPUNKNOWN,DWORD,HDC,LPCRECT);
+WINOLEAPI OleRun(LPUNKNOWN);
+WINOLEAPI_(BOOL) OleIsRunning(LPOLEOBJECT);
+WINOLEAPI OleLockRunning(LPUNKNOWN,BOOL,BOOL);
+WINOLEAPI_(void) ReleaseStgMedium(LPSTGMEDIUM);
+WINOLEAPI CreateOleAdviseHolder(LPOLEADVISEHOLDER*);
+WINOLEAPI OleCreateDefaultHandler(REFCLSID,LPUNKNOWN,REFIID,PVOID*);
+WINOLEAPI OleCreateEmbeddingHelper(REFCLSID,LPUNKNOWN,DWORD,LPCLASSFACTORY,REFIID,PVOID*);
+WINOLEAPI_(BOOL) IsAccelerator(HACCEL,int,LPMSG,WORD*);
+WINOLEAPI_(HGLOBAL) OleGetIconOfFile(LPOLESTR,BOOL);
+WINOLEAPI_(HGLOBAL) OleGetIconOfClass(REFCLSID,LPOLESTR,BOOL);
+WINOLEAPI_(HGLOBAL) OleMetafilePictFromIconAndLabel(HICON,LPOLESTR,LPOLESTR,UINT);
+WINOLEAPI OleRegGetUserType(REFCLSID,DWORD,LPOLESTR*);
+WINOLEAPI OleRegGetMiscStatus(REFCLSID,DWORD,DWORD*);
+WINOLEAPI OleRegEnumFormatEtc (REFCLSID,DWORD,LPENUMFORMATETC*);
+WINOLEAPI OleRegEnumVerbs (REFCLSID,LPENUMOLEVERB*);
+WINOLEAPI OleConvertOLESTREAMToIStorage(LPOLESTREAM,LPSTORAGE,const DVTARGETDEVICE*);
+WINOLEAPI OleConvertIStorageToOLESTREAM(LPSTORAGE,LPOLESTREAM);
+WINOLEAPI GetHGlobalFromILockBytes(LPLOCKBYTES,HGLOBAL*);
+WINOLEAPI CreateILockBytesOnHGlobal(HGLOBAL,BOOL,LPLOCKBYTES*);
+WINOLEAPI GetHGlobalFromStream(LPSTREAM,HGLOBAL*);
+WINOLEAPI CreateStreamOnHGlobal(HGLOBAL,BOOL,LPSTREAM*);
+WINOLEAPI OleDoAutoConvert(LPSTORAGE,LPCLSID);
+WINOLEAPI OleGetAutoConvert(REFCLSID,LPCLSID);
+WINOLEAPI OleSetAutoConvert(REFCLSID,REFCLSID);
+WINOLEAPI GetConvertStg(LPSTORAGE);
+WINOLEAPI SetConvertStg(LPSTORAGE,BOOL);
+WINOLEAPI OleConvertIStorageToOLESTREAMEx(LPSTORAGE,CLIPFORMAT,LONG,LONG,DWORD,LPSTGMEDIUM,LPOLESTREAM);
+WINOLEAPI OleConvertOLESTREAMToIStorageEx(LPOLESTREAM,LPSTORAGE,CLIPFORMAT*,LONG*,LONG*,DWORD*,LPSTGMEDIUM);
+#ifdef __cplusplus
+}
+#endif
+#pragma pack(pop)
+#endif
diff --git a/tcc/include/winapi/ole2ver.h b/tcc/include/winapi/ole2ver.h
new file mode 100644
index 0000000..667003a
--- /dev/null
+++ b/tcc/include/winapi/ole2ver.h
@@ -0,0 +1,8 @@
+#ifndef _OLE2VER_H
+#define _OLE2VER_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+#define rmm 23
+#define rup 639
+#endif
diff --git a/tcc/include/winapi/oleacc.h b/tcc/include/winapi/oleacc.h
new file mode 100644
index 0000000..c1a2825
--- /dev/null
+++ b/tcc/include/winapi/oleacc.h
@@ -0,0 +1,219 @@
+#ifndef _OLEACC_H
+#define _OLEACC_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define DISPID_ACC_PARENT (-5000)
+#define DISPID_ACC_CHILDCOUNT (-5001)
+#define DISPID_ACC_CHILD (-5002)
+
+#define DISPID_ACC_NAME (-5003)
+#define DISPID_ACC_VALUE (-5004)
+#define DISPID_ACC_DESCRIPTION (-5005)
+#define DISPID_ACC_ROLE (-5006)
+#define DISPID_ACC_STATE (-5007)
+#define DISPID_ACC_HELP (-5008)
+#define DISPID_ACC_HELPTOPIC (-5009)
+#define DISPID_ACC_KEYBOARDSHORTCUT (-5010)
+#define DISPID_ACC_FOCUS (-5011)
+#define DISPID_ACC_SELECTION (-5012)
+#define DISPID_ACC_DEFAULTACTION (-5013)
+
+#define DISPID_ACC_SELECT (-5014)
+#define DISPID_ACC_LOCATION (-5015)
+#define DISPID_ACC_NAVIGATE (-5016)
+#define DISPID_ACC_HITTEST (-5017)
+#define DISPID_ACC_DODEFAULTACTION (-5018)
+
+#define NAVDIR_DOWN 2
+#define NAVDIR_FIRSTCHILD 7
+#define NAVDIR_LASTCHILD 8
+#define NAVDIR_LEFT 3
+#define NAVDIR_NEXT 5
+#define NAVDIR_PREVIOUS 6
+#define NAVDIR_RIGHT 4
+#define NAVDIR_UP 1
+
+#define ROLE_SYSTEM_ALERT 8
+#define ROLE_SYSTEM_ANIMATION 54
+#define ROLE_SYSTEM_APPLICATION 14
+#define ROLE_SYSTEM_BORDER 19
+#define ROLE_SYSTEM_BUTTONDROPDOWN 56
+#define ROLE_SYSTEM_BUTTONDROPDOWNGRID 58
+#define ROLE_SYSTEM_BUTTONMENU 57
+#define ROLE_SYSTEM_CARET 7
+#define ROLE_SYSTEM_CELL 29
+#define ROLE_SYSTEM_CHARACTER 32
+#define ROLE_SYSTEM_CHART 17
+#define ROLE_SYSTEM_CHECKBUTTON 44
+#define ROLE_SYSTEM_CLIENT 10
+#define ROLE_SYSTEM_CLOCK 61
+#define ROLE_SYSTEM_COLUMN 27
+#define ROLE_SYSTEM_COLUMNHEADER 25
+#define ROLE_SYSTEM_COMBOBOX 46
+#define ROLE_SYSTEM_CURSOR 6
+#define ROLE_SYSTEM_DIAGRAM 53
+#define ROLE_SYSTEM_DIAL 49
+#define ROLE_SYSTEM_DIALOG 18
+#define ROLE_SYSTEM_DOCUMENT 15
+#define ROLE_SYSTEM_DROPLIST 47
+#define ROLE_SYSTEM_EQUATION 55
+#define ROLE_SYSTEM_GRAPHIC 40
+#define ROLE_SYSTEM_GRIP 4
+#define ROLE_SYSTEM_GROUPING 20
+#define ROLE_SYSTEM_HELPBALLOON 31
+#define ROLE_SYSTEM_HOTKEYFIELD 50
+#define ROLE_SYSTEM_INDICATOR 39
+#define ROLE_SYSTEM_LINK 30
+#define ROLE_SYSTEM_LIST 33
+#define ROLE_SYSTEM_LISTITEM 34
+#define ROLE_SYSTEM_MENUBAR 2
+#define ROLE_SYSTEM_MENUITEM 12
+#define ROLE_SYSTEM_MENUPOPUP 11
+#define ROLE_SYSTEM_OUTLINE 35
+#define ROLE_SYSTEM_OUTLINEITEM 36
+#define ROLE_SYSTEM_PAGETAB 37
+#define ROLE_SYSTEM_PAGETABLIST 60
+#define ROLE_SYSTEM_PANE 16
+#define ROLE_SYSTEM_PROGRESSBAR 48
+#define ROLE_SYSTEM_PROPERTYPAGE 38
+#define ROLE_SYSTEM_PUSHBUTTON 43
+#define ROLE_SYSTEM_RADIOBUTTON 45
+#define ROLE_SYSTEM_ROW 28
+#define ROLE_SYSTEM_ROWHEADER 26
+#define ROLE_SYSTEM_SCROLLBAR 3
+#define ROLE_SYSTEM_SEPARATOR 21
+#define ROLE_SYSTEM_SLIDER 51
+#define ROLE_SYSTEM_SOUND 5
+#define ROLE_SYSTEM_SPINBUTTON 52
+#define ROLE_SYSTEM_STATICTEXT 41
+#define ROLE_SYSTEM_STATUSBAR 23
+#define ROLE_SYSTEM_TABLE 24
+#define ROLE_SYSTEM_TEXT 42
+#define ROLE_SYSTEM_TITLEBAR 1
+#define ROLE_SYSTEM_TOOLBAR 22
+#define ROLE_SYSTEM_TOOLTIP 13
+#define ROLE_SYSTEM_WHITESPACE 59
+#define ROLE_SYSTEM_WINDOW 9
+
+#define STATE_SYSTEM_UNAVAILABLE 0x00000001
+#define STATE_SYSTEM_SELECTED 0x00000002
+#define STATE_SYSTEM_FOCUSED 0x00000004
+#define STATE_SYSTEM_PRESSED 0x00000008
+#define STATE_SYSTEM_CHECKED 0x00000010
+#define STATE_SYSTEM_MIXED 0x00000020
+#define STATE_SYSTEM_READONLY 0x00000040
+#define STATE_SYSTEM_HOTTRACKED 0x00000080
+#define STATE_SYSTEM_DEFAULT 0x00000100
+#define STATE_SYSTEM_EXPANDED 0x00000200
+#define STATE_SYSTEM_COLLAPSED 0x00000400
+#define STATE_SYSTEM_BUSY 0x00000800
+#define STATE_SYSTEM_FLOATING 0x00001000
+#define STATE_SYSTEM_MARQUEED 0x00002000
+#define STATE_SYSTEM_ANIMATED 0x00004000
+#define STATE_SYSTEM_INVISIBLE 0x00008000
+#define STATE_SYSTEM_OFFSCREEN 0x00010000
+#define STATE_SYSTEM_SIZEABLE 0x00020000
+#define STATE_SYSTEM_MOVEABLE 0x00040000
+#define STATE_SYSTEM_SELFVOICING 0x00080000
+#define STATE_SYSTEM_FOCUSABLE 0x00100000
+#define STATE_SYSTEM_SELECTABLE 0x00200000
+#define STATE_SYSTEM_LINKED 0x00400000
+#define STATE_SYSTEM_TRAVERSED 0x00800000
+#define STATE_SYSTEM_MULTISELECTABLE 0x01000000
+#define STATE_SYSTEM_EXTSELECTABLE 0x02000000
+#define STATE_SYSTEM_ALERT_LOW 0x04000000
+#define STATE_SYSTEM_ALERT_MEDIUM 0x08000000
+#define STATE_SYSTEM_ALERT_HIGH 0x10000000
+#define STATE_SYSTEM_VALID 0x1fffffff
+
+typedef enum tagSELFLAG
+{
+ SELFLAG_NONE = 0,
+ SELFLAG_TAKEFOCUS = 1,
+ SELFLAG_TAKESELECTION = 2,
+ SELFLAG_EXTENDSELECTION = 4,
+ SELFLAG_ADDSELECTION = 8,
+ SELFLAG_REMOVESELECTION = 16
+} SELFLAG;
+
+#define SELFLAG_VALID 0x0000001F
+
+/* DEFINE_GUID(LIBID_Accessibility, 0x1ea4dbf0, 0x3c3b,0x11cf, 0x81, 0x0c, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71); */
+/* DEFINE_GUID(IID_IAccessible, 0x618736e0, 0x3c3d,0x11cf, 0x81, 0x0c, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71); */
+EXTERN_C const IID LIBID_Accessibility;
+EXTERN_C const IID IID_IAccessible;
+
+#define INTERFACE IAccessible
+DECLARE_INTERFACE_(IAccessible, IDispatch)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetTypeInfoCount)(THIS_ UINT*) PURE;
+ STDMETHOD(GetTypeInfo)(THIS_ UINT,LCID,LPTYPEINFO*) PURE;
+ STDMETHOD(GetIDsOfNames)(THIS_ REFIID,LPOLESTR*,UINT,LCID,DISPID*) PURE;
+ STDMETHOD(Invoke)(THIS_ DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*) PURE;
+
+ STDMETHOD(get_accParent)(THIS_ IDispatch**) PURE;
+ STDMETHOD(get_accChildCount)(THIS_ long*) PURE;
+ STDMETHOD(get_accChild)(THIS_ VARIANT, IDispatch **) PURE;
+ STDMETHOD(get_accName)(THIS_ VARIANT, BSTR*) PURE;
+ STDMETHOD(get_accValue)(THIS_ VARIANT, BSTR*) PURE;
+ STDMETHOD(get_accDescription)(THIS_ VARIANT, BSTR*) PURE;
+ STDMETHOD(get_accRole)(THIS_ VARIANT, VARIANT*) PURE;
+ STDMETHOD(get_accState)(THIS_ VARIANT, VARIANT*) PURE;
+ STDMETHOD(get_accHelp)(THIS_ VARIANT, BSTR*) PURE;
+ STDMETHOD(get_accHelpTopic)(THIS_ BSTR*, VARIANT, long*) PURE;
+ STDMETHOD(get_accKeyboardShortcut)(THIS_ VARIANT, BSTR*) PURE;
+ STDMETHOD(get_accFocus)(THIS_ VARIANT*) PURE;
+ STDMETHOD(get_accSelection)(THIS_ VARIANT*) PURE;
+ STDMETHOD(get_accDefaultAction)(THIS_ VARIANT, BSTR*) PURE;
+
+ STDMETHOD(accSelect)(THIS_ long, VARIANT) PURE;
+ STDMETHOD(accLocation)(THIS_ long*, long*, long*, long*, VARIANT) PURE;
+ STDMETHOD(accNavigate)(THIS_ long, VARIANT, VARIANT*) PURE;
+ STDMETHOD(accHitTest)(THIS_ long, long, VARIANT*) PURE;
+ STDMETHOD(accDoDefaultAction)(THIS_ VARIANT) PURE;
+
+ STDMETHOD(put_accName)(THIS_ VARIANT, BSTR) PURE;
+ STDMETHOD(put_accValue)(THIS_ VARIANT, BSTR) PURE;
+};
+#undef INTERFACE
+typedef IAccessible* LPACCESSIBLE;
+
+STDAPI AccessibleChildren(IAccessible*,LONG,LONG,VARIANT*,LONG*);
+STDAPI AccessibleObjectFromEvent(HWND,DWORD,DWORD,IAccessible*,VARIANT*);
+STDAPI AccessibleObjectFromPoint(POINT,IAccessible**,VARIANT*);
+STDAPI AccessibleObjectFromWindow(HWND,DWORD,REFIID,void**);
+STDAPI CreateStdAccessibleObject(HWND,LONG,REFIID,void**);
+STDAPI CreateStdAccessibleProxyA(HWND,LPCSTR,LONG,REFIID,void**);
+STDAPI CreateStdAccessibleProxyW(HWND,LPCWSTR,LONG,REFIID,void**);
+void WINAPI GetOleaccVersionInfo(DWORD*,DWORD*);
+UINT WINAPI GetRoleTextA(DWORD,LPSTR,UINT);
+UINT WINAPI GetRoleTextW(DWORD,LPWSTR,UINT);
+UINT WINAPI GetStateTextA(DWORD,LPSTR,UINT);
+UINT WINAPI GetStateTextW(DWORD,LPWSTR,UINT);
+LRESULT WINAPI LresultFromObject(REFIID,WPARAM,LPUNKNOWN);
+STDAPI ObjectFromLresult(LRESULT,REFIID,WPARAM,void**);
+STDAPI WindowFromAccessibleObject(IAccessible*,HWND*);
+
+#ifdef UNICODE
+#define CreateStdAccessibleProxy CreateStdAccessibleProxyW
+#define GetRoleText GetRoleTextW
+#define GetStateText GetStateTextW
+#else
+#define CreateStdAccessibleProxy CreateStdAccessibleProxyA
+#define GetRoleText GetRoleTextA
+#define GetStateText GetStateTextA
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* _OLEACC_H */
diff --git a/tcc/include/winapi/oleauto.h b/tcc/include/winapi/oleauto.h
new file mode 100644
index 0000000..f409042
--- /dev/null
+++ b/tcc/include/winapi/oleauto.h
@@ -0,0 +1,656 @@
+#ifndef _OLEAUTO_H
+#define _OLEAUTO_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#pragma pack(push,8)
+#define WINOLEAUTAPI STDAPI
+#define WINOLEAUTAPI_(type) STDAPI_(type)
+#define STDOLE_MAJORVERNUM 1
+#define STDOLE_MINORVERNUM 0
+#define STDOLE_LCID 0
+
+#define VARIANT_NOVALUEPROP 0x01
+#define VARIANT_ALPHABOOL 0x02
+#define VARIANT_NOUSEOVERRIDE 0x04
+#define VARIANT_LOCALBOOL 0x08
+
+#define VAR_TIMEVALUEONLY 0x0001
+#define VAR_DATEVALUEONLY 0x0002
+#define VAR_VALIDDATE 0x0004
+#define VAR_CALENDAR_HIJRI 0x0008
+#define VAR_LOCALBOOL 0x0010
+#define VAR_FORMAT_NOSUBSTITUTE 0x0020
+#define VAR_FOURDIGITYEARS 0x0040
+#define VAR_CALENDAR_THAI 0x0080
+#define VAR_CALENDAR_GREGORIAN 0x0100
+
+#define MEMBERID_NIL DISPID_UNKNOWN
+#define ID_DEFAULTINST (-2)
+#define DISPATCH_METHOD 1
+#define DISPATCH_PROPERTYGET 2
+#define DISPATCH_PROPERTYPUT 4
+#define DISPATCH_PROPERTYPUTREF 8
+#define LHashValOfName(l,n) LHashValOfNameSys(SYS_WIN32,l,n)
+#define WHashValOfLHashVal(h) ((unsigned short)(0x0000ffff&(h)))
+#define IsHashValCompatible(h1,h2) ((BOOL)((0x00ff0000&(h1))==(0x00ff0000&(h2))))
+#define ACTIVEOBJECT_STRONG 0
+#define ACTIVEOBJECT_WEAK 1
+#ifdef NONAMELESSUNION
+#define V_UNION(X,Y) ((X)->__VARIANT_NAME_1.__VARIANT_NAME_2.__VARIANT_NAME_3.Y)
+#define V_VT(X) ((X)->__VARIANT_NAME_1.__VARIANT_NAME_2.vt)
+#else
+#define V_UNION(X,Y) ((X)->Y)
+#define V_VT(X) ((X)->vt)
+#endif
+#define V_BOOL(X) V_UNION(X,boolVal)
+#define V_ISBYREF(X) (V_VT(X)&VT_BYREF)
+#define V_ISARRAY(X) (V_VT(X)&VT_ARRAY)
+#define V_ISVECTOR(X) (V_VT(X)&VT_VECTOR)
+#define V_NONE(X) V_I2(X)
+#define V_UI1(X) V_UNION(X,bVal)
+#define V_UI1REF(X) V_UNION(X,pbVal)
+#define V_I2(X) V_UNION(X,iVal)
+#define V_UI2(X) V_UNION(X,uiVal)
+#define V_I2REF(X) V_UNION(X,piVal)
+#define V_I4(X) V_UNION(X,lVal)
+#define V_UI4(X) V_UNION(X,ulVal)
+#define V_I4REF(X) V_UNION(X,plVal)
+#define V_UI4REF(X) V_UNION(X,pulVal)
+#define V_I8(X) V_UNION(X,llVal)
+#define V_UI8(X) V_UNION(X,ullVal)
+#define V_I8REF(X) V_UNION(X,pllVal)
+#define V_UI8REF(X) V_UNION(X,pullVal)
+#define V_R4(X) V_UNION(X,fltVal)
+#define V_R4REF(X) V_UNION(X,pfltVal)
+#define V_R8(X) V_UNION(X,dblVal)
+#define V_R8REF(X) V_UNION(X,pdblVal)
+#define V_CY(X) V_UNION(X,cyVal)
+#define V_CYREF(X) V_UNION(X,pcyVal)
+#define V_DATE(X) V_UNION(X,date)
+#define V_DATEREF(X) V_UNION(X,pdate)
+#define V_BSTR(X) V_UNION(X,bstrVal)
+#define V_BSTRREF(X) V_UNION(X,pbstrVal)
+#define V_DISPATCH(X) V_UNION(X,pdispVal)
+#define V_DISPATCHREF(X) V_UNION(X,ppdispVal)
+#define V_ERROR(X) V_UNION(X,scode)
+#define V_ERRORREF(X) V_UNION(X,pscode)
+#define V_BOOLREF(X) V_UNION(X,pboolVal)
+#define V_UNKNOWN(X) V_UNION(X,punkVal)
+#define V_UNKNOWNREF(X) V_UNION(X,ppunkVal)
+#define V_VARIANTREF(X) V_UNION(X,pvarVal)
+#define V_LPSTR(X) V_UNION(X,pszVal)
+#define V_LPSTRREF(X) V_UNION(X,ppszVal)
+#define V_LPWSTR(X) V_UNION(X,pwszVal)
+#define V_LPWSTRREF(X) V_UNION(X,ppwszVal)
+#define V_FILETIME(X) V_UNION(X,filetime)
+#define V_FILETIMEREF(X) V_UNION(X,pfiletime)
+#define V_BLOB(X) V_UNION(X,blob)
+#define V_UUID(X) V_UNION(X,puuid)
+#define V_CLSID(X) V_UNION(X,puuid)
+#define V_ARRAY(X) V_UNION(X,parray)
+#define V_ARRAYREF(X) V_UNION(X,pparray)
+#define V_BYREF(X) V_UNION(X,byref)
+#if defined(NONAMELESSUNION)
+#define V_DECIMAL(X) ((X)->__VARIANT_NAME_1.decVal)
+#else
+#define V_DECIMAL(X) ((X)->decVal)
+#endif
+#define V_DECIMALREF(X) V_UNION(X,pdecVal)
+#define V_I1(X) V_UNION(X,cVal)
+
+#ifdef _WIN64
+#define V_INT_PTR(X) V_I8(X)
+#define V_UINT_PTR(X) V_UI8(X)
+#define V_INT_PTRREF(X) V_I8REF(X)
+#define V_UINT_PTRREF(X) V_UI8REF(X)
+#else
+#define V_INT_PTR(X) V_I4(X)
+#define V_UINT_PTR(X) V_UI4(X)
+#define V_INT_PTRREF(X) V_I4REF(X)
+#define V_UINT_PTRREF(X) V_UI4REF(X)
+#endif
+
+#define VARCMP_LT 0
+#define VARCMP_EQ 1
+#define VARCMP_GT 2
+#define VARCMP_NULL 3
+
+#define LOCALE_USE_NLS 0x10000000
+
+#define VARIANT_NOUSEROVERRIDE 0x04
+#define VARIANT_CALENDAR_HIJRI 0x08
+#define VARIANT_CALENDAR_THAI 0x20
+#define VARIANT_CALENDAR_GREGORIAN 0x40
+#define VARIANT_USE_NLS 0x80
+
+#define NUMPRS_LEADING_WHITE 0x00001
+#define NUMPRS_TRAILING_WHITE 0x00002
+#define NUMPRS_LEADING_PLUS 0x00004
+#define NUMPRS_TRAILING_PLUS 0x00008
+#define NUMPRS_LEADING_MINUS 0x00010
+#define NUMPRS_TRAILING_MINUS 0x00020
+#define NUMPRS_HEX_OCT 0x00040
+#define NUMPRS_PARENS 0x00080
+#define NUMPRS_DECIMAL 0x00100
+#define NUMPRS_THOUSANDS 0x00200
+#define NUMPRS_CURRENCY 0x00400
+#define NUMPRS_EXPONENT 0x00800
+#define NUMPRS_USE_ALL 0x01000
+#define NUMPRS_STD 0x01FFF
+#define NUMPRS_NEG 0x10000
+#define NUMPRS_INEXACT 0x20000
+
+#define VTBIT_I1 (1<<VT_I1)
+#define VTBIT_UI1 (1<<VT_UI1)
+#define VTBIT_I2 (1<<VT_I2)
+#define VTBIT_UI2 (1<<VT_UI2)
+#define VTBIT_I4 (1<<VT_I4)
+#define VTBIT_UI4 (1<<VT_UI4)
+#define VTBIT_I8 (1<<VT_I8)
+#define VTBIT_UI8 (1<<VT_UI8)
+#define VTBIT_R4 (1<<VT_R4)
+#define VTBIT_R8 (1<<VT_R8)
+#define VTBIT_CY (1<<VT_CY)
+#define VTBIT_DECIMAL (1<<VT_DECIMAL)
+
+#include <oaidl.h>
+
+typedef enum tagREGKIND {
+ REGKIND_DEFAULT,
+ REGKIND_REGISTER,
+ REGKIND_NONE
+} REGKIND;
+typedef struct tagPARAMDATA {
+ OLECHAR *szName;
+ VARTYPE vt;
+} PARAMDATA,*LPPARAMDATA;
+typedef struct tagMETHODDATA {
+ OLECHAR *szName;
+ PARAMDATA *ppdata;
+ DISPID dispid;
+ UINT iMeth;
+ CALLCONV cc;
+ UINT cArgs;
+ WORD wFlags;
+ VARTYPE vtReturn;
+} METHODDATA,*LPMETHODDATA;
+typedef struct tagINTERFACEDATA {
+ METHODDATA *pmethdata;
+ UINT cMembers;
+} INTERFACEDATA,*LPINTERFACEDATA;
+
+typedef struct {
+ SYSTEMTIME st;
+ USHORT wDayOfYear;
+} UDATE;
+
+typedef struct {
+ int cDig;
+ unsigned long dwInFlags;
+ unsigned long dwOutFlags;
+ int cchUsed;
+ int nBaseShift;
+ int nPwr10;
+} NUMPARSE;
+
+WINOLEAUTAPI_(BSTR) SysAllocString(const OLECHAR*);
+WINOLEAUTAPI_(int) SysReAllocString(BSTR*,const OLECHAR*);
+WINOLEAUTAPI_(BSTR) SysAllocStringLen(const OLECHAR*,unsigned int);
+WINOLEAUTAPI_(int) SysReAllocStringLen(BSTR*,const OLECHAR*,unsigned int);
+WINOLEAUTAPI_(void) SysFreeString(BSTR);
+WINOLEAUTAPI_(unsigned int) SysStringLen(BSTR);
+WINOLEAUTAPI_(unsigned int) SysStringByteLen(BSTR);
+WINOLEAUTAPI_(BSTR) SysAllocStringByteLen(const char*,unsigned int);
+WINOLEAUTAPI_(int) DosDateTimeToVariantTime(unsigned short,unsigned short,double*);
+WINOLEAUTAPI_(int) VariantTimeToDosDateTime(double,unsigned short*,unsigned short*);
+WINOLEAUTAPI_(int) VariantTimeToSystemTime(double,LPSYSTEMTIME);
+WINOLEAUTAPI_(int) SystemTimeToVariantTime(LPSYSTEMTIME, double*);
+WINOLEAUTAPI VarDateFromUdate(UDATE*,ULONG,DATE*);
+WINOLEAUTAPI VarDateFromUdateEx(UDATE*,LCID,ULONG,DATE*);
+WINOLEAUTAPI VarUdateFromDate(DATE,ULONG,UDATE*);
+WINOLEAUTAPI SafeArrayAllocDescriptor(unsigned int,SAFEARRAY**);
+WINOLEAUTAPI SafeArrayAllocData(SAFEARRAY*);
+WINOLEAUTAPI_(SAFEARRAY*) SafeArrayCreate(VARTYPE,unsigned int,SAFEARRAYBOUND*);
+WINOLEAUTAPI SafeArrayDestroyDescriptor(SAFEARRAY*);
+WINOLEAUTAPI SafeArrayDestroyData(SAFEARRAY*);
+WINOLEAUTAPI SafeArrayDestroy(SAFEARRAY*);
+WINOLEAUTAPI SafeArrayRedim(SAFEARRAY*,SAFEARRAYBOUND*);
+WINOLEAUTAPI_(unsigned int) SafeArrayGetDim(SAFEARRAY*);
+WINOLEAUTAPI_(unsigned int) SafeArrayGetElemsize(SAFEARRAY*);
+WINOLEAUTAPI SafeArrayGetUBound(SAFEARRAY*,unsigned int,long*);
+WINOLEAUTAPI SafeArrayGetLBound(SAFEARRAY*,unsigned int,long*);
+WINOLEAUTAPI SafeArrayLock(SAFEARRAY*);
+WINOLEAUTAPI SafeArrayUnlock(SAFEARRAY*);
+WINOLEAUTAPI SafeArrayAccessData(SAFEARRAY*,void**);
+WINOLEAUTAPI SafeArrayUnaccessData(SAFEARRAY*);
+WINOLEAUTAPI SafeArrayGetElement(SAFEARRAY*,long*,void*);
+WINOLEAUTAPI SafeArrayPutElement(SAFEARRAY*,long*,void*);
+WINOLEAUTAPI SafeArrayCopy(SAFEARRAY*,SAFEARRAY**);
+WINOLEAUTAPI SafeArrayPtrOfIndex(SAFEARRAY*,long*,void**);
+WINOLEAUTAPI_(SAFEARRAY*) SafeArrayCreateVector(VARTYPE,LONG,ULONG);
+WINOLEAUTAPI_(SAFEARRAY*) SafeArrayCreateVectorEx(VARTYPE,LONG,ULONG,LPVOID);
+WINOLEAUTAPI SafeArrayAllocDescriptorEx(VARTYPE,UINT,SAFEARRAY**);
+WINOLEAUTAPI SafeArrayGetVartype(SAFEARRAY*,VARTYPE*);
+WINOLEAUTAPI SafeArraySetRecordInfo(SAFEARRAY*,IRecordInfo*);
+WINOLEAUTAPI SafeArrayGetRecordInfo(SAFEARRAY*,IRecordInfo**);
+WINOLEAUTAPI SafeArraySetIID(SAFEARRAY*,REFGUID);
+WINOLEAUTAPI SafeArrayGetIID(SAFEARRAY*,GUID*);
+WINOLEAUTAPI_(void) VariantInit(VARIANTARG*);
+WINOLEAUTAPI VariantClear(VARIANTARG*);
+WINOLEAUTAPI VariantCopy(VARIANTARG*,VARIANTARG*);
+WINOLEAUTAPI VariantCopyInd(VARIANT*,VARIANTARG*);
+WINOLEAUTAPI VariantChangeType(VARIANTARG*,VARIANTARG*,unsigned short,VARTYPE);
+WINOLEAUTAPI VariantChangeTypeEx(VARIANTARG*,VARIANTARG*,LCID,unsigned short,VARTYPE);
+WINOLEAUTAPI VarUI1FromI2(short,unsigned char*);
+WINOLEAUTAPI VarUI1FromI4(long,unsigned char*);
+WINOLEAUTAPI VarUI1FromR4(float,unsigned char*);
+WINOLEAUTAPI VarUI1FromR8(double,unsigned char*);
+WINOLEAUTAPI VarUI1FromCy(CY,unsigned char*);
+WINOLEAUTAPI VarUI1FromDate(DATE,unsigned char*);
+WINOLEAUTAPI VarUI1FromStr(OLECHAR*,LCID,unsigned long,unsigned char*);
+WINOLEAUTAPI VarUI1FromDisp(LPDISPATCH,LCID,unsigned char*);
+WINOLEAUTAPI VarUI1FromBool(VARIANT_BOOL,unsigned char*);
+WINOLEAUTAPI VarI2FromUI1(unsigned char,short*);
+WINOLEAUTAPI VarI2FromI4(long,short*);
+WINOLEAUTAPI VarI2FromR4(float,short*);
+WINOLEAUTAPI VarI2FromR8(double,short*);
+WINOLEAUTAPI VarI2FromCy(CY cyIn,short*);
+WINOLEAUTAPI VarI2FromDate(DATE,short*);
+WINOLEAUTAPI VarI2FromStr(OLECHAR*,LCID,unsigned long,short*);
+WINOLEAUTAPI VarI2FromDisp(LPDISPATCH,LCID,short*);
+WINOLEAUTAPI VarI2FromBool(VARIANT_BOOL,short*);
+WINOLEAUTAPI VarI4FromUI1(unsigned char,long*);
+WINOLEAUTAPI VarI4FromI2(short,long*);
+WINOLEAUTAPI VarI4FromR4(float,long*);
+WINOLEAUTAPI VarI4FromR8(double,long*);
+WINOLEAUTAPI VarI4FromCy(CY,long*);
+WINOLEAUTAPI VarI4FromDate(DATE,long*);
+WINOLEAUTAPI VarI4FromStr(OLECHAR*,LCID,unsigned long,long*);
+WINOLEAUTAPI VarI4FromDisp(LPDISPATCH,LCID,long*);
+WINOLEAUTAPI VarI4FromBool(VARIANT_BOOL,long*);
+WINOLEAUTAPI VarR4FromUI1(unsigned char,float*);
+WINOLEAUTAPI VarR4FromI2(short,float*);
+WINOLEAUTAPI VarR4FromI4(long,float*);
+WINOLEAUTAPI VarR4FromR8(double,float*);
+WINOLEAUTAPI VarR4FromCy(CY,float*);
+WINOLEAUTAPI VarR4FromDate(DATE,float*);
+WINOLEAUTAPI VarR4FromStr(OLECHAR*,LCID,unsigned long,float*);
+WINOLEAUTAPI VarR4FromDisp(LPDISPATCH,LCID,float*);
+WINOLEAUTAPI VarR4FromBool(VARIANT_BOOL,float*);
+WINOLEAUTAPI VarR8FromUI1(unsigned char,double*);
+WINOLEAUTAPI VarR8FromI2(short,double*);
+WINOLEAUTAPI VarR8FromI4(long,double*);
+WINOLEAUTAPI VarR8FromR4(float,double*);
+WINOLEAUTAPI VarR8FromCy(CY,double*);
+WINOLEAUTAPI VarR8FromDate(DATE,double*);
+WINOLEAUTAPI VarR8FromStr(OLECHAR*,LCID,unsigned long,double*);
+WINOLEAUTAPI VarR8FromDisp(LPDISPATCH,LCID,double*);
+WINOLEAUTAPI VarR8FromBool(VARIANT_BOOL,double*);
+WINOLEAUTAPI VarR8FromDec(DECIMAL*,double*);
+WINOLEAUTAPI VarDateFromUI1(unsigned char,DATE*);
+WINOLEAUTAPI VarDateFromI2(short,DATE*);
+WINOLEAUTAPI VarDateFromI4(long,DATE*);
+WINOLEAUTAPI VarDateFromR4(float,DATE*);
+WINOLEAUTAPI VarDateFromR8(double,DATE*);
+WINOLEAUTAPI VarDateFromCy(CY,DATE*);
+WINOLEAUTAPI VarDateFromStr(OLECHAR*,LCID,unsigned long,DATE*);
+WINOLEAUTAPI VarDateFromDisp(LPDISPATCH,LCID,DATE*);
+WINOLEAUTAPI VarDateFromBool(VARIANT_BOOL,DATE*);
+WINOLEAUTAPI VarCyFromUI1(unsigned char,CY*);
+WINOLEAUTAPI VarCyFromI2(short,CY*);
+WINOLEAUTAPI VarCyFromI4(long,CY*);
+WINOLEAUTAPI VarCyFromR4(float,CY*);
+WINOLEAUTAPI VarCyFromR8(double,CY*);
+WINOLEAUTAPI VarCyFromDate(DATE,CY*);
+WINOLEAUTAPI VarCyFromStr(OLECHAR*,LCID,unsigned long,CY*);
+WINOLEAUTAPI VarCyFromDisp(LPDISPATCH,LCID,CY*);
+WINOLEAUTAPI VarCyFromBool(VARIANT_BOOL,CY*);
+WINOLEAUTAPI VarBstrFromUI1(unsigned char,LCID,unsigned long,BSTR*);
+WINOLEAUTAPI VarBstrFromI2(short,LCID,unsigned long,BSTR*);
+WINOLEAUTAPI VarBstrFromI4(long,LCID,unsigned long,BSTR*);
+WINOLEAUTAPI VarBstrFromR4(float,LCID,unsigned long,BSTR*);
+WINOLEAUTAPI VarBstrFromR8(double,LCID,unsigned long,BSTR*);
+WINOLEAUTAPI VarBstrFromCy(CY,LCID,unsigned long,BSTR*);
+WINOLEAUTAPI VarBstrFromDate(DATE,LCID,unsigned long,BSTR*);
+WINOLEAUTAPI VarBstrFromDisp(LPDISPATCH,LCID,unsigned long,BSTR*);
+WINOLEAUTAPI VarBstrFromBool(VARIANT_BOOL,LCID,unsigned long,BSTR*);
+WINOLEAUTAPI VarBoolFromUI1(unsigned char,VARIANT_BOOL*);
+WINOLEAUTAPI VarBoolFromI2(short,VARIANT_BOOL*);
+WINOLEAUTAPI VarBoolFromI4(long,VARIANT_BOOL*);
+WINOLEAUTAPI VarBoolFromR4(float,VARIANT_BOOL*);
+WINOLEAUTAPI VarBoolFromR8(double,VARIANT_BOOL*);
+WINOLEAUTAPI VarBoolFromDate(DATE,VARIANT_BOOL*);
+WINOLEAUTAPI VarBoolFromCy(CY,VARIANT_BOOL*);
+WINOLEAUTAPI VarBoolFromStr(OLECHAR*,LCID,unsigned long,VARIANT_BOOL*);
+WINOLEAUTAPI VarBoolFromDisp(LPDISPATCH,LCID,VARIANT_BOOL*);
+WINOLEAUTAPI VarDecFromR8(double,DECIMAL*);
+WINOLEAUTAPI_(ULONG) LHashValOfNameSysA(SYSKIND,LCID,const char*);
+WINOLEAUTAPI_(ULONG) LHashValOfNameSys(SYSKIND,LCID,const OLECHAR*);
+WINOLEAUTAPI LoadTypeLib(const OLECHAR*,LPTYPELIB*);
+WINOLEAUTAPI LoadTypeLibEx(LPCOLESTR,REGKIND,LPTYPELIB*);
+WINOLEAUTAPI LoadRegTypeLib(REFGUID,WORD,WORD,LCID,LPTYPELIB*);
+WINOLEAUTAPI QueryPathOfRegTypeLib(REFGUID,unsigned short,unsigned short,LCID,LPBSTR);
+WINOLEAUTAPI RegisterTypeLib(LPTYPELIB,OLECHAR*,OLECHAR*);
+WINOLEAUTAPI UnRegisterTypeLib(REFGUID,WORD,WORD,LCID,SYSKIND);
+WINOLEAUTAPI CreateTypeLib(SYSKIND,const OLECHAR*,LPCREATETYPELIB*);
+WINOLEAUTAPI DispGetParam(DISPPARAMS*,UINT,VARTYPE,VARIANT*,UINT*);
+WINOLEAUTAPI DispGetIDsOfNames(LPTYPEINFO,OLECHAR**,UINT,DISPID*);
+WINOLEAUTAPI DispInvoke(void*,LPTYPEINFO,DISPID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*);
+WINOLEAUTAPI CreateDispTypeInfo(INTERFACEDATA*,LCID,LPTYPEINFO*);
+WINOLEAUTAPI CreateStdDispatch(IUnknown*,void*,LPTYPEINFO,IUnknown**);
+WINOLEAUTAPI RegisterActiveObject(IUnknown*,REFCLSID,DWORD,DWORD*);
+WINOLEAUTAPI RevokeActiveObject(DWORD,void*);
+WINOLEAUTAPI GetActiveObject(REFCLSID,void*,IUnknown**);
+WINOLEAUTAPI SetErrorInfo(unsigned long,LPERRORINFO);
+WINOLEAUTAPI GetErrorInfo(unsigned long,LPERRORINFO*);
+WINOLEAUTAPI CreateErrorInfo(LPCREATEERRORINFO*);
+WINOLEAUTAPI_(unsigned long) OaBuildVersion(void);
+WINOLEAUTAPI VectorFromBstr (BSTR, SAFEARRAY **);
+WINOLEAUTAPI BstrFromVector (SAFEARRAY *, BSTR *);
+WINOLEAUTAPI VarParseNumFromStr(OLECHAR*,LCID,ULONG,NUMPARSE*,BYTE*);
+WINOLEAUTAPI VarNumFromParseNum(NUMPARSE*,BYTE*,ULONG,VARIANT*);
+WINOLEAUTAPI_(HRESULT) GetRecordInfoFromTypeInfo (ITypeInfo*,IRecordInfo**);
+WINOLEAUTAPI_(HRESULT) GetRecordInfoFromGuids (REFGUID,ULONG,ULONG,LCID,REFGUID,IRecordInfo**);
+
+WINOLEAUTAPI VarAdd(LPVARIANT, LPVARIANT, LPVARIANT);
+WINOLEAUTAPI VarSub(LPVARIANT, LPVARIANT, LPVARIANT);
+WINOLEAUTAPI VarMul(LPVARIANT, LPVARIANT, LPVARIANT);
+WINOLEAUTAPI VarDiv(LPVARIANT, LPVARIANT, LPVARIANT);
+
+WINOLEAUTAPI VarUI1FromI2(SHORT,BYTE*);
+WINOLEAUTAPI VarUI1FromI4(LONG,BYTE*);
+WINOLEAUTAPI VarUI1FromI8(LONG64,BYTE*);
+WINOLEAUTAPI VarUI1FromR4(FLOAT,BYTE*);
+WINOLEAUTAPI VarUI1FromR8(DOUBLE,BYTE*);
+WINOLEAUTAPI VarUI1FromDate(DATE,BYTE*);
+WINOLEAUTAPI VarUI1FromBool(VARIANT_BOOL,BYTE*);
+WINOLEAUTAPI VarUI1FromI1(signed char,BYTE*);
+WINOLEAUTAPI VarUI1FromUI2(USHORT,BYTE*);
+WINOLEAUTAPI VarUI1FromUI4(ULONG,BYTE*);
+WINOLEAUTAPI VarUI1FromUI8(ULONG64,BYTE*);
+WINOLEAUTAPI VarUI1FromStr(OLECHAR*,LCID,ULONG,BYTE*);
+WINOLEAUTAPI VarUI1FromCy(CY,BYTE*);
+WINOLEAUTAPI VarUI1FromDec(DECIMAL*,BYTE*);
+WINOLEAUTAPI VarUI1FromDisp(IDispatch*,LCID,BYTE*);
+
+WINOLEAUTAPI VarI2FromUI1(BYTE,SHORT*);
+WINOLEAUTAPI VarI2FromI4(LONG,SHORT*);
+WINOLEAUTAPI VarI2FromI8(LONG64,SHORT*);
+WINOLEAUTAPI VarI2FromR4(FLOAT,SHORT*);
+WINOLEAUTAPI VarI2FromR8(DOUBLE,SHORT*);
+WINOLEAUTAPI VarI2FromDate(DATE,SHORT*);
+WINOLEAUTAPI VarI2FromBool(VARIANT_BOOL,SHORT*);
+WINOLEAUTAPI VarI2FromI1(signed char,SHORT*);
+WINOLEAUTAPI VarI2FromUI2(USHORT,SHORT*);
+WINOLEAUTAPI VarI2FromUI4(ULONG,SHORT*);
+WINOLEAUTAPI VarI2FromUI8(ULONG64,SHORT*);
+WINOLEAUTAPI VarI2FromStr(OLECHAR*,LCID,ULONG,SHORT*);
+WINOLEAUTAPI VarI2FromCy(CY,SHORT*);
+WINOLEAUTAPI VarI2FromDec(DECIMAL*,SHORT*);
+WINOLEAUTAPI VarI2FromDisp(IDispatch*,LCID,SHORT*);
+
+WINOLEAUTAPI VarI4FromUI1(BYTE,LONG*);
+WINOLEAUTAPI VarI4FromI2(SHORT,LONG*);
+WINOLEAUTAPI VarI4FromI8(LONG64,LONG*);
+WINOLEAUTAPI VarI4FromR4(FLOAT,LONG*);
+WINOLEAUTAPI VarI4FromR8(DOUBLE,LONG*);
+WINOLEAUTAPI VarI4FromDate(DATE,LONG*);
+WINOLEAUTAPI VarI4FromBool(VARIANT_BOOL,LONG*);
+WINOLEAUTAPI VarI4FromI1(signed char,LONG*);
+WINOLEAUTAPI VarI4FromUI2(USHORT,LONG*);
+WINOLEAUTAPI VarI4FromUI4(ULONG,LONG*);
+WINOLEAUTAPI VarI4FromUI8(ULONG64,LONG*);
+WINOLEAUTAPI VarI4FromStr(OLECHAR*,LCID,ULONG,LONG*);
+WINOLEAUTAPI VarI4FromCy(CY,LONG*);
+WINOLEAUTAPI VarI4FromDec(DECIMAL*,LONG*);
+WINOLEAUTAPI VarI4FromDisp(IDispatch*,LCID,LONG*);
+
+WINOLEAUTAPI VarI8FromUI1(BYTE,LONG64*);
+WINOLEAUTAPI VarI8FromI2(SHORT,LONG64*);
+WINOLEAUTAPI VarI8FromI4(LONG,LONG64*);
+WINOLEAUTAPI VarI8FromR4(FLOAT,LONG64*);
+WINOLEAUTAPI VarI8FromR8(DOUBLE,LONG64*);
+WINOLEAUTAPI VarI8FromDate(DATE,LONG64*);
+WINOLEAUTAPI VarI8FromStr(OLECHAR*,LCID,ULONG,LONG64*);
+WINOLEAUTAPI VarI8FromBool(VARIANT_BOOL,LONG64*);
+WINOLEAUTAPI VarI8FromI1(signed char,LONG64*);
+WINOLEAUTAPI VarI8FromUI2(USHORT,LONG64*);
+WINOLEAUTAPI VarI8FromUI4(ULONG,LONG64*);
+WINOLEAUTAPI VarI8FromUI8(ULONG64,LONG64*);
+WINOLEAUTAPI VarI8FromDec(DECIMAL *pdecIn,LONG64*);
+WINOLEAUTAPI VarI8FromInt(INT intIn,LONG64*);
+WINOLEAUTAPI VarI8FromCy(CY,LONG64*);
+WINOLEAUTAPI VarI8FromDisp(IDispatch*,LCID,LONG64*);
+
+WINOLEAUTAPI VarR4FromUI1(BYTE,FLOAT*);
+WINOLEAUTAPI VarR4FromI2(SHORT,FLOAT*);
+WINOLEAUTAPI VarR4FromI4(LONG,FLOAT*);
+WINOLEAUTAPI VarR4FromI8(LONG64,FLOAT*);
+WINOLEAUTAPI VarR4FromR8(DOUBLE,FLOAT*);
+WINOLEAUTAPI VarR4FromDate(DATE,FLOAT*);
+WINOLEAUTAPI VarR4FromBool(VARIANT_BOOL,FLOAT*);
+WINOLEAUTAPI VarR4FromI1(signed char,FLOAT*);
+WINOLEAUTAPI VarR4FromUI2(USHORT,FLOAT*);
+WINOLEAUTAPI VarR4FromUI4(ULONG,FLOAT*);
+WINOLEAUTAPI VarR4FromUI8(ULONG64,FLOAT*);
+WINOLEAUTAPI VarR4FromStr(OLECHAR*,LCID,ULONG,FLOAT*);
+WINOLEAUTAPI VarR4FromCy(CY,FLOAT*);
+WINOLEAUTAPI VarR4FromDec(DECIMAL*,FLOAT*);
+WINOLEAUTAPI VarR4FromDisp(IDispatch*,LCID,FLOAT*);
+
+WINOLEAUTAPI VarR8FromUI1(BYTE,double*);
+WINOLEAUTAPI VarR8FromI2(SHORT,double*);
+WINOLEAUTAPI VarR8FromI4(LONG,double*);
+WINOLEAUTAPI VarR8FromI8(LONG64,double*);
+WINOLEAUTAPI VarR8FromR4(FLOAT,double*);
+WINOLEAUTAPI VarR8FromDate(DATE,double*);
+WINOLEAUTAPI VarR8FromBool(VARIANT_BOOL,double*);
+WINOLEAUTAPI VarR8FromI1(signed char,double*);
+WINOLEAUTAPI VarR8FromUI2(USHORT,double*);
+WINOLEAUTAPI VarR8FromUI4(ULONG,double*);
+WINOLEAUTAPI VarR8FromUI8(ULONG64,double*);
+WINOLEAUTAPI VarR8FromStr(OLECHAR*,LCID,ULONG,double*);
+WINOLEAUTAPI VarR8FromCy(CY,double*);
+WINOLEAUTAPI VarR8FromDec(DECIMAL*,double*);
+WINOLEAUTAPI VarR8FromDisp(IDispatch*,LCID,double*);
+
+WINOLEAUTAPI VarDateFromUI1(BYTE,DATE*);
+WINOLEAUTAPI VarDateFromI2(SHORT,DATE*);
+WINOLEAUTAPI VarDateFromI4(LONG,DATE*);
+WINOLEAUTAPI VarDateFromI8(LONG64,DATE*);
+WINOLEAUTAPI VarDateFromR4(FLOAT,DATE*);
+WINOLEAUTAPI VarDateFromR8(DOUBLE,DATE*);
+WINOLEAUTAPI VarDateFromStr(OLECHAR*,LCID,ULONG,DATE*);
+WINOLEAUTAPI VarDateFromI1(signed char,DATE*);
+WINOLEAUTAPI VarDateFromUI2(USHORT,DATE*);
+WINOLEAUTAPI VarDateFromUI4(ULONG,DATE*);
+WINOLEAUTAPI VarDateFromUI8(ULONG64,DATE*);
+WINOLEAUTAPI VarDateFromBool(VARIANT_BOOL,DATE*);
+WINOLEAUTAPI VarDateFromCy(CY,DATE*);
+WINOLEAUTAPI VarDateFromDec(DECIMAL*,DATE*);
+WINOLEAUTAPI VarDateFromDisp(IDispatch*,LCID,DATE*);
+
+WINOLEAUTAPI VarCyFromUI1(BYTE,CY*);
+WINOLEAUTAPI VarCyFromI2(SHORT sIn,CY*);
+WINOLEAUTAPI VarCyFromI4(LONG,CY*);
+WINOLEAUTAPI VarCyFromI8(LONG64,CY*);
+WINOLEAUTAPI VarCyFromR4(FLOAT,CY*);
+WINOLEAUTAPI VarCyFromR8(DOUBLE,CY*);
+WINOLEAUTAPI VarCyFromDate(DATE,CY*);
+WINOLEAUTAPI VarCyFromStr(OLECHAR*,LCID,ULONG,CY*);
+WINOLEAUTAPI VarCyFromBool(VARIANT_BOOL,CY*);
+WINOLEAUTAPI VarCyFromI1(signed char,CY*);
+WINOLEAUTAPI VarCyFromUI2(USHORT,CY*);
+WINOLEAUTAPI VarCyFromUI4(ULONG,CY*);
+WINOLEAUTAPI VarCyFromUI8(ULONG64,CY*);
+WINOLEAUTAPI VarCyFromDec(DECIMAL*,CY*);
+WINOLEAUTAPI VarCyFromStr(OLECHAR*,LCID,ULONG,CY*);
+WINOLEAUTAPI VarCyFromDisp(IDispatch*,LCID,CY*);
+
+WINOLEAUTAPI VarBstrFromUI1(BYTE,LCID,ULONG,BSTR*);
+WINOLEAUTAPI VarBstrFromI2(SHORT,LCID,ULONG,BSTR*);
+WINOLEAUTAPI VarBstrFromI4(LONG,LCID,ULONG,BSTR*);
+WINOLEAUTAPI VarBstrFromI8(LONG64,LCID,ULONG,BSTR*);
+WINOLEAUTAPI VarBstrFromR4(FLOAT,LCID,ULONG,BSTR*);
+WINOLEAUTAPI VarBstrFromR8(DOUBLE,LCID,ULONG,BSTR*);
+WINOLEAUTAPI VarBstrFromDate(DATE,LCID,ULONG,BSTR*);
+WINOLEAUTAPI VarBstrFromBool(VARIANT_BOOL,LCID,ULONG,BSTR*);
+WINOLEAUTAPI VarBstrFromI1(signed char,LCID,ULONG,BSTR*);
+WINOLEAUTAPI VarBstrFromUI2(USHORT,LCID,ULONG,BSTR*);
+WINOLEAUTAPI VarBstrFromUI8(ULONG64,LCID,ULONG,BSTR*);
+WINOLEAUTAPI VarBstrFromUI4(ULONG,LCID,ULONG,BSTR*);
+WINOLEAUTAPI VarBstrFromCy(CY,LCID,ULONG,BSTR*);
+WINOLEAUTAPI VarBstrFromDec(DECIMAL*,LCID,ULONG,BSTR*);
+WINOLEAUTAPI VarBstrFromDisp(IDispatch*,LCID,ULONG,BSTR*);
+
+WINOLEAUTAPI VarBoolFromUI1(BYTE,VARIANT_BOOL*);
+WINOLEAUTAPI VarBoolFromI2(SHORT,VARIANT_BOOL*);
+WINOLEAUTAPI VarBoolFromI4(LONG,VARIANT_BOOL*);
+WINOLEAUTAPI VarBoolFromI8(LONG64,VARIANT_BOOL*);
+WINOLEAUTAPI VarBoolFromR4(FLOAT,VARIANT_BOOL*);
+WINOLEAUTAPI VarBoolFromR8(DOUBLE,VARIANT_BOOL*);
+WINOLEAUTAPI VarBoolFromDate(DATE,VARIANT_BOOL*);
+WINOLEAUTAPI VarBoolFromStr(OLECHAR*,LCID,ULONG,VARIANT_BOOL*);
+WINOLEAUTAPI VarBoolFromI1(signed char,VARIANT_BOOL*);
+WINOLEAUTAPI VarBoolFromUI2(USHORT,VARIANT_BOOL*);
+WINOLEAUTAPI VarBoolFromUI4(ULONG,VARIANT_BOOL*);
+WINOLEAUTAPI VarBoolFromUI8(ULONG64,VARIANT_BOOL*);
+WINOLEAUTAPI VarBoolFromCy(CY,VARIANT_BOOL*);
+WINOLEAUTAPI VarBoolFromDec(DECIMAL*,VARIANT_BOOL*);
+WINOLEAUTAPI VarBoolFromDisp(IDispatch*,LCID,VARIANT_BOOL*);
+
+WINOLEAUTAPI VarI1FromUI1(BYTE,signed char*);
+WINOLEAUTAPI VarI1FromI2(SHORT,signed char*);
+WINOLEAUTAPI VarI1FromI4(LONG,signed char*);
+WINOLEAUTAPI VarI1FromI8(LONG64,signed char*);
+WINOLEAUTAPI VarI1FromR4(FLOAT,signed char*);
+WINOLEAUTAPI VarI1FromR8(DOUBLE,signed char*);
+WINOLEAUTAPI VarI1FromDate(DATE,signed char*);
+WINOLEAUTAPI VarI1FromStr(OLECHAR*,LCID,ULONG,signed char*);
+WINOLEAUTAPI VarI1FromBool(VARIANT_BOOL,signed char*);
+WINOLEAUTAPI VarI1FromUI2(USHORT,signed char*);
+WINOLEAUTAPI VarI1FromUI4(ULONG,signed char*);
+WINOLEAUTAPI VarI1FromUI8(ULONG64,signed char*);
+WINOLEAUTAPI VarI1FromCy(CY,signed char*);
+WINOLEAUTAPI VarI1FromDec(DECIMAL*,signed char*);
+WINOLEAUTAPI VarI1FromDisp(IDispatch*,LCID,signed char*);
+
+WINOLEAUTAPI VarUI2FromUI1(BYTE,USHORT*);
+WINOLEAUTAPI VarUI2FromI2(SHORT,USHORT*);
+WINOLEAUTAPI VarUI2FromI4(LONG,USHORT*);
+WINOLEAUTAPI VarUI2FromI8(LONG64,USHORT*);
+WINOLEAUTAPI VarUI2FromR4(FLOAT,USHORT*);
+WINOLEAUTAPI VarUI2FromR8(DOUBLE,USHORT*);
+WINOLEAUTAPI VarUI2FromDate(DATE,USHORT*);
+WINOLEAUTAPI VarUI2FromStr(OLECHAR*,LCID,ULONG,USHORT*);
+WINOLEAUTAPI VarUI2FromBool(VARIANT_BOOL,USHORT*);
+WINOLEAUTAPI VarUI2FromI1(signed char,USHORT*);
+WINOLEAUTAPI VarUI2FromUI4(ULONG,USHORT*);
+WINOLEAUTAPI VarUI2FromUI8(ULONG64,USHORT*);
+WINOLEAUTAPI VarUI2FromCy(CY,USHORT*);
+WINOLEAUTAPI VarUI2FromDec(DECIMAL*,USHORT*);
+WINOLEAUTAPI VarUI2FromDisp(IDispatch*,LCID,USHORT*);
+
+WINOLEAUTAPI VarUI4FromStr(OLECHAR*,LCID,ULONG,ULONG*);
+WINOLEAUTAPI VarUI4FromUI1(BYTE,ULONG*);
+WINOLEAUTAPI VarUI4FromI2(SHORT,ULONG*);
+WINOLEAUTAPI VarUI4FromI4(LONG,ULONG*);
+WINOLEAUTAPI VarUI4FromI8(LONG64,ULONG*);
+WINOLEAUTAPI VarUI4FromR4(FLOAT,ULONG*);
+WINOLEAUTAPI VarUI4FromR8(DOUBLE,ULONG*);
+WINOLEAUTAPI VarUI4FromDate(DATE,ULONG*);
+WINOLEAUTAPI VarUI4FromBool(VARIANT_BOOL,ULONG*);
+WINOLEAUTAPI VarUI4FromI1(signed char,ULONG*);
+WINOLEAUTAPI VarUI4FromUI2(USHORT,ULONG*);
+WINOLEAUTAPI VarUI4FromUI8(ULONG64,ULONG*);
+WINOLEAUTAPI VarUI4FromCy(CY,ULONG*);
+WINOLEAUTAPI VarUI4FromDec(DECIMAL*,ULONG*);
+WINOLEAUTAPI VarUI4FromDisp(IDispatch*,LCID,ULONG*);
+
+WINOLEAUTAPI VarUI8FromUI1(BYTE,ULONG64*);
+WINOLEAUTAPI VarUI8FromI2(SHORT,ULONG64*);
+WINOLEAUTAPI VarUI8FromI4(LONG,ULONG64*);
+WINOLEAUTAPI VarUI8FromI8(LONG64,ULONG64*);
+WINOLEAUTAPI VarUI8FromR4(FLOAT,ULONG64*);
+WINOLEAUTAPI VarUI8FromR8(DOUBLE,ULONG64*);
+WINOLEAUTAPI VarUI8FromDate(DATE,ULONG64*);
+WINOLEAUTAPI VarUI8FromStr(OLECHAR*,LCID,ULONG,ULONG64*);
+WINOLEAUTAPI VarUI8FromBool(VARIANT_BOOL,ULONG64*);
+WINOLEAUTAPI VarUI8FromI1(signed char,ULONG64*);
+WINOLEAUTAPI VarUI8FromUI2(USHORT,ULONG64*);
+WINOLEAUTAPI VarUI8FromUI4(ULONG,ULONG64*);
+WINOLEAUTAPI VarUI8FromDec(DECIMAL*,ULONG64*);
+WINOLEAUTAPI VarUI8FromInt(INT,ULONG64*);
+WINOLEAUTAPI VarUI8FromCy(CY,ULONG64*);
+WINOLEAUTAPI VarUI8FromDisp(IDispatch*,LCID,ULONG64*);
+
+WINOLEAUTAPI VarDecFromUI1(BYTE,DECIMAL*);
+WINOLEAUTAPI VarDecFromI2(SHORT,DECIMAL*);
+WINOLEAUTAPI VarDecFromI4(LONG,DECIMAL*);
+WINOLEAUTAPI VarDecFromI8(LONG64,DECIMAL*);
+WINOLEAUTAPI VarDecFromR4(FLOAT,DECIMAL*);
+WINOLEAUTAPI VarDecFromR8(DOUBLE,DECIMAL*);
+WINOLEAUTAPI VarDecFromDate(DATE,DECIMAL*);
+WINOLEAUTAPI VarDecFromStr(OLECHAR*,LCID,ULONG,DECIMAL*);
+WINOLEAUTAPI VarDecFromBool(VARIANT_BOOL,DECIMAL*);
+WINOLEAUTAPI VarDecFromI1(signed char,DECIMAL*);
+WINOLEAUTAPI VarDecFromUI2(USHORT,DECIMAL*);
+WINOLEAUTAPI VarDecFromUI4(ULONG,DECIMAL*);
+WINOLEAUTAPI VarDecFromUI8(ULONG64,DECIMAL*);
+WINOLEAUTAPI VarDecFromCy(CY,DECIMAL*);
+WINOLEAUTAPI VarDecFromDisp(IDispatch*,LCID,DECIMAL*);
+
+WINOLEAUTAPI VarDecNeg(const DECIMAL*,DECIMAL*);
+WINOLEAUTAPI VarR4CmpR8(float,double);
+WINOLEAUTAPI VarR8Pow(double,double,double*);
+WINOLEAUTAPI VarR8Round(double,int,double*);
+WINOLEAUTAPI VarDecAbs(const DECIMAL*,DECIMAL*);
+WINOLEAUTAPI VarDecAdd(const DECIMAL*,const DECIMAL*,DECIMAL*);
+WINOLEAUTAPI VarDecCmp(const DECIMAL*,const DECIMAL*);
+WINOLEAUTAPI VarDecCmpR8(const DECIMAL*,DOUBLE);
+WINOLEAUTAPI VarDecDiv(const DECIMAL*,const DECIMAL*,DECIMAL*);
+WINOLEAUTAPI VarDecFix(const DECIMAL*,DECIMAL*);
+WINOLEAUTAPI VarDecInt(const DECIMAL*,DECIMAL*);
+WINOLEAUTAPI VarDecMul(const DECIMAL*,const DECIMAL*,DECIMAL*);
+WINOLEAUTAPI VarDecRound(const DECIMAL*,int,DECIMAL*);
+WINOLEAUTAPI VarDecSub(const DECIMAL*,const DECIMAL*,DECIMAL*);
+WINOLEAUTAPI VarCyAbs(const CY,CY*);
+WINOLEAUTAPI VarCyAdd(const CY,const CY,CY*);
+WINOLEAUTAPI VarCyCmp(const CY,const CY);
+WINOLEAUTAPI VarCyCmpR8(const CY,DOUBLE);
+WINOLEAUTAPI VarCyFix(const CY,CY*);
+WINOLEAUTAPI VarCyInt(const CY,CY*);
+WINOLEAUTAPI VarCyMul(const CY,CY,CY*);
+WINOLEAUTAPI VarCyMulI4(const CY,LONG,CY*);
+WINOLEAUTAPI VarCyMulI8(const CY,LONG64,CY*);
+WINOLEAUTAPI VarCyNeg(const CY,CY*);
+WINOLEAUTAPI VarCyRound(const CY,INT,CY*);
+WINOLEAUTAPI VarCySub(const CY,const CY,CY*);
+WINOLEAUTAPI VarAdd(LPVARIANT,LPVARIANT,LPVARIANT);
+WINOLEAUTAPI VarAnd(LPVARIANT,LPVARIANT,LPVARIANT);
+WINOLEAUTAPI VarCat(LPVARIANT,LPVARIANT,LPVARIANT);
+WINOLEAUTAPI VarDiv(LPVARIANT,LPVARIANT,LPVARIANT);
+WINOLEAUTAPI VarEqv(LPVARIANT,LPVARIANT,LPVARIANT);
+WINOLEAUTAPI VarIdiv(LPVARIANT,LPVARIANT,LPVARIANT);
+WINOLEAUTAPI VarImp(LPVARIANT,LPVARIANT,LPVARIANT);
+WINOLEAUTAPI VarMod(LPVARIANT,LPVARIANT,LPVARIANT);
+WINOLEAUTAPI VarMul(LPVARIANT,LPVARIANT,LPVARIANT);
+WINOLEAUTAPI VarOr(LPVARIANT,LPVARIANT,LPVARIANT);
+WINOLEAUTAPI VarPow(LPVARIANT,LPVARIANT,LPVARIANT);
+WINOLEAUTAPI VarSub(LPVARIANT,LPVARIANT,LPVARIANT);
+WINOLEAUTAPI VarXor(LPVARIANT,LPVARIANT,LPVARIANT);
+WINOLEAUTAPI VarAbs(LPVARIANT,LPVARIANT);
+WINOLEAUTAPI VarFix(LPVARIANT,LPVARIANT);
+WINOLEAUTAPI VarInt(LPVARIANT,LPVARIANT);
+WINOLEAUTAPI VarNeg(LPVARIANT,LPVARIANT);
+WINOLEAUTAPI VarNot(LPVARIANT,LPVARIANT);
+WINOLEAUTAPI VarRound(LPVARIANT,int,LPVARIANT);
+WINOLEAUTAPI VarCmp(LPVARIANT,LPVARIANT,LCID,ULONG);
+WINOLEAUTAPI VarBstrCmp(BSTR,BSTR,LCID,ULONG);
+WINOLEAUTAPI VarBstrCat(BSTR,BSTR,BSTR*);
+
+#pragma pack(pop)
+
+#endif
diff --git a/tcc/include/winapi/olectl.h b/tcc/include/winapi/olectl.h
new file mode 100644
index 0000000..f6e915f
--- /dev/null
+++ b/tcc/include/winapi/olectl.h
@@ -0,0 +1,323 @@
+#ifndef _OLECTL_H
+#define _OLECTL_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <ocidl.h>
+#include <olectlid.h>
+
+#define STD_CTL_SCODE(n) MAKE_SCODE(SEVERITY_ERROR,FACILITY_CONTROL,n)
+#define CTL_E_ILLEGALFUNCTIONCALL STD_CTL_SCODE(5)
+#define CTL_E_OVERFLOW STD_CTL_SCODE(6)
+#define CTL_E_OUTOFMEMORY STD_CTL_SCODE(7)
+#define CTL_E_DIVISIONBYZERO STD_CTL_SCODE(11)
+#define CTL_E_OUTOFSTRINGSPACE STD_CTL_SCODE(14)
+#define CTL_E_OUTOFSTACKSPACE STD_CTL_SCODE(28)
+#define CTL_E_BADFILENAMEORNUMBER STD_CTL_SCODE(52)
+#define CTL_E_FILENOTFOUND STD_CTL_SCODE(53)
+#define CTL_E_BADFILEMODE STD_CTL_SCODE(54)
+#define CTL_E_FILEALREADYOPEN STD_CTL_SCODE(55)
+#define CTL_E_DEVICEIOERROR STD_CTL_SCODE(57)
+#define CTL_E_FILEALREADYEXISTS STD_CTL_SCODE(58)
+#define CTL_E_BADRECORDLENGTH STD_CTL_SCODE(59)
+#define CTL_E_DISKFULL STD_CTL_SCODE(61)
+#define CTL_E_BADRECORDNUMBER STD_CTL_SCODE(63)
+#define CTL_E_BADFILENAME STD_CTL_SCODE(64)
+#define CTL_E_TOOMANYFILES STD_CTL_SCODE(67)
+#define CTL_E_DEVICEUNAVAILABLE STD_CTL_SCODE(68)
+#define CTL_E_PERMISSIONDENIED STD_CTL_SCODE(70)
+#define CTL_E_DISKNOTREADY STD_CTL_SCODE(71)
+#define CTL_E_PATHFILEACCESSERROR STD_CTL_SCODE(75)
+#define CTL_E_PATHNOTFOUND STD_CTL_SCODE(76)
+#define CTL_E_INVALIDPATTERNSTRING STD_CTL_SCODE(93)
+#define CTL_E_INVALIDUSEOFNULL STD_CTL_SCODE(94)
+#define CTL_E_INVALIDFILEFORMAT STD_CTL_SCODE(321)
+#define CTL_E_INVALIDPROPERTYVALUE STD_CTL_SCODE(380)
+#define CTL_E_INVALIDPROPERTYARRAYINDEX STD_CTL_SCODE(381)
+#define CTL_E_SETNOTSUPPORTEDATRUNTIME STD_CTL_SCODE(382)
+#define CTL_E_SETNOTSUPPORTED STD_CTL_SCODE(383)
+#define CTL_E_NEEDPROPERTYARRAYINDEX STD_CTL_SCODE(385)
+#define CTL_E_SETNOTPERMITTED STD_CTL_SCODE(387)
+#define CTL_E_GETNOTSUPPORTEDATRUNTIME STD_CTL_SCODE(393)
+#define CTL_E_GETNOTSUPPORTED STD_CTL_SCODE(394)
+#define CTL_E_PROPERTYNOTFOUND STD_CTL_SCODE(422)
+#define CTL_E_INVALIDCLIPBOARDFORMAT STD_CTL_SCODE(460)
+#define CTL_E_INVALIDPICTURE STD_CTL_SCODE(481)
+#define CTL_E_PRINTERERROR STD_CTL_SCODE(482)
+#define CTL_E_CANTSAVEFILETOTEMP STD_CTL_SCODE(735)
+#define CTL_E_SEARCHTEXTNOTFOUND STD_CTL_SCODE(744)
+#define CTL_E_REPLACEMENTSTOOLONG STD_CTL_SCODE(746)
+#define CUSTOM_CTL_SCODE(n) MAKE_SCODE(SEVERITY_ERROR,FACILITY_CONTROL,n)
+#define CTL_E_CUSTOM_FIRST CUSTOM_CTL_SCODE(600)
+#define CLASS_E_NOTLICENSED (CLASSFACTORY_E_FIRST+2)
+#define CONNECT_E_FIRST MAKE_SCODE(SEVERITY_ERROR,FACILITY_ITF,0x200)
+#define CONNECT_E_LAST MAKE_SCODE(SEVERITY_ERROR,FACILITY_ITF,0x20F)
+#define CONNECT_S_FIRST MAKE_SCODE(SEVERITY_SUCCESS,FACILITY_ITF,0x200)
+#define CONNECT_S_LAST MAKE_SCODE(SEVERITY_SUCCESS,FACILITY_ITF,0x20F)
+#define CONNECT_E_NOCONNECTION (CONNECT_E_FIRST+0)
+#define CONNECT_E_ADVISELIMIT (CONNECT_E_FIRST+1)
+#define CONNECT_E_CANNOTCONNECT (CONNECT_E_FIRST+2)
+#define CONNECT_E_OVERRIDDEN (CONNECT_E_FIRST+3)
+#define SELFREG_E_FIRST MAKE_SCODE(SEVERITY_ERROR,FACILITY_ITF,0x200)
+#define SELFREG_E_LAST MAKE_SCODE(SEVERITY_ERROR,FACILITY_ITF,0x20F)
+#define SELFREG_S_FIRST MAKE_SCODE(SEVERITY_SUCCESS,FACILITY_ITF,0x200)
+#define SELFREG_S_LAST MAKE_SCODE(SEVERITY_SUCCESS,FACILITY_ITF,0x20F)
+#define SELFREG_E_TYPELIB (SELFREG_E_FIRST+0)
+#define SELFREG_E_CLASS (SELFREG_E_FIRST+1)
+#define PERPROP_E_FIRST MAKE_SCODE(SEVERITY_ERROR,FACILITY_ITF,0x200)
+#define PERPROP_E_LAST MAKE_SCODE(SEVERITY_ERROR,FACILITY_ITF,0x20F)
+#define PERPROP_S_FIRST MAKE_SCODE(SEVERITY_SUCCESS,FACILITY_ITF,0x200)
+#define PERPROP_S_LAST MAKE_SCODE(SEVERITY_SUCCESS,FACILITY_ITF,0x20F)
+#define PERPROP_E_NOPAGEAVAILABLE PERPROP_E_FIRST
+#define OLEMISC_RECOMPOSEONRESIZE 0x1
+#define OLEMISC_ONLYICONIC 0x2
+#define OLEMISC_INSERTNOTREPLACE 0x4
+#define OLEMISC_STATIC 0x8
+#define OLEMISC_CANTLINKINSIDE 0x10
+#define OLEMISC_CANLINKBYOLE1 0x20
+#define OLEMISC_ISLINKOBJECT 0x40
+#define OLEMISC_INSIDEOUT 0x80
+#define OLEMISC_ACTIVATEWHENVISIBLE 0x100
+#define OLEMISC_RENDERINGISDEVICEINDEPENDENT 0x200
+#define OLEMISC_INVISIBLEATRUNTIME 0x400
+#define OLEMISC_ALWAYSRUN 0x800
+#define OLEMISC_ACTSLIKEBUTTON 0x1000
+#define OLEMISC_ACTSLIKELABEL 0x2000
+#define OLEMISC_NOUIACTIVATE 0x4000
+#define OLEMISC_ALIGNABLE 0x8000
+#define OLEMISC_SIMPLEFRAME 0x10000
+#define OLEMISC_SETCLIENTSITEFIRST 0x20000
+#define OLEMISC_IMEMODE 0x40000
+#define OLEMISC_IGNOREACTIVATEWHENVISIBLE 0x80000
+#define OLEMISC_WANTSTOMENUMERGE 0x100000
+#define OLEMISC_SUPPORTSMULTILEVELUNDO 0x200000
+#define OLEIVERB_PROPERTIES (-7)
+#define VT_STREAMED_PROPSET 73
+#define VT_STORED_PROPSET 74
+#define VT_BLOB_PROPSET 75
+#define VT_VERBOSE_ENUM 76
+#define VT_COLOR VT_I4
+#define VT_XPOS_PIXELS VT_I4
+#define VT_YPOS_PIXELS VT_I4
+#define VT_XSIZE_PIXELS VT_I4
+#define VT_YSIZE_PIXELS VT_I4
+#define VT_XPOS_HIMETRIC VT_I4
+#define VT_YPOS_HIMETRIC VT_I4
+#define VT_XSIZE_HIMETRIC VT_I4
+#define VT_YSIZE_HIMETRIC VT_I4
+#define VT_TRISTATE VT_I2
+#define VT_OPTEXCLUSIVE VT_BOOL
+#define VT_FONT VT_DISPATCH
+#define VT_PICTURE VT_DISPATCH
+#define VT_HANDLE VT_I4
+#define OCM__BASE (WM_USER+0x1c00)
+#define OCM_COMMAND (OCM__BASE+WM_COMMAND)
+#define OCM_CTLCOLORBTN (OCM__BASE+WM_CTLCOLORBTN)
+#define OCM_CTLCOLOREDIT (OCM__BASE+WM_CTLCOLOREDIT)
+#define OCM_CTLCOLORDLG (OCM__BASE+WM_CTLCOLORDLG)
+#define OCM_CTLCOLORLISTBOX (OCM__BASE+WM_CTLCOLORLISTBOX)
+#define OCM_CTLCOLORMSGBOX (OCM__BASE+WM_CTLCOLORMSGBOX)
+#define OCM_CTLCOLORSCROLLBAR (OCM__BASE+WM_CTLCOLORSCROLLBAR)
+#define OCM_CTLCOLORSTATIC (OCM__BASE+WM_CTLCOLORSTATIC)
+#define OCM_DRAWITEM (OCM__BASE+WM_DRAWITEM)
+#define OCM_MEASUREITEM (OCM__BASE+WM_MEASUREITEM)
+#define OCM_DELETEITEM (OCM__BASE+WM_DELETEITEM)
+#define OCM_VKEYTOITEM (OCM__BASE+WM_VKEYTOITEM)
+#define OCM_CHARTOITEM (OCM__BASE+WM_CHARTOITEM)
+#define OCM_COMPAREITEM (OCM__BASE+WM_COMPAREITEM)
+#define OCM_HSCROLL (OCM__BASE+WM_HSCROLL)
+#define OCM_VSCROLL (OCM__BASE+WM_VSCROLL)
+#define OCM_PARENTNOTIFY (OCM__BASE+WM_PARENTNOTIFY)
+#define OCM_NOTIFY (OCM__BASE+WM_NOTIFY)
+#define CTRLINFO_EATS_RETURN 1
+#define CTRLINFO_EATS_ESCAPE 2
+#define XFORMCOORDS_POSITION 1
+#define XFORMCOORDS_SIZE 2
+#define XFORMCOORDS_HIMETRICTOCONTAINER 4
+#define XFORMCOORDS_CONTAINERTOHIMETRIC 8
+#define GUIDKIND_DEFAULT_SOURCE_DISP_IID 1
+#define PROPPAGESTATUS_DIRTY 1
+#define PROPPAGESTATUS_VALIDATE 2
+#define FONTSIZE(n) {n##0000,0}
+#define PICTURE_SCALABLE 1
+#define PICTURE_TRANSPARENT 2
+#define PICTYPE_UNINITIALIZED (-1)
+#define PICTYPE_NONE 0
+#define PICTYPE_BITMAP 1
+#define PICTYPE_METAFILE 2
+#define PICTYPE_ICON 3
+#define PICTYPE_ENHMETAFILE 4
+#define DISPID_AUTOSIZE (-500)
+#define DISPID_BACKCOLOR (-501)
+#define DISPID_BACKSTYLE (-502)
+#define DISPID_BORDERCOLOR (-503)
+#define DISPID_BORDERSTYLE (-504)
+#define DISPID_BORDERWIDTH (-505)
+#define DISPID_DRAWMODE (-507)
+#define DISPID_DRAWSTYLE (-508)
+#define DISPID_DRAWWIDTH (-509)
+#define DISPID_FILLCOLOR (-510)
+#define DISPID_FILLSTYLE (-511)
+#define DISPID_FONT (-512)
+#define DISPID_FORECOLOR (-513)
+#define DISPID_ENABLED (-514)
+#define DISPID_HWND (-515)
+#define DISPID_TABSTOP (-516)
+#define DISPID_TEXT (-517)
+#define DISPID_CAPTION (-518)
+#define DISPID_BORDERVISIBLE (-519)
+#define DISPID_APPEARANCE (-520)
+#define DISPID_MOUSEPOINTER (-521)
+#define DISPID_MOUSEICON (-522)
+#define DISPID_PICTURE (-523)
+#define DISPID_VALID (-524)
+#define DISPID_REFRESH (-550)
+#define DISPID_DOCLICK (-551)
+#define DISPID_ABOUTBOX (-552)
+#define DISPID_CLICK (-600)
+#define DISPID_DBLCLICK (-601)
+#define DISPID_KEYDOWN (-602)
+#define DISPID_KEYPRESS (-603)
+#define DISPID_KEYUP (-604)
+#define DISPID_MOUSEDOWN (-605)
+#define DISPID_MOUSEMOVE (-606)
+#define DISPID_MOUSEUP (-607)
+#define DISPID_ERROREVENT (-608)
+#define DISPID_AMBIENT_BACKCOLOR (-701)
+#define DISPID_AMBIENT_DISPLAYNAME (-702)
+#define DISPID_AMBIENT_FONT (-703)
+#define DISPID_AMBIENT_FORECOLOR (-704)
+#define DISPID_AMBIENT_LOCALEID (-705)
+#define DISPID_AMBIENT_MESSAGEREFLECT (-706)
+#define DISPID_AMBIENT_SCALEUNITS (-707)
+#define DISPID_AMBIENT_TEXTALIGN (-708)
+#define DISPID_AMBIENT_USERMODE (-709)
+#define DISPID_AMBIENT_UIDEAD (-710)
+#define DISPID_AMBIENT_SHOWGRABHANDLES (-711)
+#define DISPID_AMBIENT_SHOWHATCHING (-712)
+#define DISPID_AMBIENT_DISPLAYASDEFAULT (-713)
+#define DISPID_AMBIENT_SUPPORTSMNEMONICS (-714)
+#define DISPID_AMBIENT_AUTOCLIP (-715)
+#define DISPID_AMBIENT_APPEARANCE (-716)
+#define DISPID_AMBIENT_CODEPAGE (-725)
+#define DISPID_AMBIENT_PALETTE (-726)
+#define DISPID_AMBIENT_CHARSET (-727)
+#define DISPID_AMBIENT_RIGHTTOLEFT (-732)
+#define DISPID_AMBIENT_TOPTOBOTTOM (-733)
+
+#define DISPID_FONT_NAME 0
+#define DISPID_FONT_SIZE 2
+#define DISPID_FONT_BOLD 3
+#define DISPID_FONT_ITALIC 4
+#define DISPID_FONT_UNDER 5
+#define DISPID_FONT_STRIKE 6
+#define DISPID_FONT_WEIGHT 7
+#define DISPID_FONT_CHARSET 8
+#define DISPID_PICT_HANDLE 0
+#define DISPID_PICT_HPAL 2
+#define DISPID_PICT_TYPE 3
+#define DISPID_PICT_WIDTH 4
+#define DISPID_PICT_HEIGHT 5
+#define DISPID_PICT_RENDER 6
+
+typedef _COM_interface IOleControl *LPOLECONTROL;
+typedef _COM_interface IOleControlSite *LPOLECONTROLSITE;
+typedef _COM_interface ISimpleFrameSite *LPSIMPLEFRAMESITE;
+typedef _COM_interface IPersistPropertyBag *LPPERSISTPROPERTYBAG;
+typedef _COM_interface IPersistStreamInit *LPPERSISTSTREAMINIT;
+typedef _COM_interface IPersistMemory *LPPERSISTMEMORY;
+typedef _COM_interface IPropertyNotifySink* LPPROPERTYNOTIFYSINK;
+typedef _COM_interface IProvideClassInfo *LPPROVIDECLASSINFO;
+typedef _COM_interface IProvideClassInfo2 *LPPROVIDECLASSINFO2;
+typedef _COM_interface IConnectionPointContainer *LPCONNECTIONPOINTCONTAINER;
+typedef _COM_interface IClassFactory2 *LPCLASSFACTORY2;
+typedef _COM_interface ISpecifyPropertyPages *LPSPECIFYPROPERTYPAGES;
+typedef _COM_interface IPerPropertyBrowsing *LPPERPROPERTYBROWSING;
+typedef _COM_interface IPropertyPage *LPPROPERTYPAGE;
+typedef _COM_interface IPropertyPage2 *LPPROPERTYPAGE2;
+
+typedef _COM_interface IPicture *LPPICTURE;
+typedef _COM_interface IPictureDisp *LPPICTUREDISP;
+typedef long OLE_XPOS_PIXELS;
+typedef long OLE_YPOS_PIXELS;
+typedef long OLE_XSIZE_PIXELS;
+typedef long OLE_YSIZE_PIXELS;
+typedef float OLE_XPOS_CONTAINER;
+typedef float OLE_YPOS_CONTAINER;
+typedef float OLE_XSIZE_CONTAINER;
+
+typedef VARIANT_BOOL OLE_OPTEXCLUSIVE;
+typedef VARIANT_BOOL OLE_CANCELBOOL;
+typedef VARIANT_BOOL OLE_ENABLEDEFAULTBOOL;
+
+#pragma pack(push,8)
+typedef enum { triUnchecked,triChecked1,triGray } OLE_TRISTATE;
+typedef struct tagOCPFIPARAMS {
+ ULONG cbStructSize;
+ HWND hWndOwner;
+ int x;
+ int y;
+ LPCOLESTR lpszCaption;
+ ULONG cObjects;
+ LPUNKNOWN *lplpUnk;
+ ULONG cPages;
+ CLSID *lpPages;
+ LCID lcid;
+ DISPID dispidInitialProperty;
+} OCPFIPARAMS,*LPOCPFIPARAMS;
+typedef struct tagFONTDESC {
+ UINT cbSizeofstruct;
+ LPOLESTR lpstrName;
+ CY cySize;
+ SHORT sWeight;
+ SHORT sCharset;
+ BOOL fItalic;
+ BOOL fUnderline;
+ BOOL fStrikethrough;
+} FONTDESC,*LPFONTDESC;
+typedef struct tagPICTDESC {
+ UINT cbSizeofstruct;
+ UINT picType;
+ _ANONYMOUS_UNION union {
+ struct {
+ HBITMAP hbitmap;
+ HPALETTE hpal;
+ } bmp;
+ struct {
+ HMETAFILE hmeta;
+ int xExt;
+ int yExt;
+ } wmf;
+ struct {
+ HICON hicon;
+ } icon;
+ struct {
+ HENHMETAFILE hemf;
+ } emf;
+ } DUMMYUNIONNAME;
+} PICTDESC,*LPPICTDESC;
+#pragma pack(pop)
+
+STDAPI DllRegisterServer(void);
+STDAPI DllUnregisterServer(void);
+STDAPI OleCreateFontIndirect(LPFONTDESC,REFIID,PVOID*);
+STDAPI OleCreatePictureIndirect(LPPICTDESC,REFIID,BOOL,PVOID*);
+STDAPI OleCreatePropertyFrame(HWND,UINT,UINT,LPCOLESTR,ULONG,LPUNKNOWN*,ULONG,LPCLSID,LCID,DWORD,PVOID);
+STDAPI OleCreatePropertyFrameIndirect(LPOCPFIPARAMS);
+STDAPI_(HCURSOR) OleIconToCursor(HINSTANCE,HICON);
+STDAPI OleLoadPicture(LPSTREAM,LONG,BOOL,REFIID,PVOID*);
+STDAPI OleLoadPictureEx(LPSTREAM,LONG,BOOL,REFIID,DWORD,DWORD,DWORD,LPVOID*);
+STDAPI OleLoadPicturePath(LPOLESTR,LPUNKNOWN,DWORD,OLE_COLOR,REFIID,LPVOID*);
+STDAPI OleLoadPictureFile(VARIANT,LPDISPATCH*);
+STDAPI OleLoadPictureFileEx(VARIANT,DWORD,DWORD,DWORD,LPDISPATCH*);
+STDAPI OleSavePictureFile(LPDISPATCH,BSTR);
+STDAPI OleTranslateColor(OLE_COLOR,HPALETTE,COLORREF*);
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/olectlid.h b/tcc/include/winapi/olectlid.h
new file mode 100644
index 0000000..73e935c
--- /dev/null
+++ b/tcc/include/winapi/olectlid.h
@@ -0,0 +1,114 @@
+#ifndef _OLECTLID_H
+#define _OLECTLID_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern const GUID IID_IDispatch;
+extern const GUID IID_IPropertyNotifySink;
+extern const GUID IID_IClassFactory2;
+extern const GUID IID_IProvideClassInfo;
+extern const GUID IID_IProvideClassInfo2;
+extern const GUID IID_IConnectionPointContainer;
+extern const GUID IID_IEnumConnectionPoints;
+extern const GUID IID_IConnectionPoint;
+extern const GUID IID_IEnumConnections;
+extern const GUID IID_IOleControl;
+extern const GUID IID_IOleControlSite;
+extern const GUID IID_ISimpleFrameSite;
+extern const GUID IID_IPersistStreamInit;
+extern const GUID IID_IPersistMemory;
+extern const GUID IID_IPersistPropertyBag;
+extern const GUID IID_IPropertyBag;
+extern const GUID IID_IErrorLog;
+extern const GUID IID_IPropertyFrame;
+extern const GUID IID_ISpecifyPropertyPages;
+extern const GUID IID_IPerPropertyBrowsing;
+extern const GUID IID_IPropertyPageSite;
+extern const GUID IID_IPropertyPage;
+extern const GUID IID_IPropertyPage2;
+extern const GUID CLSID_CFontPropPage;
+extern const GUID CLSID_CColorPropPage;
+extern const GUID CLSID_CPicturePropPage;
+extern const GUID CLSID_PersistPropset;
+extern const GUID CLSID_ConvertVBX;
+extern const GUID CLSID_StdFont;
+extern const GUID CLSID_StdPicture;
+extern const GUID IID_IFont;
+extern const GUID IID_IFontDisp;
+extern const GUID IID_IPicture;
+extern const GUID IID_IPictureDisp;
+extern const GUID GUID_HIMETRIC;
+extern const GUID GUID_COLOR;
+extern const GUID GUID_XPOSPIXEL;
+extern const GUID GUID_YPOSPIXEL;
+extern const GUID GUID_XSIZEPIXEL;
+extern const GUID GUID_YSIZEPIXEL;
+extern const GUID GUID_XPOS;
+extern const GUID GUID_YPOS;
+extern const GUID GUID_XSIZE;
+extern const GUID GUID_YSIZE;
+extern const GUID GUID_TRISTATE;
+extern const GUID GUID_OPTIONVALUEEXCLUSIVE;
+extern const GUID GUID_CHECKVALUEEXCLUSIVE;
+extern const GUID GUID_FONTNAME;
+extern const GUID GUID_FONTSIZE;
+extern const GUID GUID_FONTBOLD;
+extern const GUID GUID_FONTITALIC;
+extern const GUID GUID_FONTUNDERSCORE;
+extern const GUID GUID_FONTSTRIKETHROUGH;
+extern const GUID GUID_HANDLE;
+extern const GUID IID_IEnumUnknown;
+extern const GUID IID_IEnumString;
+extern const GUID IID_IEnumMoniker;
+extern const GUID IID_IEnumFORMATETC;
+extern const GUID IID_IEnumOLEVERB;
+extern const GUID IID_IEnumSTATDATA;
+extern const GUID IID_IEnumSTATSTG;
+extern const GUID IID_IEnumGeneric;
+extern const GUID IID_IEnumHolder;
+extern const GUID IID_IEnumCallback;
+extern const GUID IID_IPersistStream;
+extern const GUID IID_IPersistStorage;
+extern const GUID IID_IPersistFile;
+extern const GUID IID_IPersist;
+extern const GUID IID_IViewObject;
+extern const GUID IID_IDataObject;
+extern const GUID IID_IAdviseSink;
+extern const GUID IID_IDataAdviseHolder;
+extern const GUID IID_IOleAdviseHolder;
+extern const GUID IID_IOleObject;
+extern const GUID IID_IOleInPlaceObject;
+extern const GUID IID_IOleWindow;
+extern const GUID IID_IOleInPlaceUIWindow;
+extern const GUID IID_IOleInPlaceFrame;
+extern const GUID IID_IOleInPlaceActiveObject;
+extern const GUID IID_IOleClientSite;
+extern const GUID IID_IOleInPlaceSite;
+extern const GUID IID_IParseDisplayName;
+extern const GUID IID_IOleContainer;
+extern const GUID IID_IOleItemContainer;
+extern const GUID IID_IOleLink;
+extern const GUID IID_IOleCache;
+extern const GUID IID_IOleManager;
+extern const GUID IID_IOlePresObj;
+extern const GUID IID_IDropSource;
+extern const GUID IID_IDropTarget;
+extern const GUID IID_IDebug;
+extern const GUID IID_IDebugStream;
+extern const GUID IID_IAdviseSink2;
+extern const GUID IID_IRunnableObject;
+extern const GUID IID_IViewObject2;
+extern const GUID IID_IOleCache2;
+extern const GUID IID_IOleCacheControl;
+extern const GUID CLSID_Picture_Metafile;
+extern const GUID CLSID_Picture_Dib;
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/oledlg.h b/tcc/include/winapi/oledlg.h
new file mode 100644
index 0000000..27ed2ad
--- /dev/null
+++ b/tcc/include/winapi/oledlg.h
@@ -0,0 +1,935 @@
+#ifndef _OLEDLG_H
+#define _OLEDLG_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#include <windows.h>
+#include <shellapi.h>
+#include <commdlg.h>
+#include <ole2.h>
+#include <string.h>
+/* #include <tchar.h> */
+#include <dlgs.h>
+#include <prsht.h>
+#define PS_MAXLINKTYPES 8
+#define OLESTDDELIM TEXT("\\")
+#define SZOLEUI_MSG_HELP TEXT("OLEUI_MSG_HELP")
+#define SZOLEUI_MSG_ENDDIALOG TEXT("OLEUI_MSG_ENDDIALOG")
+#define SZOLEUI_MSG_BROWSE TEXT("OLEUI_MSG_BROWSE")
+#define SZOLEUI_MSG_CHANGEICON TEXT("OLEUI_MSG_CHANGEICON")
+#define SZOLEUI_MSG_CLOSEBUSYDIALOG TEXT("OLEUI_MSG_CLOSEBUSYDIALOG")
+#define SZOLEUI_MSG_CONVERT TEXT("OLEUI_MSG_CONVERT")
+#define SZOLEUI_MSG_CHANGESOURCE TEXT("OLEUI_MSG_CHANGESOURCE")
+#define SZOLEUI_MSG_ADDCONTROL TEXT("OLEUI_MSG_ADDCONTROL")
+#define SZOLEUI_MSG_BROWSE_OFN TEXT("OLEUI_MSG_BROWSE_OFN")
+#define PROP_HWND_CHGICONDLG TEXT("HWND_CIDLG")
+#define IDC_OLEUIHELP 99
+#define IDC_IO_CREATENEW 2100
+#define IDC_IO_CREATEFROMFILE 2101
+#define IDC_IO_LINKFILE 2102
+#define IDC_IO_OBJECTTYPELIST 2103
+#define IDC_IO_DISPLAYASICON 2104
+#define IDC_IO_CHANGEICON 2105
+#define IDC_IO_FILE 2106
+#define IDC_IO_FILEDISPLAY 2107
+#define IDC_IO_RESULTIMAGE 2108
+#define IDC_IO_RESULTTEXT 2109
+#define IDC_IO_ICONDISPLAY 2110
+#define IDC_IO_OBJECTTYPETEXT 2111
+#define IDC_IO_FILETEXT 2112
+#define IDC_IO_FILETYPE 2113
+#define IDC_IO_INSERTCONTROL 2114
+#define IDC_IO_ADDCONTROL 2115
+#define IDC_IO_CONTROLTYPELIST 2116
+#define IDC_PS_PASTE 500
+#define IDC_PS_PASTELINK 501
+#define IDC_PS_SOURCETEXT 502
+#define IDC_PS_PASTELIST 503
+#define IDC_PS_PASTELINKLIST 504
+#define IDC_PS_DISPLAYLIST 505
+#define IDC_PS_DISPLAYASICON 506
+#define IDC_PS_ICONDISPLAY 507
+#define IDC_PS_CHANGEICON 508
+#define IDC_PS_RESULTIMAGE 509
+#define IDC_PS_RESULTTEXT 510
+#define IDC_CI_GROUP 120
+#define IDC_CI_CURRENT 121
+#define IDC_CI_CURRENTICON 122
+#define IDC_CI_DEFAULT 123
+#define IDC_CI_DEFAULTICON 124
+#define IDC_CI_FROMFILE 125
+#define IDC_CI_FROMFILEEDIT 126
+#define IDC_CI_ICONLIST 127
+#define IDC_CI_LABEL 128
+#define IDC_CI_LABELEDIT 129
+#define IDC_CI_BROWSE 130
+#define IDC_CI_ICONDISPLAY 131
+#define IDC_CV_OBJECTTYPE 150
+#define IDC_CV_DISPLAYASICON 152
+#define IDC_CV_CHANGEICON 153
+#define IDC_CV_ACTIVATELIST 154
+#define IDC_CV_CONVERTTO 155
+#define IDC_CV_ACTIVATEAS 156
+#define IDC_CV_RESULTTEXT 157
+#define IDC_CV_CONVERTLIST 158
+#define IDC_CV_ICONDISPLAY 165
+#define IDC_EL_CHANGESOURCE 201
+#define IDC_EL_AUTOMATIC 202
+#define IDC_EL_CANCELLINK 209
+#define IDC_EL_UPDATENOW 210
+#define IDC_EL_OPENSOURCE 211
+#define IDC_EL_MANUAL 212
+#define IDC_EL_LINKSOURCE 216
+#define IDC_EL_LINKTYPE 217
+#define IDC_EL_LINKSLISTBOX 206
+#define IDC_EL_COL1 220
+#define IDC_EL_COL2 221
+#define IDC_EL_COL3 222
+#define IDC_BZ_RETRY 600
+#define IDC_BZ_ICON 601
+#define IDC_BZ_MESSAGE1 602
+#define IDC_BZ_SWITCHTO 604
+#define IDC_UL_METER 1029
+#define IDC_UL_STOP 1030
+#define IDC_UL_PERCENT 1031
+#define IDC_UL_PROGRESS 1032
+#define IDC_PU_LINKS 900
+#define IDC_PU_TEXT 901
+#define IDC_PU_CONVERT 902
+#define IDC_PU_ICON 908
+#define IDC_GP_OBJECTNAME 1009
+#define IDC_GP_OBJECTTYPE 1010
+#define IDC_GP_OBJECTSIZE 1011
+#define IDC_GP_CONVERT 1013
+#define IDC_GP_OBJECTICON 1014
+#define IDC_GP_OBJECTLOCATION 1022
+#define IDC_VP_PERCENT 1000
+#define IDC_VP_CHANGEICON 1001
+#define IDC_VP_EDITABLE 1002
+#define IDC_VP_ASICON 1003
+#define IDC_VP_RELATIVE 1005
+#define IDC_VP_SPIN 1006
+#define IDC_VP_SCALETXT 1034
+#define IDC_VP_ICONDISPLAY 1021
+#define IDC_VP_RESULTIMAGE 1033
+#define IDC_LP_OPENSOURCE 1006
+#define IDC_LP_UPDATENOW 1007
+#define IDC_LP_BREAKLINK 1008
+#define IDC_LP_LINKSOURCE 1012
+#define IDC_LP_CHANGESOURCE 1015
+#define IDC_LP_AUTOMATIC 1016
+#define IDC_LP_MANUAL 1017
+#define IDC_LP_DATE 1018
+#define IDC_LP_TIME 1019
+#define IDD_INSERTOBJECT 1000
+#define IDD_CHANGEICON 1001
+#define IDD_CONVERT 1002
+#define IDD_PASTESPECIAL 1003
+#define IDD_EDITLINKS 1004
+#define IDD_BUSY 1006
+#define IDD_UPDATELINKS 1007
+#define IDD_CHANGESOURCE 1009
+#define IDD_INSERTFILEBROWSE 1010
+#define IDD_CHANGEICONBROWSE 1011
+#define IDD_CONVERTONLY 1012
+#define IDD_CHANGESOURCE4 1013
+#define IDD_GNRLPROPS 1100
+#define IDD_VIEWPROPS 1101
+#define IDD_LINKPROPS 1102
+#define IDD_CANNOTUPDATELINK 1008
+#define IDD_LINKSOURCEUNAVAILABLE 1020
+#define IDD_SERVERNOTFOUND 1023
+#define IDD_OUTOFMEMORY 1024
+#define IDD_SERVERNOTREGW 1021
+#define IDD_LINKTYPECHANGEDW 1022
+#define IDD_SERVERNOTREGA 1025
+#define IDD_LINKTYPECHANGEDA 1026
+#define ID_BROWSE_CHANGEICON 1
+#define ID_BROWSE_INSERTFILE 2
+#define ID_BROWSE_ADDCONTROL 3
+#define ID_BROWSE_CHANGESOURCE 4
+#define OLEUI_FALSE 0
+#define OLEUI_SUCCESS 1
+#define OLEUI_OK 1
+#define OLEUI_CANCEL 2
+#define OLEUI_ERR_STANDARDMIN 100
+#define OLEUI_ERR_STRUCTURENULL 101
+#define OLEUI_ERR_STRUCTUREINVALID 102
+#define OLEUI_ERR_CBSTRUCTINCORRECT 103
+#define OLEUI_ERR_HWNDOWNERINVALID 104
+#define OLEUI_ERR_LPSZCAPTIONINVALID 105
+#define OLEUI_ERR_LPFNHOOKINVALID 106
+#define OLEUI_ERR_HINSTANCEINVALID 107
+#define OLEUI_ERR_LPSZTEMPLATEINVALID 108
+#define OLEUI_ERR_HRESOURCEINVALID 109
+#define OLEUI_ERR_FINDTEMPLATEFAILURE 110
+#define OLEUI_ERR_LOADTEMPLATEFAILURE 111
+#define OLEUI_ERR_DIALOGFAILURE 112
+#define OLEUI_ERR_LOCALMEMALLOC 113
+#define OLEUI_ERR_GLOBALMEMALLOC 114
+#define OLEUI_ERR_LOADSTRING 115
+#define OLEUI_ERR_OLEMEMALLOC 116
+#define OLEUI_ERR_STANDARDMAX 116
+#define OPF_OBJECTISLINK 1
+#define OPF_NOFILLDEFAULT 2
+#define OPF_SHOWHELP 4
+#define OPF_DISABLECONVERT 8
+#define OLEUI_OPERR_SUBPROPNULL OLEUI_ERR_STANDARDMAX
+#define OLEUI_OPERR_SUBPROPINVALID (OLEUI_ERR_STANDARDMAX+1)
+#define OLEUI_OPERR_PROPSHEETNULL (OLEUI_ERR_STANDARDMAX+2)
+#define OLEUI_OPERR_PROPSHEETINVALID (OLEUI_ERR_STANDARDMAX+3)
+#define OLEUI_OPERR_SUPPROP (OLEUI_ERR_STANDARDMAX+4)
+#define OLEUI_OPERR_PROPSINVALID (OLEUI_ERR_STANDARDMAX+5)
+#define OLEUI_OPERR_PAGESINCORRECT (OLEUI_ERR_STANDARDMAX+6)
+#define OLEUI_OPERR_INVALIDPAGES (OLEUI_ERR_STANDARDMAX+7)
+#define OLEUI_OPERR_NOTSUPPORTED (OLEUI_ERR_STANDARDMAX+8)
+#define OLEUI_OPERR_DLGPROCNOTNULL (OLEUI_ERR_STANDARDMAX+9)
+#define OLEUI_OPERR_LPARAMNOTZERO (OLEUI_ERR_STANDARDMAX+10)
+#define OLEUI_GPERR_STRINGINVALID (OLEUI_ERR_STANDARDMAX+11)
+#define OLEUI_GPERR_CLASSIDINVALID (OLEUI_ERR_STANDARDMAX+12)
+#define OLEUI_GPERR_LPCLSIDEXCLUDEINVALID (OLEUI_ERR_STANDARDMAX+13)
+#define OLEUI_GPERR_CBFORMATINVALID (OLEUI_ERR_STANDARDMAX+14)
+#define OLEUI_VPERR_METAPICTINVALID (OLEUI_ERR_STANDARDMAX+15)
+#define OLEUI_VPERR_DVASPECTINVALID (OLEUI_ERR_STANDARDMAX+16)
+#define OLEUI_LPERR_LINKCNTRNULL (OLEUI_ERR_STANDARDMAX+17)
+#define OLEUI_LPERR_LINKCNTRINVALID (OLEUI_ERR_STANDARDMAX+18)
+#define OLEUI_OPERR_PROPERTYSHEET (OLEUI_ERR_STANDARDMAX+19)
+#define OLEUI_OPERR_OBJINFOINVALID (OLEUI_ERR_STANDARDMAX+20)
+#define OLEUI_OPERR_LINKINFOINVALID (OLEUI_ERR_STANDARDMAX+21)
+#define OLEUI_QUERY_GETCLASSID 65280
+#define OLEUI_QUERY_LINKBROKEN 65281
+#define IOF_SHOWHELP 1
+#define IOF_SELECTCREATENEW 2
+#define IOF_SELECTCREATEFROMFILE 4
+#define IOF_CHECKLINK 8
+#define IOF_CHECKDISPLAYASICON 16
+#define IOF_CREATENEWOBJECT 32
+#define IOF_CREATEFILEOBJECT 64
+#define IOF_CREATELINKOBJECT 128
+#define IOF_DISABLELINK 256
+#define IOF_VERIFYSERVERSEXIST 512
+#define IOF_DISABLEDISPLAYASICON 1024
+#define IOF_HIDECHANGEICON 2048
+#define IOF_SHOWINSERTCONTROL 4096
+#define IOF_SELECTCREATECONTROL 8192
+#define OLEUI_IOERR_LPSZFILEINVALID OLEUI_ERR_STANDARDMAX
+#define OLEUI_IOERR_LPSZLABELINVALID (OLEUI_ERR_STANDARDMAX+1)
+#define OLEUI_IOERR_HICONINVALID (OLEUI_ERR_STANDARDMAX+2)
+#define OLEUI_IOERR_LPFORMATETCINVALID (OLEUI_ERR_STANDARDMAX+3)
+#define OLEUI_IOERR_PPVOBJINVALID (OLEUI_ERR_STANDARDMAX+4)
+#define OLEUI_IOERR_LPIOLECLIENTSITEINVALID (OLEUI_ERR_STANDARDMAX+5)
+#define OLEUI_IOERR_LPISTORAGEINVALID (OLEUI_ERR_STANDARDMAX+6)
+#define OLEUI_IOERR_SCODEHASERROR (OLEUI_ERR_STANDARDMAX+7)
+#define OLEUI_IOERR_LPCLSIDEXCLUDEINVALID (OLEUI_ERR_STANDARDMAX+8)
+#define OLEUI_IOERR_CCHFILEINVALID (OLEUI_ERR_STANDARDMAX+9)
+#define PSF_SHOWHELP 1
+#define PSF_SELECTPASTE 2
+#define PSF_SELECTPASTELINK 4
+#define PSF_CHECKDISPLAYASICON 8
+#define PSF_DISABLEDISPLAYASICON 16
+#define PSF_HIDECHANGEICON 32
+#define PSF_STAYONCLIPBOARDCHANGE 64
+#define PSF_NOREFRESHDATAOBJECT 128
+#define OLEUI_IOERR_SRCDATAOBJECTINVALID OLEUI_ERR_STANDARDMAX
+#define OLEUI_IOERR_ARRPASTEENTRIESINVALID (OLEUI_ERR_STANDARDMAX+1)
+#define OLEUI_IOERR_ARRLINKTYPESINVALID (OLEUI_ERR_STANDARDMAX+2)
+#define OLEUI_PSERR_CLIPBOARDCHANGED (OLEUI_ERR_STANDARDMAX+3)
+#define OLEUI_PSERR_GETCLIPBOARDFAILED (OLEUI_ERR_STANDARDMAX+4)
+#define OLEUI_ELERR_LINKCNTRNULL OLEUI_ERR_STANDARDMAX
+#define OLEUI_ELERR_LINKCNTRINVALID (OLEUI_ERR_STANDARDMAX+1)
+#define ELF_SHOWHELP 1
+#define ELF_DISABLEUPDATENOW 2
+#define ELF_DISABLEOPENSOURCE 4
+#define ELF_DISABLECHANGESOURCE 8
+#define ELF_DISABLECANCELLINK 16
+#define CIF_SHOWHELP 1
+#define CIF_SELECTCURRENT 2
+#define CIF_SELECTDEFAULT 4
+#define CIF_SELECTFROMFILE 8
+#define CIF_USEICONEXE 16
+#define OLEUI_CIERR_MUSTHAVECLSID OLEUI_ERR_STANDARDMAX
+#define OLEUI_CIERR_MUSTHAVECURRENTMETAFILE (OLEUI_ERR_STANDARDMAX+1)
+#define OLEUI_CIERR_SZICONEXEINVALID (OLEUI_ERR_STANDARDMAX+2)
+#define CF_SHOWHELPBUTTON 1
+#define CF_SETCONVERTDEFAULT 2
+#define CF_SETACTIVATEDEFAULT 4
+#define CF_SELECTCONVERTTO 8
+#define CF_SELECTACTIVATEAS 16
+#define CF_DISABLEDISPLAYASICON 32
+#define CF_DISABLEACTIVATEAS 64
+#define CF_HIDECHANGEICON 128
+#define CF_CONVERTONLY 256
+#define OLEUI_CTERR_CLASSIDINVALID (OLEUI_ERR_STANDARDMAX+1)
+#define OLEUI_CTERR_DVASPECTINVALID (OLEUI_ERR_STANDARDMAX+2)
+#define OLEUI_CTERR_CBFORMATINVALID (OLEUI_ERR_STANDARDMAX+3)
+#define OLEUI_CTERR_HMETAPICTINVALID (OLEUI_ERR_STANDARDMAX+4)
+#define OLEUI_CTERR_STRINGINVALID (OLEUI_ERR_STANDARDMAX+5)
+#define BZ_DISABLECANCELBUTTON 1
+#define BZ_DISABLESWITCHTOBUTTON 2
+#define BZ_DISABLERETRYBUTTON 4
+#define BZ_NOTRESPONDINGDIALOG 8
+#define OLEUI_BZERR_HTASKINVALID OLEUI_ERR_STANDARDMAX
+#define OLEUI_BZ_SWITCHTOSELECTED (OLEUI_ERR_STANDARDMAX+1)
+#define OLEUI_BZ_RETRYSELECTED (OLEUI_ERR_STANDARDMAX+2)
+#define OLEUI_BZ_CALLUNBLOCKED (OLEUI_ERR_STANDARDMAX+3)
+#define CSF_SHOWHELP 1
+#define CSF_VALIDSOURCE 2
+#define CSF_ONLYGETSOURCE 4
+#define CSF_EXPLORER 8
+#define OLEUI_CSERR_LINKCNTRNULL OLEUI_ERR_STANDARDMAX
+#define OLEUI_CSERR_LINKCNTRINVALID (OLEUI_ERR_STANDARDMAX+1)
+#define OLEUI_CSERR_FROMNOTNULL (OLEUI_ERR_STANDARDMAX+2)
+#define OLEUI_CSERR_TONOTNULL (OLEUI_ERR_STANDARDMAX+3)
+#define OLEUI_CSERR_SOURCENULL (OLEUI_ERR_STANDARDMAX+4)
+#define OLEUI_CSERR_SOURCEINVALID (OLEUI_ERR_STANDARDMAX+5)
+#define OLEUI_CSERR_SOURCEPARSERROR (OLEUI_ERR_STANDARDMAX+6)
+#define OLEUI_CSERR_SOURCEPARSEERROR (OLEUI_ERR_STANDARDMAX+7)
+#define VPF_SELECTRELATIVE 1
+#define VPF_DISABLERELATIVE 2
+#define VPF_DISABLESCALE 4
+
+#ifndef RC_INVOKED
+#pragma pack(push, 8)
+typedef UINT (CALLBACK *LPFNOLEUIHOOK)(HWND, UINT, WPARAM, LPARAM);
+typedef struct tagOLEUIINSERTOBJECTW {
+ DWORD cbStruct;
+ DWORD dwFlags;
+ HWND hWndOwner;
+ LPCWSTR lpszCaption;
+ LPFNOLEUIHOOK lpfnHook;
+ LPARAM lCustData;
+ HINSTANCE hInstance;
+ LPCWSTR lpszTemplate;
+ HRSRC hResource;
+ CLSID clsid;
+ LPWSTR lpszFile;
+ UINT cchFile;
+ UINT cClsidExclude;
+ LPCLSID lpClsidExclude;
+ IID iid;
+ DWORD oleRender;
+ LPFORMATETC lpFormatEtc;
+ LPOLECLIENTSITE lpIOleClientSite;
+ LPSTORAGE lpIStorage;
+ PVOID *ppvObj;
+ SCODE sc;
+ HGLOBAL hMetaPict;
+} OLEUIINSERTOBJECTW,*POLEUIINSERTOBJECTW,*LPOLEUIINSERTOBJECTW;
+typedef struct tagOLEUIINSERTOBJECTA {
+ DWORD cbStruct;
+ DWORD dwFlags;
+ HWND hWndOwner;
+ LPCSTR lpszCaption;
+ LPFNOLEUIHOOK lpfnHook;
+ LPARAM lCustData;
+ HINSTANCE hInstance;
+ LPCSTR lpszTemplate;
+ HRSRC hResource;
+ CLSID clsid;
+ LPSTR lpszFile;
+ UINT cchFile;
+ UINT cClsidExclude;
+ LPCLSID lpClsidExclude;
+ IID iid;
+ DWORD oleRender;
+ LPFORMATETC lpFormatEtc;
+ LPOLECLIENTSITE lpIOleClientSite;
+ LPSTORAGE lpIStorage;
+ PVOID *ppvObj;
+ SCODE sc;
+ HGLOBAL hMetaPict;
+} OLEUIINSERTOBJECTA,*POLEUIINSERTOBJECTA,*LPOLEUIINSERTOBJECTA;
+STDAPI_(UINT) OleUIInsertObjectW(LPOLEUIINSERTOBJECTW);
+STDAPI_(UINT) OleUIInsertObjectA(LPOLEUIINSERTOBJECTA);
+typedef enum tagOLEUIPASTEFLAG {
+ OLEUIPASTE_PASTEONLY,
+ OLEUIPASTE_LINKTYPE1,
+ OLEUIPASTE_LINKTYPE2,
+ OLEUIPASTE_LINKTYPE3=4,
+ OLEUIPASTE_LINKTYPE4=8,
+ OLEUIPASTE_LINKTYPE5=16,
+ OLEUIPASTE_LINKTYPE6=32,
+ OLEUIPASTE_LINKTYPE7=64,
+ OLEUIPASTE_LINKTYPE8=128,
+ OLEUIPASTE_PASTE=512,
+ OLEUIPASTE_LINKANYTYPE=1024,
+ OLEUIPASTE_ENABLEICON=2048
+} OLEUIPASTEFLAG;
+typedef struct tagOLEUIPASTEENTRYW {
+ FORMATETC fmtetc;
+ LPCWSTR lpstrFormatName;
+ LPCWSTR lpstrResultText;
+ DWORD dwFlags;
+ DWORD dwScratchSpace;
+} OLEUIPASTEENTRYW,*POLEUIPASTEENTRYW,*LPOLEUIPASTEENTRYW;
+typedef struct tagOLEUIPASTEENTRYA {
+ FORMATETC fmtetc;
+ LPCSTR lpstrFormatName;
+ LPCSTR lpstrResultText;
+ DWORD dwFlags;
+ DWORD dwScratchSpace;
+} OLEUIPASTEENTRYA,*POLEUIPASTEENTRYA,*LPOLEUIPASTEENTRYA;
+typedef struct tagOLEUIPASTESPECIALW {
+ DWORD cbStruct;
+ DWORD dwFlags;
+ HWND hWndOwner;
+ LPCWSTR lpszCaption;
+ LPFNOLEUIHOOK lpfnHook;
+ LPARAM lCustData;
+ HINSTANCE hInstance;
+ LPCWSTR lpszTemplate;
+ HRSRC hResource;
+ LPDATAOBJECT lpSrcDataObj;
+ LPOLEUIPASTEENTRYW arrPasteEntries;
+ int cPasteEntries;
+ UINT *arrLinkTypes;
+ int cLinkTypes;
+ UINT cClsidExclude;
+ LPCLSID lpClsidExclude;
+ int nSelectedIndex;
+ BOOL fLink;
+ HGLOBAL hMetaPict;
+ SIZEL sizel;
+} OLEUIPASTESPECIALW,*POLEUIPASTESPECIALW,*LPOLEUIPASTESPECIALW;
+typedef struct tagOLEUIPASTESPECIALA {
+ DWORD cbStruct;
+ DWORD dwFlags;
+ HWND hWndOwner;
+ LPCSTR lpszCaption;
+ LPFNOLEUIHOOK lpfnHook;
+ LPARAM lCustData;
+ HINSTANCE hInstance;
+ LPCSTR lpszTemplate;
+ HRSRC hResource;
+ LPDATAOBJECT lpSrcDataObj;
+ LPOLEUIPASTEENTRYA arrPasteEntries;
+ int cPasteEntries;
+ UINT *arrLinkTypes;
+ int cLinkTypes;
+ UINT cClsidExclude;
+ LPCLSID lpClsidExclude;
+ int nSelectedIndex;
+ BOOL fLink;
+ HGLOBAL hMetaPict;
+ SIZEL sizel;
+} OLEUIPASTESPECIALA,*POLEUIPASTESPECIALA,*LPOLEUIPASTESPECIALA;
+#define INTERFACE IOleUILinkContainerW
+DECLARE_INTERFACE_(IOleUILinkContainerW, IUnknown)
+{
+ STDMETHOD(QueryInterface) (THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+ STDMETHOD_(DWORD,GetNextLink) (THIS_ DWORD dwLink) PURE;
+ STDMETHOD(SetLinkUpdateOptions) (THIS_ DWORD,DWORD) PURE;
+ STDMETHOD(GetLinkUpdateOptions) (THIS_ DWORD,PDWORD) PURE;
+ STDMETHOD(SetLinkSource) (THIS_ DWORD, LPWSTR,ULONG,PULONG,BOOL) PURE;
+ STDMETHOD(GetLinkSource) (THIS_ DWORD,LPWSTR*,PULONG,LPWSTR*,LPWSTR*,BOOL*,BOOL*) PURE;
+ STDMETHOD(OpenLinkSource) (THIS_ DWORD) PURE;
+ STDMETHOD(UpdateLink) (THIS_ DWORD,BOOL,BOOL) PURE;
+ STDMETHOD(CancelLink) (THIS_ DWORD) PURE;
+};
+#undef INTERFACE
+typedef IOleUILinkContainerW *LPOLEUILINKCONTAINERW;
+#define INTERFACE IOleUILinkContainerA
+DECLARE_INTERFACE_(IOleUILinkContainerA, IUnknown)
+{
+ STDMETHOD(QueryInterface) (THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+ STDMETHOD_(DWORD,GetNextLink) (THIS_ DWORD) PURE;
+ STDMETHOD(SetLinkUpdateOptions) (THIS_ DWORD,DWORD) PURE;
+ STDMETHOD(GetLinkUpdateOptions) (THIS_ DWORD,PDWORD) PURE;
+ STDMETHOD(SetLinkSource) (THIS_ DWORD, LPSTR,ULONG,PULONG,BOOL) PURE;
+ STDMETHOD(GetLinkSource) (THIS_ DWORD,LPSTR*,PULONG,LPSTR*,LPSTR*,BOOL*,BOOL*) PURE;
+ STDMETHOD(OpenLinkSource) (THIS_ DWORD) PURE;
+ STDMETHOD(UpdateLink) (THIS_ DWORD,BOOL,BOOL) PURE;
+ STDMETHOD(CancelLink) (THIS_ DWORD) PURE;
+};
+#undef INTERFACE
+typedef IOleUILinkContainerA *LPOLEUILINKCONTAINERA;
+typedef struct tagOLEUIEDITLINKSW {
+ DWORD cbStruct;
+ DWORD dwFlags;
+ HWND hWndOwner;
+ LPCWSTR lpszCaption;
+ LPFNOLEUIHOOK lpfnHook;
+ LPARAM lCustData;
+ HINSTANCE hInstance;
+ LPCWSTR lpszTemplate;
+ HRSRC hResource;
+ LPOLEUILINKCONTAINERW lpOleUILinkContainer;
+} OLEUIEDITLINKSW,*POLEUIEDITLINKSW,*LPOLEUIEDITLINKSW;
+typedef struct tagOLEUIEDITLINKSA {
+ DWORD cbStruct;
+ DWORD dwFlags;
+ HWND hWndOwner;
+ LPCSTR lpszCaption;
+ LPFNOLEUIHOOK lpfnHook;
+ LPARAM lCustData;
+ HINSTANCE hInstance;
+ LPCSTR lpszTemplate;
+ HRSRC hResource;
+ LPOLEUILINKCONTAINERA lpOleUILinkContainer;
+} OLEUIEDITLINKSA,*POLEUIEDITLINKSA,*LPOLEUIEDITLINKSA;
+typedef struct tagOLEUICHANGEICONW {
+ DWORD cbStruct;
+ DWORD dwFlags;
+ HWND hWndOwner;
+ LPCWSTR lpszCaption;
+ LPFNOLEUIHOOK lpfnHook;
+ LPARAM lCustData;
+ HINSTANCE hInstance;
+ LPCWSTR lpszTemplate;
+ HRSRC hResource;
+ HGLOBAL hMetaPict;
+ CLSID clsid;
+ WCHAR szIconExe[MAX_PATH];
+ int cchIconExe;
+} OLEUICHANGEICONW,*POLEUICHANGEICONW,*LPOLEUICHANGEICONW;
+typedef struct tagOLEUICHANGEICONA {
+ DWORD cbStruct;
+ DWORD dwFlags;
+ HWND hWndOwner;
+ LPCSTR lpszCaption;
+ LPFNOLEUIHOOK lpfnHook;
+ LPARAM lCustData;
+ HINSTANCE hInstance;
+ LPCSTR lpszTemplate;
+ HRSRC hResource;
+ HGLOBAL hMetaPict;
+ CLSID clsid;
+ CHAR szIconExe[MAX_PATH];
+ int cchIconExe;
+} OLEUICHANGEICONA,*POLEUICHANGEICONA,*LPOLEUICHANGEICONA;
+typedef struct tagOLEUICONVERTW {
+ DWORD cbStruct;
+ DWORD dwFlags;
+ HWND hWndOwner;
+ LPCWSTR lpszCaption;
+ LPFNOLEUIHOOK lpfnHook;
+ LPARAM lCustData;
+ HINSTANCE hInstance;
+ LPCWSTR lpszTemplate;
+ HRSRC hResource;
+ CLSID clsid;
+ CLSID clsidConvertDefault;
+ CLSID clsidActivateDefault;
+ CLSID clsidNew;
+ DWORD dvAspect;
+ WORD wFormat;
+ BOOL fIsLinkedObject;
+ HGLOBAL hMetaPict;
+ LPWSTR lpszUserType;
+ BOOL fObjectsIconChanged;
+ LPWSTR lpszDefLabel;
+ UINT cClsidExclude;
+ LPCLSID lpClsidExclude;
+} OLEUICONVERTW,*POLEUICONVERTW,*LPOLEUICONVERTW;
+typedef struct tagOLEUICONVERTA {
+ DWORD cbStruct;
+ DWORD dwFlags;
+ HWND hWndOwner;
+ LPCSTR lpszCaption;
+ LPFNOLEUIHOOK lpfnHook;
+ LPARAM lCustData;
+ HINSTANCE hInstance;
+ LPCSTR lpszTemplate;
+ HRSRC hResource;
+ CLSID clsid;
+ CLSID clsidConvertDefault;
+ CLSID clsidActivateDefault;
+ CLSID clsidNew;
+ DWORD dvAspect;
+ WORD wFormat;
+ BOOL fIsLinkedObject;
+ HGLOBAL hMetaPict;
+ LPSTR lpszUserType;
+ BOOL fObjectsIconChanged;
+ LPSTR lpszDefLabel;
+ UINT cClsidExclude;
+ LPCLSID lpClsidExclude;
+} OLEUICONVERTA,*POLEUICONVERTA,*LPOLEUICONVERTA;
+typedef struct tagOLEUIBUSYW {
+ DWORD cbStruct;
+ DWORD dwFlags;
+ HWND hWndOwner;
+ LPCWSTR lpszCaption;
+ LPFNOLEUIHOOK lpfnHook;
+ LPARAM lCustData;
+ HINSTANCE hInstance;
+ LPCWSTR lpszTemplate;
+ HRSRC hResource;
+ HTASK hTask;
+ HWND *lphWndDialog;
+} OLEUIBUSYW,*POLEUIBUSYW,*LPOLEUIBUSYW;
+typedef struct tagOLEUIBUSYA {
+ DWORD cbStruct;
+ DWORD dwFlags;
+ HWND hWndOwner;
+ LPCSTR lpszCaption;
+ LPFNOLEUIHOOK lpfnHook;
+ LPARAM lCustData;
+ HINSTANCE hInstance;
+ LPCSTR lpszTemplate;
+ HRSRC hResource;
+ HTASK hTask;
+ HWND *lphWndDialog;
+} OLEUIBUSYA,*POLEUIBUSYA,*LPOLEUIBUSYA;
+typedef struct tagOLEUICHANGESOURCEW {
+ DWORD cbStruct;
+ DWORD dwFlags;
+ HWND hWndOwner;
+ LPCWSTR lpszCaption;
+ LPFNOLEUIHOOK lpfnHook;
+ LPARAM lCustData;
+ HINSTANCE hInstance;
+ LPCWSTR lpszTemplate;
+ HRSRC hResource;
+ OPENFILENAMEW* lpOFN;
+ DWORD dwReserved1[4];
+ LPOLEUILINKCONTAINERW lpOleUILinkContainer;
+ DWORD dwLink;
+ LPWSTR lpszDisplayName;
+ ULONG nFileLength;
+ LPWSTR lpszFrom;
+ LPWSTR lpszTo;
+} OLEUICHANGESOURCEW,*POLEUICHANGESOURCEW,*LPOLEUICHANGESOURCEW;
+typedef struct tagOLEUICHANGESOURCEA {
+ DWORD cbStruct;
+ DWORD dwFlags;
+ HWND hWndOwner;
+ LPCSTR lpszCaption;
+ LPFNOLEUIHOOK lpfnHook;
+ LPARAM lCustData;
+ HINSTANCE hInstance;
+ LPCSTR lpszTemplate;
+ HRSRC hResource;
+ OPENFILENAMEA *lpOFN;
+ DWORD dwReserved1[4];
+ LPOLEUILINKCONTAINERA lpOleUILinkContainer;
+ DWORD dwLink;
+ LPSTR lpszDisplayName;
+ ULONG nFileLength;
+ LPSTR lpszFrom;
+ LPSTR lpszTo;
+} OLEUICHANGESOURCEA,*POLEUICHANGESOURCEA,*LPOLEUICHANGESOURCEA;
+#define INTERFACE IOleUIObjInfoW
+DECLARE_INTERFACE_(IOleUIObjInfoW, IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetObjectInfo)(THIS_ DWORD,PDWORD,LPWSTR*,LPWSTR*,LPWSTR*,LPWSTR*) PURE;
+ STDMETHOD(GetConvertInfo)(THIS_ DWORD,CLSID*,PWORD,CLSID*,LPCLSID*,UINT*) PURE;
+ STDMETHOD(ConvertObject)(THIS_ DWORD,REFCLSID) PURE;
+ STDMETHOD(GetViewInfo)(THIS_ DWORD,HGLOBAL*,PDWORD,int*) PURE;
+ STDMETHOD(SetViewInfo)(THIS_ DWORD,HGLOBAL,DWORD,int,BOOL) PURE;
+};
+#undef INTERFACE
+typedef IOleUIObjInfoW *LPOLEUIOBJINFOW;
+#define INTERFACE IOleUIObjInfoA
+DECLARE_INTERFACE_(IOleUIObjInfoA, IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetObjectInfo)(THIS_ DWORD,PDWORD,LPSTR*,LPSTR*,LPSTR*,LPSTR*) PURE;
+ STDMETHOD(GetConvertInfo)(THIS_ DWORD,CLSID*,PWORD,CLSID*,LPCLSID*,UINT*) PURE;
+ STDMETHOD(ConvertObject)(THIS_ DWORD,REFCLSID) PURE;
+ STDMETHOD(GetViewInfo)(THIS_ DWORD,HGLOBAL*,PDWORD,int*) PURE;
+ STDMETHOD(SetViewInfo)(THIS_ DWORD,HGLOBAL,DWORD,int,BOOL) PURE;
+};
+#undef INTERFACE
+typedef IOleUIObjInfoA *LPOLEUIOBJINFOA;
+#define INTERFACE IOleUILinkInfoW
+DECLARE_INTERFACE_(IOleUILinkInfoW, IOleUILinkContainerW)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD_(DWORD,GetNextLink)(THIS_ DWORD) PURE;
+ STDMETHOD(SetLinkUpdateOptions)(THIS_ DWORD,DWORD) PURE;
+ STDMETHOD(GetLinkUpdateOptions)(THIS_ DWORD,DWORD*) PURE;
+ STDMETHOD(SetLinkSource)(THIS_ DWORD,LPWSTR,ULONG,PULONG,BOOL) PURE;
+ STDMETHOD(GetLinkSource)(THIS_ DWORD,LPWSTR*,PULONG,LPWSTR*,LPWSTR*,BOOL*,BOOL*) PURE;
+ STDMETHOD(OpenLinkSource)(THIS_ DWORD) PURE;
+ STDMETHOD(UpdateLink)(THIS_ DWORD,BOOL,BOOL) PURE;
+ STDMETHOD(CancelLink)(THIS_ DWORD) PURE;
+ STDMETHOD(GetLastUpdate)(THIS_ DWORD,FILETIME*) PURE;
+};
+#undef INTERFACE
+typedef IOleUILinkInfoW *LPOLEUILINKINFOW;
+#define INTERFACE IOleUILinkInfoA
+DECLARE_INTERFACE_(IOleUILinkInfoA, IOleUILinkContainerA)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD_(DWORD,GetNextLink)(THIS_ DWORD) PURE;
+ STDMETHOD(SetLinkUpdateOptions)(THIS_ DWORD,DWORD) PURE;
+ STDMETHOD(GetLinkUpdateOptions)(THIS_ DWORD,DWORD*) PURE;
+ STDMETHOD(SetLinkSource)(THIS_ DWORD,LPSTR,ULONG,PULONG,BOOL) PURE;
+ STDMETHOD(GetLinkSource)(THIS_ DWORD,LPSTR*,PULONG,LPSTR*,LPSTR*,BOOL*,BOOL*) PURE;
+ STDMETHOD(OpenLinkSource)(THIS_ DWORD) PURE;
+ STDMETHOD(UpdateLink)(THIS_ DWORD,BOOL,BOOL) PURE;
+ STDMETHOD(CancelLink)(THIS_ DWORD) PURE;
+ STDMETHOD(GetLastUpdate)(THIS_ DWORD,FILETIME*) PURE;
+};
+#undef INTERFACE
+typedef IOleUILinkInfoA* LPOLEUILINKINFOA;
+struct tagOLEUIOBJECTPROPSW;
+struct tagOLEUIOBJECTPROPSA;
+typedef struct tagOLEUIGNRLPROPSW {
+ DWORD cbStruct;
+ DWORD dwFlags;
+ DWORD dwReserved1[2];
+ LPFNOLEUIHOOK lpfnHook;
+ LPARAM lCustData;
+ DWORD dwReserved2[3];
+ struct tagOLEUIOBJECTPROPSW* lpOP;
+} OLEUIGNRLPROPSW,*POLEUIGNRLPROPSW,*LPOLEUIGNRLPROPSW;
+typedef struct tagOLEUIGNRLPROPSA {
+ DWORD cbStruct;
+ DWORD dwFlags;
+ DWORD dwReserved1[2];
+ LPFNOLEUIHOOK lpfnHook;
+ LPARAM lCustData;
+ DWORD dwReserved2[3];
+ struct tagOLEUIOBJECTPROPSA* lpOP;
+} OLEUIGNRLPROPSA,*POLEUIGNRLPROPSA,*LPOLEUIGNRLPROPSA;
+typedef struct tagOLEUIVIEWPROPSW {
+ DWORD cbStruct;
+ DWORD dwFlags;
+ DWORD dwReserved1[2];
+ LPFNOLEUIHOOK lpfnHook;
+ LPARAM lCustData;
+ DWORD dwReserved2[3];
+ struct tagOLEUIOBJECTPROPSW* lpOP;
+ int nScaleMin;
+ int nScaleMax;
+} OLEUIVIEWPROPSW,*POLEUIVIEWPROPSW,*LPOLEUIVIEWPROPSW;
+typedef struct tagOLEUIVIEWPROPSA {
+ DWORD cbStruct;
+ DWORD dwFlags;
+ DWORD dwReserved1[2];
+ LPFNOLEUIHOOK lpfnHook;
+ LPARAM lCustData;
+ DWORD dwReserved2[3];
+ struct tagOLEUIOBJECTPROPSA *lpOP;
+ int nScaleMin;
+ int nScaleMax;
+} OLEUIVIEWPROPSA,*POLEUIVIEWPROPSA,*LPOLEUIVIEWPROPSA;
+typedef struct tagOLEUILINKPROPSW {
+ DWORD cbStruct;
+ DWORD dwFlags;
+ DWORD dwReserved1[2];
+ LPFNOLEUIHOOK lpfnHook;
+ LPARAM lCustData;
+ DWORD dwReserved2[3];
+ struct tagOLEUIOBJECTPROPSW *lpOP;
+} OLEUILINKPROPSW, *POLEUILINKPROPSW,* LPOLEUILINKPROPSW;
+typedef struct tagOLEUILINKPROPSA {
+ DWORD cbStruct;
+ DWORD dwFlags;
+ DWORD dwReserved1[2];
+ LPFNOLEUIHOOK lpfnHook;
+ LPARAM lCustData;
+ DWORD dwReserved2[3];
+ struct tagOLEUIOBJECTPROPSA* lpOP;
+} OLEUILINKPROPSA,*POLEUILINKPROPSA,*LPOLEUILINKPROPSA;
+typedef struct tagOLEUIOBJECTPROPSW {
+ DWORD cbStruct;
+ DWORD dwFlags;
+ LPPROPSHEETHEADERW lpPS;
+ DWORD dwObject;
+ LPOLEUIOBJINFOW lpObjInfo;
+ DWORD dwLink;
+ LPOLEUILINKINFOW lpLinkInfo;
+ LPOLEUIGNRLPROPSW lpGP;
+ LPOLEUIVIEWPROPSW lpVP;
+ LPOLEUILINKPROPSW lpLP;
+} OLEUIOBJECTPROPSW,*POLEUIOBJECTPROPSW,*LPOLEUIOBJECTPROPSW;
+typedef struct tagOLEUIOBJECTPROPSA {
+ DWORD cbStruct;
+ DWORD dwFlags;
+ LPPROPSHEETHEADERA lpPS;
+ DWORD dwObject;
+ LPOLEUIOBJINFOA lpObjInfo;
+ DWORD dwLink;
+ LPOLEUILINKINFOA lpLinkInfo;
+ LPOLEUIGNRLPROPSA lpGP;
+ LPOLEUIVIEWPROPSA lpVP;
+ LPOLEUILINKPROPSA lpLP;
+} OLEUIOBJECTPROPSA,*POLEUIOBJECTPROPSA,*LPOLEUIOBJECTPROPSA;
+
+STDAPI_(BOOL) OleUIAddVerbMenuW(LPOLEOBJECT,LPCWSTR,HMENU,UINT,UINT,UINT,BOOL,UINT,HMENU*);
+STDAPI_(BOOL) OleUIAddVerbMenuA(LPOLEOBJECT,LPCSTR,HMENU,UINT,UINT,UINT,BOOL,UINT,HMENU*);
+STDAPI_(UINT) OleUIBusyW(LPOLEUIBUSYW);
+STDAPI_(UINT) OleUIBusyA(LPOLEUIBUSYA);
+STDAPI_(BOOL) OleUICanConvertOrActivateAs(REFCLSID,BOOL,WORD);
+STDAPI_(UINT) OleUIChangeIconW(LPOLEUICHANGEICONW);
+STDAPI_(UINT) OleUIChangeIconA(LPOLEUICHANGEICONA);
+STDAPI_(UINT) OleUIChangeSourceW(LPOLEUICHANGESOURCEW);
+STDAPI_(UINT) OleUIChangeSourceA(LPOLEUICHANGESOURCEA);
+STDAPI_(UINT) OleUIConvertW(LPOLEUICONVERTW);
+STDAPI_(UINT) OleUIConvertA(LPOLEUICONVERTA);
+STDAPI_(UINT) OleUIEditLinksW(LPOLEUIEDITLINKSW);
+STDAPI_(UINT) OleUIEditLinksA(LPOLEUIEDITLINKSA);
+STDAPI_(UINT) OleUIObjectPropertiesW(LPOLEUIOBJECTPROPSW);
+STDAPI_(UINT) OleUIObjectPropertiesA(LPOLEUIOBJECTPROPSA);
+STDAPI_(UINT) OleUIPasteSpecialW(LPOLEUIPASTESPECIALW);
+STDAPI_(UINT) OleUIPasteSpecialA(LPOLEUIPASTESPECIALA);
+int OleUIPromptUserW(int,HWND,...);
+int OleUIPromptUserA(int,HWND,...);
+STDAPI_(BOOL) OleUIUpdateLinksW(LPOLEUILINKCONTAINERW,HWND,LPWSTR,int);
+STDAPI_(BOOL) OleUIUpdateLinksA(LPOLEUILINKCONTAINERA,HWND,LPSTR,int);
+
+#ifdef UNICODE
+#define IDD_SERVERNOTREG IDD_SERVERNOTREGW
+#define IDD_LINKTYPECHANGED IDD_LINKTYPECHANGEDW
+#define OleUIUpdateLinks OleUIUpdateLinksW
+#define OleUIAddVerbMenu OleUIAddVerbMenuW
+#define tagOLEUIOBJECTPROPS tagOLEUIOBJECTPROPSW
+#define OLEUIOBJECTPROPS OLEUIOBJECTPROPSW
+#define POLEUIOBJECTPROPS POLEUIOBJECTPROPSW
+#define LPOLEUIOBJECTPROPS LPOLEUIOBJECTPROPSW
+#define OleUIObjectProperties OleUIObjectPropertiesW
+#define tagOLEUIINSERTOBJECT tagOLEUIINSERTOBJECTW
+#define OLEUIINSERTOBJECT OLEUIINSERTOBJECTW
+#define POLEUIINSERTOBJECT POLEUIINSERTOBJECTW
+#define LPOLEUIINSERTOBJECT LPOLEUIINSERTOBJECTW
+#define OleUIInsertObject OleUIInsertObjectW
+#define OleUIPromptUser OleUIPromptUserW
+#define tagOLEUIPASTEENTRY tagOLEUIPASTEENTRYW
+#define OLEUIPASTEENTRY OLEUIPASTEENTRYW
+#define POLEUIPASTEENTRY POLEUIPASTEENTRYW
+#define LPOLEUIPASTEENTRY LPOLEUIPASTEENTRYW
+#define tagOLEUIPASTESPECIAL tagOLEUIPASTESPECIALW
+#define OLEUIPASTESPECIAL OLEUIPASTESPECIALW
+#define POLEUIPASTESPECIAL POLEUIPASTESPECIALW
+#define LPOLEUIPASTESPECIAL LPOLEUIPASTESPECIALW
+#define OleUIPasteSpecial OleUIPasteSpecialW
+#define IOleUILinkContainer IOleUILinkContainerW
+#define LPOLEUILINKCONTAINER LPOLEUILINKCONTAINERW
+#define tagOLEUIEDITLINKS tagOLEUIEDITLINKSW
+#define OLEUIEDITLINKS OLEUIEDITLINKSW
+#define POLEUIEDITLINKS POLEUIEDITLINKSW
+#define LPOLEUIEDITLINKS LPOLEUIEDITLINKSW
+#define OleUIEditLinks OleUIEditLinksW
+#define tagOLEUICHANGEICON tagOLEUICHANGEICONW
+#define OLEUICHANGEICON OLEUICHANGEICONW
+#define POLEUICHANGEICON POLEUICHANGEICONW
+#define LPOLEUICHANGEICON LPOLEUICHANGEICONW
+#define OleUIChangeIcon OleUIChangeIconW
+#define tagOLEUICONVERT tagOLEUICONVERTW
+#define OLEUICONVERT OLEUICONVERTW
+#define POLEUICONVERT POLEUICONVERTW
+#define LPOLEUICONVERT LPOLEUICONVERTW
+#define OleUIConvert OleUIConvertW
+#define tagOLEUIBUSY tagOLEUIBUSYW
+#define OLEUIBUSY OLEUIBUSYW
+#define POLEUIBUSY POLEUIBUSYW
+#define LPOLEUIBUSY LPOLEUIBUSYW
+#define OleUIBusy OleUIBusyW
+#define tagOLEUICHANGESOURCE tagOLEUICHANGESOURCEW
+#define OLEUICHANGESOURCE OLEUICHANGESOURCEW
+#define POLEUICHANGESOURCE POLEUICHANGESOURCEW
+#define LPOLEUICHANGESOURCE LPOLEUICHANGESOURCEW
+#define OleUIChangeSource OleUIChangeSourceW
+#define IOleUIObjInfo IOleUIObjInfoW
+#define LPOLEUIOBJINFO LPOLEUIOBJINFOW
+#define IOleUILinkInfo IOleUILinkInfoW
+#define IOleUILinkInfoVtbl IOleUILinkInfoWVtbl
+#define LPOLEUILINKINFO LPOLEUILINKINFOW
+#define tagOLEUIGNRLPROPS tagOLEUIGNRLPROPSW
+#define OLEUIGNRLPROPS OLEUIGNRLPROPSW
+#define POLEUIGNRLPROPS POLEUIGNRLPROPSW
+#define LPOLEUIGNRLPROPS LPOLEUIGNRLPROPSW
+#define tagOLEUIVIEWPROPS tagOLEUIVIEWPROPSW
+#define OLEUIVIEWPROPS OLEUIVIEWPROPSW
+#define POLEUIVIEWPROPS POLEUIVIEWPROPSW
+#define LPOLEUIVIEWPROPS LPOLEUIVIEWPROPSW
+#define tagOLEUILINKPROPS tagOLEUILINKPROPSW
+#define OLEUILINKPROPS OLEUILINKPROPSW
+#define POLEUILINKPROPS POLEUILINKPROPSW
+#define LPOLEUILINKPROPS LPOLEUILINKPROPSW
+#else
+#define IDD_SERVERNOTREG IDD_SERVERNOTREGA
+#define IDD_LINKTYPECHANGED IDD_LINKTYPECHANGEDA
+#define OleUIUpdateLinks OleUIUpdateLinksA
+#define OleUIAddVerbMenu OleUIAddVerbMenuA
+#define tagOLEUIOBJECTPROPS tagOLEUIOBJECTPROPSA
+#define OLEUIOBJECTPROPS OLEUIOBJECTPROPSA
+#define POLEUIOBJECTPROPS POLEUIOBJECTPROPSA
+#define LPOLEUIOBJECTPROPS LPOLEUIOBJECTPROPSA
+#define OleUIObjectProperties OleUIObjectPropertiesA
+#define tagOLEUIINSERTOBJECT tagOLEUIINSERTOBJECTA
+#define OLEUIINSERTOBJECT OLEUIINSERTOBJECTA
+#define POLEUIINSERTOBJECT POLEUIINSERTOBJECTA
+#define LPOLEUIINSERTOBJECT LPOLEUIINSERTOBJECTA
+#define OleUIInsertObject OleUIInsertObjectA
+#define OleUIPromptUser OleUIPromptUserA
+#define tagOLEUIPASTEENTRY tagOLEUIPASTEENTRYA
+#define OLEUIPASTEENTRY OLEUIPASTEENTRYA
+#define POLEUIPASTEENTRY POLEUIPASTEENTRYA
+#define LPOLEUIPASTEENTRY LPOLEUIPASTEENTRYA
+#define tagOLEUIPASTESPECIAL tagOLEUIPASTESPECIALA
+#define OLEUIPASTESPECIAL OLEUIPASTESPECIALA
+#define POLEUIPASTESPECIAL POLEUIPASTESPECIALA
+#define LPOLEUIPASTESPECIAL LPOLEUIPASTESPECIALA
+#define OleUIPasteSpecial OleUIPasteSpecialA
+#define IOleUILinkContainer IOleUILinkContainerA
+#define LPOLEUILINKCONTAINER LPOLEUILINKCONTAINERA
+#define tagOLEUIEDITLINKS tagOLEUIEDITLINKSA
+#define OLEUIEDITLINKS OLEUIEDITLINKSA
+#define POLEUIEDITLINKS POLEUIEDITLINKSA
+#define LPOLEUIEDITLINKS LPOLEUIEDITLINKSA
+#define OleUIEditLinks OleUIEditLinksA
+#define tagOLEUICHANGEICON tagOLEUICHANGEICONA
+#define OLEUICHANGEICON OLEUICHANGEICONA
+#define POLEUICHANGEICON POLEUICHANGEICONA
+#define LPOLEUICHANGEICON LPOLEUICHANGEICONA
+#define OleUIChangeIcon OleUIChangeIconA
+#define tagOLEUICONVERT tagOLEUICONVERTA
+#define OLEUICONVERT OLEUICONVERTA
+#define POLEUICONVERT POLEUICONVERTA
+#define LPOLEUICONVERT LPOLEUICONVERTA
+#define OleUIConvert OleUIConvertA
+#define tagOLEUIBUSY tagOLEUIBUSYA
+#define OLEUIBUSY OLEUIBUSYA
+#define POLEUIBUSY POLEUIBUSYA
+#define LPOLEUIBUSY LPOLEUIBUSYA
+#define OleUIBusy OleUIBusyA
+#define tagOLEUICHANGESOURCE tagOLEUICHANGESOURCEA
+#define OLEUICHANGESOURCE OLEUICHANGESOURCEA
+#define POLEUICHANGESOURCE POLEUICHANGESOURCEA
+#define LPOLEUICHANGESOURCE LPOLEUICHANGESOURCEA
+#define OleUIChangeSource OleUIChangeSourceA
+#define IOleUIObjInfo IOleUIObjInfoA
+#define LPOLEUIOBJINFO LPOLEUIOBJINFOA
+#define IOleUILinkInfo IOleUILinkInfoA
+#define IOleUILinkInfoVtbl IOleUILinkInfoAVtbl
+#define LPOLEUILINKINFO LPOLEUILINKINFOA
+#define tagOLEUIGNRLPROPS tagOLEUIGNRLPROPSA
+#define OLEUIGNRLPROPS OLEUIGNRLPROPSA
+#define POLEUIGNRLPROPS POLEUIGNRLPROPSA
+#define LPOLEUIGNRLPROPS LPOLEUIGNRLPROPSA
+#define tagOLEUIVIEWPROPS tagOLEUIVIEWPROPSA
+#define OLEUIVIEWPROPS OLEUIVIEWPROPSA
+#define POLEUIVIEWPROPS POLEUIVIEWPROPSA
+#define LPOLEUIVIEWPROPS LPOLEUIVIEWPROPSA
+#define tagOLEUILINKPROPS tagOLEUILINKPROPSA
+#define OLEUILINKPROPS OLEUILINKPROPSA
+#define POLEUILINKPROPS POLEUILINKPROPSA
+#define LPOLEUILINKPROPS LPOLEUILINKPROPSA
+#endif
+#pragma pack(pop)
+#endif
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/oleidl.h b/tcc/include/winapi/oleidl.h
new file mode 100644
index 0000000..bade579
--- /dev/null
+++ b/tcc/include/winapi/oleidl.h
@@ -0,0 +1,575 @@
+#ifndef _OLEIDL_H
+#define _OLEIDL_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <objfwd.h>
+
+#define MK_ALT 32
+
+typedef _COM_interface IParseDisplayName *LPPARSEDISPLAYNAME;
+typedef _COM_interface IOleContainer *LPOLECONTAINER;
+typedef _COM_interface IOleClientSite *LPOLECLIENTSITE;
+typedef _COM_interface IOleObject *LPOLEOBJECT;
+typedef _COM_interface IDropTarget *LPDROPTARGET;
+typedef _COM_interface IDropSource *LPDROPSOURCE;
+typedef _COM_interface IEnumOleUndoUnits *LPENUMOLEUNDOUNITS;
+typedef _COM_interface IEnumOLEVERB *LPENUMOLEVERB;
+typedef _COM_interface IOleWindow *LPOLEWINDOW;
+typedef _COM_interface IOleInPlaceUIWindow *LPOLEINPLACEUIWINDOW;
+typedef _COM_interface IOleInPlaceActiveObject *LPOLEINPLACEACTIVEOBJECT;
+typedef _COM_interface IOleInPlaceFrame *LPOLEINPLACEFRAME;
+typedef _COM_interface IOleAdviseHolder *LPOLEADVISEHOLDER;
+typedef _COM_interface IViewObject *LPVIEWOBJECT;
+typedef _COM_interface IViewObject2 *LPVIEWOBJECT2;
+typedef _COM_interface IOleCache *LPOLECACHE;
+typedef _COM_interface IOleCache2 *LPOLECACHE2;
+typedef _COM_interface IOleCacheControl *LPOLECACHECONTROL;
+
+typedef enum tagBINDSPEED
+{
+ BINDSPEED_INDEFINITE=1,
+ BINDSPEED_MODERATE,
+ BINDSPEED_IMMEDIATE
+} BINDSPEED;
+typedef enum tagOLEWHICHMK {
+ OLEWHICHMK_CONTAINER=1,
+ OLEWHICHMK_OBJREL,
+ OLEWHICHMK_OBJFULL
+} OLEWHICHMK;
+typedef enum tagOLEGETMONIKER {
+ OLEGETMONIKER_ONLYIFTHERE=1,
+ OLEGETMONIKER_FORCEASSIGN,
+ OLEGETMONIKER_UNASSIGN,
+ OLEGETMONIKER_TEMPFORUSER
+} OLEGETMONIKER;
+typedef enum tagUSERCLASSTYPE {
+ USERCLASSTYPE_FULL=1,
+ USERCLASSTYPE_SHORT,
+ USERCLASSTYPE_APPNAME
+} USERCLASSTYPE;
+
+#ifdef __GNUC__
+__extension__ /* IS0 C says enums limited to range of int */
+#endif
+typedef enum tagDROPEFFECT {
+ DROPEFFECT_NONE=0,
+ DROPEFFECT_COPY=1,
+ DROPEFFECT_MOVE=2,
+ DROPEFFECT_LINK=4,
+ DROPEFFECT_SCROLL=0x80000000
+} DROPEFFECT;
+typedef struct tagOleMenuGroupWidths {
+ LONG width[6];
+} OLEMENUGROUPWIDTHS,*LPOLEMENUGROUPWIDTHS;
+typedef HGLOBAL HOLEMENU;
+typedef enum tagOLECLOSE {
+ OLECLOSE_SAVEIFDIRTY,
+ OLECLOSE_NOSAVE,
+ OLECLOSE_PROMPTSAVE
+} OLECLOSE;
+typedef struct tagOLEVERB {
+ LONG lVerb;
+ LPWSTR lpszVerbName;
+ DWORD fuFlags;
+ DWORD grfAttribs;
+} OLEVERB,*LPOLEVERB;
+typedef RECT BORDERWIDTHS;
+typedef LPRECT LPBORDERWIDTHS;
+typedef LPCRECT LPCBORDERWIDTHS;
+typedef struct tagOIFI {
+ UINT cb;
+ BOOL fMDIApp;
+ HWND hwndFrame;
+ HACCEL haccel;
+ UINT cAccelEntries;
+}OLEINPLACEFRAMEINFO,*LPOLEINPLACEFRAMEINFO;
+
+DECLARE_ENUMERATOR(OLEVERB);
+typedef IEnumOLEVERB IEnumOleVerb;
+
+EXTERN_C const IID IID_IParseDisplayName;
+#define INTERFACE IParseDisplayName
+DECLARE_INTERFACE_(IParseDisplayName,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(ParseDisplayName)(THIS_ IBindCtx*,LPOLESTR,ULONG*,IMoniker**) PURE;
+};
+#undef INTERFACE
+
+#ifdef COBJMACROS
+#define IParseDisplayName_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define IParseDisplayName_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define IParseDisplayName_Release(T) (T)->lpVtbl->Release(T)
+#define IParseDisplayName_ParseDisplayName(T,a,b,c,d) (T)->lpVtbl->ParseDisplayName(T,a,b,c,d)
+#endif
+
+EXTERN_C const IID IID_IOleContainer;
+#define INTERFACE IOleContainer
+DECLARE_INTERFACE_(IOleContainer,IParseDisplayName)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(ParseDisplayName)(THIS_ IBindCtx*,LPOLESTR,ULONG*,IMoniker**) PURE;
+ STDMETHOD(EnumObjects)(THIS_ DWORD,IEnumUnknown**) PURE;
+ STDMETHOD(LockContainer)(THIS_ BOOL) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IOleItemContainer;
+#define INTERFACE IOleItemContainer
+DECLARE_INTERFACE_(IOleItemContainer,IOleContainer)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(ParseDisplayName)(THIS_ IBindCtx*,LPOLESTR,ULONG*,IMoniker**) PURE;
+ STDMETHOD(EnumObjects)(THIS_ DWORD,IEnumUnknown**) PURE;
+ STDMETHOD(LockContainer)(THIS_ BOOL) PURE;
+ STDMETHOD(GetObject)(THIS_ LPOLESTR,DWORD,IBindCtx*,REFIID,void**) PURE;
+ STDMETHOD(GetObjectStorage)(THIS_ LPOLESTR,IBindCtx*,REFIID,void**) PURE;
+ STDMETHOD(IsRunning)(THIS_ LPOLESTR) PURE;
+};
+#undef INTERFACE
+
+#ifdef COBJMACROS
+#define IOleItemContainer_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define IOleItemContainer_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define IOleItemContainer_Release(T) (T)->lpVtbl->Release(T)
+#define IOleItemContainer_ParseDisplayName(T,a,b,c,d) (T)->lpVtbl->ParseDisplayName(T,a,b,c,d)
+#define IOleItemContainer_EnumObjects(T,a,b) (T)->lpVtbl->EnumObjects(T,a,b)
+#define IOleItemContainer_LockContainer(T,a) (T)->lpVtbl->LockContainer(T,a)
+#define IOleItemContainer_GetObject(T,a,b,c,d,e) (T)->lpVtbl->GetObject(T,a,b,c,d,e)
+#define IOleItemContainer_GetObjectStorage(T,a,b,c,d) (T)->lpVtbl->GetObjectStorage(T,a,b,c,d)
+#define IOleItemContainer_IsRunning(T,a) (T)->lpVtbl->IsRunning(T,a)
+#endif
+
+EXTERN_C const IID IID_IOleClientSite;
+#define INTERFACE IOleClientSite
+DECLARE_INTERFACE_(IOleClientSite,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(SaveObject)(THIS) PURE;
+ STDMETHOD(GetMoniker)(THIS_ DWORD,DWORD,LPMONIKER*) PURE;
+ STDMETHOD(GetContainer)(THIS_ LPOLECONTAINER*) PURE;
+ STDMETHOD(ShowObject)(THIS) PURE;
+ STDMETHOD(OnShowWindow)(THIS_ BOOL) PURE;
+ STDMETHOD(RequestNewObjectLayout)(THIS) PURE;
+};
+#undef INTERFACE
+
+#ifdef COBJMACROS
+#define IOleClientSite_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define IOleClientSite_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define IOleClientSite_Release(T) (T)->lpVtbl->Release(T)
+#define IOleClientSite_SaveObject(T) (T)->lpVtbl->SaveObject(T)
+#define IOleClientSite_GetMoniker(T,a,b,c) (T)->lpVtbl->GetMoniker(T,a,b,c)
+#define IOleClientSite_GetContainer(T,a) (T)->lpVtbl->GetContainer(T,a)
+#define IOleClientSite_ShowObject(T) (T)->lpVtbl->ShowObject(T)
+#define IOleClientSite_OnShowWindow(T,a) (T)->lpVtbl->OnShowWindow(T,a)
+#define IOleClientSite_RequestNewObjectLayout(T) (T)->lpVtbl->RequestNewObjectLayout(T)
+#endif
+
+EXTERN_C const IID IID_IOleObject;
+#define INTERFACE IOleObject
+DECLARE_INTERFACE_(IOleObject,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(SetClientSite)(THIS_ LPOLECLIENTSITE) PURE;
+ STDMETHOD(GetClientSite)(THIS_ LPOLECLIENTSITE*) PURE;
+ STDMETHOD(SetHostNames)(THIS_ LPCOLESTR,LPCOLESTR) PURE;
+ STDMETHOD(Close)(THIS_ DWORD) PURE;
+ STDMETHOD(SetMoniker)(THIS_ DWORD,LPMONIKER) PURE;
+ STDMETHOD(GetMoniker)(THIS_ DWORD,DWORD,LPMONIKER*) PURE;
+ STDMETHOD(InitFromData)(THIS_ LPDATAOBJECT,BOOL,DWORD) PURE;
+ STDMETHOD(GetClipboardData)(THIS_ DWORD,LPDATAOBJECT*) PURE;
+ STDMETHOD(DoVerb)(THIS_ LONG,LPMSG,LPOLECLIENTSITE,LONG,HWND,LPCRECT) PURE;
+ STDMETHOD(EnumVerbs)(THIS_ LPENUMOLEVERB*) PURE;
+ STDMETHOD(Update)(THIS) PURE;
+ STDMETHOD(IsUpToDate)(THIS) PURE;
+ STDMETHOD(GetUserClassID)(THIS_ LPCLSID) PURE;
+ STDMETHOD(GetUserType)(THIS_ DWORD,LPOLESTR*) PURE;
+ STDMETHOD(SetExtent)(THIS_ DWORD,SIZEL*) PURE;
+ STDMETHOD(GetExtent)(THIS_ DWORD,SIZEL*) PURE;
+ STDMETHOD(Advise)(THIS_ LPADVISESINK,PDWORD) PURE;
+ STDMETHOD(Unadvise)(THIS_ DWORD) PURE;
+ STDMETHOD(EnumAdvise)(THIS_ LPENUMSTATDATA*) PURE;
+ STDMETHOD(GetMiscStatus)(THIS_ DWORD,PDWORD) PURE;
+ STDMETHOD(SetColorScheme)(THIS_ LPLOGPALETTE) PURE;
+};
+#undef INTERFACE
+
+#ifdef COBJMACROS
+#define IOleObject_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define IOleObject_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define IOleObject_Release(T) (T)->lpVtbl->Release(T)
+#define IOleObject_SetClientSite(T,a) (T)->lpVtbl->SetClientSite(T,a)
+#define IOleObject_GetClientSite(T,a) (T)->lpVtbl->GetClientSite(T,a)
+#define IOleObject_SetHostNames(T,a,b) (T)->lpVtbl->SetHostNames(T,a,b)
+#define IOleObject_Close(T,a) (T)->lpVtbl->Close(T,a)
+#define IOleObject_SetMoniker(T,a,b) (T)->lpVtbl->SetMoniker(T,a,b)
+#define IOleObject_GetMoniker(T,a,b,c) (T)->lpVtbl->GetMoniker(T,a,b,c)
+#define IOleObject_InitFromData(T,a,b,c) (T)->lpVtbl->InitFromData(T,a,b,c)
+#define IOleObject_GetClipboardData(T,a,b) (T)->lpVtbl->GetClipboardData(T,a,b)
+#define IOleObject_DoVerb(T,a,b,c,d,e,f) (T)->lpVtbl->DoVerb(T,a,b,c,d,e,f)
+#define IOleObject_EnumVerbs(T,a) (T)->lpVtbl->EnumVerbs(T,a)
+#define IOleObject_Update(T) (T)->lpVtbl->Update(T)
+#define IOleObject_IsUpToDate(T) (T)->lpVtbl->IsUpToDate(T)
+#define IOleObject_GetUserClassID(T,a) (T)->lpVtbl->GetUserClassID(T,a)
+#define IOleObject_GetUserType(T,a,b) (T)->lpVtbl->GetUserType(T,a,b)
+#define IOleObject_SetExtent(T,a,b) (T)->lpVtbl->SetExtent(T,a,b)
+#define IOleObject_GetExtent(T,a,b) (T)->lpVtbl->GetExtent(T,a,b)
+#define IOleObject_Advise(T,a,b) (T)->lpVtbl->Advise(T,a,b)
+#define IOleObject_Unadvise(T,a) (T)->lpVtbl->Unadvise(T,a)
+#define IOleObject_EnumAdvise(T,a) (T)->lpVtbl->EnumAdvise(T,a)
+#define IOleObject_GetMiscStatus(T,a,b) (T)->lpVtbl->GetMiscStatus(T,a,b)
+#define IOleObject_SetColorScheme(T,a) (T)->lpVtbl->SetColorScheme(T,a)
+#endif
+
+EXTERN_C const IID IID_IOleWindow;
+#define INTERFACE IOleWindow
+DECLARE_INTERFACE_(IOleWindow,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetWindow)(THIS_ HWND*) PURE;
+ STDMETHOD(ContextSensitiveHelp)(THIS_ BOOL) PURE;
+};
+#undef INTERFACE
+
+#ifdef COBJMACROS
+#define IOleWindow_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define IOleWindow_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define IOleWindow_Release(T) (T)->lpVtbl->Release(T)
+#define IOleWindow_GetWindow(T,a) (T)->lpVtbl->GetWindow(T,a)
+#define IOleWindow_ContextSensitiveHelp(T,a) (T)->lpVtbl->ContextSensitiveHelp(T,a)
+#endif
+
+EXTERN_C const IID IID_IOleInPlaceUIWindow;
+#define INTERFACE IOleInPlaceUIWindow
+DECLARE_INTERFACE_(IOleInPlaceUIWindow,IOleWindow)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetWindow)(THIS_ HWND*) PURE;
+ STDMETHOD(ContextSensitiveHelp)(THIS_ BOOL) PURE;
+ STDMETHOD(GetBorder)(THIS_ LPRECT) PURE;
+ STDMETHOD(RequestBorderSpace)(THIS_ LPCBORDERWIDTHS) PURE;
+ STDMETHOD(SetBorderSpace)(THIS_ LPCBORDERWIDTHS) PURE;
+ STDMETHOD(SetActiveObject)(THIS_ LPOLEINPLACEACTIVEOBJECT,LPCOLESTR) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IOleInPlaceObject;
+#define INTERFACE IOleInPlaceObject
+DECLARE_INTERFACE_(IOleInPlaceObject,IOleWindow)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetWindow)(THIS_ HWND*) PURE;
+ STDMETHOD(ContextSensitiveHelp)(THIS_ BOOL) PURE;
+ STDMETHOD(InPlaceDeactivate)(THIS) PURE;
+ STDMETHOD(UIDeactivate)(THIS) PURE;
+ STDMETHOD(SetObjectRects)(THIS_ LPCRECT,LPCRECT) PURE;
+ STDMETHOD(ReactivateAndUndo)(THIS) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IOleInPlaceActiveObject;
+#define INTERFACE IOleInPlaceActiveObject
+DECLARE_INTERFACE_(IOleInPlaceActiveObject,IOleWindow)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetWindow)(THIS_ HWND*) PURE;
+ STDMETHOD(ContextSensitiveHelp)(THIS_ BOOL) PURE;
+ STDMETHOD(TranslateAccelerator)(THIS_ LPMSG) PURE;
+ STDMETHOD(OnFrameWindowActivate)(THIS_ BOOL) PURE;
+ STDMETHOD(OnDocWindowActivate)(THIS_ BOOL) PURE;
+ STDMETHOD(ResizeBorder)(THIS_ LPCRECT,LPOLEINPLACEUIWINDOW,BOOL) PURE;
+ STDMETHOD(EnableModeless)(THIS_ BOOL) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IOleInPlaceFrame;
+#define INTERFACE IOleInPlaceFrame
+DECLARE_INTERFACE_(IOleInPlaceFrame,IOleInPlaceUIWindow)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetWindow)(THIS_ HWND*) PURE;
+ STDMETHOD(ContextSensitiveHelp)(THIS_ BOOL) PURE;
+ STDMETHOD(GetBorder)(THIS_ LPRECT) PURE;
+ STDMETHOD(RequestBorderSpace)(THIS_ LPCBORDERWIDTHS) PURE;
+ STDMETHOD(SetBorderSpace)(THIS_ LPCBORDERWIDTHS) PURE;
+ STDMETHOD(SetActiveObject)(THIS_ LPOLEINPLACEACTIVEOBJECT,LPCOLESTR) PURE;
+ STDMETHOD(InsertMenus)(THIS_ HMENU,LPOLEMENUGROUPWIDTHS) PURE;
+ STDMETHOD(SetMenu)(THIS_ HMENU,HOLEMENU,HWND) PURE;
+ STDMETHOD(RemoveMenus)(THIS_ HMENU) PURE;
+ STDMETHOD(SetStatusText)(THIS_ LPCOLESTR) PURE;
+ STDMETHOD(EnableModeless)(THIS_ BOOL) PURE;
+ STDMETHOD(TranslateAccelerator)(THIS_ LPMSG,WORD) PURE;
+};
+#undef INTERFACE
+
+#ifdef COBJMACROS
+#define IOleInPlaceFrame_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define IOleInPlaceFrame_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define IOleInPlaceFrame_Release(T) (T)->lpVtbl->Release(T)
+#define IOleInPlaceFrame_GetWindow(T,a) (T)->lpVtbl->GetWindow(T,a)
+#define IOleInPlaceFrame_ContextSensitiveHelp(T,a) (T)->lpVtbl->ContextSensitiveHelp(T,a)
+#define IOleInPlaceFrame_GetBorder(T,a) (T)->lpVtbl->GetBorder(T,a)
+#define IOleInPlaceFrame_RequestBorderSpace(T,a) (T)->lpVtbl->RequestBorderSpace(T,a)
+#define IOleInPlaceFrame_SetBorderSpace(T,a) (T)->lpVtbl->SetBorderSpace(T,a)
+#define IOleInPlaceFrame_SetActiveObject(T,a,b) (T)->lpVtbl->SetActiveObject(T,a,b)
+#define IOleInPlaceFrame_InsertMenus(T,a,b) (T)->lpVtbl->InsertMenus(T,a,b)
+#define IOleInPlaceFrame_SetMenu(T,a,b,c) (T)->lpVtbl->SetMenu(T,a,b,c)
+#define IOleInPlaceFrame_RemoveMenus(T,a) (T)->lpVtbl->RemoveMenus(T,a)
+#define IOleInPlaceFrame_SetStatusText(T,a) (T)->lpVtbl->SetStatusText(T,a)
+#define IOleInPlaceFrame_EnableModeless(T,a) (T)->lpVtbl->EnableModeless(T,a)
+#define IOleInPlaceFrame_TranslateAccelerator(T,a,b) (T)->lpVtbl->TranslateAccelerator(T,a,b)
+#endif
+
+EXTERN_C const IID IID_IOleInPlaceSite;
+#define INTERFACE IOleInPlaceSite
+DECLARE_INTERFACE_(IOleInPlaceSite,IOleWindow)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetWindow)(THIS_ HWND*) PURE;
+ STDMETHOD(ContextSensitiveHelp)(THIS_ BOOL) PURE;
+ STDMETHOD(CanInPlaceActivate)(THIS) PURE;
+ STDMETHOD(OnInPlaceActivate)(THIS) PURE;
+ STDMETHOD(OnUIActivate)(THIS) PURE;
+ STDMETHOD(GetWindowContext)(THIS_ IOleInPlaceFrame**,IOleInPlaceUIWindow**,LPRECT,LPRECT,LPOLEINPLACEFRAMEINFO) PURE;
+ STDMETHOD(Scroll)(THIS_ SIZE) PURE;
+ STDMETHOD(OnUIDeactivate)(THIS_ BOOL) PURE;
+ STDMETHOD(OnInPlaceDeactivate)(THIS) PURE;
+ STDMETHOD(DiscardUndoState)(THIS) PURE;
+ STDMETHOD(DeactivateAndUndo)(THIS) PURE;
+ STDMETHOD(OnPosRectChange)(THIS_ LPCRECT) PURE;
+};
+#undef INTERFACE
+
+EXTERN_C const IID IID_IOleAdviseHolder;
+#define INTERFACE IOleAdviseHolder
+DECLARE_INTERFACE_(IOleAdviseHolder,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(Advise)(THIS_ LPADVISESINK,PDWORD) PURE;
+ STDMETHOD(Unadvise)(THIS_ DWORD) PURE;
+ STDMETHOD(EnumAdvise)(THIS_ LPENUMSTATDATA*) PURE;
+ STDMETHOD(SendOnRename)(THIS_ LPMONIKER) PURE;
+ STDMETHOD(SendOnSave)(THIS) PURE;
+ STDMETHOD(SendOnClose)(THIS) PURE;
+};
+#undef INTERFACE
+
+#ifdef COBJMACROS
+#define IOleAdviseHolder_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define IOleAdviseHolder_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define IOleAdviseHolder_Release(T) (T)->lpVtbl->Release(T)
+#define IOleAdviseHolder_Advise(T,a,b) (T)->lpVtbl->Advise(T,a,b)
+#define IOleAdviseHolder_Unadvise(T,a) (T)->lpVtbl->Unadvise(T,a)
+#define IOleAdviseHolder_EnumAdvise(T,a) (T)->lpVtbl->EnumAdvise(T,a)
+#define IOleAdviseHolder_SendOnRename(T,a) (T)->lpVtbl->SendOnRename(T,a)
+#define IOleAdviseHolder_SendOnSave(T) (T)->lpVtbl->SendOnSave(T)
+#define IOleAdviseHolder_SendOnClose(T) (T)->lpVtbl->SendOnClose(T)
+#endif
+
+EXTERN_C const IID IID_IDropSource;
+#define INTERFACE IDropSource
+DECLARE_INTERFACE_(IDropSource,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(QueryContinueDrag)(THIS_ BOOL,DWORD) PURE;
+ STDMETHOD(GiveFeedback)(THIS_ DWORD) PURE;
+};
+#undef INTERFACE
+
+#ifdef COBJMACROS
+#define IDropSource_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define IDropSource_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define IDropSource_Release(T) (T)->lpVtbl->Release(T)
+#define IDropSource_QueryContinueDrag(T,a,b) (T)->lpVtbl->QueryContinueDrag(T,a,b)
+#define IDropSource_GiveFeedback(T,a) (T)->lpVtbl->GiveFeedback(T,a)
+#endif
+
+EXTERN_C const IID IID_IDropTarget;
+#define INTERFACE IDropTarget
+DECLARE_INTERFACE_(IDropTarget,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(DragEnter)(THIS_ LPDATAOBJECT,DWORD,POINTL,PDWORD) PURE;
+ STDMETHOD(DragOver)(THIS_ DWORD,POINTL,PDWORD) PURE;
+ STDMETHOD(DragLeave)(THIS) PURE;
+ STDMETHOD(Drop)(THIS_ LPDATAOBJECT,DWORD,POINTL,PDWORD) PURE;
+};
+#undef INTERFACE
+
+#ifdef COBJMACROS
+#define IDropTarget_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define IDropTarget_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define IDropTarget_Release(T) (T)->lpVtbl->Release(T)
+#define IDropTarget_DragEnter(T,a,b,c,d) (T)->lpVtbl->DragEnter(T,a,b,c,d)
+#define IDropTarget_DragOver(T,a,b,c) (T)->lpVtbl->DragOver(T,a,b,c)
+#define IDropTarget_DragLeave(T) (T)->lpVtbl->DragLeave(T)
+#define IDropTarget_Drop(T,a,b,c,d) (T)->lpVtbl->Drop(T,a,b,c,d)
+#endif
+
+typedef BOOL(CALLBACK *__IView_pfncont)(DWORD);
+EXTERN_C const IID IID_IViewObject;
+#define INTERFACE IViewObject
+DECLARE_INTERFACE_(IViewObject,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(Draw)(THIS_ DWORD,LONG,PVOID,DVTARGETDEVICE*,HDC,HDC,LPCRECTL,LPCRECTL,__IView_pfncont pfnContinue,DWORD) PURE;
+ STDMETHOD(GetColorSet)(THIS_ DWORD,LONG,PVOID,DVTARGETDEVICE*,HDC,LPLOGPALETTE*) PURE;
+ STDMETHOD(Freeze)(THIS_ DWORD,LONG,PVOID,PDWORD) PURE;
+ STDMETHOD(Unfreeze)(THIS_ DWORD) PURE;
+ STDMETHOD(SetAdvise)(THIS_ DWORD,DWORD,IAdviseSink*) PURE;
+ STDMETHOD(GetAdvise)(THIS_ PDWORD,PDWORD,IAdviseSink**) PURE;
+};
+#undef INTERFACE
+
+#ifdef COBJMACROS
+#define IViewObject_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define IViewObject_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define IViewObject_Release(T) (T)->lpVtbl->Release(T)
+#define IViewObject_Draw(T,a,b,c,d,e,f,g,h,i,j) (T)->lpVtbl->Draw(T,a,b,c,d,e,f,g,h,i,j)
+#define IViewObject_GetColorSet(T,a,b,c,d,e,f) (T)->lpVtbl->GetColorSet(T,a,b,c,d,e,f)
+#define IViewObject_Freeze(T,a,b,c,d) (T)->lpVtbl->Freeze(T,a,b,c,d)
+#define IViewObject_Unfreeze(T,a) (T)->lpVtbl->Unfreeze(T,a)
+#define IViewObject_SetAdvise(T,a,b,c) (T)->lpVtbl->SetAdvise(T,a,b,c)
+#define IViewObject_GetAdvise(T,a,b,c) (T)->lpVtbl->GetAdvise(T,a,b,c)
+#endif
+
+EXTERN_C const IID IID_IViewObject2;
+#define INTERFACE IViewObject2
+DECLARE_INTERFACE_(IViewObject2,IViewObject)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(Draw)(THIS_ DWORD,LONG,PVOID,DVTARGETDEVICE*,HDC,HDC,LPCRECTL,LPCRECTL,__IView_pfncont pfnContinue,DWORD) PURE;
+ STDMETHOD(GetColorSet)(THIS_ DWORD,LONG,PVOID,DVTARGETDEVICE*,HDC,LPLOGPALETTE*) PURE;
+ STDMETHOD(Freeze)(THIS_ DWORD,LONG,PVOID,PDWORD) PURE;
+ STDMETHOD(Unfreeze)(THIS_ DWORD) PURE;
+ STDMETHOD(SetAdvise)(THIS_ DWORD,DWORD,IAdviseSink*) PURE;
+ STDMETHOD(GetAdvise)(THIS_ PDWORD,PDWORD,IAdviseSink**) PURE;
+ STDMETHOD(GetExtent)(THIS_ DWORD,LONG,DVTARGETDEVICE*,LPSIZEL) PURE;
+};
+#undef INTERFACE
+
+#ifdef COBJMACROS
+#define IViewObject2_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define IViewObject2_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define IViewObject2_Release(T) (T)->lpVtbl->Release(T)
+#define IViewObject2_Draw(T,a,b,c,d,e,f,g,h,i,j) (T)->lpVtbl->Draw(T,a,b,c,d,e,f,g,h,i,j)
+#define IViewObject2_GetColorSet(T,a,b,c,d,e,f) (T)->lpVtbl->GetColorSet(T,a,b,c,d,e,f)
+#define IViewObject2_Freeze(T,a,b,c,d) (T)->lpVtbl->Freeze(T,a,b,c,d)
+#define IViewObject2_Unfreeze(T,a) (T)->lpVtbl->Unfreeze(T,a)
+#define IViewObject2_SetAdvise(T,a,b,c) (T)->lpVtbl->SetAdvise(T,a,b,c)
+#define IViewObject2_GetAdvise(T,a,b,c) (T)->lpVtbl->GetAdvise(T,a,b,c)
+#define IViewObject2_GetExtent(T,a,b,c,d) (T)->lpVtbl->GetExtent(T,a,b,c,d)
+#endif
+
+EXTERN_C const IID IID_IOleCache;
+#define INTERFACE IOleCache
+DECLARE_INTERFACE_(IOleCache,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(Cache)(THIS_ FORMATETC*,DWORD,DWORD*) PURE;
+ STDMETHOD(Uncache)(THIS_ DWORD) PURE;
+ STDMETHOD(EnumCache)(THIS_ IEnumSTATDATA**);
+ STDMETHOD(InitCache)(THIS_ LPDATAOBJECT);
+ STDMETHOD(SetData)(THIS_ FORMATETC*,STGMEDIUM*,BOOL);
+};
+#undef INTERFACE
+
+#ifdef COBJMACROS
+#define IOleCache_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define IOleCache_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define IOleCache_Release(T) (T)->lpVtbl->Release(T)
+#define IOleCache_Cache(T,a,b,c) (T)->lpVtbl->Cache(T,a,b,c)
+#define IOleCache_Uncache(T,a) (T)->lpVtbl->Uncache(T,a)
+#define IOleCache_EnumCache(T,a) (T)->lpVtbl->EnumCache(T,a)
+#define IOleCache_InitCache(T,a) (T)->lpVtbl->InitCache(T,a)
+#define IOleCache_SetData(T,a,b,c) (T)->lpVtbl->SetData(T,a,b,c)
+#endif
+
+EXTERN_C const IID IID_IOleCache2;
+#define INTERFACE IOleCache2
+DECLARE_INTERFACE_(IOleCache2,IOleCache)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(Cache)(THIS_ FORMATETC*,DWORD,DWORD*) PURE;
+ STDMETHOD(Uncache)(THIS_ DWORD) PURE;
+ STDMETHOD(EnumCache)(THIS_ IEnumSTATDATA**) PURE;
+ STDMETHOD(InitCache)(THIS_ LPDATAOBJECT) PURE;
+ STDMETHOD(SetData)(THIS_ FORMATETC*,STGMEDIUM*,BOOL) PURE;
+ STDMETHOD(UpdateCache)(THIS_ LPDATAOBJECT,DWORD,LPVOID) PURE;
+ STDMETHOD(DiscardCache)(THIS_ DWORD) PURE;
+};
+#undef INTERFACE
+
+#ifdef COBJMACROS
+#define IOleCache2_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define IOleCache2_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define IOleCache2_Release(T) (T)->lpVtbl->Release(T)
+#define IOleCache2_Cache(T,a,b,c) (T)->lpVtbl->Cache(T,a,b,c)
+#define IOleCache2_Uncache(T,a) (T)->lpVtbl->Uncache(T,a)
+#define IOleCache2_EnumCache(T,a) (T)->lpVtbl->EnumCache(T,a)
+#define IOleCache2_InitCache(T,a) (T)->lpVtbl->InitCache(T,a)
+#define IOleCache2_SetData(T,a,b,c) (T)->lpVtbl->SetData(T,a,b,c)
+#define IOleCache2_UpdateCache(T,a,b,c) (T)->lpVtbl->UpdateCache(T,a,b,c)
+#define IOleCache2_DiscardCache(T,a) (T)->lpVtbl->DiscardCache(T,a)
+#endif
+
+EXTERN_C const IID IID_IOleCacheControl;
+#define INTERFACE IOleCacheControl
+DECLARE_INTERFACE_(IOleCacheControl,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(OnRun)(THIS_ LPDATAOBJECT) PURE;
+ STDMETHOD(OnStop)(THIS) PURE;
+};
+#undef INTERFACE
+
+#ifdef __cplusplus
+}
+#endif
+#endif
+
diff --git a/tcc/include/winapi/pbt.h b/tcc/include/winapi/pbt.h
new file mode 100644
index 0000000..21cb1cd
--- /dev/null
+++ b/tcc/include/winapi/pbt.h
@@ -0,0 +1,24 @@
+#ifndef _PBT_H
+#define _PBT_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+/* Also in winuser.h */
+#define PBT_APMQUERYSUSPEND 0
+#define PBT_APMQUERYSTANDBY 1
+#define PBT_APMQUERYSUSPENDFAILED 2
+#define PBT_APMQUERYSTANDBYFAILED 3
+#define PBT_APMSUSPEND 4
+#define PBT_APMSTANDBY 5
+#define PBT_APMRESUMECRITICAL 6
+#define PBT_APMRESUMESUSPEND 7
+#define PBT_APMRESUMESTANDBY 8
+#define PBT_APMBATTERYLOW 9
+#define PBT_APMPOWERSTATUSCHANGE 10
+#define PBT_APMOEMEVENT 11
+#define PBT_APMRESUMEAUTOMATIC 18
+
+#define PBTF_APMRESUMEFROMFAILURE 1
+
+#endif
diff --git a/tcc/include/winapi/poppack.h b/tcc/include/winapi/poppack.h
new file mode 100644
index 0000000..bb04d45
--- /dev/null
+++ b/tcc/include/winapi/poppack.h
@@ -0,0 +1,3 @@
+#ifndef RC_INVOKED
+#pragma pack(pop)
+#endif
diff --git a/tcc/include/winapi/powrprof.h b/tcc/include/winapi/powrprof.h
new file mode 100644
index 0000000..dc7d1f3
--- /dev/null
+++ b/tcc/include/winapi/powrprof.h
@@ -0,0 +1,120 @@
+#ifndef _POWRPROF_H
+#define _POWRPROF_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define EnableMultiBatteryDisplay 2
+#define EnablePasswordLogon 4
+#define EnableSysTrayBatteryMeter 1
+#define EnableWakeOnRing 8
+#define EnableVideoDimDisplay 16
+#define NEWSCHEME (UINT)-1
+
+#ifndef RC_INVOKED
+#include <ntdef.h> /* for NTSTATUS */
+typedef struct _GLOBAL_MACHINE_POWER_POLICY{
+ ULONG Revision;
+ SYSTEM_POWER_STATE LidOpenWakeAc;
+ SYSTEM_POWER_STATE LidOpenWakeDc;
+ ULONG BroadcastCapacityResolution;
+} GLOBAL_MACHINE_POWER_POLICY, *PGLOBAL_MACHINE_POWER_POLICY;
+typedef struct _GLOBAL_USER_POWER_POLICY{
+ ULONG Revision;
+ POWER_ACTION_POLICY PowerButtonAc;
+ POWER_ACTION_POLICY PowerButtonDc;
+ POWER_ACTION_POLICY SleepButtonAc;
+ POWER_ACTION_POLICY SleepButtonDc;
+ POWER_ACTION_POLICY LidCloseAc;
+ POWER_ACTION_POLICY LidCloseDc;
+ SYSTEM_POWER_LEVEL DischargePolicy[NUM_DISCHARGE_POLICIES];
+ ULONG GlobalFlags;
+} GLOBAL_USER_POWER_POLICY, *PGLOBAL_USER_POWER_POLICY;
+typedef struct _GLOBAL_POWER_POLICY{
+ GLOBAL_USER_POWER_POLICY user;
+ GLOBAL_MACHINE_POWER_POLICY mach;
+} GLOBAL_POWER_POLICY, *PGLOBAL_POWER_POLICY;
+typedef struct _MACHINE_POWER_POLICY{
+ ULONG Revision;
+ SYSTEM_POWER_STATE MinSleepAc;
+ SYSTEM_POWER_STATE MinSleepDc;
+ SYSTEM_POWER_STATE ReducedLatencySleepAc;
+ SYSTEM_POWER_STATE ReducedLatencySleepDc;
+ ULONG DozeTimeoutAc;
+ ULONG DozeTimeoutDc;
+ ULONG DozeS4TimeoutAc;
+ ULONG DozeS4TimeoutDc;
+ UCHAR MinThrottleAc;
+ UCHAR MinThrottleDc;
+ UCHAR pad1[2];
+ POWER_ACTION_POLICY OverThrottledAc;
+ POWER_ACTION_POLICY OverThrottledDc;
+} MACHINE_POWER_POLICY, *PMACHINE_POWER_POLICY;
+typedef struct _MACHINE_PROCESSOR_POWER_POLICY {
+ ULONG Revision;
+ PROCESSOR_POWER_POLICY ProcessorPolicyAc;
+ PROCESSOR_POWER_POLICY ProcessorPolicyDc;
+} MACHINE_PROCESSOR_POWER_POLICY, *PMACHINE_PROCESSOR_POWER_POLICY;
+typedef struct _USER_POWER_POLICY{
+ ULONG Revision;
+ POWER_ACTION_POLICY IdleAc;
+ POWER_ACTION_POLICY IdleDc;
+ ULONG IdleTimeoutAc;
+ ULONG IdleTimeoutDc;
+ UCHAR IdleSensitivityAc;
+ UCHAR IdleSensitivityDc;
+ UCHAR ThrottlePolicyAc;
+ UCHAR ThrottlePolicyDc;
+ SYSTEM_POWER_STATE MaxSleepAc;
+ SYSTEM_POWER_STATE MaxSleepDc;
+ ULONG Reserved[2];
+ ULONG VideoTimeoutAc;
+ ULONG VideoTimeoutDc;
+ ULONG SpindownTimeoutAc;
+ ULONG SpindownTimeoutDc;
+ BOOLEAN OptimizeForPowerAc;
+ BOOLEAN OptimizeForPowerDc;
+ UCHAR FanThrottleToleranceAc;
+ UCHAR FanThrottleToleranceDc;
+ UCHAR ForcedThrottleAc;
+ UCHAR ForcedThrottleDc;
+} USER_POWER_POLICY, *PUSER_POWER_POLICY;
+typedef struct _POWER_POLICY{
+ USER_POWER_POLICY user;
+ MACHINE_POWER_POLICY mach;
+} POWER_POLICY, *PPOWER_POLICY;
+typedef BOOLEAN (CALLBACK* PWRSCHEMESENUMPROC)(UINT, DWORD, LPTSTR, DWORD, LPTSTR, PPOWER_POLICY, LPARAM);
+typedef BOOLEAN (CALLBACK* PFNNTINITIATEPWRACTION)(POWER_ACTION, SYSTEM_POWER_STATE, ULONG, BOOLEAN);
+NTSTATUS WINAPI CallNtPowerInformation(POWER_INFORMATION_LEVEL, PVOID, ULONG, PVOID, ULONG);
+BOOLEAN WINAPI CanUserWritePwrScheme(VOID);
+BOOLEAN WINAPI DeletePwrScheme(UINT);
+BOOLEAN WINAPI EnumPwrSchemes(PWRSCHEMESENUMPROC, LPARAM);
+BOOLEAN WINAPI GetActivePwrScheme(PUINT);
+BOOLEAN WINAPI GetCurrentPowerPolicies(PGLOBAL_POWER_POLICY, PPOWER_POLICY);
+BOOLEAN WINAPI GetPwrCapabilities(PSYSTEM_POWER_CAPABILITIES);
+BOOLEAN WINAPI GetPwrDiskSpindownRange(PUINT, PUINT);
+BOOLEAN WINAPI IsAdminOverrideActive(PADMINISTRATOR_POWER_POLICY);
+BOOLEAN WINAPI IsPwrHibernateAllowed(VOID);
+BOOLEAN WINAPI IsPwrShutdownAllowed(VOID);
+BOOLEAN WINAPI IsPwrSuspendAllowed(VOID);
+BOOLEAN WINAPI ReadGlobalPwrPolicy(PGLOBAL_POWER_POLICY);
+BOOLEAN WINAPI ReadProcessorPwrScheme(UINT, PMACHINE_PROCESSOR_POWER_POLICY);
+BOOLEAN WINAPI ReadPwrScheme(UINT, PPOWER_POLICY);
+BOOLEAN WINAPI SetActivePwrScheme(UINT, PGLOBAL_POWER_POLICY, PPOWER_POLICY);
+BOOLEAN WINAPI SetSuspendState(BOOLEAN, BOOLEAN, BOOLEAN);
+BOOLEAN WINAPI WriteGlobalPwrPolicy(PGLOBAL_POWER_POLICY);
+BOOLEAN WINAPI WriteProcessorPwrScheme(UINT, PMACHINE_PROCESSOR_POWER_POLICY);
+BOOLEAN WINAPI ValidatePowerPolicies(PGLOBAL_POWER_POLICY, PPOWER_POLICY);
+BOOLEAN WINAPI WritePwrScheme(PUINT, LPTSTR, LPTSTR, PPOWER_POLICY);
+
+#endif /* RC_INVOKED */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _POWRPROF_H */
diff --git a/tcc/include/winapi/prsht.h b/tcc/include/winapi/prsht.h
new file mode 100644
index 0000000..299834b
--- /dev/null
+++ b/tcc/include/winapi/prsht.h
@@ -0,0 +1,304 @@
+#ifndef _PRSHT_H
+#define _PRSHT_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define MAXPROPPAGES 100
+#define PSP_DEFAULT 0
+#define PSP_DLGINDIRECT 1
+#define PSP_USEHICON 2
+#define PSP_USEICONID 4
+#define PSP_USETITLE 8
+#define PSP_RTLREADING 16
+#define PSP_HASHELP 32
+#define PSP_USEREFPARENT 64
+#define PSP_USECALLBACK 128
+#define PSP_PREMATURE 1024
+#if (_WIN32_IE >= 0x0400)
+#define PSP_HIDEHEADER 2048
+#define PSP_USEHEADERTITLE 4096
+#define PSP_USEHEADERSUBTITLE 8192
+#endif
+#define PSPCB_RELEASE 1
+#define PSPCB_CREATE 2
+#define PSH_DEFAULT 0
+#define PSH_PROPTITLE 1
+#define PSH_USEHICON 2
+#define PSH_USEICONID 4
+#define PSH_PROPSHEETPAGE 8
+#define PSH_WIZARDHASFINISH 16
+#define PSH_WIZARD 32
+#define PSH_USEPSTARTPAGE 64
+#define PSH_NOAPPLYNOW 128
+#define PSH_USECALLBACK 256
+#define PSH_HASHELP 512
+#define PSH_MODELESS 1024
+#define PSH_RTLREADING 2048
+#define PSH_WIZARDCONTEXTHELP 4096
+#if (_WIN32_IE >= 0x0400)
+#define PSH_WATERMARK 32768
+#define PSH_USEHBMWATERMARK 65536
+#define PSH_USEHPLWATERMARK 131072
+#define PSH_STRETCHWATERMARK 262144
+#define PSH_HEADER 524288
+#define PSH_USEHBMHEADER 1048576
+#define PSH_USEPAGELANG 2097152
+#if (_WIN32_IE < 0x0500)
+#define PSH_WIZARD97 0x00002000
+#else
+#define PSH_WIZARD97 0x01000000
+#endif
+#endif /* _WIN32_IE >= 0x0400 */
+#if (_WIN32_IE >= 0x0500)
+#define PSH_WIZARD_LITE 0x400000
+#define PSH_NOCONTEXTHELP 0x2000000
+#endif
+#define PSCB_INITIALIZED 1
+#define PSCB_PRECREATE 2
+#define PSM_GETTABCONTROL 1140
+#define PSM_GETCURRENTPAGEHWND 1142
+#define PSM_ISDIALOGMESSAGE 1141
+#define PSM_PRESSBUTTON 1137
+#define PSM_SETCURSELID 1138
+#define PSM_SETFINISHTEXTW 1145
+#define PSM_SETFINISHTEXTA 1139
+#define PSN_FIRST (-200)
+#define PSN_LAST (-299)
+#define PSN_APPLY (-202)
+#define PSN_HELP (-205)
+#define PSN_KILLACTIVE (-201)
+#define PSN_QUERYCANCEL (-209)
+#define PSN_RESET (-203)
+#define PSN_SETACTIVE (-200)
+#define PSN_WIZBACK (-206)
+#define PSN_WIZFINISH (-208)
+#define PSN_WIZNEXT (-207)
+#define PSNRET_NOERROR 0
+#define PSNRET_INVALID 1
+#define PSNRET_INVALID_NOCHANGEPAGE 2
+#define ID_PSRESTARTWINDOWS 2
+#define ID_PSREBOOTSYSTEM 3
+#define WIZ_CXDLG 276
+#define WIZ_CYDLG 140
+#define WIZ_CXBMP 80
+#define WIZ_BODYX 92
+#define WIZ_BODYCX 184
+#define PROP_SM_CXDLG 212
+#define PROP_SM_CYDLG 188
+#define PROP_MED_CXDLG 227
+#define PROP_MED_CYDLG 215
+#define PROP_LG_CXDLG 252
+#define PROP_LG_CYDLG 218
+#define PSBTN_MAX 6
+#define PSBTN_BACK 0
+#define PSBTN_NEXT 1
+#define PSBTN_FINISH 2
+#define PSBTN_OK 3
+#define PSBTN_APPLYNOW 4
+#define PSBTN_CANCEL 5
+#define PSBTN_HELP 6
+#define PSWIZB_BACK 1
+#define PSWIZB_NEXT 2
+#define PSWIZB_FINISH 4
+#define PSWIZB_DISABLEDFINISH 8
+#define PSM_SETWIZBUTTONS (WM_USER+112)
+#define PSM_APPLY (WM_USER+110)
+#define PSM_UNCHANGED (WM_USER+109)
+#define PSM_QUERYSIBLINGS (WM_USER+108)
+#define PSM_CANCELTOCLOSE (WM_USER+107)
+#define PSM_REBOOTSYSTEM (WM_USER+106)
+#define PSM_RESTARTWINDOWS (WM_USER+105)
+#define PSM_CHANGED (WM_USER+104)
+#define PSM_ADDPAGE (WM_USER+103)
+#define PSM_REMOVEPAGE (WM_USER+102)
+#define PSM_SETCURSEL (WM_USER+101)
+#define PSM_SETTITLEA (WM_USER+111)
+#define PSM_SETTITLEW (WM_USER+120)
+
+#ifndef RC_INVOKED
+
+#pragma pack(push,8)
+typedef struct _PROPSHEETPAGEA {
+ DWORD dwSize;
+ DWORD dwFlags;
+ HINSTANCE hInstance;
+ _ANONYMOUS_UNION union {
+ LPCSTR pszTemplate;
+ LPCDLGTEMPLATE pResource;
+ } DUMMYUNIONNAME;
+ _ANONYMOUS_UNION union {
+ HICON hIcon;
+ LPCSTR pszIcon;
+ } DUMMYUNIONNAME2;
+ LPCSTR pszTitle;
+ DLGPROC pfnDlgProc;
+ LPARAM lParam;
+ UINT(CALLBACK *pfnCallback)(HWND,UINT,struct _PROPSHEETPAGEA*);
+ UINT *pcRefParent;
+#if (_WIN32_IE >= 0x0400)
+ LPCSTR pszHeaderTitle;
+ LPCSTR pszHeaderSubTitle;
+#endif
+} PROPSHEETPAGEA,*LPPROPSHEETPAGEA;
+typedef const PROPSHEETPAGEA *LPCPROPSHEETPAGEA;
+typedef struct _PROPSHEETPAGEW {
+ DWORD dwSize;
+ DWORD dwFlags;
+ HINSTANCE hInstance;
+ _ANONYMOUS_UNION union {
+ LPCWSTR pszTemplate;
+ LPCDLGTEMPLATE pResource;
+ } DUMMYUNIONNAME;
+ _ANONYMOUS_UNION union {
+ HICON hIcon;
+ LPCWSTR pszIcon;
+ } DUMMYUNIONNAME2;
+ LPCWSTR pszTitle;
+ DLGPROC pfnDlgProc;
+ LPARAM lParam;
+ UINT(CALLBACK *pfnCallback)(HWND,UINT,struct _PROPSHEETPAGEW*);
+ UINT *pcRefParent;
+#if (_WIN32_IE >= 0x0400)
+ LPCWSTR pszHeaderTitle;
+ LPCWSTR pszHeaderSubTitle;
+#endif
+} PROPSHEETPAGEW,*LPPROPSHEETPAGEW;
+typedef const PROPSHEETPAGEW *LPCPROPSHEETPAGEW;
+typedef UINT(CALLBACK *LPFNPSPCALLBACKA)(HWND,UINT,LPPROPSHEETPAGEA);
+typedef UINT(CALLBACK *LPFNPSPCALLBACKW)(HWND,UINT,LPPROPSHEETPAGEW);
+typedef int(CALLBACK *PFNPROPSHEETCALLBACK)(HWND,UINT,LPARAM);
+DECLARE_HANDLE(HPROPSHEETPAGE);
+typedef struct _PROPSHEETHEADERA {
+ DWORD dwSize;
+ DWORD dwFlags;
+ HWND hwndParent;
+ HINSTANCE hInstance;
+ _ANONYMOUS_UNION union {
+ HICON hIcon;
+ LPCSTR pszIcon;
+ }DUMMYUNIONNAME;
+ LPCSTR pszCaption;
+ UINT nPages;
+ _ANONYMOUS_UNION union {
+ UINT nStartPage;
+ LPCSTR pStartPage;
+ }DUMMYUNIONNAME2;
+ _ANONYMOUS_UNION union {
+ LPCPROPSHEETPAGEA ppsp;
+ HPROPSHEETPAGE *phpage;
+ }DUMMYUNIONNAME3;
+ PFNPROPSHEETCALLBACK pfnCallback;
+#if (_WIN32_IE >= 0x0400)
+ _ANONYMOUS_UNION union {
+ HBITMAP hbmWatermark;
+ LPCSTR pszbmWatermark;
+ } DUMMYUNIONNAME4;
+ HPALETTE hplWatermark;
+ _ANONYMOUS_UNION union {
+ HBITMAP hbmHeader;
+ LPCSTR pszbmHeader;
+ } DUMMYUNIONNAME5;
+#endif
+} PROPSHEETHEADERA,*LPPROPSHEETHEADERA;
+typedef const PROPSHEETHEADERA *LPCPROPSHEETHEADERA;
+typedef struct _PROPSHEETHEADERW {
+ DWORD dwSize;
+ DWORD dwFlags;
+ HWND hwndParent;
+ HINSTANCE hInstance;
+ _ANONYMOUS_UNION union {
+ HICON hIcon;
+ LPCWSTR pszIcon;
+ }DUMMYUNIONNAME;
+ LPCWSTR pszCaption;
+ UINT nPages;
+ _ANONYMOUS_UNION union {
+ UINT nStartPage;
+ LPCWSTR pStartPage;
+ }DUMMYUNIONNAME2;
+ _ANONYMOUS_UNION union {
+ LPCPROPSHEETPAGEW ppsp;
+ HPROPSHEETPAGE *phpage;
+ }DUMMYUNIONNAME3;
+ PFNPROPSHEETCALLBACK pfnCallback;
+#if (_WIN32_IE >= 0x0400)
+ _ANONYMOUS_UNION union {
+ HBITMAP hbmWatermark;
+ LPCWSTR pszbmWatermark;
+ } DUMMYUNIONNAME4;
+ HPALETTE hplWatermark;
+ _ANONYMOUS_UNION union {
+ HBITMAP hbmHeader;
+ LPCWSTR pszbmHeader;
+ } DUMMYUNIONNAME5;
+#endif
+} PROPSHEETHEADERW,*LPPROPSHEETHEADERW;
+typedef const PROPSHEETHEADERW *LPCPROPSHEETHEADERW;
+typedef BOOL(CALLBACK *LPFNADDPROPSHEETPAGE)(HPROPSHEETPAGE,LPARAM);
+typedef BOOL(CALLBACK *LPFNADDPROPSHEETPAGES)(LPVOID,LPFNADDPROPSHEETPAGE,LPARAM);
+typedef struct _PSHNOTIFY {
+ NMHDR hdr;
+ LPARAM lParam;
+} PSHNOTIFY,*LPPSHNOTIFY;
+
+#pragma pack(pop)
+
+HPROPSHEETPAGE WINAPI CreatePropertySheetPageA(LPCPROPSHEETPAGEA);
+HPROPSHEETPAGE WINAPI CreatePropertySheetPageW(LPCPROPSHEETPAGEW);
+BOOL WINAPI DestroyPropertySheetPage(HPROPSHEETPAGE);
+int WINAPI PropertySheetA(LPCPROPSHEETHEADERA);
+int WINAPI PropertySheetW(LPCPROPSHEETHEADERW);
+#define PropSheet_AddPage(d,p) SendMessage(d,PSM_ADDPAGE,0,(LPARAM)p)
+#define PropSheet_Apply(d) SendMessage(d,PSM_APPLY,0,0)
+#define PropSheet_CancelToClose(d) SendMessage(d,PSM_CANCELTOCLOSE,0,0)
+#define PropSheet_Changed(d,w) SendMessage(d,PSM_CHANGED,(WPARAM)w,0)
+#define PropSheet_GetCurrentPageHwnd(d) (HWND)SendMessage(d,PSM_GETCURRENTPAGEHWND,0,0)
+#define PropSheet_GetTabControl(d) (HWND)SendMessage(d,PSM_GETTABCONTROL,0,0)
+#define PropSheet_IsDialogMessage(d,m) (BOOL)SendMessage(d,PSM_ISDIALOGMESSAGE,0,(LPARAM)m)
+#define PropSheet_PressButton(d,i) SendMessage(d,PSM_PRESSBUTTON,i,0)
+#define PropSheet_QuerySiblings(d,w,l) SendMessage(d,PSM_QUERYSIBLINGS,w,l)
+#define PropSheet_RebootSystem(d) SendMessage(d,PSM_REBOOTSYSTEM,0,0)
+#define PropSheet_RemovePage(d,i,p) SendMessage(d,PSM_REMOVEPAGE,i,(LPARAM)p)
+#define PropSheet_RestartWindows(d) SendMessage(d,PSM_RESTARTWINDOWS,0,0)
+#define PropSheet_SetCurSel(d,p,i) SendMessage(d,PSM_SETCURSEL,i,(LPARAM)p)
+#define PropSheet_SetCurSelByID(d,i) SendMessage(d,PSM_SETCURSELID,0,i)
+#define PropSheet_SetFinishText(d,s) SendMessage(d,PSM_SETFINISHTEXT,0,(LPARAM)s)
+#define PropSheet_SetTitle(d,w,s) SendMessage(d,PSM_SETTITLE,w,(LPARAM)s)
+#define PropSheet_SetWizButtons(d,f) PostMessage(d,PSM_SETWIZBUTTONS,0,(LPARAM)f)
+#define PropSheet_UnChanged(d,w) SendMessage(d,PSM_UNCHANGED,(WPARAM)w,0)
+#endif
+
+#ifdef UNICODE
+#define LPFNPSPCALLBACK LPFNPSPCALLBACKW
+#define PROPSHEETPAGE PROPSHEETPAGEW
+#define LPPROPSHEETPAGE LPPROPSHEETPAGEW
+#define LPCPROPSHEETPAGE LPCPROPSHEETPAGEW
+#define PROPSHEETHEADER PROPSHEETHEADERW
+#define LPPROPSHEETHEADER LPPROPSHEETHEADERW
+#define LPCPROPSHEETHEADER LPCPROPSHEETHEADERW
+#define PSM_SETTITLE PSM_SETTITLEW
+#define PSM_SETFINISHTEXT PSM_SETFINISHTEXTW
+#define CreatePropertySheetPage CreatePropertySheetPageW
+#define PropertySheet PropertySheetW
+#else
+#define LPFNPSPCALLBACK LPFNPSPCALLBACKA
+#define PROPSHEETPAGE PROPSHEETPAGEA
+#define LPPROPSHEETPAGE LPPROPSHEETPAGEA
+#define LPCPROPSHEETPAGE LPCPROPSHEETPAGEA
+#define PROPSHEETHEADER PROPSHEETHEADERA
+#define LPPROPSHEETHEADER LPPROPSHEETHEADERA
+#define LPCPROPSHEETHEADER LPCPROPSHEETHEADERA
+#define PSM_SETTITLE PSM_SETTITLEA
+#define PSM_SETFINISHTEXT PSM_SETFINISHTEXTA
+#define CreatePropertySheetPage CreatePropertySheetPageA
+#define PropertySheet PropertySheetA
+#endif
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/psapi.h b/tcc/include/winapi/psapi.h
new file mode 100644
index 0000000..398f64a
--- /dev/null
+++ b/tcc/include/winapi/psapi.h
@@ -0,0 +1,105 @@
+/*
+ psapi.h - Include file for PSAPI.DLL APIs
+
+ Written by Mumit Khan <khan@nanotech.wisc.edu>
+
+ This file is part of a free library for the Win32 API.
+
+ NOTE: This strictly does not belong in the Win32 API since it's
+ really part of Platform SDK. However,GDB needs it and we might
+ as well provide it here.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+*/
+#ifndef _PSAPI_H
+#define _PSAPI_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef RC_INVOKED
+
+typedef struct _MODULEINFO {
+ LPVOID lpBaseOfDll;
+ DWORD SizeOfImage;
+ LPVOID EntryPoint;
+} MODULEINFO,*LPMODULEINFO;
+
+typedef struct _PSAPI_WS_WATCH_INFORMATION {
+ LPVOID FaultingPc;
+ LPVOID FaultingVa;
+} PSAPI_WS_WATCH_INFORMATION,*PPSAPI_WS_WATCH_INFORMATION;
+
+typedef struct _PROCESS_MEMORY_COUNTERS {
+ DWORD cb;
+ DWORD PageFaultCount;
+ DWORD PeakWorkingSetSize;
+ DWORD WorkingSetSize;
+ DWORD QuotaPeakPagedPoolUsage;
+ DWORD QuotaPagedPoolUsage;
+ DWORD QuotaPeakNonPagedPoolUsage;
+ DWORD QuotaNonPagedPoolUsage;
+ DWORD PagefileUsage;
+ DWORD PeakPagefileUsage;
+} PROCESS_MEMORY_COUNTERS,*PPROCESS_MEMORY_COUNTERS;
+
+/* Grouped by application,not in alphabetical order. */
+BOOL WINAPI EnumProcesses(DWORD *,DWORD,DWORD *);
+BOOL WINAPI EnumProcessModules(HANDLE,HMODULE *,DWORD,LPDWORD);
+DWORD WINAPI GetModuleBaseNameA(HANDLE,HMODULE,LPSTR,DWORD);
+DWORD WINAPI GetModuleBaseNameW(HANDLE,HMODULE,LPWSTR,DWORD);
+DWORD WINAPI GetModuleFileNameExA(HANDLE,HMODULE,LPSTR,DWORD);
+DWORD WINAPI GetModuleFileNameExW(HANDLE,HMODULE,LPWSTR,DWORD);
+BOOL WINAPI GetModuleInformation(HANDLE,HMODULE,LPMODULEINFO,DWORD);
+BOOL WINAPI EmptyWorkingSet(HANDLE);
+BOOL WINAPI QueryWorkingSet(HANDLE,PVOID,DWORD);
+BOOL WINAPI InitializeProcessForWsWatch(HANDLE);
+BOOL WINAPI GetWsChanges(HANDLE,PPSAPI_WS_WATCH_INFORMATION,DWORD);
+DWORD WINAPI GetMappedFileNameW(HANDLE,LPVOID,LPWSTR,DWORD);
+DWORD WINAPI GetMappedFileNameA(HANDLE,LPVOID,LPSTR,DWORD);
+BOOL WINAPI EnumDeviceDrivers(LPVOID *,DWORD,LPDWORD);
+DWORD WINAPI GetDeviceDriverBaseNameA(LPVOID,LPSTR,DWORD);
+DWORD WINAPI GetDeviceDriverBaseNameW(LPVOID,LPWSTR,DWORD);
+DWORD WINAPI GetDeviceDriverFileNameA(LPVOID,LPSTR,DWORD);
+DWORD WINAPI GetDeviceDriverFileNameW(LPVOID,LPWSTR,DWORD);
+BOOL WINAPI GetProcessMemoryInfo(HANDLE,PPROCESS_MEMORY_COUNTERS,DWORD);
+#if (_WIN32_WINNT >= 0x0501)
+DWORD WINAPI GetProcessImageFileNameA(HANDLE,LPSTR,DWORD);
+DWORD WINAPI GetProcessImageFileNameW(HANDLE,LPWSTR,DWORD);
+#endif
+
+#endif /* not RC_INVOKED */
+
+#ifdef UNICODE
+#define GetModuleBaseName GetModuleBaseNameW
+#define GetModuleFileNameEx GetModuleFileNameExW
+#define GetMappedFileName GetMappedFileNameW
+#define GetDeviceDriverBaseName GetDeviceDriverBaseNameW
+#define GetDeviceDriverFileName GetDeviceDriverFileNameW
+#if (_WIN32_WINNT >= 0x0501)
+#define GetProcessImageFileName GetProcessImageFileNameW
+#endif
+#else
+#define GetModuleBaseName GetModuleBaseNameA
+#define GetModuleFileNameEx GetModuleFileNameExA
+#define GetMappedFileName GetMappedFileNameA
+#define GetDeviceDriverBaseName GetDeviceDriverBaseNameA
+#define GetDeviceDriverFileName GetDeviceDriverFileNameA
+#if (_WIN32_WINNT >= 0x0501)
+#define GetProcessImageFileName GetProcessImageFileNameA
+#endif
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _PSAPI_H */
+
diff --git a/tcc/include/winapi/pshpack1.h b/tcc/include/winapi/pshpack1.h
new file mode 100644
index 0000000..3cbcf23
--- /dev/null
+++ b/tcc/include/winapi/pshpack1.h
@@ -0,0 +1,3 @@
+#ifndef RC_INVOKED
+#pragma pack(push,1)
+#endif
diff --git a/tcc/include/winapi/pshpack2.h b/tcc/include/winapi/pshpack2.h
new file mode 100644
index 0000000..4d88e00
--- /dev/null
+++ b/tcc/include/winapi/pshpack2.h
@@ -0,0 +1,3 @@
+#ifndef RC_INVOKED
+#pragma pack(push,2)
+#endif
diff --git a/tcc/include/winapi/pshpack4.h b/tcc/include/winapi/pshpack4.h
new file mode 100644
index 0000000..c1c3cf9
--- /dev/null
+++ b/tcc/include/winapi/pshpack4.h
@@ -0,0 +1,3 @@
+#ifndef RC_INVOKED
+#pragma pack(push,4)
+#endif
diff --git a/tcc/include/winapi/pshpack8.h b/tcc/include/winapi/pshpack8.h
new file mode 100644
index 0000000..f0c4539
--- /dev/null
+++ b/tcc/include/winapi/pshpack8.h
@@ -0,0 +1,3 @@
+#ifndef RC_INVOKED
+#pragma pack(push,8)
+#endif
diff --git a/tcc/include/winapi/qedit.h b/tcc/include/winapi/qedit.h
new file mode 100644
index 0000000..2e8b821
--- /dev/null
+++ b/tcc/include/winapi/qedit.h
@@ -0,0 +1,70 @@
+#ifndef _QEDIT_H
+#define _QEDIT_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifndef _STRMIF_H
+#include <strmif.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--- DirectShow Reference - Constants and GUIDs - Error and Success Codes */
+#define S_WARN_OUTPUTRESET 0x00009DD4
+#define E_NOTINTREE 0x80040400
+#define E_RENDER_ENGINE_IS_BROKEN 0x80040401
+#define E_MUST_INIT_RENDERER 0x80040402
+#define E_NOTDETERMINED 0x80040403
+#define E_NO_TIMELINE 0x80040404
+/*--- DirectShow Editing Services - C++ Reference - Structures */
+typedef struct {
+ BSTR Name;
+ DISPID dispID;
+ LONG nValues;
+} DEXTER_PARAM;
+typedef struct {
+ VARIANT v;
+ REFERENCE_TIME rt;
+ DWORD dwInterp;
+} DEXTER_VALUE;
+typedef struct _SCompFmt0 {
+ long nFormatId;
+ AM_MEDIA_TYPE MediaType;
+} SCompFmt0;
+/*--- DirectShow Editing Services - C++ Reference - Enumerated Types */
+typedef enum {
+ DEXTERF_BOUNDING = -1,
+ DEXTERF_EXACTLY_AT = 0,
+ DEXTERF_FORWARDS = 1
+} DEXTERF_TRACK_SEARCH_FLAGS;
+typedef enum {
+ TIMELINE_MAJOR_TYPE_COMPOSITE = 1,
+ TIMELINE_MAJOR_TYPE_TRACK = 2,
+ TIMELINE_MAJOR_TYPE_SOURCE = 4,
+ TIMELINE_MAJOR_TYPE_TRANSITION = 8,
+ TIMELINE_MAJOR_TYPE_EFFECT = 16,
+ TIMELINE_MAJOR_TYPE_GROUP = 128
+} TIMELINE_MAJOR_TYPE;
+/*--- DirectShow Editing Services - C++ Reference - Constants */
+#define CONNECTF_DYNAMIC_NONE 0x00
+#define CONNECTF_DYNAMIC_SOURCES 0x01
+#define CONNECTF_DYNAMIC_EFFECTS 0x02
+#define SFN_VALIDATEF_CHECK 0x01
+#define SFN_VALIDATEF_POPUP 0x02
+#define SFN_VALIDATEF_TELLME 0x04
+#define SFN_VALIDATEF_REPLACE 0x08
+#define SFN_VALIDATEF_USELOCAL 0x10
+#define SFN_VALIDATEF_NOFIND 0x20
+#define SFN_VALIDATEF_IGNOREMUTED 0x40
+#define RESIZEF_STRETCH 0
+#define RESIZEF_CROP 1
+#define RESIZEF_PRESERVEASPECTRATIO 2
+#define RESIZEF_PRESERVEASPECTRATIO_NOLETTERBOX 3
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/rapi.h b/tcc/include/winapi/rapi.h
new file mode 100644
index 0000000..4cf6515
--- /dev/null
+++ b/tcc/include/winapi/rapi.h
@@ -0,0 +1,54 @@
+/* rapi.h - main header file for the RAPI API
+
+ NOTE: This strictly does not belong in the Win32 API since it's
+ really part of Platform SDK.
+
+*/
+
+#ifndef _RAPI_H
+#define _RAPI_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+typedef struct IRAPIStream
+{
+ struct IRAPIStreamVtbl * lpVtbl;
+} IRAPIStream;
+
+typedef struct IRAPIStreamVtbl IRAPIStreamVtbl;
+
+typedef enum tagRAPISTREAMFLAG
+{
+ STREAM_TIMEOUT_READ
+} RAPISTREAMFLAG;
+
+struct IRAPIStreamVtbl
+{
+ HRESULT (__stdcall * SetRapiStat)( IRAPIStream *, RAPISTREAMFLAG, DWORD);
+ HRESULT (__stdcall * GetRapiStat)( IRAPIStream *, RAPISTREAMFLAG, DWORD *);
+};
+
+typedef HRESULT (STDAPICALLTYPE RAPIEXT)(DWORD, BYTE, DWORD, BYTE, IRAPIStream *);
+
+typedef struct _RAPIINIT
+{
+ DWORD cbSize;
+ HANDLE heRapiInit;
+ HRESULT hrRapiInit;
+} RAPIINIT;
+
+STDAPI CeRapiInit (void);
+STDAPI CeRapiInitEx (RAPIINIT*);
+STDAPI_(BOOL) CeCreateProcess (LPCWSTR, LPCWSTR, LPSECURITY_ATTRIBUTES, LPSECURITY_ATTRIBUTES,
+ BOOL, DWORD, LPVOID, LPWSTR, LPSTARTUPINFO, LPPROCESS_INFORMATION);
+STDAPI CeRapiUninit (void);
+
+STDAPI_(BOOL) CeWriteFile (HANDLE, LPCVOID, DWORD, LPDWORD, LPOVERLAPPED);
+STDAPI_(HANDLE) CeCreateFile (LPCWSTR, DWORD, DWORD, LPSECURITY_ATTRIBUTES, DWORD, DWORD, HANDLE);
+STDAPI_(BOOL) CeCreateDirectory (LPCWSTR, LPSECURITY_ATTRIBUTES);
+STDAPI_(DWORD) CeGetLastError (void);
+STDAPI_(BOOL) CeGetFileTime (HANDLE, LPFILETIME, LPFILETIME, LPFILETIME);
+STDAPI_(BOOL) CeCloseHandle (HANDLE);
+
+#endif /* _RAPI_H */
diff --git a/tcc/include/winapi/ras.h b/tcc/include/winapi/ras.h
new file mode 100644
index 0000000..4b427a1
--- /dev/null
+++ b/tcc/include/winapi/ras.h
@@ -0,0 +1,997 @@
+#ifndef _RAS_H
+#define _RAS_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#ifndef _LMCONS_H
+#include <lmcons.h>
+#endif
+
+/* TODO
+include <basetsd.h> from winnt.h so that this typedef is not necessary
+*/
+#ifndef _BASETSD_H
+typedef unsigned long ULONG_PTR, *PULONG_PTR;
+#endif
+
+#include <pshpack4.h>
+
+#define RAS_MaxDeviceType 16
+#define RAS_MaxPhoneNumber 128
+#define RAS_MaxIpAddress 15
+#define RAS_MaxIpxAddress 21
+#define RAS_MaxEntryName 256
+#define RAS_MaxDeviceName 128
+#define RAS_MaxCallbackNumber RAS_MaxPhoneNumber
+#define RAS_MaxAreaCode 10
+#define RAS_MaxPadType 32
+#define RAS_MaxX25Address 200
+#define RAS_MaxFacilities 200
+#define RAS_MaxUserData 200
+#define RAS_MaxReplyMessage 1024
+#define RAS_MaxDnsSuffix 256
+#define RDEOPT_UsePrefixSuffix 0x00000001
+#define RDEOPT_PausedStates 0x00000002
+#define RDEOPT_IgnoreModemSpeaker 0x00000004
+#define RDEOPT_SetModemSpeaker 0x00000008
+#define RDEOPT_IgnoreSoftwareCompression 0x00000010
+#define RDEOPT_SetSoftwareCompression 0x00000020
+#define RDEOPT_DisableConnectedUI 0x00000040
+#define RDEOPT_DisableReconnectUI 0x00000080
+#define RDEOPT_DisableReconnect 0x00000100
+#define RDEOPT_NoUser 0x00000200
+#define RDEOPT_PauseOnScript 0x00000400
+#define RDEOPT_Router 0x00000800
+#define REN_User 0x00000000
+#define REN_AllUsers 0x00000001
+#define VS_Default 0
+#define VS_PptpOnly 1
+#define VS_PptpFirst 2
+#define VS_L2tpOnly 3
+#define VS_L2tpFirst 4
+#define RASDIALEVENT "RasDialEvent"
+#define WM_RASDIALEVENT 0xCCCD
+#define RASEO_UseCountryAndAreaCodes 0x00000001
+#define RASEO_SpecificIpAddr 0x00000002
+#define RASEO_SpecificNameServers 0x00000004
+#define RASEO_IpHeaderCompression 0x00000008
+#define RASEO_RemoteDefaultGateway 0x00000010
+#define RASEO_DisableLcpExtensions 0x00000020
+#define RASEO_TerminalBeforeDial 0x00000040
+#define RASEO_TerminalAfterDial 0x00000080
+#define RASEO_ModemLights 0x00000100
+#define RASEO_SwCompression 0x00000200
+#define RASEO_RequireEncryptedPw 0x00000400
+#define RASEO_RequireMsEncryptedPw 0x00000800
+#define RASEO_RequireDataEncryption 0x00001000
+#define RASEO_NetworkLogon 0x00002000
+#define RASEO_UseLogonCredentials 0x00004000
+#define RASEO_PromoteAlternates 0x00008000
+#if (WINVER >= 0x501)
+#define RASEO2_SecureFileAndPrint 0x00000001
+#define RASEO2_SecureClientForMSNet 0x00000002
+#define RASEO2_DontNegotiateMultilink 0x00000004
+#define RASEO2_DontUseRasCredentials 0x00000008
+#define RASEO2_UsePreSharedKey 0x00000010
+#define RASEO2_Internet 0x00000020
+#define RASEO2_DisableNbtOverIP 0x00000040
+#define RASEO2_UseGlobalDeviceSettings 0x00000080
+#define RASEO2_ReconnectIfDropped 0x00000100
+#define RASEO2_SharePhoneNumbers 0x00000200
+#endif
+#define RASNP_NetBEUI 0x00000001
+#define RASNP_Ipx 0x00000002
+#define RASNP_Ip 0x00000004
+#define RASFP_Ppp 0x00000001
+#define RASFP_Slip 0x00000002
+#define RASFP_Ras 0x00000004
+#define RASDT_Modem TEXT("modem")
+#define RASDT_Isdn TEXT("isdn")
+#define RASDT_X25 TEXT("x25")
+#define RASDT_Vpn TEXT("vpn")
+#define RASDT_Pad TEXT("pad")
+#define RASDT_Generic TEXT("GENERIC")
+#define RASDT_Serial TEXT("SERIAL")
+#define RASDT_FrameRelay TEXT("FRAMERELAY")
+#define RASDT_Atm TEXT("ATM")
+#define RASDT_Sonet TEXT("SONET")
+#define RASDT_SW56 TEXT("SW56")
+#define RASDT_Irda TEXT("IRDA")
+#define RASDT_Parallel TEXT("PARALLEL")
+#define RASET_Phone 1
+#define RASET_Vpn 2
+#define RASET_Direct 3
+#define RASET_Internet 4
+#if (WINVER >= 0x401)
+#define RASEO_SecureLocalFiles 0x00010000
+#define RASCN_Connection 0x00000001
+#define RASCN_Disconnection 0x00000002
+#define RASCN_BandwidthAdded 0x00000004
+#define RASCN_BandwidthRemoved 0x00000008
+#define RASEDM_DialAll 1
+#define RASEDM_DialAsNeeded 2
+#define RASIDS_Disabled 0xffffffff
+#define RASIDS_UseGlobalValue 0
+#define RASADFLG_PositionDlg 0x00000001
+#define RASCM_UserName 0x00000001
+#define RASCM_Password 0x00000002
+#define RASCM_Domain 0x00000004
+#define RASADP_DisableConnectionQuery 0
+#define RASADP_LoginSessionDisable 1
+#define RASADP_SavedAddressesLimit 2
+#define RASADP_FailedConnectionTimeout 3
+#define RASADP_ConnectionQueryTimeout 4
+#endif /* (WINVER >= 0x401) */
+#if (WINVER >= 0x500)
+#define RDEOPT_CustomDial 0x00001000
+#define RASLCPAP_PAP 0xC023
+#define RASLCPAP_SPAP 0xC027
+#define RASLCPAP_CHAP 0xC223
+#define RASLCPAP_EAP 0xC227
+#define RASLCPAD_CHAP_MD5 0x05
+#define RASLCPAD_CHAP_MS 0x80
+#define RASLCPAD_CHAP_MSV2 0x81
+#define RASLCPO_PFC 0x00000001
+#define RASLCPO_ACFC 0x00000002
+#define RASLCPO_SSHF 0x00000004
+#define RASLCPO_DES_56 0x00000008
+#define RASLCPO_3_DES 0x00000010
+#define RASCCPCA_MPPC 0x00000006
+#define RASCCPCA_STAC 0x00000005
+#define RASCCPO_Compression 0x00000001
+#define RASCCPO_HistoryLess 0x00000002
+#define RASCCPO_Encryption56bit 0x00000010
+#define RASCCPO_Encryption40bit 0x00000020
+#define RASCCPO_Encryption128bit 0x00000040
+#define RASEO_RequireEAP 0x00020000
+#define RASEO_RequirePAP 0x00040000
+#define RASEO_RequireSPAP 0x00080000
+#define RASEO_Custom 0x00100000
+#define RASEO_PreviewPhoneNumber 0x00200000
+#define RASEO_SharedPhoneNumbers 0x00800000
+#define RASEO_PreviewUserPw 0x01000000
+#define RASEO_PreviewDomain 0x02000000
+#define RASEO_ShowDialingProgress 0x04000000
+#define RASEO_RequireCHAP 0x08000000
+#define RASEO_RequireMsCHAP 0x10000000
+#define RASEO_RequireMsCHAP2 0x20000000
+#define RASEO_RequireW95MSCHAP 0x40000000
+#define RASEO_CustomScript 0x80000000
+#define RASIPO_VJ 0x00000001
+#define RCD_SingleUser 0
+#define RCD_AllUsers 0x00000001
+#define RCD_Eap 0x00000002
+#define RASEAPF_NonInteractive 0x00000002
+#define RASEAPF_Logon 0x00000004
+#define RASEAPF_Preview 0x00000008
+#define ET_40Bit 1
+#define ET_128Bit 2
+#define ET_None 0
+#define ET_Require 1
+#define ET_RequireMax 2
+#define ET_Optional 3
+#endif /* (WINVER >= 0x500) */
+
+#define RASCS_PAUSED 0x1000
+#define RASCS_DONE 0x2000
+typedef enum tagRASCONNSTATE {
+ RASCS_OpenPort = 0,
+ RASCS_PortOpened,
+ RASCS_ConnectDevice,
+ RASCS_DeviceConnected,
+ RASCS_AllDevicesConnected,
+ RASCS_Authenticate,
+ RASCS_AuthNotify,
+ RASCS_AuthRetry,
+ RASCS_AuthCallback,
+ RASCS_AuthChangePassword,
+ RASCS_AuthProject,
+ RASCS_AuthLinkSpeed,
+ RASCS_AuthAck,
+ RASCS_ReAuthenticate,
+ RASCS_Authenticated,
+ RASCS_PrepareForCallback,
+ RASCS_WaitForModemReset,
+ RASCS_WaitForCallback,
+ RASCS_Projected,
+ RASCS_StartAuthentication,
+ RASCS_CallbackComplete,
+ RASCS_LogonNetwork,
+ RASCS_SubEntryConnected,
+ RASCS_SubEntryDisconnected,
+ RASCS_Interactive = RASCS_PAUSED,
+ RASCS_RetryAuthentication,
+ RASCS_CallbackSetByCaller,
+ RASCS_PasswordExpired,
+#if (WINVER >= 0x500)
+ RASCS_InvokeEapUI,
+#endif
+ RASCS_Connected = RASCS_DONE,
+ RASCS_Disconnected
+} RASCONNSTATE, *LPRASCONNSTATE;
+
+typedef enum tagRASPROJECTION {
+ RASP_Amb = 0x10000,
+ RASP_PppNbf = 0x803F,
+ RASP_PppIpx = 0x802B,
+ RASP_PppIp = 0x8021,
+#if (WINVER >= 0x500)
+ RASP_PppCcp = 0x80FD,
+#endif
+ RASP_PppLcp = 0xC021,
+ RASP_Slip = 0x20000
+} RASPROJECTION, *LPRASPROJECTION;
+
+DECLARE_HANDLE (HRASCONN);
+typedef HRASCONN* LPHRASCONN;
+
+typedef struct tagRASCONNW {
+ DWORD dwSize;
+ HRASCONN hrasconn;
+ WCHAR szEntryName[RAS_MaxEntryName + 1];
+#if (WINVER >= 0x400)
+ WCHAR szDeviceType[RAS_MaxDeviceType + 1];
+ WCHAR szDeviceName[RAS_MaxDeviceName + 1];
+#endif
+#if (WINVER >= 0x401)
+ WCHAR szPhonebook[MAX_PATH];
+ DWORD dwSubEntry;
+#endif
+#if (WINVER >= 0x500)
+ GUID guidEntry;
+#endif
+#if (WINVER >= 0x501)
+ DWORD dwFlags;
+ LUID luid;
+#endif
+} RASCONNW, *LPRASCONNW;
+
+typedef struct tagRASCONNA {
+ DWORD dwSize;
+ HRASCONN hrasconn;
+ CHAR szEntryName[RAS_MaxEntryName + 1];
+#if (WINVER >= 0x400)
+ CHAR szDeviceType[RAS_MaxDeviceType + 1];
+ CHAR szDeviceName[RAS_MaxDeviceName + 1];
+#endif
+#if (WINVER >= 0x401)
+ CHAR szPhonebook[MAX_PATH];
+ DWORD dwSubEntry;
+#endif
+#if (WINVER >= 0x500)
+ GUID guidEntry;
+#endif
+#if (WINVER >= 0x501)
+ DWORD dwFlags;
+ LUID luid;
+#endif
+} RASCONNA, *LPRASCONNA;
+
+typedef struct tagRASCONNSTATUSW {
+ DWORD dwSize;
+ RASCONNSTATE rasconnstate;
+ DWORD dwError;
+ WCHAR szDeviceType[RAS_MaxDeviceType + 1];
+ WCHAR szDeviceName[RAS_MaxDeviceName + 1];
+#if (WINVER >= 0x401)
+ WCHAR szPhoneNumber[RAS_MaxPhoneNumber + 1];
+#endif
+} RASCONNSTATUSW, *LPRASCONNSTATUSW;
+
+typedef struct tagRASCONNSTATUSA {
+ DWORD dwSize;
+ RASCONNSTATE rasconnstate;
+ DWORD dwError;
+ CHAR szDeviceType[RAS_MaxDeviceType + 1];
+ CHAR szDeviceName[RAS_MaxDeviceName + 1];
+#if (WINVER >= 0x401)
+ CHAR szPhoneNumber[RAS_MaxPhoneNumber + 1];
+#endif
+} RASCONNSTATUSA, *LPRASCONNSTATUSA;
+
+typedef struct tagRASDIALPARAMSW {
+ DWORD dwSize;
+ WCHAR szEntryName[RAS_MaxEntryName + 1];
+ WCHAR szPhoneNumber[RAS_MaxPhoneNumber + 1];
+ WCHAR szCallbackNumber[RAS_MaxCallbackNumber + 1];
+ WCHAR szUserName[UNLEN + 1];
+ WCHAR szPassword[PWLEN + 1];
+ WCHAR szDomain[DNLEN + 1];
+#if (WINVER >= 0x401)
+ DWORD dwSubEntry;
+ ULONG_PTR dwCallbackId;
+#endif
+} RASDIALPARAMSW, *LPRASDIALPARAMSW;
+
+typedef struct tagRASDIALPARAMSA {
+ DWORD dwSize;
+ CHAR szEntryName[RAS_MaxEntryName + 1];
+ CHAR szPhoneNumber[RAS_MaxPhoneNumber + 1];
+ CHAR szCallbackNumber[RAS_MaxCallbackNumber + 1];
+ CHAR szUserName[UNLEN + 1];
+ CHAR szPassword[PWLEN + 1];
+ CHAR szDomain[DNLEN + 1];
+#if (WINVER >= 0x401)
+ DWORD dwSubEntry;
+ ULONG_PTR dwCallbackId;
+#endif
+} RASDIALPARAMSA, *LPRASDIALPARAMSA;
+
+#if (WINVER >= 0x500)
+typedef struct tagRASEAPINFO {
+ DWORD dwSizeofEapInfo;
+ BYTE *pbEapInfo;
+} RASEAPINFO;
+#endif
+
+typedef struct tagRASDIALEXTENSIONS {
+ DWORD dwSize;
+ DWORD dwfOptions;
+ HWND hwndParent;
+ ULONG_PTR reserved;
+#if (WINVER >= 0x500)
+ ULONG_PTR reserved1;
+ RASEAPINFO RasEapInfo;
+#endif
+} RASDIALEXTENSIONS, *LPRASDIALEXTENSIONS;
+
+typedef struct tagRASENTRYNAMEW {
+ DWORD dwSize;
+ WCHAR szEntryName[RAS_MaxEntryName + 1];
+#if (WINVER >= 0x500)
+ DWORD dwFlags;
+ WCHAR szPhonebookPath[MAX_PATH + 1];
+#endif
+} RASENTRYNAMEW, *LPRASENTRYNAMEW;
+
+typedef struct tagRASENTRYNAMEA {
+ DWORD dwSize;
+ CHAR szEntryName[RAS_MaxEntryName + 1];
+#if (WINVER >= 0x500)
+ DWORD dwFlags;
+ CHAR szPhonebookPath[MAX_PATH + 1];
+#endif
+} RASENTRYNAMEA, *LPRASENTRYNAMEA;
+
+typedef struct tagRASAMBW {
+ DWORD dwSize;
+ DWORD dwError;
+ WCHAR szNetBiosError[NETBIOS_NAME_LEN + 1];
+ BYTE bLana;
+} RASAMBW, *LPRASAMBW;
+
+typedef struct tagRASAMBA {
+ DWORD dwSize;
+ DWORD dwError;
+ CHAR szNetBiosError[NETBIOS_NAME_LEN + 1];
+ BYTE bLana;
+} RASAMBA, *LPRASAMBA;
+
+typedef struct tagRASPPPNBFW {
+ DWORD dwSize;
+ DWORD dwError;
+ DWORD dwNetBiosError;
+ WCHAR szNetBiosError[NETBIOS_NAME_LEN + 1];
+ WCHAR szWorkstationName[NETBIOS_NAME_LEN + 1];
+ BYTE bLana;
+} RASPPPNBFW, *LPRASPPPNBFW;
+
+typedef struct tagRASPPPNBFA {
+ DWORD dwSize;
+ DWORD dwError;
+ DWORD dwNetBiosError;
+ CHAR szNetBiosError[NETBIOS_NAME_LEN + 1];
+ CHAR szWorkstationName[NETBIOS_NAME_LEN + 1];
+ BYTE bLana;
+} RASPPPNBFA, *LPRASPPPNBFA;
+
+typedef struct tagRASIPXW {
+ DWORD dwSize;
+ DWORD dwError;
+ WCHAR szIpxAddress[RAS_MaxIpxAddress + 1];
+} RASPPPIPXW, *LPRASPPPIPXW;
+
+typedef struct tagRASIPXA {
+ DWORD dwSize;
+ DWORD dwError;
+ CHAR szIpxAddress[RAS_MaxIpxAddress + 1];
+} RASPPPIPXA, *LPRASPPPIPXA;
+
+typedef struct tagRASPPPIPW {
+ DWORD dwSize;
+ DWORD dwError;
+ WCHAR szIpAddress[RAS_MaxIpAddress + 1];
+#ifndef WINNT35COMPATIBLE
+ WCHAR szServerIpAddress[RAS_MaxIpAddress + 1];
+#endif
+#if (WINVER >= 0x500)
+ DWORD dwOptions;
+ DWORD dwServerOptions;
+#endif
+} RASPPPIPW, *LPRASPPPIPW;
+
+typedef struct tagRASPPPIPA {
+ DWORD dwSize;
+ DWORD dwError;
+ CHAR szIpAddress[RAS_MaxIpAddress + 1];
+#ifndef WINNT35COMPATIBLE
+ CHAR szServerIpAddress[RAS_MaxIpAddress + 1];
+#endif
+#if (WINVER >= 0x500)
+ DWORD dwOptions;
+ DWORD dwServerOptions;
+#endif
+} RASPPPIPA, *LPRASPPPIPA;
+
+typedef struct tagRASPPPLCPW {
+ DWORD dwSize;
+ BOOL fBundled;
+#if (WINVER >= 0x500)
+ DWORD dwError;
+ DWORD dwAuthenticationProtocol;
+ DWORD dwAuthenticationData;
+ DWORD dwEapTypeId;
+ DWORD dwServerAuthenticationProtocol;
+ DWORD dwServerAuthenticationData;
+ DWORD dwServerEapTypeId;
+ BOOL fMultilink;
+ DWORD dwTerminateReason;
+ DWORD dwServerTerminateReason;
+ WCHAR szReplyMessage[RAS_MaxReplyMessage];
+ DWORD dwOptions;
+ DWORD dwServerOptions;
+#endif
+} RASPPPLCPW, *LPRASPPPLCPW;
+
+typedef struct tagRASPPPLCPA {
+ DWORD dwSize;
+ BOOL fBundled;
+#if (WINVER >= 0x500)
+ DWORD dwError;
+ DWORD dwAuthenticationProtocol;
+ DWORD dwAuthenticationData;
+ DWORD dwEapTypeId;
+ DWORD dwServerAuthenticationProtocol;
+ DWORD dwServerAuthenticationData;
+ DWORD dwServerEapTypeId;
+ BOOL fMultilink;
+ DWORD dwTerminateReason;
+ DWORD dwServerTerminateReason;
+ CHAR szReplyMessage[RAS_MaxReplyMessage];
+ DWORD dwOptions;
+ DWORD dwServerOptions;
+#endif
+} RASPPPLCPA, *LPRASPPPLCPA;
+
+typedef struct tagRASSLIPW {
+ DWORD dwSize;
+ DWORD dwError;
+ WCHAR szIpAddress[RAS_MaxIpAddress + 1];
+} RASSLIPW, *LPRASSLIPW;
+
+
+typedef struct tagRASSLIPA {
+ DWORD dwSize;
+ DWORD dwError;
+ CHAR szIpAddress[RAS_MaxIpAddress + 1];
+} RASSLIPA, *LPRASSLIPA;
+
+typedef struct tagRASDEVINFOW {
+ DWORD dwSize;
+ WCHAR szDeviceType[RAS_MaxDeviceType + 1];
+ WCHAR szDeviceName[RAS_MaxDeviceName + 1];
+} RASDEVINFOW, *LPRASDEVINFOW;
+
+typedef struct tagRASDEVINFOA {
+ DWORD dwSize;
+ CHAR szDeviceType[RAS_MaxDeviceType + 1];
+ CHAR szDeviceName[RAS_MaxDeviceName + 1];
+} RASDEVINFOA, *LPRASDEVINFOA;
+
+typedef struct tagRASCTRYINFO {
+ DWORD dwSize;
+ DWORD dwCountryID;
+ DWORD dwNextCountryID;
+ DWORD dwCountryCode;
+ DWORD dwCountryNameOffset;
+} RASCTRYINFO, *LPRASCTRYINFO;
+
+typedef RASCTRYINFO RASCTRYINFOW, *LPRASCTRYINFOW;
+typedef RASCTRYINFO RASCTRYINFOA, *LPRASCTRYINFOA;
+
+typedef struct tagRASIPADDR {
+ BYTE a;
+ BYTE b;
+ BYTE c;
+ BYTE d;
+} RASIPADDR;
+
+typedef struct tagRASENTRYW {
+ DWORD dwSize;
+ DWORD dwfOptions;
+ DWORD dwCountryID;
+ DWORD dwCountryCode;
+ WCHAR szAreaCode[RAS_MaxAreaCode + 1];
+ WCHAR szLocalPhoneNumber[RAS_MaxPhoneNumber + 1];
+ DWORD dwAlternateOffset;
+ RASIPADDR ipaddr;
+ RASIPADDR ipaddrDns;
+ RASIPADDR ipaddrDnsAlt;
+ RASIPADDR ipaddrWins;
+ RASIPADDR ipaddrWinsAlt;
+ DWORD dwFrameSize;
+ DWORD dwfNetProtocols;
+ DWORD dwFramingProtocol;
+ WCHAR szScript[MAX_PATH];
+ WCHAR szAutodialDll[MAX_PATH];
+ WCHAR szAutodialFunc[MAX_PATH];
+ WCHAR szDeviceType[RAS_MaxDeviceType + 1];
+ WCHAR szDeviceName[RAS_MaxDeviceName + 1];
+ WCHAR szX25PadType[RAS_MaxPadType + 1];
+ WCHAR szX25Address[RAS_MaxX25Address + 1];
+ WCHAR szX25Facilities[RAS_MaxFacilities + 1];
+ WCHAR szX25UserData[RAS_MaxUserData + 1];
+ DWORD dwChannels;
+ DWORD dwReserved1;
+ DWORD dwReserved2;
+#if (WINVER >= 0x401)
+ DWORD dwSubEntries;
+ DWORD dwDialMode;
+ DWORD dwDialExtraPercent;
+ DWORD dwDialExtraSampleSeconds;
+ DWORD dwHangUpExtraPercent;
+ DWORD dwHangUpExtraSampleSeconds;
+ DWORD dwIdleDisconnectSeconds;
+#endif
+#if (WINVER >= 0x500)
+ DWORD dwType;
+ DWORD dwEncryptionType;
+ DWORD dwCustomAuthKey;
+ GUID guidId;
+ WCHAR szCustomDialDll[MAX_PATH];
+ DWORD dwVpnStrategy;
+#endif
+#if (WINVER >= 0x501)
+ DWORD dwfOptions2;
+ DWORD dwfOptions3;
+ WCHAR szDnsSuffix[RAS_MaxDnsSuffix];
+ DWORD dwTcpWindowSize;
+ WCHAR szPrerequisitePbk[MAX_PATH];
+ WCHAR szPrerequisiteEntry[RAS_MaxEntryName + 1];
+ DWORD dwRedialCount;
+ DWORD dwRedialPause;
+#endif
+} RASENTRYW, *LPRASENTRYW;
+
+typedef struct tagRASENTRYA {
+ DWORD dwSize;
+ DWORD dwfOptions;
+ DWORD dwCountryID;
+ DWORD dwCountryCode;
+ CHAR szAreaCode[RAS_MaxAreaCode + 1];
+ CHAR szLocalPhoneNumber[RAS_MaxPhoneNumber + 1];
+ DWORD dwAlternateOffset;
+ RASIPADDR ipaddr;
+ RASIPADDR ipaddrDns;
+ RASIPADDR ipaddrDnsAlt;
+ RASIPADDR ipaddrWins;
+ RASIPADDR ipaddrWinsAlt;
+ DWORD dwFrameSize;
+ DWORD dwfNetProtocols;
+ DWORD dwFramingProtocol;
+ CHAR szScript[MAX_PATH];
+ CHAR szAutodialDll[MAX_PATH];
+ CHAR szAutodialFunc[MAX_PATH];
+ CHAR szDeviceType[RAS_MaxDeviceType + 1];
+ CHAR szDeviceName[RAS_MaxDeviceName + 1];
+ CHAR szX25PadType[RAS_MaxPadType + 1];
+ CHAR szX25Address[RAS_MaxX25Address + 1];
+ CHAR szX25Facilities[RAS_MaxFacilities + 1];
+ CHAR szX25UserData[RAS_MaxUserData + 1];
+ DWORD dwChannels;
+ DWORD dwReserved1;
+ DWORD dwReserved2;
+#if (WINVER >= 0x401)
+ DWORD dwSubEntries;
+ DWORD dwDialMode;
+ DWORD dwDialExtraPercent;
+ DWORD dwDialExtraSampleSeconds;
+ DWORD dwHangUpExtraPercent;
+ DWORD dwHangUpExtraSampleSeconds;
+ DWORD dwIdleDisconnectSeconds;
+#endif
+#if (WINVER >= 0x500)
+ DWORD dwType;
+ DWORD dwEncryptionType;
+ DWORD dwCustomAuthKey;
+ GUID guidId;
+ CHAR szCustomDialDll[MAX_PATH];
+ DWORD dwVpnStrategy;
+#endif
+#if (WINVER >= 0x501)
+ DWORD dwfOptions2;
+ DWORD dwfOptions3;
+ CHAR szDnsSuffix[RAS_MaxDnsSuffix];
+ DWORD dwTcpWindowSize;
+ CHAR szPrerequisitePbk[MAX_PATH];
+ CHAR szPrerequisiteEntry[RAS_MaxEntryName + 1];
+ DWORD dwRedialCount;
+ DWORD dwRedialPause;
+#endif
+} RASENTRYA, *LPRASENTRYA;
+
+
+#if (WINVER >= 0x401)
+typedef struct tagRASADPARAMS {
+ DWORD dwSize;
+ HWND hwndOwner;
+ DWORD dwFlags;
+ LONG xDlg;
+ LONG yDlg;
+} RASADPARAMS, *LPRASADPARAMS;
+
+typedef struct tagRASSUBENTRYW {
+ DWORD dwSize;
+ DWORD dwfFlags;
+ WCHAR szDeviceType[RAS_MaxDeviceType + 1];
+ WCHAR szDeviceName[RAS_MaxDeviceName + 1];
+ WCHAR szLocalPhoneNumber[RAS_MaxPhoneNumber + 1];
+ DWORD dwAlternateOffset;
+} RASSUBENTRYW, *LPRASSUBENTRYW;
+
+typedef struct tagRASSUBENTRYA {
+ DWORD dwSize;
+ DWORD dwfFlags;
+ CHAR szDeviceType[RAS_MaxDeviceType + 1];
+ CHAR szDeviceName[RAS_MaxDeviceName + 1];
+ CHAR szLocalPhoneNumber[RAS_MaxPhoneNumber + 1];
+ DWORD dwAlternateOffset;
+} RASSUBENTRYA, *LPRASSUBENTRYA;
+
+typedef struct tagRASCREDENTIALSW {
+ DWORD dwSize;
+ DWORD dwMask;
+ WCHAR szUserName[UNLEN + 1];
+ WCHAR szPassword[PWLEN + 1];
+ WCHAR szDomain[DNLEN + 1];
+} RASCREDENTIALSW, *LPRASCREDENTIALSW;
+
+typedef struct tagRASCREDENTIALSA {
+ DWORD dwSize;
+ DWORD dwMask;
+ CHAR szUserName[UNLEN + 1];
+ CHAR szPassword[PWLEN + 1];
+ CHAR szDomain[DNLEN + 1];
+} RASCREDENTIALSA, *LPRASCREDENTIALSA;
+
+typedef struct tagRASAUTODIALENTRYW {
+ DWORD dwSize;
+ DWORD dwFlags;
+ DWORD dwDialingLocation;
+ WCHAR szEntry[RAS_MaxEntryName + 1];
+} RASAUTODIALENTRYW, *LPRASAUTODIALENTRYW;
+
+typedef struct tagRASAUTODIALENTRYA {
+ DWORD dwSize;
+ DWORD dwFlags;
+ DWORD dwDialingLocation;
+ CHAR szEntry[RAS_MaxEntryName + 1];
+} RASAUTODIALENTRYA, *LPRASAUTODIALENTRYA;
+#endif /* (WINVER >= 0x401) */
+
+#if (WINVER >= 0x500)
+typedef struct tagRASPPPCCP {
+ DWORD dwSize;
+ DWORD dwError;
+ DWORD dwCompressionAlgorithm;
+ DWORD dwOptions;
+ DWORD dwServerCompressionAlgorithm;
+ DWORD dwServerOptions;
+} RASPPPCCP, *LPRASPPPCCP;
+
+typedef struct tagRASEAPUSERIDENTITYW {
+ WCHAR szUserName[UNLEN + 1];
+ DWORD dwSizeofEapInfo;
+ BYTE pbEapInfo[1];
+} RASEAPUSERIDENTITYW, *LPRASEAPUSERIDENTITYW;
+
+typedef struct tagRASEAPUSERIDENTITYA {
+ CHAR szUserName[UNLEN + 1];
+ DWORD dwSizeofEapInfo;
+ BYTE pbEapInfo[1];
+} RASEAPUSERIDENTITYA, *LPRASEAPUSERIDENTITYA;
+
+typedef struct tagRAS_STATS {
+ DWORD dwSize;
+ DWORD dwBytesXmited;
+ DWORD dwBytesRcved;
+ DWORD dwFramesXmited;
+ DWORD dwFramesRcved;
+ DWORD dwCrcErr;
+ DWORD dwTimeoutErr;
+ DWORD dwAlignmentErr;
+ DWORD dwHardwareOverrunErr;
+ DWORD dwFramingErr;
+ DWORD dwBufferOverrunErr;
+ DWORD dwCompressionRatioIn;
+ DWORD dwCompressionRatioOut;
+ DWORD dwBps;
+ DWORD dwConnectDuration;
+} RAS_STATS, *PRAS_STATS;
+#endif /* (WINVER >= 0x500) */
+
+
+/* UNICODE typedefs for structures*/
+#ifdef UNICODE
+typedef RASCONNW RASCONN, *LPRASCONN;
+typedef RASENTRYW RASENTRY, *LPRASENTRY;
+typedef RASCONNSTATUSW RASCONNSTATUS, *LPRASCONNSTATUS;
+typedef RASDIALPARAMSW RASDIALPARAMS, *LPRASDIALPARAMS;
+typedef RASAMBW RASAMB, *LPRASAM;
+typedef RASPPPNBFW RASPPPNBF, *LPRASPPPNBF;
+typedef RASPPPIPXW RASPPPIPX, *LPRASPPPIPX;
+typedef RASPPPIPW RASPPPIP, *LPRASPPPIP;
+typedef RASPPPLCPW RASPPPLCP, *LPRASPPPLCP;
+typedef RASSLIPW RASSLIP, *LPRASSLIP;
+typedef RASDEVINFOW RASDEVINFO, *LPRASDEVINFO;
+typedef RASENTRYNAMEW RASENTRYNAME, *LPRASENTRYNAME;
+
+#if (WINVER >= 0x401)
+typedef RASSUBENTRYW RASSUBENTRY, *LPRASSUBENTRY;
+typedef RASCREDENTIALSW RASCREDENTIALS, *LPRASCREDENTIALS;
+typedef RASAUTODIALENTRYW RASAUTODIALENTRY, *LPRASAUTODIALENTRY;
+#endif /* (WINVER >= 0x401) */
+
+#if (WINVER >= 0x500)
+typedef RASEAPUSERIDENTITYW RASEAPUSERIDENTITY, *LPRASEAPUSERIDENTITY;
+#endif /* (WINVER >= 0x500) */
+
+#else /* ! defined UNICODE */
+typedef RASCONNA RASCONN, *LPRASCONN;
+typedef RASENTRYA RASENTRY, *LPRASENTRY;
+typedef RASCONNSTATUSA RASCONNSTATUS, *LPRASCONNSTATUS;
+typedef RASDIALPARAMSA RASDIALPARAMS, *LPRASDIALPARAMS;
+typedef RASAMBA RASAMB, *LPRASAM;
+typedef RASPPPNBFA RASPPPNBF, *LPRASPPPNBF;
+typedef RASPPPIPXA RASPPPIPX, *LPRASPPPIPX;
+typedef RASPPPIPA RASPPPIP, *LPRASPPPIP;
+typedef RASPPPLCPA RASPPPLCP, *LPRASPPPLCP;
+typedef RASSLIPA RASSLIP, *LPRASSLIP;
+typedef RASDEVINFOA RASDEVINFO, *LPRASDEVINFO;
+typedef RASENTRYNAMEA RASENTRYNAME, *LPRASENTRYNAME;
+
+#if (WINVER >= 0x401)
+typedef RASSUBENTRYA RASSUBENTRY, *LPRASSUBENTRY;
+typedef RASCREDENTIALSA RASCREDENTIALS, *LPRASCREDENTIALS;
+typedef RASAUTODIALENTRYA RASAUTODIALENTRY, *LPRASAUTODIALENTRY;
+#endif /*(WINVER >= 0x401)*/
+#if (WINVER >= 0x500)
+typedef RASEAPUSERIDENTITYA RASEAPUSERIDENTITY, *LPRASEAPUSERIDENTITY;
+#endif /* (WINVER >= 0x500) */
+#endif /* ! UNICODE */
+
+/* Callback prototypes */
+typedef BOOL (WINAPI * ORASADFUNC) (HWND, LPSTR, DWORD, LPDWORD); /* deprecated */
+typedef VOID (WINAPI * RASDIALFUNC) (UINT, RASCONNSTATE, DWORD);
+typedef VOID (WINAPI * RASDIALFUNC1) (HRASCONN, UINT, RASCONNSTATE, DWORD,
+ DWORD);
+typedef DWORD (WINAPI * RASDIALFUNC2) (ULONG_PTR, DWORD, HRASCONN, UINT,
+ RASCONNSTATE, DWORD, DWORD);
+
+/* External functions */
+DWORD APIENTRY RasDialA (LPRASDIALEXTENSIONS, LPCSTR, LPRASDIALPARAMSA,
+ DWORD, LPVOID, LPHRASCONN);
+DWORD APIENTRY RasDialW (LPRASDIALEXTENSIONS, LPCWSTR, LPRASDIALPARAMSW,
+ DWORD, LPVOID, LPHRASCONN);
+DWORD APIENTRY RasEnumConnectionsA (LPRASCONNA, LPDWORD, LPDWORD);
+DWORD APIENTRY RasEnumConnectionsW (LPRASCONNW, LPDWORD, LPDWORD);
+DWORD APIENTRY RasEnumEntriesA (LPCSTR, LPCSTR, LPRASENTRYNAMEA, LPDWORD,
+ LPDWORD);
+DWORD APIENTRY RasEnumEntriesW (LPCWSTR, LPCWSTR, LPRASENTRYNAMEW, LPDWORD,
+ LPDWORD);
+DWORD APIENTRY RasGetConnectStatusA (HRASCONN, LPRASCONNSTATUSA);
+DWORD APIENTRY RasGetConnectStatusW (HRASCONN, LPRASCONNSTATUSW);
+DWORD APIENTRY RasGetErrorStringA (UINT, LPSTR, DWORD);
+DWORD APIENTRY RasGetErrorStringW (UINT, LPWSTR, DWORD);
+DWORD APIENTRY RasHangUpA (HRASCONN);
+DWORD APIENTRY RasHangUpW (HRASCONN);
+DWORD APIENTRY RasGetProjectionInfoA (HRASCONN, RASPROJECTION, LPVOID,
+ LPDWORD);
+DWORD APIENTRY RasGetProjectionInfoW (HRASCONN, RASPROJECTION, LPVOID,
+ LPDWORD);
+DWORD APIENTRY RasCreatePhonebookEntryA (HWND, LPCSTR);
+DWORD APIENTRY RasCreatePhonebookEntryW (HWND, LPCWSTR);
+DWORD APIENTRY RasEditPhonebookEntryA (HWND, LPCSTR, LPCSTR);
+DWORD APIENTRY RasEditPhonebookEntryW (HWND, LPCWSTR, LPCWSTR);
+DWORD APIENTRY RasSetEntryDialParamsA (LPCSTR, LPRASDIALPARAMSA, BOOL);
+DWORD APIENTRY RasSetEntryDialParamsW (LPCWSTR, LPRASDIALPARAMSW, BOOL);
+DWORD APIENTRY RasGetEntryDialParamsA (LPCSTR, LPRASDIALPARAMSA, LPBOOL);
+DWORD APIENTRY RasGetEntryDialParamsW (LPCWSTR, LPRASDIALPARAMSW, LPBOOL);
+DWORD APIENTRY RasEnumDevicesA (LPRASDEVINFOA, LPDWORD, LPDWORD);
+DWORD APIENTRY RasEnumDevicesW (LPRASDEVINFOW, LPDWORD, LPDWORD);
+DWORD APIENTRY RasGetCountryInfoA (LPRASCTRYINFOA, LPDWORD);
+DWORD APIENTRY RasGetCountryInfoW (LPRASCTRYINFOW, LPDWORD);
+DWORD APIENTRY RasGetEntryPropertiesA (LPCSTR, LPCSTR, LPRASENTRYA, LPDWORD,
+ LPBYTE, LPDWORD);
+DWORD APIENTRY RasGetEntryPropertiesW (LPCWSTR, LPCWSTR, LPRASENTRYW,
+ LPDWORD, LPBYTE, LPDWORD);
+DWORD APIENTRY RasSetEntryPropertiesA (LPCSTR, LPCSTR, LPRASENTRYA, DWORD,
+ LPBYTE, DWORD);
+DWORD APIENTRY RasSetEntryPropertiesW (LPCWSTR, LPCWSTR, LPRASENTRYW, DWORD,
+ LPBYTE, DWORD);
+DWORD APIENTRY RasRenameEntryA (LPCSTR, LPCSTR, LPCSTR);
+DWORD APIENTRY RasRenameEntryW (LPCWSTR, LPCWSTR, LPCWSTR);
+DWORD APIENTRY RasDeleteEntryA (LPCSTR, LPCSTR);
+DWORD APIENTRY RasDeleteEntryW (LPCWSTR, LPCWSTR);
+DWORD APIENTRY RasValidateEntryNameA (LPCSTR, LPCSTR);
+DWORD APIENTRY RasValidateEntryNameW (LPCWSTR, LPCWSTR);
+
+#if (WINVER >= 0x401)
+typedef BOOL (WINAPI * RASADFUNCA) (LPSTR, LPSTR, LPRASADPARAMS, LPDWORD);
+typedef BOOL (WINAPI * RASADFUNCW) (LPWSTR, LPWSTR, LPRASADPARAMS, LPDWORD);
+
+DWORD APIENTRY RasGetSubEntryHandleA (HRASCONN, DWORD, LPHRASCONN);
+DWORD APIENTRY RasGetSubEntryHandleW (HRASCONN, DWORD, LPHRASCONN);
+DWORD APIENTRY RasGetCredentialsA (LPCSTR, LPCSTR, LPRASCREDENTIALSA);
+DWORD APIENTRY RasGetCredentialsW (LPCWSTR, LPCWSTR, LPRASCREDENTIALSW);
+DWORD APIENTRY RasSetCredentialsA (LPCSTR, LPCSTR, LPRASCREDENTIALSA, BOOL);
+DWORD APIENTRY RasSetCredentialsW (LPCWSTR, LPCWSTR, LPRASCREDENTIALSW, BOOL);
+DWORD APIENTRY RasConnectionNotificationA (HRASCONN, HANDLE, DWORD);
+DWORD APIENTRY RasConnectionNotificationW (HRASCONN, HANDLE, DWORD);
+DWORD APIENTRY RasGetSubEntryPropertiesA (LPCSTR, LPCSTR, DWORD,
+ LPRASSUBENTRYA, LPDWORD, LPBYTE, LPDWORD);
+DWORD APIENTRY RasGetSubEntryPropertiesW (LPCWSTR, LPCWSTR, DWORD,
+ LPRASSUBENTRYW, LPDWORD, LPBYTE, LPDWORD);
+DWORD APIENTRY RasSetSubEntryPropertiesA (LPCSTR, LPCSTR, DWORD,
+ LPRASSUBENTRYA, DWORD, LPBYTE, DWORD);
+DWORD APIENTRY RasSetSubEntryPropertiesW (LPCWSTR, LPCWSTR, DWORD,
+ LPRASSUBENTRYW, DWORD, LPBYTE, DWORD);
+DWORD APIENTRY RasGetAutodialAddressA (LPCSTR, LPDWORD, LPRASAUTODIALENTRYA,
+ LPDWORD, LPDWORD);
+DWORD APIENTRY RasGetAutodialAddressW (LPCWSTR, LPDWORD,
+ LPRASAUTODIALENTRYW, LPDWORD, LPDWORD);
+DWORD APIENTRY RasSetAutodialAddressA (LPCSTR, DWORD, LPRASAUTODIALENTRYA,
+ DWORD, DWORD);
+DWORD APIENTRY RasSetAutodialAddressW (LPCWSTR, DWORD, LPRASAUTODIALENTRYW,
+ DWORD, DWORD);
+DWORD APIENTRY RasEnumAutodialAddressesA (LPSTR *, LPDWORD, LPDWORD);
+DWORD APIENTRY RasEnumAutodialAddressesW (LPWSTR *, LPDWORD, LPDWORD);
+DWORD APIENTRY RasGetAutodialEnableA (DWORD, LPBOOL);
+DWORD APIENTRY RasGetAutodialEnableW (DWORD, LPBOOL);
+DWORD APIENTRY RasSetAutodialEnableA (DWORD, BOOL);
+DWORD APIENTRY RasSetAutodialEnableW (DWORD, BOOL);
+DWORD APIENTRY RasGetAutodialParamA (DWORD, LPVOID, LPDWORD);
+DWORD APIENTRY RasGetAutodialParamW (DWORD, LPVOID, LPDWORD);
+DWORD APIENTRY RasSetAutodialParamA (DWORD, LPVOID, DWORD);
+DWORD APIENTRY RasSetAutodialParamW (DWORD, LPVOID, DWORD);
+#endif
+
+#if (WINVER >= 0x500)
+typedef DWORD (WINAPI * RasCustomHangUpFn) (HRASCONN);
+typedef DWORD (WINAPI * RasCustomDeleteEntryNotifyFn) (LPCTSTR, LPCTSTR, DWORD);
+typedef DWORD (WINAPI * RasCustomDialFn) (HINSTANCE, LPRASDIALEXTENSIONS,
+ LPCTSTR, LPRASDIALPARAMS, DWORD, LPVOID, LPHRASCONN, DWORD);
+
+DWORD APIENTRY RasInvokeEapUI (HRASCONN, DWORD, LPRASDIALEXTENSIONS, HWND);
+DWORD APIENTRY RasGetLinkStatistics (HRASCONN, DWORD, RAS_STATS*);
+DWORD APIENTRY RasGetConnectionStatistics (HRASCONN, RAS_STATS*);
+DWORD APIENTRY RasClearLinkStatistics (HRASCONN, DWORD);
+DWORD APIENTRY RasClearConnectionStatistics (HRASCONN);
+DWORD APIENTRY RasGetEapUserDataA (HANDLE, LPCSTR, LPCSTR, BYTE*, DWORD*);
+DWORD APIENTRY RasGetEapUserDataW (HANDLE, LPCWSTR, LPCWSTR, BYTE*, DWORD*);
+DWORD APIENTRY RasSetEapUserDataA (HANDLE, LPCSTR, LPCSTR, BYTE*, DWORD);
+DWORD APIENTRY RasSetEapUserDataW (HANDLE, LPCWSTR, LPCWSTR, BYTE*, DWORD);
+DWORD APIENTRY RasGetCustomAuthDataA (LPCSTR, LPCSTR, BYTE*, DWORD*);
+DWORD APIENTRY RasGetCustomAuthDataW (LPCWSTR, LPCWSTR, BYTE*, DWORD*);
+DWORD APIENTRY RasSetCustomAuthDataA (LPCSTR, LPCSTR, BYTE*, DWORD);
+DWORD APIENTRY RasSetCustomAuthDataW (LPCWSTR, LPCWSTR, BYTE*, DWORD);
+DWORD APIENTRY RasGetEapUserIdentityW (LPCWSTR, LPCWSTR, DWORD, HWND, LPRASEAPUSERIDENTITYW*);
+DWORD APIENTRY RasGetEapUserIdentityA (LPCSTR, LPCSTR, DWORD, HWND, LPRASEAPUSERIDENTITYA*);
+VOID APIENTRY RasFreeEapUserIdentityW (LPRASEAPUSERIDENTITYW);
+VOID APIENTRY RasFreeEapUserIdentityA (LPRASEAPUSERIDENTITYA);
+#endif /* (WINVER >= 0x500) */
+
+
+/* UNICODE defines for functions */
+#ifdef UNICODE
+#define RasDial RasDialW
+#define RasEnumConnections RasEnumConnectionsW
+#define RasEnumEntries RasEnumEntriesW
+#define RasGetConnectStatus RasGetConnectStatusW
+#define RasGetErrorString RasGetErrorStringW
+#define RasHangUp RasHangUpW
+#define RasGetProjectionInfo RasGetProjectionInfoW
+#define RasCreatePhonebookEntry RasCreatePhonebookEntryW
+#define RasEditPhonebookEntry RasEditPhonebookEntryW
+#define RasSetEntryDialParams RasSetEntryDialParamsW
+#define RasGetEntryDialParams RasGetEntryDialParamsW
+#define RasEnumDevices RasEnumDevicesW
+#define RasGetCountryInfo RasGetCountryInfoW
+#define RasGetEntryProperties RasGetEntryPropertiesW
+#define RasSetEntryProperties RasSetEntryPropertiesW
+#define RasRenameEntry RasRenameEntryW
+#define RasDeleteEntry RasDeleteEntryW
+#define RasValidateEntryName RasValidateEntryNameW
+#if (WINVER >= 0x401)
+#define RASADFUNC RASADFUNCW
+#define RasGetSubEntryHandle RasGetSubEntryHandleW
+#define RasConnectionNotification RasConnectionNotificationW
+#define RasGetSubEntryProperties RasGetSubEntryPropertiesW
+#define RasSetSubEntryProperties RasSetSubEntryPropertiesW
+#define RasGetCredentials RasGetCredentialsW
+#define RasSetCredentials RasSetCredentialsW
+#define RasGetAutodialAddress RasGetAutodialAddressW
+#define RasSetAutodialAddress RasSetAutodialAddressW
+#define RasEnumAutodialAddresses RasEnumAutodialAddressesW
+#define RasGetAutodialEnable RasGetAutodialEnableW
+#define RasSetAutodialEnable RasSetAutodialEnableW
+#define RasGetAutodialParam RasGetAutodialParamW
+#define RasSetAutodialParam RasSetAutodialParamW
+#endif /* (WINVER >= 0x401) */
+#if (WINVER >= 0x500)
+#define RasGetEapUserData RasGetEapUserDataW
+#define RasSetEapUserData RasSetEapUserDataW
+#define RasGetCustomAuthData RasGetCustomAuthDataW
+#define RasSetCustomAuthData RasSetCustomAuthDataW
+#define RasGetEapUserIdentity RasGetEapUserIdentityW
+#define RasFreeEapUserIdentity RasFreeEapUserIdentityW
+#endif /* (WINVER >= 0x500) */
+
+#else /* ! defined UNICODE */
+#define RasDial RasDialA
+#define RasEnumConnections RasEnumConnectionsA
+#define RasEnumEntries RasEnumEntriesA
+#define RasGetConnectStatus RasGetConnectStatusA
+#define RasGetErrorString RasGetErrorStringA
+#define RasHangUp RasHangUpA
+#define RasGetProjectionInfo RasGetProjectionInfoA
+#define RasCreatePhonebookEntry RasCreatePhonebookEntryA
+#define RasEditPhonebookEntry RasEditPhonebookEntryA
+#define RasSetEntryDialParams RasSetEntryDialParamsA
+#define RasGetEntryDialParams RasGetEntryDialParamsA
+#define RasEnumDevices RasEnumDevicesA
+#define RasGetCountryInfo RasGetCountryInfoA
+#define RasGetEntryProperties RasGetEntryPropertiesA
+#define RasSetEntryProperties RasSetEntryPropertiesA
+#define RasRenameEntry RasRenameEntryA
+#define RasDeleteEntry RasDeleteEntryA
+#define RasValidateEntryName RasValidateEntryNameA
+
+#if (WINVER >= 0x401)
+#define RASADFUNC RASADFUNCA
+#define RasGetSubEntryHandle RasGetSubEntryHandleA
+#define RasConnectionNotification RasConnectionNotificationA
+#define RasGetSubEntryProperties RasGetSubEntryPropertiesA
+#define RasSetSubEntryProperties RasSetSubEntryPropertiesA
+#define RasGetCredentials RasGetCredentialsA
+#define RasSetCredentials RasSetCredentialsA
+#define RasGetAutodialAddress RasGetAutodialAddressA
+#define RasSetAutodialAddress RasSetAutodialAddressA
+#define RasEnumAutodialAddressesRasEnumAutodialAddressesA
+#define RasGetAutodialEnable RasGetAutodialEnableA
+#define RasSetAutodialEnable RasSetAutodialEnableA
+#define RasGetAutodialParam RasGetAutodialParamA
+#define RasSetAutodialParam RasSetAutodialParamA
+#endif /*(WINVER >= 0x401)*/
+
+#if (WINVER >= 0x500)
+#define RasGetEapUserData RasGetEapUserDataA
+#define RasSetEapUserData RasSetEapUserDataA
+#define RasGetCustomAuthData RasGetCustomAuthDataA
+#define RasSetCustomAuthData RasSetCustomAuthDataA
+#define RasGetEapUserIdentity RasGetEapUserIdentityA
+#define RasFreeEapUserIdentity RasFreeEapUserIdentityA
+#endif /* (WINVER >= 0x500) */
+#endif /* ! UNICODE */
+
+#ifdef __cplusplus
+}
+#endif
+#include <poppack.h>
+#endif /* _RAS_H */
diff --git a/tcc/include/winapi/rasdlg.h b/tcc/include/winapi/rasdlg.h
new file mode 100644
index 0000000..6ba20da
--- /dev/null
+++ b/tcc/include/winapi/rasdlg.h
@@ -0,0 +1,152 @@
+#ifndef _RASDLG_H
+#define _RASDLG_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <ras.h>
+
+#define RASPBDEVENT_AddEntry 1
+#define RASPBDEVENT_EditEntry 2
+#define RASPBDEVENT_RemoveEntry 3
+#define RASPBDEVENT_DialEntry 4
+#define RASPBDEVENT_EditGlobals 5
+#define RASPBDEVENT_NoUser 6
+#define RASPBDEVENT_NoUserEdit 7
+
+#define RASPBDFLAG_PositionDlg 1
+#define RASPBDFLAG_ForceCloseOnDial 2
+#define RASPBDFLAG_NoUser 16
+
+#define RASEDFLAG_PositionDlg 1
+#define RASEDFLAG_NewEntry 2
+#define RASEDFLAG_CloneEntry 4
+
+#define RASDDFLAG_PositionDlg 1
+
+#ifndef RC_INVOKED
+#include <pshpack4.h>
+
+typedef struct tagRASENTRYDLGA
+{
+ DWORD dwSize;
+ HWND hwndOwner;
+ DWORD dwFlags;
+ LONG xDlg;
+ LONG yDlg;
+ CHAR szEntry[RAS_MaxEntryName + 1];
+ DWORD dwError;
+ ULONG_PTR reserved;
+ ULONG_PTR reserved2;
+} RASENTRYDLGA, *LPRASENTRYDLGA;
+typedef struct tagRASENTRYDLGW
+{
+ DWORD dwSize;
+ HWND hwndOwner;
+ DWORD dwFlags;
+ LONG xDlg;
+ LONG yDlg;
+ WCHAR szEntry[RAS_MaxEntryName + 1];
+ DWORD dwError;
+ ULONG_PTR reserved;
+ ULONG_PTR reserved2;
+} RASENTRYDLGW, *LPRASENTRYDLGW;
+
+typedef struct tagRASDIALDLG
+{
+ DWORD dwSize;
+ HWND hwndOwner;
+ DWORD dwFlags;
+ LONG xDlg;
+ LONG yDlg;
+ DWORD dwSubEntry;
+ DWORD dwError;
+ ULONG_PTR reserved;
+ ULONG_PTR reserved2;
+} RASDIALDLG, *LPRASDIALDLG;
+
+/* Application-defined callback functions */
+typedef VOID (WINAPI* RASPBDLGFUNCW)(DWORD, DWORD, LPWSTR, LPVOID);
+typedef VOID (WINAPI* RASPBDLGFUNCA)(DWORD, DWORD, LPSTR, LPVOID);
+
+typedef struct tagRASPBDLGA
+{
+ DWORD dwSize;
+ HWND hwndOwner;
+ DWORD dwFlags;
+ LONG xDlg;
+ LONG yDlg;
+ ULONG_PTR dwCallbackId;
+ RASPBDLGFUNCA pCallback;
+ DWORD dwError;
+ ULONG_PTR reserved;
+ ULONG_PTR reserved2;
+} RASPBDLGA, *LPRASPBDLGA;
+typedef struct tagRASPBDLGW
+{
+ DWORD dwSize;
+ HWND hwndOwner;
+ DWORD dwFlags;
+ LONG xDlg;
+ LONG yDlg;
+ ULONG_PTR dwCallbackId;
+ RASPBDLGFUNCW pCallback;
+ DWORD dwError;
+ ULONG_PTR reserved;
+ ULONG_PTR reserved2;
+} RASPBDLGW, *LPRASPBDLGW;
+
+typedef struct tagRASNOUSERA
+{
+ DWORD dwSize;
+ DWORD dwFlags;
+ DWORD dwTimeoutMs;
+ CHAR szUserName[UNLEN + 1];
+ CHAR szPassword[PWLEN + 1];
+ CHAR szDomain[DNLEN + 1];
+} RASNOUSERA, *LPRASNOUSERA;
+typedef struct tagRASNOUSERW
+{
+ DWORD dwSize;
+ DWORD dwFlags;
+ DWORD dwTimeoutMs;
+ WCHAR szUserName[UNLEN + 1];
+ WCHAR szPassword[PWLEN + 1];
+ WCHAR szDomain[DNLEN + 1];
+} RASNOUSERW, *LPRASNOUSERW ;
+
+#include <poppack.h>
+
+BOOL APIENTRY RasDialDlgA(LPSTR,LPSTR,LPSTR,LPRASDIALDLG);
+BOOL APIENTRY RasDialDlgW(LPWSTR,LPWSTR,LPWSTR,LPRASDIALDLG);
+BOOL APIENTRY RasEntryDlgA(LPSTR,LPSTR,LPRASENTRYDLGA);
+BOOL APIENTRY RasEntryDlgW(LPWSTR,LPWSTR,LPRASENTRYDLGW);
+BOOL APIENTRY RasPhonebookDlgA(LPSTR,LPSTR,LPRASPBDLGA);
+BOOL APIENTRY RasPhonebookDlgW(LPWSTR,LPWSTR,LPRASPBDLGW);
+
+#ifdef UNICODE
+typedef RASENTRYDLGW RASENTRYDLG, *LPRASENTRYDLG;
+typedef RASPBDLGW RASPBDLG, *LPRASPBDLG;
+typedef RASNOUSERW RASNOUSER, *LPRASNOUSER;
+#define RasDialDlg RasDialDlgW
+#define RasEntryDlg RasEntryDlgW
+#define RasPhonebookDlg RasPhonebookDlgW
+#else
+typedef RASENTRYDLGA RASENTRYDLG, *LPRASENTRYDLG;
+typedef RASPBDLGA RASPBDLG, *LPRASPBDLG;
+typedef RASNOUSERA RASNOUSER, *LPRASNOUSER;
+#define RasDialDlg RasDialDlgA
+#define RasEntryDlg RasEntryDlgA
+#define RasPhonebookDlg RasPhonebookDlgA
+#endif /* UNICODE */
+
+#endif /* RC_INVOKED */
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/raserror.h b/tcc/include/winapi/raserror.h
new file mode 100644
index 0000000..97498b0
--- /dev/null
+++ b/tcc/include/winapi/raserror.h
@@ -0,0 +1,210 @@
+#ifndef _RASERROR_H
+#define _RASERROR_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#define RASBASE 600
+#define SUCCESS 0
+#define PENDING (RASBASE+0)
+#define ERROR_INVALID_PORT_HANDLE (RASBASE+1)
+#define ERROR_PORT_ALREADY_OPEN (RASBASE+2)
+#define ERROR_BUFFER_TOO_SMALL (RASBASE+3)
+#define ERROR_WRONG_INFO_SPECIFIED (RASBASE+4)
+#define ERROR_CANNOT_SET_PORT_INFO (RASBASE+5)
+#define ERROR_PORT_NOT_CONNECTED (RASBASE+6)
+#define ERROR_EVENT_INVALID (RASBASE+7)
+#define ERROR_DEVICE_DOES_NOT_EXIST (RASBASE+8)
+#define ERROR_DEVICETYPE_DOES_NOT_EXIST (RASBASE+9)
+#define ERROR_BUFFER_INVALID (RASBASE+10)
+#define ERROR_ROUTE_NOT_AVAILABLE (RASBASE+11)
+#define ERROR_ROUTE_NOT_ALLOCATED (RASBASE+12)
+#define ERROR_INVALID_COMPRESSION_SPECIFIED (RASBASE+13)
+#define ERROR_OUT_OF_BUFFERS (RASBASE+14)
+#define ERROR_PORT_NOT_FOUND (RASBASE+15)
+#define ERROR_ASYNC_REQUEST_PENDING (RASBASE+16)
+#define ERROR_ALREADY_DISCONNECTING (RASBASE+17)
+#define ERROR_PORT_NOT_OPEN (RASBASE+18)
+#define ERROR_PORT_DISCONNECTED (RASBASE+19)
+#define ERROR_NO_ENDPOINTS (RASBASE+20)
+#define ERROR_CANNOT_OPEN_PHONEBOOK (RASBASE+21)
+#define ERROR_CANNOT_LOAD_PHONEBOOK (RASBASE+22)
+#define ERROR_CANNOT_FIND_PHONEBOOK_ENTRY (RASBASE+23)
+#define ERROR_CANNOT_WRITE_PHONEBOOK (RASBASE+24)
+#define ERROR_CORRUPT_PHONEBOOK (RASBASE+25)
+#define ERROR_CANNOT_LOAD_STRING (RASBASE+26)
+#define ERROR_KEY_NOT_FOUND (RASBASE+27)
+#define ERROR_DISCONNECTION (RASBASE+28)
+#define ERROR_REMOTE_DISCONNECTION (RASBASE+29)
+#define ERROR_HARDWARE_FAILURE (RASBASE+30)
+#define ERROR_USER_DISCONNECTION (RASBASE+31)
+#define ERROR_INVALID_SIZE (RASBASE+32)
+#define ERROR_PORT_NOT_AVAILABLE (RASBASE+33)
+#define ERROR_CANNOT_PROJECT_CLIENT (RASBASE+34)
+#define ERROR_UNKNOWN (RASBASE+35)
+#define ERROR_WRONG_DEVICE_ATTACHED (RASBASE+36)
+#define ERROR_BAD_STRING (RASBASE+37)
+#define ERROR_REQUEST_TIMEOUT (RASBASE+38)
+#define ERROR_CANNOT_GET_LANA (RASBASE+39)
+#define ERROR_NETBIOS_ERROR (RASBASE+40)
+#define ERROR_SERVER_OUT_OF_RESOURCES (RASBASE+41)
+#define ERROR_NAME_EXISTS_ON_NET (RASBASE+42)
+#define ERROR_SERVER_GENERAL_NET_FAILURE (RASBASE+43)
+#define WARNING_MSG_ALIAS_NOT_ADDED (RASBASE+44)
+#define ERROR_AUTH_INTERNAL (RASBASE+45)
+#define ERROR_RESTRICTED_LOGON_HOURS (RASBASE+46)
+#define ERROR_ACCT_DISABLED (RASBASE+47)
+#define ERROR_PASSWD_EXPIRED (RASBASE+48)
+#define ERROR_NO_DIALIN_PERMISSION (RASBASE+49)
+#define ERROR_SERVER_NOT_RESPONDING (RASBASE+50)
+#define ERROR_FROM_DEVICE (RASBASE+51)
+#define ERROR_UNRECOGNIZED_RESPONSE (RASBASE+52)
+#define ERROR_MACRO_NOT_FOUND (RASBASE+53)
+#define ERROR_MACRO_NOT_DEFINED (RASBASE+54)
+#define ERROR_MESSAGE_MACRO_NOT_FOUND (RASBASE+55)
+#define ERROR_DEFAULTOFF_MACRO_NOT_FOUND (RASBASE+56)
+#define ERROR_FILE_COULD_NOT_BE_OPENED (RASBASE+57)
+#define ERROR_DEVICENAME_TOO_LONG (RASBASE+58)
+#define ERROR_DEVICENAME_NOT_FOUND (RASBASE+59)
+#define ERROR_NO_RESPONSES (RASBASE+60)
+#define ERROR_NO_COMMAND_FOUND (RASBASE+61)
+#define ERROR_WRONG_KEY_SPECIFIED (RASBASE+62)
+#define ERROR_UNKNOWN_DEVICE_TYPE (RASBASE+63)
+#define ERROR_ALLOCATING_MEMORY (RASBASE+64)
+#define ERROR_PORT_NOT_CONFIGURED (RASBASE+65)
+#define ERROR_DEVICE_NOT_READY (RASBASE+66)
+#define ERROR_READING_INI_FILE (RASBASE+67)
+#define ERROR_NO_CONNECTION (RASBASE+68)
+#define ERROR_BAD_USAGE_IN_INI_FILE (RASBASE+69)
+#define ERROR_READING_SECTIONNAME (RASBASE+70)
+#define ERROR_READING_DEVICETYPE (RASBASE+71)
+#define ERROR_READING_DEVICENAME (RASBASE+72)
+#define ERROR_READING_USAGE (RASBASE+73)
+#define ERROR_READING_MAXCONNECTBPS (RASBASE+74)
+#define ERROR_READING_MAXCARRIERBPS (RASBASE+75)
+#define ERROR_LINE_BUSY (RASBASE+76)
+#define ERROR_VOICE_ANSWER (RASBASE+77)
+#define ERROR_NO_ANSWER (RASBASE+78)
+#define ERROR_NO_CARRIER (RASBASE+79)
+#define ERROR_NO_DIALTONE (RASBASE+80)
+#define ERROR_IN_COMMAND (RASBASE+81)
+#define ERROR_WRITING_SECTIONNAME (RASBASE+82)
+#define ERROR_WRITING_DEVICETYPE (RASBASE+83)
+#define ERROR_WRITING_DEVICENAME (RASBASE+84)
+#define ERROR_WRITING_MAXCONNECTBPS (RASBASE+85)
+#define ERROR_WRITING_MAXCARRIERBPS (RASBASE+86)
+#define ERROR_WRITING_USAGE (RASBASE+87)
+#define ERROR_WRITING_DEFAULTOFF (RASBASE+88)
+#define ERROR_READING_DEFAULTOFF (RASBASE+89)
+#define ERROR_EMPTY_INI_FILE (RASBASE+90)
+#define ERROR_AUTHENTICATION_FAILURE (RASBASE+91)
+#define ERROR_PORT_OR_DEVICE (RASBASE+92)
+#define ERROR_NOT_BINARY_MACRO (RASBASE+93)
+#define ERROR_DCB_NOT_FOUND (RASBASE+94)
+#define ERROR_STATE_MACHINES_NOT_STARTED (RASBASE+95)
+#define ERROR_STATE_MACHINES_ALREADY_STARTED (RASBASE+96)
+#define ERROR_PARTIAL_RESPONSE_LOOPING (RASBASE+97)
+#define ERROR_UNKNOWN_RESPONSE_KEY (RASBASE+98)
+#define ERROR_RECV_BUF_FULL (RASBASE+99)
+#define ERROR_CMD_TOO_LONG (RASBASE+100)
+#define ERROR_UNSUPPORTED_BPS (RASBASE+101)
+#define ERROR_UNEXPECTED_RESPONSE (RASBASE+102)
+#define ERROR_INTERACTIVE_MODE (RASBASE+103)
+#define ERROR_BAD_CALLBACK_NUMBER (RASBASE+104)
+#define ERROR_INVALID_AUTH_STATE (RASBASE+105)
+#define ERROR_WRITING_INITBPS (RASBASE+106)
+#define ERROR_X25_DIAGNOSTIC (RASBASE+107)
+#define ERROR_ACCT_EXPIRED (RASBASE+108)
+#define ERROR_CHANGING_PASSWORD (RASBASE+109)
+#define ERROR_OVERRUN (RASBASE+110)
+#define ERROR_RASMAN_CANNOT_INITIALIZE (RASBASE+111)
+#define ERROR_BIPLEX_PORT_NOT_AVAILABLE (RASBASE+112)
+#define ERROR_NO_ACTIVE_ISDN_LINES (RASBASE+113)
+#define ERROR_NO_ISDN_CHANNELS_AVAILABLE (RASBASE+114)
+#define ERROR_TOO_MANY_LINE_ERRORS (RASBASE+115)
+#define ERROR_IP_CONFIGURATION (RASBASE+116)
+#define ERROR_NO_IP_ADDRESSES (RASBASE+117)
+#define ERROR_PPP_TIMEOUT (RASBASE+118)
+#define ERROR_PPP_REMOTE_TERMINATED (RASBASE+119)
+#define ERROR_PPP_NO_PROTOCOLS_CONFIGURED (RASBASE+120)
+#define ERROR_PPP_NO_RESPONSE (RASBASE+121)
+#define ERROR_PPP_INVALID_PACKET (RASBASE+122)
+#define ERROR_PHONE_NUMBER_TOO_LONG (RASBASE+123)
+#define ERROR_IPXCP_NO_DIALOUT_CONFIGURED (RASBASE+124)
+#define ERROR_IPXCP_NO_DIALIN_CONFIGURED (RASBASE+125)
+#define ERROR_IPXCP_DIALOUT_ALREADY_ACTIVE (RASBASE+126)
+#define ERROR_ACCESSING_TCPCFGDLL (RASBASE+127)
+#define ERROR_NO_IP_RAS_ADAPTER (RASBASE+128)
+#define ERROR_SLIP_REQUIRES_IP (RASBASE+129)
+#define ERROR_PROJECTION_NOT_COMPLETE (RASBASE+130)
+#define ERROR_PROTOCOL_NOT_CONFIGURED (RASBASE+131)
+#define ERROR_PPP_NOT_CONVERGING (RASBASE+132)
+#define ERROR_PPP_CP_REJECTED (RASBASE+133)
+#define ERROR_PPP_LCP_TERMINATED (RASBASE+134)
+#define ERROR_PPP_REQUIRED_ADDRESS_REJECTED (RASBASE+135)
+#define ERROR_PPP_NCP_TERMINATED (RASBASE+136)
+#define ERROR_PPP_LOOPBACK_DETECTED (RASBASE+137)
+#define ERROR_PPP_NO_ADDRESS_ASSIGNED (RASBASE+138)
+#define ERROR_CANNOT_USE_LOGON_CREDENTIALS (RASBASE+139)
+#define ERROR_TAPI_CONFIGURATION (RASBASE+140)
+#define ERROR_NO_LOCAL_ENCRYPTION (RASBASE+141)
+#define ERROR_NO_REMOTE_ENCRYPTION (RASBASE+142)
+#define ERROR_REMOTE_REQUIRES_ENCRYPTION (RASBASE+143)
+#define ERROR_IPXCP_NET_NUMBER_CONFLICT (RASBASE+144)
+#define ERROR_INVALID_SMM (RASBASE+145)
+#define ERROR_SMM_UNINITIALIZED (RASBASE+146)
+#define ERROR_NO_MAC_FOR_PORT (RASBASE+147)
+#define ERROR_SMM_TIMEOUT (RASBASE+148)
+#define ERROR_BAD_PHONE_NUMBER (RASBASE+149)
+#define ERROR_WRONG_MODULE (RASBASE+150)
+#define ERROR_INVALID_CALLBACK_NUMBER (RASBASE+151)
+
+#define ERROR_SCRIPT_SYNTAX (RASBASE+152)
+#define ERROR_HANGUP_FAILED (RASBASE+153)
+#define ERROR_BUNDLE_NOT_FOUND (RASBASE+154)
+#define ERROR_CANNOT_DO_CUSTOMDIAL (RASBASE+155)
+#define ERROR_DIAL_ALREADY_IN_PROGRESS (RASBASE+156)
+#define ERROR_RASAUTO_CANNOT_INITIALIZE (RASBASE+157)
+#define ERROR_CONNECTION_ALREADY_SHARED (RASBASE+158)
+#define ERROR_SHARING_CHANGE_FAILED (RASBASE+159)
+#define ERROR_SHARING_ROUTER_INSTALL (RASBASE+160)
+#define ERROR_SHARE_CONNECTION_FAILED (RASBASE+161)
+#define ERROR_SHARING_PRIVATE_INSTALL (RASBASE+162)
+#define ERROR_CANNOT_SHARE_CONNECTION (RASBASE+163)
+#define ERROR_NO_SMART_CARD_READER (RASBASE+164)
+#define ERROR_SHARING_ADDRESS_EXISTS (RASBASE+165)
+#define ERROR_NO_CERTIFICATE (RASBASE+166)
+#define ERROR_SHARING_MULTIPLE_ADDRESSES (RASBASE+167)
+#define ERROR_FAILED_TO_ENCRYPT (RASBASE+168)
+#define ERROR_BAD_ADDRESS_SPECIFIED (RASBASE+169)
+#define ERROR_CONNECTION_REJECT (RASBASE+170)
+#define ERROR_CONGESTION (RASBASE+171)
+#define ERROR_INCOMPATIBLE (RASBASE+172)
+#define ERROR_NUMBERCHANGED (RASBASE+173)
+#define ERROR_TEMPFAILURE (RASBASE+174)
+#define ERROR_BLOCKED (RASBASE+175)
+#define ERROR_DONOTDISTURB (RASBASE+176)
+#define ERROR_OUTOFORDER (RASBASE+177)
+#define ERROR_UNABLE_TO_AUTHENTICATE_SERVER (RASBASE+178)
+#define ERROR_SMART_CARD_REQUIRED (RASBASE+179)
+#define ERROR_INVALID_FUNCTION_FOR_ENTRY (RASBASE+180)
+#define ERROR_CERT_FOR_ENCRYPTION_NOT_FOUND (RASBASE+181)
+#define ERROR_SHARING_RRAS_CONFLICT (RASBASE+182)
+#define ERROR_SHARING_NO_PRIVATE_LAN (RASBASE+183)
+#define ERROR_NO_DIFF_USER_AT_LOGON (RASBASE+184)
+#define ERROR_NO_REG_CERT_AT_LOGON (RASBASE+185)
+#define ERROR_OAKLEY_NO_CERT (RASBASE+186)
+#define ERROR_OAKLEY_AUTH_FAIL (RASBASE+187)
+#define ERROR_OAKLEY_ATTRIB_FAIL (RASBASE+188)
+#define ERROR_OAKLEY_GENERAL_PROCESSING (RASBASE+189)
+#define ERROR_OAKLEY_NO_PEER_CERT (RASBASE+190)
+#define ERROR_OAKLEY_NO_POLICY (RASBASE+191)
+#define ERROR_OAKLEY_TIMED_OUT (RASBASE+192)
+#define ERROR_OAKLEY_ERROR (RASBASE+193)
+#define ERROR_UNKNOWN_FRAMED_PROTOCOL (RASBASE+194)
+#define ERROR_WRONG_TUNNEL_TYPE (RASBASE+195)
+#define ERROR_UNKNOWN_SERVICE_TYPE (RASBASE+196)
+#define ERROR_CONNECTING_DEVICE_NOT_FOUND (RASBASE+197)
+#define ERROR_NO_EAPTLS_CERTIFICATE (RASBASE+198)
+#define RASBASEEND (RASBASE+198)
+#endif /* _RASERROR_H */
diff --git a/tcc/include/winapi/rassapi.h b/tcc/include/winapi/rassapi.h
new file mode 100644
index 0000000..9ba4afb
--- /dev/null
+++ b/tcc/include/winapi/rassapi.h
@@ -0,0 +1,182 @@
+#ifndef _RASSAPI_H
+#define _RASSAPI_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#ifndef UNLEN
+#include <lmcons.h>
+#endif
+#define RASSAPI_MAX_PHONENUMBER_SIZE 128
+#define RASSAPI_MAX_MEDIA_NAME 16
+#define RASSAPI_MAX_PORT_NAME 16
+#define RASSAPI_MAX_DEVICE_NAME 128
+#define RASSAPI_MAX_DEVICETYPE_NAME 16
+#define RASSAPI_MAX_PARAM_KEY_SIZE 32
+#define RASPRIV_NoCallback 0x01
+#define RASPRIV_AdminSetCallback 0x02
+#define RASPRIV_CallerSetCallback 0x04
+#define RASPRIV_DialinPrivilege 0x08
+#define RASPRIV_CallbackType (RASPRIV_AdminSetCallback \
+ | RASPRIV_CallerSetCallback \
+ | RASPRIV_NoCallback)
+#define RAS_MODEM_OPERATIONAL 1
+#define RAS_MODEM_NOT_RESPONDING 2
+#define RAS_MODEM_HARDWARE_FAILURE 3
+#define RAS_MODEM_INCORRECT_RESPONSE 4
+#define RAS_MODEM_UNKNOWN 5
+#define RAS_PORT_NON_OPERATIONAL 1
+#define RAS_PORT_DISCONNECTED 2
+#define RAS_PORT_CALLING_BACK 3
+#define RAS_PORT_LISTENING 4
+#define RAS_PORT_AUTHENTICATING 5
+#define RAS_PORT_AUTHENTICATED 6
+#define RAS_PORT_INITIALIZING 7
+#define MEDIA_UNKNOWN 0
+#define MEDIA_SERIAL 1
+#define MEDIA_RAS10_SERIAL 2
+#define MEDIA_X25 3
+#define MEDIA_ISDN 4
+#define USER_AUTHENTICATED 0x0001
+#define MESSENGER_PRESENT 0x0002
+#define PPP_CLIENT 0x0004
+#define GATEWAY_ACTIVE 0x0008
+#define REMOTE_LISTEN 0x0010
+#define PORT_MULTILINKED 0x0020
+#define RAS_IPADDRESSLEN 15
+#define RAS_IPXADDRESSLEN 22
+#define RAS_ATADDRESSLEN 32
+#define RASDOWNLEVEL 10
+#define RASADMIN_35 35
+#define RASADMIN_CURRENT 40
+
+typedef ULONG IPADDR;
+typedef enum _RAS_PARAMS_FORMAT {
+ ParamNumber = 0,
+ ParamString = 1
+} RAS_PARAMS_FORMAT;
+typedef union RAS_PARAMS_VALUE {
+ DWORD Number;
+ struct {
+ DWORD Length;
+ PCHAR Data;
+ } String;
+} RAS_PARAMS_VALUE;
+typedef struct RAS_PARAMETERS {
+ CHAR P_Key [RASSAPI_MAX_PARAM_KEY_SIZE];
+ RAS_PARAMS_FORMAT P_Type;
+ BYTE P_Attributes;
+ RAS_PARAMS_VALUE P_Value;
+} RAS_PARAMETERS;
+typedef struct _RAS_USER_0 {
+ BYTE bfPrivilege;
+ WCHAR szPhoneNumber[RASSAPI_MAX_PHONENUMBER_SIZE + 1];
+} RAS_USER_0, *PRAS_USER_0;
+typedef struct _RAS_PORT_0 {
+ WCHAR wszPortName[RASSAPI_MAX_PORT_NAME];
+ WCHAR wszDeviceType[RASSAPI_MAX_DEVICETYPE_NAME];
+ WCHAR wszDeviceName[RASSAPI_MAX_DEVICE_NAME];
+ WCHAR wszMediaName[RASSAPI_MAX_MEDIA_NAME];
+ DWORD reserved;
+ DWORD Flags;
+ WCHAR wszUserName[UNLEN + 1];
+ WCHAR wszComputer[NETBIOS_NAME_LEN];
+ DWORD dwStartSessionTime; /* seconds from 1/1/1970 */
+ WCHAR wszLogonDomain[DNLEN + 1];
+ BOOL fAdvancedServer;
+} RAS_PORT_0, *PRAS_PORT_0;
+typedef struct _RAS_PPP_NBFCP_RESULT {
+ DWORD dwError;
+ DWORD dwNetBiosError;
+ CHAR szName[ NETBIOS_NAME_LEN + 1 ];
+ WCHAR wszWksta[ NETBIOS_NAME_LEN + 1 ];
+} RAS_PPP_NBFCP_RESULT;
+typedef struct _RAS_PPP_IPCP_RESULT{
+ DWORD dwError;
+ WCHAR wszAddress[ RAS_IPADDRESSLEN + 1 ];
+} RAS_PPP_IPCP_RESULT;
+typedef struct _RAS_PPP_IPXCP_RESULT {
+ DWORD dwError;
+ WCHAR wszAddress[ RAS_IPXADDRESSLEN + 1 ];
+} RAS_PPP_IPXCP_RESULT;
+typedef struct _RAS_PPP_ATCP_RESULT {
+ DWORD dwError;
+ WCHAR wszAddress[ RAS_ATADDRESSLEN + 1 ];
+} RAS_PPP_ATCP_RESULT;
+typedef struct _RAS_PPP_PROJECTION_RESULT {
+ RAS_PPP_NBFCP_RESULT nbf;
+ RAS_PPP_IPCP_RESULT ip;
+ RAS_PPP_IPXCP_RESULT ipx;
+ RAS_PPP_ATCP_RESULT at;
+} RAS_PPP_PROJECTION_RESULT;
+typedef struct _RAS_PORT_1{
+ RAS_PORT_0 rasport0;
+ DWORD LineCondition;
+ DWORD HardwareCondition;
+ DWORD LineSpeed;
+ WORD NumStatistics;
+ WORD NumMediaParms;
+ DWORD SizeMediaParms;
+ RAS_PPP_PROJECTION_RESULT ProjResult;
+} RAS_PORT_1, *PRAS_PORT_1;
+typedef struct _RAS_PORT_STATISTICS {
+ DWORD dwBytesXmited;
+ DWORD dwBytesRcved;
+ DWORD dwFramesXmited;
+ DWORD dwFramesRcved;
+ DWORD dwCrcErr;
+ DWORD dwTimeoutErr;
+ DWORD dwAlignmentErr;
+ DWORD dwHardwareOverrunErr;
+ DWORD dwFramingErr;
+ DWORD dwBufferOverrunErr;
+ DWORD dwBytesXmitedUncompressed;
+ DWORD dwBytesRcvedUncompressed;
+ DWORD dwBytesXmitedCompressed;
+ DWORD dwBytesRcvedCompressed;
+ DWORD dwPortBytesXmited;
+ DWORD dwPortBytesRcved;
+ DWORD dwPortFramesXmited;
+ DWORD dwPortFramesRcved;
+ DWORD dwPortCrcErr;
+ DWORD dwPortTimeoutErr;
+ DWORD dwPortAlignmentErr;
+ DWORD dwPortHardwareOverrunErr;
+ DWORD dwPortFramingErr;
+ DWORD dwPortBufferOverrunErr;
+ DWORD dwPortBytesXmitedUncompressed;
+ DWORD dwPortBytesRcvedUncompressed;
+ DWORD dwPortBytesXmitedCompressed;
+ DWORD dwPortBytesRcvedCompressed;
+} RAS_PORT_STATISTICS, *PRAS_PORT_STATISTICS;
+typedef struct _RAS_SERVER_0 {
+ WORD TotalPorts;
+ WORD PortsInUse;
+ DWORD RasVersion;
+} RAS_SERVER_0, *PRAS_SERVER_0;
+
+DWORD APIENTRY RasAdminServerGetInfo( const WCHAR*, PRAS_SERVER_0 );
+DWORD APIENTRY RasAdminGetUserAccountServer( const WCHAR*, const WCHAR*, LPWSTR );
+DWORD APIENTRY RasAdminUserGetInfo( const WCHAR*, const WCHAR*, PRAS_USER_0 );
+DWORD APIENTRY RasAdminUserSetInfo( const WCHAR*, const WCHAR*, const PRAS_USER_0 );
+DWORD APIENTRY RasAdminPortEnum( const WCHAR*, PRAS_PORT_0*, WORD*);
+DWORD APIENTRY RasAdminPortGetInfo( const WCHAR*, const WCHAR*, RAS_PORT_1*, RAS_PORT_STATISTICS*, RAS_PARAMETERS** );
+DWORD APIENTRY RasAdminPortClearStatistics( const WCHAR*, const WCHAR* );
+DWORD APIENTRY RasAdminPortDisconnect( const WCHAR*, const WCHAR* );
+DWORD APIENTRY RasAdminFreeBuffer(PVOID);
+DWORD APIENTRY RasAdminGetErrorString( UINT, WCHAR*, DWORD );
+BOOL APIENTRY RasAdminAcceptNewConnection( RAS_PORT_1*, RAS_PORT_STATISTICS*, RAS_PARAMETERS* );
+VOID APIENTRY RasAdminConnectionHangupNotification ( RAS_PORT_1*, RAS_PORT_STATISTICS*, RAS_PARAMETERS* );
+DWORD APIENTRY RasAdminGetIpAddressForUser ( WCHAR*, WCHAR*, IPADDR*, BOOL*);
+VOID APIENTRY RasAdminReleaseIpAddress ( WCHAR*, WCHAR*,IPADDR* );
+DWORD APIENTRY RasAdminGetUserParms( WCHAR*, PRAS_USER_0 );
+DWORD APIENTRY RasAdminSetUserParms( WCHAR*, DWORD, PRAS_USER_0 );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _RASSAPI_H */
diff --git a/tcc/include/winapi/reason.h b/tcc/include/winapi/reason.h
new file mode 100644
index 0000000..fb73451
--- /dev/null
+++ b/tcc/include/winapi/reason.h
@@ -0,0 +1,47 @@
+#ifndef _REASON_H
+#define _REASON_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#if (_WIN32_WINNT >= 0x0501)
+#define SHTDN_REASON_MAJOR_APPLICATION 0x00040000
+#define SHTDN_REASON_MAJOR_HARDWARE 0x00010000
+#define SHTDN_REASON_MAJOR_LEGACY_API 0x00070000
+#define SHTDN_REASON_MAJOR_OPERATINGSYSTEM 0x00020000
+#define SHTDN_REASON_MAJOR_OTHER 0x00000000
+#define SHTDN_REASON_MAJOR_POWER 0x00060000
+#define SHTDN_REASON_MAJOR_SOFTWARE 0x00030000
+#define SHTDN_REASON_MAJOR_SYSTEM 0x00050000
+#define SHTDN_REASON_MINOR_BLUESCREEN 0x0000000F
+#define SHTDN_REASON_MINOR_CORDUNPLUGGED 0x0000000b
+#define SHTDN_REASON_MINOR_DISK 0x00000007
+#define SHTDN_REASON_MINOR_ENVIRONMENT 0x0000000c
+#define SHTDN_REASON_MINOR_HARDWARE_DRIVER 0x0000000d
+#define SHTDN_REASON_MINOR_HOTFIX 0x00000011
+#define SHTDN_REASON_MINOR_HOTFIX_UNINSTALL 0x00000017
+#define SHTDN_REASON_MINOR_HUNG 0x00000005
+#define SHTDN_REASON_MINOR_INSTALLATION 0x00000002
+#define SHTDN_REASON_MINOR_MAINTENANCE 0x00000001
+#define SHTDN_REASON_MINOR_MMC 0x00000019
+#define SHTDN_REASON_MINOR_NETWORK_CONNECTIVITY 0x00000014
+#define SHTDN_REASON_MINOR_NETWORKCARD 0x00000009
+#define SHTDN_REASON_MINOR_OTHER 0x00000000
+#define SHTDN_REASON_MINOR_OTHERDRIVER 0x0000000e
+#define SHTDN_REASON_MINOR_POWER_SUPPLY 0x0000000a
+#define SHTDN_REASON_MINOR_PROCESSOR 0x00000008
+#define SHTDN_REASON_MINOR_RECONFIG 0x00000004
+#define SHTDN_REASON_MINOR_SECURITY 0x00000013
+#define SHTDN_REASON_MINOR_SECURITYFIX 0x00000012
+#define SHTDN_REASON_MINOR_SECURITYFIX_UNINSTALL 0x00000018
+#define SHTDN_REASON_MINOR_SERVICEPACK 0x00000010
+#define SHTDN_REASON_MINOR_SERVICEPACK_UNINSTALL 0x00000016
+#define SHTDN_REASON_MINOR_TERMSRV 0x00000020
+#define SHTDN_REASON_MINOR_UNSTABLE 0x00000006
+#define SHTDN_REASON_MINOR_UPGRADE 0x00000003
+#define SHTDN_REASON_MINOR_WMI 0x00000015
+#define SHTDN_REASON_FLAG_USER_DEFINED 0x40000000
+#define SHTDN_REASON_FLAG_PLANNED 0x80000000
+#endif /* (WIN32_WINNT >= 0x0501) */
+
+#endif
diff --git a/tcc/include/winapi/regstr.h b/tcc/include/winapi/regstr.h
new file mode 100644
index 0000000..ccf80ea
--- /dev/null
+++ b/tcc/include/winapi/regstr.h
@@ -0,0 +1,769 @@
+#ifndef _REGSTR_H
+#define _REGSTR_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#define REGSTR_KEY_CLASS TEXT("Class")
+#define REGSTR_KEY_CONFIG TEXT("Config")
+#define REGSTR_KEY_ENUM TEXT("Enum")
+#define REGSTR_KEY_ROOTENUM TEXT("Root")
+#define REGSTR_KEY_BIOSENUM TEXT("BIOS")
+#define REGSTR_KEY_PCMCIAENUM TEXT("PCMCIA")
+#define REGSTR_KEY_PCIENUM TEXT("PCI")
+#define REGSTR_KEY_LOGCONFIG TEXT("LogConfig")
+#define REGSTR_KEY_SYSTEMBOARD TEXT("*PNP0C01")
+#define REGSTR_KEY_APM TEXT("*PNP0C05")
+#define REGSTR_KEY_INIUPDATE TEXT("IniUpdate")
+#define REG_KEY_INSTDEV TEXT("Installed")
+#define REGSTR_KEY_DOSOPTCDROM TEXT("CD-ROM")
+#define REGSTR_KEY_DOSOPTMOUSE TEXT("MOUSE")
+#define REGSTR_DEFAULT_INSTANCE TEXT("0000")
+#define REGSTR_PATH_MOTHERBOARD REGSTR_KEY_SYSTEMBOARD TEXT("\\" REGSTR_DEFAULT_INSTANCE
+#define REGSTR_PATH_SETUP TEXT("Software\\Microsoft\\Windows\\CurrentVersion")
+#define REGSTR_PATH_PIFCONVERT TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\PIFConvert")
+#define REGSTR_PATH_MSDOSOPTS TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\MS-DOSOptions")
+#define REGSTR_PATH_MSDOSEMU TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\MS-DOS Emulation")
+#define REGSTR_PATH_NEWDOSBOX TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\MS-DOS Emulation\\AppCompat")
+#define REGSTR_PATH_RUNONCE TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\RunOnce")
+#define REGSTR_PATH_RUN TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Run")
+#define REGSTR_PATH_RUNSERVICESONCE TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\RunServicesOnce")
+#define REGSTR_PATH_RUNSERVICES TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\RunServices")
+#ifndef REGSTR_PATH_EXPLORER /* also in shlobj.h */
+#define REGSTR_PATH_EXPLORER TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer")
+#endif
+#define REGSTR_PATH_DETECT TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Detect")
+#define REGSTR_PATH_APPPATHS TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\App Paths")
+#define REGSTR_PATH_UNINSTALL TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall")
+#define REGSTR_PATH_REALMODENET TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Network\\Real Mode Net")
+#define REGSTR_PATH_NETEQUIV TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Network\\Equivalent")
+#define REGSTR_PATH_CVNETWORK TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Network")
+#define REGSTR_PATH_IDCONFIGDB TEXT("System\\CurrentControlSet\\Control\\IDConfigDB")
+#define REGSTR_PATH_CLASS TEXT("System\\CurrentControlSet\\Services\\Class")
+#define REGSTR_PATH_DISPLAYSETTINGS TEXT("Display\\Settings")
+#define REGSTR_PATH_FONTS TEXT("Display\\Fonts")
+#define REGSTR_PATH_ENUM TEXT("Enum")
+#define REGSTR_PATH_ROOT TEXT("Enum\\Root")
+#define REGSTR_PATH_SERVICES TEXT("System\\CurrentControlSet\\Services")
+#define REGSTR_PATH_VXD TEXT("System\\CurrentControlSet\\Services\\VxD")
+#define REGSTR_PATH_IOS TEXT("System\\CurrentControlSet\\Services\\VxD\\IOS")
+#define REGSTR_PATH_VMM TEXT("System\\CurrentControlSet\\Services\\VxD\\VMM")
+#define REGSTR_PATH_VPOWERD TEXT("System\\CurrentControlSet\\Services\\VxD\\VPOWERD")
+#define REGSTR_PATH_VNETSUP TEXT("System\\CurrentControlSet\\Services\\VxD\\VNETSUP")
+#define REGSTR_PATH_NWREDIR TEXT("System\\CurrentControlSet\\Services\\VxD\\NWREDIR")
+#define REGSTR_PATH_NCPSERVER TEXT("System\\CurrentControlSet\\Services\\NcpServer\\Parameters")
+#define REGSTR_PATH_IOARB TEXT("System\\CurrentControlSet\\Services\\Arbitrators\\IOArb")
+#define REGSTR_PATH_ADDRARB TEXT("System\\CurrentControlSet\\Services\\Arbitrators\\AddrArb")
+#define REGSTR_PATH_DMAARB TEXT("System\\CurrentControlSet\\Services\\Arbitrators\\DMAArb")
+#define REGSTR_PATH_IRQARB TEXT("System\\CurrentControlSet\\Services\\Arbitrators\\IRQArb")
+#define REGSTR_PATH_CODEPAGE TEXT("System\\CurrentControlSet\\Control\\Nls\\Codepage")
+#define REGSTR_PATH_FILESYSTEM TEXT("System\\CurrentControlSet\\Control\\FileSystem")
+#define REGSTR_PATH_FILESYSTEM_NOVOLTRACK TEXT("System\\CurrentControlSet\\Control\\FileSystem\\NoVolTrack")
+#define REGSTR_PATH_CDFS TEXT("System\\CurrentControlSet\\Control\\FileSystem\\CDFS")
+#define REGSTR_PATH_WINBOOT TEXT("System\\CurrentControlSet\\Control\\WinBoot")
+#define REGSTR_PATH_INSTALLEDFILES TEXT("System\\CurrentControlSet\\Control\\InstalledFiles")
+#define REGSTR_PATH_VMM32FILES TEXT("System\\CurrentControlSet\\Control\\VMM32Files")
+#define REGSTR_MAX_VALUE_LENGTH 256
+#define REGSTR_VAL_BITSPERPIXEL TEXT("BitsPerPixel")
+#define REGSTR_VAL_RESOLUTION TEXT("Resolution")
+#define REGSTR_VAL_DPILOGICALX TEXT("DPILogicalX")
+#define REGSTR_VAL_DPILOGICALY TEXT("DPILogicalY")
+#define REGSTR_VAL_DPIPHYSICALX TEXT("DPIPhysicalX")
+#define REGSTR_VAL_DPIPHYSICALY TEXT("DPIPhysicalY")
+#define REGSTR_VAL_REFRESHRATE TEXT("RefreshRate")
+#define REGSTR_VAL_DISPLAYFLAGS TEXT("DisplayFlags")
+#define REGSTR_PATH_CONTROLPANEL TEXT("Control Panel")
+#define REGSTR_PATH_CONTROLSFOLDER TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Controls Folder")
+#define REGSTR_VAL_DOSCP TEXT("OEMCP")
+#define REGSTR_VAL_WINCP TEXT("ACP")
+#define REGSTR_PATH_DYNA_ENUM TEXT("Config Manager\\Enum")
+#define REGSTR_VAL_HARDWARE_KEY TEXT("HardWareKey")
+#define REGSTR_VAL_ALLOCATION TEXT("Allocation")
+#define REGSTR_VAL_PROBLEM TEXT("Problem")
+#define REGSTR_VAL_STATUS TEXT("Status")
+#define REGSTR_VAL_DONTUSEMEM TEXT("DontAllocLastMem")
+#define REGSTR_VAL_SYSTEMROOT TEXT("SystemRoot")
+#define REGSTR_VAL_BOOTCOUNT TEXT("BootCount")
+#define REGSTR_VAL_REALNETSTART TEXT("RealNetStart")
+#define REGSTR_VAL_MEDIA TEXT("MediaPath")
+#define REGSTR_VAL_CONFIG TEXT("ConfigPath")
+#define REGSTR_VAL_DEVICEPATH TEXT("DevicePath")
+#define REGSTR_VAL_SRCPATH TEXT("SourcePath")
+#define REGSTR_VAL_OLDWINDIR TEXT("OldWinDir")
+#define REGSTR_VAL_SETUPFLAGS TEXT("SetupFlags")
+#define REGSTR_VAL_REGOWNER TEXT("RegisteredOwner")
+#define REGSTR_VAL_REGORGANIZATION TEXT("RegisteredOrganization")
+#define REGSTR_VAL_LICENSINGINFO TEXT("LicensingInfo")
+#define REGSTR_VAL_OLDMSDOSVER TEXT("OldMSDOSVer")
+#define REGSTR_VAL_FIRSTINSTALLDATETIME TEXT("FirstInstallDateTime")
+#define REGSTR_VAL_INSTALLTYPE TEXT("InstallType")
+#define REGSTR_VAL_WRAPPER TEXT("Wrapper")
+#define IT_COMPACT 0
+#define IT_TYPICAL 1
+#define IT_PORTABLE 2
+#define IT_CUSTOM 3
+#define REGSTR_KEY_SETUP TEXT("\\Setup")
+#define REGSTR_VAL_BOOTDIR TEXT("BootDir")
+#define REGSTR_VAL_WINBOOTDIR TEXT("WinbootDir")
+#define REGSTR_VAL_WINDIR TEXT("WinDir")
+#define REGSTR_VAL_APPINSTPATH TEXT("AppInstallPath")
+#define REGSTR_PATH_EBD REGSTR_PATH_SETUP REGSTR_KEY_SETUP TEXT("\\EBD")
+#define REGSTR_KEY_EBDFILESLOCAL TEXT("EBDFilesLocale")
+#define REGSTR_KEY_EBDFILESKEYBOARD TEXT("EBDFilesKeyboard")
+#define REGSTR_KEY_EBDAUTOEXECBATLOCAL TEXT("EBDAutoexecBatLocale")
+#define REGSTR_KEY_EBDAUTOEXECBATKEYBOARD TEXT("EBDAutoexecBatKeyboard")
+#define REGSTR_KEY_EBDCONFIGSYSLOCAL TEXT("EBDConfigSysLocale")
+#define REGSTR_KEY_EBDCONFIGSYSKEYBOARD TEXT("EBDConfigSysKeyboard")
+#define REGSTR_VAL_MSDOSMODE TEXT("MSDOSMode")
+#define REGSTR_VAL_MSDOSMODEDISCARD TEXT("Discard")
+#define REGSTR_VAL_DOSOPTGLOBALFLAGS TEXT("GlobalFlags")
+#define DOSOPTGF_DEFCLEAN 1
+#define REGSTR_VAL_DOSOPTFLAGS TEXT("Flags")
+#define REGSTR_VAL_OPTORDER TEXT("Order")
+#define REGSTR_VAL_CONFIGSYS TEXT("Config.Sys")
+#define REGSTR_VAL_AUTOEXEC TEXT("Autoexec.Bat")
+#define REGSTR_VAL_STDDOSOPTION TEXT("StdOption")
+#define REGSTR_VAL_DOSOPTTIP TEXT("TipText")
+#define DOSOPTF_DEFAULT 1
+#define DOSOPTF_SUPPORTED 2
+#define DOSOPTF_ALWAYSUSE 4
+#define DOSOPTF_USESPMODE 8
+#define DOSOPTF_PROVIDESUMB 16
+#define DOSOPTF_NEEDSETUP 32
+#define DOSOPTF_INDOSSTART 64
+#define DOSOPTF_MULTIPLE 128
+#define SUF_FIRSTTIME 1
+#define SUF_EXPRESS 2
+#define SUF_BATCHINF 4
+#define SUF_CLEAN 8
+#define SUF_INSETUP 16
+#define SUF_NETSETUP 32
+#define SUF_NETHDBOOT 64
+#define SUF_NETRPLBOOT 128
+#define SUF_SBSCOPYOK 256
+#define REGSTR_VAL_DOSPAGER TEXT("DOSPager")
+#define REGSTR_VAL_VXDGROUPS TEXT("VXDGroups")
+#define REGSTR_VAL_VPOWERDFLAGS TEXT("Flags")
+#define VPDF_DISABLEPWRMGMT 1
+#define VPDF_FORCEAPM10MODE 2
+#define VPDF_SKIPINTELSLCHECK 4
+#define VPDF_DISABLEPWRSTATUSPOLL 8
+#define REGSTR_VAL_WORKGROUP TEXT("Workgroup")
+#define REGSTR_VAL_DIRECTHOST TEXT("DirectHost")
+#define REGSTR_VAL_FILESHARING TEXT("FileSharing")
+#define REGSTR_VAL_PRINTSHARING TEXT("PrintSharing")
+#define REGSTR_VAL_FIRSTNETDRIVE TEXT("FirstNetworkDrive")
+#define REGSTR_VAL_MAXCONNECTIONS TEXT("MaxConnections")
+#define REGSTR_VAL_APISUPPORT TEXT("APISupport")
+#define REGSTR_VAL_MAXRETRY TEXT("MaxRetry")
+#define REGSTR_VAL_MINRETRY TEXT("MinRetry")
+#define REGSTR_VAL_SUPPORTLFN TEXT("SupportLFN")
+#define REGSTR_VAL_SUPPORTBURST TEXT("SupportBurst")
+#define REGSTR_VAL_SUPPORTTUNNELLING TEXT("SupportTunnelling")
+#define REGSTR_VAL_FULLTRACE TEXT("FullTrace")
+#define REGSTR_VAL_READCACHING TEXT("ReadCaching")
+#define REGSTR_VAL_SHOWDOTS TEXT("ShowDots")
+#define REGSTR_VAL_GAPTIME TEXT("GapTime")
+#define REGSTR_VAL_SEARCHMODE TEXT("SearchMode")
+#define REGSTR_VAL_SHELLVERSION TEXT("ShellVersion")
+#define REGSTR_VAL_MAXLIP TEXT("MaxLIP")
+#define REGSTR_VAL_PRESERVECASE TEXT("PreserveCase")
+#define REGSTR_VAL_OPTIMIZESFN TEXT("OptimizeSFN")
+#define REGSTR_VAL_NCP_BROWSEMASTER TEXT("BrowseMaster")
+#define REGSTR_VAL_NCP_USEPEERBROWSING TEXT("Use_PeerBrowsing")
+#define REGSTR_VAL_NCP_USESAP TEXT("Use_Sap")
+#define REGSTR_VAL_WIN31FILESYSTEM TEXT("Win31FileSystem")
+#define REGSTR_VAL_PRESERVELONGNAMES TEXT("PreserveLongNames")
+#define REGSTR_VAL_DRIVEWRITEBEHIND TEXT("DriveWriteBehind")
+#define REGSTR_VAL_ASYNCFILECOMMIT TEXT("AsyncFileCommit")
+#define REGSTR_VAL_PATHCACHECOUNT TEXT("PathCache")
+#define REGSTR_VAL_NAMECACHECOUNT TEXT("NameCache")
+#define REGSTR_VAL_CONTIGFILEALLOC TEXT("ContigFileAllocSize")
+#define REGSTR_VAL_VOLIDLETIMEOUT TEXT("VolumeIdleTimeout")
+#define REGSTR_VAL_BUFFIDLETIMEOUT TEXT("BufferIdleTimeout")
+#define REGSTR_VAL_BUFFAGETIMEOUT TEXT("BufferAgeTimeout")
+#define REGSTR_VAL_NAMENUMERICTAIL TEXT("NameNumericTail")
+#define REGSTR_VAL_READAHEADTHRESHOLD TEXT("ReadAheadThreshold")
+#define REGSTR_VAL_DOUBLEBUFFER TEXT("DoubleBuffer")
+#define REGSTR_VAL_SOFTCOMPATMODE TEXT("SoftCompatMode")
+#define REGSTR_VAL_DRIVESPINDOWN TEXT("DriveSpinDown")
+#define REGSTR_VAL_FORCEPMIO TEXT("ForcePMIO")
+#define REGSTR_VAL_FORCERMIO TEXT("ForceRMIO")
+#define REGSTR_VAL_LASTBOOTPMDRVS TEXT("LastBootPMDrvs")
+#define REGSTR_VAL_VIRTUALHDIRQ TEXT("VirtualHDIRQ")
+#define REGSTR_VAL_SRVNAMECACHECOUNT TEXT("ServerNameCacheMax")
+#define REGSTR_VAL_SRVNAMECACHE TEXT("ServerNameCache")
+#define REGSTR_VAL_SRVNAMECACHENETPROV TEXT("ServerNameCacheNumNets")
+#define REGSTR_VAL_AUTOMOUNT TEXT("AutoMountDrives")
+#define REGSTR_VAL_COMPRESSIONMETHOD TEXT("CompressionAlgorithm")
+#define REGSTR_VAL_COMPRESSIONTHRESHOLD TEXT("CompressionThreshold")
+#define REGSTR_VAL_CDCACHESIZE TEXT("CacheSize")
+#define REGSTR_VAL_CDPREFETCH TEXT("Prefetch")
+#define REGSTR_VAL_CDPREFETCHTAIL TEXT("PrefetchTail")
+#define REGSTR_VAL_CDRAWCACHE TEXT("RawCache")
+#define REGSTR_VAL_CDEXTERRORS TEXT("ExtendedErrors")
+#define REGSTR_VAL_CDSVDSENSE TEXT("SVDSense")
+#define REGSTR_VAL_CDSHOWVERSIONS TEXT("ShowVersions")
+#define REGSTR_VAL_CDCOMPATNAMES TEXT("MSCDEXCompatNames")
+#define REGSTR_VAL_CDNOREADAHEAD TEXT("NoReadAhead")
+#define REGSTR_VAL_SCSI TEXT("SCSI\\")
+#define REGSTR_VAL_ESDI TEXT("ESDI\\")
+#define REGSTR_VAL_FLOP TEXT("FLOP\\")
+#define REGSTR_VAL_DISK TEXT("GenDisk")
+#define REGSTR_VAL_CDROM TEXT("GenCD")
+#define REGSTR_VAL_TAPE TEXT("TAPE")
+#define REGSTR_VAL_SCANNER TEXT("SCANNER")
+#define REGSTR_VAL_FLOPPY TEXT("FLOPPY")
+#define REGSTR_VAL_SCSITID TEXT("SCSITargetID")
+#define REGSTR_VAL_SCSILUN TEXT("SCSILUN")
+#define REGSTR_VAL_REVLEVEL TEXT("RevisionLevel")
+#define REGSTR_VAL_PRODUCTID TEXT("ProductId")
+#define REGSTR_VAL_PRODUCTTYPE TEXT("ProductType")
+#define REGSTR_VAL_DEVTYPE TEXT("DeviceType")
+#define REGSTR_VAL_REMOVABLE TEXT("Removable")
+#define REGSTR_VAL_CURDRVLET TEXT("CurrentDriveLetterAssignment")
+#define REGSTR_VAL_USRDRVLET TEXT("UserDriveLetterAssignment")
+#define REGSTR_VAL_SYNCDATAXFER TEXT("SyncDataXfer")
+#define REGSTR_VAL_AUTOINSNOTE TEXT("AutoInsertNotification")
+#define REGSTR_VAL_DISCONNECT TEXT("Disconnect")
+#define REGSTR_VAL_INT13 TEXT("Int13")
+#define REGSTR_VAL_PMODE_INT13 TEXT("PModeInt13")
+#define REGSTR_VAL_USERSETTINGS TEXT("AdapterSettings")
+#define REGSTR_VAL_NOIDE TEXT("NoIDE")
+#define REGSTR_VAL_DISKCLASSNAME TEXT("DiskDrive")
+#define REGSTR_VAL_CDROMCLASSNAME TEXT("CDROM")
+#define REGSTR_VAL_FORCELOAD TEXT("ForceLoadPD")
+#define REGSTR_VAL_FORCEFIFO TEXT("ForceFIFO")
+#define REGSTR_VAL_FORCECL TEXT("ForceChangeLine")
+#define REGSTR_VAL_NOUSECLASS TEXT("NoUseClass")
+#define REGSTR_VAL_NOINSTALLCLASS TEXT("NoInstallClass")
+#define REGSTR_VAL_NODISPLAYCLASS TEXT("NoDisplayClass")
+#define REGSTR_VAL_SILENTINSTALL TEXT("SilentInstall")
+#define REGSTR_KEY_PCMCIA_CLASS TEXT("PCMCIA")
+#define REGSTR_KEY_SCSI_CLASS TEXT("SCSIAdapter")
+#define REGSTR_KEY_PORTS_CLASS TEXT("ports")
+#define REGSTR_KEY_MEDIA_CLASS TEXT("MEDIA")
+#define REGSTR_KEY_DISPLAY_CLASS TEXT("Display")
+#define REGSTR_KEY_KEYBOARD_CLASS TEXT("Keyboard")
+#define REGSTR_KEY_MOUSE_CLASS TEXT("Mouse")
+#define REGSTR_KEY_MONITOR_CLASS TEXT("Monitor")
+#define REGSTR_VAL_PCMCIA_OPT TEXT("Options")
+#define PCMCIA_OPT_HAVE_SOCKET 1
+#define PCMCIA_OPT_AUTOMEM 4
+#define PCMCIA_OPT_NO_SOUND 8
+#define PCMCIA_OPT_NO_AUDIO 16
+#define PCMCIA_OPT_NO_APMREMOVE 32
+#define REGSTR_VAL_PCMCIA_MEM TEXT("Memory")
+#define PCMCIA_DEF_MEMBEGIN 0xC0000
+#define PCMCIA_DEF_MEMEND 0xFFFFFF
+#define PCMCIA_DEF_MEMLEN 0x1000
+#define REGSTR_VAL_PCMCIA_ALLOC TEXT("AllocMemWin")
+#define REGSTR_VAL_PCMCIA_ATAD TEXT("ATADelay")
+#define REGSTR_VAL_PCMCIA_SIZ TEXT("MinRegionSize")
+#define PCMCIA_DEF_MIN_REGION 0x10000
+#define REGSTR_VAL_P1284MDL TEXT("Model")
+#define REGSTR_VAL_P1284MFG TEXT("Manufacturer")
+#define REGSTR_VAL_ISAPNP TEXT("ISAPNP")
+#define REGSTR_VAL_ISAPNP_RDP_OVERRIDE TEXT("RDPOverRide")
+#define REGSTR_VAL_PCI TEXT("PCI")
+#define REGSTR_PCI_OPTIONS TEXT("Options")
+#define REGSTR_PCI_DUAL_IDE TEXT("PCIDualIDE")
+#define PCI_OPTIONS_USE_BIOS 1
+#define PCI_OPTIONS_USE_IRQ_STEERING 2
+#define PCI_FLAG_NO_VIDEO_IRQ 1
+#define PCI_FLAG_PCMCIA_WANT_IRQ 2
+#define PCI_FLAG_DUAL_IDE 4
+#define PCI_FLAG_NO_ENUM_AT_ALL 8
+#define PCI_FLAG_ENUM_NO_RESOURCE 16
+#define PCI_FLAG_NEED_DWORD_ACCESS 32
+#define PCI_FLAG_SINGLE_FUNCTION 64
+#define PCI_FLAG_ALWAYS_ENABLED 128
+#define PCI_FLAG_IS_IDE 256
+#define PCI_FLAG_IS_VIDEO 512
+#define PCI_FLAG_FAIL_START 1024
+#define REGSTR_KEY_CRASHES TEXT("Crashes")
+#define REGSTR_KEY_DANGERS TEXT("Dangers")
+#define REGSTR_KEY_DETMODVARS TEXT("DetModVars")
+#define REGSTR_KEY_NDISINFO TEXT("NDISInfo")
+#define REGSTR_VAL_PROTINIPATH TEXT("ProtIniPath")
+#define REGSTR_VAL_RESOURCES TEXT("Resources")
+#define REGSTR_VAL_CRASHFUNCS TEXT("CrashFuncs")
+#define REGSTR_VAL_CLASS TEXT("Class")
+#define REGSTR_VAL_DEVDESC TEXT("DeviceDesc")
+#define REGSTR_VAL_BOOTCONFIG TEXT("BootConfig")
+#define REGSTR_VAL_DETFUNC TEXT("DetFunc")
+#define REGSTR_VAL_DETFLAGS TEXT("DetFlags")
+#define REGSTR_VAL_COMPATIBLEIDS TEXT("CompatibleIDs")
+#define REGSTR_VAL_DETCONFIG TEXT("DetConfig")
+#define REGSTR_VAL_VERIFYKEY TEXT("VerifyKey")
+#define REGSTR_VAL_COMINFO TEXT("ComInfo")
+#define REGSTR_VAL_INFNAME TEXT("InfName")
+#define REGSTR_VAL_CARDSPECIFIC TEXT("CardSpecific")
+#define REGSTR_VAL_NETOSTYPE TEXT("NetOSType")
+#define REGSTR_DATA_NETOS_NDIS TEXT("NDIS")
+#define REGSTR_DATA_NETOS_ODI TEXT("ODI")
+#define REGSTR_DATA_NETOS_IPX TEXT("IPX")
+#define REGSTR_VAL_MFG TEXT("Mfg")
+#define REGSTR_VAL_SCAN_ONLY_FIRST TEXT("ScanOnlyFirstDrive")
+#define REGSTR_VAL_SHARE_IRQ TEXT("ForceIRQSharing")
+#define REGSTR_VAL_NONSTANDARD_ATAPI TEXT("NonStandardATAPI")
+#define REGSTR_VAL_IDE_FORCE_SERIALIZE TEXT("ForceSerialization")
+#define REGSTR_VAL_MAX_HCID_LEN 1024
+#define REGSTR_VAL_HWREV TEXT("HWRevision")
+#define REGSTR_VAL_ENABLEINTS TEXT("EnableInts")
+#define REGDF_NOTDETIO 1
+#define REGDF_NOTDETMEM 2
+#define REGDF_NOTDETIRQ 4
+#define REGDF_NOTDETDMA 8
+#define REGDF_NOTDETALL (REGDF_NOTDETIO | REGDF_NOTDETMEM | REGDF_NOTDETIRQ | REGDF_NOTDETDMA)
+#define REGDF_NEEDFULLCONFIG 16
+#define REGDF_GENFORCEDCONFIG 32
+#define REGDF_NODETCONFIG 0x8000
+#define REGDF_CONFLICTIO 0x10000
+#define REGDF_CONFLICTMEM 0x20000
+#define REGDF_CONFLICTIRQ 0x40000
+#define REGDF_CONFLICTDMA 0x80000
+#define REGDF_CONFLICTALL (REGDF_CONFLICTIO | REGDF_CONFLICTMEM | REGDF_CONFLICTIRQ | REGDF_CONFLICTDMA)
+#define REGDF_MAPIRQ2TO9 0x100000
+#define REGDF_NOTVERIFIED 0x80000000
+#define REGSTR_VAL_APMBIOSVER TEXT("APMBiosVer")
+#define REGSTR_VAL_APMFLAGS TEXT("APMFlags")
+#define REGSTR_VAL_SLSUPPORT TEXT("SLSupport")
+#define REGSTR_VAL_MACHINETYPE TEXT("MachineType")
+#define REGSTR_VAL_SETUPMACHINETYPE TEXT("SetupMachineType")
+#define REGSTR_MACHTYPE_UNKNOWN TEXT("Unknown")
+#define REGSTR_MACHTYPE_IBMPC TEXT("IBM PC")
+#define REGSTR_MACHTYPE_IBMPCJR TEXT("IBM PCjr")
+#define REGSTR_MACHTYPE_IBMPCCONV TEXT("IBM PC Convertible")
+#define REGSTR_MACHTYPE_IBMPCXT TEXT("IBM PC/XT")
+#define REGSTR_MACHTYPE_IBMPCXT_286 TEXT("IBM PC/XT 286")
+#define REGSTR_MACHTYPE_IBMPCAT TEXT("IBM PC/AT")
+#define REGSTR_MACHTYPE_IBMPS2_25 TEXT("IBM PS/2-25")
+#define REGSTR_MACHTYPE_IBMPS2_30_286 TEXT("IBM PS/2-30 286")
+#define REGSTR_MACHTYPE_IBMPS2_30 TEXT("IBM PS/2-30")
+#define REGSTR_MACHTYPE_IBMPS2_50 TEXT("IBM PS/2-50")
+#define REGSTR_MACHTYPE_IBMPS2_50Z TEXT("IBM PS/2-50Z")
+#define REGSTR_MACHTYPE_IBMPS2_55SX TEXT("IBM PS/2-55SX")
+#define REGSTR_MACHTYPE_IBMPS2_60 TEXT("IBM PS/2-60")
+#define REGSTR_MACHTYPE_IBMPS2_65SX TEXT("IBM PS/2-65SX")
+#define REGSTR_MACHTYPE_IBMPS2_70 TEXT("IBM PS/2-70")
+#define REGSTR_MACHTYPE_IBMPS2_P70 TEXT("IBM PS/2-P70")
+#define REGSTR_MACHTYPE_IBMPS2_70_80 TEXT("IBM PS/2-70/80")
+#define REGSTR_MACHTYPE_IBMPS2_80 TEXT("IBM PS/2-80")
+#define REGSTR_MACHTYPE_IBMPS2_90 TEXT("IBM PS/2-90")
+#define REGSTR_MACHTYPE_IBMPS1 TEXT("IBM PS/1")
+#define REGSTR_MACHTYPE_PHOENIX_PCAT TEXT("Phoenix PC/AT Compatible")
+#define REGSTR_MACHTYPE_HP_VECTRA TEXT("HP Vectra")
+#define REGSTR_MACHTYPE_ATT_PC TEXT("AT&T PC")
+#define REGSTR_MACHTYPE_ZENITH_PC TEXT("Zenith PC")
+#define REGSTR_VAL_APMMENUSUSPEND TEXT("APMMenuSuspend")
+#define APMMENUSUSPEND_DISABLED 0
+#define APMMENUSUSPEND_ENABLED 1
+#define APMMENUSUSPEND_UNDOCKED 2
+#define APMMENUSUSPEND_NOCHANGE 128
+#define REGSTR_VAL_BUSTYPE TEXT("BusType")
+#define REGSTR_VAL_CPU TEXT("CPU")
+#define REGSTR_VAL_NDP TEXT("NDP")
+#define REGSTR_VAL_PNPBIOSVER TEXT("PnPBIOSVer")
+#define REGSTR_VAL_PNPSTRUCOFFSET TEXT("PnPStrucOffset")
+#define REGSTR_VAL_PCIBIOSVER TEXT("PCIBIOSVer")
+#define REGSTR_VAL_HWMECHANISM TEXT("HWMechanism")
+#define REGSTR_VAL_LASTPCIBUSNUM TEXT("LastPCIBusNum")
+#define REGSTR_VAL_CONVMEM TEXT("ConvMem")
+#define REGSTR_VAL_EXTMEM TEXT("ExtMem")
+#define REGSTR_VAL_COMPUTERNAME TEXT("ComputerName")
+#define REGSTR_VAL_BIOSNAME TEXT("BIOSName")
+#define REGSTR_VAL_BIOSVERSION TEXT("BIOSVersion")
+#define REGSTR_VAL_BIOSDATE TEXT("BIOSDate")
+#define REGSTR_VAL_MODEL TEXT("Model")
+#define REGSTR_VAL_SUBMODEL TEXT("Submodel")
+#define REGSTR_VAL_REVISION TEXT("Revision")
+#define REGSTR_VAL_FIFODEPTH TEXT("FIFODepth")
+#define REGSTR_VAL_RDINTTHRESHOLD TEXT("RDIntThreshold")
+#define REGSTR_VAL_WRINTTHRESHOLD TEXT("WRIntThreshold")
+#define REGSTR_VAL_PRIORITY TEXT("Priority")
+#define REGSTR_VAL_DRIVER TEXT("Driver")
+#define REGSTR_VAL_FUNCDESC TEXT("FunctionDesc")
+#define REGSTR_VAL_FORCEDCONFIG TEXT("ForcedConfig")
+#define REGSTR_VAL_CONFIGFLAGS TEXT("ConfigFlags")
+#define REGSTR_VAL_CSCONFIGFLAGS TEXT("CSConfigFlags")
+#define CONFIGFLAG_DISABLED 1
+#define CONFIGFLAG_REMOVED 2
+#define CONFIGFLAG_MANUAL_INSTALL 4
+#define CONFIGFLAG_IGNORE_BOOT_LC 8
+#define CONFIGFLAG_NET_BOOT 16
+#define CONFIGFLAG_REINSTALL 32
+#define CONFIGFLAG_FAILEDINSTALL 64
+#define CONFIGFLAG_CANTSTOPACHILD 128
+#define CONFIGFLAG_OKREMOVEROM 256
+#define CONFIGFLAG_NOREMOVEEXIT 512
+#define CSCONFIGFLAG_BITS 7
+#define CSCONFIGFLAG_DISABLED 1
+#define CSCONFIGFLAG_DO_NOT_CREATE 2
+#define CSCONFIGFLAG_DO_NOT_START 4
+#define DMSTATEFLAG_APPLYTOALL 1
+#define REGSTR_VAL_ROOT_DEVNODE TEXT("HTREE\\ROOT\\0")
+#define REGSTR_VAL_RESERVED_DEVNODE TEXT("HTREE\\RESERVED\\0")
+#define REGSTR_PATH_READDATAPORT REGSTR_KEY_ISAENUM TEXT("\\ReadDataPort\\0")
+#define REGSTR_PATH_MULTI_FUNCTION TEXT("MF")
+#define REGSTR_VAL_RESOURCE_MAP TEXT("ResourceMap")
+#define REGSTR_PATH_CHILD_PREFIX TEXT("Child")
+#define NUM_RESOURCE_MAP 256
+#define REGSTR_VAL_MF_FLAGS TEXT("MFFlags")
+#define MF_FLAGS_EVEN_IF_NO_RESOURCE 1
+#define MF_FLAGS_NO_CREATE_IF_NO_RESOURCE 2
+#define MF_FLAGS_FILL_IN_UNKNOWN_RESOURCE 4
+#define MF_FLAGS_CREATE_BUT_NO_SHOW_DISABLED 8
+#define EISAFLAG_NO_IO_MERGE 1
+#define EISAFLAG_SLOT_IO_FIRST 2
+#define EISA_NO_MAX_FUNCTION 0xFF
+#define NUM_EISA_RANGES 4
+#define REGSTR_VAL_DRVDESC TEXT("DriverDesc")
+#define REGSTR_VAL_DEVLOADER TEXT("DevLoader")
+#define REGSTR_VAL_STATICVXD TEXT("StaticVxD")
+#define REGSTR_VAL_PROPERTIES TEXT("Properties")
+#define REGSTR_VAL_MANUFACTURER TEXT("Manufacturer")
+#define REGSTR_VAL_EXISTS TEXT("Exists")
+#define REGSTR_VAL_CMENUMFLAGS TEXT("CMEnumFlags")
+#define REGSTR_VAL_CMDRIVFLAGS TEXT("CMDrivFlags")
+#define REGSTR_VAL_ENUMERATOR TEXT("Enumerator")
+#define REGSTR_VAL_DEVICEDRIVER TEXT("DeviceDriver")
+#define REGSTR_VAL_PORTNAME TEXT("PortName")
+#define REGSTR_VAL_INFPATH TEXT("InfPath")
+#define REGSTR_VAL_INFSECTION TEXT("InfSection")
+#define REGSTR_VAL_POLLING TEXT("Polling")
+#define REGSTR_VAL_DONTLOADIFCONFLICT TEXT("DontLoadIfConflict")
+#define REGSTR_VAL_PORTSUBCLASS TEXT("PortSubClass")
+#define REGSTR_VAL_NETCLEAN TEXT("NetClean")
+#define REGSTR_VAL_IDE_NO_SERIALIZE TEXT("IDENoSerialize")
+#define REGSTR_VAL_NOCMOSORFDPT TEXT("NoCMOSorFDPT")
+#define REGSTR_VAL_COMVERIFYBASE TEXT("COMVerifyBase")
+#define REGSTR_KEY_OVERRIDE TEXT("Override")
+#define REGSTR_VAL_CONFIGMG TEXT("CONFIGMG")
+#define REGSTR_VAL_SYSDM TEXT("SysDM")
+#define REGSTR_VAL_SYSDMFUNC TEXT("SysDMFunc")
+#define REGSTR_VAL_PRIVATE TEXT("Private")
+#define REGSTR_VAL_PRIVATEFUNC TEXT("PrivateFunc")
+#define REGSTR_VAL_DETECT TEXT("Detect")
+#define REGSTR_VAL_DETECTFUNC TEXT("DetectFunc")
+#define REGSTR_VAL_ASKFORCONFIG TEXT("AskForConfig")
+#define REGSTR_VAL_ASKFORCONFIGFUNC TEXT("AskForConfigFunc")
+#define REGSTR_VAL_WAITFORUNDOCK TEXT("WaitForUndock")
+#define REGSTR_VAL_WAITFORUNDOCKFUNC TEXT("WaitForUndockFunc")
+#define REGSTR_VAL_REMOVEROMOKAY TEXT("RemoveRomOkay")
+#define REGSTR_VAL_REMOVEROMOKAYFUNC TEXT("RemoveRomOkayFunc")
+#define REGSTR_VAL_CURCONFIG TEXT("CurrentConfig")
+#define REGSTR_VAL_FRIENDLYNAME TEXT("FriendlyName")
+#define REGSTR_VAL_CURRENTCONFIG TEXT("CurrentConfig")
+#define REGSTR_VAL_MAP TEXT("Map")
+#define REGSTR_VAL_ID TEXT("CurrentID")
+#define REGSTR_VAL_DOCKED TEXT("CurrentDockedState")
+#define REGSTR_VAL_CHECKSUM TEXT("CurrentChecksum")
+#define REGSTR_VAL_HWDETECT TEXT("HardwareDetect")
+#define REGSTR_VAL_INHIBITRESULTS TEXT("InhibitResults")
+#define REGSTR_VAL_PROFILEFLAGS TEXT("ProfileFlags")
+#define REGSTR_KEY_PCMCIA TEXT("PCMCIA\\")
+#define REGSTR_KEY_PCUNKNOWN TEXT("UNKNOWN_MANUFACTURER")
+#define REGSTR_VAL_PCSSDRIVER TEXT("Driver")
+#define REGSTR_KEY_PCMTD TEXT("MTD-")
+#define REGSTR_VAL_PCMTDRIVER TEXT("MTD")
+#define REGSTR_VAL_HARDWAREID TEXT("HardwareID")
+#define REGSTR_VAL_INSTALLER TEXT("Installer")
+#define REGSTR_VAL_INSICON TEXT("Icon")
+#define REGSTR_VAL_ENUMPROPPAGES TEXT("EnumPropPages")
+#define REGSTR_VAL_BASICPROPERTIES TEXT("BasicProperties")
+#define REGSTR_VAL_PRIVATEPROBLEM TEXT("PrivateProblem")
+#define REGSTR_KEY_CURRENT TEXT("Current")
+#define REGSTR_KEY_DEFAULT TEXT("Default")
+#define REGSTR_KEY_MODES TEXT("Modes")
+#define REGSTR_VAL_MODE TEXT("Mode")
+#define REGSTR_VAL_BPP TEXT("BPP")
+#define REGSTR_VAL_HRES TEXT("HRes")
+#define REGSTR_VAL_VRES TEXT("VRes")
+#define REGSTR_VAL_FONTSIZE TEXT("FontSize")
+#define REGSTR_VAL_DRV TEXT("drv")
+#define REGSTR_VAL_GRB TEXT("grb")
+#define REGSTR_VAL_VDD TEXT("vdd")
+#define REGSTR_VAL_VER TEXT("Ver")
+#define REGSTR_VAL_MAXRES TEXT("MaxResolution")
+#define REGSTR_VAL_DPMS TEXT("DPMS")
+#define REGSTR_VAL_RESUMERESET TEXT("ResumeReset")
+#define REGSTR_VAL_DESCRIPTION TEXT("Description")
+#define REGSTR_KEY_SYSTEM TEXT("System")
+#define REGSTR_KEY_USER TEXT("User")
+#define REGSTR_VAL_DPI TEXT("dpi")
+#define REGSTR_VAL_PCICOPTIONS TEXT("PCICOptions")
+#ifndef NEC_98
+#define PCIC_DEFAULT_IRQMASK 0x4EB8
+#else
+#define PCIC_DEFAULT_IRQMASK 0x1468
+#endif
+#define PCIC_DEFAULT_NUMSOCKETS 0
+#define REGSTR_VAL_PCICIRQMAP TEXT("PCICIRQMap")
+#define REGSTR_PATH_APPEARANCE TEXT("Control Panel\\Appearance")
+#define REGSTR_PATH_LOOKSCHEMES TEXT("Control Panel\\Appearance\\Schemes")
+#define REGSTR_VAL_CUSTOMCOLORS TEXT("CustomColors")
+#define REGSTR_PATH_SCREENSAVE TEXT("Control Panel\\Desktop")
+#define REGSTR_VALUE_USESCRPASSWORD TEXT("ScreenSaveUsePassword")
+#define REGSTR_VALUE_SCRPASSWORD TEXT("ScreenSave_Data")
+#define REGSTR_VALUE_LOWPOWERTIMEOUT TEXT("ScreenSaveLowPowerTimeout")
+#define REGSTR_VALUE_POWEROFFTIMEOUT TEXT("ScreenSavePowerOffTimeout")
+#define REGSTR_VALUE_LOWPOWERACTIVE TEXT("ScreenSaveLowPowerActive")
+#define REGSTR_VALUE_POWEROFFACTIVE TEXT("ScreenSavePowerOffActive")
+#define REGSTR_PATH_WINDOWSAPPLETS TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Applets")
+#define REGSTR_PATH_SYSTRAY TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Applets\\SysTray")
+#define REGSTR_VAL_SYSTRAYSVCS TEXT("Services")
+#define REGSTR_VAL_SYSTRAYBATFLAGS TEXT("PowerFlags")
+#define REGSTR_VAL_SYSTRAYPCCARDFLAGS TEXT("PCMCIAFlags")
+#define REGSTR_PATH_NETWORK_USERSETTINGS TEXT("Network")
+#define REGSTR_KEY_NETWORK_PERSISTENT TEXT("\\Persistent")
+#define REGSTR_KEY_NETWORK_RECENT TEXT("\\Recent")
+#define REGSTR_VAL_REMOTE_PATH TEXT("RemotePath")
+#define REGSTR_VAL_USER_NAME TEXT("UserName")
+#define REGSTR_VAL_PROVIDER_NAME TEXT("ProviderName")
+#define REGSTR_VAL_CONNECTION_TYPE TEXT("ConnectionType")
+#define REGSTR_VAL_UPGRADE TEXT("Upgrade")
+#define REGSTR_KEY_LOGON TEXT("\\Logon")
+#define REGSTR_VAL_MUSTBEVALIDATED TEXT("MustBeValidated")
+#define REGSTR_VAL_RUNLOGINSCRIPT TEXT("ProcessLoginScript")
+#define REGSTR_KEY_NETWORKPROVIDER TEXT("\\NetworkProvider")
+#define REGSTR_PATH_NW32NETPROVIDER REGSTR_PATH_SERVICES TEXT("\\NWNP32" REGSTR_KEY_NETWORKPROVIDER
+#define REGSTR_PATH_MS32NETPROVIDER REGSTR_PATH_SERVICES TEXT("\\MSNP32" REGSTR_KEY_NETWORKPROVIDER
+#define REGSTR_VAL_AUTHENT_AGENT TEXT("AuthenticatingAgent")
+#define REGSTR_VAL_PREFREDIR TEXT("PreferredRedir")
+#define REGSTR_VAL_AUTOSTART TEXT("AutoStart")
+#define REGSTR_VAL_AUTOLOGON TEXT("AutoLogon")
+#define REGSTR_VAL_NETCARD TEXT("Netcard")
+#define REGSTR_VAL_TRANSPORT TEXT("Transport")
+#define REGSTR_VAL_DYNAMIC TEXT("Dynamic")
+#define REGSTR_VAL_TRANSITION TEXT("Transition")
+#define REGSTR_VAL_STATICDRIVE TEXT("StaticDrive")
+#define REGSTR_VAL_LOADHI TEXT("LoadHi")
+#define REGSTR_VAL_LOADRMDRIVERS TEXT("LoadRMDrivers")
+#define REGSTR_VAL_SETUPN TEXT("SetupN")
+#define REGSTR_VAL_SETUPNPATH TEXT("SetupNPath")
+#define REGSTR_VAL_WRKGRP_FORCEMAPPING TEXT("WrkgrpForceMapping")
+#define REGSTR_VAL_WRKGRP_REQUIRED TEXT("WrkgrpRequired")
+#define REGSTR_PATH_CURRENT_CONTROL_SET TEXT("System\\CurrentControlSet\\Control")
+#define REGSTR_VAL_CURRENT_USER TEXT("Current User")
+#define REGSTR_PATH_PWDPROVIDER TEXT("System\\CurrentControlSet\\Control\\PwdProvider")
+#define REGSTR_VAL_PWDPROVIDER_PATH TEXT("ProviderPath")
+#define REGSTR_VAL_PWDPROVIDER_DESC TEXT("Description")
+#define REGSTR_VAL_PWDPROVIDER_CHANGEPWD TEXT("ChangePassword")
+#define REGSTR_VAL_PWDPROVIDER_CHANGEPWDHWND TEXT("ChangePasswordHwnd")
+#define REGSTR_VAL_PWDPROVIDER_GETPWDSTATUS TEXT("GetPasswordStatus")
+#define REGSTR_VAL_PWDPROVIDER_ISNP TEXT("NetworkProvider")
+#define REGSTR_VAL_PWDPROVIDER_CHANGEORDER TEXT("ChangeOrder")
+#define REGSTR_PATH_POLICIES TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Policies")
+#define REGSTR_PATH_UPDATE TEXT("System\\CurrentControlSet\\Control\\Update")
+#define REGSTR_VALUE_ENABLE TEXT("Enable")
+#define REGSTR_VALUE_VERBOSE TEXT("Verbose")
+#define REGSTR_VALUE_NETPATH TEXT("NetworkPath")
+#define REGSTR_VALUE_DEFAULTLOC TEXT("UseDefaultNetLocation")
+#define REGSTR_KEY_NETWORK TEXT("Network")
+#define REGSTR_KEY_SYSTEM TEXT("System")
+#define REGSTR_KEY_PRINTERS TEXT("Printers")
+#define REGSTR_KEY_WINOLDAPP TEXT("WinOldApp")
+#define REGSTR_VAL_NOFILESHARING TEXT("NoFileSharing")
+#define REGSTR_VAL_NOPRINTSHARING TEXT("NoPrintSharing")
+#define REGSTR_VAL_NOFILESHARINGCTRL TEXT("NoFileSharingControl")
+#define REGSTR_VAL_NOPRINTSHARINGCTRL TEXT("NoPrintSharingControl")
+#define REGSTR_VAL_HIDESHAREPWDS TEXT("HideSharePwds")
+#define REGSTR_VAL_DISABLEPWDCACHING TEXT("DisablePwdCaching")
+#define REGSTR_VAL_ALPHANUMPWDS TEXT("AlphanumPwds")
+#define REGSTR_VAL_NETSETUP_DISABLE TEXT("NoNetSetup")
+#define REGSTR_VAL_NETSETUP_NOCONFIGPAGE TEXT("NoNetSetupConfigPage")
+#define REGSTR_VAL_NETSETUP_NOIDPAGE TEXT("NoNetSetupIDPage")
+#define REGSTR_VAL_NETSETUP_NOSECURITYPAGE TEXT("NoNetSetupSecurityPage")
+#define REGSTR_VAL_SYSTEMCPL_NOVIRTMEMPAGE TEXT("NoVirtMemPage")
+#define REGSTR_VAL_SYSTEMCPL_NODEVMGRPAGE TEXT("NoDevMgrPage")
+#define REGSTR_VAL_SYSTEMCPL_NOCONFIGPAGE TEXT("NoConfigPage")
+#define REGSTR_VAL_SYSTEMCPL_NOFILESYSPAGE TEXT("NoFileSysPage")
+#define REGSTR_VAL_DISPCPL_NODISPCPL TEXT("NoDispCPL")
+#define REGSTR_VAL_DISPCPL_NOBACKGROUNDPAGE TEXT("NoDispBackgroundPage")
+#define REGSTR_VAL_DISPCPL_NOSCRSAVPAGE TEXT("NoDispScrSavPage")
+#define REGSTR_VAL_DISPCPL_NOAPPEARANCEPAGE TEXT("NoDispAppearancePage")
+#define REGSTR_VAL_DISPCPL_NOSETTINGSPAGE TEXT("NoDispSettingsPage")
+#define REGSTR_VAL_SECCPL_NOSECCPL TEXT("NoSecCPL")
+#define REGSTR_VAL_SECCPL_NOPWDPAGE TEXT("NoPwdPage")
+#define REGSTR_VAL_SECCPL_NOADMINPAGE TEXT("NoAdminPage")
+#define REGSTR_VAL_SECCPL_NOPROFILEPAGE TEXT("NoProfilePage")
+#define REGSTR_VAL_PRINTERS_HIDETABS TEXT("NoPrinterTabs")
+#define REGSTR_VAL_PRINTERS_NODELETE TEXT("NoDeletePrinter")
+#define REGSTR_VAL_PRINTERS_NOADD TEXT("NoAddPrinter")
+#define REGSTR_VAL_WINOLDAPP_DISABLED TEXT("Disabled")
+#define REGSTR_VAL_WINOLDAPP_NOREALMODE TEXT("NoRealMode")
+#define REGSTR_VAL_NOENTIRENETWORK TEXT("NoEntireNetwork")
+#define REGSTR_VAL_NOWORKGROUPCONTENTS TEXT("NoWorkgroupContents")
+#define REGSTR_VAL_MINPWDLEN TEXT("MinPwdLen")
+#define REGSTR_VAL_PWDEXPIRATION TEXT("PwdExpiration")
+#define REGSTR_VAL_WIN31PROVIDER TEXT("Win31Provider")
+#define REGSTR_VAL_DISABLEREGTOOLS TEXT("DisableRegistryTools")
+#define REGSTR_PATH_WINLOGON TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Winlogon")
+#define REGSTR_VAL_LEGALNOTICECAPTION TEXT("LegalNoticeCaption")
+#define REGSTR_VAL_LEGALNOTICETEXT TEXT("LegalNoticeText")
+#define REGSTR_VAL_RESTRICTRUN TEXT("RestrictRun")
+#define REGSTR_KEY_POL_USERS TEXT("Users")
+#define REGSTR_KEY_POL_COMPUTERS TEXT("Computers")
+#define REGSTR_KEY_POL_USERGROUPS TEXT("UserGroups")
+#define REGSTR_KEY_POL_DEFAULT TEXT(".default")
+#define REGSTR_KEY_POL_USERGROUPDATA TEXT("GroupData\\UserGroups\\Priority")
+#define REGSTR_PATH_TIMEZONE TEXT("System\\CurrentControlSet\\Control\\TimeZoneInformation")
+#define REGSTR_VAL_TZBIAS TEXT("Bias")
+#define REGSTR_VAL_TZDLTBIAS TEXT("DaylightBias")
+#define REGSTR_VAL_TZSTDBIAS TEXT("StandardBias")
+#define REGSTR_VAL_TZACTBIAS TEXT("ActiveTimeBias")
+#define REGSTR_VAL_TZDLTFLAG TEXT("DaylightFlag")
+#define REGSTR_VAL_TZSTDSTART TEXT("StandardStart")
+#define REGSTR_VAL_TZDLTSTART TEXT("DaylightStart")
+#define REGSTR_VAL_TZDLTNAME TEXT("DaylightName")
+#define REGSTR_VAL_TZSTDNAME TEXT("StandardName")
+#define REGSTR_VAL_TZNOCHANGESTART TEXT("NoChangeStart")
+#define REGSTR_VAL_TZNOCHANGEEND TEXT("NoChangeEnd")
+#define REGSTR_VAL_TZNOAUTOTIME TEXT("DisableAutoDaylightTimeSet")
+#define REGSTR_PATH_FLOATINGPOINTPROCESSOR TEXT("HARDWARE\\DESCRIPTION\\System\\FloatingPointProcessor")
+#define REGSTR_PATH_FLOATINGPOINTPROCESSOR0 TEXT("HARDWARE\\DESCRIPTION\\System\\FloatingPointProcessor\\0")
+#define REGSTR_PATH_COMPUTRNAME TEXT("System\\CurrentControlSet\\Control\\ComputerName\\ComputerName")
+#define REGSTR_VAL_COMPUTRNAME TEXT("ComputerName")
+#define REGSTR_PATH_SHUTDOWN TEXT("System\\CurrentControlSet\\Control\\Shutdown")
+#define REGSTR_VAL_FORCEREBOOT TEXT("ForceReboot")
+#define REGSTR_VAL_SETUPPROGRAMRAN TEXT("SetupProgramRan")
+#define REGSTR_VAL_DOES_POLLING TEXT("PollingSupportNeeded")
+#define REGSTR_PATH_KNOWNDLLS TEXT("System\\CurrentControlSet\\Control\\SessionManager\\KnownDLLs")
+#define REGSTR_PATH_KNOWN16DLLS TEXT("System\\CurrentControlSet\\Control\\SessionManager\\Known16DLLs")
+#define REGSTR_PATH_CHECKVERDLLS TEXT("System\\CurrentControlSet\\Control\\SessionManager\\CheckVerDLLs")
+#define REGSTR_PATH_WARNVERDLLS TEXT("System\\CurrentControlSet\\Control\\SessionManager\\WarnVerDLLs")
+#define REGSTR_PATH_HACKINIFILE TEXT("System\\CurrentControlSet\\Control\\SessionManager\\HackIniFiles")
+#define REGSTR_PATH_CHECKBADAPPS TEXT("System\\CurrentControlSet\\Control\\SessionManager\\CheckBadApps")
+#define REGSTR_PATH_APPPATCH TEXT("System\\CurrentControlSet\\Control\\SessionManager\\AppPatches")
+#define REGSTR_PATH_KNOWNVXDS TEXT("System\\CurrentControlSet\\Control\\SessionManager\\KnownVxDs")
+#define REGSTR_VAL_UNINSTALLER_DISPLAYNAME TEXT("DisplayName")
+#define REGSTR_VAL_UNINSTALLER_COMMANDLINE TEXT("UninstallString")
+#define REGSTR_PATH_DESKTOP REGSTR_PATH_SCREENSAVE
+#define REGSTR_PATH_MOUSE TEXT("Control Panel\\Mouse")
+#define REGSTR_PATH_KEYBOARD TEXT("Control Panel\\Keyboard")
+#define REGSTR_PATH_COLORS TEXT("Control Panel\\Colors")
+#define REGSTR_PATH_SOUND TEXT("Control Panel\\Sound")
+#define REGSTR_PATH_METRICS TEXT("Control Panel\\Desktop\\WindowMetrics")
+#define REGSTR_PATH_ICONS TEXT("Control Panel\\Icons")
+#define REGSTR_PATH_CURSORS TEXT("Control Panel\\Cursors")
+#define REGSTR_PATH_CHECKDISK TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Applets\\Check Drive")
+#define REGSTR_PATH_CHECKDISKSET TEXT("Settings")
+#define REGSTR_PATH_CHECKDISKUDRVS TEXT("NoUnknownDDErrDrvs")
+#define REGSTR_PATH_FAULT TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Fault")
+#define REGSTR_VAL_FAULT_LOGFILE TEXT("LogFile")
+#define REGSTR_PATH_AEDEBUG TEXT("Software\\Microsoft\\Windows NT\\CurrentVersion\\AeDebug")
+#define REGSTR_VAL_AEDEBUG_DEBUGGER TEXT("Debugger")
+#define REGSTR_VAL_AEDEBUG_AUTO TEXT("Auto")
+#define REGSTR_PATH_GRPCONV TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\GrpConv")
+#define REGSTR_VAL_REGITEMDELETEMESSAGE TEXT("Removal Message")
+#define REGSTR_PATH_LASTCHECK TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\LastCheck")
+#define REGSTR_PATH_LASTOPTIMIZE TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\LastOptimize")
+#define REGSTR_PATH_LASTBACKUP TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\LastBackup")
+#define REGSTR_PATH_CHKLASTCHECK TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Applets\\Check Drive\\LastCheck")
+#define REGSTR_PATH_CHKLASTSURFAN TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Applets\\Check Drive\\LastSurfaceAnalysis")
+#define DTRESULTOK 0
+#define DTRESULTFIX 1
+#define DTRESULTPROB 2
+#define DTRESULTPART 3
+#define REGSTR_KEY_SHARES TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Network\\LanMan")
+#define REGSTR_VAL_SHARES_FLAGS TEXT("Flags")
+#define REGSTR_VAL_SHARES_TYPE TEXT("Type")
+#define REGSTR_VAL_SHARES_PATH TEXT("Path")
+#define REGSTR_VAL_SHARES_REMARK TEXT("Remark")
+#define REGSTR_VAL_SHARES_RW_PASS TEXT("Parm1")
+#define REGSTR_VAL_SHARES_RO_PASS TEXT("Parm2")
+#define REGSTR_PATH_PRINT TEXT("System\\CurrentControlSet\\Control\\Print")
+#define REGSTR_PATH_PRINTERS TEXT("System\\CurrentControlSet\\Control\\Print\\Printers")
+#define REGSTR_PATH_PROVIDERS TEXT("System\\CurrentControlSet\\Control\\Print\\Providers")
+#define REGSTR_PATH_MONITORS TEXT("System\\CurrentControlSet\\Control\\Print\\Monitors")
+#define REGSTR_PATH_ENVIRONMENTS TEXT("System\\CurrentControlSet\\Control\\Print\\Environments")
+#define REGSTR_VAL_START_ON_BOOT TEXT("StartOnBoot")
+#define REGSTR_VAL_PRINTERS_MASK TEXT("PrintersMask")
+#define REGSTR_VAL_DOS_SPOOL_MASK TEXT("DOSSpoolMask")
+#define REGSTR_KEY_CURRENT_ENV TEXT("\\Windows 4.0")
+#define REGSTR_KEY_DRIVERS TEXT("\\Drivers")
+#define REGSTR_KEY_PRINT_PROC TEXT("\\Print Processors")
+#define REGSTR_PATH_EVENTLABELS TEXT("AppEvents\\EventLabels")
+#define REGSTR_PATH_SCHEMES TEXT("AppEvents\\Schemes")
+#define REGSTR_PATH_APPS REGSTR_PATH_SCHEMES TEXT("\\Apps")
+#define REGSTR_PATH_APPS_DEFAULT REGSTR_PATH_SCHEMES TEXT("\\Apps\\.Default")
+#define REGSTR_PATH_NAMES REGSTR_PATH_SCHEMES TEXT("\\Names")
+#define REGSTR_PATH_MULTIMEDIA REGSTR_PATH_SETUP TEXT("\\Multimedia")
+#define REGSTR_PATH_MULTIMEDIA_AUDIO TEXT("Software\\Microsoft\\Multimedia\\Audio")
+#define REGSTR_PATH_MEDIARESOURCES REGSTR_PATH_CURRENT_CONTROL_SET TEXT("\\MediaResources")
+#define REGSTR_PATH_MEDIAPROPERTIES REGSTR_PATH_CURRENT_CONTROL_SET TEXT("\\MediaProperties")
+#define REGSTR_PATH_PRIVATEPROPERTIES REGSTR_PATH_MEDIAPROPERTIES TEXT("\\PrivateProperties")
+#define REGSTR_PATH_PUBLICPROPERTIES REGSTR_PATH_MEDIAPROPERTIES TEXT("\\PublicProperties")
+#define REGSTR_PATH_JOYOEM REGSTR_PATH_PRIVATEPROPERTIES TEXT("\\Joystick\\OEM")
+#define REGSTR_PATH_JOYCONFIG REGSTR_PATH_MEDIARESOURCES TEXT("\\Joystick")
+#define REGSTR_KEY_JOYCURR TEXT("CurrentJoystickSettings")
+#define REGSTR_KEY_JOYSETTINGS TEXT("JoystickSettings")
+#define REGSTR_VAL_JOYUSERVALUES TEXT("JoystickUserValues")
+#define REGSTR_VAL_JOYCALLOUT TEXT("JoystickCallout")
+#define REGSTR_VAL_JOYNCONFIG TEXT("Joystick%dConfiguration")
+#define REGSTR_VAL_JOYNOEMNAME TEXT("Joystick%dOEMName")
+#define REGSTR_VAL_JOYNOEMCALLOUT TEXT("Joystick%dOEMCallout")
+#define REGSTR_VAL_JOYOEMCALLOUT TEXT("OEMCallout")
+#define REGSTR_VAL_JOYOEMNAME TEXT("OEMName")
+#define REGSTR_VAL_JOYOEMDATA TEXT("OEMData")
+#define REGSTR_VAL_JOYOEMXYLABEL TEXT("OEMXYLabel")
+#define REGSTR_VAL_JOYOEMZLABEL TEXT("OEMZLabel")
+#define REGSTR_VAL_JOYOEMRLABEL TEXT("OEMRLabel")
+#define REGSTR_VAL_JOYOEMPOVLABEL TEXT("OEMPOVLabel")
+#define REGSTR_VAL_JOYOEMULABEL TEXT("OEMULabel")
+#define REGSTR_VAL_JOYOEMVLABEL TEXT("OEMVLabel")
+#define REGSTR_VAL_JOYOEMTESTMOVEDESC TEXT("OEMTestMoveDesc")
+#define REGSTR_VAL_JOYOEMTESTBUTTONDESC TEXT("OEMTestButtonDesc")
+#define REGSTR_VAL_JOYOEMTESTMOVECAP TEXT("OEMTestMoveCap")
+#define REGSTR_VAL_JOYOEMTESTBUTTONCAP TEXT("OEMTestButtonCap")
+#define REGSTR_VAL_JOYOEMTESTWINCAP TEXT("OEMTestWinCap")
+#define REGSTR_VAL_JOYOEMCALCAP TEXT("OEMCalCap")
+#define REGSTR_VAL_JOYOEMCALWINCAP TEXT("OEMCalWinCap")
+#define REGSTR_VAL_JOYOEMCAL1 TEXT("OEMCal1")
+#define REGSTR_VAL_JOYOEMCAL2 TEXT("OEMCal2")
+#define REGSTR_VAL_JOYOEMCAL3 TEXT("OEMCal3")
+#define REGSTR_VAL_JOYOEMCAL4 TEXT("OEMCal4")
+#define REGSTR_VAL_JOYOEMCAL5 TEXT("OEMCal5")
+#define REGSTR_VAL_JOYOEMCAL6 TEXT("OEMCal6")
+#define REGSTR_VAL_JOYOEMCAL7 TEXT("OEMCal7")
+#define REGSTR_VAL_JOYOEMCAL8 TEXT("OEMCal8")
+#define REGSTR_VAL_JOYOEMCAL9 TEXT("OEMCal9")
+#define REGSTR_VAL_JOYOEMCAL10 TEXT("OEMCal10")
+#define REGSTR_VAL_JOYOEMCAL11 TEXT("OEMCal11")
+#define REGSTR_VAL_JOYOEMCAL12 TEXT("OEMCal12")
+#ifndef NEC_98
+#define REGSTR_KEY_ISAENUM TEXT("ISAPnP")
+#define REGSTR_KEY_EISAENUM TEXT("EISA")
+#define REGSTR_VAL_EISA_RANGES TEXT("EISARanges")
+#define REGSTR_VAL_EISA_FUNCTIONS TEXT("EISAFunctions")
+#define REGSTR_VAL_EISA_FUNCTIONS_MASK TEXT("EISAFunctionsMask")
+#define REGSTR_VAL_EISA_FLAGS TEXT("EISAFlags")
+#define REGSTR_VAL_EISA_SIMULATE_INT15 TEXT("EISASimulateInt15")
+#else
+#define REGSTR_KEY_ISAENUM TEXT("C98PnP")
+#define REGSTR_KEY_EISAENUM TEXT("NESA")
+#define REGSTR_VAL_EISA_RANGES TEXT("NESARanges")
+#define REGSTR_VAL_EISA_FUNCTIONS TEXT("NESAFunctions")
+#define REGSTR_VAL_EISA_FUNCTIONS_MASK TEXT("NESAFunctionsMask")
+#define REGSTR_VAL_EISA_FLAGS TEXT("NESAFlags")
+#define REGSTR_VAL_EISA_SIMULATE_INT15 TEXT("NESASimulateInt15")
+#endif
+typedef struct _DSKTLSYSTEMTIME {
+ WORD wYear;
+ WORD wMonth;
+ WORD wDayOfWeek;
+ WORD wDay;
+ WORD wHour;
+ WORD wMinute;
+ WORD wSecond;
+ WORD wMilliseconds;
+ WORD wResult;
+} DSKTLSYSTEMTIME,*PDSKTLSYSTEMTIME,*LPDSKTLSYSTEMTIME;
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/richedit.h b/tcc/include/winapi/richedit.h
new file mode 100644
index 0000000..8cb57e8
--- /dev/null
+++ b/tcc/include/winapi/richedit.h
@@ -0,0 +1,523 @@
+#ifndef _RICHEDIT_H
+#define _RICHEDIT_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#pragma pack(push,4)
+
+#ifdef UNICODE
+#define RICHEDIT_CLASS L"RichEdit20W"
+#else
+#define RICHEDIT_CLASS "RichEdit20A"
+#endif
+#define RICHEDIT_CLASS10A "RICHEDIT"
+#define CF_RTF TEXT("Rich Text Format")
+#define CF_RTFNOOBJS TEXT("Rich Text Format Without Objects")
+#define CF_RETEXTOBJ TEXT("RichEdit Text and Objects")
+#define CFM_BOLD 1
+#define CFM_ITALIC 2
+#define CFM_UNDERLINE 4
+#define CFM_STRIKEOUT 8
+#define CFM_PROTECTED 16
+#define CFM_LINK 32
+#define CFM_SIZE 0x80000000
+#define CFM_COLOR 0x40000000
+#define CFM_FACE 0x20000000
+#define CFM_OFFSET 0x10000000
+#define CFM_CHARSET 0x08000000
+#define CFM_SUBSCRIPT 0x00030000
+#define CFM_SUPERSCRIPT 0x00030000
+#define CFM_EFFECTS (CFM_BOLD | CFM_ITALIC | CFM_UNDERLINE | CFM_COLOR | CFM_STRIKEOUT | CFE_PROTECTED | CFM_LINK)
+#define CFE_BOLD 1
+#define CFE_ITALIC 2
+#define CFE_UNDERLINE 4
+#define CFE_STRIKEOUT 8
+#define CFE_PROTECTED 16
+#define CFE_AUTOCOLOR 0x40000000
+#define CFE_SUBSCRIPT 0x00010000
+#define CFE_SUPERSCRIPT 0x00020000
+#define IMF_FORCENONE 1
+#define IMF_FORCEENABLE 2
+#define IMF_FORCEDISABLE 4
+#define IMF_CLOSESTATUSWINDOW 8
+#define IMF_VERTICAL 32
+#define IMF_FORCEACTIVE 64
+#define IMF_FORCEINACTIVE 128
+#define IMF_FORCEREMEMBER 256
+#define SEL_EMPTY 0
+#define SEL_TEXT 1
+#define SEL_OBJECT 2
+#define SEL_MULTICHAR 4
+#define SEL_MULTIOBJECT 8
+#define MAX_TAB_STOPS 32
+#define PFM_ALIGNMENT 8
+#define PFM_NUMBERING 32
+#define PFM_OFFSET 4
+#define PFM_OFFSETINDENT 0x80000000
+#define PFM_RIGHTINDENT 2
+#define PFM_STARTINDENT 1
+#define PFM_TABSTOPS 16
+#define PFM_BORDER 2048
+#define PFM_LINESPACING 256
+#define PFM_NUMBERINGSTART 32768
+#define PFM_NUMBERINGSTYLE 8192
+#define PFM_NUMBERINGTAB 16384
+#define PFM_SHADING 4096
+#define PFM_SPACEAFTER 128
+#define PFM_SPACEBEFORE 64
+#define PFM_STYLE 1024
+#define PFM_DONOTHYPHEN 4194304
+#define PFM_KEEP 131072
+#define PFM_KEEPNEXT 262144
+#define PFM_NOLINENUMBER 1048576
+#define PFM_NOWIDOWCONTROL 2097152
+#define PFM_PAGEBREAKBEFORE 524288
+#define PFM_RTLPARA 65536
+#define PFM_SIDEBYSIDE 8388608
+#define PFM_TABLE 1073741824
+#define PFN_BULLET 1
+#define PFE_DONOTHYPHEN 64
+#define PFE_KEEP 2
+#define PFE_KEEPNEXT 4
+#define PFE_NOLINENUMBER 16
+#define PFE_NOWIDOWCONTROL 32
+#define PFE_PAGEBREAKBEFORE 8
+#define PFE_RTLPARA 1
+#define PFE_SIDEBYSIDE 128
+#define PFE_TABLE 16384
+#define PFA_LEFT 1
+#define PFA_RIGHT 2
+#define PFA_CENTER 3
+#define PFA_JUSTIFY 4
+#define PFA_FULL_INTERWORD 4
+#define SF_TEXT 1
+#define SF_RTF 2
+#define SF_RTFNOOBJS 3
+#define SF_TEXTIZED 4
+#define SF_UNICODE 16
+#define SF_USECODEPAGE 32
+#define SF_NCRFORNONASCII 64
+#define SF_RTFVAL 0x0700
+#define SFF_PWD 0x0800
+#define SFF_KEEPDOCINFO 0x1000
+#define SFF_PERSISTVIEWSCALE 0x2000
+#define SFF_PLAINRTF 0x4000
+#define SFF_SELECTION 0x8000
+#define WB_CLASSIFY 3
+#define WB_MOVEWORDLEFT 4
+#define WB_MOVEWORDRIGHT 5
+#define WB_LEFTBREAK 6
+#define WB_RIGHTBREAK 7
+#define WB_MOVEWORDPREV 4
+#define WB_MOVEWORDNEXT 5
+#define WB_PREVBREAK 6
+#define WB_NEXTBREAK 7
+#define WBF_WORDWRAP 16
+#define WBF_WORDBREAK 32
+#define WBF_OVERFLOW 64
+#define WBF_LEVEL1 128
+#define WBF_LEVEL2 256
+#define WBF_CUSTOM 512
+#define ES_DISABLENOSCROLL 8192
+#define ES_EX_NOCALLOLEINIT 16777216
+#define ES_NOIME 524288
+#define ES_NOOLEDRAGDROP 8
+#define ES_SAVESEL 32768
+#define ES_SELECTIONBAR 16777216
+#define ES_SELFIME 262144
+#define ES_SUNKEN 16384
+#define ES_VERTICAL 4194304
+#define EM_CANPASTE (WM_USER+50)
+#define EM_DISPLAYBAND (WM_USER+51)
+#define EM_EXGETSEL (WM_USER+52)
+#define EM_EXLIMITTEXT (WM_USER+53)
+#define EM_EXLINEFROMCHAR (WM_USER+54)
+#define EM_EXSETSEL (WM_USER+55)
+#define EM_FINDTEXT (WM_USER+56)
+#define EM_FORMATRANGE (WM_USER+57)
+#define EM_GETCHARFORMAT (WM_USER+58)
+#define EM_GETEVENTMASK (WM_USER+59)
+#define EM_GETOLEINTERFACE (WM_USER+60)
+#define EM_GETPARAFORMAT (WM_USER+61)
+#define EM_GETSELTEXT (WM_USER+62)
+#define EM_HIDESELECTION (WM_USER+63)
+#define EM_PASTESPECIAL (WM_USER+64)
+#define EM_REQUESTRESIZE (WM_USER+65)
+#define EM_SELECTIONTYPE (WM_USER+66)
+#define EM_SETBKGNDCOLOR (WM_USER+67)
+#define EM_SETCHARFORMAT (WM_USER+68)
+#define EM_SETEVENTMASK (WM_USER+69)
+#define EM_SETOLECALLBACK (WM_USER+70)
+#define EM_SETPARAFORMAT (WM_USER+71)
+#define EM_SETTARGETDEVICE (WM_USER+72)
+#define EM_STREAMIN (WM_USER+73)
+#define EM_STREAMOUT (WM_USER+74)
+#define EM_GETTEXTRANGE (WM_USER+75)
+#define EM_FINDWORDBREAK (WM_USER+76)
+#define EM_SETOPTIONS (WM_USER+77)
+#define EM_GETOPTIONS (WM_USER+78)
+#define EM_FINDTEXTEX (WM_USER+79)
+#define EM_GETWORDBREAKPROCEX (WM_USER+80)
+#define EM_SETWORDBREAKPROCEX (WM_USER+81)
+/* RichEdit 2.0 messages */
+#define EM_SETUNDOLIMIT (WM_USER+82)
+#define EM_REDO (WM_USER+84)
+#define EM_CANREDO (WM_USER+85)
+#define EM_GETUNDONAME (WM_USER+86)
+#define EM_GETREDONAME (WM_USER+87)
+#define EM_STOPGROUPTYPING (WM_USER+88)
+#define EM_SETTEXTMODE (WM_USER+89)
+#define EM_GETTEXTMODE (WM_USER+90)
+#define EM_AUTOURLDETECT (WM_USER+91)
+#define EM_GETAUTOURLDETECT (WM_USER + 92)
+#define EM_SETPALETTE (WM_USER + 93)
+#define EM_GETTEXTEX (WM_USER+94)
+#define EM_GETTEXTLENGTHEX (WM_USER+95)
+#define EM_SHOWSCROLLBAR (WM_USER+96)
+#define EM_SETTEXTEX (WM_USER + 97)
+#define EM_SETPUNCTUATION (WM_USER + 100)
+#define EM_GETPUNCTUATION (WM_USER + 101)
+#define EM_SETWORDWRAPMODE (WM_USER + 102)
+#define EM_GETWORDWRAPMODE (WM_USER + 103)
+#define EM_SETIMECOLOR (WM_USER + 104)
+#define EM_GETIMECOLOR (WM_USER + 105)
+#define EM_SETIMEOPTIONS (WM_USER + 106)
+#define EM_GETIMEOPTIONS (WM_USER + 107)
+#define EM_SETLANGOPTIONS (WM_USER+120)
+#define EM_GETLANGOPTIONS (WM_USER+121)
+#define EM_GETIMECOMPMODE (WM_USER+122)
+#define EM_FINDTEXTW (WM_USER + 123)
+#define EM_FINDTEXTEXW (WM_USER + 124)
+#define EM_RECONVERSION (WM_USER + 125)
+#define EM_SETBIDIOPTIONS (WM_USER + 200)
+#define EM_GETBIDIOPTIONS (WM_USER + 201)
+#define EM_SETTYPOGRAPHYOPTIONS (WM_USER+202)
+#define EM_GETTYPOGRAPHYOPTIONS (WM_USER+203)
+#define EM_SETEDITSTYLE (WM_USER + 204)
+#define EM_GETEDITSTYLE (WM_USER + 205)
+#define EM_GETSCROLLPOS (WM_USER+221)
+#define EM_SETSCROLLPOS (WM_USER+222)
+#define EM_SETFONTSIZE (WM_USER+223)
+#define EM_GETZOOM (WM_USER+224)
+#define EM_SETZOOM (WM_USER+225)
+
+#define EN_CORRECTTEXT 1797
+#define EN_DROPFILES 1795
+#define EN_IMECHANGE 1799
+#define EN_LINK 1803
+#define EN_MSGFILTER 1792
+#define EN_OLEOPFAILED 1801
+#define EN_PROTECTED 1796
+#define EN_REQUESTRESIZE 1793
+#define EN_SAVECLIPBOARD 1800
+#define EN_SELCHANGE 1794
+#define EN_STOPNOUNDO 1798
+#define ENM_NONE 0
+#define ENM_CHANGE 1
+#define ENM_CORRECTTEXT 4194304
+#define ENM_DRAGDROPDONE 16
+#define ENM_DROPFILES 1048576
+#define ENM_IMECHANGE 8388608
+#define ENM_KEYEVENTS 65536
+#define ENM_LANGCHANGE 16777216
+#define ENM_LINK 67108864
+#define ENM_MOUSEEVENTS 131072
+#define ENM_OBJECTPOSITIONS 33554432
+#define ENM_PROTECTED 2097152
+#define ENM_REQUESTRESIZE 262144
+#define ENM_SCROLL 4
+#define ENM_SCROLLEVENTS 8
+#define ENM_SELCHANGE 524288
+#define ENM_UPDATE 2
+#define ECO_AUTOWORDSELECTION 1
+#define ECO_AUTOVSCROLL 64
+#define ECO_AUTOHSCROLL 128
+#define ECO_NOHIDESEL 256
+#define ECO_READONLY 2048
+#define ECO_WANTRETURN 4096
+#define ECO_SAVESEL 0x8000
+#define ECO_SELECTIONBAR 0x1000000
+#define ECO_VERTICAL 0x400000
+#define ECOOP_SET 1
+#define ECOOP_OR 2
+#define ECOOP_AND 3
+#define ECOOP_XOR 4
+#define SCF_DEFAULT 0
+#define SCF_SELECTION 1
+#define SCF_WORD 2
+#define SCF_ALL 4
+#define SCF_USEUIRULES 8
+#define TM_PLAINTEXT 1
+#define TM_RICHTEXT 2
+#define TM_SINGLELEVELUNDO 4
+#define TM_MULTILEVELUNDO 8
+#define TM_SINGLECODEPAGE 16
+#define TM_MULTICODEPAGE 32
+#define yHeightCharPtsMost 1638
+#define lDefaultTab 720
+
+typedef struct _charformat {
+ UINT cbSize;
+ DWORD dwMask;
+ DWORD dwEffects;
+ LONG yHeight;
+ LONG yOffset;
+ COLORREF crTextColor;
+ BYTE bCharSet;
+ BYTE bPitchAndFamily;
+ char szFaceName[LF_FACESIZE];
+} CHARFORMATA;
+typedef struct _charformatw {
+ UINT cbSize;
+ DWORD dwMask;
+ DWORD dwEffects;
+ LONG yHeight;
+ LONG yOffset;
+ COLORREF crTextColor;
+ BYTE bCharSet;
+ BYTE bPitchAndFamily;
+ WCHAR szFaceName[LF_FACESIZE];
+} CHARFORMATW;
+typedef struct _charformat2a {
+ UINT cbSize;
+ DWORD dwMask;
+ DWORD dwEffects;
+ LONG yHeight;
+ LONG yOffset;
+ COLORREF crTextColor;
+ BYTE bCharSet;
+ BYTE bPitchAndFamily;
+ char szFaceName[LF_FACESIZE];
+ WORD wWeight;
+ SHORT sSpacing;
+ COLORREF crBackColor;
+ LCID lcid;
+ DWORD dwReserved;
+ SHORT sStyle;
+ WORD wKerning;
+ BYTE bUnderlineType;
+ BYTE bAnimation;
+ BYTE bRevAuthor;
+} CHARFORMAT2A;
+typedef struct _charformat2w {
+ UINT cbSize;
+ DWORD dwMask;
+ DWORD dwEffects;
+ LONG yHeight;
+ LONG yOffset;
+ COLORREF crTextColor;
+ BYTE bCharSet;
+ BYTE bPitchAndFamily;
+ WCHAR szFaceName[LF_FACESIZE];
+ WORD wWeight;
+ SHORT sSpacing;
+ COLORREF crBackColor;
+ LCID lcid;
+ DWORD dwReserved;
+ SHORT sStyle;
+ WORD wKerning;
+ BYTE bUnderlineType;
+ BYTE bAnimation;
+ BYTE bRevAuthor;
+} CHARFORMAT2W;
+typedef struct _charrange {
+ LONG cpMin;
+ LONG cpMax;
+} CHARRANGE;
+typedef struct _compcolor {
+ COLORREF crText;
+ COLORREF crBackground;
+ DWORD dwEffects;
+} COMPCOLOR;
+typedef DWORD(CALLBACK *EDITSTREAMCALLBACK)(DWORD,PBYTE,LONG,LONG*);
+typedef struct _editstream {
+ DWORD dwCookie;
+ DWORD dwError;
+ EDITSTREAMCALLBACK pfnCallback;
+} EDITSTREAM;
+typedef struct _encorrecttext {
+ NMHDR nmhdr;
+ CHARRANGE chrg;
+ WORD seltyp;
+} ENCORRECTTEXT;
+typedef struct _endropfiles {
+ NMHDR nmhdr;
+ HANDLE hDrop;
+ LONG cp;
+ BOOL fProtected;
+} ENDROPFILES;
+typedef struct _enlink {
+ NMHDR nmhdr;
+ UINT msg;
+ WPARAM wParam;
+ LPARAM lParam;
+ CHARRANGE chrg;
+} ENLINK;
+typedef struct {
+ NMHDR nmhdr;
+ LONG iob;
+ LONG lOper;
+ HRESULT hr;
+} ENOLEOPFAILED;
+typedef struct _enprotected {
+ NMHDR nmhdr;
+ UINT msg;
+ WPARAM wParam;
+ LPARAM lParam;
+ CHARRANGE chrg;
+} ENPROTECTED,*LPENPROTECTED;
+typedef struct _ensaveclipboard {
+ NMHDR nmhdr;
+ LONG cObjectCount;
+ LONG cch;
+} ENSAVECLIPBOARD;
+typedef struct _findtextA {
+ CHARRANGE chrg;
+ LPSTR lpstrText;
+} FINDTEXTA;
+typedef struct _findtextW {
+ CHARRANGE chrg;
+ LPWSTR lpstrText;
+} FINDTEXTW;
+typedef struct _findtextexA {
+ CHARRANGE chrg;
+ LPSTR lpstrText;
+ CHARRANGE chrgText;
+} FINDTEXTEXA;
+typedef struct _findtextexW {
+ CHARRANGE chrg;
+ LPWSTR lpstrText;
+ CHARRANGE chrgText;
+} FINDTEXTEXW;
+typedef struct _formatrange {
+ HDC hdc;
+ HDC hdcTarget;
+ RECT rc;
+ RECT rcPage;
+ CHARRANGE chrg;
+} FORMATRANGE;
+typedef struct _msgfilter {
+ NMHDR nmhdr;
+ UINT msg;
+ WPARAM wParam;
+ LPARAM lParam;
+} MSGFILTER;
+typedef struct _paraformat {
+ UINT cbSize;
+ DWORD dwMask;
+ WORD wNumbering;
+ WORD wReserved;
+ LONG dxStartIndent;
+ LONG dxRightIndent;
+ LONG dxOffset;
+ WORD wAlignment;
+ SHORT cTabCount;
+ LONG rgxTabs[MAX_TAB_STOPS];
+} PARAFORMAT;
+typedef struct _paraformat2 {
+ UINT cbSize;
+ DWORD dwMask;
+ WORD wNumbering;
+ WORD wEffects;
+ LONG dxStartIndent;
+ LONG dxRightIndent;
+ LONG dxOffset;
+ WORD wAlignment;
+ SHORT cTabCount;
+ LONG rgxTabs[MAX_TAB_STOPS];
+ LONG dySpaceBefore;
+ LONG dySpaceAfter;
+ LONG dyLineSpacing;
+ SHORT sStype;
+ BYTE bLineSpacingRule;
+ BYTE bOutlineLevel;
+ WORD wShadingWeight;
+ WORD wShadingStyle;
+ WORD wNumberingStart;
+ WORD wNumberingStyle;
+ WORD wNumberingTab;
+ WORD wBorderSpace;
+ WORD wBorderWidth;
+ WORD wBorders;
+} PARAFORMAT2;
+typedef struct _selchange {
+ NMHDR nmhdr;
+ CHARRANGE chrg;
+ WORD seltyp;
+} SELCHANGE;
+typedef struct _textrange {
+ CHARRANGE chrg;
+ LPSTR lpstrText;
+} TEXTRANGEA;
+typedef struct _textrangew {
+ CHARRANGE chrg;
+ LPWSTR lpstrText;
+} TEXTRANGEW;
+typedef struct _reqresize {
+ NMHDR nmhdr;
+ RECT rc;
+} REQRESIZE;
+typedef struct _repastespecial {
+ DWORD dwAspect;
+ DWORD dwParam;
+} REPASTESPECIAL;
+typedef struct _punctuation {
+ UINT iSize;
+ LPSTR szPunctuation;
+} PUNCTUATION;
+typedef struct _gettextex {
+ DWORD cb;
+ DWORD flags;
+ UINT codepage;
+ LPCSTR lpDefaultChar;
+ LPBOOL lpUsedDefChar;
+} GETTEXTEX;
+/* GETTEXTEX flags */
+#define GT_DEFAULT 0
+#define GT_USECRLF 1
+#define GT_SELECTION 2
+typedef struct _settextex {
+ DWORD flags;
+ UINT codepage;
+} SETTEXTEX;
+/* SETTEXTEX flags */
+#define ST_DEFAULT 0
+#define ST_KEEPUNDO 1
+#define ST_SELECTION 2
+typedef LONG (*EDITWORDBREAKPROCEX)(char*,LONG,BYTE,INT);
+/* Defines for EM_SETTYPOGRAPHYOPTIONS */
+#define TO_ADVANCEDTYPOGRAPHY 1
+#define TO_SIMPLELINEBREAK 2
+/* Defines for GETTEXTLENGTHEX */
+#define GTL_DEFAULT 0
+#define GTL_USECRLF 1
+#define GTL_PRECISE 2
+#define GTL_CLOSE 4
+#define GTL_NUMCHARS 8
+#define GTL_NUMBYTES 16
+typedef struct _gettextlengthex {
+ DWORD flags;
+ UINT codepage;
+} GETTEXTLENGTHEX;
+#ifdef UNICODE
+typedef CHARFORMATW CHARFORMAT;
+typedef CHARFORMAT2W CHARFORMAT2;
+typedef FINDTEXTW FINDTEXT;
+typedef FINDTEXTEXW FINDTEXTEX;
+typedef TEXTRANGEW TEXTRANGE;
+#else
+typedef CHARFORMATA CHARFORMAT;
+typedef CHARFORMAT2A CHARFORMAT2;
+typedef FINDTEXTA FINDTEXT;
+typedef FINDTEXTEXA FINDTEXTEX;
+typedef TEXTRANGEA TEXTRANGE;
+#endif
+#pragma pack(pop)
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/richole.h b/tcc/include/winapi/richole.h
new file mode 100644
index 0000000..48dc13a
--- /dev/null
+++ b/tcc/include/winapi/richole.h
@@ -0,0 +1,107 @@
+#ifndef _RICHOLE_H
+#define _RICHOLE_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#pragma pack(push,4)
+#define REO_GETOBJ_NO_INTERFACES 0
+#define REO_GETOBJ_POLEOBJ 1
+#define REO_GETOBJ_PSTG 2
+#define REO_GETOBJ_POLESITE 4
+#define REO_GETOBJ_ALL_INTERFACES 7
+#define REO_CP_SELECTION ((ULONG)-1)
+#define REO_IOB_SELECTION ((ULONG)-1)
+#define REO_IOB_USE_CP ((ULONG)-2)
+#define REO_NULL 0
+#define REO_READWRITEMASK 0x3FL
+#define REO_DONTNEEDPALETTE 32
+#define REO_BLANK 16
+#define REO_DYNAMICSIZE 8
+#define REO_INVERTEDSELECT 4
+#define REO_BELOWBASELINE 2
+#define REO_RESIZABLE 1
+#define REO_LINK 0x80000000
+#define REO_STATIC 0x40000000
+#define REO_SELECTED 0x08000000
+#define REO_OPEN 0x4000000
+#define REO_INPLACEACTIVE 0x2000000
+#define REO_HILITED 0x1000000
+#define REO_LINKAVAILABLE 0x800000
+#define REO_GETMETAFILE 0x400000
+#define RECO_PASTE 0
+#define RECO_DROP 1
+#define RECO_COPY 2
+#define RECO_CUT 3
+#define RECO_DRAG 4
+
+extern const GUID IID_IRichEditOle;
+extern const GUID IID_IRichEditOleCallback;
+#ifndef INITGUID
+typedef struct _reobject {
+ DWORD cbStruct;
+ LONG cp;
+ CLSID clsid;
+ LPOLEOBJECT poleobj;
+ LPSTORAGE pstg;
+ LPOLECLIENTSITE polesite;
+ SIZEL sizel;
+ DWORD dvaspect;
+ DWORD dwFlags;
+ DWORD dwUser;
+} REOBJECT;
+
+#define INTERFACE IRichEditOle
+DECLARE_INTERFACE_(IRichEditOle, IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetClientSite)(THIS_ LPOLECLIENTSITE*) PURE;
+ STDMETHOD_(LONG,GetObjectCount)(THIS) PURE;
+ STDMETHOD_(LONG,GetLinkCount)(THIS) PURE;
+ STDMETHOD(GetObject)(THIS_ LONG, REOBJECT*,DWORD) PURE;
+ STDMETHOD(InsertObject)(THIS_ REOBJECT*) PURE;
+ STDMETHOD(ConvertObject)(THIS_ LONG,REFCLSID,LPCSTR) PURE;
+ STDMETHOD(ActivateAs)(THIS_ REFCLSID,REFCLSID) PURE;
+ STDMETHOD(SetHostNames)(THIS_ LPCSTR,LPCSTR) PURE;
+ STDMETHOD(SetLinkAvailable)(THIS_ LONG,BOOL) PURE;
+ STDMETHOD(SetDvaspect)(THIS_ LONG,DWORD) PURE;
+ STDMETHOD(HandsOffStorage)(THIS_ LONG) PURE;
+ STDMETHOD(SaveCompleted)(THIS_ LONG,LPSTORAGE) PURE;
+ STDMETHOD(InPlaceDeactivate)(THIS) PURE;
+ STDMETHOD(ContextSensitiveHelp)(THIS_ BOOL) PURE;
+ STDMETHOD(GetClipboardData)(THIS_ CHARRANGE*,DWORD,LPDATAOBJECT*) PURE;
+ STDMETHOD(ImportDataObject)(THIS_ LPDATAOBJECT,CLIPFORMAT,HGLOBAL) PURE;
+};
+#undef INTERFACE
+typedef IRichEditOle *LPRICHEDITOLE;
+
+#define INTERFACE IRichEditOleCallback
+DECLARE_INTERFACE_(IRichEditOleCallback, IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetNewStorage)(THIS_ LPSTORAGE*) PURE;
+ STDMETHOD(GetInPlaceContext)(THIS_ LPOLEINPLACEFRAME*,LPOLEINPLACEUIWINDOW*,LPOLEINPLACEFRAMEINFO) PURE;
+ STDMETHOD(ShowContainerUI)(THIS_ BOOL) PURE;
+ STDMETHOD(QueryInsertObject)(THIS_ LPCLSID,LPSTORAGE,LONG) PURE;
+ STDMETHOD(DeleteObject)(THIS_ LPOLEOBJECT) PURE;
+ STDMETHOD(QueryAcceptData) (THIS_ LPDATAOBJECT,CLIPFORMAT*,DWORD,BOOL,HGLOBAL) PURE;
+ STDMETHOD(ContextSensitiveHelp) (THIS_ BOOL) PURE;
+ STDMETHOD(GetClipboardData) (THIS_ CHARRANGE*,DWORD,LPDATAOBJECT*) PURE;
+ STDMETHOD(GetDragDropEffect) (THIS_ BOOL,DWORD,PDWORD) PURE;
+ STDMETHOD(GetContextMenu) (THIS_ WORD,LPOLEOBJECT,CHARRANGE*,HMENU*) PURE;
+};
+#undef INTERFACE
+typedef IRichEditOleCallback FAR * LPRICHEDITOLECALLBACK;
+#endif
+#pragma pack(pop)
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/routprot.h b/tcc/include/winapi/routprot.h
new file mode 100644
index 0000000..54fe9ee
--- /dev/null
+++ b/tcc/include/winapi/routprot.h
@@ -0,0 +1,70 @@
+/*
+ routprot.h - Routing and Remote Access Services
+
+ This file is part of a free library for the Win32 API.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+*/
+#ifndef _ROUTPROT_H
+#define _ROUTPROT_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--- Router Management MIB Reference - Transport and Protocol Constants */
+#define PROTO_IP_OTHER 0x00000001
+#define PROTO_IP_LOCAL 0x00000002
+#define PROTO_IP_NETMGMT 0x00000003
+#define PROTO_IP_ICMP 0x00000004
+#define PROTO_IP_EGP 0x00000005
+#define PROTO_IP_GGP 0x00000006
+#define PROTO_IP_HELLO 0x00000007
+#define PROTO_IP_RIP 0x00000008
+#define PROTO_IP_IS_IS 0x00000009
+#define PROTO_IP_ES_IS 0x0000000A
+#define PROTO_IP_CISCO 0x0000000B
+#define PROTO_IP_BBN 0x0000000C
+#define PROTO_IP_OSPF 0x0000000D
+#define PROTO_IP_BGP 0x0000000E
+#define PROTO_IP_BOOTP 0x0000270F
+#define PROTO_IP_NT_AUTOSTATIC 0x00002712
+#define PROTO_IP_NT_STATIC 0x00002716
+#define PROTO_IP_NT_STATIC_NON_DOD 0x00002717
+#define IPRTRMGR_PID 10000
+#define IPX_PROTOCOL_BASE 0x0001FFFF
+#define IPX_PROTOCOL_RIP 0x00020000
+#define IPX_PROTOCOL_SAP 0x00020001
+#define IPX_PROTOCOL_NLSP 0x00020002
+/*--- Router Management Reference - Router Management Structures */
+#if (_WIN32_WINNT >= 0x0500)
+typedef struct IP_ADAPTER_BINDING_INFO {
+ ULONG AddressCount;
+ DWORD RemoteAddress;
+ ULONG Mtu;
+ ULONGLONG Speed;
+ IP_LOCAL_BINDING Address[];
+} IP_ADAPTER_BINDING_INFO,*PIP_ADAPTER_BINDING_INFO;
+typedef struct IP_LOCAL_BINDING {
+ DWORD Address;
+ DWORD Mask;
+} IP_LOCAL_BINDING,*PIP_LOCAL_BINDING;
+typedef struct IPX_ADAPTER_BINDING_INFO {
+ ULONG AdapterIndex;
+ UCHAR Network[4];
+ UCHAR LocalNode[6];
+ UCHAR RemoteNode[6];
+ ULONG MaxPacketSize;
+ ULONG LinkSpeed;
+} IPX_ADAPTER_BINDING_INFO,*PIPX_ADAPTER_BINDING_INFO;
+#endif /* (_WIN32_WINNT >= 0x0500) */
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/rpc.h b/tcc/include/winapi/rpc.h
new file mode 100644
index 0000000..659d909
--- /dev/null
+++ b/tcc/include/winapi/rpc.h
@@ -0,0 +1,65 @@
+#ifndef RPC_NO_WINDOWS_H
+#include <windows.h>
+#endif
+
+#ifndef _RPC_H
+#define _RPC_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#define __RPC_WIN32__
+#ifndef _WIN95
+#define __RPC_NT__
+#define RPC_UNICODE_SUPPORTED
+#endif
+
+#ifdef _RPCRT4_
+#define RPCRTAPI DECLSPEC_EXPORT
+#else
+#define RPCRTAPI DECLSPEC_IMPORT
+#endif
+
+#ifndef __MIDL_USER_DEFINED
+#define midl_user_allocate MIDL_user_allocate
+#define midl_user_free MIDL_user_free
+#define __MIDL_USER_DEFINED
+#endif
+#define RPC_UNICODE_SUPPORTED
+#define __RPC_FAR
+#define __RPC_API __stdcall
+#define __RPC_USER __stdcall
+#define __RPC_STUB __stdcall
+#define RPC_ENTRY __stdcall
+typedef void *I_RPC_HANDLE;
+typedef long RPC_STATUS;
+
+#include <rpcdce.h>
+#include <rpcnsi.h>
+#include <rpcnterr.h>
+
+#include <winerror.h>
+
+/* SEH is not supported */
+#if 0
+#include <excpt.h>
+#define RpcTryExcept __try {
+#define RpcExcept(x) } __except (x) {
+#define RpcEndExcept }
+#define RpcTryFinally __try {
+#define RpcFinally } __finally {
+#define RpcEndFinally }
+#define RpcExceptionCode() GetExceptionCode()
+#define RpcAbnormalTermination() AbnormalTermination()
+#endif /* 0 */
+
+RPC_STATUS RPC_ENTRY RpcImpersonateClient(RPC_BINDING_HANDLE);
+RPC_STATUS RPC_ENTRY RpcRevertToSelf(void);
+long RPC_ENTRY I_RpcMapWin32Status(RPC_STATUS);
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/rpcdce.h b/tcc/include/winapi/rpcdce.h
new file mode 100644
index 0000000..edcdd39
--- /dev/null
+++ b/tcc/include/winapi/rpcdce.h
@@ -0,0 +1,396 @@
+#ifndef _RPCDCE_H
+#define _RPCDCE_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#include <basetyps.h>
+
+#ifndef _NO_W32_PSEUDO_MODIFIERS
+#define IN
+#define OUT
+#ifndef OPTIONAL
+#define OPTIONAL
+#endif
+#endif
+
+#define uuid_t UUID
+#define rpc_binding_handle_t RPC_BINDING_HANDLE
+#define rpc_binding_vector_t RPC_BINDING_VECTOR
+#define uuid_vector_t UUID_VECTOR
+#define RPC_C_BINDING_INFINITE_TIMEOUT 10
+#define RPC_C_BINDING_MIN_TIMEOUT 0
+#define RPC_C_BINDING_DEFAULT_TIMEOUT 5
+#define RPC_C_BINDING_MAX_TIMEOUT 9
+#define RPC_C_CANCEL_INFINITE_TIMEOUT (-1)
+#define RPC_C_LISTEN_MAX_CALLS_DEFAULT 1234
+#define RPC_C_PROTSEQ_MAX_REQS_DEFAULT 10
+#define RPC_C_BIND_TO_ALL_NICS 1
+#define RPC_C_USE_INTERNET_PORT 1
+#define RPC_C_USE_INTRANET_PORT 2
+#define RPC_MGR_EPV void
+#define RPC_C_STATS_CALLS_IN 0
+#define RPC_C_STATS_CALLS_OUT 1
+#define RPC_C_STATS_PKTS_IN 2
+#define RPC_C_STATS_PKTS_OUT 3
+#define RPC_IF_AUTOLISTEN 0x0001
+#define RPC_IF_OLE 2
+#define RPC_C_MGMT_INQ_IF_IDS 0
+#define RPC_C_MGMT_INQ_PRINC_NAME 1
+#define RPC_C_MGMT_INQ_STATS 2
+#define RPC_C_MGMT_IS_SERVER_LISTEN 3
+#define RPC_C_MGMT_STOP_SERVER_LISTEN 4
+#define RPC_C_EP_ALL_ELTS 0
+#define RPC_C_EP_MATCH_BY_IF 1
+#define RPC_C_EP_MATCH_BY_OBJ 2
+#define RPC_C_EP_MATCH_BY_BOTH 3
+#define RPC_C_VERS_ALL 1
+#define RPC_C_VERS_COMPATIBLE 2
+#define RPC_C_VERS_EXACT 3
+#define RPC_C_VERS_MAJOR_ONLY 4
+#define RPC_C_VERS_UPTO 5
+#define DCE_C_ERROR_STRING_LEN 256
+#define RPC_C_PARM_MAX_PACKET_LENGTH 1
+#define RPC_C_PARM_BUFFER_LENGTH 2
+#define RPC_C_AUTHN_LEVEL_DEFAULT 0
+#define RPC_C_AUTHN_LEVEL_NONE 1
+#define RPC_C_AUTHN_LEVEL_CONNECT 2
+#define RPC_C_AUTHN_LEVEL_CALL 3
+#define RPC_C_AUTHN_LEVEL_PKT 4
+#define RPC_C_AUTHN_LEVEL_PKT_INTEGRITY 5
+#define RPC_C_AUTHN_LEVEL_PKT_PRIVACY 6
+#define RPC_C_IMP_LEVEL_ANONYMOUS 1
+#define RPC_C_IMP_LEVEL_IDENTIFY 2
+#define RPC_C_IMP_LEVEL_IMPERSONATE 3
+#define RPC_C_IMP_LEVEL_DELEGATE 4
+#define RPC_C_QOS_IDENTITY_STATIC 0
+#define RPC_C_QOS_IDENTITY_DYNAMIC 1
+#define RPC_C_QOS_CAPABILITIES_DEFAULT 0
+#define RPC_C_QOS_CAPABILITIES_MUTUAL_AUTH 1
+#define RPC_C_PROTECT_LEVEL_DEFAULT(RPC_C_AUTHN_LEVEL_DEFAULT)
+#define RPC_C_PROTECT_LEVEL_NONE(RPC_C_AUTHN_LEVEL_NONE)
+#define RPC_C_PROTECT_LEVEL_CONNECT(RPC_C_AUTHN_LEVEL_CONNECT)
+#define RPC_C_PROTECT_LEVEL_CALL(RPC_C_AUTHN_LEVEL_CALL)
+#define RPC_C_PROTECT_LEVEL_PKT(RPC_C_AUTHN_LEVEL_PKT)
+#define RPC_C_PROTECT_LEVEL_PKT_INTEGRITY(RPC_C_AUTHN_LEVEL_PKT_INTEGRITY)
+#define RPC_C_PROTECT_LEVEL_PKT_PRIVACY(RPC_C_AUTHN_LEVEL_PKT_PRIVACY)
+#define RPC_C_AUTHN_NONE 0
+#define RPC_C_AUTHN_DCE_PRIVATE 1
+#define RPC_C_AUTHN_DCE_PUBLIC 2
+#define RPC_C_AUTHN_DEC_PUBLIC 4
+#define RPC_C_AUTHN_WINNT 10
+#define RPC_C_AUTHN_DEFAULT 0xFFFFFFFF
+#define RPC_C_SECURITY_QOS_VERSION L
+#define SEC_WINNT_AUTH_IDENTITY_ANSI 0x1
+#define SEC_WINNT_AUTH_IDENTITY_UNICODE 0x2
+#define RPC_C_AUTHZ_NONE 0
+#define RPC_C_AUTHZ_NAME 1
+#define RPC_C_AUTHZ_DCE 2
+#define RPC_C_AUTHZ_DEFAULT 0xFFFFFFFF
+
+typedef I_RPC_HANDLE RPC_BINDING_HANDLE;
+typedef RPC_BINDING_HANDLE handle_t;
+typedef struct _RPC_BINDING_VECTOR {
+ unsigned long Count;
+ RPC_BINDING_HANDLE BindingH[1];
+} RPC_BINDING_VECTOR;
+typedef struct _UUID_VECTOR {
+ unsigned long Count;
+ UUID *Uuid[1];
+} UUID_VECTOR;
+typedef void *RPC_IF_HANDLE;
+typedef struct _RPC_IF_ID {
+ UUID Uuid;
+ unsigned short VersMajor;
+ unsigned short VersMinor;
+} RPC_IF_ID;
+typedef struct _RPC_POLICY {
+ unsigned int Length ;
+ unsigned long EndpointFlags ;
+ unsigned long NICFlags ;
+} RPC_POLICY,*PRPC_POLICY ;
+typedef void __RPC_USER RPC_OBJECT_INQ_FN(UUID*,UUID*,RPC_STATUS*);
+typedef RPC_STATUS RPC_IF_CALLBACK_FN(RPC_IF_HANDLE,void*);
+typedef struct {
+ unsigned int Count;
+ unsigned long Stats[1];
+} RPC_STATS_VECTOR;
+typedef struct {
+ unsigned long Count;
+ RPC_IF_ID*IfId[1];
+} RPC_IF_ID_VECTOR;
+typedef void *RPC_AUTH_IDENTITY_HANDLE;
+typedef void *RPC_AUTHZ_HANDLE;
+typedef struct _RPC_SECURITY_QOS {
+ unsigned long Version;
+ unsigned long Capabilities;
+ unsigned long IdentityTracking;
+ unsigned long ImpersonationType;
+} RPC_SECURITY_QOS,*PRPC_SECURITY_QOS;
+typedef struct _SEC_WINNT_AUTH_IDENTITY_W {
+ unsigned short *User;
+ unsigned long UserLength;
+ unsigned short *Domain;
+ unsigned long DomainLength;
+ unsigned short *Password;
+ unsigned long PasswordLength;
+ unsigned long Flags;
+} SEC_WINNT_AUTH_IDENTITY_W,*PSEC_WINNT_AUTH_IDENTITY_W;
+typedef struct _SEC_WINNT_AUTH_IDENTITY_A {
+ unsigned char *User;
+ unsigned long UserLength;
+ unsigned char *Domain;
+ unsigned long DomainLength;
+ unsigned char *Password;
+ unsigned long PasswordLength;
+ unsigned long Flags;
+} SEC_WINNT_AUTH_IDENTITY_A,*PSEC_WINNT_AUTH_IDENTITY_A;
+typedef struct {
+ unsigned char *UserName;
+ unsigned char *ComputerName;
+ unsigned short Privilege;
+ unsigned long AuthFlags;
+} RPC_CLIENT_INFORMATION1,* PRPC_CLIENT_INFORMATION1;
+typedef I_RPC_HANDLE *RPC_EP_INQ_HANDLE;
+typedef int(__RPC_API *RPC_MGMT_AUTHORIZATION_FN)(RPC_BINDING_HANDLE,unsigned long,RPC_STATUS*);
+
+#ifdef RPC_UNICODE_SUPPORTED
+typedef struct _RPC_PROTSEQ_VECTORA {
+ unsigned int Count;
+ unsigned char*Protseq[1];
+} RPC_PROTSEQ_VECTORA;
+typedef struct _RPC_PROTSEQ_VECTORW {
+ unsigned int Count;
+ unsigned short*Protseq[1];
+} RPC_PROTSEQ_VECTORW;
+RPC_STATUS RPC_ENTRY RpcBindingFromStringBindingA(unsigned char *,RPC_BINDING_HANDLE *);
+RPC_STATUS RPC_ENTRY RpcBindingFromStringBindingW(unsigned short *,RPC_BINDING_HANDLE *);
+RPC_STATUS RPC_ENTRY RpcBindingToStringBindingA(RPC_BINDING_HANDLE,unsigned char**);
+RPC_STATUS RPC_ENTRY RpcBindingToStringBindingW(RPC_BINDING_HANDLE,unsigned short**);
+RPC_STATUS RPC_ENTRY RpcStringBindingComposeA(unsigned char *,unsigned char *,unsigned char *,unsigned char *,unsigned char *,unsigned char **);
+RPC_STATUS RPC_ENTRY RpcStringBindingComposeW(unsigned short *,unsigned short *,unsigned short *,unsigned short *,unsigned short *,unsigned short **);
+RPC_STATUS RPC_ENTRY RpcStringBindingParseA(unsigned char *,unsigned char **,unsigned char **,unsigned char **,unsigned char **,unsigned char **);
+RPC_STATUS RPC_ENTRY RpcStringBindingParseW(unsigned short *,unsigned short **,unsigned short **,unsigned short **,unsigned short **,unsigned short **);
+RPC_STATUS RPC_ENTRY RpcStringFreeA(unsigned char**);
+RPC_STATUS RPC_ENTRY RpcStringFreeW(unsigned short**);
+RPC_STATUS RPC_ENTRY RpcNetworkIsProtseqValidA(unsigned char*);
+RPC_STATUS RPC_ENTRY RpcNetworkIsProtseqValidW(unsigned short*);
+RPC_STATUS RPC_ENTRY RpcNetworkInqProtseqsA(RPC_PROTSEQ_VECTORA**);
+RPC_STATUS RPC_ENTRY RpcNetworkInqProtseqsW(RPC_PROTSEQ_VECTORW**);
+RPC_STATUS RPC_ENTRY RpcProtseqVectorFreeA(RPC_PROTSEQ_VECTORA**);
+RPC_STATUS RPC_ENTRY RpcProtseqVectorFreeW(RPC_PROTSEQ_VECTORW**);
+RPC_STATUS RPC_ENTRY RpcServerUseProtseqA(unsigned char*,unsigned int,void*);
+RPC_STATUS RPC_ENTRY RpcServerUseProtseqW(unsigned short*,unsigned int,void*);
+RPC_STATUS RPC_ENTRY RpcServerUseProtseqExA(unsigned char*,unsigned int MaxCalls,void*,PRPC_POLICY);
+RPC_STATUS RPC_ENTRY RpcServerUseProtseqExW(unsigned short*,unsigned int,void*,PRPC_POLICY);
+RPC_STATUS RPC_ENTRY RpcServerUseProtseqEpA(unsigned char*,unsigned int,unsigned char*,void*);
+RPC_STATUS RPC_ENTRY RpcServerUseProtseqEpExA(unsigned char*,unsigned int,unsigned char*,void*,PRPC_POLICY);
+RPC_STATUS RPC_ENTRY RpcServerUseProtseqEpW(unsigned short*,unsigned int,unsigned short*,void*);
+RPC_STATUS RPC_ENTRY RpcServerUseProtseqEpExW(unsigned short*,unsigned int,unsigned short*,void*,PRPC_POLICY);
+RPC_STATUS RPC_ENTRY RpcServerUseProtseqIfA(unsigned char*,unsigned int,RPC_IF_HANDLE,void*);
+RPC_STATUS RPC_ENTRY RpcServerUseProtseqIfExA(unsigned char*,unsigned int,RPC_IF_HANDLE,void*,PRPC_POLICY);
+RPC_STATUS RPC_ENTRY RpcServerUseProtseqIfW(unsigned short*,unsigned int,RPC_IF_HANDLE,void*);
+RPC_STATUS RPC_ENTRY RpcServerUseProtseqIfExW(unsigned short*,unsigned int,RPC_IF_HANDLE,void*,PRPC_POLICY);
+RPC_STATUS RPC_ENTRY RpcMgmtInqServerPrincNameA(RPC_BINDING_HANDLE,unsigned long,unsigned char**);
+RPC_STATUS RPC_ENTRY RpcMgmtInqServerPrincNameW(RPC_BINDING_HANDLE,unsigned long,unsigned short**);
+RPC_STATUS RPC_ENTRY RpcServerInqDefaultPrincNameA(unsigned long,unsigned char**);
+RPC_STATUS RPC_ENTRY RpcServerInqDefaultPrincNameW(unsigned long,unsigned short**);
+RPC_STATUS RPC_ENTRY RpcNsBindingInqEntryNameA(RPC_BINDING_HANDLE,unsigned long,unsigned char**);
+RPC_STATUS RPC_ENTRY RpcNsBindingInqEntryNameW(RPC_BINDING_HANDLE,unsigned long,unsigned short**);
+RPC_STATUS RPC_ENTRY RpcBindingInqAuthClientA(RPC_BINDING_HANDLE,RPC_AUTHZ_HANDLE *,unsigned char**,unsigned long*,unsigned long*,unsigned long*);
+RPC_STATUS RPC_ENTRY RpcBindingInqAuthClientW(RPC_BINDING_HANDLE,RPC_AUTHZ_HANDLE *,unsigned short**,unsigned long*,unsigned long*,unsigned long*);
+RPC_STATUS RPC_ENTRY RpcBindingInqAuthInfoA(RPC_BINDING_HANDLE,unsigned char**,unsigned long*,unsigned long*,RPC_AUTH_IDENTITY_HANDLE*,unsigned long*);
+RPC_STATUS RPC_ENTRY RpcBindingInqAuthInfoW(RPC_BINDING_HANDLE,unsigned short**,unsigned long*,unsigned long*,RPC_AUTH_IDENTITY_HANDLE*,unsigned long*);
+RPC_STATUS RPC_ENTRY RpcBindingSetAuthInfoA(RPC_BINDING_HANDLE,unsigned char*,unsigned long,unsigned long,RPC_AUTH_IDENTITY_HANDLE,unsigned long);
+RPC_STATUS RPC_ENTRY RpcBindingSetAuthInfoExA(RPC_BINDING_HANDLE,unsigned char*,unsigned long,unsigned long,RPC_AUTH_IDENTITY_HANDLE,unsigned long,RPC_SECURITY_QOS*);
+RPC_STATUS RPC_ENTRY RpcBindingSetAuthInfoW(RPC_BINDING_HANDLE,unsigned short*,unsigned long,unsigned long,RPC_AUTH_IDENTITY_HANDLE,unsigned long);
+RPC_STATUS RPC_ENTRY RpcBindingSetAuthInfoExW(RPC_BINDING_HANDLE,unsigned short*,unsigned long,unsigned long,RPC_AUTH_IDENTITY_HANDLE,unsigned long,RPC_SECURITY_QOS*);
+RPC_STATUS RPC_ENTRY RpcBindingInqAuthInfoExA(RPC_BINDING_HANDLE,unsigned char**,unsigned long*,unsigned long*,RPC_AUTH_IDENTITY_HANDLE*,unsigned long*,unsigned long,RPC_SECURITY_QOS*);
+RPC_STATUS RPC_ENTRY RpcBindingInqAuthInfoExW(RPC_BINDING_HANDLE,unsigned short ** , unsigned long *, unsigned long *, RPC_AUTH_IDENTITY_HANDLE *, unsigned long *, unsigned long , RPC_SECURITY_QOS *);
+typedef void(__RPC_USER *RPC_AUTH_KEY_RETRIEVAL_FN)(void*,unsigned short*,unsigned long,void**,RPC_STATUS*);
+RPC_STATUS RPC_ENTRY RpcServerRegisterAuthInfoA(unsigned char*,unsigned long,RPC_AUTH_KEY_RETRIEVAL_FN,void*);
+RPC_STATUS RPC_ENTRY RpcServerRegisterAuthInfoW(unsigned short*,unsigned long,RPC_AUTH_KEY_RETRIEVAL_FN,void*);
+RPC_STATUS RPC_ENTRY UuidToStringA(UUID*,unsigned char**);
+RPC_STATUS RPC_ENTRY UuidFromStringA(unsigned char*,UUID*);
+RPC_STATUS RPC_ENTRY UuidToStringW(UUID*,unsigned short**);
+RPC_STATUS RPC_ENTRY UuidFromStringW(unsigned short*,UUID*);
+RPC_STATUS RPC_ENTRY RpcEpRegisterNoReplaceA(RPC_IF_HANDLE,RPC_BINDING_VECTOR*,UUID_VECTOR*,unsigned char*);
+RPC_STATUS RPC_ENTRY RpcEpRegisterNoReplaceW(RPC_IF_HANDLE,RPC_BINDING_VECTOR*, UUID_VECTOR*,unsigned short*);
+RPC_STATUS RPC_ENTRY RpcEpRegisterA(RPC_IF_HANDLE,RPC_BINDING_VECTOR*,UUID_VECTOR*,unsigned char*);
+RPC_STATUS RPC_ENTRY RpcEpRegisterW(RPC_IF_HANDLE,RPC_BINDING_VECTOR*,UUID_VECTOR*,unsigned short*);
+RPC_STATUS RPC_ENTRY DceErrorInqTextA(RPC_STATUS,unsigned char*);
+RPC_STATUS RPC_ENTRY DceErrorInqTextW(RPC_STATUS,unsigned short*);
+RPC_STATUS RPC_ENTRY RpcMgmtEpEltInqNextA(RPC_EP_INQ_HANDLE,RPC_IF_ID*,RPC_BINDING_HANDLE*,UUID*,unsigned char**);
+RPC_STATUS RPC_ENTRY RpcMgmtEpEltInqNextW(RPC_EP_INQ_HANDLE,RPC_IF_ID*,RPC_BINDING_HANDLE*,UUID*,unsigned short**);
+#ifdef UNICODE
+#define RPC_PROTSEQ_VECTOR RPC_PROTSEQ_VECTORW
+#define SEC_WINNT_AUTH_IDENTITY SEC_WINNT_AUTH_IDENTITY_W
+#define PSEC_WINNT_AUTH_IDENTITY PSEC_WINNT_AUTH_IDENTITY_W
+#define _SEC_WINNT_AUTH_IDENTITY _SEC_WINNT_AUTH_IDENTITY_W
+#define RpcMgmtEpEltInqNext RpcMgmtEpEltInqNextW
+#define RpcBindingFromStringBinding RpcBindingFromStringBindingW
+#define RpcBindingToStringBinding RpcBindingToStringBindingW
+#define RpcStringBindingCompose RpcStringBindingComposeW
+#define RpcStringBindingParse RpcStringBindingParseW
+#define RpcStringFree RpcStringFreeW
+#define RpcNetworkIsProtseqValid RpcNetworkIsProtseqValidW
+#define RpcNetworkInqProtseqs RpcNetworkInqProtseqsW
+#define RpcProtseqVectorFree RpcProtseqVectorFreeW
+#define RpcServerUseProtseq RpcServerUseProtseqW
+#define RpcServerUseProtseqEx RpcServerUseProtseqExW
+#define RpcServerUseProtseqEp RpcServerUseProtseqEpW
+#define RpcServerUseProtseqEpEx RpcServerUseProtseqEpExW
+#define RpcServerUseProtseqIf RpcServerUseProtseqIfW
+#define RpcServerUseProtseqIfEx RpcServerUseProtseqIfExW
+#define RpcMgmtInqServerPrincName RpcMgmtInqServerPrincNameW
+#define RpcServerInqDefaultPrincName RpcServerInqDefaultPrincNameW
+#define RpcNsBindingInqEntryName RpcNsBindingInqEntryNameW
+#define RpcBindingInqAuthClient RpcBindingInqAuthClientW
+#define RpcBindingInqAuthInfo RpcBindingInqAuthInfoW
+#define RpcBindingSetAuthInfo RpcBindingSetAuthInfoW
+#define RpcServerRegisterAuthInfo RpcServerRegisterAuthInfoW
+#define RpcBindingInqAuthInfoEx RpcBindingInqAuthInfoExW
+#define RpcBindingSetAuthInfoEx RpcBindingSetAuthInfoExW
+#define UuidFromString UuidFromStringW
+#define UuidToString UuidToStringW
+#define RpcEpRegisterNoReplace RpcEpRegisterNoReplaceW
+#define RpcEpRegister RpcEpRegisterW
+#define DceErrorInqText DceErrorInqTextW
+#else /* UNICODE */
+#define RPC_PROTSEQ_VECTOR RPC_PROTSEQ_VECTORA
+#define SEC_WINNT_AUTH_IDENTITY SEC_WINNT_AUTH_IDENTITY_A
+#define PSEC_WINNT_AUTH_IDENTITY PSEC_WINNT_AUTH_IDENTITY_A
+#define _SEC_WINNT_AUTH_IDENTITY _SEC_WINNT_AUTH_IDENTITY_A
+#define RpcMgmtEpEltInqNext RpcMgmtEpEltInqNextA
+#define RpcBindingFromStringBinding RpcBindingFromStringBindingA
+#define RpcBindingToStringBinding RpcBindingToStringBindingA
+#define RpcStringBindingCompose RpcStringBindingComposeA
+#define RpcStringBindingParse RpcStringBindingParseA
+#define RpcStringFree RpcStringFreeA
+#define RpcNetworkIsProtseqValid RpcNetworkIsProtseqValidA
+#define RpcNetworkInqProtseqs RpcNetworkInqProtseqsA
+#define RpcProtseqVectorFree RpcProtseqVectorFreeA
+#define RpcServerUseProtseq RpcServerUseProtseqA
+#define RpcServerUseProtseqEx RpcServerUseProtseqExA
+#define RpcServerUseProtseqEp RpcServerUseProtseqEpA
+#define RpcServerUseProtseqEpEx RpcServerUseProtseqEpExA
+#define RpcServerUseProtseqIf RpcServerUseProtseqIfA
+#define RpcServerUseProtseqIfEx RpcServerUseProtseqIfExA
+#define RpcMgmtInqServerPrincName RpcMgmtInqServerPrincNameA
+#define RpcServerInqDefaultPrincName RpcServerInqDefaultPrincNameA
+#define RpcNsBindingInqEntryName RpcNsBindingInqEntryNameA
+#define RpcBindingInqAuthClient RpcBindingInqAuthClientA
+#define RpcBindingInqAuthInfo RpcBindingInqAuthInfoA
+#define RpcBindingSetAuthInfo RpcBindingSetAuthInfoA
+#define RpcServerRegisterAuthInfo RpcServerRegisterAuthInfoA
+#define RpcBindingInqAuthInfoEx RpcBindingInqAuthInfoExA
+#define RpcBindingSetAuthInfoEx RpcBindingSetAuthInfoExA
+#define UuidFromString UuidFromStringA
+#define UuidToString UuidToStringA
+#define RpcEpRegisterNoReplace RpcEpRegisterNoReplaceA
+#define RpcEpRegister RpcEpRegisterA
+#define DceErrorInqText DceErrorInqTextA
+#endif /* UNICODE */
+#else /* RPC_UNICODE_SUPPORTED */
+typedef struct _RPC_PROTSEQ_VECTOR {
+ unsigned int Count;
+ unsigned char* Protseq[1];
+} RPC_PROTSEQ_VECTOR;
+RPC_STATUS RPC_ENTRY RpcBindingFromStringBinding(unsigned char *,RPC_BINDING_HANDLE *);
+RPC_STATUS RPC_ENTRY RpcBindingToStringBinding(RPC_BINDING_HANDLE,unsigned char **);
+RPC_STATUS RPC_ENTRY RpcStringBindingCompose(unsigned char *,unsigned char *,unsigned char *,unsigned char *,unsigned char *,unsigned char **);
+RPC_STATUS RPC_ENTRY RpcStringBindingParse(unsigned char *,unsigned char **,unsigned char **,unsigned char **,unsigned char **,unsigned char **);
+RPC_STATUS RPC_ENTRY RpcStringFree(unsigned char**);
+RPC_STATUS RPC_ENTRY RpcNetworkIsProtseqValid(unsigned char*);
+RPC_STATUS RPC_ENTRY RpcNetworkInqProtseqs(RPC_PROTSEQ_VECTOR **);
+RPC_STATUS RPC_ENTRY RpcServerInqBindings(RPC_BINDING_VECTOR **);
+RPC_STATUS RPC_ENTRY RpcServerUseProtseq(unsigned char*,unsigned int,void*);
+RPC_STATUS RPC_ENTRY RpcServerUseProtseqEx(unsigned char*,unsigned int,void*,PRPC_POLICY);
+RPC_STATUS RPC_ENTRY RpcServerUseProtseqEp(unsigned char*,unsigned int,unsigned char*,void*);
+RPC_STATUS RPC_ENTRY RpcServerUseProtseqEpEx(unsigned char*,unsigned int,unsigned char*,void*,PRPC_POLICY);
+RPC_STATUS RPC_ENTRY RpcServerUseProtseqIf(unsigned char*,unsigned int,RPC_IF_HANDLE,void*);
+RPC_STATUS RPC_ENTRY RpcServerUseProtseqIfEx(unsigned char*,unsigned int,RPC_IF_HANDLE,void*,PRPC_POLICY);
+RPC_STATUS RPC_ENTRY RpcMgmtInqServerPrincName(RPC_BINDING_HANDLE,unsigned long,unsigned char**);
+RPC_STATUS RPC_ENTRY RpcServerInqDefaultPrincName(unsigned long,unsigned char**);
+RPC_STATUS RPC_ENTRY RpcNsBindingInqEntryName(RPC_BINDING_HANDLE,unsigned long,unsigned char**);
+RPC_STATUS RPC_ENTRY RpcBindingInqAuthClient(RPC_BINDING_HANDLE,RPC_AUTHZ_HANDLE*,unsigned char**,unsigned long*,unsigned long*,unsigned long*);
+RPC_STATUS RPC_ENTRY RpcBindingInqAuthInfo(RPC_BINDING_HANDLE,unsigned char **,unsigned long *,unsigned long *,RPC_AUTH_IDENTITY_HANDLE *,unsigned long *);
+RPC_STATUS RPC_ENTRY RpcBindingSetAuthInfo(RPC_BINDING_HANDLE,unsigned char *,unsigned long,unsigned long,RPC_AUTH_IDENTITY_HANDLE,unsigned long);
+typedef void(__RPC_USER *RPC_AUTH_KEY_RETRIEVAL_FN)(void*,unsigned char*,unsigned long,void**,RPC_STATUS*);
+RPC_STATUS RPC_ENTRY RpcServerRegisterAuthInfo(unsigned char*,unsigned long,RPC_AUTH_KEY_RETRIEVAL_FN,void*);
+RPC_STATUS RPC_ENTRY UuidToString(UUID*,unsigned char**);
+RPC_STATUS RPC_ENTRY UuidFromString(unsigned char*,UUID*);
+RPC_STATUS RPC_ENTRY RpcEpRegisterNoReplace(RPC_IF_HANDLE,RPC_BINDING_VECTOR*,UUID_VECTOR*,unsigned char*);
+RPC_STATUS RPC_ENTRY RpcEpRegister(RPC_IF_HANDLE,RPC_BINDING_VECTOR*,UUID_VECTOR*,unsigned char*);
+RPC_STATUS RPC_ENTRY DceErrorInqText(RPC_STATUS,unsigned char*);
+RPC_STATUS RPC_ENTRY RpcMgmtEpEltInqNext(RPC_EP_INQ_HANDLE,RPC_IF_ID *,RPC_BINDING_HANDLE *,unsigned char **);
+#endif /* RPC_UNICODE_SUPPORTED */
+
+RPC_STATUS RPC_ENTRY RpcBindingCopy(RPC_BINDING_HANDLE,RPC_BINDING_HANDLE*);
+RPC_STATUS RPC_ENTRY RpcBindingFree(RPC_BINDING_HANDLE*);
+RPC_STATUS RPC_ENTRY RpcBindingInqObject(RPC_BINDING_HANDLE,UUID *);
+RPC_STATUS RPC_ENTRY RpcBindingReset(RPC_BINDING_HANDLE);
+RPC_STATUS RPC_ENTRY RpcBindingSetObject(RPC_BINDING_HANDLE,UUID *);
+RPC_STATUS RPC_ENTRY RpcMgmtInqDefaultProtectLevel(unsigned long,unsigned long *);
+RPC_STATUS RPC_ENTRY RpcBindingVectorFree(RPC_BINDING_VECTOR **);
+RPC_STATUS RPC_ENTRY RpcIfInqId(RPC_IF_HANDLE,RPC_IF_ID *);
+RPC_STATUS RPC_ENTRY RpcMgmtInqComTimeout(RPC_BINDING_HANDLE,unsigned int*);
+RPC_STATUS RPC_ENTRY RpcMgmtSetComTimeout(RPC_BINDING_HANDLE,unsigned int);
+RPC_STATUS RPC_ENTRY RpcMgmtSetCancelTimeout(long Timeout);
+RPC_STATUS RPC_ENTRY RpcObjectInqType(UUID *,UUID *);
+RPC_STATUS RPC_ENTRY RpcObjectSetInqFn(RPC_OBJECT_INQ_FN *);
+RPC_STATUS RPC_ENTRY RpcObjectSetType(UUID *,UUID *);
+RPC_STATUS RPC_ENTRY RpcProtseqVectorFree(RPC_PROTSEQ_VECTOR **);
+RPC_STATUS RPC_ENTRY RpcServerInqIf(RPC_IF_HANDLE,UUID*,RPC_MGR_EPV**);
+RPC_STATUS RPC_ENTRY RpcServerListen(unsigned int,unsigned int,unsigned int);
+RPC_STATUS RPC_ENTRY RpcServerRegisterIf(RPC_IF_HANDLE,UUID*,RPC_MGR_EPV*);
+RPC_STATUS RPC_ENTRY RpcServerRegisterIfEx(RPC_IF_HANDLE,UUID*,RPC_MGR_EPV*,unsigned int,unsigned int,RPC_IF_CALLBACK_FN*);
+RPC_STATUS RPC_ENTRY RpcServerRegisterIf2(RPC_IF_HANDLE,UUID*,RPC_MGR_EPV*,unsigned int,unsigned int,unsigned int,RPC_IF_CALLBACK_FN*);
+RPC_STATUS RPC_ENTRY RpcServerUnregisterIf(RPC_IF_HANDLE,UUID*,unsigned int);
+RPC_STATUS RPC_ENTRY RpcServerUseAllProtseqs(unsigned int,void*);
+RPC_STATUS RPC_ENTRY RpcServerUseAllProtseqsEx(unsigned int,void*,PRPC_POLICY);
+RPC_STATUS RPC_ENTRY RpcServerUseAllProtseqsIf(unsigned int,RPC_IF_HANDLE,void*);
+RPC_STATUS RPC_ENTRY RpcServerUseAllProtseqsIfEx(unsigned int,RPC_IF_HANDLE,void*,PRPC_POLICY);
+RPC_STATUS RPC_ENTRY RpcMgmtStatsVectorFree(RPC_STATS_VECTOR**);
+RPC_STATUS RPC_ENTRY RpcMgmtInqStats(RPC_BINDING_HANDLE,RPC_STATS_VECTOR**);
+RPC_STATUS RPC_ENTRY RpcMgmtIsServerListening(RPC_BINDING_HANDLE);
+RPC_STATUS RPC_ENTRY RpcMgmtStopServerListening(RPC_BINDING_HANDLE);
+RPC_STATUS RPC_ENTRY RpcMgmtWaitServerListen(void);
+RPC_STATUS RPC_ENTRY RpcMgmtSetServerStackSize(unsigned long);
+void RPC_ENTRY RpcSsDontSerializeContext(void);
+RPC_STATUS RPC_ENTRY RpcMgmtEnableIdleCleanup(void);
+RPC_STATUS RPC_ENTRY RpcMgmtInqIfIds(RPC_BINDING_HANDLE,RPC_IF_ID_VECTOR**);
+RPC_STATUS RPC_ENTRY RpcIfIdVectorFree(RPC_IF_ID_VECTOR**);
+RPC_STATUS RPC_ENTRY RpcEpResolveBinding(RPC_BINDING_HANDLE,RPC_IF_HANDLE);
+RPC_STATUS RPC_ENTRY RpcBindingServerFromClient(RPC_BINDING_HANDLE,RPC_BINDING_HANDLE*);
+DECLSPEC_NORETURN void RPC_ENTRY RpcRaiseException(RPC_STATUS);
+RPC_STATUS RPC_ENTRY RpcTestCancel(void);
+RPC_STATUS RPC_ENTRY RpcCancelThread(void*);
+RPC_STATUS RPC_ENTRY UuidCreate(UUID*);
+signed int RPC_ENTRY UuidCompare(UUID*,UUID*, RPC_STATUS*);
+RPC_STATUS RPC_ENTRY UuidCreateNil(UUID*);
+int RPC_ENTRY UuidEqual(UUID*,UUID*, RPC_STATUS*);
+unsigned short RPC_ENTRY UuidHash(UUID*,RPC_STATUS*);
+int RPC_ENTRY UuidIsNil(UUID*,RPC_STATUS*);
+RPC_STATUS RPC_ENTRY RpcEpUnregister(RPC_IF_HANDLE,RPC_BINDING_VECTOR*,UUID_VECTOR*);
+RPC_STATUS RPC_ENTRY RpcMgmtEpEltInqBegin(RPC_BINDING_HANDLE,unsigned long,RPC_IF_ID*,unsigned long,UUID*,RPC_EP_INQ_HANDLE*);
+RPC_STATUS RPC_ENTRY RpcMgmtEpEltInqDone(RPC_EP_INQ_HANDLE*);
+RPC_STATUS RPC_ENTRY RpcMgmtEpUnregister(RPC_BINDING_HANDLE,RPC_IF_ID*,RPC_BINDING_HANDLE,UUID*);
+RPC_STATUS RPC_ENTRY RpcMgmtSetAuthorizationFn(RPC_MGMT_AUTHORIZATION_FN);
+RPC_STATUS RPC_ENTRY RpcMgmtInqParameter(unsigned int,unsigned long*);
+RPC_STATUS RPC_ENTRY RpcMgmtSetParameter(unsigned int,unsigned long);
+RPC_STATUS RPC_ENTRY RpcMgmtBindingInqParameter(RPC_BINDING_HANDLE,unsigned int,unsigned long*);
+RPC_STATUS RPC_ENTRY RpcMgmtBindingSetParameter(RPC_BINDING_HANDLE,unsigned int,unsigned long);
+
+#if _WIN32_WINNT >= 0x0500
+RPC_STATUS RPC_ENTRY UuidCreateSequential(UUID*);
+#endif
+
+#include <rpcdcep.h>
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/rpcdce2.h b/tcc/include/winapi/rpcdce2.h
new file mode 100644
index 0000000..4d065f1
--- /dev/null
+++ b/tcc/include/winapi/rpcdce2.h
@@ -0,0 +1,56 @@
+#ifndef _RPCDCE2_H
+#define _RPCDCE2_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#include <rpcdce.h>
+
+#define RPC_C_EP_ALL_ELTS 0
+#define RPC_C_EP_MATCH_BY_IF 1
+#define RPC_C_EP_MATCH_BY_OBJ 2
+#define RPC_C_EP_MATCH_BY_BOTH 3
+#define RPC_C_VERS_ALL 1
+#define RPC_C_VERS_COMPATIBLE 2
+#define RPC_C_VERS_EXACT 3
+#define RPC_C_VERS_MAJOR_ONLY 4
+#define RPC_C_VERS_UPTO 5
+#define DCE_C_ERROR_STRING_LEN 256
+#define RPC_C_MGMT_INQ_IF_IDS 0
+#define RPC_C_MGMT_INQ_PRINC_NAME 1
+#define RPC_C_MGMT_INQ_STATS 2
+#define RPC_C_MGMT_IS_SERVER_LISTEN 3
+#define RPC_C_MGMT_STOP_SERVER_LISTEN 4
+
+int RPC_ENTRY UuidCompare(UUID*,UUID*,RPC_STATUS*);
+RPC_STATUS RPC_ENTRY UuidCreateNil(UUID*);
+int RPC_ENTRY UuidEqual(UUID*,UUID*,RPC_STATUS*);
+unsigned short RPC_ENTRY UuidHash(UUID*,RPC_STATUS*);
+int RPC_ENTRY UuidIsNil(UUID*,RPC_STATUS*);
+#ifdef RPC_UNICODE_SUPPORTED
+RPC_STATUS RPC_ENTRY DceErrorInqTextA(RPC_STATUS,unsigned char*);
+RPC_STATUS RPC_ENTRY DceErrorInqTextW(RPC_STATUS,unsigned short*);
+RPC_STATUS RPC_ENTRY RpcMgmtEpEltInqNextA(RPC_EP_INQ_HANDLE,RPC_IF_ID*,RPC_BINDING_HANDLE*,UUID*,unsigned char**);
+RPC_STATUS RPC_ENTRY RpcMgmtEpEltInqNextW(RPC_EP_INQ_HANDLE,RPC_IF_ID*,RPC_BINDING_HANDLE*,UUID*,unsigned short**);
+#ifdef UNICODE
+#define RpcMgmtEpEltInqNext RpcMgmtEpEltInqNextW
+#define DceErrorInqText DceErrorInqTextW
+#else
+#define RpcMgmtEpEltInqNext RpcMgmtEpEltInqNextA
+#define DceErrorInqText DceErrorInqTextA
+#endif /* UNICODE */
+#else /* RPC_UNICODE_SUPPORTED */
+RPC_STATUS RPC_ENTRY DceErrorInqText(RPC_STATUS,unsigned char*);
+RPC_STATUS RPC_ENTRY RpcMgmtEpEltInqNext(RPC_EP_INQ_HANDLE,RPC_IF_ID*,RPC_BINDING_HANDLE*,UUID*,unsigned char**);
+#endif
+RPC_STATUS RPC_ENTRY RpcMgmtEpEltInqBegin(RPC_BINDING_HANDLE,unsigned long,RPC_IF_ID*,unsigned long,UUID*,RPC_EP_INQ_HANDLE*);
+RPC_STATUS RPC_ENTRY RpcMgmtEpEltInqDone(RPC_EP_INQ_HANDLE*);
+RPC_STATUS RPC_ENTRY RpcMgmtEpUnregister(RPC_BINDING_HANDLE,RPC_IF_ID*,RPC_BINDING_HANDLE,UUID*);
+RPC_STATUS RPC_ENTRY RpcMgmtSetAuthorizationFn(RPC_MGMT_AUTHORIZATION_FN);
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/rpcdcep.h b/tcc/include/winapi/rpcdcep.h
new file mode 100644
index 0000000..399d4ac
--- /dev/null
+++ b/tcc/include/winapi/rpcdcep.h
@@ -0,0 +1,129 @@
+#ifndef _RPCDCEP_H
+#define _RPCDCEP_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#define RPC_NCA_FLAGS_DEFAULT 0
+#define RPC_NCA_FLAGS_IDEMPOTENT 1
+#define RPC_NCA_FLAGS_BROADCAST 2
+#define RPC_NCA_FLAGS_MAYBE 4
+#define RPCFLG_ASYNCHRONOUS 0x40000000
+#define RPCFLG_INPUT_SYNCHRONOUS 0x20000000
+#define RPC_FLAGS_VALID_BIT 0x8000
+#define TRANSPORT_TYPE_CN 1
+#define TRANSPORT_TYPE_DG 2
+#define TRANSPORT_TYPE_LPC 4
+#define TRANSPORT_TYPE_WMSG 8
+
+typedef struct _RPC_VERSION {
+ unsigned short MajorVersion;
+ unsigned short MinorVersion;
+} RPC_VERSION;
+typedef struct _RPC_SYNTAX_IDENTIFIER {
+ GUID SyntaxGUID;
+ RPC_VERSION SyntaxVersion;
+} RPC_SYNTAX_IDENTIFIER, *PRPC_SYNTAX_IDENTIFIER;
+typedef struct _RPC_MESSAGE {
+ HANDLE Handle;
+ unsigned long DataRepresentation;
+ void *Buffer;
+ unsigned int BufferLength;
+ unsigned int ProcNum;
+ PRPC_SYNTAX_IDENTIFIER TransferSyntax;
+ void *RpcInterfaceInformation;
+ void *ReservedForRuntime;
+ void *ManagerEpv;
+ void *ImportContext;
+ unsigned long RpcFlags;
+} RPC_MESSAGE,*PRPC_MESSAGE;
+typedef long __stdcall RPC_FORWARD_FUNCTION(GUID*,RPC_VERSION*,GUID*,unsigned char*,void**);
+typedef void(__stdcall *RPC_DISPATCH_FUNCTION) ( PRPC_MESSAGE Message);
+typedef struct {
+ unsigned int DispatchTableCount;
+ RPC_DISPATCH_FUNCTION *DispatchTable;
+ int Reserved;
+} RPC_DISPATCH_TABLE,*PRPC_DISPATCH_TABLE;
+typedef struct _RPC_PROTSEQ_ENDPOINT {
+ unsigned char *RpcProtocolSequence;
+ unsigned char *Endpoint;
+} RPC_PROTSEQ_ENDPOINT,*PRPC_PROTSEQ_ENDPOINT;
+typedef struct _RPC_SERVER_INTERFACE {
+ unsigned int Length;
+ RPC_SYNTAX_IDENTIFIER InterfaceId;
+ RPC_SYNTAX_IDENTIFIER TransferSyntax;
+ PRPC_DISPATCH_TABLE DispatchTable;
+ unsigned int RpcProtseqEndpointCount;
+ PRPC_PROTSEQ_ENDPOINT RpcProtseqEndpoint;
+ void *DefaultManagerEpv;
+ void const *InterpreterInfo;
+} RPC_SERVER_INTERFACE,*PRPC_SERVER_INTERFACE;
+typedef struct _RPC_CLIENT_INTERFACE {
+ unsigned int Length;
+ RPC_SYNTAX_IDENTIFIER InterfaceId;
+ RPC_SYNTAX_IDENTIFIER TransferSyntax;
+ PRPC_DISPATCH_TABLE DispatchTable;
+ unsigned int RpcProtseqEndpointCount;
+ PRPC_PROTSEQ_ENDPOINT RpcProtseqEndpoint;
+ unsigned long Reserved;
+ void const *InterpreterInfo;
+} RPC_CLIENT_INTERFACE,*PRPC_CLIENT_INTERFACE;
+typedef void *I_RPC_MUTEX;
+typedef struct _RPC_TRANSFER_SYNTAX {
+ GUID Uuid;
+ unsigned short VersMajor;
+ unsigned short VersMinor;
+} RPC_TRANSFER_SYNTAX;
+typedef RPC_STATUS (*RPC_BLOCKING_FN)(void*,void*,void*);
+
+long __stdcall I_RpcGetBuffer(RPC_MESSAGE*);
+long __stdcall I_RpcSendReceive(RPC_MESSAGE*);
+long __stdcall I_RpcSend(RPC_MESSAGE*);
+long __stdcall I_RpcFreeBuffer(RPC_MESSAGE*);
+void __stdcall I_RpcRequestMutex(I_RPC_MUTEX*);
+void __stdcall I_RpcClearMutex(I_RPC_MUTEX);
+void __stdcall I_RpcDeleteMutex(I_RPC_MUTEX);
+DECLARE_STDCALL_P(void *) I_RpcAllocate(unsigned int);
+void __stdcall I_RpcFree(void*);
+void __stdcall I_RpcPauseExecution(unsigned long);
+typedef void(__stdcall *PRPC_RUNDOWN) (void*);
+long __stdcall I_RpcMonitorAssociation(HANDLE,PRPC_RUNDOWN,void*);
+long __stdcall I_RpcStopMonitorAssociation(HANDLE);
+HANDLE __stdcall I_RpcGetCurrentCallHandle(void);
+long __stdcall I_RpcGetAssociationContext(void**);
+long __stdcall I_RpcSetAssociationContext(void*);
+#ifdef __RPC_NT__
+long __stdcall I_RpcNsBindingSetEntryName(HANDLE,unsigned long,unsigned short*);
+long __stdcall I_RpcBindingInqDynamicEndpoint(HANDLE, unsigned short**);
+#else
+long __stdcall I_RpcNsBindingSetEntryName(HANDLE,unsigned long,unsigned char*);
+long __stdcall I_RpcBindingInqDynamicEndpoint(HANDLE,unsigned char**);
+#endif
+long __stdcall I_RpcBindingInqTransportType(HANDLE,unsigned int*);
+long __stdcall I_RpcIfInqTransferSyntaxes(HANDLE,RPC_TRANSFER_SYNTAX*,unsigned int,unsigned int*);
+long __stdcall I_UuidCreate(GUID*);
+long __stdcall I_RpcBindingCopy(HANDLE,HANDLE*);
+long __stdcall I_RpcBindingIsClientLocal(HANDLE,unsigned int*);
+void __stdcall I_RpcSsDontSerializeContext(void);
+long __stdcall I_RpcServerRegisterForwardFunction(RPC_FORWARD_FUNCTION*);
+long __stdcall I_RpcConnectionInqSockBuffSize(unsigned long*,unsigned long*);
+long __stdcall I_RpcConnectionSetSockBuffSize(unsigned long,unsigned long);
+long __stdcall I_RpcBindingSetAsync(HANDLE,RPC_BLOCKING_FN);
+long __stdcall I_RpcAsyncSendReceive(RPC_MESSAGE*,void*);
+long __stdcall I_RpcGetThreadWindowHandle(void**);
+long __stdcall I_RpcServerThreadPauseListening(void);
+long __stdcall I_RpcServerThreadContinueListening(void);
+long __stdcall I_RpcServerUnregisterEndpointA(unsigned char*,unsigned char*);
+long __stdcall I_RpcServerUnregisterEndpointW(unsigned short*,unsigned short*);
+#ifdef UNICODE
+#define I_RpcServerUnregisterEndpoint I_RpcServerUnregisterEndpointW
+#else
+#define I_RpcServerUnregisterEndpoint I_RpcServerUnregisterEndpointA
+#endif
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/rpcndr.h b/tcc/include/winapi/rpcndr.h
new file mode 100644
index 0000000..95d188a
--- /dev/null
+++ b/tcc/include/winapi/rpcndr.h
@@ -0,0 +1,518 @@
+#ifndef _RPCNDR_H
+#define _RPCNDR_H
+#define __RPCNDR_H__
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifndef __RPCNDR_H_VERSION__
+#define __RPCNDR_H_VERSION__ ( 450 )
+#endif /* __RPCNDR_H_VERSION__ */
+#include <rpcnsip.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+#include <objfwd.h>
+#define DECLSPEC_UUID(x)
+#define MIDL_INTERFACE(x) struct
+#define NDR_CHAR_REP_MASK (unsigned long)0xFL
+#define NDR_INT_REP_MASK (unsigned long)0xF0L
+#define NDR_FLOAT_REP_MASK (unsigned long)0xFF00L
+#define NDR_LITTLE_ENDIAN (unsigned long)0x10L
+#define NDR_BIG_ENDIAN (unsigned long)0
+#define NDR_IEEE_FLOAT (unsigned long)0
+#define NDR_VAX_FLOAT (unsigned long)0x100L
+#define NDR_ASCII_CHAR (unsigned long)0
+#define NDR_EBCDIC_CHAR (unsigned long)1
+#define NDR_LOCAL_DATA_REPRESENTATION (unsigned long)0x10L
+#define NDR_LOCAL_ENDIAN NDR_LITTLE_ENDIAN
+#define __RPC_CALLEE __stdcall
+#ifndef __MIDL_USER_DEFINED
+#define midl_user_allocate MIDL_user_allocate
+#define midl_user_free MIDL_user_free
+#define __MIDL_USER_DEFINED
+#endif
+#define RPC_VAR_ENTRY __cdecl
+#ifdef _M_IX86
+#define __MIDL_DECLSPEC_DLLIMPORT __declspec(dllimport)
+#define __MIDL_DECLSPEC_DLLEXPORT __declspec(dllexport)
+#else
+#define __MIDL_DECLSPEC_DLLIMPORT
+#define __MIDL_DECLSPEC_DLLEXPORT
+#endif
+#if defined(_HAVE_INT64) || (defined(_INTEGRAL_MAX_BITS) && _INTEGRAL_MAX_BITS >= 64)
+#define hyper __int64
+#define MIDL_uhyper unsigned __int64
+#else
+#define hyper double
+#define MIDL_uhyper double
+#endif
+#define small char
+typedef unsigned char byte;
+typedef unsigned char boolean;
+#define NDRSContextValue(hContext) (&(hContext)->userContext)
+#define cbNDRContext 20
+#define byte_from_ndr(source, target) { *(target) = *(*(char**)&(source)->Buffer)++; }
+#define byte_array_from_ndr(Source, LowerIndex, UpperIndex, Target) { NDRcopy ((((char *)(Target))+(LowerIndex)), (Source)->Buffer, (unsigned int)((UpperIndex)-(LowerIndex))); *(unsigned long *)&(Source)->Buffer += ((UpperIndex)-(LowerIndex)); }
+#define boolean_from_ndr(source, target) { *(target) = *(*(char**)&(source)->Buffer)++; }
+#define boolean_array_from_ndr(Source, LowerIndex, UpperIndex, Target) { NDRcopy ((((char *)(Target))+(LowerIndex)), (Source)->Buffer, (unsigned int)((UpperIndex)-(LowerIndex))); *(unsigned long *)&(Source)->Buffer += ((UpperIndex)-(LowerIndex)); }
+#define small_from_ndr(source, target) { *(target) = *(*(char**)&(source)->Buffer)++; }
+#define small_from_ndr_temp(source, target, format) { *(target) = *(*(char**)(source))++; }
+#define small_array_from_ndr(Source, LowerIndex, UpperIndex, Target) { NDRcopy ((((char *)(Target))+(LowerIndex)), (Source)->Buffer, (unsigned int)((UpperIndex)-(LowerIndex))); *(unsigned long *)&(Source)->Buffer += ((UpperIndex)-(LowerIndex)); }
+#define MIDL_ascii_strlen(string) strlen(string)
+#define MIDL_ascii_strcpy(target,source) strcpy(target,source)
+#define MIDL_memset(s,c,n) memset(s,c,n)
+#define _midl_ma1( p, cast ) *(*( cast **)&p)++
+#define _midl_ma2( p, cast ) *(*( cast **)&p)++
+#define _midl_ma4( p, cast ) *(*( cast **)&p)++
+#define _midl_ma8( p, cast ) *(*( cast **)&p)++
+#define _midl_unma1( p, cast ) *(( cast *)p)++
+#define _midl_unma2( p, cast ) *(( cast *)p)++
+#define _midl_unma3( p, cast ) *(( cast *)p)++
+#define _midl_unma4( p, cast ) *(( cast *)p)++
+#define _midl_fa2( p ) (p = (RPC_BUFPTR )((unsigned long)(p+1) & 0xfffffffe))
+#define _midl_fa4( p ) (p = (RPC_BUFPTR )((unsigned long)(p+3) & 0xfffffffc))
+#define _midl_fa8( p ) (p = (RPC_BUFPTR )((unsigned long)(p+7) & 0xfffffff8))
+#define _midl_addp( p, n ) (p += n)
+#define _midl_marsh_lhs( p, cast ) *(*( cast **)&p)++
+#define _midl_marsh_up( mp, p ) *(*(unsigned long **)&mp)++ = (unsigned long)p
+#define _midl_advmp( mp ) *(*(unsigned long **)&mp)++
+#define _midl_unmarsh_up( p ) (*(*(unsigned long **)&p)++)
+#define NdrMarshConfStringHdr( p, s, l ) (_midl_ma4( p, unsigned long) = s, _midl_ma4( p, unsigned long) = 0, _midl_ma4( p, unsigned long) = l)
+#define NdrUnMarshConfStringHdr(p, s, l) ((s=_midl_unma4(p,unsigned long), (_midl_addp(p,4)), (l=_midl_unma4(p,unsigned long))
+#define NdrMarshCCtxtHdl(pc,p) (NDRCContextMarshall( (NDR_CCONTEXT)pc, p ),p+20)
+#define NdrUnMarshCCtxtHdl(pc,p,h,drep) (NDRCContextUnmarshall((NDR_CONTEXT)pc,h,p,drep), p+20)
+#define NdrUnMarshSCtxtHdl(pc, p,drep) (pc = NdrSContextUnMarshall(p,drep ))
+#define NdrMarshSCtxtHdl(pc,p,rd) (NdrSContextMarshall((NDR_SCONTEXT)pc,p, (NDR_RUNDOWN)rd)
+#define NdrFieldOffset(s,f) (long)(& (((s *)0)->f))
+#define NdrFieldPad(s,f,p,t) (NdrFieldOffset(s,f) - NdrFieldOffset(s,p) - sizeof(t))
+#define NdrFcShort(s) (unsigned char)(s & 0xff), (unsigned char)(s >> 8)
+#define NdrFcLong(s) (unsigned char)(s & 0xff), (unsigned char)((s & 0x0000ff00) >> 8), (unsigned char)((s & 0x00ff0000) >> 16), (unsigned char)(s >> 24)
+#ifdef CONST_VTABLE
+#define CONST_VTBL const
+#else
+#define CONST_VTBL
+#endif
+typedef void *NDR_CCONTEXT;
+typedef struct {
+ void *pad[2];
+ void *userContext;
+} *NDR_SCONTEXT;
+typedef void (__RPC_USER *NDR_RUNDOWN)(void*);
+typedef struct _SCONTEXT_QUEUE {
+ unsigned long NumberOfObjects;
+ NDR_SCONTEXT *ArrayOfObjects;
+} SCONTEXT_QUEUE,*PSCONTEXT_QUEUE;
+struct _MIDL_STUB_MESSAGE;
+struct _MIDL_STUB_DESC;
+struct _FULL_PTR_XLAT_TABLES;
+typedef unsigned char *RPC_BUFPTR;
+typedef unsigned long RPC_LENGTH;
+typedef void(__RPC_USER *EXPR_EVAL)(struct _MIDL_STUB_MESSAGE*);
+typedef const unsigned char *PFORMAT_STRING;
+typedef struct {
+ long Dimension;
+ unsigned long *BufferConformanceMark;
+ unsigned long *BufferVarianceMark;
+ unsigned long *MaxCountArray;
+ unsigned long *OffsetArray;
+ unsigned long *ActualCountArray;
+} ARRAY_INFO,*PARRAY_INFO;
+
+RPC_BINDING_HANDLE RPC_ENTRY NDRCContextBinding(NDR_CCONTEXT);
+void RPC_ENTRY NDRCContextMarshall(NDR_CCONTEXT,void*);
+void RPC_ENTRY NDRCContextUnmarshall(NDR_CCONTEXT*,RPC_BINDING_HANDLE,void*,unsigned long);
+void RPC_ENTRY NDRSContextMarshall(NDR_SCONTEXT,void*,NDR_RUNDOWN);
+NDR_SCONTEXT RPC_ENTRY NDRSContextUnmarshall(void*pBuff,unsigned long);
+void RPC_ENTRY RpcSsDestroyClientContext(void**);
+void RPC_ENTRY NDRcopy(void*,void*,unsigned int);
+unsigned int RPC_ENTRY MIDL_wchar_strlen(wchar_t*);
+void RPC_ENTRY MIDL_wchar_strcpy(void*,wchar_t*);
+void RPC_ENTRY char_from_ndr(PRPC_MESSAGE,unsigned char*);
+void RPC_ENTRY char_array_from_ndr(PRPC_MESSAGE,unsigned long,unsigned long,unsigned char*);
+void RPC_ENTRY short_from_ndr(PRPC_MESSAGE,unsigned short*);
+void RPC_ENTRY short_array_from_ndr(PRPC_MESSAGE,unsigned long,unsigned long,unsigned short*);
+void RPC_ENTRY short_from_ndr_temp(unsigned char**,unsigned short*,unsigned long);
+void RPC_ENTRY long_from_ndr(PRPC_MESSAGE,unsigned long*);
+void RPC_ENTRY long_array_from_ndr(PRPC_MESSAGE,unsigned long,unsigned long,unsigned long*);
+void RPC_ENTRY long_from_ndr_temp(unsigned char**,unsigned long*,unsigned long);
+void RPC_ENTRY enum_from_ndr(PRPC_MESSAGE,unsigned int*);
+void RPC_ENTRY float_from_ndr(PRPC_MESSAGE,void*);
+void RPC_ENTRY float_array_from_ndr(PRPC_MESSAGE,unsigned long,unsigned long,void*);
+void RPC_ENTRY double_from_ndr(PRPC_MESSAGE,void*);
+void RPC_ENTRY double_array_from_ndr(PRPC_MESSAGE,unsigned long,unsigned long,void*);
+void RPC_ENTRY hyper_from_ndr(PRPC_MESSAGE,hyper*);
+void RPC_ENTRY hyper_array_from_ndr(PRPC_MESSAGE,unsigned long,unsigned long,hyper*);
+void RPC_ENTRY hyper_from_ndr_temp(unsigned char**,hyper*,unsigned long);
+void RPC_ENTRY data_from_ndr(PRPC_MESSAGE,void*,char*,unsigned char);
+void RPC_ENTRY data_into_ndr(void*,PRPC_MESSAGE,char*,unsigned char);
+void RPC_ENTRY tree_into_ndr(void*,PRPC_MESSAGE,char*,unsigned char);
+void RPC_ENTRY data_size_ndr(void*,PRPC_MESSAGE,char*,unsigned char);
+void RPC_ENTRY tree_size_ndr(void*,PRPC_MESSAGE,char*,unsigned char);
+void RPC_ENTRY tree_peek_ndr(PRPC_MESSAGE,unsigned char**,char*,unsigned char);
+void *RPC_ENTRY midl_allocate(int);
+
+#pragma pack(push,4)
+typedef struct _MIDL_STUB_MESSAGE {
+ PRPC_MESSAGE RpcMsg;
+ unsigned char *Buffer;
+ unsigned char *BufferStart;
+ unsigned char *BufferEnd;
+ unsigned char *BufferMark;
+ unsigned long BufferLength;
+ unsigned long MemorySize;
+ unsigned char *Memory;
+ int IsClient;
+ int ReuseBuffer;
+ unsigned char *AllocAllNodesMemory;
+ unsigned char *AllocAllNodesMemoryEnd;
+ int IgnoreEmbeddedPointers;
+ unsigned char *PointerBufferMark;
+ unsigned char fBufferValid;
+ unsigned char Unused;
+ unsigned long MaxCount;
+ unsigned long Offset;
+ unsigned long ActualCount;
+ void*(__RPC_API *pfnAllocate)(unsigned int);
+ void(__RPC_API *pfnFree)(void*);
+ unsigned char *StackTop;
+ unsigned char *pPresentedType;
+ unsigned char *pTransmitType;
+ handle_t SavedHandle;
+ const struct _MIDL_STUB_DESC *StubDesc;
+ struct _FULL_PTR_XLAT_TABLES *FullPtrXlatTables;
+ unsigned long FullPtrRefId;
+ int fCheckBounds;
+ int fInDontFree :1;
+ int fDontCallFreeInst :1;
+ int fInOnlyParam :1;
+ int fHasReturn :1;
+ unsigned long dwDestContext;
+ void*pvDestContext;
+ NDR_SCONTEXT *SavedContextHandles;
+ long ParamNumber;
+ struct IRpcChannelBuffer *pRpcChannelBuffer;
+ PARRAY_INFO pArrayInfo;
+ unsigned long *SizePtrCountArray;
+ unsigned long *SizePtrOffsetArray;
+ unsigned long *SizePtrLengthArray;
+ void*pArgQueue;
+ unsigned long dwStubPhase;
+ unsigned long w2kReserved[5];
+} MIDL_STUB_MESSAGE,*PMIDL_STUB_MESSAGE;
+#pragma pack(pop)
+typedef void*(__RPC_API *GENERIC_BINDING_ROUTINE)(void*);
+typedef void (__RPC_API *GENERIC_UNBIND_ROUTINE)(void*,unsigned char*);
+typedef struct _GENERIC_BINDING_ROUTINE_PAIR {
+ GENERIC_BINDING_ROUTINE pfnBind;
+ GENERIC_UNBIND_ROUTINE pfnUnbind;
+} GENERIC_BINDING_ROUTINE_PAIR,*PGENERIC_BINDING_ROUTINE_PAIR;
+typedef struct __GENERIC_BINDING_INFO {
+ void *pObj;
+ unsigned int Size;
+ GENERIC_BINDING_ROUTINE pfnBind;
+ GENERIC_UNBIND_ROUTINE pfnUnbind;
+} GENERIC_BINDING_INFO,*PGENERIC_BINDING_INFO;
+typedef void(__RPC_USER *XMIT_HELPER_ROUTINE)(PMIDL_STUB_MESSAGE);
+typedef struct _XMIT_ROUTINE_QUINTUPLE {
+ XMIT_HELPER_ROUTINE pfnTranslateToXmit;
+ XMIT_HELPER_ROUTINE pfnTranslateFromXmit;
+ XMIT_HELPER_ROUTINE pfnFreeXmit;
+ XMIT_HELPER_ROUTINE pfnFreeInst;
+} XMIT_ROUTINE_QUINTUPLE,*PXMIT_ROUTINE_QUINTUPLE;
+typedef struct _MALLOC_FREE_STRUCT {
+void*(__RPC_USER *pfnAllocate)(unsigned int);
+void(__RPC_USER *pfnFree)(void*);
+} MALLOC_FREE_STRUCT;
+typedef struct _COMM_FAULT_OFFSETS {
+ short CommOffset;
+ short FaultOffset;
+} COMM_FAULT_OFFSETS;
+typedef unsigned long (__RPC_USER *USER_MARSHAL_SIZING_ROUTINE)(unsigned long *,unsigned long,void *);
+typedef unsigned char *(__RPC_USER *USER_MARSHAL_MARSHALLING_ROUTINE)(unsigned long *,unsigned char *,void *);
+typedef unsigned char *(__RPC_USER *USER_MARSHAL_UNMARSHALLING_ROUTINE)(unsigned long *,unsigned char *,void *);
+typedef void (__RPC_USER *USER_MARSHAL_FREEING_ROUTINE)(unsigned long *,void *);
+typedef struct _USER_MARSHAL_ROUTINE_QUADRUPLE {
+ USER_MARSHAL_SIZING_ROUTINE pfnBufferSize;
+ USER_MARSHAL_MARSHALLING_ROUTINE pfnMarshall;
+ USER_MARSHAL_UNMARSHALLING_ROUTINE pfnUnmarshall;
+ USER_MARSHAL_FREEING_ROUTINE pfnFree;
+} USER_MARSHAL_ROUTINE_QUADRUPLE;
+typedef void (__RPC_USER *NDR_NOTIFY_ROUTINE)(void);
+typedef enum _IDL_CS_CONVERT {
+ IDL_CS_NO_CONVERT,
+ IDL_CS_IN_PLACE_CONVERT,
+ IDL_CS_NEW_BUFFER_CONVERT
+} IDL_CS_CONVERT;
+typedef void (__RPC_USER *CS_TYPE_NET_SIZE_ROUTINE)(RPC_BINDING_HANDLE,unsigned long,unsigned long,IDL_CS_CONVERT*,unsigned long*,error_status_t*);
+typedef void (__RPC_USER *CS_TYPE_LOCAL_SIZE_ROUTINE)(RPC_BINDING_HANDLE,unsigned long,unsigned long,IDL_CS_CONVERT*,unsigned long*,error_status_t*);
+typedef void (__RPC_USER *CS_TYPE_TO_NETCS_ROUTINE)(RPC_BINDING_HANDLE,unsigned long,void*,unsigned long,byte*,unsigned long*,error_status_t*);
+typedef void (__RPC_USER *CS_TYPE_FROM_NETCS_ROUTINE)(RPC_BINDING_HANDLE,unsigned long,byte*,unsigned long,unsigned long,void*,unsigned long*,error_status_t*);
+typedef void (__RPC_USER *CS_TAG_GETTING_ROUTINE)(RPC_BINDING_HANDLE,int,unsigned long*,unsigned long*,unsigned long*,error_status_t*);
+typedef struct _NDR_CS_SIZE_CONVERT_ROUTINES {
+ CS_TYPE_NET_SIZE_ROUTINE pfnNetSize;
+ CS_TYPE_TO_NETCS_ROUTINE pfnToNetCs;
+ CS_TYPE_LOCAL_SIZE_ROUTINE pfnLocalSize;
+ CS_TYPE_FROM_NETCS_ROUTINE pfnFromNetCs;
+} NDR_CS_SIZE_CONVERT_ROUTINES;
+typedef struct _NDR_CS_ROUTINES {
+ NDR_CS_SIZE_CONVERT_ROUTINES *pSizeConvertRoutines;
+ CS_TAG_GETTING_ROUTINE *pTagGettingRoutines;
+} NDR_CS_ROUTINES;
+typedef struct _MIDL_STUB_DESC {
+ void*RpcInterfaceInformation;
+ void*(__RPC_API *pfnAllocate)(unsigned int);
+ void(__RPC_API *pfnFree)(void*);
+ union {
+ handle_t *pAutoHandle;
+ handle_t *pPrimitiveHandle;
+ PGENERIC_BINDING_INFO pGenericBindingInfo;
+ } IMPLICIT_HANDLE_INFO;
+ const NDR_RUNDOWN *apfnNdrRundownRoutines;
+ const GENERIC_BINDING_ROUTINE_PAIR *aGenericBindingRoutinePairs;
+ const EXPR_EVAL *apfnExprEval;
+ const XMIT_ROUTINE_QUINTUPLE *aXmitQuintuple;
+ const unsigned char *pFormatTypes;
+ int fCheckBounds;
+ unsigned long Version;
+ MALLOC_FREE_STRUCT *pMallocFreeStruct;
+ long MIDLVersion;
+ const COMM_FAULT_OFFSETS *CommFaultOffsets;
+ const USER_MARSHAL_ROUTINE_QUADRUPLE *aUserMarshalQuadruple;
+ const NDR_NOTIFY_ROUTINE *NotifyRoutineTable;
+ ULONG_PTR mFlags;
+ const NDR_CS_ROUTINES *CsRoutineTables;
+ void *Reserved4;
+ ULONG_PTR Reserved5;
+} MIDL_STUB_DESC;
+typedef const MIDL_STUB_DESC *PMIDL_STUB_DESC;
+typedef void*PMIDL_XMIT_TYPE;
+typedef struct _MIDL_FORMAT_STRING {
+ short Pad;
+ unsigned char Format[1];
+} MIDL_FORMAT_STRING;
+typedef void(__RPC_API *STUB_THUNK)(PMIDL_STUB_MESSAGE);
+typedef long(__RPC_API *SERVER_ROUTINE)(void);
+typedef struct _MIDL_SERVER_INFO_ {
+ PMIDL_STUB_DESC pStubDesc;
+ const SERVER_ROUTINE *DispatchTable;
+ PFORMAT_STRING ProcString;
+ const unsigned short *FmtStringOffset;
+ const STUB_THUNK *ThunkTable;
+} MIDL_SERVER_INFO,*PMIDL_SERVER_INFO;
+typedef struct _MIDL_STUBLESS_PROXY_INFO {
+ PMIDL_STUB_DESC pStubDesc;
+ PFORMAT_STRING ProcFormatString;
+ const unsigned short *FormatStringOffset;
+} MIDL_STUBLESS_PROXY_INFO;
+typedef MIDL_STUBLESS_PROXY_INFO *PMIDL_STUBLESS_PROXY_INFO;
+typedef union _CLIENT_CALL_RETURN {
+ void *Pointer;
+ long Simple;
+} CLIENT_CALL_RETURN;
+typedef enum { XLAT_SERVER = 1,XLAT_CLIENT } XLAT_SIDE;
+typedef struct _FULL_PTR_TO_REFID_ELEMENT {
+ struct _FULL_PTR_TO_REFID_ELEMENT *Next;
+ void*Pointer;
+ unsigned long RefId;
+ unsigned char State;
+} FULL_PTR_TO_REFID_ELEMENT,*PFULL_PTR_TO_REFID_ELEMENT;
+typedef struct _FULL_PTR_XLAT_TABLES {
+ struct {
+ void **XlatTable;
+ unsigned char *StateTable;
+ unsigned long NumberOfEntries;
+ } RefIdToPointer;
+ struct {
+ PFULL_PTR_TO_REFID_ELEMENT *XlatTable;
+ unsigned long NumberOfBuckets;
+ unsigned long HashMask;
+ } PointerToRefId;
+ unsigned long NextRefId;
+ XLAT_SIDE XlatSide;
+} FULL_PTR_XLAT_TABLES,*PFULL_PTR_XLAT_TABLES;
+void RPC_ENTRY NdrSimpleTypeMarshall(PMIDL_STUB_MESSAGE,unsigned char*,unsigned char);
+unsigned char *RPC_ENTRY NdrPointerMarshall(PMIDL_STUB_MESSAGE,unsigned char*,PFORMAT_STRING pFormat);
+unsigned char *RPC_ENTRY NdrSimpleStructMarshall(PMIDL_STUB_MESSAGE,unsigned char*,PFORMAT_STRING);
+unsigned char *RPC_ENTRY NdrConformantStructMarshall(PMIDL_STUB_MESSAGE,unsigned char*,PFORMAT_STRING);
+unsigned char *RPC_ENTRY NdrConformantVaryingStructMarshall(PMIDL_STUB_MESSAGE,unsigned char*,PFORMAT_STRING);
+unsigned char *RPC_ENTRY NdrHardStructMarshall(PMIDL_STUB_MESSAGE,unsigned char*,PFORMAT_STRING);
+unsigned char *RPC_ENTRY NdrComplexStructMarshall(PMIDL_STUB_MESSAGE,unsigned char*,PFORMAT_STRING);
+unsigned char *RPC_ENTRY NdrFixedArrayMarshall(PMIDL_STUB_MESSAGE,unsigned char*,PFORMAT_STRING);
+unsigned char *RPC_ENTRY NdrConformantArrayMarshall(PMIDL_STUB_MESSAGE,unsigned char*,PFORMAT_STRING);
+unsigned char *RPC_ENTRY NdrConformantVaryingArrayMarshall(PMIDL_STUB_MESSAGE,unsigned char*,PFORMAT_STRING);
+unsigned char *RPC_ENTRY NdrVaryingArrayMarshall(PMIDL_STUB_MESSAGE,unsigned char*,PFORMAT_STRING);
+unsigned char *RPC_ENTRY NdrComplexArrayMarshall(PMIDL_STUB_MESSAGE,unsigned char*,PFORMAT_STRING);
+unsigned char *RPC_ENTRY NdrNonConformantStringMarshall(PMIDL_STUB_MESSAGE,unsigned char*,PFORMAT_STRING);
+unsigned char *RPC_ENTRY NdrConformantStringMarshall(PMIDL_STUB_MESSAGE,unsigned char*,PFORMAT_STRING);
+unsigned char *RPC_ENTRY NdrEncapsulatedUnionMarshall(PMIDL_STUB_MESSAGE,unsigned char*,PFORMAT_STRING);
+unsigned char *RPC_ENTRY NdrNonEncapsulatedUnionMarshall(PMIDL_STUB_MESSAGE,unsigned char*,PFORMAT_STRING);
+unsigned char *RPC_ENTRY NdrByteCountPointerMarshall(PMIDL_STUB_MESSAGE,unsigned char*,PFORMAT_STRING);
+unsigned char *RPC_ENTRY NdrXmitOrRepAsMarshall(PMIDL_STUB_MESSAGE,unsigned char*,PFORMAT_STRING);
+unsigned char *RPC_ENTRY NdrInterfacePointerMarshall(PMIDL_STUB_MESSAGE,unsigned char*,PFORMAT_STRING);
+void RPC_ENTRY NdrClientContextMarshall(PMIDL_STUB_MESSAGE,NDR_CCONTEXT,int);
+void RPC_ENTRY NdrServerContextMarshall(PMIDL_STUB_MESSAGE,NDR_SCONTEXT,NDR_RUNDOWN);
+void RPC_ENTRY NdrSimpleTypeUnmarshall(PMIDL_STUB_MESSAGE,unsigned char*,unsigned char);
+unsigned char *RPC_ENTRY NdrPointerUnmarshall(PMIDL_STUB_MESSAGE,unsigned char**,PFORMAT_STRING,unsigned char);
+unsigned char *RPC_ENTRY NdrSimpleStructUnmarshall(PMIDL_STUB_MESSAGE,unsigned char**,PFORMAT_STRING,unsigned char);
+unsigned char *RPC_ENTRY NdrConformantStructUnmarshall(PMIDL_STUB_MESSAGE,unsigned char**,PFORMAT_STRING,unsigned char);
+unsigned char *RPC_ENTRY NdrConformantVaryingStructUnmarshall(PMIDL_STUB_MESSAGE,unsigned char**,PFORMAT_STRING,unsigned char);
+unsigned char *RPC_ENTRY NdrHardStructUnmarshall(PMIDL_STUB_MESSAGE,unsigned char**,PFORMAT_STRING,unsigned char);
+unsigned char *RPC_ENTRY NdrComplexStructUnmarshall(PMIDL_STUB_MESSAGE,unsigned char**,PFORMAT_STRING,unsigned char);
+unsigned char *RPC_ENTRY NdrFixedArrayUnmarshall(PMIDL_STUB_MESSAGE,unsigned char**,PFORMAT_STRING,unsigned char);
+unsigned char *RPC_ENTRY NdrConformantArrayUnmarshall(PMIDL_STUB_MESSAGE,unsigned char**,PFORMAT_STRING,unsigned char);
+unsigned char *RPC_ENTRY NdrConformantVaryingArrayUnmarshall(PMIDL_STUB_MESSAGE,unsigned char**,PFORMAT_STRING,unsigned char);
+unsigned char *RPC_ENTRY NdrVaryingArrayUnmarshall(PMIDL_STUB_MESSAGE,unsigned char**,PFORMAT_STRING,unsigned char);
+unsigned char *RPC_ENTRY NdrComplexArrayUnmarshall(PMIDL_STUB_MESSAGE,unsigned char**,PFORMAT_STRING,unsigned char);
+unsigned char *RPC_ENTRY NdrNonConformantStringUnmarshall(PMIDL_STUB_MESSAGE,unsigned char**,PFORMAT_STRING,unsigned char);
+unsigned char *RPC_ENTRY NdrConformantStringUnmarshall(PMIDL_STUB_MESSAGE,unsigned char**,PFORMAT_STRING,unsigned char);
+unsigned char *RPC_ENTRY NdrEncapsulatedUnionUnmarshall(PMIDL_STUB_MESSAGE,unsigned char**,PFORMAT_STRING,unsigned char);
+unsigned char *RPC_ENTRY NdrNonEncapsulatedUnionUnmarshall(PMIDL_STUB_MESSAGE,unsigned char**,PFORMAT_STRING,unsigned char);
+unsigned char *RPC_ENTRY NdrByteCountPointerUnmarshall(PMIDL_STUB_MESSAGE,unsigned char**,PFORMAT_STRING,unsigned char);
+unsigned char *RPC_ENTRY NdrXmitOrRepAsUnmarshall(PMIDL_STUB_MESSAGE,unsigned char**,PFORMAT_STRING,unsigned char);
+unsigned char *RPC_ENTRY NdrInterfacePointerUnmarshall(PMIDL_STUB_MESSAGE,unsigned char**,PFORMAT_STRING,unsigned char);
+void RPC_ENTRY NdrClientContextUnmarshall(PMIDL_STUB_MESSAGE,NDR_CCONTEXT*,RPC_BINDING_HANDLE);
+NDR_SCONTEXT RPC_ENTRY NdrServerContextUnmarshall(PMIDL_STUB_MESSAGE);
+void RPC_ENTRY NdrPointerBufferSize(PMIDL_STUB_MESSAGE,unsigned char*,PFORMAT_STRING);
+void RPC_ENTRY NdrSimpleStructBufferSize(PMIDL_STUB_MESSAGE,unsigned char*,PFORMAT_STRING);
+void RPC_ENTRY NdrConformantStructBufferSize(PMIDL_STUB_MESSAGE,unsigned char*,PFORMAT_STRING);
+void RPC_ENTRY NdrConformantVaryingStructBufferSize(PMIDL_STUB_MESSAGE,unsigned char*,PFORMAT_STRING);
+void RPC_ENTRY NdrHardStructBufferSize(PMIDL_STUB_MESSAGE,unsigned char*,PFORMAT_STRING);
+void RPC_ENTRY NdrComplexStructBufferSize(PMIDL_STUB_MESSAGE,unsigned char*,PFORMAT_STRING);
+void RPC_ENTRY NdrFixedArrayBufferSize(PMIDL_STUB_MESSAGE,unsigned char*,PFORMAT_STRING);
+void RPC_ENTRY NdrConformantArrayBufferSize(PMIDL_STUB_MESSAGE,unsigned char*,PFORMAT_STRING);
+void RPC_ENTRY NdrConformantVaryingArrayBufferSize(PMIDL_STUB_MESSAGE,unsigned char*,PFORMAT_STRING);
+void RPC_ENTRY NdrVaryingArrayBufferSize(PMIDL_STUB_MESSAGE,unsigned char*,PFORMAT_STRING);
+void RPC_ENTRY NdrComplexArrayBufferSize(PMIDL_STUB_MESSAGE,unsigned char*,PFORMAT_STRING);
+void RPC_ENTRY NdrConformantStringBufferSize(PMIDL_STUB_MESSAGE,unsigned char*,PFORMAT_STRING);
+void RPC_ENTRY NdrNonConformantStringBufferSize(PMIDL_STUB_MESSAGE,unsigned char*,PFORMAT_STRING);
+void RPC_ENTRY NdrEncapsulatedUnionBufferSize(PMIDL_STUB_MESSAGE,unsigned char*,PFORMAT_STRING);
+void RPC_ENTRY NdrNonEncapsulatedUnionBufferSize(PMIDL_STUB_MESSAGE,unsigned char*,PFORMAT_STRING);
+void RPC_ENTRY NdrByteCountPointerBufferSize(PMIDL_STUB_MESSAGE,unsigned char*,PFORMAT_STRING);
+void RPC_ENTRY NdrXmitOrRepAsBufferSize(PMIDL_STUB_MESSAGE,unsigned char*,PFORMAT_STRING);
+void RPC_ENTRY NdrInterfacePointerBufferSize(PMIDL_STUB_MESSAGE,unsigned char*,PFORMAT_STRING);
+void RPC_ENTRY NdrContextHandleSize(PMIDL_STUB_MESSAGE,unsigned char*,PFORMAT_STRING);
+unsigned long RPC_ENTRY NdrPointerMemorySize(PMIDL_STUB_MESSAGE,PFORMAT_STRING);
+unsigned long RPC_ENTRY NdrSimpleStructMemorySize(PMIDL_STUB_MESSAGE,PFORMAT_STRING);
+unsigned long RPC_ENTRY NdrConformantStructMemorySize(PMIDL_STUB_MESSAGE,PFORMAT_STRING);
+unsigned long RPC_ENTRY NdrConformantVaryingStructMemorySize(PMIDL_STUB_MESSAGE,PFORMAT_STRING);
+unsigned long RPC_ENTRY NdrHardStructMemorySize(PMIDL_STUB_MESSAGE,PFORMAT_STRING);
+unsigned long RPC_ENTRY NdrComplexStructMemorySize(PMIDL_STUB_MESSAGE,PFORMAT_STRING);
+unsigned long RPC_ENTRY NdrFixedArrayMemorySize(PMIDL_STUB_MESSAGE,PFORMAT_STRING);
+unsigned long RPC_ENTRY NdrConformantArrayMemorySize(PMIDL_STUB_MESSAGE,PFORMAT_STRING);
+unsigned long RPC_ENTRY NdrConformantVaryingArrayMemorySize(PMIDL_STUB_MESSAGE,PFORMAT_STRING);
+unsigned long RPC_ENTRY NdrVaryingArrayMemorySize(PMIDL_STUB_MESSAGE,PFORMAT_STRING);
+unsigned long RPC_ENTRY NdrComplexArrayMemorySize(PMIDL_STUB_MESSAGE,PFORMAT_STRING);
+unsigned long RPC_ENTRY NdrConformantStringMemorySize(PMIDL_STUB_MESSAGE,PFORMAT_STRING);
+unsigned long RPC_ENTRY NdrNonConformantStringMemorySize(PMIDL_STUB_MESSAGE,PFORMAT_STRING);
+unsigned long RPC_ENTRY NdrEncapsulatedUnionMemorySize(PMIDL_STUB_MESSAGE,PFORMAT_STRING);
+unsigned long RPC_ENTRY NdrNonEncapsulatedUnionMemorySize(PMIDL_STUB_MESSAGE,PFORMAT_STRING);
+unsigned long RPC_ENTRY NdrXmitOrRepAsMemorySize(PMIDL_STUB_MESSAGE,PFORMAT_STRING);
+unsigned long RPC_ENTRY NdrInterfacePointerMemorySize(PMIDL_STUB_MESSAGE,PFORMAT_STRING);
+void RPC_ENTRY NdrPointerFree(PMIDL_STUB_MESSAGE,unsigned char*,PFORMAT_STRING);
+void RPC_ENTRY NdrSimpleStructFree(PMIDL_STUB_MESSAGE,unsigned char*,PFORMAT_STRING);
+void RPC_ENTRY NdrConformantStructFree(PMIDL_STUB_MESSAGE,unsigned char*,PFORMAT_STRING);
+void RPC_ENTRY NdrConformantVaryingStructFree(PMIDL_STUB_MESSAGE,unsigned char*,PFORMAT_STRING);
+void RPC_ENTRY NdrHardStructFree(PMIDL_STUB_MESSAGE,unsigned char*,PFORMAT_STRING);
+void RPC_ENTRY NdrComplexStructFree(PMIDL_STUB_MESSAGE,unsigned char*,PFORMAT_STRING);
+void RPC_ENTRY NdrFixedArrayFree(PMIDL_STUB_MESSAGE,unsigned char*,PFORMAT_STRING);
+void RPC_ENTRY NdrConformantArrayFree(PMIDL_STUB_MESSAGE,unsigned char*,PFORMAT_STRING);
+void RPC_ENTRY NdrConformantVaryingArrayFree(PMIDL_STUB_MESSAGE,unsigned char*,PFORMAT_STRING);
+void RPC_ENTRY NdrVaryingArrayFree(PMIDL_STUB_MESSAGE,unsigned char*,PFORMAT_STRING);
+void RPC_ENTRY NdrComplexArrayFree(PMIDL_STUB_MESSAGE,unsigned char*,PFORMAT_STRING);
+void RPC_ENTRY NdrEncapsulatedUnionFree(PMIDL_STUB_MESSAGE,unsigned char*,PFORMAT_STRING);
+void RPC_ENTRY NdrNonEncapsulatedUnionFree(PMIDL_STUB_MESSAGE,unsigned char*,PFORMAT_STRING);
+void RPC_ENTRY NdrByteCountPointerFree(PMIDL_STUB_MESSAGE,unsigned char*,PFORMAT_STRING);
+void RPC_ENTRY NdrXmitOrRepAsFree(PMIDL_STUB_MESSAGE,unsigned char*,PFORMAT_STRING);
+void RPC_ENTRY NdrInterfacePointerFree(PMIDL_STUB_MESSAGE,unsigned char*,PFORMAT_STRING);
+void RPC_ENTRY NdrConvert(PMIDL_STUB_MESSAGE,PFORMAT_STRING);
+void RPC_ENTRY NdrClientInitializeNew(PRPC_MESSAGE,PMIDL_STUB_MESSAGE,PMIDL_STUB_DESC,unsigned int);
+unsigned char *RPC_ENTRY NdrServerInitializeNew(PRPC_MESSAGE,PMIDL_STUB_MESSAGE,PMIDL_STUB_DESC);
+void RPC_ENTRY NdrClientInitialize(PRPC_MESSAGE,PMIDL_STUB_MESSAGE,PMIDL_STUB_DESC,unsigned int);
+unsigned char *RPC_ENTRY NdrServerInitialize(PRPC_MESSAGE,PMIDL_STUB_MESSAGE,PMIDL_STUB_DESC);
+unsigned char *RPC_ENTRY NdrServerInitializeUnmarshall(PMIDL_STUB_MESSAGE,PMIDL_STUB_DESC,PRPC_MESSAGE);
+void RPC_ENTRY NdrServerInitializeMarshall(PRPC_MESSAGE,PMIDL_STUB_MESSAGE);
+unsigned char *RPC_ENTRY NdrGetBuffer(PMIDL_STUB_MESSAGE,unsigned long,RPC_BINDING_HANDLE);
+unsigned char *RPC_ENTRY NdrNsGetBuffer(PMIDL_STUB_MESSAGE,unsigned long,RPC_BINDING_HANDLE);
+unsigned char *RPC_ENTRY NdrSendReceive(PMIDL_STUB_MESSAGE,unsigned char*);
+unsigned char *RPC_ENTRY NdrNsSendReceive(PMIDL_STUB_MESSAGE,unsigned char*,RPC_BINDING_HANDLE*);
+void RPC_ENTRY NdrFreeBuffer(PMIDL_STUB_MESSAGE);
+CLIENT_CALL_RETURN RPC_VAR_ENTRY NdrClientCall(PMIDL_STUB_DESC,PFORMAT_STRING,...);
+CLIENT_CALL_RETURN RPC_VAR_ENTRY NdrClientCall2(PMIDL_STUB_DESC,PFORMAT_STRING,...);
+typedef enum {
+ STUB_UNMARSHAL,
+ STUB_CALL_SERVER,
+ STUB_MARSHAL,
+ STUB_CALL_SERVER_NO_HRESULT
+} STUB_PHASE;
+typedef enum {
+ PROXY_CALCSIZE,
+ PROXY_GETBUFFER,
+ PROXY_MARSHAL,
+ PROXY_SENDRECEIVE,
+ PROXY_UNMARSHAL
+} PROXY_PHASE;
+long RPC_ENTRY NdrStubCall(struct IRpcStubBuffer*,struct IRpcChannelBuffer*,PRPC_MESSAGE,unsigned long*);
+void RPC_ENTRY NdrServerCall(PRPC_MESSAGE);
+int RPC_ENTRY NdrServerUnmarshall(struct IRpcChannelBuffer*,PRPC_MESSAGE,PMIDL_STUB_MESSAGE,PMIDL_STUB_DESC,PFORMAT_STRING,void*);
+void RPC_ENTRY NdrServerMarshall(struct IRpcStubBuffer*,struct IRpcChannelBuffer*,PMIDL_STUB_MESSAGE,PFORMAT_STRING);
+RPC_STATUS RPC_ENTRY NdrMapCommAndFaultStatus(PMIDL_STUB_MESSAGE,unsigned long*,unsigned long*,RPC_STATUS);
+int RPC_ENTRY NdrSH_UPDecision(PMIDL_STUB_MESSAGE,unsigned char**,RPC_BUFPTR);
+int RPC_ENTRY NdrSH_TLUPDecision(PMIDL_STUB_MESSAGE,unsigned char**);
+int RPC_ENTRY NdrSH_TLUPDecisionBuffer(PMIDL_STUB_MESSAGE,unsigned char**);
+int RPC_ENTRY NdrSH_IfAlloc(PMIDL_STUB_MESSAGE,unsigned char**,unsigned long);
+int RPC_ENTRY NdrSH_IfAllocRef(PMIDL_STUB_MESSAGE,unsigned char**,unsigned long);
+int RPC_ENTRY NdrSH_IfAllocSet(PMIDL_STUB_MESSAGE,unsigned char**,unsigned long);
+RPC_BUFPTR RPC_ENTRY NdrSH_IfCopy(PMIDL_STUB_MESSAGE,unsigned char**,unsigned long);
+RPC_BUFPTR RPC_ENTRY NdrSH_IfAllocCopy(PMIDL_STUB_MESSAGE,unsigned char**,unsigned long);
+unsigned long RPC_ENTRY NdrSH_Copy(unsigned char*,unsigned char*,unsigned long);
+void RPC_ENTRY NdrSH_IfFree(PMIDL_STUB_MESSAGE,unsigned char*);
+RPC_BUFPTR RPC_ENTRY NdrSH_StringMarshall(PMIDL_STUB_MESSAGE,unsigned char*,unsigned long,int);
+RPC_BUFPTR RPC_ENTRY NdrSH_StringUnMarshall(PMIDL_STUB_MESSAGE,unsigned char**,int);
+typedef void *RPC_SS_THREAD_HANDLE;
+typedef void* __RPC_API RPC_CLIENT_ALLOC(unsigned int);
+typedef void __RPC_API RPC_CLIENT_FREE(void*);
+void*RPC_ENTRY RpcSsAllocate(unsigned int);
+void RPC_ENTRY RpcSsDisableAllocate(void);
+void RPC_ENTRY RpcSsEnableAllocate(void);
+void RPC_ENTRY RpcSsFree(void*);
+RPC_SS_THREAD_HANDLE RPC_ENTRY RpcSsGetThreadHandle(void);
+void RPC_ENTRY RpcSsSetClientAllocFree(RPC_CLIENT_ALLOC*,RPC_CLIENT_FREE*);
+void RPC_ENTRY RpcSsSetThreadHandle(RPC_SS_THREAD_HANDLE);
+void RPC_ENTRY RpcSsSwapClientAllocFree(RPC_CLIENT_ALLOC*,RPC_CLIENT_FREE*,RPC_CLIENT_ALLOC**,RPC_CLIENT_FREE**);
+void*RPC_ENTRY RpcSmAllocate(unsigned int,RPC_STATUS*);
+RPC_STATUS RPC_ENTRY RpcSmClientFree(void*);
+RPC_STATUS RPC_ENTRY RpcSmDestroyClientContext(void**);
+RPC_STATUS RPC_ENTRY RpcSmDisableAllocate(void);
+RPC_STATUS RPC_ENTRY RpcSmEnableAllocate(void);
+RPC_STATUS RPC_ENTRY RpcSmFree(void*);
+RPC_SS_THREAD_HANDLE RPC_ENTRY RpcSmGetThreadHandle(RPC_STATUS*);
+RPC_STATUS RPC_ENTRY RpcSmSetClientAllocFree(RPC_CLIENT_ALLOC*,RPC_CLIENT_FREE*);
+RPC_STATUS RPC_ENTRY RpcSmSetThreadHandle(RPC_SS_THREAD_HANDLE);
+RPC_STATUS RPC_ENTRY RpcSmSwapClientAllocFree(RPC_CLIENT_ALLOC*,RPC_CLIENT_FREE*,RPC_CLIENT_ALLOC**,RPC_CLIENT_FREE**);
+void RPC_ENTRY NdrRpcSsEnableAllocate(PMIDL_STUB_MESSAGE);
+void RPC_ENTRY NdrRpcSsDisableAllocate(PMIDL_STUB_MESSAGE);
+void RPC_ENTRY NdrRpcSmSetClientToOsf(PMIDL_STUB_MESSAGE);
+void*RPC_ENTRY NdrRpcSmClientAllocate(unsigned int);
+void RPC_ENTRY NdrRpcSmClientFree(void*);
+void*RPC_ENTRY NdrRpcSsDefaultAllocate(unsigned int);
+void RPC_ENTRY NdrRpcSsDefaultFree(void*);
+PFULL_PTR_XLAT_TABLES RPC_ENTRY NdrFullPointerXlatInit(unsigned long,XLAT_SIDE);
+void RPC_ENTRY NdrFullPointerXlatFree(PFULL_PTR_XLAT_TABLES);
+int RPC_ENTRY NdrFullPointerQueryPointer(PFULL_PTR_XLAT_TABLES,void*,unsigned char,unsigned long*);
+int RPC_ENTRY NdrFullPointerQueryRefId(PFULL_PTR_XLAT_TABLES,unsigned long,unsigned char,void**);
+void RPC_ENTRY NdrFullPointerInsertRefId(PFULL_PTR_XLAT_TABLES,unsigned long,void*);
+int RPC_ENTRY NdrFullPointerFree(PFULL_PTR_XLAT_TABLES,void*);
+void*RPC_ENTRY NdrAllocate(PMIDL_STUB_MESSAGE,unsigned int);
+void RPC_ENTRY NdrClearOutParameters(PMIDL_STUB_MESSAGE,PFORMAT_STRING,void*);
+void*RPC_ENTRY NdrOleAllocate(unsigned int);
+void RPC_ENTRY NdrOleFree(void*);
+unsigned char*RPC_ENTRY NdrUserMarshalMarshall(PMIDL_STUB_MESSAGE,unsigned char*,PFORMAT_STRING);
+unsigned char*RPC_ENTRY NdrUserMarshalUnmarshall(PMIDL_STUB_MESSAGE,unsigned char**,PFORMAT_STRING,unsigned char);
+void RPC_ENTRY NdrUserMarshalBufferSize(PMIDL_STUB_MESSAGE,unsigned char*,PFORMAT_STRING);
+unsigned long RPC_ENTRY NdrUserMarshalMemorySize(PMIDL_STUB_MESSAGE,PFORMAT_STRING);
+void RPC_ENTRY NdrUserMarshalFree(PMIDL_STUB_MESSAGE,unsigned char*,PFORMAT_STRING);
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/rpcnsi.h b/tcc/include/winapi/rpcnsi.h
new file mode 100644
index 0000000..c8b25eb
--- /dev/null
+++ b/tcc/include/winapi/rpcnsi.h
@@ -0,0 +1,122 @@
+#ifndef _RPCNSI_H
+#define _RPCNSI_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+typedef void *RPC_NS_HANDLE;
+#define RPC_C_NS_SYNTAX_DEFAULT 0
+#define RPC_C_NS_SYNTAX_DCE 3
+#define RPC_C_PROFILE_DEFAULT_ELT 0
+#define RPC_C_PROFILE_ALL_ELT 1
+#define RPC_C_PROFILE_MATCH_BY_IF 2
+#define RPC_C_PROFILE_MATCH_BY_MBR 3
+#define RPC_C_PROFILE_MATCH_BY_BOTH 4
+#define RPC_C_NS_DEFAULT_EXP_AGE -1
+
+RPC_STATUS RPC_ENTRY RpcNsBindingExportA(unsigned long,unsigned char*,RPC_IF_HANDLE,RPC_BINDING_VECTOR*,UUID_VECTOR*);
+RPC_STATUS RPC_ENTRY RpcNsBindingUnexportA(unsigned long,unsigned char*,RPC_IF_HANDLE,UUID_VECTOR*);
+RPC_STATUS RPC_ENTRY RpcNsBindingLookupBeginA(unsigned long,unsigned char*,RPC_IF_HANDLE,UUID*,unsigned long,RPC_NS_HANDLE*);
+RPC_STATUS RPC_ENTRY RpcNsBindingLookupNext(RPC_NS_HANDLE,RPC_BINDING_VECTOR**);
+RPC_STATUS RPC_ENTRY RpcNsBindingLookupDone(RPC_NS_HANDLE*);
+RPC_STATUS RPC_ENTRY RpcNsGroupDeleteA(unsigned long,unsigned char*);
+RPC_STATUS RPC_ENTRY RpcNsGroupMbrAddA(unsigned long,unsigned char*,unsigned long,unsigned char*);
+RPC_STATUS RPC_ENTRY RpcNsGroupMbrRemoveA(unsigned long,unsigned char*,unsigned long,unsigned char*);
+RPC_STATUS RPC_ENTRY RpcNsGroupMbrInqBeginA(unsigned long,unsigned char*,unsigned long,RPC_NS_HANDLE*);
+RPC_STATUS RPC_ENTRY RpcNsGroupMbrInqNextA(RPC_NS_HANDLE,unsigned char**);
+RPC_STATUS RPC_ENTRY RpcNsGroupMbrInqDone(RPC_NS_HANDLE*);
+RPC_STATUS RPC_ENTRY RpcNsProfileDeleteA(unsigned long,unsigned char*);
+RPC_STATUS RPC_ENTRY RpcNsProfileEltAddA(unsigned long,unsigned char*,RPC_IF_ID*,unsigned long,unsigned char*,unsigned long,unsigned char*);
+RPC_STATUS RPC_ENTRY RpcNsProfileEltRemoveA(unsigned long,unsigned char*,RPC_IF_ID*,unsigned long,unsigned char*);
+RPC_STATUS RPC_ENTRY RpcNsProfileEltInqBeginA(unsigned long,unsigned char*,unsigned long,RPC_IF_ID*,unsigned long,unsigned long,unsigned char*,RPC_NS_HANDLE*);
+RPC_STATUS RPC_ENTRY RpcNsProfileEltInqNextA(RPC_NS_HANDLE,RPC_IF_ID*,unsigned char**,unsigned long*,unsigned char**);
+RPC_STATUS RPC_ENTRY RpcNsProfileEltInqDone(RPC_NS_HANDLE*);
+RPC_STATUS RPC_ENTRY RpcNsEntryObjectInqNext(/*IN*/ RPC_NS_HANDLE,/*OUT*/ UUID*);
+RPC_STATUS RPC_ENTRY RpcNsEntryObjectInqDone(/*IN OUT*/ RPC_NS_HANDLE*);
+RPC_STATUS RPC_ENTRY RpcNsEntryExpandNameA(unsigned long,unsigned char*,unsigned char**);
+RPC_STATUS RPC_ENTRY RpcNsMgmtBindingUnexportA(unsigned long,unsigned char*,RPC_IF_ID*,unsigned long,UUID_VECTOR*);
+RPC_STATUS RPC_ENTRY RpcNsMgmtEntryCreateA(unsigned long,unsigned char*);
+RPC_STATUS RPC_ENTRY RpcNsMgmtEntryDeleteA(unsigned long,unsigned char*);
+RPC_STATUS RPC_ENTRY RpcNsMgmtEntryInqIfIdsA(unsigned long,unsigned char*,RPC_IF_ID_VECTOR**);
+RPC_STATUS RPC_ENTRY RpcNsMgmtHandleSetExpAge(RPC_NS_HANDLE,unsigned long);
+RPC_STATUS RPC_ENTRY RpcNsMgmtInqExpAge(unsigned long*);
+RPC_STATUS RPC_ENTRY RpcNsMgmtSetExpAge(unsigned long);
+RPC_STATUS RPC_ENTRY RpcNsBindingImportNext(RPC_NS_HANDLE,RPC_BINDING_HANDLE*);
+RPC_STATUS RPC_ENTRY RpcNsBindingImportDone(RPC_NS_HANDLE*);
+RPC_STATUS RPC_ENTRY RpcNsBindingSelect(RPC_BINDING_VECTOR*,RPC_BINDING_HANDLE*);
+#ifndef UNICODE_ONLY
+RPC_STATUS RPC_ENTRY RpcNsEntryObjectInqBeginA(unsigned long,unsigned char*,RPC_NS_HANDLE*);
+RPC_STATUS RPC_ENTRY RpcNsBindingImportBeginA(unsigned long,unsigned char*,RPC_IF_HANDLE,UUID*,RPC_NS_HANDLE*);
+#endif
+#ifdef RPC_UNICODE_SUPPORTED
+RPC_STATUS RPC_ENTRY RpcNsBindingExportW(unsigned long,unsigned short*,RPC_IF_HANDLE,RPC_BINDING_VECTOR*,UUID_VECTOR*);
+RPC_STATUS RPC_ENTRY RpcNsBindingUnexportW(unsigned long,unsigned short*,RPC_IF_HANDLE,UUID_VECTOR*);
+RPC_STATUS RPC_ENTRY RpcNsBindingLookupBeginW(unsigned long,unsigned short*,RPC_IF_HANDLE,UUID*,unsigned long,RPC_NS_HANDLE*);
+RPC_STATUS RPC_ENTRY RpcNsGroupDeleteW(unsigned long,unsigned short*);
+RPC_STATUS RPC_ENTRY RpcNsGroupMbrAddW(unsigned long,unsigned short*,unsigned long,unsigned short*);
+RPC_STATUS RPC_ENTRY RpcNsGroupMbrRemoveW(unsigned long,unsigned short*,unsigned long,unsigned short*);
+RPC_STATUS RPC_ENTRY RpcNsGroupMbrInqBeginW(unsigned long,unsigned short*,unsigned long,RPC_NS_HANDLE*);
+RPC_STATUS RPC_ENTRY RpcNsGroupMbrInqNextW(RPC_NS_HANDLE,unsigned short**);
+RPC_STATUS RPC_ENTRY RpcNsProfileDeleteW(unsigned long,unsigned short*);
+RPC_STATUS RPC_ENTRY RpcNsProfileEltAddW(unsigned long,unsigned short*, RPC_IF_ID*,unsigned long,unsigned short*,unsigned long,unsigned short*);
+RPC_STATUS RPC_ENTRY RpcNsProfileEltRemoveW(unsigned long,unsigned short*, RPC_IF_ID*,unsigned long,unsigned short*);
+RPC_STATUS RPC_ENTRY RpcNsProfileEltInqBeginW(unsigned long,unsigned short*, unsigned long,RPC_IF_ID*,unsigned long,unsigned long,unsigned short*, RPC_NS_HANDLE*);
+RPC_STATUS RPC_ENTRY RpcNsProfileEltInqNextW(RPC_NS_HANDLE,RPC_IF_ID*, unsigned short**,unsigned long*,unsigned short**);
+RPC_STATUS RPC_ENTRY RpcNsEntryObjectInqBeginW(unsigned long,unsigned short*,RPC_NS_HANDLE*);
+RPC_STATUS RPC_ENTRY RpcNsEntryExpandNameW(unsigned long,unsigned short*,unsigned short**);
+RPC_STATUS RPC_ENTRY RpcNsMgmtBindingUnexportW(unsigned long,unsigned short*,RPC_IF_ID*,unsigned long,UUID_VECTOR*);
+RPC_STATUS RPC_ENTRY RpcNsMgmtEntryCreateW(unsigned long,unsigned short*);
+RPC_STATUS RPC_ENTRY RpcNsMgmtEntryDeleteW(unsigned long,unsigned short*);
+RPC_STATUS RPC_ENTRY RpcNsMgmtEntryInqIfIdsW(unsigned long,unsigned short , RPC_IF_ID_VECTOR**);
+RPC_STATUS RPC_ENTRY RpcNsBindingImportBeginW(unsigned long,unsigned short*,RPC_IF_HANDLE,UUID*,RPC_NS_HANDLE*);
+#endif /* RPC_UNICODE_SUPPORTED */
+#ifdef UNICODE
+#define RpcNsBindingLookupBegin RpcNsBindingLookupBeginW
+#define RpcNsBindingImportBegin RpcNsBindingImportBeginW
+#define RpcNsBindingExport RpcNsBindingExportW
+#define RpcNsBindingUnexport RpcNsBindingUnexportW
+#define RpcNsGroupDelete RpcNsGroupDeleteW
+#define RpcNsGroupMbrAdd RpcNsGroupMbrAddW
+#define RpcNsGroupMbrRemove RpcNsGroupMbrRemoveW
+#define RpcNsGroupMbrInqBegin RpcNsGroupMbrInqBeginW
+#define RpcNsGroupMbrInqNext RpcNsGroupMbrInqNextW
+#define RpcNsEntryExpandName RpcNsEntryExpandNameW
+#define RpcNsEntryObjectInqBegin RpcNsEntryObjectInqBeginW
+#define RpcNsMgmtBindingUnexport RpcNsMgmtBindingUnexportW
+#define RpcNsMgmtEntryCreate RpcNsMgmtEntryCreateW
+#define RpcNsMgmtEntryDelete RpcNsMgmtEntryDeleteW
+#define RpcNsMgmtEntryInqIfIds RpcNsMgmtEntryInqIfIdsW
+#define RpcNsProfileDelete RpcNsProfileDeleteW
+#define RpcNsProfileEltAdd RpcNsProfileEltAddW
+#define RpcNsProfileEltRemove RpcNsProfileEltRemoveW
+#define RpcNsProfileEltInqBegin RpcNsProfileEltInqBeginW
+#define RpcNsProfileEltInqNext RpcNsProfileEltInqNextW
+#else
+#define RpcNsBindingLookupBegin RpcNsBindingLookupBeginA
+#define RpcNsBindingImportBegin RpcNsBindingImportBeginA
+#define RpcNsBindingExport RpcNsBindingExportA
+#define RpcNsBindingUnexport RpcNsBindingUnexportA
+#define RpcNsGroupDelete RpcNsGroupDeleteA
+#define RpcNsGroupMbrAdd RpcNsGroupMbrAddA
+#define RpcNsGroupMbrRemove RpcNsGroupMbrRemoveA
+#define RpcNsGroupMbrInqBegin RpcNsGroupMbrInqBeginA
+#define RpcNsGroupMbrInqNext RpcNsGroupMbrInqNextA
+#define RpcNsEntryExpandName RpcNsEntryExpandNameA
+#define RpcNsEntryObjectInqBegin RpcNsEntryObjectInqBeginA
+#define RpcNsMgmtBindingUnexport RpcNsMgmtBindingUnexportA
+#define RpcNsMgmtEntryCreate RpcNsMgmtEntryCreateA
+#define RpcNsMgmtEntryDelete RpcNsMgmtEntryDeleteA
+#define RpcNsMgmtEntryInqIfIds RpcNsMgmtEntryInqIfIdsA
+#define RpcNsProfileDelete RpcNsProfileDeleteA
+#define RpcNsProfileEltAdd RpcNsProfileEltAddA
+#define RpcNsProfileEltRemove RpcNsProfileEltRemoveA
+#define RpcNsProfileEltInqBegin RpcNsProfileEltInqBeginA
+#define RpcNsProfileEltInqNext RpcNsProfileEltInqNextA
+#endif
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/rpcnsip.h b/tcc/include/winapi/rpcnsip.h
new file mode 100644
index 0000000..3c50dad
--- /dev/null
+++ b/tcc/include/winapi/rpcnsip.h
@@ -0,0 +1,25 @@
+#ifndef _RPCNSIP_H
+#define _RPCNSIP_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+typedef struct {
+ RPC_NS_HANDLE LookupContext;
+ RPC_BINDING_HANDLE ProposedHandle;
+ RPC_BINDING_VECTOR *Bindings;
+} RPC_IMPORT_CONTEXT_P,*PRPC_IMPORT_CONTEXT_P;
+RPC_STATUS RPC_ENTRY I_RpcNsGetBuffer(/*IN*/ PRPC_MESSAGE);
+RPC_STATUS RPC_ENTRY I_RpcNsSendReceive(/*IN*/ PRPC_MESSAGE,/*OUT*/ RPC_BINDING_HANDLE*);
+void RPC_ENTRY I_RpcNsRaiseException(/*IN*/ PRPC_MESSAGE,/*IN*/ RPC_STATUS);
+RPC_STATUS RPC_ENTRY I_RpcReBindBuffer(/*IN*/ PRPC_MESSAGE);
+RPC_STATUS RPC_ENTRY I_NsServerBindSearch(void);
+RPC_STATUS RPC_ENTRY I_NsClientBindSearch(void);
+void RPC_ENTRY I_NsClientBindDone(void);
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/rpcnterr.h b/tcc/include/winapi/rpcnterr.h
new file mode 100644
index 0000000..b23c429
--- /dev/null
+++ b/tcc/include/winapi/rpcnterr.h
@@ -0,0 +1,23 @@
+#ifndef _RPCNTERR_H
+#define _RPCNTERR_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#define RPC_S_OK ERROR_SUCCESS
+#define RPC_S_INVALID_ARG ERROR_INVALID_PARAMETER
+#define RPC_S_OUT_OF_MEMORY ERROR_OUTOFMEMORY
+#define RPC_S_OUT_OF_THREADS ERROR_MAX_THRDS_REACHED
+#define RPC_S_INVALID_LEVEL ERROR_INVALID_PARAMETER
+#define RPC_S_BUFFER_TOO_SMALL ERROR_INSUFFICIENT_BUFFER
+#define RPC_S_INVALID_SECURITY_DESC ERROR_INVALID_SECURITY_DESCR
+#define RPC_S_ACCESS_DENIED ERROR_ACCESS_DENIED
+#define RPC_S_SERVER_OUT_OF_MEMORY ERROR_NOT_ENOUGH_SERVER_MEMORY
+#define RPC_X_NO_MEMORY RPC_S_OUT_OF_MEMORY
+#define RPC_X_INVALID_BOUND RPC_S_INVALID_BOUND
+#define RPC_X_INVALID_TAG RPC_S_INVALID_TAG
+#define RPC_X_ENUM_VALUE_TOO_LARGE RPC_X_ENUM_VALUE_OUT_OF_RANGE
+#define RPC_X_SS_CONTEXT_MISMATCH ERROR_INVALID_HANDLE
+#define RPC_X_INVALID_BUFFER ERROR_INVALID_USER_BUFFER
+#define RPC_X_INVALID_PIPE_OPERATION RPC_X_WRONG_PIPE_ORDER
+#endif
diff --git a/tcc/include/winapi/rpcproxy.h b/tcc/include/winapi/rpcproxy.h
new file mode 100644
index 0000000..d4fcce5
--- /dev/null
+++ b/tcc/include/winapi/rpcproxy.h
@@ -0,0 +1,204 @@
+/*
+ -DREGISTER_PROXY_DLL Generates DllMain, DllRegisterServer, and DllUnregisterServer
+ -DPROXY_CLSID=clsid Specifies a class ID to be used by the proxy DLL.
+ -DPROXY_CLSID_IS={..} Specifies the class ID to be used by the proxy DLL.
+ -DNT35_STRICT No new features
+*/
+#ifndef _RPCPROXY_H
+#define _RPCPROXY_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#if defined __cplusplus && !defined CINTERFACE
+#warning "rpcproxy type definitions require CINTERFACE"
+#else
+#ifdef __cplusplus
+extern "C" {
+#endif
+#include <rpc.h>
+#include <rpcndr.h>
+#include <string.h>
+
+#define CStdStubBuffer_METHODS CStdStubBuffer_QueryInterface,CStdStubBuffer_AddRef,\
+CStdStubBuffer_Release,CStdStubBuffer_Connect,CStdStubBuffer_Disconnect,CStdStubBuffer_Invoke,\
+CStdStubBuffer_IsIIDSupported,CStdStubBuffer_CountRefs,CStdStubBuffer_DebugServerQueryInterface,\
+CStdStubBuffer_DebugServerRelease
+#define IID_GENERIC_CHECK_IID(name,pIID,index) memcmp(pIID,name##_ProxyVtblList[index]->header.piid,16)
+#define IID_BS_LOOKUP_SETUP int result, low=-1;
+#define IID_BS_LOOKUP_INITIAL_TEST(name,sz,split) if ((result = name##_CHECK_IID(split))>0) { low=sz-split;} else if (!result) { low = split; goto found_label; }
+#define IID_BS_LOOKUP_NEXT_TEST(name,split) if ((result = name##_CHECK_IID(low+split))>=0) { low=low+split; if (!result) goto found_label; }
+#define IID_BS_LOOKUP_RETURN_RESULT(name,sz,index) low+=1; if ((low>=sz )||(result=name##_CHECK_IID(low))) goto not_found_label; found_label: (index)=low; return 1; not_found_label: return 0;
+#define REGISTER_PROXY_DLL_ROUTINES(pProxyFileList, pClsID) \
+HINSTANCE hProxyDll = 0; \
+BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved) \
+{ \
+if(fdwReason == DLL_PROCESS_ATTACH) hProxyDll = hinstDLL; \
+return TRUE; \
+} \
+HRESULT STDAPICALLTYPE DllRegisterServer(void) \
+{\
+return NdrDllRegisterProxy(hProxyDll, pProxyFileList, pClsID); \
+}\
+HRESULT STDAPICALLTYPE DllUnregisterServer(void)\
+{\
+return NdrDllUnregisterProxy(hProxyDll, pProxyFileList, pClsID);\
+}
+#ifdef PROXY_CLSID
+#define CLSID_PSFACTORYBUFFER extern CLSID PROXY_CLSID;
+#else
+#ifdef PROXY_CLSID_IS
+#define CLSID_PSFACTORYBUFFER const CLSID CLSID_PSFactoryBuffer = PROXY_CLSID_IS;
+#define PROXY_CLSID CLSID_PSFactoryBuffer
+#else
+#define CLSID_PSFACTORYBUFFER
+#endif
+#endif
+#ifndef PROXY_CLSID
+#define GET_DLL_CLSID (aProxyFileList[0]->pStubVtblList[0] != 0 ? aProxyFileList[0]->pStubVtblList[0]->header.piid : 0)
+#else
+#define GET_DLL_CLSID &PROXY_CLSID
+#endif
+#define EXTERN_PROXY_FILE(name) EXTERN_C const ProxyFileInfo name##_ProxyFileInfo;
+#define PROXYFILE_LIST_START const ProxyFileInfo * aProxyFileList[] = {
+#define REFERENCE_PROXY_FILE(name) & name##_ProxyFileInfo
+#define PROXYFILE_LIST_END 0 };
+#define DLLDATA_GETPROXYDLLINFO(pPFList,pClsid) \
+void RPC_ENTRY GetProxyDllInfo( const ProxyFileInfo*** pInfo, const CLSID ** pId ) \
+{ *pInfo = pPFList; *pId = pClsid; };
+#define DLLGETCLASSOBJECTROUTINE(pPFlist, pClsid,pFactory) HRESULT STDAPICALLTYPE DllGetClassObject(REFCLSID rclsid,REFIID riid,void **ppv) \
+{ return NdrDllGetClassObject(rclsid,riid,ppv,pPFlist,pClsid,pFactory ); }
+#define DLLCANUNLOADNOW(pFactory) HRESULT STDAPICALLTYPE DllCanUnloadNow(void) \
+{ return NdrDllCanUnloadNow( pFactory ); }
+#define DLLDUMMYPURECALL void __cdecl _purecall(void) { }
+#define CSTDSTUBBUFFERRELEASE(pFactory) ULONG STDMETHODCALLTYPE CStdStubBuffer_Release(IRpcStubBuffer *This) \
+{ return NdrCStdStubBuffer_Release(This,(IPSFactoryBuffer *)pFactory); }
+#ifdef PROXY_DELEGATION
+#define CSTDSTUBBUFFER2RELEASE(pFactory) ULONG STDMETHODCALLTYPE CStdStubBuffer2_Release(IRpcStubBuffer *This) \
+{ return NdrCStdStubBuffer2_Release(This,(IPSFactoryBuffer *)pFactory); }
+#else
+#define CSTDSTUBBUFFER2RELEASE(pFactory)
+#endif
+
+#ifdef REGISTER_PROXY_DLL
+#define DLLREGISTRY_ROUTINES(pProxyFileList,pClsID ) REGISTER_PROXY_DLL_ROUTINES(pProxyFileList,pClsID)
+#else
+#define DLLREGISTRY_ROUTINES(pProxyFileList,pClsID)
+#endif
+#define DLLDATA_ROUTINES(pProxyFileList,pClsID) \
+CLSID_PSFACTORYBUFFER \
+CStdPSFactoryBuffer gPFactory = {0,0,0,0}; \
+DLLDATA_GETPROXYDLLINFO(pProxyFileList,pClsID) \
+DLLGETCLASSOBJECTROUTINE(pProxyFileList,pClsID,&gPFactory) \
+DLLCANUNLOADNOW(&gPFactory) \
+CSTDSTUBBUFFERRELEASE(&gPFactory) \
+CSTDSTUBBUFFER2RELEASE(&gPFactory) \
+DLLDUMMYPURECALL \
+DLLREGISTRY_ROUTINES(pProxyFileList, pClsID)
+
+#define DLLDATA_STANDARD_ROUTINES DLLDATA_ROUTINES( (const ProxyFileInfo**) pProxyFileList, &CLSID_PSFactoryBuffer)
+
+struct tagCInterfaceStubVtbl;
+struct tagCInterfaceProxyVtbl;
+typedef struct tagCInterfaceStubVtbl *PCInterfaceStubVtblList;
+typedef struct tagCInterfaceProxyVtbl *PCInterfaceProxyVtblList;
+typedef const char *PCInterfaceName;
+typedef int __stdcall IIDLookupRtn(const IID*,int*);
+typedef IIDLookupRtn *PIIDLookup;
+typedef struct tagProxyFileInfo {
+ const PCInterfaceProxyVtblList *pProxyVtblList;
+ const PCInterfaceStubVtblList *pStubVtblList;
+ const PCInterfaceName * pNamesArray;
+ const IID ** pDelegatedIIDs;
+ const PIIDLookup pIIDLookupRtn;
+ unsigned short TableSize;
+ unsigned short TableVersion;
+ unsigned long Filler1;
+ unsigned long Filler2;
+ unsigned long Filler3;
+ unsigned long Filler4;
+}ProxyFileInfo;
+typedef ProxyFileInfo ExtendedProxyFileInfo;
+
+typedef struct tagCInterfaceProxyHeader {
+#ifdef USE_STUBLESS_PROXY
+ const void *pStublessProxyInfo;
+#endif
+ const IID *piid;
+} CInterfaceProxyHeader;
+typedef struct tagCInterfaceProxyVtbl {
+ CInterfaceProxyHeader header;
+#if defined(__WATCOMC__)
+ void *Vtbl[1];
+#else
+#ifdef __GNUC__
+__extension__
+#endif
+ void *Vtbl[0];
+#endif
+} CInterfaceProxyVtbl;
+typedef void (__RPC_STUB *PRPC_STUB_FUNCTION)(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,DWORD*);
+typedef struct tagCInterfaceStubHeader {
+ const IID *piid;
+ const MIDL_SERVER_INFO *pServerInfo;
+ unsigned long DispatchTableCount;
+ const PRPC_STUB_FUNCTION *pDispatchTable;
+} CInterfaceStubHeader;
+typedef struct tagCInterfaceStubVtbl {
+ CInterfaceStubHeader header;
+ IRpcStubBufferVtbl Vtbl;
+} CInterfaceStubVtbl;
+typedef struct tagCStdStubBuffer {
+ const struct IRpcStubBufferVtbl * lpVtbl;
+ long RefCount;
+ struct IUnknown *pvServerObject;
+ const struct ICallFactoryVtbl * pCallFactoryVtbl;
+ const IID * pAsyncIID;
+ struct IPSFactoryBuffer * pPSFactory;
+ const struct IReleaseMarshalBuffersVtbl * pRMBVtbl;
+} CStdStubBuffer;
+typedef struct tagCStdPSFactoryBuffer {
+ const IPSFactoryBufferVtbl *lpVtbl;
+ long RefCount;
+ const ProxyFileInfo ** pProxyFileList;
+ long Filler1;
+} CStdPSFactoryBuffer;
+void RPC_ENTRY NdrProxyInitialize(void*,PRPC_MESSAGE,PMIDL_STUB_MESSAGE,PMIDL_STUB_DESC,unsigned int);
+void RPC_ENTRY NdrProxyGetBuffer(void*,PMIDL_STUB_MESSAGE);
+void RPC_ENTRY NdrProxySendReceive(void*,MIDL_STUB_MESSAGE*);
+void RPC_ENTRY NdrProxyFreeBuffer(void*,MIDL_STUB_MESSAGE*);
+HRESULT RPC_ENTRY NdrProxyErrorHandler(DWORD);
+void RPC_ENTRY NdrStubInitialize(PRPC_MESSAGE,PMIDL_STUB_MESSAGE,PMIDL_STUB_DESC,IRpcChannelBuffer*);
+void __RPC_STUB NdrStubForwardingFunction(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,DWORD*);
+void RPC_ENTRY NdrStubGetBuffer(IRpcStubBuffer*,IRpcChannelBuffer*,PMIDL_STUB_MESSAGE);
+HRESULT RPC_ENTRY NdrStubErrorHandler(DWORD);
+HRESULT STDMETHODCALLTYPE CStdStubBuffer_QueryInterface(IRpcStubBuffer*,REFIID,void**);
+ULONG STDMETHODCALLTYPE CStdStubBuffer_AddRef(IRpcStubBuffer*);
+ULONG STDMETHODCALLTYPE CStdStubBuffer_Release(IRpcStubBuffer*);
+ULONG STDMETHODCALLTYPE NdrCStdStubBuffer_Release(IRpcStubBuffer*,IPSFactoryBuffer*);
+HRESULT STDMETHODCALLTYPE CStdStubBuffer_Connect(IRpcStubBuffer*,IUnknown*);
+void STDMETHODCALLTYPE CStdStubBuffer_Disconnect(IRpcStubBuffer*);
+HRESULT STDMETHODCALLTYPE CStdStubBuffer_Invoke(IRpcStubBuffer*,RPCOLEMESSAGE*,IRpcChannelBuffer*);
+IRpcStubBuffer* STDMETHODCALLTYPE CStdStubBuffer_IsIIDSupported(IRpcStubBuffer*,REFIID);
+ULONG STDMETHODCALLTYPE CStdStubBuffer_CountRefs(IRpcStubBuffer*);
+HRESULT STDMETHODCALLTYPE CStdStubBuffer_DebugServerQueryInterface(IRpcStubBuffer*,void**);
+void STDMETHODCALLTYPE CStdStubBuffer_DebugServerRelease(IRpcStubBuffer*,void*);
+HRESULT RPC_ENTRY NdrDllGetClassObject(REFCLSID,REFIID,void**,const ProxyFileInfo**,const CLSID*,CStdPSFactoryBuffer*);
+HRESULT RPC_ENTRY NdrDllCanUnloadNow(CStdPSFactoryBuffer*);
+#ifndef NT35_STRICT
+HRESULT RPC_ENTRY NdrDllRegisterProxy(HMODULE,const ProxyFileInfo**,const CLSID*);
+HRESULT RPC_ENTRY NdrDllUnregisterProxy(HMODULE,const ProxyFileInfo**,const CLSID*);
+#define STUB_FORWARDING_FUNCTION NdrStubForwardingFunction
+ULONG STDMETHODCALLTYPE
+CStdStubBuffer2_Release(IRpcStubBuffer*);
+ULONG STDMETHODCALLTYPE
+NdrCStdStubBuffer2_Release(IRpcStubBuffer*,IPSFactoryBuffer*);
+#define CStdStubBuffer_DELEGATING_METHODS 0, 0, CStdStubBuffer2_Release, 0, 0, 0, 0, 0, 0, 0
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* defined __cplusplus && !defined CINTERFACE */
+#endif /* ndef _RPCPROXY_H */
+
diff --git a/tcc/include/winapi/rtutils.h b/tcc/include/winapi/rtutils.h
new file mode 100644
index 0000000..56c7fc1
--- /dev/null
+++ b/tcc/include/winapi/rtutils.h
@@ -0,0 +1,90 @@
+/*
+ * rtutils.h - Routing and Remote Access Services
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may use,
+ * modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+#ifndef _RTUTILS_H
+#define _RTUTILS_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--- Tracing Reference */
+#if (_WIN32_WINNT >= 0x0500)
+DWORD WINAPI TraceDeregisterA(DWORD);
+DWORD WINAPI TraceDeregisterW(DWORD);
+DWORD WINAPI TraceDeregisterExA(DWORD,DWORD);
+DWORD WINAPI TraceDeregisterExW(DWORD,DWORD);
+#define TRACE_NO_SYNCH 0x00000004
+#define TraceDumpA(a,b,c,d,e,f) TraceDumpExA((a),0,(b),(c),(d),(e),(f))
+#define TraceDumpW(a,b,c,d,e,f) TraceDumpExW((a),0,(b),(c),(d),(e),(f))
+DWORD WINAPI TraceDumpExA(DWORD,DWORD,LPBYTE,DWORD,DWORD,BOOL,LPCSTR);
+DWORD WINAPI TraceDumpExW(DWORD,DWORD,LPBYTE,DWORD,DWORD,BOOL,LPCWSTR);
+DWORD WINAPI TracePrintfA(DWORD,LPCSTR,...);
+DWORD WINAPI TracePrintfW(DWORD,LPCWSTR,...);
+DWORD WINAPI TracePrintfExA(DWORD,DWORD,LPCSTR,...);
+DWORD WINAPI TracePrintfExW(DWORD,DWORD,LPCWSTR,...);
+#define TracePutsA(a,b) TracePutsExA((a),0,(b))
+#define TracePutsW(a,b) TracePutsExW((a),0,(b))
+DWORD WINAPI TracePutsExA(DWORD,DWORD,LPCSTR);
+DWORD WINAPI TracePutsExW(DWORD,DWORD,LPCWSTR);
+#define TraceRegisterA(a) TraceRegisterExA((a),0)
+#define TraceRegisterW(a) TraceRegisterExW((a),0)
+DWORD WINAPI TraceRegisterExA(LPCSTR,DWORD);
+DWORD WINAPI TraceRegisterExW(LPCWSTR,DWORD);
+#define TRACE_USE_FILE 0x00000001
+#define TRACE_USE_CONSOLE 0x00000002
+#define INVALID_TRACEID 0xFFFFFFFF
+#define TraceVprintfA(a,b,c) TraceVprintfExA((a),0,(b),(c))
+#define TraceVprintfW(a,b,c) TraceVprintfExW((a),0,(b),(c))
+DWORD WINAPI TraceVprintfExA(DWORD,DWORD,LPCSTR,va_list);
+DWORD WINAPI TraceVprintfExW(DWORD,DWORD,LPCWSTR,va_list);
+#define TRACE_NO_STDINFO 0x00000001
+#define TRACE_USE_MASK 0x00000002
+#define TRACE_USE_MSEC 0x00000004
+#ifdef UNICODE
+#define TraceDeregister TraceDeregisterW
+#define TraceDeregisterEx TraceDeregisterExW
+#define TraceDump TraceDumpW
+#define TraceDumpEx TraceDumpExW
+#define TracePrintf TracePrintfW
+#define TracePrintfEx TracePrintfExW
+#define TracePuts TracePutsW
+#define TracePutsEx TracePutsExW
+#define TraceRegister TraceRegisterW
+#define TraceRegisterEx TraceRegisterExW
+#define TraceVprintf TraceVprintfW
+#define TraceVprintfEx TraceVprintfExW
+#else
+#define TraceDeregister TraceDeregisterA
+#define TraceDeregisterEx TraceDeregisterExA
+#define TraceDump TraceDumpA
+#define TraceDumpEx TraceDumpExA
+#define TracePrintf TracePrintfA
+#define TracePrintfEx TracePrintfExA
+#define TracePuts TracePutsA
+#define TracePutsEx TracePutsExA
+#define TraceRegister TraceRegisterA
+#define TraceRegisterEx TraceRegisterExA
+#define TraceVprintf TraceVprintfA
+#define TraceVprintfEx TraceVprintfExA
+#endif
+#endif /* (_WIN32_WINNT >= 0x0500) */
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/schannel.h b/tcc/include/winapi/schannel.h
new file mode 100644
index 0000000..e010555
--- /dev/null
+++ b/tcc/include/winapi/schannel.h
@@ -0,0 +1,90 @@
+#ifndef _SCHANNEL_H
+#define _SCHANNEL_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#include <wincrypt.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define SCHANNEL_CRED_VERSION 4
+#define SCHANNEL_SHUTDOWN 1
+/* ? Do these belong here or in wincrypt.h */
+#define AUTHTYPE_CLIENT 1
+#define AUTHTYPE_SERVER 2
+
+#define SP_PROT_TLS1_CLIENT 128
+#define SP_PROT_TLS1_SERVER 64
+#define SP_PROT_SSL3_CLIENT 32
+#define SP_PROT_SSL3_SERVER 16
+#define SP_PROT_SSL2_CLIENT 8
+#define SP_PROT_SSL2_SERVER 4
+#define SP_PROT_PCT1_SERVER 1
+#define SP_PROT_PCT1_CLIENT 2
+
+#define SP_PROT_PCT1 (SP_PROT_PCT1_CLIENT|SP_PROT_PCT1_SERVER)
+#define SP_PROT_TLS1 (SP_PROT_TLS1_CLIENT|SP_PROT_TLS1_SERVER)
+#define SP_PROT_SSL2 (SP_PROT_SSL2_CLIENT|SP_PROT_SSL2_SERVER)
+#define SP_PROT_SSL3 (SP_PROT_SSL3_CLIENT|SP_PROT_SSL3_SERVER)
+
+#define SCH_CRED_NO_SYSTEM_MAPPER 2
+#define SCH_CRED_NO_SERVERNAME_CHECK 4
+#define SCH_CRED_MANUAL_CRED_VALIDATION 8
+#define SCH_CRED_NO_DEFAULT_CREDS 16
+#define SCH_CRED_AUTO_CRED_VALIDATION 32
+#define SCH_CRED_REVOCATION_CHECK_CHAIN 512
+#define SCH_CRED_REVOCATION_CHECK_END_CERT 256
+#define SCH_CRED_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT 1024
+#define SCH_CRED_IGNORE_NO_REVOCATION_CHECK 2048
+#define SCH_CRED_IGNORE_REVOCATION_OFFLINE 4096
+#define SCH_CRED_USE_DEFAULT_CREDS 64
+
+typedef struct _SCHANNEL_CRED {
+ DWORD dwVersion;
+ DWORD cCreds;
+ PCCERT_CONTEXT* paCred;
+ HCERTSTORE hRootStore;
+ DWORD cMappers;
+ struct _HMAPPER** aphMappers;
+ DWORD cSupportedAlgs;
+ ALG_ID* palgSupportedAlgs;
+ DWORD grbitEnabledProtocols;
+ DWORD dwMinimumCypherStrength;
+ DWORD dwMaximumCypherStrength;
+ DWORD dwSessionLifespan;
+ DWORD dwFlags;
+ DWORD reserved;
+} SCHANNEL_CRED, *PSCHANNEL_CRED;
+typedef struct _SecPkgCred_SupportedAlgs {
+ DWORD cSupportedAlgs;
+ ALG_ID* palgSupportedAlgs;
+} SecPkgCred_SupportedAlgs, *PSecPkgCred_SupportedAlgs;
+typedef struct _SecPkgCred_CypherStrengths {
+ DWORD dwMinimumCypherStrength;
+ DWORD dwMaximumCypherStrength;
+} SecPkgCred_CypherStrengths, *PSecPkgCred_CypherStrengths;
+typedef struct _SecPkgCred_SupportedProtocols {
+ DWORD grbitProtocol;
+} SecPkgCred_SupportedProtocols, *PSecPkgCred_SupportedProtocols;
+typedef struct _SecPkgContext_IssuerListInfoEx {
+ PCERT_NAME_BLOB aIssuers;
+ DWORD cIssuers;
+} SecPkgContext_IssuerListInfoEx, *PSecPkgContext_IssuerListInfoEx;
+typedef struct _SecPkgContext_ConnectionInfo {
+ DWORD dwProtocol;
+ ALG_ID aiCipher;
+ DWORD dwCipherStrength;
+ ALG_ID aiHash;
+ DWORD dwHashStrength;
+ ALG_ID aiExch;
+ DWORD dwExchStrength;
+} SecPkgContext_ConnectionInfo, *PSecPkgContext_ConnectionInfo;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _SCHANNEL_H */
diff --git a/tcc/include/winapi/schnlsp.h b/tcc/include/winapi/schnlsp.h
new file mode 100644
index 0000000..8e9e095
--- /dev/null
+++ b/tcc/include/winapi/schnlsp.h
@@ -0,0 +1,14 @@
+#ifndef _SCHNLSP_H
+#define _SCHNLSP_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+
+#define SECPKG_ATTR_SUPPORTED_ALGS 86
+#define SECPKG_ATTR_CIPHER_STRENGTHS 87
+#define SECPKG_ATTR_SUPPORTED_PROTOCOLS 88
+
+#include <schannel.h>
+
+#endif /* _SCHNLSP_H */
diff --git a/tcc/include/winapi/scrnsave.h b/tcc/include/winapi/scrnsave.h
new file mode 100644
index 0000000..5cee4b6
--- /dev/null
+++ b/tcc/include/winapi/scrnsave.h
@@ -0,0 +1,81 @@
+/*
+ Screen saver library by Anders Norlander <anorland@hem2.passagen.se>
+
+ This library is (hopefully) compatible with Microsoft's
+ screen saver library.
+
+ This is public domain software.
+
+ */
+#ifndef _SCRNSAVE_H
+#define _SCRNSAVE_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* configure dialog identifier */
+#define DLG_SCRNSAVECONFIGURE 2003
+
+#define idsIsPassword 1000
+#define idsIniFile 1001
+#define idsScreenSaver 1002
+#define idsPassword 1003
+#define idsDifferentPW 1004
+#define idsChangePW 1005
+#define idsBadOldPW 1006
+#define idsAppName 1007
+#define idsNoHelpMemory 1008
+#define idsHelpFile 1009
+#define idsDefKeyword 1010
+
+#define IDS_DESCRIPTION 1
+#define ID_APP 100
+
+#define WS_GT (WS_GROUP | WS_TABSTOP)
+#define SCRM_VERIFYPW WM_APP
+#define MAXFILELEN 13
+#define TITLEBARNAMELEN 40
+#define APPNAMEBUFFERLEN 40
+#define BUFFLEN 255
+
+#ifndef RC_INVOKED
+
+/* functions provided by the aothor of the screen saver */
+BOOL WINAPI ScreenSaverConfigureDialog(HWND,UINT,WPARAM,LPARAM);
+BOOL WINAPI RegisterDialogClasses(HANDLE);
+LONG WINAPI ScreenSaverProc(HWND,UINT,WPARAM,LPARAM);
+
+/* Change name of function if we are using UNICODE */
+#ifdef UNICODE
+#define DefScreenSaverProc DefScreenSaverProcW
+#endif
+
+/* default screen saver proc; call instead of DefWindowProc */
+LONG WINAPI DefScreenSaverProc(HWND,UINT,WPARAM,LPARAM);
+
+/* change password */
+void WINAPI ScreenSaverChangePassword(HWND);
+
+/* globals that may be used by screen saver */
+extern HINSTANCE hMainInstance;
+extern HWND hMainWindow;
+extern BOOL fChildPreview;
+extern TCHAR szName[];
+extern TCHAR szAppName[];
+extern TCHAR szIniFile[];
+extern TCHAR szScreenSaver[];
+extern TCHAR szHelpFile[];
+extern TCHAR szNoHelpMemory[];
+extern UINT MyHelpMessage;
+
+#endif /* RC_INVOKED */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _SCRNSAVE_H */
diff --git a/tcc/include/winapi/sddl.h b/tcc/include/winapi/sddl.h
new file mode 100755
index 0000000..093c6dd
--- /dev/null
+++ b/tcc/include/winapi/sddl.h
@@ -0,0 +1,34 @@
+#ifndef _SDDL_H
+#define _SDDL_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifndef WINADVAPI
+#define WINADVAPI
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if (WINVER >= 0x0500)
+WINADVAPI BOOL WINAPI ConvertSidToStringSidA(PSID Sid, LPSTR* StringSid);
+WINADVAPI BOOL WINAPI ConvertSidToStringSidW(PSID Sid, LPWSTR* StringSid);
+WINADVAPI BOOL WINAPI ConvertStringSidToSidA(LPSTR StringSid, PSID *Sid);
+WINADVAPI BOOL WINAPI ConvertStringSidToSidW(LPWSTR StringSid, PSID *Sid);
+#endif
+
+#ifdef UNICODE
+#define ConvertSidToStringSid ConvertSidToStringSidW
+#define ConvertStringSidToSid ConvertStringSidToSidW
+#else
+#define ConvertSidToStringSid ConvertSidToStringSidA
+#define ConvertStringSidToSid ConvertStringSidToSidA
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _SDDL_H */
diff --git a/tcc/include/winapi/secext.h b/tcc/include/winapi/secext.h
new file mode 100644
index 0000000..15457e0
--- /dev/null
+++ b/tcc/include/winapi/secext.h
@@ -0,0 +1,52 @@
+#ifndef _SECEXT_H
+#define _SECEXT_H
+
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef RC_INVOKED
+#if (_WIN32_WINNT >= 0x0500)
+typedef enum
+{
+ NameUnknown = 0,
+ NameFullyQualifiedDN = 1,
+ NameSamCompatible = 2,
+ NameDisplay = 3,
+ NameUniqueId = 6,
+ NameCanonical = 7,
+ NameUserPrincipal = 8,
+ NameCanonicalEx = 9,
+ NameServicePrincipal = 10,
+ NameDnsDomain = 12
+} EXTENDED_NAME_FORMAT, *PEXTENDED_NAME_FORMAT;
+
+BOOLEAN WINAPI GetComputerObjectNameA(EXTENDED_NAME_FORMAT,LPSTR,PULONG);
+BOOLEAN WINAPI GetComputerObjectNameW(EXTENDED_NAME_FORMAT,LPWSTR,PULONG);
+BOOLEAN WINAPI GetUserNameExA(EXTENDED_NAME_FORMAT,LPSTR,PULONG);
+BOOLEAN WINAPI GetUserNameExW(EXTENDED_NAME_FORMAT,LPWSTR,PULONG);
+BOOLEAN WINAPI TranslateNameA(LPCSTR,EXTENDED_NAME_FORMAT,EXTENDED_NAME_FORMAT,LPSTR,PULONG);
+BOOLEAN WINAPI TranslateNameW(LPCWSTR,EXTENDED_NAME_FORMAT,EXTENDED_NAME_FORMAT,LPWSTR,PULONG);
+
+#ifdef UNICODE
+#define GetComputerObjectName GetComputerObjectNameW
+#define GetUserNameEx GetUserNameExW
+#define TranslateName TranslateNameW
+#else
+#define GetComputerObjectName GetComputerObjectNameA
+#define GetUserNameEx GetUserNameExA
+#define TranslateName TranslateNameA
+#endif
+
+#endif /* ! RC_INVOKED */
+#endif /* _WIN32_WINNT >= 0x0500 */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ! _SECEXT_H */
diff --git a/tcc/include/winapi/security.h b/tcc/include/winapi/security.h
new file mode 100644
index 0000000..9685cf0
--- /dev/null
+++ b/tcc/include/winapi/security.h
@@ -0,0 +1,42 @@
+#ifndef _SECURITY_H
+#define _SECURITY_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+
+#define SEC_E_OK 0
+#define SEC_E_CERT_EXPIRED (-2146893016)
+#define SEC_E_INCOMPLETE_MESSAGE (-2146893032)
+#define SEC_E_INSUFFICIENT_MEMORY (-2146893056)
+#define SEC_E_INTERNAL_ERROR (-2146893052)
+#define SEC_E_INVALID_HANDLE (-2146893055)
+#define SEC_E_INVALID_TOKEN (-2146893048)
+#define SEC_E_LOGON_DENIED (-2146893044)
+#define SEC_E_NO_AUTHENTICATING_AUTHORITY (-2146893039)
+#define SEC_E_NO_CREDENTIALS (-2146893042)
+#define SEC_E_TARGET_UNKNOWN (-2146893053)
+#define SEC_E_UNSUPPORTED_FUNCTION (-2146893054)
+#define SEC_E_UNTRUSTED_ROOT (-2146893019)
+#define SEC_E_WRONG_PRINCIPAL (-2146893022)
+#define SEC_E_SECPKG_NOT_FOUND (-2146893051)
+#define SEC_E_QOP_NOT_SUPPORTED (-2146893046)
+#define SEC_E_UNKNOWN_CREDENTIALS (-2146893043)
+#define SEC_E_NOT_OWNER (-2146893050)
+#define SEC_I_RENEGOTIATE 590625
+#define SEC_I_COMPLETE_AND_CONTINUE 590612
+#define SEC_I_COMPLETE_NEEDED 590611
+#define SEC_I_CONTINUE_NEEDED 590610
+#define SEC_I_INCOMPLETE_CREDENTIALS 590624
+
+/* always a char */
+typedef char SEC_CHAR;
+typedef wchar_t SEC_WCHAR;
+typedef long SECURITY_STATUS;
+#define SEC_FAR
+
+#include <sspi.h>
+#include <ntsecpkg.h>
+#include <secext.h>
+
+#endif /* _SECURITY_H */
diff --git a/tcc/include/winapi/servprov.h b/tcc/include/winapi/servprov.h
new file mode 100644
index 0000000..7666102
--- /dev/null
+++ b/tcc/include/winapi/servprov.h
@@ -0,0 +1,33 @@
+#ifndef _SERVPROV_H
+#define _SERVPROV_H
+#define _OLEIDL_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+EXTERN_C const IID IID_IServiceProvider;
+#define INTERFACE IServiceProvider
+DECLARE_INTERFACE_(IServiceProvider,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(QueryService)(THIS_ REFGUID,REFIID,void**) PURE;
+};
+#undef INTERFACE
+
+#ifdef COBJMACROS
+#define IServiceProvider_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define IServiceProvider_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define IServiceProvider_Release(T) (T)->lpVtbl->Release(T)
+#define IServiceProvider_QueryService(T,a,b,c) (T)->lpVtbl->QueryService(T,a,b,c)
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/setupapi.h b/tcc/include/winapi/setupapi.h
new file mode 100644
index 0000000..ef38852
--- /dev/null
+++ b/tcc/include/winapi/setupapi.h
@@ -0,0 +1,1590 @@
+#ifndef _SETUPAPI_H
+#define _SETUPAPI_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#include <commctrl.h>
+#include <pshpack1.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define WINSETUPAPI DECLSPEC_IMPORT
+
+#define LINE_LEN 256
+#define MAX_INF_STRING_LENGTH 4096
+#define MAX_TITLE_LEN 60
+#define MAX_INSTRUCTION_LEN 256
+#define MAX_LABEL_LEN 30
+#define MAX_SERVICE_NAME_LEN 256
+#define MAX_SUBTITLE_LEN 256
+#define SP_MAX_MACHINENAME_LENGTH (MAX_PATH + 3)
+
+#define COPYFLG_WARN_IF_SKIP 0x00000001
+#define COPYFLG_NOSKIP 0x00000002
+#define COPYFLG_NOVERSIONCHECK 0x00000004
+#define COPYFLG_FORCE_FILE_IN_USE 0x00000008
+#define COPYFLG_NO_OVERWRITE 0x00000010
+#define COPYFLG_NO_VERSION_DIALOG 0x00000020
+#define COPYFLG_OVERWRITE_OLDER_ONLY 0x00000040
+#define COPYFLG_REPLACEONLY 0x00000400
+#define COPYFLG_NODECOMP 0x00000800
+#define COPYFLG_REPLACE_BOOT_FILE 0x00001000
+#define COPYFLG_NOPRUNE 0x00002000
+#define DELFLG_IN_USE 0x00000001
+#define DELFLG_IN_USE1 0x00010000
+#define DI_REMOVEDEVICE_GLOBAL 0x00000001
+#define DI_REMOVEDEVICE_CONFIGSPECIFIC 0x00000002
+#define DI_UNREMOVEDEVICE_CONFIGSPECIFIC 0x00000002
+#define DI_SHOWOEM 0x00000001
+#define DI_SHOWCOMPAT 0x00000002
+#define DI_SHOWCLASS 0x00000004
+#define DI_SHOWALL 0x00000007
+#define DI_NOVCP 0x00000008
+#define DI_DIDCOMPAT 0x00000010
+#define DI_DIDCLASS 0x00000020
+#define DI_AUTOASSIGNRES 0x00000040
+#define DI_NEEDRESTART 0x00000080
+#define DI_NEEDREBOOT 0x00000100
+#define DI_NOBROWSE 0x00000200
+#define DI_MULTMFGS 0x00000400
+#define DI_DISABLED 0x00000800
+#define DI_GENERALPAGE_ADDED 0x00001000
+#define DI_RESOURCEPAGE_ADDED 0x00002000
+#define DI_PROPERTIES_CHANGE 0x00004000
+#define DI_INF_IS_SORTED 0x00008000
+#define DI_ENUMSINGLEINF 0x00010000
+#define DI_DONOTCALLCONFIGMG 0x00020000
+#define DI_INSTALLDISABLED 0x00040000
+#define DI_COMPAT_FROM_CLASS 0x00080000
+#define DI_CLASSINSTALLPARAMS 0x00100000
+#define DI_NODI_DEFAULTACTION 0x00200000
+#define DI_QUIETINSTALL 0x00800000
+#define DI_NOFILECOPY 0x01000000
+#define DI_FORCECOPY 0x02000000
+#define DI_DRIVERPAGE_ADDED 0x04000000
+#define DI_USECI_SELECTSTRINGS 0x08000000
+#define DI_OVERRIDE_INFFLAGS 0x10000000
+#define DI_PROPS_NOCHANGEUSAGE 0x20000000
+#define DI_NOSELECTICONS 0x40000000
+#define DI_NOWRITE_IDS 0x80000000
+#define DI_FLAGSEX_USEOLDINFSEARCH 0x00000001
+#define DI_FLAGSEX_AUTOSELECTRANK0 0x00000002
+#define DI_FLAGSEX_CI_FAILED 0x00000004
+#define DI_FLAGSEX_DIDINFOLIST 0x00000010
+#define DI_FLAGSEX_DIDCOMPATINFO 0x00000020
+#define DI_FLAGSEX_FILTERCLASSES 0x00000040
+#define DI_FLAGSEX_SETFAILEDINSTALL 0x00000080
+#define DI_FLAGSEX_DEVICECHANGE 0x00000100
+#define DI_FLAGSEX_ALWAYSWRITEIDS 0x00000200
+#define DI_FLAGSEX_PROPCHANGE_PENDING 0x00000400
+#define DI_FLAGSEX_ALLOWEXCLUDEDDRVS 0x00000800
+#define DI_FLAGSEX_NOUIONQUERYREMOVE 0x00001000
+#define DI_FLAGSEX_USECLASSFORCOMPAT 0x00002000
+#define DI_FLAGSEX_OLDINF_IN_CLASSLIST 0x00004000
+#define DI_FLAGSEX_NO_DRVREG_MODIFY 0x00008000
+#define DI_FLAGSEX_IN_SYSTEM_SETUP 0x00010000
+#define DI_FLAGSEX_INET_DRIVER 0x00020000
+#define DI_FLAGSEX_APPENDDRIVERLIST 0x00040000
+#define DI_FLAGSEX_PREINSTALLBACKUP 0x00080000
+#define DI_FLAGSEX_BACKUPONREPLACE 0x00100000
+#define DI_FLAGSEX_DRIVERLIST_FROM_URL 0x00200000
+#define DI_FLAGSEX_RESERVED1 0x00400000
+#define DI_FLAGSEX_EXCLUDE_OLD_INET_DRIVERS 0x00800000
+#define DI_FLAGSEX_POWERPAGE_ADDED 0x01000000
+#define DIBCI_NOINSTALLCLASS 0x00000001
+#define DIBCI_NODISPLAYCLASS 0x00000002
+#define DICD_GENERATE_ID 0x00000001
+#define DICD_INHERIT_CLASSDRVS 0x00000002
+#define DICS_ENABLE 1
+#define DICS_FLAG_GLOBAL 1
+#define DICS_DISABLE 2
+#define DICS_FLAG_CONFIGSPECIFIC 2
+#define DICS_PROPCHANGE 3
+#define DICS_START 4
+#define DICS_FLAG_CONFIGGENERAL 4
+#define DICS_STOP 5
+#define DIF_SELECTDEVICE 1
+#define DIF_INSTALLDEVICE 2
+#define DIF_ASSIGNRESOURCES 3
+#define DIF_PROPERTIES 4
+#define DIF_REMOVE 5
+#define DIF_FIRSTTIMESETUP 6
+#define DIF_FOUNDDEVICE 7
+#define DIF_SELECTCLASSDRIVERS 8
+#define DIF_VALIDATECLASSDRIVERS 9
+#define DIF_INSTALLCLASSDRIVERS 10
+#define DIF_CALCDISKSPACE 11
+#define DIF_DESTROYPRIVATEDATA 12
+#define DIF_VALIDATEDRIVER 13
+#define DIF_MOVEDEVICE 14
+#define DIF_DETECT 15
+#define DIF_INSTALLWIZARD 16
+#define DIF_DESTROYWIZARDDATA 17
+#define DIF_PROPERTYCHANGE 18
+#define DIF_ENABLECLASS 19
+#define DIF_DETECTVERIFY 20
+#define DIF_INSTALLDEVICEFILES 21
+#define DIF_UNREMOVE 22
+#define DIF_SELECTBESTCOMPATDRV 23
+#define DIF_ALLOW_INSTALL 24
+#define DIF_REGISTERDEVICE 25
+#define DIF_NEWDEVICEWIZARD_PRESELECT 26
+#define DIF_NEWDEVICEWIZARD_SELECT 27
+#define DIF_NEWDEVICEWIZARD_PREANALYZE 28
+#define DIF_NEWDEVICEWIZARD_POSTANALYZE 29
+#define DIF_NEWDEVICEWIZARD_FINISHINSTALL 30
+#define DIF_UNUSED1 31
+#define DIF_INSTALLINTERFACES 32
+#define DIF_DETECTCANCEL 33
+#define DIF_REGISTER_COINSTALLERS 34
+#define DIF_ADDPROPERTYPAGE_ADVANCED 35
+#define DIF_ADDPROPERTYPAGE_BASIC 36
+#define DIF_RESERVED1 37
+#define DIF_TROUBLESHOOTER 38
+#define DIF_POWERMESSAGEWAKE 39
+#define DIGCF_DEFAULT 0x00000001
+#define DIGCDP_FLAG_BASIC 0x00000001
+#define DIGCF_PRESENT 0x00000002
+#define DIGCDP_FLAG_ADVANCED 0x00000002
+#define DIGCF_ALLCLASSES 0x00000004
+#define DIGCF_PROFILE 0x00000008
+#define DIGCF_DEVICEINTERFACE 0x00000010
+#define DIGCF_INTERFACEDEVICE 0x00000010
+#define DIOCR_INSTALLER 0x00000001
+#define DIOCR_INTERFACE 0x00000002
+#define DIODI_NO_ADD 0x00000001
+#define DIOD_INHERIT_CLASSDRVS 0x00000002
+#define DIOD_CANCEL_REMOVE 0x00000004
+#define DIREG_DEV 0x00000001
+#define DIREG_DRV 0x00000002
+#define DIREG_BOTH 0x00000004
+#define DIRID_ABSOLUTE -1
+#define DIRID_NULL 0
+#define DIRID_SRCPATH 1
+#define DIRID_WINDOWS 10
+#define DIRID_SYSTEM 11
+#define DIRID_DRIVERS 12
+#define DIRID_INF 17
+#define DIRID_HELP 18
+#define DIRID_FONTS 20
+#define DIRID_VIEWERS 21
+#define DIRID_COLOR 23
+#define DIRID_APPS 24
+#define DIRID_SHARED 25
+#define DIRID_BOOT 30
+#define DIRID_SYSTEM16 50
+#define DIRID_SPOOL 51
+#define DIRID_SPOOLDRIVERS 52
+#define DIRID_USERPROFILE 53
+#define DIRID_LOADER 54
+#define DIRID_PRINTPROCESSOR 55
+#define DIRID_COMMON_STARTMENU 16406
+#define DIRID_COMMON_PROGRAMS 16407
+#define DIRID_COMMON_STARTUP 16408
+#define DIRID_COMMON_DESKTOPDIRECTORY 16409
+#define DIRID_COMMON_FAVORITES 16415
+#define DIRID_COMMON_APPDATA 16419
+#define DIRID_PROGRAM_FILES 16422
+#define DIRID_SYSTEM_X86 16425
+#define DIRID_PROGRAM_FILES_X86 16426
+#define DIRID_PROGRAM_FILES_COMMON 16427
+#define DIRID_PROGRAM_FILES_COMMONX86 16428
+#define DIRID_COMMON_TEMPLATES 16429
+#define DIRID_COMMON_DOCUMENTS 16430
+#define DIRID_USER 0x8000
+#define DIRID_ABSOLUTE_16BIT 0xffff
+#define DIRID_IOSUBSYS DIRID_DRIVERS
+#define DIRID_DEFAULT DIRID_SYSTEM
+#define DMI_MASK 0x00000001
+#define DMI_BKCOLOR 0x00000002
+#define DMI_USERECT 0x00000004
+#define DNF_DUPDESC 0x00000001
+#define DNF_OLDDRIVER 0x00000002
+#define DNF_EXCLUDEFROMLIST 0x00000004
+#define DNF_NODRIVER 0x00000008
+#define DNF_LEGACYINF 0x00000010
+#define DNF_CLASS_DRIVER 0x00000020
+#define DNF_COMPATIBLE_DRIVER 0x00000040
+#define DNF_INET_DRIVER 0x00000080
+#define DNF_UNUSED1 0x00000100
+#define DNF_INDEXED_DRIVER 0x00000200
+#define DNF_OLD_INET_DRIVER 0x00000400
+#define DNF_BAD_DRIVER 0x00000800
+#define DNF_DUPPROVIDER 0x00001000
+#define DPROMPT_SUCCESS 0
+#define DPROMPT_CANCEL 1
+#define DPROMPT_SKIPFILE 2
+#define DPROMPT_BUFFERTOOSMALL 3
+#define DPROMPT_OUTOFMEMORY 4
+#define DRIVER_HARDWAREID_RANK 0x00000FFF
+#define DYNAWIZ_FLAG_PAGESADDED 0x00000001
+#define DYNAWIZ_FLAG_INSTALLDET_NEXT 0x00000002
+#define DYNAWIZ_FLAG_INSTALLDET_PREV 0x00000004
+#define DYNAWIZ_FLAG_ANALYZE_HANDLECONFLICT 0x00000008
+#define ENABLECLASS_QUERY 0
+#define ENABLECLASS_SUCCESS 1
+#define ENABLECLASS_FAILURE 2
+#define ERROR_EXPECTED_SECTION_NAME (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0)
+#define ERROR_BAD_SECTION_NAME_LINE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|1)
+#define ERROR_SECTION_NAME_TOO_LONG (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|2)
+#define ERROR_GENERAL_SYNTAX (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|3)
+#define ERROR_WRONG_INF_STYLE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x100)
+#define ERROR_NOT_INSTALLED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x1000)
+#define ERROR_SECTION_NOT_FOUND (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x101)
+#define ERROR_LINE_NOT_FOUND (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x102)
+#define ERROR_NO_BACKUP (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x103)
+#define ERROR_NO_ASSOCIATED_CLASS (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x200)
+#define ERROR_CLASS_MISMATCH (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x201)
+#define ERROR_DUPLICATE_FOUND (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x202)
+#define ERROR_NO_DRIVER_SELECTED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x203)
+#define ERROR_KEY_DOES_NOT_EXIST (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x204)
+#define ERROR_INVALID_DEVINST_NAME (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x205)
+#define ERROR_INVALID_CLASS (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x206)
+#define ERROR_DEVINST_ALREADY_EXISTS (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x207)
+#define ERROR_DEVINFO_NOT_REGISTERED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x208)
+#define ERROR_INVALID_REG_PROPERTY (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x209)
+#define ERROR_NO_INF (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20A)
+#define ERROR_NO_SUCH_DEVINST (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20B)
+#define ERROR_CANT_LOAD_CLASS_ICON (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20C)
+#define ERROR_INVALID_CLASS_INSTALLER (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20D)
+#define ERROR_DI_DO_DEFAULT (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20E)
+#define ERROR_DI_NOFILECOPY (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20F)
+#define ERROR_INVALID_HWPROFILE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x210)
+#define ERROR_NO_DEVICE_SELECTED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x211)
+#define ERROR_DEVINFO_LIST_LOCKED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x212)
+#define ERROR_DEVINFO_DATA_LOCKED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x213)
+#define ERROR_DI_BAD_PATH (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x214)
+#define ERROR_NO_CLASSINSTALL_PARAMS (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x215)
+#define ERROR_FILEQUEUE_LOCKED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x216)
+#define ERROR_BAD_SERVICE_INSTALLSECT (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x217)
+#define ERROR_NO_CLASS_DRIVER_LIST (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x218)
+#define ERROR_NO_ASSOCIATED_SERVICE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x219)
+#define ERROR_NO_DEFAULT_DEVICE_INTERFACE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21A)
+#define ERROR_DEVICE_INTERFACE_ACTIVE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21B)
+#define ERROR_DEVICE_INTERFACE_REMOVED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21C)
+#define ERROR_BAD_INTERFACE_INSTALLSECT (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21D)
+#define ERROR_NO_SUCH_INTERFACE_CLASS (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21E)
+#define ERROR_INVALID_REFERENCE_STRING (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21F)
+#define ERROR_INVALID_MACHINENAME (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x220)
+#define ERROR_REMOTE_COMM_FAILURE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x221)
+#define ERROR_MACHINE_UNAVAILABLE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x222)
+#define ERROR_NO_CONFIGMGR_SERVICES (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x223)
+#define ERROR_INVALID_PROPPAGE_PROVIDER (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x224)
+#define ERROR_NO_SUCH_DEVICE_INTERFACE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x225)
+#define ERROR_DI_POSTPROCESSING_REQUIRED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x226)
+#define ERROR_INVALID_COINSTALLER (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x227)
+#define ERROR_NO_COMPAT_DRIVERS (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x228)
+#define ERROR_NO_DEVICE_ICON (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x229)
+#define ERROR_INVALID_INF_LOGCONFIG (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x22A)
+#define ERROR_DI_DONT_INSTALL (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x22B)
+#define ERROR_INVALID_FILTER_DRIVER (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x22C)
+#define ERROR_NON_WINDOWS_NT_DRIVER (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x22D)
+#define ERROR_NON_WINDOWS_DRIVER (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x22E)
+#define ERROR_NO_CATALOG_FOR_OEM_INF (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x22F)
+#define ERROR_DEVINSTALL_QUEUE_NONNATIVE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x230)
+#define ERROR_NOT_DISABLEABLE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x231)
+#define ERROR_CANT_REMOVE_DEVINST (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x232)
+#define ERROR_INTERFACE_DEVICE_ACTIVE ERROR_DEVICE_INTERFACE_ACTIVE
+#define ERROR_INTERFACE_DEVICE_REMOVED ERROR_DEVICE_INTERFACE_REMOVED
+#define ERROR_NO_DEFAULT_INTERFACE_DEVICE ERROR_NO_DEFAULT_DEVICE_INTERFACE
+#define ERROR_NO_SUCH_INTERFACE_DEVICE ERROR_NO_SUCH_DEVICE_INTERFACE
+
+#define FILEOP_COPY 0
+#define FILEOP_ABORT 0
+#define FILE_COMPRESSION_NONE 0
+#define FILEOP_RENAME 1
+#define FILEOP_DOIT 1
+#define FILE_COMPRESSION_WINLZA 1
+#define FILEOP_DELETE 2
+#define FILEOP_SKIP 2
+#define FILE_COMPRESSION_MSZIP 2
+#define FILEOP_BACKUP 3
+#define FILE_COMPRESSION_NTCAB 3
+#define FILEOP_NEWPATH 4
+#define FILEOP_RETRY FILEOP_DOIT
+#define FLG_ADDREG_TYPE_SZ 0x00000000
+#define FLG_ADDREG_BINVALUETYPE 0x00000001
+#define FLG_ADDREG_NOCLOBBER 0x00000002
+#define FLG_ADDREG_DELVAL 0x00000004
+#define FLG_ADDREG_APPEND 0x00000008
+#define FLG_ADDREG_KEYONLY 0x00000010
+#define FLG_ADDREG_OVERWRITEONLY 0x00000020
+#if (_SETUPAPI_VER >= 0x0501)
+#define FLG_ADDREG_64BITKEY 0x00001000
+#define FLG_ADDREG_KEYONLY_COMMON 0x00002000
+#define FLG_ADDREG_32BITKEY 0x00004000
+#define FLG_ADDREG_DELREG_BIT 0x00008000
+#endif
+#define FLG_ADDREG_TYPE_MULTI_SZ 0x00010000
+#define FLG_ADDREG_TYPE_EXPAND_SZ 0x00020000
+#define FLG_ADDREG_TYPE_BINARY (0x00000000|FLG_ADDREG_BINVALUETYPE)
+#define FLG_ADDREG_TYPE_DWORD (0x00010000|FLG_ADDREG_BINVALUETYPE)
+#define FLG_ADDREG_TYPE_NONE (0x00020000|FLG_ADDREG_BINVALUETYPE)
+#define FLG_ADDREG_TYPE_MASK (0xFFFF0000|FLG_ADDREG_BINVALUETYPE)
+#define FLG_DELREG_VALUE 0x00000000
+#if (_SETUPAPI_VER >= 0x0501)
+#define FLG_DELREG_TYPE_MASK FLG_ADDREG_TYPE_MASK
+#define FLG_DELREG_TYPE_SZ FLG_ADDREG_TYPE_SZ
+#define FLG_DELREG_TYPE_MULTI_SZ FLG_ADDREG_TYPE_MULTI_SZ
+#define FLG_DELREG_TYPE_EXPAND_SZ FLG_ADDREG_TYPE_EXPAND_SZ
+#define FLG_DELREG_TYPE_BINARY FLG_ADDREG_TYPE_BINARY
+#define FLG_DELREG_TYPE_DWORD FLG_ADDREG_TYPE_DWORD
+#define FLG_DELREG_TYPE_NONE FLG_ADDREG_TYPE_NONE
+#define FLG_DELREG_64BITKEY FLG_ADDREG_64BITKEY
+#define FLG_DELREG_KEYONLY_COMMON FLG_ADDREG_KEYONLY_COMMON
+#define FLG_DELREG_32BITKEY FLG_ADDREG_32BITKEY
+#define FLG_DELREG_OPERATION_MASK 0x000000FE
+#define FLG_DELREG_MULTI_SZ_DELSTRING (0x00000002|FLG_DELREG_TYPE_MULTI_SZ|FLG_ADDREG_DELREG_BIT)
+#endif
+#define FLG_BITREG_CLEARBITS 0x00000000
+#define FLG_BITREG_SETBITS 0x00000001
+#define FLG_PROFITEM_CURRENTUSER 0x00000001
+#define FLG_PROFITEM_DELETE 0x00000002
+#define FLG_PROFITEM_GROUP 0x00000004
+#define FLG_PROFITEM_CSIDL 0x00000008
+#define FLG_REGSVR_DLLREGISTER 0x00000001
+#define FLG_REGSVR_DLLINSTALL 0x00000002
+#define MIN_IDD_DYNAWIZ_RESOURCE_ID 10000
+#define MAX_IDD_DYNAWIZ_RESOURCE_ID 11000
+#define IDD_DYNAWIZ_FIRSTPAGE 10000
+#define IDD_DYNAWIZ_SELECT_PREVPAGE 10001
+#define IDD_DYNAWIZ_SELECT_NEXTPAGE 10002
+#define IDD_DYNAWIZ_ANALYZE_PREVPAGE 10003
+#define IDD_DYNAWIZ_ANALYZE_NEXTPAGE 10004
+#define IDD_DYNAWIZ_INSTALLDETECTED_PREVPAGE 10006
+#define IDD_DYNAWIZ_INSTALLDETECTED_NEXTPAGE 10007
+#define IDD_DYNAWIZ_INSTALLDETECTED_NODEVS 10008
+#define IDD_DYNAWIZ_SELECTDEV_PAGE 10009
+#define IDD_DYNAWIZ_ANALYZEDEV_PAGE 10010
+#define IDD_DYNAWIZ_INSTALLDETECTEDDEVS_PAGE 10011
+#define IDD_DYNAWIZ_SELECTCLASS_PAGE 10012
+#define IDF_NOBROWSE 0x00000001
+#define IDF_NOSKIP 0x00000002
+#define IDF_NODETAILS 0x00000004
+#define IDF_NOCOMPRESSED 0x00000008
+#define IDF_CHECKFIRST 0x00000100
+#define IDF_NOBEEP 0x00000200
+#define IDF_NOFOREGROUND 0x00000400
+#define IDF_WARNIFSKIP 0x00000800
+#define IDF_OEMDISK 0x80000000
+#define IDI_RESOURCEFIRST 159
+#define IDI_RESOURCE 159
+#define IDI_RESOURCELAST 161
+#define IDI_RESOURCEOVERLAYFIRST 161
+#define IDI_RESOURCEOVERLAYLAST 161
+#define IDI_CONFLICT 161
+#define IDI_PROBLEM_OVL 500
+#define IDI_DISABLED_OVL 501
+#define IDI_FORCED_OVL 502
+#define IDI_CLASSICON_OVERLAYFIRST 500
+#define IDI_CLASSICON_OVERLAYLAST 502
+#define INF_STYLE_NONE 0x00000000
+#define INF_STYLE_OLDNT 0x00000001
+#define INF_STYLE_WIN4 0x00000002
+#define INF_STYLE_CACHE_ENABLE 0x00000010
+#define INF_STYLE_CACHE_DISABLE 0x00000020
+#define INFINFO_INF_SPEC_IS_HINF 1
+#define INFINFO_INF_NAME_IS_ABSOLUTE 2
+#define INFINFO_DEFAULT_SEARCH 3
+#define INFINFO_REVERSE_DEFAULT_SEARCH 4
+#define INFINFO_INF_PATH_LIST_SEARCH 5
+#define LogSevInformation 0
+#define LogSevWarning 1
+#define LogSevError 2
+#define LogSevFatalError 3
+#define LogSevMaximum 4
+#define LogSeverity DWORD
+#define MAX_INSTALLWIZARD_DYNAPAGES 20
+#define NDW_INSTALLFLAG_DIDFACTDEFS 0x00000001
+#define NDW_INSTALLFLAG_HARDWAREALLREADYIN 0x00000002
+#define NDW_INSTALLFLAG_NEEDSHUTDOWN 0x00000200
+#define NDW_INSTALLFLAG_EXPRESSINTRO 0x00000400
+#define NDW_INSTALLFLAG_SKIPISDEVINSTALLED 0x00000800
+#define NDW_INSTALLFLAG_NODETECTEDDEVS 0x00001000
+#define NDW_INSTALLFLAG_INSTALLSPECIFIC 0x00002000
+#define NDW_INSTALLFLAG_SKIPCLASSLIST 0x00004000
+#define NDW_INSTALLFLAG_CI_PICKED_OEM 0x00008000
+#define NDW_INSTALLFLAG_PCMCIAMODE 0x00010000
+#define NDW_INSTALLFLAG_PCMCIADEVICE 0x00020000
+#define NDW_INSTALLFLAG_USERCANCEL 0x00040000
+#define NDW_INSTALLFLAG_KNOWNCLASS 0x00080000
+#define NDW_INSTALLFLAG_NEEDRESTART 0x00000080
+#define NDW_INSTALLFLAG_NEEDREBOOT 0x00000100
+#if (_SETUPAPI_VER >= 0x0502)
+#define SCWMI_CLOBBER_SECURITY 0x00000001
+#endif
+#define SETDIRID_NOT_FULL_PATH 0x00000001
+#define SP_COPY_DELETESOURCE 0x0000001
+#define SP_COPY_REPLACEONLY 0x0000002
+#define SP_COPY_NEWER 0x0000004
+#define SP_COPY_NEWER_OR_SAME 0x0000004
+#define SP_COPY_NOOVERWRITE 0x0000008
+#define SP_COPY_NODECOMP 0x0000010
+#define SP_COPY_LANGUAGEAWARE 0x0000020
+#define SP_COPY_SOURCE_ABSOLUTE 0x0000040
+#define SP_COPY_SOURCEPATH_ABSOLUTE 0x0000080
+#define SP_COPY_IN_USE_NEEDS_REBOOT 0x0000100
+#define SP_COPY_FORCE_IN_USE 0x0000200
+#define SP_COPY_NOSKIP 0x0000400
+#define SP_COPY_FORCE_NOOVERWRITE 0x0001000
+#define SP_COPY_FORCE_NEWER 0x0002000
+#define SP_COPY_WARNIFSKIP 0x0004000
+#define SP_COPY_NOBROWSE 0x0008000
+#define SP_COPY_NEWER_ONLY 0x0010000
+#define SP_COPY_SOURCE_SIS_MASTER 0x0020000
+#define SP_COPY_OEMINF_CATALOG_ONLY 0x0040000
+#define SP_COPY_REPLACE_BOOT_FILE 0x0080000
+#define SP_COPY_NOPRUNE 0x0100000
+#define SP_FLAG_CABINETCONTINUATION 0x0000800
+#define SPCRP_SECURITY 23
+#define SPCRP_SECURITY_SDS 24
+#define SPCRP_DEVTYPE 25
+#define SPCRP_EXCLUSIVE 26
+#define SPCRP_CHARACTERISTICS 27
+#define SPCRP_MAXIMUM_PROPERTY 28
+#define SPDIT_NODRIVER 0
+#define SPDIT_CLASSDRIVER 1
+#define SPDIT_COMPATDRIVER 2
+#define SPDRP_DEVICEDESC 0
+#define SPDRP_HARDWAREID 1
+#define SPDRP_COMPATIBLEIDS 2
+#define SPDRP_UNUSED0 3
+#define SPDRP_SERVICE 4
+#define SPDRP_UNUSED1 5
+#define SPDRP_UNUSED2 6
+#define SPDRP_CLASS 7
+#define SPDRP_CLASSGUID 8
+#define SPDRP_DRIVER 9
+#define SPDRP_CONFIGFLAGS 10
+#define SPDRP_MFG 11
+#define SPDRP_FRIENDLYNAME 12
+#define SPDRP_LOCATION_INFORMATION 13
+#define SPDRP_PHYSICAL_DEVICE_OBJECT_NAME 14
+#define SPDRP_CAPABILITIES 15
+#define SPDRP_UI_NUMBER 16
+#define SPDRP_UPPERFILTERS 17
+#define SPDRP_LOWERFILTERS 18
+#define SPDRP_BUSTYPEGUID 19
+#define SPDRP_LEGACYBUSTYPE 20
+#define SPDRP_BUSNUMBER 21
+#define SPDRP_ENUMERATOR_NAME 22
+#define SPDRP_SECURITY 23
+#define SPDRP_SECURITY_SDS 24
+#define SPDRP_DEVTYPE 25
+#define SPDRP_EXCLUSIVE 26
+#define SPDRP_CHARACTERISTICS 27
+#define SPDRP_ADDRESS 28
+#define SPDRP_UI_NUMBER_DESC_FORMAT 30
+#define SPDRP_MAXIMUM_PROPERTY 31
+#define SPDSL_IGNORE_DISK 1
+#define SPDSL_DISALLOW_NEGATIVE_ADJUST 2
+
+#define SPFILENOTIFY_STARTQUEUE 1
+#define SPFILENOTIFY_ENDQUEUE 2
+#define SPFILENOTIFY_STARTSUBQUEUE 3
+#define SPFILENOTIFY_ENDSUBQUEUE 4
+#define SPFILENOTIFY_STARTDELETE 5
+#define SPFILENOTIFY_ENDDELETE 6
+#define SPFILENOTIFY_DELETEERROR 7
+#define SPFILENOTIFY_STARTRENAME 8
+#define SPFILENOTIFY_ENDRENAME 9
+#define SPFILENOTIFY_RENAMEERROR 10
+#define SPFILENOTIFY_STARTCOPY 11
+#define SPFILENOTIFY_ENDCOPY 12
+#define SPFILENOTIFY_COPYERROR 13
+#define SPFILENOTIFY_NEEDMEDIA 14
+#define SPFILENOTIFY_QUEUESCAN 15
+#define SPFILENOTIFY_CABINETINFO 16
+#define SPFILENOTIFY_FILEINCABINET 17
+#define SPFILENOTIFY_NEEDNEWCABINET 18
+#define SPFILENOTIFY_FILEEXTRACTED 19
+#define SPFILENOTIFY_FILEOPDELAYED 20
+#define SPFILENOTIFY_STARTBACKUP 21
+#define SPFILENOTIFY_BACKUPERROR 22
+#define SPFILENOTIFY_ENDBACKUP 23
+#define SPFILENOTIFY_QUEUESCAN_EX 24
+#define SPFILENOTIFY_LANGMISMATCH 0x00010000
+#define SPFILENOTIFY_TARGETEXISTS 0x00020000
+#define SPFILENOTIFY_TARGETNEWER 0x00040000
+#define SPFILELOG_SYSTEMLOG 0x00000001
+#define SPFILELOG_OEMFILE 0x00000001
+#define SPFILELOG_FORCENEW 0x00000002
+#define SPFILELOG_QUERYONLY 0x00000004
+#define SPFILEQ_FILE_IN_USE 0x00000001
+#define SPFILEQ_REBOOT_RECOMMENDED 0x00000002
+#define SPFILEQ_REBOOT_IN_PROGRESS 0x00000004
+#define SPINT_ACTIVE 0x00000001
+#define SPINT_DEFAULT 0x00000002
+#define SPINT_REMOVED 0x00000004
+#define SPID_ACTIVE 0x00000001
+#define SPID_DEFAULT 0x00000002
+#define SPID_REMOVED 0x00000004
+#define SPINST_LOGCONFIG 0x00000001
+#define SPINST_INIFILES 0x00000002
+#define SPINST_REGISTRY 0x00000004
+#define SPINST_INI2REG 0x00000008
+#define SPINST_FILES 0x00000010
+#define SPINST_BITREG 0x00000020
+#define SPINST_REGSVR 0x00000040
+#define SPINST_UNREGSVR 0x00000080
+#define SPINST_PROFILEITEMS 0x00000100
+#if (_SETUPAPI_VER >= 0x0501)
+#define SPINST_COPYINF 0x00000200
+#define SPINST_ALL 0x000003ff
+#else
+#define SPINST_ALL 0x000001ff
+#endif
+#define SPINST_SINGLESECTION 0x00010000
+#define SPINST_LOGCONFIG_IS_FORCED 0x00020000
+#define SPINST_LOGCONFIGS_ARE_OVERRIDES 0x00040000
+#define SPOST_NONE 0
+#define SPOST_PATH 1
+#define SPOST_URL 2
+#define SPOST_MAX 3
+#define SPPSR_SELECT_DEVICE_RESOURCES 1
+#define SPPSR_ENUM_BASIC_DEVICE_PROPERTIES 2
+#define SPPSR_ENUM_ADV_DEVICE_PROPERTIES 3
+#define SPQ_SCAN_FILE_PRESENCE 0x00000001
+#define SPQ_DELAYED_COPY 0x00000001
+#define SPQ_SCAN_FILE_VALIDITY 0x00000002
+#define SPQ_SCAN_USE_CALLBACK 0x00000004
+#define SPQ_SCAN_USE_CALLBACKEX 0x00000008
+#define SPQ_SCAN_INFORM_USER 0x00000010
+#define SPQ_SCAN_PRUNE_COPY_QUEUE 0x00000020
+#define SPRDI_FIND_DUPS 0x00000001
+#define SPSVCINST_TAGTOFRONT 0x00000001
+#define SPSVCINST_ASSOCSERVICE 0x00000002
+#define SPSVCINST_DELETEEVENTLOGENTRY 0x00000004
+#define SPSVCINST_NOCLOBBER_DISPLAYNAME 0x00000008
+#define SPSVCINST_NOCLOBBER_STARTTYPE 0x00000010
+#define SPSVCINST_NOCLOBBER_ERRORCONTROL 0x00000020
+#define SPSVCINST_NOCLOBBER_LOADORDERGROUP 0x00000040
+#define SPSVCINST_NOCLOBBER_DEPENDENCIES 0x00000080
+#define SPSVCINST_NOCLOBBER_DESCRIPTION 0x00000100
+#define SPSVCINST_STOPSERVICE 0x00000200
+#define SPWPT_SELECTDEVICE 0x00000001
+#define SPWP_USE_DEVINFO_DATA 0x00000001
+#define SRCINFO_PATH 1
+#define SRCINFO_TAGFILE 2
+#define SRCINFO_DESCRIPTION 3
+#define SRCINFO_FLAGS 4
+#define SRCLIST_TEMPORARY 0x00000001
+#define SRCLIST_NOBROWSE 0x00000002
+#define SRCLIST_SYSTEM 0x00000010
+#define SRCLIST_USER 0x00000020
+#define SRCLIST_SYSIFADMIN 0x00000040
+#define SRCLIST_SUBDIRS 0x00000100
+#define SRCLIST_APPEND 0x00000200
+#define SRCLIST_NOSTRIPPLATFORM 0x00000400
+
+#ifndef RC_INVOKED
+typedef PVOID HINF;
+typedef PVOID HDSKSPC;
+typedef PVOID HDEVINFO;
+typedef PVOID HSPFILEQ;
+typedef PVOID HSPFILELOG;
+typedef UINT DI_FUNCTION;
+
+typedef enum {
+ SetupFileLogSourceFilename,
+ SetupFileLogChecksum,
+ SetupFileLogDiskTagfile,
+ SetupFileLogDiskDescription,
+ SetupFileLogOtherInfo,
+ SetupFileLogMax
+} SetupFileLogInfo;
+typedef struct _INFCONTEXT {
+ PVOID Inf;
+ PVOID CurrentInf;
+ UINT Section;
+ UINT Line;
+} INFCONTEXT, *PINFCONTEXT;
+typedef struct _SP_INF_INFORMATION {
+ DWORD InfStyle;
+ DWORD InfCount;
+ BYTE VersionData[ANYSIZE_ARRAY];
+} SP_INF_INFORMATION, *PSP_INF_INFORMATION;
+typedef struct _SP_ALTPLATFORM_INFO {
+ DWORD cbSize;
+ DWORD Platform;
+ DWORD MajorVersion;
+ DWORD MinorVersion;
+ WORD ProcessorArchitecture;
+ WORD Reserved;
+} SP_ALTPLATFORM_INFO, *PSP_ALTPLATFORM_INFO;
+typedef struct _SP_ORIGINAL_FILE_INFO_A {
+ DWORD cbSize;
+ CHAR OriginalInfName[MAX_PATH];
+ CHAR OriginalCatalogName[MAX_PATH];
+} SP_ORIGINAL_FILE_INFO_A, *PSP_ORIGINAL_FILE_INFO_A;
+typedef struct _SP_ORIGINAL_FILE_INFO_W {
+ DWORD cbSize;
+ WCHAR OriginalInfName[MAX_PATH];
+ WCHAR OriginalCatalogName[MAX_PATH];
+} SP_ORIGINAL_FILE_INFO_W, *PSP_ORIGINAL_FILE_INFO_W;
+typedef struct _FILEPATHS_A {
+ PCSTR Target;
+ PCSTR Source;
+ UINT Win32Error;
+ DWORD Flags;
+} FILEPATHS_A, *PFILEPATHS_A;
+typedef struct _FILEPATHS_W {
+ PCWSTR Target;
+ PCWSTR Source;
+ UINT Win32Error;
+ DWORD Flags;
+} FILEPATHS_W, *PFILEPATHS_W;
+typedef struct _SOURCE_MEDIA_A {
+ PCSTR Reserved;
+ PCSTR Tagfile;
+ PCSTR Description;
+ PCSTR SourcePath;
+ PCSTR SourceFile;
+ DWORD Flags;
+} SOURCE_MEDIA_A, *PSOURCE_MEDIA_A;
+typedef struct _SOURCE_MEDIA_W {
+ PCWSTR Reserved;
+ PCWSTR Tagfile;
+ PCWSTR Description;
+ PCWSTR SourcePath;
+ PCWSTR SourceFile;
+ DWORD Flags;
+} SOURCE_MEDIA_W, *PSOURCE_MEDIA_W;
+typedef struct _CABINET_INFO_A {
+ PCSTR CabinetPath;
+ PCSTR CabinetFile;
+ PCSTR DiskName;
+ USHORT SetId;
+ USHORT CabinetNumber;
+} CABINET_INFO_A, *PCABINET_INFO_A;
+typedef struct _CABINET_INFO_W {
+ PCWSTR CabinetPath;
+ PCWSTR CabinetFile;
+ PCWSTR DiskName;
+ USHORT SetId;
+ USHORT CabinetNumber;
+} CABINET_INFO_W, *PCABINET_INFO_W;
+typedef struct _FILE_IN_CABINET_INFO_A {
+ PCSTR NameInCabinet;
+ DWORD FileSize;
+ DWORD Win32Error;
+ WORD DosDate;
+ WORD DosTime;
+ WORD DosAttribs;
+ CHAR FullTargetName[MAX_PATH];
+} FILE_IN_CABINET_INFO_A, *PFILE_IN_CABINET_INFO_A;
+typedef struct _FILE_IN_CABINET_INFO_W {
+ PCWSTR NameInCabinet;
+ DWORD FileSize;
+ DWORD Win32Error;
+ WORD DosDate;
+ WORD DosTime;
+ WORD DosAttribs;
+ WCHAR FullTargetName[MAX_PATH];
+} FILE_IN_CABINET_INFO_W, *PFILE_IN_CABINET_INFO_W;
+typedef struct _SP_FILE_COPY_PARAMS_A {
+ DWORD cbSize;
+ HSPFILEQ QueueHandle;
+ PCSTR SourceRootPath;
+ PCSTR SourcePath;
+ PCSTR SourceFilename;
+ PCSTR SourceDescription;
+ PCSTR SourceTagfile;
+ PCSTR TargetDirectory;
+ PCSTR TargetFilename;
+ DWORD CopyStyle;
+ HINF LayoutInf;
+ PCSTR SecurityDescriptor;
+} SP_FILE_COPY_PARAMS_A, *PSP_FILE_COPY_PARAMS_A;
+typedef struct _SP_FILE_COPY_PARAMS_W {
+ DWORD cbSize;
+ HSPFILEQ QueueHandle;
+ PCWSTR SourceRootPath;
+ PCWSTR SourcePath;
+ PCWSTR SourceFilename;
+ PCWSTR SourceDescription;
+ PCWSTR SourceTagfile;
+ PCWSTR TargetDirectory;
+ PCWSTR TargetFilename;
+ DWORD CopyStyle;
+ HINF LayoutInf;
+ PCWSTR SecurityDescriptor;
+} SP_FILE_COPY_PARAMS_W, *PSP_FILE_COPY_PARAMS_W;
+typedef struct _SP_DEVINFO_DATA {
+ DWORD cbSize;
+ GUID ClassGuid;
+ DWORD DevInst;
+ ULONG_PTR Reserved;
+} SP_DEVINFO_DATA, *PSP_DEVINFO_DATA;
+typedef struct _SP_DEVICE_INTERFACE_DATA {
+ DWORD cbSize;
+ GUID InterfaceClassGuid;
+ DWORD Flags;
+ ULONG_PTR Reserved;
+} SP_DEVICE_INTERFACE_DATA, *PSP_DEVICE_INTERFACE_DATA;
+/* For backward compatibility */
+typedef SP_DEVICE_INTERFACE_DATA SP_INTERFACE_DEVICE_DATA, *PSP_INTERFACE_DEVICE_DATA;
+
+typedef struct _SP_DEVICE_INTERFACE_DETAIL_DATA_A {
+ DWORD cbSize;
+ CHAR DevicePath[ANYSIZE_ARRAY];
+} SP_DEVICE_INTERFACE_DETAIL_DATA_A, *PSP_DEVICE_INTERFACE_DETAIL_DATA_A;
+typedef struct _SP_DEVICE_INTERFACE_DETAIL_DATA_W {
+ DWORD cbSize;
+ WCHAR DevicePath[ANYSIZE_ARRAY];
+} SP_DEVICE_INTERFACE_DETAIL_DATA_W, *PSP_DEVICE_INTERFACE_DETAIL_DATA_W;
+/* For backward compatibility */
+typedef SP_DEVICE_INTERFACE_DETAIL_DATA_A SP_INTERFACE_DEVICE_DETAIL_DATA_A,
+ *PSP_INTERFACE_DEVICE_DETAIL_DATA_A;
+typedef SP_DEVICE_INTERFACE_DETAIL_DATA_W SP_INTERFACE_DEVICE_DETAIL_DATA_W,
+ *PSP_INTERFACE_DEVICE_DETAIL_DATA_W;
+
+typedef struct _SP_DEVINFO_LIST_DETAIL_DATA_A {
+ DWORD cbSize;
+ GUID ClassGuid;
+ HANDLE RemoteMachineHandle;
+ CHAR RemoteMachineName[SP_MAX_MACHINENAME_LENGTH];
+} SP_DEVINFO_LIST_DETAIL_DATA_A, *PSP_DEVINFO_LIST_DETAIL_DATA_A;
+typedef struct _SP_DEVINFO_LIST_DETAIL_DATA_W {
+ DWORD cbSize;
+ GUID ClassGuid;
+ HANDLE RemoteMachineHandle;
+ WCHAR RemoteMachineName[SP_MAX_MACHINENAME_LENGTH];
+} SP_DEVINFO_LIST_DETAIL_DATA_W, *PSP_DEVINFO_LIST_DETAIL_DATA_W;
+
+typedef UINT (CALLBACK* PSP_FILE_CALLBACK_A)(PVOID,UINT,UINT_PTR,UINT_PTR);
+typedef UINT (CALLBACK* PSP_FILE_CALLBACK_W)(PVOID,UINT,UINT_PTR,UINT_PTR);
+typedef struct _SP_DEVINSTALL_PARAMS_A {
+ DWORD cbSize;
+ DWORD Flags;
+ DWORD FlagsEx;
+ HWND hwndParent;
+ PSP_FILE_CALLBACK_A InstallMsgHandler;
+ PVOID InstallMsgHandlerContext;
+ HSPFILEQ FileQueue;
+ ULONG_PTR ClassInstallReserved;
+ DWORD Reserved;
+ CHAR DriverPath[MAX_PATH];
+} SP_DEVINSTALL_PARAMS_A, *PSP_DEVINSTALL_PARAMS_A;
+typedef struct _SP_DEVINSTALL_PARAMS_W {
+ DWORD cbSize;
+ DWORD Flags;
+ DWORD FlagsEx;
+ HWND hwndParent;
+ PSP_FILE_CALLBACK_W InstallMsgHandler;
+ PVOID InstallMsgHandlerContext;
+ HSPFILEQ FileQueue;
+ ULONG_PTR ClassInstallReserved;
+ DWORD Reserved;
+ WCHAR DriverPath[MAX_PATH];
+} SP_DEVINSTALL_PARAMS_W, *PSP_DEVINSTALL_PARAMS_W;
+typedef struct _SP_CLASSINSTALL_HEADER {
+ DWORD cbSize;
+ DI_FUNCTION InstallFunction;
+} SP_CLASSINSTALL_HEADER, *PSP_CLASSINSTALL_HEADER;
+typedef struct _SP_ENABLECLASS_PARAMS {
+ SP_CLASSINSTALL_HEADER ClassInstallHeader;
+ GUID ClassGuid;
+ DWORD EnableMessage;
+} SP_ENABLECLASS_PARAMS, *PSP_ENABLECLASS_PARAMS;
+typedef struct _SP_MOVEDEV_PARAMS {
+ SP_CLASSINSTALL_HEADER ClassInstallHeader;
+ SP_DEVINFO_DATA SourceDeviceInfoData;
+} SP_MOVEDEV_PARAMS, *PSP_MOVEDEV_PARAMS;
+typedef struct _SP_PROPCHANGE_PARAMS {
+ SP_CLASSINSTALL_HEADER ClassInstallHeader;
+ DWORD StateChange;
+ DWORD Scope;
+ DWORD HwProfile;
+} SP_PROPCHANGE_PARAMS, *PSP_PROPCHANGE_PARAMS;
+typedef struct _SP_REMOVEDEVICE_PARAMS {
+ SP_CLASSINSTALL_HEADER ClassInstallHeader;
+ DWORD Scope;
+ DWORD HwProfile;
+} SP_REMOVEDEVICE_PARAMS, *PSP_REMOVEDEVICE_PARAMS;
+typedef struct _SP_UNREMOVEDEVICE_PARAMS {
+ SP_CLASSINSTALL_HEADER ClassInstallHeader;
+ DWORD Scope;
+ DWORD HwProfile;
+} SP_UNREMOVEDEVICE_PARAMS, *PSP_UNREMOVEDEVICE_PARAMS;
+typedef struct _SP_SELECTDEVICE_PARAMS_A {
+ SP_CLASSINSTALL_HEADER ClassInstallHeader;
+ CHAR Title[MAX_TITLE_LEN];
+ CHAR Instructions[MAX_INSTRUCTION_LEN];
+ CHAR ListLabel[MAX_LABEL_LEN];
+ CHAR SubTitle[MAX_SUBTITLE_LEN];
+ BYTE Reserved[2];
+} SP_SELECTDEVICE_PARAMS_A, *PSP_SELECTDEVICE_PARAMS_A;
+typedef struct _SP_SELECTDEVICE_PARAMS_W {
+ SP_CLASSINSTALL_HEADER ClassInstallHeader;
+ WCHAR Title[MAX_TITLE_LEN];
+ WCHAR Instructions[MAX_INSTRUCTION_LEN];
+ WCHAR ListLabel[MAX_LABEL_LEN];
+ WCHAR SubTitle[MAX_SUBTITLE_LEN];
+} SP_SELECTDEVICE_PARAMS_W, *PSP_SELECTDEVICE_PARAMS_W;
+
+typedef BOOL (CALLBACK* PDETECT_PROGRESS_NOTIFY)(PVOID,DWORD);
+typedef struct _SP_DETECTDEVICE_PARAMS {
+ SP_CLASSINSTALL_HEADER ClassInstallHeader;
+ PDETECT_PROGRESS_NOTIFY DetectProgressNotify;
+ PVOID ProgressNotifyParam;
+} SP_DETECTDEVICE_PARAMS, *PSP_DETECTDEVICE_PARAMS;
+typedef struct _SP_INSTALLWIZARD_DATA {
+ SP_CLASSINSTALL_HEADER ClassInstallHeader;
+ DWORD Flags;
+ HPROPSHEETPAGE DynamicPages[MAX_INSTALLWIZARD_DYNAPAGES];
+ DWORD NumDynamicPages;
+ DWORD DynamicPageFlags;
+ DWORD PrivateFlags;
+ LPARAM PrivateData;
+ HWND hwndWizardDlg;
+} SP_INSTALLWIZARD_DATA, *PSP_INSTALLWIZARD_DATA;
+typedef struct _SP_NEWDEVICEWIZARD_DATA {
+ SP_CLASSINSTALL_HEADER ClassInstallHeader;
+ DWORD Flags;
+ HPROPSHEETPAGE DynamicPages[MAX_INSTALLWIZARD_DYNAPAGES];
+ DWORD NumDynamicPages;
+ HWND hwndWizardDlg;
+} SP_NEWDEVICEWIZARD_DATA, *PSP_NEWDEVICEWIZARD_DATA;
+typedef SP_NEWDEVICEWIZARD_DATA SP_ADDPROPERTYPAGE_DATA,
+ *PSP_ADDPROPERTYPAGE_DATA;
+typedef struct _SP_TROUBLESHOOTER_PARAMS_A {
+ SP_CLASSINSTALL_HEADER ClassInstallHeader;
+ CHAR ChmFile[MAX_PATH];
+ CHAR HtmlTroubleShooter[MAX_PATH];
+} SP_TROUBLESHOOTER_PARAMS_A, *PSP_TROUBLESHOOTER_PARAMS_A;
+typedef struct _SP_TROUBLESHOOTER_PARAMS_W {
+ SP_CLASSINSTALL_HEADER ClassInstallHeader;
+ WCHAR ChmFile[MAX_PATH];
+ WCHAR HtmlTroubleShooter[MAX_PATH];
+} SP_TROUBLESHOOTER_PARAMS_W, *PSP_TROUBLESHOOTER_PARAMS_W;
+typedef struct _SP_POWERMESSAGEWAKE_PARAMS_A {
+ SP_CLASSINSTALL_HEADER ClassInstallHeader;
+ CHAR PowerMessageWake[LINE_LEN*2];
+} SP_POWERMESSAGEWAKE_PARAMS_A, *PSP_POWERMESSAGEWAKE_PARAMS_A;
+typedef struct _SP_POWERMESSAGEWAKE_PARAMS_W {
+ SP_CLASSINSTALL_HEADER ClassInstallHeader;
+ WCHAR PowerMessageWake[LINE_LEN*2];
+} SP_POWERMESSAGEWAKE_PARAMS_W, *PSP_POWERMESSAGEWAKE_PARAMS_W;
+typedef struct _SP_DRVINFO_DATA_V2_A {
+ DWORD cbSize;
+ DWORD DriverType;
+ ULONG_PTR Reserved;
+ CHAR Description[LINE_LEN];
+ CHAR MfgName[LINE_LEN];
+ CHAR ProviderName[LINE_LEN];
+ FILETIME DriverDate;
+ DWORDLONG DriverVersion;
+} SP_DRVINFO_DATA_V2_A, *PSP_DRVINFO_DATA_V2_A;
+typedef struct _SP_DRVINFO_DATA_V2_W {
+ DWORD cbSize;
+ DWORD DriverType;
+ ULONG_PTR Reserved;
+ WCHAR Description[LINE_LEN];
+ WCHAR MfgName[LINE_LEN];
+ WCHAR ProviderName[LINE_LEN];
+ FILETIME DriverDate;
+ DWORDLONG DriverVersion;
+} SP_DRVINFO_DATA_V2_W, *PSP_DRVINFO_DATA_V2_W;
+typedef struct _SP_DRVINFO_DATA_V1_A {
+ DWORD cbSize;
+ DWORD DriverType;
+ ULONG_PTR Reserved;
+ CHAR Description[LINE_LEN];
+ CHAR MfgName[LINE_LEN];
+ CHAR ProviderName[LINE_LEN];
+} SP_DRVINFO_DATA_V1_A, *PSP_DRVINFO_DATA_V1_A;
+typedef struct _SP_DRVINFO_DATA_V1_W {
+ DWORD cbSize;
+ DWORD DriverType;
+ ULONG_PTR Reserved;
+ WCHAR Description[LINE_LEN];
+ WCHAR MfgName[LINE_LEN];
+ WCHAR ProviderName[LINE_LEN];
+} SP_DRVINFO_DATA_V1_W, *PSP_DRVINFO_DATA_V1_W;
+
+#ifdef UNICODE
+typedef SP_DRVINFO_DATA_V1_W SP_DRVINFO_DATA_V1, *PSP_DRVINFO_DATA_V1;
+typedef SP_DRVINFO_DATA_V2_W SP_DRVINFO_DATA_V2, *PSP_DRVINFO_DATA_V2;
+#else
+typedef SP_DRVINFO_DATA_V1_A SP_DRVINFO_DATA_V1, *PSP_DRVINFO_DATA_V1;
+typedef SP_DRVINFO_DATA_V2_A SP_DRVINFO_DATA_V2, *PSP_DRVINFO_DATA_V2;
+#endif
+
+#if USE_SP_DRVINFO_DATA_V1
+typedef SP_DRVINFO_DATA_V1_A SP_DRVINFO_DATA_A, *PSP_DRVINFO_DATA_A;
+typedef SP_DRVINFO_DATA_V1_W SP_DRVINFO_DATA_W, *PSP_DRVINFO_DATA_W;
+typedef SP_DRVINFO_DATA_V1 SP_DRVINFO_DATA, *PSP_DRVINFO_DATA;
+#else
+typedef SP_DRVINFO_DATA_V2_A SP_DRVINFO_DATA_A, *PSP_DRVINFO_DATA_A;
+typedef SP_DRVINFO_DATA_V2_W SP_DRVINFO_DATA_W, *PSP_DRVINFO_DATA_W;
+typedef SP_DRVINFO_DATA_V2 SP_DRVINFO_DATA, *PSP_DRVINFO_DATA;
+#endif
+
+typedef DWORD (CALLBACK* PSP_DETSIG_CMPPROC)(HDEVINFO,PSP_DEVINFO_DATA,PSP_DEVINFO_DATA,PVOID);
+
+typedef struct _SP_DRVINFO_DETAIL_DATA_A {
+ DWORD cbSize;
+ FILETIME InfDate;
+ DWORD CompatIDsOffset;
+ DWORD CompatIDsLength;
+ ULONG_PTR Reserved;
+ CHAR SectionName[LINE_LEN];
+ CHAR InfFileName[MAX_PATH];
+ CHAR DrvDescription[LINE_LEN];
+ CHAR HardwareID[ANYSIZE_ARRAY];
+} SP_DRVINFO_DETAIL_DATA_A, *PSP_DRVINFO_DETAIL_DATA_A;
+typedef struct _SP_DRVINFO_DETAIL_DATA_W {
+ DWORD cbSize;
+ FILETIME InfDate;
+ DWORD CompatIDsOffset;
+ DWORD CompatIDsLength;
+ ULONG_PTR Reserved;
+ WCHAR SectionName[LINE_LEN];
+ WCHAR InfFileName[MAX_PATH];
+ WCHAR DrvDescription[LINE_LEN];
+ WCHAR HardwareID[ANYSIZE_ARRAY];
+} SP_DRVINFO_DETAIL_DATA_W, *PSP_DRVINFO_DETAIL_DATA_W;
+typedef struct _SP_DRVINSTALL_PARAMS {
+ DWORD cbSize;
+ DWORD Rank;
+ DWORD Flags;
+ DWORD_PTR PrivateData;
+ DWORD Reserved;
+} SP_DRVINSTALL_PARAMS, *PSP_DRVINSTALL_PARAMS;
+
+
+typedef struct _COINSTALLER_CONTEXT_DATA {
+ BOOL PostProcessing;
+ DWORD InstallResult;
+ PVOID PrivateData;
+} COINSTALLER_CONTEXT_DATA, *PCOINSTALLER_CONTEXT_DATA;
+typedef struct _SP_CLASSIMAGELIST_DATA {
+ DWORD cbSize;
+ HIMAGELIST ImageList;
+ ULONG_PTR Reserved;
+} SP_CLASSIMAGELIST_DATA, *PSP_CLASSIMAGELIST_DATA;
+typedef struct _SP_PROPSHEETPAGE_REQUEST {
+ DWORD cbSize;
+ DWORD PageRequested;
+ HDEVINFO DeviceInfoSet;
+ PSP_DEVINFO_DATA DeviceInfoData;
+} SP_PROPSHEETPAGE_REQUEST, *PSP_PROPSHEETPAGE_REQUEST;
+typedef struct _SP_BACKUP_QUEUE_PARAMS_A {
+ DWORD cbSize;
+ CHAR FullInfPath[MAX_PATH];
+ INT FilenameOffset;
+} SP_BACKUP_QUEUE_PARAMS_A, *PSP_BACKUP_QUEUE_PARAMS_A;
+typedef struct _SP_BACKUP_QUEUE_PARAMS_W {
+ DWORD cbSize;
+ WCHAR FullInfPath[MAX_PATH];
+ INT FilenameOffset;
+} SP_BACKUP_QUEUE_PARAMS_W, *PSP_BACKUP_QUEUE_PARAMS_W;
+
+
+#ifdef UNICODE
+typedef SP_ORIGINAL_FILE_INFO_W SP_ORIGINAL_FILE_INFO, *PSP_ORIGINAL_FILE_INFO;
+typedef FILEPATHS_W FILEPATHS, *PFILEPATHS;
+typedef SOURCE_MEDIA_W SOURCE_MEDIA, *PSOURCE_MEDIA;
+typedef CABINET_INFO_W CABINET_INFO, *PCABINET_INFO;
+typedef FILE_IN_CABINET_INFO_W FILE_IN_CABINET_INFO, *PFILE_IN_CABINET_INFO;
+typedef SP_FILE_COPY_PARAMS_W SP_FILE_COPY_PARAMS, PSP_FILE_COPY_PARAMS;
+typedef SP_DEVICE_INTERFACE_DETAIL_DATA_W SP_DEVICE_INTERFACE_DETAIL_DATA,
+ *PSP_DEVICE_INTERFACE_DETAIL_DATA;
+typedef SP_INTERFACE_DEVICE_DETAIL_DATA_W SP_INTERFACE_DEVICE_DETAIL_DATA,
+ *PSP_INTERFACE_DEVICE_DETAIL_DATA; /* deprecated */
+typedef SP_DEVINFO_LIST_DETAIL_DATA_W SP_DEVINFO_LIST_DETAIL_DATA,
+ *PSP_DEVINFO_LIST_DETAIL_DATA;
+typedef SP_DEVINSTALL_PARAMS_W SP_DEVINSTALL_PARAMS, *PSP_DEVINSTALL_PARAMS;
+typedef SP_SELECTDEVICE_PARAMS_W SP_SELECTDEVICE_PARAMS, *PSP_SELECTDEVICE_PARAMS;
+typedef SP_TROUBLESHOOTER_PARAMS_W SP_TROUBLESHOOTER_PARAMS,
+ *PSP_TROUBLESHOOTER_PARAMS;
+typedef SP_POWERMESSAGEWAKE_PARAMS_W SP_POWERMESSAGEWAKE_PARAMS,
+ *PSP_POWERMESSAGEWAKE_PARAMS;
+typedef SP_DRVINFO_DETAIL_DATA_W SP_DRVINFO_DETAIL_DATA,
+ *PSP_DRVINFO_DETAIL_DATA;
+typedef SP_BACKUP_QUEUE_PARAMS_W SP_BACKUP_QUEUE_PARAMS,
+ *PSP_BACKUP_QUEUE_PARAMS;
+#else
+typedef SP_ORIGINAL_FILE_INFO_A SP_ORIGINAL_FILE_INFO, *PSP_ORIGINAL_FILE_INFO;
+typedef FILEPATHS_A FILEPATHS, *PFILEPATHS;
+typedef SOURCE_MEDIA_A SOURCE_MEDIA, *PSOURCE_MEDIA;
+typedef CABINET_INFO_A CABINET_INFO, *PCABINET_INFO;
+typedef FILE_IN_CABINET_INFO_A FILE_IN_CABINET_INFO, *PFILE_IN_CABINET_INFO;
+typedef SP_FILE_COPY_PARAMS_A SP_FILE_COPY_PARAMS, *PSP_FILE_COPY_PARAMS;
+typedef SP_DEVICE_INTERFACE_DETAIL_DATA_A SP_DEVICE_INTERFACE_DETAIL_DATA,
+ *PSP_DEVICE_INTERFACE_DETAIL_DATA;
+typedef SP_INTERFACE_DEVICE_DETAIL_DATA_A SP_INTERFACE_DEVICE_DETAIL_DATA,
+ *PSP_INTERFACE_DEVICE_DETAIL_DATA; /* deprecated */
+typedef SP_DEVINFO_LIST_DETAIL_DATA_A SP_DEVINFO_LIST_DETAIL_DATA,
+ *PSP_DEVINFO_LIST_DETAIL_DATA;
+typedef SP_DEVINSTALL_PARAMS_A SP_DEVINSTALL_PARAMS, *PSP_DEVINSTALL_PARAMS;
+typedef SP_SELECTDEVICE_PARAMS_A SP_SELECTDEVICE_PARAMS,
+ *PSP_SELECTDEVICE_PARAMS;
+typedef SP_TROUBLESHOOTER_PARAMS_A SP_TROUBLESHOOTER_PARAMS,
+ *PSP_TROUBLESHOOTER_PARAMS;
+typedef SP_POWERMESSAGEWAKE_PARAMS_A SP_POWERMESSAGEWAKE_PARAMS,
+ *PSP_POWERMESSAGEWAKE_PARAMS;
+typedef SP_DRVINFO_DETAIL_DATA_A SP_DRVINFO_DETAIL_DATA,
+ *PSP_DRVINFO_DETAIL_DATA;
+typedef SP_BACKUP_QUEUE_PARAMS_A SP_BACKUP_QUEUE_PARAMS,
+ *PSP_BACKUP_QUEUE_PARAMS;
+#endif /* UNICODE */
+
+WINSETUPAPI BOOL WINAPI SetupAddInstallSectionToDiskSpaceListA(HDSKSPC,HINF,HINF,PCSTR,PVOID,UINT);
+WINSETUPAPI BOOL WINAPI SetupAddInstallSectionToDiskSpaceListW(HDSKSPC,HINF,HINF,PCWSTR,PVOID,UINT);
+WINSETUPAPI BOOL WINAPI SetupAddSectionToDiskSpaceListA(HDSKSPC,HINF,HINF,PCSTR,UINT,PVOID,UINT);
+WINSETUPAPI BOOL WINAPI SetupAddSectionToDiskSpaceListW(HDSKSPC,HINF,HINF,PCWSTR,UINT,PVOID,UINT);
+WINSETUPAPI BOOL WINAPI SetupAddToDiskSpaceListA(HDSKSPC,PCSTR,LONGLONG,UINT,PVOID,UINT);
+WINSETUPAPI BOOL WINAPI SetupAddToDiskSpaceListW(HDSKSPC,PCWSTR,LONGLONG,UINT,PVOID,UINT);
+WINSETUPAPI BOOL WINAPI SetupAddToSourceListA(DWORD,PCSTR);
+WINSETUPAPI BOOL WINAPI SetupAddToSourceListW(DWORD,PCWSTR);
+WINSETUPAPI BOOL WINAPI SetupAdjustDiskSpaceListA(HDSKSPC,LPCSTR,LONGLONG,PVOID,UINT);
+WINSETUPAPI BOOL WINAPI SetupAdjustDiskSpaceListW(HDSKSPC,LPCWSTR,LONGLONG,PVOID,UINT);
+WINSETUPAPI UINT WINAPI SetupBackupErrorA(HWND,PCSTR,PCSTR,PCSTR,UINT,DWORD);
+WINSETUPAPI UINT WINAPI SetupBackupErrorW(HWND,PCWSTR,PCWSTR,PCWSTR,UINT,DWORD);
+WINSETUPAPI BOOL WINAPI SetupCancelTemporary(VOID);
+WINSETUPAPI BOOL WINAPI SetupCloseFileQueue(HSPFILEQ);
+WINSETUPAPI VOID WINAPI SetupCloseInfFile(HINF);
+WINSETUPAPI VOID WINAPI SetupCloseLog(VOID);
+WINSETUPAPI BOOL WINAPI SetupCommitFileQueueA(HWND,HSPFILEQ,PSP_FILE_CALLBACK_A,PVOID);
+WINSETUPAPI BOOL WINAPI SetupCommitFileQueueW(HWND,HSPFILEQ,PSP_FILE_CALLBACK_W,PVOID);
+#if (_SETUPAPI_VER >= 0x502)
+WINSETUPAPI BOOL WINAPI SetupConfigureWmiFromInfSectionA(HINF,PCSTR,DWORD);
+WINSETUPAPI BOOL WINAPI SetupConfigureWmiFromInfSectionW(HINF,PCWSTR,DWORD);
+#endif
+WINSETUPAPI UINT WINAPI SetupCopyErrorA(HWND,PCSTR,PCSTR,PCSTR,PCSTR,PCSTR,UINT,DWORD,PSTR,DWORD,PDWORD);
+WINSETUPAPI UINT WINAPI SetupCopyErrorW(HWND,PCWSTR,PCWSTR,PCWSTR,PCWSTR,PCWSTR,UINT,DWORD,PWSTR,DWORD,PDWORD);
+WINSETUPAPI BOOL WINAPI SetupCopyOEMInfA(PCSTR,PCSTR,DWORD,DWORD,PSTR,DWORD,PDWORD,PSTR*);
+WINSETUPAPI BOOL WINAPI SetupCopyOEMInfW(PCWSTR,PCWSTR,DWORD,DWORD,PWSTR,DWORD,PDWORD,PWSTR*);
+WINSETUPAPI HDSKSPC WINAPI SetupCreateDiskSpaceListA(PVOID,DWORD,UINT);
+WINSETUPAPI HDSKSPC WINAPI SetupCreateDiskSpaceListW(PVOID,DWORD,UINT);
+WINSETUPAPI DWORD WINAPI SetupDecompressOrCopyFileA(PCSTR,PCSTR,PUINT);
+WINSETUPAPI DWORD WINAPI SetupDecompressOrCopyFileW(PCWSTR,PCWSTR,PUINT);
+WINSETUPAPI UINT WINAPI SetupDefaultQueueCallbackA(PVOID,UINT,UINT_PTR,UINT_PTR);
+WINSETUPAPI UINT WINAPI SetupDefaultQueueCallbackW(PVOID,UINT,UINT_PTR,UINT_PTR);
+WINSETUPAPI UINT WINAPI SetupDeleteErrorA(HWND,PCSTR,PCSTR,UINT,DWORD);
+WINSETUPAPI UINT WINAPI SetupDeleteErrorW(HWND,PCWSTR,PCWSTR,UINT,DWORD);
+WINSETUPAPI BOOL WINAPI SetupDestroyDiskSpaceList(HDSKSPC);
+WINSETUPAPI BOOL WINAPI SetupDiAskForOEMDisk(HDEVINFO,PSP_DEVINFO_DATA);
+WINSETUPAPI BOOL WINAPI SetupDiBuildClassInfoList(DWORD,LPGUID,DWORD,PDWORD);
+WINSETUPAPI BOOL WINAPI SetupDiBuildClassInfoListExA(DWORD,LPGUID,DWORD,PDWORD,PCSTR,PVOID);
+WINSETUPAPI BOOL WINAPI SetupDiBuildClassInfoListExW(DWORD,LPGUID,DWORD,PDWORD,PCWSTR,PVOID);
+WINSETUPAPI BOOL WINAPI SetupDiBuildDriverInfoList(HDEVINFO,PSP_DEVINFO_DATA,DWORD);
+WINSETUPAPI BOOL WINAPI SetupDiCallClassInstaller(DI_FUNCTION,HDEVINFO,PSP_DEVINFO_DATA);
+WINSETUPAPI BOOL WINAPI SetupDiCancelDriverInfoSearch(HDEVINFO);
+WINSETUPAPI BOOL WINAPI SetupDiChangeState(HDEVINFO,PSP_DEVINFO_DATA);
+WINSETUPAPI BOOL WINAPI SetupDiClassGuidsFromNameA(PCSTR,LPGUID,DWORD,PDWORD);
+WINSETUPAPI BOOL WINAPI SetupDiClassGuidsFromNameW(PCWSTR,LPGUID,DWORD,PDWORD);
+WINSETUPAPI BOOL WINAPI SetupDiClassGuidsFromNameExA(PCSTR,LPGUID,DWORD,PDWORD,PCSTR,PVOID);
+WINSETUPAPI BOOL WINAPI SetupDiClassGuidsFromNameExW(PCWSTR,LPGUID,DWORD,PDWORD,PCWSTR,PVOID);
+WINSETUPAPI BOOL WINAPI SetupDiClassNameFromGuidA(CONST GUID*,PSTR,DWORD,PDWORD);
+WINSETUPAPI BOOL WINAPI SetupDiClassNameFromGuidW(CONST GUID*,PWSTR,DWORD,PDWORD);
+WINSETUPAPI BOOL WINAPI SetupDiClassNameFromGuidExA(CONST GUID*,PSTR,DWORD,PDWORD,PCSTR,PVOID);
+WINSETUPAPI BOOL WINAPI SetupDiClassNameFromGuidExW(CONST GUID*,PWSTR,DWORD,PDWORD,PCWSTR,PVOID);
+WINSETUPAPI BOOL WINAPI SetupDiCreateDeviceInfoA(HDEVINFO,PCSTR,CONST GUID*,PCSTR,HWND,DWORD,PSP_DEVINFO_DATA);
+WINSETUPAPI BOOL WINAPI SetupDiCreateDeviceInfoW(HDEVINFO,PCWSTR,CONST GUID*,PCWSTR,HWND,DWORD,PSP_DEVINFO_DATA);
+WINSETUPAPI HDEVINFO WINAPI SetupDiCreateDeviceInfoList(CONST GUID*,HWND);
+WINSETUPAPI HDEVINFO WINAPI SetupDiCreateDeviceInfoListExA(CONST GUID*,HWND,PCSTR,PVOID);
+WINSETUPAPI HDEVINFO WINAPI SetupDiCreateDeviceInfoListExW(CONST GUID*,HWND,PCWSTR,PVOID);
+WINSETUPAPI BOOL WINAPI SetupDiCreateDeviceInterfaceA(HDEVINFO,PSP_DEVINFO_DATA,CONST GUID*,PCSTR,DWORD,PSP_DEVICE_INTERFACE_DATA);
+WINSETUPAPI BOOL WINAPI SetupDiCreateDeviceInterfaceW(HDEVINFO,PSP_DEVINFO_DATA,CONST GUID*,PCWSTR,DWORD,PSP_DEVICE_INTERFACE_DATA);
+WINSETUPAPI HKEY WINAPI SetupDiCreateDeviceInterfaceRegKeyA(HDEVINFO,PSP_DEVICE_INTERFACE_DATA,DWORD,REGSAM,HINF,PCSTR);
+WINSETUPAPI HKEY WINAPI SetupDiCreateDeviceInterfaceRegKeyW(HDEVINFO,PSP_DEVICE_INTERFACE_DATA,DWORD,REGSAM,HINF,PCWSTR);
+WINSETUPAPI HKEY WINAPI SetupDiCreateDevRegKeyA(HDEVINFO,PSP_DEVINFO_DATA,DWORD,DWORD,DWORD,HINF,PCSTR);
+WINSETUPAPI HKEY WINAPI SetupDiCreateDevRegKeyW(HDEVINFO,PSP_DEVINFO_DATA,DWORD,DWORD,DWORD,HINF,PCWSTR);
+WINSETUPAPI BOOL WINAPI SetupDiDeleteDeviceInfo(HDEVINFO,PSP_DEVINFO_DATA);
+WINSETUPAPI BOOL WINAPI SetupDiDeleteDeviceInterfaceData(HDEVINFO,PSP_DEVICE_INTERFACE_DATA);
+WINSETUPAPI BOOL WINAPI SetupDiDeleteDeviceInterfaceRegKey(HDEVINFO,PSP_DEVICE_INTERFACE_DATA,DWORD);
+WINSETUPAPI BOOL WINAPI SetupDiDeleteDevRegKey(HDEVINFO,PSP_DEVINFO_DATA,DWORD,DWORD,DWORD);
+WINSETUPAPI BOOL WINAPI SetupDiDestroyClassImageList(PSP_CLASSIMAGELIST_DATA);
+WINSETUPAPI BOOL WINAPI SetupDiDestroyDeviceInfoList(HDEVINFO);
+WINSETUPAPI BOOL WINAPI SetupDiDestroyDriverInfoList(HDEVINFO,PSP_DEVINFO_DATA,DWORD);
+WINSETUPAPI INT WINAPI SetupDiDrawMiniIcon(HDC,RECT,INT,DWORD);
+WINSETUPAPI BOOL WINAPI SetupDiEnumDeviceInfo(HDEVINFO,DWORD,PSP_DEVINFO_DATA);
+WINSETUPAPI BOOL WINAPI SetupDiEnumDeviceInterfaces(HDEVINFO,PSP_DEVINFO_DATA,CONST GUID*,DWORD,PSP_DEVICE_INTERFACE_DATA);
+WINSETUPAPI BOOL WINAPI SetupDiEnumDriverInfoA(HDEVINFO,PSP_DEVINFO_DATA,DWORD,DWORD,PSP_DRVINFO_DATA_A);
+WINSETUPAPI BOOL WINAPI SetupDiEnumDriverInfoW(HDEVINFO,PSP_DEVINFO_DATA,DWORD,DWORD,PSP_DRVINFO_DATA_W);
+WINSETUPAPI BOOL WINAPI SetupDiGetActualSectionToInstallA(HINF,PCSTR,PSTR,DWORD,PDWORD,PSTR*);
+WINSETUPAPI BOOL WINAPI SetupDiGetActualSectionToInstallW(HINF,PCWSTR,PWSTR,DWORD,PDWORD,PWSTR*);
+WINSETUPAPI BOOL WINAPI SetupDiGetClassBitmapIndex(CONST GUID*,PINT);
+WINSETUPAPI BOOL WINAPI SetupDiGetClassDescriptionA(CONST GUID*,PSTR,DWORD,PDWORD);
+WINSETUPAPI BOOL WINAPI SetupDiGetClassDescriptionW(CONST GUID*,PWSTR,DWORD,PDWORD);
+WINSETUPAPI BOOL WINAPI SetupDiGetClassDescriptionExA(CONST GUID*,PSTR,DWORD,PDWORD,PCSTR,PVOID);
+WINSETUPAPI BOOL WINAPI SetupDiGetClassDescriptionExW(CONST GUID*,PWSTR,DWORD,PDWORD,PCWSTR,PVOID);
+WINSETUPAPI BOOL WINAPI SetupDiGetClassDevPropertySheetsA(HDEVINFO,PSP_DEVINFO_DATA,LPPROPSHEETHEADERA,DWORD,PDWORD,DWORD);
+WINSETUPAPI BOOL WINAPI SetupDiGetClassDevPropertySheetsW(HDEVINFO,PSP_DEVINFO_DATA,LPPROPSHEETHEADERW,DWORD,PDWORD,DWORD);
+WINSETUPAPI HDEVINFO WINAPI SetupDiGetClassDevsA(CONST GUID*,PCSTR,HWND,DWORD);
+WINSETUPAPI HDEVINFO WINAPI SetupDiGetClassDevsW(CONST GUID*,PCWSTR,HWND,DWORD);
+WINSETUPAPI HDEVINFO WINAPI SetupDiGetClassDevsExA(CONST GUID*,PCSTR,HWND,DWORD,HDEVINFO,PCSTR,PVOID);
+WINSETUPAPI HDEVINFO WINAPI SetupDiGetClassDevsExW(CONST GUID*,PCWSTR,HWND,DWORD,HDEVINFO,PCWSTR,PVOID);
+WINSETUPAPI BOOL WINAPI SetupDiGetClassImageIndex(PSP_CLASSIMAGELIST_DATA,CONST GUID*,PINT);
+WINSETUPAPI BOOL WINAPI SetupDiGetClassImageList(PSP_CLASSIMAGELIST_DATA);
+WINSETUPAPI BOOL WINAPI SetupDiGetClassImageListExA(PSP_CLASSIMAGELIST_DATA,PCSTR,PVOID);
+WINSETUPAPI BOOL WINAPI SetupDiGetClassImageListExW(PSP_CLASSIMAGELIST_DATA,PCWSTR,PVOID);
+WINSETUPAPI BOOL WINAPI SetupDiGetClassInstallParamsA(HDEVINFO,PSP_DEVINFO_DATA,PSP_CLASSINSTALL_HEADER,DWORD,PDWORD);
+WINSETUPAPI BOOL WINAPI SetupDiGetClassInstallParamsW(HDEVINFO,PSP_DEVINFO_DATA,PSP_CLASSINSTALL_HEADER,DWORD,PDWORD);
+WINSETUPAPI BOOL WINAPI SetupDiGetClassRegistryPropertyA(LPGUID,DWORD,PDWORD,PBYTE,DWORD,PDWORD,PCSTR,PVOID);
+WINSETUPAPI BOOL WINAPI SetupDiGetClassRegistryPropertyW(LPGUID,DWORD,PDWORD,PBYTE,DWORD,PDWORD,PCWSTR,PVOID);
+WINSETUPAPI BOOL WINAPI SetupDiGetDeviceInfoListClass(HDEVINFO,LPGUID);
+WINSETUPAPI BOOL WINAPI SetupDiGetDeviceInfoListDetailA(HDEVINFO,PSP_DEVINFO_LIST_DETAIL_DATA_A);
+WINSETUPAPI BOOL WINAPI SetupDiGetDeviceInfoListDetailW(HDEVINFO,PSP_DEVINFO_LIST_DETAIL_DATA_W);
+WINSETUPAPI BOOL WINAPI SetupDiGetDeviceInstallParamsA(HDEVINFO,PSP_DEVINFO_DATA,PSP_DEVINSTALL_PARAMS_A);
+WINSETUPAPI BOOL WINAPI SetupDiGetDeviceInstallParamsW(HDEVINFO,PSP_DEVINFO_DATA,PSP_DEVINSTALL_PARAMS_W);
+WINSETUPAPI BOOL WINAPI SetupDiGetDeviceInstanceIdA(HDEVINFO,PSP_DEVINFO_DATA,PSTR,DWORD,PDWORD);
+WINSETUPAPI BOOL WINAPI SetupDiGetDeviceInstanceIdW(HDEVINFO,PSP_DEVINFO_DATA,PWSTR,DWORD,PDWORD);
+WINSETUPAPI BOOL WINAPI SetupDiGetDeviceInterfaceAlias(HDEVINFO,PSP_DEVICE_INTERFACE_DATA,CONST GUID*,PSP_DEVICE_INTERFACE_DATA);
+WINSETUPAPI BOOL WINAPI SetupDiGetDeviceInterfaceDetailA(HDEVINFO,PSP_DEVICE_INTERFACE_DATA,PSP_DEVICE_INTERFACE_DETAIL_DATA_A,DWORD,PDWORD,PSP_DEVINFO_DATA);
+WINSETUPAPI BOOL WINAPI SetupDiGetDeviceInterfaceDetailW(HDEVINFO,PSP_DEVICE_INTERFACE_DATA,PSP_DEVICE_INTERFACE_DETAIL_DATA_W,DWORD,PDWORD,PSP_DEVINFO_DATA);
+WINSETUPAPI BOOL WINAPI SetupDiGetDeviceRegistryPropertyA(HDEVINFO,PSP_DEVINFO_DATA,DWORD,PDWORD,PBYTE,DWORD,PDWORD);
+WINSETUPAPI BOOL WINAPI SetupDiGetDeviceRegistryPropertyW(HDEVINFO,PSP_DEVINFO_DATA,DWORD,PDWORD,PBYTE,DWORD,PDWORD);
+WINSETUPAPI BOOL WINAPI SetupDiGetDriverInfoDetailA(HDEVINFO,PSP_DEVINFO_DATA,PSP_DRVINFO_DATA_A,PSP_DRVINFO_DETAIL_DATA_A,DWORD,PDWORD);
+WINSETUPAPI BOOL WINAPI SetupDiGetDriverInfoDetailW(HDEVINFO,PSP_DEVINFO_DATA,PSP_DRVINFO_DATA_W,PSP_DRVINFO_DETAIL_DATA_W,DWORD,PDWORD);
+WINSETUPAPI BOOL WINAPI SetupDiGetDriverInstallParamsA(HDEVINFO,PSP_DEVINFO_DATA,PSP_DRVINFO_DATA_A,PSP_DRVINSTALL_PARAMS);
+WINSETUPAPI BOOL WINAPI SetupDiGetDriverInstallParamsW(HDEVINFO,PSP_DEVINFO_DATA,PSP_DRVINFO_DATA_W,PSP_DRVINSTALL_PARAMS);
+WINSETUPAPI BOOL WINAPI SetupDiGetHwProfileFriendlyNameA(DWORD,PSTR,DWORD,PDWORD);
+WINSETUPAPI BOOL WINAPI SetupDiGetHwProfileFriendlyNameExA(DWORD,PSTR,DWORD,PDWORD,PCSTR,PVOID);
+WINSETUPAPI BOOL WINAPI SetupDiGetHwProfileFriendlyNameExW(DWORD,PWSTR,DWORD,PDWORD,PCWSTR,PVOID);
+WINSETUPAPI BOOL WINAPI SetupDiGetHwProfileFriendlyNameW(DWORD,PWSTR,DWORD,PDWORD);
+WINSETUPAPI BOOL WINAPI SetupDiGetHwProfileList(PDWORD,DWORD,PDWORD,PDWORD);
+WINSETUPAPI BOOL WINAPI SetupDiGetHwProfileListExA(PDWORD,DWORD,PDWORD,PDWORD,PCSTR,PVOID);
+WINSETUPAPI BOOL WINAPI SetupDiGetHwProfileListExW(PDWORD,DWORD,PDWORD,PDWORD,PCWSTR,PVOID);
+WINSETUPAPI BOOL WINAPI SetupDiGetINFClassA(PCSTR,LPGUID,PSTR,DWORD,PDWORD);
+WINSETUPAPI BOOL WINAPI SetupDiGetINFClassW(PCWSTR,LPGUID,PWSTR,DWORD,PDWORD);
+WINSETUPAPI BOOL WINAPI SetupDiGetSelectedDevice(HDEVINFO,PSP_DEVINFO_DATA);
+WINSETUPAPI BOOL WINAPI SetupDiGetSelectedDriverA(HDEVINFO,PSP_DEVINFO_DATA,PSP_DRVINFO_DATA_A);
+WINSETUPAPI BOOL WINAPI SetupDiGetSelectedDriverW(HDEVINFO,PSP_DEVINFO_DATA,PSP_DRVINFO_DATA_W);
+WINSETUPAPI HPROPSHEETPAGE WINAPI SetupDiGetWizardage(HDEVINFO,PSP_DEVINFO_DATA,PSP_INSTALLWIZARD_DATA,DWORD,DWORD);
+WINSETUPAPI BOOL WINAPI SetupDiInstallClassA(HWND,PCSTR,DWORD,HSPFILEQ);
+WINSETUPAPI BOOL WINAPI SetupDiInstallClassW(HWND,PCWSTR,DWORD,HSPFILEQ);
+WINSETUPAPI BOOL WINAPI SetupDiInstallClassExA(HWND,PCSTR,DWORD,HSPFILEQ,CONST GUID*,PVOID,PVOID);
+WINSETUPAPI BOOL WINAPI SetupDiInstallClassExW(HWND,PCWSTR,DWORD,HSPFILEQ,CONST GUID*,PVOID,PVOID);
+WINSETUPAPI BOOL WINAPI SetupDiInstallDevice(HDEVINFO,PSP_DEVINFO_DATA);
+WINSETUPAPI BOOL WINAPI SetupDiInstallDeviceInterfaces(HDEVINFO,PSP_DEVINFO_DATA);
+WINSETUPAPI BOOL WINAPI SetupDiInstallDriverFiles(HDEVINFO,PSP_DEVINFO_DATA);
+WINSETUPAPI BOOL WINAPI SetupDiLoadClassIcon(CONST GUID*,HICON*,PINT);
+WINSETUPAPI BOOL WINAPI SetupDiMoveDuplicateDevice(HDEVINFO,PSP_DEVINFO_DATA);
+WINSETUPAPI HKEY WINAPI SetupDiOpenClassRegKey(CONST GUID*,REGSAM);
+WINSETUPAPI HKEY WINAPI SetupDiOpenClassRegKeyExA(CONST GUID*,REGSAM,DWORD,PCSTR,PVOID);
+WINSETUPAPI HKEY WINAPI SetupDiOpenClassRegKeyExW(CONST GUID*,REGSAM,DWORD,PCWSTR,PVOID);
+WINSETUPAPI BOOL WINAPI SetupDiOpenDeviceInfoA(HDEVINFO,PCSTR,HWND,DWORD,PSP_DEVINFO_DATA);
+WINSETUPAPI BOOL WINAPI SetupDiOpenDeviceInfoW(HDEVINFO,PCWSTR,HWND,DWORD,PSP_DEVINFO_DATA);
+WINSETUPAPI BOOL WINAPI SetupDiOpenDeviceInterfaceA(HDEVINFO,PCSTR,DWORD,PSP_DEVICE_INTERFACE_DATA);
+WINSETUPAPI BOOL WINAPI SetupDiOpenDeviceInterfaceW(HDEVINFO,PCWSTR,DWORD,PSP_DEVICE_INTERFACE_DATA);
+WINSETUPAPI HKEY WINAPI SetupDiOpenDeviceInterfaceRegKey(HDEVINFO,PSP_DEVICE_INTERFACE_DATA,DWORD,REGSAM);
+WINSETUPAPI HKEY WINAPI SetupDiOpenDevRegKey(HDEVINFO,PSP_DEVINFO_DATA,DWORD,DWORD,DWORD,REGSAM);
+WINSETUPAPI BOOL WINAPI SetupDiRegisterCoDeviceInstallers(HDEVINFO,PSP_DEVINFO_DATA);
+WINSETUPAPI BOOL WINAPI SetupDiRegisterDeviceInfo(HDEVINFO,PSP_DEVINFO_DATA,DWORD,PSP_DETSIG_CMPPROC,PVOID,PSP_DEVINFO_DATA);
+WINSETUPAPI BOOL WINAPI SetupDiRemoveDevice(HDEVINFO,PSP_DEVINFO_DATA);
+WINSETUPAPI BOOL WINAPI SetupDiRemoveDeviceInterface(HDEVINFO,PSP_DEVICE_INTERFACE_DATA);
+WINSETUPAPI BOOL WINAPI SetupDiSelectBestCompatDrv(HDEVINFO,PSP_DEVINFO_DATA);
+WINSETUPAPI BOOL WINAPI SetupDiSelectDevice(HDEVINFO,PSP_DEVINFO_DATA);
+WINSETUPAPI BOOL WINAPI SetupDiSelectOEMDrv(HWND,HDEVINFO,PSP_DEVINFO_DATA);
+WINSETUPAPI BOOL WINAPI SetupDiSetClassInstallParamsA(HDEVINFO,PSP_DEVINFO_DATA,PSP_CLASSINSTALL_HEADER,DWORD);
+WINSETUPAPI BOOL WINAPI SetupDiSetClassInstallParamsW(HDEVINFO,PSP_DEVINFO_DATA,PSP_CLASSINSTALL_HEADER,DWORD);
+WINSETUPAPI BOOL WINAPI SetupDiSetClassRegistryPropertyA(LPGUID,DWORD,CONST BYTE*,DWORD,PCSTR,PVOID);
+WINSETUPAPI BOOL WINAPI SetupDiSetClassRegistryPropertyW(LPGUID,DWORD,CONST BYTE*,DWORD,PCWSTR,PVOID);
+WINSETUPAPI BOOL WINAPI SetupDiSetDeviceInstallParamsA(HDEVINFO,PSP_DEVINFO_DATA,PSP_DEVINSTALL_PARAMS_A);
+WINSETUPAPI BOOL WINAPI SetupDiSetDeviceInstallParamsW(HDEVINFO,PSP_DEVINFO_DATA,PSP_DEVINSTALL_PARAMS_W);
+WINSETUPAPI BOOL WINAPI SetupDiSetDeviceRegistryPropertyA(HDEVINFO,PSP_DEVINFO_DATA,DWORD,CONST BYTE*,DWORD);
+WINSETUPAPI BOOL WINAPI SetupDiSetDeviceRegistryPropertyW(HDEVINFO,PSP_DEVINFO_DATA,DWORD,CONST BYTE*,DWORD);
+WINSETUPAPI BOOL WINAPI SetupDiSetDriverInstallParamsA(HDEVINFO,PSP_DEVINFO_DATA,PSP_DRVINFO_DATA_A,PSP_DRVINSTALL_PARAMS);
+WINSETUPAPI BOOL WINAPI SetupDiSetDriverInstallParamsW(HDEVINFO,PSP_DEVINFO_DATA,PSP_DRVINFO_DATA_W,PSP_DRVINSTALL_PARAMS);
+WINSETUPAPI BOOL WINAPI SetupDiSetSelectedDevice(HDEVINFO,PSP_DEVINFO_DATA);
+WINSETUPAPI BOOL WINAPI SetupDiSetSelectedDriverA(HDEVINFO,PSP_DEVINFO_DATA,PSP_DRVINFO_DATA_A);
+WINSETUPAPI BOOL WINAPI SetupDiSetSelectedDriverW(HDEVINFO,PSP_DEVINFO_DATA,PSP_DRVINFO_DATA_W);
+WINSETUPAPI BOOL WINAPI SetupDiUnremoveDevice(HDEVINFO,PSP_DEVINFO_DATA);
+WINSETUPAPI HDSKSPC WINAPI SetupDuplicateDiskSpaceListA(HDSKSPC,PVOID,DWORD,UINT);
+WINSETUPAPI HDSKSPC WINAPI SetupDuplicateDiskSpaceListW(HDSKSPC,PVOID,DWORD,UINT);
+WINSETUPAPI BOOL WINAPI SetupFindFirstLineA(HINF,PCSTR,PCSTR,PINFCONTEXT);
+WINSETUPAPI BOOL WINAPI SetupFindFirstLineW(HINF,PCWSTR,PCWSTR,PINFCONTEXT);
+WINSETUPAPI BOOL WINAPI SetupFindNextLine(PINFCONTEXT,PINFCONTEXT);
+WINSETUPAPI BOOL WINAPI SetupFindNextMatchLineA(PINFCONTEXT,PCSTR,PINFCONTEXT);
+WINSETUPAPI BOOL WINAPI SetupFindNextMatchLineW(PINFCONTEXT,PCWSTR,PINFCONTEXT);
+WINSETUPAPI BOOL WINAPI SetupFreeA(PCSTR**,UINT);
+WINSETUPAPI BOOL WINAPI SetupFreeW(PCWSTR**,UINT);
+WINSETUPAPI BOOL WINAPI SetupGetBackupInformationA(HSPFILEQ,PSP_BACKUP_QUEUE_PARAMS_A);
+WINSETUPAPI BOOL WINAPI SetupGetBackupInformationW(HSPFILEQ,PSP_BACKUP_QUEUE_PARAMS_W);
+WINSETUPAPI BOOL WINAPI SetupGetBinaryField(PINFCONTEXT,DWORD,PBYTE,DWORD,LPDWORD);
+WINSETUPAPI DWORD WINAPI SetupGetFieldCount(PINFCONTEXT);
+WINSETUPAPI DWORD WINAPI SetupGetFileCompressionInfoA(PCSTR,PSTR*,PDWORD,PDWORD,PUINT);
+WINSETUPAPI DWORD WINAPI SetupGetFileCompressionInfoW(PCWSTR,PWSTR*,PDWORD,PDWORD,PUINT);
+WINSETUPAPI BOOL WINAPI SetupGetInfFileListA(PCSTR,DWORD,PSTR,DWORD,PDWORD);
+WINSETUPAPI BOOL WINAPI SetupGetInfFileListW(PCWSTR,DWORD,PWSTR,DWORD,PDWORD);
+WINSETUPAPI BOOL WINAPI SetupGetInfInformationA(LPCVOID,DWORD,PSP_INF_INFORMATION,DWORD,PDWORD);
+WINSETUPAPI BOOL WINAPI SetupGetInfInformationW(LPCVOID,DWORD,PSP_INF_INFORMATION,DWORD,PDWORD);
+WINSETUPAPI BOOL WINAPI SetupGetIntField(PINFCONTEXT,DWORD,PINT);
+WINSETUPAPI BOOL WINAPI SetupGetLineByIndexA(HINF,PCSTR,DWORD,PINFCONTEXT);
+WINSETUPAPI BOOL WINAPI SetupGetLineByIndexW(HINF,PCWSTR,DWORD,PINFCONTEXT);
+WINSETUPAPI LONG WINAPI SetupGetLineCountA(HINF,PCSTR);
+WINSETUPAPI LONG WINAPI SetupGetLineCountW(HINF,PCWSTR);
+WINSETUPAPI BOOL WINAPI SetupGetLineTextA(PINFCONTEXT,HINF,PCSTR,PCSTR,PSTR,DWORD,PDWORD);
+WINSETUPAPI BOOL WINAPI SetupGetLineTextW(PINFCONTEXT,HINF,PCWSTR,PCWSTR,PWSTR,DWORD,PDWORD);
+WINSETUPAPI BOOL WINAPI SetupGetMultiSzFieldA(PINFCONTEXT,DWORD,PSTR,DWORD,LPDWORD);
+WINSETUPAPI BOOL WINAPI SetupGetMultiSzFieldW(PINFCONTEXT,DWORD,PWSTR,DWORD,LPDWORD);
+WINSETUPAPI BOOL WINAPI SetupGetSourceFileLocationA(HINF,PINFCONTEXT,PCSTR,PUINT,PSTR,DWORD,PDWORD);
+WINSETUPAPI BOOL WINAPI SetupGetSourceFileLocationW(HINF,PINFCONTEXT,PCWSTR,PUINT,PWSTR,DWORD,PDWORD);
+WINSETUPAPI BOOL WINAPI SetupGetSourceFileSizeA(HINF,PINFCONTEXT,PCSTR,PCSTR,PDWORD,UINT);
+WINSETUPAPI BOOL WINAPI SetupGetSourceFileSizeW(HINF,PINFCONTEXT,PCWSTR,PCWSTR,PDWORD,UINT);
+WINSETUPAPI BOOL WINAPI SetupGetSourceInfoA(HINF,UINT,UINT,PSTR,DWORD,PDWORD);
+WINSETUPAPI BOOL WINAPI SetupGetSourceInfoW(HINF,UINT,UINT,PWSTR,DWORD,PDWORD);
+WINSETUPAPI BOOL WINAPI SetupGetStringFieldA(PINFCONTEXT,DWORD,PSTR,DWORD,PDWORD);
+WINSETUPAPI BOOL WINAPI SetupGetStringFieldW(PINFCONTEXT,DWORD,PWSTR,DWORD,PDWORD);
+WINSETUPAPI BOOL WINAPI SetupGetTargetPathA(HINF,PINFCONTEXT,PCSTR,PSTR,DWORD,PDWORD);
+WINSETUPAPI BOOL WINAPI SetupGetTargetPathW(HINF,PINFCONTEXT,PCWSTR,PWSTR,DWORD,PDWORD);
+WINSETUPAPI PVOID WINAPI SetupInitDefaultQueueCallback(HWND);
+WINSETUPAPI PVOID WINAPI SetupInitDefaultQueueCallbackEx(HWND,HWND,UINT,DWORD,PVOID);
+WINSETUPAPI HSPFILELOG WINAPI SetupInitializeFileLogA(PCSTR,DWORD);
+WINSETUPAPI HSPFILELOG WINAPI SetupInitializeFileLogW(PCWSTR,DWORD);
+WINSETUPAPI BOOL WINAPI SetupInstallFileA(HINF,PINFCONTEXT,PCSTR,PCSTR,PCSTR,DWORD,PSP_FILE_CALLBACK_A,PVOID);
+WINSETUPAPI BOOL WINAPI SetupInstallFileW(HINF,PINFCONTEXT,PCWSTR,PCWSTR,PCWSTR,DWORD,PSP_FILE_CALLBACK_W,PVOID);
+WINSETUPAPI BOOL WINAPI SetupInstallFileExA(HINF,PINFCONTEXT,PCSTR,PCSTR,PCSTR,DWORD,PSP_FILE_CALLBACK_A,PVOID,PBOOL);
+WINSETUPAPI BOOL WINAPI SetupInstallFileExW(HINF,PINFCONTEXT,PCWSTR,PCWSTR,PCWSTR,DWORD,PSP_FILE_CALLBACK_W,PVOID,PBOOL);
+WINSETUPAPI BOOL WINAPI SetupInstallFilesFromInfSectionA(HINF,HINF,HSPFILEQ,PCSTR,PCSTR,UINT);
+WINSETUPAPI BOOL WINAPI SetupInstallFilesFromInfSectionW(HINF,HINF,HSPFILEQ,PCWSTR,PCWSTR,UINT);
+WINSETUPAPI BOOL WINAPI SetupInstallFromInfSectionA(HWND,HINF,PCSTR,UINT,HKEY,PCSTR,UINT,PSP_FILE_CALLBACK_A,PVOID,HDEVINFO,PSP_DEVINFO_DATA);
+WINSETUPAPI BOOL WINAPI SetupInstallFromInfSectionW(HWND,HINF,PCWSTR,UINT,HKEY,PCWSTR,UINT,PSP_FILE_CALLBACK_W,PVOID,HDEVINFO,PSP_DEVINFO_DATA);
+WINSETUPAPI BOOL WINAPI SetupInstallServicesFromInfSectionA(HINF,PCSTR,DWORD);
+WINSETUPAPI BOOL WINAPI SetupInstallServicesFromInfSectionW(HINF,PCWSTR,DWORD);
+WINSETUPAPI BOOL WINAPI SetupInstallServicesFromInfSectionExA(HINF,PCSTR,DWORD,HDEVINFO,PSP_DEVINFO_DATA,PVOID,PVOID);
+WINSETUPAPI BOOL WINAPI SetupInstallServicesFromInfSectionExW(HINF,PCWSTR,DWORD,HDEVINFO,PSP_DEVINFO_DATA,PVOID,PVOID);
+WINSETUPAPI BOOL WINAPI SetupIterateCabinetA(PCSTR,DWORD,PSP_FILE_CALLBACK_A,PVOID);
+WINSETUPAPI BOOL WINAPI SetupIterateCabinetW(PCWSTR,DWORD,PSP_FILE_CALLBACK_W,PVOID);
+WINSETUPAPI BOOL WINAPI SetupLogErrorA(LPCSTR,LogSeverity);
+WINSETUPAPI BOOL WINAPI SetupLogErrorW(LPCWSTR,LogSeverity);
+WINSETUPAPI BOOL WINAPI SetupLogFileA(HSPFILELOG,PCSTR,PCSTR,PCSTR,DWORD,PCSTR,PCSTR,PCSTR,DWORD);
+WINSETUPAPI BOOL WINAPI SetupLogFileW(HSPFILELOG,PCWSTR,PCWSTR,PCWSTR,DWORD,PCWSTR,PCWSTR,PCWSTR,DWORD);
+WINSETUPAPI BOOL WINAPI SetupOpenAppendInfFileA(PCSTR,HINF,PUINT);
+WINSETUPAPI BOOL WINAPI SetupOpenAppendInfFileW(PCWSTR,HINF,PUINT);
+WINSETUPAPI HSPFILEQ WINAPI SetupOpenFileQueue(VOID);
+WINSETUPAPI HINF WINAPI SetupOpenInfFileA(PCSTR,PCSTR,DWORD,PUINT);
+WINSETUPAPI HINF WINAPI SetupOpenInfFileW(PCWSTR,PCWSTR,DWORD,PUINT);
+WINSETUPAPI BOOL WINAPI SetupOpenLog(BOOL);
+WINSETUPAPI HINF WINAPI SetupOpenMasterInf(VOID);
+WINSETUPAPI UINT WINAPI SetupPromptForDiskA(HWND,PCSTR,PCSTR,PCSTR,PCSTR,PCSTR,DWORD,PSTR,DWORD,PDWORD);
+WINSETUPAPI UINT WINAPI SetupPromptForDiskW(HWND,PCWSTR,PCWSTR,PCWSTR,PCWSTR,PCWSTR,DWORD,PWSTR,DWORD,PDWORD);
+WINSETUPAPI INT WINAPI SetupPromptReboot(HSPFILEQ,HWND,BOOL);
+WINSETUPAPI BOOL WINAPI SetupQueryA(DWORD,PCSTR**,PUINT);
+WINSETUPAPI BOOL WINAPI SetupQueryW(DWORD,PCWSTR**,PUINT);
+WINSETUPAPI BOOL WINAPI SetupQueryDrivesInDiskSpaceListA(HDSKSPC,PSTR,DWORD,PDWORD);
+WINSETUPAPI BOOL WINAPI SetupQueryDrivesInDiskSpaceListW(HDSKSPC,PWSTR,DWORD,PDWORD);
+WINSETUPAPI BOOL WINAPI SetupQueryFileLogA(HSPFILELOG,PCSTR,PCSTR,SetupFileLogInfo,PSTR,DWORD,PDWORD);
+WINSETUPAPI BOOL WINAPI SetupQueryFileLogW(HSPFILELOG,PCWSTR,PCWSTR,SetupFileLogInfo,PWSTR,DWORD,PDWORD);
+WINSETUPAPI BOOL WINAPI SetupQueryInfFileInformationA(PSP_INF_INFORMATION,UINT,PSTR,DWORD,PDWORD);
+WINSETUPAPI BOOL WINAPI SetupQueryInfFileInformationW(PSP_INF_INFORMATION,UINT,PWSTR,DWORD,PDWORD);
+WINSETUPAPI BOOL WINAPI SetupQueryInfOriginalFileInformationA(PSP_INF_INFORMATION,UINT,PSP_ALTPLATFORM_INFO,PSP_ORIGINAL_FILE_INFO_A);
+WINSETUPAPI BOOL WINAPI SetupQueryInfOriginalFileInformationW(PSP_INF_INFORMATION,UINT,PSP_ALTPLATFORM_INFO,PSP_ORIGINAL_FILE_INFO_W);
+WINSETUPAPI BOOL WINAPI SetupQueryInfVersionInformationA(PSP_INF_INFORMATION,UINT,PSTR,PSTR,DWORD,PDWORD);
+WINSETUPAPI BOOL WINAPI SetupQueryInfVersionInformationW(PSP_INF_INFORMATION,UINT,PCWSTR,PWSTR,DWORD,PDWORD);
+WINSETUPAPI BOOL WINAPI SetupQuerySpaceRequiredOnDriveA(HDSKSPC,PCSTR,LONGLONG*,PVOID,UINT);
+WINSETUPAPI BOOL WINAPI SetupQuerySpaceRequiredOnDriveW(HDSKSPC,PCWSTR,LONGLONG*,PVOID,UINT);
+WINSETUPAPI BOOL WINAPI SetupQueueCopyA(HSPFILEQ,PCSTR,PCSTR,PCSTR,PCSTR,PCSTR,PCSTR,PCSTR,DWORD);
+WINSETUPAPI BOOL WINAPI SetupQueueCopyW(HSPFILEQ,PCWSTR,PCWSTR,PCWSTR,PCWSTR,PCWSTR,PCWSTR,PCWSTR,DWORD);
+WINSETUPAPI BOOL WINAPI SetupQueueCopyIndirectA(PSP_FILE_COPY_PARAMS_A);
+WINSETUPAPI BOOL WINAPI SetupQueueCopyIndirectW(PSP_FILE_COPY_PARAMS_W);
+WINSETUPAPI BOOL WINAPI SetupQueueCopySectionA(HSPFILEQ,PCSTR,HINF,HINF,PCSTR,DWORD);
+WINSETUPAPI BOOL WINAPI SetupQueueCopySectionW(HSPFILEQ,PCWSTR,HINF,HINF,PCWSTR,DWORD);
+WINSETUPAPI BOOL WINAPI SetupQueueDefaultCopyA(HSPFILEQ,HINF,PCSTR,PCSTR,PCSTR,DWORD);
+WINSETUPAPI BOOL WINAPI SetupQueueDefaultCopyW(HSPFILEQ,HINF,PCWSTR,PCWSTR,PCWSTR,DWORD);
+WINSETUPAPI BOOL WINAPI SetupQueueDeleteA(HSPFILEQ,PCSTR,PCSTR);
+WINSETUPAPI BOOL WINAPI SetupQueueDeleteW(HSPFILEQ,PCWSTR,PCWSTR);
+WINSETUPAPI BOOL WINAPI SetupQueueDeleteSectionA(HSPFILEQ,HINF,HINF,PCSTR);
+WINSETUPAPI BOOL WINAPI SetupQueueDeleteSectionW(HSPFILEQ,HINF,HINF,PCWSTR);
+WINSETUPAPI BOOL WINAPI SetupQueueRenameA(HSPFILEQ,PCSTR,PCSTR,PCSTR,PCSTR);
+WINSETUPAPI BOOL WINAPI SetupQueueRenameW(HSPFILEQ,PCWSTR,PCWSTR,PCWSTR,PCWSTR);
+WINSETUPAPI BOOL WINAPI SetupQueueRenameSectionA(HSPFILEQ,HINF,HINF,PCSTR);
+WINSETUPAPI BOOL WINAPI SetupQueueRenameSectionW(HSPFILEQ,HINF,HINF,PCWSTR);
+WINSETUPAPI BOOL WINAPI SetupRemoveFileLogEntryA(HSPFILELOG,PCSTR,PCSTR);
+WINSETUPAPI BOOL WINAPI SetupRemoveFileLogEntryW(HSPFILELOG,PCWSTR,PCWSTR);
+WINSETUPAPI BOOL WINAPI SetupRemoveFromDiskSpaceListA(HDSKSPC,PCSTR,UINT,PVOID,UINT);
+WINSETUPAPI BOOL WINAPI SetupRemoveFromDiskSpaceListW(HDSKSPC,PCWSTR,UINT,PVOID,UINT);
+WINSETUPAPI BOOL WINAPI SetupRemoveFromSourceListA(DWORD,PCSTR);
+WINSETUPAPI BOOL WINAPI SetupRemoveFromSourceListW(DWORD,PCWSTR);
+WINSETUPAPI BOOL WINAPI SetupRemoveInstallSectionFromDiskSpaceListA(HDSKSPC,HINF,HINF,PCSTR,PVOID,UINT);
+WINSETUPAPI BOOL WINAPI SetupRemoveInstallSectionFromDiskSpaceListW(HDSKSPC,HINF,HINF,PCWSTR,PVOID,UINT);
+WINSETUPAPI BOOL WINAPI SetupRemoveSectionFromDiskSpaceListA(HDSKSPC,HINF,HINF,PCSTR,UINT,PVOID,UINT);
+WINSETUPAPI BOOL WINAPI SetupRemoveSectionFromDiskSpaceListW(HDSKSPC,HINF,HINF,PCWSTR,UINT,PVOID,UINT);
+WINSETUPAPI UINT WINAPI SetupRenameErrorA(HWND,PCSTR,PCSTR,PCSTR,UINT,DWORD);
+WINSETUPAPI UINT WINAPI SetupRenameErrorW(HWND,PCWSTR,PCWSTR,PCWSTR,UINT,DWORD);
+WINSETUPAPI BOOL WINAPI SetupScanFileQueueA(HSPFILEQ,DWORD,HWND,PSP_FILE_CALLBACK_A,PVOID,PDWORD);
+WINSETUPAPI BOOL WINAPI SetupScanFileQueueW(HSPFILEQ,DWORD,HWND,PSP_FILE_CALLBACK_W,PVOID,PDWORD);
+WINSETUPAPI BOOL WINAPI SetupSetDirectoryIdA(HINF,DWORD,PCSTR);
+WINSETUPAPI BOOL WINAPI SetupSetDirectoryIdW(HINF,DWORD,PCWSTR);
+WINSETUPAPI BOOL WINAPI SetupSetDirectoryIdExA(HINF,DWORD,PCSTR,DWORD,DWORD,PVOID);
+WINSETUPAPI BOOL WINAPI SetupSetDirectoryIdExW(HINF,DWORD,PCWSTR,DWORD,DWORD,PVOID);
+WINSETUPAPI BOOL WINAPI SetupSetFileQueueAlternatePlatformA(HSPFILEQ,PSP_ALTPLATFORM_INFO,PCSTR);
+WINSETUPAPI BOOL WINAPI SetupSetFileQueueAlternatePlatformW(HSPFILEQ,PSP_ALTPLATFORM_INFO,PCWSTR);
+WINSETUPAPI BOOL WINAPI SetupSetPlatformPathOverrideA(PCSTR);
+WINSETUPAPI BOOL WINAPI SetupSetPlatformPathOverrideW(PCWSTR);
+WINSETUPAPI BOOL WINAPI SetupSetSourceListA(DWORD,PCSTR*,UINT);
+WINSETUPAPI BOOL WINAPI SetupSetSourceListW(DWORD,PCWSTR*,UINT);
+WINSETUPAPI VOID WINAPI SetupTermDefaultQueueCallback(PVOID);
+WINSETUPAPI BOOL WINAPI SetupTerminateFileLog(HSPFILELOG);
+
+/* for backward compatibility */
+#define SetupDiCreateInterfaceDeviceW SetupDiCreateDeviceInterfaceW
+#define SetupDiCreateInterfaceDeviceRegKeyW SetupDiCreateDeviceInterfaceRegKeyW
+#define SetupDiOpenInterfaceDeviceW SetupDiOpenDeviceInterfaceW
+#define SetupDiGetInterfaceDeviceDetailW SetupDiGetDeviceInterfaceDetailW
+#define SetupDiCreateInterfaceDeviceA SetupDiCreateDeviceInterfaceA
+#define SetupDiCreateInterfaceDeviceRegKeyA SetupDiCreateDeviceInterfaceRegKeyA
+#define SetupDiOpenInterfaceDeviceA SetupDiOpenDeviceInterfaceA
+#define SetupDiGetInterfaceDeviceDetailA SetupDiGetDeviceInterfaceDetailA
+
+#ifdef UNICODE
+#define PSP_FILE_CALLBACK PSP_FILE_CALLBACK_W
+#define SetupAddInstallSectionToDiskSpaceList SetupAddInstallSectionToDiskSpaceListW
+#define SetupAddSectionToDiskSpaceList SetupAddSectionToDiskSpaceListW
+#define SetupAddToDiskSpaceList SetupAddToDiskSpaceListW
+#define SetupAddToSourceList SetupAddToSourceListW
+#define SetupAdjustDiskSpaceList SetupAdjustDiskSpaceListW
+#define SetupBackupError SetupBackupErrorW
+#define SetupCommitFileQueue SetupCommitFileQueueW
+#if (_SETUPAPI_VER >= 0x0502)
+#define SetupConfigureWmiFromInfSection SetupConfigureWmiFromInfSectionW
+#endif
+#define SetupCopyError SetupCopyErrorW
+#define SetupCopyOEMInf SetupCopyOEMInfW
+#define SetupCreateDiskSpaceList SetupCreateDiskSpaceListW
+#define SetupDecompressOrCopyFile SetupDecompressOrCopyFileW
+#define SetupDefaultQueueCallback SetupDefaultQueueCallbackW
+#define SetupDeleteError SetupDeleteErrorW
+#define SetupDiBuildClassInfoListEx SetupDiBuildClassInfoListExW
+#define SetupDiClassGuidsFromNameEx SetupDiClassGuidsFromNameExW
+#define SetupDiClassGuidsFromName SetupDiClassGuidsFromNameW
+#define SetupDiClassNameFromGuidEx SetupDiClassNameFromGuidExW
+#define SetupDiClassNameFromGuid SetupDiClassNameFromGuidW
+#define SetupDiCreateDeviceInfoListEx SetupDiCreateDeviceInfoListExW
+#define SetupDiCreateDeviceInfo SetupDiCreateDeviceInfoW
+#define SetupDiCreateDeviceInterfaceRegKey SetupDiCreateDeviceInterfaceRegKeyW
+#define SetupDiCreateInterfaceDeviceRegKey SetupDiCreateDeviceInterfaceRegKeyW
+#define SetupDiCreateDeviceInterface SetupDiCreateDeviceInterfaceW
+#define SetupDiCreateInterfaceDevice SetupDiCreateDeviceInterfaceW
+#define SetupDiCreateDevRegKey SetupDiCreateDevRegKeyW
+#define SetupDiEnumDriverInfo SetupDiEnumDriverInfoW
+#define SetupDiGetActualSectionToInstall SetupDiGetActualSectionToInstallW
+#define SetupDiGetClassDescriptionEx SetupDiGetClassDescriptionExW
+#define SetupDiGetClassDescription SetupDiGetClassDescriptionW
+#define SetupDiGetClassDevPropertySheets SetupDiGetClassDevPropertySheetsW
+#define SetupDiGetClassDevsEx SetupDiGetClassDevsExW
+#define SetupDiGetClassDevs SetupDiGetClassDevsW
+#define SetupDiGetClassImageListEx SetupDiGetClassImageListExW
+#define SetupDiGetClassInstallParams SetupDiGetClassInstallParamsW
+#define SetupDiGetClassRegistryProperty SetupDiGetClassRegistryPropertyW
+#define SetupDiGetDeviceInfoListDetail SetupDiGetDeviceInfoListDetailW
+#define SetupDiGetDeviceInstallParams SetupDiGetDeviceInstallParamsW
+#define SetupDiGetDeviceInstanceId SetupDiGetDeviceInstanceIdW
+#define SetupDiGetDeviceInterfaceDetail SetupDiGetDeviceInterfaceDetailW
+#define SetupDiGetInterfaceDeviceDetail SetupDiGetDeviceInterfaceDetailW
+#define SetupDiGetDeviceRegistryProperty SetupDiGetDeviceRegistryPropertyW
+#define SetupDiGetDriverInfoDetail SetupDiGetDriverInfoDetailW
+#define SetupDiGetDriverInstallParams SetupDiGetDriverInstallParamsW
+#define SetupDiGetHwProfileFriendlyNameEx SetupDiGetHwProfileFriendlyNameExW
+#define SetupDiGetHwProfileFriendlyName SetupDiGetHwProfileFriendlyNameW
+#define SetupDiGetHwProfileListEx SetupDiGetHwProfileListExW
+#define SetupDiGetINFClass SetupDiGetINFClassW
+#define SetupDiGetSelectedDriver SetupDiGetSelectedDriverW
+#define SetupDiInstallClassEx SetupDiInstallClassExW
+#define SetupDiInstallClass SetupDiInstallClassW
+#define SetupDiOpenClassRegKeyEx SetupDiOpenClassRegKeyExW
+#define SetupDiOpenDeviceInfo SetupDiOpenDeviceInfoW
+#define SetupDiOpenDeviceInterface SetupDiOpenDeviceInterfaceW
+#define SetupDiOpenInterfaceDevice SetupDiOpenDeviceInterfaceW
+#define SetupDiSetClassInstallParams SetupDiSetClassInstallParamsW
+#define SetupDiSetClassRegistryProperty SetupDiSetClassRegistryPropertyW
+#define SetupDiSetDeviceInstallParams SetupDiSetDeviceInstallParamsW
+#define SetupDiSetDeviceRegistryProperty SetupDiSetDeviceRegistryPropertyW
+#define SetupDiSetDriverInstallParams SetupDiSetDriverInstallParamsW
+#define SetupDiSetSelectedDriver SetupDiSetSelectedDriverW
+#define SetupDuplicateDiskSpaceList SetupDuplicateDiskSpaceListW
+#define SetupFindFirstLine SetupFindFirstLineW
+#define SetupFindNextMatchLine SetupFindNextMatchLineW
+#define SetupFreeSourceList SetupFreeSourceListW
+#define SetupGetBackupInformation SetupGetBackupInformationW
+#define SetupGetFileCompressionInfo SetupGetFileCompressionInfoW
+#define SetupGetInfFileList SetupGetInfFileListW
+#define SetupGetInfInformation SetupGetInfInformationW
+#define SetupGetLineByIndex SetupGetLineByIndexW
+#define SetupGetLineCount SetupGetLineCountW
+#define SetupGetLineText SetupGetLineTextW
+#define SetupGetMultiSzField SetupGetMultiSzFieldW
+#define SetupGetSourceFileLocation SetupGetSourceFileLocationW
+#define SetupGetSourceFileSize SetupGetSourceFileSizeW
+#define SetupGetSourceInfo SetupGetSourceInfoW
+#define SetupGetStringField SetupGetStringFieldW
+#define SetupGetTargetPath SetupGetTargetPathW
+#define SetupInitializeFileLog SetupInitializeFileLogW
+#define SetupInstallFileEx SetupInstallFileExW
+#define SetupInstallFilesFromInfSection SetupInstallFilesFromInfSectionW
+#define SetupInstallFile SetupInstallFileW
+#define SetupInstallFromInfSection SetupInstallFromInfSectionW
+#define SetupInstallServicesFromInfSectionEx SetupInstallServicesFromInfSectionExW
+#define SetupInstallServicesFromInfSection SetupInstallServicesFromInfSectionW
+#define SetupIterateCabinet SetupIterateCabinetW
+#define SetupLogError SetupLogErrorW
+#define SetupLogFile SetupLogFileW
+#define SetupOpenAppendInfFile SetupOpenAppendInfFileW
+#define SetupOpenInfFile SetupOpenInfFileW
+#define SetupPromptForDisk SetupPromptForDiskW
+#define SetupQueryDrivesInDiskSpaceList SetupQueryDrivesInDiskSpaceListW
+#define SetupQueryFileLog SetupQueryFileLogW
+#define SetupQueryInfFileInformation SetupQueryInfFileInformationW
+#define SetupQueryInfOriginalFileInformation SetupQueryInfOriginalFileInformationW
+#define SetupQueryInfVersionInformation SetupQueryInfVersionInformationW
+#define SetupQuerySourceList SetupQuerySourceListW
+#define SetupQuerySpaceRequiredOnDrive SetupQuerySpaceRequiredOnDriveW
+#define SetupQueueCopyIndirect SetupQueueCopyIndirectW
+#define SetupQueueCopySection SetupQueueCopySectionW
+#define SetupQueueCopy SetupQueueCopyW
+#define SetupQueueDefaultCopy SetupQueueDefaultCopyW
+#define SetupQueueDeleteSection SetupQueueDeleteSectionW
+#define SetupQueueDelete SetupQueueDeleteW
+#define SetupQueueRenameSection SetupQueueRenameSectionW
+#define SetupQueueRename SetupQueueRenameW
+#define SetupRemoveFileLogEntry SetupRemoveFileLogEntryW
+#define SetupRemoveFromDiskSpaceList SetupRemoveFromDiskSpaceListW
+#define SetupRemoveFromSourceList SetupRemoveFromSourceListW
+#define SetupRemoveInstallSectionFromDiskSpaceList SetupRemoveInstallSectionFromDiskSpaceListW
+#define SetupRemoveSectionFromDiskSpaceList SetupRemoveSectionFromDiskSpaceListW
+#define SetupRenameError SetupRenameErrorW
+#define SetupScanFileQueue SetupScanFileQueueW
+#define SetupSetDirectoryIdEx SetupSetDirectoryIdExW
+#define SetupSetDirectoryId SetupSetDirectoryIdW
+#define SetupSetFileQueueAlternatePlatform SetupSetFileQueueAlternatePlatformW
+#define SetupSetPlatformPathOverride SetupSetPlatformPathOverrideW
+#define SetupSetSourceList SetupSetSourceListW
+#else
+#define PSP_FILE_CALLBACK PSP_FILE_CALLBACK_A
+#define SetupAddInstallSectionToDiskSpaceList SetupAddInstallSectionToDiskSpaceListA
+#define SetupAddSectionToDiskSpaceList SetupAddSectionToDiskSpaceListA
+#define SetupAddToDiskSpaceList SetupAddToDiskSpaceListA
+#define SetupAddToSourceList SetupAddToSourceListA
+#define SetupAdjustDiskSpaceList SetupAdjustDiskSpaceListA
+#define SetupBackupError SetupBackupErrorA
+#define SetupCommitFileQueue SetupCommitFileQueueA
+#if (_SETUPAPI_VER >= 0x0502)
+#define SetupConfigureWmiFromInfSection SetupConfigureWmiFromInfSectionW
+#endif
+#define SetupCopyError SetupCopyErrorA
+#define SetupCopyOEMInf SetupCopyOEMInfA
+#define SetupCreateDiskSpaceList SetupCreateDiskSpaceListA
+#define SetupDecompressOrCopyFile SetupDecompressOrCopyFileA
+#define SetupDefaultQueueCallback SetupDefaultQueueCallbackA
+#define SetupDeleteError SetupDeleteErrorA
+#define SetupDiBuildClassInfoListEx SetupDiBuildClassInfoListExA
+#define SetupDiClassGuidsFromName SetupDiClassGuidsFromNameA
+#define SetupDiClassGuidsFromNameEx SetupDiClassGuidsFromNameExA
+#define SetupDiClassNameFromGuid SetupDiClassNameFromGuidA
+#define SetupDiClassNameFromGuidEx SetupDiClassNameFromGuidExA
+#define SetupDiCreateDeviceInfo SetupDiCreateDeviceInfoA
+#define SetupDiCreateDeviceInfoListEx SetupDiCreateDeviceInfoListExA
+#define SetupDiCreateDeviceInterface SetupDiCreateDeviceInterfaceA
+#define SetupDiCreateInterfaceDevice SetupDiCreateDeviceInterfaceA
+#define SetupDiCreateDeviceInterfaceRegKey SetupDiCreateDeviceInterfaceRegKeyA
+#define SetupDiCreateInterfaceDeviceRegKey SetupDiCreateDeviceInterfaceRegKeyA
+#define SetupDiCreateDevRegKey SetupDiCreateDevRegKeyA
+#define SetupDiDeleteInterfaceDeviceData SetupDiDeleteDeviceInterfaceData
+#define SetupDiEnumDriverInfo SetupDiEnumDriverInfoA
+#define SetupDiGetActualSectionToInstall SetupDiGetActualSectionToInstallA
+#define SetupDiGetClassDescription SetupDiGetClassDescriptionA
+#define SetupDiGetClassDescriptionEx SetupDiGetClassDescriptionExA
+#define SetupDiGetClassDevPropertySheets SetupDiGetClassDevPropertySheetsA
+#define SetupDiGetClassDevs SetupDiGetClassDevsA
+#define SetupDiGetClassDevsEx SetupDiGetClassDevsExA
+#define SetupDiGetClassImageListEx SetupDiGetClassImageListExA
+#define SetupDiGetClassInstallParams SetupDiGetClassInstallParamsA
+#define SetupDiGetClassRegistryProperty SetupDiGetClassRegistryPropertyA
+#define SetupDiGetDeviceInfoListDetail SetupDiGetDeviceInfoListDetailA
+#define SetupDiGetDeviceInstallParams SetupDiGetDeviceInstallParamsA
+#define SetupDiGetDeviceInstanceId SetupDiGetDeviceInstanceIdA
+#define SetupDiGetDeviceInterfaceDetail SetupDiGetDeviceInterfaceDetailA
+#define SetupDiGetInterfaceDeviceDetail SetupDiGetDeviceInterfaceDetailA
+#define SetupDiGetDeviceRegistryProperty SetupDiGetDeviceRegistryPropertyA
+#define SetupDiGetDriverInfoDetail SetupDiGetDriverInfoDetailA
+#define SetupDiGetDriverInstallParams SetupDiGetDriverInstallParamsA
+#define SetupDiGetHwProfileFriendlyName SetupDiGetHwProfileFriendlyNameA
+#define SetupDiGetHwProfileFriendlyNameEx SetupDiGetHwProfileFriendlyNameExA
+#define SetupDiGetHwProfileListEx SetupDiGetHwProfileListExA
+#define SetupDiGetINFClass SetupDiGetINFClassA
+#define SetupDiGetSelectedDriver SetupDiGetSelectedDriverA
+#define SetupDiInstallClass SetupDiInstallClassA
+#define SetupDiInstallClassEx SetupDiInstallClassExA
+#define SetupDiOpenClassRegKeyEx SetupDiOpenClassRegKeyExA
+#define SetupDiOpenDeviceInfo SetupDiOpenDeviceInfoA
+#define SetupDiOpenDeviceInterface SetupDiOpenDeviceInterfaceA
+#define SetupDiOpenInterfaceDevice SetupDiOpenDeviceInterfaceA
+#define SetupDiSetClassInstallParams SetupDiSetClassInstallParamsA
+#define SetupDiSetClassRegistryProperty SetupDiSetClassRegistryPropertyA
+#define SetupDiSetDeviceInstallParams SetupDiSetDeviceInstallParamsA
+#define SetupDiSetDeviceRegistryProperty SetupDiSetDeviceRegistryPropertyA
+#define SetupDiSetDriverInstallParams SetupDiSetDriverInstallParamsA
+#define SetupDiSetSelectedDriver SetupDiSetSelectedDriverA
+#define SetupDuplicateDiskSpaceList SetupDuplicateDiskSpaceListA
+#define SetupFindFirstLine SetupFindFirstLineA
+#define SetupFindNextMatchLine SetupFindNextMatchLineA
+#define SetupFreeSourceList SetupFreeSourceListA
+#define SetupGetBackupInformation SetupGetBackupInformationA
+#define SetupGetFileCompressionInfo SetupGetFileCompressionInfoA
+#define SetupGetInfFileList SetupGetInfFileListA
+#define SetupGetInfInformation SetupGetInfInformationA
+#define SetupGetLineByIndex SetupGetLineByIndexA
+#define SetupGetLineCount SetupGetLineCountA
+#define SetupGetLineText SetupGetLineTextA
+#define SetupGetMultiSzField SetupGetMultiSzFieldA
+#define SetupGetSourceFileLocation SetupGetSourceFileLocationA
+#define SetupGetSourceFileSize SetupGetSourceFileSizeA
+#define SetupGetSourceInfo SetupGetSourceInfoA
+#define SetupGetStringField SetupGetStringFieldA
+#define SetupGetTargetPath SetupGetTargetPathA
+#define SetupInitializeFileLog SetupInitializeFileLogA
+#define SetupInstallFile SetupInstallFileA
+#define SetupInstallFileEx SetupInstallFileExA
+#define SetupInstallFilesFromInfSection SetupInstallFilesFromInfSectionA
+#define SetupInstallFromInfSection SetupInstallFromInfSectionA
+#define SetupInstallServicesFromInfSection SetupInstallServicesFromInfSectionA
+#define SetupInstallServicesFromInfSectionEx SetupInstallServicesFromInfSectionExA
+#define SetupIterateCabinet SetupIterateCabinetA
+#define SetupLogError SetupLogErrorA
+#define SetupLogFile SetupLogFileA
+#define SetupOpenAppendInfFile SetupOpenAppendInfFileA
+#define SetupOpenInfFile SetupOpenInfFileA
+#define SetupPromptForDisk SetupPromptForDiskA
+#define SetupQueryDrivesInDiskSpaceList SetupQueryDrivesInDiskSpaceListA
+#define SetupQueryFileLog SetupQueryFileLogA
+#define SetupQueryInfFileInformation SetupQueryInfFileInformationA
+#define SetupQueryInfOriginalFileInformation SetupQueryInfOriginalFileInformationA
+#define SetupQueryInfVersionInformation SetupQueryInfVersionInformationA
+#define SetupQuerySourceList SetupQuerySourceListA
+#define SetupQuerySpaceRequiredOnDrive SetupQuerySpaceRequiredOnDriveA
+#define SetupQueueCopy SetupQueueCopyA
+#define SetupQueueCopyIndirect SetupQueueCopyIndirectA
+#define SetupQueueCopySection SetupQueueCopySectionA
+#define SetupQueueDefaultCopy SetupQueueDefaultCopyA
+#define SetupQueueDelete SetupQueueDeleteA
+#define SetupQueueDeleteSection SetupQueueDeleteSectionA
+#define SetupQueueRename SetupQueueRenameA
+#define SetupQueueRenameSection SetupQueueRenameSectionA
+#define SetupRemoveFileLogEntry SetupRemoveFileLogEntryA
+#define SetupRemoveFromDiskSpaceList SetupRemoveFromDiskSpaceListA
+#define SetupRemoveFromSourceList SetupRemoveFromSourceListA
+#define SetupRemoveInstallSectionFromDiskSpaceList SetupRemoveInstallSectionFromDiskSpaceListA
+#define SetupRemoveSectionFromDiskSpaceList SetupRemoveSectionFromDiskSpaceListA
+#define SetupRenameError SetupRenameErrorA
+#define SetupScanFileQueue SetupScanFileQueueA
+#define SetupSetDirectoryId SetupSetDirectoryIdA
+#define SetupSetDirectoryIdEx SetupSetDirectoryIdExA
+#define SetupSetFileQueueAlternatePlatform SetupSetFileQueueAlternatePlatformA
+#define SetupSetPlatformPathOverride SetupSetPlatformPathOverrideA
+#define SetupSetSourceList SetupSetSourceListA
+#endif /* UNICODE */
+
+#endif /* RC_INVOKED */
+
+#ifdef __cplusplus
+}
+#endif
+#include <poppack.h>
+#endif
diff --git a/tcc/include/winapi/shellapi.h b/tcc/include/winapi/shellapi.h
new file mode 100644
index 0000000..c436f87
--- /dev/null
+++ b/tcc/include/winapi/shellapi.h
@@ -0,0 +1,376 @@
+#ifndef _SHELLAPI_H
+#define _SHELLAPI_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#define WINSHELLAPI DECLSPEC_IMPORT
+#define ABE_LEFT 0
+#define ABE_TOP 1
+#define ABE_RIGHT 2
+#define ABE_BOTTOM 3
+#define ABS_AUTOHIDE 1
+#define ABS_ALWAYSONTOP 2
+#define SEE_MASK_CLASSNAME 0x1
+#define SEE_MASK_CLASSKEY 0x3
+#define SEE_MASK_IDLIST 0x4
+#define SEE_MASK_INVOKEIDLIST 0xc
+#define SEE_MASK_ICON 0x10
+#define SEE_MASK_HOTKEY 0x20
+#define SEE_MASK_NOCLOSEPROCESS 0x40
+#define SEE_MASK_CONNECTNETDRV 0x80
+#define SEE_MASK_FLAG_DDEWAIT 0x100
+#define SEE_MASK_DOENVSUBST 0x200
+#define SEE_MASK_FLAG_NO_UI 0x400
+#define SEE_MASK_NO_CONSOLE 0x8000
+#define SEE_MASK_UNICODE 0x10000
+#define SEE_MASK_ASYNCOK 0x100000
+#define SEE_MASK_HMONITOR 0x200000
+#if (_WIN32_IE >= 0x0600)
+#define SEE_MASK_NOZONECHECKS 0x800000
+#define SEE_MASK_FLAG_LOG_USAGE 0x4000000
+#endif
+#define ABM_NEW 0
+#define ABM_REMOVE 1
+#define ABM_QUERYPOS 2
+#define ABM_SETPOS 3
+#define ABM_GETSTATE 4
+#define ABM_GETTASKBARPOS 5
+#define ABM_ACTIVATE 6
+#define ABM_GETAUTOHIDEBAR 7
+#define ABM_SETAUTOHIDEBAR 8
+#define ABM_WINDOWPOSCHANGED 9
+#define ABN_STATECHANGE 0
+#define ABN_POSCHANGED 1
+#define ABN_FULLSCREENAPP 2
+#define ABN_WINDOWARRANGE 3
+#define NIM_ADD 0
+#define NIM_MODIFY 1
+#define NIM_DELETE 2
+#if (_WIN32_IE >= 0x0500)
+#define NOTIFYICON_VERSION 3
+#if (_WIN32_WINNT >= 0x600)
+#define NOTIFYICON_VERSION_4 4
+#endif
+#define NIM_SETFOCUS 3
+#define NIM_SETVERSION 4
+#define NIN_POPUPOPEN WM_USER+6
+#define NIN_POPUPCLOSE WM_USER+7
+#endif
+#define NIF_MESSAGE 0x00000001
+#define NIF_ICON 0x00000002
+#define NIF_TIP 0x00000004
+#define NIF_STATE 0x00000008
+#if (_WIN32_IE >= 0x0500)
+#define NIF_INFO 0x00000010
+#endif
+#if (_WIN32_IE >= 0x0600)
+#define NIF_GUID 0x00000020
+#endif
+#if (_WIN32_IE >= 0x0500)
+#define NIIF_NONE 0x00000000
+#define NIIF_INFO 0x00000001
+#define NIIF_WARNING 0x00000002
+#define NIIF_ERROR 0x00000003
+#endif
+#if (_WIN32_IE >= 0x0600)
+#define NIIF_ICON_MASK 0x0000000F
+#define NIIF_NOSOUND 0x00000010
+#endif
+#if (_WIN32_IE >= 0x0500)
+#define NIS_HIDDEN 0x00000001
+#define NIS_SHAREDICON 0x00000002
+#endif
+#define SE_ERR_FNF 2
+#define SE_ERR_PNF 3
+#define SE_ERR_ACCESSDENIED 5
+#define SE_ERR_OOM 8
+#define SE_ERR_DLLNOTFOUND 32
+#define SE_ERR_SHARE 26
+#define SE_ERR_ASSOCINCOMPLETE 27
+#define SE_ERR_DDETIMEOUT 28
+#define SE_ERR_DDEFAIL 29
+#define SE_ERR_DDEBUSY 30
+#define SE_ERR_NOASSOC 31
+#define FO_MOVE 1
+#define FO_COPY 2
+#define FO_DELETE 3
+#define FO_RENAME 4
+#define FOF_MULTIDESTFILES 1
+#define FOF_CONFIRMMOUSE 2
+#define FOF_SILENT 4
+#define FOF_RENAMEONCOLLISION 8
+#define FOF_NOCONFIRMATION 16
+#define FOF_WANTMAPPINGHANDLE 32
+#define FOF_ALLOWUNDO 64
+#define FOF_FILESONLY 128
+#define FOF_SIMPLEPROGRESS 256
+#define FOF_NOCONFIRMMKDIR 512
+#define FOF_NOERRORUI 1024
+#define FOF_NOCOPYSECURITYATTRIBS 2048
+#define PO_DELETE 19
+#define PO_RENAME 20
+#define PO_PORTCHANGE 32
+#define PO_REN_PORT 52
+#define SHGFI_ICON 256
+#define SHGFI_DISPLAYNAME 512
+#define SHGFI_TYPENAME 1024
+#define SHGFI_ATTRIBUTES 2048
+#define SHGFI_ICONLOCATION 4096
+#define SHGFI_EXETYPE 8192
+#define SHGFI_SYSICONINDEX 16384
+#define SHGFI_LINKOVERLAY 32768
+#define SHGFI_SELECTED 65536
+#define SHGFI_ATTR_SPECIFIED 131072
+#define SHGFI_LARGEICON 0
+#define SHGFI_SMALLICON 1
+#define SHGFI_OPENICON 2
+#define SHGFI_SHELLICONSIZE 4
+#define SHGFI_PIDL 8
+#define SHGFI_USEFILEATTRIBUTES 16
+#define SHERB_NOCONFIRMATION 1
+#define SHERB_NOPROGRESSUI 2
+#define SHERB_NOSOUND 4
+#ifdef UNICODE
+#define NOTIFYICONDATA_V2_SIZE 936
+#define NOTIFYICONDATA_V1_SIZE 152
+#else
+#define NOTIFYICONDATA_V2_SIZE 488
+#define NOTIFYICONDATA_V1_SIZE 88
+#endif
+
+typedef WORD FILEOP_FLAGS;
+typedef WORD PRINTEROP_FLAGS;
+#include <pshpack2.h>
+typedef struct _AppBarData {
+ DWORD cbSize;
+ HWND hWnd;
+ UINT uCallbackMessage;
+ UINT uEdge;
+ RECT rc;
+ LPARAM lParam;
+} APPBARDATA,*PAPPBARDATA;
+DECLARE_HANDLE(HDROP);
+
+typedef struct _NOTIFYICONDATAA {
+ DWORD cbSize;
+ HWND hWnd;
+ UINT uID;
+ UINT uFlags;
+ UINT uCallbackMessage;
+ HICON hIcon;
+#if _WIN32_IE >= 0x0500
+ CHAR szTip[128];
+ DWORD dwState;
+ DWORD dwStateMask;
+ CHAR szInfo[256];
+ _ANONYMOUS_UNION union {
+ UINT uTimeout;
+ UINT uVersion;
+ } DUMMYUNIONNAME;
+ CHAR szInfoTitle[64];
+ DWORD dwInfoFlags;
+#else
+ CHAR szTip[64];
+#endif
+#if _WIN32_IE >= 0x600
+ GUID guidItem;
+#endif
+#if _WIN32_WINNT >= 0x600
+ HICON hBalloonIcon;
+#endif
+} NOTIFYICONDATAA,*PNOTIFYICONDATAA;
+
+typedef struct _NOTIFYICONDATAW {
+ DWORD cbSize;
+ HWND hWnd;
+ UINT uID;
+ UINT uFlags;
+ UINT uCallbackMessage;
+ HICON hIcon;
+#if _WIN32_IE >= 0x0500
+ WCHAR szTip[128];
+ DWORD dwState;
+ DWORD dwStateMask;
+ WCHAR szInfo[256];
+ _ANONYMOUS_UNION union {
+ UINT uTimeout;
+ UINT uVersion;
+ } DUMMYUNIONNAME;
+ WCHAR szInfoTitle[64];
+ DWORD dwInfoFlags;
+#else
+ WCHAR szTip[64];
+#endif
+#if _WIN32_IE >= 0x600
+ GUID guidItem;
+#endif
+#if _WIN32_WINNT >= 0x600
+ HICON hBalloonIcon;
+#endif
+} NOTIFYICONDATAW,*PNOTIFYICONDATAW;
+
+typedef struct _SHELLEXECUTEINFOA {
+ DWORD cbSize;
+ ULONG fMask;
+ HWND hwnd;
+ LPCSTR lpVerb;
+ LPCSTR lpFile;
+ LPCSTR lpParameters;
+ LPCSTR lpDirectory;
+ int nShow;
+ HINSTANCE hInstApp;
+ PVOID lpIDList;
+ LPCSTR lpClass;
+ HKEY hkeyClass;
+ DWORD dwHotKey;
+ HANDLE hIcon;
+ HANDLE hProcess;
+} SHELLEXECUTEINFOA,*LPSHELLEXECUTEINFOA;
+typedef struct _SHELLEXECUTEINFOW {
+ DWORD cbSize;
+ ULONG fMask;
+ HWND hwnd;
+ LPCWSTR lpVerb;
+ LPCWSTR lpFile;
+ LPCWSTR lpParameters;
+ LPCWSTR lpDirectory;
+ int nShow;
+ HINSTANCE hInstApp;
+ PVOID lpIDList;
+ LPCWSTR lpClass;
+ HKEY hkeyClass;
+ DWORD dwHotKey;
+ HANDLE hIcon;
+ HANDLE hProcess;
+} SHELLEXECUTEINFOW,*LPSHELLEXECUTEINFOW;
+typedef struct _SHFILEOPSTRUCTA {
+ HWND hwnd;
+ UINT wFunc;
+ LPCSTR pFrom;
+ LPCSTR pTo;
+ FILEOP_FLAGS fFlags;
+ BOOL fAnyOperationsAborted;
+ PVOID hNameMappings;
+ LPCSTR lpszProgressTitle;
+} SHFILEOPSTRUCTA,*LPSHFILEOPSTRUCTA;
+typedef struct _SHFILEOPSTRUCTW {
+ HWND hwnd;
+ UINT wFunc;
+ LPCWSTR pFrom;
+ LPCWSTR pTo;
+ FILEOP_FLAGS fFlags;
+ BOOL fAnyOperationsAborted;
+ PVOID hNameMappings;
+ LPCWSTR lpszProgressTitle;
+} SHFILEOPSTRUCTW,*LPSHFILEOPSTRUCTW;
+typedef struct _SHFILEINFOA {
+ HICON hIcon;
+ int iIcon;
+ DWORD dwAttributes;
+ CHAR szDisplayName[MAX_PATH];
+ CHAR szTypeName[80];
+} SHFILEINFOA;
+typedef struct _SHFILEINFOW {
+ HICON hIcon;
+ int iIcon;
+ DWORD dwAttributes;
+ WCHAR szDisplayName[MAX_PATH];
+ WCHAR szTypeName[80];
+} SHFILEINFOW;
+typedef struct _SHQUERYRBINFO {
+ DWORD cbSize;
+ __int64 i64Size;
+ __int64 i64NumItems;
+} SHQUERYRBINFO, *LPSHQUERYRBINFO;
+#include <poppack.h>
+
+LPWSTR * WINAPI CommandLineToArgvW(LPCWSTR,int*);
+void WINAPI DragAcceptFiles(HWND,BOOL);
+void WINAPI DragFinish(HDROP);
+UINT WINAPI DragQueryFileA(HDROP,UINT,LPSTR,UINT);
+UINT WINAPI DragQueryFileW(HDROP,UINT,LPWSTR,UINT);
+BOOL WINAPI DragQueryPoint(HDROP,LPPOINT);
+HICON WINAPI DuplicateIcon(HINSTANCE,HICON);
+HICON WINAPI ExtractAssociatedIconA(HINSTANCE,LPCSTR,PWORD);
+HICON WINAPI ExtractAssociatedIconW(HINSTANCE,LPCWSTR,PWORD);
+HICON WINAPI ExtractIconA(HINSTANCE,LPCSTR,UINT);
+HICON WINAPI ExtractIconW(HINSTANCE,LPCWSTR,UINT);
+UINT WINAPI ExtractIconExA(LPCSTR,int,HICON*,HICON*,UINT);
+UINT WINAPI ExtractIconExW(LPCWSTR,int,HICON*,HICON*,UINT);
+HINSTANCE WINAPI FindExecutableA(LPCSTR,LPCSTR,LPSTR);
+HINSTANCE WINAPI FindExecutableW(LPCWSTR,LPCWSTR,LPWSTR);
+UINT WINAPI SHAppBarMessage(DWORD,PAPPBARDATA);
+BOOL WINAPI Shell_NotifyIconA(DWORD,PNOTIFYICONDATAA);
+BOOL WINAPI Shell_NotifyIconW(DWORD,PNOTIFYICONDATAW);
+int WINAPI ShellAboutA(HWND,LPCSTR,LPCSTR,HICON);
+int WINAPI ShellAboutW(HWND,LPCWSTR,LPCWSTR,HICON);
+HINSTANCE WINAPI ShellExecuteA(HWND,LPCSTR,LPCSTR,LPCSTR,LPCSTR,INT);
+HINSTANCE WINAPI ShellExecuteW(HWND,LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR,INT);
+BOOL WINAPI ShellExecuteExA(LPSHELLEXECUTEINFOA);
+BOOL WINAPI ShellExecuteExW(LPSHELLEXECUTEINFOW);
+int WINAPI SHFileOperationA(LPSHFILEOPSTRUCTA);
+int WINAPI SHFileOperationW(LPSHFILEOPSTRUCTW);
+void WINAPI SHFreeNameMappings(HANDLE);
+DWORD WINAPI SHGetFileInfoA(LPCSTR,DWORD,SHFILEINFOA*,UINT,UINT);
+DWORD WINAPI SHGetFileInfoW(LPCWSTR,DWORD,SHFILEINFOW*,UINT,UINT);
+HRESULT WINAPI SHQueryRecycleBinA(LPCSTR, LPSHQUERYRBINFO);
+HRESULT WINAPI SHQueryRecycleBinW(LPCWSTR, LPSHQUERYRBINFO);
+HRESULT WINAPI SHEmptyRecycleBinA(HWND,LPCSTR,DWORD);
+HRESULT WINAPI SHEmptyRecycleBinW(HWND,LPCWSTR,DWORD);
+
+#if (_WIN32_WINNT >= 0x600)
+#define SHIL_LARGE 0x0
+#define SHIL_SMALL 0x1
+#define SHIL_EXTRALARGE 0x2
+#define SHIL_SYSSMALL 0x3
+#define SHIL_JUMBO 0x4
+#define SHIL_LAST SHIL_JUMBO
+HRESULT WINAPI SHGetImageList(int,REFIID,void**);
+#endif
+
+#ifdef UNICODE
+typedef NOTIFYICONDATAW NOTIFYICONDATA,*PNOTIFYICONDATA;
+typedef SHELLEXECUTEINFOW SHELLEXECUTEINFO,*LPSHELLEXECUTEINFO;
+typedef SHFILEOPSTRUCTW SHFILEOPSTRUCT,*LPSHFILEOPSTRUCT;
+typedef SHFILEINFOW SHFILEINFO;
+#define DragQueryFile DragQueryFileW
+#define ExtractAssociatedIcon ExtractAssociatedIconW
+#define ExtractIcon ExtractIconW
+#define ExtractIconEx ExtractIconExW
+#define FindExecutable FindExecutableW
+#define Shell_NotifyIcon Shell_NotifyIconW
+#define ShellAbout ShellAboutW
+#define ShellExecute ShellExecuteW
+#define ShellExecuteEx ShellExecuteExW
+#define SHFileOperation SHFileOperationW
+#define SHGetFileInfo SHGetFileInfoW
+#define SHQueryRecycleBin SHQueryRecycleBinW
+#define SHEmptyRecycleBin SHEmptyRecycleBinW
+
+#else
+typedef NOTIFYICONDATAA NOTIFYICONDATA,*PNOTIFYICONDATA;
+typedef SHELLEXECUTEINFOA SHELLEXECUTEINFO,*LPSHELLEXECUTEINFO;
+typedef SHFILEOPSTRUCTA SHFILEOPSTRUCT,*LPSHFILEOPSTRUCT;
+typedef SHFILEINFOA SHFILEINFO;
+#define DragQueryFile DragQueryFileA
+#define ExtractAssociatedIcon ExtractAssociatedIconA
+#define ExtractIcon ExtractIconA
+#define ExtractIconEx ExtractIconExA
+#define FindExecutable FindExecutableA
+#define Shell_NotifyIcon Shell_NotifyIconA
+#define ShellAbout ShellAboutA
+#define ShellExecute ShellExecuteA
+#define ShellExecuteEx ShellExecuteExA
+#define SHFileOperation SHFileOperationA
+#define SHGetFileInfo SHGetFileInfoA
+#define SHQueryRecycleBin SHQueryRecycleBinA
+#define SHEmptyRecycleBin SHEmptyRecycleBinA
+#endif
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/shldisp.h b/tcc/include/winapi/shldisp.h
new file mode 100755
index 0000000..0b5d299
--- /dev/null
+++ b/tcc/include/winapi/shldisp.h
@@ -0,0 +1,61 @@
+#ifndef _SHLDISP_H
+#define _SHLDISP_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define ACO_AUTOSUGGEST 0x01
+
+#define INTERFACE IAutoComplete
+DECLARE_INTERFACE_(IAutoComplete, IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(Init)(THIS_ HWND,IUnknown*,LPCOLESTR,LPCOLESTR) PURE;
+ STDMETHOD(Enable)(THIS_ BOOL) PURE;
+};
+#undef INTERFACE
+typedef IAutoComplete *LPAUTOCOMPLETE;
+
+#ifdef COBJMACROS
+#define IAutoComplete_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define IAutoComplete_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define IAutoComplete_Release(T) (T)->lpVtbl->Release(T)
+#define IAutoComplete_Init(T,a,b,c,d) (T)->lpVtbl->Init(T,a,b,c,d)
+#define IAutoComplete_Enable(T,a) (T)->lpVtbl->Enable(T,a)
+#endif
+
+#define INTERFACE IAutoComplete2
+DECLARE_INTERFACE_(IAutoComplete2, IAutoComplete)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(Init)(THIS_ HWND,IUnknown*,LPCOLESTR,LPCOLESTR) PURE;
+ STDMETHOD(Enable)(THIS_ BOOL) PURE;
+ STDMETHOD(SetOptions)(THIS_ DWORD) PURE;
+ STDMETHOD(GetOptions)(THIS_ DWORD*) PURE;
+};
+#undef INTERFACE
+typedef IAutoComplete2 *LPAUTOCOMPLETE2;
+
+#ifdef COBJMACROS
+#define IAutoComplete2_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define IAutoComplete2_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define IAutoComplete2_Release(T) (T)->lpVtbl->Release(T)
+#define IAutoComplete2_Init(T,a,b,c,d) (T)->lpVtbl->Init(T,a,b,c,d)
+#define IAutoComplete2_Enable(T,a) (T)->lpVtbl->Enable(T,a)
+#define IAutoComplete2_SetOptions(T,a) (T)->lpVtbl->Enable(T,a)
+#define IAutoComplete2_GetOptions(T,a) (T)->lpVtbl->Enable(T,a)
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _SHLDISP_H */
diff --git a/tcc/include/winapi/shlguid.h b/tcc/include/winapi/shlguid.h
new file mode 100644
index 0000000..3583e32
--- /dev/null
+++ b/tcc/include/winapi/shlguid.h
@@ -0,0 +1,102 @@
+#ifndef _SHLGUID_H
+#define _SHLGUID_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#define DEFINE_SHLGUID(n,l,w1,w2) DEFINE_GUID(n,l,w1,w2,0xC0,0,0,0,0,0,0,0x46)
+#define SID_SShellBrowser IID_IShellBrowser
+extern const GUID CLSID_ShellDesktop;
+extern const GUID CLSID_ShellLink;
+extern const GUID FMTID_Intshcut;
+extern const GUID FMTID_InternetSite;
+extern const GUID CGID_Explorer;
+extern const GUID CGID_ShellDocView;
+extern const GUID CGID_ShellServiceObject;
+extern const GUID IID_INewShortcutHookA;
+extern const GUID IID_IShellBrowser;
+extern const GUID IID_IShellView;
+extern const GUID IID_IContextMenu;
+extern const GUID IID_IColumnProvider;
+extern const GUID IID_IQueryInfo;
+extern const GUID IID_IShellIcon;
+extern const GUID IID_IShellIconOverlayIdentifier;
+extern const GUID IID_IShellFolder;
+extern const GUID IID_IShellExtInit;
+extern const GUID IID_IShellPropSheetExt;
+extern const GUID IID_IPersistFolder;
+extern const GUID IID_IExtractIconA;
+extern const GUID IID_IShellLinkA;
+extern const GUID IID_IShellCopyHookA;
+extern const GUID IID_IFileViewerA;
+extern const GUID IID_ICommDlgBrowser;
+extern const GUID IID_IEnumIDList;
+extern const GUID IID_IFileViewerSite;
+extern const GUID IID_IContextMenu2;
+extern const GUID IID_IContextMenu3;
+extern const GUID IID_IShellExecuteHookA;
+extern const GUID IID_IPropSheetPage;
+extern const GUID IID_INewShortcutHookW;
+extern const GUID IID_IFileViewerW;
+extern const GUID IID_IShellLinkW;
+extern const GUID IID_IExtractIconW;
+extern const GUID IID_IShellExecuteHookW;
+extern const GUID IID_IShellCopyHookW;
+extern const GUID IID_IShellView2;
+extern const GUID LIBID_SHDocVw;
+extern const GUID IID_IShellExplorer;
+extern const GUID DIID_DShellExplorerEvents;
+extern const GUID CLSID_ShellExplorer;
+extern const GUID IID_ISHItemOC;
+extern const GUID DIID_DSHItemOCEvents;
+extern const GUID CLSID_SHItemOC;
+extern const GUID IID_DHyperLink;
+extern const GUID IID_DIExplorer;
+extern const GUID DIID_DExplorerEvents;
+extern const GUID CLSID_InternetExplorer;
+extern const GUID CLSID_StdHyperLink;
+extern const GUID CLSID_FileTypes;
+extern const GUID CLSID_InternetShortcut;
+extern const GUID IID_IUniformResourceLocator;
+extern const GUID CLSID_DragDropHelper;
+extern const GUID IID_IDropTargetHelper;
+extern const GUID IID_IDragSourceHelper;
+extern const GUID CLSID_AutoComplete;
+extern const GUID IID_IAutoComplete;
+extern const GUID IID_IAutoComplete2;
+extern const GUID CLSID_ACLMulti;
+extern const GUID IID_IObjMgr;
+extern const GUID CLSID_ACListISF;
+extern const GUID IID_IACList;
+#if (_WIN32_IE >= 0x400 || _WIN32_WINNT >= 0x500)
+extern const GUID IID_IPersistFolder2;
+#endif
+#if (_WIN32_WINNT >= 0x500)
+extern const GUID IID_IPersistFolder3;
+extern const GUID IID_IShellFolder2;
+extern const GUID IID_IFileSystemBindData;
+#endif
+#ifdef UNICODE
+#define IID_IFileViewer IID_IFileViewerW
+#define IID_IShellLink IID_IShellLinkW
+#define IID_IExtractIcon IID_IExtractIconW
+#define IID_IShellCopyHook IID_IShellCopyHookW
+#define IID_IShellExecuteHook IID_IShellExecuteHookW
+#define IID_INewShortcutHook IID_INewShortcutHookW
+#else
+#define IID_IFileViewer IID_IFileViewerA
+#define IID_IShellLink IID_IShellLinkA
+#define IID_IExtractIcon IID_IExtractIconA
+#define IID_IShellCopyHook IID_IShellCopyHookA
+#define IID_IShellExecuteHook IID_IShellExecuteHookA
+#define IID_INewShortcutHook IID_INewShortcutHookA
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tcc/include/winapi/shlobj.h b/tcc/include/winapi/shlobj.h
new file mode 100644
index 0000000..7fb7c61
--- /dev/null
+++ b/tcc/include/winapi/shlobj.h
@@ -0,0 +1,1557 @@
+#ifndef _SHLOBJ_H
+#define _SHLOBJ_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <ole2.h>
+#include <shlguid.h>
+#include <shellapi.h>
+#pragma pack(push,1)
+#include <commctrl.h>
+
+#define BIF_RETURNONLYFSDIRS 1
+#define BIF_DONTGOBELOWDOMAIN 2
+#define BIF_STATUSTEXT 4
+#define BIF_RETURNFSANCESTORS 8
+#define BIF_EDITBOX 16
+#define BIF_VALIDATE 32
+#define BIF_NEWDIALOGSTYLE 64
+#define BIF_BROWSEINCLUDEURLS 128
+#define BIF_USENEWUI ( BIF_EDITBOX | BIF_NEWDIALOGSTYLE )
+#define BIF_BROWSEFORCOMPUTER 0x1000
+#define BIF_BROWSEFORPRINTER 0x2000
+#define BIF_BROWSEINCLUDEFILES 0x4000
+#define BIF_SHAREABLE 0x8000
+#define BFFM_INITIALIZED 1
+#define BFFM_SELCHANGED 2
+#define BFFM_VALIDATEFAILEDA 3
+#define BFFM_VALIDATEFAILEDW 4
+#define BFFM_SETSTATUSTEXTA (WM_USER + 100)
+#define BFFM_SETSTATUSTEXTW (WM_USER + 104)
+#define BFFM_ENABLEOK (WM_USER + 101)
+#define BFFM_SETSELECTIONA (WM_USER + 102)
+#define BFFM_SETSELECTIONW (WM_USER + 103)
+#define BFFM_SETOKTEXT (WM_USER + 105)
+#define BFFM_SETEXPANDED (WM_USER + 106)
+#ifdef UNICODE
+#define BFFM_SETSTATUSTEXT BFFM_SETSTATUSTEXTW
+#define BFFM_SETSELECTION BFFM_SETSELECTIONW
+#define BFFM_VALIDATEFAILED BFFM_VALIDATEFAILEDW
+#else
+#define BFFM_SETSTATUSTEXT BFFM_SETSTATUSTEXTA
+#define BFFM_SETSELECTION BFFM_SETSELECTIONA
+#define BFFM_VALIDATEFAILED BFFM_VALIDATEFAILEDA
+#endif
+#define DVASPECT_SHORTNAME 2
+typedef enum tagSHARD {
+ SHARD_PIDL = 0x00000001,
+ SHARD_PATHA = 0x00000002,
+ SHARD_PATHW = 0x00000003,
+ SHARD_APPIDINFO = 0x00000004,
+ SHARD_APPIDINFOIDLIST = 0x00000005,
+ SHARD_LINK = 0x00000006,
+ SHARD_APPIDINFOLINK = 0x00000007,
+ SHARD_SHELLITEM = 0x00000008
+} SHARD;
+#ifdef UNICODE
+#define SHARD_PATH SHARD_PATHW
+#else
+#define SHARD_PATH SHARD_PATHA
+#endif
+#define SHCNE_RENAMEITEM 1
+#define SHCNE_CREATE 2
+#define SHCNE_DELETE 4
+#define SHCNE_MKDIR 8
+#define SHCNE_RMDIR 16
+#define SHCNE_MEDIAINSERTED 32
+#define SHCNE_MEDIAREMOVED 64
+#define SHCNE_DRIVEREMOVED 128
+#define SHCNE_DRIVEADD 256
+#define SHCNE_NETSHARE 512
+#define SHCNE_NETUNSHARE 1024
+#define SHCNE_ATTRIBUTES 2048
+#define SHCNE_UPDATEDIR 4096
+#define SHCNE_UPDATEITEM 8192
+#define SHCNE_SERVERDISCONNECT 16384
+#define SHCNE_UPDATEIMAGE 32768
+#define SHCNE_DRIVEADDGUI 65536
+#define SHCNE_RENAMEFOLDER 0x20000
+#define SHCNE_FREESPACE 0x40000
+#define SHCNE_ASSOCCHANGED 0x8000000
+#define SHCNE_DISKEVENTS 0x2381F
+#define SHCNE_GLOBALEVENTS 0xC0581E0
+#define SHCNE_ALLEVENTS 0x7FFFFFFF
+#define SHCNE_INTERRUPT 0x80000000
+#define SHCNF_IDLIST 0
+#define SHCNF_PATHA 1
+#define SHCNF_PRINTERA 2
+#define SHCNF_DWORD 3
+#define SHCNF_PATHW 5
+#define SHCNF_PRINTERW 6
+#define SHCNF_TYPE 0xFF
+#define SHCNF_FLUSH 0x1000
+#define SHCNF_FLUSHNOWAIT 0x2000
+#ifdef UNICODE
+#define SHCNF_PATH SHCNF_PATHW
+#define SHCNF_PRINTER SHCNF_PRINTERW
+#else
+#define SHCNF_PATH SHCNF_PATHA
+#define SHCNF_PRINTER SHCNF_PRINTERA
+#endif
+#define SFGAO_CANCOPY DROPEFFECT_COPY
+#define SFGAO_CANMOVE DROPEFFECT_MOVE
+#define SFGAO_CANLINK DROPEFFECT_LINK
+#define SFGAO_CANRENAME 0x00000010L
+#define SFGAO_CANDELETE 0x00000020L
+#define SFGAO_HASPROPSHEET 0x00000040L
+#define SFGAO_DROPTARGET 0x00000100L
+#define SFGAO_CAPABILITYMASK 0x00000177L
+#define SFGAO_ISSLOW 0x00004000L
+#define SFGAO_GHOSTED 0x00008000L
+#define SFGAO_LINK 0x00010000L
+#define SFGAO_SHARE 0x00020000L
+#define SFGAO_READONLY 0x00040000L
+#define SFGAO_HIDDEN 0x00080000L
+#define SFGAO_DISPLAYATTRMASK (SFGAO_ISSLOW \
+ | SFGAO_GHOSTED \
+ | SFGAO_LINK \
+ | SFGAO_SHARE \
+ | SFGAO_READONLY \
+ | SFGAO_HIDDEN)
+#define SFGAO_FILESYSANCESTOR 0x10000000L
+#define SFGAO_FOLDER 0x20000000L
+#define SFGAO_FILESYSTEM 0x40000000L
+#define SFGAO_HASSUBFOLDER 0x80000000L
+#define SFGAO_CONTENTSMASK 0x80000000L
+#define SFGAO_VALIDATE 0x01000000L
+#define SFGAO_REMOVABLE 0x02000000L
+#define SFGAO_COMPRESSED 0x04000000L
+#define STRRET_WSTR 0
+#define STRRET_OFFSET 1
+#define STRRET_CSTR 2
+#define SHGDFIL_FINDDATA 1
+#define SHGDFIL_NETRESOURCE 2
+#define SHGDFIL_DESCRIPTIONID 3
+#define SHDID_ROOT_REGITEM 1
+#define SHDID_FS_FILE 2
+#define SHDID_FS_DIRECTORY 3
+#define SHDID_FS_OTHER 4
+#define SHDID_COMPUTER_DRIVE35 5
+#define SHDID_COMPUTER_DRIVE525 6
+#define SHDID_COMPUTER_REMOVABLE 7
+#define SHDID_COMPUTER_FIXED 8
+#define SHDID_COMPUTER_NETDRIVE 9
+#define SHDID_COMPUTER_CDROM 10
+#define SHDID_COMPUTER_RAMDISK 11
+#define SHDID_COMPUTER_OTHER 12
+#define SHDID_NET_DOMAIN 13
+#define SHDID_NET_SERVER 14
+#define SHDID_NET_SHARE 15
+#define SHDID_NET_RESTOFNET 16
+#define SHDID_NET_OTHER 17
+#ifndef REGSTR_PATH_EXPLORER
+#define REGSTR_PATH_EXPLORER TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer")
+#endif
+#define REGSTR_PATH_SPECIAL_FOLDERS REGSTR_PATH_EXPLORER TEXT("\\Shell Folders")
+#define CSIDL_DESKTOP 0
+#define CSIDL_INTERNET 1
+#define CSIDL_PROGRAMS 2
+#define CSIDL_CONTROLS 3
+#define CSIDL_PRINTERS 4
+#define CSIDL_PERSONAL 5
+#define CSIDL_FAVORITES 6
+#define CSIDL_STARTUP 7
+#define CSIDL_RECENT 8
+#define CSIDL_SENDTO 9
+#define CSIDL_BITBUCKET 10
+#define CSIDL_STARTMENU 11
+#define CSIDL_MYMUSIC 13
+#define CSIDL_MYVIDEO 14
+#define CSIDL_DESKTOPDIRECTORY 16
+#define CSIDL_DRIVES 17
+#define CSIDL_NETWORK 18
+#define CSIDL_NETHOOD 19
+#define CSIDL_FONTS 20
+#define CSIDL_TEMPLATES 21
+#define CSIDL_COMMON_STARTMENU 22
+#define CSIDL_COMMON_PROGRAMS 23
+#define CSIDL_COMMON_STARTUP 24
+#define CSIDL_COMMON_DESKTOPDIRECTORY 25
+#define CSIDL_APPDATA 26
+#define CSIDL_PRINTHOOD 27
+#define CSIDL_LOCAL_APPDATA 28
+#define CSIDL_ALTSTARTUP 29
+#define CSIDL_COMMON_ALTSTARTUP 30
+#define CSIDL_COMMON_FAVORITES 31
+#define CSIDL_INTERNET_CACHE 32
+#define CSIDL_COOKIES 33
+#define CSIDL_HISTORY 34
+#define CSIDL_COMMON_APPDATA 35
+#define CSIDL_WINDOWS 36
+#define CSIDL_SYSTEM 37
+#define CSIDL_PROGRAM_FILES 38
+#define CSIDL_MYPICTURES 39
+#define CSIDL_PROFILE 40
+#define CSIDL_SYSTEMX86 41
+#define CSIDL_PROGRAM_FILESX86 42
+#define CSIDL_PROGRAM_FILES_COMMON 43
+#define CSIDL_PROGRAM_FILES_COMMONX86 44
+#define CSIDL_COMMON_TEMPLATES 45
+#define CSIDL_COMMON_DOCUMENTS 46
+#define CSIDL_COMMON_ADMINTOOLS 47
+#define CSIDL_ADMINTOOLS 48
+#define CSIDL_CONNECTIONS 49
+#define CSIDL_COMMON_MUSIC 53
+#define CSIDL_COMMON_PICTURES 54
+#define CSIDL_COMMON_VIDEO 55
+#define CSIDL_RESOURCES 56
+#define CSIDL_RESOURCES_LOCALIZED 57
+#define CSIDL_COMMON_OEM_LINKS 58
+#define CSIDL_CDBURN_AREA 59
+#define CSIDL_COMPUTERSNEARME 61
+#define CSIDL_FLAG_DONT_VERIFY 0x4000
+#define CSIDL_FLAG_CREATE 0x8000
+#define CSIDL_FLAG_MASK 0xFF00
+#define CFSTR_SHELLIDLIST TEXT("Shell IDList Array")
+#define CFSTR_SHELLIDLISTOFFSET TEXT("Shell Object Offsets")
+#define CFSTR_NETRESOURCES TEXT("Net Resource")
+#define CFSTR_FILECONTENTS TEXT("FileContents")
+#define CFSTR_FILENAMEA TEXT("FileName")
+#define CFSTR_FILENAMEMAPA TEXT("FileNameMap")
+#define CFSTR_FILEDESCRIPTORA TEXT("FileGroupDescriptor")
+#define CFSTR_INETURLA TEXT("UniformResourceLocator")
+#define CFSTR_SHELLURL CFSTR_INETURLA
+#define CFSTR_FILENAMEW TEXT("FileNameW")
+#define CFSTR_FILENAMEMAPW TEXT("FileNameMapW")
+#define CFSTR_FILEDESCRIPTORW TEXT("FileGroupDescriptorW")
+#define CFSTR_INETURLW TEXT("UniformResourceLocatorW")
+#ifdef UNICODE
+#define CFSTR_FILENAME CFSTR_FILENAMEW
+#define CFSTR_FILENAMEMAP CFSTR_FILENAMEMAPW
+#define CFSTR_FILEDESCRIPTOR CFSTR_FILEDESCRIPTORW
+#define CFSTR_INETURL CFSTR_INETURLW
+#else
+#define CFSTR_FILENAME CFSTR_FILENAMEA
+#define CFSTR_FILENAMEMAP CFSTR_FILENAMEMAPA
+#define CFSTR_FILEDESCRIPTOR CFSTR_FILEDESCRIPTORA
+#define CFSTR_INETURL CFSTR_INETURLA
+#endif
+#define CFSTR_PRINTERGROUP TEXT("PrinterFriendlyName")
+#define CFSTR_INDRAGLOOP TEXT("InShellDragLoop")
+#define CFSTR_PASTESUCCEEDED TEXT("Paste Succeeded")
+#define CFSTR_PERFORMEDDROPEFFECT TEXT("Performed DropEffect")
+#define CFSTR_PREFERREDDROPEFFECT TEXT("Preferred DropEffect")
+#define CMF_NORMAL 0
+#define CMF_DEFAULTONLY 1
+#define CMF_VERBSONLY 2
+#define CMF_EXPLORE 4
+#define CMF_NOVERBS 8
+#define CMF_CANRENAME 16
+#define CMF_NODEFAULT 32
+#define CMF_INCLUDESTATIC 64
+#define CMF_RESERVED 0xffff0000
+#define GCS_VERBA 0
+#define GCS_HELPTEXTA 1
+#define GCS_VALIDATEA 2
+#define GCS_VERBW 4
+#define GCS_HELPTEXTW 5
+#define GCS_VALIDATEW 6
+#define GCS_UNICODE 4
+#ifdef UNICODE
+#define GCS_VERB GCS_VERBW
+#define GCS_HELPTEXT GCS_HELPTEXTW
+#define GCS_VALIDATE GCS_VALIDATEW
+#else
+#define GCS_VERB GCS_VERBA
+#define GCS_HELPTEXT GCS_HELPTEXTA
+#define GCS_VALIDATE GCS_VALIDATEA
+#endif
+#define CMDSTR_NEWFOLDERA "NewFolder"
+#define CMDSTR_VIEWLISTA "ViewList"
+#define CMDSTR_VIEWDETAILSA "ViewDetails"
+#define CMDSTR_NEWFOLDERW L"NewFolder"
+#define CMDSTR_VIEWLISTW L"ViewList"
+#define CMDSTR_VIEWDETAILSW L"ViewDetails"
+#ifdef UNICODE
+#define CMDSTR_NEWFOLDER CMDSTR_NEWFOLDERW
+#define CMDSTR_VIEWLIST CMDSTR_VIEWLISTW
+#define CMDSTR_VIEWDETAILS CMDSTR_VIEWDETAILSW
+#else
+#define CMDSTR_NEWFOLDER CMDSTR_NEWFOLDER
+#define CMDSTR_VIEWLIST CMDSTR_VIEWLIST
+#define CMDSTR_VIEWDETAILS CMDSTR_VIEWDETAILS
+#endif
+#define CMIC_MASK_HOTKEY SEE_MASK_HOTKEY
+#define CMIC_MASK_ICON SEE_MASK_ICON
+#define CMIC_MASK_FLAG_NO_UI SEE_MASK_FLAG_NO_UI
+#define CMIC_MASK_MODAL 0x80000000
+#define CMIC_VALID_SEE_FLAGS SEE_VALID_CMIC_FLAGS
+#define GIL_OPENICON 1
+#define GIL_FORSHELL 2
+#define GIL_SIMULATEDOC 1
+#define GIL_PERINSTANCE 2
+#define GIL_PERCLASS 4
+#define GIL_NOTFILENAME 8
+#define GIL_DONTCACHE 16
+#define FVSIF_RECT 1
+#define FVSIF_PINNED 2
+#define FVSIF_NEWFAILED 0x8000000
+#define FVSIF_NEWFILE 0x80000000
+#define FVSIF_CANVIEWIT 0x40000000
+#define CDBOSC_SETFOCUS 0
+#define CDBOSC_KILLFOCUS 1
+#define CDBOSC_SELCHANGE 2
+#define CDBOSC_RENAME 3
+#define FCIDM_SHVIEWFIRST 0
+#define FCIDM_SHVIEWLAST 0x7fff
+#define FCIDM_BROWSERFIRST 0xa000
+#define FCIDM_BROWSERLAST 0xbf00
+#define FCIDM_GLOBALFIRST 0x8000
+#define FCIDM_GLOBALLAST 0x9fff
+#define FCIDM_MENU_FILE FCIDM_GLOBALFIRST
+#define FCIDM_MENU_EDIT (FCIDM_GLOBALFIRST+0x0040)
+#define FCIDM_MENU_VIEW (FCIDM_GLOBALFIRST+0x0080)
+#define FCIDM_MENU_VIEW_SEP_OPTIONS (FCIDM_GLOBALFIRST+0x0081)
+#define FCIDM_MENU_TOOLS (FCIDM_GLOBALFIRST+0x00c0)
+#define FCIDM_MENU_TOOLS_SEP_GOTO (FCIDM_GLOBALFIRST+0x00c1)
+#define FCIDM_MENU_HELP (FCIDM_GLOBALFIRST+0x0100)
+#define FCIDM_MENU_FIND (FCIDM_GLOBALFIRST+0x0140)
+#define FCIDM_MENU_EXPLORE (FCIDM_GLOBALFIRST+0x0150)
+#define FCIDM_MENU_FAVORITES (FCIDM_GLOBALFIRST+0x0170)
+#define FCIDM_TOOLBAR FCIDM_BROWSERFIRST
+#define FCIDM_STATUS (FCIDM_BROWSERFIRST+1)
+#define SBSP_DEFBROWSER 0
+#define SBSP_SAMEBROWSER 1
+#define SBSP_NEWBROWSER 2
+#define SBSP_DEFMODE 0
+#define SBSP_OPENMODE 16
+#define SBSP_EXPLOREMODE 32
+#define SBSP_ABSOLUTE 0
+#define SBSP_RELATIVE 0x1000
+#define SBSP_PARENT 0x2000
+#define SBSP_INITIATEDBYHLINKFRAME 0x80000000
+#define SBSP_REDIRECT 0x40000000
+#define FCW_STATUS 1
+#define FCW_TOOLBAR 2
+#define FCW_TREE 3
+#define FCT_MERGE 1
+#define FCT_CONFIGABLE 2
+#define FCT_ADDTOEND 4
+#define SVSI_DESELECT 0
+#define SVSI_SELECT 1
+#define SVSI_EDIT 3
+#define SVSI_DESELECTOTHERS 4
+#define SVSI_ENSUREVISIBLE 8
+#define SVSI_FOCUSED 16
+#define SVGIO_BACKGROUND 0
+#define SVGIO_SELECTION 1
+#define SVGIO_ALLVIEW 2
+#define SV2GV_CURRENTVIEW ((UINT)-1)
+#define SV2GV_DEFAULTVIEW ((UINT)-2)
+
+typedef ULONG SFGAOF;
+typedef DWORD SHGDNF;
+
+typedef struct _IDA {
+ UINT cidl;
+ UINT aoffset[1];
+} CIDA,*LPIDA;
+typedef struct _SHITEMID {
+ USHORT cb;
+ BYTE abID[1];
+} SHITEMID, * LPSHITEMID;
+typedef const SHITEMID *LPCSHITEMID;
+typedef struct _ITEMIDLIST {
+ SHITEMID mkid;
+} ITEMIDLIST,*LPITEMIDLIST;
+typedef const ITEMIDLIST *LPCITEMIDLIST;
+typedef int (CALLBACK* BFFCALLBACK)(HWND,UINT,LPARAM,LPARAM);
+typedef struct _browseinfoA {
+ HWND hwndOwner;
+ LPCITEMIDLIST pidlRoot;
+ LPSTR pszDisplayName;
+ LPCSTR lpszTitle;
+ UINT ulFlags;
+ BFFCALLBACK lpfn;
+ LPARAM lParam;
+ int iImage;
+} BROWSEINFOA,*PBROWSEINFOA,*LPBROWSEINFOA;
+typedef struct _browseinfoW {
+ HWND hwndOwner;
+ LPCITEMIDLIST pidlRoot;
+ LPWSTR pszDisplayName;
+ LPCWSTR lpszTitle;
+ UINT ulFlags;
+ BFFCALLBACK lpfn;
+ LPARAM lParam;
+ int iImage;
+} BROWSEINFOW,*PBROWSEINFOW,*LPBROWSEINFOW;
+typedef struct _CMInvokeCommandInfo {
+ DWORD cbSize;
+ DWORD fMask;
+ HWND hwnd;
+ LPCSTR lpVerb;
+ LPCSTR lpParameters;
+ LPCSTR lpDirectory;
+ int nShow;
+ DWORD dwHotKey;
+ HANDLE hIcon;
+} CMINVOKECOMMANDINFO,*LPCMINVOKECOMMANDINFO;
+typedef struct _DROPFILES {
+ DWORD pFiles;
+ POINT pt;
+ BOOL fNC;
+ BOOL fWide;
+} DROPFILES,*LPDROPFILES;
+typedef enum tagSHGDN {
+ SHGDN_NORMAL=0,
+ SHGDN_INFOLDER,
+ SHGDN_FOREDITING=0x1000,
+ SHGDN_INCLUDE_NONFILESYS=0x2000,
+ SHGDN_FORADDRESSBAR=0x4000,
+ SHGDN_FORPARSING=0x8000
+} SHGNO;
+typedef enum tagSHCONTF {
+ SHCONTF_FOLDERS = 32,
+ SHCONTF_NONFOLDERS = 64,
+ SHCONTF_INCLUDEHIDDEN = 128,
+ SHCONTF_INIT_ON_FIRST_NEXT = 256,
+ SHCONTF_NETPRINTERSRCH = 512,
+ SHCONTF_SHAREABLE = 1024,
+ SHCONTF_STORAGE = 2048
+} SHCONTF;
+typedef struct _STRRET {
+ UINT uType;
+ _ANONYMOUS_UNION union {
+ LPWSTR pOleStr;
+ UINT uOffset;
+ char cStr[MAX_PATH];
+ } DUMMYUNIONNAME;
+} STRRET,*LPSTRRET;
+typedef enum {
+ FD_CLSID=1,FD_SIZEPOINT=2,FD_ATTRIBUTES=4,FD_CREATETIME=8,FD_ACCESSTIME=16,
+ FD_WRITESTIME=32,FD_FILESIZE=64,FD_LINKUI=0x8000
+} FD_FLAGS;
+typedef struct _FILEDESCRIPTORA {
+ DWORD dwFlags;
+ CLSID clsid;
+ SIZEL sizel;
+ POINTL pointl;
+ DWORD dwFileAttributes;
+ FILETIME ftCreationTime;
+ FILETIME ftLastAccessTime;
+ FILETIME ftLastWriteTime;
+ DWORD nFileSizeHigh;
+ DWORD nFileSizeLow;
+ CHAR cFileName[MAX_PATH];
+} FILEDESCRIPTORA,*LPFILEDESCRIPTORA;
+typedef struct _FILEDESCRIPTORW {
+ DWORD dwFlags;
+ CLSID clsid;
+ SIZEL sizel;
+ POINTL pointl;
+ DWORD dwFileAttributes;
+ FILETIME ftCreationTime;
+ FILETIME ftLastAccessTime;
+ FILETIME ftLastWriteTime;
+ DWORD nFileSizeHigh;
+ DWORD nFileSizeLow;
+ WCHAR cFileName[MAX_PATH];
+} FILEDESCRIPTORW,*LPFILEDESCRIPTORW;
+typedef struct _FILEGROUPDESCRIPTORA {
+ UINT cItems;
+ FILEDESCRIPTORA fgd[1];
+} FILEGROUPDESCRIPTORA,*LPFILEGROUPDESCRIPTORA;
+typedef struct _FILEGROUPDESCRIPTORW {
+ UINT cItems;
+ FILEDESCRIPTORW fgd[1];
+} FILEGROUPDESCRIPTORW,*LPFILEGROUPDESCRIPTORW;
+typedef enum {
+ SLR_NO_UI=1,
+ SLR_ANY_MATCH=2,
+ SLR_UPDATE=4,
+ SLR_NOUPDATE=8,
+ SLR_NOSEARCH=16,
+ SLR_NOTRACK=32,
+ SLR_NOLINKINFO=64,
+ SLR_INVOKE_MSI=128
+} SLR_FLAGS;
+typedef enum {
+ SLGP_SHORTPATH=1,
+ SLGP_UNCPRIORITY=2,
+ SLGP_RAWPATH=4
+} SLGP_FLAGS;
+typedef PBYTE LPVIEWSETTINGS;
+typedef enum {
+ FWF_AUTOARRANGE=1,FWF_ABBREVIATEDNAMES=2,FWF_SNAPTOGRID=4,FWF_OWNERDATA=8,
+ FWF_BESTFITWINDOW=16,FWF_DESKTOP=32,FWF_SINGLESEL=64,FWF_NOSUBFOLDERS=128,
+ FWF_TRANSPARENT=256,FWF_NOCLIENTEDGE=512,FWF_NOSCROLL=0x400,FWF_ALIGNLEFT=0x800,
+ FWF_SINGLECLICKACTIVATE=0x8000
+} FOLDERFLAGS;
+typedef enum {
+ FVM_ICON=1,
+ FVM_SMALLICON,
+ FVM_LIST,
+ FVM_DETAILS
+} FOLDERVIEWMODE;
+typedef struct {
+ UINT ViewMode;
+ UINT fFlags;
+} FOLDERSETTINGS,*LPFOLDERSETTINGS;
+typedef const FOLDERSETTINGS *LPCFOLDERSETTINGS;
+typedef struct {
+ DWORD cbSize;
+ HWND hwndOwner;
+ int iShow;
+ DWORD dwFlags;
+ RECT rect;
+ LPUNKNOWN punkRel;
+ OLECHAR strNewFile[MAX_PATH];
+} FVSHOWINFO,*LPFVSHOWINFO;
+typedef struct _NRESARRAY {
+ UINT cItems;
+ NETRESOURCE nr[1];
+} NRESARRAY, *LPNRESARRAY;
+enum { SBSC_HIDE,SBSC_SHOW,SBSC_TOGGLE,SBSC_QUERY };
+enum {
+ SBCMDID_ENABLESHOWTREE,SBCMDID_SHOWCONTROL,SBCMDID_CANCELNAVIGATION,
+ SBCMDID_MAYSAVECHANGES,SBCMDID_SETHLINKFRAME,SBCMDID_ENABLESTOP,SBCMDID_OPTIONS
+};
+typedef enum {
+ SVUIA_DEACTIVATE,SVUIA_ACTIVATE_NOFOCUS,SVUIA_ACTIVATE_FOCUS,
+ SVUIA_INPLACEACTIVATE
+} SVUIA_STATUS;
+#if (_WIN32_IE >= 0x0500)
+typedef struct tagEXTRASEARCH
+{
+ GUID guidSearch;
+ WCHAR wszFriendlyName[80];
+ WCHAR wszUrl[2084];
+} EXTRASEARCH, *LPEXTRASEARCH;
+typedef DWORD SHCOLSTATEF;
+typedef struct
+{
+ GUID fmtid;
+ DWORD pid;
+} SHCOLUMNID, *LPSHCOLUMNID;
+typedef const SHCOLUMNID *LPCSHCOLUMNID;
+typedef struct _SHELLDETAILS
+{
+ int fmt;
+ int cxChar;
+ STRRET str;
+} SHELLDETAILS, *LPSHELLDETAILS;
+typedef struct
+{
+ LPITEMIDLIST pidlTargetFolder;
+ WCHAR szTargetParsingName[MAX_PATH];
+ WCHAR szNetworkProvider[MAX_PATH];
+ DWORD dwAttributes;
+ int csidl;
+} PERSIST_FOLDER_TARGET_INFO;
+
+typedef enum {
+ SHGFP_TYPE_CURRENT = 0,
+ SHGFP_TYPE_DEFAULT = 1,
+} SHGFP_TYPE;
+#endif
+
+
+DECLARE_ENUMERATOR_(IEnumIDList,LPITEMIDLIST);
+typedef IEnumIDList *LPENUMIDLIST;
+
+#ifdef COBJMACROS
+#define IEnumIDList_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define IEnumIDList_Release(T) (T)->lpVtbl->AddRef(T)
+#define IEnumIDList_AddRef(T) (T)->lpVtbl->Release(T)
+#define IEnumIDList_Next(T,a,b,c) (T)->lpVtbl->Next(T,a,b,c)
+#define IEnumIDList_Skip(T,a) (T)->lpVtbl->Skip(T,a)
+#define IEnumIDList_Reset(T) (T)->lpVtbl->Reset(T)
+#define IEnumIDList_Clone(T,a) (T)->lpVtbl->Clone(T,a)
+#endif
+
+#define INTERFACE IObjMgr
+DECLARE_INTERFACE_(IObjMgr, IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(Append)(THIS_ IUnknown*) PURE;
+ STDMETHOD(Remove)(THIS_ IUnknown*) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE IContextMenu
+DECLARE_INTERFACE_(IContextMenu,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(QueryContextMenu)(THIS_ HMENU,UINT,UINT,UINT,UINT) PURE;
+ STDMETHOD(InvokeCommand)(THIS_ LPCMINVOKECOMMANDINFO) PURE;
+ STDMETHOD(GetCommandString)(THIS_ UINT,UINT,PUINT,LPSTR,UINT) PURE;
+};
+#undef INTERFACE
+typedef IContextMenu *LPCONTEXTMENU;
+
+#ifdef COBJMACROS
+#define IContextMenu_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define IContextMenu_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define IContextMenu_Release(T) (T)->lpVtbl->Release(T)
+#define IContextMenu_QueryContextMenu(T,a,b,c,d,e) (T)->lpVtbl->QueryContextMenu(T,a,b,c,d,e)
+#define IContextMenu_InvokeCommand(T,a) (T)->lpVtbl->InvokeCommand(T,a)
+#define IContextMenu_GetCommandString(T,a,b,c,d,e) (T)->lpVtbl->GetCommandString(T,a,b,c,d,e)
+#endif
+
+#define INTERFACE IContextMenu2
+DECLARE_INTERFACE_(IContextMenu2,IContextMenu)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(QueryContextMenu)(THIS_ HMENU,UINT,UINT,UINT,UINT) PURE;
+ STDMETHOD(InvokeCommand)(THIS_ LPCMINVOKECOMMANDINFO) PURE;
+ STDMETHOD(GetCommandString)(THIS_ UINT,UINT,PUINT,LPSTR,UINT) PURE;
+ STDMETHOD(HandleMenuMsg)(THIS_ UINT,WPARAM,LPARAM) PURE;
+};
+#undef INTERFACE
+typedef IContextMenu2 *LPCONTEXTMENU2;
+
+#define INTERFACE IContextMenu3
+DECLARE_INTERFACE_(IContextMenu3,IContextMenu2)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(QueryContextMenu)(THIS_ HMENU,UINT,UINT,UINT,UINT) PURE;
+ STDMETHOD(InvokeCommand)(THIS_ LPCMINVOKECOMMANDINFO) PURE;
+ STDMETHOD(GetCommandString)(THIS_ UINT,UINT,PUINT,LPSTR,UINT) PURE;
+ STDMETHOD(HandleMenuMsg)(THIS_ UINT,WPARAM,LPARAM) PURE;
+ STDMETHOD(HandleMenuMsg2)(THIS_ UINT,WPARAM,LPARAM,LRESULT*) PURE;
+};
+#undef INTERFACE
+typedef IContextMenu3 *LPCONTEXTMENU3;
+
+#if (_WIN32_IE >= 0x0500)
+#pragma pack(push,8)
+typedef struct {
+ ULONG dwFlags;
+ ULONG dwReserved;
+ WCHAR wszFolder[MAX_PATH];
+} SHCOLUMNINIT,*LPSHCOLUMNINIT;
+typedef const SHCOLUMNINIT* LPCSHCOLUMNINIT;
+typedef struct {
+ ULONG dwFlags;
+ DWORD dwFileAttributes;
+ ULONG dwReserved;
+ WCHAR *pwszExt;
+ WCHAR wszFile[MAX_PATH];
+} SHCOLUMNDATA,*LPSHCOLUMNDATA;
+typedef const SHCOLUMNDATA* LPCSHCOLUMNDATA;
+#pragma pack(pop)
+
+#define MAX_COLUMN_NAME_LEN 80
+#define MAX_COLUMN_DESC_LEN 128
+
+#pragma pack(push,1)
+typedef struct {
+ SHCOLUMNID scid;
+ VARTYPE vt;
+ DWORD fmt;
+ UINT cChars;
+ DWORD csFlags;
+ WCHAR wszTitle[MAX_COLUMN_NAME_LEN];
+ WCHAR wszDescription[MAX_COLUMN_DESC_LEN];
+} SHCOLUMNINFO,*LPSHCOLUMNINFO;
+typedef const SHCOLUMNINFO* LPCSHCOLUMNINFO;
+#pragma pack(pop)
+
+typedef enum {
+ SHCOLSTATE_TYPE_STR = 0x00000001,
+ SHCOLSTATE_TYPE_INT = 0x00000002,
+ SHCOLSTATE_TYPE_DATE = 0x00000003,
+ SHCOLSTATE_TYPEMASK = 0x0000000f,
+ SHCOLSTATE_ONBYDEFAULT = 0x00000010,
+ SHCOLSTATE_SLOW = 0x00000020,
+ SHCOLSTATE_EXTENDED = 0x00000040,
+ SHCOLSTATE_SECONDARYUI = 0x00000080,
+ SHCOLSTATE_HIDDEN = 0x00000100,
+ SHCOLSTATE_PREFER_VARCMP = 0x00000200
+} SHCOLSTATE;
+
+#ifdef COBJMACROS
+#define IContextMenu2_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define IContextMenu2_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define IContextMenu2_Release(T) (T)->lpVtbl->Release(T)
+#define IContextMenu2_QueryContextMenu(T,a,b,c,d,e) (T)->lpVtbl->QueryContextMenu(T,a,b,c,d,e)
+#define IContextMenu2_InvokeCommand(T,a) (T)->lpVtbl->InvokeCommand(T,a)
+#define IContextMenu2_GetCommandString(T,a,b,c,d,e) (T)->lpVtbl->GetCommandString(T,a,b,c,d,e)
+#define IContextMenu2_HandleMenuMsg(T,a,b,c) (T)->lpVtbl->HandleMenuMsg(T,a,b,c)
+#endif
+
+#ifdef COBJMACROS
+#define IContextMenu3_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define IContextMenu3_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define IContextMenu3_Release(T) (T)->lpVtbl->Release(T)
+#define IContextMenu3_QueryContextMenu(T,a,b,c,d,e) (T)->lpVtbl->QueryContextMenu(T,a,b,c,d,e)
+#define IContextMenu3_InvokeCommand(T,a) (T)->lpVtbl->InvokeCommand(T,a)
+#define IContextMenu3_GetCommandString(T,a,b,c,d,e) (T)->lpVtbl->GetCommandString(T,a,b,c,d,e)
+#define IContextMenu3_HandleMenuMsg(T,a,b,c) (T)->lpVtbl->HandleMenuMsg(T,a,b,c)
+#define IContextMenu3_HandleMenuMsg2(T,a,b,c,d) (T)->lpVtbl->HandleMenuMsg(T,a,b,c,d)
+#endif
+
+#define INTERFACE IColumnProvider
+DECLARE_INTERFACE_(IColumnProvider,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(Initialize)(THIS_ LPCSHCOLUMNINIT) PURE;
+ STDMETHOD(GetColumnInfo)(THIS_ DWORD,SHCOLUMNINFO*) PURE;
+ STDMETHOD(GetItemData)(THIS_ LPCSHCOLUMNID,LPCSHCOLUMNDATA,VARIANT*) PURE;
+};
+#undef INTERFACE
+#endif /* _WIN32_IE >= 0x0500 */
+
+#define INTERFACE IQueryInfo
+DECLARE_INTERFACE_(IQueryInfo,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetInfoTip)(THIS_ DWORD,WCHAR**) PURE;
+ STDMETHOD(GetInfoFlags)(THIS_ DWORD*) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE IShellExtInit
+DECLARE_INTERFACE_(IShellExtInit, IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(Initialize)(THIS_ LPCITEMIDLIST,LPDATAOBJECT,HKEY) PURE;
+};
+#undef INTERFACE
+typedef IShellExtInit *LPSHELLEXTINIT;
+
+#define INTERFACE IShellPropSheetExt
+DECLARE_INTERFACE_(IShellPropSheetExt, IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(AddPages)(THIS_ LPFNADDPROPSHEETPAGE,LPARAM) PURE;
+ STDMETHOD(ReplacePage)(THIS_ UINT,LPFNADDPROPSHEETPAGE,LPARAM) PURE;
+};
+#undef INTERFACE
+typedef IShellPropSheetExt *LPSHELLPROPSHEETEXT;
+
+#define INTERFACE IExtractIconA
+DECLARE_INTERFACE_(IExtractIconA, IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetIconLocation)(THIS_ UINT,LPSTR,UINT,int*,PUINT) PURE;
+ STDMETHOD(Extract)(THIS_ LPCSTR,UINT,HICON*,HICON*,UINT) PURE;
+};
+#undef INTERFACE
+typedef IExtractIconA *LPEXTRACTICONA;
+
+#ifdef COBJMACROS
+#define IExtractIconA_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define IExtractIconA_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define IExtractIconA_Release(T) (T)->lpVtbl->Release(T)
+#define IExtractIconA_GetIconLocation(T,a,b,c,d,e) (T)->lpVtbl->GetIconLocation(T,a,b,c,d,e)
+#define IExtractIconA_Extract(T,a,b,c,d,e) (T)->lpVtbl->Extract(T,a,b,c,d,e)
+#endif
+
+#define INTERFACE IExtractIconW
+DECLARE_INTERFACE_(IExtractIconW, IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetIconLocation)(THIS_ UINT,LPWSTR,UINT,int*,PUINT) PURE;
+ STDMETHOD(Extract)(THIS_ LPCWSTR,UINT,HICON*,HICON*,UINT) PURE;
+};
+#undef INTERFACE
+typedef IExtractIconW *LPEXTRACTICONW;
+
+#ifdef COBJMACROS
+#define IExtractIconW_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define IExtractIconW_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define IExtractIconW_Release(T) (T)->lpVtbl->Release(T)
+#define IExtractIconW_GetIconLocation(T,a,b,c,d,e) (T)->lpVtbl->GetIconLocation(T,a,b,c,d,e)
+#define IExtractIconW_Extract(T,a,b,c,d,e) (T)->lpVtbl->Extract(T,a,b,c,d,e)
+#endif
+
+#ifdef UNICODE
+#define IExtractIcon IExtractIconW
+#define LPEXTRACTICON LPEXTRACTICONW
+#else
+#define IExtractIcon IExtractIconA
+#define LPEXTRACTICON LPEXTRACTICONA
+#endif
+
+#define INTERFACE IShellLinkA
+DECLARE_INTERFACE_(IShellLinkA, IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetPath)(THIS_ LPSTR,int,WIN32_FIND_DATAA*,DWORD) PURE;
+ STDMETHOD(GetIDList)(THIS_ LPITEMIDLIST*) PURE;
+ STDMETHOD(SetIDList)(THIS_ LPCITEMIDLIST) PURE;
+ STDMETHOD(GetDescription)(THIS_ LPSTR,int) PURE;
+ STDMETHOD(SetDescription)(THIS_ LPCSTR) PURE;
+ STDMETHOD(GetWorkingDirectory)(THIS_ LPSTR,int) PURE;
+ STDMETHOD(SetWorkingDirectory)(THIS_ LPCSTR) PURE;
+ STDMETHOD(GetArguments)(THIS_ LPSTR,int) PURE;
+ STDMETHOD(SetArguments)(THIS_ LPCSTR) PURE;
+ STDMETHOD(GetHotkey)(THIS_ PWORD) PURE;
+ STDMETHOD(SetHotkey)(THIS_ WORD) PURE;
+ STDMETHOD(GetShowCmd)(THIS_ int*) PURE;
+ STDMETHOD(SetShowCmd)(THIS_ int) PURE;
+ STDMETHOD(GetIconLocation)(THIS_ LPSTR,int,int*) PURE;
+ STDMETHOD(SetIconLocation)(THIS_ LPCSTR,int) PURE;
+ STDMETHOD(SetRelativePath)(THIS_ LPCSTR ,DWORD) PURE;
+ STDMETHOD(Resolve)(THIS_ HWND,DWORD) PURE;
+ STDMETHOD(SetPath)(THIS_ LPCSTR) PURE;
+};
+#undef INTERFACE
+
+#ifdef COBJMACROS
+#define IShellLinkA_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define IShellLinkA_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define IShellLinkA_Release(T) (T)->lpVtbl->Release(T)
+#define IShellLinkA_GetPath(T,a,b,c,d) (T)->lpVtbl->GetPath(T,a,b,c,d)
+#define IShellLinkA_GetIDList(T,a) (T)->lpVtbl->GetIDList(T,a)
+#define IShellLinkA_SetIDList(T,a) (T)->lpVtbl->SetIDList(T,a)
+#define IShellLinkA_GetDescription(T,a,b) (T)->lpVtbl->GetDescription(T,a,b)
+#define IShellLinkA_SetDescription(T,a) (T)->lpVtbl->SetDescription(T,a)
+#define IShellLinkA_GetWorkingDirectory(T,a,b) (T)->lpVtbl->GetWorkingDirectory(T,a,b)
+#define IShellLinkA_SetWorkingDirectory(T,a) (T)->lpVtbl->SetWorkingDirectory(T,a)
+#define IShellLinkA_GetArguments(T,a,b) (T)->lpVtbl->GetArguments(T,a,b)
+#define IShellLinkA_SetArguments(T,a) (T)->lpVtbl->SetArguments(T,a)
+#define IShellLinkA_GetHotkey(T,a) (T)->lpVtbl->GetHotkey(T,a)
+#define IShellLinkA_SetHotkey(T,a) (T)->lpVtbl->SetHotkey(T,a)
+#define IShellLinkA_GetShowCmd(T,a) (T)->lpVtbl->GetShowCmd(T,a)
+#define IShellLinkA_SetShowCmd(T,a) (T)->lpVtbl->SetShowCmd(T,a)
+#define IShellLinkA_GetIconLocation(T,a,b,c) (T)->lpVtbl->GetIconLocation(T,a,b,c)
+#define IShellLinkA_SetIconLocation(T,a,b) (T)->lpVtbl->SetIconLocation(T,a,b)
+#define IShellLinkA_SetRelativePath(T,a,b) (T)->lpVtbl->SetRelativePath(T,a,b)
+#define IShellLinkA_Resolve(T,a,b) (T)->lpVtbl->Resolve(T,a,b)
+#define IShellLinkA_SetPath(T,a) (T)->lpVtbl->SetPath(T,a)
+#endif
+
+#define INTERFACE IShellLinkW
+DECLARE_INTERFACE_(IShellLinkW, IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetPath)(THIS_ LPWSTR,int,WIN32_FIND_DATAW*,DWORD) PURE;
+ STDMETHOD(GetIDList)(THIS_ LPITEMIDLIST*) PURE;
+ STDMETHOD(SetIDList)(THIS_ LPCITEMIDLIST) PURE;
+ STDMETHOD(GetDescription)(THIS_ LPWSTR,int) PURE;
+ STDMETHOD(SetDescription)(THIS_ LPCWSTR) PURE;
+ STDMETHOD(GetWorkingDirectory)(THIS_ LPWSTR,int) PURE;
+ STDMETHOD(SetWorkingDirectory)(THIS_ LPCWSTR) PURE;
+ STDMETHOD(GetArguments)(THIS_ LPWSTR,int) PURE;
+ STDMETHOD(SetArguments)(THIS_ LPCWSTR) PURE;
+ STDMETHOD(GetHotkey)(THIS_ PWORD) PURE;
+ STDMETHOD(SetHotkey)(THIS_ WORD) PURE;
+ STDMETHOD(GetShowCmd)(THIS_ int*) PURE;
+ STDMETHOD(SetShowCmd)(THIS_ int) PURE;
+ STDMETHOD(GetIconLocation)(THIS_ LPWSTR,int,int*) PURE;
+ STDMETHOD(SetIconLocation)(THIS_ LPCWSTR,int) PURE;
+ STDMETHOD(SetRelativePath)(THIS_ LPCWSTR ,DWORD) PURE;
+ STDMETHOD(Resolve)(THIS_ HWND,DWORD) PURE;
+ STDMETHOD(SetPath)(THIS_ LPCWSTR) PURE;
+};
+#undef INTERFACE
+
+#ifdef COBJMACROS
+#define IShellLinkW_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define IShellLinkW_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define IShellLinkW_Release(T) (T)->lpVtbl->Release(T)
+#define IShellLinkW_GetPath(T,a,b,c,d) (T)->lpVtbl->GetPath(T,a,b,c,d)
+#define IShellLinkW_GetIDList(T,a) (T)->lpVtbl->GetIDList(T,a)
+#define IShellLinkW_SetIDList(T,a) (T)->lpVtbl->SetIDList(T,a)
+#define IShellLinkW_GetDescription(T,a,b) (T)->lpVtbl->GetDescription(T,a,b)
+#define IShellLinkW_SetDescription(T,a) (T)->lpVtbl->SetDescription(T,a)
+#define IShellLinkW_GetWorkingDirectory(T,a,b) (T)->lpVtbl->GetWorkingDirectory(T,a,b)
+#define IShellLinkW_SetWorkingDirectory(T,a) (T)->lpVtbl->SetWorkingDirectory(T,a)
+#define IShellLinkW_GetArguments(T,a,b) (T)->lpVtbl->GetArguments(T,a,b)
+#define IShellLinkW_SetArguments(T,a) (T)->lpVtbl->SetArguments(T,a)
+#define IShellLinkW_GetHotkey(T,a) (T)->lpVtbl->GetHotkey(T,a)
+#define IShellLinkW_SetHotkey(T,a) (T)->lpVtbl->SetHotkey(T,a)
+#define IShellLinkW_GetShowCmd(T,a) (T)->lpVtbl->GetShowCmd(T,a)
+#define IShellLinkW_SetShowCmd(T,a) (T)->lpVtbl->SetShowCmd(T,a)
+#define IShellLinkW_GetIconLocation(T,a,b,c) (T)->lpVtbl->GetIconLocation(T,a,b,c)
+#define IShellLinkW_SetIconLocation(T,a,b) (T)->lpVtbl->SetIconLocation(T,a,b)
+#define IShellLinkW_SetRelativePath(T,a,b) (T)->lpVtbl->SetRelativePath(T,a,b)
+#define IShellLinkW_Resolve(T,a,b) (T)->lpVtbl->Resolve(T,a,b)
+#define IShellLinkW_SetPath(T,a) (T)->lpVtbl->SetPath(T,a)
+#endif
+
+#define INTERFACE IShellFolder
+DECLARE_INTERFACE_(IShellFolder, IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(ParseDisplayName)(THIS_ HWND,LPBC,LPOLESTR,PULONG,LPITEMIDLIST*,PULONG) PURE;
+ STDMETHOD(EnumObjects)(THIS_ HWND,DWORD,LPENUMIDLIST*) PURE;
+ STDMETHOD(BindToObject)(THIS_ LPCITEMIDLIST,LPBC,REFIID,PVOID*) PURE;
+ STDMETHOD(BindToStorage)(THIS_ LPCITEMIDLIST,LPBC,REFIID,PVOID*) PURE;
+ STDMETHOD(CompareIDs)(THIS_ LPARAM,LPCITEMIDLIST,LPCITEMIDLIST) PURE;
+ STDMETHOD(CreateViewObject)(THIS_ HWND,REFIID,PVOID*) PURE;
+ STDMETHOD(GetAttributesOf)(THIS_ UINT,LPCITEMIDLIST*,PULONG) PURE;
+ STDMETHOD(GetUIObjectOf)(THIS_ HWND,UINT,LPCITEMIDLIST*,REFIID,PUINT,PVOID*) PURE;
+ STDMETHOD(GetDisplayNameOf)(THIS_ LPCITEMIDLIST,DWORD,LPSTRRET) PURE;
+ STDMETHOD(SetNameOf)(THIS_ HWND,LPCITEMIDLIST,LPCOLESTR,DWORD,LPITEMIDLIST*) PURE;
+};
+#undef INTERFACE
+typedef IShellFolder *LPSHELLFOLDER;
+
+#ifdef COBJMACROS
+#define IShellFolder_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define IShellFolder_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define IShellFolder_Release(T) (T)->lpVtbl->Release(T)
+#define IShellFolder_ParseDisplayName(T,a,b,c,d,e,f) (T)->lpVtbl->ParseDisplayName(T,a,b,c,d,e,f)
+#define IShellFolder_EnumObjects(T,a,b,c) (T)->lpVtbl->EnumObjects(T,a,b,c)
+#define IShellFolder_BindToObject(T,a,b,c,d) (T)->lpVtbl->BindToObject(T,a,b,c,d)
+#define IShellFolder_BindToStorage(T,a,b,c,d) (T)->lpVtbl->BindToStorage(T,a,b,c,d)
+#define IShellFolder_CompareIDs(T,a,b,c) (T)->lpVtbl->CompareIDs(T,a,b,c)
+#define IShellFolder_CreateViewObject(T,a,b) (T)->lpVtbl->CreateViewObject(T,a,b)
+#define IShellFolder_GetAttributesOf(T,a,b,c) (T)->lpVtbl->GetAttributesOf(T,a,b,c)
+#define IShellFolder_GetUIObjectOf(T,a,b,c,d,e,f) (T)->lpVtbl->GetUIObjectOf(T,a,b,c,d,e,f)
+#define IShellFolder_GetDisplayNameOf(T,a,b,c) (T)->lpVtbl->GetDisplayNameOf(T,a,b,c)
+#define IShellFolder_SetNameOf(T,a,b,c,d,e) (T)->lpVtbl->SetNameOf(T,a,b,c,d,e)
+#endif
+
+#if (_WIN32_IE >= 0x0500)
+
+DECLARE_ENUMERATOR_(IEnumExtraSearch,LPEXTRASEARCH);
+typedef IEnumExtraSearch *LPENUMEXTRASEARCH;
+
+#define INTERFACE IShellFolder2
+DECLARE_INTERFACE_(IShellFolder2, IShellFolder)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(ParseDisplayName)(THIS_ HWND,LPBC,LPOLESTR,PULONG,LPITEMIDLIST*,PULONG) PURE;
+ STDMETHOD(EnumObjects)(THIS_ HWND,DWORD,LPENUMIDLIST*) PURE;
+ STDMETHOD(BindToObject)(THIS_ LPCITEMIDLIST,LPBC,REFIID,PVOID*) PURE;
+ STDMETHOD(BindToStorage)(THIS_ LPCITEMIDLIST,LPBC,REFIID,PVOID*) PURE;
+ STDMETHOD(CompareIDs)(THIS_ LPARAM,LPCITEMIDLIST,LPCITEMIDLIST) PURE;
+ STDMETHOD(CreateViewObject)(THIS_ HWND,REFIID,PVOID*) PURE;
+ STDMETHOD(GetAttributesOf)(THIS_ UINT,LPCITEMIDLIST*,PULONG) PURE;
+ STDMETHOD(GetUIObjectOf)(THIS_ HWND,UINT,LPCITEMIDLIST*,REFIID,PUINT,PVOID*) PURE;
+ STDMETHOD(GetDisplayNameOf)(THIS_ LPCITEMIDLIST,DWORD,LPSTRRET) PURE;
+ STDMETHOD(SetNameOf)(THIS_ HWND,LPCITEMIDLIST,LPCOLESTR,DWORD,LPITEMIDLIST*) PURE;
+ STDMETHOD(GetDefaultSearchGUID)(THIS_ GUID*) PURE;
+ STDMETHOD(EnumSearches)(THIS_ IEnumExtraSearch**) PURE;
+ STDMETHOD(GetDefaultColumn)(THIS_ DWORD,ULONG*,ULONG*) PURE;
+ STDMETHOD(GetDefaultColumnState)(THIS_ UINT,SHCOLSTATEF*) PURE;
+ STDMETHOD(GetDetailsEx)(THIS_ LPCITEMIDLIST,const SHCOLUMNID*,VARIANT*) PURE;
+ STDMETHOD(GetDetailsOf)(THIS_ LPCITEMIDLIST,UINT,SHELLDETAILS*) PURE;
+ STDMETHOD(MapColumnToSCID)(THIS_ UINT,SHCOLUMNID*) PURE;
+};
+#undef INTERFACE
+typedef IShellFolder2 *LPSHELLFOLDER2;
+
+#ifdef COBJMACROS
+#define IShellFolder2_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define IShellFolder2_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define IShellFolder2_Release(T) (T)->lpVtbl->Release(T)
+#define IShellFolder2_ParseDisplayName(T,a,b,c,d,e,f) (T)->lpVtbl->ParseDisplayName(T,a,b,c,d,e,f)
+#define IShellFolder2_EnumObjects(T,a,b,c) (T)->lpVtbl->EnumObjects(T,a,b,c)
+#define IShellFolder2_BindToObject(T,a,b,c,d) (T)->lpVtbl->BindToObject(T,a,b,c,d)
+#define IShellFolder2_BindToStorage(T,a,b,c,d) (T)->lpVtbl->BindToStorage(T,a,b,c,d)
+#define IShellFolder2_CompareIDs(T,a,b,c) (T)->lpVtbl->CompareIDs(T,a,b,c)
+#define IShellFolder2_CreateViewObject(T,a,b) (T)->lpVtbl->CreateViewObject(T,a,b)
+#define IShellFolder2_GetAttributesOf(T,a,b,c) (T)->lpVtbl->GetAttributesOf(T,a,b,c)
+#define IShellFolder2_GetUIObjectOf(T,a,b,c,d,e,f) (T)->lpVtbl->GetUIObjectOf(T,a,b,c,d,e,f)
+#define IShellFolder2_GetDisplayNameOf(T,a,b,c) (T)->lpVtbl->GetDisplayNameOf(T,a,b,c)
+#define IShellFolder2_SetNameOf(T,a,b,c,d,e) (T)->lpVtbl->SetNameOf(T,a,b,c,d,e)
+#define IShellFolder2_GetDefaultSearchGUID(T,a) (T)->lpVtbl->GetDefaultSearchGUID(T,a)
+#define IShellFolder2_EnumSearches(T,a) (T)->lpVtbl->EnumSearches(T,a)
+#define IShellFolder2_GetDefaultColumn(T,a,b,c) (T)->lpVtbl->GetDefaultColumn(T,a,b,c)
+#define IShellFolder2_GetDefaultColumnState(T,a,b) (T)->lpVtbl->GetDefaultColumnState(T,a,b)
+#define IShellFolder2_GetDetailsEx(T,a,b,c) (T)->lpVtbl->GetDetailsEx(T,a,b,c)
+#define IShellFolder2_GetDetailsOf(T,a,b,c) (T)->lpVtbl->GetDetailsOf(T,a,b,c)
+#define IShellFolder2_MapColumnToSCID(T,a,b) (T)->lpVtbl->MapColumnToSCID(T,a,b)
+#endif
+
+#endif /* _WIN32_IE >= 0x0500 */
+#define INTERFACE ICopyHook
+DECLARE_INTERFACE_(ICopyHook, IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD_(UINT,CopyCallback)(THIS_ HWND,UINT,UINT,LPCSTR,DWORD,LPCSTR,DWORD) PURE;
+};
+#undef INTERFACE
+typedef ICopyHook *LPCOPYHOOK;
+
+#define INTERFACE IFileViewerSite
+DECLARE_INTERFACE(IFileViewerSite)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(SetPinnedWindow)(THIS_ HWND) PURE;
+ STDMETHOD(GetPinnedWindow)(THIS_ HWND*) PURE;
+};
+#undef INTERFACE
+typedef IFileViewerSite *LPFILEVIEWERSITE;
+
+#define INTERFACE IFileViewer
+DECLARE_INTERFACE(IFileViewer)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(ShowInitialize)(THIS_ LPFILEVIEWERSITE) PURE;
+ STDMETHOD(Show)(THIS_ LPFVSHOWINFO) PURE;
+ STDMETHOD(PrintTo)(THIS_ LPSTR,BOOL) PURE;
+};
+#undef INTERFACE
+typedef IFileViewer *LPFILEVIEWER;
+
+#define INTERFACE IFileSystemBindData
+DECLARE_INTERFACE_(IFileSystemBindData, IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(SetFindData)(THIS_ const WIN32_FIND_DATAW*) PURE;
+ STDMETHOD(GetFindData)(THIS_ WIN32_FIND_DATAW*) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE IPersistFolder
+DECLARE_INTERFACE_(IPersistFolder,IPersist)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetClassID)(THIS_ CLSID*) PURE;
+ STDMETHOD(Initialize)(THIS_ LPCITEMIDLIST) PURE;
+};
+#undef INTERFACE
+typedef IPersistFolder *LPPERSISTFOLDER;
+
+#ifdef COBJMACROS
+#define IPersistFolder_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define IPersistFolder_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define IPersistFolder_Release(T) (T)->lpVtbl->Release(T)
+#define IPersistFolder_GetClassID(T,a) (T)->lpVtbl->GetClassID(T,a)
+#define IPersistFolder_Initialize(T,a) (T)->lpVtbl->Initialize(T,a)
+#endif
+
+#if (_WIN32_IE >= 0x0400 || _WIN32_WINNT >= 0x0500)
+
+#define INTERFACE IPersistFolder2
+DECLARE_INTERFACE_(IPersistFolder2,IPersistFolder)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetClassID)(THIS_ CLSID*) PURE;
+ STDMETHOD(Initialize)(THIS_ LPCITEMIDLIST) PURE;
+ STDMETHOD(GetCurFolder)(THIS_ LPITEMIDLIST*) PURE;
+};
+#undef INTERFACE
+typedef IPersistFolder2 *LPPERSISTFOLDER2;
+
+#ifdef COBJMACROS
+#define IPersistFolder2_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define IPersistFolder2_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define IPersistFolder2_Release(T) (T)->lpVtbl->Release(T)
+#define IPersistFolder2_GetClassID(T,a) (T)->lpVtbl->GetClassID(T,a)
+#define IPersistFolder2_Initialize(T,a) (T)->lpVtbl->Initialize(T,a)
+#define IPersistFolder2_GetCurFolder(T,a) (T)->lpVtbl->GetCurFolder(T,a)
+#endif
+
+#endif /* _WIN32_IE >= 0x0400 || _WIN32_WINNT >= 0x0500 */
+
+#if (_WIN32_IE >= 0x0500)
+
+#define INTERFACE IPersistFolder3
+DECLARE_INTERFACE_(IPersistFolder3,IPersistFolder2)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetClassID)(THIS_ CLSID*) PURE;
+ STDMETHOD(Initialize)(THIS_ LPCITEMIDLIST) PURE;
+ STDMETHOD(GetCurFolder)(THIS_ LPITEMIDLIST*) PURE;
+ STDMETHOD(InitializeEx)(THIS_ IBindCtx*,LPCITEMIDLIST,const PERSIST_FOLDER_TARGET_INFO*) PURE;
+ STDMETHOD(GetFolderTargetInfo)(THIS_ PERSIST_FOLDER_TARGET_INFO*) PURE;
+};
+#undef INTERFACE
+typedef IPersistFolder3 *LPPERSISTFOLDER3;
+
+#ifdef COBJMACROS
+#define IPersistFolder3_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define IPersistFolder3_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define IPersistFolder3_Release(T) (T)->lpVtbl->Release(T)
+#define IPersistFolder3_GetClassID(T,a) (T)->lpVtbl->GetClassID(T,a)
+#define IPersistFolder3_Initialize(T,a) (T)->lpVtbl->Initialize(T,a)
+#define IPersistFolder3_GetCurFolder(T,a) (T)->lpVtbl->GetCurFolder(T,a)
+#define IPersistFolder3_InitializeEx(T,a,b,c) (T)->lpVtbl->InitializeEx(T,a,b,c)
+#define IPersistFolder3_GetFolderTargetInfo(T,a) (T)->lpVtbl->GetFolderTargetInfo(T,a)
+#endif
+
+#endif /* _WIN32_IE >= 0x0500 */
+
+typedef _COM_interface IShellBrowser *LPSHELLBROWSER;
+typedef _COM_interface IShellView *LPSHELLVIEW;
+
+#define INTERFACE IShellBrowser
+DECLARE_INTERFACE_(IShellBrowser,IOleWindow)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetWindow)(THIS_ HWND*) PURE;
+ STDMETHOD(ContextSensitiveHelp)(THIS_ BOOL) PURE;
+ STDMETHOD(InsertMenusSB)(THIS_ HMENU,LPOLEMENUGROUPWIDTHS) PURE;
+ STDMETHOD(SetMenuSB)(THIS_ HMENU,HOLEMENU,HWND) PURE;
+ STDMETHOD(RemoveMenusSB)(THIS_ HMENU) PURE;
+ STDMETHOD(SetStatusTextSB)(THIS_ LPCOLESTR) PURE;
+ STDMETHOD(EnableModelessSB)(THIS_ BOOL) PURE;
+ STDMETHOD(TranslateAcceleratorSB) (THIS_ LPMSG,WORD) PURE;
+ STDMETHOD(BrowseObject)(THIS_ LPCITEMIDLIST,UINT) PURE;
+ STDMETHOD(GetViewStateStream)(THIS_ DWORD,LPSTREAM*) PURE;
+ STDMETHOD(GetControlWindow)(THIS_ UINT,HWND*) PURE;
+ STDMETHOD(SendControlMsg)(THIS_ UINT,UINT,WPARAM,LPARAM,LRESULT*) PURE;
+ STDMETHOD(QueryActiveShellView)(THIS_ LPSHELLVIEW*) PURE;
+ STDMETHOD(OnViewWindowActive)(THIS_ LPSHELLVIEW) PURE;
+ STDMETHOD(SetToolbarItems)(THIS_ LPTBBUTTON,UINT,UINT) PURE;
+};
+#undef INTERFACE
+
+#ifdef COBJMACROS
+#define IShellBrowser_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define IShellBrowser_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define IShellBrowser_Release(T) (T)->lpVtbl->Release(T)
+#define IShellBrowser_GetWindow(T,a) (T)->lpVtbl->GetWindow(T,a)
+#define IShellBrowser_ContextSensitiveHelp(T,a) (T)->lpVtbl->ContextSensitiveHelp(T,a)
+#define IShellBrowser_InsertMenusSB(T,a,b) (T)->lpVtbl->InsertMenusSB(T,a,b)
+#define IShellBrowser_SetMenuSB(T,a,b,c) (T)->lpVtbl->SetMenuSB(T,a,b,c)
+#define IShellBrowser_RemoveMenusSB(T,a) (T)->lpVtbl->RemoveMenusSB(T,a)
+#define IShellBrowser_SetStatusTextSB(T,a) (T)->lpVtbl->SetStatusTextSB(T,a)
+#define IShellBrowser_EnableModelessSB(T,a) (T)->lpVtbl->EnableModelessSB(T,a)
+#define IShellBrowser_TranslateAcceleratorSB(T,a,b) (T)->lpVtbl->TranslateAcceleratorSB(T,a,b)
+#define IShellBrowser_BrowseObject(T,a,b) (T)->lpVtbl->BrowseObject(T,a,b)
+#define IShellBrowser_GetViewStateStream(T,a,b) (T)->lpVtbl->GetViewStateStream(T,a,b)
+#define IShellBrowser_GetControlWindow(T,a,b) (T)->lpVtbl->GetControlWindow(T,a,b)
+#define IShellBrowser_SendControlMsg(T,a,b,c,d,e) (T)->lpVtbl->SendControlMsg(T,a,b,c,d,e)
+#define IShellBrowser_QueryActiveShellView(T,a) (T)->lpVtbl->QueryActiveShellView(T,a)
+#define IShellBrowser_OnViewWindowActive(T,a) (T)->lpVtbl->OnViewWindowActive(T,a)
+#define IShellBrowser_SetToolbarItems(T,a,b,c) (T)->lpVtbl->SetToolbarItems(T,a,b,c)
+#endif
+
+#define INTERFACE IShellView
+DECLARE_INTERFACE_(IShellView,IOleWindow)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetWindow)(THIS_ HWND*) PURE;
+ STDMETHOD(ContextSensitiveHelp)(THIS_ BOOL) PURE;
+ STDMETHOD(TranslateAccelerator) (THIS_ LPMSG) PURE;
+#ifdef _FIX_ENABLEMODELESS_CONFLICT
+ STDMETHOD(EnableModelessSV)(THIS_ BOOL) PURE;
+#else
+ STDMETHOD(EnableModeless)(THIS_ BOOL) PURE;
+#endif
+ STDMETHOD(UIActivate)(THIS_ UINT) PURE;
+ STDMETHOD(Refresh) (THIS) PURE;
+ STDMETHOD(CreateViewWindow)(THIS_ IShellView*,LPCFOLDERSETTINGS,LPSHELLBROWSER,RECT*,HWND*) PURE;
+ STDMETHOD(DestroyViewWindow)(THIS) PURE;
+ STDMETHOD(GetCurrentInfo)(THIS_ LPFOLDERSETTINGS) PURE;
+ STDMETHOD(AddPropertySheetPages)(THIS_ DWORD,LPFNADDPROPSHEETPAGE,LPARAM) PURE;
+ STDMETHOD(SaveViewState)(THIS) PURE;
+ STDMETHOD(SelectItem)(THIS_ LPCITEMIDLIST,UINT) PURE;
+ STDMETHOD(GetItemObject)(THIS_ UINT,REFIID,PVOID*) PURE;
+};
+#undef INTERFACE
+
+#ifdef COBJMACROS
+#define IShellView_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define IShellView_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define IShellView_Release(T) (T)->lpVtbl->Release(T)
+#define IShellView_GetWindow(T,a) (T)->lpVtbl->GetWindow(T,a)
+#define IShellView_ContextSensitiveHelp(T,a) (T)->lpVtbl->ContextSensitiveHelp(T,a)
+#define IShellView_TranslateAccelerator(T,a) (T)->lpVtbl->TranslateAccelerator(T,a)
+#ifdef _FIX_ENABLEMODELESS_CONFLICT
+#define IShellView_EnableModeless(T,a) (T)->lpVtbl->EnableModelessSV(T,a)
+#else
+#define IShellView_EnableModeless(T,a) (T)->lpVtbl->EnableModeless(T,a)
+#endif
+#define IShellView_UIActivate(T,a) (T)->lpVtbl->UIActivate(T,a)
+#define IShellView_Refresh(T) (T)->lpVtbl->Refresh(T)
+#define IShellView_CreateViewWindow(T,a,b,c,d,e) (T)->lpVtbl->CreateViewWindow(T,a,b,c,d,e)
+#define IShellView_DestroyViewWindow(T) (T)->lpVtbl->DestroyViewWindow(T)
+#define IShellView_GetCurrentInfo(T,a) (T)->lpVtbl->GetCurrentInfo(T,a)
+#define IShellView_AddPropertySheetPages(T,a,b,c) (T)->lpVtbl->AddPropertySheetPages(T,a,b,c)
+#define IShellView_SaveViewState(T) (T)->lpVtbl->SaveViewState(T)
+#define IShellView_SelectItem(T,a,b) (T)->lpVtbl->SelectItem(T,a,b)
+#define IShellView_GetItemObject(T,a,b,c) (T)->lpVtbl->GetItemObject(T,a,b,c)
+#endif
+
+#define INTERFACE ICommDlgBrowser
+DECLARE_INTERFACE_(ICommDlgBrowser,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(OnDefaultCommand)(THIS_ IShellView*) PURE;
+ STDMETHOD(OnStateChange)(THIS_ IShellView*,ULONG) PURE;
+ STDMETHOD(IncludeObject)(THIS_ IShellView*,LPCITEMIDLIST) PURE;
+};
+#undef INTERFACE
+typedef ICommDlgBrowser *LPCOMMDLGBROWSER;
+
+#ifdef COBJMACROS
+#define ICommDlgBrowser_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define ICommDlgBrowser_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define ICommDlgBrowser_Release(T) (T)->lpVtbl->Release(T)
+#define ICommDlgBrowser_OnDefaultCommand(T,a) (T)->lpVtbl->OnDefaultCommand(T,a)
+#define ICommDlgBrowser_OnStateChange(T,a,b) (T)->lpVtbl->OnStateChange(T,a,b)
+#define ICommDlgBrowser_IncludeObject(T,a,b) (T)->lpVtbl->IncludeObject(T,a,b)
+#endif
+
+typedef GUID SHELLVIEWID;
+typedef struct _SV2CVW2_PARAMS {
+ DWORD cbSize;
+ IShellView *psvPrev;
+ FOLDERSETTINGS const *pfs;
+ IShellBrowser *psbOwner;
+ RECT *prcView;
+ SHELLVIEWID const *pvid;
+ HWND hwndView;
+} SV2CVW2_PARAMS,*LPSV2CVW2_PARAMS;
+#define INTERFACE IShellView2
+DECLARE_INTERFACE_(IShellView2,IShellView)
+{
+
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetWindow)(THIS_ HWND*) PURE;
+ STDMETHOD(ContextSensitiveHelp)(THIS_ BOOL) PURE;
+ STDMETHOD(TranslateAccelerator) (THIS_ LPMSG) PURE;
+#ifdef _FIX_ENABLEMODELESS_CONFLICT
+ STDMETHOD(EnableModelessSV)(THIS_ BOOL) PURE;
+#else
+ STDMETHOD(EnableModeless)(THIS_ BOOL) PURE;
+#endif
+ STDMETHOD(UIActivate)(THIS_ UINT) PURE;
+ STDMETHOD(Refresh) (THIS) PURE;
+ STDMETHOD(CreateViewWindow)(THIS_ IShellView*,LPCFOLDERSETTINGS,LPSHELLBROWSER,RECT*,HWND*) PURE;
+ STDMETHOD(DestroyViewWindow)(THIS) PURE;
+ STDMETHOD(GetCurrentInfo)(THIS_ LPFOLDERSETTINGS) PURE;
+ STDMETHOD(AddPropertySheetPages)(THIS_ DWORD,LPFNADDPROPSHEETPAGE,LPARAM) PURE;
+ STDMETHOD(SaveViewState)(THIS) PURE;
+ STDMETHOD(SelectItem)(THIS_ LPCITEMIDLIST,UINT) PURE;
+ STDMETHOD(GetItemObject)(THIS_ UINT,REFIID,PVOID*) PURE;
+ STDMETHOD(GetView)(THIS_ SHELLVIEWID*,ULONG) PURE;
+ STDMETHOD(CreateViewWindow2)(THIS_ LPSV2CVW2_PARAMS) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE IShellExecuteHookA
+DECLARE_INTERFACE_(IShellExecuteHookA,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(Execute)(THIS_ LPSHELLEXECUTEINFOA) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE IShellExecuteHookW
+DECLARE_INTERFACE_(IShellExecuteHookW,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(Execute)(THIS_ LPSHELLEXECUTEINFOW) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE IShellIcon
+DECLARE_INTERFACE_(IShellIcon,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(GetIconOf)(THIS_ LPCITEMIDLIST,UINT,PINT) PURE;
+};
+#undef INTERFACE
+typedef IShellIcon *LPSHELLICON;
+
+typedef struct {
+ BOOL fShowAllObjects : 1;
+ BOOL fShowExtensions : 1;
+ BOOL fNoConfirmRecycle : 1;
+ BOOL fShowSysFiles : 1;
+ BOOL fShowCompColor : 1;
+ BOOL fDoubleClickInWebView : 1;
+ BOOL fDesktopHTML : 1;
+ BOOL fWin95Classic : 1;
+ BOOL fDontPrettyPath : 1;
+ BOOL fShowAttribCol : 1;
+ BOOL fMapNetDrvBtn : 1;
+ BOOL fShowInfoTip : 1;
+ BOOL fHideIcons : 1;
+ UINT fRestFlags : 3;
+} SHELLFLAGSTATE, * LPSHELLFLAGSTATE;
+
+#define SSF_SHOWALLOBJECTS 0x1
+#define SSF_SHOWEXTENSIONS 0x2
+#define SSF_SHOWCOMPCOLOR 0x8
+#define SSF_SHOWSYSFILES 0x20
+#define SSF_DOUBLECLICKINWEBVIEW 0x80
+#define SSF_SHOWATTRIBCOL 0x100
+#define SSF_DESKTOPHTML 0x200
+#define SSF_WIN95CLASSIC 0x400
+#define SSF_DONTPRETTYPATH 0x800
+#define SSF_MAPNETDRVBUTTON 0x1000
+#define SSF_SHOWINFOTIP 0x2000
+#define SSF_HIDEICONS 0x4000
+#define SSF_NOCONFIRMRECYCLE 0x8000
+
+#define INTERFACE IShellIconOverlayIdentifier
+DECLARE_INTERFACE_(IShellIconOverlayIdentifier,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(IsMemberOf)(THIS_ LPCWSTR,DWORD) PURE;
+ STDMETHOD(GetOverlayInfo)(THIS_ LPWSTR,int,int*,DWORD*) PURE;
+ STDMETHOD(GetPriority)(THIS_ int*) PURE;
+};
+#undef INTERFACE
+
+#define ISIOI_ICONFILE 0x00000001
+#define ISIOI_ICONINDEX 0x00000002
+
+#if (_WIN32_WINNT >= 0x0500) /* W2K */
+typedef struct {
+ BOOL fShowAllObjects : 1;
+ BOOL fShowExtensions : 1;
+ BOOL fNoConfirmRecycle : 1;
+ BOOL fShowSysFiles : 1;
+ BOOL fShowCompColor : 1;
+ BOOL fDoubleClickInWebView : 1;
+ BOOL fDesktopHTML : 1;
+ BOOL fWin95Classic : 1;
+ BOOL fDontPrettyPath : 1;
+ BOOL fShowAttribCol : 1;
+ BOOL fMapNetDrvBtn : 1;
+ BOOL fShowInfoTip : 1;
+ BOOL fHideIcons : 1;
+ BOOL fWebView : 1;
+ BOOL fFilter : 1;
+ BOOL fShowSuperHidden : 1;
+ BOOL fNoNetCrawling : 1;
+ DWORD dwWin95Unused;
+ UINT uWin95Unused;
+ LONG lParamSort;
+ int iSortDirection;
+ UINT version;
+ UINT uNotUsed;
+ BOOL fSepProcess : 1;
+ BOOL fStartPanelOn : 1;
+ BOOL fShowStartPage : 1;
+ UINT fSpareFlags : 13;
+} SHELLSTATE, *LPSHELLSTATE;
+#endif /* _WIN32_WINNT >= 0x0500 */
+
+#if (_WIN32_IE >= 0x0500)
+#pragma pack(push,8)
+typedef struct
+{
+ SIZE sizeDragImage;
+ POINT ptOffset;
+ HBITMAP hbmpDragImage;
+ COLORREF crColorKey;
+} SHDRAGIMAGE, *LPSHDRAGIMAGE;
+#pragma pack(pop)
+
+#define INTERFACE IDragSourceHelper
+DECLARE_INTERFACE_(IDragSourceHelper, IUnknown)
+{
+ STDMETHOD (QueryInterface)(THIS_ REFIID riid, void **ppv) PURE;
+ STDMETHOD_(ULONG, AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG, Release) (THIS) PURE;
+ STDMETHOD (InitializeFromBitmap)(THIS_ LPSHDRAGIMAGE pshdi, IDataObject* pDataObject) PURE;
+ STDMETHOD (InitializeFromWindow)(THIS_ HWND hwnd, POINT* ppt, IDataObject* pDataObject) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE IDropTargetHelper
+DECLARE_INTERFACE_(IDropTargetHelper, IUnknown)
+{
+ STDMETHOD (QueryInterface)(THIS_ REFIID riid, void** ppv) PURE;
+ STDMETHOD_(ULONG, AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG, Release) (THIS) PURE;
+ STDMETHOD (DragEnter)(THIS_ HWND hwndTarget, IDataObject* pDataObject, POINT* ppt, DWORD dwEffect) PURE;
+ STDMETHOD (DragLeave)(THIS) PURE;
+ STDMETHOD (DragOver)(THIS_ POINT* ppt, DWORD dwEffect) PURE;
+ STDMETHOD (Drop)(THIS_ IDataObject* pDataObject, POINT* ppt, DWORD dwEffect) PURE;
+ STDMETHOD (Show)(THIS_ BOOL fShow) PURE;
+};
+#undef INTERFACE
+#endif /* _WIN32_IE >= 0x0500 */
+
+#if (_WIN32_WINNT >= 0x0500)
+BOOL WINAPI PathResolve(LPWSTR, LPCWSTR*, UINT);
+#define PRF_VERIFYEXISTS 0x0001
+#define PRF_TRYPROGRAMEXTENSIONS (0x0002 | PRF_VERIFYEXISTS)
+#define PRF_FIRSTDIRDEF 0x0004
+#define PRF_DONTFINDLNK 0x0008
+#define IDO_SHGIOI_SHARE 0x0FFFFFFF
+#define IDO_SHGIOI_LINK 0x0FFFFFFE
+#define IDO_SHGIOI_SLOWFILE 0x0FFFFFFD
+#define IDO_SHGIOI_DEFAULT 0x0FFFFFFC
+#endif
+
+void WINAPI SHAddToRecentDocs(UINT,PCVOID);
+LPITEMIDLIST WINAPI SHBrowseForFolderA(PBROWSEINFOA);
+LPITEMIDLIST WINAPI SHBrowseForFolderW(PBROWSEINFOW);
+void WINAPI SHChangeNotify(LONG,UINT,PCVOID,PCVOID);
+HRESULT WINAPI SHGetDataFromIDListA(LPSHELLFOLDER,LPCITEMIDLIST,int,PVOID,int);
+HRESULT WINAPI SHGetDataFromIDListW(LPSHELLFOLDER,LPCITEMIDLIST,int,PVOID,int);
+HRESULT WINAPI SHGetDesktopFolder(LPSHELLFOLDER*);
+HRESULT WINAPI SHGetInstanceExplorer(IUnknown **);
+HRESULT WINAPI SHGetMalloc(LPMALLOC*);
+BOOL WINAPI SHGetPathFromIDListA(LPCITEMIDLIST,LPSTR);
+BOOL WINAPI SHGetPathFromIDListW(LPCITEMIDLIST,LPWSTR);
+HRESULT WINAPI SHGetSpecialFolderLocation(HWND,int,LPITEMIDLIST*);
+HRESULT WINAPI SHLoadInProc(REFCLSID);
+#if (_WIN32_IE >= 0x0400)
+BOOL WINAPI SHGetSpecialFolderPathA(HWND,LPSTR,int,BOOL);
+BOOL WINAPI SHGetSpecialFolderPathW(HWND,LPWSTR,int,BOOL);
+#endif
+/* SHGetFolderPath in shfolder.dll on W9x, NT4, also in shell32.dll on W2K */
+HRESULT WINAPI SHGetFolderPathA(HWND,int,HANDLE,DWORD,LPSTR);
+HRESULT WINAPI SHGetFolderPathW(HWND,int,HANDLE,DWORD,LPWSTR);
+#if (_WIN32_WINDOWS >= 0x0490) || (_WIN32_WINNT >= 0x0500) /* ME or W2K */
+HRESULT WINAPI SHGetFolderLocation(HWND,int,HANDLE,DWORD,LPITEMIDLIST*);
+#endif
+#if (_WIN32_WINNT >= 0x0500)
+INT WINAPI SHGetIconOverlayIndexW(LPCWSTR pszIconPath, int iIconIndex);
+INT WINAPI SHGetIconOverlayIndexA(LPCSTR pszIconPath, int iIconIndex);
+INT WINAPI SHCreateDirectoryExA(HWND,LPCSTR,LPSECURITY_ATTRIBUTES);
+INT WINAPI SHCreateDirectoryExW(HWND,LPCWSTR,LPSECURITY_ATTRIBUTES);
+HRESULT WINAPI SHBindToParent(LPCITEMIDLIST,REFIID,VOID**,LPCITEMIDLIST*);
+#endif
+#if (_WIN32_WINNT >= 0x0501) /* XP */
+HRESULT WINAPI SHGetFolderPathAndSubDirA(HWND,int,HANDLE,DWORD,LPCSTR,LPSTR);
+HRESULT WINAPI SHGetFolderPathAndSubDirW(HWND,int,HANDLE,DWORD,LPCWSTR,LPWSTR);
+HRESULT WINAPI SHParseDisplayName(LPCWSTR,IBindCtx*,LPITEMIDLIST,SFGAOF,SFGAOF*);
+#endif
+void WINAPI SHGetSettings(LPSHELLFLAGSTATE,DWORD);
+#if (_WIN32_WINNT >= 0x0500) /* W2K */
+void WINAPI SHGetSetSettings(LPSHELLSTATE,DWORD,BOOL);
+#endif
+
+#if (_WIN32_WINNT >= 0x0500) /* W2K */
+BOOL WINAPI ILIsEqual(LPCITEMIDLIST, LPCITEMIDLIST);
+BOOL WINAPI ILIsParent(LPCITEMIDLIST, LPCITEMIDLIST, BOOL);
+BOOL WINAPI ILRemoveLastID(LPITEMIDLIST);
+HRESULT WINAPI ILLoadFromStream(IStream*, LPITEMIDLIST*);
+HRESULT WINAPI ILSaveToStream(IStream*, LPCITEMIDLIST);
+LPITEMIDLIST WINAPI ILAppendID(LPITEMIDLIST, LPCSHITEMID, BOOL);
+LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST);
+LPITEMIDLIST WINAPI ILCloneFirst(LPCITEMIDLIST);
+LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST, LPCITEMIDLIST);
+LPITEMIDLIST WINAPI ILFindChild(LPCITEMIDLIST, LPCITEMIDLIST);
+LPITEMIDLIST WINAPI ILFindLastID(LPCITEMIDLIST);
+LPITEMIDLIST WINAPI ILGetNext(LPCITEMIDLIST);
+UINT WINAPI ILGetSize(LPCITEMIDLIST);
+void WINAPI ILFree(LPITEMIDLIST);
+
+HRESULT WINAPI SHCoCreateInstance(LPCWSTR,REFCLSID,IUnknown*,REFIID,void**);
+#endif
+
+#ifdef UNICODE
+typedef IShellExecuteHookW IShellExecuteHook;
+typedef IShellLinkW IShellLink;
+typedef BROWSEINFOW BROWSEINFO,*PBROWSEINFO,*LPBROWSEINFO;
+#define SHBrowseForFolder SHBrowseForFolderW
+#define SHGetDataFromIDList SHGetDataFromIDListW
+#define SHGetPathFromIDList SHGetPathFromIDListW
+#if (_WIN32_IE >= 0x0400)
+#define SHGetSpecialFolderPath SHGetSpecialFolderPathW
+#endif
+#define SHGetFolderPath SHGetFolderPathW
+#if (_WIN32_WINNT >= 0x0500)
+#define SHGetIconOverlayIndex SHGetIconOverlayIndexW
+#define SHCreateDirectoryEx SHCreateDirectoryExW
+#endif
+#if (_WIN32_WINNT >= 0x0501)
+#define SHGetFolderPathAndSubDir SHGetFolderPathAndSubDirW
+#endif
+#define FILEDESCRIPTOR FILEDESCRIPTORW
+#define LPFILEDESCRIPTOR LPFILEDESCRIPTORW
+#define FILEGROUPDESCRIPTOR FILEGROUPDESCRIPTORW
+#define LPFILEGROUPDESCRIPTOR LPFILEGROUPDESCRIPTORW
+
+#else
+typedef IShellExecuteHookA IShellExecuteHook;
+typedef IShellLinkA IShellLink;
+typedef BROWSEINFOA BROWSEINFO,*PBROWSEINFO,*LPBROWSEINFO;
+#define SHBrowseForFolder SHBrowseForFolderA
+#define SHGetDataFromIDList SHGetDataFromIDListA
+#define SHGetPathFromIDList SHGetPathFromIDListA
+#if (_WIN32_IE >= 0x0400)
+#define SHGetSpecialFolderPath SHGetSpecialFolderPathA
+#endif
+#define SHGetFolderPath SHGetFolderPathA
+#if (_WIN32_WINNT >= 0x0500)
+#define SHGetIconOverlayIndex SHGetIconOverlayIndexA
+#define SHCreateDirectoryEx SHCreateDirectoryExA
+#endif
+#if (_WIN32_WINNT >= 0x0501)
+#define SHGetFolderPathAndSubDir SHGetFolderPathAndSubDirA
+#endif
+#define FILEDESCRIPTOR FILEDESCRIPTORA
+#define LPFILEDESCRIPTOR LPFILEDESCRIPTORA
+#define FILEGROUPDESCRIPTOR FILEGROUPDESCRIPTORA
+#define LPFILEGROUPDESCRIPTOR LPFILEGROUPDESCRIPTORA
+#endif /* UNICODE */
+
+DWORD WINAPI SHFormatDrive(HWND,UINT,UINT,UINT);
+
+#define SHFMT_ID_DEFAULT 0xFFFF
+#define SHFMT_OPT_FULL 1
+#define SHFMT_OPT_SYSONLY 2
+#define SHFMT_ERROR 0xFFFFFFFF
+#define SHFMT_CANCEL 0xFFFFFFFE
+#define SHFMT_NOFORMAT 0xFFFFFFFD
+
+#pragma pack(pop)
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* _SHLOBJ_H */
diff --git a/tcc/include/winapi/shlwapi.h b/tcc/include/winapi/shlwapi.h
new file mode 100644
index 0000000..aaa01e7
--- /dev/null
+++ b/tcc/include/winapi/shlwapi.h
@@ -0,0 +1,736 @@
+#ifndef _SHLWAPI_H
+#define _SHLWAPI_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _OBJC_NO_COM
+#include <objbase.h>
+#include <shlobj.h>
+#endif
+
+#ifndef WINSHLWAPI
+#define WINSHLWAPI DECLSPEC_IMPORT
+#endif
+
+#define DLLVER_PLATFORM_WINDOWS 0x00000001
+#define DLLVER_PLATFORM_NT 0x00000002
+
+#define URL_DONT_ESCAPE_EXTRA_INFO 0x02000000
+#define URL_DONT_SIMPLIFY 0x08000000
+#define URL_ESCAPE_PERCENT 0x00001000
+#define URL_ESCAPE_SEGMENT_ONLY 0x00002000
+#define URL_ESCAPE_SPACES_ONLY 0x04000000
+#define URL_ESCAPE_UNSAFE 0x20000000
+#define URL_INTERNAL_PATH 0x00800000
+#define URL_PARTFLAG_KEEPSCHEME 0x00000001
+#define URL_PLUGGABLE_PROTOCOL 0x40000000
+#define URL_UNESCAPE 0x10000000
+#define URL_UNESCAPE_HIGH_ANSI_ONLY 0x00400000
+#define URL_UNESCAPE_INPLACE 0x00100000
+
+#ifndef RC_INVOKED
+#include <pshpack1.h>
+typedef struct _DllVersionInfo
+{
+ DWORD cbSize;
+ DWORD dwMajorVersion;
+ DWORD dwMinorVersion;
+ DWORD dwBuildNumber;
+ DWORD dwPlatformID;
+} DLLVERSIONINFO;
+typedef struct _DLLVERSIONINFO2
+{
+ DLLVERSIONINFO info1;
+ DWORD dwFlags;
+ ULONGLONG ullVersion;
+} DLLVERSIONINFO2;
+#include <poppack.h>
+
+#define MAKEDLLVERULL(major, minor, build, qfe) \
+ (((ULONGLONG)(major) << 48) | \
+ ((ULONGLONG)(minor) << 32) | \
+ ((ULONGLONG)(build) << 16) | \
+ ((ULONGLONG)( qfe) << 0))
+
+typedef enum {
+ ASSOCSTR_COMMAND = 1,
+ ASSOCSTR_EXECUTABLE,
+ ASSOCSTR_FRIENDLYDOCNAME,
+ ASSOCSTR_FRIENDLYAPPNAME,
+ ASSOCSTR_NOOPEN,
+ ASSOCSTR_SHELLNEWVALUE,
+ ASSOCSTR_DDECOMMAND,
+ ASSOCSTR_DDEIFEXEC,
+ ASSOCSTR_DDEAPPLICATION,
+ ASSOCSTR_DDETOPIC,
+ ASSOCSTR_INFOTIP
+#ifdef _WIN32_IE >= 0x0600
+ ,
+ ASSOCSTR_QUICKTIP,
+ ASSOCSTR_TILEINFO,
+ ASSOCSTR_CONTENTTYPE,
+ ASSOCSTR_DEFAULTICON,
+ ASSOCSTR_SHELLEXTENSION
+#endif
+} ASSOCSTR;
+typedef enum
+{
+ ASSOCKEY_SHELLEXECCLASS = 1,
+ ASSOCKEY_APP,
+ ASSOCKEY_CLASS,
+ ASSOCKEY_BASECLASS
+} ASSOCKEY;
+typedef enum
+{
+ ASSOCDATA_MSIDESCRIPTOR = 1,
+ ASSOCDATA_NOACTIVATEHANDLER,
+ ASSOCDATA_QUERYCLASSSTORE
+} ASSOCDATA;
+typedef enum {
+ ASSOCF_INIT_NOREMAPCLSID = 0x00000001,
+ ASSOCF_INIT_BYEXENAME = 0x00000002,
+ ASSOCF_OPEN_BYEXENAME = 0x00000002,
+ ASSOCF_INIT_DEFAULTTOSTAR = 0x00000004,
+ ASSOCF_INIT_DEFAULTTOFOLDER = 0x00000008,
+ ASSOCF_NOUSERSETTINGS = 0x00000010,
+ ASSOCF_NOTRUNCATE = 0x00000020,
+ ASSOCF_VERIFY = 0x00000040,
+ ASSOCF_REMAPRUNDLL = 0x00000080,
+ ASSOCF_NOFIXUPS = 0x00000100,
+ ASSOCF_IGNOREBASECLASS = 0x00000200,
+ ASSOCF_INIT_IGNOREUNKNOWN = 0x00000400
+} ASSOCF;
+typedef enum
+{
+ SHREGDEL_DEFAULT = 0x00000000,
+ SHREGDEL_HKCU = 0x00000001,
+ SHREGDEL_HKLM = 0x00000010,
+ SHREGDEL_BOTH = 0x00000011
+} SHREGDEL_FLAGS;
+typedef enum
+{
+ SHREGENUM_DEFAULT = 0x00000000,
+ SHREGENUM_HKCU = 0x00000001,
+ SHREGENUM_HKLM = 0x00000010,
+ SHREGENUM_BOTH = 0x00000011
+} SHREGENUM_FLAGS;
+typedef enum
+{
+ URLIS_URL,
+ URLIS_OPAQUE,
+ URLIS_NOHISTORY,
+ URLIS_FILEURL,
+ URLIS_APPLIABLE,
+ URLIS_DIRECTORY,
+ URLIS_HASQUERY
+} URLIS;
+
+typedef HANDLE HUSKEY, *PHUSKEY;
+
+typedef HRESULT (WINAPI* DLLGETVERSIONPROC)(DLLVERSIONINFO *);
+
+WINSHLWAPI BOOL WINAPI ChrCmpIA(WORD,WORD);
+WINSHLWAPI BOOL WINAPI ChrCmpIW(WCHAR,WCHAR);
+#define IntlStrEqNA(pStr1, pStr2, nChar) IntlStrEqWorkerA(TRUE, pStr1, pStr2, nChar);
+#define IntlStrEqNW(pStr1, pStr2, nChar) IntlStrEqWorkerW(TRUE, pStr1, pStr2, nChar);
+#define IntlStrEqNIA(pStr1, pStr2, nChar) IntlStrEqWorkerA(FALSE, pStr1, pStr2, nChar);
+#define IntlStrEqNIW(pStr1, pStr2, nChar) IntlStrEqWorkerW(FALSE, pStr1, pStr2, nChar);
+WINSHLWAPI BOOL WINAPI IntlStrEqWorkerA(BOOL,LPCSTR,LPCSTR,int);
+WINSHLWAPI BOOL WINAPI IntlStrEqWorkerW(BOOL,LPCWSTR,LPCWSTR,int);
+WINSHLWAPI HRESULT WINAPI SHStrDupA(LPCSTR,LPWSTR*);
+WINSHLWAPI HRESULT WINAPI SHStrDupW(LPCWSTR,LPWSTR*);
+WINSHLWAPI LPSTR WINAPI StrCatA(LPSTR,LPCSTR);
+WINSHLWAPI LPWSTR WINAPI StrCatW(LPWSTR,LPCWSTR);
+WINSHLWAPI LPSTR WINAPI StrCatBuffA(LPSTR,LPCSTR,int);
+WINSHLWAPI LPWSTR WINAPI StrCatBuffW(LPWSTR,LPCWSTR,int);
+WINSHLWAPI DWORD WINAPI StrCatChainW(LPWSTR,DWORD,DWORD,LPCWSTR);
+WINSHLWAPI LPSTR WINAPI StrChrA(LPCSTR,WORD);
+WINSHLWAPI LPWSTR WINAPI StrChrW(LPCWSTR,WCHAR);
+WINSHLWAPI LPSTR WINAPI StrChrIA(LPCSTR,WORD);
+WINSHLWAPI LPWSTR WINAPI StrChrIW(LPCWSTR,WCHAR);
+#define StrCmpIA lstrcmpiA
+#define StrCmpA lstrcmpA
+#define StrCpyA lstrcpyA
+#define StrCpyNA lstrcpynA
+WINSHLWAPI int WINAPI StrCmpIW(LPCWSTR,LPCWSTR);
+WINSHLWAPI int WINAPI StrCmpW(LPCWSTR,LPCWSTR);
+WINSHLWAPI LPWSTR WINAPI StrCpyW(LPWSTR,LPCWSTR);
+WINSHLWAPI LPWSTR WINAPI StrCpyNW(LPWSTR,LPCWSTR,int);
+WINSHLWAPI int WINAPI StrCmpNA(LPCSTR,LPCSTR,int);
+WINSHLWAPI int WINAPI StrCmpNW(LPCWSTR,LPCWSTR,int);
+WINSHLWAPI int WINAPI StrCmpNIA(LPCSTR,LPCSTR,int);
+WINSHLWAPI int WINAPI StrCmpNIW(LPCWSTR,LPCWSTR,int);
+WINSHLWAPI int WINAPI StrCSpnA(LPCSTR,LPCSTR);
+WINSHLWAPI int WINAPI StrCSpnW(LPCWSTR,LPCWSTR);
+WINSHLWAPI int WINAPI StrCSpnIA(LPCSTR,LPCSTR);
+WINSHLWAPI int WINAPI StrCSpnIW(LPCWSTR,LPCWSTR);
+WINSHLWAPI LPSTR WINAPI StrDupA(LPCSTR);
+WINSHLWAPI LPWSTR WINAPI StrDupW(LPCWSTR);
+WINSHLWAPI LPSTR WINAPI StrFormatByteSize64A(LONGLONG,LPSTR,UINT);
+WINSHLWAPI LPSTR WINAPI StrFormatByteSizeA(DWORD,LPSTR,UINT);
+WINSHLWAPI LPWSTR WINAPI StrFormatByteSizeW(LONGLONG,LPWSTR,UINT);
+WINSHLWAPI LPSTR WINAPI StrFormatKBSizeA(LONGLONG,LPSTR,UINT);
+WINSHLWAPI LPWSTR WINAPI StrFormatKBSizeW(LONGLONG,LPWSTR,UINT);
+WINSHLWAPI int WINAPI StrFromTimeIntervalA(LPSTR,UINT,DWORD,int);
+WINSHLWAPI int WINAPI StrFromTimeIntervalW(LPWSTR,UINT,DWORD,int);
+WINSHLWAPI BOOL WINAPI StrIsIntlEqualA(BOOL,LPCSTR,LPCSTR,int);
+WINSHLWAPI BOOL WINAPI StrIsIntlEqualW(BOOL,LPCWSTR,LPCWSTR,int);
+WINSHLWAPI LPSTR WINAPI StrNCatA(LPSTR,LPCSTR,int);
+WINSHLWAPI LPWSTR WINAPI StrNCatW(LPWSTR,LPCWSTR,int);
+WINSHLWAPI LPSTR WINAPI StrPBrkA(LPCSTR,LPCSTR);
+WINSHLWAPI LPWSTR WINAPI StrPBrkW(LPCWSTR,LPCWSTR);
+WINSHLWAPI LPSTR WINAPI StrRChrA(LPCSTR,LPCSTR,WORD);
+WINSHLWAPI LPWSTR WINAPI StrRChrW(LPCWSTR,LPCWSTR,WCHAR);
+WINSHLWAPI LPSTR WINAPI StrRChrIA(LPCSTR,LPCSTR,WORD);
+WINSHLWAPI LPWSTR WINAPI StrRChrIW(LPCWSTR,LPCWSTR,WCHAR);
+#ifndef _OBJC_NO_COM
+WINSHLWAPI HRESULT WINAPI StrRetToBufA(LPSTRRET,LPCITEMIDLIST,LPSTR,UINT);
+WINSHLWAPI HRESULT WINAPI StrRetToBufW(LPSTRRET,LPCITEMIDLIST,LPWSTR,UINT);
+WINSHLWAPI HRESULT WINAPI StrRetToStrA(LPSTRRET,LPCITEMIDLIST,LPSTR*);
+WINSHLWAPI HRESULT WINAPI StrRetToStrW(LPSTRRET,LPCITEMIDLIST,LPWSTR*);
+#endif
+WINSHLWAPI LPSTR WINAPI StrRStrIA(LPCSTR,LPCSTR,LPCSTR);
+WINSHLWAPI LPWSTR WINAPI StrRStrIW(LPCWSTR,LPCWSTR,LPCWSTR);
+WINSHLWAPI int WINAPI StrSpnA(LPCSTR,LPCSTR);
+WINSHLWAPI int WINAPI StrSpnW(LPCWSTR,LPCWSTR);
+WINSHLWAPI LPSTR WINAPI StrStrA(LPCSTR, LPCSTR);
+WINSHLWAPI LPSTR WINAPI StrStrIA(LPCSTR,LPCSTR);
+WINSHLWAPI LPWSTR WINAPI StrStrIW(LPCWSTR,LPCWSTR);
+WINSHLWAPI LPWSTR WINAPI StrStrW(LPCWSTR,LPCWSTR);
+WINSHLWAPI int WINAPI StrToIntA(LPCSTR);
+WINSHLWAPI int WINAPI StrToIntW(LPCWSTR);
+#define STIF_DEFAULT 0x0L
+#define STIF_SUPPORT_HEX 0x1L
+WINSHLWAPI BOOL WINAPI StrToIntExA(LPCSTR,DWORD,int*);
+WINSHLWAPI BOOL WINAPI StrToIntExW(LPCWSTR,DWORD,int*);
+WINSHLWAPI BOOL WINAPI StrTrimA(LPSTR,LPCSTR);
+WINSHLWAPI BOOL WINAPI StrTrimW(LPWSTR,LPCWSTR);
+WINSHLWAPI LPSTR WINAPI PathAddBackslashA(LPSTR);
+WINSHLWAPI LPWSTR WINAPI PathAddBackslashW(LPWSTR);
+WINSHLWAPI BOOL WINAPI PathAddExtensionA(LPSTR,LPCSTR);
+WINSHLWAPI BOOL WINAPI PathAddExtensionW(LPWSTR,LPCWSTR);
+WINSHLWAPI BOOL WINAPI PathAppendA(LPSTR,LPCSTR);
+WINSHLWAPI BOOL WINAPI PathAppendW(LPWSTR,LPCWSTR);
+WINSHLWAPI LPSTR WINAPI PathBuildRootA(LPSTR,int);
+WINSHLWAPI LPWSTR WINAPI PathBuildRootW(LPWSTR,int);
+WINSHLWAPI BOOL WINAPI PathCanonicalizeA(LPSTR,LPCSTR);
+WINSHLWAPI BOOL WINAPI PathCanonicalizeW(LPWSTR,LPCWSTR);
+WINSHLWAPI LPSTR WINAPI PathCombineA(LPSTR,LPCSTR,LPCSTR);
+WINSHLWAPI LPWSTR WINAPI PathCombineW(LPWSTR,LPCWSTR,LPCWSTR);
+WINSHLWAPI int WINAPI PathCommonPrefixA(LPCSTR,LPCSTR,LPSTR);
+WINSHLWAPI int WINAPI PathCommonPrefixW(LPCWSTR,LPCWSTR,LPWSTR);
+WINSHLWAPI BOOL WINAPI PathCompactPathA(HDC,LPSTR,UINT);
+WINSHLWAPI BOOL WINAPI PathCompactPathW(HDC,LPWSTR,UINT);
+WINSHLWAPI BOOL WINAPI PathCompactPathExA(LPSTR,LPCSTR,UINT,DWORD);
+WINSHLWAPI BOOL WINAPI PathCompactPathExW(LPWSTR,LPCWSTR,UINT,DWORD);
+WINSHLWAPI HRESULT WINAPI PathCreateFromUrlA(LPCSTR,LPSTR,LPDWORD,DWORD);
+WINSHLWAPI HRESULT WINAPI PathCreateFromUrlW(LPCWSTR,LPWSTR,LPDWORD,DWORD);
+WINSHLWAPI BOOL WINAPI PathFileExistsA(LPCSTR);
+WINSHLWAPI BOOL WINAPI PathFileExistsW(LPCWSTR);
+WINSHLWAPI LPSTR WINAPI PathFindExtensionA(LPCSTR);
+WINSHLWAPI LPWSTR WINAPI PathFindExtensionW(LPCWSTR);
+WINSHLWAPI LPSTR WINAPI PathFindFileNameA(LPCSTR);
+WINSHLWAPI LPWSTR WINAPI PathFindFileNameW(LPCWSTR);
+WINSHLWAPI LPSTR WINAPI PathFindNextComponentA(LPCSTR);
+WINSHLWAPI LPWSTR WINAPI PathFindNextComponentW(LPCWSTR);
+WINSHLWAPI BOOL WINAPI PathFindOnPathA(LPSTR,LPCSTR*);
+WINSHLWAPI BOOL WINAPI PathFindOnPathW(LPWSTR,LPCWSTR*);
+WINSHLWAPI LPCSTR WINAPI PathFindSuffixArrayA(LPCSTR,LPCSTR*,int);
+WINSHLWAPI LPCWSTR WINAPI PathFindSuffixArrayW(LPCWSTR,LPCWSTR*,int);
+WINSHLWAPI LPSTR WINAPI PathGetArgsA(LPCSTR);
+WINSHLWAPI LPWSTR WINAPI PathGetArgsW(LPCWSTR);
+WINSHLWAPI UINT WINAPI PathGetCharTypeA(UCHAR);
+WINSHLWAPI UINT WINAPI PathGetCharTypeW(WCHAR);
+WINSHLWAPI int WINAPI PathGetDriveNumberA(LPCSTR);
+WINSHLWAPI int WINAPI PathGetDriveNumberW(LPCWSTR);
+WINSHLWAPI BOOL WINAPI PathIsContentTypeA(LPCSTR,LPCSTR);
+WINSHLWAPI BOOL WINAPI PathIsContentTypeW(LPCWSTR,LPCWSTR);
+WINSHLWAPI BOOL WINAPI PathIsDirectoryA(LPCSTR);
+WINSHLWAPI BOOL WINAPI PathIsDirectoryEmptyA(LPCSTR);
+WINSHLWAPI BOOL WINAPI PathIsDirectoryEmptyW(LPCWSTR);
+WINSHLWAPI BOOL WINAPI PathIsDirectoryW(LPCWSTR);
+WINSHLWAPI BOOL WINAPI PathIsFileSpecA(LPCSTR);
+WINSHLWAPI BOOL WINAPI PathIsFileSpecW(LPCWSTR);
+WINSHLWAPI BOOL WINAPI PathIsLFNFileSpecA(LPCSTR);
+WINSHLWAPI BOOL WINAPI PathIsLFNFileSpecW(LPCWSTR);
+WINSHLWAPI BOOL WINAPI PathIsNetworkPathA(LPCSTR);
+WINSHLWAPI BOOL WINAPI PathIsNetworkPathW(LPCWSTR);
+WINSHLWAPI BOOL WINAPI PathIsPrefixA(LPCSTR,LPCSTR);
+WINSHLWAPI BOOL WINAPI PathIsPrefixW(LPCWSTR,LPCWSTR);
+WINSHLWAPI BOOL WINAPI PathIsRelativeA(LPCSTR);
+WINSHLWAPI BOOL WINAPI PathIsRelativeW(LPCWSTR);
+WINSHLWAPI BOOL WINAPI PathIsRootA(LPCSTR);
+WINSHLWAPI BOOL WINAPI PathIsRootW(LPCWSTR);
+WINSHLWAPI BOOL WINAPI PathIsSameRootA(LPCSTR,LPCSTR);
+WINSHLWAPI BOOL WINAPI PathIsSameRootW(LPCWSTR,LPCWSTR);
+WINSHLWAPI BOOL WINAPI PathIsSystemFolderA(LPCSTR,DWORD);
+WINSHLWAPI BOOL WINAPI PathIsSystemFolderW(LPCWSTR,DWORD);
+WINSHLWAPI BOOL WINAPI PathIsUNCA(LPCSTR);
+WINSHLWAPI BOOL WINAPI PathIsUNCServerA(LPCSTR);
+WINSHLWAPI BOOL WINAPI PathIsUNCServerShareA(LPCSTR);
+WINSHLWAPI BOOL WINAPI PathIsUNCServerShareW(LPCWSTR);
+WINSHLWAPI BOOL WINAPI PathIsUNCServerW(LPCWSTR);
+WINSHLWAPI BOOL WINAPI PathIsUNCW(LPCWSTR);
+WINSHLWAPI BOOL WINAPI PathIsURLA(LPCSTR);
+WINSHLWAPI BOOL WINAPI PathIsURLW(LPCWSTR);
+WINSHLWAPI BOOL WINAPI PathMakePrettyA(LPSTR);
+WINSHLWAPI BOOL WINAPI PathMakePrettyW(LPWSTR);
+WINSHLWAPI BOOL WINAPI PathMakeSystemFolderA(LPSTR);
+WINSHLWAPI BOOL WINAPI PathMakeSystemFolderW(LPWSTR);
+WINSHLWAPI BOOL WINAPI PathMatchSpecA(LPCSTR,LPCSTR);
+WINSHLWAPI BOOL WINAPI PathMatchSpecW(LPCWSTR,LPCWSTR);
+WINSHLWAPI int WINAPI PathParseIconLocationA(LPSTR);
+WINSHLWAPI int WINAPI PathParseIconLocationW(LPWSTR);
+WINSHLWAPI void WINAPI PathQuoteSpacesA(LPSTR);
+WINSHLWAPI void WINAPI PathQuoteSpacesW(LPWSTR);
+WINSHLWAPI BOOL WINAPI PathRelativePathToA(LPSTR,LPCSTR,DWORD,LPCSTR,DWORD);
+WINSHLWAPI BOOL WINAPI PathRelativePathToW(LPWSTR,LPCWSTR,DWORD,LPCWSTR,DWORD);
+WINSHLWAPI void WINAPI PathRemoveArgsA(LPSTR);
+WINSHLWAPI void WINAPI PathRemoveArgsW(LPWSTR);
+WINSHLWAPI LPSTR WINAPI PathRemoveBackslashA(LPSTR);
+WINSHLWAPI LPWSTR WINAPI PathRemoveBackslashW(LPWSTR);
+WINSHLWAPI void WINAPI PathRemoveBlanksA(LPSTR);
+WINSHLWAPI void WINAPI PathRemoveBlanksW(LPWSTR);
+WINSHLWAPI void WINAPI PathRemoveExtensionA(LPSTR);
+WINSHLWAPI void WINAPI PathRemoveExtensionW(LPWSTR);
+WINSHLWAPI BOOL WINAPI PathRemoveFileSpecA(LPSTR);
+WINSHLWAPI BOOL WINAPI PathRemoveFileSpecW(LPWSTR);
+WINSHLWAPI BOOL WINAPI PathRenameExtensionA(LPSTR,LPCSTR);
+WINSHLWAPI BOOL WINAPI PathRenameExtensionW(LPWSTR,LPCWSTR);
+WINSHLWAPI BOOL WINAPI PathSearchAndQualifyA(LPCSTR,LPSTR,UINT);
+WINSHLWAPI BOOL WINAPI PathSearchAndQualifyW(LPCWSTR,LPWSTR,UINT);
+WINSHLWAPI void WINAPI PathSetDlgItemPathA(HWND,int,LPCSTR);
+WINSHLWAPI void WINAPI PathSetDlgItemPathW(HWND,int,LPCWSTR);
+WINSHLWAPI LPSTR WINAPI PathSkipRootA(LPCSTR);
+WINSHLWAPI LPWSTR WINAPI PathSkipRootW(LPCWSTR);
+WINSHLWAPI void WINAPI PathStripPathA(LPSTR);
+WINSHLWAPI void WINAPI PathStripPathW(LPWSTR);
+WINSHLWAPI BOOL WINAPI PathStripToRootA(LPSTR);
+WINSHLWAPI BOOL WINAPI PathStripToRootW(LPWSTR);
+WINSHLWAPI void WINAPI PathUndecorateA(LPSTR);
+WINSHLWAPI void WINAPI PathUndecorateW(LPWSTR);
+WINSHLWAPI BOOL WINAPI PathUnExpandEnvStringsA(LPCSTR,LPSTR,UINT);
+WINSHLWAPI BOOL WINAPI PathUnExpandEnvStringsW(LPCWSTR,LPWSTR,UINT);
+WINSHLWAPI BOOL WINAPI PathUnmakeSystemFolderA(LPSTR);
+WINSHLWAPI BOOL WINAPI PathUnmakeSystemFolderW(LPWSTR);
+WINSHLWAPI void WINAPI PathUnquoteSpacesA(LPSTR);
+WINSHLWAPI void WINAPI PathUnquoteSpacesW(LPWSTR);
+WINSHLWAPI HRESULT WINAPI SHAutoComplete(HWND,DWORD);
+#ifndef _OBJC_NO_COM
+WINSHLWAPI HRESULT WINAPI SHCreateStreamOnFileA(LPCSTR,DWORD,struct IStream**);
+WINSHLWAPI HRESULT WINAPI SHCreateStreamOnFileW(LPCWSTR,DWORD,struct IStream**);
+WINSHLWAPI struct IStream* WINAPI SHOpenRegStream2A(HKEY,LPCSTR,LPCSTR,DWORD);
+WINSHLWAPI struct IStream* WINAPI SHOpenRegStream2W(HKEY,LPCWSTR,LPCWSTR,DWORD);
+WINSHLWAPI struct IStream* WINAPI SHOpenRegStreamA(HKEY,LPCSTR,LPCSTR,DWORD);
+WINSHLWAPI struct IStream* WINAPI SHOpenRegStreamW(HKEY,LPCWSTR,LPCWSTR,DWORD);
+#endif
+WINSHLWAPI BOOL WINAPI SHCreateThread(LPTHREAD_START_ROUTINE,void*,DWORD,LPTHREAD_START_ROUTINE);
+WINSHLWAPI DWORD WINAPI SHCopyKeyA(HKEY,LPCSTR,HKEY,DWORD);
+WINSHLWAPI DWORD WINAPI SHCopyKeyW(HKEY,LPCWSTR,HKEY,DWORD);
+WINSHLWAPI DWORD WINAPI SHDeleteEmptyKeyA(HKEY,LPCSTR);
+WINSHLWAPI DWORD WINAPI SHDeleteEmptyKeyW(HKEY,LPCWSTR);
+WINSHLWAPI DWORD WINAPI SHDeleteKeyA(HKEY,LPCSTR);
+WINSHLWAPI DWORD WINAPI SHDeleteKeyW(HKEY,LPCWSTR);
+WINSHLWAPI DWORD WINAPI SHEnumKeyExA(HKEY,DWORD,LPSTR,LPDWORD);
+WINSHLWAPI DWORD WINAPI SHEnumKeyExW(HKEY,DWORD,LPWSTR,LPDWORD);
+WINSHLWAPI DWORD WINAPI SHQueryInfoKeyA(HKEY,LPDWORD,LPDWORD,LPDWORD,LPDWORD);
+WINSHLWAPI DWORD WINAPI SHQueryInfoKeyW(HKEY,LPDWORD,LPDWORD,LPDWORD,LPDWORD);
+WINSHLWAPI DWORD WINAPI SHQueryValueExA(HKEY,LPCSTR,LPDWORD,LPDWORD,LPVOID,LPDWORD);
+WINSHLWAPI DWORD WINAPI SHQueryValueExW(HKEY,LPCWSTR,LPDWORD,LPDWORD,LPVOID,LPDWORD);
+#ifndef _OBJC_NO_COM
+WINSHLWAPI HRESULT WINAPI SHGetThreadRef(IUnknown**);
+WINSHLWAPI HRESULT WINAPI SHSetThreadRef(IUnknown*);
+WINSHLWAPI BOOL WINAPI SHSkipJunction(IBindCtx*,const CLSID*);
+#endif
+WINSHLWAPI DWORD WINAPI SHEnumValueA(HKEY,DWORD,LPSTR,LPDWORD,LPDWORD,LPVOID,LPDWORD);
+WINSHLWAPI DWORD WINAPI SHEnumValueW(HKEY,DWORD,LPWSTR,LPDWORD,LPDWORD,LPVOID,LPDWORD);
+WINSHLWAPI DWORD WINAPI SHGetValueA(HKEY,LPCSTR,LPCSTR,LPDWORD,LPVOID,LPDWORD);
+WINSHLWAPI DWORD WINAPI SHGetValueW(HKEY,LPCWSTR,LPCWSTR,LPDWORD,LPVOID,LPDWORD);
+WINSHLWAPI DWORD WINAPI SHSetValueA(HKEY,LPCSTR,LPCSTR,DWORD,LPCVOID,DWORD);
+WINSHLWAPI DWORD WINAPI SHSetValueW(HKEY,LPCWSTR,LPCWSTR,DWORD,LPCVOID,DWORD);
+WINSHLWAPI DWORD WINAPI SHDeleteValueA(HKEY,LPCSTR,LPCSTR);
+WINSHLWAPI DWORD WINAPI SHDeleteValueW(HKEY,LPCWSTR,LPCWSTR);
+WINSHLWAPI HRESULT WINAPI AssocCreate(CLSID,const IID* const,LPVOID*);
+WINSHLWAPI HRESULT WINAPI AssocQueryKeyA(ASSOCF,ASSOCKEY,LPCSTR,LPCSTR,HKEY*);
+WINSHLWAPI HRESULT WINAPI AssocQueryKeyW(ASSOCF,ASSOCKEY,LPCWSTR,LPCWSTR,HKEY*);
+WINSHLWAPI HRESULT WINAPI AssocQueryStringA(ASSOCF,ASSOCSTR,LPCSTR,LPCSTR,LPSTR,DWORD*);
+WINSHLWAPI HRESULT WINAPI AssocQueryStringByKeyA(ASSOCF,ASSOCSTR,HKEY,LPCSTR,LPSTR,DWORD*);
+WINSHLWAPI HRESULT WINAPI AssocQueryStringByKeyW(ASSOCF,ASSOCSTR,HKEY,LPCWSTR,LPWSTR,DWORD*);
+WINSHLWAPI HRESULT WINAPI AssocQueryStringW(ASSOCF,ASSOCSTR,LPCWSTR,LPCWSTR,LPWSTR,DWORD*);
+
+WINSHLWAPI HRESULT WINAPI UrlApplySchemeA(LPCSTR,LPSTR,LPDWORD,DWORD);
+WINSHLWAPI HRESULT WINAPI UrlApplySchemeW(LPCWSTR,LPWSTR,LPDWORD,DWORD);
+WINSHLWAPI HRESULT WINAPI UrlCanonicalizeA(LPCSTR,LPSTR,LPDWORD,DWORD);
+WINSHLWAPI HRESULT WINAPI UrlCanonicalizeW(LPCWSTR,LPWSTR,LPDWORD,DWORD);
+WINSHLWAPI HRESULT WINAPI UrlCombineA(LPCSTR,LPCSTR,LPSTR,LPDWORD,DWORD);
+WINSHLWAPI HRESULT WINAPI UrlCombineW(LPCWSTR,LPCWSTR,LPWSTR,LPDWORD,DWORD);
+WINSHLWAPI int WINAPI UrlCompareA(LPCSTR,LPCSTR,BOOL);
+WINSHLWAPI int WINAPI UrlCompareW(LPCWSTR,LPCWSTR,BOOL);
+WINSHLWAPI HRESULT WINAPI UrlCreateFromPathA(LPCSTR,LPSTR,LPDWORD,DWORD);
+WINSHLWAPI HRESULT WINAPI UrlCreateFromPathW(LPCWSTR,LPWSTR,LPDWORD,DWORD);
+WINSHLWAPI HRESULT WINAPI UrlEscapeA(LPCSTR,LPSTR,LPDWORD,DWORD);
+WINSHLWAPI HRESULT WINAPI UrlEscapeW(LPCWSTR,LPWSTR,LPDWORD,DWORD);
+WINSHLWAPI LPCSTR WINAPI UrlGetLocationA(LPCSTR);
+WINSHLWAPI LPCWSTR WINAPI UrlGetLocationW(LPCWSTR);
+WINSHLWAPI HRESULT WINAPI UrlGetPartA(LPCSTR,LPSTR,LPDWORD,DWORD,DWORD);
+WINSHLWAPI HRESULT WINAPI UrlGetPartW(LPCWSTR,LPWSTR,LPDWORD,DWORD,DWORD);
+WINSHLWAPI HRESULT WINAPI UrlHashA(LPCSTR,LPBYTE,DWORD);
+WINSHLWAPI HRESULT WINAPI UrlHashW(LPCWSTR,LPBYTE,DWORD);
+WINSHLWAPI BOOL WINAPI UrlIsA(LPCSTR,URLIS);
+WINSHLWAPI BOOL WINAPI UrlIsW(LPCWSTR,URLIS);
+#define UrlIsFileUrlA(pszURL) UrlIsA(pzURL, URLIS_FILEURL)
+#define UrlIsFileUrlW(pszURL) UrlIsW(pszURL, URLIS_FILEURL)
+WINSHLWAPI BOOL WINAPI UrlIsNoHistoryA(LPCSTR);
+WINSHLWAPI BOOL WINAPI UrlIsNoHistoryW(LPCWSTR);
+WINSHLWAPI BOOL WINAPI UrlIsOpaqueA(LPCSTR);
+WINSHLWAPI BOOL WINAPI UrlIsOpaqueW(LPCWSTR);
+WINSHLWAPI HRESULT WINAPI UrlUnescapeA(LPSTR,LPSTR,LPDWORD,DWORD);
+WINSHLWAPI HRESULT WINAPI UrlUnescapeW(LPWSTR,LPWSTR,LPDWORD,DWORD);
+#define UrlUnescapeInPlaceA(pszUrl,dwFlags )\
+ UrlUnescapeA(pszUrl, NULL, NULL, dwFlags | URL_UNESCAPE_INPLACE)
+#define UrlUnescapeInPlaceW(pszUrl,dwFlags )\
+ UrlUnescapeW(pszUrl, NULL, NULL, dwFlags | URL_UNESCAPE_INPLACE)
+WINSHLWAPI DWORD WINAPI SHRegCloseUSKey(HUSKEY);
+WINSHLWAPI LONG WINAPI SHRegCreateUSKeyA(LPCSTR,REGSAM,HUSKEY,PHUSKEY,DWORD);
+WINSHLWAPI LONG WINAPI SHRegCreateUSKeyW(LPCWSTR,REGSAM,HUSKEY,PHUSKEY,DWORD);
+WINSHLWAPI LONG WINAPI SHRegDeleteEmptyUSKeyA(HUSKEY,LPCSTR,SHREGDEL_FLAGS);
+WINSHLWAPI LONG WINAPI SHRegDeleteEmptyUSKeyW(HUSKEY,LPCWSTR,SHREGDEL_FLAGS);
+WINSHLWAPI LONG WINAPI SHRegDeleteUSValueA(HUSKEY,LPCSTR,SHREGDEL_FLAGS);
+WINSHLWAPI LONG WINAPI SHRegDeleteUSValueW(HUSKEY,LPCWSTR,SHREGDEL_FLAGS);
+WINSHLWAPI HKEY WINAPI SHRegDuplicateHKey(HKEY);
+WINSHLWAPI DWORD WINAPI SHRegEnumUSKeyA(HUSKEY,DWORD,LPSTR,LPDWORD,SHREGENUM_FLAGS);
+WINSHLWAPI DWORD WINAPI SHRegEnumUSKeyW(HUSKEY,DWORD,LPWSTR,LPDWORD,SHREGENUM_FLAGS);
+WINSHLWAPI DWORD WINAPI SHRegEnumUSValueA(HUSKEY,DWORD,LPSTR,LPDWORD,LPDWORD,LPVOID,LPDWORD,SHREGENUM_FLAGS);
+WINSHLWAPI DWORD WINAPI SHRegEnumUSValueW(HUSKEY,DWORD,LPWSTR,LPDWORD,LPDWORD,LPVOID,LPDWORD,SHREGENUM_FLAGS);
+WINSHLWAPI BOOL WINAPI SHRegGetBoolUSValueA(LPCSTR,LPCSTR,BOOL,BOOL);
+WINSHLWAPI BOOL WINAPI SHRegGetBoolUSValueW(LPCWSTR,LPCWSTR,BOOL,BOOL);
+WINSHLWAPI DWORD WINAPI SHRegGetPathA(HKEY,LPCSTR,LPCSTR,LPSTR,DWORD);
+WINSHLWAPI DWORD WINAPI SHRegGetPathW(HKEY,LPCWSTR,LPCWSTR,LPWSTR,DWORD);
+WINSHLWAPI LONG WINAPI SHRegGetUSValueA(LPCSTR,LPCSTR,LPDWORD,LPVOID,LPDWORD,BOOL,LPVOID,DWORD);
+WINSHLWAPI LONG WINAPI SHRegGetUSValueW(LPCWSTR,LPCWSTR,LPDWORD,LPVOID,LPDWORD,BOOL,LPVOID,DWORD);
+WINSHLWAPI LONG WINAPI SHRegOpenUSKeyA(LPCSTR,REGSAM,HUSKEY,PHUSKEY,BOOL);
+WINSHLWAPI LONG WINAPI SHRegOpenUSKeyW(LPCWSTR,REGSAM,HUSKEY,PHUSKEY,BOOL);
+WINSHLWAPI DWORD WINAPI SHRegQueryInfoUSKeyA(HUSKEY,LPDWORD,LPDWORD,LPDWORD,LPDWORD,SHREGENUM_FLAGS);
+WINSHLWAPI DWORD WINAPI SHRegQueryInfoUSKeyW(HUSKEY,LPDWORD,LPDWORD,LPDWORD,LPDWORD,SHREGENUM_FLAGS);
+WINSHLWAPI LONG WINAPI SHRegQueryUSValueA(HUSKEY,LPCSTR,LPDWORD,LPVOID,LPDWORD,BOOL,LPVOID,DWORD);
+WINSHLWAPI LONG WINAPI SHRegQueryUSValueW(HUSKEY,LPCWSTR,LPDWORD,LPVOID,LPDWORD,BOOL,LPVOID,DWORD);
+WINSHLWAPI DWORD WINAPI SHRegSetPathA(HKEY,LPCSTR,LPCSTR,LPCSTR,DWORD);
+WINSHLWAPI DWORD WINAPI SHRegSetPathW(HKEY,LPCWSTR,LPCWSTR,LPCWSTR,DWORD);
+WINSHLWAPI LONG WINAPI SHRegSetUSValueA(LPCSTR,LPCSTR,DWORD,LPVOID,DWORD,DWORD);
+WINSHLWAPI LONG WINAPI SHRegSetUSValueW(LPCWSTR,LPCWSTR,DWORD,LPVOID,DWORD,DWORD);
+WINSHLWAPI LONG WINAPI SHRegWriteUSValueA(HUSKEY,LPCSTR,DWORD,LPVOID,DWORD,DWORD);
+WINSHLWAPI LONG WINAPI SHRegWriteUSValueW(HUSKEY,LPCWSTR,DWORD,LPVOID,DWORD,DWORD);
+WINSHLWAPI HRESULT WINAPI HashData(LPBYTE,DWORD,LPBYTE,DWORD);
+WINSHLWAPI HPALETTE WINAPI SHCreateShellPalette(HDC);
+WINSHLWAPI COLORREF WINAPI ColorHLSToRGB(WORD,WORD,WORD);
+WINSHLWAPI COLORREF WINAPI ColorAdjustLuma(COLORREF,int,BOOL);
+WINSHLWAPI void WINAPI ColorRGBToHLS(COLORREF,WORD*,WORD*,WORD*);
+WINSHLWAPI int __cdecl wnsprintfA(LPSTR,int,LPCSTR,...);
+WINSHLWAPI int __cdecl wnsprintfW(LPWSTR,int,LPCWSTR,...);
+WINSHLWAPI int WINAPI wvnsprintfA(LPSTR,int,LPCSTR,va_list);
+WINSHLWAPI int WINAPI wvnsprintfW(LPWSTR,int,LPCWSTR,va_list);
+
+HINSTANCE WINAPI MLLoadLibraryA(LPCSTR,HANDLE,DWORD,LPCSTR,BOOL);
+HINSTANCE WINAPI MLLoadLibraryW(LPCWSTR,HANDLE,DWORD,LPCWSTR,BOOL);
+
+HRESULT WINAPI DllInstall(BOOL,LPCWSTR);
+
+#ifdef UNICODE
+#define ChrCmpI ChrCmpIW
+#define IntlStrEqN IntlStrEqNW
+#define IntlStrEqNI IntlStrEqNIW
+#define IntlStrEqWorker IntlStrEqWorkerW
+#define SHStrDup SHStrDupW
+#define StrCat StrCatW
+#define StrCatBuff StrCatBuffW
+#define StrChr StrChrW
+#define StrChrI StrChrIW
+#define StrCmp StrCmpW
+#define StrCmpI StrCmpIW
+#define StrCmpNI StrCmpNIW
+#define StrCmpN StrCmpNW
+#define StrCpyN StrCpyNW
+#define StrCpy StrCpyW
+#define StrCSpnI StrCSpnIW
+#define StrCSpn StrCSpnW
+#define StrDup StrDupW
+#define StrFormatByteSize StrFormatByteSizeW
+#define StrFormatKBSize StrFormatKBSizeW
+#define StrFromTimeInterval StrFromTimeIntervalW
+#define StrIsIntlEqual StrIsIntlEqualW
+#define StrNCat StrNCatW
+#define StrPBrk StrPBrkW
+#define StrRChr StrRChrW
+#define StrRChrI StrRChrIW
+#ifndef _OBJC_NO_COM
+#define StrRetToBuf StrRetToBufW
+#define StrRetToStr StrRetToStrW
+#endif
+#define StrRStrI StrRStrIW
+#define StrSpn StrSpnW
+#define StrStrI StrStrIW
+#define StrStr StrStrW
+#define StrToInt StrToIntW
+#define StrToIntEx StrToIntExW
+#define StrTrim StrTrimW
+#define PathAddBackslash PathAddBackslashW
+#define PathAddExtension PathAddExtensionW
+#define PathAppend PathAppendW
+#define PathBuildRoot PathBuildRootW
+#define PathCanonicalize PathCanonicalizeW
+#define PathCombine PathCombineW
+#define PathCommonPrefix PathCommonPrefixW
+#define PathCompactPath PathCompactPathW
+#define PathCompactPathEx PathCompactPathExW
+#define PathCreateFromUrl PathCreateFromUrlW
+#define PathFileExists PathFileExistsW
+#define PathFindExtension PathFindExtensionW
+#define PathFindFileName PathFindFileNameW
+#define PathFindNextComponent PathFindNextComponentW
+#define PathFindOnPath PathFindOnPathW
+#define PathFindSuffixArray PathFindSuffixArrayW
+#define PathGetArgs PathGetArgsW
+#define PathGetCharType PathGetCharTypeW
+#define PathGetDriveNumber PathGetDriveNumberW
+#define PathIsContentType PathIsContentTypeW
+#define PathIsDirectoryEmpty PathIsDirectoryEmptyW
+#define PathIsDirectory PathIsDirectoryW
+#define PathIsFileSpec PathIsFileSpecW
+#define PathIsLFNFileSpec PathIsLFNFileSpecW
+#define PathIsNetworkPath PathIsNetworkPathW
+#define PathIsPrefix PathIsPrefixW
+#define PathIsRelative PathIsRelativeW
+#define PathIsRoot PathIsRootW
+#define PathIsSameRoot PathIsSameRootW
+#define PathIsSystemFolder PathIsSystemFolderW
+#define PathIsUNCServerShare PathIsUNCServerShareW
+#define PathIsUNCServer PathIsUNCServerW
+#define PathIsUNC PathIsUNCW
+#define PathIsURL PathIsURLW
+#define PathMakePretty PathMakePrettyW
+#define PathMakeSystemFolder PathMakeSystemFolderW
+#define PathMatchSpec PathMatchSpecW
+#define PathParseIconLocation PathParseIconLocationW
+#define PathQuoteSpaces PathQuoteSpacesW
+#define PathRelativePathTo PathRelativePathToW
+#define PathRemoveArgs PathRemoveArgsW
+#define PathRemoveBackslash PathRemoveBackslashW
+#define PathRemoveBlanks PathRemoveBlanksW
+#define PathRemoveExtension PathRemoveExtensionW
+#define PathRemoveFileSpec PathRemoveFileSpecW
+#define PathRenameExtension PathRenameExtensionW
+#define PathSearchAndQualify PathSearchAndQualifyW
+#define PathSetDlgItemPath PathSetDlgItemPathW
+#define PathSkipRoot PathSkipRootW
+#define PathStripPath PathStripPathW
+#define PathStripToRoot PathStripToRootW
+#define PathUndecorate PathUndecorateW
+#define PathUnExpandEnvStrings PathUnExpandEnvStringsW
+#define PathUnmakeSystemFolder PathUnmakeSystemFolderW
+#define PathUnquoteSpaces PathUnquoteSpacesW
+#ifndef _OBJC_NO_COM
+#define SHCreateStreamOnFile SHCreateStreamOnFileW
+#define SHOpenRegStream SHOpenRegStreamW
+#define SHOpenRegStream2 SHOpenRegStream2W
+#endif
+#define SHCopyKey SHCopyKeyW
+#define SHDeleteEmptyKey SHDeleteEmptyKeyW
+#define SHDeleteKey SHDeleteKeyW
+#define SHEnumKeyEx SHEnumKeyExW
+#define SHQueryInfoKey SHRegQueryInfoKeyW
+#define SHQueryValueEx SHQueryValueExW
+#define SHEnumValue SHEnumValueW
+#define SHGetValue SHGetValueW
+#define SHSetValue SHSetValueW
+#define SHDeleteValue SHDeleteValueW
+#define AssocQueryKey AssocQueryKeyW
+#define AssocQueryStringByKey AssocQueryStringByKeyW
+#define AssocQueryString AssocQueryStringW
+#define UrlApplyScheme UrlApplySchemeW
+#define UrlCanonicalize UrlCanonicalizeW
+#define UrlCombine UrlCombineW
+#define UrlCompare UrlCompareW
+#define UrlCreateFromPath UrlCreateFromPathW
+#define UrlEscape UrlEscapeW
+#define UrlGetLocation UrlGetLocationW
+#define UrlGetPart UrlGetPartW
+#define UrlHash UrlHashW
+#define UrlIs UrlIsW
+#define UrlIsFileUrl UrlIsFileUrlW
+#define UrlIsNoHistory UrlIsNoHistoryW
+#define UrlIsOpaque UrlIsOpaqueW
+#define UrlUnescape UrlUnescapeW
+#define UrlUnescapeInPlace UrlUnescapeInPlaceW
+#define SHRegCreateUSKey SHRegCreateUSKeyW
+#define SHRegDeleteEmptyUSKey SHRegDeleteEmptyUSKeyW
+#define SHRegDeleteUSValue SHRegDeleteUSValueW
+#define SHRegEnumUSKey SHRegEnumUSKeyW
+#define SHRegEnumUSValue SHRegEnumUSValueW
+#define SHRegGetBoolUSValue SHRegGetBoolUSValueW
+#define SHRegGetPath SHRegGetPathW
+#define SHRegGetUSValue SHRegGetUSValueW
+#define SHRegOpenUSKey SHRegOpenUSKeyW
+#define SHRegQueryInfoUSKey SHRegQueryInfoUSKeyW
+#define SHRegQueryUSValue SHRegQueryUSValueW
+#define SHRegSetPath SHRegSetPathW
+#define SHRegSetUSValue SHRegSetUSValueW
+#define SHRegWriteUSValue SHRegWriteUSValueW
+#define wnsprintf wnsprintfW
+#define wvnsprintf wvnsprintfW
+#else /* UNICODE */
+#define ChrCmpI ChrCmpIA
+#define IntlStrEqN IntlStrEqNA
+#define IntlStrEqNI IntlStrEqNIA
+#define IntlStrEqWorker IntlStrEqWorkerA
+#define SHStrDup SHStrDupA
+#define StrCat lstrcatA
+#define StrCatBuff StrCatBuffA
+#define StrChr StrChrA
+#define StrChrI StrChrIA
+#define StrCmp lstrcmpA
+#define StrCmpI lstrcmpiA
+#define StrCmpNI StrCmpNIA
+#define StrCmpN StrCmpNA
+#define StrCpyN lstrcpynA
+#define StrCpy lstrcpyA
+#define StrCSpnI StrCSpnIA
+#define StrCSpn StrCSpnA
+#define StrDup StrDupA
+#define StrFormatByteSize StrFormatByteSizeA
+#define StrFormatKBSize StrFormatKBSizeA
+#define StrFromTimeInterval StrFromTimeIntervalA
+#define StrIsIntlEqual StrIsIntlEqualA
+#define StrNCat StrNCatA
+#define StrPBrk StrPBrkA
+#define StrRChr StrRChrA
+#define StrRChrI StrRChrIA
+#ifndef _OBJC_NO_COM
+#define StrRetToBuf StrRetToBufA
+#define StrRetToStr StrRetToStrA
+#endif
+#define StrRStrI StrRStrIA
+#define StrSpn StrSpnA
+#define StrStrI StrStrIA
+#define StrStr StrStrA
+#define StrToInt StrToIntA
+#define StrToIntEx StrToIntExA
+#define StrTrim StrTrimA
+#define PathAddBackslash PathAddBackslashA
+#define PathAddExtension PathAddExtensionA
+#define PathAppend PathAppendA
+#define PathBuildRoot PathBuildRootA
+#define PathCanonicalize PathCanonicalizeA
+#define PathCombine PathCombineA
+#define PathCommonPrefix PathCommonPrefixA
+#define PathCompactPath PathCompactPathA
+#define PathCompactPathEx PathCompactPathExA
+#define PathCreateFromUrl PathCreateFromUrlA
+#define PathFileExists PathFileExistsA
+#define PathFindExtension PathFindExtensionA
+#define PathFindFileName PathFindFileNameA
+#define PathFindNextComponent PathFindNextComponentA
+#define PathFindOnPath PathFindOnPathA
+#define PathFindSuffixArray PathFindSuffixArrayA
+#define PathGetArgs PathGetArgsA
+#define PathGetCharType PathGetCharTypeA
+#define PathGetDriveNumber PathGetDriveNumberA
+#define PathIsContentType PathIsContentTypeA
+#define PathIsDirectoryEmpty PathIsDirectoryEmptyA
+#define PathIsDirectory PathIsDirectoryA
+#define PathIsFileSpec PathIsFileSpecA
+#define PathIsLFNFileSpec PathIsLFNFileSpecA
+#define PathIsNetworkPath PathIsNetworkPathA
+#define PathIsPrefix PathIsPrefixA
+#define PathIsRelative PathIsRelativeA
+#define PathIsRoot PathIsRootA
+#define PathIsSameRoot PathIsSameRootA
+#define PathIsSystemFolder PathIsSystemFolderA
+#define PathIsUNCServerShare PathIsUNCServerShareA
+#define PathIsUNCServer PathIsUNCServerA
+#define PathIsUNC PathIsUNCA
+#define PathIsURL PathIsURLA
+#define PathMakePretty PathMakePrettyA
+#define PathMakeSystemFolder PathMakeSystemFolderA
+#define PathMatchSpec PathMatchSpecA
+#define PathParseIconLocation PathParseIconLocationA
+#define PathQuoteSpaces PathQuoteSpacesA
+#define PathRelativePathTo PathRelativePathToA
+#define PathRemoveArgs PathRemoveArgsA
+#define PathRemoveBackslash PathRemoveBackslashA
+#define PathRemoveBlanks PathRemoveBlanksA
+#define PathRemoveExtension PathRemoveExtensionA
+#define PathRemoveFileSpec PathRemoveFileSpecA
+#define PathRenameExtension PathRenameExtensionA
+#define PathSearchAndQualify PathSearchAndQualifyA
+#define PathSetDlgItemPath PathSetDlgItemPathA
+#define PathSkipRoot PathSkipRootA
+#define PathStripPath PathStripPathA
+#define PathStripToRoot PathStripToRootA
+#define PathUndecorate PathUndecorateA
+#define PathUnExpandEnvStrings PathUnExpandEnvStringsA
+#define PathUnmakeSystemFolder PathUnmakeSystemFolderA
+#define PathUnquoteSpaces PathUnquoteSpacesA
+#ifndef _OBJC_NO_COM
+#define SHCreateStreamOnFile SHCreateStreamOnFileA
+#define SHOpenRegStream SHOpenRegStreamA
+#define SHOpenRegStream2 SHOpenRegStream2A
+#endif
+#define SHCopyKey SHCopyKeyA
+#define SHDeleteEmptyKey SHDeleteEmptyKeyA
+#define SHDeleteKey SHDeleteKeyA
+#define SHEnumKeyEx SHEnumKeyExA
+#define SHQueryInfoKey SHRegQueryInfoKeyA
+#define SHQueryValueEx SHQueryValueExA
+#define SHEnumValue SHEnumValueA
+#define SHGetValue SHGetValueA
+#define SHSetValue SHSetValueA
+#define SHDeleteValue SHDeleteValueA
+#define AssocQueryKey AssocQueryKeyA
+#define AssocQueryStringByKey AssocQueryStringByKeyA
+#define AssocQueryString AssocQueryStringA
+#define UrlApplyScheme UrlApplySchemeA
+#define UrlCanonicalize UrlCanonicalizeA
+#define UrlCombine UrlCombineA
+#define UrlCompare UrlCompareA
+#define UrlCreateFromPath UrlCreateFromPathA
+#define UrlEscape UrlEscapeA
+#define UrlGetLocation UrlGetLocationA
+#define UrlGetPart UrlGetPartA
+#define UrlHash UrlHashA
+#define UrlIs UrlIsA
+#define UrlIsFileUrl UrlIsFileUrl
+#define UrlIsNoHistory UrlIsNoHistoryA
+#define UrlIsOpaque UrlIsOpaqueA
+#define UrlUnescape UrlUnescapeA
+#define UrlUnescapeInPlace UrlUnescapeInPlaceA
+#define SHRegCreateUSKey SHRegCreateUSKeyA
+#define SHRegDeleteEmptyUSKey SHRegDeleteEmptyUSKeyA
+#define SHRegDeleteUSValue SHRegDeleteUSValueA
+#define SHRegEnumUSKey SHRegEnumUSKeyA
+#define SHRegEnumUSValue SHRegEnumUSValueA
+#define SHRegGetBoolUSValue SHRegGetBoolUSValueA
+#define SHRegGetPath SHRegGetPathA
+#define SHRegGetUSValue SHRegGetUSValueA
+#define SHRegOpenUSKey SHRegOpenUSKeyA
+#define SHRegQueryInfoUSKey SHRegQueryInfoUSKeyA
+#define SHRegQueryUSValue SHRegQueryUSValueA
+#define SHRegSetPath SHRegSetPathA
+#define SHRegSetUSValue SHRegSetUSValueA
+#define SHRegWriteUSValue SHRegWriteUSValueA
+#define wnsprintf wnsprintfA
+#define wvnsprintf wvnsprintfA
+#endif /* UNICODE */
+
+#define StrToLong StrToInt
+
+#endif /* !RC_INVOKED */
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* ! defined _SHLWAPI_H */
diff --git a/tcc/include/winapi/snmp.h b/tcc/include/winapi/snmp.h
new file mode 100644
index 0000000..f35a2be
--- /dev/null
+++ b/tcc/include/winapi/snmp.h
@@ -0,0 +1,259 @@
+/*
+ snmp.h - Header file for the Windows SNMP API
+
+ Written by Filip Navara <xnavara@volny.cz>
+
+ References (2003-08-25):
+ http://msdn.microsoft.com/library/en-us/snmp/snmp/snmp_reference.asp
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+*/
+
+#ifndef _SNMP_H
+#define _SNMP_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifndef _WINDOWS_H
+#include <windows.h>
+#endif
+
+#include <pshpack4.h>
+
+#ifndef WINSNMPAPI
+#define WINSNMPAPI WINAPI
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define DEFAULT_SNMP_PORT_UDP 161
+#define DEFAULT_SNMP_PORT_IPX 36879
+#define DEFAULT_SNMPTRAP_PORT_UDP 162
+#define DEFAULT_SNMPTRAP_PORT_IPX 36880
+#ifndef _SNMP_ASN_DEFINED
+#define _SNMP_ASN_DEFINED
+#define ASN_UNIVERSAL 0x00
+#define ASN_PRIMITIVE 0x00
+#define ASN_CONSTRUCTOR 0x20
+#define ASN_APPLICATION 0x40
+#define ASN_CONTEXT 0x80
+#define ASN_PRIVATE 0xC0
+#define SNMP_PDU_GET (ASN_CONTEXT | ASN_CONSTRUCTOR | 0)
+#define SNMP_PDU_GETNEXT (ASN_CONTEXT | ASN_CONSTRUCTOR | 1)
+#define SNMP_PDU_RESPONSE (ASN_CONTEXT | ASN_CONSTRUCTOR | 2)
+#define SNMP_PDU_SET (ASN_CONTEXT | ASN_CONSTRUCTOR | 3)
+#define SNMP_PDU_GETBULK (ASN_CONTEXT | ASN_CONSTRUCTOR | 4)
+#define SNMP_PDU_V1TRAP (ASN_CONTEXT | ASN_CONSTRUCTOR | 4)
+#define SNMP_PDU_INFORM (ASN_CONTEXT | ASN_CONSTRUCTOR | 6)
+#define SNMP_PDU_TRAP (ASN_CONTEXT | ASN_CONSTRUCTOR | 7)
+#define SNMP_PDU_REPORT (ASN_CONTEXT | ASN_CONSTRUCTOR | 8)
+#endif /* _SNMP_ASN_DEFINED */
+#define ASN_INTEGER (ASN_UNIVERSAL | ASN_PRIMITIVE | 2)
+#define ASN_BITS (ASN_UNIVERSAL | ASN_PRIMITIVE | 3)
+#define ASN_OCTETSTRING (ASN_UNIVERSAL | ASN_PRIMITIVE | 4)
+#define ASN_NULL (ASN_UNIVERSAL | ASN_PRIMITIVE | 5)
+#define ASN_OBJECTIDENTIFIER (ASN_UNIVERSAL | ASN_PRIMITIVE | 6)
+#define ASN_INTEGER32 ASN_INTEGER
+#define ASN_SEQUENCE (ASN_UNIVERSAL | ASN_CONSTRUCTOR | 0x10)
+#define ASN_SEQUENCEOF ASN_SEQUENCE
+#define ASN_IPADDRESS (ASN_APPLICATION | ASN_PRIMITIVE | 0x00)
+#define ASN_COUNTER32 (ASN_APPLICATION | ASN_PRIMITIVE | 0x01)
+#define ASN_GAUGE32 (ASN_APPLICATION | ASN_PRIMITIVE | 0x02)
+#define ASN_TIMETICKS (ASN_APPLICATION | ASN_PRIMITIVE | 0x03)
+#define ASN_OPAQUE (ASN_APPLICATION | ASN_PRIMITIVE | 0x04)
+#define ASN_COUNTER64 (ASN_APPLICATION | ASN_PRIMITIVE | 0x06)
+#define ASN_UNSIGNED32 (ASN_APPLICATION | ASN_PRIMITIVE | 0x07)
+#define SNMP_EXCEPTION_NOSUCHOBJECT (ASN_CONTEXT | ASN_PRIMITIVE | 0x00)
+#define SNMP_EXCEPTION_NOSUCHINSTANCE (ASN_CONTEXT | ASN_PRIMITIVE | 0x01)
+#define SNMP_EXCEPTION_ENDOFMIBVIEW (ASN_CONTEXT | ASN_PRIMITIVE | 0x02)
+#define SNMP_EXTENSION_GET SNMP_PDU_GET
+#define SNMP_EXTENSION_GET_NEXT SNMP_PDU_GETNEXT
+#define SNMP_EXTENSION_GET_BULK SNMP_PDU_GETBULK
+#define SNMP_EXTENSION_SET_TEST (ASN_PRIVATE | ASN_CONSTRUCTOR | 0x0)
+#define SNMP_EXTENSION_SET_COMMIT SNMP_PDU_SET
+#define SNMP_EXTENSION_SET_UNDO (ASN_PRIVATE | ASN_CONSTRUCTOR | 0x1)
+#define SNMP_EXTENSION_SET_CLEANUP (ASN_PRIVATE | ASN_CONSTRUCTOR | 0x2)
+#define SNMP_ERRORSTATUS_NOERROR 0
+#define SNMP_ERRORSTATUS_TOOBIG 1
+#define SNMP_ERRORSTATUS_NOSUCHNAME 2
+#define SNMP_ERRORSTATUS_BADVALUE 3
+#define SNMP_ERRORSTATUS_READONLY 4
+#define SNMP_ERRORSTATUS_GENERR 5
+#define SNMP_ERRORSTATUS_NOACCESS 6
+#define SNMP_ERRORSTATUS_WRONGTYPE 7
+#define SNMP_ERRORSTATUS_WRONGLENGTH 8
+#define SNMP_ERRORSTATUS_WRONGENCODING 9
+#define SNMP_ERRORSTATUS_WRONGVALUE 10
+#define SNMP_ERRORSTATUS_NOCREATION 11
+#define SNMP_ERRORSTATUS_INCONSISTENTVALUE 12
+#define SNMP_ERRORSTATUS_RESOURCEUNAVAILABLE 13
+#define SNMP_ERRORSTATUS_COMMITFAILED 14
+#define SNMP_ERRORSTATUS_UNDOFAILED 15
+#define SNMP_ERRORSTATUS_AUTHORIZATIONERROR 16
+#define SNMP_ERRORSTATUS_NOTWRITABLE 17
+#define SNMP_ERRORSTATUS_INCONSISTENTNAME 18
+#define SNMP_GENERICTRAP_COLDSTART 0
+#define SNMP_GENERICTRAP_WARMSTART 1
+#define SNMP_GENERICTRAP_LINKDOWN 2
+#define SNMP_GENERICTRAP_LINKUP 3
+#define SNMP_GENERICTRAP_AUTHFAILURE 4
+#define SNMP_GENERICTRAP_EGPNEIGHLOSS 5
+#define SNMP_GENERICTRAP_ENTERSPECIFIC 6
+#define SNMP_ACCESS_NONE 0
+#define SNMP_ACCESS_NOTIFY 1
+#define SNMP_ACCESS_READ_ONLY 2
+#define SNMP_ACCESS_READ_WRITE 3
+#define SNMP_ACCESS_READ_CREATE 4
+#define SNMPAPI_ERROR FALSE
+#define SNMPAPI_NOERROR TRUE
+#define SNMP_LOG_SILENT 0
+#define SNMP_LOG_FATAL 1
+#define SNMP_LOG_ERROR 2
+#define SNMP_LOG_WARNING 3
+#define SNMP_LOG_TRACE 4
+#define SNMP_LOG_VERBOSE 5
+#define SNMP_OUTPUT_TO_CONSOLE 1
+#define SNMP_OUTPUT_TO_LOGFILE 2
+#define SNMP_OUTPUT_TO_EVENTLOG 4
+#define SNMP_OUTPUT_TO_DEBUGGER 8
+#define SNMP_MAX_OID_LEN 128
+#define SNMP_MEM_ALLOC_ERROR 1
+#define SNMP_BERAPI_INVALID_LENGTH 10
+#define SNMP_BERAPI_INVALID_TAG 11
+#define SNMP_BERAPI_OVERFLOW 12
+#define SNMP_BERAPI_SHORT_BUFFER 13
+#define SNMP_BERAPI_INVALID_OBJELEM 14
+#define SNMP_PDUAPI_UNRECOGNIZED_PDU 20
+#define SNMP_PDUAPI_INVALID_ES 21
+#define SNMP_PDUAPI_INVALID_GT 22
+#define SNMP_AUTHAPI_INVALID_VERSION 30
+#define SNMP_AUTHAPI_INVALID_MSG_TYPE 31
+#define SNMP_AUTHAPI_TRIV_AUTH_FAILED 32
+
+#ifndef RC_INVOKED
+
+typedef INT SNMPAPI;
+typedef LONG AsnInteger32;
+typedef ULONG AsnUnsigned32;
+typedef ULARGE_INTEGER AsnCounter64;
+typedef AsnUnsigned32 AsnCounter32;
+typedef AsnUnsigned32 AsnGauge32;
+typedef AsnUnsigned32 AsnTimeticks;
+typedef struct {
+ BYTE *stream;
+ UINT length;
+ BOOL dynamic;
+} AsnOctetString, AsnBits, AsnSequence, AsnImplicitSequence, AsnIPAddress, AsnNetworkAddress, AsnDisplayString, AsnOpaque;
+typedef struct {
+ UINT idLength;
+ UINT *ids;
+} AsnObjectIdentifier, AsnObjectName;
+typedef struct {
+ BYTE asnType;
+ union {
+ AsnInteger32 number;
+ AsnUnsigned32 unsigned32;
+ AsnCounter64 counter64;
+ AsnOctetString string;
+ AsnBits bits;
+ AsnObjectIdentifier object;
+ AsnSequence sequence;
+ AsnIPAddress address;
+ AsnCounter32 counter;
+ AsnGauge32 gauge;
+ AsnTimeticks ticks;
+ AsnOpaque arbitrary;
+ } asnValue;
+} AsnAny, AsnObjectSyntax;
+typedef struct {
+ AsnObjectName name;
+ AsnObjectSyntax value;
+} SnmpVarBind;
+typedef struct {
+ SnmpVarBind *list;
+ UINT len;
+} SnmpVarBindList;
+
+VOID WINSNMPAPI SnmpExtensionClose(void);
+BOOL WINSNMPAPI SnmpExtensionInit(DWORD,HANDLE*,AsnObjectIdentifier*);
+BOOL WINSNMPAPI SnmpExtensionInitEx(AsnObjectIdentifier*);
+BOOL WINSNMPAPI SnmpExtensionMonitor(LPVOID);
+BOOL WINSNMPAPI SnmpExtensionQuery(BYTE,SnmpVarBindList*,AsnInteger32*,AsnInteger32*);
+BOOL WINSNMPAPI SnmpExtensionQueryEx(DWORD,DWORD,SnmpVarBindList*,AsnOctetString*,AsnInteger32*,AsnInteger32*);
+BOOL WINSNMPAPI SnmpExtensionTrap(AsnObjectIdentifier*,AsnInteger32*,AsnInteger32*,AsnTimeticks*,SnmpVarBindList*);
+DWORD WINSNMPAPI SnmpSvcGetUptime(void);
+VOID WINSNMPAPI SnmpSvcSetLogLevel(INT);
+VOID WINSNMPAPI SnmpSvcSetLogType(INT);
+SNMPAPI WINSNMPAPI SnmpUtilAsnAnyCpy(AsnAny*,AsnAny*);
+VOID WINSNMPAPI SnmpUtilAsnAnyFree(AsnAny*);
+VOID WINSNMPAPI SnmpUtilDbgPrint(INT,LPSTR,...);
+LPSTR WINSNMPAPI SnmpUtilIdsToA(UINT*,UINT);
+LPVOID WINSNMPAPI SnmpUtilMemAlloc(UINT);
+VOID WINSNMPAPI SnmpUtilMemFree(LPVOID);
+LPVOID WINSNMPAPI SnmpUtilMemReAlloc(LPVOID,UINT);
+SNMPAPI WINSNMPAPI SnmpUtilOctetsCmp(AsnOctetString*,AsnOctetString*);
+SNMPAPI WINSNMPAPI SnmpUtilOctetsCpy(AsnOctetString*,AsnOctetString*);
+VOID WINSNMPAPI SnmpUtilOctetsFree(AsnOctetString*);
+SNMPAPI WINSNMPAPI SnmpUtilOctetsNCmp(AsnOctetString*,AsnOctetString*,UINT);
+SNMPAPI WINSNMPAPI SnmpUtilOidAppend(AsnObjectIdentifier*,AsnObjectIdentifier*);
+SNMPAPI WINSNMPAPI SnmpUtilOidCmp(AsnObjectIdentifier*,AsnObjectIdentifier*);
+SNMPAPI WINSNMPAPI SnmpUtilOidCpy(AsnObjectIdentifier*,AsnObjectIdentifier*);
+VOID WINSNMPAPI SnmpUtilOidFree(AsnObjectIdentifier*);
+SNMPAPI WINSNMPAPI SnmpUtilOidNCmp(AsnObjectIdentifier*,AsnObjectIdentifier*,UINT);
+LPSTR WINSNMPAPI SnmpUtilOidToA(AsnObjectIdentifier*);
+VOID WINSNMPAPI SnmpUtilPrintAsnAny(AsnAny*);
+VOID WINSNMPAPI SnmpUtilPrintOid(AsnObjectIdentifier*);
+SNMPAPI WINSNMPAPI SnmpUtilVarBindCpy( SnmpVarBind*,SnmpVarBind*);
+SNMPAPI WINSNMPAPI SnmpUtilVarBindListCpy(SnmpVarBindList*,SnmpVarBindList*);
+VOID WINSNMPAPI SnmpUtilVarBindFree(SnmpVarBind*);
+VOID WINSNMPAPI SnmpUtilVarBindListFree(SnmpVarBindList*);
+
+#ifndef SNMPSTRICT
+#define SNMP_malloc SnmpUtilMemAlloc
+#define SNMP_free SnmpUtilMemFree
+#define SNMP_realloc SnmpUtilMemReAlloc
+#define SNMP_DBG_malloc SnmpUtilMemAlloc
+#define SNMP_DBG_free SnmpUtilMemFree
+#define SNMP_DBG_realloc SnmpUtilMemReAlloc
+#define SNMP_oidappend SnmpUtilOidAppend
+#define SNMP_oidcmp SnmpUtilOidCmp
+#define SNMP_oidcpy SnmpUtilOidCpy
+#define SNMP_oidfree SnmpUtilOidFree
+#define SNMP_oidncmp SnmpUtilOidNCmp
+#define SNMP_printany SnmpUtilPrintAsnAny
+#define SNMP_CopyVarBind SnmpUtilVarBindCpy
+#define SNMP_CopyVarBindList SnmpUtilVarBindListCpy
+#define SNMP_FreeVarBind SnmpUtilVarBindFree
+#define SNMP_FreeVarBindList SnmpUtilVarBindListFree
+#define ASN_RFC1155_IPADDRESS ASN_IPADDRESS
+#define ASN_RFC1155_COUNTER ASN_COUNTER32
+#define ASN_RFC1155_GAUGE ASN_GAUGE32
+#define ASN_RFC1155_TIMETICKS ASN_TIMETICKS
+#define ASN_RFC1155_OPAQUE ASN_OPAQUE
+#define ASN_RFC1213_DISPSTRING ASN_OCTETSTRING
+#define ASN_RFC1157_GETREQUEST SNMP_PDU_GET
+#define ASN_RFC1157_GETNEXTREQUEST SNMP_PDU_GETNEXT
+#define ASN_RFC1157_GETRESPONSE SNMP_PDU_RESPONSE
+#define ASN_RFC1157_SETREQUEST SNMP_PDU_SET
+#define ASN_RFC1157_TRAP SNMP_PDU_V1TRAP
+#define ASN_CONTEXTSPECIFIC ASN_CONTEXT
+#define ASN_PRIMATIVE ASN_PRIMITIVE
+#define RFC1157VarBindList SnmpVarBindList
+#define RFC1157VarBind SnmpVarBind
+#define AsnInteger AsnInteger32
+#define AsnCounter AsnCounter32
+#define AsnGauge AsnGauge32
+#endif /* SNMPSTRICT */
+
+#endif /* RC_INVOKED */
+
+#ifdef __cplusplus
+}
+#endif
+#include <poppack.h>
+#endif
diff --git a/tcc/include/winapi/specstrings.h b/tcc/include/winapi/specstrings.h
new file mode 100644
index 0000000..2d68471
--- /dev/null
+++ b/tcc/include/winapi/specstrings.h
@@ -0,0 +1,130 @@
+#ifndef _SPECSTRINGS_H
+#define _SPECSTRINGS_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+/* These are built from primitives in Microsoft's Standard Annotation Language.
+ Search for "Header Annotation" on MSDN site for their MS-specific meanings */
+
+/* __in and __out currently conflict with libstdc++, use with caution */
+
+
+#define __bcount(size)
+#define __bcount_opt(size)
+#define __deref_bcount(size)
+#define __deref_bcount_opt(size)
+#define __deref_ecount(size)
+#define __deref_ecount_opt(size)
+#define __deref_in
+#define __deref_in_bcount(size)
+#define __deref_in_bcount_opt(size)
+#define __deref_in_ecount(size)
+#define __deref_in_ecount_opt(size)
+#define __deref_in_opt
+#define __deref_inout
+#define __deref_inout_bcount(size)
+#define __deref_inout_bcount_full(size)
+#define __deref_inout_bcount_full_opt(size)
+#define __deref_inout_bcount_opt(size)
+#define __deref_inout_bcount_part(size,length)
+#define __deref_inout_bcount_part_opt(size,length)
+#define __deref_inout_ecount(size)
+#define __deref_inout_ecount_full(size)
+#define __deref_inout_ecount_full_opt(size)
+#define __deref_inout_ecount_opt(size)
+#define __deref_inout_ecount_part(size,length)
+#define __deref_inout_ecount_part_opt(size,length)
+#define __deref_inout_opt
+#define __deref_opt_bcount(size)
+#define __deref_opt_bcount_opt(size)
+#define __deref_opt_ecount(size)
+#define __deref_opt_ecount_opt(size)
+#define __deref_opt_in
+#define __deref_opt_in_bcount(size)
+#define __deref_opt_in_bcount_opt(size)
+#define __deref_opt_in_ecount(size)
+#define __deref_opt_in_ecount_opt(size)
+#define __deref_opt_in_opt
+#define __deref_opt_inout
+#define __deref_opt_inout_bcount(size)
+#define __deref_opt_inout_bcount_full(size)
+#define __deref_opt_inout_bcount_full_opt(size)
+#define __deref_opt_inout_bcount_opt(size)
+#define __deref_opt_inout_bcount_part(size,length)
+#define __deref_opt_inout_bcount_part_opt(size,length)
+#define __deref_opt_inout_ecount(size)
+#define __deref_opt_inout_ecount_full(size)
+#define __deref_opt_inout_ecount_full_opt(size)
+#define __deref_opt_inout_ecount_opt(size)
+#define __deref_opt_inout_ecount_part(size,length)
+#define __deref_opt_inout_ecount_part_opt(size,length)
+#define __deref_opt_inout_opt
+#define __deref_opt_out
+#define __deref_opt_out_bcount(size)
+#define __deref_opt_out_bcount_full(size)
+#define __deref_opt_out_bcount_full_opt(size)
+#define __deref_opt_out_bcount_opt(size)
+#define __deref_opt_out_bcount_part(size,length)
+#define __deref_opt_out_bcount_part_opt(size,length)
+#define __deref_opt_out_ecount(size)
+#define __deref_opt_out_ecount_full(size)
+#define __deref_opt_out_ecount_full_opt(size)
+#define __deref_opt_out_ecount_opt(size)
+#define __deref_opt_out_ecount_part(size,length)
+#define __deref_opt_out_ecount_part_opt(size,length)
+#define __deref_opt_out_opt
+#define __deref_out
+#define __deref_out_bcount(size)
+#define __deref_out_bcount_full(size)
+#define __deref_out_bcount_full_opt(size)
+#define __deref_out_bcount_opt(size)
+#define __deref_out_bcount_part(size,length)
+#define __deref_out_bcount_part_opt(size,length)
+#define __deref_out_ecount(size)
+#define __deref_out_ecount_full(size)
+#define __deref_out_ecount_full_opt(size)
+#define __deref_out_ecount_opt(size)
+#define __deref_out_ecount_part(size,length)
+#define __deref_out_ecount_part_opt(size,length)
+#define __deref_out_opt
+#define __ecount(size)
+#define __ecount_opt(size)
+#define __in
+#define __in_bcount(size)
+#define __in_bcount_opt(size)
+#define __in_ecount(size)
+#define __in_ecount_opt(size)
+#define __in_opt
+#define __inout
+#define __inout_bcount(size)
+#define __inout_bcount_full(size)
+#define __inout_bcount_full_opt(size)
+#define __inout_bcount_opt(size)
+#define __inout_bcount_part(size,length)
+#define __inout_bcount_part_opt(size,length)
+#define __inout_ecount(size)
+#define __inout_ecount_full(size)
+#define __inout_ecount_full_opt(size)
+#define __inout_ecount_opt(size)
+#define __inout_ecount_part(size,length)
+#define __inout_ecount_part_opt(size,length)
+#define __inout_opt
+#define __out
+#define __out_bcount(size)
+#define __out_bcount_full(size)
+#define __out_bcount_full_opt(size)
+#define __out_bcount_opt(size)
+#define __out_bcount_part(size,length)
+#define __out_bcount_part_opt(size,length)
+#define __out_ecount(size)
+#define __out_ecount_full(size)
+#define __out_ecount_full_opt(size)
+#define __out_ecount_opt(size)
+#define __out_ecount_part(size,length)
+#define __out_ecount_part_opt(size,length)
+#define __out_opt
+
+
+#endif /*_SPECSTRINGS_H */
diff --git a/tcc/include/winapi/sql.h b/tcc/include/winapi/sql.h
new file mode 100644
index 0000000..2f0391b
--- /dev/null
+++ b/tcc/include/winapi/sql.h
@@ -0,0 +1,408 @@
+#ifndef _SQL_H
+#define _SQL_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#ifndef ODBCVER
+#define ODBCVER 0x0351
+#endif
+#include <sqltypes.h>
+#define SQL_ACCESSIBLE_PROCEDURES 20
+#define SQL_ACCESSIBLE_TABLES 19
+#define SQL_ALL_TYPES 0
+#define SQL_ALTER_TABLE 86
+#define SQL_API_SQLALLOCCONNECT 1
+#define SQL_API_SQLALLOCENV 2
+#define SQL_API_SQLALLOCSTMT 3
+#define SQL_API_SQLBINDCOL 4
+#define SQL_API_SQLCANCEL 5
+#define SQL_API_SQLCOLUMNS 40
+#define SQL_API_SQLCONNECT 7
+#define SQL_API_SQLDATASOURCES 57
+#define SQL_API_SQLDESCRIBECOL 8
+#define SQL_API_SQLDISCONNECT 9
+#define SQL_API_SQLERROR 10
+#define SQL_API_SQLEXECDIRECT 11
+#define SQL_API_SQLEXECUTE 12
+#define SQL_API_SQLFETCH 13
+#define SQL_API_SQLFREECONNECT 14
+#define SQL_API_SQLFREEENV 15
+#define SQL_API_SQLFREESTMT 16
+#define SQL_API_SQLGETCONNECTOPTION 42
+#define SQL_API_SQLGETCURSORNAME 17
+#define SQL_API_SQLGETDATA 43
+#define SQL_API_SQLGETFUNCTIONS 44
+#define SQL_API_SQLGETINFO 45
+#define SQL_API_SQLGETSTMTOPTION 46
+#define SQL_API_SQLGETTYPEINFO 47
+#define SQL_API_SQLNUMRESULTCOLS 18
+#define SQL_API_SQLPARAMDATA 48
+#define SQL_API_SQLPREPARE 19
+#define SQL_API_SQLPUTDATA 49
+#define SQL_API_SQLROWCOUNT 20
+#define SQL_API_SQLSETCONNECTOPTION 50
+#define SQL_API_SQLSETCURSORNAME 21
+#define SQL_API_SQLSETPARAM 22
+#define SQL_API_SQLSETSTMTOPTION 51
+#define SQL_API_SQLSPECIALCOLUMNS 52
+#define SQL_API_SQLSTATISTICS 53
+#define SQL_API_SQLTABLES 54
+#define SQL_API_SQLTRANSACT 23
+#define SQL_CB_CLOSE 1
+#define SQL_CB_DELETE 0
+#define SQL_CB_PRESERVE 2
+#define SQL_CHAR 1
+#define SQL_CLOSE 0
+#define SQL_COMMIT 0
+#define SQL_CURSOR_COMMIT_BEHAVIOR 23
+#define SQL_DATA_AT_EXEC (-2)
+#define SQL_DATA_SOURCE_NAME 2
+#define SQL_DATA_SOURCE_READ_ONLY 25
+#define SQL_DBMS_NAME 17
+#define SQL_DBMS_VER 18
+#define SQL_DECIMAL 3
+#define SQL_DEFAULT_TXN_ISOLATION 26
+#define SQL_DOUBLE 8
+#define SQL_DROP 1
+#define SQL_ERROR (-1)
+#define SQL_FD_FETCH_ABSOLUTE 16
+#define SQL_FD_FETCH_FIRST 2
+#define SQL_FD_FETCH_LAST 4
+#define SQL_FD_FETCH_NEXT 1
+#define SQL_FD_FETCH_PRIOR 8
+#define SQL_FD_FETCH_RELATIVE 32
+#define SQL_FETCH_ABSOLUTE 5
+#define SQL_FETCH_DIRECTION 8
+#define SQL_FETCH_FIRST 2
+#define SQL_FETCH_LAST 3
+#define SQL_FETCH_NEXT 1
+#define SQL_FETCH_PRIOR 4
+#define SQL_FETCH_RELATIVE 6
+#define SQL_FLOAT 6
+#define SQL_GD_ANY_COLUMN 1
+#define SQL_GD_ANY_ORDER 2
+#define SQL_GETDATA_EXTENSIONS 81
+#define SQL_IC_LOWER 2
+#define SQL_IC_MIXED 4
+#define SQL_IC_SENSITIVE 3
+#define SQL_IC_UPPER 1
+#define SQL_IDENTIFIER_CASE 28
+#define SQL_IDENTIFIER_QUOTE_CHAR 29
+#define SQL_INDEX_ALL 1
+#define SQL_INDEX_CLUSTERED 1
+#define SQL_INDEX_HASHED 2
+#define SQL_INDEX_OTHER 3
+#define SQL_INDEX_UNIQUE 0
+#define SQL_INTEGER 4
+#define SQL_INTEGRITY 73
+#define SQL_INVALID_HANDLE (-2)
+#define SQL_MAX_CATALOG_NAME_LEN 34
+#define SQL_MAX_COLUMN_NAME_LEN 30
+#define SQL_MAX_COLUMNS_IN_GROUP_BY 97
+#define SQL_MAX_COLUMNS_IN_INDEX 98
+#define SQL_MAX_COLUMNS_IN_ORDER_BY 99
+#define SQL_MAX_COLUMNS_IN_SELECT 100
+#define SQL_MAX_COLUMNS_IN_TABLE 101
+#define SQL_MAX_CURSOR_NAME_LEN 31
+#define SQL_MAX_INDEX_SIZE 102
+#define SQL_MAX_MESSAGE_LENGTH 512
+#define SQL_MAX_ROW_SIZE 104
+#define SQL_MAX_SCHEMA_NAME_LEN 32
+#define SQL_MAX_STATEMENT_LEN 105
+#define SQL_MAX_TABLE_NAME_LEN 35
+#define SQL_MAX_TABLES_IN_SELECT 106
+#define SQL_MAX_USER_NAME_LEN 107
+#define SQL_MAXIMUM_CATALOG_NAME_LENGTH SQL_MAX_CATALOG_NAME_LEN
+#define SQL_MAXIMUM_COLUMN_NAME_LENGTH SQL_MAX_COLUMN_NAME_LEN
+#define SQL_MAXIMUM_COLUMNS_IN_GROUP_BY SQL_MAX_COLUMNS_IN_GROUP_BY
+#define SQL_MAXIMUM_COLUMNS_IN_INDEX SQL_MAX_COLUMNS_IN_INDEX
+#define SQL_MAXIMUM_COLUMNS_IN_ORDER_BY SQL_MAX_COLUMNS_IN_ORDER_BY
+#define SQL_MAXIMUM_COLUMNS_IN_SELECT SQL_MAX_COLUMNS_IN_SELECT
+#define SQL_MAXIMUM_CURSOR_NAME_LENGTH SQL_MAX_CURSOR_NAME_LEN
+#define SQL_MAXIMUM_INDEX_SIZE SQL_MAX_INDEX_SIZE
+#define SQL_MAXIMUM_ROW_SIZE SQL_MAX_ROW_SIZE
+#define SQL_MAXIMUM_SCHEMA_NAME_LENGTH SQL_MAX_SCHEMA_NAME_LEN
+#define SQL_MAXIMUM_STATEMENT_LENGTH SQL_MAX_STATEMENT_LEN
+#define SQL_MAXIMUM_TABLES_IN_SELECT SQL_MAX_TABLES_IN_SELECT
+#define SQL_MAXIMUM_USER_NAME_LENGTH SQL_MAX_USER_NAME_LEN
+#define SQL_NC_HIGH 0
+#define SQL_NC_LOW 1
+#define SQL_NEED_DATA 99
+#define SQL_NO_NULLS 0
+#define SQL_NTS (-3)
+#define SQL_NTSL (-3L)
+#define SQL_NULL_COLLATION 85
+#define SQL_NULL_DATA (-1)
+#define SQL_NULL_HDBC 0
+#define SQL_NULL_HENV 0
+#define SQL_NULL_HSTMT 0
+#define SQL_NULLABLE 1
+#define SQL_NULLABLE_UNKNOWN 2
+#define SQL_NUMERIC 2
+#define SQL_ORDER_BY_COLUMNS_IN_SELECT 90
+#define SQL_PC_PSEUDO 2
+#define SQL_PC_UNKNOWN 0
+#define SQL_REAL 7
+#define SQL_RESET_PARAMS 3
+#define SQL_ROLLBACK 1
+#define SQL_SCCO_LOCK 2
+#define SQL_SCCO_OPT_ROWVER 4
+#define SQL_SCCO_OPT_VALUES 8
+#define SQL_SCCO_READ_ONLY 1
+#define SQL_SCOPE_CURROW 0
+#define SQL_SCOPE_SESSION 2
+#define SQL_SCOPE_TRANSACTION 1
+#define SQL_SCROLL_CONCURRENCY 43
+#define SQL_SEARCH_PATTERN_ESCAPE 14
+#define SQL_SERVER_NAME 13
+#define SQL_SMALLINT 5
+#define SQL_SPECIAL_CHARACTERS 94
+#define SQL_STILL_EXECUTING 2
+#define SQL_SUCCEEDED(rc) (((rc)&(~1))==0)
+#define SQL_SUCCESS 0
+#define SQL_SUCCESS_WITH_INFO 1
+#define SQL_TC_ALL 2
+#define SQL_TC_DDL_COMMIT 3
+#define SQL_TC_DDL_IGNORE 4
+#define SQL_TC_DML 1
+#define SQL_TC_NONE 0
+#define SQL_TRANSACTION_CAPABLE SQL_TXN_CAPABLE
+#define SQL_TRANSACTION_ISOLATION_OPTION SQL_TXN_ISOLATION_OPTION
+#define SQL_TRANSACTION_READ_COMMITTED SQL_TXN_READ_COMMITTED
+#define SQL_TRANSACTION_READ_UNCOMMITTED SQL_TXN_READ_UNCOMMITTED
+#define SQL_TRANSACTION_REPEATABLE_READ SQL_TXN_REPEATABLE_READ
+#define SQL_TRANSACTION_SERIALIZABLE SQL_TXN_SERIALIZABLE
+#define SQL_TXN_CAPABLE 46
+#define SQL_TXN_ISOLATION_OPTION 72
+#define SQL_TXN_READ_COMMITTED 2
+#define SQL_TXN_READ_UNCOMMITTED 1
+#define SQL_TXN_REPEATABLE_READ 4
+#define SQL_TXN_SERIALIZABLE 8
+#define SQL_UNBIND 2
+#define SQL_UNKNOWN_TYPE 0
+#define SQL_USER_NAME 47
+#define SQL_VARCHAR 12
+#if (ODBCVER >= 0x0200)
+#define SQL_AT_ADD_COLUMN 1
+#define SQL_AT_DROP_COLUMN 2
+#endif /* ODBCVER >= 0x0200 */
+#if (ODBCVER >= 0x0201)
+#define SQL_OJ_LEFT 1
+#define SQL_OJ_RIGHT 2
+#define SQL_OJ_FULL 4
+#define SQL_OJ_NESTED 8
+#define SQL_OJ_NOT_ORDERED 16
+#define SQL_OJ_INNER 32
+#define SQL_OJ_ALL_COMPARISON_OPS 64
+#endif /* ODBCVER >= 0x0201 */
+#if (ODBCVER >= 0x0300)
+#define SQL_AM_CONNECTION 1
+#define SQL_AM_NONE 0
+#define SQL_AM_STATEMENT 2
+#define SQL_API_SQLALLOCHANDLE 1001
+#define SQL_API_SQLBINDPARAM 1002
+#define SQL_API_SQLCLOSECURSOR 1003
+#define SQL_API_SQLCOLATTRIBUTE 6
+#define SQL_API_SQLCOPYDESC 1004
+#define SQL_API_SQLENDTRAN 1005
+#define SQL_API_SQLFETCHSCROLL 1021
+#define SQL_API_SQLFREEHANDLE 1006
+#define SQL_API_SQLGETCONNECTATTR 1007
+#define SQL_API_SQLGETDESCFIELD 1008
+#define SQL_API_SQLGETDESCREC 1009
+#define SQL_API_SQLGETDIAGFIELD 1010
+#define SQL_API_SQLGETDIAGREC 1011
+#define SQL_API_SQLGETENVATTR 1012
+#define SQL_API_SQLGETSTMTATTR 1014
+#define SQL_API_SQLSETCONNECTATTR 1016
+#define SQL_API_SQLSETDESCFIELD 1017
+#define SQL_API_SQLSETDESCREC 1018
+#define SQL_API_SQLSETENVATTR 1019
+#define SQL_API_SQLSETSTMTATTR 1020
+#define SQL_ARD_TYPE (-99)
+#define SQL_AT_ADD_CONSTRAINT 8
+#define SQL_ATTR_APP_PARAM_DESC 10011
+#define SQL_ATTR_APP_ROW_DESC 10010
+#define SQL_ATTR_AUTO_IPD 10001
+#define SQL_ATTR_CURSOR_SCROLLABLE (-1)
+#define SQL_ATTR_CURSOR_SENSITIVITY (-2)
+#define SQL_ATTR_IMP_PARAM_DESC 10013
+#define SQL_ATTR_IMP_ROW_DESC 10012
+#define SQL_ATTR_METADATA_ID 10014
+#define SQL_ATTR_OUTPUT_NTS 10001
+#define SQL_CATALOG_NAME 10003
+#define SQL_CODE_DATE 1
+#define SQL_CODE_TIME 2
+#define SQL_CODE_TIMESTAMP 3
+#define SQL_COLLATION_SEQ 10004
+#define SQL_CURSOR_SENSITIVITY 10001
+#define SQL_DATE_LEN 10
+#define SQL_DATETIME 9
+#define SQL_DEFAULT 99
+#define SQL_DESC_ALLOC_AUTO 1
+#define SQL_DESC_ALLOC_TYPE 1099
+#define SQL_DESC_ALLOC_USER 2
+#define SQL_DESC_COUNT 1001
+#define SQL_DESC_DATA_PTR 1010
+#define SQL_DESC_DATETIME_INTERVAL_CODE 1007
+#define SQL_DESC_INDICATOR_PTR 1009
+#define SQL_DESC_LENGTH 1003
+#define SQL_DESC_NAME 1011
+#define SQL_DESC_NULLABLE 1008
+#define SQL_DESC_OCTET_LENGTH 1013
+#define SQL_DESC_OCTET_LENGTH_PTR 1004
+#define SQL_DESC_PRECISION 1005
+#define SQL_DESC_SCALE 1006
+#define SQL_DESC_TYPE 1002
+#define SQL_DESC_UNNAMED 1012
+#define SQL_DESCRIBE_PARAMETER 10002
+#define SQL_DIAG_ALTER_DOMAIN 3
+#define SQL_DIAG_ALTER_TABLE 4
+#define SQL_DIAG_CALL 7
+#define SQL_DIAG_CLASS_ORIGIN 8
+#define SQL_DIAG_CONNECTION_NAME 10
+#define SQL_DIAG_CREATE_ASSERTION 6
+#define SQL_DIAG_CREATE_CHARACTER_SET 8
+#define SQL_DIAG_CREATE_COLLATION 10
+#define SQL_DIAG_CREATE_DOMAIN 23
+#define SQL_DIAG_CREATE_INDEX (-1)
+#define SQL_DIAG_CREATE_SCHEMA 64
+#define SQL_DIAG_CREATE_TABLE 77
+#define SQL_DIAG_CREATE_TRANSLATION 79
+#define SQL_DIAG_CREATE_VIEW 84
+#define SQL_DIAG_DELETE_WHERE 19
+#define SQL_DIAG_DROP_ASSERTION 24
+#define SQL_DIAG_DROP_CHARACTER_SET 25
+#define SQL_DIAG_DROP_COLLATION 26
+#define SQL_DIAG_DROP_DOMAIN 27
+#define SQL_DIAG_DROP_INDEX (-2)
+#define SQL_DIAG_DROP_SCHEMA 31
+#define SQL_DIAG_DROP_TABLE 32
+#define SQL_DIAG_DROP_TRANSLATION 33
+#define SQL_DIAG_DROP_VIEW 36
+#define SQL_DIAG_DYNAMIC_DELETE_CURSOR 38
+#define SQL_DIAG_DYNAMIC_FUNCTION 7
+#define SQL_DIAG_DYNAMIC_FUNCTION_CODE 12
+#define SQL_DIAG_DYNAMIC_UPDATE_CURSOR 81
+#define SQL_DIAG_GRANT 48
+#define SQL_DIAG_INSERT 50
+#define SQL_DIAG_MESSAGE_TEXT 6
+#define SQL_DIAG_NATIVE 5
+#define SQL_DIAG_NUMBER 2
+#define SQL_DIAG_RETURNCODE 1
+#define SQL_DIAG_REVOKE 59
+#define SQL_DIAG_ROW_COUNT 3
+#define SQL_DIAG_SELECT_CURSOR 85
+#define SQL_DIAG_SERVER_NAME 11
+#define SQL_DIAG_SQLSTATE 4
+#define SQL_DIAG_SUBCLASS_ORIGIN 9
+#define SQL_DIAG_UNKNOWN_STATEMENT 0
+#define SQL_DIAG_UPDATE_WHERE 82
+#define SQL_FALSE 0
+#define SQL_HANDLE_DBC 2
+#define SQL_HANDLE_DESC 4
+#define SQL_HANDLE_ENV 1
+#define SQL_HANDLE_STMT 3
+#define SQL_INSENSITIVE 1
+#define SQL_MAX_CONCURRENT_ACTIVITIES 1
+#define SQL_MAX_DRIVER_CONNECTIONS 0
+#define SQL_MAX_IDENTIFIER_LEN 10005
+#define SQL_MAXIMUM_CONCURRENT_ACTIVITIES SQL_MAX_CONCURRENT_ACTIVITIES
+#define SQL_MAXIMUM_DRIVER_CONNECTIONS SQL_MAX_DRIVER_CONNECTIONS
+#define SQL_MAXIMUM_IDENTIFIER_LENGTH SQL_MAX_IDENTIFIER_LEN
+#define SQL_NAMED 0
+#define SQL_NO_DATA 100
+#define SQL_NONSCROLLABLE 0
+#define SQL_NULL_HANDLE 0L
+#define SQL_NULL_HDESC 0
+#define SQL_OJ_CAPABILITIES 115
+#define SQL_OUTER_JOIN_CAPABILITIES SQL_OJ_CAPABILITIES
+#define SQL_PC_NON_PSEUDO 1
+#define SQL_PRED_BASIC 2
+#define SQL_PRED_CHAR 1
+#define SQL_PRED_NONE 0
+#define SQL_ROW_IDENTIFIER 1
+#define SQL_SCROLLABLE 1
+#define SQL_SENSITIVE 2
+#define SQL_TIME_LEN 8
+#define SQL_TIMESTAMP_LEN 19
+#define SQL_TRUE 1
+#define SQL_TYPE_DATE 91
+#define SQL_TYPE_TIME 92
+#define SQL_TYPE_TIMESTAMP 93
+#define SQL_UNNAMED 1
+#define SQL_UNSPECIFIED 0
+#define SQL_XOPEN_CLI_YEAR 10000
+#endif /* ODBCVER >= 0x0300 */
+
+#ifndef RC_INVOKED
+SQLRETURN SQL_API SQLAllocConnect(SQLHENV,SQLHDBC*); /* deprecated */
+SQLRETURN SQL_API SQLAllocEnv(SQLHENV*); /* deprecated */
+SQLRETURN SQL_API SQLAllocStmt(SQLHDBC,SQLHSTMT*); /* deprecated */
+SQLRETURN SQL_API SQLBindCol(SQLHSTMT,SQLUSMALLINT,SQLSMALLINT,SQLPOINTER,SQLLEN,SQLLEN*);
+SQLRETURN SQL_API SQLCancel(SQLHSTMT);
+SQLRETURN SQL_API SQLConnect(SQLHDBC,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT);
+SQLRETURN SQL_API SQLDescribeCol(SQLHSTMT,SQLUSMALLINT,SQLCHAR*,SQLSMALLINT,SQLSMALLINT*,SQLSMALLINT*,SQLULEN*,SQLSMALLINT*,SQLSMALLINT*);
+SQLRETURN SQL_API SQLDisconnect(SQLHDBC);
+SQLRETURN SQL_API SQLError(SQLHENV,SQLHDBC,SQLHSTMT,SQLCHAR*,SQLINTEGER*,SQLCHAR*,SQLSMALLINT,SQLSMALLINT*); /* deprecated */
+SQLRETURN SQL_API SQLExecDirect(SQLHSTMT,SQLCHAR*,SQLINTEGER);
+SQLRETURN SQL_API SQLExecute(SQLHSTMT);
+SQLRETURN SQL_API SQLFetch(SQLHSTMT);
+SQLRETURN SQL_API SQLFreeConnect(SQLHDBC); /* deprecated */
+SQLRETURN SQL_API SQLFreeEnv(SQLHENV); /* deprecated */
+SQLRETURN SQL_API SQLFreeStmt(SQLHSTMT,SQLUSMALLINT);
+SQLRETURN SQL_API SQLGetCursorName(SQLHSTMT,SQLCHAR*,SQLSMALLINT,SQLSMALLINT*);
+SQLRETURN SQL_API SQLNumResultCols(SQLHSTMT,SQLSMALLINT*);
+SQLRETURN SQL_API SQLPrepare(SQLHSTMT,SQLCHAR*,SQLINTEGER);
+SQLRETURN SQL_API SQLRowCount(SQLHSTMT,SQLLEN*);
+SQLRETURN SQL_API SQLSetCursorName(SQLHSTMT,SQLCHAR*,SQLSMALLINT);
+SQLRETURN SQL_API SQLTransact(SQLHENV,SQLHDBC,SQLUSMALLINT);
+SQLRETURN SQL_API SQLSetParam(SQLHSTMT,SQLUSMALLINT,SQLSMALLINT,SQLSMALLINT,SQLULEN,SQLSMALLINT,SQLPOINTER,SQLLEN*); /* deprecated */
+SQLRETURN SQL_API SQLColumns(SQLHSTMT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT);
+SQLRETURN SQL_API SQLGetConnectOption(SQLHDBC,SQLUSMALLINT,SQLPOINTER); /* deprecated */
+SQLRETURN SQL_API SQLGetData(SQLHSTMT,SQLUSMALLINT,SQLSMALLINT,SQLPOINTER,SQLLEN,SQLLEN*);
+SQLRETURN SQL_API SQLGetFunctions(SQLHDBC,SQLUSMALLINT,SQLUSMALLINT*);
+SQLRETURN SQL_API SQLGetInfo(SQLHDBC,SQLUSMALLINT,SQLPOINTER,SQLSMALLINT,SQLSMALLINT*);
+SQLRETURN SQL_API SQLGetStmtOption(SQLHSTMT,SQLUSMALLINT,SQLPOINTER); /* deprecated */
+SQLRETURN SQL_API SQLGetTypeInfo(SQLHSTMT,SQLSMALLINT);
+SQLRETURN SQL_API SQLParamData(SQLHSTMT,SQLPOINTER*);
+SQLRETURN SQL_API SQLPutData(SQLHSTMT,SQLPOINTER,SQLLEN);
+SQLRETURN SQL_API SQLSetConnectOption(SQLHDBC,SQLUSMALLINT,SQLULEN); /* deprecated */
+SQLRETURN SQL_API SQLSetStmtOption(SQLHSTMT,SQLUSMALLINT,SQLROWCOUNT); /* deprecated */
+SQLRETURN SQL_API SQLSpecialColumns(SQLHSTMT,SQLUSMALLINT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLUSMALLINT,SQLUSMALLINT);
+SQLRETURN SQL_API SQLStatistics(SQLHSTMT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLUSMALLINT,SQLUSMALLINT);
+SQLRETURN SQL_API SQLTables(SQLHSTMT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT);
+SQLRETURN SQL_API SQLDataSources(SQLHENV,SQLUSMALLINT,SQLCHAR*,SQLSMALLINT,SQLSMALLINT*,SQLCHAR*,SQLSMALLINT,SQLSMALLINT*);
+#if (ODBCVER >= 0x0300)
+SQLRETURN SQL_API SQLAllocHandle(SQLSMALLINT,SQLHANDLE,SQLHANDLE*);
+SQLRETURN SQL_API SQLBindParam(SQLHSTMT,SQLUSMALLINT,SQLSMALLINT,SQLSMALLINT,SQLULEN,SQLSMALLINT,SQLPOINTER,SQLLEN*);
+SQLRETURN SQL_API SQLCloseCursor(SQLHSTMT);
+SQLRETURN SQL_API SQLColAttribute(SQLHSTMT,SQLUSMALLINT,SQLUSMALLINT,SQLPOINTER,SQLSMALLINT,SQLSMALLINT*,SQLPOINTER);
+SQLRETURN SQL_API SQLCopyDesc(SQLHDESC,SQLHDESC);
+SQLRETURN SQL_API SQLEndTran(SQLSMALLINT,SQLHANDLE,SQLSMALLINT);
+SQLRETURN SQL_API SQLFetchScroll(SQLHSTMT,SQLSMALLINT,SQLROWOFFSET);
+SQLRETURN SQL_API SQLFreeHandle(SQLSMALLINT,SQLHANDLE);
+SQLRETURN SQL_API SQLGetConnectAttr(SQLHDBC,SQLINTEGER,SQLPOINTER,SQLINTEGER,SQLINTEGER*);
+SQLRETURN SQL_API SQLGetDescField(SQLHDESC,SQLSMALLINT,SQLSMALLINT,SQLPOINTER,SQLINTEGER,SQLINTEGER*);
+SQLRETURN SQL_API SQLGetDescRec(SQLHDESC,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLSMALLINT*,
+ SQLSMALLINT*,SQLSMALLINT*,SQLLEN*,SQLSMALLINT*,SQLSMALLINT*,SQLSMALLINT*);
+SQLRETURN SQL_API SQLGetDiagField(SQLSMALLINT,SQLHANDLE,SQLSMALLINT,SQLSMALLINT,SQLPOINTER,SQLSMALLINT,SQLSMALLINT*);
+SQLRETURN SQL_API SQLGetDiagRec(SQLSMALLINT,SQLHANDLE,SQLSMALLINT,SQLCHAR*,SQLINTEGER*,SQLCHAR*,SQLSMALLINT,SQLSMALLINT*);
+SQLRETURN SQL_API SQLGetEnvAttr(SQLHENV,SQLINTEGER,SQLPOINTER,SQLINTEGER,SQLINTEGER*);
+SQLRETURN SQL_API SQLGetStmtAttr(SQLHSTMT,SQLINTEGER,SQLPOINTER,SQLINTEGER,SQLINTEGER*);
+SQLRETURN SQL_API SQLSetConnectAttr(SQLHDBC,SQLINTEGER,SQLPOINTER,SQLINTEGER);
+SQLRETURN SQL_API SQLSetDescField(SQLHDESC,SQLSMALLINT,SQLSMALLINT,SQLPOINTER,SQLINTEGER);
+SQLRETURN SQL_API SQLSetDescRec(SQLHDESC,SQLSMALLINT,SQLSMALLINT,SQLSMALLINT,SQLLEN,SQLSMALLINT,
+ SQLSMALLINT,SQLPOINTER,SQLLEN*,SQLLEN*);
+SQLRETURN SQL_API SQLSetEnvAttr(SQLHENV,SQLINTEGER,SQLPOINTER,SQLINTEGER);
+SQLRETURN SQL_API SQLSetStmtAttr(SQLHSTMT,SQLINTEGER,SQLPOINTER,SQLINTEGER);
+#endif /* (ODBCVER >= 0x0300) */
+#endif /* ndef RC_INVOKED */
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/sqlext.h b/tcc/include/winapi/sqlext.h
new file mode 100644
index 0000000..9702b1b
--- /dev/null
+++ b/tcc/include/winapi/sqlext.h
@@ -0,0 +1,1218 @@
+#ifndef _SQLEXT_H
+#define _SQLEXT_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#include <sql.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+#define SQL_SPEC_MAJOR 3
+#define SQL_SPEC_MINOR 51
+#define SQL_SPEC_STRING "03.51"
+#define SQL_ACCESS_MODE 101
+#define SQL_ACTIVE_CONNECTIONS 0
+#define SQL_ACTIVE_STATEMENTS 1
+#define SQL_ADD 4
+#define SQL_ALL_EXCEPT_LIKE 2
+#define SQL_API_ALL_FUNCTIONS 0
+#define SQL_API_LOADBYORDINAL 199
+#define SQL_API_SQLBINDPARAMETER 72
+#define SQL_API_SQLBROWSECONNECT 55
+#define SQL_API_SQLCOLATTRIBUTES 6
+#define SQL_API_SQLCOLUMNPRIVILEGES 56
+#define SQL_API_SQLDESCRIBEPARAM 58
+#define SQL_API_SQLDRIVERCONNECT 41
+#define SQL_API_SQLDRIVERS 71
+#define SQL_API_SQLEXTENDEDFETCH 59
+#define SQL_API_SQLFOREIGNKEYS 60
+#define SQL_API_SQLMORERESULTS 61
+#define SQL_API_SQLNATIVESQL 62
+#define SQL_API_SQLNUMPARAMS 63
+#define SQL_API_SQLPARAMOPTIONS 64
+#define SQL_API_SQLPRIMARYKEYS 65
+#define SQL_API_SQLPROCEDURECOLUMNS 66
+#define SQL_API_SQLPROCEDURES 67
+#define SQL_API_SQLSETPOS 68
+#define SQL_API_SQLSETSCROLLOPTIONS 69
+#define SQL_API_SQLTABLEPRIVILEGES 70
+#define SQL_ASYNC_ENABLE 4
+#define SQL_ASYNC_ENABLE_DEFAULT SQL_ASYNC_ENABLE_OFF
+#define SQL_ASYNC_ENABLE_OFF 0UL
+#define SQL_ASYNC_ENABLE_ON 1UL
+#define SQL_ATTR_CONNECTION_DEAD 1209
+#define SQL_ATTR_READONLY 0
+#define SQL_ATTR_READWRITE_UNKNOWN 2
+#define SQL_ATTR_WRITE 1
+#define SQL_AUTOCOMMIT 102
+#define SQL_AUTOCOMMIT_DEFAULT SQL_AUTOCOMMIT_ON
+#define SQL_AUTOCOMMIT_OFF 0UL
+#define SQL_AUTOCOMMIT_ON 1UL
+#define SQL_BEST_ROWID 1
+#define SQL_BIGINT (-5)
+#define SQL_BINARY (-2)
+#define SQL_BIND_BY_COLUMN 0UL
+#define SQL_BIND_TYPE 5
+#define SQL_BIND_TYPE_DEFAULT SQL_BIND_BY_COLUMN
+#define SQL_BIT (-7)
+#define SQL_BOOKMARK_PERSISTENCE 82
+#define SQL_BP_CLOSE 1
+#define SQL_BP_DELETE 2
+#define SQL_BP_DROP 4
+#define SQL_BP_OTHER_HSTMT 32
+#define SQL_BP_SCROLL 64
+#define SQL_BP_TRANSACTION 8
+#define SQL_BP_UPDATE 16
+#define SQL_C_BINARY SQL_BINARY
+#define SQL_C_BIT SQL_BIT
+#define SQL_C_BOOKMARK SQL_C_ULONG
+#define SQL_C_CHAR SQL_CHAR
+#define SQL_C_DATE SQL_DATE
+#define SQL_C_DEFAULT 99
+#define SQL_C_DOUBLE SQL_DOUBLE
+#define SQL_C_FLOAT SQL_REAL
+#define SQL_C_LONG SQL_INTEGER
+#define SQL_C_SHORT SQL_SMALLINT
+#define SQL_C_SLONG (SQL_C_LONG+SQL_SIGNED_OFFSET)
+#define SQL_C_SSHORT (SQL_C_SHORT+SQL_SIGNED_OFFSET)
+#define SQL_C_STINYINT (SQL_TINYINT+SQL_SIGNED_OFFSET)
+#define SQL_C_TIME SQL_TIME
+#define SQL_C_TIMESTAMP SQL_TIMESTAMP
+#define SQL_C_TINYINT SQL_TINYINT
+#define SQL_C_ULONG (SQL_C_LONG+SQL_UNSIGNED_OFFSET)
+#define SQL_C_USHORT (SQL_C_SHORT+SQL_UNSIGNED_OFFSET)
+#define SQL_C_UTINYINT (SQL_TINYINT+SQL_UNSIGNED_OFFSET)
+#define SQL_CASCADE 0
+#define SQL_CB_NON_NULL 1
+#define SQL_CB_NULL 0
+#define SQL_CC_CLOSE SQL_CB_CLOSE /* deprecated */
+#define SQL_CC_DELETE SQL_CB_DELETE /* deprecated */
+#define SQL_CC_PRESERVE SQL_CB_PRESERVE /* deprecated */
+#define SQL_CD_FALSE 0L
+#define SQL_CD_TRUE 1L
+#define SQL_CN_ANY 2
+#define SQL_CN_DIFFERENT 1
+#define SQL_CN_NONE 0
+#define SQL_COLATT_OPT_MAX SQL_COLUMN_LABEL
+#define SQL_COLATT_OPT_MIN SQL_COLUMN_COUNT
+#define SQL_COLUMN_ALIAS 87
+#define SQL_COLUMN_AUTO_INCREMENT 11
+#define SQL_COLUMN_CASE_SENSITIVE 12
+#define SQL_COLUMN_COUNT 0
+#define SQL_COLUMN_DISPLAY_SIZE 6
+#define SQL_COLUMN_LABEL 18
+#define SQL_COLUMN_LENGTH 3
+#define SQL_COLUMN_MONEY 9
+#define SQL_COLUMN_NAME 1
+#define SQL_COLUMN_NULLABLE 7
+#define SQL_COLUMN_OWNER_NAME 16
+#define SQL_COLUMN_PRECISION 4
+#define SQL_COLUMN_QUALIFIER_NAME 17
+#define SQL_COLUMN_SCALE 5
+#define SQL_COLUMN_SEARCHABLE 13
+#define SQL_COLUMN_TABLE_NAME 15
+#define SQL_COLUMN_TYPE 2
+#define SQL_COLUMN_TYPE_NAME 14
+#define SQL_COLUMN_UNSIGNED 8
+#define SQL_COLUMN_UPDATABLE 10
+#define SQL_CONCAT_NULL_BEHAVIOR 22
+#define SQL_CONCUR_DEFAULT SQL_CONCUR_READ_ONLY
+#define SQL_CONCUR_LOCK 2
+#define SQL_CONCUR_READ_ONLY 1
+#define SQL_CONCUR_ROWVER 3
+#define SQL_CONCUR_TIMESTAMP SQL_CONCUR_ROWVER /* deprecated */
+#define SQL_CONCUR_VALUES 4
+#define SQL_CONCURRENCY 7
+#define SQL_CONVERT_BIGINT 53
+#define SQL_CONVERT_BINARY 54
+#define SQL_CONVERT_BIT 55
+#define SQL_CONVERT_CHAR 56
+#define SQL_CONVERT_DATE 57
+#define SQL_CONVERT_DECIMAL 58
+#define SQL_CONVERT_DOUBLE 59
+#define SQL_CONVERT_FLOAT 60
+#define SQL_CONVERT_FUNCTIONS 48
+#define SQL_CONVERT_INTEGER 61
+#define SQL_CONVERT_LONGVARBINARY 71
+#define SQL_CONVERT_LONGVARCHAR 62
+#define SQL_CONVERT_NUMERIC 63
+#define SQL_CONVERT_REAL 64
+#define SQL_CONVERT_SMALLINT 65
+#define SQL_CONVERT_TIME 66
+#define SQL_CONVERT_TIMESTAMP 67
+#define SQL_CONVERT_TINYINT 68
+#define SQL_CONVERT_VARBINARY 69
+#define SQL_CONVERT_VARCHAR 70
+#define SQL_CORRELATION_NAME 74
+#define SQL_CR_CLOSE SQL_CB_CLOSE /* deprecated */
+#define SQL_CR_DELETE SQL_CB_DELETE /* deprecated */
+#define SQL_CR_PRESERVE SQL_CB_PRESERVE /* deprecated */
+#define SQL_CUR_DEFAULT SQL_CUR_USE_DRIVER
+#define SQL_CUR_USE_DRIVER 2UL
+#define SQL_CUR_USE_IF_NEEDED 0UL
+#define SQL_CUR_USE_ODBC 1UL
+#define SQL_CURRENT_QUALIFIER 109
+#define SQL_CURSOR_DYNAMIC 2UL
+#define SQL_CURSOR_FORWARD_ONLY 0UL
+#define SQL_CURSOR_KEYSET_DRIVEN 1UL
+#define SQL_CURSOR_ROLLBACK_BEHAVIOR 24
+#define SQL_CURSOR_STATIC 3UL
+#define SQL_CURSOR_TYPE 6
+#define SQL_CURSOR_TYPE_DEFAULT SQL_CURSOR_FORWARD_ONLY
+#define SQL_CV_CASCADED 0x00000004L
+#define SQL_CV_CHECK_OPTION 0x00000002L
+#define SQL_CV_CREATE_VIEW 0x00000001L
+#define SQL_CV_LOCAL 0x00000008L
+#define SQL_CVT_BIGINT 0x00004000L
+#define SQL_CVT_BINARY 0x00000400L
+#define SQL_CVT_BIT 0x00001000L
+#define SQL_CVT_CHAR 0x00000001L
+#define SQL_CVT_DATE 0x00008000L
+#define SQL_CVT_DECIMAL 0x00000004L
+#define SQL_CVT_DOUBLE 0x00000080L
+#define SQL_CVT_FLOAT 0x00000020L
+#define SQL_CVT_INTEGER 0x00000008L
+#define SQL_CVT_LONGVARBINARY 0x00040000L
+#define SQL_CVT_LONGVARCHAR 0x00000200L
+#define SQL_CVT_NUMERIC 0x00000002L
+#define SQL_CVT_REAL 0x00000040L
+#define SQL_CVT_SMALLINT 0x00000010L
+#define SQL_CVT_TIME 0x00010000L
+#define SQL_CVT_TIMESTAMP 0x00020000L
+#define SQL_CVT_TINYINT 0x00002000L
+#define SQL_CVT_VARBINARY 0x00000800L
+#define SQL_CVT_VARCHAR 0x00000100L
+#define SQL_DATABASE_NAME 16 /* deprecated */
+#define SQL_DATE 9
+#define SQL_DEFAULT_PARAM (-5)
+#define SQL_DELETE 3
+#define SQL_DRIVER_COMPLETE 1
+#define SQL_DRIVER_COMPLETE_REQUIRED 3
+#define SQL_DRIVER_HDBC 3
+#define SQL_DRIVER_HENV 4
+#define SQL_DRIVER_HLIB 76
+#define SQL_DRIVER_HSTMT 5
+#define SQL_DRIVER_NAME 6
+#define SQL_DRIVER_NOPROMPT 0
+#define SQL_DRIVER_ODBC_VER 77
+#define SQL_DRIVER_PROMPT 2
+#define SQL_DRIVER_VER 7
+#define SQL_DTC_ENLIST_EXPENSIVE 1
+#define SQL_DTC_TRANSITION_COST 1750
+#define SQL_DTC_UNENLIST_EXPENSIVE 2
+#define SQL_ENSURE 1
+#define SQL_ENTIRE_ROWSET 0
+#define SQL_EXPRESSIONS_IN_ORDERBY 27
+#define SQL_FD_FETCH_BOOKMARK 128
+#define SQL_FD_FETCH_PREV SQL_FD_FETCH_PRIOR /* deprecated */
+#define SQL_FD_FETCH_RESUME 64
+#define SQL_FETCH_BOOKMARK 8
+#define SQL_FETCH_PREV SQL_FETCH_PRIOR /* deprecated */
+#define SQL_FETCH_RESUME 7 /* deprecated */
+#define SQL_FILE_CATALOG SQL_FILE_QUALIFIER
+#define SQL_FILE_NOT_SUPPORTED 0x0000
+#define SQL_FILE_QUALIFIER 0x0002
+#define SQL_FILE_TABLE 0x0001
+#define SQL_FILE_USAGE 84
+#define SQL_FN_CVT_CONVERT 0x00000001L
+#define SQL_FN_NUM_ABS 0x00000001L
+#define SQL_FN_NUM_ACOS 0x00000002L
+#define SQL_FN_NUM_ASIN 0x00000004L
+#define SQL_FN_NUM_ATAN 0x00000008L
+#define SQL_FN_NUM_ATAN2 0x00000010L
+#define SQL_FN_NUM_CEILING 0x00000020L
+#define SQL_FN_NUM_COS 0x00000040L
+#define SQL_FN_NUM_COT 0x00000080L
+#define SQL_FN_NUM_DEGREES 0x00040000L
+#define SQL_FN_NUM_EXP 0x00000100L
+#define SQL_FN_NUM_FLOOR 0x00000200L
+#define SQL_FN_NUM_LOG 0x00000400L
+#define SQL_FN_NUM_LOG10 0x00080000L
+#define SQL_FN_NUM_MOD 0x00000800L
+#define SQL_FN_NUM_PI 0x00010000L
+#define SQL_FN_NUM_POWER 0x00100000L
+#define SQL_FN_NUM_RADIANS 0x00200000L
+#define SQL_FN_NUM_RAND 0x00020000L
+#define SQL_FN_NUM_ROUND 0x00400000L
+#define SQL_FN_NUM_SIGN 0x00001000L
+#define SQL_FN_NUM_SIN 0x00002000L
+#define SQL_FN_NUM_SQRT 0x00004000L
+#define SQL_FN_NUM_TAN 0x00008000L
+#define SQL_FN_NUM_TRUNCATE 0x00800000L
+#define SQL_FN_STR_ASCII 0x00002000L
+#define SQL_FN_STR_CHAR 0x00004000L
+#define SQL_FN_STR_CONCAT 0x00000001L
+#define SQL_FN_STR_DIFFERENCE 0x00008000L
+#define SQL_FN_STR_INSERT 0x00000002L
+#define SQL_FN_STR_LCASE 0x00000040L
+#define SQL_FN_STR_LEFT 0x00000004L
+#define SQL_FN_STR_LENGTH 0x00000010L
+#define SQL_FN_STR_LOCATE 0x00000020L
+#define SQL_FN_STR_LOCATE_2 0x00010000L
+#define SQL_FN_STR_LTRIM 0x00000008L
+#define SQL_FN_STR_REPEAT 0x00000080L
+#define SQL_FN_STR_REPLACE 0x00000100L
+#define SQL_FN_STR_RIGHT 0x00000200L
+#define SQL_FN_STR_RTRIM 0x00000400L
+#define SQL_FN_STR_SOUNDEX 0x00020000L
+#define SQL_FN_STR_SPACE 0x00040000L
+#define SQL_FN_STR_SUBSTRING 0x00000800L
+#define SQL_FN_STR_UCASE 0x00001000L
+#define SQL_FN_SYS_DBNAME 0x00000002L
+#define SQL_FN_SYS_IFNULL 0x00000004L
+#define SQL_FN_SYS_USERNAME 0x00000001L
+#define SQL_FN_TD_CURDATE 0x00000002L
+#define SQL_FN_TD_CURTIME 0x00000200L
+#define SQL_FN_TD_DAYNAME 0x00008000L
+#define SQL_FN_TD_DAYOFMONTH 0x00000004L
+#define SQL_FN_TD_DAYOFWEEK 0x00000008L
+#define SQL_FN_TD_DAYOFYEAR 0x00000010L
+#define SQL_FN_TD_HOUR 0x00000400L
+#define SQL_FN_TD_MINUTE 0x00000800L
+#define SQL_FN_TD_MONTH 0x00000020L
+#define SQL_FN_TD_MONTHNAME 0x00010000L
+#define SQL_FN_TD_NOW 0x00000001L
+#define SQL_FN_TD_QUARTER 0x00000040L
+#define SQL_FN_TD_SECOND 0x00001000L
+#define SQL_FN_TD_TIMESTAMPADD 0x00002000L
+#define SQL_FN_TD_TIMESTAMPDIFF 0x00004000L
+#define SQL_FN_TD_WEEK 0x00000080L
+#define SQL_FN_TD_YEAR 0x00000100L
+#define SQL_FN_TSI_DAY 0x00000010L
+#define SQL_FN_TSI_FRAC_SECOND 0x00000001L
+#define SQL_FN_TSI_HOUR 0x00000008L
+#define SQL_FN_TSI_MINUTE 0x00000004L
+#define SQL_FN_TSI_MONTH 0x00000040L
+#define SQL_FN_TSI_QUARTER 0x00000080L
+#define SQL_FN_TSI_SECOND 0x00000002L
+#define SQL_FN_TSI_WEEK 0x00000020L
+#define SQL_FN_TSI_YEAR 0x00000100L
+#define SQL_GB_GROUP_BY_CONTAINS_SELECT 2
+#define SQL_GB_GROUP_BY_EQUALS_SELECT 1
+#define SQL_GB_NO_RELATION 3
+#define SQL_GB_NOT_SUPPORTED 0
+#define SQL_GD_BLOCK 4
+#define SQL_GD_BOUND 8
+#define SQL_GET_BOOKMARK 13
+#define SQL_GROUP_BY 88
+#define SQL_IGNORE (-6)
+#define SQL_INFO_FIRST 0
+#define SQL_KEYSET_SIZE 8
+#define SQL_KEYSET_SIZE_DEFAULT 0UL
+#define SQL_KEYWORDS 89
+#define SQL_LCK_EXCLUSIVE 2
+#define SQL_LCK_NO_CHANGE 1
+#define SQL_LCK_UNLOCK 4
+#define SQL_LEN_BINARY_ATTR(length) (-(length)+SQL_LEN_BINARY_ATTR_OFFSET)
+#define SQL_LEN_BINARY_ATTR_OFFSET (-100)
+#define SQL_LEN_DATA_AT_EXEC(length) (-(length)+SQL_LEN_DATA_AT_EXEC_OFFSET)
+#define SQL_LEN_DATA_AT_EXEC_OFFSET (-100)
+#define SQL_LIKE_ESCAPE_CLAUSE 113
+#define SQL_LIKE_ONLY 1
+#define SQL_LOCK_EXCLUSIVE 1
+#define SQL_LOCK_NO_CHANGE 0
+#define SQL_LOCK_TYPES 78
+#define SQL_LOCK_UNLOCK 2
+#define SQL_LOGIN_TIMEOUT 103
+#define SQL_LOGIN_TIMEOUT_DEFAULT 15UL
+#define SQL_LONGVARBINARY (-4)
+#define SQL_LONGVARCHAR (-1)
+#define SQL_MAX_BINARY_LITERAL_LEN 112
+#define SQL_MAX_CHAR_LITERAL_LEN 108
+#define SQL_MAX_DSN_LENGTH 32
+#define SQL_MAX_LENGTH 3
+#define SQL_MAX_LENGTH_DEFAULT 0UL
+#define SQL_MAX_OPTION_STRING_LENGTH 256
+#define SQL_MAX_OWNER_NAME_LEN 32
+#define SQL_MAX_PROCEDURE_NAME_LEN 33
+#define SQL_MAX_QUALIFIER_NAME_LEN 34
+#define SQL_MAX_ROW_SIZE_INCLUDES_LONG 103
+#define SQL_MAX_ROWS 1
+#define SQL_MAX_ROWS_DEFAULT 0UL
+#define SQL_MODE_DEFAULT SQL_MODE_READ_WRITE
+#define SQL_MODE_READ_ONLY 1UL
+#define SQL_MODE_READ_WRITE 0UL
+#define SQL_MULT_RESULT_SETS 36
+#define SQL_MULTIPLE_ACTIVE_TXN 37
+#define SQL_NC_END 0x0004
+#define SQL_NC_START 0x0002
+#define SQL_NEED_LONG_DATA_LEN 111
+#define SQL_NNC_NON_NULL 0x0001
+#define SQL_NNC_NULL 0x0000
+#define SQL_NO_TOTAL (-4)
+#define SQL_NON_NULLABLE_COLUMNS 75
+#define SQL_NOSCAN 2
+#define SQL_NOSCAN_DEFAULT SQL_NOSCAN_OFF
+#define SQL_NOSCAN_OFF 0UL
+#define SQL_NOSCAN_ON 1UL
+#define SQL_NUMERIC_FUNCTIONS 49
+#define SQL_OAC_LEVEL1 0x0001
+#define SQL_OAC_LEVEL2 0x0002
+#define SQL_OAC_NONE 0x0000
+#define SQL_ODBC_API_CONFORMANCE 9
+#define SQL_ODBC_CURSORS 110
+#define SQL_ODBC_SAG_CLI_CONFORMANCE 12
+#define SQL_ODBC_SQL_CONFORMANCE 15
+#define SQL_ODBC_SQL_OPT_IEF 73
+#define SQL_ODBC_VER 10
+#define SQL_OPT_TRACE 104
+#define SQL_OPT_TRACE_DEFAULT SQL_OPT_TRACE_OFF
+#define SQL_OPT_TRACE_FILE_DEFAULT "\\SQL.LOG"
+#define SQL_OPT_TRACE_OFF 0UL
+#define SQL_OPT_TRACE_ON 1UL
+#define SQL_OPT_TRACEFILE 105
+#define SQL_OSC_CORE 1
+#define SQL_OSC_EXTENDED 2
+#define SQL_OSC_MINIMUM 0
+#define SQL_OSCC_COMPLIANT 1
+#define SQL_OSCC_NOT_COMPLIANT 0
+#define SQL_OU_DML_STATEMENTS 1
+#define SQL_OU_INDEX_DEFINITION 8
+#define SQL_OU_PRIVILEGE_DEFINITION 16
+#define SQL_OU_PROCEDURE_INVOCATION 2
+#define SQL_OU_TABLE_DEFINITION 4
+#define SQL_OUTER_JOINS 38
+#define SQL_OWNER_TERM 39
+#define SQL_OWNER_USAGE 91
+#define SQL_PACKET_SIZE 112
+#define SQL_PARAM_INPUT 1
+#define SQL_PARAM_INPUT_OUTPUT 2
+#define SQL_PARAM_OUTPUT 4
+#define SQL_PARAM_TYPE_DEFAULT SQL_PARAM_INPUT_OUTPUT
+#define SQL_PARAM_TYPE_UNKNOWN 0
+#define SQL_PC_NOT_PSEUDO 1
+#define SQL_POS_ADD 16
+#define SQL_POS_DELETE 8
+#define SQL_POS_OPERATIONS 79
+#define SQL_POS_POSITION 1
+#define SQL_POS_REFRESH 2
+#define SQL_POS_UPDATE 4
+#define SQL_POSITION 0
+#define SQL_POSITIONED_STATEMENTS 80
+#define SQL_PRED_SEARCHABLE SQL_SEARCHABLE
+#define SQL_PROCEDURE_TERM 40
+#define SQL_PROCEDURES 21
+#define SQL_PS_POSITIONED_DELETE 1
+#define SQL_PS_POSITIONED_UPDATE 2
+#define SQL_PS_SELECT_FOR_UPDATE 4
+#define SQL_PT_FUNCTION 2
+#define SQL_PT_PROCEDURE 1
+#define SQL_PT_UNKNOWN 0
+#define SQL_QL_END 0x0002
+#define SQL_QL_START 0x0001
+#define SQL_QU_DML_STATEMENTS 1
+#define SQL_QU_INDEX_DEFINITION 8
+#define SQL_QU_PRIVILEGE_DEFINITION 16
+#define SQL_QU_PROCEDURE_INVOCATION 2
+#define SQL_QU_TABLE_DEFINITION 4
+#define SQL_QUALIFIER_LOCATION 114
+#define SQL_QUALIFIER_NAME_SEPARATOR 41
+#define SQL_QUALIFIER_TERM 42
+#define SQL_QUALIFIER_USAGE 92
+#define SQL_QUERY_TIMEOUT 0
+#define SQL_QUERY_TIMEOUT_DEFAULT 0UL
+#define SQL_QUICK 0
+#define SQL_QUIET_MODE 111
+#define SQL_QUOTED_IDENTIFIER_CASE 93
+#define SQL_RD_DEFAULT SQL_RD_ON
+#define SQL_RD_OFF 0UL
+#define SQL_RD_ON 1UL
+#define SQL_REFRESH 1
+#define SQL_RESTRICT 1
+#define SQL_RESULT_COL 3
+#define SQL_RETRIEVE_DATA 11
+#define SQL_RETURN_VALUE 5
+#define SQL_ROW_ADDED 4
+#define SQL_ROW_DELETED 1
+#define SQL_ROW_ERROR 5
+#define SQL_ROW_NOROW 3
+#define SQL_ROW_NUMBER 14
+#define SQL_ROW_SUCCESS 0
+#define SQL_ROW_UPDATED 2
+#define SQL_ROW_UPDATES 11
+#define SQL_ROWSET_SIZE 9
+#define SQL_ROWSET_SIZE_DEFAULT 1UL
+#define SQL_ROWVER 2
+#define SQL_SC_NON_UNIQUE 0UL
+#define SQL_SC_TRY_UNIQUE 1UL
+#define SQL_SC_UNIQUE 2UL
+#define SQL_SCCO_OPT_TIMESTAMP SQL_SCCO_OPT_ROWVER /* deprecated */
+#define SQL_SCROLL_DYNAMIC (-2L) /* deprecated */
+#define SQL_SCROLL_FORWARD_ONLY 0L /* deprecated */
+#define SQL_SCROLL_KEYSET_DRIVEN (-1L) /* deprecated */
+#define SQL_SCROLL_OPTIONS 44
+#define SQL_SCROLL_STATIC (-3L) /* deprecated */
+#define SQL_SEARCHABLE 3
+#define SQL_SET_NULL 2
+#define SQL_SETPARAM_VALUE_MAX (-1L)
+#define SQL_SETPOS_MAX_LOCK_VALUE SQL_LOCK_UNLOCK
+#define SQL_SETPOS_MAX_OPTION_VALUE SQL_ADD
+#define SQL_SIGNED_OFFSET (-20)
+#define SQL_SIMULATE_CURSOR 10
+#define SQL_SO_DYNAMIC 4
+#define SQL_SO_FORWARD_ONLY 1
+#define SQL_SO_KEYSET_DRIVEN 2
+#define SQL_SO_MIXED 8
+#define SQL_SO_STATIC 16
+#define SQL_SQ_COMPARISON 1
+#define SQL_SQ_CORRELATED_SUBQUERIES 16
+#define SQL_SQ_EXISTS 2
+#define SQL_SQ_IN 4
+#define SQL_SQ_QUANTIFIED 8
+#define SQL_SQLSTATE_SIZE 5
+#define SQL_SS_ADDITIONS 1
+#define SQL_SS_DELETIONS 2
+#define SQL_SS_UPDATES 4
+#define SQL_STATIC_SENSITIVITY 83
+#define SQL_STRING_FUNCTIONS 50
+#define SQL_SUBQUERIES 95
+#define SQL_SYSTEM_FUNCTIONS 51
+#define SQL_TABLE_STAT 0
+#define SQL_TABLE_TERM 45
+#define SQL_TIME 10
+#define SQL_TIMEDATE_ADD_INTERVALS 109
+#define SQL_TIMEDATE_DIFF_INTERVALS 110
+#define SQL_TIMEDATE_FUNCTIONS 52
+#define SQL_TIMESTAMP 11
+#define SQL_TINYINT (-6)
+#define SQL_TRANSLATE_DLL 106
+#define SQL_TRANSLATE_OPTION 107
+#define SQL_TXN_ISOLATION 108
+#define SQL_TXN_VERSIONING 16
+#define SQL_TYPE_NULL 0
+#define SQL_U_UNION 1
+#define SQL_U_UNION_ALL 2
+#define SQL_UB_DEFAULT SQL_UB_OFF
+#define SQL_UB_OFF 0UL
+#define SQL_UB_ON 01UL
+#define SQL_UNION 96
+#define SQL_UNSEARCHABLE 0
+#define SQL_UNSIGNED_OFFSET (-22)
+#define SQL_UPDATE 2
+#define SQL_USE_BOOKMARKS 12
+#define SQL_VARBINARY (-3)
+#define SQL_POSITION_TO(s,r) SQLSetPos(s,r,SQL_POSITION,SQL_LOCK_NO_CHANGE)
+#define SQL_LOCK_RECORD(s,r,l) SQLSetPos(s,r,SQL_POSITION,l)
+#define SQL_REFRESH_RECORD(s,r,l) SQLSetPos(s,r,SQL_REFRESH,l)
+#define SQL_UPDATE_RECORD(s,r) SQLSetPos(s,r,SQL_UPDATE,SQL_LOCK_NO_CHANGE)
+#define SQL_DELETE_RECORD(s,r) SQLSetPos(s,r,SQL_DELETE,SQL_LOCK_NO_CHANGE)
+#define SQL_ADD_RECORD(s,r) SQLSetPos(s,r,SQL_ADD,SQL_LOCK_NO_CHANGE)
+
+#if (ODBCVER < 0x0300)
+#define SQL_CONNECT_OPT_DRVR_START 1000
+#define SQL_CONN_OPT_MAX SQL_PACKET_SIZE
+#define SQL_CONN_OPT_MIN SQL_ACCESS_MODE
+#define SQL_STMT_OPT_MAX SQL_ROW_NUMBER
+#define SQL_STMT_OPT_MIN SQL_QUERY_TIMEOUT
+#define SQL_TYPE_DRIVER_START SQL_INTERVAL_YEAR
+#define SQL_TYPE_DRIVER_END SQL_UNICODE_LONGVARCHAR
+#define SQL_TYPE_MIN SQL_BIT
+#define SQL_TYPE_MAX SQL_VARCHAR
+#endif
+
+#if (ODBCVER < 0x0300)
+#define SQL_NO_DATA_FOUND 100
+#define SQL_INTERVAL_YEAR (-80)
+#define SQL_INTERVAL_MONTH (-81)
+#define SQL_INTERVAL_YEAR_TO_MONTH (-82)
+#define SQL_INTERVAL_DAY (-83)
+#define SQL_INTERVAL_HOUR (-84)
+#define SQL_INTERVAL_MINUTE (-85)
+#define SQL_INTERVAL_SECOND (-86)
+#define SQL_INTERVAL_DAY_TO_HOUR (-87)
+#define SQL_INTERVAL_DAY_TO_MINUTE (-88)
+#define SQL_INTERVAL_DAY_TO_SECOND (-89)
+#define SQL_INTERVAL_HOUR_TO_MINUTE (-90)
+#define SQL_INTERVAL_HOUR_TO_SECOND (-91)
+#define SQL_INTERVAL_MINUTE_TO_SECOND (-92)
+#else
+#define SQL_NO_DATA_FOUND SQL_NO_DATA
+#define SQL_CODE_YEAR 1
+#define SQL_CODE_MONTH 2
+#define SQL_CODE_DAY 3
+#define SQL_CODE_HOUR 4
+#define SQL_CODE_MINUTE 5
+#define SQL_CODE_SECOND 6
+#define SQL_CODE_YEAR_TO_MONTH 7
+#define SQL_CODE_DAY_TO_HOUR 8
+#define SQL_CODE_DAY_TO_MINUTE 9
+#define SQL_CODE_DAY_TO_SECOND 10
+#define SQL_CODE_HOUR_TO_MINUTE 11
+#define SQL_CODE_HOUR_TO_SECOND 12
+#define SQL_CODE_MINUTE_TO_SECOND 13
+#define SQL_INTERVAL_YEAR (100 + SQL_CODE_YEAR)
+#define SQL_INTERVAL_MONTH (100 + SQL_CODE_MONTH)
+#define SQL_INTERVAL_DAY (100 + SQL_CODE_DAY)
+#define SQL_INTERVAL_HOUR (100 + SQL_CODE_HOUR)
+#define SQL_INTERVAL_MINUTE (100 + SQL_CODE_MINUTE)
+#define SQL_INTERVAL_SECOND (100 + SQL_CODE_SECOND)
+#define SQL_INTERVAL_YEAR_TO_MONTH (100 + SQL_CODE_YEAR_TO_MONTH)
+#define SQL_INTERVAL_DAY_TO_HOUR (100 + SQL_CODE_DAY_TO_HOUR)
+#define SQL_INTERVAL_DAY_TO_MINUTE (100 + SQL_CODE_DAY_TO_MINUTE)
+#define SQL_INTERVAL_DAY_TO_SECOND (100 + SQL_CODE_DAY_TO_SECOND)
+#define SQL_INTERVAL_HOUR_TO_MINUTE (100 + SQL_CODE_HOUR_TO_MINUTE)
+#define SQL_INTERVAL_HOUR_TO_SECOND (100 + SQL_CODE_HOUR_TO_SECOND)
+#define SQL_INTERVAL_MINUTE_TO_SECOND (100 + SQL_CODE_MINUTE_TO_SECOND)
+#endif
+
+#if (ODBCVER <= 0x0300)
+#define SQL_UNICODE (-95)
+#define SQL_UNICODE_VARCHAR (-96)
+#define SQL_UNICODE_LONGVARCHAR (-97)
+#define SQL_UNICODE_CHAR SQL_UNICODE
+#else
+#define SQL_UNICODE SQL_WCHAR
+#define SQL_UNICODE_VARCHAR SQL_WVARCHAR
+#define SQL_UNICODE_LONGVARCHAR SQL_WLONGVARCHAR
+#define SQL_UNICODE_CHAR SQL_WCHAR
+#endif
+
+#if (ODBCVER >= 0x0201) && (ODBCVER < 0x0300)
+#define SQL_OJ_CAPABILITIES 65003
+#endif /* ODBCVER < 0x0300 */
+
+#if (ODBCVER >= 0x0250)
+#define SQL_NO_ACTION 3
+#define SQL_SET_DEFAULT 4
+#endif /* ODBCVER >= 0x0250 */
+
+#if (ODBCVER >= 0x0300)
+#define SQL_ACTIVE_ENVIRONMENTS 116
+#define SQL_AD_ADD_CONSTRAINT_DEFERRABLE 0x00000080L
+#define SQL_AD_ADD_CONSTRAINT_INITIALLY_DEFERRED 0x00000020L
+#define SQL_AD_ADD_CONSTRAINT_INITIALLY_IMMEDIATE 0x00000040L
+#define SQL_AD_ADD_CONSTRAINT_NON_DEFERRABLE 0x00000100L
+#define SQL_AD_ADD_DOMAIN_CONSTRAINT 0x00000002L
+#define SQL_AD_ADD_DOMAIN_DEFAULT 0x00000008L
+#define SQL_AD_CONSTRAINT_NAME_DEFINITION 0x00000001L
+#define SQL_AD_DROP_DOMAIN_CONSTRAINT 0x00000004L
+#define SQL_AD_DROP_DOMAIN_DEFAULT 0x00000010L
+#define SQL_AF_ALL 0x00000040L
+#define SQL_AF_AVG 0x00000001L
+#define SQL_AF_COUNT 0x00000002L
+#define SQL_AF_DISTINCT 0x00000020L
+#define SQL_AF_MAX 0x00000004L
+#define SQL_AF_MIN 0x00000008L
+#define SQL_AF_SUM 0x00000010L
+#define SQL_AGGREGATE_FUNCTIONS 169
+#define SQL_ALL_CATALOGS "%"
+#define SQL_ALL_SCHEMAS "%"
+#define SQL_ALL_TABLE_TYPES "%"
+#define SQL_ALTER_DOMAIN 117
+#define SQL_AM_CONNECTION 1
+#define SQL_AM_NONE 0
+#define SQL_AM_STATEMENT 2
+#define SQL_API_ODBC3_ALL_FUNCTIONS 999
+#define SQL_API_ODBC3_ALL_FUNCTIONS_SIZE 250
+#define SQL_API_SQLALLOCHANDLESTD 73
+#define SQL_API_SQLBULKOPERATIONS 24
+#define SQL_ASYNC_MODE 10021
+#define SQL_AT_ADD_COLUMN_COLLATION 0x00000080L
+#define SQL_AT_ADD_COLUMN_DEFAULT 0x00000040L
+#define SQL_AT_ADD_COLUMN_SINGLE 0x00000020L
+#define SQL_AT_ADD_TABLE_CONSTRAINT 0x00001000L
+#define SQL_AT_CONSTRAINT_DEFERRABLE 0x00040000L
+#define SQL_AT_CONSTRAINT_INITIALLY_DEFERRED 0x00010000L
+#define SQL_AT_CONSTRAINT_INITIALLY_IMMEDIATE 0x00020000L
+#define SQL_AT_CONSTRAINT_NAME_DEFINITION 0x00008000L
+#define SQL_AT_CONSTRAINT_NON_DEFERRABLE 0x00080000L
+#define SQL_AT_DROP_COLUMN_CASCADE 0x00000400L
+#define SQL_AT_DROP_COLUMN_DEFAULT 0x00000200L
+#define SQL_AT_DROP_COLUMN_RESTRICT 0x00000800L
+#define SQL_AT_DROP_TABLE_CONSTRAINT_CASCADE 0x00002000L
+#define SQL_AT_DROP_TABLE_CONSTRAINT_RESTRICT 0x00004000L
+#define SQL_AT_SET_COLUMN_DEFAULT 0x00000100L
+#define SQL_ATTR_ACCESS_MODE SQL_ACCESS_MODE
+#define SQL_ATTR_ASYNC_ENABLE 4
+#define SQL_ATTR_AUTOCOMMIT SQL_AUTOCOMMIT
+#define SQL_ATTR_CONCURRENCY SQL_CONCURRENCY
+#define SQL_ATTR_CONNECTION_POOLING 201
+#define SQL_ATTR_CONNECTION_TIMEOUT 113
+#define SQL_ATTR_CP_MATCH 202
+#define SQL_ATTR_CURRENT_CATALOG SQL_CURRENT_QUALIFIER
+#define SQL_ATTR_CURSOR_TYPE SQL_CURSOR_TYPE
+#define SQL_ATTR_DISCONNECT_BEHAVIOR 114
+#define SQL_ATTR_ENABLE_AUTO_IPD 15
+#define SQL_ATTR_ENLIST_IN_DTC 1207
+#define SQL_ATTR_ENLIST_IN_XA 1208
+#define SQL_ATTR_FETCH_BOOKMARK_PTR 16
+#define SQL_ATTR_KEYSET_SIZE SQL_KEYSET_SIZE
+#define SQL_ATTR_LOGIN_TIMEOUT SQL_LOGIN_TIMEOUT
+#define SQL_ATTR_MAX_LENGTH SQL_MAX_LENGTH
+#define SQL_ATTR_MAX_ROWS SQL_MAX_ROWS
+#define SQL_ATTR_NOSCAN SQL_NOSCAN
+#define SQL_ATTR_ODBC_CURSORS SQL_ODBC_CURSORS
+#define SQL_ATTR_ODBC_VERSION 200
+#define SQL_ATTR_PACKET_SIZE SQL_PACKET_SIZE
+#define SQL_ATTR_PARAM_BIND_OFFSET_PTR 17
+#define SQL_ATTR_PARAM_BIND_TYPE 18
+#define SQL_ATTR_PARAM_OPERATION_PTR 19
+#define SQL_ATTR_PARAM_STATUS_PTR 20
+#define SQL_ATTR_PARAMS_PROCESSED_PTR 21
+#define SQL_ATTR_PARAMSET_SIZE 22
+#define SQL_ATTR_QUERY_TIMEOUT SQL_QUERY_TIMEOUT
+#define SQL_ATTR_QUIET_MODE SQL_QUIET_MODE
+#define SQL_ATTR_RETRIEVE_DATA SQL_RETRIEVE_DATA
+#define SQL_ATTR_ROW_ARRAY_SIZE 27
+#define SQL_ATTR_ROW_BIND_OFFSET_PTR 23
+#define SQL_ATTR_ROW_BIND_TYPE SQL_BIND_TYPE
+#define SQL_ATTR_ROW_NUMBER SQL_ROW_NUMBER
+#define SQL_ATTR_ROW_OPERATION_PTR 24
+#define SQL_ATTR_ROW_STATUS_PTR 25
+#define SQL_ATTR_ROWS_FETCHED_PTR 26
+#define SQL_ATTR_SIMULATE_CURSOR SQL_SIMULATE_CURSOR
+#define SQL_ATTR_TRACE SQL_OPT_TRACE
+#define SQL_ATTR_TRACEFILE SQL_OPT_TRACEFILE
+#define SQL_ATTR_TRANSLATE_LIB SQL_TRANSLATE_DLL
+#define SQL_ATTR_TRANSLATE_OPTION SQL_TRANSLATE_OPTION
+#define SQL_ATTR_TXN_ISOLATION SQL_TXN_ISOLATION
+#define SQL_ATTR_USE_BOOKMARKS SQL_USE_BOOKMARKS
+#define SQL_BATCH_ROW_COUNT 120
+#define SQL_BATCH_SUPPORT 121
+#define SQL_BRC_EXPLICIT 0x0000002
+#define SQL_BRC_PROCEDURES 0x0000001
+#define SQL_BRC_ROLLED_UP 0x0000004
+#define SQL_BS_ROW_COUNT_EXPLICIT 0x00000002L
+#define SQL_BS_ROW_COUNT_PROC 0x00000008L
+#define SQL_BS_SELECT_EXPLICIT 0x00000001L
+#define SQL_BS_SELECT_PROC 0x00000004L
+#define SQL_C_INTERVAL_DAY SQL_INTERVAL_DAY
+#define SQL_C_INTERVAL_DAY_TO_HOUR SQL_INTERVAL_DAY_TO_HOUR
+#define SQL_C_INTERVAL_DAY_TO_MINUTE SQL_INTERVAL_DAY_TO_MINUTE
+#define SQL_C_INTERVAL_DAY_TO_SECOND SQL_INTERVAL_DAY_TO_SECOND
+#define SQL_C_INTERVAL_HOUR SQL_INTERVAL_HOUR
+#define SQL_C_INTERVAL_HOUR_TO_MINUTE SQL_INTERVAL_HOUR_TO_MINUTE
+#define SQL_C_INTERVAL_HOUR_TO_SECOND SQL_INTERVAL_HOUR_TO_SECOND
+#define SQL_C_INTERVAL_MINUTE SQL_INTERVAL_MINUTE
+#define SQL_C_INTERVAL_MINUTE_TO_SECOND SQL_INTERVAL_MINUTE_TO_SECOND
+#define SQL_C_INTERVAL_MONTH SQL_INTERVAL_MONTH
+#define SQL_C_INTERVAL_SECOND SQL_INTERVAL_SECOND
+#define SQL_C_INTERVAL_YEAR SQL_INTERVAL_YEAR
+#define SQL_C_INTERVAL_YEAR_TO_MONTH SQL_INTERVAL_YEAR_TO_MONTH
+#define SQL_C_NUMERIC SQL_NUMERIC
+#define SQL_C_SBIGINT (SQL_BIGINT+SQL_SIGNED_OFFSET)
+#define SQL_C_TYPE_DATE SQL_TYPE_DATE
+#define SQL_C_TYPE_TIME SQL_TYPE_TIME
+#define SQL_C_TYPE_TIMESTAMP SQL_TYPE_TIMESTAMP
+#define SQL_C_UBIGINT (SQL_BIGINT+SQL_UNSIGNED_OFFSET)
+#define SQL_C_VARBOOKMARK SQL_C_BINARY
+#define SQL_CA_CONSTRAINT_DEFERRABLE 0x00000040L
+#define SQL_CA_CONSTRAINT_INITIALLY_DEFERRED 0x00000010L
+#define SQL_CA_CONSTRAINT_INITIALLY_IMMEDIATE 0x00000020L
+#define SQL_CA_CONSTRAINT_NON_DEFERRABLE 0x00000080L
+#define SQL_CA_CREATE_ASSERTION 0x00000001L
+#define SQL_CA1_ABSOLUTE 0x00000002L
+#define SQL_CA1_BOOKMARK 0x00000008L
+#define SQL_CA1_BULK_ADD 0x00010000L
+#define SQL_CA1_BULK_DELETE_BY_BOOKMARK 0x00040000L
+#define SQL_CA1_BULK_FETCH_BY_BOOKMARK 0x00080000L
+#define SQL_CA1_BULK_UPDATE_BY_BOOKMARK 0x00020000L
+#define SQL_CA1_LOCK_EXCLUSIVE 0x00000080L
+#define SQL_CA1_LOCK_NO_CHANGE 0x00000040L
+#define SQL_CA1_LOCK_UNLOCK 0x00000100L
+#define SQL_CA1_NEXT 0x00000001L
+#define SQL_CA1_POS_DELETE 0x00000800L
+#define SQL_CA1_POS_POSITION 0x00000200L
+#define SQL_CA1_POS_REFRESH 0x00001000L
+#define SQL_CA1_POS_UPDATE 0x00000400L
+#define SQL_CA1_POSITIONED_DELETE 0x00004000L
+#define SQL_CA1_POSITIONED_UPDATE 0x00002000L
+#define SQL_CA1_RELATIVE 0x00000004L
+#define SQL_CA1_SELECT_FOR_UPDATE 0x00008000L
+#define SQL_CA2_CRC_APPROXIMATE 0x00002000L
+#define SQL_CA2_CRC_EXACT 0x00001000L
+#define SQL_CA2_LOCK_CONCURRENCY 0x00000002L
+#define SQL_CA2_MAX_ROWS_AFFECTS_ALL (SQL_CA2_MAX_ROWS_SELECT | SQL_CA2_MAX_ROWS_INSERT | \
+ SQL_CA2_MAX_ROWS_DELETE | SQL_CA2_MAX_ROWS_UPDATE | SQL_CA2_MAX_ROWS_CATALOG)
+#define SQL_CA2_MAX_ROWS_CATALOG 0x00000800L
+#define SQL_CA2_MAX_ROWS_DELETE 0x00000200L
+#define SQL_CA2_MAX_ROWS_INSERT 0x00000100L
+#define SQL_CA2_MAX_ROWS_SELECT 0x00000080L
+#define SQL_CA2_MAX_ROWS_UPDATE 0x00000400L
+#define SQL_CA2_OPT_ROWVER_CONCURRENCY 0x00000004L
+#define SQL_CA2_OPT_VALUES_CONCURRENCY 0x00000008L
+#define SQL_CA2_READ_ONLY_CONCURRENCY 0x00000001L
+#define SQL_CA2_SENSITIVITY_ADDITIONS 0x00000010L
+#define SQL_CA2_SENSITIVITY_DELETIONS 0x00000020L
+#define SQL_CA2_SENSITIVITY_UPDATES 0x00000040L
+#define SQL_CA2_SIMULATE_NON_UNIQUE 0x00004000L
+#define SQL_CA2_SIMULATE_TRY_UNIQUE 0x00008000L
+#define SQL_CA2_SIMULATE_UNIQUE 0x00010000L
+#define SQL_CATALOG_LOCATION SQL_QUALIFIER_LOCATION
+#define SQL_CATALOG_NAME_SEPARATOR SQL_QUALIFIER_NAME_SEPARATOR
+#define SQL_CATALOG_TERM SQL_QUALIFIER_TERM
+#define SQL_CATALOG_USAGE SQL_QUALIFIER_USAGE
+#define SQL_CCOL_CREATE_COLLATION 0x00000001L
+#define SQL_CCS_COLLATE_CLAUSE 0x00000002L
+#define SQL_CCS_CREATE_CHARACTER_SET 0x00000001L
+#define SQL_CCS_LIMITED_COLLATION 0x00000004L
+#define SQL_CDO_COLLATION 0x00000008L
+#define SQL_CDO_CONSTRAINT 0x00000004L
+#define SQL_CDO_CONSTRAINT_DEFERRABLE 0x00000080L
+#define SQL_CDO_CONSTRAINT_INITIALLY_DEFERRED 0x00000020L
+#define SQL_CDO_CONSTRAINT_INITIALLY_IMMEDIATE 0x00000040L
+#define SQL_CDO_CONSTRAINT_NAME_DEFINITION 0x00000010L
+#define SQL_CDO_CONSTRAINT_NON_DEFERRABLE 0x00000100L
+#define SQL_CDO_CREATE_DOMAIN 0x00000001L
+#define SQL_CDO_DEFAULT 0x00000002L
+#define SQL_CL_END SQL_QL_END
+#define SQL_CL_START SQL_QL_START
+#define SQL_COL_PRED_BASIC SQL_ALL_EXCEPT_LIKE
+#define SQL_COL_PRED_CHAR SQL_LIKE_ONLY
+#define SQL_COLUMN_DRIVER_START 1000
+#define SQL_COLUMN_IGNORE SQL_IGNORE
+#define SQL_COLUMN_NUMBER_UNKNOWN (-2)
+#define SQL_CONVERT_GUID 173
+#define SQL_CONVERT_INTERVAL_DAY_TIME 123
+#define SQL_CONVERT_INTERVAL_YEAR_MONTH 124
+#define SQL_CONVERT_WCHAR 122
+#define SQL_CONVERT_WLONGVARCHAR 125
+#define SQL_CONVERT_WVARCHAR 126
+#define SQL_CP_DEFAULT SQL_CP_OFF
+#define SQL_CP_MATCH_DEFAULT SQL_CP_STRICT_MATCH
+#define SQL_CP_OFF 0UL
+#define SQL_CP_ONE_PER_DRIVER 1UL
+#define SQL_CP_ONE_PER_HENV 2UL
+#define SQL_CP_RELAXED_MATCH 1UL
+#define SQL_CP_STRICT_MATCH 0UL
+#define SQL_CREATE_ASSERTION 127
+#define SQL_CREATE_CHARACTER_SET 128
+#define SQL_CREATE_COLLATION 129
+#define SQL_CREATE_DOMAIN 130
+#define SQL_CREATE_SCHEMA 131
+#define SQL_CREATE_TABLE 132
+#define SQL_CREATE_TRANSLATION 133
+#define SQL_CREATE_VIEW 134
+#define SQL_CS_AUTHORIZATION 0x00000002L
+#define SQL_CS_CREATE_SCHEMA 0x00000001L
+#define SQL_CS_DEFAULT_CHARACTER_SET 0x00000004L
+#define SQL_CT_COLUMN_COLLATION 0x00000800L
+#define SQL_CT_COLUMN_CONSTRAINT 0x00000200L
+#define SQL_CT_COLUMN_DEFAULT 0x00000400L
+#define SQL_CT_COMMIT_DELETE 0x00000004L
+#define SQL_CT_COMMIT_PRESERVE 0x00000002L
+#define SQL_CT_CONSTRAINT_DEFERRABLE 0x00000080L
+#define SQL_CT_CONSTRAINT_INITIALLY_DEFERRED 0x00000020L
+#define SQL_CT_CONSTRAINT_INITIALLY_IMMEDIATE 0x00000040L
+#define SQL_CT_CONSTRAINT_NAME_DEFINITION 0x00002000L
+#define SQL_CT_CONSTRAINT_NON_DEFERRABLE 0x00000100L
+#define SQL_CT_CREATE_TABLE 0x00000001L
+#define SQL_CT_GLOBAL_TEMPORARY 0x00000008L
+#define SQL_CT_LOCAL_TEMPORARY 0x00000010L
+#define SQL_CT_TABLE_CONSTRAINT 0x00001000L
+#define SQL_CTR_CREATE_TRANSLATION 0x00000001L
+#define SQL_CU_DML_STATEMENTS SQL_QU_DML_STATEMENTS
+#define SQL_CU_INDEX_DEFINITION SQL_QU_INDEX_DEFINITION
+#define SQL_CU_PRIVILEGE_DEFINITION SQL_QU_PRIVILEGE_DEFINITION
+#define SQL_CU_PROCEDURE_INVOCATION SQL_QU_PROCEDURE_INVOCATION
+#define SQL_CU_TABLE_DEFINITION SQL_QU_TABLE_DEFINITION
+#define SQL_CVT_GUID 0x1000000L
+#define SQL_CVT_INTERVAL_DAY_TIME 0x00100000L
+#define SQL_CVT_INTERVAL_YEAR_MONTH 0x00080000L
+#define SQL_CVT_WCHAR 0x00200000L
+#define SQL_CVT_WLONGVARCHAR 0x00400000L
+#define SQL_CVT_WVARCHAR 0x00800000L
+#define SQL_DA_DROP_ASSERTION 0x00000001L
+#define SQL_DATETIME_LITERALS 119
+#define SQL_DB_DEFAULT SQL_DB_RETURN_TO_POOL
+#define SQL_DB_DISCONNECT 1UL
+#define SQL_DB_RETURN_TO_POOL 0UL
+#define SQL_DC_DROP_COLLATION 0x00000001L
+#define SQL_DCS_DROP_CHARACTER_SET 0x00000001L
+#define SQL_DD_CASCADE 0x00000004L
+#define SQL_DD_DROP_DOMAIN 0x00000001L
+#define SQL_DD_RESTRICT 0x00000002L
+#define SQL_DDL_INDEX 170
+#define SQL_DELETE_BY_BOOKMARK 6
+#define SQL_DESC_ARRAY_SIZE 20
+#define SQL_DESC_ARRAY_STATUS_PTR 21
+#define SQL_DESC_AUTO_UNIQUE_VALUE SQL_COLUMN_AUTO_INCREMENT
+#define SQL_DESC_BASE_COLUMN_NAME 22
+#define SQL_DESC_BASE_TABLE_NAME 23
+#define SQL_DESC_BIND_OFFSET_PTR 24
+#define SQL_DESC_BIND_TYPE 25
+#define SQL_DESC_CASE_SENSITIVE SQL_COLUMN_CASE_SENSITIVE
+#define SQL_DESC_CATALOG_NAME SQL_COLUMN_QUALIFIER_NAME
+#define SQL_DESC_CONCISE_TYPE SQL_COLUMN_TYPE
+#define SQL_DESC_DATETIME_INTERVAL_PRECISION 26
+#define SQL_DESC_DISPLAY_SIZE SQL_COLUMN_DISPLAY_SIZE
+#define SQL_DESC_FIXED_PREC_SCALE SQL_COLUMN_MONEY
+#define SQL_DESC_LABEL SQL_COLUMN_LABEL
+#define SQL_DESC_LITERAL_PREFIX 27
+#define SQL_DESC_LITERAL_SUFFIX 28
+#define SQL_DESC_LOCAL_TYPE_NAME 29
+#define SQL_DESC_MAXIMUM_SCALE 30
+#define SQL_DESC_MINIMUM_SCALE 31
+#define SQL_DESC_NUM_PREC_RADIX 32
+#define SQL_DESC_PARAMETER_TYPE 33
+#define SQL_DESC_ROWS_PROCESSED_PTR 34
+#define SQL_DESC_SCHEMA_NAME SQL_COLUMN_OWNER_NAME
+#define SQL_DESC_SEARCHABLE SQL_COLUMN_SEARCHABLE
+#define SQL_DESC_TABLE_NAME SQL_COLUMN_TABLE_NAME
+#define SQL_DESC_TYPE_NAME SQL_COLUMN_TYPE_NAME
+#define SQL_DESC_UNSIGNED SQL_COLUMN_UNSIGNED
+#define SQL_DESC_UPDATABLE SQL_COLUMN_UPDATABLE
+#define SQL_DI_CREATE_INDEX 0x00000001L
+#define SQL_DI_DROP_INDEX 0x00000002L
+#define SQL_DIAG_COLUMN_NUMBER (-1247)
+#define SQL_DIAG_CURSOR_ROW_COUNT (-1249)
+#define SQL_DIAG_ROW_NUMBER (-1248)
+#define SQL_DL_SQL92_DATE 0x00000001L
+#define SQL_DL_SQL92_INTERVAL_DAY 0x00000020L
+#define SQL_DL_SQL92_INTERVAL_DAY_TO_HOUR 0x00000400L
+#define SQL_DL_SQL92_INTERVAL_DAY_TO_MINUTE 0x00000800L
+#define SQL_DL_SQL92_INTERVAL_DAY_TO_SECOND 0x00001000L
+#define SQL_DL_SQL92_INTERVAL_HOUR 0x00000040L
+#define SQL_DL_SQL92_INTERVAL_HOUR_TO_MINUTE 0x00002000L
+#define SQL_DL_SQL92_INTERVAL_HOUR_TO_SECOND 0x00004000L
+#define SQL_DL_SQL92_INTERVAL_MINUTE 0x00000080L
+#define SQL_DL_SQL92_INTERVAL_MINUTE_TO_SECOND 0x00008000L
+#define SQL_DL_SQL92_INTERVAL_MONTH 0x00000010L
+#define SQL_DL_SQL92_INTERVAL_SECOND 0x00000100L
+#define SQL_DL_SQL92_INTERVAL_YEAR 0x00000008L
+#define SQL_DL_SQL92_INTERVAL_YEAR_TO_MONTH 0x00000200L
+#define SQL_DL_SQL92_TIME 0x00000002L
+#define SQL_DL_SQL92_TIMESTAMP 0x00000004L
+#define SQL_DM_VER 171
+#define SQL_DRIVER_HDESC 135
+#define SQL_DROP_ASSERTION 136
+#define SQL_DROP_CHARACTER_SET 137
+#define SQL_DROP_COLLATION 138
+#define SQL_DROP_DOMAIN 139
+#define SQL_DROP_SCHEMA 140
+#define SQL_DROP_TABLE 141
+#define SQL_DROP_TRANSLATION 142
+#define SQL_DROP_VIEW 143
+#define SQL_DS_CASCADE 0x00000004L
+#define SQL_DS_DROP_SCHEMA 0x00000001L
+#define SQL_DS_RESTRICT 0x00000002L
+#define SQL_DT_CASCADE 0x00000004L
+#define SQL_DT_DROP_TABLE 0x00000001L
+#define SQL_DT_RESTRICT 0x00000002L
+#define SQL_DTC_DONE 0L
+#define SQL_DTR_DROP_TRANSLATION 0x00000001L
+#define SQL_DV_CASCADE 0x00000004L
+#define SQL_DV_DROP_VIEW 0x00000001L
+#define SQL_DV_RESTRICT 0x00000002L
+#define SQL_DYNAMIC_CURSOR_ATTRIBUTES1 144
+#define SQL_DYNAMIC_CURSOR_ATTRIBUTES2 145
+#define SQL_EXT_API_LAST SQL_API_SQLBINDPARAMETER
+#define SQL_EXT_API_START 40
+#define SQL_FETCH_BY_BOOKMARK 7
+#define SQL_FETCH_FIRST_SYSTEM 32
+#define SQL_FETCH_FIRST_USER 31
+#define SQL_FN_CVT_CAST 0x00000002L
+#define SQL_FN_STR_BIT_LENGTH 0x00080000L
+#define SQL_FN_STR_CHAR_LENGTH 0x00100000L
+#define SQL_FN_STR_CHARACTER_LENGTH 0x00200000L
+#define SQL_FN_STR_OCTET_LENGTH 0x00400000L
+#define SQL_FN_STR_POSITION 0x00800000L
+#define SQL_FN_TD_CURRENT_DATE 0x00020000L
+#define SQL_FN_TD_CURRENT_TIME 0x00040000L
+#define SQL_FN_TD_CURRENT_TIMESTAMP 0x00080000L
+#define SQL_FN_TD_EXTRACT 0x00100000L
+#define SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES1 146
+#define SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2 147
+#define SQL_FUNC_EXISTS(exists, api) \
+ ((*(((UWORD*) (exists)) + ((api) >> 4)) & (1 << ((api) & 15)) ) ? \
+ SQL_TRUE : SQL_FALSE )
+#define SQL_GB_COLLATE 0x0004
+#define SQL_HANDLE_SENV 5
+#define SQL_IK_ALL (SQL_IK_ASC | SQL_IK_DESC)
+#define SQL_IK_ASC 1
+#define SQL_IK_DESC 2
+#define SQL_IK_NONE 0
+#define SQL_INDEX_KEYWORDS 148
+#define SQL_INFO_DRIVER_START 1000
+#define SQL_INFO_LAST SQL_QUALIFIER_LOCATION
+#define SQL_INFO_SCHEMA_VIEWS 149
+#define SQL_INITIALLY_DEFERRED 5
+#define SQL_INITIALLY_IMMEDIATE 6
+#define SQL_INSERT_STATEMENT 172
+#define SQL_INTERVAL 10
+#define SQL_IS_INSERT_LITERALS 0x00000001L
+#define SQL_IS_INSERT_SEARCHED 0x00000002L
+#define SQL_IS_INTEGER (-6)
+#define SQL_IS_POINTER (-4)
+#define SQL_IS_SELECT_INTO 0x00000004L
+#define SQL_IS_SMALLINT (-8)
+#define SQL_IS_UINTEGER (-5)
+#define SQL_IS_USMALLINT (-7)
+#define SQL_ISV_ASSERTIONS 0x00000001L
+#define SQL_ISV_CHARACTER_SETS 0x00000002L
+#define SQL_ISV_CHECK_CONSTRAINTS 0x00000004L
+#define SQL_ISV_COLLATIONS 0x00000008L
+#define SQL_ISV_COLUMN_DOMAIN_USAGE 0x00000010L
+#define SQL_ISV_COLUMN_PRIVILEGES 0x00000020L
+#define SQL_ISV_COLUMNS 0x00000040L
+#define SQL_ISV_CONSTRAINT_COLUMN_USAGE 0x00000080L
+#define SQL_ISV_CONSTRAINT_TABLE_USAGE 0x00000100L
+#define SQL_ISV_DOMAIN_CONSTRAINTS 0x00000200L
+#define SQL_ISV_DOMAINS 0x00000400L
+#define SQL_ISV_KEY_COLUMN_USAGE 0x00000800L
+#define SQL_ISV_REFERENTIAL_CONSTRAINTS 0x00001000L
+#define SQL_ISV_SCHEMATA 0x00002000L
+#define SQL_ISV_SQL_LANGUAGES 0x00004000L
+#define SQL_ISV_TABLE_CONSTRAINTS 0x00008000L
+#define SQL_ISV_TABLE_PRIVILEGES 0x00010000L
+#define SQL_ISV_TABLES 0x00020000L
+#define SQL_ISV_TRANSLATIONS 0x00040000L
+#define SQL_ISV_USAGE_PRIVILEGES 0x00080000L
+#define SQL_ISV_VIEW_COLUMN_USAGE 0x00100000L
+#define SQL_ISV_VIEW_TABLE_USAGE 0x00200000L
+#define SQL_ISV_VIEWS 0x00400000L
+#define SQL_KEYSET_CURSOR_ATTRIBUTES1 150
+#define SQL_KEYSET_CURSOR_ATTRIBUTES2 151
+#define SQL_MAX_ASYNC_CONCURRENT_STATEMENTS 10022
+#define SQL_NO_COLUMN_NUMBER (-1)
+#define SQL_NO_ROW_NUMBER (-1)
+#define SQL_NOT_DEFERRABLE 7
+#define SQL_NUM_EXTENSIONS (SQL_EXT_API_LAST-SQL_EXT_API_START+1)
+#define SQL_NUM_FUNCTIONS 23
+#define SQL_ODBC_INTERFACE_CONFORMANCE 152
+#define SQL_OIC_CORE 1UL
+#define SQL_OIC_LEVEL1 2UL
+#define SQL_OIC_LEVEL2 3UL
+#define SQL_OV_ODBC2 2UL
+#define SQL_OV_ODBC3 3UL
+#define SQL_PARAM_ARRAY_ROW_COUNTS 153
+#define SQL_PARAM_ARRAY_SELECTS 154
+#define SQL_PARAM_BIND_BY_COLUMN 0UL
+#define SQL_PARAM_BIND_TYPE_DEFAULT SQL_PARAM_BIND_BY_COLUMN
+#define SQL_PARAM_DIAG_UNAVAILABLE 1
+#define SQL_PARAM_ERROR 5
+#define SQL_PARAM_IGNORE 1
+#define SQL_PARAM_PROCEED 0
+#define SQL_PARAM_SUCCESS 0
+#define SQL_PARAM_SUCCESS_WITH_INFO 6
+#define SQL_PARAM_UNUSED 7
+#define SQL_PARC_BATCH 1
+#define SQL_PARC_NO_BATCH 2
+#define SQL_PAS_BATCH 1
+#define SQL_PAS_NO_BATCH 2
+#define SQL_PAS_NO_SELECT 3
+#define SQL_ROW_IGNORE 1
+#define SQL_ROW_NUMBER_UNKNOWN (-2)
+#define SQL_ROW_PROCEED 0
+#define SQL_ROW_SUCCESS_WITH_INFO 6
+#define SQL_SC_FIPS127_2_TRANSITIONAL 0x00000002L
+#define SQL_SC_SQL92_ENTRY 0x00000001L
+#define SQL_SC_SQL92_FULL 0x00000008L
+#define SQL_SC_SQL92_INTERMEDIATE 0x00000004L
+#define SQL_SCC_ISO92_CLI 0x00000002L
+#define SQL_SCC_XOPEN_CLI_VERSION1 0x00000001L
+#define SQL_SCHEMA_TERM SQL_OWNER_TERM
+#define SQL_SCHEMA_USAGE SQL_OWNER_USAGE
+#define SQL_SDF_CURRENT_DATE 0x00000001L
+#define SQL_SDF_CURRENT_TIME 0x00000002L
+#define SQL_SDF_CURRENT_TIMESTAMP 0x00000004L
+#define SQL_SFKD_CASCADE 0x00000001L
+#define SQL_SFKD_NO_ACTION 0x00000002L
+#define SQL_SFKD_SET_DEFAULT 0x00000004L
+#define SQL_SFKD_SET_NULL 0x00000008L
+#define SQL_SFKU_CASCADE 0x00000001L
+#define SQL_SFKU_NO_ACTION 0x00000002L
+#define SQL_SFKU_SET_DEFAULT 0x00000004L
+#define SQL_SFKU_SET_NULL 0x00000008L
+#define SQL_SG_DELETE_TABLE 0x00000020L
+#define SQL_SG_INSERT_COLUMN 0x00000080L
+#define SQL_SG_INSERT_TABLE 0x00000040L
+#define SQL_SG_REFERENCES_COLUMN 0x00000200L
+#define SQL_SG_REFERENCES_TABLE 0x00000100L
+#define SQL_SG_SELECT_TABLE 0x00000400L
+#define SQL_SG_UPDATE_COLUMN 0x00001000L
+#define SQL_SG_UPDATE_TABLE 0x00000800L
+#define SQL_SG_USAGE_ON_CHARACTER_SET 0x00000002L
+#define SQL_SG_USAGE_ON_COLLATION 0x00000004L
+#define SQL_SG_USAGE_ON_DOMAIN 0x00000001L
+#define SQL_SG_USAGE_ON_TRANSLATION 0x00000008L
+#define SQL_SG_WITH_GRANT_OPTION 0x00000010L
+#define SQL_SNVF_BIT_LENGTH 0x00000001L
+#define SQL_SNVF_CHAR_LENGTH 0x00000002L
+#define SQL_SNVF_CHARACTER_LENGTH 0x00000004L
+#define SQL_SNVF_EXTRACT 0x00000008L
+#define SQL_SNVF_OCTET_LENGTH 0x00000010L
+#define SQL_SNVF_POSITION 0x00000020L
+#define SQL_SP_BETWEEN 0x00000800L
+#define SQL_SP_COMPARISON 0x00001000L
+#define SQL_SP_EXISTS 0x00000001L
+#define SQL_SP_IN 0x00000400L
+#define SQL_SP_ISNOTNULL 0x00000002L
+#define SQL_SP_ISNULL 0x00000004L
+#define SQL_SP_LIKE 0x00000200L
+#define SQL_SP_MATCH_FULL 0x00000008L
+#define SQL_SP_MATCH_PARTIAL 0x00000010L
+#define SQL_SP_MATCH_UNIQUE_FULL 0x00000020L
+#define SQL_SP_MATCH_UNIQUE_PARTIAL 0x00000040L
+#define SQL_SP_OVERLAPS 0x00000080L
+#define SQL_SP_QUANTIFIED_COMPARISON 0x00002000L
+#define SQL_SP_UNIQUE 0x00000100L
+#define SQL_SQL_CONFORMANCE 118
+#define SQL_SQL92_DATETIME_FUNCTIONS 155
+#define SQL_SQL92_FOREIGN_KEY_DELETE_RULE 156
+#define SQL_SQL92_FOREIGN_KEY_UPDATE_RULE 157
+#define SQL_SQL92_GRANT 158
+#define SQL_SQL92_NUMERIC_VALUE_FUNCTIONS 159
+#define SQL_SQL92_PREDICATES 160
+#define SQL_SQL92_RELATIONAL_JOIN_OPERATORS 161
+#define SQL_SQL92_REVOKE 162
+#define SQL_SQL92_ROW_VALUE_CONSTRUCTOR 163
+#define SQL_SQL92_STRING_FUNCTIONS 164
+#define SQL_SQL92_VALUE_EXPRESSIONS 165
+#define SQL_SR_CASCADE 0x00000020L
+#define SQL_SR_DELETE_TABLE 0x00000080L
+#define SQL_SR_GRANT_OPTION_FOR 0x00000010L
+#define SQL_SR_INSERT_COLUMN 0x00000200L
+#define SQL_SR_INSERT_TABLE 0x00000100L
+#define SQL_SR_REFERENCES_COLUMN 0x00000800L
+#define SQL_SR_REFERENCES_TABLE 0x00000400L
+#define SQL_SR_RESTRICT 0x00000040L
+#define SQL_SR_SELECT_TABLE 0x00001000L
+#define SQL_SR_UPDATE_COLUMN 0x00004000L
+#define SQL_SR_UPDATE_TABLE 0x00002000L
+#define SQL_SR_USAGE_ON_CHARACTER_SET 0x00000002L
+#define SQL_SR_USAGE_ON_COLLATION 0x00000004L
+#define SQL_SR_USAGE_ON_DOMAIN 0x00000001L
+#define SQL_SR_USAGE_ON_TRANSLATION 0x00000008L
+#define SQL_SRJO_CORRESPONDING_CLAUSE 0x00000001L
+#define SQL_SRJO_CROSS_JOIN 0x00000002L
+#define SQL_SRJO_EXCEPT_JOIN 0x00000004L
+#define SQL_SRJO_FULL_OUTER_JOIN 0x00000008L
+#define SQL_SRJO_INNER_JOIN 0x00000010L
+#define SQL_SRJO_INTERSECT_JOIN 0x00000020L
+#define SQL_SRJO_LEFT_OUTER_JOIN 0x00000040L
+#define SQL_SRJO_NATURAL_JOIN 0x00000080L
+#define SQL_SRJO_RIGHT_OUTER_JOIN 0x00000100L
+#define SQL_SRJO_UNION_JOIN 0x00000200L
+#define SQL_SRVC_DEFAULT 0x00000004L
+#define SQL_SRVC_NULL 0x00000002L
+#define SQL_SRVC_ROW_SUBQUERY 0x00000008L
+#define SQL_SRVC_VALUE_EXPRESSION 0x00000001L
+#define SQL_SSF_CONVERT 0x00000001L
+#define SQL_SSF_LOWER 0x00000002L
+#define SQL_SSF_SUBSTRING 0x00000008L
+#define SQL_SSF_TRANSLATE 0x00000010L
+#define SQL_SSF_TRIM_BOTH 0x00000020L
+#define SQL_SSF_TRIM_LEADING 0x00000040L
+#define SQL_SSF_TRIM_TRAILING 0x00000080L
+#define SQL_SSF_UPPER 0x00000004L
+#define SQL_STANDARD_CLI_CONFORMANCE 166
+#define SQL_STATIC_CURSOR_ATTRIBUTES1 167
+#define SQL_STATIC_CURSOR_ATTRIBUTES2 168
+#define SQL_SU_DML_STATEMENTS SQL_OU_DML_STATEMENTS
+#define SQL_SU_INDEX_DEFINITION SQL_OU_INDEX_DEFINITION
+#define SQL_SU_PRIVILEGE_DEFINITION SQL_OU_PRIVILEGE_DEFINITION
+#define SQL_SU_PROCEDURE_INVOCATION SQL_OU_PROCEDURE_INVOCATION
+#define SQL_SU_TABLE_DEFINITION SQL_OU_TABLE_DEFINITION
+#define SQL_SVE_CASE 0x00000001L
+#define SQL_SVE_CAST 0x00000002L
+#define SQL_SVE_COALESCE 0x00000004L
+#define SQL_SVE_NULLIF 0x00000008L
+#define SQL_UB_FIXED SQL_UB_ON
+#define SQL_UB_VARIABLE 2UL
+#define SQL_UNION_STATEMENT SQL_UNION
+#define SQL_UPDATE_BY_BOOKMARK 5
+#define SQL_US_UNION SQL_U_UNION
+#define SQL_US_UNION_ALL SQL_U_UNION_ALL
+#endif /* ODBCVER >= 0x300 */
+#if (ODBCVER >= 0x0350)
+#define SQL_DESC_ROWVER 35
+#define SQL_GUID (-11)
+#define SQL_C_GUID SQL_GUID
+#ifdef ODBC_STD
+#define SQLAllocHandle SQLAllocHandleStd
+#define SQLAllocEnv(p) SQLAllocHandleStd(SQL_HANDLE_ENV,SQL_NULL_HANDLE,p)
+#define SQL_YEAR SQL_CODE_YEAR
+#define SQL_MONTH SQL_CODE_MONTH
+#define SQL_DAY SQL_CODE_DAY
+#define SQL_HOUR SQL_CODE_HOUR
+#define SQL_MINUTE SQL_CODE_MINUTE
+#define SQL_SECOND SQL_CODE_SECOND
+#define SQL_YEAR_TO_MONTH SQL_CODE_YEAR_TO_MONTH
+#define SQL_DAY_TO_HOUR SQL_CODE_DAY_TO_HOUR
+#define SQL_DAY_TO_MINUTE SQL_CODE_DAY_TO_MINUTE
+#define SQL_DAY_TO_SECOND SQL_CODE_DAY_TO_SECOND
+#define SQL_HOUR_TO_MINUTE SQL_CODE_HOUR_TO_MINUTE
+#define SQL_HOUR_TO_SECOND SQL_CODE_HOUR_TO_SECOND
+#define SQL_MINUTE_TO_SECOND SQL_CODE_MINUTE_TO_SECOND
+#endif /* ODBC_STD */
+#endif /* ODBCVER >= 0x0350 */
+#if (ODBCVER >= 0x0351)
+#define SQL_ATTR_ANSI_APP 115
+#define SQL_AA_TRUE 1L
+#define SQL_AA_FALSE 0L
+#endif
+
+#define TRACE_VERSION 1000
+#define TRACE_ON 1
+
+#ifndef RC_INVOKED
+#define SQL_ODBC_KEYWORDS \
+"ABSOLUTE,ACTION,ADA,ADD,ALL,ALLOCATE,ALTER,AND,ANY,ARE,AS,"\
+"ASC,ASSERTION,AT,AUTHORIZATION,AVG,"\
+"BEGIN,BETWEEN,BIT,BIT_LENGTH,BOTH,BY,CASCADE,CASCADED,CASE,CAST,CATALOG,"\
+"CHAR,CHAR_LENGTH,CHARACTER,CHARACTER_LENGTH,CHECK,CLOSE,COALESCE,"\
+"COLLATE,COLLATION,COLUMN,COMMIT,CONNECT,CONNECTION,CONSTRAINT,"\
+"CONSTRAINTS,CONTINUE,CONVERT,CORRESPONDING,COUNT,CREATE,CROSS,CURRENT,"\
+"CURRENT_DATE,CURRENT_TIME,CURRENT_TIMESTAMP,CURRENT_USER,CURSOR,"\
+"DATE,DAY,DEALLOCATE,DEC,DECIMAL,DECLARE,DEFAULT,DEFERRABLE,"\
+"DEFERRED,DELETE,DESC,DESCRIBE,DESCRIPTOR,DIAGNOSTICS,DISCONNECT,"\
+"DISTINCT,DOMAIN,DOUBLE,DROP,"\
+"ELSE,END,END-EXEC,ESCAPE,EXCEPT,EXCEPTION,EXEC,EXECUTE,"\
+"EXISTS,EXTERNAL,EXTRACT,"\
+"FALSE,FETCH,FIRST,FLOAT,FOR,FOREIGN,FORTRAN,FOUND,FROM,FULL,"\
+"GET,GLOBAL,GO,GOTO,GRANT,GROUP,HAVING,HOUR,"\
+"IDENTITY,IMMEDIATE,IN,INCLUDE,INDEX,INDICATOR,INITIALLY,INNER,"\
+"INPUT,INSENSITIVE,INSERT,INT,INTEGER,INTERSECT,INTERVAL,INTO,IS,ISOLATION,"\
+"JOIN,KEY,LANGUAGE,LAST,LEADING,LEFT,LEVEL,LIKE,LOCAL,LOWER,"\
+"MATCH,MAX,MIN,MINUTE,MODULE,MONTH,"\
+"NAMES,NATIONAL,NATURAL,NCHAR,NEXT,NO,NONE,NOT,NULL,NULLIF,NUMERIC,"\
+"OCTET_LENGTH,OF,ON,ONLY,OPEN,OPTION,OR,ORDER,OUTER,OUTPUT,OVERLAPS,"\
+"PAD,PARTIAL,PASCAL,PLI,POSITION,PRECISION,PREPARE,PRESERVE,"\
+"PRIMARY,PRIOR,PRIVILEGES,PROCEDURE,PUBLIC,"\
+"READ,REAL,REFERENCES,RELATIVE,RESTRICT,REVOKE,RIGHT,ROLLBACK,ROWS"\
+"SCHEMA,SCROLL,SECOND,SECTION,SELECT,SESSION,SESSION_USER,SET,SIZE,"\
+"SMALLINT,SOME,SPACE,SQL,SQLCA,SQLCODE,SQLERROR,SQLSTATE,SQLWARNING,"\
+"SUBSTRING,SUM,SYSTEM_USER,"\
+"TABLE,TEMPORARY,THEN,TIME,TIMESTAMP,TIMEZONE_HOUR,TIMEZONE_MINUTE,"\
+"TO,TRAILING,TRANSACTION,TRANSLATE,TRANSLATION,TRIM,TRUE,"\
+"UNION,UNIQUE,UNKNOWN,UPDATE,UPPER,USAGE,USER,USING,"\
+"VALUE,VALUES,VARCHAR,VARYING,VIEW,WHEN,WHENEVER,WHERE,WITH,WORK,WRITE,"\
+"YEAR,ZONE"
+
+SQLRETURN SQL_API SQLDriverConnect(SQLHDBC,SQLHWND,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLSMALLINT*,SQLUSMALLINT);
+SQLRETURN SQL_API SQLBrowseConnect(SQLHDBC,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLSMALLINT*);
+SQLRETURN SQL_API SQLColumnPrivileges(SQLHSTMT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT);
+SQLRETURN SQL_API SQLColAttributes(SQLHSTMT,SQLUSMALLINT, SQLUSMALLINT, SQLPOINTER, SQLSMALLINT, SQLSMALLINT*, SQLLEN*);
+SQLRETURN SQL_API SQLDescribeParam(SQLHSTMT,SQLUSMALLINT,SQLSMALLINT*,SQLULEN*,SQLSMALLINT*,SQLSMALLINT*);
+SQLRETURN SQL_API SQLExtendedFetch(SQLHSTMT,SQLUSMALLINT,SQLINTEGER,SQLUINTEGER*,SQLUSMALLINT*);
+SQLRETURN SQL_API SQLForeignKeys(SQLHSTMT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT);
+SQLRETURN SQL_API SQLMoreResults(SQLHSTMT);
+SQLRETURN SQL_API SQLNativeSql(SQLHDBC,SQLCHAR*,SQLINTEGER,SQLCHAR*,SQLINTEGER,SQLINTEGER*);
+SQLRETURN SQL_API SQLNumParams(SQLHSTMT,SQLSMALLINT*);
+SQLRETURN SQL_API SQLParamOptions(SQLHSTMT,SQLUINTEGER,SQLUINTEGER*);
+SQLRETURN SQL_API SQLPrimaryKeys(SQLHSTMT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT);
+SQLRETURN SQL_API SQLProcedureColumns(SQLHSTMT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT);
+SQLRETURN SQL_API SQLProcedures(SQLHSTMT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT);
+SQLRETURN SQL_API SQLSetPos(SQLHSTMT,SQLUSMALLINT,SQLUSMALLINT,SQLUSMALLINT);
+SQLRETURN SQL_API SQLTablePrivileges(SQLHSTMT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT);
+SQLRETURN SQL_API SQLDrivers(SQLHENV,SQLUSMALLINT,SQLCHAR*,SQLSMALLINT,SQLSMALLINT*,SQLCHAR*,SQLSMALLINT,SQLSMALLINT*);
+SQLRETURN SQL_API SQLBindParameter(SQLHSTMT,SQLUSMALLINT,SQLSMALLINT,SQLSMALLINT,SQLSMALLINT,SQLULEN,SQLSMALLINT,SQLPOINTER,SQLLEN,SQLLEN*);
+SQLRETURN SQL_API SQLSetScrollOptions(SQLHSTMT,SQLUSMALLINT,SQLLEN,SQLUSMALLINT); /* deprecated */
+DWORD SQL_API ODBCGetTryWaitValue(void);
+BOOL SQL_API ODBCSetTryWaitValue(DWORD);
+RETCODE SQL_API TraceOpenLogFile(LPWSTR,LPWSTR,DWORD);
+RETCODE SQL_API TraceCloseLogFile(void);
+VOID SQL_API TraceReturn(RETCODE,RETCODE);
+DWORD SQL_API TraceVersion(void);
+#if (ODBCVER >= 0x0300)
+SQLRETURN SQL_API SQLBulkOperations(SQLHSTMT,SQLSMALLINT);
+SQLRETURN SQL_API SQLAllocHandleStd( SQLSMALLINT,SQLHANDLE,SQLHANDLE*);
+#endif
+#endif /* ndef RC_INVOKED */
+#include <sqlucode.h>
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/sqltypes.h b/tcc/include/winapi/sqltypes.h
new file mode 100644
index 0000000..fcc7135
--- /dev/null
+++ b/tcc/include/winapi/sqltypes.h
@@ -0,0 +1,165 @@
+#ifndef _SQLTYPES_H
+#define _SQLTYPES_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#define SQL_API __stdcall
+#ifndef RC_INVOKED
+#define __need_wchar_t
+#include <stddef.h>
+typedef signed char SCHAR;
+typedef long SDWORD;
+typedef short SWORD;
+typedef ULONG UDWORD;
+typedef USHORT UWORD;
+typedef signed long SLONG;
+typedef signed short SSHORT;
+typedef double SDOUBLE;
+typedef double LDOUBLE;
+typedef float SFLOAT;
+typedef PVOID PTR;
+typedef PVOID HENV;
+typedef PVOID HDBC;
+typedef PVOID HSTMT;
+typedef short RETCODE;
+typedef UCHAR SQLCHAR;
+typedef SCHAR SQLSCHAR;
+typedef SDWORD SQLINTEGER;
+typedef SWORD SQLSMALLINT;
+#ifndef __WIN64
+typedef UDWORD SQLUINTEGER;
+#endif
+typedef UWORD SQLUSMALLINT;
+typedef PVOID SQLPOINTER;
+#if (ODBCVER >= 0x0300)
+typedef void* SQLHANDLE;
+typedef SQLHANDLE SQLHENV;
+typedef SQLHANDLE SQLHDBC;
+typedef SQLHANDLE SQLHSTMT;
+typedef SQLHANDLE SQLHDESC;
+#else
+typedef void* SQLHENV;
+typedef void* SQLHDBC;
+typedef void* SQLHSTMT;
+#endif
+typedef SQLSMALLINT SQLRETURN;
+typedef HWND SQLHWND;
+typedef ULONG BOOKMARK;
+#ifdef _WIN64
+typedef INT64 SQLLEN;
+typedef INT64 SQLROWOFFSET;
+typedef UINT64 SQLROWCOUNT;
+typedef UINT64 SQLULEN;
+typedef UINT64 SQLTRANSID;
+typedef unsigned long SQLSETPOSIROW;
+#else
+#define SQLLEN SQLINTEGER
+#define SQLROWOFFSET SQLINTEGER
+#define SQLROWCOUNT SQLUINTEGER
+#define SQLULEN SQLUINTEGER
+#define SQLTRANSID DWORD
+#define SQLSETPOSIROW SQLUSMALLINT
+#endif
+typedef wchar_t SQLWCHAR;
+#ifdef UNICODE
+typedef SQLWCHAR SQLTCHAR;
+#else
+typedef SQLCHAR SQLTCHAR;
+#endif /* UNICODE */
+#if (ODBCVER >= 0x0300)
+typedef unsigned char SQLDATE;
+typedef unsigned char SQLDECIMAL;
+typedef double SQLDOUBLE;
+typedef double SQLFLOAT;
+typedef unsigned char SQLNUMERIC;
+typedef float SQLREAL;
+typedef unsigned char SQLTIME;
+typedef unsigned char SQLTIMESTAMP;
+typedef unsigned char SQLVARCHAR;
+#define ODBCINT64 __int64
+typedef __int64 SQLBIGINT;
+typedef unsigned __int64 SQLUBIGINT;
+#endif
+
+typedef struct tagDATE_STRUCT {
+ SQLSMALLINT year;
+ SQLUSMALLINT month;
+ SQLUSMALLINT day;
+} DATE_STRUCT;
+typedef struct tagTIME_STRUCT {
+ SQLUSMALLINT hour;
+ SQLUSMALLINT minute;
+ SQLUSMALLINT second;
+} TIME_STRUCT;
+typedef struct tagTIMESTAMP_STRUCT {
+ SQLSMALLINT year;
+ SQLUSMALLINT month;
+ SQLUSMALLINT day;
+ SQLUSMALLINT hour;
+ SQLUSMALLINT minute;
+ SQLUSMALLINT second;
+ SQLUINTEGER fraction;
+} TIMESTAMP_STRUCT;
+#if (ODBCVER >= 0x0300)
+typedef DATE_STRUCT SQL_DATE_STRUCT;
+typedef TIME_STRUCT SQL_TIME_STRUCT;
+typedef TIMESTAMP_STRUCT SQL_TIMESTAMP_STRUCT;
+typedef enum {
+ SQL_IS_YEAR = 1,SQL_IS_MONTH,SQL_IS_DAY,SQL_IS_HOUR,
+ SQL_IS_MINUTE,SQL_IS_SECOND,SQL_IS_YEAR_TO_MONTH,SQL_IS_DAY_TO_HOUR,
+ SQL_IS_DAY_TO_MINUTE,SQL_IS_DAY_TO_SECOND,SQL_IS_HOUR_TO_MINUTE,
+ SQL_IS_HOUR_TO_SECOND,SQL_IS_MINUTE_TO_SECOND
+} SQLINTERVAL;
+typedef struct tagSQL_YEAR_MONTH {
+ SQLUINTEGER year;
+ SQLUINTEGER month;
+} SQL_YEAR_MONTH_STRUCT;
+typedef struct tagSQL_DAY_SECOND {
+ SQLUINTEGER day;
+ SQLUINTEGER hour;
+ SQLUINTEGER minute;
+ SQLUINTEGER second;
+ SQLUINTEGER fraction;
+} SQL_DAY_SECOND_STRUCT;
+typedef struct tagSQL_INTERVAL_STRUCT {
+ SQLINTERVAL interval_type;
+ SQLSMALLINT interval_sign;
+ union {
+ SQL_YEAR_MONTH_STRUCT year_month;
+ SQL_DAY_SECOND_STRUCT day_second;
+ } intval;
+} SQL_INTERVAL_STRUCT;
+#define SQL_MAX_NUMERIC_LEN 16
+typedef struct tagSQL_NUMERIC_STRUCT {
+ SQLCHAR precision;
+ SQLSCHAR scale;
+ SQLCHAR sign;
+ SQLCHAR val[SQL_MAX_NUMERIC_LEN];
+} SQL_NUMERIC_STRUCT;
+#endif /* ODBCVER >= 0x0300 */
+#if (ODBCVER >= 0x0350)
+
+#ifdef _GUID_DEFINED
+# warning _GUID_DEFINED is deprecated, use GUID_DEFINED instead
+#endif
+
+#if defined _GUID_DEFINED || defined GUID_DEFINED
+typedef GUID SQLGUID;
+#else
+typedef struct tagSQLGUID{
+ DWORD Data1;
+ WORD Data2;
+ WORD Data3;
+ BYTE Data4[ 8 ];
+} SQLGUID;
+#endif /* GUID_DEFINED */
+#endif /* ODBCVER >= 0x0350 */
+#endif /* RC_INVOKED */
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/sqlucode.h b/tcc/include/winapi/sqlucode.h
new file mode 100644
index 0000000..688ced2
--- /dev/null
+++ b/tcc/include/winapi/sqlucode.h
@@ -0,0 +1,142 @@
+#ifndef _SQLUCODE_H
+#define _SQLUCODE_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#include <sqlext.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+#define SQL_WCHAR (-8)
+#define SQL_WVARCHAR (-9)
+#define SQL_WLONGVARCHAR (-10)
+#define SQL_C_WCHAR SQL_WCHAR
+#define SQL_SQLSTATE_SIZEW 10
+#ifdef UNICODE
+#define SQL_C_TCHAR SQL_C_WCHAR
+#else
+#define SQL_C_TCHAR SQL_C_CHAR
+#endif
+#ifndef RC_INVOKED
+SQLRETURN SQL_API SQLBrowseConnectA(SQLHDBC,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLSMALLINT*);
+SQLRETURN SQL_API SQLBrowseConnectW(SQLHDBC,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT,SQLSMALLINT*);
+SQLRETURN SQL_API SQLColAttributeA(SQLHSTMT,SQLSMALLINT,SQLSMALLINT,SQLPOINTER,SQLSMALLINT,SQLSMALLINT*,SQLPOINTER);
+SQLRETURN SQL_API SQLColAttributeW(SQLHSTMT,SQLUSMALLINT,SQLUSMALLINT,SQLPOINTER,SQLSMALLINT,SQLSMALLINT*,SQLPOINTER);
+SQLRETURN SQL_API SQLColAttributesA(SQLHSTMT,SQLUSMALLINT,SQLUSMALLINT,SQLPOINTER,SQLSMALLINT,SQLSMALLINT*,SQLLEN*);
+SQLRETURN SQL_API SQLColAttributesW(SQLHSTMT,SQLUSMALLINT,SQLUSMALLINT,SQLPOINTER,SQLSMALLINT,SQLSMALLINT*,SQLLEN*);
+SQLRETURN SQL_API SQLColumnPrivilegesA( SQLHSTMT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT ,SQLCHAR*,SQLSMALLINT );
+SQLRETURN SQL_API SQLColumnPrivilegesW( SQLHSTMT,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT );
+SQLRETURN SQL_API SQLColumnsA(SQLHSTMT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT ,SQLCHAR*,SQLSMALLINT );
+SQLRETURN SQL_API SQLColumnsW(SQLHSTMT,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT ,SQLWCHAR*,SQLSMALLINT );
+SQLRETURN SQL_API SQLConnectA(SQLHDBC,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT);
+SQLRETURN SQL_API SQLConnectW(SQLHDBC,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT);
+SQLRETURN SQL_API SQLDataSourcesA(SQLHENV,SQLUSMALLINT,SQLCHAR*,SQLSMALLINT,SQLSMALLINT*,SQLCHAR*,SQLSMALLINT,SQLSMALLINT*);
+SQLRETURN SQL_API SQLDataSourcesW(SQLHENV,SQLUSMALLINT,SQLWCHAR*,SQLSMALLINT,SQLSMALLINT*,SQLWCHAR*,SQLSMALLINT,SQLSMALLINT*);
+SQLRETURN SQL_API SQLDescribeColA(SQLHSTMT,SQLUSMALLINT,SQLCHAR*,SQLSMALLINT,SQLSMALLINT*,SQLSMALLINT*,SQLULEN*,SQLSMALLINT*,SQLSMALLINT*);
+SQLRETURN SQL_API SQLDescribeColW(SQLHSTMT,SQLUSMALLINT,SQLWCHAR*,SQLSMALLINT,SQLSMALLINT*,SQLSMALLINT*,SQLULEN*,SQLSMALLINT*,SQLSMALLINT*);
+SQLRETURN SQL_API SQLDriverConnectA(SQLHDBC,SQLHWND,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLSMALLINT*,SQLUSMALLINT);
+SQLRETURN SQL_API SQLDriverConnectW(SQLHDBC,SQLHWND,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT,SQLSMALLINT*,SQLUSMALLINT);
+SQLRETURN SQL_API SQLDriversA(SQLHENV,SQLUSMALLINT,SQLCHAR*,SQLSMALLINT,SQLSMALLINT*,SQLCHAR*,SQLSMALLINT,SQLSMALLINT*);
+SQLRETURN SQL_API SQLDriversW(SQLHENV,SQLUSMALLINT,SQLWCHAR*,SQLSMALLINT,SQLSMALLINT*,SQLWCHAR*,SQLSMALLINT,SQLSMALLINT*);
+SQLRETURN SQL_API SQLErrorA(SQLHENV,SQLHDBC,SQLHSTMT,SQLCHAR*,SQLINTEGER*,SQLCHAR*,SQLSMALLINT,SQLSMALLINT*);
+SQLRETURN SQL_API SQLErrorW(SQLHENV,SQLHDBC,SQLHSTMT,SQLWCHAR*,SQLINTEGER*,SQLWCHAR*,SQLSMALLINT,SQLSMALLINT*);
+SQLRETURN SQL_API SQLExecDirectA(SQLHSTMT,SQLCHAR*,SQLINTEGER);
+SQLRETURN SQL_API SQLExecDirectW(SQLHSTMT,SQLWCHAR*,SQLINTEGER);
+SQLRETURN SQL_API SQLForeignKeysA(SQLHSTMT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT);
+SQLRETURN SQL_API SQLForeignKeysW(SQLHSTMT,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT);
+SQLRETURN SQL_API SQLGetConnectAttrA(SQLHDBC,SQLINTEGER,SQLPOINTER,SQLINTEGER,SQLINTEGER*);
+SQLRETURN SQL_API SQLGetConnectAttrW(SQLHDBC,SQLINTEGER,SQLPOINTER,SQLINTEGER,SQLINTEGER*);
+SQLRETURN SQL_API SQLGetConnectOptionA(SQLHDBC,SQLUSMALLINT,SQLPOINTER);
+SQLRETURN SQL_API SQLGetConnectOptionW(SQLHDBC,SQLUSMALLINT,SQLPOINTER);
+SQLRETURN SQL_API SQLGetCursorNameA(SQLHSTMT,SQLCHAR*,SQLSMALLINT,SQLSMALLINT*);
+SQLRETURN SQL_API SQLGetCursorNameW(SQLHSTMT,SQLWCHAR*,SQLSMALLINT,SQLSMALLINT*);
+SQLRETURN SQL_API SQLGetInfoA(SQLHDBC,SQLUSMALLINT,SQLPOINTER,SQLSMALLINT,SQLSMALLINT*);
+SQLRETURN SQL_API SQLGetInfoW(SQLHDBC,SQLUSMALLINT,SQLPOINTER,SQLSMALLINT,SQLSMALLINT*);
+SQLRETURN SQL_API SQLGetTypeInfoA(SQLHSTMT,SQLSMALLINT);
+SQLRETURN SQL_API SQLGetTypeInfoW(SQLHSTMT,SQLSMALLINT);
+SQLRETURN SQL_API SQLNativeSqlA(SQLHDBC,SQLCHAR*,SQLINTEGER,SQLCHAR*,SQLINTEGER,SQLINTEGER*);
+SQLRETURN SQL_API SQLNativeSqlW(SQLHDBC,SQLWCHAR*,SQLINTEGER,SQLWCHAR*,SQLINTEGER,SQLINTEGER*);
+SQLRETURN SQL_API SQLPrepareA(SQLHSTMT,SQLCHAR*,SQLINTEGER);
+SQLRETURN SQL_API SQLPrepareW(SQLHSTMT,SQLWCHAR*,SQLINTEGER);
+SQLRETURN SQL_API SQLPrimaryKeysA(SQLHSTMT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT );
+SQLRETURN SQL_API SQLPrimaryKeysW(SQLHSTMT,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT);
+SQLRETURN SQL_API SQLProcedureColumnsA(SQLHSTMT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT);
+SQLRETURN SQL_API SQLProcedureColumnsW(SQLHSTMT,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT);
+SQLRETURN SQL_API SQLProceduresA(SQLHSTMT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT);
+SQLRETURN SQL_API SQLProceduresW(SQLHSTMT,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT);
+SQLRETURN SQL_API SQLSetConnectAttrA(SQLHDBC,SQLINTEGER,SQLPOINTER,SQLINTEGER);
+SQLRETURN SQL_API SQLSetConnectAttrW(SQLHDBC,SQLINTEGER,SQLPOINTER,SQLINTEGER);
+SQLRETURN SQL_API SQLSetConnectOptionA(SQLHDBC,SQLUSMALLINT,SQLULEN);
+SQLRETURN SQL_API SQLSetConnectOptionW(SQLHDBC,SQLUSMALLINT,SQLULEN);
+SQLRETURN SQL_API SQLSetCursorNameA(SQLHSTMT,SQLCHAR*,SQLSMALLINT);
+SQLRETURN SQL_API SQLSetCursorNameW(SQLHSTMT,SQLWCHAR*,SQLSMALLINT);
+SQLRETURN SQL_API SQLSpecialColumnsA(SQLHSTMT,SQLUSMALLINT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT ,SQLUSMALLINT,SQLUSMALLINT);
+SQLRETURN SQL_API SQLSpecialColumnsW(SQLHSTMT,SQLUSMALLINT,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT ,SQLUSMALLINT,SQLUSMALLINT);
+SQLRETURN SQL_API SQLStatisticsA(SQLHSTMT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT ,SQLUSMALLINT,SQLUSMALLINT);
+SQLRETURN SQL_API SQLStatisticsW(SQLHSTMT,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT ,SQLUSMALLINT,SQLUSMALLINT);
+SQLRETURN SQL_API SQLTablePrivilegesA(SQLHSTMT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT);
+SQLRETURN SQL_API SQLTablePrivilegesW(SQLHSTMT,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT );
+SQLRETURN SQL_API SQLTablesA(SQLHSTMT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLCHAR*,SQLSMALLINT);
+SQLRETURN SQL_API SQLTablesW(SQLHSTMT,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT);
+#if (ODBCVER >= 0x0300)
+SQLRETURN SQL_API SQLGetDescFieldA(SQLHDESC,SQLSMALLINT,SQLSMALLINT,SQLPOINTER,SQLINTEGER,SQLINTEGER*);
+SQLRETURN SQL_API SQLGetDescFieldW(SQLHDESC,SQLSMALLINT,SQLSMALLINT,SQLPOINTER,SQLINTEGER,SQLINTEGER*);
+SQLRETURN SQL_API SQLSetDescFieldA(SQLHDESC,SQLSMALLINT,SQLSMALLINT,SQLPOINTER,SQLINTEGER);
+SQLRETURN SQL_API SQLSetDescFieldW(SQLHDESC,SQLSMALLINT,SQLSMALLINT,SQLPOINTER,SQLINTEGER);
+SQLRETURN SQL_API SQLGetDescRecA(SQLHDESC,SQLSMALLINT,SQLCHAR*,SQLSMALLINT,SQLSMALLINT*,SQLSMALLINT*,SQLSMALLINT*,SQLLEN*,SQLSMALLINT*,SQLSMALLINT*,SQLSMALLINT*);
+SQLRETURN SQL_API SQLGetDescRecW(SQLHDESC,SQLSMALLINT,SQLWCHAR*,SQLSMALLINT,SQLSMALLINT*,SQLSMALLINT*,SQLSMALLINT*,SQLLEN*,SQLSMALLINT*,SQLSMALLINT*,SQLSMALLINT*);
+SQLRETURN SQL_API SQLGetDiagFieldA(SQLSMALLINT,SQLHANDLE,SQLSMALLINT,SQLSMALLINT,SQLPOINTER,SQLSMALLINT,SQLSMALLINT*);
+SQLRETURN SQL_API SQLGetDiagFieldW(SQLSMALLINT,SQLHANDLE,SQLSMALLINT,SQLSMALLINT,SQLPOINTER,SQLSMALLINT,SQLSMALLINT*);
+SQLRETURN SQL_API SQLGetDiagRecA(SQLSMALLINT,SQLHANDLE,SQLSMALLINT,SQLCHAR*,SQLINTEGER*,SQLCHAR*,SQLSMALLINT,SQLSMALLINT*);
+SQLRETURN SQL_API SQLGetDiagRecW(SQLSMALLINT,SQLHANDLE,SQLSMALLINT,SQLWCHAR*,SQLINTEGER*,SQLWCHAR*,SQLSMALLINT,SQLSMALLINT*);
+SQLRETURN SQL_API SQLGetStmtAttrA(SQLHSTMT,SQLINTEGER,SQLPOINTER,SQLINTEGER,SQLINTEGER*);
+SQLRETURN SQL_API SQLGetStmtAttrW(SQLHSTMT,SQLINTEGER,SQLPOINTER,SQLINTEGER,SQLINTEGER*);
+SQLRETURN SQL_API SQLSetStmtAttrA(SQLHSTMT,SQLINTEGER,SQLPOINTER,SQLINTEGER);
+SQLRETURN SQL_API SQLSetStmtAttrW(SQLHSTMT,SQLINTEGER,SQLPOINTER,SQLINTEGER);
+#endif /* (ODBCVER >= 0x0300) */
+
+#if defined (UNICODE) && !defined (SQL_NOUNICODEMAP)
+#define SQLBrowseConnect SQLBrowseConnectW
+#define SQLColAttribute SQLColAttributeW
+#define SQLColAttributes SQLColAttributesW
+#define SQLColumnPrivileges SQLColumnPrivilegesW
+#define SQLColumns SQLColumnsW
+#define SQLConnect SQLConnectW
+#define SQLDataSources SQLDataSourcesW
+#define SQLDescribeCol SQLDescribeColW
+#define SQLDriverConnect SQLDriverConnectW
+#define SQLDrivers SQLDriversW
+#define SQLError SQLErrorW
+#define SQLExecDirect SQLExecDirectW
+#define SQLForeignKeys SQLForeignKeysW
+#define SQLGetConnectAttr SQLGetConnectAttrW
+#define SQLGetConnectOption SQLGetConnectOptionW
+#define SQLGetCursorName SQLGetCursorNameW
+#define SQLGetDescField SQLGetDescFieldW
+#define SQLGetDescRec SQLGetDescRecW
+#define SQLGetDiagField SQLGetDiagFieldW
+#define SQLGetDiagRec SQLGetDiagRecW
+#define SQLGetInfo SQLGetInfoW
+#define SQLGetStmtAttr SQLGetStmtAttrW
+#define SQLGetTypeInfo SQLGetTypeInfoW
+#define SQLNativeSql SQLNativeSqlW
+#define SQLPrepare SQLPrepareW
+#define SQLPrimaryKeys SQLPrimaryKeysW
+#define SQLProcedureColumns SQLProcedureColumnsW
+#define SQLProcedures SQLProceduresW
+#define SQLSetConnectAttr SQLSetConnectAttrW
+#define SQLSetConnectOption SQLSetConnectOptionW
+#define SQLSetCursorName SQLSetCursorNameW
+#define SQLSetDescField SQLSetDescFieldW
+#define SQLSetStmtAttr SQLSetStmtAttrW
+#define SQLSpecialColumns SQLSpecialColumnsW
+#define SQLStatistics SQLStatisticsW
+#define SQLTablePrivileges SQLTablePrivilegesW
+#define SQLTables SQLTablesW
+#endif /* UNICODE && ! SQL_NOUNICODEMAP */
+#endif /* RC_INVOKED */
+#ifdef __cplusplus
+}
+#endif /* __cplusplus*/
+#endif /* ndef _SQLUCODE_H */
diff --git a/tcc/include/winapi/sspi.h b/tcc/include/winapi/sspi.h
new file mode 100644
index 0000000..8881780
--- /dev/null
+++ b/tcc/include/winapi/sspi.h
@@ -0,0 +1,345 @@
+#ifndef _SSPI_H
+#define _SSPI_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#include <ntsecapi.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <subauth.h>
+
+#define SECPKG_CRED_INBOUND 1
+#define SECPKG_CRED_OUTBOUND 2
+#define SECPKG_CRED_BOTH (SECPKG_CRED_OUTBOUND|SECPKG_CRED_INBOUND)
+#define SECPKG_CRED_ATTR_NAMES 1
+
+#define SECPKG_FLAG_INTEGRITY 1
+#define SECPKG_FLAG_PRIVACY 2
+#define SECPKG_FLAG_TOKEN_ONLY 4
+#define SECPKG_FLAG_DATAGRAM 8
+#define SECPKG_FLAG_CONNECTION 16
+#define SECPKG_FLAG_MULTI_REQUIRED 32
+#define SECPKG_FLAG_CLIENT_ONLY 64
+#define SECPKG_FLAG_EXTENDED_ERROR 128
+#define SECPKG_FLAG_IMPERSONATION 256
+#define SECPKG_FLAG_ACCEPT_WIN32_NAME 512
+#define SECPKG_FLAG_STREAM 1024
+
+#define SECPKG_ATTR_AUTHORITY 6
+#define SECPKG_ATTR_CONNECTION_INFO 90
+#define SECPKG_ATTR_ISSUER_LIST 80
+#define SECPKG_ATTR_ISSUER_LIST_EX 89
+#define SECPKG_ATTR_KEY_INFO 5
+#define SECPKG_ATTR_LIFESPAN 2
+#define SECPKG_ATTR_LOCAL_CERT_CONTEXT 84
+#define SECPKG_ATTR_LOCAL_CRED 82
+#define SECPKG_ATTR_NAMES 1
+#define SECPKG_ATTR_PROTO_INFO 7
+#define SECPKG_ATTR_REMOTE_CERT_CONTEXT 83
+#define SECPKG_ATTR_REMOTE_CRED 81
+#define SECPKG_ATTR_SIZES 0
+#define SECPKG_ATTR_STREAM_SIZES 4
+
+#define SECBUFFER_EMPTY 0
+#define SECBUFFER_DATA 1
+#define SECBUFFER_TOKEN 2
+#define SECBUFFER_PKG_PARAMS 3
+#define SECBUFFER_MISSING 4
+#define SECBUFFER_EXTRA 5
+#define SECBUFFER_STREAM_TRAILER 6
+#define SECBUFFER_STREAM_HEADER 7
+#define SECBUFFER_PADDING 9
+#define SECBUFFER_STREAM 10
+#define SECBUFFER_READONLY 0x80000000
+#define SECBUFFER_ATTRMASK 0xf0000000
+
+#define UNISP_NAME_A "Microsoft Unified Security Protocol Provider"
+#define UNISP_NAME_W L"Microsoft Unified Security Protocol Provider"
+#define SECBUFFER_VERSION 0
+
+typedef UNICODE_STRING SECURITY_STRING, *PSECURITY_STRING;
+
+typedef struct _SecHandle {
+ ULONG_PTR dwLower;
+ ULONG_PTR dwUpper;
+} SecHandle, *PSecHandle;
+typedef struct _SecBuffer {
+ ULONG cbBuffer;
+ ULONG BufferType;
+ PVOID pvBuffer;
+} SecBuffer, *PSecBuffer;
+typedef SecHandle CredHandle;
+typedef PSecHandle PCredHandle;
+typedef SecHandle CtxtHandle;
+typedef PSecHandle PCtxtHandle;
+typedef struct _SECURITY_INTEGER {
+ unsigned long LowPart;
+ long HighPart;
+} SECURITY_INTEGER;
+typedef SECURITY_INTEGER TimeStamp, *PTimeStamp;
+typedef struct _SecBufferDesc {
+ ULONG ulVersion;
+ ULONG cBuffers;
+ PSecBuffer pBuffers;
+} SecBufferDesc, *PSecBufferDesc;
+typedef struct _SecPkgContext_StreamSizes {
+ ULONG cbHeader;
+ ULONG cbTrailer;
+ ULONG cbMaximumMessage;
+ ULONG cBuffers;
+ ULONG cbBlockSize;
+} SecPkgContext_StreamSizes, *PSecPkgContext_StreamSizes;
+typedef struct _SecPkgContext_Sizes {
+ ULONG cbMaxToken;
+ ULONG cbMaxSignature;
+ ULONG cbBlockSize;
+ ULONG cbSecurityTrailer;
+} SecPkgContext_Sizes, *PSecPkgContext_Sizes;
+typedef struct _SecPkgContext_AuthorityW {
+ SEC_WCHAR* sAuthorityName;
+} SecPkgContext_AuthorityW, *PSecPkgContext_AuthorityW;
+typedef struct _SecPkgContext_AuthorityA {
+ SEC_CHAR* sAuthorityName;
+} SecPkgContext_AuthorityA, *PSecPkgContext_AuthorityA;
+typedef struct _SecPkgContext_KeyInfoW {
+ SEC_WCHAR* sSignatureAlgorithmName;
+ SEC_WCHAR* sEncryptAlgorithmName;
+ ULONG KeySize;
+ ULONG SignatureAlgorithm;
+ ULONG EncryptAlgorithm;
+} SecPkgContext_KeyInfoW, *PSecPkgContext_KeyInfoW;
+typedef struct _SecPkgContext_KeyInfoA {
+ SEC_CHAR* sSignatureAlgorithmName;
+ SEC_CHAR* sEncryptAlgorithmName;
+ ULONG KeySize;
+ ULONG SignatureAlgorithm;
+ ULONG EncryptAlgorithm;
+} SecPkgContext_KeyInfoA, *PSecPkgContext_KeyInfoA;
+typedef struct _SecPkgContext_LifeSpan {
+ TimeStamp tsStart;
+ TimeStamp tsExpiry;
+} SecPkgContext_LifeSpan, *PSecPkgContext_LifeSpan;
+typedef struct _SecPkgContext_NamesW {
+ SEC_WCHAR* sUserName;
+} SecPkgContext_NamesW, *PSecPkgContext_NamesW;
+typedef struct _SecPkgContext_NamesA {
+ SEC_CHAR* sUserName;
+} SecPkgContext_NamesA, *PSecPkgContext_NamesA;
+typedef struct _SecPkgInfoW {
+ ULONG fCapabilities;
+ USHORT wVersion;
+ USHORT wRPCID;
+ ULONG cbMaxToken;
+ SEC_WCHAR* Name;
+ SEC_WCHAR* Comment;
+} SecPkgInfoW, *PSecPkgInfoW;
+typedef struct _SecPkgInfoA {
+ ULONG fCapabilities;
+ USHORT wVersion;
+ USHORT wRPCID;
+ ULONG cbMaxToken;
+ SEC_CHAR* Name;
+ SEC_CHAR* Comment;
+} SecPkgInfoA, *PSecPkgInfoA;
+/* supported only in win2k+, so it should be a PSecPkgInfoW */
+/* PSDK does not say it has ANSI/Unicode versions */
+typedef struct _SecPkgContext_PackageInfo {
+ PSecPkgInfoW PackageInfo;
+} SecPkgContext_PackageInfo, *PSecPkgContext_PackageInfo;
+typedef struct _SecPkgCredentials_NamesW {
+ SEC_WCHAR* sUserName;
+} SecPkgCredentials_NamesW, *PSecPkgCredentials_NamesW;
+typedef struct _SecPkgCredentials_NamesA {
+ SEC_CHAR* sUserName;
+} SecPkgCredentials_NamesA, *PSecPkgCredentials_NamesA;
+
+/* TODO: missing type in SDK */
+typedef void (*SEC_GET_KEY_FN)();
+
+typedef SECURITY_STATUS (WINAPI *ENUMERATE_SECURITY_PACKAGES_FN_W)(PULONG,PSecPkgInfoW*);
+typedef SECURITY_STATUS (WINAPI *ENUMERATE_SECURITY_PACKAGES_FN_A)(PULONG,PSecPkgInfoA*);
+typedef SECURITY_STATUS (WINAPI *QUERY_CREDENTIALS_ATTRIBUTES_FN_W)(PCredHandle,ULONG,PVOID);
+typedef SECURITY_STATUS (WINAPI *QUERY_CREDENTIALS_ATTRIBUTES_FN_A)(PCredHandle,ULONG,PVOID);
+typedef SECURITY_STATUS (WINAPI *ACQUIRE_CREDENTIALS_HANDLE_FN_W)(SEC_WCHAR*,SEC_WCHAR*,ULONG,PLUID,PVOID,SEC_GET_KEY_FN,PVOID,PCredHandle,PTimeStamp);
+typedef SECURITY_STATUS (WINAPI *ACQUIRE_CREDENTIALS_HANDLE_FN_A)(SEC_CHAR*,SEC_CHAR*,ULONG,PLUID,PVOID,SEC_GET_KEY_FN,PVOID,PCredHandle,PTimeStamp);
+typedef SECURITY_STATUS (WINAPI *FREE_CREDENTIALS_HANDLE_FN)(PCredHandle);
+typedef SECURITY_STATUS (WINAPI *INITIALIZE_SECURITY_CONTEXT_FN_W)(PCredHandle,PCtxtHandle,SEC_WCHAR*,ULONG,ULONG,ULONG,PSecBufferDesc,ULONG,PCtxtHandle,PSecBufferDesc,PULONG,PTimeStamp);
+typedef SECURITY_STATUS (WINAPI *INITIALIZE_SECURITY_CONTEXT_FN_A)(PCredHandle,PCtxtHandle,SEC_CHAR*,ULONG,ULONG,ULONG,PSecBufferDesc,ULONG,PCtxtHandle,PSecBufferDesc,PULONG,PTimeStamp);
+typedef SECURITY_STATUS (WINAPI *ACCEPT_SECURITY_CONTEXT_FN)(PCredHandle,PCtxtHandle,PSecBufferDesc,ULONG,ULONG,PCtxtHandle,PSecBufferDesc,PULONG,PTimeStamp);
+typedef SECURITY_STATUS (WINAPI *COMPLETE_AUTH_TOKEN_FN)(PCtxtHandle,PSecBufferDesc);
+typedef SECURITY_STATUS (WINAPI *DELETE_SECURITY_CONTEXT_FN)(PCtxtHandle);
+typedef SECURITY_STATUS (WINAPI *APPLY_CONTROL_TOKEN_FN_W)(PCtxtHandle,PSecBufferDesc);
+typedef SECURITY_STATUS (WINAPI *APPLY_CONTROL_TOKEN_FN_A)(PCtxtHandle,PSecBufferDesc);
+typedef SECURITY_STATUS (WINAPI *QUERY_CONTEXT_ATTRIBUTES_FN_A)(PCtxtHandle,ULONG,PVOID);
+typedef SECURITY_STATUS (WINAPI *QUERY_CONTEXT_ATTRIBUTES_FN_W)(PCtxtHandle,ULONG,PVOID);
+typedef SECURITY_STATUS (WINAPI *IMPERSONATE_SECURITY_CONTEXT_FN)(PCtxtHandle);
+typedef SECURITY_STATUS (WINAPI *REVERT_SECURITY_CONTEXT_FN)(PCtxtHandle);
+typedef SECURITY_STATUS (WINAPI *MAKE_SIGNATURE_FN)(PCtxtHandle,ULONG,PSecBufferDesc,ULONG);
+typedef SECURITY_STATUS (WINAPI *VERIFY_SIGNATURE_FN)(PCtxtHandle,PSecBufferDesc,ULONG,PULONG);
+typedef SECURITY_STATUS (WINAPI *FREE_CONTEXT_BUFFER_FN)(PVOID);
+typedef SECURITY_STATUS (WINAPI *QUERY_SECURITY_PACKAGE_INFO_FN_A)(SEC_CHAR*,PSecPkgInfoA*);
+typedef SECURITY_STATUS (WINAPI *QUERY_SECURITY_CONTEXT_TOKEN_FN)(PCtxtHandle,HANDLE*);
+typedef SECURITY_STATUS (WINAPI *QUERY_SECURITY_PACKAGE_INFO_FN_W)(SEC_WCHAR*,PSecPkgInfoW*);
+typedef SECURITY_STATUS (WINAPI *ENCRYPT_MESSAGE_FN)(PCtxtHandle,ULONG,PSecBufferDesc,ULONG);
+typedef SECURITY_STATUS (WINAPI *DECRYPT_MESSAGE_FN)(PCtxtHandle,PSecBufferDesc,ULONG,PULONG);
+
+/* No, it really is FreeCredentialsHandle, see the thread beginning
+ * http://sourceforge.net/mailarchive/message.php?msg_id=4321080 for a
+ * discovery discussion. */
+typedef struct _SECURITY_FUNCTION_TABLEW {
+ unsigned long dwVersion;
+ ENUMERATE_SECURITY_PACKAGES_FN_W EnumerateSecurityPackagesW;
+ QUERY_CREDENTIALS_ATTRIBUTES_FN_W QueryCredentialsAttributesW;
+ ACQUIRE_CREDENTIALS_HANDLE_FN_W AcquireCredentialsHandleW;
+ FREE_CREDENTIALS_HANDLE_FN FreeCredentialsHandle;
+ void SEC_FAR* Reserved2;
+ INITIALIZE_SECURITY_CONTEXT_FN_W InitializeSecurityContextW;
+ ACCEPT_SECURITY_CONTEXT_FN AcceptSecurityContext;
+ COMPLETE_AUTH_TOKEN_FN CompleteAuthToken;
+ DELETE_SECURITY_CONTEXT_FN DeleteSecurityContext;
+ APPLY_CONTROL_TOKEN_FN_W ApplyControlTokenW;
+ QUERY_CONTEXT_ATTRIBUTES_FN_W QueryContextAttributesW;
+ IMPERSONATE_SECURITY_CONTEXT_FN ImpersonateSecurityContext;
+ REVERT_SECURITY_CONTEXT_FN RevertSecurityContext;
+ MAKE_SIGNATURE_FN MakeSignature;
+ VERIFY_SIGNATURE_FN VerifySignature;
+ FREE_CONTEXT_BUFFER_FN FreeContextBuffer;
+ QUERY_SECURITY_PACKAGE_INFO_FN_W QuerySecurityPackageInfoW;
+ void SEC_FAR* Reserved3;
+ void SEC_FAR* Reserved4;
+ void SEC_FAR* Reserved5;
+ void SEC_FAR* Reserved6;
+ void SEC_FAR* Reserved7;
+ void SEC_FAR* Reserved8;
+ QUERY_SECURITY_CONTEXT_TOKEN_FN QuerySecurityContextToken;
+ ENCRYPT_MESSAGE_FN EncryptMessage;
+ DECRYPT_MESSAGE_FN DecryptMessage;
+} SecurityFunctionTableW, *PSecurityFunctionTableW;
+typedef struct _SECURITY_FUNCTION_TABLEA {
+ unsigned long dwVersion;
+ ENUMERATE_SECURITY_PACKAGES_FN_A EnumerateSecurityPackagesA;
+ QUERY_CREDENTIALS_ATTRIBUTES_FN_A QueryCredentialsAttributesA;
+ ACQUIRE_CREDENTIALS_HANDLE_FN_A AcquireCredentialsHandleA;
+ FREE_CREDENTIALS_HANDLE_FN FreeCredentialsHandle;
+ void SEC_FAR* Reserved2;
+ INITIALIZE_SECURITY_CONTEXT_FN_A InitializeSecurityContextA;
+ ACCEPT_SECURITY_CONTEXT_FN AcceptSecurityContext;
+ COMPLETE_AUTH_TOKEN_FN CompleteAuthToken;
+ DELETE_SECURITY_CONTEXT_FN DeleteSecurityContext;
+ APPLY_CONTROL_TOKEN_FN_A ApplyControlTokenA;
+ QUERY_CONTEXT_ATTRIBUTES_FN_A QueryContextAttributesA;
+ IMPERSONATE_SECURITY_CONTEXT_FN ImpersonateSecurityContext;
+ REVERT_SECURITY_CONTEXT_FN RevertSecurityContext;
+ MAKE_SIGNATURE_FN MakeSignature;
+ VERIFY_SIGNATURE_FN VerifySignature;
+ FREE_CONTEXT_BUFFER_FN FreeContextBuffer;
+ QUERY_SECURITY_PACKAGE_INFO_FN_A QuerySecurityPackageInfoA;
+ void SEC_FAR* Reserved3;
+ void SEC_FAR* Reserved4;
+ void SEC_FAR* Unknown1;
+ void SEC_FAR* Unknown2;
+ void SEC_FAR* Unknown3;
+ void SEC_FAR* Unknown4;
+ void SEC_FAR* Unknown5;
+ ENCRYPT_MESSAGE_FN EncryptMessage;
+ DECRYPT_MESSAGE_FN DecryptMessage;
+} SecurityFunctionTableA, *PSecurityFunctionTableA;
+typedef PSecurityFunctionTableA (WINAPI *INIT_SECURITY_INTERFACE_A)(VOID);
+typedef PSecurityFunctionTableW (WINAPI *INIT_SECURITY_INTERFACE_W)(VOID);
+
+SECURITY_STATUS WINAPI FreeCredentialsHandle(PCredHandle);
+SECURITY_STATUS WINAPI EnumerateSecurityPackagesA(PULONG,PSecPkgInfoA*);
+SECURITY_STATUS WINAPI EnumerateSecurityPackagesW(PULONG,PSecPkgInfoW*);
+SECURITY_STATUS WINAPI AcquireCredentialsHandleA(SEC_CHAR*,SEC_CHAR*,ULONG,PLUID,PVOID,SEC_GET_KEY_FN,PVOID,PCredHandle,PTimeStamp);
+SECURITY_STATUS WINAPI AcquireCredentialsHandleW(SEC_WCHAR*,SEC_WCHAR*,ULONG,PLUID,PVOID,SEC_GET_KEY_FN,PVOID,PCredHandle,PTimeStamp);
+SECURITY_STATUS WINAPI AcceptSecurityContext(PCredHandle,PCtxtHandle,PSecBufferDesc,ULONG,ULONG,PCtxtHandle,PSecBufferDesc,PULONG,PTimeStamp);
+SECURITY_STATUS WINAPI InitializeSecurityContextA(PCredHandle,PCtxtHandle,SEC_CHAR*,ULONG,ULONG,ULONG,PSecBufferDesc,ULONG,PCtxtHandle,PSecBufferDesc,PULONG,PTimeStamp);
+SECURITY_STATUS WINAPI InitializeSecurityContextW(PCredHandle,PCtxtHandle,SEC_WCHAR*,ULONG,ULONG,ULONG,PSecBufferDesc,ULONG,PCtxtHandle,PSecBufferDesc,PULONG,PTimeStamp);
+SECURITY_STATUS WINAPI FreeContextBuffer(PVOID);
+SECURITY_STATUS WINAPI QueryContextAttributesA(PCtxtHandle,ULONG,PVOID);
+SECURITY_STATUS WINAPI QueryContextAttributesW(PCtxtHandle,ULONG,PVOID);
+SECURITY_STATUS WINAPI QueryCredentialsAttributesA(PCredHandle,ULONG,PVOID);
+SECURITY_STATUS WINAPI QueryCredentialsAttributesW(PCredHandle,ULONG,PVOID);
+SECURITY_STATUS WINAPI DecryptMessage(PCtxtHandle,PSecBufferDesc,ULONG,PULONG);
+SECURITY_STATUS WINAPI EncryptMessage(PCtxtHandle,ULONG,PSecBufferDesc,ULONG);
+SECURITY_STATUS WINAPI DeleteSecurityContext(PCtxtHandle);
+SECURITY_STATUS WINAPI CompleteAuthToken(PCtxtHandle,PSecBufferDesc);
+SECURITY_STATUS WINAPI ApplyControlTokenA(PCtxtHandle,PSecBufferDesc);
+SECURITY_STATUS WINAPI ApplyControlTokenW(PCtxtHandle,PSecBufferDesc);
+SECURITY_STATUS WINAPI ImpersonateSecurityContext(PCtxtHandle);
+SECURITY_STATUS WINAPI RevertSecurityContext(PCtxtHandle);
+SECURITY_STATUS WINAPI MakeSignature(PCtxtHandle,ULONG,PSecBufferDesc,ULONG);
+SECURITY_STATUS WINAPI VerifySignature(PCtxtHandle,PSecBufferDesc,ULONG,PULONG);
+SECURITY_STATUS WINAPI QuerySecurityPackageInfoA(SEC_CHAR*,PSecPkgInfoA*);
+SECURITY_STATUS WINAPI QuerySecurityPackageInfoW(SEC_WCHAR*,PSecPkgInfoW*);
+PSecurityFunctionTableA WINAPI InitSecurityInterfaceA(VOID);
+PSecurityFunctionTableW WINAPI InitSecurityInterfaceW(VOID);
+
+#ifdef UNICODE
+#define UNISP_NAME UNISP_NAME_W
+#define SecPkgInfo SecPkgInfoW
+#define PSecPkgInfo PSecPkgInfoW
+#define SecPkgCredentials_Names SecPkgCredentials_NamesW
+#define PSecPkgCredentials_Names PSecPkgCredentials_NamesW
+#define SecPkgContext_Authority SecPkgContext_AuthorityW
+#define PSecPkgContext_Authority PSecPkgContext_AuthorityW
+#define SecPkgContext_KeyInfo SecPkgContext_KeyInfoW
+#define PSecPkgContext_KeyInfo PSecPkgContext_KeyInfoW
+#define SecPkgContext_Names SecPkgContext_NamesW
+#define PSecPkgContext_Names PSecPkgContext_NamesW
+#define SecurityFunctionTable SecurityFunctionTableW
+#define PSecurityFunctionTable PSecurityFunctionTableW
+#define AcquireCredentialsHandle AcquireCredentialsHandleW
+#define EnumerateSecurityPackages EnumerateSecurityPackagesW
+#define InitializeSecurityContext InitializeSecurityContextW
+#define QueryContextAttributes QueryContextAttributesW
+#define QueryCredentialsAttributes QueryCredentialsAttributesW
+#define QuerySecurityPackageInfo QuerySecurityPackageInfoW
+#define ApplyControlToken ApplyControlTokenW
+#define ENUMERATE_SECURITY_PACKAGES_FN ENUMERATE_SECURITY_PACKAGES_FN_W
+#define QUERY_CREDENTIALS_ATTRIBUTES_FN QUERY_CREDENTIALS_ATTRIBUTES_FN_W
+#define ACQUIRE_CREDENTIALS_HANDLE_FN ACQUIRE_CREDENTIALS_HANDLE_FN_W
+#define INITIALIZE_SECURITY_CONTEXT_FN INITIALIZE_SECURITY_CONTEXT_FN_W
+#define APPLY_CONTROL_TOKEN_FN APPLY_CONTROL_TOKEN_FN_W
+#define QUERY_CONTEXT_ATTRIBUTES_FN QUERY_CONTEXT_ATTRIBUTES_FN_W
+#define QUERY_SECURITY_PACKAGE_INFO_FN QUERY_SECURITY_PACKAGE_INFO_FN_W
+#define INIT_SECURITY_INTERFACE INIT_SECURITY_INTERFACE_W
+#else
+#define UNISP_NAME UNISP_NAME_A
+#define SecPkgInfo SecPkgInfoA
+#define PSecPkgInfo PSecPkgInfoA
+#define SecPkgCredentials_Names SecPkgCredentials_NamesA
+#define PSecPkgCredentials_Names PSecPkgCredentials_NamesA
+#define SecPkgContext_Authority SecPkgContext_AuthorityA
+#define PSecPkgContext_Authority PSecPkgContext_AuthorityA
+#define SecPkgContext_KeyInfo SecPkgContext_KeyInfoA
+#define PSecPkgContext_KeyInfo PSecPkgContext_KeyInfoA
+#define SecPkgContext_Names SecPkgContext_NamesA
+#define PSecPkgContext_Names PSecPkgContext_NamesA
+#define SecurityFunctionTable SecurityFunctionTableA
+#define PSecurityFunctionTable PSecurityFunctionTableA
+#define AcquireCredentialsHandle AcquireCredentialsHandleA
+#define EnumerateSecurityPackages EnumerateSecurityPackagesA
+#define InitializeSecurityContext InitializeSecurityContextA
+#define QueryContextAttributes QueryContextAttributesA
+#define QueryCredentialsAttributes QueryCredentialsAttributesA
+#define QuerySecurityPackageInfo QuerySecurityPackageInfoA
+#define ApplyControlToken ApplyControlTokenA
+#define ENUMERATE_SECURITY_PACKAGES_FN ENUMERATE_SECURITY_PACKAGES_FN_A
+#define QUERY_CREDENTIALS_ATTRIBUTES_FN QUERY_CREDENTIALS_ATTRIBUTES_FN_A
+#define ACQUIRE_CREDENTIALS_HANDLE_FN ACQUIRE_CREDENTIALS_HANDLE_FN_A
+#define INITIALIZE_SECURITY_CONTEXT_FN INITIALIZE_SECURITY_CONTEXT_FN_A
+#define APPLY_CONTROL_TOKEN_FN APPLY_CONTROL_TOKEN_FN_A
+#define QUERY_CONTEXT_ATTRIBUTES_FN QUERY_CONTEXT_ATTRIBUTES_FN_A
+#define QUERY_SECURITY_PACKAGE_INFO_FN QUERY_SECURITY_PACKAGE_INFO_FN_A
+#define INIT_SECURITY_INTERFACE INIT_SECURITY_INTERFACE_A
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/stm.h b/tcc/include/winapi/stm.h
new file mode 100644
index 0000000..2b8e10f
--- /dev/null
+++ b/tcc/include/winapi/stm.h
@@ -0,0 +1,25 @@
+#ifndef _STM_H
+#define _STM_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if (_WIN32_WINNT >= 0x0500)
+typedef struct _IPX_SERVER_ENTRY {
+ USHORT Type;
+ UCHAR Name[48];
+ UCHAR Network[4];
+ UCHAR Node[6];
+ UCHAR Socket[2];
+ USHORT HopCount;
+} IPX_SERVER_ENTRY,*PIPX_SERVER_ENTRY;
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/strmif.h b/tcc/include/winapi/strmif.h
new file mode 100644
index 0000000..38cbc96
--- /dev/null
+++ b/tcc/include/winapi/strmif.h
@@ -0,0 +1,1159 @@
+#ifndef _STRMIF_H
+#define _STRMIF_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--- DirectShow Reference - DirectShow Enumerated Types - TVAudioMode Enumeration */
+#define TVAUDIO_MODE_MASK 0x000000FF
+#define TVAUDIO_PRESET_MASK 0x0000FF00
+/*--- DirectShow Reference - DirectShow Data Types */
+typedef LONGLONG REFERENCE_TIME;
+typedef double REFTIME;
+/*--- DirectShow Reference - Constants and GUIDs */
+enum {
+ MERIT_PREFERRED = 0x800000,
+ MERIT_NORMAL = 0x600000,
+ MERIT_UNLIKELY = 0x400000,
+ MERIT_DO_NOT_USE = 0x200000,
+ MERIT_SW_COMPRESSOR = 0x100000,
+ MERIT_HW_COMPRESSOR = 0x100050
+};
+/*--- DirectShow Reference - DirectShow Enumerated Types */
+typedef enum _AM_AUDIO_RENDERER_STAT_PARAM {
+ AM_AUDREND_STAT_PARAM_BREAK_COUNT = 1,
+ AM_AUDREND_STAT_PARAM_SLAVE_MODE,
+ AM_AUDREND_STAT_PARAM_SILENCE_DUR,
+ AM_AUDREND_STAT_PARAM_LAST_BUFFER_DUR,
+ AM_AUDREND_STAT_PARAM_DISCONTINUITIES,
+ AM_AUDREND_STAT_PARAM_SLAVE_RATE,
+ AM_AUDREND_STAT_PARAM_SLAVE_DROPWRITE_DUR,
+ AM_AUDREND_STAT_PARAM_SLAVE_HIGHLOWERROR,
+ AM_AUDREND_STAT_PARAM_SLAVE_LASTHIGHLOWERROR,
+ AM_AUDREND_STAT_PARAM_SLAVE_ACCUMERROR,
+ AM_AUDREND_STAT_PARAM_BUFFERFULLNESS,
+ AM_AUDREND_STAT_PARAM_JITTER
+} AM_AUDIO_RENDERER_STAT_PARAM;
+typedef enum _AM_DVD_GRAPH_FLAGS {
+ AM_DVD_HWDEC_PREFER = 0x01,
+ AM_DVD_HWDEC_ONLY = 0x02,
+ AM_DVD_SWDEC_PREFER = 0x04,
+ AM_DVD_SWDEC_ONLY = 0x08,
+ AM_DVD_NOVPE = 0x100,
+ AM_DVD_VMR9_ONLY = 0x800,
+ AM_DVD_EVR_ONLY = 0x1000
+} AM_DVD_GRAPH_FLAGS;
+typedef enum _AM_DVD_STREAM_FLAGS {
+ AM_DVD_STREAM_VIDEO = 0x01,
+ AM_DVD_STREAM_AUDIO = 0x02,
+ AM_DVD_STREAM_SUBPIC = 0x04
+} AM_DVD_STREAM_FLAGS;
+typedef enum _AM_FILTER_MISC_FLAGS {
+ AM_FILTER_MISC_FLAGS_IS_RENDERER = 0x00000001,
+ AM_FILTER_MISC_FLAGS_IS_SOURCE = 0x00000002
+} AM_FILTER_MISC_FLAGS;
+typedef enum _AM_GRAPH_CONFIG_RECONNECT_FLAGS {
+ AM_GRAPH_CONFIG_RECONNECT_DIRECTCONNECT = 0x00000001,
+ AM_GRAPH_CONFIG_RECONNECT_CACHE_REMOVED_FILTERS = 0x00000002,
+ AM_GRAPH_CONFIG_RECONNECT_USE_ONLY_CACHED_FILTERS = 0x00000004
+} AM_GRAPH_CONFIG_RECONNECT_FLAGS;
+typedef enum _AM_INTF_SEARCH_FLAGS {
+ AM_INTF_SEARCH_INPUT_PIN = 0x00000001,
+ AM_INTF_SEARCH_OUTPUT_PIN = 0x00000002,
+ AM_INTF_SEARCH_FILTER = 0x00000004
+} AM_INTF_SEARCH_FLAGS;
+typedef enum _AM_OVERLAY_NOTIFY_FLAGS {
+ AM_OVERLAY_NOTIFY_VISIBLE_CHANGE = 0x00000001,
+ AM_OVERLAY_NOTIFY_SOURCE_CHANGE = 0x00000002,
+ AM_OVERLAY_NOTIFY_DEST_CHANGE = 0x00000004
+} AM_OVERLAY_NOTIFY_FLAGS;
+typedef enum _AM_PIN_CONNECTION_BLOCK_FLAGS {
+ AM_PIN_FLOW_CONTROL_BLOCK = 0x00000001,
+ AM_PIN_PUSH_THROUGH_DATA = 0x00000002
+} AM_PIN_CONNECTION_BLOCK_FLAGS;
+typedef enum _AM_PUSHSOURCE_FLAGS {
+ AM_PUSHSOURCECAPS_INTERNAL_RM = 0x00000001,
+ AM_PUSHSOURCECAPS_NOT_LIVE = 0x00000002,
+ AM_PUSHSOURCECAPS_PRIVATE_CLOCK = 0x00000004,
+ AM_PUSHSOURCEREQS_USE_STREAM_CLOCK = 0x00010000
+} AM_PUSHSOURCE_FLAGS;
+typedef enum tagAM_SAMPLE_PROPERTY_FLAGS {
+ AM_SAMPLE_SPLICEPOINT = 0x01,
+ AM_SAMPLE_PREROLL = 0x02,
+ AM_SAMPLE_DATADISCONTINUITY = 0x04,
+ AM_SAMPLE_TYPECHANGED = 0x08,
+ AM_SAMPLE_TIMEVALID = 0x10,
+ AM_SAMPLE_TIMEDISCONTINUITY = 0x40,
+ AM_SAMPLE_FLUSH_ON_PAUSE = 0x80,
+ AM_SAMPLE_STOPVALID = 0x100,
+ AM_SAMPLE_ENDOFSTREAM = 0x200,
+ AM_STREAM_MEDIA = 0,
+ AM_STREAM_CONTROL = 1
+} AM_SAMPLE_PROPERTY_FLAGS;
+typedef enum AM_SEEKING_SeekingCapabilities {
+ AM_SEEKING_CanSeekAbsolute = 0x1,
+ AM_SEEKING_CanSeekForwards = 0x2,
+ AM_SEEKING_CanSeekBackwards = 0x4,
+ AM_SEEKING_CanGetCurrentPos = 0x8,
+ AM_SEEKING_CanGetStopPos = 0x10,
+ AM_SEEKING_CanGetDuration = 0x20,
+ AM_SEEKING_CanPlayBackwards = 0x40,
+ AM_SEEKING_CanDoSegments = 0x80,
+ AM_SEEKING_Source = 0x100
+} AM_SEEKING_SEEKING_CAPABILITIES;
+typedef enum {
+ AM_STREAM_INFO_START_DEFINED = 0x00000001,
+ AM_STREAM_INFO_STOP_DEFINED = 0x00000002,
+ AM_STREAM_INFO_DISCARDING = 0x00000004,
+ AM_STREAM_INFO_STOP_SEND_EXTRA = 0x00000010
+} AM_STREAM_INFO_FLAGS;
+enum AMOVERLAYFX {
+ AMOVERFX_NOFX = 0x00000000,
+ AMOVERFX_MIRRORLEFTRIGHT = 0x00000002,
+ AMOVERFX_MIRRORUPDOWN = 0x00000004,
+ AMOVERFX_DEINTERLACE = 0x00000008
+};
+typedef enum _AMRESCTL_RESERVEFLAGS {
+ AMRESCTL_RESERVEFLAGS_RESERVE = 0x00,
+ AMRESCTL_RESERVEFLAGS_UNRESERVE = 0x01
+} AMRESCTL_RESERVEFLAGS;
+typedef enum tagAMTunerModeType {
+ AMTUNER_MODE_DEFAULT = 0x0000,
+ AMTUNER_MODE_TV = 0x0001,
+ AMTUNER_MODE_FM_RADIO = 0x0002,
+ AMTUNER_MODE_AM_RADIO = 0x0004,
+ AMTUNER_MODE_DSS = 0x0008
+} AMTunerModeType;
+typedef enum tagAnalogVideoStandard {
+ AnalogVideo_None = 0x00000000,
+ AnalogVideo_NTSC_M = 0x00000001,
+ AnalogVideo_NTSC_M_J = 0x00000002,
+ AnalogVideo_NTSC_433 = 0x00000004,
+ AnalogVideo_PAL_B = 0x00000010,
+ AnalogVideo_PAL_D = 0x00000020,
+ AnalogVideo_PAL_H = 0x00000080,
+ AnalogVideo_PAL_I = 0x00000100,
+ AnalogVideo_PAL_M = 0x00000200,
+ AnalogVideo_PAL_N = 0x00000400,
+ AnalogVideo_PAL_60 = 0x00000800,
+ AnalogVideo_SECAM_B = 0x00001000,
+ AnalogVideo_SECAM_D = 0x00002000,
+ AnalogVideo_SECAM_G = 0x00004000,
+ AnalogVideo_SECAM_H = 0x00008000,
+ AnalogVideo_SECAM_K = 0x00010000,
+ AnalogVideo_SECAM_K1 = 0x00020000,
+ AnalogVideo_SECAM_L = 0x00040000,
+ AnalogVideo_SECAM_L1 = 0x00080000,
+ AnalogVideo_PAL_N_COMBO = 0x00100000
+} AnalogVideoStandard;
+typedef enum {
+ CameraControl_Flags_Auto = 0x0001,
+ CameraControl_Flags_Manual = 0x0002
+} CameraControlFlags;
+typedef enum {
+ CameraControl_Pan = 1,
+ CameraControl_Tilt,
+ CameraControl_Roll,
+ CameraControl_Zoom,
+ CameraControl_Exposure,
+ CameraControl_Iris,
+ CameraControl_Focus
+} CameraControlProperty;
+typedef enum {
+ CompressionCaps_CanQuality = 0x01,
+ CompressionCaps_CanCrunch = 0x02,
+ CompressionCaps_CanKeyFrame = 0x04,
+ CompressionCaps_CanBFrame = 0x08,
+ CompressionCaps_CanWindow = 0x10
+} CompressionCaps;
+typedef enum {
+ DECIMATION_LEGACY,
+ DECIMATION_USE_DECODER_ONLY,
+ DECIMATION_USE_VIDEOPORT_ONLY,
+ DECIMATION_USE_OVERLAY_ONLY,
+ DECIMATION_DEFAULT
+} DECIMATION_USAGE;
+typedef enum tagDVD_AUDIO_APPMODE {
+ DVD_AudioMode_None = 0,
+ DVD_AudioMode_Karaoke = 1,
+ DVD_AudioMode_Surround = 2,
+ DVD_AudioMode_Other = 3
+} DVD_AUDIO_APPMODE;
+typedef enum tagDVD_AUDIO_FORMAT {
+ DVD_AudioFormat_AC3 = 0,
+ DVD_AudioFormat_MPEG1 = 1,
+ DVD_AudioFormat_MPEG1_DRC = 2,
+ DVD_AudioFormat_MPEG2 = 3,
+ DVD_AudioFormat_MPEG2_DRC = 4,
+ DVD_AudioFormat_LPCM = 5,
+ DVD_AudioFormat_DTS = 6,
+ DVD_AudioFormat_SDDS = 7,
+ DVD_AudioFormat_Other = 8
+} DVD_AUDIO_FORMAT;
+typedef enum tagDVD_AUDIO_LANG_EXT {
+ DVD_AUD_EXT_NotSpecified = 0,
+ DVD_AUD_EXT_Captions = 1,
+ DVD_AUD_EXT_VisuallyImpaired = 2,
+ DVD_AUD_EXT_DirectorComments1 = 3,
+ DVD_AUD_EXT_DirectorComments2 = 4
+} DVD_AUDIO_LANG_EXT;
+typedef enum {
+ DVD_CMD_FLAG_None = 0x00000000,
+ DVD_CMD_FLAG_Flush = 0x00000001,
+ DVD_CMD_FLAG_SendEvents = 0x00000002,
+ DVD_CMD_FLAG_Block = 0x00000004,
+ DVD_CMD_FLAG_StartWhenRendered = 0x00000008,
+ DVD_CMD_FLAG_EndAfterRendered = 0x00000010
+} DVD_CMD_FLAGS;
+typedef enum tagDVD_DISC_SIDE {
+ DVD_SIDE_A,
+ DVD_SIDE_B
+} DVD_DISC_SIDE;
+typedef enum tagDVD_DOMAIN {
+ DVD_DOMAIN_FirstPlay,
+ DVD_DOMAIN_VideoManagerMenu,
+ DVD_DOMAIN_VideoTitleSetMenu,
+ DVD_DOMAIN_Title,
+ DVD_DOMAIN_Stop
+} DVD_DOMAIN;
+typedef enum tagDVD_FRAMERATE {
+ DVD_FPS_25 = 1,
+ DVD_FPS_30NonDrop = 3
+} DVD_FRAMERATE;
+typedef enum tagDVD_KARAOKE_ASSIGNMENT {
+ DVD_Assignment_reserved0 = 0,
+ DVD_Assignment_reserved1 = 1,
+ DVD_Assignment_LR = 2,
+ DVD_Assignment_LRM = 3,
+ DVD_Assignment_LR1 = 4,
+ DVD_Assignment_LRM1 = 5,
+ DVD_Assignment_LR12 = 6,
+ DVD_Assignment_LRM12 = 7
+} DVD_KARAOKE_ASSIGNMENT;
+typedef enum tagDVD_KARAOKE_CONTENTS {
+ DVD_Karaoke_GuideVocal1 = 0x0001,
+ DVD_Karaoke_GuideVocal2 = 0x0002,
+ DVD_Karaoke_GuideMelody1 = 0x0004,
+ DVD_Karaoke_GuideMelody2 = 0x0008,
+ DVD_Karaoke_GuideMelodyA = 0x0010,
+ DVD_Karaoke_GuideMelodyB = 0x0020,
+ DVD_Karaoke_SoundEffectA = 0x0040,
+ DVD_Karaoke_SoundEffectB = 0x0080
+} DVD_KARAOKE_CONTENTS;
+typedef enum tagDVD_KARAOKE_DOWNMIX {
+ DVD_Mix_0to0 = 0x0001,
+ DVD_Mix_1to0 = 0x0002,
+ DVD_Mix_2to0 = 0x0004,
+ DVD_Mix_3to0 = 0x0008,
+ DVD_Mix_4to0 = 0x0010,
+ DVD_Mix_Lto0 = 0x0020,
+ DVD_Mix_Rto0 = 0x0040,
+ DVD_Mix_0to1 = 0x0100,
+ DVD_Mix_1to1 = 0x0200,
+ DVD_Mix_2to1 = 0x0400,
+ DVD_Mix_3to1 = 0x0800,
+ DVD_Mix_4to1 = 0x1000,
+ DVD_Mix_Lto1 = 0x2000,
+ DVD_Mix_Rto1 = 0x4000
+} DVD_KARAOKE_DOWNMIX;
+typedef enum tagDVD_MENU_ID {
+ DVD_MENU_Title = 2,
+ DVD_MENU_Root = 3,
+ DVD_MENU_Subpicture = 4,
+ DVD_MENU_Audio = 5,
+ DVD_MENU_Angle = 6,
+ DVD_MENU_Chapter = 7
+} DVD_MENU_ID;
+typedef enum {
+ DVD_ResetOnStop = 1,
+ DVD_NotifyParentalLevelChange = 2,
+ DVD_HMSF_TimeCodeEvents = 3,
+ DVD_AudioDuringFFwdRew = 4,
+ DVD_EnableNonblockingAPIs = 5,
+ DVD_CacheSizeInMB = 6,
+ DVD_EnablePortableBookmarks = 7
+} DVD_OPTION_FLAG;
+typedef enum tagDVD_PARENTAL_LEVEL {
+ DVD_PARENTAL_LEVEL_8 = 0x8000,
+ DVD_PARENTAL_LEVEL_7 = 0x4000,
+ DVD_PARENTAL_LEVEL_6 = 0x2000,
+ DVD_PARENTAL_LEVEL_5 = 0x1000,
+ DVD_PARENTAL_LEVEL_4 = 0x0800,
+ DVD_PARENTAL_LEVEL_3 = 0x0400,
+ DVD_PARENTAL_LEVEL_2 = 0x0200,
+ DVD_PARENTAL_LEVEL_1 = 0x0100
+} DVD_PARENTAL_LEVEL;
+typedef enum tagDVD_PREFERRED_DISPLAY_MODE {
+ DISPLAY_CONTENT_DEFAULT = 0,
+ DISPLAY_16x9 = 1,
+ DISPLAY_4x3_PANSCAN_PREFERRED = 2,
+ DISPLAY_4x3_LETTERBOX_PREFERRED = 3
+} DVD_PREFERRED_DISPLAY_MODE;
+typedef enum tagDVD_RELATIVE_BUTTON {
+ DVD_Relative_Upper = 1,
+ DVD_Relative_Lower = 2,
+ DVD_Relative_Left = 3,
+ DVD_Relative_Right = 4
+} DVD_RELATIVE_BUTTON;
+typedef enum tagDVD_SUBPICTURE_LANG_EXT {
+ DVD_SP_EXT_NotSpecified = 0,
+ DVD_SP_EXT_Caption_Normal = 1,
+ DVD_SP_EXT_Caption_Big = 2,
+ DVD_SP_EXT_Caption_Children = 3,
+ DVD_SP_EXT_CC_Normal = 5,
+ DVD_SP_EXT_CC_Big = 6,
+ DVD_SP_EXT_CC_Children = 7,
+ DVD_SP_EXT_Forced = 9,
+ DVD_SP_EXT_DirectorComments_Normal = 13,
+ DVD_SP_EXT_DirectorComments_Big = 14,
+ DVD_SP_EXT_DirectorComments_Children = 15
+} DVD_SUBPICTURE_LANG_EXT;
+typedef enum tagDVD_SUBPICTURE_TYPE {
+ DVD_SPType_NotSpecified = 0,
+ DVD_SPType_Language = 1,
+ DVD_SPType_Other = 2
+} DVD_SUBPICTURE_TYPE;
+typedef enum tagDVD_SUBPICTURE_CODING {
+ DVD_SPCoding_RunLength = 0,
+ DVD_SPCoding_Extended = 1,
+ DVD_SPCoding_Other = 2
+} DVD_SUBPICTURE_CODING;
+enum DVD_TextCharSet {
+ DVD_CharSet_Unicode = 0,
+ DVD_CharSet_ISO646 = 1,
+ DVD_CharSet_JIS_Roman_Kanji = 2,
+ DVD_CharSet_ISO8859_1 = 3,
+ DVD_CharSet_ShiftJIS_Kanji_Roman_Katakana = 4
+};
+enum DVD_TextStringType {
+ DVD_Struct_Volume = 0x01,
+ DVD_Struct_Title = 0x02,
+ DVD_Struct_ParentalID = 0x03,
+ DVD_Struct_PartOfTitle = 0x04,
+ DVD_Struct_Cell = 0x05,
+ DVD_Stream_Audio = 0x10,
+ DVD_Stream_Subpicture = 0x11,
+ DVD_Stream_Angle = 0x12,
+ DVD_Channel_Audio = 0x20,
+ DVD_General_Name = 0x30,
+ DVD_General_Comments = 0x31,
+ DVD_Title_Series = 0x38,
+ DVD_Title_Movie = 0x39,
+ DVD_Title_Video = 0x3a,
+ DVD_Title_Album = 0x3b,
+ DVD_Title_Song = 0x3c,
+ DVD_Title_Other = 0x3f,
+ DVD_Title_Sub_Series = 0x40,
+ DVD_Title_Sub_Movie = 0x41,
+ DVD_Title_Sub_Video = 0x42,
+ DVD_Title_Sub_Album = 0x43,
+ DVD_Title_Sub_Song = 0x44,
+ DVD_Title_Sub_Other = 0x47,
+ DVD_Title_Orig_Series = 0x48,
+ DVD_Title_Orig_Movie = 0x49,
+ DVD_Title_Orig_Video = 0x4a,
+ DVD_Title_Orig_Album = 0x4b,
+ DVD_Title_Orig_Song = 0x4c,
+ DVD_Title_Orig_Other = 0x4f,
+ DVD_Other_Scene = 0x50,
+ DVD_Other_Cut = 0x51,
+ DVD_Other_Take = 0x52
+};
+typedef enum tagDVD_TIMECODE_FLAGS {
+ DVD_TC_FLAG_25fps = 0x00000001,
+ DVD_TC_FLAG_30fps = 0x00000002,
+ DVD_TC_FLAG_DropFrame = 0x00000004,
+ DVD_TC_FLAG_Interpolated = 0x00000008
+} DVD_TIMECODE_FLAGS;
+typedef enum tagDVD_TITLE_APPMODE {
+ DVD_AppMode_Not_Specified = 0,
+ DVD_AppMode_Karaoke = 1,
+ DVD_AppMode_Other = 3
+} DVD_TITLE_APPMODE;
+typedef enum tagDVD_VIDEO_COMPRESSION {
+ DVD_VideoCompression_Other = 0,
+ DVD_VideoCompression_MPEG1 = 1,
+ DVD_VideoCompression_MPEG2 = 2
+} DVD_VIDEO_COMPRESSION;
+typedef enum _DVDECODERRESOLUTION {
+ DVDECODERRESOLUTION_720x480 = 1000,
+ DVDECODERRESOLUTION_360x240 = 1001,
+ DVDECODERRESOLUTION_180x120 = 1002,
+ DVDECODERRESOLUTION_88x60 = 1003
+} DVDECODERRESOLUTION;
+typedef enum _DVRESOLUTION {
+ DVRESOLUTION_FULL = 1000,
+ DVRESOLUTION_HALF = 1001,
+ DVRESOLUTION_QUARTER = 1002,
+ DVRESOLUTION_DC = 1003
+} DVRESOLUTION;
+typedef enum _DVENCODERFORMAT {
+ DVENCODERFORMAT_DVSD = 2007,
+ DVENCODERFORMAT_DVHD = 2008,
+ DVENCODERFORMAT_DVSL = 2009
+} DVENCODERFORMAT;
+typedef enum _DVENCODERRESOLUTION {
+ DVENCODERRESOLUTION_720x480 = 2012,
+ DVENCODERRESOLUTION_360x240 = 2013,
+ DVENCODERRESOLUTION_180x120 = 2014,
+ DVENCODERRESOLUTION_88x60 = 2015
+} DVENCODERRESOLUTION;
+typedef enum _DVENCODERVIDEOFORMAT {
+ DVENCODERVIDEOFORMAT_NTSC = 2000,
+ DVENCODERVIDEOFORMAT_PAL = 2001
+} DVENCODERVIDEOFORMAT;
+typedef enum _FilterState {
+ State_Stopped,
+ State_Paused,
+ State_Running
+} FILTER_STATE;
+typedef enum {
+ INTERLEAVE_NONE,
+ INTERLEAVE_CAPTURE,
+ INTERLEAVE_FULL,
+ INTERLEAVE_NONE_BUFFERED
+} InterleavingMode;
+typedef enum {
+ PhysConn_Video_Tuner = 1,
+ PhysConn_Video_Composite,
+ PhysConn_Video_SVideo,
+ PhysConn_Video_RGB,
+ PhysConn_Video_YRYBY,
+ PhysConn_Video_SerialDigital,
+ PhysConn_Video_ParallelDigital,
+ PhysConn_Video_SCSI,
+ PhysConn_Video_AUX,
+ PhysConn_Video_1394,
+ PhysConn_Video_USB,
+ PhysConn_Video_VideoDecoder,
+ PhysConn_Video_VideoEncoder,
+ PhysConn_Video_SCART,
+ PhysConn_Video_Black,
+ PhysConn_Audio_Tuner = 4096,
+ PhysConn_Audio_Line,
+ PhysConn_Audio_Mic,
+ PhysConn_Audio_AESDigital,
+ PhysConn_Audio_SPDIFDigital,
+ PhysConn_Audio_SCSI,
+ PhysConn_Audio_AUX,
+ PhysConn_Audio_1394,
+ PhysConn_Audio_USB,
+ PhysConn_Audio_AudioDecoder
+} PhysicalConnectorType;
+typedef enum _PinDirection {
+ PINDIR_INPUT,
+ PINDIR_OUTPUT
+} PIN_DIRECTION;
+typedef enum {
+ Famine,
+ Flood
+} QualityMessageType;
+enum {
+ REG_PINFLAG_B_ZERO = 0x1,
+ REG_PINFLAG_B_RENDERER = 0x2,
+ REG_PINFLAG_B_MANY = 0x4,
+ REG_PINFLAG_B_OUTPUT = 0x8
+} REG_PINFLAG;
+typedef enum _REM_FILTER_FLAGS {
+ REMFILTERF_LEAVECONNECTED = 0x00000001
+} REM_FILTER_FLAGS;
+typedef enum {
+ TunerInputCable,
+ TunerInputAntenna
+} TunerInputType;
+typedef enum tagTVAudioMode {
+ AMTVAUDIO_MODE_MONO = 0x0001,
+ AMTVAUDIO_MODE_STEREO = 0x0002,
+ AMTVAUDIO_MODE_LANG_A = 0x0010,
+ AMTVAUDIO_MODE_LANG_B = 0x0020,
+ AMTVAUDIO_MODE_LANG_C = 0x0040,
+ AMTVAUDIO_PRESET_STEREO = 0x0200,
+ AMTVAUDIO_PRESET_LANG_A = 0x1000,
+ AMTVAUDIO_PRESET_LANG_B = 0x2000,
+ AMTVAUDIO_PRESET_LANG_C = 0x4000
+} TVAudioMode;
+typedef enum {
+ UOP_FLAG_Play_Title_Or_AtTime = 0x00000001,
+ UOP_FLAG_Play_Chapter = 0x00000002,
+ UOP_FLAG_Play_Title = 0x00000004,
+ UOP_FLAG_Stop = 0x00000008,
+ UOP_FLAG_ReturnFromSubMenu = 0x00000010,
+ UOP_FLAG_Play_Chapter_Or_AtTime = 0x00000020,
+ UOP_FLAG_PlayPrev_Or_Replay_Chapter = 0x00000040,
+ UOP_FLAG_PlayNext_Chapter = 0x00000080,
+ UOP_FLAG_Play_Forwards = 0x00000100,
+ UOP_FLAG_Play_Backwards = 0x00000200,
+ UOP_FLAG_ShowMenu_Title = 0x00000400,
+ UOP_FLAG_ShowMenu_Root = 0x00000800,
+ UOP_FLAG_ShowMenu_SubPic = 0x00001000,
+ UOP_FLAG_ShowMenu_Audio = 0x00002000,
+ UOP_FLAG_ShowMenu_Angle = 0x00004000,
+ UOP_FLAG_ShowMenu_Chapter = 0x00008000,
+ UOP_FLAG_Resume = 0x00010000,
+ UOP_FLAG_Select_Or_Activate_Button = 0x00020000,
+ UOP_FLAG_Still_Off = 0x00040000,
+ UOP_FLAG_Pause_On = 0x00080000,
+ UOP_FLAG_Select_Audio_Stream = 0x00100000,
+ UOP_FLAG_Select_SubPic_Stream = 0x00200000,
+ UOP_FLAG_Select_Angle = 0x00400000,
+ UOP_FLAG_Select_Karaoke_Audio_Presentation_Mode = 0x00800000,
+ UOP_FLAG_Select_Video_Mode_Preference = 0x01000000
+} VALID_UOP_FLAG;
+typedef enum {
+ VfwCaptureDialog_Source = 0x01,
+ VfwCaptureDialog_Format = 0x02,
+ VfwCaptureDialog_Display = 0x04
+} VfwCaptureDialogs;
+typedef enum {
+ VfwCompressDialog_Config = 0x01,
+ VfwCompressDialog_About = 0x02,
+ VfwCompressDialog_QueryConfig = 0x04,
+ VfwCompressDialog_QueryAbout = 0x08
+} VfwCompressDialogs;
+typedef enum tagVideoControlFlags {
+ VideoControlFlag_FlipHorizontal = 0x0001,
+ VideoControlFlag_FlipVertical = 0x0002,
+ VideoControlFlag_ExternalTriggerEnable = 0x0004,
+ VideoControlFlag_Trigger = 0x0008
+} VideoControlFlags;
+typedef enum {
+ ConstantBitRate = 0,
+ VariableBitRateAverage,
+ VariableBitRatePeak
+} VIDEOENCODER_BITRATE_MODE;
+typedef enum tagVideoProcAmpFlags {
+ VideoProcAmp_Flags_Auto = 0x0001,
+ VideoProcAmp_Flags_Manual = 0x0002
+} VideoProcAmpFlags;
+typedef enum tagVideoProcAmpProperty {
+ VideoProcAmp_Brightness,
+ VideoProcAmp_Contrast,
+ VideoProcAmp_Hue,
+ VideoProcAmp_Saturation,
+ VideoProcAmp_Sharpness,
+ VideoProcAmp_Gamma,
+ VideoProcAmp_ColorEnable,
+ VideoProcAmp_WhiteBalance,
+ VideoProcAmp_BacklightCompensation,
+ VideoProcAmp_Gain
+} VideoProcAmpProperty;
+enum VMR_ASPECT_RATIO_MODE {
+ VMR_ARMODE_NONE,
+ VMR_ARMODE_LETTER_BOX
+};
+typedef enum {
+ DeinterlacePref_NextBest = 0x01,
+ DeinterlacePref_BOB = 0x02,
+ DeinterlacePref_Weave = 0x04,
+ DeinterlacePref_Mask = 0x07
+} VMRDeinterlacePrefs;
+typedef enum {
+ DeinterlaceTech_Unknown = 0x0000,
+ DeinterlaceTech_BOBLineReplicate = 0x0001,
+ DeinterlaceTech_BOBVerticalStretch = 0x0002,
+ DeinterlaceTech_MedianFiltering = 0x0004,
+ DeinterlaceTech_EdgeFiltering = 0x0010,
+ DeinterlaceTech_FieldAdaptive = 0x0020,
+ DeinterlaceTech_PixelAdaptive = 0x0040,
+ DeinterlaceTech_MotionVectorSteered = 0x0080
+} VMRDeinterlaceTech;
+typedef enum {
+ MixerPref_NoDecimation = 0x00000001,
+ MixerPref_DecimateOutput = 0x00000002,
+ MixerPref_ARAdjustXorY = 0x00000004,
+ MixerPref_DecimationReserved = 0x00000008,
+ MixerPref_DecimateMask = 0x0000000F,
+ MixerPref_BiLinearFiltering = 0x00000010,
+ MixerPref_PointFiltering = 0x00000020,
+ MixerPref_FilteringMask = 0x000000F0,
+ MixerPref_RenderTargetRGB = 0x00000100,
+ MixerPref_RenderTargetYUV = 0x00001000,
+ MixerPref_RenderTargetYUV420 = 0x00000200,
+ MixerPref_RenderTargetYUV422 = 0x00000400,
+ MixerPref_RenderTargetYUV444 = 0x00000800,
+ MixerPref_RenderTargetReserved = 0x0000E000,
+ MixerPref_RenderTargetMask = 0x0000FF00,
+ MixerPref_DynamicSwitchToBOB = 0x00010000,
+ MixerPref_DynamicDecimateBy2 = 0x00020000,
+ MixerPref_DynamicReserved = 0x000C0000,
+ MixerPref_DynamicMask = 0x000F0000
+} VMRMixerPrefs;
+enum VMRMode {
+ VMRMode_Windowed = 0x00000001,
+ VMRMode_Windowless = 0x00000002,
+ VMRMode_Renderless = 0x00000004,
+ VMRMode_Mask = 0x00000007
+};
+typedef enum {
+ VMRSample_SyncPoint = 0x00000001,
+ VMRSample_Preroll = 0x00000002,
+ VMRSample_Discontinuity = 0x00000004,
+ VMRSample_TimeValid = 0x00000008
+} VMRPresentationFlags;
+typedef enum {
+ RenderPrefs_ForceOffscreen = 0x00000001,
+ RenderPrefs_ForceOverlays = 0x00000002,
+ RenderPrefs_AllowOverlays = 0x00000000,
+ RenderPrefs_AllowOffscreen = 0x00000000,
+ RenderPrefs_DoNotRenderColorKeyAndBorder = 0x00000008,
+ RenderPrefs_RestrictToInitialMonitor = 0x00000010,
+ RenderPrefs_PreferAGPMemWhenMixing = 0x00000020,
+ RenderPrefs_Mask = 0x0000003f
+} VMRRenderPrefs;
+typedef enum {
+ AMAP_PIXELFORMAT_VALID = 0x01,
+ AMAP_3D_TARGET = 0x02,
+ AMAP_ALLOW_SYSMEM = 0x04,
+ AMAP_FORCE_SYSMEM = 0x08,
+ AMAP_DIRECTED_FLIP = 0x10,
+ AMAP_DXVA_TARGET = 0x20
+} VMRSurfaceAllocationFlags;
+/*--- DirectShow Reference - DirectShow Structures */
+typedef struct _AllocatorProperties {
+ long cBuffers;
+ long cbBuffer;
+ long cbAlign;
+ long cbPrefix;
+} ALLOCATOR_PROPERTIES;
+typedef struct {
+ HRESULT hrVPEStatus;
+ BOOL bDvdVolInvalid;
+ BOOL bDvdVolUnknown;
+ BOOL bNoLine21In;
+ BOOL bNoLine21Out;
+ int iNumStreams;
+ int iNumStreamsFailed;
+ DWORD dwFailedStreamsFlag;
+} AM_DVD_RENDERSTATUS;
+typedef struct _AMCOPPCommand {
+ GUID macKDI;
+ GUID guidCommandID;
+ DWORD dwSequence;
+ DWORD cbSizeData;
+ BYTE CommandData[4056];
+} AMCOPPCommand,*LPAMCOPPCommand;
+typedef struct _AMCOPPSignature {
+ BYTE Signature[256];
+} AMCOPPSignature;
+typedef struct _AMCOPPStatusInput {
+ GUID rApp;
+ GUID guidStatusRequestID;
+ DWORD dwSequence;
+ DWORD cbSizeData;
+ BYTE StatusData[4056];
+} AMCOPPStatusInput,*LPAMCOPPStatusInput;
+typedef struct _AMCOPPStatusOutput {
+ GUID macKDI;
+ DWORD cbSizeData;
+ BYTE COPPStatus[4076];
+} AMCOPPStatusOutput,*LPAMCOPPStatusOutput;
+typedef struct _AMMediaType {
+ GUID majortype;
+ GUID subtype;
+ BOOL bFixedSizeSamples;
+ BOOL bTemporalCompression;
+ ULONG lSampleSize;
+ GUID formattype;
+ IUnknown *pUnk;
+ ULONG cbFormat;
+ BYTE *pbFormat;
+} AM_MEDIA_TYPE;
+typedef struct tagAM_SAMPLE2_PROPERTIES {
+ DWORD cbData;
+ DWORD dwTypeSpecificFlags;
+ DWORD dwSampleFlags;
+ LONG lActual;
+ REFERENCE_TIME tStart;
+ REFERENCE_TIME tStop;
+ DWORD dwStreamId;
+ AM_MEDIA_TYPE *pMediaType;
+ BYTE *pbBuffer;
+ LONG cbBuffer;
+} AM_SAMPLE2_PROPERTIES;
+typedef struct {
+ REFERENCE_TIME tStart;
+ REFERENCE_TIME tStop;
+ DWORD dwStartCookie;
+ DWORD dwStopCookie;
+ DWORD dwFlags;
+} AM_STREAM_INFO;
+typedef struct {
+ const CLSID *clsMajorType;
+ const CLSID *clsMinorType;
+} REGPINTYPES;
+typedef REGPINTYPES AMOVIESETUP_MEDIATYPE,*PAMOVIESETUP_MEDIATYPE,*LPAMOVIESETUP_MEDIATYPE;
+typedef struct {
+ LPWSTR strName;
+ BOOL bRendered;
+ BOOL bOutput;
+ BOOL bZero;
+ BOOL bMany;
+ const CLSID *clsConnectsToFilter;
+ const WCHAR *strConnectsToPin;
+ UINT nMediaTypes;
+ const REGPINTYPES *lpMediaType;
+} REGFILTERPINS;
+typedef REGFILTERPINS AMOVIESETUP_PIN,*PAMOVIESETUP_PIN,*LPAMOVIESETUP_PIN;
+typedef struct _AMOVIESETUP_FILTER {
+ const CLSID *clsID;
+ const WCHAR *strName;
+ DWORD dwMerit;
+ UINT nPins;
+ const AMOVIESETUP_PIN *lpPin;
+} AMOVIESETUP_FILTER,*PAMOVIESETUP_FILTER,*LPAMOVIESETUP_FILTER;
+typedef struct _AUDIO_STREAM_CONFIG_CAPS {
+ GUID guid;
+ ULONG MinimumChannels;
+ ULONG MaximumChannels;
+ ULONG ChannelsGranularity;
+ ULONG MinimumBitsPerSample;
+ ULONG MaximumBitsPerSample;
+ ULONG BitsPerSampleGranularity;
+ ULONG MinimumSampleFrequency;
+ ULONG MaximumSampleFrequency;
+ ULONG SampleFrequencyGranularity;
+} AUDIO_STREAM_CONFIG_CAPS;
+struct CodecAPIEventData {
+ GUID guid;
+ DWORD dataLength;
+ DWORD reserved[3];
+};
+typedef struct tagCOLORKEY {
+ DWORD KeyType;
+ DWORD PaletteIndex;
+ COLORREF LowColorValue;
+ COLORREF HighColorValue;
+} COLORKEY;
+#define CK_NOCOLORKEY 0x00000000
+#define CK_INDEX 0x00000001
+#define CK_RGB 0x00000002
+typedef struct {
+ DWORD dw1;
+ DWORD dw2;
+} DDCOLORKEY;
+typedef struct tagDVD_AudioAttributes {
+ DVD_AUDIO_APPMODE AppMode;
+ DVD_AUDIO_FORMAT AudioFormat;
+ LCID Language;
+ DVD_AUDIO_LANG_EXT LanguageExtension;
+ BOOL fHasMultichannelInfo;
+ DWORD dwFrequency;
+ BYTE bQuantization;
+ BYTE bNumberOfChannels;
+ DWORD dwReserved[2];
+} DVD_AudioAttributes;
+typedef struct tagDVD_DECODER_CAPS {
+ DWORD dwSize;
+ DWORD dwAudioCaps;
+ double dFwdMaxRateVideo;
+ double dFwdMaxRateAudio;
+ double dFwdMaxRateSP;
+ double dBwdMaxRateVideo;
+ double dBwdMaxRateAudio;
+ double dBwdMaxRateSP;
+ DWORD dwRes1;
+ DWORD dwRes2;
+ DWORD dwRes3;
+ DWORD dwRes4;
+} DVD_DECODER_CAPS;
+#define DVD_AUDIO_CAPS_AC3 0x00000001
+#define DVD_AUDIO_CAPS_MPEG2 0x00000002
+#define DVD_AUDIO_CAPS_LPCM 0x00000004
+#define DVD_AUDIO_CAPS_DTS 0x00000008
+#define DVD_AUDIO_CAPS_SDDS 0x00000010
+typedef struct tagDVD_HMSF_TIMECODE {
+ BYTE bHours;
+ BYTE bMinutes;
+ BYTE bSeconds;
+ BYTE bFrames;
+} DVD_HMSF_TIMECODE;
+typedef struct tagDVD_KaraokeAttributes {
+ BYTE bVersion;
+ BOOL fMasterOfCeremoniesInGuideVocal1;
+ BOOL fDuet;
+ DVD_KARAOKE_ASSIGNMENT ChannelAssignment;
+ WORD wChannelContents[8];
+} DVD_KaraokeAttributes;
+typedef struct tagDVD_MUA_Coeff {
+ double log2_alpha;
+ double log2_beta;
+} DVD_MUA_Coeff;
+typedef struct tagDVD_MUA_MixingInfo {
+ BOOL fMixTo0;
+ BOOL fMixTo1;
+ BOOL fMix0InPhase;
+ BOOL fMix1InPhase;
+ DWORD dwSpeakerPosition;
+} DVD_MUA_MixingInfo;
+#define KSAUDIO_SPEAKER_LEFT 0x00000001
+#define KSAUDIO_SPEAKER_RIGHT 0x00000002
+#define KSAUDIO_SPEAKER_CENTER 0x00000004
+#define KSAUDIO_SPEAKER_SURROUND_LEFT 0x00000008
+#define KSAUDIO_SPEAKER_SURROUND_RIGHT 0x00000010
+#define KSAUDIO_SPEAKER_SUBWOOFER 0x00000020
+#define KSAUDIO_SPEAKER_LEFT_OF_CENTER 0x00000040
+#define KSAUDIO_SPEAKER_RIGHT_OF_CENTER 0x00000080
+#define KSAUDIO_SPEAKER_SURROUND_MONO 0x00000100
+#define KSAUDIO_SPEAKER_SIDE_LEFT 0x00000200
+#define KSAUDIO_SPEAKER_SIDE_RIGHT 0x00000400
+#define KSAUDIO_SPEAKER_TOP 0x00000800
+typedef struct tagDVD_MultichannelAudioAttributes {
+ DVD_MUA_MixingInfo Info[8];
+ DVD_MUA_Coeff Coeff[8];
+} DVD_MultichannelAudioAttributes;
+typedef struct tagDVD_PLAYBACK_LOCATION {
+ ULONG TitleNum;
+ ULONG ChapterNum;
+ ULONG TimeCode;
+} DVD_PLAYBACK_LOCATION;
+typedef struct tagDVD_PLAYBACK_LOCATION2 {
+ ULONG TitleNum;
+ ULONG ChapterNum;
+ DVD_HMSF_TIMECODE TimeCode;
+ ULONG TimeCodeFlags;
+} DVD_PLAYBACK_LOCATION2;
+typedef struct tagDVD_SubpictureAttributes {
+ DVD_SUBPICTURE_TYPE Type;
+ DVD_SUBPICTURE_CODING CodingMode;
+ LCID Language;
+ DVD_SUBPICTURE_LANG_EXT LanguageExtension;
+} DVD_SubpictureAttributes;
+typedef struct tagDVD_TIMECODE {
+ ULONG Hours1:4;
+ ULONG Hours10:4;
+ ULONG Minutes1:4;
+ ULONG Minutes10:4;
+ ULONG Seconds1:4;
+ ULONG Seconds10:4;
+ ULONG Frames1:4;
+ ULONG Frames10:2;
+ ULONG FrameRateCode:2;
+} DVD_TIMECODE;
+typedef struct tagDVD_VideoAttributes {
+ BOOL fPanscanPermitted;
+ BOOL fLetterboxPermitted;
+ ULONG ulAspectX;
+ ULONG ulAspectY;
+ ULONG ulFrameRate;
+ ULONG ulFrameHeight;
+ DVD_VIDEO_COMPRESSION Compression;
+ BOOL fLine21Field1InGOP;
+ BOOL fLine21Field2InGOP;
+ ULONG ulSourceResolutionX;
+ ULONG ulSourceResolutionY;
+ BOOL fIsSourceLetterboxed;
+ BOOL fIsFilmMode;
+} DVD_VideoAttributes;
+struct tagDVD_MenuAttributes {
+ BOOL fCompatibleRegion[8];
+ DVD_VideoAttributes VideoAttributes;
+ BOOL fAudioPresent;
+ DVD_AudioAttributes AudioAttributes;
+ BOOL fSubpicturePresent;
+ DVD_SubpictureAttributes SubpictureAttributes;
+} DVD_MenuAttributes;
+typedef struct tagDVD_TitleMainAttributes {
+ DVD_TITLE_APPMODE AppMode;
+ DVD_VideoAttributes VideoAttributes;
+ ULONG ulNumberOfAudioStreams;
+ DVD_AudioAttributes AudioAttributes[8];
+ DVD_MultichannelAudioAttributes MultichannelAudioAttributes[8];
+ ULONG ulNumberOfSubpictureStreams;
+ DVD_SubpictureAttributes SubpictureAttributes[32];
+} DVD_TitleAttributes;
+typedef struct tag_DVINFO {
+ DWORD dwDVAAuxSrc;
+ DWORD dwDVAAuxCtl;
+ DWORD dwDVAAuxSrc1;
+ DWORD dwDVAAuxCtl1;
+ DWORD dwDVVAuxSrc;
+ DWORD dwDVVAuxCtl;
+ DWORD dwDVReserved[2];
+} DVINFO,*PDVINFO;
+/***************
+#define MAX_FILTER_NAME 128
+typedef struct _FilterInfo {
+ WCHAR achName[MAX_FILTER_NAME];
+ IFilterGraph *pGraph;
+} FILTER_INFO;
+***************/
+typedef struct _NORMALIZEDRECT {
+ float left;
+ float top;
+ float right;
+ float bottom;
+} NORMALIZEDRECT,*PNORMALIZEDRECT;
+#define MAX_PIN_NAME 128
+typedef struct _PinInfo {
+ IBaseFilter *pFilter;
+ PIN_DIRECTION dir;
+ WCHAR achName[MAX_PIN_NAME];
+} PIN_INFO;
+typedef struct{
+ QualityMessageType Type;
+ long Proportion;
+ REFERENCE_TIME Late;
+ REFERENCE_TIME TimeStamp;
+} Quality;
+typedef struct {
+ CLSID clsMedium;
+ DWORD dw1;
+ DWORD dw2;
+} REGPINMEDIUM;
+typedef struct {
+ DWORD dwFlags;
+ UINT cInstances;
+ UINT nMediaTypes;
+ const REGPINTYPES *lpMediaType;
+ UINT nMediums;
+ const REGPINMEDIUM *lpMedium;
+ const CLSID *clsPinCategory;
+} REGFILTERPINS2;
+typedef struct {
+ DWORD dwVersion;
+ DWORD dwMerit;
+ union {
+ struct {
+ ULONG cPins;
+ const REGFILTERPINS *rgPins;
+ };
+ struct {
+ ULONG cPins2;
+ const REGFILTERPINS2 *rgPins2;
+ };
+ };
+} REGFILTER2;
+typedef struct {
+ ULONG stream_id;
+ DWORD dwMediaSampleContent;
+ ULONG ulSubstreamFilterValue;
+ int iDataOffset;
+} STREAM_ID_MAP;
+#define MPEG2_PROGRAM_STREAM_MAP 0x00000000
+#define MPEG2_PROGRAM_ELEMENTARY_STREAM 0x00000001
+#define MPEG2_PROGRAM_DIRECTORY_PES_PACKET 0x00000002
+#define MPEG2_PROGRAM_PACK_HEADER 0x00000003
+#define MPEG2_PROGRAM_PES_STREAM 0x00000004
+#define MPEG2_PROGRAM_SYSTEM_HEADER 0x00000005
+#define SUBSTREAM_FILTER_VAL_NONE 0x10000000
+typedef struct tagTIMECODE {
+ WORD wFrameRate;
+ WORD wFrameFract;
+ DWORD dwFrames;
+} TIMECODE;
+#define ED_FORMAT_SMPTE_30 0x00001196
+#define ED_FORMAT_SMPTE_30DROP 0x00001197
+#define ED_FORMAT_SMPTE_25 0x00001198
+#define ED_FORMAT_SMPTE_24 0x00001199
+typedef struct tagTIMECODE_SAMPLE {
+ LONGLONG qwTick;
+ TIMECODE timecode;
+ DWORD dwUser;
+ DWORD dwFlags;
+} TIMECODE_SAMPLE;
+/*#define AM_TIMECODE_FLAG_FCM */
+/*#define AM_TIMECODE_FLAG_CF */
+/*#define AM_TIMECODE_FLAG_FIELD */
+/*#define AM_TIMECODE_FLAG_DF */
+/*#define AM_TIMECODE_COLORFRAME */
+/*#define AM_TIMECODE_COLORSEQUENCE */
+/*#define AM_TIMECODE_FILMSEQUENCE_TYPE */
+typedef struct _VIDEO_STREAM_CONFIG_CAPS {
+ GUID guid;
+ ULONG VideoStandard;
+ SIZE InputSize;
+ SIZE MinCroppingSize;
+ SIZE MaxCroppingSize;
+ int CropGranularityX;
+ int CropGranularityY;
+ int CropAlignX;
+ int CropAlignY;
+ SIZE MinOutputSize;
+ SIZE MaxOutputSize;
+ int OutputGranularityX;
+ int OutputGranularityY;
+ int StretchTapsX;
+ int StretchTapsY;
+ int ShrinkTapsX;
+ int ShrinkTapsY;
+ LONGLONG MinFrameInterval;
+ LONGLONG MaxFrameInterval;
+ LONG MinBitsPerSecond;
+ LONG MaxBitsPerSecond;
+} VIDEO_STREAM_CONFIG_CAPS;
+typedef struct tagVMRALLOCATIONINFO {
+ DWORD dwFlags;
+ LPBITMAPINFOHEADER lpHdr;
+ LPDDPIXELFORMAT lpPixFmt;
+ SIZE szAspectRatio;
+ DWORD dwMinBuffers;
+ DWORD dwMaxBuffers;
+ DWORD dwInterlaceFlags;
+ SIZE szNativeSize;
+} VMRALLOCATIONINFO;
+/**********
+typedef struct _VMRALPHABITMAP {
+ DWORD dwFlags;
+ HDC hdc;
+ LPDIRECTDRAWSURFACE7 pDDS;
+ RECT rSrc;
+ NORMALIZEDRECT rDest;
+ FLOAT fAlpha;
+ COLORREF clrSrcKey;
+} VMRALPHABITMAP,*PVMRALPHABITMAP;
+**********/
+#define VMRBITMAP_DISABLE 0x00000001
+#define VMRBITMAP_HDC 0x00000002
+#define VMRBITMAP_ENTIREDDS 0x00000004
+#define VMRBITMAP_SRCCOLORKEY 0x00000008
+#define VMRBITMAP_SRCRECT 0x00000010
+typedef struct _VMRDeinterlaceCaps {
+ DWORD dwSize;
+ DWORD dwNumPreviousOutputFrames;
+ DWORD dwNumForwardRefSamples;
+ DWORD dwNumBackwardRefSamples;
+ VMRDeinterlaceTech DeinterlaceTechnology;
+} VMRDeinterlaceCaps;
+typedef struct _VMRFrequency {
+ DWORD dwNumerator;
+ DWORD dwDenominator;
+} VMRFrequency;
+typedef struct tagVMRGUID {
+ GUID *pGUID;
+ GUID GUID;
+} VMRGUID;
+typedef struct tagVMRMONITORINFO {
+ VMRGUID guid;
+ RECT rcMonitor;
+ HMONITOR hMon;
+ DWORD dwFlags;
+ wchar_t szDevice[32];
+ wchar_t szDescription[256];
+} VMRMONITORINFO;
+/**********
+typedef struct tagVMRPRESENTATIONINFO {
+ DWORD dwFlags;
+ LPDIRECTDRAWSURFACE7 lpSurf;
+ REFERENCE_TIME rtStart;
+ REFERENCE_TIME rtEnd;
+ SIZE szAspectRatio;
+ RECT rcSrc;
+ RECT rcDst;
+ DWORD dwTypeSpecificFlags;
+ DWORD dwInterlaceFlags;
+} VMRPRESENTATIONINFO;
+**********/
+typedef struct _VMRVideoDesc {
+ DWORD dwSize;
+ DWORD dwSampleWidth;
+ DWORD dwSampleHeight;
+ BOOL SingleFieldPerSample;
+ DWORD dwFourCC;
+ VMRFrequency InputSampleFreq;
+ VMRFrequency OutputFrameFreq;
+} VMRVideoDesc;
+/**********
+typedef struct _VMRVIDEOSTREAMINFO {
+ LPDIRECTDRAWSURFACE7 pddsVideoSurface;
+ DWORD dwWidth;
+ DWORD dwHeight;
+ DWORD dwStrmID;
+ FLOAT fAlpha;
+ DDCOLORKEY ddClrKey;
+ NORMALIZEDRECT rNormal;
+} VMRVIDEOSTREAMINFO;
+**********/
+/*--- DirectShow Reference - Interfaces */
+#define INTERFACE IAMAnalogVideoDecoder
+DECLARE_INTERFACE_(IAMAnalogVideoDecoder, IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD_(HRESULT,get_AvailableTVFormats)(THIS_ long*) PURE;
+ STDMETHOD_(HRESULT,get_HorizontalLocked)(THIS_ long*) PURE;
+ STDMETHOD_(HRESULT,get_NumberOfLines)(THIS_ long*) PURE;
+ STDMETHOD_(HRESULT,get_OutputEnable)(THIS_ long*) PURE;
+ STDMETHOD_(HRESULT,get_TVFormat)(THIS_ long*) PURE;
+ STDMETHOD_(HRESULT,get_VCRHorizontalLocking)(THIS_ long*) PURE;
+ STDMETHOD_(HRESULT,put_OutputEnable)(THIS_ long) PURE;
+ STDMETHOD_(HRESULT,put_TVFormat)(THIS_ long) PURE;
+ STDMETHOD_(HRESULT,put_VCRHorizontalLocking)(THIS_ long) PURE;
+};
+#undef INTERFACE
+#define INTERFACE IAMAudioInputMixer
+DECLARE_INTERFACE_(IAMAudioInputMixer, IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD_(HRESULT,get_Bass)(THIS_ double*) PURE;
+ STDMETHOD_(HRESULT,get_BassRange)(THIS_ double*) PURE;
+ STDMETHOD_(HRESULT,get_Enable)(THIS_ BOOL*) PURE;
+ STDMETHOD_(HRESULT,get_Loudness)(THIS_ BOOL*) PURE;
+ STDMETHOD_(HRESULT,get_MixLevel)(THIS_ double*) PURE;
+ STDMETHOD_(HRESULT,get_Mono)(THIS_ BOOL*) PURE;
+ STDMETHOD_(HRESULT,get_Pan)(THIS_ double*) PURE;
+ STDMETHOD_(HRESULT,get_Treble)(THIS_ double*) PURE;
+ STDMETHOD_(HRESULT,get_TrebleRange)(THIS_ double*) PURE;
+ STDMETHOD_(HRESULT,put_Bass)(THIS_ double) PURE;
+ STDMETHOD_(HRESULT,put_Enable)(THIS_ BOOL) PURE;
+ STDMETHOD_(HRESULT,put_Loudness)(THIS_ BOOL) PURE;
+ STDMETHOD_(HRESULT,put_MixLevel)(THIS_ double) PURE;
+ STDMETHOD_(HRESULT,put_Mono)(THIS_ BOOL) PURE;
+ STDMETHOD_(HRESULT,put_Pan)(THIS_ double) PURE;
+ STDMETHOD_(HRESULT,put_Treble)(THIS_ double) PURE;
+};
+#undef INTERFACE
+#define INTERFACE IAMAudioRendererStats
+DECLARE_INTERFACE_(IAMAudioRendererStats, IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD_(HRESULT,GetStatParam)(THIS_ DWORD,DWORD*,DWORD*) PURE;
+};
+#undef INTERFACE
+#define INTERFACE IAMBufferNegotiation
+DECLARE_INTERFACE_(IAMBufferNegotiation, IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD_(HRESULT,GetAllocatorProperties)(THIS_ ALLOCATOR_PROPERTIES*) PURE;
+ STDMETHOD_(HRESULT,SuggestAllocatorProperties)(THIS_ const ALLOCATOR_PROPERTIES*) PURE;
+};
+#undef INTERFACE
+#define INTERFACE IAMCameraControl
+DECLARE_INTERFACE_(IAMCameraControl, IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD_(HRESULT,Get)(THIS_ long,long*,long*) PURE;
+ STDMETHOD_(HRESULT,GetRange)(THIS_ long,long*,long*,long*,long*,long*) PURE;
+ STDMETHOD_(HRESULT,Set)(THIS_ long,long,long) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE IAMCertifiedOutputProtection
+DECLARE_INTERFACE_(IAMCertifiedOutputProtection, IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD_(HRESULT,KeyExchange)(THIS_ GUID*,BYTE**,DWORD*) PURE;
+ STDMETHOD_(HRESULT,ProtectionCommand)(THIS_ const AMCOPPCommand*) PURE;
+ STDMETHOD_(HRESULT,ProtectionStatus)(THIS_ const AMCOPPStatusInput*,AMCOPPStatusOutput*) PURE;
+ STDMETHOD_(HRESULT,SessionSequenceStart)(THIS_ const AMCOPPSignature*) PURE;
+};
+#undef INTERFACE
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/subauth.h b/tcc/include/winapi/subauth.h
new file mode 100644
index 0000000..2c87f28
--- /dev/null
+++ b/tcc/include/winapi/subauth.h
@@ -0,0 +1,209 @@
+#ifndef _SUBAUTH_H
+#define _SUBAUTH_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#ifndef NT_SUCCESS
+#define NT_SUCCESS(x) ((x)>=0)
+#define STATUS_SUCCESS 0
+#endif
+#define CYPHER_BLOCK_LENGTH 8
+#define USER_SESSION_KEY_LENGTH (CYPHER_BLOCK_LENGTH*2)
+#define CLEAR_BLOCK_LENGTH 8
+#define MSV1_0_PASSTHRU 1
+#define MSV1_0_GUEST_LOGON 2
+#define MSV1_0_VALIDATION_LOGOFF_TIME 1
+#define MSV1_0_VALIDATION_KICKOFF_TIME 2
+#define MSV1_0_VALIDATION_LOGON_SERVER 4
+#define MSV1_0_VALIDATION_LOGON_DOMAIN 8
+#define MSV1_0_VALIDATION_SESSION_KEY 16
+#define MSV1_0_VALIDATION_USER_FLAGS 32
+#define MSV1_0_VALIDATION_USER_ID 64
+#define MSV1_0_SUBAUTH_ACCOUNT_DISABLED 1
+#define MSV1_0_SUBAUTH_PASSWORD 2
+#define MSV1_0_SUBAUTH_WORKSTATIONS 4
+#define MSV1_0_SUBAUTH_LOGON_HOURS 8
+#define MSV1_0_SUBAUTH_ACCOUNT_EXPIRY 16
+#define MSV1_0_SUBAUTH_PASSWORD_EXPIRY 32
+#define MSV1_0_SUBAUTH_ACCOUNT_TYPE 64
+#define MSV1_0_SUBAUTH_LOCKOUT 128
+#define NEXT_FREE_ACCOUNT_CONTROL_BIT 131072
+#define SAM_DAYS_PER_WEEK 7
+#define SAM_HOURS_PER_WEEK 168
+#define SAM_MINUTES_PER_WEEK 10080
+#define STATUS_INVALID_INFO_CLASS 0xC0000003L
+#define STATUS_NO_SUCH_USER 0xC0000064L
+#define STATUS_WRONG_PASSWORD 0xC000006AL
+#define STATUS_PASSWORD_RESTRICTION 0xC000006CL
+#define STATUS_LOGON_FAILURE 0xC000006DL
+#define STATUS_ACCOUNT_RESTRICTION 0xC000006EL
+#define STATUS_INVALID_LOGON_HOURS 0xC000006FL
+#define STATUS_INVALID_WORKSTATION 0xC0000070L
+#define STATUS_PASSWORD_EXPIRED 0xC0000071L
+#define STATUS_ACCOUNT_DISABLED 0xC0000072L
+#define STATUS_INSUFFICIENT_RESOURCES 0xC000009AL
+#define STATUS_ACCOUNT_EXPIRED 0xC0000193L
+#define STATUS_PASSWORD_MUST_CHANGE 0xC0000224L
+#define STATUS_ACCOUNT_LOCKED_OUT 0xC0000234L
+#define USER_ACCOUNT_DISABLED 1
+#define USER_HOME_DIRECTORY_REQUIRED 2
+#define USER_PASSWORD_NOT_REQUIRED 4
+#define USER_TEMP_DUPLICATE_ACCOUNT 8
+#define USER_NORMAL_ACCOUNT 16
+#define USER_MNS_LOGON_ACCOUNT 32
+#define USER_INTERDOMAIN_TRUST_ACCOUNT 64
+#define USER_WORKSTATION_TRUST_ACCOUNT 128
+#define USER_SERVER_TRUST_ACCOUNT 256
+#define USER_DONT_EXPIRE_PASSWORD 512
+#define USER_ACCOUNT_AUTO_LOCKED 1024
+#define USER_ENCRYPTED_TEXT_PASSWORD_ALLOWED 2048
+#define USER_SMARTCARD_REQUIRED 4096
+#define USER_TRUSTED_FOR_DELEGATION 8192
+#define USER_NOT_DELEGATED 16384
+#define USER_USE_DES_KEY_ONLY 32768
+#define USER_DONT_REQUIRE_PREAUTH 65536
+#define USER_MACHINE_ACCOUNT_MASK 448
+#define USER_ACCOUNT_TYPE_MASK 472
+#define USER_ALL_PARAMETERS 2097152
+#if !defined(_NTDEF_H) && !defined(_NTSECAPI_H)
+typedef LONG NTSTATUS, *PNTSTATUS;
+typedef struct _UNICODE_STRING {
+ USHORT Length;
+ USHORT MaximumLength;
+ PWSTR Buffer;
+} UNICODE_STRING, *PUNICODE_STRING;
+typedef struct _STRING {
+ USHORT Length;
+ USHORT MaximumLength;
+ PCHAR Buffer;
+} STRING, *PSTRING;
+#endif
+typedef PVOID SAM_HANDLE, *PSAM_HANDLE;
+typedef struct _OLD_LARGE_INTEGER {
+ ULONG LowPart;
+ LONG HighPart;
+} OLD_LARGE_INTEGER, *POLD_LARGE_INTEGER;
+typedef enum _NETLOGON_LOGON_INFO_CLASS {
+ NetlogonInteractiveInformation = 1,NetlogonNetworkInformation,
+ NetlogonServiceInformation,NetlogonGenericInformation,
+ NetlogonInteractiveTransitiveInformation,NetlogonNetworkTransitiveInformation,
+ NetlogonServiceTransitiveInformation
+} NETLOGON_LOGON_INFO_CLASS;
+typedef struct _CYPHER_BLOCK {
+ CHAR data[CYPHER_BLOCK_LENGTH];
+} CYPHER_BLOCK, *PCYPHER_BLOCK;
+typedef struct _CLEAR_BLOCK {
+ CHAR data[CLEAR_BLOCK_LENGTH];
+} CLEAR_BLOCK, *PCLEAR_BLOCK;
+typedef struct _LM_OWF_PASSWORD {
+ CYPHER_BLOCK data[2];
+} LM_OWF_PASSWORD, *PLM_OWF_PASSWORD;
+typedef struct _USER_SESSION_KEY {
+ CYPHER_BLOCK data[2];
+} USER_SESSION_KEY, *PUSER_SESSION_KEY;
+typedef CLEAR_BLOCK LM_CHALLENGE, *PLM_CHALLENGE;
+typedef LM_OWF_PASSWORD NT_OWF_PASSWORD, *PNT_OWF_PASSWORD;
+typedef LM_CHALLENGE NT_CHALLENGE, *PNT_CHALLENGE;
+typedef struct _LOGON_HOURS {
+ USHORT UnitsPerWeek;
+ PUCHAR LogonHours;
+} LOGON_HOURS, *PLOGON_HOURS;
+typedef struct _SR_SECURITY_DESCRIPTOR {
+ ULONG Length;
+ PUCHAR SecurityDescriptor;
+} SR_SECURITY_DESCRIPTOR, *PSR_SECURITY_DESCRIPTOR;
+#pragma pack(push,4)
+typedef struct _USER_ALL_INFORMATION {
+ LARGE_INTEGER LastLogon;
+ LARGE_INTEGER LastLogoff;
+ LARGE_INTEGER PasswordLastSet;
+ LARGE_INTEGER AccountExpires;
+ LARGE_INTEGER PasswordCanChange;
+ LARGE_INTEGER PasswordMustChange;
+ UNICODE_STRING 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;
+ SR_SECURITY_DESCRIPTOR SecurityDescriptor;
+ ULONG UserId;
+ ULONG PrimaryGroupId;
+ ULONG UserAccountControl;
+ ULONG WhichFields;
+ LOGON_HOURS LogonHours;
+ USHORT BadPasswordCount;
+ USHORT LogonCount;
+ USHORT CountryCode;
+ USHORT CodePage;
+ BOOLEAN LmPasswordPresent;
+ BOOLEAN NtPasswordPresent;
+ BOOLEAN PasswordExpired;
+ BOOLEAN PrivateDataSensitive;
+} USER_ALL_INFORMATION, *PUSER_ALL_INFORMATION;
+#pragma pack(pop)
+typedef struct _MSV1_0_VALIDATION_INFO {
+ LARGE_INTEGER LogoffTime;
+ LARGE_INTEGER KickoffTime;
+ UNICODE_STRING LogonServer;
+ UNICODE_STRING LogonDomainName;
+ USER_SESSION_KEY SessionKey;
+ BOOLEAN Authoritative;
+ ULONG UserFlags;
+ ULONG WhichFields;
+ ULONG UserId;
+} MSV1_0_VALIDATION_INFO, *PMSV1_0_VALIDATION_INFO;
+typedef struct _NETLOGON_LOGON_IDENTITY_INFO {
+ UNICODE_STRING LogonDomainName;
+ ULONG ParameterControl;
+ OLD_LARGE_INTEGER LogonId;
+ UNICODE_STRING UserName;
+ UNICODE_STRING Workstation;
+} NETLOGON_LOGON_IDENTITY_INFO, *PNETLOGON_LOGON_IDENTITY_INFO;
+typedef struct _NETLOGON_INTERACTIVE_INFO {
+ NETLOGON_LOGON_IDENTITY_INFO Identity;
+ LM_OWF_PASSWORD LmOwfPassword;
+ NT_OWF_PASSWORD NtOwfPassword;
+} NETLOGON_INTERACTIVE_INFO, *PNETLOGON_INTERACTIVE_INFO;
+typedef struct _NETLOGON_GENERIC_INFO {
+ NETLOGON_LOGON_IDENTITY_INFO Identity;
+ UNICODE_STRING PackageName;
+ ULONG DataLength;
+ PUCHAR LogonData;
+} NETLOGON_GENERIC_INFO, *PNETLOGON_GENERIC_INFO;
+typedef struct _NETLOGON_NETWORK_INFO {
+ NETLOGON_LOGON_IDENTITY_INFO Identity;
+ LM_CHALLENGE LmChallenge;
+ STRING NtChallengeResponse;
+ STRING LmChallengeResponse;
+} NETLOGON_NETWORK_INFO, *PNETLOGON_NETWORK_INFO;
+typedef struct _NETLOGON_SERVICE_INFO {
+ NETLOGON_LOGON_IDENTITY_INFO Identity;
+ LM_OWF_PASSWORD LmOwfPassword;
+ NT_OWF_PASSWORD NtOwfPassword;
+} NETLOGON_SERVICE_INFO, *PNETLOGON_SERVICE_INFO;
+NTSTATUS NTAPI Msv1_0SubAuthenticationRoutine(NETLOGON_LOGON_INFO_CLASS,PVOID,
+ ULONG,PUSER_ALL_INFORMATION,PULONG,PULONG,
+ PBOOLEAN,PLARGE_INTEGER,PLARGE_INTEGER);
+NTSTATUS NTAPI Msv1_0SubAuthenticationFilter(NETLOGON_LOGON_INFO_CLASS,PVOID,
+ ULONG,PUSER_ALL_INFORMATION,PULONG,PULONG,
+ PBOOLEAN,PLARGE_INTEGER,PLARGE_INTEGER);
+NTSTATUS NTAPI Msv1_0SubAuthenticationRoutineGeneric(PVOID,ULONG,PULONG,PVOID*);
+NTSTATUS NTAPI Msv1_0SubAuthenticationRoutineEx(NETLOGON_LOGON_INFO_CLASS,PVOID,
+ ULONG,PUSER_ALL_INFORMATION,SAM_HANDLE,
+ PMSV1_0_VALIDATION_INFO,PULONG);
+#ifdef __cplusplus
+}
+#endif
+#endif /* _SUBAUTH_H */
diff --git a/tcc/include/winapi/svcguid.h b/tcc/include/winapi/svcguid.h
new file mode 100644
index 0000000..6507280
--- /dev/null
+++ b/tcc/include/winapi/svcguid.h
@@ -0,0 +1,33 @@
+#ifndef _SVCGUID_H
+#define _SVCGUID_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define SVCID_NETWARE(_SapId) \
+ { (0x000B << 16) | (_SapId), 0, 0, { 0xC0,0,0,0,0,0,0,0x46 } }
+
+#define SAPID_FROM_SVCID_NETWARE(_g) \
+ ((WORD)(_g->Data1 & 0xFFFF))
+
+#define SET_NETWARE_SVCID(_g,_SapId) { \
+ (_g)->Data1 = (0x000B << 16 ) | (_SapId); \
+ (_g)->Data2 = 0; \
+ (_g)->Data3 = 0; \
+ (_g)->Data4[0] = 0xC0; \
+ (_g)->Data4[1] = 0x0; \
+ (_g)->Data4[2] = 0x0; \
+ (_g)->Data4[3] = 0x0; \
+ (_g)->Data4[4] = 0x0; \
+ (_g)->Data4[5] = 0x0; \
+ (_g)->Data4[6] = 0x0; \
+ (_g)->Data4[7] = 0x46; }
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/tlhelp32.h b/tcc/include/winapi/tlhelp32.h
new file mode 100644
index 0000000..e928380
--- /dev/null
+++ b/tcc/include/winapi/tlhelp32.h
@@ -0,0 +1,140 @@
+/*
+ tlhelp32.h - Include file for Tool help functions.
+
+ Written by Mumit Khan <khan@nanotech.wisc.edu>
+
+ This file is part of a free library for the Win32 API.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+*/
+#ifndef _TLHELP32_H
+#define _TLHELP32_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#define HF32_DEFAULT 1
+#define HF32_SHARED 2
+#define LF32_FIXED 0x1
+#define LF32_FREE 0x2
+#define LF32_MOVEABLE 0x4
+#define MAX_MODULE_NAME32 255
+#define TH32CS_SNAPHEAPLIST 0x1
+#define TH32CS_SNAPPROCESS 0x2
+#define TH32CS_SNAPTHREAD 0x4
+#define TH32CS_SNAPMODULE 0x8
+#define TH32CS_SNAPALL (TH32CS_SNAPHEAPLIST|TH32CS_SNAPPROCESS|TH32CS_SNAPTHREAD|TH32CS_SNAPMODULE)
+#define TH32CS_INHERIT 0x80000000
+typedef struct tagHEAPLIST32 {
+ DWORD dwSize;
+ DWORD th32ProcessID;
+ DWORD th32HeapID;
+ DWORD dwFlags;
+} HEAPLIST32,*PHEAPLIST32,*LPHEAPLIST32;
+typedef struct tagHEAPENTRY32 {
+ DWORD dwSize;
+ HANDLE hHandle;
+ DWORD dwAddress;
+ DWORD dwBlockSize;
+ DWORD dwFlags;
+ DWORD dwLockCount;
+ DWORD dwResvd;
+ DWORD th32ProcessID;
+ DWORD th32HeapID;
+} HEAPENTRY32,*PHEAPENTRY32,*LPHEAPENTRY32;
+typedef struct tagPROCESSENTRY32W {
+ DWORD dwSize;
+ DWORD cntUsage;
+ DWORD th32ProcessID;
+ DWORD th32DefaultHeapID;
+ DWORD th32ModuleID;
+ DWORD cntThreads;
+ DWORD th32ParentProcessID;
+ LONG pcPriClassBase;
+ DWORD dwFlags;
+ WCHAR szExeFile[MAX_PATH];
+} PROCESSENTRY32W,*PPROCESSENTRY32W,*LPPROCESSENTRY32W;
+typedef struct tagPROCESSENTRY32 {
+ DWORD dwSize;
+ DWORD cntUsage;
+ DWORD th32ProcessID;
+ DWORD th32DefaultHeapID;
+ DWORD th32ModuleID;
+ DWORD cntThreads;
+ DWORD th32ParentProcessID;
+ LONG pcPriClassBase;
+ DWORD dwFlags;
+ CHAR szExeFile[MAX_PATH];
+} PROCESSENTRY32,*PPROCESSENTRY32,*LPPROCESSENTRY32;
+typedef struct tagTHREADENTRY32 {
+ DWORD dwSize;
+ DWORD cntUsage;
+ DWORD th32ThreadID;
+ DWORD th32OwnerProcessID;
+ LONG tpBasePri;
+ LONG tpDeltaPri;
+ DWORD dwFlags;
+} THREADENTRY32,*PTHREADENTRY32,*LPTHREADENTRY32;
+typedef struct tagMODULEENTRY32W {
+ DWORD dwSize;
+ DWORD th32ModuleID;
+ DWORD th32ProcessID;
+ DWORD GlblcntUsage;
+ DWORD ProccntUsage;
+ BYTE *modBaseAddr;
+ DWORD modBaseSize;
+ HMODULE hModule;
+ WCHAR szModule[MAX_MODULE_NAME32 + 1];
+ WCHAR szExePath[MAX_PATH];
+} MODULEENTRY32W,*PMODULEENTRY32W,*LPMODULEENTRY32W;
+typedef struct tagMODULEENTRY32 {
+ DWORD dwSize;
+ DWORD th32ModuleID;
+ DWORD th32ProcessID;
+ DWORD GlblcntUsage;
+ DWORD ProccntUsage;
+ BYTE *modBaseAddr;
+ DWORD modBaseSize;
+ HMODULE hModule;
+ char szModule[MAX_MODULE_NAME32 + 1];
+ char szExePath[MAX_PATH];
+} MODULEENTRY32,*PMODULEENTRY32,*LPMODULEENTRY32;
+BOOL WINAPI Heap32First(LPHEAPENTRY32,DWORD,DWORD);
+BOOL WINAPI Heap32ListFirst(HANDLE,LPHEAPLIST32);
+BOOL WINAPI Heap32ListNext(HANDLE,LPHEAPLIST32);
+BOOL WINAPI Heap32Next(LPHEAPENTRY32);
+BOOL WINAPI Module32First(HANDLE,LPMODULEENTRY32);
+BOOL WINAPI Module32FirstW(HANDLE,LPMODULEENTRY32W);
+BOOL WINAPI Module32Next(HANDLE,LPMODULEENTRY32);
+BOOL WINAPI Module32NextW(HANDLE,LPMODULEENTRY32W);
+BOOL WINAPI Process32First(HANDLE,LPPROCESSENTRY32);
+BOOL WINAPI Process32FirstW(HANDLE,LPPROCESSENTRY32W);
+BOOL WINAPI Process32Next(HANDLE,LPPROCESSENTRY32);
+BOOL WINAPI Process32NextW(HANDLE,LPPROCESSENTRY32W);
+BOOL WINAPI Thread32First(HANDLE,LPTHREADENTRY32);
+BOOL WINAPI Thread32Next(HANDLE,LPTHREADENTRY32);
+BOOL WINAPI Toolhelp32ReadProcessMemory(DWORD,LPCVOID,LPVOID,DWORD,LPDWORD);
+HANDLE WINAPI CreateToolhelp32Snapshot(DWORD,DWORD);
+#ifdef UNICODE
+#define LPMODULEENTRY32 LPMODULEENTRY32W
+#define LPPROCESSENTRY32 LPPROCESSENTRY32W
+#define MODULEENTRY32 MODULEENTRY32W
+#define Module32First Module32FirstW
+#define Module32Next Module32NextW
+#define PMODULEENTRY32 PMODULEENTRY32W
+#define PPROCESSENTRY32 PPROCESSENTRY32W
+#define PROCESSENTRY32 PROCESSENTRY32W
+#define Process32First Process32FirstW
+#define Process32Next Process32NextW
+#endif /* UNICODE */
+#ifdef __cplusplus
+}
+#endif
+#endif /* _TLHELP32_H */
+
diff --git a/tcc/include/winapi/tmschema.h b/tcc/include/winapi/tmschema.h
new file mode 100644
index 0000000..6ab03b4
--- /dev/null
+++ b/tcc/include/winapi/tmschema.h
@@ -0,0 +1,664 @@
+#ifndef _TMSCHEMA_H
+#define _TMSCHEMA_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+/* BUTTON parts */
+enum {
+ BP_PUSHBUTTON = 1,
+ BP_RADIOBUTTON = 2,
+ BP_CHECKBOX = 3,
+ BP_GROUPBOX = 4,
+ BP_USERBUTTON = 5
+};
+enum {
+ CBS_UNCHECKEDNORMAL = 1,
+ CBS_UNCHECKEDHOT = 2,
+ CBS_UNCHECKEDPRESSED = 3,
+ CBS_UNCHECKEDDISABLED = 4,
+ CBS_CHECKEDNORMAL = 5,
+ CBS_CHECKEDHOT = 6,
+ CBS_CHECKEDPRESSED = 7,
+ CBS_CHECKEDDISABLED = 8,
+ CBS_MIXEDNORMAL = 9,
+ CBS_MIXEDHOT = 10,
+ CBS_MIXEDPRESSED = 11,
+ CBS_MIXEDDISABLED = 12
+};
+enum {
+ GBS_NORMAL = 1,
+ GBS_DISABLED = 2
+};
+enum {
+ PBS_NORMAL = 1,
+ PBS_HOT = 2,
+ PBS_PRESSED = 3,
+ PBS_DISABLED = 4,
+ PBS_DEFAULTED = 5
+};
+enum {
+ RBS_UNCHECKEDNORMAL = 1,
+ RBS_UNCHECKEDHOT = 2,
+ RBS_UNCHECKEDPRESSED = 3,
+ RBS_UNCHECKEDDISABLED = 4,
+ RBS_CHECKEDNORMAL = 5,
+ RBS_CHECKEDHOT = 6,
+ RBS_CHECKEDPRESSED = 7,
+ RBS_CHECKEDDISABLED = 8
+};
+/* CLOCK parts */
+enum {
+ CLP_TIME = 1
+};
+enum {
+ CLS_NORMAL = 1
+};
+/* COMBOBOX parts */
+enum {
+ CP_DROPDOWNBUTTON = 1
+};
+enum {
+ CBXS_NORMAL = 1,
+ CBXS_HOT = 2,
+ CBXS_PRESSED = 3,
+ CBXS_DISABLED = 4
+};
+/* EDIT parts */
+enum {
+ EP_EDITTEXT = 1,
+ EP_CARET = 2
+};
+enum {
+ ETS_NORMAL = 1,
+ ETS_HOT = 2,
+ ETS_SELECTED = 3,
+ ETS_DISABLED = 4,
+ ETS_FOCUSED = 5,
+ ETS_READONLY = 6,
+ ETS_ASSIST = 7
+};
+/* EXPLORERBAR parts */
+enum {
+ EBP_HEADERBACKGROUND = 1,
+ EBP_HEADERCLOSE = 2,
+ EBP_HEADERPIN = 3,
+ EBP_IEBARMENU = 4,
+ EBP_NORMALGROUPBACKGROUND = 5,
+ EBP_NORMALGROUPCOLLAPSE = 6,
+ EBP_NORMALGROUPEXPAND = 7,
+ EBP_NORMALGROUPHEAD = 8,
+ EBP_SPECIALGROUPBACKGROUND = 9,
+ EBP_SPECIALGROUPCOLLAPSE = 10,
+ EBP_SPECIALGROUPEXPAND = 11,
+ EBP_SPECIALGROUPHEAD = 12
+};
+enum {
+ EBHC_NORMAL = 1,
+ EBHC_HOT = 2,
+ EBHC_PRESSED = 3
+};
+enum {
+ EBHP_NORMAL = 1,
+ EBHP_HOT = 2,
+ EBHP_PRESSED = 3,
+ EBHP_SELECTEDNORMAL = 4,
+ EBHP_SELECTEDHOT = 5,
+ EBHP_SELECTEDPRESSED = 6
+};
+enum {
+ EBM_NORMAL = 1,
+ EBM_HOT = 2,
+ EBM_PRESSED = 3
+};
+enum {
+ EBNGC_NORMAL = 1,
+ EBNGC_HOT = 2,
+ EBNGC_PRESSED = 3
+};
+enum {
+ EBNGE_NORMAL = 1,
+ EBNGE_HOT = 2,
+ EBNGE_PRESSED = 3
+};
+enum {
+ EBSGC_NORMAL = 1,
+ EBSGC_HOT = 2,
+ EBSGC_PRESSED = 3
+};
+enum {
+ EBSGE_NORMAL = 1,
+ EBSGE_HOT = 2,
+ EBSGE_PRESSED = 3
+};
+/* HEADER parts */
+enum {
+ HP_HEADERITEM = 1,
+ HP_HEADERITEMLEFT = 2,
+ HP_HEADERITEMRIGHT = 3,
+ HP_HEADERSORTARROW = 4
+};
+enum {
+ HIS_NORMAL = 1,
+ HIS_HOT = 2,
+ HIS_PRESSED = 3
+};
+enum {
+ HILS_NORMAL = 1,
+ HILS_HOT = 2,
+ HILS_PRESSED = 3
+};
+enum {
+ HIRS_NORMAL = 1,
+ HIRS_HOT = 2,
+ HIRS_PRESSED = 3
+};
+enum {
+ HSAS_SORTEDUP = 1,
+ HSAS_SORTEDDOWN = 2
+};
+/* LISTVIEW parts */
+enum {
+ LVP_LISTITEM = 1,
+ LVP_LISTGROUP = 2,
+ LVP_LISTDETAIL = 3,
+ LVP_LISTSORTEDDETAIL = 4,
+ LVP_EMPTYTEXT = 5
+};
+enum {
+ LIS_NORMAL = 1,
+ LIS_HOT = 2,
+ LIS_SELECTED = 3,
+ LIS_DISABLED = 4,
+ LIS_SELECTEDNOTFOCUS = 5
+};
+/* MENU parts */
+enum {
+ MP_MENUITEM = 1,
+ MP_MENUDROPDOWN = 2,
+ MP_MENUBARITEM = 3,
+ MP_MENUBARDROPDOWN = 4,
+ MP_CHEVRON = 5,
+ MP_SEPARATOR = 6
+};
+enum {
+ MS_NORMAL = 1,
+ MS_SELECTED = 2,
+ MS_DEMOTED = 3
+};
+/* MENUBAND parts */
+enum {
+ MDP_NEWAPPBUTTON = 1,
+ MDP_SEPERATOR = 2
+};
+enum {
+ MDS_NORMAL = 1,
+ MDS_HOT = 2,
+ MDS_PRESSED = 3,
+ MDS_DISABLED = 4,
+ MDS_CHECKED = 5,
+ MDS_HOTCHECKED = 6
+};
+/* PAGE parts */
+enum {
+ PGRP_UP = 1,
+ PGRP_DOWN = 2,
+ PGRP_UPHORZ = 3,
+ PGRP_DOWNHORZ = 4
+};
+enum {
+ DNS_NORMAL = 1,
+ DNS_HOT = 2,
+ DNS_PRESSED = 3,
+ DNS_DISABLED = 4
+};
+enum {
+ DNHZS_NORMAL = 1,
+ DNHZS_HOT = 2,
+ DNHZS_PRESSED = 3,
+ DNHZS_DISABLED = 4
+};
+enum {
+ UPS_NORMAL = 1,
+ UPS_HOT = 2,
+ UPS_PRESSED = 3,
+ UPS_DISABLED = 4
+};
+enum {
+ UPHZS_NORMAL = 1,
+ UPHZS_HOT = 2,
+ UPHZS_PRESSED = 3,
+ UPHZS_DISABLED = 4
+};
+/* PROGRESS parts */
+enum {
+ PP_BAR = 1,
+ PP_BARVERT = 2,
+ PP_CHUNK = 3,
+ PP_CHUNKVERT = 4
+};
+/* REBAR parts */
+enum {
+ RP_GRIPPER = 1,
+ RP_GRIPPERVERT = 2,
+ RP_BAND = 3,
+ RP_CHEVRON = 4,
+ RP_CHEVRONVERT = 5
+};
+enum {
+ CHEVS_NORMAL = 1,
+ CHEVS_HOT = 2,
+ CHEVS_PRESSED = 3
+};
+/* SCROLLBAR parts */
+enum {
+ SBP_ARROWBTN = 1,
+ SBP_THUMBBTNHORZ = 2,
+ SBP_THUMBBTNVERT = 3,
+ SBP_LOWERTRACKHORZ = 4,
+ SBP_UPPERTRACKHORZ = 5,
+ SBP_LOWERTRACKVERT = 6,
+ SBP_UPPERTRACKVERT = 7,
+ SBP_GRIPPERHORZ = 8,
+ SBP_GRIPPERVERT = 9,
+ SBP_SIZEBOX = 10
+};
+enum {
+ ABS_UPNORMAL = 1,
+ ABS_UPHOT = 2,
+ ABS_UPPRESSED = 3,
+ ABS_UPDISABLED = 4,
+ ABS_DOWNNORMAL = 5,
+ ABS_DOWNHOT = 6,
+ ABS_DOWNPRESSED = 7,
+ ABS_DOWNDISABLED = 8,
+ ABS_LEFTNORMAL = 9,
+ ABS_LEFTHOT = 10,
+ ABS_LEFTPRESSED = 11,
+ ABS_LEFTDISABLED = 12,
+ ABS_RIGHTNORMAL = 13,
+ ABS_RIGHTHOT = 14,
+ ABS_RIGHTPRESSED = 15,
+ ABS_RIGHTDISABLED = 16
+};
+enum {
+ SCRBS_NORMAL = 1,
+ SCRBS_HOT = 2,
+ SCRBS_PRESSED = 3,
+ SCRBS_DISABLED = 4
+};
+enum {
+ SZB_RIGHTALIGN = 1,
+ SZB_LEFTALIGN = 2
+};
+/* SPIN parts */
+enum {
+ SPNP_UP = 1,
+ SPNP_DOWN = 2,
+ SPNP_UPHORZ = 3,
+ SPNP_DOWNHORZ = 4
+};
+/* STARTPANEL parts */
+enum {
+ SPP_USERPANE = 1,
+ SPP_MOREPROGRAMS = 2,
+ SPP_MOREPROGRAMSARROW = 3,
+ SPP_PROGLIST = 4,
+ SPP_PROGLISTSEPARATOR = 5,
+ SPP_PLACESLIST = 6,
+ SPP_PLACESLISTSEPARATOR = 7,
+ SPP_LOGOFF = 8,
+ SPP_LOGOFFBUTTONS = 9,
+ SPP_USERPICTURE = 10,
+ SPP_PREVIEW = 11
+};
+enum {
+ SPLS_NORMAL = 1,
+ SPLS_HOT = 2,
+ SPLS_PRESSED = 3
+};
+enum {
+ SPS_NORMAL = 1,
+ SPS_HOT = 2,
+ SPS_PRESSED = 3
+};
+/* STATUS parts */
+enum {
+ SP_PANE = 1,
+ SP_GRIPPERPANE = 2,
+ SP_GRIPPER = 3
+};
+/* TAB parts */
+enum {
+ TABP_TABITEM = 1,
+ TABP_TABITEMLEFTEDGE = 2,
+ TABP_TABITEMRIGHTEDGE = 3,
+ TABP_TABITEMBOTHEDGE = 4,
+ TABP_TOPTABITEM = 5,
+ TABP_TOPTABITEMLEFTEDGE = 6,
+ TABP_TOPTABITEMRIGHTEDGE = 7,
+ TABP_TOPTABITEMBOTHEDGE = 8,
+ TABP_PANE = 9,
+ TABP_BODY = 10
+};
+enum {
+ TIS_NORMAL = 1,
+ TIS_HOT = 2,
+ TIS_SELECTED = 3,
+ TIS_DISABLED = 4,
+ TIS_FOCUSED = 5
+};
+enum {
+ TIBES_NORMAL = 1,
+ TIBES_HOT = 2,
+ TIBES_SELECTED = 3,
+ TIBES_DISABLED = 4,
+ TIBES_FOCUSED = 5
+};
+enum {
+ TILES_NORMAL = 1,
+ TILES_HOT = 2,
+ TILES_SELECTED = 3,
+ TILES_DISABLED = 4,
+ TILES_FOCUSED = 5
+};
+enum {
+ TIRES_NORMAL = 1,
+ TIRES_HOT = 2,
+ TIRES_SELECTED = 3,
+ TIRES_DISABLED = 4,
+ TIRES_FOCUSED = 5
+};
+enum {
+ TTIS_NORMAL = 1,
+ TTIS_HOT = 2,
+ TTIS_SELECTED = 3,
+ TTIS_DISABLED = 4,
+ TTIS_FOCUSED = 5
+};
+enum {
+ TTIBES_NORMAL = 1,
+ TTIBES_HOT = 2,
+ TTIBES_SELECTED = 3,
+ TTIBES_DISABLED = 4,
+ TTIBES_FOCUSED = 5
+};
+enum {
+ TTILES_NORMAL = 1,
+ TTILES_HOT = 2,
+ TTILES_SELECTED = 3,
+ TTILES_DISABLED = 4,
+ TTILES_FOCUSED = 5
+};
+enum {
+ TTIRES_NORMAL = 1,
+ TTIRES_HOT = 2,
+ TTIRES_SELECTED = 3,
+ TTIRES_DISABLED = 4,
+ TTIRES_FOCUSED = 5
+};
+/* TASKBAND parts */
+enum {
+ TDP_GROUPCOUNT = 1,
+ TDP_FLASHBUTTON = 2,
+ TDP_FLASHBUTTONGROUPMENU = 3
+};
+/* TASKBAR parts */
+enum {
+ TBP_BACKGROUNDBOTTOM = 1,
+ TBP_BACKGROUNDRIGHT = 2,
+ TBP_BACKGROUNDTOP = 3,
+ TBP_BACKGROUNDLEFT = 4,
+ TBP_SIZINGBARBOTTOM = 5,
+ TBP_SIZINGBARRIGHT = 6,
+ TBP_SIZINGBARTOP = 7,
+ TBP_SIZINGBARLEFT = 8
+};
+/* TOOLBAR parts */
+enum {
+ TP_BUTTON = 1,
+ TP_DROPDOWNBUTTON = 2,
+ TP_SPLITBUTTON = 3,
+ TP_SPLITBUTTONDROPDOWN = 4,
+ TP_SEPARATOR = 5,
+ TP_SEPARATORVERT = 6
+};
+enum {
+ TS_NORMAL = 1,
+ TS_HOT = 2,
+ TS_PRESSED = 3,
+ TS_DISABLED = 4,
+ TS_CHECKED = 5,
+ TS_HOTCHECKED = 6
+};
+/* TOOLTIP parts */
+enum {
+ TTP_STANDARD = 1,
+ TTP_STANDARDTITLE = 2,
+ TTP_BALLOON = 3,
+ TTP_BALLOONTITLE = 4,
+ TTP_CLOSE = 5
+};
+enum {
+ TTBS_NORMAL = 1,
+ TTBS_LINK = 2
+};
+enum {
+ TTCS_NORMAL = 1,
+ TTCS_HOT = 2,
+ TTCS_PRESSED = 3
+};
+enum {
+ TTSS_NORMAL = 1,
+ TTSS_LINK = 2
+};
+/* TRACKBAR parts */
+enum {
+ TKP_TRACK = 1,
+ TKP_TRACKVERT = 2,
+ TKP_THUMB = 3,
+ TKP_THUMBBOTTOM = 4,
+ TKP_THUMBTOP = 5,
+ TKP_THUMBVERT = 6,
+ TKP_THUMBLEFT = 7,
+ TKP_THUMBRIGHT = 8,
+ TKP_TICS = 9,
+ TKP_TICSVERT = 10
+};
+enum {
+ TUS_NORMAL = 1,
+ TUS_HOT = 2,
+ TUS_PRESSED = 3,
+ TUS_FOCUSED = 4,
+ TUS_DISABLED = 5
+};
+enum {
+ TUBS_NORMAL = 1,
+ TUBS_HOT = 2,
+ TUBS_PRESSED = 3,
+ TUBS_FOCUSED = 4,
+ TUBS_DISABLED = 5
+};
+enum {
+ TUVLS_NORMAL = 1,
+ TUVLS_HOT = 2,
+ TUVLS_PRESSED = 3,
+ TUVLS_FOCUSED = 4,
+ TUVLS_DISABLED = 5
+};
+enum {
+ TUVRS_NORMAL = 1,
+ TUVRS_HOT = 2,
+ TUVRS_PRESSED = 3,
+ TUVRS_FOCUSED = 4,
+ TUVRS_DISABLED = 5
+};
+enum {
+ TUTS_NORMAL = 1,
+ TUTS_HOT = 2,
+ TUTS_PRESSED = 3,
+ TUTS_FOCUSED = 4,
+ TUTS_DISABLED = 5
+};
+enum {
+ TUVS_NORMAL = 1,
+ TUVS_HOT = 2,
+ TUVS_PRESSED = 3,
+ TUVS_FOCUSED = 4,
+ TUVS_DISABLED = 5
+};
+enum {
+ TSS_NORMAL = 1
+};
+enum {
+ TSVS_NORMAL = 1
+};
+enum {
+ TRS_NORMAL = 1
+};
+enum {
+ TRVS_NORMAL = 1
+};
+/* TRAYNOTIFY parts */
+enum {
+ TNP_BACKGROUND = 1,
+ TNP_ANIMBACKGROUND = 2
+};
+/* TREEVIEW parts */
+enum {
+ TVP_TREEITEM = 1,
+ TVP_GLYPH = 2,
+ TVP_BRANCH = 3
+};
+enum {
+ GLPS_CLOSED = 1,
+ GLPS_OPENED = 2
+};
+enum {
+ TREIS_NORMAL = 1,
+ TREIS_HOT = 2,
+ TREIS_SELECTED = 3,
+ TREIS_DISABLED = 4,
+ TREIS_SELECTEDNOTFOCUS = 5
+};
+/* WINDOW parts */
+enum {
+ WP_CAPTION = 1,
+ WP_SMALLCAPTION = 2,
+ WP_MINCAPTION = 3,
+ WP_SMALLMINCAPTION = 4,
+ WP_MAXCAPTION = 5,
+ WP_SMALLMAXCAPTION = 6,
+ WP_FRAMELEFT = 7,
+ WP_FRAMERIGHT = 8,
+ WP_FRAMEBOTTOM = 9,
+ WP_SMALLFRAMELEFT = 10,
+ WP_SMALLFRAMERIGHT = 11,
+ WP_SMALLFRAMEBOTTOM = 12,
+ WP_SYSBUTTON = 13,
+ WP_MDISYSBUTTON = 14,
+ WP_MINBUTTON = 15,
+ WP_MDIMINBUTTON = 16,
+ WP_MAXBUTTON = 17,
+ WP_CLOSEBUTTON = 18,
+ WP_SMALLCLOSEBUTTON = 19,
+ WP_MDICLOSEBUTTON = 20,
+ WP_RESTOREBUTTON = 21,
+ WP_MDIRESTOREBUTTON = 22,
+ WP_HELPBUTTON = 23,
+ WP_MDIHELPBUTTON = 24,
+ WP_HORZSCROLL = 25,
+ WP_HORZTHUMB = 26,
+ WP_VERTSCROLL = 27,
+ WP_VERTTHUMB = 28,
+ WP_DIALOG = 29,
+ WP_CAPTIONSIZINGTEMPLATE = 30,
+ WP_SMALLCAPTIONSIZINGTEMPLATE = 31,
+ WP_FRAMELEFTSIZINGTEMPLATE = 32,
+ WP_SMALLFRAMELEFTSIZINGTEMPLATE = 33,
+ WP_FRAMERIGHTSIZINGTEMPLATE = 34,
+ WP_SMALLFRAMERIGHTSIZINGTEMPLATE = 35,
+ WP_FRAMEBOTTOMSIZINGTEMPLATE = 36,
+ WP_SMALLFRAMEBOTTOMSIZINGTEMPLATE = 37
+};
+enum {
+ CS_ACTIVE = 1,
+ CS_INACTIVE = 2,
+ CS_DISABLED = 3
+};
+enum {
+ CBS_NORMAL = 1,
+ CBS_HOT = 2,
+ CBS_PUSHED = 3,
+ CBS_DISABLED = 4
+};
+enum {
+ FS_ACTIVE = 1,
+ FS_INACTIVE = 2
+};
+enum {
+ HBS_NORMAL = 1,
+ HBS_HOT = 2,
+ HBS_PUSHED = 3,
+ HBS_DISABLED = 4
+};
+enum {
+ HSS_NORMAL = 1,
+ HSS_HOT = 2,
+ HSS_PUSHED = 3,
+ HSS_DISABLED = 4
+};
+enum {
+ HTS_NORMAL = 1,
+ HTS_HOT = 2,
+ HTS_PUSHED = 3,
+ HTS_DISABLED = 4
+};
+enum {
+ MAXBS_NORMAL = 1,
+ MAXBS_HOT = 2,
+ MAXBS_PUSHED = 3,
+ MAXBS_DISABLED = 4
+};
+enum {
+ MXCS_ACTIVE = 1,
+ MXCS_INACTIVE = 2,
+ MXCS_DISABLED = 3
+};
+enum {
+ MINBS_NORMAL = 1,
+ MINBS_HOT = 2,
+ MINBS_PUSHED = 3,
+ MINBS_DISABLED = 4
+};
+enum {
+ RBS_NORMAL = 1,
+ RBS_HOT = 2,
+ RBS_PUSHED = 3,
+ RBS_DISABLED = 4
+};
+enum {
+ SBS_NORMAL = 1,
+ SBS_HOT = 2,
+ SBS_PUSHED = 3,
+ SBS_DISABLED = 4
+};
+enum {
+ MNCS_ACTIVE = 1,
+ MNCS_INACTIVE = 2,
+ MNCS_DISABLED = 3
+};
+enum {
+ VSS_NORMAL = 1,
+ VSS_HOT = 2,
+ VSS_PUSHED = 3,
+ VSS_DISABLED = 4
+};
+enum {
+ VTS_NORMAL = 1,
+ VTS_HOT = 2,
+ VTS_PUSHED = 3,
+ VTS_DISABLED = 4
+};
+
+#endif
diff --git a/tcc/include/winapi/unknwn.h b/tcc/include/winapi/unknwn.h
new file mode 100644
index 0000000..4a8c3fc
--- /dev/null
+++ b/tcc/include/winapi/unknwn.h
@@ -0,0 +1,76 @@
+#ifndef COM_NO_WINDOWS_H
+#include <windows.h>
+#endif
+
+#ifndef _UNKNWN_H
+#define _UNKNWN_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C"{
+#endif
+#include <objfwd.h>
+#include <wtypes.h>
+
+void * __RPC_USER MIDL_user_allocate(size_t);
+void __RPC_USER MIDL_user_free(void*);
+EXTERN_C const IID IID_IUnknown;
+EXTERN_C const IID IID_IClassFactory;
+#ifndef __IUnknown_INTERFACE_DEFINED__
+#define __IUnknown_INTERFACE_DEFINED__
+#define INTERFACE IUnknown
+DECLARE_INTERFACE(IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+};
+#undef INTERFACE
+typedef IUnknown *LPUNKNOWN;
+#endif
+#ifndef __IClassFactory_INTERFACE_DEFINED__
+#define __IClassFactory_INTERFACE_DEFINED__
+#define INTERFACE IClassFactory
+DECLARE_INTERFACE_(IClassFactory,IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(CreateInstance)(THIS_ LPUNKNOWN,REFIID,PVOID*) PURE;
+ STDMETHOD(LockServer)(THIS_ BOOL) PURE;
+};
+#undef INTERFACE
+typedef IClassFactory *LPCLASSFACTORY;
+#endif
+HRESULT STDMETHODCALLTYPE IUnknown_QueryInterface_Proxy(IUnknown*,REFIID,void**);
+void __RPC_STUB IUnknown_QueryInterface_Stub(LPRPCSTUBBUFFER,LPRPCCHANNELBUFFER,PRPC_MESSAGE,PDWORD);
+ULONG STDMETHODCALLTYPE IUnknown_AddRef_Proxy(IUnknown*);
+void __RPC_STUB IUnknown_AddRef_Stub(LPRPCSTUBBUFFER,LPRPCCHANNELBUFFER,PRPC_MESSAGE,PDWORD);
+ULONG STDMETHODCALLTYPE IUnknown_Release_Proxy(IUnknown*);
+void __RPC_STUB IUnknown_Release_Stub(LPRPCSTUBBUFFER,LPRPCCHANNELBUFFER,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IClassFactory_RemoteCreateInstance_Proxy(IClassFactory*,REFIID,IUnknown**);
+void __RPC_STUB IClassFactory_RemoteCreateInstance_Stub(LPRPCSTUBBUFFER,LPRPCCHANNELBUFFER,PRPC_MESSAGE,PDWORD);
+HRESULT __stdcall IClassFactory_RemoteLockServer_Proxy(IClassFactory*,BOOL);
+void __RPC_STUB IClassFactory_RemoteLockServer_Stub(LPRPCSTUBBUFFER,LPRPCCHANNELBUFFER,PRPC_MESSAGE,PDWORD);
+HRESULT STDMETHODCALLTYPE IClassFactory_CreateInstance_Proxy(IClassFactory*,IUnknown*,REFIID,void**);
+HRESULT STDMETHODCALLTYPE IClassFactory_CreateInstance_Stub(IClassFactory*,REFIID,IUnknown**);
+HRESULT STDMETHODCALLTYPE IClassFactory_LockServer_Proxy(IClassFactory*,BOOL);
+HRESULT STDMETHODCALLTYPE IClassFactory_LockServer_Stub(IClassFactory*,BOOL);
+
+#if (!defined (__cplusplus) || defined (CINTERFACE)) \
+ && defined (COBJMACROS)
+#define IUnknown_QueryInterface(T,r,O) (T)->lpVtbl->QueryInterface(T,r,O)
+#define IUnknown_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define IUnknown_Release(T) (T)->lpVtbl->Release(T)
+#define IClassFactory_QueryInterface(T,r,O) (T)->lpVtbl->QueryInterface(T,r,O)
+#define IClassFactory_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define IClassFactory_Release(T) (T)->lpVtbl->Release(T)
+#define IClassFactory_CreateInstance(T,p,r,O) (T)->lpVtbl->CreateInstance(T,p,r,O)
+#define IClassFactory_LockServer(T,f) (T)->lpVtbl->LockServer(T,f)
+#endif /* COBJMACROS */
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/userenv.h b/tcc/include/winapi/userenv.h
new file mode 100644
index 0000000..fad9f81
--- /dev/null
+++ b/tcc/include/winapi/userenv.h
@@ -0,0 +1,57 @@
+#ifndef _USERENV_H
+#define _USERENV_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#define PI_NOUI (1)
+#define PI_APPLYPOLICY (2)
+typedef struct _PROFILEINFOA {
+ DWORD dwSize;
+ DWORD dwFlags;
+ LPSTR lpUserName;
+ LPSTR lpProfilePath;
+ LPSTR lpDefaultPath;
+ LPSTR lpServerName;
+ LPSTR lpPolicyPath;
+ HANDLE hProfile;
+} PROFILEINFOA, *LPPROFILEINFOA;
+typedef struct _PROFILEINFOW {
+ DWORD dwSize;
+ DWORD dwFlags;
+ LPWSTR lpUserName;
+ LPWSTR lpProfilePath;
+ LPWSTR lpDefaultPath;
+ LPWSTR lpServerName;
+ LPWSTR lpPolicyPath;
+ HANDLE hProfile;
+} PROFILEINFOW, *LPPROFILEINFOW;
+BOOL WINAPI LoadUserProfileA(HANDLE,LPPROFILEINFOA);
+BOOL WINAPI LoadUserProfileW(HANDLE,LPPROFILEINFOW);
+BOOL WINAPI UnloadUserProfile(HANDLE,HANDLE);
+BOOL WINAPI GetProfilesDirectoryA(LPSTR,LPDWORD);
+BOOL WINAPI GetProfilesDirectoryW(LPWSTR,LPDWORD);
+BOOL WINAPI GetUserProfileDirectoryA(HANDLE,LPSTR,LPDWORD);
+BOOL WINAPI GetUserProfileDirectoryW(HANDLE,LPWSTR,LPDWORD);
+BOOL WINAPI CreateEnvironmentBlock(LPVOID*,HANDLE,BOOL);
+BOOL WINAPI DestroyEnvironmentBlock(LPVOID);
+#ifdef UNICODE
+typedef PROFILEINFOW PROFILEINFO;
+typedef LPPROFILEINFOW LPPROFILEINFO;
+#define LoadUserProfile LoadUserProfileW
+#define GetProfilesDirectory GetProfilesDirectoryW
+#define GetUserProfileDirectory GetUserProfileDirectoryW
+#else
+typedef PROFILEINFOA PROFILEINFO;
+typedef LPPROFILEINFOA LPPROFILEINFO;
+#define LoadUserProfile LoadUserProfileA
+#define GetProfilesDirectory GetProfilesDirectoryA
+#define GetUserProfileDirectory GetUserProfileDirectoryA
+#endif
+#ifdef __cplusplus
+}
+#endif
+#endif /* _USERENV_H */
diff --git a/tcc/include/winapi/usp10.h b/tcc/include/winapi/usp10.h
new file mode 100755
index 0000000..8f194f3
--- /dev/null
+++ b/tcc/include/winapi/usp10.h
@@ -0,0 +1,229 @@
+#ifndef _USP10_H
+#define _USP10_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#include <windows.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#pragma pack(push,1)
+
+#define SCRIPT_UNDEFINED 0
+#define USP_E_SCRIPT_NOT_IN_FONT MAKE_HRESULT(SEVERITY_ERROR,FACILITY_ITF,0x200)
+#define SGCM_RTL 0x00000001
+#define SSA_PASSWORD 0x00000001
+#define SSA_TAB 0x00000002
+#define SSA_CLIP 0x00000004
+#define SSA_FIT 0x00000008
+#define SSA_DZWG 0x00000010
+#define SSA_FALLBACK 0x00000020
+#define SSA_BREAK 0x00000040
+#define SSA_GLYPHS 0x00000080
+#define SSA_RTL 0x00000100
+#define SSA_GCP 0x00000200
+#define SSA_HOTKEY 0x00000400
+#define SSA_METAFILE 0x00000800
+#define SSA_LINK 0x00001000
+#define SSA_HIDEHOTKEY 0x00002000
+#define SSA_HOTKEYONLY 0x00002400
+#define SSA_FULLMEASURE 0x04000000
+#define SSA_LPKANSIFALLBACK 0x08000000
+#define SSA_PIDX 0x10000000
+#define SSA_LAYOUTRTL 0x20000000
+#define SSA_DONTGLYPH 0x40000000
+#define SSA_NOKASHIDA 0x80000000
+#define SIC_COMPLEX 1
+#define SIC_ASCIIDIGIT 2
+#define SIC_NEUTRAL 4
+#define SCRIPT_DIGITSUBSTITUTE_CONTEXT 0
+#define SCRIPT_DIGITSUBSTITUTE_NONE 1
+#define SCRIPT_DIGITSUBSTITUTE_NATIONAL 2
+#define SCRIPT_DIGITSUBSTITUTE_TRADITIONAL 3
+
+typedef enum tag_SCRIPT_JUSTIFY {
+ SCRIPT_JUSTIFY_NONE = 0,
+ SCRIPT_JUSTIFY_ARABIC_BLANK = 1,
+ SCRIPT_JUSTIFY_CHARACTER = 2,
+ SCRIPT_JUSTIFY_RESERVED1 = 3,
+ SCRIPT_JUSTIFY_BLANK = 4,
+ SCRIPT_JUSTIFY_RESERVED2 = 5,
+ SCRIPT_JUSTIFY_RESERVED3 = 6,
+ SCRIPT_JUSTIFY_ARABIC_NORMAL = 7,
+ SCRIPT_JUSTIFY_ARABIC_KASHIDA = 8,
+ SCRIPT_JUSTIFY_ARABIC_ALEF = 9,
+ SCRIPT_JUSTIFY_ARABIC_HA = 10,
+ SCRIPT_JUSTIFY_ARABIC_RA = 11,
+ SCRIPT_JUSTIFY_ARABIC_BA = 12,
+ SCRIPT_JUSTIFY_ARABIC_BARA = 13,
+ SCRIPT_JUSTIFY_ARABIC_SEEN = 14,
+ SCRIPT_JUSTIFY_ARABIC_SEEN_M = 15
+} SCRIPT_JUSTIFY;
+
+typedef struct tagGOFFSET {
+ LONG du;
+ LONG dv;
+} GOFFSET;
+typedef ULONG OPENTYPE_TAG;
+typedef struct opentype_feature_record{
+ OPENTYPE_TAG tagFeature;
+ LONG lParameter;
+} OPENTYPE_FEATURE_RECORD;
+typedef struct tag_SCRIPT_STATE {
+ WORD uBidiLevel :5;
+ WORD fOverrideDirection :1;
+ WORD fInhibitSymSwap :1;
+ WORD fCharShape :1;
+ WORD fDigitSubstitute :1;
+ WORD fInhibitLigate :1;
+ WORD fDisplayZWG :1;
+ WORD fArabicNumContext :1;
+ WORD fGcpClusters :1;
+ WORD fReserved :1;
+ WORD fEngineReserved :2;
+} SCRIPT_STATE;
+typedef struct tag_SCRIPT_ANALYSIS {
+ WORD eScript :10;
+ WORD fRTL :1;
+ WORD fLayoutRTL :1;
+ WORD fLinkBefore :1;
+ WORD fLinkAfter :1;
+ WORD fLogicalOrder :1;
+ WORD fNoGlyphIndex :1;
+ SCRIPT_STATE s ;
+} SCRIPT_ANALYSIS;
+typedef void *SCRIPT_CACHE;
+typedef struct script_charprop {
+ WORD fCanGlyphAlone : 1;
+ WORD reserved : 15;
+} SCRIPT_CHARPROP;
+typedef struct tag_SCRIPT_CONTROL {
+ DWORD uDefaultLanguage :16;
+ DWORD fContextDigits :1;
+ DWORD fInvertPreBoundDir :1;
+ DWORD fInvertPostBoundDir :1;
+ DWORD fLinkStringBefore :1;
+ DWORD fLinkStringAfter :1;
+ DWORD fNeutralOverride :1;
+ DWORD fNumericOverride :1;
+ DWORD fLegacyBidiClass :1;
+ DWORD fReserved :8;
+} SCRIPT_CONTROL;
+typedef struct tag_SCRIPT_DIGITSUBSTITUTE {
+ DWORD NationalDigitLanguage : 16;
+ DWORD TraditionalDigitLanguage : 16;
+ DWORD DigitSubstitute :8;
+ DWORD dwReserved;
+} SCRIPT_DIGITSUBSTITUTE;
+typedef struct {
+ int cBytes;
+ WORD wgBlank;
+ WORD wgDefault;
+ WORD wgInvalid;
+ WORD wgKashida;
+ int iKashidaWidth;
+} SCRIPT_FONTPROPERTIES;
+typedef struct tag_SCRIPT_VISATTR {
+ WORD uJustification :4;
+ WORD fClusterStart :1;
+ WORD fDiacritic :1;
+ WORD fZeroWidth :1;
+ WORD fReserved :1;
+ WORD fShapeReserved :8;
+} SCRIPT_VISATTR;
+typedef struct script_glyphprop {
+ SCRIPT_VISATTR sva;
+ WORD reserved;
+} SCRIPT_GLYPHPROP;
+typedef struct tag_SCRIPT_ITEM {
+ int iCharPos;
+ SCRIPT_ANALYSIS a;
+} SCRIPT_ITEM;
+typedef struct tag_SCRIPT_LOGATTR {
+ BYTE fSoftBreak :1;
+ BYTE fWhiteSpace :1;
+ BYTE fCharStop :1;
+ BYTE fWordStop :1;
+ BYTE fInvalid :1;
+ BYTE fReserved :3;
+} SCRIPT_LOGATTR;
+typedef struct {
+ DWORD langid :16;
+ DWORD fNumeric :1;
+ DWORD fComplex :1;
+ DWORD fNeedsWordBreaking :1;
+ DWORD fNeedsCaretInfo :1;
+ DWORD bCharSet :8;
+ DWORD fControl :1;
+ DWORD fPrivateUseArea :1;
+ DWORD fNeedsCharacterJustify :1;
+ DWORD fInvalidGlyph :1;
+ DWORD fInvalidLogAttr :1;
+ DWORD fCDM :1;
+ DWORD fAmbiguousCharSet :1;
+ DWORD fClusterSizeVaries :1;
+ DWORD fRejectInvalid :1;
+} SCRIPT_PROPERTIES;
+typedef void *SCRIPT_STRING_ANALYSIS;
+typedef struct tag_SCRIPT_TABDEF {
+ int cTabStops;
+ int iScale;
+ int *pTabStops;
+ int iTabOrigin;
+} SCRIPT_TABDEF;
+typedef struct textrange_properties{
+ OPENTYPE_FEATURE_RECORD* potfRecords;
+ int cotfRecords;
+} TEXTRANGE_PROPERTIES;
+
+
+HRESULT WINAPI ScriptApplyDigitSubstitution(const SCRIPT_DIGITSUBSTITUTE*,SCRIPT_CONTROL*,SCRIPT_STATE*);
+HRESULT WINAPI ScriptApplyLogicalWidth(const int *,int,int,const WORD *,const SCRIPT_VISATTR *,const int *,const SCRIPT_ANALYSIS *,ABC *,int *);
+HRESULT WINAPI ScriptBreak(const WCHAR *,int,const SCRIPT_ANALYSIS *,SCRIPT_LOGATTR *);
+HRESULT WINAPI ScriptCacheGetHeight(HDC,SCRIPT_CACHE *,long *);
+HRESULT WINAPI ScriptCPtoX(int,BOOL,int,int,const WORD *,const SCRIPT_VISATTR *,const int *,const SCRIPT_ANALYSIS *,int *);
+HRESULT WINAPI ScriptFreeCache(SCRIPT_CACHE *);
+HRESULT WINAPI ScriptGetCMap(HDC,SCRIPT_CACHE *,const WCHAR*,int,DWORD,WORD *);
+HRESULT WINAPI ScriptGetFontAlternateGlyphs(HDC,SCRIPT_CACHE*,SCRIPT_ANALYSIS*,OPENTYPE_TAG,OPENTYPE_TAG,OPENTYPE_TAG,WORD,int,WORD*,int*);
+HRESULT WINAPI ScriptGetFontFeatureTags(HDC,SCRIPT_CACHE*,SCRIPT_ANALYSIS*,OPENTYPE_TAG,OPENTYPE_TAG,int,OPENTYPE_TAG*,int*);
+HRESULT WINAPI ScriptGetFontLanguageTags(HDC,SCRIPT_CACHE*,SCRIPT_ANALYSIS*,OPENTYPE_TAG,int,OPENTYPE_TAG*,int*);
+HRESULT WINAPI ScriptGetFontProperties(HDC,SCRIPT_CACHE *,SCRIPT_FONTPROPERTIES *);
+HRESULT WINAPI ScriptGetFontScriptTags(HDC,SCRIPT_CACHE*,SCRIPT_ANALYSIS*,int,OPENTYPE_TAG*,int*);
+HRESULT WINAPI ScriptGetGlyphABCWidth(HDC,SCRIPT_CACHE *,WORD,ABC *);
+HRESULT WINAPI ScriptGetLogicalWidths(const SCRIPT_ANALYSIS *,int,int,const int *,const WORD *,const SCRIPT_VISATTR *,int *);
+HRESULT WINAPI ScriptGetProperties(const SCRIPT_PROPERTIES ***,int *);
+HRESULT WINAPI ScriptIsComplex(const WCHAR *,int,DWORD);
+HRESULT WINAPI ScriptItemize(const WCHAR *,int,int,const SCRIPT_CONTROL *,const SCRIPT_STATE *,SCRIPT_ITEM *,int *);
+HRESULT WINAPI ScriptItemizeOpenType(const WCHAR*,int,int,const SCRIPT_CONTROL*,const SCRIPT_STATE*,SCRIPT_ITEM*,OPENTYPE_TAG*,int*);
+HRESULT WINAPI ScriptJustify(const SCRIPT_VISATTR *,const int *,int,int,int,int *);
+HRESULT WINAPI ScriptLayout(int,const BYTE *,int *,int *);
+HRESULT WINAPI ScriptPlace(HDC,SCRIPT_CACHE *,const WORD *,int,const SCRIPT_VISATTR *,SCRIPT_ANALYSIS *,int *,GOFFSET *,ABC *);
+HRESULT WINAPI ScriptPlaceOpenType(HDC,SCRIPT_CACHE*,SCRIPT_ANALYSIS*,OPENTYPE_TAG,OPENTYPE_TAG,int*,TEXTRANGE_PROPERTIES**,int,const WCHAR*,const WORD*,const SCRIPT_CHARPROP*,int,const WORD*,const SCRIPT_GLYPHPROP*,int,int*,GOFFSET*,ABC*);
+HRESULT WINAPI ScriptPositionSingleGlyph(HDC,SCRIPT_CACHE*,SCRIPT_ANALYSIS*,OPENTYPE_TAG,OPENTYPE_TAG,OPENTYPE_TAG,LONG,WORD,int,GOFFSET,int*,GOFFSET*);
+HRESULT WINAPI ScriptRecordDigitSubstitution(LCID,SCRIPT_DIGITSUBSTITUTE *);
+HRESULT WINAPI ScriptShape(HDC,SCRIPT_CACHE *,const WCHAR *,int,int,SCRIPT_ANALYSIS *,WORD *,WORD *,SCRIPT_VISATTR *,int *);
+HRESULT WINAPI ScriptShapeOpenType(HDC,SCRIPT_CACHE*,SCRIPT_ANALYSIS*,OPENTYPE_TAG,OPENTYPE_TAG,int*,TEXTRANGE_PROPERTIES**,int,const WCHAR*,int,int,WORD*,SCRIPT_CHARPROP*,WORD*,SCRIPT_GLYPHPROP*,int*);
+HRESULT WINAPI ScriptStringAnalyse(HDC,const void *,int,int,int,DWORD,int,SCRIPT_CONTROL *,SCRIPT_STATE *,const int *,SCRIPT_TABDEF *,const BYTE *,SCRIPT_STRING_ANALYSIS *);
+HRESULT WINAPI ScriptStringCPtoX(SCRIPT_STRING_ANALYSIS,int,BOOL,int *);
+HRESULT WINAPI ScriptStringFree(SCRIPT_STRING_ANALYSIS *);
+HRESULT WINAPI ScriptStringGetLogicalWidths(SCRIPT_STRING_ANALYSIS,int *);
+HRESULT WINAPI ScriptStringGetOrder(SCRIPT_STRING_ANALYSIS,UINT *);
+HRESULT WINAPI ScriptStringOut(SCRIPT_STRING_ANALYSIS,int,int,UINT,const RECT *,int,int,BOOL);
+const int*WINAPI ScriptString_pcOutChars(SCRIPT_STRING_ANALYSIS);
+const SCRIPT_LOGATTR* WINAPI ScriptString_pLogAttr(SCRIPT_STRING_ANALYSIS);
+const SIZE* WINAPI ScriptString_pSize(SCRIPT_STRING_ANALYSIS);
+HRESULT WINAPI ScriptStringValidate(SCRIPT_STRING_ANALYSIS);
+HRESULT WINAPI ScriptStringXtoCP(SCRIPT_STRING_ANALYSIS,int,int *,int *);
+HRESULT WINAPI ScriptSubstituteSingleGlyph(HDC,SCRIPT_CACHE*,SCRIPT_ANALYSIS*,OPENTYPE_TAG,OPENTYPE_TAG,OPENTYPE_TAG,LONG,WORD,WORD*);
+HRESULT WINAPI ScriptTextOut(const HDC,SCRIPT_CACHE *,int,int,UINT,const RECT *,const SCRIPT_ANALYSIS *,const WCHAR *,int,const WORD *,int,const int *,const int *,const GOFFSET *);
+HRESULT WINAPI ScriptXtoCP(int,int,int,const WORD *,const SCRIPT_VISATTR *,const int *,const SCRIPT_ANALYSIS *,int *,int *);
+
+
+#pragma pack(pop)
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ndef _USP10_H_ */
diff --git a/tcc/include/winapi/uxtheme.h b/tcc/include/winapi/uxtheme.h
new file mode 100644
index 0000000..5d06bc8
--- /dev/null
+++ b/tcc/include/winapi/uxtheme.h
@@ -0,0 +1,273 @@
+#ifndef _UXTHEME_H
+#define _UXTHEME_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#include <commctrl.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if (_WIN32_WINNT >= 0x0501)
+#define DTBG_CLIPRECT 0x00000001
+#define DTBG_DRAWSOLID 0x00000002
+#define DTBG_OMITBORDER 0x00000004
+#define DTBG_OMITCONTENT 0x00000008
+#define DTBG_COMPUTINGREGION 0x00000010
+#define DTBG_MIRRORDC 0x00000020
+#define DTT_GRAYED 0x00000001
+#define ETDT_DISABLE 0x00000001
+#define ETDT_ENABLE 0x00000002
+#define ETDT_USETABTEXTURE 0x00000004
+#define ETDT_ENABLETAB (ETDT_ENABLE|ETDT_USETABTEXTURE)
+#define STAP_ALLOW_NONCLIENT 0x00000001
+#define STAP_ALLOW_CONTROLS 0x00000002
+#define STAP_ALLOW_WEBCONTENT 0x00000004
+#define HTTB_BACKGROUNDSEG 0x0000
+#define HTTB_FIXEDBORDER 0x0002
+#define HTTB_CAPTION 0x0004
+#define HTTB_RESIZINGBORDER_LEFT 0x0010
+#define HTTB_RESIZINGBORDER_TOP 0x0020
+#define HTTB_RESIZINGBORDER_RIGHT 0x0040
+#define HTTB_RESIZINGBORDER_BOTTOM 0x0080
+#define HTTB_RESIZINGBORDER (HTTB_RESIZINGBORDER_LEFT|HTTB_RESIZINGBORDER_TOP|HTTB_RESIZINGBORDER_RIGHT|HTTB_RESIZINGBORDER_BOTTOM)
+#define HTTB_SIZINGTEMPLATE 0x0100
+#define HTTB_SYSTEMSIZINGMARGINS 0x0200
+#define TMT_DISPLAYNAME 0x0259
+#define TMT_TOOLTIP 0x025A
+#define TMT_COMPANY 0x025B
+#define TMT_AUTHOR 0x025C
+#define TMT_COPYRIGHT 0x025D
+#define TMT_URL 0x025E
+#define TMT_VERSION 0x025F
+#define TMT_DESCRIPTION 0x0260
+#define TMT_CAPTIONFONT 0x0321
+#define TMT_SMALLCAPTIONFONT 0x0322
+#define TMT_MENUFONT 0x0323
+#define TMT_STATUSFONT 0x0324
+#define TMT_MSGBOXFONT 0x0325
+#define TMT_ICONTITLEFONT 0x0326
+#define TMT_FLATMENUS 0x03E9
+#define TMT_MINCOLORDEPTH 0x0515
+#define TMT_CSSNAME 0x0579
+#define TMT_XMLNAME 0x057A
+#define TMT_SCROLLBAR 0x0641
+#define TMT_BACKGROUND 0x0642
+#define TMT_ACTIVECAPTION 0x0643
+#define TMT_INACTIVECAPTION 0x0644
+#define TMT_WINDOW 0x0646
+#define TMT_WINDOWFRAME 0x0647
+#define TMT_MENUTEXT 0x0648
+#define TMT_WINDOWTEXT 0x0649
+#define TMT_CAPTIONTEXT 0x064A
+#define TMT_ACTIVEBORDER 0x064B
+#define TMT_INACTIVEBORDER 0x064C
+#define TMT_APPWORKSPACE 0x064D
+#define TMT_HIGHLIGHT 0x064E
+#define TMT_HIGHLIGHTTEXT 0x064F
+#define TMT_BTNFACE 0x0650
+#define TMT_BTNSHADOW 0x0651
+#define TMT_GRAYTEXT 0x0652
+#define TMT_BTNTEXT 0x0653
+#define TMT_INACTIVECAPTIONTEXT 0x0654
+#define TMT_BTNHIGHLIGHT 0x0655
+#define TMT_DKSHADOW3D 0x0656
+#define TMT_LIGHT3D 0x0657
+#define TMT_INFOTEXT 0x0658
+#define TMT_INFOBK 0x0659
+#define TMT_BUTTONALTERNATEFACE 0x065A
+#define TMT_HOTTRACKING 0x065B
+#define TMT_GRADIENTACTIVECAPTION 0x065C
+#define TMT_GRADIENTINACTIVECAPTION 0x065D
+#define TMT_MENUHILIGHT 0x065E
+#define TMT_MENUBAR 0x065F
+#define TMT_TRANSPARENT 0x0899
+#define TMT_AUTOSIZE 0x089A
+#define TMT_BORDERONLY 0x089B
+#define TMT_COMPOSITED 0x089C
+#define TMT_BGFILL 0x089D
+#define TMT_GLYPHTRANSPARENT 0x089E
+#define TMT_GLYPHONLY 0x089F
+#define TMT_ALWAYSSHOWSIZINGBAR 0x08A0
+#define TMT_MIRRORIMAGE 0x08A1
+#define TMT_UNIFORMSIZING 0x08A2
+#define TMT_INTEGRALSIZING 0x08A3
+#define TMT_SOURCEGROW 0x08A4
+#define TMT_SOURCESHRINK 0x08A5
+#define TMT_IMAGECOUNT 0x0961
+#define TMT_ALPHALEVEL 0x0962
+#define TMT_BORDERSIZE 0x0963
+#define TMT_ROUNDCORNERWIDTH 0x0964
+#define TMT_ROUNDCORNERHEIGHT 0x0965
+#define TMT_GRADIENTRATIO1 0x0966
+#define TMT_GRADIENTRATIO2 0x0967
+#define TMT_GRADIENTRATIO3 0x0968
+#define TMT_GRADIENTRATIO4 0x0969
+#define TMT_GRADIENTRATIO5 0x096A
+#define TMT_PROGRESSCHUNKSIZE 0x096B
+#define TMT_PROGRESSSPACESIZE 0x096C
+#define TMT_SATURATION 0x096D
+#define TMT_TEXTBORDERSIZE 0x096E
+#define TMT_ALPHATHRESHOLD 0x096F
+#define TMT_WIDTH 0x0970
+#define TMT_HEIGHT 0x0971
+#define TMT_GLYPHINDEX 0x0972
+#define TMT_TRUESIZESTRETCHMARK 0x0973
+#define TMT_MINDPI1 0x0974
+#define TMT_MINDPI2 0x0975
+#define TMT_MINDPI3 0x0976
+#define TMT_MINDPI4 0x0977
+#define TMT_MINDPI5 0x0978
+#define TMT_GLYPHFONT 0x0A29
+#define TMT_IMAGEFILE 0x0BB9
+#define TMT_IMAGEFILE1 0x0BBA
+#define TMT_IMAGEFILE2 0x0BBB
+#define TMT_IMAGEFILE3 0x0BBC
+#define TMT_IMAGEFILE4 0x0BBD
+#define TMT_IMAGEFILE5 0x0BBE
+#define TMT_STOCKIMAGEFILE 0x0BBF
+#define TMT_GLYPHIMAGEFILE 0x0BC0
+#define TMT_TEXT 0x0C81
+#define TMT_OFFSET 0x0D49
+#define TMT_TEXTSHADOWOFFSET 0x0D4A
+#define TMT_MINSIZE 0x0D4B
+#define TMT_MINSIZE1 0x0D4C
+#define TMT_MINSIZE2 0x0D4D
+#define TMT_MINSIZE3 0x0D4E
+#define TMT_MINSIZE4 0x0D4F
+#define TMT_MINSIZE5 0x0D50
+#define TMT_NORMALSIZE 0x0D51
+#define TMT_SIZINGMARGINS 0x0E11
+#define TMT_CONTENTMARGINS 0x0E12
+#define TMT_CAPTIONMARGINS 0x0E13
+#define TMT_BORDERCOLOR 0x0ED9
+#define TMT_FILLCOLOR 0x0EDA
+#define TMT_TEXTCOLOR 0x0EDB
+#define TMT_EDGELIGHTCOLOR 0x0EDC
+#define TMT_EDGEHIGHLIGHTCOLOR 0x0EDD
+#define TMT_EDGESHADOWCOLOR 0x0EDE
+#define TMT_EDGEDKSHADOWCOLOR 0x0EDF
+#define TMT_EDGEFILLCOLOR 0x0EE0
+#define TMT_TRANSPARENTCOLOR 0x0EE1
+#define TMT_GRADIENTCOLOR1 0x0EE2
+#define TMT_GRADIENTCOLOR2 0x0EE3
+#define TMT_GRADIENTCOLOR3 0x0EE4
+#define TMT_GRADIENTCOLOR4 0x0EE5
+#define TMT_GRADIENTCOLOR5 0x0EE6
+#define TMT_SHADOWCOLOR 0x0EE7
+#define TMT_GLOWCOLOR 0x0EE8
+#define TMT_TEXTBORDERCOLOR 0x0EE9
+#define TMT_TEXTSHADOWCOLOR 0x0EEA
+#define TMT_GLYPHTEXTCOLOR 0x0EEB
+#define TMT_GLYPHTRANSPARENTCOLOR 0x0EEC
+#define TMT_FILLCOLORHINT 0x0EED
+#define TMT_BORDERCOLORHINT 0x0EEE
+#define TMT_ACCENTCOLORHINT 0x0EEF
+#define TMT_BGTYPE 0x0FA1
+#define TMT_BORDERTYPE 0x0FA2
+#define TMT_FILLTYPE 0x0FA3
+#define TMT_SIZINGTYPE 0x0FA4
+#define TMT_HALIGN 0x0FA5
+#define TMT_CONTENTALIGNMENT 0x0FA6
+#define TMT_VALIGN 0x0FA7
+#define TMT_OFFSETTYPE 0x0FA8
+#define TMT_ICONEFFECT 0x0FA9
+#define TMT_TEXTSHADOWTYPE 0x0FAA
+#define TMT_IMAGELAYOUT 0x0FAB
+#define TMT_GLYPHTYPE 0x0FAC
+#define TMT_IMAGESELECTTYPE 0x0FAD
+#define TMT_GLYPHFONTSIZINGTYPE 0x0FAE
+#define TMT_TRUESIZESCALINGTYPE 0x0FAF
+#define TMT_USERPICTURE 0x1389
+#define TMT_DEFAULTPANESIZE 0x138A
+#define TMT_BLENDCOLOR 0x138B
+#define BT_IMAGEFILE 0x0000
+#define BT_BORDERFILL 0x0001
+#define BT_NONE 0x0002
+
+typedef enum PROPERTYORIGIN {
+ PO_STATE = 0,
+ PO_PART = 1,
+ PO_CLASS = 2,
+ PO_GLOBAL = 3,
+ PO_NOTFOUND = 4
+} PROPERTYORIGIN;
+typedef enum THEMESIZE {
+ TS_MIN,
+ TS_TRUE,
+ TS_DRAW
+} THEME_SIZE;
+typedef struct _DTBGOPTS {
+ DWORD dwSize;
+ DWORD dwFlags;
+ RECT rcClip;
+} DTBGOPTS, *PDTBGOPTS;
+#define MAX_INTLIST_COUNT 10
+typedef struct _INTLIST {
+ int iValueCount;
+ int iValues[MAX_INTLIST_COUNT];
+} INTLIST, *PINTLIST;
+typedef struct _MARGINS {
+ int cxLeftWidth;
+ int cxRightWidth;
+ int cyTopHeight;
+ int cyBottomHeight;
+} MARGINS, *PMARGINS;
+typedef HANDLE HTHEME;
+
+HRESULT WINAPI CloseThemeData(HTHEME);
+HRESULT WINAPI DrawThemeBackground(HTHEME,HDC,int,int,const RECT*,const RECT*);
+HRESULT WINAPI DrawThemeBackgroundEx(HTHEME,HDC,int,int,const RECT*,const DTBGOPTS*);
+HRESULT WINAPI DrawThemeEdge(HTHEME,HDC,int,int,const RECT*,UINT,UINT,RECT*);
+HRESULT WINAPI DrawThemeIcon(HTHEME,HDC,int,int,const RECT*,HIMAGELIST,int);
+HRESULT WINAPI DrawThemeParentBackground(HWND,HDC,RECT*);
+HRESULT WINAPI DrawThemeText(HTHEME,HDC,int,int,LPCWSTR,int,DWORD,DWORD,const RECT*);
+HRESULT WINAPI EnableThemeDialogTexture(HWND,DWORD);
+HRESULT WINAPI EnableTheming(BOOL);
+HRESULT WINAPI GetCurrentThemeName(LPWSTR,int,LPWSTR,int,LPWSTR,int);
+DWORD WINAPI GetThemeAppProperties();
+HRESULT WINAPI GetThemeBackgroundContentRect(HTHEME,HDC,int,int,const RECT*,RECT*);
+HRESULT WINAPI GetThemeBackgroundExtent(HTHEME,HDC,int,int,const RECT*,RECT*);
+HRESULT WINAPI GetThemeBackgroundRegion(HTHEME,HDC,int,int,const RECT*,HRGN*);
+HRESULT WINAPI GetThemeBool(HTHEME,int,int,int,BOOL*);
+HRESULT WINAPI GetThemeColor(HTHEME,int,int,int,COLORREF*);
+HRESULT WINAPI GetThemeDocumentationProperty(LPCWSTR,LPCWSTR,LPWSTR,int);
+HRESULT WINAPI GetThemeEnumValue(HTHEME,int,int,int,int*);
+HRESULT WINAPI GetThemeFilename(HTHEME,int,int,int,LPWSTR,int);
+HRESULT WINAPI GetThemeFont(HTHEME,HDC,int,int,int,LOGFONT*);
+HRESULT WINAPI GetThemeInt(HTHEME,int,int,int,int*);
+HRESULT WINAPI GetThemeIntList(HTHEME,int,int,int,INTLIST*);
+HRESULT WINAPI GetThemeMargins(HTHEME,HDC,int,int,int,RECT*,MARGINS*);
+HRESULT WINAPI GetThemeMetric(HTHEME,HDC,int,int,int,int*);
+HRESULT WINAPI GetThemePartSize(HTHEME,HDC,int,int,RECT*,THEME_SIZE,SIZE*);
+HRESULT WINAPI GetThemePosition(HTHEME,int,int,int,POINT*);
+HRESULT WINAPI GetThemePropertyOrigin(HTHEME,int,int,int,PROPERTYORIGIN*);
+HRESULT WINAPI GetThemeRect(HTHEME,int,int,int,RECT*);
+HRESULT WINAPI GetThemeString(HTHEME,int,int,int,LPWSTR,int);
+BOOL WINAPI GetThemeSysBool(HTHEME,int);
+COLORREF WINAPI GetThemeSysColor(HTHEME,int);
+HBRUSH WINAPI GetThemeSysColorBrush(HTHEME,int);
+HRESULT WINAPI GetThemeSysFont(HTHEME,int,LOGFONT*);
+HRESULT WINAPI GetThemeSysInt(HTHEME,int,int*);
+int WINAPI GetThemeSysSize(HTHEME,int);
+HRESULT WINAPI GetThemeSysString(HTHEME,int,LPWSTR,int);
+HRESULT WINAPI GetThemeTextExtent(HTHEME,HDC,int,int,LPCWSTR,int,DWORD,const RECT*,RECT*);
+HRESULT WINAPI GetThemeTextMetrics(HTHEME,HDC,int,int,TEXTMETRIC*);
+HTHEME WINAPI GetWindowTheme(HWND);
+HRESULT WINAPI HitTestThemeBackground(HTHEME,HDC,int,int,DWORD,const RECT*,HRGN,POINT,WORD*);
+BOOL WINAPI IsAppThemed();
+BOOL WINAPI IsThemeActive();
+BOOL WINAPI IsThemeBackgroundPartiallyTransparent(HTHEME,int,int);
+BOOL WINAPI IsThemeDialogTextureEnabled(HWND);
+BOOL WINAPI IsThemePartDefined(HTHEME,int,int);
+HTHEME WINAPI OpenThemeData(HWND,LPCWSTR);
+void WINAPI SetThemeAppProperties(DWORD);
+HRESULT WINAPI SetWindowTheme(HWND,LPCWSTR,LPCWSTR);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/vfw.h b/tcc/include/winapi/vfw.h
new file mode 100644
index 0000000..950340b
--- /dev/null
+++ b/tcc/include/winapi/vfw.h
@@ -0,0 +1,1370 @@
+#ifndef _VFW_H
+#define _VFW_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifndef _WINDOWS_H
+#include <windows.h>
+#endif
+#ifndef _MMSYSTEM_H
+#include <mmsystem.h>
+#endif
+#if !defined (_OLE2_H) && !defined (_OBJC_NO_COM)
+#include <ole2.h>
+#endif
+
+#define VFWAPI WINAPI
+#define VFWAPIV WINAPIV
+
+#include <pshpack8.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define ICERR_OK 0
+#define ICERR_DONTDRAW 1
+#define ICERR_NEWPALETTE 2
+#define ICERR_GOTOKEYFRAME 3
+#define ICERR_STOPDRAWING 4
+#define ICERR_UNSUPPORTED -1
+#define ICERR_BADFORMAT -2
+#define ICERR_MEMORY -3
+#define ICERR_INTERNAL -4
+#define ICERR_BADFLAGS -5
+#define ICERR_BADPARAM -6
+#define ICERR_BADSIZE -7
+#define ICERR_BADHANDLE -8
+#define ICERR_CANTUPDATE -9
+#define ICERR_ABORT -10
+#define ICERR_ERROR -100
+#define ICERR_BADBITDEPTH -200
+#define ICERR_BADIMAGESIZE -201
+#define ICERR_CUSTOM -400
+#define ICCOMPRESSFRAMES_PADDING 0x01
+#define ICM_USER (DRV_USER+0x0000)
+#define ICM_RESERVED_LOW (DRV_USER+0x1000)
+#define ICM_RESERVED_HIGH (DRV_USER+0x2000)
+#define ICM_RESERVED ICM_RESERVED_LOW
+#define ICM_GETSTATE (ICM_RESERVED+0)
+#define ICM_SETSTATE (ICM_RESERVED+1)
+#define ICM_GETINFO (ICM_RESERVED+2)
+#define ICM_CONFIGURE (ICM_RESERVED+10)
+#define ICM_ABOUT (ICM_RESERVED+11)
+#define ICM_GETDEFAULTQUALITY (ICM_RESERVED+30)
+#define ICM_GETQUALITY (ICM_RESERVED+31)
+#define ICM_SETQUALITY (ICM_RESERVED+32)
+#define ICM_SET (ICM_RESERVED+40)
+#define ICM_GET (ICM_RESERVED+41)
+#define ICM_FRAMERATE mmioFOURCC('F','r','m','R')
+#define ICM_KEYFRAMERATE mmioFOURCC('K','e','y','R')
+#define ICM_COMPRESS_GET_FORMAT (ICM_USER+4)
+#define ICM_COMPRESS_GET_SIZE (ICM_USER+5)
+#define ICM_COMPRESS_QUERY (ICM_USER+6)
+#define ICM_COMPRESS_BEGIN (ICM_USER+7)
+#define ICM_COMPRESS (ICM_USER+8)
+#define ICM_COMPRESS_END (ICM_USER+9)
+#define ICM_DECOMPRESS_GET_FORMAT (ICM_USER+10)
+#define ICM_DECOMPRESS_QUERY (ICM_USER+11)
+#define ICM_DECOMPRESS_BEGIN (ICM_USER+12)
+#define ICM_DECOMPRESS (ICM_USER+13)
+#define ICM_DECOMPRESS_END (ICM_USER+14)
+#define ICM_DECOMPRESS_SET_PALETTE (ICM_USER+29)
+#define ICM_DECOMPRESS_GET_PALETTE (ICM_USER+30)
+#define ICM_DRAW_QUERY (ICM_USER+31)
+#define ICM_DRAW_BEGIN (ICM_USER+15)
+#define ICM_DRAW_GET_PALETTE (ICM_USER+16)
+#define ICM_DRAW_START (ICM_USER+18)
+#define ICM_DRAW_STOP (ICM_USER+19)
+#define ICM_DRAW_END (ICM_USER+21)
+#define ICM_DRAW_GETTIME (ICM_USER+32)
+#define ICM_DRAW (ICM_USER+33)
+#define ICM_DRAW_WINDOW (ICM_USER+34)
+#define ICM_DRAW_SETTIME (ICM_USER+35)
+#define ICM_DRAW_REALIZE (ICM_USER+36)
+#define ICM_DRAW_FLUSH (ICM_USER+37)
+#define ICM_DRAW_RENDERBUFFER (ICM_USER+38)
+#define ICM_DRAW_START_PLAY (ICM_USER+39)
+#define ICM_DRAW_STOP_PLAY (ICM_USER+40)
+#define ICM_DRAW_SUGGESTFORMAT (ICM_USER+50)
+#define ICM_DRAW_CHANGEPALETTE (ICM_USER+51)
+#define ICM_GETBUFFERSWANTED (ICM_USER+41)
+#define ICM_GETDEFAULTKEYFRAMERATE (ICM_USER+42)
+#define ICM_DECOMPRESSEX_BEGIN (ICM_USER+60)
+#define ICM_DECOMPRESSEX_QUERY (ICM_USER+61)
+#define ICM_DECOMPRESSEX (ICM_USER+62)
+#define ICM_DECOMPRESSEX_END (ICM_USER+63)
+#define ICM_COMPRESS_FRAMES_INFO (ICM_USER+70)
+#define ICM_SET_STATUS_PROC (ICM_USER+72)
+#define ICMF_CONFIGURE_QUERY 0x01
+#define ICCOMPRESS_KEYFRAME 0x01
+#define ICSTATUS_START 0
+#define ICSTATUS_STATUS 1
+#define ICSTATUS_END 2
+#define ICSTATUS_ERROR 3
+#define ICSTATUS_YIELD 4
+#define ICMODE_COMPRESS 1
+#define ICMODE_DECOMPRESS 2
+#define ICMODE_FASTDECOMPRESS 3
+#define ICMODE_QUERY 4
+#define ICMODE_FASTCOMPRESS 5
+#define ICMODE_DRAW 8
+#define ICQUALITY_LOW 0
+#define ICQUALITY_HIGH 10000
+#define ICQUALITY_DEFAULT -1
+#define VIDCF_QUALITY 0x01
+#define VIDCF_CRUNCH 0x02
+#define VIDCF_TEMPORAL 0x04
+#define VIDCF_COMPRESSFRAMES 0x08
+#define VIDCF_DRAW 0x10
+#define VIDCF_FASTTEMPORALC 0x20
+#define VIDCF_FASTTEMPORALD 0x80
+#define VIDCF_QUALITYTIME 0x40
+#define VIDCF_FASTTEMPORAL (VIDCF_FASTTEMPORALC|VIDCF_FASTTEMPORALD)
+#define ICMF_ABOUT_QUERY 0x01
+#define ICDECOMPRESS_HURRYUP 0x80000000
+#define ICDECOMPRESS_UPDATE 0x40000000
+#define ICDECOMPRESS_PREROLL 0x20000000
+#define ICDECOMPRESS_NULLFRAME 0x10000000
+#define ICDECOMPRESS_NOTKEYFRAME 0x8000000
+#define ICDRAW_QUERY 0x01L
+#define ICDRAW_FULLSCREEN 0x02L
+#define ICDRAW_HDC 0x04L
+#define ICDRAW_ANIMATE 0x08L
+#define ICDRAW_CONTINUE 0x10L
+#define ICDRAW_MEMORYDC 0x20L
+#define ICDRAW_UPDATING 0x40L
+#define ICDRAW_RENDER 0x80L
+#define ICDRAW_BUFFER 0x100L
+#define ICINSTALL_UNICODE 0x8000
+#define ICINSTALL_FUNCTION 0x01
+#define ICINSTALL_DRIVER 0x02
+#define ICINSTALL_HDRV 0x04
+#define ICINSTALL_DRIVERW 0x8002
+#define ICDRAW_HURRYUP 0x80000000L
+#define ICDRAW_UPDATE 0x40000000L
+#define ICDRAW_PREROLL 0x20000000L
+#define ICDRAW_NULLFRAME 0x10000000L
+#define ICDRAW_NOTKEYFRAME 0x8000000L
+#define ICMF_COMPVARS_VALID 0x01
+#define ICMF_CHOOSE_KEYFRAME 0x01
+#define ICMF_CHOOSE_DATARATE 0x02
+#define ICMF_CHOOSE_PREVIEW 0x04
+#define ICMF_CHOOSE_ALLCOMPRESSORS 0x08
+#define ICTYPE_VIDEO mmioFOURCC('v','i','d','c')
+#define ICTYPE_AUDIO mmioFOURCC('a','u','d','c')
+#define formtypeAVI mmioFOURCC('A','V','I',' ')
+#define listtypeAVIHEADER mmioFOURCC('h','d','r','l')
+#define ckidAVIMAINHDR mmioFOURCC('a','v','i','h')
+#define listtypeSTREAMHEADER mmioFOURCC('s','t','r','l')
+#define ckidSTREAMHEADER mmioFOURCC('s','t','r','h')
+#define ckidSTREAMFORMAT mmioFOURCC('s','t','r','f')
+#define ckidSTREAMHANDLERDATA mmioFOURCC('s','t','r','d')
+#define ckidSTREAMNAME mmioFOURCC('s','t','r','n')
+#define listtypeAVIMOVIE mmioFOURCC('m','o','v','i')
+#define listtypeAVIRECORD mmioFOURCC('r','e','c',' ')
+#define ckidAVINEWINDEX mmioFOURCC('i', 'd', 'x', '1')
+#define streamtypeANY 0UL
+#define streamtypeVIDEO mmioFOURCC('v','i','d','s')
+#define streamtypeAUDIO mmioFOURCC('a','u','d','s')
+#define streamtypeMIDI mmioFOURCC('m','i','d','s')
+#define streamtypeTEXT mmioFOURCC('t','x','t','s')
+#define cktypeDIBbits aviTWOCC('d','b')
+#define cktypeDIBcompressed aviTWOCC('d','c')
+#define cktypePALchange aviTWOCC('p','c')
+#define cktypeWAVEbytes aviTWOCC('w','b')
+#define ckidAVIPADDING mmioFOURCC('J','U','N','K')
+#define FromHex(n) (((n)>='A')?((n)+10-'A'):((n)-'0'))
+#define StreamFromFOURCC(fcc) ((WORD)((FromHex(LOBYTE(LOWORD(fcc)))<<4)+(FromHex(HIBYTE(LOWORD(fcc))))))
+#define TWOCCFromFOURCC(fcc) HIWORD(fcc)
+#define ToHex(n) ((BYTE)(((n)>9)?((n)-10+'A'):((n)+'0')))
+#define MAKEAVICKID(tcc, stream) MAKELONG((ToHex((stream)&0x0f)<<8)|(ToHex(((stream)&0xf0)>>4)),tcc)
+#define AVIF_HASINDEX 0x10
+#define AVIF_MUSTUSEINDEX 0x20
+#define AVIF_ISINTERLEAVED 0x100
+#define AVIF_TRUSTCKTYPE 0x800
+#define AVIF_WASCAPTUREFILE 0x10000
+#define AVIF_COPYRIGHTED 0x20000
+#define AVI_HEADERSIZE 2048
+#define AVISF_DISABLED 0x01
+#define AVISF_VIDEO_PALCHANGES 0x10000
+#define AVIIF_LIST 0x01
+#define AVIIF_TWOCC 0x02
+#define AVIIF_KEYFRAME 0x10
+#define AVIIF_NOTIME 0x100
+#define AVIIF_COMPUSE 0xfff0000
+#define AVIIF_KEYFRAME 0x10
+#define AVIGETFRAMEF_BESTDISPLAYFMT 1
+#define AVISTREAMINFO_DISABLED 0x01
+#define AVISTREAMINFO_FORMATCHANGES 0x10000
+#define AVIFILEINFO_HASINDEX 0x10
+#define AVIFILEINFO_MUSTUSEINDEX 0x20
+#define AVIFILEINFO_ISINTERLEAVED 0x100
+#define AVIFILEINFO_TRUSTCKTYPE 0x800
+#define AVIFILEINFO_WASCAPTUREFILE 0x10000
+#define AVIFILEINFO_COPYRIGHTED 0x20000
+#define AVIFILECAPS_CANREAD 0x01
+#define AVIFILECAPS_CANWRITE 0x02
+#define AVIFILECAPS_ALLKEYFRAMES 0x10
+#define AVIFILECAPS_NOCOMPRESSION 0x20
+#define AVICOMPRESSF_INTERLEAVE 0x01
+#define AVICOMPRESSF_DATARATE 0x02
+#define AVICOMPRESSF_KEYFRAMES 0x04
+#define AVICOMPRESSF_VALID 0x08
+#define FIND_DIR 0x0000000fL
+#define FIND_NEXT 0x00000001L
+#define FIND_PREV 0x00000004L
+#define FIND_FROM_START 0x00000008L
+#define FIND_TYPE 0x000000f0L
+#define FIND_KEY 0x00000010L
+#define FIND_ANY 0x00000020L
+#define FIND_FORMAT 0x00000040L
+#define FIND_RET 0x0000f000L
+#define FIND_POS 0x00000000L
+#define FIND_LENGTH 0x00001000L
+#define FIND_OFFSET 0x00002000L
+#define FIND_SIZE 0x00003000L
+#define FIND_INDEX 0x00004000L
+#define AVIERR_OK 0
+#define MAKE_AVIERR(e) MAKE_SCODE(SEVERITY_ERROR,FACILITY_ITF,0x4000+e)
+#define AVIERR_UNSUPPORTED MAKE_AVIERR(101)
+#define AVIERR_BADFORMAT MAKE_AVIERR(102)
+#define AVIERR_MEMORY MAKE_AVIERR(103)
+#define AVIERR_INTERNAL MAKE_AVIERR(104)
+#define AVIERR_BADFLAGS MAKE_AVIERR(105)
+#define AVIERR_BADPARAM MAKE_AVIERR(106)
+#define AVIERR_BADSIZE MAKE_AVIERR(107)
+#define AVIERR_BADHANDLE MAKE_AVIERR(108)
+#define AVIERR_FILEREAD MAKE_AVIERR(109)
+#define AVIERR_FILEWRITE MAKE_AVIERR(110)
+#define AVIERR_FILEOPEN MAKE_AVIERR(111)
+#define AVIERR_COMPRESSOR MAKE_AVIERR(112)
+#define AVIERR_NOCOMPRESSOR MAKE_AVIERR(113)
+#define AVIERR_READONLY MAKE_AVIERR(114)
+#define AVIERR_NODATA MAKE_AVIERR(115)
+#define AVIERR_BUFFERTOOSMALL MAKE_AVIERR(116)
+#define AVIERR_CANTCOMPRESS MAKE_AVIERR(117)
+#define AVIERR_USERABORT MAKE_AVIERR(198)
+#define AVIERR_ERROR MAKE_AVIERR(199)
+#define MCIWNDOPENF_NEW 0x0001
+#define MCIWNDF_NOAUTOSIZEWINDOW 0x0001
+#define MCIWNDF_NOPLAYBAR 0x0002
+#define MCIWNDF_NOAUTOSIZEMOVIE 0x0004
+#define MCIWNDF_NOMENU 0x0008
+#define MCIWNDF_SHOWNAME 0x0010
+#define MCIWNDF_SHOWPOS 0x0020
+#define MCIWNDF_SHOWMODE 0x0040
+#define MCIWNDF_SHOWALL 0x0070
+#define MCIWNDF_NOTIFYMODE 0x0100
+#define MCIWNDF_NOTIFYPOS 0x0200
+#define MCIWNDF_NOTIFYSIZE 0x0400
+#define MCIWNDF_NOTIFYERROR 0x1000
+#define MCIWNDF_NOTIFYALL 0x1F00
+#define MCIWNDF_NOTIFYANSI 0x0080
+#define MCIWNDF_NOTIFYMEDIAA 0x0880
+#define MCIWNDF_NOTIFYMEDIAW 0x0800
+#define MCIWNDF_RECORD 0x2000
+#define MCIWNDF_NOERRORDLG 0x4000
+#define MCIWNDF_NOOPEN 0x8000
+#define MCIWNDM_GETDEVICEID (WM_USER + 100)
+#define MCIWNDM_GETSTART (WM_USER + 103)
+#define MCIWNDM_GETLENGTH (WM_USER + 104)
+#define MCIWNDM_GETEND (WM_USER + 105)
+#define MCIWNDM_EJECT (WM_USER + 107)
+#define MCIWNDM_SETZOOM (WM_USER + 108)
+#define MCIWNDM_GETZOOM (WM_USER + 109)
+#define MCIWNDM_SETVOLUME (WM_USER + 110)
+#define MCIWNDM_GETVOLUME (WM_USER + 111)
+#define MCIWNDM_SETSPEED (WM_USER + 112)
+#define MCIWNDM_GETSPEED (WM_USER + 113)
+#define MCIWNDM_SETREPEAT (WM_USER + 114)
+#define MCIWNDM_GETREPEAT (WM_USER + 115)
+#define MCIWNDM_REALIZE (WM_USER + 118)
+#define MCIWNDM_VALIDATEMEDIA (WM_USER + 121)
+#define MCIWNDM_PLAYFROM (WM_USER + 122)
+#define MCIWNDM_PLAYTO (WM_USER + 123)
+#define MCIWNDM_GETPALETTE (WM_USER + 126)
+#define MCIWNDM_SETPALETTE (WM_USER + 127)
+#define MCIWNDM_SETTIMERS (WM_USER + 129)
+#define MCIWNDM_SETACTIVETIMER (WM_USER + 130)
+#define MCIWNDM_SETINACTIVETIMER (WM_USER + 131)
+#define MCIWNDM_GETACTIVETIMER (WM_USER + 132)
+#define MCIWNDM_GETINACTIVETIMER (WM_USER + 133)
+#define MCIWNDM_CHANGESTYLES (WM_USER + 135)
+#define MCIWNDM_GETSTYLES (WM_USER + 136)
+#define MCIWNDM_GETALIAS (WM_USER + 137)
+#define MCIWNDM_PLAYREVERSE (WM_USER + 139)
+#define MCIWNDM_GET_SOURCE (WM_USER + 140)
+#define MCIWNDM_PUT_SOURCE (WM_USER + 141)
+#define MCIWNDM_GET_DEST (WM_USER + 142)
+#define MCIWNDM_PUT_DEST (WM_USER + 143)
+#define MCIWNDM_CAN_PLAY (WM_USER + 144)
+#define MCIWNDM_CAN_WINDOW (WM_USER + 145)
+#define MCIWNDM_CAN_RECORD (WM_USER + 146)
+#define MCIWNDM_CAN_SAVE (WM_USER + 147)
+#define MCIWNDM_CAN_EJECT (WM_USER + 148)
+#define MCIWNDM_CAN_CONFIG (WM_USER + 149)
+#define MCIWNDM_PALETTEKICK (WM_USER + 150)
+#define MCIWNDM_OPENINTERFACE (WM_USER + 151)
+#define MCIWNDM_SETOWNER (WM_USER + 152)
+#define MCIWNDM_SENDSTRINGA (WM_USER + 101)
+#define MCIWNDM_GETPOSITIONA (WM_USER + 102)
+#define MCIWNDM_GETMODEA (WM_USER + 106)
+#define MCIWNDM_SETTIMEFORMATA (WM_USER + 119)
+#define MCIWNDM_GETTIMEFORMATA (WM_USER + 120)
+#define MCIWNDM_GETFILENAMEA (WM_USER + 124)
+#define MCIWNDM_GETDEVICEA (WM_USER + 125)
+#define MCIWNDM_GETERRORA (WM_USER + 128)
+#define MCIWNDM_NEWA (WM_USER + 134)
+#define MCIWNDM_RETURNSTRINGA (WM_USER + 138)
+#define MCIWNDM_OPENA (WM_USER + 153)
+#define MCIWNDM_SENDSTRINGW (WM_USER + 201)
+#define MCIWNDM_GETPOSITIONW (WM_USER + 202)
+#define MCIWNDM_GETMODEW (WM_USER + 206)
+#define MCIWNDM_SETTIMEFORMATW (WM_USER + 219)
+#define MCIWNDM_GETTIMEFORMATW (WM_USER + 220)
+#define MCIWNDM_GETFILENAMEW (WM_USER + 224)
+#define MCIWNDM_GETDEVICEW (WM_USER + 225)
+#define MCIWNDM_GETERRORW (WM_USER + 228)
+#define MCIWNDM_NEWW (WM_USER + 234)
+#define MCIWNDM_RETURNSTRINGW (WM_USER + 238)
+#define MCIWNDM_OPENW (WM_USER + 252)
+#define MCIWNDM_NOTIFYMODE (WM_USER + 200)
+#define MCIWNDM_NOTIFYPOS (WM_USER + 201)
+#define MCIWNDM_NOTIFYSIZE (WM_USER + 202)
+#define MCIWNDM_NOTIFYMEDIA (WM_USER + 203)
+#define MCIWNDM_NOTIFYERROR (WM_USER + 205)
+#define MCIWND_START -1
+#define MCIWND_END -2
+#define DDF_UPDATE 0x02
+#define DDF_SAME_HDC 0x04
+#define DDF_SAME_DRAW 0x08
+#define DDF_DONTDRAW 0x10
+#define DDF_ANIMATE 0x20
+#define DDF_BUFFER 0x40
+#define DDF_JUSTDRAWIT 0x80
+#define DDF_FULLSCREEN 0x100
+#define DDF_BACKGROUNDPAL 0x200
+#define DDF_NOTKEYFRAME 0x400
+#define DDF_HURRYUP 0x800
+#define DDF_HALFTONE 0x1000
+#define DDF_PREROLL DDF_DONTDRAW
+#define DDF_SAME_DIB DDF_SAME_DRAW
+#define DDF_SAME_SIZE DDF_SAME_DRAW
+#define PD_CAN_DRAW_DIB 0x01
+#define PD_CAN_STRETCHDIB 0x02
+#define PD_STRETCHDIB_1_1_OK 0x04
+#define PD_STRETCHDIB_1_2_OK 0x08
+#define PD_STRETCHDIB_1_N_OK 0x10
+#ifndef mmioFOURCC
+#define mmioFOURCC(c0,c1,c2,c3) ((DWORD)(BYTE)(c0)|((DWORD)(BYTE)(c1)<<8)|((DWORD)(BYTE)(c2)<<16)|((DWORD)(BYTE)(c3)<<24))
+#endif
+#ifndef aviTWOCC
+#define aviTWOCC(ch0,ch1) ((WORD)(BYTE)(ch0)|((WORD)(BYTE)(ch1)<<8))
+#endif
+
+#ifndef RC_INVOKED
+DECLARE_HANDLE(HIC);
+DECLARE_HANDLE(HDRAWDIB);
+typedef WORD TWOCC;
+typedef BOOL (CALLBACK *AVISAVECALLBACK)(INT);
+typedef struct {
+ DWORD dwSize;
+ DWORD fccType;
+ DWORD fccHandler;
+ DWORD dwVersion;
+ DWORD dwFlags;
+ LRESULT dwError;
+ LPVOID pV1Reserved;
+ LPVOID pV2Reserved;
+ DWORD dnDevNode;
+} ICOPEN,*LPICOPEN;
+typedef struct {
+ DWORD dwFlags;
+ LPBITMAPINFOHEADER lpbiOutput;
+ LPVOID lpOutput;
+ LPBITMAPINFOHEADER lpbiInput;
+ LPVOID lpInput;
+ LPDWORD lpckid;
+ LPDWORD lpdwFlags;
+ LONG lFrameNum;
+ DWORD dwFrameSize;
+ DWORD dwQuality;
+ LPBITMAPINFOHEADER lpbiPrev;
+ LPVOID lpPrev;
+} ICCOMPRESS;
+typedef struct {
+ DWORD dwFlags;
+ LPBITMAPINFOHEADER lpbiOutput;
+ LPARAM lOutput;
+ LPBITMAPINFOHEADER lpbiInput;
+ LPARAM lInput;
+ LONG lStartFrame;
+ LONG lFrameCount;
+ LONG lQuality;
+ LONG lDataRate;
+ LONG lKeyRate;
+ DWORD dwRate;
+ DWORD dwScale;
+ DWORD dwOverheadPerFrame;
+ DWORD dwReserved2;
+ LONG (CALLBACK *GetData)(LPARAM,LONG,LPVOID,LONG);
+ LONG (CALLBACK *PutData)(LPARAM,LONG,LPVOID,LONG);
+} ICCOMPRESSFRAMES;
+typedef struct {
+ DWORD dwFlags;
+ LPARAM lParam;
+ LONG (CALLBACK *Status)(LPARAM,UINT,LONG);
+} ICSETSTATUSPROC;
+typedef struct {
+ DWORD dwSize;
+ DWORD fccType;
+ DWORD fccHandler;
+ DWORD dwFlags;
+ DWORD dwVersion;
+ DWORD dwVersionICM;
+ WCHAR szName[16];
+ WCHAR szDescription[128];
+ WCHAR szDriver[128];
+} ICINFO;
+typedef struct {
+ DWORD dwFlags;
+ LPBITMAPINFOHEADER lpbiInput;
+ LPVOID lpInput;
+ LPBITMAPINFOHEADER lpbiOutput;
+ LPVOID lpOutput;
+ DWORD ckid;
+} ICDECOMPRESS;
+typedef struct {
+ DWORD dwFlags;
+ LPBITMAPINFOHEADER lpbiSrc;
+ LPVOID lpSrc;
+ LPBITMAPINFOHEADER lpbiDst;
+ LPVOID lpDst;
+ INT xDst;
+ INT yDst;
+ INT dxDst;
+ INT dyDst;
+ INT xSrc;
+ INT ySrc;
+ INT dxSrc;
+ INT dySrc;
+} ICDECOMPRESSEX;
+typedef struct {
+ DWORD dwFlags;
+ LPBITMAPINFOHEADER lpbiIn;
+ LPBITMAPINFOHEADER lpbiSuggest;
+ INT dxSrc;
+ INT dySrc;
+ INT dxDst;
+ INT dyDst;
+ HIC hicDecompressor;
+} ICDRAWSUGGEST;
+typedef struct {
+ DWORD dwFlags;
+ INT iStart;
+ INT iLen;
+ LPPALETTEENTRY lppe;
+} ICPALETTE;
+typedef struct {
+ DWORD dwFlags;
+ HPALETTE hpal;
+ HWND hwnd;
+ HDC hdc;
+ INT xDst;
+ INT yDst;
+ INT dxDst;
+ INT dyDst;
+ LPBITMAPINFOHEADER lpbi;
+ INT xSrc;
+ INT ySrc;
+ INT dxSrc;
+ INT dySrc;
+ DWORD dwRate;
+ DWORD dwScale;
+} ICDRAWBEGIN;
+typedef struct {
+ DWORD dwFlags;
+ LPVOID lpFormat;
+ LPVOID lpData;
+ DWORD cbData;
+ LONG lTime;
+} ICDRAW;
+typedef struct {
+ LONG cbSize;
+ DWORD dwFlags;
+ HIC hic;
+ DWORD fccType;
+ DWORD fccHandler;
+ LPBITMAPINFO lpbiIn;
+ LPBITMAPINFO lpbiOut;
+ LPVOID lpBitsOut;
+ LPVOID lpBitsPrev;
+ LONG lFrame;
+ LONG lKey;
+ LONG lDataRate;
+ LONG lQ;
+ LONG lKeyCount;
+ LPVOID lpState;
+ LONG cbState;
+} COMPVARS, *PCOMPVARS;
+typedef struct _MainAVIHeader
+{
+ DWORD dwMicroSecPerFrame;
+ DWORD dwMaxBytesPerSec;
+ DWORD dwPaddingGranularity;
+ DWORD dwFlags;
+ DWORD dwTotalFrames;
+ DWORD dwInitialFrames;
+ DWORD dwStreams;
+ DWORD dwSuggestedBufferSize;
+ DWORD dwWidth;
+ DWORD dwHeight;
+ DWORD dwReserved[4];
+} MainAVIHeader;
+typedef struct {
+ FOURCC fccType;
+ FOURCC fccHandler;
+ DWORD dwFlags;
+ WORD wPriority;
+ WORD wLanguage;
+ DWORD dwInitialFrames;
+ DWORD dwScale;
+ DWORD dwRate;
+ DWORD dwStart;
+ DWORD dwLength;
+ DWORD dwSuggestedBufferSize;
+ DWORD dwQuality;
+ DWORD dwSampleSize;
+ RECT rcFrame;
+} AVIStreamHeader;
+typedef struct _AVIINDEXENTRY {
+ DWORD ckid;
+ DWORD dwFlags;
+ DWORD dwChunkOffset;
+ DWORD dwChunkLength;
+} AVIINDEXENTRY;
+typedef struct _AVIPALCHANGE {
+ BYTE bFirstEntry;
+ BYTE bNumEntries;
+ WORD wFlags;
+ PALETTEENTRY peNew[1];
+} AVIPALCHANGE;
+typedef struct _AVISTREAMINFOA {
+ DWORD fccType;
+ DWORD fccHandler;
+ DWORD dwFlags;
+ DWORD dwCaps;
+ WORD wPriority;
+ WORD wLanguage;
+ DWORD dwScale;
+ DWORD dwRate;
+ DWORD dwStart;
+ DWORD dwLength;
+ DWORD dwInitialFrames;
+ DWORD dwSuggestedBufferSize;
+ DWORD dwQuality;
+ DWORD dwSampleSize;
+ RECT rcFrame;
+ DWORD dwEditCount;
+ DWORD dwFormatChangeCount;
+ CHAR szName[64];
+} AVISTREAMINFOA, * LPAVISTREAMINFOA, *PAVISTREAMINFOA;
+typedef struct _AVISTREAMINFOW {
+ DWORD fccType;
+ DWORD fccHandler;
+ DWORD dwFlags;
+ DWORD dwCaps;
+ WORD wPriority;
+ WORD wLanguage;
+ DWORD dwScale;
+ DWORD dwRate;
+ DWORD dwStart;
+ DWORD dwLength;
+ DWORD dwInitialFrames;
+ DWORD dwSuggestedBufferSize;
+ DWORD dwQuality;
+ DWORD dwSampleSize;
+ RECT rcFrame;
+ DWORD dwEditCount;
+ DWORD dwFormatChangeCount;
+ WCHAR szName[64];
+} AVISTREAMINFOW, * LPAVISTREAMINFOW, *PAVISTREAMINFOW;
+typedef struct _AVIFILEINFOW {
+ DWORD dwMaxBytesPerSec;
+ DWORD dwFlags;
+ DWORD dwCaps;
+ DWORD dwStreams;
+ DWORD dwSuggestedBufferSize;
+ DWORD dwWidth;
+ DWORD dwHeight;
+ DWORD dwScale;
+ DWORD dwRate;
+ DWORD dwLength;
+ DWORD dwEditCount;
+ WCHAR szFileType[64];
+} AVIFILEINFOW, *LPAVIFILEINFOW, *PAVIFILEINFOW;
+typedef struct _AVIFILEINFOA {
+ DWORD dwMaxBytesPerSec;
+ DWORD dwFlags;
+ DWORD dwCaps;
+ DWORD dwStreams;
+ DWORD dwSuggestedBufferSize;
+ DWORD dwWidth;
+ DWORD dwHeight;
+ DWORD dwScale;
+ DWORD dwRate;
+ DWORD dwLength;
+ DWORD dwEditCount;
+ CHAR szFileType[64];
+} AVIFILEINFOA, *LPAVIFILEINFOA, *PAVIFILEINFOA;
+typedef struct _AVICOMPRESSOPTIONS {
+ DWORD fccType;
+ DWORD fccHandler;
+ DWORD dwKeyFrameEvery;
+ DWORD dwQuality;
+ DWORD dwBytesPerSecond;
+ DWORD dwFlags;
+ LPVOID lpFormat;
+ DWORD cbFormat;
+ LPVOID lpParms;
+ DWORD cbParms;
+ DWORD dwInterleaveEvery;
+} AVICOMPRESSOPTIONS, *LPAVICOMPRESSOPTIONS,*PAVICOMPRESSOPTIONS;
+typedef struct _CAPDRIVERCAPS {
+ UINT wDeviceIndex;
+ BOOL fHasOverlay;
+ BOOL fHasDlgVideoSource;
+ BOOL fHasDlgVideoFormat;
+ BOOL fHasDlgVideoDisplay;
+ BOOL fCaptureInitialized;
+ BOOL fDriverSuppliesPalettes;
+ HANDLE hVideoIn;
+ HANDLE hVideoOut;
+ HANDLE hVideoExtIn;
+ HANDLE hVideoExtOut;
+} CAPDRIVERCAPS, *LPCAPDRIVERCAPS;
+typedef struct _CAPINFOCHUNK {
+ FOURCC fccInfoID;
+ LPVOID lpData;
+ LONG cbData;
+} CAPINFOCHUNK, *LPCAPINFOCHUNK;
+typedef struct _CAPSTATUS {
+ UINT uiImageWidth;
+ UINT uiImageHeight;
+ BOOL fLiveWindow;
+ BOOL fOverlayWindow;
+ BOOL fScale;
+ POINT ptScroll;
+ BOOL fUsingDefaultPalette;
+ BOOL fAudioHardware;
+ BOOL fCapFileExists;
+ DWORD dwCurrentVideoFrame;
+ DWORD dwCurrentVideoFramesDropped;
+ DWORD dwCurrentWaveSamples;
+ DWORD dwCurrentTimeElapsedMS;
+ HPALETTE hPalCurrent;
+ BOOL fCapturingNow;
+ DWORD dwReturn;
+ UINT wNumVideoAllocated;
+ UINT wNumAudioAllocated;
+} CAPSTATUS, *LPCAPSTATUS;
+typedef struct _CAPTUREPARMS {
+ DWORD dwRequestMicroSecPerFrame;
+ BOOL fMakeUserHitOKToCapture;
+ UINT wPercentDropForError;
+ BOOL fYield;
+ DWORD dwIndexSize;
+ UINT wChunkGranularity;
+ BOOL fUsingDOSMemory;
+ UINT wNumVideoRequested;
+ BOOL fCaptureAudio;
+ UINT wNumAudioRequested;
+ UINT vKeyAbort;
+ BOOL fAbortLeftMouse;
+ BOOL fAbortRightMouse;
+ BOOL fLimitEnabled;
+ UINT wTimeLimit;
+ BOOL fMCIControl;
+ BOOL fStepMCIDevice;
+ DWORD dwMCIStartTime;
+ DWORD dwMCIStopTime;
+ BOOL fStepCaptureAt2x;
+ UINT wStepCaptureAverageFrames;
+ DWORD dwAudioBufferSize;
+ BOOL fDisableWriteCache;
+ UINT AVStreamMaster;
+} CAPTUREPARMS, *LPCAPTUREPARMS;
+
+typedef struct videohdr_tag {
+ LPBYTE lpData;
+ DWORD dwBufferLength;
+ DWORD dwBytesUsed;
+ DWORD dwTimeCaptured;
+ DWORD dwUser;
+ DWORD dwFlags;
+ DWORD_PTR dwReserved[4];
+} VIDEOHDR, *LPVIDEOHDR;
+
+#if !defined (_OBJC_NO_COM)
+#define DEFINE_AVIGUID(name,l,w1,w2) DEFINE_GUID(name,l,w1,w2,0xC0,0,0,0,0,0,0,0x46)
+DEFINE_AVIGUID(IID_IAVIFile,0x00020020,0,0);
+DEFINE_AVIGUID(IID_IAVIStream,0x00020021,0,0);
+DEFINE_AVIGUID(IID_IAVIStreaming,0x00020022,0,0);
+DEFINE_AVIGUID(IID_IGetFrame,0x00020023,0,0);
+DEFINE_AVIGUID(IID_IAVIEditStream,0x00020024,0,0);
+DEFINE_AVIGUID(CLSID_AVIFile,0x00020000,0,0);
+
+#define INTERFACE IAVIStream
+DECLARE_INTERFACE_(IAVIStream, IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(Create)(THIS_ LPARAM,LPARAM) PURE;
+ STDMETHOD(Info)(THIS_ AVISTREAMINFOW*,LONG) PURE;
+ STDMETHOD_(LONG,FindSample)(THIS_ LONG,LONG) PURE;
+ STDMETHOD(ReadFormat)(THIS_ LONG,LPVOID,LONG*) PURE;
+ STDMETHOD(SetFormat)(THIS_ LONG,LPVOID,LONG) PURE;
+ STDMETHOD(Read)(THIS_ LONG,LONG,LPVOID,LONG,LONG*,LONG*) PURE;
+ STDMETHOD(Write)(THIS_ LONG,LONG,LPVOID,LONG,DWORD,LONG*,LONG*) PURE;
+ STDMETHOD(Delete)(THIS_ LONG,LONG) PURE;
+ STDMETHOD(ReadData)(THIS_ DWORD,LPVOID,LONG*) PURE;
+ STDMETHOD(WriteData)(THIS_ DWORD,LPVOID,LONG) PURE;
+ STDMETHOD(SetInfo)(THIS_ AVISTREAMINFOW*,LONG) PURE;
+};
+#undef INTERFACE
+typedef IAVIStream *PAVISTREAM;
+
+#define INTERFACE IAVIStreaming
+DECLARE_INTERFACE_(IAVIStreaming, IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(Begin)(THIS_ LONG,LONG,LONG) PURE;
+ STDMETHOD(End)(THIS) PURE;
+};
+#undef INTERFACE
+typedef IAVIStreaming *PAVISTREAMING;
+
+#define INTERFACE IAVIEditStream
+DECLARE_INTERFACE_(IAVIEditStream, IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(Cut)(THIS_ LONG*,LONG*,PAVISTREAM*) PURE;
+ STDMETHOD(Copy)(THIS_ LONG*,LONG*,PAVISTREAM*) PURE;
+ STDMETHOD(Paste)(THIS_ LONG*,LONG*,PAVISTREAM,LONG,LONG) PURE;
+ STDMETHOD(Clone)(THIS_ PAVISTREAM*) PURE;
+ STDMETHOD(SetInfo)(THIS_ LPAVISTREAMINFOW,LONG) PURE;
+};
+#undef INTERFACE
+typedef IAVIEditStream *PAVIEDITSTREAM;
+
+#define INTERFACE IAVIFile
+DECLARE_INTERFACE_(IAVIFile, IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(Info)(THIS_ AVIFILEINFOW*,LONG) PURE;
+ STDMETHOD(GetStream)(THIS_ PAVISTREAM*,DWORD,LONG) PURE;
+ STDMETHOD(CreateStream)(THIS_ PAVISTREAM*,AVISTREAMINFOW*) PURE;
+ STDMETHOD(WriteData)(THIS_ DWORD,LPVOID,LONG) PURE;
+ STDMETHOD(ReadData)(THIS_ DWORD,LPVOID,LONG*) PURE;
+ STDMETHOD(EndRecord)(THIS) PURE;
+ STDMETHOD(DeleteStream)(THIS_ DWORD,LONG) PURE;
+};
+#undef INTERFACE
+typedef IAVIFile *PAVIFILE;
+
+#define INTERFACE IGetFrame
+DECLARE_INTERFACE_(IGetFrame, IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD_(LPVOID,GetFrame)(THIS_ LONG) PURE;
+ STDMETHOD(Begin)(THIS_ LONG,LONG,LONG) PURE;
+ STDMETHOD(End)(THIS) PURE;
+ STDMETHOD(SetFormat)(THIS_ LPBITMAPINFOHEADER,LPVOID,INT,INT,INT,INT) PURE;
+};
+#undef INTERFACE
+typedef IGetFrame *PGETFRAME;
+#endif /* !defined (_OBJC_NO_COM) */
+
+DWORD VFWAPI VideoForWindowsVersion(VOID);
+LONG VFWAPI InitVFW(VOID);
+LONG VFWAPI TermVFW(VOID);
+DWORD VFWAPIV ICCompress(HIC,DWORD,LPBITMAPINFOHEADER,LPVOID,LPBITMAPINFOHEADER,LPVOID,LPDWORD,LPDWORD,LONG,DWORD,DWORD,LPBITMAPINFOHEADER,LPVOID);
+DWORD VFWAPIV ICDecompress(HIC,DWORD,LPBITMAPINFOHEADER,LPVOID,LPBITMAPINFOHEADER,LPVOID);
+LRESULT VFWAPI ICSendMessage(HIC,UINT,DWORD,DWORD);
+HANDLE VFWAPI ICImageCompress(HIC,UINT,LPBITMAPINFO,LPVOID,LPBITMAPINFO,LONG,LONG*);
+HANDLE VFWAPI ICImageDecompress(HIC,UINT,LPBITMAPINFO,LPVOID,LPBITMAPINFO);
+BOOL VFWAPI ICInfo(DWORD,DWORD,ICINFO*);
+BOOL VFWAPI ICInstall(DWORD,DWORD,LPARAM,LPSTR,UINT);
+BOOL VFWAPI ICRemove(DWORD,DWORD,UINT);
+LRESULT VFWAPI ICGetInfo(HIC,ICINFO*,DWORD);
+HIC VFWAPI ICOpen(DWORD,DWORD,UINT);
+HIC VFWAPI ICOpenFunction(DWORD,DWORD,UINT,FARPROC);
+LRESULT VFWAPI ICClose(HIC hic);
+HIC VFWAPI ICLocate(DWORD,DWORD,LPBITMAPINFOHEADER,LPBITMAPINFOHEADER,WORD);
+HIC VFWAPI ICGetDisplayFormat(HIC,LPBITMAPINFOHEADER,LPBITMAPINFOHEADER,INT,INT,INT);
+DWORD VFWAPIV ICDrawBegin(HIC,DWORD,HPALETTE,HWND,HDC,INT,INT,INT,INT,LPBITMAPINFOHEADER,INT,INT,INT,INT,DWORD,DWORD);
+DWORD VFWAPIV ICDraw(HIC,DWORD,LPVOID,LPVOID,DWORD,LONG);
+BOOL VFWAPI ICCompressorChoose(HWND,UINT,LPVOID,LPVOID,PCOMPVARS,LPSTR);
+BOOL VFWAPI ICSeqCompressFrameStart(PCOMPVARS,LPBITMAPINFO);
+void VFWAPI ICSeqCompressFrameEnd(PCOMPVARS);
+LPVOID VFWAPI ICSeqCompressFrame(PCOMPVARS,UINT,LPVOID,BOOL*,LONG*);
+void VFWAPI ICCompressorFree(PCOMPVARS);
+#if !defined (_OBJC_NO_COM)
+ULONG WINAPI AVIStreamAddRef(PAVISTREAM);
+ULONG WINAPI AVIStreamRelease(PAVISTREAM);
+HRESULT WINAPI AVIStreamCreate(PAVISTREAM*,LONG,LONG,CLSID*);
+HRESULT WINAPI AVIStreamInfoA(PAVISTREAM,AVISTREAMINFOA*,LONG);
+HRESULT WINAPI AVIStreamInfoW(PAVISTREAM,AVISTREAMINFOW*,LONG);
+HRESULT WINAPI AVIStreamFindSample(PAVISTREAM,LONG,DWORD);
+HRESULT WINAPI AVIStreamReadFormat(PAVISTREAM,LONG,LPVOID,LONG*);
+HRESULT WINAPI AVIStreamSetFormat(PAVISTREAM,LONG,LPVOID,LONG);
+HRESULT WINAPI AVIStreamRead(PAVISTREAM,LONG,LONG,LPVOID,LONG,LONG*,LONG*);
+HRESULT WINAPI AVIStreamWrite(PAVISTREAM,LONG,LONG,LPVOID,LONG,DWORD,LONG*,LONG*);
+HRESULT WINAPI AVIStreamReadData(PAVISTREAM,DWORD,LPVOID,LONG*);
+HRESULT WINAPI AVIStreamWriteData(PAVISTREAM,DWORD,LPVOID,LONG);
+PGETFRAME WINAPI AVIStreamGetFrameOpen(PAVISTREAM,LPBITMAPINFOHEADER);
+LPVOID WINAPI AVIStreamGetFrame(PGETFRAME,LONG);
+HRESULT WINAPI AVIStreamGetFrameClose(PGETFRAME);
+HRESULT WINAPI AVIMakeCompressedStream(PAVISTREAM*,PAVISTREAM,AVICOMPRESSOPTIONS*,CLSID*);
+HRESULT WINAPI AVIMakeFileFromStreams(PAVIFILE*,INT,PAVISTREAM*);
+HRESULT WINAPI AVIStreamOpenFromFileA(PAVISTREAM*,LPCSTR,DWORD,LONG,UINT,CLSID*);
+HRESULT WINAPI AVIStreamOpenFromFileW(PAVISTREAM*,LPCWSTR,DWORD,LONG,UINT,CLSID*);
+HRESULT WINAPI AVIBuildFilterA(LPSTR,LONG,BOOL);
+HRESULT WINAPI AVIBuildFilterW(LPWSTR,LONG,BOOL);
+BOOL WINAPI AVISaveOptions(HWND,UINT,INT,PAVISTREAM*,LPAVICOMPRESSOPTIONS*);
+HRESULT WINAPI AVISaveOptionsFree(INT,LPAVICOMPRESSOPTIONS*);
+HRESULT WINAPI AVISaveVA(LPCSTR,CLSID*,AVISAVECALLBACK,INT,PAVISTREAM*,LPAVICOMPRESSOPTIONS*);
+HRESULT WINAPI AVISaveVW(LPCWSTR,CLSID*,AVISAVECALLBACK,INT,PAVISTREAM*,LPAVICOMPRESSOPTIONS*);
+LONG WINAPI AVIStreamStart(PAVISTREAM);
+LONG WINAPI AVIStreamLength(PAVISTREAM);
+LONG WINAPI AVIStreamSampleToTime(PAVISTREAM,LONG);
+LONG WINAPI AVIStreamTimeToSample(PAVISTREAM,LONG);
+HRESULT WINAPI CreateEditableStream(PAVISTREAM*,PAVISTREAM);
+HRESULT WINAPI EditStreamClone(PAVISTREAM,PAVISTREAM*);
+HRESULT WINAPI EditStreamCopy(PAVISTREAM,LONG*,LONG*,PAVISTREAM*);
+HRESULT WINAPI EditStreamCut(PAVISTREAM,LONG*,LONG*,PAVISTREAM*);
+HRESULT WINAPI EditStreamPaste(PAVISTREAM,LONG*,LONG*,PAVISTREAM,LONG,LONG);
+HRESULT WINAPI EditStreamSetInfoA(PAVISTREAM,LPAVISTREAMINFOA,LONG);
+HRESULT WINAPI EditStreamSetInfoW(PAVISTREAM,LPAVISTREAMINFOW,LONG);
+HRESULT WINAPI EditStreamSetNameA(PAVISTREAM,LPCSTR);
+HRESULT WINAPI EditStreamSetNameW(PAVISTREAM,LPCWSTR);
+HRESULT WINAPI CreateEditableStream(PAVISTREAM*,PAVISTREAM);
+HRESULT WINAPI EditStreamClone(PAVISTREAM,PAVISTREAM*);
+HRESULT WINAPI EditStreamCopy(PAVISTREAM,LONG*,LONG*,PAVISTREAM*);
+HRESULT WINAPI EditStreamCut(PAVISTREAM,LONG*,LONG*,PAVISTREAM*);
+HRESULT WINAPI EditStreamPaste(PAVISTREAM,LONG*,LONG*,PAVISTREAM,LONG,LONG);
+HRESULT WINAPI EditStreamSetInfoA(PAVISTREAM,LPAVISTREAMINFOA,LONG);
+HRESULT WINAPI EditStreamSetInfoW(PAVISTREAM,LPAVISTREAMINFOW,LONG);
+HRESULT WINAPI EditStreamSetNameA(PAVISTREAM,LPCSTR);
+HRESULT WINAPI EditStreamSetNameW(PAVISTREAM,LPCWSTR);
+VOID WINAPI AVIFileInit(void);
+VOID WINAPI AVIFileExit(void);
+HRESULT WINAPI AVIFileOpenA(PAVIFILE*,LPCSTR,UINT,LPCLSID);
+HRESULT WINAPI AVIFileOpenW(PAVIFILE*,LPCWSTR,UINT,LPCLSID);
+ULONG WINAPI AVIFileAddRef(PAVIFILE);
+ULONG WINAPI AVIFileRelease(PAVIFILE);
+HRESULT WINAPI AVIFileInfoA(PAVIFILE,PAVIFILEINFOA,LONG);
+HRESULT WINAPI AVIFileInfoW(PAVIFILE,PAVIFILEINFOW,LONG);
+HRESULT WINAPI AVIFileGetStream(PAVIFILE,PAVISTREAM*,DWORD,LONG);
+HRESULT WINAPI AVIFileCreateStreamA(PAVIFILE,PAVISTREAM*,AVISTREAMINFOA*);
+HRESULT WINAPI AVIFileCreateStreamW(PAVIFILE,PAVISTREAM*,AVISTREAMINFOW*);
+HRESULT WINAPI AVIFileWriteData(PAVIFILE,DWORD,LPVOID,LONG);
+HRESULT WINAPI AVIFileReadData(PAVIFILE,DWORD,LPVOID,LPLONG);
+HRESULT WINAPI AVIFileEndRecord(PAVIFILE);
+HRESULT WINAPI AVIClearClipboard(VOID);
+HRESULT WINAPI AVIGetFromClipboard(PAVIFILE*);
+HRESULT WINAPI AVIPutFileOnClipboard(PAVIFILE);
+#endif /* _OBJC_NO_COM */
+#ifdef OFN_READONLY
+BOOL WINAPI GetOpenFileNamePreviewA(LPOPENFILENAMEA);
+BOOL WINAPI GetOpenFileNamePreviewW(LPOPENFILENAMEW);
+BOOL WINAPI GetSaveFileNamePreviewA(LPOPENFILENAMEA);
+BOOL WINAPI GetSaveFileNamePreviewW(LPOPENFILENAMEW);
+#endif
+HWND VFWAPIV MCIWndCreateA(HWND,HINSTANCE,DWORD,LPCSTR);
+HWND VFWAPIV MCIWndCreateW(HWND,HINSTANCE,DWORD,LPCWSTR);
+HDRAWDIB VFWAPI DrawDibOpen(VOID);
+UINT VFWAPI DrawDibRealize(HDRAWDIB,HDC,BOOL);
+BOOL VFWAPI DrawDibBegin(HDRAWDIB,HDC,INT,INT,LPBITMAPINFOHEADER,INT,INT,UINT);
+BOOL VFWAPI DrawDibDraw(HDRAWDIB,HDC,INT,INT,INT,INT,LPBITMAPINFOHEADER,LPVOID,INT,INT,INT,INT,UINT);
+BOOL VFWAPI DrawDibSetPalette(HDRAWDIB,HPALETTE);
+HPALETTE VFWAPI DrawDibGetPalette(HDRAWDIB);
+BOOL VFWAPI DrawDibChangePalette(HDRAWDIB,int,int,LPPALETTEENTRY);
+LPVOID VFWAPI DrawDibGetBuffer(HDRAWDIB,LPBITMAPINFOHEADER,DWORD,DWORD);
+BOOL VFWAPI DrawDibStart(HDRAWDIB,DWORD);
+BOOL VFWAPI DrawDibStop(HDRAWDIB);
+BOOL VFWAPI DrawDibEnd(HDRAWDIB);
+BOOL VFWAPI DrawDibClose(HDRAWDIB);
+DWORD VFWAPI DrawDibProfileDisplay(LPBITMAPINFOHEADER);
+
+#define ICCompressGetFormat(hic,lpbiInput,lpbiOutput) ICSendMessage(hic,ICM_COMPRESS_GET_FORMAT,(DWORD)(lpbiInput),(DWORD)(lpbiOutput))
+#define ICCompressGetFormatSize(hic,lpbi) ICCompressGetFormat(hic,lpbi,NULL)
+#define ICCompressBegin(hic,lpbiInput,lpbiOutput) ICSendMessage(hic,ICM_COMPRESS_BEGIN,(DWORD)(lpbiInput),(DWORD)(lpbiOutput))
+#define ICCompressGetSize(hic,lpbiInput,lpbiOutput) ICSendMessage(hic,ICM_COMPRESS_GET_SIZE,(DWORD)(lpbiInput),(DWORD)(lpbiOutput))
+#define ICCompressQuery(hic,lpbiInput,lpbiOutput) ICSendMessage(hic,ICM_COMPRESS_QUERY,(DWORD)(lpbiInput),(DWORD)(lpbiOutput))
+#define ICCompressEnd(hic) ICSendMessage(hic,ICM_COMPRESS_END,0,0)
+#define ICQueryAbout(hic) (ICSendMessage(hic,ICM_ABOUT,(DWORD)-1,ICMF_ABOUT_QUERY)==ICERR_OK)
+#define ICAbout(hic,hwnd) ICSendMessage(hic,ICM_ABOUT,(DWORD)(hwnd),0)
+#define ICQueryConfigure(hic) (ICSendMessage(hic,ICM_CONFIGURE,(DWORD)-1,ICMF_CONFIGURE_QUERY)==ICERR_OK)
+#define ICConfigure(hic,hwnd) ICSendMessage(hic,ICM_CONFIGURE,(DWORD)(hwnd),0)
+#define ICDecompressBegin(hic,lpbiInput,lpbiOutput) ICSendMessage(hic,ICM_DECOMPRESS_BEGIN,(DWORD)(lpbiInput),(DWORD)(lpbiOutput))
+#define ICDecompressQuery(hic,lpbiInput,lpbiOutput) ICSendMessage(hic,ICM_DECOMPRESS_QUERY,(DWORD)(lpbiInput),(DWORD)(lpbiOutput))
+#define ICDecompressGetFormat(hic,lpbiInput,lpbiOutput) (LONG)ICSendMessage(hic,ICM_DECOMPRESS_GET_FORMAT,(DWORD)(lpbiInput),(DWORD)(lpbiOutput))
+#define ICDecompressGetFormatSize(hic,lpbi) ICDecompressGetFormat(hic, lpbi, NULL)
+#define ICDecompressGetPalette(hic,lpbiInput,lpbiOutput) ICSendMessage(hic,ICM_DECOMPRESS_GET_PALETTE,(DWORD)(lpbiInput),(DWORD)(lpbiOutput))
+#define ICDecompressSetPalette(hic,lpbiPalette) ICSendMessage(hic,ICM_DECOMPRESS_SET_PALETTE,(DWORD)(lpbiPalette),0)
+#define ICDecompressEnd(hic) ICSendMessage(hic,ICM_DECOMPRESS_END,0,0)
+#define ICDecompressExEnd(hic) ICSendMessage(hic,ICM_DECOMPRESSEX_END,0,0)
+#define ICDecompressOpen(fccType,fccHandler,lpbiIn,lpbiOut) ICLocate(fccType,fccHandler,lpbiIn,lpbiOut,ICMODE_DECOMPRESS)
+#define ICDrawOpen(fccType,fccHandler,lpbiIn) ICLocate(fccType,fccHandler,lpbiIn,NULL,ICMODE_DRAW)
+#define ICGetState(hic,pv,cb) ICSendMessage(hic,ICM_GETSTATE,(DWORD)(pv),(DWORD)(cb))
+#define ICSetState(hic,pv,cb) ICSendMessage(hic,ICM_SETSTATE,(DWORD)(pv),(DWORD)(cb))
+#define ICGetStateSize(hic) ICGetState(hic,NULL,0)
+#define ICDrawWindow(hic,prc) ICSendMessage(hic,ICM_DRAW_WINDOW,(DWORD)(prc),sizeof(RECT))
+#define ICDrawQuery(hic,lpbiInput) ICSendMessage(hic,ICM_DRAW_QUERY,(DWORD)(lpbiInput),0)
+#define ICDrawChangePalette(hic,lpbiInput) ICSendMessage(hic,ICM_DRAW_CHANGEPALETTE,(DWORD)(lpbiInput),0)
+#define ICGetBuffersWanted(hic,lpdwBuffers) ICSendMessage(hic,ICM_GETBUFFERSWANTED,(DWORD)(lpdwBuffers),0)
+#define ICDrawEnd(hic) ICSendMessage(hic,ICM_DRAW_END,0,0)
+#define ICDrawStart(hic) ICSendMessage(hic,ICM_DRAW_START,0,0)
+#define ICDrawStartPlay(hic,lFrom,lTo) ICSendMessage(hic,ICM_DRAW_START_PLAY,(DWORD)(lFrom),(DWORD)(lTo))
+#define ICDrawStop(hic) ICSendMessage(hic,ICM_DRAW_STOP,0,0)
+#define ICDrawStopPlay(hic) ICSendMessage(hic,ICM_DRAW_STOP_PLAY,0,0)
+#define ICDrawGetTime(hic,lplTime) ICSendMessage(hic,ICM_DRAW_GETTIME,(DWORD)(lplTime),0)
+#define ICDrawSetTime(hic,lTime) ICSendMessage(hic,ICM_DRAW_SETTIME,(DWORD)lTime,0)
+#define ICDrawRealize(hic,hdc,fBackground) ICSendMessage(hic,ICM_DRAW_REALIZE,(DWORD)(hdc),(DWORD)(fBackground))
+#define ICDrawFlush(hic) ICSendMessage(hic,ICM_DRAW_FLUSH,0,0)
+#define ICDrawRenderBuffer(hic) ICSendMessage(hic,ICM_DRAW_RENDERBUFFER,0,0)
+#define AVIFileClose(pavi) AVIFileRelease(pavi)
+#define AVIStreamClose(pavi) AVIStreamRelease(pavi);
+#define AVIStreamEnd(pavi) (AVIStreamStart(pavi)+AVIStreamLength(pavi))
+#define AVIStreamEndTime(pavi) AVIStreamSampleToTime(pavi,AVIStreamEnd(pavi))
+#define AVIStreamFormatSize(pavi,lPos,plSize) AVIStreamReadFormat(pavi,lPos,NULL,plSize)
+#define AVIStreamLengthTime(pavi) AVIStreamSampleToTime(pavi,AVIStreamLength(pavi))
+#define AVIStreamSampleSize(pavi,pos,psize) AVIStreamRead(pavi,pos,1,NULL,0,psize,NULL)
+#define AVIStreamSampleToSample(pavi1,pavi2,samp2) AVIStreamTimeToSample(pavi1,AVIStreamSampleToTime(pavi2,samp2))
+#define AVIStreamStartTime(pavi) AVIStreamSampleToTime(pavi,AVIStreamStart(pavi))
+#define AVIStreamNextSample(pavi,pos) AVIStreamFindSample(pavi,pos+1,FIND_NEXT|FIND_ANY)
+#define AVIStreamPrevSample(pavi,pos) AVIStreamFindSample(pavi,pos-1,FIND_PREV|FIND_ANY)
+#define AVIStreamNearestSample(pavi, pos) AVIStreamFindSample(pavi,pos,FIND_PREV|FIND_ANY)
+#define AVStreamNextKeyFrame(pavi,pos) AVIStreamFindSample(pavi,pos+1,FIND_NEXT|FIND_KEY)
+#define AVStreamPrevKeyFrame(pavi,pos) AVIStreamFindSample(pavi,pos-1,FIND_NEXT|FIND_KEY)
+#define AVIStreamNearestKeyFrame(pavi,pos) AVIStreamFindSample(pavi,pos,FIND_PREV|FIND_KEY)
+#define AVIStreamIsKeyFrame(pavi, pos) (AVIStreamNearestKeyFrame(pavi,pos) == pos)
+#ifdef __cplusplus
+#define MCIWndSM ::SendMessage
+#else
+#define MCIWndSM SendMessage
+#endif
+#define MCIWndCanPlay(hWnd) (BOOL)MCIWndSM(hWnd,MCIWNDM_CAN_PLAY,0,0)
+#define MCIWndCanRecord(hWnd) (BOOL)MCIWndSM(hWnd,MCIWNDM_CAN_RECORD,0,0)
+#define MCIWndCanSave(hWnd) (BOOL)MCIWndSM(hWnd,MCIWNDM_CAN_SAVE,0,0)
+#define MCIWndCanWindow(hWnd) (BOOL)MCIWndSM(hWnd,MCIWNDM_CAN_WINDOW,0,0)
+#define MCIWndCanEject(hWnd) (BOOL)MCIWndSM(hWnd,MCIWNDM_CAN_EJECT,0,0)
+#define MCIWndCanConfig(hWnd) (BOOL)MCIWndSM(hWnd,MCIWNDM_CAN_CONFIG,0,0)
+#define MCIWndPaletteKick(hWnd) (BOOL)MCIWndSM(hWnd,MCIWNDM_PALETTEKICK,0,0)
+#define MCIWndSave(hWnd,szFile) (LONG)MCIWndSM(hWnd,MCI_SAVE,0,(LPARAM)(LPVOID)(szFile))
+#define MCIWndSaveDialog(hWnd) MCIWndSave(hWnd,-1)
+#define MCIWndNew(hWnd,lp) (LONG)MCIWndSM(hWnd,MCIWNDM_NEW,0,(LPARAM)(LPVOID)(lp))
+#define MCIWndRecord(hWnd) (LONG)MCIWndSM(hWnd,MCI_RECORD,0,0)
+#define MCIWndOpen(hWnd,sz,f) (LONG)MCIWndSM(hWnd,MCIWNDM_OPEN,(WPARAM)(UINT)(f),(LPARAM)(LPVOID)(sz))
+#define MCIWndOpenDialog(hWnd) MCIWndOpen(hWnd,-1,0)
+#define MCIWndClose(hWnd) (LONG)MCIWndSM(hWnd,MCI_CLOSE,0,0)
+#define MCIWndPlay(hWnd) (LONG)MCIWndSM(hWnd,MCI_PLAY,0,0)
+#define MCIWndStop(hWnd) (LONG)MCIWndSM(hWnd,MCI_STOP,0,0)
+#define MCIWndPause(hWnd) (LONG)MCIWndSM(hWnd,MCI_PAUSE,0,0)
+#define MCIWndResume(hWnd) (LONG)MCIWndSM(hWnd,MCI_RESUME,0,0)
+#define MCIWndSeek(hWnd,lPos) (LONG)MCIWndSM(hWnd,MCI_SEEK,0,(LPARAM)(LONG)(lPos))
+#define MCIWndEject(hWnd) (LONG)MCIWndSM(hWnd,MCIWNDM_EJECT,0,0)
+#define MCIWndHome(hWnd) MCIWndSeek(hWnd,MCIWND_START)
+#define MCIWndEnd(hWnd) MCIWndSeek(hWnd,MCIWND_END)
+#define MCIWndGetSource(hWnd,prc) (LONG)MCIWndSM(hWnd,MCIWNDM_GET_SOURCE,0,(LPARAM)(LPRECT)(prc))
+#define MCIWndPutSource(hWnd,prc) (LONG)MCIWndSM(hWnd,MCIWNDM_PUT_SOURCE,0,(LPARAM)(LPRECT)(prc))
+#define MCIWndGetDest(hWnd,prc) (LONG)MCIWndSM(hWnd,MCIWNDM_GET_DEST,0,(LPARAM)(LPRECT)(prc))
+#define MCIWndPutDest(hWnd,prc) (LONG)MCIWndSM(hWnd,MCIWNDM_PUT_DEST,0,(LPARAM)(LPRECT)(prc))
+#define MCIWndPlayReverse(hWnd) (LONG)MCIWndSM(hWnd,MCIWNDM_PLAYREVERSE,0,0)
+#define MCIWndPlayFrom(hWnd,lPos) (LONG)MCIWndSM(hWnd,MCIWNDM_PLAYFROM,0,(LPARAM)(LONG)(lPos))
+#define MCIWndPlayTo(hWnd,lPos) (LONG)MCIWndSM(hWnd,MCIWNDM_PLAYTO, 0,(LPARAM)(LONG)(lPos))
+#define MCIWndPlayFromTo(hWnd,lStart,lEnd) (MCIWndSeek(hWnd,lStart),MCIWndPlayTo(hWnd,lEnd))
+#define MCIWndGetDeviceID(hWnd) (UINT)MCIWndSM(hWnd,MCIWNDM_GETDEVICEID,0,0)
+#define MCIWndGetAlias(hWnd) (UINT)MCIWndSM(hWnd,MCIWNDM_GETALIAS,0,0)
+#define MCIWndGetMode(hWnd,lp,len) (LONG)MCIWndSM(hWnd,MCIWNDM_GETMODE,(WPARAM)(UINT)(len),(LPARAM)(LPTSTR)(lp))
+#define MCIWndGetPosition(hWnd) (LONG)MCIWndSM(hWnd,MCIWNDM_GETPOSITION,0,0)
+#define MCIWndGetPositionString(hWnd,lp,len) (LONG)MCIWndSM(hWnd,MCIWNDM_GETPOSITION,(WPARAM)(UINT)(len),(LPARAM)(LPTSTR)(lp))
+#define MCIWndGetStart(hWnd) (LONG)MCIWndSM(hWnd,MCIWNDM_GETSTART,0,0)
+#define MCIWndGetLength(hWnd) (LONG)MCIWndSM(hWnd,MCIWNDM_GETLENGTH,0,0)
+#define MCIWndGetEnd(hWnd) (LONG)MCIWndSM(hWnd,MCIWNDM_GETEND,0,0)
+#define MCIWndStep(hWnd,n) (LONG)MCIWndSM(hWnd,MCI_STEP,0,(LPARAM)(long)(n))
+#define MCIWndDestroy(hWnd) (VOID)MCIWndSM(hWnd,WM_CLOSE,0,0)
+#define MCIWndSetZoom(hWnd,iZoom) (VOID)MCIWndSM(hWnd,MCIWNDM_SETZOOM,0,(LPARAM)(UINT)(iZoom))
+#define MCIWndGetZoom(hWnd) (UINT)MCIWndSM(hWnd,MCIWNDM_GETZOOM,0,0)
+#define MCIWndSetVolume(hWnd,iVol) (LONG)MCIWndSM(hWnd,MCIWNDM_SETVOLUME,0,(LPARAM)(UINT)(iVol))
+#define MCIWndGetVolume(hWnd) (LONG)MCIWndSM(hWnd,MCIWNDM_GETVOLUME,0,0)
+#define MCIWndSetSpeed(hWnd,iSpeed) (LONG)MCIWndSM(hWnd,MCIWNDM_SETSPEED,0,(LPARAM)(UINT)(iSpeed))
+#define MCIWndGetSpeed(hWnd) (LONG)MCIWndSM(hWnd,MCIWNDM_GETSPEED,0,0)
+#define MCIWndSetTimeFormat(hWnd,lp) (LONG)MCIWndSM(hWnd,MCIWNDM_SETTIMEFORMAT,0,(LPARAM)(LPTSTR)(lp))
+#define MCIWndGetTimeFormat(hWnd,lp,len) (LONG)MCIWndSM(hWnd,MCIWNDM_GETTIMEFORMAT,(WPARAM)(UINT)(len),(LPARAM)(LPTSTR)(lp))
+#define MCIWndValidateMedia(hWnd) (VOID)MCIWndSM(hWnd,MCIWNDM_VALIDATEMEDIA,0,0)
+#define MCIWndSetRepeat(hWnd,f) (void)MCIWndSM(hWnd,MCIWNDM_SETREPEAT,0,(LPARAM)(BOOL)(f))
+#define MCIWndGetRepeat(hWnd) (BOOL)MCIWndSM(hWnd,MCIWNDM_GETREPEAT,0,0)
+#define MCIWndUseFrames(hWnd) MCIWndSetTimeFormat(hWnd,TEXT("frames"))
+#define MCIWndUseTime(hWnd) MCIWndSetTimeFormat(hWnd,TEXT("ms"))
+#define MCIWndSetActiveTimer(hWnd,active) (VOID)MCIWndSM(hWnd,MCIWNDM_SETACTIVETIMER,(WPARAM)(UINT)(active),0L)
+#define MCIWndSetInactiveTimer(hWnd,inactive) (VOID)MCIWndSM(hWnd,MCIWNDM_SETINACTIVETIMER,(WPARAM)(UINT)(inactive),0L)
+#define MCIWndSetTimers(hWnd,active,inactive) (VOID)MCIWndSM(hWnd,MCIWNDM_SETTIMERS,(WPARAM)(UINT)(active),(LPARAM)(UINT)(inactive))
+#define MCIWndGetActiveTimer(hWnd) (UINT)MCIWndSM(hWnd,MCIWNDM_GETACTIVETIMER,0,0L);
+#define MCIWndGetInactiveTimer(hWnd) (UINT)MCIWndSM(hWnd,MCIWNDM_GETINACTIVETIMER,0,0L);
+#define MCIWndRealize(hWnd,fBkgnd) (LONG)MCIWndSM(hWnd,MCIWNDM_REALIZE,(WPARAM)(BOOL)(fBkgnd),0)
+#define MCIWndSendString(hWnd,sz) (LONG)MCIWndSM(hWnd,MCIWNDM_SENDSTRING,0,(LPARAM)(LPTSTR)(sz))
+#define MCIWndReturnString(hWnd,lp,len) (LONG)MCIWndSM(hWnd,MCIWNDM_RETURNSTRING,(WPARAM)(UINT)(len),(LPARAM)(LPVOID)(lp))
+#define MCIWndGetError(hWnd,lp,len) (LONG)MCIWndSM(hWnd,MCIWNDM_GETERROR,(WPARAM)(UINT)(len),(LPARAM)(LPVOID)(lp))
+#define MCIWndGetPalette(hWnd) (HPALETTE)MCIWndSM(hWnd,MCIWNDM_GETPALETTE,0,0)
+#define MCIWndSetPalette(hWnd,hpal) (LONG)MCIWndSM(hWnd,MCIWNDM_SETPALETTE,(WPARAM)(HPALETTE)(hpal),0)
+#define MCIWndGetFileName(hWnd,lp,len) (LONG)MCIWndSM(hWnd,MCIWNDM_GETFILENAME,(WPARAM)(UINT)(len),(LPARAM)(LPVOID)(lp))
+#define MCIWndGetDevice(hWnd,lp,len) (LONG)MCIWndSM(hWnd,MCIWNDM_GETDEVICE,(WPARAM)(UINT)(len),(LPARAM)(LPVOID)(lp))
+#define MCIWndGetStyles(hWnd) (UINT)MCIWndSM(hWnd,MCIWNDM_GETSTYLES,0,0L)
+#define MCIWndChangeStyles(hWnd,mask,value) (LONG)MCIWndSM(hWnd,MCIWNDM_CHANGESTYLES,(WPARAM)(UINT)(mask),(LPARAM)(LONG)(value))
+#define MCIWndOpenInterface(hWnd,pUnk) (LONG)MCIWndSM(hWnd,MCIWNDM_OPENINTERFACE,0,(LPARAM)(LPUNKNOWN)(pUnk))
+#define MCIWndSetOwner(hWnd,hWndP) (LONG)MCIWndSM(hWnd,MCIWNDM_SETOWNER,(WPARAM)(hWndP),0)
+#define DrawDibUpdate(hdd,hdc,x,y) DrawDibDraw(hdd,hdc,x,y,0,0,NULL,NULL,0,0,0,0,DDF_UPDATE)
+static __inline DWORD
+ICGetDefaultQuality(HIC hic)
+{
+ DWORD dwICValue;
+ ICSendMessage(hic, ICM_GETDEFAULTQUALITY, (DWORD)(LPVOID)&dwICValue, sizeof(DWORD));
+ return dwICValue;
+}
+static __inline DWORD
+ICGetDefaultKeyFrameRate(HIC hic)
+{
+ DWORD dwICValue;
+ ICSendMessage(hic, ICM_GETDEFAULTKEYFRAMERATE, (DWORD)(LPVOID)&dwICValue, sizeof(DWORD));
+ return dwICValue;
+}
+static __inline LRESULT
+ICDrawSuggestFormat(HIC hic,LPBITMAPINFOHEADER lpbiIn,LPBITMAPINFOHEADER lpbiOut,INT dxSrc,INT dySrc,INT dxDst,INT dyDst,HIC hicDecomp)
+{
+ ICDRAWSUGGEST ic;
+ ic.lpbiIn = lpbiIn;
+ ic.lpbiSuggest = lpbiOut;
+ ic.dxSrc = dxSrc;
+ ic.dySrc = dySrc;
+ ic.dxDst = dxDst;
+ ic.dyDst = dyDst;
+ ic.hicDecompressor = hicDecomp;
+ return ICSendMessage(hic,ICM_DRAW_SUGGESTFORMAT,(DWORD)&ic,sizeof(ic));
+}
+static __inline LRESULT
+ICSetStatusProc(HIC hic,DWORD dwFlags,LRESULT lParam,LONG (CALLBACK *fpfnStatus)(LPARAM,UINT,LONG))
+{
+ ICSETSTATUSPROC ic;
+ ic.dwFlags = dwFlags;
+ ic.lParam = lParam;
+ ic.Status = fpfnStatus;
+ return ICSendMessage(hic,ICM_SET_STATUS_PROC,(DWORD)&ic,sizeof(ic));
+}
+static __inline LRESULT
+ICDecompressEx(HIC hic,DWORD dwFlags,LPBITMAPINFOHEADER lpbiSrc,LPVOID lpSrc,INT xSrc,INT ySrc,INT dxSrc,INT dySrc,LPBITMAPINFOHEADER lpbiDst,LPVOID lpDst,INT xDst,INT yDst,INT dxDst,INT dyDst)
+{
+ ICDECOMPRESSEX ic;
+ ic.dwFlags = dwFlags;
+ ic.lpbiSrc = lpbiSrc;
+ ic.lpSrc = lpSrc;
+ ic.xSrc = xSrc;
+ ic.ySrc = ySrc;
+ ic.dxSrc = dxSrc;
+ ic.dySrc = dySrc;
+ ic.lpbiDst = lpbiDst;
+ ic.lpDst = lpDst;
+ ic.xDst = xDst;
+ ic.yDst = yDst;
+ ic.dxDst = dxDst;
+ ic.dyDst = dyDst;
+ return ICSendMessage(hic,ICM_DECOMPRESSEX,(DWORD)&ic,sizeof(ic));
+}
+static __inline LRESULT
+ICDecompressExBegin(HIC hic,DWORD dwFlags,LPBITMAPINFOHEADER lpbiSrc,LPVOID lpSrc,INT xSrc,INT ySrc,INT dxSrc,INT dySrc,LPBITMAPINFOHEADER lpbiDst,LPVOID lpDst,INT xDst,INT yDst,INT dxDst,INT dyDst)
+{
+ ICDECOMPRESSEX ic;
+ ic.dwFlags = dwFlags;
+ ic.lpbiSrc = lpbiSrc;
+ ic.lpSrc = lpSrc;
+ ic.xSrc = xSrc;
+ ic.ySrc = ySrc;
+ ic.dxSrc = dxSrc;
+ ic.dySrc = dySrc;
+ ic.lpbiDst = lpbiDst;
+ ic.lpDst = lpDst;
+ ic.xDst = xDst;
+ ic.yDst = yDst;
+ ic.dxDst = dxDst;
+ ic.dyDst = dyDst;
+ return ICSendMessage(hic,ICM_DECOMPRESSEX_BEGIN,(DWORD)&ic,sizeof(ic));
+}
+static __inline LRESULT
+ICDecompressExQuery(HIC hic,DWORD dwFlags,LPBITMAPINFOHEADER lpbiSrc,LPVOID lpSrc,INT xSrc,INT ySrc,INT dxSrc,INT dySrc,LPBITMAPINFOHEADER lpbiDst,LPVOID lpDst,INT xDst,INT yDst,INT dxDst,INT dyDst)
+{
+ ICDECOMPRESSEX ic;
+ ic.dwFlags = dwFlags;
+ ic.lpbiSrc = lpbiSrc;
+ ic.lpSrc = lpSrc;
+ ic.xSrc = xSrc;
+ ic.ySrc = ySrc;
+ ic.dxSrc = dxSrc;
+ ic.dySrc = dySrc;
+ ic.lpbiDst = lpbiDst;
+ ic.lpDst = lpDst;
+ ic.xDst = xDst;
+ ic.yDst = yDst;
+ ic.dxDst = dxDst;
+ ic.dyDst = dyDst;
+ return ICSendMessage(hic,ICM_DECOMPRESSEX_QUERY,(DWORD)&ic,sizeof(ic));
+}
+
+#define WM_CAP_SET_CALLBACK_ERRORA (WM_USER + 2)
+#define WM_CAP_SET_CALLBACK_ERRORW (WM_CAP_SET_CALLBACK_ERRORA + 100)
+#define WM_CAP_SET_CALLBACK_STATUS (WM_USER + 3)
+#define WM_CAP_SET_CALLBACK_YIELD (WM_USER + 4)
+#define WM_CAP_SET_CALLBACK_FRAMEA (WM_USER + 5)
+#define WM_CAP_SET_CALLBACK_FRAMEW (WM_CAP_SET_CALLBACK_FRAMEA + 100)
+#define WM_CAP_SET_CALLBACK_VIDEOSTREAM (WM_USER + 6)
+#define WM_CAP_SET_CALLBACK_WAVESTREAM (WM_USER + 7)
+#define WM_CAP_GET_USER_DATA (WM_USER + 8)
+#define WM_CAP_SET_USER_DATA (WM_USER + 9)
+#define WM_CAP_DRIVER_CONNECT (WM_USER + 10)
+#define WM_CAP_DRIVER_DISCONNECT (WM_USER + 11)
+#define WM_CAP_DRIVER_GET_NAMEA (WM_USER + 12)
+#define WM_CAP_DRIVER_GET_NAMEW (WM_CAP_DRIVER_GET_NAMEA + 100)
+#define WM_CAP_DRIVER_GET_VERSIONA (WM_USER + 13)
+#define WM_CAP_DRIVER_GET_VERSIONW (WM_CAP_DRIVER_GET_VERSIONA + 100)
+#define WM_CAP_DRIVER_GET_CAPS (WM_USER + 14)
+#define WM_CAP_FILE_SET_CAPTURE_FILEA (WM_USER + 20)
+#define WM_CAP_FILE_SET_CAPTURE_FILEW (WM_CAP_FILE_SET_CAPTURE_FILEA + 100)
+#define WM_CAP_FILE_GET_CAPTURE_FILEA (WM_USER + 21)
+#define WM_CAP_FILE_GET_CAPTURE_FILEW (WM_CAP_FILE_GET_CAPTURE_FILEA + 100)
+#define WM_CAP_FILE_ALLOCATE (WM_USER + 22)
+#define WM_CAP_FILE_SAVEASA (WM_USER + 23)
+#define WM_CAP_FILE_SAVEASW (WM_CAP_FILE_SAVEASA + 100)
+#define WM_CAP_FILE_SET_INFOCHUNK (WM_USER + 24)
+#define WM_CAP_FILE_SAVEDIBA (WM_USER + 25)
+#define WM_CAP_FILE_SAVEDIBW (WM_CAP_FILE_SAVEDIBA + 100)
+#define WM_CAP_EDIT_COPY (WM_USER + 30)
+#define WM_CAP_SET_AUDIOFORMAT (WM_USER + 35)
+#define WM_CAP_GET_AUDIOFORMAT (WM_USER + 36)
+#define WM_CAP_DLG_VIDEOFORMAT (WM_USER + 41)
+#define WM_CAP_DLG_VIDEOSOURCE (WM_USER + 42)
+#define WM_CAP_DLG_VIDEODISPLAY (WM_USER + 43)
+#define WM_CAP_GET_VIDEOFORMAT (WM_USER + 44)
+#define WM_CAP_SET_VIDEOFORMAT (WM_USER + 45)
+#define WM_CAP_DLG_VIDEOCOMPRESSION (WM_USER + 46)
+#define WM_CAP_SET_PREVIEW (WM_USER + 50)
+#define WM_CAP_SET_OVERLAY (WM_USER + 51)
+#define WM_CAP_SET_PREVIEWRATE (WM_USER + 52)
+#define WM_CAP_SET_SCALE (WM_USER + 53)
+#define WM_CAP_GET_STATUS (WM_USER + 54)
+#define WM_CAP_SET_SCROLL (WM_USER + 55)
+#define WM_CAP_GRAB_FRAME (WM_USER + 60)
+#define WM_CAP_GRAB_FRAME_NOSTOP (WM_USER + 61)
+#define WM_CAP_SEQUENCE (WM_USER + 62)
+#define WM_CAP_SEQUENCE_NOFILE (WM_USER + 63)
+#define WM_CAP_SET_SEQUENCE_SETUP (WM_USER + 64)
+#define WM_CAP_GET_SEQUENCE_SETUP (WM_USER + 65)
+#define WM_CAP_SET_MCI_DEVICEA (WM_USER + 66)
+#define WM_CAP_SET_MCI_DEVICEW (WM_CAP_SET_MCI_DEVICEA + 100)
+#define WM_CAP_GET_MCI_DEVICEA (WM_USER + 67)
+#define WM_CAP_GET_MCI_DEVICEW (WM_CAP_GET_MCI_DEVICEA + 100)
+#define WM_CAP_STOP (WM_USER + 68)
+#define WM_CAP_ABORT (WM_USER + 69)
+#define WM_CAP_SINGLE_FRAME_OPEN (WM_USER + 70)
+#define WM_CAP_SINGLE_FRAME_CLOSE (WM_USER + 71)
+#define WM_CAP_SINGLE_FRAME (WM_USER + 72)
+#define WM_CAP_PAL_OPENA (WM_USER + 80)
+#define WM_CAP_PAL_OPENW (WM_CAP_PAL_OPENA + 100)
+#define WM_CAP_PAL_SAVEA (WM_USER + 81)
+#define WM_CAP_PAL_SAVEW (WM_CAP_PAL_SAVEA + 100)
+#define WM_CAP_PAL_PASTE (WM_USER + 82)
+#define WM_CAP_PAL_AUTOCREATE (WM_USER + 83)
+#define WM_CAP_PAL_MANUALCREATE (WM_USER + 84)
+#define WM_CAP_SET_CALLBACK_CAPCONTROL (WM_USER + 85)
+
+#ifdef UNICODE
+#define WM_CAP_SET_CALLBACK_ERROR WM_CAP_SET_CALLBACK_ERRORW
+#define WM_CAP_SET_CALLBACK_FRAME WM_CAP_SET_CALLBACK_FRAMEW
+#define WM_CAP_DRIVER_GET_NAME WM_CAP_DRIVER_GET_NAMEW
+#define WM_CAP_DRIVER_GET_VERSION WM_CAP_DRIVER_GET_VERSIONW
+#define WM_CAP_FILE_SET_CAPTURE_FILE WM_CAP_FILE_SET_CAPTURE_FILEW
+#define WM_CAP_FILE_GET_CAPTURE_FILE WM_CAP_FILE_GET_CAPTURE_FILEW
+#define WM_CAP_FILE_SAVEAS WM_CAP_FILE_SAVEASW
+#define WM_CAP_FILE_SAVEDIB WM_CAP_FILE_SAVEDIBW
+#define WM_CAP_SET_MCI_DEVICE WM_CAP_SET_MCI_DEVICEW
+#define WM_CAP_GET_MCI_DEVICE WM_CAP_GET_MCI_DEVICEW
+#define WM_CAP_PAL_OPEN WM_CAP_PAL_OPENW
+#define WM_CAP_PAL_SAVE WM_CAP_PAL_SAVEW
+#else
+#define WM_CAP_SET_CALLBACK_ERROR WM_CAP_SET_CALLBACK_ERRORA
+#define WM_CAP_SET_CALLBACK_FRAME WM_CAP_SET_CALLBACK_FRAMEA
+#define WM_CAP_DRIVER_GET_NAME WM_CAP_DRIVER_GET_NAMEA
+#define WM_CAP_DRIVER_GET_VERSION WM_CAP_DRIVER_GET_VERSIONA
+#define WM_CAP_FILE_SET_CAPTURE_FILE WM_CAP_FILE_SET_CAPTURE_FILEA
+#define WM_CAP_FILE_GET_CAPTURE_FILE WM_CAP_FILE_GET_CAPTURE_FILEA
+#define WM_CAP_FILE_SAVEAS WM_CAP_FILE_SAVEASA
+#define WM_CAP_FILE_SAVEDIB WM_CAP_FILE_SAVEDIBA
+#define WM_CAP_SET_MCI_DEVICE WM_CAP_SET_MCI_DEVICEA
+#define WM_CAP_GET_MCI_DEVICE WM_CAP_GET_MCI_DEVICEA
+#define WM_CAP_PAL_OPEN WM_CAP_PAL_OPENA
+#define WM_CAP_PAL_SAVE WM_CAP_PAL_SAVEA
+#endif
+
+#define __capSendMessage(hwnd,m,w,l) (IsWindow(hwnd)?SendMessage(hwnd,m,w,l):0)
+
+#define capSetCallbackOnError(hwnd,fpProc) ((BOOL) __capSendMessage(hwnd,WM_CAP_SET_CALLBACK_ERROR,0,(LPARAM)(LPVOID)(fpProc)))
+#define capSetCallbackOnStatus(hwnd,fpProc) ((BOOL) __capSendMessage(hwnd,WM_CAP_SET_CALLBACK_STATUS,0,(LPARAM)(LPVOID)(fpProc)))
+#define capSetCallbackOnYield(hwnd,fpProc) ((BOOL) __capSendMessage(hwnd,WM_CAP_SET_CALLBACK_YIELD,0,(LPARAM)(LPVOID)(fpProc)))
+#define capSetCallbackOnFrame(hwnd,fpProc) ((BOOL) __capSendMessage(hwnd,WM_CAP_SET_CALLBACK_FRAME,0,(LPARAM)(LPVOID)(fpProc)))
+#define capSetCallbackOnVideoStream(hwnd,fpProc) ((BOOL) __capSendMessage(hwnd,WM_CAP_SET_CALLBACK_VIDEOSTREAM,0,(LPARAM)(LPVOID)(fpProc)))
+#define capSetCallbackOnWaveStream(hwnd,fpProc) ((BOOL) __capSendMessage(hwnd,WM_CAP_SET_CALLBACK_WAVESTREAM,0,(LPARAM)(LPVOID)(fpProc)))
+#define capGetUserData(hwnd) ((LONG) __capSendMessage(hwnd,WM_CAP_GET_USER_DATA,0,0))
+#define capSetUserData(hwnd,lUser) ((BOOL) __capSendMessage(hwnd,WM_CAP_SET_USER_DATA,0,(LPARAM)lUser))
+#define capDriverConnect(hwnd,i) ((BOOL) __capSendMessage(hwnd,WM_CAP_DRIVER_CONNECT,(WPARAM)(i),0))
+#define capDriverDisconnect(hwnd) ((BOOL) __capSendMessage(hwnd,WM_CAP_DRIVER_DISCONNECT,0,0))
+#define capDriverGetName(hwnd,szName,wSize) ((BOOL) __capSendMessage(hwnd,WM_CAP_DRIVER_GET_NAME,(WPARAM)(wSize),(LPARAM)(LPVOID)(LPTSTR)(szName)))
+#define capDriverGetVersion(hwnd,szVer,wSize) ((BOOL) __capSendMessage(hwnd,WM_CAP_DRIVER_GET_VERSION,(WPARAM)(wSize),(LPARAM)(LPVOID)(LPTSTR)(szVer)))
+#define capDriverGetCaps(hwnd,psCaps,wSize) ((BOOL) __capSendMessage(hwnd,WM_CAP_DRIVER_GET_CAPS,(WPARAM)(wSize),(LPARAM)(LPVOID)(LPCAPDRIVERCAPS)(psCaps)))
+#define capFileSetCaptureFile(hwnd,szName) ((BOOL) __capSendMessage(hwnd,WM_CAP_FILE_SET_CAPTURE_FILE,0,(LPARAM)(LPVOID)(LPTSTR)(szName)))
+#define capFileGetCaptureFile(hwnd,szName,wSize) ((BOOL) __capSendMessage(hwnd,WM_CAP_FILE_GET_CAPTURE_FILE,(WPARAM)(wSize), (LPARAM)(LPVOID)(LPTSTR)(szName)))
+#define capFileAlloc(hwnd,dwSize) ((BOOL) __capSendMessage(hwnd,WM_CAP_FILE_ALLOCATE,0,(LPARAM)(DWORD)(dwSize)))
+#define capFileSaveAs(hwnd,szName) ((BOOL) __capSendMessage(hwnd,WM_CAP_FILE_SAVEAS,0,(LPARAM)(LPVOID)(LPTSTR)(szName)))
+#define capFileSetInfoChunk(hwnd,lpInfoChunk) ((BOOL) __capSendMessage(hwnd,WM_CAP_FILE_SET_INFOCHUNK,0,(LPARAM)(LPCAPINFOCHUNK)(lpInfoChunk)))
+#define capFileSaveDIB(hwnd, szName) ((BOOL) __capSendMessage(hwnd,WM_CAP_FILE_SAVEDIB,0,(LPARAM)(LPVOID)(LPTSTR)(szName)))
+#define capEditCopy(hwnd) ((BOOL) __capSendMessage(hwnd,WM_CAP_EDIT_COPY,0,0))
+#define capSetAudioFormat(hwnd,psAudioFormat,wSize) ((BOOL) __capSendMessage(hwnd,WM_CAP_SET_AUDIOFORMAT,(WPARAM)(wSize),(LPARAM)(LPVOID)(LPWAVEFORMATEX)(psAudioFormat)))
+#define capGetAudioFormat(hwnd,psAudioFormat,wSize) ((DWORD)__capSendMessage(hwnd,WM_CAP_GET_AUDIOFORMAT,(WPARAM)(wSize),(LPARAM)(LPVOID)(LPWAVEFORMATEX)(psAudioFormat)))
+#define capGetAudioFormatSize(hwnd) ((DWORD)__capSendMessage(hwnd,WM_CAP_GET_AUDIOFORMAT,0,0))
+#define capDlgVideoFormat(hwnd) ((BOOL) __capSendMessage(hwnd,WM_CAP_DLG_VIDEOFORMAT,0,0))
+#define capDlgVideoSource(hwnd) ((BOOL) __capSendMessage(hwnd,WM_CAP_DLG_VIDEOSOURCE,0,0))
+#define capDlgVideoDisplay(hwnd) ((BOOL) __capSendMessage(hwnd,WM_CAP_DLG_VIDEODISPLAY,0,0))
+#define capGetVideoFormat(hwnd,psVideoFormat,wSize) ((DWORD)__capSendMessage(hwnd,WM_CAP_GET_VIDEOFORMAT,(WPARAM)(wSize),(LPARAM)(LPVOID)(psVideoFormat)))
+#define capGetVideoFormatSize(hwnd) ((DWORD)__capSendMessage(hwnd,WM_CAP_GET_VIDEOFORMAT,0,0))
+#define capSetVideoFormat(hwnd,psVideoFormat,wSize) ((BOOL) __capSendMessage(hwnd,WM_CAP_SET_VIDEOFORMAT,(WPARAM)(wSize),(LPARAM)(LPVOID)(psVideoFormat)))
+#define capDlgVideoCompression(hwnd) ((BOOL) __capSendMessage(hwnd,WM_CAP_DLG_VIDEOCOMPRESSION,0,0))
+#define capPreview(hwnd,f) ((BOOL) __capSendMessage(hwnd,WM_CAP_SET_PREVIEW,(WPARAM)(BOOL)(f),0))
+#define capOverlay(hwnd,f) ((BOOL) __capSendMessage(hwnd,WM_CAP_SET_OVERLAY,(WPARAM)(BOOL)(f),0))
+#define capPreviewRate(hwnd,wMS) ((BOOL) __capSendMessage(hwnd,WM_CAP_SET_PREVIEWRATE,(WPARAM)(wMS),0))
+#define capPreviewScale(hwnd,f) ((BOOL) __capSendMessage(hwnd,WM_CAP_SET_SCALE,(WPARAM)(BOOL)f,0))
+#define capGetStatus(hwnd,s,wSize) ((BOOL) __capSendMessage(hwnd,WM_CAP_GET_STATUS,(WPARAM)(wSize),(LPARAM)(LPVOID)(LPCAPSTATUS)(s)))
+#define capSetScrollPos(hwnd,lpP) ((BOOL) __capSendMessage(hwnd,WM_CAP_SET_SCROLL,0,(LPARAM)(LPPOINT)(lpP)))
+#define capGrabFrame(hwnd) ((BOOL) __capSendMessage(hwnd,WM_CAP_GRAB_FRAME,0,0))
+#define capGrabFrameNoStop(hwnd) ((BOOL) __capSendMessage(hwnd,WM_CAP_GRAB_FRAME_NOSTOP,0,0))
+#define capCaptureSequence(hwnd) ((BOOL) __capSendMessage(hwnd,WM_CAP_SEQUENCE,0,0))
+#define capCaptureSequenceNoFile(hwnd) ((BOOL) __capSendMessage(hwnd,WM_CAP_SEQUENCE_NOFILE,0,0))
+#define capCaptureSetSetup(hwnd,s,wSize) ((BOOL) __capSendMessage(hwnd,WM_CAP_SET_SEQUENCE_SETUP,(WPARAM)(wSize),(LPARAM)(LPVOID)(LPCAPTUREPARMS)(s)))
+#define capCaptureGetSetup(hwnd,s,wSize) ((BOOL) __capSendMessage(hwnd,WM_CAP_GET_SEQUENCE_SETUP,(WPARAM)(wSize),(LPARAM)(LPVOID)(LPCAPTUREPARMS)(s)))
+#define capSetMCIDeviceName(hwnd,szName) ((BOOL) __capSendMessage(hwnd,WM_CAP_SET_MCI_DEVICE,0,(LPARAM)(LPVOID)(LPTSTR)(szName)))
+#define capGetMCIDeviceName(hwnd,szName,wSize) ((BOOL) __capSendMessage(hwnd,WM_CAP_GET_MCI_DEVICE,(WPARAM)(wSize),(LPARAM)(LPVOID)(LPTSTR)(szName)))
+#define capCaptureStop(hwnd) ((BOOL) __capSendMessage(hwnd,WM_CAP_STOP,0,0))
+#define capCaptureAbort(hwnd) ((BOOL) __capSendMessage(hwnd,WM_CAP_ABORT,0,0))
+#define capCaptureSingleFrameOpen(hwnd) ((BOOL) __capSendMessage(hwnd,WM_CAP_SINGLE_FRAME_OPEN,0,0))
+#define capCaptureSingleFrameClose(hwnd) ((BOOL) __capSendMessage(hwnd,WM_CAP_SINGLE_FRAME_CLOSE,0,0))
+#define capCaptureSingleFrame(hwnd) ((BOOL) __capSendMessage(hwnd,WM_CAP_SINGLE_FRAME,0,0))
+#define capPaletteOpen(hwnd,szName) ((BOOL) __capSendMessage(hwnd,WM_CAP_PAL_OPEN,0,(LPARAM)(LPVOID)(LPTSTR)(szName)))
+#define capPaletteSave(hwnd,szName) ((BOOL) __capSendMessage(hwnd,WM_CAP_PAL_SAVE,0,(LPARAM)(LPVOID)(LPTSTR)(szName)))
+#define capPalettePaste(hwnd) ((BOOL) __capSendMessage(hwnd,WM_CAP_PAL_PASTE,0,0))
+#define capPaletteAuto(hwnd,iFrames,iColors) ((BOOL) __capSendMessage(hwnd,WM_CAP_PAL_AUTOCREATE,(WPARAM)(iFrames),(LPARAM)(DWORD)(iColors)))
+#define capPaletteManual(hwnd,fGrab,iColors) ((BOOL) __capSendMessage(hwnd,WM_CAP_PAL_MANUALCREATE,(WPARAM)(fGrab),(LPARAM)(DWORD)(iColors)))
+#define capSetCallbackOnCapControl(hwnd,fpProc) ((BOOL) __capSendMessage(hwnd,WM_CAP_SET_CALLBACK_CAPCONTROL,0,(LPARAM)(LPVOID)(fpProc)))
+
+/* AVICAP32 exports */
+HWND VFWAPI capCreateCaptureWindowA (LPCSTR,DWORD,int,int,int,int,HWND,int);
+HWND VFWAPI capCreateCaptureWindowW (LPCWSTR,DWORD,int,int,int,int,HWND,int);
+BOOL VFWAPI capGetDriverDescriptionA (UINT,LPSTR,int,LPSTR,int);
+BOOL VFWAPI capGetDriverDescriptionW (UINT,LPWSTR,int,LPWSTR,int);
+
+#ifdef UNICODE
+#define AVISTREAMINFO AVISTREAMINFOW
+#define LPAVISTREAMINFO LPAVISTREAMINFOW
+#define PAVISTREAMINFO PAVISTREAMINFOW
+#define AVIFILEINFO AVIFILEINFOW
+#define PAVIFILEINFO PAVIFILEINFOW
+#define LPAVIFILEINFO LPAVIFILEINFOW
+#define AVIStreamInfo AVIStreamInfoW
+#define AVIStreamOpenFromFile AVIStreamOpenFromFileW
+#define AVIBuildFilter AVIBuildFilterW
+#define AVISaveV AVISaveVW
+#define EditStreamSetInfo EditStreamSetInfoW
+#define EditStreamSetName EditStreamSetNameW
+#define AVIFileOpen AVIFileOpenW
+#define AVIFileInfo AVIFileInfoW
+#define AVIFileCreateStream AVIFileCreateStreamW
+#define GetOpenFileNamePreview GetOpenFileNamePreviewW
+#define GetSaveFileNamePreview GetSaveFileNamePreviewW
+#define MCIWndCreate MCIWndCreateW
+#define MCIWNDF_NOTIFYMEDIA MCIWNDF_NOTIFYMEDIAW
+#define MCIWNDM_SENDSTRING MCIWNDM_SENDSTRINGW
+#define MCIWNDM_GETPOSITION MCIWNDM_GETPOSITIONW
+#define MCIWNDM_GETMODE MCIWNDM_GETMODEW
+#define MCIWNDM_SETTIMEFORMAT MCIWNDM_SETTIMEFORMATW
+#define MCIWNDM_GETTIMEFORMAT MCIWNDM_GETTIMEFORMATW
+#define MCIWNDM_GETFILENAME MCIWNDM_GETFILENAMEW
+#define MCIWNDM_GETDEVICE MCIWNDM_GETDEVICEW
+#define MCIWNDM_GETERROR MCIWNDM_GETERRORW
+#define MCIWNDM_NEW MCIWNDM_NEWW
+#define MCIWNDM_RETURNSTRING MCIWNDM_RETURNSTRINGW
+#define MCIWNDM_OPEN MCIWNDM_OPENW
+
+#define capCreateCaptureWindow capCreateCaptureWindowW
+#define capGetDriverDescription capGetDriverDescriptionW
+
+#else
+#define AVISTREAMINFO AVISTREAMINFOA
+#define LPAVISTREAMINFO LPAVISTREAMINFOA
+#define PAVISTREAMINFO PAVISTREAMINFOA
+#define AVIFILEINFO AVIFILEINFOA
+#define PAVIFILEINFO PAVIFILEINFOA
+#define LPAVIFILEINFO LPAVIFILEINFOA
+#define AVIStreamInfo AVIStreamInfoA
+#define AVIStreamOpenFromFile AVIStreamOpenFromFileA
+#define AVIBuildFilter AVIBuildFilterA
+#define AVISaveV AVISaveVA
+#define EditStreamSetInfo EditStreamSetInfoA
+#define EditStreamSetName EditStreamSetNameA
+#define AVIFileOpen AVIFileOpenA
+#define AVIFileInfo AVIFileInfoA
+#define AVIFileCreateStream AVIFileCreateStreamA
+#define GetOpenFileNamePreview GetOpenFileNamePreviewA
+#define GetSaveFileNamePreview GetSaveFileNamePreviewA
+#define MCIWndCreate MCIWndCreateA
+#define MCIWNDF_NOTIFYMEDIA MCIWNDF_NOTIFYMEDIAA
+#define MCIWNDM_SENDSTRING MCIWNDM_SENDSTRINGA
+#define MCIWNDM_GETPOSITION MCIWNDM_GETPOSITIONA
+#define MCIWNDM_GETMODE MCIWNDM_GETMODEA
+#define MCIWNDM_SETTIMEFORMAT MCIWNDM_SETTIMEFORMATA
+#define MCIWNDM_GETTIMEFORMAT MCIWNDM_GETTIMEFORMATA
+#define MCIWNDM_GETFILENAME MCIWNDM_GETFILENAMEA
+#define MCIWNDM_GETDEVICE MCIWNDM_GETDEVICEA
+#define MCIWNDM_GETERROR MCIWNDM_GETERRORA
+#define MCIWNDM_NEW MCIWNDM_NEWA
+#define MCIWNDM_RETURNSTRING MCIWNDM_RETURNSTRINGA
+#define MCIWNDM_OPEN MCIWNDM_OPENA
+
+#define capCreateCaptureWindow capCreateCaptureWindowA
+#define capGetDriverDescription capGetDriverDescriptionA
+
+#endif
+
+#endif /* RC_INVOKED */
+
+#ifdef __cplusplus
+}
+#endif
+#include <poppack.h>
+#endif /* _VFW_H */
diff --git a/tcc/include/winapi/vidcap.h b/tcc/include/winapi/vidcap.h
new file mode 100644
index 0000000..be9260f
--- /dev/null
+++ b/tcc/include/winapi/vidcap.h
@@ -0,0 +1,23 @@
+#ifndef _VIDCAP_H
+#define _VIDCAP_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--- DirectShow Reference - DirectShow Structures */
+typedef struct {
+ ULONG FromNode;
+ ULONG FromNodePin;
+ ULONG ToNode;
+ ULONG ToNodePin;
+} KSTOPOLOGY_CONNECTION;
+#define KSFILTER_NODE 0xFFFFFFFF
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/vmr9.h b/tcc/include/winapi/vmr9.h
new file mode 100644
index 0000000..9c5cd8d
--- /dev/null
+++ b/tcc/include/winapi/vmr9.h
@@ -0,0 +1,211 @@
+#ifndef _VMR9_H
+#define _VMR9_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--- DirectShow Reference - DirectShow Enumerated Types */
+typedef enum _VMR9_SampleFormat {
+ VMR9_SampleReserved = 1,
+ VMR9_SampleProgressiveFrame = 2,
+ VMR9_SampleFieldInterleavedEvenFirst = 3,
+ VMR9_SampleFieldInterleavedOddFirst = 4,
+ VMR9_SampleFieldSingleEven = 5,
+ VMR9_SampleFieldSingleOdd = 6
+} VMR9_SampleFormat;
+typedef enum {
+ VMR9AlphaBitmap_Disable = 0x00000001,
+ VMR9AlphaBitmap_hDC = 0x00000002,
+ VMR9AlphaBitmap_EntireDDS = 0x00000004,
+ VMR9AlphaBitmap_SrcColorKey = 0x00000008,
+ VMR9AlphaBitmap_SrcRect = 0x00000010,
+ VMR9AlphaBitmap_FilterMode = 0x00000020
+} VMR9AlphaBitmapFlags;
+typedef enum {
+ VMR9ARMode_None,
+ VMR9ARMode_LetterBox
+} VMR9AspectRatioMode;
+typedef enum {
+ DeinterlacePref9_NextBest = 0x01,
+ DeinterlacePref9_BOB = 0x02,
+ DeinterlacePref9_Weave = 0x04,
+ DeinterlacePref9_Mask = 0x07
+} VMR9DeinterlacePrefs;
+typedef enum {
+ DeinterlaceTech9_Unknown = 0x0000,
+ DeinterlaceTech9_BOBLineReplicate = 0x0001,
+ DeinterlaceTech9_BOBVerticalStretch = 0x0002,
+ DeinterlaceTech9_MedianFiltering = 0x0004,
+ DeinterlaceTech9_EdgeFiltering = 0x0010,
+ DeinterlaceTech9_FieldAdaptive = 0x0020,
+ DeinterlaceTech9_PixelAdaptive = 0x0040,
+ DeinterlaceTech9_MotionVectorSteered = 0x0080
+} VMR9DeinterlaceTech;
+typedef enum {
+ MixerPref9_NoDecimation = 0x00000001,
+ MixerPref9_DecimateOutput = 0x00000002,
+ MixerPref9_ARAdjustXorY = 0x00000004,
+ MixerPref9_NonSquareMixing = 0x00000008,
+ MixerPref9_DecimateMask = 0x0000000F,
+ MixerPref9_BiLinearFiltering = 0x00000010,
+ MixerPref9_PointFiltering = 0x00000020,
+ MixerPref9_AnisotropicFiltering = 0x00000040,
+ MixerPref9_PyramidalQuadFiltering = 0x00000080,
+ MixerPref9_GaussianQuadFiltering = 0x00000100,
+ MixerPref9_FilteringReserved = 0x00000E00,
+ MixerPref9_FilteringMask = 0x00000FF0,
+ MixerPref9_RenderTargetRGB = 0x00001000,
+ MixerPref9_RenderTargetYUV = 0x00002000,
+ MixerPref9_RenderTargetReserved = 0x000FC000,
+ MixerPref9_RenderTargetMask = 0x000FF000
+ MixerPref9_DynamicSwitchToBOB = 0x00100000,
+ MixerPref9_DynamicDecimateBy2 = 0x00200000,
+ MixerPref9_DynamicReserved = 0x00C00000,
+ MixerPref9_DynamicMask = 0x00F00000
+} VMR9MixerPrefs;
+typedef enum VMR9Mode {
+ VMR9Mode_Windowed = 0x00000001,
+ VMR9Mode_Windowless = 0x00000002,
+ VMR9Mode_Renderless = 0x00000004,
+ VMR9Mode_Mask = 0x00000007
+};
+typedef enum {
+ VMR9Sample_SyncPoint = 0x00000001,
+ VMR9Sample_Preroll = 0x00000002,
+ VMR9Sample_Discontinuity = 0x00000004,
+ VMR9Sample_TimeValid = 0x00000008
+} VMR9PresentationFlags;
+typedef enum {
+ ProcAmpControl9_Brightness = 0x00000001,
+ ProcAmpControl9_Contrast = 0x00000002,
+ ProcAmpControl9_Hue = 0x00000004,
+ ProcAmpControl9_Saturation = 0x00000008,
+ ProcAmpControl9_Mask = 0x0000000F
+} VMR9ProcAmpControlFlags;
+typedef enum VMR9RenderPrefs {
+ RenderPrefs9_DoNotRenderBorder = 0x00000001,
+ RenderPrefs9_Mask = 0x00000001
+};
+typedef enum {
+ VMR9AllocFlag_3DRenderTarget = 0x0001,
+ VMR9AllocFlag_DXVATarget = 0x0002,
+ VMR9AllocFlag_TextureSurface = 0x0004,
+ VMR9AllocFlag_OffscreenSurface = 0x0008,
+ VMR9AllocFlag_UsageReserved = 0x00F0,
+ VMR9AllocFlag_UsageMask = 0x00FF
+} VMR9SurfaceAllocationFlags;
+/*--- DirectShow Reference - DirectShow Structures */
+/**********
+typedef struct VMR9AllocationInfo{
+ DWORD dwFlags;
+ DWORD dwWidth;
+ DWORD dwHeight;
+ D3DFORMAT Format;
+ D3DPOOL Pool;
+ DWORD MinBuffers;
+ SIZE szAspectRatio;
+ SIZE szNativeSize;
+};
+**********/
+typedef struct _VMR9DeinterlaceCaps {
+ DWORD dwSize;
+ DWORD dwNumPreviousOutputFrames;
+ DWORD dwNumForwardRefSamples;
+ DWORD dwNumBackwardRefSamples;
+ VMRDeinterlaceTech DeinterlaceTechnology;
+} VMR9DeinterlaceCaps;
+typedef struct _VMR9Frequency {
+ DWORD dwNumerator;
+ DWORD dwDenominator;
+} VMR9Frequency;
+typedef struct {
+ UINT uDevID;
+ RECT rcMonitor;
+ HMONITOR hMon;
+ DWORD dwFlags;
+ wchar_t szDevice[32];
+ wchar_t szDescription[512]
+ LARGE_INTEGER liDriverVersion;
+ DWORD dwVendorId;
+ DWORD dwDeviceId;
+ DWORD dwSubSysId;
+ DWORD dwRevision;
+} VMR9MonitorInfo;
+typedef struct VMR9NormalizedRect{
+ float left;
+ float top;
+ float right;
+ float bottom;
+};
+/**********
+typedef struct {
+ DWORD dwFlags;
+ IDirect3DSurface9 *lpSurf;
+ REFERENCE_TIME rtStart;
+ REFERENCE_TIME rtEnd;
+ SIZE szAspectRatio;
+ RECT rcSrc;
+ RECT rcDst;
+ DWORD dwReserved1;
+ DWORD dwReserved2;
+} VMR9PresentationInfo;
+**********/
+typedef struct _VMR9ProcAmpControl
+{
+ DWORD dwSize;
+ DWORD dwFlags;
+ float Contrast;
+ float Brightness;
+ float Hue;
+ float Saturation;
+} VMR9ProcAmpControl;
+typedef struct _VMR9ProcAmpControlRange
+{
+ DWORD dwSize;
+ VMR9ProcAmpControlFlags dwProperty;
+ float MinValue;
+ float MaxValue;
+ float DefaultValue;
+ float StepSize;
+} VMR9ProcAmpControlRange;
+typedef struct _VMR9VideoDesc {
+ DWORD dwSize;
+ DWORD dwSampleWidth;
+ DWORD dwSampleHeight;
+ VMR9_SampleFormat SampleFormat;
+ DWORD dwFourCC;
+ VMR9Frequency InputSampleFreq;
+ VMR9Frequency OutputFrameFreq;
+} VMR9VideoDesc;
+/**********
+typedef struct VMR9VideoStreamInfo{
+ IDirect3DSurface9 *pddsVideoSurface;
+ DWORD dwWidth;
+ DWORD dwHeight;
+ DWORD dwStrmID;
+ FLOAT fAlpha;
+ VMR9NormalizedRect rNormal;
+ REFERENCE_TIME rtStart;
+ REFERENCE_TIME rtEnd;
+ VMR9_SampleFormat SampleFormat;
+};
+typedef struct VMR9AlphaBitmap{
+ DWORD dwFlags;
+ HDC hdc;
+ IDirect3DSurface9 *pDDS;
+ RECT rSrc;
+ VMR9NormalizedRect rDest;
+ FLOAT fAlpha;
+ COLORREF clrSrcKey;
+ DWORD dwFilterMode;
+};
+**********/
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/vptype.h b/tcc/include/winapi/vptype.h
new file mode 100644
index 0000000..d90d614
--- /dev/null
+++ b/tcc/include/winapi/vptype.h
@@ -0,0 +1,55 @@
+#ifndef _VPTYPE_H
+#define _VPTYPE_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--- DirectShow Reference - DirectShow Enumerated Types */
+typedef enum _AMVP_MODE {
+ AMVP_MODE_WEAVE,
+ AMVP_MODE_BOBINTERLEAVED,
+ AMVP_MODE_BOBNONINTERLEAVED,
+ AMVP_MODE_SKIPEVEN,
+ AMVP_MODE_SKIPODD
+} AMVP_MODE;
+typedef enum _AMVP_SELECT_FORMAT_BY {
+ AMVP_DO_NOT_CARE,
+ AMVP_BEST_BANDWIDTH,
+ AMVP_INPUT_SAME_AS_OUTPUT
+} AMVP_SELECT_FORMAT_BY;
+/*--- DirectShow Reference - DirectShow Structures */
+typedef struct _AMVPDIMINFO{
+ DWORD dwFieldWidth;
+ DWORD dwFieldHeight;
+ DWORD dwVBIWidth;
+ DWORD dwVBIHeight;
+ RECT rcValidRegion;
+} AMVPDIMINFO,*LPAMVPDIMINFO;
+typedef struct _AMVPDATAINFO{
+ DWORD dwSize;
+ DWORD dwMicrosecondsPerField;
+ AMVPDIMINFO amvpDimInfo;
+ DWORD dwPictAspectRatioX;
+ DWORD dwPictAspectRatioY;
+ BOOL bEnableDoubleClock;
+ BOOL bEnableVACT;
+ BOOL bDataIsInterlaced;
+ LONG lHalfLinesOdd;
+ BOOL bFieldPolarityInverted;
+ DWORD dwNumLinesInVREF;
+ LONG lHalfLinesEven;
+ DWORD dwReserved1;
+} AMVPDATAINFO,*LPAMVPDATAINFO;
+typedef struct _AMVPSIZE{
+ DWORD dwWidth;
+ DWORD dwHeight;
+} AMVPSIZE,*LPAMVPSIZE;
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/w32api.h b/tcc/include/winapi/w32api.h
new file mode 100644
index 0000000..c3e36c3
--- /dev/null
+++ b/tcc/include/winapi/w32api.h
@@ -0,0 +1,52 @@
+#ifndef _W32API_H
+#define _W32API_H
+#define _W32API_H_
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#define __W32API_VERSION 3.14
+#define __W32API_MAJOR_VERSION 3
+#define __W32API_MINOR_VERSION 14
+
+/* The following defines are for documentation purposes. The following defines
+ * identify the versions of Windows and Internet Explorer. They are not to be
+ * used in the w32api library but may be used by a user to set the _WIN32_WINNT
+ * or _WIN32_WINDOWS and the WINVER values to their minimum level of support.
+ *
+ * Similarly the user can use the Internet Explorer values to set the _WIN32_IE
+ * value to their minimum level of support.
+ */
+
+/* Use these values to set _WIN32_WINDOWS and WINVER to your minimum support
+ * level */
+#define Windows95 0x0400
+#define Windows98 0x0410
+#define WindowsME 0x0500
+
+/* Use these values to set _WIN32_WINNT and WINVER to your mimimum support
+ * level. */
+#define WindowsNT4 0x0400
+#define Windows2000 0x0500
+#define WindowsXP 0x0501
+#define Windows2003 0x0502
+#define WindowsVista 0x0600
+
+/* Use these values to set _WIN32_IE to your minimum support level */
+#define IE3 0x0300
+#define IE301 0x0300
+#define IE302 0x0300
+#define IE4 0x0400
+#define IE401 0x0401
+#define IE5 0x0500
+#define IE5a 0x0500
+#define IE5b 0x0500
+#define IE501 0x0501
+#define IE55 0x0501
+#define IE56 0x0560
+#define IE6 0x0600
+#define IE601 0x0601
+#define IE602 0x0603
+#define IE7 0x0700
+
+#endif /* ndef _W32API_H */
diff --git a/tcc/include/winapi/winable.h b/tcc/include/winapi/winable.h
new file mode 100644
index 0000000..0228293
--- /dev/null
+++ b/tcc/include/winapi/winable.h
@@ -0,0 +1,99 @@
+#ifndef _WINABLE_H
+#define _WINABLE_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if (_WIN32_WINNT < 0x0403)
+#define INPUT_MOUSE 0x00000000
+#define INPUT_KEYBOARD 0x00000001
+#define INPUT_HARDWARE 0x00000002
+#endif /* (_WIN32_WINNT < 0x04030) */
+#if (WINVER < 0x0500)
+#define CHILDID_SELF 0
+#define OBJID_WINDOW 0x00000000
+#define OBJID_SYSMENU 0xFFFFFFFF
+#define OBJID_TITLEBAR 0xFFFFFFFE
+#define OBJID_MENU 0xFFFFFFFD
+#define OBJID_CLIENT 0xFFFFFFFC
+#define OBJID_VSCROLL 0xFFFFFFFB
+#define OBJID_HSCROLL 0xFFFFFFFA
+#define OBJID_SIZEGRIP 0xFFFFFFF9
+#define OBJID_CARET 0xFFFFFFF8
+#define OBJID_CURSOR 0xFFFFFFF7
+#define OBJID_ALERT 0xFFFFFFF6
+#define OBJID_SOUND 0xFFFFFFF5
+#define GUI_CARETBLINKING 0x00000001
+#define GUI_INMOVESIZE 0x00000002
+#define GUI_INMENUMODE 0x00000004
+#define GUI_SYSTEMMENUMODE 0x00000008
+#define GUI_POPUPMENUMODE 0x00000010
+#define WINEVENT_OUTOFCONTEXT 0x0000
+#define WINEVENT_SKIPOWNTHREAD 0x0001
+#define WINEVENT_SKIPOWNPROCESS 0x0002
+#define WINEVENT_INCONTEXT 0x0004
+#endif /* (WINVER < 0x0500) */
+#if (_WIN32_WINNT < 0x0403)
+typedef struct tagMOUSEINPUT {
+ LONG dx;
+ LONG dy;
+ DWORD mouseData;
+ DWORD dwFlags;
+ DWORD time;
+ ULONG_PTR dwExtraInfo;
+} MOUSEINPUT,*PMOUSEINPUT;
+typedef struct tagKEYBDINPUT {
+ WORD wVk;
+ WORD wScan;
+ DWORD dwFlags;
+ DWORD time;
+ ULONG_PTR dwExtraInfo;
+} KEYBDINPUT,*PKEYBDINPUT;
+typedef struct tagHARDWAREINPUT {
+ DWORD uMsg;
+ WORD wParamL;
+ WORD wParamH;
+} HARDWAREINPUT,*PHARDWAREINPUT;
+typedef struct tagINPUT {
+ DWORD type;
+ _ANONYMOUS_UNION union {
+ MOUSEINPUT mi;
+ KEYBDINPUT ki;
+ HARDWAREINPUT hi;
+ } DUMMYUNIONNAME;
+} INPUT,*PINPUT,*LPINPUT;
+#endif /* (_WIN32_WINNT < 0x0403) */
+#if (WINVER < 0x0500)
+typedef VOID (*WINEVENTPROC)(HWINEVENTHOOK,DWORD,HWND,LONG,LONG,DWORD,DWORD);
+typedef struct tagGUITHREADINFO {
+ DWORD cbSize;
+ DWORD flags;
+ HWND hwndActive;
+ HWND hwndFocus;
+ HWND hwndCapture;
+ HWND hwndMenuOwner;
+ HWND hwndMoveSize;
+ HWND hwndCaret;
+ RECT rcCaret;
+} GUITHREADINFO,*PGUITHREADINFO,*LPGUITHREADINFO;
+#endif /* (WINVER < 0x0500) */
+
+BOOL WINAPI BlockInput(BOOL);
+#if (_WIN32_WINNT < 0x0403)
+UINT WINAPI SendInput(UINT,LPINPUT,int);
+#endif
+#if (WINVER < 0x0500)
+BOOL WINAPI GetGUIThreadInfo(DWORD,LPGUITHREADINFO);
+void WINAPI NotifyWinEvent(DWORD,HWND,LONG,LONG);
+HWINEVENTHOOK WINAPI SetWinEventHook(UINT,UINT,HMODULE,WINEVENTPROC,DWORD,DWORD,UINT);
+BOOL WINAPI UnhookWinEvent(HWINEVENTHOOK);
+#endif /* (WINVER < 0x0500) */
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/winbase.h b/tcc/include/winapi/winbase.h
new file mode 100644
index 0000000..2e634fc
--- /dev/null
+++ b/tcc/include/winapi/winbase.h
@@ -0,0 +1,2467 @@
+#ifndef _WINBASE_H
+#define _WINBASE_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifndef WINBASEAPI
+#ifdef __W32API_USE_DLLIMPORT__
+#define WINBASEAPI DECLSPEC_IMPORT
+#else
+#define WINBASEAPI
+#endif
+#endif
+
+#ifndef WINADVAPI
+#ifdef __W32API_USE_DLLIMPORT__
+#define WINADVAPI DECLSPEC_IMPORT
+#else
+#define WINADVAPI
+#endif
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define SP_SERIALCOMM 1
+#define PST_UNSPECIFIED 0
+#define PST_RS232 1
+#define PST_PARALLELPORT 2
+#define PST_RS422 3
+#define PST_RS423 4
+#define PST_RS449 5
+#define PST_MODEM 6
+#define PST_FAX 0x21
+#define PST_SCANNER 0x22
+#define PST_NETWORK_BRIDGE 0x100
+#define PST_LAT 0x101
+#define PST_TCPIP_TELNET 0x102
+#define PST_X25 0x103
+#define BAUD_075 1
+#define BAUD_110 2
+#define BAUD_134_5 4
+#define BAUD_150 8
+#define BAUD_300 16
+#define BAUD_600 32
+#define BAUD_1200 64
+#define BAUD_1800 128
+#define BAUD_2400 256
+#define BAUD_4800 512
+#define BAUD_7200 1024
+#define BAUD_9600 2048
+#define BAUD_14400 4096
+#define BAUD_19200 8192
+#define BAUD_38400 16384
+#define BAUD_56K 32768
+#define BAUD_128K 65536
+#define BAUD_115200 131072
+#define BAUD_57600 262144
+#define BAUD_USER 0x10000000
+#define PCF_DTRDSR 1
+#define PCF_RTSCTS 2
+#define PCF_RLSD 4
+#define PCF_PARITY_CHECK 8
+#define PCF_XONXOFF 16
+#define PCF_SETXCHAR 32
+#define PCF_TOTALTIMEOUTS 64
+#define PCF_INTTIMEOUTS 128
+#define PCF_SPECIALCHARS 256
+#define PCF_16BITMODE 512
+#define SP_PARITY 1
+#define SP_BAUD 2
+#define SP_DATABITS 4
+#define SP_STOPBITS 8
+#define SP_HANDSHAKING 16
+#define SP_PARITY_CHECK 32
+#define SP_RLSD 64
+#define DATABITS_5 1
+#define DATABITS_6 2
+#define DATABITS_7 4
+#define DATABITS_8 8
+#define DATABITS_16 16
+#define DATABITS_16X 32
+#define STOPBITS_10 1
+#define STOPBITS_15 2
+#define STOPBITS_20 4
+#define PARITY_NONE 256
+#define PARITY_ODD 512
+#define PARITY_EVEN 1024
+#define PARITY_MARK 2048
+#define PARITY_SPACE 4096
+#define EXCEPTION_DEBUG_EVENT 1
+#define CREATE_THREAD_DEBUG_EVENT 2
+#define CREATE_PROCESS_DEBUG_EVENT 3
+#define EXIT_THREAD_DEBUG_EVENT 4
+#define EXIT_PROCESS_DEBUG_EVENT 5
+#define LOAD_DLL_DEBUG_EVENT 6
+#define UNLOAD_DLL_DEBUG_EVENT 7
+#define OUTPUT_DEBUG_STRING_EVENT 8
+#define RIP_EVENT 9
+#define HFILE_ERROR ((HFILE)-1)
+#define FILE_BEGIN 0
+#define FILE_CURRENT 1
+#define FILE_END 2
+#define INVALID_SET_FILE_POINTER ((DWORD)-1)
+#define OF_READ 0
+#define OF_READWRITE 2
+#define OF_WRITE 1
+#define OF_SHARE_COMPAT 0
+#define OF_SHARE_DENY_NONE 64
+#define OF_SHARE_DENY_READ 48
+#define OF_SHARE_DENY_WRITE 32
+#define OF_SHARE_EXCLUSIVE 16
+#define OF_CANCEL 2048
+#define OF_CREATE 4096
+#define OF_DELETE 512
+#define OF_EXIST 16384
+#define OF_PARSE 256
+#define OF_PROMPT 8192
+#define OF_REOPEN 32768
+#define OF_VERIFY 1024
+#define NMPWAIT_NOWAIT 1
+#define NMPWAIT_WAIT_FOREVER ((DWORD)-1)
+#define NMPWAIT_USE_DEFAULT_WAIT 0
+#define CE_BREAK 16
+#define CE_DNS 2048
+#define CE_FRAME 8
+#define CE_IOE 1024
+#define CE_MODE 32768
+#define CE_OOP 4096
+#define CE_OVERRUN 2
+#define CE_PTO 512
+#define CE_RXOVER 1
+#define CE_RXPARITY 4
+#define CE_TXFULL 256
+#define PROGRESS_CONTINUE 0
+#define PROGRESS_CANCEL 1
+#define PROGRESS_STOP 2
+#define PROGRESS_QUIET 3
+#define CALLBACK_CHUNK_FINISHED 0
+#define CALLBACK_STREAM_SWITCH 1
+#define COPY_FILE_FAIL_IF_EXISTS 1
+#define COPY_FILE_RESTARTABLE 2
+#define OFS_MAXPATHNAME 128
+#define FILE_MAP_ALL_ACCESS 0xf001f
+#define FILE_MAP_READ 4
+#define FILE_MAP_WRITE 2
+#define FILE_MAP_COPY 1
+#define MUTEX_ALL_ACCESS 0x1f0001
+#define MUTEX_MODIFY_STATE 1
+#define SEMAPHORE_ALL_ACCESS 0x1f0003
+#define SEMAPHORE_MODIFY_STATE 2
+#define EVENT_ALL_ACCESS 0x1f0003
+#define EVENT_MODIFY_STATE 2
+#define PIPE_ACCESS_DUPLEX 3
+#define PIPE_ACCESS_INBOUND 1
+#define PIPE_ACCESS_OUTBOUND 2
+#define PIPE_TYPE_BYTE 0
+#define PIPE_TYPE_MESSAGE 4
+#define PIPE_READMODE_BYTE 0
+#define PIPE_READMODE_MESSAGE 2
+#define PIPE_WAIT 0
+#define PIPE_NOWAIT 1
+#define PIPE_CLIENT_END 0
+#define PIPE_SERVER_END 1
+#define PIPE_UNLIMITED_INSTANCES 255
+#define DEBUG_PROCESS 0x00000001
+#define DEBUG_ONLY_THIS_PROCESS 0x00000002
+#define CREATE_SUSPENDED 0x00000004
+#define DETACHED_PROCESS 0x00000008
+#define CREATE_NEW_CONSOLE 0x00000010
+#define NORMAL_PRIORITY_CLASS 0x00000020
+#define IDLE_PRIORITY_CLASS 0x00000040
+#define HIGH_PRIORITY_CLASS 0x00000080
+#define REALTIME_PRIORITY_CLASS 0x00000100
+#define CREATE_NEW_PROCESS_GROUP 0x00000200
+#define CREATE_UNICODE_ENVIRONMENT 0x00000400
+#define CREATE_SEPARATE_WOW_VDM 0x00000800
+#define CREATE_SHARED_WOW_VDM 0x00001000
+#define CREATE_FORCEDOS 0x00002000
+#define BELOW_NORMAL_PRIORITY_CLASS 0x00004000
+#define ABOVE_NORMAL_PRIORITY_CLASS 0x00008000
+#define CREATE_BREAKAWAY_FROM_JOB 0x01000000
+#define CREATE_WITH_USERPROFILE 0x02000000
+#define CREATE_DEFAULT_ERROR_MODE 0x04000000
+#define CREATE_NO_WINDOW 0x08000000
+#define PROFILE_USER 0x10000000
+#define PROFILE_KERNEL 0x20000000
+#define PROFILE_SERVER 0x40000000
+#define CONSOLE_TEXTMODE_BUFFER 1
+#define CREATE_NEW 1
+#define CREATE_ALWAYS 2
+#define OPEN_EXISTING 3
+#define OPEN_ALWAYS 4
+#define TRUNCATE_EXISTING 5
+#define FILE_FLAG_WRITE_THROUGH 0x80000000
+#define FILE_FLAG_OVERLAPPED 1073741824
+#define FILE_FLAG_NO_BUFFERING 536870912
+#define FILE_FLAG_RANDOM_ACCESS 268435456
+#define FILE_FLAG_SEQUENTIAL_SCAN 134217728
+#define FILE_FLAG_DELETE_ON_CLOSE 67108864
+#define FILE_FLAG_BACKUP_SEMANTICS 33554432
+#define FILE_FLAG_POSIX_SEMANTICS 16777216
+#define FILE_FLAG_OPEN_REPARSE_POINT 2097152
+#define FILE_FLAG_OPEN_NO_RECALL 1048576
+#if (_WIN32_WINNT >= 0x0500)
+#define FILE_FLAG_FIRST_PIPE_INSTANCE 524288
+#endif
+#define CLRDTR 6
+#define CLRRTS 4
+#define SETDTR 5
+#define SETRTS 3
+#define SETXOFF 1
+#define SETXON 2
+#define SETBREAK 8
+#define CLRBREAK 9
+#define STILL_ACTIVE 0x103
+#define FIND_FIRST_EX_CASE_SENSITIVE 1
+#define SCS_32BIT_BINARY 0
+#define SCS_64BIT_BINARY 6
+#define SCS_DOS_BINARY 1
+#define SCS_OS216_BINARY 5
+#define SCS_PIF_BINARY 3
+#define SCS_POSIX_BINARY 4
+#define SCS_WOW_BINARY 2
+#define MAX_COMPUTERNAME_LENGTH 15
+#define HW_PROFILE_GUIDLEN 39
+#define MAX_PROFILE_LEN 80
+#define DOCKINFO_UNDOCKED 1
+#define DOCKINFO_DOCKED 2
+#define DOCKINFO_USER_SUPPLIED 4
+#define DOCKINFO_USER_UNDOCKED (DOCKINFO_USER_SUPPLIED|DOCKINFO_UNDOCKED)
+#define DOCKINFO_USER_DOCKED (DOCKINFO_USER_SUPPLIED|DOCKINFO_DOCKED)
+#define DRIVE_REMOVABLE 2
+#define DRIVE_FIXED 3
+#define DRIVE_REMOTE 4
+#define DRIVE_CDROM 5
+#define DRIVE_RAMDISK 6
+#define DRIVE_UNKNOWN 0
+#define DRIVE_NO_ROOT_DIR 1
+#define FILE_TYPE_UNKNOWN 0
+#define FILE_TYPE_DISK 1
+#define FILE_TYPE_CHAR 2
+#define FILE_TYPE_PIPE 3
+#define FILE_TYPE_REMOTE 0x8000
+/* also in ddk/ntapi.h */
+#define HANDLE_FLAG_INHERIT 0x01
+#define HANDLE_FLAG_PROTECT_FROM_CLOSE 0x02
+/* end ntapi.h */
+#define STD_INPUT_HANDLE (DWORD)(0xfffffff6)
+#define STD_OUTPUT_HANDLE (DWORD)(0xfffffff5)
+#define STD_ERROR_HANDLE (DWORD)(0xfffffff4)
+#define INVALID_HANDLE_VALUE (HANDLE)(-1)
+#define GET_TAPE_MEDIA_INFORMATION 0
+#define GET_TAPE_DRIVE_INFORMATION 1
+#define SET_TAPE_MEDIA_INFORMATION 0
+#define SET_TAPE_DRIVE_INFORMATION 1
+#define THREAD_PRIORITY_ABOVE_NORMAL 1
+#define THREAD_PRIORITY_BELOW_NORMAL (-1)
+#define THREAD_PRIORITY_HIGHEST 2
+#define THREAD_PRIORITY_IDLE (-15)
+#define THREAD_PRIORITY_LOWEST (-2)
+#define THREAD_PRIORITY_NORMAL 0
+#define THREAD_PRIORITY_TIME_CRITICAL 15
+#define THREAD_PRIORITY_ERROR_RETURN 2147483647
+#define TIME_ZONE_ID_UNKNOWN 0
+#define TIME_ZONE_ID_STANDARD 1
+#define TIME_ZONE_ID_DAYLIGHT 2
+#define TIME_ZONE_ID_INVALID 0xFFFFFFFF
+#define FS_CASE_IS_PRESERVED 2
+#define FS_CASE_SENSITIVE 1
+#define FS_UNICODE_STORED_ON_DISK 4
+#define FS_PERSISTENT_ACLS 8
+#define FS_FILE_COMPRESSION 16
+#define FS_VOL_IS_COMPRESSED 32768
+#define GMEM_FIXED 0
+#define GMEM_MOVEABLE 2
+#define GMEM_MODIFY 128
+#define GPTR 64
+#define GHND 66
+#define GMEM_DDESHARE 8192
+#define GMEM_DISCARDABLE 256
+#define GMEM_LOWER 4096
+#define GMEM_NOCOMPACT 16
+#define GMEM_NODISCARD 32
+#define GMEM_NOT_BANKED 4096
+#define GMEM_NOTIFY 16384
+#define GMEM_SHARE 8192
+#define GMEM_ZEROINIT 64
+#define GMEM_DISCARDED 16384
+#define GMEM_INVALID_HANDLE 32768
+#define GMEM_LOCKCOUNT 255
+#define GMEM_VALID_FLAGS 32626
+#define STATUS_WAIT_0 0
+#define STATUS_ABANDONED_WAIT_0 0x80
+#define STATUS_USER_APC 0xC0
+#define STATUS_TIMEOUT 0x102
+#define STATUS_PENDING 0x103
+#define STATUS_SEGMENT_NOTIFICATION 0x40000005
+#define STATUS_GUARD_PAGE_VIOLATION 0x80000001
+#define STATUS_DATATYPE_MISALIGNMENT 0x80000002
+#define STATUS_BREAKPOINT 0x80000003
+#define STATUS_SINGLE_STEP 0x80000004
+#define STATUS_ACCESS_VIOLATION 0xC0000005
+#define STATUS_IN_PAGE_ERROR 0xC0000006
+#define STATUS_INVALID_HANDLE 0xC0000008L
+#define STATUS_NO_MEMORY 0xC0000017
+#define STATUS_ILLEGAL_INSTRUCTION 0xC000001D
+#define STATUS_NONCONTINUABLE_EXCEPTION 0xC0000025
+#define STATUS_INVALID_DISPOSITION 0xC0000026
+#define STATUS_ARRAY_BOUNDS_EXCEEDED 0xC000008C
+#define STATUS_FLOAT_DENORMAL_OPERAND 0xC000008D
+#define STATUS_FLOAT_DIVIDE_BY_ZERO 0xC000008E
+#define STATUS_FLOAT_INEXACT_RESULT 0xC000008F
+#define STATUS_FLOAT_INVALID_OPERATION 0xC0000090
+#define STATUS_FLOAT_OVERFLOW 0xC0000091
+#define STATUS_FLOAT_STACK_CHECK 0xC0000092
+#define STATUS_FLOAT_UNDERFLOW 0xC0000093
+#define STATUS_INTEGER_DIVIDE_BY_ZERO 0xC0000094
+#define STATUS_INTEGER_OVERFLOW 0xC0000095
+#define STATUS_PRIVILEGED_INSTRUCTION 0xC0000096
+#define STATUS_STACK_OVERFLOW 0xC00000FD
+#define STATUS_CONTROL_C_EXIT 0xC000013A
+#define STATUS_DLL_INIT_FAILED 0xC0000142
+#define STATUS_DLL_INIT_FAILED_LOGOFF 0xC000026B
+#define EXCEPTION_ACCESS_VIOLATION STATUS_ACCESS_VIOLATION
+#define EXCEPTION_DATATYPE_MISALIGNMENT STATUS_DATATYPE_MISALIGNMENT
+#define EXCEPTION_BREAKPOINT STATUS_BREAKPOINT
+#define EXCEPTION_SINGLE_STEP STATUS_SINGLE_STEP
+#define EXCEPTION_ARRAY_BOUNDS_EXCEEDED STATUS_ARRAY_BOUNDS_EXCEEDED
+#define EXCEPTION_FLT_DENORMAL_OPERAND STATUS_FLOAT_DENORMAL_OPERAND
+#define EXCEPTION_FLT_DIVIDE_BY_ZERO STATUS_FLOAT_DIVIDE_BY_ZERO
+#define EXCEPTION_FLT_INEXACT_RESULT STATUS_FLOAT_INEXACT_RESULT
+#define EXCEPTION_FLT_INVALID_OPERATION STATUS_FLOAT_INVALID_OPERATION
+#define EXCEPTION_FLT_OVERFLOW STATUS_FLOAT_OVERFLOW
+#define EXCEPTION_FLT_STACK_CHECK STATUS_FLOAT_STACK_CHECK
+#define EXCEPTION_FLT_UNDERFLOW STATUS_FLOAT_UNDERFLOW
+#define EXCEPTION_INT_DIVIDE_BY_ZERO STATUS_INTEGER_DIVIDE_BY_ZERO
+#define EXCEPTION_INT_OVERFLOW STATUS_INTEGER_OVERFLOW
+#define EXCEPTION_PRIV_INSTRUCTION STATUS_PRIVILEGED_INSTRUCTION
+#define EXCEPTION_IN_PAGE_ERROR STATUS_IN_PAGE_ERROR
+#define EXCEPTION_ILLEGAL_INSTRUCTION STATUS_ILLEGAL_INSTRUCTION
+#define EXCEPTION_NONCONTINUABLE_EXCEPTION STATUS_NONCONTINUABLE_EXCEPTION
+#define EXCEPTION_STACK_OVERFLOW STATUS_STACK_OVERFLOW
+#define EXCEPTION_INVALID_DISPOSITION STATUS_INVALID_DISPOSITION
+#define EXCEPTION_GUARD_PAGE STATUS_GUARD_PAGE_VIOLATION
+#define EXCEPTION_INVALID_HANDLE STATUS_INVALID_HANDLE
+#define CONTROL_C_EXIT STATUS_CONTROL_C_EXIT
+#define PROCESS_HEAP_REGION 1
+#define PROCESS_HEAP_UNCOMMITTED_RANGE 2
+#define PROCESS_HEAP_ENTRY_BUSY 4
+#define PROCESS_HEAP_ENTRY_MOVEABLE 16
+#define PROCESS_HEAP_ENTRY_DDESHARE 32
+#define DONT_RESOLVE_DLL_REFERENCES 1
+#define LOAD_LIBRARY_AS_DATAFILE 2
+#define LOAD_WITH_ALTERED_SEARCH_PATH 8
+#define LMEM_FIXED 0
+#define LMEM_MOVEABLE 2
+#define LMEM_NONZEROLHND 2
+#define LMEM_NONZEROLPTR 0
+#define LMEM_DISCARDABLE 3840
+#define LMEM_NOCOMPACT 16
+#define LMEM_NODISCARD 32
+#define LMEM_ZEROINIT 64
+#define LMEM_DISCARDED 16384
+#define LMEM_MODIFY 128
+#define LMEM_INVALID_HANDLE 32768
+#define LMEM_LOCKCOUNT 255
+#define LPTR 64
+#define LHND 66
+#define NONZEROLHND 2
+#define NONZEROLPTR 0
+#define LOCKFILE_FAIL_IMMEDIATELY 1
+#define LOCKFILE_EXCLUSIVE_LOCK 2
+#define LOGON32_PROVIDER_DEFAULT 0
+#define LOGON32_PROVIDER_WINNT35 1
+#if (_WIN32_WINNT >= 0x0400)
+#define LOGON32_PROVIDER_WINNT40 2
+#endif
+#if (_WIN32_WINNT >= 0x0500)
+#define LOGON32_PROVIDER_WINNT50 3
+#endif
+#define LOGON32_LOGON_INTERACTIVE 2
+#define LOGON32_LOGON_NETWORK 3
+#define LOGON32_LOGON_BATCH 4
+#define LOGON32_LOGON_SERVICE 5
+#define LOGON32_LOGON_UNLOCK 7
+#if (_WIN32_WINNT >= 0x0500)
+#define LOGON32_LOGON_NETWORK_CLEARTEXT 8
+#define LOGON32_LOGON_NEW_CREDENTIALS 9
+#endif
+#define MOVEFILE_REPLACE_EXISTING 1
+#define MOVEFILE_COPY_ALLOWED 2
+#define MOVEFILE_DELAY_UNTIL_REBOOT 4
+#define MOVEFILE_WRITE_THROUGH 8
+#define MAXIMUM_WAIT_OBJECTS 64
+#define MAXIMUM_SUSPEND_COUNT 0x7F
+#define WAIT_OBJECT_0 0
+#define WAIT_ABANDONED_0 128
+#ifndef WAIT_TIMEOUT /* also in winerror.h */
+#define WAIT_TIMEOUT 258
+#endif
+#define WAIT_IO_COMPLETION 0xC0
+#define WAIT_ABANDONED 128
+#define WAIT_FAILED ((DWORD)0xFFFFFFFF)
+#define PURGE_TXABORT 1
+#define PURGE_RXABORT 2
+#define PURGE_TXCLEAR 4
+#define PURGE_RXCLEAR 8
+#define EVENTLOG_SUCCESS 0
+#define EVENTLOG_FORWARDS_READ 4
+#define EVENTLOG_BACKWARDS_READ 8
+#define EVENTLOG_SEEK_READ 2
+#define EVENTLOG_SEQUENTIAL_READ 1
+#define EVENTLOG_ERROR_TYPE 1
+#define EVENTLOG_WARNING_TYPE 2
+#define EVENTLOG_INFORMATION_TYPE 4
+#define EVENTLOG_AUDIT_SUCCESS 8
+#define EVENTLOG_AUDIT_FAILURE 16
+#define FORMAT_MESSAGE_ALLOCATE_BUFFER 256
+#define FORMAT_MESSAGE_IGNORE_INSERTS 512
+#define FORMAT_MESSAGE_FROM_STRING 1024
+#define FORMAT_MESSAGE_FROM_HMODULE 2048
+#define FORMAT_MESSAGE_FROM_SYSTEM 4096
+#define FORMAT_MESSAGE_ARGUMENT_ARRAY 8192
+#define FORMAT_MESSAGE_MAX_WIDTH_MASK 255
+#define EV_BREAK 64
+#define EV_CTS 8
+#define EV_DSR 16
+#define EV_ERR 128
+#define EV_EVENT1 2048
+#define EV_EVENT2 4096
+#define EV_PERR 512
+#define EV_RING 256
+#define EV_RLSD 32
+#define EV_RX80FULL 1024
+#define EV_RXCHAR 1
+#define EV_RXFLAG 2
+#define EV_TXEMPTY 4
+/* also in ddk/ntapi.h */
+/* To restore default error mode, call SetErrorMode (0). */
+#define SEM_FAILCRITICALERRORS 0x0001
+#define SEM_NOGPFAULTERRORBOX 0x0002
+#define SEM_NOALIGNMENTFAULTEXCEPT 0x0004
+#define SEM_NOOPENFILEERRORBOX 0x8000
+/* end ntapi.h */
+#define SLE_ERROR 1
+#define SLE_MINORERROR 2
+#define SLE_WARNING 3
+#define SHUTDOWN_NORETRY 1
+#define EXCEPTION_EXECUTE_HANDLER 1
+#define EXCEPTION_CONTINUE_EXECUTION (-1)
+#define EXCEPTION_CONTINUE_SEARCH 0
+#define MAXINTATOM 0xC000
+#define INVALID_ATOM ((ATOM)0)
+#define IGNORE 0
+#define INFINITE 0xFFFFFFFF
+#define NOPARITY 0
+#define ODDPARITY 1
+#define EVENPARITY 2
+#define MARKPARITY 3
+#define SPACEPARITY 4
+#define ONESTOPBIT 0
+#define ONE5STOPBITS 1
+#define TWOSTOPBITS 2
+#define CBR_110 110
+#define CBR_300 300
+#define CBR_600 600
+#define CBR_1200 1200
+#define CBR_2400 2400
+#define CBR_4800 4800
+#define CBR_9600 9600
+#define CBR_14400 14400
+#define CBR_19200 19200
+#define CBR_38400 38400
+#define CBR_56000 56000
+#define CBR_57600 57600
+#define CBR_115200 115200
+#define CBR_128000 128000
+#define CBR_256000 256000
+#define BACKUP_INVALID 0
+#define BACKUP_DATA 1
+#define BACKUP_EA_DATA 2
+#define BACKUP_SECURITY_DATA 3
+#define BACKUP_ALTERNATE_DATA 4
+#define BACKUP_LINK 5
+#define BACKUP_PROPERTY_DATA 6
+#define BACKUP_OBJECT_ID 7
+#define BACKUP_REPARSE_DATA 8
+#define BACKUP_SPARSE_BLOCK 9
+#define STREAM_NORMAL_ATTRIBUTE 0
+#define STREAM_MODIFIED_WHEN_READ 1
+#define STREAM_CONTAINS_SECURITY 2
+#define STREAM_CONTAINS_PROPERTIES 4
+#define STARTF_USESHOWWINDOW 1
+#define STARTF_USESIZE 2
+#define STARTF_USEPOSITION 4
+#define STARTF_USECOUNTCHARS 8
+#define STARTF_USEFILLATTRIBUTE 16
+#define STARTF_RUNFULLSCREEN 32
+#define STARTF_FORCEONFEEDBACK 64
+#define STARTF_FORCEOFFFEEDBACK 128
+#define STARTF_USESTDHANDLES 256
+#define STARTF_USEHOTKEY 512
+#define TC_NORMAL 0
+#define TC_HARDERR 1
+#define TC_GP_TRAP 2
+#define TC_SIGNAL 3
+#define AC_LINE_OFFLINE 0
+#define AC_LINE_ONLINE 1
+#define AC_LINE_BACKUP_POWER 2
+#define AC_LINE_UNKNOWN 255
+#define BATTERY_FLAG_HIGH 1
+#define BATTERY_FLAG_LOW 2
+#define BATTERY_FLAG_CRITICAL 4
+#define BATTERY_FLAG_CHARGING 8
+#define BATTERY_FLAG_NO_BATTERY 128
+#define BATTERY_FLAG_UNKNOWN 255
+#define BATTERY_PERCENTAGE_UNKNOWN 255
+#define BATTERY_LIFE_UNKNOWN 0xFFFFFFFF
+#define DDD_RAW_TARGET_PATH 1
+#define DDD_REMOVE_DEFINITION 2
+#define DDD_EXACT_MATCH_ON_REMOVE 4
+#define HINSTANCE_ERROR 32
+#define MS_CTS_ON 16
+#define MS_DSR_ON 32
+#define MS_RING_ON 64
+#define MS_RLSD_ON 128
+#define DTR_CONTROL_DISABLE 0
+#define DTR_CONTROL_ENABLE 1
+#define DTR_CONTROL_HANDSHAKE 2
+#define RTS_CONTROL_DISABLE 0
+#define RTS_CONTROL_ENABLE 1
+#define RTS_CONTROL_HANDSHAKE 2
+#define RTS_CONTROL_TOGGLE 3
+#define SECURITY_ANONYMOUS (SecurityAnonymous<<16)
+#define SECURITY_IDENTIFICATION (SecurityIdentification<<16)
+#define SECURITY_IMPERSONATION (SecurityImpersonation<<16)
+#define SECURITY_DELEGATION (SecurityDelegation<<16)
+#define SECURITY_CONTEXT_TRACKING 0x40000
+#define SECURITY_EFFECTIVE_ONLY 0x80000
+#define SECURITY_SQOS_PRESENT 0x100000
+#define SECURITY_VALID_SQOS_FLAGS 0x1F0000
+#define INVALID_FILE_SIZE 0xFFFFFFFF
+#define TLS_OUT_OF_INDEXES (DWORD)0xFFFFFFFF
+#define GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS 0x00000004
+#define GET_MODULE_HANDLE_EX_FLAG_PIN 0x00000001
+#define GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT 0x00000002
+#if (_WIN32_WINNT >= 0x0501)
+#define ACTCTX_FLAG_PROCESSOR_ARCHITECTURE_VALID 0x00000001
+#define ACTCTX_FLAG_LANGID_VALID 0x00000002
+#define ACTCTX_FLAG_ASSEMBLY_DIRECTORY_VALID 0x00000004
+#define ACTCTX_FLAG_RESOURCE_NAME_VALID 0x00000008
+#define ACTCTX_FLAG_SET_PROCESS_DEFAULT 0x00000010
+#define ACTCTX_FLAG_APPLICATION_NAME_VALID 0x00000020
+#define ACTCTX_FLAG_HMODULE_VALID 0x00000080
+#define DEACTIVATE_ACTCTX_FLAG_FORCE_EARLY_DEACTIVATION 0x00000001
+#define FIND_ACTCTX_SECTION_KEY_RETURN_HACTCTX 0x00000001
+#define QUERY_ACTCTX_FLAG_USE_ACTIVE_ACTCTX 0x00000004
+#define QUERY_ACTCTX_FLAG_ACTCTX_IS_HMODULE 0x00000008
+#define QUERY_ACTCTX_FLAG_ACTCTX_IS_ADDRESS 0x00000010
+#endif /* (_WIN32_WINNT >= 0x0501) */
+#if (_WIN32_WINNT >= 0x0500)
+#define REPLACEFILE_WRITE_THROUGH 0x00000001
+#define REPLACEFILE_IGNORE_MERGE_ERRORS 0x00000002
+#endif /* (_WIN32_WINNT >= 0x0500) */
+#define WRITE_WATCH_FLAG_RESET 1
+#if (_WIN32_WINNT >= 0x0601)
+#define PROCESS_DEP_ENABLE 1
+#define PROCESS_DEP_DISABLE_ATL_THUNK_EMULATION 2
+#endif
+
+#ifndef RC_INVOKED
+typedef struct _FILETIME {
+ DWORD dwLowDateTime;
+ DWORD dwHighDateTime;
+} FILETIME,*PFILETIME,*LPFILETIME;
+typedef struct _BY_HANDLE_FILE_INFORMATION {
+ DWORD dwFileAttributes;
+ FILETIME ftCreationTime;
+ FILETIME ftLastAccessTime;
+ FILETIME ftLastWriteTime;
+ DWORD dwVolumeSerialNumber;
+ DWORD nFileSizeHigh;
+ DWORD nFileSizeLow;
+ DWORD nNumberOfLinks;
+ DWORD nFileIndexHigh;
+ DWORD nFileIndexLow;
+} BY_HANDLE_FILE_INFORMATION,*LPBY_HANDLE_FILE_INFORMATION;
+typedef struct _DCB {
+ DWORD DCBlength;
+ DWORD BaudRate;
+ DWORD fBinary:1;
+ DWORD fParity:1;
+ DWORD fOutxCtsFlow:1;
+ DWORD fOutxDsrFlow:1;
+ DWORD fDtrControl:2;
+ DWORD fDsrSensitivity:1;
+ DWORD fTXContinueOnXoff:1;
+ DWORD fOutX:1;
+ DWORD fInX:1;
+ DWORD fErrorChar:1;
+ DWORD fNull:1;
+ DWORD fRtsControl:2;
+ DWORD fAbortOnError:1;
+ DWORD fDummy2:17;
+ WORD wReserved;
+ WORD XonLim;
+ WORD XoffLim;
+ BYTE ByteSize;
+ BYTE Parity;
+ BYTE StopBits;
+ char XonChar;
+ char XoffChar;
+ char ErrorChar;
+ char EofChar;
+ char EvtChar;
+ WORD wReserved1;
+} DCB,*LPDCB;
+typedef struct _COMM_CONFIG {
+ DWORD dwSize;
+ WORD wVersion;
+ WORD wReserved;
+ DCB dcb;
+ DWORD dwProviderSubType;
+ DWORD dwProviderOffset;
+ DWORD dwProviderSize;
+ WCHAR wcProviderData[1];
+} COMMCONFIG,*LPCOMMCONFIG;
+typedef struct _COMMPROP {
+ WORD wPacketLength;
+ WORD wPacketVersion;
+ DWORD dwServiceMask;
+ DWORD dwReserved1;
+ DWORD dwMaxTxQueue;
+ DWORD dwMaxRxQueue;
+ DWORD dwMaxBaud;
+ DWORD dwProvSubType;
+ DWORD dwProvCapabilities;
+ DWORD dwSettableParams;
+ DWORD dwSettableBaud;
+ WORD wSettableData;
+ WORD wSettableStopParity;
+ DWORD dwCurrentTxQueue;
+ DWORD dwCurrentRxQueue;
+ DWORD dwProvSpec1;
+ DWORD dwProvSpec2;
+ WCHAR wcProvChar[1];
+} COMMPROP,*LPCOMMPROP;
+typedef struct _COMMTIMEOUTS {
+ DWORD ReadIntervalTimeout;
+ DWORD ReadTotalTimeoutMultiplier;
+ DWORD ReadTotalTimeoutConstant;
+ DWORD WriteTotalTimeoutMultiplier;
+ DWORD WriteTotalTimeoutConstant;
+} COMMTIMEOUTS,*LPCOMMTIMEOUTS;
+typedef struct _COMSTAT {
+ DWORD fCtsHold:1;
+ DWORD fDsrHold:1;
+ DWORD fRlsdHold:1;
+ DWORD fXoffHold:1;
+ DWORD fXoffSent:1;
+ DWORD fEof:1;
+ DWORD fTxim:1;
+ DWORD fReserved:25;
+ DWORD cbInQue;
+ DWORD cbOutQue;
+} COMSTAT,*LPCOMSTAT;
+typedef DWORD (WINAPI *LPTHREAD_START_ROUTINE)(LPVOID);
+typedef struct _CREATE_PROCESS_DEBUG_INFO {
+ HANDLE hFile;
+ HANDLE hProcess;
+ HANDLE hThread;
+ LPVOID lpBaseOfImage;
+ DWORD dwDebugInfoFileOffset;
+ DWORD nDebugInfoSize;
+ LPVOID lpThreadLocalBase;
+ LPTHREAD_START_ROUTINE lpStartAddress;
+ LPVOID lpImageName;
+ WORD fUnicode;
+} CREATE_PROCESS_DEBUG_INFO,*LPCREATE_PROCESS_DEBUG_INFO;
+typedef struct _CREATE_THREAD_DEBUG_INFO {
+ HANDLE hThread;
+ LPVOID lpThreadLocalBase;
+ LPTHREAD_START_ROUTINE lpStartAddress;
+} CREATE_THREAD_DEBUG_INFO,*LPCREATE_THREAD_DEBUG_INFO;
+typedef struct _EXCEPTION_DEBUG_INFO {
+ EXCEPTION_RECORD ExceptionRecord;
+ DWORD dwFirstChance;
+} EXCEPTION_DEBUG_INFO,*LPEXCEPTION_DEBUG_INFO;
+typedef struct _EXIT_THREAD_DEBUG_INFO {
+ DWORD dwExitCode;
+} EXIT_THREAD_DEBUG_INFO,*LPEXIT_THREAD_DEBUG_INFO;
+typedef struct _EXIT_PROCESS_DEBUG_INFO {
+ DWORD dwExitCode;
+} EXIT_PROCESS_DEBUG_INFO,*LPEXIT_PROCESS_DEBUG_INFO;
+typedef struct _LOAD_DLL_DEBUG_INFO {
+ HANDLE hFile;
+ LPVOID lpBaseOfDll;
+ DWORD dwDebugInfoFileOffset;
+ DWORD nDebugInfoSize;
+ LPVOID lpImageName;
+ WORD fUnicode;
+} LOAD_DLL_DEBUG_INFO,*LPLOAD_DLL_DEBUG_INFO;
+typedef struct _UNLOAD_DLL_DEBUG_INFO {
+ LPVOID lpBaseOfDll;
+} UNLOAD_DLL_DEBUG_INFO,*LPUNLOAD_DLL_DEBUG_INFO;
+typedef struct _OUTPUT_DEBUG_STRING_INFO {
+ LPSTR lpDebugStringData;
+ WORD fUnicode;
+ WORD nDebugStringLength;
+} OUTPUT_DEBUG_STRING_INFO,*LPOUTPUT_DEBUG_STRING_INFO;
+typedef struct _RIP_INFO {
+ DWORD dwError;
+ DWORD dwType;
+} RIP_INFO,*LPRIP_INFO;
+typedef struct _DEBUG_EVENT {
+ DWORD dwDebugEventCode;
+ DWORD dwProcessId;
+ DWORD dwThreadId;
+ union {
+ EXCEPTION_DEBUG_INFO Exception;
+ CREATE_THREAD_DEBUG_INFO CreateThread;
+ CREATE_PROCESS_DEBUG_INFO CreateProcessInfo;
+ EXIT_THREAD_DEBUG_INFO ExitThread;
+ EXIT_PROCESS_DEBUG_INFO ExitProcess;
+ LOAD_DLL_DEBUG_INFO LoadDll;
+ UNLOAD_DLL_DEBUG_INFO UnloadDll;
+ OUTPUT_DEBUG_STRING_INFO DebugString;
+ RIP_INFO RipInfo;
+ } u;
+} DEBUG_EVENT,*LPDEBUG_EVENT;
+typedef struct _OVERLAPPED {
+ ULONG_PTR Internal;
+ ULONG_PTR InternalHigh;
+ DWORD Offset;
+ DWORD OffsetHigh;
+ HANDLE hEvent;
+} OVERLAPPED,*POVERLAPPED,*LPOVERLAPPED;
+typedef struct _STARTUPINFOA {
+ DWORD cb;
+ LPSTR lpReserved;
+ LPSTR lpDesktop;
+ LPSTR lpTitle;
+ DWORD dwX;
+ DWORD dwY;
+ DWORD dwXSize;
+ DWORD dwYSize;
+ DWORD dwXCountChars;
+ DWORD dwYCountChars;
+ DWORD dwFillAttribute;
+ DWORD dwFlags;
+ WORD wShowWindow;
+ WORD cbReserved2;
+ PBYTE lpReserved2;
+ HANDLE hStdInput;
+ HANDLE hStdOutput;
+ HANDLE hStdError;
+} STARTUPINFOA,*LPSTARTUPINFOA;
+typedef struct _STARTUPINFOW {
+ DWORD cb;
+ LPWSTR lpReserved;
+ LPWSTR lpDesktop;
+ LPWSTR lpTitle;
+ DWORD dwX;
+ DWORD dwY;
+ DWORD dwXSize;
+ DWORD dwYSize;
+ DWORD dwXCountChars;
+ DWORD dwYCountChars;
+ DWORD dwFillAttribute;
+ DWORD dwFlags;
+ WORD wShowWindow;
+ WORD cbReserved2;
+ PBYTE lpReserved2;
+ HANDLE hStdInput;
+ HANDLE hStdOutput;
+ HANDLE hStdError;
+} STARTUPINFOW,*LPSTARTUPINFOW;
+typedef struct _PROCESS_INFORMATION {
+ HANDLE hProcess;
+ HANDLE hThread;
+ DWORD dwProcessId;
+ DWORD dwThreadId;
+} PROCESS_INFORMATION,*PPROCESS_INFORMATION,*LPPROCESS_INFORMATION;
+typedef struct _CRITICAL_SECTION_DEBUG {
+ WORD Type;
+ WORD CreatorBackTraceIndex;
+ struct _CRITICAL_SECTION *CriticalSection;
+ LIST_ENTRY ProcessLocksList;
+ DWORD EntryCount;
+ DWORD ContentionCount;
+ DWORD Spare [2];
+} CRITICAL_SECTION_DEBUG,*PCRITICAL_SECTION_DEBUG;
+typedef struct _CRITICAL_SECTION {
+ PCRITICAL_SECTION_DEBUG DebugInfo;
+ LONG LockCount;
+ LONG RecursionCount;
+ HANDLE OwningThread;
+ HANDLE LockSemaphore;
+ DWORD SpinCount;
+} CRITICAL_SECTION,*PCRITICAL_SECTION,*LPCRITICAL_SECTION;
+typedef struct _SYSTEMTIME {
+ WORD wYear;
+ WORD wMonth;
+ WORD wDayOfWeek;
+ WORD wDay;
+ WORD wHour;
+ WORD wMinute;
+ WORD wSecond;
+ WORD wMilliseconds;
+} SYSTEMTIME,*LPSYSTEMTIME;
+typedef struct _WIN32_FILE_ATTRIBUTE_DATA {
+ DWORD dwFileAttributes;
+ FILETIME ftCreationTime;
+ FILETIME ftLastAccessTime;
+ FILETIME ftLastWriteTime;
+ DWORD nFileSizeHigh;
+ DWORD nFileSizeLow;
+} WIN32_FILE_ATTRIBUTE_DATA,*LPWIN32_FILE_ATTRIBUTE_DATA;
+typedef struct _WIN32_FIND_DATAA {
+ DWORD dwFileAttributes;
+ FILETIME ftCreationTime;
+ FILETIME ftLastAccessTime;
+ FILETIME ftLastWriteTime;
+ DWORD nFileSizeHigh;
+ DWORD nFileSizeLow;
+#ifdef _WIN32_WCE
+ DWORD dwOID;
+#else
+ DWORD dwReserved0;
+ DWORD dwReserved1;
+#endif
+ CHAR cFileName[MAX_PATH];
+#ifndef _WIN32_WCE
+ CHAR cAlternateFileName[14];
+#endif
+} WIN32_FIND_DATAA,*PWIN32_FIND_DATAA,*LPWIN32_FIND_DATAA;
+typedef struct _WIN32_FIND_DATAW {
+ DWORD dwFileAttributes;
+ FILETIME ftCreationTime;
+ FILETIME ftLastAccessTime;
+ FILETIME ftLastWriteTime;
+ DWORD nFileSizeHigh;
+ DWORD nFileSizeLow;
+#ifdef _WIN32_WCE
+ DWORD dwOID;
+#else
+ DWORD dwReserved0;
+ DWORD dwReserved1;
+#endif
+ WCHAR cFileName[MAX_PATH];
+#ifndef _WIN32_WCE
+ WCHAR cAlternateFileName[14];
+#endif
+} WIN32_FIND_DATAW,*PWIN32_FIND_DATAW,*LPWIN32_FIND_DATAW;
+typedef struct _WIN32_STREAM_ID {
+ DWORD dwStreamId;
+ DWORD dwStreamAttributes;
+ LARGE_INTEGER Size;
+ DWORD dwStreamNameSize;
+ WCHAR cStreamName[ANYSIZE_ARRAY];
+} WIN32_STREAM_ID, *LPWIN32_STREAM_ID;
+typedef enum _FINDEX_INFO_LEVELS {
+ FindExInfoStandard,
+ FindExInfoMaxInfoLevel
+} FINDEX_INFO_LEVELS;
+typedef enum _FINDEX_SEARCH_OPS {
+ FindExSearchNameMatch,
+ FindExSearchLimitToDirectories,
+ FindExSearchLimitToDevices,
+ FindExSearchMaxSearchOp
+} FINDEX_SEARCH_OPS;
+typedef enum _ACL_INFORMATION_CLASS {
+ AclRevisionInformation=1,
+ AclSizeInformation
+} ACL_INFORMATION_CLASS;
+typedef struct tagHW_PROFILE_INFOA {
+ DWORD dwDockInfo;
+ CHAR szHwProfileGuid[HW_PROFILE_GUIDLEN];
+ CHAR szHwProfileName[MAX_PROFILE_LEN];
+} HW_PROFILE_INFOA,*LPHW_PROFILE_INFOA;
+typedef struct tagHW_PROFILE_INFOW {
+ DWORD dwDockInfo;
+ WCHAR szHwProfileGuid[HW_PROFILE_GUIDLEN];
+ WCHAR szHwProfileName[MAX_PROFILE_LEN];
+} HW_PROFILE_INFOW,*LPHW_PROFILE_INFOW;
+typedef enum _GET_FILEEX_INFO_LEVELS {
+ GetFileExInfoStandard,
+ GetFileExMaxInfoLevel
+} GET_FILEEX_INFO_LEVELS;
+typedef struct _SYSTEM_INFO {
+ _ANONYMOUS_UNION union {
+ DWORD dwOemId;
+ _ANONYMOUS_STRUCT struct {
+ WORD wProcessorArchitecture;
+ WORD wReserved;
+ } DUMMYSTRUCTNAME;
+ } DUMMYUNIONNAME;
+ DWORD dwPageSize;
+ PVOID lpMinimumApplicationAddress;
+ PVOID lpMaximumApplicationAddress;
+ DWORD dwActiveProcessorMask;
+ DWORD dwNumberOfProcessors;
+ DWORD dwProcessorType;
+ DWORD dwAllocationGranularity;
+ WORD wProcessorLevel;
+ WORD wProcessorRevision;
+} SYSTEM_INFO,*LPSYSTEM_INFO;
+typedef struct _SYSTEM_POWER_STATUS {
+ BYTE ACLineStatus;
+ BYTE BatteryFlag;
+ BYTE BatteryLifePercent;
+ BYTE Reserved1;
+ DWORD BatteryLifeTime;
+ DWORD BatteryFullLifeTime;
+} SYSTEM_POWER_STATUS,*LPSYSTEM_POWER_STATUS;
+typedef struct _TIME_ZONE_INFORMATION {
+ LONG Bias;
+ WCHAR StandardName[32];
+ SYSTEMTIME StandardDate;
+ LONG StandardBias;
+ WCHAR DaylightName[32];
+ SYSTEMTIME DaylightDate;
+ LONG DaylightBias;
+} TIME_ZONE_INFORMATION,*LPTIME_ZONE_INFORMATION;
+typedef struct _MEMORYSTATUS {
+ DWORD dwLength;
+ DWORD dwMemoryLoad;
+ DWORD dwTotalPhys;
+ DWORD dwAvailPhys;
+ DWORD dwTotalPageFile;
+ DWORD dwAvailPageFile;
+ DWORD dwTotalVirtual;
+ DWORD dwAvailVirtual;
+} MEMORYSTATUS,*LPMEMORYSTATUS;
+#if (_WIN32_WINNT >= 0x0500)
+typedef struct _MEMORYSTATUSEX {
+ DWORD dwLength;
+ DWORD dwMemoryLoad;
+ DWORDLONG ullTotalPhys;
+ DWORDLONG ullAvailPhys;
+ DWORDLONG ullTotalPageFile;
+ DWORDLONG ullAvailPageFile;
+ DWORDLONG ullTotalVirtual;
+ DWORDLONG ullAvailVirtual;
+ DWORDLONG ullAvailExtendedVirtual;
+} MEMORYSTATUSEX,*LPMEMORYSTATUSEX;
+#endif
+typedef struct _LDT_ENTRY {
+ WORD LimitLow;
+ WORD BaseLow;
+ union {
+ struct {
+ BYTE BaseMid;
+ BYTE Flags1;
+ BYTE Flags2;
+ BYTE BaseHi;
+ } Bytes;
+ struct {
+ DWORD BaseMid:8;
+ DWORD Type:5;
+ DWORD Dpl:2;
+ DWORD Pres:1;
+ DWORD LimitHi:4;
+ DWORD Sys:1;
+ DWORD Reserved_0:1;
+ DWORD Default_Big:1;
+ DWORD Granularity:1;
+ DWORD BaseHi:8;
+ } Bits;
+ } HighWord;
+} LDT_ENTRY,*PLDT_ENTRY,*LPLDT_ENTRY;
+typedef struct _PROCESS_HEAP_ENTRY {
+ PVOID lpData;
+ DWORD cbData;
+ BYTE cbOverhead;
+ BYTE iRegionIndex;
+ WORD wFlags;
+ _ANONYMOUS_UNION union {
+ struct {
+ HANDLE hMem;
+ DWORD dwReserved[3];
+ } Block;
+ struct {
+ DWORD dwCommittedSize;
+ DWORD dwUnCommittedSize;
+ LPVOID lpFirstBlock;
+ LPVOID lpLastBlock;
+ } Region;
+ } DUMMYUNIONNAME;
+} PROCESS_HEAP_ENTRY,*LPPROCESS_HEAP_ENTRY;
+typedef struct _OFSTRUCT {
+ BYTE cBytes;
+ BYTE fFixedDisk;
+ WORD nErrCode;
+ WORD Reserved1;
+ WORD Reserved2;
+ CHAR szPathName[OFS_MAXPATHNAME];
+} OFSTRUCT,*LPOFSTRUCT,*POFSTRUCT;
+typedef struct _WIN_CERTIFICATE {
+ DWORD dwLength;
+ WORD wRevision;
+ WORD wCertificateType;
+ BYTE bCertificate[1];
+} WIN_CERTIFICATE, *LPWIN_CERTIFICATE;
+#if (_WIN32_WINNT >= 0x0501)
+typedef struct tagACTCTXA {
+ ULONG cbSize;
+ DWORD dwFlags;
+ LPCSTR lpSource;
+ USHORT wProcessorArchitecture;
+ LANGID wLangId;
+ LPCSTR lpAssemblyDirectory;
+ LPCSTR lpResourceName;
+ LPCSTR lpApplicationName;
+ HMODULE hModule;
+} ACTCTXA,*PACTCTXA;
+typedef const ACTCTXA *PCACTCTXA;
+typedef struct tagACTCTXW {
+ ULONG cbSize;
+ DWORD dwFlags;
+ LPCWSTR lpSource;
+ USHORT wProcessorArchitecture;
+ LANGID wLangId;
+ LPCWSTR lpAssemblyDirectory;
+ LPCWSTR lpResourceName;
+ LPCWSTR lpApplicationName;
+ HMODULE hModule;
+} ACTCTXW,*PACTCTXW;
+typedef const ACTCTXW *PCACTCTXW;
+typedef struct tagACTCTX_SECTION_KEYED_DATA {
+ ULONG cbSize;
+ ULONG ulDataFormatVersion;
+ PVOID lpData;
+ ULONG ulLength;
+ PVOID lpSectionGlobalData;
+ ULONG ulSectionGlobalDataLength;
+ PVOID lpSectionBase;
+ ULONG ulSectionTotalLength;
+ HANDLE hActCtx;
+ HANDLE ulAssemblyRosterIndex;
+} ACTCTX_SECTION_KEYED_DATA,*PACTCTX_SECTION_KEYED_DATA;
+typedef const ACTCTX_SECTION_KEYED_DATA *PCACTCTX_SECTION_KEYED_DATA;
+typedef enum {
+ LowMemoryResourceNotification ,
+ HighMemoryResourceNotification
+} MEMORY_RESOURCE_NOTIFICATION_TYPE;
+#endif
+#if (_WIN32_WINNT >= 0x0500)
+typedef enum _COMPUTER_NAME_FORMAT {
+ ComputerNameNetBIOS,
+ ComputerNameDnsHostname,
+ ComputerNameDnsDomain,
+ ComputerNameDnsFullyQualified,
+ ComputerNamePhysicalNetBIOS,
+ ComputerNamePhysicalDnsHostname,
+ ComputerNamePhysicalDnsDomain,
+ ComputerNamePhysicalDnsFullyQualified,
+ ComputerNameMax
+} COMPUTER_NAME_FORMAT;
+#endif
+#if (_WIN32_WINNT >= 0x0500 || _WIN32_WINDOWS >= 0x0410)
+typedef DWORD EXECUTION_STATE;
+#endif
+#if (_WIN32_WINNT >= 0x0600)
+typedef enum _DEP_SYSTEM_POLICY_TYPE {
+ AlwaysOn,
+ AlwaysOff,
+ OptIn,
+ OptOut
+} DEP_SYSTEM_POLICY_TYPE;
+#endif
+
+typedef DWORD(WINAPI *LPPROGRESS_ROUTINE)(LARGE_INTEGER,LARGE_INTEGER,LARGE_INTEGER,LARGE_INTEGER,DWORD,DWORD,HANDLE,HANDLE,LPVOID);
+typedef void(WINAPI *LPFIBER_START_ROUTINE)(PVOID);
+typedef BOOL(CALLBACK *ENUMRESLANGPROCA)(HMODULE,LPCSTR,LPCSTR,WORD,LONG);
+typedef BOOL(CALLBACK *ENUMRESLANGPROCW)(HMODULE,LPCWSTR,LPCWSTR,WORD,LONG);
+#ifdef UNICODE
+#define ENUMRESLANGPROC ENUMRESLANGPROCW
+#else
+#define ENUMRESLANGPROC ENUMRESLANGPROCA
+#endif
+typedef BOOL(CALLBACK *ENUMRESNAMEPROCA)(HMODULE,LPCSTR,LPSTR,LONG);
+typedef BOOL(CALLBACK *ENUMRESNAMEPROCW)(HMODULE,LPCWSTR,LPWSTR,LONG);
+#ifdef UNICODE
+#define ENUMRESNAMEPROC ENUMRESNAMEPROCW
+#else
+#define ENUMRESNAMEPROC ENUMRESNAMEPROCA
+#endif
+typedef BOOL(CALLBACK *ENUMRESTYPEPROCA)(HMODULE,LPSTR,LONG);
+typedef BOOL(CALLBACK *ENUMRESTYPEPROCW)(HMODULE,LPWSTR,LONG);
+#ifdef UNICODE
+#define ENUMRESTYPEPROC ENUMRESTYPEPROCW
+#else
+#define ENUMRESTYPEPROC ENUMRESTYPEPROCA
+#endif
+typedef void(CALLBACK *LPOVERLAPPED_COMPLETION_ROUTINE)(DWORD,DWORD,LPOVERLAPPED);
+typedef LONG(CALLBACK *PTOP_LEVEL_EXCEPTION_FILTER)(LPEXCEPTION_POINTERS);
+typedef PTOP_LEVEL_EXCEPTION_FILTER LPTOP_LEVEL_EXCEPTION_FILTER;
+typedef void(APIENTRY *PAPCFUNC)(ULONG_PTR);
+typedef void(CALLBACK *PTIMERAPCROUTINE)(PVOID,DWORD,DWORD);
+#if (_WIN32_WINNT >= 0x0500)
+typedef void(CALLBACK *WAITORTIMERCALLBACK)(PVOID,BOOLEAN);
+#endif
+#define MAKEINTATOM(i) (LPTSTR)((DWORD)((WORD)(i)))
+/* Functions */
+#ifndef UNDER_CE
+int APIENTRY WinMain(HINSTANCE,HINSTANCE,LPSTR,int);
+#else
+int APIENTRY WinMain(HINSTANCE,HINSTANCE,LPWSTR,int);
+#endif
+int APIENTRY wWinMain(HINSTANCE,HINSTANCE,LPWSTR,int);
+WINBASEAPI long WINAPI _hread(HFILE,LPVOID,long);
+WINBASEAPI long WINAPI _hwrite(HFILE,LPCSTR,long);
+WINBASEAPI HFILE WINAPI _lclose(HFILE);
+WINBASEAPI HFILE WINAPI _lcreat(LPCSTR,int);
+WINBASEAPI LONG WINAPI _llseek(HFILE,LONG,int);
+WINBASEAPI HFILE WINAPI _lopen(LPCSTR,int);
+WINBASEAPI UINT WINAPI _lread(HFILE,LPVOID,UINT);
+WINBASEAPI UINT WINAPI _lwrite(HFILE,LPCSTR,UINT);
+#define AbnormalTermination() FALSE
+WINBASEAPI BOOL WINAPI AccessCheck(PSECURITY_DESCRIPTOR,HANDLE,DWORD,PGENERIC_MAPPING,PPRIVILEGE_SET,PDWORD,PDWORD,PBOOL);
+WINBASEAPI BOOL WINAPI AccessCheckAndAuditAlarmA(LPCSTR,LPVOID,LPSTR,LPSTR,PSECURITY_DESCRIPTOR,DWORD,PGENERIC_MAPPING,BOOL,PDWORD,PBOOL,PBOOL);
+WINBASEAPI BOOL WINAPI AccessCheckAndAuditAlarmW(LPCWSTR,LPVOID,LPWSTR,LPWSTR,PSECURITY_DESCRIPTOR,DWORD,PGENERIC_MAPPING,BOOL,PDWORD,PBOOL,PBOOL);
+#if (_WIN32_WINNT >= 0x0501)
+WINBASEAPI BOOL WINAPI ActivateActCtx(HANDLE,ULONG_PTR*);
+#endif
+WINBASEAPI BOOL WINAPI AddAccessAllowedAce(PACL,DWORD,DWORD,PSID);
+WINBASEAPI BOOL WINAPI AddAccessDeniedAce(PACL,DWORD,DWORD,PSID);
+#if (_WIN32_WINNT >= 0x0500)
+WINBASEAPI BOOL WINAPI AddAccessAllowedAceEx(PACL,DWORD,DWORD,DWORD,PSID);
+WINBASEAPI BOOL WINAPI AddAccessDeniedAceEx(PACL,DWORD,DWORD,DWORD,PSID);
+#endif
+WINBASEAPI BOOL WINAPI AddAce(PACL,DWORD,DWORD,PVOID,DWORD);
+WINBASEAPI ATOM WINAPI AddAtomA(LPCSTR);
+WINBASEAPI ATOM WINAPI AddAtomW(LPCWSTR);
+WINBASEAPI BOOL WINAPI AddAuditAccessAce(PACL,DWORD,DWORD,PSID,BOOL,BOOL);
+#if (_WIN32_WINNT >= 0x0501)
+WINBASEAPI void WINAPI AddRefActCtx(HANDLE);
+#endif
+#if (_WIN32_WINNT >= 0x0500)
+WINBASEAPI PVOID WINAPI AddVectoredExceptionHandler(ULONG,PVECTORED_EXCEPTION_HANDLER);
+#endif
+WINBASEAPI BOOL WINAPI AdjustTokenGroups(HANDLE,BOOL,PTOKEN_GROUPS,DWORD,PTOKEN_GROUPS,PDWORD);
+WINBASEAPI BOOL WINAPI AdjustTokenPrivileges(HANDLE,BOOL,PTOKEN_PRIVILEGES,DWORD,PTOKEN_PRIVILEGES,PDWORD);
+WINBASEAPI BOOL WINAPI AllocateAndInitializeSid(PSID_IDENTIFIER_AUTHORITY,BYTE,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,PSID*);
+WINBASEAPI BOOL WINAPI AllocateLocallyUniqueId(PLUID);
+WINBASEAPI BOOL WINAPI AreAllAccessesGranted(DWORD,DWORD);
+WINBASEAPI BOOL WINAPI AreAnyAccessesGranted(DWORD,DWORD);
+WINBASEAPI BOOL WINAPI AreFileApisANSI(void);
+WINBASEAPI BOOL WINAPI BackupEventLogA(HANDLE,LPCSTR);
+WINBASEAPI BOOL WINAPI BackupEventLogW(HANDLE,LPCWSTR);
+WINBASEAPI BOOL WINAPI BackupRead(HANDLE,LPBYTE,DWORD,LPDWORD,BOOL,BOOL,LPVOID*);
+WINBASEAPI BOOL WINAPI BackupSeek(HANDLE,DWORD,DWORD,LPDWORD,LPDWORD,LPVOID*);
+WINBASEAPI BOOL WINAPI BackupWrite(HANDLE,LPBYTE,DWORD,LPDWORD,BOOL,BOOL,LPVOID*);
+WINBASEAPI BOOL WINAPI Beep(DWORD,DWORD);
+WINBASEAPI HANDLE WINAPI BeginUpdateResourceA(LPCSTR,BOOL);
+WINBASEAPI HANDLE WINAPI BeginUpdateResourceW(LPCWSTR,BOOL);
+WINBASEAPI BOOL WINAPI BuildCommDCBA(LPCSTR,LPDCB);
+WINBASEAPI BOOL WINAPI BuildCommDCBW(LPCWSTR,LPDCB);
+WINBASEAPI BOOL WINAPI BuildCommDCBAndTimeoutsA(LPCSTR,LPDCB,LPCOMMTIMEOUTS);
+WINBASEAPI BOOL WINAPI BuildCommDCBAndTimeoutsW(LPCWSTR,LPDCB,LPCOMMTIMEOUTS);
+WINBASEAPI BOOL WINAPI CallNamedPipeA(LPCSTR,PVOID,DWORD,PVOID,DWORD,PDWORD,DWORD);
+WINBASEAPI BOOL WINAPI CallNamedPipeW(LPCWSTR,PVOID,DWORD,PVOID,DWORD,PDWORD,DWORD);
+WINBASEAPI BOOL WINAPI CancelDeviceWakeupRequest(HANDLE);
+WINBASEAPI BOOL WINAPI CancelIo(HANDLE);
+WINBASEAPI BOOL WINAPI CancelWaitableTimer(HANDLE);
+#if (_WIN32_WINNT >= 0x0500)
+WINBASEAPI BOOL WINAPI ChangeTimerQueueTimer(HANDLE,HANDLE,ULONG,ULONG);
+#endif
+#if (_WIN32_WINNT >= 0x0501)
+WINBASEAPI BOOL WINAPI CheckNameLegalDOS8Dot3A(LPCSTR,LPSTR,DWORD,PBOOL,PBOOL);
+WINBASEAPI BOOL WINAPI CheckNameLegalDOS8Dot3W(LPCWSTR,LPSTR,DWORD,PBOOL,PBOOL);
+WINBASEAPI BOOL WINAPI CheckRemoteDebuggerPresent(HANDLE,PBOOL);
+#endif
+#if (_WIN32_WINNT >= 0x0500)
+WINBASEAPI BOOL WINAPI CheckTokenMembership(HANDLE,PSID,PBOOL);
+#endif
+WINBASEAPI BOOL WINAPI ClearCommBreak(HANDLE);
+WINBASEAPI BOOL WINAPI ClearCommError(HANDLE,PDWORD,LPCOMSTAT);
+WINBASEAPI BOOL WINAPI ClearEventLogA(HANDLE,LPCSTR);
+WINBASEAPI BOOL WINAPI ClearEventLogW(HANDLE,LPCWSTR);
+WINBASEAPI BOOL WINAPI CloseEventLog(HANDLE);
+WINBASEAPI BOOL WINAPI CloseHandle(HANDLE);
+WINBASEAPI BOOL WINAPI CommConfigDialogA(LPCSTR,HWND,LPCOMMCONFIG);
+WINBASEAPI BOOL WINAPI CommConfigDialogW(LPCWSTR,HWND,LPCOMMCONFIG);
+WINBASEAPI LONG WINAPI CompareFileTime(CONST FILETIME*,CONST FILETIME*);
+WINBASEAPI BOOL WINAPI ConnectNamedPipe(HANDLE,LPOVERLAPPED);
+WINBASEAPI BOOL WINAPI ContinueDebugEvent(DWORD,DWORD,DWORD);
+#if (_WIN32_WINNT >= 0x0400)
+WINBASEAPI BOOL WINAPI ConvertFiberToThread(void);
+#endif
+WINBASEAPI PVOID WINAPI ConvertThreadToFiber(PVOID);
+WINBASEAPI BOOL WINAPI CopyFileA(LPCSTR,LPCSTR,BOOL);
+WINBASEAPI BOOL WINAPI CopyFileW(LPCWSTR,LPCWSTR,BOOL);
+WINBASEAPI BOOL WINAPI CopyFileExA(LPCSTR,LPCSTR,LPPROGRESS_ROUTINE,LPVOID,LPBOOL,DWORD);
+WINBASEAPI BOOL WINAPI CopyFileExW(LPCWSTR,LPCWSTR,LPPROGRESS_ROUTINE,LPVOID,LPBOOL,DWORD);
+#define RtlMoveMemory memmove
+#define RtlCopyMemory memcpy
+#define RtlFillMemory(d,l,f) memset((d), (f), (l))
+#define RtlZeroMemory(d,l) RtlFillMemory((d),(l),0)
+#define MoveMemory RtlMoveMemory
+#define CopyMemory RtlCopyMemory
+#define FillMemory RtlFillMemory
+#define ZeroMemory RtlZeroMemory
+WINBASEAPI BOOL WINAPI CopySid(DWORD,PSID,PSID);
+#if (_WIN32_WINNT >= 0x0501)
+WINBASEAPI HANDLE WINAPI CreateActCtxA(PCACTCTXA);
+WINBASEAPI HANDLE WINAPI CreateActCtxW(PCACTCTXW);
+#endif
+WINBASEAPI BOOL WINAPI CreateDirectoryA(LPCSTR,LPSECURITY_ATTRIBUTES);
+WINBASEAPI BOOL WINAPI CreateDirectoryW(LPCWSTR,LPSECURITY_ATTRIBUTES);
+WINBASEAPI BOOL WINAPI CreateDirectoryExA(LPCSTR,LPCSTR,LPSECURITY_ATTRIBUTES);
+WINBASEAPI BOOL WINAPI CreateDirectoryExW(LPCWSTR,LPCWSTR,LPSECURITY_ATTRIBUTES);
+WINBASEAPI HANDLE WINAPI CreateEventA(LPSECURITY_ATTRIBUTES,BOOL,BOOL,LPCSTR);
+WINBASEAPI HANDLE WINAPI CreateEventW(LPSECURITY_ATTRIBUTES,BOOL,BOOL,LPCWSTR);
+WINBASEAPI LPVOID WINAPI CreateFiber(SIZE_T,LPFIBER_START_ROUTINE,LPVOID);
+#if (_WIN32_WINNT >= 0x0400)
+WINBASEAPI LPVOID WINAPI CreateFiberEx(SIZE_T,SIZE_T,DWORD,LPFIBER_START_ROUTINE,LPVOID);
+#endif
+WINBASEAPI HANDLE WINAPI CreateFileA(LPCSTR,DWORD,DWORD,LPSECURITY_ATTRIBUTES,DWORD,DWORD,HANDLE);
+WINBASEAPI HANDLE WINAPI CreateFileW(LPCWSTR,DWORD,DWORD,LPSECURITY_ATTRIBUTES,DWORD,DWORD,HANDLE);
+WINBASEAPI HANDLE WINAPI CreateFileMappingA(HANDLE,LPSECURITY_ATTRIBUTES,DWORD,DWORD,DWORD,LPCSTR);
+WINBASEAPI HANDLE WINAPI CreateFileMappingW(HANDLE,LPSECURITY_ATTRIBUTES,DWORD,DWORD,DWORD,LPCWSTR);
+#if (_WIN32_WINNT >= 0x0500)
+WINBASEAPI BOOL WINAPI CreateHardLinkA(LPCSTR,LPCSTR,LPSECURITY_ATTRIBUTES);
+WINBASEAPI BOOL WINAPI CreateHardLinkW(LPCWSTR,LPCWSTR,LPSECURITY_ATTRIBUTES);
+#endif
+WINBASEAPI HANDLE WINAPI CreateIoCompletionPort(HANDLE,HANDLE,ULONG_PTR,DWORD);
+#if (_WIN32_WINNT >= 0x0500)
+WINBASEAPI HANDLE WINAPI CreateJobObjectA(LPSECURITY_ATTRIBUTES,LPCSTR);
+WINBASEAPI HANDLE WINAPI CreateJobObjectW(LPSECURITY_ATTRIBUTES,LPCWSTR);
+WINBASEAPI BOOL WINAPI TerminateJobObject(HANDLE,UINT);
+WINBASEAPI BOOL WINAPI AssignProcessToJobObject(HANDLE,HANDLE);
+WINBASEAPI BOOL WINAPI SetInformationJobObject(HANDLE, JOBOBJECTINFOCLASS, LPVOID, DWORD);
+WINBASEAPI BOOL WINAPI QueryInformationJobObject(HANDLE, JOBOBJECTINFOCLASS, LPVOID, DWORD, LPDWORD);
+#endif
+WINBASEAPI HANDLE WINAPI CreateMailslotA(LPCSTR,DWORD,DWORD,LPSECURITY_ATTRIBUTES);
+WINBASEAPI HANDLE WINAPI CreateMailslotW(LPCWSTR,DWORD,DWORD,LPSECURITY_ATTRIBUTES);
+#if (_WIN32_WINNT >= 0x0501)
+WINBASEAPI HANDLE WINAPI CreateMemoryResourceNotification(MEMORY_RESOURCE_NOTIFICATION_TYPE);
+#endif
+WINBASEAPI HANDLE WINAPI CreateMutexA(LPSECURITY_ATTRIBUTES,BOOL,LPCSTR);
+WINBASEAPI HANDLE WINAPI CreateMutexW(LPSECURITY_ATTRIBUTES,BOOL,LPCWSTR);
+WINBASEAPI HANDLE WINAPI CreateNamedPipeA(LPCSTR,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,LPSECURITY_ATTRIBUTES);
+WINBASEAPI HANDLE WINAPI CreateNamedPipeW(LPCWSTR,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,LPSECURITY_ATTRIBUTES);
+WINBASEAPI BOOL WINAPI CreatePipe(PHANDLE,PHANDLE,LPSECURITY_ATTRIBUTES,DWORD);
+WINBASEAPI BOOL WINAPI CreatePrivateObjectSecurity(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR*,BOOL,HANDLE,PGENERIC_MAPPING);
+WINBASEAPI BOOL WINAPI CreateProcessA(LPCSTR,LPSTR,LPSECURITY_ATTRIBUTES,LPSECURITY_ATTRIBUTES,BOOL,DWORD,PVOID,LPCSTR,LPSTARTUPINFOA,LPPROCESS_INFORMATION);
+WINBASEAPI BOOL WINAPI CreateProcessW(LPCWSTR,LPWSTR,LPSECURITY_ATTRIBUTES,LPSECURITY_ATTRIBUTES,BOOL,DWORD,PVOID,LPCWSTR,LPSTARTUPINFOW,LPPROCESS_INFORMATION);
+WINBASEAPI BOOL WINAPI CreateProcessAsUserA(HANDLE,LPCSTR,LPSTR,LPSECURITY_ATTRIBUTES,LPSECURITY_ATTRIBUTES,BOOL,DWORD,PVOID,LPCSTR,LPSTARTUPINFOA,LPPROCESS_INFORMATION);
+WINBASEAPI BOOL WINAPI CreateProcessAsUserW(HANDLE,LPCWSTR,LPWSTR,LPSECURITY_ATTRIBUTES,LPSECURITY_ATTRIBUTES,BOOL,DWORD,PVOID,LPCWSTR,LPSTARTUPINFOW,LPPROCESS_INFORMATION);
+#if (_WIN32_WINNT >= 0x0500)
+WINBASEAPI BOOL WINAPI CreateProcessWithLogonW (LPCWSTR,LPCWSTR,LPCWSTR,DWORD,
+ LPCWSTR,LPWSTR,DWORD,LPVOID,
+ LPCWSTR,LPSTARTUPINFOW,
+ LPPROCESS_INFORMATION);
+#define LOGON_WITH_PROFILE 0x00000001
+#define LOGON_NETCREDENTIALS_ONLY 0x00000002
+#endif
+WINBASEAPI HANDLE WINAPI CreateRemoteThread(HANDLE,LPSECURITY_ATTRIBUTES,DWORD,LPTHREAD_START_ROUTINE,LPVOID,DWORD,LPDWORD);
+#if (_WIN32_WINNT >= 0x0500)
+WINBASEAPI BOOL WINAPI CreateRestrictedToken(HANDLE,DWORD,DWORD,PSID_AND_ATTRIBUTES,DWORD,PLUID_AND_ATTRIBUTES,DWORD,PSID_AND_ATTRIBUTES,PHANDLE);
+#define DISABLE_MAX_PRIVILEGE 1
+#define SANDBOX_INERT 2
+#define LUA_TOKEN 4
+#define WRITE_RESTRICTED 8
+#endif
+WINBASEAPI HANDLE WINAPI CreateSemaphoreA(LPSECURITY_ATTRIBUTES,LONG,LONG,LPCSTR);
+WINBASEAPI HANDLE WINAPI CreateSemaphoreW(LPSECURITY_ATTRIBUTES,LONG,LONG,LPCWSTR);
+WINBASEAPI DWORD WINAPI CreateTapePartition(HANDLE,DWORD,DWORD,DWORD);
+#if (_WIN32_WINNT >= 0x0500)
+WINBASEAPI HANDLE WINAPI CreateTimerQueue(void);
+WINBASEAPI BOOL WINAPI CreateTimerQueueTimer(PHANDLE,HANDLE,WAITORTIMERCALLBACK,PVOID,DWORD,DWORD,ULONG);
+#endif
+WINBASEAPI HANDLE WINAPI CreateThread(LPSECURITY_ATTRIBUTES,DWORD,LPTHREAD_START_ROUTINE,PVOID,DWORD,PDWORD);
+WINBASEAPI HANDLE WINAPI CreateWaitableTimerA(LPSECURITY_ATTRIBUTES,BOOL,LPCSTR);
+WINBASEAPI HANDLE WINAPI CreateWaitableTimerW(LPSECURITY_ATTRIBUTES,BOOL,LPCWSTR);
+#if (_WIN32_WINNT >= 0x0501)
+WINBASEAPI BOOL WINAPI DeactivateActCtx(DWORD,ULONG_PTR);
+#endif
+WINBASEAPI BOOL WINAPI DebugActiveProcess(DWORD);
+#if (_WIN32_WINNT >= 0x0501)
+WINBASEAPI BOOL WINAPI DebugActiveProcessStop(DWORD);
+#endif
+WINBASEAPI void WINAPI DebugBreak(void);
+#if (_WIN32_WINNT >= 0x0501)
+WINBASEAPI BOOL WINAPI DebugBreakProcess(HANDLE);
+WINBASEAPI BOOL WINAPI DebugSetProcessKillOnExit(BOOL);
+#endif
+WINBASEAPI BOOL WINAPI DefineDosDeviceA(DWORD,LPCSTR,LPCSTR);
+WINBASEAPI BOOL WINAPI DefineDosDeviceW(DWORD,LPCWSTR,LPCWSTR);
+#define DefineHandleTable(w) ((w),TRUE)
+WINBASEAPI BOOL WINAPI DeleteAce(PACL,DWORD);
+WINBASEAPI ATOM WINAPI DeleteAtom(ATOM);
+WINBASEAPI void WINAPI DeleteCriticalSection(PCRITICAL_SECTION);
+WINBASEAPI void WINAPI DeleteFiber(PVOID);
+WINBASEAPI BOOL WINAPI DeleteFileA(LPCSTR);
+WINBASEAPI BOOL WINAPI DeleteFileW(LPCWSTR);
+#if (_WIN32_WINNT >= 0x0500)
+WINBASEAPI BOOL WINAPI DeleteTimerQueue(HANDLE);
+WINBASEAPI BOOL WINAPI DeleteTimerQueueEx(HANDLE,HANDLE);
+WINBASEAPI BOOL WINAPI DeleteTimerQueueTimer(HANDLE,HANDLE,HANDLE);
+WINBASEAPI BOOL WINAPI DeleteVolumeMountPointA(LPCSTR);
+WINBASEAPI BOOL WINAPI DeleteVolumeMountPointW(LPCWSTR);
+#endif
+WINBASEAPI BOOL WINAPI DeregisterEventSource(HANDLE);
+WINBASEAPI BOOL WINAPI DestroyPrivateObjectSecurity(PSECURITY_DESCRIPTOR*);
+WINBASEAPI BOOL WINAPI DeviceIoControl(HANDLE,DWORD,PVOID,DWORD,PVOID,DWORD,PDWORD,POVERLAPPED);
+WINBASEAPI BOOL WINAPI DisableThreadLibraryCalls(HMODULE);
+#if (_WIN32_WINNT >= 0x0500)
+WINBASEAPI BOOL WINAPI DnsHostnameToComputerNameA(LPCSTR,LPSTR,LPDWORD);
+WINBASEAPI BOOL WINAPI DnsHostnameToComputerNameW(LPCWSTR,LPWSTR,LPDWORD);
+#endif
+WINBASEAPI BOOL WINAPI DisconnectNamedPipe(HANDLE);
+WINBASEAPI BOOL WINAPI DosDateTimeToFileTime(WORD,WORD,LPFILETIME);
+WINBASEAPI BOOL WINAPI DuplicateHandle(HANDLE,HANDLE,HANDLE,PHANDLE,DWORD,BOOL,DWORD);
+WINBASEAPI BOOL WINAPI DuplicateToken(HANDLE,SECURITY_IMPERSONATION_LEVEL,PHANDLE);
+WINBASEAPI BOOL WINAPI DuplicateTokenEx(HANDLE,DWORD,LPSECURITY_ATTRIBUTES,SECURITY_IMPERSONATION_LEVEL,TOKEN_TYPE,PHANDLE);
+WINBASEAPI BOOL WINAPI EncryptFileA(LPCSTR);
+WINBASEAPI BOOL WINAPI EncryptFileW(LPCWSTR);
+WINBASEAPI BOOL WINAPI EndUpdateResourceA(HANDLE,BOOL);
+WINBASEAPI BOOL WINAPI EndUpdateResourceW(HANDLE,BOOL);
+WINBASEAPI void WINAPI EnterCriticalSection(LPCRITICAL_SECTION);
+WINBASEAPI BOOL WINAPI EnumResourceLanguagesA(HMODULE,LPCSTR,LPCSTR,ENUMRESLANGPROC,LONG_PTR);
+WINBASEAPI BOOL WINAPI EnumResourceLanguagesW(HMODULE,LPCWSTR,LPCWSTR,ENUMRESLANGPROC,LONG_PTR);
+WINBASEAPI BOOL WINAPI EnumResourceNamesA(HMODULE,LPCSTR,ENUMRESNAMEPROC,LONG_PTR);
+WINBASEAPI BOOL WINAPI EnumResourceNamesW(HMODULE,LPCWSTR,ENUMRESNAMEPROC,LONG_PTR);
+WINBASEAPI BOOL WINAPI EnumResourceTypesA(HMODULE,ENUMRESTYPEPROC,LONG_PTR);
+WINBASEAPI BOOL WINAPI EnumResourceTypesW(HMODULE,ENUMRESTYPEPROC,LONG_PTR);
+WINBASEAPI BOOL WINAPI EqualPrefixSid(PSID,PSID);
+WINBASEAPI BOOL WINAPI EqualSid(PSID,PSID);
+WINBASEAPI DWORD WINAPI EraseTape(HANDLE,DWORD,BOOL);
+WINBASEAPI BOOL WINAPI EscapeCommFunction(HANDLE,DWORD);
+DECLSPEC_NORETURN WINBASEAPI void WINAPI ExitProcess(UINT);
+DECLSPEC_NORETURN WINBASEAPI void WINAPI ExitThread(DWORD);
+WINBASEAPI DWORD WINAPI ExpandEnvironmentStringsA(LPCSTR,LPSTR,DWORD);
+WINBASEAPI DWORD WINAPI ExpandEnvironmentStringsW(LPCWSTR,LPWSTR,DWORD);
+WINBASEAPI void WINAPI FatalAppExitA(UINT,LPCSTR);
+WINBASEAPI void WINAPI FatalAppExitW(UINT,LPCWSTR);
+WINBASEAPI void WINAPI FatalExit(int);
+WINBASEAPI BOOL WINAPI FileEncryptionStatusA(LPCSTR,LPDWORD);
+WINBASEAPI BOOL WINAPI FileEncryptionStatusW(LPCWSTR,LPDWORD);
+WINBASEAPI BOOL WINAPI FileTimeToDosDateTime(CONST FILETIME *,LPWORD,LPWORD);
+WINBASEAPI BOOL WINAPI FileTimeToLocalFileTime(CONST FILETIME *,LPFILETIME);
+WINBASEAPI BOOL WINAPI FileTimeToSystemTime(CONST FILETIME *,LPSYSTEMTIME);
+#if (_WIN32_WINNT >= 0x0501)
+WINBASEAPI BOOL WINAPI FindActCtxSectionGuid(DWORD,const GUID*,ULONG,const GUID*,PACTCTX_SECTION_KEYED_DATA);
+WINBASEAPI BOOL WINAPI FindActCtxSectionStringA(DWORD,const GUID*,ULONG,LPCSTR,PACTCTX_SECTION_KEYED_DATA);
+WINBASEAPI BOOL WINAPI FindActCtxSectionStringW(DWORD,const GUID*,ULONG,LPCWSTR,PACTCTX_SECTION_KEYED_DATA);
+#endif
+WINBASEAPI ATOM WINAPI FindAtomA(LPCSTR);
+WINBASEAPI ATOM WINAPI FindAtomW(LPCWSTR);
+WINBASEAPI BOOL WINAPI FindClose(HANDLE);
+WINBASEAPI BOOL WINAPI FindCloseChangeNotification(HANDLE);
+WINBASEAPI HANDLE WINAPI FindFirstChangeNotificationA(LPCSTR,BOOL,DWORD);
+WINBASEAPI HANDLE WINAPI FindFirstChangeNotificationW(LPCWSTR,BOOL,DWORD);
+WINBASEAPI HANDLE WINAPI FindFirstFileA(LPCSTR,LPWIN32_FIND_DATAA);
+WINBASEAPI HANDLE WINAPI FindFirstFileW(LPCWSTR,LPWIN32_FIND_DATAW);
+WINBASEAPI HANDLE WINAPI FindFirstFileExA(LPCSTR,FINDEX_INFO_LEVELS,PVOID,FINDEX_SEARCH_OPS,PVOID,DWORD);
+WINBASEAPI HANDLE WINAPI FindFirstFileExW(LPCWSTR,FINDEX_INFO_LEVELS,PVOID,FINDEX_SEARCH_OPS,PVOID,DWORD);
+WINBASEAPI BOOL WINAPI FindFirstFreeAce(PACL,PVOID*);
+#if (_WIN32_WINNT >= 0x0500)
+WINBASEAPI HANDLE WINAPI FindFirstVolumeA(LPCSTR,DWORD);
+WINBASEAPI HANDLE WINAPI FindFirstVolumeW(LPCWSTR,DWORD);
+WINBASEAPI HANDLE WINAPI FindFirstVolumeMountPointA(LPSTR,LPSTR,DWORD);
+WINBASEAPI HANDLE WINAPI FindFirstVolumeMountPointW(LPWSTR,LPWSTR,DWORD);
+#endif
+WINBASEAPI BOOL WINAPI FindNextChangeNotification(HANDLE);
+WINBASEAPI BOOL WINAPI FindNextFileA(HANDLE,LPWIN32_FIND_DATAA);
+WINBASEAPI BOOL WINAPI FindNextFileW(HANDLE,LPWIN32_FIND_DATAW);
+#if (_WIN32_WINNT >= 0x0500)
+WINBASEAPI BOOL WINAPI FindNextVolumeA(HANDLE,LPCSTR,DWORD);
+WINBASEAPI BOOL WINAPI FindNextVolumeW(HANDLE,LPWSTR,DWORD);
+WINBASEAPI BOOL WINAPI FindNextVolumeMountPointA(HANDLE,LPSTR,DWORD);
+WINBASEAPI BOOL WINAPI FindNextVolumeMountPointW(HANDLE,LPWSTR,DWORD);
+WINBASEAPI BOOL WINAPI FindVolumeClose(HANDLE);
+WINBASEAPI BOOL WINAPI FindVolumeMountPointClose(HANDLE);
+#endif
+WINBASEAPI HRSRC WINAPI FindResourceA(HMODULE,LPCSTR,LPCSTR);
+WINBASEAPI HRSRC WINAPI FindResourceW(HINSTANCE,LPCWSTR,LPCWSTR);
+WINBASEAPI HRSRC WINAPI FindResourceExA(HINSTANCE,LPCSTR,LPCSTR,WORD);
+WINBASEAPI HRSRC WINAPI FindResourceExW(HINSTANCE,LPCWSTR,LPCWSTR,WORD);
+#if (_WIN32_WINNT >= 0x0502)
+WINBASEAPI DWORD WINAPI GetFirmwareEnvironmentVariableA(LPCSTR,LPCSTR,PVOID,DWORD);
+WINBASEAPI DWORD WINAPI GetFirmwareEnvironmentVariableW(LPCWSTR,LPCWSTR,PVOID,DWORD);
+#endif
+WINBASEAPI BOOL WINAPI FlushFileBuffers(HANDLE);
+WINBASEAPI BOOL WINAPI FlushInstructionCache(HANDLE,PCVOID,DWORD);
+WINBASEAPI BOOL WINAPI FlushViewOfFile(PCVOID,DWORD);
+WINBASEAPI DWORD WINAPI FormatMessageA(DWORD,PCVOID,DWORD,DWORD,LPSTR,DWORD,va_list*);
+WINBASEAPI DWORD WINAPI FormatMessageW(DWORD,PCVOID,DWORD,DWORD,LPWSTR,DWORD,va_list*);
+WINBASEAPI BOOL WINAPI FreeEnvironmentStringsA(LPSTR);
+WINBASEAPI BOOL WINAPI FreeEnvironmentStringsW(LPWSTR);
+WINBASEAPI BOOL WINAPI FreeLibrary(HMODULE);
+DECLSPEC_NORETURN WINBASEAPI void WINAPI FreeLibraryAndExitThread(HMODULE,DWORD);
+#define FreeModule(m) FreeLibrary(m)
+#define FreeProcInstance(p) (void)(p)
+#ifndef XFree86Server
+WINBASEAPI BOOL WINAPI FreeResource(HGLOBAL);
+#endif /* ndef XFree86Server */
+WINBASEAPI PVOID WINAPI FreeSid(PSID);
+WINBASEAPI BOOL WINAPI GetAce(PACL,DWORD,LPVOID*);
+WINBASEAPI BOOL WINAPI GetAclInformation(PACL,PVOID,DWORD,ACL_INFORMATION_CLASS);
+WINBASEAPI UINT WINAPI GetAtomNameA(ATOM,LPSTR,int);
+WINBASEAPI UINT WINAPI GetAtomNameW(ATOM,LPWSTR,int);
+WINBASEAPI BOOL WINAPI GetBinaryTypeA(LPCSTR,PDWORD);
+WINBASEAPI BOOL WINAPI GetBinaryTypeW(LPCWSTR,PDWORD);
+WINBASEAPI LPSTR WINAPI GetCommandLineA(VOID);
+WINBASEAPI LPWSTR WINAPI GetCommandLineW(VOID);
+WINBASEAPI BOOL WINAPI GetCommConfig(HANDLE,LPCOMMCONFIG,PDWORD);
+WINBASEAPI BOOL WINAPI GetCommMask(HANDLE,PDWORD);
+WINBASEAPI BOOL WINAPI GetCommModemStatus(HANDLE,PDWORD);
+WINBASEAPI BOOL WINAPI GetCommProperties(HANDLE,LPCOMMPROP);
+WINBASEAPI BOOL WINAPI GetCommState(HANDLE,LPDCB);
+WINBASEAPI BOOL WINAPI GetCommTimeouts(HANDLE,LPCOMMTIMEOUTS);
+WINBASEAPI DWORD WINAPI GetCompressedFileSizeA(LPCSTR,PDWORD);
+WINBASEAPI DWORD WINAPI GetCompressedFileSizeW(LPCWSTR,PDWORD);
+WINBASEAPI BOOL WINAPI GetComputerNameA(LPSTR,PDWORD);
+WINBASEAPI BOOL WINAPI GetComputerNameW(LPWSTR,PDWORD);
+#if (_WIN32_WINNT >= 0x0500)
+WINBASEAPI BOOL WINAPI GetComputerNameExA(COMPUTER_NAME_FORMAT,LPSTR,LPDWORD);
+WINBASEAPI BOOL WINAPI GetComputerNameExW(COMPUTER_NAME_FORMAT,LPWSTR,LPDWORD);
+#endif
+#if (_WIN32_WINNT >= 0x0501)
+WINBASEAPI BOOL WINAPI GetCurrentActCtx(HANDLE*);
+#endif
+WINBASEAPI DWORD WINAPI GetCurrentDirectoryA(DWORD,LPSTR);
+WINBASEAPI DWORD WINAPI GetCurrentDirectoryW(DWORD,LPWSTR);
+WINBASEAPI BOOL WINAPI GetCurrentHwProfileA(LPHW_PROFILE_INFOA);
+WINBASEAPI BOOL WINAPI GetCurrentHwProfileW(LPHW_PROFILE_INFOW);
+WINBASEAPI HANDLE WINAPI GetCurrentProcess(void);
+WINBASEAPI DWORD WINAPI GetCurrentProcessId(void);
+WINBASEAPI HANDLE WINAPI GetCurrentThread(void);
+#ifdef _WIN32_WCE
+extern DWORD GetCurrentThreadId(void);
+#else
+WINBASEAPI DWORD WINAPI GetCurrentThreadId(void);
+#endif
+#define GetCurrentTime GetTickCount
+WINBASEAPI BOOL WINAPI GetDefaultCommConfigA(LPCSTR,LPCOMMCONFIG,PDWORD);
+WINBASEAPI BOOL WINAPI GetDefaultCommConfigW(LPCWSTR,LPCOMMCONFIG,PDWORD);
+WINBASEAPI BOOL WINAPI GetDevicePowerState(HANDLE, BOOL*);
+WINBASEAPI BOOL WINAPI GetDiskFreeSpaceA(LPCSTR,PDWORD,PDWORD,PDWORD,PDWORD);
+WINBASEAPI BOOL WINAPI GetDiskFreeSpaceW(LPCWSTR,PDWORD,PDWORD,PDWORD,PDWORD);
+WINBASEAPI BOOL WINAPI GetDiskFreeSpaceExA(LPCSTR,PULARGE_INTEGER,PULARGE_INTEGER,PULARGE_INTEGER);
+WINBASEAPI BOOL WINAPI GetDiskFreeSpaceExW(LPCWSTR,PULARGE_INTEGER,PULARGE_INTEGER,PULARGE_INTEGER);
+#if (_WIN32_WINNT >= 0x0502)
+WINBASEAPI DWORD WINAPI GetDllDirectoryA(DWORD,LPSTR);
+WINBASEAPI DWORD WINAPI GetDllDirectoryW(DWORD,LPWSTR);
+#endif
+WINBASEAPI UINT WINAPI GetDriveTypeA(LPCSTR);
+WINBASEAPI UINT WINAPI GetDriveTypeW(LPCWSTR);
+WINBASEAPI LPSTR WINAPI GetEnvironmentStrings(void);
+WINBASEAPI LPSTR WINAPI GetEnvironmentStringsA(void);
+WINBASEAPI LPWSTR WINAPI GetEnvironmentStringsW(void);
+WINBASEAPI DWORD WINAPI GetEnvironmentVariableA(LPCSTR,LPSTR,DWORD);
+WINBASEAPI DWORD WINAPI GetEnvironmentVariableW(LPCWSTR,LPWSTR,DWORD);
+WINBASEAPI BOOL WINAPI GetExitCodeProcess(HANDLE,PDWORD);
+WINBASEAPI BOOL WINAPI GetExitCodeThread(HANDLE,PDWORD);
+WINBASEAPI DWORD WINAPI GetFileAttributesA(LPCSTR);
+WINBASEAPI DWORD WINAPI GetFileAttributesW(LPCWSTR);
+WINBASEAPI BOOL WINAPI GetFileAttributesExA(LPCSTR,GET_FILEEX_INFO_LEVELS,PVOID);
+WINBASEAPI BOOL WINAPI GetFileAttributesExW(LPCWSTR,GET_FILEEX_INFO_LEVELS,PVOID);
+WINBASEAPI BOOL WINAPI GetFileInformationByHandle(HANDLE,LPBY_HANDLE_FILE_INFORMATION);
+WINBASEAPI BOOL WINAPI GetFileSecurityA(LPCSTR,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,DWORD,PDWORD);
+WINBASEAPI BOOL WINAPI GetFileSecurityW(LPCWSTR,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,DWORD,PDWORD);
+WINBASEAPI DWORD WINAPI GetFileSize(HANDLE,PDWORD);
+#if (_WIN32_WINNT >= 0x0500)
+WINBASEAPI BOOL WINAPI GetFileSizeEx(HANDLE,PLARGE_INTEGER);
+#endif
+WINBASEAPI BOOL WINAPI GetFileTime(HANDLE,LPFILETIME,LPFILETIME,LPFILETIME);
+WINBASEAPI DWORD WINAPI GetFileType(HANDLE);
+#define GetFreeSpace(w) (0x100000L)
+WINBASEAPI DWORD WINAPI GetFullPathNameA(LPCSTR,DWORD,LPSTR,LPSTR*);
+WINBASEAPI DWORD WINAPI GetFullPathNameW(LPCWSTR,DWORD,LPWSTR,LPWSTR*);
+WINBASEAPI BOOL WINAPI GetHandleInformation(HANDLE,PDWORD);
+WINBASEAPI BOOL WINAPI GetKernelObjectSecurity(HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,DWORD,PDWORD);
+WINBASEAPI DWORD WINAPI GetLastError(void);
+WINBASEAPI DWORD WINAPI GetLengthSid(PSID);
+WINBASEAPI void WINAPI GetLocalTime(LPSYSTEMTIME);
+WINBASEAPI DWORD WINAPI GetLogicalDrives(void);
+WINBASEAPI DWORD WINAPI GetLogicalDriveStringsA(DWORD,LPSTR);
+WINBASEAPI DWORD WINAPI GetLogicalDriveStringsW(DWORD,LPWSTR);
+#if (_WIN32_WINNT >= 0x0500 || _WIN32_WINDOWS >= 0x0410)
+WINBASEAPI DWORD WINAPI GetLongPathNameA(LPCSTR,LPSTR,DWORD);
+WINBASEAPI DWORD WINAPI GetLongPathNameW(LPCWSTR,LPWSTR,DWORD);
+#endif
+WINBASEAPI BOOL WINAPI GetMailslotInfo(HANDLE,PDWORD,PDWORD,PDWORD,PDWORD);
+WINBASEAPI DWORD WINAPI GetModuleFileNameA(HINSTANCE,LPSTR,DWORD);
+WINBASEAPI DWORD WINAPI GetModuleFileNameW(HINSTANCE,LPWSTR,DWORD);
+WINBASEAPI HMODULE WINAPI GetModuleHandleA(LPCSTR);
+WINBASEAPI HMODULE WINAPI GetModuleHandleW(LPCWSTR);
+#if (_WIN32_WINNT >= 0x0500)
+WINBASEAPI BOOL WINAPI GetModuleHandleExA(DWORD,LPCSTR,HMODULE*);
+WINBASEAPI BOOL WINAPI GetModuleHandleExW(DWORD,LPCWSTR,HMODULE*);
+#endif
+WINBASEAPI BOOL WINAPI GetNamedPipeHandleStateA(HANDLE,PDWORD,PDWORD,PDWORD,PDWORD,LPSTR,DWORD);
+WINBASEAPI BOOL WINAPI GetNamedPipeHandleStateW(HANDLE,PDWORD,PDWORD,PDWORD,PDWORD,LPWSTR,DWORD);
+WINBASEAPI BOOL WINAPI GetNamedPipeInfo(HANDLE,PDWORD,PDWORD,PDWORD,PDWORD);
+#if (_WIN32_WINNT >= 0x0501)
+WINBASEAPI VOID WINAPI GetNativeSystemInfo(LPSYSTEM_INFO);
+#endif
+WINBASEAPI BOOL WINAPI GetNumberOfEventLogRecords(HANDLE,PDWORD);
+WINBASEAPI BOOL WINAPI GetOldestEventLogRecord(HANDLE,PDWORD);
+WINBASEAPI BOOL WINAPI GetOverlappedResult(HANDLE,LPOVERLAPPED,PDWORD,BOOL);
+WINBASEAPI DWORD WINAPI GetPriorityClass(HANDLE);
+WINBASEAPI BOOL WINAPI GetPrivateObjectSecurity(PSECURITY_DESCRIPTOR,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,DWORD,PDWORD);
+WINBASEAPI UINT WINAPI GetPrivateProfileIntA(LPCSTR,LPCSTR,INT,LPCSTR);
+WINBASEAPI UINT WINAPI GetPrivateProfileIntW(LPCWSTR,LPCWSTR,INT,LPCWSTR);
+WINBASEAPI DWORD WINAPI GetPrivateProfileSectionA(LPCSTR,LPSTR,DWORD,LPCSTR);
+WINBASEAPI DWORD WINAPI GetPrivateProfileSectionW(LPCWSTR,LPWSTR,DWORD,LPCWSTR);
+WINBASEAPI DWORD WINAPI GetPrivateProfileSectionNamesA(LPSTR,DWORD,LPCSTR);
+WINBASEAPI DWORD WINAPI GetPrivateProfileSectionNamesW(LPWSTR,DWORD,LPCWSTR);
+WINBASEAPI DWORD WINAPI GetPrivateProfileStringA(LPCSTR,LPCSTR,LPCSTR,LPSTR,DWORD,LPCSTR);
+WINBASEAPI DWORD WINAPI GetPrivateProfileStringW(LPCWSTR,LPCWSTR,LPCWSTR,LPWSTR,DWORD,LPCWSTR);
+WINBASEAPI BOOL WINAPI GetPrivateProfileStructA(LPCSTR,LPCSTR,LPVOID,UINT,LPCSTR);
+WINBASEAPI BOOL WINAPI GetPrivateProfileStructW(LPCWSTR,LPCWSTR,LPVOID,UINT,LPCWSTR);
+WINBASEAPI FARPROC WINAPI GetProcAddress(HINSTANCE,LPCSTR);
+WINBASEAPI BOOL WINAPI GetProcessAffinityMask(HANDLE,PDWORD,PDWORD);
+#if (_WIN32_WINNT >= 0x0601)
+WINBASEAPI BOOL WINAPI GetProcessDEPPolicy (HANDLE, LPDWORD, PBOOL);
+#endif
+#if (_WIN32_WINNT >= 0x0501)
+WINBASEAPI BOOL WINAPI GetProcessHandleCount(HANDLE,PDWORD);
+#endif
+WINBASEAPI HANDLE WINAPI GetProcessHeap(VOID);
+WINBASEAPI DWORD WINAPI GetProcessHeaps(DWORD,PHANDLE);
+#if (_WIN32_WINNT >= 0x0501)
+WINBASEAPI DWORD WINAPI GetProcessId(HANDLE);
+#endif
+#if (_WIN32_WINNT >= 0x0500)
+WINBASEAPI BOOL WINAPI GetProcessIoCounters(HANDLE,PIO_COUNTERS);
+#endif
+WINBASEAPI BOOL WINAPI GetProcessPriorityBoost(HANDLE,PBOOL);
+WINBASEAPI BOOL WINAPI GetProcessShutdownParameters(PDWORD,PDWORD);
+WINBASEAPI BOOL WINAPI GetProcessTimes(HANDLE,LPFILETIME,LPFILETIME,LPFILETIME,LPFILETIME);
+WINBASEAPI DWORD WINAPI GetProcessVersion(DWORD);
+WINBASEAPI HWINSTA WINAPI GetProcessWindowStation(void);
+WINBASEAPI BOOL WINAPI GetProcessWorkingSetSize(HANDLE,PSIZE_T,PSIZE_T);
+WINBASEAPI UINT WINAPI GetProfileIntA(LPCSTR,LPCSTR,INT);
+WINBASEAPI UINT WINAPI GetProfileIntW(LPCWSTR,LPCWSTR,INT);
+WINBASEAPI DWORD WINAPI GetProfileSectionA(LPCSTR,LPSTR,DWORD);
+WINBASEAPI DWORD WINAPI GetProfileSectionW(LPCWSTR,LPWSTR,DWORD);
+WINBASEAPI DWORD WINAPI GetProfileStringA(LPCSTR,LPCSTR,LPCSTR,LPSTR,DWORD);
+WINBASEAPI DWORD WINAPI GetProfileStringW(LPCWSTR,LPCWSTR,LPCWSTR,LPWSTR,DWORD);
+WINBASEAPI BOOL WINAPI GetQueuedCompletionStatus(HANDLE,PDWORD,PULONG_PTR,LPOVERLAPPED*,DWORD);
+WINBASEAPI BOOL WINAPI GetSecurityDescriptorControl(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR_CONTROL,PDWORD);
+WINBASEAPI BOOL WINAPI GetSecurityDescriptorDacl(PSECURITY_DESCRIPTOR,LPBOOL,PACL*,LPBOOL);
+WINBASEAPI BOOL WINAPI GetSecurityDescriptorGroup(PSECURITY_DESCRIPTOR,PSID*,LPBOOL);
+WINBASEAPI DWORD WINAPI GetSecurityDescriptorLength(PSECURITY_DESCRIPTOR);
+WINBASEAPI BOOL WINAPI GetSecurityDescriptorOwner(PSECURITY_DESCRIPTOR,PSID*,LPBOOL);
+WINBASEAPI BOOL WINAPI GetSecurityDescriptorSacl(PSECURITY_DESCRIPTOR,LPBOOL,PACL*,LPBOOL);
+WINBASEAPI DWORD WINAPI GetShortPathNameA(LPCSTR,LPSTR,DWORD);
+WINBASEAPI DWORD WINAPI GetShortPathNameW(LPCWSTR,LPWSTR,DWORD);
+WINBASEAPI PSID_IDENTIFIER_AUTHORITY WINAPI GetSidIdentifierAuthority(PSID);
+WINBASEAPI DWORD WINAPI GetSidLengthRequired(UCHAR);
+WINBASEAPI PDWORD WINAPI GetSidSubAuthority(PSID,DWORD);
+WINBASEAPI PUCHAR WINAPI GetSidSubAuthorityCount(PSID);
+WINBASEAPI VOID WINAPI GetStartupInfoA(LPSTARTUPINFOA);
+WINBASEAPI VOID WINAPI GetStartupInfoW(LPSTARTUPINFOW);
+WINBASEAPI HANDLE WINAPI GetStdHandle(DWORD);
+#if (_WIN32_WINNT >= 0x0601)
+WINBASEAPI DEP_SYSTEM_POLICY_TYPE WINAPI GetSystemDEPPolicy (void);
+#endif
+WINBASEAPI UINT WINAPI GetSystemDirectoryA(LPSTR,UINT);
+WINBASEAPI UINT WINAPI GetSystemDirectoryW(LPWSTR,UINT);
+WINBASEAPI VOID WINAPI GetSystemInfo(LPSYSTEM_INFO);
+WINBASEAPI BOOL WINAPI GetSystemPowerStatus(LPSYSTEM_POWER_STATUS);
+#if (_WIN32_WINNT >= 0x0501)
+WINBASEAPI BOOL WINAPI GetSystemRegistryQuota(PDWORD,PDWORD);
+#endif
+WINBASEAPI VOID WINAPI GetSystemTime(LPSYSTEMTIME);
+#if (_WIN32_WINNT >= 0x0501)
+WINBASEAPI BOOL WINAPI GetSystemTimes(LPFILETIME,LPFILETIME,LPFILETIME);
+#endif
+WINBASEAPI BOOL WINAPI GetSystemTimeAdjustment(PDWORD,PDWORD,PBOOL);
+WINBASEAPI void WINAPI GetSystemTimeAsFileTime(LPFILETIME);
+#if (_WIN32_WINNT >= 0x0500)
+WINBASEAPI UINT WINAPI GetSystemWindowsDirectoryA(LPSTR,UINT);
+WINBASEAPI UINT WINAPI GetSystemWindowsDirectoryW(LPWSTR,UINT);
+#endif
+#if (_WIN32_WINNT >= 0x0501)
+WINBASEAPI UINT WINAPI GetSystemWow64DirectoryA(LPSTR,UINT);
+WINBASEAPI UINT WINAPI GetSystemWow64DirectoryW(LPWSTR,UINT);
+#endif
+WINBASEAPI DWORD WINAPI GetTapeParameters(HANDLE,DWORD,PDWORD,PVOID);
+WINBASEAPI DWORD WINAPI GetTapePosition(HANDLE,DWORD,PDWORD,PDWORD,PDWORD);
+WINBASEAPI DWORD WINAPI GetTapeStatus(HANDLE);
+WINBASEAPI UINT WINAPI GetTempFileNameA(LPCSTR,LPCSTR,UINT,LPSTR);
+WINBASEAPI UINT WINAPI GetTempFileNameW(LPCWSTR,LPCWSTR,UINT,LPWSTR);
+WINBASEAPI DWORD WINAPI GetTempPathA(DWORD,LPSTR);
+WINBASEAPI DWORD WINAPI GetTempPathW(DWORD,LPWSTR);
+WINBASEAPI BOOL WINAPI GetThreadContext(HANDLE,LPCONTEXT);
+#if (_WIN32_WINNT >= 0x0501)
+WINBASEAPI BOOL WINAPI GetThreadIOPendingFlag(HANDLE,PBOOL);
+#endif
+WINBASEAPI int WINAPI GetThreadPriority(HANDLE);
+WINBASEAPI BOOL WINAPI GetThreadPriorityBoost(HANDLE,PBOOL);
+WINBASEAPI BOOL WINAPI GetThreadSelectorEntry(HANDLE,DWORD,LPLDT_ENTRY);
+WINBASEAPI BOOL WINAPI GetThreadTimes(HANDLE,LPFILETIME,LPFILETIME,LPFILETIME,LPFILETIME);
+WINBASEAPI DWORD WINAPI GetTickCount(VOID);
+WINBASEAPI DWORD WINAPI GetTimeZoneInformation(LPTIME_ZONE_INFORMATION);
+WINBASEAPI BOOL WINAPI GetTokenInformation(HANDLE,TOKEN_INFORMATION_CLASS,PVOID,DWORD,PDWORD);
+WINBASEAPI BOOL WINAPI GetUserNameA (LPSTR,PDWORD);
+WINBASEAPI BOOL WINAPI GetUserNameW(LPWSTR,PDWORD);
+WINBASEAPI DWORD WINAPI GetVersion(void);
+WINBASEAPI BOOL WINAPI GetVersionExA(LPOSVERSIONINFOA);
+WINBASEAPI BOOL WINAPI GetVersionExW(LPOSVERSIONINFOW);
+WINBASEAPI BOOL WINAPI GetVolumeInformationA(LPCSTR,LPSTR,DWORD,PDWORD,PDWORD,PDWORD,LPSTR,DWORD);
+WINBASEAPI BOOL WINAPI GetVolumeInformationW(LPCWSTR,LPWSTR,DWORD,PDWORD,PDWORD,PDWORD,LPWSTR,DWORD);
+#if (_WIN32_WINNT >= 0x0500)
+WINBASEAPI BOOL WINAPI GetVolumeNameForVolumeMountPointA(LPCSTR,LPSTR,DWORD);
+WINBASEAPI BOOL WINAPI GetVolumeNameForVolumeMountPointW(LPCWSTR,LPWSTR,DWORD);
+WINBASEAPI BOOL WINAPI GetVolumePathNameA(LPCSTR,LPSTR,DWORD);
+WINBASEAPI BOOL WINAPI GetVolumePathNameW(LPCWSTR,LPWSTR,DWORD);
+#endif
+#if (_WIN32_WINNT >= 0x0501)
+WINBASEAPI BOOL WINAPI GetVolumePathNamesForVolumeNameA(LPCSTR,LPSTR,DWORD,PDWORD);
+WINBASEAPI BOOL WINAPI GetVolumePathNamesForVolumeNameW(LPCWSTR,LPWSTR,DWORD,PDWORD);
+#endif
+WINBASEAPI UINT WINAPI GetWindowsDirectoryA(LPSTR,UINT);
+WINBASEAPI UINT WINAPI GetWindowsDirectoryW(LPWSTR,UINT);
+WINBASEAPI DWORD WINAPI GetWindowThreadProcessId(HWND,PDWORD);
+WINBASEAPI UINT WINAPI GetWriteWatch(DWORD,PVOID,SIZE_T,PVOID*,PULONG_PTR,PULONG);
+WINBASEAPI ATOM WINAPI GlobalAddAtomA(LPCSTR);
+WINBASEAPI ATOM WINAPI GlobalAddAtomW( LPCWSTR);
+WINBASEAPI HGLOBAL WINAPI GlobalAlloc(UINT,DWORD);
+WINBASEAPI SIZE_T WINAPI GlobalCompact(DWORD); /* Obsolete: Has no effect. */
+WINBASEAPI ATOM WINAPI GlobalDeleteAtom(ATOM);
+#define GlobalDiscard(hMem) GlobalReAlloc((hMem), 0, GMEM_MOVEABLE)
+WINBASEAPI ATOM WINAPI GlobalFindAtomA(LPCSTR);
+WINBASEAPI ATOM WINAPI GlobalFindAtomW(LPCWSTR);
+WINBASEAPI VOID WINAPI GlobalFix(HGLOBAL); /* Obsolete: Has no effect. */
+WINBASEAPI UINT WINAPI GlobalFlags(HGLOBAL); /* Obsolete: Has no effect. */
+WINBASEAPI HGLOBAL WINAPI GlobalFree(HGLOBAL);
+WINBASEAPI UINT WINAPI GlobalGetAtomNameA(ATOM,LPSTR,int);
+WINBASEAPI UINT WINAPI GlobalGetAtomNameW(ATOM,LPWSTR,int);
+WINBASEAPI HGLOBAL WINAPI GlobalHandle(PCVOID);
+WINBASEAPI LPVOID WINAPI GlobalLock(HGLOBAL);
+WINBASEAPI VOID WINAPI GlobalMemoryStatus(LPMEMORYSTATUS);
+#if (_WIN32_WINNT >= 0x0500)
+WINBASEAPI BOOL WINAPI GlobalMemoryStatusEx(LPMEMORYSTATUSEX);
+#endif
+WINBASEAPI HGLOBAL WINAPI GlobalReAlloc(HGLOBAL,DWORD,UINT);
+WINBASEAPI DWORD WINAPI GlobalSize(HGLOBAL);
+WINBASEAPI VOID WINAPI GlobalUnfix(HGLOBAL); /* Obsolete: Has no effect. */
+WINBASEAPI BOOL WINAPI GlobalUnlock(HGLOBAL);
+WINBASEAPI BOOL WINAPI GlobalUnWire(HGLOBAL); /* Obsolete: Has no effect. */
+WINBASEAPI PVOID WINAPI GlobalWire(HGLOBAL); /* Obsolete: Has no effect. */
+#define HasOverlappedIoCompleted(lpOverlapped) ((lpOverlapped)->Internal != STATUS_PENDING)
+WINBASEAPI PVOID WINAPI HeapAlloc(HANDLE,DWORD,DWORD);
+SIZE_T WINAPI HeapCompact(HANDLE,DWORD);
+WINBASEAPI HANDLE WINAPI HeapCreate(DWORD,DWORD,DWORD);
+WINBASEAPI BOOL WINAPI HeapDestroy(HANDLE);
+WINBASEAPI BOOL WINAPI HeapFree(HANDLE,DWORD,PVOID);
+WINBASEAPI BOOL WINAPI HeapLock(HANDLE);
+#if (_WIN32_WINNT >= 0x0501)
+WINBASEAPI BOOL WINAPI HeapQueryInformation(HANDLE,HEAP_INFORMATION_CLASS,PVOID,SIZE_T,PSIZE_T);
+#endif
+WINBASEAPI PVOID WINAPI HeapReAlloc(HANDLE,DWORD,PVOID,DWORD);
+#if (_WIN32_WINNT >= 0x0501)
+WINBASEAPI BOOL WINAPI HeapSetInformation(HANDLE,HEAP_INFORMATION_CLASS,PVOID,SIZE_T);
+#endif
+WINBASEAPI DWORD WINAPI HeapSize(HANDLE,DWORD,PCVOID);
+WINBASEAPI BOOL WINAPI HeapUnlock(HANDLE);
+WINBASEAPI BOOL WINAPI HeapValidate(HANDLE,DWORD,PCVOID);
+WINBASEAPI BOOL WINAPI HeapWalk(HANDLE,LPPROCESS_HEAP_ENTRY);
+WINBASEAPI BOOL WINAPI ImpersonateLoggedOnUser(HANDLE);
+WINBASEAPI BOOL WINAPI ImpersonateNamedPipeClient(HANDLE);
+WINBASEAPI BOOL WINAPI ImpersonateSelf(SECURITY_IMPERSONATION_LEVEL);
+WINBASEAPI BOOL WINAPI InitAtomTable(DWORD);
+WINBASEAPI BOOL WINAPI InitializeAcl(PACL,DWORD,DWORD);
+WINBASEAPI VOID WINAPI InitializeCriticalSection(LPCRITICAL_SECTION);
+WINBASEAPI BOOL WINAPI InitializeCriticalSectionAndSpinCount(LPCRITICAL_SECTION,DWORD);
+WINBASEAPI DWORD WINAPI SetCriticalSectionSpinCount(LPCRITICAL_SECTION,DWORD);
+WINBASEAPI BOOL WINAPI InitializeSecurityDescriptor(PSECURITY_DESCRIPTOR,DWORD);
+WINBASEAPI BOOL WINAPI InitializeSid (PSID,PSID_IDENTIFIER_AUTHORITY,BYTE);
+
+#if !(__USE_NTOSKRNL__)
+/* CAREFUL: These are exported from ntoskrnl.exe and declared in winddk.h
+ as __fastcall functions, but are exported from kernel32.dll as __stdcall */
+#if (_WIN32_WINNT >= 0x0501)
+WINBASEAPI VOID WINAPI InitializeSListHead(PSLIST_HEADER);
+#endif
+#ifndef __INTERLOCKED_DECLARED
+#define __INTERLOCKED_DECLARED
+LONG WINAPI InterlockedCompareExchange(LONG volatile *,LONG,LONG);
+/* PVOID WINAPI InterlockedCompareExchangePointer(PVOID*,PVOID,PVOID); */
+#define InterlockedCompareExchangePointer(d,e,c) \
+ (PVOID)InterlockedCompareExchange((LONG volatile *)(d),(LONG)(e),(LONG)(c))
+LONG WINAPI InterlockedDecrement(LONG volatile *);
+LONG WINAPI InterlockedExchange(LONG volatile *,LONG);
+/* PVOID WINAPI InterlockedExchangePointer(PVOID*,PVOID); */
+#define InterlockedExchangePointer(t,v) \
+ (PVOID)InterlockedExchange((LONG volatile *)(t),(LONG)(v))
+LONG WINAPI InterlockedExchangeAdd(LONG volatile *,LONG);
+#if (_WIN32_WINNT >= 0x0501)
+PSLIST_ENTRY WINAPI InterlockedFlushSList(PSLIST_HEADER);
+#endif
+LONG WINAPI InterlockedIncrement(LONG volatile *);
+#if (_WIN32_WINNT >= 0x0501)
+PSLIST_ENTRY WINAPI InterlockedPopEntrySList(PSLIST_HEADER);
+PSLIST_ENTRY WINAPI InterlockedPushEntrySList(PSLIST_HEADER,PSLIST_ENTRY);
+#endif
+#endif /* __INTERLOCKED_DECLARED */
+#endif /* __USE_NTOSKRNL__ */
+
+WINBASEAPI BOOL WINAPI IsBadCodePtr(FARPROC);
+WINBASEAPI BOOL WINAPI IsBadHugeReadPtr(PCVOID,UINT);
+WINBASEAPI BOOL WINAPI IsBadHugeWritePtr(PVOID,UINT);
+WINBASEAPI BOOL WINAPI IsBadReadPtr(PCVOID,UINT);
+WINBASEAPI BOOL WINAPI IsBadStringPtrA(LPCSTR,UINT);
+WINBASEAPI BOOL WINAPI IsBadStringPtrW(LPCWSTR,UINT);
+WINBASEAPI BOOL WINAPI IsBadWritePtr(PVOID,UINT);
+WINBASEAPI BOOL WINAPI IsDebuggerPresent(void);
+#if (_WIN32_WINNT >= 0x0501)
+WINBASEAPI BOOL IsProcessInJob(HANDLE,HANDLE,PBOOL);
+#endif
+WINBASEAPI BOOL WINAPI IsProcessorFeaturePresent(DWORD);
+WINBASEAPI BOOL WINAPI IsSystemResumeAutomatic(void);
+WINBASEAPI BOOL WINAPI IsTextUnicode(PCVOID,int,LPINT);
+#if (_WIN32_WINNT >= 0x0500)
+WINBASEAPI BOOL WINAPI IsTokenRestricted(HANDLE);
+#endif
+WINBASEAPI BOOL WINAPI IsValidAcl(PACL);
+WINBASEAPI BOOL WINAPI IsValidSecurityDescriptor(PSECURITY_DESCRIPTOR);
+WINBASEAPI BOOL WINAPI IsValidSid(PSID);
+#if (_WIN32_WINNT >= 0x0501)
+WINBASEAPI BOOL WINAPI IsWow64Process(HANDLE,PBOOL);
+#endif
+WINBASEAPI void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION);
+#define LimitEmsPages(n)
+WINBASEAPI HINSTANCE WINAPI LoadLibraryA(LPCSTR);
+WINBASEAPI HINSTANCE WINAPI LoadLibraryExA(LPCSTR,HANDLE,DWORD);
+WINBASEAPI HINSTANCE WINAPI LoadLibraryExW(LPCWSTR,HANDLE,DWORD);
+WINBASEAPI HINSTANCE WINAPI LoadLibraryW(LPCWSTR);
+WINBASEAPI DWORD WINAPI LoadModule(LPCSTR,PVOID);
+WINBASEAPI HGLOBAL WINAPI LoadResource(HINSTANCE,HRSRC);
+WINBASEAPI HLOCAL WINAPI LocalAlloc(UINT,SIZE_T);
+WINBASEAPI SIZE_T WINAPI LocalCompact(UINT); /* Obsolete: Has no effect. */
+WINBASEAPI HLOCAL LocalDiscard(HLOCAL);
+WINBASEAPI BOOL WINAPI LocalFileTimeToFileTime(CONST FILETIME *,LPFILETIME);
+WINBASEAPI UINT WINAPI LocalFlags(HLOCAL); /* Obsolete: Has no effect. */
+WINBASEAPI HLOCAL WINAPI LocalFree(HLOCAL);
+WINBASEAPI HLOCAL WINAPI LocalHandle(LPCVOID);
+WINBASEAPI PVOID WINAPI LocalLock(HLOCAL);
+WINBASEAPI HLOCAL WINAPI LocalReAlloc(HLOCAL,SIZE_T,UINT);
+WINBASEAPI SIZE_T WINAPI LocalShrink(HLOCAL,UINT); /* Obsolete: Has no effect. */
+WINBASEAPI UINT WINAPI LocalSize(HLOCAL);
+WINBASEAPI BOOL WINAPI LocalUnlock(HLOCAL);
+WINBASEAPI BOOL WINAPI LockFile(HANDLE,DWORD,DWORD,DWORD,DWORD);
+WINBASEAPI BOOL WINAPI LockFileEx(HANDLE,DWORD,DWORD,DWORD,DWORD,LPOVERLAPPED);
+WINBASEAPI PVOID WINAPI LockResource(HGLOBAL);
+#define LockSegment(w) GlobalFix((HANDLE)(w)) /* Obsolete: Has no effect. */
+WINBASEAPI BOOL WINAPI LogonUserA(LPSTR,LPSTR,LPSTR,DWORD,DWORD,PHANDLE);
+WINBASEAPI BOOL WINAPI LogonUserW(LPWSTR,LPWSTR,LPWSTR,DWORD,DWORD,PHANDLE);
+WINBASEAPI BOOL WINAPI LookupAccountNameA(LPCSTR,LPCSTR,PSID,PDWORD,LPSTR,PDWORD,PSID_NAME_USE);
+WINBASEAPI BOOL WINAPI LookupAccountNameW(LPCWSTR,LPCWSTR,PSID,PDWORD,LPWSTR,PDWORD,PSID_NAME_USE);
+WINBASEAPI BOOL WINAPI LookupAccountSidA(LPCSTR,PSID,LPSTR,PDWORD,LPSTR,PDWORD,PSID_NAME_USE);
+WINBASEAPI BOOL WINAPI LookupAccountSidW(LPCWSTR,PSID,LPWSTR,PDWORD,LPWSTR,PDWORD,PSID_NAME_USE);
+WINBASEAPI BOOL WINAPI LookupPrivilegeDisplayNameA(LPCSTR,LPCSTR,LPSTR,PDWORD,PDWORD);
+WINBASEAPI BOOL WINAPI LookupPrivilegeDisplayNameW(LPCWSTR,LPCWSTR,LPWSTR,PDWORD,PDWORD);
+WINBASEAPI BOOL WINAPI LookupPrivilegeNameA(LPCSTR,PLUID,LPSTR,PDWORD);
+WINBASEAPI BOOL WINAPI LookupPrivilegeNameW(LPCWSTR,PLUID,LPWSTR,PDWORD);
+WINBASEAPI BOOL WINAPI LookupPrivilegeValueA(LPCSTR,LPCSTR,PLUID);
+WINBASEAPI BOOL WINAPI LookupPrivilegeValueW(LPCWSTR,LPCWSTR,PLUID);
+WINBASEAPI LPSTR WINAPI lstrcatA(LPSTR,LPCSTR);
+WINBASEAPI LPWSTR WINAPI lstrcatW(LPWSTR,LPCWSTR);
+WINBASEAPI int WINAPI lstrcmpA(LPCSTR,LPCSTR);
+WINBASEAPI int WINAPI lstrcmpiA(LPCSTR,LPCSTR);
+WINBASEAPI int WINAPI lstrcmpiW( LPCWSTR,LPCWSTR);
+WINBASEAPI int WINAPI lstrcmpW(LPCWSTR,LPCWSTR);
+WINBASEAPI LPSTR WINAPI lstrcpyA(LPSTR,LPCSTR);
+WINBASEAPI LPSTR WINAPI lstrcpynA(LPSTR,LPCSTR,int);
+WINBASEAPI LPWSTR WINAPI lstrcpynW(LPWSTR,LPCWSTR,int);
+WINBASEAPI LPWSTR WINAPI lstrcpyW(LPWSTR,LPCWSTR);
+WINBASEAPI int WINAPI lstrlenA(LPCSTR);
+WINBASEAPI int WINAPI lstrlenW(LPCWSTR);
+WINBASEAPI BOOL WINAPI MakeAbsoluteSD(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,PDWORD,PACL,PDWORD,PACL,PDWORD,PSID,PDWORD,PSID,PDWORD);
+#define MakeProcInstance(p,i) (p)
+WINBASEAPI BOOL WINAPI MakeSelfRelativeSD(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,PDWORD);
+WINBASEAPI VOID WINAPI MapGenericMask(PDWORD,PGENERIC_MAPPING);
+WINBASEAPI PVOID WINAPI MapViewOfFile(HANDLE,DWORD,DWORD,DWORD,DWORD);
+WINBASEAPI PVOID WINAPI MapViewOfFileEx(HANDLE,DWORD,DWORD,DWORD,DWORD,PVOID);
+WINBASEAPI BOOL WINAPI MoveFileA(LPCSTR,LPCSTR);
+WINBASEAPI BOOL WINAPI MoveFileExA(LPCSTR,LPCSTR,DWORD);
+WINBASEAPI BOOL WINAPI MoveFileExW(LPCWSTR,LPCWSTR,DWORD);
+WINBASEAPI BOOL WINAPI MoveFileW(LPCWSTR,LPCWSTR);
+WINBASEAPI int WINAPI MulDiv(int,int,int);
+WINBASEAPI BOOL WINAPI NotifyChangeEventLog(HANDLE,HANDLE);
+WINBASEAPI BOOL WINAPI ObjectCloseAuditAlarmA(LPCSTR,PVOID,BOOL);
+WINBASEAPI BOOL WINAPI ObjectCloseAuditAlarmW(LPCWSTR,PVOID,BOOL);
+WINBASEAPI BOOL WINAPI ObjectDeleteAuditAlarmA(LPCSTR,PVOID,BOOL);
+WINBASEAPI BOOL WINAPI ObjectDeleteAuditAlarmW(LPCWSTR,PVOID,BOOL);
+WINBASEAPI BOOL WINAPI ObjectOpenAuditAlarmA(LPCSTR,PVOID,LPSTR,LPSTR,PSECURITY_DESCRIPTOR,HANDLE,DWORD,DWORD,PPRIVILEGE_SET,BOOL,BOOL,PBOOL);
+WINBASEAPI BOOL WINAPI ObjectOpenAuditAlarmW(LPCWSTR,PVOID,LPWSTR,LPWSTR,PSECURITY_DESCRIPTOR,HANDLE,DWORD,DWORD,PPRIVILEGE_SET,BOOL,BOOL,PBOOL);
+WINBASEAPI BOOL WINAPI ObjectPrivilegeAuditAlarmA(LPCSTR,PVOID,HANDLE,DWORD,PPRIVILEGE_SET,BOOL);
+WINBASEAPI BOOL WINAPI ObjectPrivilegeAuditAlarmW(LPCWSTR,PVOID,HANDLE,DWORD,PPRIVILEGE_SET,BOOL);
+WINBASEAPI HANDLE WINAPI OpenBackupEventLogA(LPCSTR,LPCSTR);
+WINBASEAPI HANDLE WINAPI OpenBackupEventLogW(LPCWSTR,LPCWSTR);
+WINBASEAPI HANDLE WINAPI OpenEventA(DWORD,BOOL,LPCSTR);
+WINBASEAPI HANDLE WINAPI OpenEventLogA (LPCSTR,LPCSTR);
+WINBASEAPI HANDLE WINAPI OpenEventLogW(LPCWSTR,LPCWSTR);
+WINBASEAPI HANDLE WINAPI OpenEventW(DWORD,BOOL,LPCWSTR);
+WINBASEAPI HFILE WINAPI OpenFile(LPCSTR,LPOFSTRUCT,UINT);
+WINBASEAPI HANDLE WINAPI OpenFileMappingA(DWORD,BOOL,LPCSTR);
+WINBASEAPI HANDLE WINAPI OpenFileMappingW(DWORD,BOOL,LPCWSTR);
+WINBASEAPI HANDLE WINAPI OpenMutexA(DWORD,BOOL,LPCSTR);
+WINBASEAPI HANDLE WINAPI OpenMutexW(DWORD,BOOL,LPCWSTR);
+WINBASEAPI HANDLE WINAPI OpenProcess(DWORD,BOOL,DWORD);
+WINBASEAPI BOOL WINAPI OpenProcessToken(HANDLE,DWORD,PHANDLE);
+WINBASEAPI HANDLE WINAPI OpenSemaphoreA(DWORD,BOOL,LPCSTR);
+WINBASEAPI HANDLE WINAPI OpenSemaphoreW(DWORD,BOOL,LPCWSTR);
+#if (_WIN32_WINNT >= 0x0500) || (_WIN32_WINDOWS >= 0x0490)
+WINBASEAPI HANDLE WINAPI OpenThread(DWORD,BOOL,DWORD);
+#endif
+WINBASEAPI BOOL WINAPI OpenThreadToken(HANDLE,DWORD,BOOL,PHANDLE);
+WINBASEAPI HANDLE WINAPI OpenWaitableTimerA(DWORD,BOOL,LPCSTR);
+WINBASEAPI HANDLE WINAPI OpenWaitableTimerW(DWORD,BOOL,LPCWSTR);
+WINBASEAPI void WINAPI OutputDebugStringA(LPCSTR);
+WINBASEAPI void WINAPI OutputDebugStringW(LPCWSTR);
+WINBASEAPI BOOL WINAPI PeekNamedPipe(HANDLE,PVOID,DWORD,PDWORD,PDWORD,PDWORD);
+WINBASEAPI BOOL WINAPI PostQueuedCompletionStatus(HANDLE,DWORD,ULONG_PTR,LPOVERLAPPED);
+WINBASEAPI DWORD WINAPI PrepareTape(HANDLE,DWORD,BOOL);
+WINBASEAPI BOOL WINAPI PrivilegeCheck (HANDLE,PPRIVILEGE_SET,PBOOL);
+WINBASEAPI BOOL WINAPI PrivilegedServiceAuditAlarmA(LPCSTR,LPCSTR,HANDLE,PPRIVILEGE_SET,BOOL);
+WINBASEAPI BOOL WINAPI PrivilegedServiceAuditAlarmW(LPCWSTR,LPCWSTR,HANDLE,PPRIVILEGE_SET,BOOL);
+#if (_WIN32_WINNT >= 0x0500)
+WINBASEAPI BOOL WINAPI ProcessIdToSessionId(DWORD,DWORD*);
+#endif
+WINBASEAPI BOOL WINAPI PulseEvent(HANDLE);
+WINBASEAPI BOOL WINAPI PurgeComm(HANDLE,DWORD);
+#if (_WIN32_WINNT >= 0x0501)
+WINBASEAPI BOOL WINAPI QueryActCtxW(DWORD,HANDLE,PVOID,ULONG,PVOID,SIZE_T,SIZE_T*);
+#endif
+WINBASEAPI DWORD WINAPI QueryDosDeviceA(LPCSTR,LPSTR,DWORD);
+WINBASEAPI DWORD WINAPI QueryDosDeviceW(LPCWSTR,LPWSTR,DWORD);
+#if (_WIN32_WINNT >= 0x0501)
+WINBASEAPI BOOL WINAPI QueryMemoryResourceNotification(HANDLE,PBOOL);
+#endif
+WINBASEAPI BOOL WINAPI QueryPerformanceCounter(PLARGE_INTEGER);
+WINBASEAPI BOOL WINAPI QueryPerformanceFrequency(PLARGE_INTEGER);
+WINBASEAPI DWORD WINAPI QueueUserAPC(PAPCFUNC,HANDLE,ULONG_PTR);
+#if (_WIN32_WINNT >= 0x0500)
+WINBASEAPI BOOL WINAPI QueueUserWorkItem(LPTHREAD_START_ROUTINE,PVOID,ULONG);
+#endif
+WINBASEAPI void WINAPI RaiseException(DWORD,DWORD,DWORD,const DWORD*);
+WINBASEAPI BOOL WINAPI ReadDirectoryChangesW(HANDLE,PVOID,DWORD,BOOL,DWORD,PDWORD,LPOVERLAPPED,LPOVERLAPPED_COMPLETION_ROUTINE);
+WINBASEAPI BOOL WINAPI ReadEventLogA(HANDLE,DWORD,DWORD,PVOID,DWORD,DWORD *,DWORD *);
+WINBASEAPI BOOL WINAPI ReadEventLogW(HANDLE,DWORD,DWORD,PVOID,DWORD,DWORD *,DWORD *);
+WINBASEAPI BOOL WINAPI ReadFile(HANDLE,PVOID,DWORD,PDWORD,LPOVERLAPPED);
+WINBASEAPI BOOL WINAPI ReadFileEx(HANDLE,PVOID,DWORD,LPOVERLAPPED,LPOVERLAPPED_COMPLETION_ROUTINE);
+WINBASEAPI BOOL WINAPI ReadFileScatter(HANDLE,FILE_SEGMENT_ELEMENT*,DWORD,LPDWORD,LPOVERLAPPED);
+WINBASEAPI BOOL WINAPI ReadProcessMemory(HANDLE,PCVOID,PVOID,DWORD,PDWORD);
+WINBASEAPI HANDLE WINAPI RegisterEventSourceA (LPCSTR,LPCSTR);
+WINBASEAPI HANDLE WINAPI RegisterEventSourceW(LPCWSTR,LPCWSTR);
+#if (_WIN32_WINNT >= 0x0500)
+WINBASEAPI BOOL WINAPI RegisterWaitForSingleObject(PHANDLE,HANDLE,WAITORTIMERCALLBACK,PVOID,ULONG,ULONG);
+WINBASEAPI HANDLE WINAPI RegisterWaitForSingleObjectEx(HANDLE,WAITORTIMERCALLBACK,PVOID,ULONG,ULONG);
+#endif
+#if (_WIN32_WINNT >= 0x0501)
+WINBASEAPI void WINAPI ReleaseActCtx(HANDLE);
+#endif
+WINBASEAPI BOOL WINAPI ReleaseMutex(HANDLE);
+WINBASEAPI BOOL WINAPI ReleaseSemaphore(HANDLE,LONG,LPLONG);
+WINBASEAPI BOOL WINAPI RemoveDirectoryA(LPCSTR);
+WINBASEAPI BOOL WINAPI RemoveDirectoryW(LPCWSTR);
+#if (_WIN32_WINNT >= 0x0500)
+WINBASEAPI ULONG WINAPI RemoveVectoredExceptionHandler(PVOID);
+#endif
+#if (_WIN32_WINNT >= 0x0502)
+WINBASEAPI HANDLE WINAPI ReOpenFile(HANDLE,DWORD,DWORD,DWORD);
+#endif
+#if (_WIN32_WINNT >= 0x0500)
+WINBASEAPI BOOL WINAPI ReplaceFileA(LPCSTR,LPCSTR,LPCSTR,DWORD,LPVOID,LPVOID);
+WINBASEAPI BOOL WINAPI ReplaceFileW(LPCWSTR,LPCWSTR,LPCWSTR,DWORD,LPVOID,LPVOID);
+#endif
+WINBASEAPI BOOL WINAPI ReportEventA(HANDLE,WORD,WORD,DWORD,PSID,WORD,DWORD,LPCSTR*,PVOID);
+WINBASEAPI BOOL WINAPI ReportEventW(HANDLE,WORD,WORD,DWORD,PSID,WORD,DWORD,LPCWSTR*,PVOID);
+#ifdef _WIN32_WCE
+extern BOOL ResetEvent(HANDLE);
+#else
+WINBASEAPI BOOL WINAPI ResetEvent(HANDLE);
+#endif
+WINBASEAPI UINT WINAPI ResetWriteWatch(LPVOID,SIZE_T);
+#if (_WIN32_WINNT >= 0x0510)
+WINBASEAPI VOID WINAPI RestoreLastError(DWORD);
+#endif
+WINBASEAPI DWORD WINAPI ResumeThread(HANDLE);
+WINBASEAPI BOOL WINAPI RevertToSelf(void);
+WINBASEAPI DWORD WINAPI SearchPathA(LPCSTR,LPCSTR,LPCSTR,DWORD,LPSTR,LPSTR*);
+WINBASEAPI DWORD WINAPI SearchPathW(LPCWSTR,LPCWSTR,LPCWSTR,DWORD,LPWSTR,LPWSTR*);
+WINBASEAPI BOOL WINAPI SetAclInformation(PACL,PVOID,DWORD,ACL_INFORMATION_CLASS);
+WINBASEAPI BOOL WINAPI SetCommBreak(HANDLE);
+WINBASEAPI BOOL WINAPI SetCommConfig(HANDLE,LPCOMMCONFIG,DWORD);
+WINBASEAPI BOOL WINAPI SetCommMask(HANDLE,DWORD);
+WINBASEAPI BOOL WINAPI SetCommState(HANDLE,LPDCB);
+WINBASEAPI BOOL WINAPI SetCommTimeouts(HANDLE,LPCOMMTIMEOUTS);
+WINBASEAPI BOOL WINAPI SetComputerNameA(LPCSTR);
+WINBASEAPI BOOL WINAPI SetComputerNameW(LPCWSTR);
+#if (_WIN32_WINNT >= 0x0500)
+WINBASEAPI BOOL WINAPI SetComputerNameExA(COMPUTER_NAME_FORMAT,LPCSTR);
+WINBASEAPI BOOL WINAPI SetComputerNameExW(COMPUTER_NAME_FORMAT,LPCWSTR);
+#endif
+WINBASEAPI BOOL WINAPI SetCurrentDirectoryA(LPCSTR);
+WINBASEAPI BOOL WINAPI SetCurrentDirectoryW(LPCWSTR);
+WINBASEAPI BOOL WINAPI SetDefaultCommConfigA(LPCSTR,LPCOMMCONFIG,DWORD);
+WINBASEAPI BOOL WINAPI SetDefaultCommConfigW(LPCWSTR,LPCOMMCONFIG,DWORD);
+#if (_WIN32_WINNT >= 0x0502)
+WINBASEAPI BOOL WINAPI SetDllDirectoryA(LPCSTR);
+WINBASEAPI BOOL WINAPI SetDllDirectoryW(LPCWSTR);
+#endif
+WINBASEAPI BOOL WINAPI SetEndOfFile(HANDLE);
+WINBASEAPI BOOL WINAPI SetEnvironmentVariableA(LPCSTR,LPCSTR);
+WINBASEAPI BOOL WINAPI SetEnvironmentVariableW(LPCWSTR,LPCWSTR);
+WINBASEAPI UINT WINAPI SetErrorMode(UINT);
+#ifdef _WIN32_WCE
+extern BOOL SetEvent(HANDLE);
+#else
+WINBASEAPI BOOL WINAPI SetEvent(HANDLE);
+#endif
+WINBASEAPI VOID WINAPI SetFileApisToANSI(void);
+WINBASEAPI VOID WINAPI SetFileApisToOEM(void);
+WINBASEAPI BOOL WINAPI SetFileAttributesA(LPCSTR,DWORD);
+WINBASEAPI BOOL WINAPI SetFileAttributesW(LPCWSTR,DWORD);
+WINBASEAPI DWORD WINAPI SetFilePointer(HANDLE,LONG,PLONG,DWORD);
+WINBASEAPI BOOL WINAPI SetFilePointerEx(HANDLE,LARGE_INTEGER,PLARGE_INTEGER,DWORD);
+WINBASEAPI BOOL WINAPI SetFileSecurityA(LPCSTR,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR);
+WINBASEAPI BOOL WINAPI SetFileSecurityW(LPCWSTR,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR);
+#if (_WIN32_WINNT >= 0x0501)
+WINBASEAPI BOOL WINAPI SetFileShortNameA(HANDLE,LPCSTR);
+WINBASEAPI BOOL WINAPI SetFileShortNameW(HANDLE,LPCWSTR);
+#endif
+WINBASEAPI BOOL WINAPI SetFileTime(HANDLE,const FILETIME*,const FILETIME*,const FILETIME*);
+#if (_WIN32_WINNT >= 0x0501)
+WINBASEAPI BOOL WINAPI SetFileValidData(HANDLE,LONGLONG);
+#endif
+#if (_WIN32_WINNT >= 0x0502)
+WINBASEAPI BOOL WINAPI SetFirmwareEnvironmentVariableA(LPCSTR,LPCSTR,PVOID,DWORD);
+WINBASEAPI BOOL WINAPI SetFirmwareEnvironmentVariableW(LPCWSTR,LPCWSTR,PVOID,DWORD);
+#endif
+WINBASEAPI UINT WINAPI SetHandleCount(UINT);
+WINBASEAPI BOOL WINAPI SetHandleInformation(HANDLE,DWORD,DWORD);
+WINBASEAPI BOOL WINAPI SetKernelObjectSecurity(HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR);
+WINBASEAPI void WINAPI SetLastError(DWORD);
+WINBASEAPI void WINAPI SetLastErrorEx(DWORD,DWORD);
+WINBASEAPI BOOL WINAPI SetLocalTime(const SYSTEMTIME*);
+WINBASEAPI BOOL WINAPI SetMailslotInfo(HANDLE,DWORD);
+WINBASEAPI BOOL WINAPI SetNamedPipeHandleState(HANDLE,PDWORD,PDWORD,PDWORD);
+WINBASEAPI BOOL WINAPI SetPriorityClass(HANDLE,DWORD);
+WINBASEAPI BOOL WINAPI SetPrivateObjectSecurity(SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR *,PGENERIC_MAPPING,HANDLE);
+WINBASEAPI BOOL WINAPI SetProcessAffinityMask(HANDLE,DWORD);
+#if (_WIN32_WINNT >= 0x0601)
+WINBASEAPI BOOL WINAPI SetProcessDEPPolicy (DWORD);
+#endif
+WINBASEAPI BOOL WINAPI SetProcessPriorityBoost(HANDLE,BOOL);
+WINBASEAPI BOOL WINAPI SetProcessShutdownParameters(DWORD,DWORD);
+WINBASEAPI BOOL WINAPI SetProcessWorkingSetSize(HANDLE,SIZE_T,SIZE_T);
+WINBASEAPI BOOL WINAPI SetSecurityDescriptorControl(PSECURITY_DESCRIPTOR,SECURITY_DESCRIPTOR_CONTROL,SECURITY_DESCRIPTOR_CONTROL);
+WINBASEAPI BOOL WINAPI SetSecurityDescriptorDacl(PSECURITY_DESCRIPTOR,BOOL,PACL,BOOL);
+WINBASEAPI BOOL WINAPI SetSecurityDescriptorGroup(PSECURITY_DESCRIPTOR,PSID,BOOL);
+WINBASEAPI BOOL WINAPI SetSecurityDescriptorOwner(PSECURITY_DESCRIPTOR,PSID,BOOL);
+WINBASEAPI BOOL WINAPI SetSecurityDescriptorSacl(PSECURITY_DESCRIPTOR,BOOL,PACL,BOOL);
+WINBASEAPI BOOL WINAPI SetStdHandle(DWORD,HANDLE);
+#define SetSwapAreaSize(w) (w)
+WINBASEAPI BOOL WINAPI SetSystemPowerState(BOOL,BOOL);
+WINBASEAPI BOOL WINAPI SetSystemTime(const SYSTEMTIME*);
+WINBASEAPI BOOL WINAPI SetSystemTimeAdjustment(DWORD,BOOL);
+WINBASEAPI DWORD WINAPI SetTapeParameters(HANDLE,DWORD,PVOID);
+WINBASEAPI DWORD WINAPI SetTapePosition(HANDLE,DWORD,DWORD,DWORD,DWORD,BOOL);
+WINBASEAPI DWORD WINAPI SetThreadAffinityMask(HANDLE,DWORD);
+WINBASEAPI BOOL WINAPI SetThreadContext(HANDLE,const CONTEXT*);
+#if (_WIN32_WINNT >= 0x0500 || _WIN32_WINDOWS >= 0x0410)
+WINBASEAPI EXECUTION_STATE WINAPI SetThreadExecutionState(EXECUTION_STATE);
+#endif
+WINBASEAPI DWORD WINAPI SetThreadIdealProcessor(HANDLE,DWORD);
+WINBASEAPI BOOL WINAPI SetThreadPriority(HANDLE,int);
+WINBASEAPI BOOL WINAPI SetThreadPriorityBoost(HANDLE,BOOL);
+WINBASEAPI BOOL WINAPI SetThreadToken (PHANDLE,HANDLE);
+WINBASEAPI BOOL WINAPI SetTimeZoneInformation(const TIME_ZONE_INFORMATION *);
+WINBASEAPI BOOL WINAPI SetTokenInformation(HANDLE,TOKEN_INFORMATION_CLASS,PVOID,DWORD);
+WINBASEAPI LPTOP_LEVEL_EXCEPTION_FILTER WINAPI SetUnhandledExceptionFilter(LPTOP_LEVEL_EXCEPTION_FILTER);
+WINBASEAPI BOOL WINAPI SetupComm(HANDLE,DWORD,DWORD);
+WINBASEAPI BOOL WINAPI SetVolumeLabelA(LPCSTR,LPCSTR);
+WINBASEAPI BOOL WINAPI SetVolumeLabelW(LPCWSTR,LPCWSTR);
+#if (_WIN32_WINNT >= 0x0500)
+WINBASEAPI BOOL WINAPI SetVolumeMountPointA(LPCSTR,LPCSTR);
+WINBASEAPI BOOL WINAPI SetVolumeMountPointW(LPCWSTR,LPCWSTR);
+#endif
+WINBASEAPI BOOL WINAPI SetWaitableTimer(HANDLE,const LARGE_INTEGER*,LONG,PTIMERAPCROUTINE,PVOID,BOOL);
+WINBASEAPI DWORD WINAPI SignalObjectAndWait(HANDLE,HANDLE,DWORD,BOOL);
+WINBASEAPI DWORD WINAPI SizeofResource(HINSTANCE,HRSRC);
+WINBASEAPI void WINAPI Sleep(DWORD);
+WINBASEAPI DWORD WINAPI SleepEx(DWORD,BOOL);
+WINBASEAPI DWORD WINAPI SuspendThread(HANDLE);
+WINBASEAPI void WINAPI SwitchToFiber(PVOID);
+WINBASEAPI BOOL WINAPI SwitchToThread(void);
+WINBASEAPI BOOL WINAPI SystemTimeToFileTime(const SYSTEMTIME*,LPFILETIME);
+WINBASEAPI BOOL WINAPI SystemTimeToTzSpecificLocalTime(LPTIME_ZONE_INFORMATION,LPSYSTEMTIME,LPSYSTEMTIME);
+WINBASEAPI BOOL WINAPI TerminateProcess(HANDLE,UINT);
+WINBASEAPI BOOL WINAPI TerminateThread(HANDLE,DWORD);
+WINBASEAPI DWORD WINAPI TlsAlloc(VOID);
+WINBASEAPI BOOL WINAPI TlsFree(DWORD);
+WINBASEAPI PVOID WINAPI TlsGetValue(DWORD);
+WINBASEAPI BOOL WINAPI TlsSetValue(DWORD,PVOID);
+WINBASEAPI BOOL WINAPI TransactNamedPipe(HANDLE,PVOID,DWORD,PVOID,DWORD,PDWORD,LPOVERLAPPED);
+WINBASEAPI BOOL WINAPI TransmitCommChar(HANDLE,char);
+WINBASEAPI BOOL WINAPI TryEnterCriticalSection(LPCRITICAL_SECTION);
+WINBASEAPI LONG WINAPI UnhandledExceptionFilter(LPEXCEPTION_POINTERS);
+WINBASEAPI BOOL WINAPI UnlockFile(HANDLE,DWORD,DWORD,DWORD,DWORD);
+WINBASEAPI BOOL WINAPI UnlockFileEx(HANDLE,DWORD,DWORD,DWORD,LPOVERLAPPED);
+#define UnlockResource(h) (h)
+#define UnlockSegment(w) GlobalUnfix((HANDLE)(w)) /* Obsolete: Has no effect. */
+WINBASEAPI BOOL WINAPI UnmapViewOfFile(LPCVOID);
+#if (_WIN32_WINNT >= 0x0500)
+WINBASEAPI BOOL WINAPI UnregisterWait(HANDLE);
+WINBASEAPI BOOL WINAPI UnregisterWaitEx(HANDLE,HANDLE);
+#endif
+WINBASEAPI BOOL WINAPI UpdateResourceA(HANDLE,LPCSTR,LPCSTR,WORD,PVOID,DWORD);
+WINBASEAPI BOOL WINAPI UpdateResourceW(HANDLE,LPCWSTR,LPCWSTR,WORD,PVOID,DWORD);
+WINBASEAPI BOOL WINAPI VerifyVersionInfoA(LPOSVERSIONINFOEXA,DWORD,DWORDLONG);
+WINBASEAPI BOOL WINAPI VerifyVersionInfoW(LPOSVERSIONINFOEXW,DWORD,DWORDLONG);
+WINBASEAPI PVOID WINAPI VirtualAlloc(PVOID,DWORD,DWORD,DWORD);
+WINBASEAPI PVOID WINAPI VirtualAllocEx(HANDLE,PVOID,DWORD,DWORD,DWORD);
+WINBASEAPI BOOL WINAPI VirtualFree(PVOID,DWORD,DWORD);
+WINBASEAPI BOOL WINAPI VirtualFreeEx(HANDLE,PVOID,DWORD,DWORD);
+WINBASEAPI BOOL WINAPI VirtualLock(PVOID,DWORD);
+WINBASEAPI BOOL WINAPI VirtualProtect(PVOID,DWORD,DWORD,PDWORD);
+WINBASEAPI BOOL WINAPI VirtualProtectEx(HANDLE,PVOID,DWORD,DWORD,PDWORD);
+WINBASEAPI DWORD WINAPI VirtualQuery(LPCVOID,PMEMORY_BASIC_INFORMATION,DWORD);
+WINBASEAPI DWORD WINAPI VirtualQueryEx(HANDLE,LPCVOID,PMEMORY_BASIC_INFORMATION,DWORD);
+WINBASEAPI BOOL WINAPI VirtualUnlock(PVOID,DWORD);
+WINBASEAPI BOOL WINAPI WaitCommEvent(HANDLE,PDWORD,LPOVERLAPPED);
+WINBASEAPI BOOL WINAPI WaitForDebugEvent(LPDEBUG_EVENT,DWORD);
+WINBASEAPI DWORD WINAPI WaitForMultipleObjects(DWORD,const HANDLE*,BOOL,DWORD);
+WINBASEAPI DWORD WINAPI WaitForMultipleObjectsEx(DWORD,const HANDLE*,BOOL,DWORD,BOOL);
+WINBASEAPI DWORD WINAPI WaitForSingleObject(HANDLE,DWORD);
+WINBASEAPI DWORD WINAPI WaitForSingleObjectEx(HANDLE,DWORD,BOOL);
+WINBASEAPI BOOL WINAPI WaitNamedPipeA(LPCSTR,DWORD);
+WINBASEAPI BOOL WINAPI WaitNamedPipeW(LPCWSTR,DWORD);
+WINBASEAPI BOOL WINAPI WinLoadTrustProvider(GUID*);
+WINBASEAPI BOOL WINAPI WriteFile(HANDLE,PCVOID,DWORD,PDWORD,LPOVERLAPPED);
+WINBASEAPI BOOL WINAPI WriteFileEx(HANDLE,PCVOID,DWORD,LPOVERLAPPED,LPOVERLAPPED_COMPLETION_ROUTINE);
+WINBASEAPI BOOL WINAPI WriteFileGather(HANDLE,FILE_SEGMENT_ELEMENT*,DWORD,LPDWORD,LPOVERLAPPED);
+WINBASEAPI BOOL WINAPI WritePrivateProfileSectionA(LPCSTR,LPCSTR,LPCSTR);
+WINBASEAPI BOOL WINAPI WritePrivateProfileSectionW(LPCWSTR,LPCWSTR,LPCWSTR);
+WINBASEAPI BOOL WINAPI WritePrivateProfileStringA(LPCSTR,LPCSTR,LPCSTR,LPCSTR);
+WINBASEAPI BOOL WINAPI WritePrivateProfileStringW(LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR);
+WINBASEAPI BOOL WINAPI WritePrivateProfileStructA(LPCSTR,LPCSTR,LPVOID,UINT,LPCSTR);
+WINBASEAPI BOOL WINAPI WritePrivateProfileStructW(LPCWSTR,LPCWSTR,LPVOID,UINT,LPCWSTR);
+WINBASEAPI BOOL WINAPI WriteProcessMemory(HANDLE,LPVOID,LPCVOID,SIZE_T,SIZE_T*);
+WINBASEAPI BOOL WINAPI WriteProfileSectionA(LPCSTR,LPCSTR);
+WINBASEAPI BOOL WINAPI WriteProfileSectionW(LPCWSTR,LPCWSTR);
+WINBASEAPI BOOL WINAPI WriteProfileStringA(LPCSTR,LPCSTR,LPCSTR);
+WINBASEAPI BOOL WINAPI WriteProfileStringW(LPCWSTR,LPCWSTR,LPCWSTR);
+WINBASEAPI DWORD WINAPI WriteTapemark(HANDLE,DWORD,DWORD,BOOL);
+#define Yield()
+#if (_WIN32_WINNT >= 0x0501)
+WINBASEAPI BOOL WINAPI ZombifyActCtx(HANDLE);
+#endif
+#if (_WIN32_WINNT >= 0x0500)
+WINBASEAPI BOOL WINAPI AllocateUserPhysicalPages(HANDLE,PULONG_PTR,PULONG_PTR);
+WINBASEAPI BOOL WINAPI FreeUserPhysicalPages(HANDLE,PULONG_PTR,PULONG_PTR);
+WINBASEAPI BOOL WINAPI MapUserPhysicalPages(PVOID,ULONG_PTR,PULONG_PTR);
+WINBASEAPI BOOL WINAPI MapUserPhysicalPagesScatter(PVOID*,ULONG_PTR,PULONG_PTR);
+#endif
+
+#ifdef UNICODE
+typedef STARTUPINFOW STARTUPINFO,*LPSTARTUPINFO;
+typedef WIN32_FIND_DATAW WIN32_FIND_DATA,*PWIN32_FIND_DATA,*LPWIN32_FIND_DATA;
+typedef HW_PROFILE_INFOW HW_PROFILE_INFO,*LPHW_PROFILE_INFO;
+#if (_WIN32_WINNT >= 0x0501)
+typedef ACTCTXW ACTCTX,*PACTCTX;
+typedef PCACTCTXW PCACTCTX;
+#endif
+#define AccessCheckAndAuditAlarm AccessCheckAndAuditAlarmW
+#define AddAtom AddAtomW
+#define BackupEventLog BackupEventLogW
+#define BeginUpdateResource BeginUpdateResourceW
+#define BuildCommDCB BuildCommDCBW
+#define BuildCommDCBAndTimeouts BuildCommDCBAndTimeoutsW
+#define CallNamedPipe CallNamedPipeW
+#if (_WIN32_WINNT >= 0x0501)
+#define CheckNameLegalDOS8Dot3 CheckNameLegalDOS8Dot3W
+#endif
+#define ClearEventLog ClearEventLogW
+#define CommConfigDialog CommConfigDialogW
+#define CopyFile CopyFileW
+#define CopyFileEx CopyFileExW
+#if (_WIN32_WINNT >= 0x0501)
+#define CreateActCtx CreateActCtxW
+#endif
+#define CreateDirectory CreateDirectoryW
+#define CreateDirectoryEx CreateDirectoryExW
+#define CreateEvent CreateEventW
+#define CreateFile CreateFileW
+#define CreateFileMapping CreateFileMappingW
+#if (_WIN32_WINNT >= 0x0500)
+#define CreateHardLink CreateHardLinkW
+#define CreateJobObject CreateJobObjectW
+#endif
+#define CreateMailslot CreateMailslotW
+#define CreateMutex CreateMutexW
+#define CreateNamedPipe CreateNamedPipeW
+#define CreateProcess CreateProcessW
+#define CreateProcessAsUser CreateProcessAsUserW
+#define CreateSemaphore CreateSemaphoreW
+#define CreateWaitableTimer CreateWaitableTimerW
+#define DefineDosDevice DefineDosDeviceW
+#define DeleteFile DeleteFileW
+#if (_WIN32_WINNT >= 0x0500)
+#define DeleteVolumeMountPoint DeleteVolumeMountPointW
+#define DnsHostnameToComputerName DnsHostnameToComputerNameW
+#endif
+#define EncryptFile EncryptFileW
+#define EndUpdateResource EndUpdateResourceW
+#define EnumResourceLanguages EnumResourceLanguagesW
+#define EnumResourceNames EnumResourceNamesW
+#define EnumResourceTypes EnumResourceTypesW
+#define ExpandEnvironmentStrings ExpandEnvironmentStringsW
+#define FatalAppExit FatalAppExitW
+#define FileEncryptionStatus FileEncryptionStatusW
+#if (_WIN32_WINNT >= 0x0501)
+#define FindActCtxSectionString FindActCtxSectionStringW
+#endif
+#define FindAtom FindAtomW
+#define FindFirstChangeNotification FindFirstChangeNotificationW
+#define FindFirstFile FindFirstFileW
+#define FindFirstFileEx FindFirstFileExW
+#if (_WIN32_WINNT >= 0x0500)
+#define FindFirstVolume FindFirstVolumeW
+#define FindFirstVolumeMountPoint FindFirstVolumeMountPointW
+#endif
+#define FindNextFile FindNextFileW
+#if (_WIN32_WINNT >= 0x0500)
+#define FindNextVolume FindNextVolumeW
+#define FindNextVolumeMountPoint FindNextVolumeMountPointW
+#endif
+#define FindResource FindResourceW
+#define FindResourceEx FindResourceExW
+#define FormatMessage FormatMessageW
+#define FreeEnvironmentStrings FreeEnvironmentStringsW
+#define GetAtomName GetAtomNameW
+#define GetBinaryType GetBinaryTypeW
+#define GetCommandLine GetCommandLineW
+#define GetCompressedFileSize GetCompressedFileSizeW
+#define GetComputerName GetComputerNameW
+#define GetCurrentDirectory GetCurrentDirectoryW
+#define GetDefaultCommConfig GetDefaultCommConfigW
+#define GetDiskFreeSpace GetDiskFreeSpaceW
+#define GetDiskFreeSpaceEx GetDiskFreeSpaceExW
+#if (_WIN32_WINNT >= 0x0502)
+#define GetDllDirectory GetDllDirectoryW
+#endif
+#define GetDriveType GetDriveTypeW
+#define GetEnvironmentStrings GetEnvironmentStringsW
+#define GetEnvironmentVariable GetEnvironmentVariableW
+#define GetFileAttributes GetFileAttributesW
+#define GetFileSecurity GetFileSecurityW
+#define GetFileAttributesEx GetFileAttributesExW
+#define GetFullPathName GetFullPathNameW
+#define GetLogicalDriveStrings GetLogicalDriveStringsW
+#if (_WIN32_WINNT >= 0x0500 || _WIN32_WINDOWS >= 0x0410)
+#define GetLongPathName GetLongPathNameW
+#endif
+#define GetModuleFileName GetModuleFileNameW
+#define GetModuleHandle GetModuleHandleW
+#if (_WIN32_WINNT >= 0x0500)
+#define GetModuleHandleEx GetModuleHandleExW
+#endif
+#define GetNamedPipeHandleState GetNamedPipeHandleStateW
+#define GetPrivateProfileInt GetPrivateProfileIntW
+#define GetPrivateProfileSection GetPrivateProfileSectionW
+#define GetPrivateProfileSectionNames GetPrivateProfileSectionNamesW
+#define GetPrivateProfileString GetPrivateProfileStringW
+#define GetPrivateProfileStruct GetPrivateProfileStructW
+#define GetProfileInt GetProfileIntW
+#define GetProfileSection GetProfileSectionW
+#define GetProfileString GetProfileStringW
+#define GetShortPathName GetShortPathNameW
+#define GetStartupInfo GetStartupInfoW
+#define GetSystemDirectory GetSystemDirectoryW
+#if (_WIN32_WINNT >= 0x0500)
+#define GetSystemWindowsDirectory GetSystemWindowsDirectoryW
+#endif
+#if (_WIN32_WINNT >= 0x0501)
+#define GetSystemWow64Directory GetSystemWow64DirectoryW
+#endif
+#define GetTempFileName GetTempFileNameW
+#define GetTempPath GetTempPathW
+#define GetUserName GetUserNameW
+#define GetVersionEx GetVersionExW
+#define GetVolumeInformation GetVolumeInformationW
+#define GetVolumeNameForVolumeMountPoint GetVolumeNameForVolumeMountPointW
+#define GetVolumePathName GetVolumePathNameW
+#define GetVolumePathNamesForVolumeName GetVolumePathNamesForVolumeNameW
+#define GetWindowsDirectory GetWindowsDirectoryW
+#define GlobalAddAtom GlobalAddAtomW
+#define GlobalFindAtom GlobalFindAtomW
+#define GlobalGetAtomName GlobalGetAtomNameW
+#define IsBadStringPtr IsBadStringPtrW
+#define LoadLibrary LoadLibraryW
+#define LoadLibraryEx LoadLibraryExW
+#define LogonUser LogonUserW
+#define LookupAccountName LookupAccountNameW
+#define LookupAccountSid LookupAccountSidW
+#define LookupPrivilegeDisplayName LookupPrivilegeDisplayNameW
+#define LookupPrivilegeName LookupPrivilegeNameW
+#define LookupPrivilegeValue LookupPrivilegeValueW
+#define lstrcat lstrcatW
+#define lstrcmp lstrcmpW
+#define lstrcmpi lstrcmpiW
+#define lstrcpy lstrcpyW
+#define lstrcpyn lstrcpynW
+#define lstrlen lstrlenW
+#define MoveFile MoveFileW
+#define MoveFileEx MoveFileExW
+#define ObjectCloseAuditAlarm ObjectCloseAuditAlarmW
+#define ObjectDeleteAuditAlarm ObjectDeleteAuditAlarmW
+#define ObjectOpenAuditAlarm ObjectOpenAuditAlarmW
+#define ObjectPrivilegeAuditAlarm ObjectPrivilegeAuditAlarmW
+#define OpenBackupEventLog OpenBackupEventLogW
+#define OpenEvent OpenEventW
+#define OpenEventLog OpenEventLogW
+#define OpenFileMapping OpenFileMappingW
+#define OpenMutex OpenMutexW
+#define OpenSemaphore OpenSemaphoreW
+#define OutputDebugString OutputDebugStringW
+#define PrivilegedServiceAuditAlarm PrivilegedServiceAuditAlarmW
+#define QueryDosDevice QueryDosDeviceW
+#define ReadEventLog ReadEventLogW
+#define RegisterEventSource RegisterEventSourceW
+#define RemoveDirectory RemoveDirectoryW
+#if (_WIN32_WINNT >= 0x0500)
+#define ReplaceFile ReplaceFileW
+#endif
+#define ReportEvent ReportEventW
+#define SearchPath SearchPathW
+#define SetComputerName SetComputerNameW
+#define SetCurrentDirectory SetCurrentDirectoryW
+#define SetDefaultCommConfig SetDefaultCommConfigW
+#if (_WIN32_WINNT >= 0x0502)
+#define SetDllDirectory SetDllDirectoryW
+#endif
+#define SetEnvironmentVariable SetEnvironmentVariableW
+#define SetFileAttributes SetFileAttributesW
+#define SetFileSecurity SetFileSecurityW
+#if (_WIN32_WINNT >= 0x0501)
+#define SetFileShortName SetFileShortNameW
+#endif
+#if (_WIN32_WINNT >= 0x0502)
+#define SetFirmwareEnvironmentVariable SetFirmwareEnvironmentVariableW
+#endif
+#define SetVolumeLabel SetVolumeLabelW
+#define SetVolumeMountPoint SetVolumeMountPointW
+#define UpdateResource UpdateResourceW
+#define VerifyVersionInfo VerifyVersionInfoW
+#define WaitNamedPipe WaitNamedPipeW
+#define WritePrivateProfileSection WritePrivateProfileSectionW
+#define WritePrivateProfileString WritePrivateProfileStringW
+#define WritePrivateProfileStruct WritePrivateProfileStructW
+#define WriteProfileSection WriteProfileSectionW
+#define WriteProfileString WriteProfileStringW
+#else
+typedef STARTUPINFOA STARTUPINFO,*LPSTARTUPINFO;
+typedef WIN32_FIND_DATAA WIN32_FIND_DATA,*PWIN32_FIND_DATA,*LPWIN32_FIND_DATA;
+typedef HW_PROFILE_INFOA HW_PROFILE_INFO,*LPHW_PROFILE_INFO;
+#if (_WIN32_WINNT >= 0x0501)
+typedef ACTCTXA ACTCTX,*PACTCTX;
+typedef PCACTCTXA PCACTCTX;
+#endif
+#define AccessCheckAndAuditAlarm AccessCheckAndAuditAlarmA
+#define AddAtom AddAtomA
+#define BackupEventLog BackupEventLogA
+#define BeginUpdateResource BeginUpdateResourceA
+#define BuildCommDCB BuildCommDCBA
+#define BuildCommDCBAndTimeouts BuildCommDCBAndTimeoutsA
+#define CallNamedPipe CallNamedPipeA
+#if (_WIN32_WINNT >= 0x0501)
+#define CheckNameLegalDOS8Dot3 CheckNameLegalDOS8Dot3A
+#endif
+#define ClearEventLog ClearEventLogA
+#define CommConfigDialog CommConfigDialogA
+#define CopyFile CopyFileA
+#define CopyFileEx CopyFileExA
+#if (_WIN32_WINNT >= 0x0501)
+#define CreateActCtx CreateActCtxA
+#endif
+#define CreateDirectory CreateDirectoryA
+#define CreateDirectoryEx CreateDirectoryExA
+#define CreateEvent CreateEventA
+#define CreateFile CreateFileA
+#define CreateFileMapping CreateFileMappingA
+#if (_WIN32_WINNT >= 0x0500)
+#define CreateHardLink CreateHardLinkA
+#define CreateJobObject CreateJobObjectA
+#endif
+#define CreateMailslot CreateMailslotA
+#define CreateMutex CreateMutexA
+#define CreateNamedPipe CreateNamedPipeA
+#define CreateProcess CreateProcessA
+#define CreateProcessAsUser CreateProcessAsUserA
+#define CreateSemaphore CreateSemaphoreA
+#define CreateWaitableTimer CreateWaitableTimerA
+#define DefineDosDevice DefineDosDeviceA
+#define DeleteFile DeleteFileA
+#if (_WIN32_WINNT >= 0x0500)
+#define DeleteVolumeMountPoint DeleteVolumeMountPointA
+#define DnsHostnameToComputerName DnsHostnameToComputerNameA
+#endif
+#define EncryptFile EncryptFileA
+#define EndUpdateResource EndUpdateResourceA
+#define EnumResourceLanguages EnumResourceLanguagesA
+#define EnumResourceNames EnumResourceNamesA
+#define EnumResourceTypes EnumResourceTypesA
+#define ExpandEnvironmentStrings ExpandEnvironmentStringsA
+#define FatalAppExit FatalAppExitA
+#define FileEncryptionStatus FileEncryptionStatusA
+#if (_WIN32_WINNT >= 0x0501)
+#define FindActCtxSectionString FindActCtxSectionStringA
+#endif
+#define FindAtom FindAtomA
+#define FindFirstChangeNotification FindFirstChangeNotificationA
+#define FindFirstFile FindFirstFileA
+#define FindFirstFileEx FindFirstFileExA
+#if (_WIN32_WINNT >= 0x0500)
+#define FindFirstVolume FindFirstVolumeA
+#define FindFirstVolumeMountPoint FindFirstVolumeMountPointA
+#endif
+#define FindNextFile FindNextFileA
+#if (_WIN32_WINNT >= 0x0500)
+#define FindNextVolume FindNextVolumeA
+#define FindNextVolumeMountPoint FindNextVolumeMountPointA
+#endif
+#define FindResource FindResourceA
+#define FindResourceEx FindResourceExA
+#define FormatMessage FormatMessageA
+#define FreeEnvironmentStrings FreeEnvironmentStringsA
+#define GetAtomName GetAtomNameA
+#define GetBinaryType GetBinaryTypeA
+#define GetCommandLine GetCommandLineA
+#define GetComputerName GetComputerNameA
+#define GetCompressedFileSize GetCompressedFileSizeA
+#define GetCurrentDirectory GetCurrentDirectoryA
+#define GetDefaultCommConfig GetDefaultCommConfigA
+#define GetDiskFreeSpace GetDiskFreeSpaceA
+#define GetDiskFreeSpaceEx GetDiskFreeSpaceExA
+#if (_WIN32_WINNT >= 0x0502)
+#define GetDllDirectory GetDllDirectoryA
+#endif
+#define GetDriveType GetDriveTypeA
+#define GetEnvironmentVariable GetEnvironmentVariableA
+#define GetFileAttributes GetFileAttributesA
+#define GetFileSecurity GetFileSecurityA
+#define GetFileAttributesEx GetFileAttributesExA
+#define GetFullPathName GetFullPathNameA
+#define GetLogicalDriveStrings GetLogicalDriveStringsA
+#if (_WIN32_WINNT >= 0x0500 || _WIN32_WINDOWS >= 0x0410)
+#define GetLongPathName GetLongPathNameA
+#endif
+#define GetNamedPipeHandleState GetNamedPipeHandleStateA
+#define GetModuleHandle GetModuleHandleA
+#if (_WIN32_WINNT >= 0x0500)
+#define GetModuleHandleEx GetModuleHandleExA
+#endif
+#define GetModuleFileName GetModuleFileNameA
+#define GetPrivateProfileInt GetPrivateProfileIntA
+#define GetPrivateProfileSection GetPrivateProfileSectionA
+#define GetPrivateProfileSectionNames GetPrivateProfileSectionNamesA
+#define GetPrivateProfileString GetPrivateProfileStringA
+#define GetPrivateProfileStruct GetPrivateProfileStructA
+#define GetProfileInt GetProfileIntA
+#define GetProfileSection GetProfileSectionA
+#define GetProfileString GetProfileStringA
+#define GetShortPathName GetShortPathNameA
+#define GetStartupInfo GetStartupInfoA
+#define GetSystemDirectory GetSystemDirectoryA
+#if (_WIN32_WINNT >= 0x0500)
+#define GetSystemWindowsDirectory GetSystemWindowsDirectoryA
+#endif
+#if (_WIN32_WINNT >= 0x0501)
+#define GetSystemWow64Directory GetSystemWow64DirectoryA
+#endif
+#define GetTempFileName GetTempFileNameA
+#define GetTempPath GetTempPathA
+#define GetUserName GetUserNameA
+#define GetVersionEx GetVersionExA
+#define GetVolumeInformation GetVolumeInformationA
+#define GetVolumeNameForVolumeMountPoint GetVolumeNameForVolumeMountPointA
+#define GetVolumePathName GetVolumePathNameA
+#define GetVolumePathNamesForVolumeName GetVolumePathNamesForVolumeNameA
+#define GetWindowsDirectory GetWindowsDirectoryA
+#define GlobalAddAtom GlobalAddAtomA
+#define GlobalFindAtom GlobalFindAtomA
+#define GlobalGetAtomName GlobalGetAtomNameA
+#define IsBadStringPtr IsBadStringPtrA
+#define LoadLibrary LoadLibraryA
+#define LoadLibraryEx LoadLibraryExA
+#define LogonUser LogonUserA
+#define LookupAccountName LookupAccountNameA
+#define LookupAccountSid LookupAccountSidA
+#define LookupPrivilegeDisplayName LookupPrivilegeDisplayNameA
+#define LookupPrivilegeName LookupPrivilegeNameA
+#define LookupPrivilegeValue LookupPrivilegeValueA
+#define lstrcat lstrcatA
+#define lstrcmp lstrcmpA
+#define lstrcmpi lstrcmpiA
+#define lstrcpy lstrcpyA
+#define lstrcpyn lstrcpynA
+#define lstrlen lstrlenA
+#define MoveFile MoveFileA
+#define MoveFileEx MoveFileExA
+#define ObjectCloseAuditAlarm ObjectCloseAuditAlarmA
+#define ObjectDeleteAuditAlarm ObjectDeleteAuditAlarmA
+#define ObjectOpenAuditAlarm ObjectOpenAuditAlarmA
+#define ObjectPrivilegeAuditAlarm ObjectPrivilegeAuditAlarmA
+#define OpenBackupEventLog OpenBackupEventLogA
+#define OpenEvent OpenEventA
+#define OpenEventLog OpenEventLogA
+#define OpenFileMapping OpenFileMappingA
+#define OpenMutex OpenMutexA
+#define OpenSemaphore OpenSemaphoreA
+#define OutputDebugString OutputDebugStringA
+#define PrivilegedServiceAuditAlarm PrivilegedServiceAuditAlarmA
+#define QueryDosDevice QueryDosDeviceA
+#define ReadEventLog ReadEventLogA
+#define RegisterEventSource RegisterEventSourceA
+#define RemoveDirectory RemoveDirectoryA
+#if (_WIN32_WINNT >= 0x0500)
+#define ReplaceFile ReplaceFileA
+#endif
+#define ReportEvent ReportEventA
+#define SearchPath SearchPathA
+#define SetComputerName SetComputerNameA
+#define SetCurrentDirectory SetCurrentDirectoryA
+#define SetDefaultCommConfig SetDefaultCommConfigA
+#if (_WIN32_WINNT >= 0x0502)
+#define SetDllDirectory SetDllDirectoryA
+#endif
+#define SetEnvironmentVariable SetEnvironmentVariableA
+#define SetFileAttributes SetFileAttributesA
+#define SetFileSecurity SetFileSecurityA
+#if (_WIN32_WINNT >= 0x0501)
+#define SetFileShortName SetFileShortNameA
+#endif
+#if (_WIN32_WINNT >= 0x0502)
+#define SetFirmwareEnvironmentVariable SetFirmwareEnvironmentVariableA
+#endif
+#define SetVolumeLabel SetVolumeLabelA
+#define SetVolumeMountPoint SetVolumeMountPointA
+#define UpdateResource UpdateResourceA
+#define VerifyVersionInfo VerifyVersionInfoA
+#define WaitNamedPipe WaitNamedPipeA
+#define WritePrivateProfileSection WritePrivateProfileSectionA
+#define WritePrivateProfileString WritePrivateProfileStringA
+#define WritePrivateProfileStruct WritePrivateProfileStructA
+#define WriteProfileSection WriteProfileSectionA
+#define WriteProfileString WriteProfileStringA
+#endif
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* _WINBASE_H */
diff --git a/tcc/include/winapi/winber.h b/tcc/include/winapi/winber.h
new file mode 100644
index 0000000..462a66d
--- /dev/null
+++ b/tcc/include/winapi/winber.h
@@ -0,0 +1,67 @@
+/*
+ winber.h - Header file for the Windows LDAP Basic Encoding Rules API
+
+ Written by Filip Navara <xnavara@volny.cz>
+
+ References:
+ The C LDAP Application Program Interface
+ http://www.watersprings.org/pub/id/draft-ietf-ldapext-ldap-c-api-05.txt
+
+ Lightweight Directory Access Protocol Reference
+ http://msdn.microsoft.com/library/en-us/netdir/ldap/ldap_reference.asp
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+*/
+
+#ifndef _WINBER_H
+#define _WINBER_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef WINBERAPI
+#define WINBERAPI DECLSPEC_IMPORT
+#endif
+
+typedef struct berelement BerElement;
+typedef ULONG ber_len_t;
+#include <pshpack4.h>
+typedef struct berval {
+ ber_len_t bv_len;
+ char *bv_val;
+} BerValue, LDAP_BERVAL, *PLDAP_BERVAL, BERVAL, *PBERVAL;
+#include <poppack.h>
+
+typedef ULONG ber_tag_t;
+typedef INT ber_int_t;
+typedef UINT ber_uint_t;
+typedef INT ber_slen_t;
+
+#define LBER_ERROR ((ber_tag_t)-1)
+#define LBER_DEFAULT ((ber_tag_t)-1)
+#define LBER_USE_DER 0x01
+
+WINBERAPI BerElement *ber_init(const BerValue*);
+WINBERAPI int ber_printf(BerElement*,const char*,...);
+WINBERAPI int ber_flatten(BerElement*,BerValue**);
+WINBERAPI ber_tag_t ber_scanf(BerElement*,const char*,...);
+WINBERAPI ber_tag_t ber_peek_tag(BerElement*,ber_len_t*);
+WINBERAPI ber_tag_t ber_skip_tag(BerElement*,ber_len_t*);
+WINBERAPI ber_tag_t ber_first_element(BerElement*,ber_len_t*,char**);
+WINBERAPI ber_tag_t ber_next_element(BerElement*,ber_len_t*,char*);
+WINBERAPI void ber_bvfree(BerValue*);
+WINBERAPI void ber_bvecfree(BerValue**);
+WINBERAPI void ber_free(BerElement*,int);
+WINBERAPI BerValue *ber_bvdup(BerValue*);
+WINBERAPI BerElement *ber_alloc_t(int);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* _WINBER_H */
diff --git a/tcc/include/winapi/wincon.h b/tcc/include/winapi/wincon.h
new file mode 100644
index 0000000..43a7b5a
--- /dev/null
+++ b/tcc/include/winapi/wincon.h
@@ -0,0 +1,232 @@
+#ifndef _WINCON_H
+#define _WINCON_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define FOREGROUND_BLUE 1
+#define FOREGROUND_GREEN 2
+#define FOREGROUND_RED 4
+#define FOREGROUND_INTENSITY 8
+#define BACKGROUND_BLUE 16
+#define BACKGROUND_GREEN 32
+#define BACKGROUND_RED 64
+#define BACKGROUND_INTENSITY 128
+#if (_WIN32_WINNT >= 0x0501)
+#define CONSOLE_FULLSCREEN_MODE 1
+#define CONSOLE_WINDOWED_MODE 2
+#endif
+#define CTRL_C_EVENT 0
+#define CTRL_BREAK_EVENT 1
+#define CTRL_CLOSE_EVENT 2
+#define CTRL_LOGOFF_EVENT 5
+#define CTRL_SHUTDOWN_EVENT 6
+#define ENABLE_LINE_INPUT 2
+#define ENABLE_ECHO_INPUT 4
+#define ENABLE_PROCESSED_INPUT 1
+#define ENABLE_WINDOW_INPUT 8
+#define ENABLE_MOUSE_INPUT 16
+#define ENABLE_INSERT_MODE 32
+#define ENABLE_QUICK_EDIT_MODE 64
+#define ENABLE_EXTENDED_FLAGS 128
+#define ENABLE_AUTO_POSITION 256
+#define ENABLE_PROCESSED_OUTPUT 1
+#define ENABLE_WRAP_AT_EOL_OUTPUT 2
+#define KEY_EVENT 1
+#define MOUSE_EVENT 2
+#define WINDOW_BUFFER_SIZE_EVENT 4
+#define MENU_EVENT 8
+#define FOCUS_EVENT 16
+#define CAPSLOCK_ON 128
+#define ENHANCED_KEY 256
+#define RIGHT_ALT_PRESSED 1
+#define LEFT_ALT_PRESSED 2
+#define RIGHT_CTRL_PRESSED 4
+#define LEFT_CTRL_PRESSED 8
+#define SHIFT_PRESSED 16
+#define NUMLOCK_ON 32
+#define SCROLLLOCK_ON 64
+#define FROM_LEFT_1ST_BUTTON_PRESSED 1
+#define RIGHTMOST_BUTTON_PRESSED 2
+#define FROM_LEFT_2ND_BUTTON_PRESSED 4
+#define FROM_LEFT_3RD_BUTTON_PRESSED 8
+#define FROM_LEFT_4TH_BUTTON_PRESSED 16
+#define MOUSE_MOVED 1
+#define DOUBLE_CLICK 2
+#define MOUSE_WHEELED 4
+
+typedef struct _CHAR_INFO {
+ union {
+ WCHAR UnicodeChar;
+ CHAR AsciiChar;
+ } Char;
+ WORD Attributes;
+} CHAR_INFO, *PCHAR_INFO;
+typedef struct _SMALL_RECT {
+ SHORT Left;
+ SHORT Top;
+ SHORT Right;
+ SHORT Bottom;
+} SMALL_RECT, *PSMALL_RECT;
+typedef struct _CONSOLE_CURSOR_INFO {
+ DWORD dwSize;
+ BOOL bVisible;
+} CONSOLE_CURSOR_INFO,*PCONSOLE_CURSOR_INFO;
+typedef struct _COORD {
+ SHORT X;
+ SHORT Y;
+} COORD, *PCOORD;
+typedef struct _CONSOLE_FONT_INFO {
+ DWORD nFont;
+ COORD dwFontSize;
+} CONSOLE_FONT_INFO, *PCONSOLE_FONT_INFO;
+typedef struct _CONSOLE_SCREEN_BUFFER_INFO {
+ COORD dwSize;
+ COORD dwCursorPosition;
+ WORD wAttributes;
+ SMALL_RECT srWindow;
+ COORD dwMaximumWindowSize;
+} CONSOLE_SCREEN_BUFFER_INFO,*PCONSOLE_SCREEN_BUFFER_INFO;
+typedef BOOL(CALLBACK *PHANDLER_ROUTINE)(DWORD);
+typedef struct _KEY_EVENT_RECORD {
+ BOOL bKeyDown;
+ WORD wRepeatCount;
+ WORD wVirtualKeyCode;
+ WORD wVirtualScanCode;
+ union {
+ WCHAR UnicodeChar;
+ CHAR AsciiChar;
+ } uChar;
+ DWORD dwControlKeyState;
+}
+#ifdef __GNUC__
+/* gcc's alignment is not what win32 expects */
+ PACKED
+#endif
+KEY_EVENT_RECORD;
+
+typedef struct _MOUSE_EVENT_RECORD {
+ COORD dwMousePosition;
+ DWORD dwButtonState;
+ DWORD dwControlKeyState;
+ DWORD dwEventFlags;
+} MOUSE_EVENT_RECORD;
+typedef struct _WINDOW_BUFFER_SIZE_RECORD { COORD dwSize; } WINDOW_BUFFER_SIZE_RECORD;
+typedef struct _MENU_EVENT_RECORD { UINT dwCommandId; } MENU_EVENT_RECORD,*PMENU_EVENT_RECORD;
+typedef struct _FOCUS_EVENT_RECORD { BOOL bSetFocus; } FOCUS_EVENT_RECORD;
+typedef struct _INPUT_RECORD {
+ WORD EventType;
+ union {
+ KEY_EVENT_RECORD KeyEvent;
+ MOUSE_EVENT_RECORD MouseEvent;
+ WINDOW_BUFFER_SIZE_RECORD WindowBufferSizeEvent;
+ MENU_EVENT_RECORD MenuEvent;
+ FOCUS_EVENT_RECORD FocusEvent;
+ } Event;
+} INPUT_RECORD,*PINPUT_RECORD;
+
+BOOL WINAPI AllocConsole(void);
+#if (_WIN32_WINNT >= 0x0501)
+#define ATTACH_PARENT_PROCESS ((DWORD)-1)
+BOOL WINAPI AttachConsole(DWORD);
+#endif
+HANDLE WINAPI CreateConsoleScreenBuffer(DWORD,DWORD,CONST SECURITY_ATTRIBUTES*,DWORD,LPVOID);
+BOOL WINAPI FillConsoleOutputAttribute(HANDLE,WORD,DWORD,COORD,PDWORD);
+BOOL WINAPI FillConsoleOutputCharacterA(HANDLE,CHAR,DWORD,COORD,PDWORD);
+BOOL WINAPI FillConsoleOutputCharacterW(HANDLE,WCHAR,DWORD,COORD,PDWORD);
+BOOL WINAPI FlushConsoleInputBuffer(HANDLE);
+BOOL WINAPI FreeConsole(void);
+BOOL WINAPI GenerateConsoleCtrlEvent(DWORD,DWORD);
+UINT WINAPI GetConsoleCP(void);
+BOOL WINAPI GetConsoleCursorInfo(HANDLE,PCONSOLE_CURSOR_INFO);
+BOOL WINAPI GetConsoleMode(HANDLE,PDWORD);
+UINT WINAPI GetConsoleOutputCP(void);
+BOOL WINAPI GetConsoleScreenBufferInfo(HANDLE,PCONSOLE_SCREEN_BUFFER_INFO);
+DWORD WINAPI GetConsoleTitleA(LPSTR,DWORD);
+DWORD WINAPI GetConsoleTitleW(LPWSTR,DWORD);
+#if (_WIN32_WINNT >= 0x0500)
+BOOL WINAPI GetConsoleDisplayMode(LPDWORD);
+HWND WINAPI GetConsoleWindow(void);
+#endif
+#if (_WIN32_WINNT >= 0x0501)
+DWORD WINAPI GetConsoleProcessList(LPDWORD, DWORD);
+#endif
+COORD WINAPI GetLargestConsoleWindowSize(HANDLE);
+BOOL WINAPI GetNumberOfConsoleInputEvents(HANDLE,PDWORD);
+BOOL WINAPI GetNumberOfConsoleMouseButtons(PDWORD);
+BOOL WINAPI PeekConsoleInputA(HANDLE,PINPUT_RECORD,DWORD,PDWORD);
+BOOL WINAPI PeekConsoleInputW(HANDLE,PINPUT_RECORD,DWORD,PDWORD);
+BOOL WINAPI ReadConsoleA(HANDLE,PVOID,DWORD,PDWORD,PVOID);
+BOOL WINAPI ReadConsoleW(HANDLE,PVOID,DWORD,PDWORD,PVOID);
+BOOL WINAPI ReadConsoleInputA(HANDLE,PINPUT_RECORD,DWORD,PDWORD);
+BOOL WINAPI ReadConsoleInputW(HANDLE,PINPUT_RECORD,DWORD,PDWORD);
+BOOL WINAPI ReadConsoleOutputAttribute(HANDLE,LPWORD,DWORD,COORD,LPDWORD);
+BOOL WINAPI ReadConsoleOutputCharacterA(HANDLE,LPSTR,DWORD,COORD,PDWORD);
+BOOL WINAPI ReadConsoleOutputCharacterW(HANDLE,LPWSTR,DWORD,COORD,PDWORD);
+BOOL WINAPI ReadConsoleOutputA(HANDLE,PCHAR_INFO,COORD,COORD,PSMALL_RECT);
+BOOL WINAPI ReadConsoleOutputW(HANDLE,PCHAR_INFO,COORD,COORD,PSMALL_RECT);
+BOOL WINAPI ScrollConsoleScreenBufferA(HANDLE,const SMALL_RECT*,const SMALL_RECT*,COORD,const CHAR_INFO*);
+BOOL WINAPI ScrollConsoleScreenBufferW(HANDLE,const SMALL_RECT*,const SMALL_RECT*,COORD,const CHAR_INFO*);
+BOOL WINAPI SetConsoleActiveScreenBuffer(HANDLE);
+BOOL WINAPI SetConsoleCP(UINT);
+BOOL WINAPI SetConsoleCtrlHandler(PHANDLER_ROUTINE,BOOL);
+BOOL WINAPI SetConsoleCursorInfo(HANDLE,const CONSOLE_CURSOR_INFO*);
+BOOL WINAPI SetConsoleCursorPosition(HANDLE,COORD);
+#if (_WIN32_WINNT >= 0x0501)
+BOOL WINAPI SetConsoleDisplayMode(HANDLE,DWORD,PCOORD);
+#endif
+BOOL WINAPI SetConsoleMode(HANDLE,DWORD);
+BOOL WINAPI SetConsoleOutputCP(UINT);
+BOOL WINAPI SetConsoleScreenBufferSize(HANDLE,COORD);
+BOOL WINAPI SetConsoleTextAttribute(HANDLE,WORD);
+BOOL WINAPI SetConsoleTitleA(LPCSTR);
+BOOL WINAPI SetConsoleTitleW(LPCWSTR);
+BOOL WINAPI SetConsoleWindowInfo(HANDLE,BOOL,const SMALL_RECT*);
+BOOL WINAPI WriteConsoleA(HANDLE,PCVOID,DWORD,PDWORD,PVOID);
+BOOL WINAPI WriteConsoleW(HANDLE,PCVOID,DWORD,PDWORD,PVOID);
+BOOL WINAPI WriteConsoleInputA(HANDLE,const INPUT_RECORD*,DWORD,PDWORD);
+BOOL WINAPI WriteConsoleInputW(HANDLE,const INPUT_RECORD*,DWORD,PDWORD);
+BOOL WINAPI WriteConsoleOutputA(HANDLE,const CHAR_INFO*,COORD,COORD,PSMALL_RECT);
+BOOL WINAPI WriteConsoleOutputW(HANDLE,const CHAR_INFO*,COORD,COORD,PSMALL_RECT);
+BOOL WINAPI WriteConsoleOutputAttribute(HANDLE,const WORD*,DWORD,COORD,PDWORD);
+BOOL WINAPI WriteConsoleOutputCharacterA(HANDLE,LPCSTR,DWORD,COORD,PDWORD);
+BOOL WINAPI WriteConsoleOutputCharacterW(HANDLE,LPCWSTR,DWORD,COORD,PDWORD);
+
+#ifdef UNICODE
+#define FillConsoleOutputCharacter FillConsoleOutputCharacterW
+#define GetConsoleTitle GetConsoleTitleW
+#define PeekConsoleInput PeekConsoleInputW
+#define ReadConsole ReadConsoleW
+#define ReadConsoleInput ReadConsoleInputW
+#define ReadConsoleOutput ReadConsoleOutputW
+#define ReadConsoleOutputCharacter ReadConsoleOutputCharacterW
+#define ScrollConsoleScreenBuffer ScrollConsoleScreenBufferW
+#define SetConsoleTitle SetConsoleTitleW
+#define WriteConsole WriteConsoleW
+#define WriteConsoleInput WriteConsoleInputW
+#define WriteConsoleOutput WriteConsoleOutputW
+#define WriteConsoleOutputCharacter WriteConsoleOutputCharacterW
+#else
+#define FillConsoleOutputCharacter FillConsoleOutputCharacterA
+#define GetConsoleTitle GetConsoleTitleA
+#define PeekConsoleInput PeekConsoleInputA
+#define ReadConsole ReadConsoleA
+#define ReadConsoleInput ReadConsoleInputA
+#define ReadConsoleOutput ReadConsoleOutputA
+#define ReadConsoleOutputCharacter ReadConsoleOutputCharacterA
+#define ScrollConsoleScreenBuffer ScrollConsoleScreenBufferA
+#define SetConsoleTitle SetConsoleTitleA
+#define WriteConsole WriteConsoleA
+#define WriteConsoleInput WriteConsoleInputA
+#define WriteConsoleOutput WriteConsoleOutputA
+#define WriteConsoleOutputCharacter WriteConsoleOutputCharacterA
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/wincrypt.h b/tcc/include/winapi/wincrypt.h
new file mode 100644
index 0000000..a89706b
--- /dev/null
+++ b/tcc/include/winapi/wincrypt.h
@@ -0,0 +1,1318 @@
+#ifndef _WINCRYPT_H
+#define _WINCRYPT_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifndef WINADVAPI
+#define WINADVAPI
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#define MS_DEF_PROV_A "Microsoft Base Cryptographic Provider v1.0"
+#define MS_DEF_PROV_W L"Microsoft Base Cryptographic Provider v1.0"
+#define MS_ENHANCED_PROV_A "Microsoft Enhanced Cryptographic Provider v1.0"
+#define MS_ENHANCED_PROV_W L"Microsoft Enhanced Cryptographic Provider v1.0"
+#define MS_STRONG_PROV_A "Microsoft Strong Cryptographic Provider"
+#define MS_STRONG_PROV_W L"Microsoft Strong Cryptographic Provider"
+#define MS_DEF_RSA_SIG_PROV_A "Microsoft RSA Signature Cryptographic Provider"
+#define MS_DEF_RSA_SIG_PROV_W L"Microsoft RSA Signature Cryptographic Provider"
+#define MS_DEF_RSA_SCHANNEL_PROV_A "Microsoft RSA SChannel Cryptographic Provider"
+#define MS_DEF_RSA_SCHANNEL_PROV_W L"Microsoft RSA SChannel Cryptographic Provider"
+#define MS_DEF_DSS_PROV_A "Microsoft Base DSS Cryptographic Provider"
+#define MS_DEF_DSS_PROV_W L"Microsoft Base DSS Cryptographic Provider"
+#define MS_DEF_DSS_DH_PROV_A "Microsoft Base DSS and Diffie-Hellman Cryptographic Provider"
+#define MS_DEF_DSS_DH_PROV_W L"Microsoft Base DSS and Diffie-Hellman Cryptographic Provider"
+#define MS_ENH_DSS_DH_PROV_A "Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider"
+#define MS_ENH_DSS_DH_PROV_W L"Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider"
+#define MS_DEF_DH_SCHANNEL_PROV_A "Microsoft DH SChannel Cryptographic Provider"
+#define MS_DEF_DH_SCHANNEL_PROV_W L"Microsoft DH SChannel Cryptographic Provider"
+#define MS_SCARD_PROV_A "Microsoft Base Smart Card Crypto Provider"
+#define MS_SCARD_PROV_W L"Microsoft Base Smart Card Crypto Provider"
+#if (_WIN32_WINNT == 0x0501)
+#define MS_ENH_RSA_AES_PROV_A "Microsoft Enhanced RSA and AES Cryptographic Provider (Prototype)"
+#define MS_ENH_RSA_AES_PROV_W L"Microsoft Enhanced RSA and AES Cryptographic Provider (Prototype)"
+#elif (_WIN32_WINNT > 0x0501)
+#define MS_ENH_RSA_AES_PROV_A "Microsoft Enhanced RSA and AES Cryptographic Provider"
+#define MS_ENH_RSA_AES_PROV_W L"Microsoft Enhanced RSA and AES Cryptographic Provider"
+#endif
+
+#define GET_ALG_CLASS(x) (x&57344)
+#define GET_ALG_TYPE(x) (x&7680)
+#define GET_ALG_SID(x) (x&511)
+#define ALG_CLASS_ANY 0
+#define ALG_CLASS_SIGNATURE 8192
+#define ALG_CLASS_MSG_ENCRYPT 16384
+#define ALG_CLASS_DATA_ENCRYPT 24576
+#define ALG_CLASS_HASH 32768
+#define ALG_CLASS_KEY_EXCHANGE 40960
+#define ALG_CLASS_ALL 57344 /* (7 << 13) */
+#define ALG_TYPE_ANY 0
+#define ALG_TYPE_DSS 512
+#define ALG_TYPE_RSA 1024
+#define ALG_TYPE_BLOCK 1536
+#define ALG_TYPE_STREAM 2048
+#define ALG_TYPE_DH 2560 /* (5 << 9) */
+#define ALG_TYPE_SECURECHANNEL 3072 /* (6 << 9) */
+#define ALG_SID_ANY 0
+#define ALG_SID_RSA_ANY 0
+#define ALG_SID_RSA_PKCS 1
+#define ALG_SID_RSA_MSATWORK 2
+#define ALG_SID_RSA_ENTRUST 3
+#define ALG_SID_RSA_PGP 4
+#define ALG_SID_DSS_ANY 0
+#define ALG_SID_DSS_PKCS 1
+#define ALG_SID_DSS_DMS 2
+#define ALG_SID_DES 1
+#define ALG_SID_3DES 3
+#define ALG_SID_DESX 4
+#define ALG_SID_IDEA 5
+#define ALG_SID_CAST 6
+#define ALG_SID_SAFERSK64 7
+#define ALG_SID_SAFERSK128 8
+#define ALG_SID_3DES_112 9
+#define ALG_SID_SKIPJACK 10
+#define ALG_SID_TEK 11
+#define ALG_SID_CYLINK_MEK 12
+#define ALG_SID_RC5 13
+#define ALG_SID_RC2 2
+#define ALG_SID_RC4 1
+#define ALG_SID_SEAL 2
+#define ALG_SID_MD2 1
+#define ALG_SID_MD4 2
+#define ALG_SID_MD5 3
+#define ALG_SID_SHA 4
+#define ALG_SID_MAC 5
+#define ALG_SID_RIPEMD 6
+#define ALG_SID_RIPEMD160 7
+#define ALG_SID_SSL3SHAMD5 8
+#define ALG_SID_HMAC 9
+#define ALG_SID_TLS1PRF 10
+#define ALG_SID_AES_128 14
+#define ALG_SID_AES_192 15
+#define ALG_SID_AES_256 16
+#define ALG_SID_AES 17
+#define ALG_SID_EXAMPLE 80
+
+#define CALG_MD2 (ALG_CLASS_HASH|ALG_TYPE_ANY|ALG_SID_MD2)
+#define CALG_MD4 (ALG_CLASS_HASH|ALG_TYPE_ANY|ALG_SID_MD4)
+#define CALG_MD5 (ALG_CLASS_HASH|ALG_TYPE_ANY|ALG_SID_MD5)
+#define CALG_SHA (ALG_CLASS_HASH|ALG_TYPE_ANY|ALG_SID_SHA)
+#define CALG_SHA1 CALG_SHA
+#define CALG_MAC (ALG_CLASS_HASH|ALG_TYPE_ANY|ALG_SID_MAC)
+#define CALG_3DES (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|3)
+#define CALG_CYLINK_MEK (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|12)
+#define CALG_SKIPJACK (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|10)
+#define CALG_KEA_KEYX (ALG_CLASS_KEY_EXCHANGE|ALG_TYPE_STREAM|ALG_TYPE_DSS|4)
+#define CALG_RSA_SIGN (ALG_CLASS_SIGNATURE|ALG_TYPE_RSA|ALG_SID_RSA_ANY)
+#define CALG_DSS_SIGN (ALG_CLASS_SIGNATURE|ALG_TYPE_DSS|ALG_SID_DSS_ANY)
+#define CALG_RSA_KEYX (ALG_CLASS_KEY_EXCHANGE|ALG_TYPE_RSA|ALG_SID_RSA_ANY)
+#define CALG_DES (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_DES)
+#define CALG_RC2 (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_RC2)
+#define CALG_RC4 (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_STREAM|ALG_SID_RC4)
+#define CALG_SEAL (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_STREAM|ALG_SID_SEAL)
+#define CALG_DH_EPHEM (ALG_CLASS_KEY_EXCHANGE|ALG_TYPE_STREAM|ALG_TYPE_DSS|ALG_SID_DSS_DMS)
+#define CALG_DESX (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_DESX)
+#define CALG_TLS1PRF (ALG_CLASS_DHASH|ALG_TYPE_ANY|ALG_SID_TLS1PRF)
+#define CALG_AES_128 (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_AES_128)
+#define CALG_AES_192 (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_AES_192)
+#define CALG_AES_256 (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_AES_256)
+#define CALG_AES (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_AES)
+
+#define CRYPT_VERIFYCONTEXT 0xF0000000
+#define CRYPT_NEWKEYSET 8
+#define CRYPT_DELETEKEYSET 16
+#define CRYPT_MACHINE_KEYSET 32
+#define CRYPT_SILENT 64
+#define CRYPT_EXPORTABLE 1
+#define CRYPT_USER_PROTECTED 2
+#define CRYPT_CREATE_SALT 4
+#define CRYPT_UPDATE_KEY 8
+#define SIMPLEBLOB 1
+#define PUBLICKEYBLOB 6
+#define PRIVATEKEYBLOB 7
+#define PLAINTEXTKEYBLOB 8
+#define OPAQUEKEYBLOB 9
+#define PUBLICKEYBLOBEX 10
+#define SYMMETRICWRAPKEYBLOB 11
+#define AT_KEYEXCHANGE 1
+#define AT_SIGNATURE 2
+#define CRYPT_USERDATA 1
+#define PKCS5_PADDING 1
+#define CRYPT_MODE_CBC 1
+#define CRYPT_MODE_ECB 2
+#define CRYPT_MODE_OFB 3
+#define CRYPT_MODE_CFB 4
+#define CRYPT_MODE_CTS 5
+#define CRYPT_MODE_CBCI 6
+#define CRYPT_MODE_CFBP 7
+#define CRYPT_MODE_OFBP 8
+#define CRYPT_MODE_CBCOFM 9
+#define CRYPT_MODE_CBCOFMI 10
+#define CRYPT_ENCRYPT 1
+#define CRYPT_DECRYPT 2
+#define CRYPT_EXPORT 4
+#define CRYPT_READ 8
+#define CRYPT_WRITE 16
+#define CRYPT_MAC 32
+#define HP_ALGID 1
+#define HP_HASHVAL 2
+#define HP_HASHSIZE 4
+#define HP_HMAC_INFO 5
+#define CRYPT_FAILED FALSE
+#define CRYPT_SUCCEED TRUE
+#define RCRYPT_SUCCEEDED(r) ((r)==CRYPT_SUCCEED)
+#define RCRYPT_FAILED(r) ((r)==CRYPT_FAILED)
+#define PP_ENUMALGS 1
+#define PP_ENUMCONTAINERS 2
+#define PP_IMPTYPE 3
+#define PP_NAME 4
+#define PP_VERSION 5
+#define PP_CONTAINER 6
+#define PP_CHANGE_PASSWORD 7
+#define PP_KEYSET_SEC_DESCR 8
+#define PP_CERTCHAIN 9
+#define PP_KEY_TYPE_SUBTYPE 10
+#define PP_PROVTYPE 16
+#define PP_KEYSTORAGE 17
+#define PP_APPLI_CERT 18
+#define PP_SYM_KEYSIZE 19
+#define PP_SESSION_KEYSIZE 20
+#define PP_UI_PROMPT 21
+#define PP_ENUMALGS_EX 22
+#define PP_ENUMMANDROOTS 25
+#define PP_ENUMELECTROOTS 26
+#define PP_KEYSET_TYPE 27
+#define PP_ADMIN_PIN 31
+#define PP_KEYEXCHANGE_PIN 32
+#define PP_SIGNATURE_PIN 33
+#define PP_SIG_KEYSIZE_INC 34
+#define PP_KEYX_KEYSIZE_INC 35
+#define PP_UNIQUE_CONTAINER 36
+#define PP_SGC_INFO 37
+#define PP_USE_HARDWARE_RNG 38
+#define PP_KEYSPEC 39
+#define PP_ENUMEX_SIGNING_PROT 40
+#define CRYPT_FIRST 1
+#define CRYPT_NEXT 2
+#define CRYPT_IMPL_HARDWARE 1
+#define CRYPT_IMPL_SOFTWARE 2
+#define CRYPT_IMPL_MIXED 3
+#define CRYPT_IMPL_UNKNOWN 4
+#define PROV_RSA_FULL 1
+#define PROV_RSA_SIG 2
+#define PROV_DSS 3
+#define PROV_FORTEZZA 4
+#define PROV_MS_EXCHANGE 5
+#define PROV_MS_MAIL 5
+#define PROV_SSL 6
+#define PROV_STT_MER 7
+#define PROV_STT_ACQ 8
+#define PROV_STT_BRND 9
+#define PROV_STT_ROOT 10
+#define PROV_STT_ISS 11
+#define PROV_RSA_SCHANNEL 12
+#define PROV_DSS_DH 13
+#define PROV_EC_ECDSA_SIG 14
+#define PROV_EC_ECNRA_SIG 15
+#define PROV_EC_ECDSA_FULL 16
+#define PROV_EC_ECNRA_FULL 17
+#define PROV_DH_SCHANNEL 18
+#define PROV_SPYRUS_LYNKS 20
+#define PROV_RNG 21
+#define PROV_INTEL_SEC 22
+#define PROV_RSA_AES 24
+#define MAXUIDLEN 64
+#define CUR_BLOB_VERSION 2
+#define X509_ASN_ENCODING 1
+#define PKCS_7_ASN_ENCODING 65536
+#define CERT_V1 0
+#define CERT_V2 1
+#define CERT_V3 2
+#define CERT_E_CHAINING (-2146762486)
+#define CERT_E_CN_NO_MATCH (-2146762481)
+#define CERT_E_EXPIRED (-2146762495)
+#define CERT_E_PURPOSE (-2146762490)
+#define CERT_E_REVOCATION_FAILURE (-2146762482)
+#define CERT_E_REVOKED (-2146762484)
+#define CERT_E_ROLE (-2146762493)
+#define CERT_E_UNTRUSTEDROOT (-2146762487)
+#define CERT_E_UNTRUSTEDTESTROOT (-2146762483)
+#define CERT_E_VALIDITYPERIODNESTING (-2146762494)
+#define CERT_E_WRONG_USAGE (-2146762480)
+#define CERT_E_PATHLENCONST (-2146762492)
+#define CERT_E_CRITICAL (-2146762491)
+#define CERT_E_ISSUERCHAINING (-2146762489)
+#define CERT_E_MALFORMED (-2146762488)
+#define CRYPT_E_REVOCATION_OFFLINE (-2146885613)
+#define CRYPT_E_REVOKED (-2146885616)
+#define TRUST_E_BASIC_CONSTRAINTS (-2146869223)
+#define TRUST_E_CERT_SIGNATURE (-2146869244)
+#define TRUST_E_FAIL (-2146762485)
+#define CERT_TRUST_NO_ERROR 0
+#define CERT_TRUST_IS_NOT_TIME_VALID 1
+#define CERT_TRUST_IS_NOT_TIME_NESTED 2
+#define CERT_TRUST_IS_REVOKED 4
+#define CERT_TRUST_IS_NOT_SIGNATURE_VALID 8
+#define CERT_TRUST_IS_NOT_VALID_FOR_USAGE 16
+#define CERT_TRUST_IS_UNTRUSTED_ROOT 32
+#define CERT_TRUST_REVOCATION_STATUS_UNKNOWN 64
+#define CERT_TRUST_IS_CYCLIC 128
+#define CERT_TRUST_IS_PARTIAL_CHAIN 65536
+#define CERT_TRUST_CTL_IS_NOT_TIME_VALID 131072
+#define CERT_TRUST_CTL_IS_NOT_SIGNATURE_VALID 262144
+#define CERT_TRUST_CTL_IS_NOT_VALID_FOR_USAGE 524288
+#define CERT_TRUST_HAS_EXACT_MATCH_ISSUER 1
+#define CERT_TRUST_HAS_KEY_MATCH_ISSUER 2
+#define CERT_TRUST_HAS_NAME_MATCH_ISSUER 4
+#define CERT_TRUST_IS_SELF_SIGNED 8
+#define CERT_TRUST_IS_COMPLEX_CHAIN 65536
+#define CERT_CHAIN_POLICY_BASE ((LPCSTR) 1)
+#define CERT_CHAIN_POLICY_AUTHENTICODE ((LPCSTR) 2)
+#define CERT_CHAIN_POLICY_AUTHENTICODE_TS ((LPCSTR) 3)
+#define CERT_CHAIN_POLICY_SSL ((LPCSTR) 4)
+#define CERT_CHAIN_POLICY_BASIC_CONSTRAINTS ((LPCSTR) 5)
+#define CERT_CHAIN_POLICY_NT_AUTH ((LPCSTR) 6)
+#define USAGE_MATCH_TYPE_AND 0
+#define USAGE_MATCH_TYPE_OR 1
+#define CERT_SIMPLE_NAME_STR 1
+#define CERT_OID_NAME_STR 2
+#define CERT_X500_NAME_STR 3
+#define CERT_NAME_STR_COMMA_FLAG 0x04000000
+#define CERT_NAME_STR_SEMICOLON_FLAG 1073741824
+#define CERT_NAME_STR_CRLF_FLAG 134217728
+#define CERT_NAME_STR_NO_PLUS_FLAG 536870912
+#define CERT_NAME_STR_NO_QUOTING_FLAG 268435456
+#define CERT_NAME_STR_DISABLE_IE4_UTF8_FLAG 0x00010000
+#define CERT_NAME_STR_ENABLE_UTF8_UNICODE_FLAG 0x00040000
+#define CERT_NAME_STR_REVERSE_FLAG 33554432
+#define CERT_NAME_STR_ENABLE_T61_UNICODE_FLAG 131072
+#define CERT_FIND_ANY 0
+#define CERT_FIND_CERT_ID 1048576
+#define CERT_FIND_CTL_USAGE 655360
+#define CERT_FIND_ENHKEY_USAGE 655360
+#define CERT_FIND_EXISTING 851968
+#define CERT_FIND_HASH 65536
+#define CERT_FIND_ISSUER_ATTR 196612
+#define CERT_FIND_ISSUER_NAME 131076
+#define CERT_FIND_ISSUER_OF 786432
+#define CERT_FIND_KEY_IDENTIFIER 983040
+#define CERT_FIND_KEY_SPEC 589824
+#define CERT_FIND_MD5_HASH 262144
+#define CERT_FIND_PROPERTY 327680
+#define CERT_FIND_PUBLIC_KEY 393216
+#define CERT_FIND_SHA1_HASH 65536
+#define CERT_FIND_SIGNATURE_HASH 917504
+#define CERT_FIND_SUBJECT_ATTR 196615
+#define CERT_FIND_SUBJECT_CERT 720896
+#define CERT_FIND_SUBJECT_NAME 131079
+#define CERT_FIND_SUBJECT_STR_A 458759
+#define CERT_FIND_SUBJECT_STR_W 524295
+#define CERT_FIND_ISSUER_STR_A 458756
+#define CERT_FIND_ISSUER_STR_W 524292
+#define CERT_FIND_OR_ENHKEY_USAGE_FLAG 16
+#define CERT_FIND_OPTIONAL_ENHKEY_USAGE_FLAG 1
+#define CERT_FIND_NO_ENHKEY_USAGE_FLAG 8
+#define CERT_FIND_VALID_ENHKEY_USAGE_FLAG 32
+#define CERT_FIND_EXT_ONLY_ENHKEY_USAGE_FLAG 2
+#define CERT_CASE_INSENSITIVE_IS_RDN_ATTRS_FLAG 2
+#define CERT_UNICODE_IS_RDN_ATTRS_FLAG 1
+#define CERT_CHAIN_FIND_BY_ISSUER 1
+#define CERT_CHAIN_FIND_BY_ISSUER_COMPARE_KEY_FLAG 1
+#define CERT_CHAIN_FIND_BY_ISSUER_COMPLEX_CHAIN_FLAG 2
+#define CERT_CHAIN_FIND_BY_ISSUER_CACHE_ONLY_FLAG 32768
+#define CERT_CHAIN_FIND_BY_ISSUER_CACHE_ONLY_URL_FLAG 4
+#define CERT_CHAIN_FIND_BY_ISSUER_LOCAL_MACHINE_FLAG 8
+#define CERT_CHAIN_FIND_BY_ISSUER_NO_KEY_FLAG 16384
+#define CERT_STORE_PROV_SYSTEM 10
+#define CERT_SYSTEM_STORE_LOCAL_MACHINE 131072
+#define szOID_PKIX_KP_SERVER_AUTH "4235600"
+#define szOID_SERVER_GATED_CRYPTO "4235658"
+#define szOID_SGC_NETSCAPE "2.16.840.1.113730.4.1"
+#define szOID_PKIX_KP_CLIENT_AUTH "1.3.6.1.5.5.7.3.2"
+#define CRYPT_NOHASHOID 0x00000001
+#define CRYPT_NO_SALT 0x10
+#define CRYPT_PREGEN 0x40
+#define CRYPT_RECIPIENT 0x10
+#define CRYPT_INITIATOR 0x40
+#define CRYPT_ONLINE 0x80
+#define CRYPT_SF 0x100
+#define CRYPT_CREATE_IV 0x200
+#define CRYPT_KEK 0x400
+#define CRYPT_DATA_KEY 0x800
+#define CRYPT_VOLATILE 0x1000
+#define CRYPT_SGCKEY 0x2000
+#define KP_IV 0x00000001
+#define KP_SALT 0x00000002
+#define KP_PADDING 0x00000003
+#define KP_MODE 0x00000004
+#define KP_MODE_BITS 0x00000005
+#define KP_PERMISSIONS 0x00000006
+#define KP_ALGID 0x00000007
+#define KP_BLOCKLEN 0x00000008
+#define KP_KEYLEN 0x00000009
+#define KP_SALT_EX 0x0000000a
+#define KP_P 0x0000000b
+#define KP_G 0x0000000c
+#define KP_Q 0x0000000d
+#define KP_X 0x0000000e
+#define KP_Y 0x0000000f
+#define KP_RA 0x00000010
+#define KP_RB 0x00000011
+#define KP_INFO 0x00000012
+#define KP_EFFECTIVE_KEYLEN 0x00000013
+#define KP_SCHANNEL_ALG 0x00000014
+#define KP_PUB_PARAMS 0x00000027
+#define CRYPT_FLAG_PCT1 0x0001
+#define CRYPT_FLAG_SSL2 0x0002
+#define CRYPT_FLAG_SSL3 0x0004
+#define CRYPT_FLAG_TLS1 0x0008
+#define CRYPT_FLAG_IPSEC 0x0010
+#define CRYPT_FLAG_SIGNING 0x0020
+#define SCHANNEL_MAC_KEY 0x00000000
+#define SCHANNEL_ENC_KEY 0x00000001
+#define INTERNATIONAL_USAGE 0x00000001
+#if (WINVER >= 0x0501) /* Windows Server 2003, Windows XP */
+#define CMC_ADD_ATTRIBUTES (LPCSTR) 63
+#define CMC_ADD_EXTENSIONS (LPCSTR) 62
+#define X509_CERT_PAIR (LPCSTR) 53
+#define X509_CERTIFICATE_TEMPLATE (LPCSTR) 64
+#define X509_CROSS_CERT_DIST_POINTS (LPCSTR) 58
+#define CMC_DATA (LPCSTR) 59
+#define X509_NAME_CONSTRAINTS (LPCSTR) 55
+#define X509_POLICY_CONSTRAINTS (LPCSTR) 57
+#define X509_POLICY_MAPPINGS (LPCSTR) 56
+#define CMC_RESPONSE (LPCSTR) 60
+#define CMC_STATUS (LPCSTR) 61
+#endif /* (WINVER >= 0x0501) */ /* Windows Server 2003, Windows XP */
+#define X509_ALGORITHM_IDENTIFIER (LPCSTR) 74
+#define X509_ALTERNATE_NAME (LPCSTR) 12
+/* need X509_ANY_STRING */
+#define PKCS_ATTRIBUTE (LPCSTR) 22
+#define X509_AUTHORITY_INFO_ACCESS (LPCSTR) 32
+#define X509_AUTHORITY_KEY_ID (LPCSTR) 9
+#define X509_AUTHORITY_KEY_ID2 (LPCSTR) 31
+#define szOID_BASIC_CONSTRAINTS "2.5.29.10"
+#define X509_BASIC_CONSTRAINTS2 (LPCSTR) 15
+#define X509_BIOMETRIC_EXT (LPCSTR) 71
+#define X509_BITS (LPCSTR) 26
+#define X509_CERT (LPCSTR) 1
+#define X509_CERT_CRL_TO_BE_SIGNED (LPCSTR) 3
+#define X509_CERT_POLICIES (LPCSTR) 16
+#define X509_CERT_REQUEST_TO_BE_SIGNED (LPCSTR) 4
+#define X509_CERT_TO_BE_SIGNED (LPCSTR) 2
+#define X509_CHOICE_OF_TIME (LPCSTR) 30
+#define PKCS_CONTENT_INFO (LPCSTR) 33
+#define PKCS_CONTENT_INFO_SEQUENCE_OF_ANY (LPCSTR) 23
+#define X509_CRL_DIST_POINTS (LPCSTR) 35
+/* need X509_CRL_REASON_CODE */
+#define RSA_CSP_PUBLICKEYBLOB (LPCSTR) 19
+#define PKCS_CTL (LPCSTR) 37
+#define X509_DSS_PARAMETERS (LPCSTR) 39
+/* need X509_DSS_PUBLICKEY */
+#define X509_DSS_SIGNATURE (LPCSTR) 40
+#define X509_ECC_SIGNATURE (LPCSTR) 47
+#define X509_ENHANCED_KEY_USAGE (LPCSTR) 36
+#define X509_ENUMERATED (LPCSTR) 29
+#define X509_EXTENSIONS (LPCSTR) 5
+#define X509_INTEGER (LPCSTR) 27
+#define X509_ISSUING_DIST_POINT (LPCSTR) 54
+#define X509_KEY_ATTRIBUTES (LPCSTR) 10
+#define X509_KEY_USAGE (LPCSTR) 14
+#define X509_KEY_USAGE_RESTRICTION (LPCSTR) 11
+#define X509_KEYGEN_REQUEST_TO_BE_SIGNED (LPCSTR) 21
+#define X509_LOGOTYPE_EXT (LPCSTR) 70
+#define X509_MULTI_BYTE_INTEGER (LPCSTR) 28
+#define X509_MULTI_BYTE_UINT (LPCSTR) 38
+#define X509_NAME (LPCSTR) 7
+#define X509_NAME_VALUE (LPCSTR) 6
+#define X509_OBJECT_IDENTIFIER (LPCSTR) 73
+#define X509_OCTET_STRING (LPCSTR) 25
+#define X509_PUBLIC_KEY_INFO (LPCSTR) 8
+#define PKCS_RC2_CBC_PARAMETERS (LPCSTR) 41
+#define CNG_RSA_PUBLIC_KEY_BLOB (LPCSTR) 72
+#define PKCS_RSA_SSA_PSS_PARAMETERS (LPCSTR) 75
+#define PKCS_RSAES_OAEP_PARAMETERS (LPCSTR) 76
+#define ECC_CMS_SHARED_INFO (LPCSTR) 77
+#define X509_SEQUENCE_OF_ANY (LPCSTR) 34
+#define PKCS7_SIGNER_INFO (LPCSTR) 500
+#define CMS_SIGNER_INFO (LPCSTR) 501
+#define PKCS_SMIME_CAPABILITIES (LPCSTR) 42
+#define PKCS_TIME_REQUEST (LPCSTR) 18
+/* need X509_UNICODE_ANY_STRING */
+#define X509_UNICODE_NAME (LPCSTR) 20
+#define X509_UNICODE_NAME_VALUE (LPCSTR) 24
+#define PKCS_UTC_TIME (LPCSTR) 17
+#define OCSP_SIGNED_REQUEST (LPCSTR) 65
+#define OCSP_REQUEST (LPCSTR) 66
+#define OCSP_RESPONSE (LPCSTR) 67
+#define OCSP_BASIC_SIGNED_RESPONSE (LPCSTR) 68
+#define OCSP_BASIC_RESPONSE (LPCSTR) 69
+enum { CRL_REASON_UNSPECIFIED=0,
+ CRL_REASON_KEY_COMPROMISE=1,
+ CRL_REASON_CA_COMPROMISE=2,
+ CRL_REASON_AFFILIATION_CHANGED=3,
+ CRL_REASON_SUPERSEDED=4,
+ CRL_REASON_CESSATION_OF_OPERATION=5,
+ CRL_REASON_CERTIFICATE_HOLD=6,
+ CRL_REASON_REMOVE_FROM_CRL=7
+ };
+/* need CRYPT_DECODE_NOCOPY_FLAG */
+#define CRYPT_ENCODE_ALLOC_FLAG 0x8000
+#define CRYPT_UNICODE_NAME_ENCODE_DISABLE_CHECK_TYPE_FLAG 0x40000000
+#define CRYPT_UNICODE_NAME_ENCODE_ENABLE_T61_UNICODE_FLAG 0x80000000
+#define CRYPT_UNICODE_NAME_ENCODE_ENABLE_UTF8_UNICODE_FLAG 0x20000000
+#define CRYPT_UNICODE_NAME_ENCODE_FORCE_UTF8_UNICODE_FLAG 0x10000000
+
+
+#define szOID_RSA "1.2.840.113549"
+#define szOID_PKCS "1.2.840.113549.1"
+#define szOID_RSA_HASH "1.2.840.113549.2"
+#define szOID_RSA_ENCRYPT "1.2.840.113549.3"
+#define szOID_PKCS_1 "1.2.840.113549.1.1"
+#define szOID_PKCS_2 "1.2.840.113549.1.2"
+#define szOID_PKCS_3 "1.2.840.113549.1.3"
+#define szOID_PKCS_4 "1.2.840.113549.1.4"
+#define szOID_PKCS_5 "1.2.840.113549.1.5"
+#define szOID_PKCS_6 "1.2.840.113549.1.6"
+#define szOID_PKCS_7 "1.2.840.113549.1.7"
+#define szOID_PKCS_8 "1.2.840.113549.1.8"
+#define szOID_PKCS_9 "1.2.840.113549.1.9"
+#define szOID_PKCS_10 "1.2.840.113549.1.10"
+#define szOID_PKCS_12 "1.2.840.113549.1.12"
+#define szOID_RSA_MD2 "1.2.840.113549.1.1.2"
+#define szOID_RSA_MD4 "1.2.840.113549.1.1.3"
+#define szOID_RSA_MD5 "1.2.840.113549.2.5"
+#define szOID_RSA_RSA "1.2.840.113549.1.1.1"
+#define szOID_RSA_MD2RSA "1.2.840.113549.1.1.2"
+#define szOID_RSA_MD4RSA "1.2.840.113549.1.1.3"
+#define szOID_RSA_MD5RSA "1.2.840.113549.1.1.4"
+#define szOID_RSA_SHA1RSA "1.2.840.113549.1.1.5"
+#define szOID_RSA_SETOAEP_RSA "1.2.840.113549.1.1.5"
+#define szOID_RSA_DH "1.2.840.113549.1.3.1"
+#define szOID_RSA_data "1.2.840.113549.1.7.1"
+#define szOID_RSA_signedData "1.2.840.113549.1.7.2"
+#define szOID_RSA_envelopedData "1.2.840.113549.1.7.3"
+#define szOID_RSA_signEnvData "1.2.840.113549.1.7.4"
+#define szOID_RSA_digestedData "1.2.840.113549.1.7.5"
+#define szOID_RSA_hashedData "1.2.840.113549.1.7.5"
+#define szOID_RSA_encryptedData "1.2.840.113549.1.7.6"
+#define szOID_RSA_emailAddr "1.2.840.113549.1.9.1"
+#define szOID_RSA_unstructName "1.2.840.113549.1.9.2"
+#define szOID_RSA_contentType "1.2.840.113549.1.9.3"
+#define szOID_RSA_messageDigest "1.2.840.113549.1.9.4"
+#define szOID_RSA_signingTime "1.2.840.113549.1.9.5"
+#define szOID_RSA_counterSign "1.2.840.113549.1.9.6"
+#define szOID_RSA_challengePwd "1.2.840.113549.1.9.7"
+#define szOID_RSA_unstructAddr "1.2.840.113549.1.9.8"
+#define szOID_RSA_extCertAttrs "1.2.840.113549.1.9.9"
+#define szOID_RSA_SMIMECapabilities "1.2.840.113549.1.9.15"
+#define szOID_RSA_preferSignedData "1.2.840.113549.1.9.15.1"
+#define szOID_RSA_RC2CBC "1.2.840.113549.3.2"
+#define szOID_RSA_RC4 "1.2.840.113549.3.4"
+#define szOID_RSA_DES_EDE3_CBC "1.2.840.113549.3.7"
+#define szOID_RSA_RC5_CBCPad "1.2.840.113549.3.9"
+#define szOID_ANSI_x942 "1.2.840.10046"
+#define szOID_ANSI_x942_DH "1.2.840.10046.2.1"
+#define szOID_X957 "1.2.840.10040"
+#define szOID_X957_DSA "1.2.840.10040.4.1"
+#define szOID_DATA STRUCTURE "1.2.840.10040.4.3"
+#define szOID_DS "2.5"
+#define szOID_DSALG "2.5.8"
+#define szOID_DSALG_CRPT "2.5.8.1"
+#define szOID_DSALG_HASH "2.5.8.2"
+#define szOID_DSALG_SIGN "2.5.8.3"
+#define szOID_DSALG_RSA "2.5.8.1.1"
+#define szOID_OIW "1.3.14"
+#define szOID_OIWSEC "1.3.14.3.2"
+#define szOID_OIWSEC_md4RSA "1.3.14.3.2.2"
+#define szOID_OIWSEC_md5RSA "1.3.14.3.2.3"
+#define szOID_OIWSEC_md4RSA2 "1.3.14.3.2.4"
+#define szOID_OIWSEC_desECB "1.3.14.3.2.6"
+#define szOID_OIWSEC_desCBC "1.3.14.3.2.7"
+#define szOID_OIWSEC_desOFB "1.3.14.3.2.8"
+#define szOID_OIWSEC_desCFB "1.3.14.3.2.9"
+#define szOID_OIWSEC_desMAC "1.3.14.3.2.10"
+#define szOID_OIWSEC_rsaSign "1.3.14.3.2.11"
+#define szOID_OIWSEC_dsa "1.3.14.3.2.12"
+#define szOID_OIWSEC_shaDSA "1.3.14.3.2.13"
+#define szOID_OIWSEC_mdc2RSA "1.3.14.3.2.14"
+#define szOID_OIWSEC_shaRSA "1.3.14.3.2.15"
+#define szOID_OIWSEC_dhCommMod "1.3.14.3.2.16"
+#define szOID_OIWSEC_desEDE "1.3.14.3.2.17"
+#define szOID_OIWSEC_sha "1.3.14.3.2.18"
+#define szOID_OIWSEC_mdc2 "1.3.14.3.2.19"
+#define szOID_OIWSEC_dsaComm "1.3.14.3.2.20"
+#define szOID_OIWSEC_dsaCommSHA "1.3.14.3.2.21"
+#define szOID_OIWSEC_rsaXchg "1.3.14.3.2.22"
+#define szOID_OIWSEC_keyHashSeal "1.3.14.3.2.23"
+#define szOID_OIWSEC_md2RSASign "1.3.14.3.2.24"
+#define szOID_OIWSEC_md5RSASign "1.3.14.3.2.25"
+#define szOID_OIWSEC_sha1 "1.3.14.3.2.26"
+#define szOID_OIWSEC_dsaSHA1 "1.3.14.3.2.27"
+#define szOID_OIWSEC_dsaCommSHA1 "1.3.14.3.2.28"
+#define szOID_OIWSEC_sha1RSASign "1.3.14.3.2.29"
+#define szOID_OIWDIR "1.3.14.7.2"
+#define szOID_OIWDIR_CRPT "1.3.14.7.2.1"
+#define szOID_OIWDIR_HASH "1.3.14.7.2.2"
+#define szOID_OIWDIR_SIGN "1.3.14.7.2.3"
+#define szOID_OIWDIR_md2 "1.3.14.7.2.2.1"
+#define szOID_OIWDIR_md2RSA "1.3.14.7.2.3.1"
+#define szOID_INFOSEC "2.16.840.1.101.2.1"
+#define szOID_INFOSEC_sdnsSignature "2.16.840.1.101.2.1.1.1"
+#define szOID_INFOSEC_mosaicSignature "2.16.840.1.101.2.1.1.2"
+#define szOID_INFOSEC_sdnsConfidentiality "2.16.840.1.101.2.1.1.3"
+#define szOID_INFOSEC_mosaicConfidentiality "2.16.840.1.101.2.1.1.4"
+#define szOID_INFOSEC_sdnsIntegrity "2.16.840.1.101.2.1.1.5"
+#define szOID_INFOSEC_mosaicIntegrity "2.16.840.1.101.2.1.1.6"
+#define szOID_INFOSEC_sdnsTokenProtection "2.16.840.1.101.2.1.1.7"
+#define szOID_INFOSEC_mosaicTokenProtection "2.16.840.1.101.2.1.1.8"
+#define szOID_INFOSEC_sdnsKeyManagement "2.16.840.1.101.2.1.1.9"
+#define szOID_INFOSEC_mosaicKeyManagement "2.16.840.1.101.2.1.1.10"
+#define szOID_INFOSEC_sdnsKMandSig "2.16.840.1.101.2.1.1.11"
+#define szOID_INFOSEC_mosaicKMandSig "2.16.840.1.101.2.1.1.12"
+#define szOID_INFOSEC_SuiteASignature "2.16.840.1.101.2.1.1.13"
+#define szOID_INFOSEC_SuiteAConfidentiality "2.16.840.1.101.2.1.1.14"
+#define szOID_INFOSEC_SuiteAIntegrity "2.16.840.1.101.2.1.1.15"
+#define szOID_INFOSEC_SuiteATokenProtection "2.16.840.1.101.2.1.1.16"
+#define szOID_INFOSEC_SuiteAKeyManagement "2.16.840.1.101.2.1.1.17"
+#define szOID_INFOSEC_SuiteAKMandSig "2.16.840.1.101.2.1.1.18"
+#define szOID_INFOSEC_mosaicUpdatedSig "2.16.840.1.101.2.1.1.19"
+#define szOID_INFOSEC_mosaicKMandUpdSig "2.16.840.1.101.2.1.1.20"
+#define szOID_INFOSEC_mosaicUpdatedInteg "2.16.840.1.101.2.1.1.21"
+#define szOID_PKIX_NO_SIGNATURE "1.3.6.1.5.5.7.6.2"
+
+#define szOID_COMMON_NAME "2.5.4.3"
+#define szOID_COUNTRY_NAME "2.5.4.6"
+#define szOID_DEVICE_SERIAL_NUMBER "2.5.4.5"
+#define szOID_DOMAIN_COMPONENT "0.9.2342.19200300.100.1.25"
+#define szOID_RSA_emailAddr "1.2.840.113549.1.9.1"
+#define szOID_GIVEN_NAME "2.5.4.42"
+#define szOID_INITIALS "2.5.4.43"
+#define szOID_LOCALITY_NAME "2.5.4.7"
+#define szOID_ORGANIZATION_NAME "2.5.4.10"
+#define szOID_ORGANIZATIONAL_UNIT_NAME "2.5.4.11"
+#define szOID_STATE_OR_PROVINCE_NAME "2.5.4.8"
+#define szOID_STREET_ADDRESS "2.5.4.9"
+#define szOID_SUR_NAME "2.5.4.4"
+#define szOID_TITLE "2.5.4.12"
+#define szOID_RSA_unstructAddr "1.2.840.113549.1.9.8"
+#define szOID_RSA_unstructName "1.2.840.113549.1.9.2"
+#define szOID_BASIC_CONSTRAINTS2 "2.5.29.19"
+#define szOID_APPLICATION_CERT_POLICIES "1.3.6.1.4.1.311.21.10"
+#define szOID_APPLICATION_POLICY_CONSTRAINTS "1.3.6.1.4.1.311.21.12"
+#define szOID_APPLICATION_POLICY_MAPPINGS "1.3.6.1.4.1.311.21.11"
+#define szOID_AUTHORITY_INFO_ACCESS "1.3.6.1.5.5.7.1.1"
+#define szOID_AUTHORITY_KEY_IDENTIFIER "2.5.29.1"
+#define szOID_AUTHORITY_KEY_IDENTIFIER2 "2.5.29.35"
+#define X509_BASIC_CONSTRAINTS (LPCSTR) 13
+#define szOID_BIOMETRIC_EXT "1.3.6.1.5.5.7.1.2"
+#define szOID_CERT_EXTENSIONS "1.3.6.1.4.1.311.2.1.14"
+#define szOID_CERT_POLICIES "2.5.29.32"
+#if (WINVER >= 0x0501) /* Windows Server 2003, Windows XP */
+#define szOID_CERTIFICATE_TEMPLATE "1.3.6.1.4.1.311.21.7"
+#define szOID_CRL_NUMBER "2.5.29.20"
+#define szOID_CROSS_CERT_DIST_POINTS "1.3.6.1.4.1.311.10.9.1"
+#define szOID_DELTA_CRL_INDICATOR "2.5.29.27"
+#define szOID_ENROLLMENT_NAME_VALUE_PAIR "1.3.6.1.4.1.311.13.2.1"
+#define szOID_FRESHEST_CRL "2.5.29.46"
+#define szOID_ISSUING_DIST_POINT "2.5.29.28"
+#define szOID_NAME_CONSTRAINTS "2.5.29.30"
+#endif /* (WINVER >= 0x0501) */ /* Windows Server 2003, Windows XP */
+#define szOID_CRL_DIST_POINTS 2.5.29.31
+#define szOID_CRL_REASON_CODE "2.5.29.21"
+#define szOID_CRL_VIRTUAL_BASE "1.3.6.1.4.1.311.21.3"
+#define szOID_ECC_PUBLIC_KEY "1.2.840.10045.2.1"
+#define szOID_ECDSA_SPECIFIED "1.2.840.10045.4.3"
+#define szOID_ENHANCED_KEY_USAGE "2.5.29.37"
+#define szOID_ISSUER_ALT_NAME "2.5.29.8"
+#define szOID_ISSUER_ALT_NAME2 "2.5.29.18"
+#define szOID_KEY_ATTRIBUTES "2.5.29.2"
+#define szOID_KEY_USAGE "2.5.29.4"
+#define szOID_KEY_USAGE_RESTRICTION "2.5.29.4"
+#define szOID_LOGOTYPE_EXT "1.3.6.1.5.5.7.1.12"
+/* need szOID_NEXT_UPDATE_LOCATION */
+#define szOID_POLICY_CONSTRAINTS "2.5.29.36"
+#define szOID_POLICY_MAPPINGS "2.5.29.33"
+#define szOID_RSA_SSA_PSS "1.2.840.113549.1.1.10"
+#define szOID_RSAES_OAEP "1.2.840.113549.1.1.7"
+#define szOID_SUBJECT_ALT_NAME "2.5.29.7"
+#define szOID_SUBJECT_ALT_NAME2 "2.5.29.17"
+#define szOID_SUBJECT_KEY_IDENTIFIER "2.5.29.14"
+
+typedef struct _CERT_BASIC_CONSTRAINTS2_INFO {
+ BOOL fCA;
+ BOOL fPathLenConstraint;
+ DWORD dwPathLenConstraint;
+} CERT_BASIC_CONSTRAINTS2_INFO,
+ *PCERT_BASIC_CONSTRAINTS2_INFO;
+
+typedef VOID (WINAPI *PFN_CRYPT_FREE)(LPVOID pv);
+typedef LPVOID (WINAPI *PFN_CRYPT_ALLOC)(size_t cbsize);
+typedef struct _CRYPT_ENCODE_PARA {
+ DWORD cbSize;
+ PFN_CRYPT_ALLOC pfnAlloc;
+ PFN_CRYPT_FREE pfnFree;
+} CRYPT_ENCODE_PARA,
+ *PCRYPT_ENCODE_PARA;
+
+/* Definition missing. */
+typedef struct _CRYPT_DECODE_PARA *PCRYPT_DECODE_PARA;
+
+typedef UINT ALG_ID;
+typedef struct _VTableProvStruc {FARPROC FuncVerifyImage;} VTableProvStruc,*PVTableProvStruc;
+typedef ULONG HCRYPTPROV;
+typedef ULONG HCRYPTKEY;
+typedef ULONG HCRYPTHASH;
+typedef PVOID HCERTSTORE;
+typedef PVOID HCRYPTMSG;
+typedef PVOID HCERTCHAINENGINE;
+typedef struct _CRYPTOAPI_BLOB {
+ DWORD cbData;
+ BYTE* pbData;
+} CRYPT_INTEGER_BLOB, *PCRYPT_INTEGER_BLOB,
+ CRYPT_UINT_BLOB, *PCRYPT_UINT_BLOB,
+ CRYPT_OBJID_BLOB, *PCRYPT_OBJID_BLOB,
+ CERT_NAME_BLOB, *PCERT_NAME_BLOB,
+ CERT_RDN_VALUE_BLOB,*PCERT_RDN_VALUE_BLOB,
+ CERT_BLOB, *PCERT_BLOB,
+ CRL_BLOB, *PCRL_BLOB,
+ DATA_BLOB, *PDATA_BLOB,
+ CRYPT_DATA_BLOB, *PCRYPT_DATA_BLOB,
+ CRYPT_HASH_BLOB, *PCRYPT_HASH_BLOB,
+ CRYPT_DIGEST_BLOB, *PCRYPT_DIGEST_BLOB,
+ CRYPT_DER_BLOB, *PCRYPT_DER_BLOB,
+ CRYPT_ATTR_BLOB, *PCRYPT_ATTR_BLOB;
+/* not described in SDK; has the same layout as HTTPSPolicyCallbackData */
+typedef struct _SSL_EXTRA_CERT_CHAIN_POLICY_PARA {
+ DWORD cbStruct;
+ DWORD dwAuthType;
+ DWORD fdwChecks;
+ LPWSTR pwszServerName;
+} SSL_EXTRA_CERT_CHAIN_POLICY_PARA, *PSSL_EXTRA_CERT_CHAIN_POLICY_PARA,
+ HTTPSPolicyCallbackData, *PHTTPSPolicyCallbackData;
+/* #if (_WIN32_WINNT>=0x500) */
+typedef struct _CERT_CHAIN_POLICY_PARA {
+ DWORD cbSize;
+ DWORD dwFlags;
+ void* pvExtraPolicyPara;
+} CERT_CHAIN_POLICY_PARA, *PCERT_CHAIN_POLICY_PARA;
+typedef struct _CERT_CHAIN_POLICY_STATUS {
+ DWORD cbSize;
+ DWORD dwError;
+ LONG lChainIndex;
+ LONG lElementIndex;
+ void* pvExtraPolicyStatus;
+} CERT_CHAIN_POLICY_STATUS, *PCERT_CHAIN_POLICY_STATUS;
+/* #endif */
+typedef struct _CRYPT_ALGORITHM_IDENTIFIER {
+ LPSTR pszObjId;
+ CRYPT_OBJID_BLOB Parameters;
+} CRYPT_ALGORITHM_IDENTIFIER, *PCRYPT_ALGORITHM_IDENTIFIER;
+typedef struct _CRYPT_BIT_BLOB {
+ DWORD cbData;
+ BYTE* pbData;
+ DWORD cUnusedBits;
+} CRYPT_BIT_BLOB, *PCRYPT_BIT_BLOB;
+typedef struct _CERT_PUBLIC_KEY_INFO {
+ CRYPT_ALGORITHM_IDENTIFIER Algorithm;
+ CRYPT_BIT_BLOB PublicKey;
+} CERT_PUBLIC_KEY_INFO, *PCERT_PUBLIC_KEY_INFO;
+typedef struct _CERT_EXTENSION {
+ LPSTR pszObjId;
+ BOOL fCritical;
+ CRYPT_OBJID_BLOB Value;
+} CERT_EXTENSION, *PCERT_EXTENSION;
+typedef struct _CERT_INFO {
+ DWORD dwVersion;
+ CRYPT_INTEGER_BLOB SerialNumber;
+ CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm;
+ CERT_NAME_BLOB Issuer;
+ FILETIME NotBefore;
+ FILETIME NotAfter;
+ CERT_NAME_BLOB Subject;
+ CERT_PUBLIC_KEY_INFO SubjectPublicKeyInfo;
+ CRYPT_BIT_BLOB IssuerUniqueId;
+ CRYPT_BIT_BLOB SubjectUniqueId;
+ DWORD cExtension;
+ PCERT_EXTENSION rgExtension;
+} CERT_INFO, *PCERT_INFO;
+typedef struct _CERT_CONTEXT {
+ DWORD dwCertEncodingType;
+ BYTE* pbCertEncoded;
+ DWORD cbCertEncoded;
+ PCERT_INFO pCertInfo;
+ HCERTSTORE hCertStore;
+} CERT_CONTEXT, *PCERT_CONTEXT;
+typedef const CERT_CONTEXT *PCCERT_CONTEXT;
+typedef struct _CTL_USAGE {
+ DWORD cUsageIdentifier;
+ LPSTR *rgpszUsageIdentifier;
+} CTL_USAGE, *PCTRL_USAGE,
+ CERT_ENHKEY_USAGE, *PCERT_ENHKEY_USAGE;
+typedef struct _CERT_USAGE_MATCH {
+ DWORD dwType;
+ CERT_ENHKEY_USAGE Usage;
+} CERT_USAGE_MATCH, *PCERT_USAGE_MATCH;
+/* #if (_WIN32_WINNT>=0x500) */
+typedef struct _CERT_CHAIN_PARA {
+ DWORD cbSize;
+ CERT_USAGE_MATCH RequestedUsage;
+#if CERT_CHAIN_PARA_HAS_EXTRA_FIELDS
+ CERT_USAGE_MATCH RequestedIssuancePolicy;
+ DWORD dwUrlRetrievalTimeout;
+ BOOL fCheckRevocationFreshnessTime;
+ DWORD dwRevocationFreshnessTime;
+#endif
+} CERT_CHAIN_PARA, *PCERT_CHAIN_PARA;
+typedef BOOL (WINAPI *PFN_CERT_CHAIN_FIND_BY_ISSUER_CALLBACK)(PCCERT_CONTEXT,void*);
+typedef struct _CERT_CHAIN_FIND_BY_ISSUER_PARA {
+ DWORD cbSize;
+ LPCSTR pszUsageIdentifier;
+ DWORD dwKeySpec;
+ DWORD dwAcquirePrivateKeyFlags;
+ DWORD cIssuer;
+ CERT_NAME_BLOB* rgIssuer;
+ PFN_CERT_CHAIN_FIND_BY_ISSUER_CALLBACK pfnFIndCallback;
+ void* pvFindArg;
+ DWORD* pdwIssuerChainIndex;
+ DWORD* pdwIssuerElementIndex;
+} CERT_CHAIN_FIND_BY_ISSUER_PARA, *PCERT_CHAIN_FIND_BY_ISSUER_PARA;
+/* #endif */
+typedef struct _CERT_TRUST_STATUS {
+ DWORD dwErrorStatus;
+ DWORD dwInfoStatus;
+} CERT_TRUST_STATUS, *PCERT_TRUST_STATUS;
+typedef struct _CRL_ENTRY {
+ CRYPT_INTEGER_BLOB SerialNumber;
+ FILETIME RevocationDate;
+ DWORD cExtension;
+ PCERT_EXTENSION rgExtension;
+} CRL_ENTRY, *PCRL_ENTRY;
+typedef struct _CRL_INFO {
+ DWORD dwVersion;
+ CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm;
+ CERT_NAME_BLOB Issuer;
+ FILETIME ThisUpdate;
+ FILETIME NextUpdate;
+ DWORD cCRLEntry;
+ PCRL_ENTRY rgCRLEntry;
+ DWORD cExtension;
+ PCERT_EXTENSION rgExtension;
+} CRL_INFO, *PCRL_INFO;
+typedef struct _CRL_CONTEXT {
+ DWORD dwCertEncodingType;
+ BYTE* pbCrlEncoded;
+ DWORD cbCrlEncoded;
+ PCRL_INFO pCrlInfo;
+ HCERTSTORE hCertStore;
+} CRL_CONTEXT, *PCRL_CONTEXT;
+typedef const CRL_CONTEXT *PCCRL_CONTEXT;
+typedef struct _CERT_REVOCATION_CRL_INFO {
+ DWORD cbSize;
+ PCCRL_CONTEXT pBaseCRLContext;
+ PCCRL_CONTEXT pDeltaCRLContext;
+ PCRL_ENTRY pCrlEntry;
+ BOOL fDeltaCrlEntry;
+} CERT_REVOCATION_CRL_INFO, *PCERT_REVOCATION_CRL_INFO;
+typedef struct _CERT_REVOCATION_INFO {
+ DWORD cbSize;
+ DWORD dwRevocationResult;
+ LPCSTR pszRevocationOid;
+ LPVOID pvOidSpecificInfo;
+ BOOL fHasFreshnessTime;
+ DWORD dwFreshnessTime;
+ PCERT_REVOCATION_CRL_INFO pCrlInfo;
+} CERT_REVOCATION_INFO, *PCERT_REVOCATION_INFO;
+/* #if (_WIN32_WINNT>=0x500) */
+typedef struct _CERT_CHAIN_ELEMENT {
+ DWORD cbSize;
+ PCCERT_CONTEXT pCertContext;
+ CERT_TRUST_STATUS TrustStatus;
+ PCERT_REVOCATION_INFO pRevocationInfo;
+ PCERT_ENHKEY_USAGE pIssuanceUsage;
+ PCERT_ENHKEY_USAGE pApplicationUsage;
+} CERT_CHAIN_ELEMENT, *PCERT_CHAIN_ELEMENT;
+/* #endif */
+typedef struct _CRYPT_ATTRIBUTE {
+ LPSTR pszObjId;
+ DWORD cValue;
+ PCRYPT_ATTR_BLOB rgValue;
+} CRYPT_ATTRIBUTE, *PCRYPT_ATTRIBUTE;
+typedef struct _CTL_ENTRY {
+ CRYPT_DATA_BLOB SubjectIdentifier;
+ DWORD cAttribute;
+ PCRYPT_ATTRIBUTE rgAttribute;
+} CTL_ENTRY, *PCTL_ENTRY;
+typedef struct _CTL_INFO {
+ DWORD dwVersion;
+ CTL_USAGE SubjectUsage;
+ CRYPT_DATA_BLOB ListIdentifier;
+ CRYPT_INTEGER_BLOB SequenceNumber;
+ FILETIME ThisUpdate;
+ FILETIME NextUpdate;
+ CRYPT_ALGORITHM_IDENTIFIER SubjectAlgorithm;
+ DWORD cCTLEntry;
+ PCTL_ENTRY rgCTLEntry;
+ DWORD cExtension;
+ PCERT_EXTENSION rgExtension;
+} CTL_INFO, *PCTL_INFO;
+typedef struct _CTL_CONTEXT {
+ DWORD dwMsgAndCertEncodingType;
+ BYTE* pbCtlEncoded;
+ DWORD cbCtlEncoded;
+ PCTL_INFO pCtlInfo;
+ HCERTSTORE hCertStore;
+ HCRYPTMSG hCryptMsg;
+ BYTE* pbCtlContent;
+ DWORD cbCtlContent;
+} CTL_CONTEXT, *PCTL_CONTEXT;
+typedef const CTL_CONTEXT *PCCTL_CONTEXT;
+typedef struct _CERT_TRUST_LIST_INFO {
+ DWORD cbSize;
+ PCTL_ENTRY pCtlEntry;
+ PCCTL_CONTEXT pCtlContext;
+} CERT_TRUST_LIST_INFO, *PCERT_TRUST_LIST_INFO;
+typedef struct _CERT_SIMPLE_CHAIN {
+ DWORD cbSize;
+ CERT_TRUST_STATUS TrustStatus;
+ DWORD cElement;
+ PCERT_CHAIN_ELEMENT* rgpElement;
+ PCERT_TRUST_LIST_INFO pTrustListInfo;
+ BOOL fHasRevocationFreshnessTime;
+ DWORD dwRevocationFreshnessTime;
+} CERT_SIMPLE_CHAIN, *PCERT_SIMPLE_CHAIN;
+/* #if (_WIN32_WINNT>=0x500) */
+typedef const struct _CERT_CHAIN_CONTEXT* PCCERT_CHAIN_CONTEXT;
+typedef struct _CERT_CHAIN_CONTEXT {
+ DWORD cbSize;
+ CERT_TRUST_STATUS TrustStatus;
+ DWORD cChain;
+ PCERT_SIMPLE_CHAIN* rgpChain;
+ DWORD cLowerQualityChainContext;
+ PCCERT_CHAIN_CONTEXT* rgpLowerQualityChainContext;
+ BOOL fHasRevocationFreshnessTime;
+ DWORD dwRevocationFreshnessTime;
+} CERT_CHAIN_CONTEXT, *PCERT_CHAIN_CONTEXT;
+/* #endif */
+typedef struct _PROV_ENUMALGS {
+ ALG_ID aiAlgid;
+ DWORD dwBitLen;
+ DWORD dwNameLen;
+ CHAR szName[20];
+} PROV_ENUMALGS;
+typedef struct _PUBLICKEYSTRUC {
+ BYTE bType;
+ BYTE bVersion;
+ WORD reserved;
+ ALG_ID aiKeyAlg;
+} BLOBHEADER, PUBLICKEYSTRUC;
+typedef struct _RSAPUBKEY {
+ DWORD magic;
+ DWORD bitlen;
+ DWORD pubexp;
+} RSAPUBKEY;
+typedef struct _HMAC_Info
+{
+ ALG_ID HashAlgid;
+ BYTE* pbInnerString;
+ DWORD cbInnerString;
+ BYTE* pbOuterString;
+ DWORD cbOuterString;
+} HMAC_INFO, *PHMAC_INFO;
+#if (WINVER >= 0x0501) /* Windows Server 2003, Windows XP */
+typedef struct _CMC_ADD_ATTRIBUTES_INFO {
+ DWORD dwCmcDataReference;
+ DWORD cCertReference;
+ DWORD* rgdwCertReference;
+ DWORD cAttribute;
+ PCRYPT_ATTRIBUTE rgAttribute;
+} CMC_ADD_ATTRIBUTES_INFO,
+ *PCMC_ADD_ATTRIBUTES_INFO;
+typedef struct _CMC_ADD_EXTENSIONS_INFO {
+ DWORD dwCmcDataReference;
+ DWORD cCertReference;
+ DWORD* rgdwCertReference;
+ DWORD cExtension;
+ PCERT_EXTENSION rgExtension;
+} CMC_ADD_EXTENSIONS_INFO,
+ *PCMC_ADD_EXTENSIONS_INFO;
+#endif /* (WINVER >= 0x0501) */ /* Windows Server 2003, Windows XP */
+#if (WINVER >= 0x0410) /* Windows 98 */
+/* need PCERT_OTHER_NAME & CERT_DATA_BLOB!
+typedef struct _CERT_ALT_NAME_ENTRY {
+ DWORD dwAltNameChoice;
+ union {
+ PCERT_OTHER_NAME pOtherName;
+ LPWSTR pwszRfc822Name;
+ LPWSTR pwszDNSName;
+ CERT_DATA_BLOB x400Address;
+ CERT_NAME_BLOB DirectoryName;
+ LPWSTR pEdiPartyName;
+ LPWSTR pwszURL;
+ CRYPT_DATA_BLOB IPAddress;
+ LPSTR pszRegisteredID;
+ };
+} CERT_ALT_NAME_ENTRY,
+ *PCERT_ALT_NAME_ENTRY;
+*/
+/* needs CERT_ALT_NAME_ENTRY above, which lacks prereqs
+typedef struct _CERT_ALT_NAME_INFO {
+ DWORD cAltEntry;
+ PCERT_ALT_NAME_ENTRY rgAltEntry;
+} CERT_ALT_NAME_INFO,
+ *PCERT_ALT_NAME_INFO;
+ */
+typedef struct _CERT_NAME_VALUE {
+ DWORD dwValueType;
+ CERT_RDN_VALUE_BLOB Value;
+} CERT_NAME_VALUE,
+ *PCERT_NAME_VALUE;
+typedef struct _CERT_POLICY_QUALIFIER_INFO {
+ LPSTR pszPolicyQualifierId;
+ CRYPT_OBJID_BLOB Qualifier;
+} CERT_POLICY_QUALIFIER_INFO,
+ *PCERT_POLICY_QUALIFIER_INFO;
+typedef struct _CERT_POLICY_CONSTRAINTS_INFO {
+ BOOL fRequireExplicitPolicy;
+ DWORD dwRequireExplicitPolicySkipCerts;
+ BOOL fInhibitPolicyMapping;
+ DWORD dwInhibitPolicyMappingSkipCerts;
+} CERT_POLICY_CONSTRAINTS_INFO,
+ *PCERT_POLICY_CONSTRAINTS_INFO;
+#endif /* (WINVER >= 0x0410) */ /* Windows 98 */
+#if (WINVER >= 0x0501) /* Windows Server 2003, Windows XP */
+typedef struct _CERT_POLICY_MAPPING {
+ LPSTR pszIssuerDomainPolicy;
+ LPSTR pszSubjectDomainPolicy;
+} CERT_POLICY_MAPPING,
+ *PCERT_POLICY_MAPPING;
+typedef struct _CERT_POLICY_MAPPINGS_INFO {
+ DWORD cPolicyMapping;
+ PCERT_POLICY_MAPPING rgPolicyMapping;
+} CERT_POLICY_MAPPINGS_INFO,
+ *PCERT_POLICY_MAPPINGS_INFO;
+
+#endif /* (WINVER >= 0x0501) */ /* Windows Server 2003, Windows XP */
+
+//http://msdn.microsoft.com/en-us/library/aa922935.aspx
+//Some Crypto Key Provider Information structures.
+typedef struct _CRYPT_KEY_PROV_PARAM {
+ DWORD dwParam;
+ BYTE *pbData;
+ DWORD cbData;
+ DWORD dwFlags;
+} CRYPT_KEY_PROV_PARAM, *PCRYPT_KEY_PROV_PARAM;
+
+//http://msdn.microsoft.com/en-us/library/aa381420(VS.85).aspx
+typedef struct _CRYPT_KEY_PROV_INFO {
+ LPWSTR pwszContainerName;
+ LPWSTR pwszProvName;
+ DWORD dwProvType;
+ DWORD dwFlags;
+ DWORD cProvParam;
+ PCRYPT_KEY_PROV_PARAM rgProvParam;
+ DWORD dwKeySpec;
+} CRYPT_KEY_PROV_INFO, *PCRYPT_KEY_PROV_INFO;
+
+#define CERT_SET_KEY_PROV_HANDLE_PROP_ID 0x00000001
+#define CERT_SET_KEY_CONTEXT_PROP_ID 0x00000001
+
+#define CRYPT_KEYID_DELETE_FLAG 0x00000010
+#define CRYPT_KEYID_SET_NEW_FLAG 0x00002000
+
+//certificate crl ctl IDs
+#define CERT_KEY_PROV_HANDLE_PROP_ID 1
+#define CERT_KEY_PROV_INFO_PROP_ID 2
+#define CERT_SHA1_HASH_PROP_ID 3
+#define CERT_MD5_HASH_PROP_ID 4
+#define CERT_HASH_PROP_ID CERT_SHA1_HASH_PROP_ID
+#define CERT_KEY_CONTEXT_PROP_ID 5
+#define CERT_KEY_SPEC_PROP_ID 6
+#define CERT_IE30_RESERVED_PROP_ID 7
+#define CERT_PUBKEY_HASH_RESERVED_PROP_ID 8
+#define CERT_ENHKEY_USAGE_PROP_ID 9
+#define CERT_CTL_USAGE_PROP_ID CERT_ENHKEY_USAGE_PROP_ID
+#define CERT_NEXT_UPDATE_LOCATION_PROP_ID 10
+#define CERT_FRIENDLY_NAME_PROP_ID 11
+#define CERT_PVK_FILE_PROP_ID 12
+#define CERT_DESCRIPTION_PROP_ID 13
+#define CERT_ACCESS_STATE_PROP_ID 14
+#define CERT_SIGNATURE_HASH_PROP_ID 15
+#define CERT_SMART_CARD_DATA_PROP_ID 16
+#define CERT_EFS_PROP_ID 17
+#define CERT_FORTEZZA_DATA_PROP_ID 18
+#define CERT_ARCHIVED_PROP_ID 19
+#define CERT_KEY_IDENTIFIER_PROP_ID 20
+#define CERT_AUTO_ENROLL_PROP_ID 21
+#define CERT_PUBKEY_ALG_PARA_PROP_ID 22
+#define CERT_CROSS_CERT_DIST_POINTS_PROP_ID 23
+#define CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID 24
+#define CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID 25
+#define CERT_ENROLLMENT_PROP_ID 26
+#define CERT_DATE_STAMP_PROP_ID 27
+#define CERT_ISSUER_SERIAL_NUMBER_MD5_HASH_PROP_ID 28
+#define CERT_SUBJECT_NAME_MD5_HASH_PROP_ID 29
+#define CERT_EXTENDED_ERROR_INFO_PROP_ID 30
+
+//Certificate name type
+#define CERT_NAME_EMAIL_TYPE 1
+#define CERT_NAME_RDN_TYPE 2
+#define CERT_NAME_ATTR_TYPE 3
+#define CERT_NAME_SIMPLE_DISPLAY_TYPE 4
+#define CERT_NAME_FRIENDLY_DISPLAY_TYPE 5
+#define CERT_NAME_DNS_TYPE 6
+#define CERT_NAME_URL_TYPE 7
+#define CERT_NAME_UPN_TYPE 8
+
+//certificate/CRL, encoded, context or element disposition values.
+#define CERT_STORE_ADD_NEW 1
+#define CERT_STORE_ADD_USE_EXISTING 2
+#define CERT_STORE_ADD_REPLACE_EXISTING 3
+#define CERT_STORE_ADD_ALWAYS 4
+#define CERT_STORE_ADD_REPLACE_EXISTING_INHERIT_PROPERTIES 5
+#define CERT_STORE_ADD_NEWER 6
+#define CERT_STORE_ADD_NEWER_INHERIT_PROPERTIES 7
+
+#define CRYPT_ACQUIRE_CACHE_FLAG 0x00000001
+#define CRYPT_ACQUIRE_USE_PROV_INFO_FLAG 0x00000002
+#define CRYPT_ACQUIRE_COMPARE_KEY_FLAG 0x00000004
+#define CRYPT_ACQUIRE_SILENT_FLAG 0x00000040
+
+// dwFlags definitions for CryptAcquireContext
+#define CRYPT_VERIFYCONTEXT 0xF0000000
+#define CRYPT_NEWKEYSET 0x00000008
+#define CRYPT_DELETEKEYSET 0x00000010
+#define CRYPT_MACHINE_KEYSET 0x00000020
+#define CRYPT_SILENT 0x00000040
+
+// dwFlag definitions for CryptGenKey
+#define CRYPT_EXPORTABLE 0x00000001
+#define CRYPT_USER_PROTECTED 0x00000002
+#define CRYPT_CREATE_SALT 0x00000004
+#define CRYPT_UPDATE_KEY 0x00000008
+#define CRYPT_NO_SALT 0x00000010
+#define CRYPT_PREGEN 0x00000040
+#define CRYPT_RECIPIENT 0x00000010
+#define CRYPT_INITIATOR 0x00000040
+#define CRYPT_ONLINE 0x00000080
+#define CRYPT_SF 0x00000100
+#define CRYPT_CREATE_IV 0x00000200
+#define CRYPT_KEK 0x00000400
+#define CRYPT_DATA_KEY 0x00000800
+#define CRYPT_VOLATILE 0x00001000
+#define CRYPT_SGCKEY 0x00002000
+#define CRYPT_ARCHIVABLE 0x00004000
+
+#define RSA1024BIT_KEY 0x04000000
+
+// dwFlags definitions for CryptDeriveKey
+#define CRYPT_SERVER 0x00000400
+
+#define KEY_LENGTH_MASK 0xFFFF0000
+
+// dwFlag definitions for CryptExportKey
+#define CRYPT_Y_ONLY 0x00000001
+#define CRYPT_SSL2_FALLBACK 0x00000002
+#define CRYPT_DESTROYKEY 0x00000004
+#define CRYPT_OAEP 0x00000040 // used with RSA encryptions/decryptions
+ // CryptExportKey, CryptImportKey,
+ // CryptEncrypt and CryptDecrypt
+
+#define CRYPT_BLOB_VER3 0x00000080 // export version 3 of a blob type
+#define CRYPT_IPSEC_HMAC_KEY 0x00000100 // CryptImportKey only
+
+// dwFlags definitions for CryptDecrypt
+// See also CRYPT_OAEP, above.
+// Note, the following flag is not supported for CryptEncrypt
+#define CRYPT_DECRYPT_RSA_NO_PADDING_CHECK 0x00000020
+
+// dwFlags definitions for CryptCreateHash
+#define CRYPT_SECRETDIGEST 0x00000001
+
+// dwFlags definitions for CryptHashData
+#define CRYPT_OWF_REPL_LM_HASH 0x00000001 // this is only for the OWF replacement CSP
+
+// dwFlags definitions for CryptHashSessionKey
+#define CRYPT_LITTLE_ENDIAN 0x00000001
+
+// dwFlags definitions for CryptSignHash and CryptVerifySignature
+#define CRYPT_NOHASHOID 0x00000001
+#define CRYPT_TYPE2_FORMAT 0x00000002
+#define CRYPT_X931_FORMAT 0x00000004
+
+// dwFlag definitions for CryptSetProviderEx and CryptGetDefaultProvider
+#define CRYPT_MACHINE_DEFAULT 0x00000001
+#define CRYPT_USER_DEFAULT 0x00000002
+#define CRYPT_DELETE_DEFAULT 0x00000004
+
+//algorithm
+#define CALG_SSL3_SHAMD5 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SSL3SHAMD5)
+
+//End of crypto key provider information structures
+
+BOOL WINAPI CertCloseStore(HCERTSTORE,DWORD);
+BOOL WINAPI CertGetCertificateChain(HCERTCHAINENGINE,PCCERT_CONTEXT,LPFILETIME,HCERTSTORE,PCERT_CHAIN_PARA,DWORD,LPVOID,PCCERT_CHAIN_CONTEXT*);
+BOOL WINAPI CertVerifyCertificateChainPolicy(LPCSTR,PCCERT_CHAIN_CONTEXT,PCERT_CHAIN_POLICY_PARA,PCERT_CHAIN_POLICY_STATUS);
+void WINAPI CertFreeCertificateChain(PCCERT_CHAIN_CONTEXT);
+DWORD WINAPI CertNameToStrA(DWORD,PCERT_NAME_BLOB,DWORD,LPSTR,DWORD);
+DWORD WINAPI CertNameToStrW(DWORD,PCERT_NAME_BLOB,DWORD,LPWSTR,DWORD);
+HCERTSTORE WINAPI CertOpenSystemStoreA(HCRYPTPROV,LPCSTR);
+HCERTSTORE WINAPI CertOpenSystemStoreW(HCRYPTPROV,LPCWSTR);
+HCERTSTORE WINAPI CertOpenStore(LPCSTR,DWORD,HCRYPTPROV,DWORD,const void*);
+PCCERT_CONTEXT WINAPI CertFindCertificateInStore(HCERTSTORE,DWORD,DWORD,DWORD,const void*,PCCERT_CONTEXT);
+BOOL WINAPI CertFreeCertificateContext(PCCERT_CONTEXT);
+PCCERT_CONTEXT WINAPI CertGetIssuerCertificateFromStore(HCERTSTORE,PCCERT_CONTEXT,PCCERT_CONTEXT,DWORD*);
+PCCERT_CHAIN_CONTEXT WINAPI CertFindChainInStore(HCERTSTORE,DWORD,DWORD,DWORD,const void*,PCCERT_CHAIN_CONTEXT);
+
+HCERTSTORE WINAPI CertDuplicateStore(HCERTSTORE);
+PCCERT_CONTEXT WINAPI CertEnumCertificatesInStore(HCERTSTORE,PCCERT_CONTEXT);
+PCCERT_CONTEXT WINAPI CertDuplicateCertificateContext(PCCERT_CONTEXT);
+DWORD WINAPI CertGetNameStringA(PCCERT_CONTEXT,DWORD,DWORD,void*,LPSTR,DWORD);
+DWORD WINAPI CertGetNameStringW(PCCERT_CONTEXT,DWORD,DWORD,void*,LPWSTR,DWORD);
+BOOL WINAPI PFXIsPFXBlob(CRYPT_DATA_BLOB*);
+PCERT_EXTENSION WINAPI CertFindExtension(LPCSTR,DWORD,CERT_EXTENSION*);
+BOOL WINAPI CryptDecodeObject(DWORD,LPCSTR,const BYTE*,DWORD,DWORD,void*,DWORD*);
+BOOL WINAPI CryptDecodeObjectEx(DWORD,LPCSTR,const BYTE*,DWORD,DWORD,PCRYPT_DECODE_PARA,void*,DWORD*);
+BOOL WINAPI CryptEncodeObject(DWORD dwCertEncodingType,LPCSTR,const void*,BYTE*,DWORD*);
+BOOL WINAPI CryptEncodeObjectEx(DWORD,LPCSTR,const void*,DWORD,PCRYPT_ENCODE_PARA,void*,DWORD*);
+BOOL WINAPI CertAddCertificateContextToStore(HCERTSTORE,PCCERT_CONTEXT,DWORD,PCCERT_CONTEXT*);
+BOOL WINAPI CertCompareCertificate(DWORD,PCERT_INFO,PCERT_INFO);
+BOOL WINAPI PFXVerifyPassword(CRYPT_DATA_BLOB*,LPCWSTR,DWORD);
+HCERTSTORE WINAPI PFXImportCertStore(CRYPT_DATA_BLOB*,LPCWSTR,DWORD);
+BOOL WINAPI CertDeleteCertificateFromStore(PCCERT_CONTEXT);
+
+WINADVAPI BOOL WINAPI CryptAcquireContextA(HCRYPTPROV*,LPCSTR,LPCSTR,DWORD,DWORD);
+WINADVAPI BOOL WINAPI CryptAcquireContextW(HCRYPTPROV*,LPCWSTR,LPCWSTR,DWORD,DWORD);
+WINADVAPI BOOL WINAPI CryptContextAddRef(HCRYPTPROV,DWORD*,DWORD);
+WINADVAPI BOOL WINAPI CryptReleaseContext(HCRYPTPROV,DWORD);
+WINADVAPI BOOL WINAPI CryptGenKey(HCRYPTPROV,ALG_ID,DWORD,HCRYPTKEY*);
+WINADVAPI BOOL WINAPI CryptDeriveKey(HCRYPTPROV,ALG_ID,HCRYPTHASH,DWORD,HCRYPTKEY*);
+WINADVAPI BOOL WINAPI CryptDestroyKey(HCRYPTKEY);
+#if (WINVER >= 0x0500)
+WINADVAPI BOOL WINAPI CryptDuplicateHash(HCRYPTHASH,DWORD*,DWORD,HCRYPTHASH*);
+WINADVAPI BOOL WINAPI CryptDuplicateKey(HCRYPTKEY,DWORD*,DWORD,HCRYPTKEY*);
+#endif
+WINADVAPI BOOL WINAPI CryptSetKeyParam(HCRYPTKEY,DWORD,PBYTE,DWORD);
+WINADVAPI BOOL WINAPI CryptGetKeyParam(HCRYPTKEY,DWORD,PBYTE,PDWORD,DWORD);
+WINADVAPI BOOL WINAPI CryptSetHashParam(HCRYPTHASH,DWORD,PBYTE,DWORD);
+WINADVAPI BOOL WINAPI CryptGetHashParam(HCRYPTHASH,DWORD,PBYTE,PDWORD,DWORD);
+WINADVAPI BOOL WINAPI CryptSetProvParam(HCRYPTPROV,DWORD,PBYTE,DWORD);
+WINADVAPI BOOL WINAPI CryptGetProvParam(HCRYPTPROV,DWORD,PBYTE,PDWORD,DWORD);
+WINADVAPI BOOL WINAPI CryptGenRandom(HCRYPTPROV,DWORD,PBYTE);
+WINADVAPI BOOL WINAPI CryptGetUserKey(HCRYPTPROV,DWORD,HCRYPTKEY*);
+WINADVAPI BOOL WINAPI CryptExportKey(HCRYPTKEY,HCRYPTKEY,DWORD,DWORD,PBYTE,PDWORD);
+WINADVAPI BOOL WINAPI CryptImportKey(HCRYPTPROV,PBYTE,DWORD,HCRYPTKEY,DWORD,HCRYPTKEY*);
+WINADVAPI BOOL WINAPI CryptEncrypt(HCRYPTKEY,HCRYPTHASH,BOOL,DWORD,PBYTE,PDWORD,DWORD);
+WINADVAPI BOOL WINAPI CryptDecrypt(HCRYPTKEY,HCRYPTHASH,BOOL,DWORD,PBYTE,PDWORD);
+WINADVAPI BOOL WINAPI CryptCreateHash(HCRYPTPROV,ALG_ID,HCRYPTKEY,DWORD,HCRYPTHASH*);
+WINADVAPI BOOL WINAPI CryptHashData(HCRYPTHASH,PBYTE,DWORD,DWORD);
+WINADVAPI BOOL WINAPI CryptHashSessionKey(HCRYPTHASH,HCRYPTKEY,DWORD);
+WINADVAPI BOOL WINAPI CryptGetHashValue(HCRYPTHASH,DWORD,PBYTE,PDWORD);
+WINADVAPI BOOL WINAPI CryptDestroyHash(HCRYPTHASH);
+WINADVAPI BOOL WINAPI CryptSignHashA(HCRYPTHASH,DWORD,LPCSTR,DWORD,PBYTE,PDWORD);
+WINADVAPI BOOL WINAPI CryptSignHashW(HCRYPTHASH,DWORD,LPCWSTR,DWORD,PBYTE,PDWORD);
+WINADVAPI BOOL WINAPI CryptVerifySignatureA(HCRYPTHASH,PBYTE,DWORD,HCRYPTKEY,LPCSTR,DWORD);
+WINADVAPI BOOL WINAPI CryptVerifySignatureW(HCRYPTHASH,PBYTE,DWORD,HCRYPTKEY,LPCWSTR,DWORD);
+WINADVAPI BOOL WINAPI CryptSetProviderA(LPCSTR,DWORD);
+WINADVAPI BOOL WINAPI CryptSetProviderW(LPCWSTR,DWORD);
+
+#ifdef UNICODE
+#define CertGetNameString CertGetNameStringW
+#else
+#define CertGetNameString CertGetNameStringA
+#endif
+
+#ifdef UNICODE
+#define CertNameToStr CertNameToStrW
+#define CryptAcquireContext CryptAcquireContextW
+#define CryptSignHash CryptSignHashW
+#define CryptVerifySignature CryptVerifySignatureW
+#define CryptSetProvider CryptSetProviderW
+#define CertOpenSystemStore CertOpenSystemStoreW
+#define CERT_FIND_SUBJECT_STR CERT_FIND_SUBJECT_STR_W
+#define CERT_FIND_ISSUER_STR CERT_FIND_ISSUER_STR_W
+#define MS_DEF_PROV MS_DEF_PROV_W
+#define MS_ENHANCED_PROV MS_ENHANCED_PROV_W
+#define MS_STRONG_PROV MS_STRONG_PROV_W
+#define MS_DEF_RSA_SIG_PROV MS_DEF_RSA_SIG_PROV_W
+#define MS_DEF_RSA_SCHANNEL_PROV MS_DEF_RSA_SCHANNEL_PROV_W
+#define MS_DEF_DSS_PROV MS_DEF_DSS_PROV_W
+#define MS_DEF_DSS_DH_PROV MS_DEF_DSS_DH_PROV_W
+#define MS_ENH_DSS_DH_PROV MS_ENH_DSS_DH_PROV_W
+#define MS_DEF_DH_SCHANNEL_PROV MS_DEF_DH_SCHANNEL_PROV_W
+#define MS_SCARD_PROV MS_SCARD_PROV_W
+#if (_WIN32_WINNT >= 0x0501)
+#define MS_ENH_RSA_AES_PROV MS_ENH_RSA_AES_PROV_W
+#endif
+#else
+#define CertNameToStr CertNameToStrA
+#define CryptAcquireContext CryptAcquireContextA
+#define CryptSignHash CryptSignHashA
+#define CryptVerifySignature CryptVerifySignatureA
+#define CryptSetProvider CryptSetProviderA
+#define CertOpenSystemStore CertOpenSystemStoreA
+#define CERT_FIND_SUBJECT_STR CERT_FIND_SUBJECT_STR_A
+#define CERT_FIND_ISSUER_STR CERT_FIND_ISSUER_STR_A
+#define MS_DEF_PROV MS_DEF_PROV_A
+#define MS_ENHANCED_PROV MS_ENHANCED_PROV_A
+#define MS_STRONG_PROV MS_STRONG_PROV_A
+#define MS_DEF_RSA_SIG_PROV MS_DEF_RSA_SIG_PROV_A
+#define MS_DEF_RSA_SCHANNEL_PROV MS_DEF_RSA_SCHANNEL_PROV_A
+#define MS_DEF_DSS_PROV MS_DEF_DSS_PROV_A
+#define MS_DEF_DSS_DH_PROV MS_DEF_DSS_DH_PROV_A
+#define MS_ENH_DSS_DH_PROV MS_ENH_DSS_DH_PROV_A
+#define MS_DEF_DH_SCHANNEL_PROV MS_DEF_DH_SCHANNEL_PROV_A
+#define MS_SCARD_PROV MS_SCARD_PROV_A
+#if (_WIN32_WINNT >= 0x0501)
+#define MS_ENH_RSA_AES_PROV MS_ENH_RSA_AES_PROV_A
+#endif
+#endif
+/* from http://msdn2.microsoft.com/en-us/library/Aa380263.aspx: */
+typedef struct _CRYPTPROTECT_PROMPTSTRUCT {
+ DWORD cbSize;
+ DWORD dwPromptFlags;
+ HWND hwndApp;
+ LPCWSTR szPrompt;
+} CRYPTPROTECT_PROMPTSTRUCT,
+*PCRYPTPROTECT_PROMPTSTRUCT;
+
+
+/* from http://msdn2.microsoft.com/en-us/library/aa380261.aspx */
+BOOL WINAPI CryptProtectData (DATA_BLOB*, LPCWSTR, DATA_BLOB*, PVOID, CRYPTPROTECT_PROMPTSTRUCT*, DWORD, DATA_BLOB*);
+
+/* http://msdn2.microsoft.com/en-us/library/aa380882.aspx */
+BOOL WINAPI CryptUnprotectData (DATA_BLOB*, LPWSTR*, DATA_BLOB*, PVOID, CRYPTPROTECT_PROMPTSTRUCT*, DWORD, DATA_BLOB*);
+
+/* from http://msdn2.microsoft.com/en-us/library/aa302402.aspx: */
+#define CRYPTPROTECT_UI_FORBIDDEN 0x1
+#define CRYPTPROTECT_LOCAL_MACHINE 0x4
+
+//For Mozilla trunk
+typedef BOOL (WINAPI *PFN_CRYPT_ENUM_KEYID_PROP)(const CRYPT_HASH_BLOB *, DWORD, void *, void *, DWORD,DWORD,void **,DWORD);
+
+BOOL WINAPI CertGetCertificateContextProperty (PCCERT_CONTEXT, DWORD, void *, DWORD *);
+BOOL WINAPI CryptEnumKeyIdentifierProperties (const CRYPT_HASH_BLOB *, DWORD, DWORD, LPCWSTR, void *, void *, PFN_CRYPT_ENUM_KEYID_PROP);
+BOOL WINAPI CryptAcquireCertificatePrivateKey(PCCERT_CONTEXT, DWORD, void *, HCRYPTPROV *, DWORD *, BOOL *);
+PCCERT_CONTEXT WINAPI CertCreateCertificateContext (DWORD, const BYTE *, DWORD);
+BOOL WINAPI CryptGetKeyIdentifierProperty( const CRYPT_HASH_BLOB *, DWORD, DWORD, LPCWSTR, void *, void *, DWORD *);
+BOOL WINAPI CertSetCertificateContextProperty( PCCERT_CONTEXT, DWORD, DWORD, void *);
+BOOL WINAPI CertCompareCertificateName( DWORD, PCERT_NAME_BLOB, PCERT_NAME_BLOB);
+BOOL WINAPI CryptSetKeyIdentifierProperty (const CRYPT_HASH_BLOB *, DWORD, DWORD, LPCWSTR, void *, void *);
+DWORD WINAPI CertOIDToAlgId( LPCSTR );
+BOOL WINAPI CryptGetDefaultProviderA(DWORD,DWORD,DWORD,LPSTR,DWORD);
+BOOL WINAPI CryptGetDefaultProviderW(DWORD,DWORD,DWORD,LPSTR,DWORD);
+
+#ifdef UNICODE
+#define CryptGetDefaultProvider CryptGetDefaultProviderW
+#else
+#define CryptGetDefaultProvider CryptGetDefaultProviderA
+#endif // !UNICODE
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* _WINCRYPT_H */
diff --git a/tcc/include/winapi/windef.h b/tcc/include/winapi/windef.h
new file mode 100644
index 0000000..793591c
--- /dev/null
+++ b/tcc/include/winapi/windef.h
@@ -0,0 +1,337 @@
+#ifndef _WINDEF_H
+#define _WINDEF_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef WINVER
+#define WINVER 0x0400
+/*
+ * If you need Win32 API features newer the Win95 and WinNT then you must
+ * define WINVER before including windows.h or any other method of including
+ * the windef.h header.
+ */
+#endif
+#ifndef _WIN32_WINNT
+#define _WIN32_WINNT WINVER
+/*
+ * There may be the need to define _WIN32_WINNT to a value different from
+ * the value of WINVER. I don't have any example of why you would do that.
+ * However, if you must then define _WIN32_WINNT to the value required before
+ * including windows.h or any other method of including the windef.h header.
+ */
+#endif
+#ifndef WIN32
+#define WIN32
+#endif
+#ifndef _WIN32
+#define _WIN32
+#endif
+#define FAR
+#define far
+#define NEAR
+#define near
+#ifndef CONST
+#define CONST const
+#endif
+#undef MAX_PATH
+#define MAX_PATH 260
+
+#ifndef NULL
+#ifdef __cplusplus
+#define NULL 0
+#else
+#define NULL ((void*)0)
+#endif
+#endif
+#ifndef FALSE
+#define FALSE 0
+#endif
+#ifndef TRUE
+#define TRUE 1
+#endif
+
+/* Pseudo modifiers for parameters
+ We don't use these unnecessary defines in the w32api headers. Define
+ them by default since that is what people expect, but allow users
+ to avoid the pollution. */
+#ifndef _NO_W32_PSEUDO_MODIFIERS
+#define IN
+#define OUT
+#ifndef OPTIONAL
+#define OPTIONAL
+#endif
+#endif
+
+#ifdef __GNUC__
+#define PACKED __attribute__((packed))
+#ifndef _fastcall
+#define _fastcall __attribute__((fastcall))
+#endif
+#ifndef __fastcall
+#define __fastcall __attribute__((fastcall))
+#endif
+#ifndef _stdcall
+#define _stdcall __attribute__((stdcall))
+#endif
+#ifndef __stdcall
+#define __stdcall __attribute__((stdcall))
+#endif
+#ifndef _cdecl
+#define _cdecl __attribute__((cdecl))
+#endif
+#ifndef __cdecl
+#define __cdecl __attribute__((cdecl))
+#endif
+#ifndef __declspec
+#define __declspec(e) __attribute__((e))
+#endif
+#ifndef _declspec
+#define _declspec(e) __attribute__((e))
+#endif
+#elif defined(__WATCOMC__)
+#define PACKED
+#else
+#define PACKED
+#define _cdecl
+#define __cdecl
+#endif
+
+#undef pascal
+#undef _pascal
+#undef __pascal
+#define pascal __stdcall
+#define _pascal __stdcall
+#define __pascal __stdcall
+#define PASCAL _pascal
+#define CDECL _cdecl
+#define STDCALL __stdcall
+#define FASTCALL __fastcall
+#define WINAPI __stdcall
+#define WINAPIV __cdecl
+#define APIENTRY __stdcall
+#define CALLBACK __stdcall
+#define APIPRIVATE __stdcall
+
+#define DECLSPEC_IMPORT __declspec(dllimport)
+#define DECLSPEC_EXPORT __declspec(dllexport)
+#ifdef __GNUC__
+#define DECLSPEC_NORETURN __declspec(noreturn)
+#define DECLARE_STDCALL_P( type ) __stdcall type
+#elif defined(__WATCOMC__)
+#define DECLSPEC_NORETURN
+#define DECLARE_STDCALL_P( type ) type __stdcall
+#endif /* __GNUC__/__WATCOMC__ */
+#define MAKEWORD(a,b) ((WORD)(((BYTE)(a))|(((WORD)((BYTE)(b)))<<8)))
+#define MAKELONG(a,b) ((LONG)(((WORD)(a))|(((DWORD)((WORD)(b)))<<16)))
+#define LOWORD(l) ((WORD)((DWORD)(l)))
+#define HIWORD(l) ((WORD)(((DWORD)(l)>>16)&0xFFFF))
+#define LOBYTE(w) ((BYTE)(w))
+#define HIBYTE(w) ((BYTE)(((WORD)(w)>>8)&0xFF))
+
+#ifndef __WATCOMC__
+#ifndef _export
+#define _export
+#endif
+#ifndef __export
+#define __export
+#endif
+#endif
+
+#ifndef NOMINMAX
+#ifndef max
+#define max(a,b) ((a)>(b)?(a):(b))
+#endif
+#ifndef min
+#define min(a,b) ((a)<(b)?(a):(b))
+#endif
+#endif
+
+#define UNREFERENCED_PARAMETER(P) {(P)=(P);}
+#define UNREFERENCED_LOCAL_VARIABLE(L) {(L)=(L);}
+#define DBG_UNREFERENCED_PARAMETER(P)
+#define DBG_UNREFERENCED_LOCAL_VARIABLE(L)
+
+#ifndef NONAMELESSUNION
+#ifdef __GNUC__
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
+#define _ANONYMOUS_UNION __extension__
+#define _ANONYMOUS_STRUCT __extension__
+#else
+#if defined(__cplusplus)
+#define _ANONYMOUS_UNION __extension__
+#endif /* __cplusplus */
+#endif /* __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) */
+#elif defined(__WATCOMC__)
+#define _ANONYMOUS_UNION
+#define _ANONYMOUS_STRUCT
+#endif /* __GNUC__/__WATCOMC__ */
+#endif /* NONAMELESSUNION */
+
+#ifndef _ANONYMOUS_UNION
+#define _ANONYMOUS_UNION
+#define _UNION_NAME(x) x
+#define DUMMYUNIONNAME u
+#define DUMMYUNIONNAME2 u2
+#define DUMMYUNIONNAME3 u3
+#define DUMMYUNIONNAME4 u4
+#define DUMMYUNIONNAME5 u5
+#define DUMMYUNIONNAME6 u6
+#define DUMMYUNIONNAME7 u7
+#define DUMMYUNIONNAME8 u8
+#else
+#define _UNION_NAME(x)
+#define DUMMYUNIONNAME
+#define DUMMYUNIONNAME2
+#define DUMMYUNIONNAME3
+#define DUMMYUNIONNAME4
+#define DUMMYUNIONNAME5
+#define DUMMYUNIONNAME6
+#define DUMMYUNIONNAME7
+#define DUMMYUNIONNAME8
+#endif
+#ifndef _ANONYMOUS_STRUCT
+#define _ANONYMOUS_STRUCT
+#define _STRUCT_NAME(x) x
+#define DUMMYSTRUCTNAME s
+#define DUMMYSTRUCTNAME2 s2
+#define DUMMYSTRUCTNAME3 s3
+#else
+#define _STRUCT_NAME(x)
+#define DUMMYSTRUCTNAME
+#define DUMMYSTRUCTNAME2
+#define DUMMYSTRUCTNAME3
+#endif
+
+#ifndef NO_STRICT
+#ifndef STRICT
+#define STRICT 1
+#endif
+#endif
+
+/* FIXME: This will make some code compile. The programs will most
+ likely crash when an exception is raised, but at least they will
+ compile. */
+#if defined (__GNUC__) && defined (__SEH_NOOP)
+#define __try
+#define __except(x) if (0) /* don't execute handler */
+#define __finally
+
+#define _try __try
+#define _except __except
+#define _finally __finally
+#endif
+
+typedef unsigned long DWORD;
+typedef int WINBOOL,*PWINBOOL,*LPWINBOOL;
+/* FIXME: Is there a good solution to this? */
+#ifndef XFree86Server
+#ifndef __OBJC__
+typedef WINBOOL BOOL;
+#else
+#define BOOL WINBOOL
+#endif
+typedef unsigned char BYTE;
+#endif /* ndef XFree86Server */
+typedef BOOL *PBOOL,*LPBOOL;
+typedef unsigned short WORD;
+typedef float FLOAT;
+typedef FLOAT *PFLOAT;
+typedef BYTE *PBYTE,*LPBYTE;
+typedef int *PINT,*LPINT;
+typedef WORD *PWORD,*LPWORD;
+typedef long *LPLONG;
+typedef DWORD *PDWORD,*LPDWORD;
+typedef CONST void *PCVOID,*LPCVOID;
+typedef int INT;
+typedef unsigned int UINT,*PUINT,*LPUINT;
+
+#include <winnt.h>
+
+typedef UINT_PTR WPARAM;
+typedef LONG_PTR LPARAM;
+typedef LONG_PTR LRESULT;
+#ifndef _HRESULT_DEFINED
+typedef LONG HRESULT;
+#define _HRESULT_DEFINED
+#endif
+#ifndef XFree86Server
+typedef WORD ATOM;
+#endif /* XFree86Server */
+typedef HANDLE HGLOBAL;
+typedef HANDLE HLOCAL;
+typedef HANDLE GLOBALHANDLE;
+typedef HANDLE LOCALHANDLE;
+typedef void *HGDIOBJ;
+DECLARE_HANDLE(HACCEL);
+DECLARE_HANDLE(HBITMAP);
+DECLARE_HANDLE(HBRUSH);
+DECLARE_HANDLE(HCOLORSPACE);
+DECLARE_HANDLE(HDC);
+DECLARE_HANDLE(HGLRC);
+DECLARE_HANDLE(HDESK);
+DECLARE_HANDLE(HENHMETAFILE);
+DECLARE_HANDLE(HFONT);
+DECLARE_HANDLE(HICON);
+DECLARE_HANDLE(HKEY);
+/* FIXME: How to handle these. SM_CMONITORS etc in winuser.h also. */
+DECLARE_HANDLE(HMONITOR);
+#define HMONITOR_DECLARED 1
+DECLARE_HANDLE(HTERMINAL);
+DECLARE_HANDLE(HWINEVENTHOOK);
+
+typedef HKEY *PHKEY;
+DECLARE_HANDLE(HMENU);
+DECLARE_HANDLE(HMETAFILE);
+DECLARE_HANDLE(HINSTANCE);
+typedef HINSTANCE HMODULE;
+DECLARE_HANDLE(HPALETTE);
+DECLARE_HANDLE(HPEN);
+DECLARE_HANDLE(HRGN);
+DECLARE_HANDLE(HRSRC);
+DECLARE_HANDLE(HSTR);
+DECLARE_HANDLE(HTASK);
+DECLARE_HANDLE(HWND);
+DECLARE_HANDLE(HWINSTA);
+DECLARE_HANDLE(HKL);
+typedef int HFILE;
+typedef HICON HCURSOR;
+typedef DWORD COLORREF;
+typedef int (WINAPI *FARPROC)();
+typedef int (WINAPI *NEARPROC)();
+typedef int (WINAPI *PROC)();
+typedef struct tagRECT {
+ LONG left;
+ LONG top;
+ LONG right;
+ LONG bottom;
+} RECT,*PRECT,*LPRECT;
+typedef const RECT *LPCRECT;
+typedef struct tagRECTL {
+ LONG left;
+ LONG top;
+ LONG right;
+ LONG bottom;
+} RECTL,*PRECTL,*LPRECTL;
+typedef const RECTL *LPCRECTL;
+typedef struct tagPOINT {
+ LONG x;
+ LONG y;
+} POINT,POINTL,*PPOINT,*LPPOINT,*PPOINTL,*LPPOINTL;
+typedef struct tagSIZE {
+ LONG cx;
+ LONG cy;
+} SIZE,SIZEL,*PSIZE,*LPSIZE,*PSIZEL,*LPSIZEL;
+typedef struct tagPOINTS {
+ SHORT x;
+ SHORT y;
+} POINTS,*PPOINTS,*LPPOINTS;
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/windns.h b/tcc/include/winapi/windns.h
new file mode 100644
index 0000000..0a7760d
--- /dev/null
+++ b/tcc/include/winapi/windns.h
@@ -0,0 +1,405 @@
+#ifndef _WINDNS_H
+#define _WINDNS_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define DNS_QUERY_STANDARD 0x0
+#define DNS_QUERY_ACCEPT_TRUNCATED_RESPONSE 0x1
+#define DNS_QUERY_USE_TCP_ONLY 0x2
+#define DNS_QUERY_NO_RECURSION 0x4
+#define DNS_QUERY_BYPASS_CACHE 0x8
+#define DNS_QUERY_NO_WIRE_QUERY 0x10
+#define DNS_QUERY_NO_LOCAL_NAME 0x20
+#define DNS_QUERY_NO_HOSTS_FILE 0x40
+#define DNS_QUERY_NO_NETBT 0x80
+#define DNS_QUERY_TREAT_AS_FQDN 0x1000
+#define DNS_QUERY_WIRE_ONLY 0x100
+#define DNS_QUERY_RETURN_MESSAGE 0x200
+#define DNS_QUERY_DONT_RESET_TTL_VALUES 0x100000
+#define DNS_QUERY_RESERVED 0xff000000
+
+#define DNS_UPDATE_SECURITY_USE_DEFAULT 0x0
+#define DNS_UPDATE_SECURITY_OFF 0x10
+#define DNS_UPDATE_SECURITY_ON 0x20
+#define DNS_UPDATE_SECURITY_ONLY 0x100
+#define DNS_UPDATE_CACHE_SECURITY_CONTEXT 0x200
+#define DNS_UPDATE_TEST_USE_LOCAL_SYS_ACCT 0x400
+#define DNS_UPDATE_FORCE_SECURITY_NEGO 0x800
+#define DNS_UPDATE_RESERVED 0xffff0000
+
+#ifndef RC_INVOKE
+typedef DWORD IP4_ADDRESS;
+typedef DWORD DNS_STATUS;
+enum {
+ DNS_TYPE_A=1,
+ DNS_TYPE_NS,
+ DNS_TYPE_MD,
+ DNS_TYPE_MF,
+ DNS_TYPE_CNAME,
+ DNS_TYPE_SOA,
+ DNS_TYPE_MB,
+ DNS_TYPE_MG,
+ DNS_TYPE_MR,
+ DNS_TYPE_NULL,
+ DNS_TYPE_WKS,
+ DNS_TYPE_PTR,
+ DNS_TYPE_HINFO,
+ DNS_TYPE_MINFO,
+ DNS_TYPE_MX,
+ DNS_TYPE_TEXT,
+ DNS_TYPE_RP,
+ DNS_TYPE_AFSDB,
+ DNS_TYPE_X25,
+ DNS_TYPE_ISDN,
+ DNS_TYPE_RT,
+ DNS_TYPE_NSAP,
+ DNS_TYPE_NSAPPTR,
+ DNS_TYPE_SIG,
+ DNS_TYPE_KEY,
+ DNS_TYPE_PX,
+ DNS_TYPE_GPOS,
+ DNS_TYPE_AAAA,
+ DNS_TYPE_LOC,
+ DNS_TYPE_NXT,
+ DNS_TYPE_EID,
+ DNS_TYPE_NIMLOC,
+ DNS_TYPE_SRV,
+ DNS_TYPE_ATMA,
+ DNS_TYPE_NAPTR,
+ DNS_TYPE_KX,
+ DNS_TYPE_CERT,
+ DNS_TYPE_A6,
+ DNS_TYPE_DNAME,
+ DNS_TYPE_SINK,
+ DNS_TYPE_OPT,
+ DNS_TYPE_UINFO=100,
+ DNS_TYPE_UID,
+ DNS_TYPE_GID,
+ DNS_TYPE_UNSPEC,
+ DNS_TYPE_ADDRS=248,
+ DNS_TYPE_TKEY,
+ DNS_TYPE_TSIG,
+ DNS_TYPE_IXFR,
+ DNS_TYPE_AXFR,
+ DNS_TYPE_MAILB,
+ DNS_TYPE_MAILA,
+ DNS_TYPE_ALL,
+ DNS_TYPE_ANY=DNS_TYPE_ALL
+};
+typedef enum _DNS_CHARSET
+{
+ DnsCharSetUnknown,
+ DnsCharSetUnicode,
+ DnsCharSetUtf8,
+ DnsCharSetAnsi
+} DNS_CHARSET;
+typedef enum
+{
+ DnsConfigPrimaryDomainName_W,
+ DnsConfigPrimaryDomainName_A,
+ DnsConfigPrimaryDomainName_UTF8,
+ DnsConfigAdapterDomainName_W,
+ DnsConfigAdapterDomainName_A,
+ DnsConfigAdapterDomainName_UTF8,
+ DnsConfigDnsServerList,
+ DnsConfigSearchList,
+ DnsConfigAdapterInfo,
+ DnsConfigPrimaryHostNameRegistrationEnabled,
+ DnsConfigAdapterHostNameRegistrationEnabled,
+ DnsConfigAddressRegistrationMaxCount,
+ DnsConfigHostName_W,
+ DnsConfigHostName_A,
+ DnsConfigHostName_UTF8,
+ DnsConfigFullHostName_W,
+ DnsConfigFullHostName_A,
+ DnsConfigFullHostName_UTF8
+} DNS_CONFIG_TYPE;
+typedef enum
+{
+ DnsFreeFlat = 0,
+ DnsFreeRecordList,
+ DnsFreeParsedMessageFields
+} DNS_FREE_TYPE;
+typedef enum _DNS_NAME_FORMAT
+{
+ DnsNameDomain,
+ DnsNameDomainLabel,
+ DnsNameHostnameFull,
+ DnsNameHostnameLabel,
+ DnsNameWildcard,
+ DnsNameSrvRecord
+} DNS_NAME_FORMAT;
+typedef enum
+{
+ DnsSectionQuestion,
+ DnsSectionAnswer,
+ DnsSectionAuthority,
+ DnsSectionAdditional
+} DNS_SECTION;
+typedef struct _IP4_ARRAY {
+ DWORD AddrCount;
+ IP4_ADDRESS AddrArray[1];
+} IP4_ARRAY, *PIP4_ARRAY;
+typedef struct {
+ DWORD IP6Dword[4];
+} IP6_ADDRESS, *PIP6_ADDRESS, DNS_IP6_ADDRESS, *PDNS_IP6_ADDRESS;
+typedef struct _DNS_HEADER {
+ WORD Xid;
+ BYTE RecursionDesired;
+ BYTE Truncation;
+ BYTE Authoritative;
+ BYTE Opcode;
+ BYTE IsResponse;
+ BYTE ResponseCode;
+ BYTE Reserved;
+ BYTE RecursionAvailable;
+ WORD QuestionCount;
+ WORD AnswerCount;
+ WORD NameServerCount;
+ WORD AdditionalCount;
+} DNS_HEADER, *PDNS_HEADER;
+typedef struct _DNS_MESSAGE_BUFFER {
+ DNS_HEADER MessageHead;
+ CHAR MessageBody[1];
+} DNS_MESSAGE_BUFFER, *PDNS_MESSAGE_BUFFER;
+typedef struct _DnsRecordFlags {
+ DWORD Section :2;
+ DWORD Delete :1;
+ DWORD CharSet :2;
+ DWORD Unused :3;
+ DWORD Reserved :24;
+} DNS_RECORD_FLAGS;
+#define DNSREC_QUESTION 0
+#define DNSREC_ANSWER 1
+#define DNSREC_AUTHORITY 2
+#define DNSREC_ADDITIONAL 3
+typedef struct {
+ IP4_ADDRESS IpAddress;
+} DNS_A_DATA, *PDNS_A_DATA;
+typedef struct {
+ DNS_IP6_ADDRESS Ip6Address;
+} DNS_AAAA_DATA, *PDNS_AAAA_DATA;
+#define DNS_ATMA_MAX_ADDR_LENGTH 20
+typedef struct {
+ BYTE AddressType;
+ BYTE Address[DNS_ATMA_MAX_ADDR_LENGTH];
+} DNS_ATMA_DATA, *PDNS_ATMA_DATA;
+typedef struct {
+ WORD wFlags;
+ BYTE chProtocol;
+ BYTE chAlgorithm;
+ BYTE Key[1];
+} DNS_KEY_DATA, *PDNS_KEY_DATA;
+typedef struct {
+ WORD wVersion;
+ WORD wSize;
+ WORD wHorPrec;
+ WORD wVerPrec;
+ DWORD dwLatitude;
+ DWORD dwLongitude;
+ DWORD dwAltitude;
+} DNS_LOC_DATA, *PDNS_LOC_DATA;
+typedef struct {
+ LPTSTR pNameMailbox;
+ LPTSTR pNameErrorsMailbox;
+} DNS_MINFO_DATA, *PDNS_MINFO_DATA;
+typedef struct {
+ LPTSTR pNameExchange;
+ WORD wPreference;
+ WORD Pad;
+} DNS_MX_DATA, *PDNS_MX_DATA;
+typedef struct {
+ DWORD dwByteCount;
+ BYTE Data[1];
+} DNS_NULL_DATA, *PDNS_NULL_DATA;
+typedef struct {
+ LPTSTR pNameNext;
+ WORD wNumTypes;
+ WORD wTypes[1];
+} DNS_NXT_DATA, *PDNS_NXT_DATA;
+typedef struct {
+ LPTSTR pNameHost;
+} DNS_PTR_DATA, *PDNS_PTR_DATA;
+typedef struct {
+ LPTSTR pNameSigner;
+ WORD wTypeCovered;
+ BYTE chAlgorithm;
+ BYTE chLabelCount;
+ DWORD dwOriginalTtl;
+ DWORD dwExpiration;
+ DWORD dwTimeSigned;
+ WORD wKeyTag;
+ WORD Pad;
+ BYTE Signature[1];
+} DNS_SIG_DATA, *PDNS_SIG_DATA;
+typedef struct {
+ LPTSTR pNamePrimaryServer;
+ LPTSTR pNameAdministrator;
+ DWORD dwSerialNo;
+ DWORD dwRefresh;
+ DWORD dwRetry;
+ DWORD dwExpire;
+ DWORD dwDefaultTtl;
+} DNS_SOA_DATA, *PDNS_SOA_DATA;
+typedef struct {
+ LPTSTR pNameTarget;
+ WORD wPriority;
+ WORD wWeight;
+ WORD wPort;
+ WORD Pad;
+} DNS_SRV_DATA, *PDNS_SRV_DATA;
+typedef struct {
+ DWORD dwStringCount;
+ LPTSTR pStringArray[1];
+} DNS_TXT_DATA, *PDNS_TXT_DATA;
+typedef struct {
+ LPTSTR pNameAlgorithm;
+ PBYTE pAlgorithmPacket;
+ PBYTE pKey;
+ PBYTE pOtherData;
+ DWORD dwCreateTime;
+ DWORD dwExpireTime;
+ WORD wMode;
+ WORD wError;
+ WORD wKeyLength;
+ WORD wOtherLength;
+ UCHAR cAlgNameLength;
+ BOOL bPacketPointers;
+} DNS_TKEY_DATA, *PDNS_TKEY_DATA;
+typedef struct {
+ LPTSTR pNameAlgorithm;
+ PBYTE pAlgorithmPacket;
+ PBYTE pSignature;
+ PBYTE pOtherData;
+ LONGLONG i64CreateTime;
+ WORD wFudgeTime;
+ WORD wOriginalXid;
+ WORD wError;
+ WORD wSigLength;
+ WORD wOtherLength;
+ UCHAR cAlgNameLength;
+ BOOL bPacketPointers;
+} DNS_TSIG_DATA, *PDNS_TSIG_DATA;
+typedef struct {
+ DWORD dwMappingFlag;
+ DWORD dwLookupTimeout;
+ DWORD dwCacheTimeout;
+ DWORD cWinsServerCount;
+ IP4_ADDRESS WinsServers[1];
+} DNS_WINS_DATA, *PDNS_WINS_DATA;
+typedef struct {
+ DWORD dwMappingFlag;
+ DWORD dwLookupTimeout;
+ DWORD dwCacheTimeout;
+ LPTSTR pNameResultDomain;
+} DNS_WINSR_DATA, *PDNS_WINSR_DATA;
+typedef struct _DNS_WIRE_QUESTION {
+ WORD QuestionType;
+ WORD QuestionClass;
+} DNS_WIRE_QUESTION, *PDNS_WIRE_QUESTION;
+typedef struct _DNS_WIRE_RECORD {
+ WORD RecordType;
+ WORD RecordClass;
+ DWORD TimeToLive;
+ WORD DataLength;
+} DNS_WIRE_RECORD, *PDNS_WIRE_RECORD;
+typedef struct {
+ IP4_ADDRESS IpAddress;
+ UCHAR chProtocol;
+ BYTE BitMask[1];
+} DNS_WKS_DATA, *PDNS_WKS_DATA;
+typedef struct _DnsRecord {
+ struct _DnsRecord* pNext;
+ LPTSTR pName;
+ WORD wType;
+ WORD wDataLength;
+ union {
+ DWORD DW;
+ DNS_RECORD_FLAGS S;
+ } Flags;
+ DWORD dwTtl;
+ DWORD dwReserved;
+ union {
+ DNS_A_DATA A;
+ DNS_SOA_DATA SOA, Soa;
+ DNS_PTR_DATA PTR, Ptr, NS, Ns, CNAME, Cname, MB, Mb,
+ MD, Md, MF, Mf, MG, Mg, MR, Mr;
+ DNS_MINFO_DATA MINFO, Minfo, RP, Rp;
+ DNS_MX_DATA MX, Mx, AFSDB, Afsdb, RT, Rt;
+ DNS_TXT_DATA HINFO, Hinfo, ISDN, Isdn, TXT, Txt, X25;
+ DNS_NULL_DATA Null;
+ DNS_WKS_DATA WKS, Wks;
+ DNS_AAAA_DATA AAAA;
+ DNS_KEY_DATA KEY, Key;
+ DNS_SIG_DATA SIG, Sig;
+ DNS_ATMA_DATA ATMA, Atma;
+ DNS_NXT_DATA NXT, Nxt;
+ DNS_SRV_DATA SRV, Srv;
+ DNS_TKEY_DATA TKEY, Tkey;
+ DNS_TSIG_DATA TSIG, Tsig;
+ DNS_WINS_DATA WINS, Wins;
+ DNS_WINSR_DATA WINSR, WinsR, NBSTAT, Nbstat;
+ } Data;
+} DNS_RECORD, *PDNS_RECORD;
+typedef struct _DnsRRSet {
+ PDNS_RECORD pFirstRR;
+ PDNS_RECORD pLastRR;
+} DNS_RRSET, *PDNS_RRSET;
+
+DNS_STATUS WINAPI DnsAcquireContextHandle_A(DWORD,PVOID,HANDLE*);
+DNS_STATUS WINAPI DnsAcquireContextHandle_W(DWORD,PVOID,HANDLE*);
+DNS_STATUS WINAPI DnsExtractRecordsFromMessage_W(PDNS_MESSAGE_BUFFER,WORD,PDNS_RECORD*);
+DNS_STATUS WINAPI DnsExtractRecordsFromMessage_UTF8(PDNS_MESSAGE_BUFFER,WORD,PDNS_RECORD*);
+DNS_STATUS WINAPI DnsModifyRecordsInSet_A(PDNS_RECORD,PDNS_RECORD,DWORD,HANDLE,PIP4_ARRAY,PVOID);
+DNS_STATUS WINAPI DnsModifyRecordsInSet_W(PDNS_RECORD,PDNS_RECORD,DWORD,HANDLE,PIP4_ARRAY,PVOID);
+DNS_STATUS WINAPI DnsModifyRecordsInSet_UTF8(PDNS_RECORD,PDNS_RECORD,DWORD,HANDLE,PIP4_ARRAY,PVOID);
+BOOL WINAPI DnsNameCompare_A(LPSTR,LPSTR);
+BOOL WINAPI DnsNameCompare_W(LPWSTR,LPWSTR);
+DNS_STATUS WINAPI DnsQuery_A(PCSTR,WORD,DWORD,PIP4_ARRAY,PDNS_RECORD*,PVOID*);
+DNS_STATUS WINAPI DnsQuery_W(PCWSTR,WORD,DWORD,PIP4_ARRAY,PDNS_RECORD*,PVOID*);
+DNS_STATUS WINAPI DnsQuery_UTF8(PCSTR,WORD,DWORD,PIP4_ARRAY,PDNS_RECORD*,PVOID*);
+DNS_STATUS WINAPI DnsQueryConfig(DNS_CONFIG_TYPE,DWORD,PWSTR,PVOID,PVOID,PDWORD);
+BOOL WINAPI DnsRecordCompare(PDNS_RECORD,PDNS_RECORD);
+PDNS_RECORD WINAPI DnsRecordCopyEx(PDNS_RECORD,DNS_CHARSET,DNS_CHARSET);
+void WINAPI DnsRecordListFree(PDNS_RECORD,DNS_FREE_TYPE);
+BOOL WINAPI DnsRecordSetCompare(PDNS_RECORD,PDNS_RECORD,PDNS_RECORD*,PDNS_RECORD*);
+PDNS_RECORD WINAPI DnsRecordSetCopyEx(PDNS_RECORD,DNS_CHARSET,DNS_CHARSET);
+PDNS_RECORD WINAPI DnsRecordSetDetach(PDNS_RECORD);
+void WINAPI DnsReleaseContextHandle(HANDLE);
+DNS_STATUS WINAPI DnsReplaceRecordSetA(PDNS_RECORD,DWORD,HANDLE,PIP4_ARRAY,PVOID);
+DNS_STATUS WINAPI DnsReplaceRecordSetW(PDNS_RECORD,DWORD,HANDLE,PIP4_ARRAY,PVOID);
+DNS_STATUS WINAPI DnsReplaceRecordSetUTF8(PDNS_RECORD,DWORD,HANDLE,PIP4_ARRAY,PVOID);
+DNS_STATUS WINAPI DnsValidateName_A(LPCSTR,DNS_NAME_FORMAT);
+DNS_STATUS WINAPI DnsValidateName_W(LPCWSTR, DNS_NAME_FORMAT);
+DNS_STATUS WINAPI DnsValidateName_UTF8(LPCSTR,DNS_NAME_FORMAT);
+BOOL WINAPI DnsWriteQuestionToBuffer_W(PDNS_MESSAGE_BUFFER,LPDWORD,LPWSTR,WORD,WORD,BOOL);
+BOOL WINAPI DnsWriteQuestionToBuffer_UTF8(PDNS_MESSAGE_BUFFER,LPDWORD,LPSTR,WORD,WORD,BOOL);
+
+#ifdef UNICODE
+#define DnsAcquireContextHandle DnsAcquireContextHandle_W
+#define DnsModifyRecordsInSet DnsModifyRecordsInSet_W
+#define DnsNameCompare DnsNameCompare_W
+#define DnsQuery DnsQuery_W
+#define DnsReplaceRecordSet DnsReplaceRecordSetW
+#define DnsValidateName DnsValidateName_W
+#else
+#define DnsAcquireContextHandle DnsAcquireContextHandle_A
+#define DnsModifyRecordsInSet DnsModifyRecordsInSet_A
+#define DnsNameCompare DnsNameCompare_A
+#define DnsQuery DnsQuery_A
+#define DnsReplaceRecordSet DnsReplaceRecordSetA
+#define DnsValidateName DnsValidateName_A
+#endif
+
+#endif /* RC_INVOKED */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _WINDNS_H */
diff --git a/tcc/include/winapi/windows.h b/tcc/include/winapi/windows.h
new file mode 100644
index 0000000..97e037e
--- /dev/null
+++ b/tcc/include/winapi/windows.h
@@ -0,0 +1,131 @@
+/*
+ windows.h - main header file for the Win32 API
+
+ Written by Anders Norlander <anorland@hem2.passagen.se>
+
+ This file is part of a free library for the Win32 API.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+*/
+#ifndef _WINDOWS_H
+#define _WINDOWS_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+/* translate GCC target defines to MS equivalents. Keep this synchronized
+ with winnt.h. */
+#if defined(__i686__) && !defined(_M_IX86)
+#define _M_IX86 600
+#elif defined(__i586__) && !defined(_M_IX86)
+#define _M_IX86 500
+#elif defined(__i486__) && !defined(_M_IX86)
+#define _M_IX86 400
+#elif defined(__i386__) && !defined(_M_IX86)
+#define _M_IX86 300
+#endif
+#if defined(_M_IX86) && !defined(_X86_)
+#define _X86_
+#elif defined(_M_ALPHA) && !defined(_ALPHA_)
+#define _ALPHA_
+#elif defined(_M_PPC) && !defined(_PPC_)
+#define _PPC_
+#elif defined(_M_MRX000) && !defined(_MIPS_)
+#define _MIPS_
+#elif defined(_M_M68K) && !defined(_68K_)
+#define _68K_
+#endif
+
+#ifdef RC_INVOKED
+/* winresrc.h includes the necessary headers */
+#include <winresrc.h>
+#else
+
+#include <stdarg.h>
+#include <windef.h>
+#include <wincon.h>
+#include <winbase.h>
+#if !(defined NOGDI || defined _WINGDI_H)
+#include <wingdi.h>
+#endif
+#ifndef _WINUSER_H
+#include <winuser.h>
+#endif
+#ifndef _WINNLS_H
+#include <winnls.h>
+#endif
+#ifndef _WINVER_H
+#include <winver.h>
+#endif
+#ifndef _WINNETWK_H
+#include <winnetwk.h>
+#endif
+#ifndef _WINREG_H
+#include <winreg.h>
+#endif
+#ifndef _WINSVC_H
+#include <winsvc.h>
+#endif
+
+#ifndef WIN32_LEAN_AND_MEAN
+#include <cderr.h>
+#include <dde.h>
+#include <ddeml.h>
+#include <dlgs.h>
+#include <imm.h>
+#include <lzexpand.h>
+#include <mmsystem.h>
+#include <nb30.h>
+#include <rpc.h>
+#include <shellapi.h>
+#include <winperf.h>
+#ifndef NOGDI
+#include <commdlg.h>
+#include <winspool.h>
+#endif
+#if defined(Win32_Winsock)
+#warning "The Win32_Winsock macro name is deprecated.\
+ Please use __USE_W32_SOCKETS instead"
+#ifndef __USE_W32_SOCKETS
+#define __USE_W32_SOCKETS
+#endif
+#endif
+#if defined(__USE_W32_SOCKETS) || !(defined(__CYGWIN__) || defined(__MSYS__) || defined(_UWIN))
+#if (_WIN32_WINNT >= 0x0400)
+#include <winsock2.h>
+/*
+ * MS likes to include mswsock.h here as well,
+ * but that can cause undefined symbols if
+ * winsock2.h is included before windows.h
+ */
+#else
+#include <winsock.h>
+#endif /* (_WIN32_WINNT >= 0x0400) */
+#endif
+#ifndef NOGDI
+/* In older versions we disallowed COM declarations in __OBJC__
+ because of conflicts with @interface directive. Define _OBJC_NO_COM
+ to keep this behaviour. */
+#if !defined (_OBJC_NO_COM)
+#if (__GNUC__ >= 3) || defined (__WATCOMC__)
+#include <ole2.h>
+#endif
+#endif /* _OBJC_NO_COM */
+#endif
+
+#endif /* WIN32_LEAN_AND_MEAN */
+
+#endif /* RC_INVOKED */
+
+#ifdef __OBJC__
+/* FIXME: Not undefining BOOL here causes all BOOLs to be WINBOOL (int),
+ but undefining it causes trouble as well if a file is included after
+ windows.h
+*/
+#undef BOOL
+#endif
+
+#endif
diff --git a/tcc/include/winapi/windowsx.h b/tcc/include/winapi/windowsx.h
new file mode 100644
index 0000000..460718e
--- /dev/null
+++ b/tcc/include/winapi/windowsx.h
@@ -0,0 +1,544 @@
+#ifndef _WINDOWSX_H
+#define _WINDOWSX_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#define WM_CTLCOLOR 25
+#define Button_Enable(hwndCtl,fEnable) EnableWindow((hwndCtl),(fEnable))
+#define Button_GetCheck(hwndCtl) ((int)(DWORD)SendMessage((hwndCtl),BM_GETCHECK,0,0))
+#define Button_GetState(hwndCtl) ((int)(DWORD)SendMessage((hwndCtl),BM_GETSTATE,0,0))
+#define Button_GetText(hwndCtl,lpch,cchMax) GetWindowText((hwndCtl),(lpch),(cchMax))
+#define Button_GetTextLength(hwndCtl) GetWindowTextLength(hwndCtl)
+#define Button_SetCheck(hwndCtl,check) ((void)SendMessage((hwndCtl),BM_SETCHECK,(WPARAM)(int)(check),0))
+#define Button_SetState(hwndCtl,state) ((UINT)(DWORD)SendMessage((hwndCtl),BM_SETSTATE,(WPARAM)(int)(state),0))
+#define Button_SetStyle(hwndCtl,style,fRedraw) ((void)SendMessage((hwndCtl),BM_SETSTYLE,(WPARAM)LOWORD(style),MAKELPARAM(((fRedraw) ? TRUE : FALSE),0)))
+#define Button_SetText(hwndCtl,lpsz) SetWindowText((hwndCtl),(lpsz))
+#define CheckDefDlgRecursion(pfRecursion) if (*(pfRecursion)) {*(pfRecursion) = FALSE; return FALSE; }
+#define ComboBox_AddItemData(hwndCtl,data) ((int)(DWORD)SendMessage((hwndCtl),CB_ADDSTRING,0,(LPARAM)(data)))
+#define ComboBox_AddString(hwndCtl,lpsz) ((int)(DWORD)SendMessage((hwndCtl),CB_ADDSTRING,0,(LPARAM)(LPCTSTR)(lpsz)))
+#define ComboBox_DeleteString(hwndCtl,index) ((int)(DWORD)SendMessage((hwndCtl),CB_DELETESTRING,(WPARAM)(int)(index),0))
+#define ComboBox_Dir(hwndCtl,attrs,lpszFileSpec) ((int)(DWORD)SendMessage((hwndCtl),CB_DIR,(WPARAM)(UINT)(attrs),(LPARAM)(LPCTSTR)(lpszFileSpec)))
+#define ComboBox_Enable(hwndCtl,fEnable) EnableWindow((hwndCtl),(fEnable))
+#define ComboBox_FindItemData(hwndCtl,indexStart,data) ((int)(DWORD)SendMessage((hwndCtl),CB_FINDSTRING,(WPARAM)(int)(indexStart),(LPARAM)(data)))
+#define ComboBox_FindString(hwndCtl,indexStart,lpszFind) ((int)(DWORD)SendMessage((hwndCtl),CB_FINDSTRING,(WPARAM)(int)(indexStart),(LPARAM)(LPCTSTR)(lpszFind)))
+#define ComboBox_FindStringExact(hwndCtl,indexStart,lpszFind) ((int)(DWORD)SendMessage((hwndCtl),CB_FINDSTRINGEXACT,(WPARAM)(int)(indexStart),(LPARAM)(LPCTSTR)(lpszFind)))
+#define ComboBox_GetCount(hwndCtl) ((int)(DWORD)SendMessage((hwndCtl),CB_GETCOUNT,0,0))
+#define ComboBox_GetCurSel(hwndCtl) ((int)(DWORD)SendMessage((hwndCtl),CB_GETCURSEL,0,0))
+#define ComboBox_GetDroppedControlRect(hwndCtl,lprc) ((void)SendMessage((hwndCtl),CB_GETDROPPEDCONTROLRECT,0,(LPARAM)(RECT*)(lprc)))
+#define ComboBox_GetDroppedState(hwndCtl) ((BOOL)(DWORD)SendMessage((hwndCtl),CB_GETDROPPEDSTATE,0,0))
+#define ComboBox_GetEditSel(hwndCtl) ((DWORD)SendMessage((hwndCtl),CB_GETEDITSEL,0,0))
+#define ComboBox_GetExtendedUI(hwndCtl) ((UINT)(DWORD)SendMessage((hwndCtl),CB_GETEXTENDEDUI,0,0))
+#define ComboBox_GetItemData(hwndCtl,index) ((LRESULT)(DWORD)SendMessage((hwndCtl),CB_GETITEMDATA,(WPARAM)(int)(index),0))
+#define ComboBox_GetItemHeight(hwndCtl) ((int)(DWORD)SendMessage((hwndCtl),CB_GETITEMHEIGHT,0,0))
+#define ComboBox_GetLBText(hwndCtl,index,lpszBuffer) ((int)(DWORD)SendMessage((hwndCtl),CB_GETLBTEXT,(WPARAM)(int)(index),(LPARAM)(LPCTSTR)(lpszBuffer)))
+#define ComboBox_GetLBTextLen(hwndCtl,index) ((int)(DWORD)SendMessage((hwndCtl),CB_GETLBTEXTLEN,(WPARAM)(int)(index),0))
+#define ComboBox_GetText(hwndCtl,lpch,cchMax) GetWindowText((hwndCtl),(lpch),(cchMax))
+#define ComboBox_GetTextLength(hwndCtl) GetWindowTextLength(hwndCtl)
+#define ComboBox_InsertItemData(hwndCtl,index,data) ((int)(DWORD)SendMessage((hwndCtl),CB_INSERTSTRING,(WPARAM)(int)(index),(LPARAM)(data)))
+#define ComboBox_InsertString(hwndCtl,index,lpsz) ((int)(DWORD)SendMessage((hwndCtl),CB_INSERTSTRING,(WPARAM)(int)(index),(LPARAM)(LPCTSTR)(lpsz)))
+#define ComboBox_LimitText(hwndCtl,cchLimit) ((int)(DWORD)SendMessage((hwndCtl),CB_LIMITTEXT,(WPARAM)(int)(cchLimit),0))
+#define ComboBox_ResetContent(hwndCtl) ((int)(DWORD)SendMessage((hwndCtl),CB_RESETCONTENT,0,0))
+#define ComboBox_SelectItemData(hwndCtl,indexStart,data) ((int)(DWORD)SendMessage((hwndCtl),CB_SELECTSTRING,(WPARAM)(int)(indexStart),(LPARAM)(data)))
+#define ComboBox_SelectString(hwndCtl,indexStart,lpszSelect) ((int)(DWORD)SendMessage((hwndCtl),CB_SELECTSTRING,(WPARAM)(int)(indexStart),(LPARAM)(LPCTSTR)(lpszSelect)))
+#define ComboBox_SetCurSel(hwndCtl,index) ((int)(DWORD)SendMessage((hwndCtl),CB_SETCURSEL,(WPARAM)(int)(index),0))
+#define ComboBox_SetEditSel(hwndCtl,ichStart,ichEnd) ((int)(DWORD)SendMessage((hwndCtl),CB_SETEDITSEL,0,MAKELPARAM((ichStart),(ichEnd))))
+#define ComboBox_SetExtendedUI(hwndCtl,flags) ((int)(DWORD)SendMessage((hwndCtl),CB_SETEXTENDEDUI,(WPARAM)(UINT)(flags),0))
+#define ComboBox_SetItemData(hwndCtl,index,data) ((int)(DWORD)SendMessage((hwndCtl),CB_SETITEMDATA,(WPARAM)(int)(index),(LPARAM)(data)))
+#define ComboBox_SetItemHeight(hwndCtl,index,cyItem) ((int)(DWORD)SendMessage((hwndCtl),CB_SETITEMHEIGHT,(WPARAM)(int)(index),(LPARAM)(int)cyItem))
+#define ComboBox_SetText(hwndCtl,lpsz) SetWindowText((hwndCtl),(lpsz))
+#define ComboBox_ShowDropdown(hwndCtl,fShow) ((BOOL)(DWORD)SendMessage((hwndCtl),CB_SHOWDROPDOWN,(WPARAM)(BOOL)(fShow),0))
+#define CopyRgn(hrgnDst,hrgnSrc) CombineRgn(hrgnDst,hrgnSrc,0,RGN_COPY)
+#define DECLARE_HANDLE32 DECLARE_HANDLE
+#define DefDlgProcEx(hwnd,msg,wParam,lParam,pfRecursion) (*(pfRecursion) = TRUE,DefDlgProc(hwnd,msg,wParam,lParam))
+#define DeleteBitmap(hbm) DeleteObject((HGDIOBJ)(HBITMAP)(hbm))
+#define DeleteBrush(hbr) DeleteObject((HGDIOBJ)(HBRUSH)(hbr))
+#define DeleteFont(hfont) DeleteObject((HGDIOBJ)(HFONT)(hfont))
+#define DeletePalette(hpal) DeleteObject((HGDIOBJ)(HPALETTE)(hpal))
+#define DeletePen(hpen) DeleteObject((HGDIOBJ)(HPEN)(hpen))
+#define DeleteRgn(hrgn) DeleteObject((HGDIOBJ)(HRGN)(hrgn))
+#define Edit_CanUndo(hwndCtl) ((BOOL)(DWORD)SendMessage((hwndCtl),EM_CANUNDO,0,0))
+#define Edit_EmptyUndoBuffer(hwndCtl) ((void)SendMessage((hwndCtl),EM_EMPTYUNDOBUFFER,0,0))
+#define Edit_Enable(hwndCtl,fEnable) EnableWindow((hwndCtl),(fEnable))
+#define Edit_FmtLines(hwndCtl,fAddEOL) ((BOOL)(DWORD)SendMessage((hwndCtl),EM_FMTLINES,(WPARAM)(BOOL)(fAddEOL),0))
+#define Edit_GetFirstVisibleLine(hwndCtl) ((int)(DWORD)SendMessage((hwndCtl),EM_GETFIRSTVISIBLELINE,0,0))
+#define Edit_GetHandle(hwndCtl) ((HLOCAL)(UINT)(DWORD)SendMessage((hwndCtl),EM_GETHANDLE,0,0))
+#define Edit_GetLine(hwndCtl,line,lpch,cchMax) ((*((int*)(lpch)) = (cchMax)),((int)(DWORD)SendMessage((hwndCtl),EM_GETLINE,(WPARAM)(int)(line),(LPARAM)(LPTSTR)(lpch))))
+#define Edit_GetLineCount(hwndCtl) ((int)(DWORD)SendMessage((hwndCtl),EM_GETLINECOUNT,0,0))
+#define Edit_GetModify(hwndCtl) ((BOOL)(DWORD)SendMessage((hwndCtl),EM_GETMODIFY,0,0))
+#define Edit_GetPasswordChar(hwndCtl) ((TCHAR)(DWORD)SendMessage((hwndCtl),EM_GETPASSWORDCHAR,0,0))
+#define Edit_GetRect(hwndCtl,lprc) ((void)SendMessage((hwndCtl),EM_GETRECT,0,(LPARAM)(RECT*)(lprc)))
+#define Edit_GetSel(hwndCtl) ((DWORD)SendMessage((hwndCtl),EM_GETSEL,0,0))
+#define Edit_GetText(hwndCtl,lpch,cchMax) GetWindowText((hwndCtl),(lpch),(cchMax))
+#define Edit_GetTextLength(hwndCtl) GetWindowTextLength(hwndCtl)
+#define Edit_GetWordBreakProc(hwndCtl) ((EDITWORDBREAKPROC)SendMessage((hwndCtl),EM_GETWORDBREAKPROC,0,0))
+#define Edit_LimitText(hwndCtl,cchMax) ((void)SendMessage((hwndCtl),EM_LIMITTEXT,(WPARAM)(cchMax),0))
+#define Edit_LineFromChar(hwndCtl,ich) ((int)(DWORD)SendMessage((hwndCtl),EM_LINEFROMCHAR,(WPARAM)(int)(ich),0))
+#define Edit_LineIndex(hwndCtl,line) ((int)(DWORD)SendMessage((hwndCtl),EM_LINEINDEX,(WPARAM)(int)(line),0))
+#define Edit_LineLength(hwndCtl,line) ((int)(DWORD)SendMessage((hwndCtl),EM_LINELENGTH,(WPARAM)(int)(line),0))
+#define Edit_ReplaceSel(hwndCtl,lpszReplace) ((void)SendMessage((hwndCtl),EM_REPLACESEL,0,(LPARAM)(LPCTSTR)(lpszReplace)))
+#define Edit_Scroll(hwndCtl,dv,dh) ((void)SendMessage((hwndCtl),EM_LINESCROLL,(WPARAM)(dh),(LPARAM)(dv)))
+#define Edit_ScrollCaret(hwndCtl) ((BOOL)(DWORD)SendMessage((hwndCtl),EM_SCROLLCARET,0,0))
+#define Edit_SetHandle(hwndCtl,h) ((void)SendMessage((hwndCtl),EM_SETHANDLE,(WPARAM)(UINT)(HLOCAL)(h),0))
+#define Edit_SetModify(hwndCtl,fModified) ((void)SendMessage((hwndCtl),EM_SETMODIFY,(WPARAM)(UINT)(fModified),0))
+#define Edit_SetPasswordChar(hwndCtl,ch) ((void)SendMessage((hwndCtl),EM_SETPASSWORDCHAR,(WPARAM)(UINT)(ch),0))
+#define Edit_SetReadOnly(hwndCtl,fReadOnly) ((BOOL)(DWORD)SendMessage((hwndCtl),EM_SETREADONLY,(WPARAM)(BOOL)(fReadOnly),0))
+#define Edit_SetRect(hwndCtl,lprc) ((void)SendMessage((hwndCtl),EM_SETRECT,0,(LPARAM)(const RECT*)(lprc)))
+#define Edit_SetRectNoPaint(hwndCtl,lprc) ((void)SendMessage((hwndCtl),EM_SETRECTNP,0,(LPARAM)(const RECT*)(lprc)))
+#define Edit_SetSel(hwndCtl,ichStart,ichEnd) ((void)SendMessage((hwndCtl),EM_SETSEL,(ichStart),(ichEnd)))
+#define Edit_SetTabStops(hwndCtl,cTabs,lpTabs) ((void)SendMessage((hwndCtl),EM_SETTABSTOPS,(WPARAM)(int)(cTabs),(LPARAM)(const int*)(lpTabs)))
+#define Edit_SetText(hwndCtl,lpsz) SetWindowText((hwndCtl),(lpsz))
+#define Edit_SetWordBreakProc(hwndCtl,lpfnWordBreak) ((void)SendMessage((hwndCtl),EM_SETWORDBREAKPROC,0,(LPARAM)(EDITWORDBREAKPROC)(lpfnWordBreak)))
+#define Edit_Undo(hwndCtl) ((BOOL)(DWORD)SendMessage((hwndCtl),EM_UNDO,0,0))
+#define FORWARD_WM_ACTIVATE(hwnd,state,hwndActDeact,fMinimized,fn) (void)(fn)((hwnd),WM_ACTIVATE,MAKEWPARAM((state),(fMinimized)),(LPARAM)(HWND)(hwndActDeact))
+#define FORWARD_WM_ACTIVATEAPP(hwnd,fActivate,dwThreadId,fn) (void)(fn)((hwnd),WM_ACTIVATEAPP,(WPARAM)(BOOL)(fActivate),(LPARAM)(dwThreadId))
+#define FORWARD_WM_ASKCBFORMATNAME(hwnd,cchMax,rgchName,fn) (void)(fn)((hwnd),WM_ASKCBFORMATNAME,(WPARAM)(int)(cchMax),(LPARAM)(rgchName))
+#define FORWARD_WM_CANCELMODE(hwnd,fn) (void)(fn)((hwnd),WM_CANCELMODE,0,0)
+#define FORWARD_WM_CHANGECBCHAIN(hwnd,hwndRemove,hwndNext,fn) (void)(fn)((hwnd),WM_CHANGECBCHAIN,(WPARAM)(HWND)(hwndRemove),(LPARAM)(HWND)(hwndNext))
+#define FORWARD_WM_CHAR(hwnd,ch,cRepeat,fn) (void)(fn)((hwnd),WM_CHAR,(WPARAM)(TCHAR)(ch),MAKELPARAM((cRepeat),0))
+#define FORWARD_WM_CHARTOITEM(hwnd,ch,hwndListBox,iCaret,fn) (int)(DWORD)(fn)((hwnd),WM_CHARTOITEM,MAKEWPARAM((UINT)(iCaret),(UINT)(ch)),(LPARAM)(hwndListBox))
+#define FORWARD_WM_CHILDACTIVATE(hwnd,fn) (void)(fn)((hwnd),WM_CHILDACTIVATE,0,0)
+#define FORWARD_WM_CLEAR(hwnd,fn) (void)(fn)((hwnd),WM_CLEAR,0,0)
+#define FORWARD_WM_CLOSE(hwnd,fn) (void)(fn)((hwnd),WM_CLOSE,0,0)
+#define FORWARD_WM_COMMAND(hwnd,id,hwndCtl,codeNotify,fn) (void)(fn)((hwnd),WM_COMMAND,MAKEWPARAM((UINT)(id),(UINT)(codeNotify)),(LPARAM)(HWND)(hwndCtl))
+#define FORWARD_WM_COMMNOTIFY(hwnd,cid,flags,fn) (void)(fn)((hwnd),WM_COMMNOTIFY,(WPARAM)(cid),MAKELPARAM((flags),0))
+#define FORWARD_WM_COMPACTING(hwnd,compactRatio,fn) (void)(fn)((hwnd),WM_COMPACTING,(WPARAM)(UINT)(compactRatio),0)
+#define FORWARD_WM_COMPAREITEM(hwnd,lpCompareItem,fn) (int)(DWORD)(fn)((hwnd),WM_COMPAREITEM,(WPARAM)(((const COMPAREITEMSTRUCT*)(lpCompareItem))->CtlID),(LPARAM)(const COMPAREITEMSTRUCT*)(lpCompareItem))
+#define FORWARD_WM_COPY(hwnd,fn) (void)(fn)((hwnd),WM_COPY,0,0)
+#define FORWARD_WM_CREATE(hwnd,lpCreateStruct,fn) (BOOL)(DWORD)(fn)((hwnd),WM_CREATE,0,(LPARAM)(LPCREATESTRUCT)(lpCreateStruct))
+#define FORWARD_WM_CTLCOLORBTN(hwnd,hdc,hwndChild,fn) (HBRUSH)(UINT)(DWORD)(fn)((hwnd),WM_CTLCOLORBTN,(WPARAM)(HDC)(hdc),(LPARAM)(HWND)(hwndChild))
+#define FORWARD_WM_CTLCOLORDLG(hwnd,hdc,hwndChild,fn) (HBRUSH)(UINT)(DWORD)(fn)((hwnd),WM_CTLCOLORDLG,(WPARAM)(HDC)(hdc),(LPARAM)(HWND)(hwndChild))
+#define FORWARD_WM_CTLCOLOREDIT(hwnd,hdc,hwndChild,fn) (HBRUSH)(UINT)(DWORD)(fn)((hwnd),WM_CTLCOLOREDIT,(WPARAM)(HDC)(hdc),(LPARAM)(HWND)(hwndChild))
+#define FORWARD_WM_CTLCOLORLISTBOX(hwnd,hdc,hwndChild,fn) (HBRUSH)(UINT)(DWORD)(fn)((hwnd),WM_CTLCOLORLISTBOX,(WPARAM)(HDC)(hdc),(LPARAM)(HWND)(hwndChild))
+#define FORWARD_WM_CTLCOLORMSGBOX(hwnd,hdc,hwndChild,fn) (HBRUSH)(UINT)(DWORD)(fn)((hwnd),WM_CTLCOLORMSGBOX,(WPARAM)(HDC)(hdc),(LPARAM)(HWND)(hwndChild))
+#define FORWARD_WM_CTLCOLORSCROLLBAR(hwnd,hdc,hwndChild,fn) (HBRUSH)(UINT)(DWORD)(fn)((hwnd),WM_CTLCOLORSCROLLBAR,(WPARAM)(HDC)(hdc),(LPARAM)(HWND)(hwndChild))
+#define FORWARD_WM_CTLCOLORSTATIC(hwnd,hdc,hwndChild,fn) (HBRUSH)(UINT)(DWORD)(fn)((hwnd),WM_CTLCOLORSTATIC,(WPARAM)(HDC)(hdc),(LPARAM)(HWND)(hwndChild))
+#define FORWARD_WM_CUT(hwnd,fn) (void)(fn)((hwnd),WM_CUT,0,0)
+#define FORWARD_WM_DEADCHAR(hwnd,ch,cRepeat,fn) (void)(fn)((hwnd),WM_DEADCHAR,(WPARAM)(TCHAR)(ch),MAKELPARAM((cRepeat),0))
+#define FORWARD_WM_DELETEITEM(hwnd,lpDeleteItem,fn) (void)(fn)((hwnd),WM_DELETEITEM,(WPARAM)(((const DELETEITEMSTRUCT*)(lpDeleteItem))->CtlID),(LPARAM)(const DELETEITEMSTRUCT*)(lpDeleteItem))
+#define FORWARD_WM_DESTROY(hwnd,fn) (void)(fn)((hwnd),WM_DESTROY,0,0)
+#define FORWARD_WM_DESTROYCLIPBOARD(hwnd,fn) (void)(fn)((hwnd),WM_DESTROYCLIPBOARD,0,0)
+#define FORWARD_WM_DEVMODECHANGE(hwnd,lpszDeviceName,fn) (void)(fn)((hwnd),WM_DEVMODECHANGE,0,(LPARAM)(LPCTSTR)(lpszDeviceName))
+#define FORWARD_WM_DRAWCLIPBOARD(hwnd,fn) (void)(fn)((hwnd),WM_DRAWCLIPBOARD,0,0)
+#define FORWARD_WM_DRAWITEM(hwnd,lpDrawItem,fn) (void)(fn)((hwnd),WM_DRAWITEM,(WPARAM)(((const DRAWITEMSTRUCT*)lpDrawItem)->CtlID),(LPARAM)(const DRAWITEMSTRUCT*)(lpDrawItem))
+#define FORWARD_WM_DROPFILES(hwnd,hdrop,fn) (void)(fn)((hwnd),WM_DROPFILES,(WPARAM)(HDROP)(hdrop),0)
+#define FORWARD_WM_ENABLE(hwnd,fEnable,fn) (void)(fn)((hwnd),WM_ENABLE,(WPARAM)(BOOL)(fEnable),0)
+#define FORWARD_WM_ENDSESSION(hwnd,fEnding,fn) (void)(fn)((hwnd),WM_ENDSESSION,(WPARAM)(BOOL)(fEnding),0)
+#define FORWARD_WM_ENTERIDLE(hwnd,source,hwndSource,fn) (void)(fn)((hwnd),WM_ENTERIDLE,(WPARAM)(UINT)(source),(LPARAM)(HWND)(hwndSource))
+#define FORWARD_WM_ERASEBKGND(hwnd,hdc,fn) (BOOL)(DWORD)(fn)((hwnd),WM_ERASEBKGND,(WPARAM)(HDC)(hdc),0)
+#define FORWARD_WM_FONTCHANGE(hwnd,fn) (void)(fn)((hwnd),WM_FONTCHANGE,0,0)
+#define FORWARD_WM_GETDLGCODE(hwnd,lpmsg,fn) (UINT)(DWORD)(fn)((hwnd),WM_GETDLGCODE,(lpmsg ? lpmsg->wParam : 0),(LPARAM)(LPMSG)(lpmsg))
+#define FORWARD_WM_GETFONT(hwnd,fn) (HFONT)(UINT)(DWORD)(fn)((hwnd),WM_GETFONT,0,0)
+#define FORWARD_WM_GETMINMAXINFO(hwnd,lpMinMaxInfo,fn) (void)(fn)((hwnd),WM_GETMINMAXINFO,0,(LPARAM)(LPMINMAXINFO)(lpMinMaxInfo))
+#define FORWARD_WM_GETTEXT(hwnd,cchTextMax,lpszText,fn) (int)(DWORD)(fn)((hwnd),WM_GETTEXT,(WPARAM)(int)(cchTextMax),(LPARAM)(LPTSTR)(lpszText))
+#define FORWARD_WM_GETTEXTLENGTH(hwnd,fn) (int)(DWORD)(fn)((hwnd),WM_GETTEXTLENGTH,0,0)
+#define FORWARD_WM_HSCROLL(hwnd,hwndCtl,code,pos,fn) (void)(fn)((hwnd),WM_HSCROLL,MAKEWPARAM((UINT)(int)(code),(UINT)(int)(pos)),(LPARAM)(UINT)(hwndCtl))
+#define FORWARD_WM_HSCROLLCLIPBOARD(hwnd,hwndCBViewer,code,pos,fn) (void)(fn)((hwnd),WM_HSCROLLCLIPBOARD,(WPARAM)(HWND)(hwndCBViewer),MAKELPARAM((code),(pos)))
+#define FORWARD_WM_ICONERASEBKGND(hwnd,hdc,fn) (BOOL)(DWORD)(fn)((hwnd),WM_ICONERASEBKGND,(WPARAM)(HDC)(hdc),0)
+#define FORWARD_WM_INITDIALOG(hwnd,hwndFocus,lParam,fn) (BOOL)(DWORD)(fn)((hwnd),WM_INITDIALOG,(WPARAM)(HWND)(hwndFocus),(lParam))
+#define FORWARD_WM_INITMENU(hwnd,hMenu,fn) (void)(fn)((hwnd),WM_INITMENU,(WPARAM)(HMENU)(hMenu),0)
+#define FORWARD_WM_INITMENUPOPUP(hwnd,hMenu,item,fSystemMenu,fn) (void)(fn)((hwnd),WM_INITMENUPOPUP,(WPARAM)(HMENU)(hMenu),MAKELPARAM((item),(fSystemMenu)))
+#define FORWARD_WM_KEYDOWN(hwnd,vk,cRepeat,flags,fn) (void)(fn)((hwnd),WM_KEYDOWN,(WPARAM)(UINT)(vk),MAKELPARAM((cRepeat),(flags)))
+#define FORWARD_WM_KEYUP(hwnd,vk,cRepeat,flags,fn) (void)(fn)((hwnd),WM_KEYUP,(WPARAM)(UINT)(vk),MAKELPARAM((cRepeat),(flags)))
+#define FORWARD_WM_KILLFOCUS(hwnd,hwndNewFocus,fn) (void)(fn)((hwnd),WM_KILLFOCUS,(WPARAM)(HWND)(hwndNewFocus),0)
+#define FORWARD_WM_LBUTTONDOWN(hwnd,fDoubleClick,x,y,keyFlags,fn) (void)(fn)((hwnd),(fDoubleClick) ? WM_LBUTTONDBLCLK : WM_LBUTTONDOWN,(WPARAM)(UINT)(keyFlags),MAKELPARAM((x),(y)))
+#define FORWARD_WM_LBUTTONUP(hwnd,x,y,keyFlags,fn) (void)(fn)((hwnd),WM_LBUTTONUP,(WPARAM)(UINT)(keyFlags),MAKELPARAM((x),(y)))
+#define FORWARD_WM_MBUTTONDOWN(hwnd,fDoubleClick,x,y,keyFlags,fn) (void)(fn)((hwnd),(fDoubleClick) ? WM_MBUTTONDBLCLK : WM_MBUTTONDOWN,(WPARAM)(UINT)(keyFlags),MAKELPARAM((x),(y)))
+#define FORWARD_WM_MBUTTONUP(hwnd,x,y,keyFlags,fn) (void)(fn)((hwnd),WM_MBUTTONUP,(WPARAM)(UINT)(keyFlags),MAKELPARAM((x),(y)))
+#define FORWARD_WM_MDIACTIVATE(hwnd,fActive,hwndActivate,hwndDeactivate,fn) (void)(fn)(hwnd,WM_MDIACTIVATE,(WPARAM)(hwndDeactivate),(LPARAM)(hwndActivate))
+#define FORWARD_WM_MDICASCADE(hwnd,cmd,fn) (BOOL)(DWORD)(fn)((hwnd),WM_MDICASCADE,(WPARAM)(cmd),0)
+#define FORWARD_WM_MDICREATE(hwnd,lpmcs,fn) (HWND)(UINT)(DWORD)(fn)((hwnd),WM_MDICREATE,0,(LPARAM)(LPMDICREATESTRUCT)(lpmcs))
+#define FORWARD_WM_MDIDESTROY(hwnd,hwndDestroy,fn) (void)(fn)((hwnd),WM_MDIDESTROY,(WPARAM)(hwndDestroy),0)
+#define FORWARD_WM_MDIGETACTIVE(hwnd,fn) (HWND)(UINT)(DWORD)(fn)((hwnd),WM_MDIGETACTIVE,0,0)
+#define FORWARD_WM_MDIICONARRANGE(hwnd,fn) (void)(fn)((hwnd),WM_MDIICONARRANGE,0,0)
+#define FORWARD_WM_MDIMAXIMIZE(hwnd,hwndMaximize,fn) (void)(fn)((hwnd),WM_MDIMAXIMIZE,(WPARAM)(hwndMaximize),0)
+#define FORWARD_WM_MDINEXT(hwnd,hwndCur,fPrev,fn) (HWND)(UINT)(DWORD)(fn)((hwnd),WM_MDINEXT,(WPARAM)(hwndCur),(LPARAM)(fPrev))
+#define FORWARD_WM_MDIRESTORE(hwnd,hwndRestore,fn) (void)(fn)((hwnd),WM_MDIRESTORE,(WPARAM)(hwndRestore),0)
+#define FORWARD_WM_MDISETMENU(hwnd,fRefresh,hmenuFrame,hmenuWindow,fn) (HMENU)(UINT)(DWORD)(fn)((hwnd),WM_MDISETMENU,(WPARAM)((fRefresh) ? (hmenuFrame) : 0),(LPARAM)(hmenuWindow))
+#define FORWARD_WM_MDITILE(hwnd,cmd,fn) (BOOL)(DWORD)(fn)((hwnd),WM_MDITILE,(WPARAM)(cmd),0)
+#define FORWARD_WM_MEASUREITEM(hwnd,lpMeasureItem,fn) (void)(fn)((hwnd),WM_MEASUREITEM,(WPARAM)(((MEASUREITEMSTRUCT*)lpMeasureItem)->CtlID),(LPARAM)(MEASUREITEMSTRUCT*)(lpMeasureItem))
+#define FORWARD_WM_MENUCHAR(hwnd,ch,flags,hmenu,fn) (DWORD)(fn)((hwnd),WM_MENUCHAR,MAKEWPARAM(flags,(WORD)(ch)),(LPARAM)(HMENU)(hmenu))
+#define FORWARD_WM_MENUSELECT(hwnd,hmenu,item,hmenuPopup,flags,fn) (void)(fn)((hwnd),WM_MENUSELECT,MAKEWPARAM((item),(flags)),(LPARAM)(HMENU)((hmenu) ? (hmenu) : (hmenuPopup)))
+#define FORWARD_WM_MOUSEACTIVATE(hwnd,hwndTopLevel,codeHitTest,msg,fn) (int)(DWORD)(fn)((hwnd),WM_MOUSEACTIVATE,(WPARAM)(HWND)(hwndTopLevel),MAKELPARAM((codeHitTest),(msg)))
+#define FORWARD_WM_MOUSEMOVE(hwnd,x,y,keyFlags,fn) (void)(fn)((hwnd),WM_MOUSEMOVE,(WPARAM)(UINT)(keyFlags),MAKELPARAM((x),(y)))
+#define FORWARD_WM_MOVE(hwnd,x,y,fn) (void)(fn)((hwnd),WM_MOVE,0,MAKELPARAM((x),(y)))
+#define FORWARD_WM_NCACTIVATE(hwnd,fActive,hwndActDeact,fMinimized,fn) (BOOL)(DWORD)(fn)((hwnd),WM_NCACTIVATE,(WPARAM)(BOOL)(fActive),0)
+#define FORWARD_WM_NCCALCSIZE(hwnd,fCalcValidRects,lpcsp,fn) (UINT)(DWORD)(fn)((hwnd),WM_NCCALCSIZE,0,(LPARAM)(NCCALCSIZE_PARAMS*)(lpcsp))
+#define FORWARD_WM_NCCREATE(hwnd,lpCreateStruct,fn) (BOOL)(DWORD)(fn)((hwnd),WM_NCCREATE,0,(LPARAM)(LPCREATESTRUCT)(lpCreateStruct))
+#define FORWARD_WM_NCDESTROY(hwnd,fn) (void)(fn)((hwnd),WM_NCDESTROY,0,0)
+#define FORWARD_WM_NCHITTEST(hwnd,x,y,fn) (UINT)(DWORD)(fn)((hwnd),WM_NCHITTEST,0,MAKELPARAM((x),(y)))
+#define FORWARD_WM_NCLBUTTONDOWN(hwnd,fDoubleClick,x,y,codeHitTest,fn) (void)(fn)((hwnd),(fDoubleClick) ? WM_NCLBUTTONDBLCLK : WM_NCLBUTTONDOWN,(WPARAM)(UINT)(codeHitTest),MAKELPARAM((x),(y)))
+#define FORWARD_WM_NCLBUTTONUP(hwnd,x,y,codeHitTest,fn) (void)(fn)((hwnd),WM_NCLBUTTONUP,(WPARAM)(UINT)(codeHitTest),MAKELPARAM((x),(y)))
+#define FORWARD_WM_NCMBUTTONDOWN(hwnd,fDoubleClick,x,y,codeHitTest,fn) (void)(fn)((hwnd),(fDoubleClick) ? WM_NCMBUTTONDBLCLK : WM_NCMBUTTONDOWN,(WPARAM)(UINT)(codeHitTest),MAKELPARAM((x),(y)) )
+#define FORWARD_WM_NCMBUTTONUP(hwnd,x,y,codeHitTest,fn) (void)(fn)((hwnd),WM_NCMBUTTONUP,(WPARAM)(UINT)(codeHitTest),MAKELPARAM((x),(y)) )
+#define FORWARD_WM_NCMOUSEMOVE(hwnd,x,y,codeHitTest,fn) (void)(fn)((hwnd),WM_NCMOUSEMOVE,(WPARAM)(UINT)(codeHitTest),MAKELPARAM((x),(y)))
+#define FORWARD_WM_NCPAINT(hwnd,hrgn,fn) (void)(fn)((hwnd),WM_NCPAINT,(WPARAM)(HRGN)(hrgn),0)
+#define FORWARD_WM_NCRBUTTONDOWN(hwnd,fDoubleClick,x,y,codeHitTest,fn) (void)(fn)((hwnd),(fDoubleClick) ? WM_NCRBUTTONDBLCLK : WM_NCRBUTTONDOWN,(WPARAM)(UINT)(codeHitTest),MAKELPARAM((x),(y)) )
+#define FORWARD_WM_NCRBUTTONUP(hwnd,x,y,codeHitTest,fn) (void)(fn)((hwnd),WM_NCRBUTTONUP,(WPARAM)(UINT)(codeHitTest),MAKELPARAM((x),(y)) )
+#define FORWARD_WM_NEXTDLGCTL(hwnd,hwndSetFocus,fNext,fn) (HWND)(UINT)(DWORD)(fn)((hwnd),WM_NEXTDLGCTL,(WPARAM)(HWND)(hwndSetFocus),(LPARAM)(fNext))
+#define FORWARD_WM_PAINT(hwnd,fn) (void)(fn)((hwnd),WM_PAINT,0,0)
+#define FORWARD_WM_PAINTCLIPBOARD(hwnd,hwndCBViewer,lpPaintStruct,fn) (void)(fn)((hwnd),WM_PAINTCLIPBOARD,(WPARAM)(HWND)(hwndCBViewer),(LPARAM)(LPPAINTSTRUCT)(lpPaintStruct))
+#define FORWARD_WM_PALETTECHANGED(hwnd,hwndPaletteChange,fn) (void)(fn)((hwnd),WM_PALETTECHANGED,(WPARAM)(HWND)(hwndPaletteChange),0)
+#define FORWARD_WM_PALETTEISCHANGING(hwnd,hwndPaletteChange,fn) (void)(fn)((hwnd),WM_PALETTEISCHANGING,(WPARAM)(HWND)(hwndPaletteChange),0)
+#define FORWARD_WM_PARENTNOTIFY(hwnd,msg,hwndChild,idChild,fn) (void)(fn)((hwnd),WM_PARENTNOTIFY,MAKEWPARAM(msg,idChild),(LPARAM)(hwndChild))
+#define FORWARD_WM_PASTE(hwnd,fn) (void)(fn)((hwnd),WM_PASTE,0,0)
+#define FORWARD_WM_POWER(hwnd,code,fn) (void)(fn)((hwnd),WM_POWER,(WPARAM)(int)(code),0)
+#define FORWARD_WM_QUERYDRAGICON(hwnd,fn) (HICON)(UINT)(DWORD)(fn)((hwnd),WM_QUERYDRAGICON,0,0)
+#define FORWARD_WM_QUERYENDSESSION(hwnd,fn) (BOOL)(DWORD)(fn)((hwnd),WM_QUERYENDSESSION,0,0)
+#define FORWARD_WM_QUERYNEWPALETTE(hwnd,fn) (BOOL)(DWORD)(fn)((hwnd),WM_QUERYNEWPALETTE,0,0)
+#define FORWARD_WM_QUERYOPEN(hwnd,fn) (BOOL)(DWORD)(fn)((hwnd),WM_QUERYOPEN,0,0)
+#define FORWARD_WM_QUEUESYNC(hwnd,fn) (void)(fn)((hwnd),WM_QUEUESYNC,0,0)
+#define FORWARD_WM_QUIT(hwnd,exitCode,fn) (void)(fn)((hwnd),WM_QUIT,(WPARAM)(exitCode),0)
+#define FORWARD_WM_RBUTTONDOWN(hwnd,fDoubleClick,x,y,keyFlags,fn) (void)(fn)((hwnd),(fDoubleClick) ? WM_RBUTTONDBLCLK : WM_RBUTTONDOWN,(WPARAM)(UINT)(keyFlags),MAKELPARAM((x),(y)))
+#define FORWARD_WM_RBUTTONUP(hwnd,x,y,keyFlags,fn) (void)(fn)((hwnd),WM_RBUTTONUP,(WPARAM)(UINT)(keyFlags),MAKELPARAM((x),(y)))
+#define FORWARD_WM_RENDERALLFORMATS(hwnd,fn) (void)(fn)((hwnd),WM_RENDERALLFORMATS,0,0)
+#define FORWARD_WM_RENDERFORMAT(hwnd,fmt,fn) (HANDLE)(UINT)(DWORD)(fn)((hwnd),WM_RENDERFORMAT,(WPARAM)(UINT)(fmt),0)
+#define FORWARD_WM_SETCURSOR(hwnd,hwndCursor,codeHitTest,msg,fn) (BOOL)(DWORD)(fn)((hwnd),WM_SETCURSOR,(WPARAM)(HWND)(hwndCursor),MAKELPARAM((codeHitTest),(msg)))
+#define FORWARD_WM_SETFOCUS(hwnd,hwndOldFocus,fn) (void)(fn)((hwnd),WM_SETFOCUS,(WPARAM)(HWND)(hwndOldFocus),0)
+#define FORWARD_WM_SETFONT(hwnd,hfont,fRedraw,fn) (void)(fn)((hwnd),WM_SETFONT,(WPARAM)(HFONT)(hfont),(LPARAM)(BOOL)(fRedraw))
+#define FORWARD_WM_SETREDRAW(hwnd,fRedraw,fn) (void)(fn)((hwnd),WM_SETREDRAW,(WPARAM)(BOOL)(fRedraw),0)
+#define FORWARD_WM_SETTEXT(hwnd,lpszText,fn) (void)(fn)((hwnd),WM_SETTEXT,0,(LPARAM)(LPCTSTR)(lpszText))
+#define FORWARD_WM_SHOWWINDOW(hwnd,fShow,status,fn) (void)(fn)((hwnd),WM_SHOWWINDOW,(WPARAM)(BOOL)(fShow),(LPARAM)(UINT)(status))
+#define FORWARD_WM_SIZE(hwnd,state,cx,cy,fn) (void)(fn)((hwnd),WM_SIZE,(WPARAM)(UINT)(state),MAKELPARAM((cx),(cy)))
+#define FORWARD_WM_SIZECLIPBOARD(hwnd,hwndCBViewer,lprc,fn) (void)(fn)((hwnd),WM_SIZECLIPBOARD,(WPARAM)(HWND)(hwndCBViewer),(LPARAM)(LPRECT)(lprc))
+#define FORWARD_WM_SPOOLERSTATUS(hwnd,status,cJobInQueue,fn) (void)(fn)((hwnd),WM_SPOOLERSTATUS,(WPARAM)(status),MAKELPARAM((cJobInQueue),0))
+#define FORWARD_WM_SYSCHAR(hwnd,ch,cRepeat,fn) (void)(fn)((hwnd),WM_SYSCHAR,(WPARAM)(TCHAR)(ch),MAKELPARAM((cRepeat),0))
+#define FORWARD_WM_SYSCOLORCHANGE(hwnd,fn) (void)(fn)((hwnd),WM_SYSCOLORCHANGE,0,0)
+#define FORWARD_WM_SYSCOMMAND(hwnd,cmd,x,y,fn) (void)(fn)((hwnd),WM_SYSCOMMAND,(WPARAM)(UINT)(cmd),MAKELPARAM((x),(y)))
+#define FORWARD_WM_SYSDEADCHAR(hwnd,ch,cRepeat,fn) (void)(fn)((hwnd),WM_SYSDEADCHAR,(WPARAM)(TCHAR)(ch),MAKELPARAM((cRepeat),0))
+#define FORWARD_WM_SYSKEYDOWN(hwnd,vk,cRepeat,flags,fn) (void)(fn)((hwnd),WM_SYSKEYDOWN,(WPARAM)(UINT)(vk),MAKELPARAM((cRepeat),(flags)))
+#define FORWARD_WM_SYSKEYUP(hwnd,vk,cRepeat,flags,fn) (void)(fn)((hwnd),WM_SYSKEYUP,(WPARAM)(UINT)(vk),MAKELPARAM((cRepeat),(flags)))
+#define FORWARD_WM_SYSTEMERROR(hwnd,errCode,fn) 0
+#define FORWARD_WM_TIMECHANGE(hwnd,fn) (void)(fn)((hwnd),WM_TIMECHANGE,0,0)
+#define FORWARD_WM_TIMER(hwnd,id,fn) (void)(fn)((hwnd),WM_TIMER,(WPARAM)(UINT)(id),0)
+#define FORWARD_WM_UNDO(hwnd,fn) (void)(fn)((hwnd),WM_UNDO,0,0)
+#define FORWARD_WM_VKEYTOITEM(hwnd,vk,hwndListBox,iCaret,fn) (int)(DWORD)(fn)((hwnd),WM_VKEYTOITEM,MAKEWPARAM((vk),(iCaret)),(LPARAM)(hwndListBox))
+#define FORWARD_WM_VSCROLL(hwnd,hwndCtl,code,pos,fn) (void)(fn)((hwnd),WM_VSCROLL,MAKEWPARAM((UINT)(int)(code),(UINT)(int)(pos)),(LPARAM)(HWND)(hwndCtl))
+#define FORWARD_WM_VSCROLLCLIPBOARD(hwnd,hwndCBViewer,code,pos,fn) (void)(fn)((hwnd),WM_VSCROLLCLIPBOARD,(WPARAM)(HWND)(hwndCBViewer),MAKELPARAM((code),(pos)))
+#define FORWARD_WM_WINDOWPOSCHANGED(hwnd,lpwpos,fn) (void)(fn)((hwnd),WM_WINDOWPOSCHANGED,0,(LPARAM)(const LPWINDOWPOS)(lpwpos))
+#define FORWARD_WM_WINDOWPOSCHANGING(hwnd,lpwpos,fn) (BOOL)(DWORD)(fn)((hwnd),WM_WINDOWPOSCHANGING,0,(LPARAM)(LPWINDOWPOS)(lpwpos))
+#define FORWARD_WM_WININICHANGE(hwnd,lpszSectionName,fn) (void)(fn)((hwnd),WM_WININICHANGE,0,(LPARAM)(LPCTSTR)(lpszSectionName))
+#define GET_EM_LINESCROLL_MPS(vert,horz) (WPARAM)horz,(LONG)vert
+#define GET_EM_SETSEL_END(wp,lp) (lp)
+#define GET_EM_SETSEL_MPS(iStart,iEnd) (WPARAM)(iStart),(LONG)(iEnd)
+#define GET_EM_SETSEL_START(wp,lp) (INT)(wp)
+#define GET_LPARAM(wp,lp) (lp)
+#define GET_WM_ACTIVATE_FMINIMIZED(wp,lp) (BOOL)HIWORD(wp)
+#define GET_WM_ACTIVATE_HWND(wp,lp) (HWND)(lp)
+#define GET_WM_ACTIVATE_MPS(s,fmin,hwnd) (WPARAM)MAKELONG((s),(fmin)),(LONG)(hwnd)
+#define GET_WM_ACTIVATE_STATE(wp,lp) LOWORD(wp)
+#define GET_WM_CHANGECBCHAIN_HWNDNEXT(wp,lp) (HWND)(lp)
+#define GET_WM_CHARTOITEM_CHAR(wp,lp) (TCHAR)LOWORD(wp)
+#define GET_WM_CHARTOITEM_HWND(wp,lp) (HWND)(lp)
+#define GET_WM_CHARTOITEM_MPS(ch,pos,hwnd) (WPARAM)MAKELONG((pos),(ch)),(LONG)(hwnd)
+#define GET_WM_CHARTOITEM_POS(wp,lp) HIWORD(wp)
+#define GET_WM_COMMAND_CMD(wp,lp) HIWORD(wp)
+#define GET_WM_COMMAND_HWND(wp,lp) (HWND)(lp)
+#define GET_WM_COMMAND_ID(wp,lp) LOWORD(wp)
+#define GET_WM_COMMAND_MPS(id,hwnd,cmd) (WPARAM)MAKELONG(id,cmd),(LONG)(hwnd)
+#define GET_WM_CTLCOLOR_HDC(wp,lp,msg) (HDC)(wp)
+#define GET_WM_CTLCOLOR_HWND(wp,lp,msg) (HWND)(lp)
+#define GET_WM_CTLCOLOR_MPS(hdc,hwnd,type) (WPARAM)(hdc),(LONG)(hwnd)
+#define GET_WM_CTLCOLOR_MSG(type) (WORD)(WM_CTLCOLORMSGBOX+(type))
+#define GET_WM_CTLCOLOR_TYPE(wp,lp,msg) (WORD)(msg - WM_CTLCOLORMSGBOX)
+#define GET_WM_HSCROLL_CODE(wp,lp) LOWORD(wp)
+#define GET_WM_HSCROLL_HWND(wp,lp) (HWND)(lp)
+#define GET_WM_HSCROLL_MPS(code,pos,hwnd) (WPARAM)MAKELONG(code,pos),(LONG)(hwnd)
+#define GET_WM_HSCROLL_POS(wp,lp) HIWORD(wp)
+#define GET_WM_MDIACTIVATE_FACTIVATE(hwnd,wp,lp) (lp == (LONG)hwnd)
+#define GET_WM_MDIACTIVATE_HWNDACTIVATE(wp,lp) (HWND)(lp)
+#define GET_WM_MDIACTIVATE_HWNDDEACT(wp,lp) (HWND)(wp)
+#define GET_WM_MDIACTIVATE_MPS(f,hwndD,hwndA) (WPARAM)(hwndA),0
+#define GET_WM_MDISETMENU_MPS(hmenuF,hmenuW) (WPARAM)hmenuF,(LONG)hmenuW
+#define GET_WM_MENUCHAR_CHAR(wp,lp) (TCHAR)LOWORD(wp)
+#define GET_WM_MENUCHAR_FMENU(wp,lp) (BOOL)HIWORD(wp)
+#define GET_WM_MENUCHAR_HMENU(wp,lp) (HMENU)(lp)
+#define GET_WM_MENUCHAR_MPS(ch,hmenu,f) (WPARAM)MAKELONG(ch,f),(LONG)(hmenu)
+#define GET_WM_MENUSELECT_CMD(wp,lp) LOWORD(wp)
+#define GET_WM_MENUSELECT_FLAGS(wp,lp) (UINT)(int)(short)HIWORD(wp)
+#define GET_WM_MENUSELECT_HMENU(wp,lp) (HMENU)(lp)
+#define GET_WM_MENUSELECT_MPS(cmd,f,hmenu) (WPARAM)MAKELONG(cmd,f),(LONG)(hmenu)
+#define GET_WM_PARENTNOTIFY2_MPS(msg,x,y) (WPARAM)MAKELONG(0,msg),MAKELONG(x,y)
+#define GET_WM_PARENTNOTIFY_HWNDCHILD(wp,lp) (HWND)(lp)
+#define GET_WM_PARENTNOTIFY_ID(wp,lp) HIWORD(wp)
+#define GET_WM_PARENTNOTIFY_MPS(msg,id,hwnd) (WPARAM)MAKELONG(id,msg),(LONG)(hwnd)
+#define GET_WM_PARENTNOTIFY_MSG(wp,lp) LOWORD(wp)
+#define GET_WM_PARENTNOTIFY_X(wp,lp) (int)(short)LOWORD(lp)
+#define GET_WM_PARENTNOTIFY_Y(wp,lp) (int)(short)HIWORD(lp)
+#define GET_WM_VKEYTOITEM_CODE(wp,lp) (int)(short)LOWORD(wp)
+#define GET_WM_VKEYTOITEM_HWND(wp,lp) (HWND)(lp)
+#define GET_WM_VKEYTOITEM_ITEM(wp,lp) HIWORD(wp)
+#define GET_WM_VKEYTOITEM_MPS(code,item,hwnd) (WPARAM)MAKELONG(item,code),(LONG)(hwnd)
+#define GET_WM_VSCROLL_CODE(wp,lp) LOWORD(wp)
+#define GET_WM_VSCROLL_HWND(wp,lp) (HWND)(lp)
+#define GET_WM_VSCROLL_MPS(code,pos,hwnd) (WPARAM)MAKELONG(code,pos),(LONG)(hwnd)
+#define GET_WM_VSCROLL_POS(wp,lp) HIWORD(wp)
+#define GET_WPARAM(wp,lp) (wp)
+#define GET_X_LPARAM(lp) ((int)(short)LOWORD(lp))
+#define GET_Y_LPARAM(lp) ((int)(short)HIWORD(lp))
+#define GetFirstChild(hwnd) GetTopWindow(hwnd)
+#define GetFirstSibling(hwnd) GetWindow(hwnd,GW_HWNDFIRST)
+#define GetInstanceModule(hInstance) (HMODULE)(hInstance)
+#define GetLastSibling(hwnd) GetWindow(hwnd,GW_HWNDLAST)
+#define GetNextSibling(hwnd) GetWindow(hwnd,GW_HWNDNEXT)
+#define GetPrevSibling(hwnd) GetWindow(hwnd,GW_HWNDPREV)
+#define GetStockBrush(i) ((HBRUSH)GetStockObject(i))
+#define GetStockFont(i) ((HFONT)GetStockObject(i))
+#define GetStockPen(i) ((HPEN)GetStockObject(i))
+#define GetWindowExStyle(hwnd) ((DWORD)GetWindowLong(hwnd,GWL_EXSTYLE))
+#define GetWindowFont(hwnd) FORWARD_WM_GETFONT((hwnd),SendMessage)
+#define GetWindowID(hwnd) GetDlgCtrlID(hwnd)
+#define GetWindowInstance(hwnd) ((HMODULE)GetWindowLong(hwnd,GWL_HINSTANCE))
+#define GetWindowOwner(hwnd) GetWindow(hwnd,GW_OWNER)
+#define GetWindowStyle(hwnd) ((DWORD)GetWindowLong(hwnd,GWL_STYLE))
+#define GlobalAllocPtr(flags,cb) (GlobalLock(GlobalAlloc((flags),(cb))))
+#define GlobalFreePtr(lp) (GlobalUnlockPtr(lp),(BOOL)GlobalFree(GlobalPtrHandle(lp)))
+#define GlobalLockPtr(lp) ((BOOL)GlobalLock(GlobalPtrHandle(lp)))
+#define GlobalPtrHandle(lp) ((HGLOBAL)GlobalHandle(lp))
+#define GlobalReAllocPtr(lp,cbNew,flags) (GlobalUnlockPtr(lp),GlobalLock(GlobalReAlloc(GlobalPtrHandle(lp) ,(cbNew),(flags))))
+#define GlobalUnlockPtr(lp) GlobalUnlock(GlobalPtrHandle(lp))
+#define HANDLE_MSG(hwnd,message,fn) case (message): return HANDLE_##message((hwnd),(wParam),(lParam),(fn))
+#define HANDLE_WM_ACTIVATE(hwnd,wParam,lParam,fn) ((fn)((hwnd),(UINT)LOWORD(wParam),(HWND)(lParam),(BOOL)HIWORD(wParam)),0)
+#define HANDLE_WM_ACTIVATEAPP(hwnd,wParam,lParam,fn) ((fn)((hwnd),(BOOL)(wParam),(DWORD)(lParam)),0)
+#define HANDLE_WM_ASKCBFORMATNAME(hwnd,wParam,lParam,fn) ((fn)((hwnd),(int)(wParam),(LPTSTR)(lParam)),0)
+#define HANDLE_WM_CANCELMODE(hwnd,wParam,lParam,fn) ((fn)(hwnd),0)
+#define HANDLE_WM_CHANGECBCHAIN(hwnd,wParam,lParam,fn) ((fn)((hwnd),(HWND)(wParam),(HWND)(lParam)),0)
+#define HANDLE_WM_CHAR(hwnd,wParam,lParam,fn) ((fn)((hwnd),(TCHAR)(wParam),(int)(short)LOWORD(lParam)),0)
+#define HANDLE_WM_CHARTOITEM(hwnd,wParam,lParam,fn) (LRESULT)(DWORD)(int)(fn)((hwnd),(UINT)LOWORD(wParam),(HWND)(lParam),(int)(short)HIWORD(wParam))
+#define HANDLE_WM_CHILDACTIVATE(hwnd,wParam,lParam,fn) ((fn)(hwnd),0)
+#define HANDLE_WM_CLEAR(hwnd,wParam,lParam,fn) ((fn)(hwnd),0)
+#define HANDLE_WM_CLOSE(hwnd,wParam,lParam,fn) ((fn)(hwnd),0)
+#define HANDLE_WM_COMMAND(hwnd,wParam,lParam,fn) ((fn)((hwnd),(int)(LOWORD(wParam)),(HWND)(lParam),(UINT)HIWORD(wParam)),0)
+#define HANDLE_WM_COMMNOTIFY(hwnd,wParam,lParam,fn) ((fn)((hwnd),(int)(wParam),(UINT)LOWORD(lParam)),0)
+#define HANDLE_WM_COMPACTING(hwnd,wParam,lParam,fn) ((fn)((hwnd),(UINT)(wParam)),0)
+#define HANDLE_WM_COMPAREITEM(hwnd,wParam,lParam,fn) (LRESULT)(DWORD)(int)(fn)((hwnd),(const COMPAREITEMSTRUCT*)(lParam))
+#define HANDLE_WM_COPY(hwnd,wParam,lParam,fn) ((fn)(hwnd),0)
+#define HANDLE_WM_CREATE(hwnd,wParam,lParam,fn) ((fn)((hwnd),(LPCREATESTRUCT)(lParam)) ? 0 : (LRESULT)-1L)
+#define HANDLE_WM_CTLCOLORBTN(hwnd,wParam,lParam,fn) (LRESULT)(DWORD)(UINT)(HBRUSH)(fn)((hwnd),(HDC)(wParam),(HWND)(lParam),CTLCOLOR_BTN)
+#define HANDLE_WM_CTLCOLORDLG(hwnd,wParam,lParam,fn) (LRESULT)(DWORD)(UINT)(HBRUSH)(fn)((hwnd),(HDC)(wParam),(HWND)(lParam),CTLCOLOR_DLG)
+#define HANDLE_WM_CTLCOLOREDIT(hwnd,wParam,lParam,fn) (LRESULT)(DWORD)(UINT)(HBRUSH)(fn)((hwnd),(HDC)(wParam),(HWND)(lParam),CTLCOLOR_EDIT)
+#define HANDLE_WM_CTLCOLORLISTBOX(hwnd,wParam,lParam,fn) (LRESULT)(DWORD)(UINT)(HBRUSH)(fn)((hwnd),(HDC)(wParam),(HWND)(lParam),CTLCOLOR_LISTBOX)
+#define HANDLE_WM_CTLCOLORMSGBOX(hwnd,wParam,lParam,fn) (LRESULT)(DWORD)(UINT)(HBRUSH)(fn)((hwnd),(HDC)(wParam),(HWND)(lParam),CTLCOLOR_MSGBOX)
+#define HANDLE_WM_CTLCOLORSCROLLBAR(hwnd,wParam,lParam,fn) (LRESULT)(DWORD)(UINT)(HBRUSH)(fn)((hwnd),(HDC)(wParam),(HWND)(lParam),CTLCOLOR_SCROLLBAR)
+#define HANDLE_WM_CTLCOLORSTATIC(hwnd,wParam,lParam,fn) (LRESULT)(DWORD)(UINT)(HBRUSH)(fn)((hwnd),(HDC)(wParam),(HWND)(lParam),CTLCOLOR_STATIC)
+#define HANDLE_WM_CUT(hwnd,wParam,lParam,fn) ((fn)(hwnd),0)
+#define HANDLE_WM_DEADCHAR(hwnd,wParam,lParam,fn) ((fn)((hwnd),(TCHAR)(wParam),(int)(short)LOWORD(lParam)),0)
+#define HANDLE_WM_DELETEITEM(hwnd,wParam,lParam,fn) ((fn)((hwnd),(const DELETEITEMSTRUCT*)(lParam)),0)
+#define HANDLE_WM_DESTROY(hwnd,wParam,lParam,fn) ((fn)(hwnd),0)
+#define HANDLE_WM_DESTROYCLIPBOARD(hwnd,wParam,lParam,fn) ((fn)(hwnd),0)
+#define HANDLE_WM_DEVMODECHANGE(hwnd,wParam,lParam,fn) ((fn)((hwnd),(LPCTSTR)(lParam)),0)
+#define HANDLE_WM_DRAWCLIPBOARD(hwnd,wParam,lParam,fn) ((fn)(hwnd),0)
+#define HANDLE_WM_DRAWITEM(hwnd,wParam,lParam,fn) ((fn)((hwnd),(const DRAWITEMSTRUCT*)(lParam)),0)
+#define HANDLE_WM_DROPFILES(hwnd,wParam,lParam,fn) ((fn)((hwnd),(HDROP)(wParam)),0)
+#define HANDLE_WM_ENABLE(hwnd,wParam,lParam,fn) ((fn)((hwnd),(BOOL)(wParam)),0)
+#define HANDLE_WM_ENDSESSION(hwnd,wParam,lParam,fn) ((fn)((hwnd),(BOOL)(wParam)),0)
+#define HANDLE_WM_ENTERIDLE(hwnd,wParam,lParam,fn) ((fn)((hwnd),(UINT)(wParam),(HWND)(lParam)),0)
+#define HANDLE_WM_ERASEBKGND(hwnd,wParam,lParam,fn) (LRESULT)(DWORD)(BOOL)(fn)((hwnd),(HDC)(wParam))
+#define HANDLE_WM_FONTCHANGE(hwnd,wParam,lParam,fn) ((fn)(hwnd),0)
+#define HANDLE_WM_GETDLGCODE(hwnd,wParam,lParam,fn) (LRESULT)(DWORD)(UINT)(fn)(hwnd,(LPMSG)(lParam))
+#define HANDLE_WM_GETFONT(hwnd,wParam,lParam,fn) (LRESULT)(DWORD)(UINT)(HFONT)(fn)(hwnd)
+#define HANDLE_WM_GETMINMAXINFO(hwnd,wParam,lParam,fn) ((fn)((hwnd),(LPMINMAXINFO)(lParam)),0)
+#define HANDLE_WM_GETTEXT(hwnd,wParam,lParam,fn) (LRESULT)(DWORD)(int)(fn)((hwnd),(int)(wParam),(LPTSTR)(lParam))
+#define HANDLE_WM_GETTEXTLENGTH(hwnd,wParam,lParam,fn) (LRESULT)(DWORD)(int)(fn)(hwnd)
+#define HANDLE_WM_HSCROLL(hwnd,wParam,lParam,fn) ((fn)((hwnd),(HWND)(lParam),(UINT)(LOWORD(wParam)),(int)(short)HIWORD(wParam)),0)
+#define HANDLE_WM_HSCROLLCLIPBOARD(hwnd,wParam,lParam,fn) ((fn)((hwnd),(HWND)(wParam),(UINT)LOWORD(lParam),(int)(short)HIWORD(lParam)),0)
+#define HANDLE_WM_ICONERASEBKGND(hwnd,wParam,lParam,fn) (LRESULT)(DWORD)(BOOL)(fn)((hwnd),(HDC)(wParam))
+#define HANDLE_WM_INITDIALOG(hwnd,wParam,lParam,fn) (LRESULT)(DWORD)(UINT)(BOOL)(fn)((hwnd),(HWND)(wParam),lParam)
+#define HANDLE_WM_INITMENU(hwnd,wParam,lParam,fn) ((fn)((hwnd),(HMENU)(wParam)),0)
+#define HANDLE_WM_INITMENUPOPUP(hwnd,wParam,lParam,fn) ((fn)((hwnd),(HMENU)(wParam),(UINT)LOWORD(lParam),(BOOL)HIWORD(lParam)),0)
+#define HANDLE_WM_KEYDOWN(hwnd,wParam,lParam,fn) ((fn)((hwnd),(UINT)(wParam),TRUE,(int)(short)LOWORD(lParam),(UINT)HIWORD(lParam)),0)
+#define HANDLE_WM_KEYUP(hwnd,wParam,lParam,fn) ((fn)((hwnd),(UINT)(wParam),FALSE,(int)(short)LOWORD(lParam),(UINT)HIWORD(lParam)),0)
+#define HANDLE_WM_KILLFOCUS(hwnd,wParam,lParam,fn) ((fn)((hwnd),(HWND)(wParam)),0)
+#define HANDLE_WM_LBUTTONDBLCLK(hwnd,wParam,lParam,fn) ((fn)((hwnd),TRUE,(int)(short)LOWORD(lParam),(int)(short)HIWORD(lParam),(UINT)(wParam)),0)
+#define HANDLE_WM_LBUTTONDOWN(hwnd,wParam,lParam,fn) ((fn)((hwnd),FALSE,(int)(short)LOWORD(lParam),(int)(short)HIWORD(lParam),(UINT)(wParam)),0)
+#define HANDLE_WM_LBUTTONUP(hwnd,wParam,lParam,fn) ((fn)((hwnd),(int)(short)LOWORD(lParam),(int)(short)HIWORD(lParam),(UINT)(wParam)),0)
+#define HANDLE_WM_MBUTTONDBLCLK(hwnd,wParam,lParam,fn) ((fn)((hwnd),TRUE,(int)(short)LOWORD(lParam),(int)(short)HIWORD(lParam),(UINT)(wParam)),0)
+#define HANDLE_WM_MBUTTONDOWN(hwnd,wParam,lParam,fn) ((fn)((hwnd),FALSE,(int)(short)LOWORD(lParam),(int)(short)HIWORD(lParam),(UINT)(wParam)),0)
+#define HANDLE_WM_MBUTTONUP(hwnd,wParam,lParam,fn) ((fn)((hwnd),(int)(short)LOWORD(lParam),(int)(short)HIWORD(lParam),(UINT)(wParam)),0)
+#define HANDLE_WM_MDIACTIVATE(hwnd,wParam,lParam,fn) ((fn)((hwnd),(BOOL)(lParam == (LPARAM)hwnd),(HWND)(lParam),(HWND)(wParam)),0)
+#define HANDLE_WM_MDICASCADE(hwnd,wParam,lParam,fn) (LRESULT)(DWORD)(fn)((hwnd),(UINT)(wParam))
+#define HANDLE_WM_MDICREATE(hwnd,wParam,lParam,fn) (LRESULT)(DWORD)(UINT)(fn)((hwnd),(LPMDICREATESTRUCT)(lParam))
+#define HANDLE_WM_MDIDESTROY(hwnd,wParam,lParam,fn) ((fn)((hwnd),(HWND)(wParam)),0)
+#define HANDLE_WM_MDIGETACTIVE(hwnd,wParam,lParam,fn) (LRESULT)(DWORD)(UINT)(fn)(hwnd)
+#define HANDLE_WM_MDIICONARRANGE(hwnd,wParam,lParam,fn) ((fn)(hwnd),0)
+#define HANDLE_WM_MDIMAXIMIZE(hwnd,wParam,lParam,fn) ((fn)((hwnd),(HWND)(wParam)),0)
+#define HANDLE_WM_MDINEXT(hwnd,wParam,lParam,fn) (LRESULT)(HWND)(fn)((hwnd),(HWND)(wParam),(BOOL)lParam)
+#define HANDLE_WM_MDIRESTORE(hwnd,wParam,lParam,fn) ((fn)((hwnd),(HWND)(wParam)),0)
+#define HANDLE_WM_MDISETMENU(hwnd,wParam,lParam,fn) (LRESULT)(DWORD)(UINT)(fn)((hwnd),(BOOL)(wParam),(HMENU)(wParam),(HMENU)(lParam))
+#define HANDLE_WM_MDITILE(hwnd,wParam,lParam,fn) (LRESULT)(DWORD)(fn)((hwnd),(UINT)(wParam))
+#define HANDLE_WM_MEASUREITEM(hwnd,wParam,lParam,fn) ((fn)((hwnd),(MEASUREITEMSTRUCT*)(lParam)),0)
+#define HANDLE_WM_MENUCHAR(hwnd,wParam,lParam,fn) (LRESULT)(DWORD)(fn)((hwnd),(UINT)(LOWORD(wParam)),(UINT)HIWORD(wParam),(HMENU)(lParam))
+#define HANDLE_WM_MENUSELECT(hwnd,wParam,lParam,fn) ((fn)((hwnd),(HMENU)(lParam),(int)(LOWORD(wParam)),(HIWORD(wParam) & MF_POPUP) ? GetSubMenu((HMENU)lParam,LOWORD(wParam)) : 0,(UINT)(((short)HIWORD(wParam) == -1) ? 0xFFFFFFFF : HIWORD(wParam))),0)
+#define HANDLE_WM_MOUSEACTIVATE(hwnd,wParam,lParam,fn) (LRESULT)(DWORD)(int)(fn)((hwnd),(HWND)(wParam),(UINT)LOWORD(lParam),(UINT)HIWORD(lParam))
+#define HANDLE_WM_MOUSEMOVE(hwnd,wParam,lParam,fn) ((fn)((hwnd),(int)(short)LOWORD(lParam),(int)(short)HIWORD(lParam),(UINT)(wParam)),0)
+#define HANDLE_WM_MOVE(hwnd,wParam,lParam,fn) ((fn)((hwnd),(int)(short)LOWORD(lParam),(int)(short)HIWORD(lParam)),0)
+#define HANDLE_WM_NCACTIVATE(hwnd,wParam,lParam,fn) (LRESULT)(DWORD)(BOOL)(fn)((hwnd),(BOOL)(wParam),0,0)
+#define HANDLE_WM_NCCALCSIZE(hwnd,wParam,lParam,fn) (LRESULT)(DWORD)(UINT)(fn)((hwnd),(BOOL)(0),(NCCALCSIZE_PARAMS*)(lParam))
+#define HANDLE_WM_NCCREATE(hwnd,wParam,lParam,fn) (LRESULT)(DWORD)(BOOL)(fn)((hwnd),(LPCREATESTRUCT)(lParam))
+#define HANDLE_WM_NCDESTROY(hwnd,wParam,lParam,fn) ((fn)(hwnd),0)
+#define HANDLE_WM_NCHITTEST(hwnd,wParam,lParam,fn) (LRESULT)(DWORD)(UINT)(fn)((hwnd),(int)(short)LOWORD(lParam),(int)(short)HIWORD(lParam))
+#define HANDLE_WM_NCLBUTTONDBLCLK(hwnd,wParam,lParam,fn) ((fn)((hwnd),TRUE,(int)(short)LOWORD(lParam),(int)(short)HIWORD(lParam),(UINT)(wParam)),0)
+#define HANDLE_WM_NCLBUTTONDOWN(hwnd,wParam,lParam,fn) ((fn)((hwnd),FALSE,(int)(short)LOWORD(lParam),(int)(short)HIWORD(lParam),(UINT)(wParam)),0)
+#define HANDLE_WM_NCLBUTTONUP(hwnd,wParam,lParam,fn) ((fn)((hwnd),(int)(short)LOWORD(lParam),(int)(short)HIWORD(lParam),(UINT)(wParam)),0)
+#define HANDLE_WM_NCMBUTTONDBLCLK(hwnd,wParam,lParam,fn) ((fn)((hwnd),TRUE,(int)(short)LOWORD(lParam),(int)(short)HIWORD(lParam),(UINT)(wParam)),0)
+#define HANDLE_WM_NCMBUTTONDOWN(hwnd,wParam,lParam,fn) ((fn)((hwnd),FALSE,(int)(short)LOWORD(lParam),(int)(short)HIWORD(lParam),(UINT)(wParam)),0)
+#define HANDLE_WM_NCMBUTTONUP(hwnd,wParam,lParam,fn) ((fn)((hwnd),(int)(short)LOWORD(lParam),(int)(short)HIWORD(lParam),(UINT)(wParam)),0)
+#define HANDLE_WM_NCMOUSEMOVE(hwnd,wParam,lParam,fn) ((fn)((hwnd),(int)(short)LOWORD(lParam),(int)(short)HIWORD(lParam),(UINT)(wParam)),0)
+#define HANDLE_WM_NCPAINT(hwnd,wParam,lParam,fn) ((fn)((hwnd),(HRGN)(wParam)),0)
+#define HANDLE_WM_NCRBUTTONDBLCLK(hwnd,wParam,lParam,fn) ((fn)((hwnd),TRUE,(int)(short)LOWORD(lParam),(int)(short)HIWORD(lParam),(UINT)(wParam)),0)
+#define HANDLE_WM_NCRBUTTONDOWN(hwnd,wParam,lParam,fn) ((fn)((hwnd),FALSE,(int)(short)LOWORD(lParam),(int)(short)HIWORD(lParam),(UINT)(wParam)),0)
+#define HANDLE_WM_NCRBUTTONUP(hwnd,wParam,lParam,fn) ((fn)((hwnd),(int)(short)LOWORD(lParam),(int)(short)HIWORD(lParam),(UINT)(wParam)),0)
+#define HANDLE_WM_NEXTDLGCTL(hwnd,wParam,lParam,fn) (LRESULT)(DWORD)(UINT)(HWND)(fn)((hwnd),(HWND)(wParam),(BOOL)(lParam))
+#define HANDLE_WM_PAINT(hwnd,wParam,lParam,fn) ((fn)(hwnd),0)
+#define HANDLE_WM_PAINTCLIPBOARD(hwnd,wParam,lParam,fn) ((fn)((hwnd),(HWND)(wParam),(const LPPAINTSTRUCT)GlobalLock((HGLOBAL)(lParam))),GlobalUnlock((HGLOBAL)(lParam)),0)
+#define HANDLE_WM_PALETTECHANGED(hwnd,wParam,lParam,fn) ((fn)((hwnd),(HWND)(wParam)),0)
+#define HANDLE_WM_PALETTEISCHANGING(hwnd,wParam,lParam,fn) ((fn)((hwnd),(HWND)(wParam)),0)
+#define HANDLE_WM_PARENTNOTIFY(hwnd,wParam,lParam,fn) ((fn)((hwnd),(UINT)LOWORD(wParam),(HWND)(lParam),(UINT)HIWORD(wParam)),0)
+#define HANDLE_WM_PASTE(hwnd,wParam,lParam,fn) ((fn)(hwnd),0)
+#define HANDLE_WM_POWER(hwnd,wParam,lParam,fn) ((fn)((hwnd),(int)(wParam)),0)
+#define HANDLE_WM_QUERYDRAGICON(hwnd,wParam,lParam,fn) (LRESULT)(DWORD)(UINT)(fn)(hwnd)
+#define HANDLE_WM_QUERYENDSESSION(hwnd,wParam,lParam,fn) MAKELRESULT((BOOL)(fn)(hwnd),0)
+#define HANDLE_WM_QUERYNEWPALETTE(hwnd,wParam,lParam,fn) MAKELRESULT((BOOL)(fn)(hwnd),0)
+#define HANDLE_WM_QUERYOPEN(hwnd,wParam,lParam,fn) MAKELRESULT((BOOL)(fn)(hwnd),0)
+#define HANDLE_WM_QUEUESYNC(hwnd,wParam,lParam,fn) ((fn)(hwnd),0)
+#define HANDLE_WM_QUIT(hwnd,wParam,lParam,fn) ((fn)((hwnd),(int)(wParam)),0)
+#define HANDLE_WM_RBUTTONDBLCLK(hwnd,wParam,lParam,fn) ((fn)((hwnd),TRUE,(int)(short)LOWORD(lParam),(int)(short)HIWORD(lParam),(UINT)(wParam)),0)
+#define HANDLE_WM_RBUTTONDOWN(hwnd,wParam,lParam,fn) ((fn)((hwnd),FALSE,(int)(short)LOWORD(lParam),(int)(short)HIWORD(lParam),(UINT)(wParam)),0)
+#define HANDLE_WM_RBUTTONUP(hwnd,wParam,lParam,fn) ((fn)((hwnd),(int)(short)LOWORD(lParam),(int)(short)HIWORD(lParam),(UINT)(wParam)),0)
+#define HANDLE_WM_RENDERALLFORMATS(hwnd,wParam,lParam,fn) ((fn)(hwnd),0)
+#define HANDLE_WM_RENDERFORMAT(hwnd,wParam,lParam,fn) (LRESULT)(DWORD)(UINT)(HANDLE)(fn)((hwnd),(UINT)(wParam))
+#define HANDLE_WM_SETCURSOR(hwnd,wParam,lParam,fn) (LRESULT)(DWORD)(BOOL)(fn)((hwnd),(HWND)(wParam),(UINT)LOWORD(lParam),(UINT)HIWORD(lParam))
+#define HANDLE_WM_SETFOCUS(hwnd,wParam,lParam,fn) ((fn)((hwnd),(HWND)(wParam)),0)
+#define HANDLE_WM_SETFONT(hwnd,wParam,lParam,fn) ((fn)((hwnd),(HFONT)(wParam),(BOOL)(lParam)),0)
+#define HANDLE_WM_SETREDRAW(hwnd,wParam,lParam,fn) ((fn)((hwnd),(BOOL)(wParam)),0)
+#define HANDLE_WM_SETTEXT(hwnd,wParam,lParam,fn) ((fn)((hwnd),(LPCTSTR)(lParam)),0)
+#define HANDLE_WM_SHOWWINDOW(hwnd,wParam,lParam,fn) ((fn)((hwnd),(BOOL)(wParam),(UINT)(lParam)),0)
+#define HANDLE_WM_SIZE(hwnd,wParam,lParam,fn) ((fn)((hwnd),(UINT)(wParam),(int)(short)LOWORD(lParam),(int)(short)HIWORD(lParam)),0)
+#define HANDLE_WM_SIZECLIPBOARD(hwnd,wParam,lParam,fn) ((fn)((hwnd),(HWND)(wParam),(const LPRECT)GlobalLock((HGLOBAL)(lParam))),GlobalUnlock((HGLOBAL)(lParam)),0)
+#define HANDLE_WM_SPOOLERSTATUS(hwnd,wParam,lParam,fn) ((fn)((hwnd),(UINT)(wParam),(int)(short)LOWORD(lParam)),0)
+#define HANDLE_WM_SYSCHAR(hwnd,wParam,lParam,fn) ((fn)((hwnd),(TCHAR)(wParam),(int)(short)LOWORD(lParam)),0)
+#define HANDLE_WM_SYSCOLORCHANGE(hwnd,wParam,lParam,fn) ((fn)(hwnd),0)
+#define HANDLE_WM_SYSCOMMAND(hwnd,wParam,lParam,fn) ((fn)((hwnd),(UINT)(wParam),(int)(short)LOWORD(lParam),(int)(short)HIWORD(lParam)),0)
+#define HANDLE_WM_SYSDEADCHAR(hwnd,wParam,lParam,fn) ((fn)((hwnd),(TCHAR)(wParam),(int)(short)LOWORD(lParam)),0)
+#define HANDLE_WM_SYSKEYDOWN(hwnd,wParam,lParam,fn) ((fn)((hwnd),(UINT)(wParam),TRUE,(int)(short)LOWORD(lParam),(UINT)HIWORD(lParam)),0)
+#define HANDLE_WM_SYSKEYUP(hwnd,wParam,lParam,fn) ((fn)((hwnd),(UINT)(wParam),FALSE,(int)(short)LOWORD(lParam),(UINT)HIWORD(lParam)),0)
+#define HANDLE_WM_SYSTEMERROR(hwnd,wParam,lParam,fn) 0
+#define HANDLE_WM_TIMECHANGE(hwnd,wParam,lParam,fn) ((fn)(hwnd),0)
+#define HANDLE_WM_TIMER(hwnd,wParam,lParam,fn) ((fn)((hwnd),(UINT)(wParam)),0)
+#define HANDLE_WM_UNDO(hwnd,wParam,lParam,fn) ((fn)(hwnd),0)
+#define HANDLE_WM_VKEYTOITEM(hwnd,wParam,lParam,fn) (LRESULT)(DWORD)(int)(fn)((hwnd),(UINT)LOWORD(wParam),(HWND)(lParam),(int)(short)HIWORD(wParam))
+#define HANDLE_WM_VSCROLL(hwnd,wParam,lParam,fn) ((fn)((hwnd),(HWND)(lParam),(UINT)(LOWORD(wParam)),(int)(short)HIWORD(wParam)),0)
+#define HANDLE_WM_VSCROLLCLIPBOARD(hwnd,wParam,lParam,fn) ((fn)((hwnd),(HWND)(wParam),(UINT)LOWORD(lParam),(int)(short)HIWORD(lParam)),0)
+#define HANDLE_WM_WINDOWPOSCHANGED(hwnd,wParam,lParam,fn) ((fn)((hwnd),(const LPWINDOWPOS)(lParam)),0)
+#define HANDLE_WM_WINDOWPOSCHANGING(hwnd,wParam,lParam,fn) (LRESULT)(DWORD)(BOOL)(fn)((hwnd),(LPWINDOWPOS)(lParam))
+#define HANDLE_WM_WININICHANGE(hwnd,wParam,lParam,fn) ((fn)((hwnd),(LPCTSTR)(lParam)),0)
+#define InsetRect(lprc,dx,dy) InflateRect((lprc),-(dx),-(dy))
+#define IntersectRgn(hrgnResult,hrgnA,hrgnB) CombineRgn(hrgnResult,hrgnA,hrgnB,RGN_AND)
+#define IsLButtonDown() (GetKeyState(VK_LBUTTON) < 0)
+#define IsMButtonDown() (GetKeyState(VK_MBUTTON) < 0)
+#define IsMaximized(hwnd) IsZoomed(hwnd)
+#define IsMinimized(hwnd) IsIconic(hwnd)
+#define IsRButtonDown() (GetKeyState(VK_RBUTTON) < 0)
+#define IsRestored(hwnd) ((GetWindowStyle(hwnd) & (WS_MINIMIZE | WS_MAXIMIZE)) == 0)
+#define ListBox_AddItemData(hwndCtl,data) ((int)(DWORD)SendMessage((hwndCtl),LB_ADDSTRING,0,(LPARAM)(data)))
+#define ListBox_AddString(hwndCtl,lpsz) ((int)(DWORD)SendMessage((hwndCtl),LB_ADDSTRING,0,(LPARAM)(LPCTSTR)(lpsz)))
+#define ListBox_DeleteString(hwndCtl,index) ((int)(DWORD)SendMessage((hwndCtl),LB_DELETESTRING,(WPARAM)(int)(index),0))
+#define ListBox_Dir(hwndCtl,attrs,lpszFileSpec) ((int)(DWORD)SendMessage((hwndCtl),LB_DIR,(WPARAM)(UINT)(attrs),(LPARAM)(LPCTSTR)(lpszFileSpec)))
+#define ListBox_Enable(hwndCtl,fEnable) EnableWindow((hwndCtl),(fEnable))
+#define ListBox_FindItemData(hwndCtl,indexStart,data) ((int)(DWORD)SendMessage((hwndCtl),LB_FINDSTRING,(WPARAM)(int)(indexStart),(LPARAM)(data)))
+#define ListBox_FindString(hwndCtl,indexStart,lpszFind) ((int)(DWORD)SendMessage((hwndCtl),LB_FINDSTRING,(WPARAM)(int)(indexStart),(LPARAM)(LPCTSTR)(lpszFind)))
+#define ListBox_FindStringExact(hwndCtl,indexStart,lpszFind) ((int)(DWORD)SendMessage((hwndCtl),LB_FINDSTRINGEXACT,(WPARAM)(int)(indexStart),(LPARAM)(LPCTSTR)(lpszFind)))
+#define ListBox_GetCaretIndex(hwndCtl) ((int)(DWORD)SendMessage((hwndCtl),LB_GETCARETINDEX,0,0))
+#define ListBox_GetCount(hwndCtl) ((int)(DWORD)SendMessage((hwndCtl),LB_GETCOUNT,0,0))
+#define ListBox_GetCurSel(hwndCtl) ((int)(DWORD)SendMessage((hwndCtl),LB_GETCURSEL,0,0))
+#define ListBox_GetHorizontalExtent(hwndCtl) ((int)(DWORD)SendMessage((hwndCtl),LB_GETHORIZONTALEXTENT,0,0))
+#define ListBox_GetItemData(hwndCtl,index) ((LRESULT)(DWORD)SendMessage((hwndCtl),LB_GETITEMDATA,(WPARAM)(int)(index),0))
+#define ListBox_GetItemHeight(hwndCtl,index) ((int)(DWORD)SendMessage((hwndCtl),LB_GETITEMHEIGHT,(WPARAM)(int)(index),0))
+#define ListBox_GetItemRect(hwndCtl,index,lprc) ((int)(DWORD)SendMessage((hwndCtl),LB_GETITEMRECT,(WPARAM)(int)(index),(LPARAM)(RECT*)(lprc)))
+#define ListBox_GetSel(hwndCtl,index) ((int)(DWORD)SendMessage((hwndCtl),LB_GETSEL,(WPARAM)(int)(index),0))
+#define ListBox_GetSelCount(hwndCtl) ((int)(DWORD)SendMessage((hwndCtl),LB_GETSELCOUNT,0,0))
+#define ListBox_GetSelItems(hwndCtl,cItems,lpItems) ((int)(DWORD)SendMessage((hwndCtl),LB_GETSELITEMS,(WPARAM)(int)(cItems),(LPARAM)(int*)(lpItems)))
+#define ListBox_GetText(hwndCtl,index,lpszBuffer) ((int)(DWORD)SendMessage((hwndCtl),LB_GETTEXT,(WPARAM)(int)(index),(LPARAM)(LPCTSTR)(lpszBuffer)))
+#define ListBox_GetTextLen(hwndCtl,index) ((int)(DWORD)SendMessage((hwndCtl),LB_GETTEXTLEN,(WPARAM)(int)(index),0))
+#define ListBox_GetTopIndex(hwndCtl) ((int)(DWORD)SendMessage((hwndCtl),LB_GETTOPINDEX,0,0))
+#define ListBox_InsertItemData(hwndCtl,index,data) ((int)(DWORD)SendMessage((hwndCtl),LB_INSERTSTRING,(WPARAM)(int)(index),(LPARAM)(data)))
+#define ListBox_InsertString(hwndCtl,index,lpsz) ((int)(DWORD)SendMessage((hwndCtl),LB_INSERTSTRING,(WPARAM)(int)(index),(LPARAM)(LPCTSTR)(lpsz)))
+#define ListBox_ResetContent(hwndCtl) ((BOOL)(DWORD)SendMessage((hwndCtl),LB_RESETCONTENT,0,0))
+#define ListBox_SelItemRange(hwndCtl,fSelect,first,last) ((int)(DWORD)SendMessage((hwndCtl),LB_SELITEMRANGE,(WPARAM)(BOOL)(fSelect),MAKELPARAM((first),(last))))
+#define ListBox_SelectItemData(hwndCtl,indexStart,data) ((int)(DWORD)SendMessage((hwndCtl),LB_SELECTSTRING,(WPARAM)(int)(indexStart),(LPARAM)(data)))
+#define ListBox_SelectString(hwndCtl,indexStart,lpszFind) ((int)(DWORD)SendMessage((hwndCtl),LB_SELECTSTRING,(WPARAM)(int)(indexStart),(LPARAM)(LPCTSTR)(lpszFind)))
+#define ListBox_SetCaretIndex(hwndCtl,index) ((int)(DWORD)SendMessage((hwndCtl),LB_SETCARETINDEX,(WPARAM)(int)(index),0))
+#define ListBox_SetColumnWidth(hwndCtl,cxColumn) ((void)SendMessage((hwndCtl),LB_SETCOLUMNWIDTH,(WPARAM)(int)(cxColumn),0))
+#define ListBox_SetCurSel(hwndCtl,index) ((int)(DWORD)SendMessage((hwndCtl),LB_SETCURSEL,(WPARAM)(int)(index),0))
+#define ListBox_SetHorizontalExtent(hwndCtl,cxExtent) ((void)SendMessage((hwndCtl),LB_SETHORIZONTALEXTENT,(WPARAM)(int)(cxExtent),0))
+#define ListBox_SetItemData(hwndCtl,index,data) ((int)(DWORD)SendMessage((hwndCtl),LB_SETITEMDATA,(WPARAM)(int)(index),(LPARAM)(data)))
+#define ListBox_SetItemHeight(hwndCtl,index,cy) ((int)(DWORD)SendMessage((hwndCtl),LB_SETITEMHEIGHT,(WPARAM)(int)(index),MAKELPARAM((cy),0)))
+#define ListBox_SetSel(hwndCtl,fSelect,index) ((int)(DWORD)SendMessage((hwndCtl),LB_SETSEL,(WPARAM)(BOOL)(fSelect),(LPARAM)(index)))
+#define ListBox_SetTabStops(hwndCtl,cTabs,lpTabs) ((BOOL)(DWORD)SendMessage((hwndCtl),LB_SETTABSTOPS,(WPARAM)(int)(cTabs),(LPARAM)(int*)(lpTabs)))
+#define ListBox_SetTopIndex(hwndCtl,indexTop) ((int)(DWORD)SendMessage((hwndCtl),LB_SETTOPINDEX,(WPARAM)(int)(indexTop),0))
+#define MapWindowRect(hwndFrom,hwndTo,lprc) MapWindowPoints((hwndFrom),(hwndTo),(POINT*)(lprc),2)
+#define ScrollBar_Enable(hwndCtl,flags) EnableScrollBar((hwndCtl),SB_CTL,(flags))
+#define ScrollBar_GetPos(hwndCtl) GetScrollPos((hwndCtl),SB_CTL)
+#define ScrollBar_GetRange(hwndCtl,lpposMin,lpposMax) GetScrollRange((hwndCtl),SB_CTL,(lpposMin),(lpposMax))
+#define ScrollBar_SetPos(hwndCtl,pos,fRedraw) SetScrollPos((hwndCtl),SB_CTL,(pos),(fRedraw))
+#define ScrollBar_SetRange(hwndCtl,posMin,posMax,fRedraw) SetScrollRange((hwndCtl),SB_CTL,(posMin),(posMax),(fRedraw))
+#define ScrollBar_Show(hwndCtl,fShow) ShowWindow((hwndCtl),(fShow) ? SW_SHOWNORMAL : SW_HIDE)
+#define SelectBitmap(hdc,hbm) ((HBITMAP)SelectObject((hdc),(HGDIOBJ)(HBITMAP)(hbm)))
+#define SelectBrush(hdc,hbr) ((HBRUSH)SelectObject((hdc),(HGDIOBJ)(HBRUSH)(hbr)))
+#define SelectFont(hdc,hfont) ((HFONT)SelectObject((hdc),(HGDIOBJ)(HFONT)(hfont)))
+#define SelectPen(hdc,hpen) ((HPEN)SelectObject((hdc),(HGDIOBJ)(HPEN)(hpen)))
+#define SetDlgMsgResult(hwnd,msg,result) (( (msg) == WM_CTLCOLORMSGBOX || (msg) == WM_CTLCOLOREDIT || (msg) == WM_CTLCOLORLISTBOX || (msg) == WM_CTLCOLORBTN || (msg) == WM_CTLCOLORDLG || (msg) == WM_CTLCOLORSCROLLBAR || (msg) == WM_CTLCOLORSTATIC || (msg) == WM_COMPAREITEM || (msg) == WM_VKEYTOITEM || (msg) == WM_CHARTOITEM || (msg) == WM_QUERYDRAGICON || (msg) == WM_INITDIALOG ) ? (BOOL)(result) : (SetWindowLong((hwnd),DWL_MSGRESULT,(LPARAM)(LRESULT)(result)),TRUE))
+#define SetWindowFont(hwnd,hfont,fRedraw) FORWARD_WM_SETFONT((hwnd),(hfont),(fRedraw),SendMessage)
+#define SetWindowRedraw(hwnd,fRedraw) ((void)SendMessage(hwnd,WM_SETREDRAW,(WPARAM)(BOOL)(fRedraw),0))
+#define Static_Enable(hwndCtl,fEnable) EnableWindow((hwndCtl),(fEnable))
+#define Static_GetIcon(hwndCtl,hIcon) ((HICON)(UINT)(DWORD)SendMessage((hwndCtl),STM_GETICON,0,0))
+#define Static_GetText(hwndCtl,lpch,cchMax) GetWindowText((hwndCtl),(lpch),(cchMax))
+#define Static_GetTextLength(hwndCtl) GetWindowTextLength(hwndCtl)
+#define Static_SetIcon(hwndCtl,hIcon) ((HICON)(UINT)(DWORD)SendMessage((hwndCtl),STM_SETICON,(WPARAM)(HICON)(hIcon),0))
+#define Static_SetText(hwndCtl,lpsz) SetWindowText((hwndCtl),(lpsz))
+#define SubclassDialog(hwndDlg,lpfn) ((DLGPROC)SetWindowLong(hwndDlg,DWL_DLGPROC,(LPARAM)(DLGPROC)(lpfn)))
+#define SubclassWindow(hwnd,lpfn) ((WNDPROC)SetWindowLong((hwnd),GWL_WNDPROC,(LPARAM)(WNDPROC)(lpfn)))
+#define SubtractRgn(hrgnResult,hrgnA,hrgnB) CombineRgn(hrgnResult,hrgnA,hrgnB,RGN_DIFF)
+#define UnionRgn(hrgnResult,hrgnA,hrgnB) CombineRgn(hrgnResult,hrgnA,hrgnB,RGN_OR)
+#define XorRgn(hrgnResult,hrgnA,hrgnB) CombineRgn(hrgnResult,hrgnA,hrgnB,RGN_XOR)
+
+/* FAR versions of mem and string functions for porting from old code*/
+#define _ffree free
+#define _fmalloc malloc
+#define _frealloc realloc
+#define _fmsize _msize
+
+#define _fmemcpy memcpy
+#define _fmemmove memmove
+#define _fmemset memset
+#define _fmemcmp memcmp
+#define _fmemchr memchr
+#define _fmemccpy _memccpy
+#define _fmemicmp _memicmp
+
+#define _fstrcat strcat
+#define _fstrchr strchr
+#define _fstrcmp strcmp
+#define _fstrcpy strcpy
+#define _fstrcspn strcspn
+#define _fstrdup _strdup
+#define _fstricmp _stricmp
+#define _fstrlen strlen
+#define _fstrlwr _strlwr
+#define _fstrncat strncat
+#define _fstrncmp strncmp
+#define _fstrncpy strncpy
+#define _fstrnicmp _strnicmp
+#define _fstrnset _strnset
+#define _fstrpbrk strpbrk
+#define _fstrrchr strrchr
+#define _fstrrev _strrev
+#define _fstrset _strset
+#define _fstrspn strspn
+#define _fstrstr strstr
+#define _fstrtok strtok
+#define _fstrupr _strupr
+
+#define hmemcpy MoveMemory
+
+#endif
diff --git a/tcc/include/winapi/winerror.h b/tcc/include/winapi/winerror.h
new file mode 100644
index 0000000..6b1c73c
--- /dev/null
+++ b/tcc/include/winapi/winerror.h
@@ -0,0 +1,2283 @@
+#ifndef _WINERROR_H
+#define _WINERROR_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#define _HRESULT_TYPEDEF_(_sc) ((HRESULT)_sc)
+
+#define ERROR_SUCCESS 0L
+#define NO_ERROR 0L
+#define ERROR_INVALID_FUNCTION 1L
+#define ERROR_FILE_NOT_FOUND 2L
+#define ERROR_PATH_NOT_FOUND 3L
+#define ERROR_TOO_MANY_OPEN_FILES 4L
+#define ERROR_ACCESS_DENIED 5L
+#define ERROR_INVALID_HANDLE 6L
+#define ERROR_ARENA_TRASHED 7L
+#define ERROR_NOT_ENOUGH_MEMORY 8L
+#define ERROR_INVALID_BLOCK 9L
+#define ERROR_BAD_ENVIRONMENT 10L
+#define ERROR_BAD_FORMAT 11L
+#define ERROR_INVALID_ACCESS 12L
+#define ERROR_INVALID_DATA 13L
+#define ERROR_OUTOFMEMORY 14L
+#define ERROR_INVALID_DRIVE 15L
+#define ERROR_CURRENT_DIRECTORY 16L
+#define ERROR_NOT_SAME_DEVICE 17L
+#define ERROR_NO_MORE_FILES 18L
+#define ERROR_WRITE_PROTECT 19L
+#define ERROR_BAD_UNIT 20L
+#define ERROR_NOT_READY 21L
+#define ERROR_BAD_COMMAND 22L
+#define ERROR_CRC 23L
+#define ERROR_BAD_LENGTH 24L
+#define ERROR_SEEK 25L
+#define ERROR_NOT_DOS_DISK 26L
+#define ERROR_SECTOR_NOT_FOUND 27L
+#define ERROR_OUT_OF_PAPER 28L
+#define ERROR_WRITE_FAULT 29L
+#define ERROR_READ_FAULT 30L
+#define ERROR_GEN_FAILURE 31L
+#define ERROR_SHARING_VIOLATION 32L
+#define ERROR_LOCK_VIOLATION 33L
+#define ERROR_WRONG_DISK 34L
+#define ERROR_SHARING_BUFFER_EXCEEDED 36L
+#define ERROR_HANDLE_EOF 38L
+#define ERROR_HANDLE_DISK_FULL 39L
+#define ERROR_NOT_SUPPORTED 50L
+#define ERROR_REM_NOT_LIST 51L
+#define ERROR_DUP_NAME 52L
+#define ERROR_BAD_NETPATH 53L
+#define ERROR_NETWORK_BUSY 54L
+#define ERROR_DEV_NOT_EXIST 55L
+#define ERROR_TOO_MANY_CMDS 56L
+#define ERROR_ADAP_HDW_ERR 57L
+#define ERROR_BAD_NET_RESP 58L
+#define ERROR_UNEXP_NET_ERR 59L
+#define ERROR_BAD_REM_ADAP 60L
+#define ERROR_PRINTQ_FULL 61L
+#define ERROR_NO_SPOOL_SPACE 62L
+#define ERROR_PRINT_CANCELLED 63L
+#define ERROR_NETNAME_DELETED 64L
+#define ERROR_NETWORK_ACCESS_DENIED 65L
+#define ERROR_BAD_DEV_TYPE 66L
+#define ERROR_BAD_NET_NAME 67L
+#define ERROR_TOO_MANY_NAMES 68L
+#define ERROR_TOO_MANY_SESS 69L
+#define ERROR_SHARING_PAUSED 70L
+#define ERROR_REQ_NOT_ACCEP 71L
+#define ERROR_REDIR_PAUSED 72L
+#define ERROR_FILE_EXISTS 80L
+#define ERROR_CANNOT_MAKE 82L
+#define ERROR_FAIL_I24 83L
+#define ERROR_OUT_OF_STRUCTURES 84L
+#define ERROR_ALREADY_ASSIGNED 85L
+#define ERROR_INVALID_PASSWORD 86L
+#define ERROR_INVALID_PARAMETER 87L
+#define ERROR_NET_WRITE_FAULT 88L
+#define ERROR_NO_PROC_SLOTS 89L
+#define ERROR_TOO_MANY_SEMAPHORES 100L
+#define ERROR_EXCL_SEM_ALREADY_OWNED 101L
+#define ERROR_SEM_IS_SET 102L
+#define ERROR_TOO_MANY_SEM_REQUESTS 103L
+#define ERROR_INVALID_AT_INTERRUPT_TIME 104L
+#define ERROR_SEM_OWNER_DIED 105L
+#define ERROR_SEM_USER_LIMIT 106L
+#define ERROR_DISK_CHANGE 107L
+#define ERROR_DRIVE_LOCKED 108L
+#define ERROR_BROKEN_PIPE 109L
+#define ERROR_OPEN_FAILED 110L
+#define ERROR_BUFFER_OVERFLOW 111L
+#define ERROR_DISK_FULL 112L
+#define ERROR_NO_MORE_SEARCH_HANDLES 113L
+#define ERROR_INVALID_TARGET_HANDLE 114L
+#define ERROR_INVALID_CATEGORY 117L
+#define ERROR_INVALID_VERIFY_SWITCH 118L
+#define ERROR_BAD_DRIVER_LEVEL 119L
+#define ERROR_CALL_NOT_IMPLEMENTED 120L
+#define ERROR_SEM_TIMEOUT 121L
+#define ERROR_INSUFFICIENT_BUFFER 122L
+#define ERROR_INVALID_NAME 123L
+#define ERROR_INVALID_LEVEL 124L
+#define ERROR_NO_VOLUME_LABEL 125L
+#define ERROR_MOD_NOT_FOUND 126L
+#define ERROR_PROC_NOT_FOUND 127L
+#define ERROR_WAIT_NO_CHILDREN 128L
+#define ERROR_CHILD_NOT_COMPLETE 129L
+#define ERROR_DIRECT_ACCESS_HANDLE 130L
+#define ERROR_NEGATIVE_SEEK 131L
+#define ERROR_SEEK_ON_DEVICE 132L
+#define ERROR_IS_JOIN_TARGET 133L
+#define ERROR_IS_JOINED 134L
+#define ERROR_IS_SUBSTED 135L
+#define ERROR_NOT_JOINED 136L
+#define ERROR_NOT_SUBSTED 137L
+#define ERROR_JOIN_TO_JOIN 138L
+#define ERROR_SUBST_TO_SUBST 139L
+#define ERROR_JOIN_TO_SUBST 140L
+#define ERROR_SUBST_TO_JOIN 141L
+#define ERROR_BUSY_DRIVE 142L
+#define ERROR_SAME_DRIVE 143L
+#define ERROR_DIR_NOT_ROOT 144L
+#define ERROR_DIR_NOT_EMPTY 145L
+#define ERROR_IS_SUBST_PATH 146L
+#define ERROR_IS_JOIN_PATH 147L
+#define ERROR_PATH_BUSY 148L
+#define ERROR_IS_SUBST_TARGET 149L
+#define ERROR_SYSTEM_TRACE 150L
+#define ERROR_INVALID_EVENT_COUNT 151L
+#define ERROR_TOO_MANY_MUXWAITERS 152L
+#define ERROR_INVALID_LIST_FORMAT 153L
+#define ERROR_LABEL_TOO_LONG 154L
+#define ERROR_TOO_MANY_TCBS 155L
+#define ERROR_SIGNAL_REFUSED 156L
+#define ERROR_DISCARDED 157L
+#define ERROR_NOT_LOCKED 158L
+#define ERROR_BAD_THREADID_ADDR 159L
+#define ERROR_BAD_ARGUMENTS 160L
+#define ERROR_BAD_PATHNAME 161L
+#define ERROR_SIGNAL_PENDING 162L
+#define ERROR_MAX_THRDS_REACHED 164L
+#define ERROR_LOCK_FAILED 167L
+#define ERROR_BUSY 170L
+#define ERROR_CANCEL_VIOLATION 173L
+#define ERROR_ATOMIC_LOCKS_NOT_SUPPORTED 174L
+#define ERROR_INVALID_SEGMENT_NUMBER 180L
+#define ERROR_INVALID_ORDINAL 182L
+#define ERROR_ALREADY_EXISTS 183L
+#define ERROR_INVALID_FLAG_NUMBER 186L
+#define ERROR_SEM_NOT_FOUND 187L
+#define ERROR_INVALID_STARTING_CODESEG 188L
+#define ERROR_INVALID_STACKSEG 189L
+#define ERROR_INVALID_MODULETYPE 190L
+#define ERROR_INVALID_EXE_SIGNATURE 191L
+#define ERROR_EXE_MARKED_INVALID 192L
+#define ERROR_BAD_EXE_FORMAT 193L
+#define ERROR_ITERATED_DATA_EXCEEDS_64k 194L
+#define ERROR_INVALID_MINALLOCSIZE 195L
+#define ERROR_DYNLINK_FROM_INVALID_RING 196L
+#define ERROR_IOPL_NOT_ENABLED 197L
+#define ERROR_INVALID_SEGDPL 198L
+#define ERROR_AUTODATASEG_EXCEEDS_64k 199L
+#define ERROR_RING2SEG_MUST_BE_MOVABLE 200L
+#define ERROR_RELOC_CHAIN_XEEDS_SEGLIM 201L
+#define ERROR_INFLOOP_IN_RELOC_CHAIN 202L
+#define ERROR_ENVVAR_NOT_FOUND 203L
+#define ERROR_NO_SIGNAL_SENT 205L
+#define ERROR_FILENAME_EXCED_RANGE 206L
+#define ERROR_RING2_STACK_IN_USE 207L
+#define ERROR_META_EXPANSION_TOO_LONG 208L
+#define ERROR_INVALID_SIGNAL_NUMBER 209L
+#define ERROR_THREAD_1_INACTIVE 210L
+#define ERROR_LOCKED 212L
+#define ERROR_TOO_MANY_MODULES 214L
+#define ERROR_NESTING_NOT_ALLOWED 215L
+#define ERROR_EXE_MACHINE_TYPE_MISMATCH 216L
+#define ERROR_EXE_CANNOT_MODIFY_SIGNED_BINARY 217L
+#define ERROR_EXE_CANNOT_MODIFY_STRONG_SIGNED_BINARY 218L
+#define ERROR_BAD_PIPE 230L
+#define ERROR_PIPE_BUSY 231L
+#define ERROR_NO_DATA 232L
+#define ERROR_PIPE_NOT_CONNECTED 233L
+#define ERROR_MORE_DATA 234L
+#define ERROR_VC_DISCONNECTED 240L
+#define ERROR_INVALID_EA_NAME 254L
+#define ERROR_EA_LIST_INCONSISTENT 255L
+#ifndef WAIT_TIMEOUT /* also in winbase.h */
+#define WAIT_TIMEOUT 258L
+#endif
+#define ERROR_NO_MORE_ITEMS 259L
+#define ERROR_CANNOT_COPY 266L
+#define ERROR_DIRECTORY 267L
+#define ERROR_EAS_DIDNT_FIT 275L
+#define ERROR_EA_FILE_CORRUPT 276L
+#define ERROR_EA_TABLE_FULL 277L
+#define ERROR_INVALID_EA_HANDLE 278L
+#define ERROR_EAS_NOT_SUPPORTED 282L
+#define ERROR_NOT_OWNER 288L
+#define ERROR_TOO_MANY_POSTS 298L
+#define ERROR_PARTIAL_COPY 299L
+#define ERROR_OPLOCK_NOT_GRANTED 300L
+#define ERROR_INVALID_OPLOCK_PROTOCOL 301L
+#define ERROR_DISK_TOO_FRAGMENTED 302L
+#define ERROR_DELETE_PENDING 303L
+#define ERROR_MR_MID_NOT_FOUND 317L
+#define ERROR_SCOPE_NOT_FOUND 318L
+#define ERROR_INVALID_ADDRESS 487L
+#define ERROR_ARITHMETIC_OVERFLOW 534L
+#define ERROR_PIPE_CONNECTED 535L
+#define ERROR_PIPE_LISTENING 536L
+#define ERROR_EA_ACCESS_DENIED 994L
+#define ERROR_OPERATION_ABORTED 995L
+#define ERROR_IO_INCOMPLETE 996L
+#define ERROR_IO_PENDING 997L
+#define ERROR_NOACCESS 998L
+#define ERROR_SWAPERROR 999L
+#define ERROR_STACK_OVERFLOW 1001L
+#define ERROR_INVALID_MESSAGE 1002L
+#define ERROR_CAN_NOT_COMPLETE 1003L
+#define ERROR_INVALID_FLAGS 1004L
+#define ERROR_UNRECOGNIZED_VOLUME 1005L
+#define ERROR_FILE_INVALID 1006L
+#define ERROR_FULLSCREEN_MODE 1007L
+#define ERROR_NO_TOKEN 1008L
+#define ERROR_BADDB 1009L
+#define ERROR_BADKEY 1010L
+#define ERROR_CANTOPEN 1011L
+#define ERROR_CANTREAD 1012L
+#define ERROR_CANTWRITE 1013L
+#define ERROR_REGISTRY_RECOVERED 1014L
+#define ERROR_REGISTRY_CORRUPT 1015L
+#define ERROR_REGISTRY_IO_FAILED 1016L
+#define ERROR_NOT_REGISTRY_FILE 1017L
+#define ERROR_KEY_DELETED 1018L
+#define ERROR_NO_LOG_SPACE 1019L
+#define ERROR_KEY_HAS_CHILDREN 1020L
+#define ERROR_CHILD_MUST_BE_VOLATILE 1021L
+#define ERROR_NOTIFY_ENUM_DIR 1022L
+#define ERROR_DEPENDENT_SERVICES_RUNNING 1051L
+#define ERROR_INVALID_SERVICE_CONTROL 1052L
+#define ERROR_SERVICE_REQUEST_TIMEOUT 1053L
+#define ERROR_SERVICE_NO_THREAD 1054L
+#define ERROR_SERVICE_DATABASE_LOCKED 1055L
+#define ERROR_SERVICE_ALREADY_RUNNING 1056L
+#define ERROR_INVALID_SERVICE_ACCOUNT 1057L
+#define ERROR_SERVICE_DISABLED 1058L
+#define ERROR_CIRCULAR_DEPENDENCY 1059L
+#define ERROR_SERVICE_DOES_NOT_EXIST 1060L
+#define ERROR_SERVICE_CANNOT_ACCEPT_CTRL 1061L
+#define ERROR_SERVICE_NOT_ACTIVE 1062L
+#define ERROR_FAILED_SERVICE_CONTROLLER_CONNECT 1063L
+#define ERROR_EXCEPTION_IN_SERVICE 1064L
+#define ERROR_DATABASE_DOES_NOT_EXIST 1065L
+#define ERROR_SERVICE_SPECIFIC_ERROR 1066L
+#define ERROR_PROCESS_ABORTED 1067L
+#define ERROR_SERVICE_DEPENDENCY_FAIL 1068L
+#define ERROR_SERVICE_LOGON_FAILED 1069L
+#define ERROR_SERVICE_START_HANG 1070L
+#define ERROR_INVALID_SERVICE_LOCK 1071L
+#define ERROR_SERVICE_MARKED_FOR_DELETE 1072L
+#define ERROR_SERVICE_EXISTS 1073L
+#define ERROR_ALREADY_RUNNING_LKG 1074L
+#define ERROR_SERVICE_DEPENDENCY_DELETED 1075L
+#define ERROR_BOOT_ALREADY_ACCEPTED 1076L
+#define ERROR_SERVICE_NEVER_STARTED 1077L
+#define ERROR_DUPLICATE_SERVICE_NAME 1078L
+#define ERROR_DIFFERENT_SERVICE_ACCOUNT 1079L
+#define ERROR_CANNOT_DETECT_DRIVER_FAILURE 1080L
+#define ERROR_CANNOT_DETECT_PROCESS_ABORT 1081L
+#define ERROR_NO_RECOVERY_PROGRAM 1082L
+#define ERROR_SERVICE_NOT_IN_EXE 1083L
+#define ERROR_NOT_SAFEBOOT_SERVICE 1084L
+#define ERROR_END_OF_MEDIA 1100L
+#define ERROR_FILEMARK_DETECTED 1101L
+#define ERROR_BEGINNING_OF_MEDIA 1102L
+#define ERROR_SETMARK_DETECTED 1103L
+#define ERROR_NO_DATA_DETECTED 1104L
+#define ERROR_PARTITION_FAILURE 1105L
+#define ERROR_INVALID_BLOCK_LENGTH 1106L
+#define ERROR_DEVICE_NOT_PARTITIONED 1107L
+#define ERROR_UNABLE_TO_LOCK_MEDIA 1108L
+#define ERROR_UNABLE_TO_UNLOAD_MEDIA 1109L
+#define ERROR_MEDIA_CHANGED 1110L
+#define ERROR_BUS_RESET 1111L
+#define ERROR_NO_MEDIA_IN_DRIVE 1112L
+#define ERROR_NO_UNICODE_TRANSLATION 1113L
+#define ERROR_DLL_INIT_FAILED 1114L
+#define ERROR_SHUTDOWN_IN_PROGRESS 1115L
+#define ERROR_NO_SHUTDOWN_IN_PROGRESS 1116L
+#define ERROR_IO_DEVICE 1117L
+#define ERROR_SERIAL_NO_DEVICE 1118L
+#define ERROR_IRQ_BUSY 1119L
+#define ERROR_MORE_WRITES 1120L
+#define ERROR_COUNTER_TIMEOUT 1121L
+#define ERROR_FLOPPY_ID_MARK_NOT_FOUND 1122L
+#define ERROR_FLOPPY_WRONG_CYLINDER 1123L
+#define ERROR_FLOPPY_UNKNOWN_ERROR 1124L
+#define ERROR_FLOPPY_BAD_REGISTERS 1125L
+#define ERROR_DISK_RECALIBRATE_FAILED 1126L
+#define ERROR_DISK_OPERATION_FAILED 1127L
+#define ERROR_DISK_RESET_FAILED 1128L
+#define ERROR_EOM_OVERFLOW 1129L
+#define ERROR_NOT_ENOUGH_SERVER_MEMORY 1130L
+#define ERROR_POSSIBLE_DEADLOCK 1131L
+#define ERROR_MAPPED_ALIGNMENT 1132L
+#define ERROR_SET_POWER_STATE_VETOED 1140L
+#define ERROR_SET_POWER_STATE_FAILED 1141L
+#define ERROR_TOO_MANY_LINKS 1142L
+#define ERROR_OLD_WIN_VERSION 1150L
+#define ERROR_APP_WRONG_OS 1151L
+#define ERROR_SINGLE_INSTANCE_APP 1152L
+#define ERROR_RMODE_APP 1153L
+#define ERROR_INVALID_DLL 1154L
+#define ERROR_NO_ASSOCIATION 1155L
+#define ERROR_DDE_FAIL 1156L
+#define ERROR_DLL_NOT_FOUND 1157L
+#define ERROR_NO_MORE_USER_HANDLES 1158L
+#define ERROR_MESSAGE_SYNC_ONLY 1159L
+#define ERROR_SOURCE_ELEMENT_EMPTY 1160L
+#define ERROR_DESTINATION_ELEMENT_FULL 1161L
+#define ERROR_ILLEGAL_ELEMENT_ADDRESS 1162L
+#define ERROR_MAGAZINE_NOT_PRESENT 1163L
+#define ERROR_DEVICE_REINITIALIZATION_NEEDED 1164L
+#define ERROR_DEVICE_REQUIRES_CLEANING 1165L
+#define ERROR_DEVICE_DOOR_OPEN 1166L
+#define ERROR_DEVICE_NOT_CONNECTED 1167L
+#define ERROR_NOT_FOUND 1168L
+#define ERROR_NO_MATCH 1169L
+#define ERROR_SET_NOT_FOUND 1170L
+#define ERROR_POINT_NOT_FOUND 1171L
+#define ERROR_NO_TRACKING_SERVICE 1172L
+#define ERROR_NO_VOLUME_ID 1173L
+#define ERROR_UNABLE_TO_REMOVE_REPLACED 1175L
+#define ERROR_UNABLE_TO_MOVE_REPLACEMENT 1176L
+#define ERROR_UNABLE_TO_MOVE_REPLACEMENT_2 1177L
+#define ERROR_JOURNAL_DELETE_IN_PROGRESS 1178L
+#define ERROR_JOURNAL_NOT_ACTIVE 1179L
+#define ERROR_POTENTIAL_FILE_FOUND 1180L
+#define ERROR_JOURNAL_ENTRY_DELETED 1181L
+#define ERROR_BAD_DEVICE 1200L
+#define ERROR_CONNECTION_UNAVAIL 1201L
+#define ERROR_DEVICE_ALREADY_REMEMBERED 1202L
+#define ERROR_NO_NET_OR_BAD_PATH 1203L
+#define ERROR_BAD_PROVIDER 1204L
+#define ERROR_CANNOT_OPEN_PROFILE 1205L
+#define ERROR_BAD_PROFILE 1206L
+#define ERROR_NOT_CONTAINER 1207L
+#define ERROR_EXTENDED_ERROR 1208L
+#define ERROR_INVALID_GROUPNAME 1209L
+#define ERROR_INVALID_COMPUTERNAME 1210L
+#define ERROR_INVALID_EVENTNAME 1211L
+#define ERROR_INVALID_DOMAINNAME 1212L
+#define ERROR_INVALID_SERVICENAME 1213L
+#define ERROR_INVALID_NETNAME 1214L
+#define ERROR_INVALID_SHARENAME 1215L
+#define ERROR_INVALID_PASSWORDNAME 1216L
+#define ERROR_INVALID_MESSAGENAME 1217L
+#define ERROR_INVALID_MESSAGEDEST 1218L
+#define ERROR_SESSION_CREDENTIAL_CONFLICT 1219L
+#define ERROR_REMOTE_SESSION_LIMIT_EXCEEDED 1220L
+#define ERROR_DUP_DOMAINNAME 1221L
+#define ERROR_NO_NETWORK 1222L
+#define ERROR_CANCELLED 1223L
+#define ERROR_USER_MAPPED_FILE 1224L
+#define ERROR_CONNECTION_REFUSED 1225L
+#define ERROR_GRACEFUL_DISCONNECT 1226L
+#define ERROR_ADDRESS_ALREADY_ASSOCIATED 1227L
+#define ERROR_ADDRESS_NOT_ASSOCIATED 1228L
+#define ERROR_CONNECTION_INVALID 1229L
+#define ERROR_CONNECTION_ACTIVE 1230L
+#define ERROR_NETWORK_UNREACHABLE 1231L
+#define ERROR_HOST_UNREACHABLE 1232L
+#define ERROR_PROTOCOL_UNREACHABLE 1233L
+#define ERROR_PORT_UNREACHABLE 1234L
+#define ERROR_REQUEST_ABORTED 1235L
+#define ERROR_CONNECTION_ABORTED 1236L
+#define ERROR_RETRY 1237L
+#define ERROR_CONNECTION_COUNT_LIMIT 1238L
+#define ERROR_LOGIN_TIME_RESTRICTION 1239L
+#define ERROR_LOGIN_WKSTA_RESTRICTION 1240L
+#define ERROR_INCORRECT_ADDRESS 1241L
+#define ERROR_ALREADY_REGISTERED 1242L
+#define ERROR_SERVICE_NOT_FOUND 1243L
+#define ERROR_NOT_AUTHENTICATED 1244L
+#define ERROR_NOT_LOGGED_ON 1245L
+#define ERROR_CONTINUE 1246L
+#define ERROR_ALREADY_INITIALIZED 1247L
+#define ERROR_NO_MORE_DEVICES 1248L
+#define ERROR_NO_SUCH_SITE 1249L
+#define ERROR_DOMAIN_CONTROLLER_EXISTS 1250L
+#define ERROR_ONLY_IF_CONNECTED 1251L
+#define ERROR_OVERRIDE_NOCHANGES 1252L
+#define ERROR_BAD_USER_PROFILE 1253L
+#define ERROR_NOT_SUPPORTED_ON_SBS 1254L
+#define ERROR_SERVER_SHUTDOWN_IN_PROGRESS 1255L
+#define ERROR_HOST_DOWN 1256L
+#define ERROR_NON_ACCOUNT_SID 1257L
+#define ERROR_NON_DOMAIN_SID 1258L
+#define ERROR_APPHELP_BLOCK 1259L
+#define ERROR_ACCESS_DISABLED_BY_POLICY 1260L
+#define ERROR_REG_NAT_CONSUMPTION 1261L
+#define ERROR_CSCSHARE_OFFLINE 1262L
+#define ERROR_PKINIT_FAILURE 1263L
+#define ERROR_SMARTCARD_SUBSYSTEM_FAILURE 1264L
+#define ERROR_DOWNGRADE_DETECTED 1265L
+#define SEC_E_SMARTCARD_CERT_REVOKED 1266L
+#define SEC_E_ISSUING_CA_UNTRUSTED 1267L
+#define SEC_E_REVOCATION_OFFLINE_C 1268L
+#define SEC_E_PKINIT_CLIENT_FAILUR 1269L
+#define SEC_E_SMARTCARD_CERT_EXPIRED 1270L
+#define ERROR_MACHINE_LOCKED 1271L
+#define ERROR_CALLBACK_SUPPLIED_INVALID_DATA 1273L
+#define ERROR_SYNC_FOREGROUND_REFRESH_REQUIRED 1274L
+#define ERROR_DRIVER_BLOCKED 1275L
+#define ERROR_INVALID_IMPORT_OF_NON_DLL 1276L
+#define ERROR_ACCESS_DISABLED_WEBBLADE 1277L
+#define ERROR_ACCESS_DISABLED_WEBBLADE_TAMPER 1278L
+#define ERROR_RECOVERY_FAILURE 1279L
+#define ERROR_ALREADY_FIBER 1280L
+#define ERROR_ALREADY_THREAD 1281L
+#define ERROR_STACK_BUFFER_OVERRUN 1282L
+#define ERROR_PARAMETER_QUOTA_EXCEEDED 1283L
+#define ERROR_DEBUGGER_INACTIVE 1284L
+#define ERROR_NOT_ALL_ASSIGNED 1300L
+#define ERROR_SOME_NOT_MAPPED 1301L
+#define ERROR_NO_QUOTAS_FOR_ACCOUNT 1302L
+#define ERROR_LOCAL_USER_SESSION_KEY 1303L
+#define ERROR_NULL_LM_PASSWORD 1304L
+#define ERROR_UNKNOWN_REVISION 1305L
+#define ERROR_REVISION_MISMATCH 1306L
+#define ERROR_INVALID_OWNER 1307L
+#define ERROR_INVALID_PRIMARY_GROUP 1308L
+#define ERROR_NO_IMPERSONATION_TOKEN 1309L
+#define ERROR_CANT_DISABLE_MANDATORY 1310L
+#define ERROR_NO_LOGON_SERVERS 1311L
+#define ERROR_NO_SUCH_LOGON_SESSION 1312L
+#define ERROR_NO_SUCH_PRIVILEGE 1313L
+#define ERROR_PRIVILEGE_NOT_HELD 1314L
+#define ERROR_INVALID_ACCOUNT_NAME 1315L
+#define ERROR_USER_EXISTS 1316L
+#define ERROR_NO_SUCH_USER 1317L
+#define ERROR_GROUP_EXISTS 1318L
+#define ERROR_NO_SUCH_GROUP 1319L
+#define ERROR_MEMBER_IN_GROUP 1320L
+#define ERROR_MEMBER_NOT_IN_GROUP 1321L
+#define ERROR_LAST_ADMIN 1322L
+#define ERROR_WRONG_PASSWORD 1323L
+#define ERROR_ILL_FORMED_PASSWORD 1324L
+#define ERROR_PASSWORD_RESTRICTION 1325L
+#define ERROR_LOGON_FAILURE 1326L
+#define ERROR_ACCOUNT_RESTRICTION 1327L
+#define ERROR_INVALID_LOGON_HOURS 1328L
+#define ERROR_INVALID_WORKSTATION 1329L
+#define ERROR_PASSWORD_EXPIRED 1330L
+#define ERROR_ACCOUNT_DISABLED 1331L
+#define ERROR_NONE_MAPPED 1332L
+#define ERROR_TOO_MANY_LUIDS_REQUESTED 1333L
+#define ERROR_LUIDS_EXHAUSTED 1334L
+#define ERROR_INVALID_SUB_AUTHORITY 1335L
+#define ERROR_INVALID_ACL 1336L
+#define ERROR_INVALID_SID 1337L
+#define ERROR_INVALID_SECURITY_DESCR 1338L
+#define ERROR_BAD_INHERITANCE_ACL 1340L
+#define ERROR_SERVER_DISABLED 1341L
+#define ERROR_SERVER_NOT_DISABLED 1342L
+#define ERROR_INVALID_ID_AUTHORITY 1343L
+#define ERROR_ALLOTTED_SPACE_EXCEEDED 1344L
+#define ERROR_INVALID_GROUP_ATTRIBUTES 1345L
+#define ERROR_BAD_IMPERSONATION_LEVEL 1346L
+#define ERROR_CANT_OPEN_ANONYMOUS 1347L
+#define ERROR_BAD_VALIDATION_CLASS 1348L
+#define ERROR_BAD_TOKEN_TYPE 1349L
+#define ERROR_NO_SECURITY_ON_OBJECT 1350L
+#define ERROR_CANT_ACCESS_DOMAIN_INFO 1351L
+#define ERROR_INVALID_SERVER_STATE 1352L
+#define ERROR_INVALID_DOMAIN_STATE 1353L
+#define ERROR_INVALID_DOMAIN_ROLE 1354L
+#define ERROR_NO_SUCH_DOMAIN 1355L
+#define ERROR_DOMAIN_EXISTS 1356L
+#define ERROR_DOMAIN_LIMIT_EXCEEDED 1357L
+#define ERROR_INTERNAL_DB_CORRUPTION 1358L
+#define ERROR_INTERNAL_ERROR 1359L
+#define ERROR_GENERIC_NOT_MAPPED 1360L
+#define ERROR_BAD_DESCRIPTOR_FORMAT 1361L
+#define ERROR_NOT_LOGON_PROCESS 1362L
+#define ERROR_LOGON_SESSION_EXISTS 1363L
+#define ERROR_NO_SUCH_PACKAGE 1364L
+#define ERROR_BAD_LOGON_SESSION_STATE 1365L
+#define ERROR_LOGON_SESSION_COLLISION 1366L
+#define ERROR_INVALID_LOGON_TYPE 1367L
+#define ERROR_CANNOT_IMPERSONATE 1368L
+#define ERROR_RXACT_INVALID_STATE 1369L
+#define ERROR_RXACT_COMMIT_FAILURE 1370L
+#define ERROR_SPECIAL_ACCOUNT 1371L
+#define ERROR_SPECIAL_GROUP 1372L
+#define ERROR_SPECIAL_USER 1373L
+#define ERROR_MEMBERS_PRIMARY_GROUP 1374L
+#define ERROR_TOKEN_ALREADY_IN_USE 1375L
+#define ERROR_NO_SUCH_ALIAS 1376L
+#define ERROR_MEMBER_NOT_IN_ALIAS 1377L
+#define ERROR_MEMBER_IN_ALIAS 1378L
+#define ERROR_ALIAS_EXISTS 1379L
+#define ERROR_LOGON_NOT_GRANTED 1380L
+#define ERROR_TOO_MANY_SECRETS 1381L
+#define ERROR_SECRET_TOO_LONG 1382L
+#define ERROR_INTERNAL_DB_ERROR 1383L
+#define ERROR_TOO_MANY_CONTEXT_IDS 1384L
+#define ERROR_LOGON_TYPE_NOT_GRANTED 1385L
+#define ERROR_NT_CROSS_ENCRYPTION_REQUIRED 1386L
+#define ERROR_NO_SUCH_MEMBER 1387L
+#define ERROR_INVALID_MEMBER 1388L
+#define ERROR_TOO_MANY_SIDS 1389L
+#define ERROR_LM_CROSS_ENCRYPTION_REQUIRED 1390L
+#define ERROR_NO_INHERITANCE 1391L
+#define ERROR_FILE_CORRUPT 1392L
+#define ERROR_DISK_CORRUPT 1393L
+#define ERROR_NO_USER_SESSION_KEY 1394L
+#define ERROR_LICENSE_QUOTA_EXCEEDED 1395L
+#define ERROR_WRONG_TARGET_NAME 1396L
+#define ERROR_MUTUAL_AUTH_FAILED 1397L
+#define ERROR_TIME_SKEW 1398L
+#define ERROR_CURRENT_DOMAIN_NOT_ALLOWED 1399L
+#define ERROR_INVALID_WINDOW_HANDLE 1400L
+#define ERROR_INVALID_MENU_HANDLE 1401L
+#define ERROR_INVALID_CURSOR_HANDLE 1402L
+#define ERROR_INVALID_ACCEL_HANDLE 1403L
+#define ERROR_INVALID_HOOK_HANDLE 1404L
+#define ERROR_INVALID_DWP_HANDLE 1405L
+#define ERROR_TLW_WITH_WSCHILD 1406L
+#define ERROR_CANNOT_FIND_WND_CLASS 1407L
+#define ERROR_WINDOW_OF_OTHER_THREAD 1408L
+#define ERROR_HOTKEY_ALREADY_REGISTERED 1409L
+#define ERROR_CLASS_ALREADY_EXISTS 1410L
+#define ERROR_CLASS_DOES_NOT_EXIST 1411L
+#define ERROR_CLASS_HAS_WINDOWS 1412L
+#define ERROR_INVALID_INDEX 1413L
+#define ERROR_INVALID_ICON_HANDLE 1414L
+#define ERROR_PRIVATE_DIALOG_INDEX 1415L
+#define ERROR_LISTBOX_ID_NOT_FOUND 1416L
+#define ERROR_NO_WILDCARD_CHARACTERS 1417L
+#define ERROR_CLIPBOARD_NOT_OPEN 1418L
+#define ERROR_HOTKEY_NOT_REGISTERED 1419L
+#define ERROR_WINDOW_NOT_DIALOG 1420L
+#define ERROR_CONTROL_ID_NOT_FOUND 1421L
+#define ERROR_INVALID_COMBOBOX_MESSAGE 1422L
+#define ERROR_WINDOW_NOT_COMBOBOX 1423L
+#define ERROR_INVALID_EDIT_HEIGHT 1424L
+#define ERROR_DC_NOT_FOUND 1425L
+#define ERROR_INVALID_HOOK_FILTER 1426L
+#define ERROR_INVALID_FILTER_PROC 1427L
+#define ERROR_HOOK_NEEDS_HMOD 1428L
+#define ERROR_GLOBAL_ONLY_HOOK 1429L
+#define ERROR_JOURNAL_HOOK_SET 1430L
+#define ERROR_HOOK_NOT_INSTALLED 1431L
+#define ERROR_INVALID_LB_MESSAGE 1432L
+#define ERROR_SETCOUNT_ON_BAD_LB 1433L
+#define ERROR_LB_WITHOUT_TABSTOPS 1434L
+#define ERROR_DESTROY_OBJECT_OF_OTHER_THREAD 1435L
+#define ERROR_CHILD_WINDOW_MENU 1436L
+#define ERROR_NO_SYSTEM_MENU 1437L
+#define ERROR_INVALID_MSGBOX_STYLE 1438L
+#define ERROR_INVALID_SPI_VALUE 1439L
+#define ERROR_SCREEN_ALREADY_LOCKED 1440L
+#define ERROR_HWNDS_HAVE_DIFF_PARENT 1441L
+#define ERROR_NOT_CHILD_WINDOW 1442L
+#define ERROR_INVALID_GW_COMMAND 1443L
+#define ERROR_INVALID_THREAD_ID 1444L
+#define ERROR_NON_MDICHILD_WINDOW 1445L
+#define ERROR_POPUP_ALREADY_ACTIVE 1446L
+#define ERROR_NO_SCROLLBARS 1447L
+#define ERROR_INVALID_SCROLLBAR_RANGE 1448L
+#define ERROR_INVALID_SHOWWIN_COMMAND 1449L
+#define ERROR_NO_SYSTEM_RESOURCES 1450L
+#define ERROR_NONPAGED_SYSTEM_RESOURCES 1451L
+#define ERROR_PAGED_SYSTEM_RESOURCES 1452L
+#define ERROR_WORKING_SET_QUOTA 1453L
+#define ERROR_PAGEFILE_QUOTA 1454L
+#define ERROR_COMMITMENT_LIMIT 1455L
+#define ERROR_MENU_ITEM_NOT_FOUND 1456L
+#define ERROR_INVALID_KEYBOARD_HANDLE 1457L
+#define ERROR_HOOK_TYPE_NOT_ALLOWED 1458L
+#define ERROR_REQUIRES_INTERACTIVE_WINDOWSTATION 1459L
+#define ERROR_TIMEOUT 1460L
+#define ERROR_INVALID_MONITOR_HANDLE 1461L
+#define ERROR_EVENTLOG_FILE_CORRUPT 1500L
+#define ERROR_EVENTLOG_CANT_START 1501L
+#define ERROR_LOG_FILE_FULL 1502L
+#define ERROR_EVENTLOG_FILE_CHANGED 1503L
+#define ERROR_INSTALL_SERVICE_FAILURE 1601L
+#define ERROR_INSTALL_USEREXIT 1602L
+#define ERROR_INSTALL_FAILURE 1603L
+#define ERROR_INSTALL_SUSPEND 1604L
+#define ERROR_UNKNOWN_PRODUCT 1605L
+#define ERROR_UNKNOWN_FEATURE 1606L
+#define ERROR_UNKNOWN_COMPONENT 1607L
+#define ERROR_UNKNOWN_PROPERTY 1608L
+#define ERROR_INVALID_HANDLE_STATE 1609L
+#define ERROR_BAD_CONFIGURATION 1610L
+#define ERROR_INDEX_ABSENT 1611L
+#define ERROR_INSTALL_SOURCE_ABSENT 1612L
+#define ERROR_INSTALL_PACKAGE_VERSION 1613L
+#define ERROR_PRODUCT_UNINSTALLED 1614L
+#define ERROR_BAD_QUERY_SYNTAX 1615L
+#define ERROR_INVALID_FIELD 1616L
+#define ERROR_DEVICE_REMOVED 1617L
+#define ERROR_INSTALL_ALREADY_RUNNING 1618L
+#define ERROR_INSTALL_PACKAGE_OPEN_FAILED 1619L
+#define ERROR_INSTALL_PACKAGE_INVALID 1620L
+#define ERROR_INSTALL_UI_FAILURE 1621L
+#define ERROR_INSTALL_LOG_FAILURE 1622L
+#define ERROR_INSTALL_LANGUAGE_UNSUPPORTED 1623L
+#define ERROR_INSTALL_TRANSFORM_FAILURE 1624L
+#define ERROR_INSTALL_PACKAGE_REJECTED 1625L
+#define ERROR_FUNCTION_NOT_CALLED 1626L
+#define ERROR_FUNCTION_FAILED 1627L
+#define ERROR_INVALID_TABLE 1628L
+#define ERROR_DATATYPE_MISMATCH 1629L
+#define ERROR_UNSUPPORTED_TYPE 1630L
+#define ERROR_CREATE_FAILED 1631L
+#define ERROR_INSTALL_TEMP_UNWRITABLE 1632L
+#define ERROR_INSTALL_PLATFORM_UNSUPPORTED 1633L
+#define ERROR_INSTALL_NOTUSED 1634L
+#define ERROR_PATCH_PACKAGE_OPEN_FAILED 1635L
+#define ERROR_PATCH_PACKAGE_INVALID 1636L
+#define ERROR_PATCH_PACKAGE_UNSUPPORTED 1637L
+#define ERROR_PRODUCT_VERSION 1638L
+#define ERROR_INVALID_COMMAND_LINE 1639L
+#define ERROR_INSTALL_REMOTE_DISALLOWED 1640L
+#define ERROR_SUCCESS_REBOOT_INITIATED 1641L
+#define ERROR_PATCH_TARGET_NOT_FOUND 1642L
+#define ERROR_PATCH_PACKAGE_REJECTED 1643L
+#define ERROR_INSTALL_TRANSFORM_REJECTED 1644L
+#define ERROR_INSTALL_REMOTE_PROHIBITED 1645L
+#define RPC_S_INVALID_STRING_BINDING 1700L
+#define RPC_S_WRONG_KIND_OF_BINDING 1701L
+#define RPC_S_INVALID_BINDING 1702L
+#define RPC_S_PROTSEQ_NOT_SUPPORTED 1703L
+#define RPC_S_INVALID_RPC_PROTSEQ 1704L
+#define RPC_S_INVALID_STRING_UUID 1705L
+#define RPC_S_INVALID_ENDPOINT_FORMAT 1706L
+#define RPC_S_INVALID_NET_ADDR 1707L
+#define RPC_S_NO_ENDPOINT_FOUND 1708L
+#define RPC_S_INVALID_TIMEOUT 1709L
+#define RPC_S_OBJECT_NOT_FOUND 1710L
+#define RPC_S_ALREADY_REGISTERED 1711L
+#define RPC_S_TYPE_ALREADY_REGISTERED 1712L
+#define RPC_S_ALREADY_LISTENING 1713L
+#define RPC_S_NO_PROTSEQS_REGISTERED 1714L
+#define RPC_S_NOT_LISTENING 1715L
+#define RPC_S_UNKNOWN_MGR_TYPE 1716L
+#define RPC_S_UNKNOWN_IF 1717L
+#define RPC_S_NO_BINDINGS 1718L
+#define RPC_S_NO_PROTSEQS 1719L
+#define RPC_S_CANT_CREATE_ENDPOINT 1720L
+#define RPC_S_OUT_OF_RESOURCES 1721L
+#define RPC_S_SERVER_UNAVAILABLE 1722L
+#define RPC_S_SERVER_TOO_BUSY 1723L
+#define RPC_S_INVALID_NETWORK_OPTIONS 1724L
+#define RPC_S_NO_CALL_ACTIVE 1725L
+#define RPC_S_CALL_FAILED 1726L
+#define RPC_S_CALL_FAILED_DNE 1727L
+#define RPC_S_PROTOCOL_ERROR 1728L
+#define RPC_S_UNSUPPORTED_TRANS_SYN 1730L
+#define RPC_S_UNSUPPORTED_TYPE 1732L
+#define RPC_S_INVALID_TAG 1733L
+#define RPC_S_INVALID_BOUND 1734L
+#define RPC_S_NO_ENTRY_NAME 1735L
+#define RPC_S_INVALID_NAME_SYNTAX 1736L
+#define RPC_S_UNSUPPORTED_NAME_SYNTAX 1737L
+#define RPC_S_UUID_NO_ADDRESS 1739L
+#define RPC_S_DUPLICATE_ENDPOINT 1740L
+#define RPC_S_UNKNOWN_AUTHN_TYPE 1741L
+#define RPC_S_MAX_CALLS_TOO_SMALL 1742L
+#define RPC_S_STRING_TOO_LONG 1743L
+#define RPC_S_PROTSEQ_NOT_FOUND 1744L
+#define RPC_S_PROCNUM_OUT_OF_RANGE 1745L
+#define RPC_S_BINDING_HAS_NO_AUTH 1746L
+#define RPC_S_UNKNOWN_AUTHN_SERVICE 1747L
+#define RPC_S_UNKNOWN_AUTHN_LEVEL 1748L
+#define RPC_S_INVALID_AUTH_IDENTITY 1749L
+#define RPC_S_UNKNOWN_AUTHZ_SERVICE 1750L
+#define EPT_S_INVALID_ENTRY 1751L
+#define EPT_S_CANT_PERFORM_OP 1752L
+#define EPT_S_NOT_REGISTERED 1753L
+#define RPC_S_NOTHING_TO_EXPORT 1754L
+#define RPC_S_INCOMPLETE_NAME 1755L
+#define RPC_S_INVALID_VERS_OPTION 1756L
+#define RPC_S_NO_MORE_MEMBERS 1757L
+#define RPC_S_NOT_ALL_OBJS_UNEXPORTED 1758L
+#define RPC_S_INTERFACE_NOT_FOUND 1759L
+#define RPC_S_ENTRY_ALREADY_EXISTS 1760L
+#define RPC_S_ENTRY_NOT_FOUND 1761L
+#define RPC_S_NAME_SERVICE_UNAVAILABLE 1762L
+#define RPC_S_INVALID_NAF_ID 1763L
+#define RPC_S_CANNOT_SUPPORT 1764L
+#define RPC_S_NO_CONTEXT_AVAILABLE 1765L
+#define RPC_S_INTERNAL_ERROR 1766L
+#define RPC_S_ZERO_DIVIDE 1767L
+#define RPC_S_ADDRESS_ERROR 1768L
+#define RPC_S_FP_DIV_ZERO 1769L
+#define RPC_S_FP_UNDERFLOW 1770L
+#define RPC_S_FP_OVERFLOW 1771L
+#define RPC_X_NO_MORE_ENTRIES 1772L
+#define RPC_X_SS_CHAR_TRANS_OPEN_FAIL 1773L
+#define RPC_X_SS_CHAR_TRANS_SHORT_FILE 1774L
+#define RPC_X_SS_IN_NULL_CONTEXT 1775L
+#define RPC_X_SS_CONTEXT_DAMAGED 1777L
+#define RPC_X_SS_HANDLES_MISMATCH 1778L
+#define RPC_X_SS_CANNOT_GET_CALL_HANDLE 1779L
+#define RPC_X_NULL_REF_POINTER 1780L
+#define RPC_X_ENUM_VALUE_OUT_OF_RANGE 1781L
+#define RPC_X_BYTE_COUNT_TOO_SMALL 1782L
+#define RPC_X_BAD_STUB_DATA 1783L
+#define ERROR_INVALID_USER_BUFFER 1784L
+#define ERROR_UNRECOGNIZED_MEDIA 1785L
+#define ERROR_NO_TRUST_LSA_SECRET 1786L
+#define ERROR_NO_TRUST_SAM_ACCOUNT 1787L
+#define ERROR_TRUSTED_DOMAIN_FAILURE 1788L
+#define ERROR_TRUSTED_RELATIONSHIP_FAILURE 1789L
+#define ERROR_TRUST_FAILURE 1790L
+#define RPC_S_CALL_IN_PROGRESS 1791L
+#define ERROR_NETLOGON_NOT_STARTED 1792L
+#define ERROR_ACCOUNT_EXPIRED 1793L
+#define ERROR_REDIRECTOR_HAS_OPEN_HANDLES 1794L
+#define ERROR_PRINTER_DRIVER_ALREADY_INSTALLED 1795L
+#define ERROR_UNKNOWN_PORT 1796L
+#define ERROR_UNKNOWN_PRINTER_DRIVER 1797L
+#define ERROR_UNKNOWN_PRINTPROCESSOR 1798L
+#define ERROR_INVALID_SEPARATOR_FILE 1799L
+#define ERROR_INVALID_PRIORITY 1800L
+#define ERROR_INVALID_PRINTER_NAME 1801L
+#define ERROR_PRINTER_ALREADY_EXISTS 1802L
+#define ERROR_INVALID_PRINTER_COMMAND 1803L
+#define ERROR_INVALID_DATATYPE 1804L
+#define ERROR_INVALID_ENVIRONMENT 1805L
+#define RPC_S_NO_MORE_BINDINGS 1806L
+#define ERROR_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT 1807L
+#define ERROR_NOLOGON_WORKSTATION_TRUST_ACCOUNT 1808L
+#define ERROR_NOLOGON_SERVER_TRUST_ACCOUNT 1809L
+#define ERROR_DOMAIN_TRUST_INCONSISTENT 1810L
+#define ERROR_SERVER_HAS_OPEN_HANDLES 1811L
+#define ERROR_RESOURCE_DATA_NOT_FOUND 1812L
+#define ERROR_RESOURCE_TYPE_NOT_FOUND 1813L
+#define ERROR_RESOURCE_NAME_NOT_FOUND 1814L
+#define ERROR_RESOURCE_LANG_NOT_FOUND 1815L
+#define ERROR_NOT_ENOUGH_QUOTA 1816L
+#define RPC_S_NO_INTERFACES 1817L
+#define RPC_S_CALL_CANCELLED 1818L
+#define RPC_S_BINDING_INCOMPLETE 1819L
+#define RPC_S_COMM_FAILURE 1820L
+#define RPC_S_UNSUPPORTED_AUTHN_LEVEL 1821L
+#define RPC_S_NO_PRINC_NAME 1822L
+#define RPC_S_NOT_RPC_ERROR 1823L
+#define RPC_S_UUID_LOCAL_ONLY 1824L
+#define RPC_S_SEC_PKG_ERROR 1825L
+#define RPC_S_NOT_CANCELLED 1826L
+#define RPC_X_INVALID_ES_ACTION 1827L
+#define RPC_X_WRONG_ES_VERSION 1828L
+#define RPC_X_WRONG_STUB_VERSION 1829L
+#define RPC_X_INVALID_PIPE_OBJECT 1830L
+#define RPC_X_WRONG_PIPE_ORDER 1831L
+#define RPC_X_WRONG_PIPE_VERSION 1832L
+#define RPC_S_GROUP_MEMBER_NOT_FOUND 1898L
+#define EPT_S_CANT_CREATE 1899L
+#define RPC_S_INVALID_OBJECT 1900L
+#define ERROR_INVALID_TIME 1901L
+#define ERROR_INVALID_FORM_NAME 1902L
+#define ERROR_INVALID_FORM_SIZE 1903L
+#define ERROR_ALREADY_WAITING 1904L
+#define ERROR_PRINTER_DELETED 1905L
+#define ERROR_INVALID_PRINTER_STATE 1906L
+#define ERROR_PASSWORD_MUST_CHANGE 1907L
+#define ERROR_DOMAIN_CONTROLLER_NOT_FOUND 1908L
+#define ERROR_ACCOUNT_LOCKED_OUT 1909L
+#define OR_INVALID_OXID 1910L
+#define OR_INVALID_OID 1911L
+#define OR_INVALID_SET 1912L
+#define RPC_S_SEND_INCOMPLETE 1913L
+#define RPC_S_INVALID_ASYNC_HANDLE 1914L
+#define RPC_S_INVALID_ASYNC_CALL 1915L
+#define RPC_X_PIPE_CLOSED 1916L
+#define RPC_X_PIPE_DISCIPLINE_ERROR 1917L
+#define RPC_X_PIPE_EMPTY 1918L
+#define ERROR_NO_SITENAME 1919L
+#define ERROR_CANT_ACCESS_FILE 1920L
+#define ERROR_CANT_RESOLVE_FILENAME 1921L
+#define RPC_S_ENTRY_TYPE_MISMATCH 1922L
+#define RPC_S_NOT_ALL_OBJS_EXPORTED 1923L
+#define RPC_S_INTERFACE_NOT_EXPORTED 1924L
+#define RPC_S_PROFILE_NOT_ADDED 1925L
+#define RPC_S_PRF_ELT_NOT_ADDED 1926L
+#define RPC_S_PRF_ELT_NOT_REMOVED 1927L
+#define RPC_S_GRP_ELT_NOT_ADDED 1928L
+#define RPC_S_GRP_ELT_NOT_REMOVED 1929L
+#define ERROR_KM_DRIVER_BLOCKED 1930L
+#define ERROR_CONTEXT_EXPIRED 1931L
+#define ERROR_PER_USER_TRUST_QUOTA_EXCEEDED 1932L
+#define ERROR_ALL_USER_TRUST_QUOTA_EXCEEDED 1933L
+#define ERROR_USER_DELETE_TRUST_QUOTA_EXCEEDED 1934L
+#define ERROR_INVALID_PIXEL_FORMAT 2000L
+#define ERROR_BAD_DRIVER 2001L
+#define ERROR_INVALID_WINDOW_STYLE 2002L
+#define ERROR_METAFILE_NOT_SUPPORTED 2003L
+#define ERROR_TRANSFORM_NOT_SUPPORTED 2004L
+#define ERROR_CLIPPING_NOT_SUPPORTED 2005L
+#define ERROR_INVALID_CMM 2010L
+#define ERROR_INVALID_PROFILE 2011L
+#define ERROR_TAG_NOT_FOUND 2012L
+#define ERROR_TAG_NOT_PRESENT 2013L
+#define ERROR_DUPLICATE_TAG 2014L
+#define ERROR_PROFILE_NOT_ASSOCIATED_WITH_DEVICE 2015L
+#define ERROR_PROFILE_NOT_FOUND 2016L
+#define ERROR_INVALID_COLORSPACE 2017L
+#define ERROR_ICM_NOT_ENABLED 2018L
+#define ERROR_DELETING_ICM_XFORM 2019L
+#define ERROR_INVALID_TRANSFORM 2020L
+#define ERROR_COLORSPACE_MISMATCH 2021L
+#define ERROR_INVALID_COLORINDEX 2022L
+#define ERROR_CONNECTED_OTHER_PASSWORD 2108L
+#define ERROR_CONNECTED_OTHER_PASSWORD_DEFAULT 2109L
+#define ERROR_BAD_USERNAME 2202L
+#define ERROR_NOT_CONNECTED 2250L
+#define ERROR_OPEN_FILES 2401L
+#define ERROR_ACTIVE_CONNECTIONS 2402L
+#define ERROR_DEVICE_IN_USE 2404L
+#define ERROR_UNKNOWN_PRINT_MONITOR 3000L
+#define ERROR_PRINTER_DRIVER_IN_USE 3001L
+#define ERROR_SPOOL_FILE_NOT_FOUND 3002L
+#define ERROR_SPL_NO_STARTDOC 3003L
+#define ERROR_SPL_NO_ADDJOB 3004L
+#define ERROR_PRINT_PROCESSOR_ALREADY_INSTALLED 3005L
+#define ERROR_PRINT_MONITOR_ALREADY_INSTALLED 3006L
+#define ERROR_INVALID_PRINT_MONITOR 3007L
+#define ERROR_PRINT_MONITOR_IN_USE 3008L
+#define ERROR_PRINTER_HAS_JOBS_QUEUED 3009L
+#define ERROR_SUCCESS_REBOOT_REQUIRED 3010L
+#define ERROR_SUCCESS_RESTART_REQUIRED 3011L
+#define ERROR_PRINTER_NOT_FOUND 3012L
+#define ERROR_PRINTER_DRIVER_WARNED 3013L
+#define ERROR_PRINTER_DRIVER_BLOCKED 3014L
+#define ERROR_WINS_INTERNAL 4000L
+#define ERROR_CAN_NOT_DEL_LOCAL_WINS 4001L
+#define ERROR_STATIC_INIT 4002L
+#define ERROR_INC_BACKUP 4003L
+#define ERROR_FULL_BACKUP 4004L
+#define ERROR_REC_NON_EXISTENT 4005L
+#define ERROR_RPL_NOT_ALLOWED 4006L
+#define ERROR_DHCP_ADDRESS_CONFLICT 4100L
+#define ERROR_WMI_GUID_NOT_FOUND 4200L
+#define ERROR_WMI_INSTANCE_NOT_FOUND 4201L
+#define ERROR_WMI_ITEMID_NOT_FOUND 4202L
+#define ERROR_WMI_TRY_AGAIN 4203L
+#define ERROR_WMI_DP_NOT_FOUND 4204L
+#define ERROR_WMI_UNRESOLVED_INSTANCE_REF 4205L
+#define ERROR_WMI_ALREADY_ENABLED 4206L
+#define ERROR_WMI_GUID_DISCONNECTED 4207L
+#define ERROR_WMI_SERVER_UNAVAILABLE 4208L
+#define ERROR_WMI_DP_FAILED 4209L
+#define ERROR_WMI_INVALID_MOF 4210L
+#define ERROR_WMI_INVALID_REGINFO 4211L
+#define ERROR_WMI_ALREADY_DISABLED 4212L
+#define ERROR_WMI_READ_ONLY 4213L
+#define ERROR_WMI_SET_FAILURE 4214L
+#define ERROR_INVALID_MEDIA 4300L
+#define ERROR_INVALID_LIBRARY 4301L
+#define ERROR_INVALID_MEDIA_POOL 4302L
+#define ERROR_DRIVE_MEDIA_MISMATCH 4303L
+#define ERROR_MEDIA_OFFLINE 4304L
+#define ERROR_LIBRARY_OFFLINE 4305L
+#define ERROR_EMPTY 4306L
+#define ERROR_NOT_EMPTY 4307L
+#define ERROR_MEDIA_UNAVAILABLE 4308L
+#define ERROR_RESOURCE_DISABLED 4309L
+#define ERROR_INVALID_CLEANER 4310L
+#define ERROR_UNABLE_TO_CLEAN 4311L
+#define ERROR_OBJECT_NOT_FOUND 4312L
+#define ERROR_DATABASE_FAILURE 4313L
+#define ERROR_DATABASE_FULL 4314L
+#define ERROR_MEDIA_INCOMPATIBLE 4315L
+#define ERROR_RESOURCE_NOT_PRESENT 4316L
+#define ERROR_INVALID_OPERATION 4317L
+#define ERROR_MEDIA_NOT_AVAILABLE 4318L
+#define ERROR_DEVICE_NOT_AVAILABLE 4319L
+#define ERROR_REQUEST_REFUSED 4320L
+#define ERROR_INVALID_DRIVE_OBJECT 4321L
+#define ERROR_LIBRARY_FULL 4322L
+#define ERROR_MEDIUM_NOT_ACCESSIBLE 4323L
+#define ERROR_UNABLE_TO_LOAD_MEDIUM 4324L
+#define ERROR_UNABLE_TO_INVENTORY_DRIVE 4325L
+#define ERROR_UNABLE_TO_INVENTORY_SLOT 4326L
+#define ERROR_UNABLE_TO_INVENTORY_TRANSPORT 4327L
+#define ERROR_TRANSPORT_FULL 4328L
+#define ERROR_CONTROLLING_IEPORT 4329L
+#define ERROR_UNABLE_TO_EJECT_MOUNTED_MEDIA 4330L
+#define ERROR_CLEANER_SLOT_SET 4331L
+#define ERROR_CLEANER_SLOT_NOT_SET 4332L
+#define ERROR_CLEANER_CARTRIDGE_SPENT 4333L
+#define ERROR_UNEXPECTED_OMID 4334L
+#define ERROR_CANT_DELETE_LAST_ITEM 4335L
+#define ERROR_MESSAGE_EXCEEDS_MAX_SIZE 4336L
+#define ERROR_VOLUME_CONTAINS_SYS_FILES 4337L
+#define ERROR_INDIGENOUS_TYPE 4338L
+#define ERROR_NO_SUPPORTING_DRIVES 4339L
+#define ERROR_CLEANER_CARTRIDGE_INSTALLED 4340L
+#define ERROR_FILE_OFFLINE 4350L
+#define ERROR_REMOTE_STORAGE_NOT_ACTIVE 4351L
+#define ERROR_REMOTE_STORAGE_MEDIA_ERROR 4352L
+#define ERROR_NOT_A_REPARSE_POINT 4390L
+#define ERROR_REPARSE_ATTRIBUTE_CONFLICT 4391L
+#define ERROR_INVALID_REPARSE_DATA 4392L
+#define ERROR_REPARSE_TAG_INVALID 4393L
+#define ERROR_REPARSE_TAG_MISMATCH 4394L
+#define ERROR_VOLUME_NOT_SIS_ENABLED 4500L
+#define ERROR_DEPENDENT_RESOURCE_EXISTS 5001L
+#define ERROR_DEPENDENCY_NOT_FOUND 5002L
+#define ERROR_DEPENDENCY_ALREADY_EXISTS 5003L
+#define ERROR_RESOURCE_NOT_ONLINE 5004L
+#define ERROR_HOST_NODE_NOT_AVAILABLE 5005L
+#define ERROR_RESOURCE_NOT_AVAILABLE 5006L
+#define ERROR_RESOURCE_NOT_FOUND 5007L
+#define ERROR_SHUTDOWN_CLUSTER 5008L
+#define ERROR_CANT_EVICT_ACTIVE_NODE 5009L
+#define ERROR_OBJECT_ALREADY_EXISTS 5010L
+#define ERROR_OBJECT_IN_LIST 5011L
+#define ERROR_GROUP_NOT_AVAILABLE 5012L
+#define ERROR_GROUP_NOT_FOUND 5013L
+#define ERROR_GROUP_NOT_ONLINE 5014L
+#define ERROR_HOST_NODE_NOT_RESOURCE_OWNER 5015L
+#define ERROR_HOST_NODE_NOT_GROUP_OWNER 5016L
+#define ERROR_RESMON_CREATE_FAILED 5017L
+#define ERROR_RESMON_ONLINE_FAILED 5018L
+#define ERROR_RESOURCE_ONLINE 5019L
+#define ERROR_QUORUM_RESOURCE 5020L
+#define ERROR_NOT_QUORUM_CAPABLE 5021L
+#define ERROR_CLUSTER_SHUTTING_DOWN 5022L
+#define ERROR_INVALID_STATE 5023L
+#define ERROR_RESOURCE_PROPERTIES_STORED 5024L
+#define ERROR_NOT_QUORUM_CLASS 5025L
+#define ERROR_CORE_RESOURCE 5026L
+#define ERROR_QUORUM_RESOURCE_ONLINE_FAILED 5027L
+#define ERROR_QUORUMLOG_OPEN_FAILED 5028L
+#define ERROR_CLUSTERLOG_CORRUPT 5029L
+#define ERROR_CLUSTERLOG_RECORD_EXCEEDS_MAXSIZE 5030L
+#define ERROR_CLUSTERLOG_EXCEEDS_MAXSIZE 5031L
+#define ERROR_CLUSTERLOG_CHKPOINT_NOT_FOUND 5032L
+#define ERROR_CLUSTERLOG_NOT_ENOUGH_SPACE 5033L
+#define ERROR_QUORUM_OWNER_ALIVE 5034L
+#define ERROR_NETWORK_NOT_AVAILABLE 5035L
+#define ERROR_NODE_NOT_AVAILABLE 5036L
+#define ERROR_ALL_NODES_NOT_AVAILABLE 5037L
+#define ERROR_RESOURCE_FAILED 5038L
+#define ERROR_CLUSTER_INVALID_NODE 5039L
+#define ERROR_CLUSTER_NODE_EXISTS 5040L
+#define ERROR_CLUSTER_JOIN_IN_PROGRESS 5041L
+#define ERROR_CLUSTER_NODE_NOT_FOUND 5042L
+#define ERROR_CLUSTER_LOCAL_NODE_NOT_FOUND 5043L
+#define ERROR_CLUSTER_NETWORK_EXISTS 5044L
+#define ERROR_CLUSTER_NETWORK_NOT_FOUND 5045L
+#define ERROR_CLUSTER_NETINTERFACE_EXISTS 5046L
+#define ERROR_CLUSTER_NETINTERFACE_NOT_FOUND 5047L
+#define ERROR_CLUSTER_INVALID_REQUEST 5048L
+#define ERROR_CLUSTER_INVALID_NETWORK_PROVIDER 5049L
+#define ERROR_CLUSTER_NODE_DOWN 5050L
+#define ERROR_CLUSTER_NODE_UNREACHABLE 5051L
+#define ERROR_CLUSTER_NODE_NOT_MEMBER 5052L
+#define ERROR_CLUSTER_JOIN_NOT_IN_PROGRESS 5053L
+#define ERROR_CLUSTER_INVALID_NETWORK 5054L
+#define ERROR_CLUSTER_NODE_UP 5056L
+#define ERROR_CLUSTER_IPADDR_IN_USE 5057L
+#define ERROR_CLUSTER_NODE_NOT_PAUSED 5058L
+#define ERROR_CLUSTER_NO_SECURITY_CONTEXT 5059L
+#define ERROR_CLUSTER_NETWORK_NOT_INTERNAL 5060L
+#define ERROR_CLUSTER_NODE_ALREADY_UP 5061L
+#define ERROR_CLUSTER_NODE_ALREADY_DOWN 5062L
+#define ERROR_CLUSTER_NETWORK_ALREADY_ONLINE 5063L
+#define ERROR_CLUSTER_NETWORK_ALREADY_OFFLINE 5064L
+#define ERROR_CLUSTER_NODE_ALREADY_MEMBER 5065L
+#define ERROR_CLUSTER_LAST_INTERNAL_NETWORK 5066L
+#define ERROR_CLUSTER_NETWORK_HAS_DEPENDENTS 5067L
+#define ERROR_INVALID_OPERATION_ON_QUORUM 5068L
+#define ERROR_DEPENDENCY_NOT_ALLOWED 5069L
+#define ERROR_CLUSTER_NODE_PAUSED 5070L
+#define ERROR_NODE_CANT_HOST_RESOURCE 5071L
+#define ERROR_CLUSTER_NODE_NOT_READY 5072L
+#define ERROR_CLUSTER_NODE_SHUTTING_DOWN 5073L
+#define ERROR_CLUSTER_JOIN_ABORTED 5074L
+#define ERROR_CLUSTER_INCOMPATIBLE_VERSIONS 5075L
+#define ERROR_CLUSTER_MAXNUM_OF_RESOURCES_EXCEEDED 5076L
+#define ERROR_CLUSTER_SYSTEM_CONFIG_CHANGED 5077L
+#define ERROR_CLUSTER_RESOURCE_TYPE_NOT_FOUND 5078L
+#define ERROR_CLUSTER_RESTYPE_NOT_SUPPORTED 5079L
+#define ERROR_CLUSTER_RESNAME_NOT_FOUND 5080L
+#define ERROR_CLUSTER_NO_RPC_PACKAGES_REGISTERED 5081L
+#define ERROR_CLUSTER_OWNER_NOT_IN_PREFLIST 5082L
+#define ERROR_CLUSTER_DATABASE_SEQMISMATCH 5083L
+#define ERROR_RESMON_INVALID_STATE 5084L
+#define ERROR_CLUSTER_GUM_NOT_LOCKER 5085L
+#define ERROR_QUORUM_DISK_NOT_FOUND 5086L
+#define ERROR_DATABASE_BACKUP_CORRUPT 5087L
+#define ERROR_CLUSTER_NODE_ALREADY_HAS_DFS_ROOT 5088L
+#define ERROR_RESOURCE_PROPERTY_UNCHANGEABLE 5089L
+#define ERROR_CLUSTER_MEMBERSHIP_INVALID_STATE 5890L
+#define ERROR_CLUSTER_QUORUMLOG_NOT_FOUND 5891L
+#define ERROR_CLUSTER_MEMBERSHIP_HALT 5892L
+#define ERROR_CLUSTER_INSTANCE_ID_MISMATCH 5893L
+#define ERROR_CLUSTER_NETWORK_NOT_FOUND_FOR_IP 5894L
+#define ERROR_CLUSTER_PROPERTY_DATA_TYPE_MISMATCH 5895L
+#define ERROR_CLUSTER_EVICT_WITHOUT_CLEANUP 5896L
+#define ERROR_CLUSTER_PARAMETER_MISMATCH 5897L
+#define ERROR_NODE_CANNOT_BE_CLUSTERED 5898L
+#define ERROR_CLUSTER_WRONG_OS_VERSION 5899L
+#define ERROR_CLUSTER_CANT_CREATE_DUP_CLUSTER_NAME 5900L
+#define ERROR_CLUSCFG_ALREADY_COMMITTED 5901L
+#define ERROR_CLUSCFG_ROLLBACK_FAILED 5902L
+#define ERROR_CLUSCFG_SYSTEM_DISK_DRIVE_LETTER_CONFLICT 5903L
+#define ERROR_CLUSTER_OLD_VERSION 5904L
+#define ERROR_CLUSTER_MISMATCHED_COMPUTER_ACCT_NAME 5905L
+#define ERROR_ENCRYPTION_FAILED 6000L
+#define ERROR_DECRYPTION_FAILED 6001L
+#define ERROR_FILE_ENCRYPTED 6002L
+#define ERROR_NO_RECOVERY_POLICY 6003L
+#define ERROR_NO_EFS 6004L
+#define ERROR_WRONG_EFS 6005L
+#define ERROR_NO_USER_KEYS 6006L
+#define ERROR_FILE_NOT_ENCRYPTED 6007L
+#define ERROR_NOT_EXPORT_FORMAT 6008L
+#define ERROR_FILE_READ_ONLY 6009L
+#define ERROR_DIR_EFS_DISALLOWED 6010L
+#define ERROR_EFS_SERVER_NOT_TRUSTED 6011L
+#define ERROR_BAD_RECOVERY_POLICY 6012L
+#define ERROR_EFS_ALG_BLOB_TOO_BIG 6013L
+#define ERROR_VOLUME_NOT_SUPPORT_EFS 6014L
+#define ERROR_EFS_DISABLED 6015L
+#define ERROR_EFS_VERSION_NOT_SUPPORT 6016L
+#define ERROR_NO_BROWSER_SERVERS_FOUND 6118L
+#define SCHED_E_SERVICE_NOT_LOCALSYSTEM 6200L
+
+#define ERROR_CTX_WINSTATION_NAME_INVALID 7001L
+#define ERROR_CTX_INVALID_PD 7002L
+#define ERROR_CTX_PD_NOT_FOUND 7003L
+#define ERROR_CTX_WD_NOT_FOUND 7004L
+#define ERROR_CTX_CANNOT_MAKE_EVENTLOG_ENTRY 7005L
+#define ERROR_CTX_SERVICE_NAME_COLLISION 7006L
+#define ERROR_CTX_CLOSE_PENDING 7007L
+#define ERROR_CTX_NO_OUTBUF 7008L
+#define ERROR_CTX_MODEM_INF_NOT_FOUND 7009L
+#define ERROR_CTX_INVALID_MODEMNAME 7010L
+#define ERROR_CTX_MODEM_RESPONSE_ERROR 7011L
+#define ERROR_CTX_MODEM_RESPONSE_TIMEOUT 7012L
+#define ERROR_CTX_MODEM_RESPONSE_NO_CARRIER 7013L
+#define ERROR_CTX_MODEM_RESPONSE_NO_DIALTONE 7014L
+#define ERROR_CTX_MODEM_RESPONSE_BUSY 7015L
+#define ERROR_CTX_MODEM_RESPONSE_VOICE 7016L
+#define ERROR_CTX_TD_ERROR 7017L
+#define ERROR_CTX_WINSTATION_NOT_FOUND 7022L
+#define ERROR_CTX_WINSTATION_ALREADY_EXISTS 7023L
+#define ERROR_CTX_WINSTATION_BUSY 7024L
+#define ERROR_CTX_BAD_VIDEO_MODE 7025L
+#define ERROR_CTX_GRAPHICS_INVALID 7035L
+#define ERROR_CTX_LOGON_DISABLED 7037L
+#define ERROR_CTX_NOT_CONSOLE 7038L
+#define ERROR_CTX_CLIENT_QUERY_TIMEOUT 7040L
+#define ERROR_CTX_CONSOLE_DISCONNECT 7041L
+#define ERROR_CTX_CONSOLE_CONNECT 7042L
+#define ERROR_CTX_SHADOW_DENIED 7044L
+#define ERROR_CTX_WINSTATION_ACCESS_DENIED 7045L
+#define ERROR_CTX_INVALID_WD 7049L
+#define ERROR_CTX_SHADOW_INVALID 7050L
+#define ERROR_CTX_SHADOW_DISABLED 7051L
+#define ERROR_CTX_CLIENT_LICENSE_IN_USE 7052L
+#define ERROR_CTX_CLIENT_LICENSE_NOT_SET 7053L
+#define ERROR_CTX_LICENSE_NOT_AVAILABLE 7054L
+#define ERROR_CTX_LICENSE_CLIENT_INVALID 7055L
+#define ERROR_CTX_LICENSE_EXPIRED 7056L
+#define ERROR_CTX_SHADOW_NOT_RUNNING 7057L
+#define ERROR_CTX_SHADOW_ENDED_BY_MODE_CHANGE 7058L
+#define ERROR_ACTIVATION_COUNT_EXCEEDED 7059L
+
+#define FRS_ERR_INVALID_API_SEQUENCE 8001L
+#define FRS_ERR_STARTING_SERVICE 8002L
+#define FRS_ERR_STOPPING_SERVICE 8003L
+#define FRS_ERR_INTERNAL_API 8004L
+#define FRS_ERR_INTERNAL 8005L
+#define FRS_ERR_SERVICE_COMM 8006L
+#define FRS_ERR_INSUFFICIENT_PRIV 8007L
+#define FRS_ERR_AUTHENTICATION 8008L
+#define FRS_ERR_PARENT_INSUFFICIENT_PRIV 8009L
+#define FRS_ERR_PARENT_AUTHENTICATION 8010L
+#define FRS_ERR_CHILD_TO_PARENT_COMM 8011L
+#define FRS_ERR_PARENT_TO_CHILD_COMM 8012L
+#define FRS_ERR_SYSVOL_POPULATE 8013L
+#define FRS_ERR_SYSVOL_POPULATE_TIMEOUT 8014L
+#define FRS_ERR_SYSVOL_IS_BUSY 8015L
+#define FRS_ERR_SYSVOL_DEMOTE 8016L
+#define FRS_ERR_INVALID_SERVICE_PARAMETER 8017L
+#define ERROR_DS_NOT_INSTALLED 8200L
+#define ERROR_DS_MEMBERSHIP_EVALUATED_LOCALLY 8201L
+#define ERROR_DS_NO_ATTRIBUTE_OR_VALUE 8202L
+#define ERROR_DS_INVALID_ATTRIBUTE_SYNTAX 8203L
+#define ERROR_DS_ATTRIBUTE_TYPE_UNDEFINED 8204L
+#define ERROR_DS_ATTRIBUTE_OR_VALUE_EXISTS 8205L
+#define ERROR_DS_BUSY 8206L
+#define ERROR_DS_UNAVAILABLE 8207L
+#define ERROR_DS_NO_RIDS_ALLOCATED 8208L
+#define ERROR_DS_NO_MORE_RIDS 8209L
+#define ERROR_DS_INCORRECT_ROLE_OWNER 8210L
+#define ERROR_DS_RIDMGR_INIT_ERROR 8211L
+#define ERROR_DS_OBJ_CLASS_VIOLATION 8212L
+#define ERROR_DS_CANT_ON_NON_LEAF 8213L
+#define ERROR_DS_CANT_ON_RDN 8214L
+#define ERROR_DS_CANT_MOD_OBJ_CLASS 8215L
+#define ERROR_DS_CROSS_DOM_MOVE_ERROR 8216L
+#define ERROR_DS_GC_NOT_AVAILABLE 8217L
+#define ERROR_SHARED_POLICY 8218L
+#define ERROR_POLICY_OBJECT_NOT_FOUND 8219L
+#define ERROR_POLICY_ONLY_IN_DS 8220L
+#define ERROR_PROMOTION_ACTIVE 8221L
+#define ERROR_NO_PROMOTION_ACTIVE 8222L
+#define ERROR_DS_OPERATIONS_ERROR 8224L
+#define ERROR_DS_PROTOCOL_ERROR 8225L
+#define ERROR_DS_TIMELIMIT_EXCEEDED 8226L
+#define ERROR_DS_SIZELIMIT_EXCEEDED 8227L
+#define ERROR_DS_ADMIN_LIMIT_EXCEEDED 8228L
+#define ERROR_DS_COMPARE_FALSE 8229L
+#define ERROR_DS_COMPARE_TRUE 8230L
+#define ERROR_DS_AUTH_METHOD_NOT_SUPPORTED 8231L
+#define ERROR_DS_STRONG_AUTH_REQUIRED 8232L
+#define ERROR_DS_INAPPROPRIATE_AUTH 8233L
+#define ERROR_DS_AUTH_UNKNOWN 8234L
+#define ERROR_DS_REFERRAL 8235L
+#define ERROR_DS_UNAVAILABLE_CRIT_EXTENSION 8236L
+#define ERROR_DS_CONFIDENTIALITY_REQUIRED 8237L
+#define ERROR_DS_INAPPROPRIATE_MATCHING 8238L
+#define ERROR_DS_CONSTRAINT_VIOLATION 8239L
+#define ERROR_DS_NO_SUCH_OBJECT 8240L
+#define ERROR_DS_ALIAS_PROBLEM 8241L
+#define ERROR_DS_INVALID_DN_SYNTAX 8242L
+#define ERROR_DS_IS_LEAF 8243L
+#define ERROR_DS_ALIAS_DEREF_PROBLEM 8244L
+#define ERROR_DS_UNWILLING_TO_PERFORM 8245L
+#define ERROR_DS_LOOP_DETECT 8246L
+#define ERROR_DS_NAMING_VIOLATION 8247L
+#define ERROR_DS_OBJECT_RESULTS_TOO_LARGE 8248L
+#define ERROR_DS_AFFECTS_MULTIPLE_DSAS 8249L
+#define ERROR_DS_SERVER_DOWN 8250L
+#define ERROR_DS_LOCAL_ERROR 8251L
+#define ERROR_DS_ENCODING_ERROR 8252L
+#define ERROR_DS_DECODING_ERROR 8253L
+#define ERROR_DS_FILTER_UNKNOWN 8254L
+#define ERROR_DS_PARAM_ERROR 8255L
+#define ERROR_DS_NOT_SUPPORTED 8256L
+#define ERROR_DS_NO_RESULTS_RETURNED 8257L
+#define ERROR_DS_CONTROL_NOT_FOUND 8258L
+#define ERROR_DS_CLIENT_LOOP 8259L
+#define ERROR_DS_REFERRAL_LIMIT_EXCEEDED 8260L
+#define ERROR_DS_SORT_CONTROL_MISSING 8261L
+#define ERROR_DS_OFFSET_RANGE_ERROR 8262L
+#define ERROR_DS_ROOT_MUST_BE_NC 8301L
+#define ERROR_DS_ADD_REPLICA_INHIBITED 8302L
+#define ERROR_DS_ATT_NOT_DEF_IN_SCHEMA 8303L
+#define ERROR_DS_MAX_OBJ_SIZE_EXCEEDED 8304L
+#define ERROR_DS_OBJ_STRING_NAME_EXISTS 8305L
+#define ERROR_DS_NO_RDN_DEFINED_IN_SCHEMA 8306L
+#define ERROR_DS_RDN_DOESNT_MATCH_SCHEMA 8307L
+#define ERROR_DS_NO_REQUESTED_ATTS_FOUND 8308L
+#define ERROR_DS_USER_BUFFER_TO_SMALL 8309L
+#define ERROR_DS_ATT_IS_NOT_ON_OBJ 8310L
+#define ERROR_DS_ILLEGAL_MOD_OPERATION 8311L
+#define ERROR_DS_OBJ_TOO_LARGE 8312L
+#define ERROR_DS_BAD_INSTANCE_TYPE 8313L
+#define ERROR_DS_MASTERDSA_REQUIRED 8314L
+#define ERROR_DS_OBJECT_CLASS_REQUIRED 8315L
+#define ERROR_DS_MISSING_REQUIRED_ATT 8316L
+#define ERROR_DS_ATT_NOT_DEF_FOR_CLASS 8317L
+#define ERROR_DS_ATT_ALREADY_EXISTS 8318L
+#define ERROR_DS_CANT_ADD_ATT_VALUES 8320L
+#define ERROR_DS_SINGLE_VALUE_CONSTRAINT 8321L
+#define ERROR_DS_RANGE_CONSTRAINT 8322L
+#define ERROR_DS_ATT_VAL_ALREADY_EXISTS 8323L
+#define ERROR_DS_CANT_REM_MISSING_ATT 8324L
+#define ERROR_DS_CANT_REM_MISSING_ATT_VAL 8325L
+#define ERROR_DS_ROOT_CANT_BE_SUBREF 8326L
+#define ERROR_DS_NO_CHAINING 8327L
+#define ERROR_DS_NO_CHAINED_EVAL 8328L
+#define ERROR_DS_NO_PARENT_OBJECT 8329L
+#define ERROR_DS_PARENT_IS_AN_ALIAS 8330L
+#define ERROR_DS_CANT_MIX_MASTER_AND_REPS 8331L
+#define ERROR_DS_CHILDREN_EXIST 8332L
+#define ERROR_DS_OBJ_NOT_FOUND 8333L
+#define ERROR_DS_ALIASED_OBJ_MISSING 8334L
+#define ERROR_DS_BAD_NAME_SYNTAX 8335L
+#define ERROR_DS_ALIAS_POINTS_TO_ALIAS 8336L
+#define ERROR_DS_CANT_DEREF_ALIAS 8337L
+#define ERROR_DS_OUT_OF_SCOPE 8338L
+#define ERROR_DS_OBJECT_BEING_REMOVED 8339L
+#define ERROR_DS_CANT_DELETE_DSA_OBJ 8340L
+#define ERROR_DS_GENERIC_ERROR 8341L
+#define ERROR_DS_DSA_MUST_BE_INT_MASTER 8342L
+#define ERROR_DS_CLASS_NOT_DSA 8343L
+#define ERROR_DS_INSUFF_ACCESS_RIGHTS 8344L
+#define ERROR_DS_ILLEGAL_SUPERIOR 8345L
+#define ERROR_DS_ATTRIBUTE_OWNED_BY_SAM 8346L
+#define ERROR_DS_NAME_TOO_MANY_PARTS 8347L
+#define ERROR_DS_NAME_TOO_LONG 8348L
+#define ERROR_DS_NAME_VALUE_TOO_LONG 8349L
+#define ERROR_DS_NAME_UNPARSEABLE 8350L
+#define ERROR_DS_NAME_TYPE_UNKNOWN 8351L
+#define ERROR_DS_NOT_AN_OBJECT 8352L
+#define ERROR_DS_SEC_DESC_TOO_SHORT 8353L
+#define ERROR_DS_SEC_DESC_INVALID 8354L
+#define ERROR_DS_NO_DELETED_NAME 8355L
+#define ERROR_DS_SUBREF_MUST_HAVE_PARENT 8356L
+#define ERROR_DS_NCNAME_MUST_BE_NC 8357L
+#define ERROR_DS_CANT_ADD_SYSTEM_ONLY 8358L
+#define ERROR_DS_CLASS_MUST_BE_CONCRETE 8359L
+#define ERROR_DS_INVALID_DMD 8360L
+#define ERROR_DS_OBJ_GUID_EXISTS 8361L
+#define ERROR_DS_NOT_ON_BACKLINK 8362L
+#define ERROR_DS_NO_CROSSREF_FOR_NC 8363L
+#define ERROR_DS_SHUTTING_DOWN 8364L
+#define ERROR_DS_UNKNOWN_OPERATION 8365L
+#define ERROR_DS_INVALID_ROLE_OWNER 8366L
+#define ERROR_DS_COULDNT_CONTACT_FSMO 8367L
+#define ERROR_DS_CROSS_NC_DN_RENAME 8368L
+#define ERROR_DS_CANT_MOD_SYSTEM_ONLY 8369L
+#define ERROR_DS_REPLICATOR_ONLY 8370L
+#define ERROR_DS_OBJ_CLASS_NOT_DEFINED 8371L
+#define ERROR_DS_OBJ_CLASS_NOT_SUBCLASS 8372L
+#define ERROR_DS_NAME_REFERENCE_INVALID 8373L
+#define ERROR_DS_CROSS_REF_EXISTS 8374L
+#define ERROR_DS_CANT_DEL_MASTER_CROSSREF 8375L
+#define ERROR_DS_SUBTREE_NOTIFY_NOT_NC_HEAD 8376L
+#define ERROR_DS_NOTIFY_FILTER_TOO_COMPLEX 8377L
+#define ERROR_DS_DUP_RDN 8378L
+#define ERROR_DS_DUP_OID 8379L
+#define ERROR_DS_DUP_MAPI_ID 8380L
+#define ERROR_DS_DUP_SCHEMA_ID_GUID 8381L
+#define ERROR_DS_DUP_LDAP_DISPLAY_NAME 8382L
+#define ERROR_DS_SEMANTIC_ATT_TEST 8383L
+#define ERROR_DS_SYNTAX_MISMATCH 8384L
+#define ERROR_DS_EXISTS_IN_MUST_HAVE 8385L
+#define ERROR_DS_EXISTS_IN_MAY_HAVE 8386L
+#define ERROR_DS_NONEXISTENT_MAY_HAVE 8387L
+#define ERROR_DS_NONEXISTENT_MUST_HAVE 8388L
+#define ERROR_DS_AUX_CLS_TEST_FAIL 8389L
+#define ERROR_DS_NONEXISTENT_POSS_SUP 8390L
+#define ERROR_DS_SUB_CLS_TEST_FAIL 8391L
+#define ERROR_DS_BAD_RDN_ATT_ID_SYNTAX 8392L
+#define ERROR_DS_EXISTS_IN_AUX_CLS 8393L
+#define ERROR_DS_EXISTS_IN_SUB_CLS 8394L
+#define ERROR_DS_EXISTS_IN_POSS_SUP 8395L
+#define ERROR_DS_RECALCSCHEMA_FAILED 8396L
+#define ERROR_DS_TREE_DELETE_NOT_FINISHED 8397L
+#define ERROR_DS_CANT_DELETE 8398L
+#define ERROR_DS_ATT_SCHEMA_REQ_ID 8399L
+#define ERROR_DS_BAD_ATT_SCHEMA_SYNTAX 8400L
+#define ERROR_DS_CANT_CACHE_ATT 8401L
+#define ERROR_DS_CANT_CACHE_CLASS 8402L
+#define ERROR_DS_CANT_REMOVE_ATT_CACHE 8403L
+#define ERROR_DS_CANT_REMOVE_CLASS_CACHE 8404L
+#define ERROR_DS_CANT_RETRIEVE_DN 8405L
+#define ERROR_DS_MISSING_SUPREF 8406L
+#define ERROR_DS_CANT_RETRIEVE_INSTANCE 8407L
+#define ERROR_DS_CODE_INCONSISTENCY 8408L
+#define ERROR_DS_DATABASE_ERROR 8409L
+#define ERROR_DS_GOVERNSID_MISSING 8410L
+#define ERROR_DS_MISSING_EXPECTED_ATT 8411L
+#define ERROR_DS_NCNAME_MISSING_CR_REF 8412L
+#define ERROR_DS_SECURITY_CHECKING_ERROR 8413L
+#define ERROR_DS_SCHEMA_NOT_LOADED 8414L
+#define ERROR_DS_SCHEMA_ALLOC_FAILED 8415L
+#define ERROR_DS_ATT_SCHEMA_REQ_SYNTAX 8416L
+#define ERROR_DS_GCVERIFY_ERROR 8417L
+#define ERROR_DS_DRA_SCHEMA_MISMATCH 8418L
+#define ERROR_DS_CANT_FIND_DSA_OBJ 8419L
+#define ERROR_DS_CANT_FIND_EXPECTED_NC 8420L
+#define ERROR_DS_CANT_FIND_NC_IN_CACHE 8421L
+#define ERROR_DS_CANT_RETRIEVE_CHILD 8422L
+#define ERROR_DS_SECURITY_ILLEGAL_MODIFY 8423L
+#define ERROR_DS_CANT_REPLACE_HIDDEN_REC 8424L
+#define ERROR_DS_BAD_HIERARCHY_FILE 8425L
+#define ERROR_DS_BUILD_HIERARCHY_TABLE_FAILED 8426L
+#define ERROR_DS_CONFIG_PARAM_MISSING 8427L
+#define ERROR_DS_COUNTING_AB_INDICES_FAILED 8428L
+#define ERROR_DS_HIERARCHY_TABLE_MALLOC_FAILED 8429L
+#define ERROR_DS_INTERNAL_FAILURE 8430L
+#define ERROR_DS_UNKNOWN_ERROR 8431L
+#define ERROR_DS_ROOT_REQUIRES_CLASS_TOP 8432L
+#define ERROR_DS_REFUSING_FSMO_ROLES 8433L
+#define ERROR_DS_MISSING_FSMO_SETTINGS 8434L
+#define ERROR_DS_UNABLE_TO_SURRENDER_ROLES 8435L
+#define ERROR_DS_DRA_GENERIC 8436L
+#define ERROR_DS_DRA_INVALID_PARAMETER 8437L
+#define ERROR_DS_DRA_BUSY 8438L
+#define ERROR_DS_DRA_BAD_DN 8439L
+#define ERROR_DS_DRA_BAD_NC 8440L
+#define ERROR_DS_DRA_DN_EXISTS 8441L
+#define ERROR_DS_DRA_INTERNAL_ERROR 8442L
+#define ERROR_DS_DRA_INCONSISTENT_DIT 8443L
+#define ERROR_DS_DRA_CONNECTION_FAILED 8444L
+#define ERROR_DS_DRA_BAD_INSTANCE_TYPE 8445L
+#define ERROR_DS_DRA_OUT_OF_MEM 8446L
+#define ERROR_DS_DRA_MAIL_PROBLEM 8447L
+#define ERROR_DS_DRA_REF_ALREADY_EXISTS 8448L
+#define ERROR_DS_DRA_REF_NOT_FOUND 8449L
+#define ERROR_DS_DRA_OBJ_IS_REP_SOURCE 8450L
+#define ERROR_DS_DRA_DB_ERROR 8451L
+#define ERROR_DS_DRA_NO_REPLICA 8452L
+#define ERROR_DS_DRA_ACCESS_DENIED 8453L
+#define ERROR_DS_DRA_NOT_SUPPORTED 8454L
+#define ERROR_DS_DRA_RPC_CANCELLED 8455L
+#define ERROR_DS_DRA_SOURCE_DISABLED 8456L
+#define ERROR_DS_DRA_SINK_DISABLED 8457L
+#define ERROR_DS_DRA_NAME_COLLISION 8458L
+#define ERROR_DS_DRA_SOURCE_REINSTALLED 8459L
+#define ERROR_DS_DRA_MISSING_PARENT 8460L
+#define ERROR_DS_DRA_PREEMPTED 8461L
+#define ERROR_DS_DRA_ABANDON_SYNC 8462L
+#define ERROR_DS_DRA_SHUTDOWN 8463L
+#define ERROR_DS_DRA_INCOMPATIBLE_PARTIAL_SET 8464L
+#define ERROR_DS_DRA_SOURCE_IS_PARTIAL_REPLICA 8465L
+#define ERROR_DS_DRA_EXTN_CONNECTION_FAILED 8466L
+#define ERROR_DS_INSTALL_SCHEMA_MISMATCH 8467L
+#define ERROR_DS_DUP_LINK_ID 8468L
+#define ERROR_DS_NAME_ERROR_RESOLVING 8469L
+#define ERROR_DS_NAME_ERROR_NOT_FOUND 8470L
+#define ERROR_DS_NAME_ERROR_NOT_UNIQUE 8471L
+#define ERROR_DS_NAME_ERROR_NO_MAPPING 8472L
+#define ERROR_DS_NAME_ERROR_DOMAIN_ONLY 8473L
+#define ERROR_DS_NAME_ERROR_NO_SYNTACTICAL_MAPPING 8474L
+#define ERROR_DS_CONSTRUCTED_ATT_MOD 8475L
+#define ERROR_DS_WRONG_OM_OBJ_CLASS 8476L
+#define ERROR_DS_DRA_REPL_PENDING 8477L
+#define ERROR_DS_DS_REQUIRED 8478L
+#define ERROR_DS_INVALID_LDAP_DISPLAY_NAME 8479L
+#define ERROR_DS_NON_BASE_SEARCH 8480L
+#define ERROR_DS_CANT_RETRIEVE_ATTS 8481L
+#define ERROR_DS_BACKLINK_WITHOUT_LINK 8482L
+#define ERROR_DS_EPOCH_MISMATCH 8483L
+#define ERROR_DS_SRC_NAME_MISMATCH 8484L
+#define ERROR_DS_SRC_AND_DST_NC_IDENTICAL 8485L
+#define ERROR_DS_DST_NC_MISMATCH 8486L
+#define ERROR_DS_NOT_AUTHORITIVE_FOR_DST_NC 8487L
+#define ERROR_DS_SRC_GUID_MISMATCH 8488L
+#define ERROR_DS_CANT_MOVE_DELETED_OBJECT 8489L
+#define ERROR_DS_PDC_OPERATION_IN_PROGRESS 8490L
+#define ERROR_DS_CROSS_DOMAIN_CLEANUP_REQD 8491L
+#define ERROR_DS_ILLEGAL_XDOM_MOVE_OPERATION 8492L
+#define ERROR_DS_CANT_WITH_ACCT_GROUP_MEMBERSHPS 8493L
+#define ERROR_DS_NC_MUST_HAVE_NC_PARENT 8494L
+#define ERROR_DS_CR_IMPOSSIBLE_TO_VALIDATE 8495L
+#define ERROR_DS_DST_DOMAIN_NOT_NATIVE 8496L
+#define ERROR_DS_MISSING_INFRASTRUCTURE_CONTAINER 8497L
+#define ERROR_DS_CANT_MOVE_ACCOUNT_GROUP 8498L
+#define ERROR_DS_CANT_MOVE_RESOURCE_GROUP 8499L
+#define ERROR_DS_INVALID_SEARCH_FLAG 8500L
+#define ERROR_DS_NO_TREE_DELETE_ABOVE_NC 8501L
+#define ERROR_DS_COULDNT_LOCK_TREE_FOR_DELETE 8502L
+#define ERROR_DS_COULDNT_IDENTIFY_OBJECTS_FOR_TREE_DELETE 8503L
+#define ERROR_DS_SAM_INIT_FAILURE 8504L
+#define ERROR_DS_SENSITIVE_GROUP_VIOLATION 8505L
+#define ERROR_DS_CANT_MOD_PRIMARYGROUPID 8506L
+#define ERROR_DS_ILLEGAL_BASE_SCHEMA_MOD 8507L
+#define ERROR_DS_NONSAFE_SCHEMA_CHANGE 8508L
+#define ERROR_DS_SCHEMA_UPDATE_DISALLOWED 8509L
+#define ERROR_DS_CANT_CREATE_UNDER_SCHEMA 8510L
+#define ERROR_DS_INSTALL_NO_SRC_SCH_VERSION 8511L
+#define ERROR_DS_INSTALL_NO_SCH_VERSION_IN_INIFILE 8512L
+#define ERROR_DS_INVALID_GROUP_TYPE 8513L
+#define ERROR_DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN 8514L
+#define ERROR_DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN 8515L
+#define ERROR_DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER 8516L
+#define ERROR_DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER 8517L
+#define ERROR_DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER 8518L
+#define ERROR_DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER 8519L
+#define ERROR_DS_LOCAL_CANT_HAVE_CROSSDOMAIN_LOCAL_MEMBER 8520L
+#define ERROR_DS_HAVE_PRIMARY_MEMBERS 8521L
+#define ERROR_DS_STRING_SD_CONVERSION_FAILED 8522L
+#define ERROR_DS_NAMING_MASTER_GC 8523L
+#define ERROR_DS_DNS_LOOKUP_FAILURE 8524L
+#define ERROR_DS_COULDNT_UPDATE_SPNS 8525L
+#define ERROR_DS_CANT_RETRIEVE_SD 8526L
+#define ERROR_DS_KEY_NOT_UNIQUE 8527L
+#define ERROR_DS_WRONG_LINKED_ATT_SYNTAX 8528L
+#define ERROR_DS_SAM_NEED_BOOTKEY_PASSWORD 8529L
+#define ERROR_DS_SAM_NEED_BOOTKEY_FLOPPY 8530L
+#define ERROR_DS_CANT_START 8531L
+#define ERROR_DS_INIT_FAILURE 8532L
+#define ERROR_DS_NO_PKT_PRIVACY_ON_CONNECTION 8533L
+#define ERROR_DS_SOURCE_DOMAIN_IN_FOREST 8534L
+#define ERROR_DS_DESTINATION_DOMAIN_NOT_IN_FOREST 8535L
+#define ERROR_DS_DESTINATION_AUDITING_NOT_ENABLED 8536L
+#define ERROR_DS_CANT_FIND_DC_FOR_SRC_DOMAIN 8537L
+#define ERROR_DS_SRC_OBJ_NOT_GROUP_OR_USER 8538L
+#define ERROR_DS_SRC_SID_EXISTS_IN_FOREST 8539L
+#define ERROR_DS_SRC_AND_DST_OBJECT_CLASS_MISMATCH 8540L
+#define ERROR_SAM_INIT_FAILURE 8541L
+#define ERROR_DS_DRA_SCHEMA_INFO_SHIP 8542L
+#define ERROR_DS_DRA_SCHEMA_CONFLICT 8543L
+#define ERROR_DS_DRA_EARLIER_SCHEMA_CONFLICT 8544L
+#define ERROR_DS_DRA_OBJ_NC_MISMATCH 8545L
+#define ERROR_DS_NC_STILL_HAS_DSAS 8546L
+#define ERROR_DS_GC_REQUIRED 8547L
+#define ERROR_DS_LOCAL_MEMBER_OF_LOCAL_ONLY 8548L
+#define ERROR_DS_NO_FPO_IN_UNIVERSAL_GROUPS 8549L
+#define ERROR_DS_CANT_ADD_TO_GC 8550L
+#define ERROR_DS_NO_CHECKPOINT_WITH_PDC 8551L
+#define ERROR_DS_SOURCE_AUDITING_NOT_ENABLED 8552L
+#define ERROR_DS_CANT_CREATE_IN_NONDOMAIN_NC 8553L
+#define ERROR_DS_INVALID_NAME_FOR_SPN 8554L
+#define ERROR_DS_FILTER_USES_CONTRUCTED_ATTRS 8555L
+#define ERROR_DS_UNICODEPWD_NOT_IN_QUOTES 8556L
+#define ERROR_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED 8557L
+#define ERROR_DS_MUST_BE_RUN_ON_DST_DC 8558L
+#define ERROR_DS_SRC_DC_MUST_BE_SP4_OR_GREATER 8559L
+#define ERROR_DS_CANT_TREE_DELETE_CRITICAL_OBJ 8560L
+#define ERROR_DS_INIT_FAILURE_CONSOLE 8561L
+#define ERROR_DS_SAM_INIT_FAILURE_CONSOLE 8562L
+#define ERROR_DS_FOREST_VERSION_TOO_HIGH 8563L
+#define ERROR_DS_DOMAIN_VERSION_TOO_HIGH 8564L
+#define ERROR_DS_FOREST_VERSION_TOO_LOW 8565L
+#define ERROR_DS_DOMAIN_VERSION_TOO_LOW 8566L
+#define ERROR_DS_INCOMPATIBLE_VERSION 8567L
+#define ERROR_DS_LOW_DSA_VERSION 8568L
+#define ERROR_DS_NO_BEHAVIOR_VERSION_IN_MIXEDDOMAIN 8569L
+#define ERROR_DS_NOT_SUPPORTED_SORT_ORDER 8570L
+#define ERROR_DS_NAME_NOT_UNIQUE 8571L
+#define ERROR_DS_MACHINE_ACCOUNT_CREATED_PRENT4 8572L
+#define ERROR_DS_OUT_OF_VERSION_STORE 8573L
+#define ERROR_DS_INCOMPATIBLE_CONTROLS_USED 8574L
+#define ERROR_DS_NO_REF_DOMAIN 8575L
+#define ERROR_DS_RESERVED_LINK_ID 8576L
+#define ERROR_DS_LINK_ID_NOT_AVAILABLE 8577L
+#define ERROR_DS_AG_CANT_HAVE_UNIVERSAL_MEMBER 8578L
+#define ERROR_DS_MODIFYDN_DISALLOWED_BY_INSTANCE_TYPE 8579L
+#define ERROR_DS_NO_OBJECT_MOVE_IN_SCHEMA_NC 8580L
+#define ERROR_DS_MODIFYDN_DISALLOWED_BY_FLAG 8581L
+#define ERROR_DS_MODIFYDN_WRONG_GRANDPARENT 8582L
+#define ERROR_DS_NAME_ERROR_TRUST_REFERRAL 8583L
+#define ERROR_NOT_SUPPORTED_ON_STANDARD_SERVER 8584L
+#define ERROR_DS_CANT_ACCESS_REMOTE_PART_OF_AD 8585L
+#define ERROR_DS_CR_IMPOSSIBLE_TO_VALIDATE_V2 8586L
+#define ERROR_DS_THREAD_LIMIT_EXCEEDED 8587L
+#define ERROR_DS_NOT_CLOSEST 8588L
+#define ERROR_DS_CANT_DERIVE_SPN_WITHOUT_SERVER_REF 8589L
+#define ERROR_DS_SINGLE_USER_MODE_FAILED 8590L
+#define ERROR_DS_NTDSCRIPT_SYNTAX_ERROR 8591L
+#define ERROR_DS_NTDSCRIPT_PROCESS_ERROR 8592L
+#define ERROR_DS_DIFFERENT_REPL_EPOCHS 8593L
+#define ERROR_DS_DRS_EXTENSIONS_CHANGED 8594L
+#define ERROR_DS_REPLICA_SET_CHANGE_NOT_ALLOWED_ON_DISABLED_CR 8595L
+#define ERROR_DS_NO_MSDS_INTID 8596L
+#define ERROR_DS_DUP_MSDS_INTID 8597L
+#define ERROR_DS_EXISTS_IN_RDNATTID 8598L
+#define ERROR_DS_AUTHORIZATION_FAILED 8599L
+#define ERROR_DS_INVALID_SCRIPT 8600L
+#define ERROR_DS_REMOTE_CROSSREF_OP_FAILED 8601L
+#define ERROR_DS_CROSS_REF_BUSY 8602L
+#define ERROR_DS_CANT_DERIVE_SPN_FOR_DELETED_DOMAIN 8603L
+#define ERROR_DS_CANT_DEMOTE_WITH_WRITEABLE_NC 8604L
+#define ERROR_DS_DUPLICATE_ID_FOUND 8605L
+#define ERROR_DS_INSUFFICIENT_ATTR_TO_CREATE_OBJECT 8606L
+#define ERROR_DS_GROUP_CONVERSION_ERROR 8607L
+#define ERROR_DS_CANT_MOVE_APP_BASIC_GROUP 8608L
+#define ERROR_DS_CANT_MOVE_APP_QUERY_GROUP 8609L
+#define ERROR_DS_ROLE_NOT_VERIFIED 8610L
+#define ERROR_DS_WKO_CONTAINER_CANNOT_BE_SPECIAL 8611L
+#define ERROR_DS_DOMAIN_RENAME_IN_PROGRESS 8612L
+#define ERROR_DS_EXISTING_AD_CHILD_NC 8613L
+#define DNS_ERROR_RCODE_FORMAT_ERROR 9001L
+#define DNS_ERROR_RCODE_SERVER_FAILURE 9002L
+#define DNS_ERROR_RCODE_NAME_ERROR 9003L
+#define DNS_ERROR_RCODE_NOT_IMPLEMENTED 9004L
+#define DNS_ERROR_RCODE_REFUSED 9005L
+#define DNS_ERROR_RCODE_YXDOMAIN 9006L
+#define DNS_ERROR_RCODE_YXRRSET 9007L
+#define DNS_ERROR_RCODE_NXRRSET 9008L
+#define DNS_ERROR_RCODE_NOTAUTH 9009L
+#define DNS_ERROR_RCODE_NOTZONE 9010L
+#define DNS_ERROR_RCODE_BADSIG 9016L
+#define DNS_ERROR_RCODE_BADKEY 9017L
+#define DNS_ERROR_RCODE_BADTIME 9018L
+#define DNS_INFO_NO_RECORDS 9501L
+#define DNS_ERROR_BAD_PACKET 9502L
+#define DNS_ERROR_NO_PACKET 9503L
+#define DNS_ERROR_RCODE 9504L
+#define DNS_ERROR_UNSECURE_PACKET 9505L
+#define DNS_ERROR_INVALID_TYPE 9551L
+#define DNS_ERROR_INVALID_IP_ADDRESS 9552L
+#define DNS_ERROR_INVALID_PROPERTY 9553L
+#define DNS_ERROR_TRY_AGAIN_LATER 9554L
+#define DNS_ERROR_NOT_UNIQUE 9555L
+#define DNS_ERROR_NON_RFC_NAME 9556L
+#define DNS_STATUS_FQDN 9557L
+#define DNS_STATUS_DOTTED_NAME 9558L
+#define DNS_STATUS_SINGLE_PART_NAME 9559L
+#define DNS_ERROR_INVALID_NAME_CHAR 9560L
+#define DNS_ERROR_NUMERIC_NAME 9561L
+#define DNS_ERROR_NOT_ALLOWED_ON_ROOT_SERVER 9562L
+#define DNS_ERROR_NOT_ALLOWED_UNDER_DELEGATION 9563L
+#define DNS_ERROR_CANNOT_FIND_ROOT_HINTS 9564L
+#define DNS_ERROR_INCONSISTENT_ROOT_HINTS 9565L
+#define DNS_ERROR_ZONE_DOES_NOT_EXIST 9601L
+#define DNS_ERROR_NO_ZONE_INFO 9602L
+#define DNS_ERROR_INVALID_ZONE_OPERATION 9603L
+#define DNS_ERROR_ZONE_CONFIGURATION_ERROR 9604L
+#define DNS_ERROR_ZONE_HAS_NO_SOA_RECORD 9605L
+#define DNS_ERROR_ZONE_HAS_NO_NS_RECORDS 9606L
+#define DNS_ERROR_ZONE_LOCKED 9607L
+#define DNS_ERROR_ZONE_CREATION_FAILED 9608L
+#define DNS_ERROR_ZONE_ALREADY_EXISTS 9609L
+#define DNS_ERROR_AUTOZONE_ALREADY_EXISTS 9610L
+#define DNS_ERROR_INVALID_ZONE_TYPE 9611L
+#define DNS_ERROR_SECONDARY_REQUIRES_MASTER_IP 9612L
+#define DNS_ERROR_ZONE_NOT_SECONDARY 9613L
+#define DNS_ERROR_NEED_SECONDARY_ADDRESSES 9614L
+#define DNS_ERROR_WINS_INIT_FAILED 9615L
+#define DNS_ERROR_NEED_WINS_SERVERS 9616L
+#define DNS_ERROR_NBSTAT_INIT_FAILED 9617L
+#define DNS_ERROR_SOA_DELETE_INVALID 9618L
+#define DNS_ERROR_FORWARDER_ALREADY_EXISTS 9619L
+#define DNS_ERROR_ZONE_REQUIRES_MASTER_IP 9620L
+#define DNS_ERROR_ZONE_IS_SHUTDOWN 9621L
+#define DNS_ERROR_PRIMARY_REQUIRES_DATAFILE 9651L
+#define DNS_ERROR_INVALID_DATAFILE_NAME 9652L
+#define DNS_ERROR_DATAFILE_OPEN_FAILURE 9653L
+#define DNS_ERROR_FILE_WRITEBACK_FAILED 9654L
+#define DNS_ERROR_DATAFILE_PARSING 9655L
+#define DNS_ERROR_RECORD_DOES_NOT_EXIST 9701L
+#define DNS_ERROR_RECORD_FORMAT 9702L
+#define DNS_ERROR_NODE_CREATION_FAILED 9703L
+#define DNS_ERROR_UNKNOWN_RECORD_TYPE 9704L
+#define DNS_ERROR_RECORD_TIMED_OUT 9705L
+#define DNS_ERROR_NAME_NOT_IN_ZONE 9706L
+#define DNS_ERROR_CNAME_LOOP 9707L
+#define DNS_ERROR_NODE_IS_CNAME 9708L
+#define DNS_ERROR_CNAME_COLLISION 9709L
+#define DNS_ERROR_RECORD_ONLY_AT_ZONE_ROOT 9710L
+#define DNS_ERROR_RECORD_ALREADY_EXISTS 9711L
+#define DNS_ERROR_SECONDARY_DATA 9712L
+#define DNS_ERROR_NO_CREATE_CACHE_DATA 9713L
+#define DNS_ERROR_NAME_DOES_NOT_EXIST 9714L
+#define DNS_WARNING_PTR_CREATE_FAILED 9715L
+#define DNS_WARNING_DOMAIN_UNDELETED 9716L
+#define DNS_ERROR_DS_UNAVAILABLE 9717L
+#define DNS_ERROR_DS_ZONE_ALREADY_EXISTS 9718L
+#define DNS_ERROR_NO_BOOTFILE_IF_DS_ZONE 9719L
+#define DNS_INFO_AXFR_COMPLETE 9751L
+#define DNS_ERROR_AXFR 9752L
+#define DNS_INFO_ADDED_LOCAL_WINS 9753L
+#define DNS_STATUS_CONTINUE_NEEDED 9801L
+#define DNS_ERROR_NO_TCPIP 9851L
+#define DNS_ERROR_NO_DNS_SERVERS 9852L
+#define DNS_ERROR_DP_DOES_NOT_EXIST 9901L
+#define DNS_ERROR_DP_ALREADY_EXISTS 9902L
+#define DNS_ERROR_DP_NOT_ENLISTED 9903L
+#define DNS_ERROR_DP_ALREADY_ENLISTED 9904L
+#define DNS_ERROR_DP_NOT_AVAILABLE 9905L
+
+#ifndef WSABASEERR
+#define WSABASEERR 10000
+#define WSAEINTR 10004L
+#define WSAEBADF 10009L
+#define WSAEACCES 10013L
+#define WSAEFAULT 10014L
+#define WSAEINVAL 10022L
+#define WSAEMFILE 10024L
+#define WSAEWOULDBLOCK 10035L
+#define WSAEINPROGRESS 10036L
+#define WSAEALREADY 10037L
+#define WSAENOTSOCK 10038L
+#define WSAEDESTADDRREQ 10039L
+#define WSAEMSGSIZE 10040L
+#define WSAEPROTOTYPE 10041L
+#define WSAENOPROTOOPT 10042L
+#define WSAEPROTONOSUPPORT 10043L
+#define WSAESOCKTNOSUPPORT 10044L
+#define WSAEOPNOTSUPP 10045L
+#define WSAEPFNOSUPPORT 10046L
+#define WSAEAFNOSUPPORT 10047L
+#define WSAEADDRINUSE 10048L
+#define WSAEADDRNOTAVAIL 10049L
+#define WSAENETDOWN 10050L
+#define WSAENETUNREACH 10051L
+#define WSAENETRESET 10052L
+#define WSAECONNABORTED 10053L
+#define WSAECONNRESET 10054L
+#define WSAENOBUFS 10055L
+#define WSAEISCONN 10056L
+#define WSAENOTCONN 10057L
+#define WSAESHUTDOWN 10058L
+#define WSAETOOMANYREFS 10059L
+#define WSAETIMEDOUT 10060L
+#define WSAECONNREFUSED 10061L
+#define WSAELOOP 10062L
+#define WSAENAMETOOLONG 10063L
+#define WSAEHOSTDOWN 10064L
+#define WSAEHOSTUNREACH 10065L
+#define WSAENOTEMPTY 10066L
+#define WSAEPROCLIM 10067L
+#define WSAEUSERS 10068L
+#define WSAEDQUOT 10069L
+#define WSAESTALE 10070L
+#define WSAEREMOTE 10071L
+#define WSASYSNOTREADY 10091L
+#define WSAVERNOTSUPPORTED 10092L
+#define WSANOTINITIALISED 10093L
+#define WSAEDISCON 10101L
+#define WSAENOMORE 10102L
+#define WSAECANCELLED 10103L
+#define WSAEINVALIDPROCTABLE 10104L
+#define WSAEINVALIDPROVIDER 10105L
+#define WSAEPROVIDERFAILEDINIT 10106L
+#define WSASYSCALLFAILURE 10107L
+#define WSASERVICE_NOT_FOUND 10108L
+#define WSATYPE_NOT_FOUND 10109L
+#define WSA_E_NO_MORE 10110L
+#define WSA_E_CANCELLED 10111L
+#define WSAEREFUSED 10112L
+#define WSAHOST_NOT_FOUND 11001L
+#define WSATRY_AGAIN 11002L
+#define WSANO_RECOVERY 11003L
+#define WSANO_DATA 11004L
+#define WSA_QOS_RECEIVERS 11005L
+#define WSA_QOS_SENDERS 11006L
+#define WSA_QOS_NO_SENDERS 11007L
+#define WSA_QOS_NO_RECEIVERS 11008L
+#define WSA_QOS_REQUEST_CONFIRMED 11009L
+#define WSA_QOS_ADMISSION_FAILURE 11010L
+#define WSA_QOS_POLICY_FAILURE 11011L
+#define WSA_QOS_BAD_STYLE 11012L
+#define WSA_QOS_BAD_OBJECT 11013L
+#define WSA_QOS_TRAFFIC_CTRL_ERROR 11014L
+#define WSA_QOS_GENERIC_ERROR 11015L
+#define WSA_QOS_ESERVICETYPE 11016L
+#define WSA_QOS_EFLOWSPEC 11017L
+#define WSA_QOS_EPROVSPECBUF 11018L
+#define WSA_QOS_EFILTERSTYLE 11019L
+#define WSA_QOS_EFILTERTYPE 11020L
+#define WSA_QOS_EFILTERCOUNT 11021L
+#define WSA_QOS_EOBJLENGTH 11022L
+#define WSA_QOS_EFLOWCOUNT 11023L
+#define WSA_QOS_EUNKOWNPSOBJ 11024L
+#define WSA_QOS_EPOLICYOBJ 11025L
+#define WSA_QOS_EFLOWDESC 11026L
+#define WSA_QOS_EPSFLOWSPEC 11027L
+#define WSA_QOS_EPSFILTERSPEC 11028L
+#define WSA_QOS_ESDMODEOBJ 11029L
+#define WSA_QOS_ESHAPERATEOBJ 11030L
+#define WSA_QOS_RESERVED_PETYPE 11031L
+#endif /* !WSABASEERR */
+
+#define ERROR_IPSEC_QM_POLICY_EXISTS 13000L
+#define ERROR_IPSEC_QM_POLICY_NOT_FOUND 13001L
+#define ERROR_IPSEC_QM_POLICY_IN_USE 13002L
+#define ERROR_IPSEC_MM_POLICY_EXISTS 13003L
+#define ERROR_IPSEC_MM_POLICY_NOT_FOUND 13004L
+#define ERROR_IPSEC_MM_POLICY_IN_USE 13005L
+#define ERROR_IPSEC_MM_FILTER_EXISTS 13006L
+#define ERROR_IPSEC_MM_FILTER_NOT_FOUND 13007L
+#define ERROR_IPSEC_TRANSPORT_FILTER_EXISTS 13008L
+#define ERROR_IPSEC_TRANSPORT_FILTER_NOT_FOUND 13009L
+#define ERROR_IPSEC_MM_AUTH_EXISTS 13010L
+#define ERROR_IPSEC_MM_AUTH_NOT_FOUND 13011L
+#define ERROR_IPSEC_MM_AUTH_IN_USE 13012L
+#define ERROR_IPSEC_DEFAULT_MM_POLICY_NOT_FOUND 13013L
+#define ERROR_IPSEC_DEFAULT_MM_AUTH_NOT_FOUND 13014L
+#define ERROR_IPSEC_DEFAULT_QM_POLICY_NOT_FOUND 13015L
+#define ERROR_IPSEC_TUNNEL_FILTER_EXISTS 13016L
+#define ERROR_IPSEC_TUNNEL_FILTER_NOT_FOUND 13017L
+#define ERROR_IPSEC_MM_FILTER_PENDING_DELETION 13018L
+#define ERROR_IPSEC_TRANSPORT_FILTER_PENDING_DELETION 13019L
+#define ERROR_IPSEC_TUNNEL_FILTER_PENDING_DELETION 13020L
+#define ERROR_IPSEC_MM_POLICY_PENDING_DELETION 13021L
+#define ERROR_IPSEC_MM_AUTH_PENDING_DELETION 13022L
+#define ERROR_IPSEC_QM_POLICY_PENDING_DELETION 13023L
+#define WARNING_IPSEC_MM_POLICY_PRUNED 13024L
+#define WARNING_IPSEC_QM_POLICY_PRUNED 13025L
+#define ERROR_IPSEC_IKE_AUTH_FAIL 13801L
+#define ERROR_IPSEC_IKE_ATTRIB_FAIL 13802L
+#define ERROR_IPSEC_IKE_NEGOTIATION_PENDING 13803L
+#define ERROR_IPSEC_IKE_GENERAL_PROCESSING_ERROR 13804L
+#define ERROR_IPSEC_IKE_TIMED_OUT 13805L
+#define ERROR_IPSEC_IKE_NO_CERT 13806L
+#define ERROR_IPSEC_IKE_SA_DELETED 13807L
+#define ERROR_IPSEC_IKE_SA_REAPED 13808L
+#define ERROR_IPSEC_IKE_MM_ACQUIRE_DROP 13809L
+#define ERROR_IPSEC_IKE_QM_ACQUIRE_DROP 13810L
+#define ERROR_IPSEC_IKE_QUEUE_DROP_MM 13811L
+#define ERROR_IPSEC_IKE_QUEUE_DROP_NO_MM 13812L
+#define ERROR_IPSEC_IKE_DROP_NO_RESPONSE 13813L
+#define ERROR_IPSEC_IKE_MM_DELAY_DROP 13814L
+#define ERROR_IPSEC_IKE_QM_DELAY_DROP 13815L
+#define ERROR_IPSEC_IKE_ERROR 13816L
+#define ERROR_IPSEC_IKE_CRL_FAILED 13817L
+#define ERROR_IPSEC_IKE_INVALID_KEY_USAGE 13818L
+#define ERROR_IPSEC_IKE_INVALID_CERT_TYPE 13819L
+#define ERROR_IPSEC_IKE_NO_PRIVATE_KEY 13820L
+#define ERROR_IPSEC_IKE_DH_FAIL 13822L
+#define ERROR_IPSEC_IKE_INVALID_HEADER 13824L
+#define ERROR_IPSEC_IKE_NO_POLICY 13825L
+#define ERROR_IPSEC_IKE_INVALID_SIGNATURE 13826L
+#define ERROR_IPSEC_IKE_KERBEROS_ERROR 13827L
+#define ERROR_IPSEC_IKE_NO_PUBLIC_KEY 13828L
+#define ERROR_IPSEC_IKE_PROCESS_ERR 13829L
+#define ERROR_IPSEC_IKE_PROCESS_ERR_SA 13830L
+#define ERROR_IPSEC_IKE_PROCESS_ERR_PROP 13831L
+#define ERROR_IPSEC_IKE_PROCESS_ERR_TRANS 13832L
+#define ERROR_IPSEC_IKE_PROCESS_ERR_KE 13833L
+#define ERROR_IPSEC_IKE_PROCESS_ERR_ID 13834L
+#define ERROR_IPSEC_IKE_PROCESS_ERR_CERT 13835L
+#define ERROR_IPSEC_IKE_PROCESS_ERR_CERT_REQ 13836L
+#define ERROR_IPSEC_IKE_PROCESS_ERR_HASH 13837L
+#define ERROR_IPSEC_IKE_PROCESS_ERR_SIG 13838L
+#define ERROR_IPSEC_IKE_PROCESS_ERR_NONCE 13839L
+#define ERROR_IPSEC_IKE_PROCESS_ERR_NOTIFY 13840L
+#define ERROR_IPSEC_IKE_PROCESS_ERR_DELETE 13841L
+#define ERROR_IPSEC_IKE_PROCESS_ERR_VENDOR 13842L
+#define ERROR_IPSEC_IKE_INVALID_PAYLOAD 13843L
+#define ERROR_IPSEC_IKE_LOAD_SOFT_SA 13844L
+#define ERROR_IPSEC_IKE_SOFT_SA_TORN_DOWN 13845L
+#define ERROR_IPSEC_IKE_INVALID_COOKIE 13846L
+#define ERROR_IPSEC_IKE_NO_PEER_CERT 13847L
+#define ERROR_IPSEC_IKE_PEER_CRL_FAILED 13848L
+#define ERROR_IPSEC_IKE_POLICY_CHANGE 13849L
+#define ERROR_IPSEC_IKE_NO_MM_POLICY 13850L
+#define ERROR_IPSEC_IKE_NOTCBPRIV 13851L
+#define ERROR_IPSEC_IKE_SECLOADFAIL 13852L
+#define ERROR_IPSEC_IKE_FAILSSPINIT 13853L
+#define ERROR_IPSEC_IKE_FAILQUERYSSP 13854L
+#define ERROR_IPSEC_IKE_SRVACQFAIL 13855L
+#define ERROR_IPSEC_IKE_SRVQUERYCRED 13856L
+#define ERROR_IPSEC_IKE_GETSPIFAIL 13857L
+#define ERROR_IPSEC_IKE_INVALID_FILTER 13858L
+#define ERROR_IPSEC_IKE_OUT_OF_MEMORY 13859L
+#define ERROR_IPSEC_IKE_ADD_UPDATE_KEY_FAILED 13860L
+#define ERROR_IPSEC_IKE_INVALID_POLICY 13861L
+#define ERROR_IPSEC_IKE_UNKNOWN_DOI 13862L
+#define ERROR_IPSEC_IKE_INVALID_SITUATION 13863L
+#define ERROR_IPSEC_IKE_DH_FAILURE 13864L
+#define ERROR_IPSEC_IKE_INVALID_GROUP 13865L
+#define ERROR_IPSEC_IKE_ENCRYPT 13866L
+#define ERROR_IPSEC_IKE_DECRYPT 13867L
+#define ERROR_IPSEC_IKE_POLICY_MATCH 13868L
+#define ERROR_IPSEC_IKE_UNSUPPORTED_ID 13869L
+#define ERROR_IPSEC_IKE_INVALID_HASH 13870L
+#define ERROR_IPSEC_IKE_INVALID_HASH_ALG 13871L
+#define ERROR_IPSEC_IKE_INVALID_HASH_SIZE 13872L
+#define ERROR_IPSEC_IKE_INVALID_ENCRYPT_ALG 13873L
+#define ERROR_IPSEC_IKE_INVALID_AUTH_ALG 13874L
+#define ERROR_IPSEC_IKE_INVALID_SIG 13875L
+#define ERROR_IPSEC_IKE_LOAD_FAILED 13876L
+#define ERROR_IPSEC_IKE_RPC_DELETE 13877L
+#define ERROR_IPSEC_IKE_BENIGN_REINIT 13878L
+#define ERROR_IPSEC_IKE_INVALID_RESPONDER_LIFETIME_NOTIFY 13879L
+#define ERROR_IPSEC_IKE_INVALID_CERT_KEYLEN 13881L
+#define ERROR_IPSEC_IKE_MM_LIMIT 13882L
+#define ERROR_IPSEC_IKE_NEGOTIATION_DISABLED 13883L
+#define ERROR_IPSEC_IKE_NEG_STATUS_END 13884L
+
+#define ERROR_SXS_SECTION_NOT_FOUND 14000L
+#define ERROR_SXS_CANT_GEN_ACTCTX 14001L
+#define ERROR_SXS_INVALID_ACTCTXDATA_FORMAT 14002L
+#define ERROR_SXS_ASSEMBLY_NOT_FOUND 14003L
+#define ERROR_SXS_MANIFEST_FORMAT_ERROR 14004L
+#define ERROR_SXS_MANIFEST_PARSE_ERROR 14005L
+#define ERROR_SXS_ACTIVATION_CONTEXT_DISABLED 14006L
+#define ERROR_SXS_KEY_NOT_FOUND 14007L
+#define ERROR_SXS_VERSION_CONFLICT 14008L
+#define ERROR_SXS_WRONG_SECTION_TYPE 14009L
+#define ERROR_SXS_THREAD_QUERIES_DISABLED 14010L
+#define ERROR_SXS_PROCESS_DEFAULT_ALREADY_SET 14011L
+#define ERROR_SXS_UNKNOWN_ENCODING_GROUP 14012L
+#define ERROR_SXS_UNKNOWN_ENCODING 14013L
+#define ERROR_SXS_INVALID_XML_NAMESPACE_URI 14014L
+#define ERROR_SXS_ROOT_MANIFEST_DEPENDENCY_NOT_INSTALLED 14015L
+#define ERROR_SXS_LEAF_MANIFEST_DEPENDENCY_NOT_INSTALLED 14016L
+#define ERROR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE 14017L
+#define ERROR_SXS_MANIFEST_MISSING_REQUIRED_DEFAULT_NAMESPACE 14018L
+#define ERROR_SXS_MANIFEST_INVALID_REQUIRED_DEFAULT_NAMESPACE 14019L
+#define ERROR_SXS_PRIVATE_MANIFEST_CROSS_PATH_WITH_REPARSE_POINT 14020L
+#define ERROR_SXS_DUPLICATE_DLL_NAME 14021L
+#define ERROR_SXS_DUPLICATE_WINDOWCLASS_NAME 14022L
+#define ERROR_SXS_DUPLICATE_CLSID 14023L
+#define ERROR_SXS_DUPLICATE_IID 14024L
+#define ERROR_SXS_DUPLICATE_TLBID 14025L
+#define ERROR_SXS_DUPLICATE_PROGID 14026L
+#define ERROR_SXS_DUPLICATE_ASSEMBLY_NAME 14027L
+#define ERROR_SXS_FILE_HASH_MISMATCH 14028L
+#define ERROR_SXS_POLICY_PARSE_ERROR 14029L
+#define ERROR_SXS_XML_E_MISSINGQUOTE 14030L
+#define ERROR_SXS_XML_E_COMMENTSYNTAX 14031L
+#define ERROR_SXS_XML_E_BADSTARTNAMECHAR 14032L
+#define ERROR_SXS_XML_E_BADNAMECHAR 14033L
+#define ERROR_SXS_XML_E_BADCHARINSTRING 14034L
+#define ERROR_SXS_XML_E_XMLDECLSYNTAX 14035L
+#define ERROR_SXS_XML_E_BADCHARDATA 14036L
+#define ERROR_SXS_XML_E_MISSINGWHITESPACE 14037L
+#define ERROR_SXS_XML_E_EXPECTINGTAGEND 14038L
+#define ERROR_SXS_XML_E_MISSINGSEMICOLON 14039L
+#define ERROR_SXS_XML_E_UNBALANCEDPAREN 14040L
+#define ERROR_SXS_XML_E_INTERNALERROR 14041L
+#define ERROR_SXS_XML_E_UNEXPECTED_WHITESPACE 14042L
+#define ERROR_SXS_XML_E_INCOMPLETE_ENCODING 14043L
+#define ERROR_SXS_XML_E_MISSING_PAREN 14044L
+#define ERROR_SXS_XML_E_EXPECTINGCLOSEQUOTE 14045L
+#define ERROR_SXS_XML_E_MULTIPLE_COLONS 14046L
+#define ERROR_SXS_XML_E_INVALID_DECIMAL 14047L
+#define ERROR_SXS_XML_E_INVALID_HEXIDECIMAL 14048L
+#define ERROR_SXS_XML_E_INVALID_UNICODE 14049L
+#define ERROR_SXS_XML_E_WHITESPACEORQUESTIONMARK 14050L
+#define ERROR_SXS_XML_E_UNEXPECTEDENDTAG 14051L
+#define ERROR_SXS_XML_E_UNCLOSEDTAG 14052L
+#define ERROR_SXS_XML_E_DUPLICATEATTRIBUTE 14053L
+#define ERROR_SXS_XML_E_MULTIPLEROOTS 14054L
+#define ERROR_SXS_XML_E_INVALIDATROOTLEVEL 14055L
+#define ERROR_SXS_XML_E_BADXMLDECL 14056L
+#define ERROR_SXS_XML_E_MISSINGROOT 14057L
+#define ERROR_SXS_XML_E_UNEXPECTEDEOF 14058L
+#define ERROR_SXS_XML_E_BADPEREFINSUBSET 14059L
+#define ERROR_SXS_XML_E_UNCLOSEDSTARTTAG 14060L
+#define ERROR_SXS_XML_E_UNCLOSEDENDTAG 14061L
+#define ERROR_SXS_XML_E_UNCLOSEDSTRING 14062L
+#define ERROR_SXS_XML_E_UNCLOSEDCOMMENT 14063L
+#define ERROR_SXS_XML_E_UNCLOSEDDECL 14064L
+#define ERROR_SXS_XML_E_UNCLOSEDCDATA 14065L
+#define ERROR_SXS_XML_E_RESERVEDNAMESPACE 14066L
+#define ERROR_SXS_XML_E_INVALIDENCODING 14067L
+#define ERROR_SXS_XML_E_INVALIDSWITCH 14068L
+#define ERROR_SXS_XML_E_BADXMLCASE 14069L
+#define ERROR_SXS_XML_E_INVALID_STANDALONE 14070L
+#define ERROR_SXS_XML_E_UNEXPECTED_STANDALONE 14071L
+#define ERROR_SXS_XML_E_INVALID_VERSION 14072L
+#define ERROR_SXS_XML_E_MISSINGEQUALS 14073L
+#define ERROR_SXS_PROTECTION_RECOVERY_FAILED 14074L
+#define ERROR_SXS_PROTECTION_PUBLIC_KEY_TOO_SHORT 14075L
+#define ERROR_SXS_PROTECTION_CATALOG_NOT_VALID 14076L
+#define ERROR_SXS_UNTRANSLATABLE_HRESULT 14077L
+#define ERROR_SXS_PROTECTION_CATALOG_FILE_MISSING 14078L
+#define ERROR_SXS_MISSING_ASSEMBLY_IDENTITY_ATTRIBUTE 14079L
+#define ERROR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE_NAME 14080L
+
+//Crypto realted errors
+#define CRYPT_E_NOT_FOUND _HRESULT_TYPEDEF_(0x80092004L)
+#define CRYPT_E_EXISTS _HRESULT_TYPEDEF_(0x80092005L)
+#define CRYPT_E_NO_PROVIDER _HRESULT_TYPEDEF_(0x80092006L)
+#define CRYPT_E_SELF_SIGNED _HRESULT_TYPEDEF_(0x80092007L)
+#define CRYPT_E_DELETED_PREV _HRESULT_TYPEDEF_(0x80092008L)
+#define CRYPT_E_NO_MATCH _HRESULT_TYPEDEF_(0x80092009L)
+#define CRYPT_E_UNEXPECTED_MSG_TYPE _HRESULT_TYPEDEF_(0x8009200AL)
+#define CRYPT_E_NO_KEY_PROPERTY _HRESULT_TYPEDEF_(0x8009200BL)
+#define CRYPT_E_NO_DECRYPT_CERT _HRESULT_TYPEDEF_(0x8009200CL)
+#define CRYPT_E_BAD_MSG _HRESULT_TYPEDEF_(0x8009200DL)
+#define CRYPT_E_NO_SIGNER _HRESULT_TYPEDEF_(0x8009200EL)
+#define CRYPT_E_PENDING_CLOSE _HRESULT_TYPEDEF_(0x8009200FL)
+#define CRYPT_E_REVOKED _HRESULT_TYPEDEF_(0x80092010L)
+#define CRYPT_E_NO_REVOCATION_DLL _HRESULT_TYPEDEF_(0x80092011L)
+#define CRYPT_E_NO_REVOCATION_CHECK _HRESULT_TYPEDEF_(0x80092012L)
+
+#define SEVERITY_SUCCESS 0
+#define SEVERITY_ERROR 1
+#define FACILITY_WINDOWS 8
+#define FACILITY_STORAGE 3
+#define FACILITY_RPC 1
+#define FACILITY_WIN32 7
+#define FACILITY_CONTROL 10
+#define FACILITY_NULL 0
+#define FACILITY_ITF 4
+#define FACILITY_DISPATCH 2
+#define SUCCEEDED(Status) ((HRESULT)(Status) >= 0)
+#define FAILED(Status) ((HRESULT)(Status)<0)
+#define IS_ERROR(Status) ((unsigned long)(Status) >> 31 == SEVERITY_ERROR)
+#define HRESULT_CODE(r) ((r)&0xFFFF)
+#define SCODE_CODE(c) ((c)&0xFFFF)
+#define HRESULT_FACILITY(r) (((r)>>16)&0x1fff)
+#define SCODE_FACILITY(c) (((c)>>16)&0x1fff)
+#define HRESULT_SEVERITY(r) (((r)>>31)&0x1)
+#define SCODE_SEVERITY(c) (((c)>>31)&0x1)
+#define MAKE_HRESULT(s,f,c) ((HRESULT)(((unsigned long)(s)<<31)|((unsigned long)(f)<<16)|((unsigned long)(c))))
+#define MAKE_SCODE(s,f,c) ((SCODE)(((unsigned long)(s)<<31)|((unsigned long)(f)<<16)|((unsigned long)(c))) )
+#define FACILITY_NT_BIT 0x10000000
+#define HRESULT_FROM_WIN32(x) (x?((HRESULT)(((x)&0x0000FFFF)|(FACILITY_WIN32<<16)|0x80000000)):0)
+#define HRESULT_FROM_NT(x) ((HRESULT)((x)|FACILITY_NT_BIT))
+#define GetScode(hr) ((SCODE) (hr))
+#define ResultFromScode(sc) ((HRESULT) (sc))
+#define PropagateResult(hrPrevious, scBase) ((HRESULT) scBase)
+
+#define NOERROR S_OK
+#define E_UNEXPECTED ((HRESULT)0x8000FFFFL)
+#define E_NOTIMPL ((HRESULT)0x80004001L)
+#define E_OUTOFMEMORY ((HRESULT)0x8007000EL)
+#define E_INVALIDARG ((HRESULT)0x80070057L)
+#define E_NOINTERFACE ((HRESULT)0x80004002L)
+#define E_POINTER ((HRESULT)0x80004003L)
+#define E_HANDLE ((HRESULT)0x80070006L)
+#define E_ABORT ((HRESULT)0x80004004L)
+#define E_FAIL ((HRESULT)0x80004005L)
+#define E_ACCESSDENIED ((HRESULT)0x80070005L)
+#define E_PENDING ((HRESULT)0x8000000AL)
+#define CO_E_INIT_TLS ((HRESULT)0x80004006L)
+#define CO_E_INIT_SHARED_ALLOCATOR ((HRESULT)0x80004007L)
+#define CO_E_INIT_MEMORY_ALLOCATOR ((HRESULT)0x80004008L)
+#define CO_E_INIT_CLASS_CACHE ((HRESULT)0x80004009L)
+#define CO_E_INIT_RPC_CHANNEL ((HRESULT)0x8000400AL)
+#define CO_E_INIT_TLS_SET_CHANNEL_CONTROL ((HRESULT)0x8000400BL)
+#define CO_E_INIT_TLS_CHANNEL_CONTROL ((HRESULT)0x8000400CL)
+#define CO_E_INIT_UNACCEPTED_USER_ALLOCATOR ((HRESULT)0x8000400DL)
+#define CO_E_INIT_SCM_MUTEX_EXISTS ((HRESULT)0x8000400EL)
+#define CO_E_INIT_SCM_FILE_MAPPING_EXISTS ((HRESULT)0x8000400FL)
+#define CO_E_INIT_SCM_MAP_VIEW_OF_FILE ((HRESULT)0x80004010L)
+#define CO_E_INIT_SCM_EXEC_FAILURE ((HRESULT)0x80004011L)
+#define CO_E_INIT_ONLY_SINGLE_THREADED ((HRESULT)0x80004012L)
+#define S_OK ((HRESULT)0x00000000L)
+#define S_FALSE ((HRESULT)0x00000001L)
+#define OLE_E_FIRST ((HRESULT)0x80040000L)
+#define OLE_E_LAST ((HRESULT)0x800400FFL)
+#define OLE_S_FIRST ((HRESULT)0x00040000L)
+#define OLE_S_LAST ((HRESULT)0x000400FFL)
+#define OLE_E_OLEVERB ((HRESULT)0x80040000L)
+#define OLE_E_ADVF ((HRESULT)0x80040001L)
+#define OLE_E_ENUM_NOMORE ((HRESULT)0x80040002L)
+#define OLE_E_ADVISENOTSUPPORTED ((HRESULT)0x80040003L)
+#define OLE_E_NOCONNECTION ((HRESULT)0x80040004L)
+#define OLE_E_NOTRUNNING ((HRESULT)0x80040005L)
+#define OLE_E_NOCACHE ((HRESULT)0x80040006L)
+#define OLE_E_BLANK ((HRESULT)0x80040007L)
+#define OLE_E_CLASSDIFF ((HRESULT)0x80040008L)
+#define OLE_E_CANT_GETMONIKER ((HRESULT)0x80040009L)
+#define OLE_E_CANT_BINDTOSOURCE ((HRESULT)0x8004000AL)
+#define OLE_E_STATIC ((HRESULT)0x8004000BL)
+#define OLE_E_PROMPTSAVECANCELLED ((HRESULT)0x8004000CL)
+#define OLE_E_INVALIDRECT ((HRESULT)0x8004000DL)
+#define OLE_E_WRONGCOMPOBJ ((HRESULT)0x8004000EL)
+#define OLE_E_INVALIDHWND ((HRESULT)0x8004000FL)
+#define OLE_E_NOT_INPLACEACTIVE ((HRESULT)0x80040010L)
+#define OLE_E_CANTCONVERT ((HRESULT)0x80040011L)
+#define OLE_E_NOSTORAGE ((HRESULT)0x80040012L)
+#define DV_E_FORMATETC ((HRESULT)0x80040064L)
+#define DV_E_DVTARGETDEVICE ((HRESULT)0x80040065L)
+#define DV_E_STGMEDIUM ((HRESULT)0x80040066L)
+#define DV_E_STATDATA ((HRESULT)0x80040067L)
+#define DV_E_LINDEX ((HRESULT)0x80040068L)
+#define DV_E_TYMED ((HRESULT)0x80040069L)
+#define DV_E_CLIPFORMAT ((HRESULT)0x8004006AL)
+#define DV_E_DVASPECT ((HRESULT)0x8004006BL)
+#define DV_E_DVTARGETDEVICE_SIZE ((HRESULT)0x8004006CL)
+#define DV_E_NOIVIEWOBJECT ((HRESULT)0x8004006DL)
+#define DRAGDROP_E_FIRST ((HRESULT)0x80040100L)
+#define DRAGDROP_E_LAST ((HRESULT)0x8004010FL)
+#define DRAGDROP_S_FIRST ((HRESULT)0x00040100L)
+#define DRAGDROP_S_LAST ((HRESULT)0x0004010FL)
+#define DRAGDROP_E_NOTREGISTERED ((HRESULT)0x80040100L)
+#define DRAGDROP_E_ALREADYREGISTERED ((HRESULT)0x80040101L)
+#define DRAGDROP_E_INVALIDHWND ((HRESULT)0x80040102L)
+#define CLASSFACTORY_E_FIRST ((HRESULT)0x80040110L)
+#define CLASSFACTORY_E_LAST ((HRESULT)0x8004011FL)
+#define CLASSFACTORY_S_FIRST ((HRESULT)0x00040110L)
+#define CLASSFACTORY_S_LAST ((HRESULT)0x0004011FL)
+#define CLASS_E_NOAGGREGATION ((HRESULT)0x80040110L)
+#define CLASS_E_CLASSNOTAVAILABLE ((HRESULT)0x80040111L)
+#define MARSHAL_E_FIRST ((HRESULT)0x80040120L)
+#define MARSHAL_E_LAST ((HRESULT)0x8004012FL)
+#define MARSHAL_S_FIRST ((HRESULT)0x00040120L)
+#define MARSHAL_S_LAST ((HRESULT)0x0004012FL)
+#define DATA_E_FIRST ((HRESULT)0x80040130L)
+#define DATA_E_LAST ((HRESULT)0x8004013FL)
+#define DATA_S_FIRST ((HRESULT)0x00040130L)
+#define DATA_S_LAST ((HRESULT)0x0004013FL)
+#define VIEW_E_FIRST ((HRESULT)0x80040140L)
+#define VIEW_E_LAST ((HRESULT)0x8004014FL)
+#define VIEW_S_FIRST ((HRESULT)0x00040140L)
+#define VIEW_S_LAST ((HRESULT)0x0004014FL)
+#define VIEW_E_DRAW ((HRESULT)0x80040140L)
+#define REGDB_E_FIRST ((HRESULT)0x80040150L)
+#define REGDB_E_LAST ((HRESULT)0x8004015FL)
+#define REGDB_S_FIRST ((HRESULT)0x00040150L)
+#define REGDB_S_LAST ((HRESULT)0x0004015FL)
+#define REGDB_E_READREGDB ((HRESULT)0x80040150L)
+#define REGDB_E_WRITEREGDB ((HRESULT)0x80040151L)
+#define REGDB_E_KEYMISSING ((HRESULT)0x80040152L)
+#define REGDB_E_INVALIDVALUE ((HRESULT)0x80040153L)
+#define REGDB_E_CLASSNOTREG ((HRESULT)0x80040154L)
+#define REGDB_E_IIDNOTREG ((HRESULT)0x80040155L)
+#define CACHE_E_FIRST ((HRESULT)0x80040170L)
+#define CACHE_E_LAST ((HRESULT)0x8004017FL)
+#define CACHE_S_FIRST ((HRESULT)0x00040170L)
+#define CACHE_S_LAST ((HRESULT)0x0004017FL)
+#define CACHE_E_NOCACHE_UPDATED ((HRESULT)0x80040170L)
+#define OLEOBJ_E_FIRST ((HRESULT)0x80040180L)
+#define OLEOBJ_E_LAST ((HRESULT)0x8004018FL)
+#define OLEOBJ_S_FIRST ((HRESULT)0x00040180L)
+#define OLEOBJ_S_LAST ((HRESULT)0x0004018FL)
+#define OLEOBJ_E_NOVERBS ((HRESULT)0x80040180L)
+#define OLEOBJ_E_INVALIDVERB ((HRESULT)0x80040181L)
+#define CLIENTSITE_E_FIRST ((HRESULT)0x80040190L)
+#define CLIENTSITE_E_LAST ((HRESULT)0x8004019FL)
+#define CLIENTSITE_S_FIRST ((HRESULT)0x00040190L)
+#define CLIENTSITE_S_LAST ((HRESULT)0x0004019FL)
+#define INPLACE_E_NOTUNDOABLE ((HRESULT)0x800401A0L)
+#define INPLACE_E_NOTOOLSPACE ((HRESULT)0x800401A1L)
+#define INPLACE_E_FIRST ((HRESULT)0x800401A0L)
+#define INPLACE_E_LAST ((HRESULT)0x800401AFL)
+#define INPLACE_S_FIRST ((HRESULT)0x000401A0L)
+#define INPLACE_S_LAST ((HRESULT)0x000401AFL)
+#define ENUM_E_FIRST ((HRESULT)0x800401B0L)
+#define ENUM_E_LAST ((HRESULT)0x800401BFL)
+#define ENUM_S_FIRST ((HRESULT)0x000401B0L)
+#define ENUM_S_LAST ((HRESULT)0x000401BFL)
+#define CONVERT10_E_FIRST ((HRESULT)0x800401C0L)
+#define CONVERT10_E_LAST ((HRESULT)0x800401CFL)
+#define CONVERT10_S_FIRST ((HRESULT)0x000401C0L)
+#define CONVERT10_S_LAST ((HRESULT)0x000401CFL)
+#define CONVERT10_E_OLESTREAM_GET ((HRESULT)0x800401C0L)
+#define CONVERT10_E_OLESTREAM_PUT ((HRESULT)0x800401C1L)
+#define CONVERT10_E_OLESTREAM_FMT ((HRESULT)0x800401C2L)
+#define CONVERT10_E_OLESTREAM_BITMAP_TO_DIB ((HRESULT)0x800401C3L)
+#define CONVERT10_E_STG_FMT ((HRESULT)0x800401C4L)
+#define CONVERT10_E_STG_NO_STD_STREAM ((HRESULT)0x800401C5L)
+#define CONVERT10_E_STG_DIB_TO_BITMAP ((HRESULT)0x800401C6L)
+#define CLIPBRD_E_FIRST ((HRESULT)0x800401D0L)
+#define CLIPBRD_E_LAST ((HRESULT)0x800401DFL)
+#define CLIPBRD_S_FIRST ((HRESULT)0x000401D0L)
+#define CLIPBRD_S_LAST ((HRESULT)0x000401DFL)
+#define CLIPBRD_E_CANT_OPEN ((HRESULT)0x800401D0L)
+#define CLIPBRD_E_CANT_EMPTY ((HRESULT)0x800401D1L)
+#define CLIPBRD_E_CANT_SET ((HRESULT)0x800401D2L)
+#define CLIPBRD_E_BAD_DATA ((HRESULT)0x800401D3L)
+#define CLIPBRD_E_CANT_CLOSE ((HRESULT)0x800401D4L)
+#define MK_E_FIRST ((HRESULT)0x800401E0L)
+#define MK_E_LAST ((HRESULT)0x800401EFL)
+#define MK_S_FIRST ((HRESULT)0x000401E0L)
+#define MK_S_LAST ((HRESULT)0x000401EFL)
+#define MK_E_CONNECTMANUALLY ((HRESULT)0x800401E0L)
+#define MK_E_EXCEEDEDDEADLINE ((HRESULT)0x800401E1L)
+#define MK_E_NEEDGENERIC ((HRESULT)0x800401E2L)
+#define MK_E_UNAVAILABLE ((HRESULT)0x800401E3L)
+#define MK_E_SYNTAX ((HRESULT)0x800401E4L)
+#define MK_E_NOOBJECT ((HRESULT)0x800401E5L)
+#define MK_E_INVALIDEXTENSION ((HRESULT)0x800401E6L)
+#define MK_E_INTERMEDIATEINTERFACENOTSUPPORTED ((HRESULT)0x800401E7L)
+#define MK_E_NOTBINDABLE ((HRESULT)0x800401E8L)
+#define MK_E_NOTBOUND ((HRESULT)0x800401E9L)
+#define MK_E_CANTOPENFILE ((HRESULT)0x800401EAL)
+#define MK_E_MUSTBOTHERUSER ((HRESULT)0x800401EBL)
+#define MK_E_NOINVERSE ((HRESULT)0x800401ECL)
+#define MK_E_NOSTORAGE ((HRESULT)0x800401EDL)
+#define MK_E_NOPREFIX ((HRESULT)0x800401EEL)
+#define MK_E_ENUMERATION_FAILED ((HRESULT)0x800401EFL)
+#define CO_E_FIRST ((HRESULT)0x800401F0L)
+#define CO_E_LAST ((HRESULT)0x800401FFL)
+#define CO_S_FIRST ((HRESULT)0x000401F0L)
+#define CO_S_LAST ((HRESULT)0x000401FFL)
+#define CO_E_NOTINITIALIZED ((HRESULT)0x800401F0L)
+#define CO_E_ALREADYINITIALIZED ((HRESULT)0x800401F1L)
+#define CO_E_CANTDETERMINECLASS ((HRESULT)0x800401F2L)
+#define CO_E_CLASSSTRING ((HRESULT)0x800401F3L)
+#define CO_E_IIDSTRING ((HRESULT)0x800401F4L)
+#define CO_E_APPNOTFOUND ((HRESULT)0x800401F5L)
+#define CO_E_APPSINGLEUSE ((HRESULT)0x800401F6L)
+#define CO_E_ERRORINAPP ((HRESULT)0x800401F7L)
+#define CO_E_DLLNOTFOUND ((HRESULT)0x800401F8L)
+#define CO_E_ERRORINDLL ((HRESULT)0x800401F9L)
+#define CO_E_WRONGOSFORAPP ((HRESULT)0x800401FAL)
+#define CO_E_OBJNOTREG ((HRESULT)0x800401FBL)
+#define CO_E_OBJISREG ((HRESULT)0x800401FCL)
+#define CO_E_OBJNOTCONNECTED ((HRESULT)0x800401FDL)
+#define CO_E_APPDIDNTREG ((HRESULT)0x800401FEL)
+#define CO_E_RELEASED ((HRESULT)0x800401FFL)
+#define OLE_S_USEREG ((HRESULT)0x00040000L)
+#define OLE_S_STATIC ((HRESULT)0x00040001L)
+#define OLE_S_MAC_CLIPFORMAT ((HRESULT)0x00040002L)
+#define DRAGDROP_S_DROP ((HRESULT)0x00040100L)
+#define DRAGDROP_S_CANCEL ((HRESULT)0x00040101L)
+#define DRAGDROP_S_USEDEFAULTCURSORS ((HRESULT)0x00040102L)
+#define DATA_S_SAMEFORMATETC ((HRESULT)0x00040130L)
+#define VIEW_S_ALREADY_FROZEN ((HRESULT)0x00040140L)
+#define CACHE_S_FORMATETC_NOTSUPPORTED ((HRESULT)0x00040170L)
+#define CACHE_S_SAMECACHE ((HRESULT)0x00040171L)
+#define CACHE_S_SOMECACHES_NOTUPDATED ((HRESULT)0x00040172L)
+#define OLEOBJ_S_INVALIDVERB ((HRESULT)0x00040180L)
+#define OLEOBJ_S_CANNOT_DOVERB_NOW ((HRESULT)0x00040181L)
+#define OLEOBJ_S_INVALIDHWND ((HRESULT)0x00040182L)
+#define INPLACE_S_TRUNCATED ((HRESULT)0x000401A0L)
+#define CONVERT10_S_NO_PRESENTATION ((HRESULT)0x000401C0L)
+#define MK_S_REDUCED_TO_SELF ((HRESULT)0x000401E2L)
+#define MK_S_ME ((HRESULT)0x000401E4L)
+#define MK_S_HIM ((HRESULT)0x000401E5L)
+#define MK_S_US ((HRESULT)0x000401E6L)
+#define MK_S_MONIKERALREADYREGISTERED ((HRESULT)0x000401E7L)
+#define CO_E_CLASS_CREATE_FAILED ((HRESULT)0x80080001L)
+#define CO_E_SCM_ERROR ((HRESULT)0x80080002L)
+#define CO_E_SCM_RPC_FAILURE ((HRESULT)0x80080003L)
+#define CO_E_BAD_PATH ((HRESULT)0x80080004L)
+#define CO_E_SERVER_EXEC_FAILURE ((HRESULT)0x80080005L)
+#define CO_E_OBJSRV_RPC_FAILURE ((HRESULT)0x80080006L)
+#define MK_E_NO_NORMALIZED ((HRESULT)0x80080007L)
+#define CO_E_SERVER_STOPPING ((HRESULT)0x80080008L)
+#define MEM_E_INVALID_ROOT ((HRESULT)0x80080009L)
+#define MEM_E_INVALID_LINK ((HRESULT)0x80080010L)
+#define MEM_E_INVALID_SIZE ((HRESULT)0x80080011L)
+#define CO_S_NOTALLINTERFACES ((HRESULT)0x00080012L)
+#define CO_S_MACHINENAMENOTFOUND ((HRESULT)0x00080013L)
+#define DISP_E_UNKNOWNINTERFACE ((HRESULT)0x80020001L)
+#define DISP_E_MEMBERNOTFOUND ((HRESULT)0x80020003L)
+#define DISP_E_PARAMNOTFOUND ((HRESULT)0x80020004L)
+#define DISP_E_TYPEMISMATCH ((HRESULT)0x80020005L)
+#define DISP_E_UNKNOWNNAME ((HRESULT)0x80020006L)
+#define DISP_E_NONAMEDARGS ((HRESULT)0x80020007L)
+#define DISP_E_BADVARTYPE ((HRESULT)0x80020008L)
+#define DISP_E_EXCEPTION ((HRESULT)0x80020009L)
+#define DISP_E_OVERFLOW ((HRESULT)0x8002000AL)
+#define DISP_E_BADINDEX ((HRESULT)0x8002000BL)
+#define DISP_E_UNKNOWNLCID ((HRESULT)0x8002000CL)
+#define DISP_E_ARRAYISLOCKED ((HRESULT)0x8002000DL)
+#define DISP_E_BADPARAMCOUNT ((HRESULT)0x8002000EL)
+#define DISP_E_PARAMNOTOPTIONAL ((HRESULT)0x8002000FL)
+#define DISP_E_BADCALLEE ((HRESULT)0x80020010L)
+#define DISP_E_NOTACOLLECTION ((HRESULT)0x80020011L)
+#define DISP_E_DIVBYZERO ((HRESULT)0x80020012L)
+#define TYPE_E_BUFFERTOOSMALL ((HRESULT)0x80028016L)
+#define TYPE_E_INVDATAREAD ((HRESULT)0x80028018L)
+#define TYPE_E_UNSUPFORMAT ((HRESULT)0x80028019L)
+#define TYPE_E_REGISTRYACCESS ((HRESULT)0x8002801CL)
+#define TYPE_E_LIBNOTREGISTERED ((HRESULT)0x8002801DL)
+#define TYPE_E_UNDEFINEDTYPE ((HRESULT)0x80028027L)
+#define TYPE_E_QUALIFIEDNAMEDISALLOWED ((HRESULT)0x80028028L)
+#define TYPE_E_INVALIDSTATE ((HRESULT)0x80028029L)
+#define TYPE_E_WRONGTYPEKIND ((HRESULT)0x8002802AL)
+#define TYPE_E_ELEMENTNOTFOUND ((HRESULT)0x8002802BL)
+#define TYPE_E_AMBIGUOUSNAME ((HRESULT)0x8002802CL)
+#define TYPE_E_NAMECONFLICT ((HRESULT)0x8002802DL)
+#define TYPE_E_UNKNOWNLCID ((HRESULT)0x8002802EL)
+#define TYPE_E_DLLFUNCTIONNOTFOUND ((HRESULT)0x8002802FL)
+#define TYPE_E_BADMODULEKIND ((HRESULT)0x800288BDL)
+#define TYPE_E_SIZETOOBIG ((HRESULT)0x800288C5L)
+#define TYPE_E_DUPLICATEID ((HRESULT)0x800288C6L)
+#define TYPE_E_INVALIDID ((HRESULT)0x800288CFL)
+#define TYPE_E_TYPEMISMATCH ((HRESULT)0x80028CA0L)
+#define TYPE_E_OUTOFBOUNDS ((HRESULT)0x80028CA1L)
+#define TYPE_E_IOERROR ((HRESULT)0x80028CA2L)
+#define TYPE_E_CANTCREATETMPFILE ((HRESULT)0x80028CA3L)
+#define TYPE_E_CANTLOADLIBRARY ((HRESULT)0x80029C4AL)
+#define TYPE_E_INCONSISTENTPROPFUNCS ((HRESULT)0x80029C83L)
+#define TYPE_E_CIRCULARTYPE ((HRESULT)0x80029C84L)
+#define STG_E_INVALIDFUNCTION ((HRESULT)0x80030001L)
+#define STG_E_FILENOTFOUND ((HRESULT)0x80030002L)
+#define STG_E_PATHNOTFOUND ((HRESULT)0x80030003L)
+#define STG_E_TOOMANYOPENFILES ((HRESULT)0x80030004L)
+#define STG_E_ACCESSDENIED ((HRESULT)0x80030005L)
+#define STG_E_INVALIDHANDLE ((HRESULT)0x80030006L)
+#define STG_E_INSUFFICIENTMEMORY ((HRESULT)0x80030008L)
+#define STG_E_INVALIDPOINTER ((HRESULT)0x80030009L)
+#define STG_E_NOMOREFILES ((HRESULT)0x80030012L)
+#define STG_E_DISKISWRITEPROTECTED ((HRESULT)0x80030013L)
+#define STG_E_SEEKERROR ((HRESULT)0x80030019L)
+#define STG_E_WRITEFAULT ((HRESULT)0x8003001DL)
+#define STG_E_READFAULT ((HRESULT)0x8003001EL)
+#define STG_E_SHAREVIOLATION ((HRESULT)0x80030020L)
+#define STG_E_LOCKVIOLATION ((HRESULT)0x80030021L)
+#define STG_E_FILEALREADYEXISTS ((HRESULT)0x80030050L)
+#define STG_E_INVALIDPARAMETER ((HRESULT)0x80030057L)
+#define STG_E_MEDIUMFULL ((HRESULT)0x80030070L)
+#define STG_E_PROPSETMISMATCHED ((HRESULT)0x800300F0L)
+#define STG_E_ABNORMALAPIEXIT ((HRESULT)0x800300FAL)
+#define STG_E_INVALIDHEADER ((HRESULT)0x800300FBL)
+#define STG_E_INVALIDNAME ((HRESULT)0x800300FCL)
+#define STG_E_UNKNOWN ((HRESULT)0x800300FDL)
+#define STG_E_UNIMPLEMENTEDFUNCTION ((HRESULT)0x800300FEL)
+#define STG_E_INVALIDFLAG ((HRESULT)0x800300FFL)
+#define STG_E_INUSE ((HRESULT)0x80030100L)
+#define STG_E_NOTCURRENT ((HRESULT)0x80030101L)
+#define STG_E_REVERTED ((HRESULT)0x80030102L)
+#define STG_E_CANTSAVE ((HRESULT)0x80030103L)
+#define STG_E_OLDFORMAT ((HRESULT)0x80030104L)
+#define STG_E_OLDDLL ((HRESULT)0x80030105L)
+#define STG_E_SHAREREQUIRED ((HRESULT)0x80030106L)
+#define STG_E_NOTFILEBASEDSTORAGE ((HRESULT)0x80030107L)
+#define STG_E_EXTANTMARSHALLINGS ((HRESULT)0x80030108L)
+#define STG_E_DOCFILECORRUPT ((HRESULT)0x80030109L)
+#define STG_E_BADBASEADDRESS ((HRESULT)0x80030110L)
+#define STG_E_DOCFILETOOLARGE ((HRESULT)0x80030111L)
+#define STG_E_NOTSIMPLEFORMAT ((HRESULT)0x80030112L)
+#define STG_E_INCOMPLETE ((HRESULT)0x80030201L)
+#define STG_E_TERMINATED ((HRESULT)0x80030202L)
+#define STG_S_CONVERTED ((HRESULT)0x00030200L)
+#define STG_S_BLOCK ((HRESULT)0x00030201L)
+#define STG_S_RETRYNOW ((HRESULT)0x00030202L)
+#define STG_S_MONITORING ((HRESULT)0x00030203L)
+#define STG_S_MULTIPLEOPENS ((HRESULT)0x00030204L)
+#define STG_S_CONSOLIDATIONFAILED ((HRESULT)0x00030205L)
+#define STG_S_CANNOTCONSOLIDATE ((HRESULT)0x00030206L)
+#define RPC_E_CALL_REJECTED ((HRESULT)0x80010001L)
+#define RPC_E_CALL_CANCELED ((HRESULT)0x80010002L)
+#define RPC_E_CANTPOST_INSENDCALL ((HRESULT)0x80010003L)
+#define RPC_E_CANTCALLOUT_INASYNCCALL ((HRESULT)0x80010004L)
+#define RPC_E_CANTCALLOUT_INEXTERNALCALL ((HRESULT)0x80010005L)
+#define RPC_E_CONNECTION_TERMINATED ((HRESULT)0x80010006L)
+#define RPC_E_SERVER_DIED ((HRESULT)0x80010007L)
+#define RPC_E_CLIENT_DIED ((HRESULT)0x80010008L)
+#define RPC_E_INVALID_DATAPACKET ((HRESULT)0x80010009L)
+#define RPC_E_CANTTRANSMIT_CALL ((HRESULT)0x8001000AL)
+#define RPC_E_CLIENT_CANTMARSHAL_DATA ((HRESULT)0x8001000BL)
+#define RPC_E_CLIENT_CANTUNMARSHAL_DATA ((HRESULT)0x8001000CL)
+#define RPC_E_SERVER_CANTMARSHAL_DATA ((HRESULT)0x8001000DL)
+#define RPC_E_SERVER_CANTUNMARSHAL_DATA ((HRESULT)0x8001000EL)
+#define RPC_E_INVALID_DATA ((HRESULT)0x8001000FL)
+#define RPC_E_INVALID_PARAMETER ((HRESULT)0x80010010L)
+#define RPC_E_CANTCALLOUT_AGAIN ((HRESULT)0x80010011L)
+#define RPC_E_SERVER_DIED_DNE ((HRESULT)0x80010012L)
+#define RPC_E_SYS_CALL_FAILED ((HRESULT)0x80010100L)
+#define RPC_E_OUT_OF_RESOURCES ((HRESULT)0x80010101L)
+#define RPC_E_ATTEMPTED_MULTITHREAD ((HRESULT)0x80010102L)
+#define RPC_E_NOT_REGISTERED ((HRESULT)0x80010103L)
+#define RPC_E_FAULT ((HRESULT)0x80010104L)
+#define RPC_E_SERVERFAULT ((HRESULT)0x80010105L)
+#define RPC_E_CHANGED_MODE ((HRESULT)0x80010106L)
+#define RPC_E_INVALIDMETHOD ((HRESULT)0x80010107L)
+#define RPC_E_DISCONNECTED ((HRESULT)0x80010108L)
+#define RPC_E_RETRY ((HRESULT)0x80010109L)
+#define RPC_E_SERVERCALL_RETRYLATER ((HRESULT)0x8001010AL)
+#define RPC_E_SERVERCALL_REJECTED ((HRESULT)0x8001010BL)
+#define RPC_E_INVALID_CALLDATA ((HRESULT)0x8001010CL)
+#define RPC_E_CANTCALLOUT_ININPUTSYNCCALL ((HRESULT)0x8001010DL)
+#define RPC_E_WRONG_THREAD ((HRESULT)0x8001010EL)
+#define RPC_E_THREAD_NOT_INIT ((HRESULT)0x8001010FL)
+#define RPC_E_VERSION_MISMATCH ((HRESULT)0x80010110L)
+#define RPC_E_INVALID_HEADER ((HRESULT)0x80010111L)
+#define RPC_E_INVALID_EXTENSION ((HRESULT)0x80010112L)
+#define RPC_E_INVALID_IPID ((HRESULT)0x80010113L)
+#define RPC_E_INVALID_OBJECT ((HRESULT)0x80010114L)
+#define RPC_E_CALL_COMPLETE ((HRESULT)0x80010117L)
+#define RPC_E_UNSECURE_CALL ((HRESULT)0x80010118L)
+#define RPC_E_TOO_LATE ((HRESULT)0x80010119L)
+#define RPC_E_NO_GOOD_SECURITY_PACKAGES ((HRESULT)0x8001011AL)
+#define RPC_E_ACCESS_DENIED ((HRESULT)0x8001011BL)
+#define RPC_E_REMOTE_DISABLED ((HRESULT)0x8001011CL)
+#define RPC_E_INVALID_OBJREF ((HRESULT)0x8001011DL)
+#define RPC_E_NO_CONTEXT ((HRESULT)0x8001011EL)
+#define RPC_E_TIMEOUT ((HRESULT)0x8001011FL)
+#define RPC_E_NO_SYNC ((HRESULT)0x80010120L)
+#define RPC_E_FULLSIC_REQUIRED ((HRESULT)0x80010121L)
+#define RPC_E_INVALID_STD_NAME ((HRESULT)0x80010122L)
+#define RPC_E_UNEXPECTED ((HRESULT)0x8001FFFFL)
+
+#define NTE_BAD_UID ((HRESULT)0x80090001L)
+#define NTE_BAD_HASH ((HRESULT)0x80090002L)
+#define NTE_BAD_KEY ((HRESULT)0x80090003L)
+#define NTE_BAD_LEN ((HRESULT)0x80090004L)
+#define NTE_BAD_DATA ((HRESULT)0x80090005L)
+#define NTE_BAD_SIGNATURE ((HRESULT)0x80090006L)
+#define NTE_BAD_VER ((HRESULT)0x80090007L)
+#define NTE_BAD_ALGID ((HRESULT)0x80090008L)
+#define NTE_BAD_FLAGS ((HRESULT)0x80090009L)
+#define NTE_BAD_TYPE ((HRESULT)0x8009000AL)
+#define NTE_BAD_KEY_STATE ((HRESULT)0x8009000BL)
+#define NTE_BAD_HASH_STATE ((HRESULT)0x8009000CL)
+#define NTE_NO_KEY ((HRESULT)0x8009000DL)
+#define NTE_NO_MEMORY ((HRESULT)0x8009000EL)
+#define NTE_EXISTS ((HRESULT)0x8009000FL)
+#define NTE_PERM ((HRESULT)0x80090010L)
+#define NTE_NOT_FOUND ((HRESULT)0x80090011L)
+#define NTE_DOUBLE_ENCRYPT ((HRESULT)0x80090012L)
+#define NTE_BAD_PROVIDER ((HRESULT)0x80090013L)
+#define NTE_BAD_PROV_TYPE ((HRESULT)0x80090014L)
+#define NTE_BAD_PUBLIC_KEY ((HRESULT)0x80090015L)
+#define NTE_BAD_KEYSET ((HRESULT)0x80090016L)
+#define NTE_PROV_TYPE_NOT_DEF ((HRESULT)0x80090017L)
+#define NTE_PROV_TYPE_ENTRY_BAD ((HRESULT)0x80090018L)
+#define NTE_KEYSET_NOT_DEF ((HRESULT)0x80090019L)
+#define NTE_KEYSET_ENTRY_BAD ((HRESULT)0x8009001AL)
+#define NTE_PROV_TYPE_NO_MATCH ((HRESULT)0x8009001BL)
+#define NTE_SIGNATURE_FILE_BAD ((HRESULT)0x8009001CL)
+#define NTE_PROVIDER_DLL_FAIL ((HRESULT)0x8009001DL)
+#define NTE_PROV_DLL_NOT_FOUND ((HRESULT)0x8009001EL)
+#define NTE_BAD_KEYSET_PARAM ((HRESULT)0x8009001FL)
+#define NTE_FAIL ((HRESULT)0x80090020L)
+#define NTE_SYS_ERR ((HRESULT)0x80090021L)
+#define NTE_SILENT_CONTEXT ((HRESULT)0x80090022L)
+#define NTE_TOKEN_KEYSET_STORAGE_FULL ((HRESULT)0x80090023L)
+#define NTE_TEMPORARY_PROFILE ((HRESULT)0x80090024L)
+#define NTE_FIXEDPARAMETER ((HRESULT)0x80090025L)
+
+#endif
diff --git a/tcc/include/winapi/wingdi.h b/tcc/include/winapi/wingdi.h
new file mode 100644
index 0000000..f6ac0f1
--- /dev/null
+++ b/tcc/include/winapi/wingdi.h
@@ -0,0 +1,3235 @@
+#ifndef _WINGDI_H
+#define _WINGDI_H
+#define _WINGDI_
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef WINGDIAPI
+#ifdef __W32API_USE_DLLIMPORT__
+#define WINGDIAPI DECLSPEC_IMPORT
+#else
+#define WINGDIAPI
+#endif
+#endif
+
+#define BI_RGB 0
+#define BI_RLE8 1
+#define BI_RLE4 2
+#define BI_BITFIELDS 3
+#define BI_JPEG 4
+#define BI_PNG 5
+#define LF_FACESIZE 32
+#define LF_FULLFACESIZE 64
+#define CA_NEGATIVE 1
+#define CA_LOG_FILTER 2
+#define ILLUMINANT_DEVICE_DEFAULT 0
+#define ILLUMINANT_A 1
+#define ILLUMINANT_B 2
+#define ILLUMINANT_C 3
+#define ILLUMINANT_D50 4
+#define ILLUMINANT_D55 5
+#define ILLUMINANT_D65 6
+#define ILLUMINANT_D75 7
+#define ILLUMINANT_F2 8
+#define ILLUMINANT_MAX_INDEX ILLUMINANT_F2
+#define ILLUMINANT_TUNGSTEN ILLUMINANT_A
+#define ILLUMINANT_DAYLIGHT ILLUMINANT_C
+#define ILLUMINANT_FLUORESCENT ILLUMINANT_F2
+#define ILLUMINANT_NTSC ILLUMINANT_C
+#define RGB_GAMMA_MIN 2500
+#define RGB_GAMMA_MAX 65000
+#define REFERENCE_WHITE_MIN 6000
+#define REFERENCE_WHITE_MAX 10000
+#define REFERENCE_BLACK_MIN 0
+#define REFERENCE_BLACK_MAX 4000
+#define COLOR_ADJ_MIN (-100)
+#define COLOR_ADJ_MAX 100
+#define CCHDEVICENAME 32
+#define CCHFORMNAME 32
+#define DI_COMPAT 4
+#define DI_DEFAULTSIZE 8
+#define DI_IMAGE 2
+#define DI_MASK 1
+#define DI_NORMAL 3
+#define DI_APPBANDING 1
+#define EMR_HEADER 1
+#define EMR_POLYBEZIER 2
+#define EMR_POLYGON 3
+#define EMR_POLYLINE 4
+#define EMR_POLYBEZIERTO 5
+#define EMR_POLYLINETO 6
+#define EMR_POLYPOLYLINE 7
+#define EMR_POLYPOLYGON 8
+#define EMR_SETWINDOWEXTEX 9
+#define EMR_SETWINDOWORGEX 10
+#define EMR_SETVIEWPORTEXTEX 11
+#define EMR_SETVIEWPORTORGEX 12
+#define EMR_SETBRUSHORGEX 13
+#define EMR_EOF 14
+#define EMR_SETPIXELV 15
+#define EMR_SETMAPPERFLAGS 16
+#define EMR_SETMAPMODE 17
+#define EMR_SETBKMODE 18
+#define EMR_SETPOLYFILLMODE 19
+#define EMR_SETROP2 20
+#define EMR_SETSTRETCHBLTMODE 21
+#define EMR_SETTEXTALIGN 22
+#define EMR_SETCOLORADJUSTMENT 23
+#define EMR_SETTEXTCOLOR 24
+#define EMR_SETBKCOLOR 25
+#define EMR_OFFSETCLIPRGN 26
+#define EMR_MOVETOEX 27
+#define EMR_SETMETARGN 28
+#define EMR_EXCLUDECLIPRECT 29
+#define EMR_INTERSECTCLIPRECT 30
+#define EMR_SCALEVIEWPORTEXTEX 31
+#define EMR_SCALEWINDOWEXTEX 32
+#define EMR_SAVEDC 33
+#define EMR_RESTOREDC 34
+#define EMR_SETWORLDTRANSFORM 35
+#define EMR_MODIFYWORLDTRANSFORM 36
+#define EMR_SELECTOBJECT 37
+#define EMR_CREATEPEN 38
+#define EMR_CREATEBRUSHINDIRECT 39
+#define EMR_DELETEOBJECT 40
+#define EMR_ANGLEARC 41
+#define EMR_ELLIPSE 42
+#define EMR_RECTANGLE 43
+#define EMR_ROUNDRECT 44
+#define EMR_ARC 45
+#define EMR_CHORD 46
+#define EMR_PIE 47
+#define EMR_SELECTPALETTE 48
+#define EMR_CREATEPALETTE 49
+#define EMR_SETPALETTEENTRIES 50
+#define EMR_RESIZEPALETTE 51
+#define EMR_REALIZEPALETTE 52
+#define EMR_EXTFLOODFILL 53
+#define EMR_LINETO 54
+#define EMR_ARCTO 55
+#define EMR_POLYDRAW 56
+#define EMR_SETARCDIRECTION 57
+#define EMR_SETMITERLIMIT 58
+#define EMR_BEGINPATH 59
+#define EMR_ENDPATH 60
+#define EMR_CLOSEFIGURE 61
+#define EMR_FILLPATH 62
+#define EMR_STROKEANDFILLPATH 63
+#define EMR_STROKEPATH 64
+#define EMR_FLATTENPATH 65
+#define EMR_WIDENPATH 66
+#define EMR_SELECTCLIPPATH 67
+#define EMR_ABORTPATH 68
+#define EMR_GDICOMMENT 70
+#define EMR_FILLRGN 71
+#define EMR_FRAMERGN 72
+#define EMR_INVERTRGN 73
+#define EMR_PAINTRGN 74
+#define EMR_EXTSELECTCLIPRGN 75
+#define EMR_BITBLT 76
+#define EMR_STRETCHBLT 77
+#define EMR_MASKBLT 78
+#define EMR_PLGBLT 79
+#define EMR_SETDIBITSTODEVICE 80
+#define EMR_STRETCHDIBITS 81
+#define EMR_EXTCREATEFONTINDIRECTW 82
+#define EMR_EXTTEXTOUTA 83
+#define EMR_EXTTEXTOUTW 84
+#define EMR_POLYBEZIER16 85
+#define EMR_POLYGON16 86
+#define EMR_POLYLINE16 87
+#define EMR_POLYBEZIERTO16 88
+#define EMR_POLYLINETO16 89
+#define EMR_POLYPOLYLINE16 90
+#define EMR_POLYPOLYGON16 91
+#define EMR_POLYDRAW16 92
+#define EMR_CREATEMONOBRUSH 93
+#define EMR_CREATEDIBPATTERNBRUSHPT 94
+#define EMR_EXTCREATEPEN 95
+#define EMR_POLYTEXTOUTA 96
+#define EMR_POLYTEXTOUTW 97
+#define EMR_SETICMMODE 98
+#define EMR_CREATECOLORSPACE 99
+#define EMR_SETCOLORSPACE 100
+#define EMR_DELETECOLORSPACE 101
+#define EMR_GLSRECORD 102
+#define EMR_GLSBOUNDEDRECORD 103
+#define EMR_PIXELFORMAT 104
+#define ENHMETA_SIGNATURE 1179469088
+#define EPS_SIGNATURE 0x46535045
+#if (_WIN32_WINNT >= 0x0500)
+#define FR_PRIVATE 0x10
+#define FR_NOT_ENUM 0x20
+#endif
+#define META_SETBKCOLOR 0x201
+#define META_SETBKMODE 0x102
+#define META_SETMAPMODE 0x103
+#define META_SETROP2 0x104
+#define META_SETRELABS 0x105
+#define META_SETPOLYFILLMODE 0x106
+#define META_SETSTRETCHBLTMODE 0x107
+#define META_SETTEXTCHAREXTRA 0x108
+#define META_SETTEXTCOLOR 0x209
+#define META_SETTEXTJUSTIFICATION 0x20A
+#define META_SETWINDOWORG 0x20B
+#define META_SETWINDOWEXT 0x20C
+#define META_SETVIEWPORTORG 0x20D
+#define META_SETVIEWPORTEXT 0x20E
+#define META_OFFSETWINDOWORG 0x20F
+#define META_SCALEWINDOWEXT 0x410
+#define META_OFFSETVIEWPORTORG 0x211
+#define META_SCALEVIEWPORTEXT 0x412
+#define META_LINETO 0x213
+#define META_MOVETO 0x214
+#define META_EXCLUDECLIPRECT 0x415
+#define META_INTERSECTCLIPRECT 0x416
+#define META_ARC 0x817
+#define META_ELLIPSE 0x418
+#define META_FLOODFILL 0x419
+#define META_PIE 0x81A
+#define META_RECTANGLE 0x41B
+#define META_ROUNDRECT 0x61C
+#define META_PATBLT 0x61D
+#define META_SAVEDC 0x1E
+#define META_SETPIXEL 0x41F
+#define META_OFFSETCLIPRGN 0x220
+#define META_TEXTOUT 0x521
+#define META_BITBLT 0x922
+#define META_STRETCHBLT 0xB23
+#define META_POLYGON 0x324
+#define META_POLYLINE 0x325
+#define META_ESCAPE 0x626
+#define META_RESTOREDC 0x127
+#define META_FILLREGION 0x228
+#define META_FRAMEREGION 0x429
+#define META_INVERTREGION 0x12A
+#define META_PAINTREGION 0x12B
+#define META_SELECTCLIPREGION 0x12C
+#define META_SELECTOBJECT 0x12D
+#define META_SETTEXTALIGN 0x12E
+#define META_CHORD 0x830
+#define META_SETMAPPERFLAGS 0x231
+#define META_EXTTEXTOUT 0xa32
+#define META_SETDIBTODEV 0xd33
+#define META_SELECTPALETTE 0x234
+#define META_REALIZEPALETTE 0x35
+#define META_ANIMATEPALETTE 0x436
+#define META_SETPALENTRIES 0x37
+#define META_POLYPOLYGON 0x538
+#define META_RESIZEPALETTE 0x139
+#define META_DIBBITBLT 0x940
+#define META_DIBSTRETCHBLT 0xb41
+#define META_DIBCREATEPATTERNBRUSH 0x142
+#define META_STRETCHDIB 0xf43
+#define META_EXTFLOODFILL 0x548
+#define META_DELETEOBJECT 0x1f0
+#define META_CREATEPALETTE 0xf7
+#define META_CREATEPATTERNBRUSH 0x1F9
+#define META_CREATEPENINDIRECT 0x2FA
+#define META_CREATEFONTINDIRECT 0x2FB
+#define META_CREATEBRUSHINDIRECT 0x2FC
+#define META_CREATEREGION 0x6FF
+#define PT_MOVETO 6
+#define PT_LINETO 2
+#define PT_BEZIERTO 4
+#define PT_CLOSEFIGURE 1
+#define ELF_VENDOR_SIZE 4
+#define ELF_VERSION 0
+#define ELF_CULTURE_LATIN 0
+#define PFD_TYPE_RGBA 0
+#define PFD_TYPE_COLORINDEX 1
+#define PFD_MAIN_PLANE 0
+#define PFD_OVERLAY_PLANE 1
+#define PFD_UNDERLAY_PLANE (-1)
+#define PFD_DOUBLEBUFFER 1
+#define PFD_STEREO 2
+#define PFD_DRAW_TO_WINDOW 4
+#define PFD_DRAW_TO_BITMAP 8
+#define PFD_SUPPORT_GDI 16
+#define PFD_SUPPORT_OPENGL 32
+#define PFD_GENERIC_FORMAT 64
+#define PFD_NEED_PALETTE 128
+#define PFD_NEED_SYSTEM_PALETTE 0x00000100
+#define PFD_SWAP_EXCHANGE 0x00000200
+#define PFD_SWAP_COPY 0x00000400
+#define PFD_SWAP_LAYER_BUFFERS 0x00000800
+#define PFD_GENERIC_ACCELERATED 0x00001000
+#define PFD_DEPTH_DONTCARE 0x20000000
+#define PFD_DOUBLEBUFFER_DONTCARE 0x40000000
+#define PFD_STEREO_DONTCARE 0x80000000
+#define SP_ERROR (-1)
+#define SP_OUTOFDISK (-4)
+#define SP_OUTOFMEMORY (-5)
+#define SP_USERABORT (-3)
+#define SP_APPABORT (-2)
+#define BLACKNESS 0x00000042
+#define NOTSRCERASE 0x001100A6
+#define NOTSRCCOPY 0x00330008
+#define SRCERASE 0x00440328
+#define DSTINVERT 0x00550009
+#define PATINVERT 0x005A0049
+#define SRCINVERT 0x00660046
+#define SRCAND 0x008800C6
+#define MERGEPAINT 0x00BB0226
+#define MERGECOPY 0x00C000CA
+#define SRCCOPY 0x00CC0020
+#define SRCPAINT 0x00EE0086
+#define PATCOPY 0x00F00021
+#define PATPAINT 0x00FB0A09
+#define WHITENESS 0x00FF0062
+#define CAPTUREBLT 0x40000000
+#define NOMIRRORBITMAP 0x80000000
+#define R2_BLACK 1
+#define R2_COPYPEN 13
+#define R2_MASKNOTPEN 3
+#define R2_MASKPEN 9
+#define R2_MASKPENNOT 5
+#define R2_MERGENOTPEN 12
+#define R2_MERGEPEN 15
+#define R2_MERGEPENNOT 14
+#define R2_NOP 11
+#define R2_NOT 6
+#define R2_NOTCOPYPEN 4
+#define R2_NOTMASKPEN 8
+#define R2_NOTMERGEPEN 2
+#define R2_NOTXORPEN 10
+#define R2_WHITE 16
+#define R2_XORPEN 7
+#define CM_OUT_OF_GAMUT 255
+#define CM_IN_GAMUT 0
+#define RGN_AND 1
+#define RGN_COPY 5
+#define RGN_DIFF 4
+#define RGN_OR 2
+#define RGN_XOR 3
+#define NULLREGION 1
+#define SIMPLEREGION 2
+#define COMPLEXREGION 3
+#define ERROR 0
+#define CBM_INIT 4
+#define DIB_PAL_COLORS 1
+#define DIB_RGB_COLORS 0
+#define FW_DONTCARE 0
+#define FW_THIN 100
+#define FW_EXTRALIGHT 200
+#define FW_ULTRALIGHT FW_EXTRALIGHT
+#define FW_LIGHT 300
+#define FW_NORMAL 400
+#define FW_REGULAR 400
+#define FW_MEDIUM 500
+#define FW_SEMIBOLD 600
+#define FW_DEMIBOLD FW_SEMIBOLD
+#define FW_BOLD 700
+#define FW_EXTRABOLD 800
+#define FW_ULTRABOLD FW_EXTRABOLD
+#define FW_HEAVY 900
+#define FW_BLACK FW_HEAVY
+#define ANSI_CHARSET 0
+#define DEFAULT_CHARSET 1
+#define SYMBOL_CHARSET 2
+#define SHIFTJIS_CHARSET 128
+#define HANGEUL_CHARSET 129
+#define HANGUL_CHARSET 129
+#define GB2312_CHARSET 134
+#define CHINESEBIG5_CHARSET 136
+#define GREEK_CHARSET 161
+#define TURKISH_CHARSET 162
+#define HEBREW_CHARSET 177
+#define ARABIC_CHARSET 178
+#define BALTIC_CHARSET 186
+#define RUSSIAN_CHARSET 204
+#define THAI_CHARSET 222
+#define EASTEUROPE_CHARSET 238
+#define OEM_CHARSET 255
+#define JOHAB_CHARSET 130
+#define VIETNAMESE_CHARSET 163
+#define MAC_CHARSET 77
+#define OUT_DEFAULT_PRECIS 0
+#define OUT_STRING_PRECIS 1
+#define OUT_CHARACTER_PRECIS 2
+#define OUT_STROKE_PRECIS 3
+#define OUT_TT_PRECIS 4
+#define OUT_DEVICE_PRECIS 5
+#define OUT_RASTER_PRECIS 6
+#define OUT_TT_ONLY_PRECIS 7
+#define OUT_OUTLINE_PRECIS 8
+/* http://www.pinvoke.net/default.aspx/Structures/LOGFONT.html */
+#define OUT_PS_ONLY_PRECIS 10
+#define CLIP_DEFAULT_PRECIS 0
+#define CLIP_CHARACTER_PRECIS 1
+#define CLIP_STROKE_PRECIS 2
+#define CLIP_MASK 15
+#define CLIP_LH_ANGLES 16
+#define CLIP_TT_ALWAYS 32
+#define CLIP_EMBEDDED 128
+#define DEFAULT_QUALITY 0
+#define DRAFT_QUALITY 1
+#define PROOF_QUALITY 2
+#define NONANTIALIASED_QUALITY 3
+#define ANTIALIASED_QUALITY 4
+#if _WIN32_WINNT >= 0x0500
+#define CLEARTYPE_QUALITY 5
+#endif
+#define DEFAULT_PITCH 0
+#define FIXED_PITCH 1
+#define VARIABLE_PITCH 2
+#define MONO_FONT 8
+#define FF_DECORATIVE 80
+#define FF_DONTCARE 0
+#define FF_MODERN 48
+#define FF_ROMAN 16
+#define FF_SCRIPT 64
+#define FF_SWISS 32
+#define PANOSE_COUNT 10
+#define PAN_FAMILYTYPE_INDEX 0
+#define PAN_SERIFSTYLE_INDEX 1
+#define PAN_WEIGHT_INDEX 2
+#define PAN_PROPORTION_INDEX 3
+#define PAN_CONTRAST_INDEX 4
+#define PAN_STROKEVARIATION_INDEX 5
+#define PAN_ARMSTYLE_INDEX 6
+#define PAN_LETTERFORM_INDEX 7
+#define PAN_MIDLINE_INDEX 8
+#define PAN_XHEIGHT_INDEX 9
+#define PAN_CULTURE_LATIN 0
+#define PAN_ANY 0
+#define PAN_NO_FIT 1
+#define PAN_FAMILY_TEXT_DISPLAY 2
+#define PAN_FAMILY_SCRIPT 3
+#define PAN_FAMILY_DECORATIVE 4
+#define PAN_FAMILY_PICTORIAL 5
+#define PAN_SERIF_COVE 2
+#define PAN_SERIF_OBTUSE_COVE 3
+#define PAN_SERIF_SQUARE_COVE 4
+#define PAN_SERIF_OBTUSE_SQUARE_COVE 5
+#define PAN_SERIF_SQUARE 6
+#define PAN_SERIF_THIN 7
+#define PAN_SERIF_BONE 8
+#define PAN_SERIF_EXAGGERATED 9
+#define PAN_SERIF_TRIANGLE 10
+#define PAN_SERIF_NORMAL_SANS 11
+#define PAN_SERIF_OBTUSE_SANS 12
+#define PAN_SERIF_PERP_SANS 13
+#define PAN_SERIF_FLARED 14
+#define PAN_SERIF_ROUNDED 15
+#define PAN_WEIGHT_VERY_LIGHT 2
+#define PAN_WEIGHT_LIGHT 3
+#define PAN_WEIGHT_THIN 4
+#define PAN_WEIGHT_BOOK 5
+#define PAN_WEIGHT_MEDIUM 6
+#define PAN_WEIGHT_DEMI 7
+#define PAN_WEIGHT_BOLD 8
+#define PAN_WEIGHT_HEAVY 9
+#define PAN_WEIGHT_BLACK 10
+#define PAN_WEIGHT_NORD 11
+#define PAN_PROP_OLD_STYLE 2
+#define PAN_PROP_MODERN 3
+#define PAN_PROP_EVEN_WIDTH 4
+#define PAN_PROP_EXPANDED 5
+#define PAN_PROP_CONDENSED 6
+#define PAN_PROP_VERY_EXPANDED 7
+#define PAN_PROP_VERY_CONDENSED 8
+#define PAN_PROP_MONOSPACED 9
+#define PAN_CONTRAST_NONE 2
+#define PAN_CONTRAST_VERY_LOW 3
+#define PAN_CONTRAST_LOW 4
+#define PAN_CONTRAST_MEDIUM_LOW 5
+#define PAN_CONTRAST_MEDIUM 6
+#define PAN_CONTRAST_MEDIUM_HIGH 7
+#define PAN_CONTRAST_HIGH 8
+#define PAN_CONTRAST_VERY_HIGH 9
+#define PAN_STROKE_GRADUAL_DIAG 2
+#define PAN_STROKE_GRADUAL_TRAN 3
+#define PAN_STROKE_GRADUAL_VERT 4
+#define PAN_STROKE_GRADUAL_HORZ 5
+#define PAN_STROKE_RAPID_VERT 6
+#define PAN_STROKE_RAPID_HORZ 7
+#define PAN_STROKE_INSTANT_VERT 8
+#define PAN_STRAIGHT_ARMS_HORZ 2
+#define PAN_STRAIGHT_ARMS_WEDGE 3
+#define PAN_STRAIGHT_ARMS_VERT 4
+#define PAN_STRAIGHT_ARMS_SINGLE_SERIF 5
+#define PAN_STRAIGHT_ARMS_DOUBLE_SERIF 6
+#define PAN_BENT_ARMS_HORZ 7
+#define PAN_BENT_ARMS_WEDGE 8
+#define PAN_BENT_ARMS_VERT 9
+#define PAN_BENT_ARMS_SINGLE_SERIF 10
+#define PAN_BENT_ARMS_DOUBLE_SERIF 11
+#define PAN_LETT_NORMAL_CONTACT 2
+#define PAN_LETT_NORMAL_WEIGHTED 3
+#define PAN_LETT_NORMAL_BOXED 4
+#define PAN_LETT_NORMAL_FLATTENED 5
+#define PAN_LETT_NORMAL_ROUNDED 6
+#define PAN_LETT_NORMAL_OFF_CENTER 7
+#define PAN_LETT_NORMAL_SQUARE 8
+#define PAN_LETT_OBLIQUE_CONTACT 9
+#define PAN_LETT_OBLIQUE_WEIGHTED 10
+#define PAN_LETT_OBLIQUE_BOXED 11
+#define PAN_LETT_OBLIQUE_FLATTENED 12
+#define PAN_LETT_OBLIQUE_ROUNDED 13
+#define PAN_LETT_OBLIQUE_OFF_CENTER 14
+#define PAN_LETT_OBLIQUE_SQUARE 15
+#define PAN_MIDLINE_STANDARD_TRIMMED 2
+#define PAN_MIDLINE_STANDARD_POINTED 3
+#define PAN_MIDLINE_STANDARD_SERIFED 4
+#define PAN_MIDLINE_HIGH_TRIMMED 5
+#define PAN_MIDLINE_HIGH_POINTED 6
+#define PAN_MIDLINE_HIGH_SERIFED 7
+#define PAN_MIDLINE_CONSTANT_TRIMMED 8
+#define PAN_MIDLINE_CONSTANT_POINTED 9
+#define PAN_MIDLINE_CONSTANT_SERIFED 10
+#define PAN_MIDLINE_LOW_TRIMMED 11
+#define PAN_MIDLINE_LOW_POINTED 12
+#define PAN_MIDLINE_LOW_SERIFED 13
+#define PAN_XHEIGHT_CONSTANT_SMALL 2
+#define PAN_XHEIGHT_CONSTANT_STD 3
+#define PAN_XHEIGHT_CONSTANT_LARGE 4
+#define PAN_XHEIGHT_DUCKING_SMALL 5
+#define PAN_XHEIGHT_DUCKING_STD 6
+#define PAN_XHEIGHT_DUCKING_LARGE 7
+#define FS_LATIN1 1
+#define FS_LATIN2 2
+#define FS_CYRILLIC 4
+#define FS_GREEK 8
+#define FS_TURKISH 16
+#define FS_HEBREW 32
+#define FS_ARABIC 64
+#define FS_BALTIC 128
+#define FS_THAI 0x10000
+#define FS_JISJAPAN 0x20000
+#define FS_CHINESESIMP 0x40000
+#define FS_WANSUNG 0x80000
+#define FS_CHINESETRAD 0x100000
+#define FS_JOHAB 0x200000
+#define FS_SYMBOL 0x80000000
+#define HS_BDIAGONAL 3
+#define HS_CROSS 4
+#define HS_DIAGCROSS 5
+#define HS_FDIAGONAL 2
+#define HS_HORIZONTAL 0
+#define HS_VERTICAL 1
+#define PS_GEOMETRIC 65536
+#define PS_COSMETIC 0
+#define PS_ALTERNATE 8
+#define PS_SOLID 0
+#define PS_DASH 1
+#define PS_DOT 2
+#define PS_DASHDOT 3
+#define PS_DASHDOTDOT 4
+#define PS_NULL 5
+#define PS_USERSTYLE 7
+#define PS_INSIDEFRAME 6
+#define PS_ENDCAP_ROUND 0
+#define PS_ENDCAP_SQUARE 256
+#define PS_ENDCAP_FLAT 512
+#define PS_JOIN_BEVEL 4096
+#define PS_JOIN_MITER 8192
+#define PS_JOIN_ROUND 0
+#define PS_STYLE_MASK 15
+#define PS_ENDCAP_MASK 3840
+#define PS_TYPE_MASK 983040
+#define ALTERNATE 1
+#define WINDING 2
+#define DC_BINNAMES 12
+#define DC_BINS 6
+#define DC_COPIES 18
+#define DC_DRIVER 11
+#define DC_DATATYPE_PRODUCED 21
+#define DC_DUPLEX 7
+#define DC_EMF_COMPLIANT 20
+#define DC_ENUMRESOLUTIONS 13
+#define DC_EXTRA 9
+#define DC_FIELDS 1
+#define DC_FILEDEPENDENCIES 14
+#define DC_MAXEXTENT 5
+#define DC_MINEXTENT 4
+#define DC_ORIENTATION 17
+#define DC_PAPERNAMES 16
+#define DC_PAPERS 2
+#define DC_PAPERSIZE 3
+#define DC_SIZE 8
+#define DC_TRUETYPE 15
+#define DCTT_BITMAP 1
+#define DCTT_DOWNLOAD 2
+#define DCTT_SUBDEV 4
+#define DCTT_DOWNLOAD_OUTLINE 8
+#define DC_VERSION 10
+#define DC_BINADJUST 19
+#define DC_EMF_COMPLIANT 20
+#define DC_DATATYPE_PRODUCED 21
+#define DC_MANUFACTURER 23
+#define DC_MODEL 24
+#if (WINVER >= 0x0500)
+#define DC_PERSONALITY 25
+#define DC_PRINTRATE 26
+#define DC_PRINTRATEUNIT 27
+#define DC_PRINTERMEM 28
+#define DC_MEDIAREADY 29
+#define DC_STAPLE 30
+#define DC_PRINTRATEPPM 31
+#define DC_COLORDEVICE 32
+#define DC_NUP 33
+#endif
+#if (WINVER >= 0x0501)
+#define DC_MEDIATYPENAMES 34
+#define DC_MEDIATYPES 35
+#endif
+#define DCBA_FACEUPNONE 0
+#define DCBA_FACEUPCENTER 1
+#define DCBA_FACEUPLEFT 2
+#define DCBA_FACEUPRIGHT 3
+#define DCBA_FACEDOWNNONE 256
+#define DCBA_FACEDOWNCENTER 257
+#define DCBA_FACEDOWNLEFT 258
+#define DCBA_FACEDOWNRIGHT 259
+#define FLOODFILLBORDER 0
+#define FLOODFILLSURFACE 1
+#define ETO_CLIPPED 0x0004
+#define ETO_GLYPH_INDEX 0x0010
+#define ETO_OPAQUE 0x0002
+#define ETO_NUMERICSLATIN 0x0800
+#define ETO_NUMERICSLOCAL 0x0400
+#define ETO_RTLREADING 0x0080
+#if (_WIN32_WINNT >= 0x0400)
+#define ETO_IGNORELANGUAGE 0x1000
+#endif
+#if (_WIN32_WINNT >= 0x0500)
+#define ETO_PDY 0x2000
+#endif
+#define GDICOMMENT_WINDOWS_METAFILE (-2147483647)
+#define GDICOMMENT_BEGINGROUP 2
+#define GDICOMMENT_ENDGROUP 3
+#define GDICOMMENT_MULTIFORMATS 1073741828
+#define GDICOMMENT_IDENTIFIER 1128875079
+#define AD_COUNTERCLOCKWISE 1
+#define AD_CLOCKWISE 2
+#define RDH_RECTANGLES 1
+#define GCPCLASS_LATIN 1
+#define GCPCLASS_HEBREW 2
+#define GCPCLASS_ARABIC 2
+#define GCPCLASS_NEUTRAL 3
+#define GCPCLASS_LOCALNUMBER 4
+#define GCPCLASS_LATINNUMBER 5
+#define GCPCLASS_LATINNUMERICTERMINATOR 6
+#define GCPCLASS_LATINNUMERICSEPARATOR 7
+#define GCPCLASS_NUMERICSEPARATOR 8
+#define GCPCLASS_PREBOUNDLTR 128
+#define GCPCLASS_PREBOUNDRTL 64
+#define GCPCLASS_POSTBOUNDLTR 32
+#define GCPCLASS_POSTBOUNDRTL 16
+#define GCPGLYPH_LINKBEFORE 0x8000
+#define GCPGLYPH_LINKAFTER 0x4000
+#define DCB_DISABLE 8
+#define DCB_ENABLE 4
+#define DCB_RESET 1
+#define DCB_SET 3
+#define DCB_ACCUMULATE 2
+#define DCB_DIRTY 2
+#define OBJ_BRUSH 2
+#define OBJ_PEN 1
+#define OBJ_PAL 5
+#define OBJ_FONT 6
+#define OBJ_BITMAP 7
+#define OBJ_EXTPEN 11
+#define OBJ_REGION 8
+#define OBJ_DC 3
+#define OBJ_MEMDC 10
+#define OBJ_METAFILE 9
+#define OBJ_METADC 4
+#define OBJ_ENHMETAFILE 13
+#define OBJ_ENHMETADC 12
+#define DRIVERVERSION 0
+#define TECHNOLOGY 2
+#define DT_PLOTTER 0
+#define DT_RASDISPLAY 1
+#define DT_RASPRINTER 2
+#define DT_RASCAMERA 3
+#define DT_CHARSTREAM 4
+#define DT_METAFILE 5
+#define DT_DISPFILE 6
+#define HORZSIZE 4
+#define VERTSIZE 6
+#define HORZRES 8
+#define VERTRES 10
+#define LOGPIXELSX 88
+#define LOGPIXELSY 90
+#define BITSPIXEL 12
+#define PLANES 14
+#define NUMBRUSHES 16
+#define NUMPENS 18
+#define NUMFONTS 22
+#define NUMCOLORS 24
+#define NUMMARKERS 20
+#define ASPECTX 40
+#define ASPECTY 42
+#define ASPECTXY 44
+#define PDEVICESIZE 26
+#define CLIPCAPS 36
+#define SIZEPALETTE 104
+#define NUMRESERVED 106
+#define COLORRES 108
+#define PHYSICALWIDTH 110
+#define PHYSICALHEIGHT 111
+#define PHYSICALOFFSETX 112
+#define PHYSICALOFFSETY 113
+#define SCALINGFACTORX 114
+#define SCALINGFACTORY 115
+#define VREFRESH 116
+#define DESKTOPHORZRES 118
+#define DESKTOPVERTRES 117
+#define BLTALIGNMENT 119
+#if(WINVER >= 0x0500)
+#define SHADEBLENDCAPS 120
+#define SB_NONE 0x00
+#define SB_CONST_ALPHA 0x01
+#define SB_PIXEL_ALPHA 0x02
+#define SB_PREMULT_ALPHA 0x04
+#define SB_GRAD_RECT 0x10
+#define SB_GRAD_TRI 0x20
+#define COLORMGMTCAPS 121
+#define CM_NONE 0x00
+#define CM_DEVICE_ICM 0x01
+#define CM_GAMMA_RAMP 0x02
+#define CM_CMYK_COLOR 0x04
+#endif
+#define RASTERCAPS 38
+#define RC_BANDING 2
+#define RC_BITBLT 1
+#define RC_BITMAP64 8
+#define RC_DI_BITMAP 128
+#define RC_DIBTODEV 512
+#define RC_FLOODFILL 4096
+#define RC_GDI20_OUTPUT 16
+#define RC_PALETTE 256
+#define RC_SCALING 4
+#define RC_STRETCHBLT 2048
+#define RC_STRETCHDIB 8192
+#define RC_DEVBITS 0x8000
+#define RC_OP_DX_OUTPUT 0x4000
+#define CURVECAPS 28
+#define CC_NONE 0
+#define CC_CIRCLES 1
+#define CC_PIE 2
+#define CC_CHORD 4
+#define CC_ELLIPSES 8
+#define CC_WIDE 16
+#define CC_STYLED 32
+#define CC_WIDESTYLED 64
+#define CC_INTERIORS 128
+#define CC_ROUNDRECT 256
+#define LINECAPS 30
+#define LC_NONE 0
+#define LC_POLYLINE 2
+#define LC_MARKER 4
+#define LC_POLYMARKER 8
+#define LC_WIDE 16
+#define LC_STYLED 32
+#define LC_WIDESTYLED 64
+#define LC_INTERIORS 128
+#define POLYGONALCAPS 32
+#define RC_BANDING 2
+#define RC_BIGFONT 1024
+#define RC_BITBLT 1
+#define RC_BITMAP64 8
+#define RC_DEVBITS 0x8000
+#define RC_DI_BITMAP 128
+#define RC_GDI20_OUTPUT 16
+#define RC_GDI20_STATE 32
+#define RC_NONE 0
+#define RC_OP_DX_OUTPUT 0x4000
+#define RC_PALETTE 256
+#define RC_SAVEBITMAP 64
+#define RC_SCALING 4
+#define PC_NONE 0
+#define PC_POLYGON 1
+#define PC_POLYPOLYGON 256
+#define PC_PATHS 512
+#define PC_RECTANGLE 2
+#define PC_WINDPOLYGON 4
+#define PC_SCANLINE 8
+#define PC_TRAPEZOID 4
+#define PC_WIDE 16
+#define PC_STYLED 32
+#define PC_WIDESTYLED 64
+#define PC_INTERIORS 128
+#define PC_PATHS 512
+#define TEXTCAPS 34
+#define TC_OP_CHARACTER 1
+#define TC_OP_STROKE 2
+#define TC_CP_STROKE 4
+#define TC_CR_90 8
+#define TC_CR_ANY 16
+#define TC_SF_X_YINDEP 32
+#define TC_SA_DOUBLE 64
+#define TC_SA_INTEGER 128
+#define TC_SA_CONTIN 256
+#define TC_EA_DOUBLE 512
+#define TC_IA_ABLE 1024
+#define TC_UA_ABLE 2048
+#define TC_SO_ABLE 4096
+#define TC_RA_ABLE 8192
+#define TC_VA_ABLE 16384
+#define TC_RESERVED 32768
+#define TC_SCROLLBLT 65536
+#define GCP_DBCS 1
+#define GCP_ERROR 0x8000
+#define GCP_CLASSIN 0x80000
+#define GCP_DIACRITIC 256
+#define GCP_DISPLAYZWG 0x400000
+#define GCP_GLYPHSHAPE 16
+#define GCP_JUSTIFY 0x10000
+#define GCP_JUSTIFYIN 0x200000
+#define GCP_KASHIDA 1024
+#define GCP_LIGATE 32
+#define GCP_MAXEXTENT 0x100000
+#define GCP_NEUTRALOVERRIDE 0x2000000
+#define GCP_NUMERICOVERRIDE 0x1000000
+#define GCP_NUMERICSLATIN 0x4000000
+#define GCP_NUMERICSLOCAL 0x8000000
+#define GCP_REORDER 2
+#define GCP_SYMSWAPOFF 0x800000
+#define GCP_USEKERNING 8
+#define FLI_GLYPHS 0x40000
+#define FLI_MASK 0x103b
+#define GGO_METRICS 0
+#define GGO_BITMAP 1
+#define GGO_NATIVE 2
+#define GGO_BEZIER 3
+#define GGO_GRAY2_BITMAP 4
+#define GGO_GRAY4_BITMAP 5
+#define GGO_GRAY8_BITMAP 6
+#define GGO_GLYPH_INDEX 128
+#if (WINVER >= 0x0500)
+#define GGO_UNHINTED 256
+#endif
+#define GM_COMPATIBLE 1
+#define GM_ADVANCED 2
+#define MM_ANISOTROPIC 8
+#define MM_HIENGLISH 5
+#define MM_HIMETRIC 3
+#define MM_ISOTROPIC 7
+#define MM_LOENGLISH 4
+#define MM_LOMETRIC 2
+#define MM_TEXT 1
+#define MM_TWIPS 6
+#define MM_MAX_FIXEDSCALE MM_TWIPS
+#define ABSOLUTE 1
+#define RELATIVE 2
+#define PC_EXPLICIT 2
+#define PC_NOCOLLAPSE 4
+#define PC_RESERVED 1
+#define CLR_NONE 0xffffffff
+#define CLR_INVALID CLR_NONE
+#define CLR_DEFAULT 0xff000000
+#define PT_MOVETO 6
+#define PT_LINETO 2
+#define PT_BEZIERTO 4
+#define PT_CLOSEFIGURE 1
+#define TT_AVAILABLE 1
+#define TT_ENABLED 2
+#define BLACK_BRUSH 4
+#define DKGRAY_BRUSH 3
+#define GRAY_BRUSH 2
+#define HOLLOW_BRUSH 5
+#define LTGRAY_BRUSH 1
+#define NULL_BRUSH 5
+#define WHITE_BRUSH 0
+#define BLACK_PEN 7
+#define NULL_PEN 8
+#define WHITE_PEN 6
+#define ANSI_FIXED_FONT 11
+#define ANSI_VAR_FONT 12
+#define DEVICE_DEFAULT_FONT 14
+#define DEFAULT_GUI_FONT 17
+#define OEM_FIXED_FONT 10
+#define SYSTEM_FONT 13
+#define SYSTEM_FIXED_FONT 16
+#define DEFAULT_PALETTE 15
+#if (_WIN32_WINNT >= 0x0500)
+#define DC_BRUSH 18
+#define DC_PEN 19
+#endif
+#define SYSPAL_ERROR 0
+#define SYSPAL_STATIC 1
+#define SYSPAL_NOSTATIC 2
+#define SYSPAL_NOSTATIC256 3
+#define TA_BASELINE 24
+#define TA_BOTTOM 8
+#define TA_TOP 0
+#define TA_CENTER 6
+#define TA_LEFT 0
+#define TA_RIGHT 2
+#define TA_RTLREADING 256
+#define TA_NOUPDATECP 0
+#define TA_UPDATECP 1
+#define TA_MASK (TA_BASELINE+TA_CENTER+TA_UPDATECP+TA_RTLREADING)
+#define VTA_BASELINE 24
+#define VTA_CENTER 6
+#define VTA_LEFT TA_BOTTOM
+#define VTA_RIGHT TA_TOP
+#define VTA_BOTTOM TA_RIGHT
+#define VTA_TOP TA_LEFT
+#define MWT_IDENTITY 1
+#define MWT_LEFTMULTIPLY 2
+#define MWT_RIGHTMULTIPLY 3
+#define OPAQUE 2
+#define TRANSPARENT 1
+#define BLACKONWHITE 1
+#define WHITEONBLACK 2
+#define COLORONCOLOR 3
+#define HALFTONE 4
+#define MAXSTRETCHBLTMODE 4
+#define STRETCH_ANDSCANS 1
+#define STRETCH_DELETESCANS 3
+#define STRETCH_HALFTONE 4
+#define STRETCH_ORSCANS 2
+#define TCI_SRCCHARSET 1
+#define TCI_SRCCODEPAGE 2
+#define TCI_SRCFONTSIG 3
+#define ICM_ON 2
+#define ICM_OFF 1
+#define ICM_QUERY 3
+#define NEWFRAME 1
+#define ABORTDOC 2
+#define NEXTBAND 3
+#define SETCOLORTABLE 4
+#define GETCOLORTABLE 5
+#define FLUSHOUTPUT 6
+#define DRAFTMODE 7
+#define QUERYESCSUPPORT 8
+#define SETABORTPROC 9
+#define STARTDOC 10
+#define ENDDOC 11
+#define GETPHYSPAGESIZE 12
+#define GETPRINTINGOFFSET 13
+#define GETSCALINGFACTOR 14
+#define MFCOMMENT 15
+#define GETPENWIDTH 16
+#define SETCOPYCOUNT 17
+#define SELECTPAPERSOURCE 18
+#define DEVICEDATA 19
+#define PASSTHROUGH 19
+#define GETTECHNOLGY 20
+#define GETTECHNOLOGY 20
+#define SETLINECAP 21
+#define SETLINEJOIN 22
+#define SETMITERLIMIT 23
+#define BANDINFO 24
+#define DRAWPATTERNRECT 25
+#define GETVECTORPENSIZE 26
+#define GETVECTORBRUSHSIZE 27
+#define ENABLEDUPLEX 28
+#define GETSETPAPERBINS 29
+#define GETSETPRINTORIENT 30
+#define ENUMPAPERBINS 31
+#define SETDIBSCALING 32
+#define EPSPRINTING 33
+#define ENUMPAPERMETRICS 34
+#define GETSETPAPERMETRICS 35
+#define POSTSCRIPT_DATA 37
+#define POSTSCRIPT_IGNORE 38
+#define MOUSETRAILS 39
+#define GETDEVICEUNITS 42
+#define GETEXTENDEDTEXTMETRICS 256
+#define GETEXTENTTABLE 257
+#define GETPAIRKERNTABLE 258
+#define GETTRACKKERNTABLE 259
+#define EXTTEXTOUT 512
+#define GETFACENAME 513
+#define DOWNLOADFACE 514
+#define ENABLERELATIVEWIDTHS 768
+#define ENABLEPAIRKERNING 769
+#define SETKERNTRACK 770
+#define SETALLJUSTVALUES 771
+#define SETCHARSET 772
+#define STRETCHBLT 2048
+#define GETSETSCREENPARAMS 3072
+#define QUERYDIBSUPPORT 3073
+#define BEGIN_PATH 4096
+#define CLIP_TO_PATH 4097
+#define END_PATH 4098
+#define EXT_DEVICE_CAPS 4099
+#define RESTORE_CTM 4100
+#define SAVE_CTM 4101
+#define SET_ARC_DIRECTION 4102
+#define SET_BACKGROUND_COLOR 4103
+#define SET_POLY_MODE 4104
+#define SET_SCREEN_ANGLE 4105
+#define SET_SPREAD 4106
+#define TRANSFORM_CTM 4107
+#define SET_CLIP_BOX 4108
+#define SET_BOUNDS 4109
+#define SET_MIRROR_MODE 4110
+#define OPENCHANNEL 4110
+#define DOWNLOADHEADER 4111
+#define CLOSECHANNEL 4112
+#define POSTSCRIPT_PASSTHROUGH 4115
+#define ENCAPSULATED_POSTSCRIPT 4116
+#define QDI_SETDIBITS 1
+#define QDI_GETDIBITS 2
+#define QDI_DIBTOSCREEN 4
+#define QDI_STRETCHDIB 8
+#define SP_NOTREPORTED 0x4000
+#define PR_JOBSTATUS 0
+#define ASPECT_FILTERING 1
+#define BS_SOLID 0
+#define BS_NULL 1
+#define BS_HOLLOW 1
+#define BS_HATCHED 2
+#define BS_PATTERN 3
+#define BS_INDEXED 4
+#define BS_DIBPATTERN 5
+#define BS_DIBPATTERNPT 6
+#define BS_PATTERN8X8 7
+#define BS_DIBPATTERN8X8 8
+#define LCS_CALIBRATED_RGB 0
+#define LCS_DEVICE_RGB 1
+#define LCS_DEVICE_CMYK 2
+#define LCS_GM_BUSINESS 1
+#define LCS_GM_GRAPHICS 2
+#define LCS_GM_IMAGES 4
+#define RASTER_FONTTYPE 1
+#define DEVICE_FONTTYPE 2
+#define TRUETYPE_FONTTYPE 4
+#define DMORIENT_PORTRAIT 1
+#define DMORIENT_LANDSCAPE 2
+#define DMPAPER_FIRST 1
+#define DMPAPER_LETTER 1
+#define DMPAPER_LETTERSMALL 2
+#define DMPAPER_TABLOID 3
+#define DMPAPER_LEDGER 4
+#define DMPAPER_LEGAL 5
+#define DMPAPER_STATEMENT 6
+#define DMPAPER_EXECUTIVE 7
+#define DMPAPER_A3 8
+#define DMPAPER_A4 9
+#define DMPAPER_A4SMALL 10
+#define DMPAPER_A5 11
+#define DMPAPER_B4 12
+#define DMPAPER_B5 13
+#define DMPAPER_FOLIO 14
+#define DMPAPER_QUARTO 15
+#define DMPAPER_10X14 16
+#define DMPAPER_11X17 17
+#define DMPAPER_NOTE 18
+#define DMPAPER_ENV_9 19
+#define DMPAPER_ENV_10 20
+#define DMPAPER_ENV_11 21
+#define DMPAPER_ENV_12 22
+#define DMPAPER_ENV_14 23
+#define DMPAPER_CSHEET 24
+#define DMPAPER_DSHEET 25
+#define DMPAPER_ESHEET 26
+#define DMPAPER_ENV_DL 27
+#define DMPAPER_ENV_C5 28
+#define DMPAPER_ENV_C3 29
+#define DMPAPER_ENV_C4 30
+#define DMPAPER_ENV_C6 31
+#define DMPAPER_ENV_C65 32
+#define DMPAPER_ENV_B4 33
+#define DMPAPER_ENV_B5 34
+#define DMPAPER_ENV_B6 35
+#define DMPAPER_ENV_ITALY 36
+#define DMPAPER_ENV_MONARCH 37
+#define DMPAPER_ENV_PERSONAL 38
+#define DMPAPER_FANFOLD_US 39
+#define DMPAPER_FANFOLD_STD_GERMAN 40
+#define DMPAPER_FANFOLD_LGL_GERMAN 41
+#define DMPAPER_ISO_B4 42
+#define DMPAPER_JAPANESE_POSTCARD 43
+#define DMPAPER_9X11 44
+#define DMPAPER_10X11 45
+#define DMPAPER_15X11 46
+#define DMPAPER_ENV_INVITE 47
+#define DMPAPER_RESERVED_48 48
+#define DMPAPER_RESERVED_49 49
+#define DMPAPER_LETTER_EXTRA 50
+#define DMPAPER_LEGAL_EXTRA 51
+#define DMPAPER_TABLOID_EXTRA 52
+#define DMPAPER_A4_EXTRA 53
+#define DMPAPER_LETTER_TRANSVERSE 54
+#define DMPAPER_A4_TRANSVERSE 55
+#define DMPAPER_LETTER_EXTRA_TRANSVERSE 56
+#define DMPAPER_A_PLUS 57
+#define DMPAPER_B_PLUS 58
+#define DMPAPER_LETTER_PLUS 59
+#define DMPAPER_A4_PLUS 60
+#define DMPAPER_A5_TRANSVERSE 61
+#define DMPAPER_B5_TRANSVERSE 62
+#define DMPAPER_A3_EXTRA 63
+#define DMPAPER_A5_EXTRA 64
+#define DMPAPER_B5_EXTRA 65
+#define DMPAPER_A2 66
+#define DMPAPER_A3_TRANSVERSE 67
+#define DMPAPER_A3_EXTRA_TRANSVERSE 68
+#if (WINVER >= 0x0500)
+#define DMPAPER_DBL_JAPANESE_POSTCARD 69
+#define DMPAPER_A6 70
+#define DMPAPER_JENV_KAKU2 71
+#define DMPAPER_JENV_KAKU3 72
+#define DMPAPER_JENV_CHOU3 73
+#define DMPAPER_JENV_CHOU4 74
+#define DMPAPER_LETTER_ROTATED 75
+#define DMPAPER_A3_ROTATED 76
+#define DMPAPER_A4_ROTATED 77
+#define DMPAPER_A5_ROTATED 78
+#define DMPAPER_B4_JIS_ROTATED 79
+#define DMPAPER_B5_JIS_ROTATED 80
+#define DMPAPER_JAPANESE_POSTCARD_ROTATED 81
+#define DMPAPER_DBL_JAPANESE_POSTCARD_ROTATED 82
+#define DMPAPER_A6_ROTATED 83
+#define DMPAPER_JENV_KAKU2_ROTATED 84
+#define DMPAPER_JENV_KAKU3_ROTATED 85
+#define DMPAPER_JENV_CHOU3_ROTATED 86
+#define DMPAPER_JENV_CHOU4_ROTATED 87
+#define DMPAPER_B6_JIS 88
+#define DMPAPER_B6_JIS_ROTATED 89
+#define DMPAPER_12X11 90
+#define DMPAPER_JENV_YOU4 91
+#define DMPAPER_JENV_YOU4_ROTATED 92
+#define DMPAPER_P16K 93
+#define DMPAPER_P32K 94
+#define DMPAPER_P32KBIG 95
+#define DMPAPER_PENV_1 96
+#define DMPAPER_PENV_2 97
+#define DMPAPER_PENV_3 98
+#define DMPAPER_PENV_4 99
+#define DMPAPER_PENV_5 100
+#define DMPAPER_PENV_6 101
+#define DMPAPER_PENV_7 102
+#define DMPAPER_PENV_8 103
+#define DMPAPER_PENV_9 104
+#define DMPAPER_PENV_10 105
+#define DMPAPER_P16K_ROTATED 106
+#define DMPAPER_P32K_ROTATED 107
+#define DMPAPER_P32KBIG_ROTATED 108
+#define DMPAPER_PENV_1_ROTATED 109
+#define DMPAPER_PENV_2_ROTATED 110
+#define DMPAPER_PENV_3_ROTATED 111
+#define DMPAPER_PENV_4_ROTATED 112
+#define DMPAPER_PENV_5_ROTATED 113
+#define DMPAPER_PENV_6_ROTATED 114
+#define DMPAPER_PENV_7_ROTATED 115
+#define DMPAPER_PENV_8_ROTATED 116
+#define DMPAPER_PENV_9_ROTATED 117
+#define DMPAPER_PENV_10_ROTATED 118
+#define DMPAPER_LAST 118
+#else
+#define DMPAPER_LAST 68
+#endif
+#define DMPAPER_USER 256
+#define DMBIN_FIRST 1
+#define DMBIN_UPPER 1
+#define DMBIN_ONLYONE 1
+#define DMBIN_LOWER 2
+#define DMBIN_MIDDLE 3
+#define DMBIN_MANUAL 4
+#define DMBIN_ENVELOPE 5
+#define DMBIN_ENVMANUAL 6
+#define DMBIN_AUTO 7
+#define DMBIN_TRACTOR 8
+#define DMBIN_SMALLFMT 9
+#define DMBIN_LARGEFMT 10
+#define DMBIN_LARGECAPACITY 11
+#define DMBIN_CASSETTE 14
+#define DMBIN_FORMSOURCE 15
+#define DMBIN_LAST 15
+#define DMBIN_USER 256
+#define DMRES_DRAFT (-1)
+#define DMRES_LOW (-2)
+#define DMRES_MEDIUM (-3)
+#define DMRES_HIGH (-4)
+#define DMCOLOR_MONOCHROME 1
+#define DMCOLOR_COLOR 2
+#define DMDUP_SIMPLEX 1
+#define DMDUP_VERTICAL 2
+#define DMDUP_HORIZONTAL 3
+#define DMTT_BITMAP 1
+#define DMTT_DOWNLOAD 2
+#define DMTT_SUBDEV 3
+#define DMTT_DOWNLOAD_OUTLINE 4
+#define DMCOLLATE_FALSE 0
+#define DMCOLLATE_TRUE 1
+#define DM_SPECVERSION 800
+#define DM_GRAYSCALE 1
+#define DM_INTERLACED 2
+#define DM_UPDATE 1
+#define DM_COPY 2
+#define DM_PROMPT 4
+#define DM_MODIFY 8
+#define DM_IN_BUFFER DM_MODIFY
+#define DM_IN_PROMPT DM_PROMPT
+#define DM_OUT_BUFFER DM_COPY
+#define DM_OUT_DEFAULT DM_UPDATE
+#define DM_ORIENTATION 0x00000001
+#define DM_PAPERSIZE 0x00000002
+#define DM_PAPERLENGTH 0x00000004
+#define DM_PAPERWIDTH 0x00000008
+#define DM_SCALE 0x00000010
+#define DM_POSITION 0x00000020
+#define DM_COPIES 0x00000100
+#define DM_DEFAULTSOURCE 0x00000200
+#define DM_PRINTQUALITY 0x00000400
+#define DM_COLOR 0x00000800
+#define DM_DUPLEX 0x00001000
+#define DM_YRESOLUTION 0x00002000
+#define DM_TTOPTION 0x00004000
+#define DM_COLLATE 0x00008000
+#define DM_FORMNAME 0x00010000
+#define DM_LOGPIXELS 0x00020000
+#define DM_BITSPERPEL 0x00040000
+#define DM_PELSWIDTH 0x00080000
+#define DM_PELSHEIGHT 0x00100000
+#define DM_DISPLAYFLAGS 0x00200000
+#define DM_DISPLAYFREQUENCY 0x00400000
+#define DM_ICMMETHOD 0x00800000
+#define DM_ICMINTENT 0x01000000
+#define DM_MEDIATYPE 0x02000000
+#define DM_DITHERTYPE 0x04000000
+#if(WINVER >= 0x0500)
+#define DM_PANNINGWIDTH 0x08000000
+#define DM_PANNINGHEIGHT 0x10000000
+#endif
+#if(WINVER >= 0x0501)
+#define DM_DISPLAYFIXEDOUTPUT 0x20000000
+#define DM_DISPLAYORIENTATION 0x00000080
+#define DMDO_DEFAULT 0x00000000
+#define DMDO_90 0x00000001
+#define DMDO_180 0x00000002
+#define DMDO_270 0x00000003
+#define DMDFO_DEFAULT 0x00000000
+#define DMDFO_STRETCH 0x00000001
+#define DMDFO_CENTER 0x00000002
+#endif
+#define DMICMMETHOD_NONE 1
+#define DMICMMETHOD_SYSTEM 2
+#define DMICMMETHOD_DRIVER 3
+#define DMICMMETHOD_DEVICE 4
+#define DMICMMETHOD_USER 256
+#define DMICM_SATURATE 1
+#define DMICM_CONTRAST 2
+#define DMICM_COLORMETRIC 3
+#define DMICM_USER 256
+#define DMMEDIA_STANDARD 1
+#define DMMEDIA_TRANSPARENCY 2
+#define DMMEDIA_GLOSSY 3
+#define DMMEDIA_USER 256
+#define DMDITHER_NONE 1
+#define DMDITHER_COARSE 2
+#define DMDITHER_FINE 3
+#define DMDITHER_LINEART 4
+#define DMDITHER_ERRORDIFFUSION 5
+#define DMDITHER_RESERVED6 6
+#define DMDITHER_RESERVED7 7
+#define DMDITHER_RESERVED8 8
+#define DMDITHER_RESERVED9 9
+#define DMDITHER_GRAYSCALE 10
+#define DMDITHER_USER 256
+#define GDI_ERROR 0xFFFFFFFF
+#define HGDI_ERROR ((HANDLE)GDI_ERROR)
+#define TMPF_FIXED_PITCH 1
+#define TMPF_VECTOR 2
+#define TMPF_TRUETYPE 4
+#define TMPF_DEVICE 8
+#define NTM_ITALIC 1
+#define NTM_BOLD 32
+#define NTM_REGULAR 64
+#define TT_POLYGON_TYPE 24
+#define TT_PRIM_LINE 1
+#define TT_PRIM_QSPLINE 2
+#define TT_PRIM_CSPLINE 3
+#define FONTMAPPER_MAX 10
+#define ENHMETA_STOCK_OBJECT 0x80000000
+#define WGL_FONT_LINES 0
+#define WGL_FONT_POLYGONS 1
+#define LPD_DOUBLEBUFFER 1
+#define LPD_STEREO 2
+#define LPD_SUPPORT_GDI 16
+#define LPD_SUPPORT_OPENGL 32
+#define LPD_SHARE_DEPTH 64
+#define LPD_SHARE_STENCIL 128
+#define LPD_SHARE_ACCUM 256
+#define LPD_SWAP_EXCHANGE 512
+#define LPD_SWAP_COPY 1024
+#define LPD_TRANSPARENT 4096
+#define LPD_TYPE_RGBA 0
+#define LPD_TYPE_COLORINDEX 1
+#define WGL_SWAP_MAIN_PLANE 1
+#define WGL_SWAP_OVERLAY1 2
+#define WGL_SWAP_OVERLAY2 4
+#define WGL_SWAP_OVERLAY3 8
+#define WGL_SWAP_OVERLAY4 16
+#define WGL_SWAP_OVERLAY5 32
+#define WGL_SWAP_OVERLAY6 64
+#define WGL_SWAP_OVERLAY7 128
+#define WGL_SWAP_OVERLAY8 256
+#define WGL_SWAP_OVERLAY9 512
+#define WGL_SWAP_OVERLAY10 1024
+#define WGL_SWAP_OVERLAY11 2048
+#define WGL_SWAP_OVERLAY12 4096
+#define WGL_SWAP_OVERLAY13 8192
+#define WGL_SWAP_OVERLAY14 16384
+#define WGL_SWAP_OVERLAY15 32768
+#define WGL_SWAP_UNDERLAY1 65536
+#define WGL_SWAP_UNDERLAY2 0x20000
+#define WGL_SWAP_UNDERLAY3 0x40000
+#define WGL_SWAP_UNDERLAY4 0x80000
+#define WGL_SWAP_UNDERLAY5 0x100000
+#define WGL_SWAP_UNDERLAY6 0x200000
+#define WGL_SWAP_UNDERLAY7 0x400000
+#define WGL_SWAP_UNDERLAY8 0x800000
+#define WGL_SWAP_UNDERLAY9 0x1000000
+#define WGL_SWAP_UNDERLAY10 0x2000000
+#define WGL_SWAP_UNDERLAY11 0x4000000
+#define WGL_SWAP_UNDERLAY12 0x8000000
+#define WGL_SWAP_UNDERLAY13 0x10000000
+#define WGL_SWAP_UNDERLAY14 0x20000000
+#define WGL_SWAP_UNDERLAY15 0x40000000
+#define AC_SRC_OVER 0x00
+#define AC_SRC_ALPHA 0x01
+#define AC_SRC_NO_PREMULT_ALPHA 0x01
+#define AC_SRC_NO_ALPHA 0x02
+#define AC_DST_NO_PREMULT_ALPHA 0x10
+#define AC_DST_NO_ALPHA 0x20
+#define LAYOUT_RTL 1
+#define LAYOUT_BITMAPORIENTATIONPRESERVED 8
+#if (WINVER >= 0x0400)
+#define CS_ENABLE 0x00000001
+#define CS_DISABLE 0x00000002
+#define CS_DELETE_TRANSFORM 0x00000003
+#endif
+#if (WINVER >= 0x0500)
+#define GRADIENT_FILL_RECT_H 0x00
+#define GRADIENT_FILL_RECT_V 0x01
+#define GRADIENT_FILL_TRIANGLE 0x02
+#define GRADIENT_FILL_OP_FLAG 0xff
+#define COLORMATCHTOTARGET_EMBEDED 0x00000001
+#define CREATECOLORSPACE_EMBEDED 0x00000001
+#define SETICMPROFILE_EMBEDED 0x00000001
+#endif
+
+#define DISPLAY_DEVICE_ATTACHED_TO_DESKTOP 0x00000001
+#define DISPLAY_DEVICE_MULTI_DRIVER 0x00000002
+#define DISPLAY_DEVICE_PRIMARY_DEVICE 0x00000004
+#define DISPLAY_DEVICE_MIRRORING_DRIVER 0x00000008
+#define DISPLAY_DEVICE_VGA_COMPATIBLE 0x00000010
+#define DISPLAY_DEVICE_REMOVABLE 0x00000020
+#define DISPLAY_DEVICE_MODESPRUNED 0x08000000
+
+#if (_WIN32_WINNT >= 0x0500)
+#define NTM_NONNEGATIVE_AC 0x00010000
+#define NTM_PS_OPENTYPE 0x00020000
+#define NTM_TT_OPENTYPE 0x00040000
+#define NTM_MULTIPLEMASTER 0x00080000
+#define NTM_TYPE1 0x00100000
+#define NTM_DSIG 0x00200000
+#endif
+
+#if (_WIN32_WINNT >= 0x0500)
+#define GGI_MARK_NONEXISTING_GLYPHS 1
+#endif
+
+#ifndef RC_INVOKED
+typedef struct _ABC {
+ int abcA;
+ UINT abcB;
+ int abcC;
+} ABC,*LPABC;
+typedef struct _ABCFLOAT {
+ FLOAT abcfA;
+ FLOAT abcfB;
+ FLOAT abcfC;
+} ABCFLOAT,*LPABCFLOAT;
+typedef struct tagBITMAP {
+ LONG bmType;
+ LONG bmWidth;
+ LONG bmHeight;
+ LONG bmWidthBytes;
+ WORD bmPlanes;
+ WORD bmBitsPixel;
+ LPVOID bmBits;
+} BITMAP,*PBITMAP,*LPBITMAP;
+typedef struct tagBITMAPCOREHEADER {
+ DWORD bcSize;
+ WORD bcWidth;
+ WORD bcHeight;
+ WORD bcPlanes;
+ WORD bcBitCount;
+} BITMAPCOREHEADER,*LPBITMAPCOREHEADER,*PBITMAPCOREHEADER;
+#pragma pack(push,1)
+typedef struct tagRGBTRIPLE {
+ BYTE rgbtBlue;
+ BYTE rgbtGreen;
+ BYTE rgbtRed;
+} RGBTRIPLE,*LPRGBTRIPLE;
+#pragma pack(pop)
+#pragma pack(push,2)
+typedef struct tagBITMAPFILEHEADER {
+ WORD bfType;
+ DWORD bfSize;
+ WORD bfReserved1;
+ WORD bfReserved2;
+ DWORD bfOffBits;
+} BITMAPFILEHEADER,*LPBITMAPFILEHEADER,*PBITMAPFILEHEADER;
+#pragma pack(pop)
+typedef struct _BITMAPCOREINFO {
+ BITMAPCOREHEADER bmciHeader;
+ RGBTRIPLE bmciColors[1];
+} BITMAPCOREINFO,*LPBITMAPCOREINFO,*PBITMAPCOREINFO;
+typedef struct tagBITMAPINFOHEADER{
+ DWORD biSize;
+ LONG biWidth;
+ LONG biHeight;
+ WORD biPlanes;
+ WORD biBitCount;
+ DWORD biCompression;
+ DWORD biSizeImage;
+ LONG biXPelsPerMeter;
+ LONG biYPelsPerMeter;
+ DWORD biClrUsed;
+ DWORD biClrImportant;
+} BITMAPINFOHEADER,*LPBITMAPINFOHEADER,*PBITMAPINFOHEADER;
+typedef struct tagRGBQUAD {
+ BYTE rgbBlue;
+ BYTE rgbGreen;
+ BYTE rgbRed;
+ BYTE rgbReserved;
+} RGBQUAD,*LPRGBQUAD;
+typedef struct tagBITMAPINFO {
+ BITMAPINFOHEADER bmiHeader;
+ RGBQUAD bmiColors[1];
+} BITMAPINFO,*LPBITMAPINFO,*PBITMAPINFO;
+typedef long FXPT16DOT16,*LPFXPT16DOT16;
+typedef long FXPT2DOT30,*LPFXPT2DOT30;
+typedef struct tagCIEXYZ {
+ FXPT2DOT30 ciexyzX;
+ FXPT2DOT30 ciexyzY;
+ FXPT2DOT30 ciexyzZ;
+} CIEXYZ,*LPCIEXYZ;
+typedef struct tagCIEXYZTRIPLE {
+ CIEXYZ ciexyzRed;
+ CIEXYZ ciexyzGreen;
+ CIEXYZ ciexyzBlue;
+} CIEXYZTRIPLE,*LPCIEXYZTRIPLE;
+typedef struct {
+ DWORD bV4Size;
+ LONG bV4Width;
+ LONG bV4Height;
+ WORD bV4Planes;
+ WORD bV4BitCount;
+ DWORD bV4V4Compression;
+ DWORD bV4SizeImage;
+ LONG bV4XPelsPerMeter;
+ LONG bV4YPelsPerMeter;
+ DWORD bV4ClrUsed;
+ DWORD bV4ClrImportant;
+ DWORD bV4RedMask;
+ DWORD bV4GreenMask;
+ DWORD bV4BlueMask;
+ DWORD bV4AlphaMask;
+ DWORD bV4CSType;
+ CIEXYZTRIPLE bV4Endpoints;
+ DWORD bV4GammaRed;
+ DWORD bV4GammaGreen;
+ DWORD bV4GammaBlue;
+} BITMAPV4HEADER,*LPBITMAPV4HEADER,*PBITMAPV4HEADER;
+typedef struct {
+ DWORD bV5Size;
+ LONG bV5Width;
+ LONG bV5Height;
+ WORD bV5Planes;
+ WORD bV5BitCount;
+ DWORD bV5Compression;
+ DWORD bV5SizeImage;
+ LONG bV5XPelsPerMeter;
+ LONG bV5YPelsPerMeter;
+ DWORD bV5ClrUsed;
+ DWORD bV5ClrImportant;
+ DWORD bV5RedMask;
+ DWORD bV5GreenMask;
+ DWORD bV5BlueMask;
+ DWORD bV5AlphaMask;
+ DWORD bV5CSType;
+ CIEXYZTRIPLE bV5Endpoints;
+ DWORD bV5GammaRed;
+ DWORD bV5GammaGreen;
+ DWORD bV5GammaBlue;
+ DWORD bV5Intent;
+ DWORD bV5ProfileData;
+ DWORD bV5ProfileSize;
+ DWORD bV5Reserved;
+} BITMAPV5HEADER,*LPBITMAPV5HEADER,*PBITMAPV5HEADER;
+typedef struct tagFONTSIGNATURE {
+ DWORD fsUsb[4];
+ DWORD fsCsb[2];
+} FONTSIGNATURE,*LPFONTSIGNATURE;
+typedef struct {
+ UINT ciCharset;
+ UINT ciACP;
+ FONTSIGNATURE fs;
+} CHARSETINFO,*LPCHARSETINFO;
+typedef struct tagCOLORADJUSTMENT {
+ WORD caSize;
+ WORD caFlags;
+ WORD caIlluminantIndex;
+ WORD caRedGamma;
+ WORD caGreenGamma;
+ WORD caBlueGamma;
+ WORD caReferenceBlack;
+ WORD caReferenceWhite;
+ SHORT caContrast;
+ SHORT caBrightness;
+ SHORT caColorfulness;
+ SHORT caRedGreenTint;
+} COLORADJUSTMENT,*LPCOLORADJUSTMENT;
+typedef struct _devicemodeA {
+ BYTE dmDeviceName[CCHDEVICENAME];
+ WORD dmSpecVersion;
+ WORD dmDriverVersion;
+ WORD dmSize;
+ WORD dmDriverExtra;
+ DWORD dmFields;
+ _ANONYMOUS_UNION union {
+ _ANONYMOUS_STRUCT struct {
+ short dmOrientation;
+ short dmPaperSize;
+ short dmPaperLength;
+ short dmPaperWidth;
+ short dmScale;
+ short dmCopies;
+ short dmDefaultSource;
+ short dmPrintQuality;
+ } DUMMYSTRUCTNAME;
+ _ANONYMOUS_STRUCT struct {
+ POINTL dmPosition;
+ DWORD dmDisplayOrientation;
+ DWORD dmDisplayFixedOutput;
+ } DUMMYSTRUCTNAME2;
+ } DUMMYUNIONNAME;
+
+ short dmColor;
+ short dmDuplex;
+ short dmYResolution;
+ short dmTTOption;
+ short dmCollate;
+ BYTE dmFormName[CCHFORMNAME];
+ WORD dmLogPixels;
+ DWORD dmBitsPerPel;
+ DWORD dmPelsWidth;
+ DWORD dmPelsHeight;
+ _ANONYMOUS_UNION union {
+ DWORD dmDisplayFlags;
+ DWORD dmNup;
+ } DUMMYUNIONNAME2;
+ DWORD dmDisplayFrequency;
+#if(WINVER >= 0x0400)
+ DWORD dmICMMethod;
+ DWORD dmICMIntent;
+ DWORD dmMediaType;
+ DWORD dmDitherType;
+ DWORD dmReserved1;
+ DWORD dmReserved2;
+#if (WINVER >= 0x0500) || (_WIN32_WINNT >= 0x0400)
+ DWORD dmPanningWidth;
+ DWORD dmPanningHeight;
+#endif
+#endif /* WINVER >= 0x0400 */
+} DEVMODEA,*LPDEVMODEA,*PDEVMODEA;
+typedef struct _devicemodeW {
+ WCHAR dmDeviceName[CCHDEVICENAME];
+ WORD dmSpecVersion;
+ WORD dmDriverVersion;
+ WORD dmSize;
+ WORD dmDriverExtra;
+ DWORD dmFields;
+ _ANONYMOUS_UNION union {
+ _ANONYMOUS_STRUCT struct {
+ short dmOrientation;
+ short dmPaperSize;
+ short dmPaperLength;
+ short dmPaperWidth;
+ short dmScale;
+ short dmCopies;
+ short dmDefaultSource;
+ short dmPrintQuality;
+ } DUMMYSTRUCTNAME;
+ _ANONYMOUS_STRUCT struct {
+ POINTL dmPosition;
+ DWORD dmDisplayOrientation;
+ DWORD dmDisplayFixedOutput;
+ } DUMMYSTRUCTNAME2;
+ } DUMMYUNIONNAME;
+
+ short dmColor;
+ short dmDuplex;
+ short dmYResolution;
+ short dmTTOption;
+ short dmCollate;
+ WCHAR dmFormName[CCHFORMNAME];
+ WORD dmLogPixels;
+ DWORD dmBitsPerPel;
+ DWORD dmPelsWidth;
+ DWORD dmPelsHeight;
+ _ANONYMOUS_UNION union {
+ DWORD dmDisplayFlags;
+ DWORD dmNup;
+ } DUMMYUNIONNAME2;
+ DWORD dmDisplayFrequency;
+#if(WINVER >= 0x0400)
+ DWORD dmICMMethod;
+ DWORD dmICMIntent;
+ DWORD dmMediaType;
+ DWORD dmDitherType;
+ DWORD dmReserved1;
+ DWORD dmReserved2;
+#if (WINVER >= 0x0500) || (_WIN32_WINNT >= 0x0400)
+ DWORD dmPanningWidth;
+ DWORD dmPanningHeight;
+#endif
+#endif /* WINVER >= 0x0400 */
+} DEVMODEW,*LPDEVMODEW,*PDEVMODEW;
+typedef struct tagDIBSECTION {
+ BITMAP dsBm;
+ BITMAPINFOHEADER dsBmih;
+ DWORD dsBitfields[3];
+ HANDLE dshSection;
+ DWORD dsOffset;
+} DIBSECTION;
+typedef struct _DOCINFOA {
+ int cbSize;
+ LPCSTR lpszDocName;
+ LPCSTR lpszOutput;
+ LPCSTR lpszDatatype;
+ DWORD fwType;
+} DOCINFOA,*LPDOCINFOA;
+typedef struct _DOCINFOW {
+ int cbSize;
+ LPCWSTR lpszDocName;
+ LPCWSTR lpszOutput;
+ LPCWSTR lpszDatatype;
+ DWORD fwType;
+} DOCINFOW,*LPDOCINFOW;
+typedef struct tagEMR {
+ DWORD iType;
+ DWORD nSize;
+} EMR,*PEMR;
+typedef struct tagEMRANGLEARC {
+ EMR emr;
+ POINTL ptlCenter;
+ DWORD nRadius;
+ FLOAT eStartAngle;
+ FLOAT eSweepAngle;
+} EMRANGLEARC,*PEMRANGLEARC;
+typedef struct tagEMRARC {
+ EMR emr;
+ RECTL rclBox;
+ POINTL ptlStart;
+ POINTL ptlEnd;
+} EMRARC,*PEMRARC,EMRARCTO,*PEMRARCTO,EMRCHORD,*PEMRCHORD,EMRPIE,*PEMRPIE;
+typedef struct _XFORM {
+ FLOAT eM11;
+ FLOAT eM12;
+ FLOAT eM21;
+ FLOAT eM22;
+ FLOAT eDx;
+ FLOAT eDy;
+} XFORM,*PXFORM,*LPXFORM;
+typedef struct tagEMRBITBLT {
+ EMR emr;
+ RECTL rclBounds;
+ LONG xDest;
+ LONG yDest;
+ LONG cxDest;
+ LONG cyDest;
+ DWORD dwRop;
+ LONG xSrc;
+ LONG ySrc;
+ XFORM xformSrc;
+ COLORREF crBkColorSrc;
+ DWORD iUsageSrc;
+ DWORD offBmiSrc;
+ DWORD offBitsSrc;
+ DWORD cbBitsSrc;
+} EMRBITBLT,*PEMRBITBLT;
+typedef struct tagLOGBRUSH {
+ UINT lbStyle;
+ COLORREF lbColor;
+ LONG lbHatch;
+} LOGBRUSH,*PLOGBRUSH,*LPLOGBRUSH;
+typedef LOGBRUSH PATTERN,*PPATTERN,*LPPATTERN;
+typedef struct tagEMRCREATEBRUSHINDIRECT {
+ EMR emr;
+ DWORD ihBrush;
+ LOGBRUSH lb;
+} EMRCREATEBRUSHINDIRECT,*PEMRCREATEBRUSHINDIRECT;
+typedef LONG LCSCSTYPE;
+typedef LONG LCSGAMUTMATCH;
+typedef struct tagLOGCOLORSPACEA {
+ DWORD lcsSignature;
+ DWORD lcsVersion;
+ DWORD lcsSize;
+ LCSCSTYPE lcsCSType;
+ LCSGAMUTMATCH lcsIntent;
+ CIEXYZTRIPLE lcsEndpoints;
+ DWORD lcsGammaRed;
+ DWORD lcsGammaGreen;
+ DWORD lcsGammaBlue;
+ CHAR lcsFilename[MAX_PATH];
+} LOGCOLORSPACEA,*LPLOGCOLORSPACEA;
+typedef struct tagLOGCOLORSPACEW {
+ DWORD lcsSignature;
+ DWORD lcsVersion;
+ DWORD lcsSize;
+ LCSCSTYPE lcsCSType;
+ LCSGAMUTMATCH lcsIntent;
+ CIEXYZTRIPLE lcsEndpoints;
+ DWORD lcsGammaRed;
+ DWORD lcsGammaGreen;
+ DWORD lcsGammaBlue;
+ WCHAR lcsFilename[MAX_PATH];
+} LOGCOLORSPACEW,*LPLOGCOLORSPACEW;
+typedef struct tagEMRCREATECOLORSPACE {
+ EMR emr;
+ DWORD ihCS;
+ LOGCOLORSPACEW lcs;
+} EMRCREATECOLORSPACE,*PEMRCREATECOLORSPACE;
+typedef struct tagEMRCREATEDIBPATTERNBRUSHPT {
+ EMR emr;
+ DWORD ihBrush;
+ DWORD iUsage;
+ DWORD offBmi;
+ DWORD cbBmi;
+ DWORD offBits;
+ DWORD cbBits;
+} EMRCREATEDIBPATTERNBRUSHPT,*PEMRCREATEDIBPATTERNBRUSHPT;
+typedef struct tagEMRCREATEMONOBRUSH {
+ EMR emr;
+ DWORD ihBrush;
+ DWORD iUsage;
+ DWORD offBmi;
+ DWORD cbBmi;
+ DWORD offBits;
+ DWORD cbBits;
+} EMRCREATEMONOBRUSH,*PEMRCREATEMONOBRUSH;
+typedef struct tagPALETTEENTRY {
+ BYTE peRed;
+ BYTE peGreen;
+ BYTE peBlue;
+ BYTE peFlags;
+} PALETTEENTRY,*LPPALETTEENTRY,*PPALETTEENTRY;
+typedef struct tagLOGPALETTE {
+ WORD palVersion;
+ WORD palNumEntries;
+ PALETTEENTRY palPalEntry[1];
+} LOGPALETTE,*NPLOGPALETTE,*PLOGPALETTE,*LPLOGPALETTE;
+typedef struct tagEMRCREATEPALETTE {
+ EMR emr;
+ DWORD ihPal;
+ LOGPALETTE lgpl;
+} EMRCREATEPALETTE,*PEMRCREATEPALETTE;
+typedef struct tagLOGPEN {
+ UINT lopnStyle;
+ POINT lopnWidth;
+ COLORREF lopnColor;
+} LOGPEN,*PLOGPEN,*LPLOGPEN;
+typedef struct tagEMRCREATEPEN {
+ EMR emr;
+ DWORD ihPen;
+ LOGPEN lopn;
+} EMRCREATEPEN,*PEMRCREATEPEN;
+typedef struct tagEMRELLIPSE {
+ EMR emr;
+ RECTL rclBox;
+} EMRELLIPSE,*PEMRELLIPSE,EMRRECTANGLE,*PEMRRECTANGLE;
+typedef struct tagEMREOF {
+ EMR emr;
+ DWORD nPalEntries;
+ DWORD offPalEntries;
+ DWORD nSizeLast;
+} EMREOF,*PEMREOF;
+typedef struct tagEMREXCLUDECLIPRECT {
+ EMR emr;
+ RECTL rclClip;
+} EMREXCLUDECLIPRECT,*PEMREXCLUDECLIPRECT,EMRINTERSECTCLIPRECT,*PEMRINTERSECTCLIPRECT;
+typedef struct tagPANOSE {
+ BYTE bFamilyType;
+ BYTE bSerifStyle;
+ BYTE bWeight;
+ BYTE bProportion;
+ BYTE bContrast;
+ BYTE bStrokeVariation;
+ BYTE bArmStyle;
+ BYTE bLetterform;
+ BYTE bMidline;
+ BYTE bXHeight;
+} PANOSE;
+typedef struct tagLOGFONTA {
+ LONG lfHeight;
+ LONG lfWidth;
+ LONG lfEscapement;
+ LONG lfOrientation;
+ LONG lfWeight;
+ BYTE lfItalic;
+ BYTE lfUnderline;
+ BYTE lfStrikeOut;
+ BYTE lfCharSet;
+ BYTE lfOutPrecision;
+ BYTE lfClipPrecision;
+ BYTE lfQuality;
+ BYTE lfPitchAndFamily;
+ CHAR lfFaceName[LF_FACESIZE];
+} LOGFONTA,*PLOGFONTA,*LPLOGFONTA;
+typedef struct tagLOGFONTW {
+ LONG lfHeight;
+ LONG lfWidth;
+ LONG lfEscapement;
+ LONG lfOrientation;
+ LONG lfWeight;
+ BYTE lfItalic;
+ BYTE lfUnderline;
+ BYTE lfStrikeOut;
+ BYTE lfCharSet;
+ BYTE lfOutPrecision;
+ BYTE lfClipPrecision;
+ BYTE lfQuality;
+ BYTE lfPitchAndFamily;
+ WCHAR lfFaceName[LF_FACESIZE];
+} LOGFONTW,*PLOGFONTW,*LPLOGFONTW;
+typedef struct tagEXTLOGFONTA {
+ LOGFONTA elfLogFont;
+ BYTE elfFullName[LF_FULLFACESIZE];
+ BYTE elfStyle[LF_FACESIZE];
+ DWORD elfVersion;
+ DWORD elfStyleSize;
+ DWORD elfMatch;
+ DWORD elfReserved;
+ BYTE elfVendorId[ELF_VENDOR_SIZE];
+ DWORD elfCulture;
+ PANOSE elfPanose;
+} EXTLOGFONTA,*PEXTLOGFONTA,*LPEXTLOGFONTA;
+typedef struct tagEXTLOGFONTW {
+ LOGFONTW elfLogFont;
+ WCHAR elfFullName[LF_FULLFACESIZE];
+ WCHAR elfStyle[LF_FACESIZE];
+ DWORD elfVersion;
+ DWORD elfStyleSize;
+ DWORD elfMatch;
+ DWORD elfReserved;
+ BYTE elfVendorId[ELF_VENDOR_SIZE];
+ DWORD elfCulture;
+ PANOSE elfPanose;
+} EXTLOGFONTW,*PEXTLOGFONTW,*LPEXTLOGFONTW;
+typedef struct tagEMREXTCREATEFONTINDIRECTW {
+ EMR emr;
+ DWORD ihFont;
+ EXTLOGFONTW elfw;
+} EMREXTCREATEFONTINDIRECTW,*PEMREXTCREATEFONTINDIRECTW;
+typedef struct tagEXTLOGPEN {
+ UINT elpPenStyle;
+ UINT elpWidth;
+ UINT elpBrushStyle;
+ COLORREF elpColor;
+ LONG elpHatch;
+ DWORD elpNumEntries;
+ DWORD elpStyleEntry[1];
+} EXTLOGPEN,*PEXTLOGPEN,*LPEXTLOGPEN;
+typedef struct tagEMREXTCREATEPEN {
+ EMR emr;
+ DWORD ihPen;
+ DWORD offBmi;
+ DWORD cbBmi;
+ DWORD offBits;
+ DWORD cbBits;
+ EXTLOGPEN elp;
+} EMREXTCREATEPEN,*PEMREXTCREATEPEN;
+typedef struct tagEMREXTFLOODFILL {
+ EMR emr;
+ POINTL ptlStart;
+ COLORREF crColor;
+ DWORD iMode;
+} EMREXTFLOODFILL,*PEMREXTFLOODFILL;
+typedef struct tagEMREXTSELECTCLIPRGN {
+ EMR emr;
+ DWORD cbRgnData;
+ DWORD iMode;
+ BYTE RgnData[1];
+} EMREXTSELECTCLIPRGN,*PEMREXTSELECTCLIPRGN;
+typedef struct tagEMRTEXT {
+ POINTL ptlReference;
+ DWORD nChars;
+ DWORD offString;
+ DWORD fOptions;
+ RECTL rcl;
+ DWORD offDx;
+} EMRTEXT,*PEMRTEXT;
+typedef struct tagEMREXTTEXTOUTA {
+ EMR emr;
+ RECTL rclBounds;
+ DWORD iGraphicsMode;
+ FLOAT exScale;
+ FLOAT eyScale;
+ EMRTEXT emrtext;
+} EMREXTTEXTOUTA,*PEMREXTTEXTOUTA,EMREXTTEXTOUTW,*PEMREXTTEXTOUTW;
+typedef struct tagEMRFILLPATH {
+ EMR emr;
+ RECTL rclBounds;
+} EMRFILLPATH,*PEMRFILLPATH,EMRSTROKEANDFILLPATH,*PEMRSTROKEANDFILLPATH,EMRSTROKEPATH,*PEMRSTROKEPATH;
+typedef struct tagEMRFILLRGN {
+ EMR emr;
+ RECTL rclBounds;
+ DWORD cbRgnData;
+ DWORD ihBrush;
+ BYTE RgnData[1];
+} EMRFILLRGN,*PEMRFILLRGN;
+typedef struct tagEMRFORMAT {
+ DWORD dSignature;
+ DWORD nVersion;
+ DWORD cbData;
+ DWORD offData;
+} EMRFORMAT;
+typedef struct tagEMRFRAMERGN {
+ EMR emr;
+ RECTL rclBounds;
+ DWORD cbRgnData;
+ DWORD ihBrush;
+ SIZEL szlStroke;
+ BYTE RgnData[1];
+} EMRFRAMERGN,*PEMRFRAMERGN;
+typedef struct tagEMRGDICOMMENT {
+ EMR emr;
+ DWORD cbData;
+ BYTE Data[1];
+} EMRGDICOMMENT,*PEMRGDICOMMENT;
+typedef struct tagEMRINVERTRGN {
+ EMR emr;
+ RECTL rclBounds;
+ DWORD cbRgnData;
+ BYTE RgnData[1];
+} EMRINVERTRGN,*PEMRINVERTRGN,EMRPAINTRGN,*PEMRPAINTRGN;
+typedef struct tagEMRLINETO {
+ EMR emr;
+ POINTL ptl;
+} EMRLINETO,*PEMRLINETO,EMRMOVETOEX,*PEMRMOVETOEX;
+typedef struct tagEMRMASKBLT {
+ EMR emr;
+ RECTL rclBounds;
+ LONG xDest;
+ LONG yDest;
+ LONG cxDest;
+ LONG cyDest;
+ DWORD dwRop;
+ LONG xSrc;
+ LONG ySrc;
+ XFORM xformSrc;
+ COLORREF crBkColorSrc;
+ DWORD iUsageSrc;
+ DWORD offBmiSrc;
+ DWORD cbBmiSrc;
+ DWORD offBitsSrc;
+ DWORD cbBitsSrc;
+ LONG xMask;
+ LONG yMask;
+ DWORD iUsageMask;
+ DWORD offBmiMask;
+ DWORD cbBmiMask;
+ DWORD offBitsMask;
+ DWORD cbBitsMask;
+} EMRMASKBLT,*PEMRMASKBLT;
+typedef struct tagEMRMODIFYWORLDTRANSFORM {
+ EMR emr;
+ XFORM xform;
+ DWORD iMode;
+} EMRMODIFYWORLDTRANSFORM,*PEMRMODIFYWORLDTRANSFORM;
+typedef struct tagEMROFFSETCLIPRGN {
+ EMR emr;
+ POINTL ptlOffset;
+} EMROFFSETCLIPRGN,*PEMROFFSETCLIPRGN;
+typedef struct tagEMRPLGBLT {
+ EMR emr;
+ RECTL rclBounds;
+ POINTL aptlDest[3];
+ LONG xSrc;
+ LONG ySrc;
+ LONG cxSrc;
+ LONG cySrc;
+ XFORM xformSrc;
+ COLORREF crBkColorSrc;
+ DWORD iUsageSrc;
+ DWORD offBmiSrc;
+ DWORD cbBmiSrc;
+ DWORD offBitsSrc;
+ DWORD cbBitsSrc;
+ LONG xMask;
+ LONG yMask;
+ DWORD iUsageMask;
+ DWORD offBmiMask;
+ DWORD cbBmiMask;
+ DWORD offBitsMask;
+ DWORD cbBitsMask;
+} EMRPLGBLT,*PEMRPLGBLT;
+typedef struct tagEMRPOLYDRAW {
+ EMR emr;
+ RECTL rclBounds;
+ DWORD cptl;
+ POINTL aptl[1];
+ BYTE abTypes[1];
+} EMRPOLYDRAW,*PEMRPOLYDRAW;
+typedef struct tagEMRPOLYDRAW16 {
+ EMR emr;
+ RECTL rclBounds;
+ DWORD cpts;
+ POINTS apts[1];
+ BYTE abTypes[1];
+} EMRPOLYDRAW16,*PEMRPOLYDRAW16;
+typedef struct tagEMRPOLYLINE {
+ EMR emr;
+ RECTL rclBounds;
+ DWORD cptl;
+ POINTL aptl[1];
+} EMRPOLYLINE,*PEMRPOLYLINE,EMRPOLYBEZIER,*PEMRPOLYBEZIER,EMRPOLYGON,*PEMRPOLYGON,EMRPOLYBEZIERTO,*PEMRPOLYBEZIERTO,EMRPOLYLINETO,*PEMRPOLYLINETO;
+typedef struct tagEMRPOLYLINE16 {
+ EMR emr;
+ RECTL rclBounds;
+ DWORD cpts;
+ POINTL apts[1];
+} EMRPOLYLINE16,*PEMRPOLYLINE16,EMRPOLYBEZIER16,*PEMRPOLYBEZIER16,EMRPOLYGON16,*PEMRPOLYGON16,EMRPOLYBEZIERTO16,*PEMRPOLYBEZIERTO16,EMRPOLYLINETO16,*PEMRPOLYLINETO16;
+typedef struct tagEMRPOLYPOLYLINE {
+ EMR emr;
+ RECTL rclBounds;
+ DWORD nPolys;
+ DWORD cptl;
+ DWORD aPolyCounts[1];
+ POINTL aptl[1];
+} EMRPOLYPOLYLINE,*PEMRPOLYPOLYLINE,EMRPOLYPOLYGON,*PEMRPOLYPOLYGON;
+typedef struct tagEMRPOLYPOLYLINE16 {
+ EMR emr;
+ RECTL rclBounds;
+ DWORD nPolys;
+ DWORD cpts;
+ DWORD aPolyCounts[1];
+ POINTS apts[1];
+} EMRPOLYPOLYLINE16,*PEMRPOLYPOLYLINE16,EMRPOLYPOLYGON16,*PEMRPOLYPOLYGON16;
+typedef struct tagEMRPOLYTEXTOUTA {
+ EMR emr;
+ RECTL rclBounds;
+ DWORD iGraphicsMode;
+ FLOAT exScale;
+ FLOAT eyScale;
+ LONG cStrings;
+ EMRTEXT aemrtext[1];
+} EMRPOLYTEXTOUTA,*PEMRPOLYTEXTOUTA,EMRPOLYTEXTOUTW,*PEMRPOLYTEXTOUTW;
+typedef struct tagEMRRESIZEPALETTE {
+ EMR emr;
+ DWORD ihPal;
+ DWORD cEntries;
+} EMRRESIZEPALETTE,*PEMRRESIZEPALETTE;
+typedef struct tagEMRRESTOREDC {
+ EMR emr;
+ LONG iRelative;
+} EMRRESTOREDC,*PEMRRESTOREDC;
+typedef struct tagEMRROUNDRECT {
+ EMR emr;
+ RECTL rclBox;
+ SIZEL szlCorner;
+} EMRROUNDRECT,*PEMRROUNDRECT;
+typedef struct tagEMRSCALEVIEWPORTEXTEX {
+ EMR emr;
+ LONG xNum;
+ LONG xDenom;
+ LONG yNum;
+ LONG yDenom;
+} EMRSCALEVIEWPORTEXTEX,*PEMRSCALEVIEWPORTEXTEX,EMRSCALEWINDOWEXTEX,*PEMRSCALEWINDOWEXTEX;
+typedef struct tagEMRSELECTCOLORSPACE {
+ EMR emr;
+ DWORD ihCS;
+} EMRSELECTCOLORSPACE,*PEMRSELECTCOLORSPACE,EMRDELETECOLORSPACE,*PEMRDELETECOLORSPACE;
+typedef struct tagEMRSELECTOBJECT {
+ EMR emr;
+ DWORD ihObject;
+} EMRSELECTOBJECT,*PEMRSELECTOBJECT,EMRDELETEOBJECT,*PEMRDELETEOBJECT;
+typedef struct tagEMRSELECTPALETTE {
+ EMR emr;
+ DWORD ihPal;
+} EMRSELECTPALETTE,*PEMRSELECTPALETTE;
+typedef struct tagEMRSETARCDIRECTION {
+ EMR emr;
+ DWORD iArcDirection;
+} EMRSETARCDIRECTION,*PEMRSETARCDIRECTION;
+typedef struct tagEMRSETTEXTCOLOR {
+ EMR emr;
+ COLORREF crColor;
+} EMRSETBKCOLOR,*PEMRSETBKCOLOR,EMRSETTEXTCOLOR,*PEMRSETTEXTCOLOR;
+typedef struct tagEMRSETCOLORADJUSTMENT {
+ EMR emr;
+ COLORADJUSTMENT ColorAdjustment;
+} EMRSETCOLORADJUSTMENT,*PEMRSETCOLORADJUSTMENT;
+typedef struct tagEMRSETDIBITSTODEVICE {
+ EMR emr;
+ RECTL rclBounds;
+ LONG xDest;
+ LONG yDest;
+ LONG xSrc;
+ LONG ySrc;
+ LONG cxSrc;
+ LONG cySrc;
+ DWORD offBmiSrc;
+ DWORD cbBmiSrc;
+ DWORD offBitsSrc;
+ DWORD cbBitsSrc;
+ DWORD iUsageSrc;
+ DWORD iStartScan;
+ DWORD cScans;
+} EMRSETDIBITSTODEVICE,*PEMRSETDIBITSTODEVICE;
+typedef struct tagEMRSETMAPPERFLAGS {
+ EMR emr;
+ DWORD dwFlags;
+} EMRSETMAPPERFLAGS,*PEMRSETMAPPERFLAGS;
+typedef struct tagEMRSETMITERLIMIT {
+ EMR emr;
+ FLOAT eMiterLimit;
+} EMRSETMITERLIMIT,*PEMRSETMITERLIMIT;
+typedef struct tagEMRSETPALETTEENTRIES {
+ EMR emr;
+ DWORD ihPal;
+ DWORD iStart;
+ DWORD cEntries;
+ PALETTEENTRY aPalEntries[1];
+} EMRSETPALETTEENTRIES,*PEMRSETPALETTEENTRIES;
+typedef struct tagEMRSETPIXELV {
+ EMR emr;
+ POINTL ptlPixel;
+ COLORREF crColor;
+} EMRSETPIXELV,*PEMRSETPIXELV;
+typedef struct tagEMRSETVIEWPORTEXTEX {
+ EMR emr;
+ SIZEL szlExtent;
+} EMRSETVIEWPORTEXTEX,*PEMRSETVIEWPORTEXTEX,EMRSETWINDOWEXTEX,*PEMRSETWINDOWEXTEX;
+typedef struct tagEMRSETVIEWPORTORGEX {
+ EMR emr;
+ POINTL ptlOrigin;
+} EMRSETVIEWPORTORGEX,*PEMRSETVIEWPORTORGEX,EMRSETWINDOWORGEX,*PEMRSETWINDOWORGEX,EMRSETBRUSHORGEX,*PEMRSETBRUSHORGEX;
+typedef struct tagEMRSETWORLDTRANSFORM {
+ EMR emr;
+ XFORM xform;
+} EMRSETWORLDTRANSFORM,*PEMRSETWORLDTRANSFORM;
+typedef struct tagEMRSTRETCHBLT {
+ EMR emr;
+ RECTL rclBounds;
+ LONG xDest;
+ LONG yDest;
+ LONG cxDest;
+ LONG cyDest;
+ DWORD dwRop;
+ LONG xSrc;
+ LONG ySrc;
+ XFORM xformSrc;
+ COLORREF crBkColorSrc;
+ DWORD iUsageSrc;
+ DWORD offBmiSrc;
+ DWORD cbBmiSrc;
+ DWORD offBitsSrc;
+ DWORD cbBitsSrc;
+ LONG cxSrc;
+ LONG cySrc;
+} EMRSTRETCHBLT,*PEMRSTRETCHBLT;
+typedef struct tagEMRSTRETCHDIBITS {
+ EMR emr;
+ RECTL rclBounds;
+ LONG xDest;
+ LONG yDest;
+ LONG xSrc;
+ LONG ySrc;
+ LONG cxSrc;
+ LONG cySrc;
+ DWORD offBmiSrc;
+ DWORD cbBmiSrc;
+ DWORD offBitsSrc;
+ DWORD cbBitsSrc;
+ DWORD iUsageSrc;
+ DWORD dwRop;
+ LONG cxDest;
+ LONG cyDest;
+} EMRSTRETCHDIBITS,*PEMRSTRETCHDIBITS;
+typedef struct tagABORTPATH {
+ EMR emr;
+} EMRABORTPATH,*PEMRABORTPATH,EMRBEGINPATH,*PEMRBEGINPATH,EMRENDPATH,*PEMRENDPATH,EMRCLOSEFIGURE,*PEMRCLOSEFIGURE,EMRFLATTENPATH,*PEMRFLATTENPATH,EMRWIDENPATH,*PEMRWIDENPATH,EMRSETMETARGN,*PEMRSETMETARGN,EMRSAVEDC,*PEMRSAVEDC,EMRREALIZEPALETTE,*PEMRREALIZEPALETTE;
+typedef struct tagEMRSELECTCLIPPATH {
+ EMR emr;
+ DWORD iMode;
+} EMRSELECTCLIPPATH,*PEMRSELECTCLIPPATH,EMRSETBKMODE,*PEMRSETBKMODE,EMRSETMAPMODE,*PEMRSETMAPMODE,EMRSETPOLYFILLMODE,*PEMRSETPOLYFILLMODE,EMRSETROP2,*PEMRSETROP2,EMRSETSTRETCHBLTMODE,*PEMRSETSTRETCHBLTMODE,EMRSETTEXTALIGN,*PEMRSETTEXTALIGN,EMRENABLEICM,*PEMRENABLEICM;
+#pragma pack(push,2)
+typedef struct tagMETAHEADER {
+ WORD mtType;
+ WORD mtHeaderSize;
+ WORD mtVersion;
+ DWORD mtSize;
+ WORD mtNoObjects;
+ DWORD mtMaxRecord;
+ WORD mtNoParameters;
+} METAHEADER,*PMETAHEADER,*LPMETAHEADER;
+#pragma pack(pop)
+typedef struct tagENHMETAHEADER {
+ DWORD iType;
+ DWORD nSize;
+ RECTL rclBounds;
+ RECTL rclFrame;
+ DWORD dSignature;
+ DWORD nVersion;
+ DWORD nBytes;
+ DWORD nRecords;
+ WORD nHandles;
+ WORD sReserved;
+ DWORD nDescription;
+ DWORD offDescription;
+ DWORD nPalEntries;
+ SIZEL szlDevice;
+ SIZEL szlMillimeters;
+#if (WINVER >= 0x0400)
+ DWORD cbPixelFormat;
+ DWORD offPixelFormat;
+ DWORD bOpenGL;
+#endif
+#if (WINVER >= 0x0500)
+ SIZEL szlMicrometers;
+#endif
+} ENHMETAHEADER,*LPENHMETAHEADER;
+typedef struct tagMETARECORD {
+ DWORD rdSize;
+ WORD rdFunction;
+ WORD rdParm[1];
+} METARECORD,*PMETARECORD,*LPMETARECORD;
+typedef struct tagENHMETARECORD {
+ DWORD iType;
+ DWORD nSize;
+ DWORD dParm[1];
+} ENHMETARECORD,*LPENHMETARECORD;
+typedef struct tagHANDLETABLE {
+ HGDIOBJ objectHandle[1];
+} HANDLETABLE,*LPHANDLETABLE;
+typedef struct tagTEXTMETRICA {
+ LONG tmHeight;
+ LONG tmAscent;
+ LONG tmDescent;
+ LONG tmInternalLeading;
+ LONG tmExternalLeading;
+ LONG tmAveCharWidth;
+ LONG tmMaxCharWidth;
+ LONG tmWeight;
+ LONG tmOverhang;
+ LONG tmDigitizedAspectX;
+ LONG tmDigitizedAspectY;
+ BYTE tmFirstChar;
+ BYTE tmLastChar;
+ BYTE tmDefaultChar;
+ BYTE tmBreakChar;
+ BYTE tmItalic;
+ BYTE tmUnderlined;
+ BYTE tmStruckOut;
+ BYTE tmPitchAndFamily;
+ BYTE tmCharSet;
+} TEXTMETRICA,*PTEXTMETRICA,*LPTEXTMETRICA;
+typedef struct tagTEXTMETRICW {
+ LONG tmHeight;
+ LONG tmAscent;
+ LONG tmDescent;
+ LONG tmInternalLeading;
+ LONG tmExternalLeading;
+ LONG tmAveCharWidth;
+ LONG tmMaxCharWidth;
+ LONG tmWeight;
+ LONG tmOverhang;
+ LONG tmDigitizedAspectX;
+ LONG tmDigitizedAspectY;
+ WCHAR tmFirstChar;
+ WCHAR tmLastChar;
+ WCHAR tmDefaultChar;
+ WCHAR tmBreakChar;
+ BYTE tmItalic;
+ BYTE tmUnderlined;
+ BYTE tmStruckOut;
+ BYTE tmPitchAndFamily;
+ BYTE tmCharSet;
+} TEXTMETRICW,*PTEXTMETRICW,*LPTEXTMETRICW;
+typedef struct _RGNDATAHEADER {
+ DWORD dwSize;
+ DWORD iType;
+ DWORD nCount;
+ DWORD nRgnSize;
+ RECT rcBound;
+} RGNDATAHEADER;
+typedef struct _RGNDATA {
+ RGNDATAHEADER rdh;
+ char Buffer[1];
+} RGNDATA,*PRGNDATA, *LPRGNDATA;
+/* for GetRandomRgn */
+#define SYSRGN 4
+typedef struct tagGCP_RESULTSA {
+ DWORD lStructSize;
+ LPSTR lpOutString;
+ UINT *lpOrder;
+ INT *lpDx;
+ INT *lpCaretPos;
+ LPSTR lpClass;
+ LPWSTR lpGlyphs;
+ UINT nGlyphs;
+ UINT nMaxFit;
+} GCP_RESULTSA,*LPGCP_RESULTSA;
+typedef struct tagGCP_RESULTSW {
+ DWORD lStructSize;
+ LPWSTR lpOutString;
+ UINT *lpOrder;
+ INT *lpDx;
+ INT *lpCaretPos;
+ LPWSTR lpClass;
+ LPWSTR lpGlyphs;
+ UINT nGlyphs;
+ UINT nMaxFit;
+} GCP_RESULTSW,*LPGCP_RESULTSW;
+typedef struct _GLYPHMETRICS {
+ UINT gmBlackBoxX;
+ UINT gmBlackBoxY;
+ POINT gmptGlyphOrigin;
+ short gmCellIncX;
+ short gmCellIncY;
+} GLYPHMETRICS,*LPGLYPHMETRICS;
+#if (_WIN32_WINNT >= 0x0500)
+typedef struct tagWCRANGE
+{
+ WCHAR wcLow;
+ USHORT cGlyphs;
+} WCRANGE, *PWCRANGE, *LPWCRANGE;
+typedef struct tagGLYPHSET
+{
+ DWORD cbThis;
+ DWORD flAccel;
+ DWORD cGlyphsSupported;
+ DWORD cRanges;
+ WCRANGE ranges[1];
+} GLYPHSET, *PGLYPHSET, *LPGLYPHSET;
+#endif
+typedef struct tagKERNINGPAIR {
+ WORD wFirst;
+ WORD wSecond;
+ int iKernAmount;
+} KERNINGPAIR,*LPKERNINGPAIR;
+typedef struct _FIXED {
+ WORD fract;
+ short value;
+} FIXED;
+typedef struct _MAT2 {
+ FIXED eM11;
+ FIXED eM12;
+ FIXED eM21;
+ FIXED eM22;
+} MAT2,*LPMAT2;
+typedef struct _OUTLINETEXTMETRICA {
+ UINT otmSize;
+ TEXTMETRICA otmTextMetrics;
+ BYTE otmFiller;
+ PANOSE otmPanoseNumber;
+ UINT otmfsSelection;
+ UINT otmfsType;
+ int otmsCharSlopeRise;
+ int otmsCharSlopeRun;
+ int otmItalicAngle;
+ UINT otmEMSquare;
+ int otmAscent;
+ int otmDescent;
+ UINT otmLineGap;
+ UINT otmsCapEmHeight;
+ UINT otmsXHeight;
+ RECT otmrcFontBox;
+ int otmMacAscent;
+ int otmMacDescent;
+ UINT otmMacLineGap;
+ UINT otmusMinimumPPEM;
+ POINT otmptSubscriptSize;
+ POINT otmptSubscriptOffset;
+ POINT otmptSuperscriptSize;
+ POINT otmptSuperscriptOffset;
+ UINT otmsStrikeoutSize;
+ int otmsStrikeoutPosition;
+ int otmsUnderscoreSize;
+ int otmsUnderscorePosition;
+ PSTR otmpFamilyName;
+ PSTR otmpFaceName;
+ PSTR otmpStyleName;
+ PSTR otmpFullName;
+} OUTLINETEXTMETRICA,*POUTLINETEXTMETRICA,*LPOUTLINETEXTMETRICA;
+typedef struct _OUTLINETEXTMETRICW {
+ UINT otmSize;
+ TEXTMETRICW otmTextMetrics;
+ BYTE otmFiller;
+ PANOSE otmPanoseNumber;
+ UINT otmfsSelection;
+ UINT otmfsType;
+ int otmsCharSlopeRise;
+ int otmsCharSlopeRun;
+ int otmItalicAngle;
+ UINT otmEMSquare;
+ int otmAscent;
+ int otmDescent;
+ UINT otmLineGap;
+ UINT otmsCapEmHeight;
+ UINT otmsXHeight;
+ RECT otmrcFontBox;
+ int otmMacAscent;
+ int otmMacDescent;
+ UINT otmMacLineGap;
+ UINT otmusMinimumPPEM;
+ POINT otmptSubscriptSize;
+ POINT otmptSubscriptOffset;
+ POINT otmptSuperscriptSize;
+ POINT otmptSuperscriptOffset;
+ UINT otmsStrikeoutSize;
+ int otmsStrikeoutPosition;
+ int otmsUnderscoreSize;
+ int otmsUnderscorePosition;
+ PSTR otmpFamilyName;
+ PSTR otmpFaceName;
+ PSTR otmpStyleName;
+ PSTR otmpFullName;
+} OUTLINETEXTMETRICW,*POUTLINETEXTMETRICW,*LPOUTLINETEXTMETRICW;
+typedef struct _RASTERIZER_STATUS {
+ short nSize;
+ short wFlags;
+ short nLanguageID;
+} RASTERIZER_STATUS,*LPRASTERIZER_STATUS;
+typedef struct _POLYTEXTA {
+ int x;
+ int y;
+ UINT n;
+ LPCSTR lpstr;
+ UINT uiFlags;
+ RECT rcl;
+ int *pdx;
+} POLYTEXTA, *PPOLYTEXTA, *LPPOLYTEXTA;
+typedef struct _POLYTEXTW {
+ int x;
+ int y;
+ UINT n;
+ LPCWSTR lpstr;
+ UINT uiFlags;
+ RECT rcl;
+ int *pdx;
+} POLYTEXTW, *PPOLYTEXTW, *LPPOLYTEXTW;
+typedef struct tagPIXELFORMATDESCRIPTOR {
+ WORD nSize;
+ WORD nVersion;
+ DWORD dwFlags;
+ BYTE 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;
+ DWORD dwLayerMask;
+ DWORD dwVisibleMask;
+ DWORD dwDamageMask;
+} PIXELFORMATDESCRIPTOR,*PPIXELFORMATDESCRIPTOR,*LPPIXELFORMATDESCRIPTOR;
+typedef struct tagMETAFILEPICT {
+ LONG mm;
+ LONG xExt;
+ LONG yExt;
+ HMETAFILE hMF;
+} METAFILEPICT,*LPMETAFILEPICT;
+typedef struct tagLOCALESIGNATURE {
+ DWORD lsUsb[4];
+ DWORD lsCsbDefault[2];
+ DWORD lsCsbSupported[2];
+} LOCALESIGNATURE,*PLOCALESIGNATURE,*LPLOCALESIGNATURE;
+typedef LONG LCSTYPE;
+#pragma pack(push,4)
+typedef struct tagNEWTEXTMETRICA {
+ LONG tmHeight;
+ LONG tmAscent;
+ LONG tmDescent;
+ LONG tmInternalLeading;
+ LONG tmExternalLeading;
+ LONG tmAveCharWidth;
+ LONG tmMaxCharWidth;
+ LONG tmWeight;
+ LONG tmOverhang;
+ LONG tmDigitizedAspectX;
+ LONG tmDigitizedAspectY;
+ BYTE tmFirstChar;
+ BYTE tmLastChar;
+ BYTE tmDefaultChar;
+ BYTE tmBreakChar;
+ BYTE tmItalic;
+ BYTE tmUnderlined;
+ BYTE tmStruckOut;
+ BYTE tmPitchAndFamily;
+ BYTE tmCharSet;
+ DWORD ntmFlags;
+ UINT ntmSizeEM;
+ UINT ntmCellHeight;
+ UINT ntmAvgWidth;
+} NEWTEXTMETRICA,*PNEWTEXTMETRICA,*LPNEWTEXTMETRICA;
+typedef struct tagNEWTEXTMETRICW {
+ LONG tmHeight;
+ LONG tmAscent;
+ LONG tmDescent;
+ LONG tmInternalLeading;
+ LONG tmExternalLeading;
+ LONG tmAveCharWidth;
+ LONG tmMaxCharWidth;
+ LONG tmWeight;
+ LONG tmOverhang;
+ LONG tmDigitizedAspectX;
+ LONG tmDigitizedAspectY;
+ WCHAR tmFirstChar;
+ WCHAR tmLastChar;
+ WCHAR tmDefaultChar;
+ WCHAR tmBreakChar;
+ BYTE tmItalic;
+ BYTE tmUnderlined;
+ BYTE tmStruckOut;
+ BYTE tmPitchAndFamily;
+ BYTE tmCharSet;
+ DWORD ntmFlags;
+ UINT ntmSizeEM;
+ UINT ntmCellHeight;
+ UINT ntmAvgWidth;
+} NEWTEXTMETRICW,*PNEWTEXTMETRICW,*LPNEWTEXTMETRICW;
+#pragma pack(pop)
+typedef struct tagNEWTEXTMETRICEXA {
+ NEWTEXTMETRICA ntmTm;
+ FONTSIGNATURE ntmFontSig;
+} NEWTEXTMETRICEXA;
+typedef struct tagNEWTEXTMETRICEXW {
+ NEWTEXTMETRICW ntmTm;
+ FONTSIGNATURE ntmFontSig;
+} NEWTEXTMETRICEXW;
+typedef struct tagPELARRAY {
+ LONG paXCount;
+ LONG paYCount;
+ LONG paXExt;
+ LONG paYExt;
+ BYTE paRGBs;
+} PELARRAY,*PPELARRAY,*LPPELARRAY;
+typedef struct tagENUMLOGFONTA {
+ LOGFONTA elfLogFont;
+ BYTE elfFullName[LF_FULLFACESIZE];
+ BYTE elfStyle[LF_FACESIZE];
+} ENUMLOGFONTA,*LPENUMLOGFONTA;
+typedef struct tagENUMLOGFONTW {
+ LOGFONTW elfLogFont;
+ WCHAR elfFullName[LF_FULLFACESIZE];
+ WCHAR elfStyle[LF_FACESIZE];
+} ENUMLOGFONTW,*LPENUMLOGFONTW;
+typedef struct tagENUMLOGFONTEXA {
+ LOGFONTA elfLogFont;
+ BYTE elfFullName[LF_FULLFACESIZE];
+ BYTE elfStyle[LF_FACESIZE];
+ BYTE elfScript[LF_FACESIZE];
+} ENUMLOGFONTEXA,*LPENUMLOGFONTEXA;
+typedef struct tagENUMLOGFONTEXW {
+ LOGFONTW elfLogFont;
+ WCHAR elfFullName[LF_FULLFACESIZE];
+ WCHAR elfStyle[LF_FACESIZE];
+ WCHAR elfScript[LF_FACESIZE];
+} ENUMLOGFONTEXW,*LPENUMLOGFONTEXW;
+typedef struct tagPOINTFX {
+ FIXED x;
+ FIXED y;
+} POINTFX,*LPPOINTFX;
+typedef struct tagTTPOLYCURVE {
+ WORD wType;
+ WORD cpfx;
+ POINTFX apfx[1];
+} TTPOLYCURVE,*LPTTPOLYCURVE;
+typedef struct tagTTPOLYGONHEADER {
+ DWORD cb;
+ DWORD dwType;
+ POINTFX pfxStart;
+} TTPOLYGONHEADER,*LPTTPOLYGONHEADER;
+typedef struct _POINTFLOAT {
+ FLOAT x;
+ FLOAT y;
+} POINTFLOAT,*PPOINTFLOAT;
+typedef struct _GLYPHMETRICSFLOAT {
+ FLOAT gmfBlackBoxX;
+ FLOAT gmfBlackBoxY;
+ POINTFLOAT gmfptGlyphOrigin;
+ FLOAT gmfCellIncX;
+ FLOAT gmfCellIncY;
+} GLYPHMETRICSFLOAT,*PGLYPHMETRICSFLOAT,*LPGLYPHMETRICSFLOAT;
+typedef struct tagLAYERPLANEDESCRIPTOR {
+ WORD nSize;
+ WORD nVersion;
+ DWORD dwFlags;
+ BYTE 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;
+ COLORREF crTransparent;
+} LAYERPLANEDESCRIPTOR,*PLAYERPLANEDESCRIPTOR,*LPLAYERPLANEDESCRIPTOR;
+typedef struct _BLENDFUNCTION {
+ BYTE BlendOp;
+ BYTE BlendFlags;
+ BYTE SourceConstantAlpha;
+ BYTE AlphaFormat;
+} BLENDFUNCTION,*PBLENDFUNCTION,*LPBLENDFUNCTION;
+#define MM_MAX_NUMAXES 16
+typedef struct _DESIGNVECTOR {
+ DWORD dvReserved;
+ DWORD dvNumAxes;
+ LONG dvValues[MM_MAX_NUMAXES];
+} DESIGNVECTOR, *PDESIGNVECTOR, FAR *LPDESIGNVECTOR;
+#if _WIN32_WINNT >= 0x0500
+typedef struct tagENUMLOGFONTEXDVA
+{
+ ENUMLOGFONTEXA elfEnumLogfontEx;
+ DESIGNVECTOR elfDesignVector;
+} ENUMLOGFONTEXDVA, *PENUMLOGFONTEXDVA, *LPENUMLOGFONTEXDVA;
+typedef struct tagENUMLOGFONTEXDVW
+{
+ ENUMLOGFONTEXW elfEnumLogfontEx;
+ DESIGNVECTOR elfDesignVector;
+} ENUMLOGFONTEXDVW, *PENUMLOGFONTEXDVW, *LPENUMLOGFONTEXDVW;
+#endif /* _WIN32_WINNT >= 0x0500 */
+typedef USHORT COLOR16;
+typedef struct _TRIVERTEX {
+ LONG x;
+ LONG y;
+ COLOR16 Red;
+ COLOR16 Green;
+ COLOR16 Blue;
+ COLOR16 Alpha;
+} TRIVERTEX, *PTRIVERTEX, *LPTRIVERTEX;
+typedef struct _GRADIENT_TRIANGLE {
+ ULONG Vertex1;
+ ULONG Vertex2;
+ ULONG Vertex3;
+} GRADIENT_TRIANGLE,*PGRADIENT_TRIANGLE,*LPGRADIENT_TRIANGLE;
+typedef struct _GRADIENT_RECT {
+ ULONG UpperLeft;
+ ULONG LowerRight;
+}GRADIENT_RECT,*PGRADIENT_RECT,*LPGRADIENT_RECT;
+typedef struct _DISPLAY_DEVICEA {
+ DWORD cb;
+ CHAR DeviceName[32];
+ CHAR DeviceString[128];
+ DWORD StateFlags;
+ CHAR DeviceID[128];
+ CHAR DeviceKey[128];
+} DISPLAY_DEVICEA, *PDISPLAY_DEVICEA, *LPDISPLAY_DEVICEA;
+typedef struct _DISPLAY_DEVICEW {
+ DWORD cb;
+ WCHAR DeviceName[32];
+ WCHAR DeviceString[128];
+ DWORD StateFlags;
+ WCHAR DeviceID[128];
+ WCHAR DeviceKey[128];
+} DISPLAY_DEVICEW, *PDISPLAY_DEVICEW, *LPDISPLAY_DEVICEW;
+
+typedef BOOL (CALLBACK *ABORTPROC)(HDC,int);
+typedef int (CALLBACK *MFENUMPROC)(HDC,HANDLETABLE*,METARECORD*,int,LPARAM);
+typedef int (CALLBACK *ENHMFENUMPROC)(HDC,HANDLETABLE*,const ENHMETARECORD*,int,LPARAM);
+typedef int (CALLBACK *OLDFONTENUMPROCA)(const LOGFONTA*,const TEXTMETRICA*,DWORD,LPARAM);
+typedef int (CALLBACK *OLDFONTENUMPROCW)(const LOGFONTW*,const TEXTMETRICW*,DWORD,LPARAM);
+typedef OLDFONTENUMPROCA FONTENUMPROCA;
+typedef OLDFONTENUMPROCW FONTENUMPROCW;
+typedef int (CALLBACK *ICMENUMPROCA)(LPSTR,LPARAM);
+typedef int (CALLBACK *ICMENUMPROCW)(LPWSTR,LPARAM);
+typedef void (CALLBACK *GOBJENUMPROC)(LPVOID,LPARAM);
+typedef void (CALLBACK *LINEDDAPROC)(int,int,LPARAM);
+typedef UINT (CALLBACK *LPFNDEVMODE)(HWND,HMODULE,LPDEVMODEA,LPSTR,LPSTR,LPDEVMODEA,LPSTR,UINT);
+typedef DWORD (CALLBACK *LPFNDEVCAPS)(LPSTR,LPSTR,UINT,LPSTR,LPDEVMODEA);
+
+#define MAKEPOINTS(l) (*((POINTS*)&(l)))
+#define MAKEROP4(f,b) (DWORD)((((b)<<8)&0xFF000000)|(f))
+
+#define GetCValue(cmyk) ((BYTE)(cmyk))
+#define GetMValue(cmyk) ((BYTE)((cmyk)>> 8))
+#define GetYValue(cmyk) ((BYTE)((cmyk)>>16))
+#define GetKValue(cmyk) ((BYTE)((cmyk)>>24))
+#define CMYK(c,m,y,k) ((COLORREF)((BYTE)(k)|((BYTE)(y)<<8)|((BYTE)(m)<<16)|((BYTE)(c)<<24)))
+
+#define GetRValue(c) ((BYTE)(c))
+#define GetGValue(c) ((BYTE)(((WORD)(c))>>8))
+#define GetBValue(c) ((BYTE)((c)>>16))
+#define RGB(r,g,b) ((COLORREF)((BYTE)(r)|((BYTE)(g) << 8)|((BYTE)(b) << 16)))
+
+#define PALETTEINDEX(i) ((0x01000000|(COLORREF)(WORD)(i)))
+#define PALETTERGB(r,g,b) (0x02000000|RGB(r,g,b))
+
+WINGDIAPI int WINAPI AbortDoc(HDC);
+WINGDIAPI BOOL WINAPI AbortPath(HDC);
+WINGDIAPI int WINAPI AddFontResourceA(LPCSTR);
+WINGDIAPI int WINAPI AddFontResourceW(LPCWSTR);
+#if (_WIN32_WINNT >= 0x0500)
+WINGDIAPI HANDLE WINAPI AddFontMemResourceEx(PVOID,DWORD,PVOID,DWORD *);
+WINGDIAPI int WINAPI AddFontResourceExA(LPCSTR,DWORD,PVOID);
+WINGDIAPI int WINAPI AddFontResourceExW(LPCWSTR,DWORD,PVOID);
+#endif
+WINGDIAPI BOOL WINAPI AngleArc(HDC,int,int,DWORD,FLOAT,FLOAT);
+WINGDIAPI BOOL WINAPI AnimatePalette(HPALETTE,UINT,UINT,const PALETTEENTRY*);
+WINGDIAPI BOOL WINAPI Arc(HDC,int,int,int,int,int,int,int,int);
+WINGDIAPI BOOL WINAPI ArcTo(HDC,int,int,int,int,int,int,int,int);
+WINGDIAPI BOOL WINAPI BeginPath(HDC);
+WINGDIAPI BOOL WINAPI BitBlt(HDC,int,int,int,int,HDC,int,int,DWORD);
+WINGDIAPI BOOL WINAPI CancelDC(HDC);
+WINGDIAPI BOOL WINAPI CheckColorsInGamut(HDC,PVOID,PVOID,DWORD);
+WINGDIAPI BOOL WINAPI Chord(HDC,int,int,int,int,int,int,int,int);
+WINGDIAPI int WINAPI ChoosePixelFormat(HDC,CONST PIXELFORMATDESCRIPTOR*);
+WINGDIAPI HENHMETAFILE WINAPI CloseEnhMetaFile(HDC);
+WINGDIAPI BOOL WINAPI CloseFigure(HDC);
+WINGDIAPI HMETAFILE WINAPI CloseMetaFile(HDC);
+#if (_WIN32_WINDOWS >= 0x0410 || _WIN32_WINNT >= 0x0500)
+WINGDIAPI BOOL WINAPI ColorCorrectPalette(HDC,HPALETTE,DWORD,DWORD);
+WINGDIAPI BOOL WINAPI ColorMatchToTarget(HDC,HDC,DWORD);
+#endif
+WINGDIAPI int WINAPI CombineRgn(HRGN,HRGN,HRGN,int);
+WINGDIAPI BOOL WINAPI CombineTransform(LPXFORM,const XFORM*,const XFORM*);
+WINGDIAPI HENHMETAFILE WINAPI CopyEnhMetaFileA(HENHMETAFILE,LPCSTR);
+WINGDIAPI HENHMETAFILE WINAPI CopyEnhMetaFileW(HENHMETAFILE,LPCWSTR);
+WINGDIAPI HMETAFILE WINAPI CopyMetaFileA(HMETAFILE,LPCSTR);
+WINGDIAPI HMETAFILE WINAPI CopyMetaFileW(HMETAFILE,LPCWSTR);
+WINGDIAPI HBITMAP WINAPI CreateBitmap(int,int,UINT,UINT,PCVOID);
+WINGDIAPI HBITMAP WINAPI CreateBitmapIndirect(const BITMAP*);
+WINGDIAPI HBRUSH WINAPI CreateBrushIndirect(const LOGBRUSH*);
+WINGDIAPI HCOLORSPACE WINAPI CreateColorSpaceA(LPLOGCOLORSPACEA);
+WINGDIAPI HCOLORSPACE WINAPI CreateColorSpaceW(LPLOGCOLORSPACEW);
+WINGDIAPI HBITMAP WINAPI CreateCompatibleBitmap(HDC,int,int);
+WINGDIAPI HDC WINAPI CreateCompatibleDC(HDC);
+WINGDIAPI HDC WINAPI CreateDCA(LPCSTR,LPCSTR,LPCSTR,const DEVMODEA*);
+WINGDIAPI HDC WINAPI CreateDCW(LPCWSTR,LPCWSTR,LPCWSTR,const DEVMODEW*);
+WINGDIAPI HBITMAP WINAPI CreateDIBitmap(HDC,const BITMAPINFOHEADER*,DWORD,PCVOID,const BITMAPINFO*,UINT);
+WINGDIAPI HBRUSH WINAPI CreateDIBPatternBrush(HGLOBAL,UINT);
+WINGDIAPI HBRUSH WINAPI CreateDIBPatternBrushPt(PCVOID,UINT);
+WINGDIAPI HBITMAP WINAPI CreateDIBSection(HDC,const BITMAPINFO*,UINT,void**,HANDLE,DWORD);
+WINGDIAPI HBITMAP WINAPI CreateDiscardableBitmap(HDC,int,int);
+WINGDIAPI HRGN WINAPI CreateEllipticRgn(int,int,int,int);
+WINGDIAPI HRGN WINAPI CreateEllipticRgnIndirect(LPCRECT);
+WINGDIAPI HDC WINAPI CreateEnhMetaFileA(HDC,LPCSTR,LPCRECT,LPCSTR);
+WINGDIAPI HDC WINAPI CreateEnhMetaFileW(HDC,LPCWSTR,LPCRECT,LPCWSTR);
+WINGDIAPI HFONT WINAPI CreateFontA(int,int,int,int,int,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,LPCSTR);
+WINGDIAPI HFONT WINAPI CreateFontW(int,int,int,int,int,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,LPCWSTR);
+WINGDIAPI HFONT WINAPI CreateFontIndirectA(const LOGFONTA*);
+WINGDIAPI HFONT WINAPI CreateFontIndirectW(const LOGFONTW*);
+WINGDIAPI HPALETTE WINAPI CreateHalftonePalette(HDC);
+WINGDIAPI HBRUSH WINAPI CreateHatchBrush(int,COLORREF);
+WINGDIAPI HDC WINAPI CreateICA(LPCSTR,LPCSTR,LPCSTR,const DEVMODEA*);
+WINGDIAPI HDC WINAPI CreateICW(LPCWSTR,LPCWSTR,LPCWSTR,const DEVMODEW*);
+WINGDIAPI HDC WINAPI CreateMetaFileA(LPCSTR);
+WINGDIAPI HDC WINAPI CreateMetaFileW(LPCWSTR);
+WINGDIAPI HPALETTE WINAPI CreatePalette(const LOGPALETTE*);
+WINGDIAPI HBRUSH WINAPI CreatePatternBrush(HBITMAP);
+WINGDIAPI HPEN WINAPI CreatePen(int,int,COLORREF);
+WINGDIAPI HPEN WINAPI CreatePenIndirect(const LOGPEN*);
+WINGDIAPI HRGN WINAPI CreatePolygonRgn(const POINT*,int,int);
+WINGDIAPI HRGN WINAPI CreatePolyPolygonRgn(const POINT*,const INT*,int,int);
+WINGDIAPI HRGN WINAPI CreateRectRgn(int,int,int,int);
+WINGDIAPI HRGN WINAPI CreateRectRgnIndirect(LPCRECT);
+WINGDIAPI HRGN WINAPI CreateRoundRectRgn(int,int,int,int,int,int);
+WINGDIAPI BOOL WINAPI CreateScalableFontResourceA(DWORD,LPCSTR,LPCSTR,LPCSTR);
+WINGDIAPI BOOL WINAPI CreateScalableFontResourceW(DWORD,LPCWSTR,LPCWSTR,LPCWSTR);
+WINGDIAPI HBRUSH WINAPI CreateSolidBrush(COLORREF);
+WINGDIAPI BOOL WINAPI DeleteColorSpace(HCOLORSPACE);
+WINGDIAPI BOOL WINAPI DeleteDC(HDC);
+WINGDIAPI BOOL WINAPI DeleteEnhMetaFile(HENHMETAFILE);
+WINGDIAPI BOOL WINAPI DeleteMetaFile(HMETAFILE);
+WINGDIAPI BOOL WINAPI DeleteObject(HGDIOBJ);
+WINGDIAPI int WINAPI DescribePixelFormat(HDC,int,UINT,LPPIXELFORMATDESCRIPTOR);
+WINGDIAPI DWORD WINAPI DeviceCapabilitiesA(LPCSTR,LPCSTR,WORD,LPSTR,const DEVMODEA*);
+WINGDIAPI DWORD WINAPI DeviceCapabilitiesW(LPCWSTR,LPCWSTR,WORD,LPWSTR,const DEVMODEW*);
+WINGDIAPI BOOL WINAPI DPtoLP(HDC,LPPOINT,int);
+WINGDIAPI int WINAPI DrawEscape(HDC,int,int,LPCSTR);
+WINGDIAPI BOOL WINAPI Ellipse(HDC,int,int,int,int);
+WINGDIAPI int WINAPI EndDoc(HDC);
+WINGDIAPI int WINAPI EndPage(HDC);
+WINGDIAPI BOOL WINAPI EndPath(HDC);
+WINGDIAPI BOOL WINAPI EnumEnhMetaFile(HDC,HENHMETAFILE,ENHMFENUMPROC,PVOID,LPCRECT);
+WINGDIAPI int WINAPI EnumFontFamiliesA(HDC,LPCSTR,FONTENUMPROCA,LPARAM);
+WINGDIAPI int WINAPI EnumFontFamiliesW(HDC,LPCWSTR,FONTENUMPROCW,LPARAM);
+WINGDIAPI int WINAPI EnumFontFamiliesExA(HDC,PLOGFONTA,FONTENUMPROCA,LPARAM,DWORD);
+WINGDIAPI int WINAPI EnumFontFamiliesExW(HDC,PLOGFONTW,FONTENUMPROCW,LPARAM,DWORD);
+WINGDIAPI int WINAPI EnumFontsA(HDC,LPCSTR,FONTENUMPROCA,LPARAM);
+WINGDIAPI int WINAPI EnumFontsW(HDC,LPCWSTR,FONTENUMPROCW,LPARAM);
+WINGDIAPI int WINAPI EnumICMProfilesA(HDC,ICMENUMPROCA,LPARAM);
+WINGDIAPI int WINAPI EnumICMProfilesW(HDC,ICMENUMPROCW,LPARAM);
+WINGDIAPI BOOL WINAPI EnumMetaFile(HDC,HMETAFILE,MFENUMPROC,LPARAM);
+WINGDIAPI int WINAPI EnumObjects(HDC,int,GOBJENUMPROC,LPARAM);
+WINGDIAPI BOOL WINAPI EqualRgn(HRGN,HRGN);
+WINGDIAPI int WINAPI Escape(HDC,int,int,LPCSTR,PVOID);
+WINGDIAPI int WINAPI ExcludeClipRect(HDC,int,int,int,int);
+WINGDIAPI int WINAPI ExcludeUpdateRgn(HDC,HWND);
+WINGDIAPI HPEN WINAPI ExtCreatePen(DWORD,DWORD,const LOGBRUSH*,DWORD,const DWORD*);
+WINGDIAPI HRGN WINAPI ExtCreateRegion(const XFORM*,DWORD,const RGNDATA*);
+WINGDIAPI int WINAPI ExtEscape(HDC,int,int,LPCSTR,int,LPSTR);
+WINGDIAPI BOOL WINAPI ExtFloodFill(HDC,int,int,COLORREF,UINT);
+WINGDIAPI int WINAPI ExtSelectClipRgn(HDC,HRGN,int);
+WINGDIAPI BOOL WINAPI ExtTextOutA(HDC,int,int,UINT,LPCRECT,LPCSTR,UINT,const INT*);
+WINGDIAPI BOOL WINAPI ExtTextOutW(HDC,int,int,UINT,LPCRECT,LPCWSTR,UINT,const INT*);
+WINGDIAPI BOOL WINAPI FillPath(HDC);
+WINGDIAPI int WINAPI FillRect(HDC,LPCRECT,HBRUSH);
+WINGDIAPI int WINAPI FillRgn(HDC,HRGN,HBRUSH);
+WINGDIAPI BOOL WINAPI FixBrushOrgEx(HDC,int,int,LPPOINT);
+WINGDIAPI BOOL WINAPI FlattenPath(HDC);
+WINGDIAPI BOOL WINAPI FloodFill(HDC,int,int,COLORREF);
+WINGDIAPI BOOL WINAPI GdiComment(HDC,UINT,const BYTE*);
+WINGDIAPI BOOL WINAPI GdiFlush(void);
+WINGDIAPI DWORD WINAPI GdiGetBatchLimit(void);
+WINGDIAPI DWORD WINAPI GdiSetBatchLimit(DWORD);
+WINGDIAPI int WINAPI GetArcDirection(HDC);
+WINGDIAPI BOOL WINAPI GetAspectRatioFilterEx(HDC,LPSIZE);
+WINGDIAPI LONG WINAPI GetBitmapBits(HBITMAP,LONG,PVOID);
+WINGDIAPI BOOL WINAPI GetBitmapDimensionEx(HBITMAP,LPSIZE);
+WINGDIAPI COLORREF WINAPI GetBkColor(HDC);
+WINGDIAPI int WINAPI GetBkMode(HDC);
+WINGDIAPI UINT WINAPI GetBoundsRect(HDC,LPRECT,UINT);
+WINGDIAPI BOOL WINAPI GetBrushOrgEx(HDC,LPPOINT);
+WINGDIAPI BOOL WINAPI GetCharABCWidthsA(HDC,UINT,UINT,LPABC);
+WINGDIAPI BOOL WINAPI GetCharABCWidthsW(HDC,UINT,UINT,LPABC);
+WINGDIAPI BOOL WINAPI GetCharABCWidthsFloatA(HDC,UINT,UINT,LPABCFLOAT);
+WINGDIAPI BOOL WINAPI GetCharABCWidthsFloatW(HDC,UINT,UINT,LPABCFLOAT);
+WINGDIAPI DWORD WINAPI GetCharacterPlacementA(HDC,LPCSTR,int,int,LPGCP_RESULTSA,DWORD);
+WINGDIAPI DWORD WINAPI GetCharacterPlacementW(HDC,LPCWSTR,int,int,LPGCP_RESULTSW,DWORD);
+WINGDIAPI BOOL WINAPI GetCharWidth32A(HDC,UINT,UINT,LPINT);
+WINGDIAPI BOOL WINAPI GetCharWidth32W(HDC,UINT,UINT,LPINT);
+WINGDIAPI BOOL WINAPI GetCharWidthA(HDC,UINT,UINT,LPINT);
+WINGDIAPI BOOL WINAPI GetCharWidthW(HDC,UINT,UINT,LPINT);
+WINGDIAPI BOOL WINAPI GetCharWidthFloatA(HDC,UINT,UINT,PFLOAT);
+WINGDIAPI BOOL WINAPI GetCharWidthFloatW(HDC,UINT,UINT,PFLOAT);
+WINGDIAPI int WINAPI GetClipBox(HDC,LPRECT);
+WINGDIAPI int WINAPI GetClipRgn(HDC,HRGN);
+WINGDIAPI BOOL WINAPI GetColorAdjustment(HDC,LPCOLORADJUSTMENT);
+WINGDIAPI HANDLE WINAPI GetColorSpace(HDC);
+WINGDIAPI HGDIOBJ WINAPI GetCurrentObject(HDC,UINT);
+WINGDIAPI BOOL WINAPI GetCurrentPositionEx(HDC,LPPOINT);
+WINGDIAPI HCURSOR WINAPI GetCursor(void);
+#if (WINVER >= 0x0500)
+WINGDIAPI COLORREF WINAPI GetDCBrushColor(HDC);
+WINGDIAPI COLORREF WINAPI GetDCPenColor(HDC);
+#endif
+WINGDIAPI BOOL WINAPI GetDCOrgEx(HDC,LPPOINT);
+WINGDIAPI int WINAPI GetDeviceCaps(HDC,int);
+WINGDIAPI BOOL WINAPI GetDeviceGammaRamp(HDC,PVOID);
+WINGDIAPI UINT WINAPI GetDIBColorTable(HDC,UINT,UINT,RGBQUAD*);
+WINGDIAPI int WINAPI GetDIBits(HDC,HBITMAP,UINT,UINT,PVOID,LPBITMAPINFO,UINT);
+WINGDIAPI HENHMETAFILE WINAPI GetEnhMetaFileA(LPCSTR);
+WINGDIAPI HENHMETAFILE WINAPI GetEnhMetaFileW(LPCWSTR);
+WINGDIAPI UINT WINAPI GetEnhMetaFileBits(HENHMETAFILE,UINT,LPBYTE);
+WINGDIAPI UINT WINAPI GetEnhMetaFileDescriptionA(HENHMETAFILE,UINT,LPSTR);
+WINGDIAPI UINT WINAPI GetEnhMetaFileDescriptionW(HENHMETAFILE,UINT,LPWSTR);
+WINGDIAPI UINT WINAPI GetEnhMetaFileHeader(HENHMETAFILE,UINT,LPENHMETAHEADER);
+WINGDIAPI UINT WINAPI GetEnhMetaFilePaletteEntries(HENHMETAFILE,UINT,LPPALETTEENTRY);
+WINGDIAPI UINT WINAPI GetEnhMetaFilePixelFormat(HENHMETAFILE,DWORD,CONST PIXELFORMATDESCRIPTOR*);
+WINGDIAPI DWORD WINAPI GetFontData(HDC,DWORD,DWORD,PVOID,DWORD);
+WINGDIAPI DWORD WINAPI GetFontLanguageInfo(HDC);
+WINGDIAPI DWORD WINAPI GetGlyphOutlineA(HDC,UINT,UINT,LPGLYPHMETRICS,DWORD,PVOID,const MAT2*);
+WINGDIAPI DWORD WINAPI GetGlyphOutlineW(HDC,UINT,UINT,LPGLYPHMETRICS,DWORD,PVOID,const MAT2*);
+WINGDIAPI int WINAPI GetGraphicsMode(HDC);
+WINGDIAPI BOOL WINAPI GetICMProfileA(HDC,LPDWORD,LPSTR);
+WINGDIAPI BOOL WINAPI GetICMProfileW(HDC,LPDWORD,LPWSTR);
+WINGDIAPI DWORD WINAPI GetKerningPairsA(HDC,DWORD,LPKERNINGPAIR);
+WINGDIAPI DWORD WINAPI GetKerningPairsW(HDC,DWORD,LPKERNINGPAIR);
+WINGDIAPI BOOL WINAPI GetLogColorSpaceA(HCOLORSPACE,LPLOGCOLORSPACEA,DWORD);
+WINGDIAPI BOOL WINAPI GetLogColorSpaceW(HCOLORSPACE,LPLOGCOLORSPACEW,DWORD);
+WINGDIAPI int WINAPI GetMapMode(HDC);
+WINGDIAPI HMETAFILE WINAPI GetMetaFileA(LPCSTR);
+WINGDIAPI HMETAFILE WINAPI GetMetaFileW(LPCWSTR);
+WINGDIAPI UINT WINAPI GetMetaFileBitsEx(HMETAFILE,UINT,PVOID);
+WINGDIAPI int WINAPI GetMetaRgn(HDC,HRGN);
+WINGDIAPI BOOL WINAPI GetMiterLimit(HDC,PFLOAT);
+WINGDIAPI COLORREF WINAPI GetNearestColor(HDC,COLORREF);
+WINGDIAPI UINT WINAPI GetNearestPaletteIndex(HPALETTE,COLORREF);
+WINGDIAPI int WINAPI GetObjectA(HGDIOBJ,int,PVOID);
+WINGDIAPI int WINAPI GetObjectW(HGDIOBJ,int,PVOID);
+WINGDIAPI DWORD WINAPI GetObjectType(HGDIOBJ);
+WINGDIAPI UINT WINAPI GetOutlineTextMetricsA(HDC,UINT,LPOUTLINETEXTMETRICA);
+WINGDIAPI UINT WINAPI GetOutlineTextMetricsW(HDC,UINT,LPOUTLINETEXTMETRICW);
+WINGDIAPI UINT WINAPI GetPaletteEntries(HPALETTE,UINT,UINT,LPPALETTEENTRY);
+WINGDIAPI int WINAPI GetPath(HDC,LPPOINT,PBYTE,int);
+WINGDIAPI COLORREF WINAPI GetPixel(HDC,int,int);
+WINGDIAPI int WINAPI GetPixelFormat(HDC);
+WINGDIAPI int WINAPI GetPolyFillMode(HDC);
+WINGDIAPI BOOL WINAPI GetRasterizerCaps(LPRASTERIZER_STATUS,UINT);
+WINGDIAPI int WINAPI GetRandomRgn (HDC,HRGN,INT);
+WINGDIAPI DWORD WINAPI GetRegionData(HRGN,DWORD,LPRGNDATA);
+WINGDIAPI int WINAPI GetRgnBox(HRGN,LPRECT);
+WINGDIAPI int WINAPI GetROP2(HDC);
+WINGDIAPI HGDIOBJ WINAPI GetStockObject(int);
+WINGDIAPI int WINAPI GetStretchBltMode(HDC);
+WINGDIAPI UINT WINAPI GetSystemPaletteEntries(HDC,UINT,UINT,LPPALETTEENTRY);
+WINGDIAPI UINT WINAPI GetSystemPaletteUse(HDC);
+WINGDIAPI UINT WINAPI GetTextAlign(HDC);
+WINGDIAPI int WINAPI GetTextCharacterExtra(HDC);
+WINGDIAPI int WINAPI GetTextCharset(HDC);
+WINGDIAPI int WINAPI GetTextCharsetInfo(HDC,LPFONTSIGNATURE,DWORD);
+WINGDIAPI COLORREF WINAPI GetTextColor(HDC);
+WINGDIAPI BOOL WINAPI GetTextExtentExPointA(HDC,LPCSTR,int,int,LPINT,LPINT,LPSIZE);
+WINGDIAPI BOOL WINAPI GetTextExtentExPointW( HDC,LPCWSTR,int,int,LPINT,LPINT,LPSIZE );
+WINGDIAPI BOOL WINAPI GetTextExtentPointA(HDC,LPCSTR,int,LPSIZE);
+WINGDIAPI BOOL WINAPI GetTextExtentPointW(HDC,LPCWSTR,int,LPSIZE);
+#if (_WIN32_WINNT >= 0x0500)
+WINGDIAPI BOOL WINAPI GetTextExtentExPointI(HDC, LPWORD, int, int, LPINT, LPINT, LPSIZE);
+#endif
+#ifdef _WIN32_WCE
+extern BOOL GetTextExtentPoint32A(HDC,LPCSTR,int,LPSIZE);
+extern BOOL GetTextExtentPoint32W( HDC,LPCWSTR,int,LPSIZE);
+#else
+WINGDIAPI BOOL WINAPI GetTextExtentPoint32A(HDC,LPCSTR,int,LPSIZE);
+WINGDIAPI BOOL WINAPI GetTextExtentPoint32W( HDC,LPCWSTR,int,LPSIZE);
+#endif
+WINGDIAPI int WINAPI GetTextFaceA(HDC,int,LPSTR);
+WINGDIAPI int WINAPI GetTextFaceW(HDC,int,LPWSTR);
+WINGDIAPI BOOL WINAPI GetTextMetricsA(HDC,LPTEXTMETRICA);
+WINGDIAPI BOOL WINAPI GetTextMetricsW(HDC,LPTEXTMETRICW);
+WINGDIAPI BOOL WINAPI GetViewportExtEx(HDC,LPSIZE);
+WINGDIAPI BOOL WINAPI GetViewportOrgEx(HDC,LPPOINT);
+WINGDIAPI BOOL WINAPI GetWindowExtEx(HDC,LPSIZE);
+WINGDIAPI BOOL WINAPI GetWindowOrgEx(HDC,LPPOINT);
+WINGDIAPI UINT WINAPI GetWinMetaFileBits(HENHMETAFILE,UINT,LPBYTE,INT,HDC);
+WINGDIAPI BOOL WINAPI GetWorldTransform(HDC,LPXFORM);
+WINGDIAPI int WINAPI IntersectClipRect(HDC,int,int,int,int);
+WINGDIAPI BOOL WINAPI InvertRgn(HDC,HRGN);
+WINGDIAPI BOOL WINAPI LineDDA(int,int,int,int,LINEDDAPROC,LPARAM);
+WINGDIAPI BOOL WINAPI LineTo(HDC,int,int);
+WINGDIAPI BOOL WINAPI LPtoDP(HDC,LPPOINT,int);
+WINGDIAPI BOOL WINAPI MaskBlt(HDC,int,int,int,int,HDC,int,int,HBITMAP,int,int,DWORD);
+WINGDIAPI BOOL WINAPI ModifyWorldTransform(HDC,const XFORM*,DWORD);
+WINGDIAPI BOOL WINAPI MoveToEx(HDC,int,int,LPPOINT);
+WINGDIAPI int WINAPI OffsetClipRgn(HDC,int,int);
+WINGDIAPI int WINAPI OffsetRgn(HRGN,int,int);
+WINGDIAPI BOOL WINAPI OffsetViewportOrgEx(HDC,int,int,LPPOINT);
+WINGDIAPI BOOL WINAPI OffsetWindowOrgEx(HDC,int,int,LPPOINT);
+WINGDIAPI BOOL WINAPI PaintRgn(HDC,HRGN);
+WINGDIAPI BOOL WINAPI PatBlt(HDC,int,int,int,int,DWORD);
+WINGDIAPI HRGN WINAPI PathToRegion(HDC);
+WINGDIAPI BOOL WINAPI Pie(HDC,int,int,int,int,int,int,int,int);
+WINGDIAPI BOOL WINAPI PlayEnhMetaFile(HDC,HENHMETAFILE,LPCRECT);
+WINGDIAPI BOOL WINAPI PlayEnhMetaFileRecord(HDC,LPHANDLETABLE,const ENHMETARECORD*,UINT);
+WINGDIAPI BOOL WINAPI PlayMetaFile(HDC,HMETAFILE);
+WINGDIAPI BOOL WINAPI PlayMetaFileRecord(HDC,LPHANDLETABLE,LPMETARECORD,UINT);
+WINGDIAPI BOOL WINAPI PlgBlt(HDC,const POINT*,HDC,int,int,int,int,HBITMAP,int,int);
+WINGDIAPI BOOL WINAPI PolyBezier(HDC,const POINT*,DWORD);
+WINGDIAPI BOOL WINAPI PolyBezierTo(HDC,const POINT*,DWORD);
+WINGDIAPI BOOL WINAPI PolyDraw(HDC,const POINT*,const BYTE*,int);
+WINGDIAPI BOOL WINAPI Polygon(HDC,const POINT*,int);
+WINGDIAPI BOOL WINAPI Polyline(HDC,const POINT*,int);
+WINGDIAPI BOOL WINAPI PolylineTo(HDC,const POINT*,DWORD);
+WINGDIAPI BOOL WINAPI PolyPolygon(HDC,const POINT*,const INT*,int);
+WINGDIAPI BOOL WINAPI PolyPolyline(HDC,const POINT*,const DWORD*,DWORD);
+WINGDIAPI BOOL WINAPI PolyTextOutA(HDC,const POLYTEXTA*,int);
+WINGDIAPI BOOL WINAPI PolyTextOutW(HDC,const POLYTEXTW*,int);
+WINGDIAPI BOOL WINAPI PtInRegion(HRGN,int,int);
+WINGDIAPI BOOL WINAPI PtVisible(HDC,int,int);
+WINGDIAPI UINT WINAPI RealizePalette(HDC);
+WINGDIAPI BOOL WINAPI Rectangle(HDC,int,int,int,int);
+WINGDIAPI BOOL WINAPI RectInRegion(HRGN,LPCRECT);
+WINGDIAPI BOOL WINAPI RectVisible(HDC,LPCRECT);
+WINGDIAPI BOOL WINAPI RemoveFontResourceA(LPCSTR);
+WINGDIAPI BOOL WINAPI RemoveFontResourceW(LPCWSTR);
+#if (_WIN32_WINNT >= 0x0500)
+WINGDIAPI BOOL WINAPI RemoveFontMemResourceEx(HANDLE);
+WINGDIAPI BOOL WINAPI RemoveFontResourceExA(LPCSTR,DWORD,PVOID);
+WINGDIAPI BOOL WINAPI RemoveFontResourceExW(LPCWSTR,DWORD,PVOID);
+#endif
+WINGDIAPI HDC WINAPI ResetDCA(HDC,const DEVMODEA*);
+WINGDIAPI HDC WINAPI ResetDCW(HDC,const DEVMODEW*);
+WINGDIAPI BOOL WINAPI ResizePalette(HPALETTE,UINT);
+WINGDIAPI BOOL WINAPI RestoreDC(HDC,int);
+WINGDIAPI BOOL WINAPI RoundRect(HDC,int,int,int,int,int,int);
+WINGDIAPI int WINAPI SaveDC(HDC);
+WINGDIAPI BOOL WINAPI ScaleViewportExtEx(HDC,int,int,int,int,LPSIZE);
+WINGDIAPI BOOL WINAPI ScaleWindowExtEx(HDC,int,int,int,int,LPSIZE);
+WINGDIAPI BOOL WINAPI SelectClipPath(HDC,int);
+WINGDIAPI int WINAPI SelectClipRgn(HDC,HRGN);
+WINGDIAPI HGDIOBJ WINAPI SelectObject(HDC,HGDIOBJ);
+WINGDIAPI HPALETTE WINAPI SelectPalette(HDC,HPALETTE,BOOL);
+WINGDIAPI int WINAPI SetAbortProc(HDC,ABORTPROC);
+WINGDIAPI int WINAPI SetArcDirection(HDC,int);
+WINGDIAPI LONG WINAPI SetBitmapBits(HBITMAP,DWORD,PCVOID);
+WINGDIAPI BOOL WINAPI SetBitmapDimensionEx(HBITMAP,int,int,LPSIZE);
+WINGDIAPI COLORREF WINAPI SetBkColor(HDC,COLORREF);
+WINGDIAPI int WINAPI SetBkMode(HDC,int);
+WINGDIAPI UINT WINAPI SetBoundsRect(HDC,LPCRECT,UINT);
+WINGDIAPI BOOL WINAPI SetBrushOrgEx(HDC,int,int,LPPOINT);
+WINGDIAPI BOOL WINAPI SetColorAdjustment(HDC,const COLORADJUSTMENT*);
+WINGDIAPI BOOL WINAPI SetColorSpace(HDC,HCOLORSPACE);
+#if (_WIN32_WINNT >= 0x0500)
+WINGDIAPI COLORREF WINAPI SetDCBrushColor(HDC,COLORREF);
+WINGDIAPI COLORREF WINAPI SetDCPenColor(HDC,COLORREF);
+#endif
+WINGDIAPI BOOL WINAPI SetDeviceGammaRamp(HDC,PVOID);
+WINGDIAPI UINT WINAPI SetDIBColorTable(HDC,UINT,UINT,const RGBQUAD*);
+WINGDIAPI int WINAPI SetDIBits(HDC,HBITMAP,UINT,UINT,PCVOID,const BITMAPINFO*,UINT);
+WINGDIAPI int WINAPI SetDIBitsToDevice(HDC,int,int,DWORD,DWORD,int,int,UINT,UINT,PCVOID,const BITMAPINFO*,UINT);
+WINGDIAPI HENHMETAFILE WINAPI SetEnhMetaFileBits(UINT,const BYTE*);
+WINGDIAPI int WINAPI SetGraphicsMode(HDC,int);
+WINGDIAPI int WINAPI SetICMMode(HDC,int);
+WINGDIAPI BOOL WINAPI SetICMProfileA(HDC,LPSTR);
+WINGDIAPI BOOL WINAPI SetICMProfileW(HDC,LPWSTR);
+WINGDIAPI int WINAPI SetMapMode(HDC,int);
+WINGDIAPI DWORD WINAPI SetMapperFlags(HDC,DWORD);
+WINGDIAPI HMETAFILE WINAPI SetMetaFileBitsEx(UINT,const BYTE *);
+WINGDIAPI int WINAPI SetMetaRgn(HDC);
+WINGDIAPI BOOL WINAPI SetMiterLimit(HDC,FLOAT,PFLOAT);
+WINGDIAPI UINT WINAPI SetPaletteEntries(HPALETTE,UINT,UINT,const PALETTEENTRY*);
+WINGDIAPI COLORREF WINAPI SetPixel(HDC,int,int,COLORREF);
+WINGDIAPI BOOL WINAPI SetPixelFormat(HDC,int,const PIXELFORMATDESCRIPTOR*);
+WINGDIAPI BOOL WINAPI SetPixelV(HDC,int,int,COLORREF);
+WINGDIAPI int WINAPI SetPolyFillMode(HDC,int);
+WINGDIAPI BOOL WINAPI SetRectRgn(HRGN,int,int,int,int);
+WINGDIAPI int WINAPI SetROP2(HDC,int);
+WINGDIAPI int WINAPI SetStretchBltMode(HDC,int);
+WINGDIAPI UINT WINAPI SetSystemPaletteUse(HDC,UINT);
+WINGDIAPI UINT WINAPI SetTextAlign(HDC,UINT);
+WINGDIAPI int WINAPI SetTextCharacterExtra(HDC,int);
+WINGDIAPI COLORREF WINAPI SetTextColor(HDC,COLORREF);
+WINGDIAPI BOOL WINAPI SetTextJustification(HDC,int,int);
+WINGDIAPI BOOL WINAPI SetViewportExtEx(HDC,int,int,LPSIZE);
+WINGDIAPI BOOL WINAPI SetViewportOrgEx(HDC,int,int,LPPOINT);
+WINGDIAPI BOOL WINAPI SetWindowExtEx(HDC,int,int,LPSIZE);
+WINGDIAPI BOOL WINAPI SetWindowOrgEx(HDC,int,int,LPPOINT);
+WINGDIAPI HENHMETAFILE WINAPI SetWinMetaFileBits(UINT,const BYTE*,HDC,const METAFILEPICT*);
+WINGDIAPI BOOL WINAPI SetWorldTransform(HDC,const XFORM *);
+WINGDIAPI int WINAPI StartDocA(HDC,const DOCINFOA*);
+WINGDIAPI int WINAPI StartDocW(HDC,const DOCINFOW*);
+WINGDIAPI int WINAPI StartPage(HDC);
+WINGDIAPI BOOL WINAPI StretchBlt(HDC,int,int,int,int,HDC,int,int,int,int,DWORD);
+WINGDIAPI int WINAPI StretchDIBits(HDC,int,int,int,int,int,int,int,int,const VOID *,const BITMAPINFO *,UINT,DWORD);
+WINGDIAPI BOOL WINAPI StrokeAndFillPath(HDC);
+WINGDIAPI BOOL WINAPI StrokePath(HDC);
+WINGDIAPI BOOL WINAPI SwapBuffers(HDC);
+WINGDIAPI BOOL WINAPI TextOutA(HDC,int,int,LPCSTR,int);
+WINGDIAPI BOOL WINAPI TextOutW(HDC,int,int,LPCWSTR,int);
+WINGDIAPI BOOL WINAPI TranslateCharsetInfo(PDWORD,LPCHARSETINFO,DWORD);
+WINGDIAPI BOOL WINAPI UnrealizeObject(HGDIOBJ);
+WINGDIAPI BOOL WINAPI UpdateColors(HDC);
+WINGDIAPI BOOL WINAPI UpdateICMRegKeyA(DWORD,DWORD,LPSTR,UINT);
+WINGDIAPI BOOL WINAPI UpdateICMRegKeyW(DWORD,DWORD,LPWSTR,UINT);
+WINGDIAPI BOOL WINAPI WidenPath(HDC);
+WINGDIAPI BOOL WINAPI wglCopyContext(HGLRC,HGLRC,UINT);
+WINGDIAPI HGLRC WINAPI wglCreateContext(HDC);
+WINGDIAPI HGLRC WINAPI wglCreateLayerContext(HDC,int);
+WINGDIAPI BOOL WINAPI wglDeleteContext(HGLRC);
+WINGDIAPI BOOL WINAPI wglDescribeLayerPlane(HDC,int,int,UINT,LPLAYERPLANEDESCRIPTOR);
+WINGDIAPI HGLRC WINAPI wglGetCurrentContext(void);
+WINGDIAPI HDC WINAPI wglGetCurrentDC(void);
+WINGDIAPI int WINAPI wglGetLayerPaletteEntries(HDC,int,int,int,COLORREF*);
+WINGDIAPI PROC WINAPI wglGetProcAddress(LPCSTR);
+WINGDIAPI BOOL WINAPI wglMakeCurrent(HDC,HGLRC);
+WINGDIAPI BOOL WINAPI wglRealizeLayerPalette(HDC,int,BOOL);
+WINGDIAPI int WINAPI wglSetLayerPaletteEntries(HDC,int,int,int,const COLORREF*);
+WINGDIAPI BOOL WINAPI wglShareLists(HGLRC,HGLRC);
+WINGDIAPI BOOL WINAPI wglSwapLayerBuffers(HDC,UINT);
+WINGDIAPI BOOL WINAPI wglUseFontBitmapsA(HDC,DWORD,DWORD,DWORD);
+WINGDIAPI BOOL WINAPI wglUseFontBitmapsW(HDC,DWORD,DWORD,DWORD);
+WINGDIAPI BOOL WINAPI wglUseFontOutlinesA(HDC,DWORD,DWORD,DWORD,FLOAT,FLOAT,int,LPGLYPHMETRICSFLOAT);
+WINGDIAPI BOOL WINAPI wglUseFontOutlinesW(HDC,DWORD,DWORD,DWORD,FLOAT,FLOAT,int,LPGLYPHMETRICSFLOAT);
+#if (WINVER >= 0x0410)
+WINGDIAPI BOOL WINAPI AlphaBlend(HDC,int,int,int,int,HDC,int,int,int,int,BLENDFUNCTION);
+WINGDIAPI BOOL WINAPI GradientFill(HDC,PTRIVERTEX,ULONG,PVOID,ULONG,ULONG);
+WINGDIAPI BOOL WINAPI TransparentBlt(HDC,int,int,int,int,HDC,int,int,int,int,UINT);
+#endif
+#if (_WIN32_WINNT >= 0x0500)
+WINGDIAPI DWORD WINAPI GetFontUnicodeRanges(HDC,LPGLYPHSET);
+WINGDIAPI DWORD WINAPI GetGlyphIndicesA(HDC,LPCSTR,int,LPWORD,DWORD);
+WINGDIAPI DWORD WINAPI GetGlyphIndicesW(HDC,LPCWSTR,int,LPWORD,DWORD);
+#endif
+#if (WINVER >= 0x0500)
+WINGDIAPI DWORD WINAPI GetLayout(HDC);
+WINGDIAPI DWORD WINAPI SetLayout(HDC, DWORD);
+#endif
+
+#ifdef UNICODE
+typedef WCHAR BCHAR;
+typedef DOCINFOW DOCINFO, *LPDOCINFO;
+typedef LOGFONTW LOGFONT,*PLOGFONT,*LPLOGFONT;
+typedef TEXTMETRICW TEXTMETRIC,*PTEXTMETRIC,*LPTEXTMETRIC;
+#define ICMENUMPROC ICMENUMPROCW
+#define FONTENUMPROC FONTENUMPROCW
+typedef DEVMODEW DEVMODE,*PDEVMODE,*LPDEVMODE;
+#if _WIN32_WINNT >= 0x0500
+typedef ENUMLOGFONTEXDVW ENUMLOGFONTEXDV;
+typedef PENUMLOGFONTEXDVW PENUMLOGFONTEXDV;
+typedef LPENUMLOGFONTEXDVW LPENUMLOGFONTEXDV;
+#endif
+typedef EXTLOGFONTW EXTLOGFONT,*PEXTLOGFONT,*LPEXTLOGFONT;
+typedef GCP_RESULTSW GCP_RESULTS,*LPGCP_RESULTS;
+typedef OUTLINETEXTMETRICW OUTLINETEXTMETRIC,*POUTLINETEXTMETRIC,*LPOUTLINETEXTMETRIC;
+typedef POLYTEXTW POLYTEXT,*PPOLYTEXT,*LPPOLYTEXT;
+typedef LOGCOLORSPACEW LOGCOLORSPACE,*LPLOGCOLORSPACE;
+typedef NEWTEXTMETRICW NEWTEXTMETRIC,*PNEWTEXTMETRIC,*LPNEWTEXTMETRIC;
+typedef NEWTEXTMETRICEXW NEWTEXTMETRICEX;
+typedef ENUMLOGFONTW ENUMLOGFONT,*LPENUMLOGFONT;
+typedef ENUMLOGFONTEXW ENUMLOGFONTEX,*LPENUMLOGFONTEX;
+typedef DISPLAY_DEVICEW DISPLAY_DEVICE, *PDISPLAY_DEVICE, *LPDISPLAY_DEVICE;
+#define AddFontResource AddFontResourceW
+#if (_WIN32_WINNT >= 0x0500)
+#define AddFontResourceEx AddFontResourceExW
+#endif
+#define CopyEnhMetaFile CopyEnhMetaFileW
+#define CopyMetaFile CopyMetaFileW
+#define CreateColorSpace CreateColorSpaceW
+#define CreateDC CreateDCW
+#define CreateEnhMetaFile CreateEnhMetaFileW
+#define CreateFont CreateFontW
+#define CreateFontIndirect CreateFontIndirectW
+#define CreateIC CreateICW
+#define CreateMetaFile CreateMetaFileW
+#define CreateScalableFontResource CreateScalableFontResourceW
+#define DeviceCapabilities DeviceCapabilitiesW
+#define EnumFontFamilies EnumFontFamiliesW
+#define EnumFontFamiliesEx EnumFontFamiliesExW
+#define EnumFonts EnumFontsW
+#define EnumICMProfiles EnumICMProfilesW
+#define ExtTextOut ExtTextOutW
+#define GetCharABCWidthsFloat GetCharABCWidthsFloatW
+#define GetCharABCWidths GetCharABCWidthsW
+#define GetCharacterPlacement GetCharacterPlacementW
+#define GetCharWidth32 GetCharWidth32W
+#define GetCharWidthFloat GetCharWidthFloatW
+#define GetCharWidth GetCharWidthW
+#define GetEnhMetaFile GetEnhMetaFileW
+#define GetEnhMetaFileDescription GetEnhMetaFileDescriptionW
+#define GetGlyphOutline GetGlyphOutlineW
+#define GetICMProfile GetICMProfileW
+#define GetKerningPairs GetKerningPairsW
+#define GetLogColorSpace GetLogColorSpaceW
+#define GetMetaFile GetMetaFileW
+#define GetObject GetObjectW
+#define GetOutlineTextMetrics GetOutlineTextMetricsW
+#define GetTextExtentPoint GetTextExtentPointW
+#define GetTextExtentExPoint GetTextExtentExPointW
+#define GetTextExtentPoint32 GetTextExtentPoint32W
+#define GetTextFace GetTextFaceW
+#define GetTextMetrics GetTextMetricsW
+#define PolyTextOut PolyTextOutW
+#define RemoveFontResource RemoveFontResourceW
+#if (_WIN32_WINNT >= 0x0500)
+#define RemoveFontResourceEx RemoveFontResourceExW
+#endif
+#define ResetDC ResetDCW
+#define SetICMProfile SetICMProfileW
+#define StartDoc StartDocW
+#define TextOut TextOutW
+#define UpdateICMRegKey UpdateICMRegKeyW
+#define wglUseFontBitmaps wglUseFontBitmapsW
+#define wglUseFontOutlines wglUseFontOutlinesW
+#if (_WIN32_WINNT >= 0x0500)
+#define GetGlyphIndices GetGlyphIndicesW
+#endif
+#else /* UNICODE */
+typedef BYTE BCHAR;
+typedef DOCINFOA DOCINFO, *LPDOCINFO;
+typedef LOGFONTA LOGFONT,*PLOGFONT,*LPLOGFONT;
+typedef TEXTMETRICA TEXTMETRIC,*PTEXTMETRIC,*LPTEXTMETRIC;
+#define ICMENUMPROC ICMENUMPROCA
+#define FONTENUMPROC FONTENUMPROCA
+typedef DEVMODEA DEVMODE,*PDEVMODE,*LPDEVMODE;
+#if _WIN32_WINNT >= 0x0500
+typedef ENUMLOGFONTEXDVA ENUMLOGFONTEXDV;
+typedef PENUMLOGFONTEXDVA PENUMLOGFONTEXDV;
+typedef LPENUMLOGFONTEXDVA LPENUMLOGFONTEXDV;
+#endif
+typedef EXTLOGFONTA EXTLOGFONT,*PEXTLOGFONT,*LPEXTLOGFONT;
+typedef GCP_RESULTSA GCP_RESULTS,*LPGCP_RESULTS;
+typedef OUTLINETEXTMETRICA OUTLINETEXTMETRIC,*POUTLINETEXTMETRIC,*LPOUTLINETEXTMETRIC;
+typedef POLYTEXTA POLYTEXT,*PPOLYTEXT,*LPPOLYTEXT;
+typedef LOGCOLORSPACEA LOGCOLORSPACE,*LPLOGCOLORSPACE;
+typedef NEWTEXTMETRICA NEWTEXTMETRIC,*PNEWTEXTMETRIC,*LPNEWTEXTMETRIC;
+typedef NEWTEXTMETRICEXA NEWTEXTMETRICEX;
+typedef ENUMLOGFONTA ENUMLOGFONT,*LPENUMLOGFONT;
+typedef ENUMLOGFONTEXA ENUMLOGFONTEX,*LPENUMLOGFONTEX;
+typedef DISPLAY_DEVICEA DISPLAY_DEVICE, *PDISPLAY_DEVICE, *LPDISPLAY_DEVICE;
+#define AddFontResource AddFontResourceA
+#if (_WIN32_WINNT >= 0x0500)
+#define AddFontResourceEx AddFontResourceExA
+#endif
+#define CopyEnhMetaFile CopyEnhMetaFileA
+#define CopyMetaFile CopyMetaFileA
+#define CreateColorSpace CreateColorSpaceA
+#define CreateDC CreateDCA
+#define CreateEnhMetaFile CreateEnhMetaFileA
+#define CreateFont CreateFontA
+#define CreateFontIndirect CreateFontIndirectA
+#define CreateIC CreateICA
+#define CreateMetaFile CreateMetaFileA
+#define CreateScalableFontResource CreateScalableFontResourceA
+#define DeviceCapabilities DeviceCapabilitiesA
+#define EnumFontFamilies EnumFontFamiliesA
+#define EnumFontFamiliesEx EnumFontFamiliesExA
+#define EnumFonts EnumFontsA
+#define EnumICMProfiles EnumICMProfilesA
+#define ExtTextOut ExtTextOutA
+#define GetCharWidthFloat GetCharWidthFloatA
+#define GetCharWidth GetCharWidthA
+#define GetCharacterPlacement GetCharacterPlacementA
+#define GetCharABCWidths GetCharABCWidthsA
+#define GetCharABCWidthsFloat GetCharABCWidthsFloatA
+#define GetCharWidth32 GetCharWidth32A
+#define GetEnhMetaFile GetEnhMetaFileA
+#define GetEnhMetaFileDescription GetEnhMetaFileDescriptionA
+#define GetGlyphOutline GetGlyphOutlineA
+#define GetICMProfile GetICMProfileA
+#define GetKerningPairs GetKerningPairsA
+#define GetLogColorSpace GetLogColorSpaceA
+#define GetMetaFile GetMetaFileA
+#define GetObject GetObjectA
+#define GetOutlineTextMetrics GetOutlineTextMetricsA
+#define GetTextExtentPoint GetTextExtentPointA
+#define GetTextExtentExPoint GetTextExtentExPointA
+#define GetTextExtentPoint32 GetTextExtentPoint32A
+#define GetTextFace GetTextFaceA
+#define GetTextMetrics GetTextMetricsA
+#define PolyTextOut PolyTextOutA
+#define RemoveFontResource RemoveFontResourceA
+#if (_WIN32_WINNT >= 0x0500)
+#define RemoveFontResourceEx RemoveFontResourceExA
+#endif
+#define ResetDC ResetDCA
+#define SetICMProfile SetICMProfileA
+#define StartDoc StartDocA
+#define TextOut TextOutA
+#define UpdateICMRegKey UpdateICMRegKeyA
+#define wglUseFontBitmaps wglUseFontBitmapsA
+#define wglUseFontOutlines wglUseFontOutlinesA
+#if (_WIN32_WINNT >= 0x0500)
+#define GetGlyphIndices GetGlyphIndicesA
+#endif
+#endif /* UNICODE */
+#endif /* RC_INVOKED */
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/wininet.h b/tcc/include/winapi/wininet.h
new file mode 100644
index 0000000..cadd305
--- /dev/null
+++ b/tcc/include/winapi/wininet.h
@@ -0,0 +1,992 @@
+#ifndef _WININET_H
+#define _WININET_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#include <windows.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+#define INTERNET_INVALID_PORT_NUMBER 0
+#define INTERNET_DEFAULT_FTP_PORT 21
+#define INTERNET_DEFAULT_GOPHER_PORT 70
+#define INTERNET_DEFAULT_HTTP_PORT 80
+#define INTERNET_DEFAULT_HTTPS_PORT 443
+#define INTERNET_DEFAULT_SOCKS_PORT 1080
+#define MAX_CACHE_ENTRY_INFO_SIZE 4096
+#define INTERNET_MAX_HOST_NAME_LENGTH 256
+#define INTERNET_MAX_USER_NAME_LENGTH 128
+#define INTERNET_MAX_PASSWORD_LENGTH 128
+#define INTERNET_MAX_PORT_NUMBER_LENGTH 5
+#define INTERNET_MAX_PORT_NUMBER_VALUE 65535
+#define INTERNET_MAX_PATH_LENGTH 2048
+#define INTERNET_MAX_SCHEME_LENGTH 32
+#define INTERNET_MAX_URL_LENGTH (INTERNET_MAX_SCHEME_LENGTH+sizeof("://")+INTERNET_MAX_PATH_LENGTH)
+#define INTERNET_KEEP_ALIVE_UNKNOWN ((DWORD)-1)
+#define INTERNET_KEEP_ALIVE_ENABLED 1
+#define INTERNET_KEEP_ALIVE_DISABLED 0
+#define INTERNET_REQFLAG_FROM_CACHE 1
+#define INTERNET_REQFLAG_ASYNC 2
+#define INTERNET_FLAG_RELOAD 0x80000000
+#define INTERNET_FLAG_RAW_DATA 0x40000000
+#define INTERNET_FLAG_EXISTING_CONNECT 0x20000000
+#define INTERNET_FLAG_ASYNC 0x10000000
+#define INTERNET_FLAG_PASSIVE 0x08000000
+#define INTERNET_FLAG_NO_CACHE_WRITE 0x04000000
+#define INTERNET_FLAG_DONT_CACHE INTERNET_FLAG_NO_CACHE_WRITE
+#define INTERNET_FLAG_MAKE_PERSISTENT 0x02000000
+#define INTERNET_FLAG_OFFLINE 0x1000000
+#define INTERNET_FLAG_SECURE 0x800000
+#define INTERNET_FLAG_KEEP_CONNECTION 0x400000
+#define INTERNET_FLAG_NO_AUTO_REDIRECT 0x200000
+#define INTERNET_FLAG_READ_PREFETCH 0x100000
+#define INTERNET_FLAG_NO_COOKIES 0x80000
+#define INTERNET_FLAG_NO_AUTH 0x40000
+#define INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP 0x8000
+#define INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS 0x4000
+#define INTERNET_FLAG_IGNORE_CERT_DATE_INVALID 0x2000
+#define INTERNET_FLAG_IGNORE_CERT_CN_INVALID 0x1000
+#define INTERNET_FLAG_MUST_CACHE_REQUEST 16
+#define INTERNET_FLAG_RESYNCHRONIZE 0x800
+#define INTERNET_FLAG_HYPERLINK 0x400
+#define INTERNET_FLAG_NO_UI 0x200
+#define INTERNET_FLAG_PRAGMA_NOCACHE 0x100
+#define INTERNET_FLAG_TRANSFER_ASCII FTP_TRANSFER_TYPE_ASCII
+#define INTERNET_FLAG_TRANSFER_BINARY FTP_TRANSFER_TYPE_BINARY
+#define SECURITY_INTERNET_MASK (INTERNET_FLAG_IGNORE_CERT_CN_INVALID|INTERNET_FLAG_IGNORE_CERT_DATE_INVALID|INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS|INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP)
+#define SECURITY_SET_MASK SECURITY_INTERNET_MASK
+#define INTERNET_FLAGS_MASK (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_OFFLINE|\
+INTERNET_FLAG_SECURE|INTERNET_FLAG_KEEP_CONNECTION|INTERNET_FLAG_NO_AUTO_REDIRECT|INTERNET_FLAG_READ_PREFETCH |\
+INTERNET_FLAG_NO_COOKIES|INTERNET_FLAG_NO_AUTH|SECURITY_INTERNET_MASK|INTERNET_FLAG_TRANSFER_ASCII|INTERNET_FLAG_TRANSFER_BINARY\
+|INTERNET_FLAG_RESYNCHRONIZE|INTERNET_FLAG_MUST_CACHE_REQUEST|INTERNET_FLAG_HYPERLINK|INTERNET_FLAG_NO_UI)
+#define INTERNET_OPTIONS_MASK (~INTERNET_FLAGS_MASK)
+#define INTERNET_NO_CALLBACK 0
+#define INTERNET_RFC1123_FORMAT 0
+#define INTERNET_RFC1123_BUFSIZE 30
+#define ICU_ESCAPE 0x80000000
+#define ICU_USERNAME 0x40000000
+#define ICU_NO_ENCODE 0x20000000
+#define ICU_DECODE 0x10000000
+#define ICU_NO_META 0x08000000
+#define ICU_ENCODE_SPACES_ONLY 0x04000000
+#define ICU_BROWSER_MODE 0x02000000
+#define INTERNET_OPEN_TYPE_PRECONFIG 0
+#define INTERNET_OPEN_TYPE_DIRECT 1
+#define INTERNET_OPEN_TYPE_PROXY 3
+#define PRE_CONFIG_INTERNET_ACCESS INTERNET_OPEN_TYPE_PRECONFIG
+#define LOCAL_INTERNET_ACCESS INTERNET_OPEN_TYPE_DIRECT
+#define GATEWAY_INTERNET_ACCESS 2
+#define CERN_PROXY_INTERNET_ACCESS INTERNET_OPEN_TYPE_PROXY
+#define ISO_GLOBAL 1
+#define ISO_REGISTRY 2
+#define ISO_VALID_FLAGS (ISO_GLOBAL | ISO_REGISTRY)
+#define INTERNET_OPTION_CALLBACK 1
+#define INTERNET_OPTION_CONNECT_TIMEOUT 2
+#define INTERNET_OPTION_CONNECT_RETRIES 3
+#define INTERNET_OPTION_CONNECT_BACKOFF 4
+#define INTERNET_OPTION_SEND_TIMEOUT 5
+#define INTERNET_OPTION_CONTROL_SEND_TIMEOUT INTERNET_OPTION_SEND_TIMEOUT
+#define INTERNET_OPTION_RECEIVE_TIMEOUT 6
+#define INTERNET_OPTION_CONTROL_RECEIVE_TIMEOUT INTERNET_OPTION_RECEIVE_TIMEOUT
+#define INTERNET_OPTION_DATA_SEND_TIMEOUT 7
+#define INTERNET_OPTION_DATA_RECEIVE_TIMEOUT 8
+#define INTERNET_OPTION_HANDLE_TYPE 9
+#define INTERNET_OPTION_CONTEXT_VALUE 10
+#define INTERNET_OPTION_LISTEN_TIMEOUT 11
+#define INTERNET_OPTION_READ_BUFFER_SIZE 12
+#define INTERNET_OPTION_WRITE_BUFFER_SIZE 13
+#define INTERNET_OPTION_ASYNC_ID 15
+#define INTERNET_OPTION_ASYNC_PRIORITY 16
+#define INTERNET_OPTION_PARENT_HANDLE 21
+#define INTERNET_OPTION_KEEP_CONNECTION 22
+#define INTERNET_OPTION_REQUEST_FLAGS 23
+#define INTERNET_OPTION_EXTENDED_ERROR 24
+#define INTERNET_OPTION_OFFLINE_MODE 26
+#define INTERNET_OPTION_CACHE_STREAM_HANDLE 27
+#define INTERNET_OPTION_USERNAME 28
+#define INTERNET_OPTION_PASSWORD 29
+#define INTERNET_OPTION_ASYNC 30
+#define INTERNET_OPTION_SECURITY_FLAGS 31
+#define INTERNET_OPTION_SECURITY_CERTIFICATE_STRUCT 32
+#define INTERNET_OPTION_DATAFILE_NAME 33
+#define INTERNET_OPTION_URL 34
+#define INTERNET_OPTION_SECURITY_CERTIFICATE 35
+#define INTERNET_OPTION_SECURITY_KEY_BITNESS 36
+#define INTERNET_OPTION_REFRESH 37
+#define INTERNET_OPTION_PROXY 38
+#define INTERNET_OPTION_SETTINGS_CHANGED 39
+#define INTERNET_OPTION_VERSION 40
+#define INTERNET_OPTION_USER_AGENT 41
+#define INTERNET_OPTION_END_BROWSER_SESSION 42
+#define INTERNET_OPTION_PROXY_USERNAME 43
+#define INTERNET_OPTION_PROXY_PASSWORD 44
+#define INTERNET_OPTION_CONNECTED_STATE 50
+#define INTERNET_FIRST_OPTION INTERNET_OPTION_CALLBACK
+/* FIXME: missing INTERNET_OPTION_*? */
+#define INTERNET_LAST_OPTION INTERNET_OPTION_CONNECTED_STATE
+#define INTERNET_PRIORITY_FOREGROUND 1000
+#define INTERNET_HANDLE_TYPE_INTERNET 1
+#define INTERNET_HANDLE_TYPE_CONNECT_FTP 2
+#define INTERNET_HANDLE_TYPE_CONNECT_GOPHER 3
+#define INTERNET_HANDLE_TYPE_CONNECT_HTTP 4
+#define INTERNET_HANDLE_TYPE_FTP_FIND 5
+#define INTERNET_HANDLE_TYPE_FTP_FIND_HTML 6
+#define INTERNET_HANDLE_TYPE_FTP_FILE 7
+#define INTERNET_HANDLE_TYPE_FTP_FILE_HTML 8
+#define INTERNET_HANDLE_TYPE_GOPHER_FIND 9
+#define INTERNET_HANDLE_TYPE_GOPHER_FIND_HTML 10
+#define INTERNET_HANDLE_TYPE_GOPHER_FILE 11
+#define INTERNET_HANDLE_TYPE_GOPHER_FILE_HTML 12
+#define INTERNET_HANDLE_TYPE_HTTP_REQUEST 13
+#define SECURITY_FLAG_SECURE 1
+#define SECURITY_FLAG_SSL 2
+#define SECURITY_FLAG_SSL3 4
+#define SECURITY_FLAG_PCT 8
+#define SECURITY_FLAG_PCT4 16
+#define SECURITY_FLAG_IETFSSL4 0x20
+#define SECURITY_FLAG_IGNORE_REVOCATION 0x00000080
+#define SECURITY_FLAG_IGNORE_UNKNOWN_CA 0x00000100
+#define SECURITY_FLAG_IGNORE_WRONG_USAGE 0x00000200
+#define SECURITY_FLAG_40BIT 0x10000000
+#define SECURITY_FLAG_128BIT 0x20000000
+#define SECURITY_FLAG_56BIT 0x40000000
+#define SECURITY_FLAG_UNKNOWNBIT 0x80000000
+#define SECURITY_FLAG_NORMALBITNESS SECURITY_FLAG_40BIT
+#define SECURITY_FLAG_IGNORE_CERT_CN_INVALID INTERNET_FLAG_IGNORE_CERT_CN_INVALID
+#define SECURITY_FLAG_IGNORE_CERT_DATE_INVALID INTERNET_FLAG_IGNORE_CERT_DATE_INVALID
+#define SECURITY_FLAG_IGNORE_REDIRECT_TO_HTTPS INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS
+#define SECURITY_FLAG_IGNORE_REDIRECT_TO_HTTP INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP
+#define INTERNET_SERVICE_FTP 1
+#define INTERNET_SERVICE_GOPHER 2
+#define INTERNET_SERVICE_HTTP 3
+#define INTERNET_STATUS_RESOLVING_NAME 10
+#define INTERNET_STATUS_NAME_RESOLVED 11
+#define INTERNET_STATUS_CONNECTING_TO_SERVER 20
+#define INTERNET_STATUS_CONNECTED_TO_SERVER 21
+#define INTERNET_STATUS_SENDING_REQUEST 30
+#define INTERNET_STATUS_REQUEST_SENT 31
+#define INTERNET_STATUS_RECEIVING_RESPONSE 40
+#define INTERNET_STATUS_RESPONSE_RECEIVED 41
+#define INTERNET_STATUS_CTL_RESPONSE_RECEIVED 42
+#define INTERNET_STATUS_PREFETCH 43
+#define INTERNET_STATUS_CLOSING_CONNECTION 50
+#define INTERNET_STATUS_CONNECTION_CLOSED 51
+#define INTERNET_STATUS_HANDLE_CREATED 60
+#define INTERNET_STATUS_HANDLE_CLOSING 70
+#define INTERNET_STATUS_REQUEST_COMPLETE 100
+#define INTERNET_STATUS_REDIRECT 110
+#define INTERNET_INVALID_STATUS_CALLBACK ((INTERNET_STATUS_CALLBACK)(-1L))
+#define FTP_TRANSFER_TYPE_UNKNOWN 0
+#define FTP_TRANSFER_TYPE_ASCII 1
+#define FTP_TRANSFER_TYPE_BINARY 2
+#define FTP_TRANSFER_TYPE_MASK (FTP_TRANSFER_TYPE_ASCII | FTP_TRANSFER_TYPE_BINARY)
+#define MAX_GOPHER_DISPLAY_TEXT 128
+#define MAX_GOPHER_SELECTOR_TEXT 256
+#define MAX_GOPHER_HOST_NAME INTERNET_MAX_HOST_NAME_LENGTH
+#define MAX_GOPHER_LOCATOR_LENGTH (1+MAX_GOPHER_DISPLAY_TEXT+1+MAX_GOPHER_SELECTOR_TEXT+1+MAX_GOPHER_HOST_NAME+1+INTERNET_MAX_PORT_NUMBER_LENGTH+1+1+2)
+#define GOPHER_TYPE_TEXT_FILE 1
+#define GOPHER_TYPE_DIRECTORY 2
+#define GOPHER_TYPE_CSO 4
+#define GOPHER_TYPE_ERROR 8
+#define GOPHER_TYPE_MAC_BINHEX 16
+#define GOPHER_TYPE_DOS_ARCHIVE 32
+#define GOPHER_TYPE_UNIX_UUENCODED 64
+#define GOPHER_TYPE_INDEX_SERVER 128
+#define GOPHER_TYPE_TELNET 256
+#define GOPHER_TYPE_BINARY 512
+#define GOPHER_TYPE_REDUNDANT 1024
+#define GOPHER_TYPE_TN3270 0x800
+#define GOPHER_TYPE_GIF 0x1000
+#define GOPHER_TYPE_IMAGE 0x2000
+#define GOPHER_TYPE_BITMAP 0x4000
+#define GOPHER_TYPE_MOVIE 0x8000
+#define GOPHER_TYPE_SOUND 0x10000
+#define GOPHER_TYPE_HTML 0x20000
+#define GOPHER_TYPE_PDF 0x40000
+#define GOPHER_TYPE_CALENDAR 0x80000
+#define GOPHER_TYPE_INLINE 0x100000
+#define GOPHER_TYPE_UNKNOWN 0x20000000
+#define GOPHER_TYPE_ASK 0x40000000
+#define GOPHER_TYPE_GOPHER_PLUS 0x80000000
+#define IS_GOPHER_FILE(t) (BOOL)(((t)&GOPHER_TYPE_FILE_MASK)?TRUE:FALSE)
+#define IS_GOPHER_DIRECTORY(t) (BOOL)(((t)&GOPHER_TYPE_DIRECTORY)?TRUE:FALSE)
+#define IS_GOPHER_PHONE_SERVER(t) (BOOL)(((t)&GOPHER_TYPE_CSO)?TRUE:FALSE)
+#define IS_GOPHER_ERROR(t) (BOOL)(((t)&GOPHER_TYPE_ERROR)?TRUE:FALSE)
+#define IS_GOPHER_INDEX_SERVER(t) (BOOL)(((t)&GOPHER_TYPE_INDEX_SERVER)?TRUE:FALSE)
+#define IS_GOPHER_TELNET_SESSION(t) (BOOL)(((t)&GOPHER_TYPE_TELNET)?TRUE:FALSE)
+#define IS_GOPHER_BACKUP_SERVER(t) (BOOL)(((t)&GOPHER_TYPE_REDUNDANT)?TRUE:FALSE)
+#define IS_GOPHER_TN3270_SESSION(t) (BOOL)(((t)&GOPHER_TYPE_TN3270)?TRUE:FALSE)
+#define IS_GOPHER_ASK(t) (BOOL)(((t)&GOPHER_TYPE_ASK)?TRUE:FALSE)
+#define IS_GOPHER_PLUS(t) (BOOL)(((t)&GOPHER_TYPE_GOPHER_PLUS)?TRUE:FALSE)
+#define IS_GOPHER_TYPE_KNOWN(t) (BOOL)(((t)&GOPHER_TYPE_UNKNOWN)?FALSE:TRUE)
+#define GOPHER_TYPE_FILE_MASK (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)
+#define MAX_GOPHER_CATEGORY_NAME 128
+#define MAX_GOPHER_ATTRIBUTE_NAME 128
+#define MIN_GOPHER_ATTRIBUTE_LENGTH 256
+#define GOPHER_INFO_CATEGORY TEXT("+INFO")
+#define GOPHER_ADMIN_CATEGORY TEXT("+ADMIN")
+#define GOPHER_VIEWS_CATEGORY TEXT("+VIEWS")
+#define GOPHER_ABSTRACT_CATEGORY TEXT("+ABSTRACT")
+#define GOPHER_VERONICA_CATEGORY TEXT("+VERONICA")
+#define GOPHER_ADMIN_ATTRIBUTE TEXT("Admin")
+#define GOPHER_MOD_DATE_ATTRIBUTE TEXT("Mod-Date")
+#define GOPHER_TTL_ATTRIBUTE TEXT("TTL")
+#define GOPHER_SCORE_ATTRIBUTE TEXT("Score")
+#define GOPHER_RANGE_ATTRIBUTE TEXT("Score-range")
+#define GOPHER_SITE_ATTRIBUTE TEXT("Site")
+#define GOPHER_ORG_ATTRIBUTE TEXT("Org")
+#define GOPHER_LOCATION_ATTRIBUTE TEXT("Loc")
+#define GOPHER_GEOG_ATTRIBUTE TEXT("Geog")
+#define GOPHER_TIMEZONE_ATTRIBUTE TEXT("TZ")
+#define GOPHER_PROVIDER_ATTRIBUTE TEXT("Provider")
+#define GOPHER_VERSION_ATTRIBUTE TEXT("Version")
+#define GOPHER_ABSTRACT_ATTRIBUTE TEXT("Abstract")
+#define GOPHER_VIEW_ATTRIBUTE TEXT("View")
+#define GOPHER_TREEWALK_ATTRIBUTE TEXT("treewalk")
+#define GOPHER_ATTRIBUTE_ID_BASE 0xabcccc00
+#define GOPHER_CATEGORY_ID_ALL (GOPHER_ATTRIBUTE_ID_BASE+1)
+#define GOPHER_CATEGORY_ID_INFO (GOPHER_ATTRIBUTE_ID_BASE+2)
+#define GOPHER_CATEGORY_ID_ADMIN (GOPHER_ATTRIBUTE_ID_BASE+3)
+#define GOPHER_CATEGORY_ID_VIEWS (GOPHER_ATTRIBUTE_ID_BASE+4)
+#define GOPHER_CATEGORY_ID_ABSTRACT (GOPHER_ATTRIBUTE_ID_BASE+5)
+#define GOPHER_CATEGORY_ID_VERONICA (GOPHER_ATTRIBUTE_ID_BASE+6)
+#define GOPHER_CATEGORY_ID_ASK (GOPHER_ATTRIBUTE_ID_BASE+7)
+#define GOPHER_CATEGORY_ID_UNKNOWN (GOPHER_ATTRIBUTE_ID_BASE+8)
+#define GOPHER_ATTRIBUTE_ID_ALL (GOPHER_ATTRIBUTE_ID_BASE+9)
+#define GOPHER_ATTRIBUTE_ID_ADMIN (GOPHER_ATTRIBUTE_ID_BASE+10)
+#define GOPHER_ATTRIBUTE_ID_MOD_DATE (GOPHER_ATTRIBUTE_ID_BASE+11)
+#define GOPHER_ATTRIBUTE_ID_TTL (GOPHER_ATTRIBUTE_ID_BASE+12)
+#define GOPHER_ATTRIBUTE_ID_SCORE (GOPHER_ATTRIBUTE_ID_BASE+13)
+#define GOPHER_ATTRIBUTE_ID_RANGE (GOPHER_ATTRIBUTE_ID_BASE+14)
+#define GOPHER_ATTRIBUTE_ID_SITE (GOPHER_ATTRIBUTE_ID_BASE+15)
+#define GOPHER_ATTRIBUTE_ID_ORG (GOPHER_ATTRIBUTE_ID_BASE+16)
+#define GOPHER_ATTRIBUTE_ID_LOCATION (GOPHER_ATTRIBUTE_ID_BASE+17)
+#define GOPHER_ATTRIBUTE_ID_GEOG (GOPHER_ATTRIBUTE_ID_BASE+18)
+#define GOPHER_ATTRIBUTE_ID_TIMEZONE (GOPHER_ATTRIBUTE_ID_BASE+19)
+#define GOPHER_ATTRIBUTE_ID_PROVIDER (GOPHER_ATTRIBUTE_ID_BASE+20)
+#define GOPHER_ATTRIBUTE_ID_VERSION (GOPHER_ATTRIBUTE_ID_BASE+21)
+#define GOPHER_ATTRIBUTE_ID_ABSTRACT (GOPHER_ATTRIBUTE_ID_BASE+22)
+#define GOPHER_ATTRIBUTE_ID_VIEW (GOPHER_ATTRIBUTE_ID_BASE+23)
+#define GOPHER_ATTRIBUTE_ID_TREEWALK (GOPHER_ATTRIBUTE_ID_BASE+24)
+#define GOPHER_ATTRIBUTE_ID_UNKNOWN (GOPHER_ATTRIBUTE_ID_BASE+25)
+#define HTTP_MAJOR_VERSION 1
+#define HTTP_MINOR_VERSION 0
+#define HTTP_VERSION TEXT("HTTP/1.0")
+#define HTTP_QUERY_MIME_VERSION 0
+#define HTTP_QUERY_CONTENT_TYPE 1
+#define HTTP_QUERY_CONTENT_TRANSFER_ENCODING 2
+#define HTTP_QUERY_CONTENT_ID 3
+#define HTTP_QUERY_CONTENT_DESCRIPTION 4
+#define HTTP_QUERY_CONTENT_LENGTH 5
+#define HTTP_QUERY_CONTENT_LANGUAGE 6
+#define HTTP_QUERY_ALLOW 7
+#define HTTP_QUERY_PUBLIC 8
+#define HTTP_QUERY_DATE 9
+#define HTTP_QUERY_EXPIRES 10
+#define HTTP_QUERY_LAST_MODIFIED 11
+#define HTTP_QUERY_MESSAGE_ID 12
+#define HTTP_QUERY_URI 13
+#define HTTP_QUERY_DERIVED_FROM 14
+#define HTTP_QUERY_COST 15
+#define HTTP_QUERY_LINK 16
+#define HTTP_QUERY_PRAGMA 17
+#define HTTP_QUERY_VERSION 18
+#define HTTP_QUERY_STATUS_CODE 19
+#define HTTP_QUERY_STATUS_TEXT 20
+#define HTTP_QUERY_RAW_HEADERS 21
+#define HTTP_QUERY_RAW_HEADERS_CRLF 22
+#define HTTP_QUERY_CONNECTION 23
+#define HTTP_QUERY_ACCEPT 24
+#define HTTP_QUERY_ACCEPT_CHARSET 25
+#define HTTP_QUERY_ACCEPT_ENCODING 26
+#define HTTP_QUERY_ACCEPT_LANGUAGE 27
+#define HTTP_QUERY_AUTHORIZATION 28
+#define HTTP_QUERY_CONTENT_ENCODING 29
+#define HTTP_QUERY_FORWARDED 30
+#define HTTP_QUERY_FROM 31
+#define HTTP_QUERY_IF_MODIFIED_SINCE 32
+#define HTTP_QUERY_LOCATION 33
+#define HTTP_QUERY_ORIG_URI 34
+#define HTTP_QUERY_REFERER 35
+#define HTTP_QUERY_RETRY_AFTER 36
+#define HTTP_QUERY_SERVER 37
+#define HTTP_QUERY_TITLE 38
+#define HTTP_QUERY_USER_AGENT 39
+#define HTTP_QUERY_WWW_AUTHENTICATE 40
+#define HTTP_QUERY_PROXY_AUTHENTICATE 41
+#define HTTP_QUERY_ACCEPT_RANGES 42
+#define HTTP_QUERY_SET_COOKIE 43
+#define HTTP_QUERY_COOKIE 44
+#define HTTP_QUERY_REQUEST_METHOD 45
+#define HTTP_QUERY_MAX 45
+#define HTTP_QUERY_CUSTOM 65535
+#define HTTP_QUERY_FLAG_REQUEST_HEADERS 0x80000000
+#define HTTP_QUERY_FLAG_SYSTEMTIME 0x40000000
+#define HTTP_QUERY_FLAG_NUMBER 0x20000000
+#define HTTP_QUERY_FLAG_COALESCE 0x10000000
+#define HTTP_QUERY_MODIFIER_FLAGS_MASK (HTTP_QUERY_FLAG_REQUEST_HEADERS|HTTP_QUERY_FLAG_SYSTEMTIME|HTTP_QUERY_FLAG_NUMBER|HTTP_QUERY_FLAG_COALESCE)
+#define HTTP_QUERY_HEADER_MASK (~HTTP_QUERY_MODIFIER_FLAGS_MASK)
+#define HTTP_STATUS_OK 200
+#define HTTP_STATUS_CREATED 201
+#define HTTP_STATUS_ACCEPTED 202
+#define HTTP_STATUS_PARTIAL 203
+#define HTTP_STATUS_NO_CONTENT 204
+#define HTTP_STATUS_AMBIGUOUS 300
+#define HTTP_STATUS_MOVED 301
+#define HTTP_STATUS_REDIRECT 302
+#define HTTP_STATUS_REDIRECT_METHOD 303
+#define HTTP_STATUS_NOT_MODIFIED 304
+#define HTTP_STATUS_BAD_REQUEST 400
+#define HTTP_STATUS_DENIED 401
+#define HTTP_STATUS_PAYMENT_REQ 402
+#define HTTP_STATUS_FORBIDDEN 403
+#define HTTP_STATUS_NOT_FOUND 404
+#define HTTP_STATUS_BAD_METHOD 405
+#define HTTP_STATUS_NONE_ACCEPTABLE 406
+#define HTTP_STATUS_PROXY_AUTH_REQ 407
+#define HTTP_STATUS_REQUEST_TIMEOUT 408
+#define HTTP_STATUS_CONFLICT 409
+#define HTTP_STATUS_GONE 410
+#define HTTP_STATUS_AUTH_REFUSED 411
+#define HTTP_STATUS_SERVER_ERROR 500
+#define HTTP_STATUS_NOT_SUPPORTED 501
+#define HTTP_STATUS_BAD_GATEWAY 502
+#define HTTP_STATUS_SERVICE_UNAVAIL 503
+#define HTTP_STATUS_GATEWAY_TIMEOUT 504
+#define INTERNET_PREFETCH_PROGRESS 0
+#define INTERNET_PREFETCH_COMPLETE 1
+#define INTERNET_PREFETCH_ABORTED 2
+#define FLAGS_ERROR_UI_FILTER_FOR_ERRORS 0x01
+#define FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS 0x02
+#define FLAGS_ERROR_UI_FLAGS_GENERATE_DATA 0x04
+#define FLAGS_ERROR_UI_FLAGS_NO_UI 0x08
+#define HTTP_ADDREQ_INDEX_MASK 0x0000FFFF
+#define HTTP_ADDREQ_FLAGS_MASK 0xFFFF0000
+#define HTTP_ADDREQ_FLAG_ADD_IF_NEW 0x10000000
+#define HTTP_ADDREQ_FLAG_ADD 0x20000000
+#define HTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA 0x40000000
+#define HTTP_ADDREQ_FLAG_COALESCE_WITH_SEMICOLON 0x01000000
+#define HTTP_ADDREQ_FLAG_COALESCE HTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA
+#define HTTP_ADDREQ_FLAG_REPLACE 0x80000000
+#define INTERNET_ERROR_BASE 12000
+#define ERROR_INTERNET_OUT_OF_HANDLES (INTERNET_ERROR_BASE+1)
+#define ERROR_INTERNET_TIMEOUT (INTERNET_ERROR_BASE+2)
+#define ERROR_INTERNET_EXTENDED_ERROR (INTERNET_ERROR_BASE+3)
+#define ERROR_INTERNET_INTERNAL_ERROR (INTERNET_ERROR_BASE+4)
+#define ERROR_INTERNET_INVALID_URL (INTERNET_ERROR_BASE+5)
+#define ERROR_INTERNET_UNRECOGNIZED_SCHEME (INTERNET_ERROR_BASE+6)
+#define ERROR_INTERNET_NAME_NOT_RESOLVED (INTERNET_ERROR_BASE+7)
+#define ERROR_INTERNET_PROTOCOL_NOT_FOUND (INTERNET_ERROR_BASE+8)
+#define ERROR_INTERNET_INVALID_OPTION (INTERNET_ERROR_BASE+9)
+#define ERROR_INTERNET_BAD_OPTION_LENGTH (INTERNET_ERROR_BASE+10)
+#define ERROR_INTERNET_OPTION_NOT_SETTABLE (INTERNET_ERROR_BASE+11)
+#define ERROR_INTERNET_SHUTDOWN (INTERNET_ERROR_BASE+12)
+#define ERROR_INTERNET_INCORRECT_USER_NAME (INTERNET_ERROR_BASE+13)
+#define ERROR_INTERNET_INCORRECT_PASSWORD (INTERNET_ERROR_BASE+14)
+#define ERROR_INTERNET_LOGIN_FAILURE (INTERNET_ERROR_BASE+15)
+#define ERROR_INTERNET_INVALID_OPERATION (INTERNET_ERROR_BASE+16)
+#define ERROR_INTERNET_OPERATION_CANCELLED (INTERNET_ERROR_BASE+17)
+#define ERROR_INTERNET_INCORRECT_HANDLE_TYPE (INTERNET_ERROR_BASE+18)
+#define ERROR_INTERNET_INCORRECT_HANDLE_STATE (INTERNET_ERROR_BASE+19)
+#define ERROR_INTERNET_NOT_PROXY_REQUEST (INTERNET_ERROR_BASE+20)
+#define ERROR_INTERNET_REGISTRY_VALUE_NOT_FOUND (INTERNET_ERROR_BASE+21)
+#define ERROR_INTERNET_BAD_REGISTRY_PARAMETER (INTERNET_ERROR_BASE+22)
+#define ERROR_INTERNET_NO_DIRECT_ACCESS (INTERNET_ERROR_BASE+23)
+#define ERROR_INTERNET_NO_CONTEXT (INTERNET_ERROR_BASE+24)
+#define ERROR_INTERNET_NO_CALLBACK (INTERNET_ERROR_BASE+25)
+#define ERROR_INTERNET_REQUEST_PENDING (INTERNET_ERROR_BASE+26)
+#define ERROR_INTERNET_INCORRECT_FORMAT (INTERNET_ERROR_BASE+27)
+#define ERROR_INTERNET_ITEM_NOT_FOUND (INTERNET_ERROR_BASE+28)
+#define ERROR_INTERNET_CANNOT_CONNECT (INTERNET_ERROR_BASE+29)
+#define ERROR_INTERNET_CONNECTION_ABORTED (INTERNET_ERROR_BASE+30)
+#define ERROR_INTERNET_CONNECTION_RESET (INTERNET_ERROR_BASE+31)
+#define ERROR_INTERNET_FORCE_RETRY (INTERNET_ERROR_BASE+32)
+#define ERROR_INTERNET_INVALID_PROXY_REQUEST (INTERNET_ERROR_BASE+33)
+#define ERROR_INTERNET_NEED_UI (INTERNET_ERROR_BASE+34)
+#define ERROR_INTERNET_HANDLE_EXISTS (INTERNET_ERROR_BASE+36)
+#define ERROR_INTERNET_SEC_CERT_DATE_INVALID (INTERNET_ERROR_BASE+37)
+#define ERROR_INTERNET_SEC_CERT_CN_INVALID (INTERNET_ERROR_BASE+38)
+#define ERROR_INTERNET_HTTP_TO_HTTPS_ON_REDIR (INTERNET_ERROR_BASE+39)
+#define ERROR_INTERNET_HTTPS_TO_HTTP_ON_REDIR (INTERNET_ERROR_BASE+40)
+#define ERROR_INTERNET_MIXED_SECURITY (INTERNET_ERROR_BASE+41)
+#define ERROR_INTERNET_CHG_POST_IS_NON_SECURE (INTERNET_ERROR_BASE+42)
+#define ERROR_INTERNET_POST_IS_NON_SECURE (INTERNET_ERROR_BASE+43)
+#define ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED (INTERNET_ERROR_BASE+44)
+#define ERROR_INTERNET_INVALID_CA (INTERNET_ERROR_BASE+45)
+#define ERROR_INTERNET_CLIENT_AUTH_NOT_SETUP (INTERNET_ERROR_BASE+46)
+#define ERROR_INTERNET_ASYNC_THREAD_FAILED (INTERNET_ERROR_BASE+47)
+#define ERROR_INTERNET_REDIRECT_SCHEME_CHANGE (INTERNET_ERROR_BASE+48)
+#define ERROR_FTP_TRANSFER_IN_PROGRESS (INTERNET_ERROR_BASE+110)
+#define ERROR_FTP_DROPPED (INTERNET_ERROR_BASE+111)
+#define ERROR_GOPHER_PROTOCOL_ERROR (INTERNET_ERROR_BASE+130)
+#define ERROR_GOPHER_NOT_FILE (INTERNET_ERROR_BASE+131)
+#define ERROR_GOPHER_DATA_ERROR (INTERNET_ERROR_BASE+132)
+#define ERROR_GOPHER_END_OF_DATA (INTERNET_ERROR_BASE+133)
+#define ERROR_GOPHER_INVALID_LOCATOR (INTERNET_ERROR_BASE+134)
+#define ERROR_GOPHER_INCORRECT_LOCATOR_TYPE (INTERNET_ERROR_BASE+135)
+#define ERROR_GOPHER_NOT_GOPHER_PLUS (INTERNET_ERROR_BASE+136)
+#define ERROR_GOPHER_ATTRIBUTE_NOT_FOUND (INTERNET_ERROR_BASE+137)
+#define ERROR_GOPHER_UNKNOWN_LOCATOR (INTERNET_ERROR_BASE+138)
+#define ERROR_HTTP_HEADER_NOT_FOUND (INTERNET_ERROR_BASE+150)
+#define ERROR_HTTP_DOWNLEVEL_SERVER (INTERNET_ERROR_BASE+151)
+#define ERROR_HTTP_INVALID_SERVER_RESPONSE (INTERNET_ERROR_BASE+152)
+#define ERROR_HTTP_INVALID_HEADER (INTERNET_ERROR_BASE+153)
+#define ERROR_HTTP_INVALID_QUERY_REQUEST (INTERNET_ERROR_BASE+154)
+#define ERROR_HTTP_HEADER_ALREADY_EXISTS (INTERNET_ERROR_BASE+155)
+#define ERROR_HTTP_REDIRECT_FAILED (INTERNET_ERROR_BASE+156)
+#define ERROR_HTTP_NOT_REDIRECTED (INTERNET_ERROR_BASE+160)
+#define ERROR_INTERNET_SECURITY_CHANNEL_ERROR (INTERNET_ERROR_BASE+157)
+#define ERROR_INTERNET_UNABLE_TO_CACHE_FILE (INTERNET_ERROR_BASE+158)
+#define ERROR_INTERNET_TCPIP_NOT_INSTALLED (INTERNET_ERROR_BASE+159)
+#define INTERNET_ERROR_LAST ERROR_INTERNET_TCPIP_NOT_INSTALLED
+#define URLCACHEAPI DECLSPEC_IMPORT
+#define NORMAL_CACHE_ENTRY 1
+#define STABLE_CACHE_ENTRY 2
+#define STICKY_CACHE_ENTRY 4
+#define SPARSE_CACHE_ENTRY 0x10000
+#define OCX_CACHE_ENTRY 0x20000
+#define COOKIE_CACHE_ENTRY 0x100000
+#define URLHISTORY_CACHE_ENTRY 0x200000
+#define CACHE_ENTRY_ATTRIBUTE_FC 4
+#define CACHE_ENTRY_HITRATE_FC 0x10
+#define CACHE_ENTRY_MODTIME_FC 0x40
+#define CACHE_ENTRY_EXPTIME_FC 0x80
+#define CACHE_ENTRY_ACCTIME_FC 0x100
+#define CACHE_ENTRY_SYNCTIME_FC 0x200
+#define CACHE_ENTRY_HEADERINFO_FC 0x400
+#define IRF_ASYNC WININET_API_FLAG_ASYNC
+#define IRF_SYNC WININET_API_FLAG_SYNC
+#define IRF_USE_CONTEXT WININET_API_FLAG_USE_CONTEXT
+#define IRF_NO_WAIT 8
+#define HSR_ASYNC WININET_API_FLAG_ASYNC
+#define HSR_SYNC WININET_API_FLAG_SYNC
+#define HSR_USE_CONTEXT WININET_API_FLAG_USE_CONTEXT
+#define HSR_INITIATE 8
+#define HSR_DOWNLOAD 16
+#define HSR_CHUNKED 32
+#define INTERNET_DIAL_UNATTENDED 0x8000
+#define INTERNET_DIALSTATE_DISCONNECTED 1
+#define INTERENT_GOONLINE_REFRESH 1
+#define INTERENT_GOONLINE_MASK 1
+#define INTERNET_AUTODIAL_FORCE_ONLINE 1
+#define INTERNET_AUTODIAL_FORCE_UNATTENDED 2
+#define INTERNET_AUTODIAL_FAILIFSECURITYCHECK 4
+#define INTERNET_CONNECTION_MODEM 0x01
+#define INTERNET_CONNECTION_LAN 0x02
+#define INTERNET_CONNECTION_PROXY 0x04
+#define INTERNET_CONNECTION_MODEM_BUSY 0x08
+#define INTERNET_RAS_INSTALLED 0x10
+#define INTERNET_CONNECTION_OFFLINE 0x20
+#define INTERNET_CONNECTION_CONFIGURED 0x40
+#define CACHEGROUP_SEARCH_ALL 0
+#define CACHEGROUP_SEARCH_BYURL 1
+#define INTERNET_CACHE_GROUP_ADD 0
+#define INTERNET_CACHE_GROUP_REMOVE 1
+#define WININET_API_FLAG_ASYNC 0x00000001 /* Force asynchronous operations. */
+#define WININET_API_FLAG_SYNC 0x00000004 /* Force synchronous operations. */
+#define WININET_API_FLAG_USE_CONTEXT 0x00000008 /* Force the API to use the context value, even if it is set to zero. */
+
+#define INTERNET_STATE_CONNECTED 0x0001
+#define INTERNET_STATE_DISCONNECTED 0x0002
+#define INTERNET_STATE_DISCONNECTED_BY_USER 0x0010
+#define INTERNET_STATE_IDLE 0x0100
+#define INTERNET_STATE_BUSY 0x0200
+
+#ifndef RC_INVOKED
+typedef PVOID HINTERNET;
+typedef HINTERNET *LPHINTERNET;
+typedef LONGLONG GROUPID;
+typedef WORD INTERNET_PORT,*LPINTERNET_PORT;
+typedef enum {
+ INTERNET_SCHEME_PARTIAL = -2, INTERNET_SCHEME_UNKNOWN = -1,
+ 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_FIRST = INTERNET_SCHEME_FTP, INTERNET_SCHEME_LAST = INTERNET_SCHEME_SOCKS
+} INTERNET_SCHEME,*LPINTERNET_SCHEME;
+typedef struct { DWORD dwResult; DWORD dwError; } INTERNET_ASYNC_RESULT,*LPINTERNET_ASYNC_RESULT;
+typedef struct { DWORD dwStatus; DWORD dwSize; } INTERNET_PREFETCH_STATUS,*LPINTERNET_PREFETCH_STATUS;
+typedef struct {
+ DWORD dwAccessType;
+ LPCTSTR lpszProxy;
+ LPCTSTR lpszProxyBypass;
+} INTERNET_PROXY_INFO,*LPINTERNET_PROXY_INFO;
+typedef struct {
+ DWORD dwMajorVersion;
+ DWORD dwMinorVersion;
+} INTERNET_VERSION_INFO,*LPINTERNET_VERSION_INFO;
+typedef struct {
+ DWORD dwStructSize;
+ LPSTR lpszScheme;
+ DWORD dwSchemeLength;
+ INTERNET_SCHEME nScheme;
+ LPSTR lpszHostName;
+ DWORD dwHostNameLength;
+ INTERNET_PORT nPort;
+ LPSTR lpszUserName;
+ DWORD dwUserNameLength;
+ LPSTR lpszPassword;
+ DWORD dwPasswordLength;
+ LPSTR lpszUrlPath;
+ DWORD dwUrlPathLength;
+ LPSTR lpszExtraInfo;
+ DWORD dwExtraInfoLength;
+} URL_COMPONENTSA,*LPURL_COMPONENTSA;
+typedef struct {
+ DWORD dwStructSize;
+ LPWSTR lpszScheme;
+ DWORD dwSchemeLength;
+ INTERNET_SCHEME nScheme;
+ LPWSTR lpszHostName;
+ DWORD dwHostNameLength;
+ INTERNET_PORT nPort;
+ LPWSTR lpszUserName;
+ DWORD dwUserNameLength;
+ LPWSTR lpszPassword;
+ DWORD dwPasswordLength;
+ LPWSTR lpszUrlPath;
+ DWORD dwUrlPathLength;
+ LPWSTR lpszExtraInfo;
+ DWORD dwExtraInfoLength;
+} URL_COMPONENTSW,*LPURL_COMPONENTSW;
+typedef struct {
+ FILETIME ftExpiry;
+ FILETIME ftStart;
+ LPTSTR lpszSubjectInfo;
+ LPTSTR lpszIssuerInfo;
+ LPTSTR lpszProtocolName;
+ LPTSTR lpszSignatureAlgName;
+ LPTSTR lpszEncryptionAlgName;
+ DWORD dwKeySize;
+} INTERNET_CERTIFICATE_INFO,*LPINTERNET_CERTIFICATE_INFO;
+typedef VOID (CALLBACK * INTERNET_STATUS_CALLBACK)(HINTERNET,DWORD,DWORD,PVOID,DWORD);
+typedef INTERNET_STATUS_CALLBACK * LPINTERNET_STATUS_CALLBACK;
+typedef struct {
+ CHAR DisplayString[MAX_GOPHER_DISPLAY_TEXT+1];
+ DWORD GopherType;
+ DWORD SizeLow;
+ DWORD SizeHigh;
+ FILETIME LastModificationTime;
+ CHAR Locator[MAX_GOPHER_LOCATOR_LENGTH+1];
+} GOPHER_FIND_DATAA,*LPGOPHER_FIND_DATAA;
+typedef struct {
+ WCHAR DisplayString[MAX_GOPHER_DISPLAY_TEXT+1];
+ DWORD GopherType;
+ DWORD SizeLow;
+ DWORD SizeHigh;
+ FILETIME LastModificationTime;
+ WCHAR Locator[MAX_GOPHER_LOCATOR_LENGTH+1];
+} GOPHER_FIND_DATAW,*LPGOPHER_FIND_DATAW;
+typedef struct {
+ LPCTSTR Comment;
+ LPCTSTR EmailAddress;
+} GOPHER_ADMIN_ATTRIBUTE_TYPE,*LPGOPHER_ADMIN_ATTRIBUTE_TYPE;
+typedef struct {FILETIME DateAndTime;} GOPHER_MOD_DATE_ATTRIBUTE_TYPE,*LPGOPHER_MOD_DATE_ATTRIBUTE_TYPE;
+typedef struct {DWORD Ttl;} GOPHER_TTL_ATTRIBUTE_TYPE,*LPGOPHER_TTL_ATTRIBUTE_TYPE;
+typedef struct {INT Score;} GOPHER_SCORE_ATTRIBUTE_TYPE,*LPGOPHER_SCORE_ATTRIBUTE_TYPE;
+typedef struct {
+ INT LowerBound;
+ INT UpperBound;
+} GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE,*LPGOPHER_SCORE_RANGE_ATTRIBUTE_TYPE;
+typedef struct {LPCTSTR Site;} GOPHER_SITE_ATTRIBUTE_TYPE,*LPGOPHER_SITE_ATTRIBUTE_TYPE;
+typedef struct {LPCTSTR Organization;} GOPHER_ORGANIZATION_ATTRIBUTE_TYPE,*LPGOPHER_ORGANIZATION_ATTRIBUTE_TYPE;
+typedef struct {LPCTSTR Location;} GOPHER_LOCATION_ATTRIBUTE_TYPE,*LPGOPHER_LOCATION_ATTRIBUTE_TYPE;
+typedef struct {
+ INT DegreesNorth;
+ INT MinutesNorth;
+ INT SecondsNorth;
+ INT DegreesEast;
+ INT MinutesEast;
+ INT SecondsEast;
+} GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE,*LPGOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE;
+typedef struct {INT Zone;} GOPHER_TIMEZONE_ATTRIBUTE_TYPE,*LPGOPHER_TIMEZONE_ATTRIBUTE_TYPE;
+typedef struct {LPCTSTR Provider;} GOPHER_PROVIDER_ATTRIBUTE_TYPE,*LPGOPHER_PROVIDER_ATTRIBUTE_TYPE;
+typedef struct {LPCTSTR Version;} GOPHER_VERSION_ATTRIBUTE_TYPE,*LPGOPHER_VERSION_ATTRIBUTE_TYPE;
+typedef struct {
+ LPCTSTR ShortAbstract;
+ LPCTSTR AbstractFile;
+} GOPHER_ABSTRACT_ATTRIBUTE_TYPE,*LPGOPHER_ABSTRACT_ATTRIBUTE_TYPE;
+typedef struct {
+ LPCTSTR ContentType;
+ LPCTSTR Language;
+ DWORD Size;
+} GOPHER_VIEW_ATTRIBUTE_TYPE,*LPGOPHER_VIEW_ATTRIBUTE_TYPE;
+typedef struct {BOOL TreeWalk;} GOPHER_VERONICA_ATTRIBUTE_TYPE,*LPGOPHER_VERONICA_ATTRIBUTE_TYPE;
+typedef struct {
+ LPCTSTR QuestionType;
+ LPCTSTR QuestionText;
+} GOPHER_ASK_ATTRIBUTE_TYPE,*LPGOPHER_ASK_ATTRIBUTE_TYPE;
+typedef struct {LPCTSTR Text;} GOPHER_UNKNOWN_ATTRIBUTE_TYPE,*LPGOPHER_UNKNOWN_ATTRIBUTE_TYPE;
+typedef struct {
+ DWORD CategoryId;
+ DWORD AttributeId;
+ union {
+ GOPHER_ADMIN_ATTRIBUTE_TYPE Admin;
+ GOPHER_MOD_DATE_ATTRIBUTE_TYPE ModDate;
+ GOPHER_TTL_ATTRIBUTE_TYPE Ttl;
+ GOPHER_SCORE_ATTRIBUTE_TYPE Score;
+ GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE ScoreRange;
+ GOPHER_SITE_ATTRIBUTE_TYPE Site;
+ GOPHER_ORGANIZATION_ATTRIBUTE_TYPE Organization;
+ GOPHER_LOCATION_ATTRIBUTE_TYPE Location;
+ GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE GeographicalLocation;
+ GOPHER_TIMEZONE_ATTRIBUTE_TYPE TimeZone;
+ GOPHER_PROVIDER_ATTRIBUTE_TYPE Provider;
+ GOPHER_VERSION_ATTRIBUTE_TYPE Version;
+ GOPHER_ABSTRACT_ATTRIBUTE_TYPE Abstract;
+ GOPHER_VIEW_ATTRIBUTE_TYPE View;
+ GOPHER_VERONICA_ATTRIBUTE_TYPE Veronica;
+ GOPHER_ASK_ATTRIBUTE_TYPE Ask;
+ GOPHER_UNKNOWN_ATTRIBUTE_TYPE Unknown;
+ } AttributeType;
+} GOPHER_ATTRIBUTE_TYPE,*LPGOPHER_ATTRIBUTE_TYPE;
+typedef BOOL(CALLBACK *GOPHER_ATTRIBUTE_ENUMERATOR)(LPGOPHER_ATTRIBUTE_TYPE,DWORD);
+typedef struct _INTERNET_CACHE_ENTRY_INFOA {
+ DWORD dwStructSize;
+ LPSTR lpszSourceUrlName;
+ LPSTR lpszLocalFileName;
+ DWORD CacheEntryType;
+ DWORD dwUseCount;
+ DWORD dwHitRate;
+ DWORD dwSizeLow;
+ DWORD dwSizeHigh;
+ FILETIME LastModifiedTime;
+ FILETIME ExpireTime;
+ FILETIME LastAccessTime;
+ FILETIME LastSyncTime;
+ PBYTE lpHeaderInfo;
+ DWORD dwHeaderInfoSize;
+ LPSTR lpszFileExtension;
+ DWORD dwReserved;
+} INTERNET_CACHE_ENTRY_INFOA,*LPINTERNET_CACHE_ENTRY_INFOA;
+typedef struct _INTERNET_CACHE_ENTRY_INFOW {
+ DWORD dwStructSize;
+ LPWSTR lpszSourceUrlName;
+ LPWSTR lpszLocalFileName;
+ DWORD CacheEntryType;
+ DWORD dwUseCount;
+ DWORD dwHitRate;
+ DWORD dwSizeLow;
+ DWORD dwSizeHigh;
+ FILETIME LastModifiedTime;
+ FILETIME ExpireTime;
+ FILETIME LastAccessTime;
+ FILETIME LastSyncTime;
+ PBYTE lpHeaderInfo;
+ DWORD dwHeaderInfoSize;
+ LPWSTR lpszFileExtension;
+ DWORD dwReserved;
+} INTERNET_CACHE_ENTRY_INFOW,*LPINTERNET_CACHE_ENTRY_INFOW;
+typedef struct _INTERNET_BUFFERSA {
+ DWORD dwStructSize;
+ struct _INTERNET_BUFFERSA *Next;
+ LPCSTR lpcszHeader;
+ DWORD dwHeadersLength;
+ DWORD dwHeadersTotal;
+ LPVOID lpvBuffer;
+ DWORD dwBufferLength;
+ DWORD dwBufferTotal;
+ DWORD dwOffsetLow;
+ DWORD dwOffsetHigh;
+} INTERNET_BUFFERSA,*LPINTERNET_BUFFERSA;
+typedef struct _INTERNET_BUFFERSW {
+ DWORD dwStructSize;
+ struct _INTERNET_BUFFERS *Next;
+ LPCWSTR lpcszHeader;
+ DWORD dwHeadersLength;
+ DWORD dwHeadersTotal;
+ LPVOID lpvBuffer;
+ DWORD dwBufferLength;
+ DWORD dwBufferTotal;
+ DWORD dwOffsetLow;
+ DWORD dwOffsetHigh;
+} INTERNET_BUFFERSW,*LPINTERNET_BUFFERSW;
+
+#define GROUP_OWNER_STORAGE_SIZE 4
+#define GROUPNAME_MAX_LENGTH 120
+typedef struct _INTERNET_CACHE_GROUP_INFOA {
+ DWORD dwGroupSize;
+ DWORD dwGroupFlags;
+ DWORD dwGroupType;
+ DWORD dwDiskUsage;
+ DWORD dwDiskQuota;
+ DWORD dwOwnerStorage[GROUP_OWNER_STORAGE_SIZE];
+ CHAR szGroupName[GROUPNAME_MAX_LENGTH];
+} INTERNET_CACHE_GROUP_INFOA, * LPINTERNET_CACHE_GROUP_INFOA;
+typedef struct _INTERNET_CACHE_GROUP_INFOW {
+ DWORD dwGroupSize;
+ DWORD dwGroupFlags;
+ DWORD dwGroupType;
+ DWORD dwDiskUsage;
+ DWORD dwDiskQuota;
+ DWORD dwOwnerStorage[GROUP_OWNER_STORAGE_SIZE];
+ WCHAR szGroupName[GROUPNAME_MAX_LENGTH];
+} INTERNET_CACHE_GROUP_INFOW, * LPINTERNET_CACHE_GROUP_INFOW;
+typedef struct {
+ DWORD dwConnectedState;
+ DWORD dwFlags;
+} INTERNET_CONNECTED_INFO, * LPINTERNET_CONNECTED_INFO;
+
+#ifdef UNICODE
+typedef URL_COMPONENTSW URL_COMPONENTS;
+typedef LPURL_COMPONENTSW LPURL_COMPONENTS;
+typedef GOPHER_FIND_DATAW GOPHER_FIND_DATA;
+typedef LPGOPHER_FIND_DATAW LPGOPHER_FIND_DATA;
+typedef INTERNET_CACHE_ENTRY_INFOW INTERNET_CACHE_ENTRY_INFO;
+typedef LPINTERNET_CACHE_ENTRY_INFOW LPINTERNET_CACHE_ENTRY_INFO;
+typedef INTERNET_BUFFERSW INTERNET_BUFFERS,*LPINTERNET_BUFFERS;
+typedef INTERNET_CACHE_GROUP_INFOW INTERNET_CACHE_GROUP_INFO;
+typedef LPINTERNET_CACHE_GROUP_INFOW LPINTERNET_CACHE_GROUP_INFO;
+#else
+typedef URL_COMPONENTSA URL_COMPONENTS;
+typedef LPURL_COMPONENTSA LPURL_COMPONENTS;
+typedef GOPHER_FIND_DATAA GOPHER_FIND_DATA;
+typedef LPGOPHER_FIND_DATAA LPGOPHER_FIND_DATA;
+typedef INTERNET_CACHE_ENTRY_INFOA INTERNET_CACHE_ENTRY_INFO;
+typedef LPINTERNET_CACHE_ENTRY_INFOA LPINTERNET_CACHE_ENTRY_INFO;
+typedef INTERNET_BUFFERSA INTERNET_BUFFERS,*LPINTERNET_BUFFERS;
+typedef INTERNET_CACHE_GROUP_INFOA INTERNET_CACHE_GROUP_INFO;
+typedef LPINTERNET_CACHE_GROUP_INFOA LPINTERNET_CACHE_GROUP_INFO;
+#endif
+BOOL WINAPI InternetTimeFromSystemTime(SYSTEMTIME*,DWORD,LPSTR,DWORD);
+BOOL WINAPI InternetTimeToSystemTime(LPCSTR,SYSTEMTIME*,DWORD);
+BOOL WINAPI InternetDebugGetLocalTime(SYSTEMTIME*,PDWORD);
+BOOL WINAPI InternetCrackUrlA(LPCSTR,DWORD,DWORD,LPURL_COMPONENTSA);
+BOOL WINAPI InternetCrackUrlW(LPCWSTR,DWORD,DWORD,LPURL_COMPONENTSW);
+BOOL WINAPI InternetCreateUrlA(LPURL_COMPONENTSA,DWORD,LPSTR,PDWORD);
+BOOL WINAPI InternetCreateUrlW(LPURL_COMPONENTSW,DWORD,LPWSTR,PDWORD);
+BOOL WINAPI InternetCanonicalizeUrlA(LPCSTR,LPSTR,PDWORD,DWORD);
+BOOL WINAPI InternetCanonicalizeUrlW(LPCWSTR,LPWSTR,PDWORD,DWORD);
+BOOL WINAPI InternetCheckConnectionA(LPCSTR,DWORD,DWORD);
+BOOL WINAPI InternetCheckConnectionW(LPCWSTR,DWORD,DWORD);
+BOOL WINAPI InternetCombineUrlA(LPCSTR,LPCSTR,LPSTR,PDWORD,DWORD);
+BOOL WINAPI InternetCombineUrlW(LPCWSTR,LPCWSTR,LPWSTR,PDWORD,DWORD);
+HINTERNET WINAPI InternetOpenA(LPCSTR,DWORD,LPCSTR,LPCSTR,DWORD);
+HINTERNET WINAPI InternetOpenW(LPCWSTR,DWORD,LPCWSTR,LPCWSTR,DWORD);
+BOOL WINAPI InternetCloseHandle(HINTERNET);
+HINTERNET WINAPI InternetConnectA(HINTERNET,LPCSTR,INTERNET_PORT,LPCSTR,LPCSTR,DWORD,DWORD,DWORD);
+HINTERNET WINAPI InternetConnectW(HINTERNET,LPCWSTR,INTERNET_PORT,LPCWSTR,LPCWSTR,DWORD,DWORD,DWORD);
+HINTERNET WINAPI InternetOpenUrlA(HINTERNET,LPCSTR,LPCSTR,DWORD,DWORD,DWORD);
+HINTERNET WINAPI InternetOpenUrlW(HINTERNET,LPCWSTR,LPCWSTR,DWORD,DWORD,DWORD);
+BOOL WINAPI InternetReadFile(HINTERNET,PVOID,DWORD,PDWORD);
+DWORD WINAPI InternetSetFilePointer( HINTERNET,LONG,PVOID,DWORD,DWORD);
+BOOL WINAPI InternetWriteFile(HINTERNET,LPCVOID,DWORD,PDWORD);
+BOOL WINAPI InternetQueryDataAvailable( HINTERNET,PDWORD,DWORD,DWORD);
+BOOL WINAPI InternetFindNextFileA(HINTERNET,PVOID);
+BOOL WINAPI InternetFindNextFileW(HINTERNET,PVOID);
+BOOL WINAPI InternetQueryOptionA(HINTERNET,DWORD,PVOID,PDWORD);
+BOOL WINAPI InternetQueryOptionW(HINTERNET,DWORD,PVOID,PDWORD);
+BOOL WINAPI InternetSetOptionA(HINTERNET,DWORD,PVOID,DWORD);
+BOOL WINAPI InternetSetOptionW(HINTERNET,DWORD,PVOID,DWORD);
+BOOL WINAPI InternetSetOptionExA(HINTERNET,DWORD,PVOID,DWORD,DWORD);
+BOOL WINAPI InternetSetOptionExW(HINTERNET,DWORD,PVOID,DWORD,DWORD);
+BOOL WINAPI InternetGetLastResponseInfoA(PDWORD,LPSTR,PDWORD);
+BOOL WINAPI InternetGetLastResponseInfoW(PDWORD,LPWSTR,PDWORD);
+INTERNET_STATUS_CALLBACK WINAPI InternetSetStatusCallback(HINTERNET,INTERNET_STATUS_CALLBACK);
+DWORD WINAPI FtpGetFileSize(HINTERNET,LPDWORD);
+HINTERNET WINAPI FtpFindFirstFileA(HINTERNET,LPCSTR,LPWIN32_FIND_DATA,DWORD,DWORD);
+HINTERNET WINAPI FtpFindFirstFileW(HINTERNET,LPCWSTR,LPWIN32_FIND_DATA,DWORD,DWORD);
+BOOL WINAPI FtpGetFileA(HINTERNET,LPCSTR,LPCSTR,BOOL,DWORD,DWORD,DWORD);
+BOOL WINAPI FtpGetFileW( HINTERNET,LPCWSTR,LPCWSTR,BOOL,DWORD,DWORD,DWORD);
+BOOL WINAPI FtpPutFileA(HINTERNET,LPCSTR,LPCSTR,DWORD,DWORD);
+BOOL WINAPI FtpPutFileW(HINTERNET,LPCWSTR,LPCWSTR,DWORD,DWORD);
+BOOL WINAPI FtpDeleteFileA(HINTERNET,LPCSTR);
+BOOL WINAPI FtpDeleteFileW(HINTERNET,LPCWSTR);
+BOOL WINAPI FtpRenameFileA(HINTERNET, LPCSTR,LPCSTR);
+BOOL WINAPI FtpRenameFileW(HINTERNET,LPCWSTR,LPCWSTR);
+HINTERNET WINAPI FtpOpenFileA(HINTERNET,LPCSTR,DWORD,DWORD,DWORD);
+HINTERNET WINAPI FtpOpenFileW(HINTERNET,LPCWSTR,DWORD,DWORD,DWORD);
+BOOL WINAPI FtpCreateDirectoryA(HINTERNET,LPCSTR);
+BOOL WINAPI FtpCreateDirectoryW(HINTERNET,LPCWSTR);
+BOOL WINAPI FtpRemoveDirectoryA(HINTERNET,LPCSTR);
+BOOL WINAPI FtpRemoveDirectoryW(HINTERNET,LPCWSTR);
+BOOL WINAPI FtpSetCurrentDirectoryA(HINTERNET,LPCSTR);
+BOOL WINAPI FtpSetCurrentDirectoryW(HINTERNET,LPCWSTR);
+BOOL WINAPI FtpGetCurrentDirectoryA(HINTERNET,LPSTR,PDWORD);
+BOOL WINAPI FtpGetCurrentDirectoryW(HINTERNET,LPWSTR,PDWORD);
+BOOL WINAPI FtpCommandA(HINTERNET,BOOL,DWORD,LPCSTR,DWORD_PTR,HINTERNET*);
+BOOL WINAPI FtpCommandW(HINTERNET,BOOL,DWORD,LPCWSTR,DWORD_PTR,HINTERNET*);
+BOOL WINAPI GopherCreateLocatorA(LPCSTR,INTERNET_PORT,LPCSTR,LPCSTR,DWORD,LPSTR,PDWORD);
+BOOL WINAPI GopherCreateLocatorW(LPCWSTR,INTERNET_PORT,LPCWSTR,LPCWSTR,DWORD,LPWSTR,PDWORD);
+BOOL WINAPI GopherGetLocatorTypeA(LPCSTR,PDWORD);
+BOOL WINAPI GopherGetLocatorTypeW(LPCWSTR,PDWORD);
+HINTERNET WINAPI GopherFindFirstFileA(HINTERNET,LPCSTR,LPCSTR,LPGOPHER_FIND_DATAA,DWORD,DWORD);
+HINTERNET WINAPI GopherFindFirstFileW(HINTERNET,LPCWSTR,LPCWSTR,LPGOPHER_FIND_DATAW,DWORD,DWORD);
+HINTERNET WINAPI GopherOpenFileA(HINTERNET,LPCSTR,LPCSTR,DWORD,DWORD);
+HINTERNET WINAPI GopherOpenFileW(HINTERNET,LPCWSTR,LPCWSTR,DWORD,DWORD);
+BOOL WINAPI GopherGetAttributeA(HINTERNET,LPCSTR,LPCSTR,LPBYTE,DWORD,PDWORD,GOPHER_ATTRIBUTE_ENUMERATOR,DWORD);
+BOOL WINAPI GopherGetAttributeW(HINTERNET,LPCWSTR,
+LPCWSTR, LPBYTE, DWORD, PDWORD, GOPHER_ATTRIBUTE_ENUMERATOR, DWORD);
+HINTERNET WINAPI HttpOpenRequestA(HINTERNET,LPCSTR,LPCSTR,LPCSTR,LPCSTR,LPCSTR *,DWORD,DWORD);
+HINTERNET WINAPI HttpOpenRequestW(HINTERNET,LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR FAR * lplpszAcceptTypes , DWORD dwFlags, DWORD dwContext);
+BOOL WINAPI HttpAddRequestHeadersA(HINTERNET,LPCSTR,DWORD,DWORD);
+BOOL WINAPI HttpAddRequestHeadersW(HINTERNET,LPCWSTR,DWORD,DWORD);
+BOOL WINAPI HttpSendRequestA(HINTERNET,LPCSTR,DWORD,PVOID,DWORD);
+BOOL WINAPI HttpSendRequestW(HINTERNET,LPCWSTR,DWORD,PVOID,DWORD);
+BOOL WINAPI HttpQueryInfoA(HINTERNET,DWORD,PVOID,PDWORD,PDWORD);
+BOOL WINAPI HttpQueryInfoW(HINTERNET,DWORD,PVOID,PDWORD,PDWORD);
+BOOL WINAPI InternetSetCookieA(LPCSTR,LPCSTR,LPCSTR);
+BOOL WINAPI InternetSetCookieW(LPCSTR,LPCWSTR,LPCWSTR);
+BOOL WINAPI InternetGetCookieA(LPCSTR,LPCSTR,LPSTR,PDWORD);
+BOOL WINAPI InternetGetCookieW(LPCSTR,LPCWSTR,LPWSTR,PDWORD);
+DWORD WINAPI InternetAttemptConnect(DWORD);
+DWORD WINAPI InternetErrorDlg(HWND,HINTERNET,DWORD,DWORD,PVOID *);
+DWORD WINAPI InternetConfirmZoneCrossing(HWND,LPSTR,LPSTR,BOOL);
+BOOL WINAPI CreateUrlCacheEntryA(LPCSTR,DWORD,LPCSTR,LPSTR,DWORD);
+BOOL WINAPI CreateUrlCacheEntryW(LPCSTR,DWORD,LPCSTR,LPWSTR,DWORD);
+BOOL WINAPI CommitUrlCacheEntryA(LPCSTR,LPCSTR,FILETIME,FILETIME,DWORD,LPBYTE,DWORD,LPCSTR,DWORD);
+BOOL WINAPI CommitUrlCacheEntryW(LPCSTR,LPCWSTR,FILETIME,FILETIME,DWORD,LPBYTE,DWORD,LPCWSTR,DWORD);
+BOOL WINAPI RetrieveUrlCacheEntryFileA(LPCSTR,LPINTERNET_CACHE_ENTRY_INFOA,PDWORD,DWORD);
+BOOL WINAPI RetrieveUrlCacheEntryFileW(LPCSTR,LPINTERNET_CACHE_ENTRY_INFOW,PDWORD,DWORD);
+BOOL WINAPI UnlockUrlCacheEntryFile(LPCSTR,DWORD);
+HANDLE WINAPI RetrieveUrlCacheEntryStreamA(LPCSTR,LPINTERNET_CACHE_ENTRY_INFOA,PDWORD,BOOL,DWORD);
+HANDLE WINAPI RetrieveUrlCacheEntryStreamW( LPCSTR,LPINTERNET_CACHE_ENTRY_INFOW,PDWORD,BOOL,DWORD);
+BOOL WINAPI ReadUrlCacheEntryStream(HANDLE,DWORD,PVOID,PDWORD,DWORD);
+BOOL WINAPI UnlockUrlCacheEntryStream( HANDLE,DWORD);
+BOOL WINAPI GetUrlCacheEntryInfoA(LPCSTR,LPINTERNET_CACHE_ENTRY_INFOA,PDWORD);
+BOOL WINAPI GetUrlCacheEntryInfoW(LPCSTR,LPINTERNET_CACHE_ENTRY_INFOW,PDWORD);
+BOOL WINAPI SetUrlCacheEntryInfoA(LPCSTR,LPINTERNET_CACHE_ENTRY_INFOA,DWORD);
+BOOL WINAPI SetUrlCacheEntryInfoW(LPCSTR,LPINTERNET_CACHE_ENTRY_INFOW,DWORD);
+HANDLE WINAPI FindFirstUrlCacheEntryA(LPCSTR,LPINTERNET_CACHE_ENTRY_INFOA,PDWORD);
+HANDLE WINAPI FindFirstUrlCacheEntryW(LPCSTR,LPINTERNET_CACHE_ENTRY_INFOW,PDWORD);
+BOOL WINAPI FindNextUrlCacheEntryA(HANDLE,LPINTERNET_CACHE_ENTRY_INFOA,PDWORD);
+BOOL WINAPI FindNextUrlCacheEntryW(HANDLE,LPINTERNET_CACHE_ENTRY_INFOW,PDWORD);
+BOOL WINAPI FindCloseUrlCache(HANDLE);
+BOOL WINAPI DeleteUrlCacheEntryA(LPCSTR);
+BOOL WINAPI DeleteUrlCacheEntryW(LPCWSTR);
+
+DWORD AuthenticateUser(PVOID*,LPSTR,LPSTR,DWORD,LPSTR,DWORD,LPSTR,LPSTR);
+BOOL WINAPI HttpSendRequestExA(HINTERNET,LPINTERNET_BUFFERSA,LPINTERNET_BUFFERSA,DWORD,DWORD);
+BOOL WINAPI HttpSendRequestExW(HINTERNET,LPINTERNET_BUFFERSW,LPINTERNET_BUFFERSW,DWORD,DWORD);
+BOOL WINAPI HttpEndRequestA(HINTERNET,LPINTERNET_BUFFERSA,DWORD,DWORD);
+BOOL WINAPI HttpEndRequestW(HINTERNET,LPINTERNET_BUFFERSW,DWORD,DWORD);
+DWORD WINAPI InternetDial(HWND,LPTSTR,DWORD,LPDWORD,DWORD);
+DWORD WINAPI InternetHangUp(DWORD,DWORD);
+BOOL WINAPI InternetGoOnline(LPTSTR,HWND,DWORD);
+BOOL WINAPI InternetAutodial(DWORD,DWORD);
+BOOL WINAPI InternetAutodialHangup(DWORD);
+BOOL WINAPI InternetGetConnectedState(LPDWORD,DWORD);
+BOOL WINAPI InternetSetDialState(LPCTSTR,DWORD,DWORD);
+BOOL WINAPI InternetReadFileExA(HINTERNET,LPINTERNET_BUFFERSA,DWORD,DWORD_PTR);
+BOOL WINAPI InternetReadFileExW(HINTERNET,LPINTERNET_BUFFERSW,DWORD,DWORD_PTR);
+GROUPID WINAPI CreateUrlCacheGroup(DWORD,LPVOID);
+BOOL WINAPI DeleteUrlCacheGroup(GROUPID,DWORD,LPVOID);
+HANDLE WINAPI FindFirstUrlCacheGroup(DWORD,DWORD,LPVOID,DWORD,GROUPID*,LPVOID);
+BOOL WINAPI FindNextUrlCacheGroup(HANDLE,GROUPID*,LPVOID);
+BOOL WINAPI GetUrlCacheGroupAttributeA(GROUPID,DWORD,DWORD,LPINTERNET_CACHE_GROUP_INFOA,LPDWORD,LPVOID);
+BOOL WINAPI GetUrlCacheGroupAttributeW(GROUPID,DWORD,DWORD,LPINTERNET_CACHE_GROUP_INFOW,LPDWORD,LPVOID);
+BOOL WINAPI SetUrlCacheGroupAttributeA(GROUPID,DWORD,DWORD,LPINTERNET_CACHE_GROUP_INFOA,LPVOID);
+BOOL WINAPI SetUrlCacheGroupAttributeW(GROUPID,DWORD,DWORD,LPINTERNET_CACHE_GROUP_INFOW,LPVOID);
+
+#ifdef UNICODE
+#define InternetCrackUrl InternetCrackUrlW
+#define InternetCreateUrl InternetCreateUrlW
+#define InternetCanonicalizeUrl InternetCanonicalizeUrlW
+#define InternetCheckConnection InternetCheckConnectionW
+#define InternetCombineUrl InternetCombineUrlW
+#define InternetOpen InternetOpenW
+#define InternetConnect InternetConnectW
+#define InternetOpenUrl InternetOpenUrlW
+#define InternetFindNextFile InternetFindNextFileW
+#define InternetQueryOption InternetQueryOptionW
+#define InternetSetOption InternetSetOptionW
+#define InternetSetOptionEx InternetSetOptionExW
+#define InternetGetLastResponseInfo InternetGetLastResponseInfoW
+#define InternetReadFileEx InternetReadFileExW
+#define FtpFindFirstFile FtpFindFirstFileW
+#define FtpGetFile FtpGetFileW
+#define FtpPutFile FtpPutFileW
+#define FtpDeleteFile FtpDeleteFileW
+#define FtpRenameFile FtpRenameFileW
+#define FtpOpenFile FtpOpenFileW
+#define FtpCreateDirectory FtpCreateDirectoryW
+#define FtpRemoveDirectory FtpRemoveDirectoryW
+#define FtpSetCurrentDirectory FtpSetCurrentDirectoryW
+#define FtpGetCurrentDirectory FtpGetCurrentDirectoryW
+#define FtpCommand FtpCommandW
+#define GopherGetLocatorType GopherGetLocatorTypeW
+#define GopherCreateLocator GopherCreateLocatorW
+#define GopherFindFirstFile GopherFindFirstFileW
+#define GopherOpenFile GopherOpenFileW
+#define GopherGetAttribute GopherGetAttributeW
+#define HttpSendRequest HttpSendRequestW
+#define HttpOpenRequest HttpOpenRequestW
+#define HttpAddRequestHeaders HttpAddRequestHeadersW
+#define HttpQueryInfo HttpQueryInfoW
+#define InternetSetCookie InternetSetCookieW
+#define InternetGetCookie InternetGetCookieW
+#define CreateUrlCacheEntry CreateUrlCacheEntryW
+#define RetrieveUrlCacheEntryStream RetrieveUrlCacheEntryStreamW
+#define FindNextUrlCacheEntry FindNextUrlCacheEntryW
+#define CommitUrlCacheEntry CommitUrlCacheEntryW
+#define GetUrlCacheEntryInfo GetUrlCacheEntryInfoW
+#define SetUrlCacheEntryInfo SetUrlCacheEntryInfoW
+#define FindFirstUrlCacheEntry FindFirstUrlCacheEntryW
+#define RetrieveUrlCacheEntryFile RetrieveUrlCacheEntryFileW
+#define HttpSendRequestEx HttpSendRequestExW
+#define HttpEndRequest HttpEndRequestW
+#define GetUrlCacheGroupAttribute GetUrlCacheGroupAttributeW
+#define SetUrlCacheGroupAttribute SetUrlCacheGroupAttributeW
+#define DeleteUrlCacheEntry DeleteUrlCacheEntryW
+
+#else
+#define GopherGetAttribute GopherGetAttributeA
+#define InternetCrackUrl InternetCrackUrlA
+#define InternetCreateUrl InternetCreateUrlA
+#define InternetCanonicalizeUrl InternetCanonicalizeUrlA
+#define InternetCheckConnection InternetCheckConnectionA
+#define InternetCombineUrl InternetCombineUrlA
+#define InternetOpen InternetOpenA
+#define InternetConnect InternetConnectA
+#define InternetOpenUrl InternetOpenUrlA
+#define InternetFindNextFile InternetFindNextFileA
+#define InternetQueryOption InternetQueryOptionA
+#define InternetSetOption InternetSetOptionA
+#define InternetSetOptionEx InternetSetOptionExA
+#define InternetGetLastResponseInfo InternetGetLastResponseInfoA
+#define InternetReadFileEx InternetReadFileExA
+#define FtpFindFirstFile FtpFindFirstFileA
+#define FtpGetFile FtpGetFileA
+#define FtpPutFile FtpPutFileA
+#define FtpDeleteFile FtpDeleteFileA
+#define FtpRenameFile FtpRenameFileA
+#define FtpOpenFile FtpOpenFileA
+#define FtpCreateDirectory FtpCreateDirectoryA
+#define FtpRemoveDirectory FtpRemoveDirectoryA
+#define FtpSetCurrentDirectory FtpSetCurrentDirectoryA
+#define FtpGetCurrentDirectory FtpGetCurrentDirectoryA
+#define FtpCommand FtpCommandA
+#define GopherGetLocatorType GopherGetLocatorTypeA
+#define GopherCreateLocator GopherCreateLocatorA
+#define GopherFindFirstFile GopherFindFirstFileA
+#define GopherOpenFile GopherOpenFileA
+#define HttpSendRequest HttpSendRequestA
+#define HttpOpenRequest HttpOpenRequestA
+#define HttpAddRequestHeaders HttpAddRequestHeadersA
+#define HttpQueryInfo HttpQueryInfoA
+#define InternetSetCookie InternetSetCookieA
+#define InternetGetCookie InternetGetCookieA
+#define CreateUrlCacheEntry CreateUrlCacheEntryA
+#define RetrieveUrlCacheEntryStream RetrieveUrlCacheEntryStreamA
+#define FindNextUrlCacheEntry FindNextUrlCacheEntryA
+#define CommitUrlCacheEntry CommitUrlCacheEntryA
+#define GetUrlCacheEntryInfo GetUrlCacheEntryInfoA
+#define SetUrlCacheEntryInfo SetUrlCacheEntryInfoA
+#define FindFirstUrlCacheEntry FindFirstUrlCacheEntryA
+#define RetrieveUrlCacheEntryFile RetrieveUrlCacheEntryFileA
+#define HttpSendRequestEx HttpSendRequestExA
+#define HttpEndRequest HttpEndRequestA
+#define GetUrlCacheGroupAttribute GetUrlCacheGroupAttributeA
+#define SetUrlCacheGroupAttribute SetUrlCacheGroupAttributeA
+#define DeleteUrlCacheEntry DeleteUrlCacheEntryA
+
+#endif /* UNICODE */
+#endif /* RC_INVOKED */
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/winioctl.h b/tcc/include/winapi/winioctl.h
new file mode 100644
index 0000000..f13d3b1
--- /dev/null
+++ b/tcc/include/winapi/winioctl.h
@@ -0,0 +1,555 @@
+#ifndef _WINIOCTL_H
+#define _WINIOCTL_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#define HIST_NO_OF_BUCKETS 24
+#define HISTOGRAM_BUCKET_SIZE sizeof(HISTOGRAM_BUCKET)
+#define DISK_HISTOGRAM_SIZE sizeof(DISK_HISTOGRAM)
+#define CTL_CODE(t,f,m,a) (((t)<<16)|((a)<<14)|((f)<<2)|(m))
+#define DEVICE_TYPE_FROM_CTL_CODE(c) (((DWORD)((c)&0xffff0000))>>16)
+#define IOCTL_STORAGE_BASE FILE_DEVICE_MASS_STORAGE
+#define IOCTL_STORAGE_CHECK_VERIFY CTL_CODE(IOCTL_STORAGE_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_STORAGE_CHECK_VERIFY2 CTL_CODE(IOCTL_STORAGE_BASE, 0x0200, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_STORAGE_MEDIA_REMOVAL CTL_CODE(IOCTL_STORAGE_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_STORAGE_EJECT_MEDIA CTL_CODE(IOCTL_STORAGE_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_STORAGE_LOAD_MEDIA CTL_CODE(IOCTL_STORAGE_BASE, 0x0203, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_STORAGE_LOAD_MEDIA2 CTL_CODE(IOCTL_STORAGE_BASE, 0x0203, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_STORAGE_RESERVE CTL_CODE(IOCTL_STORAGE_BASE, 0x0204, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_STORAGE_RELEASE CTL_CODE(IOCTL_STORAGE_BASE, 0x0205, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_STORAGE_FIND_NEW_DEVICES CTL_CODE(IOCTL_STORAGE_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_STORAGE_EJECTION_CONTROL CTL_CODE(IOCTL_STORAGE_BASE, 0x0250, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_STORAGE_MCN_CONTROL CTL_CODE(IOCTL_STORAGE_BASE, 0x0251, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_STORAGE_GET_MEDIA_TYPES CTL_CODE(IOCTL_STORAGE_BASE, 0x0300, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_STORAGE_GET_MEDIA_TYPES_EX CTL_CODE(IOCTL_STORAGE_BASE, 0x0301, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_STORAGE_RESET_BUS CTL_CODE(IOCTL_STORAGE_BASE, 0x0400, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_STORAGE_RESET_DEVICE CTL_CODE(IOCTL_STORAGE_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_STORAGE_GET_DEVICE_NUMBER CTL_CODE(IOCTL_STORAGE_BASE, 0x0420, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_STORAGE_PREDICT_FAILURE CTL_CODE(IOCTL_STORAGE_BASE, 0x0440, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_DISK_BASE FILE_DEVICE_DISK
+#define IOCTL_DISK_GET_DRIVE_GEOMETRY CTL_CODE(IOCTL_DISK_BASE,0,METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_DISK_GET_PARTITION_INFO CTL_CODE(IOCTL_DISK_BASE,1,METHOD_BUFFERED,FILE_READ_ACCESS)
+#define IOCTL_DISK_SET_PARTITION_INFO CTL_CODE(IOCTL_DISK_BASE,2,METHOD_BUFFERED,FILE_READ_ACCESS|FILE_WRITE_ACCESS)
+#define IOCTL_DISK_GET_DRIVE_LAYOUT CTL_CODE(IOCTL_DISK_BASE,3,METHOD_BUFFERED,FILE_READ_ACCESS)
+#define IOCTL_DISK_SET_DRIVE_LAYOUT CTL_CODE(IOCTL_DISK_BASE,4,METHOD_BUFFERED,FILE_READ_ACCESS|FILE_WRITE_ACCESS)
+#define IOCTL_DISK_VERIFY CTL_CODE(IOCTL_DISK_BASE,5,METHOD_BUFFERED,FILE_ANY_ACCESS)
+#define IOCTL_DISK_FORMAT_TRACKS CTL_CODE(IOCTL_DISK_BASE,6,METHOD_BUFFERED,FILE_READ_ACCESS|FILE_WRITE_ACCESS)
+#define IOCTL_DISK_REASSIGN_BLOCKS CTL_CODE(IOCTL_DISK_BASE,7,METHOD_BUFFERED,FILE_READ_ACCESS|FILE_WRITE_ACCESS)
+#define IOCTL_DISK_PERFORMANCE CTL_CODE(IOCTL_DISK_BASE,8,METHOD_BUFFERED,FILE_ANY_ACCESS)
+#define IOCTL_DISK_IS_WRITABLE CTL_CODE(IOCTL_DISK_BASE,9,METHOD_BUFFERED,FILE_ANY_ACCESS)
+#define IOCTL_DISK_LOGGING CTL_CODE(IOCTL_DISK_BASE,10,METHOD_BUFFERED,FILE_ANY_ACCESS)
+#define IOCTL_DISK_FORMAT_TRACKS_EX CTL_CODE(IOCTL_DISK_BASE,11,METHOD_BUFFERED,FILE_READ_ACCESS|FILE_WRITE_ACCESS)
+#define IOCTL_DISK_HISTOGRAM_STRUCTURE CTL_CODE(IOCTL_DISK_BASE,12,METHOD_BUFFERED,FILE_ANY_ACCESS)
+#define IOCTL_DISK_HISTOGRAM_DATA CTL_CODE(IOCTL_DISK_BASE,13,METHOD_BUFFERED,FILE_ANY_ACCESS)
+#define IOCTL_DISK_HISTOGRAM_RESET CTL_CODE(IOCTL_DISK_BASE,14,METHOD_BUFFERED,FILE_ANY_ACCESS)
+#define IOCTL_DISK_REQUEST_STRUCTURE CTL_CODE(IOCTL_DISK_BASE,15,METHOD_BUFFERED,FILE_ANY_ACCESS)
+#define IOCTL_DISK_REQUEST_DATA CTL_CODE(IOCTL_DISK_BASE,16,METHOD_BUFFERED,FILE_ANY_ACCESS)
+#define IOCTL_DISK_GET_PARTITION_INFO_EX CTL_CODE(IOCTL_DISK_BASE,0x12,METHOD_BUFFERED,FILE_ANY_ACCESS)
+#define IOCTL_DISK_SET_PARTITION_INFO_EX CTL_CODE(IOCTL_DISK_BASE,0x13,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_DISK_GET_DRIVE_LAYOUT_EX CTL_CODE(IOCTL_DISK_BASE,0x14,METHOD_BUFFERED,FILE_ANY_ACCESS)
+#define IOCTL_DISK_SET_DRIVE_LAYOUT_EX CTL_CODE(IOCTL_DISK_BASE,0x15,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_DISK_CREATE_DISK CTL_CODE(IOCTL_DISK_BASE,0x16,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_DISK_GET_LENGTH_INFO CTL_CODE(IOCTL_DISK_BASE,0x17,METHOD_BUFFERED,FILE_READ_ACCESS)
+#define IOCTL_DISK_PERFORMANCE_OFF CTL_CODE(IOCTL_DISK_BASE,0x18,METHOD_BUFFERED,FILE_ANY_ACCESS)
+#define IOCTL_DISK_GET_DRIVE_GEOMETRY_EX CTL_CODE(IOCTL_DISK_BASE,0x28,METHOD_BUFFERED,FILE_ANY_ACCESS)
+#define IOCTL_DISK_GROW_PARTITION CTL_CODE(IOCTL_DISK_BASE,0x34,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_DISK_GET_CACHE_INFORMATION CTL_CODE(IOCTL_DISK_BASE,0x35,METHOD_BUFFERED,FILE_READ_ACCESS)
+#define IOCTL_DISK_SET_CACHE_INFORMATION CTL_CODE(IOCTL_DISK_BASE,0x36,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_DISK_DELETE_DRIVE_LAYOUT CTL_CODE(IOCTL_DISK_BASE,0x40,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_DISK_UPDATE_PROPERTIES CTL_CODE(IOCTL_DISK_BASE,0x50,METHOD_BUFFERED,FILE_ANY_ACCESS)
+#define IOCTL_DISK_CHECK_VERIFY CTL_CODE(IOCTL_DISK_BASE,0x200,METHOD_BUFFERED,FILE_READ_ACCESS)
+#define IOCTL_DISK_MEDIA_REMOVAL CTL_CODE(IOCTL_DISK_BASE,0x201,METHOD_BUFFERED,FILE_READ_ACCESS)
+#define IOCTL_DISK_EJECT_MEDIA CTL_CODE(IOCTL_DISK_BASE,0x202,METHOD_BUFFERED,FILE_READ_ACCESS)
+#define IOCTL_DISK_LOAD_MEDIA CTL_CODE(IOCTL_DISK_BASE,0x203,METHOD_BUFFERED,FILE_READ_ACCESS)
+#define IOCTL_DISK_RESERVE CTL_CODE(IOCTL_DISK_BASE,0x204,METHOD_BUFFERED,FILE_READ_ACCESS)
+#define IOCTL_DISK_RELEASE CTL_CODE(IOCTL_DISK_BASE,0x205,METHOD_BUFFERED,FILE_READ_ACCESS)
+#define IOCTL_DISK_FIND_NEW_DEVICES CTL_CODE(IOCTL_DISK_BASE,0x206,METHOD_BUFFERED,FILE_READ_ACCESS)
+#define IOCTL_DISK_REMOVE_DEVICE CTL_CODE(IOCTL_DISK_BASE,0x207,METHOD_BUFFERED,FILE_READ_ACCESS)
+#define IOCTL_DISK_GET_MEDIA_TYPES CTL_CODE(IOCTL_DISK_BASE,0x300,METHOD_BUFFERED,FILE_ANY_ACCESS)
+#define IOCTL_DISK_UPDATE_DRIVE_SIZE CTL_CODE(IOCTL_DISK_BASE, 0x0032, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_SERIAL_LSRMST_INSERT CTL_CODE(FILE_DEVICE_SERIAL_PORT,31,METHOD_BUFFERED,FILE_ANY_ACCESS)
+
+/* Also in ddk/ntddvol.h */
+#define IOCTL_VOLUME_BASE ((ULONG) 'V')
+#define IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS \
+ CTL_CODE(IOCTL_VOLUME_BASE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_VOLUME_IS_CLUSTERED \
+ CTL_CODE(IOCTL_VOLUME_BASE, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define FSCTL_LOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM,6,METHOD_BUFFERED,FILE_ANY_ACCESS)
+#define FSCTL_UNLOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM,7,METHOD_BUFFERED,FILE_ANY_ACCESS)
+#define FSCTL_DISMOUNT_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM,8,METHOD_BUFFERED,FILE_ANY_ACCESS)
+#define FSCTL_MOUNT_DBLS_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM,13,METHOD_BUFFERED,FILE_ANY_ACCESS)
+#define FSCTL_GET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,15,METHOD_BUFFERED,FILE_ANY_ACCESS)
+#define FSCTL_SET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,16,METHOD_BUFFERED,FILE_READ_DATA|FILE_WRITE_DATA)
+#define FSCTL_READ_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,17,METHOD_NEITHER,FILE_READ_DATA)
+#define FSCTL_WRITE_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,18,METHOD_NEITHER,FILE_WRITE_DATA)
+#define FSCTL_GET_NTFS_VOLUME_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM,25,METHOD_BUFFERED,FILE_ANY_ACCESS)
+#define FSCTL_GET_VOLUME_BITMAP CTL_CODE(FILE_DEVICE_FILE_SYSTEM,27,METHOD_NEITHER,FILE_ANY_ACCESS)
+#define FSCTL_GET_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM,28,METHOD_NEITHER,FILE_ANY_ACCESS)
+#define FSCTL_MOVE_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM,29,METHOD_BUFFERED,FILE_ANY_ACCESS)
+#define FSCTL_GET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 42, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_SET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 41, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_DELETE_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 43, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_SET_SPARSE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 49, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
+#define FSCTL_ALLOW_EXTENDED_DASD_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 32, METHOD_NEITHER, FILE_ANY_ACCESS)
+#define DEVICE_TYPE DWORD
+#define FILE_DEVICE_BEEP 1
+#define FILE_DEVICE_CD_ROM 2
+#define FILE_DEVICE_CD_ROM_FILE_SYSTEM 3
+#define FILE_DEVICE_CONTROLLER 4
+#define FILE_DEVICE_DATALINK 5
+#define FILE_DEVICE_DFS 6
+#define FILE_DEVICE_DISK 7
+#define FILE_DEVICE_DISK_FILE_SYSTEM 8
+#define FILE_DEVICE_FILE_SYSTEM 9
+#define FILE_DEVICE_INPORT_PORT 10
+#define FILE_DEVICE_KEYBOARD 11
+#define FILE_DEVICE_MAILSLOT 12
+#define FILE_DEVICE_MIDI_IN 13
+#define FILE_DEVICE_MIDI_OUT 14
+#define FILE_DEVICE_MOUSE 15
+#define FILE_DEVICE_MULTI_UNC_PROVIDER 16
+#define FILE_DEVICE_NAMED_PIPE 17
+#define FILE_DEVICE_NETWORK 18
+#define FILE_DEVICE_NETWORK_BROWSER 19
+#define FILE_DEVICE_NETWORK_FILE_SYSTEM 20
+#define FILE_DEVICE_NULL 21
+#define FILE_DEVICE_PARALLEL_PORT 22
+#define FILE_DEVICE_PHYSICAL_NETCARD 23
+#define FILE_DEVICE_PRINTER 24
+#define FILE_DEVICE_SCANNER 25
+#define FILE_DEVICE_SERIAL_MOUSE_PORT 26
+#define FILE_DEVICE_SERIAL_PORT 27
+#define FILE_DEVICE_SCREEN 28
+#define FILE_DEVICE_SOUND 29
+#define FILE_DEVICE_STREAMS 30
+#define FILE_DEVICE_TAPE 31
+#define FILE_DEVICE_TAPE_FILE_SYSTEM 32
+#define FILE_DEVICE_TRANSPORT 33
+#define FILE_DEVICE_UNKNOWN 34
+#define FILE_DEVICE_VIDEO 35
+#define FILE_DEVICE_VIRTUAL_DISK 36
+#define FILE_DEVICE_WAVE_IN 37
+#define FILE_DEVICE_WAVE_OUT 38
+#define FILE_DEVICE_8042_PORT 39
+#define FILE_DEVICE_NETWORK_REDIRECTOR 40
+#define FILE_DEVICE_BATTERY 41
+#define FILE_DEVICE_BUS_EXTENDER 42
+#define FILE_DEVICE_MODEM 43
+#define FILE_DEVICE_VDM 44
+#define FILE_DEVICE_MASS_STORAGE 45
+#define FILE_DEVICE_SMB 46
+#define FILE_DEVICE_KS 47
+#define FILE_DEVICE_CHANGER 48
+#define FILE_DEVICE_SMARTCARD 49
+#define FILE_DEVICE_ACPI 50
+#define FILE_DEVICE_DVD 51
+#define FILE_DEVICE_FULLSCREEN_VIDEO 52
+#define FILE_DEVICE_DFS_FILE_SYSTEM 53
+#define FILE_DEVICE_DFS_VOLUME 54
+#define FILE_DEVICE_SERENUM 55
+#define FILE_DEVICE_TERMSRV 56
+#define FILE_DEVICE_KSEC 57
+#define PARTITION_ENTRY_UNUSED 0
+#define PARTITION_FAT_12 1
+#define PARTITION_XENIX_1 2
+#define PARTITION_XENIX_2 3
+#define PARTITION_FAT_16 4
+#define PARTITION_EXTENDED 5
+#define PARTITION_HUGE 6
+#define PARTITION_IFS 7
+#define PARTITION_FAT32 0x0B
+#define PARTITION_FAT32_XINT13 0x0C
+#define PARTITION_XINT13 0x0E
+#define PARTITION_XINT13_EXTENDED 0x0F
+#define PARTITION_PREP 0x41
+#define PARTITION_LDM 0x42
+#define PARTITION_UNIX 0x63
+#define PARTITION_NTFT 128
+#define VALID_NTFT 0xC0
+#define METHOD_BUFFERED 0
+#define METHOD_IN_DIRECT 1
+#define METHOD_OUT_DIRECT 2
+#define METHOD_NEITHER 3
+#define SERIAL_LSRMST_ESCAPE 0
+#define SERIAL_LSRMST_LSR_DATA 1
+#define SERIAL_LSRMST_LSR_NODATA 2
+#define SERIAL_LSRMST_MST 3
+
+/* Also in ddk/winddk.h */
+#define FILE_ANY_ACCESS 0x00000000
+#define FILE_SPECIAL_ACCESS FILE_ANY_ACCESS
+#define FILE_READ_ACCESS 0x00000001
+#define FILE_WRITE_ACCESS 0x00000002
+
+#define DISK_LOGGING_START 0
+#define DISK_LOGGING_STOP 1
+#define DISK_LOGGING_DUMP 2
+#define DISK_BINNING 3
+typedef WORD BAD_TRACK_NUMBER,*PBAD_TRACK_NUMBER;
+typedef enum _BIN_TYPES {RequestSize,RequestLocation} BIN_TYPES;
+typedef struct _BIN_RANGE {
+ LARGE_INTEGER StartValue;
+ LARGE_INTEGER Length;
+} BIN_RANGE,*PBIN_RANGE;
+typedef struct _BIN_COUNT {
+ BIN_RANGE BinRange;
+ DWORD BinCount;
+} BIN_COUNT,*PBIN_COUNT;
+typedef struct _BIN_RESULTS {
+ DWORD NumberOfBins;
+ BIN_COUNT BinCounts[1];
+} BIN_RESULTS,*PBIN_RESULTS;
+typedef enum _PARTITION_STYLE {
+ PARTITION_STYLE_MBR,
+ PARTITION_STYLE_GPT,
+ PARTITION_STYLE_RAW
+} PARTITION_STYLE;
+typedef struct {
+ GUID DiskId;
+ DWORD MaxPartitionCount;
+} CREATE_DISK_GPT,*PCREATE_DISK_GPT;
+typedef struct {
+ DWORD Signature;
+} CREATE_DISK_MBR,*PCREATE_DISK_MBR;
+typedef struct {
+ PARTITION_STYLE PartitionStyle;
+ _ANONYMOUS_UNION union {
+ CREATE_DISK_MBR Mbr;
+ CREATE_DISK_GPT Gpt;
+ };
+} CREATE_DISK,*PCREATE_DISK;
+typedef enum {
+ EqualPriority,
+ KeepPrefetchedData,
+ KeepReadData
+} DISK_CACHE_RETENTION_PRIORITY;
+typedef struct _DISK_CACHE_INFORMATION {
+ BOOLEAN ParametersSavable;
+ BOOLEAN ReadCacheEnabled;
+ BOOLEAN WriteCacheEnabled;
+ DISK_CACHE_RETENTION_PRIORITY ReadRetentionPriority;
+ DISK_CACHE_RETENTION_PRIORITY WriteRetentionPriority;
+ WORD DisablePrefetchTransferLength;
+ BOOLEAN PrefetchScalar;
+ _ANONYMOUS_UNION union {
+ struct {
+ WORD Minimum;
+ WORD Maximum;
+ WORD MaximumBlocks;
+ } ScalarPrefetch;
+ struct {
+ WORD Minimum;
+ WORD Maximum;
+ } BlockPrefetch;
+ };
+} DISK_CACHE_INFORMATION,*PDISK_CACHE_INFORMATION;
+typedef enum _DETECTION_TYPE {
+ DetectNone,
+ DetectInt13,
+ DetectExInt13
+} DETECTION_TYPE;
+typedef struct _DISK_INT13_INFO {
+ WORD DriveSelect;
+ DWORD MaxCylinders;
+ WORD SectorsPerTrack;
+ WORD MaxHeads;
+ WORD NumberDrives;
+} DISK_INT13_INFO,*PDISK_INT13_INFO;
+typedef struct _DISK_EX_INT13_INFO {
+ WORD ExBufferSize;
+ WORD ExFlags;
+ DWORD ExCylinders;
+ DWORD ExHeads;
+ DWORD ExSectorsPerTrack;
+ DWORD64 ExSectorsPerDrive;
+ WORD ExSectorSize;
+ WORD ExReserved;
+} DISK_EX_INT13_INFO,*PDISK_EX_INT13_INFO;
+typedef struct _DISK_DETECTION_INFO {
+ DWORD SizeOfDetectInfo;
+ DETECTION_TYPE DetectionType;
+ _ANONYMOUS_UNION union {
+ _ANONYMOUS_STRUCT struct {
+ DISK_INT13_INFO Int13;
+ DISK_EX_INT13_INFO ExInt13;
+ };
+ };
+} DISK_DETECTION_INFO,*PDISK_DETECTION_INFO;
+typedef 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
+} MEDIA_TYPE,*PMEDIA_TYPE;
+typedef struct _DISK_GEOMETRY {
+ LARGE_INTEGER Cylinders;
+ MEDIA_TYPE MediaType;
+ DWORD TracksPerCylinder;
+ DWORD SectorsPerTrack;
+ DWORD BytesPerSector;
+} DISK_GEOMETRY,*PDISK_GEOMETRY;
+typedef struct _DISK_GEOMETRY_EX {
+ DISK_GEOMETRY Geometry;
+ LARGE_INTEGER DiskSize;
+ BYTE Data[1];
+} DISK_GEOMETRY_EX,*PDISK_GEOMETRY_EX;
+typedef struct _DISK_GROW_PARTITION {
+ DWORD PartitionNumber;
+ LARGE_INTEGER BytesToGrow;
+} DISK_GROW_PARTITION, *PDISK_GROW_PARTITION;
+typedef struct _DISK_PARTITION_INFO {
+ DWORD SizeOfPartitionInfo;
+ PARTITION_STYLE PartitionStyle;
+ _ANONYMOUS_UNION union {
+ struct {
+ DWORD Signature;
+ } Mbr;
+ struct {
+ GUID DiskId;
+ } Gpt;
+ };
+} DISK_PARTITION_INFO,*PDISK_PARTITION_INFO;
+typedef struct _DISK_PERFORMANCE {
+ LARGE_INTEGER BytesRead;
+ LARGE_INTEGER BytesWritten;
+ LARGE_INTEGER ReadTime;
+ LARGE_INTEGER WriteTime;
+ DWORD ReadCount;
+ DWORD WriteCount;
+ DWORD QueueDepth;
+} DISK_PERFORMANCE, *PDISK_PERFORMANCE;
+typedef struct _DISK_RECORD {
+ LARGE_INTEGER ByteOffset;
+ LARGE_INTEGER StartTime;
+ LARGE_INTEGER EndTime;
+ PVOID VirtualAddress;
+ DWORD NumberOfBytes;
+ BYTE DeviceNumber;
+ BOOLEAN ReadRequest;
+} DISK_RECORD,*PDISK_RECORD;
+typedef struct _DISK_LOGGING {
+ BYTE Function;
+ PVOID BufferAddress;
+ DWORD BufferSize;
+} DISK_LOGGING,*PDISK_LOGGING;
+typedef struct DiskQuotaUserInformation {
+ LONGLONG QuotaUsed;
+ LONGLONG QuotaThreshold;
+ LONGLONG QuotaLimit;
+} DISKQUOTA_USER_INFORMATION,*PDISKQUOTA_USER_INFORMATION;
+typedef struct _FORMAT_PARAMETERS {
+ MEDIA_TYPE MediaType;
+ DWORD StartCylinderNumber;
+ DWORD EndCylinderNumber;
+ DWORD StartHeadNumber;
+ DWORD EndHeadNumber;
+} FORMAT_PARAMETERS,*PFORMAT_PARAMETERS;
+typedef struct _FORMAT_EX_PARAMETERS {
+ MEDIA_TYPE MediaType;
+ DWORD StartCylinderNumber;
+ DWORD EndCylinderNumber;
+ DWORD StartHeadNumber;
+ DWORD EndHeadNumber;
+ WORD FormatGapLength;
+ WORD SectorsPerTrack;
+ WORD SectorNumber[1];
+} FORMAT_EX_PARAMETERS,*PFORMAT_EX_PARAMETERS;
+typedef struct {
+ LARGE_INTEGER Length;
+} GET_LENGTH_INFORMATION;
+typedef struct _HISTOGRAM_BUCKET {
+ DWORD Reads;
+ DWORD Writes;
+} HISTOGRAM_BUCKET,*PHISTOGRAM_BUCKET;
+typedef struct _DISK_HISTOGRAM {
+ LARGE_INTEGER DiskSize;
+ LARGE_INTEGER Start;
+ LARGE_INTEGER End;
+ LARGE_INTEGER Average;
+ LARGE_INTEGER AverageRead;
+ LARGE_INTEGER AverageWrite;
+ DWORD Granularity;
+ DWORD Size;
+ DWORD ReadCount;
+ DWORD WriteCount;
+ PHISTOGRAM_BUCKET Histogram;
+} DISK_HISTOGRAM,*PDISK_HISTOGRAM;
+typedef struct _DISK_EXTENT {
+ DWORD DiskNumber;
+ LARGE_INTEGER StartingOffset;
+ LARGE_INTEGER ExtentLength;
+} DISK_EXTENT,*PDISK_EXTENT;
+typedef struct _VOLUME_DISK_EXTENTS {
+ DWORD NumberOfDiskExtents;
+ DISK_EXTENT Extents[1];
+} VOLUME_DISK_EXTENTS,*PVOLUME_DISK_EXTENTS;
+typedef struct _PARTITION_INFORMATION {
+ LARGE_INTEGER StartingOffset;
+ LARGE_INTEGER PartitionLength;
+ DWORD HiddenSectors;
+ DWORD PartitionNumber;
+ BYTE PartitionType;
+ BOOLEAN BootIndicator;
+ BOOLEAN RecognizedPartition;
+ BOOLEAN RewritePartition;
+} PARTITION_INFORMATION,*PPARTITION_INFORMATION;
+typedef struct _DRIVE_LAYOUT_INFORMATION {
+ DWORD PartitionCount;
+ DWORD Signature;
+ PARTITION_INFORMATION PartitionEntry[1];
+} DRIVE_LAYOUT_INFORMATION, *PDRIVE_LAYOUT_INFORMATION;
+typedef struct _DRIVE_LAYOUT_INFORMATION_GPT {
+ GUID DiskId;
+ LARGE_INTEGER StartingUsableOffset;
+ LARGE_INTEGER UsableLength;
+ ULONG MaxPartitionCount;
+} DRIVE_LAYOUT_INFORMATION_GPT,*PDRIVE_LAYOUT_INFORMATION_GPT;
+typedef struct _DRIVE_LAYOUT_INFORMATION_MBR {
+ ULONG Signature;
+} DRIVE_LAYOUT_INFORMATION_MBR, *PDRIVE_LAYOUT_INFORMATION_MBR;
+typedef struct _PARTITION_INFORMATION_MBR {
+ BYTE PartitionType;
+ BOOLEAN BootIndicator;
+ BOOLEAN RecognizedPartition;
+ DWORD HiddenSectors;
+} PARTITION_INFORMATION_MBR;
+typedef struct _PARTITION_INFORMATION_GPT {
+ GUID PartitionType;
+ GUID PartitionId;
+ DWORD64 Attributes;
+ WCHAR Name[36];
+} PARTITION_INFORMATION_GPT;
+typedef struct _PARTITION_INFORMATION_EX {
+ PARTITION_STYLE PartitionStyle;
+ LARGE_INTEGER StartingOffset;
+ LARGE_INTEGER PartitionLength;
+ DWORD PartitionNumber;
+ BOOLEAN RewritePartition;
+ _ANONYMOUS_UNION union {
+ PARTITION_INFORMATION_MBR Mbr;
+ PARTITION_INFORMATION_GPT Gpt;
+ };
+} PARTITION_INFORMATION_EX;
+typedef struct _DRIVE_LAYOUT_INFORMATION_EX {
+ DWORD PartitionStyle;
+ DWORD PartitionCount;
+ _ANONYMOUS_UNION union {
+ DRIVE_LAYOUT_INFORMATION_MBR Mbr;
+ DRIVE_LAYOUT_INFORMATION_GPT Gpt;
+ };
+ PARTITION_INFORMATION_EX PartitionEntry[1];
+} DRIVE_LAYOUT_INFORMATION_EX,*PDRIVE_LAYOUT_INFORMATION_EX;
+typedef struct {
+ HANDLE FileHandle;
+ LARGE_INTEGER StartingVcn;
+ LARGE_INTEGER StartingLcn;
+ DWORD ClusterCount;
+} MOVE_FILE_DATA,*PMOVE_FILE_DATA;
+typedef struct _PERF_BIN {
+ DWORD NumberOfBins;
+ DWORD TypeOfBin;
+ BIN_RANGE BinsRanges[1];
+} PERF_BIN,*PPERF_BIN;
+typedef struct _PREVENT_MEDIA_REMOVAL {
+ BOOLEAN PreventMediaRemoval;
+} PREVENT_MEDIA_REMOVAL,*PPREVENT_MEDIA_REMOVAL;
+typedef struct RETRIEVAL_POINTERS_BUFFER {
+ DWORD ExtentCount;
+ LARGE_INTEGER StartingVcn;
+ struct {
+ LARGE_INTEGER NextVcn;
+ LARGE_INTEGER Lcn;
+ } Extents[1];
+} RETRIEVAL_POINTERS_BUFFER,*PRETRIEVAL_POINTERS_BUFFER;
+typedef struct _REASSIGN_BLOCKS {
+ WORD Reserved;
+ WORD Count;
+ DWORD BlockNumber[1];
+} REASSIGN_BLOCKS,*PREASSIGN_BLOCKS;
+typedef struct _SET_PARTITION_INFORMATION {
+ BYTE PartitionType;
+} SET_PARTITION_INFORMATION,*PSET_PARTITION_INFORMATION;
+typedef struct {
+ LARGE_INTEGER StartingLcn;
+} STARTING_LCN_INPUT_BUFFER,*PSTARTING_LCN_INPUT_BUFFER;
+typedef struct {
+ LARGE_INTEGER StartingVcn;
+} STARTING_VCN_INPUT_BUFFER,*PSTARTING_VCN_INPUT_BUFFER;
+typedef struct _VERIFY_INFORMATION {
+ LARGE_INTEGER StartingOffset;
+ DWORD Length;
+} VERIFY_INFORMATION,*PVERIFY_INFORMATION;
+typedef struct {
+ LARGE_INTEGER StartingLcn;
+ LARGE_INTEGER BitmapSize;
+ BYTE Buffer[1];
+} VOLUME_BITMAP_BUFFER,*PVOLUME_BITMAP_BUFFER;
+typedef struct {
+ LARGE_INTEGER VolumeSerialNumber;
+ LARGE_INTEGER NumberSectors;
+ LARGE_INTEGER TotalClusters;
+ LARGE_INTEGER FreeClusters;
+ LARGE_INTEGER TotalReserved;
+ DWORD BytesPerSector;
+ DWORD BytesPerCluster;
+ DWORD BytesPerFileRecordSegment;
+ DWORD ClustersPerFileRecordSegment;
+ LARGE_INTEGER MftValidDataLength;
+ LARGE_INTEGER MftStartLcn;
+ LARGE_INTEGER Mft2StartLcn;
+ LARGE_INTEGER MftZoneStart;
+ LARGE_INTEGER MftZoneEnd;
+} NTFS_VOLUME_DATA_BUFFER, *PNTFS_VOLUME_DATA_BUFFER;
+
+#define IsRecognizedPartition(t)\
+ (((t&PARTITION_NTFT)&&((t&~VALID_NTFT)==PARTITION_FAT_12))||\
+ ((t&PARTITION_NTFT)&&((t&~VALID_NTFT)==PARTITION_FAT_16))||\
+ ((t&PARTITION_NTFT)&&((t&~VALID_NTFT)==PARTITION_IFS))||\
+ ((t&PARTITION_NTFT)&&((t&~VALID_NTFT)==PARTITION_HUGE))||\
+ ((t&PARTITION_NTFT)&&((t&~VALID_NTFT)==PARTITION_FAT32))||\
+ ((t&PARTITION_NTFT)&&((t&~VALID_NTFT)==PARTITION_FAT32_XINT13))||\
+ ((t&PARTITION_NTFT)&&((t&~VALID_NTFT)==PARTITION_XINT13))||\
+ ((t&~PARTITION_NTFT)==PARTITION_FAT_12)||\
+ ((t&~PARTITION_NTFT)==PARTITION_FAT_16)||\
+ ((t&~PARTITION_NTFT)==PARTITION_IFS)||\
+ ((t&~PARTITION_NTFT)==PARTITION_HUGE)||\
+ ((t&~PARTITION_NTFT)==PARTITION_FAT32)||\
+ ((t&~PARTITION_NTFT)==PARTITION_FAT32_XINT13)||\
+ ((t&~PARTITION_NTFT)==PARTITION_XINT13))
+#define IsContainerPartition(t)\
+ (((t&PARTITION_NTFT)&&((t&~VALID_NTFT)==PARTITION_EXTENDED))||\
+ ((t&PARTITION_NTFT)&&((t&~VALID_NTFT)==PARTITION_XINT13_EXTENDED))||\
+ ((t&~PARTITION_NTFT)==PARTITION_EXTENDED)||\
+ ((t&~PARTITION_NTFT)==PARTITION_XINT13_EXTENDED))
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/winldap.h b/tcc/include/winapi/winldap.h
new file mode 100644
index 0000000..cf7083b
--- /dev/null
+++ b/tcc/include/winapi/winldap.h
@@ -0,0 +1,713 @@
+/*
+ winldap.h - Header file for the Windows LDAP API
+
+ Written by Filip Navara <xnavara@volny.cz>
+
+ References:
+ The C LDAP Application Program Interface
+ http://www.watersprings.org/pub/id/draft-ietf-ldapext-ldap-c-api-05.txt
+
+ Lightweight Directory Access Protocol Reference
+ http://msdn.microsoft.com/library/en-us/netdir/ldap/ldap_reference.asp
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+*/
+
+#ifndef _WINLDAP_H
+#define _WINLDAP_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifndef _SCHANNEL_H
+#include <schannel.h>
+#endif
+
+#ifndef _WINBER_H
+#include <winber.h>
+#endif
+
+#ifndef WINLDAPAPI
+#define WINLDAPAPI DECLSPEC_IMPORT
+#endif
+
+#ifndef _WINLDAP_DEPRECATED
+#if (( __GNUC__ == 3 && __GNUC_MINOR__ > 0 ) || __GNUC__ > 3)
+#define _WINLDAP_DEPRECATED __attribute__((__deprecated__))
+#else
+#define _WINLDAP_DEPRECATED
+#endif
+#endif
+
+#include <pshpack4.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define LDAP_VERSION1 1
+#define LDAP_VERSION2 2
+#define LDAP_VERSION3 3
+#define LDAP_VERSION LDAP_VERSION2
+#define LDAP_API_VERSION 2004
+#define LDAP_VERSION_MIN LDAP_VERSION2
+#define LDAP_VERSION_MAX LDAP_VERSION3
+#define LDAP_VENDOR_NAME "Microsoft Corporation."
+#define LDAP_VENDOR_NAME_W L"Microsoft Corporation."
+#define LDAP_VENDOR_VERSION 510
+#define LDAP_API_INFO_VERSION 1
+#define LDAP_FEATURE_INFO_VERSION 1
+#define LDAP_SUCCESS 0x00
+#define LDAP_OPERATIONS_ERROR 0x01
+#define LDAP_PROTOCOL_ERROR 0x02
+#define LDAP_TIMELIMIT_EXCEEDED 0x03
+#define LDAP_SIZELIMIT_EXCEEDED 0x04
+#define LDAP_COMPARE_FALSE 0x05
+#define LDAP_COMPARE_TRUE 0x06
+#define LDAP_STRONG_AUTH_NOT_SUPPORTED 0x07
+#define LDAP_STRONG_AUTH_REQUIRED 0x08
+#define LDAP_REFERRAL_V2 0x09
+#define LDAP_REFERRAL 0x0a
+#define LDAP_ADMIN_LIMIT_EXCEEDED 0x0b
+#define LDAP_UNAVAILABLE_CRIT_EXTENSION 0x0c
+#define LDAP_CONFIDENTIALITY_REQUIRED 0x0d
+#define LDAP_SASL_BIND_IN_PROGRESS 0x0e
+#define LDAP_NO_SUCH_ATTRIBUTE 0x10
+#define LDAP_UNDEFINED_TYPE 0x11
+#define LDAP_INAPPROPRIATE_MATCHING 0x12
+#define LDAP_CONSTRAINT_VIOLATION 0x13
+#define LDAP_TYPE_OR_VALUE_EXISTS 0x14
+#define LDAP_INVALID_SYNTAX 0x15
+#define LDAP_NO_SUCH_OBJECT 0x20
+#define LDAP_ALIAS_PROBLEM 0x21
+#define LDAP_INVALID_DN_SYNTAX 0x22
+#define LDAP_IS_LEAF 0x23
+#define LDAP_ALIAS_DEREF_PROBLEM 0x24
+#define LDAP_INAPPROPRIATE_AUTH 0x30
+#define LDAP_INVALID_CREDENTIALS 0x31
+#define LDAP_INSUFFICIENT_ACCESS 0x32
+#define LDAP_BUSY 0x33
+#define LDAP_UNAVAILABLE 0x34
+#define LDAP_UNWILLING_TO_PERFORM 0x35
+#define LDAP_LOOP_DETECT 0x36
+#define LDAP_NAMING_VIOLATION 0x40
+#define LDAP_OBJECT_CLASS_VIOLATION 0x41
+#define LDAP_NOT_ALLOWED_ON_NONLEAF 0x42
+#define LDAP_NOT_ALLOWED_ON_RDN 0x43
+#define LDAP_ALREADY_EXISTS 0x44
+#define LDAP_NO_OBJECT_CLASS_MODS 0x45
+#define LDAP_RESULTS_TOO_LARGE 0x46
+#define LDAP_AFFECTS_MULTIPLE_DSAS 0x47
+#define LDAP_OTHER 0x50
+#define LDAP_SERVER_DOWN 0x51
+#define LDAP_LOCAL_ERROR 0x52
+#define LDAP_ENCODING_ERROR 0x53
+#define LDAP_DECODING_ERROR 0x54
+#define LDAP_TIMEOUT 0x55
+#define LDAP_AUTH_UNKNOWN 0x56
+#define LDAP_FILTER_ERROR 0x57
+#define LDAP_USER_CANCELLED 0x58
+#define LDAP_PARAM_ERROR 0x59
+#define LDAP_NO_MEMORY 0x5a
+#define LDAP_CONNECT_ERROR 0x5b
+#define LDAP_NOT_SUPPORTED 0x5c
+#define LDAP_CONTROL_NOT_FOUND 0x5d
+#define LDAP_NO_RESULTS_RETURNED 0x5e
+#define LDAP_MORE_RESULTS_TO_RETURN 0x5f
+#define LDAP_CLIENT_LOOP 0x60
+#define LDAP_REFERRAL_LIMIT_EXCEEDED 0x61
+#define LDAP_OPT_SUCCESS LDAP_SUCCESS
+#define LDAP_AUTH_METHOD_NOT_SUPPORTED LDAP_STRONG_AUTH_NOT_SUPPORTED
+#define LDAP_ATTRIBUTE_OR_VALUE_EXISTS LDAP_TYPE_OR_VALUE_EXISTS
+#define LDAP_INSUFFICIENT_RIGHTS LDAP_INSUFFICIENT_ACCESS
+#define LDAP_PARTIAL_RESULTS LDAP_REFERRAL_V2
+#define LDAP_PORT 389
+#define LDAP_SSL_PORT 636
+#define LDAP_GC_PORT 3268
+#define LDAP_SSL_GC_PORT 3269
+#define LDAP_OPT_ON ((void*)1)
+#define LDAP_OPT_OFF ((void*)0)
+#define LDAP_OPT_API_INFO 0x00
+#define LDAP_OPT_DESC 0x01
+#define LDAP_OPT_DEREF 0x02
+#define LDAP_OPT_SIZELIMIT 0x03
+#define LDAP_OPT_TIMELIMIT 0x04
+#define LDAP_OPT_THREAD_FN_PTRS 0x05
+#define LDAP_OPT_REBIND_FN 0x06
+#define LDAP_OPT_REBIND_ARG 0x07
+#define LDAP_OPT_REFERRALS 0x08
+#define LDAP_OPT_RESTART 0x09
+#define LDAP_OPT_SSL 0x0a
+#define LDAP_OPT_IO_FN_PTRS 0x0b
+#define LDAP_OPT_CACHE_FN_PTRS 0x0d
+#define LDAP_OPT_CACHE_STRATEGY 0x0e
+#define LDAP_OPT_CACHE_ENABLE 0x0f
+#define LDAP_OPT_REFERRAL_HOP_LIMIT 0x10
+#define LDAP_OPT_PROTOCOL_VERSION 0x11
+#define LDAP_OPT_SERVER_CONTROLS 0x12
+#define LDAP_OPT_CLIENT_CONTROLS 0x13
+#define LDAP_OPT_API_FEATURE_INFO 0x15
+#define LDAP_OPT_HOST_NAME 0x30
+#define LDAP_OPT_ERROR_NUMBER 0x31
+#define LDAP_OPT_ERROR_STRING 0x32
+#define LDAP_OPT_SERVER_ERROR 0x33
+#define LDAP_OPT_SERVER_EXT_ERROR 0x34
+#define LDAP_OPT_PING_KEEP_ALIVE 0x36
+#define LDAP_OPT_PING_WAIT_TIME 0x37
+#define LDAP_OPT_PING_LIMIT 0x38
+#define LDAP_OPT_DNSDOMAIN_NAME 0x3b
+#define LDAP_OPT_GETDSNAME_FLAGS 0x3d
+#define LDAP_OPT_HOST_REACHABLE 0x3e
+#define LDAP_OPT_PROMPT_CREDENTIALS 0x3f
+#define LDAP_OPT_TCP_KEEPALIVE 0x40
+#define LDAP_OPT_REFERRAL_CALLBACK 0x70
+#define LDAP_OPT_CLIENT_CERTIFICATE 0x80
+#define LDAP_OPT_SERVER_CERTIFICATE 0x81
+#define LDAP_OPT_AUTO_RECONNECT 0x91
+#define LDAP_OPT_SSPI_FLAGS 0x92
+#define LDAP_OPT_SSL_INFO 0x93
+#define LDAP_OPT_REF_DEREF_CONN_PER_MSG 0x94
+#define LDAP_OPT_SIGN 0x95
+#define LDAP_OPT_ENCRYPT 0x96
+#define LDAP_OPT_SASL_METHOD 0x97
+#define LDAP_OPT_AREC_EXCLUSIVE 0x98
+#define LDAP_OPT_SECURITY_CONTEXT 0x99
+#define LDAP_OPT_ROOTDSE_CACHE 0x9a
+#define LDAP_OPT_VERSION LDAP_OPT_PROTOCOL_VERSION
+#define LDAP_OPT_TLS LDAP_OPT_SSL
+#define LDAP_OPT_TLS_INFO LDAP_OPT_SSL_INFO
+#define LDAP_DEREF_NEVER 0x00
+#define LDAP_DEREF_SEARCHING 0x01
+#define LDAP_DEREF_FINDING 0x02
+#define LDAP_DEREF_ALWAYS 0x03
+#define LDAP_NO_LIMIT 0
+#define LDAP_CONTROL_REFERRALS "1.2.840.113556.1.4.616"
+#define LDAP_CONTROL_REFERRALS_W L"1.2.840.113556.1.4.616"
+#define LDAP_CHASE_SUBORDINATE_REFERRALS 0x20U
+#define LDAP_CHASE_EXTERNAL_REFERRALS 0x40U
+#define LDAP_SCOPE_DEFAULT -1
+#define LDAP_SCOPE_BASE 0x0000
+#define LDAP_SCOPE_ONELEVEL 0x0001
+#define LDAP_SCOPE_SUBTREE 0x0002
+#define LDAP_MOD_ADD 0x00
+#define LDAP_MOD_DELETE 0x01
+#define LDAP_MOD_REPLACE 0x02
+#define LDAP_MOD_BVALUES 0x80
+#define LDAP_RES_BIND 0x61
+#define LDAP_RES_SEARCH_ENTRY 0x64
+#define LDAP_RES_SEARCH_RESULT 0x65
+#define LDAP_RES_MODIFY 0x67
+#define LDAP_RES_ADD 0x69
+#define LDAP_RES_DELETE 0x6b
+#define LDAP_RES_MODRDN 0x6d
+#define LDAP_RES_COMPARE 0x6f
+#define LDAP_RES_SEARCH_REFERENCE 0x73
+#define LDAP_RES_EXTENDED 0x78
+#define LDAP_RES_ANY (-1L)
+#define LDAP_MSG_ONE 0x00
+#define LDAP_MSG_ALL 0x01
+#define LDAP_MSG_RECEIVED 0x02
+#define LDAP_SERVER_SORT_OID "1.2.840.113556.1.4.473"
+#define LDAP_SERVER_SORT_OID_W L"1.2.840.113556.1.4.473"
+#define LDAP_SERVER_RESP_SORT_OID "1.2.840.113556.1.4.474"
+#define LDAP_SERVER_RESP_SORT_OID_W L"1.2.840.113556.1.4.474"
+#define LDAP_PAGED_RESULT_OID_STRING "1.2.840.113556.1.4.319"
+#define LDAP_PAGED_RESULT_OID_STRING_W L"1.2.840.113556.1.4.319"
+#define LDAP_CONTROL_VLVREQUEST "2.16.840.1.113730.3.4.9"
+#define LDAP_CONTROL_VLVREQUEST_W L"2.16.840.1.113730.3.4.9"
+#define LDAP_CONTROL_VLVRESPONSE "2.16.840.1.113730.3.4.10"
+#define LDAP_CONTROL_VLVRESPONSE_W L"2.16.840.1.113730.3.4.10"
+#define LDAP_START_TLS_OID "1.3.6.1.4.1.1466.20037"
+#define LDAP_START_TLS_OID_W L"1.3.6.1.4.1.1466.20037"
+#define LDAP_TTL_EXTENDED_OP_OID "1.3.6.1.4.1.1466.101.119.1"
+#define LDAP_TTL_EXTENDED_OP_OID_W L"1.3.6.1.4.1.1466.101.119.1"
+#define LDAP_AUTH_NONE 0x00U
+#define LDAP_AUTH_SIMPLE 0x80U
+#define LDAP_AUTH_SASL 0x83U
+#define LDAP_AUTH_OTHERKIND 0x86U
+#define LDAP_AUTH_EXTERNAL (LDAP_AUTH_OTHERKIND | 0x20U)
+#define LDAP_AUTH_SICILY (LDAP_AUTH_OTHERKIND | 0x200U)
+#define LDAP_AUTH_NEGOTIATE (LDAP_AUTH_OTHERKIND | 0x400U)
+#define LDAP_AUTH_MSN (LDAP_AUTH_OTHERKIND | 0x800U)
+#define LDAP_AUTH_NTLM (LDAP_AUTH_OTHERKIND | 0x1000U)
+#define LDAP_AUTH_DIGEST (LDAP_AUTH_OTHERKIND | 0x4000U)
+#define LDAP_AUTH_DPA (LDAP_AUTH_OTHERKIND | 0x2000U)
+#define LDAP_AUTH_SSPI LDAP_AUTH_NEGOTIATE
+#define LDAP_FILTER_AND 0xa0
+#define LDAP_FILTER_OR 0xa1
+#define LDAP_FILTER_NOT 0xa2
+#define LDAP_FILTER_EQUALITY 0xa3
+#define LDAP_FILTER_SUBSTRINGS 0xa4
+#define LDAP_FILTER_GE 0xa5
+#define LDAP_FILTER_LE 0xa6
+#define LDAP_FILTER_APPROX 0xa8
+#define LDAP_FILTER_EXTENSIBLE 0xa9
+#define LDAP_FILTER_PRESENT 0x87
+#define LDAP_SUBSTRING_INITIAL 0x80
+#define LDAP_SUBSTRING_ANY 0x81
+#define LDAP_SUBSTRING_FINAL 0x82
+
+typedef struct ldap {
+ char Reserved[76];
+ PCHAR ld_host;
+ ULONG ld_version;
+ UCHAR ld_lberoptions;
+ int ld_deref;
+ int ld_timelimit;
+ int ld_sizelimit;
+ int ld_errno;
+ PCHAR ld_matched;
+ PCHAR ld_error;
+} LDAP, *PLDAP;
+typedef struct ldapmsg {
+ ULONG lm_msgid;
+ ULONG lm_msgtype;
+ BerElement *lm_ber;
+ struct ldapmsg *lm_chain;
+ struct ldapmsg *lm_next;
+ ULONG lm_time;
+} LDAPMessage, *PLDAPMessage;
+typedef struct l_timeval {
+ LONG tv_sec;
+ LONG tv_usec;
+} LDAP_TIMEVAL, *PLDAP_TIMEVAL;
+typedef struct ldapapiinfoA {
+ int ldapai_info_version;
+ int ldapai_api_version;
+ int ldapai_protocol_version;
+ char **ldapai_extensions;
+ char *ldapai_vendor_name;
+ int ldapai_vendor_version;
+} LDAPAPIInfoA, *PLDAPAPIInfoA;
+typedef struct ldapapiinfoW {
+ int ldapai_info_version;
+ int ldapai_api_version;
+ int ldapai_protocol_version;
+ PWCHAR *ldapai_extensions;
+ PWCHAR ldapai_vendor_name;
+ int ldapai_vendor_version;
+} LDAPAPIInfoW, *PLDAPAPIInfoW;
+typedef struct ldap_apifeature_infoA {
+ int ldapaif_info_version;
+ char *ldapaif_name;
+ int ldapaif_version;
+} LDAPAPIFeatureInfoA, *PLDAPAPIFeatureInfoA;
+typedef struct ldap_apifeature_infoW {
+ int ldapaif_info_version;
+ PWCHAR ldapaif_name;
+ int ldapaif_version;
+} LDAPAPIFeatureInfoW, *PLDAPAPIFeatureInfoW;
+typedef struct ldapcontrolA {
+ PCHAR ldctl_oid;
+ BerValue ldctl_value;
+ BOOLEAN ldctl_iscritical;
+} LDAPControlA, *PLDAPControlA;
+typedef struct ldapcontrolW {
+ PWCHAR ldctl_oid;
+ BerValue ldctl_value;
+ BOOLEAN ldctl_iscritical;
+} LDAPControlW, *PLDAPControlW;
+typedef union mod_vals_uA {
+ PCHAR *modv_strvals;
+ BerValue **modv_bvals;
+} mod_vals_u_tA;
+typedef union mod_vals_uW {
+ PWCHAR *modv_strvals;
+ BerValue **modv_bvals;
+} mod_vals_u_tW;
+typedef struct ldapmodA {
+ ULONG mod_op;
+ PCHAR mod_type;
+ mod_vals_u_tA mod_vals;
+} LDAPModA, *PLDAPModA;
+typedef struct ldapmodW {
+ ULONG mod_op;
+ PWCHAR mod_type;
+ mod_vals_u_tW mod_vals;
+} LDAPModW, *PLDAPModW;
+
+#define mod_values mod_vals.modv_strvals
+#define mod_bvalues mod_vals.modv_bvals
+
+typedef struct ldapsearch LDAPSearch, *PLDAPSearch;
+typedef struct ldapsortkeyA {
+ PCHAR sk_attrtype;
+ PCHAR sk_matchruleoid;
+ BOOLEAN sk_reverseorder;
+} LDAPSortKeyA, *PLDAPSortKeyA;
+typedef struct ldapsortkeyW {
+ PWCHAR sk_attrtype;
+ PWCHAR sk_matchruleoid;
+ BOOLEAN sk_reverseorder;
+} LDAPSortKeyW, *PLDAPSortKeyW;
+typedef ULONG (__cdecl QUERYFORCONNECTION)(PLDAP,PLDAP,PWCHAR,PCHAR,ULONG,PVOID,PVOID,PLDAP*);
+typedef BOOLEAN (__cdecl NOTIFYOFNEWCONNECTION)(PLDAP,PLDAP,PWCHAR,PCHAR,PLDAP,ULONG,PVOID,PVOID,ULONG);
+typedef ULONG (__cdecl DEREFERENCECONNECTION)(PLDAP,PLDAP);
+typedef BOOLEAN (__cdecl QUERYCLIENTCERT)(PLDAP,PSecPkgContext_IssuerListInfoEx,PCCERT_CONTEXT*);
+typedef struct LdapReferralCallback {
+ ULONG SizeOfCallbacks;
+ QUERYFORCONNECTION *QueryForConnection;
+ NOTIFYOFNEWCONNECTION *NotifyRoutine;
+ DEREFERENCECONNECTION *DereferenceRoutine;
+} LDAP_REFERRAL_CALLBACK, *PLDAP_REFERRAL_CALLBACK;
+typedef struct ldapvlvinfo {
+ int ldvlv_version;
+ unsigned long ldvlv_before_count;
+ unsigned long ldvlv_after_count;
+ unsigned long ldvlv_offset;
+ unsigned long ldvlv_count;
+ BerValue *ldvlv_attrvalue;
+ BerValue *ldvlv_context;
+ void *ldvlv_extradata;
+} LDAPVLVInfo;
+
+/*
+ * Under Microsoft WinLDAP the function ldap_error is only stub.
+ * This macro uses LDAP structure to get error string and pass it to the user.
+ */
+#define ldap_perror(handle,message) printf("%s: %s\n", message, handle->ld_error);
+
+WINLDAPAPI PLDAP ldap_initA(PCHAR,ULONG);
+WINLDAPAPI PLDAP ldap_initW(PWCHAR,ULONG);
+WINLDAPAPI PLDAP ldap_openA(const PCHAR,ULONG);
+WINLDAPAPI PLDAP ldap_openW(const PWCHAR,ULONG);
+WINLDAPAPI PLDAP cldap_openA(const PCHAR,ULONG);
+WINLDAPAPI PLDAP cldap_openW(const PWCHAR,ULONG);
+WINLDAPAPI ULONG ldap_connect(LDAP*,struct l_timeval*);
+WINLDAPAPI PLDAP ldap_sslinitA(PCHAR,ULONG,int);
+WINLDAPAPI PLDAP ldap_sslinitW(PWCHAR,ULONG,int);
+WINLDAPAPI ULONG ldap_start_tls_sA(LDAP*,PLDAPControlA*,PLDAPControlA*);
+WINLDAPAPI ULONG ldap_start_tls_sW(LDAP*,PLDAPControlW*,PLDAPControlW*);
+WINLDAPAPI BOOLEAN ldap_stop_tls_s(LDAP*);
+WINLDAPAPI ULONG ldap_get_optionA(LDAP*,int,void*);
+WINLDAPAPI ULONG ldap_get_optionW(LDAP*,int,void*);
+WINLDAPAPI ULONG ldap_set_optionA(LDAP*,int,const void*);
+WINLDAPAPI ULONG ldap_set_optionW(LDAP*,int,const void*);
+WINLDAPAPI ULONG ldap_control_freeA(LDAPControlA*);
+WINLDAPAPI ULONG ldap_control_freeW(LDAPControlW*);
+WINLDAPAPI ULONG ldap_controls_freeA(LDAPControlA**);
+WINLDAPAPI ULONG ldap_controls_freeW(LDAPControlW**);
+WINLDAPAPI ULONG ldap_free_controlsA(LDAPControlA**);
+WINLDAPAPI ULONG ldap_free_controlsW(LDAPControlW**);
+WINLDAPAPI ULONG ldap_sasl_bindA(LDAP*,const PCHAR, const PCHAR,const BERVAL*,PLDAPControlA*,PLDAPControlA*,int*);
+WINLDAPAPI ULONG ldap_sasl_bindW(LDAP*,const PWCHAR, const PWCHAR,const BERVAL*,PLDAPControlW*,PLDAPControlW*,int*);
+WINLDAPAPI ULONG ldap_sasl_bind_sA(LDAP*,const PCHAR,const PCHAR,const BERVAL*,PLDAPControlA*,PLDAPControlA*,PBERVAL*);
+WINLDAPAPI ULONG ldap_sasl_bind_sW(LDAP*,const PWCHAR,const PWCHAR,const BERVAL*,PLDAPControlW*,PLDAPControlW*,PBERVAL*);
+WINLDAPAPI ULONG ldap_simple_bindA(LDAP*,const PCHAR,const PCHAR);
+WINLDAPAPI ULONG ldap_simple_bindW(LDAP*,const PWCHAR,const PWCHAR);
+WINLDAPAPI ULONG ldap_simple_bind_sA(LDAP*,const PCHAR,const PCHAR);
+WINLDAPAPI ULONG ldap_simple_bind_sW(LDAP*,const PWCHAR,const PWCHAR);
+WINLDAPAPI ULONG ldap_bindA(LDAP*,const PCHAR,const PCHAR,ULONG) _WINLDAP_DEPRECATED;
+WINLDAPAPI ULONG ldap_bindW(LDAP*,const PWCHAR,const PWCHAR,ULONG) _WINLDAP_DEPRECATED;
+WINLDAPAPI ULONG ldap_bind_sA(LDAP*,const PCHAR,const PCHAR,ULONG) _WINLDAP_DEPRECATED;
+WINLDAPAPI ULONG ldap_bind_sW(LDAP*,const PWCHAR,const PWCHAR,ULONG) _WINLDAP_DEPRECATED;
+WINLDAPAPI ULONG ldap_unbind(LDAP*);
+WINLDAPAPI ULONG ldap_unbind_s(LDAP*);
+WINLDAPAPI ULONG ldap_search_extA(LDAP*,const PCHAR,ULONG,const PCHAR,PCHAR[],ULONG,PLDAPControlW*,PLDAPControlW*,ULONG,ULONG,ULONG*);
+WINLDAPAPI ULONG ldap_search_extW(LDAP*,const PWCHAR,ULONG,const PWCHAR,PWCHAR[],ULONG,PLDAPControlW*,PLDAPControlW*,ULONG,ULONG,ULONG*);
+WINLDAPAPI ULONG ldap_search_ext_sA(LDAP*,const PCHAR,ULONG,const PCHAR,PCHAR[],ULONG,PLDAPControlA*,PLDAPControlA*,struct l_timeval*,ULONG,LDAPMessage**);
+WINLDAPAPI ULONG ldap_search_ext_sW(LDAP*,const PWCHAR,ULONG,const PWCHAR,PWCHAR[],ULONG,PLDAPControlW*,PLDAPControlW*,struct l_timeval*,ULONG,LDAPMessage**);
+WINLDAPAPI ULONG ldap_searchA(LDAP*,const PCHAR,ULONG,const PCHAR,PCHAR[],ULONG);
+WINLDAPAPI ULONG ldap_searchW(LDAP*,const PWCHAR,ULONG,const PWCHAR,PWCHAR[],ULONG);
+WINLDAPAPI ULONG ldap_search_sA(LDAP*,const PCHAR,ULONG,const PCHAR,PCHAR[],ULONG,LDAPMessage**);
+WINLDAPAPI ULONG ldap_search_sW(LDAP*,const PWCHAR,ULONG,const PWCHAR,PWCHAR[],ULONG,LDAPMessage**);
+WINLDAPAPI ULONG ldap_search_stA(LDAP*,const PCHAR,ULONG,const PCHAR,PCHAR[],ULONG,struct l_timeval*,LDAPMessage**);
+WINLDAPAPI ULONG ldap_search_stW(LDAP*,const PWCHAR,ULONG,const PWCHAR,PWCHAR[],ULONG,struct l_timeval*,LDAPMessage**);
+WINLDAPAPI ULONG ldap_compare_extA(LDAP*,const PCHAR,const PCHAR,PCHAR,struct berval*,PLDAPControlA*,PLDAPControlA*,ULONG*);
+WINLDAPAPI ULONG ldap_compare_extW(LDAP*,const PWCHAR,const PWCHAR,PWCHAR,struct berval*,PLDAPControlW*,PLDAPControlW*,ULONG*);
+WINLDAPAPI ULONG ldap_compare_ext_sA(LDAP*,const PCHAR,const PCHAR,const PCHAR,struct berval*,PLDAPControlA*,PLDAPControlA*);
+WINLDAPAPI ULONG ldap_compare_ext_sW(LDAP*,const PWCHAR,const PWCHAR,const PWCHAR,struct berval*,PLDAPControlW*,PLDAPControlW*);
+WINLDAPAPI ULONG ldap_compareA(LDAP*,const PCHAR,const PCHAR,PCHAR);
+WINLDAPAPI ULONG ldap_compareW(LDAP*,const PWCHAR,const PWCHAR,PWCHAR);
+WINLDAPAPI ULONG ldap_compare_sA(LDAP*,const PCHAR,const PCHAR,PCHAR);
+WINLDAPAPI ULONG ldap_compare_sW(LDAP*,const PWCHAR,const PWCHAR,PWCHAR);
+WINLDAPAPI ULONG ldap_modify_extA(LDAP*,const PCHAR,LDAPModA*[],PLDAPControlA*,PLDAPControlA*,ULONG*);
+WINLDAPAPI ULONG ldap_modify_extW(LDAP*,const PWCHAR,LDAPModW*[],PLDAPControlW*,PLDAPControlW*,ULONG*);
+WINLDAPAPI ULONG ldap_modify_ext_sA(LDAP*,const PCHAR,LDAPModA*[],PLDAPControlA*,PLDAPControlA*);
+WINLDAPAPI ULONG ldap_modify_ext_sW(LDAP*,const PWCHAR,LDAPModW*[],PLDAPControlW*,PLDAPControlW*);
+WINLDAPAPI ULONG ldap_modifyA(LDAP*,const PCHAR,LDAPModA*[]);
+WINLDAPAPI ULONG ldap_modifyW(LDAP*,const PWCHAR,LDAPModW*[]);
+WINLDAPAPI ULONG ldap_modify_sA(LDAP*,const PCHAR,LDAPModA*[]);
+WINLDAPAPI ULONG ldap_modify_sW(LDAP*,const PWCHAR,LDAPModW*[]);
+WINLDAPAPI ULONG ldap_rename_extA(LDAP*,const PCHAR,const PCHAR,const PCHAR,INT,PLDAPControlA*,PLDAPControlA*,ULONG*);
+WINLDAPAPI ULONG ldap_rename_extW(LDAP*,const PWCHAR,const PWCHAR,const PWCHAR,INT,PLDAPControlW*,PLDAPControlW*,ULONG*);
+WINLDAPAPI ULONG ldap_rename_ext_sA(LDAP*,const PCHAR,const PCHAR,const PCHAR,INT,PLDAPControlA*,PLDAPControlA*);
+WINLDAPAPI ULONG ldap_rename_ext_sW(LDAP*,const PWCHAR,const PWCHAR,const PWCHAR,INT,PLDAPControlW*,PLDAPControlW*);
+WINLDAPAPI ULONG ldap_modrdnA(LDAP*,PCHAR,PCHAR) _WINLDAP_DEPRECATED;
+WINLDAPAPI ULONG ldap_modrdnW(LDAP*,PWCHAR,PWCHAR) _WINLDAP_DEPRECATED;
+WINLDAPAPI ULONG ldap_modrdn_sA(LDAP*,PCHAR,PCHAR) _WINLDAP_DEPRECATED;
+WINLDAPAPI ULONG ldap_modrdn_sW(LDAP*,PWCHAR,PWCHAR) _WINLDAP_DEPRECATED;
+WINLDAPAPI ULONG ldap_modrdn2A(LDAP*,PCHAR,PCHAR,INT) _WINLDAP_DEPRECATED;
+WINLDAPAPI ULONG ldap_modrdn2W(LDAP*,PWCHAR,PWCHAR,INT) _WINLDAP_DEPRECATED;
+WINLDAPAPI ULONG ldap_modrdn2_sA(LDAP*,PCHAR,PCHAR,INT) _WINLDAP_DEPRECATED;
+WINLDAPAPI ULONG ldap_modrdn2_sW(LDAP*,PWCHAR,PWCHAR,INT) _WINLDAP_DEPRECATED;
+WINLDAPAPI ULONG ldap_add_extA(LDAP*,const PCHAR,LDAPModA*[],PLDAPControlA*,PLDAPControlA*,ULONG*);
+WINLDAPAPI ULONG ldap_add_extW(LDAP*,const PWCHAR,LDAPModW*[],PLDAPControlW*,PLDAPControlW*,ULONG*);
+WINLDAPAPI ULONG ldap_add_ext_sA(LDAP*,const PCHAR,LDAPModA*[],PLDAPControlA*,PLDAPControlA*);
+WINLDAPAPI ULONG ldap_add_ext_sW(LDAP*,const PWCHAR,LDAPModW*[],PLDAPControlW*,PLDAPControlW*);
+WINLDAPAPI ULONG ldap_addA(LDAP*,const PCHAR,LDAPModA*[]);
+WINLDAPAPI ULONG ldap_addW(LDAP*,const PWCHAR,LDAPModW*[]);
+WINLDAPAPI ULONG ldap_add_sA(LDAP*,const PCHAR,LDAPModA*[]);
+WINLDAPAPI ULONG ldap_add_sW(LDAP*,const PWCHAR,LDAPModW*[]);
+WINLDAPAPI ULONG ldap_delete_extA(LDAP*,const PCHAR,PLDAPControlA*,PLDAPControlA*,ULONG*);
+WINLDAPAPI ULONG ldap_delete_extW(LDAP*,const PWCHAR,PLDAPControlW*,PLDAPControlW*,ULONG*);
+WINLDAPAPI ULONG ldap_delete_ext_sA(LDAP*,const PCHAR,PLDAPControlA*,PLDAPControlA*);
+WINLDAPAPI ULONG ldap_delete_ext_sW(LDAP*,const PWCHAR,PLDAPControlW*,PLDAPControlW*);
+WINLDAPAPI ULONG ldap_deleteA(LDAP*,const PCHAR);
+WINLDAPAPI ULONG ldap_deleteW(LDAP*,const PWCHAR);
+WINLDAPAPI ULONG ldap_delete_sA(LDAP*,const PCHAR);
+WINLDAPAPI ULONG ldap_delete_sW(LDAP*,const PWCHAR);
+WINLDAPAPI ULONG ldap_extended_operationA(LDAP*,const PCHAR,const struct berval*,PLDAPControlA*,PLDAPControlA*,ULONG*);
+WINLDAPAPI ULONG ldap_extended_operationW(LDAP*,const PWCHAR,const struct berval*,PLDAPControlW*,PLDAPControlW*,ULONG*);
+WINLDAPAPI ULONG ldap_extended_operation_sA(LDAP*,const PCHAR,const struct berval*,PLDAPControlA*,PLDAPControlA*,PCHAR*,struct berval**);
+WINLDAPAPI ULONG ldap_extended_operation_sW(LDAP*,const PWCHAR,const struct berval*,PLDAPControlW*,PLDAPControlW*,PWCHAR*,struct berval**);
+WINLDAPAPI ULONG ldap_close_extended_op(LDAP*,ULONG);
+WINLDAPAPI ULONG ldap_abandon(LDAP*,ULONG);
+WINLDAPAPI ULONG ldap_result(LDAP*,ULONG,ULONG,struct l_timeval*,LDAPMessage**);
+WINLDAPAPI ULONG ldap_msgfree(LDAPMessage*);
+WINLDAPAPI ULONG ldap_parse_resultA(LDAP*,LDAPMessage*,ULONG*,PCHAR*,PCHAR*,PCHAR**,PLDAPControlA**,BOOLEAN);
+WINLDAPAPI ULONG ldap_parse_resultW(LDAP*,LDAPMessage*,ULONG*,PWCHAR*,PWCHAR*,PWCHAR**,PLDAPControlW**,BOOLEAN);
+WINLDAPAPI ULONG ldap_parse_extended_resultA(LDAP,LDAPMessage*,PCHAR*,struct berval**,BOOLEAN);
+WINLDAPAPI ULONG ldap_parse_extended_resultW(LDAP,LDAPMessage*,PWCHAR*,struct berval**,BOOLEAN);
+WINLDAPAPI PCHAR ldap_err2stringA(ULONG);
+WINLDAPAPI PWCHAR ldap_err2stringW(ULONG);
+WINLDAPAPI ULONG LdapGetLastError(void);
+WINLDAPAPI ULONG LdapMapErrorToWin32(ULONG);
+WINLDAPAPI ULONG ldap_result2error(LDAP*,LDAPMessage*,ULONG);
+WINLDAPAPI PLDAPMessage ldap_first_entry(LDAP*,LDAPMessage*);
+WINLDAPAPI PLDAPMessage ldap_next_entry(LDAP*,LDAPMessage*);
+WINLDAPAPI PLDAPMessage ldap_first_reference(LDAP*,LDAPMessage*);
+WINLDAPAPI PLDAPMessage ldap_next_reference(LDAP*,LDAPMessage*);
+WINLDAPAPI ULONG ldap_count_entries(LDAP*,LDAPMessage*);
+WINLDAPAPI ULONG ldap_count_references(LDAP*,LDAPMessage*);
+WINLDAPAPI PCHAR ldap_first_attributeA(LDAP*,LDAPMessage*,BerElement**);
+WINLDAPAPI PWCHAR ldap_first_attributeW(LDAP*,LDAPMessage*,BerElement**);
+WINLDAPAPI PCHAR ldap_next_attributeA(LDAP*,LDAPMessage*,BerElement*);
+WINLDAPAPI PWCHAR ldap_next_attributeW(LDAP*,LDAPMessage*,BerElement*);
+WINLDAPAPI VOID ldap_memfreeA(PCHAR);
+WINLDAPAPI VOID ldap_memfreeW(PWCHAR);
+WINLDAPAPI PCHAR* ldap_get_valuesA(LDAP*,LDAPMessage*,const PCHAR);
+WINLDAPAPI PWCHAR* ldap_get_valuesW(LDAP*,LDAPMessage*,const PWCHAR);
+WINLDAPAPI BerValue** ldap_get_values_lenA(LDAP*,LDAPMessage*,const PCHAR);
+WINLDAPAPI BerValue** ldap_get_values_lenW(LDAP*,LDAPMessage*,const PWCHAR);
+WINLDAPAPI ULONG ldap_count_valuesA(PCHAR*);
+WINLDAPAPI ULONG ldap_count_valuesW(PWCHAR*);
+WINLDAPAPI ULONG ldap_count_values_len(struct berval**);
+WINLDAPAPI ULONG ldap_value_freeA(PCHAR*);
+WINLDAPAPI ULONG ldap_value_freeW(PWCHAR*);
+WINLDAPAPI ULONG ldap_value_free_len(struct berval**);
+WINLDAPAPI PCHAR ldap_get_dnA(LDAP*,LDAPMessage*);
+WINLDAPAPI PWCHAR ldap_get_dnW(LDAP*,LDAPMessage*);
+WINLDAPAPI PCHAR ldap_explode_dnA(PCHAR,ULONG);
+WINLDAPAPI PWCHAR ldap_explode_dnW(PWCHAR,ULONG);
+WINLDAPAPI PCHAR ldap_dn2ufnA(PCHAR);
+WINLDAPAPI PWCHAR ldap_dn2ufnW(PWCHAR);
+WINLDAPAPI ULONG ldap_ufn2dnA(const PCHAR,PCHAR*);
+WINLDAPAPI ULONG ldap_ufn2dnW(const PWCHAR,PWCHAR*);
+WINLDAPAPI ULONG ldap_parse_referenceA(LDAP*,LDAPMessage*,PCHAR**);
+WINLDAPAPI ULONG ldap_parse_referenceW(LDAP*,LDAPMessage*,PWCHAR**);
+WINLDAPAPI ULONG ldap_check_filterA(LDAP*,PCHAR);
+WINLDAPAPI ULONG ldap_check_filterW(LDAP*,PWCHAR);
+WINLDAPAPI ULONG ldap_create_page_controlA(PLDAP,ULONG,struct berval*,UCHAR,PLDAPControlA*);
+WINLDAPAPI ULONG ldap_create_page_controlW(PLDAP,ULONG,struct berval*,UCHAR,PLDAPControlW*);
+WINLDAPAPI ULONG ldap_create_sort_controlA(PLDAP,PLDAPSortKeyA*,UCHAR,PLDAPControlA*);
+WINLDAPAPI ULONG ldap_create_sort_controlW(PLDAP,PLDAPSortKeyW*,UCHAR,PLDAPControlW*);
+WINLDAPAPI INT ldap_create_vlv_controlA(LDAP*,LDAPVLVInfo*,UCHAR,LDAPControlA**);
+WINLDAPAPI INT ldap_create_vlv_controlW(LDAP*,LDAPVLVInfo*,UCHAR,LDAPControlW**);
+WINLDAPAPI ULONG ldap_encode_sort_controlA(PLDAP,PLDAPSortKeyA*,PLDAPControlA,BOOLEAN);
+WINLDAPAPI ULONG ldap_encode_sort_controlW(PLDAP,PLDAPSortKeyW*,PLDAPControlW,BOOLEAN);
+WINLDAPAPI ULONG ldap_escape_filter_elementA(PCHAR,ULONG,PCHAR,ULONG);
+WINLDAPAPI ULONG ldap_escape_filter_elementW(PWCHAR,ULONG,PWCHAR,ULONG);
+WINLDAPAPI ULONG ldap_get_next_page(PLDAP,PLDAPSearch,ULONG,ULONG*);
+WINLDAPAPI ULONG ldap_get_next_page_s(PLDAP,PLDAPSearch,struct l_timeval*,ULONG,ULONG*,LDAPMessage**);
+WINLDAPAPI ULONG ldap_get_paged_count(PLDAP,PLDAPSearch,ULONG*,PLDAPMessage);
+WINLDAPAPI ULONG ldap_parse_page_controlA(PLDAP,PLDAPControlA*,ULONG*,struct berval**);
+WINLDAPAPI ULONG ldap_parse_page_controlW(PLDAP,PLDAPControlW*,ULONG*,struct berval**);
+WINLDAPAPI ULONG ldap_parse_sort_controlA(PLDAP,PLDAPControlA*,ULONG*,PCHAR*);
+WINLDAPAPI ULONG ldap_parse_sort_controlW(PLDAP,PLDAPControlW*,ULONG*,PWCHAR*);
+WINLDAPAPI INT ldap_parse_vlv_controlA(LDAP*,LDAPControlA**,unsigned long*,unsigned long*,struct berval**,int*);
+WINLDAPAPI INT ldap_parse_vlv_controlW(LDAP*,LDAPControlW**,unsigned long*,unsigned long*,struct berval**,int*);
+WINLDAPAPI PLDAPSearch ldap_search_init_pageA(PLDAP,const PCHAR,ULONG,const PCHAR,PCHAR[],ULONG,PLDAPControlA*,PLDAPControlA*,ULONG,ULONG,PLDAPSortKeyA*);
+WINLDAPAPI PLDAPSearch ldap_search_init_pageW(PLDAP,const PWCHAR,ULONG,const PWCHAR,PWCHAR[],ULONG,PLDAPControlW*,PLDAPControlW*,ULONG,ULONG,PLDAPSortKeyW*);
+WINLDAPAPI ULONG ldap_search_abandon_page(PLDAP,PLDAPSearch);
+WINLDAPAPI LDAP ldap_conn_from_msg(LDAP*,LDAPMessage*);
+WINLDAPAPI INT LdapUnicodeToUTF8(LPCWSTR,int,LPSTR,int);
+WINLDAPAPI INT LdapUTF8ToUnicode(LPCSTR,int,LPWSTR,int);
+
+#ifdef UNICODE
+#define LDAPControl LDAPControlW
+#define PLDAPControl PLDAPControlW
+#define LDAPMod LDAPModW
+#define PLDAPMod LDAPModW
+#define LDAPSortKey LDAPSortKeyW
+#define PLDAPSortKey PLDAPSortKeyW
+#define LDAPAPIInfo LDAPAPIInfoW
+#define PLDAPAPIInfo PLDAPAPIInfoW
+#define LDAPAPIFeatureInfo LDAPAPIFeatureInfoW
+#define PLDAPAPIFeatureInfo PLDAPAPIFeatureInfoW
+#define cldap_open cldap_openW
+#define ldap_open ldap_openW
+#define ldap_bind ldap_bindW
+#define ldap_bind_s ldap_bind_sW
+#define ldap_simple_bind ldap_simple_bindW
+#define ldap_simple_bind_s ldap_simple_bind_sW
+#define ldap_sasl_bind ldap_sasl_bindW
+#define ldap_sasl_bind_s ldap_sasl_bind_sW
+#define ldap_init ldap_initW
+#define ldap_sslinit ldap_sslinitW
+#define ldap_get_option ldap_get_optionW
+#define ldap_set_option ldap_set_optionW
+#define ldap_start_tls_s ldap_start_tls_sW
+#define ldap_add ldap_addW
+#define ldap_add_ext ldap_add_extW
+#define ldap_add_s ldap_add_sW
+#define ldap_add_ext_s ldap_add_ext_sW
+#define ldap_compare ldap_compareW
+#define ldap_compare_ext ldap_compare_extW
+#define ldap_compare_s ldap_compare_sW
+#define ldap_compare_ext_s ldap_compare_ext_sW
+#define ldap_delete ldap_deleteW
+#define ldap_delete_ext ldap_delete_extW
+#define ldap_delete_s ldap_delete_sW
+#define ldap_delete_ext_s ldap_delete_ext_sW
+#define ldap_extended_operation_s ldap_extended_operation_sW
+#define ldap_extended_operation ldap_extended_operationW
+#define ldap_modify ldap_modifyW
+#define ldap_modify_ext ldap_modify_extW
+#define ldap_modify_s ldap_modify_sW
+#define ldap_modify_ext_s ldap_modify_ext_sW
+#define ldap_check_filter ldap_check_filterW
+#define ldap_count_values ldap_count_valuesW
+#define ldap_create_page_control ldap_create_page_controlW
+#define ldap_create_sort_control ldap_create_sort_controlW
+#define ldap_create_vlv_control ldap_create_vlv_controlW
+#define ldap_encode_sort_control ldap_encode_sort_controlW
+#define ldap_escape_filter_element ldap_escape_filter_elementW
+#define ldap_first_attribute ldap_first_attributeW
+#define ldap_next_attribute ldap_next_attributeW
+#define ldap_get_values ldap_get_valuesW
+#define ldap_get_values_len ldap_get_values_lenW
+#define ldap_parse_extended_result ldap_parse_extended_resultW
+#define ldap_parse_page_control ldap_parse_page_controlW
+#define ldap_parse_reference ldap_parse_referenceW
+#define ldap_parse_result ldap_parse_resultW
+#define ldap_parse_sort_control ldap_parse_sort_controlW
+#define ldap_parse_vlv_control ldap_parse_vlv_controlW
+#define ldap_search ldap_searchW
+#define ldap_search_s ldap_search_sW
+#define ldap_search_st ldap_search_stW
+#define ldap_search_ext ldap_search_extW
+#define ldap_search_ext_s ldap_search_ext_sW
+#define ldap_search_init_page ldap_search_init_pageW
+#define ldap_err2string ldap_err2stringW
+#define ldap_control_free ldap_control_freeW
+#define ldap_controls_free ldap_controls_freeW
+#define ldap_free_controls ldap_free_controlsW
+#define ldap_memfree ldap_memfreeW
+#define ldap_value_free ldap_value_freeW
+#define ldap_dn2ufn ldap_dn2ufnW
+#define ldap_ufn2dn ldap_ufn2dnW
+#define ldap_explode_dn ldap_explode_dnW
+#define ldap_get_dn ldap_get_dnW
+#define ldap_modrdn ldap_modrdnW
+#define ldap_modrdn_s ldap_modrdn_sW
+#define ldap_modrdn2 ldap_modrdn2W
+#define ldap_modrdn2_s ldap_modrdn2_sW
+#define ldap_rename ldap_rename_extW
+#define ldap_rename_s ldap_rename_ext_sW
+#define ldap_rename_ext ldap_rename_extW
+#define ldap_rename_ext_s ldap_rename_ext_sW
+#else
+#define LDAPControl LDAPControlA
+#define PLDAPControl PLDAPControlA
+#define LDAPMod LDAPModA
+#define PLDAPMod LDAPModA
+#define LDAPSortKey LDAPSortKeyA
+#define PLDAPSortKey PLDAPSortKeyA
+#define LDAPAPIInfo LDAPAPIInfoA
+#define PLDAPAPIInfo PLDAPAPIInfoA
+#define LDAPAPIFeatureInfo LDAPAPIFeatureInfoA
+#define PLDAPAPIFeatureInfo PLDAPAPIFeatureInfoA
+#define cldap_open cldap_openA
+#define ldap_open ldap_openA
+#define ldap_bind ldap_bindA
+#define ldap_bind_s ldap_bind_sA
+#define ldap_simple_bind ldap_simple_bindA
+#define ldap_simple_bind_s ldap_simple_bind_sA
+#define ldap_sasl_bind ldap_sasl_bindA
+#define ldap_sasl_bind_s ldap_sasl_bind_sA
+#define ldap_init ldap_initA
+#define ldap_sslinit ldap_sslinitA
+#define ldap_get_option ldap_get_optionA
+#define ldap_set_option ldap_set_optionA
+#define ldap_start_tls_s ldap_start_tls_sA
+#define ldap_add ldap_addA
+#define ldap_add_ext ldap_add_extA
+#define ldap_add_s ldap_add_sA
+#define ldap_add_ext_s ldap_add_ext_sA
+#define ldap_compare ldap_compareA
+#define ldap_compare_ext ldap_compare_extA
+#define ldap_compare_s ldap_compare_sA
+#define ldap_compare_ext_s ldap_compare_ext_sA
+#define ldap_delete ldap_deleteA
+#define ldap_delete_ext ldap_delete_extA
+#define ldap_delete_s ldap_delete_sA
+#define ldap_delete_ext_s ldap_delete_ext_sA
+#define ldap_extended_operation_s ldap_extended_operation_sA
+#define ldap_extended_operation ldap_extended_operationA
+#define ldap_modify ldap_modifyA
+#define ldap_modify_ext ldap_modify_extA
+#define ldap_modify_s ldap_modify_sA
+#define ldap_modify_ext_s ldap_modify_ext_sA
+#define ldap_check_filter ldap_check_filterA
+#define ldap_count_values ldap_count_valuesA
+#define ldap_create_page_control ldap_create_page_controlA
+#define ldap_create_sort_control ldap_create_sort_controlA
+#define ldap_create_vlv_control ldap_create_vlv_controlA
+#define ldap_encode_sort_control ldap_encode_sort_controlA
+#define ldap_escape_filter_element ldap_escape_filter_elementA
+#define ldap_first_attribute ldap_first_attributeA
+#define ldap_next_attribute ldap_next_attributeA
+#define ldap_get_values ldap_get_valuesA
+#define ldap_get_values_len ldap_get_values_lenA
+#define ldap_parse_extended_result ldap_parse_extended_resultA
+#define ldap_parse_page_control ldap_parse_page_controlA
+#define ldap_parse_reference ldap_parse_referenceA
+#define ldap_parse_result ldap_parse_resultA
+#define ldap_parse_sort_control ldap_parse_sort_controlA
+#define ldap_parse_vlv_control ldap_parse_vlv_controlA
+#define ldap_search ldap_searchA
+#define ldap_search_s ldap_search_sA
+#define ldap_search_st ldap_search_stA
+#define ldap_search_ext ldap_search_extA
+#define ldap_search_ext_s ldap_search_ext_sA
+#define ldap_search_init_page ldap_search_init_pageA
+#define ldap_err2string ldap_err2stringA
+#define ldap_control_free ldap_control_freeA
+#define ldap_controls_free ldap_controls_freeA
+#define ldap_free_controls ldap_free_controlsA
+#define ldap_memfree ldap_memfreeA
+#define ldap_value_free ldap_value_freeA
+#define ldap_dn2ufn ldap_dn2ufnA
+#define ldap_ufn2dn ldap_ufn2dnA
+#define ldap_explode_dn ldap_explode_dnA
+#define ldap_get_dn ldap_get_dnA
+#define ldap_modrdn ldap_modrdnA
+#define ldap_modrdn_s ldap_modrdn_sA
+#define ldap_modrdn2 ldap_modrdn2A
+#define ldap_modrdn2_s ldap_modrdn2_sA
+#define ldap_rename ldap_rename_extA
+#define ldap_rename_s ldap_rename_ext_sA
+#define ldap_rename_ext ldap_rename_extA
+#define ldap_rename_ext_s ldap_rename_ext_sA
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#include <poppack.h>
+
+#endif /* _WINLDAP_H */
diff --git a/tcc/include/winapi/winnetwk.h b/tcc/include/winapi/winnetwk.h
new file mode 100644
index 0000000..022bf8b
--- /dev/null
+++ b/tcc/include/winapi/winnetwk.h
@@ -0,0 +1,350 @@
+#ifndef _WINNETWK_H
+#define _WINNETWK_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#define WNNC_NET_MSNET 0x00010000
+#define WNNC_NET_LANMAN 0x00020000
+#define WNNC_NET_NETWARE 0x00030000
+#define WNNC_NET_VINES 0x00040000
+#define WNNC_NET_10NET 0x00050000
+#define WNNC_NET_LOCUS 0x00060000
+#define WNNC_NET_SUN_PC_NFS 0x00070000
+#define WNNC_NET_LANSTEP 0x00080000
+#define WNNC_NET_9TILES 0x00090000
+#define WNNC_NET_LANTASTIC 0x000A0000
+#define WNNC_NET_AS400 0x000B0000
+#define WNNC_NET_FTP_NFS 0x000C0000
+#define WNNC_NET_PATHWORKS 0x000D0000
+#define WNNC_NET_LIFENET 0x000E0000
+#define WNNC_NET_POWERLAN 0x000F0000
+#define WNNC_NET_BWNFS 0x00100000
+#define WNNC_NET_COGENT 0x00110000
+#define WNNC_NET_FARALLON 0x00120000
+#define WNNC_NET_APPLETALK 0x00130000
+#define WNNC_NET_INTERGRAPH 0x00140000
+#define WNNC_NET_SYMFONET 0x00150000
+#define WNNC_NET_CLEARCASE 0x00160000
+#define WNNC_NET_FRONTIER 0x00170000
+#define WNNC_NET_BMC 0x00180000
+#define WNNC_NET_DCE 0x00190000
+#define WNNC_NET_AVID 0x001A0000
+#define WNNC_NET_DOCUSPACE 0x001B0000
+#define WNNC_NET_MANGOSOFT 0x001C0000
+#define WNNC_NET_SERNET 0x001D0000
+#define WNNC_NET_DECORB 0x00200000
+#define WNNC_NET_PROTSTOR 0x00210000
+#define WNNC_NET_FJ_REDIR 0x00220000
+#define WNNC_NET_DISTINCT 0x00230000
+#define WNNC_NET_TWINS 0x00240000
+#define WNNC_NET_RDR2SAMPLE 0x00250000
+#define WNNC_NET_CSC 0x00260000
+#define WNNC_NET_3IN1 0x00270000
+#define WNNC_NET_EXTENDNET 0x00290000
+#define WNNC_NET_OBJECT_DIRE 0x00300000
+#define WNNC_NET_MASFAX 0x00310000
+#define WNNC_NET_HOB_NFS 0x00320000
+#define WNNC_NET_SHIVA 0x00330000
+#define WNNC_NET_IBMAL 0x00340000
+#define WNNC_CRED_MANAGER 0xFFFF0000
+
+#define RESOURCE_CONNECTED 1
+#define RESOURCE_GLOBALNET 2
+#define RESOURCE_REMEMBERED 3
+#define RESOURCE_RECENT 4
+#define RESOURCE_CONTEXT 5
+#define RESOURCETYPE_ANY 0
+#define RESOURCETYPE_DISK 1
+#define RESOURCETYPE_PRINT 2
+#define RESOURCETYPE_RESERVED 8
+#define RESOURCETYPE_UNKNOWN 0xFFFFFFFF
+#define RESOURCEUSAGE_CONNECTABLE 0x00000001
+#define RESOURCEUSAGE_CONTAINER 0x00000002
+#define RESOURCEUSAGE_NOLOCALDEVICE 0x00000004
+#define RESOURCEUSAGE_SIBLING 0x00000008
+#define RESOURCEUSAGE_ATTACHED 0x00000010
+#define RESOURCEUSAGE_ALL (RESOURCEUSAGE_CONNECTABLE | RESOURCEUSAGE_CONTAINER | RESOURCEUSAGE_ATTACHED)
+#define RESOURCEUSAGE_RESERVED 0x80000000
+#define RESOURCEDISPLAYTYPE_GENERIC 0
+#define RESOURCEDISPLAYTYPE_DOMAIN 1
+#define RESOURCEDISPLAYTYPE_SERVER 2
+#define RESOURCEDISPLAYTYPE_SHARE 3
+#define RESOURCEDISPLAYTYPE_FILE 4
+#define RESOURCEDISPLAYTYPE_GROUP 5
+#define RESOURCEDISPLAYTYPE_NETWORK 6
+#define RESOURCEDISPLAYTYPE_ROOT 7
+#define RESOURCEDISPLAYTYPE_SHAREADMIN 8
+#define RESOURCEDISPLAYTYPE_DIRECTORY 9
+#define RESOURCEDISPLAYTYPE_TREE 10
+#define NETPROPERTY_PERSISTENT 1
+#define CONNECT_UPDATE_PROFILE 1
+#define CONNECT_UPDATE_RECENT 2
+#define CONNECT_TEMPORARY 4
+#define CONNECT_INTERACTIVE 8
+#define CONNECT_PROMPT 16
+#define CONNECT_NEED_DRIVE 32
+#define CONNECT_REFCOUNT 64
+#define CONNECT_REDIRECT 128
+#define CONNECT_LOCALDRIVE 256
+#define CONNECT_CURRENT_MEDIA 512
+#define CONNDLG_RO_PATH 1
+#define CONNDLG_CONN_POINT 2
+#define CONNDLG_USE_MRU 4
+#define CONNDLG_HIDE_BOX 8
+#define CONNDLG_PERSIST 16
+#define CONNDLG_NOT_PERSIST 32
+#define DISC_UPDATE_PROFILE 1
+#define DISC_NO_FORCE 64
+#define WNFMT_MULTILINE 1
+#define WNFMT_ABBREVIATED 2
+#define WNFMT_INENUM 16
+#define WNFMT_CONNECTION 32
+#define WN_SUCCESS NO_ERROR
+#define WN_NO_ERROR NO_ERROR
+#define WN_NOT_SUPPORTED ERROR_NOT_SUPPORTED
+#define WN_CANCEL ERROR_CANCELLED
+#define WN_RETRY ERROR_RETRY
+#define WN_NET_ERROR ERROR_UNEXP_NET_ERR
+#define WN_MORE_DATA ERROR_MORE_DATA
+#define WN_BAD_POINTER ERROR_INVALID_ADDRESS
+#define WN_BAD_VALUE ERROR_INVALID_PARAMETER
+#define WN_BAD_USER ERROR_BAD_USERNAME
+#define WN_BAD_PASSWORD ERROR_INVALID_PASSWORD
+#define WN_ACCESS_DENIED ERROR_ACCESS_DENIED
+#define WN_FUNCTION_BUSY ERROR_BUSY
+#define WN_WINDOWS_ERROR ERROR_UNEXP_NET_ERR
+#define WN_OUT_OF_MEMORY ERROR_NOT_ENOUGH_MEMORY
+#define WN_NO_NETWORK ERROR_NO_NETWORK
+#define WN_EXTENDED_ERROR ERROR_EXTENDED_ERROR
+#define WN_BAD_LEVEL ERROR_INVALID_LEVEL
+#define WN_BAD_HANDLE ERROR_INVALID_HANDLE
+#define WN_NOT_INITIALIZING ERROR_ALREADY_INITIALIZED
+#define WN_NO_MORE_DEVICES ERROR_NO_MORE_DEVICES
+#define WN_NOT_CONNECTED ERROR_NOT_CONNECTED
+#define WN_OPEN_FILES ERROR_OPEN_FILES
+#define WN_DEVICE_IN_USE ERROR_DEVICE_IN_USE
+#define WN_BAD_NETNAME ERROR_BAD_NET_NAME
+#define WN_BAD_LOCALNAME ERROR_BAD_DEVICE
+#define WN_ALREADY_CONNECTED ERROR_ALREADY_ASSIGNED
+#define WN_DEVICE_ERROR ERROR_GEN_FAILURE
+#define WN_CONNECTION_CLOSED ERROR_CONNECTION_UNAVAIL
+#define WN_NO_NET_OR_BAD_PATH ERROR_NO_NET_OR_BAD_PATH
+#define WN_BAD_PROVIDER ERROR_BAD_PROVIDER
+#define WN_CANNOT_OPEN_PROFILE ERROR_CANNOT_OPEN_PROFILE
+#define WN_BAD_PROFILE ERROR_BAD_PROFILE
+#define WN_BAD_DEV_TYPE ERROR_BAD_DEV_TYPE
+#define WN_DEVICE_ALREADY_REMEMBERED ERROR_DEVICE_ALREADY_REMEMBERED
+#define WN_NO_MORE_ENTRIES ERROR_NO_MORE_ITEMS
+#define WN_NOT_CONTAINER ERROR_NOT_CONTAINER
+#define WN_NOT_AUTHENTICATED ERROR_NOT_AUTHENTICATED
+#define WN_NOT_LOGGED_ON ERROR_NOT_LOGGED_ON
+#define WN_NOT_VALIDATED ERROR_NO_LOGON_SERVERS
+#define UNIVERSAL_NAME_INFO_LEVEL 1
+#define REMOTE_NAME_INFO_LEVEL 2
+#define NETINFO_DLL16 1
+#define NETINFO_DISKRED 4
+#define NETINFO_PRINTERRED 8
+#define RP_LOGON 1
+#define RP_INIFILE 2
+#define PP_DISPLAYERRORS 1
+#define WNCON_FORNETCARD 1
+#define WNCON_NOTROUTED 2
+#define WNCON_SLOWLINK 4
+#define WNCON_DYNAMIC 8
+
+#ifndef RC_INVOKED
+typedef struct _NETRESOURCEA {
+ DWORD dwScope;
+ DWORD dwType;
+ DWORD dwDisplayType;
+ DWORD dwUsage;
+ LPSTR lpLocalName;
+ LPSTR lpRemoteName;
+ LPSTR lpComment ;
+ LPSTR lpProvider;
+}NETRESOURCEA,*LPNETRESOURCEA;
+typedef struct _NETRESOURCEW {
+ DWORD dwScope;
+ DWORD dwType;
+ DWORD dwDisplayType;
+ DWORD dwUsage;
+ LPWSTR lpLocalName;
+ LPWSTR lpRemoteName;
+ LPWSTR lpComment ;
+ LPWSTR lpProvider;
+}NETRESOURCEW,*LPNETRESOURCEW;
+typedef struct _CONNECTDLGSTRUCTA{
+ DWORD cbStructure;
+ HWND hwndOwner;
+ LPNETRESOURCEA lpConnRes;
+ DWORD dwFlags;
+ DWORD dwDevNum;
+} CONNECTDLGSTRUCTA,*LPCONNECTDLGSTRUCTA;
+typedef struct _CONNECTDLGSTRUCTW{
+ DWORD cbStructure;
+ HWND hwndOwner;
+ LPNETRESOURCEW lpConnRes;
+ DWORD dwFlags;
+ DWORD dwDevNum;
+} CONNECTDLGSTRUCTW,*LPCONNECTDLGSTRUCTW;
+typedef struct _DISCDLGSTRUCTA{
+ DWORD cbStructure;
+ HWND hwndOwner;
+ LPSTR lpLocalName;
+ LPSTR lpRemoteName;
+ DWORD dwFlags;
+} DISCDLGSTRUCTA,*LPDISCDLGSTRUCTA;
+typedef struct _DISCDLGSTRUCTW{
+ DWORD cbStructure;
+ HWND hwndOwner;
+ LPWSTR lpLocalName;
+ LPWSTR lpRemoteName;
+ DWORD dwFlags;
+} DISCDLGSTRUCTW,*LPDISCDLGSTRUCTW;
+typedef struct _UNIVERSAL_NAME_INFOA { LPSTR lpUniversalName; }UNIVERSAL_NAME_INFOA,*LPUNIVERSAL_NAME_INFOA;
+typedef struct _UNIVERSAL_NAME_INFOW { LPWSTR lpUniversalName; }UNIVERSAL_NAME_INFOW,*LPUNIVERSAL_NAME_INFOW;
+typedef struct _REMOTE_NAME_INFOA {
+ LPSTR lpUniversalName;
+ LPSTR lpConnectionName;
+ LPSTR lpRemainingPath;
+}REMOTE_NAME_INFOA,*LPREMOTE_NAME_INFOA;
+typedef struct _REMOTE_NAME_INFOW {
+ LPWSTR lpUniversalName;
+ LPWSTR lpConnectionName;
+ LPWSTR lpRemainingPath;
+}REMOTE_NAME_INFOW,*LPREMOTE_NAME_INFOW;
+typedef struct _NETINFOSTRUCT{
+ DWORD cbStructure;
+ DWORD dwProviderVersion;
+ DWORD dwStatus;
+ DWORD dwCharacteristics;
+ DWORD dwHandle;
+ WORD wNetType;
+ DWORD dwPrinters;
+ DWORD dwDrives;
+} NETINFOSTRUCT,*LPNETINFOSTRUCT;
+typedef UINT(PASCAL *PFNGETPROFILEPATHA)(LPCSTR,LPSTR,UINT);
+typedef UINT(PASCAL *PFNGETPROFILEPATHW)(LPCWSTR,LPWSTR,UINT);
+typedef UINT(PASCAL *PFNRECONCILEPROFILEA)(LPCSTR,LPCSTR,DWORD);
+typedef UINT(PASCAL *PFNRECONCILEPROFILEW)(LPCWSTR,LPCWSTR,DWORD);
+typedef BOOL(PASCAL *PFNPROCESSPOLICIESA)(HWND,LPCSTR,LPCSTR,LPCSTR,DWORD);
+typedef BOOL(PASCAL *PFNPROCESSPOLICIESW)(HWND,LPCWSTR,LPCWSTR,LPCWSTR,DWORD);
+typedef struct _NETCONNECTINFOSTRUCT{
+ DWORD cbStructure;
+ DWORD dwFlags;
+ DWORD dwSpeed;
+ DWORD dwDelay;
+ DWORD dwOptDataSize;
+} NETCONNECTINFOSTRUCT,*LPNETCONNECTINFOSTRUCT;
+
+DWORD APIENTRY WNetAddConnectionA(LPCSTR,LPCSTR,LPCSTR);
+DWORD APIENTRY WNetAddConnectionW(LPCWSTR,LPCWSTR,LPCWSTR);
+DWORD APIENTRY WNetAddConnection2A(LPNETRESOURCEA,LPCSTR,LPCSTR,DWORD);
+DWORD APIENTRY WNetAddConnection2W(LPNETRESOURCEW,LPCWSTR,LPCWSTR,DWORD);
+DWORD APIENTRY WNetAddConnection3A(HWND,LPNETRESOURCEA,LPCSTR,LPCSTR,DWORD);
+DWORD APIENTRY WNetAddConnection3W(HWND,LPNETRESOURCEW,LPCWSTR,LPCWSTR,DWORD);
+DWORD APIENTRY WNetCancelConnectionA(LPCSTR,BOOL);
+DWORD APIENTRY WNetCancelConnectionW(LPCWSTR,BOOL);
+DWORD APIENTRY WNetCancelConnection2A(LPCSTR,DWORD,BOOL);
+DWORD APIENTRY WNetCancelConnection2W(LPCWSTR,DWORD,BOOL);
+DWORD APIENTRY WNetGetConnectionA(LPCSTR,LPSTR,PDWORD);
+DWORD APIENTRY WNetGetConnectionW(LPCWSTR,LPWSTR,PDWORD);
+DWORD APIENTRY WNetUseConnectionA(HWND,LPNETRESOURCEA,LPCSTR,LPCSTR,DWORD,LPSTR,PDWORD,PDWORD);
+DWORD APIENTRY WNetUseConnectionW(HWND,LPNETRESOURCEW,LPCWSTR,LPCWSTR,DWORD,LPWSTR,PDWORD,PDWORD);
+DWORD APIENTRY WNetSetConnectionA(LPCSTR,DWORD,PVOID);
+DWORD APIENTRY WNetSetConnectionW(LPCWSTR,DWORD,PVOID);
+DWORD APIENTRY WNetConnectionDialog(HWND,DWORD);
+DWORD APIENTRY WNetDisconnectDialog(HWND,DWORD);
+DWORD APIENTRY WNetConnectionDialog1A(LPCONNECTDLGSTRUCTA);
+DWORD APIENTRY WNetConnectionDialog1W(LPCONNECTDLGSTRUCTW);
+DWORD APIENTRY WNetDisconnectDialog1A(LPDISCDLGSTRUCTA);
+DWORD APIENTRY WNetDisconnectDialog1W(LPDISCDLGSTRUCTW);
+DWORD APIENTRY WNetOpenEnumA(DWORD,DWORD,DWORD,LPNETRESOURCEA,LPHANDLE);
+DWORD APIENTRY WNetOpenEnumW(DWORD,DWORD,DWORD,LPNETRESOURCEW,LPHANDLE);
+DWORD APIENTRY WNetEnumResourceA(HANDLE,PDWORD,PVOID,PDWORD);
+DWORD APIENTRY WNetEnumResourceW(HANDLE,PDWORD,PVOID,PDWORD);
+DWORD APIENTRY WNetCloseEnum(HANDLE);
+DWORD APIENTRY WNetGetUniversalNameA(LPCSTR,DWORD,PVOID,PDWORD);
+DWORD APIENTRY WNetGetUniversalNameW(LPCWSTR,DWORD,PVOID,PDWORD);
+DWORD APIENTRY WNetGetUserA(LPCSTR,LPSTR,PDWORD);
+DWORD APIENTRY WNetGetUserW(LPCWSTR,LPWSTR,PDWORD);
+DWORD APIENTRY WNetGetProviderNameA(DWORD,LPSTR,PDWORD);
+DWORD APIENTRY WNetGetProviderNameW(DWORD,LPWSTR,PDWORD);
+DWORD APIENTRY WNetGetNetworkInformationA(LPCSTR,LPNETINFOSTRUCT);
+DWORD APIENTRY WNetGetNetworkInformationW(LPCWSTR,LPNETINFOSTRUCT);
+DWORD APIENTRY WNetGetResourceInformationA(LPNETRESOURCEA,LPVOID,LPDWORD,LPSTR*);
+DWORD APIENTRY WNetGetResourceInformationW(LPNETRESOURCEW,LPVOID,LPDWORD,LPWSTR*);
+DWORD APIENTRY WNetGetResourceParentA(LPNETRESOURCEA,LPVOID,LPDWORD);
+DWORD APIENTRY WNetGetResourceParentW(LPNETRESOURCEW,LPVOID,LPDWORD);
+DWORD APIENTRY WNetGetLastErrorA(PDWORD,LPSTR,DWORD,LPSTR,DWORD);
+DWORD APIENTRY WNetGetLastErrorW(PDWORD,LPWSTR,DWORD,LPWSTR,DWORD);
+DWORD APIENTRY MultinetGetConnectionPerformanceA(LPNETRESOURCEA,LPNETCONNECTINFOSTRUCT);
+DWORD APIENTRY MultinetGetConnectionPerformanceW(LPNETRESOURCEW,LPNETCONNECTINFOSTRUCT);
+#ifdef UNICODE
+#define PFNPROCESSPOLICIES PFNPROCESSPOLICIESW
+#define PFNRECONCILEPROFILE PFNRECONCILEPROFILEW
+#define PFNGETPROFILEPATH PFNGETPROFILEPATHW
+typedef NETRESOURCEW NETRESOURCE,*LPNETRESOURCE;
+typedef CONNECTDLGSTRUCTW CONNECTDLGSTRUCT,*LPCONNECTDLGSTRUCT;
+typedef DISCDLGSTRUCTW DISCDLGSTRUCT,*LPDISCDLGSTRUCT;
+typedef REMOTE_NAME_INFOW REMOTE_NAME_INFO,*LPREMOTE_NAME_INFO;
+typedef UNIVERSAL_NAME_INFOW UNIVERSAL_NAME_INFO,*LPUNIVERSAL_NAME_INFO;
+#define WNetEnumResource WNetEnumResourceW
+#define WNetOpenEnum WNetOpenEnumW
+#define WNetGetResourceInformation WNetGetResourceInformationW
+#define WNetGetResourceParent WNetGetResourceParentW
+#define WNetGetUniversalName WNetGetUniversalNameW
+#define WNetSetConnection WNetSetConnectionW
+#define WNetUseConnection WNetUseConnectionW
+#define WNetGetConnection WNetGetConnectionW
+#define WNetCancelConnection2 WNetCancelConnection2W
+#define WNetCancelConnection WNetCancelConnectionW
+#define WNetAddConnection3 WNetAddConnection3W
+#define WNetAddConnection2 WNetAddConnection2W
+#define WNetAddConnection WNetAddConnectionW
+#define WNetConnectionDialog1 WNetConnectionDialog1W
+#define WNetDisconnectDialog1 WNetDisconnectDialog1W
+#define WNetGetNetworkInformation WNetGetNetworkInformationW
+#define WNetGetProviderName WNetGetProviderNameW
+#define WNetGetUser WNetGetUserW
+#define MultinetGetConnectionPerformance MultinetGetConnectionPerformanceW
+#define WNetGetLastError WNetGetLastErrorW
+#else
+#define PFNGETPROFILEPATH PFNGETPROFILEPATHA
+#define PFNRECONCILEPROFILE PFNRECONCILEPROFILEA
+#define PFNPROCESSPOLICIES PFNPROCESSPOLICIESA
+typedef NETRESOURCEA NETRESOURCE,*LPNETRESOURCE;
+typedef CONNECTDLGSTRUCTA CONNECTDLGSTRUCT,*LPCONNECTDLGSTRUCT;
+typedef DISCDLGSTRUCTA DISCDLGSTRUCT,*LPDISCDLGSTRUCT;
+typedef UNIVERSAL_NAME_INFOA UNIVERSAL_NAME_INFO,*LPUNIVERSAL_NAME_INFO;
+typedef REMOTE_NAME_INFOA REMOTE_NAME_INFO,*LPREMOTE_NAME_INFO;
+#define WNetOpenEnum WNetOpenEnumA
+#define WNetEnumResource WNetEnumResourceA
+#define WNetGetResourceInformation WNetGetResourceInformationA
+#define WNetGetResourceParent WNetGetResourceParentA
+#define WNetGetUniversalName WNetGetUniversalNameA
+#define WNetConnectionDialog1 WNetConnectionDialog1A
+#define WNetDisconnectDialog1 WNetDisconnectDialog1A
+#define WNetAddConnection2 WNetAddConnection2A
+#define WNetAddConnection3 WNetAddConnection3A
+#define WNetCancelConnection WNetCancelConnectionA
+#define WNetCancelConnection2 WNetCancelConnection2A
+#define WNetGetConnection WNetGetConnectionA
+#define WNetUseConnection WNetUseConnectionA
+#define WNetSetConnection WNetSetConnectionA
+#define WNetAddConnection WNetAddConnectionA
+#define WNetGetUser WNetGetUserA
+#define WNetGetProviderName WNetGetProviderNameA
+#define WNetGetNetworkInformation WNetGetNetworkInformationA
+#define WNetGetLastError WNetGetLastErrorA
+#define MultinetGetConnectionPerformance MultinetGetConnectionPerformanceA
+#endif
+#endif
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/winnls.h b/tcc/include/winapi/winnls.h
new file mode 100644
index 0000000..b03eb33
--- /dev/null
+++ b/tcc/include/winapi/winnls.h
@@ -0,0 +1,737 @@
+#ifndef _WINNLS_H
+#define _WINNLS_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifndef WINBASEAPI
+#ifdef __W32API_USE_DLLIMPORT__
+#define WINBASEAPI DECLSPEC_IMPORT
+#else
+#define WINBASEAPI
+#endif
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define MAX_LEADBYTES 12
+#define MAX_DEFAULTCHAR 2
+#define LOCALE_NOUSEROVERRIDE 0x80000000
+#define LOCALE_USE_CP_ACP 0x40000000
+#if (WINVER >= 0x0400)
+#define LOCALE_RETURN_NUMBER 0x20000000
+#endif
+#define LOCALE_ILANGUAGE 1
+#define LOCALE_SLANGUAGE 2
+#define LOCALE_SENGLANGUAGE 0x1001
+#define LOCALE_SABBREVLANGNAME 3
+#define LOCALE_SNATIVELANGNAME 4
+#define LOCALE_ICOUNTRY 5
+#define LOCALE_SCOUNTRY 6
+#define LOCALE_SENGCOUNTRY 0x1002
+#define LOCALE_SABBREVCTRYNAME 7
+#define LOCALE_SNATIVECTRYNAME 8
+#define LOCALE_IDEFAULTLANGUAGE 9
+#define LOCALE_IDEFAULTCOUNTRY 10
+#define LOCALE_IDEFAULTCODEPAGE 11
+#define LOCALE_IDEFAULTANSICODEPAGE 0x1004
+#define LOCALE_SLIST 12
+#define LOCALE_IMEASURE 13
+#define LOCALE_SDECIMAL 14
+#define LOCALE_STHOUSAND 15
+#define LOCALE_SGROUPING 16
+#define LOCALE_IDIGITS 17
+#define LOCALE_ILZERO 18
+#define LOCALE_INEGNUMBER 0x1010
+#define LOCALE_SNATIVEDIGITS 19
+#define LOCALE_SCURRENCY 20
+#define LOCALE_SINTLSYMBOL 21
+#define LOCALE_SMONDECIMALSEP 22
+#define LOCALE_SMONTHOUSANDSEP 23
+#define LOCALE_SMONGROUPING 24
+#define LOCALE_ICURRDIGITS 25
+#define LOCALE_IINTLCURRDIGITS 26
+#define LOCALE_ICURRENCY 27
+#define LOCALE_INEGCURR 28
+#define LOCALE_SDATE 29
+#define LOCALE_STIME 30
+#define LOCALE_SSHORTDATE 31
+#define LOCALE_SLONGDATE 32
+#define LOCALE_STIMEFORMAT 0x1003
+#define LOCALE_IDATE 33
+#define LOCALE_ILDATE 34
+#define LOCALE_ITIME 35
+#define LOCALE_ITIMEMARKPOSN 0x1005
+#define LOCALE_ICENTURY 36
+#define LOCALE_ITLZERO 37
+#define LOCALE_IDAYLZERO 38
+#define LOCALE_IMONLZERO 39
+#define LOCALE_S1159 40
+#define LOCALE_S2359 41
+#define LOCALE_ICALENDARTYPE 0x1009
+#define LOCALE_IOPTIONALCALENDAR 0x100B
+#define LOCALE_IFIRSTDAYOFWEEK 0x100C
+#define LOCALE_IFIRSTWEEKOFYEAR 0x100D
+#define LOCALE_SDAYNAME1 42
+#define LOCALE_SDAYNAME2 43
+#define LOCALE_SDAYNAME3 44
+#define LOCALE_SDAYNAME4 45
+#define LOCALE_SDAYNAME5 46
+#define LOCALE_SDAYNAME6 47
+#define LOCALE_SDAYNAME7 48
+#define LOCALE_SABBREVDAYNAME1 49
+#define LOCALE_SABBREVDAYNAME2 50
+#define LOCALE_SABBREVDAYNAME3 51
+#define LOCALE_SABBREVDAYNAME4 52
+#define LOCALE_SABBREVDAYNAME5 53
+#define LOCALE_SABBREVDAYNAME6 54
+#define LOCALE_SABBREVDAYNAME7 55
+#define LOCALE_SMONTHNAME1 56
+#define LOCALE_SMONTHNAME2 57
+#define LOCALE_SMONTHNAME3 58
+#define LOCALE_SMONTHNAME4 59
+#define LOCALE_SMONTHNAME5 60
+#define LOCALE_SMONTHNAME6 61
+#define LOCALE_SMONTHNAME7 62
+#define LOCALE_SMONTHNAME8 63
+#define LOCALE_SMONTHNAME9 64
+#define LOCALE_SMONTHNAME10 65
+#define LOCALE_SMONTHNAME11 66
+#define LOCALE_SMONTHNAME12 67
+#define LOCALE_SMONTHNAME13 0x100E
+#define LOCALE_SABBREVMONTHNAME1 68
+#define LOCALE_SABBREVMONTHNAME2 69
+#define LOCALE_SABBREVMONTHNAME3 70
+#define LOCALE_SABBREVMONTHNAME4 71
+#define LOCALE_SABBREVMONTHNAME5 72
+#define LOCALE_SABBREVMONTHNAME6 73
+#define LOCALE_SABBREVMONTHNAME7 74
+#define LOCALE_SABBREVMONTHNAME8 75
+#define LOCALE_SABBREVMONTHNAME9 76
+#define LOCALE_SABBREVMONTHNAME10 77
+#define LOCALE_SABBREVMONTHNAME11 78
+#define LOCALE_SABBREVMONTHNAME12 79
+#define LOCALE_SABBREVMONTHNAME13 0x100F
+#define LOCALE_SPOSITIVESIGN 80
+#define LOCALE_SNEGATIVESIGN 81
+#define LOCALE_IPOSSIGNPOSN 82
+#define LOCALE_INEGSIGNPOSN 83
+#define LOCALE_IPOSSYMPRECEDES 84
+#define LOCALE_IPOSSEPBYSPACE 85
+#define LOCALE_INEGSYMPRECEDES 86
+#define LOCALE_INEGSEPBYSPACE 87
+#define LOCALE_FONTSIGNATURE 88
+#define LOCALE_SISO639LANGNAME 89
+#define LOCALE_SISO3166CTRYNAME 90
+#define LOCALE_SYSTEM_DEFAULT 0x800
+#define LOCALE_USER_DEFAULT 0x400
+#define NORM_IGNORECASE 1
+#define NORM_IGNOREKANATYPE 65536
+#define NORM_IGNORENONSPACE 2
+#define NORM_IGNORESYMBOLS 4
+#define NORM_IGNOREWIDTH 131072
+#define SORT_STRINGSORT 4096
+#define LCMAP_LOWERCASE 0x00000100
+#define LCMAP_UPPERCASE 0x00000200
+#define LCMAP_SORTKEY 0x00000400
+#define LCMAP_BYTEREV 0x00000800
+#define LCMAP_HIRAGANA 0x00100000
+#define LCMAP_KATAKANA 0x00200000
+#define LCMAP_HALFWIDTH 0x00400000
+#define LCMAP_FULLWIDTH 0x00800000
+#define LCMAP_LINGUISTIC_CASING 0x01000000
+#define LCMAP_SIMPLIFIED_CHINESE 0x02000000
+#define LCMAP_TRADITIONAL_CHINESE 0x04000000
+#define ENUM_ALL_CALENDARS (-1)
+#define DATE_SHORTDATE 1
+#define DATE_LONGDATE 2
+#define DATE_USE_ALT_CALENDAR 4
+#define CP_INSTALLED 1
+#define CP_SUPPORTED 2
+#define LCID_INSTALLED 1
+#define LCID_SUPPORTED 2
+#define LCID_ALTERNATE_SORTS 4
+#define MAP_FOLDCZONE 16
+#define MAP_FOLDDIGITS 128
+#define MAP_PRECOMPOSED 32
+#define MAP_COMPOSITE 64
+#define CP_ACP 0
+#define CP_OEMCP 1
+#define CP_MACCP 2
+#define CP_THREAD_ACP 3
+#define CP_SYMBOL 42
+#define CP_UTF7 65000
+#define CP_UTF8 65001
+#define CT_CTYPE1 1
+#define CT_CTYPE2 2
+#define CT_CTYPE3 4
+#define C1_UPPER 1
+#define C1_LOWER 2
+#define C1_DIGIT 4
+#define C1_SPACE 8
+#define C1_PUNCT 16
+#define C1_CNTRL 32
+#define C1_BLANK 64
+#define C1_XDIGIT 128
+#define C1_ALPHA 256
+#define C2_LEFTTORIGHT 1
+#define C2_RIGHTTOLEFT 2
+#define C2_EUROPENUMBER 3
+#define C2_EUROPESEPARATOR 4
+#define C2_EUROPETERMINATOR 5
+#define C2_ARABICNUMBER 6
+#define C2_COMMONSEPARATOR 7
+#define C2_BLOCKSEPARATOR 8
+#define C2_SEGMENTSEPARATOR 9
+#define C2_WHITESPACE 10
+#define C2_OTHERNEUTRAL 11
+#define C2_NOTAPPLICABLE 0
+#define C3_NONSPACING 1
+#define C3_DIACRITIC 2
+#define C3_VOWELMARK 4
+#define C3_SYMBOL 8
+#define C3_KATAKANA 16
+#define C3_HIRAGANA 32
+#define C3_HALFWIDTH 64
+#define C3_FULLWIDTH 128
+#define C3_IDEOGRAPH 256
+#define C3_KASHIDA 512
+#define C3_LEXICAL 1024
+#define C3_ALPHA 32768
+#define C3_NOTAPPLICABLE 0
+#define TIME_NOMINUTESORSECONDS 1
+#define TIME_NOSECONDS 2
+#define TIME_NOTIMEMARKER 4
+#define TIME_FORCE24HOURFORMAT 8
+#define MB_PRECOMPOSED 1
+#define MB_COMPOSITE 2
+#define MB_ERR_INVALID_CHARS 8
+#define MB_USEGLYPHCHARS 4
+#define WC_COMPOSITECHECK 512
+#define WC_DISCARDNS 16
+#define WC_SEPCHARS 32
+#define WC_DEFAULTCHAR 64
+#define CTRY_DEFAULT 0
+#define CTRY_ALBANIA 355
+#define CTRY_ALGERIA 213
+#define CTRY_ARGENTINA 54
+#define CTRY_ARMENIA 374
+#define CTRY_AUSTRALIA 61
+#define CTRY_AUSTRIA 43
+#define CTRY_AZERBAIJAN 994
+#define CTRY_BAHRAIN 973
+#define CTRY_BELARUS 375
+#define CTRY_BELGIUM 32
+#define CTRY_BELIZE 501
+#define CTRY_BOLIVIA 591
+#define CTRY_BRAZIL 55
+#define CTRY_BRUNEI_DARUSSALAM 673
+#define CTRY_BULGARIA 359
+#define CTRY_CANADA 2
+#define CTRY_CARIBBEAN 1
+#define CTRY_CHILE 56
+#define CTRY_COLOMBIA 57
+#define CTRY_COSTA_RICA 506
+#define CTRY_CROATIA 385
+#define CTRY_CZECH 420
+#define CTRY_DENMARK 45
+#define CTRY_DOMINICAN_REPUBLIC 1
+#define CTRY_ECUADOR 593
+#define CTRY_EGYPT 20
+#define CTRY_EL_SALVADOR 503
+#define CTRY_ESTONIA 372
+#define CTRY_FAEROE_ISLANDS 298
+#define CTRY_FINLAND 358
+#define CTRY_FRANCE 33
+#define CTRY_GEORGIA 995
+#define CTRY_GERMANY 49
+#define CTRY_GREECE 30
+#define CTRY_GUATEMALA 502
+#define CTRY_HONDURAS 504
+#define CTRY_HONG_KONG 852
+#define CTRY_HUNGARY 36
+#define CTRY_ICELAND 354
+#define CTRY_INDIA 91
+#define CTRY_INDONESIA 62
+#define CTRY_IRAN 981
+#define CTRY_IRAQ 964
+#define CTRY_IRELAND 353
+#define CTRY_ISRAEL 972
+#define CTRY_ITALY 39
+#define CTRY_JAMAICA 1
+#define CTRY_JAPAN 81
+#define CTRY_JORDAN 962
+#define CTRY_KAZAKSTAN 7
+#define CTRY_KENYA 254
+#define CTRY_KUWAIT 965
+#define CTRY_KYRGYZSTAN 996
+#define CTRY_LATVIA 371
+#define CTRY_LEBANON 961
+#define CTRY_LIBYA 218
+#define CTRY_LIECHTENSTEIN 41
+#define CTRY_LITHUANIA 370
+#define CTRY_LUXEMBOURG 352
+#define CTRY_MACAU 853
+#define CTRY_MACEDONIA 389
+#define CTRY_MALAYSIA 60
+#define CTRY_MALDIVES 960
+#define CTRY_MEXICO 52
+#define CTRY_MONACO 33
+#define CTRY_MONGOLIA 976
+#define CTRY_MOROCCO 212
+#define CTRY_NETHERLANDS 31
+#define CTRY_NEW_ZEALAND 64
+#define CTRY_NICARAGUA 505
+#define CTRY_NORWAY 47
+#define CTRY_OMAN 968
+#define CTRY_PAKISTAN 92
+#define CTRY_PANAMA 507
+#define CTRY_PARAGUAY 595
+#define CTRY_PERU 51
+#define CTRY_PHILIPPINES 63
+#define CTRY_POLAND 48
+#define CTRY_PORTUGAL 351
+#define CTRY_PRCHINA 86
+#define CTRY_PUERTO_RICO 1
+#define CTRY_QATAR 974
+#define CTRY_ROMANIA 40
+#define CTRY_RUSSIA 7
+#define CTRY_SAUDI_ARABIA 966
+#define CTRY_SERBIA 381
+#define CTRY_SINGAPORE 65
+#define CTRY_SLOVAK 421
+#define CTRY_SLOVENIA 386
+#define CTRY_SOUTH_AFRICA 27
+#define CTRY_SOUTH_KOREA 82
+#define CTRY_SPAIN 34
+#define CTRY_SWEDEN 46
+#define CTRY_SWITZERLAND 41
+#define CTRY_SYRIA 963
+#define CTRY_TAIWAN 886
+#define CTRY_TATARSTAN 7
+#define CTRY_THAILAND 66
+#define CTRY_TRINIDAD_Y_TOBAGO 1
+#define CTRY_TUNISIA 216
+#define CTRY_TURKEY 90
+#define CTRY_UAE 971
+#define CTRY_UKRAINE 380
+#define CTRY_UNITED_KINGDOM 44
+#define CTRY_UNITED_STATES 1
+#define CTRY_URUGUAY 598
+#define CTRY_UZBEKISTAN 7
+#define CTRY_VENEZUELA 58
+#define CTRY_VIET_NAM 84
+#define CTRY_YEMEN 967
+#define CTRY_ZIMBABWE 263
+#define CAL_ICALINTVALUE 1
+#define CAL_SCALNAME 2
+#define CAL_IYEAROFFSETRANGE 3
+#define CAL_SERASTRING 4
+#define CAL_SSHORTDATE 5
+#define CAL_SLONGDATE 6
+#define CAL_SDAYNAME1 7
+#define CAL_SDAYNAME2 8
+#define CAL_SDAYNAME3 9
+#define CAL_SDAYNAME4 10
+#define CAL_SDAYNAME5 11
+#define CAL_SDAYNAME6 12
+#define CAL_SDAYNAME7 13
+#define CAL_SABBREVDAYNAME1 14
+#define CAL_SABBREVDAYNAME2 15
+#define CAL_SABBREVDAYNAME3 16
+#define CAL_SABBREVDAYNAME4 17
+#define CAL_SABBREVDAYNAME5 18
+#define CAL_SABBREVDAYNAME6 19
+#define CAL_SABBREVDAYNAME7 20
+#define CAL_SMONTHNAME1 21
+#define CAL_SMONTHNAME2 22
+#define CAL_SMONTHNAME3 23
+#define CAL_SMONTHNAME4 24
+#define CAL_SMONTHNAME5 25
+#define CAL_SMONTHNAME6 26
+#define CAL_SMONTHNAME7 27
+#define CAL_SMONTHNAME8 28
+#define CAL_SMONTHNAME9 29
+#define CAL_SMONTHNAME10 30
+#define CAL_SMONTHNAME11 31
+#define CAL_SMONTHNAME12 32
+#define CAL_SMONTHNAME13 33
+#define CAL_SABBREVMONTHNAME1 34
+#define CAL_SABBREVMONTHNAME2 35
+#define CAL_SABBREVMONTHNAME3 36
+#define CAL_SABBREVMONTHNAME4 37
+#define CAL_SABBREVMONTHNAME5 38
+#define CAL_SABBREVMONTHNAME6 39
+#define CAL_SABBREVMONTHNAME7 40
+#define CAL_SABBREVMONTHNAME8 41
+#define CAL_SABBREVMONTHNAME9 42
+#define CAL_SABBREVMONTHNAME10 43
+#define CAL_SABBREVMONTHNAME11 44
+#define CAL_SABBREVMONTHNAME12 45
+#define CAL_SABBREVMONTHNAME13 46
+#define CAL_GREGORIAN 1
+#define CAL_GREGORIAN_US 2
+#define CAL_JAPAN 3
+#define CAL_TAIWAN 4
+#define CAL_KOREA 5
+#define CAL_HIJRI 6
+#define CAL_THAI 7
+#define CAL_HEBREW 8
+#define CAL_GREGORIAN_ME_FRENCH 9
+#define CAL_GREGORIAN_ARABIC 10
+#define CAL_GREGORIAN_XLIT_ENGLISH 11
+#define CAL_GREGORIAN_XLIT_FRENCH 12
+#define CSTR_LESS_THAN 1
+#define CSTR_EQUAL 2
+#define CSTR_GREATER_THAN 3
+#define LGRPID_INSTALLED 1
+#define LGRPID_SUPPORTED 2
+#define LGRPID_WESTERN_EUROPE 1
+#define LGRPID_CENTRAL_EUROPE 2
+#define LGRPID_BALTIC 3
+#define LGRPID_GREEK 4
+#define LGRPID_CYRILLIC 5
+#define LGRPID_TURKISH 6
+#define LGRPID_JAPANESE 7
+#define LGRPID_KOREAN 8
+#define LGRPID_TRADITIONAL_CHINESE 9
+#define LGRPID_SIMPLIFIED_CHINESE 10
+#define LGRPID_THAI 11
+#define LGRPID_HEBREW 12
+#define LGRPID_ARABIC 13
+#define LGRPID_VIETNAMESE 14
+#define LGRPID_INDIC 15
+#define LGRPID_GEORGIAN 16
+#define LGRPID_ARMENIAN 17
+#define IS_HIGH_SURROGATE(c) (((c) & 0xFC00) == 0xD800)
+#define IS_LOW_SURROGATE(c) (((c) & 0xFC00) == 0xDC00)
+#define IS_SURROGATE_PAIR(hc,lc) (IS_HIGH_SURROGATE(hc) && IS_LOW_SURROGATE(lc))
+#if (WINVER >= 0x0410)
+#define CAL_SYEARMONTH 47
+#define CAL_ITWODIGITYEARMAX 48
+#define CAL_NOUSEROVERRIDE LOCALE_NOUSEROVERRIDE
+#define CAL_RETURN_NUMBER LOCALE_RETURN_NUMBER
+#define CAL_USE_CP_ACP LOCALE_USE_CP_ACP
+#define LOCALE_SYEARMONTH 0x1006
+#define LOCALE_SENGCURRNAME 0x1007
+#define LOCALE_SNATIVECURRNAME 0x1008
+#define LOCALE_SSORTNAME 0x1013
+#endif /* (WINVER >= 0x0410) */
+#if (WINVER >= 0x0500)
+#define LOCALE_IDEFAULTEBCDICCODEPAGE 0x1012
+#define LOCALE_IDIGITSUBSTITUTION 0x1014
+#define LOCALE_IPAPERSIZE 0x100A
+#define DATE_YEARMONTH 8
+#define DATE_LTRREADING 16
+#define DATE_RTLREADING 32
+#define MAP_EXPAND_LIGATURES 0x2000
+#define WC_NO_BEST_FIT_CHARS 1024
+#endif /* (WINVER >= 0x0500) */
+#if (WINVER >= 0x0600)
+/*#define CAL_SSHORTESTDAYNAME1 */
+/*#define CAL_SSHORTESTDAYNAME2 */
+/*#define CAL_SSHORTESTDAYNAME3 */
+/*#define CAL_SSHORTESTDAYNAME4 */
+/*#define CAL_SSHORTESTDAYNAME5 */
+/*#define CAL_SSHORTESTDAYNAME6 */
+/*#define CAL_SSHORTESTDAYNAME7 */
+#define CAL_UMALQURA 23
+/*#define LOCALE_SDURATION */
+/*#define LOCALE_SIETFLANGUAGE */
+/*#define LOCALE_SISO3166CTRYNAME2 */
+/*#define LOCALE_SISO639LANGNAME2 */
+/*#define LOCALE_SKEYBOARDSTOINSTALL */
+/*#define LOCALE_SNAME */
+/*#define LOCALE_SNAN */
+/*#define LOCALE_SNEGINFINITY */
+/*#define LOCALE_SPOSINFINITY */
+/*#define LOCALE_SSCRIPTS */
+#endif /* (WINVER >= 0x0600) */
+#ifndef _BASETSD_H
+typedef long LONG_PTR;
+#endif
+
+#ifndef RC_INVOKED
+typedef DWORD LCTYPE;
+typedef DWORD CALTYPE;
+typedef DWORD CALID;
+typedef DWORD LGRPID;
+typedef DWORD GEOID;
+typedef DWORD GEOTYPE;
+typedef DWORD GEOCLASS;
+typedef BOOL (CALLBACK *CALINFO_ENUMPROCA)(LPSTR);
+typedef BOOL (CALLBACK *CALINFO_ENUMPROCW)(LPWSTR);
+typedef BOOL (CALLBACK *CALINFO_ENUMPROCEXA)(LPSTR, CALID);
+typedef BOOL (CALLBACK *CALINFO_ENUMPROCEXW)(LPWSTR, CALID);
+typedef BOOL (CALLBACK *LANGUAGEGROUP_ENUMPROCA)(LGRPID, LPSTR, LPSTR, DWORD, LONG_PTR);
+typedef BOOL (CALLBACK *LANGUAGEGROUP_ENUMPROCW)(LGRPID, LPWSTR, LPWSTR, DWORD, LONG_PTR);
+typedef BOOL (CALLBACK *LANGGROUPLOCALE_ENUMPROCA)(LGRPID, LCID, LPSTR, LONG_PTR);
+typedef BOOL (CALLBACK *LANGGROUPLOCALE_ENUMPROCW)(LGRPID, LCID, LPWSTR, LONG_PTR);
+typedef BOOL (CALLBACK *UILANGUAGE_ENUMPROCW)(LPWSTR, LONG_PTR);
+typedef BOOL (CALLBACK *UILANGUAGE_ENUMPROCA)(LPSTR, LONG_PTR);
+typedef BOOL (CALLBACK *LOCALE_ENUMPROCA)(LPSTR);
+typedef BOOL (CALLBACK *LOCALE_ENUMPROCW)(LPWSTR);
+typedef BOOL (CALLBACK *CODEPAGE_ENUMPROCA)(LPSTR);
+typedef BOOL (CALLBACK *CODEPAGE_ENUMPROCW)(LPWSTR);
+typedef BOOL (CALLBACK *DATEFMT_ENUMPROCA)(LPSTR);
+typedef BOOL (CALLBACK *DATEFMT_ENUMPROCW)(LPWSTR);
+typedef BOOL (CALLBACK *DATEFMT_ENUMPROCEXA)(LPSTR, CALID);
+typedef BOOL (CALLBACK *DATEFMT_ENUMPROCEXW)(LPWSTR, CALID);
+typedef BOOL (CALLBACK *TIMEFMT_ENUMPROCA)(LPSTR);
+typedef BOOL (CALLBACK *TIMEFMT_ENUMPROCW)(LPWSTR);
+typedef BOOL (CALLBACK *GEO_ENUMPROC)(GEOID);
+
+enum NLS_FUNCTION {
+ COMPARE_STRING = 0x0001
+};
+typedef enum NLS_FUNCTION NLS_FUNCTION;
+enum SYSGEOCLASS {
+ GEOCLASS_NATION = 16,
+ GEOCLASS_REGION = 14
+};
+enum SYSGEOTYPE {
+ GEO_NATION = 0x0001,
+ GEO_LATITUDE = 0x0002,
+ GEO_LONGITUDE = 0x0003,
+ GEO_ISO2 = 0x0004,
+ GEO_ISO3 = 0x0005,
+ GEO_RFC1766 = 0x0006,
+ GEO_LCID = 0x0007,
+ GEO_FRIENDLYNAME = 0x0008,
+ GEO_OFFICIALNAME = 0x0009,
+ GEO_TIMEZONES = 0x000a,
+ GEO_OFFICIALLANGUAGES = 0x000a
+};
+
+typedef struct _cpinfo {
+ UINT MaxCharSize;
+ BYTE DefaultChar[MAX_DEFAULTCHAR];
+ BYTE LeadByte[MAX_LEADBYTES];
+} CPINFO,*LPCPINFO;
+typedef struct _cpinfoexA {
+ UINT MaxCharSize;
+ BYTE DefaultChar[MAX_DEFAULTCHAR];
+ BYTE LeadByte[MAX_LEADBYTES];
+ WCHAR UnicodeDefaultChar;
+ UINT CodePage;
+ CHAR CodePageName[MAX_PATH];
+} CPINFOEXA,*LPCPINFOEXA;
+typedef struct _cpinfoexW {
+ UINT MaxCharSize;
+ BYTE DefaultChar[MAX_DEFAULTCHAR];
+ BYTE LeadByte[MAX_LEADBYTES];
+ WCHAR UnicodeDefaultChar;
+ UINT CodePage;
+ WCHAR CodePageName[MAX_PATH];
+} CPINFOEXW,*LPCPINFOEXW;
+typedef struct _currencyfmtA {
+ UINT NumDigits;
+ UINT LeadingZero;
+ UINT Grouping;
+ LPSTR lpDecimalSep;
+ LPSTR lpThousandSep;
+ UINT NegativeOrder;
+ UINT PositiveOrder;
+ LPSTR lpCurrencySymbol;
+} CURRENCYFMTA,*LPCURRENCYFMTA;
+typedef struct _currencyfmtW {
+ UINT NumDigits;
+ UINT LeadingZero;
+ UINT Grouping;
+ LPWSTR lpDecimalSep;
+ LPWSTR lpThousandSep;
+ UINT NegativeOrder;
+ UINT PositiveOrder;
+ LPWSTR lpCurrencySymbol;
+} CURRENCYFMTW,*LPCURRENCYFMTW;
+typedef struct nlsversioninfo {
+ DWORD dwNLSVersionInfoSize;
+ DWORD dwNLSVersion;
+ DWORD dwDefinedVersion;
+} NLSVERSIONINFO,*LPNLSVERSIONINFO;
+typedef struct _numberfmtA {
+ UINT NumDigits;
+ UINT LeadingZero;
+ UINT Grouping;
+ LPSTR lpDecimalSep;
+ LPSTR lpThousandSep;
+ UINT NegativeOrder;
+} NUMBERFMTA,*LPNUMBERFMTA;
+typedef struct _numberfmtW {
+ UINT NumDigits;
+ UINT LeadingZero;
+ UINT Grouping;
+ LPWSTR lpDecimalSep;
+ LPWSTR lpThousandSep;
+ UINT NegativeOrder;
+} NUMBERFMTW,*LPNUMBERFMTW;
+
+WINBASEAPI int WINAPI CompareStringA(LCID,DWORD,LPCSTR,int,LPCSTR,int);
+WINBASEAPI int WINAPI CompareStringW(LCID,DWORD,LPCWSTR,int,LPCWSTR,int);
+WINBASEAPI LCID WINAPI ConvertDefaultLocale(LCID);
+WINBASEAPI BOOL WINAPI EnumCalendarInfoA(CALINFO_ENUMPROCA,LCID,CALID,CALTYPE);
+WINBASEAPI BOOL WINAPI EnumCalendarInfoW(CALINFO_ENUMPROCW,LCID,CALID,CALTYPE);
+WINBASEAPI BOOL WINAPI EnumDateFormatsA(DATEFMT_ENUMPROCA,LCID,DWORD);
+WINBASEAPI BOOL WINAPI EnumDateFormatsW(DATEFMT_ENUMPROCW,LCID,DWORD);
+WINBASEAPI BOOL WINAPI EnumSystemCodePagesA(CODEPAGE_ENUMPROCA,DWORD);
+WINBASEAPI BOOL WINAPI EnumSystemCodePagesW(CODEPAGE_ENUMPROCW,DWORD);
+WINBASEAPI BOOL WINAPI EnumSystemGeoID(GEOCLASS,GEOID,GEO_ENUMPROC);
+WINBASEAPI BOOL WINAPI EnumSystemLocalesA(LOCALE_ENUMPROCA,DWORD);
+WINBASEAPI BOOL WINAPI EnumSystemLocalesW(LOCALE_ENUMPROCW,DWORD);
+WINBASEAPI BOOL WINAPI EnumTimeFormatsA(TIMEFMT_ENUMPROCA,LCID,DWORD);
+WINBASEAPI BOOL WINAPI EnumTimeFormatsW(TIMEFMT_ENUMPROCW,LCID,DWORD);
+WINBASEAPI int WINAPI FoldStringA(DWORD,LPCSTR,int,LPSTR,int);
+WINBASEAPI int WINAPI FoldStringW(DWORD,LPCWSTR,int,LPWSTR,int);
+WINBASEAPI UINT WINAPI GetACP(void);
+WINBASEAPI int WINAPI GetCalendarInfoA(LCID,CALID,CALTYPE,LPSTR,int,LPDWORD);
+WINBASEAPI int WINAPI GetCalendarInfoW(LCID,CALID,CALTYPE,LPWSTR,int,LPDWORD);
+WINBASEAPI BOOL WINAPI GetCPInfo(UINT,LPCPINFO);
+WINBASEAPI BOOL WINAPI GetCPInfoExA(UINT,DWORD,LPCPINFOEXA);
+WINBASEAPI BOOL WINAPI GetCPInfoExW(UINT,DWORD,LPCPINFOEXW);
+WINBASEAPI int WINAPI GetCurrencyFormatA(LCID,DWORD,LPCSTR,const CURRENCYFMTA*,LPSTR,int);
+WINBASEAPI int WINAPI GetCurrencyFormatW(LCID,DWORD,LPCWSTR,const CURRENCYFMTW*,LPWSTR,int);
+WINBASEAPI int WINAPI GetDateFormatA(LCID,DWORD,const SYSTEMTIME*,LPCSTR,LPSTR,int);
+WINBASEAPI int WINAPI GetDateFormatW(LCID,DWORD,const SYSTEMTIME*,LPCWSTR,LPWSTR,int);
+WINBASEAPI int WINAPI GetGeoInfoA(GEOID,GEOTYPE,LPSTR,int,LANGID);
+WINBASEAPI int WINAPI GetGeoInfoW(GEOID,GEOTYPE,LPWSTR,int,LANGID);
+WINBASEAPI int WINAPI GetLocaleInfoA(LCID,LCTYPE,LPSTR,int);
+WINBASEAPI int WINAPI GetLocaleInfoW(LCID,LCTYPE,LPWSTR,int);
+WINBASEAPI BOOL WINAPI GetNLSVersion(NLS_FUNCTION,LCID,LPNLSVERSIONINFO);
+WINBASEAPI int WINAPI GetNumberFormatA(LCID,DWORD,LPCSTR,const NUMBERFMTA*,LPSTR,int);
+WINBASEAPI int WINAPI GetNumberFormatW(LCID,DWORD,LPCWSTR,const NUMBERFMTW*,LPWSTR,int);
+WINBASEAPI UINT WINAPI GetOEMCP(void);
+WINBASEAPI BOOL WINAPI GetStringTypeA(LCID,DWORD,LPCSTR,int,LPWORD);
+WINBASEAPI BOOL WINAPI GetStringTypeW(DWORD,LPCWSTR,int,LPWORD);
+WINBASEAPI BOOL WINAPI GetStringTypeExA(LCID,DWORD,LPCSTR,int,LPWORD);
+WINBASEAPI BOOL WINAPI GetStringTypeExW(LCID,DWORD,LPCWSTR,int,LPWORD);
+WINBASEAPI LANGID WINAPI GetSystemDefaultLangID(void);
+WINBASEAPI LCID WINAPI GetSystemDefaultLCID(void);
+WINBASEAPI LCID WINAPI GetThreadLocale(void);
+WINBASEAPI int WINAPI GetTimeFormatA(LCID,DWORD,const SYSTEMTIME*,LPCSTR,LPSTR,int);
+WINBASEAPI int WINAPI GetTimeFormatW(LCID,DWORD,const SYSTEMTIME*,LPCWSTR,LPWSTR,int);
+WINBASEAPI LANGID WINAPI GetUserDefaultLangID(void);
+WINBASEAPI LCID WINAPI GetUserDefaultLCID(void);
+WINBASEAPI GEOID WINAPI GetUserGeoID(GEOCLASS);
+WINBASEAPI BOOL WINAPI IsDBCSLeadByte(BYTE);
+WINBASEAPI BOOL WINAPI IsDBCSLeadByteEx(UINT,BYTE);
+WINBASEAPI BOOL WINAPI IsNLSDefinedString(NLS_FUNCTION,DWORD,LPNLSVERSIONINFO,LPCWSTR,int);
+WINBASEAPI BOOL WINAPI IsValidCodePage(UINT);
+WINBASEAPI BOOL WINAPI IsValidLocale(LCID,DWORD);
+WINBASEAPI int WINAPI LCMapStringA(LCID,DWORD,LPCSTR,int,LPSTR,int);
+WINBASEAPI int WINAPI LCMapStringW(LCID,DWORD,LPCWSTR,int,LPWSTR,int);
+WINBASEAPI int WINAPI MultiByteToWideChar(UINT,DWORD,LPCSTR,int,LPWSTR,int);
+WINBASEAPI int WINAPI SetCalendarInfoA(LCID,CALID,CALTYPE,LPCSTR);
+WINBASEAPI int WINAPI SetCalendarInfoW(LCID,CALID,CALTYPE,LPCWSTR);
+WINBASEAPI BOOL WINAPI SetLocaleInfoA(LCID,LCTYPE,LPCSTR);
+WINBASEAPI BOOL WINAPI SetLocaleInfoW(LCID,LCTYPE,LPCWSTR);
+WINBASEAPI BOOL WINAPI SetThreadLocale(LCID);
+WINBASEAPI BOOL WINAPI SetUserGeoID(GEOID);
+WINBASEAPI int WINAPI WideCharToMultiByte(UINT,DWORD,LPCWSTR,int,LPSTR,int,LPCSTR,LPBOOL);
+#if (WINVER >= 0x0500)
+WINBASEAPI BOOL WINAPI EnumCalendarInfoExA(CALINFO_ENUMPROCEXA,LCID,CALID,CALTYPE);
+WINBASEAPI BOOL WINAPI EnumCalendarInfoExW(CALINFO_ENUMPROCEXW,LCID,CALID,CALTYPE);
+WINBASEAPI BOOL WINAPI EnumDateFormatsExA(DATEFMT_ENUMPROCEXA,LCID,DWORD);
+WINBASEAPI BOOL WINAPI EnumDateFormatsExW(DATEFMT_ENUMPROCEXW,LCID,DWORD);
+WINBASEAPI BOOL WINAPI EnumSystemLanguageGroupsA(LANGUAGEGROUP_ENUMPROCA,DWORD,LONG_PTR);
+WINBASEAPI BOOL WINAPI EnumSystemLanguageGroupsW(LANGUAGEGROUP_ENUMPROCW,DWORD,LONG_PTR);
+WINBASEAPI BOOL WINAPI EnumLanguageGroupLocalesA(LANGGROUPLOCALE_ENUMPROCA,LGRPID,DWORD,LONG_PTR);
+WINBASEAPI BOOL WINAPI EnumLanguageGroupLocalesW(LANGGROUPLOCALE_ENUMPROCW,LGRPID,DWORD,LONG_PTR);
+WINBASEAPI BOOL WINAPI EnumUILanguagesA(UILANGUAGE_ENUMPROCA,DWORD,LONG_PTR);
+WINBASEAPI BOOL WINAPI EnumUILanguagesW(UILANGUAGE_ENUMPROCW,DWORD,LONG_PTR);
+WINBASEAPI LANGID WINAPI GetSystemDefaultUILanguage(void);
+WINBASEAPI LANGID WINAPI GetUserDefaultUILanguage(void);
+WINBASEAPI BOOL WINAPI IsValidLanguageGroup(LGRPID,DWORD);
+#endif /* (WINVER >= 0x0500) */
+
+#ifdef UNICODE
+#define CALINFO_ENUMPROC CALINFO_ENUMPROCW
+#define CALINFO_ENUMPROCEX CALINFO_ENUMPROCEXW
+#define LOCALE_ENUMPROC LOCALE_ENUMPROCW
+#define CODEPAGE_ENUMPROC CODEPAGE_ENUMPROCW
+#define DATEFMT_ENUMPROC DATEFMT_ENUMPROCW
+#define DATEFMT_ENUMPROCEX DATEFMT_ENUMPROCEXW
+#define TIMEFMT_ENUMPROC TIMEFMT_ENUMPROCW
+#define LANGUAGEGROUP_ENUMPROC LANGUAGEGROUP_ENUMPROCW
+#define LANGGROUPLOCALE_ENUMPROC LANGGROUPLOCALE_ENUMPROCW
+#define UILANGUAGE_ENUMPROC UILANGUAGE_ENUMPROCW
+typedef CPINFOEXW CPINFOEX;
+typedef LPCPINFOEXW LPCPINFOEX;
+typedef CURRENCYFMTW CURRENCYFMT;
+typedef LPCURRENCYFMTW LPCURRENCYFMT;
+typedef NUMBERFMTW NUMBERFMT;
+typedef LPNUMBERFMTW LPNUMBERFMT;
+#define CompareString CompareStringW
+#define EnumCalendarInfo EnumCalendarInfoW
+#define EnumSystemCodePages EnumSystemCodePagesW
+#define EnumSystemLocales EnumSystemLocalesW
+#define EnumTimeFormats EnumTimeFormatsW
+#define FoldString FoldStringW
+#define GetCalendarInfo GetCalendarInfoW
+#define GetCPInfoEx GetCPInfoExW
+#define GetCurrencyFormat GetCurrencyFormatW
+#define GetDateFormat GetDateFormatW
+#define GetGeoInfo GetGeoInfoW
+#define GetLocaleInfo GetLocaleInfoW
+#define GetNumberFormat GetNumberFormatW
+#define GetStringTypeEx GetStringTypeExW
+#define GetTimeFormat GetTimeFormatW
+#define LCMapString LCMapStringW
+#define SetCalendarInfo SetCalendarInfoW
+#define SetLocaleInfo SetLocaleInfoW
+#if (WINVER >= 0x0500)
+#define EnumCalendarInfoEx EnumCalendarInfoExW
+#define EnumDateFormatsEx EnumDateFormatsExW
+#define EnumSystemLanguageGroups EnumSystemLanguageGroupsW
+#define EnumLanguageGroupLocales EnumLanguageGroupLocalesW
+#define EnumUILanguages EnumUILanguagesW
+#endif /* (WINVER >= 0x0500) */
+#else
+#define CALINFO_ENUMPROC CALINFO_ENUMPROCA
+#define CALINFO_ENUMPROCEX CALINFO_ENUMPROCEXA
+#define LOCALE_ENUMPROC LOCALE_ENUMPROCA
+#define CODEPAGE_ENUMPROC CODEPAGE_ENUMPROCA
+#define DATEFMT_ENUMPROC DATEFMT_ENUMPROCA
+#define DATEFMT_ENUMPROCEX DATEFMT_ENUMPROCEXA
+#define TIMEFMT_ENUMPROC TIMEFMT_ENUMPROCA
+#define LANGUAGEGROUP_ENUMPROC LANGUAGEGROUP_ENUMPROCA
+#define LANGGROUPLOCALE_ENUMPROC LANGGROUPLOCALE_ENUMPROCA
+#define UILANGUAGE_ENUMPROC UILANGUAGE_ENUMPROCA
+typedef CPINFOEXA CPINFOEX;
+typedef LPCPINFOEXA LPCPINFOEX;
+typedef CURRENCYFMTA CURRENCYFMT;
+typedef LPCURRENCYFMTA LPCURRENCYFMT;
+typedef NUMBERFMTA NUMBERFMT;
+typedef LPNUMBERFMTA LPNUMBERFMT;
+#define CompareString CompareStringA
+#define EnumCalendarInfo EnumCalendarInfoA
+#define EnumSystemCodePages EnumSystemCodePagesA
+#define EnumSystemLocales EnumSystemLocalesA
+#define EnumTimeFormats EnumTimeFormatsA
+#define FoldString FoldStringA
+#define GetCalendarInfo GetCalendarInfoA
+#define GetCPInfoEx GetCPInfoExA
+#define GetCurrencyFormat GetCurrencyFormatA
+#define GetDateFormat GetDateFormatA
+#define GetGeoInfo GetGeoInfoA
+#define GetLocaleInfo GetLocaleInfoA
+#define GetNumberFormat GetNumberFormatA
+#define GetStringTypeEx GetStringTypeExA
+#define GetTimeFormat GetTimeFormatA
+#define LCMapString LCMapStringA
+#define SetCalendarInfo SetCalendarInfoA
+#define SetLocaleInfo SetLocaleInfoA
+#if (WINVER >= 0x0500)
+#define EnumCalendarInfoEx EnumCalendarInfoExA
+#define EnumDateFormatsEx EnumDateFormatsExA
+#define EnumSystemLanguageGroups EnumSystemLanguageGroupsA
+#define EnumLanguageGroupLocales EnumLanguageGroupLocalesA
+#define EnumUILanguages EnumUILanguagesA
+#endif /* (WINVER >= 0x0500) */
+#endif /* UNICODE */
+#endif /* RC_INVOKED */
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/winnt.h b/tcc/include/winapi/winnt.h
new file mode 100644
index 0000000..65a581d
--- /dev/null
+++ b/tcc/include/winapi/winnt.h
@@ -0,0 +1,4026 @@
+#ifndef _WINNT_H
+#define _WINNT_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+/* translate GCC target defines to MS equivalents. Keep this synchronized
+ with windows.h. */
+#if defined(__i686__) && !defined(_M_IX86)
+#define _M_IX86 600
+#elif defined(__i586__) && !defined(_M_IX86)
+#define _M_IX86 500
+#elif defined(__i486__) && !defined(_M_IX86)
+#define _M_IX86 400
+#elif defined(__i386__) && !defined(_M_IX86)
+#define _M_IX86 300
+#endif
+#if defined(_M_IX86) && !defined(_X86_)
+#define _X86_
+#elif defined(_M_ALPHA) && !defined(_ALPHA_)
+#define _ALPHA_
+#elif defined(_M_PPC) && !defined(_PPC_)
+#define _PPC_
+#elif defined(_M_MRX000) && !defined(_MIPS_)
+#define _MIPS_
+#elif defined(_M_M68K) && !defined(_68K_)
+#define _68K_
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <winerror.h>
+
+#ifndef RC_INVOKED
+#include <string.h>
+
+/* FIXME: add more architectures. Is there a way to specify this in GCC? */
+#ifdef _X86_
+#define UNALIGNED
+#else
+#define UNALIGNED
+#endif
+
+#ifndef DECLSPEC_ALIGN
+#ifdef __GNUC__
+#define DECLSPEC_ALIGN(x) __attribute__((aligned(x)))
+#else
+#define DECLSPEC_ALIGN(x)
+#endif
+#endif
+
+#ifndef DECLSPEC_SELECTANY
+#if (__GNUC__ >= 4)
+#define DECLSPEC_SELECTANY __attribute__((selectany))
+#else
+#define DECLSPEC_SELECTANY
+#endif
+#endif
+
+#ifndef FORCEINLINE
+#if (__GNUC__ >= 3)
+#define FORCEINLINE __inline __attribute__((always_inline))
+#else
+#define FORCEINLINE __inline
+#endif
+#endif
+
+#ifndef C_ASSERT
+#define C_ASSERT(expr) typedef char __C_ASSERT__[(expr)?1:-1]
+#endif
+
+#ifndef VOID
+#define VOID void
+#endif
+typedef char CHAR;
+typedef short SHORT;
+typedef long LONG;
+typedef char CCHAR, *PCCHAR;
+typedef unsigned char UCHAR,*PUCHAR;
+typedef unsigned short USHORT,*PUSHORT;
+typedef unsigned long ULONG,*PULONG;
+typedef char *PSZ;
+
+typedef void *PVOID,*LPVOID;
+
+/* FIXME for __WIN64 */
+#ifndef __ptr64
+#define __ptr64
+#endif
+typedef void* __ptr64 PVOID64;
+
+#ifndef _WCHAR_T_DEFINED
+#define _WCHAR_T_DEFINED
+#ifndef _WCHAR_T_
+#define _WCHAR_T_
+#undef __need_wchar_t
+#ifndef __cplusplus
+typedef unsigned short wchar_t;
+#endif
+#endif
+#endif
+
+typedef wchar_t WCHAR;
+typedef WCHAR *PWCHAR,*LPWCH,*PWCH,*NWPSTR,*LPWSTR,*PWSTR;
+typedef CONST WCHAR *LPCWCH,*PCWCH,*LPCWSTR,*PCWSTR;
+typedef CHAR *PCHAR,*LPCH,*PCH,*NPSTR,*LPSTR,*PSTR;
+typedef CONST CHAR *LPCCH,*PCSTR,*LPCSTR;
+#ifndef _TCHAR_DEFINED
+#define _TCHAR_DEFINED
+#ifdef UNICODE
+/*
+ * NOTE: This tests UNICODE, which is different from the _UNICODE define
+ * used to differentiate standard C runtime calls.
+ */
+typedef WCHAR TCHAR;
+typedef WCHAR _TCHAR;
+#else
+typedef CHAR TCHAR;
+typedef CHAR _TCHAR;
+#endif
+#endif
+typedef TCHAR TBYTE,*PTCH,*PTBYTE;
+typedef TCHAR *LPTCH,*PTSTR,*LPTSTR,*LP,*PTCHAR;
+typedef const TCHAR *LPCTSTR;
+#ifdef UNICODE
+/*
+ * __TEXT is a private macro whose specific use is to force the expansion of a
+ * macro passed as an argument to the macro TEXT. DO NOT use this
+ * macro within your programs. It's name and function could change without
+ * notice.
+ */
+#define __TEXT(q) L##q
+#else
+#define __TEXT(q) q
+#endif
+/*
+ * UNICODE a constant string when UNICODE is defined, else returns the string
+ * unmodified.
+ * The corresponding macros _TEXT() and _T() for mapping _UNICODE strings
+ * passed to C runtime functions are defined in mingw/tchar.h
+ */
+#define TEXT(q) __TEXT(q)
+typedef SHORT *PSHORT;
+typedef LONG *PLONG;
+#ifdef STRICT
+typedef void *HANDLE;
+#define DECLARE_HANDLE(n) typedef struct n##__{int i;}*n
+#else
+typedef PVOID HANDLE;
+#define DECLARE_HANDLE(n) typedef HANDLE n
+#endif
+typedef HANDLE *PHANDLE,*LPHANDLE;
+typedef DWORD LCID;
+typedef PDWORD PLCID;
+typedef WORD LANGID;
+#ifdef __GNUC__
+#define _HAVE_INT64
+#define _INTEGRAL_MAX_BITS 64
+#undef __int64
+#define __int64 long long
+#elif defined(__WATCOMC__) && (defined(_INTEGRAL_MAX_BITS) && _INTEGRAL_MAX_BITS >= 64 )
+#define _HAVE_INT64
+#endif /* __GNUC__/__WATCOMC */
+#if defined(_HAVE_INT64) || (defined(_INTEGRAL_MAX_BITS) && _INTEGRAL_MAX_BITS >= 64)
+typedef __int64 LONGLONG;
+typedef unsigned __int64 DWORDLONG;
+#else
+typedef double LONGLONG,DWORDLONG;
+#endif
+typedef LONGLONG *PLONGLONG;
+typedef DWORDLONG *PDWORDLONG;
+typedef DWORDLONG ULONGLONG,*PULONGLONG;
+typedef LONGLONG USN;
+#ifdef _HAVE_INT64
+#define Int32x32To64(a,b) ((LONGLONG)(a)*(LONGLONG)(b))
+#define UInt32x32To64(a,b) ((DWORDLONG)(a)*(DWORDLONG)(b))
+#define Int64ShllMod32(a,b) ((DWORDLONG)(a)<<(b))
+#define Int64ShraMod32(a,b) ((LONGLONG)(a)>>(b))
+#define Int64ShrlMod32(a,b) ((DWORDLONG)(a)>>(b))
+#endif
+#define ANSI_NULL '\0'
+#define UNICODE_NULL L'\0'
+typedef BYTE BOOLEAN,*PBOOLEAN;
+#endif
+typedef BYTE FCHAR;
+typedef WORD FSHORT;
+typedef DWORD FLONG;
+
+#define NTAPI __stdcall
+#include <basetsd.h>
+#define ACE_OBJECT_TYPE_PRESENT 0x00000001
+#define ACE_INHERITED_OBJECT_TYPE_PRESENT 0x00000002
+#define APPLICATION_ERROR_MASK 0x20000000
+#define ERROR_SEVERITY_SUCCESS 0x00000000
+#define ERROR_SEVERITY_INFORMATIONAL 0x40000000
+#define ERROR_SEVERITY_WARNING 0x80000000
+#define ERROR_SEVERITY_ERROR 0xC0000000
+/* also in ddk/ntifs.h */
+#define COMPRESSION_FORMAT_NONE (0x0000)
+#define COMPRESSION_FORMAT_DEFAULT (0x0001)
+#define COMPRESSION_FORMAT_LZNT1 (0x0002)
+#define COMPRESSION_ENGINE_STANDARD (0x0000)
+#define COMPRESSION_ENGINE_MAXIMUM (0x0100)
+#define COMPRESSION_ENGINE_HIBER (0x0200)
+#define ACCESS_ALLOWED_ACE_TYPE (0x0)
+#define ACCESS_DENIED_ACE_TYPE (0x1)
+#define SYSTEM_AUDIT_ACE_TYPE (0x2)
+#define SYSTEM_ALARM_ACE_TYPE (0x3)
+/*end ntifs.h */
+#define ANYSIZE_ARRAY 1
+#define OBJECT_INHERIT_ACE 1
+#define CONTAINER_INHERIT_ACE 2
+#define NO_PROPAGATE_INHERIT_ACE 4
+#define INHERIT_ONLY_ACE 8
+#define INHERITED_ACE 16
+#define VALID_INHERIT_FLAGS \
+ | OBJECT_INHERIT_ACE \
+ | CONTAINER_INHERIT_ACE \
+ | NO_PROPAGATE_INHERIT_ACE \
+ | INHERIT_ONLY_ACE \
+ | INHERITED_ACE
+#define SUCCESSFUL_ACCESS_ACE_FLAG 64
+#define FAILED_ACCESS_ACE_FLAG 128
+#define DELETE 0x00010000L
+#define READ_CONTROL 0x20000L
+#define WRITE_DAC 0x40000L
+#define WRITE_OWNER 0x80000L
+#define SYNCHRONIZE 0x100000L
+#define STANDARD_RIGHTS_REQUIRED 0xF0000
+#define STANDARD_RIGHTS_READ 0x20000
+#define STANDARD_RIGHTS_WRITE 0x20000
+#define STANDARD_RIGHTS_EXECUTE 0x20000
+#define STANDARD_RIGHTS_ALL 0x1F0000
+#define SPECIFIC_RIGHTS_ALL 0xFFFF
+#define ACCESS_SYSTEM_SECURITY 0x1000000
+
+#define MAXIMUM_ALLOWED 0x2000000
+#define GENERIC_READ 0x80000000
+#define GENERIC_WRITE 0x40000000
+#define GENERIC_EXECUTE 0x20000000
+#define GENERIC_ALL 0x10000000
+
+#define INVALID_FILE_ATTRIBUTES ((DWORD)-1)
+
+/* Also in ddk/winddk.h */
+#define FILE_LIST_DIRECTORY 0x00000001
+#define FILE_READ_DATA 0x00000001
+#define FILE_ADD_FILE 0x00000002
+#define FILE_WRITE_DATA 0x00000002
+#define FILE_ADD_SUBDIRECTORY 0x00000004
+#define FILE_APPEND_DATA 0x00000004
+#define FILE_CREATE_PIPE_INSTANCE 0x00000004
+#define FILE_READ_EA 0x00000008
+#define FILE_READ_PROPERTIES 0x00000008
+#define FILE_WRITE_EA 0x00000010
+#define FILE_WRITE_PROPERTIES 0x00000010
+#define FILE_EXECUTE 0x00000020
+#define FILE_TRAVERSE 0x00000020
+#define FILE_DELETE_CHILD 0x00000040
+#define FILE_READ_ATTRIBUTES 0x00000080
+#define FILE_WRITE_ATTRIBUTES 0x00000100
+
+#define FILE_SHARE_READ 0x00000001
+#define FILE_SHARE_WRITE 0x00000002
+#define FILE_SHARE_DELETE 0x00000004
+#define FILE_SHARE_VALID_FLAGS 0x00000007
+
+#define FILE_ATTRIBUTE_READONLY 0x00000001
+#define FILE_ATTRIBUTE_HIDDEN 0x00000002
+#define FILE_ATTRIBUTE_SYSTEM 0x00000004
+#define FILE_ATTRIBUTE_DIRECTORY 0x00000010
+#define FILE_ATTRIBUTE_ARCHIVE 0x00000020
+#define FILE_ATTRIBUTE_DEVICE 0x00000040
+#define FILE_ATTRIBUTE_NORMAL 0x00000080
+#define FILE_ATTRIBUTE_TEMPORARY 0x00000100
+#define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200
+#define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400
+#define FILE_ATTRIBUTE_COMPRESSED 0x00000800
+#define FILE_ATTRIBUTE_OFFLINE 0x00001000
+#define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000
+#define FILE_ATTRIBUTE_ENCRYPTED 0x00004000
+#define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7
+#define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7
+
+#define FILE_COPY_STRUCTURED_STORAGE 0x00000041
+#define FILE_STRUCTURED_STORAGE 0x00000441
+
+#define FILE_VALID_OPTION_FLAGS 0x00ffffff
+#define FILE_VALID_PIPE_OPTION_FLAGS 0x00000032
+#define FILE_VALID_MAILSLOT_OPTION_FLAGS 0x00000032
+#define FILE_VALID_SET_FLAGS 0x00000036
+
+#define FILE_SUPERSEDE 0x00000000
+#define FILE_OPEN 0x00000001
+#define FILE_CREATE 0x00000002
+#define FILE_OPEN_IF 0x00000003
+#define FILE_OVERWRITE 0x00000004
+#define FILE_OVERWRITE_IF 0x00000005
+#define FILE_MAXIMUM_DISPOSITION 0x00000005
+
+#define FILE_DIRECTORY_FILE 0x00000001
+#define FILE_WRITE_THROUGH 0x00000002
+#define FILE_SEQUENTIAL_ONLY 0x00000004
+#define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
+#define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
+#define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
+#define FILE_NON_DIRECTORY_FILE 0x00000040
+#define FILE_CREATE_TREE_CONNECTION 0x00000080
+#define FILE_COMPLETE_IF_OPLOCKED 0x00000100
+#define FILE_NO_EA_KNOWLEDGE 0x00000200
+#define FILE_OPEN_FOR_RECOVERY 0x00000400
+#define FILE_RANDOM_ACCESS 0x00000800
+#define FILE_DELETE_ON_CLOSE 0x00001000
+#define FILE_OPEN_BY_FILE_ID 0x00002000
+#define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000
+#define FILE_NO_COMPRESSION 0x00008000
+#define FILE_RESERVE_OPFILTER 0x00100000
+#define FILE_OPEN_REPARSE_POINT 0x00200000
+#define FILE_OPEN_NO_RECALL 0x00400000
+#define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000
+
+#define FILE_ALL_ACCESS \
+ (STANDARD_RIGHTS_REQUIRED | \
+ SYNCHRONIZE | \
+ 0x1FF)
+
+#define FILE_GENERIC_EXECUTE \
+ (STANDARD_RIGHTS_EXECUTE | \
+ FILE_READ_ATTRIBUTES | \
+ FILE_EXECUTE | \
+ SYNCHRONIZE)
+
+#define FILE_GENERIC_READ \
+ (STANDARD_RIGHTS_READ | \
+ FILE_READ_DATA | \
+ FILE_READ_ATTRIBUTES | \
+ FILE_READ_EA | \
+ SYNCHRONIZE)
+
+#define FILE_GENERIC_WRITE \
+ (STANDARD_RIGHTS_WRITE | \
+ FILE_WRITE_DATA | \
+ FILE_WRITE_ATTRIBUTES | \
+ FILE_WRITE_EA | \
+ FILE_APPEND_DATA | \
+ SYNCHRONIZE)
+/* end winddk.h */
+/* also in ddk/ntifs.h */
+#define FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001
+#define FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002
+#define FILE_NOTIFY_CHANGE_NAME 0x00000003
+#define FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004
+#define FILE_NOTIFY_CHANGE_SIZE 0x00000008
+#define FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010
+#define FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020
+#define FILE_NOTIFY_CHANGE_CREATION 0x00000040
+#define FILE_NOTIFY_CHANGE_EA 0x00000080
+#define FILE_NOTIFY_CHANGE_SECURITY 0x00000100
+#define FILE_NOTIFY_CHANGE_STREAM_NAME 0x00000200
+#define FILE_NOTIFY_CHANGE_STREAM_SIZE 0x00000400
+#define FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800
+#define FILE_NOTIFY_VALID_MASK 0x00000fff
+
+#define FILE_CASE_SENSITIVE_SEARCH 0x00000001
+#define FILE_CASE_PRESERVED_NAMES 0x00000002
+#define FILE_UNICODE_ON_DISK 0x00000004
+#define FILE_PERSISTENT_ACLS 0x00000008
+#define FILE_FILE_COMPRESSION 0x00000010
+#define FILE_VOLUME_QUOTAS 0x00000020
+#define FILE_SUPPORTS_SPARSE_FILES 0x00000040
+#define FILE_SUPPORTS_REPARSE_POINTS 0x00000080
+#define FILE_SUPPORTS_REMOTE_STORAGE 0x00000100
+#define FS_LFN_APIS 0x00004000
+#define FILE_VOLUME_IS_COMPRESSED 0x00008000
+#define FILE_SUPPORTS_OBJECT_IDS 0x00010000
+#define FILE_SUPPORTS_ENCRYPTION 0x00020000
+#define FILE_NAMED_STREAMS 0x00040000
+#define FILE_READ_ONLY_VOLUME 0x00080000
+#define FILE_SEQUENTIAL_WRITE_ONCE 0x00100000
+#define FILE_SUPPORTS_TRANSACTIONS 0x00200000
+/* Note: These flags only have a meaning starting with Windows 7/2008 R2.
+ Their absence on older OSes does NOT mean that a filesystem is missing
+ that property. */
+#define FILE_SUPPORTS_HARD_LINKS 0x00400000
+#define FILE_SUPPORTS_EXTENDED_ATTRIBUTES 0x00800000
+#define FILE_SUPPORTS_OPEN_BY_FILE_ID 0x01000000
+#define FILE_SUPPORTS_USN_JOURNAL 0x02000000
+
+
+#define IO_COMPLETION_QUERY_STATE 0x0001
+#define IO_COMPLETION_MODIFY_STATE 0x0002
+#define IO_COMPLETION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
+/* end ntifs.h */
+
+/* also in ddk/winddk.h */
+#define DUPLICATE_CLOSE_SOURCE 0x00000001
+#define DUPLICATE_SAME_ACCESS 0x00000002
+#define DUPLICATE_SAME_ATTRIBUTES 0x00000004
+/* end winddk.k */
+
+#define MAILSLOT_NO_MESSAGE ((DWORD)-1)
+#define MAILSLOT_WAIT_FOREVER ((DWORD)-1)
+#define PROCESS_TERMINATE 1
+#define PROCESS_CREATE_THREAD 2
+#define PROCESS_SET_SESSIONID 4
+#define PROCESS_VM_OPERATION 8
+#define PROCESS_VM_READ 16
+#define PROCESS_VM_WRITE 32
+#define PROCESS_DUP_HANDLE 64
+#define PROCESS_CREATE_PROCESS 128
+#define PROCESS_SET_QUOTA 256
+#define PROCESS_SUSPEND_RESUME 0x0800
+#define PROCESS_SET_INFORMATION 512
+#define PROCESS_QUERY_INFORMATION 1024
+#define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0xFFF)
+#define THREAD_TERMINATE 1
+#define THREAD_SUSPEND_RESUME 2
+#define THREAD_GET_CONTEXT 8
+#define THREAD_SET_CONTEXT 16
+#define THREAD_SET_INFORMATION 32
+#define THREAD_QUERY_INFORMATION 64
+#define THREAD_SET_THREAD_TOKEN 128
+#define THREAD_IMPERSONATE 256
+#define THREAD_DIRECT_IMPERSONATION 0x200
+#define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3FF)
+#define THREAD_BASE_PRIORITY_LOWRT 15
+#define THREAD_BASE_PRIORITY_MAX 2
+#define THREAD_BASE_PRIORITY_MIN (-2)
+#define THREAD_BASE_PRIORITY_IDLE (-15)
+#define EXCEPTION_NONCONTINUABLE 1
+#define EXCEPTION_MAXIMUM_PARAMETERS 15
+#define MUTANT_QUERY_STATE 0x0001
+#define MUTANT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|MUTANT_QUERY_STATE)
+#define TIMER_QUERY_STATE 0x0001
+#define TIMER_MODIFY_STATE 0x0002
+#define TIMER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|TIMER_QUERY_STATE|TIMER_MODIFY_STATE)
+/*
+ * To prevent gcc compiler warnings, bracket these defines when initialising
+ * a SID_IDENTIFIER_AUTHORITY, eg.
+ * SID_IDENTIFIER_AUTHORITY aNullSidAuthority = {SECURITY_NULL_SID_AUTHORITY};
+ */
+#define SECURITY_NULL_SID_AUTHORITY {0,0,0,0,0,0}
+#define SECURITY_WORLD_SID_AUTHORITY {0,0,0,0,0,1}
+#define SECURITY_LOCAL_SID_AUTHORITY {0,0,0,0,0,2}
+#define SECURITY_CREATOR_SID_AUTHORITY {0,0,0,0,0,3}
+#define SECURITY_NON_UNIQUE_AUTHORITY {0,0,0,0,0,4}
+#define SECURITY_NT_AUTHORITY {0,0,0,0,0,5}
+#define SECURITY_MANDATORY_LABEL_AUTHORITY {0,0,0,0,0,16}
+#define SECURITY_NULL_RID 0
+#define SECURITY_WORLD_RID (0x00000000L)
+#define SECURITY_LOCAL_RID 0
+#define SECURITY_CREATOR_OWNER_RID 0
+#define SECURITY_CREATOR_GROUP_RID 1
+#define SECURITY_DIALUP_RID 1
+#define SECURITY_NETWORK_RID 2
+#define SECURITY_BATCH_RID 3
+#define SECURITY_INTERACTIVE_RID 4
+#define SECURITY_LOGON_IDS_RID 5
+#define SECURITY_SERVICE_RID 6
+#define SECURITY_LOCAL_SYSTEM_RID 18
+#define SECURITY_BUILTIN_DOMAIN_RID 32
+#define SECURITY_PRINCIPAL_SELF_RID 10
+#define SECURITY_CREATOR_OWNER_SERVER_RID 0x2
+#define SECURITY_CREATOR_GROUP_SERVER_RID 0x3
+#define SECURITY_LOGON_IDS_RID_COUNT 0x3
+#define SECURITY_ANONYMOUS_LOGON_RID 0x7
+#define SECURITY_PROXY_RID 0x8
+#define SECURITY_ENTERPRISE_CONTROLLERS_RID 0x9
+#define SECURITY_SERVER_LOGON_RID SECURITY_ENTERPRISE_CONTROLLERS_RID
+#define SECURITY_AUTHENTICATED_USER_RID 0xB
+#define SECURITY_RESTRICTED_CODE_RID 0xC
+#define SECURITY_NT_NON_UNIQUE_RID 0x15
+#define SID_REVISION 1
+#if (_WIN32_WINNT >= 0x0600)
+#define SID_HASH_SIZE 32
+#endif
+#define DOMAIN_USER_RID_ADMIN 0x1F4L
+#define DOMAIN_USER_RID_GUEST 0x1F5L
+#define DOMAIN_GROUP_RID_ADMINS 0x200L
+#define DOMAIN_GROUP_RID_USERS 0x201L
+#define DOMAIN_ALIAS_RID_ADMINS 0x220L
+#define DOMAIN_ALIAS_RID_USERS 0x221L
+#define DOMAIN_ALIAS_RID_GUESTS 0x222L
+#define DOMAIN_ALIAS_RID_POWER_USERS 0x223L
+#define DOMAIN_ALIAS_RID_ACCOUNT_OPS 0x224L
+#define DOMAIN_ALIAS_RID_SYSTEM_OPS 0x225L
+#define DOMAIN_ALIAS_RID_PRINT_OPS 0x226L
+#define DOMAIN_ALIAS_RID_BACKUP_OPS 0x227L
+#define DOMAIN_ALIAS_RID_REPLICATOR 0x228L
+#define SECURITY_MANDATORY_UNTRUSTED_RID 0
+#define SECURITY_MANDATORY_LOW_RID 0x1000
+#define SECURITY_MANDATORY_MEDIUM_RID 0x2000
+#define SECURITY_MANDATORY_HIGH_RID 0x3000
+#define SECURITY_MANDATORY_SYSTEM_RID 0x4000
+#define SECURITY_MANDATORY_PROTECTED_PROCESS_RID 0x5000
+#define SECURITY_MANDATORY_MAXIMUM_USER_RID SECURITY_MANDATORY_SYSTEM_RID
+#define SE_CREATE_TOKEN_NAME TEXT("SeCreateTokenPrivilege")
+#define SE_ASSIGNPRIMARYTOKEN_NAME TEXT("SeAssignPrimaryTokenPrivilege")
+#define SE_LOCK_MEMORY_NAME TEXT("SeLockMemoryPrivilege")
+#define SE_INCREASE_QUOTA_NAME TEXT("SeIncreaseQuotaPrivilege")
+#define SE_UNSOLICITED_INPUT_NAME TEXT("SeUnsolicitedInputPrivilege")
+#define SE_MACHINE_ACCOUNT_NAME TEXT("SeMachineAccountPrivilege")
+#define SE_TCB_NAME TEXT("SeTcbPrivilege")
+#define SE_SECURITY_NAME TEXT("SeSecurityPrivilege")
+#define SE_TAKE_OWNERSHIP_NAME TEXT("SeTakeOwnershipPrivilege")
+#define SE_LOAD_DRIVER_NAME TEXT("SeLoadDriverPrivilege")
+#define SE_SYSTEM_PROFILE_NAME TEXT("SeSystemProfilePrivilege")
+#define SE_SYSTEMTIME_NAME TEXT("SeSystemtimePrivilege")
+#define SE_PROF_SINGLE_PROCESS_NAME TEXT("SeProfileSingleProcessPrivilege")
+#define SE_INC_BASE_PRIORITY_NAME TEXT("SeIncreaseBasePriorityPrivilege")
+#define SE_CREATE_PAGEFILE_NAME TEXT("SeCreatePagefilePrivilege")
+#define SE_CREATE_PERMANENT_NAME TEXT("SeCreatePermanentPrivilege")
+#define SE_BACKUP_NAME TEXT("SeBackupPrivilege")
+#define SE_RESTORE_NAME TEXT("SeRestorePrivilege")
+#define SE_SHUTDOWN_NAME TEXT("SeShutdownPrivilege")
+#define SE_DEBUG_NAME TEXT("SeDebugPrivilege")
+#define SE_AUDIT_NAME TEXT("SeAuditPrivilege")
+#define SE_SYSTEM_ENVIRONMENT_NAME TEXT("SeSystemEnvironmentPrivilege")
+#define SE_CHANGE_NOTIFY_NAME TEXT("SeChangeNotifyPrivilege")
+#define SE_REMOTE_SHUTDOWN_NAME TEXT("SeRemoteShutdownPrivilege")
+#define SE_CREATE_GLOBAL_NAME TEXT("SeCreateGlobalPrivilege")
+#define SE_UNDOCK_NAME TEXT("SeUndockPrivilege")
+#define SE_MANAGE_VOLUME_NAME TEXT("SeManageVolumePrivilege")
+#define SE_IMPERSONATE_NAME TEXT("SeImpersonatePrivilege")
+#define SE_ENABLE_DELEGATION_NAME TEXT("SeEnableDelegationPrivilege")
+#define SE_SYNC_AGENT_NAME TEXT("SeSyncAgentPrivilege")
+#define SE_TRUSTED_CREDMAN_ACCESS_NAME TEXT("SeTrustedCredManAccessPrivilege")
+#define SE_RELABEL_NAME TEXT("SeRelabelPrivilege")
+#define SE_INCREASE_WORKING_SET_NAME TEXT("SeIncreaseWorkingSetPrivilege")
+#define SE_TIME_ZONE_NAME TEXT("SeTimeZonePrivilege")
+#define SE_CREATE_SYMBOLIC_LINK_NAME TEXT("SeCreateSymbolicLinkPrivilege")
+#define SE_GROUP_MANDATORY 1
+#define SE_GROUP_ENABLED_BY_DEFAULT 2
+#define SE_GROUP_ENABLED 4
+#define SE_GROUP_OWNER 8
+#define SE_GROUP_USE_FOR_DENY_ONLY 16
+#define SE_GROUP_INTEGRITY 32
+#define SE_GROUP_INTEGRITY_ENABLED 64
+#define SE_GROUP_LOGON_ID 3221225472U
+#define SE_GROUP_RESOURCE 536870912
+#define LANG_NEUTRAL 0x00
+#define LANG_ARABIC 0x01
+#define LANG_BULGARIAN 0x02
+#define LANG_CATALAN 0x03
+#define LANG_CHINESE 0x04
+#define LANG_CZECH 0x05
+#define LANG_DANISH 0x06
+#define LANG_GERMAN 0x07
+#define LANG_GREEK 0x08
+#define LANG_ENGLISH 0x09
+#define LANG_SPANISH 0x0a
+#define LANG_FINNISH 0x0b
+#define LANG_FRENCH 0x0c
+#define LANG_HEBREW 0x0d
+#define LANG_HUNGARIAN 0x0e
+#define LANG_ICELANDIC 0x0f
+#define LANG_ITALIAN 0x10
+#define LANG_JAPANESE 0x11
+#define LANG_KOREAN 0x12
+#define LANG_DUTCH 0x13
+#define LANG_NORWEGIAN 0x14
+#define LANG_POLISH 0x15
+#define LANG_PORTUGUESE 0x16
+#define LANG_ROMANIAN 0x18
+#define LANG_RUSSIAN 0x19
+#define LANG_CROATIAN 0x1a
+#define LANG_SERBIAN 0x1a
+#define LANG_SERBIAN_NEUTRAL 0x7c1a
+#define LANG_BOSNIAN 0x1a
+#define LANG_BOSNIAN_NEUTRAL 0x781a
+#define LANG_SLOVAK 0x1b
+#define LANG_ALBANIAN 0x1c
+#define LANG_SWEDISH 0x1d
+#define LANG_THAI 0x1e
+#define LANG_TURKISH 0x1f
+#define LANG_URDU 0x20
+#define LANG_INDONESIAN 0x21
+#define LANG_UKRAINIAN 0x22
+#define LANG_BELARUSIAN 0x23
+#define LANG_SLOVENIAN 0x24
+#define LANG_ESTONIAN 0x25
+#define LANG_LATVIAN 0x26
+#define LANG_LITHUANIAN 0x27
+#define LANG_PERSIAN 0x29
+#define LANG_FARSI LANG_PERSIAN
+#define LANG_VIETNAMESE 0x2a
+#define LANG_ARMENIAN 0x2b
+#define LANG_AZERI 0x2c
+#define LANG_BASQUE 0x2d
+#define LANG_LOWER_SORBIAN 0x2e
+#define LANG_UPPER_SORBIAN 0x2e
+#define LANG_MACEDONIAN 0x2f
+#define LANG_TSWANA 0x32
+#define LANG_XHOSA 0x34
+#define LANG_ZULU 0x35
+#define LANG_AFRIKAANS 0x36
+#define LANG_GEORGIAN 0x37
+#define LANG_FAEROESE 0x38
+#define LANG_HINDI 0x39
+#define LANG_MALTESE 0x3a
+#define LANG_SAMI 0x3b
+#define LANG_IRISH 0x3c
+#define LANG_MALAY 0x3e
+#define LANG_KAZAK 0x3f
+#define LANG_KYRGYZ 0x40
+#define LANG_SWAHILI 0x41
+#define LANG_UZBEK 0x43
+#define LANG_TATAR 0x44
+#define LANG_BENGALI 0x45
+#define LANG_PUNJABI 0x46
+#define LANG_GUJARATI 0x47
+#define LANG_ORIYA 0x48
+#define LANG_TAMIL 0x49
+#define LANG_TELUGU 0x4a
+#define LANG_KANNADA 0x4b
+#define LANG_MALAYALAM 0x4c
+#define LANG_ASSAMESE 0x4d
+#define LANG_MARATHI 0x4e
+#define LANG_SANSKRIT 0x4f
+#define LANG_MONGOLIAN 0x50
+#define LANG_TIBETAN 0x51
+#define LANG_WELSH 0x52
+#define LANG_KHMER 0x53
+#define LANG_LAO 0x54
+#define LANG_GALICIAN 0x56
+#define LANG_KONKANI 0x57
+#define LANG_MANIPURI 0x58
+#define LANG_SINDHI 0x59
+#define LANG_SYRIAC 0x5a
+#define LANG_SINHALESE 0x5b
+#define LANG_INUKTITUT 0x5d
+#define LANG_AMHARIC 0x5e
+#define LANG_TAMAZIGHT 0x5f
+#define LANG_KASHMIRI 0x60
+#define LANG_NEPALI 0x61
+#define LANG_FRISIAN 0x62
+#define LANG_PASHTO 0x63
+#define LANG_FILIPINO 0x64
+#define LANG_DIVEHI 0x65
+#define LANG_HAUSA 0x68
+#define LANG_YORUBA 0x6a
+#define LANG_QUECHUA 0x6b
+#define LANG_SOTHO 0x6c
+#define LANG_BASHKIR 0x6d
+#define LANG_LUXEMBOURGISH 0x6e
+#define LANG_GREENLANDIC 0x6f
+#define LANG_IGBO 0x70
+#define LANG_TIGRIGNA 0x73
+#define LANG_YI 0x78
+#define LANG_MAPUDUNGUN 0x7a
+#define LANG_MOHAWK 0x7c
+#define LANG_BRETON 0x7e
+#define LANG_INVARIANT 0x7f
+#define LANG_UIGHUR 0x80
+#define LANG_MAORI 0x81
+#define LANG_OCCITAN 0x82
+#define LANG_CORSICAN 0x83
+#define LANG_ALSATIAN 0x84
+#define LANG_YAKUT 0x85
+#define LANG_KICHE 0x86
+#define LANG_KINYARWANDA 0x87
+#define LANG_WOLOF 0x88
+#define LANG_DARI 0x8c
+#define LANG_MALAGASY 0x8d
+#define SUBLANG_NEUTRAL 0x00
+#define SUBLANG_DEFAULT 0x01
+#define SUBLANG_SYS_DEFAULT 0x02
+#define SUBLANG_CUSTOM_DEFAULT 0x03
+#define SUBLANG_CUSTOM_UNSPECIFIED 0x04
+#define SUBLANG_UI_CUSTOM_DEFAULT 0x03
+#define SUBLANG_AFRIKAANS_SOUTH_AFRICA 0x01
+#define SUBLANG_ALBANIAN_ALBANIA 0x01
+#define SUBLANG_ALSATIAN_FRANCE 0x01
+#define SUBLANG_AMHARIC_ETHIOPIA 0x01
+#define SUBLANG_ARABIC_SAUDI_ARABIA 0x01
+#define SUBLANG_ARABIC_IRAQ 0x02
+#define SUBLANG_ARABIC_EGYPT 0x03
+#define SUBLANG_ARABIC_LIBYA 0x04
+#define SUBLANG_ARABIC_ALGERIA 0x05
+#define SUBLANG_ARABIC_MOROCCO 0x06
+#define SUBLANG_ARABIC_TUNISIA 0x07
+#define SUBLANG_ARABIC_OMAN 0x08
+#define SUBLANG_ARABIC_YEMEN 0x09
+#define SUBLANG_ARABIC_SYRIA 0x0a
+#define SUBLANG_ARABIC_JORDAN 0x0b
+#define SUBLANG_ARABIC_LEBANON 0x0c
+#define SUBLANG_ARABIC_KUWAIT 0x0d
+#define SUBLANG_ARABIC_UAE 0x0e
+#define SUBLANG_ARABIC_BAHRAIN 0x0f
+#define SUBLANG_ARABIC_QATAR 0x10
+#define SUBLANG_ARMENIAN_ARMENIA 0x01
+#define SUBLANG_ASSAMESE_INDIA 0x01
+#define SUBLANG_AZERI_LATIN 0x01
+#define SUBLANG_AZERI_CYRILLIC 0x02
+#define SUBLANG_BASHKIR_RUSSIA 0x01
+#define SUBLANG_BASQUE_BASQUE 0x01
+#define SUBLANG_BELARUSIAN_BELARUS 0x01
+#define SUBLANG_BENGALI_INDIA 0x00
+#define SUBLANG_BENGALI_BANGLADESH 0x01
+#define SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_LATIN 0x05
+#define SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_CYRILLIC 0x08
+#define SUBLANG_BRETON_FRANCE 0x01
+#define SUBLANG_BULGARIAN_BULGARIA 0x01
+#define SUBLANG_CATALAN_CATALAN 0x01
+#define SUBLANG_CHINESE_TRADITIONAL 0x01
+#define SUBLANG_CHINESE_SIMPLIFIED 0x02
+#define SUBLANG_CHINESE_HONGKONG 0x03
+#define SUBLANG_CHINESE_SINGAPORE 0x04
+#define SUBLANG_CHINESE_MACAU 0x05
+#define SUBLANG_CORSICAN_FRANCE 0x01
+#define SUBLANG_CZECH_CZECH_REPUBLIC 0x01
+#define SUBLANG_CROATIAN_CROATIA 0x01
+#define SUBLANG_CROATIAN_BOSNIA_HERZEGOVINA_LATIN 0x04
+#define SUBLANG_DANISH_DENMARK 0x01
+#define SUBLANG_DIVEHI_MALDIVES 0x01
+#define SUBLANG_DUTCH 0x01
+#define SUBLANG_DUTCH_BELGIAN 0x02
+#define SUBLANG_ENGLISH_US 0x01
+#define SUBLANG_ENGLISH_UK 0x02
+#define SUBLANG_ENGLISH_AUS 0x03
+#define SUBLANG_ENGLISH_CAN 0x04
+#define SUBLANG_ENGLISH_NZ 0x05
+#if (WINVER >= 0x0600)
+#define SUBLANG_ENGLISH_IRELAND 0x06
+#endif
+#define SUBLANG_ENGLISH_EIRE 0x06
+#define SUBLANG_ENGLISH_SOUTH_AFRICA 0x07
+#define SUBLANG_ENGLISH_JAMAICA 0x08
+#define SUBLANG_ENGLISH_CARIBBEAN 0x09
+#define SUBLANG_ENGLISH_BELIZE 0x0a
+#define SUBLANG_ENGLISH_TRINIDAD 0x0b
+#define SUBLANG_ENGLISH_ZIMBABWE 0x0c
+#define SUBLANG_ENGLISH_PHILIPPINES 0x0d
+#define SUBLANG_ENGLISH_INDIA 0x10
+#define SUBLANG_ENGLISH_MALAYSIA 0x11
+#define SUBLANG_ENGLISH_SINGAPORE 0x12
+#define SUBLANG_ESTONIAN_ESTONIA 0x01
+#define SUBLANG_FAEROESE_FAROE_ISLANDS 0x01
+#define SUBLANG_FILIPINO_PHILIPPINES 0x01
+#define SUBLANG_FINNISH_FINLAND 0x01
+#define SUBLANG_FRENCH 0x01
+#define SUBLANG_FRENCH_BELGIAN 0x02
+#define SUBLANG_FRENCH_CANADIAN 0x03
+#define SUBLANG_FRENCH_SWISS 0x04
+#define SUBLANG_FRENCH_LUXEMBOURG 0x05
+#define SUBLANG_FRENCH_MONACO 0x06
+#define SUBLANG_FRISIAN_NETHERLANDS 0x01
+#define SUBLANG_GALICIAN_GALICIAN 0x01
+#define SUBLANG_GEORGIAN_GEORGIA 0x01
+#define SUBLANG_GERMAN 0x01
+#define SUBLANG_GERMAN_SWISS 0x02
+#define SUBLANG_GERMAN_AUSTRIAN 0x03
+#define SUBLANG_GERMAN_LUXEMBOURG 0x04
+#define SUBLANG_GERMAN_LIECHTENSTEIN 0x05
+#define SUBLANG_GREEK_GREECE 0x01
+#define SUBLANG_GREENLANDIC_GREENLAND 0x01
+#define SUBLANG_GUJARATI_INDIA 0x01
+#define SUBLANG_HAUSA_NIGERIA 0x01
+#define SUBLANG_HEBREW_ISRAEL 0x01
+#define SUBLANG_HINDI_INDIA 0x01
+#define SUBLANG_HUNGARIAN_HUNGARY 0x01
+#define SUBLANG_ICELANDIC_ICELAND 0x01
+#define SUBLANG_IGBO_NIGERIA 0x01
+#define SUBLANG_INDONESIAN_INDONESIA 0x01
+#define SUBLANG_INUKTITUT_CANADA 0x01
+#define SUBLANG_INUKTITUT_CANADA_LATIN 0x01
+#define SUBLANG_IRISH_IRELAND 0x01
+#define SUBLANG_ITALIAN 0x01
+#define SUBLANG_ITALIAN_SWISS 0x02
+#define SUBLANG_JAPANESE_JAPAN 0x01
+#define SUBLANG_KASHMIRI_INDIA 0x02
+#define SUBLANG_KASHMIRI_SASIA 0x02
+#define SUBLANG_KAZAK_KAZAKHSTAN 0x01
+#define SUBLANG_KHMER_CAMBODIA 0x01
+#define SUBLANG_KICHE_GUATEMALA 0x01
+#define SUBLANG_KINYARWANDA_RWANDA 0x01
+#define SUBLANG_KONKANI_INDIA 0x01
+#define SUBLANG_KOREAN 0x01
+#define SUBLANG_KYRGYZ_KYRGYZSTAN 0x01
+#define SUBLANG_LAO_LAO_PDR 0x01
+#define SUBLANG_LATVIAN_LATVIA 0x01
+#if (WINVER >= 0x0600)
+#define SUBLANG_LITHUANIAN_LITHUANIA 0x01
+#endif
+#define SUBLANG_LITHUANIAN 0x01
+#define SUBLANG_LOWER_SORBIAN_GERMANY 0x01
+#define SUBLANG_LUXEMBOURGISH_LUXEMBOURG 0x01
+#define SUBLANG_MACEDONIAN_MACEDONIA 0x01
+#define SUBLANG_MALAY_MALAYSIA 0x01
+#define SUBLANG_MALAY_BRUNEI_DARUSSALAM 0x02
+#define SUBLANG_MALAYALAM_INDIA 0x01
+#define SUBLANG_MALTESE_MALTA 0x01
+#define SUBLANG_MAORI_NEW_ZEALAND 0x01
+#define SUBLANG_MAPUDUNGUN_CHILE 0x01
+#define SUBLANG_MARATHI_INDIA 0x01
+#define SUBLANG_MOHAWK_MOHAWK 0x01
+#define SUBLANG_MONGOLIAN_CYRILLIC_MONGOLIA 0x01
+#define SUBLANG_MONGOLIAN_PRC 0x02
+#define SUBLANG_NEPALI_NEPAL 0x01
+#define SUBLANG_NEPALI_INDIA 0x02
+#define SUBLANG_NORWEGIAN_BOKMAL 0x01
+#define SUBLANG_NORWEGIAN_NYNORSK 0x02
+#define SUBLANG_OCCITAN_FRANCE 0x01
+#define SUBLANG_ORIYA_INDIA 0x01
+#define SUBLANG_PASHTO_AFGHANISTAN 0x01
+#define SUBLANG_PERSIAN_IRAN 0x01
+#define SUBLANG_POLISH_POLAND 0x01
+#define SUBLANG_PORTUGUESE_BRAZILIAN 0x01
+#if (WINVER >= 0x0600)
+#define SUBLANG_PORTUGUESE_PORTUGAL 0x02
+#endif
+#define SUBLANG_PORTUGUESE 0x02
+#define SUBLANG_PUNJABI_INDIA 0x00
+#define SUBLANG_PUNJABI_PAKISTAN 0x01
+#define SUBLANG_QUECHUA_BOLIVIA 0x01
+#define SUBLANG_QUECHUA_ECUADOR 0x02
+#define SUBLANG_QUECHUA_PERU 0x03
+#define SUBLANG_ROMANIAN_ROMANIA 0x00
+#define SUBLANG_ROMANIAN_MOLDOVA 0x01
+#define SUBLANG_ROMANSH_SWITZERLAND 0x01
+#define SUBLANG_RUSSIAN_RUSSIA 0x01
+#define SUBLANG_SAMI_NORTHERN_NORWAY 0x01
+#define SUBLANG_SAMI_NORTHERN_SWEDEN 0x02
+#define SUBLANG_SAMI_NORTHERN_FINLAND 0x03
+#define SUBLANG_SAMI_LULE_NORWAY 0x04
+#define SUBLANG_SAMI_LULE_SWEDEN 0x05
+#define SUBLANG_SAMI_SOUTHERN_NORWAY 0x06
+#define SUBLANG_SAMI_SOUTHERN_SWEDEN 0x07
+#define SUBLANG_SAMI_SKOLT_FINLAND 0x03
+#define SUBLANG_SAMI_INARI_FINLAND 0x03
+#define SUBLANG_SANSKRIT_INDIA 0x01
+#define SUBLANG_SERBIAN_LATIN 0x02
+#define SUBLANG_SERBIAN_CYRILLIC 0x03
+#define SUBLANG_SERBIAN_BOSNIA_HERZEGOVINA_LATIN 0x06
+#define SUBLANG_SERBIAN_BOSNIA_HERZEGOVINA_CYRILLIC 0x07
+#define SUBLANG_SINDHI_AFGHANISTAN 0x02
+#define SUBLANG_SINHALESE_SRI_LANKA 0x01
+#define SUBLANG_SOTHO_NORTHERN_SOUTH_AFRICA 0x01
+#define SUBLANG_SLOVAK_SLOVAKIA 0x01
+#define SUBLANG_SLOVENIAN_SLOVENIA 0x01
+#define SUBLANG_SPANISH 0x01
+#define SUBLANG_SPANISH_MEXICAN 0x02
+#define SUBLANG_SPANISH_MODERN 0x03
+#define SUBLANG_SPANISH_GUATEMALA 0x04
+#define SUBLANG_SPANISH_COSTA_RICA 0x05
+#define SUBLANG_SPANISH_PANAMA 0x06
+#define SUBLANG_SPANISH_DOMINICAN_REPUBLIC 0x07
+#define SUBLANG_SPANISH_VENEZUELA 0x08
+#define SUBLANG_SPANISH_COLOMBIA 0x09
+#define SUBLANG_SPANISH_PERU 0x0a
+#define SUBLANG_SPANISH_ARGENTINA 0x0b
+#define SUBLANG_SPANISH_ECUADOR 0x0c
+#define SUBLANG_SPANISH_CHILE 0x0d
+#define SUBLANG_SPANISH_URUGUAY 0x0e
+#define SUBLANG_SPANISH_PARAGUAY 0x0f
+#define SUBLANG_SPANISH_BOLIVIA 0x10
+#define SUBLANG_SPANISH_EL_SALVADOR 0x11
+#define SUBLANG_SPANISH_HONDURAS 0x12
+#define SUBLANG_SPANISH_NICARAGUA 0x13
+#define SUBLANG_SPANISH_PUERTO_RICO 0x14
+#define SUBLANG_SPANISH_US 0x15
+#if (WINVER >= 0x0600)
+#define SUBLANG_SWEDISH_SWEDEN 0x01
+#endif
+#define SUBLANG_SWEDISH 0x01
+#define SUBLANG_SWEDISH_FINLAND 0x02
+#define SUBLANG_SYRIAC 0x01
+#define SUBLANG_TAJIK_TAJIKISTAN 0x01
+#define SUBLANG_TAMAZIGHT_ALGERIA_LATIN 0x02
+#define SUBLANG_TAMIL_INDIA 0x01
+#define SUBLANG_TATAR_RUSSIA 0x01
+#define SUBLANG_TELUGU_INDIA 0x01
+#define SUBLANG_THAI_THAILAND 0x01
+#define SUBLANG_TIBETAN_PRC 0x01
+#define SUBLANG_TIBETAN_BHUTAN 0x02
+#define SUBLANG_TIGRIGNA_ERITREA 0x01
+#define SUBLANG_TSWANA_SOUTH_AFRICA 0x01
+#define SUBLANG_TURKISH_TURKEY 0x01
+#define SUBLANG_TURKMEN_TURKMENISTAN 0x01
+#define SUBLANG_UIGHUR_PRC 0x01
+#define SUBLANG_UKRAINIAN_UKRAINE 0x01
+#define SUBLANG_UPPER_SORBIAN_GERMANY 0x01
+#define SUBLANG_URDU_PAKISTAN 0x01
+#define SUBLANG_URDU_INDIA 0x02
+#define SUBLANG_UZBEK_LATIN 0x01
+#define SUBLANG_UZBEK_CYRILLIC 0x02
+#define SUBLANG_VIETNAMESE_VIETNAM 0x01
+#define SUBLANG_WELSH_UNITED_KINGDOM 0x01
+#define SUBLANG_WOLOF_SENEGAL 0x01
+#define SUBLANG_YORUBA_NIGERIA 0x01
+#define SUBLANG_XHOSA_SOUTH_AFRICA 0x01
+#define SUBLANG_YAKUT_RUSSIA 0x01
+#define SUBLANG_YI_PRC 0x01
+#define SUBLANG_ZULU_SOUTH_AFRICA 0x01
+#define NLS_VALID_LOCALE_MASK 1048575
+#define SORT_DEFAULT 0
+#define SORT_JAPANESE_XJIS 0
+#define SORT_JAPANESE_UNICODE 1
+#define SORT_CHINESE_BIG5 0
+#define SORT_CHINESE_PRCP 0
+#define SORT_CHINESE_UNICODE 1
+#define SORT_CHINESE_PRC 2
+#define SORT_CHINESE_BOPOMOFO 3
+#define SORT_KOREAN_KSC 0
+#define SORT_KOREAN_UNICODE 1
+#define SORT_GERMAN_PHONE_BOOK 1
+#define SORT_HUNGARIAN_DEFAULT 0
+#define SORT_HUNGARIAN_TECHNICAL 1
+#define SORT_GEORGIAN_TRADITIONAL 0
+#define SORT_GEORGIAN_MODERN 1
+#define MAKELANGID(p,s) ((((WORD)(s))<<10)|(WORD)(p))
+#define MAKELCID(l,s) ((DWORD)((((DWORD)((WORD)(s)))<<16)|((DWORD)((WORD)(l)))))
+#define PRIMARYLANGID(l) ((WORD)(l)&0x3ff)
+#define SORTIDFROMLCID(l) ((WORD)((((DWORD)(l))&NLS_VALID_LOCALE_MASK)>>16))
+#define SORTVERSIONFROMLCID(l) ((WORD)((((DWORD)(l))>>20)&0xf))
+#define SUBLANGID(l) ((WORD)(l)>>10)
+#define LANGIDFROMLCID(l) ((WORD)(l))
+#define LANG_SYSTEM_DEFAULT MAKELANGID(LANG_NEUTRAL,SUBLANG_SYS_DEFAULT)
+#define LANG_USER_DEFAULT MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT)
+#define LOCALE_NEUTRAL MAKELCID(MAKELANGID(LANG_NEUTRAL,SUBLANG_NEUTRAL),SORT_DEFAULT)
+#define ACL_REVISION 2
+#define ACL_REVISION_DS 4
+#define ACL_REVISION1 1
+#define ACL_REVISION2 2
+#define ACL_REVISION3 3
+#define ACL_REVISION4 4
+#define MIN_ACL_REVISION 2
+#define MAX_ACL_REVISION 4
+#define MINCHAR 0x80
+#define MAXCHAR 0x7f
+#define MINSHORT 0x8000
+#define MAXSHORT 0x7fff
+#define MINLONG 0x80000000
+#define MAXLONG 0x7fffffff
+#define MAXBYTE 0xff
+#define MAXWORD 0xffff
+#define MAXDWORD 0xffffffff
+#define PROCESSOR_INTEL_386 386
+#define PROCESSOR_INTEL_486 486
+#define PROCESSOR_INTEL_PENTIUM 586
+#define PROCESSOR_MIPS_R4000 4000
+#define PROCESSOR_ALPHA_21064 21064
+#define PROCESSOR_INTEL_IA64 2200
+#define PROCESSOR_ARCHITECTURE_INTEL 0
+#define PROCESSOR_ARCHITECTURE_MIPS 1
+#define PROCESSOR_ARCHITECTURE_ALPHA 2
+#define PROCESSOR_ARCHITECTURE_PPC 3
+#define PROCESSOR_ARCHITECTURE_SHX 4
+#define PROCESSOR_ARCHITECTURE_ARM 5
+#define PROCESSOR_ARCHITECTURE_IA64 6
+#define PROCESSOR_ARCHITECTURE_ALPHA64 7
+#define PROCESSOR_ARCHITECTURE_MSIL 8
+#define PROCESSOR_ARCHITECTURE_AMD64 9
+#define PROCESSOR_ARCHITECTURE_IA32_ON_WIN64 10
+#define PROCESSOR_ARCHITECTURE_UNKNOWN 0xFFFF
+#define PF_FLOATING_POINT_PRECISION_ERRATA 0
+#define PF_FLOATING_POINT_EMULATED 1
+#define PF_COMPARE_EXCHANGE_DOUBLE 2
+#define PF_MMX_INSTRUCTIONS_AVAILABLE 3
+#define PF_PPC_MOVEMEM_64BIT_OK 4
+#define PF_ALPHA_BYTE_INSTRUCTIONS 5
+#define PF_XMMI_INSTRUCTIONS_AVAILABLE 6
+#define PF_3DNOW_INSTRUCTIONS_AVAILABLE 7
+#define PF_RDTSC_INSTRUCTION_AVAILABLE 8
+#define PF_PAE_ENABLED 9
+#define PF_XMMI64_INSTRUCTIONS_AVAILABLE 10
+/* also in ddk/ntifs.h */
+#define FILE_ACTION_ADDED 0x00000001
+#define FILE_ACTION_REMOVED 0x00000002
+#define FILE_ACTION_MODIFIED 0x00000003
+#define FILE_ACTION_RENAMED_OLD_NAME 0x00000004
+#define FILE_ACTION_RENAMED_NEW_NAME 0x00000005
+#define FILE_ACTION_ADDED_STREAM 0x00000006
+#define FILE_ACTION_REMOVED_STREAM 0x00000007
+#define FILE_ACTION_MODIFIED_STREAM 0x00000008
+#define FILE_ACTION_REMOVED_BY_DELETE 0x00000009
+#define FILE_ACTION_ID_NOT_TUNNELLED 0x0000000A
+#define FILE_ACTION_TUNNELLED_ID_COLLISION 0x0000000B
+/* end ntifs.h */
+#define HEAP_NO_SERIALIZE 1
+#define HEAP_GROWABLE 2
+#define HEAP_GENERATE_EXCEPTIONS 4
+#define HEAP_ZERO_MEMORY 8
+#define HEAP_REALLOC_IN_PLACE_ONLY 16
+#define HEAP_TAIL_CHECKING_ENABLED 32
+#define HEAP_FREE_CHECKING_ENABLED 64
+#define HEAP_DISABLE_COALESCE_ON_FREE 128
+#define HEAP_CREATE_ALIGN_16 0x0000
+#define HEAP_CREATE_ENABLE_TRACING 0x20000
+#define HEAP_MAXIMUM_TAG 0xFFF
+#define HEAP_PSEUDO_TAG_FLAG 0x8000
+#define HEAP_TAG_SHIFT 16
+#define HEAP_MAKE_TAG_FLAGS(b,o) ((DWORD)((b)+(o)<<16)))
+#define KEY_QUERY_VALUE 1
+#define KEY_SET_VALUE 2
+#define KEY_CREATE_SUB_KEY 4
+#define KEY_ENUMERATE_SUB_KEYS 8
+#define KEY_NOTIFY 16
+#define KEY_CREATE_LINK 32
+#define KEY_WRITE 0x20006
+#define KEY_EXECUTE 0x20019
+#define KEY_READ 0x20019
+#if (_WIN32_WINNT >= 0x0502)
+#define KEY_WOW64_64KEY 0x0100
+#define KEY_WOW64_32KEY 0x0200
+#endif
+#define KEY_ALL_ACCESS 0xf003f
+#define REG_WHOLE_HIVE_VOLATILE 1
+#define REG_REFRESH_HIVE 2
+#define REG_NO_LAZY_FLUSH 4
+#define REG_OPTION_RESERVED 0
+#define REG_OPTION_NON_VOLATILE 0
+#define REG_OPTION_VOLATILE 1
+#define REG_OPTION_CREATE_LINK 2
+#define REG_OPTION_BACKUP_RESTORE 4
+#define REG_OPTION_OPEN_LINK 8
+#define REG_LEGAL_OPTION 15
+#define OWNER_SECURITY_INFORMATION 0x00000001
+#define GROUP_SECURITY_INFORMATION 0x00000002
+#define DACL_SECURITY_INFORMATION 0x00000004
+#define SACL_SECURITY_INFORMATION 0x00000008
+#define LABEL_SECURITY_INFORMATION 0x00000010
+#define UNPROTECTED_SACL_SECURITY_INFORMATION 0x10000000
+#define UNPROTECTED_DACL_SECURITY_INFORMATION 0x20000000
+#define PROTECTED_SACL_SECURITY_INFORMATION 0x40000000
+#define PROTECTED_DACL_SECURITY_INFORMATION 0x80000000
+#define MAXIMUM_PROCESSORS 32
+#define PAGE_NOACCESS 0x0001
+#define PAGE_READONLY 0x0002
+#define PAGE_READWRITE 0x0004
+#define PAGE_WRITECOPY 0x0008
+#define PAGE_EXECUTE 0x0010
+#define PAGE_EXECUTE_READ 0x0020
+#define PAGE_EXECUTE_READWRITE 0x0040
+#define PAGE_EXECUTE_WRITECOPY 0x0080
+#define PAGE_GUARD 0x0100
+#define PAGE_NOCACHE 0x0200
+#define MEM_COMMIT 0x1000
+#define MEM_RESERVE 0x2000
+#define MEM_DECOMMIT 0x4000
+#define MEM_RELEASE 0x8000
+#define MEM_FREE 0x10000
+#define MEM_PRIVATE 0x20000
+#define MEM_MAPPED 0x40000
+#define MEM_RESET 0x80000
+#define MEM_TOP_DOWN 0x100000
+#define MEM_WRITE_WATCH 0x200000 /* 98/Me */
+#define MEM_PHYSICAL 0x400000
+#define MEM_4MB_PAGES 0x80000000
+/* also in ddk/ntifs.h */
+#define MEM_IMAGE SEC_IMAGE
+#define SEC_BASED 0x00200000
+#define SEC_NO_CHANGE 0x00400000
+#define SEC_FILE 0x00800000
+#define SEC_IMAGE 0x01000000
+#define SEC_VLM 0x02000000
+#define SEC_RESERVE 0x04000000
+#define SEC_COMMIT 0x08000000
+#define SEC_NOCACHE 0x10000000
+/* end ntifs.h */
+#define SECTION_EXTEND_SIZE 16
+#define SECTION_MAP_READ 4
+#define SECTION_MAP_WRITE 2
+#define SECTION_QUERY 1
+#define SECTION_MAP_EXECUTE 8
+#define SECTION_ALL_ACCESS 0xf001f
+#define MESSAGE_RESOURCE_UNICODE 1
+#define RTL_CRITSECT_TYPE 0
+#define RTL_RESOURCE_TYPE 1
+/* Also in winddk.h */
+#define FIELD_OFFSET(t,f) ((LONG)&(((t*)0)->f))
+#ifndef CONTAINING_RECORD
+#define CONTAINING_RECORD(address, type, field) \
+ ((type*)((PCHAR)(address) - (PCHAR)(&((type *)0)->field)))
+#endif
+/* end winddk.h */
+#define IMAGE_SIZEOF_FILE_HEADER 20
+#define IMAGE_FILE_RELOCS_STRIPPED 1
+#define IMAGE_FILE_EXECUTABLE_IMAGE 2
+#define IMAGE_FILE_LINE_NUMS_STRIPPED 4
+#define IMAGE_FILE_LOCAL_SYMS_STRIPPED 8
+#define IMAGE_FILE_AGGRESIVE_WS_TRIM 16
+#define IMAGE_FILE_LARGE_ADDRESS_AWARE 32
+#define IMAGE_FILE_BYTES_REVERSED_LO 128
+#define IMAGE_FILE_32BIT_MACHINE 256
+#define IMAGE_FILE_DEBUG_STRIPPED 512
+#define IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP 1024
+#define IMAGE_FILE_NET_RUN_FROM_SWAP 2048
+#define IMAGE_FILE_SYSTEM 4096
+#define IMAGE_FILE_DLL 8192
+#define IMAGE_FILE_UP_SYSTEM_ONLY 16384
+#define IMAGE_FILE_BYTES_REVERSED_HI 32768
+
+#define IMAGE_FILE_MACHINE_UNKNOWN 0x0000
+#define IMAGE_FILE_MACHINE_AM33 0x01d3 /* Matsushita AM33 */
+#define IMAGE_FILE_MACHINE_AMD64 0x8664 /* x64 */
+#define IMAGE_FILE_MACHINE_ARM 0x01c0 /* ARM little endian */
+#define IMAGE_FILE_MACHINE_EBC 0x0ebc /* EFI byte code */
+#define IMAGE_FILE_MACHINE_I386 0x014c /* Intel 386 or later processors
+ and compatible processors */
+#define IMAGE_FILE_MACHINE_IA64 0x0200 /* Intel Itanium processor family */
+#define IMAGE_FILE_MACHINE_M32R 0x9041 /* Mitsubishi M32R little endian */
+#define IMAGE_FILE_MACHINE_MIPS16 0x0266 /* MIPS16 */
+#define IMAGE_FILE_MACHINE_MIPSFPU 0x0366 /* MIPS with FPU */
+#define IMAGE_FILE_MACHINE_MIPSFPU16 0x0466 /* MIPS16 with FPU */
+#define IMAGE_FILE_MACHINE_POWERPC 0x01f0 /* Power PC little endian */
+#define IMAGE_FILE_MACHINE_POWERPCFP 0x01f1 /* Power PC with floating point support */
+#define IMAGE_FILE_MACHINE_R4000 0x0166 /* MIPS little endian */
+#define IMAGE_FILE_MACHINE_SH3 0x01a2 /* Hitachi SH3 */
+#define IMAGE_FILE_MACHINE_SH3DSP 0x01a3 /* Hitachi SH3 DSP */
+#define IMAGE_FILE_MACHINE_SH4 0x01a6 /* Hitachi SH4 */
+#define IMAGE_FILE_MACHINE_SH5 0x01a8 /* Hitachi SH5 */
+#define IMAGE_FILE_MACHINE_THUMB 0x01c2 /* Thumb */
+#define IMAGE_FILE_MACHINE_WCEMIPSV2 0x0169 /* MIPS little-endian WCE v2 */
+
+#define IMAGE_DOS_SIGNATURE 0x5A4D
+#define IMAGE_OS2_SIGNATURE 0x454E
+#define IMAGE_OS2_SIGNATURE_LE 0x454C
+#define IMAGE_VXD_SIGNATURE 0x454C
+#define IMAGE_NT_SIGNATURE 0x00004550
+#define IMAGE_NT_OPTIONAL_HDR32_MAGIC 0x10b
+#define IMAGE_NT_OPTIONAL_HDR64_MAGIC 0x20b
+#ifdef _WIN64
+#define IMAGE_NT_OPTIONAL_HDR_MAGIC IMAGE_NT_OPTIONAL_HDR64_MAGIC
+#else
+#define IMAGE_NT_OPTIONAL_HDR_MAGIC IMAGE_NT_OPTIONAL_HDR32_MAGIC
+#endif
+#define IMAGE_ROM_OPTIONAL_HDR_MAGIC 0x107
+#define IMAGE_SEPARATE_DEBUG_SIGNATURE 0x4944
+#define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16
+#define IMAGE_SIZEOF_ROM_OPTIONAL_HEADER 56
+#define IMAGE_SIZEOF_STD_OPTIONAL_HEADER 28
+#define IMAGE_SIZEOF_NT_OPTIONAL_HEADER 224
+#define IMAGE_SIZEOF_SHORT_NAME 8
+#define IMAGE_SIZEOF_SECTION_HEADER 40
+#define IMAGE_SIZEOF_SYMBOL 18
+#define IMAGE_SIZEOF_AUX_SYMBOL 18
+#define IMAGE_SIZEOF_RELOCATION 10
+#define IMAGE_SIZEOF_BASE_RELOCATION 8
+#define IMAGE_SIZEOF_LINENUMBER 6
+#define IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR 60
+#define SIZEOF_RFPO_DATA 16
+
+#define IMAGE_SUBSYSTEM_UNKNOWN 0
+#define IMAGE_SUBSYSTEM_NATIVE 1
+#define IMAGE_SUBSYSTEM_WINDOWS_GUI 2
+#define IMAGE_SUBSYSTEM_WINDOWS_CUI 3
+#define IMAGE_SUBSYSTEM_OS2_CUI 5 /* Not in PECOFF v8 spec */
+#define IMAGE_SUBSYSTEM_POSIX_CUI 7
+#define IMAGE_SUBSYSTEM_NATIVE_WINDOWS 8 /* Not in PECOFF v8 spec */
+#define IMAGE_SUBSYSTEM_WINDOWS_CE_GUI 9
+#define IMAGE_SUBSYSTEM_EFI_APPLICATION 10
+#define IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER 11
+#define IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER 12
+#define IMAGE_SUBSYSTEM_EFI_ROM 13
+#define IMAGE_SUBSYSTEM_XBOX 14
+
+#define IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE 0x0040
+#define IMAGE_DLL_CHARACTERISTICS_FORCE_INTEGRITY 0x0080
+#define IMAGE_DLL_CHARACTERISTICS_NX_COMPAT 0x0100
+#define IMAGE_DLLCHARACTERISTICS_NO_ISOLATION 0x0200
+#define IMAGE_DLLCHARACTERISTICS_NO_SEH 0x0400
+#define IMAGE_DLLCHARACTERISTICS_NO_BIND 0x0800
+#define IMAGE_DLLCHARACTERISTICS_WDM_DRIVER 0x2000
+#define IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE 0x8000
+
+#define IMAGE_FIRST_SECTION(h) ((PIMAGE_SECTION_HEADER) ((DWORD)h+FIELD_OFFSET(IMAGE_NT_HEADERS,OptionalHeader)+((PIMAGE_NT_HEADERS)(h))->FileHeader.SizeOfOptionalHeader))
+#define IMAGE_DIRECTORY_ENTRY_EXPORT 0
+#define IMAGE_DIRECTORY_ENTRY_IMPORT 1
+#define IMAGE_DIRECTORY_ENTRY_RESOURCE 2
+#define IMAGE_DIRECTORY_ENTRY_EXCEPTION 3
+#define IMAGE_DIRECTORY_ENTRY_SECURITY 4
+#define IMAGE_DIRECTORY_ENTRY_BASERELOC 5
+#define IMAGE_DIRECTORY_ENTRY_DEBUG 6
+#define IMAGE_DIRECTORY_ENTRY_COPYRIGHT 7
+#define IMAGE_DIRECTORY_ENTRY_ARCHITECTURE 7
+#define IMAGE_DIRECTORY_ENTRY_GLOBALPTR 8
+#define IMAGE_DIRECTORY_ENTRY_TLS 9
+#define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG 10
+#define IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT 11
+#define IMAGE_DIRECTORY_ENTRY_IAT 12
+#define IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT 13
+#define IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR 14
+#define IMAGE_SCN_TYPE_REG 0
+#define IMAGE_SCN_TYPE_DSECT 1
+#define IMAGE_SCN_TYPE_NOLOAD 2
+#define IMAGE_SCN_TYPE_GROUP 4
+#define IMAGE_SCN_TYPE_NO_PAD 8
+#define IMAGE_SCN_TYPE_COPY 16
+#define IMAGE_SCN_CNT_CODE 32
+#define IMAGE_SCN_CNT_INITIALIZED_DATA 64
+#define IMAGE_SCN_CNT_UNINITIALIZED_DATA 128
+#define IMAGE_SCN_LNK_OTHER 256
+#define IMAGE_SCN_LNK_INFO 512
+#define IMAGE_SCN_TYPE_OVER 1024
+#define IMAGE_SCN_LNK_REMOVE 2048
+#define IMAGE_SCN_LNK_COMDAT 4096
+#define IMAGE_SCN_GPREL 0x8000 /* Valid only for IA64 */
+#define IMAGE_SCN_MEM_FARDATA 0x8000 /* Not in PECOFF v8 spec */
+#define IMAGE_SCN_MEM_PURGEABLE 0x20000
+#define IMAGE_SCN_MEM_16BIT 0x20000
+#define IMAGE_SCN_MEM_LOCKED 0x40000
+#define IMAGE_SCN_MEM_PRELOAD 0x80000
+#define IMAGE_SCN_ALIGN_1BYTES 0x100000
+#define IMAGE_SCN_ALIGN_2BYTES 0x200000
+#define IMAGE_SCN_ALIGN_4BYTES 0x300000
+#define IMAGE_SCN_ALIGN_8BYTES 0x400000
+#define IMAGE_SCN_ALIGN_16BYTES 0x500000
+#define IMAGE_SCN_ALIGN_32BYTES 0x600000
+#define IMAGE_SCN_ALIGN_64BYTES 0x700000
+#define IMAGE_SCN_ALIGN_128BYTES 0x800000
+#define IMAGE_SCN_ALIGN_256BYTES 0x900000
+#define IMAGE_SCN_ALIGN_512BYTES 0xa00000
+#define IMAGE_SCN_ALIGN_1024BYTES 0xb00000
+#define IMAGE_SCN_ALIGN_2048BYTES 0xc00000
+#define IMAGE_SCN_ALIGN_4096BYTES 0xd00000
+#define IMAGE_SCN_ALIGN_8192BYTES 0xe00000
+#define IMAGE_SCN_LNK_NRELOC_OVFL 0x1000000
+#define IMAGE_SCN_MEM_DISCARDABLE 0x2000000
+#define IMAGE_SCN_MEM_NOT_CACHED 0x4000000
+#define IMAGE_SCN_MEM_NOT_PAGED 0x8000000
+#define IMAGE_SCN_MEM_SHARED 0x10000000
+#define IMAGE_SCN_MEM_EXECUTE 0x20000000
+#define IMAGE_SCN_MEM_READ 0x40000000
+#define IMAGE_SCN_MEM_WRITE 0x80000000
+#define IMAGE_SYM_UNDEFINED 0
+#define IMAGE_SYM_ABSOLUTE (-1)
+#define IMAGE_SYM_DEBUG (-2)
+#define IMAGE_SYM_TYPE_NULL 0
+#define IMAGE_SYM_TYPE_VOID 1
+#define IMAGE_SYM_TYPE_CHAR 2
+#define IMAGE_SYM_TYPE_SHORT 3
+#define IMAGE_SYM_TYPE_INT 4
+#define IMAGE_SYM_TYPE_LONG 5
+#define IMAGE_SYM_TYPE_FLOAT 6
+#define IMAGE_SYM_TYPE_DOUBLE 7
+#define IMAGE_SYM_TYPE_STRUCT 8
+#define IMAGE_SYM_TYPE_UNION 9
+#define IMAGE_SYM_TYPE_ENUM 10
+#define IMAGE_SYM_TYPE_MOE 11
+#define IMAGE_SYM_TYPE_BYTE 12
+#define IMAGE_SYM_TYPE_WORD 13
+#define IMAGE_SYM_TYPE_UINT 14
+#define IMAGE_SYM_TYPE_DWORD 15
+#define IMAGE_SYM_TYPE_PCODE 32768
+#define IMAGE_SYM_DTYPE_NULL 0
+#define IMAGE_SYM_DTYPE_POINTER 1
+#define IMAGE_SYM_DTYPE_FUNCTION 2
+#define IMAGE_SYM_DTYPE_ARRAY 3
+#define IMAGE_SYM_CLASS_END_OF_FUNCTION (-1)
+#define IMAGE_SYM_CLASS_NULL 0
+#define IMAGE_SYM_CLASS_AUTOMATIC 1
+#define IMAGE_SYM_CLASS_EXTERNAL 2
+#define IMAGE_SYM_CLASS_STATIC 3
+#define IMAGE_SYM_CLASS_REGISTER 4
+#define IMAGE_SYM_CLASS_EXTERNAL_DEF 5
+#define IMAGE_SYM_CLASS_LABEL 6
+#define IMAGE_SYM_CLASS_UNDEFINED_LABEL 7
+#define IMAGE_SYM_CLASS_MEMBER_OF_STRUCT 8
+#define IMAGE_SYM_CLASS_ARGUMENT 9
+#define IMAGE_SYM_CLASS_STRUCT_TAG 10
+#define IMAGE_SYM_CLASS_MEMBER_OF_UNION 11
+#define IMAGE_SYM_CLASS_UNION_TAG 12
+#define IMAGE_SYM_CLASS_TYPE_DEFINITION 13
+#define IMAGE_SYM_CLASS_UNDEFINED_STATIC 14
+#define IMAGE_SYM_CLASS_ENUM_TAG 15
+#define IMAGE_SYM_CLASS_MEMBER_OF_ENUM 16
+#define IMAGE_SYM_CLASS_REGISTER_PARAM 17
+#define IMAGE_SYM_CLASS_BIT_FIELD 18
+#define IMAGE_SYM_CLASS_FAR_EXTERNAL 68 /* Not in PECOFF v8 spec */
+#define IMAGE_SYM_CLASS_BLOCK 100
+#define IMAGE_SYM_CLASS_FUNCTION 101
+#define IMAGE_SYM_CLASS_END_OF_STRUCT 102
+#define IMAGE_SYM_CLASS_FILE 103
+#define IMAGE_SYM_CLASS_SECTION 104
+#define IMAGE_SYM_CLASS_WEAK_EXTERNAL 105
+#define IMAGE_SYM_CLASS_CLR_TOKEN 107
+
+#define IMAGE_COMDAT_SELECT_NODUPLICATES 1
+#define IMAGE_COMDAT_SELECT_ANY 2
+#define IMAGE_COMDAT_SELECT_SAME_SIZE 3
+#define IMAGE_COMDAT_SELECT_EXACT_MATCH 4
+#define IMAGE_COMDAT_SELECT_ASSOCIATIVE 5
+#define IMAGE_COMDAT_SELECT_LARGEST 6
+#define IMAGE_COMDAT_SELECT_NEWEST 7 /* Not in PECOFF v8 spec */
+
+#define IMAGE_WEAK_EXTERN_SEARCH_NOLIBRARY 1
+#define IMAGE_WEAK_EXTERN_SEARCH_LIBRARY 2
+#define IMAGE_WEAK_EXTERN_SEARCH_ALIAS 3
+
+#define IMAGE_REL_I386_ABSOLUTE 0x0000
+#define IMAGE_REL_I386_DIR16 0x0001
+#define IMAGE_REL_I386_REL16 0x0002
+#define IMAGE_REL_I386_DIR32 0x0006
+#define IMAGE_REL_I386_DIR32NB 0x0007
+#define IMAGE_REL_I386_SEG12 0x0009
+#define IMAGE_REL_I386_SECTION 0x000A
+#define IMAGE_REL_I386_SECREL 0x000B
+#define IMAGE_REL_I386_TOKEN 0x000C
+#define IMAGE_REL_I386_SECREL7 0x000D
+#define IMAGE_REL_I386_REL32 0x0014
+
+#define IMAGE_REL_AMD64_ABSOLUTE 0x0000
+#define IMAGE_REL_AMD64_ADDR64 0x0001
+#define IMAGE_REL_AMD64_ADDR32 0x0002
+#define IMAGE_REL_AMD64_ADDR32NB 0x0003
+#define IMAGE_REL_AMD64_REL32 0x0004
+#define IMAGE_REL_AMD64_REL32_1 0x0005
+#define IMAGE_REL_AMD64_REL32_2 0x0006
+#define IMAGE_REL_AMD64_REL32_3 0x0007
+#define IMAGE_REL_AMD64_REL32_4 0x0008
+#define IMAGE_REL_AMD64_REL32_5 0x0009
+#define IMAGE_REL_AMD64_SECTION 0x000A
+#define IMAGE_REL_AMD64_SECREL 0x000B
+#define IMAGE_REL_AMD64_SECREL7 0x000C
+#define IMAGE_REL_AMD64_TOKEN 0x000D
+#define IMAGE_REL_AMD64_SREL32 0x000E
+#define IMAGE_REL_AMD64_PAIR 0x000F
+#define IMAGE_REL_AMD64_SSPAN32 0x0010
+
+#define IMAGE_REL_IA64_ABSOLUTE 0x0000
+#define IMAGE_REL_IA64_IMM14 0x0001
+#define IMAGE_REL_IA64_IMM22 0x0002
+#define IMAGE_REL_IA64_IMM64 0x0003
+#define IMAGE_REL_IA64_DIR32 0x0004
+#define IMAGE_REL_IA64_DIR64 0x0005
+#define IMAGE_REL_IA64_PCREL21B 0x0006
+#define IMAGE_REL_IA64_PCREL21M 0x0007
+#define IMAGE_REL_IA64_PCREL21F 0x0008
+#define IMAGE_REL_IA64_GPREL22 0x0009
+#define IMAGE_REL_IA64_LTOFF22 0x000A
+#define IMAGE_REL_IA64_SECTION 0x000B
+#define IMAGE_REL_IA64_SECREL22 0x000C
+#define IMAGE_REL_IA64_SECREL64I 0x000D
+#define IMAGE_REL_IA64_SECREL32 0x000E
+#define IMAGE_REL_IA64_DIR32NB 0x0010
+#define IMAGE_REL_IA64_SREL14 0x0011
+#define IMAGE_REL_IA64_SREL22 0x0012
+#define IMAGE_REL_IA64_SREL32 0x0013
+#define IMAGE_REL_IA64_UREL32 0x0014
+#define IMAGE_REL_IA64_PCREL60X 0x0015
+#define IMAGE_REL_IA64_PCREL60B 0x0016
+#define IMAGE_REL_IA64_PCREL60F 0x0017
+#define IMAGE_REL_IA64_PCREL60I 0x0018
+#define IMAGE_REL_IA64_PCREL60M 0x0019
+#define IMAGE_REL_IA64_IMMGPREL64 0x001a
+#define IMAGE_REL_IA64_TOKEN 0x001b
+#define IMAGE_REL_IA64_GPREL32 0x001c
+#define IMAGE_REL_IA64_ADDEND 0x001F
+
+#define IMAGE_REL_SH3_ABSOLUTE 0x0000
+#define IMAGE_REL_SH3_DIRECT16 0x0001
+#define IMAGE_REL_SH3_DIRECT32 0x0002
+#define IMAGE_REL_SH3_DIRECT8 0x0003
+#define IMAGE_REL_SH3_DIRECT8_WORD 0x0004
+#define IMAGE_REL_SH3_DIRECT8_LONG 0x0005
+#define IMAGE_REL_SH3_DIRECT4 0x0006
+#define IMAGE_REL_SH3_DIRECT4_WORD 0x0007
+#define IMAGE_REL_SH3_DIRECT4_LONG 0x0008
+#define IMAGE_REL_SH3_PCREL8_WORD 0x0009
+#define IMAGE_REL_SH3_PCREL8_LONG 0x000A
+#define IMAGE_REL_SH3_PCREL12_WORD 0x000B
+#define IMAGE_REL_SH3_STARTOF_SECTION 0x000C
+#define IMAGE_REL_SH3_SIZEOF_SECTION 0x000D
+#define IMAGE_REL_SH3_SECTION 0x000E
+#define IMAGE_REL_SH3_SECREL 0x000F
+#define IMAGE_REL_SH3_DIRECT32_NB 0x0010
+#define IMAGE_REL_SH3_GPREL4_LONG 0x0011
+#define IMAGE_REL_SH3_TOKEN 0x0012
+#define IMAGE_REL_SHM_PCRELPT 0x0013
+#define IMAGE_REL_SHM_REFLO 0x0014
+#define IMAGE_REL_SHM_REFHALF 0x0015
+#define IMAGE_REL_SHM_RELLO 0x0016
+#define IMAGE_REL_SHM_RELHALF 0x0017
+#define IMAGE_REL_SHM_PAIR 0x0018
+#define IMAGE_REL_SHM_NOMODE 0x8000
+
+#define IMAGE_REL_M32R_ABSOLUTE 0x0000
+#define IMAGE_REL_M32R_ADDR32 0x0001
+#define IMAGE_REL_M32R_ADDR32NB 0x0002
+#define IMAGE_REL_M32R_ADDR24 0x0003
+#define IMAGE_REL_M32R_GPREL16 0x0004
+#define IMAGE_REL_M32R_PCREL24 0x0005
+#define IMAGE_REL_M32R_PCREL16 0x0006
+#define IMAGE_REL_M32R_PCREL8 0x0007
+#define IMAGE_REL_M32R_REFHALF 0x0008
+#define IMAGE_REL_M32R_REFHI 0x0009
+#define IMAGE_REL_M32R_REFLO 0x000A
+#define IMAGE_REL_M32R_PAIR 0x000B
+#define IMAGE_REL_M32R_SECTION 0x000C
+#define IMAGE_REL_M32R_SECREL 0x000D
+#define IMAGE_REL_M32R_TOKEN 0x000E
+
+#define IMAGE_REL_MIPS_ABSOLUTE 0x0000
+#define IMAGE_REL_MIPS_REFHALF 0x0001
+#define IMAGE_REL_MIPS_REFWORD 0x0002
+#define IMAGE_REL_MIPS_JMPADDR 0x0003
+#define IMAGE_REL_MIPS_REFHI 0x0004
+#define IMAGE_REL_MIPS_REFLO 0x0005
+#define IMAGE_REL_MIPS_GPREL 0x0006
+#define IMAGE_REL_MIPS_LITERAL 0x0007
+#define IMAGE_REL_MIPS_SECTION 0x000A
+#define IMAGE_REL_MIPS_SECREL 0x000B
+#define IMAGE_REL_MIPS_SECRELLO 0x000C
+#define IMAGE_REL_MIPS_SECRELHI 0x000D
+#define IMAGE_REL_MIPS_JMPADDR16 0x0010
+#define IMAGE_REL_MIPS_REFWORDNB 0x0022
+#define IMAGE_REL_MIPS_PAIR 0x0025
+
+#define IMAGE_REL_ALPHA_ABSOLUTE 0
+#define IMAGE_REL_ALPHA_REFLONG 1
+#define IMAGE_REL_ALPHA_REFQUAD 2
+#define IMAGE_REL_ALPHA_GPREL32 3
+#define IMAGE_REL_ALPHA_LITERAL 4
+#define IMAGE_REL_ALPHA_LITUSE 5
+#define IMAGE_REL_ALPHA_GPDISP 6
+#define IMAGE_REL_ALPHA_BRADDR 7
+#define IMAGE_REL_ALPHA_HINT 8
+#define IMAGE_REL_ALPHA_INLINE_REFLONG 9
+#define IMAGE_REL_ALPHA_REFHI 10
+#define IMAGE_REL_ALPHA_REFLO 11
+#define IMAGE_REL_ALPHA_PAIR 12
+#define IMAGE_REL_ALPHA_MATCH 13
+#define IMAGE_REL_ALPHA_SECTION 14
+#define IMAGE_REL_ALPHA_SECREL 15
+#define IMAGE_REL_ALPHA_REFLONGNB 16
+#define IMAGE_REL_ALPHA_SECRELLO 17
+#define IMAGE_REL_ALPHA_SECRELHI 18
+#define IMAGE_REL_PPC_ABSOLUTE 0
+#define IMAGE_REL_PPC_ADDR64 1
+#define IMAGE_REL_PPC_ADDR32 2
+#define IMAGE_REL_PPC_ADDR24 3
+#define IMAGE_REL_PPC_ADDR16 4
+#define IMAGE_REL_PPC_ADDR14 5
+#define IMAGE_REL_PPC_REL24 6
+#define IMAGE_REL_PPC_REL14 7
+#define IMAGE_REL_PPC_TOCREL16 8
+#define IMAGE_REL_PPC_TOCREL14 9
+#define IMAGE_REL_PPC_ADDR32NB 10
+#define IMAGE_REL_PPC_SECREL 11
+#define IMAGE_REL_PPC_SECTION 12
+#define IMAGE_REL_PPC_IFGLUE 13
+#define IMAGE_REL_PPC_IMGLUE 14
+#define IMAGE_REL_PPC_SECREL16 15
+#define IMAGE_REL_PPC_REFHI 16
+#define IMAGE_REL_PPC_REFLO 17
+#define IMAGE_REL_PPC_PAIR 18
+#define IMAGE_REL_PPC_TYPEMASK 255
+#define IMAGE_REL_PPC_NEG 256
+#define IMAGE_REL_PPC_BRTAKEN 512
+#define IMAGE_REL_PPC_BRNTAKEN 1024
+#define IMAGE_REL_PPC_TOCDEFN 2048
+#define IMAGE_REL_BASED_ABSOLUTE 0
+#define IMAGE_REL_BASED_HIGH 1
+#define IMAGE_REL_BASED_LOW 2
+#define IMAGE_REL_BASED_HIGHLOW 3
+#define IMAGE_REL_BASED_HIGHADJ 4
+#define IMAGE_REL_BASED_MIPS_JMPADDR 5
+#define IMAGE_ARCHIVE_START_SIZE 8
+#define IMAGE_ARCHIVE_START "!<arch>\n"
+#define IMAGE_ARCHIVE_END "`\n"
+#define IMAGE_ARCHIVE_PAD "\n"
+#define IMAGE_ARCHIVE_LINKER_MEMBER "/ "
+#define IMAGE_ARCHIVE_LONGNAMES_MEMBER "// "
+#define IMAGE_ORDINAL_FLAG32 0x80000000
+#define IMAGE_SNAP_BY_ORDINAL32(o) ((o&IMAGE_ORDINAL_FLAG32)!=0)
+#define IMAGE_ORDINAL32(o) (o&0xffff)
+#define IMAGE_ORDINAL_FLAG64 0x8000000000000000ULL
+#define IMAGE_SNAP_BY_ORDINAL64(o) ((o&IMAGE_ORDINAL_FLAG64)!=0)
+#define IMAGE_ORDINAL64(o) (o&0xffff)
+#ifdef _WIN64
+#define IMAGE_ORDINAL_FLAG IMAGE_ORDINAL_FLAG64
+#define IMAGE_SNAP_BY_ORDINAL(o) IMAGE_SNAP_BY_ORDINAL64(o)
+#define IMAGE_ORDINAL(o) IMAGE_ORDINAL64(o)
+#else
+#define IMAGE_ORDINAL_FLAG IMAGE_ORDINAL_FLAG32
+#define IMAGE_SNAP_BY_ORDINAL(o) IMAGE_SNAP_BY_ORDINAL32(o)
+#define IMAGE_ORDINAL(o) IMAGE_ORDINAL32(o)
+#endif
+#define IMAGE_RESOURCE_NAME_IS_STRING 0x80000000
+#define IMAGE_RESOURCE_DATA_IS_DIRECTORY 0x80000000
+#define IMAGE_DEBUG_TYPE_UNKNOWN 0
+#define IMAGE_DEBUG_TYPE_COFF 1
+#define IMAGE_DEBUG_TYPE_CODEVIEW 2
+#define IMAGE_DEBUG_TYPE_FPO 3
+#define IMAGE_DEBUG_TYPE_MISC 4
+#define IMAGE_DEBUG_TYPE_EXCEPTION 5
+#define IMAGE_DEBUG_TYPE_FIXUP 6
+#define IMAGE_DEBUG_TYPE_OMAP_TO_SRC 7
+#define IMAGE_DEBUG_TYPE_OMAP_FROM_SRC 8
+#define IMAGE_DEBUG_TYPE_BORLAND 9
+#define FRAME_FPO 0
+#define FRAME_TRAP 1
+#define FRAME_TSS 2
+#define FRAME_NONFPO 3
+#define IMAGE_DEBUG_MISC_EXENAME 1
+#define N_BTMASK 0x000F
+#define N_TMASK 0x0030
+#define N_TMASK1 0x00C0
+#define N_TMASK2 0x00F0
+#define N_BTSHFT 4
+#define N_TSHIFT 2
+#define IS_TEXT_UNICODE_ASCII16 1
+#define IS_TEXT_UNICODE_REVERSE_ASCII16 16
+#define IS_TEXT_UNICODE_STATISTICS 2
+#define IS_TEXT_UNICODE_REVERSE_STATISTICS 32
+#define IS_TEXT_UNICODE_CONTROLS 4
+#define IS_TEXT_UNICODE_REVERSE_CONTROLS 64
+#define IS_TEXT_UNICODE_SIGNATURE 8
+#define IS_TEXT_UNICODE_REVERSE_SIGNATURE 128
+#define IS_TEXT_UNICODE_ILLEGAL_CHARS 256
+#define IS_TEXT_UNICODE_ODD_LENGTH 512
+#define IS_TEXT_UNICODE_NULL_BYTES 4096
+#define IS_TEXT_UNICODE_UNICODE_MASK 15
+#define IS_TEXT_UNICODE_REVERSE_MASK 240
+#define IS_TEXT_UNICODE_NOT_UNICODE_MASK 3840
+#define IS_TEXT_UNICODE_NOT_ASCII_MASK 61440
+#define SERVICE_KERNEL_DRIVER 1
+#define SERVICE_FILE_SYSTEM_DRIVER 2
+#define SERVICE_ADAPTER 4
+#define SERVICE_RECOGNIZER_DRIVER 8
+#define SERVICE_DRIVER (SERVICE_KERNEL_DRIVER|SERVICE_FILE_SYSTEM_DRIVER|SERVICE_RECOGNIZER_DRIVER)
+#define SERVICE_WIN32_OWN_PROCESS 16
+#define SERVICE_WIN32_SHARE_PROCESS 32
+#define SERVICE_WIN32 (SERVICE_WIN32_OWN_PROCESS|SERVICE_WIN32_SHARE_PROCESS)
+#define SERVICE_INTERACTIVE_PROCESS 256
+#define SERVICE_TYPE_ALL (SERVICE_WIN32|SERVICE_ADAPTER|SERVICE_DRIVER|SERVICE_INTERACTIVE_PROCESS)
+#define SERVICE_BOOT_START 0
+#define SERVICE_SYSTEM_START 1
+#define SERVICE_AUTO_START 2
+#define SERVICE_DEMAND_START 3
+#define SERVICE_DISABLED 4
+#define SERVICE_ERROR_IGNORE 0
+#define SERVICE_ERROR_NORMAL 1
+#define SERVICE_ERROR_SEVERE 2
+#define SERVICE_ERROR_CRITICAL 3
+#define SE_OWNER_DEFAULTED 1
+#define SE_GROUP_DEFAULTED 2
+#define SE_DACL_PRESENT 4
+#define SE_DACL_DEFAULTED 8
+#define SE_SACL_PRESENT 16
+#define SE_SACL_DEFAULTED 32
+#define SE_DACL_AUTO_INHERIT_REQ 256
+#define SE_SACL_AUTO_INHERIT_REQ 512
+#define SE_DACL_AUTO_INHERITED 1024
+#define SE_SACL_AUTO_INHERITED 2048
+#define SE_DACL_PROTECTED 4096
+#define SE_SACL_PROTECTED 8192
+#define SE_SELF_RELATIVE 0x8000
+#define SECURITY_DESCRIPTOR_MIN_LENGTH 20
+#define SECURITY_DESCRIPTOR_REVISION 1
+#define SECURITY_DESCRIPTOR_REVISION1 1
+#define SE_PRIVILEGE_ENABLED_BY_DEFAULT 1
+#define SE_PRIVILEGE_ENABLED 2
+#define SE_PRIVILEGE_USED_FOR_ACCESS 0x80000000
+#define PRIVILEGE_SET_ALL_NECESSARY 1
+#define SECURITY_MAX_IMPERSONATION_LEVEL SecurityDelegation
+#define DEFAULT_IMPERSONATION_LEVEL SecurityImpersonation
+#define SECURITY_DYNAMIC_TRACKING TRUE
+#define SECURITY_STATIC_TRACKING FALSE
+/* also in ddk/ntifs.h */
+#define TOKEN_ASSIGN_PRIMARY (0x0001)
+#define TOKEN_DUPLICATE (0x0002)
+#define TOKEN_IMPERSONATE (0x0004)
+#define TOKEN_QUERY (0x0008)
+#define TOKEN_QUERY_SOURCE (0x0010)
+#define TOKEN_ADJUST_PRIVILEGES (0x0020)
+#define TOKEN_ADJUST_GROUPS (0x0040)
+#define TOKEN_ADJUST_DEFAULT (0x0080)
+#define TOKEN_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\
+ TOKEN_ASSIGN_PRIMARY |\
+ TOKEN_DUPLICATE |\
+ TOKEN_IMPERSONATE |\
+ TOKEN_QUERY |\
+ TOKEN_QUERY_SOURCE |\
+ TOKEN_ADJUST_PRIVILEGES |\
+ TOKEN_ADJUST_GROUPS |\
+ TOKEN_ADJUST_DEFAULT)
+#define TOKEN_READ (STANDARD_RIGHTS_READ |\
+ TOKEN_QUERY)
+#define TOKEN_WRITE (STANDARD_RIGHTS_WRITE |\
+ TOKEN_ADJUST_PRIVILEGES |\
+ TOKEN_ADJUST_GROUPS |\
+ TOKEN_ADJUST_DEFAULT)
+
+#define TOKEN_EXECUTE (STANDARD_RIGHTS_EXECUTE)
+#define TOKEN_SOURCE_LENGTH 8
+#if (_WIN32_WINNT >= 0x0600)
+#define TOKEN_MANDATORY_POLICY_OFF 0
+#define TOKEN_MANDATORY_POLICY_NO_WRITE_UP 1
+#define TOKEN_MANDATORY_POLICY_NEW_PROCESS_MIN 2
+#define TOKEN_MANDATORY_POLICY_VALID_MASK 3
+#endif
+/* end ddk/ntifs.h */
+#define DLL_PROCESS_DETACH 0
+#define DLL_PROCESS_ATTACH 1
+#define DLL_THREAD_ATTACH 2
+#define DLL_THREAD_DETACH 3
+#define DBG_CONTINUE 0x10002
+#define DBG_TERMINATE_THREAD 0x40010003
+#define DBG_TERMINATE_PROCESS 0x40010004
+#define DBG_CONTROL_C 0x40010005
+#define DBG_CONTROL_BREAK 0x40010008
+#define DBG_EXCEPTION_NOT_HANDLED 0x80010001
+#define TAPE_ABSOLUTE_POSITION 0
+#define TAPE_LOGICAL_POSITION 1
+#define TAPE_PSEUDO_LOGICAL_POSITION 2
+#define TAPE_REWIND 0
+#define TAPE_ABSOLUTE_BLOCK 1
+#define TAPE_LOGICAL_BLOCK 2
+#define TAPE_PSEUDO_LOGICAL_BLOCK 3
+#define TAPE_SPACE_END_OF_DATA 4
+#define TAPE_SPACE_RELATIVE_BLOCKS 5
+#define TAPE_SPACE_FILEMARKS 6
+#define TAPE_SPACE_SEQUENTIAL_FMKS 7
+#define TAPE_SPACE_SETMARKS 8
+#define TAPE_SPACE_SEQUENTIAL_SMKS 9
+#define TAPE_DRIVE_FIXED 1
+#define TAPE_DRIVE_SELECT 2
+#define TAPE_DRIVE_INITIATOR 4
+#define TAPE_DRIVE_ERASE_SHORT 16
+#define TAPE_DRIVE_ERASE_LONG 32
+#define TAPE_DRIVE_ERASE_BOP_ONLY 64
+#define TAPE_DRIVE_ERASE_IMMEDIATE 128
+#define TAPE_DRIVE_TAPE_CAPACITY 256
+#define TAPE_DRIVE_TAPE_REMAINING 512
+#define TAPE_DRIVE_FIXED_BLOCK 1024
+#define TAPE_DRIVE_VARIABLE_BLOCK 2048
+#define TAPE_DRIVE_WRITE_PROTECT 4096
+#define TAPE_DRIVE_EOT_WZ_SIZE 8192
+#define TAPE_DRIVE_ECC 0x10000
+#define TAPE_DRIVE_COMPRESSION 0x20000
+#define TAPE_DRIVE_PADDING 0x40000
+#define TAPE_DRIVE_REPORT_SMKS 0x80000
+#define TAPE_DRIVE_GET_ABSOLUTE_BLK 0x100000
+#define TAPE_DRIVE_GET_LOGICAL_BLK 0x200000
+#define TAPE_DRIVE_SET_EOT_WZ_SIZE 0x400000
+#define TAPE_DRIVE_EJECT_MEDIA 0x1000000
+#define TAPE_DRIVE_CLEAN_REQUESTS 0x2000000
+#define TAPE_DRIVE_SET_CMP_BOP_ONLY 0x4000000
+#define TAPE_DRIVE_RESERVED_BIT 0x80000000
+#define TAPE_DRIVE_LOAD_UNLOAD 0x80000001
+#define TAPE_DRIVE_TENSION 0x80000002
+#define TAPE_DRIVE_LOCK_UNLOCK 0x80000004
+#define TAPE_DRIVE_REWIND_IMMEDIATE 0x80000008
+#define TAPE_DRIVE_SET_BLOCK_SIZE 0x80000010
+#define TAPE_DRIVE_LOAD_UNLD_IMMED 0x80000020
+#define TAPE_DRIVE_TENSION_IMMED 0x80000040
+#define TAPE_DRIVE_LOCK_UNLK_IMMED 0x80000080
+#define TAPE_DRIVE_SET_ECC 0x80000100
+#define TAPE_DRIVE_SET_COMPRESSION 0x80000200
+#define TAPE_DRIVE_SET_PADDING 0x80000400
+#define TAPE_DRIVE_SET_REPORT_SMKS 0x80000800
+#define TAPE_DRIVE_ABSOLUTE_BLK 0x80001000
+#define TAPE_DRIVE_ABS_BLK_IMMED 0x80002000
+#define TAPE_DRIVE_LOGICAL_BLK 0x80004000
+#define TAPE_DRIVE_LOG_BLK_IMMED 0x80008000
+#define TAPE_DRIVE_END_OF_DATA 0x80010000
+#define TAPE_DRIVE_RELATIVE_BLKS 0x80020000
+#define TAPE_DRIVE_FILEMARKS 0x80040000
+#define TAPE_DRIVE_SEQUENTIAL_FMKS 0x80080000
+#define TAPE_DRIVE_SETMARKS 0x80100000
+#define TAPE_DRIVE_SEQUENTIAL_SMKS 0x80200000
+#define TAPE_DRIVE_REVERSE_POSITION 0x80400000
+#define TAPE_DRIVE_SPACE_IMMEDIATE 0x80800000
+#define TAPE_DRIVE_WRITE_SETMARKS 0x81000000
+#define TAPE_DRIVE_WRITE_FILEMARKS 0x82000000
+#define TAPE_DRIVE_WRITE_SHORT_FMKS 0x84000000
+#define TAPE_DRIVE_WRITE_LONG_FMKS 0x88000000
+#define TAPE_DRIVE_WRITE_MARK_IMMED 0x90000000
+#define TAPE_DRIVE_FORMAT 0xA0000000
+#define TAPE_DRIVE_FORMAT_IMMEDIATE 0xC0000000
+#define TAPE_DRIVE_HIGH_FEATURES 0x80000000
+#define TAPE_FIXED_PARTITIONS 0
+#define TAPE_INITIATOR_PARTITIONS 2
+#define TAPE_SELECT_PARTITIONS 1
+#define TAPE_FILEMARKS 1
+#define TAPE_LONG_FILEMARKS 3
+#define TAPE_SETMARKS 0
+#define TAPE_SHORT_FILEMARKS 2
+#define TAPE_ERASE_LONG 1
+#define TAPE_ERASE_SHORT 0
+#define TAPE_LOAD 0
+#define TAPE_UNLOAD 1
+#define TAPE_TENSION 2
+#define TAPE_LOCK 3
+#define TAPE_UNLOCK 4
+#define TAPE_FORMAT 5
+#if (_WIN32_WINNT >= 0x0500)
+#define VER_MINORVERSION 0x0000001
+#define VER_MAJORVERSION 0x0000002
+#define VER_BUILDNUMBER 0x0000004
+#define VER_PLATFORMID 0x0000008
+#define VER_SERVICEPACKMINOR 0x0000010
+#define VER_SERVICEPACKMAJOR 0x0000020
+#define VER_SUITENAME 0x0000040
+#define VER_PRODUCT_TYPE 0x0000080
+#define VER_EQUAL 1
+#define VER_GREATER 2
+#define VER_GREATER_EQUAL 3
+#define VER_LESS 4
+#define VER_LESS_EQUAL 5
+#define VER_AND 6
+#define VER_OR 7
+#endif
+#define VER_PLATFORM_WIN32s 0
+#define VER_PLATFORM_WIN32_WINDOWS 1
+#define VER_PLATFORM_WIN32_NT 2
+#define VER_NT_WORKSTATION 1
+#define VER_NT_DOMAIN_CONTROLLER 2
+#define VER_NT_SERVER 3
+#define VER_SUITE_SMALLBUSINESS 1
+#define VER_SUITE_ENTERPRISE 2
+#define VER_SUITE_BACKOFFICE 4
+#define VER_SUITE_TERMINAL 16
+#define VER_SUITE_SMALLBUSINESS_RESTRICTED 32
+#define VER_SUITE_EMBEDDEDNT 64
+#define VER_SUITE_DATACENTER 128
+#define VER_SUITE_SINGLEUSERTS 256
+#define VER_SUITE_PERSONAL 512
+#define VER_SUITE_BLADE 1024
+#define VER_SUITE_STORAGE_SERVER 8192
+#define VER_SUITE_COMPUTE_SERVER 16384
+#define WT_EXECUTEDEFAULT 0x00000000
+#define WT_EXECUTEINIOTHREAD 0x00000001
+#define WT_EXECUTEINWAITTHREAD 0x00000004
+#define WT_EXECUTEONLYONCE 0x00000008
+#define WT_EXECUTELONGFUNCTION 0x00000010
+#define WT_EXECUTEINTIMERTHREAD 0x00000020
+#define WT_EXECUTEINPERSISTENTTHREAD 0x00000080
+#define WT_TRANSFER_IMPERSONATION 0x00000100
+#if (_WIN32_WINNT >= 0x0501)
+#define ACTIVATION_CONTEXT_SECTION_ASSEMBLY_INFORMATION 1
+#define ACTIVATION_CONTEXT_SECTION_DLL_REDIRECTION 2
+#define ACTIVATION_CONTEXT_SECTION_WINDOW_CLASS_REDIRECTION 3
+#define ACTIVATION_CONTEXT_SECTION_COM_SERVER_REDIRECTION 4
+#define ACTIVATION_CONTEXT_SECTION_COM_INTERFACE_REDIRECTION 5
+#define ACTIVATION_CONTEXT_SECTION_COM_TYPE_LIBRARY_REDIRECTION 6
+#define ACTIVATION_CONTEXT_SECTION_COM_PROGID_REDIRECTION 7
+#define ACTIVATION_CONTEXT_SECTION_CLR_SURROGATES 9
+#endif /* (_WIN32_WINNT >= 0x0501) */
+#define BTYPE(x) ((x)&N_BTMASK)
+#define ISPTR(x) (((x)&N_TMASK)==(IMAGE_SYM_DTYPE_POINTER<<N_BTSHFT))
+#define ISFCN(x) (((x)&N_TMASK)==(IMAGE_SYM_DTYPE_FUNCTION<<N_BTSHFT))
+#define ISARY(x) (((x)&N_TMASK)==(IMAGE_SYM_DTYPE_ARRAY<<N_BTSHFT))
+#define ISTAG(x) ((x)==IMAGE_SYM_CLASS_STRUCT_TAG||(x)==IMAGE_SYM_CLASS_UNION_TAG||(x)==IMAGE_SYM_CLASS_ENUM_TAG)
+#define INCREF(x) ((((x)&~N_BTMASK)<<N_TSHIFT)|(IMAGE_SYM_DTYPE_POINTER<<N_BTSHFT)|((x)&N_BTMASK))
+#define DECREF(x) ((((x)>>N_TSHIFT)&~N_BTMASK)|((x)&N_BTMASK))
+#define TLS_MINIMUM_AVAILABLE 64
+#define REPARSE_DATA_BUFFER_HEADER_SIZE FIELD_OFFSET(REPARSE_DATA_BUFFER, GenericReparseBuffer)
+#define REPARSE_GUID_DATA_BUFFER_HEADER_SIZE FIELD_OFFSET(REPARSE_GUID_DATA_BUFFER, GenericReparseBuffer)
+#define MAXIMUM_REPARSE_DATA_BUFFER_SIZE 16384
+#define IO_REPARSE_TAG_RESERVED_ZERO 0
+#define IO_REPARSE_TAG_RESERVED_ONE 1
+#define IO_REPARSE_TAG_RESERVED_RANGE IO_REPARSE_TAG_RESERVED_ONE
+#define IsReparseTagMicrosoft(x) ((x)&0x80000000)
+#define IsReparseTagHighLatency(x) ((x)&0x40000000)
+#define IsReparseTagNameSurrogate(x) ((x)&0x20000000)
+#define IO_REPARSE_TAG_VALID_VALUES 0xE000FFFF
+#define IsReparseTagValid(x) (!((x)&~IO_REPARSE_TAG_VALID_VALUES)&&((x)>IO_REPARSE_TAG_RESERVED_RANGE))
+#define IO_REPARSE_TAG_SYMBOLIC_LINK IO_REPARSE_TAG_RESERVED_ZERO
+#define IO_REPARSE_TAG_MOUNT_POINT 0xA0000003
+#define IO_REPARSE_TAG_SYMLINK 0xA000000C
+#define WT_SET_MAX_THREADPOOL_THREADS(Flags,Limit) ((Flags)|=(Limit)<<16)
+#ifndef RC_INVOKED
+typedef DWORD ACCESS_MASK, *PACCESS_MASK;
+
+#ifdef _GUID_DEFINED
+# warning _GUID_DEFINED is deprecated, use GUID_DEFINED instead
+#endif
+
+#if ! (defined _GUID_DEFINED || defined GUID_DEFINED) /* also defined in basetyps.h */
+#define GUID_DEFINED
+typedef struct _GUID {
+ unsigned long Data1;
+ unsigned short Data2;
+ unsigned short Data3;
+ unsigned char Data4[8];
+} GUID, *REFGUID, *LPGUID;
+#define SYSTEM_LUID { 0x3e7, 0x0 }
+#endif /* GUID_DEFINED */
+typedef struct _GENERIC_MAPPING {
+ ACCESS_MASK GenericRead;
+ ACCESS_MASK GenericWrite;
+ ACCESS_MASK GenericExecute;
+ ACCESS_MASK GenericAll;
+} GENERIC_MAPPING, *PGENERIC_MAPPING;
+typedef struct _ACE_HEADER {
+ BYTE AceType;
+ BYTE AceFlags;
+ WORD AceSize;
+} ACE_HEADER, *PACE_HEADER;
+typedef struct _ACCESS_ALLOWED_ACE {
+ ACE_HEADER Header;
+ ACCESS_MASK Mask;
+ DWORD SidStart;
+} ACCESS_ALLOWED_ACE, *PACCESS_ALLOWED_ACE;
+typedef struct _ACCESS_DENIED_ACE {
+ ACE_HEADER Header;
+ ACCESS_MASK Mask;
+ DWORD SidStart;
+} ACCESS_DENIED_ACE, *PACCESS_DENIED_ACE;
+typedef struct _SYSTEM_AUDIT_ACE {
+ ACE_HEADER Header;
+ ACCESS_MASK Mask;
+ DWORD SidStart;
+} SYSTEM_AUDIT_ACE;
+typedef SYSTEM_AUDIT_ACE *PSYSTEM_AUDIT_ACE;
+typedef struct _SYSTEM_ALARM_ACE {
+ ACE_HEADER Header;
+ ACCESS_MASK Mask;
+ DWORD SidStart;
+} SYSTEM_ALARM_ACE,*PSYSTEM_ALARM_ACE;
+typedef struct _ACCESS_ALLOWED_OBJECT_ACE {
+ ACE_HEADER Header;
+ ACCESS_MASK Mask;
+ DWORD Flags;
+ GUID ObjectType;
+ GUID InheritedObjectType;
+ DWORD SidStart;
+} ACCESS_ALLOWED_OBJECT_ACE,*PACCESS_ALLOWED_OBJECT_ACE;
+typedef struct _ACCESS_DENIED_OBJECT_ACE {
+ ACE_HEADER Header;
+ ACCESS_MASK Mask;
+ DWORD Flags;
+ GUID ObjectType;
+ GUID InheritedObjectType;
+ DWORD SidStart;
+} ACCESS_DENIED_OBJECT_ACE,*PACCESS_DENIED_OBJECT_ACE;
+typedef struct _SYSTEM_AUDIT_OBJECT_ACE {
+ ACE_HEADER Header;
+ ACCESS_MASK Mask;
+ DWORD Flags;
+ GUID ObjectType;
+ GUID InheritedObjectType;
+ DWORD SidStart;
+} SYSTEM_AUDIT_OBJECT_ACE,*PSYSTEM_AUDIT_OBJECT_ACE;
+typedef struct _SYSTEM_ALARM_OBJECT_ACE {
+ ACE_HEADER Header;
+ ACCESS_MASK Mask;
+ DWORD Flags;
+ GUID ObjectType;
+ GUID InheritedObjectType;
+ DWORD SidStart;
+} SYSTEM_ALARM_OBJECT_ACE,*PSYSTEM_ALARM_OBJECT_ACE;
+typedef struct _ACL {
+ BYTE AclRevision;
+ BYTE Sbz1;
+ WORD AclSize;
+ WORD AceCount;
+ WORD Sbz2;
+} ACL,*PACL;
+typedef struct _ACL_REVISION_INFORMATION {
+ DWORD AclRevision;
+} ACL_REVISION_INFORMATION;
+typedef struct _ACL_SIZE_INFORMATION {
+ DWORD AceCount;
+ DWORD AclBytesInUse;
+ DWORD AclBytesFree;
+} ACL_SIZE_INFORMATION;
+
+/* FIXME: add more machines */
+#ifdef _X86_
+#define SIZE_OF_80387_REGISTERS 80
+#define CONTEXT_i386 0x10000
+#define CONTEXT_i486 0x10000
+#define CONTEXT_CONTROL (CONTEXT_i386|0x00000001L)
+#define CONTEXT_INTEGER (CONTEXT_i386|0x00000002L)
+#define CONTEXT_SEGMENTS (CONTEXT_i386|0x00000004L)
+#define CONTEXT_FLOATING_POINT (CONTEXT_i386|0x00000008L)
+#define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386|0x00000010L)
+#define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386|0x00000020L)
+#define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS)
+#define MAXIMUM_SUPPORTED_EXTENSION 512
+typedef struct _FLOATING_SAVE_AREA {
+ DWORD ControlWord;
+ DWORD StatusWord;
+ DWORD TagWord;
+ DWORD ErrorOffset;
+ DWORD ErrorSelector;
+ DWORD DataOffset;
+ DWORD DataSelector;
+ BYTE RegisterArea[80];
+ DWORD Cr0NpxState;
+} FLOATING_SAVE_AREA;
+typedef struct _CONTEXT {
+ DWORD ContextFlags;
+ DWORD Dr0;
+ DWORD Dr1;
+ DWORD Dr2;
+ DWORD Dr3;
+ DWORD Dr6;
+ DWORD Dr7;
+ FLOATING_SAVE_AREA FloatSave;
+ DWORD 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;
+ BYTE ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION];
+} CONTEXT;
+#elif defined(_PPC_)
+#define CONTEXT_CONTROL 1L
+#define CONTEXT_FLOATING_POINT 2L
+#define CONTEXT_INTEGER 4L
+#define CONTEXT_DEBUG_REGISTERS 8L
+#define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_FLOATING_POINT|CONTEXT_INTEGER)
+typedef struct {
+ double Fpr0;
+ double Fpr1;
+ double Fpr2;
+ double Fpr3;
+ double Fpr4;
+ double Fpr5;
+ double Fpr6;
+ double Fpr7;
+ double Fpr8;
+ double Fpr9;
+ double Fpr10;
+ double Fpr11;
+ double Fpr12;
+ double Fpr13;
+ double Fpr14;
+ double Fpr15;
+ double Fpr16;
+ double Fpr17;
+ double Fpr18;
+ double Fpr19;
+ double Fpr20;
+ double Fpr21;
+ double Fpr22;
+ double Fpr23;
+ double Fpr24;
+ double Fpr25;
+ double Fpr26;
+ double Fpr27;
+ double Fpr28;
+ double Fpr29;
+ double Fpr30;
+ double Fpr31;
+ double Fpscr;
+ DWORD Gpr0;
+ DWORD Gpr1;
+ DWORD Gpr2;
+ DWORD Gpr3;
+ DWORD Gpr4;
+ DWORD Gpr5;
+ DWORD Gpr6;
+ DWORD Gpr7;
+ DWORD Gpr8;
+ DWORD Gpr9;
+ DWORD Gpr10;
+ DWORD Gpr11;
+ DWORD Gpr12;
+ DWORD Gpr13;
+ DWORD Gpr14;
+ DWORD Gpr15;
+ DWORD Gpr16;
+ DWORD Gpr17;
+ DWORD Gpr18;
+ DWORD Gpr19;
+ DWORD Gpr20;
+ DWORD Gpr21;
+ DWORD Gpr22;
+ DWORD Gpr23;
+ DWORD Gpr24;
+ DWORD Gpr25;
+ DWORD Gpr26;
+ DWORD Gpr27;
+ DWORD Gpr28;
+ DWORD Gpr29;
+ DWORD Gpr30;
+ DWORD Gpr31;
+ DWORD Cr;
+ DWORD Xer;
+ DWORD Msr;
+ DWORD Iar;
+ DWORD Lr;
+ DWORD Ctr;
+ DWORD ContextFlags;
+ DWORD Fill[3];
+ DWORD Dr0;
+ DWORD Dr1;
+ DWORD Dr2;
+ DWORD Dr3;
+ DWORD Dr4;
+ DWORD Dr5;
+ DWORD Dr6;
+ DWORD Dr7;
+} CONTEXT;
+#elif defined(_ALPHA_)
+#define CONTEXT_ALPHA 0x20000
+#define CONTEXT_CONTROL (CONTEXT_ALPHA|1L)
+#define CONTEXT_FLOATING_POINT (CONTEXT_ALPHA|2L)
+#define CONTEXT_INTEGER (CONTEXT_ALPHA|4L)
+#define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_FLOATING_POINT|CONTEXT_INTEGER)
+typedef struct _CONTEXT {
+ ULONGLONG FltF0;
+ ULONGLONG FltF1;
+ ULONGLONG FltF2;
+ ULONGLONG FltF3;
+ ULONGLONG FltF4;
+ ULONGLONG FltF5;
+ ULONGLONG FltF6;
+ ULONGLONG FltF7;
+ ULONGLONG FltF8;
+ ULONGLONG FltF9;
+ ULONGLONG FltF10;
+ ULONGLONG FltF11;
+ ULONGLONG FltF12;
+ ULONGLONG FltF13;
+ ULONGLONG FltF14;
+ ULONGLONG FltF15;
+ ULONGLONG FltF16;
+ ULONGLONG FltF17;
+ ULONGLONG FltF18;
+ ULONGLONG FltF19;
+ ULONGLONG FltF20;
+ ULONGLONG FltF21;
+ ULONGLONG FltF22;
+ ULONGLONG FltF23;
+ ULONGLONG FltF24;
+ ULONGLONG FltF25;
+ ULONGLONG FltF26;
+ ULONGLONG FltF27;
+ ULONGLONG FltF28;
+ ULONGLONG FltF29;
+ ULONGLONG FltF30;
+ ULONGLONG FltF31;
+ ULONGLONG IntV0;
+ ULONGLONG IntT0;
+ ULONGLONG IntT1;
+ ULONGLONG IntT2;
+ ULONGLONG IntT3;
+ ULONGLONG IntT4;
+ ULONGLONG IntT5;
+ ULONGLONG IntT6;
+ ULONGLONG IntT7;
+ ULONGLONG IntS0;
+ ULONGLONG IntS1;
+ ULONGLONG IntS2;
+ ULONGLONG IntS3;
+ ULONGLONG IntS4;
+ ULONGLONG IntS5;
+ ULONGLONG IntFp;
+ ULONGLONG IntA0;
+ ULONGLONG IntA1;
+ ULONGLONG IntA2;
+ ULONGLONG IntA3;
+ ULONGLONG IntA4;
+ ULONGLONG IntA5;
+ ULONGLONG IntT8;
+ ULONGLONG IntT9;
+ ULONGLONG IntT10;
+ ULONGLONG IntT11;
+ ULONGLONG IntRa;
+ ULONGLONG IntT12;
+ ULONGLONG IntAt;
+ ULONGLONG IntGp;
+ ULONGLONG IntSp;
+ ULONGLONG IntZero;
+ ULONGLONG Fpcr;
+ ULONGLONG SoftFpcr;
+ ULONGLONG Fir;
+ DWORD Psr;
+ DWORD ContextFlags;
+ DWORD Fill[4];
+} CONTEXT;
+#elif defined(SHx)
+
+/* These are the debug or break registers on the SH3 */
+typedef struct _DEBUG_REGISTERS {
+ ULONG BarA;
+ UCHAR BasrA;
+ UCHAR BamrA;
+ USHORT BbrA;
+ ULONG BarB;
+ UCHAR BasrB;
+ UCHAR BamrB;
+ USHORT BbrB;
+ ULONG BdrB;
+ ULONG BdmrB;
+ USHORT Brcr;
+ USHORT Align;
+} DEBUG_REGISTERS, *PDEBUG_REGISTERS;
+
+/* The following flags control the contents of the CONTEXT structure. */
+
+#define CONTEXT_SH3 0x00000040
+#define CONTEXT_SH4 0x000000c0 /* CONTEXT_SH3 | 0x80 - must contain the SH3 bits */
+
+#ifdef SH3
+#define CONTEXT_CONTROL (CONTEXT_SH3 | 0x00000001L)
+#define CONTEXT_INTEGER (CONTEXT_SH3 | 0x00000002L)
+#define CONTEXT_DEBUG_REGISTERS (CONTEXT_SH3 | 0x00000008L)
+#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_DEBUG_REGISTERS)
+#else /* SH4 */
+#define CONTEXT_CONTROL (CONTEXT_SH4 | 0x00000001L)
+#define CONTEXT_INTEGER (CONTEXT_SH4 | 0x00000002L)
+#define CONTEXT_DEBUG_REGISTERS (CONTEXT_SH4 | 0x00000008L)
+#define CONTEXT_FLOATING_POINT (CONTEXT_SH4 | 0x00000004L)
+#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_DEBUG_REGISTERS | CONTEXT_FLOATING_POINT)
+#endif
+
+/* Context Frame */
+
+/* This frame is used to store a limited processor context into the */
+/* Thread structure for CPUs which have no floating point support. */
+
+typedef struct _CONTEXT {
+ /* The flags values within this flag control the contents of */
+ /* a CONTEXT record. */
+
+ /* If the context record is used as an input parameter, then */
+ /* for each portion of the context record controlled by a flag */
+ /* whose value is set, it is assumed that that portion of the */
+ /* context record contains valid context. If the context record */
+ /* is being used to modify a thread's context, then only that */
+ /* portion of the threads context will be modified. */
+
+ /* If the context record is used as an IN OUT parameter to capture */
+ /* the context of a thread, then only those portions of the thread's */
+ /* context corresponding to set flags will be returned. */
+
+ /* The context record is never used as an OUT only parameter. */
+
+
+ ULONG ContextFlags;
+
+ /* This section is specified/returned if the ContextFlags word contains */
+ /* the flag CONTEXT_INTEGER. */
+
+ /* N.B. The registers RA and R15 are defined in this section, but are */
+ /* considered part of the control context rather than part of the integer */
+ /* context. */
+
+ ULONG PR;
+ ULONG MACH;
+ ULONG MACL;
+ ULONG GBR;
+ ULONG R0;
+ ULONG R1;
+ ULONG R2;
+ ULONG R3;
+ ULONG R4;
+ ULONG R5;
+ ULONG R6;
+ ULONG R7;
+ ULONG R8;
+ ULONG R9;
+ ULONG R10;
+ ULONG R11;
+ ULONG R12;
+ ULONG R13;
+ ULONG R14;
+ ULONG R15;
+
+ /* This section is specified/returned if the ContextFlags word contains */
+ /* the flag CONTEXT_CONTROL. */
+
+ /* N.B. The registers r15 and ra are defined in the integer section, */
+ /* but are considered part of the control context rather than part of */
+ /* the integer context. */
+
+ ULONG Fir;
+ ULONG Psr;
+
+#if !defined(SH3e) && !defined(SH4)
+ ULONG OldStuff[2];
+ DEBUG_REGISTERS DebugRegisters;
+#else
+ ULONG Fpscr;
+ ULONG Fpul;
+ ULONG FRegs[16];
+#if defined(SH4)
+ ULONG xFRegs[16];
+#endif
+#endif
+} CONTEXT;
+
+#elif defined(MIPS)
+
+/* The following flags control the contents of the CONTEXT structure. */
+
+#define CONTEXT_R4000 0x00010000 /* r4000 context */
+
+#define CONTEXT_CONTROL (CONTEXT_R4000 | 0x00000001L)
+#define CONTEXT_FLOATING_POINT (CONTEXT_R4000 | 0x00000002L)
+#define CONTEXT_INTEGER (CONTEXT_R4000 | 0x00000004L)
+
+#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
+
+/* Context Frame */
+
+/* N.B. This frame must be exactly a multiple of 16 bytes in length. */
+
+/* This frame has a several purposes: 1) it is used as an argument to */
+/* NtContinue, 2) it is used to constuct a call frame for APC delivery, */
+/* 3) it is used to construct a call frame for exception dispatching */
+/* in user mode, and 4) it is used in the user level thread creation */
+/* routines. */
+
+/* The layout of the record conforms to a standard call frame. */
+
+
+typedef struct _CONTEXT {
+
+ /* This section is always present and is used as an argument build */
+ /* area. */
+
+ DWORD Argument[4];
+
+ /* This section is specified/returned if the ContextFlags word contains */
+ /* the flag CONTEXT_FLOATING_POINT. */
+
+ DWORD FltF0;
+ DWORD FltF1;
+ DWORD FltF2;
+ DWORD FltF3;
+ DWORD FltF4;
+ DWORD FltF5;
+ DWORD FltF6;
+ DWORD FltF7;
+ DWORD FltF8;
+ DWORD FltF9;
+ DWORD FltF10;
+ DWORD FltF11;
+ DWORD FltF12;
+ DWORD FltF13;
+ DWORD FltF14;
+ DWORD FltF15;
+ DWORD FltF16;
+ DWORD FltF17;
+ DWORD FltF18;
+ DWORD FltF19;
+ DWORD FltF20;
+ DWORD FltF21;
+ DWORD FltF22;
+ DWORD FltF23;
+ DWORD FltF24;
+ DWORD FltF25;
+ DWORD FltF26;
+ DWORD FltF27;
+ DWORD FltF28;
+ DWORD FltF29;
+ DWORD FltF30;
+ DWORD FltF31;
+
+ /* This section is specified/returned if the ContextFlags word contains */
+ /* the flag CONTEXT_INTEGER. */
+
+ /* N.B. The registers gp, sp, and ra are defined in this section, but are */
+ /* considered part of the control context rather than part of the integer */
+ /* context. */
+
+ /* N.B. Register zero is not stored in the frame. */
+
+ DWORD IntZero;
+ DWORD IntAt;
+ DWORD IntV0;
+ DWORD IntV1;
+ DWORD IntA0;
+ DWORD IntA1;
+ DWORD IntA2;
+ DWORD IntA3;
+ DWORD IntT0;
+ DWORD IntT1;
+ DWORD IntT2;
+ DWORD IntT3;
+ DWORD IntT4;
+ DWORD IntT5;
+ DWORD IntT6;
+ DWORD IntT7;
+ DWORD IntS0;
+ DWORD IntS1;
+ DWORD IntS2;
+ DWORD IntS3;
+ DWORD IntS4;
+ DWORD IntS5;
+ DWORD IntS6;
+ DWORD IntS7;
+ DWORD IntT8;
+ DWORD IntT9;
+ DWORD IntK0;
+ DWORD IntK1;
+ DWORD IntGp;
+ DWORD IntSp;
+ DWORD IntS8;
+ DWORD IntRa;
+ DWORD IntLo;
+ DWORD IntHi;
+
+ /* This section is specified/returned if the ContextFlags word contains */
+ /* the flag CONTEXT_FLOATING_POINT. */
+
+ DWORD Fsr;
+
+ /* This section is specified/returned if the ContextFlags word contains */
+ /* the flag CONTEXT_CONTROL. */
+
+ /* N.B. The registers gp, sp, and ra are defined in the integer section, */
+ /* but are considered part of the control context rather than part of */
+ /* the integer context. */
+
+ DWORD Fir;
+ DWORD Psr;
+
+ /* The flags values within this flag control the contents of */
+ /* a CONTEXT record. */
+
+ /* If the context record is used as an input parameter, then */
+ /* for each portion of the context record controlled by a flag */
+ /* whose value is set, it is assumed that that portion of the */
+ /* context record contains valid context. If the context record */
+ /* is being used to modify a thread's context, then only that */
+ /* portion of the threads context will be modified. */
+
+ /* If the context record is used as an IN OUT parameter to capture */
+ /* the context of a thread, then only those portions of the thread's */
+ /* context corresponding to set flags will be returned. */
+
+ /* The context record is never used as an OUT only parameter. */
+
+ DWORD ContextFlags;
+
+ DWORD Fill[2];
+
+} CONTEXT;
+#elif defined(ARM)
+
+/* The following flags control the contents of the CONTEXT structure. */
+
+#define CONTEXT_ARM 0x0000040
+#define CONTEXT_CONTROL (CONTEXT_ARM | 0x00000001L)
+#define CONTEXT_INTEGER (CONTEXT_ARM | 0x00000002L)
+
+#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER)
+
+typedef struct _CONTEXT {
+ /* The flags values within this flag control the contents of
+ a CONTEXT record.
+
+ If the context record is used as an input parameter, then
+ for each portion of the context record controlled by a flag
+ whose value is set, it is assumed that that portion of the
+ context record contains valid context. If the context record
+ is being used to modify a thread's context, then only that
+ portion of the threads context will be modified.
+
+ If the context record is used as an IN OUT parameter to capture
+ the context of a thread, then only those portions of the thread's
+ context corresponding to set flags will be returned.
+
+ The context record is never used as an OUT only parameter. */
+
+ ULONG ContextFlags;
+
+ /* This section is specified/returned if the ContextFlags word contains
+ the flag CONTEXT_INTEGER. */
+ ULONG R0;
+ ULONG R1;
+ ULONG R2;
+ ULONG R3;
+ ULONG R4;
+ ULONG R5;
+ ULONG R6;
+ ULONG R7;
+ ULONG R8;
+ ULONG R9;
+ ULONG R10;
+ ULONG R11;
+ ULONG R12;
+
+ ULONG Sp;
+ ULONG Lr;
+ ULONG Pc;
+ ULONG Psr;
+} CONTEXT;
+
+#else
+#error "undefined processor type"
+#endif
+typedef CONTEXT *PCONTEXT,*LPCONTEXT;
+typedef struct _EXCEPTION_RECORD {
+ DWORD ExceptionCode;
+ DWORD ExceptionFlags;
+ struct _EXCEPTION_RECORD *ExceptionRecord;
+ PVOID ExceptionAddress;
+ DWORD NumberParameters;
+ DWORD ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
+} EXCEPTION_RECORD,*PEXCEPTION_RECORD,*LPEXCEPTION_RECORD;
+typedef struct _EXCEPTION_POINTERS {
+ PEXCEPTION_RECORD ExceptionRecord;
+ PCONTEXT ContextRecord;
+} EXCEPTION_POINTERS,*PEXCEPTION_POINTERS,*LPEXCEPTION_POINTERS;
+typedef union _LARGE_INTEGER {
+ struct {
+ DWORD LowPart;
+ LONG HighPart;
+ } u;
+#if ! defined(NONAMELESSUNION) || defined(__cplusplus)
+ _ANONYMOUS_STRUCT struct {
+ DWORD LowPart;
+ LONG HighPart;
+ };
+#endif /* NONAMELESSUNION */
+ LONGLONG QuadPart;
+} LARGE_INTEGER, *PLARGE_INTEGER;
+typedef union _ULARGE_INTEGER {
+ struct {
+ DWORD LowPart;
+ DWORD HighPart;
+ } u;
+#if ! defined(NONAMELESSUNION) || defined(__cplusplus)
+ _ANONYMOUS_STRUCT struct {
+ DWORD LowPart;
+ DWORD HighPart;
+ };
+#endif /* NONAMELESSUNION */
+ ULONGLONG QuadPart;
+} ULARGE_INTEGER, *PULARGE_INTEGER;
+typedef struct _LUID {
+ DWORD LowPart;
+ LONG HighPart;
+} LUID, *PLUID;
+#pragma pack(push,4)
+typedef struct _LUID_AND_ATTRIBUTES {
+ LUID Luid;
+ DWORD Attributes;
+} LUID_AND_ATTRIBUTES, *PLUID_AND_ATTRIBUTES;
+#pragma pack(pop)
+typedef LUID_AND_ATTRIBUTES LUID_AND_ATTRIBUTES_ARRAY[ANYSIZE_ARRAY];
+typedef LUID_AND_ATTRIBUTES_ARRAY *PLUID_AND_ATTRIBUTES_ARRAY;
+typedef struct _PRIVILEGE_SET {
+ DWORD PrivilegeCount;
+ DWORD Control;
+ LUID_AND_ATTRIBUTES Privilege[ANYSIZE_ARRAY];
+} PRIVILEGE_SET,*PPRIVILEGE_SET;
+typedef struct _SECURITY_ATTRIBUTES {
+ DWORD nLength;
+ LPVOID lpSecurityDescriptor;
+ BOOL bInheritHandle;
+} SECURITY_ATTRIBUTES,*PSECURITY_ATTRIBUTES,*LPSECURITY_ATTRIBUTES;
+typedef enum _SECURITY_IMPERSONATION_LEVEL {
+ SecurityAnonymous,
+ SecurityIdentification,
+ SecurityImpersonation,
+ SecurityDelegation
+} SECURITY_IMPERSONATION_LEVEL,*PSECURITY_IMPERSONATION_LEVEL;
+typedef BOOLEAN SECURITY_CONTEXT_TRACKING_MODE,*PSECURITY_CONTEXT_TRACKING_MODE;
+typedef struct _SECURITY_QUALITY_OF_SERVICE {
+ DWORD Length;
+ SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
+ SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode;
+ BOOLEAN EffectiveOnly;
+} SECURITY_QUALITY_OF_SERVICE,*PSECURITY_QUALITY_OF_SERVICE;
+typedef PVOID PACCESS_TOKEN;
+typedef struct _SE_IMPERSONATION_STATE {
+ PACCESS_TOKEN Token;
+ BOOLEAN CopyOnOpen;
+ BOOLEAN EffectiveOnly;
+ SECURITY_IMPERSONATION_LEVEL Level;
+} SE_IMPERSONATION_STATE,*PSE_IMPERSONATION_STATE;
+typedef struct _SID_IDENTIFIER_AUTHORITY {
+ BYTE Value[6];
+} SID_IDENTIFIER_AUTHORITY,*PSID_IDENTIFIER_AUTHORITY,*LPSID_IDENTIFIER_AUTHORITY;
+typedef PVOID PSID;
+typedef struct _SID {
+ BYTE Revision;
+ BYTE SubAuthorityCount;
+ SID_IDENTIFIER_AUTHORITY IdentifierAuthority;
+ DWORD SubAuthority[ANYSIZE_ARRAY];
+} SID, *PISID;
+typedef struct _SID_AND_ATTRIBUTES {
+ PSID Sid;
+ DWORD Attributes;
+} SID_AND_ATTRIBUTES, *PSID_AND_ATTRIBUTES;
+typedef SID_AND_ATTRIBUTES SID_AND_ATTRIBUTES_ARRAY[ANYSIZE_ARRAY];
+typedef SID_AND_ATTRIBUTES_ARRAY *PSID_AND_ATTRIBUTES_ARRAY;
+#if (_WIN32_WINNT >= 0x0600)
+typedef ULONG_PTR SID_HASH_ENTRY, *PSID_HASH_ENTRY;
+typedef struct _SID_AND_ATTRIBUTES_HASH {
+ DWORD SidCount;
+ PSID_AND_ATTRIBUTES SidAttr;
+ SID_HASH_ENTRY Hash[SID_HASH_SIZE];
+} SID_AND_ATTRIBUTES_HASH, *PSID_AND_ATTRIBUTES_HASH;
+#endif
+typedef struct _TOKEN_SOURCE {
+ CHAR SourceName[TOKEN_SOURCE_LENGTH];
+ LUID SourceIdentifier;
+} TOKEN_SOURCE,*PTOKEN_SOURCE;
+typedef struct _TOKEN_CONTROL {
+ LUID TokenId;
+ LUID AuthenticationId;
+ LUID ModifiedId;
+ TOKEN_SOURCE TokenSource;
+} TOKEN_CONTROL,*PTOKEN_CONTROL;
+typedef struct _TOKEN_DEFAULT_DACL {
+ PACL DefaultDacl;
+} TOKEN_DEFAULT_DACL,*PTOKEN_DEFAULT_DACL;
+typedef struct _TOKEN_GROUPS {
+ DWORD GroupCount;
+ SID_AND_ATTRIBUTES Groups[ANYSIZE_ARRAY];
+} TOKEN_GROUPS,*PTOKEN_GROUPS,*LPTOKEN_GROUPS;
+typedef struct _TOKEN_OWNER {
+ PSID Owner;
+} TOKEN_OWNER,*PTOKEN_OWNER;
+typedef struct _TOKEN_PRIMARY_GROUP {
+ PSID PrimaryGroup;
+} TOKEN_PRIMARY_GROUP,*PTOKEN_PRIMARY_GROUP;
+typedef struct _TOKEN_PRIVILEGES {
+ DWORD PrivilegeCount;
+ LUID_AND_ATTRIBUTES Privileges[ANYSIZE_ARRAY];
+} TOKEN_PRIVILEGES,*PTOKEN_PRIVILEGES,*LPTOKEN_PRIVILEGES;
+typedef enum tagTOKEN_TYPE {
+ TokenPrimary = 1,
+ TokenImpersonation
+} TOKEN_TYPE,*PTOKEN_TYPE;
+typedef struct _TOKEN_STATISTICS {
+ LUID TokenId;
+ LUID AuthenticationId;
+ LARGE_INTEGER ExpirationTime;
+ TOKEN_TYPE TokenType;
+ SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
+ DWORD DynamicCharged;
+ DWORD DynamicAvailable;
+ DWORD GroupCount;
+ DWORD PrivilegeCount;
+ LUID ModifiedId;
+} TOKEN_STATISTICS, *PTOKEN_STATISTICS;
+typedef struct _TOKEN_USER {
+ SID_AND_ATTRIBUTES User;
+} TOKEN_USER, *PTOKEN_USER;
+#if (_WIN32_WINNT >= 0x0600)
+typedef struct _TOKEN_LINKED_TOKEN {
+ HANDLE LinkedToken;
+} TOKEN_LINKED_TOKEN, *PTOKEN_LINKED_TOKEN;
+typedef struct _TOKEN_MANDATORY_LABEL {
+ SID_AND_ATTRIBUTES Label;
+} TOKEN_MANDATORY_LABEL, *PTOKEN_MANDATORY_LABEL;
+typedef struct _TOKEN_MANDATORY_POLICY {
+ DWORD Policy;
+} TOKEN_MANDATORY_POLICY, *PTOKEN_MANDATORY_POLICY;
+typedef struct _TOKEN_ELEVATION {
+ DWORD TokenIsElevated;
+} TOKEN_ELEVATION, *PTOKEN_ELEVATION;
+typedef struct _TOKEN_ACCESS_INFORMATION {
+ PSID_AND_ATTRIBUTES_HASH SidHash;
+ PSID_AND_ATTRIBUTES_HASH RestrictedSidHash;
+ PTOKEN_PRIVILEGES Privileges;
+ LUID AuthenticationId;
+ TOKEN_TYPE TokenType;
+ SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
+ TOKEN_MANDATORY_POLICY MandatoryPolicy;
+ DWORD Flags;
+} TOKEN_ACCESS_INFORMATION, *PTOKEN_ACCESS_INFORMATION;
+#endif
+typedef DWORD SECURITY_INFORMATION,*PSECURITY_INFORMATION;
+typedef WORD SECURITY_DESCRIPTOR_CONTROL,*PSECURITY_DESCRIPTOR_CONTROL;
+typedef struct _SECURITY_DESCRIPTOR {
+ BYTE Revision;
+ BYTE Sbz1;
+ SECURITY_DESCRIPTOR_CONTROL Control;
+ PSID Owner;
+ PSID Group;
+ PACL Sacl;
+ PACL Dacl;
+} SECURITY_DESCRIPTOR, *PSECURITY_DESCRIPTOR, *PISECURITY_DESCRIPTOR;
+typedef enum _TOKEN_INFORMATION_CLASS {
+ TokenUser=1,
+ TokenGroups,
+ TokenPrivileges,
+ TokenOwner,
+ TokenPrimaryGroup,
+ TokenDefaultDacl,
+ TokenSource,
+ TokenType,
+ TokenImpersonationLevel,
+ TokenStatistics,
+ TokenRestrictedSids,
+ TokenSessionId,
+ TokenGroupsAndPrivileges,
+ TokenSessionReference,
+ TokenSandBoxInert,
+ TokenAuditPolicy,
+ TokenOrigin,
+#if (_WIN32_WINNT >= 0x0600)
+ TokenElevationType,
+ TokenLinkedToken,
+ TokenElevation,
+ TokenHasRestrictions,
+ TokenAccessInformation,
+ TokenVirtualizationAllowed,
+ TokenVirtualizationEnabled,
+ TokenIntegrityLevel,
+ TokenUIAccess,
+ TokenMandatoryPolicy,
+ TokenLogonSid,
+#endif
+ MaxTokenInfoClass
+} TOKEN_INFORMATION_CLASS;
+typedef enum _SID_NAME_USE {
+ SidTypeUser=1,
+ SidTypeGroup,
+ SidTypeDomain,
+ SidTypeAlias,
+ SidTypeWellKnownGroup,
+ SidTypeDeletedAccount,
+ SidTypeInvalid,
+ SidTypeUnknown,
+ SidTypeComputer
+} SID_NAME_USE,*PSID_NAME_USE;
+typedef struct _QUOTA_LIMITS {
+ SIZE_T PagedPoolLimit;
+ SIZE_T NonPagedPoolLimit;
+ SIZE_T MinimumWorkingSetSize;
+ SIZE_T MaximumWorkingSetSize;
+ SIZE_T PagefileLimit;
+ LARGE_INTEGER TimeLimit;
+} QUOTA_LIMITS,*PQUOTA_LIMITS;
+typedef struct _IO_COUNTERS {
+ ULONGLONG ReadOperationCount;
+ ULONGLONG WriteOperationCount;
+ ULONGLONG OtherOperationCount;
+ ULONGLONG ReadTransferCount;
+ ULONGLONG WriteTransferCount;
+ ULONGLONG OtherTransferCount;
+} IO_COUNTERS, *PIO_COUNTERS;
+typedef struct _FILE_NOTIFY_INFORMATION {
+ DWORD NextEntryOffset;
+ DWORD Action;
+ DWORD FileNameLength;
+ WCHAR FileName[1];
+} FILE_NOTIFY_INFORMATION,*PFILE_NOTIFY_INFORMATION;
+typedef struct _TAPE_ERASE {
+ DWORD Type;
+ BOOLEAN Immediate;
+} TAPE_ERASE,*PTAPE_ERASE;
+typedef struct _TAPE_GET_DRIVE_PARAMETERS {
+ BOOLEAN ECC;
+ BOOLEAN Compression;
+ BOOLEAN DataPadding;
+ BOOLEAN ReportSetmarks;
+ DWORD DefaultBlockSize;
+ DWORD MaximumBlockSize;
+ DWORD MinimumBlockSize;
+ DWORD MaximumPartitionCount;
+ DWORD FeaturesLow;
+ DWORD FeaturesHigh;
+ DWORD EOTWarningZoneSize;
+} TAPE_GET_DRIVE_PARAMETERS,*PTAPE_GET_DRIVE_PARAMETERS;
+typedef struct _TAPE_GET_MEDIA_PARAMETERS {
+ LARGE_INTEGER Capacity;
+ LARGE_INTEGER Remaining;
+ DWORD BlockSize;
+ DWORD PartitionCount;
+ BOOLEAN WriteProtected;
+} TAPE_GET_MEDIA_PARAMETERS,*PTAPE_GET_MEDIA_PARAMETERS;
+typedef struct _TAPE_GET_POSITION {
+ ULONG Type;
+ ULONG Partition;
+ ULONG OffsetLow;
+ ULONG OffsetHigh;
+} TAPE_GET_POSITION,*PTAPE_GET_POSITION;
+typedef struct _TAPE_PREPARE {
+ DWORD Operation;
+ BOOLEAN Immediate;
+} TAPE_PREPARE,*PTAPE_PREPARE;
+typedef struct _TAPE_SET_DRIVE_PARAMETERS {
+ BOOLEAN ECC;
+ BOOLEAN Compression;
+ BOOLEAN DataPadding;
+ BOOLEAN ReportSetmarks;
+ ULONG EOTWarningZoneSize;
+} TAPE_SET_DRIVE_PARAMETERS,*PTAPE_SET_DRIVE_PARAMETERS;
+typedef struct _TAPE_SET_MEDIA_PARAMETERS {
+ ULONG BlockSize;
+} TAPE_SET_MEDIA_PARAMETERS,*PTAPE_SET_MEDIA_PARAMETERS;
+typedef struct _TAPE_SET_POSITION {
+ DWORD Method;
+ DWORD Partition;
+ LARGE_INTEGER Offset;
+ BOOLEAN Immediate;
+} TAPE_SET_POSITION,*PTAPE_SET_POSITION;
+typedef struct _TAPE_WRITE_MARKS {
+ DWORD Type;
+ DWORD Count;
+ BOOLEAN Immediate;
+} TAPE_WRITE_MARKS,*PTAPE_WRITE_MARKS;
+typedef struct _TAPE_CREATE_PARTITION {
+ DWORD Method;
+ DWORD Count;
+ DWORD Size;
+} TAPE_CREATE_PARTITION,*PTAPE_CREATE_PARTITION;
+typedef struct _MEMORY_BASIC_INFORMATION {
+ PVOID BaseAddress;
+ PVOID AllocationBase;
+ DWORD AllocationProtect;
+ DWORD RegionSize;
+ DWORD State;
+ DWORD Protect;
+ DWORD Type;
+} MEMORY_BASIC_INFORMATION,*PMEMORY_BASIC_INFORMATION;
+typedef struct _MESSAGE_RESOURCE_ENTRY {
+ WORD Length;
+ WORD Flags;
+ BYTE Text[1];
+} MESSAGE_RESOURCE_ENTRY,*PMESSAGE_RESOURCE_ENTRY;
+typedef struct _MESSAGE_RESOURCE_BLOCK {
+ DWORD LowId;
+ DWORD HighId;
+ DWORD OffsetToEntries;
+} MESSAGE_RESOURCE_BLOCK,*PMESSAGE_RESOURCE_BLOCK;
+typedef struct _MESSAGE_RESOURCE_DATA {
+ DWORD NumberOfBlocks;
+ MESSAGE_RESOURCE_BLOCK Blocks[1];
+} MESSAGE_RESOURCE_DATA,*PMESSAGE_RESOURCE_DATA;
+typedef struct _LIST_ENTRY {
+ struct _LIST_ENTRY *Flink;
+ struct _LIST_ENTRY *Blink;
+} LIST_ENTRY,*PLIST_ENTRY;
+typedef struct _SINGLE_LIST_ENTRY {
+ struct _SINGLE_LIST_ENTRY *Next;
+} SINGLE_LIST_ENTRY,*PSINGLE_LIST_ENTRY;
+
+#ifndef _SLIST_HEADER_
+#define _SLIST_HEADER_
+#define SLIST_ENTRY SINGLE_LIST_ENTRY
+#define _SLIST_ENTRY _SINGLE_LIST_ENTRY
+#define PSLIST_ENTRY PSINGLE_LIST_ENTRY
+typedef union _SLIST_HEADER {
+ ULONGLONG Alignment;
+ _ANONYMOUS_STRUCT struct {
+ SLIST_ENTRY Next;
+ WORD Depth;
+ WORD Sequence;
+ } DUMMYSTRUCTNAME;
+} SLIST_HEADER,*PSLIST_HEADER;
+#endif /* !_SLIST_HEADER_ */
+
+typedef struct _RTL_CRITICAL_SECTION_DEBUG {
+ WORD Type;
+ WORD CreatorBackTraceIndex;
+ struct _RTL_CRITICAL_SECTION *CriticalSection;
+ LIST_ENTRY ProcessLocksList;
+ DWORD EntryCount;
+ DWORD ContentionCount;
+ DWORD Spare[2];
+} RTL_CRITICAL_SECTION_DEBUG,*PRTL_CRITICAL_SECTION_DEBUG;
+typedef struct _RTL_CRITICAL_SECTION {
+ PRTL_CRITICAL_SECTION_DEBUG DebugInfo;
+ LONG LockCount;
+ LONG RecursionCount;
+ HANDLE OwningThread;
+ HANDLE LockSemaphore;
+ DWORD Reserved;
+} RTL_CRITICAL_SECTION,*PRTL_CRITICAL_SECTION;
+typedef struct _EVENTLOGRECORD {
+ DWORD Length;
+ DWORD Reserved;
+ DWORD RecordNumber;
+ DWORD TimeGenerated;
+ DWORD TimeWritten;
+ DWORD EventID;
+ WORD EventType;
+ WORD NumStrings;
+ WORD EventCategory;
+ WORD ReservedFlags;
+ DWORD ClosingRecordNumber;
+ DWORD StringOffset;
+ DWORD UserSidLength;
+ DWORD UserSidOffset;
+ DWORD DataLength;
+ DWORD DataOffset;
+} EVENTLOGRECORD,*PEVENTLOGRECORD;
+typedef struct _OSVERSIONINFOA {
+ DWORD dwOSVersionInfoSize;
+ DWORD dwMajorVersion;
+ DWORD dwMinorVersion;
+ DWORD dwBuildNumber;
+ DWORD dwPlatformId;
+ CHAR szCSDVersion[128];
+} OSVERSIONINFOA,*POSVERSIONINFOA,*LPOSVERSIONINFOA;
+typedef struct _OSVERSIONINFOW {
+ DWORD dwOSVersionInfoSize;
+ DWORD dwMajorVersion;
+ DWORD dwMinorVersion;
+ DWORD dwBuildNumber;
+ DWORD dwPlatformId;
+ WCHAR szCSDVersion[128];
+} OSVERSIONINFOW,*POSVERSIONINFOW,*LPOSVERSIONINFOW;
+typedef struct _OSVERSIONINFOEXA {
+ DWORD dwOSVersionInfoSize;
+ DWORD dwMajorVersion;
+ DWORD dwMinorVersion;
+ DWORD dwBuildNumber;
+ DWORD dwPlatformId;
+ CHAR szCSDVersion[128];
+ WORD wServicePackMajor;
+ WORD wServicePackMinor;
+ WORD wSuiteMask;
+ BYTE wProductType;
+ BYTE wReserved;
+} OSVERSIONINFOEXA, *POSVERSIONINFOEXA, *LPOSVERSIONINFOEXA;
+typedef struct _OSVERSIONINFOEXW {
+ DWORD dwOSVersionInfoSize;
+ DWORD dwMajorVersion;
+ DWORD dwMinorVersion;
+ DWORD dwBuildNumber;
+ DWORD dwPlatformId;
+ WCHAR szCSDVersion[128];
+ WORD wServicePackMajor;
+ WORD wServicePackMinor;
+ WORD wSuiteMask;
+ BYTE wProductType;
+ BYTE wReserved;
+} OSVERSIONINFOEXW, *POSVERSIONINFOEXW, *LPOSVERSIONINFOEXW;
+#pragma pack(push,2)
+typedef struct _IMAGE_VXD_HEADER {
+ WORD e32_magic;
+ BYTE e32_border;
+ BYTE e32_worder;
+ DWORD e32_level;
+ WORD e32_cpu;
+ WORD e32_os;
+ DWORD 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;
+ BYTE e32_res3[12];
+ DWORD e32_winresoff;
+ DWORD e32_winreslen;
+ WORD e32_devid;
+ WORD e32_ddkver;
+} IMAGE_VXD_HEADER,*PIMAGE_VXD_HEADER;
+#pragma pack(pop)
+#pragma pack(push,4)
+typedef struct _IMAGE_FILE_HEADER {
+ WORD Machine;
+ WORD NumberOfSections;
+ DWORD TimeDateStamp;
+ DWORD PointerToSymbolTable;
+ DWORD NumberOfSymbols;
+ WORD SizeOfOptionalHeader;
+ WORD Characteristics;
+} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;
+typedef struct _IMAGE_DATA_DIRECTORY {
+ DWORD VirtualAddress;
+ DWORD Size;
+} IMAGE_DATA_DIRECTORY,*PIMAGE_DATA_DIRECTORY;
+typedef struct _IMAGE_OPTIONAL_HEADER {
+ WORD Magic;
+ BYTE MajorLinkerVersion;
+ BYTE MinorLinkerVersion;
+ DWORD SizeOfCode;
+ DWORD SizeOfInitializedData;
+ DWORD SizeOfUninitializedData;
+ DWORD AddressOfEntryPoint;
+ DWORD BaseOfCode;
+ DWORD BaseOfData;
+ DWORD ImageBase;
+ DWORD SectionAlignment;
+ DWORD FileAlignment;
+ WORD MajorOperatingSystemVersion;
+ WORD MinorOperatingSystemVersion;
+ WORD MajorImageVersion;
+ WORD MinorImageVersion;
+ WORD MajorSubsystemVersion;
+ WORD MinorSubsystemVersion;
+ DWORD Win32VersionValue;
+ DWORD SizeOfImage;
+ DWORD SizeOfHeaders;
+ DWORD CheckSum;
+ WORD Subsystem;
+ WORD DllCharacteristics;
+ DWORD SizeOfStackReserve;
+ DWORD SizeOfStackCommit;
+ DWORD SizeOfHeapReserve;
+ DWORD SizeOfHeapCommit;
+ DWORD LoaderFlags;
+ DWORD NumberOfRvaAndSizes;
+ IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
+} IMAGE_OPTIONAL_HEADER32,*PIMAGE_OPTIONAL_HEADER32;
+typedef struct _IMAGE_OPTIONAL_HEADER64 {
+ WORD Magic;
+ BYTE MajorLinkerVersion;
+ BYTE MinorLinkerVersion;
+ DWORD SizeOfCode;
+ DWORD SizeOfInitializedData;
+ DWORD SizeOfUninitializedData;
+ DWORD AddressOfEntryPoint;
+ DWORD BaseOfCode;
+ ULONGLONG ImageBase;
+ DWORD SectionAlignment;
+ DWORD FileAlignment;
+ WORD MajorOperatingSystemVersion;
+ WORD MinorOperatingSystemVersion;
+ WORD MajorImageVersion;
+ WORD MinorImageVersion;
+ WORD MajorSubsystemVersion;
+ WORD MinorSubsystemVersion;
+ DWORD Win32VersionValue;
+ DWORD SizeOfImage;
+ DWORD SizeOfHeaders;
+ DWORD CheckSum;
+ WORD Subsystem;
+ WORD DllCharacteristics;
+ ULONGLONG SizeOfStackReserve;
+ ULONGLONG SizeOfStackCommit;
+ ULONGLONG SizeOfHeapReserve;
+ ULONGLONG SizeOfHeapCommit;
+ DWORD LoaderFlags;
+ DWORD NumberOfRvaAndSizes;
+ IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
+} IMAGE_OPTIONAL_HEADER64,*PIMAGE_OPTIONAL_HEADER64;
+#ifdef _WIN64
+typedef IMAGE_OPTIONAL_HEADER64 IMAGE_OPTIONAL_HEADER;
+typedef PIMAGE_OPTIONAL_HEADER64 PIMAGE_OPTIONAL_HEADER;
+#else
+typedef IMAGE_OPTIONAL_HEADER32 IMAGE_OPTIONAL_HEADER;
+typedef PIMAGE_OPTIONAL_HEADER32 PIMAGE_OPTIONAL_HEADER;
+#endif
+typedef struct _IMAGE_ROM_OPTIONAL_HEADER {
+ WORD Magic;
+ BYTE MajorLinkerVersion;
+ BYTE MinorLinkerVersion;
+ DWORD SizeOfCode;
+ DWORD SizeOfInitializedData;
+ DWORD SizeOfUninitializedData;
+ DWORD AddressOfEntryPoint;
+ DWORD BaseOfCode;
+ DWORD BaseOfData;
+ DWORD BaseOfBss;
+ DWORD GprMask;
+ DWORD CprMask[4];
+ DWORD GpValue;
+} IMAGE_ROM_OPTIONAL_HEADER,*PIMAGE_ROM_OPTIONAL_HEADER;
+#pragma pack(pop)
+#pragma pack(push,2)
+typedef struct _IMAGE_DOS_HEADER {
+ WORD 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[4];
+ WORD e_oemid;
+ WORD e_oeminfo;
+ WORD e_res2[10];
+ LONG e_lfanew;
+} IMAGE_DOS_HEADER,*PIMAGE_DOS_HEADER;
+typedef struct _IMAGE_OS2_HEADER {
+ WORD ne_magic;
+ CHAR ne_ver;
+ CHAR ne_rev;
+ WORD ne_enttab;
+ WORD ne_cbenttab;
+ LONG ne_crc;
+ WORD ne_flags;
+ WORD ne_autodata;
+ WORD ne_heap;
+ WORD ne_stack;
+ LONG ne_csip;
+ LONG ne_sssp;
+ WORD ne_cseg;
+ WORD ne_cmod;
+ WORD ne_cbnrestab;
+ WORD ne_segtab;
+ WORD ne_rsrctab;
+ WORD ne_restab;
+ WORD ne_modtab;
+ WORD ne_imptab;
+ LONG ne_nrestab;
+ WORD ne_cmovent;
+ WORD ne_align;
+ WORD ne_cres;
+ BYTE ne_exetyp;
+ BYTE ne_flagsothers;
+ WORD ne_pretthunks;
+ WORD ne_psegrefbytes;
+ WORD ne_swaparea;
+ WORD ne_expver;
+} IMAGE_OS2_HEADER,*PIMAGE_OS2_HEADER;
+#pragma pack(pop)
+#pragma pack(push,4)
+typedef struct _IMAGE_NT_HEADERS {
+ DWORD Signature;
+ IMAGE_FILE_HEADER FileHeader;
+ IMAGE_OPTIONAL_HEADER OptionalHeader;
+} IMAGE_NT_HEADERS32,*PIMAGE_NT_HEADERS32;
+typedef struct _IMAGE_NT_HEADERS64 {
+ DWORD Signature;
+ IMAGE_FILE_HEADER FileHeader;
+ IMAGE_OPTIONAL_HEADER OptionalHeader;
+} IMAGE_NT_HEADERS64,*PIMAGE_NT_HEADERS64;
+#ifdef _WIN64
+typedef IMAGE_NT_HEADERS64 IMAGE_NT_HEADERS;
+typedef PIMAGE_NT_HEADERS64 PIMAGE_NT_HEADERS;
+#else
+typedef IMAGE_NT_HEADERS32 IMAGE_NT_HEADERS;
+typedef PIMAGE_NT_HEADERS32 PIMAGE_NT_HEADERS;
+#endif
+typedef struct _IMAGE_ROM_HEADERS {
+ IMAGE_FILE_HEADER FileHeader;
+ IMAGE_ROM_OPTIONAL_HEADER OptionalHeader;
+} IMAGE_ROM_HEADERS,*PIMAGE_ROM_HEADERS;
+typedef struct _IMAGE_SECTION_HEADER {
+ BYTE Name[IMAGE_SIZEOF_SHORT_NAME];
+ union {
+ DWORD PhysicalAddress;
+ DWORD VirtualSize;
+ } Misc;
+ DWORD VirtualAddress;
+ DWORD SizeOfRawData;
+ DWORD PointerToRawData;
+ DWORD PointerToRelocations;
+ DWORD PointerToLinenumbers;
+ WORD NumberOfRelocations;
+ WORD NumberOfLinenumbers;
+ DWORD Characteristics;
+} IMAGE_SECTION_HEADER,*PIMAGE_SECTION_HEADER;
+#pragma pack(pop)
+#pragma pack(push,2)
+typedef struct _IMAGE_SYMBOL {
+ union {
+ BYTE ShortName[8];
+ struct {
+ DWORD Short;
+ DWORD Long;
+ } Name;
+ PBYTE LongName[2];
+ } N;
+ DWORD Value;
+ SHORT SectionNumber;
+ WORD Type;
+ BYTE StorageClass;
+ BYTE NumberOfAuxSymbols;
+} IMAGE_SYMBOL,*PIMAGE_SYMBOL;
+typedef union _IMAGE_AUX_SYMBOL {
+ struct {
+ DWORD TagIndex;
+ union {
+ struct {
+ WORD Linenumber;
+ WORD Size;
+ } LnSz;
+ DWORD TotalSize;
+ } Misc;
+ union {
+ struct {
+ DWORD PointerToLinenumber;
+ DWORD PointerToNextFunction;
+ } Function;
+ struct {
+ WORD Dimension[4];
+ } Array;
+ } FcnAry;
+ WORD TvIndex;
+ } Sym;
+ struct {
+ BYTE Name[IMAGE_SIZEOF_SYMBOL];
+ } File;
+ struct {
+ DWORD Length;
+ WORD NumberOfRelocations;
+ WORD NumberOfLinenumbers;
+ DWORD CheckSum;
+ SHORT Number;
+ BYTE Selection;
+ } Section;
+} IMAGE_AUX_SYMBOL,*PIMAGE_AUX_SYMBOL;
+typedef struct _IMAGE_COFF_SYMBOLS_HEADER {
+ DWORD NumberOfSymbols;
+ DWORD LvaToFirstSymbol;
+ DWORD NumberOfLinenumbers;
+ DWORD LvaToFirstLinenumber;
+ DWORD RvaToFirstByteOfCode;
+ DWORD RvaToLastByteOfCode;
+ DWORD RvaToFirstByteOfData;
+ DWORD RvaToLastByteOfData;
+} IMAGE_COFF_SYMBOLS_HEADER,*PIMAGE_COFF_SYMBOLS_HEADER;
+typedef struct _IMAGE_RELOCATION {
+ _ANONYMOUS_UNION union {
+ DWORD VirtualAddress;
+ DWORD RelocCount;
+ } DUMMYUNIONNAME;
+ DWORD SymbolTableIndex;
+ WORD Type;
+} IMAGE_RELOCATION,*PIMAGE_RELOCATION;
+#pragma pack(pop)
+#pragma pack(push,4)
+typedef struct _IMAGE_BASE_RELOCATION {
+ DWORD VirtualAddress;
+ DWORD SizeOfBlock;
+} IMAGE_BASE_RELOCATION,*PIMAGE_BASE_RELOCATION;
+#pragma pack(pop)
+#pragma pack(push,2)
+typedef struct _IMAGE_LINENUMBER {
+ union {
+ DWORD SymbolTableIndex;
+ DWORD VirtualAddress;
+ } Type;
+ WORD Linenumber;
+} IMAGE_LINENUMBER,*PIMAGE_LINENUMBER;
+#pragma pack(pop)
+#pragma pack(push,4)
+typedef struct _IMAGE_ARCHIVE_MEMBER_HEADER {
+ BYTE Name[16];
+ BYTE Date[12];
+ BYTE UserID[6];
+ BYTE GroupID[6];
+ BYTE Mode[8];
+ BYTE Size[10];
+ BYTE EndHeader[2];
+} IMAGE_ARCHIVE_MEMBER_HEADER,*PIMAGE_ARCHIVE_MEMBER_HEADER;
+typedef struct _IMAGE_EXPORT_DIRECTORY {
+ DWORD Characteristics;
+ DWORD TimeDateStamp;
+ WORD MajorVersion;
+ WORD MinorVersion;
+ DWORD Name;
+ DWORD Base;
+ DWORD NumberOfFunctions;
+ DWORD NumberOfNames;
+ DWORD AddressOfFunctions;
+ DWORD AddressOfNames;
+ DWORD AddressOfNameOrdinals;
+} IMAGE_EXPORT_DIRECTORY,*PIMAGE_EXPORT_DIRECTORY;
+typedef struct _IMAGE_IMPORT_BY_NAME {
+ WORD Hint;
+ BYTE Name[1];
+} IMAGE_IMPORT_BY_NAME,*PIMAGE_IMPORT_BY_NAME;
+typedef struct _IMAGE_THUNK_DATA32 {
+ union {
+ DWORD ForwarderString;
+ DWORD Function;
+ DWORD Ordinal;
+ DWORD AddressOfData;
+ } u1;
+} IMAGE_THUNK_DATA32,*PIMAGE_THUNK_DATA32;
+typedef struct _IMAGE_THUNK_DATA64 {
+ union {
+ ULONGLONG ForwarderString;
+ ULONGLONG Function;
+ ULONGLONG Ordinal;
+ ULONGLONG AddressOfData;
+ } u1;
+} IMAGE_THUNK_DATA64, *PIMAGE_THUNK_DATA64;
+#ifdef __WIN64
+typedef IMAGE_THUNK_DATA64 IMAGE_THUNK_DATA;
+typedef PIMAGE_THUNK_DATA64 PIMAGE_THUNK_DATA;
+#else
+typedef IMAGE_THUNK_DATA32 IMAGE_THUNK_DATA;
+typedef PIMAGE_THUNK_DATA32 PIMAGE_THUNK_DATA;
+#endif
+typedef struct _IMAGE_IMPORT_DESCRIPTOR {
+ _ANONYMOUS_UNION union {
+ DWORD Characteristics;
+ DWORD OriginalFirstThunk;
+ } DUMMYUNIONNAME;
+ DWORD TimeDateStamp;
+ DWORD ForwarderChain;
+ DWORD Name;
+ DWORD FirstThunk;
+} IMAGE_IMPORT_DESCRIPTOR,*PIMAGE_IMPORT_DESCRIPTOR;
+typedef struct _IMAGE_BOUND_IMPORT_DESCRIPTOR {
+ DWORD TimeDateStamp;
+ WORD OffsetModuleName;
+ WORD NumberOfModuleForwarderRefs;
+} IMAGE_BOUND_IMPORT_DESCRIPTOR,*PIMAGE_BOUND_IMPORT_DESCRIPTOR;
+typedef struct _IMAGE_BOUND_FORWARDER_REF {
+ DWORD TimeDateStamp;
+ WORD OffsetModuleName;
+ WORD Reserved;
+} IMAGE_BOUND_FORWARDER_REF,*PIMAGE_BOUND_FORWARDER_REF;
+typedef void(NTAPI *PIMAGE_TLS_CALLBACK)(PVOID,DWORD,PVOID);
+typedef struct _IMAGE_TLS_DIRECTORY32 {
+ DWORD StartAddressOfRawData;
+ DWORD EndAddressOfRawData;
+ DWORD AddressOfIndex;
+ DWORD AddressOfCallBacks;
+ DWORD SizeOfZeroFill;
+ DWORD Characteristics;
+} IMAGE_TLS_DIRECTORY32,*PIMAGE_TLS_DIRECTORY32;
+typedef struct _IMAGE_TLS_DIRECTORY64 {
+ ULONGLONG StartAddressOfRawData;
+ ULONGLONG EndAddressOfRawData;
+ ULONGLONG AddressOfIndex;
+ ULONGLONG AddressOfCallBacks;
+ DWORD SizeOfZeroFill;
+ DWORD Characteristics;
+} IMAGE_TLS_DIRECTORY64, *PIMAGE_TLS_DIRECTORY64;
+#ifdef __WIN64
+typedef IMAGE_TLS_DIRECTORY64 IMAGE_TLS_DIRECTORY;
+typedef PIMAGE_TLS_DIRECTORY64 PIMAGE_TLS_DIRECTORY;
+#else
+typedef IMAGE_TLS_DIRECTORY32 IMAGE_TLS_DIRECTORY;
+typedef PIMAGE_TLS_DIRECTORY32 PIMAGE_TLS_DIRECTORY;
+#endif
+typedef struct _IMAGE_RESOURCE_DIRECTORY {
+ DWORD Characteristics;
+ DWORD TimeDateStamp;
+ WORD MajorVersion;
+ WORD MinorVersion;
+ WORD NumberOfNamedEntries;
+ WORD NumberOfIdEntries;
+} IMAGE_RESOURCE_DIRECTORY,*PIMAGE_RESOURCE_DIRECTORY;
+_ANONYMOUS_STRUCT typedef struct _IMAGE_RESOURCE_DIRECTORY_ENTRY {
+ _ANONYMOUS_UNION union {
+ _ANONYMOUS_STRUCT struct {
+ DWORD NameOffset:31;
+ DWORD NameIsString:1;
+ }DUMMYSTRUCTNAME;
+ DWORD Name;
+ WORD Id;
+ } DUMMYUNIONNAME;
+ _ANONYMOUS_UNION union {
+ DWORD OffsetToData;
+ _ANONYMOUS_STRUCT struct {
+ DWORD OffsetToDirectory:31;
+ DWORD DataIsDirectory:1;
+ } DUMMYSTRUCTNAME2;
+ } DUMMYUNIONNAME2;
+} IMAGE_RESOURCE_DIRECTORY_ENTRY,*PIMAGE_RESOURCE_DIRECTORY_ENTRY;
+typedef struct _IMAGE_RESOURCE_DIRECTORY_STRING {
+ WORD Length;
+ CHAR NameString[1];
+} IMAGE_RESOURCE_DIRECTORY_STRING,*PIMAGE_RESOURCE_DIRECTORY_STRING;
+typedef struct _IMAGE_RESOURCE_DIR_STRING_U {
+ WORD Length;
+ WCHAR NameString[1];
+} IMAGE_RESOURCE_DIR_STRING_U,*PIMAGE_RESOURCE_DIR_STRING_U;
+typedef struct _IMAGE_RESOURCE_DATA_ENTRY {
+ DWORD OffsetToData;
+ DWORD Size;
+ DWORD CodePage;
+ DWORD Reserved;
+} IMAGE_RESOURCE_DATA_ENTRY,*PIMAGE_RESOURCE_DATA_ENTRY;
+typedef struct _IMAGE_LOAD_CONFIG_DIRECTORY {
+ DWORD Characteristics;
+ DWORD TimeDateStamp;
+ WORD MajorVersion;
+ WORD MinorVersion;
+ DWORD GlobalFlagsClear;
+ DWORD GlobalFlagsSet;
+ DWORD CriticalSectionDefaultTimeout;
+ DWORD DeCommitFreeBlockThreshold;
+ DWORD DeCommitTotalFreeThreshold;
+ PVOID LockPrefixTable;
+ DWORD MaximumAllocationSize;
+ DWORD VirtualMemoryThreshold;
+ DWORD ProcessHeapFlags;
+ DWORD Reserved[4];
+} IMAGE_LOAD_CONFIG_DIRECTORY,*PIMAGE_LOAD_CONFIG_DIRECTORY;
+typedef struct {
+ DWORD Characteristics;
+ DWORD TimeDateStamp;
+ WORD MajorVersion;
+ WORD MinorVersion;
+ DWORD GlobalFlagsClear;
+ DWORD GlobalFlagsSet;
+ DWORD CriticalSectionDefaultTimeout;
+ ULONGLONG DeCommitFreeBlockThreshold;
+ ULONGLONG DeCommitTotalFreeThreshold;
+ ULONGLONG LockPrefixTable;
+ ULONGLONG MaximumAllocationSize;
+ ULONGLONG VirtualMemoryThreshold;
+ ULONGLONG ProcessAffinityMask;
+ DWORD ProcessHeapFlags;
+ WORD CSDFlags;
+ WORD Reserved1;
+ ULONGLONG EditList;
+ DWORD Reserved[2];
+} IMAGE_LOAD_CONFIG_DIRECTORY64,*PIMAGE_LOAD_CONFIG_DIRECTORY64;
+typedef struct _IMAGE_RUNTIME_FUNCTION_ENTRY {
+ DWORD BeginAddress;
+ DWORD EndAddress;
+ PVOID ExceptionHandler;
+ PVOID HandlerData;
+ DWORD PrologEndAddress;
+} IMAGE_RUNTIME_FUNCTION_ENTRY,*PIMAGE_RUNTIME_FUNCTION_ENTRY;
+typedef struct _IMAGE_CE_RUNTIME_FUNCTION_ENTRY {
+ unsigned int FuncStart:32;
+ unsigned int PrologLen:8;
+ unsigned int FuncLen:22;
+ unsigned int ThirtyTwoBit:1;
+ unsigned int ExceptionFlag:1;
+} IMAGE_CE_RUNTIME_FUNCTION_ENTRY,*PIMAGE_CE_RUNTIME_FUNCTION_ENTRY;
+typedef struct _IMAGE_DEBUG_DIRECTORY {
+ DWORD Characteristics;
+ DWORD TimeDateStamp;
+ WORD MajorVersion;
+ WORD MinorVersion;
+ DWORD Type;
+ DWORD SizeOfData;
+ DWORD AddressOfRawData;
+ DWORD PointerToRawData;
+} IMAGE_DEBUG_DIRECTORY,*PIMAGE_DEBUG_DIRECTORY;
+typedef struct _FPO_DATA {
+ DWORD ulOffStart;
+ DWORD cbProcSize;
+ DWORD cdwLocals;
+ WORD cdwParams;
+ WORD cbProlog:8;
+ WORD cbRegs:3;
+ WORD fHasSEH:1;
+ WORD fUseBP:1;
+ WORD reserved:1;
+ WORD cbFrame:2;
+} FPO_DATA,*PFPO_DATA;
+typedef struct _IMAGE_DEBUG_MISC {
+ DWORD DataType;
+ DWORD Length;
+ BOOLEAN Unicode;
+ BYTE Reserved[3];
+ BYTE Data[1];
+} IMAGE_DEBUG_MISC,*PIMAGE_DEBUG_MISC;
+typedef struct _IMAGE_FUNCTION_ENTRY {
+ DWORD StartingAddress;
+ DWORD EndingAddress;
+ DWORD EndOfPrologue;
+} IMAGE_FUNCTION_ENTRY,*PIMAGE_FUNCTION_ENTRY;
+typedef struct _IMAGE_FUNCTION_ENTRY64 {
+ ULONGLONG StartingAddress;
+ ULONGLONG EndingAddress;
+ _ANONYMOUS_UNION union {
+ ULONGLONG EndOfPrologue;
+ ULONGLONG UnwindInfoAddress;
+ } DUMMYUNIONNAME;
+} IMAGE_FUNCTION_ENTRY64,*PIMAGE_FUNCTION_ENTRY64;
+typedef struct _IMAGE_SEPARATE_DEBUG_HEADER {
+ WORD Signature;
+ WORD Flags;
+ WORD Machine;
+ WORD Characteristics;
+ DWORD TimeDateStamp;
+ DWORD CheckSum;
+ DWORD ImageBase;
+ DWORD SizeOfImage;
+ DWORD NumberOfSections;
+ DWORD ExportedNamesSize;
+ DWORD DebugDirectorySize;
+ DWORD SectionAlignment;
+ DWORD Reserved[2];
+} IMAGE_SEPARATE_DEBUG_HEADER,*PIMAGE_SEPARATE_DEBUG_HEADER;
+#pragma pack(pop)
+typedef enum _CM_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
+} SERVICE_NODE_TYPE;
+typedef enum _CM_SERVICE_LOAD_TYPE {
+ BootLoad=SERVICE_BOOT_START,
+ SystemLoad=SERVICE_SYSTEM_START,
+ AutoLoad=SERVICE_AUTO_START,
+ DemandLoad=SERVICE_DEMAND_START,
+ DisableLoad=SERVICE_DISABLED
+} SERVICE_LOAD_TYPE;
+typedef enum _CM_ERROR_CONTROL_TYPE {
+ IgnoreError=SERVICE_ERROR_IGNORE,
+ NormalError=SERVICE_ERROR_NORMAL,
+ SevereError=SERVICE_ERROR_SEVERE,
+ CriticalError=SERVICE_ERROR_CRITICAL
+} SERVICE_ERROR_TYPE;
+typedef struct _NT_TIB {
+ struct _EXCEPTION_REGISTRATION_RECORD *ExceptionList;
+ PVOID StackBase;
+ PVOID StackLimit;
+ PVOID SubSystemTib;
+ _ANONYMOUS_UNION union {
+ PVOID FiberData;
+ DWORD Version;
+ } DUMMYUNIONNAME;
+ PVOID ArbitraryUserPointer;
+ struct _NT_TIB *Self;
+} NT_TIB,*PNT_TIB;
+typedef struct _REPARSE_DATA_BUFFER {
+ DWORD ReparseTag;
+ WORD ReparseDataLength;
+ WORD Reserved;
+ _ANONYMOUS_UNION union {
+ struct {
+ WORD SubstituteNameOffset;
+ WORD SubstituteNameLength;
+ WORD PrintNameOffset;
+ WORD PrintNameLength;
+ ULONG Flags;
+ WCHAR PathBuffer[1];
+ } SymbolicLinkReparseBuffer;
+ struct {
+ WORD SubstituteNameOffset;
+ WORD SubstituteNameLength;
+ WORD PrintNameOffset;
+ WORD PrintNameLength;
+ WCHAR PathBuffer[1];
+ } MountPointReparseBuffer;
+ struct {
+ BYTE DataBuffer[1];
+ } GenericReparseBuffer;
+ } DUMMYUNIONNAME;
+} REPARSE_DATA_BUFFER, *PREPARSE_DATA_BUFFER;
+typedef struct _REPARSE_GUID_DATA_BUFFER {
+ DWORD ReparseTag;
+ WORD ReparseDataLength;
+ WORD Reserved;
+ GUID ReparseGuid;
+ struct {
+ BYTE DataBuffer[1];
+ } GenericReparseBuffer;
+} REPARSE_GUID_DATA_BUFFER, *PREPARSE_GUID_DATA_BUFFER;
+typedef struct _REPARSE_POINT_INFORMATION {
+ WORD ReparseDataLength;
+ WORD UnparsedNameLength;
+} REPARSE_POINT_INFORMATION, *PREPARSE_POINT_INFORMATION;
+
+typedef union _FILE_SEGMENT_ELEMENT {
+ PVOID64 Buffer;
+ ULONGLONG Alignment;
+}FILE_SEGMENT_ELEMENT, *PFILE_SEGMENT_ELEMENT;
+
+/* JOBOBJECT_BASIC_LIMIT_INFORMATION.LimitFlags constants */
+#define JOB_OBJECT_LIMIT_WORKINGSET 0x0001
+#define JOB_OBJECT_LIMIT_PROCESS_TIME 0x0002
+#define JOB_OBJECT_LIMIT_JOB_TIME 0x0004
+#define JOB_OBJECT_LIMIT_ACTIVE_PROCESS 0x0008
+#define JOB_OBJECT_LIMIT_AFFINITY 0x0010
+#define JOB_OBJECT_LIMIT_PRIORITY_CLASS 0x0020
+#define JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME 0x0040
+#define JOB_OBJECT_LIMIT_SCHEDULING_CLASS 0x0080
+#define JOB_OBJECT_LIMIT_PROCESS_MEMORY 0x0100
+#define JOB_OBJECT_LIMIT_JOB_MEMORY 0x0200
+#define JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION 0x0400
+#define JOB_OBJECT_BREAKAWAY_OK 0x0800
+#define JOB_OBJECT_SILENT_BREAKAWAY 0x1000
+
+/* JOBOBJECT_BASIC_UI_RESTRICTIONS.UIRestrictionsClass constants */
+#define JOB_OBJECT_UILIMIT_HANDLES 0x0001
+#define JOB_OBJECT_UILIMIT_READCLIPBOARD 0x0002
+#define JOB_OBJECT_UILIMIT_WRITECLIPBOARD 0x0004
+#define JOB_OBJECT_UILIMIT_SYSTEMPARAMETERS 0x0008
+#define JOB_OBJECT_UILIMIT_DISPLAYSETTINGS 0x0010
+#define JOB_OBJECT_UILIMIT_GLOBALATOMS 0x0020
+#define JOB_OBJECT_UILIMIT_DESKTOP 0x0040
+#define JOB_OBJECT_UILIMIT_EXITWINDOWS 0x0080
+
+/* JOBOBJECT_SECURITY_LIMIT_INFORMATION.SecurityLimitFlags constants */
+#define JOB_OBJECT_SECURITY_NO_ADMIN 0x0001
+#define JOB_OBJECT_SECURITY_RESTRICTED_TOKEN 0x0002
+#define JOB_OBJECT_SECURITY_ONLY_TOKEN 0x0004
+#define JOB_OBJECT_SECURITY_FILTER_TOKENS 0x0008
+
+/* JOBOBJECT_END_OF_JOB_TIME_INFORMATION.EndOfJobTimeAction constants */
+#define JOB_OBJECT_TERMINATE_AT_END_OF_JOB 0
+#define JOB_OBJECT_POST_AT_END_OF_JOB 1
+
+#define JOB_OBJECT_MSG_END_OF_JOB_TIME 1
+#define JOB_OBJECT_MSG_END_OF_PROCESS_TIME 2
+#define JOB_OBJECT_MSG_ACTIVE_PROCESS_LIMIT 3
+#define JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO 4
+#define JOB_OBJECT_MSG_NEW_PROCESS 6
+#define JOB_OBJECT_MSG_EXIT_PROCESS 7
+#define JOB_OBJECT_MSG_ABNORMAL_EXIT_PROCESS 8
+#define JOB_OBJECT_MSG_PROCESS_MEMORY_LIMIT 9
+#define JOB_OBJECT_MSG_JOB_MEMORY_LIMIT 10
+
+typedef enum _JOBOBJECTINFOCLASS {
+ JobObjectBasicAccountingInformation = 1,
+ JobObjectBasicLimitInformation,
+ JobObjectBasicProcessIdList,
+ JobObjectBasicUIRestrictions,
+ JobObjectSecurityLimitInformation,
+ JobObjectEndOfJobTimeInformation,
+ JobObjectAssociateCompletionPortInformation,
+ JobObjectBasicAndIoAccountingInformation,
+ JobObjectExtendedLimitInformation,
+ JobObjectJobSetInformation,
+ MaxJobObjectInfoClass
+} JOBOBJECTINFOCLASS;
+typedef struct _JOBOBJECT_BASIC_ACCOUNTING_INFORMATION {
+ LARGE_INTEGER TotalUserTime;
+ LARGE_INTEGER TotalKernelTime;
+ LARGE_INTEGER ThisPeriodTotalUserTime;
+ LARGE_INTEGER ThisPeriodTotalKernelTime;
+ DWORD TotalPageFaultCount;
+ DWORD TotalProcesses;
+ DWORD ActiveProcesses;
+ DWORD TotalTerminatedProcesses;
+} JOBOBJECT_BASIC_ACCOUNTING_INFORMATION,*PJOBOBJECT_BASIC_ACCOUNTING_INFORMATION;
+typedef struct _JOBOBJECT_BASIC_LIMIT_INFORMATION {
+ LARGE_INTEGER PerProcessUserTimeLimit;
+ LARGE_INTEGER PerJobUserTimeLimit;
+ DWORD LimitFlags;
+ SIZE_T MinimumWorkingSetSize;
+ SIZE_T MaximumWorkingSetSize;
+ DWORD ActiveProcessLimit;
+ ULONG_PTR Affinity;
+ DWORD PriorityClass;
+ DWORD SchedulingClass;
+} JOBOBJECT_BASIC_LIMIT_INFORMATION,*PJOBOBJECT_BASIC_LIMIT_INFORMATION;
+typedef struct _JOBOBJECT_BASIC_PROCESS_ID_LIST {
+ DWORD NumberOfAssignedProcesses;
+ DWORD NumberOfProcessIdsInList;
+ ULONG_PTR ProcessIdList[1];
+} JOBOBJECT_BASIC_PROCESS_ID_LIST, *PJOBOBJECT_BASIC_PROCESS_ID_LIST;
+typedef struct _JOBOBJECT_BASIC_UI_RESTRICTIONS {
+ DWORD UIRestrictionsClass;
+} JOBOBJECT_BASIC_UI_RESTRICTIONS,*PJOBOBJECT_BASIC_UI_RESTRICTIONS;
+typedef struct _JOBOBJECT_SECURITY_LIMIT_INFORMATION {
+ DWORD SecurityLimitFlags;
+ HANDLE JobToken;
+ PTOKEN_GROUPS SidsToDisable;
+ PTOKEN_PRIVILEGES PrivilegesToDelete;
+ PTOKEN_GROUPS RestrictedSids;
+} JOBOBJECT_SECURITY_LIMIT_INFORMATION,*PJOBOBJECT_SECURITY_LIMIT_INFORMATION;
+typedef struct _JOBOBJECT_END_OF_JOB_TIME_INFORMATION {
+ DWORD EndOfJobTimeAction;
+} JOBOBJECT_END_OF_JOB_TIME_INFORMATION,*PJOBOBJECT_END_OF_JOB_TIME_INFORMATION;
+typedef struct _JOBOBJECT_ASSOCIATE_COMPLETION_PORT {
+ PVOID CompletionKey;
+ HANDLE CompletionPort;
+} JOBOBJECT_ASSOCIATE_COMPLETION_PORT,*PJOBOBJECT_ASSOCIATE_COMPLETION_PORT;
+typedef struct _JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION {
+ JOBOBJECT_BASIC_ACCOUNTING_INFORMATION BasicInfo;
+ IO_COUNTERS IoInfo;
+} JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION,*PJOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION;
+typedef struct _JOBOBJECT_EXTENDED_LIMIT_INFORMATION {
+ JOBOBJECT_BASIC_LIMIT_INFORMATION BasicLimitInformation;
+ IO_COUNTERS IoInfo;
+ SIZE_T ProcessMemoryLimit;
+ SIZE_T JobMemoryLimit;
+ SIZE_T PeakProcessMemoryUsed;
+ SIZE_T PeakJobMemoryUsed;
+} JOBOBJECT_EXTENDED_LIMIT_INFORMATION,*PJOBOBJECT_EXTENDED_LIMIT_INFORMATION;
+typedef struct _JOBOBJECT_JOBSET_INFORMATION {
+ DWORD MemberLevel;
+} JOBOBJECT_JOBSET_INFORMATION,*PJOBOBJECT_JOBSET_INFORMATION;
+
+/* Fixme: Making these defines conditional on WINVER will break ddk includes */
+#if 1 /* (WINVER >= 0x0500) */
+#include <pshpack4.h>
+
+#define ES_SYSTEM_REQUIRED 0x00000001
+#define ES_DISPLAY_REQUIRED 0x00000002
+#define ES_USER_PRESENT 0x00000004
+#define ES_CONTINUOUS 0x80000000
+
+typedef enum _LATENCY_TIME {
+ LT_DONT_CARE,
+ LT_LOWEST_LATENCY
+} LATENCY_TIME, *PLATENCY_TIME;
+
+typedef enum _SYSTEM_POWER_STATE {
+ PowerSystemUnspecified,
+ PowerSystemWorking,
+ PowerSystemSleeping1,
+ PowerSystemSleeping2,
+ PowerSystemSleeping3,
+ PowerSystemHibernate,
+ PowerSystemShutdown,
+ PowerSystemMaximum
+} SYSTEM_POWER_STATE, *PSYSTEM_POWER_STATE;
+#define POWER_SYSTEM_MAXIMUM PowerSystemMaximum
+
+typedef enum {
+ PowerActionNone,
+ PowerActionReserved,
+ PowerActionSleep,
+ PowerActionHibernate,
+ PowerActionShutdown,
+ PowerActionShutdownReset,
+ PowerActionShutdownOff,
+ PowerActionWarmEject
+} POWER_ACTION, *PPOWER_ACTION;
+
+#if (_WIN32_WINNT >= 0x0600)
+typedef enum {
+ PoAc = 0,
+ PoDc = 1,
+ PoHot = 2,
+ PoConditionMaximum = 3
+} SYSTEM_POWER_CONDITION, *PSYSTEM_POWER_CONDITION;
+#endif
+
+typedef enum _DEVICE_POWER_STATE {
+ PowerDeviceUnspecified,
+ PowerDeviceD0,
+ PowerDeviceD1,
+ PowerDeviceD2,
+ PowerDeviceD3,
+ PowerDeviceMaximum
+} DEVICE_POWER_STATE, *PDEVICE_POWER_STATE;
+
+typedef struct {
+ DWORD Granularity;
+ DWORD Capacity;
+} BATTERY_REPORTING_SCALE, *PBATTERY_REPORTING_SCALE;
+
+typedef struct _POWER_ACTION_POLICY {
+ POWER_ACTION Action;
+ ULONG Flags;
+ ULONG EventCode;
+} POWER_ACTION_POLICY, *PPOWER_ACTION_POLICY;
+
+/* POWER_ACTION_POLICY.Flags constants */
+#define POWER_ACTION_QUERY_ALLOWED 0x00000001
+#define POWER_ACTION_UI_ALLOWED 0x00000002
+#define POWER_ACTION_OVERRIDE_APPS 0x00000004
+#define POWER_ACTION_LIGHTEST_FIRST 0x10000000
+#define POWER_ACTION_LOCK_CONSOLE 0x20000000
+#define POWER_ACTION_DISABLE_WAKES 0x40000000
+#define POWER_ACTION_CRITICAL 0x80000000
+
+/* POWER_ACTION_POLICY.EventCode constants */
+#define POWER_LEVEL_USER_NOTIFY_TEXT 0x00000001
+#define POWER_LEVEL_USER_NOTIFY_SOUND 0x00000002
+#define POWER_LEVEL_USER_NOTIFY_EXEC 0x00000004
+#define POWER_USER_NOTIFY_BUTTON 0x00000008
+#define POWER_USER_NOTIFY_SHUTDOWN 0x00000010
+#define POWER_FORCE_TRIGGER_RESET 0x80000000
+
+#define DISCHARGE_POLICY_CRITICAL 0
+#define DISCHARGE_POLICY_LOW 1
+#define NUM_DISCHARGE_POLICIES 4
+
+#define PO_THROTTLE_NONE 0
+#define PO_THROTTLE_CONSTANT 1
+#define PO_THROTTLE_DEGRADE 2
+#define PO_THROTTLE_ADAPTIVE 3
+#define PO_THROTTLE_MAXIMUM 4
+
+typedef struct _SYSTEM_POWER_LEVEL {
+ BOOLEAN Enable;
+ UCHAR Spare[3];
+ ULONG BatteryLevel;
+ POWER_ACTION_POLICY PowerPolicy;
+ SYSTEM_POWER_STATE MinSystemState;
+} SYSTEM_POWER_LEVEL, *PSYSTEM_POWER_LEVEL;
+
+typedef struct _SYSTEM_POWER_POLICY {
+ ULONG Revision;
+ POWER_ACTION_POLICY PowerButton;
+ POWER_ACTION_POLICY SleepButton;
+ POWER_ACTION_POLICY LidClose;
+ SYSTEM_POWER_STATE LidOpenWake;
+ ULONG Reserved;
+ POWER_ACTION_POLICY Idle;
+ ULONG IdleTimeout;
+ UCHAR IdleSensitivity;
+ UCHAR DynamicThrottle;
+ UCHAR Spare2[2];
+ SYSTEM_POWER_STATE MinSleep;
+ SYSTEM_POWER_STATE MaxSleep;
+ SYSTEM_POWER_STATE ReducedLatencySleep;
+ ULONG WinLogonFlags;
+ ULONG Spare3;
+ ULONG DozeS4Timeout;
+ ULONG BroadcastCapacityResolution;
+ SYSTEM_POWER_LEVEL DischargePolicy[NUM_DISCHARGE_POLICIES];
+ ULONG VideoTimeout;
+ BOOLEAN VideoDimDisplay;
+ ULONG VideoReserved[3];
+ ULONG SpindownTimeout;
+ BOOLEAN OptimizeForPower;
+ UCHAR FanThrottleTolerance;
+ UCHAR ForcedThrottle;
+ UCHAR MinThrottle;
+ POWER_ACTION_POLICY OverThrottled;
+} SYSTEM_POWER_POLICY, *PSYSTEM_POWER_POLICY;
+
+typedef struct _SYSTEM_POWER_CAPABILITIES {
+ BOOLEAN 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;
+ UCHAR ProcessorMinThrottle;
+ UCHAR ProcessorMaxThrottle;
+ UCHAR spare2[4];
+ BOOLEAN DiskSpinDown;
+ UCHAR spare3[8];
+ BOOLEAN SystemBatteriesPresent;
+ BOOLEAN BatteriesAreShortTerm;
+ BATTERY_REPORTING_SCALE BatteryScale[3];
+ SYSTEM_POWER_STATE AcOnLineWake;
+ SYSTEM_POWER_STATE SoftLidWake;
+ SYSTEM_POWER_STATE RtcWake;
+ SYSTEM_POWER_STATE MinDeviceWakeState;
+ SYSTEM_POWER_STATE DefaultLowLatencyWake;
+} SYSTEM_POWER_CAPABILITIES, *PSYSTEM_POWER_CAPABILITIES;
+
+typedef struct _SYSTEM_BATTERY_STATE {
+ BOOLEAN AcOnLine;
+ BOOLEAN BatteryPresent;
+ BOOLEAN Charging;
+ BOOLEAN Discharging;
+ BOOLEAN Spare1[4];
+ ULONG MaxCapacity;
+ ULONG RemainingCapacity;
+ ULONG Rate;
+ ULONG EstimatedTime;
+ ULONG DefaultAlert1;
+ ULONG DefaultAlert2;
+} SYSTEM_BATTERY_STATE, *PSYSTEM_BATTERY_STATE;
+
+typedef 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
+} POWER_INFORMATION_LEVEL;
+
+#if (_WIN32_WINNT >= 0x0500)
+typedef LONG (WINAPI *PVECTORED_EXCEPTION_HANDLER)(PEXCEPTION_POINTERS);
+#endif
+#if 1 /* (WIN32_WINNT >= 0x0500) */
+typedef struct _SYSTEM_POWER_INFORMATION {
+ ULONG MaxIdlenessAllowed;
+ ULONG Idleness;
+ ULONG TimeRemaining;
+ UCHAR CoolingMode;
+} SYSTEM_POWER_INFORMATION,*PSYSTEM_POWER_INFORMATION;
+#endif
+
+#if (_WIN32_WINNT >= 0x0501)
+typedef enum _HEAP_INFORMATION_CLASS {
+ HeapCompatibilityInformation
+} HEAP_INFORMATION_CLASS;
+typedef enum _ACTIVATION_CONTEXT_INFO_CLASS {
+ ActivationContextBasicInformation = 1,
+ ActivationContextDetailedInformation,
+ AssemblyDetailedInformationInActivationContext,
+ FileInformationInAssemblyOfAssemblyInActivationContext
+} ACTIVATION_CONTEXT_INFO_CLASS;
+typedef struct _ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION {
+ DWORD ulFlags;
+ DWORD ulEncodedAssemblyIdentityLength;
+ DWORD ulManifestPathType;
+ DWORD ulManifestPathLength;
+ LARGE_INTEGER liManifestLastWriteTime;
+ DWORD ulPolicyPathType;
+ DWORD ulPolicyPathLength;
+ LARGE_INTEGER liPolicyLastWriteTime;
+ DWORD ulMetadataSatelliteRosterIndex;
+ DWORD ulManifestVersionMajor;
+ DWORD ulManifestVersionMinor;
+ DWORD ulPolicyVersionMajor;
+ DWORD ulPolicyVersionMinor;
+ DWORD ulAssemblyDirectoryNameLength;
+ PCWSTR lpAssemblyEncodedAssemblyIdentity;
+ PCWSTR lpAssemblyManifestPath;
+ PCWSTR lpAssemblyPolicyPath;
+ PCWSTR lpAssemblyDirectoryName;
+} ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION,*PACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION;
+typedef const ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION *PCACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION;
+typedef struct _ACTIVATION_CONTEXT_DETAILED_INFORMATION {
+ DWORD dwFlags;
+ DWORD ulFormatVersion;
+ DWORD ulAssemblyCount;
+ DWORD ulRootManifestPathType;
+ DWORD ulRootManifestPathChars;
+ DWORD ulRootConfigurationPathType;
+ DWORD ulRootConfigurationPathChars;
+ DWORD ulAppDirPathType;
+ DWORD ulAppDirPathChars;
+ PCWSTR lpRootManifestPath;
+ PCWSTR lpRootConfigurationPath;
+ PCWSTR lpAppDirPath;
+} ACTIVATION_CONTEXT_DETAILED_INFORMATION,*PACTIVATION_CONTEXT_DETAILED_INFORMATION;
+typedef const ACTIVATION_CONTEXT_DETAILED_INFORMATION *PCACTIVATION_CONTEXT_DETAILED_INFORMATION;
+typedef struct _ACTIVATION_CONTEXT_QUERY_INDEX {
+ ULONG ulAssemblyIndex;
+ ULONG ulFileIndexInAssembly;
+} ACTIVATION_CONTEXT_QUERY_INDEX,*PACTIVATION_CONTEXT_QUERY_INDEX;
+typedef const ACTIVATION_CONTEXT_QUERY_INDEX *PCACTIVATION_CONTEXT_QUERY_INDEX;
+typedef struct _ASSEMBLY_FILE_DETAILED_INFORMATION {
+ DWORD ulFlags;
+ DWORD ulFilenameLength;
+ DWORD ulPathLength;
+ PCWSTR lpFileName;
+ PCWSTR lpFilePath;
+} ASSEMBLY_FILE_DETAILED_INFORMATION,*PASSEMBLY_FILE_DETAILED_INFORMATION;
+typedef const ASSEMBLY_FILE_DETAILED_INFORMATION *PCASSEMBLY_FILE_DETAILED_INFORMATION;
+#endif /* (WIN32_WINNT >= 0x0501) */
+
+typedef struct _PROCESSOR_POWER_POLICY_INFO {
+ ULONG TimeCheck;
+ ULONG DemoteLimit;
+ ULONG PromoteLimit;
+ UCHAR DemotePercent;
+ UCHAR PromotePercent;
+ UCHAR Spare[2];
+ ULONG AllowDemotion : 1;
+ ULONG AllowPromotion : 1;
+ ULONG Reserved : 30;
+} PROCESSOR_POWER_POLICY_INFO, *PPROCESSOR_POWER_POLICY_INFO;
+typedef struct _PROCESSOR_POWER_POLICY {
+ ULONG Revision;
+ UCHAR DynamicThrottle;
+ UCHAR Spare[3];
+ ULONG Reserved;
+ ULONG PolicyCount;
+ PROCESSOR_POWER_POLICY_INFO Policy[3];
+} PROCESSOR_POWER_POLICY, *PPROCESSOR_POWER_POLICY;
+typedef struct _ADMINISTRATOR_POWER_POLICY {
+ SYSTEM_POWER_STATE MinSleep;
+ SYSTEM_POWER_STATE MaxSleep;
+ ULONG MinVideoTimeout;
+ ULONG MaxVideoTimeout;
+ ULONG MinSpindownTimeout;
+ ULONG MaxSpindownTimeout;
+} ADMINISTRATOR_POWER_POLICY, *PADMINISTRATOR_POWER_POLICY;
+#include <poppack.h>
+#endif /* WINVER >= 0x0500 */
+
+#if (_WIN32_WINNT >= 0x0500)
+typedef VOID (NTAPI *WAITORTIMERCALLBACKFUNC)(PVOID,BOOLEAN);
+#endif
+
+#ifdef UNICODE
+typedef OSVERSIONINFOW OSVERSIONINFO,*POSVERSIONINFO,*LPOSVERSIONINFO;
+typedef OSVERSIONINFOEXW OSVERSIONINFOEX,*POSVERSIONINFOEX,*LPOSVERSIONINFOEX;
+#else
+typedef OSVERSIONINFOA OSVERSIONINFO,*POSVERSIONINFO,*LPOSVERSIONINFO;
+typedef OSVERSIONINFOEXA OSVERSIONINFOEX,*POSVERSIONINFOEX,*LPOSVERSIONINFOEX;
+#endif
+
+#if (_WIN32_WINNT >= 0x0500)
+ULONGLONG WINAPI VerSetConditionMask(ULONGLONG,DWORD,BYTE);
+#define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType) \
+ ((ConditionMask) = VerSetConditionMask((ConditionMask), \
+ (TypeBitMask), (ComparisonType)))
+#endif
+
+#ifdef _X86_
+#if defined(__GNUC__)
+#if (__GNUC__ >= 3)
+/* Support -masm=intel. */
+static __inline__ PVOID GetCurrentFiber(void)
+{
+ void* ret;
+ __asm__ __volatile__ (
+ "mov{l} {%%fs:0x10,%0|%0,%%fs:0x10}"
+ : "=r" (ret) /* allow use of reg eax,ebx,ecx,edx,esi,edi */
+ );
+ return ret;
+}
+
+static __inline__ PVOID GetFiberData(void)
+{
+ void* ret;
+ __asm__ __volatile__ (
+ "mov{l} {%%fs:0x10,%0|%0,%%fs:0x10}\n\t"
+ "mov{l} {(%0),%0|%0,[%0]}"
+ : "=r" (ret) /* allow use of reg eax,ebx,ecx,edx,esi,edi */
+ );
+ return ret;
+}
+
+static __inline__ struct _TEB * NtCurrentTeb(void)
+{
+ struct _TEB *ret;
+
+ __asm__ __volatile__ (
+ "mov{l} {%%fs:0x18,%0|%0,%%fs:0x18}\n"
+ : "=r" (ret)
+ : /* no inputs */
+ );
+
+ return ret;
+}
+
+#else /* __GNUC__ >= 3 */
+static __inline__ PVOID GetCurrentFiber(void)
+{
+ void* ret;
+ __asm__ __volatile__ (
+ "movl %%fs:0x10,%0"
+ : "=r" (ret) /* allow use of reg eax,ebx,ecx,edx,esi,edi */
+ );
+ return ret;
+}
+
+static __inline__ PVOID GetFiberData(void)
+{
+ void* ret;
+ __asm__ __volatile__ (
+ "movl %%fs:0x10,%0\n\t"
+ "movl (%0),%0"
+ : "=r" (ret) /* allow use of reg eax,ebx,ecx,edx,esi,edi */
+ );
+ return ret;
+}
+
+static __inline__ struct _TEB * NtCurrentTeb(void)
+{
+ struct _TEB *ret;
+
+ __asm__ __volatile__ (
+ "movl %%fs:0x18, %0\n"
+ : "=r" (ret)
+ : /* no inputs */
+ );
+ return ret;
+}
+#endif /* __GNUC__ >= 3 */
+
+#else
+
+PVOID GetCurrentFiber(void);
+#pragma aux GetCurrentFiber = \
+ "mov eax, dword ptr fs:0x10" \
+ value [eax] \
+ modify [eax];
+
+PVOID GetFiberData(void);
+#pragma aux GetFiberData = \
+ "mov eax, dword ptr fs:0x10" \
+ "mov eax, [eax]" \
+ value [eax] \
+ modify [eax];
+
+struct _TEB * NtCurrentTeb(void);
+#pragma aux NtCurrentTeb = \
+ "mov eax, dword ptr fs:0x18" \
+ value [eax] \
+ modify [eax];
+
+#endif /* __GNUC__ */
+#endif /* _X86_ */
+
+#endif /* RC_INVOKED */
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/winperf.h b/tcc/include/winapi/winperf.h
new file mode 100644
index 0000000..75e29a8
--- /dev/null
+++ b/tcc/include/winapi/winperf.h
@@ -0,0 +1,139 @@
+#ifndef _WINPERF_H
+#define _WINPERF_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#define PERF_DATA_VERSION 1
+#define PERF_DATA_REVISION 1
+#define PERF_NO_INSTANCES -1
+#define PERF_SIZE_DWORD 0
+#define PERF_SIZE_LARGE 256
+#define PERF_SIZE_ZERO 512
+#define PERF_SIZE_VARIABLE_LEN 768
+#define PERF_TYPE_NUMBER 0
+#define PERF_TYPE_COUNTER 1024
+#define PERF_TYPE_TEXT 2048
+#define PERF_TYPE_ZERO 0xC00
+#define PERF_NUMBER_HEX 0
+#define PERF_NUMBER_DECIMAL 0x10000
+#define PERF_NUMBER_DEC_1000 0x20000
+#define PERF_COUNTER_VALUE 0
+#define PERF_COUNTER_RATE 0x10000
+#define PERF_COUNTER_FRACTION 0x20000
+#define PERF_COUNTER_BASE 0x30000
+#define PERF_COUNTER_ELAPSED 0x40000
+#define PERF_COUNTER_QUEUELEN 0x50000
+#define PERF_COUNTER_HISTOGRAM 0x60000
+#define PERF_TEXT_UNICODE 0
+#define PERF_TEXT_ASCII 0x10000
+#define PERF_TIMER_TICK 0
+#define PERF_TIMER_100NS 0x100000
+#define PERF_OBJECT_TIMER 0x200000
+#define PERF_DELTA_COUNTER 0x400000
+#define PERF_DELTA_BASE 0x800000
+#define PERF_INVERSE_COUNTER 0x1000000
+#define PERF_MULTI_COUNTER 0x2000000
+#define PERF_DISPLAY_NO_SUFFIX 0
+#define PERF_DISPLAY_PER_SEC 0x10000000
+#define PERF_DISPLAY_PERCENT 0x20000000
+#define PERF_DISPLAY_SECONDS 0x30000000
+#define PERF_DISPLAY_NOSHOW 0x40000000
+#define PERF_COUNTER_HISTOGRAM_TYPE 0x80000000
+#define PERF_NO_UNIQUE_ID (-1)
+#define PERF_DETAIL_NOVICE 100
+#define PERF_DETAIL_ADVANCED 200
+#define PERF_DETAIL_EXPERT 300
+#define PERF_DETAIL_WIZARD 400
+#define PERF_COUNTER_COUNTER (PERF_SIZE_DWORD|PERF_TYPE_COUNTER|PERF_COUNTER_RATE|PERF_TIMER_TICK|PERF_DELTA_COUNTER|PERF_DISPLAY_PER_SEC)
+#define PERF_COUNTER_TIMER (PERF_SIZE_LARGE|PERF_TYPE_COUNTER|PERF_COUNTER_RATE|PERF_TIMER_TICK|PERF_DELTA_COUNTER|PERF_DISPLAY_PERCENT)
+#define PERF_COUNTER_QUEUELEN_TYPE (PERF_SIZE_DWORD|PERF_TYPE_COUNTER|PERF_COUNTER_QUEUELEN|PERF_TIMER_TICK|PERF_DELTA_COUNTER|PERF_DISPLAY_NO_SUFFIX)
+#define PERF_COUNTER_BULK_COUNT (PERF_SIZE_LARGE|PERF_TYPE_COUNTER|PERF_COUNTER_RATE|PERF_TIMER_TICK|PERF_DELTA_COUNTER|PERF_DISPLAY_PER_SEC)
+#define PERF_COUNTER_TEXT (PERF_SIZE_VARIABLE_LEN|PERF_TYPE_TEXT|PERF_TEXT_UNICODE|PERF_DISPLAY_NO_SUFFIX)
+#define PERF_COUNTER_RAWCOUNT (PERF_SIZE_DWORD|PERF_TYPE_NUMBER|PERF_NUMBER_DECIMAL|PERF_DISPLAY_NO_SUFFIX)
+#define PERF_COUNTER_LARGE_RAWCOUNT (PERF_SIZE_LARGE|PERF_TYPE_NUMBER|PERF_NUMBER_DECIMAL|PERF_DISPLAY_NO_SUFFIX)
+#define PERF_COUNTER_RAWCOUNT_HEX (PERF_SIZE_DWORD|PERF_TYPE_NUMBER|PERF_NUMBER_HEX|PERF_DISPLAY_NO_SUFFIX)
+#define PERF_COUNTER_LARGE_RAWCOUNT_HEX (PERF_SIZE_LARGE|PERF_TYPE_NUMBER|PERF_NUMBER_HEX|PERF_DISPLAY_NO_SUFFIX)
+#define PERF_SAMPLE_FRACTION (PERF_SIZE_DWORD|PERF_TYPE_COUNTER|PERF_COUNTER_FRACTION|PERF_DELTA_COUNTER|PERF_DELTA_BASE|PERF_DISPLAY_PERCENT)
+#define PERF_SAMPLE_COUNTER (PERF_SIZE_DWORD|PERF_TYPE_COUNTER|PERF_COUNTER_RATE|PERF_TIMER_TICK|PERF_DELTA_COUNTER|PERF_DISPLAY_NO_SUFFIX)
+#define PERF_COUNTER_NODATA (PERF_SIZE_ZERO|PERF_DISPLAY_NOSHOW)
+#define PERF_COUNTER_TIMER_INV (PERF_SIZE_LARGE|PERF_TYPE_COUNTER|PERF_COUNTER_RATE|PERF_TIMER_TICK|PERF_DELTA_COUNTER|PERF_INVERSE_COUNTER|PERF_DISPLAY_PERCENT)
+#define PERF_SAMPLE_BASE (PERF_SIZE_DWORD|PERF_TYPE_COUNTER|PERF_COUNTER_BASE|PERF_DISPLAY_NOSHOW|1)
+#define PERF_AVERAGE_TIMER (PERF_SIZE_DWORD|PERF_TYPE_COUNTER|PERF_COUNTER_FRACTION|PERF_DISPLAY_SECONDS)
+#define PERF_AVERAGE_BASE (PERF_SIZE_DWORD|PERF_TYPE_COUNTER|PERF_COUNTER_BASE|PERF_DISPLAY_NOSHOW|2)
+#define PERF_AVERAGE_BULK (PERF_SIZE_LARGE|PERF_TYPE_COUNTER|PERF_COUNTER_FRACTION|PERF_DISPLAY_NOSHOW)
+#define PERF_100NSEC_TIMER (PERF_SIZE_LARGE|PERF_TYPE_COUNTER|PERF_COUNTER_RATE|PERF_TIMER_100NS|PERF_DELTA_COUNTER|PERF_DISPLAY_PERCENT)
+#define PERF_100NSEC_TIMER_INV (PERF_SIZE_LARGE|PERF_TYPE_COUNTER|PERF_COUNTER_RATE|PERF_TIMER_100NS|PERF_DELTA_COUNTER|PERF_INVERSE_COUNTER|PERF_DISPLAY_PERCENT)
+#define PERF_COUNTER_MULTI_TIMER (PERF_SIZE_LARGE|PERF_TYPE_COUNTER|PERF_COUNTER_RATE|PERF_DELTA_COUNTER|PERF_TIMER_TICK|PERF_MULTI_COUNTER|PERF_DISPLAY_PERCENT)
+#define PERF_COUNTER_MULTI_TIMER_INV (PERF_SIZE_LARGE|PERF_TYPE_COUNTER|PERF_COUNTER_RATE|PERF_DELTA_COUNTER|PERF_MULTI_COUNTER|PERF_TIMER_TICK|PERF_INVERSE_COUNTER|PERF_DISPLAY_PERCENT)
+#define PERF_COUNTER_MULTI_BASE (PERF_SIZE_LARGE|PERF_TYPE_COUNTER|PERF_COUNTER_BASE|PERF_MULTI_COUNTER|PERF_DISPLAY_NOSHOW)
+#define PERF_100NSEC_MULTI_TIMER (PERF_SIZE_LARGE|PERF_TYPE_COUNTER|PERF_DELTA_COUNTER|PERF_COUNTER_RATE|PERF_TIMER_100NS|PERF_MULTI_COUNTER|PERF_DISPLAY_PERCENT)
+#define PERF_100NSEC_MULTI_TIMER_INV (PERF_SIZE_LARGE|PERF_TYPE_COUNTER|PERF_DELTA_COUNTER|PERF_COUNTER_RATE|PERF_TIMER_100NS|PERF_MULTI_COUNTER|PERF_INVERSE_COUNTER|PERF_DISPLAY_PERCENT)
+#define PERF_RAW_FRACTION (PERF_SIZE_DWORD|PERF_TYPE_COUNTER|PERF_COUNTER_FRACTION|PERF_DISPLAY_PERCENT)
+#define PERF_RAW_BASE (PERF_SIZE_DWORD|PERF_TYPE_COUNTER|PERF_COUNTER_BASE|PERF_DISPLAY_NOSHOW|3)
+#define PERF_ELAPSED_TIME (PERF_SIZE_LARGE|PERF_TYPE_COUNTER|PERF_COUNTER_ELAPSED|PERF_OBJECT_TIMER|PERF_DISPLAY_SECONDS)
+typedef struct _PERF_DATA_BLOCK {
+ WCHAR Signature[4];
+ DWORD LittleEndian;
+ DWORD Version;
+ DWORD Revision;
+ DWORD TotalByteLength;
+ DWORD HeaderLength;
+ DWORD NumObjectTypes;
+ LONG DefaultObject;
+ SYSTEMTIME SystemTime;
+ LARGE_INTEGER PerfTime;
+ LARGE_INTEGER PerfFreq;
+ LARGE_INTEGER PerfTime100nSec;
+ DWORD SystemNameLength;
+ DWORD SystemNameOffset;
+} PERF_DATA_BLOCK, *PPERF_DATA_BLOCK;
+typedef struct _PERF_OBJECT_TYPE {
+ DWORD TotalByteLength;
+ DWORD DefinitionLength;
+ DWORD HeaderLength;
+ DWORD ObjectNameTitleIndex;
+ LPWSTR ObjectNameTitle;
+ DWORD ObjectHelpTitleIndex;
+ LPWSTR ObjectHelpTitle;
+ DWORD DetailLevel;
+ DWORD NumCounters;
+ LONG DefaultCounter;
+ LONG NumInstances;
+ DWORD CodePage;
+ LARGE_INTEGER PerfTime;
+ LARGE_INTEGER PerfFreq;
+} PERF_OBJECT_TYPE, *PPERF_OBJECT_TYPE;
+typedef struct _PERF_COUNTER_DEFINITION {
+ DWORD ByteLength;
+ DWORD CounterNameTitleIndex;
+ LPWSTR CounterNameTitle;
+ DWORD CounterHelpTitleIndex;
+ LPWSTR CounterHelpTitle;
+ LONG DefaultScale;
+ DWORD DetailLevel;
+ DWORD CounterType;
+ DWORD CounterSize;
+ DWORD CounterOffset;
+} PERF_COUNTER_DEFINITION,*PPERF_COUNTER_DEFINITION;
+typedef struct _PERF_INSTANCE_DEFINITION {
+ DWORD ByteLength;
+ DWORD ParentObjectTitleIndex;
+ DWORD ParentObjectInstance;
+ LONG UniqueID;
+ DWORD NameOffset;
+ DWORD NameLength;
+} PERF_INSTANCE_DEFINITION,*PPERF_INSTANCE_DEFINITION;
+typedef struct _PERF_COUNTER_BLOCK {
+ DWORD ByteLength;
+} PERF_COUNTER_BLOCK, *PPERF_COUNTER_BLOCK;
+typedef DWORD(CALLBACK PM_OPEN_PROC)(LPWSTR);
+typedef DWORD(CALLBACK PM_COLLECT_PROC)(LPWSTR,PVOID*,PDWORD,PDWORD);
+typedef DWORD(CALLBACK PM_CLOSE_PROC)(void);
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/winreg.h b/tcc/include/winapi/winreg.h
new file mode 100644
index 0000000..81aebba
--- /dev/null
+++ b/tcc/include/winapi/winreg.h
@@ -0,0 +1,175 @@
+#ifndef _WINREG_H
+#define _WINREG_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifndef WINADVAPI
+#define WINADVAPI
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#define HKEY_CLASSES_ROOT ((HKEY)0x80000000)
+#define HKEY_CURRENT_USER ((HKEY)0x80000001)
+#define HKEY_LOCAL_MACHINE ((HKEY)0x80000002)
+#define HKEY_USERS ((HKEY)0x80000003)
+#define HKEY_PERFORMANCE_DATA ((HKEY)0x80000004)
+#define HKEY_CURRENT_CONFIG ((HKEY)0x80000005)
+#define HKEY_DYN_DATA ((HKEY)0x80000006)
+#define REG_OPTION_VOLATILE 1
+#define REG_OPTION_NON_VOLATILE 0
+#define REG_CREATED_NEW_KEY 1
+#define REG_OPENED_EXISTING_KEY 2
+#define REG_NONE 0
+#define REG_SZ 1
+#define REG_EXPAND_SZ 2
+#define REG_BINARY 3
+#define REG_DWORD_LITTLE_ENDIAN 4
+#define REG_DWORD 4
+#define REG_DWORD_BIG_ENDIAN 5
+#define REG_LINK 6
+#define REG_MULTI_SZ 7
+#define REG_RESOURCE_LIST 8
+#define REG_FULL_RESOURCE_DESCRIPTOR 9
+#define REG_RESOURCE_REQUIREMENTS_LIST 10
+#define REG_QWORD_LITTLE_ENDIAN 11
+#define REG_QWORD 11
+#define REG_NOTIFY_CHANGE_NAME 1
+#define REG_NOTIFY_CHANGE_ATTRIBUTES 2
+#define REG_NOTIFY_CHANGE_LAST_SET 4
+#define REG_NOTIFY_CHANGE_SECURITY 8
+
+#ifndef RC_INVOKED
+typedef ACCESS_MASK REGSAM;
+typedef struct value_entA {
+ LPSTR ve_valuename;
+ DWORD ve_valuelen;
+ DWORD ve_valueptr;
+ DWORD ve_type;
+} VALENTA,*PVALENTA;
+typedef struct value_entW {
+ LPWSTR ve_valuename;
+ DWORD ve_valuelen;
+ DWORD ve_valueptr;
+ DWORD ve_type;
+} VALENTW,*PVALENTW;
+WINADVAPI BOOL WINAPI AbortSystemShutdownA(LPCSTR);
+WINADVAPI BOOL WINAPI AbortSystemShutdownW(LPCWSTR);
+WINADVAPI BOOL WINAPI InitiateSystemShutdownA(LPSTR,LPSTR,DWORD,BOOL,BOOL);
+WINADVAPI BOOL WINAPI InitiateSystemShutdownW(LPWSTR,LPWSTR,DWORD,BOOL,BOOL);
+WINADVAPI LONG WINAPI RegCloseKey(HKEY);
+WINADVAPI LONG WINAPI RegConnectRegistryA(LPCSTR,HKEY,PHKEY);
+WINADVAPI LONG WINAPI RegConnectRegistryW(LPCWSTR,HKEY,PHKEY);
+WINADVAPI LONG WINAPI RegCreateKeyA(HKEY,LPCSTR,PHKEY);
+WINADVAPI LONG WINAPI RegCreateKeyExA(HKEY,LPCSTR,DWORD,LPSTR,DWORD,REGSAM,LPSECURITY_ATTRIBUTES,PHKEY,PDWORD);
+WINADVAPI LONG WINAPI RegCreateKeyExW(HKEY,LPCWSTR,DWORD,LPWSTR,DWORD,REGSAM,LPSECURITY_ATTRIBUTES,PHKEY,PDWORD);
+WINADVAPI LONG WINAPI RegCreateKeyW(HKEY,LPCWSTR,PHKEY);
+WINADVAPI LONG WINAPI RegDeleteKeyA(HKEY,LPCSTR);
+WINADVAPI LONG WINAPI RegDeleteKeyW(HKEY,LPCWSTR);
+#if (WINVER >= 0x0502)
+WINADVAPI LONG WINAPI RegDeleteKeyExA(HKEY,LPCSTR,REGSAM,DWORD);
+WINADVAPI LONG WINAPI RegDeleteKeyExW(HKEY,LPCWSTR,REGSAM,DWORD);
+#endif
+WINADVAPI LONG WINAPI RegDeleteValueA(HKEY,LPCSTR);
+WINADVAPI LONG WINAPI RegDeleteValueW(HKEY,LPCWSTR);
+WINADVAPI LONG WINAPI RegEnumKeyA(HKEY,DWORD,LPSTR,DWORD);
+WINADVAPI LONG WINAPI RegEnumKeyW(HKEY,DWORD,LPWSTR,DWORD);
+WINADVAPI LONG WINAPI RegEnumKeyExA(HKEY,DWORD,LPSTR,PDWORD,PDWORD,LPSTR,PDWORD,PFILETIME);
+WINADVAPI LONG WINAPI RegEnumKeyExW(HKEY,DWORD,LPWSTR,PDWORD,PDWORD,LPWSTR,PDWORD,PFILETIME);
+WINADVAPI LONG WINAPI RegEnumValueA(HKEY,DWORD,LPSTR,PDWORD,PDWORD,PDWORD,LPBYTE,PDWORD);
+WINADVAPI LONG WINAPI RegEnumValueW(HKEY,DWORD,LPWSTR,PDWORD,PDWORD,PDWORD,LPBYTE,PDWORD);
+WINADVAPI LONG WINAPI RegFlushKey(HKEY);
+WINADVAPI LONG WINAPI RegGetKeySecurity(HKEY,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,PDWORD);
+WINADVAPI LONG WINAPI RegLoadKeyA(HKEY,LPCSTR,LPCSTR);
+WINADVAPI LONG WINAPI RegLoadKeyW(HKEY,LPCWSTR,LPCWSTR);
+WINADVAPI LONG WINAPI RegNotifyChangeKeyValue(HKEY,BOOL,DWORD,HANDLE,BOOL);
+WINADVAPI LONG WINAPI RegOpenKeyA(HKEY,LPCSTR,PHKEY);
+WINADVAPI LONG WINAPI RegOpenKeyExA(HKEY,LPCSTR,DWORD,REGSAM,PHKEY);
+WINADVAPI LONG WINAPI RegOpenKeyExW(HKEY,LPCWSTR,DWORD,REGSAM,PHKEY);
+WINADVAPI LONG WINAPI RegOpenKeyW(HKEY,LPCWSTR,PHKEY);
+WINADVAPI LONG WINAPI RegQueryInfoKeyA(HKEY,LPSTR,PDWORD,PDWORD,PDWORD,PDWORD,PDWORD,PDWORD,PDWORD,PDWORD,PDWORD,PFILETIME);
+WINADVAPI LONG WINAPI RegQueryInfoKeyW(HKEY,LPWSTR,PDWORD,PDWORD,PDWORD,PDWORD,PDWORD,PDWORD,PDWORD,PDWORD,PDWORD,PFILETIME);
+WINADVAPI LONG WINAPI RegQueryMultipleValuesA(HKEY,PVALENTA,DWORD,LPSTR,LPDWORD);
+WINADVAPI LONG WINAPI RegQueryMultipleValuesW(HKEY,PVALENTW,DWORD,LPWSTR,LPDWORD);
+WINADVAPI LONG WINAPI RegQueryValueA(HKEY,LPCSTR,LPSTR,PLONG);
+WINADVAPI LONG WINAPI RegQueryValueExA(HKEY,LPCSTR,LPDWORD,LPDWORD,LPBYTE,LPDWORD);
+WINADVAPI LONG WINAPI RegQueryValueExW(HKEY,LPCWSTR,LPDWORD,LPDWORD,LPBYTE,LPDWORD);
+WINADVAPI LONG WINAPI RegQueryValueW(HKEY,LPCWSTR,LPWSTR,PLONG);
+WINADVAPI LONG WINAPI RegReplaceKeyA(HKEY,LPCSTR,LPCSTR,LPCSTR);
+WINADVAPI LONG WINAPI RegReplaceKeyW(HKEY,LPCWSTR,LPCWSTR,LPCWSTR);
+WINADVAPI LONG WINAPI RegRestoreKeyA(HKEY,LPCSTR,DWORD);
+WINADVAPI LONG WINAPI RegRestoreKeyW(HKEY,LPCWSTR,DWORD);
+WINADVAPI LONG WINAPI RegSaveKeyA(HKEY,LPCSTR,LPSECURITY_ATTRIBUTES);
+WINADVAPI LONG WINAPI RegSaveKeyW(HKEY,LPCWSTR,LPSECURITY_ATTRIBUTES);
+WINADVAPI LONG WINAPI RegSetKeySecurity(HKEY,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR);
+WINADVAPI LONG WINAPI RegSetValueA(HKEY,LPCSTR,DWORD,LPCSTR,DWORD);
+WINADVAPI LONG WINAPI RegSetValueExA(HKEY,LPCSTR,DWORD,DWORD,const BYTE*,DWORD);
+WINADVAPI LONG WINAPI RegSetValueExW(HKEY,LPCWSTR,DWORD,DWORD,const BYTE*,DWORD);
+WINADVAPI LONG WINAPI RegSetValueW(HKEY,LPCWSTR,DWORD,LPCWSTR,DWORD);
+WINADVAPI LONG WINAPI RegUnLoadKeyA(HKEY,LPCSTR);
+WINADVAPI LONG WINAPI RegUnLoadKeyW(HKEY,LPCWSTR);
+
+#ifdef UNICODE
+typedef VALENTW VALENT,*PVALENT;
+#define AbortSystemShutdown AbortSystemShutdownW
+#define InitiateSystemShutdown InitiateSystemShutdownW
+#define RegConnectRegistry RegConnectRegistryW
+#define RegCreateKey RegCreateKeyW
+#define RegCreateKeyEx RegCreateKeyExW
+#define RegDeleteKey RegDeleteKeyW
+#if (WINVER >= 0x0502)
+#define RegDeleteKeyEx RegDeleteKeyExW
+#endif
+#define RegDeleteValue RegDeleteValueW
+#define RegEnumKey RegEnumKeyW
+#define RegEnumKeyEx RegEnumKeyExW
+#define RegEnumValue RegEnumValueW
+#define RegLoadKey RegLoadKeyW
+#define RegOpenKey RegOpenKeyW
+#define RegOpenKeyEx RegOpenKeyExW
+#define RegQueryInfoKey RegQueryInfoKeyW
+#define RegQueryMultipleValues RegQueryMultipleValuesW
+#define RegQueryValue RegQueryValueW
+#define RegQueryValueEx RegQueryValueExW
+#define RegReplaceKey RegReplaceKeyW
+#define RegRestoreKey RegRestoreKeyW
+#define RegSaveKey RegSaveKeyW
+#define RegSetValue RegSetValueW
+#define RegSetValueEx RegSetValueExW
+#define RegUnLoadKey RegUnLoadKeyW
+#else
+typedef VALENTA VALENT,*PVALENT;
+#define AbortSystemShutdown AbortSystemShutdownA
+#define InitiateSystemShutdown InitiateSystemShutdownA
+#define RegConnectRegistry RegConnectRegistryA
+#define RegCreateKey RegCreateKeyA
+#define RegCreateKeyEx RegCreateKeyExA
+#define RegDeleteKey RegDeleteKeyA
+#if (WINVER >= 0x0502)
+#define RegDeleteKeyEx RegDeleteKeyExA
+#endif
+#define RegDeleteValue RegDeleteValueA
+#define RegEnumKey RegEnumKeyA
+#define RegEnumKeyEx RegEnumKeyExA
+#define RegEnumValue RegEnumValueA
+#define RegLoadKey RegLoadKeyA
+#define RegOpenKey RegOpenKeyA
+#define RegOpenKeyEx RegOpenKeyExA
+#define RegQueryInfoKey RegQueryInfoKeyA
+#define RegQueryMultipleValues RegQueryMultipleValuesA
+#define RegQueryValue RegQueryValueA
+#define RegQueryValueEx RegQueryValueExA
+#define RegReplaceKey RegReplaceKeyA
+#define RegRestoreKey RegRestoreKeyA
+#define RegSaveKey RegSaveKeyA
+#define RegSetValue RegSetValueA
+#define RegSetValueEx RegSetValueExA
+#define RegUnLoadKey RegUnLoadKeyA
+#endif
+#endif
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/winresrc.h b/tcc/include/winapi/winresrc.h
new file mode 100644
index 0000000..79a5d8e
--- /dev/null
+++ b/tcc/include/winapi/winresrc.h
@@ -0,0 +1,14 @@
+#ifndef _WINRESRC_H
+#define _WINRESRC_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#define WIN32_LEAN_AND_MEAN
+#include <winuser.h>
+#include <winnt.h>
+#include <winver.h>
+#include <dde.h>
+#include <dlgs.h>
+#include <commctrl.h>
+#endif
diff --git a/tcc/include/winapi/winsnmp.h b/tcc/include/winapi/winsnmp.h
new file mode 100644
index 0000000..bfed386
--- /dev/null
+++ b/tcc/include/winapi/winsnmp.h
@@ -0,0 +1,329 @@
+/*
+ winsnmp.h - Header file for the Windows SNMP API
+
+ Written by Filip Navara <xnavara@volny.cz>
+
+ References (2003-08-25):
+ Windows SNMP
+ http://www.winsnmp.com/docs/winsnmp.doc
+
+ WinSNMP v2.0 Addendum
+ http://www.winsnmp.com/docs/winsnmp2.txt
+
+ WinSNMP v3.0 API Addendum
+ http://www.winsnmp.com/docs/winsnmp3.htm
+
+ WinSNMP Reference
+ http://msdn.microsoft.com/library/en-us/snmp/snmp/winsnmp_api_reference.asp
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+*/
+
+#ifndef _WINSNMP_H
+#define _WINSNMP_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifndef _WINDOWS_H
+#include <windows.h>
+#endif
+
+#include <pshpack4.h>
+
+#ifndef WINSNMPAPI
+#define WINSNMPAPI WINAPI
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define MAXOBJIDSIZE 128
+#define MAXOBJIDSTRSIZE 1408
+#define MAXVENDORINFO 32
+#ifndef _SNMP_ASN_DEFINED
+#define _SNMP_ASN_DEFINED
+#define ASN_UNIVERSAL 0x00
+#define ASN_PRIMITIVE 0x00
+#define ASN_CONSTRUCTOR 0x20
+#define ASN_APPLICATION 0x40
+#define ASN_CONTEXT 0x80
+#define ASN_PRIVATE 0xC0
+#define SNMP_PDU_GET (ASN_CONTEXT | ASN_CONSTRUCTOR | 0)
+#define SNMP_PDU_GETNEXT (ASN_CONTEXT | ASN_CONSTRUCTOR | 1)
+#define SNMP_PDU_RESPONSE (ASN_CONTEXT | ASN_CONSTRUCTOR | 2)
+#define SNMP_PDU_SET (ASN_CONTEXT | ASN_CONSTRUCTOR | 3)
+#define SNMP_PDU_GETBULK (ASN_CONTEXT | ASN_CONSTRUCTOR | 4)
+#define SNMP_PDU_V1TRAP (ASN_CONTEXT | ASN_CONSTRUCTOR | 4)
+#define SNMP_PDU_INFORM (ASN_CONTEXT | ASN_CONSTRUCTOR | 6)
+#define SNMP_PDU_TRAP (ASN_CONTEXT | ASN_CONSTRUCTOR | 7)
+#define SNMP_PDU_REPORT (ASN_CONTEXT | ASN_CONSTRUCTOR | 8)
+#endif /* _SNMP_ASN_DEFINED */
+#define SNMP_SYNTAX_SEQUENCE (ASN_UNIVERSAL | ASN_CONSTRUCTOR | 0x10)
+#define SNMP_SYNTAX_INT (ASN_UNIVERSAL | ASN_PRIMITIVE | 0x02)
+#define SNMP_SYNTAX_BITS (ASN_UNIVERSAL | ASN_PRIMITIVE | 0x03)
+#define SNMP_SYNTAX_OCTETS (ASN_UNIVERSAL | ASN_PRIMITIVE | 0x04)
+#define SNMP_SYNTAX_NULL (ASN_UNIVERSAL | ASN_PRIMITIVE | 0x05)
+#define SNMP_SYNTAX_OID (ASN_UNIVERSAL | ASN_PRIMITIVE | 0x06)
+#define SNMP_SYNTAX_IPADDR (ASN_APPLICATION | ASN_PRIMITIVE | 0x00)
+#define SNMP_SYNTAX_CNTR32 (ASN_APPLICATION | ASN_PRIMITIVE | 0x01)
+#define SNMP_SYNTAX_GAUGE32 (ASN_APPLICATION | ASN_PRIMITIVE | 0x02)
+#define SNMP_SYNTAX_TIMETICKS (ASN_APPLICATION | ASN_PRIMITIVE | 0x03)
+#define SNMP_SYNTAX_OPAQUE (ASN_APPLICATION | ASN_PRIMITIVE | 0x04)
+#define SNMP_SYNTAX_NSAPADDR (ASN_APPLICATION | ASN_PRIMITIVE | 0x05)
+#define SNMP_SYNTAX_CNTR64 (ASN_APPLICATION | ASN_PRIMITIVE | 0x06)
+#define SNMP_SYNTAX_UINT32 (ASN_APPLICATION | ASN_PRIMITIVE | 0x07)
+#define SNMP_SYNTAX_NOSUCHOBJECT (ASN_CONTEXT | ASN_PRIMITIVE | 0x00)
+#define SNMP_SYNTAX_NOSUCHINSTANCE (ASN_CONTEXT | ASN_PRIMITIVE | 0x01)
+#define SNMP_SYNTAX_ENDOFMIBVIEW (ASN_CONTEXT | ASN_PRIMITIVE | 0x02)
+#define SNMP_SYNTAX_INT32 SNMP_SYNTAX_INT
+#define SNMP_TRAP_COLDSTART 0
+#define SNMP_TRAP_WARMSTART 1
+#define SNMP_TRAP_LINKDOWN 2
+#define SNMP_TRAP_LINKUP 3
+#define SNMP_TRAP_AUTHFAIL 4
+#define SNMP_TRAP_EGPNEIGHBORLOSS 5
+#define SNMP_TRAP_ENTERPRISESPECIFIC 6
+#define SNMP_ERROR_NOERROR 0
+#define SNMP_ERROR_TOOBIG 1
+#define SNMP_ERROR_NOSUCHNAME 2
+#define SNMP_ERROR_BADVALUE 3
+#define SNMP_ERROR_READONLY 4
+#define SNMP_ERROR_GENERR 5
+#define SNMP_ERROR_NOACCESS 6
+#define SNMP_ERROR_WRONGTYPE 7
+#define SNMP_ERROR_WRONGLENGTH 8
+#define SNMP_ERROR_WRONGENCODING 9
+#define SNMP_ERROR_WRONGVALUE 10
+#define SNMP_ERROR_NOCREATION 11
+#define SNMP_ERROR_INCONSISTENTVALUE 12
+#define SNMP_ERROR_RESOURCEUNAVAILABLE 13
+#define SNMP_ERROR_COMMITFAILED 14
+#define SNMP_ERROR_UNDOFAILED 15
+#define SNMP_ERROR_AUTHORIZATIONERROR 16
+#define SNMP_ERROR_NOTWRITABLE 17
+#define SNMP_ERROR_INCONSISTENTNAME 18
+#define SNMP_SEC_MODEL_V1 1
+#define SNMP_SEC_MODEL_V2 2
+#define SNMP_SEC_MODEL_USM 3
+#define SNMP_NOAUTH_NOPRIV 0
+#define SNMP_AUTH_NOPRIV 1
+#define SNMP_AUTH_PRIV 3
+#define SNMP_USM_NO_AUTH_PROTOCOL 1
+#define SNMP_USM_HMACMD5_AUTH_PROTOCOL 2
+#define SNMP_USM_HMACSHA_AUTH_PROTOCOL 3
+#define SNMP_USM_NO_PRIV_PROTOCOL 1
+#define SNMP_USM_DES_PRIV_PROTOCOL 2
+#define SNMPAPI_TRANSLATED 0
+#define SNMPAPI_UNTRANSLATED_V1 1
+#define SNMPAPI_UNTRANSLATED_V2 2
+#define SNMPAPI_UNTRANSLATED_V3 3
+#define SNMPAPI_OFF 0
+#define SNMPAPI_ON 1
+#define SNMPAPI_FAILURE 0
+#define SNMPAPI_SUCCESS 1
+#define SNMPAPI_NO_SUPPORT 0
+#define SNMPAPI_V1_SUPPORT 1
+#define SNMPAPI_V2_SUPPORT 2
+#define SNMPAPI_M2M_SUPPORT 3
+#define SNMPAPI_V3_SUPPORT 3
+#define SNMPAPI_ALLOC_ERROR 2
+#define SNMPAPI_CONTEXT_INVALID 3
+#define SNMPAPI_CONTEXT_UNKNOWN 4
+#define SNMPAPI_ENTITY_INVALID 5
+#define SNMPAPI_ENTITY_UNKNOWN 6
+#define SNMPAPI_INDEX_INVALID 7
+#define SNMPAPI_NOOP 8
+#define SNMPAPI_OID_INVALID 9
+#define SNMPAPI_OPERATION_INVALID 10
+#define SNMPAPI_OUTPUT_TRUNCATED 11
+#define SNMPAPI_PDU_INVALID 12
+#define SNMPAPI_SESSION_INVALID 13
+#define SNMPAPI_SYNTAX_INVALID 14
+#define SNMPAPI_VBL_INVALID 15
+#define SNMPAPI_MODE_INVALID 16
+#define SNMPAPI_SIZE_INVALID 17
+#define SNMPAPI_NOT_INITIALIZED 18
+#define SNMPAPI_MESSAGE_INVALID 19
+#define SNMPAPI_HWND_INVALID 20
+#define SNMPAPI_ENGINE_INVALID 30
+#define SNMPAPI_ENGINE_DISCOVERY_FAILED 31
+#define SNMPAPI_OTHER_ERROR 99
+#define SNMPAPI_TL_NOT_INITIALIZED 100
+#define SNMPAPI_TL_NOT_SUPPORTED 101
+#define SNMPAPI_TL_NOT_AVAILABLE 102
+#define SNMPAPI_TL_RESOURCE_ERROR 103
+#define SNMPAPI_TL_UNDELIVERABLE 104
+#define SNMPAPI_TL_SRC_INVALID 105
+#define SNMPAPI_TL_INVALID_PARAM 106
+#define SNMPAPI_TL_IN_USE 107
+#define SNMPAPI_TL_TIMEOUT 108
+#define SNMPAPI_TL_PDU_TOO_BIG 109
+#define SNMPAPI_TL_OTHER 199
+#define SNMPAPI_RPT_INVALIDMSG 200
+#define SNMPAPI_RPT_INASNPARSEERR 201
+#define SNMPAPI_RPT_UNKNOWNSECMODEL 202
+#define SNMPAPI_RPT_UNKNOWNENGINEID 203
+#define SNMPAPI_RPT_UNSUPPSECLEVEL 204
+#define SNMPAPI_RPT_UNKNOWNUSERNAME 205
+#define SNMPAPI_RPT_WRONGDIGEST 206
+#define SNMPAPI_RPT_NOTINTIMEWINDOW 207
+#define SNMPAPI_RPT_DECRYPTIONERROR 208
+#define SNMPAPI_RPT_OTHER 299
+
+#ifndef RC_INVOKED
+
+typedef HANDLE HSNMP_SESSION, *LPHSNMP_SESSION;
+typedef HANDLE HSNMP_CONTEXT, *LPHSNMP_CONTEXT;
+typedef HANDLE HSNMP_VBL, *LPHSNMP_VBL;
+typedef HANDLE HSNMP_PDU, *LPHSNMP_PDU;
+typedef HANDLE HSNMP_ENTITY, *LPHSNMP_ENTITY;
+typedef unsigned char smiBYTE, *smiLPBYTE;
+typedef signed int smiINT, *smiLPINT;
+typedef signed int smiINT32, *smiLPINT32;
+typedef unsigned int smiUINT32, *smiLPUINT32;
+typedef smiUINT32 smiCNTR32, *smiLPCNTR32;
+typedef smiUINT32 smiGAUGE32, *smiLPGAUGE32;
+typedef smiUINT32 smiTIMETICKS, *smiLPTIMETICKS;
+typedef smiUINT32 SNMPAPI_STATUS;
+typedef struct {
+ smiUINT32 len;
+ smiLPBYTE ptr;
+} smiOCTETS, *smiLPOCTETS, smiOPAQUE, *smiLPOPAQUE, smiBITS, *smiLPBITS, smiIPADDR, *smiLPIPADDR, smiNSAPADDR, *smiLPNSAPADDR;
+typedef const smiLPOCTETS smiLPCOCTETS;
+typedef struct {
+ smiUINT32 len;
+ smiLPUINT32 ptr;
+} smiOID, *smiLPOID;
+typedef const smiLPOID smiLPCOID;
+typedef struct {
+ smiUINT32 hipart;
+ smiUINT32 lopart;
+} smiCNTR64, *smiLPCNTR64;
+typedef struct {
+ smiUINT32 syntax;
+ union {
+ smiINT sNumber;
+ smiUINT32 uNumber;
+ smiCNTR64 hNumber;
+ smiOCTETS string;
+ smiOID oid;
+ smiBYTE empty;
+ } value;
+} smiVALUE, *smiLPVALUE;
+typedef const smiLPVALUE smiLPCVALUE;
+typedef struct {
+ CHAR vendorName[MAXVENDORINFO*2];
+ CHAR vendorContact[MAXVENDORINFO*2];
+ CHAR vendorVersionId[MAXVENDORINFO];
+ CHAR vendorVersionDate[MAXVENDORINFO];
+ smiUINT32 vendorEnterprise;
+} smiVENDORINFO, FAR *smiLPVENDORINFO;
+typedef SNMPAPI_STATUS (CALLBACK *SNMPAPI_CALLBACK)(HSNMP_SESSION,HWND,UINT,WPARAM,LPARAM,LPVOID);
+typedef struct
+{
+ HSNMP_ENTITY hEntity;
+ HSNMP_SESSION hSession;
+ smiUINT32 nTranslateMode;
+ smiUINT32 nSnmpVersion;
+ smiOCTETS dFriendlyName;
+ smiUINT32 nAddressFamily;
+ smiOCTETS dAddressString;
+ smiUINT32 nRequestPort;
+ smiUINT32 nNotificationPort;
+ smiUINT32 nMaxMsgSize;
+ smiOCTETS dEngineID;
+ smiUINT32 nEngineBoots;
+ smiUINT32 nEngineTime;
+ smiUINT32 nEngineSeconds;
+ smiUINT32 nRetransmitMode;
+ smiTIMETICKS nPolicyTimeout;
+ smiUINT32 nPolicyRetry;
+ smiTIMETICKS nActualTimeout;
+ smiUINT32 nActualRetry;
+} smiENTITYINFO, *smiLPENTITYINFO;
+typedef struct
+{
+ HSNMP_CONTEXT hContext;
+ HSNMP_SESSION hSession;
+ smiUINT32 nTranslateMode;
+ smiUINT32 nSnmpVersion;
+ smiOCTETS dFriendlyName;
+ smiOCTETS dContextEngineID;
+ smiOCTETS dContextName;
+ smiOCTETS dSecurityName;
+ smiUINT32 nSecurityModel;
+ smiUINT32 nSecurityLevel;
+ smiUINT32 nSecurityAuthProtocol;
+ smiOCTETS dSecurityAuthKey;
+ smiUINT32 nSecurityPrivProtocol;
+ smiOCTETS dSecurityPrivKey;
+} smiCONTEXTINFO, *smiLPCONTEXTINFO;
+
+SNMPAPI_STATUS WINSNMPAPI SnmpCancelMsg(HSNMP_SESSION,smiINT32);
+SNMPAPI_STATUS WINSNMPAPI SnmpCleanup(VOID);
+SNMPAPI_STATUS WINSNMPAPI SnmpClose(HSNMP_SESSION);
+SNMPAPI_STATUS WINSNMPAPI SnmpContextToStr(HSNMP_CONTEXT,smiLPOCTETS);
+SNMPAPI_STATUS WINSNMPAPI SnmpCountVbl(HSNMP_VBL);
+HSNMP_PDU WINSNMPAPI SnmpCreatePdu(HSNMP_SESSION,smiINT,smiINT32,smiINT,smiINT,HSNMP_VBL);
+HSNMP_SESSION WINSNMPAPI SnmpCreateSession(HWND,UINT,SNMPAPI_CALLBACK,LPVOID);
+HSNMP_VBL WINSNMPAPI SnmpCreateVbl(HSNMP_SESSION,smiLPCOID,smiLPCVALUE);
+SNMPAPI_STATUS WINSNMPAPI SnmpDecodeMsg(HSNMP_SESSION,LPHSNMP_ENTITY,LPHSNMP_ENTITY,LPHSNMP_CONTEXT,LPHSNMP_PDU,smiLPCOCTETS);
+SNMPAPI_STATUS WINSNMPAPI SnmpDeleteVb(HSNMP_VBL,smiUINT32);
+HSNMP_PDU WINSNMPAPI SnmpDuplicatePdu(HSNMP_SESSION,HSNMP_PDU);
+HSNMP_VBL WINSNMPAPI SnmpDuplicateVbl(HSNMP_SESSION,HSNMP_VBL);
+SNMPAPI_STATUS WINSNMPAPI SnmpEncodeMsg(HSNMP_SESSION,HSNMP_ENTITY,HSNMP_ENTITY,HSNMP_CONTEXT,HSNMP_PDU,smiLPOCTETS);
+SNMPAPI_STATUS WINSNMPAPI SnmpEntityToStr(HSNMP_ENTITY,smiUINT32,LPSTR);
+SNMPAPI_STATUS WINSNMPAPI SnmpFreeContext(HSNMP_CONTEXT);
+SNMPAPI_STATUS WINSNMPAPI SnmpFreeDescriptor(smiUINT32,smiLPOPAQUE);
+SNMPAPI_STATUS WINSNMPAPI SnmpFreeEntity(HSNMP_ENTITY);
+SNMPAPI_STATUS WINSNMPAPI SnmpFreePdu(HSNMP_PDU);
+SNMPAPI_STATUS WINSNMPAPI SnmpFreeVbl(HSNMP_VBL);
+SNMPAPI_STATUS WINSNMPAPI SnmpGetLastError(HSNMP_SESSION);
+SNMPAPI_STATUS WINSNMPAPI SnmpGetPduData(HSNMP_PDU,smiLPINT,smiLPINT32,smiLPINT,smiLPINT,LPHSNMP_VBL);
+SNMPAPI_STATUS WINSNMPAPI SnmpGetRetransmitMode(smiLPUINT32);
+SNMPAPI_STATUS WINSNMPAPI SnmpGetRetry(HSNMP_ENTITY,smiLPUINT32,smiLPUINT32);
+SNMPAPI_STATUS WINSNMPAPI SnmpGetTimeout(HSNMP_ENTITY,smiLPTIMETICKS,smiLPTIMETICKS);
+SNMPAPI_STATUS WINSNMPAPI SnmpGetTranslateMode(smiLPUINT32);
+SNMPAPI_STATUS WINSNMPAPI SnmpGetVb(HSNMP_VBL,smiUINT32,smiLPOID,smiLPVALUE);
+SNMPAPI_STATUS WINSNMPAPI SnmpGetVendorInfo(smiLPVENDORINFO);
+SNMPAPI_STATUS WINSNMPAPI SnmpListen(HSNMP_ENTITY,SNMPAPI_STATUS);
+SNMPAPI_STATUS WINSNMPAPI SnmpOidCompare(smiLPCOID,smiLPCOID,smiUINT32,smiLPINT);
+SNMPAPI_STATUS WINSNMPAPI SnmpOidCopy(smiLPCOID,smiLPOID);
+SNMPAPI_STATUS WINSNMPAPI SnmpOidToStr(smiLPCOID,smiUINT32,LPSTR);
+HSNMP_SESSION WINSNMPAPI SnmpOpen(HWND,UINT);
+SNMPAPI_STATUS WINSNMPAPI SnmpRecvMsg(HSNMP_SESSION,LPHSNMP_ENTITY,LPHSNMP_ENTITY,LPHSNMP_CONTEXT,LPHSNMP_PDU);
+SNMPAPI_STATUS WINSNMPAPI SnmpRegister(HSNMP_SESSION,HSNMP_ENTITY,HSNMP_ENTITY,HSNMP_CONTEXT,smiLPCOID,smiUINT32);
+SNMPAPI_STATUS WINSNMPAPI SnmpSendMsg(HSNMP_SESSION,HSNMP_ENTITY,HSNMP_ENTITY,HSNMP_CONTEXT,HSNMP_PDU);
+SNMPAPI_STATUS WINSNMPAPI SnmpSetPduData(HSNMP_PDU,const smiINT *,const smiINT32 *,const smiINT *,const smiINT *,const HSNMP_VBL *);
+SNMPAPI_STATUS WINSNMPAPI SnmpSetPort(HSNMP_ENTITY,UINT);
+SNMPAPI_STATUS WINSNMPAPI SnmpSetRetransmitMode(smiUINT32);
+SNMPAPI_STATUS WINSNMPAPI SnmpSetRetry(HSNMP_ENTITY,smiUINT32);
+SNMPAPI_STATUS WINSNMPAPI SnmpSetTimeout(HSNMP_ENTITY,smiTIMETICKS);
+SNMPAPI_STATUS WINSNMPAPI SnmpSetTranslateMode(smiUINT32);
+SNMPAPI_STATUS WINSNMPAPI SnmpSetVb(HSNMP_VBL,smiUINT32,smiLPCOID,smiLPCVALUE);
+SNMPAPI_STATUS WINSNMPAPI SnmpStartup(smiLPUINT32,smiLPUINT32,smiLPUINT32,smiLPUINT32,smiLPUINT32);
+HSNMP_CONTEXT WINSNMPAPI SnmpStrToContext(HSNMP_SESSION,smiLPCOCTETS);
+HSNMP_ENTITY WINSNMPAPI SnmpStrToEntity(HSNMP_SESSION,LPCSTR);
+SNMPAPI_STATUS WINSNMPAPI SnmpStrToOid(LPCSTR,smiLPOID);
+/* Added in WinSNMP v3.0, not present in some (all?) versions of MS wsnmp32.dll */
+HSNMP_ENTITY WINSNMPAPI SnmpCreateEntity(HSNMP_SESSION,smiLPENTITYINFO);
+SNMPAPI_STATUS WINSNMPAPI SnmpGetEntityInfo(HSNMP_ENTITY,smiLPENTITYINFO);
+SNMPAPI_STATUS WINSNMPAPI SnmpSetEntityInfo(HSNMP_ENTITY,smiLPENTITYINFO);
+SNMPAPI_STATUS WINSNMPAPI SnmpFreeEntityInfo(smiLPENTITYINFO);
+HSNMP_CONTEXT WINSNMPAPI SnmpCreateContext(HSNMP_SESSION,smiLPCONTEXTINFO);
+SNMPAPI_STATUS WINSNMPAPI SnmpGetContextInfo(HSNMP_CONTEXT,smiLPCONTEXTINFO);
+SNMPAPI_STATUS WINSNMPAPI SnmpSetContextInfo(HSNMP_CONTEXT,smiLPCONTEXTINFO);
+SNMPAPI_STATUS WINSNMPAPI SnmpFreeContextInfo(smiLPCONTEXTINFO);
+SNMPAPI_STATUS WINSNMPAPI SnmpPasswordToKey(smiLPOCTETS,smiINT32,smiLPOCTETS);
+
+#endif /* RC_INVOKED */
+
+#ifdef __cplusplus
+}
+#endif
+#include <poppack.h>
+#endif
diff --git a/tcc/include/winapi/winsock.h b/tcc/include/winapi/winsock.h
new file mode 100644
index 0000000..b595b59
--- /dev/null
+++ b/tcc/include/winapi/winsock.h
@@ -0,0 +1,536 @@
+/*
+
+ Definitions for winsock 1.1
+
+ Portions Copyright (c) 1980, 1983, 1988, 1993
+ The Regents of the University of California. All rights reserved.
+
+ Portions Copyright (c) 1993 by Digital Equipment Corporation.
+ */
+
+#ifndef _WINSOCK_H
+#define _WINSOCK_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#define _GNU_H_WINDOWS32_SOCKETS
+
+#include <windows.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if !defined ( _BSDTYPES_DEFINED )
+/* also defined in gmon.h and in cygwin's sys/types */
+typedef unsigned char u_char;
+typedef unsigned short u_short;
+typedef unsigned int u_int;
+typedef unsigned long u_long;
+#define _BSDTYPES_DEFINED
+#endif /* !defined _BSDTYPES_DEFINED */
+typedef u_int SOCKET;
+#ifndef FD_SETSIZE
+#define FD_SETSIZE 64
+#endif
+
+/* shutdown() how types */
+#define SD_RECEIVE 0x00
+#define SD_SEND 0x01
+#define SD_BOTH 0x02
+
+#ifndef _SYS_TYPES_FD_SET
+/* fd_set may have be defined by the newlib <sys/types.h>
+ * if __USE_W32_SOCKETS not defined.
+ */
+#ifdef fd_set
+#undef fd_set
+#endif
+typedef struct fd_set {
+ u_int fd_count;
+ SOCKET fd_array[FD_SETSIZE];
+} fd_set;
+int PASCAL __WSAFDIsSet(SOCKET,fd_set*);
+#ifndef FD_CLR
+#define FD_CLR(fd,set) do { u_int __i;\
+for (__i = 0; __i < ((fd_set *)(set))->fd_count ; __i++) {\
+ if (((fd_set *)(set))->fd_array[__i] == (fd)) {\
+ while (__i < ((fd_set *)(set))->fd_count-1) {\
+ ((fd_set*)(set))->fd_array[__i] = ((fd_set*)(set))->fd_array[__i+1];\
+ __i++;\
+ }\
+ ((fd_set*)(set))->fd_count--;\
+ break;\
+ }\
+}\
+} while (0)
+#endif
+#ifndef FD_SET
+#define FD_SET(fd, set) do { \
+ if (((fd_set *)(set))->fd_count < FD_SETSIZE) \
+ ((fd_set *)(set))->fd_array[((fd_set *)(set))->fd_count++]=(fd);\
+}while (0)
+#endif
+#ifndef FD_ZERO
+#define FD_ZERO(set) (((fd_set *)(set))->fd_count=0)
+#endif
+#ifndef FD_ISSET
+#define FD_ISSET(fd, set) __WSAFDIsSet((SOCKET)(fd), (fd_set *)(set))
+#endif
+#elif !defined(USE_SYS_TYPES_FD_SET)
+#warning "fd_set and associated macros have been defined in sys/types. \
+ This can cause runtime problems with W32 sockets"
+#endif /* ndef _SYS_TYPES_FD_SET */
+
+#if !(defined (__INSIDE_CYGWIN__) || defined (__INSIDE_MSYS__))
+#ifndef _TIMEVAL_DEFINED /* also in sys/time.h */
+#define _TIMEVAL_DEFINED
+struct timeval {
+ long tv_sec;
+ long tv_usec;
+};
+#define timerisset(tvp) ((tvp)->tv_sec || (tvp)->tv_usec)
+#define timercmp(tvp, uvp, cmp) \
+ (((tvp)->tv_sec != (uvp)->tv_sec) ? \
+ ((tvp)->tv_sec cmp (uvp)->tv_sec) : \
+ ((tvp)->tv_usec cmp (uvp)->tv_usec))
+#define timerclear(tvp) (tvp)->tv_sec = (tvp)->tv_usec = 0
+#endif /* _TIMEVAL_DEFINED */
+struct hostent {
+ char *h_name;
+ char **h_aliases;
+ short h_addrtype;
+ short h_length;
+ char **h_addr_list;
+#define h_addr h_addr_list[0]
+};
+struct linger {
+ u_short l_onoff;
+ u_short l_linger;
+};
+#endif /* ! (__INSIDE_CYGWIN__ || __INSIDE_MSYS__) */
+#define IOCPARM_MASK 0x7f
+#define IOC_VOID 0x20000000
+#define IOC_OUT 0x40000000
+#define IOC_IN 0x80000000
+#define IOC_INOUT (IOC_IN|IOC_OUT)
+
+#if !(defined (__INSIDE_CYGWIN__) || defined (__INSIDE_MSYS__))
+#define _IO(x,y) (IOC_VOID|((x)<<8)|(y))
+#define _IOR(x,y,t) (IOC_OUT|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y))
+#define _IOW(x,y,t) (IOC_IN|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y))
+#define FIONBIO _IOW('f', 126, u_long)
+#endif /* ! (__INSIDE_CYGWIN__ || __INSIDE_MSYS__) */
+
+#define FIONREAD _IOR('f', 127, u_long)
+#define FIOASYNC _IOW('f', 125, u_long)
+#define SIOCSHIWAT _IOW('s', 0, u_long)
+#define SIOCGHIWAT _IOR('s', 1, u_long)
+#define SIOCSLOWAT _IOW('s', 2, u_long)
+#define SIOCGLOWAT _IOR('s', 3, u_long)
+#define SIOCATMARK _IOR('s', 7, u_long)
+
+#if !(defined (__INSIDE_CYGWIN__) || defined (__INSIDE_MSYS__))
+struct netent {
+ char * n_name;
+ char **n_aliases;
+ short n_addrtype;
+ u_long n_net;
+};
+struct servent {
+ char *s_name;
+ char **s_aliases;
+ short s_port;
+ char *s_proto;
+};
+struct protoent {
+ char *p_name;
+ char **p_aliases;
+ short p_proto;
+};
+#endif /* ! (__INSIDE_CYGWIN__ || __INSIDE_MSYS__) */
+
+#define IPPROTO_IP 0
+#define IPPROTO_ICMP 1
+#define IPPROTO_IGMP 2
+#define IPPROTO_GGP 3
+#define IPPROTO_TCP 6
+#define IPPROTO_PUP 12
+#define IPPROTO_UDP 17
+#define IPPROTO_IDP 22
+#define IPPROTO_ND 77
+#define IPPROTO_RAW 255
+#define IPPROTO_MAX 256
+#define IPPORT_ECHO 7
+#define IPPORT_DISCARD 9
+#define IPPORT_SYSTAT 11
+#define IPPORT_DAYTIME 13
+#define IPPORT_NETSTAT 15
+#define IPPORT_FTP 21
+#define IPPORT_TELNET 23
+#define IPPORT_SMTP 25
+#define IPPORT_TIMESERVER 37
+#define IPPORT_NAMESERVER 42
+#define IPPORT_WHOIS 43
+#define IPPORT_MTP 57
+#define IPPORT_TFTP 69
+#define IPPORT_RJE 77
+#define IPPORT_FINGER 79
+#define IPPORT_TTYLINK 87
+#define IPPORT_SUPDUP 95
+#define IPPORT_EXECSERVER 512
+#define IPPORT_LOGINSERVER 513
+#define IPPORT_CMDSERVER 514
+#define IPPORT_EFSSERVER 520
+#define IPPORT_BIFFUDP 512
+#define IPPORT_WHOSERVER 513
+#define IPPORT_ROUTESERVER 520
+#define IPPORT_RESERVED 1024
+#define IMPLINK_IP 155
+#define IMPLINK_LOWEXPER 156
+#define IMPLINK_HIGHEXPER 158
+struct in_addr {
+ union {
+ struct { u_char s_b1,s_b2,s_b3,s_b4; } S_un_b;
+ struct { u_short s_w1,s_w2; } S_un_w;
+ u_long S_addr;
+ } S_un;
+#define s_addr S_un.S_addr
+#define s_host S_un.S_un_b.s_b2
+#define s_net S_un.S_un_b.s_b1
+#define s_imp S_un.S_un_w.s_w2
+#define s_impno S_un.S_un_b.s_b4
+#define s_lh S_un.S_un_b.s_b3
+};
+#define IN_CLASSA(i) (((long)(i)&0x80000000) == 0)
+#define IN_CLASSA_NET 0xff000000
+#define IN_CLASSA_NSHIFT 24
+#define IN_CLASSA_HOST 0x00ffffff
+#define IN_CLASSA_MAX 128
+#define IN_CLASSB(i) (((long)(i)&0xc0000000)==0x80000000)
+#define IN_CLASSB_NET 0xffff0000
+#define IN_CLASSB_NSHIFT 16
+#define IN_CLASSB_HOST 0x0000ffff
+#define IN_CLASSB_MAX 65536
+#define IN_CLASSC(i) (((long)(i)&0xe0000000)==0xc0000000)
+#define IN_CLASSC_NET 0xffffff00
+#define IN_CLASSC_NSHIFT 8
+#define IN_CLASSC_HOST 0xff
+#define INADDR_ANY (u_long)0
+#define INADDR_LOOPBACK 0x7f000001
+#define INADDR_BROADCAST (u_long)0xffffffff
+#define INADDR_NONE 0xffffffff
+struct sockaddr_in {
+ short sin_family;
+ u_short sin_port;
+ struct in_addr sin_addr;
+ char sin_zero[8];
+};
+#define WSADESCRIPTION_LEN 256
+#define WSASYS_STATUS_LEN 128
+typedef struct WSAData {
+ WORD wVersion;
+ WORD wHighVersion;
+ char szDescription[WSADESCRIPTION_LEN+1];
+ char szSystemStatus[WSASYS_STATUS_LEN+1];
+ unsigned short iMaxSockets;
+ unsigned short iMaxUdpDg;
+ char * lpVendorInfo;
+} WSADATA;
+typedef WSADATA *LPWSADATA;
+
+#if !(defined (__INSIDE_CYGWIN__) || defined (__INSIDE_MSYS__))
+#define IP_OPTIONS 1
+#define SO_DEBUG 1
+#define SO_ACCEPTCONN 2
+#define SO_REUSEADDR 4
+#define SO_KEEPALIVE 8
+#define SO_DONTROUTE 16
+#define SO_BROADCAST 32
+#define SO_USELOOPBACK 64
+#define SO_LINGER 128
+#define SO_OOBINLINE 256
+#define SO_DONTLINGER (u_int)(~SO_LINGER)
+#define SO_SNDBUF 0x1001
+#define SO_RCVBUF 0x1002
+#define SO_SNDLOWAT 0x1003
+#define SO_RCVLOWAT 0x1004
+#define SO_SNDTIMEO 0x1005
+#define SO_RCVTIMEO 0x1006
+#define SO_ERROR 0x1007
+#define SO_TYPE 0x1008
+#endif /* ! (__INSIDE_CYGWIN__ || __INSIDE_MSYS__) */
+/*
+ * Note that the next 5 IP defines are specific to WinSock 1.1 (wsock32.dll).
+ * They will cause errors or unexpected results if used with the
+ * (gs)etsockopts exported from the WinSock 2 lib, ws2_32.dll. Refer ws2tcpip.h.
+ */
+#define IP_MULTICAST_IF 2
+#define IP_MULTICAST_TTL 3
+#define IP_MULTICAST_LOOP 4
+#define IP_ADD_MEMBERSHIP 5
+#define IP_DROP_MEMBERSHIP 6
+
+#define IP_DEFAULT_MULTICAST_TTL 1
+#define IP_DEFAULT_MULTICAST_LOOP 1
+#define IP_MAX_MEMBERSHIPS 20
+struct ip_mreq {
+ struct in_addr imr_multiaddr;
+ struct in_addr imr_interface;
+};
+#define INVALID_SOCKET (SOCKET)(~0)
+#define SOCKET_ERROR (-1)
+#define SOCK_STREAM 1
+#define SOCK_DGRAM 2
+#define SOCK_RAW 3
+#define SOCK_RDM 4
+#define SOCK_SEQPACKET 5
+#define TCP_NODELAY 0x0001
+#define AF_UNSPEC 0
+#define AF_UNIX 1
+#define AF_INET 2
+#define AF_IMPLINK 3
+#define AF_PUP 4
+#define AF_CHAOS 5
+#define AF_IPX 6
+#define AF_NS 6
+#define AF_ISO 7
+#define AF_OSI AF_ISO
+#define AF_ECMA 8
+#define AF_DATAKIT 9
+#define AF_CCITT 10
+#define AF_SNA 11
+#define AF_DECnet 12
+#define AF_DLI 13
+#define AF_LAT 14
+#define AF_HYLINK 15
+#define AF_APPLETALK 16
+#define AF_NETBIOS 17
+#define AF_VOICEVIEW 18
+#define AF_FIREFOX 19
+#define AF_UNKNOWN1 20
+#define AF_BAN 21
+#define AF_ATM 22
+#define AF_INET6 23
+#if !(defined (__INSIDE_CYGWIN__) || defined (__INSIDE_MSYS__))
+#define AF_MAX 24
+struct sockaddr {
+ u_short sa_family;
+ char sa_data[14];
+};
+#endif /* ! (__INSIDE_CYGWIN__ || __INSIDE_MSYS__) */
+
+struct sockproto {
+ u_short sp_family;
+ u_short sp_protocol;
+};
+#define PF_UNSPEC AF_UNSPEC
+#define PF_UNIX AF_UNIX
+#define PF_INET AF_INET
+#define PF_IMPLINK AF_IMPLINK
+#define PF_PUP AF_PUP
+#define PF_CHAOS AF_CHAOS
+#define PF_NS AF_NS
+#define PF_IPX AF_IPX
+#define PF_ISO AF_ISO
+#define PF_OSI AF_OSI
+#define PF_ECMA AF_ECMA
+#define PF_DATAKIT AF_DATAKIT
+#define PF_CCITT AF_CCITT
+#define PF_SNA AF_SNA
+#define PF_DECnet AF_DECnet
+#define PF_DLI AF_DLI
+#define PF_LAT AF_LAT
+#define PF_HYLINK AF_HYLINK
+#define PF_APPLETALK AF_APPLETALK
+#define PF_VOICEVIEW AF_VOICEVIEW
+#define PF_FIREFOX AF_FIREFOX
+#define PF_UNKNOWN1 AF_UNKNOWN1
+#define PF_BAN AF_BAN
+#define PF_ATM AF_ATM
+#define PF_INET6 AF_INET6
+#define PF_MAX AF_MAX
+#define SOL_SOCKET 0xffff
+#define SOMAXCONN 5
+#if !(defined (__INSIDE_CYGWIN__) || defined (__INSIDE_MSYS__))
+#define MSG_OOB 1
+#define MSG_PEEK 2
+#define MSG_DONTROUTE 4
+#endif /* ! (__INSIDE_CYGWIN__ || __INSIDE_MSYS__) */
+#define MSG_MAXIOVLEN 16
+#define MSG_PARTIAL 0x8000
+#define MAXGETHOSTSTRUCT 1024
+#define FD_READ 1
+#define FD_WRITE 2
+#define FD_OOB 4
+#define FD_ACCEPT 8
+#define FD_CONNECT 16
+#define FD_CLOSE 32
+#ifndef WSABASEERR
+#define WSABASEERR 10000
+#define WSAEINTR (WSABASEERR+4)
+#define WSAEBADF (WSABASEERR+9)
+#define WSAEACCES (WSABASEERR+13)
+#define WSAEFAULT (WSABASEERR+14)
+#define WSAEINVAL (WSABASEERR+22)
+#define WSAEMFILE (WSABASEERR+24)
+#define WSAEWOULDBLOCK (WSABASEERR+35)
+#define WSAEINPROGRESS (WSABASEERR+36)
+#define WSAEALREADY (WSABASEERR+37)
+#define WSAENOTSOCK (WSABASEERR+38)
+#define WSAEDESTADDRREQ (WSABASEERR+39)
+#define WSAEMSGSIZE (WSABASEERR+40)
+#define WSAEPROTOTYPE (WSABASEERR+41)
+#define WSAENOPROTOOPT (WSABASEERR+42)
+#define WSAEPROTONOSUPPORT (WSABASEERR+43)
+#define WSAESOCKTNOSUPPORT (WSABASEERR+44)
+#define WSAEOPNOTSUPP (WSABASEERR+45)
+#define WSAEPFNOSUPPORT (WSABASEERR+46)
+#define WSAEAFNOSUPPORT (WSABASEERR+47)
+#define WSAEADDRINUSE (WSABASEERR+48)
+#define WSAEADDRNOTAVAIL (WSABASEERR+49)
+#define WSAENETDOWN (WSABASEERR+50)
+#define WSAENETUNREACH (WSABASEERR+51)
+#define WSAENETRESET (WSABASEERR+52)
+#define WSAECONNABORTED (WSABASEERR+53)
+#define WSAECONNRESET (WSABASEERR+54)
+#define WSAENOBUFS (WSABASEERR+55)
+#define WSAEISCONN (WSABASEERR+56)
+#define WSAENOTCONN (WSABASEERR+57)
+#define WSAESHUTDOWN (WSABASEERR+58)
+#define WSAETOOMANYREFS (WSABASEERR+59)
+#define WSAETIMEDOUT (WSABASEERR+60)
+#define WSAECONNREFUSED (WSABASEERR+61)
+#define WSAELOOP (WSABASEERR+62)
+#define WSAENAMETOOLONG (WSABASEERR+63)
+#define WSAEHOSTDOWN (WSABASEERR+64)
+#define WSAEHOSTUNREACH (WSABASEERR+65)
+#define WSAENOTEMPTY (WSABASEERR+66)
+#define WSAEPROCLIM (WSABASEERR+67)
+#define WSAEUSERS (WSABASEERR+68)
+#define WSAEDQUOT (WSABASEERR+69)
+#define WSAESTALE (WSABASEERR+70)
+#define WSAEREMOTE (WSABASEERR+71)
+#define WSAEDISCON (WSABASEERR+101)
+#define WSASYSNOTREADY (WSABASEERR+91)
+#define WSAVERNOTSUPPORTED (WSABASEERR+92)
+#define WSANOTINITIALISED (WSABASEERR+93)
+#define WSAHOST_NOT_FOUND (WSABASEERR+1001)
+#define WSATRY_AGAIN (WSABASEERR+1002)
+#define WSANO_RECOVERY (WSABASEERR+1003)
+#define WSANO_DATA (WSABASEERR+1004)
+#endif /* !WSABASEERR */
+
+#define WSANO_ADDRESS WSANO_DATA
+#if !(defined (__INSIDE_CYGWIN__) || defined (__INSIDE_MSYS__))
+#define h_errno WSAGetLastError()
+#define HOST_NOT_FOUND WSAHOST_NOT_FOUND
+#define TRY_AGAIN WSATRY_AGAIN
+#define NO_RECOVERY WSANO_RECOVERY
+#define NO_DATA WSANO_DATA
+#define NO_ADDRESS WSANO_ADDRESS
+#endif /* ! (__INSIDE_CYGWIN__ || __INSIDE_MSYS__) */
+SOCKET PASCAL accept(SOCKET,struct sockaddr*,int*);
+int PASCAL bind(SOCKET,const struct sockaddr*,int);
+int PASCAL closesocket(SOCKET);
+int PASCAL connect(SOCKET,const struct sockaddr*,int);
+int PASCAL ioctlsocket(SOCKET,long,u_long *);
+int PASCAL getpeername(SOCKET,struct sockaddr*,int*);
+int PASCAL getsockname(SOCKET,struct sockaddr*,int*);
+int PASCAL getsockopt(SOCKET,int,int,char*,int*);
+unsigned long PASCAL inet_addr(const char*);
+DECLARE_STDCALL_P(char *) inet_ntoa(struct in_addr);
+int PASCAL listen(SOCKET,int);
+int PASCAL recv(SOCKET,char*,int,int);
+int PASCAL recvfrom(SOCKET,char*,int,int,struct sockaddr*,int*);
+int PASCAL send(SOCKET,const char*,int,int);
+int PASCAL sendto(SOCKET,const char*,int,int,const struct sockaddr*,int);
+int PASCAL setsockopt(SOCKET,int,int,const char*,int);
+int PASCAL shutdown(SOCKET,int);
+SOCKET PASCAL socket(int,int,int);
+DECLARE_STDCALL_P(struct hostent *) gethostbyaddr(const char*,int,int);
+DECLARE_STDCALL_P(struct hostent *) gethostbyname(const char*);
+DECLARE_STDCALL_P(struct servent *) getservbyport(int,const char*);
+DECLARE_STDCALL_P(struct servent *) getservbyname(const char*,const char*);
+DECLARE_STDCALL_P(struct protoent *) getprotobynumber(int);
+DECLARE_STDCALL_P(struct protoent *) getprotobyname(const char*);
+int PASCAL WSAStartup(WORD,LPWSADATA);
+int PASCAL WSACleanup(void);
+void PASCAL WSASetLastError(int);
+int PASCAL WSAGetLastError(void);
+BOOL PASCAL WSAIsBlocking(void);
+int PASCAL WSAUnhookBlockingHook(void);
+FARPROC PASCAL WSASetBlockingHook(FARPROC);
+int PASCAL WSACancelBlockingCall(void);
+HANDLE PASCAL WSAAsyncGetServByName(HWND,u_int,const char*,const char*,char*,int);
+HANDLE PASCAL WSAAsyncGetServByPort(HWND,u_int,int,const char*,char*,int);
+HANDLE PASCAL WSAAsyncGetProtoByName(HWND,u_int,const char*,char*,int);
+HANDLE PASCAL WSAAsyncGetProtoByNumber(HWND,u_int,int,char*,int);
+HANDLE PASCAL WSAAsyncGetHostByName(HWND,u_int,const char*,char*,int);
+HANDLE PASCAL WSAAsyncGetHostByAddr(HWND,u_int,const char*,int,int,char*,int);
+int PASCAL WSACancelAsyncRequest(HANDLE);
+int PASCAL WSAAsyncSelect(SOCKET,HWND,u_int,long);
+#if !(defined (__INSIDE_CYGWIN__) || defined (__INSIDE_MSYS__))
+u_long PASCAL htonl(u_long);
+u_long PASCAL ntohl(u_long);
+u_short PASCAL htons(u_short);
+u_short PASCAL ntohs(u_short);
+int PASCAL select(int nfds,fd_set*,fd_set*,fd_set*,const struct timeval*);
+int PASCAL gethostname(char*,int);
+#endif /* ! (__INSIDE_CYGWIN__ || __INSIDE_MSYS__) */
+
+#define WSAMAKEASYNCREPLY(b,e) MAKELONG(b,e)
+#define WSAMAKESELECTREPLY(e,error) MAKELONG(e,error)
+#define WSAGETASYNCBUFLEN(l) LOWORD(l)
+#define WSAGETASYNCERROR(l) HIWORD(l)
+#define WSAGETSELECTEVENT(l) LOWORD(l)
+#define WSAGETSELECTERROR(l) HIWORD(l)
+
+typedef struct sockaddr SOCKADDR;
+typedef struct sockaddr *PSOCKADDR;
+typedef struct sockaddr *LPSOCKADDR;
+typedef struct sockaddr_in SOCKADDR_IN;
+typedef struct sockaddr_in *PSOCKADDR_IN;
+typedef struct sockaddr_in *LPSOCKADDR_IN;
+typedef struct linger LINGER;
+typedef struct linger *PLINGER;
+typedef struct linger *LPLINGER;
+typedef struct in_addr IN_ADDR;
+typedef struct in_addr *PIN_ADDR;
+typedef struct in_addr *LPIN_ADDR;
+typedef struct fd_set FD_SET;
+typedef struct fd_set *PFD_SET;
+typedef struct fd_set *LPFD_SET;
+typedef struct hostent HOSTENT;
+typedef struct hostent *PHOSTENT;
+typedef struct hostent *LPHOSTENT;
+typedef struct servent SERVENT;
+typedef struct servent *PSERVENT;
+typedef struct servent *LPSERVENT;
+typedef struct protoent PROTOENT;
+typedef struct protoent *PPROTOENT;
+typedef struct protoent *LPPROTOENT;
+typedef struct timeval TIMEVAL;
+typedef struct timeval *PTIMEVAL;
+typedef struct timeval *LPTIMEVAL;
+
+#ifdef __cplusplus
+}
+#endif
+/*
+ * Recent MSDN docs indicate that the MS-specific extensions exported from
+ * mswsock.dll (AcceptEx, TransmitFile. WSARecEx and GetAcceptExSockaddrs) are
+ * declared in mswsock.h. These extensions are not supported on W9x or WinCE.
+ * However, code using WinSock 1.1 API may expect the declarations and
+ * associated defines to be in this header. Thus we include mswsock.h here.
+ *
+ * When linking against the WinSock 1.1 lib, wsock32.dll, the mswsock functions
+ * are automatically routed to mswsock.dll (on platforms with support).
+ * The WinSock 2 lib, ws2_32.dll, does not contain any references to
+ * the mswsock extensions.
+ */
+
+#include <mswsock.h>
+
+#endif
diff --git a/tcc/include/winapi/winsock2.h b/tcc/include/winapi/winsock2.h
new file mode 100644
index 0000000..d318eb6
--- /dev/null
+++ b/tcc/include/winapi/winsock2.h
@@ -0,0 +1,1303 @@
+/*
+
+ Definitions for winsock 2
+
+ Contributed by the WINE project.
+
+ Portions Copyright (c) 1980, 1983, 1988, 1993
+ The Regents of the University of California. All rights reserved.
+
+ Portions Copyright (c) 1993 by Digital Equipment Corporation.
+ */
+
+#if !(defined _WINSOCK2_H || defined _WINSOCK_H)
+#define _WINSOCK2_H
+#define _WINSOCK_H /* to prevent later inclusion of winsock.h */
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#define _GNU_H_WINDOWS32_SOCKETS
+
+#include <windows.h>
+
+#ifndef WINSOCK_API_LINKAGE
+#ifdef __W32API_USE_DLLIMPORT__
+#define WINSOCK_API_LINKAGE DECLSPEC_IMPORT
+#else
+#define WINSOCK_API_LINKAGE
+#endif
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+/* Names common to Winsock1.1 and Winsock2 */
+#if !defined ( _BSDTYPES_DEFINED )
+/* also defined in gmon.h and in cygwin's sys/types */
+typedef unsigned char u_char;
+typedef unsigned short u_short;
+typedef unsigned int u_int;
+typedef unsigned long u_long;
+#define _BSDTYPES_DEFINED
+#endif /* ! def _BSDTYPES_DEFINED */
+typedef u_int SOCKET;
+#ifndef FD_SETSIZE
+#define FD_SETSIZE 64
+#endif
+
+/* shutdown() how types */
+#define SD_RECEIVE 0x00
+#define SD_SEND 0x01
+#define SD_BOTH 0x02
+
+#ifndef _SYS_TYPES_FD_SET
+/* fd_set may be defined by the newlib <sys/types.h>
+ * if __USE_W32_SOCKETS not defined.
+ */
+#ifdef fd_set
+#undef fd_set
+#endif
+typedef struct fd_set {
+ u_int fd_count;
+ SOCKET fd_array[FD_SETSIZE];
+} fd_set;
+int PASCAL __WSAFDIsSet(SOCKET,fd_set*);
+#ifndef FD_CLR
+#define FD_CLR(fd,set) do { u_int __i;\
+for (__i = 0; __i < ((fd_set *)(set))->fd_count ; __i++) {\
+ if (((fd_set *)(set))->fd_array[__i] == (fd)) {\
+ while (__i < ((fd_set *)(set))->fd_count-1) {\
+ ((fd_set*)(set))->fd_array[__i] = ((fd_set*)(set))->fd_array[__i+1];\
+ __i++;\
+ }\
+ ((fd_set*)(set))->fd_count--;\
+ break;\
+ }\
+}\
+} while (0)
+#endif
+#ifndef FD_SET
+/* this differs from the define in winsock.h and in cygwin sys/types.h */
+#define FD_SET(fd, set) do { u_int __i;\
+for (__i = 0; __i < ((fd_set *)(set))->fd_count ; __i++) {\
+ if (((fd_set *)(set))->fd_array[__i] == (fd)) {\
+ break;\
+ }\
+}\
+if (__i == ((fd_set *)(set))->fd_count) {\
+ if (((fd_set *)(set))->fd_count < FD_SETSIZE) {\
+ ((fd_set *)(set))->fd_array[__i] = (fd);\
+ ((fd_set *)(set))->fd_count++;\
+ }\
+}\
+} while(0)
+#endif
+#ifndef FD_ZERO
+#define FD_ZERO(set) (((fd_set *)(set))->fd_count=0)
+#endif
+#ifndef FD_ISSET
+#define FD_ISSET(fd, set) __WSAFDIsSet((SOCKET)(fd), (fd_set *)(set))
+#endif
+#elif !defined (USE_SYS_TYPES_FD_SET)
+#warning "fd_set and associated macros have been defined in sys/types. \
+ This may cause runtime problems with W32 sockets"
+#endif /* ndef _SYS_TYPES_FD_SET */
+#if !(defined (__INSIDE_CYGWIN__) || (__INSIDE_MSYS__))
+#ifndef _TIMEVAL_DEFINED /* also in sys/time.h */
+#define _TIMEVAL_DEFINED
+struct timeval {
+ long tv_sec;
+ long tv_usec;
+};
+#define timerisset(tvp) ((tvp)->tv_sec || (tvp)->tv_usec)
+#define timercmp(tvp, uvp, cmp) \
+ (((tvp)->tv_sec != (uvp)->tv_sec) ? \
+ ((tvp)->tv_sec cmp (uvp)->tv_sec) : \
+ ((tvp)->tv_usec cmp (uvp)->tv_usec))
+#define timerclear(tvp) (tvp)->tv_sec = (tvp)->tv_usec = 0
+#endif /* _TIMEVAL_DEFINED */
+struct hostent {
+ char *h_name;
+ char **h_aliases;
+ short h_addrtype;
+ short h_length;
+ char **h_addr_list;
+#define h_addr h_addr_list[0]
+};
+struct linger {
+ u_short l_onoff;
+ u_short l_linger;
+};
+#endif /* ! (__INSIDE_CYGWIN__ || __INSIDE_MSYS__) */
+#define IOCPARM_MASK 0x7f
+#define IOC_VOID 0x20000000
+#define IOC_OUT 0x40000000
+#define IOC_IN 0x80000000
+#define IOC_INOUT (IOC_IN|IOC_OUT)
+
+#if ! (defined (__INSIDE_CYGWIN__) || defined (__INSIDE_MSYS__))
+#define _IO(x,y) (IOC_VOID|((x)<<8)|(y))
+#define _IOR(x,y,t) (IOC_OUT|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y))
+#define _IOW(x,y,t) (IOC_IN|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y))
+#define FIONBIO _IOW('f', 126, u_long)
+#endif /* ! (__INSIDE_CYGWIN__ || __INSIDE_MSYS__) */
+
+#define FIONREAD _IOR('f', 127, u_long)
+#define FIOASYNC _IOW('f', 125, u_long)
+#define SIOCSHIWAT _IOW('s', 0, u_long)
+#define SIOCGHIWAT _IOR('s', 1, u_long)
+#define SIOCSLOWAT _IOW('s', 2, u_long)
+#define SIOCGLOWAT _IOR('s', 3, u_long)
+#define SIOCATMARK _IOR('s', 7, u_long)
+
+#if ! (defined (__INSIDE_CYGWIN__) || defined (__INSIDE_MSYS__))
+struct netent {
+ char * n_name;
+ char **n_aliases;
+ short n_addrtype;
+ u_long n_net;
+};
+struct servent {
+ char *s_name;
+ char **s_aliases;
+ short s_port;
+ char *s_proto;
+};
+struct protoent {
+ char *p_name;
+ char **p_aliases;
+ short p_proto;
+};
+#endif /* ! (__INSIDE_CYGWIN__ || __INSIDE_MSYS__) */
+
+#define IPPROTO_IP 0
+#define IPPROTO_ICMP 1
+#define IPPROTO_IGMP 2
+#define IPPROTO_GGP 3
+#define IPPROTO_TCP 6
+#define IPPROTO_PUP 12
+#define IPPROTO_UDP 17
+#define IPPROTO_IDP 22
+#define IPPROTO_ND 77
+#define IPPROTO_RAW 255
+#define IPPROTO_MAX 256
+/* IPv6 options */
+#define IPPROTO_HOPOPTS 0 /* IPv6 Hop-by-Hop options */
+#define IPPROTO_IPV6 41 /* IPv6 header */
+#define IPPROTO_ROUTING 43 /* IPv6 Routing header */
+#define IPPROTO_FRAGMENT 44 /* IPv6 fragmentation header */
+#define IPPROTO_ESP 50 /* encapsulating security payload */
+#define IPPROTO_AH 51 /* authentication header */
+#define IPPROTO_ICMPV6 58 /* ICMPv6 */
+#define IPPROTO_NONE 59 /* IPv6 no next header */
+#define IPPROTO_DSTOPTS 60 /* IPv6 Destination options */
+#define IPPORT_ECHO 7
+#define IPPORT_DISCARD 9
+#define IPPORT_SYSTAT 11
+#define IPPORT_DAYTIME 13
+#define IPPORT_NETSTAT 15
+#define IPPORT_FTP 21
+#define IPPORT_TELNET 23
+#define IPPORT_SMTP 25
+#define IPPORT_TIMESERVER 37
+#define IPPORT_NAMESERVER 42
+#define IPPORT_WHOIS 43
+#define IPPORT_MTP 57
+#define IPPORT_TFTP 69
+#define IPPORT_RJE 77
+#define IPPORT_FINGER 79
+#define IPPORT_TTYLINK 87
+#define IPPORT_SUPDUP 95
+#define IPPORT_EXECSERVER 512
+#define IPPORT_LOGINSERVER 513
+#define IPPORT_CMDSERVER 514
+#define IPPORT_EFSSERVER 520
+#define IPPORT_BIFFUDP 512
+#define IPPORT_WHOSERVER 513
+#define IPPORT_ROUTESERVER 520
+#define IPPORT_RESERVED 1024
+#define IMPLINK_IP 155
+#define IMPLINK_LOWEXPER 156
+#define IMPLINK_HIGHEXPER 158
+struct in_addr {
+ union {
+ struct { u_char s_b1,s_b2,s_b3,s_b4; } S_un_b;
+ struct { u_short s_w1,s_w2; } S_un_w;
+ u_long S_addr;
+ } S_un;
+#define s_addr S_un.S_addr
+#define s_host S_un.S_un_b.s_b2
+#define s_net S_un.S_un_b.s_b1
+#define s_imp S_un.S_un_w.s_w2
+#define s_impno S_un.S_un_b.s_b4
+#define s_lh S_un.S_un_b.s_b3
+};
+#define IN_CLASSA(i) (((long)(i)&0x80000000) == 0)
+#define IN_CLASSA_NET 0xff000000
+#define IN_CLASSA_NSHIFT 24
+#define IN_CLASSA_HOST 0x00ffffff
+#define IN_CLASSA_MAX 128
+#define IN_CLASSB(i) (((long)(i)&0xc0000000)==0x80000000)
+#define IN_CLASSB_NET 0xffff0000
+#define IN_CLASSB_NSHIFT 16
+#define IN_CLASSB_HOST 0x0000ffff
+#define IN_CLASSB_MAX 65536
+#define IN_CLASSC(i) (((long)(i)&0xe0000000)==0xc0000000)
+#define IN_CLASSC_NET 0xffffff00
+#define IN_CLASSC_NSHIFT 8
+#define IN_CLASSC_HOST 0xff
+#define INADDR_ANY (u_long)0
+#define INADDR_LOOPBACK 0x7f000001
+#define INADDR_BROADCAST (u_long)0xffffffff
+#define INADDR_NONE 0xffffffff
+struct sockaddr_in {
+ short sin_family;
+ u_short sin_port;
+ struct in_addr sin_addr;
+ char sin_zero[8];
+};
+#define WSADESCRIPTION_LEN 256
+#define WSASYS_STATUS_LEN 128
+typedef struct WSAData {
+ WORD wVersion;
+ WORD wHighVersion;
+ char szDescription[WSADESCRIPTION_LEN+1];
+ char szSystemStatus[WSASYS_STATUS_LEN+1];
+ unsigned short iMaxSockets;
+ unsigned short iMaxUdpDg;
+ char * lpVendorInfo;
+} WSADATA;
+typedef WSADATA *LPWSADATA;
+
+#if ! (defined (__INSIDE_CYGWIN__) || defined (__INSIDE_MSYS__))
+#define IP_OPTIONS 1
+#define SO_DEBUG 1
+#define SO_ACCEPTCONN 2
+#define SO_REUSEADDR 4
+#define SO_KEEPALIVE 8
+#define SO_DONTROUTE 16
+#define SO_BROADCAST 32
+#define SO_USELOOPBACK 64
+#define SO_LINGER 128
+#define SO_OOBINLINE 256
+#define SO_DONTLINGER (u_int)(~SO_LINGER)
+#define SO_EXCLUSIVEADDRUSE ((u_int)(~SO_REUSEADDR))
+#define SO_SNDBUF 0x1001
+#define SO_RCVBUF 0x1002
+#define SO_SNDLOWAT 0x1003
+#define SO_RCVLOWAT 0x1004
+#define SO_SNDTIMEO 0x1005
+#define SO_RCVTIMEO 0x1006
+#define SO_ERROR 0x1007
+#define SO_TYPE 0x1008
+#endif /* ! (__INSIDE_CYGWIN__ || __INSIDE_MSYS__) */
+
+#define INVALID_SOCKET (SOCKET)(~0)
+#define SOCKET_ERROR (-1)
+#define SOCK_STREAM 1
+#define SOCK_DGRAM 2
+#define SOCK_RAW 3
+#define SOCK_RDM 4
+#define SOCK_SEQPACKET 5
+#define TCP_NODELAY 0x0001
+#define AF_UNSPEC 0
+#define AF_UNIX 1
+#define AF_INET 2
+#define AF_IMPLINK 3
+#define AF_PUP 4
+#define AF_CHAOS 5
+#define AF_IPX 6
+#define AF_NS 6
+#define AF_ISO 7
+#define AF_OSI AF_ISO
+#define AF_ECMA 8
+#define AF_DATAKIT 9
+#define AF_CCITT 10
+#define AF_SNA 11
+#define AF_DECnet 12
+#define AF_DLI 13
+#define AF_LAT 14
+#define AF_HYLINK 15
+#define AF_APPLETALK 16
+#define AF_NETBIOS 17
+#define AF_VOICEVIEW 18
+#define AF_FIREFOX 19
+#define AF_UNKNOWN1 20
+#define AF_BAN 21
+#define AF_ATM 22
+#define AF_INET6 23
+#define AF_CLUSTER 24
+#define AF_12844 25
+#define AF_IRDA 26
+#define AF_NETDES 28
+#if !(defined (__INSIDE_CYGWIN__) || defined (__INSIDE_MSYS__))
+#define AF_MAX 29
+struct sockaddr {
+ u_short sa_family;
+ char sa_data[14];
+};
+
+/* Portable IPv6/IPv4 version of sockaddr. Based on RFC 2553.
+ Pad to force 8 byte alignment and maximum size of 128 bytes. */
+
+/*
+ * Desired design of maximum size and alignment
+ */
+#define _SS_MAXSIZE 128
+#define _SS_ALIGNSIZE (sizeof (__int64))
+/*
+ * Definitions used for sockaddr_storage structure paddings design.
+ */
+#define _SS_PAD1SIZE (_SS_ALIGNSIZE - sizeof (short))
+#define _SS_PAD2SIZE (_SS_MAXSIZE - (sizeof (short) \
+ + _SS_PAD1SIZE \
+ + _SS_ALIGNSIZE))
+struct sockaddr_storage {
+ short ss_family;
+ char __ss_pad1[_SS_PAD1SIZE]; /* pad to 8 */
+ __int64 __ss_align; /* force alignment */
+ char __ss_pad2[_SS_PAD2SIZE]; /* pad to 128 */
+};
+#endif /* ! (__INSIDE_CYGWIN__ || __INSIDE_MSYS__) */
+
+struct sockproto {
+ u_short sp_family;
+ u_short sp_protocol;
+};
+#define PF_UNSPEC AF_UNSPEC
+#define PF_UNIX AF_UNIX
+#define PF_INET AF_INET
+#define PF_IMPLINK AF_IMPLINK
+#define PF_PUP AF_PUP
+#define PF_CHAOS AF_CHAOS
+#define PF_NS AF_NS
+#define PF_IPX AF_IPX
+#define PF_ISO AF_ISO
+#define PF_OSI AF_OSI
+#define PF_ECMA AF_ECMA
+#define PF_DATAKIT AF_DATAKIT
+#define PF_CCITT AF_CCITT
+#define PF_SNA AF_SNA
+#define PF_DECnet AF_DECnet
+#define PF_DLI AF_DLI
+#define PF_LAT AF_LAT
+#define PF_HYLINK AF_HYLINK
+#define PF_APPLETALK AF_APPLETALK
+#define PF_VOICEVIEW AF_VOICEVIEW
+#define PF_FIREFOX AF_FIREFOX
+#define PF_UNKNOWN1 AF_UNKNOWN1
+#define PF_BAN AF_BAN
+#define PF_ATM AF_ATM
+#define PF_INET6 AF_INET6
+#define PF_MAX AF_MAX
+#define SOL_SOCKET 0xffff
+#if ! (defined (__INSIDE_CYGWIN__) || defined (__INSIDE_MSYS__))
+#define SOMAXCONN 0x7fffffff /* (5) in WinSock1.1 */
+#define MSG_OOB 1
+#define MSG_PEEK 2
+#define MSG_DONTROUTE 4
+#endif /* ! (__INSIDE_CYGWIN__ || __INSIDE_MSYS__) */
+#define MSG_MAXIOVLEN 16
+#define MSG_PARTIAL 0x8000
+#define MAXGETHOSTSTRUCT 1024
+
+#define FD_READ_BIT 0
+#define FD_READ (1 << FD_READ_BIT)
+#define FD_WRITE_BIT 1
+#define FD_WRITE (1 << FD_WRITE_BIT)
+#define FD_OOB_BIT 2
+#define FD_OOB (1 << FD_OOB_BIT)
+#define FD_ACCEPT_BIT 3
+#define FD_ACCEPT (1 << FD_ACCEPT_BIT)
+#define FD_CONNECT_BIT 4
+#define FD_CONNECT (1 << FD_CONNECT_BIT)
+#define FD_CLOSE_BIT 5
+#define FD_CLOSE (1 << FD_CLOSE_BIT)
+/* winsock1.1 defines stop at FD_CLOSE (32) */
+#define FD_QOS_BIT 6
+#define FD_QOS (1 << FD_QOS_BIT)
+#define FD_GROUP_QOS_BIT 7
+#define FD_GROUP_QOS (1 << FD_GROUP_QOS_BIT)
+#define FD_ROUTING_INTERFACE_CHANGE_BIT 8
+#define FD_ROUTING_INTERFACE_CHANGE (1 << FD_ROUTING_INTERFACE_CHANGE_BIT)
+#define FD_ADDRESS_LIST_CHANGE_BIT 9
+#define FD_ADDRESS_LIST_CHANGE (1 << FD_ADDRESS_LIST_CHANGE_BIT)
+#define FD_MAX_EVENTS 10
+#define FD_ALL_EVENTS ((1 << FD_MAX_EVENTS) - 1)
+
+#ifndef WSABASEERR
+#define WSABASEERR 10000
+#define WSAEINTR (WSABASEERR+4)
+#define WSAEBADF (WSABASEERR+9)
+#define WSAEACCES (WSABASEERR+13)
+#define WSAEFAULT (WSABASEERR+14)
+#define WSAEINVAL (WSABASEERR+22)
+#define WSAEMFILE (WSABASEERR+24)
+#define WSAEWOULDBLOCK (WSABASEERR+35)
+#define WSAEINPROGRESS (WSABASEERR+36) /* deprecated on WinSock2 */
+#define WSAEALREADY (WSABASEERR+37)
+#define WSAENOTSOCK (WSABASEERR+38)
+#define WSAEDESTADDRREQ (WSABASEERR+39)
+#define WSAEMSGSIZE (WSABASEERR+40)
+#define WSAEPROTOTYPE (WSABASEERR+41)
+#define WSAENOPROTOOPT (WSABASEERR+42)
+#define WSAEPROTONOSUPPORT (WSABASEERR+43)
+#define WSAESOCKTNOSUPPORT (WSABASEERR+44)
+#define WSAEOPNOTSUPP (WSABASEERR+45)
+#define WSAEPFNOSUPPORT (WSABASEERR+46)
+#define WSAEAFNOSUPPORT (WSABASEERR+47)
+#define WSAEADDRINUSE (WSABASEERR+48)
+#define WSAEADDRNOTAVAIL (WSABASEERR+49)
+#define WSAENETDOWN (WSABASEERR+50)
+#define WSAENETUNREACH (WSABASEERR+51)
+#define WSAENETRESET (WSABASEERR+52)
+#define WSAECONNABORTED (WSABASEERR+53)
+#define WSAECONNRESET (WSABASEERR+54)
+#define WSAENOBUFS (WSABASEERR+55)
+#define WSAEISCONN (WSABASEERR+56)
+#define WSAENOTCONN (WSABASEERR+57)
+#define WSAESHUTDOWN (WSABASEERR+58)
+#define WSAETOOMANYREFS (WSABASEERR+59)
+#define WSAETIMEDOUT (WSABASEERR+60)
+#define WSAECONNREFUSED (WSABASEERR+61)
+#define WSAELOOP (WSABASEERR+62)
+#define WSAENAMETOOLONG (WSABASEERR+63)
+#define WSAEHOSTDOWN (WSABASEERR+64)
+#define WSAEHOSTUNREACH (WSABASEERR+65)
+#define WSAENOTEMPTY (WSABASEERR+66)
+#define WSAEPROCLIM (WSABASEERR+67)
+#define WSAEUSERS (WSABASEERR+68)
+#define WSAEDQUOT (WSABASEERR+69)
+#define WSAESTALE (WSABASEERR+70)
+#define WSAEREMOTE (WSABASEERR+71)
+#define WSAEDISCON (WSABASEERR+101)
+#define WSASYSNOTREADY (WSABASEERR+91)
+#define WSAVERNOTSUPPORTED (WSABASEERR+92)
+#define WSANOTINITIALISED (WSABASEERR+93)
+#define WSAHOST_NOT_FOUND (WSABASEERR+1001)
+#define WSATRY_AGAIN (WSABASEERR+1002)
+#define WSANO_RECOVERY (WSABASEERR+1003)
+#define WSANO_DATA (WSABASEERR+1004)
+
+/* WinSock2 specific error codes */
+#define WSAENOMORE (WSABASEERR+102)
+#define WSAECANCELLED (WSABASEERR+103)
+#define WSAEINVALIDPROCTABLE (WSABASEERR+104)
+#define WSAEINVALIDPROVIDER (WSABASEERR+105)
+#define WSAEPROVIDERFAILEDINIT (WSABASEERR+106)
+#define WSASYSCALLFAILURE (WSABASEERR+107)
+#define WSASERVICE_NOT_FOUND (WSABASEERR+108)
+#define WSATYPE_NOT_FOUND (WSABASEERR+109)
+#define WSA_E_NO_MORE (WSABASEERR+110)
+#define WSA_E_CANCELLED (WSABASEERR+111)
+#define WSAEREFUSED (WSABASEERR+112)
+
+/* WS QualityofService errors */
+#define WSA_QOS_RECEIVERS (WSABASEERR + 1005)
+#define WSA_QOS_SENDERS (WSABASEERR + 1006)
+#define WSA_QOS_NO_SENDERS (WSABASEERR + 1007)
+#define WSA_QOS_NO_RECEIVERS (WSABASEERR + 1008)
+#define WSA_QOS_REQUEST_CONFIRMED (WSABASEERR + 1009)
+#define WSA_QOS_ADMISSION_FAILURE (WSABASEERR + 1010)
+#define WSA_QOS_POLICY_FAILURE (WSABASEERR + 1011)
+#define WSA_QOS_BAD_STYLE (WSABASEERR + 1012)
+#define WSA_QOS_BAD_OBJECT (WSABASEERR + 1013)
+#define WSA_QOS_TRAFFIC_CTRL_ERROR (WSABASEERR + 1014)
+#define WSA_QOS_GENERIC_ERROR (WSABASEERR + 1015)
+#define WSA_QOS_ESERVICETYPE (WSABASEERR + 1016)
+#define WSA_QOS_EFLOWSPEC (WSABASEERR + 1017)
+#define WSA_QOS_EPROVSPECBUF (WSABASEERR + 1018)
+#define WSA_QOS_EFILTERSTYLE (WSABASEERR + 1019)
+#define WSA_QOS_EFILTERTYPE (WSABASEERR + 1020)
+#define WSA_QOS_EFILTERCOUNT (WSABASEERR + 1021)
+#define WSA_QOS_EOBJLENGTH (WSABASEERR + 1022)
+#define WSA_QOS_EFLOWCOUNT (WSABASEERR + 1023)
+#define WSA_QOS_EUNKOWNPSOBJ (WSABASEERR + 1024)
+#define WSA_QOS_EPOLICYOBJ (WSABASEERR + 1025)
+#define WSA_QOS_EFLOWDESC (WSABASEERR + 1026)
+#define WSA_QOS_EPSFLOWSPEC (WSABASEERR + 1027)
+#define WSA_QOS_EPSFILTERSPEC (WSABASEERR + 1028)
+#define WSA_QOS_ESDMODEOBJ (WSABASEERR + 1029)
+#define WSA_QOS_ESHAPERATEOBJ (WSABASEERR + 1030)
+#define WSA_QOS_RESERVED_PETYPE (WSABASEERR + 1031)
+
+#endif /* !WSABASEERR */
+
+#define WSANO_ADDRESS WSANO_DATA
+#if !(defined (__INSIDE_CYGWIN__) || defined (__INSIDE_MSYS__))
+#define h_errno WSAGetLastError()
+#define HOST_NOT_FOUND WSAHOST_NOT_FOUND
+#define TRY_AGAIN WSATRY_AGAIN
+#define NO_RECOVERY WSANO_RECOVERY
+#define NO_DATA WSANO_DATA
+#define NO_ADDRESS WSANO_ADDRESS
+#endif /* ! (__INSIDE_CYGWIN__ || __INSIDE_MSYS__) */
+WINSOCK_API_LINKAGE SOCKET PASCAL accept(SOCKET,struct sockaddr*,int*);
+WINSOCK_API_LINKAGE int PASCAL bind(SOCKET,const struct sockaddr*,int);
+WINSOCK_API_LINKAGE int PASCAL closesocket(SOCKET);
+WINSOCK_API_LINKAGE int PASCAL connect(SOCKET,const struct sockaddr*,int);
+WINSOCK_API_LINKAGE int PASCAL ioctlsocket(SOCKET,long,u_long *);
+WINSOCK_API_LINKAGE int PASCAL getpeername(SOCKET,struct sockaddr*,int*);
+WINSOCK_API_LINKAGE int PASCAL getsockname(SOCKET,struct sockaddr*,int*);
+WINSOCK_API_LINKAGE int PASCAL getsockopt(SOCKET,int,int,char*,int*);
+WINSOCK_API_LINKAGE unsigned long PASCAL inet_addr(const char*);
+WINSOCK_API_LINKAGE DECLARE_STDCALL_P(char *) inet_ntoa(struct in_addr);
+WINSOCK_API_LINKAGE int PASCAL listen(SOCKET,int);
+WINSOCK_API_LINKAGE int PASCAL recv(SOCKET,char*,int,int);
+WINSOCK_API_LINKAGE int PASCAL recvfrom(SOCKET,char*,int,int,struct sockaddr*,int*);
+WINSOCK_API_LINKAGE int PASCAL send(SOCKET,const char*,int,int);
+WINSOCK_API_LINKAGE int PASCAL sendto(SOCKET,const char*,int,int,const struct sockaddr*,int);
+WINSOCK_API_LINKAGE int PASCAL setsockopt(SOCKET,int,int,const char*,int);
+WINSOCK_API_LINKAGE int PASCAL shutdown(SOCKET,int);
+WINSOCK_API_LINKAGE SOCKET PASCAL socket(int,int,int);
+WINSOCK_API_LINKAGE DECLARE_STDCALL_P(struct hostent *) gethostbyaddr(const char*,int,int);
+WINSOCK_API_LINKAGE DECLARE_STDCALL_P(struct hostent *) gethostbyname(const char*);
+WINSOCK_API_LINKAGE DECLARE_STDCALL_P(struct servent *) getservbyport(int,const char*);
+WINSOCK_API_LINKAGE DECLARE_STDCALL_P(struct servent *) getservbyname(const char*,const char*);
+WINSOCK_API_LINKAGE DECLARE_STDCALL_P(struct protoent *) getprotobynumber(int);
+WINSOCK_API_LINKAGE DECLARE_STDCALL_P(struct protoent *) getprotobyname(const char*);
+typedef SOCKET (PASCAL * LPFN_ACCEPT)(SOCKET, struct sockaddr*,int *);
+typedef int (PASCAL * LPFN_BIND)(SOCKET, const struct sockaddr*,int);
+typedef int (PASCAL * LPFN_CLOSESOCKET)(SOCKET);
+typedef int (PASCAL * LPFN_CONNECT)(SOCKET, const struct sockaddr*,int);
+typedef int (PASCAL * LPFN_IOCTLSOCKET)(SOCKET, long, u_long*);
+typedef int (PASCAL * LPFN_GETPEERNAME)(SOCKET, struct sockaddr*, int*);
+typedef int(PASCAL * LPFN_GETSOCKNAME)(SOCKET, struct sockaddr*, int*);
+typedef int(PASCAL * LPFN_GETSOCKOPT)(SOCKET, int, int, char*, int*);
+typedef u_long(PASCAL * LPFN_HTONL)(u_long);
+typedef u_short(PASCAL * LPFN_HTONS)(u_short);
+typedef unsigned long(PASCAL * LPFN_INET_ADDR)(const char*);
+typedef char*(PASCAL * LPFN_INET_NTOA)(struct in_addr);
+typedef int(PASCAL * LPFN_LISTEN)(SOCKET, int);
+typedef u_long(PASCAL * LPFN_NTOHL)(u_long);
+typedef u_short(PASCAL * LPFN_NTOHS)(u_short);
+typedef int(PASCAL * LPFN_RECV)(SOCKET, char*, int, int);
+typedef int(PASCAL * LPFN_RECVFROM)(SOCKET, char*, int, int, struct sockaddr*, int*);
+typedef int(PASCAL * LPFN_SELECT)(int, fd_set*, fd_set*, fd_set*, const struct timeval*);
+typedef int(PASCAL * LPFN_SEND)(SOCKET, const char*, int, int);
+typedef int(PASCAL * LPFN_SENDTO)(SOCKET, const char*, int, int, const struct sockaddr*, int);
+typedef int(PASCAL * LPFN_SETSOCKOPT)(SOCKET, int, int, const char*, int);
+typedef int(PASCAL * LPFN_SHUTDOWN)(SOCKET, int);
+typedef SOCKET(PASCAL * LPFN_SOCKET)(int, int, int);
+typedef struct hostent*(PASCAL * LPFN_GETHOSTBYADDR)( const char*, int, int);
+typedef struct hostent*(PASCAL * LPFN_GETHOSTBYNAME)( const char*);
+typedef int(PASCAL * LPFN_GETHOSTNAME)(char*, int);
+typedef struct servent*(PASCAL * LPFN_GETSERVBYPORT)(int, const char*);
+typedef struct servent*(PASCAL * LPFN_GETSERVBYNAME)(const char*, const char*);
+typedef struct protoent*(PASCAL * LPFN_GETPROTOBYNUMBER)(int);
+typedef struct protoent*(PASCAL * LPFN_GETPROTOBYNAME)(const char*);
+
+WINSOCK_API_LINKAGE int PASCAL WSAStartup(WORD,LPWSADATA);
+WINSOCK_API_LINKAGE int PASCAL WSACleanup(void);
+WINSOCK_API_LINKAGE void PASCAL WSASetLastError(int);
+WINSOCK_API_LINKAGE int PASCAL WSAGetLastError(void);
+WINSOCK_API_LINKAGE typedef int(PASCAL * LPFN_WSASTARTUP)(WORD, LPWSADATA);
+typedef int(PASCAL * LPFN_WSACLEANUP)(void);
+typedef void(PASCAL * LPFN_WSASETLASTERROR)(int);
+typedef int(PASCAL * LPFN_WSAGETLASTERROR)(void);
+/*
+ * Pseudo-blocking functions are deprecated in WinSock2
+ * spec. Use threads instead.
+ */
+WINSOCK_API_LINKAGE BOOL PASCAL WSAIsBlocking(void);
+WINSOCK_API_LINKAGE int PASCAL WSAUnhookBlockingHook(void);
+WINSOCK_API_LINKAGE FARPROC PASCAL WSASetBlockingHook(FARPROC);
+WINSOCK_API_LINKAGE int PASCAL WSACancelBlockingCall(void);
+typedef BOOL(PASCAL * LPFN_WSAISBLOCKING)(void);
+typedef int(PASCAL * LPFN_WSAUNHOOKBLOCKINGHOOK)(void);
+typedef FARPROC (PASCAL * LPFN_WSASETBLOCKINGHOOK)(FARPROC);
+typedef int(PASCAL * LPFN_WSACANCELBLOCKINGCALL)(void);
+
+WINSOCK_API_LINKAGE HANDLE PASCAL WSAAsyncGetServByName(HWND,u_int,const char*,const char*,char*,int);
+WINSOCK_API_LINKAGE HANDLE PASCAL WSAAsyncGetServByPort(HWND,u_int,int,const char*,char*,int);
+WINSOCK_API_LINKAGE HANDLE PASCAL WSAAsyncGetProtoByName(HWND,u_int,const char*,char*,int);
+WINSOCK_API_LINKAGE HANDLE PASCAL WSAAsyncGetProtoByNumber(HWND,u_int,int,char*,int);
+WINSOCK_API_LINKAGE HANDLE PASCAL WSAAsyncGetHostByName(HWND,u_int,const char*,char*,int);
+WINSOCK_API_LINKAGE HANDLE PASCAL WSAAsyncGetHostByAddr(HWND,u_int,const char*,int,int,char*,int);
+WINSOCK_API_LINKAGE int PASCAL WSACancelAsyncRequest(HANDLE);
+WINSOCK_API_LINKAGE int PASCAL WSAAsyncSelect(SOCKET,HWND,u_int,long);
+typedef HANDLE(PASCAL * LPFN_WSAASYNCGETSERVBYNAME)(HWND, u_int, const char *, const char *, char *, int);
+typedef HANDLE(PASCAL * LPFN_WSAASYNCGETSERVBYPORT)(HWND, u_int, int, const char *, char *, int);
+typedef HANDLE(PASCAL * LPFN_WSAASYNCGETPROTOBYNAME)(HWND, u_int, const char*, char*, int);
+typedef HANDLE(PASCAL * LPFN_WSAASYNCGETPROTOBYNUMBER)(HWND, u_int, int, char*, int);
+typedef HANDLE(PASCAL * LPFN_WSAASYNCGETHOSTBYADDR)(HWND, u_int, const char*, int, int, char*, int);
+typedef int(PASCAL * LPFN_WSACANCELASYNCREQUEST)(HANDLE);
+typedef int(PASCAL * LPFN_WSAASYNCSELECT)(SOCKET, HWND, u_int, long);
+#if ! (defined (__INSIDE_CYGWIN__) || defined (__INSIDE_MSYS__))
+WINSOCK_API_LINKAGE u_long PASCAL htonl(u_long);
+WINSOCK_API_LINKAGE u_long PASCAL ntohl(u_long);
+WINSOCK_API_LINKAGE u_short PASCAL htons(u_short);
+WINSOCK_API_LINKAGE u_short PASCAL ntohs(u_short);
+WINSOCK_API_LINKAGE int PASCAL select(int nfds,fd_set*,fd_set*,fd_set*,const struct timeval*);
+#endif /* ! (__INSIDE_CYGWIN__ || __INSIDE_MSYS__) */
+
+int PASCAL gethostname(char*,int);
+
+#define WSAMAKEASYNCREPLY(b,e) MAKELONG(b,e)
+#define WSAMAKESELECTREPLY(e,error) MAKELONG(e,error)
+#define WSAGETASYNCBUFLEN(l) LOWORD(l)
+#define WSAGETASYNCERROR(l) HIWORD(l)
+#define WSAGETSELECTEVENT(l) LOWORD(l)
+#define WSAGETSELECTERROR(l) HIWORD(l)
+
+typedef struct sockaddr SOCKADDR;
+typedef struct sockaddr *PSOCKADDR;
+typedef struct sockaddr *LPSOCKADDR;
+typedef struct sockaddr_storage SOCKADDR_STORAGE, *PSOCKADDR_STORAGE;
+typedef struct sockaddr_in SOCKADDR_IN;
+typedef struct sockaddr_in *PSOCKADDR_IN;
+typedef struct sockaddr_in *LPSOCKADDR_IN;
+typedef struct linger LINGER;
+typedef struct linger *PLINGER;
+typedef struct linger *LPLINGER;
+typedef struct in_addr IN_ADDR;
+typedef struct in_addr *PIN_ADDR;
+typedef struct in_addr *LPIN_ADDR;
+typedef struct fd_set FD_SET;
+typedef struct fd_set *PFD_SET;
+typedef struct fd_set *LPFD_SET;
+typedef struct hostent HOSTENT;
+typedef struct hostent *PHOSTENT;
+typedef struct hostent *LPHOSTENT;
+typedef struct servent SERVENT;
+typedef struct servent *PSERVENT;
+typedef struct servent *LPSERVENT;
+typedef struct protoent PROTOENT;
+typedef struct protoent *PPROTOENT;
+typedef struct protoent *LPPROTOENT;
+typedef struct timeval TIMEVAL;
+typedef struct timeval *PTIMEVAL;
+typedef struct timeval *LPTIMEVAL;
+
+/* winsock2 additions */
+#define ADDR_ANY INADDR_ANY
+
+#define IN_CLASSD(i) (((long)(i) & 0xf0000000) == 0xe0000000)
+#define IN_CLASSD_NET 0xf0000000
+#define IN_CLASSD_NSHIFT 28
+#define IN_CLASSD_HOST 0x0fffffff
+#define IN_MULTICAST(i) IN_CLASSD(i)
+
+#define FROM_PROTOCOL_INFO (-1)
+
+#define SO_DONTLINGER (u_int)(~SO_LINGER)
+#define SO_GROUP_ID 0x2001
+#define SO_GROUP_PRIORITY 0x2002
+#define SO_MAX_MSG_SIZE 0x2003
+#define SO_PROTOCOL_INFOA 0x2004
+#define SO_PROTOCOL_INFOW 0x2005
+#ifdef UNICODE
+#define SO_PROTOCOL_INFO SO_PROTOCOL_INFOW
+#else
+#define SO_PROTOCOL_INFO SO_PROTOCOL_INFOA
+#endif
+#define PVD_CONFIG 0x3001
+
+#define MSG_INTERRUPT 0x10
+#define MSG_MAXIOVLEN 16
+
+#define WSAAPI WINAPI
+#define WSAEVENT HANDLE
+#define LPWSAEVENT LPHANDLE
+#define WSAOVERLAPPED OVERLAPPED
+typedef struct _OVERLAPPED *LPWSAOVERLAPPED;
+
+#define WSA_IO_PENDING (ERROR_IO_PENDING)
+#define WSA_IO_INCOMPLETE (ERROR_IO_INCOMPLETE)
+#define WSA_INVALID_HANDLE (ERROR_INVALID_HANDLE)
+#define WSA_INVALID_PARAMETER (ERROR_INVALID_PARAMETER)
+#define WSA_NOT_ENOUGH_MEMORY (ERROR_NOT_ENOUGH_MEMORY)
+#define WSA_OPERATION_ABORTED (ERROR_OPERATION_ABORTED)
+
+#define WSA_INVALID_EVENT ((WSAEVENT)NULL)
+#define WSA_MAXIMUM_WAIT_EVENTS (MAXIMUM_WAIT_OBJECTS)
+#define WSA_WAIT_FAILED ((DWORD)-1L)
+#define WSA_WAIT_EVENT_0 (WAIT_OBJECT_0)
+#define WSA_WAIT_IO_COMPLETION (WAIT_IO_COMPLETION)
+#define WSA_WAIT_TIMEOUT (WAIT_TIMEOUT)
+#define WSA_INFINITE (INFINITE)
+
+typedef struct _WSABUF {
+ unsigned long len;
+ char *buf;
+} WSABUF, *LPWSABUF;
+
+typedef enum
+{
+ BestEffortService,
+ ControlledLoadService,
+ PredictiveService,
+ GuaranteedDelayService,
+ GuaranteedService
+} GUARANTEE;
+
+/* TODO: FLOWSPEC and related definitions belong in qos.h */
+
+/*
+ Windows Sockets 2 Application Programming Interface,
+ revision 2.2.2 (1997) uses the type uint32 for SERVICETYPE
+ and the elements of _flowspec, but the type uint32 is not defined
+ or used anywhere else in the w32api. For now, just use
+ unsigned int, which is 32 bits on _WIN32 and _WIN64.
+*/
+
+typedef unsigned int SERVICETYPE;
+typedef struct _flowspec
+{
+ unsigned int TokenRate;
+ unsigned int TokenBucketSize;
+ unsigned int PeakBandwidth;
+ unsigned int Latency;
+ unsigned int DelayVariation;
+ SERVICETYPE ServiceType;
+ unsigned int MaxSduSize;
+ unsigned int MinimumPolicedSize;
+ } FLOWSPEC, *PFLOWSPEC, *LPFLOWSPEC;
+
+typedef struct _QualityOfService
+{
+ FLOWSPEC SendingFlowspec;
+ FLOWSPEC ReceivingFlowspec;
+ WSABUF ProviderSpecific;
+} QOS, *LPQOS;
+
+#define CF_ACCEPT 0x0000
+#define CF_REJECT 0x0001
+#define CF_DEFER 0x0002
+#define SD_RECEIVE 0x00
+#define SD_SEND 0x01
+#define SD_BOTH 0x02
+typedef unsigned int GROUP;
+
+#define SG_UNCONSTRAINED_GROUP 0x01
+#define SG_CONSTRAINED_GROUP 0x02
+typedef struct _WSANETWORKEVENTS {
+ long lNetworkEvents;
+ int iErrorCode[FD_MAX_EVENTS];
+} WSANETWORKEVENTS, *LPWSANETWORKEVENTS;
+
+#define MAX_PROTOCOL_CHAIN 7
+
+#define BASE_PROTOCOL 1
+#define LAYERED_PROTOCOL 0
+
+typedef enum _WSAESETSERVICEOP
+{
+ RNRSERVICE_REGISTER=0,
+ RNRSERVICE_DEREGISTER,
+ RNRSERVICE_DELETE
+} WSAESETSERVICEOP, *PWSAESETSERVICEOP, *LPWSAESETSERVICEOP;
+
+typedef struct _AFPROTOCOLS {
+ INT iAddressFamily;
+ INT iProtocol;
+} AFPROTOCOLS, *PAFPROTOCOLS, *LPAFPROTOCOLS;
+
+typedef enum _WSAEcomparator
+{
+ COMP_EQUAL = 0,
+ COMP_NOTLESS
+} WSAECOMPARATOR, *PWSAECOMPARATOR, *LPWSAECOMPARATOR;
+
+typedef struct _WSAVersion
+{
+ DWORD dwVersion;
+ WSAECOMPARATOR ecHow;
+} WSAVERSION, *PWSAVERSION, *LPWSAVERSION;
+
+#ifndef __CSADDR_T_DEFINED /* also in nspapi.h */
+#define __CSADDR_T_DEFINED
+typedef struct _SOCKET_ADDRESS {
+ LPSOCKADDR lpSockaddr;
+ INT iSockaddrLength;
+} SOCKET_ADDRESS,*PSOCKET_ADDRESS,*LPSOCKET_ADDRESS;
+typedef struct _CSADDR_INFO {
+ SOCKET_ADDRESS LocalAddr;
+ SOCKET_ADDRESS RemoteAddr;
+ INT iSocketType;
+ INT iProtocol;
+} CSADDR_INFO,*PCSADDR_INFO,*LPCSADDR_INFO;
+#endif
+
+typedef struct _SOCKET_ADDRESS_LIST {
+ INT iAddressCount;
+ SOCKET_ADDRESS Address[1];
+} SOCKET_ADDRESS_LIST, * LPSOCKET_ADDRESS_LIST;
+
+#ifndef __BLOB_T_DEFINED /* also in wtypes.h and nspapi.h */
+#define __BLOB_T_DEFINED
+typedef struct _BLOB {
+ ULONG cbSize;
+ BYTE *pBlobData;
+} BLOB,*PBLOB,*LPBLOB;
+#endif
+
+typedef struct _WSAQuerySetA
+{
+ DWORD dwSize;
+ LPSTR lpszServiceInstanceName;
+ LPGUID lpServiceClassId;
+ LPWSAVERSION lpVersion;
+ LPSTR lpszComment;
+ DWORD dwNameSpace;
+ LPGUID lpNSProviderId;
+ LPSTR lpszContext;
+ DWORD dwNumberOfProtocols;
+ LPAFPROTOCOLS lpafpProtocols;
+ LPSTR lpszQueryString;
+ DWORD dwNumberOfCsAddrs;
+ LPCSADDR_INFO lpcsaBuffer;
+ DWORD dwOutputFlags;
+ LPBLOB lpBlob;
+} WSAQUERYSETA, *PWSAQUERYSETA, *LPWSAQUERYSETA;
+
+typedef struct _WSAQuerySetW
+{
+ DWORD dwSize;
+ LPWSTR lpszServiceInstanceName;
+ LPGUID lpServiceClassId;
+ LPWSAVERSION lpVersion;
+ LPWSTR lpszComment;
+ DWORD dwNameSpace;
+ LPGUID lpNSProviderId;
+ LPWSTR lpszContext;
+ DWORD dwNumberOfProtocols;
+ LPAFPROTOCOLS lpafpProtocols;
+ LPWSTR lpszQueryString;
+ DWORD dwNumberOfCsAddrs;
+ LPCSADDR_INFO lpcsaBuffer;
+ DWORD dwOutputFlags;
+ LPBLOB lpBlob;
+} WSAQUERYSETW, *PWSAQUERYSETW, *LPWSAQUERYSETW;
+
+#ifdef UNICODE
+typedef WSAQUERYSETW WSAQUERYSET;
+typedef PWSAQUERYSETW PWSAQUERYSET;
+typedef LPWSAQUERYSETW LPWSAQUERYSET;
+#else
+typedef WSAQUERYSETA WSAQUERYSET;
+typedef PWSAQUERYSETA PWSAQUERYSET;
+typedef LPWSAQUERYSETA LPWSAQUERYSET;
+#endif
+
+#define LUP_DEEP 0x0001
+#define LUP_CONTAINERS 0x0002
+#define LUP_NOCONTAINERS 0x0004
+#define LUP_NEAREST 0x0008
+#define LUP_RETURN_NAME 0x0010
+#define LUP_RETURN_TYPE 0x0020
+#define LUP_RETURN_VERSION 0x0040
+#define LUP_RETURN_COMMENT 0x0080
+#define LUP_RETURN_ADDR 0x0100
+#define LUP_RETURN_BLOB 0x0200
+#define LUP_RETURN_ALIASES 0x0400
+#define LUP_RETURN_QUERY_STRING 0x0800
+#define LUP_RETURN_ALL 0x0FF0
+#define LUP_RES_SERVICE 0x8000
+#define LUP_FLUSHCACHE 0x1000
+#define LUP_FLUSHPREVIOUS 0x2000
+
+typedef struct _WSANSClassInfoA
+{
+ LPSTR lpszName;
+ DWORD dwNameSpace;
+ DWORD dwValueType;
+ DWORD dwValueSize;
+ LPVOID lpValue;
+} WSANSCLASSINFOA, *PWSANSCLASSINFOA, *LPWSANSCLASSINFOA;
+
+typedef struct _WSANSClassInfoW
+{
+ LPWSTR lpszName;
+ DWORD dwNameSpace;
+ DWORD dwValueType;
+ DWORD dwValueSize;
+ LPVOID lpValue;
+} WSANSCLASSINFOW, *PWSANSCLASSINFOW, *LPWSANSCLASSINFOW;
+
+#ifdef UNICODE
+typedef WSANSCLASSINFOW WSANSCLASSINFO;
+typedef PWSANSCLASSINFOW PWSANSCLASSINFO;
+typedef LPWSANSCLASSINFOW LPWSANSCLASSINFO;
+#else
+typedef WSANSCLASSINFOA WSANSCLASSINFO;
+typedef PWSANSCLASSINFOA PWSANSCLASSINFO;
+typedef LPWSANSCLASSINFOA LPWSANSCLASSINFO;
+#endif
+
+typedef struct _WSAServiceClassInfoA
+{
+ LPGUID lpServiceClassId;
+ LPSTR lpszServiceClassName;
+ DWORD dwCount;
+ LPWSANSCLASSINFOA lpClassInfos;
+} WSASERVICECLASSINFOA, *PWSASERVICECLASSINFOA, *LPWSASERVICECLASSINFOA;
+
+typedef struct _WSAServiceClassInfoW
+{
+ LPGUID lpServiceClassId;
+ LPWSTR lpszServiceClassName;
+ DWORD dwCount;
+ LPWSANSCLASSINFOW lpClassInfos;
+} WSASERVICECLASSINFOW, *PWSASERVICECLASSINFOW, *LPWSASERVICECLASSINFOW;
+
+#ifdef UNICODE
+typedef WSASERVICECLASSINFOW WSASERVICECLASSINFO;
+typedef PWSASERVICECLASSINFOW PWSASERVICECLASSINFO;
+typedef LPWSASERVICECLASSINFOW LPWSASERVICECLASSINFO;
+#else
+typedef WSASERVICECLASSINFOA WSASERVICECLASSINFO;
+typedef PWSASERVICECLASSINFOA PWSASERVICECLASSINFO;
+typedef LPWSASERVICECLASSINFOA LPWSASERVICECLASSINFO;
+#endif
+
+typedef struct _WSANAMESPACE_INFOA {
+ GUID NSProviderId;
+ DWORD dwNameSpace;
+ BOOL fActive;
+ DWORD dwVersion;
+ LPSTR lpszIdentifier;
+} WSANAMESPACE_INFOA, *PWSANAMESPACE_INFOA, *LPWSANAMESPACE_INFOA;
+
+typedef struct _WSANAMESPACE_INFOW {
+ GUID NSProviderId;
+ DWORD dwNameSpace;
+ BOOL fActive;
+ DWORD dwVersion;
+ LPWSTR lpszIdentifier;
+} WSANAMESPACE_INFOW, *PWSANAMESPACE_INFOW, *LPWSANAMESPACE_INFOW;
+
+#ifdef UNICODE
+typedef WSANAMESPACE_INFOW WSANAMESPACE_INFO;
+typedef PWSANAMESPACE_INFOW PWSANAMESPACE_INFO;
+typedef LPWSANAMESPACE_INFOW LPWSANAMESPACE_INFO;
+#else
+typedef WSANAMESPACE_INFOA WSANAMESPACE_INFO;
+typedef PWSANAMESPACE_INFOA PWSANAMESPACE_INFO;
+typedef LPWSANAMESPACE_INFOA LPWSANAMESPACE_INFO;
+#endif
+
+typedef struct _WSAPROTOCOLCHAIN {
+ int ChainLen;
+ DWORD ChainEntries[MAX_PROTOCOL_CHAIN];
+} WSAPROTOCOLCHAIN, *LPWSAPROTOCOLCHAIN;
+
+#define WSAPROTOCOL_LEN 255
+
+typedef struct _WSAPROTOCOL_INFOA {
+ DWORD dwServiceFlags1;
+ DWORD dwServiceFlags2;
+ DWORD dwServiceFlags3;
+ DWORD dwServiceFlags4;
+ DWORD dwProviderFlags;
+ GUID ProviderId;
+ DWORD dwCatalogEntryId;
+ WSAPROTOCOLCHAIN ProtocolChain;
+ int iVersion;
+ int iAddressFamily;
+ int iMaxSockAddr;
+ int iMinSockAddr;
+ int iSocketType;
+ int iProtocol;
+ int iProtocolMaxOffset;
+ int iNetworkByteOrder;
+ int iSecurityScheme;
+ DWORD dwMessageSize;
+ DWORD dwProviderReserved;
+ CHAR szProtocol[WSAPROTOCOL_LEN+1];
+} WSAPROTOCOL_INFOA, *LPWSAPROTOCOL_INFOA;
+
+typedef struct _WSAPROTOCOL_INFOW {
+ DWORD dwServiceFlags1;
+ DWORD dwServiceFlags2;
+ DWORD dwServiceFlags3;
+ DWORD dwServiceFlags4;
+ DWORD dwProviderFlags;
+ GUID ProviderId;
+ DWORD dwCatalogEntryId;
+ WSAPROTOCOLCHAIN ProtocolChain;
+ int iVersion;
+ int iAddressFamily;
+ int iMaxSockAddr;
+ int iMinSockAddr;
+ int iSocketType;
+ int iProtocol;
+ int iProtocolMaxOffset;
+ int iNetworkByteOrder;
+ int iSecurityScheme;
+ DWORD dwMessageSize;
+ DWORD dwProviderReserved;
+ WCHAR szProtocol[WSAPROTOCOL_LEN+1];
+} WSAPROTOCOL_INFOW, * LPWSAPROTOCOL_INFOW;
+
+typedef int (CALLBACK *LPCONDITIONPROC)(LPWSABUF, LPWSABUF, LPQOS, LPQOS, LPWSABUF, LPWSABUF, GROUP *, DWORD);
+typedef void (WINAPI *LPWSAOVERLAPPED_COMPLETION_ROUTINE)(DWORD, DWORD, LPWSAOVERLAPPED, DWORD);
+
+
+#ifdef UNICODE
+typedef WSAPROTOCOL_INFOW WSAPROTOCOL_INFO;
+typedef LPWSAPROTOCOL_INFOW LPWSAPROTOCOL_INFO;
+#else
+typedef WSAPROTOCOL_INFOA WSAPROTOCOL_INFO;
+typedef LPWSAPROTOCOL_INFOA LPWSAPROTOCOL_INFO;
+#endif
+
+/* Needed for XP & .NET Server function WSANSPIoctl. */
+typedef enum _WSACOMPLETIONTYPE {
+ NSP_NOTIFY_IMMEDIATELY = 0,
+ NSP_NOTIFY_HWND,
+ NSP_NOTIFY_EVENT,
+ NSP_NOTIFY_PORT,
+ NSP_NOTIFY_APC
+} WSACOMPLETIONTYPE, * PWSACOMPLETIONTYPE, * LPWSACOMPLETIONTYPE;
+typedef struct _WSACOMPLETION {
+ WSACOMPLETIONTYPE Type;
+ union {
+ struct {
+ HWND hWnd;
+ UINT uMsg;
+ WPARAM context;
+ } WindowMessage;
+ struct {
+ LPWSAOVERLAPPED lpOverlapped;
+ } Event;
+ struct {
+ LPWSAOVERLAPPED lpOverlapped;
+ LPWSAOVERLAPPED_COMPLETION_ROUTINE lpfnCompletionProc;
+ } Apc;
+ struct {
+ LPWSAOVERLAPPED lpOverlapped;
+ HANDLE hPort;
+ ULONG_PTR Key;
+ } Port;
+ } Parameters;
+} WSACOMPLETION, *PWSACOMPLETION, *LPWSACOMPLETION;
+
+#define PFL_MULTIPLE_PROTO_ENTRIES 0x00000001
+#define PFL_RECOMMENDED_PROTO_ENTRY 0x00000002
+#define PFL_HIDDEN 0x00000004
+#define PFL_MATCHES_PROTOCOL_ZERO 0x00000008
+#define XP1_CONNECTIONLESS 0x00000001
+#define XP1_GUARANTEED_DELIVERY 0x00000002
+#define XP1_GUARANTEED_ORDER 0x00000004
+#define XP1_MESSAGE_ORIENTED 0x00000008
+#define XP1_PSEUDO_STREAM 0x00000010
+#define XP1_GRACEFUL_CLOSE 0x00000020
+#define XP1_EXPEDITED_DATA 0x00000040
+#define XP1_CONNECT_DATA 0x00000080
+#define XP1_DISCONNECT_DATA 0x00000100
+#define XP1_SUPPORT_BROADCAST 0x00000200
+#define XP1_SUPPORT_MULTIPOINT 0x00000400
+#define XP1_MULTIPOINT_CONTROL_PLANE 0x00000800
+#define XP1_MULTIPOINT_DATA_PLANE 0x00001000
+#define XP1_QOS_SUPPORTED 0x00002000
+#define XP1_INTERRUPT 0x00004000
+#define XP1_UNI_SEND 0x00008000
+#define XP1_UNI_RECV 0x00010000
+#define XP1_IFS_HANDLES 0x00020000
+#define XP1_PARTIAL_MESSAGE 0x00040000
+
+#define BIGENDIAN 0x0000
+#define LITTLEENDIAN 0x0001
+
+#define SECURITY_PROTOCOL_NONE 0x0000
+#define JL_SENDER_ONLY 0x01
+#define JL_RECEIVER_ONLY 0x02
+#define JL_BOTH 0x04
+#define WSA_FLAG_OVERLAPPED 0x01
+#define WSA_FLAG_MULTIPOINT_C_ROOT 0x02
+#define WSA_FLAG_MULTIPOINT_C_LEAF 0x04
+#define WSA_FLAG_MULTIPOINT_D_ROOT 0x08
+#define WSA_FLAG_MULTIPOINT_D_LEAF 0x10
+#define IOC_UNIX 0x00000000
+#define IOC_WS2 0x08000000
+#define IOC_PROTOCOL 0x10000000
+#define IOC_VENDOR 0x18000000
+
+#define _WSAIO(x,y) (IOC_VOID|(x)|(y))
+#define _WSAIOR(x,y) (IOC_OUT|(x)|(y))
+#define _WSAIOW(x,y) (IOC_IN|(x)|(y))
+#define _WSAIORW(x,y) (IOC_INOUT|(x)|(y))
+
+#define SIO_ASSOCIATE_HANDLE _WSAIOW(IOC_WS2,1)
+#define SIO_ENABLE_CIRCULAR_QUEUEING _WSAIO(IOC_WS2,2)
+#define SIO_FIND_ROUTE _WSAIOR(IOC_WS2,3)
+#define SIO_FLUSH _WSAIO(IOC_WS2,4)
+#define SIO_GET_BROADCAST_ADDRESS _WSAIOR(IOC_WS2,5)
+#define SIO_GET_EXTENSION_FUNCTION_POINTER _WSAIORW(IOC_WS2,6)
+#define SIO_GET_QOS _WSAIORW(IOC_WS2,7)
+#define SIO_GET_GROUP_QOS _WSAIORW(IOC_WS2,8)
+#define SIO_MULTIPOINT_LOOPBACK _WSAIOW(IOC_WS2,9)
+#define SIO_MULTICAST_SCOPE _WSAIOW(IOC_WS2,10)
+#define SIO_SET_QOS _WSAIOW(IOC_WS2,11)
+#define SIO_SET_GROUP_QOS _WSAIOW(IOC_WS2,12)
+#define SIO_TRANSLATE_HANDLE _WSAIORW(IOC_WS2,13)
+#define SIO_ROUTING_INTERFACE_QUERY _WSAIORW(IOC_WS2,20)
+#define SIO_ROUTING_INTERFACE_CHANGE _WSAIOW(IOC_WS2,21)
+#define SIO_ADDRESS_LIST_QUERY _WSAIOR(IOC_WS2,22)
+#define SIO_ADDRESS_LIST_CHANGE _WSAIO(IOC_WS2,23)
+#define SIO_QUERY_TARGET_PNP_HANDLE _WSAIOR(IOC_WS2,24)
+#define SIO_NSP_NOTIFY_CHANGE _WSAIOW(IOC_WS2,25)
+
+#define TH_NETDEV 0x00000001
+#define TH_TAPI 0x00000002
+
+WINSOCK_API_LINKAGE SOCKET WINAPI WSAAccept(SOCKET, struct sockaddr *, LPINT, LPCONDITIONPROC, DWORD);
+WINSOCK_API_LINKAGE INT WINAPI WSAAddressToStringA(LPSOCKADDR, DWORD, LPWSAPROTOCOL_INFOA, LPSTR, LPDWORD);
+WINSOCK_API_LINKAGE INT WINAPI WSAAddressToStringW(LPSOCKADDR, DWORD, LPWSAPROTOCOL_INFOW, LPWSTR, LPDWORD);
+WINSOCK_API_LINKAGE BOOL WINAPI WSACloseEvent(WSAEVENT);
+WINSOCK_API_LINKAGE int WINAPI WSAConnect(SOCKET, const struct sockaddr *, int, LPWSABUF, LPWSABUF, LPQOS, LPQOS);
+WINSOCK_API_LINKAGE WSAEVENT WINAPI WSACreateEvent(void);
+WINSOCK_API_LINKAGE int WINAPI WSADuplicateSocketA(SOCKET, DWORD, LPWSAPROTOCOL_INFOA);
+WINSOCK_API_LINKAGE int WINAPI WSADuplicateSocketW(SOCKET, DWORD, LPWSAPROTOCOL_INFOW);
+WINSOCK_API_LINKAGE INT WINAPI WSAEnumNameSpaceProvidersA(LPDWORD, LPWSANAMESPACE_INFOA);
+WINSOCK_API_LINKAGE INT WINAPI WSAEnumNameSpaceProvidersW(LPDWORD, LPWSANAMESPACE_INFOW);
+WINSOCK_API_LINKAGE int WINAPI WSAEnumNetworkEvents(SOCKET, WSAEVENT, LPWSANETWORKEVENTS);
+WINSOCK_API_LINKAGE int WINAPI WSAEnumProtocolsA(LPINT, LPWSAPROTOCOL_INFOA, LPDWORD);
+WINSOCK_API_LINKAGE int WINAPI WSAEnumProtocolsW(LPINT, LPWSAPROTOCOL_INFOW, LPDWORD);
+WINSOCK_API_LINKAGE int WINAPI WSAEventSelect(SOCKET, WSAEVENT, long);
+WINSOCK_API_LINKAGE BOOL WINAPI WSAGetOverlappedResult(SOCKET, LPWSAOVERLAPPED, LPDWORD, BOOL, LPDWORD);
+WINSOCK_API_LINKAGE BOOL WINAPI WSAGetQOSByName(SOCKET, LPWSABUF, LPQOS);
+WINSOCK_API_LINKAGE INT WINAPI WSAGetServiceClassInfoA(LPGUID, LPGUID, LPDWORD, LPWSASERVICECLASSINFOA);
+WINSOCK_API_LINKAGE INT WINAPI WSAGetServiceClassInfoW(LPGUID, LPGUID, LPDWORD, LPWSASERVICECLASSINFOW);
+WINSOCK_API_LINKAGE INT WINAPI WSAGetServiceClassNameByClassIdA(LPGUID, LPSTR, LPDWORD);
+WINSOCK_API_LINKAGE INT WINAPI WSAGetServiceClassNameByClassIdW(LPGUID, LPWSTR, LPDWORD);
+WINSOCK_API_LINKAGE int WINAPI WSAHtonl(SOCKET, unsigned long, unsigned long *);
+WINSOCK_API_LINKAGE int WINAPI WSAHtons(SOCKET, unsigned short, unsigned short *);
+WINSOCK_API_LINKAGE INT WINAPI WSAInstallServiceClassA(LPWSASERVICECLASSINFOA);
+WINSOCK_API_LINKAGE INT WINAPI WSAInstallServiceClassW(LPWSASERVICECLASSINFOW);
+WINSOCK_API_LINKAGE int WINAPI WSAIoctl(SOCKET, DWORD, LPVOID, DWORD, LPVOID, DWORD, LPDWORD, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE);
+WINSOCK_API_LINKAGE SOCKET WINAPI WSAJoinLeaf(SOCKET, const struct sockaddr *, int, LPWSABUF, LPWSABUF, LPQOS, LPQOS, DWORD);
+WINSOCK_API_LINKAGE INT WINAPI WSALookupServiceBeginA(LPWSAQUERYSETA, DWORD, LPHANDLE);
+WINSOCK_API_LINKAGE INT WINAPI WSALookupServiceBeginW(LPWSAQUERYSETW lpqsRestrictions, DWORD, LPHANDLE);
+WINSOCK_API_LINKAGE INT WINAPI WSALookupServiceNextA(HANDLE, DWORD, LPDWORD, LPWSAQUERYSETA);
+WINSOCK_API_LINKAGE INT WINAPI WSALookupServiceNextW(HANDLE, DWORD, LPDWORD, LPWSAQUERYSETW);
+WINSOCK_API_LINKAGE INT WINAPI WSALookupServiceEnd(HANDLE);
+WINSOCK_API_LINKAGE int WINAPI WSANSPIoctl(HANDLE,DWORD,LPVOID,DWORD,LPVOID,DWORD,LPDWORD,LPWSACOMPLETION); /* XP or .NET Server */
+WINSOCK_API_LINKAGE int WINAPI WSANtohl(SOCKET, unsigned long, unsigned long *);
+WINSOCK_API_LINKAGE int WINAPI WSANtohs(SOCKET, unsigned short, unsigned short *);
+WINSOCK_API_LINKAGE int WINAPI WSARecv(SOCKET, LPWSABUF, DWORD, LPDWORD, LPDWORD, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE);
+WINSOCK_API_LINKAGE int WINAPI WSARecvDisconnect(SOCKET, LPWSABUF);
+WINSOCK_API_LINKAGE int WINAPI WSARecvFrom(SOCKET, LPWSABUF, DWORD, LPDWORD, LPDWORD, struct sockaddr *, LPINT, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE);
+WINSOCK_API_LINKAGE INT WINAPI WSARemoveServiceClass(LPGUID);
+WINSOCK_API_LINKAGE BOOL WINAPI WSAResetEvent(WSAEVENT);
+WINSOCK_API_LINKAGE int WINAPI WSASend(SOCKET, LPWSABUF, DWORD, LPDWORD, DWORD, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE);
+WINSOCK_API_LINKAGE int WINAPI WSASendDisconnect(SOCKET, LPWSABUF);
+WINSOCK_API_LINKAGE int WINAPI WSASendTo(SOCKET, LPWSABUF, DWORD, LPDWORD, DWORD, const struct sockaddr *, int, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE);
+WINSOCK_API_LINKAGE BOOL WINAPI WSASetEvent(WSAEVENT);
+WINSOCK_API_LINKAGE INT WSAAPI WSASetServiceA(LPWSAQUERYSETA, WSAESETSERVICEOP, DWORD);
+WINSOCK_API_LINKAGE INT WINAPI WSASetServiceW(LPWSAQUERYSETW, WSAESETSERVICEOP, DWORD);
+WINSOCK_API_LINKAGE SOCKET WINAPI WSASocketA(int, int, int, LPWSAPROTOCOL_INFOA, GROUP, DWORD);
+WINSOCK_API_LINKAGE SOCKET WINAPI WSASocketW(int, int, int, LPWSAPROTOCOL_INFOW, GROUP, DWORD);
+WINSOCK_API_LINKAGE INT WINAPI WSAStringToAddressA(LPSTR, INT, LPWSAPROTOCOL_INFOA, LPSOCKADDR, LPINT);
+WINSOCK_API_LINKAGE INT WINAPI WSAStringToAddressW(LPWSTR, INT, LPWSAPROTOCOL_INFOW, LPSOCKADDR, LPINT);
+WINSOCK_API_LINKAGE DWORD WINAPI WSAWaitForMultipleEvents(DWORD, const WSAEVENT *, BOOL, DWORD, BOOL);
+
+typedef SOCKET (WINAPI *LPFN_WSAACCEPT)(SOCKET, struct sockaddr *, LPINT, LPCONDITIONPROC, DWORD);
+typedef INT (WINAPI *LPFN_WSAADDRESSTOSTRINGA)(LPSOCKADDR, DWORD, LPWSAPROTOCOL_INFOA, LPSTR, LPDWORD);
+typedef INT (WINAPI *LPFN_WSAADDRESSTOSTRINGW)(LPSOCKADDR, DWORD, LPWSAPROTOCOL_INFOW, LPWSTR, LPDWORD);
+typedef BOOL (WINAPI *LPFN_WSACLOSEEVENT)(WSAEVENT);
+typedef int (WINAPI *LPFN_WSACONNECT)(SOCKET, const struct sockaddr *, int, LPWSABUF, LPWSABUF, LPQOS, LPQOS);
+typedef WSAEVENT (WINAPI *LPFN_WSACREATEEVENT)(void);
+typedef int (WINAPI *LPFN_WSADUPLICATESOCKETA)(SOCKET, DWORD, LPWSAPROTOCOL_INFOA);
+typedef int (WINAPI *LPFN_WSADUPLICATESOCKETW)(SOCKET, DWORD, LPWSAPROTOCOL_INFOW);
+typedef INT (WINAPI *LPFN_WSAENUMNAMESPACEPROVIDERSA)(LPDWORD, LPWSANAMESPACE_INFOA);
+typedef INT (WINAPI *LPFN_WSAENUMNAMESPACEPROVIDERSW)(LPDWORD, LPWSANAMESPACE_INFOW);
+typedef int (WINAPI *LPFN_WSAENUMNETWORKEVENTS)(SOCKET, WSAEVENT, LPWSANETWORKEVENTS);
+typedef int (WINAPI *LPFN_WSAENUMPROTOCOLSA)(LPINT, LPWSAPROTOCOL_INFOA, LPDWORD);
+typedef int (WINAPI *LPFN_WSAENUMPROTOCOLSW)(LPINT, LPWSAPROTOCOL_INFOW, LPDWORD);
+typedef int (WINAPI *LPFN_WSAEVENTSELECT)(SOCKET, WSAEVENT, long);
+typedef BOOL (WINAPI *LPFN_WSAGETOVERLAPPEDRESULT)(SOCKET, LPWSAOVERLAPPED, LPDWORD, BOOL, LPDWORD);
+typedef BOOL (WINAPI *LPFN_WSAGETQOSBYNAME)(SOCKET, LPWSABUF, LPQOS);
+typedef INT (WINAPI *LPFN_WSAGETSERVICECLASSINFOA)(LPGUID, LPGUID, LPDWORD, LPWSASERVICECLASSINFOA);
+typedef INT (WINAPI *LPFN_WSAGETSERVICECLASSINFOW)(LPGUID, LPGUID, LPDWORD, LPWSASERVICECLASSINFOW);
+typedef INT (WINAPI *LPFN_WSAGETSERVICECLASSNAMEBYCLASSIDA)(LPGUID, LPSTR, LPDWORD);
+typedef INT (WINAPI *LPFN_WSAGETSERVICECLASSNAMEBYCLASSIDW)(LPGUID, LPWSTR, LPDWORD);
+typedef int (WINAPI *LPFN_WSAHTONL)(SOCKET, unsigned long, unsigned long *);
+typedef int (WINAPI *LPFN_WSAHTONS)(SOCKET, unsigned short, unsigned short *);
+typedef INT (WINAPI *LPFN_WSAINSTALLSERVICECLASSA)(LPWSASERVICECLASSINFOA);
+typedef INT (WINAPI *LPFN_WSAINSTALLSERVICECLASSW)(LPWSASERVICECLASSINFOW);
+typedef int (WINAPI *LPFN_WSAIOCTL)(SOCKET, DWORD, LPVOID, DWORD, LPVOID, DWORD, LPDWORD, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE);
+typedef SOCKET (WINAPI *LPFN_WSAJOINLEAF)(SOCKET, const struct sockaddr *, int, LPWSABUF, LPWSABUF, LPQOS, LPQOS, DWORD);
+typedef INT (WINAPI *LPFN_WSALOOKUPSERVICEBEGINA)(LPWSAQUERYSETA, DWORD, LPHANDLE);
+typedef INT (WINAPI *LPFN_WSALOOKUPSERVICEBEGINW)(LPWSAQUERYSETW, DWORD, LPHANDLE);
+typedef INT (WINAPI *LPFN_WSALOOKUPSERVICENEXTA)(HANDLE, DWORD, LPDWORD, LPWSAQUERYSETA);
+typedef INT (WINAPI *LPFN_WSALOOKUPSERVICENEXTW)(HANDLE, DWORD, LPDWORD, LPWSAQUERYSETW);
+typedef INT (WINAPI *LPFN_WSALOOKUPSERVICEEND)(HANDLE);
+typedef int (WINAPI *LPFN_WSANSPIoctl)(HANDLE, DWORD,LPVOID,DWORD,LPVOID,DWORD,LPDWORD,LPWSACOMPLETION);
+typedef int (WINAPI *LPFN_WSANTOHL)(SOCKET, unsigned long, unsigned long *);
+typedef int (WINAPI *LPFN_WSANTOHS)(SOCKET, unsigned short, unsigned short *);
+typedef int (WINAPI *LPFN_WSARECV)(SOCKET, LPWSABUF, DWORD, LPDWORD, LPDWORD, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE);
+typedef int (WINAPI *LPFN_WSARECVDISCONNECT)(SOCKET, LPWSABUF);
+typedef int (WINAPI *LPFN_WSARECVFROM)(SOCKET, LPWSABUF, DWORD, LPDWORD, LPDWORD, struct sockaddr *, LPINT, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE);
+typedef INT (WINAPI *LPFN_WSAREMOVESERVICECLASS)(LPGUID);
+typedef BOOL (WINAPI *LPFN_WSARESETEVENT)(WSAEVENT);
+typedef int (WINAPI *LPFN_WSASEND)(SOCKET, LPWSABUF, DWORD, LPDWORD, DWORD, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE);
+typedef int (WINAPI *LPFN_WSASENDDISCONNECT)(SOCKET, LPWSABUF);
+typedef int (WINAPI *LPFN_WSASENDTO)(SOCKET, LPWSABUF, DWORD, LPDWORD, DWORD, const struct sockaddr *, int, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE);
+typedef BOOL (WINAPI *LPFN_WSASETEVENT)(WSAEVENT);
+typedef INT (WINAPI *LPFN_WSASETSERVICEA)(LPWSAQUERYSETA, WSAESETSERVICEOP, DWORD);
+typedef INT (WINAPI *LPFN_WSASETSERVICEW)(LPWSAQUERYSETW, WSAESETSERVICEOP, DWORD);
+typedef SOCKET (WINAPI *LPFN_WSASOCKETA)(int, int, int, LPWSAPROTOCOL_INFOA, GROUP, DWORD);
+typedef SOCKET (WINAPI *LPFN_WSASOCKETW)(int, int, int, LPWSAPROTOCOL_INFOW, GROUP, DWORD);
+typedef INT (WINAPI *LPFN_WSASTRINGTOADDRESSA)(LPSTR, INT, LPWSAPROTOCOL_INFOA, LPSOCKADDR, LPINT);
+typedef INT (WINAPI *LPFN_WSASTRINGTOADDRESSW)(LPWSTR, INT, LPWSAPROTOCOL_INFOW, LPSOCKADDR, LPINT);
+typedef DWORD (WINAPI *LPFN_WSAWAITFORMULTIPLEEVENTS)(DWORD, const WSAEVENT *, BOOL, DWORD, BOOL);
+
+#ifdef UNICODE
+#define LPFN_WSAADDRESSTOSTRING LPFN_WSAADDRESSTOSTRINGW
+#define LPFN_WSADUPLICATESOCKET LPFN_WSADUPLICATESOCKETW
+#define LPFN_WSAENUMNAMESPACEPROVIDERS LPFN_WSAENUMNAMESPACEPROVIDERSW
+#define LPFN_WSAENUMPROTOCOLS LPFN_WSAENUMPROTOCOLSW
+#define LPFN_WSAGETSERVICECLASSINFO LPFN_WSAGETSERVICECLASSINFOW
+#define LPFN_WSAGETSERVICECLASSNAMEBYCLASSID LPFN_WSAGETSERVICECLASSNAMEBYCLASSIDW
+#define LPFN_WSAINSTALLSERVICECLASS LPFN_WSAINSTALLSERVICECLASSW
+#define LPFN_WSALOOKUPSERVICEBEGIN LPFN_WSALOOKUPSERVICEBEGINW
+#define LPFN_WSALOOKUPSERVICENEXT LPFN_WSALOOKUPSERVICENEXTW
+#define LPFN_WSASETSERVICE LPFN_WSASETSERVICEW
+#define LPFN_WSASOCKET LPFN_WSASOCKETW
+#define LPFN_WSASTRINGTOADDRESS LPFN_WSASTRINGTOADDRESSW
+#define WSAAddressToString WSAAddressToStringW
+#define WSADuplicateSocket WSADuplicateSocketW
+#define WSAEnumNameSpaceProviders WSAEnumNameSpaceProvidersW
+#define WSAEnumProtocols WSAEnumProtocolsW
+#define WSAGetServiceClassInfo WSAGetServiceClassInfoW
+#define WSAGetServiceClassNameByClassId WSAGetServiceClassNameByClassIdW
+#define WSASetService WSASetServiceW
+#define WSASocket WSASocketW
+#define WSAStringToAddress WSAStringToAddressW
+#define WSALookupServiceBegin WSALookupServiceBeginW
+#define WSALookupServiceNext WSALookupServiceNextW
+#define WSAInstallServiceClass WSAInstallServiceClassW
+#else
+#define LPFN_WSAADDRESSTOSTRING LPFN_WSAADDRESSTOSTRINGA
+#define LPFN_WSADUPLICATESOCKET LPFN_WSADUPLICATESOCKETW
+#define LPFN_WSAENUMNAMESPACEPROVIDERS LPFN_WSAENUMNAMESPACEPROVIDERSA
+#define LPFN_WSAENUMPROTOCOLS LPFN_WSAENUMPROTOCOLSA
+#define LPFN_WSAGETSERVICECLASSINFO LPFN_WSAGETSERVICECLASSINFOA
+#define LPFN_WSAGETSERVICECLASSNAMEBYCLASSID LPFN_WSAGETSERVICECLASSNAMEBYCLASSIDA
+#define LPFN_WSAINSTALLSERVICECLASS LPFN_WSAINSTALLSERVICECLASSA
+#define LPFN_WSALOOKUPSERVICEBEGIN LPFN_WSALOOKUPSERVICEBEGINA
+#define LPFN_WSALOOKUPSERVICENEXT LPFN_WSALOOKUPSERVICENEXTA
+#define LPFN_WSASETSERVICE LPFN_WSASETSERVICEA
+#define LPFN_WSASOCKET LPFN_WSASOCKETA
+#define LPFN_WSASTRINGTOADDRESS LPFN_WSASTRINGTOADDRESSA
+#define WSAAddressToString WSAAddressToStringA
+#define WSADuplicateSocket WSADuplicateSocketA
+#define WSAEnumNameSpaceProviders WSAEnumNameSpaceProvidersA
+#define WSAEnumProtocols WSAEnumProtocolsA
+#define WSAGetServiceClassInfo WSAGetServiceClassInfoA
+#define WSAGetServiceClassNameByClassId WSAGetServiceClassNameByClassIdA
+#define WSAInstallServiceClass WSAInstallServiceClassA
+#define WSALookupServiceBegin WSALookupServiceBeginA
+#define WSALookupServiceNext WSALookupServiceNextA
+#define WSASocket WSASocketA
+#define WSAStringToAddress WSAStringToAddressA
+#define WSASetService WSASetServiceA
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/winspool.h b/tcc/include/winapi/winspool.h
new file mode 100644
index 0000000..a7d4892
--- /dev/null
+++ b/tcc/include/winapi/winspool.h
@@ -0,0 +1,982 @@
+#ifndef _WINSPOOL_H
+#define _WINSPOOL_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#define DI_CHANNEL 1
+#define DI_CHANNEL_WRITE 2
+#define DI_READ_SPOOL_JOB 3
+#define DI_MEMORYMAP_WRITE 0x1
+#define FORM_USER 0x0
+#define FORM_BUILTIN 0x1
+#define FORM_PRINTER 0x2
+#if (_WIN32_WINNT >= 0x0500)
+#define DRIVER_KERNELMODE 0x00000001
+#define DRIVER_USERMODE 0x00000002
+#define DSPRINT_PUBLISH 0x00000001
+#define DSPRINT_UPDATE 0x00000002
+#define DSPRINT_UNPUBLISH 0x00000004
+#define DSPRINT_REPUBLISH 0x00000008
+#define DSPRINT_PENDING 0x80000000
+#endif
+#define JOB_CONTROL_PAUSE 1
+#define JOB_CONTROL_RESUME 2
+#define JOB_CONTROL_CANCEL 3
+#define JOB_CONTROL_RESTART 4
+#define JOB_CONTROL_DELETE 5
+#define JOB_CONTROL_SENT_TO_PRINTER 6
+#define JOB_CONTROL_LAST_PAGE_EJECTED 7
+#define JOB_STATUS_PAUSED 0x1
+#define JOB_STATUS_ERROR 0x2
+#define JOB_STATUS_DELETING 0x4
+#define JOB_STATUS_SPOOLING 0x8
+#define JOB_STATUS_PRINTING 0x10
+#define JOB_STATUS_OFFLINE 0x20
+#define JOB_STATUS_PAPEROUT 0x40
+#define JOB_STATUS_PRINTED 0x80
+#define JOB_STATUS_DELETED 0x100
+#define JOB_STATUS_BLOCKED_DEVQ 0x200
+#define JOB_STATUS_USER_INTERVENTION 0x400
+#define JOB_STATUS_RESTART 0x800
+#define JOB_STATUS_COMPLETE 0x1000
+#define JOB_POSITION_UNSPECIFIED 0
+#define JOB_NOTIFY_TYPE 1
+#define JOB_NOTIFY_FIELD_PRINTER_NAME 0
+#define JOB_NOTIFY_FIELD_MACHINE_NAME 1
+#define JOB_NOTIFY_FIELD_PORT_NAME 2
+#define JOB_NOTIFY_FIELD_USER_NAME 3
+#define JOB_NOTIFY_FIELD_NOTIFY_NAME 4
+#define JOB_NOTIFY_FIELD_DATATYPE 5
+#define JOB_NOTIFY_FIELD_PRINT_PROCESSOR 6
+#define JOB_NOTIFY_FIELD_PARAMETERS 7
+#define JOB_NOTIFY_FIELD_DRIVER_NAME 8
+#define JOB_NOTIFY_FIELD_DEVMODE 9
+#define JOB_NOTIFY_FIELD_STATUS 10
+#define JOB_NOTIFY_FIELD_STATUS_STRING 11
+#define JOB_NOTIFY_FIELD_SECURITY_DESCRIPTOR 12
+#define JOB_NOTIFY_FIELD_DOCUMENT 13
+#define JOB_NOTIFY_FIELD_PRIORITY 14
+#define JOB_NOTIFY_FIELD_POSITION 15
+#define JOB_NOTIFY_FIELD_SUBMITTED 16
+#define JOB_NOTIFY_FIELD_START_TIME 17
+#define JOB_NOTIFY_FIELD_UNTIL_TIME 18
+#define JOB_NOTIFY_FIELD_TIME 19
+#define JOB_NOTIFY_FIELD_TOTAL_PAGES 20
+#define JOB_NOTIFY_FIELD_PAGES_PRINTED 21
+#define JOB_NOTIFY_FIELD_TOTAL_BYTES 22
+#define JOB_NOTIFY_FIELD_BYTES_PRINTED 23
+#define JOB_ACCESS_ADMINISTER 16
+#define JOB_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|JOB_ACCESS_ADMINISTER)
+#define JOB_READ (STANDARD_RIGHTS_READ| JOB_ACCESS_ADMINISTER)
+#define JOB_WRITE (STANDARD_RIGHTS_WRITE|JOB_ACCESS_ADMINISTER)
+#define JOB_EXECUTE (STANDARD_RIGHTS_EXECUTE|JOB_ACCESS_ADMINISTER)
+#define PRINTER_NOTIFY_OPTIONS_REFRESH 1
+#define PRINTER_ACCESS_ADMINISTER 4
+#define PRINTER_ACCESS_USE 8
+#define PRINTER_ERROR_INFORMATION 0x80000000
+#define PRINTER_ERROR_WARNING 0x40000000
+#define PRINTER_ERROR_SEVERE 0x20000000
+#define PRINTER_ERROR_OUTOFPAPER 1
+#define PRINTER_ERROR_JAM 2
+#define PRINTER_ERROR_OUTOFTONER 4
+#define PRINTER_CONTROL_PAUSE 1
+#define PRINTER_CONTROL_RESUME 2
+#define PRINTER_CONTROL_PURGE 3
+#define PRINTER_CONTROL_SET_STATUS 4
+#define PRINTER_STATUS_PAUSED 1
+#define PRINTER_STATUS_ERROR 2
+#define PRINTER_STATUS_PENDING_DELETION 4
+#define PRINTER_STATUS_PAPER_JAM 8
+#define PRINTER_STATUS_PAPER_OUT 0x10
+#define PRINTER_STATUS_MANUAL_FEED 0x20
+#define PRINTER_STATUS_PAPER_PROBLEM 0x40
+#define PRINTER_STATUS_OFFLINE 0x80
+#define PRINTER_STATUS_IO_ACTIVE 0x100
+#define PRINTER_STATUS_BUSY 0x200
+#define PRINTER_STATUS_PRINTING 0x400
+#define PRINTER_STATUS_OUTPUT_BIN_FULL 0x800
+#define PRINTER_STATUS_NOT_AVAILABLE 0x1000
+#define PRINTER_STATUS_WAITING 0x2000
+#define PRINTER_STATUS_PROCESSING 0x4000
+#define PRINTER_STATUS_INITIALIZING 0x8000
+#define PRINTER_STATUS_WARMING_UP 0x10000
+#define PRINTER_STATUS_TONER_LOW 0x20000
+#define PRINTER_STATUS_NO_TONER 0x40000
+#define PRINTER_STATUS_PAGE_PUNT 0x80000
+#define PRINTER_STATUS_USER_INTERVENTION 0x100000
+#define PRINTER_STATUS_OUT_OF_MEMORY 0x200000
+#define PRINTER_STATUS_DOOR_OPEN 0x400000
+#define PRINTER_STATUS_SERVER_UNKNOWN 0x800000
+#define PRINTER_STATUS_POWER_SAVE 0x1000000
+#define PRINTER_ATTRIBUTE_QUEUED 1
+#define PRINTER_ATTRIBUTE_DIRECT 2
+#define PRINTER_ATTRIBUTE_DEFAULT 4
+#define PRINTER_ATTRIBUTE_SHARED 8
+#define PRINTER_ATTRIBUTE_NETWORK 0x10
+#define PRINTER_ATTRIBUTE_HIDDEN 0x20
+#define PRINTER_ATTRIBUTE_LOCAL 0x40
+#define PRINTER_ATTRIBUTE_ENABLE_DEVQ 0x80
+#define PRINTER_ATTRIBUTE_KEEPPRINTEDJOBS 0x100
+#define PRINTER_ATTRIBUTE_DO_COMPLETE_FIRST 0x200
+#define PRINTER_ATTRIBUTE_WORK_OFFLINE 0x400
+#define PRINTER_ATTRIBUTE_ENABLE_BIDI 0x800
+#define PRINTER_ATTRIBUTE_RAW_ONLY 0x1000
+#define PRINTER_ATTRIBUTE_PUBLISHED 0x2000
+#define PRINTER_ENUM_DEFAULT 1
+#define PRINTER_ENUM_LOCAL 2
+#define PRINTER_ENUM_CONNECTIONS 4
+#define PRINTER_ENUM_FAVORITE 4
+#define PRINTER_ENUM_NAME 8
+#define PRINTER_ENUM_REMOTE 16
+#define PRINTER_ENUM_SHARED 32
+#define PRINTER_ENUM_NETWORK 0x40
+#define PRINTER_ENUM_EXPAND 0x4000
+#define PRINTER_ENUM_CONTAINER 0x8000
+#define PRINTER_ENUM_ICONMASK 0xff0000
+#define PRINTER_ENUM_ICON1 0x10000
+#define PRINTER_ENUM_ICON2 0x20000
+#define PRINTER_ENUM_ICON3 0x40000
+#define PRINTER_ENUM_ICON4 0x80000
+#define PRINTER_ENUM_ICON5 0x100000
+#define PRINTER_ENUM_ICON6 0x200000
+#define PRINTER_ENUM_ICON7 0x400000
+#define PRINTER_ENUM_ICON8 0x800000
+#define PRINTER_NOTIFY_TYPE 0
+#define PRINTER_NOTIFY_FIELD_SERVER_NAME 0
+#define PRINTER_NOTIFY_FIELD_PRINTER_NAME 1
+#define PRINTER_NOTIFY_FIELD_SHARE_NAME 2
+#define PRINTER_NOTIFY_FIELD_PORT_NAME 3
+#define PRINTER_NOTIFY_FIELD_DRIVER_NAME 4
+#define PRINTER_NOTIFY_FIELD_COMMENT 5
+#define PRINTER_NOTIFY_FIELD_LOCATION 6
+#define PRINTER_NOTIFY_FIELD_DEVMODE 7
+#define PRINTER_NOTIFY_FIELD_SEPFILE 8
+#define PRINTER_NOTIFY_FIELD_PRINT_PROCESSOR 9
+#define PRINTER_NOTIFY_FIELD_PARAMETERS 10
+#define PRINTER_NOTIFY_FIELD_DATATYPE 11
+#define PRINTER_NOTIFY_FIELD_SECURITY_DESCRIPTOR 12
+#define PRINTER_NOTIFY_FIELD_ATTRIBUTES 13
+#define PRINTER_NOTIFY_FIELD_PRIORITY 14
+#define PRINTER_NOTIFY_FIELD_DEFAULT_PRIORITY 15
+#define PRINTER_NOTIFY_FIELD_START_TIME 16
+#define PRINTER_NOTIFY_FIELD_UNTIL_TIME 17
+#define PRINTER_NOTIFY_FIELD_STATUS 18
+#define PRINTER_NOTIFY_FIELD_STATUS_STRING 19
+#define PRINTER_NOTIFY_FIELD_CJOBS 20
+#define PRINTER_NOTIFY_FIELD_AVERAGE_PPM 21
+#define PRINTER_NOTIFY_FIELD_TOTAL_PAGES 22
+#define PRINTER_NOTIFY_FIELD_PAGES_PRINTED 23
+#define PRINTER_NOTIFY_FIELD_TOTAL_BYTES 24
+#define PRINTER_NOTIFY_FIELD_BYTES_PRINTED 25
+#define PRINTER_CHANGE_ADD_PRINTER 1
+#define PRINTER_CHANGE_SET_PRINTER 2
+#define PRINTER_CHANGE_DELETE_PRINTER 4
+#define PRINTER_CHANGE_FAILED_CONNECTION_PRINTER 8
+#define PRINTER_CHANGE_PRINTER 0xFF
+#define PRINTER_CHANGE_ADD_JOB 0x100
+#define PRINTER_CHANGE_SET_JOB 0x200
+#define PRINTER_CHANGE_DELETE_JOB 0x400
+#define PRINTER_CHANGE_WRITE_JOB 0x800
+#define PRINTER_CHANGE_JOB 0xFF00
+#define PRINTER_CHANGE_ADD_FORM 0x10000
+#define PRINTER_CHANGE_SET_FORM 0x20000
+#define PRINTER_CHANGE_DELETE_FORM 0x40000
+#define PRINTER_CHANGE_FORM 0x70000
+#define PRINTER_CHANGE_ADD_PORT 0x100000
+#define PRINTER_CHANGE_CONFIGURE_PORT 0x200000
+#define PRINTER_CHANGE_DELETE_PORT 0x400000
+#define PRINTER_CHANGE_PORT 0x700000
+#define PRINTER_CHANGE_ADD_PRINT_PROCESSOR 0x1000000
+#define PRINTER_CHANGE_DELETE_PRINT_PROCESSOR 0x4000000
+#define PRINTER_CHANGE_PRINT_PROCESSOR 0x7000000
+#define PRINTER_CHANGE_ADD_PRINTER_DRIVER 0x10000000
+#define PRINTER_CHANGE_SET_PRINTER_DRIVER 0x20000000
+#define PRINTER_CHANGE_DELETE_PRINTER_DRIVER 0x40000000
+#define PRINTER_CHANGE_PRINTER_DRIVER 0x70000000
+#define PRINTER_CHANGE_TIMEOUT 0x80000000
+#define PRINTER_CHANGE_ALL 0x7777FFFF
+#define PRINTER_NOTIFY_INFO_DISCARDED 1
+#define PRINTER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|PRINTER_ACCESS_ADMINISTER|PRINTER_ACCESS_USE)
+#define PRINTER_READ (STANDARD_RIGHTS_READ|PRINTER_ACCESS_USE)
+#define PRINTER_WRITE (STANDARD_RIGHTS_WRITE|PRINTER_ACCESS_USE)
+#define PRINTER_EXECUTE (STANDARD_RIGHTS_EXECUTE|PRINTER_ACCESS_USE)
+#define NO_PRIORITY 0
+#define MAX_PRIORITY 99
+#define MIN_PRIORITY 1
+#define DEF_PRIORITY 1
+#define PORT_TYPE_WRITE 1
+#define PORT_TYPE_READ 2
+#define PORT_TYPE_REDIRECTED 4
+#define PORT_TYPE_NET_ATTACHED 8
+#define SERVER_ACCESS_ADMINISTER 1
+#define SERVER_ACCESS_ENUMERATE 2
+#define SERVER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SERVER_ACCESS_ADMINISTER|SERVER_ACCESS_ENUMERATE)
+#define SERVER_READ (STANDARD_RIGHTS_READ|SERVER_ACCESS_ENUMERATE)
+#define SERVER_WRITE (STANDARD_RIGHTS_WRITE|SERVER_ACCESS_ADMINISTER|SERVER_ACCESS_ENUMERATE)
+#define SERVER_EXECUTE (STANDARD_RIGHTS_EXECUTE|SERVER_ACCESS_ENUMERATE)
+#define PORT_STATUS_TYPE_ERROR 1
+#define PORT_STATUS_TYPE_WARNING 2
+#define PORT_STATUS_TYPE_INFO 3
+#define PORT_STATUS_OFFLINE 1
+#define PORT_STATUS_PAPER_JAM 2
+#define PORT_STATUS_PAPER_OUT 3
+#define PORT_STATUS_OUTPUT_BIN_FULL 4
+#define PORT_STATUS_PAPER_PROBLEM 5
+#define PORT_STATUS_NO_TONER 6
+#define PORT_STATUS_DOOR_OPEN 7
+#define PORT_STATUS_USER_INTERVENTION 8
+#define PORT_STATUS_OUT_OF_MEMORY 9
+#define PORT_STATUS_TONER_LOW 10
+#define PORT_STATUS_WARMING_UP 11
+#define PORT_STATUS_POWER_SAVE 12
+#ifndef RC_INVOKED
+typedef struct _ADDJOB_INFO_1A {
+ LPSTR Path;
+ DWORD JobId;
+} ADDJOB_INFO_1A,*PADDJOB_INFO_1A,*LPADDJOB_INFO_1A;
+typedef struct _ADDJOB_INFO_1W {
+ LPWSTR Path;
+ DWORD JobId;
+} ADDJOB_INFO_1W,*PADDJOB_INFO_1W,*LPADDJOB_INFO_1W;
+typedef struct _DATATYPES_INFO_1A{LPSTR pName;} DATATYPES_INFO_1A,*PDATATYPES_INFO_1A,*LPDATATYPES_INFO_1A;
+typedef struct _DATATYPES_INFO_1W{LPWSTR pName;} DATATYPES_INFO_1W,*PDATATYPES_INFO_1W,*LPDATATYPES_INFO_1W;
+typedef struct _JOB_INFO_1A {
+ DWORD JobId;
+ LPSTR pPrinterName;
+ LPSTR pMachineName;
+ LPSTR pUserName;
+ LPSTR pDocument;
+ LPSTR pDatatype;
+ LPSTR pStatus;
+ DWORD Status;
+ DWORD Priority;
+ DWORD Position;
+ DWORD TotalPages;
+ DWORD PagesPrinted;
+ SYSTEMTIME Submitted;
+} JOB_INFO_1A,*PJOB_INFO_1A,*LPJOB_INFO_1A;
+typedef struct _JOB_INFO_1W {
+ DWORD JobId;
+ LPWSTR pPrinterName;
+ LPWSTR pMachineName;
+ LPWSTR pUserName;
+ LPWSTR pDocument;
+ LPWSTR pDatatype;
+ LPWSTR pStatus;
+ DWORD Status;
+ DWORD Priority;
+ DWORD Position;
+ DWORD TotalPages;
+ DWORD PagesPrinted;
+ SYSTEMTIME Submitted;
+} JOB_INFO_1W,*PJOB_INFO_1W,*LPJOB_INFO_1W;
+typedef struct _JOB_INFO_2A {
+ DWORD JobId;
+ LPSTR pPrinterName;
+ LPSTR pMachineName;
+ LPSTR pUserName;
+ LPSTR pDocument;
+ LPSTR pNotifyName;
+ LPSTR pDatatype;
+ LPSTR pPrintProcessor;
+ LPSTR pParameters;
+ LPSTR pDriverName;
+ LPDEVMODEA pDevMode;
+ LPSTR pStatus;
+ PSECURITY_DESCRIPTOR pSecurityDescriptor;
+ DWORD Status;
+ DWORD Priority;
+ DWORD Position;
+ DWORD StartTime;
+ DWORD UntilTime;
+ DWORD TotalPages;
+ DWORD Size;
+ SYSTEMTIME Submitted;
+ DWORD Time;
+ DWORD PagesPrinted;
+} JOB_INFO_2A,*PJOB_INFO_2A,*LPJOB_INFO_2A;
+typedef struct _JOB_INFO_2W {
+ DWORD JobId;
+ LPWSTR pPrinterName;
+ LPWSTR pMachineName;
+ LPWSTR pUserName;
+ LPWSTR pDocument;
+ LPWSTR pNotifyName;
+ LPWSTR pDatatype;
+ LPWSTR pPrintProcessor;
+ LPWSTR pParameters;
+ LPWSTR pDriverName;
+ LPDEVMODEW pDevMode;
+ LPWSTR pStatus;
+ PSECURITY_DESCRIPTOR pSecurityDescriptor;
+ DWORD Status;
+ DWORD Priority;
+ DWORD Position;
+ DWORD StartTime;
+ DWORD UntilTime;
+ DWORD TotalPages;
+ DWORD Size;
+ SYSTEMTIME Submitted;
+ DWORD Time;
+ DWORD PagesPrinted;
+} JOB_INFO_2W,*PJOB_INFO_2W,*LPJOB_INFO_2W;
+typedef struct _JOB_INFO_3 {
+ DWORD JobId;
+ DWORD NextJobId;
+ DWORD Reserved;
+} JOB_INFO_3,*PJOB_INFO_3,*LPJOB_INFO_3;
+typedef struct _DOC_INFO_1A {
+ LPSTR pDocName;
+ LPSTR pOutputFile;
+ LPSTR pDatatype;
+} DOC_INFO_1A,*PDOC_INFO_1A,*LPDOC_INFO_1A;
+typedef struct _DOC_INFO_1W {
+ LPWSTR pDocName;
+ LPWSTR pOutputFile;
+ LPWSTR pDatatype;
+} DOC_INFO_1W,*PDOC_INFO_1W,*LPDOC_INFO_1W;
+typedef struct _DOC_INFO_2A {
+ LPSTR pDocName;
+ LPSTR pOutputFile;
+ LPSTR pDatatype;
+ DWORD dwMode;
+ DWORD JobId;
+} DOC_INFO_2A,*PDOC_INFO_2A,*LPDOC_INFO_2A;
+typedef struct _DOC_INFO_2W {
+ LPWSTR pDocName;
+ LPWSTR pOutputFile;
+ LPWSTR pDatatype;
+ DWORD dwMode;
+ DWORD JobId;
+} DOC_INFO_2W,*PDOC_INFO_2W,*LPDOC_INFO_2W;
+typedef struct _DRIVER_INFO_1A {LPSTR pName;} DRIVER_INFO_1A,*PDRIVER_INFO_1A,*LPDRIVER_INFO_1A;
+typedef struct _DRIVER_INFO_1W {LPWSTR pName;} DRIVER_INFO_1W,*PDRIVER_INFO_1W,*LPDRIVER_INFO_1W;
+typedef struct _DRIVER_INFO_2A {
+ DWORD cVersion;
+ LPSTR pName;
+ LPSTR pEnvironment;
+ LPSTR pDriverPath;
+ LPSTR pDataFile;
+ LPSTR pConfigFile;
+} DRIVER_INFO_2A,*PDRIVER_INFO_2A,*LPDRIVER_INFO_2A;
+typedef struct _DRIVER_INFO_2W {
+ DWORD cVersion;
+ LPWSTR pName;
+ LPWSTR pEnvironment;
+ LPWSTR pDriverPath;
+ LPWSTR pDataFile;
+ LPWSTR pConfigFile;
+} DRIVER_INFO_2W,*PDRIVER_INFO_2W,*LPDRIVER_INFO_2W;
+typedef struct _DRIVER_INFO_3A {
+ DWORD cVersion;
+ LPSTR pName;
+ LPSTR pEnvironment;
+ LPSTR pDriverPath;
+ LPSTR pDataFile;
+ LPSTR pConfigFile;
+ LPSTR pHelpFile;
+ LPSTR pDependentFiles;
+ LPSTR pMonitorName;
+ LPSTR pDefaultDataType;
+} DRIVER_INFO_3A,*PDRIVER_INFO_3A,*LPDRIVER_INFO_3A;
+typedef struct _DRIVER_INFO_3W {
+ DWORD cVersion;
+ LPWSTR pName;
+ LPWSTR pEnvironment;
+ LPWSTR pDriverPath;
+ LPWSTR pDataFile;
+ LPWSTR pConfigFile;
+ LPWSTR pHelpFile;
+ LPWSTR pDependentFiles;
+ LPWSTR pMonitorName;
+ LPWSTR pDefaultDataType;
+} DRIVER_INFO_3W,*PDRIVER_INFO_3W,*LPDRIVER_INFO_3W;
+#if (_WIN32_WINNT >= 0x0500)
+typedef struct _DRIVER_INFO_4A {
+ DWORD cVersion;
+ LPSTR pName;
+ LPSTR pEnvironment;
+ LPSTR pDriverPath;
+ LPSTR pDataFile;
+ LPSTR pConfigFile;
+ LPSTR pHelpFile;
+ LPSTR pDependentFiles;
+ LPSTR pMonitorName;
+ LPSTR pDefaultDataType;
+ LPSTR pszzPreviousNames;
+} DRIVER_INFO_4A,*PDRIVER_INFO_4A,*LPDRIVER_INFO_4A;
+typedef struct _DRIVER_INFO_4W {
+ DWORD cVersion;
+ LPWSTR pName;
+ LPWSTR pEnvironment;
+ LPWSTR pDriverPath;
+ LPWSTR pDataFile;
+ LPWSTR pConfigFile;
+ LPWSTR pHelpFile;
+ LPWSTR pDependentFiles;
+ LPWSTR pMonitorName;
+ LPWSTR pDefaultDataType;
+ LPWSTR pszzPreviousNames;
+} DRIVER_INFO_4W,*PDRIVER_INFO_4W,*LPDRIVER_INFO_4W;
+typedef struct _DRIVER_INFO_5A {
+ DWORD cVersion;
+ LPSTR pName;
+ LPSTR pEnvironment;
+ LPSTR pDriverPath;
+ LPSTR pDataFile;
+ LPSTR pConfigFile;
+ DWORD dwDriverAttributes;
+ DWORD dwConfigVersion;
+ DWORD dwDriverVersion;
+} DRIVER_INFO_5A,*PDRIVER_INFO_5A,*LPDRIVER_INFO_5A;
+typedef struct _DRIVER_INFO_5W {
+ DWORD cVersion;
+ LPWSTR pName;
+ LPWSTR pEnvironment;
+ LPWSTR pDriverPath;
+ LPWSTR pDataFile;
+ LPWSTR pConfigFile;
+ DWORD dwDriverAttributes;
+ DWORD dwConfigVersion;
+ DWORD dwDriverVersion;
+} DRIVER_INFO_5W,*PDRIVER_INFO_5W,*LPDRIVER_INFO_5W;
+typedef struct _DRIVER_INFO_6A {
+ DWORD cVersion;
+ LPSTR pName;
+ LPSTR pEnvironment;
+ LPSTR pDriverPath;
+ LPSTR pDataFile;
+ LPSTR pConfigFile;
+ LPSTR pHelpFile;
+ LPSTR pDependentFiles;
+ LPSTR pMonitorName;
+ LPSTR pDefaultDataType;
+ LPSTR pszzPreviousNames;
+ FILETIME ftDriverDate;
+ DWORDLONG dwlDriverVersion;
+ LPSTR pszMfgName;
+ LPSTR pszOEMUrl;
+ LPSTR pszHardwareID;
+ LPSTR pszProvider;
+} DRIVER_INFO_6A,*PDRIVER_INFO_6A,*LPDRIVER_INFO_6A;
+typedef struct _DRIVER_INFO_6W {
+ DWORD cVersion;
+ LPWSTR pName;
+ LPWSTR pEnvironment;
+ LPWSTR pDriverPath;
+ LPWSTR pDataFile;
+ LPWSTR pConfigFile;
+ LPWSTR pHelpFile;
+ LPWSTR pDependentFiles;
+ LPWSTR pMonitorName;
+ LPWSTR pDefaultDataType;
+ LPWSTR pszzPreviousNames;
+ FILETIME ftDriverDate;
+ DWORDLONG dwlDriverVersion;
+ LPWSTR pszMfgName;
+ LPWSTR pszOEMUrl;
+ LPWSTR pszHardwareID;
+ LPWSTR pszProvider;
+} DRIVER_INFO_6W,*PDRIVER_INFO_6W,*LPDRIVER_INFO_6W;
+#endif
+typedef struct _MONITOR_INFO_1A{LPSTR pName;} MONITOR_INFO_1A,*PMONITOR_INFO_1A,*LPMONITOR_INFO_1A;
+typedef struct _MONITOR_INFO_1W{LPWSTR pName;} MONITOR_INFO_1W,*PMONITOR_INFO_1W,*LPMONITOR_INFO_1W;
+typedef struct _PORT_INFO_1A {LPSTR pName;} PORT_INFO_1A,*PPORT_INFO_1A,*LPPORT_INFO_1A;
+typedef struct _PORT_INFO_1W {LPWSTR pName;} PORT_INFO_1W,*PPORT_INFO_1W,*LPPORT_INFO_1W;
+typedef struct _MONITOR_INFO_2A{
+ LPSTR pName;
+ LPSTR pEnvironment;
+ LPSTR pDLLName;
+} MONITOR_INFO_2A,*PMONITOR_INFO_2A,*LPMONITOR_INFO_2A;
+typedef struct _MONITOR_INFO_2W{
+ LPWSTR pName;
+ LPWSTR pEnvironment;
+ LPWSTR pDLLName;
+} MONITOR_INFO_2W,*PMONITOR_INFO_2W,*LPMONITOR_INFO_2W;
+typedef struct _PORT_INFO_2A {
+ LPSTR pPortName;
+ LPSTR pMonitorName;
+ LPSTR pDescription;
+ DWORD fPortType;
+ DWORD Reserved;
+} PORT_INFO_2A,*PPORT_INFO_2A,*LPPORT_INFO_2A;
+typedef struct _PORT_INFO_2W {
+ LPWSTR pPortName;
+ LPWSTR pMonitorName;
+ LPWSTR pDescription;
+ DWORD fPortType;
+ DWORD Reserved;
+} PORT_INFO_2W,*PPORT_INFO_2W,*LPPORT_INFO_2W;
+typedef struct _PORT_INFO_3A {
+ DWORD dwStatus;
+ LPSTR pszStatus;
+ DWORD dwSeverity;
+} PORT_INFO_3A,*PPORT_INFO_3A,*LPPORT_INFO_3A;
+typedef struct _PORT_INFO_3W {
+ DWORD dwStatus;
+ LPWSTR pszStatus;
+ DWORD dwSeverity;
+} PORT_INFO_3W,*PPORT_INFO_3W,*LPPORT_INFO_3W;
+#if (_WIN32_WINNT >= 0x0500)
+typedef struct _PRINTER_ENUM_VALUESA {
+ LPSTR pValueName;
+ DWORD cbValueName;
+ DWORD dwType;
+ LPBYTE pData;
+ DWORD cbData;
+} PRINTER_ENUM_VALUESA,*PPRINTER_ENUM_VALUESA,*LPRINTER_ENUM_VALUESA;
+typedef struct _PRINTER_ENUM_VALUESW {
+ LPWSTR pValueName;
+ DWORD cbValueName;
+ DWORD dwType;
+ LPBYTE pData;
+ DWORD cbData;
+} PRINTER_ENUM_VALUESW,*PPRINTER_ENUM_VALUESW,*LPRINTER_ENUM_VALUESW;
+#endif
+typedef struct _PRINTER_INFO_1A {
+ DWORD Flags;
+ LPSTR pDescription;
+ LPSTR pName;
+ LPSTR pComment;
+} PRINTER_INFO_1A,*PPRINTER_INFO_1A,*LPPRINTER_INFO_1A;
+typedef struct _PRINTER_INFO_1W {
+ DWORD Flags;
+ LPWSTR pDescription;
+ LPWSTR pName;
+ LPWSTR pComment;
+} PRINTER_INFO_1W,*PPRINTER_INFO_1W,*LPPRINTER_INFO_1W;
+typedef struct _PRINTER_INFO_2A {
+ LPSTR pServerName;
+ LPSTR pPrinterName;
+ LPSTR pShareName;
+ LPSTR pPortName;
+ LPSTR pDriverName;
+ LPSTR pComment;
+ LPSTR pLocation;
+ LPDEVMODEA pDevMode;
+ LPSTR pSepFile;
+ LPSTR pPrintProcessor;
+ LPSTR pDatatype;
+ LPSTR pParameters;
+ PSECURITY_DESCRIPTOR pSecurityDescriptor;
+ DWORD Attributes;
+ DWORD Priority;
+ DWORD DefaultPriority;
+ DWORD StartTime;
+ DWORD UntilTime;
+ DWORD Status;
+ DWORD cJobs;
+ DWORD AveragePPM;
+} PRINTER_INFO_2A,*PPRINTER_INFO_2A,*LPPRINTER_INFO_2A;
+typedef struct _PRINTER_INFO_2W {
+ LPWSTR pServerName;
+ LPWSTR pPrinterName;
+ LPWSTR pShareName;
+ LPWSTR pPortName;
+ LPWSTR pDriverName;
+ LPWSTR pComment;
+ LPWSTR pLocation;
+ LPDEVMODEW pDevMode;
+ LPWSTR pSepFile;
+ LPWSTR pPrintProcessor;
+ LPWSTR pDatatype;
+ LPWSTR pParameters;
+ PSECURITY_DESCRIPTOR pSecurityDescriptor;
+ DWORD Attributes;
+ DWORD Priority;
+ DWORD DefaultPriority;
+ DWORD StartTime;
+ DWORD UntilTime;
+ DWORD Status;
+ DWORD cJobs;
+ DWORD AveragePPM;
+} PRINTER_INFO_2W,*PPRINTER_INFO_2W,*LPPRINTER_INFO_2W;
+typedef struct _PRINTER_INFO_3 {
+ PSECURITY_DESCRIPTOR pSecurityDescriptor;
+} PRINTER_INFO_3,*PPRINTER_INFO_3,*LPPRINTER_INFO_3;
+typedef struct _PRINTER_INFO_4A {
+ LPSTR pPrinterName;
+ LPSTR pServerName;
+ DWORD Attributes;
+} PRINTER_INFO_4A,*PPRINTER_INFO_4A,*LPPRINTER_INFO_4A;
+typedef struct _PRINTER_INFO_4W {
+ LPWSTR pPrinterName;
+ LPWSTR pServerName;
+ DWORD Attributes;
+} PRINTER_INFO_4W,*PPRINTER_INFO_4W,*LPPRINTER_INFO_4W;
+typedef struct _PRINTER_INFO_5A {
+ LPSTR pPrinterName;
+ LPSTR pPortName;
+ DWORD Attributes;
+ DWORD DeviceNotSelectedTimeout;
+ DWORD TransmissionRetryTimeout;
+} PRINTER_INFO_5A,*PPRINTER_INFO_5A,*LPPRINTER_INFO_5A;
+typedef struct _PRINTER_INFO_5W {
+ LPWSTR pPrinterName;
+ LPWSTR pPortName;
+ DWORD Attributes;
+ DWORD DeviceNotSelectedTimeout;
+ DWORD TransmissionRetryTimeout;
+} PRINTER_INFO_5W,*PPRINTER_INFO_5W,*LPPRINTER_INFO_5W;
+typedef struct _PRINTER_INFO_6 {
+ DWORD dwStatus;
+} PRINTER_INFO_6,*PPRINTER_INFO_6,*LPPRINTER_INFO_6;
+#if (_WIN32_WINNT >= 0x0500)
+typedef struct _PRINTER_INFO_7A {
+ LPWSTR pszObjectGUID;
+ DWORD dwAction;
+} PRINTER_INFO_7A,*PPRINTER_INFO_7A,*LPPRINTER_INFO_7A;
+typedef struct _PRINTER_INFO_7W {
+ LPWSTR pszObjectGUID;
+ DWORD dwAction;
+} PRINTER_INFO_7W,*PPRINTER_INFO_7W,*LPPRINTER_INFO_7W;
+typedef struct _PRINTER_INFO_8 {
+ LPDEVMODE pDevMode;
+} PRINTER_INFO_8,*PPRINTER_INFO_8,*LPPRINTER_INFO_8;
+typedef struct _PRINTER_INFO_9 {
+ LPDEVMODE pDevMode;
+} PRINTER_INFO_9,*PPRINTER_INFO_9,*LPPRINTER_INFO_9;
+#endif
+typedef struct _PRINTPROCESSOR_INFO_1A {LPSTR pName;} PRINTPROCESSOR_INFO_1A,*PPRINTPROCESSOR_INFO_1A,*LPPRINTPROCESSOR_INFO_1A;
+typedef struct _PRINTPROCESSOR_INFO_1W {LPWSTR pName;} PRINTPROCESSOR_INFO_1W,*PPRINTPROCESSOR_INFO_1W,*LPPRINTPROCESSOR_INFO_1W;
+typedef struct _PRINTER_NOTIFY_INFO_DATA {
+ WORD Type;
+ WORD Field;
+ DWORD Reserved;
+ DWORD Id;
+ union {
+ DWORD adwData[2];
+ struct {
+ DWORD cbBuf;
+ PVOID pBuf;
+ } Data;
+ } NotifyData;
+} PRINTER_NOTIFY_INFO_DATA,*PPRINTER_NOTIFY_INFO_DATA,*LPPRINTER_NOTIFY_INFO_DATA;
+typedef struct _PRINTER_NOTIFY_INFO {
+ DWORD Version;
+ DWORD Flags;
+ DWORD Count;
+ PRINTER_NOTIFY_INFO_DATA aData[1];
+} PRINTER_NOTIFY_INFO,*PPRINTER_NOTIFY_INFO,*LPPRINTER_NOTIFY_INFO;
+typedef struct _FORM_INFO_1A {
+ DWORD Flags;
+ LPSTR pName;
+ SIZEL Size;
+ RECTL ImageableArea;
+} FORM_INFO_1A,*PFORM_INFO_1A,*LPFORM_INFO_1A;
+typedef struct _FORM_INFO_1W {
+ DWORD Flags;
+ LPWSTR pName;
+ SIZEL Size;
+ RECTL ImageableArea;
+} FORM_INFO_1W,*PFORM_INFO_1W,*LPFORM_INFO_1W;
+typedef struct _PRINTER_DEFAULTSA {
+ LPSTR pDatatype;
+ LPDEVMODE pDevMode;
+ ACCESS_MASK DesiredAccess;
+} PRINTER_DEFAULTSA,*PPRINTER_DEFAULTSA,*LPPRINTER_DEFAULTSA;
+typedef struct _PRINTER_DEFAULTSW {
+ LPWSTR pDatatype;
+ LPDEVMODE pDevMode;
+ ACCESS_MASK DesiredAccess;
+} PRINTER_DEFAULTSW,*PPRINTER_DEFAULTSW,*LPPRINTER_DEFAULTSW;
+#if (_WIN32_WINNT >= 0x0500)
+typedef struct _PRINTPROCESSOR_CAPS_1 {
+ DWORD dwLevel;
+ DWORD dwNupOptions;
+ DWORD dwPageOrderFlags;
+ DWORD dwNumberOfCopies;
+} PRINTPROCESSOR_CAPS_1,*PPRINTPROCESSOR_CAPS_1,*LPPRINTPROCESSOR_CAPS_1;
+#endif
+typedef struct _PROVIDOR_INFO_1A {
+ LPSTR pName;
+ LPSTR pEnvironment;
+ LPSTR pDLLName;
+} PROVIDOR_INFO_1A,*PPROVIDOR_INFO_1A,*LPPROVIDOR_INFO_1A;
+typedef struct _PROVIDOR_INFO_1W {
+ LPWSTR pName;
+ LPWSTR pEnvironment;
+ LPWSTR pDLLName;
+} PROVIDOR_INFO_1W,*PPROVIDOR_INFO_1W,*LPPROVIDOR_INFO_1W;
+typedef struct _PROVIDOR_INFO_2A {
+ LPSTR pOrder;
+} PROVIDOR_INFO_2A,*PPROVIDOR_INFO_2A,*LPROVIDOR_INFO_2A;
+typedef struct _PROVIDOR_INFO_2W {
+ LPWSTR pOrder;
+} PROVIDOR_INFO_2W,*PPROVIDOR_INFO_2W,*LPROVIDOR_INFO_2W;
+
+BOOL WINAPI AbortPrinter(HANDLE);
+BOOL WINAPI AddFormA(HANDLE,DWORD,PBYTE);
+BOOL WINAPI AddFormW(HANDLE,DWORD,PBYTE);
+BOOL WINAPI AddJobA(HANDLE,DWORD,PBYTE,DWORD,PDWORD);
+BOOL WINAPI AddJobW(HANDLE,DWORD,PBYTE,DWORD,PDWORD);
+BOOL WINAPI AddMonitorA(LPSTR,DWORD,PBYTE);
+BOOL WINAPI AddMonitorW(LPWSTR,DWORD,PBYTE);
+BOOL WINAPI AddPortA(LPSTR,HWND,LPSTR);
+BOOL WINAPI AddPortW(LPWSTR,HWND,LPWSTR);
+HANDLE WINAPI AddPrinterA(LPSTR,DWORD,PBYTE);
+HANDLE WINAPI AddPrinterW(LPWSTR,DWORD,PBYTE);
+BOOL WINAPI AddPrinterConnectionA(LPSTR);
+BOOL WINAPI AddPrinterConnectionW(LPWSTR);
+BOOL WINAPI AddPrinterDriverA(LPSTR,DWORD,PBYTE);
+BOOL WINAPI AddPrinterDriverW(LPWSTR,DWORD,PBYTE);
+BOOL WINAPI AddPrintProcessorA(LPSTR,LPSTR,LPSTR,LPSTR);
+BOOL WINAPI AddPrintProcessorW(LPWSTR,LPWSTR,LPWSTR,LPWSTR);
+BOOL WINAPI AddPrintProvidorA(LPSTR,DWORD,PBYTE);
+BOOL WINAPI AddPrintProvidorW(LPWSTR,DWORD,PBYTE);
+LONG WINAPI AdvancedDocumentPropertiesA(HWND,HANDLE,LPSTR,PDEVMODE,PDEVMODEA);
+LONG WINAPI AdvancedDocumentPropertiesW(HWND,HANDLE,LPWSTR,PDEVMODE,PDEVMODEW);
+BOOL WINAPI ClosePrinter(HANDLE);
+BOOL WINAPI ConfigurePortA(LPSTR,HWND,LPSTR);
+BOOL WINAPI ConfigurePortW(LPWSTR,HWND,LPWSTR);
+HANDLE WINAPI ConnectToPrinterDlg(HWND,DWORD);
+BOOL WINAPI DeleteFormA(HANDLE,LPSTR);
+BOOL WINAPI DeleteFormW(HANDLE,LPWSTR);
+BOOL WINAPI DeleteMonitorA(LPSTR,LPSTR,LPSTR);
+BOOL WINAPI DeleteMonitorW(LPWSTR,LPWSTR,LPWSTR);
+BOOL WINAPI DeletePortA(LPSTR,HWND,LPSTR);
+BOOL WINAPI DeletePortW(LPWSTR,HWND,LPWSTR);
+BOOL WINAPI DeletePrinter(HANDLE);
+BOOL WINAPI DeletePrinterConnectionA(LPSTR);
+BOOL WINAPI DeletePrinterConnectionW(LPWSTR);
+DWORD WINAPI DeletePrinterDataA(HANDLE,LPSTR);
+DWORD WINAPI DeletePrinterDataW(HANDLE,LPWSTR);
+BOOL WINAPI DeletePrinterDriverA(LPSTR,LPSTR,LPSTR);
+BOOL WINAPI DeletePrinterDriverW(LPWSTR,LPWSTR,LPWSTR);
+BOOL WINAPI DeletePrintProcessorA(LPSTR,LPSTR,LPSTR);
+BOOL WINAPI DeletePrintProcessorW(LPWSTR,LPWSTR,LPWSTR);
+BOOL WINAPI DeletePrintProvidorA(LPSTR,LPSTR,LPSTR);
+BOOL WINAPI DeletePrintProvidorW(LPWSTR,LPWSTR,LPWSTR);
+LONG WINAPI DocumentPropertiesA(HWND,HANDLE,LPSTR,PDEVMODEA,PDEVMODEA,DWORD);
+LONG WINAPI DocumentPropertiesW(HWND,HANDLE,LPWSTR,PDEVMODEW,PDEVMODEW,DWORD);
+BOOL WINAPI EndDocPrinter(HANDLE);
+BOOL WINAPI EndPagePrinter(HANDLE);
+BOOL WINAPI EnumFormsA(HANDLE,DWORD,PBYTE,DWORD,PDWORD,PDWORD);
+BOOL WINAPI EnumFormsW(HANDLE,DWORD,PBYTE,DWORD,PDWORD,PDWORD);
+BOOL WINAPI EnumJobsA(HANDLE,DWORD,DWORD,DWORD,PBYTE,DWORD,PDWORD,PDWORD);
+BOOL WINAPI EnumJobsW(HANDLE,DWORD,DWORD,DWORD,PBYTE,DWORD,PDWORD,PDWORD);
+BOOL WINAPI EnumMonitorsA(LPSTR,DWORD,PBYTE,DWORD,PDWORD,PDWORD);
+BOOL WINAPI EnumMonitorsW(LPWSTR,DWORD,PBYTE,DWORD,PDWORD,PDWORD);
+BOOL WINAPI EnumPortsA(LPSTR,DWORD,PBYTE,DWORD,PDWORD,PDWORD);
+BOOL WINAPI EnumPortsW(LPWSTR,DWORD,PBYTE,DWORD,PDWORD,PDWORD);
+DWORD WINAPI EnumPrinterDataA(HANDLE,DWORD,LPSTR,DWORD,PDWORD,PDWORD,PBYTE,DWORD,PDWORD);
+DWORD WINAPI EnumPrinterDataW(HANDLE,DWORD,LPWSTR,DWORD,PDWORD,PDWORD,PBYTE,DWORD,PDWORD);
+BOOL WINAPI EnumPrinterDriversA(LPSTR,LPSTR,DWORD,PBYTE,DWORD,PDWORD,PDWORD);
+BOOL WINAPI EnumPrinterDriversW(LPWSTR,LPWSTR,DWORD,PBYTE,DWORD,PDWORD,PDWORD);
+BOOL WINAPI EnumPrintersA(DWORD,LPSTR,DWORD,PBYTE,DWORD,PDWORD,PDWORD);
+BOOL WINAPI EnumPrintersW(DWORD,LPWSTR,DWORD,PBYTE,DWORD,PDWORD,PDWORD);
+BOOL WINAPI EnumPrintProcessorDatatypesA(LPSTR,LPSTR,DWORD,PBYTE,DWORD,PDWORD,PDWORD);
+BOOL WINAPI EnumPrintProcessorDatatypesW(LPWSTR,LPWSTR,DWORD,PBYTE,DWORD,PDWORD,PDWORD);
+BOOL WINAPI EnumPrintProcessorsA(LPSTR,LPSTR,DWORD,PBYTE,DWORD,PDWORD,PDWORD);
+BOOL WINAPI EnumPrintProcessorsW(LPWSTR,LPWSTR,DWORD,PBYTE,DWORD,PDWORD,PDWORD);
+BOOL WINAPI FindClosePrinterChangeNotification(HANDLE);
+HANDLE WINAPI FindFirstPrinterChangeNotification(HANDLE,DWORD,DWORD,PVOID);
+HANDLE WINAPI FindNextPrinterChangeNotification(HANDLE,PDWORD,PVOID,PVOID*);
+BOOL WINAPI FreePrinterNotifyInfo(PPRINTER_NOTIFY_INFO);
+#if _WIN32_WINNT >= 0x0500
+BOOL WINAPI GetDefaultPrinterA(LPSTR,LPDWORD);
+BOOL WINAPI GetDefaultPrinterW(LPWSTR,LPDWORD);
+#endif
+BOOL WINAPI GetFormA(HANDLE,LPSTR,DWORD,PBYTE,DWORD,PDWORD);
+BOOL WINAPI GetFormW(HANDLE,LPWSTR,DWORD,PBYTE,DWORD,PDWORD);
+BOOL WINAPI GetJobA(HANDLE,DWORD,DWORD,PBYTE,DWORD,PDWORD);
+BOOL WINAPI GetJobW(HANDLE,DWORD,DWORD,PBYTE,DWORD,PDWORD);
+BOOL WINAPI GetPrinterA(HANDLE,DWORD,PBYTE,DWORD,PDWORD);
+BOOL WINAPI GetPrinterW(HANDLE,DWORD,PBYTE,DWORD,PDWORD);
+DWORD WINAPI GetPrinterDataA(HANDLE,LPSTR,PDWORD,PBYTE,DWORD,PDWORD);
+DWORD WINAPI GetPrinterDataW(HANDLE,LPWSTR,PDWORD,PBYTE,DWORD,PDWORD);
+DWORD WINAPI GetPrinterDriverA(HANDLE,LPSTR,DWORD,PBYTE,DWORD,PDWORD);
+DWORD WINAPI GetPrinterDriverW(HANDLE,LPWSTR,DWORD,PBYTE,DWORD,PDWORD);
+DWORD WINAPI GetPrinterDriverDirectoryA(LPSTR,LPSTR,DWORD,PBYTE,DWORD,PDWORD);
+DWORD WINAPI GetPrinterDriverDirectoryW(LPWSTR,LPWSTR,DWORD,PBYTE,DWORD,PDWORD);
+DWORD WINAPI GetPrintProcessorDirectoryA(LPSTR,LPSTR,DWORD,PBYTE,DWORD,PDWORD);
+DWORD WINAPI GetPrintProcessorDirectoryW(LPWSTR,LPWSTR,DWORD,PBYTE,DWORD,PDWORD);
+BOOL WINAPI OpenPrinterA(LPSTR,PHANDLE,LPPRINTER_DEFAULTSA);
+BOOL WINAPI OpenPrinterW(LPWSTR,PHANDLE,LPPRINTER_DEFAULTSW);
+DWORD WINAPI PrinterMessageBoxA(HANDLE,DWORD,HWND,LPSTR,LPSTR,DWORD);
+DWORD WINAPI PrinterMessageBoxW(HANDLE,DWORD,HWND,LPWSTR,LPWSTR,DWORD);
+BOOL WINAPI PrinterProperties(HWND,HANDLE);
+BOOL WINAPI ReadPrinter(HANDLE,PVOID,DWORD,PDWORD);
+BOOL WINAPI ResetPrinterA(HANDLE,LPPRINTER_DEFAULTSA);
+BOOL WINAPI ResetPrinterW(HANDLE,LPPRINTER_DEFAULTSW);
+BOOL WINAPI ScheduleJob(HANDLE,DWORD);
+BOOL WINAPI SetFormA(HANDLE,LPSTR,DWORD,PBYTE);
+BOOL WINAPI SetFormW(HANDLE,LPWSTR,DWORD,PBYTE);
+BOOL WINAPI SetJobA(HANDLE,DWORD,DWORD,PBYTE,DWORD);
+BOOL WINAPI SetJobW(HANDLE,DWORD,DWORD,PBYTE,DWORD);
+BOOL WINAPI SetPrinterA(HANDLE,DWORD,PBYTE,DWORD);
+BOOL WINAPI SetPrinterW(HANDLE,DWORD,PBYTE,DWORD);
+BOOL WINAPI SetPrinterDataA(HANDLE,LPSTR,DWORD,PBYTE,DWORD);
+BOOL WINAPI SetPrinterDataW(HANDLE,LPWSTR,DWORD,PBYTE,DWORD);
+DWORD WINAPI StartDocPrinterA(HANDLE,DWORD,PBYTE);
+DWORD WINAPI StartDocPrinterW(HANDLE,DWORD,PBYTE);
+BOOL WINAPI StartPagePrinter(HANDLE);
+DWORD WINAPI WaitForPrinterChange(HANDLE,DWORD);
+BOOL WINAPI WritePrinter(HANDLE,PVOID,DWORD,PDWORD);
+
+#ifdef UNICODE
+typedef JOB_INFO_1W JOB_INFO_1,*PJOB_INFO_1,*LPJOB_INFO_1;
+typedef JOB_INFO_2W JOB_INFO_2,*PJOB_INFO_2,*LPJOB_INFO_2;
+typedef ADDJOB_INFO_1W ADDJOB_INFO_1,*PADDJOB_INFO_1,*LPADDJOB_INFO_1;
+typedef DATATYPES_INFO_1W DATATYPES_INFO_1,*PDATATYPES_INFO_1,*LPDATATYPES_INFO_1;
+typedef MONITOR_INFO_1W MONITOR_INFO_1,*PMONITOR_INFO_1,*LPMONITOR_INFO_1;
+typedef MONITOR_INFO_2W MONITOR_INFO_2,*PMONITOR_INFO_2,*LPMONITOR_INFO_2;
+typedef DOC_INFO_1W DOC_INFO_1,*PDOC_INFO_1,*LPDOC_INFO_1;
+typedef DOC_INFO_2W DOC_INFO_2,*PDOC_INFO_2,*LPDOC_INFO_2;
+typedef PORT_INFO_1W PORT_INFO_1,*PPORT_INFO_1,*LPPORT_INFO_1;
+typedef PORT_INFO_2W PORT_INFO_2,*PPORT_INFO_2,*LPPORT_INFO_2;
+typedef PORT_INFO_3W PORT_INFO_3,*PPORT_INFO_3,*LPPORT_INFO_3;
+typedef DRIVER_INFO_1W DRIVER_INFO_1,*PDRIVER_INFO_1,*LPDRIVER_INFO_1;
+typedef DRIVER_INFO_2W DRIVER_INFO_2,*PDRIVER_INFO_2,*LPDRIVER_INFO_2;
+typedef DRIVER_INFO_3W DRIVER_INFO_3,*PDRIVER_INFO_3,*LPDRIVER_INFO_3;
+#if (_WIN32_WINNT >= 0x0500)
+typedef DRIVER_INFO_4W DRIVER_INFO_4,*PDRIVER_INFO_4,*LPDRIVER_INFO_4;
+typedef DRIVER_INFO_5W DRIVER_INFO_5,*PDRIVER_INFO_5,*LPDRIVER_INFO_5;
+typedef DRIVER_INFO_6W DRIVER_INFO_6,*PDRIVER_INFO_6,*LPDRIVER_INFO_6;
+typedef PRINTER_ENUM_VALUESW PRINTER_ENUM_VALUES,*PPRINTER_ENUM_VALUES,*LPRINTER_ENUM_VALUES;
+#endif
+typedef PRINTER_INFO_1W PRINTER_INFO_1,*PPRINTER_INFO_1,*LPPRINTER_INFO_1;
+typedef PRINTER_INFO_2W PRINTER_INFO_2,*PPRINTER_INFO_2,*LPPRINTER_INFO_2;
+typedef PRINTER_INFO_4W PRINTER_INFO_4,*PPRINTER_INFO_4,*LPPRINTER_INFO_4;
+typedef PRINTER_INFO_5W PRINTER_INFO_5,*PPRINTER_INFO_5,*LPPRINTER_INFO_5;
+#if (_WIN32_WINNT >= 0x0500)
+typedef PRINTER_INFO_7W PRINTER_INFO_7,*PPRINTER_INFO_7,*LPPRINTER_INFO_7;
+#endif
+typedef PRINTPROCESSOR_INFO_1W PRINTPROCESSOR_INFO_1,*PPRINTPROCESSOR_INFO_1,*LPPRINTPROCESSOR_INFO_1;
+typedef FORM_INFO_1W FORM_INFO_1,*PFORM_INFO_1,*LPFORM_INFO_1;
+typedef PRINTER_DEFAULTSW PRINTER_DEFAULTS,*PPRINTER_DEFAULTS,*LPPRINTER_DEFAULTS;
+typedef PROVIDOR_INFO_1W PROVIDOR_INFO_1,*PPROVIDOR_INFO_1,*LPROVIDOR_INFO_1;
+typedef PROVIDOR_INFO_2W PROVIDOR_INFO_2,*PPROVIDOR_INFO_2,*LPROVIDOR_INFO_2;
+#define AddForm AddFormW
+#define AddJob AddJobW
+#define AddMonitor AddMonitorW
+#define AddPort AddPortW
+#define AddPrinter AddPrinterW
+#define AddPrinterConnection AddPrinterConnectionW
+#define AddPrinterDriver AddPrinterDriverW
+#define AddPrintProcessor AddPrintProcessorW
+#define AddPrintProvidor AddPrintProvidorW
+#define AdvancedDocumentProperties AdvancedDocumentPropertiesW
+#define ConfigurePort ConfigurePortW
+#define DeleteForm DeleteFormW
+#define DeleteMonitor DeleteMonitorW
+#define DeletePort DeletePortW
+#define DeletePrinterConnection DeletePrinterConnectionW
+#define DeletePrinterData DeletePrinterDataW
+#define DeletePrinterDriver DeletePrinterDriverW
+#define DeletePrintProcessor DeletePrinterProcessorW
+#define DeletePrintProvidor DeletePrinterProvidorW
+#define DocumentProperties DocumentPropertiesW
+#define EnumForms EnumFormsW
+#define EnumJobs EnumJobsW
+#define EnumMonitors EnumMonitorsW
+#define EnumPorts EnumPortsW
+#define EnumPrinterData EnumPrinterDataW
+#define EnumPrinterDrivers EnumPrinterDriversW
+#define EnumPrinters EnumPrintersW
+#define EnumPrintProcessorDatatypes EnumPrintProcessorDatatypesW
+#define EnumPrintProcessors EnumPrintProcessorsW
+#define GetDefaultPrinter GetDefaultPrinterW
+#define GetForm GetFormW
+#define GetJob GetJobW
+#define GetPrinter GetPrinterW
+#define GetPrinterData GetPrinterDataW
+#define GetPrinterDriver GetPrinterDriverW
+#define GetPrinterDriverDirectory GetPrinterDriverDirectoryW
+#define GetPrintProcessorDirectory GetPrintProcessorDirectoryW
+#define OpenPrinter OpenPrinterW
+#define PrinterMessageBox PrinterMessageBoxW
+#define ResetPrinter ResetPrinterW
+#define SetForm SetFormW
+#define SetJob SetJobW
+#define SetPrinter SetPrinterW
+#define SetPrinterData SetPrinterDataW
+#define StartDocPrinter StartDocPrinterW
+#else
+typedef JOB_INFO_1A JOB_INFO_1,*PJOB_INFO_1,*LPJOB_INFO_1;
+typedef JOB_INFO_2A JOB_INFO_2,*PJOB_INFO_2,*LPJOB_INFO_2;
+typedef ADDJOB_INFO_1A ADDJOB_INFO_1,*PADDJOB_INFO_1,*LPADDJOB_INFO_1;
+typedef DATATYPES_INFO_1A DATATYPES_INFO_1,*PDATATYPES_INFO_1,*LPDATATYPES_INFO_1;
+typedef MONITOR_INFO_1A MONITOR_INFO_1,*PMONITOR_INFO_1,*LPMONITOR_INFO_1;
+typedef MONITOR_INFO_2A MONITOR_INFO_2,*PMONITOR_INFO_2,*LPMONITOR_INFO_2;
+typedef DOC_INFO_1A DOC_INFO_1,*PDOC_INFO_1,*LPDOC_INFO_1;
+typedef DOC_INFO_2A DOC_INFO_2,*PDOC_INFO_2,*LPDOC_INFO_2;
+typedef PORT_INFO_1A PORT_INFO_1,*PPORT_INFO_1,*LPPORT_INFO_1;
+typedef PORT_INFO_2A PORT_INFO_2,*PPORT_INFO_2,*LPPORT_INFO_2;
+typedef PORT_INFO_3A PORT_INFO_3,*PPORT_INFO_3,*LPPORT_INFO_3;
+typedef DRIVER_INFO_1A DRIVER_INFO_1,*PDRIVER_INFO_1,*LPDRIVER_INFO_1;
+typedef DRIVER_INFO_2A DRIVER_INFO_2,*PDRIVER_INFO_2,*LPDRIVER_INFO_2;
+typedef DRIVER_INFO_3A DRIVER_INFO_3,*PDRIVER_INFO_3,*LPDRIVER_INFO_3;
+#if (_WIN32_WINNT >= 0x0500)
+typedef DRIVER_INFO_4A DRIVER_INFO_4,*PDRIVER_INFO_4,*LPDRIVER_INFO_4;
+typedef DRIVER_INFO_5A DRIVER_INFO_5,*PDRIVER_INFO_5,*LPDRIVER_INFO_5;
+typedef DRIVER_INFO_6A DRIVER_INFO_6,*PDRIVER_INFO_6,*LPDRIVER_INFO_6;
+typedef PRINTER_ENUM_VALUESA PRINTER_ENUM_VALUES,*PPRINTER_ENUM_VALUES,*LPRINTER_ENUM_VALUES;
+#endif
+typedef PRINTER_INFO_1A PRINTER_INFO_1,*PPRINTER_INFO_1,*LPPRINTER_INFO_1;
+typedef PRINTER_INFO_2A PRINTER_INFO_2,*PPRINTER_INFO_2,*LPPRINTER_INFO_2;
+typedef PRINTER_INFO_4A PRINTER_INFO_4,*PPRINTER_INFO_4,*LPPRINTER_INFO_4;
+typedef PRINTER_INFO_5A PRINTER_INFO_5,*PPRINTER_INFO_5,*LPPRINTER_INFO_5;
+#if (_WIN32_WINNT >= 0x0500)
+typedef PRINTER_INFO_7A PRINTER_INFO_7,*PPRINTER_INFO_7,*LPPRINTER_INFO_7;
+#endif
+typedef PRINTPROCESSOR_INFO_1A PRINTPROCESSOR_INFO_1,*PPRINTPROCESSOR_INFO_1,*LPPRINTPROCESSOR_INFO_1;
+typedef FORM_INFO_1A FORM_INFO_1,*PFORM_INFO_1,*LPFORM_INFO_1;
+typedef PRINTER_DEFAULTSA PRINTER_DEFAULTS,*PPRINTER_DEFAULTS,*LPPRINTER_DEFAULTS;
+typedef PROVIDOR_INFO_1A PROVIDOR_INFO_1,*PPROVIDOR_INFO_1,*LPROVIDOR_INFO_1;
+typedef PROVIDOR_INFO_2A PROVIDOR_INFO_2,*PPROVIDOR_INFO_2,*LPROVIDOR_INFO_2;
+#define AddForm AddFormA
+#define AddJob AddJobA
+#define AddMonitor AddMonitorA
+#define AddPort AddPortA
+#define AddPrinter AddPrinterA
+#define AddPrinterConnection AddPrinterConnectionA
+#define AddPrinterDriver AddPrinterDriverA
+#define AddPrintProcessor AddPrintProcessorA
+#define AddPrintProvidor AddPrintProvidorA
+#define AdvancedDocumentProperties AdvancedDocumentPropertiesA
+#define ConfigurePort ConfigurePortA
+#define DeleteForm DeleteFormA
+#define DeleteMonitor DeleteMonitorA
+#define DeletePort DeletePortA
+#define DeletePrinterConnection DeletePrinterConnectionA
+#define DeletePrinterData DeletePrinterDataA
+#define DeletePrinterDriver DeletePrinterDriverA
+#define DeletePrintProcessor DeletePrinterProcessorA
+#define DeletePrintProvidor DeletePrinterProvidorA
+#define DocumentProperties DocumentPropertiesA
+#define EnumForms EnumFormsA
+#define EnumJobs EnumJobsA
+#define EnumMonitors EnumMonitorsA
+#define EnumPorts EnumPortsA
+#define EnumPrinterData EnumPrinterDataA
+#define EnumPrinterDrivers EnumPrinterDriversA
+#define EnumPrinters EnumPrintersA
+#define EnumPrintProcessorDatatypes EnumPrintProcessorDatatypesA
+#define EnumPrintProcessors EnumPrintProcessorsA
+#define GetDefaultPrinter GetDefaultPrinterA
+#define GetForm GetFormA
+#define GetJob GetJobA
+#define GetPrinter GetPrinterA
+#define GetPrinterData GetPrinterDataA
+#define GetPrinterDriver GetPrinterDriverA
+#define GetPrinterDriverDirectory GetPrinterDriverDirectoryA
+#define GetPrintProcessorDirectory GetPrintProcessorDirectoryA
+#define OpenPrinter OpenPrinterA
+#define PrinterMessageBox PrinterMessageBoxA
+#define ResetPrinter ResetPrinterA
+#define SetForm SetFormA
+#define SetJob SetJobA
+#define SetPrinter SetPrinterA
+#define SetPrinterData SetPrinterDataA
+#define StartDocPrinter StartDocPrinterA
+#endif
+#endif /* RC_INVOKED */
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/winsvc.h b/tcc/include/winapi/winsvc.h
new file mode 100644
index 0000000..a51440f
--- /dev/null
+++ b/tcc/include/winapi/winsvc.h
@@ -0,0 +1,313 @@
+#ifndef _WINSVC_H
+#define _WINSVC_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifndef WINADVAPI
+#define WINADVAPI
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#define SERVICES_ACTIVE_DATABASEA "ServicesActive"
+#define SERVICES_ACTIVE_DATABASEW L"ServicesActive"
+#define SERVICES_FAILED_DATABASEA "ServicesFailed"
+#define SERVICES_FAILED_DATABASEW L"ServicesFailed"
+#define SC_GROUP_IDENTIFIERA '+'
+#define SC_GROUP_IDENTIFIERW L'+'
+#define SC_MANAGER_ALL_ACCESS 0xf003f
+#define SC_MANAGER_CONNECT 1
+#define SC_MANAGER_CREATE_SERVICE 2
+#define SC_MANAGER_ENUMERATE_SERVICE 4
+#define SC_MANAGER_LOCK 8
+#define SC_MANAGER_QUERY_LOCK_STATUS 16
+#define SC_MANAGER_MODIFY_BOOT_CONFIG 32
+#define SERVICE_NO_CHANGE 0xffffffff
+#define SERVICE_STOPPED 1
+#define SERVICE_START_PENDING 2
+#define SERVICE_STOP_PENDING 3
+#define SERVICE_RUNNING 4
+#define SERVICE_CONTINUE_PENDING 5
+#define SERVICE_PAUSE_PENDING 6
+#define SERVICE_PAUSED 7
+#define SERVICE_ACCEPT_STOP 1
+#define SERVICE_ACCEPT_PAUSE_CONTINUE 2
+#define SERVICE_ACCEPT_SHUTDOWN 4
+#define SERVICE_ACCEPT_PARAMCHANGE 8
+#define SERVICE_ACCEPT_NETBINDCHANGE 16
+#define SERVICE_ACCEPT_HARDWAREPROFILECHANGE 32
+#define SERVICE_ACCEPT_POWEREVENT 64
+#define SERVICE_ACCEPT_SESSIONCHANGE 128
+#define SERVICE_CONTROL_STOP 1
+#define SERVICE_CONTROL_PAUSE 2
+#define SERVICE_CONTROL_CONTINUE 3
+#define SERVICE_CONTROL_INTERROGATE 4
+#define SERVICE_CONTROL_SHUTDOWN 5
+#define SERVICE_CONTROL_PARAMCHANGE 6
+#define SERVICE_CONTROL_NETBINDADD 7
+#define SERVICE_CONTROL_NETBINDREMOVE 8
+#define SERVICE_CONTROL_NETBINDENABLE 9
+#define SERVICE_CONTROL_NETBINDDISABLE 10
+#define SERVICE_CONTROL_DEVICEEVENT 11
+#define SERVICE_CONTROL_HARDWAREPROFILECHANGE 12
+#define SERVICE_CONTROL_POWEREVENT 13
+#define SERVICE_CONTROL_SESSIONCHANGE 14
+#define SERVICE_ACTIVE 1
+#define SERVICE_INACTIVE 2
+#define SERVICE_STATE_ALL 3
+#define SERVICE_QUERY_CONFIG 1
+#define SERVICE_CHANGE_CONFIG 2
+#define SERVICE_QUERY_STATUS 4
+#define SERVICE_ENUMERATE_DEPENDENTS 8
+#define SERVICE_START 16
+#define SERVICE_STOP 32
+#define SERVICE_PAUSE_CONTINUE 64
+#define SERVICE_INTERROGATE 128
+#define SERVICE_USER_DEFINED_CONTROL 256
+#define SERVICE_ALL_ACCESS (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)
+#define SERVICE_RUNS_IN_SYSTEM_PROCESS 1
+#define SERVICE_CONFIG_DESCRIPTION 1
+#define SERVICE_CONFIG_FAILURE_ACTIONS 2
+
+typedef struct _SERVICE_STATUS {
+ DWORD dwServiceType;
+ DWORD dwCurrentState;
+ DWORD dwControlsAccepted;
+ DWORD dwWin32ExitCode;
+ DWORD dwServiceSpecificExitCode;
+ DWORD dwCheckPoint;
+ DWORD dwWaitHint;
+} SERVICE_STATUS,*LPSERVICE_STATUS;
+typedef struct _SERVICE_STATUS_PROCESS {
+ DWORD dwServiceType;
+ DWORD dwCurrentState;
+ DWORD dwControlsAccepted;
+ DWORD dwWin32ExitCode;
+ DWORD dwServiceSpecificExitCode;
+ DWORD dwCheckPoint;
+ DWORD dwWaitHint;
+ DWORD dwProcessId;
+ DWORD dwServiceFlags;
+} SERVICE_STATUS_PROCESS, *LPSERVICE_STATUS_PROCESS;
+typedef enum _SC_STATUS_TYPE {
+ SC_STATUS_PROCESS_INFO = 0
+} SC_STATUS_TYPE;
+typedef enum _SC_ENUM_TYPE {
+ SC_ENUM_PROCESS_INFO = 0
+} SC_ENUM_TYPE;
+typedef struct _ENUM_SERVICE_STATUSA {
+ LPSTR lpServiceName;
+ LPSTR lpDisplayName;
+ SERVICE_STATUS ServiceStatus;
+} ENUM_SERVICE_STATUSA,*LPENUM_SERVICE_STATUSA;
+typedef struct _ENUM_SERVICE_STATUSW {
+ LPWSTR lpServiceName;
+ LPWSTR lpDisplayName;
+ SERVICE_STATUS ServiceStatus;
+} ENUM_SERVICE_STATUSW,*LPENUM_SERVICE_STATUSW;
+typedef struct _ENUM_SERVICE_STATUS_PROCESSA {
+ LPSTR lpServiceName;
+ LPSTR lpDisplayName;
+ SERVICE_STATUS_PROCESS ServiceStatusProcess;
+} ENUM_SERVICE_STATUS_PROCESSA,*LPENUM_SERVICE_STATUS_PROCESSA;
+typedef struct _ENUM_SERVICE_STATUS_PROCESSW {
+ LPWSTR lpServiceName;
+ LPWSTR lpDisplayName;
+ SERVICE_STATUS_PROCESS ServiceStatusProcess;
+} ENUM_SERVICE_STATUS_PROCESSW,*LPENUM_SERVICE_STATUS_PROCESSW;
+typedef struct _QUERY_SERVICE_CONFIGA {
+ DWORD dwServiceType;
+ DWORD dwStartType;
+ DWORD dwErrorControl;
+ LPSTR lpBinaryPathName;
+ LPSTR lpLoadOrderGroup;
+ DWORD dwTagId;
+ LPSTR lpDependencies;
+ LPSTR lpServiceStartName;
+ LPSTR lpDisplayName;
+} QUERY_SERVICE_CONFIGA,*LPQUERY_SERVICE_CONFIGA;
+typedef struct _QUERY_SERVICE_CONFIGW {
+ DWORD dwServiceType;
+ DWORD dwStartType;
+ DWORD dwErrorControl;
+ LPWSTR lpBinaryPathName;
+ LPWSTR lpLoadOrderGroup;
+ DWORD dwTagId;
+ LPWSTR lpDependencies;
+ LPWSTR lpServiceStartName;
+ LPWSTR lpDisplayName;
+} QUERY_SERVICE_CONFIGW,*LPQUERY_SERVICE_CONFIGW;
+typedef struct _QUERY_SERVICE_LOCK_STATUSA {
+ DWORD fIsLocked;
+ LPSTR lpLockOwner;
+ DWORD dwLockDuration;
+} QUERY_SERVICE_LOCK_STATUSA,*LPQUERY_SERVICE_LOCK_STATUSA;
+typedef struct _QUERY_SERVICE_LOCK_STATUSW {
+ DWORD fIsLocked;
+ LPWSTR lpLockOwner;
+ DWORD dwLockDuration;
+} QUERY_SERVICE_LOCK_STATUSW,*LPQUERY_SERVICE_LOCK_STATUSW;
+typedef void (WINAPI *LPSERVICE_MAIN_FUNCTIONA)(DWORD,LPSTR*);
+typedef void (WINAPI *LPSERVICE_MAIN_FUNCTIONW)(DWORD,LPWSTR*);
+typedef struct _SERVICE_TABLE_ENTRYA {
+ LPSTR lpServiceName;
+ LPSERVICE_MAIN_FUNCTIONA lpServiceProc;
+} SERVICE_TABLE_ENTRYA,*LPSERVICE_TABLE_ENTRYA;
+typedef struct _SERVICE_TABLE_ENTRYW {
+ LPWSTR lpServiceName;
+ LPSERVICE_MAIN_FUNCTIONW lpServiceProc;
+} SERVICE_TABLE_ENTRYW,*LPSERVICE_TABLE_ENTRYW;
+DECLARE_HANDLE(SC_HANDLE);
+typedef SC_HANDLE *LPSC_HANDLE;
+typedef PVOID SC_LOCK;
+typedef DWORD SERVICE_STATUS_HANDLE;
+typedef VOID(WINAPI *LPHANDLER_FUNCTION)(DWORD);
+typedef DWORD (WINAPI *LPHANDLER_FUNCTION_EX)(DWORD,DWORD,LPVOID,LPVOID);
+typedef struct _SERVICE_DESCRIPTIONA {
+ LPSTR lpDescription;
+} SERVICE_DESCRIPTIONA,*LPSERVICE_DESCRIPTIONA;
+typedef struct _SERVICE_DESCRIPTIONW {
+ LPWSTR lpDescription;
+} SERVICE_DESCRIPTIONW,*LPSERVICE_DESCRIPTIONW;
+typedef enum _SC_ACTION_TYPE {
+ SC_ACTION_NONE = 0,
+ SC_ACTION_RESTART = 1,
+ SC_ACTION_REBOOT = 2,
+ SC_ACTION_RUN_COMMAND = 3
+} SC_ACTION_TYPE;
+typedef struct _SC_ACTION {
+ SC_ACTION_TYPE Type;
+ DWORD Delay;
+} SC_ACTION,*LPSC_ACTION;
+typedef struct _SERVICE_FAILURE_ACTIONSA {
+ DWORD dwResetPeriod;
+ LPSTR lpRebootMsg;
+ LPSTR lpCommand;
+ DWORD cActions;
+ SC_ACTION * lpsaActions;
+} SERVICE_FAILURE_ACTIONSA,*LPSERVICE_FAILURE_ACTIONSA;
+typedef struct _SERVICE_FAILURE_ACTIONSW {
+ DWORD dwResetPeriod;
+ LPWSTR lpRebootMsg;
+ LPWSTR lpCommand;
+ DWORD cActions;
+ SC_ACTION * lpsaActions;
+} SERVICE_FAILURE_ACTIONSW,*LPSERVICE_FAILURE_ACTIONSW;
+
+WINADVAPI BOOL WINAPI ChangeServiceConfigA(SC_HANDLE,DWORD,DWORD,DWORD,LPCSTR,LPCSTR,LPDWORD,LPCSTR,LPCSTR,LPCSTR,LPCSTR);
+WINADVAPI BOOL WINAPI ChangeServiceConfigW(SC_HANDLE,DWORD,DWORD,DWORD,LPCWSTR,LPCWSTR,LPDWORD,LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR);
+WINADVAPI BOOL WINAPI ChangeServiceConfig2A(SC_HANDLE,DWORD,LPVOID);
+WINADVAPI BOOL WINAPI ChangeServiceConfig2W(SC_HANDLE,DWORD,LPVOID);
+WINADVAPI BOOL WINAPI CloseServiceHandle(SC_HANDLE);
+WINADVAPI BOOL WINAPI ControlService(SC_HANDLE,DWORD,LPSERVICE_STATUS);
+WINADVAPI SC_HANDLE WINAPI CreateServiceA(SC_HANDLE,LPCSTR,LPCSTR,DWORD,DWORD,DWORD,DWORD,LPCSTR,LPCSTR,PDWORD,LPCSTR,LPCSTR,LPCSTR);
+WINADVAPI SC_HANDLE WINAPI CreateServiceW(SC_HANDLE,LPCWSTR,LPCWSTR,DWORD,DWORD,DWORD,DWORD,LPCWSTR,LPCWSTR,PDWORD,LPCWSTR,LPCWSTR,LPCWSTR);
+WINADVAPI BOOL WINAPI DeleteService(SC_HANDLE);
+WINADVAPI BOOL WINAPI EnumDependentServicesA(SC_HANDLE,DWORD,LPENUM_SERVICE_STATUSA,DWORD,PDWORD,PDWORD);
+WINADVAPI BOOL WINAPI EnumDependentServicesW(SC_HANDLE,DWORD,LPENUM_SERVICE_STATUSW,DWORD,PDWORD,PDWORD);
+WINADVAPI BOOL WINAPI EnumServicesStatusA(SC_HANDLE,DWORD,DWORD,LPENUM_SERVICE_STATUSA,DWORD,PDWORD,PDWORD,PDWORD);
+WINADVAPI BOOL WINAPI EnumServicesStatusW(SC_HANDLE,DWORD,DWORD,LPENUM_SERVICE_STATUSW,DWORD,PDWORD,PDWORD,PDWORD);
+WINADVAPI BOOL WINAPI EnumServicesStatusExA(SC_HANDLE,SC_ENUM_TYPE,DWORD,DWORD,LPBYTE,DWORD,LPDWORD,LPDWORD,LPDWORD,LPCSTR);
+WINADVAPI BOOL WINAPI EnumServicesStatusExW(SC_HANDLE,SC_ENUM_TYPE,DWORD,DWORD,LPBYTE,DWORD,LPDWORD,LPDWORD,LPDWORD,LPCWSTR);
+WINADVAPI BOOL WINAPI GetServiceDisplayNameA(SC_HANDLE,LPCSTR,LPSTR,PDWORD);
+WINADVAPI BOOL WINAPI GetServiceDisplayNameW(SC_HANDLE,LPCWSTR,LPWSTR,PDWORD);
+WINADVAPI BOOL WINAPI GetServiceKeyNameA(SC_HANDLE,LPCSTR,LPSTR,PDWORD);
+WINADVAPI BOOL WINAPI GetServiceKeyNameW(SC_HANDLE,LPCWSTR,LPWSTR,PDWORD);
+WINADVAPI SC_LOCK WINAPI LockServiceDatabase(SC_HANDLE);
+WINADVAPI BOOL WINAPI NotifyBootConfigStatus(BOOL);
+WINADVAPI SC_HANDLE WINAPI OpenSCManagerA(LPCSTR,LPCSTR,DWORD);
+WINADVAPI SC_HANDLE WINAPI OpenSCManagerW(LPCWSTR,LPCWSTR,DWORD);
+WINADVAPI SC_HANDLE WINAPI OpenServiceA(SC_HANDLE,LPCSTR,DWORD);
+WINADVAPI SC_HANDLE WINAPI OpenServiceW(SC_HANDLE,LPCWSTR,DWORD);
+WINADVAPI BOOL WINAPI QueryServiceConfigA(SC_HANDLE,LPQUERY_SERVICE_CONFIGA,DWORD,PDWORD);
+WINADVAPI BOOL WINAPI QueryServiceConfigW(SC_HANDLE,LPQUERY_SERVICE_CONFIGW,DWORD,PDWORD);
+WINADVAPI BOOL WINAPI QueryServiceConfig2A(SC_HANDLE,DWORD,LPBYTE,DWORD,LPDWORD);
+WINADVAPI BOOL WINAPI QueryServiceConfig2W(SC_HANDLE,DWORD,LPBYTE,DWORD,LPDWORD);
+WINADVAPI BOOL WINAPI QueryServiceLockStatusA(SC_HANDLE,LPQUERY_SERVICE_LOCK_STATUSA,DWORD,PDWORD);
+WINADVAPI BOOL WINAPI QueryServiceLockStatusW(SC_HANDLE,LPQUERY_SERVICE_LOCK_STATUSW,DWORD,PDWORD);
+WINADVAPI BOOL WINAPI QueryServiceObjectSecurity(SC_HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,DWORD,LPDWORD);
+WINADVAPI BOOL WINAPI QueryServiceStatus(SC_HANDLE,LPSERVICE_STATUS);
+WINADVAPI BOOL WINAPI QueryServiceStatusEx(SC_HANDLE,SC_STATUS_TYPE,LPBYTE,DWORD,LPDWORD);
+WINADVAPI SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerA(LPCSTR,LPHANDLER_FUNCTION);
+WINADVAPI SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerW(LPCWSTR,LPHANDLER_FUNCTION);
+WINADVAPI SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerExA(LPCSTR,LPHANDLER_FUNCTION_EX,LPVOID);
+WINADVAPI SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerExW(LPCWSTR,LPHANDLER_FUNCTION_EX,LPVOID);
+WINADVAPI BOOL WINAPI SetServiceObjectSecurity(SC_HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR);
+WINADVAPI BOOL WINAPI SetServiceStatus(SERVICE_STATUS_HANDLE,LPSERVICE_STATUS);
+WINADVAPI BOOL WINAPI StartServiceA(SC_HANDLE,DWORD,LPCSTR*);
+WINADVAPI BOOL WINAPI StartServiceCtrlDispatcherA(LPSERVICE_TABLE_ENTRYA);
+WINADVAPI BOOL WINAPI StartServiceCtrlDispatcherW(LPSERVICE_TABLE_ENTRYW);
+WINADVAPI BOOL WINAPI StartServiceW(SC_HANDLE,DWORD,LPCWSTR*);
+WINADVAPI BOOL WINAPI UnlockServiceDatabase(SC_LOCK);
+
+#ifdef UNICODE
+typedef ENUM_SERVICE_STATUSW ENUM_SERVICE_STATUS,*LPENUM_SERVICE_STATUS;
+typedef ENUM_SERVICE_STATUS_PROCESSW ENUM_SERVICE_STATUS_PROCESS;
+typedef LPENUM_SERVICE_STATUS_PROCESSW LPENUM_SERVICE_STATUS_PROCESS;
+typedef QUERY_SERVICE_CONFIGW QUERY_SERVICE_CONFIG,*LPQUERY_SERVICE_CONFIG;
+typedef QUERY_SERVICE_LOCK_STATUSW QUERY_SERVICE_LOCK_STATUS,*LPQUERY_SERVICE_LOCK_STATUS;
+typedef SERVICE_TABLE_ENTRYW SERVICE_TABLE_ENTRY,*LPSERVICE_TABLE_ENTRY;
+typedef LPSERVICE_MAIN_FUNCTIONW LPSERVICE_MAIN_FUNCTION;
+typedef SERVICE_DESCRIPTIONW SERVICE_DESCRIPTION;
+typedef LPSERVICE_DESCRIPTIONW LPSERVICE_DESCRIPTION;
+typedef SERVICE_FAILURE_ACTIONSW SERVICE_FAILURE_ACTIONS;
+typedef LPSERVICE_FAILURE_ACTIONSW LPSERVICE_FAILURE_ACTIONS;
+#define SERVICES_ACTIVE_DATABASE SERVICES_ACTIVE_DATABASEW
+#define SERVICES_FAILED_DATABASE SERVICES_FAILED_DATABASEW
+#define SC_GROUP_IDENTIFIER SC_GROUP_IDENTIFIERW
+#define ChangeServiceConfig ChangeServiceConfigW
+#define ChangeServiceConfig2 ChangeServiceConfig2W
+#define CreateService CreateServiceW
+#define EnumDependentServices EnumDependentServicesW
+#define EnumServicesStatus EnumServicesStatusW
+#define EnumServicesStatusEx EnumServicesStatusExW
+#define GetServiceDisplayName GetServiceDisplayNameW
+#define GetServiceKeyName GetServiceKeyNameW
+#define OpenSCManager OpenSCManagerW
+#define OpenService OpenServiceW
+#define QueryServiceConfig QueryServiceConfigW
+#define QueryServiceConfig2 QueryServiceConfig2W
+#define QueryServiceLockStatus QueryServiceLockStatusW
+#define RegisterServiceCtrlHandler RegisterServiceCtrlHandlerW
+#define RegisterServiceCtrlHandlerEx RegisterServiceCtrlHandlerExW
+#define StartService StartServiceW
+#define StartServiceCtrlDispatcher StartServiceCtrlDispatcherW
+#else
+typedef ENUM_SERVICE_STATUSA ENUM_SERVICE_STATUS,*LPENUM_SERVICE_STATUS;
+typedef ENUM_SERVICE_STATUS_PROCESSA ENUM_SERVICE_STATUS_PROCESS;
+typedef LPENUM_SERVICE_STATUS_PROCESSA LPENUM_SERVICE_STATUS_PROCESS;
+typedef QUERY_SERVICE_CONFIGA QUERY_SERVICE_CONFIG,*LPQUERY_SERVICE_CONFIG;
+typedef QUERY_SERVICE_LOCK_STATUSA QUERY_SERVICE_LOCK_STATUS,*LPQUERY_SERVICE_LOCK_STATUS;
+typedef SERVICE_TABLE_ENTRYA SERVICE_TABLE_ENTRY,*LPSERVICE_TABLE_ENTRY;
+typedef LPSERVICE_MAIN_FUNCTIONA LPSERVICE_MAIN_FUNCTION;
+typedef SERVICE_DESCRIPTIONA SERVICE_DESCRIPTION;
+typedef LPSERVICE_DESCRIPTIONA LPSERVICE_DESCRIPTION;
+typedef SERVICE_FAILURE_ACTIONSA SERVICE_FAILURE_ACTIONS;
+typedef LPSERVICE_FAILURE_ACTIONSA LPSERVICE_FAILURE_ACTIONS;
+#define SERVICES_ACTIVE_DATABASE SERVICES_ACTIVE_DATABASEA
+#define SERVICES_FAILED_DATABASE SERVICES_FAILED_DATABASEA
+#define SC_GROUP_IDENTIFIER SC_GROUP_IDENTIFIERA
+#define ChangeServiceConfig ChangeServiceConfigA
+#define ChangeServiceConfig2 ChangeServiceConfig2A
+#define CreateService CreateServiceA
+#define EnumDependentServices EnumDependentServicesA
+#define EnumServicesStatus EnumServicesStatusA
+#define EnumServicesStatusEx EnumServicesStatusExA
+#define GetServiceDisplayName GetServiceDisplayNameA
+#define GetServiceKeyName GetServiceKeyNameA
+#define OpenSCManager OpenSCManagerA
+#define OpenService OpenServiceA
+#define QueryServiceConfig QueryServiceConfigA
+#define QueryServiceConfig2 QueryServiceConfig2A
+#define QueryServiceLockStatus QueryServiceLockStatusA
+#define RegisterServiceCtrlHandler RegisterServiceCtrlHandlerA
+#define RegisterServiceCtrlHandlerEx RegisterServiceCtrlHandlerExA
+#define StartService StartServiceA
+#define StartServiceCtrlDispatcher StartServiceCtrlDispatcherA
+#endif
+#ifdef __cplusplus
+}
+#endif
+#endif /* _WINSVC_H */
diff --git a/tcc/include/winapi/winuser.h b/tcc/include/winapi/winuser.h
new file mode 100644
index 0000000..29b7870
--- /dev/null
+++ b/tcc/include/winapi/winuser.h
@@ -0,0 +1,4506 @@
+#ifndef _WINUSER_H
+#define _WINUSER_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef WINUSERAPI
+#ifdef __W32API_USE_DLLIMPORT__
+#define WINUSERAPI DECLSPEC_IMPORT
+#else
+#define WINUSERAPI
+#endif
+#endif
+
+#define MNGO_NOINTERFACE 0x00
+#define MNGO_NOERROR 0x01
+#define MNGOF_TOPGAP 0x01
+#define MNGOF_BOTTOMGAP 0x02
+
+#define WC_DIALOG MAKEINTATOM(0x8002)
+#define FALT 16
+#define FCONTROL 8
+#define FNOINVERT 2
+#define FSHIFT 4
+#define FVIRTKEY 1
+#define ATF_TIMEOUTON 1
+#define ATF_ONOFFFEEDBACK 2
+#define ATF_AVAILABLE 4 /* May be obsolete. Not in recent MS docs. */
+#define WH_MIN (-1)
+#define WH_MSGFILTER (-1)
+#define WH_JOURNALRECORD 0
+#define WH_JOURNALPLAYBACK 1
+#define WH_KEYBOARD 2
+#define WH_GETMESSAGE 3
+#define WH_CALLWNDPROC 4
+#define WH_CBT 5
+#define WH_SYSMSGFILTER 6
+#define WH_MOUSE 7
+#define WH_HARDWARE 8
+#define WH_DEBUG 9
+#define WH_SHELL 10
+#define WH_FOREGROUNDIDLE 11
+#define WH_CALLWNDPROCRET 12
+#define WH_KEYBOARD_LL 13
+#define WH_MOUSE_LL 14
+#define WH_MAX 14
+#define WH_MINHOOK WH_MIN
+#define WH_MAXHOOK WH_MAX
+#define HC_ACTION 0
+#define HC_GETNEXT 1
+#define HC_SKIP 2
+#define HC_NOREMOVE 3
+#define HC_NOREM 3
+#define HC_SYSMODALON 4
+#define HC_SYSMODALOFF 5
+#define HCBT_MOVESIZE 0
+#define HCBT_MINMAX 1
+#define HCBT_QS 2
+#define HCBT_CREATEWND 3
+#define HCBT_DESTROYWND 4
+#define HCBT_ACTIVATE 5
+#define HCBT_CLICKSKIPPED 6
+#define HCBT_KEYSKIPPED 7
+#define HCBT_SYSCOMMAND 8
+#define HCBT_SETFOCUS 9
+#define CF_TEXT 1
+#define CF_BITMAP 2
+#define CF_METAFILEPICT 3
+#define CF_SYLK 4
+#define CF_DIF 5
+#define CF_TIFF 6
+#define CF_OEMTEXT 7
+#define CF_DIB 8
+#define CF_PALETTE 9
+#define CF_PENDATA 10
+#define CF_RIFF 11
+#define CF_WAVE 12
+#define CF_UNICODETEXT 13
+#define CF_ENHMETAFILE 14
+#define CF_HDROP 15
+#define CF_LOCALE 16
+#define CF_MAX 17
+#define CF_OWNERDISPLAY 128
+#define CF_DSPTEXT 129
+#define CF_DSPBITMAP 130
+#define CF_DSPMETAFILEPICT 131
+#define CF_DSPENHMETAFILE 142
+#define CF_PRIVATEFIRST 512
+#define CF_PRIVATELAST 767
+#define CF_GDIOBJFIRST 768
+#define CF_GDIOBJLAST 1023
+#define HKL_NEXT 1
+#define HKL_PREV 0
+#define KLF_ACTIVATE 1
+#define KLF_SUBSTITUTE_OK 2
+#define KLF_UNLOADPREVIOUS 4
+#define KLF_REORDER 8
+#define KLF_REPLACELANG 16
+#define KLF_NOTELLSHELL 128
+#define KLF_SETFORPROCESS 256
+#define KL_NAMELENGTH 9
+#define MF_ENABLED 0
+#define MF_GRAYED 1
+#define MF_DISABLED 2
+#define MF_BITMAP 4
+#define MF_CHECKED 8
+#define MF_MENUBARBREAK 32
+#define MF_MENUBREAK 64
+#define MF_OWNERDRAW 256
+#define MF_POPUP 16
+#define MF_SEPARATOR 0x800
+#define MF_STRING 0
+#define MF_UNCHECKED 0
+#define MF_DEFAULT 4096
+#define MF_SYSMENU 0x2000
+#define MF_HELP 0x4000
+#define MF_END 128
+#define MF_RIGHTJUSTIFY 0x4000
+#define MF_MOUSESELECT 0x8000
+#define MF_INSERT 0
+#define MF_CHANGE 128
+#define MF_APPEND 256
+#define MF_DELETE 512
+#define MF_REMOVE 4096
+#define MF_USECHECKBITMAPS 512
+#define MF_UNHILITE 0
+#define MF_HILITE 128
+
+/* Also defined in dbt.h */
+#define BSM_ALLCOMPONENTS 0
+#define BSM_APPLICATIONS 8
+#define BSM_ALLDESKTOPS 16
+#define BSM_INSTALLABLEDRIVERS 4
+#define BSM_NETDRIVER 2
+#define BSM_VXDS 1
+#define BSF_FLUSHDISK 0x00000004
+#define BSF_FORCEIFHUNG 0x00000020
+#define BSF_IGNORECURRENTTASK 0x00000002
+#define BSF_NOHANG 0x00000008
+#define BSF_NOTIMEOUTIFNOTHUNG 0x00000040
+#define BSF_POSTMESSAGE 0x00000010
+#define BSF_QUERY 0x00000001
+#if (_WIN32_WINNT >= 0x0500)
+#define BSF_ALLOWSFW 0x00000080
+#define BSF_SENDNOTIFYMESSAGE 0x00000100
+#endif /* (_WIN32_WINNT >= 0x0500) */
+#if (_WIN32_WINNT >= 0x0501)
+#define BSF_LUID 0x00000400
+#define BSF_RETURNHDESK 0x00000200
+#endif /* (_WIN32_WINNT >= 0x0501) */
+
+#define BROADCAST_QUERY_DENY 1112363332
+#define ENUM_CURRENT_SETTINGS ((DWORD)-1)
+#define ENUM_REGISTRY_SETTINGS ((DWORD)-2)
+#define CDS_UPDATEREGISTRY 1
+#define CDS_TEST 2
+#define CDS_FULLSCREEN 4
+#define CDS_GLOBAL 8
+#define CDS_SET_PRIMARY 16
+#define CDS_RESET 0x40000000
+#define CDS_SETRECT 0x20000000
+#define CDS_NORESET 0x10000000
+#define DISP_CHANGE_SUCCESSFUL 0
+#define DISP_CHANGE_RESTART 1
+#define DISP_CHANGE_FAILED (-1)
+#define DISP_CHANGE_BADMODE (-2)
+#define DISP_CHANGE_NOTUPDATED (-3)
+#define DISP_CHANGE_BADFLAGS (-4)
+#define DISP_CHANGE_BADPARAM (-5)
+#define DISP_CHANGE_BADDUALVIEW (-6)
+#define BST_CHECKED 1
+#define BST_INDETERMINATE 2
+#define BST_UNCHECKED 0
+#define BST_FOCUS 8
+#define BST_PUSHED 4
+#define MF_BYCOMMAND 0
+#define MF_BYPOSITION 1024
+#define MF_UNCHECKED 0
+#define MF_HILITE 128
+#define MF_UNHILITE 0
+#define CWP_ALL 0
+#define CWP_SKIPINVISIBLE 1
+#define CWP_SKIPDISABLED 2
+#define CWP_SKIPTRANSPARENT 4
+#define IMAGE_BITMAP 0
+#define IMAGE_ICON 1
+#define IMAGE_CURSOR 2
+#define IMAGE_ENHMETAFILE 3
+#define DF_ALLOWOTHERACCOUNTHOOK 1
+#define DESKTOP_CREATEMENU 4
+#define DESKTOP_CREATEWINDOW 2
+#define DESKTOP_ENUMERATE 64
+#define DESKTOP_HOOKCONTROL 8
+#define DESKTOP_JOURNALPLAYBACK 32
+#define DESKTOP_JOURNALRECORD 16
+#define DESKTOP_READOBJECTS 1
+#define DESKTOP_SWITCHDESKTOP 256
+#define DESKTOP_WRITEOBJECTS 128
+#define CW_USEDEFAULT 0x80000000
+#define WS_BORDER 0x800000
+#define WS_CAPTION 0xc00000
+#define WS_CHILD 0x40000000
+#define WS_CHILDWINDOW 0x40000000
+#define WS_CLIPCHILDREN 0x2000000
+#define WS_CLIPSIBLINGS 0x4000000
+#define WS_DISABLED 0x8000000
+#define WS_DLGFRAME 0x400000
+#define WS_GROUP 0x20000
+#define WS_HSCROLL 0x100000
+#define WS_ICONIC 0x20000000
+#define WS_MAXIMIZE 0x1000000
+#define WS_MAXIMIZEBOX 0x10000
+#define WS_MINIMIZE 0x20000000
+#define WS_MINIMIZEBOX 0x20000
+#define WS_OVERLAPPED 0
+#define WS_OVERLAPPEDWINDOW 0xcf0000
+#define WS_POPUP 0x80000000
+#define WS_POPUPWINDOW 0x80880000
+#define WS_SIZEBOX 0x40000
+#define WS_SYSMENU 0x80000
+#define WS_TABSTOP 0x10000
+#define WS_THICKFRAME 0x40000
+#define WS_TILED 0
+#define WS_TILEDWINDOW 0xcf0000
+#define WS_VISIBLE 0x10000000
+#define WS_VSCROLL 0x200000
+#define MDIS_ALLCHILDSTYLES 1
+#define BS_3STATE 5
+#define BS_AUTO3STATE 6
+#define BS_AUTOCHECKBOX 3
+#define BS_AUTORADIOBUTTON 9
+#define BS_BITMAP 128
+#define BS_BOTTOM 0x800
+#define BS_CENTER 0x300
+#define BS_CHECKBOX 2
+#define BS_DEFPUSHBUTTON 1
+#define BS_GROUPBOX 7
+#define BS_ICON 64
+#define BS_LEFT 256
+#define BS_LEFTTEXT 32
+#define BS_MULTILINE 0x2000
+#define BS_NOTIFY 0x4000
+#define BS_OWNERDRAW 0xb
+#define BS_PUSHBUTTON 0
+#define BS_PUSHLIKE 4096
+#define BS_RADIOBUTTON 4
+#define BS_RIGHT 512
+#define BS_RIGHTBUTTON 32
+#define BS_TEXT 0
+#define BS_TOP 0x400
+#define BS_USERBUTTON 8
+#define BS_VCENTER 0xc00
+#define BS_FLAT 0x8000
+#define CBS_AUTOHSCROLL 64
+#define CBS_DISABLENOSCROLL 0x800
+#define CBS_DROPDOWN 2
+#define CBS_DROPDOWNLIST 3
+#define CBS_HASSTRINGS 512
+#define CBS_LOWERCASE 0x4000
+#define CBS_NOINTEGRALHEIGHT 0x400
+#define CBS_OEMCONVERT 128
+#define CBS_OWNERDRAWFIXED 16
+#define CBS_OWNERDRAWVARIABLE 32
+#define CBS_SIMPLE 1
+#define CBS_SORT 256
+#define CBS_UPPERCASE 0x2000
+#define ES_AUTOHSCROLL 128
+#define ES_AUTOVSCROLL 64
+#define ES_CENTER 1
+#define ES_LEFT 0
+#define ES_LOWERCASE 16
+#define ES_MULTILINE 4
+#define ES_NOHIDESEL 256
+#define ES_NUMBER 0x2000
+#define ES_OEMCONVERT 0x400
+#define ES_PASSWORD 32
+#define ES_READONLY 0x800
+#define ES_RIGHT 2
+#define ES_UPPERCASE 8
+#define ES_WANTRETURN 4096
+#define LBS_DISABLENOSCROLL 4096
+#define LBS_EXTENDEDSEL 0x800
+#define LBS_HASSTRINGS 64
+#define LBS_MULTICOLUMN 512
+#define LBS_MULTIPLESEL 8
+#define LBS_NODATA 0x2000
+#define LBS_NOINTEGRALHEIGHT 256
+#define LBS_NOREDRAW 4
+#define LBS_NOSEL 0x4000
+#define LBS_NOTIFY 1
+#define LBS_OWNERDRAWFIXED 16
+#define LBS_OWNERDRAWVARIABLE 32
+#define LBS_SORT 2
+#define LBS_STANDARD 0xa00003
+#define LBS_USETABSTOPS 128
+#define LBS_WANTKEYBOARDINPUT 0x400
+#define SBS_BOTTOMALIGN 4
+#define SBS_HORZ 0
+#define SBS_LEFTALIGN 2
+#define SBS_RIGHTALIGN 4
+#define SBS_SIZEBOX 8
+#define SBS_SIZEBOXBOTTOMRIGHTALIGN 4
+#define SBS_SIZEBOXTOPLEFTALIGN 2
+#define SBS_SIZEGRIP 16
+#define SBS_TOPALIGN 2
+#define SBS_VERT 1
+#define SS_BITMAP 14
+#define SS_BLACKFRAME 7
+#define SS_BLACKRECT 4
+#define SS_CENTER 1
+#define SS_CENTERIMAGE 512
+#define SS_ENHMETAFILE 15
+#define SS_ETCHEDFRAME 18
+#define SS_ETCHEDHORZ 16
+#define SS_ETCHEDVERT 17
+#define SS_GRAYFRAME 8
+#define SS_GRAYRECT 5
+#define SS_ICON 3
+#define SS_LEFT 0
+#define SS_LEFTNOWORDWRAP 0xc
+#define SS_NOPREFIX 128
+#define SS_NOTIFY 256
+#define SS_OWNERDRAW 0xd
+#define SS_REALSIZEIMAGE 0x800
+#define SS_RIGHT 2
+#define SS_RIGHTJUST 0x400
+#define SS_SIMPLE 11
+#define SS_SUNKEN 4096
+#define SS_WHITEFRAME 9
+#define SS_WHITERECT 6
+#define SS_USERITEM 10
+#define SS_TYPEMASK 0x0000001FL
+#define SS_ENDELLIPSIS 0x00004000L
+#define SS_PATHELLIPSIS 0x00008000L
+#define SS_WORDELLIPSIS 0x0000C000L
+#define SS_ELLIPSISMASK 0x0000C000L
+#define DS_3DLOOK 4
+#define DS_ABSALIGN 1
+#define DS_CENTER 0x800
+#define DS_CENTERMOUSE 4096
+#define DS_CONTEXTHELP 0x2000
+#define DS_CONTROL 0x400
+#define DS_FIXEDSYS 8
+#define DS_LOCALEDIT 32
+#define DS_MODALFRAME 128
+#define DS_NOFAILCREATE 16
+#define DS_NOIDLEMSG 256
+#define DS_SETFONT 64
+#define DS_SETFOREGROUND 512
+#define DS_SYSMODAL 2
+#define DS_SHELLFONT (DS_SETFONT | DS_FIXEDSYS)
+#define WS_EX_ACCEPTFILES 16
+#define WS_EX_APPWINDOW 0x40000
+#define WS_EX_CLIENTEDGE 512
+#define WS_EX_COMPOSITED 0x2000000 /* XP */
+#define WS_EX_CONTEXTHELP 0x400
+#define WS_EX_CONTROLPARENT 0x10000
+#define WS_EX_DLGMODALFRAME 1
+#define WS_EX_LAYERED 0x80000 /* w2k */
+#define WS_EX_LAYOUTRTL 0x400000 /* w98, w2k */
+#define WS_EX_LEFT 0
+#define WS_EX_LEFTSCROLLBAR 0x4000
+#define WS_EX_LTRREADING 0
+#define WS_EX_MDICHILD 64
+#define WS_EX_NOACTIVATE 0x8000000 /* w2k */
+#define WS_EX_NOINHERITLAYOUT 0x100000 /* w2k */
+#define WS_EX_NOPARENTNOTIFY 4
+#define WS_EX_OVERLAPPEDWINDOW 0x300
+#define WS_EX_PALETTEWINDOW 0x188
+#define WS_EX_RIGHT 0x1000
+#define WS_EX_RIGHTSCROLLBAR 0
+#define WS_EX_RTLREADING 0x2000
+#define WS_EX_STATICEDGE 0x20000
+#define WS_EX_TOOLWINDOW 128
+#define WS_EX_TOPMOST 8
+#define WS_EX_TRANSPARENT 32
+#define WS_EX_WINDOWEDGE 256
+#define WINSTA_ALL_ACCESS 895
+#define WINSTA_ACCESSCLIPBOARD 4
+#define WINSTA_ACCESSGLOBALATOMS 32
+#define WINSTA_CREATEDESKTOP 8
+#define WINSTA_ENUMDESKTOPS 1
+#define WINSTA_ENUMERATE 256
+#define WINSTA_EXITWINDOWS 64
+#define WINSTA_READATTRIBUTES 2
+#define WINSTA_READSCREEN 512
+#define WINSTA_WRITEATTRIBUTES 16
+#define DDL_READWRITE 0
+#define DDL_READONLY 1
+#define DDL_HIDDEN 2
+#define DDL_SYSTEM 4
+#define DDL_DIRECTORY 16
+#define DDL_ARCHIVE 32
+#define DDL_POSTMSGS 8192
+#define DDL_DRIVES 16384
+#define DDL_EXCLUSIVE 32768
+#define DC_ACTIVE 0x00000001
+#define DC_SMALLCAP 0x00000002
+#define DC_ICON 0x00000004
+#define DC_TEXT 0x00000008
+#define DC_INBUTTON 0x00000010
+#if (_WIN32_WINDOWS >= 0x0410 || _WIN32_WINNT >= 0x0500)
+#define DC_GRADIENT 0x00000020
+#endif
+#if (_WIN32_WINNT >= 0x0501)
+#define DC_BUTTONS 0x00001000
+#endif
+/* Where are these documented? */
+#define DC_CAPTION (DC_ICON|DC_TEXT|DC_BUTTONS)
+#define DC_NC (DC_CAPTION|DC_FRAME)
+
+#define BDR_RAISEDOUTER 1
+#define BDR_SUNKENOUTER 2
+#define BDR_RAISEDINNER 4
+#define BDR_SUNKENINNER 8
+#define BDR_OUTER 3
+#define BDR_INNER 0xc
+#define BDR_RAISED 5
+#define BDR_SUNKEN 10
+#define EDGE_RAISED (BDR_RAISEDOUTER|BDR_RAISEDINNER)
+#define EDGE_SUNKEN (BDR_SUNKENOUTER|BDR_SUNKENINNER)
+#define EDGE_ETCHED (BDR_SUNKENOUTER|BDR_RAISEDINNER)
+#define EDGE_BUMP (BDR_RAISEDOUTER|BDR_SUNKENINNER)
+#define BF_LEFT 1
+#define BF_TOP 2
+#define BF_RIGHT 4
+#define BF_BOTTOM 8
+#define BF_TOPLEFT (BF_TOP|BF_LEFT)
+#define BF_TOPRIGHT (BF_TOP|BF_RIGHT)
+#define BF_BOTTOMLEFT (BF_BOTTOM|BF_LEFT)
+#define BF_BOTTOMRIGHT (BF_BOTTOM|BF_RIGHT)
+#define BF_RECT (BF_LEFT|BF_TOP|BF_RIGHT|BF_BOTTOM)
+#define BF_DIAGONAL 16
+#define BF_DIAGONAL_ENDTOPRIGHT (BF_DIAGONAL|BF_TOP|BF_RIGHT)
+#define BF_DIAGONAL_ENDTOPLEFT (BF_DIAGONAL|BF_TOP|BF_LEFT)
+#define BF_DIAGONAL_ENDBOTTOMLEFT (BF_DIAGONAL|BF_BOTTOM|BF_LEFT)
+#define BF_DIAGONAL_ENDBOTTOMRIGHT (BF_DIAGONAL|BF_BOTTOM|BF_RIGHT)
+#define BF_MIDDLE 0x800
+#define BF_SOFT 0x1000
+#define BF_ADJUST 0x2000
+#define BF_FLAT 0x4000
+#define BF_MONO 0x8000
+#define DFC_CAPTION 1
+#define DFC_MENU 2
+#define DFC_SCROLL 3
+#define DFC_BUTTON 4
+#if (WINVER >= 0x0500)
+#define DFC_POPUPMENU 5
+#endif /* WINVER >= 0x0500 */
+#define DFCS_CAPTIONCLOSE 0
+#define DFCS_CAPTIONMIN 1
+#define DFCS_CAPTIONMAX 2
+#define DFCS_CAPTIONRESTORE 3
+#define DFCS_CAPTIONHELP 4
+#define DFCS_MENUARROW 0
+#define DFCS_MENUCHECK 1
+#define DFCS_MENUBULLET 2
+#define DFCS_MENUARROWRIGHT 4
+#define DFCS_SCROLLUP 0
+#define DFCS_SCROLLDOWN 1
+#define DFCS_SCROLLLEFT 2
+#define DFCS_SCROLLRIGHT 3
+#define DFCS_SCROLLCOMBOBOX 5
+#define DFCS_SCROLLSIZEGRIP 8
+#define DFCS_SCROLLSIZEGRIPRIGHT 16
+#define DFCS_BUTTONCHECK 0
+#define DFCS_BUTTONRADIOIMAGE 1
+#define DFCS_BUTTONRADIOMASK 2
+#define DFCS_BUTTONRADIO 4
+#define DFCS_BUTTON3STATE 8
+#define DFCS_BUTTONPUSH 16
+#define DFCS_INACTIVE 256
+#define DFCS_PUSHED 512
+#define DFCS_CHECKED 1024
+#if (WINVER >= 0x0500)
+#define DFCS_TRANSPARENT 0x800
+#define DFCS_HOT 0x1000
+#endif
+#define DFCS_ADJUSTRECT 0x2000
+#define DFCS_FLAT 0x4000
+#define DFCS_MONO 0x8000
+#define DST_COMPLEX 0
+#define DST_TEXT 1
+#define DST_PREFIXTEXT 2
+#define DST_ICON 3
+#define DST_BITMAP 4
+#define DSS_NORMAL 0
+#define DSS_UNION 16
+#define DSS_DISABLED 32
+#define DSS_MONO 128
+#define DSS_RIGHT 0x8000
+#define DT_BOTTOM 8
+#define DT_CALCRECT 1024
+#define DT_CENTER 1
+#define DT_EDITCONTROL 8192
+#define DT_END_ELLIPSIS 32768
+#define DT_PATH_ELLIPSIS 16384
+#define DT_WORD_ELLIPSIS 0x40000
+#define DT_EXPANDTABS 64
+#define DT_EXTERNALLEADING 512
+#define DT_LEFT 0
+#define DT_MODIFYSTRING 65536
+#define DT_NOCLIP 256
+#define DT_NOPREFIX 2048
+#define DT_RIGHT 2
+#define DT_RTLREADING 131072
+#define DT_SINGLELINE 32
+#define DT_TABSTOP 128
+#define DT_TOP 0
+#define DT_VCENTER 4
+#define DT_WORDBREAK 16
+#define DT_INTERNAL 4096
+#define WB_ISDELIMITER 2
+#define WB_LEFT 0
+#define WB_RIGHT 1
+#define SB_HORZ 0
+#define SB_VERT 1
+#define SB_CTL 2
+#define SB_BOTH 3
+#define ESB_DISABLE_BOTH 3
+#define ESB_DISABLE_DOWN 2
+#define ESB_DISABLE_LEFT 1
+#define ESB_DISABLE_LTUP 1
+#define ESB_DISABLE_RIGHT 2
+#define ESB_DISABLE_RTDN 2
+#define ESB_DISABLE_UP 1
+#define ESB_ENABLE_BOTH 0
+#define SB_LINEUP 0
+#define SB_LINEDOWN 1
+#define SB_LINELEFT 0
+#define SB_LINERIGHT 1
+#define SB_PAGEUP 2
+#define SB_PAGEDOWN 3
+#define SB_PAGELEFT 2
+#define SB_PAGERIGHT 3
+#define SB_THUMBPOSITION 4
+#define SB_THUMBTRACK 5
+#define SB_ENDSCROLL 8
+#define SB_LEFT 6
+#define SB_RIGHT 7
+#define SB_BOTTOM 7
+#define SB_TOP 6
+#define IS_INTRESOURCE(i) (((ULONG_PTR)(i) >> 16) == 0)
+#define MAKEINTRESOURCEA(i) (LPSTR)((DWORD)((WORD)(i)))
+#define MAKEINTRESOURCEW(i) (LPWSTR)((DWORD)((WORD)(i)))
+#ifndef XFree86Server
+# define RT_CURSOR MAKEINTRESOURCE(1)
+# define RT_FONT MAKEINTRESOURCE(8)
+#endif /* ndef XFree86Server */
+#define RT_BITMAP MAKEINTRESOURCE(2)
+#define RT_ICON MAKEINTRESOURCE(3)
+#define RT_MENU MAKEINTRESOURCE(4)
+#define RT_DIALOG MAKEINTRESOURCE(5)
+#define RT_STRING MAKEINTRESOURCE(6)
+#define RT_FONTDIR MAKEINTRESOURCE(7)
+#define RT_ACCELERATOR MAKEINTRESOURCE(9)
+#define RT_RCDATA MAKEINTRESOURCE(10)
+#define RT_MESSAGETABLE MAKEINTRESOURCE(11)
+#define DIFFERENCE 11
+#define RT_GROUP_CURSOR MAKEINTRESOURCE((DWORD)RT_CURSOR+DIFFERENCE)
+#define RT_GROUP_ICON MAKEINTRESOURCE((DWORD)RT_ICON+DIFFERENCE)
+#define RT_VERSION MAKEINTRESOURCE(16)
+#define RT_DLGINCLUDE MAKEINTRESOURCE(17)
+#define RT_PLUGPLAY MAKEINTRESOURCE(19)
+#define RT_VXD MAKEINTRESOURCE(20)
+#define RT_ANICURSOR MAKEINTRESOURCE(21)
+#define RT_ANIICON MAKEINTRESOURCE(22)
+#define RT_HTML MAKEINTRESOURCE(23)
+#ifndef RC_INVOKED
+#define RT_MANIFEST MAKEINTRESOURCE(24)
+#define CREATEPROCESS_MANIFEST_RESOURCE_ID MAKEINTRESOURCE(1)
+#define ISOLATIONAWARE_MANIFEST_RESOURCE_ID MAKEINTRESOURCE(2)
+#define ISOLATIONAWARE_NOSTATICIMPORT_MANIFEST_RESOURCE_ID MAKEINTRESOURCE(3)
+#else
+#define RT_MANIFEST 24
+#define CREATEPROCESS_MANIFEST_RESOURCE_ID 1
+#define ISOLATIONAWARE_MANIFEST_RESOURCE_ID 2
+#define ISOLATIONAWARE_NOSTATICIMPORT_MANIFEST_RESOURCE_ID 3
+#endif
+#define EWX_FORCE 4
+#define EWX_LOGOFF 0
+#define EWX_POWEROFF 8
+#define EWX_REBOOT 2
+#define EWX_SHUTDOWN 1
+#if (_WIN32_WINNT >= 0x0500)
+#define EWX_FORCEIFHUNG 16
+#endif
+#define CS_BYTEALIGNCLIENT 4096
+#define CS_BYTEALIGNWINDOW 8192
+#define CS_KEYCVTWINDOW 4
+#define CS_NOKEYCVT 256
+#define CS_CLASSDC 64
+#define CS_DBLCLKS 8
+#define CS_GLOBALCLASS 16384
+#define CS_HREDRAW 2
+#define CS_NOCLOSE 512
+#define CS_OWNDC 32
+#define CS_PARENTDC 128
+#define CS_SAVEBITS 2048
+#define CS_VREDRAW 1
+#define CS_IME 0x10000
+#if (_WIN32_WINNT >= 0x0501)
+#define CS_DROPSHADOW 0x20000
+#endif
+#define GCW_ATOM (-32)
+#define GCL_CBCLSEXTRA (-20)
+#define GCL_CBWNDEXTRA (-18)
+#define GCL_HBRBACKGROUND (-10)
+#define GCL_HCURSOR (-12)
+#define GCL_HICON (-14)
+#define GCL_HICONSM (-34)
+#define GCL_HMODULE (-16)
+#define GCL_MENUNAME (-8)
+#define GCL_STYLE (-26)
+#define GCL_WNDPROC (-24)
+#define GCLP_MENUNAME (-8)
+#define GCLP_HBRBACKGROUND (-10)
+#define GCLP_HCURSOR (-12)
+#define GCLP_HICON (-14)
+#define GCLP_HMODULE (-16)
+#define GCLP_WNDPROC (-24)
+#define GCLP_HICONSM (-34)
+#if 0
+ /* This is supposed to be defined by the program using it not defined
+ in the w32api headers. I've left it here for documentation purposes.
+ */
+#ifndef IDC_STATIC /* May be predefined by resource compiler. */
+#define IDC_STATIC (-1)
+#endif
+#endif
+#define IDC_ARROW MAKEINTRESOURCE(32512)
+#define IDC_IBEAM MAKEINTRESOURCE(32513)
+#define IDC_WAIT MAKEINTRESOURCE(32514)
+#define IDC_CROSS MAKEINTRESOURCE(32515)
+#define IDC_UPARROW MAKEINTRESOURCE(32516)
+#define IDC_SIZENWSE MAKEINTRESOURCE(32642)
+#define IDC_SIZENESW MAKEINTRESOURCE(32643)
+#define IDC_SIZEWE MAKEINTRESOURCE(32644)
+#define IDC_SIZENS MAKEINTRESOURCE(32645)
+#define IDC_SIZEALL MAKEINTRESOURCE(32646)
+#define IDC_NO MAKEINTRESOURCE(32648)
+#define IDC_HAND MAKEINTRESOURCE(32649)
+#define IDC_APPSTARTING MAKEINTRESOURCE(32650)
+#define IDC_HELP MAKEINTRESOURCE(32651)
+#define IDC_ICON MAKEINTRESOURCE(32641)
+#define IDC_SIZE MAKEINTRESOURCE(32640)
+#ifndef RC_INVOKED
+#define IDI_APPLICATION MAKEINTRESOURCE(32512)
+#define IDI_HAND MAKEINTRESOURCE(32513)
+#define IDI_QUESTION MAKEINTRESOURCE(32514)
+#define IDI_EXCLAMATION MAKEINTRESOURCE(32515)
+#define IDI_ASTERISK MAKEINTRESOURCE(32516)
+#define IDI_WINLOGO MAKEINTRESOURCE(32517)
+#else
+#define IDI_APPLICATION 32512
+#define IDI_HAND 32513
+#define IDI_QUESTION 32514
+#define IDI_EXCLAMATION 32515
+#define IDI_ASTERISK 32516
+#define IDI_WINLOGO 32517
+#endif
+#define IDI_WARNING IDI_EXCLAMATION
+#define IDI_ERROR IDI_HAND
+#define IDI_INFORMATION IDI_ASTERISK
+#define MIIM_STATE 1
+#define MIIM_ID 2
+#define MIIM_SUBMENU 4
+#define MIIM_CHECKMARKS 8
+#define MIIM_TYPE 16
+#define MIIM_DATA 32
+#define MIIM_STRING 64
+#define MIIM_BITMAP 128
+#define MIIM_FTYPE 256
+#if (WINVER >= 0x0500)
+#define MIM_MAXHEIGHT 1
+#define MIM_BACKGROUND 2
+#define MIM_HELPID 4
+#define MIM_MENUDATA 8
+#define MIM_STYLE 16
+#define MIM_APPLYTOSUBMENUS 0x80000000L
+#define MNS_NOCHECK 0x80000000
+#define MNS_MODELESS 0x40000000
+#define MNS_DRAGDROP 0x20000000
+#define MNS_AUTODISMISS 0x10000000
+#define MNS_NOTIFYBYPOS 0x08000000
+#define MNS_CHECKORBMP 0x04000000
+#endif
+#define MFT_BITMAP 4
+#define MFT_MENUBARBREAK 32
+#define MFT_MENUBREAK 64
+#define MFT_OWNERDRAW 256
+#define MFT_RADIOCHECK 512
+#define MFT_RIGHTJUSTIFY 0x4000
+#define MFT_SEPARATOR 0x800
+#define MFT_RIGHTORDER 0x2000L
+#define MFT_STRING 0
+#define MFS_CHECKED 8
+#define MFS_DEFAULT 4096
+#define MFS_DISABLED 3
+#define MFS_ENABLED 0
+#define MFS_GRAYED 3
+#define MFS_HILITE 128
+#define MFS_UNCHECKED 0
+#define MFS_UNHILITE 0
+#define GW_HWNDNEXT 2
+#define GW_HWNDPREV 3
+#define GW_CHILD 5
+#define GW_HWNDFIRST 0
+#define GW_HWNDLAST 1
+#define GW_OWNER 4
+#define SW_HIDE 0
+#define SW_NORMAL 1
+#define SW_SHOWNORMAL 1
+#define SW_SHOWMINIMIZED 2
+#define SW_MAXIMIZE 3
+#define SW_SHOWMAXIMIZED 3
+#define SW_SHOWNOACTIVATE 4
+#define SW_SHOW 5
+#define SW_MINIMIZE 6
+#define SW_SHOWMINNOACTIVE 7
+#define SW_SHOWNA 8
+#define SW_RESTORE 9
+#define SW_SHOWDEFAULT 10
+#define SW_FORCEMINIMIZE 11
+#define SW_MAX 11
+#define MB_USERICON 128
+#define MB_ICONASTERISK 64
+#define MB_ICONEXCLAMATION 0x30
+#define MB_ICONWARNING 0x30
+#define MB_ICONERROR 16
+#define MB_ICONHAND 16
+#define MB_ICONQUESTION 32
+#define MB_OK 0
+#define MB_ABORTRETRYIGNORE 2
+#define MB_APPLMODAL 0
+#define MB_DEFAULT_DESKTOP_ONLY 0x20000
+#define MB_HELP 0x4000
+#define MB_RIGHT 0x80000
+#define MB_RTLREADING 0x100000
+#define MB_TOPMOST 0x40000
+#define MB_DEFBUTTON1 0
+#define MB_DEFBUTTON2 256
+#define MB_DEFBUTTON3 512
+#define MB_DEFBUTTON4 0x300
+#define MB_ICONINFORMATION 64
+#define MB_ICONSTOP 16
+#define MB_OKCANCEL 1
+#define MB_RETRYCANCEL 5
+#ifdef _WIN32_WINNT
+#if (_WIN32_WINNT >= 0x0400)
+#define MB_SERVICE_NOTIFICATION 0x00200000
+#else
+#define MB_SERVICE_NOTIFICATION 0x00040000
+#endif
+#define MB_SERVICE_NOTIFICATION_NT3X 0x00040000
+#endif
+#define MB_SETFOREGROUND 0x10000
+#define MB_SYSTEMMODAL 4096
+#define MB_TASKMODAL 0x2000
+#define MB_YESNO 4
+#define MB_YESNOCANCEL 3
+#define MB_ICONMASK 240
+#define MB_DEFMASK 3840
+#define MB_MODEMASK 0x00003000
+#define MB_MISCMASK 0x0000C000
+#define MB_NOFOCUS 0x00008000
+#define MB_TYPEMASK 15
+#define MB_TOPMOST 0x40000
+#if (WINVER >= 0x0500)
+#define MB_CANCELTRYCONTINUE 6
+#endif
+
+#define IDOK 1
+#define IDCANCEL 2
+#define IDABORT 3
+#define IDRETRY 4
+#define IDIGNORE 5
+#define IDYES 6
+#define IDNO 7
+#if (WINVER >= 0x0400)
+#define IDCLOSE 8
+#define IDHELP 9
+#endif
+#if (WINVER >= 0x0500)
+#define IDTRYAGAIN 10
+#define IDCONTINUE 11
+#endif
+
+#define GWL_EXSTYLE (-20)
+#define GWL_STYLE (-16)
+#define GWL_WNDPROC (-4)
+#define GWLP_WNDPROC (-4)
+#define GWL_HINSTANCE (-6)
+#define GWLP_HINSTANCE (-6)
+#define GWL_HWNDPARENT (-8)
+#define GWLP_HWNDPARENT (-8)
+#define GWL_ID (-12)
+#define GWLP_ID (-12)
+#define GWL_USERDATA (-21)
+#define GWLP_USERDATA (-21)
+#define DWL_DLGPROC 4
+#define DWLP_DLGPROC 4
+#define DWL_MSGRESULT 0
+#define DWLP_MSGRESULT 0
+#define DWL_USER 8
+#define DWLP_USER 8
+#if (_WIN32_WINNT >= 0x0501)
+#define QS_ALLEVENTS 1215
+#define QS_ALLINPUT 1279
+#else
+#define QS_ALLEVENTS 191
+#define QS_ALLINPUT 255
+#endif
+#define QS_ALLPOSTMESSAGE 256
+#define QS_HOTKEY 128
+#if (_WIN32_WINNT >= 0x0501)
+#define QS_INPUT 1031
+#else
+#define QS_INPUT 7
+#endif
+#define QS_KEY 1
+#define QS_MOUSE 6
+#define QS_MOUSEBUTTON 4
+#define QS_MOUSEMOVE 2
+#define QS_PAINT 32
+#define QS_POSTMESSAGE 8
+#if (_WIN32_WINNT >= 0x0501)
+#define QS_RAWINPUT 1024
+#endif
+#define QS_SENDMESSAGE 64
+#define QS_TIMER 16
+#define MWMO_WAITALL 1
+#define MWMO_ALERTABLE 2
+#define MWMO_INPUTAVAILABLE 4
+#define COLOR_3DDKSHADOW 21
+#define COLOR_3DFACE 15
+#define COLOR_3DHILIGHT 20
+#define COLOR_3DHIGHLIGHT 20
+#define COLOR_3DLIGHT 22
+#define COLOR_BTNHILIGHT 20
+#define COLOR_3DSHADOW 16
+#define COLOR_ACTIVEBORDER 10
+#define COLOR_ACTIVECAPTION 2
+#define COLOR_APPWORKSPACE 12
+#define COLOR_BACKGROUND 1
+#define COLOR_DESKTOP 1
+#define COLOR_BTNFACE 15
+#define COLOR_BTNHIGHLIGHT 20
+#define COLOR_BTNSHADOW 16
+#define COLOR_BTNTEXT 18
+#define COLOR_CAPTIONTEXT 9
+#define COLOR_GRAYTEXT 17
+#define COLOR_HIGHLIGHT 13
+#define COLOR_HIGHLIGHTTEXT 14
+#define COLOR_INACTIVEBORDER 11
+#define COLOR_INACTIVECAPTION 3
+#define COLOR_INACTIVECAPTIONTEXT 19
+#define COLOR_INFOBK 24
+#define COLOR_INFOTEXT 23
+#define COLOR_MENU 4
+#define COLOR_MENUTEXT 7
+#define COLOR_SCROLLBAR 0
+#define COLOR_WINDOW 5
+#define COLOR_WINDOWFRAME 6
+#define COLOR_WINDOWTEXT 8
+#define COLOR_HOTLIGHT 26
+#define COLOR_GRADIENTACTIVECAPTION 27
+#define COLOR_GRADIENTINACTIVECAPTION 28
+#define CTLCOLOR_MSGBOX 0
+#define CTLCOLOR_EDIT 1
+#define CTLCOLOR_LISTBOX 2
+#define CTLCOLOR_BTN 3
+#define CTLCOLOR_DLG 4
+#define CTLCOLOR_SCROLLBAR 5
+#define CTLCOLOR_STATIC 6
+#define CTLCOLOR_MAX 7
+#define SM_CXSCREEN 0
+#define SM_CYSCREEN 1
+#define SM_CXVSCROLL 2
+#define SM_CYHSCROLL 3
+#define SM_CYCAPTION 4
+#define SM_CXBORDER 5
+#define SM_CYBORDER 6
+#define SM_CXDLGFRAME 7
+#define SM_CXFIXEDFRAME 7
+#define SM_CYDLGFRAME 8
+#define SM_CYFIXEDFRAME 8
+#define SM_CYVTHUMB 9
+#define SM_CXHTHUMB 10
+#define SM_CXICON 11
+#define SM_CYICON 12
+#define SM_CXCURSOR 13
+#define SM_CYCURSOR 14
+#define SM_CYMENU 15
+#define SM_CXFULLSCREEN 16
+#define SM_CYFULLSCREEN 17
+#define SM_CYKANJIWINDOW 18
+#define SM_MOUSEPRESENT 19
+#define SM_CYVSCROLL 20
+#define SM_CXHSCROLL 21
+#define SM_DEBUG 22
+#define SM_SWAPBUTTON 23
+#define SM_RESERVED1 24
+#define SM_RESERVED2 25
+#define SM_RESERVED3 26
+#define SM_RESERVED4 27
+#define SM_CXMIN 28
+#define SM_CYMIN 29
+#define SM_CXSIZE 30
+#define SM_CYSIZE 31
+#define SM_CXSIZEFRAME 32
+#define SM_CXFRAME 32
+#define SM_CYSIZEFRAME 33
+#define SM_CYFRAME 33
+#define SM_CXMINTRACK 34
+#define SM_CYMINTRACK 35
+#define SM_CXDOUBLECLK 36
+#define SM_CYDOUBLECLK 37
+#define SM_CXICONSPACING 38
+#define SM_CYICONSPACING 39
+#define SM_MENUDROPALIGNMENT 40
+#define SM_PENWINDOWS 41
+#define SM_DBCSENABLED 42
+#define SM_CMOUSEBUTTONS 43
+#define SM_SECURE 44
+#define SM_CXEDGE 45
+#define SM_CYEDGE 46
+#define SM_CXMINSPACING 47
+#define SM_CYMINSPACING 48
+#define SM_CXSMICON 49
+#define SM_CYSMICON 50
+#define SM_CYSMCAPTION 51
+#define SM_CXSMSIZE 52
+#define SM_CYSMSIZE 53
+#define SM_CXMENUSIZE 54
+#define SM_CYMENUSIZE 55
+#define SM_ARRANGE 56
+#define SM_CXMINIMIZED 57
+#define SM_CYMINIMIZED 58
+#define SM_CXMAXTRACK 59
+#define SM_CYMAXTRACK 60
+#define SM_CXMAXIMIZED 61
+#define SM_CYMAXIMIZED 62
+#define SM_NETWORK 63
+#define SM_CLEANBOOT 67
+#define SM_CXDRAG 68
+#define SM_CYDRAG 69
+#define SM_SHOWSOUNDS 70
+#define SM_CXMENUCHECK 71
+#define SM_CYMENUCHECK 72
+#define SM_SLOWMACHINE 73
+#define SM_MIDEASTENABLED 74
+#define SM_MOUSEWHEELPRESENT 75
+#define SM_XVIRTUALSCREEN 76
+#define SM_YVIRTUALSCREEN 77
+#define SM_CXVIRTUALSCREEN 78
+#define SM_CYVIRTUALSCREEN 79
+#define SM_CMONITORS 80
+#define SM_SAMEDISPLAYFORMAT 81
+#define SM_IMMENABLED 82
+#define SM_CXFOCUSBORDER 83
+#define SM_CYFOCUSBORDER 84
+#define SM_TABLETPC 86
+#define SM_MEDIACENTER 87
+#define SM_STARTER 88
+#define SM_SERVERR2 89
+#if (_WIN32_WINNT < 0x0400)
+#define SM_CMETRICS 76
+#else
+#define SM_CMETRICS 88
+#endif
+#define SM_REMOTESESSION 0X1000
+#define ARW_BOTTOMLEFT 0
+#define ARW_BOTTOMRIGHT 1
+#define ARW_HIDE 8
+#define ARW_TOPLEFT 2
+#define ARW_TOPRIGHT 3
+#define ARW_DOWN 4
+#define ARW_LEFT 0
+#define ARW_RIGHT 0
+#define ARW_UP 4
+#define UOI_FLAGS 1
+#define UOI_NAME 2
+#define UOI_TYPE 3
+#define UOI_USER_SID 4
+#define LR_DEFAULTCOLOR 0
+#define LR_MONOCHROME 1
+#define LR_COLOR 2
+#define LR_COPYRETURNORG 4
+#define LR_COPYDELETEORG 8
+#define LR_LOADFROMFILE 16
+#define LR_LOADTRANSPARENT 32
+#define LR_LOADREALSIZE 128
+#define LR_DEFAULTSIZE 0x0040
+#define LR_VGACOLOR 0x0080
+#define LR_LOADMAP3DCOLORS 4096
+#define LR_CREATEDIBSECTION 8192
+#define LR_COPYFROMRESOURCE 0x4000
+#define LR_SHARED 32768
+#define KEYEVENTF_EXTENDEDKEY 0x00000001
+#define KEYEVENTF_KEYUP 00000002
+#if (_WIN32_WINNT >= 0x0500)
+#define KEYEVENTF_UNICODE 0x00000004
+#define KEYEVENTF_SCANCODE 0x00000008
+#endif
+#define OBM_BTNCORNERS 32758
+#define OBM_BTSIZE 32761
+#define OBM_CHECK 32760
+#define OBM_CHECKBOXES 32759
+#define OBM_CLOSE 32754
+#define OBM_COMBO 32738
+#define OBM_DNARROW 32752
+#define OBM_DNARROWD 32742
+#define OBM_DNARROWI 32736
+#define OBM_LFARROW 32750
+#define OBM_LFARROWI 32734
+#define OBM_LFARROWD 32740
+#define OBM_MNARROW 32739
+#define OBM_OLD_CLOSE 32767
+#define OBM_OLD_DNARROW 32764
+#define OBM_OLD_LFARROW 32762
+#define OBM_OLD_REDUCE 32757
+#define OBM_OLD_RESTORE 32755
+#define OBM_OLD_RGARROW 32763
+#define OBM_OLD_UPARROW 32765
+#define OBM_OLD_ZOOM 32756
+#define OBM_REDUCE 32749
+#define OBM_REDUCED 32746
+#define OBM_RESTORE 32747
+#define OBM_RESTORED 32744
+#define OBM_RGARROW 32751
+#define OBM_RGARROWD 32741
+#define OBM_RGARROWI 32735
+#define OBM_SIZE 32766
+#define OBM_UPARROW 32753
+#define OBM_UPARROWD 32743
+#define OBM_UPARROWI 32737
+#define OBM_ZOOM 32748
+#define OBM_ZOOMD 32745
+#define OCR_NORMAL 32512
+#define OCR_IBEAM 32513
+#define OCR_WAIT 32514
+#define OCR_CROSS 32515
+#define OCR_UP 32516
+#define OCR_SIZE 32640
+#define OCR_ICON 32641
+#define OCR_SIZENWSE 32642
+#define OCR_SIZENESW 32643
+#define OCR_SIZEWE 32644
+#define OCR_SIZENS 32645
+#define OCR_SIZEALL 32646
+#define OCR_NO 32648
+#define OCR_APPSTARTING 32650
+#define OIC_SAMPLE 32512
+#define OIC_HAND 32513
+#define OIC_QUES 32514
+#define OIC_BANG 32515
+#define OIC_NOTE 32516
+#define OIC_WINLOGO 32517
+#define OIC_WARNING OIC_BANG
+#define OIC_ERROR OIC_HAND
+#define OIC_INFORMATION OIC_NOTE
+#define HELPINFO_MENUITEM 2
+#define HELPINFO_WINDOW 1
+#define MSGF_DIALOGBOX 0
+#define MSGF_MESSAGEBOX 1
+#define MSGF_MENU 2
+#define MSGF_MOVE 3
+#define MSGF_SIZE 4
+#define MSGF_SCROLLBAR 5
+#define MSGF_NEXTWINDOW 6
+#define MSGF_MAINLOOP 8
+#define MSGF_USER 4096
+#define MOUSEEVENTF_MOVE 0x00000001
+#define MOUSEEVENTF_LEFTDOWN 0x00000002
+#define MOUSEEVENTF_LEFTUP 0x00000004
+#define MOUSEEVENTF_RIGHTDOWN 0x00000008
+#define MOUSEEVENTF_RIGHTUP 0x00000010
+#define MOUSEEVENTF_MIDDLEDOWN 0x00000020
+#define MOUSEEVENTF_MIDDLEUP 0x00000040
+#define MOUSEEVENTF_ABSOLUTE 0x00008000
+#if (_WIN32_WINNT >= 0x0400)
+#define MOUSEEVENTF_WHEEL 0x00000800
+#endif
+#if (_WIN32_WINNT >= 0x0500)
+#define MOUSEEVENTF_XDOWN 0x00000080
+#define MOUSEEVENTF_XUP 0x00000100
+#endif
+/* Also in pbt.h */
+#if (_WIN32_WINNT >= 0x0400)
+#define PBT_APMQUERYSUSPEND 0
+#define PBT_APMQUERYSTANDBY 1
+#define PBT_APMQUERYSUSPENDFAILED 2
+#define PBT_APMQUERYSTANDBYFAILED 3
+#define PBT_APMSUSPEND 4
+#define PBT_APMSTANDBY 5
+#define PBT_APMRESUMECRITICAL 6
+#define PBT_APMRESUMESUSPEND 7
+#define PBT_APMRESUMESTANDBY 8
+#define PBT_APMBATTERYLOW 9
+#define PBT_APMPOWERSTATUSCHANGE 10
+#define PBT_APMOEMEVENT 11
+#define PBT_APMRESUMEAUTOMATIC 18
+#define PBTF_APMRESUMEFROMFAILURE 1
+#endif
+#if (_WIN32_WINNT >= 0x0600)
+#define PBT_POWERSETTINGCHANGE 32787
+#endif
+/* end pbt.h */
+
+#define PM_NOREMOVE 0
+#define PM_REMOVE 1
+#define PM_NOYIELD 2
+#if (_WIN32_WINNT >= 0x0500)
+# define PM_QS_INPUT (QS_INPUT << 16)
+# define PM_QS_POSTMESSAGE ((QS_POSTMESSAGE|QS_HOTKEY|QS_TIMER) << 16)
+# define PM_QS_PAINT (QS_PAINT << 16)
+# define PM_QS_SENDMESSAGE (QS_SENDMESSAGE << 16)
+#endif
+#define HWND_BROADCAST ((HWND)0xFFFF)
+#define HWND_BOTTOM ((HWND)1)
+#define HWND_NOTOPMOST ((HWND)(-2))
+#define HWND_TOP ((HWND)0)
+#define HWND_TOPMOST ((HWND)(-1))
+#define HWND_DESKTOP (HWND)0
+#if (_WIN32_WINNT >= 0x0500)
+#define HWND_MESSAGE ((HWND)(-3))
+#endif
+#define RDW_ERASE 4
+#define RDW_FRAME 1024
+#define RDW_INTERNALPAINT 2
+#define RDW_INVALIDATE 1
+#define RDW_NOERASE 32
+#define RDW_NOFRAME 2048
+#define RDW_NOINTERNALPAINT 16
+#define RDW_VALIDATE 8
+#define RDW_ERASENOW 512
+#define RDW_UPDATENOW 256
+#define RDW_ALLCHILDREN 128
+#define RDW_NOCHILDREN 64
+#define SMTO_ABORTIFHUNG 0x0002
+#define SMTO_BLOCK 0x0001
+#define SMTO_NORMAL 0x0000
+#if (_WIN32_WINNT >= 0x0500)
+#define SMTO_NOTIMEOUTIFNOTHUNG 0x0008
+#endif
+#define SIF_DISABLENOSCROLL 0x0008
+#define SIF_PAGE 0x0002
+#define SIF_POS 0x0004
+#define SIF_RANGE 0x0001
+#define SIF_TRACKPOS 0x0010
+#define SIF_ALL (SIF_PAGE|SIF_POS|SIF_RANGE|SIF_TRACKPOS)
+#define SWP_DRAWFRAME 0x0020
+#define SWP_FRAMECHANGED 0x0020
+#define SWP_HIDEWINDOW 0x0080
+#define SWP_NOACTIVATE 0x0010
+#define SWP_NOCOPYBITS 0x0100
+#define SWP_NOMOVE 0x0002
+#define SWP_NOSIZE 0x0001
+#define SWP_NOREDRAW 0x0008
+#define SWP_NOZORDER 0x0004
+#define SWP_SHOWWINDOW 0x0040
+#define SWP_NOOWNERZORDER 0x0200
+#define SWP_NOREPOSITION SWP_NOOWNERZORDER
+#define SWP_NOSENDCHANGING 0x0400
+#define SWP_DEFERERASE 0x2000
+#define SWP_ASYNCWINDOWPOS 0x4000
+#define HSHELL_ACTIVATESHELLWINDOW 3
+#define HSHELL_ENDTASK 10
+#define HSHELL_GETMINRECT 5
+#define HSHELL_LANGUAGE 8
+#define HSHELL_REDRAW 6
+#define HSHELL_TASKMAN 7
+#define HSHELL_WINDOWACTIVATED 4
+#define HSHELL_WINDOWCREATED 1
+#define HSHELL_WINDOWDESTROYED 2
+#if (_WIN32_WINNT >= 0x0500)
+#define HSHELL_ACCESSIBILITYSTATE 11
+#define HSHELL_APPCOMMAND 12
+#define HSHELL_RUDEAPPACTIVATED 32772
+#define HSHELL_FLASH 32774
+#endif
+#if (_WIN32_WINNT >= 0x0501)
+#define HSHELL_WINDOWREPLACED 13
+#define HSHELL_WINDOWREPLACING 14
+#endif
+#define SPI_GETACCESSTIMEOUT 0x003C
+#define SPI_GETACTIVEWINDOWTRACKING 0x1000
+#define SPI_GETACTIVEWNDTRKTIMEOUT 8194
+#define SPI_GETACTIVEWNDTRKZORDER 0x100C
+#define SPI_GETANIMATION 0x0048
+#define SPI_GETBEEP 0x0001
+#define SPI_GETBLOCKSENDINPUTRESETS 0x1026
+#define SPI_GETBORDER 0x0005
+#define SPI_GETCARETWIDTH 0x2006
+#define SPI_GETCOMBOBOXANIMATION 0x1004
+#define SPI_GETCURSORSHADOW 0x101A
+#define SPI_GETDEFAULTINPUTLANG 0x0059
+#define SPI_GETDESKWALLPAPER 0x0073
+#define SPI_GETDRAGFULLWINDOWS 0x0026
+#define SPI_GETFASTTASKSWITCH 0x0023
+#define SPI_GETFILTERKEYS 0x0032
+#define SPI_GETFONTSMOOTHING 0x004A
+#define SPI_GETFOREGROUNDFLASHCOUNT 0x2004
+#define SPI_GETFOREGROUNDLOCKTIMEOUT 0x2000
+#define SPI_GETGRADIENTCAPTIONS 0x1008
+#define SPI_GETGRIDGRANULARITY 0x0012
+#define SPI_GETHIGHCONTRAST 0x0042
+#define SPI_GETHOTTRACKING 0x100E
+#define SPI_GETICONMETRICS 0x002D
+#define SPI_GETICONTITLELOGFONT 0x001F
+#define SPI_GETICONTITLEWRAP 0x0019
+#define SPI_GETKEYBOARDCUES 0x100A
+#define SPI_GETKEYBOARDDELAY 0x0016
+#define SPI_GETKEYBOARDPREF 0x0044
+#define SPI_GETKEYBOARDSPEED 0x000A
+#define SPI_GETLISTBOXSMOOTHSCROLLING 0x1006
+#define SPI_GETLOWPOWERACTIVE 0x0053
+#define SPI_GETLOWPOWERTIMEOUT 0x004F
+#define SPI_GETMENUANIMATION 0x1002
+#define SPI_GETMENUDROPALIGNMENT 0x001B
+#define SPI_GETMENUFADE 0x1012
+#define SPI_GETMENUSHOWDELAY 0x006A
+#define SPI_GETMENUUNDERLINES SPI_GETKEYBOARDCUES
+#define SPI_GETMINIMIZEDMETRICS 0x002B
+#define SPI_GETMOUSE 0x0003
+#define SPI_GETMOUSEHOVERHEIGHT 0x0064
+#define SPI_GETMOUSEHOVERTIME 0x0066
+#define SPI_GETMOUSEHOVERWIDTH 0x0062
+#define SPI_GETMOUSEKEYS 0x0036
+#define SPI_GETMOUSESPEED 0x0070
+#define SPI_GETMOUSETRAILS 0x005E
+#define SPI_GETNONCLIENTMETRICS 0x0029
+#define SPI_GETPOWEROFFACTIVE 0x0054
+#define SPI_GETPOWEROFFTIMEOUT 0x0050
+#define SPI_GETSCREENREADER 0x0046
+#define SPI_GETSCREENSAVEACTIVE 0x0010
+#define SPI_GETSCREENSAVERRUNNING 0x0072
+#define SPI_GETSCREENSAVETIMEOUT 0x000E
+#define SPI_GETSELECTIONFADE 0x1014
+#define SPI_GETSERIALKEYS 0x003E
+#define SPI_GETSHOWIMEUI 0x006E
+#define SPI_GETSHOWSOUNDS 0x0038
+#define SPI_GETSNAPTODEFBUTTON 0x005F
+#define SPI_GETSOUNDSENTRY 0x0040
+#define SPI_GETSTICKYKEYS 0x003A
+#define SPI_GETTOGGLEKEYS 0x0034
+#define SPI_GETTOOLTIPANIMATION 0x1016
+#define SPI_GETTOOLTIPFADE 0x1018
+#define SPI_GETUIEFFECTS 0x103E
+#define SPI_GETWHEELSCROLLLINES 0x0068
+#define SPI_GETWINDOWSEXTENSION 0x005C
+#define SPI_GETWORKAREA 0x0030
+#define SPI_ICONHORIZONTALSPACING 0x000D
+#define SPI_ICONVERTICALSPACING 0x0018
+#define SPI_LANGDRIVER 0x000C
+#define SPI_SETACCESSTIMEOUT 0x003D
+#define SPI_SETACTIVEWINDOWTRACKING 0x1001
+#define SPI_SETACTIVEWNDTRKTIMEOUT 8195
+#define SPI_SETACTIVEWNDTRKZORDER 0x100D
+#define SPI_SETANIMATION 0x0049
+#define SPI_SETBEEP 0x0002
+#define SPI_SETBLOCKSENDINPUTRESETS 0x1027
+#define SPI_SETBORDER 0x0006
+#define SPI_SETCARETWIDTH 0x2007
+#define SPI_SETCOMBOBOXANIMATION 0x1005
+#define SPI_SETCURSORS 0x0057
+#define SPI_SETCURSORSHADOW 0x101B
+#define SPI_SETDEFAULTINPUTLANG 0x005A
+#define SPI_SETDESKPATTERN 0x0015
+#define SPI_SETDESKWALLPAPER 0x0014
+#define SPI_SETDOUBLECLICKTIME 0x0020
+#define SPI_SETDOUBLECLKHEIGHT 0x001E
+#define SPI_SETDOUBLECLKWIDTH 0x001D
+#define SPI_SETDRAGFULLWINDOWS 0x0025
+#define SPI_SETDRAGHEIGHT 0x004D
+#define SPI_SETDRAGWIDTH 0x004C
+#define SPI_SETFASTTASKSWITCH 0x0024
+#define SPI_SETFILTERKEYS 0x0033
+#define SPI_SETFONTSMOOTHING 0x004B
+#define SPI_SETFOREGROUNDFLASHCOUNT 0x2005
+#define SPI_SETFOREGROUNDLOCKTIMEOUT 0x2001
+#define SPI_SETGRADIENTCAPTIONS 0x1009
+#define SPI_SETGRIDGRANULARITY 0x0013
+#define SPI_SETHANDHELD 0x004E
+#define SPI_SETHIGHCONTRAST 0x0043
+#define SPI_SETHOTTRACKING 0x100F
+#define SPI_SETICONMETRICS 0x002E
+#define SPI_SETICONS 0x0058
+#define SPI_SETICONTITLELOGFONT 0x0022
+#define SPI_SETICONTITLEWRAP 0x001A
+#define SPI_SETKEYBOARDCUES 0x100B
+#define SPI_SETKEYBOARDDELAY 0x0017
+#define SPI_SETKEYBOARDPREF 0x0045
+#define SPI_SETKEYBOARDSPEED 0x000B
+#define SPI_SETLANGTOGGLE 0x005B
+#define SPI_SETLISTBOXSMOOTHSCROLLING 0x1007
+#define SPI_SETLOWPOWERACTIVE 0x0055
+#define SPI_SETLOWPOWERTIMEOUT 0x0051
+#define SPI_SETMENUANIMATION 0x1003
+#define SPI_SETMENUDROPALIGNMENT 0x001C
+#define SPI_SETMENUFADE 0x1013
+#define SPI_SETMENUSHOWDELAY 0x006B
+#define SPI_SETMENUUNDERLINES SPI_SETKEYBOARDCUES
+#define SPI_SETMINIMIZEDMETRICS 0x002C
+#define SPI_SETMOUSE 0x0004
+#define SPI_SETMOUSEBUTTONSWAP 0x0021
+#define SPI_SETMOUSEHOVERHEIGHT 0x0065
+#define SPI_SETMOUSEHOVERTIME 0x0067
+#define SPI_SETMOUSEHOVERWIDTH 0x0063
+#define SPI_SETMOUSEKEYS 0x0037
+#define SPI_SETMOUSESPEED 0x0071
+#define SPI_SETMOUSETRAILS 0x005D
+#define SPI_SETNONCLIENTMETRICS 0x002A
+#define SPI_SETPENWINDOWS 0x0031
+#define SPI_SETPOWEROFFACTIVE 0x0056
+#define SPI_SETPOWEROFFTIMEOUT 0x0052
+#define SPI_SETSCREENREADER 0x0047
+#define SPI_SETSCREENSAVEACTIVE 0x0011
+#define SPI_SETSCREENSAVERRUNNING 0x0061
+#define SPI_SETSCREENSAVETIMEOUT 0x000F
+#define SPI_SETSELECTIONFADE 0x1015
+#define SPI_SETSERIALKEYS 0x003F
+#define SPI_SETSHOWIMEUI 0x006F
+#define SPI_SETSHOWSOUNDS 0x0039
+#define SPI_SETSNAPTODEFBUTTON 0x0060
+#define SPI_SETSOUNDSENTRY 0x0041
+#define SPI_SETSTICKYKEYS 0x003B
+#define SPI_SETTOGGLEKEYS 0x0035
+#define SPI_SETTOOLTIPANIMATION 0x1017
+#define SPI_SETTOOLTIPFADE 0x1019
+#define SPI_SETUIEFFECTS 0x103F
+#define SPI_SETWHEELSCROLLLINES 0x0069
+#define SPI_SETWORKAREA 0x002F
+#if (_WIN32_WINNT >= 0x0501)
+#define SPI_GETDROPSHADOW 0x1024
+#define SPI_GETFLATMENU 0x1022
+#define SPI_GETFOCUSBORDERHEIGHT 0x2010
+#define SPI_GETFOCUSBORDERWIDTH 0x200E
+#define SPI_GETFONTSMOOTHINGCONTRAST 0x200C
+#define SPI_GETFONTSMOOTHINGTYPE 0x200A
+#define SPI_GETMOUSECLICKLOCK 0x101E
+#define SPI_GETMOUSECLICKLOCKTIME 0x2008
+#define SPI_GETMOUSESONAR 0x101C
+#define SPI_GETMOUSEVANISH 0x1020
+#define SPI_SETDROPSHADOW 0x1025
+#define SPI_SETFLATMENU 0x1023
+#define SPI_SETFOCUSBORDERHEIGHT 0x2011
+#define SPI_SETFOCUSBORDERWIDTH 0x200F
+#define SPI_SETFONTSMOOTHINGCONTRAST 0x200D
+#define SPI_SETFONTSMOOTHINGTYPE 0x200B
+#define SPI_SETMOUSECLICKLOCK 0x101F
+#define SPI_SETMOUSECLICKLOCKTIME 0x2009
+#define SPI_SETMOUSESONAR 0x101D
+#define SPI_SETMOUSEVANISH 0x1021
+#endif
+#define SPIF_UPDATEINIFILE 0x0001
+#define SPIF_SENDCHANGE 0x0002
+#define SPIF_SENDWININICHANGE SPIF_SENDCHANGE
+#define ATF_ONOFFFEEDBACK 2
+#define ATF_TIMEOUTON 1
+#define WM_APP 32768
+#define WM_ACTIVATE 6
+#define WM_ACTIVATEAPP 28
+/* FIXME/CHECK: Are WM_AFX{FIRST,LAST} valid for WINVER < 0x400? */
+#define WM_AFXFIRST 864
+#define WM_AFXLAST 895
+#define WM_ASKCBFORMATNAME 780
+#define WM_CANCELJOURNAL 75
+#define WM_CANCELMODE 31
+#define WM_CAPTURECHANGED 533
+#define WM_CHANGECBCHAIN 781
+#define WM_CHAR 258
+#define WM_CHARTOITEM 47
+#define WM_CHILDACTIVATE 34
+#define WM_CLEAR 771
+#define WM_CLOSE 16
+#define WM_COMMAND 273
+#define WM_COMMNOTIFY 68 /* obsolete */
+#define WM_COMPACTING 65
+#define WM_COMPAREITEM 57
+#define WM_CONTEXTMENU 123
+#define WM_COPY 769
+#define WM_COPYDATA 74
+#define WM_CREATE 1
+#define WM_CTLCOLORBTN 309
+#define WM_CTLCOLORDLG 310
+#define WM_CTLCOLOREDIT 307
+#define WM_CTLCOLORLISTBOX 308
+#define WM_CTLCOLORMSGBOX 306
+#define WM_CTLCOLORSCROLLBAR 311
+#define WM_CTLCOLORSTATIC 312
+#define WM_CUT 768
+#define WM_DEADCHAR 259
+#define WM_DELETEITEM 45
+#define WM_DESTROY 2
+#define WM_DESTROYCLIPBOARD 775
+#define WM_DEVICECHANGE 537
+#define WM_DEVMODECHANGE 27
+#define WM_DISPLAYCHANGE 126
+#define WM_DRAWCLIPBOARD 776
+#define WM_DRAWITEM 43
+#define WM_DROPFILES 563
+#define WM_ENABLE 10
+#define WM_ENDSESSION 22
+#define WM_ENTERIDLE 289
+#define WM_ENTERMENULOOP 529
+#define WM_ENTERSIZEMOVE 561
+#define WM_ERASEBKGND 20
+#define WM_EXITMENULOOP 530
+#define WM_EXITSIZEMOVE 562
+#define WM_FONTCHANGE 29
+#define WM_GETDLGCODE 135
+#define WM_GETFONT 49
+#define WM_GETHOTKEY 51
+#define WM_GETICON 127
+#define WM_GETMINMAXINFO 36
+#define WM_GETTEXT 13
+#define WM_GETTEXTLENGTH 14
+/* FIXME/CHECK: Are WM_HANDHEL{FIRST,LAST} valid for WINVER < 0x400? */
+#define WM_HANDHELDFIRST 856
+#define WM_HANDHELDLAST 863
+#define WM_HELP 83
+#define WM_HOTKEY 786
+#define WM_HSCROLL 276
+#define WM_HSCROLLCLIPBOARD 782
+#define WM_ICONERASEBKGND 39
+#define WM_INITDIALOG 272
+#define WM_INITMENU 278
+#define WM_INITMENUPOPUP 279
+#if (_WIN32_WINNT >= 0x0501)
+#define WM_INPUT 0x00FF
+#endif
+#define WM_INPUTLANGCHANGE 81
+#define WM_INPUTLANGCHANGEREQUEST 80
+#define WM_KEYDOWN 256
+#define WM_KEYUP 257
+#define WM_KILLFOCUS 8
+#define WM_MDIACTIVATE 546
+#define WM_MDICASCADE 551
+#define WM_MDICREATE 544
+#define WM_MDIDESTROY 545
+#define WM_MDIGETACTIVE 553
+#define WM_MDIICONARRANGE 552
+#define WM_MDIMAXIMIZE 549
+#define WM_MDINEXT 548
+#define WM_MDIREFRESHMENU 564
+#define WM_MDIRESTORE 547
+#define WM_MDISETMENU 560
+#define WM_MDITILE 550
+#define WM_MEASUREITEM 44
+#if (WINVER >= 0x0500)
+#define WM_GETOBJECT 0x003D
+#define WM_CHANGEUISTATE 0x0127
+#define WM_UPDATEUISTATE 0x0128
+#define WM_QUERYUISTATE 0x0129
+#define WM_UNINITMENUPOPUP 0x0125
+#define WM_MENURBUTTONUP 290
+#define WM_MENUCOMMAND 0x0126
+#define WM_MENUGETOBJECT 0x0124
+#define WM_MENUDRAG 0x0123
+#define WM_APPCOMMAND 0x0319
+#endif
+#define WM_MENUCHAR 288
+#define WM_MENUSELECT 287
+#define WM_NEXTMENU 531
+#define WM_MOVE 3
+#define WM_MOVING 534
+#define WM_NCACTIVATE 134
+#define WM_NCCALCSIZE 131
+#define WM_NCCREATE 129
+#define WM_NCDESTROY 130
+#define WM_NCHITTEST 132
+#define WM_NCLBUTTONDBLCLK 163
+#define WM_NCLBUTTONDOWN 161
+#define WM_NCLBUTTONUP 162
+#define WM_NCMBUTTONDBLCLK 169
+#define WM_NCMBUTTONDOWN 167
+#define WM_NCMBUTTONUP 168
+#if (_WIN32_WINNT >= 0x0500)
+#define WM_NCXBUTTONDOWN 171
+#define WM_NCXBUTTONUP 172
+#define WM_NCXBUTTONDBLCLK 173
+#define WM_NCMOUSEHOVER 0x02A0
+#define WM_NCMOUSELEAVE 0x02A2
+#endif
+#define WM_NCMOUSEMOVE 160
+#define WM_NCPAINT 133
+#define WM_NCRBUTTONDBLCLK 166
+#define WM_NCRBUTTONDOWN 164
+#define WM_NCRBUTTONUP 165
+#define WM_NEXTDLGCTL 40
+#define WM_NEXTMENU 531
+#define WM_NOTIFY 78
+#define WM_NOTIFYFORMAT 85
+#define WM_NULL 0
+#define WM_PAINT 15
+#define WM_PAINTCLIPBOARD 777
+#define WM_PAINTICON 38
+#define WM_PALETTECHANGED 785
+#define WM_PALETTEISCHANGING 784
+#define WM_PARENTNOTIFY 528
+#define WM_PASTE 770
+#define WM_PENWINFIRST 896
+#define WM_PENWINLAST 911
+#define WM_POWER 72
+#define WM_POWERBROADCAST 536
+#define WM_PRINT 791
+#define WM_PRINTCLIENT 792
+#define WM_QUERYDRAGICON 55
+#define WM_QUERYENDSESSION 17
+#define WM_QUERYNEWPALETTE 783
+#define WM_QUERYOPEN 19
+#define WM_QUEUESYNC 35
+#define WM_QUIT 18
+#define WM_RENDERALLFORMATS 774
+#define WM_RENDERFORMAT 773
+#define WM_SETCURSOR 32
+#define WM_SETFOCUS 7
+#define WM_SETFONT 48
+#define WM_SETHOTKEY 50
+#define WM_SETICON 128
+#define WM_SETREDRAW 11
+#define WM_SETTEXT 12
+#define WM_SETTINGCHANGE 26
+#define WM_SHOWWINDOW 24
+#define WM_SIZE 5
+#define WM_SIZECLIPBOARD 779
+#define WM_SIZING 532
+#define WM_SPOOLERSTATUS 42
+#define WM_STYLECHANGED 125
+#define WM_STYLECHANGING 124
+#define WM_SYSCHAR 262
+#define WM_SYSCOLORCHANGE 21
+#define WM_SYSCOMMAND 274
+#define WM_SYSDEADCHAR 263
+#define WM_SYSKEYDOWN 260
+#define WM_SYSKEYUP 261
+#define WM_TCARD 82
+#define WM_THEMECHANGED 794
+#define WM_TIMECHANGE 30
+#define WM_TIMER 275
+#define WM_UNDO 772
+#define WM_USER 1024
+#define WM_USERCHANGED 84
+#define WM_VKEYTOITEM 46
+#define WM_VSCROLL 277
+#define WM_VSCROLLCLIPBOARD 778
+#define WM_WINDOWPOSCHANGED 71
+#define WM_WINDOWPOSCHANGING 70
+#define WM_WININICHANGE 26
+#define WM_KEYFIRST 256
+#if _WIN32_WINNT >= 0x0501
+#define WM_KEYLAST 265
+#define WM_UNICHAR 265
+#define UNICODE_NOCHAR 0xffff
+#else
+#define WM_KEYLAST 264
+#endif
+#define WM_SYNCPAINT 136
+#define WM_MOUSEACTIVATE 33
+#define WM_MOUSEMOVE 512
+#define WM_LBUTTONDOWN 513
+#define WM_LBUTTONUP 514
+#define WM_LBUTTONDBLCLK 515
+#define WM_RBUTTONDOWN 516
+#define WM_RBUTTONUP 517
+#define WM_RBUTTONDBLCLK 518
+#define WM_MBUTTONDOWN 519
+#define WM_MBUTTONUP 520
+#define WM_MBUTTONDBLCLK 521
+#define WM_MOUSEWHEEL 522
+#define WM_MOUSEFIRST 512
+#if (_WIN32_WINNT >= 0x0500)
+#define WM_XBUTTONDOWN 523
+#define WM_XBUTTONUP 524
+#define WM_XBUTTONDBLCLK 525
+#define WM_MOUSELAST 525
+#else
+#define WM_MOUSELAST 522
+#endif
+#define WM_MOUSEHOVER 0x2A1
+#define WM_MOUSELEAVE 0x2A3
+#if (_WIN32_WINNT >= 0x0400)
+#define WHEEL_DELTA 120
+#define GET_WHEEL_DELTA_WPARAM(wparam) ((short)HIWORD (wparam))
+#define WHEEL_PAGESCROLL UINT_MAX
+#endif
+#if (_WIN32_WINNT >= 0x0601)
+#define WM_TOUCHMOVE 576
+#define WM_TOUCHDOWN 577
+#define WM_TOUCHUP 578
+#endif
+#define BM_CLICK 245
+#define BM_GETCHECK 240
+#define BM_GETIMAGE 246
+#define BM_GETSTATE 242
+#define BM_SETCHECK 241
+#define BM_SETIMAGE 247
+#define BM_SETSTATE 243
+#define BM_SETSTYLE 244
+#define BN_CLICKED 0
+#define BN_DBLCLK 5
+#define BN_DISABLE 4
+#define BN_DOUBLECLICKED 5
+#define BN_HILITE 2
+#define BN_KILLFOCUS 7
+#define BN_PAINT 1
+#define BN_PUSHED 2
+#define BN_SETFOCUS 6
+#define BN_UNHILITE 3
+#define BN_UNPUSHED 3
+#define CB_ADDSTRING 323
+#define CB_DELETESTRING 324
+#define CB_DIR 325
+#define CB_FINDSTRING 332
+#define CB_FINDSTRINGEXACT 344
+#define CB_GETCOUNT 326
+#define CB_GETCURSEL 327
+#define CB_GETDROPPEDCONTROLRECT 338
+#define CB_GETDROPPEDSTATE 343
+#define CB_GETDROPPEDWIDTH 351
+#define CB_GETEDITSEL 320
+#define CB_GETEXTENDEDUI 342
+#define CB_GETHORIZONTALEXTENT 349
+#define CB_GETITEMDATA 336
+#define CB_GETITEMHEIGHT 340
+#define CB_GETLBTEXT 328
+#define CB_GETLBTEXTLEN 329
+#define CB_GETLOCALE 346
+#define CB_GETTOPINDEX 347
+#define CB_INITSTORAGE 353
+#define CB_INSERTSTRING 330
+#define CB_LIMITTEXT 321
+#define CB_RESETCONTENT 331
+#define CB_SELECTSTRING 333
+#define CB_SETCURSEL 334
+#define CB_SETDROPPEDWIDTH 352
+#define CB_SETEDITSEL 322
+#define CB_SETEXTENDEDUI 341
+#define CB_SETHORIZONTALEXTENT 350
+#define CB_SETITEMDATA 337
+#define CB_SETITEMHEIGHT 339
+#define CB_SETLOCALE 345
+#define CB_SETTOPINDEX 348
+#define CB_SHOWDROPDOWN 335
+#if (_WIN32_WINNT >= 0x0501)
+#define CB_SETMINVISIBLE 0x1701
+#define CB_GETMINVISIBLE 0x1702
+#endif
+#define CBN_CLOSEUP 8
+#define CBN_DBLCLK 2
+#define CBN_DROPDOWN 7
+#define CBN_EDITCHANGE 5
+#define CBN_EDITUPDATE 6
+#define CBN_ERRSPACE (-1)
+#define CBN_KILLFOCUS 4
+#define CBN_SELCHANGE 1
+#define CBN_SELENDCANCEL 10
+#define CBN_SELENDOK 9
+#define CBN_SETFOCUS 3
+#define EM_CANUNDO 198
+#define EM_CHARFROMPOS 215
+#define EM_EMPTYUNDOBUFFER 205
+#define EM_FMTLINES 200
+#define EM_GETFIRSTVISIBLELINE 206
+#define EM_GETHANDLE 189
+#define EM_GETLIMITTEXT 213
+#define EM_GETLINE 196
+#define EM_GETLINECOUNT 186
+#define EM_GETMARGINS 212
+#define EM_GETMODIFY 184
+#define EM_GETPASSWORDCHAR 210
+#define EM_GETRECT 178
+#define EM_GETSEL 176
+#define EM_GETTHUMB 190
+#define EM_GETWORDBREAKPROC 209
+#define EM_LIMITTEXT 197
+#define EM_LINEFROMCHAR 201
+#define EM_LINEINDEX 187
+#define EM_LINELENGTH 193
+#define EM_LINESCROLL 182
+#define EM_POSFROMCHAR 214
+#define EM_REPLACESEL 194
+#define EM_SCROLL 181
+#define EM_SCROLLCARET 183
+#define EM_SETHANDLE 188
+#define EM_SETLIMITTEXT 197
+#define EM_SETMARGINS 211
+#define EM_SETMODIFY 185
+#define EM_SETPASSWORDCHAR 204
+#define EM_SETREADONLY 207
+#define EM_SETRECT 179
+#define EM_SETRECTNP 180
+#define EM_SETSEL 177
+#define EM_SETTABSTOPS 203
+#define EM_SETWORDBREAKPROC 208
+#define EM_UNDO 199
+#if (WINVER >= 0x0500)
+#define EM_GETIMESTATUS 217
+#define EM_SETIMESTATUS 216
+#endif
+#define EN_CHANGE 768
+#define EN_ERRSPACE 1280
+#define EN_HSCROLL 1537
+#define EN_KILLFOCUS 512
+#define EN_MAXTEXT 1281
+#define EN_SETFOCUS 256
+#define EN_UPDATE 1024
+#define EN_VSCROLL 1538
+#define LB_ADDFILE 406
+#define LB_ADDSTRING 384
+#define LB_DELETESTRING 386
+#define LB_DIR 397
+#define LB_FINDSTRING 399
+#define LB_FINDSTRINGEXACT 418
+#define LB_GETANCHORINDEX 413
+#define LB_GETCARETINDEX 415
+#define LB_GETCOUNT 395
+#define LB_GETCURSEL 392
+#define LB_GETHORIZONTALEXTENT 403
+#define LB_GETITEMDATA 409
+#define LB_GETITEMHEIGHT 417
+#define LB_GETITEMRECT 408
+#define LB_GETLOCALE 422
+#define LB_GETSEL 391
+#define LB_GETSELCOUNT 400
+#define LB_GETSELITEMS 401
+#define LB_GETTEXT 393
+#define LB_GETTEXTLEN 394
+#define LB_GETTOPINDEX 398
+#define LB_INITSTORAGE 424
+#define LB_INSERTSTRING 385
+#define LB_ITEMFROMPOINT 425
+#define LB_RESETCONTENT 388
+#define LB_SELECTSTRING 396
+#define LB_SELITEMRANGE 411
+#define LB_SELITEMRANGEEX 387
+#define LB_SETANCHORINDEX 412
+#define LB_SETCARETINDEX 414
+#define LB_SETCOLUMNWIDTH 405
+#define LB_SETCOUNT 423
+#define LB_SETCURSEL 390
+#define LB_SETHORIZONTALEXTENT 404
+#define LB_SETITEMDATA 410
+#define LB_SETITEMHEIGHT 416
+#define LB_SETLOCALE 421
+#define LB_SETSEL 389
+#define LB_SETTABSTOPS 402
+#define LB_SETTOPINDEX 407
+#define LBN_DBLCLK 2
+#define LBN_ERRSPACE (-2)
+#define LBN_KILLFOCUS 5
+#define LBN_SELCANCEL 3
+#define LBN_SELCHANGE 1
+#define LBN_SETFOCUS 4
+#define SBM_ENABLE_ARROWS 228
+#define SBM_GETPOS 225
+#define SBM_GETRANGE 227
+#define SBM_GETSCROLLINFO 234
+#define SBM_SETPOS 224
+#define SBM_SETRANGE 226
+#define SBM_SETRANGEREDRAW 230
+#define SBM_SETSCROLLINFO 233
+#define STM_GETICON 369
+#define STM_GETIMAGE 371
+#define STM_SETICON 368
+#define STM_SETIMAGE 370
+#define STN_CLICKED 0
+#define STN_DBLCLK 1
+#define STN_DISABLE 3
+#define STN_ENABLE 2
+#define DM_GETDEFID WM_USER
+#define DM_SETDEFID (WM_USER+1)
+#define DM_REPOSITION (WM_USER+2)
+#define PSM_PAGEINFO (WM_USER+100)
+#define PSM_SHEETINFO (WM_USER+101)
+#define PSI_SETACTIVE 1
+#define PSI_KILLACTIVE 2
+#define PSI_APPLY 3
+#define PSI_RESET 4
+#define PSI_HASHELP 5
+#define PSI_HELP 6
+#define PSI_CHANGED 1
+#define PSI_GUISTART 2
+#define PSI_REBOOT 3
+#define PSI_GETSIBLINGS 4
+#define DCX_WINDOW 1
+#define DCX_CACHE 2
+#define DCX_PARENTCLIP 32
+#define DCX_CLIPSIBLINGS 16
+#define DCX_CLIPCHILDREN 8
+#define DCX_NORESETATTRS 4
+#define DCX_INTERSECTUPDATE 0x200
+#define DCX_LOCKWINDOWUPDATE 0x400
+#define DCX_EXCLUDERGN 64
+#define DCX_INTERSECTRGN 128
+#define DCX_VALIDATE 0x200000
+#define GMDI_GOINTOPOPUPS 2
+#define GMDI_USEDISABLED 1
+#define FKF_AVAILABLE 2
+#define FKF_CLICKON 64
+#define FKF_FILTERKEYSON 1
+#define FKF_HOTKEYACTIVE 4
+#define FKF_HOTKEYSOUND 16
+#define FKF_CONFIRMHOTKEY 8
+#define FKF_INDICATOR 32
+#define HCF_HIGHCONTRASTON 1
+#define HCF_AVAILABLE 2
+#define HCF_HOTKEYACTIVE 4
+#define HCF_CONFIRMHOTKEY 8
+#define HCF_HOTKEYSOUND 16
+#define HCF_INDICATOR 32
+#define HCF_HOTKEYAVAILABLE 64
+#define MKF_AVAILABLE 2
+#define MKF_CONFIRMHOTKEY 8
+#define MKF_HOTKEYACTIVE 4
+#define MKF_HOTKEYSOUND 16
+#define MKF_INDICATOR 32
+#define MKF_MOUSEKEYSON 1
+#define MKF_MODIFIERS 64
+#define MKF_REPLACENUMBERS 128
+#define SERKF_ACTIVE 8 /* May be obsolete. Not in recent MS docs. */
+#define SERKF_AVAILABLE 2
+#define SERKF_INDICATOR 4
+#define SERKF_SERIALKEYSON 1
+#define SSF_AVAILABLE 2
+#define SSF_SOUNDSENTRYON 1
+#define SSTF_BORDER 2
+#define SSTF_CHARS 1
+#define SSTF_DISPLAY 3
+#define SSTF_NONE 0
+#define SSGF_DISPLAY 3
+#define SSGF_NONE 0
+#define SSWF_CUSTOM 4
+#define SSWF_DISPLAY 3
+#define SSWF_NONE 0
+#define SSWF_TITLE 1
+#define SSWF_WINDOW 2
+#define SKF_AUDIBLEFEEDBACK 64
+#define SKF_AVAILABLE 2
+#define SKF_CONFIRMHOTKEY 8
+#define SKF_HOTKEYACTIVE 4
+#define SKF_HOTKEYSOUND 16
+#define SKF_INDICATOR 32
+#define SKF_STICKYKEYSON 1
+#define SKF_TRISTATE 128
+#define SKF_TWOKEYSOFF 256
+#define TKF_AVAILABLE 2
+#define TKF_CONFIRMHOTKEY 8
+#define TKF_HOTKEYACTIVE 4
+#define TKF_HOTKEYSOUND 16
+#define TKF_TOGGLEKEYSON 1
+#define MDITILE_SKIPDISABLED 2
+#define MDITILE_HORIZONTAL 1
+#define MDITILE_VERTICAL 0
+#define VK_LBUTTON 1
+#define VK_RBUTTON 2
+#define VK_CANCEL 3
+#define VK_MBUTTON 4
+#if (_WIN32_WINNT >= 0x0500)
+#define VK_XBUTTON1 5
+#define VK_XBUTTON2 6
+#endif
+#define VK_BACK 8
+#define VK_TAB 9
+#define VK_CLEAR 12
+#define VK_RETURN 13
+#define VK_SHIFT 16
+#define VK_CONTROL 17
+#define VK_MENU 18
+#define VK_PAUSE 19
+#define VK_CAPITAL 20
+#define VK_KANA 0x15
+#define VK_HANGEUL 0x15
+#define VK_HANGUL 0x15
+#define VK_JUNJA 0x17
+#define VK_FINAL 0x18
+#define VK_HANJA 0x19
+#define VK_KANJI 0x19
+#define VK_ESCAPE 0x1B
+#define VK_CONVERT 0x1C
+#define VK_NONCONVERT 0x1D
+#define VK_ACCEPT 0x1E
+#define VK_MODECHANGE 0x1F
+#define VK_SPACE 32
+#define VK_PRIOR 33
+#define VK_NEXT 34
+#define VK_END 35
+#define VK_HOME 36
+#define VK_LEFT 37
+#define VK_UP 38
+#define VK_RIGHT 39
+#define VK_DOWN 40
+#define VK_SELECT 41
+#define VK_PRINT 42
+#define VK_EXECUTE 43
+#define VK_SNAPSHOT 44
+#define VK_INSERT 45
+#define VK_DELETE 46
+#define VK_HELP 47
+#define VK_LWIN 0x5B
+#define VK_RWIN 0x5C
+#define VK_APPS 0x5D
+#define VK_SLEEP 0x5F
+#define VK_NUMPAD0 0x60
+#define VK_NUMPAD1 0x61
+#define VK_NUMPAD2 0x62
+#define VK_NUMPAD3 0x63
+#define VK_NUMPAD4 0x64
+#define VK_NUMPAD5 0x65
+#define VK_NUMPAD6 0x66
+#define VK_NUMPAD7 0x67
+#define VK_NUMPAD8 0x68
+#define VK_NUMPAD9 0x69
+#define VK_MULTIPLY 0x6A
+#define VK_ADD 0x6B
+#define VK_SEPARATOR 0x6C
+#define VK_SUBTRACT 0x6D
+#define VK_DECIMAL 0x6E
+#define VK_DIVIDE 0x6F
+#define VK_F1 0x70
+#define VK_F2 0x71
+#define VK_F3 0x72
+#define VK_F4 0x73
+#define VK_F5 0x74
+#define VK_F6 0x75
+#define VK_F7 0x76
+#define VK_F8 0x77
+#define VK_F9 0x78
+#define VK_F10 0x79
+#define VK_F11 0x7A
+#define VK_F12 0x7B
+#define VK_F13 0x7C
+#define VK_F14 0x7D
+#define VK_F15 0x7E
+#define VK_F16 0x7F
+#define VK_F17 0x80
+#define VK_F18 0x81
+#define VK_F19 0x82
+#define VK_F20 0x83
+#define VK_F21 0x84
+#define VK_F22 0x85
+#define VK_F23 0x86
+#define VK_F24 0x87
+#define VK_NUMLOCK 0x90
+#define VK_SCROLL 0x91
+#define VK_LSHIFT 0xA0
+#define VK_RSHIFT 0xA1
+#define VK_LCONTROL 0xA2
+#define VK_RCONTROL 0xA3
+#define VK_LMENU 0xA4
+#define VK_RMENU 0xA5
+#if (_WIN32_WINNT >= 0x0500)
+#define VK_BROWSER_BACK 0xA6
+#define VK_BROWSER_FORWARD 0xA7
+#define VK_BROWSER_REFRESH 0xA8
+#define VK_BROWSER_STOP 0xA9
+#define VK_BROWSER_SEARCH 0xAA
+#define VK_BROWSER_FAVORITES 0xAB
+#define VK_BROWSER_HOME 0xAC
+#define VK_VOLUME_MUTE 0xAD
+#define VK_VOLUME_DOWN 0xAE
+#define VK_VOLUME_UP 0xAF
+#define VK_MEDIA_NEXT_TRACK 0xB0
+#define VK_MEDIA_PREV_TRACK 0xB1
+#define VK_MEDIA_STOP 0xB2
+#define VK_MEDIA_PLAY_PAUSE 0xB3
+#define VK_LAUNCH_MAIL 0xB4
+#define VK_LAUNCH_MEDIA_SELECT 0xB5
+#define VK_LAUNCH_APP1 0xB6
+#define VK_LAUNCH_APP2 0xB7
+#endif
+#define VK_OEM_1 0xBA
+#if (_WIN32_WINNT >= 0x0500)
+#define VK_OEM_PLUS 0xBB
+#define VK_OEM_COMMA 0xBC
+#define VK_OEM_MINUS 0xBD
+#define VK_OEM_PERIOD 0xBE
+#endif
+#define VK_OEM_2 0xBF
+#define VK_OEM_3 0xC0
+#define VK_OEM_4 0xDB
+#define VK_OEM_5 0xDC
+#define VK_OEM_6 0xDD
+#define VK_OEM_7 0xDE
+#define VK_OEM_8 0xDF
+#if (_WIN32_WINNT >= 0x0500)
+#define VK_OEM_102 0xE2
+#endif
+#define VK_PROCESSKEY 0xE5
+#if (_WIN32_WINNT >= 0x0500)
+#define VK_PACKET 0xE7
+#endif
+#define VK_ATTN 0xF6
+#define VK_CRSEL 0xF7
+#define VK_EXSEL 0xF8
+#define VK_EREOF 0xF9
+#define VK_PLAY 0xFA
+#define VK_ZOOM 0xFB
+#define VK_NONAME 0xFC
+#define VK_PA1 0xFD
+#define VK_OEM_CLEAR 0xFE
+#define TME_HOVER 1
+#define TME_LEAVE 2
+#define TME_QUERY 0x40000000
+#define TME_CANCEL 0x80000000
+#define HOVER_DEFAULT 0xFFFFFFFF
+#define MK_LBUTTON 1
+#define MK_RBUTTON 2
+#define MK_SHIFT 4
+#define MK_CONTROL 8
+#define MK_MBUTTON 16
+#if(_WIN32_WINNT >= 0x0500)
+#define MK_XBUTTON1 32
+#define MK_XBUTTON2 64
+#endif
+#define TPM_CENTERALIGN 4
+#define TPM_LEFTALIGN 0
+#define TPM_RIGHTALIGN 8
+#define TPM_LEFTBUTTON 0
+#define TPM_RIGHTBUTTON 2
+#define TPM_HORIZONTAL 0
+#define TPM_VERTICAL 64
+#define TPM_TOPALIGN 0
+#define TPM_VCENTERALIGN 16
+#define TPM_BOTTOMALIGN 32
+#define TPM_NONOTIFY 128
+#define TPM_RETURNCMD 256
+#if (_WIN32_WINNT >= 0x0500 || _WIN32_WINDOWS >= 0x0410)
+#define TPM_RECURSE 1
+#endif
+#define HELP_COMMAND 0x102
+#define HELP_CONTENTS 3
+#define HELP_CONTEXT 1
+#define HELP_CONTEXTPOPUP 8
+#define HELP_FORCEFILE 9
+#define HELP_HELPONHELP 4
+#define HELP_INDEX 3
+#define HELP_KEY 0x101
+#define HELP_MULTIKEY 0x201
+#define HELP_PARTIALKEY 0x105
+#define HELP_QUIT 2
+#define HELP_SETCONTENTS 5
+#define HELP_SETINDEX 5
+#define HELP_SETWINPOS 0x203
+#define HELP_CONTEXTMENU 0xa
+#define HELP_FINDER 0xb
+#define HELP_WM_HELP 0xc
+#define HELP_TCARD 0x8000
+#define HELP_TCARD_DATA 16
+#define HELP_TCARD_OTHER_CALLER 0x11
+#define IDH_NO_HELP 28440
+#define IDH_MISSING_CONTEXT 28441
+#define IDH_GENERIC_HELP_BUTTON 28442
+#define IDH_OK 28443
+#define IDH_CANCEL 28444
+#define IDH_HELP 28445
+#define LB_CTLCODE 0
+#define LB_OKAY 0
+#define LB_ERR (-1)
+#define LB_ERRSPACE (-2)
+#define CB_OKAY 0
+#define CB_ERR (-1)
+#define CB_ERRSPACE (-2)
+#define HIDE_WINDOW 0
+#define SHOW_OPENWINDOW 1
+#define SHOW_ICONWINDOW 2
+#define SHOW_FULLSCREEN 3
+#define SHOW_OPENNOACTIVATE 4
+#define SW_PARENTCLOSING 1
+#define SW_OTHERZOOM 2
+#define SW_PARENTOPENING 3
+#define SW_OTHERUNZOOM 4
+#define KF_EXTENDED 256
+#define KF_DLGMODE 2048
+#define KF_MENUMODE 4096
+#define KF_ALTDOWN 8192
+#define KF_REPEAT 16384
+#define KF_UP 32768
+#define WSF_VISIBLE 1
+#define PWR_OK 1
+#define PWR_FAIL (-1)
+#define PWR_SUSPENDREQUEST 1
+#define PWR_SUSPENDRESUME 2
+#define PWR_CRITICALRESUME 3
+#define NFR_ANSI 1
+#define NFR_UNICODE 2
+#define NF_QUERY 3
+#define NF_REQUERY 4
+#define MENULOOP_WINDOW 0
+#define MENULOOP_POPUP 1
+#define WMSZ_LEFT 1
+#define WMSZ_RIGHT 2
+#define WMSZ_TOP 3
+#define WMSZ_TOPLEFT 4
+#define WMSZ_TOPRIGHT 5
+#define WMSZ_BOTTOM 6
+#define WMSZ_BOTTOMLEFT 7
+#define WMSZ_BOTTOMRIGHT 8
+#define HTERROR (-2)
+#define HTTRANSPARENT (-1)
+#define HTNOWHERE 0
+#define HTCLIENT 1
+#define HTCAPTION 2
+#define HTSYSMENU 3
+#define HTGROWBOX 4
+#define HTSIZE 4
+#define HTMENU 5
+#define HTHSCROLL 6
+#define HTVSCROLL 7
+#define HTMINBUTTON 8
+#define HTMAXBUTTON 9
+#define HTREDUCE 8
+#define HTZOOM 9
+#define HTLEFT 10
+#define HTSIZEFIRST 10
+#define HTRIGHT 11
+#define HTTOP 12
+#define HTTOPLEFT 13
+#define HTTOPRIGHT 14
+#define HTBOTTOM 15
+#define HTBOTTOMLEFT 16
+#define HTBOTTOMRIGHT 17
+#define HTSIZELAST 17
+#define HTBORDER 18
+#define HTOBJECT 19
+#define HTCLOSE 20
+#define HTHELP 21
+#define MA_ACTIVATE 1
+#define MA_ACTIVATEANDEAT 2
+#define MA_NOACTIVATE 3
+#define MA_NOACTIVATEANDEAT 4
+#define SIZE_RESTORED 0
+#define SIZE_MINIMIZED 1
+#define SIZE_MAXIMIZED 2
+#define SIZE_MAXSHOW 3
+#define SIZE_MAXHIDE 4
+#define SIZENORMAL 0
+#define SIZEICONIC 1
+#define SIZEFULLSCREEN 2
+#define SIZEZOOMSHOW 3
+#define SIZEZOOMHIDE 4
+#define WVR_ALIGNTOP 16
+#define WVR_ALIGNLEFT 32
+#define WVR_ALIGNBOTTOM 64
+#define WVR_ALIGNRIGHT 128
+#define WVR_HREDRAW 256
+#define WVR_VREDRAW 512
+#define WVR_REDRAW (WVR_HREDRAW|WVR_VREDRAW)
+#define WVR_VALIDRECTS 1024
+#define PRF_CHECKVISIBLE 1
+#define PRF_NONCLIENT 2
+#define PRF_CLIENT 4
+#define PRF_ERASEBKGND 8
+#define PRF_CHILDREN 16
+#define PRF_OWNED 32
+#define IDANI_OPEN 1
+#define IDANI_CLOSE 2
+#define IDANI_CAPTION 3
+#define WPF_RESTORETOMAXIMIZED 2
+#define WPF_SETMINPOSITION 1
+#define ODT_MENU 1
+#define ODT_LISTBOX 2
+#define ODT_COMBOBOX 3
+#define ODT_BUTTON 4
+#define ODT_STATIC 5
+#define ODA_DRAWENTIRE 1
+#define ODA_SELECT 2
+#define ODA_FOCUS 4
+#define ODS_SELECTED 1
+#define ODS_GRAYED 2
+#define ODS_DISABLED 4
+#define ODS_CHECKED 8
+#define ODS_FOCUS 16
+#define ODS_DEFAULT 32
+#define ODS_COMBOBOXEDIT 4096
+#define IDHOT_SNAPWINDOW (-1)
+#define IDHOT_SNAPDESKTOP (-2)
+#define DBWF_LPARAMPOINTER 0x8000
+#define DLGWINDOWEXTRA 30
+#define MNC_IGNORE 0
+#define MNC_CLOSE 1
+#define MNC_EXECUTE 2
+#define MNC_SELECT 3
+#define DOF_EXECUTABLE 0x8001
+#define DOF_DOCUMENT 0x8002
+#define DOF_DIRECTORY 0x8003
+#define DOF_MULTIPLE 0x8004
+#define DOF_PROGMAN 1
+#define DOF_SHELLDATA 2
+#define DO_DROPFILE 0x454C4946
+#define DO_PRINTFILE 0x544E5250
+#define SW_SCROLLCHILDREN 1
+#define SW_INVALIDATE 2
+#define SW_ERASE 4
+#if (_WIN32_WINDOWS >= 0x0410 || _WIN32_WINNT >= 0x0500)
+#define SW_SMOOTHSCROLL 0x0010
+#endif /* (_WIN32_WINDOWS >= 0x0410 || _WIN32_WINNT >= 0x0500) */
+#define SC_SIZE 0xF000
+#define SC_MOVE 0xF010
+#define SC_MINIMIZE 0xF020
+#define SC_ICON 0xf020
+#define SC_MAXIMIZE 0xF030
+#define SC_ZOOM 0xF030
+#define SC_NEXTWINDOW 0xF040
+#define SC_PREVWINDOW 0xF050
+#define SC_CLOSE 0xF060
+#define SC_VSCROLL 0xF070
+#define SC_HSCROLL 0xF080
+#define SC_MOUSEMENU 0xF090
+#define SC_KEYMENU 0xF100
+#define SC_ARRANGE 0xF110
+#define SC_RESTORE 0xF120
+#define SC_TASKLIST 0xF130
+#define SC_SCREENSAVE 0xF140
+#define SC_HOTKEY 0xF150
+#define SC_DEFAULT 0xF160
+#define SC_MONITORPOWER 0xF170
+#define SC_CONTEXTHELP 0xF180
+#define SC_SEPARATOR 0xF00F
+#define EC_LEFTMARGIN 1
+#define EC_RIGHTMARGIN 2
+#define EC_USEFONTINFO 0xffff
+#define DC_HASDEFID 0x534B
+#define DLGC_WANTARROWS 1
+#define DLGC_WANTTAB 2
+#define DLGC_WANTALLKEYS 4
+#define DLGC_WANTMESSAGE 4
+#define DLGC_HASSETSEL 8
+#define DLGC_DEFPUSHBUTTON 16
+#define DLGC_UNDEFPUSHBUTTON 32
+#define DLGC_RADIOBUTTON 64
+#define DLGC_WANTCHARS 128
+#define DLGC_STATIC 256
+#define DLGC_BUTTON 0x2000
+#define LB_CTLCODE 0
+#define WA_INACTIVE 0
+#define WA_ACTIVE 1
+#define WA_CLICKACTIVE 2
+#define ICON_SMALL 0
+#define ICON_BIG 1
+#if (_WIN32_WINNT >= 0x0501)
+#define ICON_SMALL2 2
+#endif
+#define HBMMENU_CALLBACK ((HBITMAP) -1)
+#define HBMMENU_SYSTEM ((HBITMAP)1)
+#define HBMMENU_MBAR_RESTORE ((HBITMAP)2)
+#define HBMMENU_MBAR_MINIMIZE ((HBITMAP)3)
+#define HBMMENU_MBAR_CLOSE ((HBITMAP)5)
+#define HBMMENU_MBAR_CLOSE_D ((HBITMAP)6)
+#define HBMMENU_MBAR_MINIMIZE_D ((HBITMAP)7)
+#define HBMMENU_POPUP_CLOSE ((HBITMAP)8)
+#define HBMMENU_POPUP_RESTORE ((HBITMAP)9)
+#define HBMMENU_POPUP_MAXIMIZE ((HBITMAP)10)
+#define HBMMENU_POPUP_MINIMIZE ((HBITMAP)11)
+#define MOD_ALT 1
+#define MOD_CONTROL 2
+#define MOD_SHIFT 4
+#define MOD_WIN 8
+#define MOD_IGNORE_ALL_MODIFIER 1024
+#define MOD_ON_KEYUP 2048
+#define MOD_RIGHT 16384
+#define MOD_LEFT 32768
+#define LLKHF_EXTENDED (KF_EXTENDED >> 8)
+#define LLKHF_INJECTED 0x00000010
+#define LLKHF_ALTDOWN (KF_ALTDOWN >> 8)
+#define LLKHF_UP (KF_UP >> 8)
+#if (WINVER >= 0x0500)
+#define FLASHW_STOP 0
+#define FLASHW_CAPTION 1
+#define FLASHW_TRAY 2
+#define FLASHW_ALL (FLASHW_CAPTION|FLASHW_TRAY)
+#define FLASHW_TIMER 4
+#define FLASHW_TIMERNOFG 12
+#endif /* (WINVER >= 0x0500) */
+#define CURSOR_SHOWING 0x00000001
+#define WS_ACTIVECAPTION 0x00000001
+#if (_WIN32_WINNT >= 0x0403)
+#define INPUT_MOUSE 0x00000000
+#define INPUT_KEYBOARD 0x00000001
+#define INPUT_HARDWARE 0x00000002
+#endif /* (_WIN32_WINNT >= 0x0403) */
+#if (WINVER >= 0x0400)
+#define ENDSESSION_LOGOFF 0x80000000
+#endif
+#if (WINVER >= 0x0500)
+#define CHILDID_SELF 0
+#define OBJID_WINDOW 0x00000000
+#define OBJID_SYSMENU 0xFFFFFFFF
+#define OBJID_TITLEBAR 0xFFFFFFFE
+#define OBJID_MENU 0xFFFFFFFD
+#define OBJID_CLIENT 0xFFFFFFFC
+#define OBJID_VSCROLL 0xFFFFFFFB
+#define OBJID_HSCROLL 0xFFFFFFFA
+#define OBJID_SIZEGRIP 0xFFFFFFF9
+#define OBJID_CARET 0xFFFFFFF8
+#define OBJID_CURSOR 0xFFFFFFF7
+#define OBJID_ALERT 0xFFFFFFF6
+#define OBJID_SOUND 0xFFFFFFF5
+#define GUI_CARETBLINKING 0x00000001
+#define GUI_INMOVESIZE 0x00000002
+#define GUI_INMENUMODE 0x00000004
+#define GUI_SYSTEMMENUMODE 0x00000008
+#define GUI_POPUPMENUMODE 0x00000010
+#if (_WIN32_WINNT >= 0x0501)
+#define GUI_16BITTASK 0x00000020
+#endif
+#define WINEVENT_OUTOFCONTEXT 0x0000
+#define WINEVENT_SKIPOWNTHREAD 0x0001
+#define WINEVENT_SKIPOWNPROCESS 0x0002
+#define WINEVENT_INCONTEXT 0x0004
+#define AW_HOR_POSITIVE 0x00000001
+#define AW_HOR_NEGATIVE 0x00000002
+#define AW_VER_POSITIVE 0x00000004
+#define AW_VER_NEGATIVE 0x00000008
+#define AW_CENTER 0x00000010
+#define AW_HIDE 0x00010000
+#define AW_ACTIVATE 0x00020000
+#define AW_SLIDE 0x00040000
+#define AW_BLEND 0x00080000
+#define DEVICE_NOTIFY_WINDOW_HANDLE 0x00000000
+#define DEVICE_NOTIFY_SERVICE_HANDLE 0x00000001
+#if (_WIN32_WINNT >= 0x0501)
+#define DEVICE_NOTIFY_ALL_INTERFACE_CLASSES 0x00000004
+#endif
+#define EVENT_MIN 0x00000001
+#define EVENT_SYSTEM_SOUND 0x00000001
+#define EVENT_SYSTEM_ALERT 0x00000002
+#define EVENT_SYSTEM_FOREGROUND 0x00000003
+#define EVENT_SYSTEM_MENUSTART 0x00000004
+#define EVENT_SYSTEM_MENUEND 0x00000005
+#define EVENT_SYSTEM_MENUPOPUPSTART 0x00000006
+#define EVENT_SYSTEM_MENUPOPUPEND 0x00000007
+#define EVENT_SYSTEM_CAPTURESTART 0x00000008
+#define EVENT_SYSTEM_CAPTUREEND 0x00000009
+#define EVENT_SYSTEM_MOVESIZESTART 0x0000000a
+#define EVENT_SYSTEM_MOVESIZEEND 0x0000000b
+#define EVENT_SYSTEM_CONTEXTHELPSTART 0x0000000c
+#define EVENT_SYSTEM_CONTEXTHELPEND 0x0000000d
+#define EVENT_SYSTEM_DRAGDROPSTART 0x0000000e
+#define EVENT_SYSTEM_DRAGDROPEND 0x0000000f
+#define EVENT_SYSTEM_DIALOGSTART 0x00000010
+#define EVENT_SYSTEM_DIALOGEND 0x00000011
+#define EVENT_SYSTEM_SCROLLINGSTART 0x00000012
+#define EVENT_SYSTEM_SCROLLINGEND 0x00000013
+#define EVENT_SYSTEM_SWITCHSTART 0x00000014
+#define EVENT_SYSTEM_SWITCHEND 0x00000015
+#define EVENT_SYSTEM_MINIMIZESTART 0x00000016
+#define EVENT_SYSTEM_MINIMIZEEND 0x00000017
+#define EVENT_OBJECT_CREATE 0x00008000
+#define EVENT_OBJECT_DESTROY 0x00008001
+#define EVENT_OBJECT_SHOW 0x00008002
+#define EVENT_OBJECT_HIDE 0x00008003
+#define EVENT_OBJECT_REORDER 0x00008004
+#define EVENT_OBJECT_FOCUS 0x00008005
+#define EVENT_OBJECT_SELECTION 0x00008006
+#define EVENT_OBJECT_SELECTIONADD 0x00008007
+#define EVENT_OBJECT_SELECTIONREMOVE 0x00008008
+#define EVENT_OBJECT_SELECTIONWITHIN 0x00008009
+#define EVENT_OBJECT_STATECHANGE 0x0000800a
+#define EVENT_OBJECT_LOCATIONCHANGE 0x0000800b
+#define EVENT_OBJECT_NAMECHANGE 0x0000800c
+#define EVENT_OBJECT_DESCRIPTIONCHANGE 0x0000800d
+#define EVENT_OBJECT_VALUECHANGE 0x0000800e
+#define EVENT_OBJECT_PARENTCHANGE 0x0000800f
+#define EVENT_OBJECT_HELPCHANGE 0x00008010
+#define EVENT_OBJECT_DEFACTIONCHANGE 0x00008011
+#define EVENT_OBJECT_ACCELERATORCHANGE 0x00008012
+#if (_WIN32_WINNT >= 0x0501)
+#define EVENT_CONSOLE_CARET 0x00004001
+#define CONSOLE_CARET_SELECTION 0x00000001
+#define CONSOLE_CARET_VISIBLE 0x00000002
+#define EVENT_CONSOLE_UPDATE_REGION 0x00004002
+#define EVENT_CONSOLE_UPDATE_SIMPLE 0x00004003
+#define EVENT_CONSOLE_UPDATE_SCROLL 0x00004004
+#define EVENT_CONSOLE_LAYOUT 0x00004005
+#define EVENT_CONSOLE_START_APPLICATION 0x00004006
+#define CONSOLE_APPLICATION_16BIT 0x00000001
+#define EVENT_CONSOLE_END_APPLICATION 0x00004007
+#endif /* (_WIN32_WINNT >= 0x0501) */
+#define EVENT_MAX 0x7fffffff
+#endif /* (WINVER >= 0x0500) */
+#if (_WIN32_WINNT >= 0x0500 || _WIN32_WINDOWS >= 0x0490)
+#define ASFW_ANY ((DWORD)-1)
+#define LSFW_LOCK 1
+#define LSFW_UNLOCK 2
+#endif
+#if (_WIN32_WINNT >= 0x0500)
+#define LWA_COLORKEY 0x01
+#define LWA_ALPHA 0x02
+#define ULW_COLORKEY 0x01
+#define ULW_ALPHA 0x02
+#define ULW_OPAQUE 0x04
+#endif
+#define GA_PARENT 1
+#define GA_ROOT 2
+#define GA_ROOTOWNER 3
+#if (_WIN32_WINNT >= 0x0500 || _WIN32_WINDOWS >= 0x0410)
+#define MONITOR_DEFAULTTONULL 0
+#define MONITOR_DEFAULTTOPRIMARY 1
+#define MONITOR_DEFAULTTONEAREST 2
+#define MONITORINFOF_PRIMARY 1
+#define EDS_RAWMODE 0x00000002
+#define ISMEX_NOSEND 0x00000000
+#define ISMEX_CALLBACK 0x00000004
+#define ISMEX_NOTIFY 0x00000002
+#define ISMEX_REPLIED 0x00000008
+#define ISMEX_SEND 0x00000001
+#endif
+#if (_WIN32_WINNT >= 0x0500)
+#define GR_GDIOBJECTS 0
+#define GR_USEROBJECTS 1
+#endif
+#if (_WIN32_WINNT >= 0x0500 || _WIN32_WINDOWS >= 0x0490)
+#define GMMP_USE_DISPLAY_POINTS 1
+#define GMMP_USE_HIGH_RESOLUTION_POINTS 2
+#endif
+#if (_WIN32_WINNT >= 0x0500)
+#define XBUTTON1 0x0001
+#define XBUTTON2 0x0002
+#endif
+#if (_WIN32_WINNT >= 0x0501)
+#define FE_FONTSMOOTHINGSTANDARD 0x0001
+#define FE_FONTSMOOTHINGCLEARTYPE 0x0002
+#define PW_CLIENTONLY 0x00000001
+#define RIM_INPUT 0x00000000
+#define RIM_INPUTSINK 0x00000001
+#define RIM_TYPEMOUSE 0x00000000
+#define RIM_TYPEKEYBOARD 0x00000001
+#define RIM_TYPEHID 0x00000002
+#define MOUSE_MOVE_RELATIVE 0x00000000
+#define MOUSE_MOVE_ABSOLUTE 0x00000001
+#define MOUSE_VIRTUAL_DESKTOP 0x00000002
+#define MOUSE_ATTRIBUTES_CHANGED 0x00000004
+#define RI_MOUSE_LEFT_BUTTON_DOWN 0x0001
+#define RI_MOUSE_LEFT_BUTTON_UP 0x0002
+#define RI_MOUSE_RIGHT_BUTTON_DOWN 0x0004
+#define RI_MOUSE_RIGHT_BUTTON_UP 0x0008
+#define RI_MOUSE_MIDDLE_BUTTON_DOWN 0x0010
+#define RI_MOUSE_MIDDLE_BUTTON_UP 0x0020
+#define RI_MOUSE_BUTTON_1_DOWN RI_MOUSE_LEFT_BUTTON_DOWN
+#define RI_MOUSE_BUTTON_1_UP RI_MOUSE_LEFT_BUTTON_UP
+#define RI_MOUSE_BUTTON_2_DOWN RI_MOUSE_RIGHT_BUTTON_DOWN
+#define RI_MOUSE_BUTTON_2_UP RI_MOUSE_RIGHT_BUTTON_UP
+#define RI_MOUSE_BUTTON_3_DOWN RI_MOUSE_MIDDLE_BUTTON_DOWN
+#define RI_MOUSE_BUTTON_3_UP RI_MOUSE_MIDDLE_BUTTON_UP
+#define RI_MOUSE_BUTTON_4_DOWN 0x0040
+#define RI_MOUSE_BUTTON_4_UP 0x0080
+#define RI_MOUSE_BUTTON_5_DOWN 0x0100
+#define RI_MOUSE_BUTTON_5_UP 0x0200
+#define RI_MOUSE_WHEEL 0x0400
+#define KEYBOARD_OVERRUN_MAKE_CODE 0x00ff
+#define RI_KEY_MAKE 0x0000
+#define RI_KEY_BREAK 0x0001
+#define RI_KEY_E0 0x0002
+#define RI_KEY_E1 0x0004
+#define RI_KEY_TERMSRV_SET_LED 0x0008
+#define RI_KEY_TERMSRV_SHADOW 0x0010
+#define RID_INPUT 0x10000003
+#define RID_HEADER 0x10000005
+#define RIDI_PREPARSEDDATA 0x20000005
+#define RIDI_DEVICENAME 0x20000007
+#define RIDI_DEVICEINFO 0x2000000b
+#define RIDEV_REMOVE 0x00000001
+#define RIDEV_EXCLUDE 0x00000010
+#define RIDEV_PAGEONLY 0x00000020
+#define RIDEV_NOLEGACY 0x00000030
+#define RIDEV_INPUTSINK 0x00000100
+#define RIDEV_CAPTUREMOUSE 0x00000200
+#define RIDEV_NOHOTKEYS 0x00000200
+#define RIDEV_APPKEYS 0x00000400
+#endif
+
+#if (_WIN32_WINNT >= 0x0601)
+#define TOUCHEVENTF_DOWN 0x0001
+#define TOUCHEVENTF_INRANGE 0x0008
+#define TOUCHEVENTF_MOVE 0x0002
+#define TOUCHEVENTF_NOCOALESCE 0x0020
+#define TOUCHEVENTF_PALM 0x0080
+#define TOUCHEVENTF_PEN 0x0040
+#define TOUCHEVENTF_PRIMARY 0x0010
+#define TOUCHEVENTF_UP 0x0004
+
+#define TOUCHEVENTMASKF_CONTACTAREA 0x0004
+#define TOUCHEVENTMASKF_EXTRAINFO 0x0002
+#define TOUCHEVENTMASKF_TIMEFROMSYSTEM 0x0001
+#endif
+
+#ifndef RC_INVOKED
+typedef BOOL(CALLBACK *DLGPROC)(HWND,UINT,WPARAM,LPARAM);
+typedef VOID(CALLBACK *TIMERPROC)(HWND,UINT,UINT,DWORD);
+typedef BOOL(CALLBACK *GRAYSTRINGPROC)(HDC,LPARAM,int);
+typedef LRESULT(CALLBACK *HOOKPROC)(int,WPARAM,LPARAM);
+typedef BOOL(CALLBACK *PROPENUMPROCA)(HWND,LPCSTR,HANDLE);
+typedef BOOL(CALLBACK *PROPENUMPROCW)(HWND,LPCWSTR,HANDLE);
+typedef BOOL(CALLBACK *PROPENUMPROCEXA)(HWND,LPSTR,HANDLE,DWORD);
+typedef BOOL(CALLBACK *PROPENUMPROCEXW)(HWND,LPWSTR,HANDLE,DWORD);
+typedef int(CALLBACK *EDITWORDBREAKPROCA)(LPSTR,int,int,int);
+typedef int(CALLBACK *EDITWORDBREAKPROCW)(LPWSTR,int,int,int);
+typedef LRESULT(CALLBACK *WNDPROC)(HWND,UINT,WPARAM,LPARAM);
+typedef BOOL(CALLBACK *DRAWSTATEPROC)(HDC,LPARAM,WPARAM,int,int);
+typedef BOOL(CALLBACK *WNDENUMPROC)(HWND,LPARAM);
+typedef BOOL(CALLBACK *ENUMWINDOWSPROC)(HWND,LPARAM);
+typedef BOOL(CALLBACK* MONITORENUMPROC)(HMONITOR,HDC,LPRECT,LPARAM);
+typedef BOOL(CALLBACK *NAMEENUMPROCA)(LPSTR,LPARAM);
+typedef BOOL(CALLBACK *NAMEENUMPROCW)(LPWSTR,LPARAM);
+typedef NAMEENUMPROCA DESKTOPENUMPROCA;
+typedef NAMEENUMPROCW DESKTOPENUMPROCW;
+typedef NAMEENUMPROCA WINSTAENUMPROCA;
+typedef NAMEENUMPROCW WINSTAENUMPROCW;
+typedef void(CALLBACK *SENDASYNCPROC)(HWND,UINT,DWORD,LRESULT);
+DECLARE_HANDLE(HHOOK);
+DECLARE_HANDLE(HDWP);
+DECLARE_HANDLE(HDEVNOTIFY);
+typedef struct tagMENUGETOBJECTINFO {
+ DWORD dwFlags;
+ UINT uPos;
+ HMENU hmenu;
+ PVOID riid;
+ PVOID pvObj;
+} MENUGETOBJECTINFO, *PMENUGETOBJECTINFO;
+typedef struct tagACCEL {
+ BYTE fVirt;
+ WORD key;
+ WORD cmd;
+} ACCEL,*LPACCEL;
+typedef struct tagACCESSTIMEOUT {
+ UINT cbSize;
+ DWORD dwFlags;
+ DWORD iTimeOutMSec;
+} ACCESSTIMEOUT, *LPACCESSTIMEOUT;
+typedef struct tagANIMATIONINFO {
+ UINT cbSize;
+ int iMinAnimate;
+} ANIMATIONINFO,*LPANIMATIONINFO;
+typedef struct tagCREATESTRUCTA {
+ LPVOID lpCreateParams;
+ HINSTANCE hInstance;
+ HMENU hMenu;
+ HWND hwndParent;
+ int cy;
+ int cx;
+ int y;
+ int x;
+ LONG style;
+ LPCSTR lpszName;
+ LPCSTR lpszClass;
+ DWORD dwExStyle;
+} CREATESTRUCTA,*LPCREATESTRUCTA;
+typedef struct tagCREATESTRUCTW {
+ LPVOID lpCreateParams;
+ HINSTANCE hInstance;
+ HMENU hMenu;
+ HWND hwndParent;
+ int cy;
+ int cx;
+ int y;
+ int x;
+ LONG style;
+ LPCWSTR lpszName;
+ LPCWSTR lpszClass;
+ DWORD dwExStyle;
+} CREATESTRUCTW,*LPCREATESTRUCTW;
+typedef struct tagCBT_CREATEWNDA {
+ LPCREATESTRUCTA lpcs;
+ HWND hwndInsertAfter;
+} CBT_CREATEWNDA, *LPCBT_CREATEWNDA;
+typedef struct tagCBT_CREATEWNDW {
+ LPCREATESTRUCTW lpcs;
+ HWND hwndInsertAfter;
+} CBT_CREATEWNDW, *LPCBT_CREATEWNDW;
+typedef struct tagCBTACTIVATESTRUCT {
+ BOOL fMouse;
+ HWND hWndActive;
+} CBTACTIVATESTRUCT,*LPCBTACTIVATESTRUCT;
+typedef struct tagCLIENTCREATESTRUCT {
+ HANDLE hWindowMenu;
+ UINT idFirstChild;
+} CLIENTCREATESTRUCT,*LPCLIENTCREATESTRUCT;
+typedef struct tagCOMPAREITEMSTRUCT {
+ UINT CtlType;
+ UINT CtlID;
+ HWND hwndItem;
+ UINT itemID1;
+ DWORD itemData1;
+ UINT itemID2;
+ DWORD itemData2;
+ DWORD dwLocaleId;
+} COMPAREITEMSTRUCT,*LPCOMPAREITEMSTRUCT;
+typedef struct tagCOPYDATASTRUCT {
+ DWORD dwData;
+ DWORD cbData;
+ PVOID lpData;
+} COPYDATASTRUCT,*PCOPYDATASTRUCT;
+typedef struct tagCURSORSHAPE {
+ int xHotSpot;
+ int yHotSpot;
+ int cx;
+ int cy;
+ int cbWidth;
+ BYTE Planes;
+ BYTE BitsPixel;
+} CURSORSHAPE,*LPCURSORSHAPE;
+typedef struct tagCWPRETSTRUCT {
+ LRESULT lResult;
+ LPARAM lParam;
+ WPARAM wParam;
+ DWORD message;
+ HWND hwnd;
+} CWPRETSTRUCT;
+typedef struct tagCWPSTRUCT {
+ LPARAM lParam;
+ WPARAM wParam;
+ UINT message;
+ HWND hwnd;
+} CWPSTRUCT,*PCWPSTRUCT;
+typedef struct tagDEBUGHOOKINFO {
+ DWORD idThread;
+ DWORD idThreadInstaller;
+ LPARAM lParam;
+ WPARAM wParam;
+ int code;
+} DEBUGHOOKINFO,*PDEBUGHOOKINFO,*LPDEBUGHOOKINFO;
+typedef struct tagDELETEITEMSTRUCT {
+ UINT CtlType;
+ UINT CtlID;
+ UINT itemID;
+ HWND hwndItem;
+ UINT itemData;
+} DELETEITEMSTRUCT,*PDELETEITEMSTRUCT,*LPDELETEITEMSTRUCT;
+#pragma pack(push,2)
+typedef struct {
+ DWORD style;
+ DWORD dwExtendedStyle;
+ short x;
+ short y;
+ short cx;
+ short cy;
+ WORD id;
+} DLGITEMTEMPLATE,*LPDLGITEMTEMPLATE;
+typedef struct {
+ DWORD style;
+ DWORD dwExtendedStyle;
+ WORD cdit;
+ short x;
+ short y;
+ short cx;
+ short cy;
+} DLGTEMPLATE,*LPDLGTEMPLATE,*LPDLGTEMPLATEA,*LPDLGTEMPLATEW;
+typedef const DLGTEMPLATE *LPCDLGTEMPLATE;
+#pragma pack(pop)
+typedef struct tagDRAWITEMSTRUCT {
+ UINT CtlType;
+ UINT CtlID;
+ UINT itemID;
+ UINT itemAction;
+ UINT itemState;
+ HWND hwndItem;
+ HDC hDC;
+ RECT rcItem;
+ DWORD itemData;
+} DRAWITEMSTRUCT,*LPDRAWITEMSTRUCT,*PDRAWITEMSTRUCT;
+typedef struct {
+ UINT cbSize;
+ int iTabLength;
+ int iLeftMargin;
+ int iRightMargin;
+ UINT uiLengthDrawn;
+} DRAWTEXTPARAMS,*LPDRAWTEXTPARAMS;
+typedef struct tagPAINTSTRUCT {
+ HDC hdc;
+ BOOL fErase;
+ RECT rcPaint;
+ BOOL fRestore;
+ BOOL fIncUpdate;
+ BYTE rgbReserved[32];
+} PAINTSTRUCT,*LPPAINTSTRUCT;
+typedef struct tagMSG {
+ HWND hwnd;
+ UINT message;
+ WPARAM wParam;
+ LPARAM lParam;
+ DWORD time;
+ POINT pt;
+} MSG,*LPMSG,*PMSG;
+typedef struct _ICONINFO {
+ BOOL fIcon;
+ DWORD xHotspot;
+ DWORD yHotspot;
+ HBITMAP hbmMask;
+ HBITMAP hbmColor;
+} ICONINFO,*PICONINFO;
+typedef struct tagNMHDR {
+ HWND hwndFrom;
+ UINT idFrom;
+ UINT code;
+} NMHDR,*LPNMHDR;
+typedef struct _WNDCLASSA {
+ UINT style;
+ WNDPROC lpfnWndProc;
+ int cbClsExtra;
+ int cbWndExtra;
+ HINSTANCE hInstance;
+ HICON hIcon;
+ HCURSOR hCursor;
+ HBRUSH hbrBackground;
+ LPCSTR lpszMenuName;
+ LPCSTR lpszClassName;
+} WNDCLASSA,*LPWNDCLASSA,*PWNDCLASSA;
+typedef struct _WNDCLASSW {
+ UINT style;
+ WNDPROC lpfnWndProc;
+ int cbClsExtra;
+ int cbWndExtra;
+ HINSTANCE hInstance;
+ HICON hIcon;
+ HCURSOR hCursor;
+ HBRUSH hbrBackground;
+ LPCWSTR lpszMenuName;
+ LPCWSTR lpszClassName;
+} WNDCLASSW,*LPWNDCLASSW,*PWNDCLASSW;
+typedef struct _WNDCLASSEXA {
+ UINT cbSize;
+ UINT style;
+ WNDPROC lpfnWndProc;
+ int cbClsExtra;
+ int cbWndExtra;
+ HINSTANCE hInstance;
+ HICON hIcon;
+ HCURSOR hCursor;
+ HBRUSH hbrBackground;
+ LPCSTR lpszMenuName;
+ LPCSTR lpszClassName;
+ HICON hIconSm;
+} WNDCLASSEXA,*LPWNDCLASSEXA,*PWNDCLASSEXA;
+typedef struct _WNDCLASSEXW {
+ UINT cbSize;
+ UINT style;
+ WNDPROC lpfnWndProc;
+ int cbClsExtra;
+ int cbWndExtra;
+ HINSTANCE hInstance;
+ HICON hIcon;
+ HCURSOR hCursor;
+ HBRUSH hbrBackground;
+ LPCWSTR lpszMenuName;
+ LPCWSTR lpszClassName;
+ HICON hIconSm;
+} WNDCLASSEXW,*LPWNDCLASSEXW,*PWNDCLASSEXW;
+typedef struct tagMENUITEMINFOA {
+ UINT cbSize;
+ UINT fMask;
+ UINT fType;
+ UINT fState;
+ UINT wID;
+ HMENU hSubMenu;
+ HBITMAP hbmpChecked;
+ HBITMAP hbmpUnchecked;
+ DWORD dwItemData;
+ LPSTR dwTypeData;
+ UINT cch;
+#if (_WIN32_WINNT >= 0x0500)
+ HBITMAP hbmpItem;
+#endif
+} MENUITEMINFOA,*LPMENUITEMINFOA;
+typedef const MENUITEMINFOA *LPCMENUITEMINFOA;
+typedef struct tagMENUITEMINFOW {
+ UINT cbSize;
+ UINT fMask;
+ UINT fType;
+ UINT fState;
+ UINT wID;
+ HMENU hSubMenu;
+ HBITMAP hbmpChecked;
+ HBITMAP hbmpUnchecked;
+ DWORD dwItemData;
+ LPWSTR dwTypeData;
+ UINT cch;
+#if (_WIN32_WINNT >= 0x0500)
+ HBITMAP hbmpItem;
+#endif
+} MENUITEMINFOW,*LPMENUITEMINFOW;
+typedef const MENUITEMINFOW *LPCMENUITEMINFOW;
+typedef struct tagSCROLLINFO {
+ UINT cbSize;
+ UINT fMask;
+ int nMin;
+ int nMax;
+ UINT nPage;
+ int nPos;
+ int nTrackPos;
+} SCROLLINFO,*LPSCROLLINFO;
+typedef const SCROLLINFO *LPCSCROLLINFO;
+typedef struct _WINDOWPLACEMENT {
+ UINT length;
+ UINT flags;
+ UINT showCmd;
+ POINT ptMinPosition;
+ POINT ptMaxPosition;
+ RECT rcNormalPosition;
+} WINDOWPLACEMENT,*LPWINDOWPLACEMENT,*PWINDOWPLACEMENT;
+typedef struct {
+ WORD versionNumber;
+ WORD offset;
+} MENUITEMTEMPLATEHEADER;
+typedef struct {
+ WORD mtOption;
+ WORD mtID;
+ WCHAR mtString[1];
+} MENUITEMTEMPLATE;
+typedef void MENUTEMPLATE,MENUTEMPLATEA,MENUTEMPLATEW,*LPMENUTEMPLATEA,*LPMENUTEMPLATEW,*LPMENUTEMPLATE;
+typedef struct tagHELPINFO {
+ UINT cbSize;
+ int iContextType;
+ int iCtrlId;
+ HANDLE hItemHandle;
+ DWORD dwContextId;
+ POINT MousePos;
+} HELPINFO,*LPHELPINFO;
+typedef void(CALLBACK *MSGBOXCALLBACK)(LPHELPINFO);
+typedef struct {
+ UINT cbSize;
+ HWND hwndOwner;
+ HINSTANCE hInstance;
+ LPCSTR lpszText;
+ LPCSTR lpszCaption;
+ DWORD dwStyle;
+ LPCSTR lpszIcon;
+ DWORD dwContextHelpId;
+ MSGBOXCALLBACK lpfnMsgBoxCallback;
+ DWORD dwLanguageId;
+} MSGBOXPARAMSA,*PMSGBOXPARAMSA,*LPMSGBOXPARAMSA;
+typedef struct {
+ UINT cbSize;
+ HWND hwndOwner;
+ HINSTANCE hInstance;
+ LPCWSTR lpszText;
+ LPCWSTR lpszCaption;
+ DWORD dwStyle;
+ LPCWSTR lpszIcon;
+ DWORD dwContextHelpId;
+ MSGBOXCALLBACK lpfnMsgBoxCallback;
+ DWORD dwLanguageId;
+} MSGBOXPARAMSW,*PMSGBOXPARAMSW,*LPMSGBOXPARAMSW;
+typedef struct tagUSEROBJECTFLAGS {
+ BOOL fInherit;
+ BOOL fReserved;
+ DWORD dwFlags;
+} USEROBJECTFLAGS;
+typedef struct tagFILTERKEYS {
+ UINT cbSize;
+ DWORD dwFlags;
+ DWORD iWaitMSec;
+ DWORD iDelayMSec;
+ DWORD iRepeatMSec;
+ DWORD iBounceMSec;
+} FILTERKEYS;
+typedef struct tagHIGHCONTRASTA {
+ UINT cbSize;
+ DWORD dwFlags;
+ LPSTR lpszDefaultScheme;
+} HIGHCONTRASTA,*LPHIGHCONTRASTA;
+typedef struct tagHIGHCONTRASTW {
+ UINT cbSize;
+ DWORD dwFlags;
+ LPWSTR lpszDefaultScheme;
+} HIGHCONTRASTW,*LPHIGHCONTRASTW;
+#ifndef NOGDI
+typedef struct tagICONMETRICSA {
+ UINT cbSize;
+ int iHorzSpacing;
+ int iVertSpacing;
+ int iTitleWrap;
+ LOGFONTA lfFont;
+} ICONMETRICSA,*LPICONMETRICSA;
+typedef struct tagICONMETRICSW {
+ UINT cbSize;
+ int iHorzSpacing;
+ int iVertSpacing;
+ int iTitleWrap;
+ LOGFONTW lfFont;
+} ICONMETRICSW,*LPICONMETRICSW;
+#endif /* NOGDI */
+typedef struct tagMINIMIZEDMETRICS {
+ UINT cbSize;
+ int iWidth;
+ int iHorzGap;
+ int iVertGap;
+ int iArrange;
+} MINIMIZEDMETRICS,*LPMINIMIZEDMETRICS;
+typedef struct tagMOUSEKEYS{
+ UINT cbSize;
+ DWORD dwFlags;
+ DWORD iMaxSpeed;
+ DWORD iTimeToMaxSpeed;
+ DWORD iCtrlSpeed;
+ DWORD dwReserved1;
+ DWORD dwReserved2;
+} MOUSEKEYS,*LPMOUSEKEYS;
+#ifndef NOGDI
+typedef struct tagNONCLIENTMETRICSA {
+ UINT cbSize;
+ int iBorderWidth;
+ int iScrollWidth;
+ int iScrollHeight;
+ int iCaptionWidth;
+ int iCaptionHeight;
+ LOGFONTA lfCaptionFont;
+ int iSmCaptionWidth;
+ int iSmCaptionHeight;
+ LOGFONTA lfSmCaptionFont;
+ int iMenuWidth;
+ int iMenuHeight;
+ LOGFONTA lfMenuFont;
+ LOGFONTA lfStatusFont;
+ LOGFONTA lfMessageFont;
+} NONCLIENTMETRICSA,*LPNONCLIENTMETRICSA;
+typedef struct tagNONCLIENTMETRICSW {
+ UINT cbSize;
+ int iBorderWidth;
+ int iScrollWidth;
+ int iScrollHeight;
+ int iCaptionWidth;
+ int iCaptionHeight;
+ LOGFONTW lfCaptionFont;
+ int iSmCaptionWidth;
+ int iSmCaptionHeight;
+ LOGFONTW lfSmCaptionFont;
+ int iMenuWidth;
+ int iMenuHeight;
+ LOGFONTW lfMenuFont;
+ LOGFONTW lfStatusFont;
+ LOGFONTW lfMessageFont;
+} NONCLIENTMETRICSW,*LPNONCLIENTMETRICSW;
+#endif
+typedef struct tagSERIALKEYSA {
+ UINT cbSize;
+ DWORD dwFlags;
+ LPSTR lpszActivePort;
+ LPSTR lpszPort;
+ UINT iBaudRate;
+ UINT iPortState;
+ UINT iActive;
+} SERIALKEYSA,*LPSERIALKEYSA;
+typedef struct tagSERIALKEYSW {
+ UINT cbSize;
+ DWORD dwFlags;
+ LPWSTR lpszActivePort;
+ LPWSTR lpszPort;
+ UINT iBaudRate;
+ UINT iPortState;
+ UINT iActive;
+} SERIALKEYSW,*LPSERIALKEYSW;
+typedef struct tagSOUNDSENTRYA {
+ UINT cbSize;
+ DWORD dwFlags;
+ DWORD iFSTextEffect;
+ DWORD iFSTextEffectMSec;
+ DWORD iFSTextEffectColorBits;
+ DWORD iFSGrafEffect;
+ DWORD iFSGrafEffectMSec;
+ DWORD iFSGrafEffectColor;
+ DWORD iWindowsEffect;
+ DWORD iWindowsEffectMSec;
+ LPSTR lpszWindowsEffectDLL;
+ DWORD iWindowsEffectOrdinal;
+} SOUNDSENTRYA,*LPSOUNDSENTRYA;
+typedef struct tagSOUNDSENTRYW {
+ UINT cbSize;
+ DWORD dwFlags;
+ DWORD iFSTextEffect;
+ DWORD iFSTextEffectMSec;
+ DWORD iFSTextEffectColorBits;
+ DWORD iFSGrafEffect;
+ DWORD iFSGrafEffectMSec;
+ DWORD iFSGrafEffectColor;
+ DWORD iWindowsEffect;
+ DWORD iWindowsEffectMSec;
+ LPWSTR lpszWindowsEffectDLL;
+ DWORD iWindowsEffectOrdinal;
+} SOUNDSENTRYW,*LPSOUNDSENTRYW;
+typedef struct tagSTICKYKEYS {
+ DWORD cbSize;
+ DWORD dwFlags;
+} STICKYKEYS,*LPSTICKYKEYS;
+typedef struct tagTOGGLEKEYS {
+ DWORD cbSize;
+ DWORD dwFlags;
+} TOGGLEKEYS;
+typedef struct tagMOUSEHOOKSTRUCT {
+ POINT pt;
+ HWND hwnd;
+ UINT wHitTestCode;
+ DWORD dwExtraInfo;
+} MOUSEHOOKSTRUCT,*LPMOUSEHOOKSTRUCT,*PMOUSEHOOKSTRUCT;
+typedef struct tagTRACKMOUSEEVENT {
+ DWORD cbSize;
+ DWORD dwFlags;
+ HWND hwndTrack;
+ DWORD dwHoverTime;
+} TRACKMOUSEEVENT,*LPTRACKMOUSEEVENT;
+typedef struct tagTPMPARAMS {
+ UINT cbSize;
+ RECT rcExclude;
+} TPMPARAMS,*LPTPMPARAMS;
+typedef struct tagEVENTMSG {
+ UINT message;
+ UINT paramL;
+ UINT paramH;
+ DWORD time;
+ HWND hwnd;
+} EVENTMSG,*PEVENTMSGMSG,*LPEVENTMSGMSG,*PEVENTMSG,*LPEVENTMSG;
+typedef struct _WINDOWPOS {
+ HWND hwnd;
+ HWND hwndInsertAfter;
+ int x;
+ int y;
+ int cx;
+ int cy;
+ UINT flags;
+} WINDOWPOS,*PWINDOWPOS,*LPWINDOWPOS;
+typedef struct tagNCCALCSIZE_PARAMS {
+ RECT rgrc[3];
+ PWINDOWPOS lppos;
+} NCCALCSIZE_PARAMS, *LPNCCALCSIZE_PARAMS;
+typedef struct tagMDICREATESTRUCTA {
+ LPCSTR szClass;
+ LPCSTR szTitle;
+ HANDLE hOwner;
+ int x;
+ int y;
+ int cx;
+ int cy;
+ DWORD style;
+ LPARAM lParam;
+} MDICREATESTRUCTA,*LPMDICREATESTRUCTA;
+typedef struct tagMDICREATESTRUCTW {
+ LPCWSTR szClass;
+ LPCWSTR szTitle;
+ HANDLE hOwner;
+ int x;
+ int y;
+ int cx;
+ int cy;
+ DWORD style;
+ LPARAM lParam;
+} MDICREATESTRUCTW,*LPMDICREATESTRUCTW;
+typedef struct tagMINMAXINFO {
+ POINT ptReserved;
+ POINT ptMaxSize;
+ POINT ptMaxPosition;
+ POINT ptMinTrackSize;
+ POINT ptMaxTrackSize;
+} MINMAXINFO,*PMINMAXINFO,*LPMINMAXINFO;
+typedef struct tagMDINEXTMENU {
+ HMENU hmenuIn;
+ HMENU hmenuNext;
+ HWND hwndNext;
+} MDINEXTMENU,*PMDINEXTMENU,*LPMDINEXTMENU;
+typedef struct tagMEASUREITEMSTRUCT {
+ UINT CtlType;
+ UINT CtlID;
+ UINT itemID;
+ UINT itemWidth;
+ UINT itemHeight;
+ DWORD itemData;
+} MEASUREITEMSTRUCT,*PMEASUREITEMSTRUCT,*LPMEASUREITEMSTRUCT;
+typedef struct tagDROPSTRUCT {
+ HWND hwndSource;
+ HWND hwndSink;
+ DWORD wFmt;
+ DWORD dwData;
+ POINT ptDrop;
+ DWORD dwControlData;
+} DROPSTRUCT,*PDROPSTRUCT,*LPDROPSTRUCT;
+typedef DWORD HELPPOLY;
+typedef struct tagMULTIKEYHELPA {
+ DWORD mkSize;
+ CHAR mkKeylist;
+ CHAR szKeyphrase[1];
+} MULTIKEYHELPA,*PMULTIKEYHELPA,*LPMULTIKEYHELPA;
+typedef struct tagMULTIKEYHELPW {
+ DWORD mkSize;
+ WCHAR mkKeylist;
+ WCHAR szKeyphrase[1];
+} MULTIKEYHELPW,*PMULTIKEYHELPW,*LPMULTIKEYHELPW;
+typedef struct tagHELPWININFOA {
+ int wStructSize;
+ int x;
+ int y;
+ int dx;
+ int dy;
+ int wMax;
+ CHAR rgchMember[2];
+} HELPWININFOA,*PHELPWININFOA,*LPHELPWININFOA;
+typedef struct tagHELPWININFOW {
+ int wStructSize;
+ int x;
+ int y;
+ int dx;
+ int dy;
+ int wMax;
+ WCHAR rgchMember[2];
+} HELPWININFOW,*PHELPWININFOW,*LPHELPWININFOW;
+typedef struct tagSTYLESTRUCT {
+ DWORD styleOld;
+ DWORD styleNew;
+} STYLESTRUCT,*LPSTYLESTRUCT;
+typedef struct tagALTTABINFO {
+ DWORD cbSize;
+ int cItems;
+ int cColumns;
+ int cRows;
+ int iColFocus;
+ int iRowFocus;
+ int cxItem;
+ int cyItem;
+ POINT ptStart;
+} ALTTABINFO,*PALTTABINFO,*LPALTTABINFO;
+typedef struct tagCOMBOBOXINFO {
+ DWORD cbSize;
+ RECT rcItem;
+ RECT rcButton;
+ DWORD stateButton;
+ HWND hwndCombo;
+ HWND hwndItem;
+ HWND hwndList;
+} COMBOBOXINFO,*PCOMBOBOXINFO,*LPCOMBOBOXINFO;
+typedef struct tagCURSORINFO {
+ DWORD cbSize;
+ DWORD flags;
+ HCURSOR hCursor;
+ POINT ptScreenPos;
+} CURSORINFO,*PCURSORINFO,*LPCURSORINFO;
+typedef struct tagMENUBARINFO {
+ DWORD cbSize;
+ RECT rcBar;
+ HMENU hMenu;
+ HWND hwndMenu;
+ BOOL fBarFocused:1;
+ BOOL fFocused:1;
+} MENUBARINFO,*PMENUBARINFO;
+typedef struct tagMENUINFO {
+ DWORD cbSize;
+ DWORD fMask;
+ DWORD dwStyle;
+ UINT cyMax;
+ HBRUSH hbrBack;
+ DWORD dwContextHelpID;
+ ULONG_PTR dwMenuData;
+} MENUINFO,*LPMENUINFO;
+typedef MENUINFO CONST *LPCMENUINFO;
+#define CCHILDREN_SCROLLBAR 5
+typedef struct tagSCROLLBARINFO {
+ DWORD cbSize;
+ RECT rcScrollBar;
+ int dxyLineButton;
+ int xyThumbTop;
+ int xyThumbBottom;
+ int reserved;
+ DWORD rgstate[CCHILDREN_SCROLLBAR+1];
+} SCROLLBARINFO,*PSCROLLBARINFO,*LPSCROLLBARINFO;
+#if (_WIN32_WINDOWS >= 0x0410)
+#define CCHILDREN_TITLEBAR 5
+typedef struct tagTITLEBARINFO {
+ DWORD cbSize;
+ RECT rcTitleBar;
+ DWORD rgstate[CCHILDREN_TITLEBAR+1];
+} TITLEBARINFO,*PTITLEBARINFO,*LPTITLEBARINFO;
+#endif
+typedef struct tagWINDOWINFO {
+ DWORD cbSize;
+ RECT rcWindow;
+ RECT rcClient;
+ DWORD dwStyle;
+ DWORD dwExStyle;
+ DWORD dwWindowStatus;
+ UINT cxWindowBorders;
+ UINT cyWindowBorders;
+ ATOM atomWindowType;
+ WORD wCreatorVersion;
+} WINDOWINFO,*PWINDOWINFO,*LPWINDOWINFO;
+typedef struct tagLASTINPUTINFO {
+ UINT cbSize;
+ DWORD dwTime;
+} LASTINPUTINFO,*PLASTINPUTINFO;
+typedef struct tagMONITORINFO {
+ DWORD cbSize;
+ RECT rcMonitor;
+ RECT rcWork;
+ DWORD dwFlags;
+} MONITORINFO,*LPMONITORINFO;
+#define CCHDEVICENAME 32
+#ifdef __cplusplus
+typedef struct tagMONITORINFOEXA : public tagMONITORINFO
+{
+ CHAR szDevice[CCHDEVICENAME];
+} MONITORINFOEXA, *LPMONITORINFOEXA;
+typedef struct tagMONITORINFOEXW : public tagMONITORINFO
+{
+ WCHAR szDevice[CCHDEVICENAME];
+} MONITORINFOEXW, *LPMONITORINFOEXW;
+#else
+typedef struct tagMONITORINFOEXA {
+ DWORD cbSize;
+ RECT rcMonitor;
+ RECT rcWork;
+ DWORD dwFlags;
+ CHAR szDevice[CCHDEVICENAME];
+} MONITORINFOEXA,*LPMONITORINFOEXA;
+typedef struct tagMONITORINFOEXW {
+ DWORD cbSize;
+ RECT rcMonitor;
+ RECT rcWork;
+ DWORD dwFlags;
+ WCHAR szDevice[CCHDEVICENAME];
+} MONITORINFOEXW,*LPMONITORINFOEXW;
+#endif /* __cplusplus */
+typedef struct tagKBDLLHOOKSTRUCT {
+ DWORD vkCode;
+ DWORD scanCode;
+ DWORD flags;
+ DWORD time;
+ DWORD dwExtraInfo;
+} KBDLLHOOKSTRUCT,*LPKBDLLHOOKSTRUCT,*PKBDLLHOOKSTRUCT;
+#if (_WIN32_WINNT >= 0x0500 || _WIN32_WINDOWS >= 0x0410)
+typedef struct {
+ UINT cbSize;
+ HWND hwnd;
+ DWORD dwFlags;
+ UINT uCount;
+ DWORD dwTimeout;
+} FLASHWINFO,*PFLASHWINFO;
+#endif /* (WINVER >= 0x0500 || _WIN32_WINDOWS >= 0x0410) */
+#if (_WIN32_WINNT >= 0x0500 || _WIN32_WINDOWS >= 0x0490)
+typedef struct tagMOUSEMOVEPOINT {
+ int x;
+ int y;
+ DWORD time;
+ ULONG_PTR dwExtraInfo;
+} MOUSEMOVEPOINT,*PMOUSEMOVEPOINT,*LPMOUSEMOVEPOINT;
+#endif
+#if (_WIN32_WINNT >= 0x0403)
+typedef struct tagMOUSEINPUT {
+ LONG dx;
+ LONG dy;
+ DWORD mouseData;
+ DWORD dwFlags;
+ DWORD time;
+ ULONG_PTR dwExtraInfo;
+} MOUSEINPUT,*PMOUSEINPUT;
+typedef struct tagKEYBDINPUT {
+ WORD wVk;
+ WORD wScan;
+ DWORD dwFlags;
+ DWORD time;
+ ULONG_PTR dwExtraInfo;
+} KEYBDINPUT,*PKEYBDINPUT;
+typedef struct tagHARDWAREINPUT {
+ DWORD uMsg;
+ WORD wParamL;
+ WORD wParamH;
+} HARDWAREINPUT,*PHARDWAREINPUT;
+typedef struct tagINPUT {
+ DWORD type;
+ _ANONYMOUS_UNION union {
+ MOUSEINPUT mi;
+ KEYBDINPUT ki;
+ HARDWAREINPUT hi;
+ } DUMMYUNIONNAME;
+} INPUT,*PINPUT,*LPINPUT;
+#endif /* (_WIN32_WINNT >= 0x0403) */
+#if (_WIN32_WINNT >= 0x0601)
+typedef struct _TOUCHINPUT {
+ LONG x;
+ LONG y;
+ HANDLE hSource;
+ DWORD dwID;
+ DWORD dwFlags;
+ DWORD dwMask;
+ DWORD dwTime;
+ ULONG_PTR dwExtraInfo;
+ DWORD cxContact;
+ DWORD cyContact;
+} TOUCHINPUT,
+ *PTOUCHINPUT;
+#endif /* (_WIN32_WINNT >= 0x0601) */
+#if (WINVER >= 0x0500)
+typedef struct tagGUITHREADINFO {
+ DWORD cbSize;
+ DWORD flags;
+ HWND hwndActive;
+ HWND hwndFocus;
+ HWND hwndCapture;
+ HWND hwndMenuOwner;
+ HWND hwndMoveSize;
+ HWND hwndCaret;
+ RECT rcCaret;
+} GUITHREADINFO,*PGUITHREADINFO,*LPGUITHREADINFO;
+typedef VOID (*WINEVENTPROC)(HWINEVENTHOOK,DWORD,HWND,LONG,LONG,DWORD,DWORD);
+#endif /* (WINVER >= 0x0500) */
+#if (_WIN32_WINNT >= 0x0501)
+typedef struct {
+ UINT cbSize;
+ HDESK hdesk;
+ HWND hwnd;
+ LUID luid;
+} BSMINFO,*PBSMINFO;
+DECLARE_HANDLE(HRAWINPUT);
+typedef struct tagRAWINPUTHEADER {
+ DWORD dwType;
+ DWORD dwSize;
+ HANDLE hDevice;
+ WPARAM wParam;
+} RAWINPUTHEADER,*PRAWINPUTHEADER;
+typedef struct tagRAWMOUSE {
+ USHORT usFlags;
+ _ANONYMOUS_UNION union {
+ ULONG ulButtons;
+ _ANONYMOUS_STRUCT struct {
+ USHORT usButtonFlags;
+ USHORT usButtonData;
+ };
+ };
+ ULONG ulRawButtons;
+ LONG lLastX;
+ LONG lLastY;
+ ULONG ulExtraInformation;
+} RAWMOUSE,*PRAWMOUSE,*LPRAWMOUSE;
+typedef struct tagRAWKEYBOARD {
+ USHORT MakeCode;
+ USHORT Flags;
+ USHORT Reserved;
+ USHORT VKey;
+ UINT Message;
+ ULONG ExtraInformation;
+} RAWKEYBOARD,*PRAWKEYBOARD,*LPRAWKEYBOARD;
+typedef struct tagRAWHID {
+ DWORD dwSizeHid;
+ DWORD dwCount;
+ BYTE bRawData;
+} RAWHID,*PRAWHID,*LPRAWHID;
+typedef struct tagRAWINPUT {
+ RAWINPUTHEADER header;
+ union {
+ RAWMOUSE mouse;
+ RAWKEYBOARD keyboard;
+ RAWHID hid;
+ } data;
+} RAWINPUT,*PRAWINPUT,*LPRAWINPUT;
+typedef struct tagRAWINPUTDEVICE {
+ USHORT usUsagePage;
+ USHORT usUsage;
+ DWORD dwFlags;
+ HWND hwndTarget;
+} RAWINPUTDEVICE,*PRAWINPUTDEVICE,*LPRAWINPUTDEVICE;
+typedef const RAWINPUTDEVICE *PCRAWINPUTDEVICE;
+typedef struct tagRAWINPUTDEVICELIST {
+ HANDLE hDevice;
+ DWORD dwType;
+} RAWINPUTDEVICELIST,*PRAWINPUTDEVICELIST;
+typedef struct tagRID_DEVICE_INFO_MOUSE {
+ DWORD dwId;
+ DWORD dwNumberOfButtons;
+ DWORD dwSampleRate;
+ BOOL fHasHorizontalWheel;
+} RID_DEVICE_INFO_MOUSE, *PRID_DEVICE_INFO_MOUSE;
+typedef struct tagRID_DEVICE_INFO_KEYBOARD {
+ DWORD dwType;
+ DWORD dwSubType;
+ DWORD dwKeyboardMode;
+ DWORD dwNumberOfFunctionKeys;
+ DWORD dwNumberOfIndicators;
+ DWORD dwNumberOfKeysTotal;
+} RID_DEVICE_INFO_KEYBOARD, *PRID_DEVICE_INFO_KEYBOARD;
+typedef struct tagRID_DEVICE_INFO_HID {
+ DWORD dwVendorId;
+ DWORD dwProductId;
+ DWORD dwVersionNumber;
+ USHORT usUsagePage;
+ USHORT usUsage;
+} RID_DEVICE_INFO_HID, *PRID_DEVICE_INFO_HID;
+typedef struct tagRID_DEVICE_INFO {
+ DWORD cbSize;
+ DWORD dwType;
+ _ANONYMOUS_UNION union {
+ RID_DEVICE_INFO_MOUSE mouse;
+ RID_DEVICE_INFO_KEYBOARD keyboard;
+ RID_DEVICE_INFO_HID hid;
+ } DUMMYUNIONNAME;
+} RID_DEVICE_INFO, *PRID_DEVICE_INFO, *LPRID_DEVICE_INFO;
+#endif /* (_WIN32_WINNT >= 0x0501) */
+
+typedef struct {
+ POINT pt;
+ DWORD mouseData;
+ DWORD flags;
+ DWORD time;
+ ULONG_PTR dwExtraInfo;
+} MSLLHOOKSTRUCT, *PMSLLHOOKSTRUCT;
+
+#define AnsiToOem CharToOemA
+#define OemToAnsi OemToCharA
+#define AnsiToOemBuff CharToOemBuffA
+#define OemToAnsiBuff OemToCharBuffA
+#define AnsiUpper CharUpperA
+#define AnsiUpperBuff CharUpperBuffA
+#define AnsiLower CharLowerA
+#define AnsiLowerBuff CharLowerBuffA
+#define AnsiNext CharNextA
+#define AnsiPrev CharPrevA
+#define MAKELPARAM(l,h) ((LPARAM)MAKELONG(l,h))
+#define MAKEWPARAM(l,h) ((WPARAM)MAKELONG(l,h))
+#define MAKELRESULT(l,h) ((LRESULT)MAKELONG(l,h))
+#define POINTSTOPOINT(p,ps) { \
+ (p).x=LOWORD(*(DWORD *)&ps); \
+ (p).y=HIWORD(*(DWORD *)&ps); \
+}
+#define POINTTOPOINTS(p) ((POINTS)MAKELONG((p).x,(p).y))
+
+#ifndef _LPCGUID_DEFINED
+#define _LPCGUID_DEFINED
+typedef const GUID *LPCGUID;
+#endif
+
+#if (_WIN32_WINNT >= 0x0600)
+typedef HANDLE HPOWERNOTIFY;
+
+typedef struct {
+ GUID PowerSetting;
+ DWORD DataLength;
+ UCHAR Data[1];
+} POWERBROADCAST_SETTING, *PPOWERBROADCAST_SETTING;
+
+extern const GUID GUID_POWERSCHEME_PERSONALITY;
+extern const GUID GUID_MIN_POWER_SAVINGS;
+extern const GUID GUID_MAX_POWER_SAVINGS;
+extern const GUID GUID_TYPICAL_POWER_SAVINGS;
+extern const GUID GUID_ACDC_POWER_SOURCE;
+extern const GUID GUID_BATTERY_PERCENTAGE_REMAINING;
+extern const GUID GUID_IDLE_BACKGROUND_TASK;
+extern const GUID GUID_SYSTEM_AWAYMODE;
+extern const GUID GUID_MONITOR_POWER_ON;
+#endif
+
+WINUSERAPI HKL WINAPI ActivateKeyboardLayout(HKL,UINT);
+WINUSERAPI BOOL WINAPI AdjustWindowRect(LPRECT,DWORD,BOOL);
+WINUSERAPI BOOL WINAPI AdjustWindowRectEx(LPRECT,DWORD,BOOL,DWORD);
+#if (_WIN32_WINNT >= 0x0500)
+WINUSERAPI BOOL WINAPI AnimateWindow(HWND,DWORD,DWORD);
+#endif /* (_WIN32_WINNT >= 0x0500) */
+WINUSERAPI BOOL WINAPI AnyPopup(void);
+WINUSERAPI BOOL WINAPI AppendMenuA(HMENU,UINT,UINT_PTR,LPCSTR);
+WINUSERAPI BOOL WINAPI AppendMenuW(HMENU,UINT,UINT_PTR,LPCWSTR);
+WINUSERAPI UINT WINAPI ArrangeIconicWindows(HWND);
+WINUSERAPI BOOL WINAPI AttachThreadInput(DWORD,DWORD,BOOL);
+WINUSERAPI HDWP WINAPI BeginDeferWindowPos(int);
+WINUSERAPI HDC WINAPI BeginPaint(HWND,LPPAINTSTRUCT);
+WINUSERAPI BOOL WINAPI BringWindowToTop(HWND);
+WINUSERAPI long WINAPI BroadcastSystemMessage(DWORD,LPDWORD,UINT,WPARAM,LPARAM);
+#if (_WIN32_WINNT >= 0x0400)
+WINUSERAPI long WINAPI BroadcastSystemMessageA(DWORD,LPDWORD,UINT,WPARAM,LPARAM);
+WINUSERAPI long WINAPI BroadcastSystemMessageW(DWORD,LPDWORD,UINT,WPARAM,LPARAM);
+#endif /* (_WIN32_WINNT >= 0x0400) */
+#if (_WIN32_WINNT >= 0x0501)
+WINUSERAPI long WINAPI BroadcastSystemMessageExA(DWORD,LPDWORD,UINT,WPARAM,LPARAM,PBSMINFO);
+WINUSERAPI long WINAPI BroadcastSystemMessageExW(DWORD,LPDWORD,UINT,WPARAM,LPARAM,PBSMINFO);
+#endif /* (_WIN32_WINNT >= 0x0501) */
+WINUSERAPI BOOL WINAPI CallMsgFilterA(LPMSG,INT);
+WINUSERAPI BOOL WINAPI CallMsgFilterW(LPMSG,INT);
+WINUSERAPI LRESULT WINAPI CallNextHookEx(HHOOK,int,WPARAM,LPARAM);
+WINUSERAPI LRESULT WINAPI CallWindowProcA(WNDPROC,HWND,UINT,WPARAM,LPARAM);
+WINUSERAPI LRESULT WINAPI CallWindowProcW(WNDPROC,HWND,UINT,WPARAM,LPARAM);
+WINUSERAPI WORD WINAPI CascadeWindows(HWND,UINT,LPCRECT,UINT,const HWND*);
+WINUSERAPI BOOL WINAPI ChangeClipboardChain(HWND,HWND);
+#ifndef NOGDI
+WINUSERAPI LONG WINAPI ChangeDisplaySettingsA(PDEVMODEA,DWORD);
+WINUSERAPI LONG WINAPI ChangeDisplaySettingsW(PDEVMODEW,DWORD);
+WINUSERAPI LONG WINAPI ChangeDisplaySettingsExA(LPCSTR,LPDEVMODEA,HWND,DWORD,LPVOID);
+WINUSERAPI LONG WINAPI ChangeDisplaySettingsExW(LPCWSTR,LPDEVMODEW,HWND,DWORD,LPVOID);
+#endif
+WINUSERAPI BOOL WINAPI ChangeMenuA(HMENU,UINT,LPCSTR,UINT,UINT);
+WINUSERAPI BOOL WINAPI ChangeMenuW(HMENU,UINT,LPCWSTR,UINT,UINT);
+WINUSERAPI LPSTR WINAPI CharLowerA(LPSTR);
+WINUSERAPI LPWSTR WINAPI CharLowerW(LPWSTR);
+WINUSERAPI DWORD WINAPI CharLowerBuffA(LPSTR,DWORD);
+WINUSERAPI DWORD WINAPI CharLowerBuffW(LPWSTR,DWORD);
+WINUSERAPI LPSTR WINAPI CharNextA(LPCSTR);
+WINUSERAPI LPWSTR WINAPI CharNextW(LPCWSTR);
+WINUSERAPI LPSTR WINAPI CharNextExA(WORD,LPCSTR,DWORD);
+WINUSERAPI LPSTR WINAPI CharPrevA(LPCSTR,LPCSTR);
+WINUSERAPI LPWSTR WINAPI CharPrevW(LPCWSTR,LPCWSTR);
+WINUSERAPI LPSTR WINAPI CharPrevExA(WORD,LPCSTR,LPCSTR,DWORD);
+WINUSERAPI BOOL WINAPI CharToOemA(LPCSTR,LPSTR);
+WINUSERAPI BOOL WINAPI CharToOemW(LPCWSTR,LPSTR);
+WINUSERAPI BOOL WINAPI CharToOemBuffA(LPCSTR,LPSTR,DWORD);
+WINUSERAPI BOOL WINAPI CharToOemBuffW(LPCWSTR,LPSTR,DWORD);
+WINUSERAPI LPSTR WINAPI CharUpperA(LPSTR);
+WINUSERAPI LPWSTR WINAPI CharUpperW(LPWSTR);
+WINUSERAPI DWORD WINAPI CharUpperBuffA(LPSTR,DWORD);
+WINUSERAPI DWORD WINAPI CharUpperBuffW(LPWSTR,DWORD);
+WINUSERAPI BOOL WINAPI CheckDlgButton(HWND,int,UINT);
+WINUSERAPI DWORD WINAPI CheckMenuItem(HMENU,UINT,UINT);
+WINUSERAPI BOOL WINAPI CheckMenuRadioItem(HMENU,UINT,UINT,UINT,UINT);
+WINUSERAPI BOOL WINAPI CheckRadioButton(HWND,int,int,int);
+WINUSERAPI HWND WINAPI ChildWindowFromPoint(HWND,POINT);
+WINUSERAPI HWND WINAPI ChildWindowFromPointEx(HWND,POINT,UINT);
+WINUSERAPI BOOL WINAPI ClientToScreen(HWND,LPPOINT);
+WINUSERAPI BOOL WINAPI ClipCursor(LPCRECT);
+WINUSERAPI BOOL WINAPI CloseClipboard(void);
+WINUSERAPI BOOL WINAPI CloseDesktop(HDESK);
+WINUSERAPI BOOL WINAPI CloseWindow(HWND);
+WINUSERAPI BOOL WINAPI CloseWindowStation(HWINSTA);
+WINUSERAPI int WINAPI CopyAcceleratorTableA(HACCEL,LPACCEL,int);
+WINUSERAPI int WINAPI CopyAcceleratorTableW(HACCEL,LPACCEL,int);
+#define CopyCursor(c) ((HCURSOR)CopyIcon((HICON)(c)))
+WINUSERAPI HICON WINAPI CopyIcon(HICON);
+WINUSERAPI HANDLE WINAPI CopyImage(HANDLE,UINT,int,int,UINT);
+WINUSERAPI BOOL WINAPI CopyRect(LPRECT,LPCRECT);
+WINUSERAPI int WINAPI CountClipboardFormats(void);
+WINUSERAPI HACCEL WINAPI CreateAcceleratorTableA(LPACCEL,int);
+WINUSERAPI HACCEL WINAPI CreateAcceleratorTableW(LPACCEL,int);
+WINUSERAPI BOOL WINAPI CreateCaret(HWND,HBITMAP,int,int);
+WINUSERAPI HCURSOR WINAPI CreateCursor(HINSTANCE,int,int,int,int,PCVOID,PCVOID);
+#ifndef NOGDI
+WINUSERAPI HDESK WINAPI CreateDesktopA(LPCSTR,LPCSTR,LPDEVMODEA,DWORD,ACCESS_MASK,LPSECURITY_ATTRIBUTES);
+WINUSERAPI HDESK WINAPI CreateDesktopW(LPCWSTR,LPCWSTR,LPDEVMODEW,DWORD,ACCESS_MASK,LPSECURITY_ATTRIBUTES);
+#endif
+#define CreateDialogA(h,n,w,f) CreateDialogParamA(h,n,w,f,0)
+#define CreateDialogW(h,n,w,f) CreateDialogParamW(h,n,w,f,0)
+#define CreateDialogIndirectA(h,t,w,f) CreateDialogIndirectParamA(h,t,w,f,0)
+#define CreateDialogIndirectW(h,t,w,f) CreateDialogIndirectParamW(h,t,w,f,0)
+WINUSERAPI HWND WINAPI CreateDialogIndirectParamA(HINSTANCE,LPCDLGTEMPLATE,HWND,DLGPROC,LPARAM);
+WINUSERAPI HWND WINAPI CreateDialogIndirectParamW(HINSTANCE,LPCDLGTEMPLATE,HWND,DLGPROC,LPARAM);
+WINUSERAPI HWND WINAPI CreateDialogParamA(HINSTANCE,LPCSTR,HWND,DLGPROC,LPARAM);
+WINUSERAPI HWND WINAPI CreateDialogParamW(HINSTANCE,LPCWSTR,HWND,DLGPROC,LPARAM);
+WINUSERAPI HICON WINAPI CreateIcon(HINSTANCE,int,int,BYTE,BYTE,const BYTE*,const BYTE*);
+WINUSERAPI HICON WINAPI CreateIconFromResource(PBYTE,DWORD,BOOL,DWORD);
+WINUSERAPI HICON WINAPI CreateIconFromResourceEx(PBYTE,DWORD,BOOL,DWORD,int,int,UINT);
+WINUSERAPI HICON WINAPI CreateIconIndirect(PICONINFO);
+WINUSERAPI HWND WINAPI CreateMDIWindowA(LPCSTR,LPCSTR,DWORD,int,int,int,int,HWND,HINSTANCE,LPARAM);
+WINUSERAPI HWND WINAPI CreateMDIWindowW(LPCWSTR,LPCWSTR,DWORD,int,int,int,int,HWND,HINSTANCE,LPARAM);
+WINUSERAPI HMENU WINAPI CreateMenu(void);
+WINUSERAPI HMENU WINAPI CreatePopupMenu(void);
+#define CreateWindowA(a,b,c,d,e,f,g,h,i,j,k) CreateWindowExA(0,a,b,c,d,e,f,g,h,i,j,k)
+#define CreateWindowW(a,b,c,d,e,f,g,h,i,j,k) CreateWindowExW(0,a,b,c,d,e,f,g,h,i,j,k)
+WINUSERAPI HWND WINAPI CreateWindowExA(DWORD,LPCSTR,LPCSTR,DWORD,int,int,int,int,HWND,HMENU,HINSTANCE,LPVOID);
+WINUSERAPI HWND WINAPI CreateWindowExW(DWORD,LPCWSTR,LPCWSTR,DWORD,int,int,int,int,HWND,HMENU,HINSTANCE,LPVOID);
+WINUSERAPI HWINSTA WINAPI CreateWindowStationA(LPCSTR,DWORD,DWORD,LPSECURITY_ATTRIBUTES);
+WINUSERAPI HWINSTA WINAPI CreateWindowStationW(LPCWSTR,DWORD,DWORD,LPSECURITY_ATTRIBUTES);
+WINUSERAPI LRESULT WINAPI DefDlgProcA(HWND,UINT,WPARAM,LPARAM);
+WINUSERAPI LRESULT WINAPI DefDlgProcW(HWND,UINT,WPARAM,LPARAM);
+WINUSERAPI HDWP WINAPI DeferWindowPos(HDWP,HWND,HWND,int,int,int,int,UINT);
+WINUSERAPI LRESULT WINAPI DefFrameProcA(HWND,HWND,UINT,WPARAM,LPARAM);
+WINUSERAPI LRESULT WINAPI DefFrameProcW(HWND,HWND,UINT,WPARAM,LPARAM);
+#define DefHookProc(c,p,lp,h) CallNextHookEx((HHOOK)*h,c,p,lp)
+WINUSERAPI LRESULT WINAPI DefMDIChildProcA(HWND,UINT,WPARAM,LPARAM);
+WINUSERAPI LRESULT WINAPI DefMDIChildProcW(HWND,UINT,WPARAM,LPARAM);
+#if (_WIN32_WINNT >= 0x0501)
+WINUSERAPI LRESULT WINAPI DefRawInputProc(PRAWINPUT*,INT,UINT);
+#endif
+WINUSERAPI LRESULT WINAPI DefWindowProcA(HWND,UINT,WPARAM,LPARAM);
+WINUSERAPI LRESULT WINAPI DefWindowProcW(HWND,UINT,WPARAM,LPARAM);
+WINUSERAPI BOOL WINAPI DeleteMenu(HMENU,UINT,UINT);
+WINUSERAPI BOOL WINAPI DeregisterShellHookWindow(HWND);
+WINUSERAPI BOOL WINAPI DestroyAcceleratorTable(HACCEL);
+WINUSERAPI BOOL WINAPI DestroyCaret(void);
+WINUSERAPI BOOL WINAPI DestroyCursor(HCURSOR);
+WINUSERAPI BOOL WINAPI DestroyIcon(HICON);
+WINUSERAPI BOOL WINAPI DestroyMenu(HMENU);
+WINUSERAPI BOOL WINAPI DestroyWindow(HWND);
+#define DialogBoxA(i,t,p,f) DialogBoxParamA(i,t,p,f,0)
+#define DialogBoxW(i,t,p,f) DialogBoxParamW(i,t,p,f,0)
+#define DialogBoxIndirectA(i,t,p,f) DialogBoxIndirectParamA(i,t,p,f,0)
+#define DialogBoxIndirectW(i,t,p,f) DialogBoxIndirectParamW(i,t,p,f,0)
+WINUSERAPI int WINAPI DialogBoxIndirectParamA(HINSTANCE,LPCDLGTEMPLATE,HWND,DLGPROC,LPARAM);
+WINUSERAPI int WINAPI DialogBoxIndirectParamW(HINSTANCE,LPCDLGTEMPLATE,HWND,DLGPROC,LPARAM);
+#ifdef _WIN32_WCE
+extern int DialogBoxParamA(HINSTANCE,LPCSTR,HWND,DLGPROC,LPARAM);
+extern int DialogBoxParamW(HINSTANCE,LPCWSTR,HWND,DLGPROC,LPARAM);
+#else
+WINUSERAPI int WINAPI DialogBoxParamA(HINSTANCE,LPCSTR,HWND,DLGPROC,LPARAM);
+WINUSERAPI int WINAPI DialogBoxParamW(HINSTANCE,LPCWSTR,HWND,DLGPROC,LPARAM);
+#endif
+WINUSERAPI LONG WINAPI DispatchMessageA(const MSG*);
+WINUSERAPI LONG WINAPI DispatchMessageW(const MSG*);
+WINUSERAPI int WINAPI DlgDirListA(HWND,LPSTR,int,int,UINT);
+WINUSERAPI int WINAPI DlgDirListW(HWND,LPWSTR,int,int,UINT);
+WINUSERAPI int WINAPI DlgDirListComboBoxA(HWND,LPSTR,int,int,UINT);
+WINUSERAPI int WINAPI DlgDirListComboBoxW(HWND,LPWSTR,int,int,UINT);
+WINUSERAPI BOOL WINAPI DlgDirSelectComboBoxExA(HWND,LPSTR,int,int);
+WINUSERAPI BOOL WINAPI DlgDirSelectComboBoxExW(HWND,LPWSTR,int,int);
+WINUSERAPI BOOL WINAPI DlgDirSelectExA(HWND,LPSTR,int,int);
+WINUSERAPI BOOL WINAPI DlgDirSelectExW(HWND,LPWSTR,int,int);
+WINUSERAPI BOOL WINAPI DragDetect(HWND,POINT);
+WINUSERAPI DWORD WINAPI DragObject(HWND,HWND,UINT,DWORD,HCURSOR);
+WINUSERAPI BOOL WINAPI DrawAnimatedRects(HWND,int,LPCRECT,LPCRECT);
+WINUSERAPI BOOL WINAPI DrawCaption(HWND,HDC,LPCRECT,UINT);
+WINUSERAPI BOOL WINAPI DrawEdge(HDC,LPRECT,UINT,UINT);
+WINUSERAPI BOOL WINAPI DrawFocusRect(HDC,LPCRECT);
+WINUSERAPI BOOL WINAPI DrawFrameControl(HDC,LPRECT,UINT,UINT);
+WINUSERAPI BOOL WINAPI DrawIcon(HDC,int,int,HICON);
+WINUSERAPI BOOL WINAPI DrawIconEx(HDC,int,int,HICON,int,int,UINT,HBRUSH,UINT);
+WINUSERAPI BOOL WINAPI DrawMenuBar(HWND);
+WINUSERAPI BOOL WINAPI DrawStateA(HDC,HBRUSH,DRAWSTATEPROC,LPARAM,WPARAM,int,int,int,int,UINT);
+WINUSERAPI BOOL WINAPI DrawStateW(HDC,HBRUSH,DRAWSTATEPROC,LPARAM,WPARAM,int,int,int,int,UINT);
+WINUSERAPI int WINAPI DrawTextA(HDC,LPCSTR,int,LPRECT,UINT);
+WINUSERAPI int WINAPI DrawTextW(HDC,LPCWSTR,int,LPRECT,UINT);
+WINUSERAPI int WINAPI DrawTextExA(HDC,LPSTR,int,LPRECT,UINT,LPDRAWTEXTPARAMS);
+WINUSERAPI int WINAPI DrawTextExW(HDC,LPWSTR,int,LPRECT,UINT,LPDRAWTEXTPARAMS);
+WINUSERAPI BOOL WINAPI EmptyClipboard(void);
+WINUSERAPI BOOL WINAPI EnableMenuItem(HMENU,UINT,UINT);
+WINUSERAPI BOOL WINAPI EnableScrollBar(HWND,UINT,UINT);
+WINUSERAPI BOOL WINAPI EnableWindow(HWND,BOOL);
+WINUSERAPI BOOL WINAPI EndDeferWindowPos(HDWP);
+WINUSERAPI BOOL WINAPI EndDialog(HWND,int);
+WINUSERAPI BOOL WINAPI EndMenu(void);
+WINUSERAPI BOOL WINAPI EndPaint(HWND,const PAINTSTRUCT*);
+#if (_WIN32_WINNT >= 0x0500)
+WINUSERAPI BOOL WINAPI EndTask(HWND,BOOL,BOOL);
+#endif
+WINUSERAPI BOOL WINAPI EnumChildWindows(HWND,ENUMWINDOWSPROC,LPARAM);
+WINUSERAPI UINT WINAPI EnumClipboardFormats(UINT);
+WINUSERAPI BOOL WINAPI EnumDesktopsA(HWINSTA,DESKTOPENUMPROCA,LPARAM);
+WINUSERAPI BOOL WINAPI EnumDesktopsW(HWINSTA,DESKTOPENUMPROCW,LPARAM);
+WINUSERAPI BOOL WINAPI EnumDesktopWindows(HDESK,ENUMWINDOWSPROC,LPARAM);
+WINUSERAPI BOOL WINAPI EnumDisplayMonitors(HDC,LPCRECT,MONITORENUMPROC,LPARAM);
+#ifndef NOGDI
+WINUSERAPI BOOL WINAPI EnumDisplaySettingsA(LPCSTR,DWORD,PDEVMODEA);
+WINUSERAPI BOOL WINAPI EnumDisplaySettingsW(LPCWSTR,DWORD,PDEVMODEW);
+#if (_WIN32_WINNT >= 0x0500 || _WIN32_WINDOWS >= 0x0410)
+WINUSERAPI BOOL WINAPI EnumDisplaySettingsExA(LPCSTR,DWORD,LPDEVMODEA,DWORD);
+WINUSERAPI BOOL WINAPI EnumDisplaySettingsExW(LPCWSTR,DWORD,LPDEVMODEW,DWORD);
+#endif
+WINUSERAPI BOOL WINAPI EnumDisplayDevicesA(LPCSTR,DWORD,PDISPLAY_DEVICEA,DWORD);
+WINUSERAPI BOOL WINAPI EnumDisplayDevicesW(LPCWSTR,DWORD,PDISPLAY_DEVICEW,DWORD);
+#endif
+WINUSERAPI int WINAPI EnumPropsA(HWND,PROPENUMPROCA);
+WINUSERAPI int WINAPI EnumPropsW(HWND,PROPENUMPROCW);
+WINUSERAPI int WINAPI EnumPropsExA(HWND,PROPENUMPROCEXA,LPARAM);
+WINUSERAPI int WINAPI EnumPropsExW(HWND,PROPENUMPROCEXW,LPARAM);
+#define EnumTaskWindows(h,f,p) EnumThreadWindows((DWORD)h,f,p)
+WINUSERAPI BOOL WINAPI EnumThreadWindows(DWORD,WNDENUMPROC,LPARAM);
+WINUSERAPI BOOL WINAPI EnumWindows(WNDENUMPROC,LPARAM);
+WINUSERAPI BOOL WINAPI EnumWindowStationsA(WINSTAENUMPROCA,LPARAM);
+WINUSERAPI BOOL WINAPI EnumWindowStationsW(WINSTAENUMPROCW,LPARAM);
+WINUSERAPI BOOL WINAPI EqualRect(LPCRECT,LPCRECT);
+#define ExitWindows(r,c) ExitWindowsEx(EWX_LOGOFF,0)
+WINUSERAPI BOOL WINAPI ExitWindowsEx(UINT,DWORD);
+WINUSERAPI HWND WINAPI FindWindowA(LPCSTR,LPCSTR);
+WINUSERAPI HWND WINAPI FindWindowExA(HWND,HWND,LPCSTR,LPCSTR);
+WINUSERAPI HWND WINAPI FindWindowExW(HWND,HWND,LPCWSTR,LPCWSTR);
+WINUSERAPI HWND WINAPI FindWindowW(LPCWSTR,LPCWSTR);
+WINUSERAPI BOOL WINAPI FlashWindow(HWND,BOOL);
+#if (_WIN32_WINNT >= 0x0500 || _WIN32_WINDOWS >= 0x0410)
+WINUSERAPI BOOL WINAPI FlashWindowEx(PFLASHWINFO);
+#endif
+int WINAPI FrameRect(HDC,LPCRECT,HBRUSH);
+WINUSERAPI BOOL WINAPI FrameRgn(HDC,HRGN,HBRUSH,int,int);
+WINUSERAPI HWND WINAPI GetActiveWindow(void);
+WINUSERAPI HWND WINAPI GetAncestor(HWND,UINT);
+WINUSERAPI SHORT WINAPI GetAsyncKeyState(int);
+WINUSERAPI HWND WINAPI GetCapture(void);
+WINUSERAPI UINT WINAPI GetCaretBlinkTime(void);
+WINUSERAPI BOOL WINAPI GetCaretPos(LPPOINT);
+WINUSERAPI BOOL WINAPI GetClassInfoA(HINSTANCE,LPCSTR,LPWNDCLASSA);
+WINUSERAPI BOOL WINAPI GetClassInfoExA(HINSTANCE,LPCSTR,LPWNDCLASSEXA);
+WINUSERAPI BOOL WINAPI GetClassInfoW(HINSTANCE,LPCWSTR,LPWNDCLASSW);
+WINUSERAPI BOOL WINAPI GetClassInfoExW(HINSTANCE,LPCWSTR,LPWNDCLASSEXW);
+WINUSERAPI DWORD WINAPI GetClassLongA(HWND,int);
+WINUSERAPI DWORD WINAPI GetClassLongW(HWND,int);
+#ifdef _WIN64
+WINUSERAPI ULONG_PTR WINAPI GetClassLongPtrA(HWND,int);
+WINUSERAPI ULONG_PTR WINAPI GetClassLongPtrW(HWND,int);
+#else
+#define GetClassLongPtrA GetClassLongA
+#define GetClassLongPtrW GetClassLongW
+#endif
+WINUSERAPI int WINAPI GetClassNameA(HWND,LPSTR,int);
+WINUSERAPI int WINAPI GetClassNameW(HWND,LPWSTR,int);
+WINUSERAPI WORD WINAPI GetClassWord(HWND,int);
+WINUSERAPI BOOL WINAPI GetClientRect(HWND,LPRECT);
+WINUSERAPI HANDLE WINAPI GetClipboardData(UINT);
+WINUSERAPI int WINAPI GetClipboardFormatNameA(UINT,LPSTR,int);
+WINUSERAPI int WINAPI GetClipboardFormatNameW(UINT,LPWSTR,int);
+WINUSERAPI HWND WINAPI GetClipboardOwner(void);
+#if (_WIN32_WINNT >= 0x0500 || _WIN32_WINDOWS >= 0x0410)
+WINUSERAPI DWORD WINAPI GetClipboardSequenceNumber(void);
+#endif
+HWND WINAPI GetClipboardViewer(void);
+WINUSERAPI BOOL WINAPI GetClipCursor(LPRECT);
+WINUSERAPI BOOL WINAPI GetCursorPos(LPPOINT);
+WINUSERAPI HDC WINAPI GetDC(HWND);
+WINUSERAPI HDC WINAPI GetDCEx(HWND,HRGN,DWORD);
+WINUSERAPI HWND WINAPI GetDesktopWindow(void);
+WINUSERAPI long WINAPI GetDialogBaseUnits(void);
+WINUSERAPI int WINAPI GetDlgCtrlID(HWND);
+WINUSERAPI HWND WINAPI GetDlgItem(HWND,int);
+WINUSERAPI UINT WINAPI GetDlgItemInt(HWND,int,PBOOL,BOOL);
+WINUSERAPI UINT WINAPI GetDlgItemTextA(HWND,int,LPSTR,int);
+WINUSERAPI UINT WINAPI GetDlgItemTextW(HWND,int,LPWSTR,int);
+WINUSERAPI UINT WINAPI GetDoubleClickTime(void);
+WINUSERAPI HWND WINAPI GetFocus(void);
+WINUSERAPI HWND WINAPI GetForegroundWindow(void);
+#if (_WIN32_WINNT >= 0x0500)
+WINUSERAPI DWORD WINAPI GetGuiResources(HANDLE,DWORD);
+#endif
+WINUSERAPI BOOL WINAPI GetIconInfo(HICON,PICONINFO);
+WINUSERAPI BOOL WINAPI GetInputState(void);
+WINUSERAPI UINT WINAPI GetKBCodePage(void);
+WINUSERAPI HKL WINAPI GetKeyboardLayout(DWORD);
+WINUSERAPI UINT WINAPI GetKeyboardLayoutList(int,HKL*);
+WINUSERAPI BOOL WINAPI GetKeyboardLayoutNameA(LPSTR);
+WINUSERAPI BOOL WINAPI GetKeyboardLayoutNameW(LPWSTR);
+WINUSERAPI BOOL WINAPI GetKeyboardState(PBYTE);
+WINUSERAPI int WINAPI GetKeyboardType(int);
+WINUSERAPI int WINAPI GetKeyNameTextA(LONG,LPSTR,int);
+WINUSERAPI int WINAPI GetKeyNameTextW(LONG,LPWSTR,int);
+WINUSERAPI SHORT WINAPI GetKeyState(int);
+WINUSERAPI HWND WINAPI GetLastActivePopup(HWND);
+WINUSERAPI HMENU WINAPI GetMenu(HWND);
+WINUSERAPI LONG WINAPI GetMenuCheckMarkDimensions(void);
+WINUSERAPI DWORD WINAPI GetMenuContextHelpId(HMENU);
+WINUSERAPI UINT WINAPI GetMenuDefaultItem(HMENU,UINT,UINT);
+WINUSERAPI int WINAPI GetMenuItemCount(HMENU);
+WINUSERAPI UINT WINAPI GetMenuItemID(HMENU,int);
+WINUSERAPI BOOL WINAPI GetMenuItemInfoA(HMENU,UINT,BOOL,LPMENUITEMINFOA);
+WINUSERAPI BOOL WINAPI GetMenuItemInfoW(HMENU,UINT,BOOL,LPMENUITEMINFOW);
+WINUSERAPI BOOL WINAPI GetMenuItemRect(HWND,HMENU,UINT,LPRECT);
+WINUSERAPI UINT WINAPI GetMenuState(HMENU,UINT,UINT);
+WINUSERAPI int WINAPI GetMenuStringA(HMENU,UINT,LPSTR,int,UINT);
+WINUSERAPI int WINAPI GetMenuStringW(HMENU,UINT,LPWSTR,int,UINT);
+WINUSERAPI BOOL WINAPI GetMessageA(LPMSG,HWND,UINT,UINT);
+WINUSERAPI BOOL WINAPI GetMessageW(LPMSG,HWND,UINT,UINT);
+WINUSERAPI LONG WINAPI GetMessageExtraInfo(void);
+WINUSERAPI DWORD WINAPI GetMessagePos(void);
+WINUSERAPI LONG WINAPI GetMessageTime(void);
+#if (_WIN32_WINNT >= 0x0500 || _WIN32_WINDOWS >= 0x0490)
+WINUSERAPI int WINAPI GetMouseMovePointsEx(UINT,LPMOUSEMOVEPOINT,LPMOUSEMOVEPOINT,int,DWORD);
+#endif
+WINUSERAPI HWND WINAPI GetNextDlgGroupItem(HWND,HWND,BOOL);
+WINUSERAPI HWND WINAPI GetNextDlgTabItem(HWND,HWND,BOOL);
+#define GetNextWindow(h,c) GetWindow(h,c)
+WINUSERAPI HWND WINAPI GetOpenClipboardWindow(void);
+WINUSERAPI HWND WINAPI GetParent(HWND);
+WINUSERAPI int WINAPI GetPriorityClipboardFormat(UINT*,int);
+WINUSERAPI HANDLE WINAPI GetPropA(HWND,LPCSTR);
+WINUSERAPI HANDLE WINAPI GetPropW(HWND,LPCWSTR);
+#if (_WIN32_WINNT >= 0x0501)
+WINUSERAPI UINT WINAPI GetRawInputBuffer(PRAWINPUT,PUINT,UINT);
+WINUSERAPI UINT WINAPI GetRawInputData(HRAWINPUT,UINT,LPVOID,PUINT,UINT);
+WINUSERAPI UINT WINAPI GetRawInputDeviceInfoA(HANDLE,UINT,LPVOID,PUINT);
+WINUSERAPI UINT WINAPI GetRawInputDeviceInfoW(HANDLE,UINT,LPVOID,PUINT);
+WINUSERAPI UINT WINAPI GetRawInputDeviceList(PRAWINPUTDEVICELIST,PUINT,UINT);
+WINUSERAPI UINT WINAPI GetRegisteredRawInputDevices(PRAWINPUTDEVICE,PUINT,UINT);
+#endif
+WINUSERAPI DWORD WINAPI GetQueueStatus(UINT);
+WINUSERAPI BOOL WINAPI GetScrollInfo(HWND,int,LPSCROLLINFO);
+WINUSERAPI int WINAPI GetScrollPos(HWND,int);
+WINUSERAPI BOOL WINAPI GetScrollRange(HWND,int,LPINT,LPINT);
+#if (_WIN32_WINNT >= 0x0500)
+WINUSERAPI HWND WINAPI GetShellWindow(void);
+#endif
+WINUSERAPI HMENU WINAPI GetSubMenu(HMENU,int);
+WINUSERAPI DWORD WINAPI GetSysColor(int);
+WINUSERAPI HBRUSH WINAPI GetSysColorBrush(int);
+#define GetSysModalWindow() (NULL)
+WINUSERAPI HMENU WINAPI GetSystemMenu(HWND,BOOL);
+WINUSERAPI int WINAPI GetSystemMetrics(int);
+WINUSERAPI DWORD WINAPI GetTabbedTextExtentA(HDC,LPCSTR,int,int,LPINT);
+WINUSERAPI DWORD WINAPI GetTabbedTextExtentW(HDC,LPCWSTR,int,int,LPINT);
+WINUSERAPI LONG WINAPI GetWindowLongA(HWND,int);
+WINUSERAPI LONG WINAPI GetWindowLongW(HWND,int);
+#ifdef _WIN64
+WINUSERAPI LONG_PTR WINAPI GetWindowLongPtrA(HWND,int);
+WINUSERAPI LONG_PTR WINAPI GetWindowLongPtrW(HWND,int);
+#else
+#define GetWindowLongPtrA GetWindowLongA
+#define GetWindowLongPtrW GetWindowLongW
+#endif
+WINUSERAPI HDESK WINAPI GetThreadDesktop(DWORD);
+WINUSERAPI HWND WINAPI GetTopWindow(HWND);
+WINUSERAPI BOOL WINAPI GetUpdateRect(HWND,LPRECT,BOOL);
+WINUSERAPI int WINAPI GetUpdateRgn(HWND,HRGN,BOOL);
+WINUSERAPI BOOL WINAPI GetUserObjectInformationA(HANDLE,int,PVOID,DWORD,PDWORD);
+WINUSERAPI BOOL WINAPI GetUserObjectInformationW(HANDLE,int,PVOID,DWORD,PDWORD);
+WINUSERAPI BOOL WINAPI GetUserObjectSecurity(HANDLE,PSECURITY_INFORMATION,PSECURITY_DESCRIPTOR,DWORD,PDWORD);
+WINUSERAPI HWND WINAPI GetWindow(HWND,UINT);
+WINUSERAPI DWORD WINAPI GetWindowContextHelpId(HWND);
+WINUSERAPI HDC WINAPI GetWindowDC(HWND);
+WINUSERAPI BOOL WINAPI GetWindowPlacement(HWND,WINDOWPLACEMENT*);
+WINUSERAPI BOOL WINAPI GetWindowRect(HWND,LPRECT);
+WINUSERAPI int WINAPI GetWindowRgn(HWND,HRGN);
+#define GetWindowTask(hWnd) ((HANDLE)GetWindowThreadProcessId(hWnd, NULL))
+WINUSERAPI int WINAPI GetWindowTextA(HWND,LPSTR,int);
+WINUSERAPI int WINAPI GetWindowTextLengthA(HWND);
+WINUSERAPI int WINAPI GetWindowTextLengthW(HWND);
+WINUSERAPI int WINAPI GetWindowTextW(HWND,LPWSTR,int);
+WINUSERAPI WORD WINAPI GetWindowWord(HWND,int);
+WINUSERAPI BOOL WINAPI GetAltTabInfoA(HWND,int,PALTTABINFO,LPSTR,UINT);
+WINUSERAPI BOOL WINAPI GetAltTabInfoW(HWND,int,PALTTABINFO,LPWSTR,UINT);
+WINUSERAPI BOOL WINAPI GetComboBoxInfo(HWND,PCOMBOBOXINFO);
+WINUSERAPI BOOL WINAPI GetCursorInfo(PCURSORINFO);
+#if (WINVER >= 0x0500)
+WINUSERAPI BOOL WINAPI GetGUIThreadInfo(DWORD,LPGUITHREADINFO);
+#endif
+WINUSERAPI BOOL WINAPI GetLastInputInfo(PLASTINPUTINFO);
+WINUSERAPI DWORD WINAPI GetListBoxInfo(HWND);
+WINUSERAPI BOOL WINAPI GetMenuBarInfo(HWND,LONG,LONG,PMENUBARINFO);
+WINUSERAPI BOOL WINAPI GetMenuInfo(HMENU,LPMENUINFO);
+#if (_WIN32_WINNT >= 0x0500)
+WINUSERAPI BOOL WINAPI GetProcessDefaultLayout(DWORD*);
+#endif
+WINUSERAPI BOOL WINAPI GetScrollBarInfo(HWND,LONG,PSCROLLBARINFO);
+#if (_WIN32_WINDOWS >= 0x0410)
+WINUSERAPI BOOL WINAPI GetTitleBarInfo(HWND,PTITLEBARINFO);
+#endif
+WINUSERAPI BOOL WINAPI GetWindowInfo(HWND,PWINDOWINFO);
+WINUSERAPI BOOL WINAPI GetMonitorInfoA(HMONITOR,LPMONITORINFO);
+WINUSERAPI BOOL WINAPI GetMonitorInfoW(HMONITOR,LPMONITORINFO);
+WINUSERAPI UINT WINAPI GetWindowModuleFileNameA(HWND,LPSTR,UINT);
+WINUSERAPI UINT WINAPI GetWindowModuleFileNameW(HWND,LPWSTR,UINT);
+WINUSERAPI BOOL WINAPI GrayStringA(HDC,HBRUSH,GRAYSTRINGPROC,LPARAM,int,int,int,int,int);
+WINUSERAPI BOOL WINAPI GrayStringW(HDC,HBRUSH,GRAYSTRINGPROC,LPARAM,int,int,int,int,int);
+WINUSERAPI BOOL WINAPI HideCaret(HWND);
+WINUSERAPI BOOL WINAPI HiliteMenuItem(HWND,HMENU,UINT,UINT);
+WINUSERAPI BOOL WINAPI InflateRect(LPRECT,int,int);
+WINUSERAPI BOOL WINAPI InSendMessage(void);
+#if (_WIN32_WINNT >= 0x0500 || _WIN32_WINDOWS >= 0x0410)
+WINUSERAPI DWORD WINAPI InSendMessageEx(LPVOID);
+#endif
+WINUSERAPI BOOL WINAPI InsertMenuA(HMENU,UINT,UINT,UINT,LPCSTR);
+WINUSERAPI BOOL WINAPI InsertMenuW(HMENU,UINT,UINT,UINT,LPCWSTR);
+WINUSERAPI BOOL WINAPI InsertMenuItemA(HMENU,UINT,BOOL,LPCMENUITEMINFOA);
+WINUSERAPI BOOL WINAPI InsertMenuItemW(HMENU,UINT,BOOL,LPCMENUITEMINFOW);
+WINUSERAPI INT WINAPI InternalGetWindowText(HWND,LPWSTR,INT);
+WINUSERAPI BOOL WINAPI IntersectRect(LPRECT,LPCRECT,LPCRECT);
+WINUSERAPI BOOL WINAPI InvalidateRect(HWND,LPCRECT,BOOL);
+WINUSERAPI BOOL WINAPI InvalidateRgn(HWND,HRGN,BOOL);
+WINUSERAPI BOOL WINAPI InvertRect(HDC,LPCRECT);
+WINUSERAPI BOOL WINAPI IsCharAlphaA(CHAR ch);
+WINUSERAPI BOOL WINAPI IsCharAlphaNumericA(CHAR);
+WINUSERAPI BOOL WINAPI IsCharAlphaNumericW(WCHAR);
+WINUSERAPI BOOL WINAPI IsCharAlphaW(WCHAR);
+WINUSERAPI BOOL WINAPI IsCharLowerA(CHAR);
+WINUSERAPI BOOL WINAPI IsCharLowerW(WCHAR);
+WINUSERAPI BOOL WINAPI IsCharUpperA(CHAR);
+WINUSERAPI BOOL WINAPI IsCharUpperW(WCHAR);
+WINUSERAPI BOOL WINAPI IsChild(HWND,HWND);
+WINUSERAPI BOOL WINAPI IsClipboardFormatAvailable(UINT);
+WINUSERAPI BOOL WINAPI IsDialogMessageA(HWND,LPMSG);
+WINUSERAPI BOOL WINAPI IsDialogMessageW(HWND,LPMSG);
+WINUSERAPI UINT WINAPI IsDlgButtonChecked(HWND,int);
+#if(_WIN32_WINNT >= 0x0501)
+WINUSERAPI BOOL WINAPI IsGUIThread(BOOL);
+#endif
+#if(_WIN32_WINNT >= 0x0500)
+WINUSERAPI BOOL WINAPI IsHungAppWindow(HWND);
+#endif
+WINUSERAPI BOOL WINAPI IsIconic(HWND);
+WINUSERAPI BOOL WINAPI IsMenu(HMENU);
+WINUSERAPI BOOL WINAPI IsRectEmpty(LPCRECT);
+WINUSERAPI BOOL WINAPI IsWindow(HWND);
+WINUSERAPI BOOL WINAPI IsWindowEnabled(HWND);
+WINUSERAPI BOOL WINAPI IsWindowUnicode(HWND);
+WINUSERAPI BOOL WINAPI IsWindowVisible(HWND);
+#if (_WIN32_WINNT >= 0x0501)
+WINUSERAPI BOOL WINAPI IsWinEventHookInstalled(DWORD);
+#endif
+WINUSERAPI BOOL WINAPI IsZoomed(HWND);
+WINUSERAPI VOID WINAPI keybd_event(BYTE,BYTE,DWORD,DWORD);
+WINUSERAPI BOOL WINAPI KillTimer(HWND,UINT);
+WINUSERAPI HACCEL WINAPI LoadAcceleratorsA(HINSTANCE,LPCSTR);
+WINUSERAPI HACCEL WINAPI LoadAcceleratorsW(HINSTANCE,LPCWSTR);
+WINUSERAPI HBITMAP WINAPI LoadBitmapA(HINSTANCE,LPCSTR);
+WINUSERAPI HBITMAP WINAPI LoadBitmapW(HINSTANCE,LPCWSTR);
+WINUSERAPI HCURSOR WINAPI LoadCursorA(HINSTANCE,LPCSTR);
+WINUSERAPI HCURSOR WINAPI LoadCursorFromFileA(LPCSTR);
+WINUSERAPI HCURSOR WINAPI LoadCursorFromFileW(LPCWSTR);
+WINUSERAPI HCURSOR WINAPI LoadCursorW(HINSTANCE,LPCWSTR);
+WINUSERAPI HICON WINAPI LoadIconA(HINSTANCE,LPCSTR);
+WINUSERAPI HICON WINAPI LoadIconW(HINSTANCE,LPCWSTR);
+WINUSERAPI HANDLE WINAPI LoadImageA(HINSTANCE,LPCSTR,UINT,int,int,UINT);
+WINUSERAPI HANDLE WINAPI LoadImageW(HINSTANCE,LPCWSTR,UINT,int,int,UINT);
+WINUSERAPI HKL WINAPI LoadKeyboardLayoutA(LPCSTR,UINT);
+WINUSERAPI HKL WINAPI LoadKeyboardLayoutW(LPCWSTR,UINT);
+WINUSERAPI HMENU WINAPI LoadMenuA(HINSTANCE,LPCSTR);
+WINUSERAPI HMENU WINAPI LoadMenuIndirectA(const MENUTEMPLATE*);
+WINUSERAPI HMENU WINAPI LoadMenuIndirectW(const MENUTEMPLATE*);
+WINUSERAPI HMENU WINAPI LoadMenuW(HINSTANCE,LPCWSTR);
+WINUSERAPI int WINAPI LoadStringA(HINSTANCE,UINT,LPSTR,int);
+WINUSERAPI int WINAPI LoadStringW(HINSTANCE,UINT,LPWSTR,int);
+WINUSERAPI BOOL WINAPI LockWindowUpdate(HWND);
+#if (_WIN32_WINNT >= 0x0500)
+WINUSERAPI BOOL WINAPI LockWorkStation(void);
+#endif
+WINUSERAPI int WINAPI LookupIconIdFromDirectory(PBYTE,BOOL);
+WINUSERAPI int WINAPI LookupIconIdFromDirectoryEx(PBYTE,BOOL,int,int,UINT);
+WINUSERAPI BOOL WINAPI MapDialogRect(HWND,LPRECT);
+WINUSERAPI UINT WINAPI MapVirtualKeyA(UINT,UINT);
+WINUSERAPI UINT WINAPI MapVirtualKeyExA(UINT,UINT,HKL);
+WINUSERAPI UINT WINAPI MapVirtualKeyExW(UINT,UINT,HKL);
+WINUSERAPI UINT WINAPI MapVirtualKeyW(UINT,UINT);
+WINUSERAPI int WINAPI MapWindowPoints(HWND,HWND,LPPOINT,UINT);
+WINUSERAPI int WINAPI MenuItemFromPoint(HWND,HMENU,POINT);
+WINUSERAPI BOOL WINAPI MessageBeep(UINT);
+WINUSERAPI int WINAPI MessageBoxA(HWND,LPCSTR,LPCSTR,UINT);
+WINUSERAPI int WINAPI MessageBoxW(HWND,LPCWSTR,LPCWSTR,UINT);
+WINUSERAPI int WINAPI MessageBoxExA(HWND,LPCSTR,LPCSTR,UINT,WORD);
+WINUSERAPI int WINAPI MessageBoxExW(HWND,LPCWSTR,LPCWSTR,UINT,WORD);
+WINUSERAPI int WINAPI MessageBoxIndirectA(CONST MSGBOXPARAMSA*);
+WINUSERAPI int WINAPI MessageBoxIndirectW(CONST MSGBOXPARAMSW*);
+WINUSERAPI BOOL WINAPI ModifyMenuA(HMENU,UINT,UINT,UINT,LPCSTR);
+WINUSERAPI BOOL WINAPI ModifyMenuW(HMENU,UINT,UINT,UINT,LPCWSTR);
+#if (_WIN32_WINNT >= 0x0500 || _WIN32_WINDOWS >= 0x0410)
+WINUSERAPI HMONITOR WINAPI MonitorFromPoint(POINT,DWORD);
+WINUSERAPI HMONITOR WINAPI MonitorFromRect(LPCRECT,DWORD);
+WINUSERAPI HMONITOR WINAPI MonitorFromWindow(HWND,DWORD);
+#endif
+WINUSERAPI void WINAPI mouse_event(DWORD,DWORD,DWORD,DWORD,ULONG_PTR);
+WINUSERAPI BOOL WINAPI MoveWindow(HWND,int,int,int,int,BOOL);
+WINUSERAPI DWORD WINAPI MsgWaitForMultipleObjects(DWORD,CONST HANDLE*,BOOL,DWORD,DWORD);
+WINUSERAPI DWORD WINAPI MsgWaitForMultipleObjectsEx(DWORD,CONST HANDLE*,DWORD,DWORD,DWORD);
+#if (WINVER >= 0x0500)
+WINUSERAPI void WINAPI NotifyWinEvent(DWORD,HWND,LONG,LONG);
+#endif
+WINUSERAPI DWORD WINAPI OemKeyScan(WORD);
+WINUSERAPI BOOL WINAPI OemToCharA(LPCSTR,LPSTR);
+WINUSERAPI BOOL WINAPI OemToCharBuffA(LPCSTR,LPSTR,DWORD);
+WINUSERAPI BOOL WINAPI OemToCharBuffW(LPCSTR,LPWSTR,DWORD);
+WINUSERAPI BOOL WINAPI OemToCharW(LPCSTR,LPWSTR);
+WINUSERAPI BOOL WINAPI OffsetRect(LPRECT,int,int);
+WINUSERAPI BOOL WINAPI OpenClipboard(HWND);
+WINUSERAPI HDESK WINAPI OpenDesktopA(LPSTR,DWORD,BOOL,DWORD);
+WINUSERAPI HDESK WINAPI OpenDesktopW(LPWSTR,DWORD,BOOL,DWORD);
+WINUSERAPI BOOL WINAPI OpenIcon(HWND);
+WINUSERAPI HDESK WINAPI OpenInputDesktop(DWORD,BOOL,DWORD);
+WINUSERAPI HWINSTA WINAPI OpenWindowStationA(LPSTR,BOOL,DWORD);
+WINUSERAPI HWINSTA WINAPI OpenWindowStationW(LPWSTR,BOOL,DWORD);
+WINUSERAPI BOOL WINAPI PaintDesktop(HDC);
+WINUSERAPI BOOL WINAPI PeekMessageA(LPMSG,HWND,UINT,UINT,UINT);
+WINUSERAPI BOOL WINAPI PeekMessageW(LPMSG,HWND,UINT,UINT,UINT);
+#define PostAppMessageA(t,m,w,l) PostThreadMessageA((DWORD)t,m,w,l)
+#define PostAppMessageW(t,m,w,l) PostThreadMessageW((DWORD)t,m,w,l)
+WINUSERAPI BOOL WINAPI PostMessageA(HWND,UINT,WPARAM,LPARAM);
+WINUSERAPI BOOL WINAPI PostMessageW(HWND,UINT,WPARAM,LPARAM);
+WINUSERAPI void WINAPI PostQuitMessage(int);
+WINUSERAPI BOOL WINAPI PostThreadMessageA(DWORD,UINT,WPARAM,LPARAM);
+WINUSERAPI BOOL WINAPI PostThreadMessageW(DWORD,UINT,WPARAM,LPARAM);
+#if (_WIN32_WINNT >= 0x0501)
+WINUSERAPI BOOL WINAPI PrintWindow(HWND,HDC,UINT);
+#endif
+WINUSERAPI BOOL WINAPI PtInRect(LPCRECT,POINT);
+WINUSERAPI HWND WINAPI RealChildWindowFromPoint(HWND,POINT);
+WINUSERAPI UINT WINAPI RealGetWindowClassA(HWND,LPSTR,UINT);
+WINUSERAPI UINT WINAPI RealGetWindowClassW(HWND,LPWSTR,UINT);
+WINUSERAPI BOOL WINAPI RedrawWindow(HWND,LPCRECT,HRGN,UINT);
+WINUSERAPI ATOM WINAPI RegisterClassA(CONST WNDCLASSA*);
+WINUSERAPI ATOM WINAPI RegisterClassW(CONST WNDCLASSW*);
+WINUSERAPI ATOM WINAPI RegisterClassExA(CONST WNDCLASSEXA*);
+WINUSERAPI ATOM WINAPI RegisterClassExW(CONST WNDCLASSEXW*);
+WINUSERAPI UINT WINAPI RegisterClipboardFormatA(LPCSTR);
+WINUSERAPI UINT WINAPI RegisterClipboardFormatW(LPCWSTR);
+#if (WINVER >= 0x0500)
+WINUSERAPI HDEVNOTIFY WINAPI RegisterDeviceNotificationA(HANDLE,LPVOID,DWORD);
+WINUSERAPI HDEVNOTIFY WINAPI RegisterDeviceNotificationW(HANDLE,LPVOID,DWORD);
+#endif
+#if (_WIN32_WINNT >= 0x0600)
+WINUSERAPI HPOWERNOTIFY WINAPI RegisterPowerSettingNotification(HANDLE,LPCGUID,DWORD);
+#endif
+WINUSERAPI BOOL WINAPI RegisterHotKey(HWND,int,UINT,UINT);
+#if (_WIN32_WINNT >= 0x0501)
+WINUSERAPI BOOL WINAPI RegisterRawInputDevices(PCRAWINPUTDEVICE,UINT,UINT);
+#endif
+WINUSERAPI UINT WINAPI RegisterWindowMessageA(LPCSTR);
+WINUSERAPI UINT WINAPI RegisterWindowMessageW(LPCWSTR);
+WINUSERAPI BOOL WINAPI ReleaseCapture(void);
+WINUSERAPI int WINAPI ReleaseDC(HWND,HDC);
+WINUSERAPI BOOL WINAPI RemoveMenu(HMENU,UINT,UINT);
+WINUSERAPI HANDLE WINAPI RemovePropA(HWND,LPCSTR);
+WINUSERAPI HANDLE WINAPI RemovePropW(HWND,LPCWSTR);
+WINUSERAPI BOOL WINAPI ReplyMessage(LRESULT);
+WINUSERAPI BOOL WINAPI ScreenToClient(HWND,LPPOINT);
+WINUSERAPI BOOL WINAPI ScrollDC(HDC,int,int,LPCRECT,LPCRECT,HRGN,LPRECT);
+WINUSERAPI BOOL WINAPI ScrollWindow(HWND,int,int,LPCRECT,LPCRECT);
+WINUSERAPI int WINAPI ScrollWindowEx(HWND,int,int,LPCRECT,LPCRECT,HRGN,LPRECT,UINT);
+WINUSERAPI LONG WINAPI SendDlgItemMessageA(HWND,int,UINT,WPARAM,LPARAM);
+WINUSERAPI LONG WINAPI SendDlgItemMessageW(HWND,int,UINT,WPARAM,LPARAM);
+#if (_WIN32_WINNT >= 0x0403)
+WINUSERAPI UINT WINAPI SendInput(UINT,LPINPUT,int);
+#endif
+WINUSERAPI LRESULT WINAPI SendMessageA(HWND,UINT,WPARAM,LPARAM);
+WINUSERAPI BOOL WINAPI SendMessageCallbackA(HWND,UINT,WPARAM,LPARAM,SENDASYNCPROC,DWORD);
+WINUSERAPI BOOL WINAPI SendMessageCallbackW(HWND,UINT,WPARAM,LPARAM,SENDASYNCPROC,DWORD);
+WINUSERAPI LRESULT WINAPI SendMessageTimeoutA(HWND,UINT,WPARAM,LPARAM,UINT,UINT,PDWORD_PTR);
+WINUSERAPI LRESULT WINAPI SendMessageTimeoutW(HWND,UINT,WPARAM,LPARAM,UINT,UINT,PDWORD_PTR);
+WINUSERAPI LRESULT WINAPI SendMessageW(HWND,UINT,WPARAM,LPARAM);
+WINUSERAPI BOOL WINAPI SendNotifyMessageA(HWND,UINT,WPARAM,LPARAM);
+WINUSERAPI BOOL WINAPI SendNotifyMessageW(HWND,UINT,WPARAM,LPARAM);
+WINUSERAPI HWND WINAPI SetActiveWindow(HWND);
+WINUSERAPI HWND WINAPI SetCapture(HWND hWnd);
+WINUSERAPI BOOL WINAPI SetCaretBlinkTime(UINT);
+WINUSERAPI BOOL WINAPI SetCaretPos(int,int);
+WINUSERAPI DWORD WINAPI SetClassLongA(HWND,int,LONG);
+WINUSERAPI DWORD WINAPI SetClassLongW(HWND,int,LONG);
+#ifdef _WIN64
+WINUSERAPI ULONG_PTR WINAPI SetClassLongPtrA(HWND,int,LONG_PTR);
+WINUSERAPI ULONG_PTR WINAPI SetClassLongPtrW(HWND,int,LONG_PTR);
+#else
+#define SetClassLongPtrA SetClassLongA
+#define SetClassLongPtrW SetClassLongW
+#endif
+WINUSERAPI WORD WINAPI SetClassWord(HWND,int,WORD);
+WINUSERAPI HANDLE WINAPI SetClipboardData(UINT,HANDLE);
+WINUSERAPI HWND WINAPI SetClipboardViewer(HWND);
+WINUSERAPI HCURSOR WINAPI SetCursor(HCURSOR);
+WINUSERAPI BOOL WINAPI SetCursorPos(int,int);
+WINUSERAPI VOID WINAPI SetDebugErrorLevel(DWORD);
+WINUSERAPI BOOL WINAPI SetDlgItemInt(HWND,int,UINT,BOOL);
+WINUSERAPI BOOL WINAPI SetDlgItemTextA(HWND,int,LPCSTR);
+WINUSERAPI BOOL WINAPI SetDlgItemTextW(HWND,int,LPCWSTR);
+WINUSERAPI BOOL WINAPI SetDoubleClickTime(UINT);
+WINUSERAPI HWND WINAPI SetFocus(HWND);
+WINUSERAPI BOOL WINAPI SetForegroundWindow(HWND);
+WINUSERAPI BOOL WINAPI SetKeyboardState(PBYTE);
+WINUSERAPI BOOL WINAPI SetMenu(HWND,HMENU);
+WINUSERAPI BOOL WINAPI SetMenuContextHelpId(HMENU,DWORD);
+WINUSERAPI BOOL WINAPI SetMenuDefaultItem(HMENU,UINT,UINT);
+WINUSERAPI BOOL WINAPI SetMenuInfo(HMENU,LPCMENUINFO);
+WINUSERAPI BOOL WINAPI SetMenuItemBitmaps(HMENU,UINT,UINT,HBITMAP,HBITMAP);
+WINUSERAPI BOOL WINAPI SetMenuItemInfoA(HMENU,UINT,BOOL,LPCMENUITEMINFOA);
+WINUSERAPI BOOL WINAPI SetMenuItemInfoW( HMENU,UINT,BOOL,LPCMENUITEMINFOW);
+WINUSERAPI LPARAM WINAPI SetMessageExtraInfo(LPARAM);
+WINUSERAPI BOOL WINAPI SetMessageQueue(int);
+WINUSERAPI HWND WINAPI SetParent(HWND,HWND);
+#if (_WIN32_WINNT >= 0x0500)
+WINUSERAPI BOOL WINAPI SetProcessDefaultLayout(DWORD);
+#endif /* (_WIN32_WINNT >= 0x0500) */
+WINUSERAPI BOOL WINAPI SetProcessWindowStation(HWINSTA);
+WINUSERAPI BOOL WINAPI SetPropA(HWND,LPCSTR,HANDLE);
+WINUSERAPI BOOL WINAPI SetPropW(HWND,LPCWSTR,HANDLE);
+WINUSERAPI BOOL WINAPI SetRect(LPRECT,int,int,int,int);
+WINUSERAPI BOOL WINAPI SetRectEmpty(LPRECT);
+WINUSERAPI int WINAPI SetScrollInfo(HWND,int,LPCSCROLLINFO,BOOL);
+WINUSERAPI int WINAPI SetScrollPos(HWND,int,int,BOOL);
+WINUSERAPI BOOL WINAPI SetScrollRange(HWND,int,int,int,BOOL);
+WINUSERAPI BOOL WINAPI SetSysColors(int,const INT *,const COLORREF *);
+#define SetSysModalWindow(h) (NULL)
+WINUSERAPI BOOL WINAPI SetSystemCursor(HCURSOR,DWORD);
+WINUSERAPI BOOL WINAPI SetThreadDesktop(HDESK);
+WINUSERAPI UINT WINAPI SetTimer(HWND,UINT,UINT,TIMERPROC);
+WINUSERAPI BOOL WINAPI SetUserObjectInformationA(HANDLE,int,PVOID,DWORD);
+WINUSERAPI BOOL WINAPI SetUserObjectInformationW(HANDLE,int,PVOID,DWORD);
+WINUSERAPI BOOL WINAPI SetUserObjectSecurity(HANDLE,PSECURITY_INFORMATION,PSECURITY_DESCRIPTOR);
+#if (WINVER >= 0x0500)
+WINUSERAPI HWINEVENTHOOK WINAPI SetWinEventHook(UINT,UINT,HMODULE,WINEVENTPROC,DWORD,DWORD,UINT);
+#endif
+WINUSERAPI BOOL WINAPI SetWindowContextHelpId(HWND,DWORD);
+WINUSERAPI LONG WINAPI SetWindowLongA(HWND,int,LONG);
+WINUSERAPI LONG WINAPI SetWindowLongW(HWND,int,LONG);
+#ifdef _WIN64
+WINUSERAPI LONG_PTR WINAPI SetWindowLongPtrA(HWND,int,LONG_PTR);
+WINUSERAPI LONG_PTR WINAPI SetWindowLongPtrW(HWND,int,LONG_PTR);
+#else
+#define SetWindowLongPtrA SetWindowLongA
+#define SetWindowLongPtrW SetWindowLongW
+#endif
+WINUSERAPI BOOL WINAPI SetWindowPlacement(HWND hWnd,const WINDOWPLACEMENT*);
+WINUSERAPI BOOL WINAPI SetWindowPos(HWND,HWND,int,int,int,int,UINT);
+WINUSERAPI int WINAPI SetWindowRgn(HWND,HRGN,BOOL);
+WINUSERAPI HHOOK WINAPI SetWindowsHookA(int,HOOKPROC);
+WINUSERAPI HHOOK WINAPI SetWindowsHookW(int,HOOKPROC);
+WINUSERAPI HHOOK WINAPI SetWindowsHookExA(int,HOOKPROC,HINSTANCE,DWORD);
+WINUSERAPI HHOOK WINAPI SetWindowsHookExW(int,HOOKPROC,HINSTANCE,DWORD);
+WINUSERAPI BOOL WINAPI SetWindowTextA(HWND,LPCSTR);
+WINUSERAPI BOOL WINAPI SetWindowTextW(HWND,LPCWSTR);
+WINUSERAPI WORD WINAPI SetWindowWord(HWND,int,WORD);
+WINUSERAPI BOOL WINAPI ShowCaret(HWND);
+WINUSERAPI int WINAPI ShowCursor(BOOL);
+WINUSERAPI BOOL WINAPI ShowOwnedPopups(HWND,BOOL);
+WINUSERAPI BOOL WINAPI ShowScrollBar(HWND,int,BOOL);
+WINUSERAPI BOOL WINAPI ShowWindow(HWND,int);
+WINUSERAPI BOOL WINAPI ShowWindowAsync(HWND,int);
+WINUSERAPI BOOL WINAPI SubtractRect(LPRECT,LPCRECT,LPCRECT);
+WINUSERAPI BOOL WINAPI SwapMouseButton(BOOL);
+WINUSERAPI BOOL WINAPI SwitchDesktop(HDESK);
+#if(_WIN32_WINNT >= 0x0500)
+WINUSERAPI VOID WINAPI SwitchToThisWindow(HWND,BOOL);
+#endif /* (_WIN32_WINNT >= 0x0500) */
+WINUSERAPI BOOL WINAPI SystemParametersInfoA(UINT,UINT,PVOID,UINT);
+WINUSERAPI BOOL WINAPI SystemParametersInfoW(UINT,UINT,PVOID,UINT);
+WINUSERAPI LONG WINAPI TabbedTextOutA(HDC,int,int,LPCSTR,int,int,LPINT,int);
+WINUSERAPI LONG WINAPI TabbedTextOutW(HDC,int,int,LPCWSTR,int,int,LPINT,int);
+WINUSERAPI WORD WINAPI TileWindows(HWND,UINT,LPCRECT,UINT,const HWND *);
+WINUSERAPI int WINAPI ToAscii(UINT,UINT,PBYTE,LPWORD,UINT);
+WINUSERAPI int WINAPI ToAsciiEx(UINT,UINT,PBYTE,LPWORD,UINT,HKL);
+WINUSERAPI int WINAPI ToUnicode(UINT,UINT,PBYTE,LPWSTR,int,UINT);
+WINUSERAPI int WINAPI ToUnicodeEx(UINT,UINT,PBYTE,LPWSTR,int,UINT,HKL);
+WINUSERAPI BOOL WINAPI TrackMouseEvent(LPTRACKMOUSEEVENT);
+WINUSERAPI BOOL WINAPI TrackPopupMenu(HMENU,UINT,int,int,int,HWND,LPCRECT);
+WINUSERAPI BOOL WINAPI TrackPopupMenuEx(HMENU,UINT,int,int,HWND,LPTPMPARAMS);
+WINUSERAPI int WINAPI TranslateAcceleratorA(HWND,HACCEL,LPMSG);
+WINUSERAPI int WINAPI TranslateAcceleratorW(HWND,HACCEL,LPMSG);
+WINUSERAPI BOOL WINAPI TranslateMDISysAccel(HWND,LPMSG);
+WINUSERAPI BOOL WINAPI TranslateMessage(const MSG*);
+WINUSERAPI BOOL WINAPI UnhookWindowsHook(int,HOOKPROC);
+WINUSERAPI BOOL WINAPI UnhookWindowsHookEx(HHOOK);
+#if (WINVER >= 0x0500)
+WINUSERAPI BOOL WINAPI UnhookWinEvent(HWINEVENTHOOK);
+#endif
+WINUSERAPI BOOL WINAPI UnionRect(LPRECT,LPCRECT,LPCRECT);
+WINUSERAPI BOOL WINAPI UnloadKeyboardLayout(HKL);
+WINUSERAPI BOOL WINAPI UnregisterClassA(LPCSTR,HINSTANCE);
+WINUSERAPI BOOL WINAPI UnregisterClassW(LPCWSTR,HINSTANCE);
+#if (_WIN32_WINDOWS >= 0x0410 || _WIN32_WINNT >= 0x0500)
+WINUSERAPI BOOL WINAPI UnregisterDeviceNotification(HANDLE);
+#endif
+#if (_WIN32_WINNT >= 0x0600)
+WINUSERAPI BOOL WINAPI UnregisterPowerSettingNotification(HPOWERNOTIFY);
+#endif
+WINUSERAPI BOOL WINAPI UnregisterHotKey(HWND,int);
+WINUSERAPI BOOL WINAPI UpdateWindow(HWND);
+#if (_WIN32_WINNT >= 0x0500)
+WINUSERAPI BOOL WINAPI UserHandleGrantAccess(HANDLE,HANDLE,BOOL);
+#endif
+WINUSERAPI BOOL WINAPI ValidateRect(HWND,LPCRECT);
+WINUSERAPI BOOL WINAPI ValidateRgn(HWND,HRGN);
+WINUSERAPI SHORT WINAPI VkKeyScanA(CHAR);
+WINUSERAPI SHORT WINAPI VkKeyScanExA(CHAR,HKL);
+WINUSERAPI SHORT WINAPI VkKeyScanExW(WCHAR,HKL);
+WINUSERAPI SHORT WINAPI VkKeyScanW(WCHAR);
+WINUSERAPI DWORD WINAPI WaitForInputIdle(HANDLE,DWORD);
+WINUSERAPI BOOL WINAPI WaitMessage(void);
+WINUSERAPI HWND WINAPI WindowFromDC(HDC hDC);
+WINUSERAPI HWND WINAPI WindowFromPoint(POINT);
+WINUSERAPI UINT WINAPI WinExec(LPCSTR,UINT);
+WINUSERAPI BOOL WINAPI WinHelpA(HWND,LPCSTR,UINT,DWORD);
+WINUSERAPI BOOL WINAPI WinHelpW(HWND,LPCWSTR,UINT,DWORD);
+WINUSERAPI int WINAPIV wsprintfA(LPSTR,LPCSTR,...);
+WINUSERAPI int WINAPIV wsprintfW(LPWSTR,LPCWSTR,...);
+WINUSERAPI int WINAPI wvsprintfA(LPSTR,LPCSTR,va_list arglist);
+WINUSERAPI int WINAPI wvsprintfW(LPWSTR,LPCWSTR,va_list arglist);
+#if (_WIN32_WINNT >= 0x0500 || _WIN32_WINDOWS >= 0x0490)
+WINUSERAPI BOOL WINAPI AllowSetForegroundWindow(DWORD);
+WINUSERAPI BOOL WINAPI LockSetForegroundWindow(UINT);
+#endif
+#if (_WIN32_WINNT >= 0x0500)
+WINUSERAPI BOOL WINAPI SetLayeredWindowAttributes(HWND,COLORREF,BYTE,DWORD);
+#ifndef NOGDI
+WINUSERAPI BOOL WINAPI UpdateLayeredWindow(HWND,HDC,POINT*,SIZE*,HDC,POINT*,COLORREF,BLENDFUNCTION*,DWORD);
+#endif
+#endif
+#if (_WIN32_WINNT >= 0x0501)
+WINUSERAPI BOOL WINAPI GetLayeredWindowAttributes(HWND,COLORREF*,BYTE*,DWORD*);
+#endif
+
+#if (_WIN32_WINNT >= 0x0601)
+BOOL WINAPI CloseTouchInputHandle(HANDLE hTouchInput);
+BOOL WINAPI GetTouchInputInfo(HANDLE hTouchInput, UINT cInputs, PTOUCHINPUT pInputs, int cbSize);
+BOOL WINAPI IsTouchWindow(HWND hWnd, PULONG pulFlags);
+BOOL WINAPI RegisterTouchWindow(HWND hWnd, ULONG ulFlags);
+BOOL WINAPI UnregisterTouchWindow(HWND hWnd);
+#endif
+
+#ifdef UNICODE
+#define EDITWORDBREAKPROC EDITWORDBREAKPROCW
+#define PROPENUMPROC PROPENUMPROCW
+#define PROPENUMPROCEX PROPENUMPROCEXW
+#define DEKSTOPENUMPROC DEKSTOPENUMPROCW
+#define WINSTAENUMPROC WINSTAENUMPROCW
+#define PROPENUMPROC PROPENUMPROCW
+#define PROPENUMPROCEX PROPENUMPROCEXW
+#define MAKEINTRESOURCE MAKEINTRESOURCEW
+typedef WNDCLASSW WNDCLASS,*LPWNDCLASS,*PWNDCLASS;
+typedef WNDCLASSEXW WNDCLASSEX,*LPWNDCLASSEX,*PWNDCLASSEX;
+typedef MENUITEMINFOW MENUITEMINFO,*LPMENUITEMINFO;
+typedef LPCMENUITEMINFOW LPCMENUITEMINFO;
+typedef MSGBOXPARAMSW MSGBOXPARAMS,*PMSGBOXPARAMS,*LPMSGBOXPARAMS;
+typedef HIGHCONTRASTW HIGHCONTRAST,*LPHIGHCONTRAST;
+typedef SERIALKEYSW SERIALKEYS,*LPSERIALKEYS;
+typedef SOUNDSENTRYW SOUNDSENTRY,*LPSOUNDSENTRY;
+typedef CREATESTRUCTW CREATESTRUCT, *LPCREATESTRUCT;
+typedef CBT_CREATEWNDW CBT_CREATEWND, *LPCBT_CREATEWND;
+typedef MDICREATESTRUCTW MDICREATESTRUCT,*LPMDICREATESTRUCT;
+typedef MULTIKEYHELPW MULTIKEYHELP,*PMULTIKEYHELP,*LPMULTIKEYHELP;
+typedef MONITORINFOEXW MONITORINFOEX, *LPMONITORINFOEX;
+#define AppendMenu AppendMenuW
+#define BroadcastSystemMessage BroadcastSystemMessageW
+#define BroadcastSystemMessageEx BroadcastSystemMessageExW
+#define CallMsgFilter CallMsgFilterW
+#define CallWindowProc CallWindowProcW
+#define ChangeMenu ChangeMenuW
+#define CharLower CharLowerW
+#define CharLowerBuff CharLowerBuffW
+#define CharNext CharNextW
+#define CharPrev CharPrevW
+#define CharToOem CharToOemW
+#define CharToOemBuff CharToOemBuffW
+#define CharUpper CharUpperW
+#define CharUpperBuff CharUpperBuffW
+#define CopyAcceleratorTable CopyAcceleratorTableW
+#define CreateAcceleratorTable CreateAcceleratorTableW
+#define CreateDialog CreateDialogW
+#define CreateDialogIndirect CreateDialogIndirectW
+#define CreateDialogIndirectParam CreateDialogIndirectParamW
+#define CreateDialogParam CreateDialogParamW
+#define CreateMDIWindow CreateMDIWindowW
+#define CreateWindow CreateWindowW
+#define CreateWindowEx CreateWindowExW
+#define CreateWindowStation CreateWindowStationW
+#define DefDlgProc DefDlgProcW
+#define DefFrameProc DefFrameProcW
+#define DefMDIChildProc DefMDIChildProcW
+#define DefWindowProc DefWindowProcW
+#define DialogBox DialogBoxW
+#define DialogBoxIndirect DialogBoxIndirectW
+#define DialogBoxIndirectParam DialogBoxIndirectParamW
+#define DialogBoxParam DialogBoxParamW
+#define DispatchMessage DispatchMessageW
+#define DlgDirList DlgDirListW
+#define DlgDirListComboBox DlgDirListComboBoxW
+#define DlgDirSelectComboBoxEx DlgDirSelectComboBoxExW
+#define DlgDirSelectEx DlgDirSelectExW
+#define DrawState DrawStateW
+#define DrawText DrawTextW
+#define DrawTextEx DrawTextExW
+#define EnumDesktops EnumDesktopsW
+#define EnumProps EnumPropsW
+#define EnumPropsEx EnumPropsExW
+#define EnumWindowStations EnumWindowStationsW
+#define FindWindow FindWindowW
+#define FindWindowEx FindWindowExW
+#define GetClassInfo GetClassInfoW
+#define GetClassInfoEx GetClassInfoExW
+#define GetClassLong GetClassLongW
+#define GetClassLongPtr GetClassLongPtrW
+#define GetClassName GetClassNameW
+#define GetClipboardFormatName GetClipboardFormatNameW
+#define GetDlgItemText GetDlgItemTextW
+#define GetKeyboardLayoutName GetKeyboardLayoutNameW
+#define GetKeyNameText GetKeyNameTextW
+#define GetMenuItemInfo GetMenuItemInfoW
+#define GetMenuString GetMenuStringW
+#define GetMessage GetMessageW
+#define GetMonitorInfo GetMonitorInfoW
+#define GetProp GetPropW
+#define GetRawInputDeviceInfo GetRawInputDeviceInfoW
+#define GetTabbedTextExtent GetTabbedTextExtentW
+#define GetUserObjectInformation GetUserObjectInformationW
+#define GetWindowLong GetWindowLongW
+#define GetWindowLongPtr GetWindowLongPtrW
+#define GetWindowText GetWindowTextW
+#define GetWindowTextLength GetWindowTextLengthW
+#define GetAltTabInfo GetAltTabInfoW
+#define GetWindowModuleFileName GetWindowModuleFileNameW
+#define GrayString GrayStringW
+#define InsertMenu InsertMenuW
+#define InsertMenuItem InsertMenuItemW
+#define IsCharAlpha IsCharAlphaW
+#define IsCharAlphaNumeric IsCharAlphaNumericW
+#define IsCharLower IsCharLowerW
+#define IsCharUpper IsCharUpperW
+#define IsDialogMessage IsDialogMessageW
+#define LoadAccelerators LoadAcceleratorsW
+#define LoadBitmap LoadBitmapW
+#define LoadCursor LoadCursorW
+#define LoadCursorFromFile LoadCursorFromFileW
+#define LoadIcon LoadIconW
+#define LoadImage LoadImageW
+#define LoadKeyboardLayout LoadKeyboardLayoutW
+#define LoadMenu LoadMenuW
+#define LoadMenuIndirect LoadMenuIndirectW
+#define LoadString LoadStringW
+#define MapVirtualKey MapVirtualKeyW
+#define MapVirtualKeyEx MapVirtualKeyExW
+#define MessageBox MessageBoxW
+#define MessageBoxEx MessageBoxExW
+#define MessageBoxIndirect MessageBoxIndirectW
+#define ModifyMenu ModifyMenuW
+#define OemToChar OemToCharW
+#define OemToCharBuff OemToCharBuffW
+#define OpenDesktop OpenDesktopW
+#define OpenWindowStation OpenWindowStationW
+#define PeekMessage PeekMessageW
+#define PostAppMessage PostAppMessageW
+#define PostMessage PostMessageW
+#define PostThreadMessage PostThreadMessageW
+#define RealGetWindowClass RealGetWindowClassW
+#define RegisterClass RegisterClassW
+#define RegisterClassEx RegisterClassExW
+#define RegisterClipboardFormat RegisterClipboardFormatW
+#define RegisterDeviceNotification RegisterDeviceNotificationW
+#define RegisterWindowMessage RegisterWindowMessageW
+#define RemoveProp RemovePropW
+#define SendDlgItemMessage SendDlgItemMessageW
+#define SendMessage SendMessageW
+#define SendMessageCallback SendMessageCallbackW
+#define SendMessageTimeout SendMessageTimeoutW
+#define SendNotifyMessage SendNotifyMessageW
+#define SetClassLong SetClassLongW
+#define SetClassLongPtr SetClassLongPtrW
+#define SetDlgItemText SetDlgItemTextW
+#define SetMenuItemInfo SetMenuItemInfoW
+#define SetProp SetPropW
+#define SetUserObjectInformation SetUserObjectInformationW
+#define SetWindowLong SetWindowLongW
+#define SetWindowLongPtr SetWindowLongPtrW
+#define SetWindowsHook SetWindowsHookW
+#define SetWindowsHookEx SetWindowsHookExW
+#define SetWindowText SetWindowTextW
+#define SystemParametersInfo SystemParametersInfoW
+#define TabbedTextOut TabbedTextOutW
+#define TranslateAccelerator TranslateAcceleratorW
+#define UnregisterClass UnregisterClassW
+#define VkKeyScan VkKeyScanW
+#define VkKeyScanEx VkKeyScanExW
+#define WinHelp WinHelpW
+#define wsprintf wsprintfW
+#define wvsprintf wvsprintfW
+#ifndef NOGDI
+typedef ICONMETRICSW ICONMETRICS,*LPICONMETRICS;
+typedef NONCLIENTMETRICSW NONCLIENTMETRICS,*LPNONCLIENTMETRICS;
+#define ChangeDisplaySettings ChangeDisplaySettingsW
+#define ChangeDisplaySettingsEx ChangeDisplaySettingsExW
+#define CreateDesktop CreateDesktopW
+#define EnumDisplaySettings EnumDisplaySettingsW
+#define EnumDisplaySettingsEx EnumDisplaySettingsExW
+#define EnumDisplayDevices EnumDisplayDevicesW
+#endif /* NOGDI */
+#else /* UNICODE */
+#define EDITWORDBREAKPROC EDITWORDBREAKPROCA
+#define PROPENUMPROC PROPENUMPROCA
+#define PROPENUMPROCEX PROPENUMPROCEXA
+#define DEKSTOPENUMPROC DEKSTOPENUMPROCA
+#define WINSTAENUMPROC WINSTAENUMPROCA
+#define PROPENUMPROC PROPENUMPROCA
+#define PROPENUMPROCEX PROPENUMPROCEXA
+#define MAKEINTRESOURCE MAKEINTRESOURCEA
+typedef WNDCLASSA WNDCLASS,*LPWNDCLASS,*PWNDCLASS;
+typedef WNDCLASSEXA WNDCLASSEX,*LPWNDCLASSEX,*PWNDCLASSEX;
+typedef MENUITEMINFOA MENUITEMINFO,*LPMENUITEMINFO;
+typedef LPCMENUITEMINFOA LPCMENUITEMINFO;
+typedef MSGBOXPARAMSA MSGBOXPARAMS,*PMSGBOXPARAMS,*LPMSGBOXPARAMS;
+typedef HIGHCONTRASTA HIGHCONTRAST,*LPHIGHCONTRAST;
+typedef SERIALKEYSA SERIALKEYS,*LPSERIALKEYS;
+typedef SOUNDSENTRYA SOUNDSENTRY,*LPSOUNDSENTRY;
+typedef CREATESTRUCTA CREATESTRUCT, *LPCREATESTRUCT;
+typedef CBT_CREATEWNDA CBT_CREATEWND, *LPCBT_CREATEWND;
+typedef MDICREATESTRUCTA MDICREATESTRUCT,*LPMDICREATESTRUCT;
+typedef MULTIKEYHELPA MULTIKEYHELP,*PMULTIKEYHELP,*LPMULTIKEYHELP;
+typedef MONITORINFOEXA MONITORINFOEX, *LPMONITORINFOEX;
+#define AppendMenu AppendMenuA
+#define BroadcastSystemMessage BroadcastSystemMessageA
+#define BroadcastSystemMessageEx BroadcastSystemMessageExA
+#define CallMsgFilter CallMsgFilterA
+#define CallWindowProc CallWindowProcA
+#define ChangeMenu ChangeMenuA
+#define CharLower CharLowerA
+#define CharLowerBuff CharLowerBuffA
+#define CharNext CharNextA
+#define CharPrev CharPrevA
+#define CharToOem CharToOemA
+#define CharToOemBuff CharToOemBuffA
+#define CharUpper CharUpperA
+#define CharUpperBuff CharUpperBuffA
+#define CopyAcceleratorTable CopyAcceleratorTableA
+#define CreateAcceleratorTable CreateAcceleratorTableA
+#define CreateDialog CreateDialogA
+#define CreateDialogIndirect CreateDialogIndirectA
+#define CreateDialogIndirectParam CreateDialogIndirectParamA
+#define CreateDialogParam CreateDialogParamA
+#define CreateMDIWindow CreateMDIWindowA
+#define CreateWindow CreateWindowA
+#define CreateWindowEx CreateWindowExA
+#define CreateWindowStation CreateWindowStationA
+#define DefDlgProc DefDlgProcA
+#define DefFrameProc DefFrameProcA
+#define DefMDIChildProc DefMDIChildProcA
+#define DefWindowProc DefWindowProcA
+#define DialogBox DialogBoxA
+#define DialogBoxIndirect DialogBoxIndirectA
+#define DialogBoxIndirectParam DialogBoxIndirectParamA
+#define DialogBoxParam DialogBoxParamA
+#define DispatchMessage DispatchMessageA
+#define DlgDirList DlgDirListA
+#define DlgDirListComboBox DlgDirListComboBoxA
+#define DlgDirSelectComboBoxEx DlgDirSelectComboBoxExA
+#define DlgDirSelectEx DlgDirSelectExA
+#define DrawState DrawStateA
+#define DrawText DrawTextA
+#define DrawTextEx DrawTextExA
+#define EnumDesktops EnumDesktopsA
+#define EnumProps EnumPropsA
+#define EnumPropsEx EnumPropsExA
+#define EnumWindowStations EnumWindowStationsA
+#define FindWindow FindWindowA
+#define FindWindowEx FindWindowExA
+#define GetClassInfo GetClassInfoA
+#define GetClassInfoEx GetClassInfoExA
+#define GetClassLong GetClassLongA
+#define GetClassLongPtr GetClassLongPtrA
+#define GetClassName GetClassNameA
+#define GetClipboardFormatName GetClipboardFormatNameA
+#define GetDlgItemText GetDlgItemTextA
+#define GetKeyboardLayoutName GetKeyboardLayoutNameA
+#define GetKeyNameText GetKeyNameTextA
+#define GetMenuItemInfo GetMenuItemInfoA
+#define GetMenuString GetMenuStringA
+#define GetMessage GetMessageA
+#define GetMonitorInfo GetMonitorInfoA
+#define GetProp GetPropA
+#define GetRawInputDeviceInfo GetRawInputDeviceInfoA
+#define GetTabbedTextExtent GetTabbedTextExtentA
+#define GetUserObjectInformation GetUserObjectInformationA
+#define GetWindowLong GetWindowLongA
+#define GetWindowLongPtr GetWindowLongPtrA
+#define GetWindowText GetWindowTextA
+#define GetWindowTextLength GetWindowTextLengthA
+#define GetAltTabInfo GetAltTabInfoA
+#define GetWindowModuleFileName GetWindowModuleFileNameA
+#define GrayString GrayStringA
+#define InsertMenu InsertMenuA
+#define InsertMenuItem InsertMenuItemA
+#define IsCharAlpha IsCharAlphaA
+#define IsCharAlphaNumeric IsCharAlphaNumericA
+#define IsCharLower IsCharLowerA
+#define IsCharUpper IsCharUpperA
+#define IsDialogMessage IsDialogMessageA
+#define LoadAccelerators LoadAcceleratorsA
+#define LoadBitmap LoadBitmapA
+#define LoadCursor LoadCursorA
+#define LoadIcon LoadIconA
+#define LoadCursorFromFile LoadCursorFromFileA
+#define LoadImage LoadImageA
+#define LoadKeyboardLayout LoadKeyboardLayoutA
+#define LoadMenu LoadMenuA
+#define LoadMenuIndirect LoadMenuIndirectA
+#define LoadString LoadStringA
+#define MapVirtualKey MapVirtualKeyA
+#define MapVirtualKeyEx MapVirtualKeyExA
+#define MessageBox MessageBoxA
+#define MessageBoxEx MessageBoxExA
+#define MessageBoxIndirect MessageBoxIndirectA
+#define ModifyMenu ModifyMenuA
+#define OemToChar OemToCharA
+#define OemToCharBuff OemToCharBuffA
+#define OpenDesktop OpenDesktopA
+#define OpenWindowStation OpenWindowStationA
+#define PeekMessage PeekMessageA
+#define PostAppMessage PostAppMessageA
+#define PostMessage PostMessageA
+#define PostThreadMessage PostThreadMessageA
+#define RealGetWindowClass RealGetWindowClassA
+#define RegisterClass RegisterClassA
+#define RegisterClassEx RegisterClassExA
+#define RegisterClipboardFormat RegisterClipboardFormatA
+#define RegisterDeviceNotification RegisterDeviceNotificationA
+#define RegisterWindowMessage RegisterWindowMessageA
+#define RemoveProp RemovePropA
+#define SendDlgItemMessage SendDlgItemMessageA
+#define SendMessage SendMessageA
+#define SendMessageCallback SendMessageCallbackA
+#define SendMessageTimeout SendMessageTimeoutA
+#define SendNotifyMessage SendNotifyMessageA
+#define SetClassLong SetClassLongA
+#define SetClassLongPtr SetClassLongPtrA
+#define SetDlgItemText SetDlgItemTextA
+#define SetMenuItemInfo SetMenuItemInfoA
+#define SetProp SetPropA
+#define SetUserObjectInformation SetUserObjectInformationA
+#define SetWindowLong SetWindowLongA
+#define SetWindowLongPtr SetWindowLongPtrA
+#define SetWindowsHook SetWindowsHookA
+#define SetWindowsHookEx SetWindowsHookExA
+#define SetWindowText SetWindowTextA
+#define SystemParametersInfo SystemParametersInfoA
+#define TabbedTextOut TabbedTextOutA
+#define TranslateAccelerator TranslateAcceleratorA
+#define UnregisterClass UnregisterClassA
+#define VkKeyScan VkKeyScanA
+#define VkKeyScanEx VkKeyScanExA
+#define WinHelp WinHelpA
+#define wsprintf wsprintfA
+#define wvsprintf wvsprintfA
+#ifndef NOGDI
+typedef ICONMETRICSA ICONMETRICS,*LPICONMETRICS;
+typedef NONCLIENTMETRICSA NONCLIENTMETRICS,*LPNONCLIENTMETRICS;
+#define ChangeDisplaySettings ChangeDisplaySettingsA
+#define ChangeDisplaySettingsEx ChangeDisplaySettingsExA
+#define CreateDesktop CreateDesktopA
+#define EnumDisplaySettings EnumDisplaySettingsA
+#define EnumDisplaySettingsEx EnumDisplaySettingsExA
+#define EnumDisplayDevices EnumDisplayDevicesA
+#endif /* NOGDI */
+#endif /* UNICODE */
+#endif /* RC_INVOKED */
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/winver.h b/tcc/include/winapi/winver.h
new file mode 100644
index 0000000..9f8c9b7
--- /dev/null
+++ b/tcc/include/winapi/winver.h
@@ -0,0 +1,133 @@
+#ifndef _WINVER_H
+#define _WINVER_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#define VS_FILE_INFO RT_VERSION
+#define VS_VERSION_INFO 1
+#define VS_USER_DEFINED 100
+#define VS_FFI_SIGNATURE 0xFEEF04BD
+#define VS_FFI_STRUCVERSION 0x10000
+#define VS_FFI_FILEFLAGSMASK 0x3F
+#define VS_FF_DEBUG 1
+#define VS_FF_PRERELEASE 2
+#define VS_FF_PATCHED 4
+#define VS_FF_PRIVATEBUILD 8
+#define VS_FF_INFOINFERRED 16
+#define VS_FF_SPECIALBUILD 32
+#define VOS_UNKNOWN 0
+#define VOS_DOS 0x10000
+#define VOS_OS216 0x20000
+#define VOS_OS232 0x30000
+#define VOS_NT 0x40000
+#define VOS__BASE 0
+#define VOS__WINDOWS16 1
+#define VOS__PM16 2
+#define VOS__PM32 3
+#define VOS__WINDOWS32 4
+#define VOS_DOS_WINDOWS16 0x10001
+#define VOS_DOS_WINDOWS32 0x10004
+#define VOS_OS216_PM16 0x20002
+#define VOS_OS232_PM32 0x30003
+#define VOS_NT_WINDOWS32 0x40004
+#define VFT_UNKNOWN 0
+#define VFT_APP 1
+#define VFT_DLL 2
+#define VFT_DRV 3
+#define VFT_FONT 4
+#define VFT_VXD 5
+#define VFT_STATIC_LIB 7
+#define VFT2_UNKNOWN 0
+#define VFT2_DRV_PRINTER 1
+#define VFT2_DRV_KEYBOARD 2
+#define VFT2_DRV_LANGUAGE 3
+#define VFT2_DRV_DISPLAY 4
+#define VFT2_DRV_MOUSE 5
+#define VFT2_DRV_NETWORK 6
+#define VFT2_DRV_SYSTEM 7
+#define VFT2_DRV_INSTALLABLE 8
+#define VFT2_DRV_SOUND 9
+#define VFT2_DRV_COMM 10
+#define VFT2_DRV_INPUTMETHOD 11
+#define VFT2_FONT_RASTER 1
+#define VFT2_FONT_VECTOR 2
+#define VFT2_FONT_TRUETYPE 3
+#define VFFF_ISSHAREDFILE 1
+#define VFF_CURNEDEST 1
+#define VFF_FILEINUSE 2
+#define VFF_BUFFTOOSMALL 4
+#define VIFF_FORCEINSTALL 1
+#define VIFF_DONTDELETEOLD 2
+#define VIF_TEMPFILE 1
+#define VIF_MISMATCH 2
+#define VIF_SRCOLD 4
+#define VIF_DIFFLANG 8
+#define VIF_DIFFCODEPG 16
+#define VIF_DIFFTYPE 32
+#define VIF_WRITEPROT 64
+#define VIF_FILEINUSE 128
+#define VIF_OUTOFSPACE 256
+#define VIF_ACCESSVIOLATION 512
+#define VIF_SHARINGVIOLATION 1024
+#define VIF_CANNOTCREATE 2048
+#define VIF_CANNOTDELETE 4096
+#define VIF_CANNOTRENAME 8192
+#define VIF_CANNOTDELETECUR 16384
+#define VIF_OUTOFMEMORY 32768
+#define VIF_CANNOTREADSRC 65536
+#define VIF_CANNOTREADDST 0x20000
+#define VIF_BUFFTOOSMALL 0x40000
+#ifndef RC_INVOKED
+typedef struct tagVS_FIXEDFILEINFO {
+ DWORD dwSignature;
+ DWORD dwStrucVersion;
+ DWORD dwFileVersionMS;
+ DWORD dwFileVersionLS;
+ DWORD dwProductVersionMS;
+ DWORD dwProductVersionLS;
+ DWORD dwFileFlagsMask;
+ DWORD dwFileFlags;
+ DWORD dwFileOS;
+ DWORD dwFileType;
+ DWORD dwFileSubtype;
+ DWORD dwFileDateMS;
+ DWORD dwFileDateLS;
+} VS_FIXEDFILEINFO;
+DWORD WINAPI VerFindFileA(DWORD,LPSTR,LPSTR,LPSTR,LPSTR,PUINT,LPSTR,PUINT);
+DWORD WINAPI VerFindFileW(DWORD,LPWSTR,LPWSTR,LPWSTR,LPWSTR,PUINT,LPWSTR,PUINT);
+DWORD WINAPI VerInstallFileA(DWORD,LPSTR,LPSTR,LPSTR,LPSTR,LPSTR,LPSTR,PUINT);
+DWORD WINAPI VerInstallFileW(DWORD,LPWSTR,LPWSTR,LPWSTR,LPWSTR,LPWSTR,LPWSTR,PUINT);
+DWORD WINAPI GetFileVersionInfoSizeA(LPCSTR,PDWORD);
+DWORD WINAPI GetFileVersionInfoSizeW(LPCWSTR,PDWORD);
+BOOL WINAPI GetFileVersionInfoA(LPCSTR,DWORD,DWORD,PVOID);
+BOOL WINAPI GetFileVersionInfoW(LPCWSTR,DWORD,DWORD,PVOID);
+DWORD WINAPI VerLanguageNameA(DWORD,LPSTR,DWORD);
+DWORD WINAPI VerLanguageNameW(DWORD,LPWSTR,DWORD);
+BOOL WINAPI VerQueryValueA(const LPVOID,LPCSTR,LPVOID*,PUINT);
+BOOL WINAPI VerQueryValueW(const LPVOID,LPCWSTR,LPVOID*,PUINT);
+#ifdef UNICODE
+#define VerFindFile VerFindFileW
+#define VerQueryValue VerQueryValueW
+#define VerInstallFile VerInstallFileW
+#define GetFileVersionInfoSize GetFileVersionInfoSizeW
+#define GetFileVersionInfo GetFileVersionInfoW
+#define VerLanguageName VerLanguageNameW
+#define VerQueryValue VerQueryValueW
+#else
+#define VerQueryValue VerQueryValueA
+#define VerFindFile VerFindFileA
+#define VerInstallFile VerInstallFileA
+#define GetFileVersionInfoSize GetFileVersionInfoSizeA
+#define GetFileVersionInfo GetFileVersionInfoA
+#define VerLanguageName VerLanguageNameA
+#define VerQueryValue VerQueryValueA
+#endif
+#endif
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/ws2spi.h b/tcc/include/winapi/ws2spi.h
new file mode 100644
index 0000000..7961710
--- /dev/null
+++ b/tcc/include/winapi/ws2spi.h
@@ -0,0 +1,202 @@
+/*
+ * ws2spi.h
+ *
+ * Winsock 2 Service Provider Interface.
+ *
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+#ifndef _WS2SPI_H
+#define _WS2SPI_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#include <winsock2.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#define WSPAPI WSAAPI
+#define WSPDESCRIPTION_LEN 255
+
+#ifndef RC_INVOKED
+
+typedef struct WSPData {
+ WORD wVersion;
+ WORD wHighVersion;
+ WCHAR szDescription[WSPDESCRIPTION_LEN+1];
+} WSPDATA, FAR *LPWSPDATA;
+typedef struct _WSATHREADID {
+ HANDLE ThreadHandle;
+ DWORD Reserved;
+} WSATHREADID, FAR *LPWSATHREADID;
+
+typedef BOOL (CALLBACK FAR *LPBLOCKINGCALLBACK)(DWORD);
+typedef VOID (CALLBACK FAR *LPWSAUSERAPC)(DWORD);
+
+/* Prototypes for service provider procedure table */
+typedef SOCKET (WSPAPI *LPWSPACCEPT)(SOCKET,LPSOCKADDR,LPINT,LPCONDITIONPROC,DWORD,LPINT);
+typedef INT (WSPAPI *LPWSPADDRESSTOSTRING)(LPSOCKADDR,DWORD,LPWSAPROTOCOL_INFOW,LPWSTR,LPDWORD,LPINT);
+typedef INT (WSPAPI *LPWSPASYNCSELECT)(SOCKET,HWND,UINT,LONG,LPINT);
+typedef INT (WSPAPI *LPWSPBIND)(SOCKET,const struct sockaddr*,INT,LPINT);
+typedef INT (WSPAPI *LPWSPCANCELBLOCKINGCALL)(LPINT);
+typedef INT (WSPAPI *LPWSPCLEANUP)(LPINT);
+typedef INT (WSPAPI *LPWSPCLOSESOCKET)(SOCKET,LPINT);
+typedef INT (WSPAPI *LPWSPCONNECT)(SOCKET,const struct sockaddr*,INT,LPWSABUF,LPWSABUF,LPQOS,LPQOS,LPINT);
+typedef INT (WSPAPI *LPWSPDUPLICATESOCKET)(SOCKET,DWORD,LPWSAPROTOCOL_INFOW,LPINT);
+typedef INT (WSPAPI *LPWSPENUMNETWORKEVENTS)(SOCKET,WSAEVENT,LPWSANETWORKEVENTS,LPINT);
+typedef INT (WSPAPI *LPWSPEVENTSELECT)(SOCKET,WSAEVENT,LONG,LPINT);
+typedef BOOL (WSPAPI *LPWSPGETOVERLAPPEDRESULT)(SOCKET,LPWSAOVERLAPPED,LPDWORD,BOOL,LPDWORD,LPINT);
+typedef INT (WSPAPI *LPWSPGETPEERNAME)(SOCKET,LPSOCKADDR,LPINT,LPINT);
+typedef BOOL (WSPAPI *LPWSPGETQOSBYNAME)(SOCKET,LPWSABUF,LPQOS,LPINT);
+typedef INT (WSPAPI *LPWSPGETSOCKNAME)(SOCKET,LPSOCKADDR,LPINT,LPINT);
+typedef INT (WSPAPI *LPWSPGETSOCKOPT)(SOCKET,INT,INT,CHAR FAR*,LPINT,LPINT);
+typedef INT (WSPAPI *LPWSPIOCTL)(SOCKET,DWORD,LPVOID,DWORD,LPVOID,DWORD,LPDWORD,
+ LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE,LPWSATHREADID,LPINT);
+typedef SOCKET (WSPAPI *LPWSPJOINLEAF)(SOCKET,const struct sockaddr*,INT,LPWSABUF,LPWSABUF,LPQOS,LPQOS,DWORD,LPINT);
+typedef INT (WSPAPI *LPWSPLISTEN)(SOCKET,INT,LPINT);
+typedef INT (WSPAPI *LPWSPRECV)(SOCKET,LPWSABUF,DWORD,LPDWORD,LPDWORD,
+LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE,LPWSATHREADID,LPINT);
+typedef INT (WSPAPI *LPWSPRECVDISCONNECT)(SOCKET,LPWSABUF,LPINT);
+typedef INT (WSPAPI *LPWSPRECVFROM)(SOCKET,LPWSABUF,DWORD,LPDWORD,LPDWORD,LPSOCKADDR,
+LPINT,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE,LPWSATHREADID,LPINT);
+typedef INT (WSPAPI *LPWSPSELECT)(INT,LPFD_SET,LPFD_SET,LPFD_SET,CONST TIMEVAL*,LPINT);
+typedef INT (WSPAPI *LPWSPSEND)(SOCKET,LPWSABUF,DWORD,LPDWORD,DWORD,
+LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE,LPWSATHREADID,LPINT);
+typedef INT (WSPAPI *LPWSPSENDDISCONNECT)(SOCKET,LPWSABUF,LPINT);
+typedef INT (WSPAPI *LPWSPSENDTO)(SOCKET,LPWSABUF,DWORD,LPDWORD,DWORD,const struct sockaddr*,
+ INT,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE,LPWSATHREADID,LPINT);
+typedef INT (WSPAPI *LPWSPSETSOCKOPT)(SOCKET,INT,INT,CONST CHAR FAR*,INT,LPINT);
+typedef INT (WSPAPI *LPWSPSHUTDOWN)(SOCKET,INT,LPINT);
+typedef SOCKET (WSPAPI *LPWSPSOCKET)(INT,INT,INT,LPWSAPROTOCOL_INFOW,GROUP,DWORD,LPINT);
+typedef INT (WSPAPI *LPWSPSTRINGTOADDRESS)(LPWSTR,INT,LPWSAPROTOCOL_INFOW,LPSOCKADDR,LPINT,LPINT);
+
+/* Service provider procedure table */
+typedef 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;
+} WSPPROC_TABLE, FAR* LPWSPPROC_TABLE;
+
+/* Prototypes for service provider upcall procedure table */
+typedef BOOL (WSPAPI *LPWPUCLOSEEVENT)(WSAEVENT,LPINT);
+typedef INT (WSPAPI *LPWPUCLOSESOCKETHANDLE)(SOCKET,LPINT);
+typedef INT (WSPAPI *LPWPUCLOSETHREAD)(LPWSATHREADID,LPINT);
+typedef WSAEVENT (WSPAPI *LPWPUCREATEEVENT)(LPINT);
+typedef SOCKET (WSPAPI *LPWPUCREATESOCKETHANDLE)(DWORD,DWORD,LPINT);
+typedef SOCKET (WSPAPI *LPWPUFDISSET)(SOCKET,LPFD_SET);
+typedef INT (WSPAPI *LPWPUGETPROVIDERPATH)(LPGUID,LPWSTR,LPINT,LPINT);
+typedef SOCKET (WSPAPI *LPWPUMODIFYIFSHANDLE)(DWORD,SOCKET,LPINT);
+typedef INT (WSPAPI *LPWPUOPENCURRENTTHREAD)(LPWSATHREADID,LPINT);
+typedef BOOL (WSPAPI *LPWPUPOSTMESSAGE)(HWND,UINT,WPARAM,LPARAM);
+typedef INT (WSPAPI *LPWPUQUERYBLOCKINGCALLBACK)(DWORD,LPBLOCKINGCALLBACK FAR*,LPDWORD,LPINT);
+typedef INT (WSPAPI *LPWPUQUERYSOCKETHANDLECONTEXT)(SOCKET,LPDWORD,LPINT);
+typedef INT (WSPAPI *LPWPUQUEUEAPC)(LPWSATHREADID,LPWSAUSERAPC,DWORD,LPINT);
+typedef BOOL (WSPAPI *LPWPURESETEVENT)(WSAEVENT,LPINT);
+typedef BOOL (WSPAPI *LPWPUSETEVENT)(WSAEVENT,LPINT);
+/* Available only directly from the DLL */
+typedef INT (WSPAPI *LPWPUCOMPLETEOVERLAPPEDREQUEST)(SOCKET,LPWSAOVERLAPPED,DWORD,DWORD,LPINT);
+
+/* Service Provider upcall table */
+typedef 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;
+} WSPUPCALLTABLE, FAR* LPWSPUPCALLTABLE;
+
+typedef INT (WSPAPI *LPWSPSTARTUP)(WORD,LPWSPDATA,LPWSAPROTOCOL_INFOW,WSPUPCALLTABLE,LPWSPPROC_TABLE);
+
+/* Prototypes for service provider namespace procedure table */
+typedef INT (WSPAPI *LPNSPCLEANUP)(LPGUID);
+typedef INT (WSPAPI *LPNSPGETSERVICECLASSINFO)(LPGUID,LPDWORD,LPWSASERVICECLASSINFOW);
+typedef INT (WSPAPI *LPNSPINSTALLSERVICECLASS)(LPGUID,LPWSASERVICECLASSINFOW);
+typedef INT (WSPAPI *LPNSPLOOKUPSERVICEBEGIN)(LPGUID,LPWSAQUERYSETW,LPWSASERVICECLASSINFOW,DWORD,LPHANDLE);
+typedef INT (WSPAPI *LPNSPLOOKUPSERVICEEND)(HANDLE);
+typedef INT (WSPAPI *LPNSPLOOKUPSERVICENEXT)(HANDLE,DWORD,LPDWORD,LPWSAQUERYSET);
+typedef INT (WSPAPI *LPNSPREMOVESERVICECLASS)(LPGUID,LPGUID);
+typedef INT (WSPAPI *LPNSPSETSERVICE)(LPGUID,LPWSASERVICECLASSINFOW,LPWSAQUERYSETW,WSAESETSERVICEOP,DWORD);
+
+typedef struct _NSP_ROUTINE {
+ DWORD cbSize;
+ DWORD dwMajorVersion;
+ DWORD dwMinorVersion;
+ LPNSPCLEANUP NSPCleanup;
+ LPNSPLOOKUPSERVICEBEGIN NSPLookupServiceBegin;
+ LPNSPLOOKUPSERVICENEXT NSPLookupServiceNext;
+ LPNSPLOOKUPSERVICEEND NSPLookupServiceEnd;
+ LPNSPSETSERVICE NSPSetService;
+ LPNSPINSTALLSERVICECLASS NSPInstallServiceClass;
+ LPNSPREMOVESERVICECLASS NSPRemoveServiceClass;
+ LPNSPGETSERVICECLASSINFO NSPGetServiceClassInfo;
+} NSP_ROUTINE, *PNSP_ROUTINE, *LPNSP_ROUTINE;
+
+INT WSPAPI NSPStartup(LPGUID,LPNSP_ROUTINE);
+
+/* WinSock 2 DLL function prototypes */
+INT WSPAPI WPUCompleteOverlappedRequest(SOCKET,LPWSAOVERLAPPED,DWORD,DWORD,LPINT);
+INT WSPAPI WSPStartup(WORD,LPWSPDATA,LPWSAPROTOCOL_INFOW,WSPUPCALLTABLE,LPWSPPROC_TABLE);
+INT WSPAPI WSCDeinstallProvider(LPGUID,LPINT);
+INT WSPAPI WSCEnumProtocols(LPINT,LPWSAPROTOCOL_INFOW,LPDWORD,LPINT);
+INT WSPAPI WSCGetProviderPath(LPGUID,LPWSTR,LPINT,LPINT);
+INT WSPAPI WSCInstallProvider(CONST LPGUID,CONST LPWSTR,CONST LPWSAPROTOCOL_INFOW,DWORD,LPINT);
+INT WSPAPI WSCEnableNSProvider(LPGUID,BOOL);
+INT WSPAPI WSCInstallNameSpace(LPWSTR,LPWSTR,DWORD,DWORD,LPGUID);
+INT WSPAPI WSCUnInstallNameSpace(LPGUID);
+INT WSPAPI WSCWriteProviderOrder(LPDWORD,DWORD);
+
+#endif /* RC_INVOKED */
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+#endif
diff --git a/tcc/include/winapi/ws2tcpip.h b/tcc/include/winapi/ws2tcpip.h
new file mode 100644
index 0000000..2eac66a
--- /dev/null
+++ b/tcc/include/winapi/ws2tcpip.h
@@ -0,0 +1,379 @@
+/*
+ * ws2tcpip.h : TCP/IP specific extensions in Windows Sockets 2
+ *
+ * Portions Copyright (c) 1980, 1983, 1988, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ */
+
+#ifndef _WS2TCPIP_H
+#define _WS2TCPIP_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#if (defined _WINSOCK_H && !defined _WINSOCK2_H)
+#error "ws2tcpip.h is not compatible with winsock.h. Include winsock2.h instead."
+#endif
+
+#include <winsock2.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * The IP_* macros are also defined in winsock.h, but some values are different there.
+ * The values defined in winsock.h for 1.1 and used in wsock32.dll are consistent
+ * with the original values Steve Deering defined in his document "IP Multicast Extensions
+ * for 4.3BSD UNIX related systems (MULTICAST 1.2 Release)." However, these conflicted with
+ * the definitions for some IPPROTO_IP level socket options already assigned by BSD,
+ * so Berkeley changed all the values by adding 7. WinSock2 (ws2_32.dll) uses
+ * the BSD 4.4 compatible values defined here.
+ *
+ * See also: msdn kb article Q257460
+ * http://support.microsoft.com/support/kb/articles/Q257/4/60.asp
+ */
+
+/* This is also defined in winsock.h; value hasn't changed */
+#define IP_OPTIONS 1
+
+#define IP_HDRINCL 2
+/*
+ * These are also be defined in winsock.h,
+ * but values have changed for WinSock2 interface
+ */
+#define IP_TOS 3 /* old (winsock 1.1) value 8 */
+#define IP_TTL 4 /* old value 7 */
+#define IP_MULTICAST_IF 9 /* old value 2 */
+#define IP_MULTICAST_TTL 10 /* old value 3 */
+#define IP_MULTICAST_LOOP 11 /* old value 4 */
+#define IP_ADD_MEMBERSHIP 12 /* old value 5 */
+#define IP_DROP_MEMBERSHIP 13 /* old value 6 */
+#define IP_DONTFRAGMENT 14 /* old value 9 */
+#define IP_ADD_SOURCE_MEMBERSHIP 15
+#define IP_DROP_SOURCE_MEMBERSHIP 16
+#define IP_BLOCK_SOURCE 17
+#define IP_UNBLOCK_SOURCE 18
+#define IP_PKTINFO 19
+
+/*
+ * As with BSD implementation, IPPROTO_IPV6 level socket options have
+ * same values as IPv4 counterparts.
+ */
+#define IPV6_UNICAST_HOPS 4
+#define IPV6_MULTICAST_IF 9
+#define IPV6_MULTICAST_HOPS 10
+#define IPV6_MULTICAST_LOOP 11
+#define IPV6_ADD_MEMBERSHIP 12
+#define IPV6_DROP_MEMBERSHIP 13
+#define IPV6_JOIN_GROUP IPV6_ADD_MEMBERSHIP
+#define IPV6_LEAVE_GROUP IPV6_DROP_MEMBERSHIP
+#define IPV6_PKTINFO 19
+
+#define IP_DEFAULT_MULTICAST_TTL 1
+#define IP_DEFAULT_MULTICAST_LOOP 1
+#define IP_MAX_MEMBERSHIPS 20
+
+#define TCP_EXPEDITED_1122 2
+
+#define UDP_NOCHECKSUM 1
+
+/* INTERFACE_INFO iiFlags */
+#define IFF_UP 1
+#define IFF_BROADCAST 2
+#define IFF_LOOPBACK 4
+#define IFF_POINTTOPOINT 8
+#define IFF_MULTICAST 16
+
+#define SIO_GET_INTERFACE_LIST _IOR('t', 127, u_long)
+
+#define INET_ADDRSTRLEN 16
+#define INET6_ADDRSTRLEN 46
+
+/* getnameinfo constants */
+#define NI_MAXHOST 1025
+#define NI_MAXSERV 32
+
+#define NI_NOFQDN 0x01
+#define NI_NUMERICHOST 0x02
+#define NI_NAMEREQD 0x04
+#define NI_NUMERICSERV 0x08
+#define NI_DGRAM 0x10
+
+/* getaddrinfo constants */
+#define AI_PASSIVE 1
+#define AI_CANONNAME 2
+#define AI_NUMERICHOST 4
+
+/* getaddrinfo error codes */
+#define EAI_AGAIN WSATRY_AGAIN
+#define EAI_BADFLAGS WSAEINVAL
+#define EAI_FAIL WSANO_RECOVERY
+#define EAI_FAMILY WSAEAFNOSUPPORT
+#define EAI_MEMORY WSA_NOT_ENOUGH_MEMORY
+#define EAI_NODATA WSANO_DATA
+#define EAI_NONAME WSAHOST_NOT_FOUND
+#define EAI_SERVICE WSATYPE_NOT_FOUND
+#define EAI_SOCKTYPE WSAESOCKTNOSUPPORT
+
+/*
+ * ip_mreq also in winsock.h for WinSock1.1,
+ * but online msdn docs say it is defined here for WinSock2.
+ */
+
+struct ip_mreq {
+ struct in_addr imr_multiaddr;
+ struct in_addr imr_interface;
+};
+
+struct ip_mreq_source {
+ struct in_addr imr_multiaddr;
+ struct in_addr imr_sourceaddr;
+ struct in_addr imr_interface;
+};
+
+struct ip_msfilter {
+ struct in_addr imsf_multiaddr;
+ struct in_addr imsf_interface;
+ u_long imsf_fmode;
+ u_long imsf_numsrc;
+ struct in_addr imsf_slist[1];
+};
+
+#define IP_MSFILTER_SIZE(numsrc) \
+ (sizeof(struct ip_msfilter) - sizeof(struct in_addr) \
+ + (numsrc) * sizeof(struct in_addr))
+
+struct in_pktinfo {
+ IN_ADDR ipi_addr;
+ UINT ipi_ifindex;
+};
+typedef struct in_pktinfo IN_PKTINFO;
+
+
+/* ipv6 */
+/* These require XP or .NET Server or use of add-on IPv6 stacks on NT 4
+ or higher */
+
+/* This is based on the example given in RFC 2553 with stdint types
+ changed to BSD types. For now, use these field names until there
+ is some consistency in MS docs. In this file, we only use the
+ in6_addr structure start address, with casts to get the right offsets
+ when testing addresses */
+
+struct in6_addr {
+ union {
+ u_char _S6_u8[16];
+ u_short _S6_u16[8];
+ u_long _S6_u32[4];
+ } _S6_un;
+};
+/* s6_addr is the standard name */
+#define s6_addr _S6_un._S6_u8
+
+/* These are GLIBC names */
+#define s6_addr16 _S6_un._S6_u16
+#define s6_addr32 _S6_un._S6_u32
+
+/* These are used in some MS code */
+#define in_addr6 in6_addr
+#define _s6_bytes _S6_un._S6_u8
+#define _s6_words _S6_un._S6_u16
+
+typedef struct in6_addr IN6_ADDR, *PIN6_ADDR, *LPIN6_ADDR;
+
+struct sockaddr_in6 {
+ short sin6_family; /* AF_INET6 */
+ u_short sin6_port; /* transport layer port # */
+ u_long sin6_flowinfo; /* IPv6 traffic class & flow info */
+ struct in6_addr sin6_addr; /* IPv6 address */
+ u_long sin6_scope_id; /* set of interfaces for a scope */
+};
+typedef struct sockaddr_in6 SOCKADDR_IN6, *PSOCKADDR_IN6, *LPSOCKADDR_IN6;
+
+extern const struct in6_addr in6addr_any;
+extern const struct in6_addr in6addr_loopback;
+/* the above can get initialised using: */
+#define IN6ADDR_ANY_INIT { 0 }
+#define IN6ADDR_LOOPBACK_INIT { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 }
+
+/* Described in RFC 2292, but not in 2553 */
+/* int IN6_ARE_ADDR_EQUAL(const struct in6_addr * a, const struct in6_addr * b) */
+#define IN6_ARE_ADDR_EQUAL(a, b) \
+ (memcmp ((void*)(a), (void*)(b), sizeof (struct in6_addr)) == 0)
+
+
+/* Address Testing Macros
+
+ These macro functions all take const struct in6_addr* as arg.
+ Static inlines would allow type checking, but RFC 2553 says they
+ macros.
+ NB: These are written specifically for little endian host */
+
+#define IN6_IS_ADDR_UNSPECIFIED(_addr) \
+ ( (((const u_long *)(_addr))[0] == 0) \
+ && (((const u_long *)(_addr))[1] == 0) \
+ && (((const u_long *)(_addr))[2] == 0) \
+ && (((const u_long *)(_addr))[3] == 0))
+
+#define IN6_IS_ADDR_LOOPBACK(_addr) \
+ ( (((const u_long *)(_addr))[0] == 0) \
+ && (((const u_long *)(_addr))[1] == 0) \
+ && (((const u_long *)(_addr))[2] == 0) \
+ && (((const u_long *)(_addr))[3] == 0x01000000)) /* Note byte order reversed */
+/* (((const u_long *)(_addr))[3] == ntohl(1)) */
+
+#define IN6_IS_ADDR_MULTICAST(_addr) (((const u_char *) (_addr))[0] == 0xff)
+
+#define IN6_IS_ADDR_LINKLOCAL(_addr) \
+ ( (((const u_char *)(_addr))[0] == 0xfe) \
+ && ((((const u_char *)(_addr))[1] & 0xc0) == 0x80))
+
+#define IN6_IS_ADDR_SITELOCAL(_addr) \
+ ( (((const u_char *)(_addr))[0] == 0xfe) \
+ && ((((const u_char *)(_addr))[1] & 0xc0) == 0xc0))
+
+#define IN6_IS_ADDR_V4MAPPED(_addr) \
+ ( (((const u_long *)(_addr))[0] == 0) \
+ && (((const u_long *)(_addr))[1] == 0) \
+ && (((const u_long *)(_addr))[2] == 0xffff0000)) /* Note byte order reversed */
+/* (((const u_long *)(_addr))[2] == ntohl(0x0000ffff))) */
+
+#define IN6_IS_ADDR_V4COMPAT(_addr) \
+ ( (((const u_long *)(_addr))[0] == 0) \
+ && (((const u_long *)(_addr))[1] == 0) \
+ && (((const u_long *)(_addr))[2] == 0) \
+ && (((const u_long *)(_addr))[3] != 0) \
+ && (((const u_long *)(_addr))[3] != 0x01000000)) /* Note byte order reversed */
+/* (ntohl (((const u_long *)(_addr))[3]) > 1 ) */
+
+
+#define IN6_IS_ADDR_MC_NODELOCAL(_addr) \
+ ( IN6_IS_ADDR_MULTICAST(_addr) \
+ && ((((const u_char *)(_addr))[1] & 0xf) == 0x1))
+
+#define IN6_IS_ADDR_MC_LINKLOCAL(_addr) \
+ ( IN6_IS_ADDR_MULTICAST (_addr) \
+ && ((((const u_char *)(_addr))[1] & 0xf) == 0x2))
+
+#define IN6_IS_ADDR_MC_SITELOCAL(_addr) \
+ ( IN6_IS_ADDR_MULTICAST(_addr) \
+ && ((((const u_char *)(_addr))[1] & 0xf) == 0x5))
+
+#define IN6_IS_ADDR_MC_ORGLOCAL(_addr) \
+ ( IN6_IS_ADDR_MULTICAST(_addr) \
+ && ((((const u_char *)(_addr))[1] & 0xf) == 0x8))
+
+#define IN6_IS_ADDR_MC_GLOBAL(_addr) \
+ ( IN6_IS_ADDR_MULTICAST(_addr) \
+ && ((((const u_char *)(_addr))[1] & 0xf) == 0xe))
+
+
+typedef int socklen_t;
+
+struct ipv6_mreq {
+ struct in6_addr ipv6mr_multiaddr;
+ unsigned int ipv6mr_interface;
+};
+typedef struct ipv6_mreq IPV6_MREQ;
+
+struct in6_pktinfo {
+ IN6_ADDR ipi6_addr;
+ UINT ipi6_ifindex;
+};
+typedef struct in6_pktinfo IN6_PKTINFO;
+
+struct addrinfo {
+ int ai_flags;
+ int ai_family;
+ int ai_socktype;
+ int ai_protocol;
+ size_t ai_addrlen;
+ char *ai_canonname;
+ struct sockaddr *ai_addr;
+ struct addrinfo *ai_next;
+};
+
+#if (_WIN32_WINNT >= 0x0501)
+void WSAAPI freeaddrinfo (struct addrinfo*);
+int WSAAPI getaddrinfo (const char*,const char*,const struct addrinfo*,
+ struct addrinfo**);
+int WSAAPI getnameinfo(const struct sockaddr*,socklen_t,char*,DWORD,
+ char*,DWORD,int);
+#else
+/* FIXME: Need WS protocol-independent API helpers. */
+#endif
+
+static __inline char*
+gai_strerrorA(int ecode)
+{
+ static char message[1024+1];
+ DWORD dwFlags = FORMAT_MESSAGE_FROM_SYSTEM
+ | FORMAT_MESSAGE_IGNORE_INSERTS
+ | FORMAT_MESSAGE_MAX_WIDTH_MASK;
+ DWORD dwLanguageId = MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT);
+ FormatMessageA(dwFlags, NULL, ecode, dwLanguageId, (LPSTR)message, 1024, NULL);
+ return message;
+}
+static __inline WCHAR*
+gai_strerrorW(int ecode)
+{
+ static WCHAR message[1024+1];
+ DWORD dwFlags = FORMAT_MESSAGE_FROM_SYSTEM
+ | FORMAT_MESSAGE_IGNORE_INSERTS
+ | FORMAT_MESSAGE_MAX_WIDTH_MASK;
+ DWORD dwLanguageId = MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT);
+ FormatMessageW(dwFlags, NULL, ecode, dwLanguageId, (LPWSTR)message, 1024, NULL);
+ return message;
+}
+#ifdef UNICODE
+#define gai_strerror gai_strerrorW
+#else
+#define gai_strerror gai_strerrorA
+#endif
+
+/* Some older IPv4/IPv6 compatibility stuff */
+
+/* This struct lacks sin6_scope_id; retained for use in sockaddr_gen */
+struct sockaddr_in6_old {
+ short sin6_family;
+ u_short sin6_port;
+ u_long sin6_flowinfo;
+ struct in6_addr sin6_addr;
+};
+
+typedef union sockaddr_gen{
+ struct sockaddr Address;
+ struct sockaddr_in AddressIn;
+ struct sockaddr_in6_old AddressIn6;
+} sockaddr_gen;
+
+
+typedef struct _INTERFACE_INFO {
+ u_long iiFlags;
+ sockaddr_gen iiAddress;
+ sockaddr_gen iiBroadcastAddress;
+ sockaddr_gen iiNetmask;
+} INTERFACE_INFO, *LPINTERFACE_INFO;
+
+/*
+ The definition above can cause problems on NT4,prior to sp4.
+ To workaround, include the following struct and typedef and
+ #define INTERFACE_INFO OLD_INTERFACE_INFO
+ See: FIX: WSAIoctl SIO_GET_INTERFACE_LIST Option Problem
+ (Q181520) in MSDN KB.
+
+ The old definition causes problems on newer NT and on XP.
+
+typedef struct _OLD_INTERFACE_INFO {
+ u_long iiFlags;
+ struct sockaddr iiAddress;
+ struct sockaddr iiBroadcastAddress;
+ struct sockaddr iiNetmask;
+} OLD_INTERFACE_INFO;
+*/
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/wsahelp.h b/tcc/include/winapi/wsahelp.h
new file mode 100644
index 0000000..8ff876e
--- /dev/null
+++ b/tcc/include/winapi/wsahelp.h
@@ -0,0 +1,98 @@
+#ifndef _WSAHELP_H
+#define _WSAHELP_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#include <winsock2.h>
+#include <ntsecapi.h>
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#define WSH_NOTIFY_BIND 0x00000001
+#define WSH_NOTIFY_LISTEN 0x00000002
+#define WSH_NOTIFY_CONNECT 0x00000004
+#define WSH_NOTIFY_ACCEPT 0x00000008
+#define WSH_NOTIFY_SHUTDOWN_RECEIVE 0x00000010
+#define WSH_NOTIFY_SHUTDOWN_SEND 0x00000020
+#define WSH_NOTIFY_SHUTDOWN_ALL 0x00000040
+#define WSH_NOTIFY_CLOSE 0x00000080
+#define WSH_NOTIFY_CONNECT_ERROR 0x00000100
+#define SOL_INTERNAL 0xFFFE
+#define SO_CONTEXT 1
+
+#ifndef RC_INVOKED
+typedef enum _SOCKADDR_ADDRESS_INFO {
+ SockaddrAddressInfoNormal,
+ SockaddrAddressInfoWildcard,
+ SockaddrAddressInfoBroadcast,
+ SockaddrAddressInfoLoopback
+} SOCKADDR_ADDRESS_INFO, *PSOCKADDR_ADDRESS_INFO;
+typedef enum _SOCKADDR_ENDPOINT_INFO {
+ SockaddrEndpointInfoNormal,
+ SockaddrEndpointInfoWildcard,
+ SockaddrEndpointInfoReserved
+} SOCKADDR_ENDPOINT_INFO, *PSOCKADDR_ENDPOINT_INFO;
+typedef struct _SOCKADDR_INFO {
+ SOCKADDR_ADDRESS_INFO AddressInfo;
+ SOCKADDR_ENDPOINT_INFO EndpointInfo;
+} SOCKADDR_INFO, *PSOCKADDR_INFO;
+
+INT WINAPI WSHAddressToString(LPSOCKADDR,INT,LPWSAPROTOCOL_INFOW,LPWSTR,LPDWORD);
+INT WINAPI WSHEnumProtocols(LPINT,LPWSTR,LPVOID,LPDWORD);
+INT WINAPI WSHGetBroadcastSockaddr(PVOID,PSOCKADDR,PINT);
+INT WINAPI WSHGetProviderGuid(LPWSTR,LPGUID);
+INT WINAPI WSHGetSockaddrType(PSOCKADDR,DWORD,PSOCKADDR_INFO);
+INT WINAPI WSHGetSocketInformation(PVOID,SOCKET,HANDLE,HANDLE,INT,INT,PCHAR,INT);
+INT WINAPI WSHGetWildcardSockaddr(PVOID,PSOCKADDR,PINT);
+INT WINAPI WSHGetWSAProtocolInfo(LPWSTR,LPWSAPROTOCOL_INFOW*,LPDWORD);
+INT WINAPI WSHIoctl(PVOID,SOCKET,HANDLE,HANDLE,DWORD,LPVOID,DWORD,LPVOID,DWORD,
+LPDWORD,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE,LPBOOL);
+INT WINAPI WSHJoinLeaf(PVOID,SOCKET,HANDLE,HANDLE,PVOID,SOCKET,PSOCKADDR,
+DWORD,LPWSABUF,LPWSABUF,LPQOS,LPQOS,DWORD);
+INT WINAPI WSHNotify(PVOID,SOCKET,HANDLE,HANDLE,DWORD);
+INT WINAPI WSHOpenSocket(PINT,PINT,PINT,PUNICODE_STRING,PVOID,PDWORD);
+INT WINAPI WSHOpenSocket2(PINT,PINT,PINT,GROUP,DWORD,PUNICODE_STRING,PVOID*,PDWORD);
+INT WINAPI WSHSetSocketInformation(PVOID,SOCKET,HANDLE,HANDLE,INT,INT,PCHAR,INT);
+INT WINAPI WSHStringToAddress(LPWSTR,DWORD,LPWSAPROTOCOL_INFOW,LPSOCKADDR,LPDWORD);
+
+typedef INT (WINAPI *PWSH_ADDRESS_TO_STRING)(LPSOCKADDR,INT,LPWSAPROTOCOL_INFOW,LPWSTR,LPDWORD);
+typedef INT (WINAPI *PWSH_ENUM_PROTOCOLS)(LPINT,LPWSTR,LPVOID,LPDWORD);
+typedef INT (WINAPI *PWSH_GET_BROADCAST_SOCKADDR)(PVOID,PSOCKADDR,PINT);
+typedef INT (WINAPI *PWSH_GET_PROVIDER_GUID)(LPWSTR,LPGUID);
+typedef INT (WINAPI *PWSH_GET_SOCKADDR_TYPE)(PSOCKADDR,DWORD,PSOCKADDR_INFO);
+typedef INT (WINAPI *PWSH_GET_SOCKET_INFORMATION)(PVOID,SOCKET,HANDLE,HANDLE,INT,INT,PCHAR,INT);
+typedef INT (WINAPI *PWSH_GET_WILDCARD_SOCKEADDR)(PVOID,PSOCKADDR,PINT);
+typedef INT (WINAPI *PWSH_GET_WSAPROTOCOL_INFO)(LPWSTR,LPWSAPROTOCOL_INFOW*,LPDWORD);
+typedef INT (WINAPI *PWSH_IOCTL)(PVOID,SOCKET,HANDLE,HANDLE,DWORD,LPVOID,DWORD,
+ LPVOID,DWORD,LPDWORD,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE,LPBOOL);
+typedef INT (WINAPI *PWSH_JOIN_LEAF)(PVOID,SOCKET,HANDLE,HANDLE,PVOID,SOCKET,
+ PSOCKADDR,DWORD,LPWSABUF,LPWSABUF,LPQOS,LPQOS,DWORD);
+typedef INT (WINAPI *PWSH_NOTIFY)(PVOID,SOCKET,HANDLE,HANDLE,DWORD);
+typedef INT (WINAPI *PWSH_OPEN_SOCKET)(PINT,PINT,PINT,PUNICODE_STRING,PVOID,PDWORD);
+typedef INT (WINAPI *PWSH_OPEN_SOCKET2)(PINT,PINT,PINT,GROUP,DWORD,PUNICODE_STRING,PVOID*,PDWORD);
+typedef INT (WINAPI *PWSH_SET_SOCKET_INFORMATION)(PVOID,SOCKET,HANDLE,HANDLE,INT,INT,PCHAR,INT);
+typedef INT (WINAPI *PWSH_STRING_TO_ADDRESS)(LPWSTR,DWORD,LPWSAPROTOCOL_INFOW,LPSOCKADDR,LPDWORD);
+
+#ifndef __OBJC__
+/* "Protocol" is a builtin class name in ObjC. */
+typedef struct _WINSOCK_MAPPING {
+ DWORD Rows;
+ DWORD Columns;
+ struct {
+ DWORD AddressFamily;
+ DWORD SocketType;
+ DWORD Protocol;
+ } Mapping[1];
+} WINSOCK_MAPPING, *PWINSOCK_MAPPING;
+DWORD WINAPI WSHGetWinsockMapping(PWINSOCK_MAPPING,DWORD);
+typedef DWORD (WINAPI *PWSH_GET_WINSOCK_MAPPING)(PWINSOCK_MAPPING,DWORD);
+#endif
+
+#endif /* RC_INVOKED */
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+#endif
diff --git a/tcc/include/winapi/wsipx.h b/tcc/include/winapi/wsipx.h
new file mode 100644
index 0000000..ff831a1
--- /dev/null
+++ b/tcc/include/winapi/wsipx.h
@@ -0,0 +1,28 @@
+/* WSIPX.H - contributed by the WINE project
+ */
+
+#ifndef _WSIPX_H
+#define _WSIPX_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define NSPROTO_IPX 1000
+#define NSPROTO_SPX 1256
+#define NSPROTO_SPXII 1257
+
+typedef struct sockaddr_ipx {
+ short sa_family;
+ char sa_netnum[4];
+ char sa_nodenum[6];
+ unsigned short sa_socket;
+} SOCKADDR_IPX, *PSOCKADDR_IPX, *LPSOCKADDR_IPX;
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/wsnetbs.h b/tcc/include/winapi/wsnetbs.h
new file mode 100644
index 0000000..e435b5d
--- /dev/null
+++ b/tcc/include/winapi/wsnetbs.h
@@ -0,0 +1,35 @@
+#ifndef _WSNETBS_H
+#define _WSNETBS_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#define NETBIOS_NAME_LENGTH 16
+#define NETBIOS_UNIQUE_NAME 0
+#define NETBIOS_GROUP_NAME 1
+#define NETBIOS_TYPE_QUICK_UNIQUE 2
+#define NETBIOS_TYPE_QUICK_GROUP 3
+
+#ifndef RC_INVOKED
+typedef struct sockaddr_nb {
+ short snb_family;
+ u_short snb_type;
+ char snb_name[NETBIOS_NAME_LENGTH];
+} SOCKADDR_NB, *PSOCKADDR_NB, *LPSOCKADDR_NB;
+#define SET_NETBIOS_SOCKADDR(_snb,_type,_name,_port) \
+{ \
+ register int _i; \
+ register char *_n = (_name); \
+ register PSOCKADDR_NB _s = (_snb); \
+ _s->snb_family = AF_NETBIOS; \
+ _s->snb_type = (_type); \
+ for (_i=0; _n[_i] != '\0' && _i<NETBIOS_NAME_LENGTH-1; _i++) { \
+ _s->snb_name[_i] = _n[_i]; \
+ } \
+ for (; _i<NETBIOS_NAME_LENGTH-1; _i++) { \
+ _s->snb_name[_i] = ' '; \
+ } \
+ _s->snb_name[NETBIOS_NAME_LENGTH-1] = (_port); \
+}
+#endif /* RC_INVOKED */
+#endif
diff --git a/tcc/include/winapi/wtsapi32.h b/tcc/include/winapi/wtsapi32.h
new file mode 100644
index 0000000..f9f1802
--- /dev/null
+++ b/tcc/include/winapi/wtsapi32.h
@@ -0,0 +1,145 @@
+#ifndef _WTSAPI32_H
+#define _WTSAPI32_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if (_WIN32_WINNT >= 0x0501)
+ // session notification message
+#define WM_WTSSESSION_CHANGE 0x02B1
+
+typedef enum _WTS_INFO_CLASS {
+ WTSInitialProgram = 0,
+ WTSApplicationName = 1,
+ WTSWorkingDirectory = 2,
+ WTSOEMId = 3,
+ WTSSessionId = 4,
+ WTSUserName = 5,
+ WTSWinStationName = 6,
+ WTSDomainName = 7,
+ WTSConnectState = 8,
+ WTSClientBuildNumber = 9,
+ WTSClientName = 10,
+ WTSClientDirectory = 11,
+ WTSClientProductId = 12,
+ WTSClientHardwareId = 13,
+ WTSClientAddress = 14,
+ WTSClientDisplay = 15,
+ WTSClientProtocolType = 16,
+ WTSIdleTime = 17,
+ WTSLogonTime = 18,
+ WTSIncomingBytes = 19,
+ WTSOutgoingBytes = 20,
+ WTSIncomingFrames = 21,
+ WTSOutgoingFrames = 22,
+ WTSClientInfo = 23,
+ WTSSessionInfo = 24
+} WTS_INFO_CLASS;
+
+typedef enum _WTS_CONNECTSTATE_CLASS {
+ WTSActive,
+ WTSConnected,
+ WTSConnectQuery,
+ WTSShadow,
+ WTSDisconnected,
+ WTSIdle,
+ WTSListen,
+ WTSReset,
+ WTSDown,
+ WTSInit
+} WTS_CONNECTSTATE_CLASS;
+
+ // session notification message flags
+#define WTS_CONSOLE_CONNECT 0x1
+#define WTS_CONSOLE_DISCONNECT 0x2
+#define WTS_REMOTE_CONNECT 0x3
+#define WTS_REMOTE_DISCONNECT 0x4
+#define WTS_SESSION_LOGON 0x5
+#define WTS_SESSION_LOGOFF 0x6
+#define WTS_SESSION_LOCK 0x7
+#define WTS_SESSION_UNLOCK 0x8
+#define WTS_SESSION_REMOTE_CONTROL 0x9
+
+ // WTSRegisterSessionNotifiction flags
+#define NOTIFY_FOR_THIS_SESSION 0
+#define NOTIFY_FOR_ALL_SESSIONS 1
+
+BOOL WINAPI WTSRegisterSessionNotification(HWND hWnd, DWORD dwFlags);
+BOOL WINAPI WTSUnRegisterSessionNotification(HWND hWnd);
+BOOL WINAPI WTSQueryUserToken(ULONG SessionId, PHANDLE pToken);
+
+#endif /* _WIN32_WINNT >= 0x0501 */
+
+#if (_WIN32_WINNT >= 0x0500)
+
+typedef struct _WTS_SESSION_INFOW {
+ DWORD SessionId;
+ LPWSTR pWinStationName;
+ WTS_CONNECTSTATE_CLASS State;
+} WTS_SESSION_INFOW, *PWTS_SESSION_INFOW;
+
+typedef struct _WTS_SESSION_INFOA {
+ DWORD SessionId;
+ LPSTR pWinStationName;
+ WTS_CONNECTSTATE_CLASS State;
+} WTS_SESSION_INFOA, *PWTS_SESSION_INFOA;
+
+#ifdef UNICODE
+#define WTS_SESSION_INFO WTS_SESSION_INFOW
+#define PWTS_SESSION_INFO PWTS_SESSION_INFOW
+#else
+#define WTS_SESSION_INFO WTS_SESSION_INFOA
+#define PWTS_SESSION_INFO PWTS_SESSION_INFOA
+#endif
+
+ // WTSWaitSystemEvent local server handle
+#define WTS_CURRENT_SERVER_HANDLE 0
+#define WTS_CURRENT_SESSION ((DWORD)-1)
+
+ // WTSWaitSystemEvent flags
+#define WTS_EVENT_NONE 0x00000000
+#define WTS_EVENT_CREATE 0x00000001
+#define WTS_EVENT_DELETE 0x00000002
+#define WTS_EVENT_RENAME 0x00000004
+#define WTS_EVENT_CONNECT 0x00000008
+#define WTS_EVENT_DISCONNECT 0x00000010
+#define WTS_EVENT_LOGON 0x00000020
+#define WTS_EVENT_LOGOFF 0x00000040
+#define WTS_EVENT_STATECHANGE 0x00000080
+#define WTS_EVENT_LICENSE 0x00000100
+#define WTS_EVENT_ALL 0x7FFFFFFF
+#define WTS_EVENT_FLUSH 0x80000000
+
+BOOL WINAPI WTSQuerySessionInformationA(HANDLE hServer, DWORD SessionId, WTS_INFO_CLASS WTSInfoClass,
+ LPSTR *ppBuffer, DWORD *pBytesReturned);
+BOOL WINAPI WTSQuerySessionInformationW(HANDLE hServer, DWORD SessionId, WTS_INFO_CLASS WTSInfoClass,
+ LPTSTR *ppBuffer, DWORD *pBytesReturned);
+BOOL WINAPI WTSWaitSystemEvent(HANDLE hServer, DWORD EventMask, DWORD* pEventFlags);
+BOOL WINAPI WTSDisconnectSession(HANDLE hServer, DWORD SessionId, BOOL bWait);
+BOOL WINAPI WTSEnumerateSessionsW(HANDLE hServer, DWORD Reserved, DWORD Version,
+ PWTS_SESSION_INFOW *ppSessionInfo,
+ PDWORD pCount);
+BOOL WINAPI WTSEnumerateSessionsA(HANDLE hServer, DWORD Reserved, DWORD Version,
+ PWTS_SESSION_INFOA *ppSessionInfo,
+ PDWORD pCount);
+void WINAPI WTSFreeMemory(PVOID pMemory);
+
+#ifdef UNICODE
+#define WTSEnumerateSessions WTSEnumerateSessionsW
+#define WTSQuerySessionInformation WTSQuerySessionInformationW
+#else
+#define WTSEnumerateSessions WTSEnumerateSessionsA
+#define WTSQuerySessionInformation WTSQuerySessionInformationA
+#endif
+
+#endif /* _WIN32_WINNT >= 0x0500 */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _WTSAPI32_H */
diff --git a/tcc/include/winapi/wtypes.h b/tcc/include/winapi/wtypes.h
new file mode 100644
index 0000000..37f2af2
--- /dev/null
+++ b/tcc/include/winapi/wtypes.h
@@ -0,0 +1,171 @@
+#include <rpc.h>
+#include <rpcndr.h>
+
+#ifndef _WTYPES_H
+#define _WTYPES_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define IID_NULL GUID_NULL
+#define CLSID_NULL GUID_NULL
+#define CBPCLIPDATA(d) ((d).cbSize-sizeof((d).ulClipFmt))
+#define ROTFLAGS_REGISTRATIONKEEPSALIVE 0x01
+#define ROTFLAGS_ALLOWANYCLIENT 0x02
+
+#ifndef __BLOB_T_DEFINED /* also in winsock2.h */
+#define __BLOB_T_DEFINED
+typedef struct _BLOB {
+ ULONG cbSize;
+ BYTE *pBlobData;
+} BLOB,*PBLOB,*LPBLOB;
+#endif
+typedef enum tagDVASPECT {
+ DVASPECT_CONTENT=1,
+ DVASPECT_THUMBNAIL=2,
+ DVASPECT_ICON=4,
+ DVASPECT_DOCPRINT=8
+} DVASPECT;
+typedef enum tagDVASPECT2 {
+ DVASPECT_OPAQUE=16,
+ DVASPECT_TRANSPARENT=32
+} DVASPECT2;
+typedef enum tagSTATFLAG {
+ STATFLAG_DEFAULT=0,
+ STATFLAG_NONAME=1
+} STATFLAG;
+typedef enum tagMEMCTX {
+ MEMCTX_LOCAL=0,
+ MEMCTX_TASK,
+ MEMCTX_SHARED,
+ MEMCTX_MACSYSTEM,
+ MEMCTX_UNKNOWN=-1,
+ MEMCTX_SAME=-2
+} MEMCTX;
+typedef enum tagMSHCTX {
+ MSHCTX_LOCAL=0,
+ MSHCTX_NOSHAREDMEM,
+ MSHCTX_DIFFERENTMACHINE,
+ MSHCTX_INPROC,
+ MSHCTX_CROSSCTX
+} MSHCTX;
+typedef enum tagCLSCTX {
+ CLSCTX_INPROC_SERVER=1,CLSCTX_INPROC_HANDLER=2,CLSCTX_LOCAL_SERVER=4,
+ CLSCTX_INPROC_SERVER16=8,CLSCTX_REMOTE_SERVER=16
+} CLSCTX;
+typedef enum tagMSHLFLAGS {
+ MSHLFLAGS_NORMAL,MSHLFLAGS_TABLESTRONG,MSHLFLAGS_TABLEWEAK
+} MSHLFLAGS;
+typedef struct _FLAGGED_WORD_BLOB {
+ unsigned long fFlags;
+ unsigned long clSize;
+ unsigned short asData[1];
+}FLAGGED_WORD_BLOB;
+
+#ifndef OLE2ANSI
+typedef WCHAR OLECHAR;
+typedef LPWSTR LPOLESTR;
+typedef LPCWSTR LPCOLESTR;
+#define OLESTR(s) L##s
+#else
+typedef char OLECHAR;
+typedef LPSTR LPOLESTR;
+typedef LPCSTR LPCOLESTR;
+#define OLESTR(s) s
+#endif
+typedef unsigned short VARTYPE;
+typedef short VARIANT_BOOL;
+typedef VARIANT_BOOL _VARIANT_BOOL;
+#define VARIANT_TRUE ((VARIANT_BOOL)0xffff)
+#define VARIANT_FALSE ((VARIANT_BOOL)0)
+typedef OLECHAR *BSTR;
+typedef FLAGGED_WORD_BLOB *wireBSTR;
+typedef BSTR *LPBSTR;
+typedef LONG SCODE;
+typedef void *HCONTEXT;
+typedef union tagCY {
+ _ANONYMOUS_STRUCT struct {
+ unsigned long Lo;
+ long Hi;
+ }_STRUCT_NAME(s);
+ LONGLONG int64;
+} CY;
+typedef double DATE;
+typedef struct tagBSTRBLOB {
+ ULONG cbSize;
+ PBYTE pData;
+}BSTRBLOB;
+typedef struct tagBSTRBLOB *LPBSTRBLOB;
+typedef struct tagCLIPDATA {
+ ULONG cbSize;
+ long ulClipFmt;
+ PBYTE pClipData;
+}CLIPDATA;
+typedef enum tagSTGC {
+ STGC_DEFAULT,STGC_OVERWRITE,STGC_ONLYIFCURRENT,
+ STGC_DANGEROUSLYCOMMITMERELYTODISKCACHE
+}STGC;
+typedef enum tagSTGMOVE {
+ STGMOVE_MOVE,STGMOVE_COPY,STGMOVE_SHALLOWCOPY
+}STGMOVE;
+enum VARENUM {
+ VT_EMPTY,VT_NULL,VT_I2,VT_I4,VT_R4,VT_R8,VT_CY,VT_DATE,VT_BSTR,VT_DISPATCH,
+ VT_ERROR,VT_BOOL,VT_VARIANT,VT_UNKNOWN,VT_DECIMAL,VT_I1=16,VT_UI1,VT_UI2,VT_UI4,VT_I8,
+ VT_UI8,VT_INT,VT_UINT,VT_VOID,VT_HRESULT,VT_PTR,VT_SAFEARRAY,VT_CARRAY,VT_USERDEFINED,
+ VT_LPSTR,VT_LPWSTR,VT_RECORD=36,VT_INT_PTR=37,VT_UINT_PTR=38,VT_FILETIME=64,VT_BLOB,VT_STREAM,VT_STORAGE,VT_STREAMED_OBJECT,
+ VT_STORED_OBJECT,VT_BLOB_OBJECT,VT_CF,VT_CLSID,VT_BSTR_BLOB=0xfff,VT_VECTOR=0x1000,
+ VT_ARRAY=0x2000,VT_BYREF=0x4000,VT_RESERVED=0x8000,VT_ILLEGAL= 0xffff,VT_ILLEGALMASKED=0xfff,
+ VT_TYPEMASK=0xfff
+};
+
+typedef struct _BYTE_SIZEDARR {
+ unsigned long clSize;
+ byte *pData;
+}BYTE_SIZEDARR;
+typedef struct _SHORT_SIZEDARR {
+ unsigned long clSize;
+ unsigned short *pData;
+}WORD_SIZEDARR;
+typedef struct _LONG_SIZEDARR {
+ unsigned long clSize;
+ unsigned long *pData;
+}DWORD_SIZEDARR;
+typedef struct _HYPER_SIZEDARR {
+ unsigned long clSize;
+ hyper *pData;
+}HYPER_SIZEDARR;
+typedef double DOUBLE;
+typedef struct tagDEC {
+ USHORT wReserved;
+ _ANONYMOUS_UNION union {
+ _ANONYMOUS_STRUCT struct {
+ BYTE scale;
+ BYTE sign;
+ }_STRUCT_NAME(s);
+ USHORT signscale;
+ } DUMMYUNIONNAME;
+ ULONG Hi32;
+ _ANONYMOUS_UNION union {
+ _ANONYMOUS_STRUCT struct {
+ ULONG Lo32;
+ ULONG Mid32;
+ }_STRUCT_NAME(s2);
+ ULONGLONG Lo64;
+ } DUMMYUNIONNAME2;
+} DECIMAL;
+typedef DECIMAL *LPDECIMAL;
+#define DECIMAL_NEG ((BYTE)0x80)
+#ifdef NONAMELESSUNION
+#define DECIMAL_SETZERO(d) {(d).DUMMYUNIONNAME2.Lo64=(d).Hi32=(d).DUMMYUNIONNAME.signscale=0;}
+#else
+#define DECIMAL_SETZERO(d) {(d).Lo64=(d).Hi32=(d).signscale=0;}
+#endif
+typedef void *HMETAFILEPICT;
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tcc/include/winapi/xprtdefs.h b/tcc/include/winapi/xprtdefs.h
new file mode 100644
index 0000000..e61e8ac
--- /dev/null
+++ b/tcc/include/winapi/xprtdefs.h
@@ -0,0 +1,11 @@
+#ifndef _XPTRDEFS_H
+#define _XPTRDEFS_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+/*--- DirectShow Reference - DirectShow Structures - TIMECODE_SAMPLE Structure */
+#define ED_DEVCAP_ATN_READ 0x13B7
+#define ED_DEVCAP_RTC_READ 0x13BA
+
+#endif
diff --git a/tcc/include/winapi/zmouse.h b/tcc/include/winapi/zmouse.h
new file mode 100644
index 0000000..764d43d
--- /dev/null
+++ b/tcc/include/winapi/zmouse.h
@@ -0,0 +1,36 @@
+/*
+ zmouse.h - Header for IntelliMouse.
+
+ This file is part of a free library for the Win32 API.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ FIXME: This file is obviously horribly incomplete!
+
+*/
+
+#ifndef _ZMOUSE_H
+#define _ZMOUSE_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifndef WM_MOUSEWHEEL
+# define WM_MOUSEWHEEL (WM_MOUSELAST + 1)
+#endif
+
+#ifndef WHEEL_DELTA
+# define WHEEL_DELTA 120
+#endif
+
+#ifndef WHEEL_PAGESCROLL
+# define WHEEL_PAGESCROLL UINT_MAX
+#endif
+
+#ifndef SPI_SETWHEELSCROLLLINES
+# define SPI_SETWHEELSCROLLLINES 105
+#endif
+
+#endif /* _ZMOUSE_H */