From a3df8bf1429570e0bd6c6428f6ed80073578cf4b Mon Sep 17 00:00:00 2001 From: short <> Date: Sun, 14 Sep 2003 10:54:41 +0000 Subject: [PATCH] update for HEAD-2003091401 --- CREDITS | 1 + ChangeLog | 1117 +++++ INSTALL | 18 +- Jamfile | 5 + Jamrules | 54 + Makefile | 161 +- apistatus.lst | 31 + apps/tests/Makefile | 19 +- apps/tests/SampleWindow/.cvsignore | 6 + apps/tests/SampleWindow/makefile | 21 + apps/tests/SampleWindow/window.c | 212 + apps/tests/alive/.cvsignore | 1 + apps/tests/apc/.cvsignore | 1 + apps/tests/args/.cvsignore | 1 + apps/tests/atomtest/.cvsignore | 1 + apps/tests/bench/.cvsignore | 1 + apps/tests/bitblt/.cvsignore | 1 + apps/tests/bitblt/bitblt.c | 5 +- apps/tests/button/.cvsignore | 6 + apps/tests/button/Makefile | 20 + apps/tests/button/buttontst.c | 108 + apps/tests/button2/.cvsignore | 6 + apps/tests/button2/Makefile | 20 + apps/tests/button2/buttontst2.c | 219 + apps/tests/capclock/.cvsignore | 6 + apps/tests/capclock/Makefile | 18 + apps/tests/capclock/capclock.c | 69 + apps/tests/capclock/capclock.ico | Bin 0 -> 766 bytes apps/tests/capclock/capclock.rc | 52 + apps/tests/combo/.cvsignore | 6 + apps/tests/combo/combotst.c | 687 +++ apps/tests/combo/makefile | 22 + apps/tests/combo/utils.c | 33 + apps/tests/combo/utils.h | 9 + apps/tests/consume/.cvsignore | 1 + apps/tests/copymove/.cvsignore | 3 + apps/tests/count/.cvsignore | 1 + apps/tests/dibtest/.cvsignore | 1 + apps/tests/dump_shared_data/.cvsignore | 1 + apps/tests/edit/.cvsignore | 6 + apps/tests/edit/edittest.c | 649 +++ apps/tests/edit/makefile | 22 + apps/tests/edit/utils.c | 33 + apps/tests/edit/utils.h | 9 + apps/tests/enumwnd/.cvsignore | 6 + apps/tests/enumwnd/enumwnd.c | 187 + apps/tests/enumwnd/enumwnd.dsp | 90 + apps/tests/enumwnd/makefile | 21 + apps/tests/event/.cvsignore | 1 + apps/tests/eventpair/.cvsignore | 6 + apps/tests/eventpair/eventpair.c | 65 + apps/tests/eventpair/makefile | 21 + apps/tests/file/.cvsignore | 1 + apps/tests/gditest/.cvsignore | 1 + apps/tests/hello/.cvsignore | 1 + apps/tests/hivetest/.cvsignore | 1 + apps/tests/icontest/.cvsignore | 6 + apps/tests/icontest/icon.ico | Bin 0 -> 766 bytes apps/tests/icontest/icontest.c | 145 + apps/tests/icontest/icontest.rc | 5 + apps/tests/icontest/makefile | 19 + apps/tests/icontest/resource.h | 1 + apps/tests/isotest/.cvsignore | 1 + apps/tests/lineclip/.cvsignore | 6 + apps/tests/lineclip/lineclip.c | 167 + apps/tests/lineclip/makefile | 21 + apps/tests/linetest/.cvsignore | 6 + apps/tests/linetest/linetest.c | 181 + apps/tests/linetest/makefile | 21 + apps/tests/lock/.cvsignore | 6 + apps/tests/lpc/.cvsignore | 1 + apps/tests/lpc/lpcsrv.c | 2 +- apps/tests/messagebox/.cvsignore | 1 + apps/tests/mktime/.cvsignore | 6 + apps/tests/mstest/.cvsignore | 1 + apps/tests/multiwin/.cvsignore | 6 + apps/tests/multiwin/makefile | 21 + apps/tests/multiwin/multiwin.c | 147 + apps/tests/mutex/.cvsignore | 1 + apps/tests/nptest/.cvsignore | 1 + apps/tests/palbitblt/.cvsignore | 6 + apps/tests/palbitblt/makefile | 20 + apps/tests/palbitblt/pal.c | 200 + apps/tests/patblt/.cvsignore | 6 + apps/tests/patblt/makefile | 73 +- apps/tests/patblt/patblt.cpp | 4 - apps/tests/pipe/.cvsignore | 6 + apps/tests/pipe/Makefile | 22 + apps/tests/pipe/pipe.c | 602 +++ apps/tests/polytest/.cvsignore | 10 + apps/tests/polytest/polytest.cpp | 874 ++++ apps/tests/polytest/polytest.dsp | 88 + apps/tests/polytest/polytest.dsw | 29 + apps/tests/primitives/.cvsignore | 6 + apps/tests/primitives/Makefile | 37 + apps/tests/primitives/mk_font.cpp | 69 + apps/tests/primitives/mk_font.h | 39 + apps/tests/primitives/primitives.cpp | 351 ++ apps/tests/pteb/.cvsignore | 1 + apps/tests/regtest/.cvsignore | 1 + apps/tests/sectest/.cvsignore | 1 + apps/tests/sertest/.cvsignore | 1 + apps/tests/shaptest/.cvsignore | 6 + apps/tests/shaptest/makefile | 4 +- apps/tests/shaptest/shaptest.c | 270 +- apps/tests/shm/.cvsignore | 1 + apps/tests/statst/.cvsignore | 7 + apps/tests/statst/Makefile | 20 + apps/tests/statst/statst.c | 165 + apps/tests/statst2/.cvsignore | 7 + apps/tests/statst2/Makefile | 20 + apps/tests/statst2/statst2.c | 180 + apps/tests/stretchblt/.cvsignore | 6 + apps/tests/stretchblt/makefile | 73 +- apps/tests/suspend/.cvsignore | 6 + apps/tests/suspend/Makefile | 19 + apps/tests/suspend/suspend.c | 73 + apps/tests/tcpsvr/.cvsignore | 6 + apps/tests/tcpsvr/tcpsvr.c | 8 +- apps/tests/terminate/.cvsignore | 6 + apps/tests/terminate/Makefile | 19 + apps/tests/terminate/terminate.c | 75 + apps/tests/tests/GetSysMetrics/.cvsignore | 1 + apps/tests/tests/GetSystemInfo/.cvsignore | 1 + apps/tests/tests/Mutex/.cvsignore | 1 + apps/tests/tests/Parent_Child/.cvsignore | 1 + apps/tests/tests/guitest/.cvsignore | 1 + apps/tests/tests/hello/.cvsignore | 1 + apps/tests/tests/new/.cvsignore | 1 + apps/tests/tests/rolex/.cvsignore | 1 + apps/tests/tests/volinfo/.cvsignore | 1 + apps/tests/tests/volinfo/Makefile | 32 +- apps/tests/tests/volinfo/volinfo.c | 3 +- apps/tests/thread/.cvsignore | 1 + apps/tests/thread_msg/.cvsignore | 6 + apps/tests/thread_msg/makefile | 21 + apps/tests/thread_msg/thread_msg.c | 97 + apps/tests/threadwait/.cvsignore | 6 + apps/tests/threadwait/makefile | 21 + apps/tests/threadwait/threadwait.c | 31 + apps/tests/tokentest/.cvsignore | 1 + apps/tests/tokentest/makefile | 4 +- apps/tests/txtscale/.cvsignore | 6 + apps/tests/txtscale/Makefile | 34 + apps/tests/txtscale/mk_font.cpp | 69 + apps/tests/txtscale/mk_font.h | 39 + apps/tests/txtscale/txtscale.cpp | 266 ++ apps/tests/vmtest/.cvsignore | 1 + apps/tests/winhello/.cvsignore | 10 +- apps/tests/winhello/makefile | 2 +- apps/tests/winhello/winhello.c | 16 +- apps/tests/wm_erasebkgnd/.cvsignore | 6 + apps/tests/wm_erasebkgnd/makefile | 73 +- .../{Demo_WM_ERASEBKGND.cpp => wm_erasebkgnd.cpp} | 0 apps/tests/wm_paint/.cvsignore | 6 + apps/tests/wm_paint/wm_paint.c | 10 +- apps/testsets/loadlib/.cvsignore | 1 + apps/testsets/msvcrt/fileio/.cvsignore | 1 + apps/utils/Makefile | 2 +- apps/utils/cabman/.cvsignore | 1 + apps/utils/cat/.cvsignore | 1 + apps/utils/consw/.cvsignore | 7 + apps/utils/consw/consw.c | 29 + apps/utils/consw/makefile | 21 + apps/utils/consw/runprg.bat | 5 + apps/utils/net/ping/.cvsignore | 1 + apps/utils/net/roshttpd/.cvsignore | 1 + apps/utils/net/roshttpd/common/.cvsignore | 3 +- apps/utils/net/telnet/.cvsignore | 1 + apps/utils/objdir/.cvsignore | 1 + apps/utils/objdir/objdir.c | 8 +- apps/utils/partinfo/.cvsignore | 1 + apps/utils/pice/.cvsignore | 1 + apps/utils/pice/loader/.cvsignore | 6 + apps/utils/pice/module/.cvsignore | 6 + apps/utils/pnpdump/.cvsignore | 6 + apps/utils/pnpdump/makefile | 23 + apps/utils/pnpdump/pnpdump.c | 807 ++++ apps/utils/ps/.cvsignore | 1 + apps/utils/sc/.cvsignore | 1 + apps/utils/stats/.cvsignore | 1 + apps/utils/stats/stats.c | 6 +- apps/utils/tickcount/.cvsignore | 6 + apps/utils/tickcount/tickcount.c | 2 +- baseaddress.cfg | 1 + boot.bat | 2 +- boot.hiv | 46 - bootc.lst | 3 + bootcd.bat | 204 +- bootdata/autorun.inf | 3 + bootdata/hivedef.inf | 26 + bootdata/hivesys.inf | 177 +- bootdata/icon.ico | Bin 0 -> 1406 bytes bootdata/packages/reactos.dff | 143 + bootdata/txtsetup.sif | 116 +- config | 5 + drivers/bus/acpi/.cvsignore | 2 + drivers/bus/acpi/dispatcher/.cvsignore | 1 + drivers/bus/acpi/events/.cvsignore | 1 + drivers/bus/acpi/executer/.cvsignore | 1 + drivers/bus/acpi/hardware/.cvsignore | 1 + drivers/bus/acpi/makefile | 2 + drivers/bus/acpi/namespace/.cvsignore | 1 + drivers/bus/acpi/ospm/.cvsignore | 1 + drivers/bus/acpi/ospm/busmgr/.cvsignore | 1 + drivers/bus/acpi/parser/.cvsignore | 1 + drivers/bus/acpi/resource/.cvsignore | 1 + drivers/bus/acpi/tables/.cvsignore | 1 + drivers/bus/acpi/utils/.cvsignore | 1 + drivers/bus/isapnp/.cvsignore | 1 + drivers/bus/isapnp/isapnp.c | 2 +- drivers/bus/pci/.cvsignore | 1 + drivers/dd/beep/.cvsignore | 1 + drivers/dd/blue/.cvsignore | 1 + drivers/dd/blue/blue.c | 34 +- drivers/dd/bootvid/.cvsignore | 8 + drivers/dd/bootvid/Makefile | 13 + drivers/dd/bootvid/bootimage.bmp | Bin 0 -> 97116 bytes drivers/dd/bootvid/bootvid.c | 816 ++++ drivers/dd/bootvid/bootvid.rc | 40 + drivers/dd/bootvid/pixelsup_i386.S | 101 + drivers/dd/debugout/.cvsignore | 8 + drivers/dd/debugout/debugout.c | 130 + drivers/dd/debugout/debugout.rc | 39 + drivers/dd/debugout/makefile | 13 + drivers/dd/floppy/.cvsignore | 1 + drivers/dd/floppy/floppy.c | 2 +- drivers/dd/ide/.cvsignore | 1 + drivers/dd/ide/ide.c | 2 +- drivers/dd/null/.cvsignore | 1 + drivers/dd/parallel/.cvsignore | 1 + drivers/dd/ramdrv/.cvsignore | 1 + drivers/dd/serial/.cvsignore | 1 + drivers/dd/sound/.cvsignore | 1 + {include => drivers/dd/sound}/in.h | 0 drivers/dd/test/.cvsignore | 1 + drivers/dd/vga/display/.cvsignore | 2 + drivers/dd/vga/display/main/.cvsignore | 1 + drivers/dd/vga/display/main/enable.c | 159 +- drivers/dd/vga/display/main/gdiinfo.h | 119 - drivers/dd/vga/display/objects/.cvsignore | 1 + drivers/dd/vga/display/objects/bitblt.c | 312 +- drivers/dd/vga/display/objects/lineto.c | 434 +- drivers/dd/vga/display/objects/paint.c | 126 +- drivers/dd/vga/display/objects/pointer.c | 42 +- drivers/dd/vga/display/objects/screen.c | 2 + drivers/dd/vga/display/vgaddi.h | 6 + drivers/dd/vga/display/vgavideo/.cvsignore | 1 + drivers/dd/vga/display/vgavideo/vgavideo.c | 576 ++- drivers/dd/vga/display/vgavideo/vgavideo.h | 5 + drivers/dd/vga/miniport/.cvsignore | 1 + drivers/dd/vga/miniport/initvga.c | 14 +- drivers/dd/vga/miniport/vgamp.c | 13 +- drivers/dd/vga/miniport/vgavideo.c | 4 +- drivers/dd/vga/miniport/vgavideo.h | 7 + drivers/dd/videoprt/.cvsignore | 1 + drivers/dd/videoprt/videoprt.c | 396 +- drivers/dd/videoprt/videoprt.edf | 4 +- drivers/fs/cdfs/.cvsignore | 1 + drivers/fs/cdfs/cdfs.h | 2 +- drivers/fs/cdfs/cleanup.c | 2 +- drivers/fs/cdfs/dirctl.c | 4 +- drivers/fs/cdfs/fcb.c | 9 +- drivers/fs/cdfs/fsctl.c | 2 +- drivers/fs/fs_rec/.cvsignore | 1 + drivers/fs/fs_rec/fs_rec.c | 2 +- drivers/fs/minix/.cvsignore | 2 +- drivers/fs/ms/.cvsignore | 1 + drivers/fs/ms/fsctrl.c | 6 +- drivers/fs/mup/.cvsignore | 1 + drivers/fs/np/.cvsignore | 2 + drivers/fs/np/Makefile | 4 + drivers/fs/np/create.c | 172 +- drivers/fs/np/fsctrl.c | 6 +- drivers/fs/np/npfs.c | 14 +- drivers/fs/np/npfs.h | 29 +- drivers/fs/np/rw.c | 337 +- drivers/fs/ntfs/.cvsignore | 2 + drivers/fs/ntfs/attrib.c | 8 +- drivers/fs/ntfs/close.c | 112 + drivers/fs/ntfs/dirctl.c | 4 +- drivers/fs/ntfs/fcb.c | 78 +- drivers/fs/ntfs/finfo.c | 12 +- drivers/fs/ntfs/fsctl.c | 4 +- drivers/fs/ntfs/makefile | 2 +- drivers/fs/ntfs/notes.txt | 5 + drivers/fs/ntfs/ntfs.c | 24 +- drivers/fs/ntfs/ntfs.h | 46 +- drivers/fs/ntfs/rw.c | 199 + drivers/fs/ntfs/volinfo.c | 2 +- drivers/fs/vfat/.cvsignore | 1 + drivers/fs/vfat/cleanup.c | 5 +- drivers/fs/vfat/close.c | 4 +- drivers/fs/vfat/create.c | 124 +- drivers/fs/vfat/dir.c | 13 +- drivers/fs/vfat/dirwr.c | 31 +- drivers/fs/vfat/fat.c | 46 +- drivers/fs/vfat/fcb.c | 23 +- drivers/fs/vfat/finfo.c | 58 +- drivers/fs/vfat/fsctl.c | 199 +- drivers/fs/vfat/misc.c | 82 +- drivers/fs/vfat/rw.c | 224 +- drivers/fs/vfat/vfat.h | 16 +- drivers/fs/vfat/volume.c | 55 +- drivers/input/keyboard/.cvsignore | 1 + drivers/input/mouclass/.cvsignore | 1 + drivers/input/mouclass/mouclass.c | 49 +- drivers/input/psaux/.cvsignore | 1 + drivers/input/psaux/mouse.c | 9 +- drivers/input/psaux/psaux.c | 98 +- drivers/input/sermouse/.cvsignore | 1 + drivers/input/sermouse/sermouse.c | 985 ++-- drivers/input/sermouse/sermouse.rc | 2 +- drivers/input/sermouse/sermouse.txt | 82 + drivers/lib/bzip2/.cvsignore | 3 +- drivers/net/afd/.cvsignore | 1 + drivers/net/afd/afd/.cvsignore | 1 + drivers/net/afd/afd/afd.c | 14 +- drivers/net/afd/afd/opnclose.c | 5 +- drivers/net/afd/include/afd.h | 15 - drivers/net/dd/ne2000/.cvsignore | 1 + drivers/net/dd/ne2000/include/debug.h | 6 +- drivers/net/dd/ne2000/include/ne2000.h | 4 +- drivers/net/dd/ne2000/ne2000/.cvsignore | 1 + drivers/net/dd/ne2000/ne2000/8390.c | 73 +- drivers/net/dd/ne2000/ne2000/main.c | 141 +- drivers/net/dd/pcnet/.cvsignore | 2 + drivers/net/dd/pcnet/Makefile | 14 + drivers/net/dd/pcnet/pci.h | 69 + drivers/net/dd/pcnet/pcnet.c | 1074 +++++ drivers/net/dd/pcnet/pcnet.h | 114 + drivers/net/dd/pcnet/pcnet.rc | 38 + drivers/net/dd/pcnet/pcnethw.h | 411 ++ drivers/net/ndis/.cvsignore | 1 + drivers/net/ndis/Makefile | 4 +- drivers/net/ndis/include/debug.h | 6 +- drivers/net/ndis/include/miniport.h | 75 + drivers/net/ndis/include/protocol.h | 3 +- drivers/net/ndis/ndis.def | 7 +- drivers/net/ndis/ndis.edf | 7 +- drivers/net/ndis/ndis/.cvsignore | 1 + drivers/net/ndis/ndis/40gone.c | 202 + drivers/net/ndis/ndis/50gone.c | 66 + drivers/net/ndis/ndis/buffer.c | 84 +- drivers/net/ndis/ndis/cl.c | 30 + drivers/net/ndis/ndis/cm.c | 71 +- drivers/net/ndis/ndis/co.c | 38 +- drivers/net/ndis/ndis/config.c | 887 ++++ drivers/net/ndis/ndis/control.c | 72 +- drivers/net/ndis/ndis/enum.c | 453 ++ drivers/net/ndis/ndis/hardware.c | 105 +- drivers/net/ndis/ndis/io.c | 342 +- drivers/net/ndis/ndis/main.c | 126 +- drivers/net/ndis/ndis/memory.c | 204 +- drivers/net/ndis/ndis/miniport.c | 715 ++- drivers/net/ndis/ndis/protocol.c | 242 +- drivers/net/ndis/ndis/string.c | 33 +- drivers/net/ndis/ndis/stubs.c | 451 +- drivers/net/ndis/ndis/time.c | 75 +- drivers/net/npf/.cvsignore | 1 + drivers/net/npf/bucket_lookup.c | 3 +- drivers/net/npf/bucket_lookup.h | 3 +- drivers/net/npf/dump.c | 2 + drivers/net/npf/functions.h | 3 +- drivers/net/npf/normal_lookup.h | 3 +- drivers/net/npf/packet.c | 12 +- drivers/net/npf/tcp_session.c | 3 +- drivers/net/npf/tcp_session.h | 3 +- drivers/net/npf/tme.c | 3 +- drivers/net/npf/tme.h | 3 +- drivers/net/npf/win_bpf_filter.c | 3 +- drivers/net/npf/win_bpf_filter_init.h | 3 +- drivers/net/packet/.cvsignore | 1 + drivers/net/packet/bucket_lookup.c | 3 +- drivers/net/packet/bucket_lookup.h | 3 +- drivers/net/packet/dump.c | 4 +- drivers/net/packet/functions.c | 1 + drivers/net/packet/functions.h | 3 +- drivers/net/packet/normal_lookup.c | 1 + drivers/net/packet/normal_lookup.h | 3 +- drivers/net/packet/packet.c | 3 +- drivers/net/packet/packet.h | 5 +- drivers/net/packet/tcp_session.c | 3 +- drivers/net/packet/tcp_session.h | 3 +- drivers/net/packet/tme.h | 3 +- drivers/net/packet/win_bpf_filter.c | 3 +- drivers/net/packet/win_bpf_filter_init.h | 3 +- drivers/net/tcpip/.cvsignore | 1 + drivers/net/tcpip/datalink/.cvsignore | 1 + drivers/net/tcpip/datalink/lan.c | 44 +- drivers/net/tcpip/include/lan.h | 5 +- drivers/net/tcpip/include/ticonsts.h | 8 +- drivers/net/tcpip/makefile | 2 +- drivers/net/tcpip/network/.cvsignore | 1 + drivers/net/tcpip/tcpip/.cvsignore | 1 + drivers/net/tcpip/tcpip/main.c | 74 +- drivers/net/tcpip/tcpip/routines.c | 14 +- drivers/net/tcpip/transport/datagram/.cvsignore | 1 + drivers/net/tcpip/transport/rawip/.cvsignore | 1 + drivers/net/tcpip/transport/tcp/.cvsignore | 1 + drivers/net/tcpip/transport/tcp/tcp_output.c | 2 +- drivers/net/tcpip/transport/udp/.cvsignore | 1 + drivers/net/tdi/.cvsignore | 1 + drivers/net/tdi/cte/.cvsignore | 1 + drivers/net/tdi/cte/string.c | 7 +- drivers/net/tdi/cte/stubs.c | 28 +- drivers/net/tdi/misc/.cvsignore | 1 + drivers/net/tdi/tdi/.cvsignore | 1 + drivers/net/tdi/tdi/dereg.c | 24 + drivers/net/tdi/tdi/handler.c | 61 +- drivers/net/tdi/tdi/obsolete.c | 7 +- drivers/net/tdi/tdi/stubs.c | 25 +- drivers/net/tditest/.cvsignore | 1 + drivers/net/tditest/include/debug.h | 4 +- drivers/net/wshtcpip/.cvsignore | 1 + drivers/net/wshtcpip/debug.h | 5 +- drivers/storage/atapi/.cvsignore | 1 + drivers/storage/atapi/atapi.c | 483 +- drivers/storage/atapi/atapi.h | 58 +- drivers/storage/cdrom/.cvsignore | 1 + drivers/storage/cdrom/cdrom.c | 298 +- drivers/storage/class2/.cvsignore | 1 + drivers/storage/class2/class2.c | 748 ++- drivers/storage/disk/.cvsignore | 1 + drivers/storage/disk/disk.c | 123 +- drivers/storage/diskdump/.cvsignore | 8 + drivers/storage/diskdump/Makefile | 19 + drivers/storage/diskdump/diskdump.c | 432 ++ drivers/storage/diskdump/diskdump.def | 7 + drivers/storage/diskdump/diskdump.edf | 7 + drivers/storage/diskdump/diskdump.rc | 38 + drivers/storage/diskdump/diskdump_helper.S | 9 + drivers/storage/scsiport/.cvsignore | 1 + drivers/storage/scsiport/scsiport.c | 1326 ++++-- drivers/storage/scsiport/scsiport_int.h | 100 + hal/hal/.cvsignore | 6 +- hal/hal/hal.def | 3 + hal/hal/hal.edf | 3 + hal/halx86/.cvsignore | 6 +- hal/halx86/Makefile | 6 +- hal/halx86/adapter.c | 2 +- hal/halx86/display.c | 566 ++- hal/halx86/dma.c | 66 +- hal/halx86/halinit.c | 6 + hal/halx86/include/hal.h | 18 +- hal/halx86/irql.c | 4 +- hal/halx86/mp.c | 28 +- hal/halx86/mpsirql.c | 8 +- hal/halx86/perfcnt.c | 62 - hal/halx86/reboot.c | 2 +- hal/halx86/spinlock.c | 3 +- hal/halx86/timer.c | 273 ++ hal/halx86/udelay.c | 223 - iface/addsys/genw32k.c | 5 +- iface/addsys/w32ksvc.db | 589 +-- iface/native/sysfuncs.lst | 2 + include/accctrl.h | 465 ++ include/aclapi.h | 132 + include/afd/shared.h | 2 +- include/ascii.h | 708 ++- include/base.h | 302 +- include/basetsd.h | 2 +- include/coff.h | 19 +- include/csrss/csrss.h | 39 +- include/d3d.h | 128 + include/d3dcaps.h | 432 ++ include/d3dtypes.h | 1348 ++++++ include/ddentry.h | 357 ++ include/ddk/af_irda.h | 30 +- include/ddk/cctypes.h | 21 +- include/ddk/class2.h | 52 +- include/ddk/d3dhal.h | 615 +++ include/ddk/dbgfuncs.h | 13 - include/ddk/ddrawi.h | 1332 ++++++ include/ddk/defines.h | 5 +- include/ddk/exfuncs.h | 182 +- include/ddk/extypes.h | 110 +- include/ddk/fsfuncs.h | 9 +- include/ddk/fstypes.h | 37 +- include/ddk/halfuncs.h | 48 +- include/ddk/haltypes.h | 483 -- include/ddk/i386/tss.h | 57 - include/ddk/ioctrl.h | 8 +- include/ddk/iofuncs.h | 17 +- include/ddk/iotypes.h | 301 +- include/ddk/kdfuncs.h | 99 - include/ddk/kefuncs.h | 88 +- include/ddk/ketypes.h | 123 +- include/ddk/mmfuncs.h | 29 +- include/ddk/mmtypes.h | 8 +- include/ddk/ntbootvid.h | 11 + include/ddk/ntddblue.h | 4 +- include/ddk/ntddk.h | 10 +- include/ddk/ntddkbd.h | 8 +- include/ddk/ntddmou.h | 17 +- include/ddk/ntddscsi.h | 54 +- include/ddk/ntifs.h | 16 + include/ddk/obfuncs.h | 49 - include/ddk/obtypes.h | 204 - include/ddk/pnptypes.h | 38 +- include/ddk/potypes.h | 14 +- include/ddk/psfuncs.h | 19 +- include/ddk/pstypes.h | 46 +- include/ddk/scsi.h | 76 +- include/ddk/service.h | 60 - include/ddk/setypes.h | 68 +- include/ddk/srb.h | 42 +- include/ddk/status.h | 20 +- include/ddk/types.h | 11 +- include/ddk/winddi.h | 558 ++- include/ddraw.h | 953 ++++ include/debug.h | 12 +- include/defines.h | 280 +- include/dflat32/classes.h | 6 +- include/dflat32/config.h | 2 +- include/dflat32/dflat.h | 6 +- include/dflat32/system.h | 12 +- include/epsapi.h | 16 +- include/errors.h | 31 +- include/funcs.h | 4268 ++++++++++++++++- include/icmpapi.h | 94 + include/ipexport.h | 122 + include/iphlpapi.h | 178 + include/ipifcons.h | 40 + include/iprtrmib.h | 289 ++ include/iptypes.h | 228 + include/kernel32/kernel32.h | 6 + include/kernel32/process.h | 4 +- include/kernel32/winnls.h | 24 +- include/lsass/lsass.h | 2 +- include/messages.h | 29 + include/mmddk.h | 442 ++ include/msvcrt/crttypes.h | 10 +- include/msvcrt/ctype.h | 4 +- include/msvcrt/float.h | 6 +- include/msvcrt/internal/file.h | 4 +- include/msvcrt/math.h | 12 +- include/msvcrt/mbctype.h | 8 +- include/msvcrt/msvcrtdbg.h | 10 +- include/msvcrt/search.h | 44 +- include/msvcrt/stdio.h | 16 +- include/msvcrt/stdlib.h | 19 + include/msvcrt/string.h | 4 +- include/napi/core.h | 18 +- include/napi/lpc.h | 9 +- include/napi/npipe.h | 2 +- include/napi/shared_data.h | 9 +- include/napi/teb.h | 240 +- include/napi/types.h | 2 +- include/napi/win32.h | 2 + include/ndis.h | 1 + include/net/miniport.h | 2 + include/net/ndis.h | 739 +-- include/net/ndisoid.h | 10 + include/net/tdi.h | 10 +- include/ntdll/ldr.h | 24 +- include/ntdll/ntdll.h | 4 + include/ntdll/rtl.h | 10 + include/ntos.h | 25 +- include/ntos/bootvid.h | 76 + include/ntos/cdrom.h | 12 +- include/ntos/console.h | 10 +- include/ntos/dbgfuncs.h | 19 + include/ntos/disk.h | 64 +- include/ntos/except.h | 10 +- include/ntos/file.h | 13 +- include/ntos/fstypes.h | 35 + include/ntos/gditypes.h | 78 +- include/ntos/halfuncs.h | 61 + include/ntos/haltypes.h | 505 ++ include/ntos/kdfuncs.h | 102 + include/ntos/kefuncs.h | 28 + include/ntos/keyboard.h | 2 +- include/ntos/mm.h | 3 + include/ntos/ntdef.h | 4 +- include/ntos/obtypes.h | 209 + include/ntos/ps.h | 12 + include/ntos/registry.h | 6 + include/ntos/rtl.h | 209 +- include/ntos/rtltypes.h | 75 +- include/ntos/security.h | 11 +- include/ntos/service.h | 68 + include/ntos/tss.h | 103 + include/ntos/types.h | 111 +- include/ntos/zw.h | 1328 ++++-- include/ntos/zwtypes.h | 437 +- include/ntsecapi.h | 572 +++ include/ole32/guiddef.h | 41 +- include/ole32/obj_base.h | 16 +- include/ole32/obj_dragdrop.h | 32 + include/ole32/obj_shellfolder.h | 9 + include/ole32/objbase.h | 30 +- include/ole32/olectl.h | 2 +- include/ole32/rpc.h | 2 +- include/ole32/winerror.h | 20 +- include/pe.h | 6 +- include/reactos/config.h | 4 +- include/reactos/resource.h | 3 + include/reactos/version.h | 4 +- include/richedit.h | 628 +++ include/roskrnl.h | 2 + include/rosrtl/devmode.h | 16 + include/rosrtl/logfont.h | 19 + include/rosrtl/thread.h | 48 +- include/structs.h | 2890 ++++++++--- include/syssetup.h | 55 + include/tchar.h | 4 + include/tgetopt.h | 90 + include/unicode.h | 727 ++- include/user32/accel.h | 38 + include/user32/callback.h | 60 +- include/user32/regcontrol.h | 47 + include/wdm.h | 1 + include/win32k/bitmaps.h | 85 +- include/win32k/brush.h | 50 +- include/win32k/cliprgn.h | 22 +- include/win32k/color.h | 42 +- include/win32k/coord.h | 53 +- include/win32k/cursoricon.h | 133 + include/win32k/dc.h | 185 +- include/win32k/fillshap.h | 14 +- include/win32k/gdiobj.h | 133 +- include/win32k/icm.h | 36 +- include/win32k/kapi.h | 1 + include/win32k/line.h | 34 +- include/win32k/math.h | 7 +- include/win32k/metafile.h | 52 +- include/win32k/misc.h | 8 +- include/win32k/ntuser.h | 658 +-- include/win32k/paint.h | 12 +- include/win32k/path.h | 26 +- include/win32k/pen.h | 22 +- include/win32k/print.h | 18 +- include/win32k/region.h | 69 +- include/win32k/text.h | 92 +- include/win32k/userobj.h | 12 +- include/win32k/wingl.h | 12 +- include/wincrypt.h | 430 ++ include/windows.h | 10 +- include/wine/commctrl.h | 4492 ------------------ include/wine/config.h | 227 +- include/wine/debug.h | 1 + include/wine/debugtools.h | 6 + include/wine/port.h | 19 + include/wine/test.h | 332 ++ include/wine/unicode.h | 15 + include/wine/windef16.h | 146 + include/wine/wine_common_ver.rc | 86 + include/winsock2.h | 338 +- include/ws2spi.h | 2 +- install-unix.sh | 159 + install.bat | 145 +- installwine.bat | 19 +- lib/Jamfile | 5 + lib/advapi32/.cvsignore | 15 +- lib/advapi32/Jamfile | 34 + lib/advapi32/advapi32.def | 432 +- lib/advapi32/advapi32.edf | 655 ++- lib/advapi32/makefile | 9 +- lib/advapi32/misc/aclstubs.c | 319 ++ lib/advapi32/misc/crstubs.c | 298 ++ lib/advapi32/misc/shutdown.c | 10 +- lib/advapi32/misc/stubs.c | 1535 ++++++ lib/advapi32/misc/sysfunc.c | 58 + lib/advapi32/reg/reg.c | 3212 ++++++++----- lib/advapi32/sec/ac.c | 33 + lib/advapi32/sec/audit.c | 510 ++ lib/advapi32/sec/lsa.c | 501 +- lib/advapi32/sec/misc.c | 24 + lib/advapi32/sec/sec.c | 164 +- lib/advapi32/sec/sid.c | 61 + lib/advapi32/service/scm.c | 398 +- lib/advapi32/service/sctrl.c | 26 +- lib/advapi32/token/privilege.c | 62 +- lib/advapi32/token/token.c | 39 +- lib/cards/.cvsignore | 10 + lib/cards/Makefile | 28 + lib/cards/cards.c | 233 + lib/cards/cards.def | 8 + lib/cards/cards.edf | 8 + lib/cards/cards.h | 61 + lib/cards/cards.rc | 115 + lib/cards/res/Background_1.bmp | Bin 0 -> 3998 bytes lib/cards/res/Clubs_Ace.bmp | Bin 0 -> 3998 bytes lib/cards/res/Clubs_Eight.bmp | Bin 0 -> 3998 bytes lib/cards/res/Clubs_Five.bmp | Bin 0 -> 3998 bytes lib/cards/res/Clubs_Four.bmp | Bin 0 -> 3998 bytes lib/cards/res/Clubs_Jack.bmp | Bin 0 -> 3998 bytes lib/cards/res/Clubs_King.bmp | Bin 0 -> 3998 bytes lib/cards/res/Clubs_Nine.bmp | Bin 0 -> 3998 bytes lib/cards/res/Clubs_Queen.bmp | Bin 0 -> 3998 bytes lib/cards/res/Clubs_Seven.bmp | Bin 0 -> 3998 bytes lib/cards/res/Clubs_Six.bmp | Bin 0 -> 3998 bytes lib/cards/res/Clubs_Ten.bmp | Bin 0 -> 3998 bytes lib/cards/res/Clubs_Three.bmp | Bin 0 -> 3998 bytes lib/cards/res/Clubs_Two.bmp | Bin 0 -> 3998 bytes lib/cards/res/Diamonds_Ace.bmp | Bin 0 -> 3998 bytes lib/cards/res/Diamonds_Eight.bmp | Bin 0 -> 3998 bytes lib/cards/res/Diamonds_Five.bmp | Bin 0 -> 3998 bytes lib/cards/res/Diamonds_Four.bmp | Bin 0 -> 3998 bytes lib/cards/res/Diamonds_Jack.bmp | Bin 0 -> 3998 bytes lib/cards/res/Diamonds_King.bmp | Bin 0 -> 3998 bytes lib/cards/res/Diamonds_Nine.bmp | Bin 0 -> 3998 bytes lib/cards/res/Diamonds_Queen.bmp | Bin 0 -> 3998 bytes lib/cards/res/Diamonds_Seven.bmp | Bin 0 -> 3998 bytes lib/cards/res/Diamonds_Six.bmp | Bin 0 -> 3998 bytes lib/cards/res/Diamonds_Ten.bmp | Bin 0 -> 3998 bytes lib/cards/res/Diamonds_Three.bmp | Bin 0 -> 3998 bytes lib/cards/res/Diamonds_Two.bmp | Bin 0 -> 3998 bytes lib/cards/res/FreeCard.bmp | Bin 0 -> 1226 bytes lib/cards/res/Hearts_Ace.bmp | Bin 0 -> 3998 bytes lib/cards/res/Hearts_Eight.bmp | Bin 0 -> 3998 bytes lib/cards/res/Hearts_Five.bmp | Bin 0 -> 3998 bytes lib/cards/res/Hearts_Four.bmp | Bin 0 -> 3998 bytes lib/cards/res/Hearts_Jack.bmp | Bin 0 -> 3998 bytes lib/cards/res/Hearts_King.bmp | Bin 0 -> 3998 bytes lib/cards/res/Hearts_Nine.bmp | Bin 0 -> 3998 bytes lib/cards/res/Hearts_Queen.bmp | Bin 0 -> 3998 bytes lib/cards/res/Hearts_Seven.bmp | Bin 0 -> 3998 bytes lib/cards/res/Hearts_Six.bmp | Bin 0 -> 3998 bytes lib/cards/res/Hearts_Ten.bmp | Bin 0 -> 3998 bytes lib/cards/res/Hearts_Three.bmp | Bin 0 -> 3998 bytes lib/cards/res/Hearts_Two.bmp | Bin 0 -> 3998 bytes lib/cards/res/Joker.bmp | Bin 0 -> 3998 bytes lib/cards/res/OSign.bmp | Bin 0 -> 3998 bytes lib/cards/res/Spades_Ace.bmp | Bin 0 -> 3998 bytes lib/cards/res/Spades_Eight.bmp | Bin 0 -> 3998 bytes lib/cards/res/Spades_Five.bmp | Bin 0 -> 3998 bytes lib/cards/res/Spades_Four.bmp | Bin 0 -> 3998 bytes lib/cards/res/Spades_Jack.bmp | Bin 0 -> 3998 bytes lib/cards/res/Spades_King.bmp | Bin 0 -> 3998 bytes lib/cards/res/Spades_Nine.bmp | Bin 0 -> 3998 bytes lib/cards/res/Spades_Queen.bmp | Bin 0 -> 3998 bytes lib/cards/res/Spades_Seven.bmp | Bin 0 -> 3998 bytes lib/cards/res/Spades_Six.bmp | Bin 0 -> 3998 bytes lib/cards/res/Spades_Ten.bmp | Bin 0 -> 3998 bytes lib/cards/res/Spades_Three.bmp | Bin 0 -> 3998 bytes lib/cards/res/Spades_Two.bmp | Bin 0 -> 3998 bytes lib/cards/res/XSign.bmp | Bin 0 -> 3998 bytes lib/crtdll/.cvsignore | 7 +- lib/crtdll/conio/cgets.c | 5 +- lib/crtdll/conio/cprintf.c | 3 + lib/crtdll/conio/cputs.c | 3 + lib/crtdll/conio/cscanf.c | 3 + lib/crtdll/conio/getch.c | 6 + lib/crtdll/conio/kbhit.c | 3 + lib/crtdll/conio/putch.c | 3 + lib/crtdll/conio/ungetch.c | 3 + lib/crtdll/crtdll.def | 131 +- lib/crtdll/ctype/ctype.c | 264 -- lib/crtdll/ctype/isalnum.c | 23 - lib/crtdll/ctype/isalpha.c | 25 - lib/crtdll/ctype/isascii.c | 21 - lib/crtdll/ctype/iscntrl.c | 15 - lib/crtdll/ctype/iscsym.c | 21 - lib/crtdll/ctype/isctype.c | 23 +- lib/crtdll/ctype/isdigit.c | 15 - lib/crtdll/ctype/isgraph.c | 14 - lib/crtdll/ctype/islower.c | 14 - lib/crtdll/ctype/isprint.c | 13 - lib/crtdll/ctype/ispunct.c | 15 - lib/crtdll/ctype/isspace.c | 24 - lib/crtdll/ctype/isupper.c | 14 - lib/crtdll/ctype/isxdigit.c | 16 - lib/crtdll/ctype/toascii.c | 9 - lib/crtdll/ctype/tolower.c | 36 - lib/crtdll/ctype/toupper.c | 36 - lib/crtdll/direct/chdir.c | 3 + lib/crtdll/direct/chdrive.c | 3 + lib/crtdll/direct/getcwd.c | 3 + lib/crtdll/direct/getdcwd.c | 3 + lib/crtdll/direct/getdfree.c | 3 + lib/crtdll/direct/getdrive.c | 6 + lib/crtdll/direct/mkdir.c | 3 + lib/crtdll/direct/rmdir.c | 3 + lib/crtdll/except/abnorter.c | 3 + lib/crtdll/except/exhand2.c | 3 + lib/crtdll/except/matherr.c | 6 + lib/crtdll/except/unwind.c | 6 + lib/crtdll/float/chgsign.c | 3 + lib/crtdll/float/clearfp.c | 3 + lib/crtdll/float/cntrlfp.c | 6 + lib/crtdll/float/copysign.c | 3 + lib/crtdll/float/fpclass.c | 3 + lib/crtdll/float/fpreset.c | 3 + lib/crtdll/float/isnan.c | 6 + lib/crtdll/float/nafter.c | 3 + lib/crtdll/float/scalb.c | 3 + lib/crtdll/float/statfp.c | 3 + lib/crtdll/io/access.c | 3 + lib/crtdll/io/chmod.c | 3 + lib/crtdll/io/chsize.c | 3 + lib/crtdll/io/close.c | 3 + lib/crtdll/io/commit.c | 3 + lib/crtdll/io/create.c | 3 + lib/crtdll/io/dup.c | 3 + lib/crtdll/io/dup2.c | 3 + lib/crtdll/io/eof.c | 3 + lib/crtdll/io/filelen.c | 3 + lib/crtdll/io/find.c | 9 + lib/crtdll/io/isatty.c | 3 + lib/crtdll/io/locking.c | 3 + lib/crtdll/io/lseek.c | 3 + lib/crtdll/io/mktemp.c | 3 + lib/crtdll/io/open.c | 9 + lib/crtdll/io/pipe.c | 3 + lib/crtdll/io/read.c | 3 + lib/crtdll/io/setmode.c | 3 + lib/crtdll/io/sopen.c | 3 + lib/crtdll/io/tell.c | 3 + lib/crtdll/io/umask.c | 3 + lib/crtdll/io/unlink.c | 3 + lib/crtdll/io/utime.c | 3 + lib/crtdll/io/write.c | 3 + lib/crtdll/locale/.cvsignore | 3 - lib/crtdll/locale/locale.c | 141 - lib/crtdll/makefile | 143 +- lib/crtdll/malloc/expand.c | 6 + lib/crtdll/malloc/heap.c | 12 + lib/crtdll/math/atan2.c | 3 + lib/crtdll/math/cabs.c | 3 + lib/crtdll/math/ceil.c | 3 + lib/crtdll/math/cos.c | 3 + lib/crtdll/math/cosh.c | 3 + lib/crtdll/math/frexp.c | 3 + lib/crtdll/math/hypot.c | 3 + lib/crtdll/math/j0_y0.c | 6 + lib/crtdll/math/j1_y1.c | 6 + lib/crtdll/math/jn_yn.c | 6 + lib/crtdll/math/pow.c | 3 + lib/crtdll/math/sinh.c | 3 + lib/crtdll/math/stubs.c | 48 + lib/crtdll/math/tanh.c | 3 + lib/crtdll/mbstring/hanzen.c | 6 + lib/crtdll/mbstring/ischira.c | 12 + lib/crtdll/mbstring/iskana.c | 3 + lib/crtdll/mbstring/iskpun.c | 3 + lib/crtdll/mbstring/islead.c | 3 + lib/crtdll/mbstring/islwr.c | 6 +- lib/crtdll/mbstring/ismbal.c | 3 + lib/crtdll/mbstring/ismbaln.c | 3 + lib/crtdll/mbstring/ismbc.c | 27 + lib/crtdll/mbstring/ismbgra.c | 3 + lib/crtdll/mbstring/ismbkaln.c | 3 + lib/crtdll/mbstring/ismblead.c | 6 + lib/crtdll/mbstring/ismbpri.c | 3 + lib/crtdll/mbstring/ismbpun.c | 3 + lib/crtdll/mbstring/ismbtrl.c | 6 + lib/crtdll/mbstring/isuppr.c | 6 +- lib/crtdll/mbstring/jistojms.c | 3 + lib/crtdll/mbstring/jmstojis.c | 3 + lib/crtdll/mbstring/mbbtype.c | 6 + lib/crtdll/mbstring/mbccpy.c | 3 + lib/crtdll/mbstring/mbclen.c | 9 +- lib/crtdll/mbstring/mbscat.c | 3 + lib/crtdll/mbstring/mbschr.c | 3 + lib/crtdll/mbstring/mbscmp.c | 3 + lib/crtdll/mbstring/mbscpy.c | 3 + lib/crtdll/mbstring/mbscspn.c | 6 +- lib/crtdll/mbstring/mbsdec.c | 3 + lib/crtdll/mbstring/mbsdup.c | 3 + lib/crtdll/mbstring/mbsicmp.c | 3 + lib/crtdll/mbstring/mbsinc.c | 3 + lib/crtdll/mbstring/mbslen.c | 3 + lib/crtdll/mbstring/mbslwr.c | 6 + lib/crtdll/mbstring/mbsncat.c | 6 + lib/crtdll/mbstring/mbsnccnt.c | 6 + lib/crtdll/mbstring/mbsncmp.c | 6 + lib/crtdll/mbstring/mbsncpy.c | 15 +- lib/crtdll/mbstring/mbsnextc.c | 3 + lib/crtdll/mbstring/mbsnicmp.c | 6 + lib/crtdll/mbstring/mbsninc.c | 3 + lib/crtdll/mbstring/mbsnset.c | 6 + lib/crtdll/mbstring/mbspbrk.c | 6 +- lib/crtdll/mbstring/mbsrchr.c | 3 + lib/crtdll/mbstring/mbsrev.c | 3 + lib/crtdll/mbstring/mbsset.c | 3 + lib/crtdll/mbstring/mbsspn.c | 6 +- lib/crtdll/mbstring/mbsspnp.c | 6 +- lib/crtdll/mbstring/mbsstr.c | 3 + lib/crtdll/mbstring/mbstok.c | 3 + lib/crtdll/mbstring/mbstrlen.c | 3 + lib/crtdll/mbstring/mbsupr.c | 6 + lib/crtdll/misc/GetArgs.c | 3 + lib/crtdll/misc/amsg.c | 6 + lib/crtdll/misc/assert.c | 3 + lib/crtdll/misc/dllcrt1.c | 2 + lib/crtdll/misc/initter.c | 5 +- lib/crtdll/misc/initterm.c | 9 + lib/crtdll/misc/purecall.c | 3 + lib/crtdll/misc/unwind.c | 6 + lib/crtdll/process/_cwait.c | 3 + lib/crtdll/process/_system.c | 7 +- lib/crtdll/process/dll.c | 9 + lib/crtdll/process/execl.c | 3 + lib/crtdll/process/execle.c | 7 +- lib/crtdll/process/execlp.c | 3 + lib/crtdll/process/execv.c | 3 + lib/crtdll/process/execve.c | 3 + lib/crtdll/process/execvp.c | 3 + lib/crtdll/process/execvpe.c | 3 + lib/crtdll/process/procid.c | 3 + lib/crtdll/process/spawnl.c | 3 + lib/crtdll/process/spawnle.c | 3 + lib/crtdll/process/spawnlp.c | 3 + lib/crtdll/process/spawnlpe.c | 3 + lib/crtdll/process/spawnv.c | 3 + lib/crtdll/process/spawnve.c | 10 +- lib/crtdll/process/spawnvp.c | 3 + lib/crtdll/process/spawnvpe.c | 3 + lib/crtdll/process/thread.c | 6 + lib/crtdll/process/threadid.c | 6 + lib/crtdll/search/lfind.c | 3 + lib/crtdll/search/lsearch.c | 3 + lib/crtdll/setjmp/setjmp.c | 6 + lib/crtdll/signal/signal.c | 6 + lib/crtdll/signal/xcptfil.c | 3 + lib/crtdll/signal/xcptinfo.c | 3 + lib/crtdll/stdio/allocfil.c | 3 + lib/crtdll/stdio/clearerr.c | 3 + lib/crtdll/stdio/fclose.c | 3 + lib/crtdll/stdio/fdopen.c | 3 + lib/crtdll/stdio/feof.c | 3 + lib/crtdll/stdio/ferror.c | 3 + lib/crtdll/stdio/fflush.c | 6 + lib/crtdll/stdio/fgetc.c | 6 + lib/crtdll/stdio/fgetchar.c | 3 + lib/crtdll/stdio/fgetpos.c | 3 + lib/crtdll/stdio/filbuf.c | 3 + lib/crtdll/stdio/fileno.c | 3 + lib/crtdll/stdio/flsbuf.c | 3 + lib/crtdll/stdio/fopen.c | 3 + lib/crtdll/stdio/fprintf.c | 6 + lib/crtdll/stdio/fputc.c | 6 + lib/crtdll/stdio/fputchar.c | 6 + lib/crtdll/stdio/fputs.c | 3 + lib/crtdll/stdio/fread.c | 3 + lib/crtdll/stdio/freopen.c | 3 + lib/crtdll/stdio/fscanf.c | 6 + lib/crtdll/stdio/fseek.c | 3 + lib/crtdll/stdio/fsetpos.c | 3 + lib/crtdll/stdio/fsopen.c | 3 + lib/crtdll/stdio/ftell.c | 3 + lib/crtdll/stdio/fwrite.c | 3 + lib/crtdll/stdio/getc.c | 3 + lib/crtdll/stdio/getchar.c | 3 + lib/crtdll/stdio/getenv.c | 3 + lib/crtdll/stdio/gets.c | 3 + lib/crtdll/stdio/getw.c | 6 +- lib/crtdll/stdio/perror.c | 3 + lib/crtdll/stdio/popen.c | 10 +- lib/crtdll/stdio/printf.c | 6 + lib/crtdll/stdio/putc.c | 3 + lib/crtdll/stdio/putchar.c | 3 + lib/crtdll/stdio/puts.c | 3 + lib/crtdll/stdio/putw.c | 6 +- lib/crtdll/stdio/remove.c | 3 + lib/crtdll/stdio/rename.c | 3 + lib/crtdll/stdio/rewind.c | 3 + lib/crtdll/stdio/scanf.c | 69 - lib/crtdll/stdio/setbuf.c | 3 + lib/crtdll/stdio/setvbuf.c | 3 + lib/crtdll/stdio/sprintf.c | 12 + lib/crtdll/stdio/sscanf.c | 6 + lib/crtdll/stdio/tempnam.c | 3 + lib/crtdll/stdio/tmpfile.c | 3 + lib/crtdll/stdio/tmpnam.c | 3 + lib/crtdll/stdio/ungetc.c | 6 + lib/crtdll/stdio/vfprintf.c | 21 +- lib/crtdll/stdio/vfscanf.c | 1198 ----- lib/crtdll/stdio/vfwprint.c | 3 + lib/crtdll/stdio/vsprintf.c | 12 + lib/crtdll/stdlib/_exit.c | 12 + lib/crtdll/stdlib/abort.c | 3 + lib/crtdll/stdlib/abs.c | 3 + lib/crtdll/stdlib/atexit.c | 3 + lib/crtdll/stdlib/atof.c | 3 + lib/crtdll/stdlib/atoi.c | 3 + lib/crtdll/stdlib/atol.c | 3 + lib/crtdll/stdlib/bsearch.c | 3 + lib/crtdll/stdlib/calloc.c | 3 + lib/crtdll/stdlib/div.c | 3 + lib/crtdll/stdlib/ecvt.c | 3 + lib/crtdll/stdlib/errno.c | 9 + lib/crtdll/stdlib/fcvt.c | 3 + lib/crtdll/stdlib/fullpath.c | 3 + lib/crtdll/stdlib/gcvt.c | 3 + lib/crtdll/stdlib/itoa.c | 21 + lib/crtdll/stdlib/itow.c | 21 + lib/crtdll/stdlib/labs.c | 3 + lib/crtdll/stdlib/ldiv.c | 3 + lib/crtdll/stdlib/makepath.c | 3 + lib/crtdll/stdlib/malloc.c | 12 + lib/crtdll/stdlib/mbstowcs.c | 6 + lib/crtdll/stdlib/obsol.c | 9 + lib/crtdll/stdlib/qsort.c | 2 + lib/crtdll/stdlib/rand.c | 6 + lib/crtdll/stdlib/rot.c | 12 + lib/crtdll/stdlib/senv.c | 3 + lib/crtdll/stdlib/splitp.c | 3 + lib/crtdll/stdlib/strtod.c | 3 + lib/crtdll/stdlib/strtol.c | 3 + lib/crtdll/stdlib/strtoul.c | 2 + lib/crtdll/stdlib/swab.c | 3 + lib/crtdll/stdlib/wcstom.c | 6 + lib/crtdll/stdlib/wcstomb.c | 18 +- lib/crtdll/stdlib/wcstombs.c | 17 +- lib/crtdll/string/lasttok.c | 12 + lib/crtdll/string/memccpy.c | 9 - lib/crtdll/string/memchr.c | 17 - lib/crtdll/string/memcmp.c | 15 - lib/crtdll/string/memcpy.c | 16 - lib/crtdll/string/memcpy.s | 20 - lib/crtdll/string/memicmp.c | 20 - lib/crtdll/string/memmove.c | 36 - lib/crtdll/string/memmove.s | 33 - lib/crtdll/string/memset.c | 14 - lib/crtdll/string/memset.s | 51 - lib/crtdll/string/strcat.c | 12 - lib/crtdll/string/strchr.c | 19 - lib/crtdll/string/strcmp.c | 15 - lib/crtdll/string/strcoll.c | 30 - lib/crtdll/string/strcpy.c | 12 - lib/crtdll/string/strcspn.c | 19 - lib/crtdll/string/strdup.c | 16 - lib/crtdll/string/strerror.c | 15 +- lib/crtdll/string/stricmp.c | 22 - lib/crtdll/string/strlen.c | 14 - lib/crtdll/string/strlwr.c | 23 - lib/crtdll/string/strncat.c | 22 - lib/crtdll/string/strncmp.c | 18 - lib/crtdll/string/strncpy.c | 21 - lib/crtdll/string/strnicmp.c | 17 - lib/crtdll/string/strnlen.c | 14 - lib/crtdll/string/strpbrk.c | 18 - lib/crtdll/string/strrchr.c | 20 - lib/crtdll/string/strrev.c | 18 - lib/crtdll/string/strset.c | 29 - lib/crtdll/string/strspn.c | 16 - lib/crtdll/string/strspnp.c | 16 - lib/crtdll/string/strstr.c | 22 - lib/crtdll/string/strtok.c | 3 + lib/crtdll/string/strtoul.c | 27 - lib/crtdll/string/strupr.c | 24 - lib/crtdll/string/strxfrm.c | 21 - lib/crtdll/sys_stat/fstat.c | 3 + lib/crtdll/sys_stat/ftime.c | 6 +- lib/crtdll/sys_stat/futime.c | 3 + lib/crtdll/sys_stat/stat.c | 9 +- lib/crtdll/sys_stat/systime.c | 6 + lib/crtdll/tchar/strdec.c | 3 + lib/crtdll/tchar/strinc.c | 3 + lib/crtdll/tchar/strncnt.c | 3 + lib/crtdll/tchar/strnextc.c | 3 + lib/crtdll/tchar/strninc.c | 3 + lib/crtdll/tchar/strspnp.c | 3 + lib/crtdll/time/clock.c | 3 + lib/crtdll/time/ctime.c | 18 + lib/crtdll/time/difftime.c | 3 + lib/crtdll/time/strdate.c | 3 + lib/crtdll/time/strftime.c | 6 + lib/crtdll/time/strtime.c | 3 + lib/crtdll/time/time.c | 3 + lib/crtdll/wchar/wcscoll.c | 6 + lib/crtdll/wchar/wcslen.c | 19 - lib/crtdll/wchar/wcstod.c | 3 + lib/crtdll/wchar/wcstok.c | 3 + lib/crtdll/wchar/wcstol.c | 6 + lib/crtdll/wchar/wcstombs.c | 3 + lib/crtdll/wchar/wlasttok.c | 12 + lib/crtdll/wchar/wtoi.c | 14 + lib/epsapi/enum/drivers.c | 31 +- lib/epsapi/enum/modules.c | 6 +- lib/epsapi/makefile | 3 + lib/fmifs/.cvsignore | 8 +- lib/fmifs/fmifs.def | 8 + lib/fmifs/fmifs.edf | 8 + lib/fmifs/format.c | 1 + lib/fmifs/makefile | 5 +- lib/freetype/.cvsignore | 9 +- lib/freetype/Makefile | 7 +- lib/fslib/vfatlib/Makefile | 6 + lib/fslib/vfatlib/fat12.c | 370 ++ lib/fslib/vfatlib/fat16.c | 390 ++ lib/fslib/vfatlib/fat32.c | 464 ++ lib/fslib/vfatlib/vfatlib.c | 471 +- lib/fslib/vfatlib/vfatlib.h | 76 +- lib/gdi32/.cvsignore | 8 +- lib/gdi32/gdi32.def | 279 +- lib/gdi32/gdi32.edf | 279 +- lib/gdi32/include/internal/heap.h | 17 + lib/gdi32/main/dllmain.c | 7 +- lib/gdi32/makefile | 25 +- lib/gdi32/misc/heap.c | 46 + lib/gdi32/misc/stubs.c | 5008 +++++++++++++++----- lib/gdi32/misc/stubsa.c | 748 ++- lib/gdi32/misc/stubsw.c | 463 +- lib/gdi32/misc/wingl.c | 214 + lib/gdi32/objects/bitblt.c | 177 +- lib/gdi32/objects/brush.c | 43 +- lib/gdi32/objects/clip.c | 40 + lib/gdi32/objects/dc.c | 691 ++- lib/gdi32/objects/fillshap.c | 58 +- lib/gdi32/objects/line.c | 144 +- lib/gdi32/objects/pen.c | 19 +- lib/gdi32/objects/region.c | 173 +- lib/gdi32/objects/text.c | 260 +- lib/imm32/.cvsignore | 5 + lib/imm32/Makefile | 19 + lib/imm32/imm.c | 1059 +++++ lib/imm32/imm.spec | 54 + lib/imm32/imm32.def | 62 + lib/imm32/imm32.edf | 62 + lib/imm32/imm32.rc | 38 + lib/iphlpapi/.cvsignore | 8 +- lib/iphlpapi/debug.h | 5 +- lib/iphlpapi/iphlpapi.c | 933 +++- lib/iphlpapi/iphlpapi.def | 165 +- lib/iphlpapi/iphlpapi.edf | 164 +- lib/iphlpapi/makefile | 5 +- lib/iprtprio/.cvsignore | 11 +- lib/iprtprio/makefile | 3 + lib/kbdus/.cvsignore | 12 + lib/kbdus/Jamfile | 15 + lib/kbdus/kbdus.c | 402 ++ lib/kbdus/kbdus.def | 8 + lib/kbdus/kbdus.edf | 5 + lib/kbdus/kbdus.rc | 36 + lib/kbdus/makefile | 39 + lib/kernel32/.cvsignore | 15 +- lib/kernel32/Jamfile | 66 + lib/kernel32/debug/break.c | 3 + lib/kernel32/debug/debugger.c | 27 + lib/kernel32/debug/output.c | 12 +- lib/kernel32/except/except.c | 17 +- lib/kernel32/file/backup.c | 10 +- lib/kernel32/file/cnotify.c | 16 +- lib/kernel32/file/copy.c | 14 +- lib/kernel32/file/create.c | 6 + lib/kernel32/file/curdir.c | 59 +- lib/kernel32/file/delete.c | 6 + lib/kernel32/file/deviceio.c | 6 + lib/kernel32/file/dir.c | 59 +- lib/kernel32/file/dosdev.c | 319 +- lib/kernel32/file/file.c | 209 +- lib/kernel32/file/find.c | 29 +- lib/kernel32/file/iocompl.c | 12 + lib/kernel32/file/lfile.c | 18 + lib/kernel32/file/lock.c | 15 +- lib/kernel32/file/mailslot.c | 12 + lib/kernel32/file/move.c | 18 + lib/kernel32/file/npipe.c | 42 + lib/kernel32/file/pipe.c | 3 + lib/kernel32/file/rw.c | 26 +- lib/kernel32/file/tape.c | 33 +- lib/kernel32/file/volume.c | 366 +- lib/kernel32/kernel32.def | 283 +- lib/kernel32/kernel32.edf | 266 +- lib/kernel32/makefile | 71 +- lib/kernel32/mem/global.c | 38 +- lib/kernel32/mem/heap.c | 42 + lib/kernel32/mem/isbad.c | 27 + lib/kernel32/mem/local.c | 30 + lib/kernel32/mem/procmem.c | 8 +- lib/kernel32/mem/section.c | 28 +- lib/kernel32/mem/virtual.c | 30 + lib/kernel32/misc/atom.c | 42 + lib/kernel32/misc/comm.c | 109 + lib/kernel32/misc/computername.c | 281 ++ lib/kernel32/misc/console.c | 662 ++- lib/kernel32/misc/dllmain.c | 8 + lib/kernel32/misc/env.c | 39 + lib/kernel32/misc/error.c | 13 +- lib/kernel32/misc/errormsg.c | 53 +- lib/kernel32/misc/getname.c | 49 - lib/kernel32/misc/handle.c | 23 +- lib/kernel32/misc/ldr.c | 36 + lib/kernel32/misc/lzexpand_main.c | 609 +++ lib/kernel32/misc/mbchars.c | 7 +- lib/kernel32/misc/muldiv.c | 7 +- lib/kernel32/misc/perfcnt.c | 6 + lib/kernel32/misc/profile.c | 88 + lib/kernel32/misc/res.c | 122 +- lib/kernel32/misc/stubs.c | 2725 ++++++++++- lib/kernel32/misc/sysinfo.c | 17 +- lib/kernel32/misc/time.c | 87 +- lib/kernel32/misc/toolhelp.c | 54 + lib/kernel32/nls/LGPL.c | 17 - lib/kernel32/nls/afk.nls | 113 - lib/kernel32/nls/ara.nls | 114 - lib/kernel32/nls/arb.nls | 114 - lib/kernel32/nls/are.nls | 114 - lib/kernel32/nls/arg.nls | 114 - lib/kernel32/nls/ari.nls | 114 - lib/kernel32/nls/ark.nls | 114 - lib/kernel32/nls/arm.nls | 114 - lib/kernel32/nls/aro.nls | 114 - lib/kernel32/nls/arq.nls | 114 - lib/kernel32/nls/ars.nls | 114 - lib/kernel32/nls/art.nls | 114 - lib/kernel32/nls/aru.nls | 114 - lib/kernel32/nls/bel.nls | 113 - lib/kernel32/nls/bgr.nls | 112 - lib/kernel32/nls/cat.nls | 113 - lib/kernel32/nls/cht.nls | 113 - lib/kernel32/nls/codepage.c | 124 - lib/kernel32/nls/cpmisc.c | 101 - lib/kernel32/nls/cptable.c | 402 -- lib/kernel32/nls/cze.nls | 114 - lib/kernel32/nls/dan.nls | 113 - lib/kernel32/nls/dea.nls | 113 - lib/kernel32/nls/dec.nls | 113 - lib/kernel32/nls/del.nls | 112 - lib/kernel32/nls/des.nls | 113 - lib/kernel32/nls/deu.nls | 113 - lib/kernel32/nls/empty.nls | 114 - lib/kernel32/nls/ena.nls | 112 - lib/kernel32/nls/enb.nls | 112 - lib/kernel32/nls/enc.nls | 112 - lib/kernel32/nls/eng.nls | 112 - lib/kernel32/nls/enj.nls | 112 - lib/kernel32/nls/enl.nls | 113 - lib/kernel32/nls/ens.nls | 112 - lib/kernel32/nls/ent.nls | 113 - lib/kernel32/nls/enu.nls | 112 - lib/kernel32/nls/enz.nls | 112 - lib/kernel32/nls/esa.nls | 112 - lib/kernel32/nls/esb.nls | 112 - lib/kernel32/nls/esc.nls | 112 - lib/kernel32/nls/esd.nls | 112 - lib/kernel32/nls/ese.nls | 114 - lib/kernel32/nls/esf.nls | 112 - lib/kernel32/nls/esg.nls | 113 - lib/kernel32/nls/esh.nls | 112 - lib/kernel32/nls/esi.nls | 113 - lib/kernel32/nls/esl.nls | 112 - lib/kernel32/nls/esm.nls | 112 - lib/kernel32/nls/esn.nls | 112 - lib/kernel32/nls/eso.nls | 113 - lib/kernel32/nls/esp.nls | 112 - lib/kernel32/nls/esperanto.nls | 129 - lib/kernel32/nls/esr.nls | 112 - lib/kernel32/nls/ess.nls | 112 - lib/kernel32/nls/est.nls | 115 - lib/kernel32/nls/esu.nls | 112 - lib/kernel32/nls/esv.nls | 113 - lib/kernel32/nls/esy.nls | 113 - lib/kernel32/nls/esz.nls | 113 - lib/kernel32/nls/euq.nls | 115 - lib/kernel32/nls/fin.nls | 112 - lib/kernel32/nls/fos.nls | 114 - lib/kernel32/nls/fra.nls | 112 - lib/kernel32/nls/frb.nls | 112 - lib/kernel32/nls/frc.nls | 112 - lib/kernel32/nls/frl.nls | 114 - lib/kernel32/nls/frs.nls | 114 - lib/kernel32/nls/grc.nls | 114 - lib/kernel32/nls/hkg.nls | 110 - lib/kernel32/nls/hrv.nls | 115 - lib/kernel32/nls/hun.nls | 114 - lib/kernel32/nls/ind.nls | 112 - lib/kernel32/nls/irl.nls | 114 - lib/kernel32/nls/isl.nls | 114 - lib/kernel32/nls/ita.nls | 114 - lib/kernel32/nls/its.nls | 114 - lib/kernel32/nls/jpn.nls | 114 - lib/kernel32/nls/koj.nls | 114 - lib/kernel32/nls/kor.nls | 115 - lib/kernel32/nls/lcAFK.c | 145 - lib/kernel32/nls/lcBEL.c | 144 - lib/kernel32/nls/lcBGR.c | 147 - lib/kernel32/nls/lcCAT.c | 144 - lib/kernel32/nls/lcCSY.c | 149 - lib/kernel32/nls/lcDAN.c | 149 - lib/kernel32/nls/lcDEA.c | 151 - lib/kernel32/nls/lcDEC.c | 153 - lib/kernel32/nls/lcDEL.c | 152 - lib/kernel32/nls/lcDES.c | 153 - lib/kernel32/nls/lcDEU.c | 152 - lib/kernel32/nls/lcELL.c | 151 - lib/kernel32/nls/lcENA.c | 148 - lib/kernel32/nls/lcENB.c | 150 - lib/kernel32/nls/lcENC.c | 151 - lib/kernel32/nls/lcENG.c | 148 - lib/kernel32/nls/lcENI.c | 148 - lib/kernel32/nls/lcENJ.c | 150 - lib/kernel32/nls/lcENL.c | 144 - lib/kernel32/nls/lcENS.c | 144 - lib/kernel32/nls/lcENT.c | 144 - lib/kernel32/nls/lcENU.c | 155 - lib/kernel32/nls/lcENZ.c | 148 - lib/kernel32/nls/lcESA.c | 151 - lib/kernel32/nls/lcESB.c | 151 - lib/kernel32/nls/lcESC.c | 151 - lib/kernel32/nls/lcESD.c | 151 - lib/kernel32/nls/lcESE.c | 144 - lib/kernel32/nls/lcESF.c | 151 - lib/kernel32/nls/lcESG.c | 151 - lib/kernel32/nls/lcESH.c | 144 - lib/kernel32/nls/lcESI.c | 144 - lib/kernel32/nls/lcESL.c | 151 - lib/kernel32/nls/lcESM.c | 151 - lib/kernel32/nls/lcESN.c | 151 - lib/kernel32/nls/lcESO.c | 151 - lib/kernel32/nls/lcESP.c | 151 - lib/kernel32/nls/lcESR.c | 151 - lib/kernel32/nls/lcESS.c | 151 - lib/kernel32/nls/lcESU.c | 144 - lib/kernel32/nls/lcESV.c | 151 - lib/kernel32/nls/lcESY.c | 151 - lib/kernel32/nls/lcESZ.c | 151 - lib/kernel32/nls/lcETI.c | 144 - lib/kernel32/nls/lcEUQ.c | 144 - lib/kernel32/nls/lcFIN.c | 150 - lib/kernel32/nls/lcFOS.c | 144 - lib/kernel32/nls/lcFRA.c | 152 - lib/kernel32/nls/lcFRB.c | 153 - lib/kernel32/nls/lcFRC.c | 151 - lib/kernel32/nls/lcFRL.c | 152 - lib/kernel32/nls/lcFRS.c | 150 - lib/kernel32/nls/lcHRV.c | 146 - lib/kernel32/nls/lcHUN.c | 149 - lib/kernel32/nls/lcIND.c | 144 - lib/kernel32/nls/lcISL.c | 151 - lib/kernel32/nls/lcITA.c | 152 - lib/kernel32/nls/lcITS.c | 151 - lib/kernel32/nls/lcLTH.c | 145 - lib/kernel32/nls/lcLVI.c | 144 - lib/kernel32/nls/lcNLB.c | 152 - lib/kernel32/nls/lcNLD.c | 155 - lib/kernel32/nls/lcNON.c | 150 - lib/kernel32/nls/lcNOR.c | 150 - lib/kernel32/nls/lcPLK.c | 146 - lib/kernel32/nls/lcPTB.c | 148 - lib/kernel32/nls/lcPTG.c | 153 - lib/kernel32/nls/lcROM.c | 148 - lib/kernel32/nls/lcRUS.c | 148 - lib/kernel32/nls/lcSKY.c | 150 - lib/kernel32/nls/lcSLV.c | 152 - lib/kernel32/nls/lcSQI.c | 144 - lib/kernel32/nls/lcSRB.c | 144 - lib/kernel32/nls/lcSRL.c | 144 - lib/kernel32/nls/lcSVE.c | 148 - lib/kernel32/nls/lcSVF.c | 149 - lib/kernel32/nls/lcTRK.c | 148 - lib/kernel32/nls/lcUKR.c | 144 - lib/kernel32/nls/lctable.c | 639 --- lib/kernel32/nls/locale.c | 1290 ----- lib/kernel32/nls/lth.nls | 114 - lib/kernel32/nls/lvi.nls | 114 - lib/kernel32/nls/mbtowc.c | 85 - lib/kernel32/nls/nlb.nls | 114 - lib/kernel32/nls/nld.nls | 114 - lib/kernel32/nls/nls.nls | 119 - lib/kernel32/nls/non.nls | 114 - lib/kernel32/nls/nor.nls | 115 - lib/kernel32/nls/ole2nls.c | 3144 ------------ lib/kernel32/nls/plk.nls | 115 - lib/kernel32/nls/prc.nls | 110 - lib/kernel32/nls/ptb.nls | 114 - lib/kernel32/nls/ptg.nls | 115 - lib/kernel32/nls/rom.nls | 115 - lib/kernel32/nls/rus.nls | 115 - lib/kernel32/nls/sgp.nls | 110 - lib/kernel32/nls/sky.nls | 114 - lib/kernel32/nls/slv.nls | 115 - lib/kernel32/nls/sqi.nls | 114 - lib/kernel32/nls/srb.nls | 113 - lib/kernel32/nls/srl.nls | 113 - lib/kernel32/nls/sve.nls | 115 - lib/kernel32/nls/svf.nls | 114 - lib/kernel32/nls/tha.nls | 114 - lib/kernel32/nls/trk.nls | 115 - lib/kernel32/nls/ukr.nls | 113 - lib/kernel32/nls/vie.nls | 115 - lib/kernel32/nls/wctomb.c | 103 - lib/kernel32/nls/zhh.nls | 113 - lib/kernel32/nls/zhi.nls | 115 - lib/kernel32/nls/zhs.nls | 113 - lib/kernel32/process/cmdline.c | 7 + lib/kernel32/process/create.c | 25 +- lib/kernel32/process/proc.c | 94 +- lib/kernel32/process/session.c | 3 + lib/kernel32/string/lstring.c | 49 +- lib/kernel32/synch/critical.c | 3 + lib/kernel32/synch/event.c | 22 +- lib/kernel32/synch/intrlck.c | 21 +- lib/kernel32/synch/mutex.c | 15 + lib/kernel32/synch/sem.c | 15 + lib/kernel32/synch/timer.c | 18 + lib/kernel32/synch/wait.c | 29 +- lib/kernel32/thread/fiber.c | 304 +- lib/kernel32/thread/fls.c | 118 + lib/kernel32/thread/i386/.cvsignore | 3 + lib/kernel32/thread/i386/fiber.S | 94 + lib/kernel32/thread/thread.c | 80 +- lib/kernel32/thread/tls.c | 15 + lib/lzexpand/.cvsignore | 5 + lib/lzexpand/Makefile | 19 + lib/lzexpand/lz32.def | 19 + lib/lzexpand/lz32.edf | 19 + lib/lzexpand/lz32.rc | 38 + lib/lzexpand/lzexpand_main.c | 29 + lib/msafd/.cvsignore | 13 +- lib/msafd/include/debug.h | 4 +- lib/msafd/include/msafd.h | 1 + lib/msafd/makefile | 3 + lib/msafd/msafd.def | 2 - lib/msafd/msafd.edf | 2 - lib/msvcrt/.cvsignore | 6 +- lib/msvcrt/Makefile | 38 +- lib/msvcrt/conio/cgets.c | 3 + lib/msvcrt/conio/cprintf.c | 3 + lib/msvcrt/conio/cputs.c | 3 + lib/msvcrt/conio/cscanf.c | 3 + lib/msvcrt/conio/getch.c | 6 + lib/msvcrt/conio/kbhit.c | 6 +- lib/msvcrt/conio/putch.c | 3 + lib/msvcrt/conio/ungetch.c | 3 + lib/msvcrt/ctype/isalnum.c | 6 + lib/msvcrt/ctype/isalpha.c | 6 + lib/msvcrt/ctype/isascii.c | 6 + lib/msvcrt/ctype/iscntrl.c | 6 + lib/msvcrt/ctype/iscsym.c | 6 + lib/msvcrt/ctype/isctype.c | 18 +- lib/msvcrt/ctype/isdigit.c | 6 + lib/msvcrt/ctype/isgraph.c | 6 + lib/msvcrt/ctype/islower.c | 6 + lib/msvcrt/ctype/isprint.c | 6 + lib/msvcrt/ctype/ispunct.c | 6 + lib/msvcrt/ctype/isspace.c | 6 + lib/msvcrt/ctype/isupper.c | 6 + lib/msvcrt/ctype/isxdigit.c | 6 + lib/msvcrt/ctype/toascii.c | 3 + lib/msvcrt/ctype/tolower.c | 9 + lib/msvcrt/ctype/toupper.c | 9 + lib/msvcrt/direct/chdir.c | 3 + lib/msvcrt/direct/chdrive.c | 3 + lib/msvcrt/direct/getcwd.c | 3 + lib/msvcrt/direct/getdcwd.c | 3 + lib/msvcrt/direct/getdfree.c | 3 + lib/msvcrt/direct/getdrive.c | 6 + lib/msvcrt/direct/mkdir.c | 3 + lib/msvcrt/direct/rmdir.c | 3 + lib/msvcrt/direct/wchdir.c | 3 + lib/msvcrt/direct/wgetcwd.c | 3 + lib/msvcrt/direct/wgetdcwd.c | 3 + lib/msvcrt/direct/wmkdir.c | 3 + lib/msvcrt/direct/wrmdir.c | 3 + lib/msvcrt/except/abnorter.c | 3 + lib/msvcrt/except/exhand2.c | 3 + lib/msvcrt/except/matherr.c | 10 +- lib/msvcrt/except/unwind.c | 56 + lib/msvcrt/except/xcptfil.c | 3 + lib/msvcrt/float/chgsign.c | 3 + lib/msvcrt/float/clearfp.c | 3 + lib/msvcrt/float/cntrlfp.c | 6 + lib/msvcrt/float/copysign.c | 3 + lib/msvcrt/float/fpclass.c | 3 + lib/msvcrt/float/fpecode.c | 3 + lib/msvcrt/float/fpreset.c | 3 + lib/msvcrt/float/isnan.c | 6 + lib/msvcrt/float/nafter.c | 3 + lib/msvcrt/float/scalb.c | 3 + lib/msvcrt/float/statfp.c | 3 + lib/msvcrt/io/access.c | 3 + lib/msvcrt/io/chmod.c | 3 + lib/msvcrt/io/chsize.c | 3 + lib/msvcrt/io/close.c | 3 + lib/msvcrt/io/commit.c | 3 + lib/msvcrt/io/create.c | 3 + lib/msvcrt/io/dup.c | 3 + lib/msvcrt/io/dup2.c | 3 + lib/msvcrt/io/eof.c | 3 + lib/msvcrt/io/filelen.c | 3 + lib/msvcrt/io/fileleni.c | 3 + lib/msvcrt/io/find.c | 9 + lib/msvcrt/io/fmode.c | 3 + lib/msvcrt/io/isatty.c | 3 + lib/msvcrt/io/locking.c | 3 + lib/msvcrt/io/lseek.c | 3 + lib/msvcrt/io/lseeki64.c | 7 +- lib/msvcrt/io/mktemp.c | 3 + lib/msvcrt/io/open.c | 11 +- lib/msvcrt/io/pipe.c | 3 + lib/msvcrt/io/read.c | 3 + lib/msvcrt/io/setmode.c | 3 + lib/msvcrt/io/sopen.c | 3 + lib/msvcrt/io/tell.c | 3 + lib/msvcrt/io/telli64.c | 3 + lib/msvcrt/io/umask.c | 3 + lib/msvcrt/io/unlink.c | 3 + lib/msvcrt/io/utime.c | 3 + lib/msvcrt/io/waccess.c | 3 + lib/msvcrt/io/wchmod.c | 3 + lib/msvcrt/io/wcreate.c | 3 + lib/msvcrt/io/wfind.c | 18 + lib/msvcrt/io/wmktemp.c | 3 + lib/msvcrt/io/wopen.c | 6 + lib/msvcrt/io/write.c | 3 + lib/msvcrt/io/wunlink.c | 3 + lib/msvcrt/io/wutime.c | 3 + lib/msvcrt/locale/locale.c | 10 +- lib/msvcrt/math/atan2.c | 3 + lib/msvcrt/math/cabs.c | 3 + lib/msvcrt/math/ceil.c | 3 + lib/msvcrt/math/cos.c | 3 + lib/msvcrt/math/cosh.c | 3 + lib/msvcrt/math/frexp.c | 3 + lib/msvcrt/math/hypot.c | 3 + lib/msvcrt/math/j0_y0.c | 6 + lib/msvcrt/math/j1_y1.c | 6 + lib/msvcrt/math/jn_yn.c | 6 + lib/msvcrt/math/pow.c | 3 + lib/msvcrt/math/sinh.c | 3 + lib/msvcrt/math/stubs.c | 48 + lib/msvcrt/math/tanh.c | 3 + lib/msvcrt/mbstring/hanzen.c | 6 + lib/msvcrt/mbstring/ischira.c | 12 + lib/msvcrt/mbstring/iskana.c | 3 + lib/msvcrt/mbstring/iskpun.c | 3 + lib/msvcrt/mbstring/islead.c | 3 + lib/msvcrt/mbstring/islwr.c | 6 +- lib/msvcrt/mbstring/ismbal.c | 3 + lib/msvcrt/mbstring/ismbaln.c | 3 + lib/msvcrt/mbstring/ismbc.c | 30 + lib/msvcrt/mbstring/ismbgra.c | 3 + lib/msvcrt/mbstring/ismbkaln.c | 3 + lib/msvcrt/mbstring/ismblead.c | 6 + lib/msvcrt/mbstring/ismbpri.c | 3 + lib/msvcrt/mbstring/ismbpun.c | 3 + lib/msvcrt/mbstring/ismbtrl.c | 6 + lib/msvcrt/mbstring/isuppr.c | 6 +- lib/msvcrt/mbstring/jistojms.c | 3 + lib/msvcrt/mbstring/jmstojis.c | 3 + lib/msvcrt/mbstring/mbbtype.c | 6 + lib/msvcrt/mbstring/mbccpy.c | 3 + lib/msvcrt/mbstring/mbclen.c | 9 +- lib/msvcrt/mbstring/mbscat.c | 3 + lib/msvcrt/mbstring/mbschr.c | 3 + lib/msvcrt/mbstring/mbscmp.c | 3 + lib/msvcrt/mbstring/mbscoll.c | 3 + lib/msvcrt/mbstring/mbscpy.c | 3 + lib/msvcrt/mbstring/mbscspn.c | 6 +- lib/msvcrt/mbstring/mbsdec.c | 3 + lib/msvcrt/mbstring/mbsdup.c | 3 + lib/msvcrt/mbstring/mbsicmp.c | 3 + lib/msvcrt/mbstring/mbsicoll.c | 3 + lib/msvcrt/mbstring/mbsinc.c | 3 + lib/msvcrt/mbstring/mbslen.c | 3 + lib/msvcrt/mbstring/mbslwr.c | 6 + lib/msvcrt/mbstring/mbsncat.c | 6 + lib/msvcrt/mbstring/mbsnccnt.c | 6 + lib/msvcrt/mbstring/mbsncmp.c | 6 + lib/msvcrt/mbstring/mbsncoll.c | 6 + lib/msvcrt/mbstring/mbsncpy.c | 16 +- lib/msvcrt/mbstring/mbsnextc.c | 3 + lib/msvcrt/mbstring/mbsnicmp.c | 6 + lib/msvcrt/mbstring/mbsnicoll.c | 6 + lib/msvcrt/mbstring/mbsninc.c | 3 + lib/msvcrt/mbstring/mbsnset.c | 6 + lib/msvcrt/mbstring/mbspbrk.c | 6 +- lib/msvcrt/mbstring/mbsrchr.c | 3 + lib/msvcrt/mbstring/mbsrev.c | 3 + lib/msvcrt/mbstring/mbsset.c | 3 + lib/msvcrt/mbstring/mbsspn.c | 6 +- lib/msvcrt/mbstring/mbsspnp.c | 6 +- lib/msvcrt/mbstring/mbsstr.c | 3 + lib/msvcrt/mbstring/mbstok.c | 3 + lib/msvcrt/mbstring/mbstrlen.c | 3 + lib/msvcrt/mbstring/mbsupr.c | 6 + lib/msvcrt/misc/amsg.c | 6 + lib/msvcrt/misc/assert.c | 4 + lib/msvcrt/misc/cpp.c | 13 +- lib/msvcrt/misc/crtmain.c | 6 + lib/msvcrt/misc/dllmain.c | 1 + lib/msvcrt/misc/environ.c | 45 +- lib/msvcrt/misc/getargs.c | 37 +- lib/msvcrt/misc/initterm.c | 9 + lib/msvcrt/misc/purecall.c | 3 + lib/msvcrt/msvcrt.def | 384 +- lib/msvcrt/process/_cwait.c | 3 + lib/msvcrt/process/_system.c | 9 +- lib/msvcrt/process/dll.c | 9 + lib/msvcrt/process/process.c | 68 +- lib/msvcrt/process/procid.c | 3 + lib/msvcrt/process/thread.c | 8 +- lib/msvcrt/process/threadid.c | 6 + lib/msvcrt/process/threadx.c | 12 +- lib/msvcrt/search/lfind.c | 3 + lib/msvcrt/search/lsearch.c | 3 + lib/msvcrt/signal/signal.c | 6 + lib/msvcrt/stdio/allocfil.c | 3 + lib/msvcrt/stdio/clearerr.c | 3 + lib/msvcrt/stdio/fclose.c | 3 + lib/msvcrt/stdio/fdopen.c | 3 + lib/msvcrt/stdio/feof.c | 3 + lib/msvcrt/stdio/ferror.c | 3 + lib/msvcrt/stdio/fflush.c | 10 +- lib/msvcrt/stdio/fgetc.c | 6 + lib/msvcrt/stdio/fgetchar.c | 3 + lib/msvcrt/stdio/fgetpos.c | 5 +- lib/msvcrt/stdio/filbuf.c | 5 +- lib/msvcrt/stdio/fileno.c | 3 + lib/msvcrt/stdio/flsbuf.c | 3 + lib/msvcrt/stdio/fopen.c | 3 + lib/msvcrt/stdio/fprintf.c | 6 + lib/msvcrt/stdio/fputc.c | 6 + lib/msvcrt/stdio/fputchar.c | 3 + lib/msvcrt/stdio/fputs.c | 5 +- lib/msvcrt/stdio/fread.c | 3 + lib/msvcrt/stdio/freopen.c | 6 + lib/msvcrt/stdio/fscanf.c | 6 + lib/msvcrt/stdio/fseek.c | 3 + lib/msvcrt/stdio/fsetpos.c | 3 + lib/msvcrt/stdio/fsopen.c | 6 + lib/msvcrt/stdio/ftell.c | 3 + lib/msvcrt/stdio/fwrite.c | 3 + lib/msvcrt/stdio/getc.c | 3 + lib/msvcrt/stdio/getchar.c | 3 + lib/msvcrt/stdio/gets.c | 6 +- lib/msvcrt/stdio/getw.c | 6 +- lib/msvcrt/stdio/perror.c | 6 + lib/msvcrt/stdio/popen.c | 9 + lib/msvcrt/stdio/printf.c | 6 + lib/msvcrt/stdio/putc.c | 7 +- lib/msvcrt/stdio/putchar.c | 6 + lib/msvcrt/stdio/puts.c | 6 + lib/msvcrt/stdio/putw.c | 6 +- lib/msvcrt/stdio/remove.c | 6 + lib/msvcrt/stdio/rename.c | 3 + lib/msvcrt/stdio/rewind.c | 3 + lib/msvcrt/stdio/scanf.c | 6 + lib/msvcrt/stdio/setbuf.c | 3 + lib/msvcrt/stdio/setvbuf.c | 3 + lib/msvcrt/stdio/sprintf.c | 12 + lib/msvcrt/stdio/sscanf.c | 6 + lib/msvcrt/stdio/stdhnd.c | 3 + lib/msvcrt/stdio/tempnam.c | 3 + lib/msvcrt/stdio/tmpfile.c | 7 +- lib/msvcrt/stdio/tmpnam.c | 3 + lib/msvcrt/stdio/ungetc.c | 6 + lib/msvcrt/stdio/vfprintf.c | 3 + lib/msvcrt/stdio/vfscanf.c | 69 +- lib/msvcrt/stdio/vfwprint.c | 4 + lib/msvcrt/stdio/vprintf.c | 6 + lib/msvcrt/stdio/vsprintf.c | 24 +- lib/msvcrt/stdio/wfdopen.c | 3 + lib/msvcrt/stdio/wrename.c | 3 + lib/msvcrt/stdio/wtempnam.c | 3 + lib/msvcrt/stdio/wtmpnam.c | 3 + lib/msvcrt/stdlib/_exit.c | 12 + lib/msvcrt/stdlib/abort.c | 3 + lib/msvcrt/stdlib/abs.c | 3 + lib/msvcrt/stdlib/atexit.c | 3 + lib/msvcrt/stdlib/atof.c | 3 + lib/msvcrt/stdlib/atoi.c | 3 + lib/msvcrt/stdlib/atoi64.c | 3 + lib/msvcrt/stdlib/atol.c | 3 + lib/msvcrt/stdlib/bsearch.c | 3 + lib/msvcrt/stdlib/div.c | 3 + lib/msvcrt/stdlib/ecvt.c | 3 + lib/msvcrt/stdlib/errno.c | 8 +- lib/msvcrt/stdlib/fcvt.c | 3 + lib/msvcrt/stdlib/fullpath.c | 3 + lib/msvcrt/stdlib/gcvt.c | 3 + lib/msvcrt/stdlib/getenv.c | 6 + lib/msvcrt/stdlib/itoa.c | 9 + lib/msvcrt/stdlib/itow.c | 9 + lib/msvcrt/stdlib/labs.c | 3 + lib/msvcrt/stdlib/ldiv.c | 3 + lib/msvcrt/stdlib/makepath.c | 8 +- lib/msvcrt/stdlib/malloc.c | 12 + lib/msvcrt/stdlib/mbstowcs.c | 3 + lib/msvcrt/stdlib/mbtowc.c | 3 + lib/msvcrt/stdlib/obsol.c | 9 + lib/msvcrt/stdlib/putenv.c | 3 + lib/msvcrt/stdlib/qsort.c | 2 + lib/msvcrt/stdlib/rand.c | 6 + lib/msvcrt/stdlib/rot.c | 12 + lib/msvcrt/stdlib/senv.c | 3 + lib/msvcrt/stdlib/splitp.c | 55 +- lib/msvcrt/stdlib/strtod.c | 3 + lib/msvcrt/stdlib/strtol.c | 3 + lib/msvcrt/stdlib/strtoll.c | 2 +- lib/msvcrt/stdlib/strtoul.c | 2 + lib/msvcrt/stdlib/strtoull.c | 2 +- lib/msvcrt/stdlib/swab.c | 3 + lib/msvcrt/stdlib/wcstod.c | 3 + lib/msvcrt/stdlib/wcstol.c | 3 + lib/msvcrt/stdlib/wcstom.c | 6 + lib/msvcrt/stdlib/wcstomb.c | 18 +- lib/msvcrt/stdlib/wcstombs.c | 20 +- lib/msvcrt/stdlib/wcstoul.c | 2 + lib/msvcrt/stdlib/wctomb.c | 3 + lib/msvcrt/stdlib/wfulpath.c | 3 + lib/msvcrt/stdlib/witoa.c | 6 + lib/msvcrt/stdlib/witow.c | 6 + lib/msvcrt/stdlib/wmakpath.c | 8 +- lib/msvcrt/stdlib/wputenv.c | 5 +- lib/msvcrt/stdlib/wsenv.c | 3 + lib/msvcrt/stdlib/wsplitp.c | 51 +- lib/msvcrt/stdlib/wtoi.c | 6 + lib/msvcrt/stdlib/wtoi64.c | 3 + lib/msvcrt/string/lasttok.c | 15 + lib/msvcrt/string/memccpy.c | 21 - lib/msvcrt/string/memchr.c | 17 - lib/msvcrt/string/memcmp.c | 16 - lib/msvcrt/string/memcpy.c | 17 - lib/msvcrt/string/memicmp.c | 3 + lib/msvcrt/string/memmove.c | 36 - lib/msvcrt/string/memset.c | 15 - lib/msvcrt/string/strcat.c | 13 - lib/msvcrt/string/strchr.c | 19 - lib/msvcrt/string/strcmp.c | 16 - lib/msvcrt/string/strcoll.c | 6 + lib/msvcrt/string/strcpy.c | 12 - lib/msvcrt/string/strcspn.c | 19 - lib/msvcrt/string/strdup.c | 3 + lib/msvcrt/string/strerror.c | 8 +- lib/msvcrt/string/stricmp.c | 6 + lib/msvcrt/string/strlen.c | 15 - lib/msvcrt/string/strlwr.c | 3 + lib/msvcrt/string/strncat.c | 22 - lib/msvcrt/string/strncmp.c | 18 - lib/msvcrt/string/strncoll.c | 6 + lib/msvcrt/string/strncpy.c | 21 - lib/msvcrt/string/strnicmp.c | 3 + lib/msvcrt/string/strnlen.c | 14 - lib/msvcrt/string/strpbrk.c | 3 + lib/msvcrt/string/strrchr.c | 20 - lib/msvcrt/string/strrev.c | 3 + lib/msvcrt/string/strset.c | 6 + lib/msvcrt/string/strspn.c | 16 - lib/msvcrt/string/strstr.c | 3 + lib/msvcrt/string/strtok.c | 16 +- lib/msvcrt/string/strupr.c | 3 + lib/msvcrt/string/strxfrm.c | 3 + lib/msvcrt/sys_stat/fstat.c | 3 + lib/msvcrt/sys_stat/fstati64.c | 3 + lib/msvcrt/sys_stat/futime.c | 3 + lib/msvcrt/sys_stat/stat.c | 86 +- lib/msvcrt/sys_stat/wstat.c | 116 +- lib/msvcrt/time/clock.c | 3 + lib/msvcrt/time/ctime.c | 18 + lib/msvcrt/time/difftime.c | 3 + lib/msvcrt/time/ftime.c | 34 + lib/msvcrt/time/strdate.c | 3 + lib/msvcrt/time/strftime.c | 6 + lib/msvcrt/time/strtime.c | 3 + lib/msvcrt/time/time.c | 3 + lib/msvcrt/time/wctime.c | 6 + lib/msvcrt/time/wstrdate.c | 3 + lib/msvcrt/time/wstrtime.c | 3 + lib/msvcrt/wstring/wcscat.c | 18 - lib/msvcrt/wstring/wcschr.c | 16 - lib/msvcrt/wstring/wcscmp.c | 15 - lib/msvcrt/wstring/wcscoll.c | 12 + lib/msvcrt/wstring/wcscpy.c | 11 - lib/msvcrt/wstring/wcscspn.c | 3 + lib/msvcrt/wstring/wcsdup.c | 3 + lib/msvcrt/wstring/wcsicmp.c | 3 + lib/msvcrt/wstring/wcslen.c | 14 - lib/msvcrt/wstring/wcslwr.c | 3 + lib/msvcrt/wstring/wcsncat.c | 21 - lib/msvcrt/wstring/wcsncmp.c | 33 - lib/msvcrt/wstring/wcsncpy.c | 20 - lib/msvcrt/wstring/wcsnicmp.c | 3 + lib/msvcrt/wstring/wcsnlen.c | 10 - lib/msvcrt/wstring/wcspbrk.c | 3 + lib/msvcrt/wstring/wcsrchr.c | 15 - lib/msvcrt/wstring/wcsrev.c | 3 + lib/msvcrt/wstring/wcsset.c | 6 + lib/msvcrt/wstring/wcsspn.c | 3 + lib/msvcrt/wstring/wcsstr.c | 3 + lib/msvcrt/wstring/wcstok.c | 16 +- lib/msvcrt/wstring/wcsupr.c | 3 + lib/msvcrt/wstring/wcsxfrm.c | 3 + lib/msvcrt/wstring/wlasttok.c | 14 + lib/mswsock/.cvsignore | 9 + lib/mswsock/Makefile | 39 + lib/mswsock/mswsock.def | 40 + lib/mswsock/mswsock.edf | 39 + lib/mswsock/mswsock.rc | 41 + lib/mswsock/stubs.c | 525 ++ lib/ntdll/.cvsignore | 15 +- lib/ntdll/Jamfile | 88 + lib/ntdll/csr/capture.c | 21 + lib/ntdll/csr/lpc.c | 6 + lib/ntdll/csr/probe.c | 6 + lib/ntdll/csr/thread.c | 9 + lib/ntdll/dbg/brkpoint.c | 11 +- lib/ntdll/dbg/debug.c | 16 + lib/ntdll/dbg/print.c | 6 + lib/ntdll/def/ntdll.def | 633 ++- lib/ntdll/def/ntdll.edf | 634 ++- lib/ntdll/ldr/res.c | 9 + lib/ntdll/ldr/startup.c | 168 +- lib/ntdll/ldr/utils.c | 1053 ++-- lib/ntdll/makefile | 70 +- lib/ntdll/nasm/fixasm.bat | 26 + lib/ntdll/nasm/makefile-asm | 113 + lib/ntdll/nasm/readme.txt | 52 + lib/ntdll/nasm/rtl/i386_RtlCompareMemory.asm | 49 + lib/ntdll/nasm/rtl/i386_RtlCompareMemoryUlong.asm | 50 + lib/ntdll/nasm/rtl/i386_RtlFillMemory.asm | 36 + lib/ntdll/nasm/rtl/i386_RtlFillMemoryUlong.asm | 38 + lib/ntdll/nasm/rtl/i386_RtlMoveMemory.asm | 69 + lib/ntdll/nasm/rtl/i386_RtlRandom.asm | 249 + lib/ntdll/nasm/rtl/i386_RtlZeroMemory.asm | 65 + lib/ntdll/rtl/access.c | 6 + lib/ntdll/rtl/acl.c | 30 + lib/ntdll/rtl/atom.c | 24 + lib/ntdll/rtl/bitmap.c | 45 + lib/ntdll/rtl/compress.c | 12 + lib/ntdll/rtl/critical.c | 29 +- lib/ntdll/rtl/dos8dot3.c | 6 + lib/ntdll/rtl/encode.c | 24 +- lib/ntdll/rtl/env.c | 62 +- lib/ntdll/rtl/error.c | 40 +- lib/ntdll/rtl/exception.c | 43 +- lib/ntdll/rtl/handle.c | 15 + lib/ntdll/rtl/heap.c | 103 +- lib/ntdll/rtl/i386/alldiv.s | 50 + lib/ntdll/rtl/i386/allmul.s | 54 + lib/ntdll/rtl/i386/allrem.s | 31 + lib/ntdll/rtl/i386/allshl.s | 33 + lib/ntdll/rtl/i386/allshr.s | 33 + lib/ntdll/rtl/i386/aulldiv.s | 29 + lib/ntdll/rtl/i386/aullrem.s | 29 + lib/ntdll/rtl/i386/aullshr.s | 32 + lib/ntdll/rtl/i386/chkstk.s | 66 + lib/ntdll/rtl/i386/except.s | 582 +-- lib/ntdll/rtl/i386/exception.c | 19 +- lib/ntdll/rtl/i386/float.c | 12 + lib/ntdll/rtl/image.c | 45 +- lib/ntdll/rtl/largeint.c | 120 +- lib/ntdll/rtl/luid.c | 13 +- lib/ntdll/rtl/math.c | 27 + lib/ntdll/rtl/mem.c | 16 +- lib/ntdll/rtl/misc.c | 50 + lib/ntdll/rtl/nls.c | 1020 ++-- lib/ntdll/rtl/path.c | 242 +- lib/ntdll/rtl/ppb.c | 16 + lib/ntdll/rtl/process.c | 12 +- lib/ntdll/rtl/propvar.c | 12 + lib/ntdll/rtl/random.c | 158 + lib/ntdll/rtl/registry.c | 124 +- lib/ntdll/rtl/resource.c | 24 + lib/ntdll/rtl/sd.c | 91 +- lib/ntdll/rtl/security.c | 85 + lib/ntdll/rtl/sid.c | 153 +- lib/ntdll/rtl/splaytree.c | 70 + lib/ntdll/rtl/teb.c | 15 + lib/ntdll/rtl/thread.c | 10 +- lib/ntdll/rtl/time.c | 43 +- lib/ntdll/rtl/timezone.c | 7 + lib/ntdll/rtl/unicode.c | 352 +- lib/ntdll/stdio/sprintf.c | 18 +- lib/ntdll/stdio/swprintf.c | 12 +- lib/ntdll/stdlib/abs.c | 3 + lib/ntdll/stdlib/atoi.c | 3 + lib/ntdll/stdlib/atoi64.c | 3 + lib/ntdll/stdlib/atol.c | 3 + lib/ntdll/stdlib/itoa.c | 12 + lib/ntdll/stdlib/itow.c | 12 + lib/ntdll/stdlib/labs.c | 3 + lib/ntdll/stdlib/mbstowcs.c | 3 + lib/ntdll/stdlib/qsort.c | 266 -- lib/ntdll/stdlib/splitp.c | 70 +- lib/ntdll/stdlib/strtol.c | 3 + lib/ntdll/stdlib/strtoul.c | 2 + lib/ntdll/stdlib/wcstol.c | 3 + lib/ntdll/stdlib/wcstombs.c | 3 + lib/ntdll/stdlib/wcstoul.c | 2 + lib/ntdll/stdlib/wtoi.c | 3 + lib/ntdll/stdlib/wtoi64.c | 3 + lib/ntdll/stdlib/wtol.c | 3 + lib/ntdll/string/ctype.c | 69 + lib/ntdll/string/memccpy.c | 9 - lib/ntdll/string/memchr.c | 17 - lib/ntdll/string/memcmp.c | 17 - lib/ntdll/string/memcpy.c | 16 - lib/ntdll/string/memicmp.c | 3 + lib/ntdll/string/memmove.c | 36 - lib/ntdll/string/memset.c | 13 - lib/ntdll/string/strcat.c | 12 - lib/ntdll/string/strchr.c | 21 - lib/ntdll/string/strcmp.c | 15 - lib/ntdll/string/strcpy.c | 10 - lib/ntdll/string/strcspn.c | 20 - lib/ntdll/string/stricmp.c | 6 + lib/ntdll/string/strlen.c | 14 - lib/ntdll/string/strlwr.c | 3 + lib/ntdll/string/strncat.c | 22 - lib/ntdll/string/strncmp.c | 18 - lib/ntdll/string/strncpy.c | 21 - lib/ntdll/string/strnicmp.c | 3 + lib/ntdll/string/strnlen.c | 14 - lib/ntdll/string/strpbrk.c | 3 + lib/ntdll/string/strrchr.c | 21 - lib/ntdll/string/strspn.c | 16 - lib/ntdll/string/strstr.c | 3 + lib/ntdll/string/strupr.c | 3 + lib/ntdll/string/wstring.c | 160 +- lib/ntdll/stubs/stubs.c | 3193 ++++++++++++- lib/ole32/.cvsignore | 9 +- lib/ole32/compobj.c | 1 + lib/ole32/makefile | 3 + lib/oleaut32/.cvsignore | 9 +- lib/oleaut32/makefile | 3 + lib/packet/.cvsignore | 5 +- lib/packet/packet.def | 5 + lib/packet/packet.edf | 5 + lib/psapi/.cvsignore | 8 + lib/psapi/makefile | 5 +- lib/psapi/misc/.cvsignore | 2 + lib/psapi/misc/win32.c | 6 +- lib/richedit/.cvsignore | 8 + lib/richedit/Makefile | 18 + lib/richedit/ansi_gen.h | 211 + lib/richedit/ansi_sym.h | 112 + lib/richedit/charlist.c | 161 + lib/richedit/charlist.h | 46 + lib/richedit/reader.c | 2839 +++++++++++ lib/richedit/riched32.def | 6 + lib/richedit/riched32.edf | 4 + lib/richedit/riched32.h | 34 + lib/richedit/riched32.rc | 38 + lib/richedit/richedit.c | 868 ++++ lib/richedit/rtf.h | 1457 ++++++ lib/richedit/rtf2text.h | 2 + lib/richedit/stdcharnames.h | 356 ++ lib/richedit/text-writer.c | 301 ++ lib/richedit/text_map.h | 172 + lib/rosrtl/makefile | 28 +- lib/rosrtl/makefile.i386 | 8 + lib/rosrtl/misc/.cvsignore | 1 + lib/rosrtl/misc/devmode.c | 82 + lib/rosrtl/misc/logfont.c | 53 + {ntoskrnl/rtl => lib/rosrtl/misc}/qsort.c | 0 lib/rosrtl/thread/.cvsignore | 2 + lib/rosrtl/thread/context.c | 105 - lib/rosrtl/thread/create.c | 192 +- lib/rosrtl/thread/i386/.cvsignore | 2 + lib/rosrtl/thread/i386/context.c | 94 + lib/rosrtl/thread/linearstack.c | 38 + lib/rosrtl/thread/stack.c | 218 + lib/rpcrt4/.cvsignore | 6 + lib/rpcrt4/Makefile | 139 +- lib/rpcrt4/Makefile.old | 140 + lib/rpcrt4/midl/Makefile | 3 + lib/rpcrt4/rpcrt4.def | 16 + lib/rpcrt4/rpcrt4.edf | 16 + lib/rpcrt4/rpcrt4.rc | 38 + lib/rpcrt4/rpcrt4_main.c | 723 +++ lib/rpcrt4/tests/.cvsignore | 6 + lib/rpcrt4/tests/makefile | 26 + lib/rpcrt4/tests/rpc.c | 129 + lib/rpcrt4/tests/testlist.c | 24 + lib/secur32/.cvsignore | 9 +- lib/secur32/Makefile | 3 + lib/secur32/lsa.c | 76 + lib/secur32/secur32.def | 69 + lib/secur32/secur32.edf | 69 + lib/shell32/.cvsignore | 4 +- lib/shell32/control/control.h | 4 + lib/shell32/makefile | 1 - lib/shell32/misc/stubs.c | 21 +- lib/shell32/shell32.def | 2 +- lib/snmpapi/.cvsignore | 8 +- lib/snmpapi/makefile | 3 + lib/snmpapi/snmpapi.c | 146 + lib/string/.cvsignore | 4 + lib/string/Makefile | 65 + lib/string/Makefile.i386 | 34 + lib/string/i386/.cvsignore | 2 + lib/string/i386/memchr.s | 31 + lib/string/i386/memcpy.s | 50 + lib/string/i386/memmove.s | 116 + lib/string/i386/memset.s | 47 + lib/string/i386/strcat.s | 6 + lib/string/i386/strchr.s | 6 + lib/string/i386/strcmp.s | 6 + lib/string/i386/strcpy.s | 6 + lib/string/i386/strlen.s | 6 + lib/string/i386/strncat.s | 6 + lib/string/i386/strncmp.s | 6 + lib/string/i386/strncpy.s | 6 + lib/string/i386/strnlen.s | 6 + lib/string/i386/strrchr.s | 6 + lib/string/i386/tchar.h | 59 + lib/string/i386/tcscat.h | 32 + lib/string/i386/tcschr.h | 30 + lib/string/i386/tcscmp.h | 34 + lib/string/i386/tcscpy.h | 27 + lib/string/i386/tcslen.h | 24 + lib/string/i386/tcsncat.h | 42 + lib/string/i386/tcsncmp.h | 40 + lib/string/i386/tcsncpy.h | 34 + lib/string/i386/tcsnlen.h | 30 + lib/string/i386/tcsrchr.h | 31 + lib/string/i386/wcscat.s | 7 + lib/string/i386/wcschr.s | 7 + lib/string/i386/wcscmp.s | 7 + lib/string/i386/wcscpy.s | 7 + lib/string/i386/wcslen.s | 7 + lib/string/i386/wcsncat.s | 7 + lib/string/i386/wcsncmp.s | 7 + lib/string/i386/wcsncpy.s | 7 + lib/string/i386/wcsnlen.s | 7 + lib/string/i386/wcsrchr.s | 7 + lib/string/memccpy.c | 25 + lib/string/memchr.c | 18 + lib/string/memcmp.c | 17 + lib/string/memcpy.c | 16 + lib/string/memmove.c | 40 + lib/string/memset.c | 17 + lib/string/strcat.c | 7 + lib/string/strchr.c | 8 + lib/string/strcmp.c | 7 + lib/string/strcpy.c | 7 + lib/string/strcspn.c | 9 + lib/string/strlen.c | 7 + lib/string/strncat.c | 7 + lib/string/strncmp.c | 7 + lib/string/strncpy.c | 6 + lib/string/strnlen.c | 7 + lib/string/strrchr.c | 8 + lib/string/strspn.c | 9 + lib/string/strxspn.h | 24 + lib/string/tcscat.h | 17 + lib/string/tcschr.h | 22 + lib/string/tcscmp.h | 19 + lib/string/tcscpy.h | 13 + lib/string/tcslen.h | 18 + lib/string/tcsncat.h | 30 + lib/string/tcsncmp.h | 21 + lib/string/tcsncpy.h | 28 + lib/string/tcsnlen.h | 18 + lib/string/tcsrchr.h | 22 + lib/string/wcscat.c | 8 + lib/string/wcschr.c | 9 + lib/string/wcscmp.c | 8 + lib/string/wcscpy.c | 8 + lib/string/wcslen.c | 8 + lib/string/wcsncat.c | 8 + lib/string/wcsncmp.c | 8 + lib/string/wcsncpy.c | 8 + lib/string/wcsnlen.c | 8 + lib/string/wcsrchr.c | 9 + lib/syssetup/.cvsignore | 5 + lib/syssetup/Makefile | 26 + lib/syssetup/dllmain.c | 47 + lib/syssetup/install.c | 67 + lib/syssetup/logfile.c | 189 + lib/syssetup/syssetup.def | 29 + lib/syssetup/syssetup.edf | 29 + lib/syssetup/syssetup.rc | 38 + lib/tgetopt/Makefile | 3 + lib/twain/.cvsignore | 5 + lib/twain/Makefile | 26 + lib/twain/Makefile.in | 23 + lib/twain/README | 54 + lib/twain/TWAIN | 172 + lib/twain/capability.c | 247 + lib/twain/ds_audio.c | 51 + lib/twain/ds_ctrl.c | 698 +++ lib/twain/ds_image.c | 380 ++ lib/twain/dsm_ctrl.c | 399 ++ lib/twain/twain.h | 1859 ++++++++ lib/twain/twain32_main.c | 637 +++ lib/twain/twain_32.def | 6 + lib/twain/twain_32.edf | 6 + lib/twain/twain_32.rc | 38 + lib/twain/twain_i.h | 239 + lib/user32/.cvsignore | 9 +- lib/user32/Makefile | 24 +- lib/user32/RosUser32/accessibility.c | 14 + .../dnk.nls => user32/RosUser32/controls/button.c} | 0 lib/user32/RosUser32/controls/listview.c | 0 lib/user32/RosUser32/controls/menu.c | 0 lib/user32/RosUser32/controls/static.c | 0 lib/user32/RosUser32/dde.c | 17 + lib/user32/RosUser32/help.c | 26 + lib/user32/RosUser32/io.c | 67 + lib/user32/RosUser32/menu.c | 18 + lib/user32/RosUser32/message.c | 14 + lib/user32/RosUser32/region.c | 30 + lib/user32/RosUser32/string.c | 110 + lib/user32/RosUser32/thread.c | 21 + lib/user32/RosUser32/undocumented.c | 33 + lib/user32/RosUser32/user32.c | 0 lib/user32/RosUser32/user32.h | 0 lib/user32/RosUser32/window.c | 45 + lib/user32/controls/button.c | 1107 +++++ lib/user32/controls/combo.c | 2216 +++++++++ lib/user32/controls/combobox.c | 42 - lib/user32/controls/controls.h | 76 + lib/user32/controls/edit.c | 4563 ++++++++++++++++++ lib/user32/controls/icontitle.c | 236 + lib/user32/controls/listbox.c | 3183 ++++++++++++- lib/user32/controls/regcontrol.c | 70 + lib/user32/controls/scrollbar.c | 366 +- lib/user32/controls/static.c | 565 +++ lib/user32/include/cursor.h | 2 + lib/user32/include/debug.h | 12 +- lib/user32/include/draw.h | 1 + lib/user32/include/menu.h | 22 + lib/user32/include/resource.h | 8 + lib/user32/include/strpool.h | 35 + lib/user32/include/user32.h | 7 + lib/user32/include/window.h | 11 + lib/user32/include/winpos.h | 5 + lib/user32/misc/dde.c | 186 +- lib/user32/misc/desktop.c | 193 +- lib/user32/misc/display.c | 185 +- lib/user32/misc/dllmain.c | 69 +- lib/user32/misc/exit.c | 8 +- lib/user32/misc/object.c | 26 + lib/user32/misc/resources.c | 12 +- lib/user32/misc/sprintf.c | 1361 ++---- lib/user32/misc/strpool.c | 165 + lib/user32/misc/stubs.c | 1574 +++++- lib/user32/misc/timer.c | 36 +- lib/user32/misc/winhelp.c | 9 +- lib/user32/misc/winsta.c | 43 +- lib/user32/resources/df_hatch.bmp | Bin 0 -> 94 bytes lib/user32/resources/obm_close.bmp | Bin 246 -> 230 bytes lib/user32/resources/ocr_appstarting.cur | Bin 326 -> 326 bytes lib/user32/resources/ocr_cdautostart.cur | Bin 0 -> 766 bytes lib/user32/resources/ocr_cross.cur | Bin 326 -> 326 bytes lib/user32/resources/ocr_hand.cur | Bin 326 -> 326 bytes lib/user32/resources/ocr_help.cur | Bin 326 -> 326 bytes lib/user32/resources/ocr_ibeam.cur | Bin 326 -> 326 bytes lib/user32/resources/ocr_icon.cur | Bin 326 -> 326 bytes lib/user32/resources/ocr_no.cur | Bin 326 -> 326 bytes lib/user32/resources/ocr_normal.cur | Bin 326 -> 326 bytes lib/user32/resources/ocr_pen.cur | Bin 0 -> 326 bytes lib/user32/resources/ocr_size.cur | Bin 326 -> 326 bytes lib/user32/resources/ocr_sizeall.cur | Bin 326 -> 326 bytes lib/user32/resources/ocr_sizenesw.cur | Bin 326 -> 326 bytes lib/user32/resources/ocr_sizens.cur | Bin 326 -> 326 bytes lib/user32/resources/ocr_sizenwse.cur | Bin 326 -> 326 bytes lib/user32/resources/ocr_sizewe.cur | Bin 328 -> 326 bytes lib/user32/resources/ocr_up.cur | Bin 326 -> 326 bytes lib/user32/resources/ocr_wait.cur | Bin 326 -> 326 bytes lib/user32/resources/oic_bang.ico | Bin 766 -> 1086 bytes lib/user32/resources/oic_hand.ico | Bin 766 -> 1086 bytes lib/user32/resources/oic_note.ico | Bin 766 -> 1086 bytes lib/user32/resources/oic_ques.ico | Bin 766 -> 1086 bytes lib/user32/resources/oic_reactos.ico | Bin 0 -> 1086 bytes lib/user32/resources/oic_sample.ico | Bin 766 -> 1398 bytes lib/user32/user32.def | 226 +- lib/user32/user32.edf | 229 +- lib/user32/user32.rc | 98 +- lib/user32/windows/accel.c | 381 +- lib/user32/windows/bitmap.c | 371 +- lib/user32/windows/caret.c | 128 + lib/user32/windows/class.c | 679 ++- lib/user32/windows/clipboard.c | 104 + lib/user32/windows/cursor.c | 184 +- lib/user32/windows/dc.c | 25 +- lib/user32/windows/defwnd.c | 2573 ++++++---- lib/user32/windows/dialog.c | 1788 ++++++- lib/user32/windows/draw.c | 584 ++- lib/user32/windows/font.c | 1088 ++++- lib/user32/windows/hook.c | 20 + lib/user32/windows/icon.c | 527 +- lib/user32/windows/input.c | 242 +- lib/user32/windows/mdi.c | 26 + lib/user32/windows/menu.c | 1225 ++++- lib/user32/windows/message.c | 433 +- lib/user32/windows/messagebox.c | 587 ++- lib/user32/windows/nonclient.c | 478 -- lib/user32/windows/paint.c | 188 +- lib/user32/windows/prop.c | 51 +- lib/user32/windows/rect.c | 39 + lib/user32/windows/text.c | 90 + lib/user32/windows/window.c | 1000 +++- lib/user32/windows/winpos.c | 137 + lib/version/.cvsignore | 10 +- lib/version/makefile | 5 +- lib/version/misc/stubs.c | 45 +- lib/winedbgc/.cvsignore | 2 + lib/winedbgc/Makefile | 3 + lib/winedbgc/debug.c | 2 +- lib/winedbgc/porting.h | 10 +- lib/winedbgc/trace.c | 1 + lib/winedbgc/winedbgc.c | 1 + lib/winmm/.cvsignore | 2 + lib/winmm/Makefile | 8 +- lib/winmm/dllmain.c | 1 - lib/winmm/driver.c | 543 +++ lib/winmm/internal.h | 26 + lib/winmm/lolvldrv.c | 837 ++++ lib/winmm/midiout.c | 369 ++ lib/winmm/midistream.c | 0 lib/winmm/misc/stubs.c | 200 +- lib/winmm/mmsystem16.h | 808 ++++ lib/winmm/stubs.c | 40 + lib/winmm/time.c | 43 + lib/winmm/winemm.h | 351 ++ lib/winmm/winmm.c | 2881 +++++++++++ lib/winmm/winmm.def | 228 +- lib/winmm/winmm.edf | 38 +- lib/winmm/winmm.h | 52 + lib/winmm/winmm.rc | 277 ++ lib/winspool/.cvsignore | 18 +- lib/winspool/Makefile | 3 + lib/winspool/stubs.c | 427 ++ lib/ws2_32/.cvsignore | 15 +- lib/ws2_32/include/debug.h | 8 +- lib/ws2_32/makefile | 3 + lib/ws2_32/misc/bsd.c | 15 + lib/ws2_32/misc/catalog.c | 11 +- lib/ws2_32/misc/dllmain.c | 45 + lib/ws2_32/misc/event.c | 25 +- lib/ws2_32/misc/ns.c | 106 + lib/ws2_32/misc/sndrcv.c | 31 + lib/ws2_32/misc/stubs.c | 263 + lib/ws2_32/misc/upcall.c | 45 + lib/ws2_32/ws2_32.def | 11 +- lib/ws2_32/ws2_32.edf | 12 +- lib/ws2help/.cvsignore | 8 +- lib/ws2help/debug.h | 8 +- lib/ws2help/makefile | 3 + lib/ws2help/ws2help.c | 4 +- lib/ws2help/ws2help.def | 4 +- lib/ws2help/ws2help.edf | 4 +- lib/ws2help/ws2help.h | 1 + lib/wshirda/.cvsignore | 8 +- lib/wshirda/makefile | 3 + lib/wshirda/wshirda.h | 1 + lib/wsock32/.cvsignore | 16 +- lib/wsock32/Makefile | 5 +- lib/wsock32/stubs.c | 784 +-- lib/wsock32/wsock32.def | 28 + lib/wsock32/wsock32.edf | 116 +- lib/zlib/.cvsignore | 5 +- lib/zlib/Makefile | 3 + lib/zlib/Makefile.host | 44 + loaders/dos/loadros.asm | 22 +- media/fonts/README.TXT | 3 + media/fonts/VERA-COPYRIGHT.TXT | 124 + media/fonts/VERA-README.TXT | 11 + media/fonts/VERA-RELEASENOTES.TXT | 162 + media/fonts/Vera.ttf | Bin 0 -> 65932 bytes media/fonts/VeraBI.ttf | Bin 0 -> 63208 bytes media/fonts/VeraBd.ttf | Bin 0 -> 58716 bytes media/fonts/VeraIt.ttf | Bin 0 -> 63684 bytes media/fonts/VeraMoBI.ttf | Bin 0 -> 55032 bytes media/fonts/VeraMoBd.ttf | Bin 0 -> 49052 bytes media/fonts/VeraMoIt.ttf | Bin 0 -> 54508 bytes media/fonts/VeraMono.ttf | Bin 0 -> 49224 bytes media/fonts/VeraSe.ttf | Bin 0 -> 60280 bytes media/fonts/VeraSeBd.ttf | Bin 0 -> 58736 bytes ntoskrnl/Makefile | 59 +- ntoskrnl/Makefile.i386 | 18 +- ntoskrnl/cc/copy.c | 24 +- ntoskrnl/cc/misc.c | 12 +- ntoskrnl/cc/pin.c | 11 +- ntoskrnl/cc/view.c | 192 +- ntoskrnl/cm/cm.h | 189 +- ntoskrnl/cm/import.c | 765 +-- ntoskrnl/cm/ntfunc.c | 934 ++-- ntoskrnl/cm/regfile.c | 1538 ++++-- ntoskrnl/cm/registry.c | 412 +- ntoskrnl/cm/regobj.c | 176 +- ntoskrnl/cm/rtlfunc.c | 236 +- ntoskrnl/dbg/dbgctrl.c | 2 +- ntoskrnl/dbg/errinfo.c | 9 +- ntoskrnl/dbg/kdb.c | 2 +- ntoskrnl/dbg/print.c | 6 + ntoskrnl/dbg/profile.c | 10 +- ntoskrnl/ex/callback.c | 14 +- ntoskrnl/ex/fmutex.c | 8 +- ntoskrnl/ex/init.c | 3 + ntoskrnl/ex/interlck.c | 42 +- ntoskrnl/ex/list.c | 100 +- ntoskrnl/ex/lookas.c | 89 +- ntoskrnl/ex/napi.c | 10 +- ntoskrnl/ex/power.c | 5 + ntoskrnl/ex/resource.c | 178 +- ntoskrnl/ex/sysinfo.c | 198 +- ntoskrnl/ex/time.c | 8 +- ntoskrnl/ex/win32k.c | 6 +- ntoskrnl/ex/work.c | 65 +- ntoskrnl/ex/zone.c | 50 +- ntoskrnl/fs/dbcsname.c | 5 + ntoskrnl/fs/filelock.c | 27 +- ntoskrnl/fs/mcb.c | 71 +- ntoskrnl/fs/mdl.c | 9 + ntoskrnl/fs/name.c | 37 +- ntoskrnl/fs/notify.c | 37 +- ntoskrnl/fs/oplock.c | 7 + ntoskrnl/fs/pool.c | 5 + ntoskrnl/fs/tunnel.c | 8 +- ntoskrnl/fs/unc.c | 2 + ntoskrnl/fs/util.c | 17 + ntoskrnl/inbv/.cvsignore | 2 + ntoskrnl/inbv/i386/.cvsignore | 2 + ntoskrnl/inbv/inbv.c | 219 + ntoskrnl/include/internal/cc.h | 7 +- ntoskrnl/include/internal/debug.h | 9 + ntoskrnl/include/internal/ex.h | 59 +- ntoskrnl/include/internal/hal/bus.h | 121 - ntoskrnl/include/internal/hal/hal.h | 48 - ntoskrnl/include/internal/hal/mps.h | 435 -- ntoskrnl/include/internal/i386/mm.h | 11 +- ntoskrnl/include/internal/i386/ps.h | 101 +- ntoskrnl/include/internal/ifs.h | 1 + ntoskrnl/include/internal/io.h | 50 +- ntoskrnl/include/internal/kbd.h | 111 + ntoskrnl/include/internal/kd.h | 3 + ntoskrnl/include/internal/ke.h | 9 +- ntoskrnl/include/internal/ldr.h | 2 + ntoskrnl/include/internal/mm.h | 99 +- ntoskrnl/include/internal/nls.h | 42 + ntoskrnl/include/internal/ntoskrnl.h | 16 +- ntoskrnl/include/internal/ob.h | 3 +- ntoskrnl/include/internal/pool.h | 13 +- ntoskrnl/include/internal/ps.h | 56 +- ntoskrnl/include/internal/safe.h | 8 +- ntoskrnl/include/internal/se.h | 24 +- ntoskrnl/io/adapter.c | 6 +- ntoskrnl/io/arcname.c | 6 +- ntoskrnl/io/buildirp.c | 64 +- ntoskrnl/io/cancel.c | 9 + ntoskrnl/io/cleanup.c | 236 +- ntoskrnl/io/cntrller.c | 12 + ntoskrnl/io/create.c | 129 +- ntoskrnl/io/device.c | 113 +- ntoskrnl/io/dir.c | 14 +- ntoskrnl/io/driver.c | 4 +- ntoskrnl/io/errlog.c | 101 +- ntoskrnl/io/error.c | 6 + ntoskrnl/io/event.c | 6 + ntoskrnl/io/file.c | 24 + ntoskrnl/io/flush.c | 3 + ntoskrnl/io/fs.c | 66 +- ntoskrnl/io/iocomp.c | 10 +- ntoskrnl/io/ioctrl.c | 6 + ntoskrnl/io/iomgr.c | 113 +- ntoskrnl/io/iowork.c | 9 + ntoskrnl/io/irp.c | 192 +- ntoskrnl/io/lock.c | 22 +- ntoskrnl/io/mailslot.c | 1 + ntoskrnl/io/mdl.c | 9 + ntoskrnl/io/npipe.c | 1 + ntoskrnl/io/page.c | 6 + ntoskrnl/io/pnpmgr.c | 68 +- ntoskrnl/io/pnproot.c | 6 +- ntoskrnl/io/process.c | 14 + ntoskrnl/io/queue.c | 9 + ntoskrnl/io/rawfs.c | 967 ++++ ntoskrnl/io/resource.c | 15 + ntoskrnl/io/rw.c | 21 +- ntoskrnl/io/share.c | 27 + ntoskrnl/io/shutdown.c | 6 + ntoskrnl/io/symlink.c | 3 + ntoskrnl/io/timer.c | 9 + ntoskrnl/io/vpb.c | 28 +- ntoskrnl/io/xhaldrv.c | 685 ++- ntoskrnl/kd/gdbstub.c | 5 +- ntoskrnl/kd/kdebug.c | 114 +- ntoskrnl/ke/apc.c | 99 +- ntoskrnl/ke/bug.c | 43 +- ntoskrnl/ke/catch.c | 18 +- ntoskrnl/ke/critical.c | 6 + ntoskrnl/ke/dpc.c | 61 +- ntoskrnl/ke/event.c | 18 + ntoskrnl/ke/i386/brkpoint.c | 6 + ntoskrnl/ke/i386/bthread.S | 17 +- ntoskrnl/ke/i386/exp.c | 28 +- ntoskrnl/ke/i386/fpu.c | 35 +- ntoskrnl/ke/i386/gdt.c | 27 +- ntoskrnl/ke/i386/irq.c | 74 +- ntoskrnl/ke/i386/kernel.c | 4 +- ntoskrnl/ke/i386/ldt.c | 138 +- ntoskrnl/ke/i386/multiboot.S | 2 +- ntoskrnl/ke/i386/stkswitch.S | 2 +- ntoskrnl/ke/i386/syscall.S | 15 +- ntoskrnl/ke/i386/tskswitch.S | 43 +- ntoskrnl/ke/i386/tss.c | 81 +- ntoskrnl/ke/i386/usercall.c | 32 +- ntoskrnl/ke/i386/usertrap.c | 5 +- ntoskrnl/ke/i386/v86m.c | 67 +- ntoskrnl/ke/i386/v86m_sup.S | 12 +- ntoskrnl/ke/kqueue.c | 58 +- ntoskrnl/ke/kthread.c | 12 +- ntoskrnl/ke/main.c | 412 +- ntoskrnl/ke/mutex.c | 25 +- ntoskrnl/ke/process.c | 30 +- ntoskrnl/ke/queue.c | 29 +- ntoskrnl/ke/sem.c | 9 + ntoskrnl/ke/spinlock.c | 34 +- ntoskrnl/ke/timer.c | 35 +- ntoskrnl/ke/wait.c | 62 +- ntoskrnl/ldr/loader.c | 40 +- ntoskrnl/ldr/resource.c | 9 + ntoskrnl/ldr/rtl.c | 6 + ntoskrnl/ldr/sysdll.c | 28 + ntoskrnl/lpc/close.c | 2 - ntoskrnl/lpc/complete.c | 1 - ntoskrnl/lpc/connect.c | 12 +- ntoskrnl/lpc/create.c | 7 +- ntoskrnl/lpc/listen.c | 1 - ntoskrnl/lpc/port.c | 1 - ntoskrnl/lpc/receive.c | 1 - ntoskrnl/lpc/reply.c | 25 +- ntoskrnl/lpc/send.c | 54 +- ntoskrnl/mm/anonmem.c | 38 +- ntoskrnl/mm/aspace.c | 2 + ntoskrnl/mm/balance.c | 78 +- ntoskrnl/mm/cont.c | 4 +- ntoskrnl/mm/drvlck.c | 15 + ntoskrnl/mm/freelist.c | 353 +- ntoskrnl/mm/i386/memsafe.s | 6 +- ntoskrnl/mm/i386/page.c | 252 +- ntoskrnl/mm/iospace.c | 12 +- ntoskrnl/mm/kmap.c | 28 +- ntoskrnl/mm/marea.c | 134 +- ntoskrnl/mm/mdl.c | 47 +- ntoskrnl/mm/mm.c | 118 +- ntoskrnl/mm/mminit.c | 101 +- ntoskrnl/mm/mpw.c | 4 +- ntoskrnl/mm/ncache.c | 4 +- ntoskrnl/mm/npool.c | 1611 +++++-- ntoskrnl/mm/pagefile.c | 499 +- ntoskrnl/mm/pageop.c | 2 +- ntoskrnl/mm/pager.c | 66 +- ntoskrnl/mm/pagfault.c | 3 + ntoskrnl/mm/pool.c | 24 +- ntoskrnl/mm/ppool.c | 312 +- ntoskrnl/mm/rmap.c | 186 +- ntoskrnl/mm/section.c | 2239 +++++---- ntoskrnl/mm/slab.c | 4 +- ntoskrnl/mm/virtual.c | 169 +- ntoskrnl/mm/wset.c | 4 + ntoskrnl/nls/.cvsignore | 3 - ntoskrnl/nls/nls.c | 21 - ntoskrnl/nt/evtpair.c | 161 +- ntoskrnl/nt/mutant.c | 5 +- ntoskrnl/nt/ntevent.c | 11 +- ntoskrnl/nt/ntsem.c | 5 +- ntoskrnl/nt/nttimer.c | 9 +- ntoskrnl/nt/profile.c | 7 +- ntoskrnl/nt/vdm.c | 35 +- ntoskrnl/ntoskrnl.def | 73 +- ntoskrnl/ntoskrnl.edf | 75 +- ntoskrnl/ob/dirobj.c | 68 +- ntoskrnl/ob/handle.c | 64 +- ntoskrnl/ob/namespc.c | 129 +- ntoskrnl/ob/ntobj.c | 270 +- ntoskrnl/ob/object.c | 262 +- ntoskrnl/ob/security.c | 15 + ntoskrnl/ob/symlink.c | 25 +- ntoskrnl/po/power.c | 21 + ntoskrnl/ps/create.c | 79 +- ntoskrnl/ps/debug.c | 294 +- ntoskrnl/ps/idle.c | 2 +- ntoskrnl/ps/kill.c | 31 +- ntoskrnl/ps/process.c | 556 ++- ntoskrnl/ps/psmgr.c | 3 + ntoskrnl/ps/suspend.c | 13 +- ntoskrnl/ps/thread.c | 271 +- ntoskrnl/ps/tinfo.c | 43 +- ntoskrnl/ps/w32call.c | 55 +- ntoskrnl/ps/win32.c | 110 +- ntoskrnl/rtl/atom.c | 36 + ntoskrnl/rtl/bitmap.c | 45 + ntoskrnl/rtl/compress.c | 24 + ntoskrnl/rtl/ctype.c | 30 + ntoskrnl/rtl/dos8dot3.c | 6 + ntoskrnl/rtl/error.c | 11 + ntoskrnl/rtl/handle.c | 2 +- ntoskrnl/rtl/i386/alldiv.s | 50 + ntoskrnl/rtl/i386/allmul.s | 54 + ntoskrnl/rtl/i386/allrem.s | 31 + ntoskrnl/rtl/i386/allshl.s | 33 + ntoskrnl/rtl/i386/allshr.s | 33 + ntoskrnl/rtl/i386/aulldiv.s | 29 + ntoskrnl/rtl/i386/aullrem.s | 29 + ntoskrnl/rtl/i386/aullshr.s | 32 + ntoskrnl/rtl/i386/exception.c | 34 +- ntoskrnl/rtl/i386/memcpy.c | 34 - ntoskrnl/rtl/i386/memset.c | 31 - ntoskrnl/rtl/largeint.c | 123 +- ntoskrnl/rtl/math.c | 332 -- ntoskrnl/rtl/mem.c | 22 +- ntoskrnl/rtl/memchr.c | 42 - ntoskrnl/rtl/memcmp.c | 47 - ntoskrnl/rtl/memcpy.c | 31 - ntoskrnl/rtl/memmove.c | 35 - ntoskrnl/rtl/memset.c | 14 - ntoskrnl/rtl/nls.c | 582 ++- ntoskrnl/rtl/random.c | 96 + ntoskrnl/rtl/regio.c | 33 + ntoskrnl/rtl/sprintf.c | 16 +- ntoskrnl/rtl/stdlib.c | 23 +- ntoskrnl/rtl/string.c | 187 +- ntoskrnl/rtl/swprintf.c | 10 +- ntoskrnl/rtl/time.c | 18 + ntoskrnl/rtl/timezone.c | 6 + ntoskrnl/rtl/unicode.c | 439 +- ntoskrnl/rtl/wstring.c | 163 +- ntoskrnl/se/access.c | 6 + ntoskrnl/se/acl.c | 9 + ntoskrnl/se/audit.c | 97 + ntoskrnl/se/luid.c | 41 +- ntoskrnl/se/priv.c | 457 +- ntoskrnl/se/sd.c | 36 + ntoskrnl/se/semgr.c | 90 +- ntoskrnl/se/sid.c | 29 +- ntoskrnl/se/token.c | 297 +- regtests/Makefile | 25 + regtests/kmregtests/.cvsignore | 7 + regtests/kmregtests/Makefile | 25 + regtests/kmregtests/driver.c | 182 + regtests/kmregtests/kmregtests.h | 19 + regtests/kmrtint/.cvsignore | 6 + regtests/kmrtint/Makefile | 24 + regtests/kmrtint/kmrtint.c | 86 + regtests/kmrtint/kmrtint.def | 3 + regtests/kmrtint/kmrtint.edf | 3 + regtests/regtests/.cvsignore | 6 + regtests/regtests/Makefile | 24 + regtests/regtests/regtests.c | 37 + regtests/shared/.cvsignore | 5 + regtests/shared/Makefile | 16 + regtests/shared/regtests.c | 109 + regtests/shared/regtests.h | 44 + regtests/win32base/.cvsignore | 7 + regtests/win32base/Makefile | 26 + regtests/win32base/driver.c | 33 + regtests/win32base/file-1.c | 72 + regtests/win32base/win32base.def | 3 + regtests/win32base/win32base.edf | 3 + rosbin.txt | 67 - rules.mak | 17 +- services/eventlog/.cvsignore | 3 +- services/eventlog/eventlog.c | 9 +- services/rpcss/.cvsignore | 3 +- subsys/csrss/.cvsignore | 1 + subsys/csrss/api.h | 11 +- subsys/csrss/api/conio.c | 222 +- subsys/csrss/api/process.c | 13 +- subsys/csrss/api/wapi.c | 7 +- subsys/csrss/init.c | 21 +- subsys/csrss/makefile | 3 + subsys/ntvdm/.cvsignore | 6 +- subsys/ntvdm/makefile | 3 + subsys/ntvdm/ntvdm.c | 30 +- subsys/smss/.cvsignore | 6 +- subsys/smss/init.c | 378 +- subsys/smss/makefile | 3 + subsys/smss/smss.c | 9 +- subsys/system/autochk/.cvsignore | 6 +- subsys/system/cmd/.cvsignore | 1 + subsys/system/cmd/batch.c | 12 +- subsys/system/cmd/call.c | 2 +- subsys/system/cmd/chcp.c | 8 +- subsys/system/cmd/choice.c | 2 +- subsys/system/cmd/cls.c | 8 +- subsys/system/cmd/cmd.c | 195 +- subsys/system/cmd/cmd.h | 27 +- subsys/system/cmd/cmdinput.c | 4 +- subsys/system/cmd/color.c | 12 +- subsys/system/cmd/console.c | 191 +- subsys/system/cmd/copy.c | 121 +- subsys/system/cmd/date.c | 10 +- subsys/system/cmd/del.c | 2 +- subsys/system/cmd/delay.c | 6 +- subsys/system/cmd/dir.c | 29 +- subsys/system/cmd/echo.c | 30 +- subsys/system/cmd/for.c | 2 +- subsys/system/cmd/free.c | 4 +- subsys/system/cmd/goto.c | 2 +- subsys/system/cmd/history.c | 10 +- subsys/system/cmd/if.c | 2 +- subsys/system/cmd/internal.c | 2 +- subsys/system/cmd/makefile | 2 + subsys/system/cmd/misc.c | 30 +- subsys/system/cmd/path.c | 2 +- subsys/system/cmd/pause.c | 2 +- subsys/system/cmd/screen.c | 8 +- subsys/system/cmd/set.c | 6 +- subsys/system/cmd/shift.c | 2 +- subsys/system/cmd/start.c | 16 +- subsys/system/cmd/strtoclr.c | 62 +- subsys/system/cmd/time.c | 2 +- subsys/system/cmd/timer.c | 12 +- subsys/system/cmd/type.c | 4 +- subsys/system/cmd/where.c | 2 +- subsys/system/expand/.cvsignore | 4 + subsys/system/expand/expand.c | 53 + subsys/system/expand/makefile | 21 + subsys/system/explorer/.cvsignore | 18 + subsys/system/explorer/Seashell/.cvsignore | 10 + subsys/system/explorer/Seashell/FilterDlg.cpp | 54 + subsys/system/explorer/Seashell/FilterDlg.h | 47 + subsys/system/explorer/Seashell/LeftView.cpp | 114 + subsys/system/explorer/Seashell/LeftView.h | 71 + subsys/system/explorer/Seashell/MFCExplorerDlg.cpp | 88 + subsys/system/explorer/Seashell/MFCExplorerDlg.h | 56 + subsys/system/explorer/Seashell/MainFrm.cpp | 262 + subsys/system/explorer/Seashell/MainFrm.h | 70 + subsys/system/explorer/Seashell/Resource.h | 67 + subsys/system/explorer/Seashell/SeaShell.cpp | 317 ++ subsys/system/explorer/Seashell/SeaShell.dsp | 559 +++ subsys/system/explorer/Seashell/SeaShell.dsw | 29 + subsys/system/explorer/Seashell/SeaShell.h | 50 + subsys/system/explorer/Seashell/SeaShell.rc | 553 +++ subsys/system/explorer/Seashell/SeaShellDoc.cpp | 84 + subsys/system/explorer/Seashell/SeaShellDoc.h | 57 + .../explorer/Seashell/SeaShellExt/.cvsignore | 10 + .../explorer/Seashell/SeaShellExt/HtmlCtrl.cpp | 120 + .../Seashell/SeaShellExt/IEFolderTreeCtrl.cpp | 548 +++ .../Seashell/SeaShellExt/IEShellComboBox.cpp | 549 +++ .../Seashell/SeaShellExt/IEShellDragDrop.cpp | 131 + .../Seashell/SeaShellExt/IEShellListCtrl.cpp | 1310 +++++ .../Seashell/SeaShellExt/IEShellListView.cpp | 174 + .../Seashell/SeaShellExt/IEShellTreeCtrl.cpp | 691 +++ .../Seashell/SeaShellExt/IEShellTreeView.cpp | 107 + .../explorer/Seashell/SeaShellExt/InPlaceEdit.cpp | 156 + .../Seashell/SeaShellExt/Include/Dirwalk.h | 120 + .../Seashell/SeaShellExt/Include/HtmlCtrl.h | 42 + .../SeaShellExt/Include/IEFolderTreeCtrl.h | 128 + .../Seashell/SeaShellExt/Include/IEShellComboBox.h | 142 + .../Seashell/SeaShellExt/Include/IEShellDragDrop.h | 55 + .../Seashell/SeaShellExt/Include/IEShellListCtrl.h | 215 + .../Seashell/SeaShellExt/Include/IEShellListView.h | 81 + .../Seashell/SeaShellExt/Include/IEShellTreeCtrl.h | 137 + .../Seashell/SeaShellExt/Include/IEShellTreeView.h | 84 + .../Seashell/SeaShellExt/Include/InPlaceEdit.h | 49 + .../Seashell/SeaShellExt/Include/LocaleInfo.h | 111 + .../explorer/Seashell/SeaShellExt/Include/PIDL.h | 108 + .../Seashell/SeaShellExt/Include/Refresh.h | 68 + .../Seashell/SeaShellExt/Include/SeaShellExt.h | 21 + .../SeaShellExt/Include/ShellContextMenu.h | 381 ++ .../Seashell/SeaShellExt/Include/ShellDetails.h | 43 + .../Seashell/SeaShellExt/Include/ShellPidl.h | 158 + .../Seashell/SeaShellExt/Include/ShellSettings.h | 57 + .../Seashell/SeaShellExt/Include/TextParse.h | 331 ++ .../SeaShellExt/Include/TextProgressCtrl.h | 97 + .../explorer/Seashell/SeaShellExt/Include/UIApp.h | 117 + .../explorer/Seashell/SeaShellExt/Include/UICONT.H | 46 + .../Seashell/SeaShellExt/Include/UICoolBar.h | 121 + .../Seashell/SeaShellExt/Include/UICoolMenu.h | 174 + .../explorer/Seashell/SeaShellExt/Include/UIDATA.H | 300 ++ .../Seashell/SeaShellExt/Include/UIDragDropTree.h | 180 + .../SeaShellExt/Include/UIExplorerFrameWnd.h | 77 + .../Seashell/SeaShellExt/Include/UIFixTB.h | 64 + .../Seashell/SeaShellExt/Include/UIFlatBar.h | 195 + .../Seashell/SeaShellExt/Include/UIFolderRefresh.h | 47 + .../Seashell/SeaShellExt/Include/UIFrameWnd.h | 134 + .../Seashell/SeaShellExt/Include/UIHtmlView.h | 141 + .../SeaShellExt/Include/UIImageDropTarget.h | 106 + .../Seashell/SeaShellExt/Include/UIListView.h | 93 + .../Seashell/SeaShellExt/Include/UIMenuBar.h | 125 + .../Seashell/SeaShellExt/Include/UIMessages.h | 68 + .../Seashell/SeaShellExt/Include/UIModulVer.h | 64 + .../Seashell/SeaShellExt/Include/UIStatusBar.h | 307 ++ .../Seashell/SeaShellExt/Include/UISubclass.h | 61 + .../SeaShellExt/Include/UITabSplitterWnd.h | 79 + .../Seashell/SeaShellExt/Include/UITreeCtrl.h | 173 + .../Seashell/SeaShellExt/Include/UITreeView.h | 82 + .../explorer/Seashell/SeaShellExt/Include/UIres.h | 95 + .../explorer/Seashell/SeaShellExt/Include/Uictrl.h | 652 +++ .../explorer/Seashell/SeaShellExt/Include/W2KFix.h | 165 + .../Seashell/SeaShellExt/Include/WindowPlacement.h | 30 + .../Seashell/SeaShellExt/Include/cbformats.h | 320 ++ .../Seashell/SeaShellExt/Include/uidragdropctrl.h | 189 + .../Seashell/SeaShellExt/Include/uidragimage.h | 90 + .../Seashell/SeaShellExt/Include/uidroptarget.h | 53 + .../explorer/Seashell/SeaShellExt/LocaleInfo.cpp | 178 + .../system/explorer/Seashell/SeaShellExt/PIDL.cpp | 250 + .../Seashell/SeaShellExt/ShellContextMenu.cpp | 600 +++ .../explorer/Seashell/SeaShellExt/ShellDetails.cpp | 96 + .../explorer/Seashell/SeaShellExt/ShellPidl.cpp | 804 ++++ .../Seashell/SeaShellExt/ShellSettings.cpp | 65 + .../explorer/Seashell/SeaShellExt/TextParse.cpp | 758 +++ .../Seashell/SeaShellExt/TextProgressCtrl.cpp | 223 + .../system/explorer/Seashell/SeaShellExt/UIApp.cpp | 368 ++ .../explorer/Seashell/SeaShellExt/UICONT.CPP | 77 + .../explorer/Seashell/SeaShellExt/UICoolBar.cpp | 237 + .../explorer/Seashell/SeaShellExt/UICoolMenu.cpp | 1497 ++++++ .../explorer/Seashell/SeaShellExt/UIDATA.CPP | 202 + .../Seashell/SeaShellExt/UIDragDropTree.cpp | 610 +++ .../Seashell/SeaShellExt/UIExplorerFrameWnd.cpp | 87 + .../explorer/Seashell/SeaShellExt/UIFixTB.cpp | 558 +++ .../explorer/Seashell/SeaShellExt/UIFlatBar.cpp | 334 ++ .../explorer/Seashell/SeaShellExt/UIFrameWnd.cpp | 514 ++ .../explorer/Seashell/SeaShellExt/UIHtmlView.cpp | 694 +++ .../Seashell/SeaShellExt/UIImageDropTarget.cpp | 173 + .../explorer/Seashell/SeaShellExt/UIListView.cpp | 148 + .../explorer/Seashell/SeaShellExt/UIMenuBar.cpp | 726 +++ .../explorer/Seashell/SeaShellExt/UIModulVer.cpp | 141 + .../explorer/Seashell/SeaShellExt/UIStatusBar.cpp | 623 +++ .../explorer/Seashell/SeaShellExt/UISubclass.cpp | 270 ++ .../Seashell/SeaShellExt/UITabSplitterWnd.cpp | 274 ++ .../explorer/Seashell/SeaShellExt/UITreeCtrl.cpp | 882 ++++ .../explorer/Seashell/SeaShellExt/UITreeView.cpp | 159 + .../explorer/Seashell/SeaShellExt/Uictrl.cpp | 3092 ++++++++++++ .../Seashell/SeaShellExt/WindowPlacement.cpp | 127 + .../explorer/Seashell/SeaShellExt/cbformats.cpp | 667 +++ .../Seashell/SeaShellExt/uidragdropctrl.cpp | 90 + .../explorer/Seashell/SeaShellExt/uidragimage.cpp | 101 + .../explorer/Seashell/SeaShellExt/uidroptarget.cpp | 87 + subsys/system/explorer/Seashell/SeaShellView.cpp | 104 + subsys/system/explorer/Seashell/SeaShellView.h | 68 + subsys/system/explorer/Seashell/ShellTreeDlg.cpp | 80 + subsys/system/explorer/Seashell/ShellTreeDlg.h | 50 + subsys/system/explorer/Seashell/StdAfx.cpp | 8 + subsys/system/explorer/Seashell/StdAfx.h | 29 + subsys/system/explorer/Seashell/res/SeaShell.ico | Bin 0 -> 1078 bytes subsys/system/explorer/Seashell/res/SeaShell.rc2 | 13 + .../system/explorer/Seashell/res/SeaShellDoc.ico | Bin 0 -> 1078 bytes subsys/system/explorer/Seashell/res/Toolbar.bmp | Bin 0 -> 1558 bytes subsys/system/explorer/Seashell/res/coldtool.bmp | Bin 0 -> 7718 bytes subsys/system/explorer/Seashell/res/hottoolb.bmp | Bin 0 -> 7718 bytes subsys/system/explorer/bak/shellhook.cpp | 114 + subsys/system/explorer/bak/shellhook.dsp | 113 + subsys/system/explorer/bak/shellhook.h | 44 + subsys/system/explorer/buildno.h | 11 + subsys/system/explorer/desktop/desktop.cpp | 264 ++ subsys/system/explorer/desktop/desktop.h | 78 + subsys/system/explorer/doc/TODO.txt | 18 + subsys/system/explorer/doc/changes.txt | 34 + subsys/system/explorer/doc/readme.txt | 45 + subsys/system/explorer/explorer.cpp | 190 + subsys/system/explorer/explorer.dsp | 567 +++ subsys/system/explorer/explorer.dsw | 41 + subsys/system/explorer/explorer.h | 65 + subsys/system/explorer/explorer.rc | 44 + subsys/system/explorer/explorer_intres.h | 80 + subsys/system/explorer/explorer_intres.rc | 599 +++ subsys/system/explorer/externals.h | 50 + subsys/system/explorer/globals.h | 76 + subsys/system/explorer/make_explorer.dsp | 93 + subsys/system/explorer/makefile | 83 + subsys/system/explorer/res/arrow.ico | Bin 0 -> 318 bytes subsys/system/explorer/res/arrowsel.ico | Bin 0 -> 318 bytes subsys/system/explorer/res/drivebar.bmp | Bin 0 -> 742 bytes subsys/system/explorer/res/explorer.ico | Bin 0 -> 1078 bytes subsys/system/explorer/res/images.bmp | Bin 0 -> 1158 bytes subsys/system/explorer/res/logoff.ico | Bin 0 -> 3638 bytes subsys/system/explorer/res/logov.bmp | Bin 0 -> 6198 bytes subsys/system/explorer/res/reactos.ico | Bin 0 -> 3638 bytes subsys/system/explorer/res/startmenu.ico | Bin 0 -> 1406 bytes subsys/system/explorer/res/toolbar.bmp | Bin 0 -> 958 bytes subsys/system/explorer/res/winefile.ico | Bin 0 -> 766 bytes subsys/system/explorer/shell/entries.cpp | 288 ++ subsys/system/explorer/shell/entries.h | 104 + subsys/system/explorer/shell/filechild.cpp | 508 ++ subsys/system/explorer/shell/filechild.h | 97 + subsys/system/explorer/shell/mainframe.cpp | 652 +++ subsys/system/explorer/shell/mainframe.h | 74 + subsys/system/explorer/shell/pane.cpp | 976 ++++ subsys/system/explorer/shell/pane.h | 106 + subsys/system/explorer/shell/shellbrowser.cpp | 528 +++ subsys/system/explorer/shell/shellbrowser.h | 134 + subsys/system/explorer/shell/shellfs.cpp | 326 ++ subsys/system/explorer/shell/shellfs.h | 116 + subsys/system/explorer/shell/startup.c | 517 ++ subsys/system/explorer/shell/unixfs.cpp | 198 + subsys/system/explorer/shell/unixfs.h | 66 + subsys/system/explorer/shell/winfs.cpp | 177 + subsys/system/explorer/shell/winfs.h | 62 + subsys/system/explorer/taskbar/desktopbar.cpp | 242 + subsys/system/explorer/taskbar/desktopbar.h | 90 + subsys/system/explorer/taskbar/quicklaunch.cpp | 179 + subsys/system/explorer/taskbar/quicklaunch.h | 79 + subsys/system/explorer/taskbar/startmenu.cpp | 852 ++++ subsys/system/explorer/taskbar/startmenu.h | 234 + subsys/system/explorer/taskbar/taskbar.cpp | 397 ++ subsys/system/explorer/taskbar/taskbar.h | 95 + subsys/system/explorer/taskbar/traynotify.cpp | 370 ++ subsys/system/explorer/taskbar/traynotify.h | 124 + subsys/system/explorer/utility/.cvsignore | 15 + subsys/system/explorer/utility/dragdropimpl.cpp | 592 +++ subsys/system/explorer/utility/dragdropimpl.h | 263 + subsys/system/explorer/utility/shellbrowserimpl.h | 99 + subsys/system/explorer/utility/shellclasses.cpp | 265 ++ subsys/system/explorer/utility/shellclasses.dsp | 146 + subsys/system/explorer/utility/shellclasses.dsw | 29 + subsys/system/explorer/utility/shellclasses.h | 808 ++++ subsys/system/explorer/utility/shelltests.cpp | 140 + subsys/system/explorer/utility/splitpath.c | 151 + subsys/system/explorer/utility/treedroptarget.h | 79 + subsys/system/explorer/utility/utility.cpp | 153 + subsys/system/explorer/utility/utility.h | 480 ++ subsys/system/explorer/utility/window.cpp | 729 +++ subsys/system/explorer/utility/window.h | 492 ++ subsys/system/explorer/winefile/de.rc | 163 + subsys/system/explorer/winefile/desktop.c | 226 + subsys/system/explorer/winefile/en.rc | 167 + subsys/system/explorer/winefile/explorer.lst | 13 + subsys/system/explorer/winefile/explorer.rc | 39 + subsys/system/explorer/winefile/externals.h | 52 + subsys/system/explorer/winefile/license.c | 52 + subsys/system/explorer/winefile/license.h | 24 + subsys/system/explorer/winefile/make_winefile.dsp | 89 + subsys/system/explorer/winefile/makefile | 58 + subsys/system/explorer/winefile/plugins/ex_bar.c | 418 ++ subsys/system/explorer/winefile/plugins/ex_bar.h | 41 + subsys/system/explorer/winefile/plugins/ex_clock.c | 143 + subsys/system/explorer/winefile/plugins/ex_menu.c | 201 + .../system/explorer/winefile/plugins/ex_shutdwn.c | 132 + subsys/system/explorer/winefile/resource.h | 77 + subsys/system/explorer/winefile/resource.rc | 289 ++ subsys/system/explorer/winefile/wine_explore.dsp | 343 ++ subsys/system/explorer/winefile/wine_explore.dsw | 41 + subsys/system/explorer/winefile/winefile.c | 3746 +++++++++++++++ subsys/system/explorer/winefile/winefile.dsp | 208 + subsys/system/explorer/winefile/winefile.dsw | 41 + subsys/system/explorer/winefile/winefile.h | 165 + subsys/system/explorer/winefile/winefile.rc | 31 + subsys/system/format/.cvsignore | 6 + subsys/system/gstart/.cvsignore | 6 +- subsys/system/gstart/gstart.rc | 6 +- subsys/system/lsass/.cvsignore | 6 + subsys/system/regedit/.cvsignore | 6 + subsys/system/regedit/En.rc | 232 + subsys/system/regedit/Pt.rc | 206 + subsys/system/regedit/about.c | 57 + subsys/system/regedit/childwnd.c | 271 ++ subsys/system/regedit/framewnd.c | 551 +++ subsys/system/regedit/listview.c | 372 ++ subsys/system/regedit/main.c | 307 ++ subsys/system/regedit/main.h | 256 + subsys/system/regedit/makefile | 33 + subsys/system/regedit/regedit.c | 242 + subsys/system/regedit/regedit.rc | 24 + subsys/system/regedit/regproc.c | 1588 +++++++ subsys/system/regedit/regproc.h | 73 + subsys/system/regedit/res/folder1.bmp | Bin 0 -> 246 bytes subsys/system/regedit/res/folder2.bmp | Bin 0 -> 246 bytes subsys/system/regedit/res/folder3.bmp | Bin 0 -> 246 bytes subsys/system/regedit/resource.h | 105 + subsys/system/regedit/resource.rc | 98 + subsys/system/regedit/rsrc.rc | 33 + subsys/system/regedit/treeview.c | 255 + subsys/system/services/.cvsignore | 1 + subsys/system/services/database.c | 20 +- subsys/system/services/services.c | 37 +- subsys/system/setup/.cvsignore | 6 + subsys/system/setup/makefile | 25 + subsys/system/setup/setup.c | 128 + subsys/system/setup/setup.rc | 38 + subsys/system/usetup/.cvsignore | 1 + subsys/system/usetup/bootsup.c | 14 +- subsys/system/usetup/bootsup.h | 4 +- subsys/system/usetup/cabinet.c | 2094 ++++++++ subsys/system/usetup/cabinet.h | 245 + subsys/system/usetup/drivesup.c | 70 - subsys/system/usetup/drivesup.h | 5 - subsys/system/usetup/filequeue.c | 80 +- subsys/system/usetup/filequeue.h | 1 + subsys/system/usetup/filesup.c | 74 +- subsys/system/usetup/filesup.h | 5 + subsys/system/usetup/format.c | 14 +- subsys/system/usetup/fslist.c | 164 + subsys/system/usetup/fslist.h | 67 + subsys/system/usetup/infcache.c | 95 +- subsys/system/usetup/infcache.h | 6 + subsys/system/usetup/inicache.c | 4 +- subsys/system/usetup/inicache.h | 2 +- subsys/system/usetup/makefile | 10 +- subsys/system/usetup/partlist.c | 2564 ++++++---- subsys/system/usetup/partlist.h | 126 +- subsys/system/usetup/progress.c | 2 +- subsys/system/usetup/registry.c | 2 +- subsys/system/usetup/usetup.c | 1871 +++++--- subsys/system/usetup/usetup.h | 25 +- subsys/system/welcome/.cvsignore | 4 + subsys/system/welcome/Makefile | 19 + subsys/system/welcome/res/background-right.bmp | Bin 0 -> 74390 bytes subsys/system/welcome/res/background-top.bmp | Bin 0 -> 25890 bytes subsys/system/welcome/res/default.bmp | Bin 0 -> 3116 bytes subsys/system/welcome/res/icon.ico | Bin 0 -> 1406 bytes subsys/system/welcome/res/title.bmp | Bin 0 -> 13064 bytes subsys/system/welcome/res/topic0.bmp | Bin 0 -> 3466 bytes subsys/system/welcome/res/topic1.bmp | Bin 0 -> 3338 bytes subsys/system/welcome/res/topic2.bmp | Bin 0 -> 23274 bytes subsys/system/welcome/resource.h | 88 + subsys/system/welcome/welcome.c | 814 ++++ subsys/system/welcome/welcome.rc | 98 + subsys/system/winlogon/.cvsignore | 6 +- subsys/system/winlogon/winlogon.c | 6 +- subsys/win32k/.cvsignore | 11 +- subsys/win32k/dib/dib.c | 166 + subsys/win32k/dib/dib.h | 68 +- subsys/win32k/dib/dib16bpp.c | 178 +- subsys/win32k/dib/dib1bpp.c | 204 +- subsys/win32k/dib/dib24bpp.c | 116 +- subsys/win32k/dib/dib32bpp.c | 116 +- subsys/win32k/dib/dib4bpp.c | 137 +- subsys/win32k/dib/dib8bpp.c | 180 +- subsys/win32k/eng/bitblt.c | 353 +- subsys/win32k/eng/brush.c | 26 + subsys/win32k/eng/brush.h | 19 + subsys/win32k/eng/clip.c | 324 +- subsys/win32k/eng/clip.h | 22 +- subsys/win32k/eng/copybits.c | 45 +- subsys/win32k/eng/debug.c | 23 + subsys/win32k/eng/device.c | 39 +- subsys/win32k/eng/handle.c | 34 +- subsys/win32k/eng/handle.h | 19 + subsys/win32k/eng/lineto.c | 512 +- subsys/win32k/eng/mem.c | 89 +- subsys/win32k/eng/misc.c | 22 +- subsys/win32k/eng/misc.h | 19 + subsys/win32k/eng/mouse.c | 443 +- subsys/win32k/eng/nls.c | 83 + subsys/win32k/eng/objects.h | 37 +- subsys/win32k/eng/paint.c | 29 +- subsys/win32k/eng/palette.c | 64 +- subsys/win32k/eng/perfcnt.c | 56 + subsys/win32k/eng/sort.c | 33 + subsys/win32k/eng/surface.c | 127 +- subsys/win32k/eng/transblt.c | 21 + subsys/win32k/eng/xlate.c | 154 +- subsys/win32k/include/callback.h | 32 +- subsys/win32k/include/class.h | 38 +- subsys/win32k/include/cleanup.h | 6 + subsys/win32k/include/color.h | 5 + subsys/win32k/include/copybits.h | 2 +- subsys/win32k/include/dce.h | 25 +- subsys/win32k/include/dib.h | 20 +- subsys/win32k/include/eng.h | 3 +- subsys/win32k/include/error.h | 7 +- subsys/win32k/include/guicheck.h | 6 +- subsys/win32k/include/input.h | 2 +- subsys/win32k/include/inteng.h | 9 +- subsys/win32k/include/menu.h | 290 ++ subsys/win32k/include/mouse.h | 15 +- subsys/win32k/include/msgqueue.h | 59 +- subsys/win32k/include/object.h | 73 +- subsys/win32k/include/paint.h | 5 +- subsys/win32k/include/painting.h | 15 + subsys/win32k/include/palette.h | 36 +- subsys/win32k/include/path.h | 29 + subsys/win32k/include/prop.h | 7 + subsys/win32k/include/rect.h | 14 +- subsys/win32k/include/scroll.h | 2 + subsys/win32k/include/surface.h | 3 +- subsys/win32k/include/text.h | 1 + subsys/win32k/include/timer.h | 7 + subsys/win32k/include/vis.h | 31 + subsys/win32k/include/window.h | 139 +- subsys/win32k/include/winpos.h | 12 +- subsys/win32k/include/winsta.h | 44 +- subsys/win32k/ldr/loader.c | 136 + subsys/win32k/main/dllmain.c | 183 +- subsys/win32k/main/svctabm.c | 39 +- subsys/win32k/makefile | 46 +- subsys/win32k/misc/driver.c | 45 +- subsys/win32k/misc/error.c | 36 +- subsys/win32k/misc/math.c | 6 +- subsys/win32k/misc/object.c | 64 +- subsys/win32k/ntuser/callback.c | 213 +- subsys/win32k/ntuser/class.c | 505 +- subsys/win32k/ntuser/guicheck.c | 76 +- subsys/win32k/ntuser/hook.c | 19 + subsys/win32k/ntuser/input.c | 101 +- subsys/win32k/ntuser/keyboard.c | 297 +- subsys/win32k/ntuser/menu.c | 1591 +++++++ subsys/win32k/ntuser/message.c | 613 ++- subsys/win32k/ntuser/metric.c | 77 +- subsys/win32k/ntuser/misc.c | 340 ++ subsys/win32k/ntuser/msgqueue.c | 383 +- subsys/win32k/ntuser/painting.c | 732 +-- subsys/win32k/ntuser/prop.c | 119 +- subsys/win32k/ntuser/scrollbar.c | 631 ++- subsys/win32k/ntuser/stubs.c | 702 +-- subsys/win32k/ntuser/timer.c | 305 +- subsys/win32k/ntuser/userobj.c | 33 +- subsys/win32k/ntuser/vis.c | 352 ++ subsys/win32k/ntuser/windc.c | 379 +- subsys/win32k/ntuser/window.c | 2894 ++++++++--- subsys/win32k/ntuser/winlock.c | 123 + subsys/win32k/ntuser/winpos.c | 589 ++- subsys/win32k/ntuser/winsta.c | 182 +- subsys/win32k/objects/bezier.c | 114 +- subsys/win32k/objects/bitmaps.c | 281 +- subsys/win32k/objects/brush.c | 134 +- subsys/win32k/objects/cliprgn.c | 171 +- subsys/win32k/objects/color.c | 272 +- subsys/win32k/objects/coord.c | 525 +- subsys/win32k/objects/cursoricon.c | 425 ++ subsys/win32k/objects/dc.c | 1189 +++-- subsys/win32k/objects/dib.c | 543 ++- subsys/win32k/objects/fillshap.c | 940 +++- subsys/win32k/objects/gdiobj.c | 846 ++-- subsys/win32k/objects/icm.c | 64 +- subsys/win32k/objects/line.c | 578 ++- subsys/win32k/objects/metafile.c | 74 +- subsys/win32k/objects/objconv.c | 61 +- subsys/win32k/objects/paint.c | 32 +- subsys/win32k/objects/palette.c | 295 +- subsys/win32k/objects/path.c | 498 +- subsys/win32k/objects/pen.c | 28 +- subsys/win32k/objects/polyfill.c | 930 ++-- subsys/win32k/objects/print.c | 39 +- subsys/win32k/objects/rect.c | 68 +- subsys/win32k/objects/region.c | 652 ++- subsys/win32k/objects/semaphor.c | 90 + subsys/win32k/objects/text.c | 650 ++- subsys/win32k/objects/wingl.c | 33 +- subsys/win32k/stubs/stubs.c | 1449 +++++- subsys/win32k/stubs/xpstubs.c | 81 + subsys/win32k/win32k.def | 242 +- subsys/win32k/win32k.edf | 249 +- system.hiv | 343 -- tools/.cvsignore | 1 + tools/Makefile | 19 +- tools/cabman/.cvsignore | 7 + tools/cabman/cabinet.cxx | 3199 +++++++++++++ tools/cabman/cabinet.h | 504 ++ tools/cabman/cabman.h | 48 + tools/cabman/dff.txt | 55 + tools/cabman/dfp.cxx | 1179 +++++ tools/cabman/dfp.h | 141 + tools/cabman/main.cxx | 556 +++ tools/cabman/makefile | 49 + tools/cabman/makefile.win32 | 29 + tools/cabman/mszip.cxx | 172 + tools/cabman/mszip.h | 41 + tools/cabman/raw.cxx | 68 + tools/cabman/raw.h | 35 + tools/cdmake/cdmake.c | 358 +- tools/config.mk | 4 + tools/depend.mk | 5 +- tools/helper.mk | 178 +- tools/mkhive/binhive.c | 16 +- tools/mkhive/infcache.c | 26 +- tools/mkhive/reginf.c | 167 +- tools/mkhive/registry.c | 15 +- tools/rcopy.c | 248 +- tools/regtests.c | 355 ++ tools/rgenstat/.cvsignore | 10 + tools/rgenstat/Makefile | 43 + tools/rgenstat/llmosrt.c | 106 + tools/rgenstat/rgenstat.c | 921 ++++ tools/rgenstat/web/.cvsignore | 1 + tools/rgenstat/web/c.gif | Bin 0 -> 92 bytes tools/rgenstat/web/f.gif | Bin 0 -> 101 bytes tools/rgenstat/web/i.gif | Bin 0 -> 73 bytes tools/rgenstat/web/rapistatus.css | 57 + tools/rgenstat/web/rapistatus.js | 292 ++ tools/rgenstat/web/rapistatus.xsl | 182 + tools/rgenstat/web/sc.gif | Bin 0 -> 70 bytes tools/rgenstat/web/tb.gif | Bin 0 -> 49 bytes tools/rgenstat/web/tm.gif | Bin 0 -> 64 bytes tools/rgenstat/web/tp.gif | Bin 0 -> 67 bytes tools/rgenstat/web/u.gif | Bin 0 -> 76 bytes tools/rmkdir.c | 30 +- tools/rtouch.c | 14 +- 3060 files changed, 249922 insertions(+), 78701 deletions(-) create mode 100644 Jamfile create mode 100644 Jamrules create mode 100755 apistatus.lst create mode 100644 apps/tests/SampleWindow/.cvsignore create mode 100644 apps/tests/SampleWindow/makefile create mode 100644 apps/tests/SampleWindow/window.c create mode 100644 apps/tests/button/.cvsignore create mode 100644 apps/tests/button/Makefile create mode 100644 apps/tests/button/buttontst.c create mode 100644 apps/tests/button2/.cvsignore create mode 100644 apps/tests/button2/Makefile create mode 100644 apps/tests/button2/buttontst2.c create mode 100644 apps/tests/capclock/.cvsignore create mode 100644 apps/tests/capclock/Makefile create mode 100644 apps/tests/capclock/capclock.c create mode 100644 apps/tests/capclock/capclock.ico create mode 100644 apps/tests/capclock/capclock.rc create mode 100644 apps/tests/combo/.cvsignore create mode 100644 apps/tests/combo/combotst.c create mode 100644 apps/tests/combo/makefile create mode 100644 apps/tests/combo/utils.c create mode 100644 apps/tests/combo/utils.h create mode 100644 apps/tests/edit/.cvsignore create mode 100644 apps/tests/edit/edittest.c create mode 100644 apps/tests/edit/makefile create mode 100644 apps/tests/edit/utils.c create mode 100644 apps/tests/edit/utils.h create mode 100644 apps/tests/enumwnd/.cvsignore create mode 100644 apps/tests/enumwnd/enumwnd.c create mode 100644 apps/tests/enumwnd/enumwnd.dsp create mode 100644 apps/tests/enumwnd/makefile create mode 100644 apps/tests/eventpair/.cvsignore create mode 100644 apps/tests/eventpair/eventpair.c create mode 100644 apps/tests/eventpair/makefile create mode 100644 apps/tests/icontest/.cvsignore create mode 100644 apps/tests/icontest/icon.ico create mode 100644 apps/tests/icontest/icontest.c create mode 100644 apps/tests/icontest/icontest.rc create mode 100644 apps/tests/icontest/makefile create mode 100644 apps/tests/icontest/resource.h create mode 100644 apps/tests/lineclip/.cvsignore create mode 100644 apps/tests/lineclip/lineclip.c create mode 100644 apps/tests/lineclip/makefile create mode 100644 apps/tests/linetest/.cvsignore create mode 100644 apps/tests/linetest/linetest.c create mode 100644 apps/tests/linetest/makefile create mode 100644 apps/tests/lock/.cvsignore create mode 100644 apps/tests/mktime/.cvsignore create mode 100644 apps/tests/multiwin/.cvsignore create mode 100644 apps/tests/multiwin/makefile create mode 100644 apps/tests/multiwin/multiwin.c create mode 100644 apps/tests/palbitblt/.cvsignore create mode 100644 apps/tests/palbitblt/makefile create mode 100644 apps/tests/palbitblt/pal.c create mode 100644 apps/tests/patblt/.cvsignore create mode 100644 apps/tests/pipe/.cvsignore create mode 100644 apps/tests/pipe/Makefile create mode 100644 apps/tests/pipe/pipe.c create mode 100644 apps/tests/polytest/.cvsignore create mode 100644 apps/tests/polytest/polytest.cpp create mode 100644 apps/tests/polytest/polytest.dsp create mode 100644 apps/tests/polytest/polytest.dsw create mode 100644 apps/tests/primitives/.cvsignore create mode 100644 apps/tests/primitives/Makefile create mode 100644 apps/tests/primitives/mk_font.cpp create mode 100644 apps/tests/primitives/mk_font.h create mode 100644 apps/tests/primitives/primitives.cpp create mode 100644 apps/tests/shaptest/.cvsignore create mode 100644 apps/tests/statst/.cvsignore create mode 100644 apps/tests/statst/Makefile create mode 100644 apps/tests/statst/statst.c create mode 100644 apps/tests/statst2/.cvsignore create mode 100644 apps/tests/statst2/Makefile create mode 100644 apps/tests/statst2/statst2.c create mode 100644 apps/tests/stretchblt/.cvsignore create mode 100644 apps/tests/suspend/.cvsignore create mode 100644 apps/tests/suspend/Makefile create mode 100644 apps/tests/suspend/suspend.c create mode 100644 apps/tests/tcpsvr/.cvsignore create mode 100644 apps/tests/terminate/.cvsignore create mode 100644 apps/tests/terminate/Makefile create mode 100644 apps/tests/terminate/terminate.c create mode 100644 apps/tests/thread_msg/.cvsignore create mode 100644 apps/tests/thread_msg/makefile create mode 100644 apps/tests/thread_msg/thread_msg.c create mode 100644 apps/tests/threadwait/.cvsignore create mode 100644 apps/tests/threadwait/makefile create mode 100644 apps/tests/threadwait/threadwait.c create mode 100644 apps/tests/txtscale/.cvsignore create mode 100644 apps/tests/txtscale/Makefile create mode 100644 apps/tests/txtscale/mk_font.cpp create mode 100644 apps/tests/txtscale/mk_font.h create mode 100644 apps/tests/txtscale/txtscale.cpp create mode 100644 apps/tests/wm_erasebkgnd/.cvsignore rename apps/tests/wm_erasebkgnd/{Demo_WM_ERASEBKGND.cpp => wm_erasebkgnd.cpp} (100%) create mode 100644 apps/tests/wm_paint/.cvsignore create mode 100644 apps/utils/consw/.cvsignore create mode 100644 apps/utils/consw/consw.c create mode 100644 apps/utils/consw/makefile create mode 100644 apps/utils/consw/runprg.bat create mode 100644 apps/utils/pice/loader/.cvsignore create mode 100644 apps/utils/pice/module/.cvsignore create mode 100644 apps/utils/pnpdump/.cvsignore create mode 100644 apps/utils/pnpdump/makefile create mode 100644 apps/utils/pnpdump/pnpdump.c create mode 100644 apps/utils/tickcount/.cvsignore delete mode 100644 boot.hiv create mode 100755 bootdata/autorun.inf create mode 100755 bootdata/icon.ico create mode 100755 bootdata/packages/reactos.dff create mode 100644 drivers/dd/bootvid/.cvsignore create mode 100644 drivers/dd/bootvid/Makefile create mode 100755 drivers/dd/bootvid/bootimage.bmp create mode 100644 drivers/dd/bootvid/bootvid.c create mode 100644 drivers/dd/bootvid/bootvid.rc create mode 100644 drivers/dd/bootvid/pixelsup_i386.S create mode 100644 drivers/dd/debugout/.cvsignore create mode 100644 drivers/dd/debugout/debugout.c create mode 100644 drivers/dd/debugout/debugout.rc create mode 100644 drivers/dd/debugout/makefile rename {include => drivers/dd/sound}/in.h (100%) delete mode 100644 drivers/dd/vga/display/main/gdiinfo.h create mode 100755 drivers/fs/ntfs/close.c create mode 100755 drivers/fs/ntfs/notes.txt create mode 100755 drivers/fs/ntfs/rw.c create mode 100644 drivers/input/sermouse/sermouse.txt create mode 100644 drivers/net/dd/pcnet/.cvsignore create mode 100644 drivers/net/dd/pcnet/Makefile create mode 100644 drivers/net/dd/pcnet/pci.h create mode 100644 drivers/net/dd/pcnet/pcnet.c create mode 100644 drivers/net/dd/pcnet/pcnet.h create mode 100644 drivers/net/dd/pcnet/pcnet.rc create mode 100644 drivers/net/dd/pcnet/pcnethw.h create mode 100644 drivers/net/ndis/ndis/config.c create mode 100644 drivers/net/ndis/ndis/enum.c create mode 100644 drivers/storage/diskdump/.cvsignore create mode 100644 drivers/storage/diskdump/Makefile create mode 100644 drivers/storage/diskdump/diskdump.c create mode 100644 drivers/storage/diskdump/diskdump.def create mode 100644 drivers/storage/diskdump/diskdump.edf create mode 100644 drivers/storage/diskdump/diskdump.rc create mode 100644 drivers/storage/diskdump/diskdump_helper.S create mode 100644 drivers/storage/scsiport/scsiport_int.h delete mode 100644 hal/halx86/perfcnt.c create mode 100644 hal/halx86/timer.c delete mode 100644 hal/halx86/udelay.c create mode 100644 include/accctrl.h create mode 100644 include/aclapi.h create mode 100644 include/d3d.h create mode 100644 include/d3dcaps.h create mode 100644 include/d3dtypes.h create mode 100644 include/ddentry.h create mode 100644 include/ddk/d3dhal.h create mode 100644 include/ddk/ddrawi.h delete mode 100644 include/ddk/haltypes.h delete mode 100644 include/ddk/i386/tss.h delete mode 100644 include/ddk/kdfuncs.h create mode 100644 include/ddk/ntbootvid.h delete mode 100644 include/ddk/obtypes.h delete mode 100644 include/ddk/service.h create mode 100644 include/ddraw.h create mode 100644 include/icmpapi.h create mode 100644 include/ipexport.h create mode 100644 include/iphlpapi.h create mode 100644 include/ipifcons.h create mode 100644 include/iprtrmib.h create mode 100644 include/iptypes.h create mode 100644 include/mmddk.h create mode 100644 include/ndis.h create mode 100755 include/ntos/bootvid.h create mode 100755 include/ntos/dbgfuncs.h create mode 100644 include/ntos/fstypes.h create mode 100755 include/ntos/halfuncs.h create mode 100755 include/ntos/haltypes.h create mode 100755 include/ntos/kdfuncs.h create mode 100644 include/ntos/kefuncs.h create mode 100755 include/ntos/obtypes.h create mode 100755 include/ntos/service.h create mode 100755 include/ntos/tss.h create mode 100644 include/ntsecapi.h create mode 100644 include/richedit.h create mode 100755 include/roskrnl.h create mode 100644 include/rosrtl/devmode.h create mode 100644 include/rosrtl/logfont.h create mode 100644 include/syssetup.h create mode 100644 include/tgetopt.h create mode 100644 include/user32/accel.h create mode 100644 include/user32/regcontrol.h create mode 100644 include/wdm.h create mode 100644 include/win32k/cursoricon.h create mode 100644 include/wincrypt.h delete mode 100644 include/wine/commctrl.h create mode 100644 include/wine/debug.h create mode 100644 include/wine/port.h create mode 100644 include/wine/test.h create mode 100644 include/wine/unicode.h create mode 100644 include/wine/windef16.h create mode 100644 include/wine/wine_common_ver.rc create mode 100755 install-unix.sh create mode 100644 lib/Jamfile create mode 100644 lib/advapi32/Jamfile create mode 100644 lib/advapi32/misc/aclstubs.c create mode 100644 lib/advapi32/misc/crstubs.c create mode 100644 lib/advapi32/misc/stubs.c create mode 100644 lib/advapi32/sec/audit.c create mode 100644 lib/cards/.cvsignore create mode 100644 lib/cards/Makefile create mode 100644 lib/cards/cards.c create mode 100644 lib/cards/cards.def create mode 100644 lib/cards/cards.edf create mode 100644 lib/cards/cards.h create mode 100644 lib/cards/cards.rc create mode 100644 lib/cards/res/Background_1.bmp create mode 100644 lib/cards/res/Clubs_Ace.bmp create mode 100644 lib/cards/res/Clubs_Eight.bmp create mode 100644 lib/cards/res/Clubs_Five.bmp create mode 100644 lib/cards/res/Clubs_Four.bmp create mode 100644 lib/cards/res/Clubs_Jack.bmp create mode 100644 lib/cards/res/Clubs_King.bmp create mode 100644 lib/cards/res/Clubs_Nine.bmp create mode 100644 lib/cards/res/Clubs_Queen.bmp create mode 100644 lib/cards/res/Clubs_Seven.bmp create mode 100644 lib/cards/res/Clubs_Six.bmp create mode 100644 lib/cards/res/Clubs_Ten.bmp create mode 100644 lib/cards/res/Clubs_Three.bmp create mode 100644 lib/cards/res/Clubs_Two.bmp create mode 100644 lib/cards/res/Diamonds_Ace.bmp create mode 100644 lib/cards/res/Diamonds_Eight.bmp create mode 100644 lib/cards/res/Diamonds_Five.bmp create mode 100644 lib/cards/res/Diamonds_Four.bmp create mode 100644 lib/cards/res/Diamonds_Jack.bmp create mode 100644 lib/cards/res/Diamonds_King.bmp create mode 100644 lib/cards/res/Diamonds_Nine.bmp create mode 100644 lib/cards/res/Diamonds_Queen.bmp create mode 100644 lib/cards/res/Diamonds_Seven.bmp create mode 100644 lib/cards/res/Diamonds_Six.bmp create mode 100644 lib/cards/res/Diamonds_Ten.bmp create mode 100644 lib/cards/res/Diamonds_Three.bmp create mode 100644 lib/cards/res/Diamonds_Two.bmp create mode 100644 lib/cards/res/FreeCard.bmp create mode 100644 lib/cards/res/Hearts_Ace.bmp create mode 100644 lib/cards/res/Hearts_Eight.bmp create mode 100644 lib/cards/res/Hearts_Five.bmp create mode 100644 lib/cards/res/Hearts_Four.bmp create mode 100644 lib/cards/res/Hearts_Jack.bmp create mode 100644 lib/cards/res/Hearts_King.bmp create mode 100644 lib/cards/res/Hearts_Nine.bmp create mode 100644 lib/cards/res/Hearts_Queen.bmp create mode 100644 lib/cards/res/Hearts_Seven.bmp create mode 100644 lib/cards/res/Hearts_Six.bmp create mode 100644 lib/cards/res/Hearts_Ten.bmp create mode 100644 lib/cards/res/Hearts_Three.bmp create mode 100644 lib/cards/res/Hearts_Two.bmp create mode 100644 lib/cards/res/Joker.bmp create mode 100644 lib/cards/res/OSign.bmp create mode 100644 lib/cards/res/Spades_Ace.bmp create mode 100644 lib/cards/res/Spades_Eight.bmp create mode 100644 lib/cards/res/Spades_Five.bmp create mode 100644 lib/cards/res/Spades_Four.bmp create mode 100644 lib/cards/res/Spades_Jack.bmp create mode 100644 lib/cards/res/Spades_King.bmp create mode 100644 lib/cards/res/Spades_Nine.bmp create mode 100644 lib/cards/res/Spades_Queen.bmp create mode 100644 lib/cards/res/Spades_Seven.bmp create mode 100644 lib/cards/res/Spades_Six.bmp create mode 100644 lib/cards/res/Spades_Ten.bmp create mode 100644 lib/cards/res/Spades_Three.bmp create mode 100644 lib/cards/res/Spades_Two.bmp create mode 100644 lib/cards/res/XSign.bmp delete mode 100644 lib/crtdll/ctype/ctype.c delete mode 100644 lib/crtdll/ctype/isalnum.c delete mode 100644 lib/crtdll/ctype/isalpha.c delete mode 100644 lib/crtdll/ctype/isascii.c delete mode 100644 lib/crtdll/ctype/iscntrl.c delete mode 100644 lib/crtdll/ctype/iscsym.c delete mode 100644 lib/crtdll/ctype/isdigit.c delete mode 100644 lib/crtdll/ctype/isgraph.c delete mode 100644 lib/crtdll/ctype/islower.c delete mode 100644 lib/crtdll/ctype/isprint.c delete mode 100644 lib/crtdll/ctype/ispunct.c delete mode 100644 lib/crtdll/ctype/isspace.c delete mode 100644 lib/crtdll/ctype/isupper.c delete mode 100644 lib/crtdll/ctype/isxdigit.c delete mode 100644 lib/crtdll/ctype/toascii.c delete mode 100644 lib/crtdll/ctype/tolower.c delete mode 100644 lib/crtdll/ctype/toupper.c delete mode 100644 lib/crtdll/locale/.cvsignore delete mode 100644 lib/crtdll/locale/locale.c delete mode 100644 lib/crtdll/stdio/scanf.c delete mode 100644 lib/crtdll/stdio/vfscanf.c create mode 100644 lib/crtdll/string/lasttok.c delete mode 100644 lib/crtdll/string/memccpy.c delete mode 100644 lib/crtdll/string/memchr.c delete mode 100644 lib/crtdll/string/memcmp.c delete mode 100644 lib/crtdll/string/memcpy.c delete mode 100644 lib/crtdll/string/memcpy.s delete mode 100644 lib/crtdll/string/memicmp.c delete mode 100644 lib/crtdll/string/memmove.c delete mode 100644 lib/crtdll/string/memmove.s delete mode 100644 lib/crtdll/string/memset.c delete mode 100644 lib/crtdll/string/memset.s delete mode 100644 lib/crtdll/string/strcat.c delete mode 100644 lib/crtdll/string/strchr.c delete mode 100644 lib/crtdll/string/strcmp.c delete mode 100644 lib/crtdll/string/strcoll.c delete mode 100644 lib/crtdll/string/strcpy.c delete mode 100644 lib/crtdll/string/strcspn.c delete mode 100644 lib/crtdll/string/strdup.c delete mode 100644 lib/crtdll/string/stricmp.c delete mode 100644 lib/crtdll/string/strlen.c delete mode 100644 lib/crtdll/string/strlwr.c delete mode 100644 lib/crtdll/string/strncat.c delete mode 100644 lib/crtdll/string/strncmp.c delete mode 100644 lib/crtdll/string/strncpy.c delete mode 100644 lib/crtdll/string/strnicmp.c delete mode 100644 lib/crtdll/string/strnlen.c delete mode 100644 lib/crtdll/string/strpbrk.c delete mode 100644 lib/crtdll/string/strrchr.c delete mode 100644 lib/crtdll/string/strrev.c delete mode 100644 lib/crtdll/string/strset.c delete mode 100644 lib/crtdll/string/strspn.c delete mode 100644 lib/crtdll/string/strspnp.c delete mode 100644 lib/crtdll/string/strstr.c delete mode 100644 lib/crtdll/string/strtoul.c delete mode 100644 lib/crtdll/string/strupr.c delete mode 100644 lib/crtdll/string/strxfrm.c delete mode 100644 lib/crtdll/wchar/wcslen.c create mode 100644 lib/crtdll/wchar/wlasttok.c create mode 100644 lib/fslib/vfatlib/fat12.c create mode 100644 lib/fslib/vfatlib/fat16.c create mode 100644 lib/fslib/vfatlib/fat32.c create mode 100644 lib/gdi32/include/internal/heap.h create mode 100644 lib/gdi32/misc/heap.c create mode 100644 lib/gdi32/misc/wingl.c create mode 100644 lib/gdi32/objects/clip.c create mode 100644 lib/imm32/.cvsignore create mode 100644 lib/imm32/Makefile create mode 100644 lib/imm32/imm.c create mode 100644 lib/imm32/imm.spec create mode 100644 lib/imm32/imm32.def create mode 100644 lib/imm32/imm32.edf create mode 100644 lib/imm32/imm32.rc create mode 100644 lib/kbdus/.cvsignore create mode 100644 lib/kbdus/Jamfile create mode 100644 lib/kbdus/kbdus.c create mode 100644 lib/kbdus/kbdus.def create mode 100644 lib/kbdus/kbdus.edf create mode 100644 lib/kbdus/kbdus.rc create mode 100644 lib/kbdus/makefile create mode 100644 lib/kernel32/Jamfile create mode 100644 lib/kernel32/misc/computername.c delete mode 100644 lib/kernel32/misc/getname.c create mode 100644 lib/kernel32/misc/lzexpand_main.c delete mode 100644 lib/kernel32/nls/LGPL.c delete mode 100644 lib/kernel32/nls/afk.nls delete mode 100644 lib/kernel32/nls/ara.nls delete mode 100644 lib/kernel32/nls/arb.nls delete mode 100644 lib/kernel32/nls/are.nls delete mode 100644 lib/kernel32/nls/arg.nls delete mode 100644 lib/kernel32/nls/ari.nls delete mode 100644 lib/kernel32/nls/ark.nls delete mode 100644 lib/kernel32/nls/arm.nls delete mode 100644 lib/kernel32/nls/aro.nls delete mode 100644 lib/kernel32/nls/arq.nls delete mode 100644 lib/kernel32/nls/ars.nls delete mode 100644 lib/kernel32/nls/art.nls delete mode 100644 lib/kernel32/nls/aru.nls delete mode 100644 lib/kernel32/nls/bel.nls delete mode 100644 lib/kernel32/nls/bgr.nls delete mode 100644 lib/kernel32/nls/cat.nls delete mode 100644 lib/kernel32/nls/cht.nls delete mode 100644 lib/kernel32/nls/codepage.c delete mode 100644 lib/kernel32/nls/cpmisc.c delete mode 100644 lib/kernel32/nls/cptable.c delete mode 100644 lib/kernel32/nls/cze.nls delete mode 100644 lib/kernel32/nls/dan.nls delete mode 100644 lib/kernel32/nls/dea.nls delete mode 100644 lib/kernel32/nls/dec.nls delete mode 100644 lib/kernel32/nls/del.nls delete mode 100644 lib/kernel32/nls/des.nls delete mode 100644 lib/kernel32/nls/deu.nls delete mode 100644 lib/kernel32/nls/empty.nls delete mode 100644 lib/kernel32/nls/ena.nls delete mode 100644 lib/kernel32/nls/enb.nls delete mode 100644 lib/kernel32/nls/enc.nls delete mode 100644 lib/kernel32/nls/eng.nls delete mode 100644 lib/kernel32/nls/enj.nls delete mode 100644 lib/kernel32/nls/enl.nls delete mode 100644 lib/kernel32/nls/ens.nls delete mode 100644 lib/kernel32/nls/ent.nls delete mode 100644 lib/kernel32/nls/enu.nls delete mode 100644 lib/kernel32/nls/enz.nls delete mode 100644 lib/kernel32/nls/esa.nls delete mode 100644 lib/kernel32/nls/esb.nls delete mode 100644 lib/kernel32/nls/esc.nls delete mode 100644 lib/kernel32/nls/esd.nls delete mode 100644 lib/kernel32/nls/ese.nls delete mode 100644 lib/kernel32/nls/esf.nls delete mode 100644 lib/kernel32/nls/esg.nls delete mode 100644 lib/kernel32/nls/esh.nls delete mode 100644 lib/kernel32/nls/esi.nls delete mode 100644 lib/kernel32/nls/esl.nls delete mode 100644 lib/kernel32/nls/esm.nls delete mode 100644 lib/kernel32/nls/esn.nls delete mode 100644 lib/kernel32/nls/eso.nls delete mode 100644 lib/kernel32/nls/esp.nls delete mode 100644 lib/kernel32/nls/esperanto.nls delete mode 100644 lib/kernel32/nls/esr.nls delete mode 100644 lib/kernel32/nls/ess.nls delete mode 100644 lib/kernel32/nls/est.nls delete mode 100644 lib/kernel32/nls/esu.nls delete mode 100644 lib/kernel32/nls/esv.nls delete mode 100644 lib/kernel32/nls/esy.nls delete mode 100644 lib/kernel32/nls/esz.nls delete mode 100644 lib/kernel32/nls/euq.nls delete mode 100644 lib/kernel32/nls/fin.nls delete mode 100644 lib/kernel32/nls/fos.nls delete mode 100644 lib/kernel32/nls/fra.nls delete mode 100644 lib/kernel32/nls/frb.nls delete mode 100644 lib/kernel32/nls/frc.nls delete mode 100644 lib/kernel32/nls/frl.nls delete mode 100644 lib/kernel32/nls/frs.nls delete mode 100644 lib/kernel32/nls/grc.nls delete mode 100644 lib/kernel32/nls/hkg.nls delete mode 100644 lib/kernel32/nls/hrv.nls delete mode 100644 lib/kernel32/nls/hun.nls delete mode 100644 lib/kernel32/nls/ind.nls delete mode 100644 lib/kernel32/nls/irl.nls delete mode 100644 lib/kernel32/nls/isl.nls delete mode 100644 lib/kernel32/nls/ita.nls delete mode 100644 lib/kernel32/nls/its.nls delete mode 100644 lib/kernel32/nls/jpn.nls delete mode 100644 lib/kernel32/nls/koj.nls delete mode 100644 lib/kernel32/nls/kor.nls delete mode 100644 lib/kernel32/nls/lcAFK.c delete mode 100644 lib/kernel32/nls/lcBEL.c delete mode 100644 lib/kernel32/nls/lcBGR.c delete mode 100644 lib/kernel32/nls/lcCAT.c delete mode 100644 lib/kernel32/nls/lcCSY.c delete mode 100644 lib/kernel32/nls/lcDAN.c delete mode 100644 lib/kernel32/nls/lcDEA.c delete mode 100644 lib/kernel32/nls/lcDEC.c delete mode 100644 lib/kernel32/nls/lcDEL.c delete mode 100644 lib/kernel32/nls/lcDES.c delete mode 100644 lib/kernel32/nls/lcDEU.c delete mode 100644 lib/kernel32/nls/lcELL.c delete mode 100644 lib/kernel32/nls/lcENA.c delete mode 100644 lib/kernel32/nls/lcENB.c delete mode 100644 lib/kernel32/nls/lcENC.c delete mode 100644 lib/kernel32/nls/lcENG.c delete mode 100644 lib/kernel32/nls/lcENI.c delete mode 100644 lib/kernel32/nls/lcENJ.c delete mode 100644 lib/kernel32/nls/lcENL.c delete mode 100644 lib/kernel32/nls/lcENS.c delete mode 100644 lib/kernel32/nls/lcENT.c delete mode 100644 lib/kernel32/nls/lcENU.c delete mode 100644 lib/kernel32/nls/lcENZ.c delete mode 100644 lib/kernel32/nls/lcESA.c delete mode 100644 lib/kernel32/nls/lcESB.c delete mode 100644 lib/kernel32/nls/lcESC.c delete mode 100644 lib/kernel32/nls/lcESD.c delete mode 100644 lib/kernel32/nls/lcESE.c delete mode 100644 lib/kernel32/nls/lcESF.c delete mode 100644 lib/kernel32/nls/lcESG.c delete mode 100644 lib/kernel32/nls/lcESH.c delete mode 100644 lib/kernel32/nls/lcESI.c delete mode 100644 lib/kernel32/nls/lcESL.c delete mode 100644 lib/kernel32/nls/lcESM.c delete mode 100644 lib/kernel32/nls/lcESN.c delete mode 100644 lib/kernel32/nls/lcESO.c delete mode 100644 lib/kernel32/nls/lcESP.c delete mode 100644 lib/kernel32/nls/lcESR.c delete mode 100644 lib/kernel32/nls/lcESS.c delete mode 100644 lib/kernel32/nls/lcESU.c delete mode 100644 lib/kernel32/nls/lcESV.c delete mode 100644 lib/kernel32/nls/lcESY.c delete mode 100644 lib/kernel32/nls/lcESZ.c delete mode 100644 lib/kernel32/nls/lcETI.c delete mode 100644 lib/kernel32/nls/lcEUQ.c delete mode 100644 lib/kernel32/nls/lcFIN.c delete mode 100644 lib/kernel32/nls/lcFOS.c delete mode 100644 lib/kernel32/nls/lcFRA.c delete mode 100644 lib/kernel32/nls/lcFRB.c delete mode 100644 lib/kernel32/nls/lcFRC.c delete mode 100644 lib/kernel32/nls/lcFRL.c delete mode 100644 lib/kernel32/nls/lcFRS.c delete mode 100644 lib/kernel32/nls/lcHRV.c delete mode 100644 lib/kernel32/nls/lcHUN.c delete mode 100644 lib/kernel32/nls/lcIND.c delete mode 100644 lib/kernel32/nls/lcISL.c delete mode 100644 lib/kernel32/nls/lcITA.c delete mode 100644 lib/kernel32/nls/lcITS.c delete mode 100644 lib/kernel32/nls/lcLTH.c delete mode 100644 lib/kernel32/nls/lcLVI.c delete mode 100644 lib/kernel32/nls/lcNLB.c delete mode 100644 lib/kernel32/nls/lcNLD.c delete mode 100644 lib/kernel32/nls/lcNON.c delete mode 100644 lib/kernel32/nls/lcNOR.c delete mode 100644 lib/kernel32/nls/lcPLK.c delete mode 100644 lib/kernel32/nls/lcPTB.c delete mode 100644 lib/kernel32/nls/lcPTG.c delete mode 100644 lib/kernel32/nls/lcROM.c delete mode 100644 lib/kernel32/nls/lcRUS.c delete mode 100644 lib/kernel32/nls/lcSKY.c delete mode 100644 lib/kernel32/nls/lcSLV.c delete mode 100644 lib/kernel32/nls/lcSQI.c delete mode 100644 lib/kernel32/nls/lcSRB.c delete mode 100644 lib/kernel32/nls/lcSRL.c delete mode 100644 lib/kernel32/nls/lcSVE.c delete mode 100644 lib/kernel32/nls/lcSVF.c delete mode 100644 lib/kernel32/nls/lcTRK.c delete mode 100644 lib/kernel32/nls/lcUKR.c delete mode 100644 lib/kernel32/nls/lctable.c delete mode 100644 lib/kernel32/nls/locale.c delete mode 100644 lib/kernel32/nls/lth.nls delete mode 100644 lib/kernel32/nls/lvi.nls delete mode 100644 lib/kernel32/nls/mbtowc.c delete mode 100644 lib/kernel32/nls/nlb.nls delete mode 100644 lib/kernel32/nls/nld.nls delete mode 100644 lib/kernel32/nls/nls.nls delete mode 100644 lib/kernel32/nls/non.nls delete mode 100644 lib/kernel32/nls/nor.nls delete mode 100644 lib/kernel32/nls/ole2nls.c delete mode 100644 lib/kernel32/nls/plk.nls delete mode 100644 lib/kernel32/nls/prc.nls delete mode 100644 lib/kernel32/nls/ptb.nls delete mode 100644 lib/kernel32/nls/ptg.nls delete mode 100644 lib/kernel32/nls/rom.nls delete mode 100644 lib/kernel32/nls/rus.nls delete mode 100644 lib/kernel32/nls/sgp.nls delete mode 100644 lib/kernel32/nls/sky.nls delete mode 100644 lib/kernel32/nls/slv.nls delete mode 100644 lib/kernel32/nls/sqi.nls delete mode 100644 lib/kernel32/nls/srb.nls delete mode 100644 lib/kernel32/nls/srl.nls delete mode 100644 lib/kernel32/nls/sve.nls delete mode 100644 lib/kernel32/nls/svf.nls delete mode 100644 lib/kernel32/nls/tha.nls delete mode 100644 lib/kernel32/nls/trk.nls delete mode 100644 lib/kernel32/nls/ukr.nls delete mode 100644 lib/kernel32/nls/vie.nls delete mode 100644 lib/kernel32/nls/wctomb.c delete mode 100644 lib/kernel32/nls/zhh.nls delete mode 100644 lib/kernel32/nls/zhi.nls delete mode 100644 lib/kernel32/nls/zhs.nls create mode 100644 lib/kernel32/thread/fls.c create mode 100644 lib/kernel32/thread/i386/.cvsignore create mode 100644 lib/kernel32/thread/i386/fiber.S create mode 100644 lib/lzexpand/.cvsignore create mode 100644 lib/lzexpand/Makefile create mode 100644 lib/lzexpand/lz32.def create mode 100644 lib/lzexpand/lz32.edf create mode 100644 lib/lzexpand/lz32.rc create mode 100644 lib/lzexpand/lzexpand_main.c create mode 100644 lib/msvcrt/string/lasttok.c delete mode 100644 lib/msvcrt/string/memccpy.c delete mode 100644 lib/msvcrt/string/memchr.c delete mode 100644 lib/msvcrt/string/memcmp.c delete mode 100644 lib/msvcrt/string/memcpy.c delete mode 100644 lib/msvcrt/string/memmove.c delete mode 100644 lib/msvcrt/string/memset.c delete mode 100644 lib/msvcrt/string/strcat.c delete mode 100644 lib/msvcrt/string/strchr.c delete mode 100644 lib/msvcrt/string/strcmp.c delete mode 100644 lib/msvcrt/string/strcpy.c delete mode 100644 lib/msvcrt/string/strcspn.c delete mode 100644 lib/msvcrt/string/strlen.c delete mode 100644 lib/msvcrt/string/strncat.c delete mode 100644 lib/msvcrt/string/strncmp.c delete mode 100644 lib/msvcrt/string/strncpy.c delete mode 100644 lib/msvcrt/string/strnlen.c delete mode 100644 lib/msvcrt/string/strrchr.c delete mode 100644 lib/msvcrt/string/strspn.c create mode 100644 lib/msvcrt/time/ftime.c delete mode 100644 lib/msvcrt/wstring/wcscat.c delete mode 100644 lib/msvcrt/wstring/wcschr.c delete mode 100644 lib/msvcrt/wstring/wcscmp.c delete mode 100644 lib/msvcrt/wstring/wcscpy.c delete mode 100644 lib/msvcrt/wstring/wcslen.c delete mode 100644 lib/msvcrt/wstring/wcsncat.c delete mode 100644 lib/msvcrt/wstring/wcsncmp.c delete mode 100644 lib/msvcrt/wstring/wcsncpy.c delete mode 100644 lib/msvcrt/wstring/wcsnlen.c delete mode 100644 lib/msvcrt/wstring/wcsrchr.c create mode 100644 lib/msvcrt/wstring/wlasttok.c create mode 100644 lib/mswsock/.cvsignore create mode 100644 lib/mswsock/Makefile create mode 100644 lib/mswsock/mswsock.def create mode 100644 lib/mswsock/mswsock.edf create mode 100644 lib/mswsock/mswsock.rc create mode 100644 lib/mswsock/stubs.c create mode 100644 lib/ntdll/Jamfile create mode 100755 lib/ntdll/nasm/fixasm.bat create mode 100644 lib/ntdll/nasm/makefile-asm create mode 100644 lib/ntdll/nasm/readme.txt create mode 100644 lib/ntdll/nasm/rtl/i386_RtlCompareMemory.asm create mode 100644 lib/ntdll/nasm/rtl/i386_RtlCompareMemoryUlong.asm create mode 100644 lib/ntdll/nasm/rtl/i386_RtlFillMemory.asm create mode 100644 lib/ntdll/nasm/rtl/i386_RtlFillMemoryUlong.asm create mode 100644 lib/ntdll/nasm/rtl/i386_RtlMoveMemory.asm create mode 100644 lib/ntdll/nasm/rtl/i386_RtlRandom.asm create mode 100644 lib/ntdll/nasm/rtl/i386_RtlZeroMemory.asm create mode 100644 lib/ntdll/rtl/i386/alldiv.s create mode 100644 lib/ntdll/rtl/i386/allmul.s create mode 100644 lib/ntdll/rtl/i386/allrem.s create mode 100644 lib/ntdll/rtl/i386/allshl.s create mode 100644 lib/ntdll/rtl/i386/allshr.s create mode 100644 lib/ntdll/rtl/i386/aulldiv.s create mode 100644 lib/ntdll/rtl/i386/aullrem.s create mode 100644 lib/ntdll/rtl/i386/aullshr.s create mode 100644 lib/ntdll/rtl/i386/chkstk.s create mode 100644 lib/ntdll/rtl/i386/float.c create mode 100644 lib/ntdll/rtl/random.c create mode 100644 lib/ntdll/rtl/splaytree.c create mode 100644 lib/ntdll/rtl/teb.c delete mode 100644 lib/ntdll/stdlib/qsort.c delete mode 100644 lib/ntdll/string/memccpy.c delete mode 100644 lib/ntdll/string/memchr.c delete mode 100644 lib/ntdll/string/memcmp.c delete mode 100644 lib/ntdll/string/memcpy.c delete mode 100644 lib/ntdll/string/memmove.c delete mode 100644 lib/ntdll/string/memset.c delete mode 100644 lib/ntdll/string/strcat.c delete mode 100644 lib/ntdll/string/strchr.c delete mode 100644 lib/ntdll/string/strcmp.c delete mode 100644 lib/ntdll/string/strcpy.c delete mode 100644 lib/ntdll/string/strcspn.c delete mode 100644 lib/ntdll/string/strlen.c delete mode 100644 lib/ntdll/string/strncat.c delete mode 100644 lib/ntdll/string/strncmp.c delete mode 100644 lib/ntdll/string/strncpy.c delete mode 100644 lib/ntdll/string/strnlen.c delete mode 100644 lib/ntdll/string/strrchr.c delete mode 100644 lib/ntdll/string/strspn.c create mode 100644 lib/psapi/.cvsignore create mode 100644 lib/psapi/misc/.cvsignore create mode 100644 lib/richedit/.cvsignore create mode 100644 lib/richedit/Makefile create mode 100644 lib/richedit/ansi_gen.h create mode 100644 lib/richedit/ansi_sym.h create mode 100644 lib/richedit/charlist.c create mode 100644 lib/richedit/charlist.h create mode 100644 lib/richedit/reader.c create mode 100644 lib/richedit/riched32.def create mode 100644 lib/richedit/riched32.edf create mode 100644 lib/richedit/riched32.h create mode 100644 lib/richedit/riched32.rc create mode 100644 lib/richedit/richedit.c create mode 100644 lib/richedit/rtf.h create mode 100644 lib/richedit/rtf2text.h create mode 100644 lib/richedit/stdcharnames.h create mode 100644 lib/richedit/text-writer.c create mode 100644 lib/richedit/text_map.h create mode 100644 lib/rosrtl/makefile.i386 create mode 100644 lib/rosrtl/misc/.cvsignore create mode 100644 lib/rosrtl/misc/devmode.c create mode 100644 lib/rosrtl/misc/logfont.c rename {ntoskrnl/rtl => lib/rosrtl/misc}/qsort.c (100%) create mode 100644 lib/rosrtl/thread/.cvsignore delete mode 100644 lib/rosrtl/thread/context.c create mode 100644 lib/rosrtl/thread/i386/.cvsignore create mode 100644 lib/rosrtl/thread/i386/context.c create mode 100644 lib/rosrtl/thread/linearstack.c create mode 100644 lib/rosrtl/thread/stack.c create mode 100644 lib/rpcrt4/.cvsignore create mode 100644 lib/rpcrt4/Makefile.old create mode 100644 lib/rpcrt4/rpcrt4.def create mode 100644 lib/rpcrt4/rpcrt4.edf create mode 100644 lib/rpcrt4/rpcrt4.rc create mode 100644 lib/rpcrt4/rpcrt4_main.c create mode 100644 lib/rpcrt4/tests/.cvsignore create mode 100644 lib/rpcrt4/tests/makefile create mode 100644 lib/rpcrt4/tests/rpc.c create mode 100644 lib/rpcrt4/tests/testlist.c create mode 100644 lib/string/.cvsignore create mode 100644 lib/string/Makefile create mode 100644 lib/string/Makefile.i386 create mode 100644 lib/string/i386/.cvsignore create mode 100644 lib/string/i386/memchr.s create mode 100644 lib/string/i386/memcpy.s create mode 100644 lib/string/i386/memmove.s create mode 100644 lib/string/i386/memset.s create mode 100644 lib/string/i386/strcat.s create mode 100644 lib/string/i386/strchr.s create mode 100644 lib/string/i386/strcmp.s create mode 100644 lib/string/i386/strcpy.s create mode 100644 lib/string/i386/strlen.s create mode 100644 lib/string/i386/strncat.s create mode 100644 lib/string/i386/strncmp.s create mode 100644 lib/string/i386/strncpy.s create mode 100644 lib/string/i386/strnlen.s create mode 100644 lib/string/i386/strrchr.s create mode 100644 lib/string/i386/tchar.h create mode 100644 lib/string/i386/tcscat.h create mode 100644 lib/string/i386/tcschr.h create mode 100644 lib/string/i386/tcscmp.h create mode 100644 lib/string/i386/tcscpy.h create mode 100644 lib/string/i386/tcslen.h create mode 100644 lib/string/i386/tcsncat.h create mode 100644 lib/string/i386/tcsncmp.h create mode 100644 lib/string/i386/tcsncpy.h create mode 100644 lib/string/i386/tcsnlen.h create mode 100644 lib/string/i386/tcsrchr.h create mode 100644 lib/string/i386/wcscat.s create mode 100644 lib/string/i386/wcschr.s create mode 100644 lib/string/i386/wcscmp.s create mode 100644 lib/string/i386/wcscpy.s create mode 100644 lib/string/i386/wcslen.s create mode 100644 lib/string/i386/wcsncat.s create mode 100644 lib/string/i386/wcsncmp.s create mode 100644 lib/string/i386/wcsncpy.s create mode 100644 lib/string/i386/wcsnlen.s create mode 100644 lib/string/i386/wcsrchr.s create mode 100644 lib/string/memccpy.c create mode 100644 lib/string/memchr.c create mode 100644 lib/string/memcmp.c create mode 100644 lib/string/memcpy.c create mode 100644 lib/string/memmove.c create mode 100644 lib/string/memset.c create mode 100644 lib/string/strcat.c create mode 100644 lib/string/strchr.c create mode 100644 lib/string/strcmp.c create mode 100644 lib/string/strcpy.c create mode 100644 lib/string/strcspn.c create mode 100644 lib/string/strlen.c create mode 100644 lib/string/strncat.c create mode 100644 lib/string/strncmp.c create mode 100644 lib/string/strncpy.c create mode 100644 lib/string/strnlen.c create mode 100644 lib/string/strrchr.c create mode 100644 lib/string/strspn.c create mode 100644 lib/string/strxspn.h create mode 100644 lib/string/tcscat.h create mode 100644 lib/string/tcschr.h create mode 100644 lib/string/tcscmp.h create mode 100644 lib/string/tcscpy.h create mode 100644 lib/string/tcslen.h create mode 100644 lib/string/tcsncat.h create mode 100644 lib/string/tcsncmp.h create mode 100644 lib/string/tcsncpy.h create mode 100644 lib/string/tcsnlen.h create mode 100644 lib/string/tcsrchr.h create mode 100644 lib/string/wcscat.c create mode 100644 lib/string/wcschr.c create mode 100644 lib/string/wcscmp.c create mode 100644 lib/string/wcscpy.c create mode 100644 lib/string/wcslen.c create mode 100644 lib/string/wcsncat.c create mode 100644 lib/string/wcsncmp.c create mode 100644 lib/string/wcsncpy.c create mode 100644 lib/string/wcsnlen.c create mode 100644 lib/string/wcsrchr.c create mode 100644 lib/syssetup/.cvsignore create mode 100644 lib/syssetup/Makefile create mode 100644 lib/syssetup/dllmain.c create mode 100644 lib/syssetup/install.c create mode 100644 lib/syssetup/logfile.c create mode 100644 lib/syssetup/syssetup.def create mode 100644 lib/syssetup/syssetup.edf create mode 100644 lib/syssetup/syssetup.rc create mode 100644 lib/twain/.cvsignore create mode 100644 lib/twain/Makefile create mode 100644 lib/twain/Makefile.in create mode 100644 lib/twain/README create mode 100644 lib/twain/TWAIN create mode 100644 lib/twain/capability.c create mode 100644 lib/twain/ds_audio.c create mode 100644 lib/twain/ds_ctrl.c create mode 100644 lib/twain/ds_image.c create mode 100644 lib/twain/dsm_ctrl.c create mode 100644 lib/twain/twain.h create mode 100644 lib/twain/twain32_main.c create mode 100644 lib/twain/twain_32.def create mode 100644 lib/twain/twain_32.edf create mode 100644 lib/twain/twain_32.rc create mode 100644 lib/twain/twain_i.h create mode 100644 lib/user32/RosUser32/accessibility.c rename lib/{kernel32/nls/dnk.nls => user32/RosUser32/controls/button.c} (100%) create mode 100644 lib/user32/RosUser32/controls/listview.c create mode 100644 lib/user32/RosUser32/controls/menu.c create mode 100644 lib/user32/RosUser32/controls/static.c create mode 100644 lib/user32/RosUser32/dde.c create mode 100644 lib/user32/RosUser32/help.c create mode 100644 lib/user32/RosUser32/io.c create mode 100644 lib/user32/RosUser32/menu.c create mode 100644 lib/user32/RosUser32/message.c create mode 100644 lib/user32/RosUser32/region.c create mode 100644 lib/user32/RosUser32/string.c create mode 100644 lib/user32/RosUser32/thread.c create mode 100644 lib/user32/RosUser32/undocumented.c create mode 100644 lib/user32/RosUser32/user32.c create mode 100644 lib/user32/RosUser32/user32.h create mode 100644 lib/user32/RosUser32/window.c create mode 100644 lib/user32/controls/button.c create mode 100644 lib/user32/controls/combo.c delete mode 100644 lib/user32/controls/combobox.c create mode 100644 lib/user32/controls/controls.h create mode 100644 lib/user32/controls/edit.c create mode 100644 lib/user32/controls/icontitle.c create mode 100644 lib/user32/controls/regcontrol.c create mode 100644 lib/user32/controls/static.c create mode 100644 lib/user32/include/cursor.h create mode 100644 lib/user32/include/draw.h create mode 100644 lib/user32/include/menu.h create mode 100644 lib/user32/include/resource.h create mode 100644 lib/user32/include/strpool.h create mode 100644 lib/user32/include/winpos.h create mode 100644 lib/user32/misc/strpool.c create mode 100644 lib/user32/resources/df_hatch.bmp create mode 100644 lib/user32/resources/ocr_cdautostart.cur create mode 100644 lib/user32/resources/ocr_pen.cur create mode 100644 lib/user32/resources/oic_reactos.ico create mode 100644 lib/user32/windows/caret.c delete mode 100644 lib/user32/windows/nonclient.c create mode 100644 lib/user32/windows/winpos.c create mode 100644 lib/winmm/driver.c create mode 100644 lib/winmm/internal.h create mode 100644 lib/winmm/lolvldrv.c create mode 100644 lib/winmm/midiout.c create mode 100644 lib/winmm/midistream.c create mode 100644 lib/winmm/mmsystem16.h create mode 100644 lib/winmm/stubs.c create mode 100644 lib/winmm/time.c create mode 100644 lib/winmm/winemm.h create mode 100644 lib/winmm/winmm.c create mode 100644 lib/winmm/winmm.h create mode 100755 lib/zlib/Makefile.host create mode 100644 media/fonts/README.TXT create mode 100644 media/fonts/VERA-COPYRIGHT.TXT create mode 100644 media/fonts/VERA-README.TXT create mode 100644 media/fonts/VERA-RELEASENOTES.TXT create mode 100644 media/fonts/Vera.ttf create mode 100644 media/fonts/VeraBI.ttf create mode 100644 media/fonts/VeraBd.ttf create mode 100644 media/fonts/VeraIt.ttf create mode 100644 media/fonts/VeraMoBI.ttf create mode 100644 media/fonts/VeraMoBd.ttf create mode 100644 media/fonts/VeraMoIt.ttf create mode 100644 media/fonts/VeraMono.ttf create mode 100644 media/fonts/VeraSe.ttf create mode 100644 media/fonts/VeraSeBd.ttf create mode 100755 ntoskrnl/inbv/.cvsignore create mode 100755 ntoskrnl/inbv/i386/.cvsignore create mode 100755 ntoskrnl/inbv/inbv.c delete mode 100644 ntoskrnl/include/internal/hal/bus.h delete mode 100644 ntoskrnl/include/internal/hal/hal.h delete mode 100644 ntoskrnl/include/internal/hal/mps.h create mode 100644 ntoskrnl/include/internal/kbd.h create mode 100644 ntoskrnl/include/internal/nls.h create mode 100755 ntoskrnl/io/rawfs.c delete mode 100644 ntoskrnl/nls/.cvsignore delete mode 100644 ntoskrnl/nls/nls.c create mode 100644 ntoskrnl/rtl/i386/alldiv.s create mode 100644 ntoskrnl/rtl/i386/allmul.s create mode 100644 ntoskrnl/rtl/i386/allrem.s create mode 100644 ntoskrnl/rtl/i386/allshl.s create mode 100644 ntoskrnl/rtl/i386/allshr.s create mode 100644 ntoskrnl/rtl/i386/aulldiv.s create mode 100644 ntoskrnl/rtl/i386/aullrem.s create mode 100644 ntoskrnl/rtl/i386/aullshr.s delete mode 100644 ntoskrnl/rtl/i386/memcpy.c delete mode 100644 ntoskrnl/rtl/i386/memset.c delete mode 100644 ntoskrnl/rtl/math.c delete mode 100644 ntoskrnl/rtl/memchr.c delete mode 100644 ntoskrnl/rtl/memcmp.c delete mode 100644 ntoskrnl/rtl/memcpy.c delete mode 100644 ntoskrnl/rtl/memmove.c delete mode 100644 ntoskrnl/rtl/memset.c create mode 100644 ntoskrnl/rtl/random.c create mode 100644 ntoskrnl/se/audit.c create mode 100755 regtests/Makefile create mode 100755 regtests/kmregtests/.cvsignore create mode 100755 regtests/kmregtests/Makefile create mode 100755 regtests/kmregtests/driver.c create mode 100755 regtests/kmregtests/kmregtests.h create mode 100755 regtests/kmrtint/.cvsignore create mode 100755 regtests/kmrtint/Makefile create mode 100755 regtests/kmrtint/kmrtint.c create mode 100755 regtests/kmrtint/kmrtint.def create mode 100755 regtests/kmrtint/kmrtint.edf create mode 100755 regtests/regtests/.cvsignore create mode 100755 regtests/regtests/Makefile create mode 100755 regtests/regtests/regtests.c create mode 100755 regtests/shared/.cvsignore create mode 100755 regtests/shared/Makefile create mode 100755 regtests/shared/regtests.c create mode 100755 regtests/shared/regtests.h create mode 100755 regtests/win32base/.cvsignore create mode 100755 regtests/win32base/Makefile create mode 100755 regtests/win32base/driver.c create mode 100755 regtests/win32base/file-1.c create mode 100755 regtests/win32base/win32base.def create mode 100755 regtests/win32base/win32base.edf delete mode 100644 rosbin.txt create mode 100644 subsys/system/expand/.cvsignore create mode 100644 subsys/system/expand/expand.c create mode 100644 subsys/system/expand/makefile create mode 100644 subsys/system/explorer/.cvsignore create mode 100644 subsys/system/explorer/Seashell/.cvsignore create mode 100644 subsys/system/explorer/Seashell/FilterDlg.cpp create mode 100644 subsys/system/explorer/Seashell/FilterDlg.h create mode 100644 subsys/system/explorer/Seashell/LeftView.cpp create mode 100644 subsys/system/explorer/Seashell/LeftView.h create mode 100644 subsys/system/explorer/Seashell/MFCExplorerDlg.cpp create mode 100644 subsys/system/explorer/Seashell/MFCExplorerDlg.h create mode 100644 subsys/system/explorer/Seashell/MainFrm.cpp create mode 100644 subsys/system/explorer/Seashell/MainFrm.h create mode 100644 subsys/system/explorer/Seashell/Resource.h create mode 100644 subsys/system/explorer/Seashell/SeaShell.cpp create mode 100644 subsys/system/explorer/Seashell/SeaShell.dsp create mode 100644 subsys/system/explorer/Seashell/SeaShell.dsw create mode 100644 subsys/system/explorer/Seashell/SeaShell.h create mode 100644 subsys/system/explorer/Seashell/SeaShell.rc create mode 100644 subsys/system/explorer/Seashell/SeaShellDoc.cpp create mode 100644 subsys/system/explorer/Seashell/SeaShellDoc.h create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/.cvsignore create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/HtmlCtrl.cpp create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/IEFolderTreeCtrl.cpp create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/IEShellComboBox.cpp create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/IEShellDragDrop.cpp create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/IEShellListCtrl.cpp create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/IEShellListView.cpp create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/IEShellTreeCtrl.cpp create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/IEShellTreeView.cpp create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/InPlaceEdit.cpp create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/Include/Dirwalk.h create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/Include/HtmlCtrl.h create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/Include/IEFolderTreeCtrl.h create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/Include/IEShellComboBox.h create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/Include/IEShellDragDrop.h create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/Include/IEShellListCtrl.h create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/Include/IEShellListView.h create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/Include/IEShellTreeCtrl.h create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/Include/IEShellTreeView.h create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/Include/InPlaceEdit.h create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/Include/LocaleInfo.h create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/Include/PIDL.h create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/Include/Refresh.h create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/Include/SeaShellExt.h create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/Include/ShellContextMenu.h create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/Include/ShellDetails.h create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/Include/ShellPidl.h create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/Include/ShellSettings.h create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/Include/TextParse.h create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/Include/TextProgressCtrl.h create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/Include/UIApp.h create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/Include/UICONT.H create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/Include/UICoolBar.h create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/Include/UICoolMenu.h create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/Include/UIDATA.H create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/Include/UIDragDropTree.h create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/Include/UIExplorerFrameWnd.h create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/Include/UIFixTB.h create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/Include/UIFlatBar.h create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/Include/UIFolderRefresh.h create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/Include/UIFrameWnd.h create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/Include/UIHtmlView.h create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/Include/UIImageDropTarget.h create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/Include/UIListView.h create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/Include/UIMenuBar.h create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/Include/UIMessages.h create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/Include/UIModulVer.h create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/Include/UIStatusBar.h create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/Include/UISubclass.h create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/Include/UITabSplitterWnd.h create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/Include/UITreeCtrl.h create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/Include/UITreeView.h create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/Include/UIres.h create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/Include/Uictrl.h create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/Include/W2KFix.h create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/Include/WindowPlacement.h create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/Include/cbformats.h create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/Include/uidragdropctrl.h create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/Include/uidragimage.h create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/Include/uidroptarget.h create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/LocaleInfo.cpp create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/PIDL.cpp create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/ShellContextMenu.cpp create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/ShellDetails.cpp create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/ShellPidl.cpp create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/ShellSettings.cpp create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/TextParse.cpp create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/TextProgressCtrl.cpp create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/UIApp.cpp create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/UICONT.CPP create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/UICoolBar.cpp create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/UICoolMenu.cpp create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/UIDATA.CPP create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/UIDragDropTree.cpp create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/UIExplorerFrameWnd.cpp create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/UIFixTB.cpp create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/UIFlatBar.cpp create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/UIFrameWnd.cpp create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/UIHtmlView.cpp create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/UIImageDropTarget.cpp create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/UIListView.cpp create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/UIMenuBar.cpp create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/UIModulVer.cpp create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/UIStatusBar.cpp create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/UISubclass.cpp create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/UITabSplitterWnd.cpp create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/UITreeCtrl.cpp create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/UITreeView.cpp create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/Uictrl.cpp create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/WindowPlacement.cpp create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/cbformats.cpp create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/uidragdropctrl.cpp create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/uidragimage.cpp create mode 100644 subsys/system/explorer/Seashell/SeaShellExt/uidroptarget.cpp create mode 100644 subsys/system/explorer/Seashell/SeaShellView.cpp create mode 100644 subsys/system/explorer/Seashell/SeaShellView.h create mode 100644 subsys/system/explorer/Seashell/ShellTreeDlg.cpp create mode 100644 subsys/system/explorer/Seashell/ShellTreeDlg.h create mode 100644 subsys/system/explorer/Seashell/StdAfx.cpp create mode 100644 subsys/system/explorer/Seashell/StdAfx.h create mode 100644 subsys/system/explorer/Seashell/res/SeaShell.ico create mode 100644 subsys/system/explorer/Seashell/res/SeaShell.rc2 create mode 100644 subsys/system/explorer/Seashell/res/SeaShellDoc.ico create mode 100644 subsys/system/explorer/Seashell/res/Toolbar.bmp create mode 100644 subsys/system/explorer/Seashell/res/coldtool.bmp create mode 100644 subsys/system/explorer/Seashell/res/hottoolb.bmp create mode 100644 subsys/system/explorer/bak/shellhook.cpp create mode 100644 subsys/system/explorer/bak/shellhook.dsp create mode 100644 subsys/system/explorer/bak/shellhook.h create mode 100644 subsys/system/explorer/buildno.h create mode 100644 subsys/system/explorer/desktop/desktop.cpp create mode 100644 subsys/system/explorer/desktop/desktop.h create mode 100644 subsys/system/explorer/doc/TODO.txt create mode 100644 subsys/system/explorer/doc/changes.txt create mode 100644 subsys/system/explorer/doc/readme.txt create mode 100644 subsys/system/explorer/explorer.cpp create mode 100644 subsys/system/explorer/explorer.dsp create mode 100644 subsys/system/explorer/explorer.dsw create mode 100644 subsys/system/explorer/explorer.h create mode 100644 subsys/system/explorer/explorer.rc create mode 100644 subsys/system/explorer/explorer_intres.h create mode 100644 subsys/system/explorer/explorer_intres.rc create mode 100644 subsys/system/explorer/externals.h create mode 100644 subsys/system/explorer/globals.h create mode 100644 subsys/system/explorer/make_explorer.dsp create mode 100644 subsys/system/explorer/makefile create mode 100644 subsys/system/explorer/res/arrow.ico create mode 100644 subsys/system/explorer/res/arrowsel.ico create mode 100644 subsys/system/explorer/res/drivebar.bmp create mode 100644 subsys/system/explorer/res/explorer.ico create mode 100644 subsys/system/explorer/res/images.bmp create mode 100644 subsys/system/explorer/res/logoff.ico create mode 100644 subsys/system/explorer/res/logov.bmp create mode 100644 subsys/system/explorer/res/reactos.ico create mode 100644 subsys/system/explorer/res/startmenu.ico create mode 100644 subsys/system/explorer/res/toolbar.bmp create mode 100644 subsys/system/explorer/res/winefile.ico create mode 100644 subsys/system/explorer/shell/entries.cpp create mode 100644 subsys/system/explorer/shell/entries.h create mode 100644 subsys/system/explorer/shell/filechild.cpp create mode 100644 subsys/system/explorer/shell/filechild.h create mode 100644 subsys/system/explorer/shell/mainframe.cpp create mode 100644 subsys/system/explorer/shell/mainframe.h create mode 100644 subsys/system/explorer/shell/pane.cpp create mode 100644 subsys/system/explorer/shell/pane.h create mode 100644 subsys/system/explorer/shell/shellbrowser.cpp create mode 100644 subsys/system/explorer/shell/shellbrowser.h create mode 100644 subsys/system/explorer/shell/shellfs.cpp create mode 100644 subsys/system/explorer/shell/shellfs.h create mode 100644 subsys/system/explorer/shell/startup.c create mode 100644 subsys/system/explorer/shell/unixfs.cpp create mode 100644 subsys/system/explorer/shell/unixfs.h create mode 100644 subsys/system/explorer/shell/winfs.cpp create mode 100644 subsys/system/explorer/shell/winfs.h create mode 100644 subsys/system/explorer/taskbar/desktopbar.cpp create mode 100644 subsys/system/explorer/taskbar/desktopbar.h create mode 100644 subsys/system/explorer/taskbar/quicklaunch.cpp create mode 100644 subsys/system/explorer/taskbar/quicklaunch.h create mode 100644 subsys/system/explorer/taskbar/startmenu.cpp create mode 100644 subsys/system/explorer/taskbar/startmenu.h create mode 100644 subsys/system/explorer/taskbar/taskbar.cpp create mode 100644 subsys/system/explorer/taskbar/taskbar.h create mode 100644 subsys/system/explorer/taskbar/traynotify.cpp create mode 100644 subsys/system/explorer/taskbar/traynotify.h create mode 100644 subsys/system/explorer/utility/.cvsignore create mode 100644 subsys/system/explorer/utility/dragdropimpl.cpp create mode 100644 subsys/system/explorer/utility/dragdropimpl.h create mode 100644 subsys/system/explorer/utility/shellbrowserimpl.h create mode 100644 subsys/system/explorer/utility/shellclasses.cpp create mode 100644 subsys/system/explorer/utility/shellclasses.dsp create mode 100644 subsys/system/explorer/utility/shellclasses.dsw create mode 100644 subsys/system/explorer/utility/shellclasses.h create mode 100644 subsys/system/explorer/utility/shelltests.cpp create mode 100644 subsys/system/explorer/utility/splitpath.c create mode 100644 subsys/system/explorer/utility/treedroptarget.h create mode 100644 subsys/system/explorer/utility/utility.cpp create mode 100644 subsys/system/explorer/utility/utility.h create mode 100644 subsys/system/explorer/utility/window.cpp create mode 100644 subsys/system/explorer/utility/window.h create mode 100644 subsys/system/explorer/winefile/de.rc create mode 100644 subsys/system/explorer/winefile/desktop.c create mode 100644 subsys/system/explorer/winefile/en.rc create mode 100644 subsys/system/explorer/winefile/explorer.lst create mode 100644 subsys/system/explorer/winefile/explorer.rc create mode 100644 subsys/system/explorer/winefile/externals.h create mode 100644 subsys/system/explorer/winefile/license.c create mode 100644 subsys/system/explorer/winefile/license.h create mode 100644 subsys/system/explorer/winefile/make_winefile.dsp create mode 100644 subsys/system/explorer/winefile/makefile create mode 100644 subsys/system/explorer/winefile/plugins/ex_bar.c create mode 100644 subsys/system/explorer/winefile/plugins/ex_bar.h create mode 100644 subsys/system/explorer/winefile/plugins/ex_clock.c create mode 100644 subsys/system/explorer/winefile/plugins/ex_menu.c create mode 100644 subsys/system/explorer/winefile/plugins/ex_shutdwn.c create mode 100644 subsys/system/explorer/winefile/resource.h create mode 100644 subsys/system/explorer/winefile/resource.rc create mode 100644 subsys/system/explorer/winefile/wine_explore.dsp create mode 100644 subsys/system/explorer/winefile/wine_explore.dsw create mode 100644 subsys/system/explorer/winefile/winefile.c create mode 100644 subsys/system/explorer/winefile/winefile.dsp create mode 100644 subsys/system/explorer/winefile/winefile.dsw create mode 100644 subsys/system/explorer/winefile/winefile.h create mode 100644 subsys/system/explorer/winefile/winefile.rc create mode 100644 subsys/system/format/.cvsignore create mode 100644 subsys/system/lsass/.cvsignore create mode 100644 subsys/system/regedit/.cvsignore create mode 100644 subsys/system/regedit/En.rc create mode 100644 subsys/system/regedit/Pt.rc create mode 100644 subsys/system/regedit/about.c create mode 100644 subsys/system/regedit/childwnd.c create mode 100644 subsys/system/regedit/framewnd.c create mode 100644 subsys/system/regedit/listview.c create mode 100644 subsys/system/regedit/main.c create mode 100644 subsys/system/regedit/main.h create mode 100644 subsys/system/regedit/makefile create mode 100644 subsys/system/regedit/regedit.c create mode 100644 subsys/system/regedit/regedit.rc create mode 100644 subsys/system/regedit/regproc.c create mode 100644 subsys/system/regedit/regproc.h create mode 100644 subsys/system/regedit/res/folder1.bmp create mode 100644 subsys/system/regedit/res/folder2.bmp create mode 100644 subsys/system/regedit/res/folder3.bmp create mode 100644 subsys/system/regedit/resource.h create mode 100644 subsys/system/regedit/resource.rc create mode 100644 subsys/system/regedit/rsrc.rc create mode 100644 subsys/system/regedit/treeview.c create mode 100644 subsys/system/setup/.cvsignore create mode 100644 subsys/system/setup/makefile create mode 100644 subsys/system/setup/setup.c create mode 100644 subsys/system/setup/setup.rc create mode 100755 subsys/system/usetup/cabinet.c create mode 100755 subsys/system/usetup/cabinet.h create mode 100644 subsys/system/usetup/fslist.c create mode 100644 subsys/system/usetup/fslist.h create mode 100755 subsys/system/welcome/.cvsignore create mode 100755 subsys/system/welcome/Makefile create mode 100755 subsys/system/welcome/res/background-right.bmp create mode 100755 subsys/system/welcome/res/background-top.bmp create mode 100755 subsys/system/welcome/res/default.bmp create mode 100755 subsys/system/welcome/res/icon.ico create mode 100755 subsys/system/welcome/res/title.bmp create mode 100755 subsys/system/welcome/res/topic0.bmp create mode 100755 subsys/system/welcome/res/topic1.bmp create mode 100755 subsys/system/welcome/res/topic2.bmp create mode 100755 subsys/system/welcome/resource.h create mode 100755 subsys/system/welcome/welcome.c create mode 100755 subsys/system/welcome/welcome.rc create mode 100644 subsys/win32k/eng/nls.c create mode 100644 subsys/win32k/eng/perfcnt.c create mode 100644 subsys/win32k/eng/sort.c create mode 100644 subsys/win32k/include/cleanup.h create mode 100644 subsys/win32k/include/color.h create mode 100644 subsys/win32k/include/menu.h create mode 100644 subsys/win32k/include/path.h create mode 100644 subsys/win32k/include/prop.h create mode 100644 subsys/win32k/include/scroll.h create mode 100644 subsys/win32k/include/text.h create mode 100644 subsys/win32k/include/timer.h create mode 100644 subsys/win32k/include/vis.h create mode 100644 subsys/win32k/ntuser/menu.c create mode 100644 subsys/win32k/ntuser/misc.c create mode 100644 subsys/win32k/ntuser/vis.c create mode 100644 subsys/win32k/ntuser/winlock.c create mode 100644 subsys/win32k/objects/cursoricon.c create mode 100644 subsys/win32k/objects/semaphor.c create mode 100644 subsys/win32k/stubs/xpstubs.c delete mode 100644 system.hiv create mode 100755 tools/cabman/.cvsignore create mode 100755 tools/cabman/cabinet.cxx create mode 100755 tools/cabman/cabinet.h create mode 100755 tools/cabman/cabman.h create mode 100755 tools/cabman/dff.txt create mode 100755 tools/cabman/dfp.cxx create mode 100755 tools/cabman/dfp.h create mode 100755 tools/cabman/main.cxx create mode 100755 tools/cabman/makefile create mode 100755 tools/cabman/makefile.win32 create mode 100755 tools/cabman/mszip.cxx create mode 100755 tools/cabman/mszip.h create mode 100755 tools/cabman/raw.cxx create mode 100755 tools/cabman/raw.h create mode 100755 tools/regtests.c create mode 100755 tools/rgenstat/.cvsignore create mode 100755 tools/rgenstat/Makefile create mode 100755 tools/rgenstat/llmosrt.c create mode 100755 tools/rgenstat/rgenstat.c create mode 100755 tools/rgenstat/web/.cvsignore create mode 100755 tools/rgenstat/web/c.gif create mode 100755 tools/rgenstat/web/f.gif create mode 100755 tools/rgenstat/web/i.gif create mode 100755 tools/rgenstat/web/rapistatus.css create mode 100755 tools/rgenstat/web/rapistatus.js create mode 100755 tools/rgenstat/web/rapistatus.xsl create mode 100755 tools/rgenstat/web/sc.gif create mode 100755 tools/rgenstat/web/tb.gif create mode 100755 tools/rgenstat/web/tm.gif create mode 100755 tools/rgenstat/web/tp.gif create mode 100755 tools/rgenstat/web/u.gif diff --git a/CREDITS b/CREDITS index 9184dbb..9e40277 100644 --- a/CREDITS +++ b/CREDITS @@ -19,6 +19,7 @@ Source and inspiration from WINE (http://www.winehq.com) WinFree (http://www.stack.nl/~onno/win32/) Linux (http://www.kernel.org) +XFree86 (http://www.xfree86.org/) References (Rex's at least) diff --git a/ChangeLog b/ChangeLog index e337dd6..0b82924 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,1120 @@ +2003-08-30 Filip Navara + + * tools/cabman/cabinet.cxx (CCabinet::ConvertPath): NULL-terminate + newpath. + +2003-08-30 Casper S. Hornstrup + + * tools/rmkdir.c: Fix for absolute paths. + +2003-08-30 Casper S. Hornstrup + + * tools/rmkdir.c: Create all (sub)directories in path on win32. + +2003-08-30 Casper S. Hornstrup + + * bootdata/packages/reactos.dff: Don't include winmm.dll in reactos.cab. + +2003-08-29 Casper S. Hornstrup + + * Makefile: Copy freeloader files to bootable CD. + +2003-08-28 Martin Fuchs + + * subsys/system/explorer/taskbar/startmenu.cpp, + subsys/system/explorer/shell/shellbrowser.cpp: + Implemented control panel window in cabinet view mode. + +2003-08-24 Casper S. Hornstrup + + * Makefile: Support creating compressed bootable CDs. + * rules.mak (HOST_CXX, HOST_AR, CABMAN): Define. + * bootdata/txtsetup.sif: Add Cabinets section. + Remove files that are put in reactos.cab. + * subsys/system/usetup/filequeue.c (SetupCloseFileQueue): Release + memory allocated for SourceCabinet. + (SetupQueueCopy): Support copying files in cabinets. + (SetupCommitFileQueue): Support copying files in cabinets. + * subsys/system/usetup/filequeue.h (SetupQueueCopy): Add SourceCabinet + parameter. + * subsys/system/usetup/filesup.c (SetupExtractFile): New function. + * subsys/system/usetup/filesup.h (SetupExtractFile): Prototype. + * subsys/system/usetup/infcache.c (InfOpenBufferedFile): New function. + * subsys/system/usetup/infcache.h (InfOpenBufferedFile): Prototype. + * subsys/system/usetup/makefile (TARGET_SDKLIBS): Add zlib.a. + (TARGET_CFLAGS): Add zlib to include path. + (TARGET_OBJECTS): Add cabinet.o. + * subsys/system/usetup/usetup.c (PrepareCopyPageInfFile): New function. + (PrepareCopyPage): Process Cabinets section. + * tools/helper.mk: Support C++ applications. + * rosbin.txt: Remove. + * bootdata/packages: New directory. + * bootdata/packages/reactos.dff: New file. + * lib/zlib/Makefile.host: New file. + * subsys/system/usetup/cabinet.c: Ditto. + * subsys/system/usetup/cabinet.h: Ditto. + * tools/cabman: New directory. + * tools/cabman/.cvsignore: New file. + * tools/cabman/cabinet.cxx: Ditto. + * tools/cabman/cabinet.h: Ditto. + * tools/cabman/cabman.h: Ditto. + * tools/cabman/dff.txt: Ditto. + * tools/cabman/dfp.cxx: Ditto. + * tools/cabman/dfp.h: Ditto. + * tools/cabman/main.cxx: Ditto. + * tools/cabman/makefile: Ditto. + * tools/cabman/makefile.win32: Ditto. + * tools/cabman/mszip.cxx: Ditto. + * tools/cabman/mszip.h: Ditto. + * tools/cabman/raw.cxx: Ditto. + * tools/cabman/raw.h: Ditto. + +2003-08-24 Casper S. Hornstrup + + * include/structs.h: Apply packed attribute to the typedef, not the + type's name. + * include/ntos/keyboard.h: Ditto. + * include/ntos/tss.h: Ditto. + * include/win32k/cursoricon.h: Ditto. + * include/win32k/math.h: Include the compiler's math.h for builtins. + * ntoskrnl/nt/vdm.c (NtEarlyInitVdm): Avoid warning when compiling using + GCC 3.4. + +2003-08-23 Casper S. Hornstrup + + * apps/tests/tcpsvr/tcpsvr.c (main): Fix multiline string constant. + +2003-08-23 Casper S. Hornstrup + + * apps/utils/stats/stats.c (ReadLine): Handle unix end-of-line characters. + +2003-08-23 Casper S. Hornstrup + + * apps/tests/Makefile (TEST_APPS): Remove patblt and stretchblt + as they break full make. + +2003-08-22 Martin Fuchs + + * subsys/system/explorer/taskbar/traynotify.cpp: + Added tray notification area. + Implemented quick launch bar. + +2003-08-22 Martin Fuchs + + * include/wine/commctrl.h: + Removed commctrl.h header file to use the one of W32API headers. + +2003-08-19 Casper S. Hornstrup + + * subsys/win32k/ntuser/menu.c (IntSetMenuDefaultItem, + IntGetMenuDefaultItem): Fix unsigned/signed warnings. + +2003-08-19 Martin Fuchs + + * subsys/system/explorer/taskbar/startmenu.cpp: + Implemented navigation in submenus of the start menu. + Start menus can now resolve shortcuts and launch programs. + +2003-08-18 Martin Fuchs + + * subsys/system/explorer/taskbar/taskbar.cpp: + First draft of explorer start menu. + +2003-08-17 James Tabor + + * include/csrss/: csrss.h: implemented Ctrl Event handler + * subsys/csrss/api/: conio.c: + * subsys/csrss/: api.h: + * lib/kernel32/misc/: console.c: + +2003-08-16 Martin Fuchs + + * subsys/system/explorer/taskbar/taskbar.cpp: + first draft of working task bar + +2003-08-13 Casper S. Hornstrup + + * include/win32k/ntuser.h (NtUserGetClassName): Make nMaxCount an ULONG. + * subsys/win32k/dib/dib16bpp.c: Fix unsigned/signed warnings. + * subsys/win32k/dib/dib1bpp.c: Ditto. + * subsys/win32k/dib/dib32bpp.c: Ditto. + * subsys/win32k/dib/dib4bpp.c: Ditto. + * subsys/win32k/dib/dib8bpp.c: Ditto. + * subsys/win32k/eng/lineto.c: Ditto. + * subsys/win32k/eng/mouse.c: Ditto. + * subsys/win32k/eng/xlate.c: Ditto. + * subsys/win32k/misc/driver.c: Ditto. + * subsys/win32k/ntuser/class.c: Ditto. + * subsys/win32k/ntuser/keyboard.c: Ditto. + * subsys/win32k/ntuser/timer.c: Ditto. + * subsys/win32k/ntuser/window.c: Ditto. + * subsys/win32k/objects/bitmaps.c: Ditto. + * subsys/win32k/objects/color.c: Ditto. + * subsys/win32k/objects/coord.c: Ditto. + * subsys/win32k/objects/dib.c: Ditto. + * subsys/win32k/objects/path.c: Ditto. + * subsys/win32k/objects/region.c: Ditto. + * subsys/win32k/objects/text.c: Ditto. + +2003-08-13 Martin Fuchs + + * subsys/system/explorer/taskbar/ex_bar.c, ex_menu.c: + Make explorer bar look more like windows taskbar bar + +2003-08-09 Martin Fuchs + + * subsys/system/explorer/*.c: Subclassing of shell window for drawing + desktop background. Open child folders by double click in + ShellBrowserChild + +2003-08-11 Casper S. Hornstrup + + * bootdata/txtsetup.sif (SetupData): Add /NOBOOTSCREEN to OsLoadOptions. + * hal/halx86/display.c (CHAR_ATTRIBUTE_BLACK): Define. + (HalClearDisplay): Add CharAttribute parameter. + (HalInitializeDisplay, HalReleaseDisplayOwnership): Blue screen. + * hal/halx86/halinit.c (DriverEntry): Blue screen for boot phase 2. + * include/reactos/resource.h (IDB_BOOTIMAGE): Define. + * ntoskrnl/Makefile: Add boot video objects. + * ntoskrnl/Makefile.i386: Ditto. + * ntoskrnl/ntoskrnl.def: Add boot video exports. + * ntoskrnl/ntoskrnl.edf: Ditto. + * ntoskrnl/ntoskrnl.rc (IDB_BOOTIMAGE): Define. + * ntoskrnl/include/internal/kd.h (KdInit3): Add. + * ntoskrnl/kd/kdebug.c (KdInitSystem): Print information in KdInit3. + * ntoskrnl/ke/bug.c (KeBugCheckWithTf, KeBugCheckEx): Switch to + text-mode on crash if needed. + * ntoskrnl/ke/main.c (ExpInitializeExecutive): Display bootscreen image + during boot. + * ntoskrnl/ke/i386/v86m_sup.S (_KiV86Complete): Restore previous mode and + old exception handler list. + * subsys/csrss/init.c: Change PrintString to DPRINT1. + * subsys/smss/init.c: Change PrintString to DPRINT1. + (SignalInitEvent): New. + (InitSessionManager): Call SignalInitEvent to switch to text-mode if + needed. + * subsys/smss/smss.c: Change PrintString to DPRINT1. + * ntoskrnl/inbv: New directory. + * ntoskrnl/inbv/i386: Ditto. + * ntoskrnl/res: Ditto. + * include/ntos/bootvid.h: New file. + * ntoskrnl/inbv/.cvsignore: Ditto. + * ntoskrnl/inbv/bootvid.c: Ditto. + * ntoskrnl/inbv/inbv.c: Ditto. + * ntoskrnl/inbv/i386/.cvsignore: Ditto. + * ntoskrnl/inbv/i386/pixelsup.S: Ditto. + * ntoskrnl/res/bootimage.bmp: Ditto. + +2003-08-09 Martin Fuchs + + * win32k/ntuser/window.c implemented NtUserSetShellWindowEx() and + introduced NtUserGetShellWindow(). + * iface/addsys/w32ksvc.db added new syscall for NtUserGetShellWindow(). + * lib/user32/misc/desktop.c: moved SetShellWindowEx() implementation + in kernal space, see NtUserSetShellWindowEx(). + +2003-08-09 Martin Fuchs + + * subsys/system/explorer implemented explorer and desktop window + using shell view. + +2003-08-09 Casper S. Hornstrup + + * lib/user32/windows/dialog.c (GetDlgItemInt): Fix unsigned/signed + warning. + * lib/user32/windows/menu.c (IsMenu): Ditto. + * lib/user32/windows/messagebox.c (MSGBOX_OnInit): Ditto. + * ntoskrnl/mm/ppool.c: Ditto. + +2003-08-09 Martin Fuchs + + * include/func.h: added GetShellWindow() + * lib/user32/misc/desktop.c: implemented GetShellWindow(), + SetShellWindow() and SetShellWindowEx(). + * lib/user32/user32.def: Ditto. + * lib/user32/user32.edf: Ditto. + +2003-07-29 James Tabor + + Patch by Art Yerkes + * apps/utils/consw/: consw.c makefile runprg.bat Adding Keyboard + Testing Code + + In order to use this patch you need a keyboard dll named kbdus.dll. + The dll is loaded at runtime, when TranslateMessage is called the + first time. Since these dlls are really simple (the kbd_us example + is in the DDK), it should be easy to make an LGPL one that gets + shipped with ReactOS. The one I am testing with so far is the one + from win2k. (arty) + + I've tested this patch it works okay w/o kbdus.dll installed. (jt) + + * apps/utils/Makefile: Main part of patch. + * ntoskrnl/include/internal/: kbd.h Ditto. + * subsys/csrss/api/conio.c: Ditto. + * subsys/csrss/api/wapi.c: Ditto. + * subsys/win32k/ldr/loader.c: Ditto. + * subsys/win32k/ntuser/input.c: Ditto. + * subsys/win32k/ntuser/keyboard.c: Ditto. + +2003-07-24 Casper S. Hornstrup + + * drivers/fs/vfat/*.c: Remove protection of NDEBUG. + +2003-07-24 Casper S. Hornstrup + + Move welcome from rosapps to here and beautify it a bit. + + * Makefile: Copy bootdata/autorun.inf, and bootdata/icon.ico to CD. + (SYS_APPS) Add welcome. + * include/defines.h (BS_FLAT): Define. + * bootdata/autorun.inf: New file. + * bootdata/icon.ico: Ditto. + * subsys/system/welcome: New directory. + * subsys/system/welcome/.cvsignore: New file. + * subsys/system/welcome/Makefile: Ditto. + * subsys/system/welcome/resource.h: Ditto. + * subsys/system/welcome/welcome.c: Ditto. + * subsys/system/welcome/welcome.rc: Ditto. + * subsys/system/welcome/res/: New directory. + * subsys/system/welcome/res/background-right.bmp: New file. + * subsys/system/welcome/res/background-top.bmp: Ditto. + * subsys/system/welcome/res/default.bmp: Ditto. + * subsys/system/welcome/res/icon.ico: Ditto. + * subsys/system/welcome/res/topic0.bmp: Ditto. + * subsys/system/welcome/res/topic1.bmp: Ditto. + * subsys/system/welcome/res/topic2.bmp: Ditto. + +2003-07-23 James Tabor + + lib/user32/misc/: stubs.c Removed stub for ClientToScreen. + lib/user32/windows/: window.c Implemented ClientToScreen & + IsIconic. + +2003-07-20 James Tabor + + * include/win32k/ntuser.h Implemented GetKeyState, GetKeyboardState & + SetKeyboardState. + * subsys/win32k/ntuser/stubs.c + * subsys/win32k/ntuser/keyboard.c + * lib/user32/windows/input.c + +2003-07-20 James Tabor + + * lib/gdi32/misc/stubs.c Implemented Unpluged DC code. + * lib/gdi32/objects/dc.c ditto + * lib/gdi32/objects/line.c ditto + * lib/gdi32/objects/text.c ditto + * lib/gdi32/objects/region.c ditto + * lib/user32/windows/draw.c Implemented FrameRect, InvertRect and + DrawFocusRect. + +2003-07-18 Royce Mitchell III + + * drivers/fs/vfat/volume.c: fixed bug lines 88, 92 - wasn't copying + null-terminator. + +2003-07-18 Royce Mitchell III + + * include/defines.h: added missing DISP_CHANGE_BADPARAM + * include/ntos/gditypes.h: fixed DEVMODEA/W structures + (had to move POINTL structure from structs.h) + * include/win32k/ntuser.h: fixed some parameter lists + * subsys/win32k/ntuser/stubs.c: ditto + * lib/user32/misc/devmode.c: new function USER32_DevModeA2W + converts DEVMODEA structure to a DEVMODEW + * lib/user32/include/user32.h: declaration for USER32_DevModeA2W + * lib/user32/makefile: added misc/devmode.c + * lib/user32/misc/desktop.c: converting CreateDesktopA's + DEVMODEA to a DEVMODEW now. + * lib/user32/misc/display.c: implemented all functions except + GetMonitorInfoA/W + +2003-07-17 Casper S. Hornstrup + + * drivers/fs/ntfs/notes.txt: New file. + * drivers/fs/ntfs/close.c: Ditto. + * drivers/fs/ntfs/rw.c: Ditto. + * drivers/fs/ntfs/attrib.c: Change Cdfs prefix to Ntfs. + * drivers/fs/ntfs/fcb.c: Ditto. + * drivers/fs/ntfs/finfo.c: Ditto. + * drivers/fs/ntfs/fsctl.c: Ditto. + * drivers/fs/ntfs/volinfo.c: Ditto. + * drivers/fs/ntfs/ntfs.c (DriverEntry): Set remaining dispatch functions. + * drivers/fs/ntfs/ntfs.h: Change Cdfs prefix to Ntfs. + (NTFS_RECORD_HEADER, FILE_RECORD_HEADER): Document fields. + * drivers/fs/ntfs/makefile (TARGET_OBJECTS): Add close.o rw.o. + +2003-07-17 Casper S. Hornstrup + + * INSTALL: Update installation instructions. + +2003-07-16 Royce Mitchell III + + * modifed strtok & wcstok in msvcrt so that crtdll can use it. + * new private support functions _lasttoken and _wlasttoken to support + strtok and wcstok respectively. + * fixed lib/msvcrt/stdio/vfscanf.c to remove unnecessary globals. + * changed crtdll to use msvcrt's stdio/scanf.c + +2003-07-16 Royce Mitchell III + + * fixed warnings at lib/msvcrt/stdio/fputs.c:79 + and lib/msvcrt/stdlib/errno.c:14 + and lib/msvcrt/stdlib/wputenv.c:24 + +2003-07-16 Royce Mitchell III + + * integrated Art Yerkes' _ftime implementation at + lib/msvcrt/time/ftime.c + * fixed ungetc warning in lib/msvcrt/stdio/vfscanf.c (also + renamed ungetc macro to UNGETC for clarity) + +2003-07-15 Royce Mitchell III + + * fixed references to errno in MSVCRT to use __set_errno() and + _errno() respectively. + * Fixed warning (args 3 & 6 in call to CreateThread) in + lib/msvcrt/process/threadx.c + +2003-07-15 Royce Mitchell III + + * modified crtdll to forward most of it's CTYPE, STRING + and WSTRING entries to NTDLL or MSVCRT. + +2003-07-14 James Tabor + + * lib/gdi32/misc/stubs.c Remove FillRgn. + * lib/gdi32/objects/region.c Add FillRng. + It looks okay. + +2003-07-12 Casper S. Hornstrup + + Changes for compiling with w32api + + * include/ddk/extypes.h (NPAGED_LOOKASIDE_LIST, PAGED_LOOKASIDE_LIST): + Match w32api fields. + * include/ddk/halfuncs.h (HalReturnToFirmware, HalReleaseDisplayOwnership, + HalQueryDisplayOwnership): Move ... + * include/ntos/halfuncs.h: ... here. + * include/ntos/rtl.h: (PopEntrySList, PushEntrySList): Move to + ntoskrnl/ex/lookas.c. + * include/ntos/zw.h (NtAccessCheckAndAuditAlarm, NtCancelTimer, + NtCreatePagingFile, NtCreateThread, NtFlushInstructionCache, + NtFlushVirtualMemory, NtGetTickCount, NtLoadKey, NtLockVirtualMemory, + NtOpenObjectAuditAlarm, NtProtectVirtualMemory, NtQueryDirectoryObject, + NtQueryIntervalProfile, NtQueryVirtualMemory, NtRaiseHardError, + NtSetInformationKey, NtSetInformationObject, NtSetTimer, NtUnloadKey, + NtUnlockVirtualMemory, NtWaitForMultipleObjects, NtCreateProfile, + NtDelayExecution, NtExtendSection, NtQuerySection): Include for w32api. + * ntoskrnl/ntoskrnl.def (ExInterlockedAddUlong, + ExInterlockedInsertHeadList, ExInterlockedInsertTailList, + ExInterlockedPopEntryList, ExInterlockedPushEntryList, + ExInterlockedRemoveHeadList): Make FASTCALL. + * ntoskrnl/ntoskrnl.edf: Ditto. + * ntoskrnl/ex/list.c: Ditto. + * include/ddk/exfuncs.h: Ditto. + (InterlockedPopEntrySList, InterlockedPushEntrySList, + ExAllocateFromPagedLookasideList, ExFreeToPagedLookasideList): Add. + * ntoskrnl/ex/interlck.c (ExInterlockedDecrementLong, + ExInterlockedAddUlong, ExInterlockedIncrementLong): Undefine if defined. + * ntoskrnl/ex/lookas.c (PopEntrySList, PushEntrySList, + LookasideListLock): Add. + * drivers/dd/blue/blue.c: Include . + * drivers/dd/videoprt/videoprt.c: Ditto. + +2003-07-11 Casper S. Hornstrup + + * lib/user32/controls/edit.c (EDIT_EM_SetLimitText, + EDIT_WM_StyleChanged): Fix unsigned/signed warning. + +2003-07-11 Casper S. Hornstrup + + * config (DBG): Default to 0. + +2003-07-11 Casper S. Hornstrup + + * regtests: New directory. + * regtests/kmregtests: Ditto. + * regtests/kmrtint: Ditto. + * regtests/regtests: Ditto. + * regtests/shared: Ditto. + * regtests/win32base: Ditto. + * include/roskrnl.h: New file. + * regtests/Makefile: Ditto. + * regtests/kmregtests/.cvsignore: Ditto. + * regtests/kmregtests/driver.c: Ditto. + * regtests/kmregtests/kmregtests.h: Ditto. + * regtests/kmregtests/Makefile: Ditto. + * regtests/kmrtint/.cvsignore: Ditto. + * regtests/kmrtint/kmrtint.c: Ditto. + * regtests/kmrtint/kmrtint.def: Ditto. + * regtests/kmrtint/kmrtint.edf: Ditto. + * regtests/kmrtint/Makefile: Ditto. + * regtests/regtests/.cvsignore: Ditto. + * regtests/regtests/Makefile: Ditto. + * regtests/regtests/regtests.c: Ditto. + * regtests/shared/.cvsignore: Ditto. + * regtests/shared/Makefile: Ditto. + * regtests/shared/regtests.c: Ditto. + * regtests/shared/regtests.h: Ditto. + * regtests/win32base/.cvsignore: Ditto. + * regtests/win32base/driver.c: Ditto. + * regtests/win32base/file-1.c: Ditto. + * regtests/win32base/Makefile: Ditto. + * regtests/win32base/win32base.def: Ditto. + * regtests/win32base/win32base.edf: Ditto. + * tools/regtests.c: Ditto. + * Makefile: Add target regtests. + * config: Add SEH option. + * rules.mak: Add tool REGTESTS. + * bootdata/hivesys.inf: Add service kmregtests. + * include/win32k/bitmaps.h (DIB_BitmapInfoSize): Correct prototype. + * ntoskrnl/ke/i386/exp.c (KiKernelTrapHandler): Reverse wrong boolean + expression. + * ntoskrnl/ke/i386/usertrap.c (KiUserTrapHandler): Ditto. + * tools/Makefile: Add tool regtests. + * tools/config.mk: Handle SEH option. + * tools/helper.mk: Support regression tests. + +2003-07-11 Casper S. Hornstrup + + * apps/tests/bitblt/bitblt.c (MainWndProc): Declare variables + before any statements are processed in the scope. + * apps/tests/icontest/icontest.c (WinMain): Ditto. + * apps/tests/wm_paint/wm_paint.c (WinMain, MainWndProc): Ditto. + +2003-07-11 Casper S. Hornstrup + + * lib/user32/controls/button.c (PB_Paint, GB_Paint): Declare variables + before any statements are processed in the scope. + * lib/user32/controls/combo.c (CBPaintButton): Ditto. + * lib/user32/windows/accel.c (TranslateAcceleratorA): Ditto. + * subsys/win32k/include/class.h (W32kGetClassLong): Fix prototype. + * subsys/win32k/ntuser/class.c (W32kGetClassLong): Match prototype. + * subsys/win32k/ntuser/windc.c (DceAllocDCE): Ditto. + * subsys/win32k/ntuser/window.c (DestroyThreadWindows): Ditto. + +2003-07-11 Casper S. Hornstrup + + * tools/rgenstat/rgenstat.c (process_directory): Fix building on Windows. + +2003-07-11 Casper S. Hornstrup + + * tools/rgenstat/rgenstat.c (API_INFO): Add filename field. + (path_to_url, get_filename): New functions. + (parse_file, process_directory): Build cvs path. + (generate_xml_for_component): Set file attribute on a function. + * tools/rgenstat/web/rapistatus.css (.h): New class. + * tools/rgenstat/web/rapistatus.js (clickHandler): Go to the file in + ViewCVS on click on a function. + * tools/rgenstat/web/rapistatus.xsl: Handle file attribute. + +2003-07-11 Casper S. Hornstrup + + * subsys/win32k/objects/region.c (W32kFillRgn): Fix syntax error. + +2003-07-11 Casper S. Hornstrup + + * tools/rgenstat/rgenstat.c (get_previous_identifier): Skip end-of-line + characters when searching for identifier. + (parse_file): Print a warning if no identifier is found. + +2003-07-10 James Tabor + + * subsys/win32k/objects/region.c: (W32kFillRgn) Implement. + +2003-07-10 Casper S. Hornstrup + + * lib/winspool/stubs.c: Add @implemented and @unimplemented to APIs. + +2003-07-10 Casper S. Hornstrup + + * lib/wsock32/stubs.c: Add @implemented and @unimplemented to APIs. + +2003-07-10 Casper S. Hornstrup + + * lib/ws2_32/misc/bsd.c: Add @implemented and @unimplemented to APIs. + * lib/ws2_32/misc/dllmain.c: Ditto. + * lib/ws2_32/misc/event.c: Ditto. + * lib/ws2_32/misc/ns.c: Ditto. + * lib/ws2_32/misc/sndrcv.c: Ditto. + * lib/ws2_32/misc/stubs.c: Ditto. + * lib/ws2_32/misc/upcall.c: Ditto. + +2003-07-10 Casper S. Hornstrup + + * drivers/dd/videoprt/videoprt.c: Add @implemented and @unimplemented + to APIs. + +2003-07-10 Casper S. Hornstrup + + * lib/version/misc/stubs.c: Add @implemented and @unimplemented to APIs. + +2003-07-10 Casper S. Hornstrup + + * lib/user32/misc/dde.c: Add @implemented and @unimplemented to APIs. + * lib/user32/misc/desktop.c: Ditto. + * lib/user32/misc/display.c: Ditto. + * lib/user32/misc/exit.c: Ditto. + * lib/user32/misc/object.c: Ditto. + * lib/user32/misc/resources.c: Ditto. + * lib/user32/misc/sprintf.c: Ditto. + * lib/user32/misc/stubs.c: Ditto. + * lib/user32/misc/timer.c: Ditto. + * lib/user32/misc/winhelp.c: Ditto. + * lib/user32/misc/winsta.c: Ditto. + * lib/user32/windows/accel.c: Ditto. + * lib/user32/windows/bitmap.c: Ditto. + * lib/user32/windows/class.c: Ditto. + * lib/user32/windows/clipboard.c: Ditto. + * lib/user32/windows/cursor.c: Ditto. + * lib/user32/windows/dc.c: Ditto. + * lib/user32/windows/defwnd.c: Ditto. + * lib/user32/windows/dialog.c: Ditto. + * lib/user32/windows/draw.c: Ditto. + * lib/user32/windows/font.c: Ditto. + * lib/user32/windows/hook.c: Ditto. + * lib/user32/windows/icon.c: Ditto. + * lib/user32/windows/input.c: Ditto. + * lib/user32/windows/mdi.c: Ditto. + * lib/user32/windows/menu.c: Ditto. + * lib/user32/windows/message.c: Ditto. + * lib/user32/windows/messagebox.c: Ditto. + * lib/user32/windows/nonclient.c: Ditto. + * lib/user32/windows/paint.c: Ditto. + * lib/user32/windows/prop.c: Ditto. + * lib/user32/windows/rect.c: Ditto. + * lib/user32/windows/text.c: Ditto. + * lib/user32/windows/window.c: Ditto. + +2003-07-10 Casper S. Hornstrup + + * drivers/net/tdi/cte/string.c: Add @implemented and @unimplemented to + APIs. + * drivers/net/tdi/cte/stubs.c: Ditto. + * drivers/net/tdi/tdi/dereg.c: Ditto. + * drivers/net/tdi/tdi/handler.c: Ditto. + * drivers/net/tdi/tdi/obsolete.c: Ditto. + * drivers/net/tdi/tdi/stubs.c: Ditto. + +2003-07-10 Casper S. Hornstrup + + * lib/snmpapi/snmpapi.c: Add @implemented and @unimplemented to APIs. + +2003-07-10 Casper S. Hornstrup + + * lib/secur32/lsa.c: Add @implemented and @unimplemented to APIs. + +2003-07-10 Casper S. Hornstrup + + * drivers/storage/scsiport/scsiport.c: Add @implemented and + @unimplemented to APIs. + +2003-07-10 Casper S. Hornstrup + + * drivers/net/ndis/ndis/40gone.c: Add @implemented and @unimplemented + to APIs. + * drivers/net/ndis/ndis/50gone.c: Ditto. + * drivers/net/ndis/ndis/buffer.c: Ditto. + * drivers/net/ndis/ndis/cl.c: Ditto. + * drivers/net/ndis/ndis/cm.c: Ditto. + * drivers/net/ndis/ndis/co.c: Ditto. + * drivers/net/ndis/ndis/control.c: Ditto. + * drivers/net/ndis/ndis/hardware.c: Ditto. + * drivers/net/ndis/ndis/io.c: Ditto. + * drivers/net/ndis/ndis/memory.c: Ditto. + * drivers/net/ndis/ndis/miniport.c: Ditto. + * drivers/net/ndis/ndis/protocol.c: Ditto. + * drivers/net/ndis/ndis/string.c: Ditto. + * drivers/net/ndis/ndis/stubs.c: Ditto. + * drivers/net/ndis/ndis/time.c: Ditto. + +2003-07-10 Casper S. Hornstrup + + * lib/kernel32/debug/break.c: Add @implemented and @unimplemented + to APIs. + * lib/kernel32/debug/debugger.c: Ditto. + * lib/kernel32/debug/output.c: Ditto. + * lib/kernel32/except/except.c: Ditto. + * lib/kernel32/file/backup.c: Ditto. + * lib/kernel32/file/cnotify.c: Ditto. + * lib/kernel32/file/copy.c: Ditto. + * lib/kernel32/file/create.c: Ditto. + * lib/kernel32/file/curdir.c: Ditto. + * lib/kernel32/file/delete.c: Ditto. + * lib/kernel32/file/deviceio.c: Ditto. + * lib/kernel32/file/dir.c: Ditto. + * lib/kernel32/file/dosdev.c: Ditto. + * lib/kernel32/file/file.c: Ditto. + * lib/kernel32/file/find.c: Ditto. + * lib/kernel32/file/iocompl.c: Ditto. + * lib/kernel32/file/lfile.c: Ditto. + * lib/kernel32/file/lock.c: Ditto. + * lib/kernel32/file/mailslot.c: Ditto. + * lib/kernel32/file/move.c: Ditto. + * lib/kernel32/file/npipe.c: Ditto. + * lib/kernel32/file/pipe.c: Ditto. + * lib/kernel32/file/rw.c: Ditto. + * lib/kernel32/file/tape.c: Ditto. + * lib/kernel32/file/volume.c: Ditto. + * lib/kernel32/mem/global.c: Ditto. + * lib/kernel32/mem/heap.c: Ditto. + * lib/kernel32/mem/isbad.c: Ditto. + * lib/kernel32/mem/local.c: Ditto. + * lib/kernel32/mem/procmem.c: Ditto. + * lib/kernel32/mem/section.c: Ditto. + * lib/kernel32/mem/virtual.c: Ditto. + * lib/kernel32/misc/atom.c: Ditto. + * lib/kernel32/misc/comm.c: Ditto. + * lib/kernel32/misc/computername.c: Ditto. + * lib/kernel32/misc/console.c: Ditto. + * lib/kernel32/misc/env.c: Ditto. + * lib/kernel32/misc/error.c: Ditto. + * lib/kernel32/misc/errormsg.c: Ditto. + * lib/kernel32/misc/handle.c: Ditto. + * lib/kernel32/misc/ldr.c: Ditto. + * lib/kernel32/misc/mbchars.c: Ditto. + * lib/kernel32/misc/muldiv.c: Ditto. + * lib/kernel32/misc/perfcnt.c: Ditto. + * lib/kernel32/misc/profile.c: Ditto. + * lib/kernel32/misc/res.c: Ditto. + * lib/kernel32/misc/stubs.c: Ditto. + * lib/kernel32/misc/sysinfo.c: Ditto. + * lib/kernel32/misc/time.c: Ditto. + * lib/kernel32/misc/toolhelp.c: Ditto. + * lib/kernel32/process/cmdline.c: Ditto. + * lib/kernel32/process/create.c: Ditto. + * lib/kernel32/process/proc.c: Ditto. + * lib/kernel32/process/session.c: Ditto. + * lib/kernel32/string/lstring.c: Ditto. + * lib/kernel32/synch/critical.c: Ditto. + * lib/kernel32/synch/event.c: Ditto. + * lib/kernel32/synch/intrlck.c: Ditto. + * lib/kernel32/synch/mutex.c: Ditto. + * lib/kernel32/synch/sem.c: Ditto. + * lib/kernel32/synch/timer.c: Ditto. + * lib/kernel32/synch/wait.c: Ditto. + * lib/kernel32/thread/fiber.c: Ditto. + * lib/kernel32/thread/fls.c: Ditto. + * lib/kernel32/thread/thread.c: Ditto. + * lib/kernel32/thread/tls.c: Ditto. + +2003-07-10 Casper S. Hornstrup + + * lib/iphlpapi/iphlpapi.c: Add @implemented and @unimplemented + to APIs. + +2003-07-10 Casper S. Hornstrup + + * lib/gdi32/main/dllmain.c: Add @implemented and @unimplemented + to APIs. + * lib/gdi32/misc/stubs.c: Ditto. + * lib/gdi32/misc/stubsa.c: Ditto. + * lib/gdi32/misc/stubsw.c: Ditto. + * lib/gdi32/objects/bitblt.c: Ditto. + * lib/gdi32/objects/brush.c: Ditto. + * lib/gdi32/objects/clip.c: Ditto. + * lib/gdi32/objects/dc.c: Ditto. + * lib/gdi32/objects/fillshap.c: Ditto. + * lib/gdi32/objects/line.c: Ditto. + * lib/gdi32/objects/pen.c: Ditto. + * lib/gdi32/objects/region.c: Ditto. + * lib/gdi32/objects/text.c: Ditto. + +2003-07-10 Casper S. Hornstrup + + * drivers/storage/class2/class2.c: Add @implemented and @unimplemented + to APIs. + +2003-07-10 Casper S. Hornstrup + + * lib/advapi32/misc/shutdown.c: Add @implemented and @unimplemented + to APIs. + * lib/advapi32/misc/stubs.c: Ditto. + * lib/advapi32/misc/sysfunc.c: Ditto. + * lib/advapi32/reg/reg.c: Ditto. + * lib/advapi32/sec/ac.c: Ditto. + * lib/advapi32/sec/misc.c: Ditto. + * lib/advapi32/sec/sec.c: Ditto. + * lib/advapi32/sec/sid.c: Ditto. + * lib/advapi32/service/scm.c: Ditto. + * lib/advapi32/service/sctrl.c: Ditto. + * lib/advapi32/token/privilege.c: Ditto. + * lib/advapi32/token/token.c: Ditto. + +2003-07-10 Casper S. Hornstrup + + * tools/rgenstat/rgenstat.c (parse_file): Be silent. + +2003-07-10 Casper S. Hornstrup + + * rules.mak (XSLTPROC): Add. + * tools/Makefile: Add rgenstat. + * apistatus.lst: New file. + * tools/rgenstat: New directory. + * tools/rgenstat/.cvsignore: New file. + * tools/rgenstat/llmosrt.c: Ditto. + * tools/rgenstat/Makefile: Ditto. + * tools/rgenstat/rgenstat.c: Ditto. + * tools/rgenstat/web: New directory. + * tools/rgenstat/web/*.gif: New files. + * tools/rgenstat/web/.cvsignore: New file. + * tools/rgenstat/web/rapistatus.css: Ditto. + * tools/rgenstat/web/rapistatus.js: Ditto. + * tools/rgenstat/web/rapistatus.xsl: Ditto. + +2003-07-10 Casper S. Hornstrup + + * drivers/fs/vfat/misc.c (VfatLockControl): Move it so it is placed + before it is referenced. + * include/win32k/ntuser.h (NtUserQueryWindow): Correct prototype. + * lib/winedbgc/debug.c (default_dbg_vlog): Use wine_dbg_vprintf, not + __wine_dbg_vprintf. + * ntoskrnl/nt/vdm.c (NtEarlyInitVdm): Work around GCC 3.4 trying to be + smart. + +2003-07-07 James Tabor + + * subsys/win32k/ntuser/window.c: (NtUserQueryWindow) Implement. + * include/win32k/ntuser.h: Ditto. + * lib/user32/windows/window.c: (GetWindowThreadProcessId) Implement. + +2003-07-05 Casper S. Hornstrup + + * lib/user32/windows/defwnd.c (DefWndHandleLButtonUpNC, + User32DefWindowProc): Only send WM_SYSCOMMAND message, not WM_CLOSE. + (DefWndHandleSysCommand): Handle SC_CLOSE message. + +2003-07-05 Casper S. Hornstrup + + * include/win32k/ntuser.h (NtUserSetFocus): Correct prototype. + * lib/user32/misc/stubs.c (SetFocus): Remove. + * lib/user32/windows/defwnd.c (KEYDATA_ALT): New. + (User32DefWindowProc): Handle WM_SYSKEYDOWN. + * lib/user32/windows/input.c (SetFocus): New. + * subsys/win32k/include/msgqueue.h (USER_MESSAGE_QUEUE): Document + FocusWindow field. + * subsys/win32k/include/window.h (W32kSetFocusWindow): Change return type + to HWND. + * subsys/win32k/include/winsta.h (W32kGetFocusMessageQueue): New. + * subsys/win32k/ntuser/input.c (KeyboardThreadMain): Handle system keys. + * subsys/win32k/ntuser/keyboard.c (NtUserSetFocus): New. + * subsys/win32k/ntuser/msgqueue.c (MsqPostKeyboardMessage): Implement. + * subsys/win32k/ntuser/stubs.c (NtUserSetFocus): Remove. + * subsys/win32k/ntuser/window.c (W32kSetFocusWindow): Implement. + (NtUserGetClientRect, W32kGetWindowProc, NtUserCreateWindowEx): Release + window reference on error. + (W32kDestroyWindow): Remove focus from window tree before destroying it + if needed. + * subsys/win32k/ntuser/winpos.c (WinPosChangeActiveWindow): Implement. + (WinPosShowWindow): Activate window if needed. + * subsys/win32k/ntuser/winsta.c (W32kGetFocusMessageQueue): New. + +2003-06-27 Casper S. Hornstrup + + * lib/user32/controls/button.c (ButtonWndProc_common): Fix unsigned/signed + warning. + +2003-06-07 Casper S. Hornstrup + + * include/ddk/dbgfuncs.h: Move ... + * include/ntos/dbgfuncs.h: ... here. + * include/basetsd.h (LONG32): Make it a long. + * include/ntos.h: Include ntos/dbgfuncs.h. + * include/ddk/dbgfuncs.h (DBG_STATUS_*, DBG_GET_SHOW_*): Move to + include/ntos/dbgfuncs.h. + * include/ddk/exfuncs.h (ExNotifyCallback): Match w32api prototype. + (*BinaryTree, *SplayTree, *HashTable): Move to include/ntos/zw.h. + * include/ddk/extypes.h (TRAVERSE_METHOD, PKEY_COMPARATOR, + PTRAVERSE_ROUTINE, _BINARY_TREE_NODE, BINARY_TREE, SPLAY_TREE_NODE, + SPLAY_TREE, HASH_TABLE): Move to include/ntos/zwtypes.h. + * include/ddk/status.h (STATUS_PATH_SYNTAX_BAD): Rename to + STATUS_OBJECT_PATH_SYNTAX_BAD. + * apps/utils/objdir/objdir.c (StatusToName): Change + STATUS_PATH_SYNTAX_BAD to STATUS_OBJECT_PATH_SYNTAX_BAD. + * ntoskrnl/dbg/errinfo.c: Use STATUS_OBJECT_PATH_SYNTAX_BAD. + * include/ntos/rtl.h (RtlQueryRegistryValues, RtlWriteRegistryValue, + RtlDeleteRegistryValue): Match w32api prototypes. + * include/ntos/zw.h (ZwQuerySystemTime): Ditto. + * lib/kernel32/file/cnotify.c (FindFirstChangeNotificationW): Use + STATUS_OBJECT_PATH_SYNTAX_BAD. + * lib/ntdll/rtl/registry.c (RtlDeleteRegistryValue, + RtlQueryRegistryValues, RtlWriteRegistryValue): Match w32api prototypes. + * ntoskrnl/cm/cm.h, ntoskrnl/cm/ntfunc.c, ntoskrnl/cm/regfile.c: Change + FILETIME to LARGE_INTEGER. + * ntoskrnl/cm/rtlfunc.c (RtlDeleteRegistryValue, RtlQueryRegistryValues, + RtlWriteRegistryValue): Match w32api prototypes. + * ntoskrnl/ex/callback.c (ExNotifyCallback): Ditto. + * ntoskrnl/ex/time.c (NtQuerySystemTime): Ditto. + +2003-06-07 Casper S. Hornstrup + + * hal/halx86/dma.c (AdapterObjects): Don't put braces on scalar + initializers. + +2003-06-07 Casper S. Hornstrup + + Changes for compiling with w32api + + * include/ddk/obfuncs.h (ObCreateObject): Remove. + * include/ntos/zwtypes.h (ObRosCreateObject): Add. + * ntoskrnl/ntoskrnl.def, ntoskrnl/ntoskrnl.edf: Export ObCreateObject@36 + and ObRosCreateObject@20. + * ntoskrnl/cm/ntfunc.c, ntoskrnl/cm/registry.c, ntoskrnl/cm/regobj.c, + ntoskrnl/io/create.c, ntoskrnl/io/device.c, ntoskrnl/io/iocomp.c, + ntoskrnl/lpc/connect.c, ntoskrnl/lpc/create.c, ntoskrnl/mm/section.c, + ntoskrnl/nt/evtpair.c, ntoskrnl/nt/mutant.c, ntoskrnl/nt/ntevent.c, + ntoskrnl/nt/ntsem.c, ntoskrnl/nt/nttimer.c, ntoskrnl/nt/profile.c, + ntoskrnl/ob/dirobj.c, ntoskrnl/ob/namespc.c, ntoskrnl/ob/symlink.c, + ntoskrnl/ps/create.c, ntoskrnl/ps/process.c, ntoskrnl/se/token.c, + subsys/win32k/ntuser/winsta.c: Use ObRosCreateObject, not ObCreateObject. + * ntoskrnl/ob/object.c (ObRosCreateObject): Rename from ObCreateObject. + (ObCreateObject): Add stub. + +2003-06-07 Casper S. Hornstrup + + Changes for compiling with w32api + + * include/ddk/cctypes.h (PREACTOS_COMMON_FCB_HEADER): Remove. + (FSRTL_COMMON_FCB_HEADER): Add. + * include/ddk/iotypes.h (FILE_OBJECT): Rename field + SectionObjectPointers to SectionObjectPointer. + * ntoskrnl/cc/copy.c, ntoskrnl/cc/misc.c, ntoskrnl/cc/pin.c, + ntoskrnl/cc/view.c, ntoskrnl/io/rawfs.c, ntoskrnl/mm/section.c, + drivers/fs/cdfs/cleanup.c, drivers/fs/cdfs/fcb.c, + drivers/fs/cdfs/fsctl.c, drivers/fs/ntfs/fcb.c, drivers/fs/ntfs/fsctl.c, + drivers/fs/vfat/close.c, drivers/fs/vfat/create.c, + drivers/fs/vfat/finfo.c, drivers/fs/vfat/fcb.c, drivers/fs/vfat/fsctl.c: + Use new FILE_OBJECT structure. + * drivers/fs/cdfs/cdfs.h, drivers/fs/ntfs/ntfs.h, drivers/fs/vfat/vfat.h: + Use new FSRTL_COMMON_FCB_HEADER structure. + * drivers/net/afd/include/afd.h (FSRTL_COMMON_FCB_HEADER): Remove. + * include/ddk/ketypes.h (KQUEUE): Match w32api structure. + * ntoskrnl/ke/queue.c, ntoskrnl/ke/wait.c: Use new structure. + * ntoskrnl/ke/spinlock.c (KeAcquireSpinLockAtDpcLevel, + KeReleaseSpinLockFromDpcLevel): Undefine before declaring. + +2003-06-07 Casper S. Hornstrup + + Changes for compiling with w32api + + * include/ddk/ketypes.h (KSPIN_LOCK, PKSPIN_LOCK): Match w32api + structures. + * ntoskrnl/ke/spinlock.c: Use new structures. + +2003-06-07 Casper S. Hornstrup + + Changes for compiling with w32api + + * include/ddk/service.h: Move ... + * include/ntos/service.h: ... here. + * include/ddk/kdfuncs.h: Move ... + * include/ntos/kdfuncs.h: ... here. + * include/ntos/halfuncs.h: New file. + * ntoskrnl/include/internal/hal/hal.h, + ntoskrnl/include/internal/hal/bus.h, + ntoskrnl/include/internal/hal/mps.h: Remove. + * hal/halx86/include/hal.h: Remove disabled code. + * include/ntos.h: Include ntos/service.h, ntos/halfuncs.h, and + ntos/kdfuncs.h. + * include/ddk/fstypes.h (FILE_LOCK_TOC): Move ... + * include/ntos/file.h: ... here. + * include/ddk/halfuncs.h (HalAllProcessorsStarted, + HalBeginSystemInterrupt, HalDisableSystemInterrupt, + HalEnableSystemInterrupt, HalEndSystemInterrupt, + HalInitializeProcessor, HalInitSystem, HalReportResourceUsage): Move to + include/ntos/halfuncs.h. + * include/ddk/iofuncs.h (IoAssignDriveLetters): Ditto. + * include/ddk/kefuncs.h (KeInitializeApc): Match w32api prototype. + (KeRaiseIrqlToSynchLevel): Move to include/ntos/halfuncs.h. + * include/ddk/ketypes.h (KAPC_ENVIRONMENT): Move to include/ntos/types.h. + (KDEVICE_QUEUE, KDEVICE_QUEUE_ENTRY): Match w32api prototype. + (KINTERRUPT): Move to include/ntos/zwtypes.h. + * include/ddk/mmtypes.h (PAGE_ROUND_UP, PAGE_ROUND_DOWN): Move ... + * include/ntos/mm.h: ... here. + * include/ddk/ntddk.h: Don't include ddk/kdfuncs.h. + * include/ddk/pstypes.h (PKTHREAD, PRKTHREAD): Add. + (PsInitialSystemProcess, PsProcessType, PsThreadType): Move ... + include/ntos/ps.h: ... here. + * lib/ntdll/rtl/i386/exception.c (SehpContinue): New. + * ntoskrnl/rtl/i386/exception.c (SehpContinue): Ditto. + * ntoskrnl/include/internal/ke.h: Include . + * ntoskrnl/include/internal/ntoskrnl.h: Include internal/ke.h. + * ntoskrnl/ex/napi.c: Use new structure SSDT_ENTRY. + * ntoskrnl/ke/apc.c (KeInitializeApc): Match w32api prototype. + * ntoskrnl/ke/kqueue.c: Use fields of new structures KDEVICE_QUEUE + and KDEVICE_QUEUE_ENTRY. + +2003-06-07 Casper S. Hornstrup + + * ntoskrnl/cm/regfile.c (CmiCopyKey): Fix unsigned/signed warning. + +2003-06-05 Casper S. Hornstrup + + * lib/user32/windows/icon.c (CURSORICON_FindBestCursor, + CURSORICON_FindBestIcon): Fix unsigned/signed warning. + +2003-06-05 Casper S. Hornstrup + + Changes for compiling with w32api + + * ntoskrnl/include/internal/i386/ps.h (KPCR_TSS): Redefine as 0x3C. + (KPCR_TIB): New structure. + (IKPCR): Ditto. + (KPCR): Match w32api structure fieldnames. + * ntoskrnl/ke/main.c (ExpInitializeExecutive): Adjust for changes to KPCR. + * ntoskrnl/ke/i386/kernel.c: Ditto. + * ntoskrnl/ps/thread.c: Ditto. + +2003-06-01 Casper S. Hornstrup + + Changes for compiling with w32api + + * include/ntos/zwtypes.h (SYSTEM_MODULES): Rename to + SYSTEM_MODULE_INFORMATION. Match w32api structure fieldnames. + (SYSTEM_MODULE_INFORMATION): Rename to SYSTEM_MODULE_INFORMATION_ENTRY. + Match w32api structure fieldnames. + * include/epsapi.h: Include . + (PSYSMOD_ENUM_ROUTINE, PsaCaptureSystemModules, PsaWalkSystemModules, + PsaWalkFirstSystemModule, PsaWalkNextSystemModule): Use + SYSTEM_MODULE_INFORMATION_ENTRY and SYSTEM_MODULE_INFORMATION structures. + * lib/epsapi/enum/drivers.c: Use SYSTEM_MODULE_INFORMATION_ENTRY and + SYSTEM_MODULE_INFORMATION structures. + * lib/psapi/misc/win32.c: Ditto. + * ntoskrnl/ldr/loader.c: Ditto. + * lib/epsapi/enum/modules.c: Include . + * lib/ntdll/rtl/thread.c: Ditto. + * lib/rosrtl/thread/context.c: Ditto. + * lib/rosrtl/thread/create.c: Ditto. + * lib/rosrtl/thread/stack.c: Ditto. + * include/ntos.h: Include "rosrtl/thread.h". + * include/structs.h (_BLOB_DEFINED): Rename to __BLOB_T_DEFINED. + * include/winsock2.h: Ditto. + * include/ntos/obtypes.h (POBJECT_TYPE): Make a pointer to struct + _OBJECT_TYPE. + (PHANDLE_TABLE): Make a pointer to struct _HANDLE_TABLE. + * ntoskrnl/include/internal/mm.h (PSECTION_OBJECT): Make a pointer to + struct _SECTION_OBJECT. + * ntoskrnl/include/internal/i386/ps.h (PKPCR): Make a pointer to struct + _KPCR. + +2003-05-28 Casper S. Hornstrup + + * Makefile: Update bootcd target. + +2003-05-28 Casper S. Hornstrup + + * subsys/system/usetup/progress.c (ProgressNextStep): Check if NewPos + is odd. + +2003-05-28 Casper S. Hornstrup + + Changes for compiling with w32api + + * include/ddk/haltypes.h: Move ... + * include/ntos/haltypes.h: ... here. + * include/ddk/obtypes.h: Move ... + * include/ntos/obtypes.h: ... here. + * include/ddk/i386/tss.h: Move ... + * include/ntos/tss.h: ... here. + * include/errors.h, include/windows.h: #include_next . + * include/ntos.h: Include "ntos/haltypes.h", "ntos/obtypes.h", and + "ntos/tss.h". + * include/ddk/defines.h (EXPORTED, IMPORTED): Move to + include/ntos/types.h. + * include/ddk/exfuncs.h, include/ddk/mmtypes.h, include/ntos/except.h, + include/ntos/file.h, include/ole32/guiddef.h, include/win32k/color.h, + lib/msafd/include/debug.h, lib/user32/include/debug.h, + lib/ws2_32/include/debug.h, lib/ws2help/debug.h, + ntoskrnl/include/internal/debug.h, ntoskrnl/ke/i386/bthread.S, + ntoskrnl/rtl/error.c: Don't define macros if previously defined. + * include/ddk/halfuncs.h: Include . + * include/ddk/iotypes.h: Include . + * include/ddk/ketypes.h (MB_FLAGS_*, LOADER_MODULE, ADDRESS_RANGE, + LOADER_PARAMETER_BLOCK): Move to include/ntos/types.h. + * include/ddk/ntddk.h: #include_next . + * include/ddk/ntifs.h: #include_next . + * include/napi/shared_data.h (SharedUserData): Undefine before defining. + * include/ntos/rtl.h (RtlUpcaseUnicodeString): Correct prototype. + * include/ntos/zwtypes.h (THREAD_STATE): Add. + * lib/ntdll/rtl/unicode.c (RtlUpcaseUnicodeString): Match new prototype. + * ntoskrnl/rtl/unicode.c (RtlUpcaseUnicodeString): Ditto. + * lib/string/Makefile: Include Makefile.$(ARCH). Don't include + makefile.$(ARCH). + * ntoskrnl/ex/sysinfo.c, ntoskrnl/include/internal/ntoskrnl.h, + * ntoskrnl/include/internal/ob.h, ntoskrnl/ob/handle.c: Include . + * ntoskrnl/ke/i386/syscall.S: Don't include . + (KernelMode, UserMode): Define. + * ntoskrnl/ke/i386/stkswitch.S, ntoskrnl/ke/i386/tskswitch.S, + ntoskrnl/ke/i386/v86m_sup.S: Include + +2003-05-25 Casper S. Hornstrup + + * Makefile: Fix typo. + +2003-05-25 Casper S. Hornstrup + + * Makefile: Don't install system.hiv. Install fonts and nls directory. + * tools/rcopy.c (copy_file, copy_directory, is_directory): New functions. + +2003-05-17 Casper S. Hornstrup + + * ntoskrnl/io/irp.c (IofCallDriver): Don't reference FileObject. + +2003-05-16 Casper S. Hornstrup + + * ntoskrnl/io/cleanup.c (IopCompleteRequest1, IoSecondStageCompletion): + Don't dereference Irp->UserEvent here. + * ntoskrnl/io/irp.c (IofCallDriver): Reference FileObject. + * ntoskrnl/io/rw.c (IopReadWriteIoComplete): New function. + * (NtReadFile, NtWriteFile): Set I/O completion routine if using an + event that is under object manager control. + +2003-05-13 Casper S. Hornstrup + + * ntoskrnl/Makefile (OBJECTS_IO): Add io/rawfs.o. + * ntoskrnl/cm/registry.c (CmiInitHives): Check status using NT_SUCCESS(). + * ntoskrnl/include/internal/io.h (RawFsIsRawFileSystemDeviceObject, + RawFsDriverEntry): Add prototypes. + * ntoskrnl/include/internal/ntoskrnl.h (IoInit2): Add prototype. + * ntoskrnl/io/device.c (IopCreateDriverObject): Handle unnamed services. + * ntoskrnl/io/fs.c (IoMountVolume): Handle mounting of raw volumes. + (IoRegisterFileSystem): Add registered filesystem device objects at the + head of the list. + * ntoskrnl/io/iomgr.c (IoInit2): New function. + * ntoskrnl/ke/main.c (ExpInitializeExecutive): Call IoInit2(). + * ntoskrnl/mm/section.c (MmQuerySectionView): Check return value of call + to MmFindRegion(). + * ntoskrnl/io/rawfs.c: New file. + +2003-05-11 Casper S. Hornstrup + + * lib/fslib/vfatlib/vfatlib.c (VfatFormat): Set hidden sectors. + * ntoskrnl/io/xhaldrv.c (xHalIoWritePartitionTable): Implement support + for primary partitions. + * subsys/system/usetup/partlist.c (CreateSelectedPartition): Compute + hidden sectors. + * subsys/system/usetup/usetup.c (SelectPartitionPage, + DrawFileSystemList, FormatPartitionPage): Don't use conditional define + ENABLE_FORMAT. + (CreateFileSystemList): Don't draw "Keep current file system" option if + formatting is needed. + (SelectFileSystemPage): Figure out if partition must be formatted. + * subsys/system/usetup/usetup.h (ENABLE_FORMAT): Remove. + (FILE_SYSTEM_LIST): Add ForceFormat field. + +2003-05-11 Casper S. Hornstrup + + * lib/user32/windows/font.c (TEXT_PathEllipsify, TEXT_Reprefix): Fix + unsigned/signed warning. + * ntoskrnl/mm/pagefile.c (MmWriteToSwapPage, MmReadFromSwapPage, + NtCreatePagingFile): Ditto. + +2003-05-05 Casper S. Hornstrup + + * tools/helper.mk: Kill implicit rule ".o". + 2003-04-28 Casper S. Hornstrup * Makefile (DLLS): Add epsapi, psapi and wsock32. diff --git a/INSTALL b/INSTALL index 0446537..b1c3ae6 100644 --- a/INSTALL +++ b/INSTALL @@ -1,7 +1,7 @@ 1. Build environment To build the system you need either mingw32 installed on Windows or a mingw32 -cross compiler running on unix. You may obtain MinGW binaries that build +cross compiler running on unix. You may obtain MinGW binaries that build ReactOS from http://www.reactos.com. @@ -9,7 +9,9 @@ ReactOS from http://www.reactos.com. To build from Windows run 'make' (wihout the quotes) from the top directory. To build from unix, edit rules.mak and change the PREFIX variable to the -correct value for your cross-compiler, then run 'make'. +correct value for your cross-compiler. Run 'export HOST=mingw32-linux' to +tell the ReactOS build system that it is building ReactOS on a linux machine. +Now run 'make'. 3. Installation @@ -44,7 +46,9 @@ If you are on linux this could be: INSTALL_DIR = /mnt/windows/reactos Save the changes to rules.mak and run 'make install' to install the files to -the new location. +the new location. If you don't want to change rules.mak, you can specify the +installtion directory when invoking make. Run +'make INSTALL_DIR=c:\reactos install' to install to c:\reactos. 3.2 Installation from binany distribution @@ -56,13 +60,7 @@ to c:\reactos. Remember to extract the files with full paths. 4. Booting ReactOS Startup in DOS mode. 'cd' to c:\reactos and type 'boot' and press . -ReactOS will now boot and when it has booted, you are asked for a username and -password. Just press twice as ReactOS does not currently have user -validation. A simple shell is started where you can use simple commands like -'cd' and 'dir'. - -You may also want to try running the enhanced shell, cmd.exe, found in -the rosapps CVS module. +A simple shell is started where you can use simple commands like 'cd' and 'dir'. 5. Help diff --git a/Jamfile b/Jamfile new file mode 100644 index 0000000..373f9c6 --- /dev/null +++ b/Jamfile @@ -0,0 +1,5 @@ +# Main jamfile for ReactOS + +SubDir ROS_TOP ; + +SubInclude ROS_TOP Lib ; diff --git a/Jamrules b/Jamrules new file mode 100644 index 0000000..c512808 --- /dev/null +++ b/Jamrules @@ -0,0 +1,54 @@ +# customization for ReactOS goes here + +# The SharedLibrary and SharedLibraryFromObjects rules were +# borrowed from here: +# http://www.differentpla.net/~roger/devel/jam/tutorial/shared_lib/index.html + +SUFSHR = .dll ; +RM = rm ; # rm comes with MinGW, and the default del doesn't work in some cases + +rule SharedLibrary +{ + SharedLibraryFromObjects $(<) : $(>:S=$(SUFOBJ)) ; + Objects $(>) ; +} + +rule SharedLibraryFromObjects +{ + local _s _t ; + + # Add grist to file names + # Add suffix to dll + + _s = [ FGristFiles $(>) ] ; + _t = [ FAppendSuffix $(<) : $(SUFSHR) ] ; + + if $(_t) != $(<) + { + DEPENDS $(<) : $(_t) ; + NOTFILE $(<) ; + } + + # make compiled sources a dependency of target + + DEPENDS exe : $(_t) ; + DEPENDS $(_t) : $(_s) ; + MakeLocate $(_t) : $(LOCATE_TARGET) ; + + Clean clean : $(_t) ; + + Link $(_t) : $(_s) ; +} + +# nasm needs to know the output file first, or it doesn't +# recognize -I :( +actions As +{ + $(AS) -o $(<) $(ASFLAGS) -I$(HDRS) $(>) +} + +AS = nasm ; + +# why isn't DEFINES working? :( +#DEFINES += _M_IX86 ; +CCFLAGS += -D_M_IX86 ; diff --git a/Makefile b/Makefile index 6a34442..ee7df23 100644 --- a/Makefile +++ b/Makefile @@ -30,12 +30,15 @@ BUS = acpi isapnp pci # vfatlib LIB_FSLIB = vfatlib -# User and kernel mode libraries -# advapi32 crtdll fmifs gdi32 kernel32 libpcap packet msafd msvcrt ntdll ole32 -# oleaut32 epsapi psapi rpcrt4 secur32 shell32 user32 version ws2help ws2_32 wsock32 wshirda -DLLS = rosrtl advapi32 crtdll fmifs freetype gdi32 kernel32 packet msafd msvcrt ntdll \ - epsapi psapi secur32 user32 version winedbgc winspool ws2help ws2_32 wsock32 \ - wshirda zlib #winmm +# Static libraries +LIB_STATIC = string rosrtl epsapi zlib + +# User mode libraries +# advapi32 cards crtdll fmifs gdi32 kernel32 libpcap packet msafd msvcrt ntdll +# epsapi psapi richedit rpcrt4 secur32 user32 version ws2help ws2_32 wsock32 wshirda mswsock +DLLS = advapi32 cards crtdll fmifs freetype gdi32 kernel32 packet lzexpand msafd \ + msvcrt ntdll psapi richedit secur32 syssetup twain user32 version winedbgc \ + winspool ws2help ws2_32 wsock32 wshirda iphlpapi kbdus mswsock SUBSYS = smss win32k csrss ntvdm @@ -56,11 +59,10 @@ DRIVERS_LIB = bzip2 # Kernel mode device drivers # Obsolete: ide # beep blue floppy null parallel ramdrv serenum serial vga videoprt -DEVICE_DRIVERS = beep blue floppy null serial vga videoprt +DEVICE_DRIVERS = beep blue debugout floppy null serial vga videoprt bootvid # Kernel mode input drivers -# keyboard mouclass psaux sermouse -INPUT_DRIVERS = keyboard mouclass psaux +INPUT_DRIVERS = keyboard mouclass psaux sermouse # Kernel mode file system drivers # cdfs ext2 fs_rec ms np vfat @@ -71,16 +73,16 @@ FS_DRIVERS = cdfs fs_rec ms np vfat mup ntfs NET_DRIVERS = afd ndis npf tcpip tdi wshtcpip # Kernel mode networking device drivers -# ne2000 -NET_DEVICE_DRIVERS = ne2000 +# ne2000 pcnet +NET_DEVICE_DRIVERS = ne2000 pcnet # Kernel mode storage drivers # atapi cdrom class2 disk scsiport -STORAGE_DRIVERS = atapi cdrom class2 disk scsiport +STORAGE_DRIVERS = atapi cdrom class2 disk scsiport diskdump # System applications -# autochk cmd services format gstart usetup winlogon -SYS_APPS = autochk cmd services format gstart usetup winlogon +# autochk cmd format gstart services setup usetup welcome winlogon +SYS_APPS = autochk cmd format gstart services setup usetup welcome winlogon # System services # rpcss eventlog @@ -102,27 +104,30 @@ endif KERNEL_DRIVERS = $(DRIVERS_LIB) $(DEVICE_DRIVERS) $(INPUT_DRIVERS) $(FS_DRIVERS) \ $(NET_DRIVERS) $(NET_DEVICE_DRIVERS) $(STORAGE_DRIVERS) -all: tools dk implib $(COMPONENTS) $(HALS) $(BUS) $(LIB_FSLIB) $(DLLS) $(SUBSYS) \ +# Regression tests +REGTESTS = regtests + +all: tools dk implib $(LIB_STATIC) $(COMPONENTS) $(HALS) $(BUS) $(LIB_FSLIB) $(DLLS) $(SUBSYS) \ $(LOADERS) $(KERNEL_DRIVERS) $(SYS_APPS) $(SYS_SVC) \ - $(APPS) $(EXT_MODULES) + $(APPS) $(EXT_MODULES) $(REGTESTS) #config: $(TOOLS:%=%_config) -depends: $(LIB_FSLIB:%=%_depends) $(DLLS:%=%_depends) $(SUBSYS:%=%_depends) $(SYS_SVC:%=%_depends) \ +depends: $(LIB_STATIC:%=%_depends) $(LIB_FSLIB:%=%_depends) $(DLLS:%=%_depends) $(SUBSYS:%=%_depends) $(SYS_SVC:%=%_depends) \ $(EXT_MODULES:%=%_depends) $(POSIX_LIBS:%=%_depends) implib: $(COMPONENTS:%=%_implib) $(HALS:%=%_implib) $(BUS:%=%_implib) \ - $(LIB_FSLIB:%=%_implib) $(DLLS:%=%_implib) $(LOADERS:%=%_implib) \ + $(LIB_STATIC:%=%_implib) $(LIB_FSLIB:%=%_implib) $(DLLS:%=%_implib) $(LOADERS:%=%_implib) \ $(KERNEL_DRIVERS:%=%_implib) $(SUBSYS:%=%_implib) \ $(SYS_APPS:%=%_implib) $(SYS_SVC:%=%_implib) \ $(APPS:%=%_implib) $(EXT_MODULES:%=%_implib) clean: tools dk_clean $(HALS:%=%_clean) \ - $(COMPONENTS:%=%_clean) $(BUS:%=%_clean) $(LIB_FSLIB:%=%_clean) $(DLLS:%=%_clean) \ + $(COMPONENTS:%=%_clean) $(BUS:%=%_clean) $(LIB_STATIC:%=%_clean) $(LIB_FSLIB:%=%_clean) $(DLLS:%=%_clean) \ $(LOADERS:%=%_clean) $(KERNEL_DRIVERS:%=%_clean) $(SUBSYS:%=%_clean) \ $(SYS_APPS:%=%_clean) $(SYS_SVC:%=%_clean) \ $(NET_APPS:%=%_clean) \ - $(APPS:%=%_clean) $(EXT_MODULES:%=%_clean) \ + $(APPS:%=%_clean) $(EXT_MODULES:%=%_clean) $(REGTESTS:%=%_clean) \ clean_after tools_clean clean_after: @@ -130,34 +135,63 @@ clean_after: install: tools install_dirs install_before \ $(COMPONENTS:%=%_install) $(HALS:%=%_install) $(BUS:%=%_install) \ - $(LIB_FSLIB:%=%_install) $(DLLS:%=%_install) $(LOADERS:%=%_install) \ + $(LIB_STATIC:%=%_install) $(LIB_FSLIB:%=%_install) $(DLLS:%=%_install) $(LOADERS:%=%_install) \ $(KERNEL_DRIVERS:%=%_install) $(SUBSYS:%=%_install) \ $(SYS_APPS:%=%_install) $(SYS_SVC:%=%_install) \ - $(APPS:%=%_install) $(EXT_MODULES:%=%_install) + $(APPS:%=%_install) $(EXT_MODULES:%=%_install) $(REGTESTS:%=%_install) dist: $(TOOLS_PATH)/rcopy$(EXE_POSTFIX) dist_clean dist_dirs \ - $(HALS:%=%_dist) $(COMPONENTS:%=%_dist) $(BUS:%=%_dist) $(LIB_FSLIB:%=%_dist) \ + $(HALS:%=%_dist) $(COMPONENTS:%=%_dist) $(BUS:%=%_dist) $(LIB_STATIC:%=%_dist) $(LIB_FSLIB:%=%_dist) \ $(DLLS:%=%_dist) $(LOADERS:%=%_dist) $(KERNEL_DRIVERS:%=%_dist) $(SUBSYS:%=%_dist) \ $(SYS_APPS:%=%_dist) $(SYS_SVC:%=%_dist) \ $(NET_APPS:%=%_dist) \ $(APPS:%=%_dist) $(EXT_MODULES:%=%_dist) -bootcd_directory_layout: +FREELDR_DIR = ../freeldr + +freeldr: + $(MAKE) -C $(FREELDR_DIR) + +bootcd_directory_layout: freeldr $(RMKDIR) $(BOOTCD_DIR) $(RMKDIR) $(BOOTCD_DIR)/bootdisk - $(RMKDIR) $(BOOTCD_DIR)/install + $(RMKDIR) $(BOOTCD_DIR)/loader $(RMKDIR) $(BOOTCD_DIR)/reactos $(RMKDIR) $(BOOTCD_DIR)/reactos/system32 - $(RMKDIR) $(BOOTCD_DIR)/loader + $(CP) ${FREELDR_DIR}/bootsect/isoboot.bin ${BOOTCD_DIR}/../isoboot.bin + $(CP) ${FREELDR_DIR}/bootsect/dosmbr.bin ${BOOTCD_DIR}/loader/dosmbr.bin + $(CP) ${FREELDR_DIR}/bootsect/ext2.bin ${BOOTCD_DIR}/loader/ext2.bin + $(CP) ${FREELDR_DIR}/bootsect/fat.bin ${BOOTCD_DIR}/loader/fat.bin + $(CP) ${FREELDR_DIR}/bootsect/fat32.bin ${BOOTCD_DIR}/loader/fat32.bin + $(CP) ${FREELDR_DIR}/bootsect/isoboot.bin ${BOOTCD_DIR}/loader/isoboot.bin + $(CP) ${FREELDR_DIR}/freeldr/obj/i386/freeldr.sys ${BOOTCD_DIR}/loader/freeldr.sys + $(CP) ${FREELDR_DIR}/FREELDR.INI ${BOOTCD_DIR}/loader/freeldr.ini + $(CP) ${FREELDR_DIR}/freeldr/obj/i386/setupldr.sys ${BOOTCD_DIR}/loader/setupldr.sys bootcd_bootstrap_files: $(COMPONENTS:%=%_bootcd) $(HALS:%=%_bootcd) $(BUS:%=%_bootcd) \ - $(LIB_FSLIB:%=%_bootcd) $(DLLS:%=%_bootcd) $(KERNEL_DRIVERS:%=%_bootcd) \ + $(LIB_STATIC:%=%_bootcd) $(LIB_FSLIB:%=%_bootcd) $(DLLS:%=%_bootcd) $(KERNEL_DRIVERS:%=%_bootcd) \ $(SUBSYS:%=%_bootcd) $(SYS_APPS:%=%_bootcd) -bootcd: all bootcd_directory_layout bootcd_bootstrap_files - $(MAKE) install INSTALL_DIR=$(BOOTCD_DIR)/install INSTALL_SYMBOLS=no BOOTCD_INSTALL=yes - -.PHONY: all depends implib clean clean_before install dist bootcd_directory_layout \ +bootcd_install_before: + $(RLINE) bootdata/autorun.inf $(BOOTCD_DIR)/autorun.inf + $(RLINE) bootdata/readme.txt $(BOOTCD_DIR)/readme.txt + $(RLINE) bootdata/hivecls.inf $(BOOTCD_DIR)/reactos/hivecls.inf + $(RLINE) bootdata/hivedef.inf $(BOOTCD_DIR)/reactos/hivedef.inf + $(RLINE) bootdata/hivesft.inf $(BOOTCD_DIR)/reactos/hivesft.inf + $(RLINE) bootdata/hivesys.inf $(BOOTCD_DIR)/reactos/hivesys.inf + $(RLINE) bootdata/txtsetup.sif $(BOOTCD_DIR)/reactos/txtsetup.sif + $(CP) bootdata/icon.ico $(BOOTCD_DIR)/icon.ico + $(CP) media/nls/c_1252.nls $(BOOTCD_DIR)/reactos/c_1252.nls + $(CP) media/nls/c_437.nls $(BOOTCD_DIR)/reactos/c_437.nls + $(CP) media/nls/l_intl.nls $(BOOTCD_DIR)/reactos/l_intl.nls + +bootcd: all bootcd_directory_layout bootcd_bootstrap_files bootcd_install_before + $(CABMAN) /C bootdata/packages/reactos.dff /L $(BOOTCD_DIR)/reactos /I + $(CABMAN) /C bootdata/packages/reactos.dff /RC $(BOOTCD_DIR)/reactos/reactos.inf /L $(BOOTCD_DIR)/reactos /N + - $(RM) $(BOOTCD_DIR)/reactos/reactos.inf + $(TOOLS_PATH)/cdmake/cdmake -v -m -b $(BOOTCD_DIR)/../isoboot.bin $(BOOTCD_DIR) REACTOS ReactOS.iso + +.PHONY: all depends implib clean clean_before install dist freeldr bootcd_directory_layout \ bootcd_bootstrap_files bootcd @@ -658,6 +692,34 @@ $(LIB_FSLIB:%=%_bootcd): %_bootcd: $(LIB_FSLIB:%=%_install) $(LIB_FSLIB:%=%_dist) $(LIB_FSLIB:%=%_bootcd) # +# Static libraries +# + +$(LIB_STATIC): %: + $(MAKE) -C lib/$* + +$(LIB_STATIC:%=%_depends): %_depends: + $(MAKE) -C lib/string depends + +$(LIB_STATIC:%=%_implib): %_implib: + $(MAKE) -C lib/$* implib + +$(LIB_STATIC:%=%_clean): %_clean: + $(MAKE) -C lib/$* clean + +$(LIB_STATIC:%=%_install): %_install: + $(MAKE) -C lib/$* install + +$(LIB_STATIC:%=%_dist): %_dist: + $(MAKE) -C lib/$* dist + +$(LIB_STATIC:%=%_bootcd): %_bootcd: + $(MAKE) -C lib/$* bootcd + +.PHONY: $(LIB_STATIC) $(LIB_STATIC:%=%_depends) $(LIB_STATIC:%=%_implib) $(LIB_STATIC:%=%_clean) \ + $(LIB_STATIC:%=%_install) $(LIB_STATIC:%=%_dist) $(LIB_STATIC:%=%_bootcd) + +# # Required DLLs # @@ -713,6 +775,22 @@ $(SUBSYS:%=%_bootcd): %_bootcd: $(SUBSYS:%=%_dist) $(SUBSYS:%=%_bootcd) # +# Regression testsuite +# + +$(REGTESTS): %: + $(MAKE) -C regtests + +$(REGTESTS:%=%_clean): %_clean: + $(MAKE) -C regtests clean + +$(REGTESTS:%=%_install): %_install: + $(MAKE) -C regtests install + +.PHONY: $(REGTESTS) $(REGTESTS:%=%_depends) $(SUBSYS:%=%_clean) $(REGTESTS:%=%_install) + + +# # Create an installation # @@ -741,18 +819,18 @@ install_dirs: $(RMKDIR) $(INSTALL_DIR) install_before: - #$(CP) bootdata/autorun.inf $(INSTALL_DIR)/../autorun.inf - $(CP) bootdata/readme.txt $(INSTALL_DIR)/../readme.txt + $(RLINE) bootdata/autorun.inf $(INSTALL_DIR)/../autorun.inf + $(RLINE) bootdata/readme.txt $(INSTALL_DIR)/../readme.txt $(RLINE) bootdata/hivecls.inf $(INSTALL_DIR)/hivecls.inf $(RLINE) bootdata/hivedef.inf $(INSTALL_DIR)/hivedef.inf $(RLINE) bootdata/hivesft.inf $(INSTALL_DIR)/hivesft.inf $(RLINE) bootdata/hivesys.inf $(INSTALL_DIR)/hivesys.inf $(RLINE) bootdata/txtsetup.sif $(INSTALL_DIR)/txtsetup.sif - $(CP) system.hiv $(INSTALL_DIR)/system.hiv - $(CP) media/fonts/helb____.ttf $(INSTALL_DIR)/helb____.ttf - $(CP) media/fonts/timr____.ttf $(INSTALL_DIR)/timr____.ttf + $(CP) bootdata/icon.ico $(INSTALL_DIR)/../icon.ico + $(CP) media/fonts $(INSTALL_DIR) + $(CP) media/nls $(INSTALL_DIR) -else # BOOTCD_INSTALL +else # !BOOTCD_INSTALL install_dirs: $(RMKDIR) $(INSTALL_DIR) @@ -768,9 +846,11 @@ install_before: $(CP) bootc.lst $(INSTALL_DIR)/bootc.lst $(CP) boot.bat $(INSTALL_DIR)/boot.bat $(CP) aboot.bat $(INSTALL_DIR)/aboot.bat - $(CP) system.hiv $(INSTALL_DIR)/system32/config/system.hiv - $(CP) media/fonts/helb____.ttf $(INSTALL_DIR)/media/fonts/helb____.ttf - $(CP) media/fonts/timr____.ttf $(INSTALL_DIR)/media/fonts/timr____.ttf + $(CP) media/fonts $(INSTALL_DIR)/media/fonts + $(CP) media/nls $(INSTALL_DIR)/system32 + $(CP) media/nls/c_1252.nls $(INSTALL_DIR)/system32/ansi.nls + $(CP) media/nls/c_437.nls $(INSTALL_DIR)/system32/oem.nls + $(CP) media/nls/l_intl.nls $(INSTALL_DIR)/system32/casemap.nls endif # BOOTCD_INSTALL @@ -805,7 +885,6 @@ dist_dirs: .PHONY: dist_clean dist_dirs - etags: find . -name "*.[ch]" -print | etags --language=c - diff --git a/apistatus.lst b/apistatus.lst new file mode 100755 index 0000000..c1e610f --- /dev/null +++ b/apistatus.lst @@ -0,0 +1,31 @@ +; Format: +; COMPONENT_NAME PATH_TO_COMPONENT_SOURCES +; COMPONENT_NAME - Name of the component. Eg. kernel32.dll. +; PATH_TO_COMPONENT_SOURCES - Relative path to sources (relative to +; where rgenstat is run from). +advapi32.dll reactos/lib/advapi32 +crtdll.dll reactos/lib/crtdll +gdi32.dll reactos/lib/gdi32 +iphlpapi.dll reactos/lib/iphlpapi +kernel32.dll reactos/lib/kernel32 +lz32.dll reactos/lib/lzexpand +msvcrt.dll reactos/lib/msvcrt +ole32.dll reactos/lib/ole32 +oleaut32.dll reactos/lib/oleaut32 +rpcrt4.dll reactos/lib/rpcrt4 +secur32.dll reactos/lib/secur32 +shell32.dll reactos/lib/shell32 +snmpapi.dll reactos/lib/snmpapi +user32.dll reactos/lib/user32 +version.dll reactos/lib/version +winmm.dll reactos/lib/winmm +winspool.dll reactos/lib/winspool +ws2_32.dll reactos/lib/ws2_32 +wsock32.dll reactos/lib/wsock32 +videoprt.dll reactos/drivers/dd/videoprt +ndis.dll reactos/drivers/net/ndis +tdi.dll reactos/drivers/net/tdi +class2.sys reactos/drivers/storage/class2 +scsiport.sys reactos/drivers/storage/scsiport +ntoskrnl.exe reactos/ntoskrnl +win32k.sys reactos/subsys/win32k diff --git a/apps/tests/Makefile b/apps/tests/Makefile index 0c9a699..e9ade74 100644 --- a/apps/tests/Makefile +++ b/apps/tests/Makefile @@ -6,16 +6,15 @@ PATH_TO_TOP = ../.. include $(PATH_TO_TOP)/rules.mak - -# Test applications -# alive apc args atomtest bench bitblt consume copymove count dump_shared_data -# event file gditest hello isotest lpc messagebox mstest mutex nptest -# patblt pteb regtest sectest shm thread vmtest winhello shaptest -TEST_APPS = alive apc args atomtest bench consume copymove count \ - dump_shared_data event file gditest hello isotest lpc messagebox \ - mstest mutex event file gditest hello isotest lpc messagebox mstest \ - mutex nptest pteb regtest sectest shm thread tokentest vmtest \ - winhello dibtest lock hivetest shaptest +# test_old tests +TEST_APPS = SampleWindow alive apc args atomtest bench bitblt \ +button button2 combo consume copymove count dibtest dump_shared_data \ +edit enumwnd event file gditest hello hivetest icontest isotest \ +lineclip linetest lock lpc messagebox mktime mstest multiwin \ +mutex nptest patblt pipe primitives pteb regtest sectest sertest \ +shaptest shm statst statst2 stretchblt suspend tcpsvr terminate \ +txtscale thread thread_msg tokentest vmtest winhello wm_erasebkgnd \ +wm_paint eventpair threadwait TEST_MISC = diff --git a/apps/tests/SampleWindow/.cvsignore b/apps/tests/SampleWindow/.cvsignore new file mode 100644 index 0000000..d63774a --- /dev/null +++ b/apps/tests/SampleWindow/.cvsignore @@ -0,0 +1,6 @@ +*.o +*.d +*.exe +*.coff +*.sym +*.map diff --git a/apps/tests/SampleWindow/makefile b/apps/tests/SampleWindow/makefile new file mode 100644 index 0000000..83caf11 --- /dev/null +++ b/apps/tests/SampleWindow/makefile @@ -0,0 +1,21 @@ +# $Id$ + +PATH_TO_TOP = ../../.. + +TARGET_NORC = yes + +TARGET_TYPE = program + +TARGET_APPTYPE = windows + +TARGET_NAME = window + +TARGET_SDKLIBS = kernel32.a gdi32.a + +TARGET_OBJECTS = $(TARGET_NAME).o + +include $(PATH_TO_TOP)/rules.mak + +include $(TOOLS_PATH)/helper.mk + +# EOF diff --git a/apps/tests/SampleWindow/window.c b/apps/tests/SampleWindow/window.c new file mode 100644 index 0000000..c02b9c0 --- /dev/null +++ b/apps/tests/SampleWindow/window.c @@ -0,0 +1,212 @@ +/* + * A basic example of Win32 programming in C. + * + * This source code is in the PUBLIC DOMAIN and has NO WARRANTY. + * + * Colin Peters + */ +#include +#include + +/* + * This is the window function for the main window. Whenever a message is + * dispatched using DispatchMessage (or sent with SendMessage) this function + * gets called with the contents of the message. + */ +LRESULT CALLBACK +MainWndProc (HWND hwnd, UINT nMsg, WPARAM wParam, LPARAM lParam) +{ + /* The window handle for the "Click Me" button. */ + static HWND hwndButton = 0; + static int cx, cy; /* Height and width of our button. */ + + HDC hdc; /* A device context used for drawing */ + PAINTSTRUCT ps; /* Also used during window drawing */ + RECT rc; /* A rectangle used during drawing */ + + /* + * Perform processing based on what kind of message we got. + */ + switch (nMsg) + { + case WM_CREATE: + { + /* The window is being created. Create our button + * window now. */ + TEXTMETRIC tm; + + /* First we use the system fixed font size to choose + * a nice button size. */ + hdc = GetDC (hwnd); + SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT)); + GetTextMetrics (hdc, &tm); + cx = tm.tmAveCharWidth * 30; + cy = (tm.tmHeight + tm.tmExternalLeading) * 2; + ReleaseDC (hwnd, hdc); + + /* Now create the button */ + hwndButton = CreateWindow ( + "button", /* Builtin button class */ + "Click Here", + WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, + 0, 0, cx, cy, + hwnd, /* Parent is this window. */ + (HMENU) 1, /* Control ID: 1 */ + ((LPCREATESTRUCT) lParam)->hInstance, + NULL + ); + + return 0; + break; + } + + case WM_DESTROY: + /* The window is being destroyed, close the application + * (the child button gets destroyed automatically). */ + PostQuitMessage (0); + return 0; + break; + + case WM_PAINT: + /* The window needs to be painted (redrawn). */ + hdc = BeginPaint (hwnd, &ps); + GetClientRect (hwnd, &rc); + + /* Draw "Hello, World" in the middle of the upper + * half of the window. */ + rc.bottom = rc.bottom / 2; + DrawText (hdc, "Hello, World", -1, &rc, + DT_SINGLELINE | DT_CENTER | DT_VCENTER); + + EndPaint (hwnd, &ps); + return 0; + break; + + case WM_SIZE: + /* The window size is changing. If the button exists + * then place it in the center of the bottom half of + * the window. */ + if (hwndButton && + (wParam == SIZEFULLSCREEN || + wParam == SIZENORMAL) + ) + { + rc.left = (LOWORD(lParam) - cx) / 2; + rc.top = HIWORD(lParam) * 3 / 4 - cy / 2; + MoveWindow ( + hwndButton, + rc.left, rc.top, cx, cy, TRUE); + } + break; + + case WM_COMMAND: + /* Check the control ID, notification code and + * control handle to see if this is a button click + * message from our child button. */ + if (LOWORD(wParam) == 1 && + HIWORD(wParam) == BN_CLICKED && + (HWND) lParam == hwndButton) + { + /* Our button was clicked. Close the window. */ + DestroyWindow (hwnd); + } + return 0; + break; + } + + /* If we don't handle a message completely we hand it to the system + * provided default window function. */ + return DefWindowProc (hwnd, nMsg, wParam, lParam); +} + + +int STDCALL +WinMain (HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpCmd, int nShow) +{ + HWND hwndMain; /* Handle for the main window. */ + MSG msg; /* A Win32 message structure. */ + WNDCLASSEX wndclass; /* A window class structure. */ + char* szMainWndClass = "WinTestWin"; + /* The name of the main window class */ + + /* + * First we create a window class for our main window. + */ + + /* Initialize the entire structure to zero. */ + memset (&wndclass, 0, sizeof(WNDCLASSEX)); + + /* This class is called WinTestWin */ + wndclass.lpszClassName = szMainWndClass; + + /* cbSize gives the size of the structure for extensibility. */ + wndclass.cbSize = sizeof(WNDCLASSEX); + + /* All windows of this class redraw when resized. */ + wndclass.style = CS_HREDRAW | CS_VREDRAW; + + /* All windows of this class use the MainWndProc window function. */ + wndclass.lpfnWndProc = MainWndProc; + + /* This class is used with the current program instance. */ + wndclass.hInstance = hInst; + + /* Use standard application icon and arrow cursor provided by the OS */ + wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION); + wndclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION); + wndclass.hCursor = LoadCursor (NULL, IDC_ARROW); + + /* Color the background white */ + wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH); + + /* + * Now register the window class for use. + */ + RegisterClassEx (&wndclass); + + /* + * Create our main window using that window class. + */ + hwndMain = CreateWindow ( + szMainWndClass, /* Class name */ + "Hello", /* Caption */ + WS_OVERLAPPEDWINDOW, /* Style */ + CW_USEDEFAULT, /* Initial x (use default) */ + CW_USEDEFAULT, /* Initial y (use default) */ + CW_USEDEFAULT, /* Initial x size (use default) */ + CW_USEDEFAULT, /* Initial y size (use default) */ + NULL, /* No parent window */ + NULL, /* No menu */ + hInst, /* This program instance */ + NULL /* Creation parameters */ + ); + + /* + * Display the window which we just created (using the nShow + * passed by the OS, which allows for start minimized and that + * sort of thing). + */ + ShowWindow (hwndMain, nShow); + UpdateWindow (hwndMain); + + /* + * The main message loop. All messages being sent to the windows + * of the application (or at least the primary thread) are retrieved + * by the GetMessage call, then translated (mainly for keyboard + * messages) and dispatched to the appropriate window procedure. + * This is the simplest kind of message loop. More complex loops + * are required for idle processing or handling modeless dialog + * boxes. When one of the windows calls PostQuitMessage GetMessage + * will return zero and the wParam of the message will be filled + * with the argument to PostQuitMessage. The loop will end and + * the application will close. + */ + while (GetMessage (&msg, NULL, 0, 0)) + { + TranslateMessage (&msg); + DispatchMessage (&msg); + } + return msg.wParam; +} + +/* EOF */ diff --git a/apps/tests/alive/.cvsignore b/apps/tests/alive/.cvsignore index 7e87816..d63774a 100644 --- a/apps/tests/alive/.cvsignore +++ b/apps/tests/alive/.cvsignore @@ -3,3 +3,4 @@ *.exe *.coff *.sym +*.map diff --git a/apps/tests/apc/.cvsignore b/apps/tests/apc/.cvsignore index 7e87816..d63774a 100644 --- a/apps/tests/apc/.cvsignore +++ b/apps/tests/apc/.cvsignore @@ -3,3 +3,4 @@ *.exe *.coff *.sym +*.map diff --git a/apps/tests/args/.cvsignore b/apps/tests/args/.cvsignore index 7e87816..d63774a 100644 --- a/apps/tests/args/.cvsignore +++ b/apps/tests/args/.cvsignore @@ -3,3 +3,4 @@ *.exe *.coff *.sym +*.map diff --git a/apps/tests/atomtest/.cvsignore b/apps/tests/atomtest/.cvsignore index 7e87816..d63774a 100644 --- a/apps/tests/atomtest/.cvsignore +++ b/apps/tests/atomtest/.cvsignore @@ -3,3 +3,4 @@ *.exe *.coff *.sym +*.map diff --git a/apps/tests/bench/.cvsignore b/apps/tests/bench/.cvsignore index 7e87816..d63774a 100644 --- a/apps/tests/bench/.cvsignore +++ b/apps/tests/bench/.cvsignore @@ -3,3 +3,4 @@ *.exe *.coff *.sym +*.map diff --git a/apps/tests/bitblt/.cvsignore b/apps/tests/bitblt/.cvsignore index 7e87816..d63774a 100644 --- a/apps/tests/bitblt/.cvsignore +++ b/apps/tests/bitblt/.cvsignore @@ -3,3 +3,4 @@ *.exe *.coff *.sym +*.map diff --git a/apps/tests/bitblt/bitblt.c b/apps/tests/bitblt/bitblt.c index d8d2424..90f4d2f 100644 --- a/apps/tests/bitblt/bitblt.c +++ b/apps/tests/bitblt/bitblt.c @@ -22,9 +22,11 @@ LRESULT CALLBACK MainWndProc(HWND HWnd, UINT Msg, WPARAM WParam, int APIENTRY WinMain(HINSTANCE HInstance, HINSTANCE HPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { + WNDCLASS wc; + MSG msg; + HInst = HInstance; - WNDCLASS wc; memset(&wc, 0, sizeof(WNDCLASS)); wc.style = CS_VREDRAW | CS_HREDRAW | CS_DBLCLKS; @@ -51,7 +53,6 @@ int APIENTRY WinMain(HINSTANCE HInstance, HINSTANCE HPrevInstance, ShowWindow(HWnd, nCmdShow); UpdateWindow(HWnd); - MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); diff --git a/apps/tests/button/.cvsignore b/apps/tests/button/.cvsignore new file mode 100644 index 0000000..e247138 --- /dev/null +++ b/apps/tests/button/.cvsignore @@ -0,0 +1,6 @@ +*.o +*.d +*.exe +*.coff +*.sym +*.map \ No newline at end of file diff --git a/apps/tests/button/Makefile b/apps/tests/button/Makefile new file mode 100644 index 0000000..bdfc46f --- /dev/null +++ b/apps/tests/button/Makefile @@ -0,0 +1,20 @@ + +PATH_TO_TOP = ../../.. + +TARGET_NORC = yes + +TARGET_TYPE = program + +TARGET_APPTYPE = windows + +TARGET_NAME = btntest + +TARGET_SDKLIBS = kernel32.a gdi32.a + +TARGET_OBJECTS = buttontst.o + +include $(PATH_TO_TOP)/rules.mak + +include $(TOOLS_PATH)/helper.mk + +# EOF diff --git a/apps/tests/button/buttontst.c b/apps/tests/button/buttontst.c new file mode 100644 index 0000000..9c7c74d --- /dev/null +++ b/apps/tests/button/buttontst.c @@ -0,0 +1,108 @@ +/* Based on Radoslaw Sokol's static control test. */ +#include + +static LPSTR BUTTON_CLASS = "BUTTON"; +static LPSTR TEST_WND_CLASS = "TESTWND"; + +#ifdef NDEBUG + #define DPRINT(s) (void)0 +#else + #define DPRINT(s) OutputDebugStringA("BUTTONTEST: " s "\n") +#endif + +HINSTANCE AppInstance = NULL; + +LRESULT WmCreate( + HWND Wnd) +{ + UCHAR i; + DPRINT("WM_CREATE (enter)."); + DPRINT("test 1"); + CreateWindowEx(0, BUTTON_CLASS, "PushButton", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE, + 10, 10, 150, 30, Wnd, NULL, AppInstance, NULL); + DPRINT("test 2"); + CreateWindowEx(0, BUTTON_CLASS, "DefPushButton", BS_DEFPUSHBUTTON | WS_CHILD | WS_VISIBLE, + 10, 40, 150, 30, Wnd, NULL, AppInstance, NULL); + DPRINT("test 3"); + CreateWindowEx(0, BUTTON_CLASS, "AutoRadioButton", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE, + 10, 70, 150, 30, Wnd, NULL, AppInstance, NULL); + DPRINT("test 4"); + CreateWindowEx(0, BUTTON_CLASS, "AutoCheckBox", BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE, + 10, 100, 150, 30, Wnd, NULL, AppInstance, NULL); + + DPRINT("WM_CREATE (leave)."); + return 0; +} + +LRESULT CALLBACK TestWndProc( + HWND Wnd, + UINT Msg, + WPARAM wParam, + LPARAM lParam) +{ + switch (Msg) { + case WM_CREATE: + return WmCreate(Wnd); + case WM_DESTROY: + PostQuitMessage(0); + return 0; + default: + return DefWindowProc(Wnd, Msg, wParam, lParam); + } +} + +int STDCALL WinMain( + HINSTANCE hInstance, + HINSTANCE hPrevInstance, + LPSTR lpCmdLine, + int nShowCmd) +{ + ATOM Result; + MSG Msg; + HWND MainWindow; + WNDCLASSEX TestWndClass = {0}; + DPRINT("Application starting up."); + // Remember instance handle. + AppInstance = GetModuleHandle(NULL); + // Register test window class. + TestWndClass.cbSize = sizeof(WNDCLASSEX); + TestWndClass.lpfnWndProc = &TestWndProc; + TestWndClass.hInstance = AppInstance; + TestWndClass.hCursor = LoadCursor(0, IDC_ARROW); + TestWndClass.hbrBackground = CreateSolidBrush(RGB(255,255,230)); + TestWndClass.lpszClassName = TEST_WND_CLASS; + Result = RegisterClassEx(&TestWndClass); + if (Result == 0) { + DPRINT("Error registering class."); + MessageBox(0, "Error registering test window class.", + "Button control test", MB_ICONSTOP | MB_OK); + ExitProcess(0); + } + // Create main window. + DPRINT("Creating main window."); + MainWindow = CreateWindowEx(WS_EX_APPWINDOW | WS_EX_CLIENTEDGE, + TEST_WND_CLASS, "Button test", + WS_OVERLAPPEDWINDOW, 50, 50, 180, 365, + NULL, NULL, AppInstance, NULL); + if (MainWindow == 0) { + DPRINT("Error creating main window."); + UnregisterClass(TEST_WND_CLASS, AppInstance); + MessageBox(0, "Error creating test window.", + "Static control test", MB_ICONSTOP | MB_OK); + ExitProcess(0); + } + DPRINT("Showing main window."); + ShowWindow(MainWindow, SW_SHOWNORMAL); + UpdateWindow(MainWindow); + // Run message loop. + DPRINT("Entering message loop."); + while (GetMessage(&Msg, NULL, 0, 0) > 0) { + TranslateMessage(&Msg); + DispatchMessage(&Msg); + } + // Unregister window class. + UnregisterClass(TEST_WND_CLASS, AppInstance); + DPRINT("Exiting."); + + return Msg.wParam; +} diff --git a/apps/tests/button2/.cvsignore b/apps/tests/button2/.cvsignore new file mode 100644 index 0000000..e247138 --- /dev/null +++ b/apps/tests/button2/.cvsignore @@ -0,0 +1,6 @@ +*.o +*.d +*.exe +*.coff +*.sym +*.map \ No newline at end of file diff --git a/apps/tests/button2/Makefile b/apps/tests/button2/Makefile new file mode 100644 index 0000000..6f5b5b2 --- /dev/null +++ b/apps/tests/button2/Makefile @@ -0,0 +1,20 @@ + +PATH_TO_TOP = ../../.. + +TARGET_NORC = yes + +TARGET_TYPE = program + +TARGET_APPTYPE = windows + +TARGET_NAME = btntest2 + +TARGET_SDKLIBS = kernel32.a gdi32.a + +TARGET_OBJECTS = buttontst2.o + +include $(PATH_TO_TOP)/rules.mak + +include $(TOOLS_PATH)/helper.mk + +# EOF diff --git a/apps/tests/button2/buttontst2.c b/apps/tests/button2/buttontst2.c new file mode 100644 index 0000000..836d188 --- /dev/null +++ b/apps/tests/button2/buttontst2.c @@ -0,0 +1,219 @@ +#include +#include + +HFONT tf; +LRESULT WINAPI MainWndProc(HWND, UINT, WPARAM, LPARAM); + +int WINAPI +WinMain(HINSTANCE hInstance, + HINSTANCE hPrevInstance, + LPSTR lpszCmdLine, + int nCmdShow) +{ + WNDCLASS wc; + MSG msg; + HWND hWnd; + HWND hbtn[26]; + + wc.lpszClassName = "ButtonTest"; + wc.lpfnWndProc = MainWndProc; + wc.style = CS_VREDRAW | CS_HREDRAW; + wc.hInstance = hInstance; + wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); + wc.hCursor = LoadCursor(NULL, IDC_ARROW); + wc.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH); + wc.lpszMenuName = NULL; + wc.cbClsExtra = 0; + wc.cbWndExtra = 0; + if (RegisterClass(&wc) == 0) + { + fprintf(stderr, "RegisterClass failed (last error 0x%X)\n", + GetLastError()); + return(1); + } + + hWnd = CreateWindow("ButtonTest", + "Button Test", + WS_OVERLAPPEDWINDOW, + 0, + 0, + CW_USEDEFAULT, + CW_USEDEFAULT, + NULL, + NULL, + hInstance, + NULL); + if (hWnd == NULL) + { + fprintf(stderr, "CreateWindow failed (last error 0x%X)\n", + GetLastError()); + return(1); + } + + tf = CreateFontA(14, 0, 0, TA_BASELINE, FW_NORMAL, FALSE, FALSE, FALSE, + ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, + DEFAULT_QUALITY, FIXED_PITCH|FF_DONTCARE, "Timmons"); + + ShowWindow(hWnd, nCmdShow); + + hbtn[0] = CreateWindow( + "BUTTON","BS_DEFPUSHBUTTON",WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON, + 10, 10, 200, 40, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); + + hbtn[1] = CreateWindow( + "BUTTON","BS_3STATE",WS_VISIBLE | WS_CHILD | BS_3STATE, + 10, 60, 200, 20, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); + + hbtn[2] = CreateWindow( + "BUTTON","BS_AUTO3STATE",WS_VISIBLE | WS_CHILD | BS_AUTO3STATE, + 10, 90, 200, 20, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); + + hbtn[3] = CreateWindow( + "BUTTON","BS_AUTOCHECKBOX",WS_VISIBLE | WS_CHILD | BS_AUTOCHECKBOX, + 10, 120, 200, 20, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); + + hbtn[4] = CreateWindow( + "BUTTON","BS_AUTORADIOBUTTON",WS_VISIBLE | WS_CHILD | BS_AUTORADIOBUTTON, + 10, 150, 200, 20, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); + + hbtn[5] = CreateWindow( + "BUTTON","BS_CHECKBOX",WS_VISIBLE | WS_CHILD | BS_CHECKBOX, + 10, 180, 200, 20, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); + + hbtn[6] = CreateWindow( + "BUTTON","BS_GROUPBOX",WS_VISIBLE | WS_CHILD | BS_GROUPBOX, + 10, 210, 200, 80, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); + + hbtn[7] = CreateWindow( + "BUTTON","BS_PUSHBUTTON",WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON, + 20, 230, 180, 30, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); + + hbtn[8] = CreateWindow( + "BUTTON","BS_RADIOBUTTON",WS_VISIBLE | WS_CHILD | BS_RADIOBUTTON, + 10, 300, 200, 20, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); + + hbtn[9] = CreateWindow( + "BUTTON","BS_AUTORADIOBUTTON",WS_VISIBLE | WS_CHILD | BS_AUTORADIOBUTTON, + 220, 160, 200, 20, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); + + hbtn[10] = CreateWindow( + "BUTTON","BS_DEFPUSHBUTTON|BS_BOTTOM",WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON | BS_BOTTOM, + 220, 10, 250, 40, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); + + hbtn[11] = CreateWindow( + "BUTTON","BS_DEFPUSHBUTTON|BS_LEFT",WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON | BS_LEFT, + 480, 10, 250, 40, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); + + hbtn[12] = CreateWindow( + "BUTTON","BS_DEFPUSHBUTTON|BS_RIGHT|BS_MULTILINE",WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON | BS_RIGHT |BS_MULTILINE, + 740, 10, 150, 60, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); + + hbtn[13] = CreateWindow( + "BUTTON","BS_AUTORADIOBUTTON|BS_TOP",WS_VISIBLE | WS_CHILD | BS_AUTORADIOBUTTON | BS_TOP, + 220, 60, 200, 60, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); + + // Other Combinations + + hbtn[14] = CreateWindow( + "BUTTON","BS_AUTORADIOBUTTON|BS_BOTTOM|BS_MULTILINE",WS_VISIBLE | WS_CHILD | BS_AUTORADIOBUTTON | BS_BOTTOM | BS_MULTILINE, + 480, 60, 200, 60, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); + + hbtn[15] = CreateWindow( + "BUTTON","BS_AUTORADIOBUTTON|BS_LEFT",WS_VISIBLE | WS_CHILD | BS_AUTORADIOBUTTON | BS_LEFT, + 740, 80, 200, 20, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); + + hbtn[16] = CreateWindow( + "BUTTON","BS_AUTORADIOBUTTON|BS_RIGHT|BS_TOP",WS_VISIBLE | WS_CHILD | BS_AUTORADIOBUTTON | BS_RIGHT | BS_TOP, + 220, 130, 200, 20, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); + + hbtn[17] = CreateWindow( + "BUTTON","BS_AUTORADIOBUTTON|BS_TOP|BS_MULTILINE",WS_VISIBLE | WS_CHILD | BS_AUTORADIOBUTTON | BS_TOP| BS_MULTILINE, + 480, 130, 200, 60, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); + + hbtn[18] = CreateWindow( + "BUTTON","BS_AUTOCHECKBOX|BS_BOTTOM|BS_MULTILINE",WS_VISIBLE | WS_CHILD | BS_AUTOCHECKBOX | BS_BOTTOM | BS_MULTILINE, + 740, 130, 200, 60, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); + + hbtn[19] = CreateWindow( + "BUTTON","BS_AUTOCHECKBOX|BS_TOP|BS_MULTILINE",WS_VISIBLE | WS_CHILD | BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE, + 480, 190, 200, 60, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); + + hbtn[20] = CreateWindow( + "BUTTON","BS_AUTOCHECKBOX|BS_LEFT|BS_MULTILINE",WS_VISIBLE | WS_CHILD | BS_AUTOCHECKBOX | BS_LEFT | BS_MULTILINE, + 220, 230, 200, 60, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); + + hbtn[21] = CreateWindow( + "BUTTON","BS_AUTOCHECKBOX|BS_RIGHT|BS_MULTILINE",WS_VISIBLE | WS_CHILD | BS_AUTOCHECKBOX | BS_RIGHT | BS_MULTILINE, + 480, 240, 200, 60, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); + + hbtn[22] = CreateWindow( + "BUTTON","BS_GROUPBOX|BS_TOP",WS_VISIBLE | WS_CHILD | BS_GROUPBOX | BS_TOP, + 10, 340, 200, 60, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); + + hbtn[23] = CreateWindow( + "BUTTON","BS_GROUPBOX|BS_BOTTOM",WS_VISIBLE | WS_CHILD | BS_GROUPBOX | BS_BOTTOM, + 10, 410, 200, 60, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); + + hbtn[24] = CreateWindow( + "BUTTON","BS_GROUPBOXBOX|BS_LEFT",WS_VISIBLE | WS_CHILD | BS_GROUPBOX | BS_LEFT, + 520, 340, 200, 60, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); + + hbtn[25] = CreateWindow( + "BUTTON","BS_GROUPBOX|BS_RIGHT|BS_BOTTOM",WS_VISIBLE | WS_CHILD | BS_GROUPBOX | BS_BOTTOM | BS_RIGHT, + 300, 340, 200, 60, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); + + while(GetMessage(&msg, NULL, 0, 0)) + { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + + DeleteObject(tf); + + return msg.wParam; +} + +LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) +{ + PAINTSTRUCT ps; + HDC hDC; + + switch(msg) + { + case WM_PAINT: + hDC = BeginPaint(hWnd, &ps); + SelectObject(hDC, tf); + EndPaint(hWnd, &ps); + break; + + case WM_DESTROY: + PostQuitMessage(0); + break; + + case WM_COMMAND: + switch(HIWORD(wParam)) + { + case BN_CLICKED: + printf("BUTTON CLICKED !\n"); + break; + case BN_DBLCLK: + printf("BUTTON DOUBLE-CLICKED !\n"); + break; + case BN_PUSHED: + printf("BUTTON PUSHED !\n"); + break; + case BN_PAINT: + printf("BUTTON PAINTED !\n"); + break; + case BN_UNPUSHED: + printf("BUTTON UNPUSHED !\n"); + break; + + } + break; + + default: + return DefWindowProc(hWnd, msg, wParam, lParam); + } + return 0; +} diff --git a/apps/tests/capclock/.cvsignore b/apps/tests/capclock/.cvsignore new file mode 100644 index 0000000..d63774a --- /dev/null +++ b/apps/tests/capclock/.cvsignore @@ -0,0 +1,6 @@ +*.o +*.d +*.exe +*.coff +*.sym +*.map diff --git a/apps/tests/capclock/Makefile b/apps/tests/capclock/Makefile new file mode 100644 index 0000000..0e849b8 --- /dev/null +++ b/apps/tests/capclock/Makefile @@ -0,0 +1,18 @@ + +PATH_TO_TOP = ../../.. + +TARGET_TYPE = program + +TARGET_APPTYPE = windows + +TARGET_NAME = capclock + +TARGET_SDKLIBS = kernel32.a + +TARGET_OBJECTS = capclock.o + +include $(PATH_TO_TOP)/rules.mak + +include $(TOOLS_PATH)/helper.mk + +# EOF diff --git a/apps/tests/capclock/capclock.c b/apps/tests/capclock/capclock.c new file mode 100644 index 0000000..7701af0 --- /dev/null +++ b/apps/tests/capclock/capclock.c @@ -0,0 +1,69 @@ +/* $Id$ + * + * DESCRIPTION: Simple Win32 Caption Clock + * PROJECT : ReactOS (test applications) + * AUTHOR : Emanuele Aliberti + * DATE : 2003-09-03 + * LICENSE : GNU GPL v2.0 + */ +#include + +UINT Timer = 1; + +static BOOL CALLBACK DialogFunc(HWND,UINT,WPARAM,LPARAM); +static VOID CALLBACK TimerProc(HWND,UINT,UINT,DWORD); + + +INT STDCALL WinMain (HINSTANCE hinst, HINSTANCE hinstPrev, LPSTR lpCmdLine, INT nCmdShow) +{ + WNDCLASS wc; + + ZeroMemory (& wc, sizeof wc); + wc.lpfnWndProc = DefDlgProc; + wc.cbWndExtra = DLGWINDOWEXTRA; + wc.hInstance = hinst; + wc.hCursor = LoadCursor(NULL, IDC_ARROW); + wc.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1); + wc.lpszClassName = "CapClock"; + RegisterClass (& wc); + return DialogBox(hinst, MAKEINTRESOURCE(2), NULL, (DLGPROC) DialogFunc); + +} +static int InitializeApp (HWND hDlg,WPARAM wParam, LPARAM lParam) +{ + Timer = SetTimer (hDlg,Timer,1000,TimerProc); + TimerProc (hDlg,0,0,0); + return 1; +} +static BOOL CALLBACK DialogFunc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) +{ + switch (msg) + { + case WM_INITDIALOG: + InitializeApp(hwndDlg,wParam,lParam); + return TRUE; + case WM_CLOSE: + KillTimer (hwndDlg,Timer); + EndDialog(hwndDlg,0); + return TRUE; + } + return FALSE; +} +static VOID CALLBACK TimerProc (HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime) +{ + CHAR text [20]; + SYSTEMTIME lt; + + GetLocalTime (& lt); + wsprintf ( + text, + "%d-%02d-%02d %02d:%02d:%02d", + lt.wYear, + lt.wMonth, + lt.wDay, + lt.wHour, + lt.wMinute, + lt.wSecond); + SetWindowText (hwnd, text); +} +/* EOF */ diff --git a/apps/tests/capclock/capclock.ico b/apps/tests/capclock/capclock.ico new file mode 100644 index 0000000000000000000000000000000000000000..0b52fb0ccde9b5887ef492e7c6639565f413d9ab GIT binary patch literal 766 zcmd5%!3_f;3^S)bn4oW-9iyY=88%=X#b>UCvhA>0tB9v9xyu(;K}$R z67ePiTm!Z5CIBx)JkT>G1hrNQtzWce8Np*EbDKrIm<(RBmw)h_H+?=b`|ra`DI7)s uRZcC@HxnDsx$BEt!hR1r_xU#;->v^P&LwOM&J}yedgZ&`o6K?Vd)Wv5PX!48 literal 0 HcmV?d00001 diff --git a/apps/tests/capclock/capclock.rc b/apps/tests/capclock/capclock.rc new file mode 100644 index 0000000..886043d --- /dev/null +++ b/apps/tests/capclock/capclock.rc @@ -0,0 +1,52 @@ +#include +#include "../../../include/reactos/resource.h" + +/* Icons */ + +1 ICON "capclock.ico" + +/* Dialogs */ + +2 DIALOG 6, 18, 132, 0 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +FONT 8, "Microsoft Sans Serif" +BEGIN +END + +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +/* Version information. */ + +VS_VERSION_INFO VERSIONINFO + FILEVERSION RES_UINT_FV_MAJOR,RES_UINT_FV_MINOR,RES_UINT_FV_REVISION,RES_UINT_FV_BUILD + PRODUCTVERSION RES_UINT_PV_MAJOR,RES_UINT_PV_MINOR,RES_UINT_PV_REVISION,RES_UINT_PV_BUILD + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x40004L + FILETYPE 0x2L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "CompanyName", RES_STR_COMPANY_NAME + VALUE "FileDescription", "ReactOS W32 Caption Clock\0" + VALUE "FileVersion", RES_STR_PRODUCT_VERSION + VALUE "InternalName", "capclock\0" + VALUE "LegalCopyright", RES_STR_LEGAL_COPYRIGHT + VALUE "OriginalFilename", "capclock.exe\0" + VALUE "ProductName", RES_STR_PRODUCT_NAME + VALUE "ProductVersion", RES_STR_PRODUCT_VERSION + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END + diff --git a/apps/tests/combo/.cvsignore b/apps/tests/combo/.cvsignore new file mode 100644 index 0000000..e247138 --- /dev/null +++ b/apps/tests/combo/.cvsignore @@ -0,0 +1,6 @@ +*.o +*.d +*.exe +*.coff +*.sym +*.map \ No newline at end of file diff --git a/apps/tests/combo/combotst.c b/apps/tests/combo/combotst.c new file mode 100644 index 0000000..614b42e --- /dev/null +++ b/apps/tests/combo/combotst.c @@ -0,0 +1,687 @@ +/* ComboBox Control Test for ReactOS. + +* This is a test program. Not made to be fast, small +* easy to mantain, or portable. + +* I'm not erasing text because I don't want to use other functions from the API +* or make this more complex. Also Fonts are not heavily used. + +* This source code is in the PUBLIC DOMAIN and has NO WARRANTY. +* by Waldo Alvarez Cañizares , started July 11, 2003. */ + +//#define WIN32_LEAN_AND_MEAN +#include +#include "utils.h" + +#define CONTROLCLASS "COMBOBOX" /* the class name */ +#define CONTROLCLASSW L"COMBOBOX" /* the class name in unicode*/ + +#define WINDOWWIDTH 560 +#define WINDOWHEIGHT 350 + +/* --- Command IDs of some buttons --- */ +#define CREATEWINDOW_ID 106 +#define CREATEWINDOWEX_ID 107 +#define CREATEWINDOWW_ID 108 +#define INITPAGE_ID 400 +#define SECONDPAGE_ID 401 +#define BACKFIRSTPAGE_ID 402 + +/* --- Position where the result text goes --- */ +#define ResultX 0 +#define ResultY 305 + +/* --- Position where the notify text goes --- */ +#define NOTIFYX 390 +#define NOTIFYY 285 + +/* --- The width of most buttons --- */ +#define CHECKBUTWIDTH 190 +#define SCROLLAMOUNT -15 + +/* Size of buffer to hold resulting strings from conversion +and returned by messages */ +#define BUFFERLEN 80 +char TextBuffer[BUFFERLEN]={'R','e','s','u','l','t',':',' '}; + +HWND g_hwnd = NULL; +HINSTANCE g_hInst = NULL; + +int pos = 10; +int n = 0; +int yButPos = 10; +int xButPos = 0; + +DWORD ComboStyle = 0; + +/* --- Control coordinates --- */ +#define CONTROLPOSX 390 +#define CONTROLPOSY 10 +DWORD ControlWidth = 160; +DWORD ControlHeight = 150; + +static RECT srect = {CONTROLPOSX,CONTROLPOSY,WINDOWWIDTH,WINDOWHEIGHT}; + +HWND hwndEdit = NULL; + +RECT rect; +DWORD StartP,EndP; +HWND hwnd; /* main window handle */ + +char AddString[] = "string added"; + +typedef void FunctionHandler(HWND,DWORD,WPARAM,LPARAM); +typedef FunctionHandler* LPFUNCTIONHANDLER; + +PrintTextXY(char* Text,int x,int y,int len, RECT rect) + { + HDC hdc; + hdc = GetDC (g_hwnd); + SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT)); + + TextOut (hdc, x,y,Text,len); + ReleaseDC (g_hwnd, hdc); + + ValidateRect (g_hwnd, &rect); + } + +static +VOID +HandlePrintReturnHex(HWND handle,DWORD Msg,WPARAM wParam,LPARAM lParam) + { + LRESULT ret; + RECT rect; + ret = SendMessage(handle,Msg,wParam,lParam); + htoa((unsigned int)ret,&TextBuffer[8]); + GetWindowRect(g_hwnd,&rect); + PrintTextXY(TextBuffer,ResultX,ResultY,16,rect); + } + + +static +VOID +HandlePrintReturnStr(HWND handle,DWORD Msg,WPARAM wParam,LPARAM lParam) + { + LRESULT ret; + RECT rect; + + TextBuffer[8] = (char)(BUFFERLEN - 8); /* Setting the max size to put chars in first byte */ + ret = SendMessage(handle,Msg,wParam,lParam); + GetWindowRect(g_hwnd,&rect); + PrintTextXY(TextBuffer,ResultX,ResultY,8+(int)ret,rect); + } + +static +VOID +HandlePrintRect(HWND handle,DWORD Msg,WPARAM wParam,LPARAM lParam) + { + RECT rect; + TextBuffer[8] = (char)(BUFFERLEN - 8); /* Setting the max size to put chars in first byte */ + SendMessage(handle,Msg,wParam,lParam); + + htoa(rect.top,&TextBuffer[8]); + TextBuffer[8+8] = ' '; + htoa(rect.bottom,&TextBuffer[8+8+1]); + TextBuffer[8+8+8+1] = ' '; + htoa(rect.left,&TextBuffer[8+8+8+1+1]); + TextBuffer[8+8+8+8+1+1] = ' '; + htoa(rect.right,&TextBuffer[8+8+8+8+1+1+1]); + + GetWindowRect(g_hwnd,&rect); + PrintTextXY(TextBuffer,ResultX,ResultY,8+4*9-1,rect); + } + +struct + { + char* Text; /* Text for the button */ + DWORD MsgCode; /* Message Code */ + WPARAM wParam; /* Well hope you can understand this */ + LPARAM lParam; /* ditto */ + LPFUNCTIONHANDLER Handler; /* Funtion called to handle the result of each message */ + } +Msg[] = + { + "CB_ADDSTRING",CB_ADDSTRING,0,(LPARAM)&AddString,&HandlePrintReturnHex, + "CB_ADDSTRING - long",CB_ADDSTRING,0,(LPARAM)"very loooooooooong striiinnnnnnnnnggg",&HandlePrintReturnHex, + "CB_DELETESTRING",CB_DELETESTRING,2,0,&HandlePrintReturnHex, /* remember to catch WM_DELETEITEM*/ + + /* What a message, why M$ decided to implement his thing ? */ + "CB_DIR - drives",CB_DIR,DDL_DRIVES, + /* Hoping that most machines have this */ + (LPARAM)"C:\\", + &HandlePrintReturnHex, + + "CB_DIR - dirs",CB_DIR,DDL_DIRECTORY,(LPARAM)"C:\\*",&HandlePrintReturnHex, + + "CB_DIR - files",CB_DIR, + DDL_ARCHIVE | DDL_EXCLUSIVE | DDL_HIDDEN | DDL_READONLY | DDL_READWRITE | DDL_SYSTEM, + (LPARAM)"C:\\*",&HandlePrintReturnHex, + + /* Do not forget WM_COMPAREITEM */ + + "CB_FINDSTRING",CB_FINDSTRING,1,(LPARAM)"str",&HandlePrintReturnHex, + "CB_FINDSTRINGEXACT(-1)",CB_FINDSTRINGEXACT,-1,(LPARAM)&AddString,&HandlePrintReturnHex, + "CB_FINDSTRINGEXACT(2)",CB_FINDSTRINGEXACT,2,(LPARAM)&AddString,&HandlePrintReturnHex, + + /* "CB_GETCOMBOBOXINFO",CB_GETCOMBOBOXINFO,0,0,&HandlePrintReturnHex, winXP & .net server remember to handle the struct */ + + "CB_GETCOUNT",CB_GETCOUNT,0,0,&HandlePrintReturnHex, + + "CB_GETCURSEL",CB_GETCURSEL,0,0,&HandlePrintReturnHex, + + /* To implement "CB_GETEDITSEL - vars",CB_GETEDITSEL,,,&HandlePrintReturnHex, */ + + "CB_GETEXTENDEDUI",CB_GETEXTENDEDUI,0,0,&HandlePrintReturnHex, + "CB_GETHORIZONTALEXTENT",CB_GETHORIZONTALEXTENT,0,0,&HandlePrintReturnHex, + + + + "CB_GETLBTEXT",CB_GETLBTEXT,1,(LPARAM)&TextBuffer[8],&HandlePrintReturnStr, + "CB_GETLBTEXTLEN",CB_GETLBTEXTLEN,1,0,&HandlePrintReturnHex, + "CB_GETLOCALE",CB_GETLOCALE,0,0,&HandlePrintReturnHex, + + /* "CB_GETMINVISIBLE",CB_GETMINVISIBLE,0,0,&HandlePrintReturnHex, Included in Windows XP and Windows .NET Server. */ + + "CB_GETTOPINDEX",CB_GETTOPINDEX,0,0,&HandlePrintReturnHex, + + "CB_INITSTORAGE",CB_INITSTORAGE,10,200,&HandlePrintReturnHex, + "CB_INSERTSTRING",CB_INSERTSTRING,2,(LPARAM)"inserted string",&HandlePrintReturnHex, + + "CB_LIMITTEXT",CB_LIMITTEXT,10,0,&HandlePrintReturnHex, + "CB_RESETCONTENT",CB_RESETCONTENT ,0,0,&HandlePrintReturnHex, + "CB_SELECTSTRING",CB_SELECTSTRING,2,(LPARAM)"str",&HandlePrintReturnHex, + "CB_SETCURSEL",CB_SETCURSEL,1,0,&HandlePrintReturnHex, + + "CB_SETDROPPEDWIDTH",CB_SETDROPPEDWIDTH,250,0,&HandlePrintReturnHex, + + "CB_SETEXTENDEDUI - set",CB_SETEXTENDEDUI,TRUE,0,&HandlePrintReturnHex, + "CB_SETEXTENDEDUI - clear",CB_SETEXTENDEDUI,FALSE,0,&HandlePrintReturnHex, + + /* + * win2k have a small bug with this ^ , if you press F4 while it is cleared, + * the combobox is using style cbs_dropdown + * and the pointer is over the edit box then the mouse pointer is not changed + * to an arrow + */ + + "CB_SETHORIZONTALEXTENT",CB_SETHORIZONTALEXTENT,500,0,&HandlePrintReturnHex, + + "CB_GETITEMDATA",CB_GETITEMDATA,1,0,&HandlePrintReturnHex, + "CB_SETITEMDATA",CB_SETITEMDATA,1,0x791031,&HandlePrintReturnHex, + + "CB_SETITEMHEIGHT",CB_SETITEMHEIGHT,-1,30,&HandlePrintReturnHex, + "CB_GETITEMHEIGHT",CB_GETITEMHEIGHT,2,0,&HandlePrintReturnHex, + + /* "CB_SETMINVISIBLE",CB_SETMINVISIBLE,4,0,&HandlePrintReturnHex, Included in Windows XP and Windows .NET Server */ + + "CB_GETEDITSEL",CB_GETEDITSEL,(WPARAM)NULL,(LPARAM)NULL,&HandlePrintReturnHex, + "CB_SETEDITSEL",CB_SETEDITSEL,0,0x00020005,&HandlePrintReturnHex, + "CB_SETEDITSEL - clear",CB_SETEDITSEL,0,0xFFFFFFFF,&HandlePrintReturnHex, + + "CB_SETTOPINDEX",CB_SETTOPINDEX,3,0,&HandlePrintReturnHex, + + "CB_SHOWDROPDOWN - true",CB_SHOWDROPDOWN,TRUE,0,&HandlePrintReturnHex, + "CB_SHOWDROPDOWN - false",CB_SHOWDROPDOWN,FALSE,0,&HandlePrintReturnHex, + + "CB_GETDROPPEDCONTROLRECT",CB_GETDROPPEDCONTROLRECT,0,(LPARAM)&rect,&HandlePrintRect, + "CB_GETDROPPEDSTATE",CB_GETDROPPEDSTATE,0,0,&HandlePrintReturnHex, + "CB_GETDROPPEDWIDTH",CB_GETDROPPEDWIDTH,0,0,&HandlePrintReturnHex, + + "WM_PASTE",WM_PASTE,0,0,&HandlePrintReturnHex, + }; + +#define MAXMESSAGEBUTTONS 40 + +struct + { + char* Name; /* Text for the button */ + DWORD Code; /* Style Code */ + } +Styles[] = { + "WS_DISABLED",WS_DISABLED, + "CBS_AUTOHSCROLL",CBS_AUTOHSCROLL, + "CBS_DISABLENOSCROLL",CBS_DISABLENOSCROLL, + "CBS_DROPDOWN",CBS_DROPDOWN, + "CBS_DROPDOWNLIST",CBS_DROPDOWNLIST, + "CBS_HASSTRINGS",CBS_HASSTRINGS, + "CBS_LOWERCASE",CBS_LOWERCASE, + "CBS_NOINTEGRALHEIGHT",CBS_NOINTEGRALHEIGHT, + "CBS_OEMCONVERT",CBS_OEMCONVERT, + "CBS_OWNERDRAWFIXED",CBS_OWNERDRAWFIXED, + "CBS_OWNERDRAWVARIABLE",CBS_OWNERDRAWVARIABLE, + "CBS_SIMPLE",CBS_SIMPLE, + "CBS_SORT",CBS_SORT, + "CBS_UPPERCASE",CBS_UPPERCASE, + "CBS_DISABLENOSCROLL",CBS_DISABLENOSCROLL, + "WS_HSCROLL",WS_HSCROLL, + "WS_VSCROLL",WS_VSCROLL + }; + +/* The number of check buttons we have. +* Maybe some calculations at compile time would be better +*/ + +#define NUMBERCHECKS 17 + +#define NUMBERBUTTONS NUMBERCHECKS + 7 +HWND Buttons[NUMBERBUTTONS]; +HWND MessageButtons[MAXMESSAGEBUTTONS]; +HWND Back1But,Back2But; +HWND NextBut; + +HWND +CreateCheckButton(const char* lpWindowName, DWORD xSize, DWORD id) + { + HWND h; + h = CreateWindowEx(0, + "BUTTON", + lpWindowName, + WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX, + xButPos, /* x */ + yButPos, /* y */ + xSize, /* nWidth */ + 20, /* nHeight */ + g_hwnd, + (HMENU) id, + g_hInst, + NULL + ); + yButPos += 21; + return h; + } + +HWND +CreatePushButton(const char* lpWindowName, DWORD xSize, DWORD id,DWORD Style) + { + + HWND h = CreateWindow("BUTTON", + lpWindowName, + WS_CHILD | BS_PUSHBUTTON | Style, + xButPos, /* x */ + yButPos, /* y */ + xSize, /* nWidth */ + 20, /* nHeight */ + g_hwnd, + (HMENU) id, + g_hInst, + NULL + ); + + yButPos += 21; + return h; + } + +VOID +ReadNHide() + { + int i; + ComboStyle = 0; + for (i=0 ; i< NUMBERCHECKS ; i++) + { + if(BST_CHECKED == SendMessage(Buttons[i],BM_GETCHECK,0,0)) + ComboStyle |= Styles[i].Code; + ShowWindow(Buttons[i],SW_HIDE); + } + + for (; i< NUMBERBUTTONS ; i++)ShowWindow(Buttons[i],SW_HIDE); + for (i=0 ; i< 26 ; i++) ShowWindow(MessageButtons[i],SW_SHOW); + + ShowWindow(Back1But,SW_SHOW); + ShowWindow(NextBut,SW_SHOW); + } + +VOID +ForwardToSecondPage() + { + int i; + for (i=0;i<26;i++)ShowWindow(MessageButtons[i],SW_HIDE); + for(;i= 600) + { + Msg[LOWORD(wParam)-600].Handler(hwndEdit, + Msg[LOWORD(wParam)-600].MsgCode, + Msg[LOWORD(wParam)-600].wParam, + Msg[LOWORD(wParam)-600].lParam); + break; + } + + switch(LOWORD(wParam)){ + + case 100: + ControlWidth += 10; + break; + + case 101: + ControlWidth -= 10; + break; + + case 102: + ControlHeight += 10; + break; + + case 103: + ControlHeight -= 10; + break; + + case INITPAGE_ID: + BackToInitialPage(); + break; + + case SECONDPAGE_ID: + ForwardToSecondPage(); + break; + + case BACKFIRSTPAGE_ID: + BackToFirstPage(); + break; + + case CREATEWINDOW_ID: + ReadNHide(); + srect.top = CONTROLPOSY + ControlHeight; + hwndEdit = CreateWindow(CONTROLCLASS, + NULL, + ComboStyle | WS_CHILD | WS_VISIBLE, + CONTROLPOSX, + CONTROLPOSY, + ControlWidth, + ControlHeight, + g_hwnd, + NULL, + g_hInst, + NULL); + break; + + case CREATEWINDOWEX_ID: + ReadNHide(); + srect.top = CONTROLPOSY + ControlHeight; + hwndEdit = CreateWindowEx(WS_EX_CLIENTEDGE, + CONTROLCLASS, + NULL, + ComboStyle | WS_CHILD | WS_VISIBLE , + CONTROLPOSX, + CONTROLPOSY, + ControlWidth, + ControlHeight, + g_hwnd, + NULL, + g_hInst, + NULL); + break; + + case CREATEWINDOWW_ID: + ReadNHide(); + srect.top = CONTROLPOSY + ControlHeight; + hwndEdit = CreateWindowExW(WS_EX_CLIENTEDGE, + CONTROLCLASSW, + NULL, + ComboStyle | WS_CHILD | WS_VISIBLE , + CONTROLPOSX, + CONTROLPOSY, + ControlWidth, + ControlHeight, + g_hwnd, + NULL, + g_hInst, + NULL); + break; + } + + if (lParam == (LPARAM)hwndEdit) + switch(HIWORD(wParam)) + { + case CBN_DROPDOWN: + ScrollWindow (hwnd, 0, SCROLLAMOUNT, &srect, &srect); + PrintTextXY("CBN_DROPDOWN notification",NOTIFYX,NOTIFYY,25,srect); + break; + + case CBN_CLOSEUP: + ScrollWindow (hwnd, 0, SCROLLAMOUNT, &srect, &srect); + PrintTextXY("CBN_CLOSEUP notification",NOTIFYX,NOTIFYY,24,srect); + break; + + case CBN_DBLCLK: + ScrollWindow (hwnd, 0, SCROLLAMOUNT, &srect, &srect); + PrintTextXY("CBN_DBLCLK notification",NOTIFYX,NOTIFYY,23,srect); + break; + + case CBN_EDITCHANGE: + ScrollWindow (hwnd, 0, SCROLLAMOUNT, &srect, &srect); + PrintTextXY("CBN_EDITCHANGE notification",NOTIFYX,NOTIFYY,27,srect); + break; + + case CBN_ERRSPACE: + ScrollWindow (hwnd, 0, SCROLLAMOUNT, &srect, &srect); + PrintTextXY("CBN_ERRSPACE notification",NOTIFYX,NOTIFYY,25,srect); + break; + + case CBN_KILLFOCUS: + ScrollWindow (hwnd, 0, SCROLLAMOUNT, &srect, &srect); + PrintTextXY("CBN_KILLFOCUS notification",NOTIFYX,NOTIFYY,26,srect); + break; + + case CBN_EDITUPDATE: + ScrollWindow (hwnd, 0, SCROLLAMOUNT, &srect, &srect); + PrintTextXY("CBN_EDITUPDATE notification",NOTIFYX,NOTIFYY,27,srect); + break; + + case CBN_SELCHANGE: + ScrollWindow (hwnd, 0, SCROLLAMOUNT, &srect, &srect); + PrintTextXY("CBN_SELCHANGE notification",NOTIFYX,NOTIFYY,26,srect); + break; + + case CBN_SELENDCANCEL: + ScrollWindow (hwnd, 0, SCROLLAMOUNT, &srect, &srect); + PrintTextXY("CBN_SELENDCANCEL notification",NOTIFYX,NOTIFYY,29,srect); + break; + + case CBN_SETFOCUS: + ScrollWindow (hwnd, 0, SCROLLAMOUNT, &srect, &srect); + PrintTextXY("CBN_SETFOCUS notification",NOTIFYX,NOTIFYY,25,srect); + break; + + case CBN_SELENDOK: + ScrollWindow (hwnd, 0, SCROLLAMOUNT, &srect, &srect); + PrintTextXY("CBN_SELENDOK notification",NOTIFYX,NOTIFYY,25,srect); + break; + } + + return DefWindowProc ( hwnd, msg, wParam, lParam ); + + case WM_MEASUREITEM: + ScrollWindow (hwnd, 0, SCROLLAMOUNT, &srect, &srect); + PrintTextXY("WM_MEASUREITEM called",NOTIFYX,NOTIFYY,21,srect); + break; + + case WM_COMPAREITEM: + ScrollWindow (hwnd, 0, SCROLLAMOUNT, &srect, &srect); + PrintTextXY("WM_COMPAREITEM called",NOTIFYX,NOTIFYY,21,srect); + break; + + case WM_DRAWITEM: + ScrollWindow (hwnd, 0, SCROLLAMOUNT, &srect, &srect); + PrintTextXY("WM_DRAWITEM called",NOTIFYX,NOTIFYY,18,srect); + break; + + case WM_SIZE : + return 0; + + case WM_CLOSE: + DestroyWindow (g_hwnd); + return 0; + + case WM_QUERYENDSESSION: + return 0; + + case WM_DESTROY: + PostQuitMessage(0); + return 0; + } + return DefWindowProc ( hwnd, msg, wParam, lParam ); + } + + +HWND +RegisterAndCreateWindow (HINSTANCE hInst, + const char* className, + const char* title) + { + WNDCLASSEX wc; + + + g_hInst = hInst; + + wc.cbSize = sizeof (WNDCLASSEX); + + wc.lpfnWndProc = WndProc; /* window procedure */ + wc.hInstance = hInst; /* owner of the class */ + + wc.lpszClassName = className; + wc.hCursor = LoadCursor ( 0, IDC_ARROW ); + wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1); + wc.style = CS_HREDRAW | CS_VREDRAW; + wc.cbClsExtra = 0; + wc.cbWndExtra = 0; + wc.hIcon = 0; + wc.hIconSm = 0; + wc.lpszMenuName = 0; + + if ( !RegisterClassEx ( &wc ) ) + return NULL; + + hwnd = CreateWindowEx ( + 0, /* dwStyleEx */ + className, /* class name */ + title, /* window title */ + + WS_OVERLAPPEDWINDOW, /* dwStyle */ + + 1, /* x */ + 1, /* y */ + WINDOWWIDTH, /* width */ + WINDOWHEIGHT, /* height */ + NULL, /* hwndParent */ + NULL, /* hMenu */ + hInst, + 0 + ); + + if (!hwnd) return NULL; + + ShowWindow (hwnd, SW_SHOW); + UpdateWindow (hwnd); + + return hwnd; + } + +int +WINAPI +WinMain ( HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR cmdParam, int cmdShow ) + { + char className [] = "ComboBox Control Test"; + MSG msg; + + RegisterAndCreateWindow ( hInst, className, "ComboBox Control Test" ); + + while (GetMessage (&msg, NULL, 0, 0)) + { + TranslateMessage (&msg); + DispatchMessage (&msg); + } + return (int)msg.wParam; + } diff --git a/apps/tests/combo/makefile b/apps/tests/combo/makefile new file mode 100644 index 0000000..195251f --- /dev/null +++ b/apps/tests/combo/makefile @@ -0,0 +1,22 @@ + +PATH_TO_TOP = ../../.. + +TARGET_NORC = yes + +TARGET_TYPE = program + +TARGET_APPTYPE = windows + +TARGET_NAME = combotst + +TARGET_SDKLIBS = kernel32.a gdi32.a + +TARGET_OBJECTS = \ + combotst.o \ + utils.o + +include $(PATH_TO_TOP)/rules.mak + +include $(TOOLS_PATH)/helper.mk + +# EOF diff --git a/apps/tests/combo/utils.c b/apps/tests/combo/utils.c new file mode 100644 index 0000000..f1eff54 --- /dev/null +++ b/apps/tests/combo/utils.c @@ -0,0 +1,33 @@ +/* + * Edit Control Test for ReactOS, quick n' dirty. There you go + * This source code is in the PUBLIC DOMAIN and has NO WARRANTY. + * by Waldo Alvarez Cañizares , June 22, 2003. + */ + +#include + +static const char hexvals[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; +VOID htoa (unsigned int val, char *buf) +{ + int i; + buf += 7; + + for (i=0;i<8;i++) + { + *buf-- = hexvals[val & 0x0000000F]; + val = val >> 4; + } +} + + +VOID strcpy_(char *dst, const char *src) +{ + const char* p = src; + while ((*dst++ = *p++)) {} +} + +VOID strcpyw_(wchar_t* dst,wchar_t* src) +{ + const wchar_t* p = src; + while ((*dst++ = *p++)) {} +} diff --git a/apps/tests/combo/utils.h b/apps/tests/combo/utils.h new file mode 100644 index 0000000..f6a1264 --- /dev/null +++ b/apps/tests/combo/utils.h @@ -0,0 +1,9 @@ +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ +VOID htoa (unsigned int, char *); +VOID strcpy_(char *, const char *); +VOID strcpyw_(wchar_t*,wchar_t*); +#ifdef __cplusplus + } +#endif diff --git a/apps/tests/consume/.cvsignore b/apps/tests/consume/.cvsignore index 7e87816..d63774a 100644 --- a/apps/tests/consume/.cvsignore +++ b/apps/tests/consume/.cvsignore @@ -3,3 +3,4 @@ *.exe *.coff *.sym +*.map diff --git a/apps/tests/copymove/.cvsignore b/apps/tests/copymove/.cvsignore index 343a060..d63774a 100644 --- a/apps/tests/copymove/.cvsignore +++ b/apps/tests/copymove/.cvsignore @@ -1,3 +1,6 @@ *.o +*.d *.exe +*.coff *.sym +*.map diff --git a/apps/tests/count/.cvsignore b/apps/tests/count/.cvsignore index 7e87816..d63774a 100644 --- a/apps/tests/count/.cvsignore +++ b/apps/tests/count/.cvsignore @@ -3,3 +3,4 @@ *.exe *.coff *.sym +*.map diff --git a/apps/tests/dibtest/.cvsignore b/apps/tests/dibtest/.cvsignore index 7e87816..d63774a 100644 --- a/apps/tests/dibtest/.cvsignore +++ b/apps/tests/dibtest/.cvsignore @@ -3,3 +3,4 @@ *.exe *.coff *.sym +*.map diff --git a/apps/tests/dump_shared_data/.cvsignore b/apps/tests/dump_shared_data/.cvsignore index 7e87816..d63774a 100644 --- a/apps/tests/dump_shared_data/.cvsignore +++ b/apps/tests/dump_shared_data/.cvsignore @@ -3,3 +3,4 @@ *.exe *.coff *.sym +*.map diff --git a/apps/tests/edit/.cvsignore b/apps/tests/edit/.cvsignore new file mode 100644 index 0000000..d63774a --- /dev/null +++ b/apps/tests/edit/.cvsignore @@ -0,0 +1,6 @@ +*.o +*.d +*.exe +*.coff +*.sym +*.map diff --git a/apps/tests/edit/edittest.c b/apps/tests/edit/edittest.c new file mode 100644 index 0000000..2d55c28 --- /dev/null +++ b/apps/tests/edit/edittest.c @@ -0,0 +1,649 @@ +/* Edit Control Test for ReactOS, quick n' dirty. Very rigid too. + * There you go, is only a test program. Not made to be fast, small + * easy to mantain, or portable. Lots of duplicated code too. + + * I'm not erasing text because I don't want to use other functions from th API + * or make this more complex. + + * This source code is in the PUBLIC DOMAIN and has NO WARRANTY. + * by Waldo Alvarez Cañizares , June 22, 2003. */ + +//#define WIN32_LEAN_AND_MEAN +#include +#include "utils.h" + +#define CREATEWINDOW 106 +#define CREATEWINDOWEX 107 +#define CREATEWINDOWW 108 + +#define ResultX 0 +#define ResultY 305 + +#define NOTIFYX 350 +#define NOTIFYY 285 + +#define BUFFERLEN 80 /* Size of buffer to hold result strings */ + +/* Edit is created with this text */ +#define TestStr "The quick brown fox jumps over the lazy dog" + +#define TestStrW L"This is a WCHAR string" /* Wide to support unicode edits */ + +#define MAXMESSAGEBUTTONS 42 + +HWND g_hwnd = NULL; +HINSTANCE g_hInst = NULL; + +int pos = 10; +int n = 0; +int yButPos = 10; +int xButPos = 10; + +DWORD EditStyle = 0; +DWORD EditWidth = 240; +DWORD EditHeight = 250; + +BOOL UnicodeUsed = FALSE; + +HWND hwndEdit = NULL; + +POINTL point={10,3}; +RECT rect = {0,0,20,20},rect2; +DWORD StartP,EndP; + +#define ReplaceText "->> Replaced!! <<-" + +char* AllocatedText; /* Buffer in the heap to feed it to the edit control */ +char* NewText = "New text for the edit control"; +wchar_t* NewTextW = L"New text for the edit control in UNICODE"; // Wide + +char TextBuffer[BUFFERLEN]={'R','e','s','u','l','t',':',' '}; + +typedef void FunctionHandler(HWND,DWORD,WPARAM,LPARAM); +typedef FunctionHandler* LPFUNCTIONHANDLER; + +PrintTextXY(char* Text,int x,int y,int len) +{ + HDC hdc; + hdc = GetDC (g_hwnd); + SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT)); + + TextOut (hdc, x,y,Text,len); + ReleaseDC (g_hwnd, hdc); + ValidateRect (g_hwnd, &rect); +} + +static +VOID +HandlePrintReturnHex(HWND handle,DWORD Msg,WPARAM wParam,LPARAM lParam) + { + int ret; + ret = SendMessage(handle,Msg,wParam,lParam); + htoa(ret,&TextBuffer[8]); + PrintTextXY(TextBuffer,ResultX,ResultY,16); + } + +static +VOID +HandleSetHandlePrintHex(HWND handle,DWORD Msg,WPARAM wParam,LPARAM lParam) + { + LPVOID pMem; + HANDLE hNewBuffer; + int ret; + + LocalFree((HLOCAL)SendMessage(handle, EM_GETHANDLE, 0, 0L)); + if (UnicodeUsed) + { + hNewBuffer = LocalAlloc(LMEM_MOVEABLE | LMEM_ZEROINIT, 100); + pMem = LocalLock(hNewBuffer); + strcpyw_((wchar_t*)pMem,NewTextW); + } + else + { + hNewBuffer = LocalAlloc(LMEM_MOVEABLE | LMEM_ZEROINIT,50); + pMem = LocalLock(hNewBuffer); + strcpy_((char*)pMem,NewText); + } + + LocalUnlock(pMem); + hNewBuffer = LocalHandle(pMem); + + /* Updates the buffer and displays new buffer */ + ret = SendMessage(handle, EM_SETHANDLE, (WPARAM)hNewBuffer, 0L); + + htoa(ret,&TextBuffer[8]); + PrintTextXY(TextBuffer,ResultX,ResultY,16); + } + +static +VOID +HandlePrintReturnStr(HWND handle,DWORD Msg,WPARAM wParam,LPARAM lParam) + { + int ret; + TextBuffer[8] = (char)(BUFFERLEN - 8); /* Setting the max size to put chars in first byte */ + ret = SendMessage(handle,Msg,wParam,lParam); + PrintTextXY(TextBuffer,ResultX,ResultY,8+ret); + } + +static +VOID +HandlePrintRect(HWND handle,DWORD Msg,WPARAM wParam,LPARAM lParam) + { + TextBuffer[8] = (char)(BUFFERLEN - 8); /* Setting the max size to put chars in first byte */ + SendMessage(handle,Msg,wParam,lParam); + + htoa(rect.top,&TextBuffer[8]); + TextBuffer[8+8] = ' '; + htoa(rect.bottom,&TextBuffer[8+8+1]); + TextBuffer[8+8+8+1] = ' '; + htoa(rect.left,&TextBuffer[8+8+8+1+1]); + TextBuffer[8+8+8+8+1+1] = ' '; + htoa(rect.right,&TextBuffer[8+8+8+8+1+1+1]); + + PrintTextXY(TextBuffer,ResultX,ResultY,8+4*9-1); + } + +static +VOID +HandlePrintPasswdChar(HWND handle,DWORD Msg,WPARAM wParam,LPARAM lParam) + { + HDC hdc; + int ret = SendMessage(handle,Msg,wParam,lParam); + + int s; + + if (ret) + { + s = 1; + TextBuffer[8] = (char)(ret); + } + else + { + TextBuffer[8] = 'N'; + TextBuffer[9] = 'U'; + TextBuffer[10] = 'L'; + TextBuffer[11] = 'L'; + s = 4; + } + + hdc = GetDC (g_hwnd); + SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT)); + + TextOut (hdc,ResultX ,ResultY,TextBuffer,8+s); + ReleaseDC (g_hwnd, hdc); + ValidateRect (g_hwnd, &rect); + } + + +struct +{ + char* Text; /* Text for the button */ + DWORD MsgCode; /* Message Code */ + WPARAM wParam; /* Well hope you can understand this */ + LPARAM lParam; /* ditto */ + LPFUNCTIONHANDLER Handler; /* Funtion called to handle the result of each message */ +} +Msg[] = +{ + "EM_CANUNDO",EM_CANUNDO,0,0,&HandlePrintReturnHex, + "EM_CHARFROMPOS",EM_CHARFROMPOS,(WPARAM)&point,0,&HandlePrintReturnHex, + "EM_EMPTYUNDOBUFFER",EM_EMPTYUNDOBUFFER,0,0,&HandlePrintReturnHex, + "EM_FMTLINES",EM_FMTLINES,TRUE,0,&HandlePrintReturnHex, + "EM_GETFIRSTVISIBLELINE",EM_GETFIRSTVISIBLELINE,0,0,&HandlePrintReturnHex, + + "EM_GETLIMITTEXT",EM_GETLIMITTEXT,0,0,&HandlePrintReturnHex, + "EM_GETLINE",EM_GETLINE,2,(WPARAM)&TextBuffer[8],&HandlePrintReturnStr, + "EM_GETLINECOUNT",EM_GETLINECOUNT,0,0,&HandlePrintReturnHex, + "EM_GETMARGINS",EM_GETMARGINS,0,0,&HandlePrintReturnHex, + "EM_SETMARGINS",EM_SETMARGINS,EC_LEFTMARGIN,10,&HandlePrintReturnHex, + + "EM_GETMODIFY",EM_GETMODIFY,0,0,&HandlePrintReturnHex, + "EM_SETMODIFY",EM_SETMODIFY,TRUE,0,&HandlePrintReturnHex, + + "EM_GETSEL",EM_GETSEL,(WPARAM)&StartP,(LPARAM)&EndP,&HandlePrintReturnHex, + + "EM_GETTHUMB",EM_GETTHUMB,0,0,&HandlePrintReturnHex, + + "EM_LIMITTEXT",EM_LIMITTEXT,10,0,&HandlePrintReturnHex, + "EM_LINEFROMCHAR",EM_LINEFROMCHAR,-1,0,&HandlePrintReturnHex, + "EM_POSFROMCHAR",EM_POSFROMCHAR,10,0,&HandlePrintReturnHex, + "EM_LINEINDEX",EM_LINEINDEX,2,0,&HandlePrintReturnHex, + "EM_LINELENGTH",EM_LINELENGTH,-1,0,&HandlePrintReturnHex, + + "EM_GETWORDBREAKPROC",EM_GETWORDBREAKPROC,0,0,&HandlePrintReturnHex, + "EM_REPLACESEL",EM_REPLACESEL,TRUE,(LPARAM)&ReplaceText,&HandlePrintReturnHex, + + "EM_LINESCROLL",EM_LINESCROLL,5,1,&HandlePrintReturnHex, + "EM_SCROLL",EM_SCROLL,SB_LINEDOWN,0,&HandlePrintReturnHex, + "EM_SCROLLCARET",EM_SCROLLCARET,0,0,&HandlePrintReturnHex, + + "EM_SETHANDLE",EM_SETHANDLE,0,0,&HandleSetHandlePrintHex, + "EM_GETHANDLE",EM_GETHANDLE,0,0,&HandlePrintReturnHex, + "EM_GETPASSWORDCHAR",EM_GETPASSWORDCHAR,0,0,&HandlePrintPasswdChar, + "EM_SETPASSWORDCHAR - clear",EM_SETPASSWORDCHAR,0,0,&HandlePrintReturnHex, + "EM_SETPASSWORDCHAR - x",EM_SETPASSWORDCHAR,'x',0,&HandlePrintReturnHex, + + "EM_SETREADONLY - set",EM_SETREADONLY,TRUE,0,&HandlePrintReturnHex, + "EM_SETREADONLY - clear",EM_SETREADONLY,FALSE,0,&HandlePrintReturnHex, + + "EM_GETRECT",EM_GETRECT,0,(LPARAM)&rect2,&HandlePrintRect, + "EM_SETRECT",EM_SETRECT,0,(LPARAM)&rect,&HandlePrintReturnHex, + "EM_SETRECTNP",EM_SETRECTNP,0,(LPARAM)&rect,&HandlePrintReturnHex, + "EM_SETSEL",EM_SETSEL,1,3,&HandlePrintReturnHex, + + "EM_SETSEL - all",EM_SETSEL,0,-1,&HandlePrintReturnHex, + "EM_SETSEL - remove",EM_SETSEL,-1,0,&HandlePrintReturnHex, + "EM_UNDO",EM_UNDO,0,0,&HandlePrintReturnHex, + "WM_UNDO",WM_UNDO,0,0,&HandlePrintReturnHex, + "WM_PASTE",WM_PASTE,0,0,&HandlePrintReturnHex, + + "WM_CUT",WM_CUT,0,0,&HandlePrintReturnHex, + "WM_COPY",WM_COPY,0,0,&HandlePrintReturnHex + +}; + +DWORD EditStyles[] = { + WS_THICKFRAME,WS_DISABLED,WS_BORDER,ES_LOWERCASE,ES_UPPERCASE,ES_NUMBER,ES_AUTOVSCROLL, + ES_AUTOHSCROLL,ES_LEFT,ES_CENTER,ES_RIGHT,ES_MULTILINE, + ES_NOHIDESEL,ES_OEMCONVERT,ES_PASSWORD,ES_READONLY,ES_WANTRETURN, + WS_HSCROLL,WS_VSCROLL + }; + +char* StyleNames[] = { + "WS_THICKFRAME","WS_DISABLED","WS_BORDER","ES_LOWERCASE","ES_UPPERCASE","ES_NUMBER","ES_AUTOVSCROLL", + "ES_AUTOHSCROLL","ES_LEFT","ES_CENTER","ES_RIGHT","ES_MULTILINE", + "ES_NOHIDESEL","ES_OEMCONVERT","ES_PASSWORD","ES_READONLY","ES_WANTRETURN", + "WS_HSCROLL","WS_VSCROLL" + }; + +#define NUMBERBUTTONS 26 +HWND Buttons[NUMBERBUTTONS]; +HWND MessageButtons[MAXMESSAGEBUTTONS]; +HWND Back1But,Back2But; +HWND NextBut; + + +HWND +CreateCheckButton(const char* lpWindowName, DWORD xSize, DWORD id) + { + HWND h; + h = CreateWindowEx(0, + "BUTTON", + lpWindowName, + WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX, + xButPos, /* x */ + yButPos, /* y */ + xSize, /* nWidth */ + 20, /* nHeight */ + g_hwnd, + (HMENU) id, + g_hInst, + NULL + ); + yButPos += 21; + return h; + } + +HWND +CreatePushButton(const char* lpWindowName, DWORD xSize, DWORD id,DWORD Style) + { + + HWND h = CreateWindow("BUTTON", + lpWindowName, + WS_CHILD | BS_PUSHBUTTON | Style, + xButPos, // x + yButPos, // y + xSize, // nWidth + 20, // nHeight + g_hwnd, + (HMENU) id, + g_hInst, + NULL + ); + + yButPos += 21; + return h; + } + +VOID +ReadNHide() + { + int i; + EditStyle = 0; + for (i=0 ; i< 19 ; i++) + { + if(BST_CHECKED == SendMessage(Buttons[i],BM_GETCHECK,0,0)) + EditStyle |= EditStyles[i]; + ShowWindow(Buttons[i],SW_HIDE); + } + + for (; i< NUMBERBUTTONS ; i++)ShowWindow(Buttons[i],SW_HIDE); + for (i=0 ; i< 26 ; i++) ShowWindow(MessageButtons[i],SW_SHOW); + + ShowWindow(Back1But,SW_SHOW); + ShowWindow(NextBut,SW_SHOW); + } + +VOID +ForwardToSecondPage() + { + int i; + for (i=0;i<26;i++)ShowWindow(MessageButtons[i],SW_HIDE); + for(;i= 600) + { + Msg[LOWORD(wParam)-600].Handler(hwndEdit, + Msg[LOWORD(wParam)-600].MsgCode, + Msg[LOWORD(wParam)-600].wParam, + Msg[LOWORD(wParam)-600].lParam); + break; + } + + switch(LOWORD(wParam)){ + + case 100: + EditWidth += 10; + break; + + case 101: + EditWidth -= 10; + break; + + case 102: + EditHeight += 10; + break; + + case 103: + EditHeight -= 10; + break; + + case 400: + BackToInitialPage(); + break; + + case 401: + ForwardToSecondPage(); + break; + + case 402: + BackToFirstPage(); + break; + + case CREATEWINDOW: + UnicodeUsed = FALSE; + ReadNHide(); + hwndEdit = CreateWindow("EDIT", + TestStr, + EditStyle | WS_CHILD | WS_VISIBLE, + 350, + 10, + EditWidth, + EditHeight, + g_hwnd, + NULL, + g_hInst, + NULL); + break; + + case CREATEWINDOWEX: + UnicodeUsed = FALSE; + ReadNHide(); + hwndEdit = CreateWindowEx(WS_EX_CLIENTEDGE, + "EDIT", + TestStr, + EditStyle | WS_CHILD | WS_VISIBLE , + 350, + 10, + EditWidth, + EditHeight, + g_hwnd, + NULL, + g_hInst, + NULL); + break; + + case CREATEWINDOWW: + UnicodeUsed = TRUE; + ReadNHide(); + hwndEdit = CreateWindowExW(WS_EX_CLIENTEDGE, + L"EDIT", + TestStrW, + EditStyle | WS_CHILD | WS_VISIBLE , + 350, + 10, + EditWidth, + EditHeight, + g_hwnd, + NULL, + g_hInst, + NULL); + break; + } + + if (lParam == (LPARAM)hwndEdit) + switch(HIWORD(wParam)) + { + case EN_CHANGE: + PrintTextXY("EN_CHANGE notification",NOTIFYX,NOTIFYY,22); + break; + + case EN_ERRSPACE: + PrintTextXY("EN_ERRSPACE notification",NOTIFYX,NOTIFYY,24); + break; + + /* --- FIXME not defined in w32api-2.3 headers + case H_SCROLL: + PrintTextXY("H_SCROLL notification",NOTIFYX,NOTIFYY,21); + break; */ + + /* --- FIXME not defined in w32api-2.3 headers + case KILL_FOCUS: + PrintTextXY("KILL_FOCUS notification",NOTIFYX,NOTIFYY,23); + break; */ + + /* --- FIXME not defined in w32api-2.3 headers + case EN_MAXTEST: + PrintTextXY("EN_MAXTEXT notification",NOTIFYX,NOTIFYY,23); + break; */ + + case EN_SETFOCUS: + PrintTextXY("EN_SETFOCUS notification",NOTIFYX,NOTIFYY,24); + break; + + case EN_UPDATE: + PrintTextXY("EN_UPDATE notification",NOTIFYX,NOTIFYY + 20,22); + break; + + case EN_VSCROLL: + PrintTextXY("EN_VSCROLL notification",NOTIFYX,NOTIFYY,23); + break; + + } + + break; + + case WM_SIZE : + return 0; + + case WM_CLOSE: + DestroyWindow (g_hwnd); + return 0; + + case WM_QUERYENDSESSION: + return 0; + + case WM_DESTROY: + PostQuitMessage(0); + return 0; + } + return DefWindowProc ( hwnd, msg, wParam, lParam ); +} + + +HWND +RegisterAndCreateWindow (HINSTANCE hInst, + const char* className, + const char* title) +{ + WNDCLASSEX wc; + HWND hwnd; + + g_hInst = hInst; + + wc.cbSize = sizeof (WNDCLASSEX); + + wc.lpfnWndProc = WndProc; /* window procedure */ + wc.hInstance = hInst; /* owner of the class */ + + wc.lpszClassName = className; + wc.hCursor = LoadCursor ( 0, IDC_ARROW ); + wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1); + wc.style = CS_HREDRAW | CS_VREDRAW; + wc.cbClsExtra = 0; + wc.cbWndExtra = 0; + wc.hIcon = 0; + wc.hIconSm = 0; + wc.lpszMenuName = 0; + + if ( !RegisterClassEx ( &wc ) ) + return NULL; + + hwnd = CreateWindowEx ( + 0, /* dwStyleEx */ + className, /* class name */ + title, /* window title */ + + WS_OVERLAPPEDWINDOW, /* dwStyle */ + + 1, /* x */ + 1, /* y */ + 560, /* width */ + 350, /* height */ + NULL, /* hwndParent */ + NULL, /* hMenu */ + hInst, + 0 + ); + + if (!hwnd) return NULL; + + ShowWindow (hwnd, SW_SHOW); + UpdateWindow (hwnd); + + return hwnd; +} + +int +WINAPI +WinMain ( HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR cmdParam, int cmdShow ) +{ + char className [] = "Edit Control Test"; + MSG msg; + + RegisterAndCreateWindow ( hInst, className, "Edit Control Styles Test" ); + + // Message loop + while (GetMessage (&msg, NULL, 0, 0)) + { + TranslateMessage (&msg); + DispatchMessage (&msg); + } + return msg.wParam; + +} diff --git a/apps/tests/edit/makefile b/apps/tests/edit/makefile new file mode 100644 index 0000000..04a3724 --- /dev/null +++ b/apps/tests/edit/makefile @@ -0,0 +1,22 @@ + +PATH_TO_TOP = ../../.. + +TARGET_NORC = yes + +TARGET_TYPE = program + +TARGET_APPTYPE = windows + +TARGET_NAME = edittest + +TARGET_SDKLIBS = kernel32.a gdi32.a + +TARGET_OBJECTS = \ + edittest.o \ + utils.o + +include $(PATH_TO_TOP)/rules.mak + +include $(TOOLS_PATH)/helper.mk + +# EOF diff --git a/apps/tests/edit/utils.c b/apps/tests/edit/utils.c new file mode 100644 index 0000000..f1eff54 --- /dev/null +++ b/apps/tests/edit/utils.c @@ -0,0 +1,33 @@ +/* + * Edit Control Test for ReactOS, quick n' dirty. There you go + * This source code is in the PUBLIC DOMAIN and has NO WARRANTY. + * by Waldo Alvarez Cañizares , June 22, 2003. + */ + +#include + +static const char hexvals[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; +VOID htoa (unsigned int val, char *buf) +{ + int i; + buf += 7; + + for (i=0;i<8;i++) + { + *buf-- = hexvals[val & 0x0000000F]; + val = val >> 4; + } +} + + +VOID strcpy_(char *dst, const char *src) +{ + const char* p = src; + while ((*dst++ = *p++)) {} +} + +VOID strcpyw_(wchar_t* dst,wchar_t* src) +{ + const wchar_t* p = src; + while ((*dst++ = *p++)) {} +} diff --git a/apps/tests/edit/utils.h b/apps/tests/edit/utils.h new file mode 100644 index 0000000..f6a1264 --- /dev/null +++ b/apps/tests/edit/utils.h @@ -0,0 +1,9 @@ +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ +VOID htoa (unsigned int, char *); +VOID strcpy_(char *, const char *); +VOID strcpyw_(wchar_t*,wchar_t*); +#ifdef __cplusplus + } +#endif diff --git a/apps/tests/enumwnd/.cvsignore b/apps/tests/enumwnd/.cvsignore new file mode 100644 index 0000000..d63774a --- /dev/null +++ b/apps/tests/enumwnd/.cvsignore @@ -0,0 +1,6 @@ +*.o +*.d +*.exe +*.coff +*.sym +*.map diff --git a/apps/tests/enumwnd/enumwnd.c b/apps/tests/enumwnd/enumwnd.c new file mode 100644 index 0000000..82c2cde --- /dev/null +++ b/apps/tests/enumwnd/enumwnd.c @@ -0,0 +1,187 @@ +/* + * enumwnd.c + * + * application to test the various Window Enumeration functions + */ + +//#define WIN32_LEAN_AND_MEAN +#include +#include +#include + +HBRUSH hbrBackground; +HFONT tf; +int test = 0; +const TCHAR* APP_NAME = "EnumWnd Test"; +const TCHAR* CLASS_NAME = "EnumWndTestClass"; + +LRESULT WINAPI MainWndProc(HWND, UINT, WPARAM, LPARAM); + +int WINAPI +WinMain(HINSTANCE hInstance, + HINSTANCE hPrevInstance, + LPSTR lpszCmdLine, + int nCmdShow) +{ + WNDCLASS wc; + MSG msg; + HWND hWnd; + + wc.lpszClassName = CLASS_NAME; + wc.lpfnWndProc = MainWndProc; + wc.style = CS_VREDRAW | CS_HREDRAW; + wc.hInstance = hInstance; + wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); + wc.hCursor = LoadCursor(NULL, IDC_ARROW); + wc.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH); + wc.lpszMenuName = NULL; + wc.cbClsExtra = 0; + wc.cbWndExtra = 0; + if (RegisterClass(&wc) == 0) + { + _ftprintf ( stderr, _T("RegisterClass failed (last error 0x%X)\n"), + GetLastError()); + return(1); + } + + hWnd = CreateWindow(CLASS_NAME, + APP_NAME, + WS_OVERLAPPEDWINDOW, + 0, + 0, + CW_USEDEFAULT, + CW_USEDEFAULT, + NULL, + NULL, + hInstance, + NULL); + if (hWnd == NULL) + { + _ftprintf ( stderr, _T("CreateWindow failed (last error 0x%X)\n"), + GetLastError()); + return(1); + } + + tf = CreateFont (14, 0, 0, TA_BASELINE, FW_NORMAL, FALSE, FALSE, FALSE, + ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, + DEFAULT_QUALITY, FIXED_PITCH|FF_DONTCARE, _T("Timmons")); + + hbrBackground = CreateSolidBrush ( RGB(192,192,192) ); + + ShowWindow ( hWnd, nCmdShow ); + + while(GetMessage(&msg, NULL, 0, 0)) + { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + + DeleteObject(hbrBackground); + + DeleteObject(tf); + + return msg.wParam; +} + +void MyTextOut ( HDC hdc, int x, int y, const TCHAR* text ) +{ + TextOut ( hdc, x, y, text, _tcslen(text) ); +} + +typedef struct _EnumData +{ + HDC hdc; + int x; + int y; +} EnumData; + +BOOL CALLBACK MyWindowEnumProc ( HWND hwnd, LPARAM lParam ) +{ + TCHAR wndcaption[1024], buf[1024]; + EnumData* ped = (EnumData*)lParam; + GetWindowText ( hwnd, wndcaption, sizeof(wndcaption)/sizeof(*wndcaption) ); + _sntprintf ( buf, sizeof(buf)/sizeof(*buf), _T("%x - %s"), hwnd, wndcaption ); + MyTextOut ( ped->hdc, ped->x, ped->y, buf ); + ped->y += 13; + return TRUE; +} + +LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) +{ + PAINTSTRUCT ps; + HDC hDC; + RECT rect; + TCHAR buf[100]; + EnumData ed; + + switch(msg) + { + case WM_PAINT: + hDC = BeginPaint(hWnd, &ps); + SelectObject(hDC, tf); + + GetClientRect ( hWnd, &rect ); + FillRect ( hDC, &rect, hbrBackground ); + + MyTextOut ( hDC, 10, 10, "EnumWnd Test" ); + + _sntprintf ( buf, sizeof(buf)/sizeof(*buf), _T("My HWND: %x"), hWnd ); + MyTextOut ( hDC, 10, 30, buf ); + + ed.hdc = hDC; + ed.x = 10; + ed.y = 70; + + switch ( test ) + { + case 1: + MyTextOut ( hDC, 10, 50, _T("Test #1: EnumWindows()") ); + EnumWindows ( MyWindowEnumProc, (LPARAM)&ed ); + break; + case 2: + MyTextOut ( hDC, 10, 50, _T("Test #2: EnumChildWindows()") ); + EnumChildWindows ( hWnd, MyWindowEnumProc, (LPARAM)&ed ); + break; + case 3: + MyTextOut ( hDC, 10, 50, _T("Test #3: EnumDesktopWindows") ); + EnumDesktopWindows ( NULL, MyWindowEnumProc, (LPARAM)&ed ); + break; + case 4: + MyTextOut ( hDC, 10, 50, _T("Test #4: EnumThreadWindows") ); + EnumThreadWindows ( GetCurrentThreadId(), MyWindowEnumProc, (LPARAM)&ed ); + break; + default: + MyTextOut ( hDC, 10, 50, _T("Press any of the number keys from 1 to 4 to run a test") ); + MyTextOut ( hDC, 10, 70, _T("Press the left and right mouse buttons to cycle through the tests") ); + break; + } + + EndPaint(hWnd, &ps); + break; + + case WM_CHAR: + test = (TCHAR)wParam - '1' + 1; + RedrawWindow ( hWnd, NULL, NULL, RDW_INVALIDATE ); + break; + + case WM_LBUTTONDOWN: + if ( ++test > 4 ) + test = 1; + RedrawWindow ( hWnd, NULL, NULL, RDW_INVALIDATE ); + break; + + case WM_RBUTTONDOWN: + if ( !--test ) + test = 4; + RedrawWindow ( hWnd, NULL, NULL, RDW_INVALIDATE ); + break; + + case WM_DESTROY: + PostQuitMessage(0); + break; + + default: + return DefWindowProc(hWnd, msg, wParam, lParam); + } + return 0; +} diff --git a/apps/tests/enumwnd/enumwnd.dsp b/apps/tests/enumwnd/enumwnd.dsp new file mode 100644 index 0000000..8225c19 --- /dev/null +++ b/apps/tests/enumwnd/enumwnd.dsp @@ -0,0 +1,90 @@ +# Microsoft Developer Studio Project File - Name="enumwnd" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=enumwnd - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "enumwnd.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "enumwnd.mak" CFG="enumwnd - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "enumwnd - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "enumwnd - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "enumwnd - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 + +!ELSEIF "$(CFG)" == "enumwnd - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /debug /machine:I386 /pdbtype:sept +# SUBTRACT LINK32 /pdb:none + +!ENDIF + +# Begin Target + +# Name "enumwnd - Win32 Release" +# Name "enumwnd - Win32 Debug" +# Begin Source File + +SOURCE=.\enumwnd.c +# End Source File +# End Target +# End Project diff --git a/apps/tests/enumwnd/makefile b/apps/tests/enumwnd/makefile new file mode 100644 index 0000000..670f551 --- /dev/null +++ b/apps/tests/enumwnd/makefile @@ -0,0 +1,21 @@ +# $Id$ + +PATH_TO_TOP = ../../.. + +TARGET_NORC = yes + +TARGET_TYPE = program + +TARGET_APPTYPE = windows + +TARGET_NAME = enumwnd + +TARGET_SDKLIBS = kernel32.a gdi32.a + +TARGET_OBJECTS = $(TARGET_NAME).o + +include $(PATH_TO_TOP)/rules.mak + +include $(TOOLS_PATH)/helper.mk + +# EOF diff --git a/apps/tests/event/.cvsignore b/apps/tests/event/.cvsignore index 7e87816..d63774a 100644 --- a/apps/tests/event/.cvsignore +++ b/apps/tests/event/.cvsignore @@ -3,3 +3,4 @@ *.exe *.coff *.sym +*.map diff --git a/apps/tests/eventpair/.cvsignore b/apps/tests/eventpair/.cvsignore new file mode 100644 index 0000000..d63774a --- /dev/null +++ b/apps/tests/eventpair/.cvsignore @@ -0,0 +1,6 @@ +*.o +*.d +*.exe +*.coff +*.sym +*.map diff --git a/apps/tests/eventpair/eventpair.c b/apps/tests/eventpair/eventpair.c new file mode 100644 index 0000000..c438421 --- /dev/null +++ b/apps/tests/eventpair/eventpair.c @@ -0,0 +1,65 @@ +/* + * Author: Skywing (skywing@valhallalegends.com) + * Date: 09/09/2003 + * Purpose: Test Thread-EventPair functionality. + */ + +#include +#include +#include + +#ifndef NTAPI +#define NTAPI WINAPI +#endif + +HANDLE MakeEventPair() +{ + NTSTATUS Status; + HANDLE EventPair; + OBJECT_ATTRIBUTES Attributes; + + InitializeObjectAttributes(&Attributes, NULL, 0, NULL, NULL); + Status = NtCreateEventPair(&EventPair, STANDARD_RIGHTS_ALL, &Attributes); + printf("Status %08x creating eventpair\n", Status); + return EventPair; +} + +DWORD __stdcall threadfunc(void* eventpair) +{ + printf("Thread: Set eventpair status %08x\n", NtSetInformationThread(NtCurrentThread(), ThreadEventPair, &eventpair, sizeof(HANDLE))); + Sleep(2500); + + printf("Thread: Setting low and waiting high...\n"); + printf("Thread: status = %08x\n", NtSetLowWaitHighThread()); + printf("Thread: status = %08x\n", NtSetHighWaitLowThread()); + printf("Thread: Terminating...\n"); + return 0; +} + +int main(int ac, char **av) +{ + DWORD id; + HANDLE EventPair, Thread; + + printf("Main: NtSetLowWaitHighThread is at %08x\n", NtSetLowWaitHighThread); + + EventPair = MakeEventPair(); + + if(!EventPair) { + printf("Main: Could not create event pair.\n"); + return 0; + } + + printf("Main: EventPair = %08x\n", EventPair); + Thread = CreateThread(0, 0, threadfunc, EventPair, 0, &id); + printf("Main: ThreadId for new thread is %08x\n", id); + printf("Main: Setting high and waiting low\n"); + printf("Main: status = %08x\n", NtSetHighWaitLowEventPair(EventPair)); + Sleep(2500); + printf("Main: status = %08x\n", NtSetLowWaitHighEventPair(EventPair)); + NtClose(EventPair); + /* WaitForSingleObject(Thread, INFINITE); FIXME: Waiting on thread handle causes double spinlock acquisition (and subsequent crash) in PsUnblockThread - ntoskrnl/ps/thread.c */ + NtClose(Thread); + printf("Main: Terminating...\n"); + return 0; +} diff --git a/apps/tests/eventpair/makefile b/apps/tests/eventpair/makefile new file mode 100644 index 0000000..0d64844 --- /dev/null +++ b/apps/tests/eventpair/makefile @@ -0,0 +1,21 @@ +# $Id$ + +PATH_TO_TOP = ../../.. + +TARGET_NORC = yes + +TARGET_TYPE = program + +TARGET_APPTYPE = console + +TARGET_NAME = eventpair + +TARGET_SDKLIBS = ntdll.a + +TARGET_OBJECTS = $(TARGET_NAME).o + +include $(PATH_TO_TOP)/rules.mak + +include $(TOOLS_PATH)/helper.mk + +# EOF diff --git a/apps/tests/file/.cvsignore b/apps/tests/file/.cvsignore index 7e87816..d63774a 100644 --- a/apps/tests/file/.cvsignore +++ b/apps/tests/file/.cvsignore @@ -3,3 +3,4 @@ *.exe *.coff *.sym +*.map diff --git a/apps/tests/gditest/.cvsignore b/apps/tests/gditest/.cvsignore index 7e87816..d63774a 100644 --- a/apps/tests/gditest/.cvsignore +++ b/apps/tests/gditest/.cvsignore @@ -3,3 +3,4 @@ *.exe *.coff *.sym +*.map diff --git a/apps/tests/hello/.cvsignore b/apps/tests/hello/.cvsignore index 7e87816..d63774a 100644 --- a/apps/tests/hello/.cvsignore +++ b/apps/tests/hello/.cvsignore @@ -3,3 +3,4 @@ *.exe *.coff *.sym +*.map diff --git a/apps/tests/hivetest/.cvsignore b/apps/tests/hivetest/.cvsignore index 7e87816..d63774a 100644 --- a/apps/tests/hivetest/.cvsignore +++ b/apps/tests/hivetest/.cvsignore @@ -3,3 +3,4 @@ *.exe *.coff *.sym +*.map diff --git a/apps/tests/icontest/.cvsignore b/apps/tests/icontest/.cvsignore new file mode 100644 index 0000000..d63774a --- /dev/null +++ b/apps/tests/icontest/.cvsignore @@ -0,0 +1,6 @@ +*.o +*.d +*.exe +*.coff +*.sym +*.map diff --git a/apps/tests/icontest/icon.ico b/apps/tests/icontest/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..746b9be45a057fa2c0111e079955a733c655d4e5 GIT binary patch literal 766 zcmZ{iv2uej5JZ=d88S9APLcn%QsOz)*{@oMAe>gRuof_QZ+nnN<^C^zT3p{YL8!w!v!|~LxQ1AyP zTijSt@0`ov%z|(n$B7$5Nm|&@I?n!n=t?gHs2{FFmjV#mm7D@%+dF#z{2`)z1p*mF zX9mcQ&I}Ntc;Z&}iaTK{s9)D6RtM(^)l$45H^U!VIq~}xW61qF`~a6P;P?rgsLPF4 qB)GC@$f<%l@X{O=W0#7$593vx6@Xm20R?*ea{OajUp8X31aqG$e literal 0 HcmV?d00001 diff --git a/apps/tests/icontest/icontest.c b/apps/tests/icontest/icontest.c new file mode 100644 index 0000000..32ad1f7 --- /dev/null +++ b/apps/tests/icontest/icontest.c @@ -0,0 +1,145 @@ +#include +#include "resource.h" + +const char titleDrwIco[] = "DrawIcon Output"; +const char titleMask[] = "Mask(AND image)"; +const char titleXor[] = "XOR(color image)"; +const char file[] = "Icon from file:"; +const char res[] = "Icon from Resorce:"; + +HFONT tf; +HINSTANCE hInst; + +LRESULT WINAPI MainWndProc(HWND, UINT, WPARAM, LPARAM); + +int WINAPI +WinMain(HINSTANCE hInstance, + HINSTANCE hPrevInstance, + LPSTR lpszCmdLine, + int nCmdShow) +{ + WNDCLASS wc; + MSG msg; + HWND hWnd; + + hInst = hInstance; + + wc.lpszClassName = "IconTestClass"; + wc.lpfnWndProc = MainWndProc; + wc.style = CS_VREDRAW | CS_HREDRAW; + wc.hInstance = hInstance; + wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); + wc.hCursor = LoadCursor(NULL, IDC_ARROW); + wc.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH); + wc.lpszMenuName = NULL; + wc.cbClsExtra = 0; + wc.cbWndExtra = 0; + if (RegisterClass(&wc) == 0) + { + DbgPrint("RegisterClass failed (last error 0x%X)\n", GetLastError()); + return(1); + } + + hWnd = CreateWindow("IconTestClass", + "Icon Test", + WS_OVERLAPPEDWINDOW|WS_HSCROLL|WS_VSCROLL, + CW_USEDEFAULT, + CW_USEDEFAULT, + 455, + 320, + NULL, + NULL, + hInstance, + NULL); + if (hWnd == NULL) + { + DbgPrint("CreateWindow failed (last error 0x%X)\n", GetLastError()); + return(1); + } + + tf = CreateFontA(14,0, 0, TA_BASELINE, FW_NORMAL, FALSE, FALSE, FALSE, + ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, + DEFAULT_QUALITY, FIXED_PITCH|FF_DONTCARE, "Timmons"); + + ShowWindow(hWnd, nCmdShow); + + while(GetMessage(&msg, NULL, 0, 0)) + { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + + return msg.wParam; +} + +LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) +{ + PAINTSTRUCT ps; + HDC hDC; + HICON hIcon; + HGDIOBJ hOld; + HDC hMemDC; + ICONINFO iconinfo; + HBITMAP hMaskBitmap; + HBITMAP hColorBitmap; + + switch(msg) + { + case WM_PAINT: + hDC = BeginPaint(hWnd, &ps); + SelectObject(hDC, tf); + SetBkMode(hDC, TRANSPARENT); + + TextOut(hDC, 160, 10, file, strlen(file)); + TextOut(hDC, 15, 85, titleDrwIco, strlen(titleDrwIco)); + TextOut(hDC, 160, 85, titleMask, strlen(titleMask)); + TextOut(hDC, 300, 85, titleXor, strlen(titleXor)); + + hIcon = LoadImage(NULL, "icon.ICO", IMAGE_ICON, 0, 0, LR_DEFAULTSIZE|LR_LOADFROMFILE); + DrawIcon(hDC,50,50,hIcon); + + hMemDC = CreateCompatibleDC(hDC); + GetIconInfo(hIcon, &iconinfo); + DestroyIcon(hIcon); + + hOld = SelectObject(hMemDC, iconinfo.hbmMask); + BitBlt(hDC, 200, 50, 32, 32, hMemDC, 0, 0, SRCCOPY); + SelectObject(hMemDC, iconinfo.hbmColor); + BitBlt(hDC, 350, 50, 32, 32, hMemDC, 0, 0, SRCCOPY); + + DeleteObject(iconinfo.hbmMask); + DeleteObject(iconinfo.hbmColor); + + SelectObject(hMemDC, hOld); + + TextOut(hDC, 145, 150, res, strlen(res)); + TextOut(hDC, 15, 225, titleDrwIco, strlen(titleDrwIco)); + TextOut(hDC, 160, 225, titleMask, strlen(titleMask)); + TextOut(hDC, 300, 225, titleXor, strlen(titleXor)); + + hIcon = LoadImage(hInst, MAKEINTRESOURCE(IDI_ICON), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE); + DrawIcon(hDC,50,190,hIcon); + + GetIconInfo(hIcon, &iconinfo); + DestroyIcon(hIcon); + + hOld = SelectObject(hMemDC, iconinfo.hbmMask); + BitBlt(hDC, 200, 190, 32, 32, hMemDC, 0, 0, SRCCOPY); + SelectObject(hMemDC, iconinfo.hbmColor); + BitBlt(hDC, 350, 190, 32, 32, hMemDC, 0, 0, SRCCOPY); + + DeleteObject(iconinfo.hbmMask); + DeleteObject(iconinfo.hbmColor); + DeleteObject(hMemDC); + EndPaint(hWnd, &ps); + break; + + case WM_DESTROY: + PostQuitMessage(0); + break; + + default: + return DefWindowProc(hWnd, msg, wParam, lParam); + } + return 0; +} diff --git a/apps/tests/icontest/icontest.rc b/apps/tests/icontest/icontest.rc new file mode 100644 index 0000000..5003913 --- /dev/null +++ b/apps/tests/icontest/icontest.rc @@ -0,0 +1,5 @@ +#include +#include +#include "resource.h" + +IDI_ICON ICON DISCARDABLE "icon.ico" diff --git a/apps/tests/icontest/makefile b/apps/tests/icontest/makefile new file mode 100644 index 0000000..de02a8a --- /dev/null +++ b/apps/tests/icontest/makefile @@ -0,0 +1,19 @@ +PATH_TO_TOP = ../../.. + +TARGET_NORC = no + +TARGET_TYPE = program + +TARGET_APPTYPE = windows + +TARGET_NAME = icontest + +TARGET_SDKLIBS = ntdll.a kernel32.a gdi32.a + +TARGET_OBJECTS = $(TARGET_NAME).o + +include $(PATH_TO_TOP)/rules.mak + +include $(TOOLS_PATH)/helper.mk + +# EOF diff --git a/apps/tests/icontest/resource.h b/apps/tests/icontest/resource.h new file mode 100644 index 0000000..5d9eb75 --- /dev/null +++ b/apps/tests/icontest/resource.h @@ -0,0 +1 @@ +#define IDI_ICON 101 diff --git a/apps/tests/isotest/.cvsignore b/apps/tests/isotest/.cvsignore index 7e87816..d63774a 100644 --- a/apps/tests/isotest/.cvsignore +++ b/apps/tests/isotest/.cvsignore @@ -3,3 +3,4 @@ *.exe *.coff *.sym +*.map diff --git a/apps/tests/lineclip/.cvsignore b/apps/tests/lineclip/.cvsignore new file mode 100644 index 0000000..d63774a --- /dev/null +++ b/apps/tests/lineclip/.cvsignore @@ -0,0 +1,6 @@ +*.o +*.d +*.exe +*.coff +*.sym +*.map diff --git a/apps/tests/lineclip/lineclip.c b/apps/tests/lineclip/lineclip.c new file mode 100644 index 0000000..b82809c --- /dev/null +++ b/apps/tests/lineclip/lineclip.c @@ -0,0 +1,167 @@ +#include +#include + +LRESULT WINAPI MainWndProc(HWND, UINT, WPARAM, LPARAM); + +int WINAPI +WinMain(HINSTANCE hInstance, + HINSTANCE hPrevInstance, + LPSTR lpszCmdLine, + int nCmdShow) +{ + WNDCLASS wc; + MSG msg; + HWND hWnd; + + wc.lpszClassName = "ClipClass"; + wc.lpfnWndProc = MainWndProc; + wc.style = CS_VREDRAW | CS_HREDRAW; + wc.hInstance = hInstance; + wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); + wc.hCursor = LoadCursor(NULL, IDC_ARROW); + wc.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH); + wc.lpszMenuName = NULL; + wc.cbClsExtra = 0; + wc.cbWndExtra = 0; + if (RegisterClass(&wc) == 0) + { + fprintf(stderr, "RegisterClass failed (last error 0x%X)\n", + GetLastError()); + return(1); + } + + hWnd = CreateWindow("ClipClass", + "Line clipping test", + WS_OVERLAPPEDWINDOW|WS_HSCROLL|WS_VSCROLL, + 0, + 0, + CW_USEDEFAULT, + CW_USEDEFAULT, + NULL, + NULL, + hInstance, + NULL); + if (hWnd == NULL) + { + fprintf(stderr, "CreateWindow failed (last error 0x%X)\n", + GetLastError()); + return(1); + } + + ShowWindow(hWnd, nCmdShow); + + while(GetMessage(&msg, NULL, 0, 0)) + { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + + return msg.wParam; +} + +static void +DrawLines(HDC hDC) +{ + static struct + { + int fromx; + int fromy; + int tox; + int toy; + } + points[ ] = + { + { 50, 99, 125, 99 }, + { 160, 99, 190, 99 }, + { 300, 99, 225, 99 }, + { 50, 100, 125, 100 }, + { 160, 100, 190, 100 }, + { 300, 100, 225, 100 }, + { 50, 125, 300, 125 }, + { 50, 149, 125, 149 }, + { 160, 149, 190, 149 }, + { 300, 149, 225, 149 }, + { 50, 150, 125, 150 }, + { 160, 150, 190, 150 }, + { 300, 150, 225, 150 }, + { 160, 249, 190, 249 }, + { 160, 250, 190, 250 }, + { 149, 50, 149, 125 }, + { 149, 160, 149, 190 }, + { 149, 300, 149, 225 }, + { 150, 50, 150, 125 }, + { 150, 160, 150, 190 }, + { 150, 300, 150, 225 }, + { 199, 50, 199, 125 }, + { 199, 160, 199, 190 }, + { 199, 300, 199, 225 }, + { 200, 50, 200, 125 }, + { 200, 160, 200, 190 }, + { 200, 300, 200, 225 }, + { 175, 50, 175, 300 }, + { 50, 55, 300, 290 }, + { 300, 295, 50, 60 }, + { 50, 290, 300, 55 }, + { 300, 60, 50, 295 }, + { 55, 50, 290, 300 }, + { 295, 300, 60, 50 }, + { 55, 300, 290, 50 }, + { 295, 50, 60, 300 } + }; + int i; + + for (i = 0; i < sizeof(points) / sizeof(points[0]); i++) + { + MoveToEx(hDC, points[i].fromx, points[i].fromy, NULL); + LineTo(hDC, points[i].tox, points[i].toy); + } +} + +LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) +{ + PAINTSTRUCT ps; + HDC hDC; + RECT clr, wir; + HRGN ClipRgn, ExcludeRgn; + char spr[100], sir[100]; + RECT Rect; + + switch(msg) + { + case WM_PAINT: + GetClientRect(hWnd, &clr); + ClipRgn = CreateRectRgnIndirect(&clr); + hDC = BeginPaint(hWnd, &ps); + Rect.left = 100; + Rect.top = 100; + Rect.right = 250; + Rect.bottom = 150; + FillRect(hDC, &Rect, CreateSolidBrush(RGB(0xFF, 0x00, 0x00))); + ExcludeRgn = CreateRectRgnIndirect(&Rect); + CombineRgn(ClipRgn, ClipRgn, ExcludeRgn, RGN_DIFF); + DeleteObject(ExcludeRgn); + Rect.left = 150; + Rect.top = 150; + Rect.right = 200; + Rect.bottom = 250; + FillRect(hDC, &Rect, CreateSolidBrush(RGB(0xFF, 0x00, 0x00))); + SelectObject(hDC, CreatePen(PS_SOLID, 0, RGB(0xFF, 0xFF, 0x00))); + DrawLines(hDC); + SelectObject(hDC, CreatePen(PS_SOLID, 0, RGB(0x00, 0x00, 0xFF))); + ExcludeRgn = CreateRectRgnIndirect(&Rect); + CombineRgn(ClipRgn, ClipRgn, ExcludeRgn, RGN_DIFF); + DeleteObject(ExcludeRgn); + SelectClipRgn(hDC, ClipRgn); + DrawLines(hDC); + EndPaint(hWnd, &ps); + break; + + case WM_DESTROY: + PostQuitMessage(0); + break; + + default: + return DefWindowProc(hWnd, msg, wParam, lParam); + } + return 0; +} diff --git a/apps/tests/lineclip/makefile b/apps/tests/lineclip/makefile new file mode 100644 index 0000000..1634459 --- /dev/null +++ b/apps/tests/lineclip/makefile @@ -0,0 +1,21 @@ +# $Id$ + +PATH_TO_TOP = ../../.. + +TARGET_NORC = yes + +TARGET_TYPE = program + +TARGET_APPTYPE = windows + +TARGET_NAME = lineclip + +TARGET_SDKLIBS = kernel32.a gdi32.a + +TARGET_OBJECTS = $(TARGET_NAME).o + +include $(PATH_TO_TOP)/rules.mak + +include $(TOOLS_PATH)/helper.mk + +# EOF diff --git a/apps/tests/linetest/.cvsignore b/apps/tests/linetest/.cvsignore new file mode 100644 index 0000000..bafdb94 --- /dev/null +++ b/apps/tests/linetest/.cvsignore @@ -0,0 +1,6 @@ +*.exe +*.sym +*.coff +*.d +*.o +*.map diff --git a/apps/tests/linetest/linetest.c b/apps/tests/linetest/linetest.c new file mode 100644 index 0000000..172839d --- /dev/null +++ b/apps/tests/linetest/linetest.c @@ -0,0 +1,181 @@ +#include +#include + +LRESULT WINAPI MainWndProc(HWND, UINT, WPARAM, LPARAM); + +const TCHAR* CLASS_NAME = _T("LineTestClass"); + +int WINAPI +WinMain(HINSTANCE hInstance, + HINSTANCE hPrevInstance, + LPSTR lpszCmdLine, + int nCmdShow) +{ + WNDCLASS wc; + MSG msg; + HWND hWnd; + + wc.lpszClassName = CLASS_NAME; + wc.lpfnWndProc = MainWndProc; + wc.style = CS_VREDRAW | CS_HREDRAW; + wc.hInstance = hInstance; + wc.hIcon = LoadIcon(NULL, (LPCSTR)IDI_APPLICATION); + wc.hCursor = LoadCursor(NULL, (LPCSTR)IDC_ARROW); + wc.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH); + wc.lpszMenuName = NULL; + wc.cbClsExtra = 0; + wc.cbWndExtra = 0; + if (RegisterClass(&wc) == 0) + { + fprintf(stderr, "RegisterClass failed (last error 0x%X)\n", + GetLastError()); + return(1); + } + + hWnd = CreateWindow(CLASS_NAME, + _T("Line drawing test"), + WS_OVERLAPPEDWINDOW, + 0, + 0, + CW_USEDEFAULT, + CW_USEDEFAULT, + NULL, + NULL, + hInstance, + NULL); + if (hWnd == NULL) + { + fprintf(stderr, "CreateWindow failed (last error 0x%X)\n", + GetLastError()); + return(1); + } + + ShowWindow(hWnd, nCmdShow); + + while(GetMessage(&msg, NULL, 0, 0)) + { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + + return msg.wParam; +} + +#define red RGB(255,0,0) +#define grn RGB(0,255,0) +#define blu RGB(0,0,255) +#define blk RGB(0,0,0) + +static void +DrawLines(HDC hDC) +{ + static struct + { + int fromx; + int fromy; + int tox; + int toy; + COLORREF clr; + } + points[ ] = + { + { 10, 10, 19, 10, red }, + { 20, 10, 20, 19, grn }, + { 20, 20, 11, 20, blu }, + { 10, 20, 10, 11, blk }, + { 12, 12, 15, 15, red }, + { 18, 12, 15, 15, grn }, + { 18, 18, 15, 15, blu }, + { 12, 18, 15, 15, blk }, + + { 35, 10, 39, 14, red }, + { 40, 15, 36, 19, grn }, + { 35, 20, 31, 16, blu }, + { 30, 15, 34, 11, blk }, + + { 2, 1, 5, 2, red }, + { 6, 2, 5, 5, grn }, + { 5, 6, 2, 5, blu }, + { 1, 5, 2, 2, blk }, + + { 50, 1, 51, 1, red }, + { 50, 2, 52, 2, grn }, + { 50, 3, 53, 3, blu }, + { 50, 4, 54, 4, blk }, + { 50, 5, 55, 5, red }, + { 50, 6, 56, 6, grn }, + { 50, 7, 57, 7, blu }, + { 50, 8, 58, 8, blk }, + { 50, 9, 59, 9, red }, + { 50, 10, 60, 10, grn }, + { 50, 11, 61, 11, blu }, + { 50, 12, 62, 12, blk }, + + { 50, 14, 62, 14, red }, + { 51, 15, 62, 15, grn }, + { 52, 16, 62, 16, blu }, + { 53, 17, 62, 17, blk }, + { 54, 18, 62, 18, red }, + { 55, 19, 62, 19, grn }, + { 56, 20, 62, 20, blu }, + { 57, 21, 62, 21, blk }, + { 58, 22, 62, 22, red }, + { 59, 23, 62, 23, grn }, + { 60, 24, 62, 24, blu }, + { 61, 25, 62, 25, blk }, + }; + int i; + + for (i = 0; i < sizeof(points) / sizeof(points[0]); i++) + { + HPEN hpen, hpenold; + hpen = CreatePen ( PS_SOLID, 0, points[i].clr ); + hpenold = (HPEN)SelectObject ( hDC, hpen ); + MoveToEx ( hDC, points[i].fromx, points[i].fromy, NULL ); + LineTo ( hDC, points[i].tox, points[i].toy ); + SelectObject ( hDC, hpenold ); + DeleteObject ( hpen ); + } +} + +LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) +{ + PAINTSTRUCT ps; + HDC hDC; + RECT clr; + HBRUSH hbr, hbrold; + + switch(msg) + { + case WM_PAINT: + GetClientRect(hWnd, &clr); + //ClipRgn = CreateRectRgnIndirect(&clr); + hDC = BeginPaint(hWnd, &ps); + //Rect.left = 100; + //Rect.top = 100; + //Rect.right = 250; + //Rect.bottom = 150; + //FillRect(hDC, &Rect, CreateSolidBrush(RGB(0xFF, 0x00, 0x00))); + //ExcludeRgn = CreateRectRgnIndirect(&Rect); + //CombineRgn(ClipRgn, ClipRgn, ExcludeRgn, RGN_DIFF); + //DeleteObject(ExcludeRgn); + //Rect.left = 150; + //Rect.top = 150; + //Rect.right = 200; + //Rect.bottom = 250; + hbr = CreateSolidBrush(RGB(255, 255, 255)); + FillRect ( hDC, &clr, hbr ); + DeleteObject ( hbr ); + DrawLines(hDC); + EndPaint(hWnd, &ps); + break; + + case WM_DESTROY: + PostQuitMessage(0); + break; + + default: + return DefWindowProc(hWnd, msg, wParam, lParam); + } + return 0; +} diff --git a/apps/tests/linetest/makefile b/apps/tests/linetest/makefile new file mode 100644 index 0000000..14726af --- /dev/null +++ b/apps/tests/linetest/makefile @@ -0,0 +1,21 @@ +# $Id$ + +PATH_TO_TOP = ../../.. + +TARGET_NORC = yes + +TARGET_TYPE = program + +TARGET_APPTYPE = windows + +TARGET_NAME = linetest + +TARGET_SDKLIBS = kernel32.a gdi32.a + +TARGET_OBJECTS = $(TARGET_NAME).o + +include $(PATH_TO_TOP)/rules.mak + +include $(TOOLS_PATH)/helper.mk + +# EOF diff --git a/apps/tests/lock/.cvsignore b/apps/tests/lock/.cvsignore new file mode 100644 index 0000000..d63774a --- /dev/null +++ b/apps/tests/lock/.cvsignore @@ -0,0 +1,6 @@ +*.o +*.d +*.exe +*.coff +*.sym +*.map diff --git a/apps/tests/lpc/.cvsignore b/apps/tests/lpc/.cvsignore index 7e87816..d63774a 100644 --- a/apps/tests/lpc/.cvsignore +++ b/apps/tests/lpc/.cvsignore @@ -3,3 +3,4 @@ *.exe *.coff *.sym +*.map diff --git a/apps/tests/lpc/lpcsrv.c b/apps/tests/lpc/lpcsrv.c index 0dfbdb6..a50870f 100644 --- a/apps/tests/lpc/lpcsrv.c +++ b/apps/tests/lpc/lpcsrv.c @@ -74,7 +74,7 @@ int main(int argc, char* argv[]) printf("%s: Received connection request 0x%08x on port 0x%x.\n", MyName, ConnectMsg.Header.MessageId, NamedPortHandle); printf("%s: Request from: PID=%x, TID=%x.\n", MyName, - ConnectMsg.Header.Cid.UniqueProcess, ConnectMsg.Header.Cid.UniqueThread); + ConnectMsg.Header.ClientId.UniqueProcess, ConnectMsg.Header.ClientId.UniqueThread); printf("%s: Accepting connection request 0x%08x...\n", MyName, ConnectMsg.Header.MessageId); diff --git a/apps/tests/messagebox/.cvsignore b/apps/tests/messagebox/.cvsignore index 7e87816..d63774a 100644 --- a/apps/tests/messagebox/.cvsignore +++ b/apps/tests/messagebox/.cvsignore @@ -3,3 +3,4 @@ *.exe *.coff *.sym +*.map diff --git a/apps/tests/mktime/.cvsignore b/apps/tests/mktime/.cvsignore new file mode 100644 index 0000000..d63774a --- /dev/null +++ b/apps/tests/mktime/.cvsignore @@ -0,0 +1,6 @@ +*.o +*.d +*.exe +*.coff +*.sym +*.map diff --git a/apps/tests/mstest/.cvsignore b/apps/tests/mstest/.cvsignore index 7e87816..d63774a 100644 --- a/apps/tests/mstest/.cvsignore +++ b/apps/tests/mstest/.cvsignore @@ -3,3 +3,4 @@ *.exe *.coff *.sym +*.map diff --git a/apps/tests/multiwin/.cvsignore b/apps/tests/multiwin/.cvsignore new file mode 100644 index 0000000..d63774a --- /dev/null +++ b/apps/tests/multiwin/.cvsignore @@ -0,0 +1,6 @@ +*.o +*.d +*.exe +*.coff +*.sym +*.map diff --git a/apps/tests/multiwin/makefile b/apps/tests/multiwin/makefile new file mode 100644 index 0000000..88aebac --- /dev/null +++ b/apps/tests/multiwin/makefile @@ -0,0 +1,21 @@ +# $Id$ + +PATH_TO_TOP = ../../.. + +TARGET_NORC = yes + +TARGET_TYPE = program + +TARGET_APPTYPE = windows + +TARGET_NAME = multiwin + +TARGET_SDKLIBS = kernel32.a gdi32.a + +TARGET_OBJECTS = $(TARGET_NAME).o + +include $(PATH_TO_TOP)/rules.mak + +include $(TOOLS_PATH)/helper.mk + +# EOF diff --git a/apps/tests/multiwin/multiwin.c b/apps/tests/multiwin/multiwin.c new file mode 100644 index 0000000..389b80e --- /dev/null +++ b/apps/tests/multiwin/multiwin.c @@ -0,0 +1,147 @@ +#include +#include + +static UINT WindowCount; +LRESULT WINAPI MultiWndProc(HWND, UINT, WPARAM, LPARAM); + +int WINAPI +WinMain(HINSTANCE hInstance, + HINSTANCE hPrevInstance, + LPSTR lpszCmdLine, + int nCmdShow) +{ + WNDCLASS wc; + MSG msg; + HWND hWnd1; + HWND hWnd2; + HWND hWndChild; + + wc.lpszClassName = "MultiClass"; + wc.lpfnWndProc = MultiWndProc; + wc.style = CS_VREDRAW | CS_HREDRAW; + wc.hInstance = hInstance; + wc.hIcon = LoadIcon(NULL, (LPCTSTR) IDI_APPLICATION); + wc.hCursor = LoadCursor(NULL, (LPCTSTR) IDC_ARROW); + wc.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1); + wc.lpszMenuName = NULL; + wc.cbClsExtra = 0; + wc.cbWndExtra = 0; + if (RegisterClass(&wc) == 0) + { + fprintf(stderr, "RegisterClass failed (last error 0x%X)\n", + GetLastError()); + return(1); + } + + hWnd1 = CreateWindow("MultiClass", + "TopLevel1", + WS_OVERLAPPEDWINDOW, + 0, + 0, + 320, + 240, + NULL, + NULL, + hInstance, + NULL); + + hWndChild = CreateWindow("MultiClass", + "Child1 of TopLevel1", + WS_CHILD | WS_BORDER | WS_CAPTION | WS_VISIBLE | WS_SYSMENU, + 20, + 120, + 200, + 200, + hWnd1, + NULL, + hInstance, + NULL); + + hWnd2 = CreateWindow("MultiClass", + "TopLevel2", + WS_OVERLAPPEDWINDOW, + 400, + 0, + 160, + 490, + NULL, + NULL, + hInstance, + NULL); + + if (! hWnd1 || ! hWnd2 || ! hWndChild) + { + fprintf(stderr, "CreateWindow failed (last error 0x%X)\n", + GetLastError()); + return(1); + } + WindowCount = 2; + + ShowWindow(hWnd1, SW_NORMAL); + ShowWindow(hWnd2, SW_NORMAL); + + while(GetMessage(&msg, NULL, 0, 0)) + { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + return msg.wParam; +} + +LRESULT CALLBACK MultiWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) +{ + PAINTSTRUCT ps; + HDC hDC; + LONG Style; + RECT Client; + HBRUSH Brush; + static COLORREF Colors[] = + { + RGB(0x00, 0x00, 0x00), + RGB(0x80, 0x00, 0x00), + RGB(0x00, 0x80, 0x00), + RGB(0x00, 0x00, 0x80), + RGB(0x80, 0x80, 0x00), + RGB(0x80, 0x00, 0x80), + RGB(0x00, 0x80, 0x80), + RGB(0x80, 0x80, 0x80), + RGB(0xff, 0x00, 0x00), + RGB(0x00, 0xff, 0x00), + RGB(0x00, 0x00, 0xff), + RGB(0xff, 0xff, 0x00), + RGB(0xff, 0x00, 0xff), + RGB(0x00, 0xff, 0xff), + RGB(0xff, 0xff, 0xff) + }; + static unsigned CurrentColor = 0; + + switch(msg) + { + case WM_PAINT: + hDC = BeginPaint(hWnd, &ps); + GetClientRect(hWnd, &Client); + Brush = CreateSolidBrush(Colors[CurrentColor]); + FillRect(hDC, &Client, Brush); + DeleteObject(Brush); + CurrentColor++; + if (sizeof(Colors) / sizeof(Colors[0]) <= CurrentColor) + { + CurrentColor = 0; + } + EndPaint(hWnd, &ps); + break; + + case WM_DESTROY: + Style = GetWindowLong(hWnd, GWL_STYLE); + if (0 == (Style & WS_CHILD) && 0 == --WindowCount) + { + PostQuitMessage(0); + } + break; + + default: + return DefWindowProc(hWnd, msg, wParam, lParam); + } + + return 0; +} diff --git a/apps/tests/mutex/.cvsignore b/apps/tests/mutex/.cvsignore index 7e87816..d63774a 100644 --- a/apps/tests/mutex/.cvsignore +++ b/apps/tests/mutex/.cvsignore @@ -3,3 +3,4 @@ *.exe *.coff *.sym +*.map diff --git a/apps/tests/nptest/.cvsignore b/apps/tests/nptest/.cvsignore index 7e87816..d63774a 100644 --- a/apps/tests/nptest/.cvsignore +++ b/apps/tests/nptest/.cvsignore @@ -3,3 +3,4 @@ *.exe *.coff *.sym +*.map diff --git a/apps/tests/palbitblt/.cvsignore b/apps/tests/palbitblt/.cvsignore new file mode 100644 index 0000000..d63774a --- /dev/null +++ b/apps/tests/palbitblt/.cvsignore @@ -0,0 +1,6 @@ +*.o +*.d +*.exe +*.coff +*.sym +*.map diff --git a/apps/tests/palbitblt/makefile b/apps/tests/palbitblt/makefile new file mode 100644 index 0000000..28b00d2 --- /dev/null +++ b/apps/tests/palbitblt/makefile @@ -0,0 +1,20 @@ + +PATH_TO_TOP = ../../.. + +TARGET_NORC = yes + +TARGET_TYPE = program + +TARGET_APPTYPE = windows + +TARGET_NAME = palbitblt + +TARGET_SDKLIBS = kernel32.a gdi32.a + +TARGET_OBJECTS = pal.o + +include $(PATH_TO_TOP)/rules.mak + +include $(TOOLS_PATH)/helper.mk + +# EOF diff --git a/apps/tests/palbitblt/pal.c b/apps/tests/palbitblt/pal.c new file mode 100644 index 0000000..98e4d5e --- /dev/null +++ b/apps/tests/palbitblt/pal.c @@ -0,0 +1,200 @@ +/* The idea of this test app is inspired from tutorial * + * found at http://www.theparticle.com/pgraph.html * + * * + * Developed by: Aleksey Bragin * + * Version: 1.0 */ + +#include + +#define W_WIDTH 320 +#define W_HEIGHT 240 + +// special version of BITMAPINFO and LOGPALETTE for max of 256 palette entries +typedef struct +{ + BITMAPINFOHEADER bmiHeader; + RGBQUAD bmiColors[256]; +} BITMAPINFO256; + +typedef struct { + WORD palVersion; + WORD palNumEntries; + PALETTEENTRY palPalEntry[256]; +} LOGPALETTE256; + +// The only global variable --- contents of the DIBitmap +BYTE* dibits; + +void GeneratePalette(RGBQUAD* p) +{ + int i; + for(i=0;i<256;i++) + { + p[i].rgbRed = i; + p[i].rgbGreen = i; + p[i].rgbBlue = i; + p[i].rgbReserved = 0; + } +} + +void DoBlt(HBITMAP hBM) +{ + HDC hDC,Context; + HWND ActiveWindow; + RECT dest; + HBITMAP dflBmp; + + if((ActiveWindow = GetActiveWindow()) == NULL) + return; + + hDC = GetDC(ActiveWindow); + GetClientRect(ActiveWindow,&dest); + + Context = CreateCompatibleDC(0); + dflBmp = SelectObject(Context, hBM); + BitBlt(hDC, 0, 0, dest.right, dest.bottom, Context, 0, 0, SRCCOPY); + SelectObject(Context, dflBmp); + DeleteDC(Context); + DeleteObject(dflBmp); + ReleaseDC(ActiveWindow, hDC); +} + +void UpdatePalette(HBITMAP hBM){ + int i,y; + static unsigned int c=0; + + for(i=0;i 512) + c = 0; + else + c++; // It's operation of incrementing of c variable, not reference of a cool OO language :-) + } + + DoBlt(hBM); +} + +void InitBitmap(HANDLE *hBM){ + HPALETTE PalHan; + HWND ActiveWindow; + HDC hDC; + RGBQUAD palette[256]; + int i; + BITMAPINFO256 bmInf; + LOGPALETTE256 palInf; + + ActiveWindow = GetActiveWindow(); + hDC = GetDC(ActiveWindow); + + bmInf.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); + bmInf.bmiHeader.biWidth = W_WIDTH; + bmInf.bmiHeader.biHeight = -abs(W_HEIGHT); + bmInf.bmiHeader.biPlanes = 1; + bmInf.bmiHeader.biBitCount = 8; + bmInf.bmiHeader.biCompression = BI_RGB; + bmInf.bmiHeader.biSizeImage = 0; + bmInf.bmiHeader.biXPelsPerMeter = 0; + bmInf.bmiHeader.biYPelsPerMeter = 0; + bmInf.bmiHeader.biClrUsed = 256; + bmInf.bmiHeader.biClrImportant = 256; + + GeneratePalette(palette); + + for(i=0;i<256;i++) + bmInf.bmiColors[i] = palette[i]; + + palInf.palVersion = 0x300; + palInf.palNumEntries = 256; + for(i=0;i<256;i++){ + palInf.palPalEntry[i].peRed = palette[i].rgbRed; + palInf.palPalEntry[i].peGreen = palette[i].rgbGreen; + palInf.palPalEntry[i].peBlue = palette[i].rgbBlue; + palInf.palPalEntry[i].peFlags = PC_NOCOLLAPSE; + } + + // Create palette + PalHan = CreatePalette((LOGPALETTE*)&palInf); + + // Select it into hDC + SelectPalette(hDC,PalHan,FALSE); + + // Realize palette in hDC + RealizePalette(hDC); + + // Delete handle to palette + DeleteObject(PalHan); + + // Create dib section + *hBM = CreateDIBSection(hDC,(BITMAPINFO*)&bmInf, + DIB_RGB_COLORS,(void**)&dibits,0,0); + + // Release dc + ReleaseDC(ActiveWindow,hDC); +} + +LRESULT CALLBACK WndProc(HWND hWnd,UINT msg, WPARAM wParam,LPARAM lParam) +{ + switch(msg){ + case WM_DESTROY: + PostQuitMessage(0); + return 0; + default: + return DefWindowProc(hWnd,msg,wParam,lParam); + } +} + + + +int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance, LPSTR lpszCmdParam,int nCmdShow) +{ + WNDCLASS WndClass; + HWND hWnd; + MSG msg; + char szName[] = "Palette BitBlt test"; + BOOL exit = FALSE; + HBITMAP hBM; + + // Create and register window class (not modified!!!!!!!!!!!1) + WndClass.style = CS_HREDRAW|CS_VREDRAW|CS_OWNDC; + WndClass.lpfnWndProc = WndProc; + WndClass.cbClsExtra = 0; + WndClass.cbWndExtra = 0; + WndClass.hbrBackground = NULL;//GetStockObject(BLACK_BRUSH); + WndClass.hIcon = NULL;//LoadIcon(hInstance,NULL); + WndClass.hCursor = NULL;//LoadCursor(NULL,IDC_ARROW); + WndClass.hInstance = hInstance; + WndClass.lpszClassName = szName; + WndClass.lpszMenuName = 0; + + RegisterClass(&WndClass); + + // Create and show window (change styles !!!!!!!!) + hWnd = CreateWindow(szName, "ReactOS palette bitblt test", + WS_CAPTION|WS_MINIMIZEBOX|WS_SYSMENU, + CW_USEDEFAULT,CW_USEDEFAULT,W_WIDTH,W_HEIGHT, + 0,0,hInstance,0); + ShowWindow(hWnd,nCmdShow); + + // Prepare bitmap to be bitblt + InitBitmap(&hBM); + + // Main message loop + while (!exit) + { + UpdatePalette(hBM); + Sleep(200); + + if(PeekMessage(&msg,0,0,0,PM_NOREMOVE) == TRUE) + { + if (!GetMessage(&msg,0,0,0)) + exit = TRUE; + + TranslateMessage(&msg); + DispatchMessage(&msg); + } + } + + return msg.wParam; +} diff --git a/apps/tests/patblt/.cvsignore b/apps/tests/patblt/.cvsignore new file mode 100644 index 0000000..d63774a --- /dev/null +++ b/apps/tests/patblt/.cvsignore @@ -0,0 +1,6 @@ +*.o +*.d +*.exe +*.coff +*.sym +*.map diff --git a/apps/tests/patblt/makefile b/apps/tests/patblt/makefile index a433ac4..ecf5d9a 100644 --- a/apps/tests/patblt/makefile +++ b/apps/tests/patblt/makefile @@ -1,66 +1,31 @@ -# Makefile - Proj_Listing2_1.dsp -ifndef CFG -CFG=Proj_Listing2_1 - Win32 Debug -endif -CC=gcc -CFLAGS= -CXX=g++ -CXXFLAGS=$(CFLAGS) -RC=windres -O COFF -ifeq "$(CFG)" "Proj_Listing2_1 - Win32 Release" -CFLAGS+=-fexceptions -O2 -DWIN32 -DNDEBUG -D_WINDOWS -D_MBCS -W -LD=$(CXX) $(CXXFLAGS) -LDFLAGS= -LDFLAGS+=-Wl,--subsystem,windows -LIBS+=-lkernel32 -luser32 -lgdi32 -else -ifeq "$(CFG)" "Proj_Listing2_1 - Win32 Debug" -CFLAGS+=-fexceptions -g -O0 -DWIN32 -D_DEBUG -D_WINDOWS -D_MBCS -W -LD=$(CXX) $(CXXFLAGS) -LDFLAGS= -LDFLAGS+=-Wl,--subsystem,windows -LIBS+=-lkernel32 -luser32 -lgdi32 -endif -endif +PATH_TO_TOP = ../../.. -ifndef TARGET -TARGET=patblt.exe -endif +TARGET_TYPE = program -.PHONY: all -all: $(TARGET) +TARGET_APPTYPE = windows -%.o: %.c - $(CC) $(CFLAGS) $(CPPFLAGS) -o $@ -c $< +TARGET_NAME = patblt -%.o: %.cpp - $(CXX) $(CXXFLAGS) $(CPPFLAGS) -o $@ -c $< +TARGET_NORC = yes -%.res: %.rc - $(RC) $(CPPFLAGS) -o $@ -i $< +TARGET_CFLAGS = -fexceptions -g -O0 -DWIN32 -D_DEBUG -D_WINDOWS -D_MBCS -W -D__USE_W32API + +TARGET_CPPFLAGS = -fexceptions -g -O0 -DWIN32 -D_DEBUG -D_WINDOWS -D_MBCS -W -D__USE_W32API -SOURCE_FILES= \ - patblt.cpp +TARGET_SDKLIBS = \ + kernel32.a \ + user32.a \ + gdi32.a -HEADER_FILES= +TARGET_OBJECTS = \ + patblt.o -RESOURCE_FILES= +include $(PATH_TO_TOP)/rules.mak -SRCS=$(SOURCE_FILES) $(HEADER_FILES) $(RESOURCE_FILES) +include $(TOOLS_PATH)/helper.mk -OBJS=$(patsubst %.rc,%.res,$(patsubst %.cpp,%.o,$(patsubst %.c,%.o,$(filter %.c %.cpp %.rc,$(SRCS))))) - -$(TARGET): $(OBJS) - $(LD) $(LDFLAGS) -o $@ $(OBJS) $(LIBS) - -.PHONY: clean -clean: - -del $(OBJS) $(TARGET) - -.PHONY: depends -depends: - -$(CXX) $(CXXFLAGS) $(CPPFLAGS) -MM $(filter %.c %.cpp,$(SRCS)) > Proj_Listing2_1.dep - --include Proj_Listing2_1.dep +# overide LD_CC to use g++ for linking of the executable +LD_CC = $(CXX) +# EOF diff --git a/apps/tests/patblt/patblt.cpp b/apps/tests/patblt/patblt.cpp index f156fa5..84c5d7b 100644 --- a/apps/tests/patblt/patblt.cpp +++ b/apps/tests/patblt/patblt.cpp @@ -230,9 +230,7 @@ LRESULT CALLBACK MainWndProc(HWND HWnd, UINT Msg, WPARAM WParam, { PAINTSTRUCT ps; HDC Hdc = BeginPaint(HWnd, &ps); -#if 0 try -#endif { // // TODO: Add palette support... @@ -245,9 +243,7 @@ LRESULT CALLBACK MainWndProc(HWND HWnd, UINT Msg, WPARAM WParam, HMemDC, 0, 0, SRCCOPY); } -#if 0 catch (...) -#endif { EndPaint(HWnd, &ps); } diff --git a/apps/tests/pipe/.cvsignore b/apps/tests/pipe/.cvsignore new file mode 100644 index 0000000..d63774a --- /dev/null +++ b/apps/tests/pipe/.cvsignore @@ -0,0 +1,6 @@ +*.o +*.d +*.exe +*.coff +*.sym +*.map diff --git a/apps/tests/pipe/Makefile b/apps/tests/pipe/Makefile new file mode 100644 index 0000000..157a651 --- /dev/null +++ b/apps/tests/pipe/Makefile @@ -0,0 +1,22 @@ + +PATH_TO_TOP = ../../.. + +TARGET_NORC = yes + +TARGET_TYPE = program + +TARGET_APPTYPE = console + +TARGET_NAME = pipe + +TARGET_CFLAGS = -DSTANDALONE + +TARGET_SDKLIBS = ntdll.a kernel32.a + +TARGET_OBJECTS = $(TARGET_NAME).o + +include $(PATH_TO_TOP)/rules.mak + +include $(TOOLS_PATH)/helper.mk + +# EOF diff --git a/apps/tests/pipe/pipe.c b/apps/tests/pipe/pipe.c new file mode 100644 index 0000000..349d9ca --- /dev/null +++ b/apps/tests/pipe/pipe.c @@ -0,0 +1,602 @@ +/* + * Unit tests for named pipe functions in Wine + * + * Copyright (c) 2002 Dan Kegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * 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. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include +#include +#include +#include + +#ifndef STANDALONE +#include "wine/test.h" +#else +#include +#define START_TEST(name) main(int argc, char **argv) +#define ok(condition, msg) assert(condition) +#define todo_wine +#endif + +#ifndef STANDALONE +#include +#include +#include +#include +#else +#include +#endif + +#define PIPENAME "\\\\.\\PiPe\\tests_" __FILE__ + +static void msg(const char *s) +{ + DWORD cbWritten; + WriteFile(GetStdHandle(STD_OUTPUT_HANDLE), s, strlen(s), &cbWritten, NULL); +} + +void test_CreateNamedPipe(void) +{ + HANDLE hnp; + HANDLE hFile; + const char obuf[] = "Bit Bucket"; + char ibuf[32]; + DWORD written; + DWORD readden; + + msg("test_CreateNamedPipe starting\n"); + /* Bad parameter checks */ + hnp = CreateNamedPipe("not a named pipe", PIPE_ACCESS_DUPLEX, PIPE_TYPE_BYTE | PIPE_WAIT, + /* nMaxInstances */ 1, + /* nOutBufSize */ 1024, + /* nInBufSize */ 1024, + /* nDefaultWait */ NMPWAIT_USE_DEFAULT_WAIT, + /* lpSecurityAttrib */ NULL); + + if (hnp == INVALID_HANDLE_VALUE && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) { + /* Is this the right way to notify user of skipped tests? */ + ok(hnp == INVALID_HANDLE_VALUE && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED, + "CreateNamedPipe not supported on this platform, skipping tests."); + return; + } + ok(hnp == INVALID_HANDLE_VALUE && GetLastError() == ERROR_INVALID_NAME, + "CreateNamedPipe should fail if name doesn't start with \\\\.\\pipe"); + + hnp = CreateNamedPipe(NULL, + PIPE_ACCESS_DUPLEX, PIPE_TYPE_BYTE | PIPE_WAIT, + 1, 1024, 1024, NMPWAIT_USE_DEFAULT_WAIT, NULL); + ok(hnp == INVALID_HANDLE_VALUE && GetLastError() == ERROR_PATH_NOT_FOUND, + "CreateNamedPipe should fail if name is NULL"); + + hFile = CreateFileA(PIPENAME, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0); + ok(hFile == INVALID_HANDLE_VALUE + && GetLastError() == ERROR_FILE_NOT_FOUND, + "connecting to nonexistent named pipe should fail with ERROR_FILE_NOT_FOUND"); + + /* Functional checks */ + + hnp = CreateNamedPipe(PIPENAME, PIPE_ACCESS_DUPLEX, PIPE_TYPE_BYTE | PIPE_WAIT, + /* nMaxInstances */ 1, + /* nOutBufSize */ 1024, + /* nInBufSize */ 1024, + /* nDefaultWait */ NMPWAIT_USE_DEFAULT_WAIT, + /* lpSecurityAttrib */ NULL); + ok(hnp != INVALID_HANDLE_VALUE, "CreateNamedPipe failed"); + + hFile = CreateFileA(PIPENAME, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0); + todo_wine { + ok(hFile != INVALID_HANDLE_VALUE, "CreateFile failed"); + } + + /* don't try to do i/o if one side couldn't be opened, as it hangs */ + if (hFile != INVALID_HANDLE_VALUE) { + HANDLE hFile2; + + /* Make sure we can read and write a few bytes in both directions */ + memset(ibuf, 0, sizeof(ibuf)); + ok(WriteFile(hnp, obuf, sizeof(obuf), &written, NULL), "WriteFile"); + ok(written == sizeof(obuf), "write file len"); + ok(ReadFile(hFile, ibuf, sizeof(obuf), &readden, NULL), "ReadFile"); + ok(readden == sizeof(obuf), "read file len"); + ok(memcmp(obuf, ibuf, written) == 0, "content check"); + + memset(ibuf, 0, sizeof(ibuf)); + ok(WriteFile(hFile, obuf, sizeof(obuf), &written, NULL), "WriteFile"); + ok(written == sizeof(obuf), "write file len"); + ok(ReadFile(hnp, ibuf, sizeof(obuf), &readden, NULL), "ReadFile"); + ok(readden == sizeof(obuf), "read file len"); + ok(memcmp(obuf, ibuf, written) == 0, "content check"); + + /* Picky conformance tests */ + + /* Verify that you can't connect to pipe again + * until server calls DisconnectNamedPipe+ConnectNamedPipe + * or creates a new pipe + * case 1: other client not yet closed + */ + hFile2 = CreateFileA(PIPENAME, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0); + ok(hFile2 == INVALID_HANDLE_VALUE, + "connecting to named pipe after other client closes but before DisconnectNamedPipe should fail"); + ok(GetLastError() == ERROR_PIPE_BUSY, + "connecting to named pipe before other client closes should fail with ERROR_PIPE_BUSY"); + + ok(CloseHandle(hFile), "CloseHandle"); + + /* case 2: other client already closed */ + hFile = CreateFileA(PIPENAME, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0); + ok(hFile == INVALID_HANDLE_VALUE, + "connecting to named pipe after other client closes but before DisconnectNamedPipe should fail"); + ok(GetLastError() == ERROR_PIPE_BUSY, + "connecting to named pipe after other client closes but before DisconnectNamedPipe should fail with ERROR_PIPE_BUSY"); + + ok(DisconnectNamedPipe(hnp), "DisconnectNamedPipe"); + + /* case 3: server has called DisconnectNamedPipe but not ConnectNamed Pipe */ + hFile = CreateFileA(PIPENAME, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0); + ok(hFile == INVALID_HANDLE_VALUE, + "connecting to named pipe after other client closes but before DisconnectNamedPipe should fail"); + ok(GetLastError() == ERROR_PIPE_BUSY, + "connecting to named pipe after other client closes but before ConnectNamedPipe should fail with ERROR_PIPE_BUSY"); + + /* to be complete, we'd call ConnectNamedPipe here and loop, + * but by default that's blocking, so we'd either have + * to turn on the uncommon nonblocking mode, or + * use another thread. + */ + } + + ok(CloseHandle(hnp), "CloseHandle"); + + msg("test_CreateNamedPipe returning\n"); +} + +void test_CreateNamedPipe_instances_must_match(void) +{ + HANDLE hnp, hnp2; + + /* Check no mismatch */ + hnp = CreateNamedPipe(PIPENAME, PIPE_ACCESS_DUPLEX, PIPE_TYPE_BYTE | PIPE_WAIT, + /* nMaxInstances */ 2, + /* nOutBufSize */ 1024, + /* nInBufSize */ 1024, + /* nDefaultWait */ NMPWAIT_USE_DEFAULT_WAIT, + /* lpSecurityAttrib */ NULL); + ok(hnp != INVALID_HANDLE_VALUE, "CreateNamedPipe failed"); + + hnp2 = CreateNamedPipe(PIPENAME, PIPE_ACCESS_DUPLEX, PIPE_TYPE_BYTE | PIPE_WAIT, + /* nMaxInstances */ 2, + /* nOutBufSize */ 1024, + /* nInBufSize */ 1024, + /* nDefaultWait */ NMPWAIT_USE_DEFAULT_WAIT, + /* lpSecurityAttrib */ NULL); + ok(hnp2 != INVALID_HANDLE_VALUE, "CreateNamedPipe failed"); + + ok(CloseHandle(hnp), "CloseHandle"); + ok(CloseHandle(hnp2), "CloseHandle"); + + /* Check nMaxInstances */ + hnp = CreateNamedPipe(PIPENAME, PIPE_ACCESS_DUPLEX, PIPE_TYPE_BYTE | PIPE_WAIT, + /* nMaxInstances */ 1, + /* nOutBufSize */ 1024, + /* nInBufSize */ 1024, + /* nDefaultWait */ NMPWAIT_USE_DEFAULT_WAIT, + /* lpSecurityAttrib */ NULL); + ok(hnp != INVALID_HANDLE_VALUE, "CreateNamedPipe failed"); + + todo_wine { + hnp2 = CreateNamedPipe(PIPENAME, PIPE_ACCESS_DUPLEX, PIPE_TYPE_BYTE | PIPE_WAIT, + /* nMaxInstances */ 1, + /* nOutBufSize */ 1024, + /* nInBufSize */ 1024, + /* nDefaultWait */ NMPWAIT_USE_DEFAULT_WAIT, + /* lpSecurityAttrib */ NULL); + ok(hnp2 == INVALID_HANDLE_VALUE + && GetLastError() == ERROR_PIPE_BUSY, "nMaxInstances not obeyed"); + } + + ok(CloseHandle(hnp), "CloseHandle"); + + /* Check PIPE_ACCESS_* */ + hnp = CreateNamedPipe(PIPENAME, PIPE_ACCESS_DUPLEX, PIPE_TYPE_BYTE | PIPE_WAIT, + /* nMaxInstances */ 2, + /* nOutBufSize */ 1024, + /* nInBufSize */ 1024, + /* nDefaultWait */ NMPWAIT_USE_DEFAULT_WAIT, + /* lpSecurityAttrib */ NULL); + ok(hnp != INVALID_HANDLE_VALUE, "CreateNamedPipe failed"); + + todo_wine { + hnp2 = CreateNamedPipe(PIPENAME, PIPE_ACCESS_INBOUND, PIPE_TYPE_BYTE | PIPE_WAIT, + /* nMaxInstances */ 1, + /* nOutBufSize */ 1024, + /* nInBufSize */ 1024, + /* nDefaultWait */ NMPWAIT_USE_DEFAULT_WAIT, + /* lpSecurityAttrib */ NULL); + ok(hnp2 == INVALID_HANDLE_VALUE + && GetLastError() == ERROR_ACCESS_DENIED, "PIPE_ACCESS_* mismatch allowed"); + } + + ok(CloseHandle(hnp), "CloseHandle"); + + /* etc, etc */ +} + +/** implementation of alarm() */ +static DWORD CALLBACK alarmThreadMain(LPVOID arg) +{ + DWORD timeout = (DWORD) arg; + msg("alarmThreadMain\n"); + Sleep(timeout); + ok(FALSE, "alarm"); + ExitProcess(1); + return 1; +} + +HANDLE hnp = INVALID_HANDLE_VALUE; + +/** Trivial byte echo server - disconnects after each session */ +static DWORD CALLBACK serverThreadMain1(LPVOID arg) +{ + int i; + + msg("serverThreadMain1 start\n"); + /* Set up a simple echo server */ + hnp = CreateNamedPipe(PIPENAME "serverThreadMain1", PIPE_ACCESS_DUPLEX, + PIPE_TYPE_BYTE | PIPE_WAIT, + /* nMaxInstances */ 1, + /* nOutBufSize */ 1024, + /* nInBufSize */ 1024, + /* nDefaultWait */ NMPWAIT_USE_DEFAULT_WAIT, + /* lpSecurityAttrib */ NULL); + + ok(hnp != INVALID_HANDLE_VALUE, "CreateNamedPipe failed"); + for (i = 0; ; i++) { + char buf[512]; + DWORD written; + DWORD readden; + DWORD success; + + /* Wait for client to connect */ + msg("Server calling ConnectNamedPipe...\n"); + ok(ConnectNamedPipe(hnp, NULL) + || GetLastError() == ERROR_PIPE_CONNECTED, "ConnectNamedPipe"); + msg("ConnectNamedPipe returned.\n"); + + /* Echo bytes once */ + memset(buf, 0, sizeof(buf)); + + msg("Server reading...\n"); + success = ReadFile(hnp, buf, sizeof(buf), &readden, NULL); + msg("Server done reading.\n"); + ok(success, "ReadFile"); + + msg("Server writing...\n"); + ok(WriteFile(hnp, buf, readden, &written, NULL), "WriteFile"); + msg("Server done writing.\n"); + ok(written == readden, "write file len"); + + /* finish this connection, wait for next one */ + ok(FlushFileBuffers(hnp), "FlushFileBuffers"); + ok(DisconnectNamedPipe(hnp), "DisconnectNamedPipe"); + } +} + +/** Trivial byte echo server - closes after each connection */ +static DWORD CALLBACK serverThreadMain2(LPVOID arg) +{ + int i; + HANDLE hnpNext = 0; + + msg("serverThreadMain2\n"); + /* Set up a simple echo server */ + hnp = CreateNamedPipe(PIPENAME "serverThreadMain2", PIPE_ACCESS_DUPLEX, + PIPE_TYPE_BYTE | PIPE_WAIT, + /* nMaxInstances */ 2, + /* nOutBufSize */ 1024, + /* nInBufSize */ 1024, + /* nDefaultWait */ NMPWAIT_USE_DEFAULT_WAIT, + /* lpSecurityAttrib */ NULL); + ok(hnp != INVALID_HANDLE_VALUE, "CreateNamedPipe failed"); + + for (i = 0; ; i++) { + char buf[512]; + DWORD written; + DWORD readden; + DWORD success; + + /* Wait for client to connect */ + msg("Server calling ConnectNamedPipe...\n"); + ok(ConnectNamedPipe(hnp, NULL) + || GetLastError() == ERROR_PIPE_CONNECTED, "ConnectNamedPipe"); + msg("ConnectNamedPipe returned.\n"); + + /* Echo bytes once */ + memset(buf, 0, sizeof(buf)); + + msg("Server reading...\n"); + success = ReadFile(hnp, buf, sizeof(buf), &readden, NULL); + msg("Server done reading.\n"); + ok(success, "ReadFile"); + + msg("Server writing...\n"); + ok(WriteFile(hnp, buf, readden, &written, NULL), "WriteFile"); + msg("Server done writing.\n"); + ok(written == readden, "write file len"); + + /* finish this connection, wait for next one */ + ok(FlushFileBuffers(hnp), "FlushFileBuffers"); + ok(DisconnectNamedPipe(hnp), "DisconnectNamedPipe"); + + /* Set up next echo server */ + hnpNext = + CreateNamedPipe(PIPENAME "serverThreadMain2", PIPE_ACCESS_DUPLEX, + PIPE_TYPE_BYTE | PIPE_WAIT, + /* nMaxInstances */ 2, + /* nOutBufSize */ 1024, + /* nInBufSize */ 1024, + /* nDefaultWait */ NMPWAIT_USE_DEFAULT_WAIT, + /* lpSecurityAttrib */ NULL); + + ok(hnpNext != INVALID_HANDLE_VALUE, "CreateNamedPipe failed"); + + ok(CloseHandle(hnp), "CloseHandle"); + hnp = hnpNext; + } +} + +/** Trivial byte echo server - uses overlapped named pipe calls */ +static DWORD CALLBACK serverThreadMain3(LPVOID arg) +{ + int i; + HANDLE hEvent; + + msg("serverThreadMain3\n"); + /* Set up a simple echo server */ + hnp = CreateNamedPipe(PIPENAME "serverThreadMain3", PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED, + PIPE_TYPE_BYTE | PIPE_WAIT, + /* nMaxInstances */ 1, + /* nOutBufSize */ 1024, + /* nInBufSize */ 1024, + /* nDefaultWait */ NMPWAIT_USE_DEFAULT_WAIT, + /* lpSecurityAttrib */ NULL); + ok(hnp != INVALID_HANDLE_VALUE, "CreateNamedPipe failed"); + + hEvent = CreateEvent(NULL, // security attribute + TRUE, // manual reset event + FALSE, // initial state + NULL); // name + ok(hEvent != NULL, "CreateEvent"); + + for (i = 0; ; i++) { + char buf[512]; + DWORD written; + DWORD readden; + DWORD dummy; + DWORD success; + OVERLAPPED oOverlap; + int letWFSOEwait = (i & 2); + int letGORwait = (i & 1); + DWORD err; + + memset(&oOverlap, 0, sizeof(oOverlap)); + oOverlap.hEvent = hEvent; + + /* Wait for client to connect */ + msg("Server calling overlapped ConnectNamedPipe...\n"); + success = ConnectNamedPipe(hnp, &oOverlap); + err = GetLastError(); + ok(success || err == ERROR_IO_PENDING + || err == ERROR_PIPE_CONNECTED, "overlapped ConnectNamedPipe"); + msg("overlapped ConnectNamedPipe returned.\n"); + if (!success && (err == ERROR_IO_PENDING) && letWFSOEwait) + ok(WaitForSingleObjectEx(hEvent, INFINITE, TRUE) == 0, "wait ConnectNamedPipe"); + success = GetOverlappedResult(hnp, &oOverlap, &dummy, letGORwait); + if (!letGORwait && !letWFSOEwait && !success) { + ok(GetLastError() == ERROR_IO_INCOMPLETE, "GetOverlappedResult"); + success = GetOverlappedResult(hnp, &oOverlap, &dummy, TRUE); + } + ok(success, "GetOverlappedResult ConnectNamedPipe"); + msg("overlapped ConnectNamedPipe operation complete.\n"); + + /* Echo bytes once */ + memset(buf, 0, sizeof(buf)); + + msg("Server reading...\n"); + success = ReadFile(hnp, buf, sizeof(buf), NULL, &oOverlap); + msg("Server ReadFile returned...\n"); + err = GetLastError(); + ok(success || err == ERROR_IO_PENDING, "overlapped ReadFile"); + msg("overlapped ReadFile returned.\n"); + if (!success && (err == ERROR_IO_PENDING) && letWFSOEwait) + ok(WaitForSingleObjectEx(hEvent, INFINITE, TRUE) == 0, "wait ReadFile"); + success = GetOverlappedResult(hnp, &oOverlap, &readden, letGORwait); + if (!letGORwait && !letWFSOEwait && !success) { + ok(GetLastError() == ERROR_IO_INCOMPLETE, "GetOverlappedResult"); + success = GetOverlappedResult(hnp, &oOverlap, &readden, TRUE); + } + msg("Server done reading.\n"); + ok(success, "overlapped ReadFile"); + + msg("Server writing...\n"); + success = WriteFile(hnp, buf, readden, NULL, &oOverlap); + msg("Server WriteFile returned...\n"); + err = GetLastError(); + ok(success || err == ERROR_IO_PENDING, "overlapped WriteFile"); + msg("overlapped WriteFile returned.\n"); + if (!success && (err == ERROR_IO_PENDING) && letWFSOEwait) + ok(WaitForSingleObjectEx(hEvent, INFINITE, TRUE) == 0, "wait WriteFile"); + success = GetOverlappedResult(hnp, &oOverlap, &written, letGORwait); + if (!letGORwait && !letWFSOEwait && !success) { + ok(GetLastError() == ERROR_IO_INCOMPLETE, "GetOverlappedResult"); + success = GetOverlappedResult(hnp, &oOverlap, &written, TRUE); + } + msg("Server done writing.\n"); + ok(success, "overlapped WriteFile"); + ok(written == readden, "write file len"); + + /* finish this connection, wait for next one */ + ok(FlushFileBuffers(hnp), "FlushFileBuffers"); + ok(DisconnectNamedPipe(hnp), "DisconnectNamedPipe"); + } +} + +static void exercizeServer(const char *pipename, HANDLE serverThread) +{ + int i; + + msg("exercizeServer starting\n"); + for (i = 0; i < 8; i++) { + HANDLE hFile; + const char obuf[] = "Bit Bucket"; + char ibuf[32]; + DWORD written; + DWORD readden; + int loop; + + for (loop = 0; loop < 3; loop++) { + DWORD err; + msg("Client connecting...\n"); + /* Connect to the server */ + hFile = CreateFileA(pipename, GENERIC_READ | GENERIC_WRITE, 0, + NULL, OPEN_EXISTING, 0, 0); + if (hFile != INVALID_HANDLE_VALUE) + break; + err = GetLastError(); + if (loop == 0) + ok(err == ERROR_PIPE_BUSY || err == ERROR_FILE_NOT_FOUND, "connecting to pipe"); + else + ok(err == ERROR_PIPE_BUSY, "connecting to pipe"); + msg("connect failed, retrying\n"); + Sleep(200); + } + ok(hFile != INVALID_HANDLE_VALUE, "client opening named pipe"); + + /* Make sure it can echo */ + memset(ibuf, 0, sizeof(ibuf)); + msg("Client writing...\n"); + ok(WriteFile(hFile, obuf, sizeof(obuf), &written, NULL), "WriteFile to client end of pipe"); + ok(written == sizeof(obuf), "write file len"); + msg("Client reading...\n"); + ok(ReadFile(hFile, ibuf, sizeof(obuf), &readden, NULL), "ReadFile from client end of pipe"); + ok(readden == sizeof(obuf), "read file len"); + ok(memcmp(obuf, ibuf, written) == 0, "content check"); + + msg("Client closing...\n"); + ok(CloseHandle(hFile), "CloseHandle"); + } + + ok(TerminateThread(serverThread, 0), "TerminateThread"); + CloseHandle(hnp); + msg("exercizeServer returning\n"); +} + +void test_NamedPipe_2(void) +{ + HANDLE serverThread; + DWORD serverThreadId; + HANDLE alarmThread; + DWORD alarmThreadId; + + msg("test_NamedPipe_2 starting\n"); + /* Set up a ten second timeout */ + alarmThread = CreateThread(NULL, 0, alarmThreadMain, (void *) 10000, 0, &alarmThreadId); + + /* The servers we're about to exercize do try to clean up carefully, + * but to reduce the change of a test failure due to a pipe handle + * leak in the test code, we'll use a different pipe name for each server. + */ + + /* Try server #1 */ + serverThread = CreateThread(NULL, 0, serverThreadMain1, 0, 0, &serverThreadId); + ok(serverThread != INVALID_HANDLE_VALUE, "CreateThread"); + exercizeServer(PIPENAME "serverThreadMain1", serverThread); + + /* Try server #2 */ + serverThread = CreateThread(NULL, 0, serverThreadMain2, 0, 0, &serverThreadId); + ok(serverThread != INVALID_HANDLE_VALUE, "CreateThread"); + exercizeServer(PIPENAME "serverThreadMain2", serverThread); + + /* Try server #3 */ + serverThread = CreateThread(NULL, 0, serverThreadMain3, 0, 0, &serverThreadId); + ok(serverThread != INVALID_HANDLE_VALUE, "CreateThread"); + exercizeServer(PIPENAME "serverThreadMain3", serverThread); + + ok(TerminateThread(alarmThread, 0), "TerminateThread"); + msg("test_NamedPipe_2 returning\n"); +} + +void test_DisconnectNamedPipe(void) +{ + HANDLE hnp; + HANDLE hFile; + const char obuf[] = "Bit Bucket"; + char ibuf[32]; + DWORD written; + DWORD readden; + + hnp = CreateNamedPipe(PIPENAME, PIPE_ACCESS_DUPLEX, PIPE_TYPE_BYTE | PIPE_WAIT, + /* nMaxInstances */ 1, + /* nOutBufSize */ 1024, + /* nInBufSize */ 1024, + /* nDefaultWait */ NMPWAIT_USE_DEFAULT_WAIT, + /* lpSecurityAttrib */ NULL); + ok(hnp != INVALID_HANDLE_VALUE, "CreateNamedPipe failed"); + + ok(WriteFile(hnp, obuf, sizeof(obuf), &written, NULL) == 0 + && GetLastError() == ERROR_PIPE_LISTENING, "WriteFile to not-yet-connected pipe"); + ok(ReadFile(hnp, ibuf, sizeof(ibuf), &readden, NULL) == 0 + && GetLastError() == ERROR_PIPE_LISTENING, "ReadFile from not-yet-connected pipe"); + + hFile = CreateFileA(PIPENAME, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0); + todo_wine { + ok(hFile != INVALID_HANDLE_VALUE, "CreateFile failed"); + } + + /* don't try to do i/o if one side couldn't be opened, as it hangs */ + if (hFile != INVALID_HANDLE_VALUE) { + + /* see what happens if server calls DisconnectNamedPipe + * when there are bytes in the pipe + */ + + ok(WriteFile(hFile, obuf, sizeof(obuf), &written, NULL), "WriteFile"); + ok(written == sizeof(obuf), "write file len"); + ok(DisconnectNamedPipe(hnp), "DisconnectNamedPipe while messages waiting"); + ok(WriteFile(hFile, obuf, sizeof(obuf), &written, NULL) == 0 + && GetLastError() == ERROR_PIPE_NOT_CONNECTED, "WriteFile to disconnected pipe"); + ok(ReadFile(hnp, ibuf, sizeof(ibuf), &readden, NULL) == 0 + && GetLastError() == ERROR_PIPE_NOT_CONNECTED, + "ReadFile from disconnected pipe with bytes waiting"); + ok(CloseHandle(hFile), "CloseHandle"); + } + + ok(CloseHandle(hnp), "CloseHandle"); + +} + +START_TEST(pipe) +{ + msg("test 1 of 4:\n"); + test_DisconnectNamedPipe(); + msg("test 2 of 4:\n"); + test_CreateNamedPipe_instances_must_match(); + msg("test 3 of 4:\n"); + test_NamedPipe_2(); + msg("test 4 of 4:\n"); + test_CreateNamedPipe(); + msg("all tests done\n"); +} diff --git a/apps/tests/polytest/.cvsignore b/apps/tests/polytest/.cvsignore new file mode 100644 index 0000000..f7922c9 --- /dev/null +++ b/apps/tests/polytest/.cvsignore @@ -0,0 +1,10 @@ +*.o +*.d +*.exe +*.coff +*.sym +*.map +*.ncb +*.opt +Debug +Release diff --git a/apps/tests/polytest/polytest.cpp b/apps/tests/polytest/polytest.cpp new file mode 100644 index 0000000..8a440cf --- /dev/null +++ b/apps/tests/polytest/polytest.cpp @@ -0,0 +1,874 @@ +// this is a little 'sandbox' application I put together that duplicates +// the 'guts' of the Polygon algorithm. It allows for quick turn-around +// in testing the algorithm to see what effect your changes have. +// +// Royce3 + +// the stuff immediately following is support so that the sandbox code +// is nearly identical to the real thing. +// search for the _tagFILL_EDGE struct to find the beginning of the +// real stuff. + +#include +#include +#include +#include +#include +#include + +#define FASTCALL +#define STDCALL +#define INT int +#define CLIPOBJ int +#define SURFOBJ int +#define PBRUSHOBJ int +#define MIX char +#define BOOL bool +#define TRUE true +#define FALSE false +#define CONST const +#define MmCopyFromCaller memmove +#define ALTERNATE 0 +#define WINDING 1 + +#define ASSERT assert + +typedef struct W +{ + int polyFillMode; +} W; + +typedef struct DC +{ + CLIPOBJ CombinedClip; + W w; +} DC, *PDC; + +typedef struct tagPOINT +{ + long x, y; +} POINT, *PPOINT, *LPPOINT; + +typedef struct RECTL +{ + long left, top, right, bottom; +} RECTL, *PRECTL; + +#define EngFreeMem free + +#define FL_ZERO_MEMORY 1 + +#define DPRINT1 printf("%i:",__LINE__);printf +inline void DPRINT(...){} + +#define SCREENX 25 +#define SCREENY 15 +char screen[SCREENY][SCREENX]; + +#define EDGE_CHAR '*' +#define FILL_CHAR 'o' + +void* EngAllocMem ( int zero, unsigned long size, int tag=0 ) +{ + void* p = malloc ( size ); + if ( zero ) + memset ( p, 0, size ); + return p; +} + +template +inline T MIN ( T a, T b ) +{ + return a < b ? a : b; +} + +template +inline T MAX ( T a, T b ) +{ + return a > b ? a : b; +} + +template +inline T abs ( T t ) +{ + return t < 0 ? -t : t; +} + +void putpixel ( int x, int y, char c ) +{ + ASSERT( x >= 0 && x < SCREENX && y >= 0 && y < SCREENY ); + if ( screen[y][x] == c ) + return; + if ( screen[y][x] == ' ' ) + screen[y][x] = c; + else + screen[y][x] = '#'; +} + +void IntEngLineTo ( + SURFOBJ*, + CLIPOBJ, + PBRUSHOBJ, + int x1, int y1, int x2, int y2, + RECTL*, + MIX mix ) +{ + int dx = x2 - x1; + int dy = y2 - y1; + int absdx = abs(dx); + int absdy = abs(dy); + int EMax = MAX(absdx,absdy); + int E = EMax/2; + int xinc = dx < 0 ? -1 : 1, + yinc = dy < 0 ? -1 : 1; + if ( !dy ) + { + while ( x1 != x2 ) + { + putpixel ( x1, y1, mix ); + x1 += xinc; + } + return; + } + if ( !dx ) + { + while ( y1 != y2 ) + { + putpixel ( x1, y1, mix ); + y1 += yinc; + } + return; + } + for ( int i = 0; i < EMax; i++ ) + { + putpixel ( x1, y1, mix ); + if ( absdy > absdx ) + { + y1 += yinc; + E += absdx; + if ( E >= EMax ) + { + E -= absdy; + x1 += xinc; + } + } + else + { + x1 += xinc; + E += absdy; + if ( E >= EMax ) + { + E -= absdx; + y1 += yinc; + } + } + } +} + +#define FILL_EDGE_ALLOC_TAG 0x45465044 + +/* +** This struct is used for book keeping during polygon filling routines. +*/ +typedef struct _tagFILL_EDGE +{ + /*Basic line information*/ + int FromX; + int FromY; + int ToX; + int ToY; + int dx; + int dy; + int absdx, absdy; + int x, y; + int xmajor; + + /*Active Edge List information*/ + int XIntercept[2]; + int Error; + int ErrorMax; + int XDirection, YDirection; + + /* The next edge in the active Edge List*/ + struct _tagFILL_EDGE * pNext; +} FILL_EDGE; + +typedef struct _FILL_EDGE_LIST +{ + int Count; + FILL_EDGE** Edges; +} FILL_EDGE_LIST; + +#if 0 +static +void +DEBUG_PRINT_ACTIVE_EDGELIST ( FILL_EDGE* list ) +{ + FILL_EDGE* pThis = list; + if (0 == list) + { + DPRINT1("List is NULL\n"); + return; + } + + while(0 != pThis) + { + //DPRINT1("EDGE: (%d, %d) to (%d, %d)\n", pThis->FromX, pThis->FromY, pThis->ToX, pThis->ToY); + DPRINT1("EDGE: [%d,%d]\n", pThis->XIntercept[0], pThis->XIntercept[1] ); + pThis = pThis->pNext; + } +} +#else +#define DEBUG_PRINT_ACTIVE_EDGELIST(x) +#endif + +/* +** Hide memory clean up. +*/ +static +void +FASTCALL +POLYGONFILL_DestroyEdgeList(FILL_EDGE_LIST* list) +{ + int i; + if ( list ) + { + if ( list->Edges ) + { + for ( i = 0; i < list->Count; i++ ) + { + if ( list->Edges[i] ) + EngFreeMem ( list->Edges[i] ); + } + EngFreeMem ( list->Edges ); + } + EngFreeMem ( list ); + } +} + +/* +** This makes and initiaizes an Edge struct for a line between two points. +*/ +static +FILL_EDGE* +FASTCALL +POLYGONFILL_MakeEdge(POINT From, POINT To) +{ + FILL_EDGE* rc = (FILL_EDGE*)EngAllocMem(FL_ZERO_MEMORY, sizeof(FILL_EDGE), FILL_EDGE_ALLOC_TAG); + + if (0 == rc) + return NULL; + + //DPRINT1("Making Edge: (%d, %d) to (%d, %d)\n", From.x, From.y, To.x, To.y); + //Now Fill the struct. + if ( To.y < From.y ) + { + rc->FromX = To.x; + rc->FromY = To.y; + rc->ToX = From.x; + rc->ToY = From.y; + rc->YDirection = -1; + + // lines that go up get walked backwards, so need to be offset + // by -1 in order to make the walk identically on a pixel-level + rc->Error = -1; + } + else + { + rc->FromX = From.x; + rc->FromY = From.y; + rc->ToX = To.x; + rc->ToY = To.y; + rc->YDirection = 1; + + rc->Error = 0; + } + + rc->x = rc->FromX; + rc->y = rc->FromY; + rc->dx = rc->ToX - rc->FromX; + rc->dy = rc->ToY - rc->FromY; + rc->absdx = abs(rc->dx); + rc->absdy = abs(rc->dy); + + rc->xmajor = rc->absdx > rc->absdy; + + rc->ErrorMax = MAX(rc->absdx,rc->absdy); + + rc->Error += rc->ErrorMax / 2; + + rc->XDirection = (rc->dx < 0)?(-1):(1); + + rc->pNext = 0; + + DPRINT("MakeEdge (%i,%i)->(%i,%i) d=(%i,%i) dir=(%i,%i) err=%i max=%i\n", + From.x, From.y, To.x, To.y, rc->dx, rc->dy, rc->XDirection, rc->YDirection, rc->Error, rc->ErrorMax ); + + return rc; +} +/* +** My Edge comparison routine. +** This is for scan converting polygon fill. +** First sort by MinY, then Minx, then slope. +** +** This comparison will help us determine which +** lines will become active first when scanning from +** top (min y) to bottom (max y). +** +** Return Value Meaning +** Negative integer element1 < element2 +** Zero element1 = element2 +** Positive integer element1 > element2 +*/ +static +INT +FASTCALL +FILL_EDGE_Compare(FILL_EDGE* Edge1, FILL_EDGE* Edge2) +{ + int e1 = Edge1->XIntercept[0] + Edge1->XIntercept[1]; + int e2 = Edge2->XIntercept[0] + Edge2->XIntercept[1]; + + return e1 - e2; +} + + +/* +** Insert an edge into a list keeping the list in order. +*/ +static +void +FASTCALL +POLYGONFILL_ActiveListInsert(FILL_EDGE** activehead, FILL_EDGE* NewEdge ) +{ + FILL_EDGE *pPrev, *pThis; + //DPRINT1("In POLYGONFILL_ActiveListInsert()\n"); + ASSERT ( activehead && NewEdge ); + if ( !*activehead ) + { + NewEdge->pNext = NULL; + *activehead = NewEdge; + return; + } + /* + ** First lets check to see if we have a new smallest value. + */ + if (FILL_EDGE_Compare(NewEdge, *activehead) <= 0) + { + NewEdge->pNext = *activehead; + *activehead = NewEdge; + return; + } + /* + ** Ok, now scan to the next spot to put this item. + */ + pThis = *activehead; + pPrev = NULL; + while ( pThis && FILL_EDGE_Compare(pThis, NewEdge) < 0 ) + { + pPrev = pThis; + pThis = pThis->pNext; + } + + ASSERT(pPrev); + NewEdge->pNext = pPrev->pNext; + pPrev->pNext = NewEdge; + //DEBUG_PRINT_ACTIVE_EDGELIST(*activehead); +} + +/* +** Create a list of edges for a list of points. +*/ +static +FILL_EDGE_LIST* +FASTCALL +POLYGONFILL_MakeEdgeList(PPOINT Points, int Count) +{ + int CurPt = 0; + FILL_EDGE_LIST* list = 0; + FILL_EDGE* e = 0; + + if ( 0 == Points || 2 > Count ) + return 0; + + list = (FILL_EDGE_LIST*)EngAllocMem(FL_ZERO_MEMORY, sizeof(FILL_EDGE_LIST), FILL_EDGE_ALLOC_TAG); + if ( 0 == list ) + goto fail; + list->Count = 0; + list->Edges = (FILL_EDGE**)EngAllocMem(FL_ZERO_MEMORY, Count*sizeof(FILL_EDGE*), FILL_EDGE_ALLOC_TAG); + if ( !list->Edges ) + goto fail; + memset ( list->Edges, 0, Count * sizeof(FILL_EDGE*) ); + + for ( CurPt = 1; CurPt < Count; ++CurPt ) + { + e = POLYGONFILL_MakeEdge ( Points[CurPt-1], Points[CurPt] ); + if ( !e ) + goto fail; + // if a straight horizontal line - who cares? + if ( !e->absdy ) + EngFreeMem ( e ); + else + list->Edges[list->Count++] = e; + } + e = POLYGONFILL_MakeEdge ( Points[CurPt-1], Points[0] ); + if ( !e ) + goto fail; + if ( !e->absdy ) + EngFreeMem ( e ); + else + list->Edges[list->Count++] = e; + return list; + +fail: + DPRINT1("Out Of MEMORY!!\n"); + POLYGONFILL_DestroyEdgeList ( list ); + return 0; +} + + +/* +** This slow routine uses the data stored in the edge list to +** calculate the x intercepts for each line in the edge list +** for scanline Scanline. +**TODO: Get rid of this floating point arithmetic +*/ +static +void +FASTCALL +POLYGONFILL_UpdateScanline(FILL_EDGE* pEdge, int Scanline) +{ + if ( 0 == pEdge->dy ) + return; + + ASSERT ( pEdge->FromY <= Scanline && pEdge->ToY > Scanline ); + + if ( pEdge->xmajor ) + { + int steps; + + ASSERT ( pEdge->y == Scanline ); + + // now shoot to end of scanline collision + steps = (pEdge->ErrorMax-pEdge->Error-1)/pEdge->absdy; + if ( steps ) + { + // record first collision with scanline + int x1 = pEdge->x; + pEdge->x += steps * pEdge->XDirection; + pEdge->Error += steps * pEdge->absdy; + ASSERT ( pEdge->Error < pEdge->ErrorMax ); + pEdge->XIntercept[0] = MIN(x1,pEdge->x); + pEdge->XIntercept[1] = MAX(x1,pEdge->x); + } + else + { + pEdge->XIntercept[0] = pEdge->x; + pEdge->XIntercept[1] = pEdge->x; + } + + // we should require exactly 1 step to step onto next scanline... + ASSERT ( (pEdge->ErrorMax-pEdge->Error-1) / pEdge->absdy == 0 ); + pEdge->x += pEdge->XDirection; + pEdge->Error += pEdge->absdy; + ASSERT ( pEdge->Error >= pEdge->ErrorMax ); + + // now step onto next scanline... + pEdge->Error -= pEdge->absdx; + pEdge->y++; + } + else // then this is a y-major line + { + pEdge->XIntercept[0] = pEdge->x; + pEdge->XIntercept[1] = pEdge->x; + + pEdge->Error += pEdge->absdx; + pEdge->y++; + + if ( pEdge->Error >= pEdge->ErrorMax ) + { + pEdge->Error -= pEdge->ErrorMax; + pEdge->x += pEdge->XDirection; + ASSERT ( pEdge->Error < pEdge->ErrorMax ); + } + } + + DPRINT("Line (%d, %d) to (%d, %d) intersects scanline %d at (%d,%d)\n", + pEdge->FromX, pEdge->FromY, pEdge->ToX, pEdge->ToY, Scanline, pEdge->XIntercept[0], pEdge->XIntercept[1] ); +} + +/* +** This method updates the Active edge collection for the scanline Scanline. +*/ +static +void +STDCALL +POLYGONFILL_BuildActiveList ( int Scanline, FILL_EDGE_LIST* list, FILL_EDGE** ActiveHead ) +{ + int i; + + ASSERT ( list && ActiveHead ); + *ActiveHead = 0; + for ( i = 0; i < list->Count; i++ ) + { + FILL_EDGE* pEdge = list->Edges[i]; + ASSERT(pEdge); + if ( pEdge->FromY <= Scanline && pEdge->ToY > Scanline ) + { + POLYGONFILL_UpdateScanline ( pEdge, Scanline ); + POLYGONFILL_ActiveListInsert ( ActiveHead, pEdge ); + } + } +} + +/* +** This method fills the portion of the polygon that intersects with the scanline +** Scanline. +*/ +static +void +STDCALL +POLYGONFILL_FillScanLineAlternate( + PDC dc, + int ScanLine, + FILL_EDGE* ActiveHead, + SURFOBJ *SurfObj, + PBRUSHOBJ BrushObj, + MIX RopMode ) +{ + FILL_EDGE *pLeft, *pRight; + + if ( !ActiveHead ) + return; + + pLeft = ActiveHead; + pRight = pLeft->pNext; + ASSERT(pRight); + + while ( NULL != pRight ) + { + int x1 = pLeft->XIntercept[0]; + int x2 = pRight->XIntercept[1]; + if ( x2 > x1 ) + { + RECTL BoundRect; + BoundRect.top = ScanLine; + BoundRect.bottom = ScanLine + 1; + BoundRect.left = x1; + BoundRect.right = x2; + + DPRINT("Fill Line (%d, %d) to (%d, %d)\n",x1, ScanLine, x2, ScanLine); + IntEngLineTo( SurfObj, + dc->CombinedClip, + BrushObj, + x1, + ScanLine, + x2, + ScanLine, + &BoundRect, // Bounding rectangle + RopMode); // MIX + } + pLeft = pRight->pNext; + pRight = pLeft ? pLeft->pNext : NULL; + } +} + +static +void +STDCALL +POLYGONFILL_FillScanLineWinding( + PDC dc, + int ScanLine, + FILL_EDGE* ActiveHead, + SURFOBJ *SurfObj, + PBRUSHOBJ BrushObj, + MIX RopMode ) +{ + FILL_EDGE *pLeft, *pRight; + int x1, x2, winding = 0; + RECTL BoundRect; + + if ( !ActiveHead ) + return; + + BoundRect.top = ScanLine; + BoundRect.bottom = ScanLine + 1; + + pLeft = ActiveHead; + winding = pLeft->YDirection; + pRight = pLeft->pNext; + ASSERT(pRight); + + // setup first line... + x1 = pLeft->XIntercept[0]; + x2 = pRight->XIntercept[1]; + + pLeft = pRight; + pRight = pLeft->pNext; + winding += pLeft->YDirection; + + while ( NULL != pRight ) + { + int newx1 = pLeft->XIntercept[0]; + int newx2 = pRight->XIntercept[1]; + if ( winding ) + { + // check and see if this new line touches the previous... + if ( (newx1 >= x1 && newx1 <= x2) + || (newx2 >= x1 && newx2 <= x2) + || (x1 >= newx1 && x1 <= newx2) + || (x2 >= newx2 && x2 <= newx2) + ) + { + // yup, just tack it on to our existing line + x1 = MIN(x1,newx1); + x2 = MAX(x2,newx2); + } + else + { + // nope - render the old line.. + BoundRect.left = x1; + BoundRect.right = x2; + + DPRINT("Fill Line (%d, %d) to (%d, %d)\n",x1, ScanLine, x2, ScanLine); + IntEngLineTo( SurfObj, + dc->CombinedClip, + BrushObj, + x1, + ScanLine, + x2, + ScanLine, + &BoundRect, // Bounding rectangle + RopMode); // MIX + + x1 = newx1; + x2 = newx2; + } + } + pLeft = pRight; + pRight = pLeft->pNext; + winding += pLeft->YDirection; + } + // there will always be a line left-over, render it now... + BoundRect.left = x1; + BoundRect.right = x2; + + DPRINT("Fill Line (%d, %d) to (%d, %d)\n",x1, ScanLine, x2, ScanLine); + IntEngLineTo( SurfObj, + dc->CombinedClip, + BrushObj, + x1, + ScanLine, + x2, + ScanLine, + &BoundRect, // Bounding rectangle + RopMode); // MIX +} + +//When the fill mode is ALTERNATE, GDI fills the area between odd-numbered and +//even-numbered polygon sides on each scan line. That is, GDI fills the area between the +//first and second side, between the third and fourth side, and so on. + +//WINDING Selects winding mode (fills any region with a nonzero winding value). +//When the fill mode is WINDING, GDI fills any region that has a nonzero winding value. +//This value is defined as the number of times a pen used to draw the polygon would go around the region. +//The direction of each edge of the polygon is important. + +BOOL +STDCALL +FillPolygon( + PDC dc, + SURFOBJ *SurfObj, + PBRUSHOBJ BrushObj, + MIX RopMode, + CONST PPOINT Points, + int Count, + RECTL BoundRect ) +{ + FILL_EDGE_LIST *list = 0; + FILL_EDGE *ActiveHead = 0; + int ScanLine; + + void + STDCALL + (*FillScanLine)( + PDC dc, + int ScanLine, + FILL_EDGE* ActiveHead, + SURFOBJ *SurfObj, + PBRUSHOBJ BrushObj, + MIX RopMode ); + + DPRINT("FillPolygon\n"); + + /* Create Edge List. */ + list = POLYGONFILL_MakeEdgeList(Points, Count); + /* DEBUG_PRINT_EDGELIST(list); */ + if (NULL == list) + return FALSE; + + if ( WINDING == dc->w.polyFillMode ) + FillScanLine = POLYGONFILL_FillScanLineWinding; + else /* default */ + FillScanLine = POLYGONFILL_FillScanLineAlternate; + + /* For each Scanline from BoundRect.bottom to BoundRect.top, + * determine line segments to draw + */ + for ( ScanLine = BoundRect.top; ScanLine < BoundRect.bottom; ++ScanLine ) + { + POLYGONFILL_BuildActiveList(ScanLine, list, &ActiveHead); + //DEBUG_PRINT_ACTIVE_EDGELIST(ActiveHead); + FillScanLine ( dc, ScanLine, ActiveHead, SurfObj, BrushObj, RopMode ); + } + + /* Free Edge List. If any are left. */ + POLYGONFILL_DestroyEdgeList(list); + + return TRUE; +} + + + + + +// this is highly hacked from W32kPolygon... +BOOL +Polygon ( CONST PPOINT UnsafePoints, int Count, int polyFillMode ) +{ + BOOL ret; + RECTL DestRect; + int CurrentPoint; + PPOINT Points; + SURFOBJ* SurfObj = 0; + DC dc; + PBRUSHOBJ OutBrushObj = 0; + + dc.CombinedClip = 0; + dc.w.polyFillMode = polyFillMode; + + DPRINT1("In W32kPolygon()\n"); + + if ( NULL == UnsafePoints || Count < 2) + { + DPRINT1("ERROR_INVALID_PARAMETER\n"); + return FALSE; + } + + /* Copy points from userspace to kernelspace */ + Points = (PPOINT)EngAllocMem(0, Count * sizeof(POINT)); + if (NULL == Points) + { + DPRINT1("ERROR_NOT_ENOUGH_MEMORY\n"); + return FALSE; + } + MmCopyFromCaller(Points, UnsafePoints, Count * sizeof(POINT)); + if ( memcmp ( Points, UnsafePoints, Count * sizeof(POINT) ) ) + { + free(Points); + return FALSE; + } + + DestRect.left = Points[0].x; + DestRect.right = Points[0].x; + DestRect.top = Points[0].y; + DestRect.bottom = Points[0].y; + + for (CurrentPoint = 1; CurrentPoint < Count; ++CurrentPoint) + { + DestRect.left = MIN(DestRect.left, Points[CurrentPoint].x); + DestRect.right = MAX(DestRect.right, Points[CurrentPoint].x); + DestRect.top = MIN(DestRect.top, Points[CurrentPoint].y); + DestRect.bottom = MAX(DestRect.bottom, Points[CurrentPoint].y); + } + + // Draw the Polygon Edges with the current pen + for (CurrentPoint = 0; CurrentPoint < Count; ++CurrentPoint) + { + POINT To, From; //, Next; + + /* Let CurrentPoint be i + * if i+1 > Count, Draw a line from Points[i] to Points[0] + * Draw a line from Points[i] to Points[i+1] + */ + From = Points[CurrentPoint]; + if ( CurrentPoint + 1 >= Count) + { + To = Points[0]; + } + else + { + To = Points[CurrentPoint + 1]; + } + + DPRINT1("Polygon Making line from (%d,%d) to (%d,%d)\n", From.x, From.y, To.x, To.y ); + IntEngLineTo(SurfObj, + dc.CombinedClip, + OutBrushObj, + From.x, + From.y, + To.x, + To.y, + &DestRect, + EDGE_CHAR); /* MIX */ + } + /* determine the fill mode to fill the polygon. */ + ret = FillPolygon(&dc, SurfObj, OutBrushObj, FILL_CHAR, Points, Count, DestRect ); + free(Points); + + return ret; +} + + +int main() +{ + memset ( screen, ' ', sizeof(screen) ); + POINT pts[] = + { +#if 0 + { 0, 0 }, + { 12, 4 }, + { 4, 8 }, +#elif 0 + { 3, 0 }, + { 0, 3 }, + { 3, 6 }, +#elif 0 + { 1, 1 }, + { 3, 1 }, + { 3, 3 }, + { 1, 3 } +#elif 0 + { 0, 0 }, + { 4, 0 }, + { 4, 4 }, + { 8, 4 }, + { 8, 8 }, + { 4, 8 }, + { 4, 4 }, + { 0, 4 }, +#else + { 4, 12 }, + { 12, 0 }, + { 18, 12 }, + { 4, 4 }, + { 20, 4 } +#endif + }; + const int pts_count = sizeof(pts)/sizeof(pts[0]); + + // use ALTERNATE or WINDING for 3rd param + Polygon ( pts, pts_count, ALTERNATE ); + + // print out our "screen" + for ( int y = 0; y < SCREENY; y++ ) + { + for ( int x = 0; x < SCREENX; x++ ) + { + printf("%c", screen[y][x] ); + } + printf("\n"); + } + DPRINT1("Done!\n"); + (void)getch(); +} +/* EOF */ diff --git a/apps/tests/polytest/polytest.dsp b/apps/tests/polytest/polytest.dsp new file mode 100644 index 0000000..a53e6d0 --- /dev/null +++ b/apps/tests/polytest/polytest.dsp @@ -0,0 +1,88 @@ +# Microsoft Developer Studio Project File - Name="polytest" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=polytest - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "polytest.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "polytest.mak" CFG="polytest - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "polytest - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "polytest - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "polytest - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 + +!ELSEIF "$(CFG)" == "polytest - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "polytest - Win32 Release" +# Name "polytest - Win32 Debug" +# Begin Source File + +SOURCE=.\polytest.cpp +# End Source File +# End Target +# End Project diff --git a/apps/tests/polytest/polytest.dsw b/apps/tests/polytest/polytest.dsw new file mode 100644 index 0000000..308810d --- /dev/null +++ b/apps/tests/polytest/polytest.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "polytest"=".\polytest.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/apps/tests/primitives/.cvsignore b/apps/tests/primitives/.cvsignore new file mode 100644 index 0000000..d63774a --- /dev/null +++ b/apps/tests/primitives/.cvsignore @@ -0,0 +1,6 @@ +*.o +*.d +*.exe +*.coff +*.sym +*.map diff --git a/apps/tests/primitives/Makefile b/apps/tests/primitives/Makefile new file mode 100644 index 0000000..8c985f7 --- /dev/null +++ b/apps/tests/primitives/Makefile @@ -0,0 +1,37 @@ +# +# ReactOS explorer +# +# Makefile +# + +PATH_TO_TOP = ../../.. + +TARGET_TYPE = program + +TARGET_APPTYPE = windows + +TARGET_NAME = primitives + +TARGET_NORC = yes + +TARGET_CFLAGS = -fexceptions -g -O0 -DWIN32 -D_DEBUG -D_WINDOWS -D_MBCS -W -D__USE_W32API + +TARGET_CPPFLAGS = -fexceptions -g -O0 -DWIN32 -D_DEBUG -D_WINDOWS -D_MBCS -W -D__USE_W32API + +TARGET_SDKLIBS = \ + kernel32.a \ + user32.a \ + gdi32.a + +TARGET_OBJECTS = \ + primitives.o \ + mk_font.o + +include $(PATH_TO_TOP)/rules.mak + +include $(TOOLS_PATH)/helper.mk + +# overide LD_CC to use g++ for linking of the executable +LD_CC = $(CXX) + +# EOF diff --git a/apps/tests/primitives/mk_font.cpp b/apps/tests/primitives/mk_font.cpp new file mode 100644 index 0000000..618c22b --- /dev/null +++ b/apps/tests/primitives/mk_font.cpp @@ -0,0 +1,69 @@ + +// ------------------------------------------------------------------ +// Windows 2000 Graphics API Black Book +// Chapter 4 - Utility functions +// +// Created by Damon Chandler +// Updates can be downloaded at: +// +// Please do not hesistate to e-mail me at dmc27@ee.cornell.edu +// if you have any questions about this code. +// ------------------------------------------------------------------ + +//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> +#include +#include + +#include "mk_font.h" +//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + +namespace font { + +// creates a logical font +HFONT MakeFont( + IN HDC hDestDC, // handle to target DC + IN LPCSTR typeface_name, // font's typeface name + IN int point_size, // font's point size + IN const BYTE charset, // font's character set + IN const DWORD style // font's styles + ) +{ + // + // NOTE: On Windows 9x/Me, GetWorldTransform is not + // supported. For compatibility with these platforms you + // should initialize the XFORM::eM22 data member to 1.0. + // + XFORM xf = {0, 0, 0, 1.0}; + GetWorldTransform(hDestDC, &xf); + int pixels_per_inch = GetDeviceCaps(hDestDC, LOGPIXELSY); + + POINT PSize = { + 0, + -MulDiv(static_cast(xf.eM22 * point_size + 0.5), + pixels_per_inch, 72) + }; + + HFONT hResult = NULL; + if (DPtoLP(hDestDC, &PSize, 1)) + { + LOGFONT lf; + memset(&lf, 0, sizeof(LOGFONT)); + + lf.lfHeight = PSize.y; + lf.lfCharSet = charset; + lstrcpyn(reinterpret_cast(&lf.lfFaceName), + typeface_name, LF_FACESIZE); + + lf.lfWeight = (style & FS_BOLD) ? FW_BOLD : FW_DONTCARE; + lf.lfItalic = (style & FS_ITALIC) ? true : false; + lf.lfUnderline = (style & FS_UNDERLINE) ? true : false; + lf.lfStrikeOut = (style & FS_STRIKEOUT) ? true : false; + + // create the logical font + hResult = CreateFontIndirect(&lf); + } + return hResult; +} +//------------------------------------------------------------------------- + +} // namespace font diff --git a/apps/tests/primitives/mk_font.h b/apps/tests/primitives/mk_font.h new file mode 100644 index 0000000..98c164c --- /dev/null +++ b/apps/tests/primitives/mk_font.h @@ -0,0 +1,39 @@ + +// ------------------------------------------------------------------ +// Windows 2000 Graphics API Black Book +// Chapter 4 - Utility functions +// +// Created by Damon Chandler +// Updates can be downloaded at: +// +// Please do not hesistate to e-mail me at dmc27@ee.cornell.edu +// if you have any questions about this code. +// ------------------------------------------------------------------ + +//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> +#ifndef CH4_UTILS_H +#define CH4_UTILS_H + +#include +//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + +// change namespace name appropriately to suit your needs +namespace font { + +// font options +static const ULONG FS_NONE = 0x00000000; +static const ULONG FS_BOLD = 0x00000001; +static const ULONG FS_ITALIC = 0x00000002; +static const ULONG FS_UNDERLINE = 0x00000004; +static const ULONG FS_STRIKEOUT = 0x00000008; + +// creates a logical font +HFONT MakeFont(IN HDC hDestDC, IN LPCSTR typeface_name, + IN int point_size, IN const BYTE charset = ANSI_CHARSET, + IN const DWORD style = FS_NONE); + +} + +//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> +#endif // CH4_UTILS_H +//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< diff --git a/apps/tests/primitives/primitives.cpp b/apps/tests/primitives/primitives.cpp new file mode 100644 index 0000000..1a34999 --- /dev/null +++ b/apps/tests/primitives/primitives.cpp @@ -0,0 +1,351 @@ + +// ------------------------------------------------------------------ +// Windows 2000 Graphics API Black Book +// Chapter 5 - Listing 5.1 (Output Primitives Demo) +// +// Created by Damon Chandler +// Updates can be downloaded at: +// +// Please do not hesistate to e-mail me at dmc27@ee.cornell.edu +// if you have any questions about this code. +// ------------------------------------------------------------------ + + +//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> +#include +#include + +// for the MakeFont() function... +#include "mk_font.h" +//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + + +HINSTANCE hInst; +const char* WndClassName = "GMainWnd"; +LRESULT CALLBACK MainWndProc(HWND HWnd, UINT Msg, WPARAM WParam, + LPARAM LParam); + + +int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE, LPTSTR, + int nCmdShow) +{ + hInst = hInstance; + + WNDCLASS wc; + memset(&wc, 0, sizeof(WNDCLASS)); + + wc.style = CS_VREDRAW | CS_HREDRAW; + wc.lpszClassName = WndClassName; + wc.lpfnWndProc = MainWndProc; + wc.hInstance = hInst; + wc.hCursor = LoadCursor(NULL, IDC_ARROW); + wc.hbrBackground = reinterpret_cast( + COLOR_BTNFACE + 1 + ); + + if (RegisterClass(&wc)) + { + HWND hWnd = + CreateWindow( + WndClassName, TEXT("Output Primitives Demo"), + WS_OVERLAPPEDWINDOW | WS_CAPTION | + WS_VISIBLE | WS_CLIPCHILDREN, + CW_USEDEFAULT, CW_USEDEFAULT, 640, 480, + NULL, NULL, hInst, NULL + ); + + if (hWnd) + { + ShowWindow(hWnd, nCmdShow); + UpdateWindow(hWnd); + + MSG msg; + while (GetMessage(&msg, NULL, 0, 0)) + { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + } + } + return 0; +} +//------------------------------------------------------------------ + + +enum OutPrimitive { + opLine, opBezier, opRectangle, opRoundRect, + opEllipse, opArc, opPie, opChord, opCustom + }; + +void DrawPrimitive(IN HDC hDC, IN const RECT& RPrimitive, + IN OutPrimitive PrimitiveID) +{ + RECT R = RPrimitive; + InflateRect(&R, -10, -10); + + switch (PrimitiveID) + { + case opLine: + { + const POINT PLine[] = {{R.left, R.top}, {R.right, R.bottom}}; + Polyline(hDC, PLine, 2); + break; + } + case opBezier: + { + const POINT PControlPoints[] = { + {R.left, R.top}, + {(R.right - R.left) / 2, R.top}, + {(R.right - R.left) / 2, R.bottom}, + {R.right, R.bottom} + }; + PolyBezier(hDC, PControlPoints, 4); + break; + } + case opRectangle: + { + Rectangle(hDC, R.left, R.top, R.right, R.bottom); + break; + } + case opRoundRect: + { + RoundRect(hDC, R.left, R.top, R.right, R.bottom, 20, 20); + break; + } + case opEllipse: + { + Ellipse(hDC, R.left, R.top, R.right, R.bottom); + break; + } + case opArc: + { + const POINT PRads[] = { + {(R.right - R.left) / 3 + R.left, R.top}, + {(R.right - R.left) / 3 + R.left, R.bottom} + }; + Arc(hDC, R.left, R.top, R.right, R.bottom, + PRads[0].x, PRads[0].y, PRads[1].x, PRads[1].y); + break; + } + case opPie: + { + const POINT PRads[] = { + {(R.right - R.left) / 3 + R.left, R.top}, + {(R.right - R.left) / 3 + R.left, R.bottom} + }; + Pie(hDC, R.left, R.top, R.right, R.bottom, + PRads[0].x, PRads[0].y, PRads[1].x, PRads[1].y); + break; + } + case opChord: + { + const POINT PRads[] = { + {(R.right - R.left) / 3 + R.left, R.top}, + {(R.right - R.left) / 3 + R.left, R.bottom} + }; + Chord(hDC, R.left, R.top, R.right, R.bottom, + PRads[0].x, PRads[0].y, PRads[1].x, PRads[1].y); + break; + } + case opCustom: + { + const POINT PVertices[] = { + {R.left, (R.bottom - R.top) / 2 + R.top}, + {(R.right - R.left) / 2 + R.left, R.top}, + {R.right, (R.bottom - R.top) / 2 + R.top}, + {(R.right - R.left) / 2 + R.left, R.bottom} + }; + Polygon(hDC, PVertices, 4); + break; + } + } +} +//------------------------------------------------------------------ + + +HWND hListBox = NULL; // handle to the list box +HBRUSH hListBrush = NULL; // handle to the list box brush +HPEN hListPen = NULL; // handle to the list box pen +HFONT hListFont = NULL; // handle to the list box font + +LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, + LPARAM lParam) +{ + switch (msg) + { + case WM_CREATE: + { + hListBox = + CreateWindowEx( + WS_EX_CLIENTEDGE, TEXT("LISTBOX"), TEXT(""), + WS_CHILD | WS_VISIBLE | WS_VSCROLL | + LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | + LBS_OWNERDRAWFIXED, + 0, 0, 640, 480, + hWnd, NULL, hInst, NULL + ); + assert(hListBox != NULL); + + SetWindowLong( + hListBox, GWL_ID, reinterpret_cast(hListBox) + ); + + SNDMSG(hListBox, LB_ADDSTRING, 0, + reinterpret_cast(TEXT("Line"))); + SNDMSG(hListBox, LB_ADDSTRING, 0, + reinterpret_cast(TEXT("Bezier Curve"))); + SNDMSG(hListBox, LB_ADDSTRING, 0, + reinterpret_cast(TEXT("Rectangle"))); + SNDMSG(hListBox, LB_ADDSTRING, 0, + reinterpret_cast(TEXT("Rounded Rectangle"))); + SNDMSG(hListBox, LB_ADDSTRING, 0, + reinterpret_cast(TEXT("Ellipse"))); + SNDMSG(hListBox, LB_ADDSTRING, 0, + reinterpret_cast(TEXT("Arc"))); + SNDMSG(hListBox, LB_ADDSTRING, 0, + reinterpret_cast(TEXT("Pie Slice"))); + SNDMSG(hListBox, LB_ADDSTRING, 0, + reinterpret_cast(TEXT("Chord"))); + SNDMSG(hListBox, LB_ADDSTRING, 0, + reinterpret_cast(TEXT("Custom"))); + + hListBrush = CreateSolidBrush(PALETTERGB(64, 192, 64)); + hListPen = CreatePen(PS_SOLID, 3, PALETTERGB(0, 0, 0)); + HDC hScreenDC = GetDC(NULL); +#if 0 + try +#endif + { + // MakeFont() from Chapter 4 + hListFont = font::MakeFont( + hScreenDC, "Impact", 20, ANSI_CHARSET, + font::FS_BOLD | font::FS_UNDERLINE + ); + } +#if 0 + catch (...) +#endif + { + ReleaseDC(NULL, hScreenDC); + } + ReleaseDC(NULL, hScreenDC); + + break; + } + case WM_MEASUREITEM: + { + LPMEASUREITEMSTRUCT lpmis = + reinterpret_cast(lParam); + assert(lpmis != NULL); + + if (lpmis->CtlID == reinterpret_cast(hListBox)) + { + lpmis->itemHeight = 150; + return TRUE; + } + break; + } + case WM_DRAWITEM: + { + LPDRAWITEMSTRUCT lpdis = + reinterpret_cast(lParam); + assert(lpdis != NULL); + + if (lpdis->CtlID == reinterpret_cast(hListBox)) + { + SaveDC(lpdis->hDC); +#if 0 + try +#endif + { + SelectObject(lpdis->hDC, hListBrush); + SelectObject(lpdis->hDC, hListPen); + SelectObject(lpdis->hDC, hListFont); + + bool selected = (lpdis->itemState & ODS_SELECTED); + COLORREF clrText = GetSysColor( + selected ? COLOR_HIGHLIGHTTEXT : COLOR_WINDOWTEXT + ); + HBRUSH hListBrush = GetSysColorBrush( + selected ? COLOR_HIGHLIGHT : COLOR_WINDOW + ); + + // fill the background + FillRect(lpdis->hDC, &lpdis->rcItem, hListBrush); + + // render the output primitive + RECT RPrimitive = lpdis->rcItem; + InflateRect(&RPrimitive, -5, -5); + RPrimitive.right = static_cast( + 0.6 * lpdis->rcItem.right + 0.5 + ); + FillRect( + lpdis->hDC, &RPrimitive, + reinterpret_cast(COLOR_BTNFACE + 1) + ); + DrawPrimitive( + lpdis->hDC, RPrimitive, + static_cast(lpdis->itemID) + ); + if (selected) InvertRect(lpdis->hDC, &RPrimitive); + DrawEdge(lpdis->hDC, &RPrimitive, EDGE_SUNKEN, BF_RECT); + + // render the text + TCHAR text[13]; + if (SNDMSG(hListBox, LB_GETTEXT, lpdis->itemID, + reinterpret_cast(&text)) != LB_ERR) + { + RECT RText = RPrimitive; + RText.left = RPrimitive.right; + RText.right = lpdis->rcItem.right; + + SelectObject(lpdis->hDC, hListFont); + SetBkMode(lpdis->hDC, TRANSPARENT); + SetTextColor(lpdis->hDC, clrText); + + DrawText(lpdis->hDC, text, -1, &RText, + DT_CENTER | DT_VCENTER | DT_SINGLELINE); + } + + // indicate keyboard focus + if (lpdis->itemState & ODS_FOCUS) + { + RECT RFocus = lpdis->rcItem; + InflateRect(&RFocus, -1, -1); + DrawFocusRect(lpdis->hDC, &RFocus); + } + } +#if 0 + catch (...) +#endif + { + RestoreDC(lpdis->hDC, -1); + } + RestoreDC(lpdis->hDC, -1); + return TRUE; + } + break; + } + case WM_SIZE: + { + MoveWindow( + hListBox, 0, 0, LOWORD(lParam), HIWORD(lParam), TRUE + ); + return 0; + } + case WM_DESTROY: + { + if (hListBrush) DeleteObject(hListBrush); + if (hListPen) DeleteObject(hListPen); + if (hListFont) DeleteObject(hListFont); + + PostQuitMessage(0); + return 0; + } + } + return DefWindowProc(hWnd, msg, wParam, lParam); +} +//------------------------------------------------------------------------- + + + diff --git a/apps/tests/pteb/.cvsignore b/apps/tests/pteb/.cvsignore index 7e87816..d63774a 100644 --- a/apps/tests/pteb/.cvsignore +++ b/apps/tests/pteb/.cvsignore @@ -3,3 +3,4 @@ *.exe *.coff *.sym +*.map diff --git a/apps/tests/regtest/.cvsignore b/apps/tests/regtest/.cvsignore index 7e87816..d63774a 100644 --- a/apps/tests/regtest/.cvsignore +++ b/apps/tests/regtest/.cvsignore @@ -3,3 +3,4 @@ *.exe *.coff *.sym +*.map diff --git a/apps/tests/sectest/.cvsignore b/apps/tests/sectest/.cvsignore index 7e87816..d63774a 100644 --- a/apps/tests/sectest/.cvsignore +++ b/apps/tests/sectest/.cvsignore @@ -3,3 +3,4 @@ *.exe *.coff *.sym +*.map diff --git a/apps/tests/sertest/.cvsignore b/apps/tests/sertest/.cvsignore index 7e87816..d63774a 100644 --- a/apps/tests/sertest/.cvsignore +++ b/apps/tests/sertest/.cvsignore @@ -3,3 +3,4 @@ *.exe *.coff *.sym +*.map diff --git a/apps/tests/shaptest/.cvsignore b/apps/tests/shaptest/.cvsignore new file mode 100644 index 0000000..d63774a --- /dev/null +++ b/apps/tests/shaptest/.cvsignore @@ -0,0 +1,6 @@ +*.o +*.d +*.exe +*.coff +*.sym +*.map diff --git a/apps/tests/shaptest/makefile b/apps/tests/shaptest/makefile index 4b86249..6df29c6 100644 --- a/apps/tests/shaptest/makefile +++ b/apps/tests/shaptest/makefile @@ -6,10 +6,12 @@ TARGET_NORC = yes TARGET_TYPE = program -TARGET_APPTYPE = console +TARGET_APPTYPE = windows TARGET_NAME = shaptest +TARGET_CFLAGS = -Wall -Werror + TARGET_SDKLIBS = kernel32.a gdi32.a TARGET_OBJECTS = $(TARGET_NAME).o diff --git a/apps/tests/shaptest/shaptest.c b/apps/tests/shaptest/shaptest.c index 3ef8e4d..693cfc3 100644 --- a/apps/tests/shaptest/shaptest.c +++ b/apps/tests/shaptest/shaptest.c @@ -10,95 +10,157 @@ #include #include +#include +#ifndef ASSERT +#define ASSERT assert +#endif + +#define nelem(x) (sizeof (x) / sizeof *(x)) HFONT tf; LRESULT WINAPI MainWndProc(HWND, UINT, WPARAM, LPARAM); -void __stdcall PolygonTest(HDC Desktop) +void PolygonTest ( HDC hdc ) { - HPEN BluePen; - HPEN OldPen; - HBRUSH RedBrush; - HBRUSH OldBrush; - POINT lpPointsAlternate[5]; - POINT lpPointsWinding[5]; - DWORD Mode; - - //create a pen to draw the shape - BluePen = CreatePen(PS_SOLID, 3, RGB(0, 0, 0xff)); - RedBrush = CreateSolidBrush(RGB(0xff, 0, 0)); - - //initialize a set of points for alternate. - lpPointsAlternate[0].x = 20; - lpPointsAlternate[0].y = 80; //{20,80}; - lpPointsAlternate[1].x = 60; - lpPointsAlternate[1].y = 20; //{60,20}; - lpPointsAlternate[2].x = 90; - lpPointsAlternate[2].y = 80; //{90,80}; - lpPointsAlternate[3].x = 20; - lpPointsAlternate[3].y = 40; //{20,40}; - lpPointsAlternate[4].x = 100; - lpPointsAlternate[4].y = 40; //{100,40}; - - //initialize a set of points for winding. - lpPointsWinding[0].x = 130; - lpPointsWinding[0].y = 80; //{130,80}; - lpPointsWinding[1].x = 170; - lpPointsWinding[1].y = 20; //{170,20}; - lpPointsWinding[2].x = 200; - lpPointsWinding[2].y = 80; //{200,80}; - lpPointsWinding[3].x = 130; - lpPointsWinding[3].y = 40; //{130,40}; - lpPointsWinding[4].x = 210; - lpPointsWinding[4].y = 40; //{210,40}; - - OldPen = (HPEN)SelectObject(Desktop, BluePen); - OldBrush = (HBRUSH)SelectObject(Desktop, RedBrush); - - Mode = GetPolyFillMode(Desktop); - - SetPolyFillMode(Desktop, ALTERNATE); - Polygon(Desktop,lpPointsAlternate,5); - - SetPolyFillMode(Desktop, WINDING); - Polygon(Desktop,lpPointsWinding,5); - - //cleanup - SetPolyFillMode(Desktop, Mode); - SelectObject(Desktop, OldPen); - SelectObject(Desktop, OldBrush); - DeleteObject(BluePen); - DeleteObject(RedBrush); - + HPEN Pen, OldPen; + HBRUSH RedBrush, OldBrush; + DWORD Mode; + POINT PointsAlternate[] = + { + { 20, 80 }, + { 60, 20 }, + { 90, 80 }, + { 20, 40 }, + { 100, 40 } + }; + POINT PointsWinding[] = + { + { 130, 80 }, + { 170, 20 }, + { 200, 80 }, + { 130, 40 }, + { 210, 40 } + }; + POINT Tri1[] = + { + { 3, 3 }, + { 5, 3 }, + { 3, 5 } + }; + POINT Tri2[] = + { + { 7, 3 }, + { 7, 7 }, + { 3, 7 }, + }; + POINT Square1[] = + { + { 1, 15 }, + { 3, 15 }, + { 3, 17 }, + { 1, 17 } + }; + POINT Square2[] = + { + { 5, 15 }, + { 7, 15 }, + { 7, 17 }, + { 5, 17 } + }; + POINT Square3[] = + { + { 1, 23 }, + { 3, 23 }, + { 3, 25 }, + { 1, 25 } + }; + POINT Square4[] = + { + { 5, 23 }, + { 7, 23 }, + { 7, 25 }, + { 5, 25 } + }; + POINT Square5[] = + { + { 1, 31 }, + { 3, 31 }, + { 3, 33 }, + { 1, 33 } + }; + POINT Square6[] = + { + { 5, 31 }, + { 7, 31 }, + { 7, 33 }, + { 5, 33 } + }; + + //create a pen to draw the shape + Pen = CreatePen(PS_SOLID, 1, RGB(0, 0, 0xff)); + ASSERT(Pen); + RedBrush = CreateSolidBrush(RGB(0xff, 0, 0)); + ASSERT(RedBrush); + + OldPen = (HPEN)SelectObject(hdc, Pen); + OldBrush = (HBRUSH)SelectObject(hdc, RedBrush); + + Mode = GetPolyFillMode(hdc); + + RoundRect ( hdc, 32, 8, 48, 24, 8, 8 ); + + SetPolyFillMode(hdc, ALTERNATE); + Polygon(hdc,PointsAlternate,nelem(PointsAlternate)); + + SetPolyFillMode(hdc, WINDING); + Polygon(hdc,PointsWinding,nelem(PointsWinding)); + + Rectangle ( hdc, 1, 1, 10, 10 ); + Polygon(hdc,Tri1,nelem(Tri1)); + Polygon(hdc,Tri2,nelem(Tri2)); + + Rectangle ( hdc, 1, 11, 4, 14 ); + Rectangle ( hdc, 5, 11, 8, 14 ); + Rectangle ( hdc, 9, 11, 12, 14 ); + Rectangle ( hdc, 13, 11, 16, 14 ); + Polygon(hdc,Square1,nelem(Square1)); + Polygon(hdc,Square2,nelem(Square2)); + Rectangle ( hdc, 1, 19, 4, 22 ); + Rectangle ( hdc, 5, 19, 8, 22 ); + Rectangle ( hdc, 9, 19, 12, 22 ); + Rectangle ( hdc, 13, 19, 16, 22 ); + Polygon(hdc,Square3,nelem(Square3)); + Polygon(hdc,Square4,nelem(Square4)); + Rectangle ( hdc, 1, 27, 4, 30 ); + Rectangle ( hdc, 5, 27, 8, 30 ); + Rectangle ( hdc, 9, 27, 12, 30 ); + Rectangle ( hdc, 13, 27, 16, 30 ); + + // switch to null pen to make surey they display correctly + DeleteObject ( SelectObject(hdc, OldPen) ); + Pen = CreatePen ( PS_NULL, 0, 0 ); + ASSERT(Pen); + OldPen = (HPEN)SelectObject(hdc, Pen); + + Polygon(hdc,Square5,nelem(Square5)); + Polygon(hdc,Square6,nelem(Square6)); + Rectangle ( hdc, 1, 35, 4, 38 ); + Rectangle ( hdc, 5, 35, 8, 38 ); + Rectangle ( hdc, 9, 35, 12, 38 ); + Rectangle ( hdc, 13, 35, 16, 38 ); + + //cleanup + SetPolyFillMode(hdc, Mode); + DeleteObject ( SelectObject(hdc, OldPen) ); + DeleteObject ( SelectObject(hdc, OldBrush) ); } -void shaptest( HDC DevCtx ){ - HDC Desktop, MyDC, DC24; - HPEN RedPen, GreenPen, BluePen, WhitePen; - HBITMAP MyBitmap, DIB24; - HFONT hf, tf; - BITMAPINFOHEADER BitInf; - BITMAPINFO BitPalInf; - HRGN hRgn1, hRgn2, hRgn3; - HBRUSH BlueBrush, DefBrush; - int sec,Xmod,Ymod; - char tbuf[5]; - - - BlueBrush = CreateSolidBrush( RGB(0, 0, 0xff) ); - DefBrush = SelectObject( DevCtx, BlueBrush ); - - SelectObject( DevCtx, DefBrush ); - DeleteObject( BlueBrush ); - - // Create a blue pen and select it into the DC - BluePen = CreatePen(PS_SOLID, 8, RGB(0, 0, 0xff)); - SelectObject(DevCtx, BluePen); - +void shaptest( HDC hdc ) +{ //Test the Polygon routine. - PolygonTest(DevCtx); + PolygonTest(hdc); } @@ -116,8 +178,8 @@ WinMain(HINSTANCE hInstance, wc.lpfnWndProc = MainWndProc; wc.style = CS_VREDRAW | CS_HREDRAW; wc.hInstance = hInstance; - wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); - wc.hCursor = LoadCursor(NULL, IDC_ARROW); + wc.hIcon = (HICON)LoadIcon(NULL, (LPCTSTR)IDI_APPLICATION); + wc.hCursor = (HCURSOR)LoadCursor(NULL, (LPCTSTR)IDC_ARROW); wc.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH); wc.lpszMenuName = NULL; wc.cbClsExtra = 0; @@ -125,7 +187,7 @@ WinMain(HINSTANCE hInstance, if (RegisterClass(&wc) == 0) { fprintf(stderr, "RegisterClass failed (last error 0x%X)\n", - GetLastError()); + (unsigned int)GetLastError()); return(1); } @@ -143,7 +205,7 @@ WinMain(HINSTANCE hInstance, if (hWnd == NULL) { fprintf(stderr, "CreateWindow failed (last error 0x%X)\n", - GetLastError()); + (unsigned int)GetLastError()); return(1); } @@ -166,27 +228,25 @@ WinMain(HINSTANCE hInstance, LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { - PAINTSTRUCT ps; - HDC hDC; - RECT clr, wir; - char spr[100], sir[100]; - - switch(msg) - { - - case WM_PAINT: - hDC = BeginPaint(hWnd, &ps); - shaptest( hDC ); - EndPaint(hWnd, &ps); - break; - - case WM_DESTROY: - PostQuitMessage(0); - break; - - default: - return DefWindowProc(hWnd, msg, wParam, lParam); - } - return 0; + PAINTSTRUCT ps; + HDC hDC; + + switch(msg) + { + + case WM_PAINT: + hDC = BeginPaint(hWnd, &ps); + shaptest( hDC ); + EndPaint(hWnd, &ps); + break; + + case WM_DESTROY: + PostQuitMessage(0); + break; + + default: + return DefWindowProc(hWnd, msg, wParam, lParam); + } + return 0; } diff --git a/apps/tests/shm/.cvsignore b/apps/tests/shm/.cvsignore index 7e87816..d63774a 100644 --- a/apps/tests/shm/.cvsignore +++ b/apps/tests/shm/.cvsignore @@ -3,3 +3,4 @@ *.exe *.coff *.sym +*.map diff --git a/apps/tests/statst/.cvsignore b/apps/tests/statst/.cvsignore new file mode 100644 index 0000000..1f07002 --- /dev/null +++ b/apps/tests/statst/.cvsignore @@ -0,0 +1,7 @@ +*.o +*.d +*.exe +*.coff +*.sym +*.map + diff --git a/apps/tests/statst/Makefile b/apps/tests/statst/Makefile new file mode 100644 index 0000000..2531b1c --- /dev/null +++ b/apps/tests/statst/Makefile @@ -0,0 +1,20 @@ + +PATH_TO_TOP = ../../.. + +TARGET_NORC = yes + +TARGET_TYPE = program + +TARGET_APPTYPE = windows + +TARGET_NAME = statst + +TARGET_SDKLIBS = kernel32.a gdi32.a + +TARGET_OBJECTS = $(TARGET_NAME).o + +include $(PATH_TO_TOP)/rules.mak + +include $(TOOLS_PATH)/helper.mk + +# EOF diff --git a/apps/tests/statst/statst.c b/apps/tests/statst/statst.c new file mode 100644 index 0000000..ddc80aa --- /dev/null +++ b/apps/tests/statst/statst.c @@ -0,0 +1,165 @@ +//#define WIN32_LEAN_AND_MEAN +#include + +static LPSTR STATIC_CLASS = "STATIC"; +static LPSTR TEST_WND_CLASS = "TESTWND"; + +#ifdef NDEBUG + #define DPRINT(s) (void)0 +#else + #define DPRINT(s) OutputDebugStringA("STATICTEST: " s "\n") +#endif + +HINSTANCE AppInstance = NULL; + +LRESULT WmCreate( + HWND Wnd) +{ + UCHAR i; + DPRINT("WM_CREATE (enter)."); + // Test 1 - black rectangle. + DPRINT("test 1"); + CreateWindowEx(0, STATIC_CLASS, NULL, WS_CHILD | WS_VISIBLE | SS_BLACKRECT, + 10, 10, 100, 20, Wnd, NULL, AppInstance, NULL); + // Test 2 - black frame. + DPRINT("test 2"); + CreateWindowEx(0, STATIC_CLASS, NULL, WS_CHILD | WS_VISIBLE | SS_BLACKFRAME, + 10, 40, 100, 20, Wnd, NULL, AppInstance, NULL); + // Test 3 - gray rectangle. + DPRINT("test 3"); + CreateWindowEx(0, STATIC_CLASS, NULL, WS_CHILD | WS_VISIBLE | SS_GRAYRECT, + 10, 70, 100, 20, Wnd, NULL, AppInstance, NULL); + // Test 4 - gray frame. + DPRINT("test 4"); + CreateWindowEx(0, STATIC_CLASS, NULL, WS_CHILD | WS_VISIBLE | SS_GRAYFRAME, + 10, 100, 100, 20, Wnd, NULL, AppInstance, NULL); + // Test 5 - left-aligned text. + DPRINT("test 5"); + CreateWindowEx(0, STATIC_CLASS, + "&Left-aligned text &static control window", + WS_CHILD | WS_VISIBLE | SS_LEFT, + 10, 130, 100, 50, Wnd, NULL, AppInstance, NULL); + // Test 6 - right-aligned text. + DPRINT("test 6"); + CreateWindowEx(0, STATIC_CLASS, + "&Right-aligned text &static control window", + WS_CHILD | WS_VISIBLE | SS_RIGHT, + 10, 185, 100, 50, Wnd, NULL, AppInstance, NULL); + // Test 7 - centered text. + DPRINT("test 7"); + CreateWindowEx(0, STATIC_CLASS, + "&Centered text &static control window", + WS_CHILD | WS_VISIBLE | SS_CENTER, + 10, 240, 100, 50, Wnd, NULL, AppInstance, NULL); + // Test 8 - left-aligned text with no word wrap and no prefixes. + DPRINT("test 8"); + CreateWindowEx(0, STATIC_CLASS, + "&No prefix and no word wrapping", + WS_CHILD | WS_VISIBLE | SS_LEFTNOWORDWRAP | SS_NOPREFIX, + 10, 295, 100, 20, Wnd, NULL, AppInstance, NULL); + // Test 9 - white rectangle. + DPRINT("test 9"); + CreateWindowEx(0, STATIC_CLASS, NULL, WS_CHILD | WS_VISIBLE | SS_WHITERECT, + 120, 10, 100, 20, Wnd, NULL, AppInstance, NULL); + // Test 10 - white frame. + DPRINT("test 10"); + CreateWindowEx(0, STATIC_CLASS, NULL, WS_CHILD | WS_VISIBLE | SS_WHITEFRAME, + 120, 40, 100, 20, Wnd, NULL, AppInstance, NULL); + // Test 11 - etched frame. + DPRINT("test 11"); + CreateWindowEx(0, STATIC_CLASS, NULL, WS_CHILD | WS_VISIBLE + | SS_ETCHEDFRAME, 120, 70, 100, 20, Wnd, NULL, AppInstance, NULL); + // Test 12 - etched horizontal lines. + DPRINT("test 12"); + for (i = 0; i < 5; ++i) + CreateWindowEx(0, STATIC_CLASS, NULL, WS_CHILD | WS_VISIBLE + | SS_ETCHEDHORZ, 120, 100 + (4L * i), 100, 4, Wnd, + NULL, AppInstance, NULL); + // Test 13 - etched vertical lines. + DPRINT("test 13"); + for (i = 0; i < 25; ++i) + CreateWindowEx(0, STATIC_CLASS, NULL, WS_CHILD | WS_VISIBLE + | SS_ETCHEDVERT, 120 + (4L * i), 130, 4, 20, Wnd, + NULL, AppInstance, NULL); + // Test 14 - sunken border. + DPRINT("test 14"); + CreateWindowEx(0, STATIC_CLASS, + "Sunken frame and word ellipsis", + WS_CHILD | WS_VISIBLE | SS_SUNKEN | SS_WORDELLIPSIS, + 120, 160, 100, 20, Wnd, NULL, AppInstance, NULL); + DPRINT("WM_CREATE (leave)."); + return 0; +} + +LRESULT CALLBACK TestWndProc( + HWND Wnd, + UINT Msg, + WPARAM wParam, + LPARAM lParam) +{ + switch (Msg) { + case WM_CREATE: + return WmCreate(Wnd); + case WM_DESTROY: + PostQuitMessage(0); + return 0; + default: + return DefWindowProc(Wnd, Msg, wParam, lParam); + } +} + +int STDCALL WinMain( + HINSTANCE hInstance, + HINSTANCE hPrevInstance, + LPSTR lpCmdLine, + int nShowCmd) +{ + ATOM Result; + MSG Msg; + HWND MainWindow; + WNDCLASSEX TestWndClass = {0}; + DPRINT("Application starting up."); + // Remember instance handle. + AppInstance = GetModuleHandle(NULL); + // Register test window class. + TestWndClass.cbSize = sizeof(WNDCLASSEX); + TestWndClass.lpfnWndProc = &TestWndProc; + TestWndClass.hInstance = AppInstance; + TestWndClass.hCursor = LoadCursor(0, IDC_ARROW); + TestWndClass.hbrBackground = CreateSolidBrush(RGB(255,255,230)); + TestWndClass.lpszClassName = TEST_WND_CLASS; + Result = RegisterClassEx(&TestWndClass); + if (Result == 0) { + DPRINT("Error registering class."); + MessageBox(0, "Error registering test window class.", + "Static control test", MB_ICONSTOP | MB_OK); + ExitProcess(0); + } + // Create main window. + DPRINT("Creating main window."); + MainWindow = CreateWindowEx(WS_EX_APPWINDOW | WS_EX_CLIENTEDGE, + TEST_WND_CLASS, "Static control test", + WS_OVERLAPPEDWINDOW, 50, 50, 245, 365, + NULL, NULL, AppInstance, NULL); + if (MainWindow == 0) { + DPRINT("Error creating main window."); + UnregisterClass(TEST_WND_CLASS, AppInstance); + MessageBox(0, "Error creating test window.", + "Static control test", MB_ICONSTOP | MB_OK); + ExitProcess(0); + } + DPRINT("Showing main window."); + ShowWindow(MainWindow, SW_SHOWNORMAL); + UpdateWindow(MainWindow); + // Run message loop. + DPRINT("Entering message loop."); + while (GetMessage(&Msg, NULL, 0, 0) > 0) { + TranslateMessage(&Msg); + DispatchMessage(&Msg); + } + // Unregister window class. + UnregisterClass(TEST_WND_CLASS, AppInstance); + DPRINT("Exiting."); + + return Msg.wParam; +} diff --git a/apps/tests/statst2/.cvsignore b/apps/tests/statst2/.cvsignore new file mode 100644 index 0000000..1f07002 --- /dev/null +++ b/apps/tests/statst2/.cvsignore @@ -0,0 +1,7 @@ +*.o +*.d +*.exe +*.coff +*.sym +*.map + diff --git a/apps/tests/statst2/Makefile b/apps/tests/statst2/Makefile new file mode 100644 index 0000000..cdb3d0a --- /dev/null +++ b/apps/tests/statst2/Makefile @@ -0,0 +1,20 @@ + +PATH_TO_TOP = ../../.. + +TARGET_NORC = yes + +TARGET_TYPE = program + +TARGET_APPTYPE = windows + +TARGET_NAME = statst2 + +TARGET_SDKLIBS = kernel32.a gdi32.a + +TARGET_OBJECTS = $(TARGET_NAME).o + +include $(PATH_TO_TOP)/rules.mak + +include $(TOOLS_PATH)/helper.mk + +# EOF diff --git a/apps/tests/statst2/statst2.c b/apps/tests/statst2/statst2.c new file mode 100644 index 0000000..5f09b57 --- /dev/null +++ b/apps/tests/statst2/statst2.c @@ -0,0 +1,180 @@ +// Static Control Test.c + +//#define WIN32_LEAN_AND_MEAN +#include +#include + +#ifndef SS_ENDELLIPSIS +#define SS_ENDELLIPSIS 0x00004000L +#endif /* SS_ENDELLIPSIS */ + + +#define nMaxCtrls 32 +#define nStaticWidth 384 +#define nStaticHeight 18 + +HWND g_hwnd = NULL; +HINSTANCE g_hInst = 0; +int nNextCtrl = 0; +HWND g_hwndCtrl[nMaxCtrls]; + +static void CreateStatic ( const char* lpWindowName, DWORD dwStyle ) +{ + int n = nNextCtrl++; + assert ( n < nMaxCtrls ); + g_hwndCtrl[n] = CreateWindow ( + "STATIC", // lpClassName + lpWindowName, // lpWindowName + WS_VISIBLE|WS_CHILD|dwStyle, // dwStyle + n+2, // x + nStaticHeight*n+1, // y + nStaticWidth, // nWidth + nStaticHeight-1, // nHeight + g_hwnd, // hWndParent + NULL, // hMenu + g_hInst, // hInstance + NULL ); // lParam +} + +LRESULT CALLBACK WndProc ( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ) +{ + int i; + switch ( msg ) + { + case WM_CREATE: + g_hwnd = hwnd; + for ( i = 0; i < nMaxCtrls; i++ ) + g_hwndCtrl[i] = NULL; + + CreateStatic ( "SS_NOTIFY test (click/double-click here)", SS_NOTIFY ); + + CreateStatic ( "SS_ENDELLIPSIS test test test test test test test test test test test", SS_ENDELLIPSIS ); + + CreateStatic ( "SS_CENTER test", SS_CENTER ); + + CreateStatic ( "SS_RIGHT test", SS_RIGHT ); + + CreateStatic ( "SS_BLACKFRAME test:", 0 ); + CreateStatic ( "this text shouldn't be visible!", SS_BLACKFRAME ); + + CreateStatic ( "SS_BLACKRECT test:", 0 ); + CreateStatic ( "this text shouldn't be visible!", SS_BLACKRECT ); + + CreateStatic ( "SS_ETCHEDFRAME test:", 0 ); + CreateStatic ( "this text shouldn't be visible!", SS_ETCHEDFRAME ); + + CreateStatic ( "SS_ETCHEDHORZ test:", 0 ); + CreateStatic ( "this text shouldn't be visible!", SS_ETCHEDHORZ ); + + CreateStatic ( "SS_ETCHEDVERT test", 0 ); + CreateStatic ( "this text shouldn't be visible!", SS_ETCHEDVERT ); + + CreateStatic ( "SS_GRAYFRAME test", 0 ); + CreateStatic ( "this text shouldn't be visible!", SS_GRAYFRAME ); + + CreateStatic ( "SS_GRAYRECT test", 0 ); + CreateStatic ( "this text shouldn't be visible!", SS_GRAYRECT ); + + CreateStatic ( "SS_NOPREFIX &test", SS_NOPREFIX ); + + CreateStatic ( "SS_OWNERDRAW test", SS_OWNERDRAW ); + + CreateStatic ( "SS_SUNKEN test", SS_SUNKEN ); + + CreateStatic ( "SS_WHITEFRAME test:", 0 ); + CreateStatic ( "this text shouldn't be visible!", SS_WHITEFRAME ); + + CreateStatic ( "SS_WHITERECT test:", 0 ); + CreateStatic ( "this text shouldn't be visible!", SS_WHITERECT ); + + //if ( creation fails ) + // return 0; + break; + + case WM_COMMAND: + if ( HIWORD(wParam) == STN_CLICKED ) + SetWindowText ( (HWND)lParam, "SS_NOTIFY:STN_CLICKED!" ); + if ( HIWORD(wParam) == STN_DBLCLK ) + SetWindowText ( (HWND)lParam, "SS_NOTIFY:STN_DBLCLK!" ); + break; + + case WM_DRAWITEM: + { + LPDRAWITEMSTRUCT lpDrawItem = (LPDRAWITEMSTRUCT) lParam; + DrawText ( lpDrawItem->hDC, "SS_DRAWITEM test successful!", 28, &(lpDrawItem->rcItem), 0 ); + } + break; + + case WM_DESTROY: + PostQuitMessage(0); + return 0; + } + return DefWindowProc ( hwnd, msg, wParam, lParam ); +} + +HWND RegisterAndCreateWindow ( + HINSTANCE hInst, + const char* className, + const char* title ) +{ + WNDCLASSEX wc; + HWND hwnd; + + g_hInst = hInst; + + wc.cbSize = sizeof (WNDCLASSEX); + wc.lpfnWndProc = WndProc; // window procedure: mandatory + wc.hInstance = hInst; // owner of the class: mandatory + wc.lpszClassName = className; // mandatory + wc.hCursor = LoadCursor ( 0, IDC_ARROW ); // optional + wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); // optional + wc.style = 0; + wc.cbClsExtra = 0; + wc.cbWndExtra = 0; + wc.hIcon = 0; + wc.hIconSm = 0; + wc.lpszMenuName = 0; + if ( !RegisterClassEx ( &wc ) ) + return NULL; + + hwnd = CreateWindowEx ( + 0, // dwStyleEx + className, // class name + title, // window title + WS_OVERLAPPEDWINDOW, // dwStyle + CW_USEDEFAULT, // x + CW_USEDEFAULT, // y + CW_USEDEFAULT, // width + CW_USEDEFAULT, // height + NULL, // hwndParent + NULL, // hMenu + hInst, // hInstance + 0 ); // lParam + + if ( !hwnd ) + return NULL; + + ShowWindow ( hwnd, SW_SHOW ); + UpdateWindow ( hwnd ); + + return hwnd; +} + +int WINAPI WinMain ( HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR cmdParam, int cmdShow ) +{ + char className [] = "Static Control Test"; + HWND hwnd; + MSG msg; + int status; + + hwnd = RegisterAndCreateWindow ( hInst, className, "Static Control Test" ); + + // Message loop + while ((status = GetMessage (& msg, 0, 0, 0)) != 0) + { + if (status == -1) + return -1; + DispatchMessage ( &msg ); + } + return msg.wParam; +} diff --git a/apps/tests/stretchblt/.cvsignore b/apps/tests/stretchblt/.cvsignore new file mode 100644 index 0000000..d63774a --- /dev/null +++ b/apps/tests/stretchblt/.cvsignore @@ -0,0 +1,6 @@ +*.o +*.d +*.exe +*.coff +*.sym +*.map diff --git a/apps/tests/stretchblt/makefile b/apps/tests/stretchblt/makefile index fa3421f..5716c75 100644 --- a/apps/tests/stretchblt/makefile +++ b/apps/tests/stretchblt/makefile @@ -1,66 +1,31 @@ -# Makefile - Proj_Listing1_5.dsp -ifndef CFG -CFG=Proj_Listing1_5 - Win32 Debug -endif -CC=gcc -CFLAGS= -CXX=g++ -CXXFLAGS=$(CFLAGS) -RC=windres -O COFF -ifeq "$(CFG)" "Proj_Listing1_5 - Win32 Release" -CFLAGS+=-fexceptions -O2 -DWIN32 -DNDEBUG -D_WINDOWS -D_MBCS -W -LD=$(CXX) $(CXXFLAGS) -LDFLAGS= -LDFLAGS+=-Wl,--subsystem,windows -LIBS+=-lkernel32 -luser32 -lgdi32 -else -ifeq "$(CFG)" "Proj_Listing1_5 - Win32 Debug" -CFLAGS+=-fexceptions -g -O0 -DWIN32 -D_DEBUG -D_WINDOWS -D_MBCS -W -LD=$(CXX) $(CXXFLAGS) -LDFLAGS= -LDFLAGS+=-Wl,--subsystem,windows -LIBS+=-lkernel32 -luser32 -lgdi32 -endif -endif +PATH_TO_TOP = ../../.. -ifndef TARGET -TARGET=stretchblt.exe -endif +TARGET_TYPE = program -.PHONY: all -all: $(TARGET) +TARGET_APPTYPE = windows -%.o: %.c - $(CC) $(CFLAGS) $(CPPFLAGS) -o $@ -c $< +TARGET_NAME = stretchblt -%.o: %.cpp - $(CXX) $(CXXFLAGS) $(CPPFLAGS) -o $@ -c $< +TARGET_NORC = yes -%.res: %.rc - $(RC) $(CPPFLAGS) -o $@ -i $< +TARGET_CFLAGS = -fexceptions -g -O0 -DWIN32 -D_DEBUG -D_WINDOWS -D_MBCS -W -D__USE_W32API + +TARGET_CPPFLAGS = -fexceptions -g -O0 -DWIN32 -D_DEBUG -D_WINDOWS -D_MBCS -W -D__USE_W32API -SOURCE_FILES= \ - stretchblt.cpp +TARGET_SDKLIBS = \ + kernel32.a \ + user32.a \ + gdi32.a -HEADER_FILES= +TARGET_OBJECTS = \ +stretchblt.o -RESOURCE_FILES= +include $(PATH_TO_TOP)/rules.mak -SRCS=$(SOURCE_FILES) $(HEADER_FILES) $(RESOURCE_FILES) +include $(TOOLS_PATH)/helper.mk -OBJS=$(patsubst %.rc,%.res,$(patsubst %.cpp,%.o,$(patsubst %.c,%.o,$(filter %.c %.cpp %.rc,$(SRCS))))) - -$(TARGET): $(OBJS) - $(LD) $(LDFLAGS) -o $@ $(OBJS) $(LIBS) - -.PHONY: clean -clean: - -del $(OBJS) $(TARGET) - -.PHONY: depends -depends: - -$(CXX) $(CXXFLAGS) $(CPPFLAGS) -MM $(filter %.c %.cpp,$(SRCS)) > Proj_Listing1_5.dep - --include Proj_Listing1_5.dep +# overide LD_CC to use g++ for linking of the executable +LD_CC = $(CXX) +# EOF diff --git a/apps/tests/suspend/.cvsignore b/apps/tests/suspend/.cvsignore new file mode 100644 index 0000000..d63774a --- /dev/null +++ b/apps/tests/suspend/.cvsignore @@ -0,0 +1,6 @@ +*.o +*.d +*.exe +*.coff +*.sym +*.map diff --git a/apps/tests/suspend/Makefile b/apps/tests/suspend/Makefile new file mode 100644 index 0000000..4118f9d --- /dev/null +++ b/apps/tests/suspend/Makefile @@ -0,0 +1,19 @@ +# $Id$ + +PATH_TO_TOP = ../../.. + +TARGET_NORC = yes + +TARGET_TYPE = program + +TARGET_APPTYPE = console + +TARGET_NAME = suspend + +TARGET_OBJECTS = $(TARGET_NAME).o + +include $(PATH_TO_TOP)/rules.mak + +include $(TOOLS_PATH)/helper.mk + +# EOF diff --git a/apps/tests/suspend/suspend.c b/apps/tests/suspend/suspend.c new file mode 100644 index 0000000..3f1e005 --- /dev/null +++ b/apps/tests/suspend/suspend.c @@ -0,0 +1,73 @@ +#define UNICODE + +#define NTOS_MODE_USER +#include +#include + +#define DBG +#define NDEBUG +#include + +static volatile DWORD z; +static volatile DWORD x=0; + +static NTSTATUS STDCALL +thread_1(PVOID Param) +{ + DWORD y=0; + + for(;;) + { + z++; + if(x>50) + { + printf("I should have been suspended for years :-)\n"); + Sleep(100); + x=0;y++; + if(y==3) ExitProcess(0); + } + } +} + +int +main(int argc, char *argv[]) +{ + HANDLE thread; + DWORD thread_id; + CONTEXT context; + + context.ContextFlags=CONTEXT_CONTROL; + + z=0; + thread=CreateThread(NULL, + 0x1000, + thread_1, + NULL, + 0, + &thread_id); + + if(!thread) + { + printf("Error: could not create thread ...\n"); + ExitProcess(0); + } + + Sleep(1000); + + SuspendThread(thread); + + for(;;) + { + printf("%x ", z); + Sleep(100);x++; + if(x>100 && GetThreadContext(thread, &context)) + { + printf("EIP: %x\n", context.Eip); + printf("Calling resumethread ... \n"); + ResumeThread(thread); + } + } + + ExitProcess(0); + return(0); +} diff --git a/apps/tests/tcpsvr/.cvsignore b/apps/tests/tcpsvr/.cvsignore new file mode 100644 index 0000000..d63774a --- /dev/null +++ b/apps/tests/tcpsvr/.cvsignore @@ -0,0 +1,6 @@ +*.o +*.d +*.exe +*.coff +*.sym +*.map diff --git a/apps/tests/tcpsvr/tcpsvr.c b/apps/tests/tcpsvr/tcpsvr.c index 5bb460b..4d7b682 100644 --- a/apps/tests/tcpsvr/tcpsvr.c +++ b/apps/tests/tcpsvr/tcpsvr.c @@ -65,10 +65,10 @@ int main (int argc, char *argv[]) { while(1) { - printf("%s: \n - To start test, Please telnet to localhost (127.0.0.1) port 23 \n - When connected input raw data followed by End of Line\n - Test is now running on TCP port %u\n",argv[0],SERVER_PORT); + printf("%s: \n" + "To start test, Please telnet to localhost (127.0.0.1) port 23 \n" + "When connected input raw data followed by End of Line\n" + "Test is now running on TCP port %u\n",argv[0],SERVER_PORT); cliLen = sizeof(cliAddr); newSd = accept(sd, (struct sockaddr *) &cliAddr, &cliLen); diff --git a/apps/tests/terminate/.cvsignore b/apps/tests/terminate/.cvsignore new file mode 100644 index 0000000..d63774a --- /dev/null +++ b/apps/tests/terminate/.cvsignore @@ -0,0 +1,6 @@ +*.o +*.d +*.exe +*.coff +*.sym +*.map diff --git a/apps/tests/terminate/Makefile b/apps/tests/terminate/Makefile new file mode 100644 index 0000000..19f4b4b --- /dev/null +++ b/apps/tests/terminate/Makefile @@ -0,0 +1,19 @@ +# $Id$ + +PATH_TO_TOP = ../../.. + +TARGET_NORC = yes + +TARGET_TYPE = program + +TARGET_APPTYPE = console + +TARGET_NAME = terminate + +TARGET_OBJECTS = $(TARGET_NAME).o + +include $(PATH_TO_TOP)/rules.mak + +include $(TOOLS_PATH)/helper.mk + +# EOF diff --git a/apps/tests/terminate/terminate.c b/apps/tests/terminate/terminate.c new file mode 100644 index 0000000..5d0f224 --- /dev/null +++ b/apps/tests/terminate/terminate.c @@ -0,0 +1,75 @@ +#define UNICODE + +#define NTOS_MODE_USER +#include +#include + +#define DBG +#define NDEBUG +#include + +static volatile DWORD z; +static volatile DWORD x=0; + +static NTSTATUS STDCALL +thread_1(PVOID Param) +{ + DWORD y=0; + + for(;;) + { + z++; + if(x>50) + { + Sleep(100); + x=0;y++; + if(y==3) return(0); + } + } +} + +int +main(int argc, char *argv[]) +{ + HANDLE thread; + DWORD thread_id; + CONTEXT context; + DWORD z = 0; + + context.ContextFlags=CONTEXT_CONTROL; + + while (z < 50) + { + TerminateThread(thread, 0); + z++; + thread=CreateThread(NULL, + 0x1000, + thread_1, + NULL, + 0, + &thread_id); + + if(!thread) + { + printf("Error: could not create thread ...\n"); + ExitProcess(0); + } + + Sleep(1000); + + printf("T"); + if ((z % 5) == 0) + { + TerminateThread(thread, 0); + } + printf("C"); + GetThreadContext(thread, &context); + printf("S"); + SuspendThread(thread); + printf("R"); + ResumeThread(thread); + } + + ExitProcess(0); + return(0); +} diff --git a/apps/tests/tests/GetSysMetrics/.cvsignore b/apps/tests/tests/GetSysMetrics/.cvsignore index 6deb857..7b5ccfa 100644 --- a/apps/tests/tests/GetSysMetrics/.cvsignore +++ b/apps/tests/tests/GetSysMetrics/.cvsignore @@ -3,3 +3,4 @@ *.exe *.dsp *.dsw +*.map diff --git a/apps/tests/tests/GetSystemInfo/.cvsignore b/apps/tests/tests/GetSystemInfo/.cvsignore index 0ec02ac..2c287ef 100644 --- a/apps/tests/tests/GetSystemInfo/.cvsignore +++ b/apps/tests/tests/GetSystemInfo/.cvsignore @@ -1,3 +1,4 @@ *.exe *.o *.sym +*.map diff --git a/apps/tests/tests/Mutex/.cvsignore b/apps/tests/tests/Mutex/.cvsignore index 4666b1a..365fbf1 100644 --- a/apps/tests/tests/Mutex/.cvsignore +++ b/apps/tests/tests/Mutex/.cvsignore @@ -1,2 +1,3 @@ *.exe *.sym +*.map diff --git a/apps/tests/tests/Parent_Child/.cvsignore b/apps/tests/tests/Parent_Child/.cvsignore index 737e8b5..50e015a 100644 --- a/apps/tests/tests/Parent_Child/.cvsignore +++ b/apps/tests/tests/Parent_Child/.cvsignore @@ -1,3 +1,4 @@ *.sym *.exe *.o +*.map diff --git a/apps/tests/tests/guitest/.cvsignore b/apps/tests/tests/guitest/.cvsignore index 0ec02ac..2c287ef 100644 --- a/apps/tests/tests/guitest/.cvsignore +++ b/apps/tests/tests/guitest/.cvsignore @@ -1,3 +1,4 @@ *.exe *.o *.sym +*.map diff --git a/apps/tests/tests/hello/.cvsignore b/apps/tests/tests/hello/.cvsignore index 916ee15..3bd4971 100644 --- a/apps/tests/tests/hello/.cvsignore +++ b/apps/tests/tests/hello/.cvsignore @@ -1,3 +1,4 @@ *.exe *.sym *.o +*.map diff --git a/apps/tests/tests/new/.cvsignore b/apps/tests/tests/new/.cvsignore index 0ec02ac..2c287ef 100644 --- a/apps/tests/tests/new/.cvsignore +++ b/apps/tests/tests/new/.cvsignore @@ -1,3 +1,4 @@ *.exe *.o *.sym +*.map diff --git a/apps/tests/tests/rolex/.cvsignore b/apps/tests/tests/rolex/.cvsignore index 343a060..136c6e1 100644 --- a/apps/tests/tests/rolex/.cvsignore +++ b/apps/tests/tests/rolex/.cvsignore @@ -1,3 +1,4 @@ *.o *.exe *.sym +*.map diff --git a/apps/tests/tests/volinfo/.cvsignore b/apps/tests/tests/volinfo/.cvsignore index 343a060..136c6e1 100644 --- a/apps/tests/tests/volinfo/.cvsignore +++ b/apps/tests/tests/volinfo/.cvsignore @@ -1,3 +1,4 @@ *.o *.exe *.sym +*.map diff --git a/apps/tests/tests/volinfo/Makefile b/apps/tests/tests/volinfo/Makefile index 3a37271..8842a1c 100644 --- a/apps/tests/tests/volinfo/Makefile +++ b/apps/tests/tests/volinfo/Makefile @@ -3,34 +3,18 @@ # PATH_TO_TOP = ../../../.. -PROGS = volinfo +TARGET_NORC = yes -OBJECTS = volinfo.o +TARGET_TYPE = program -LIBS = -CFLAGS = +TARGET_APPTYPE = console -all: $(PROGS:%=%.exe) +TARGET_NAME = volinfo -.phony: all +TARGET_OBJECTS = $(TARGET_NAME).o -clean: - - $(RM) *.o *.exe *.sym - -.phony: clean - -install: $(PROGS:%=$(FLOPPY_DIR)/apps/%.exe) - -$(PROGS:%=$(FLOPPY_DIR)/apps/%.exe): $(FLOPPY_DIR)/apps/%.exe: %.exe - $(CP) $*.exe $(FLOPPY_DIR)/apps/$*.exe - -dist: $(PROGS:%=../../$(DIST_DIR)/apps/%.exe) - -$(PROGS:%=../../$(DIST_DIR)/apps/%.exe): ../../$(DIST_DIR)/apps/%.exe: %.exe - $(CP) $*.exe ../../$(DIST_DIR)/apps/$*.exe +include $(PATH_TO_TOP)/rules.mak -volinfo.exe: $(OBJECTS) - $(CC) $(CFLAGS) -Wl,--subsystem,windows $(OBJECTS) $(LIBS) -o volinfo.exe - $(NM) --numeric-sort volinfo.exe > volinfo.sym +include $(TOOLS_PATH)/helper.mk -include $(PATH_TO_TOP)/rules.mak +# EOF diff --git a/apps/tests/tests/volinfo/volinfo.c b/apps/tests/tests/volinfo/volinfo.c index bc639d1..bc99044 100644 --- a/apps/tests/tests/volinfo/volinfo.c +++ b/apps/tests/tests/volinfo/volinfo.c @@ -5,8 +5,7 @@ #include #include /* for strcat() */ -int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, - LPSTR lpszCmdLine, int nCmdShow) +int main(void) { char drive, root[]="C:\\", label[1002], fsname[1002]; DWORD serial, flags, filenamelen, labellen = 1000, fsnamelen = 1000; diff --git a/apps/tests/thread/.cvsignore b/apps/tests/thread/.cvsignore index 7e87816..d63774a 100644 --- a/apps/tests/thread/.cvsignore +++ b/apps/tests/thread/.cvsignore @@ -3,3 +3,4 @@ *.exe *.coff *.sym +*.map diff --git a/apps/tests/thread_msg/.cvsignore b/apps/tests/thread_msg/.cvsignore new file mode 100644 index 0000000..d63774a --- /dev/null +++ b/apps/tests/thread_msg/.cvsignore @@ -0,0 +1,6 @@ +*.o +*.d +*.exe +*.coff +*.sym +*.map diff --git a/apps/tests/thread_msg/makefile b/apps/tests/thread_msg/makefile new file mode 100644 index 0000000..6e39c7d --- /dev/null +++ b/apps/tests/thread_msg/makefile @@ -0,0 +1,21 @@ +# $Id$ + +PATH_TO_TOP = ../../.. + +TARGET_NORC = yes + +TARGET_TYPE = program + +TARGET_APPTYPE = console + +TARGET_NAME = thread_msg + +TARGET_SDKLIBS = kernel32.a user32.a + +TARGET_OBJECTS = $(TARGET_NAME).o + +include $(PATH_TO_TOP)/rules.mak + +include $(TOOLS_PATH)/helper.mk + +# EOF diff --git a/apps/tests/thread_msg/thread_msg.c b/apps/tests/thread_msg/thread_msg.c new file mode 100644 index 0000000..f62d05f --- /dev/null +++ b/apps/tests/thread_msg/thread_msg.c @@ -0,0 +1,97 @@ +/** + * Test case for PostThreadMessage + * (C) 2003 ReactOS + * License: LGPL + * See: LGPL.txt in top directory. + * Author: arty + * + * Windows thread message queue test case. + * Derived from ../event/event.c in part. + */ + +#include +#include +#include + +HANDLE hWaitForFailure; +HANDLE hOkToPostThreadMessage; +HANDLE hOkToTerminate; + +DWORD WINAPI thread( LPVOID crap ) +{ + MSG msg; + + /* Failure case ... Wait for the parent to try to post a message + before queue creation */ + printf( "Waiting to create the message queue.\n" ); + + WaitForSingleObject(hWaitForFailure,INFINITE); + + printf( "Creating message queue.\n" ); + + /* "Create" a message queue */ + PeekMessage( &msg, NULL, 0, 0, PM_NOREMOVE ); + + printf( "Signalling the parent that we're ready.\n" ); + + /* Signal that it's ok to post */ + SetEvent( hOkToPostThreadMessage ); + + printf( "Listening messages.\n" ); + + /* Now read some messages */ + while( GetMessage( &msg, 0,0,0 ) ) { + printf( "Received message: %04x %04x %08x\n", + (msg.message & 0xffff), + (msg.wParam & 0xffff), + msg.lParam ); + assert( !msg.hwnd ); + } + + printf( "Finished receiving messages.\n" ); + SetEvent( hOkToTerminate ); + + return 0; +} + +int main( int argc, char **argv ) +{ + DWORD id, Status; + + printf( "Creating events\n" ); + + hOkToPostThreadMessage = CreateEvent( NULL, FALSE, FALSE, NULL ); + hOkToTerminate = CreateEvent( NULL, FALSE, FALSE, NULL ); + hWaitForFailure = CreateEvent( NULL, FALSE, FALSE, NULL ); + + printf( "Created events\n" ); + + if( CreateThread( 0, 0, thread, 0, 0, &id ) == NULL ) { + printf( "Couldn't create one thread.\n" ); + return 0; + } + + printf( "Posting to non-existent queue\n" ); + + /* Check failure case */ + assert( PostThreadMessage( id, WM_USER + 0, 1, 2 ) == FALSE ); + + printf( "Signalling thread to advance.\n" ); + + SetEvent( hWaitForFailure ); + + printf( "Waiting for signal from thread.\n" ); + WaitForSingleObject( hOkToPostThreadMessage, INFINITE ); + + printf( "Sending three messages, then quit.\n" ); + assert( PostThreadMessage( id, WM_USER + 0, 1, 2 ) ); + assert( PostThreadMessage( id, WM_USER + 1, 3, 4 ) ); + Sleep( 500 ); /* Sleep a bit, so that the queue is empty for a bit. */ + assert( PostThreadMessage( id, WM_USER + 2, 5, 6 ) ); + assert( PostThreadMessage( id, WM_QUIT, 0,0 ) ); + + WaitForSingleObject( hOkToTerminate, INFINITE ); + printf( "Test complete.\n" ); + + return 0; +} diff --git a/apps/tests/threadwait/.cvsignore b/apps/tests/threadwait/.cvsignore new file mode 100644 index 0000000..d63774a --- /dev/null +++ b/apps/tests/threadwait/.cvsignore @@ -0,0 +1,6 @@ +*.o +*.d +*.exe +*.coff +*.sym +*.map diff --git a/apps/tests/threadwait/makefile b/apps/tests/threadwait/makefile new file mode 100644 index 0000000..3a247bd --- /dev/null +++ b/apps/tests/threadwait/makefile @@ -0,0 +1,21 @@ +# $Id$ + +PATH_TO_TOP = ../../.. + +TARGET_NORC = yes + +TARGET_TYPE = program + +TARGET_APPTYPE = console + +TARGET_NAME = threadwait + +TARGET_SDKLIBS = ntdll.a + +TARGET_OBJECTS = $(TARGET_NAME).o + +include $(PATH_TO_TOP)/rules.mak + +include $(TOOLS_PATH)/helper.mk + +# EOF diff --git a/apps/tests/threadwait/threadwait.c b/apps/tests/threadwait/threadwait.c new file mode 100644 index 0000000..2039119 --- /dev/null +++ b/apps/tests/threadwait/threadwait.c @@ -0,0 +1,31 @@ +/* + * Author: Skywing (skywing@valhallalegends.com) + * Date: 09/09/2003 + * Purpose: Probe for PsUnblockThread crash due to double-acquire spin lock. + */ + +#include +#include + +DWORD __stdcall threadfunc(void* UNREFERENCED) +{ + printf("Thread: Initialized\n"); + Sleep(2500); + printf("Thread: Terminating...\n"); + return 0; +} + +int main(int ac, char **av) +{ + DWORD id; + HANDLE Thread; + + Thread = CreateThread(0, 0, threadfunc, 0, 0, &id); + printf("Main: ThreadId for new thread is %08x\n", id); + printf("Main: Waiting on thread...\n"); + WaitForSingleObject(Thread, INFINITE); + printf("Main: OK, somebody fixed the PsUnblockThread spinlock double-acquire crash\n"); + NtClose(Thread); + printf("Main: Terminating...\n"); + return 0; +} diff --git a/apps/tests/tokentest/.cvsignore b/apps/tests/tokentest/.cvsignore index 7e87816..d63774a 100644 --- a/apps/tests/tokentest/.cvsignore +++ b/apps/tests/tokentest/.cvsignore @@ -3,3 +3,4 @@ *.exe *.coff *.sym +*.map diff --git a/apps/tests/tokentest/makefile b/apps/tests/tokentest/makefile index b884d39..d2dbaf7 100644 --- a/apps/tests/tokentest/makefile +++ b/apps/tests/tokentest/makefile @@ -8,11 +8,11 @@ TARGET_TYPE = program TARGET_APPTYPE = console -TARGET_NAME = tokentest +TARGET_NAME = tokentst TARGET_SDKLIBS = ntdll.a kernel32.a -TARGET_OBJECTS = $(TARGET_NAME).o +TARGET_OBJECTS = tokentest.o include $(PATH_TO_TOP)/rules.mak diff --git a/apps/tests/txtscale/.cvsignore b/apps/tests/txtscale/.cvsignore new file mode 100644 index 0000000..d63774a --- /dev/null +++ b/apps/tests/txtscale/.cvsignore @@ -0,0 +1,6 @@ +*.o +*.d +*.exe +*.coff +*.sym +*.map diff --git a/apps/tests/txtscale/Makefile b/apps/tests/txtscale/Makefile new file mode 100644 index 0000000..16a3359 --- /dev/null +++ b/apps/tests/txtscale/Makefile @@ -0,0 +1,34 @@ + +PATH_TO_TOP = ../../.. + +TARGET_TYPE = program + +TARGET_APPTYPE = windows + +TARGET_NAME = txtscale + +TARGET_NORC = yes + +TARGET_CFLAGS = -fexceptions -g -O0 -DWIN32 -D_DEBUG -D_WINDOWS -D_MBCS -W -D__USE_W32API -D_WIN32_IE=0x0501 -D_WIN32_WINNT=0x0501 + +TARGET_CPPFLAGS = -fexceptions -g -O0 -DWIN32 -D_DEBUG -D_WINDOWS -D_MBCS -W -D__USE_W32API -D_WIN32_IE=0x0501 -D_WIN32_WINNT=0x0501 + +TARGET_SDKLIBS = \ + kernel32.a \ + user32.a \ + gdi32.a + +TARGET_GCCLIBS = comctl32 + +TARGET_OBJECTS = \ + txtscale.o \ + mk_font.o + +include $(PATH_TO_TOP)/rules.mak + +include $(TOOLS_PATH)/helper.mk + +# overide LD_CC to use g++ for linking of the executable +LD_CC = $(CXX) + +# EOF diff --git a/apps/tests/txtscale/mk_font.cpp b/apps/tests/txtscale/mk_font.cpp new file mode 100644 index 0000000..618c22b --- /dev/null +++ b/apps/tests/txtscale/mk_font.cpp @@ -0,0 +1,69 @@ + +// ------------------------------------------------------------------ +// Windows 2000 Graphics API Black Book +// Chapter 4 - Utility functions +// +// Created by Damon Chandler +// Updates can be downloaded at: +// +// Please do not hesistate to e-mail me at dmc27@ee.cornell.edu +// if you have any questions about this code. +// ------------------------------------------------------------------ + +//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> +#include +#include + +#include "mk_font.h" +//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + +namespace font { + +// creates a logical font +HFONT MakeFont( + IN HDC hDestDC, // handle to target DC + IN LPCSTR typeface_name, // font's typeface name + IN int point_size, // font's point size + IN const BYTE charset, // font's character set + IN const DWORD style // font's styles + ) +{ + // + // NOTE: On Windows 9x/Me, GetWorldTransform is not + // supported. For compatibility with these platforms you + // should initialize the XFORM::eM22 data member to 1.0. + // + XFORM xf = {0, 0, 0, 1.0}; + GetWorldTransform(hDestDC, &xf); + int pixels_per_inch = GetDeviceCaps(hDestDC, LOGPIXELSY); + + POINT PSize = { + 0, + -MulDiv(static_cast(xf.eM22 * point_size + 0.5), + pixels_per_inch, 72) + }; + + HFONT hResult = NULL; + if (DPtoLP(hDestDC, &PSize, 1)) + { + LOGFONT lf; + memset(&lf, 0, sizeof(LOGFONT)); + + lf.lfHeight = PSize.y; + lf.lfCharSet = charset; + lstrcpyn(reinterpret_cast(&lf.lfFaceName), + typeface_name, LF_FACESIZE); + + lf.lfWeight = (style & FS_BOLD) ? FW_BOLD : FW_DONTCARE; + lf.lfItalic = (style & FS_ITALIC) ? true : false; + lf.lfUnderline = (style & FS_UNDERLINE) ? true : false; + lf.lfStrikeOut = (style & FS_STRIKEOUT) ? true : false; + + // create the logical font + hResult = CreateFontIndirect(&lf); + } + return hResult; +} +//------------------------------------------------------------------------- + +} // namespace font diff --git a/apps/tests/txtscale/mk_font.h b/apps/tests/txtscale/mk_font.h new file mode 100644 index 0000000..98c164c --- /dev/null +++ b/apps/tests/txtscale/mk_font.h @@ -0,0 +1,39 @@ + +// ------------------------------------------------------------------ +// Windows 2000 Graphics API Black Book +// Chapter 4 - Utility functions +// +// Created by Damon Chandler +// Updates can be downloaded at: +// +// Please do not hesistate to e-mail me at dmc27@ee.cornell.edu +// if you have any questions about this code. +// ------------------------------------------------------------------ + +//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> +#ifndef CH4_UTILS_H +#define CH4_UTILS_H + +#include +//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + +// change namespace name appropriately to suit your needs +namespace font { + +// font options +static const ULONG FS_NONE = 0x00000000; +static const ULONG FS_BOLD = 0x00000001; +static const ULONG FS_ITALIC = 0x00000002; +static const ULONG FS_UNDERLINE = 0x00000004; +static const ULONG FS_STRIKEOUT = 0x00000008; + +// creates a logical font +HFONT MakeFont(IN HDC hDestDC, IN LPCSTR typeface_name, + IN int point_size, IN const BYTE charset = ANSI_CHARSET, + IN const DWORD style = FS_NONE); + +} + +//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> +#endif // CH4_UTILS_H +//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< diff --git a/apps/tests/txtscale/txtscale.cpp b/apps/tests/txtscale/txtscale.cpp new file mode 100644 index 0000000..c77216b --- /dev/null +++ b/apps/tests/txtscale/txtscale.cpp @@ -0,0 +1,266 @@ + +// ------------------------------------------------------------------ +// Windows 2000 Graphics API Black Book +// Chapter 8 - Listing 8.1 (Scaled Text Demo) +// +// Created by Damon Chandler +// Updates can be downloaded at: +// +// Please do not hesistate to e-mail me at dmc27@ee.cornell.edu +// if you have any questions about this code. +// ------------------------------------------------------------------ + + +//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> +#include +#include +#include + +// for the MakeFont() function... +#include "mk_font.h" +//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + + +HINSTANCE hInst; +const char* WndClassName = "GMainWnd"; +LRESULT CALLBACK MainWndProc(HWND HWnd, UINT Msg, WPARAM WParam, + LPARAM LParam); + + +int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE, LPTSTR, + int nCmdShow) +{ + hInst = hInstance; + + WNDCLASS wc; + memset(&wc, 0, sizeof(WNDCLASS)); + + wc.style = CS_HREDRAW | CS_VREDRAW; + wc.lpszClassName = WndClassName; + wc.lpfnWndProc = MainWndProc; + wc.hInstance = hInst; + wc.hCursor = LoadCursor(NULL, IDC_ARROW); + wc.hbrBackground = reinterpret_cast( + COLOR_BTNFACE + 1 + ); + + if (RegisterClass(&wc)) + { + HWND hWnd = + CreateWindow( + WndClassName, TEXT("Scaled Text Demo"), + WS_OVERLAPPEDWINDOW | WS_CAPTION | + WS_VISIBLE | WS_CLIPCHILDREN, + CW_USEDEFAULT, CW_USEDEFAULT, 800, 300, + NULL, NULL, hInst, NULL + ); + + if (hWnd) + { + ShowWindow(hWnd, nCmdShow); + UpdateWindow(hWnd); + + MSG msg; + while (GetMessage(&msg, NULL, 0, 0)) + { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + } + } + return 0; +} +//------------------------------------------------------------------------- + + +HWND hTrackBar = NULL; +HFONT hTTFont = NULL; +double scale = 0.0; +LPCSTR pText = TEXT("The Scaled Text!"); + +LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, + LPARAM lParam) +{ + switch (msg) + { + case WM_CREATE: + { + INITCOMMONCONTROLSEX icx; + icx.dwSize = sizeof(INITCOMMONCONTROLSEX); + icx.dwICC = ICC_BAR_CLASSES; + + InitCommonControlsEx(&icx); + + hTrackBar = + CreateWindow( + TRACKBAR_CLASS, "", + TBS_HORZ | TBS_BOTH | TBS_AUTOTICKS | + TBS_FIXEDLENGTH | TBS_ENABLESELRANGE | + WS_CHILD | WS_VISIBLE, + 10, 260, 375, 40, + hWnd, NULL, hInst, NULL + ); + + assert(hTrackBar != NULL); + SNDMSG(hTrackBar, TBM_SETTHUMBLENGTH, 20, 0); + SNDMSG(hTrackBar, TBM_SETRANGEMAX, TRUE, 100); + + // create the TrueType (scalable) font + HDC hDC = GetDC(hWnd); + try + { + // see Chapter 4 for the definition of MakeFont + hTTFont = font::MakeFont(hDC, "Impact", 72); + if (!hTTFont) throw; + } + catch (...) + { + ReleaseDC(hWnd, hDC); + } + ReleaseDC(hWnd, hDC); + break; + } + case WM_HSCROLL: + { + if (reinterpret_cast(lParam) == hTrackBar) + { + // + // adjust the scaling factor according to + // the position of the trackbar's slider + // + scale = static_cast( + (SNDMSG(hTrackBar, TBM_GETPOS, 0, 0) + 1) / 50.0 + ); + InvalidateRect(hWnd, NULL, true); + } + break; + } + case WM_ERASEBKGND: + { + LRESULT res = DefWindowProc(hWnd, msg, wParam, lParam); + + HDC hDC = reinterpret_cast(wParam); + HFONT hOldFont = static_cast( + SelectObject(hDC, hTTFont) + ); + try + { + SetBkMode(hDC, TRANSPARENT); + + // open a path bracket + if (!BeginPath(hDC)) throw; + + // record the text to the path + TextOut(hDC, 10, 10, pText, lstrlen(pText)); + + // close the path bracket and + // select the path into hDC + EndPath(hDC); + + // determine the number of endpoints in the path + const int num_points = GetPath(hDC, NULL, NULL, 0); + if (num_points > 0) + { + // make room for the POINTs and vertex types + POINT* pPEnds = new POINT[num_points]; + unsigned char* pTypes = new unsigned char[num_points]; + try + { + // get the path's description + int num_got = GetPath(hDC, pPEnds, pTypes, num_points); + if (num_got > 0) + { + // start a new path bracket + if (!BeginPath(hDC)) throw; + + // scale each point in the description + int iPoint; + for (iPoint = 0; iPoint < num_got; ++iPoint) + { + pPEnds[iPoint].x = static_cast( + scale * pPEnds[iPoint].x + 0.5 + ); + pPEnds[iPoint].y = static_cast( + scale * pPEnds[iPoint].y + 0.5 + ); + } + + for (iPoint = 0; iPoint < num_points; ++iPoint) + { + // handle the MoveToEx case + if (pTypes[iPoint] == PT_MOVETO) + { + MoveToEx( + hDC, pPEnds[iPoint].x, pPEnds[iPoint].y, NULL + ); + } + // handle the LineTo case + else if ( + pTypes[iPoint] == PT_LINETO || + pTypes[iPoint] == (PT_LINETO | PT_CLOSEFIGURE) + ) + { + LineTo(hDC, pPEnds[iPoint].x, pPEnds[iPoint].y); + } + // handle the PolyBezierTo case + else if ( + pTypes[iPoint] == PT_BEZIERTO || + pTypes[iPoint] == (PT_BEZIERTO | PT_CLOSEFIGURE) + ) + { + PolyBezierTo(hDC, pPEnds + iPoint, 3); + iPoint += 2; + } + } + + // close the new path bracket + EndPath(hDC); + + // stroke and fill the new path + StrokeAndFillPath(hDC); + } + } + catch (...) + { + // clean up + delete [] pTypes; + delete [] pPEnds; + throw; + } + // clean up + delete [] pTypes; + delete [] pPEnds; + } + // ... + } + catch (...) + { + SelectObject(hDC, hOldFont); + } + SelectObject(hDC, hOldFont); + return res; + } + case WM_SIZE: + { + MoveWindow( + hTrackBar, + 0, HIWORD(lParam) - 40, LOWORD(lParam), 40, + false + ); + break; + } + case WM_DESTROY: + { + // clean up + DeleteObject(hTTFont); + PostQuitMessage(0); + break; + } + } + return DefWindowProc(hWnd, msg, wParam, lParam); +} +//------------------------------------------------------------------------- + + + + diff --git a/apps/tests/vmtest/.cvsignore b/apps/tests/vmtest/.cvsignore index 7e87816..d63774a 100644 --- a/apps/tests/vmtest/.cvsignore +++ b/apps/tests/vmtest/.cvsignore @@ -3,3 +3,4 @@ *.exe *.coff *.sym +*.map diff --git a/apps/tests/winhello/.cvsignore b/apps/tests/winhello/.cvsignore index e543821..d63774a 100644 --- a/apps/tests/winhello/.cvsignore +++ b/apps/tests/winhello/.cvsignore @@ -1,6 +1,6 @@ -winhello.exe -winhello.nostrip.exe -winhello.sym -winhello.coff +*.o *.d -*.o \ No newline at end of file +*.exe +*.coff +*.sym +*.map diff --git a/apps/tests/winhello/makefile b/apps/tests/winhello/makefile index 902cc9b..9159ab7 100644 --- a/apps/tests/winhello/makefile +++ b/apps/tests/winhello/makefile @@ -10,7 +10,7 @@ TARGET_APPTYPE = windows TARGET_NAME = winhello -TARGET_SDKLIBS = kernel32.a gdi32.a +TARGET_SDKLIBS = kernel32.a gdi32.a ntdll.a TARGET_OBJECTS = $(TARGET_NAME).o diff --git a/apps/tests/winhello/winhello.c b/apps/tests/winhello/winhello.c index 391d611..d54f335 100644 --- a/apps/tests/winhello/winhello.c +++ b/apps/tests/winhello/winhello.c @@ -1,7 +1,7 @@ #include #include -HFONT tf; +//HFONT tf; LRESULT WINAPI MainWndProc(HWND, UINT, WPARAM, LPARAM); int WINAPI @@ -49,9 +49,9 @@ WinMain(HINSTANCE hInstance, return(1); } - tf = CreateFontA(14, 0, 0, TA_BASELINE, FW_NORMAL, FALSE, FALSE, FALSE, - ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, - DEFAULT_QUALITY, FIXED_PITCH|FF_DONTCARE, "Timmons"); + //tf = CreateFontA(14, 0, 0, TA_BASELINE, FW_NORMAL, FALSE, FALSE, FALSE, + // ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, + // DEFAULT_QUALITY, FIXED_PITCH|FF_DONTCARE, "Timmons"); ShowWindow(hWnd, nCmdShow); @@ -61,7 +61,7 @@ WinMain(HINSTANCE hInstance, DispatchMessage(&msg); } - DeleteObject(tf); + //DeleteObject(tf); return msg.wParam; } @@ -93,7 +93,9 @@ LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) case WM_PAINT: hDC = BeginPaint(hWnd, &ps); - SelectObject(hDC, tf); + EndPaint(hWnd, &ps); + //SelectObject(hDC, tf); + hDC = GetDC(hWnd); TextOut(hDC, 10, 10, "Hello World from ReactOS!", strlen("Hello World from ReactOS!")); GetClientRect(hWnd, &clr); GetWindowRect(hWnd, &wir); @@ -101,7 +103,7 @@ LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) sprintf(sir, "%d,%d,%d,%d ", wir.left, wir.top, wir.right, wir.bottom); TextOut(hDC, 10, 30, spr, 20); TextOut(hDC, 10, 50, sir, 20); - EndPaint(hWnd, &ps); + ReleaseDC ( hWnd, hDC ); break; case WM_DESTROY: diff --git a/apps/tests/wm_erasebkgnd/.cvsignore b/apps/tests/wm_erasebkgnd/.cvsignore new file mode 100644 index 0000000..d63774a --- /dev/null +++ b/apps/tests/wm_erasebkgnd/.cvsignore @@ -0,0 +1,6 @@ +*.o +*.d +*.exe +*.coff +*.sym +*.map diff --git a/apps/tests/wm_erasebkgnd/makefile b/apps/tests/wm_erasebkgnd/makefile index 5c6818c..50c0986 100644 --- a/apps/tests/wm_erasebkgnd/makefile +++ b/apps/tests/wm_erasebkgnd/makefile @@ -1,66 +1,31 @@ -# Makefile - Proj_Demo_WM_ERASEBKGND.dsp -ifndef CFG -CFG=Proj_Demo_WM_ERASEBKGND - Win32 Debug -endif -CC=gcc -CFLAGS= -CXX=g++ -CXXFLAGS=$(CFLAGS) -RC=windres -O COFF -ifeq "$(CFG)" "Proj_Demo_WM_ERASEBKGND - Win32 Release" -CFLAGS+=-fexceptions -O2 -DWIN32 -DNDEBUG -D_WINDOWS -D_MBCS -W -LD=$(CXX) $(CXXFLAGS) -LDFLAGS= -LDFLAGS+=-Wl,--subsystem,windows -LIBS+=-lkernel32 -luser32 -lgdi32 -else -ifeq "$(CFG)" "Proj_Demo_WM_ERASEBKGND - Win32 Debug" -CFLAGS+=-fexceptions -g -O0 -DWIN32 -D_DEBUG -D_WINDOWS -D_MBCS -W -LD=$(CXX) $(CXXFLAGS) -LDFLAGS= -LDFLAGS+=-Wl,--subsystem,windows -LIBS+=-lkernel32 -luser32 -lgdi32 -endif -endif +PATH_TO_TOP = ../../.. -ifndef TARGET -TARGET=WM_ERASEBKGND.exe -endif +TARGET_TYPE = program -.PHONY: all -all: $(TARGET) +TARGET_APPTYPE = windows -%.o: %.c - $(CC) $(CFLAGS) $(CPPFLAGS) -o $@ -c $< +TARGET_NAME = wm_erasebkgnd -%.o: %.cpp - $(CXX) $(CXXFLAGS) $(CPPFLAGS) -o $@ -c $< +TARGET_NORC = yes -%.res: %.rc - $(RC) $(CPPFLAGS) -o $@ -i $< +TARGET_CFLAGS = -fexceptions -g -O0 -DWIN32 -D_DEBUG -D_WINDOWS -D_MBCS -W -D__USE_W32API + +TARGET_CPPFLAGS = -fexceptions -g -O0 -DWIN32 -D_DEBUG -D_WINDOWS -D_MBCS -W -D__USE_W32API -SOURCE_FILES= \ - Demo_WM_ERASEBKGND.cpp +TARGET_SDKLIBS = \ + kernel32.a \ + user32.a \ + gdi32.a -HEADER_FILES= +TARGET_OBJECTS = \ + wm_erasebkgnd.o -RESOURCE_FILES= +include $(PATH_TO_TOP)/rules.mak -SRCS=$(SOURCE_FILES) $(HEADER_FILES) $(RESOURCE_FILES) +include $(TOOLS_PATH)/helper.mk -OBJS=$(patsubst %.rc,%.res,$(patsubst %.cpp,%.o,$(patsubst %.c,%.o,$(filter %.c %.cpp %.rc,$(SRCS))))) - -$(TARGET): $(OBJS) - $(LD) $(LDFLAGS) -o $@ $(OBJS) $(LIBS) - -.PHONY: clean -clean: - del $(OBJS) $(TARGET) Proj_Demo_WM_ERASEBKGND.dep - -.PHONY: depends -depends: - -$(CXX) $(CXXFLAGS) $(CPPFLAGS) -MM $(filter %.c %.cpp,$(SRCS)) > Proj_Demo_WM_ERASEBKGND.dep - --include Proj_Demo_WM_ERASEBKGND.dep +# overide LD_CC to use g++ for linking of the executable +LD_CC = $(CXX) +# EOF diff --git a/apps/tests/wm_erasebkgnd/Demo_WM_ERASEBKGND.cpp b/apps/tests/wm_erasebkgnd/wm_erasebkgnd.cpp similarity index 100% rename from apps/tests/wm_erasebkgnd/Demo_WM_ERASEBKGND.cpp rename to apps/tests/wm_erasebkgnd/wm_erasebkgnd.cpp diff --git a/apps/tests/wm_paint/.cvsignore b/apps/tests/wm_paint/.cvsignore new file mode 100644 index 0000000..d63774a --- /dev/null +++ b/apps/tests/wm_paint/.cvsignore @@ -0,0 +1,6 @@ +*.o +*.d +*.exe +*.coff +*.sym +*.map diff --git a/apps/tests/wm_paint/wm_paint.c b/apps/tests/wm_paint/wm_paint.c index d0d035d..7347848 100644 --- a/apps/tests/wm_paint/wm_paint.c +++ b/apps/tests/wm_paint/wm_paint.c @@ -24,6 +24,7 @@ LRESULT CALLBACK MainWndProc(HWND HWnd, UINT Msg, WPARAM WParam, int APIENTRY WinMain(HINSTANCE HInstance, HINSTANCE HPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { + MSG msg; WNDCLASS wc; memset(&wc, 0, sizeof(WNDCLASS)); @@ -47,7 +48,6 @@ int APIENTRY WinMain(HINSTANCE HInstance, HINSTANCE HPrevInstance, ShowWindow(HWnd, nCmdShow); UpdateWindow(HWnd); - MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); @@ -63,17 +63,20 @@ int APIENTRY WinMain(HINSTANCE HInstance, HINSTANCE HPrevInstance, LRESULT CALLBACK MainWndProc(HWND HWnd, UINT Msg, WPARAM WParam, LPARAM LParam) { + const char* text = "Persistent Text"; + switch (Msg) { case WM_PAINT: { // determine the invalidated area of the window - RECT RUpdate; + RECT RUpdate; + HDC Hdc; GetUpdateRect(HWnd, &RUpdate, NULL); // grab a handle to our window's // common display device context - HDC Hdc = GetDC(HWnd); + Hdc = GetDC(HWnd); #if 0 try #endif @@ -93,7 +96,6 @@ LRESULT CALLBACK MainWndProc(HWND HWnd, UINT Msg, WPARAM WParam, FillRect(Hdc, &RClient, NULL); // render the persistent text - const char* text = "Persistent Text"; SetTextColor(Hdc, PALETTERGB(0, 0, 255)); DrawText(Hdc, text, strlen(text), &RClient, DT_CENTER | DT_VCENTER | DT_SINGLELINE); diff --git a/apps/testsets/loadlib/.cvsignore b/apps/testsets/loadlib/.cvsignore index bd2c3a8..5805bef 100644 --- a/apps/testsets/loadlib/.cvsignore +++ b/apps/testsets/loadlib/.cvsignore @@ -7,3 +7,4 @@ *.dsw *.ncb *.opt +*.map diff --git a/apps/testsets/msvcrt/fileio/.cvsignore b/apps/testsets/msvcrt/fileio/.cvsignore index 7e87816..d63774a 100644 --- a/apps/testsets/msvcrt/fileio/.cvsignore +++ b/apps/testsets/msvcrt/fileio/.cvsignore @@ -3,3 +3,4 @@ *.exe *.coff *.sym +*.map diff --git a/apps/utils/Makefile b/apps/utils/Makefile index 6d83f56..cf88d9f 100644 --- a/apps/utils/Makefile +++ b/apps/utils/Makefile @@ -9,7 +9,7 @@ include $(PATH_TO_TOP)/rules.mak # Console system utilities # cabman cat net objdir partinfo pice ps sc stats -UTIL_APPS = cat objdir partinfo sc stats tickcount +UTIL_APPS = cat objdir partinfo pnpdump sc stats tickcount consw UTIL_NET_APPS = diff --git a/apps/utils/cabman/.cvsignore b/apps/utils/cabman/.cvsignore index 7e87816..d63774a 100644 --- a/apps/utils/cabman/.cvsignore +++ b/apps/utils/cabman/.cvsignore @@ -3,3 +3,4 @@ *.exe *.coff *.sym +*.map diff --git a/apps/utils/cat/.cvsignore b/apps/utils/cat/.cvsignore index 7e87816..d63774a 100644 --- a/apps/utils/cat/.cvsignore +++ b/apps/utils/cat/.cvsignore @@ -3,3 +3,4 @@ *.exe *.coff *.sym +*.map diff --git a/apps/utils/consw/.cvsignore b/apps/utils/consw/.cvsignore new file mode 100644 index 0000000..2bb090a --- /dev/null +++ b/apps/utils/consw/.cvsignore @@ -0,0 +1,7 @@ +consw.exe +consw.nostrip.exe +consw.sym +consw.coff +*.d +*.o +*.map diff --git a/apps/utils/consw/consw.c b/apps/utils/consw/consw.c new file mode 100644 index 0000000..b63045a --- /dev/null +++ b/apps/utils/consw/consw.c @@ -0,0 +1,29 @@ +/* $Id$ + * + * DESCRIPTION: Console mode switcher + * PROGRAMMER: Art Yerkes + * REVISIONS + * 2003-07-26 (arty) + */ + +#include +#include +#include +#include +#include + +void STDCALL SetConsoleHardwareState( HANDLE conhandle, + DWORD flags, + DWORD state ); + +int main(int argc, char* argv[]) +{ + if( argc > 1 ) { + SetConsoleHardwareState( GetStdHandle( STD_INPUT_HANDLE ), + 0, + !strcmp( argv[1], "hw" ) ); + } +} + + +/* EOF */ diff --git a/apps/utils/consw/makefile b/apps/utils/consw/makefile new file mode 100644 index 0000000..c7a8058 --- /dev/null +++ b/apps/utils/consw/makefile @@ -0,0 +1,21 @@ +# $Id$ + +PATH_TO_TOP = ../../.. + +TARGET_NORC = yes + +TARGET_TYPE = program + +TARGET_APPTYPE = console + +TARGET_NAME = consw + +TARGET_SDKLIBS = ntdll.a kernel32.a + +TARGET_OBJECTS = $(TARGET_NAME).o + +include $(PATH_TO_TOP)/rules.mak + +include $(TOOLS_PATH)/helper.mk + +# EOF diff --git a/apps/utils/consw/runprg.bat b/apps/utils/consw/runprg.bat new file mode 100644 index 0000000..989cf85 --- /dev/null +++ b/apps/utils/consw/runprg.bat @@ -0,0 +1,5 @@ +@echo off +rem Turn off cosole, run a program, turn console on +\reactos\bin\consw sw +"%1" "%2" "%3" "%4" "%5" "%6" "%7" "%8" "%9" +\reactos\bin\consw hw diff --git a/apps/utils/net/ping/.cvsignore b/apps/utils/net/ping/.cvsignore index 7e87816..d63774a 100644 --- a/apps/utils/net/ping/.cvsignore +++ b/apps/utils/net/ping/.cvsignore @@ -3,3 +3,4 @@ *.exe *.coff *.sym +*.map diff --git a/apps/utils/net/roshttpd/.cvsignore b/apps/utils/net/roshttpd/.cvsignore index 7e87816..d63774a 100644 --- a/apps/utils/net/roshttpd/.cvsignore +++ b/apps/utils/net/roshttpd/.cvsignore @@ -3,3 +3,4 @@ *.exe *.coff *.sym +*.map diff --git a/apps/utils/net/roshttpd/common/.cvsignore b/apps/utils/net/roshttpd/common/.cvsignore index 0267f61..389193a 100644 --- a/apps/utils/net/roshttpd/common/.cvsignore +++ b/apps/utils/net/roshttpd/common/.cvsignore @@ -1 +1,2 @@ -roshttpd.coff \ No newline at end of file +*.coff +*.map diff --git a/apps/utils/net/telnet/.cvsignore b/apps/utils/net/telnet/.cvsignore index 7e87816..d63774a 100644 --- a/apps/utils/net/telnet/.cvsignore +++ b/apps/utils/net/telnet/.cvsignore @@ -3,3 +3,4 @@ *.exe *.coff *.sym +*.map diff --git a/apps/utils/objdir/.cvsignore b/apps/utils/objdir/.cvsignore index 7e87816..d63774a 100644 --- a/apps/utils/objdir/.cvsignore +++ b/apps/utils/objdir/.cvsignore @@ -3,3 +3,4 @@ *.exe *.coff *.sym +*.map diff --git a/apps/utils/objdir/objdir.c b/apps/utils/objdir/objdir.c index e88cb9a..741d99a 100644 --- a/apps/utils/objdir/objdir.c +++ b/apps/utils/objdir/objdir.c @@ -75,7 +75,7 @@ StatusToName (NTSTATUS Status) return "STATUS_OBJECT_NAME_INVALID"; case STATUS_OBJECT_NAME_NOT_FOUND: return "STATUS_OBJECT_NAME_NOT_FOUND"; - case STATUS_PATH_SYNTAX_BAD: + case STATUS_OBJECT_PATH_SYNTAX_BAD: return "STATUS_PATH_SYNTAX_BAD"; case STATUS_NO_MORE_ENTRIES: return "STATUS_NO_MORE_ENTRIES"; @@ -171,8 +171,8 @@ ListDirectory ( OBJECT_ATTRIBUTES ObjectAttributes; NTSTATUS Status; HANDLE DirectoryHandle; - BYTE DirectoryEntry [MAX_DIR_ENTRY * sizeof(OBJDIR_INFORMATION)]; - POBJDIR_INFORMATION pDirectoryEntry = (POBJDIR_INFORMATION) DirectoryEntry; + BYTE DirectoryEntry [MAX_DIR_ENTRY * sizeof(DIRECTORY_BASIC_INFORMATION)]; + PDIRECTORY_BASIC_INFORMATION pDirectoryEntry = (PDIRECTORY_BASIC_INFORMATION) DirectoryEntry; ULONG Context = 0; ULONG ReturnLength = 0; ULONG EntryCount = 0; @@ -294,7 +294,7 @@ ListDirectory ( */ if (FALSE != Recurse) { - pDirectoryEntry = (POBJDIR_INFORMATION) DirectoryEntry; + pDirectoryEntry = (PDIRECTORY_BASIC_INFORMATION) DirectoryEntry; while (0 != pDirectoryEntry->ObjectTypeName.Length) { if (0 == wcscmp (L"Directory", pDirectoryEntry->ObjectTypeName.Buffer)) diff --git a/apps/utils/partinfo/.cvsignore b/apps/utils/partinfo/.cvsignore index 7e87816..d63774a 100644 --- a/apps/utils/partinfo/.cvsignore +++ b/apps/utils/partinfo/.cvsignore @@ -3,3 +3,4 @@ *.exe *.coff *.sym +*.map diff --git a/apps/utils/pice/.cvsignore b/apps/utils/pice/.cvsignore index 7e87816..d63774a 100644 --- a/apps/utils/pice/.cvsignore +++ b/apps/utils/pice/.cvsignore @@ -3,3 +3,4 @@ *.exe *.coff *.sym +*.map diff --git a/apps/utils/pice/loader/.cvsignore b/apps/utils/pice/loader/.cvsignore new file mode 100644 index 0000000..d63774a --- /dev/null +++ b/apps/utils/pice/loader/.cvsignore @@ -0,0 +1,6 @@ +*.o +*.d +*.exe +*.coff +*.sym +*.map diff --git a/apps/utils/pice/module/.cvsignore b/apps/utils/pice/module/.cvsignore new file mode 100644 index 0000000..d63774a --- /dev/null +++ b/apps/utils/pice/module/.cvsignore @@ -0,0 +1,6 @@ +*.o +*.d +*.exe +*.coff +*.sym +*.map diff --git a/apps/utils/pnpdump/.cvsignore b/apps/utils/pnpdump/.cvsignore new file mode 100644 index 0000000..d63774a --- /dev/null +++ b/apps/utils/pnpdump/.cvsignore @@ -0,0 +1,6 @@ +*.o +*.d +*.exe +*.coff +*.sym +*.map diff --git a/apps/utils/pnpdump/makefile b/apps/utils/pnpdump/makefile new file mode 100644 index 0000000..abc3e52 --- /dev/null +++ b/apps/utils/pnpdump/makefile @@ -0,0 +1,23 @@ +# $Id$ + +PATH_TO_TOP = ../../.. + +TARGET_NORC = yes + +TARGET_TYPE = program + +TARGET_APPTYPE = console + +TARGET_NAME = pnpdump + +#TARGET_CFLAGS = -fnative_struct + +TARGET_SDKLIBS = ntdll.a kernel32.a + +TARGET_OBJECTS = $(TARGET_NAME).o + +include $(PATH_TO_TOP)/rules.mak + +include $(TOOLS_PATH)/helper.mk + +# EOF diff --git a/apps/utils/pnpdump/pnpdump.c b/apps/utils/pnpdump/pnpdump.c new file mode 100644 index 0000000..d2fa4ea --- /dev/null +++ b/apps/utils/pnpdump/pnpdump.c @@ -0,0 +1,807 @@ +/* + * pnpdump - PnP BIOS information dumper + */ + +#include +#include +#include + + +typedef struct _CM_PNP_BIOS_DEVICE_NODE +{ + USHORT Size; + UCHAR Node; + ULONG ProductId; + UCHAR DeviceType[3]; + USHORT DeviceAttributes; +} PACKED CM_PNP_BIOS_DEVICE_NODE,*PCM_PNP_BIOS_DEVICE_NODE; + +typedef struct _CM_PNP_BIOS_INSTALLATION_CHECK +{ + UCHAR Signature[4]; // $PnP (ascii) + UCHAR Revision; + UCHAR Length; + USHORT ControlField; + UCHAR Checksum; + ULONG EventFlagAddress; // Physical address + USHORT RealModeEntryOffset; + USHORT RealModeEntrySegment; + USHORT ProtectedModeEntryOffset; + ULONG ProtectedModeCodeBaseAddress; + ULONG OemDeviceId; + USHORT RealModeDataBaseAddress; + ULONG ProtectedModeDataBaseAddress; +} PACKED CM_PNP_BIOS_INSTALLATION_CHECK, *PCM_PNP_BIOS_INSTALLATION_CHECK; + +typedef struct _PNP_ID_NAME_ +{ + char *PnpId; + char *DeviceName; +} PNP_ID_NAME, *PPNP_ID_NAME; + + +static char Hex[] = "0123456789ABCDEF"; + +static PNP_ID_NAME PnpName[] = +{ + /* Interrupt Controllers */ + {"PNP0000", "AT Interrupt Controller"}, + {"PNP0001", "EISA Interrupt Controller"}, + {"PNP0002", "MCA Interrupt Controller"}, + {"PNP0003", "APIC"}, + {"PNP0004", "Cyrix SLiC MP Interrupt Controller"}, + + /* Timers */ + {"PNP0100", "AT Timer"}, + {"PNP0101", "EISA Timer"}, + {"PNP0102", "MCA Timer"}, + + /* DMA Controllers */ + {"PNP0200", "AT DMA Controller"}, + {"PNP0201", "EISA DMA Controller"}, + {"PNP0202", "MCA DMA Controller"}, + + /* Keyboards */ + {"PNP0300", "IBM PC/XT Keyboard (83 keys)"}, + {"PNP0301", "IBM PC/AT Keyboard (86 keys)"}, + {"PNP0302", "IBM PC/XT Keyboard (84 keys)"}, + {"PNP0303", "IBM Enhanced (101/102 keys)"}, + {"PNP0304", "Olivetti Keyboard (83 keys)"}, + {"PNP0305", "Olivetti Keyboard (102 keys)"}, + {"PNP0306", "Olivetti Keyboard (86 keys)"}, + {"PNP0307", "Microsoft Windows(R) Keyboard"}, + {"PNP0308", "General Input Device Emulation Interface (GIDEI) legacy"}, + {"PNP0309", "Olivetti Keyboard (A101/102 key)"}, + {"PNP030A", "AT&T 302 keyboard"}, + {"PNP030B", "Reserved by Microsoft"}, + {"PNP0320", "Japanese 101-key keyboard"}, + {"PNP0321", "Japanese AX keyboard"}, + {"PNP0322", "Japanese 106-key keyboard A01"}, + {"PNP0323", "Japanese 106-key keyboard 002/003"}, + {"PNP0324", "Japanese 106-key keyboard 001"}, + {"PNP0325", "Japanese Toshiba Desktop keyboard"}, + {"PNP0326", "Japanese Toshiba Laptop keyboard"}, + {"PNP0327", "Japanese Toshiba Notebook keyboard"}, + {"PNP0340", "Korean 84-key keyboard"}, + {"PNP0341", "Korean 86-key keyboard"}, + {"PNP0342", "Korean Enhanced keyboard"}, + {"PNP0343", "Korean Enhanced keyboard 101b"}, + {"PNP0343", "Korean Enhanced keyboard 101c"}, + {"PNP0344", "Korean Enhanced keyboard 103"}, + + /* Parallel Ports */ + {"PNP0400", "Standard LPT printer port"}, + {"PNP0401", "ECP printer port"}, + + /* Serial Ports */ + {"PNP0500", "Standard PC COM port"}, + {"PNP0501", "16550A-compatible COM port"}, + {"PNP0510", "Generic IRDA-compatible port"}, + + /* Harddisk Controllers */ + {"PNP0600", "Generic ESDI/ATA/IDE harddisk controller"}, + {"PNP0601", "Plus Hardcard II"}, + {"PNP0602", "Plus Hardcard IIXL/EZ"}, + {"PNP0603", "Generic IDE supporting Microsoft Device Bay Specification"}, + + /* Floppy Controllers */ + {"PNP0700", "PC standard floppy disk controller"}, + {"PNP0701", "Standard floppy controller supporting MS Device Bay Specification"}, + + /* obsolete devices */ + {"PNP0800", "Microsoft Sound System compatible device"}, + + /* Display Adapters */ + {"PNP0900", "VGA Compatible"}, + {"PNP0901", "Video Seven VRAM/VRAM II/1024i"}, + {"PNP0902", "8514/A Compatible"}, + {"PNP0903", "Trident VGA"}, + {"PNP0904", "Cirrus Logic Laptop VGA"}, + {"PNP0905", "Cirrus Logic VGA"}, + {"PNP0906", "Tseng ET4000"}, + {"PNP0907", "Western Digital VGA"}, + {"PNP0908", "Western Digital Laptop VGA"}, + {"PNP0909", "S3 Inc. 911/924"}, + {"PNP090A", "ATI Ultra Pro/Plus (Mach 32)"}, + {"PNP090B", "ATI Ultra (Mach 8)"}, + {"PNP090C", "XGA Compatible"}, + {"PNP090D", "ATI VGA Wonder"}, + {"PNP090E", "Weitek P9000 Graphics Adapter"}, + {"PNP090F", "Oak Technology VGA"}, + {"PNP0910", "Compaq QVision"}, + {"PNP0911", "XGA/2"}, + {"PNP0912", "Tseng Labs W32/W32i/W32p"}, + {"PNP0913", "S3 Inc. 801/928/964"}, + {"PNP0914", "Cirrus Logic 5429/5434 (memory mapped)"}, + {"PNP0915", "Compaq Advanced VGA (AVGA)"}, + {"PNP0916", "ATI Ultra Pro Turbo (Mach64)"}, + {"PNP0917", "Reserved by Microsoft"}, + {"PNP0918", "Matrox MGA"}, + {"PNP0919", "Compaq QVision 2000"}, + {"PNP091A", "Tseng W128"}, + {"PNP0930", "Chips & Technologies Super VGA"}, + {"PNP0931", "Chips & Technologies Accelerator"}, + {"PNP0940", "NCR 77c22e Super VGA"}, + {"PNP0941", "NCR 77c32blt"}, + {"PNP09FF", "Plug and Play Monitors (VESA DDC)"}, + + /* Peripheral Buses */ + {"PNP0A00", "ISA Bus"}, + {"PNP0A01", "EISA Bus"}, + {"PNP0A02", "MCA Bus"}, + {"PNP0A03", "PCI Bus"}, + {"PNP0A04", "VESA/VL Bus"}, + {"PNP0A05", "Generic ACPI Bus"}, + {"PNP0A06", "Generic ACPI Extended-IO Bus (EIO bus)"}, + + /* System devices */ + {"PNP0800", "AT-style speaker sound"}, + {"PNP0B00", "AT Real-Time Clock"}, + {"PNP0C00", "Plug and Play BIOS (only created by the root enumerator)"}, + {"PNP0C01", "System Board"}, + {"PNP0C02", "General Plug and Play motherboard registers."}, + {"PNP0C03", "Plug and Play BIOS Event Notification Interrupt"}, + {"PNP0C04", "Math Coprocessor"}, + {"PNP0C05", "APM BIOS (Version independent)"}, + {"PNP0C06", "Reserved for identification of early Plug and Play BIOS implementation"}, + {"PNP0C07", "Reserved for identification of early Plug and Play BIOS implementation"}, + {"PNP0C08", "ACPI system board hardware"}, + {"PNP0C09", "ACPI Embedded Controller"}, + {"PNP0C0A", "ACPI Control Method Battery"}, + {"PNP0C0B", "ACPI Fan"}, + {"PNP0C0C", "ACPI power button device"}, + {"PNP0C0D", "ACPI lid device"}, + {"PNP0C0E", "ACPI sleep button device"}, + {"PNP0C0F", "PCI interrupt link device"}, + {"PNP0C10", "ACPI system indicator device"}, + {"PNP0C11", "ACPI thermal zone"}, + {"PNP0C12", "Device Bay Controller"}, + + /* PCMCIA Controllers */ + {"PNP0E00", "Intel 82365-Compatible PCMCIA Controller"}, + {"PNP0E01", "Cirrus Logic CL-PD6720 PCMCIA Controller"}, + {"PNP0E02", "VLSI VL82C146 PCMCIA Controller"}, + {"PNP0E03", "Intel 82365-compatible CardBus controller"}, + + /* Mice */ + {"PNP0F00", "Microsoft Bus Mouse"}, + {"PNP0F01", "Microsoft Serial Mouse"}, + {"PNP0F02", "Microsoft InPort Mouse"}, + {"PNP0F03", "Microsoft PS/2-style Mouse"}, + {"PNP0F04", "Mouse Systems Mouse"}, + {"PNP0F05", "Mouse Systems 3-Button Mouse (COM2)"}, + {"PNP0F06", "Genius Mouse (COM1)"}, + {"PNP0F07", "Genius Mouse (COM2)"}, + {"PNP0F08", "Logitech Serial Mouse"}, + {"PNP0F09", "Microsoft BallPoint Serial Mouse"}, + {"PNP0F0A", "Microsoft Plug and Play Mouse"}, + {"PNP0F0B", "Microsoft Plug and Play BallPoint Mouse"}, + {"PNP0F0C", "Microsoft-compatible Serial Mouse"}, + {"PNP0F0D", "Microsoft-compatible InPort-compatible Mouse"}, + {"PNP0F0E", "Microsoft-compatible PS/2-style Mouse"}, + {"PNP0F0F", "Microsoft-compatible Serial BallPoint-compatible Mouse"}, + {"PNP0F10", "Texas Instruments QuickPort Mouse"}, + {"PNP0F11", "Microsoft-compatible Bus Mouse"}, + {"PNP0F12", "Logitech PS/2-style Mouse"}, + {"PNP0F13", "PS/2 Port for PS/2-style Mice"}, + {"PNP0F14", "Microsoft Kids Mouse"}, + {"PNP0F15", "Logitech bus mouse"}, + {"PNP0F16", "Logitech SWIFT device"}, + {"PNP0F17", "Logitech-compatible serial mouse"}, + {"PNP0F18", "Logitech-compatible bus mouse"}, + {"PNP0F19", "Logitech-compatible PS/2-style Mouse"}, + {"PNP0F1A", "Logitech-compatible SWIFT Device"}, + {"PNP0F1B", "HP Omnibook Mouse"}, + {"PNP0F1C", "Compaq LTE Trackball PS/2-style Mouse"}, + {"PNP0F1D", "Compaq LTE Trackball Serial Mouse"}, + {"PNP0F1E", "Microsoft Kids Trackball Mouse"}, + {"PNP0F1F", "Reserved by Microsoft Input Device Group"}, + {"PNP0F20", "Reserved by Microsoft Input Device Group"}, + {"PNP0F21", "Reserved by Microsoft Input Device Group"}, + {"PNP0F22", "Reserved by Microsoft Input Device Group"}, + {"PNP0F23", "Reserved by Microsoft Input Device Group"}, + {"PNP0FFF", "Reserved by Microsoft Systems"}, + + /* List Terminator */ + {NULL, NULL} +}; + + +/* FUNCTIONS ****************************************************************/ + +static char * +GetDeviceName(char *PnpId) +{ + PPNP_ID_NAME IdName; + + IdName = PnpName; + while (IdName->PnpId != NULL) + { + if (!strcmp(IdName->PnpId, PnpId)) + return IdName->DeviceName; + + IdName++; + } + + return "Unknown Device"; +} + + +LONG +GetPnpKey(PHKEY PnpKey) +{ + LONG lError; + char szBuffer[80]; + HKEY hAdapterKey; + HKEY hBusKey; + DWORD dwBus; + DWORD dwType; + DWORD dwSize; + + *PnpKey = 0; + + lError = RegOpenKey(HKEY_LOCAL_MACHINE, + "HARDWARE\\DESCRIPTION\\System\\MultifunctionAdapter", + &hAdapterKey); + if (lError != ERROR_SUCCESS) + return 0; + + /* Enumerate buses */ + for (dwBus = 0; ; dwBus++) + { + sprintf(szBuffer, "%lu", dwBus); + + lError = RegOpenKey(hAdapterKey, + szBuffer, + &hBusKey); + if (lError != ERROR_SUCCESS) + { + RegCloseKey(hAdapterKey); + return lError; + } + + dwSize = 80; + lError = RegQueryValueEx(hBusKey, + "Identifier", + NULL, + &dwType, + szBuffer, + &dwSize); + if (lError != ERROR_SUCCESS) + { + RegCloseKey(hBusKey); + RegCloseKey(hAdapterKey); + return lError; + } + + if (dwType == REG_SZ && stricmp(szBuffer, "pnp bios") == 0) + { + *PnpKey = hBusKey; + RegCloseKey(hAdapterKey); + return ERROR_SUCCESS; + } + + RegCloseKey(hBusKey); + } + + return 1; +} + + +static VOID +PnpDecodeIrq(unsigned char *Ptr) +{ + USHORT IrqMask; + int i; + + IrqMask = *Ptr; + Ptr++; + IrqMask |= (*Ptr << 8); + + printf(" IRQs:"); + + for (i = 0; i < 16; i++) + { + if (IrqMask & (1 << i)) + { + printf(" %u", i); + } + } + + printf("\n"); +} + + +static VOID +PnpDecodeDma(unsigned char *Ptr) +{ + unsigned char DmaChannel; + unsigned char DmaStatus; + int i; + + DmaChannel = *Ptr; + Ptr++; + DmaStatus = *Ptr; + + printf(" DMAs:"); + + for (i = 0; i < 8; i++) + { + if (DmaChannel & (1 << i)) + { + printf(" %u", i); + } + } + + printf("\n"); +} + + +static VOID +PnpDecodeIoPort(unsigned char *Ptr) +{ + USHORT MinBase; + USHORT MaxBase; + UCHAR Align; + UCHAR Length; + + // Info = *Ptr; + Ptr++; + MinBase = *Ptr; + Ptr++; + MinBase += (*Ptr << 8); + Ptr++; + MaxBase = *Ptr; + Ptr++; + MaxBase += (*Ptr << 8); + Ptr++; + Align = *Ptr; + Ptr++; + Length = *Ptr; + + printf(" I/O Port descriptor\n"); + printf(" MinBase 0x%x MaxBase 0x%x Align %u Length %u\n", + MinBase, MaxBase, Align, Length); +} + + +static VOID +PnpDecodeFixedIoPort(unsigned char *Ptr) +{ + USHORT IoPort; + UCHAR Length; + + IoPort = *Ptr; + Ptr++; + IoPort += (*Ptr << 8); + Ptr++; + Length = *Ptr; + + printf(" Fixed I/O Port descriptor\n"); + printf(" PortBase 0x%hx Length 0x%x\n", + IoPort, Length); + +#if 0 + if (Length == 1) + { + printf(" Fixed location I/O Port descriptor: 0x%x\n", + IoPort); + } + else + { + printf(" Fixed location I/O Port descriptor: 0x%x - 0x%x\n", + IoPort, + IoPort + Length - 1); + } +#endif +} + + +static VOID +PnpDecodeMemory16(unsigned char *Ptr) +{ + USHORT DescLength; + UCHAR Info; + USHORT MinBase; + USHORT MaxBase; + USHORT Align; + USHORT Length; + + Info = *Ptr; + Ptr++; + + MinBase = *Ptr; + Ptr++; + MinBase += (*Ptr << 8); + Ptr++; + + MaxBase = *Ptr; + Ptr++; + MaxBase += (*Ptr << 8); + Ptr++; + + Align = *Ptr; + Ptr++; + Align += (*Ptr << 8); + Ptr++; + + Length = *Ptr; + Ptr++; + Length += (*Ptr << 8); + + printf(" 16-Bit memory range descriptor\n"); + printf(" MinBase 0x%hx MaxBase 0x%hx Align 0x%hx Length 0x%hx Flags 0x%02x\n", + MinBase, MaxBase, Align,Length, Info); +} + + +static VOID +PnpDecodeMemory32(unsigned char *Ptr) +{ + USHORT DescLength; + UCHAR Info; + ULONG MinBase; + ULONG MaxBase; + ULONG Align; + ULONG Length; + + Info = *Ptr; + Ptr++; + + MinBase = *Ptr; + Ptr++; + MinBase += (*Ptr << 8); + Ptr++; + MinBase += (*Ptr << 16); + Ptr++; + MinBase += (*Ptr << 24); + Ptr++; + + MaxBase = *Ptr; + Ptr++; + MaxBase += (*Ptr << 8); + Ptr++; + MaxBase += (*Ptr << 16); + Ptr++; + MaxBase += (*Ptr << 24); + Ptr++; + + Align = *Ptr; + Ptr++; + Align += (*Ptr << 8); + Ptr++; + Align += (*Ptr << 16); + Ptr++; + Align += (*Ptr << 24); + Ptr++; + + Length = *Ptr; + Ptr++; + Length += (*Ptr << 8); + Ptr++; + Length += (*Ptr << 16); + Ptr++; + Length += (*Ptr << 24); + + printf(" 32-Bit memory range descriptor\n"); + printf(" MinBase 0x%lx MaxBase 0x%lx Align 0x%lx Length 0x%lx Flags 0x%02x\n", + MinBase, MaxBase, Align,Length, Info); +} + + +static VOID +PnpDecodeFixedMemory(unsigned char *Ptr) +{ + USHORT DescLength; + UCHAR Info; + ULONG Base; + ULONG Length; + + Info = *Ptr; + Ptr++; + + Base = *Ptr; + Ptr++; + Base += (*Ptr << 8); + Ptr++; + Base += (*Ptr << 16); + Ptr++; + Base += (*Ptr << 24); + Ptr++; + + Length = *Ptr; + Ptr++; + Length += (*Ptr << 8); + Ptr++; + Length += (*Ptr << 16); + Ptr++; + Length += (*Ptr << 24); + + printf(" 32-Bit fixed location memory range descriptor\n"); + printf(" Base 0x%lx Length 0x%lx Flags 0x%02x\n", + Base, Length, Info); +} + + +void PrintDeviceData (PCM_PNP_BIOS_DEVICE_NODE DeviceNode) +{ + unsigned char PnpId[8]; + unsigned char *Ptr; + unsigned int TagSize; + unsigned int TagType; + + unsigned char Id[4]; + + printf ("Node: %x Size %hu (0x%hx)\n", + DeviceNode->Node, + DeviceNode->Size, + DeviceNode->Size); + + memcpy(Id, &DeviceNode->ProductId, 4); + + PnpId[0] = ((Id[0] >> 2) & 0x1F) + 0x40; + PnpId[1] = ((Id[0] << 3) & 0x18) + + ((Id[1] >> 5) & 0x07) + 0x40; + PnpId[2] = (Id[1] & 0x1F) + 0x40; + + PnpId[3] = Hex[(Id[2] >> 4) & 0xF]; + PnpId[4] = Hex[Id[2] & 0x0F]; + + PnpId[5] = Hex[(Id[3] >> 4) & 0x0F]; + PnpId[6] = Hex[Id[3] & 0x0F]; + PnpId[7] = 0; + + printf(" '%s' (%s)\n", + PnpId, GetDeviceName(PnpId)); + + if (DeviceNode->Size > sizeof(CM_PNP_BIOS_DEVICE_NODE)) + { + Ptr = (unsigned char *)(DeviceNode + 1); + while (TRUE) + { + if (*Ptr & 0x80) + { + TagType = *Ptr & 0x7F; + Ptr++; + TagSize = *Ptr; + Ptr++; + TagSize += (*Ptr << 16); + Ptr++; + + + switch (TagType) + { + case 1: + PnpDecodeMemory16(Ptr); + break; + + case 5: + PnpDecodeMemory32(Ptr); + break; + + case 6: + PnpDecodeFixedMemory(Ptr); + break; + + default: + printf(" Large tag: type %u size %u\n", + TagType, + TagSize); + break; + } + } + else + { + TagType = (*Ptr >> 3) & 0x0F; + TagSize = *Ptr & 0x07; + Ptr++; + + switch (TagType) + { + case 2: + printf(" Logical device ID\n"); + break; + + case 3: + printf(" Compatible device ID\n"); + break; + + case 4: + PnpDecodeIrq(Ptr); + break; + + case 5: + PnpDecodeDma(Ptr); + break; + + case 8: + PnpDecodeIoPort(Ptr); + break; + + case 9: + PnpDecodeFixedIoPort(Ptr); + break; + + case 0x0F: /* end tag */ + break; + + default: + printf(" Small tag: type %u size %u\n", + TagType, + TagSize); + break; + } + + /* end tag */ + if (TagType == 0x0F) + break; + } + + Ptr = Ptr + TagSize; + } + } +} + + +int main (int argc, char *argv[]) +{ + LONG lError; + HKEY hPnpKey; + DWORD dwType; + DWORD dwSize; + DWORD i; + PCM_FULL_RESOURCE_DESCRIPTOR lpBuffer; + PCM_PNP_BIOS_INSTALLATION_CHECK lpPnpInst; + PCM_PNP_BIOS_DEVICE_NODE lpDevNode; + + DWORD dwDataSize, dwResourceSize; + + hPnpKey = 0; + + lError = GetPnpKey(&hPnpKey); + if (lError != ERROR_SUCCESS) + { + printf("Failed to get PnP-BIOS key\n"); + return 0; + } + + if (hPnpKey != 0) + { + printf("Found PnP-BIOS key\n"); + } + + /* Allocate buffer */ + dwSize = 1024; + lpBuffer = malloc(dwSize); + + lError = RegQueryValueEx(hPnpKey, + "Configuration Data", + NULL, + &dwType, + (LPSTR)lpBuffer, + &dwSize); + if (lError != ERROR_SUCCESS) + { + if (lError == ERROR_MORE_DATA) + { + printf("Need to resize buffer to %lu\n", dwSize); + + } + + printf("Failed to read 'Configuration Data' value\n"); + free (lpBuffer); + RegCloseKey(hPnpKey); + return 0; + } + +// printf ("Data size: %lu\n", dwSize); + + RegCloseKey(hPnpKey); + +// printf("Resource count %lu\n", lpBuffer->PartialResourceList.Count); + + if (lpBuffer->PartialResourceList.Count == 0) + { + printf("Invalid resource count!\n"); + free (lpBuffer); + return 0; + } + +// printf("lpBuffer %p\n", lpBuffer); + + dwResourceSize = lpBuffer->PartialResourceList.PartialDescriptors[0].u.DeviceSpecificData.DataSize; +// printf("ResourceSize: %lu\n", dwResourceSize); + + lpPnpInst = (PCM_PNP_BIOS_INSTALLATION_CHECK) + ((DWORD)(&lpBuffer->PartialResourceList.PartialDescriptors[0]) + + sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR)); + +// printf("lpPnpInst %p\n", lpPnpInst); + + printf("Signature '%.4s'\n", lpPnpInst->Signature); + if (strncmp(lpPnpInst->Signature, "$PnP", 4)) + { + printf("Error: Invalid PnP signature\n"); + free(lpBuffer); + return 0; + } + +// printf("InstCheck length: %lu\n", lpPnpInst->Length); + + dwDataSize = sizeof(CM_PNP_BIOS_INSTALLATION_CHECK); + lpDevNode = (PCM_PNP_BIOS_DEVICE_NODE)((DWORD)lpPnpInst + sizeof(CM_PNP_BIOS_INSTALLATION_CHECK)); + + if (lpDevNode->Size == 0) + { + printf("Error: Device node size is zero!\n"); + return 0; + } + +#if 0 + printf ("Node: %x Size %hu (0x%hx)\n", + lpDevNode->Node, + lpDevNode->Size, + lpDevNode->Size); + + printf("Done.\n"); +return 0; +#endif + + + while (dwDataSize < dwResourceSize) + { + if (lpDevNode->Size == 0) + break; + + printf ("Node: %x Size %hu (0x%hx)\n", + lpDevNode->Node, + lpDevNode->Size, + lpDevNode->Size); + + dwDataSize += lpDevNode->Size; + lpDevNode = (PCM_PNP_BIOS_DEVICE_NODE)((DWORD)lpDevNode + lpDevNode->Size); + } + + printf ("\n Press any key...\n"); + getch(); + + dwDataSize = sizeof(CM_PNP_BIOS_INSTALLATION_CHECK); + lpDevNode = (PCM_PNP_BIOS_DEVICE_NODE)((DWORD)lpPnpInst + sizeof(CM_PNP_BIOS_INSTALLATION_CHECK)); + + while (dwDataSize < dwResourceSize) + { + PrintDeviceData (lpDevNode); + + printf ("\n Press any key...\n"); + getch(); + + dwDataSize += lpDevNode->Size; + lpDevNode = (PCM_PNP_BIOS_DEVICE_NODE)((DWORD)lpDevNode + lpDevNode->Size); + } + + free (lpBuffer); + + return 0; +} + +/* EOF */ diff --git a/apps/utils/ps/.cvsignore b/apps/utils/ps/.cvsignore index 7e87816..d63774a 100644 --- a/apps/utils/ps/.cvsignore +++ b/apps/utils/ps/.cvsignore @@ -3,3 +3,4 @@ *.exe *.coff *.sym +*.map diff --git a/apps/utils/sc/.cvsignore b/apps/utils/sc/.cvsignore index efa8e8d..627cda5 100644 --- a/apps/utils/sc/.cvsignore +++ b/apps/utils/sc/.cvsignore @@ -5,3 +5,4 @@ sc.nostrip.exe sc.coff sc.sym sc.map +*.map diff --git a/apps/utils/stats/.cvsignore b/apps/utils/stats/.cvsignore index 7e87816..d63774a 100644 --- a/apps/utils/stats/.cvsignore +++ b/apps/utils/stats/.cvsignore @@ -3,3 +3,4 @@ *.exe *.coff *.sym +*.map diff --git a/apps/utils/stats/stats.c b/apps/utils/stats/stats.c index 4566964..e60af40 100644 --- a/apps/utils/stats/stats.c +++ b/apps/utils/stats/stats.c @@ -229,8 +229,8 @@ ReadLine() return FALSE; i = 0; - while (((j = CurrentOffset + i) < FileBufferSize) && (i < sizeof (Line)) && - ((ch = FileBuffer[j]) != 0x0D)) + while ((((j = CurrentOffset + i) < FileBufferSize) && (i < sizeof (Line)) && + ((ch = FileBuffer[j]) != 0x0D && (ch = FileBuffer[j]) != 0x0A))) { Line[i] = ch; i++; @@ -239,7 +239,7 @@ ReadLine() Line[i] = '\0'; LineLength = i; - if (FileBuffer[CurrentOffset + i + 1] == 0x0A) + if ((FileBuffer[CurrentOffset + i] == 0x0D) && (FileBuffer[CurrentOffset + i + 1] == 0x0A)) CurrentOffset++; CurrentOffset += i + 1; diff --git a/apps/utils/tickcount/.cvsignore b/apps/utils/tickcount/.cvsignore new file mode 100644 index 0000000..d63774a --- /dev/null +++ b/apps/utils/tickcount/.cvsignore @@ -0,0 +1,6 @@ +*.o +*.d +*.exe +*.coff +*.sym +*.map diff --git a/apps/utils/tickcount/tickcount.c b/apps/utils/tickcount/tickcount.c index c00674d..d64a515 100644 --- a/apps/utils/tickcount/tickcount.c +++ b/apps/utils/tickcount/tickcount.c @@ -71,7 +71,7 @@ void print_uptime uint64_t tick_cur = tickcount / ticks_per_slice[curslice]; uint64_t tick_residual = tickcount % ticks_per_slice[curslice]; - assert(tick_cur <= (~((unsigned)0))); + assert(tick_cur <= (~((uint64_t)0))); if(tick_residual == 0) { diff --git a/baseaddress.cfg b/baseaddress.cfg index f862809..aef7227 100644 --- a/baseaddress.cfg +++ b/baseaddress.cfg @@ -15,6 +15,7 @@ lib/ole32 TARGET_BASE=0x77a50000 lib/oleaut32 TARGET_BASE=0x76260000 lib/secur32 TARGET_BASE=0x10000000 lib/shell32 TARGET_BASE=0x77260000 +lib/syssetup TARGET_BASE=0x74A30000 lib/user32 TARGET_BASE=0x77e70000 lib/version TARGET_BASE=0x77a90000 lib/winspool TARGET_BASE=0x77800000 diff --git a/boot.bat b/boot.bat index 0fb1374..440a783 100644 --- a/boot.bat +++ b/boot.bat @@ -1 +1 @@ -loadros system32\ntoskrnl.exe system32\hal.dll /DEBUGPORT=BOCHS bootc.lst +loadros system32\ntoskrnl.exe system32\hal.dll /DEBUGPORT=BOCHS bootc.lst \ No newline at end of file diff --git a/boot.hiv b/boot.hiv deleted file mode 100644 index da41d09..0000000 --- a/boot.hiv +++ /dev/null @@ -1,46 +0,0 @@ -REGEDIT4 - -[\Registry\Machine\HARDWARE] - -[\Registry\Machine\HARDWARE\DESCRIPTION] - -[\Registry\Machine\HARDWARE\DESCRIPTION\System] - -[\Registry\Machine\HARDWARE\DESCRIPTION\System\MultifunctionAdapter] - -[\Registry\Machine\HARDWARE\DESCRIPTION\System\MultifunctionAdapter\0] -"Component Information"=hex:00,00,00,00,00,00,00,00,00,00,00,00,ff,ff,ff,ff -"Identifier"="ISA" -"Configuration Data"=hex(9):01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 - -[\Registry\Machine\HARDWARE\DESCRIPTION\System\MultifunctionAdapter\0\KeyboardController] - -[\Registry\Machine\HARDWARE\DESCRIPTION\System\MultifunctionAdapter\0\KeyboardController\0] -"Component Information"=hex:28,00,00,00,00,00,00,00,00,00,00,00,ff,ff,ff,ff -"Configuration Data"=hex(9):01,00,00,00,00,00,00,00,00,00,00,00,03,00,00,00,01,\ - 01,01,00,60,00,00,00,00,00,00,00,01,00,00,00,01,01,01,00,64,00,00,00,00,00,\ - 00,00,01,00,00,00,02,00,01,00,01,00,00,00,01,00,00,00,ff,ff,ff,ff - -[\Registry\Machine\HARDWARE\DESCRIPTION\System\MultifunctionAdapter\0\KeyboardController\0\KeyboardPeripheral] - -[\Registry\Machine\HARDWARE\DESCRIPTION\System\MultifunctionAdapter\0\KeyboardController\0\KeyboardPeripheral\0] -"Component Information"=hex:28,00,00,00,00,00,00,00,00,00,00,00,ff,ff,ff,ff -"Identifier"="PCAT_ENHANCED" -"Configuration Data"=hex(9):01,00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,05,\ - 00,00,00,08,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,04,00,00,00 - -[\Registry\Machine\HARDWARE\DESCRIPTION\System\MultifunctionAdapter\0\PointerController] - -[\Registry\Machine\HARDWARE\DESCRIPTION\System\MultifunctionAdapter\0\PointerController\0] -"Component Information"=hex:20,00,00,00,00,00,00,00,00,00,00,00,ff,ff,ff,ff -"Configuration Data"=hex(9):01,00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,02,\ - 00,01,00,0c,00,00,00,0c,00,00,00,ff,ff,ff,ff - -[\Registry\Machine\HARDWARE\DESCRIPTION\System\MultifunctionAdapter\0\PointerController\0\PointerPeripheral] - -[\Registry\Machine\HARDWARE\DESCRIPTION\System\MultifunctionAdapter\0\PointerController\0\PointerPeripheral\0] -"Component Information"=hex:20,00,00,00,00,00,00,00,00,00,00,00,ff,ff,ff,ff -"Identifier"="MICROSOFT PS2 MOUSE" -"Configuration Data"=hex(9):01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 - - diff --git a/bootc.lst b/bootc.lst index 9ab90f2..84c3df3 100644 --- a/bootc.lst +++ b/bootc.lst @@ -4,4 +4,7 @@ system32\drivers\class2.sys system32\drivers\disk.sys system32\drivers\vfatfs.sys system32\config\system +system32\ansi.nls +system32\oem.nls +system32\casemap.nls * diff --git a/bootcd.bat b/bootcd.bat index b816a01..f5e0d6b 100755 --- a/bootcd.bat +++ b/bootcd.bat @@ -1,4 +1,3 @@ -@echo off set BOOTCD_DIR=..\bootcd set FREELDR_DIR=..\freeldr set ROSAPPS_DIR=..\rosapps @@ -6,14 +5,13 @@ set ROSAPPS_DIR=..\rosapps md %BOOTCD_DIR% md %BOOTCD_DIR%\disk md %BOOTCD_DIR%\disk\bootdisk -md %BOOTCD_DIR%\disk\install +md %BOOTCD_DIR%\disk\loader md %BOOTCD_DIR%\disk\reactos md %BOOTCD_DIR%\disk\reactos\system32 -md %BOOTCD_DIR%\disk\loader rem copy FreeLoader files copy /Y %FREELDR_DIR%\bootsect\isoboot.bin %BOOTCD_DIR% -copy /Y %FREELDR_DIR%\freeldr\obj\i386\setupldr.sys %BOOTCD_DIR%\disk\reactos +copy /Y %FREELDR_DIR%\freeldr\obj\i386\setupldr.sys %BOOTCD_DIR%\disk\loader copy /Y %FREELDR_DIR%\bootsect\dosmbr.bin %BOOTCD_DIR%\disk\loader copy /Y %FREELDR_DIR%\bootsect\ext2.bin %BOOTCD_DIR%\disk\loader @@ -22,20 +20,7 @@ copy /Y %FREELDR_DIR%\bootsect\fat32.bin %BOOTCD_DIR%\disk\loader copy /Y %FREELDR_DIR%\bootsect\isoboot.bin %BOOTCD_DIR%\disk\loader copy /Y %FREELDR_DIR%\freeldr\obj\i386\freeldr.sys %BOOTCD_DIR%\disk\loader -rem copy boot files -copy /Y ntoskrnl\ntoskrnl.exe %BOOTCD_DIR%\disk\reactos -copy /Y hal\halx86\hal.dll %BOOTCD_DIR%\disk\reactos -copy /Y drivers\fs\vfat\vfatfs.sys %BOOTCD_DIR%\disk\reactos -copy /Y drivers\fs\cdfs\cdfs.sys %BOOTCD_DIR%\disk\reactos -copy /Y drivers\fs\ntfs\ntfs.sys %BOOTCD_DIR%\disk\reactos -copy /Y drivers\dd\floppy\floppy.sys %BOOTCD_DIR%\disk\reactos -copy /Y drivers\dd\blue\blue.sys %BOOTCD_DIR%\disk\reactos -copy /Y drivers\input\keyboard\keyboard.sys %BOOTCD_DIR%\disk\reactos -copy /Y drivers\storage\atapi\atapi.sys %BOOTCD_DIR%\disk\reactos -copy /Y drivers\storage\scsiport\scsiport.sys %BOOTCD_DIR%\disk\reactos -copy /Y drivers\storage\cdrom\cdrom.sys %BOOTCD_DIR%\disk\reactos -copy /Y drivers\storage\disk\disk.sys %BOOTCD_DIR%\disk\reactos -copy /Y drivers\storage\class2\class2.sys %BOOTCD_DIR%\disk\reactos +rem copy setup files copy /Y lib\ntdll\ntdll.dll %BOOTCD_DIR%\disk\reactos\system32 copy /Y subsys\system\usetup\usetup.exe %BOOTCD_DIR%\disk\reactos\system32\smss.exe @@ -43,102 +28,107 @@ rem copy data files copy /Y bootdata\autorun.inf %BOOTCD_DIR%\disk copy /Y bootdata\readme.txt %BOOTCD_DIR%\disk -copy /Y bootdata\hivecls.inf %BOOTCD_DIR%\disk\install -copy /Y bootdata\hivedef.inf %BOOTCD_DIR%\disk\install -copy /Y bootdata\hivesft.inf %BOOTCD_DIR%\disk\install -copy /Y bootdata\hivesys.inf %BOOTCD_DIR%\disk\install +copy /Y bootdata\hivecls.inf %BOOTCD_DIR%\disk\reactos +copy /Y bootdata\hivedef.inf %BOOTCD_DIR%\disk\reactos +copy /Y bootdata\hivesft.inf %BOOTCD_DIR%\disk\reactos +copy /Y bootdata\hivesys.inf %BOOTCD_DIR%\disk\reactos -copy /Y bootdata\txtsetup.sif %BOOTCD_DIR%\disk\install +copy /Y bootdata\txtsetup.sif %BOOTCD_DIR%\disk\reactos rem copy install files -copy /Y ntoskrnl\ntoskrnl.exe %BOOTCD_DIR%\disk\install -copy /Y hal\halx86\hal.dll %BOOTCD_DIR%\disk\install - -copy /Y drivers\bus\acpi\acpi.sys %BOOTCD_DIR%\disk\install -copy /Y drivers\bus\isapnp\isapnp.sys %BOOTCD_DIR%\disk\install - -copy /Y drivers\dd\beep\beep.sys %BOOTCD_DIR%\disk\install -copy /Y drivers\dd\blue\blue.sys %BOOTCD_DIR%\disk\install -copy /Y drivers\dd\floppy\floppy.sys %BOOTCD_DIR%\disk\install -copy /Y drivers\dd\null\null.sys %BOOTCD_DIR%\disk\install -copy /Y drivers\dd\serial\serial.sys %BOOTCD_DIR%\disk\install -copy /Y drivers\dd\vga\display\vgaddi.dll %BOOTCD_DIR%\disk\install -copy /Y drivers\dd\vga\miniport\vgamp.sys %BOOTCD_DIR%\disk\install -copy /Y drivers\dd\videoprt\videoprt.sys %BOOTCD_DIR%\disk\install - -copy /Y drivers\fs\cdfs\cdfs.sys %BOOTCD_DIR%\disk\install -copy /Y drivers\fs\fs_rec\fs_rec.sys %BOOTCD_DIR%\disk\install -copy /Y drivers\fs\ms\msfs.sys %BOOTCD_DIR%\disk\install -copy /Y drivers\fs\mup\mup.sys %BOOTCD_DIR%\disk\install -copy /Y drivers\fs\np\npfs.sys %BOOTCD_DIR%\disk\install -copy /Y drivers\fs\ntfs\ntfs.sys %BOOTCD_DIR%\disk\install -copy /Y drivers\fs\vfat\vfatfs.sys %BOOTCD_DIR%\disk\install - -copy /Y drivers\input\keyboard\keyboard.sys %BOOTCD_DIR%\disk\install -copy /Y drivers\input\mouclass\mouclass.sys %BOOTCD_DIR%\disk\install -copy /Y drivers\input\psaux\psaux.sys %BOOTCD_DIR%\disk\install - -copy /Y drivers\lib\bzip2\unbzip2.sys %BOOTCD_DIR%\disk\install - -copy /Y drivers\net\afd\afd.sys %BOOTCD_DIR%\disk\install -copy /Y drivers\net\dd\ne2000\ne2000.sys %BOOTCD_DIR%\disk\install -copy /Y drivers\net\ndis\ndis.sys %BOOTCD_DIR%\disk\install -copy /Y drivers\net\npf\npf.sys %BOOTCD_DIR%\disk\install -copy /Y drivers\net\packet\packet.sys %BOOTCD_DIR%\disk\install -copy /Y drivers\net\tcpip\tcpip.sys %BOOTCD_DIR%\disk\install -copy /Y drivers\net\tdi\tdi.sys %BOOTCD_DIR%\disk\install - -copy /Y drivers\storage\atapi\atapi.sys %BOOTCD_DIR%\disk\install -copy /Y drivers\storage\cdrom\cdrom.sys %BOOTCD_DIR%\disk\install -copy /Y drivers\storage\class2\class2.sys %BOOTCD_DIR%\disk\install -copy /Y drivers\storage\disk\disk.sys %BOOTCD_DIR%\disk\install -copy /Y drivers\storage\scsiport\scsiport.sys %BOOTCD_DIR%\disk\install - -copy /Y lib\advapi32\advapi32.dll %BOOTCD_DIR%\disk\install -copy /Y lib\crtdll\crtdll.dll %BOOTCD_DIR%\disk\install -copy /Y lib\fmifs\fmifs.dll %BOOTCD_DIR%\disk\install -copy /Y lib\freetype\freetype.dll %BOOTCD_DIR%\disk\install -copy /Y lib\gdi32\gdi32.dll %BOOTCD_DIR%\disk\install -copy /Y lib\kernel32\kernel32.dll %BOOTCD_DIR%\disk\install -copy /Y lib\msafd\msafd.dll %BOOTCD_DIR%\disk\install -copy /Y lib\msvcrt\msvcrt.dll %BOOTCD_DIR%\disk\install -copy /Y lib\ntdll\ntdll.dll %BOOTCD_DIR%\disk\install -copy /Y lib\ole32\ole32.dll %BOOTCD_DIR%\disk\install -copy /Y lib\oleaut32\oleaut32.dll %BOOTCD_DIR%\disk\install -copy /Y lib\packet\packet.dll %BOOTCD_DIR%\disk\install -copy /Y lib\secur32\secur32.dll %BOOTCD_DIR%\disk\install -copy /Y lib\shell32\shell32.dll %BOOTCD_DIR%\disk\install -copy /Y lib\user32\user32.dll %BOOTCD_DIR%\disk\install -copy /Y lib\version\version.dll %BOOTCD_DIR%\disk\install -copy /Y lib\winedbgc\winedbgc.dll %BOOTCD_DIR%\disk\install -copy /Y lib\winmm\winmm.dll %BOOTCD_DIR%\disk\install -copy /Y lib\ws2_32\ws2_32.dll %BOOTCD_DIR%\disk\install -copy /Y lib\ws2help\ws2help.dll %BOOTCD_DIR%\disk\install -copy /Y lib\wshirda\wshirda.dll %BOOTCD_DIR%\disk\install - -copy /Y services\eventlog\eventlog.exe %BOOTCD_DIR%\disk\install -copy /Y services\rpcss\rpcss.exe %BOOTCD_DIR%\disk\install - -copy /Y subsys\csrss\csrss.exe %BOOTCD_DIR%\disk\install -copy /Y subsys\ntvdm\ntvdm.exe %BOOTCD_DIR%\disk\install -copy /Y subsys\smss\smss.exe %BOOTCD_DIR%\disk\install -copy /Y subsys\system\autochk\autochk.exe %BOOTCD_DIR%\disk\install -copy /Y subsys\system\lsass\lsass.exe %BOOTCD_DIR%\disk\install -copy /Y subsys\system\services\services.exe %BOOTCD_DIR%\disk\install -copy /Y subsys\system\cmd\cmd.exe %BOOTCD_DIR%\disk\install -copy /Y subsys\system\winlogon\winlogon.exe %BOOTCD_DIR%\disk\install -copy /Y subsys\win32k\win32k.sys %BOOTCD_DIR%\disk\install - -copy /Y media\fonts\helb____.ttf %BOOTCD_DIR%\disk\install -copy /Y media\fonts\timr____.ttf %BOOTCD_DIR%\disk\install +copy /Y ntoskrnl\ntoskrnl.exe %BOOTCD_DIR%\disk\reactos +copy /Y hal\halx86\hal.dll %BOOTCD_DIR%\disk\reactos + +copy /Y drivers\bus\acpi\acpi.sys %BOOTCD_DIR%\disk\reactos +copy /Y drivers\bus\isapnp\isapnp.sys %BOOTCD_DIR%\disk\reactos + +copy /Y drivers\dd\beep\beep.sys %BOOTCD_DIR%\disk\reactos +copy /Y drivers\dd\blue\blue.sys %BOOTCD_DIR%\disk\reactos +copy /Y drivers\dd\debugout\debugout.sys %BOOTCD_DIR%\disk\reactos +copy /Y drivers\dd\floppy\floppy.sys %BOOTCD_DIR%\disk\reactos +copy /Y drivers\dd\null\null.sys %BOOTCD_DIR%\disk\reactos +copy /Y drivers\dd\serial\serial.sys %BOOTCD_DIR%\disk\reactos +copy /Y drivers\dd\vga\display\vgaddi.dll %BOOTCD_DIR%\disk\reactos +copy /Y drivers\dd\vga\miniport\vgamp.sys %BOOTCD_DIR%\disk\reactos +copy /Y drivers\dd\videoprt\videoprt.sys %BOOTCD_DIR%\disk\reactos + +copy /Y drivers\fs\cdfs\cdfs.sys %BOOTCD_DIR%\disk\reactos +copy /Y drivers\fs\fs_rec\fs_rec.sys %BOOTCD_DIR%\disk\reactos +copy /Y drivers\fs\ms\msfs.sys %BOOTCD_DIR%\disk\reactos +copy /Y drivers\fs\mup\mup.sys %BOOTCD_DIR%\disk\reactos +copy /Y drivers\fs\np\npfs.sys %BOOTCD_DIR%\disk\reactos +copy /Y drivers\fs\ntfs\ntfs.sys %BOOTCD_DIR%\disk\reactos +copy /Y drivers\fs\vfat\vfatfs.sys %BOOTCD_DIR%\disk\reactos + +copy /Y drivers\input\keyboard\keyboard.sys %BOOTCD_DIR%\disk\reactos +copy /Y drivers\input\mouclass\mouclass.sys %BOOTCD_DIR%\disk\reactos +copy /Y drivers\input\psaux\psaux.sys %BOOTCD_DIR%\disk\reactos + +copy /Y drivers\lib\bzip2\unbzip2.sys %BOOTCD_DIR%\disk\reactos + +copy /Y drivers\net\afd\afd.sys %BOOTCD_DIR%\disk\reactos +copy /Y drivers\net\dd\ne2000\ne2000.sys %BOOTCD_DIR%\disk\reactos +copy /Y drivers\net\dd\pcnet\pcnet.sys %BOOTCD_DIR%\disk\reactos +copy /Y drivers\net\ndis\ndis.sys %BOOTCD_DIR%\disk\reactos +copy /Y drivers\net\npf\npf.sys %BOOTCD_DIR%\disk\reactos +copy /Y drivers\net\packet\packet.sys %BOOTCD_DIR%\disk\reactos +copy /Y drivers\net\tcpip\tcpip.sys %BOOTCD_DIR%\disk\reactos +copy /Y drivers\net\tdi\tdi.sys %BOOTCD_DIR%\disk\reactos + +copy /Y drivers\storage\atapi\atapi.sys %BOOTCD_DIR%\disk\reactos +copy /Y drivers\storage\cdrom\cdrom.sys %BOOTCD_DIR%\disk\reactos +copy /Y drivers\storage\class2\class2.sys %BOOTCD_DIR%\disk\reactos +copy /Y drivers\storage\disk\disk.sys %BOOTCD_DIR%\disk\reactos +copy /Y drivers\storage\scsiport\scsiport.sys %BOOTCD_DIR%\disk\reactos + +copy /Y lib\advapi32\advapi32.dll %BOOTCD_DIR%\disk\reactos +copy /Y lib\crtdll\crtdll.dll %BOOTCD_DIR%\disk\reactos +copy /Y lib\fmifs\fmifs.dll %BOOTCD_DIR%\disk\reactos +copy /Y lib\freetype\freetype.dll %BOOTCD_DIR%\disk\reactos +copy /Y lib\gdi32\gdi32.dll %BOOTCD_DIR%\disk\reactos +copy /Y lib\kernel32\kernel32.dll %BOOTCD_DIR%\disk\reactos +copy /Y lib\msafd\msafd.dll %BOOTCD_DIR%\disk\reactos +copy /Y lib\msvcrt\msvcrt.dll %BOOTCD_DIR%\disk\reactos +copy /Y lib\ntdll\ntdll.dll %BOOTCD_DIR%\disk\reactos +copy /Y lib\ole32\ole32.dll %BOOTCD_DIR%\disk\reactos +copy /Y lib\oleaut32\oleaut32.dll %BOOTCD_DIR%\disk\reactos +copy /Y lib\packet\packet.dll %BOOTCD_DIR%\disk\reactos +copy /Y lib\secur32\secur32.dll %BOOTCD_DIR%\disk\reactos +copy /Y lib\shell32\shell32.dll %BOOTCD_DIR%\disk\reactos +copy /Y lib\syssetup\syssetup.dll %BOOTCD_DIR%\disk\reactos +copy /Y lib\user32\user32.dll %BOOTCD_DIR%\disk\reactos +copy /Y lib\version\version.dll %BOOTCD_DIR%\disk\reactos +copy /Y lib\winedbgc\winedbgc.dll %BOOTCD_DIR%\disk\reactos +copy /Y lib\winmm\winmm.dll %BOOTCD_DIR%\disk\reactos +copy /Y lib\ws2_32\ws2_32.dll %BOOTCD_DIR%\disk\reactos +copy /Y lib\ws2help\ws2help.dll %BOOTCD_DIR%\disk\reactos +copy /Y lib\wshirda\wshirda.dll %BOOTCD_DIR%\disk\reactos + +copy /Y services\eventlog\eventlog.exe %BOOTCD_DIR%\disk\reactos +copy /Y services\rpcss\rpcss.exe %BOOTCD_DIR%\disk\reactos + +copy /Y subsys\csrss\csrss.exe %BOOTCD_DIR%\disk\reactos +copy /Y subsys\ntvdm\ntvdm.exe %BOOTCD_DIR%\disk\reactos +copy /Y subsys\smss\smss.exe %BOOTCD_DIR%\disk\reactos +copy /Y subsys\system\autochk\autochk.exe %BOOTCD_DIR%\disk\reactos +copy /Y subsys\system\cmd\cmd.exe %BOOTCD_DIR%\disk\reactos +copy /Y subsys\system\lsass\lsass.exe %BOOTCD_DIR%\disk\reactos +copy /Y subsys\system\services\services.exe %BOOTCD_DIR%\disk\reactos +copy /Y subsys\system\setup\setup.exe %BOOTCD_DIR%\disk\reactos +copy /Y subsys\system\winlogon\winlogon.exe %BOOTCD_DIR%\disk\reactos +copy /Y subsys\win32k\win32k.sys %BOOTCD_DIR%\disk\reactos + +rem copy media files +copy /Y media\fonts\*.ttf %BOOTCD_DIR%\disk\reactos +copy /Y media\nls\*.nls %BOOTCD_DIR%\disk\reactos rem copy test apps -copy /Y apps\tests\winhello\winhello.exe %BOOTCD_DIR%\disk\install +copy /Y apps\tests\winhello\winhello.exe %BOOTCD_DIR%\disk\reactos rem copy rosapps files -copy /Y %ROSAPPS_DIR%\games\winemine\winemine.exe %BOOTCD_DIR%\disk\install -copy /Y %ROSAPPS_DIR%\hcalc\hcalc.exe %BOOTCD_DIR%\disk\install -copy /Y %ROSAPPS_DIR%\mc\mc.exe %BOOTCD_DIR%\disk\install +copy /Y %ROSAPPS_DIR%\games\winemine\winemine.exe %BOOTCD_DIR%\disk\reactos +copy /Y %ROSAPPS_DIR%\hcalc\hcalc.exe %BOOTCD_DIR%\disk\reactos +copy /Y %ROSAPPS_DIR%\mc\mc.exe %BOOTCD_DIR%\disk\reactos rem create the reactos.iso image file tools\cdmake\cdmake -m -b %BOOTCD_DIR%\isoboot.bin %BOOTCD_DIR%\disk REACTOS %BOOTCD_DIR%\reactos.iso diff --git a/bootdata/autorun.inf b/bootdata/autorun.inf new file mode 100755 index 0000000..82b192a --- /dev/null +++ b/bootdata/autorun.inf @@ -0,0 +1,3 @@ +[autorun] +open=reactos\welcome.exe +icon=icon.ico diff --git a/bootdata/hivedef.inf b/bootdata/hivedef.inf index 3c005d7..8244d62 100644 --- a/bootdata/hivedef.inf +++ b/bootdata/hivedef.inf @@ -9,4 +9,30 @@ HKCU,"Control Panel\Appearance",,0x00000012 HKCU,"Environment",,0x00000012 +; application compatibility settings for Windows 95 +HKCU,"Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN95","MajorVersion",0x00010001,0x00000004 +HKCU,"Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN95","MinorVersion",0x00010001,0x0000000A +HKCU,"Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN95","BuildNumber",0x00010001,0x000003B6 +HKCU,"Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN95","PlatformId",0x00010001,0x00000001 +; application compatibility settings for Windows 98/ME +HKCU,"Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN98","MajorVersion",0x00010001,0x00000004 +HKCU,"Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN98","MinorVersion",0x00010001,0x00000000 +HKCU,"Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN98","BuildNumber",0x00010001,0x000008AE +HKCU,"Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN98","PlatformId",0x00010001,0x00000001 +; application compatibility settings for Windows NT 4 Service Pack 5 +HKCU,"Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\NT4SP5","MajorVersion",0x00010001,0x00000004 +HKCU,"Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\NT4SP5","MinorVersion",0x00010001,0x00000000 +HKCU,"Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\NT4SP5","BuildNumber",0x00010001,0x00000565 +HKCU,"Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\NT4SP5","PlatformId",0x00010001,0x00000002 +; application compatibility settings for Windows 2000 +HKCU,"Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN2000","MajorVersion",0x00010001,0x00000005 +HKCU,"Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN2000","MinorVersion",0x00010001,0x00000000 +HKCU,"Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN2000","BuildNumber",0x00010001,0x00000893 +HKCU,"Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN2000","PlatformId",0x00010001,0x00000002 +; application compatibility settings for Windows XP +HKCU,"Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WINXP","MajorVersion",0x00010001,0x00000005 +HKCU,"Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WINXP","MinorVersion",0x00010001,0x00000001 +HKCU,"Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WINXP","BuildNumber",0x00010001,0x00000A28 +HKCU,"Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WINXP","PlatformId",0x00010001,0x00000002 + ; EOF diff --git a/bootdata/hivesys.inf b/bootdata/hivesys.inf index 9b5bb54..5d10719 100644 --- a/bootdata/hivesys.inf +++ b/bootdata/hivesys.inf @@ -3,6 +3,10 @@ Signature = "$ReactOS$" [AddReg] +; Default computer name settings +HKLM,"SYSTEM\CurrentControlSet\Control\ComputerName",,0x00000012 +HKLM,"SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName","ComputerName",0x00000002,"COMPUTERNAME" + ; NLS Codepage settings HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","10000",0x00000000,"c_10000.nls" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","1252",0x00000000,"c_1252.nls" @@ -76,6 +80,11 @@ HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","OS",0x00020 HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","Path",0x00020000,"%SystemRoot%\bin;%SystemRoot%\system32;%SystemRoot%" HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","windir",0x00020000,"%SystemRoot%" +; Known DLLs +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","DllDirectory",0x00020000,"%SystemRoot%\system32" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","advapi32",0x00000000,"advapi32.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","kernel32",0x00000000,"kernel32.dll" + ; Pagefile settings HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management","PagingFiles",0x00010000, \ "C:\reactos\pagefile.sys" @@ -129,6 +138,13 @@ HKLM,"SYSTEM\CurrentControlSet\Services\Class2","ImagePath",0x00020000,"system32 HKLM,"SYSTEM\CurrentControlSet\Services\Class2","Start",0x00010001,0x00000000 HKLM,"SYSTEM\CurrentControlSet\Services\Class2","Type",0x00010001,0x00000001 +; Debug output driver +HKLM,"SYSTEM\CurrentControlSet\Services\DebugOut","ErrorControl",0x00010001,0x00000000 +HKLM,"SYSTEM\CurrentControlSet\Services\DebugOut","Group",0x00000000,"Debug" +HKLM,"SYSTEM\CurrentControlSet\Services\DebugOut","ImagePath",0x00020000,"system32\drivers\debugout.sys" +HKLM,"SYSTEM\CurrentControlSet\Services\DebugOut","Start",0x00010001,0x00000001 +HKLM,"SYSTEM\CurrentControlSet\Services\DebugOut","Type",0x00010001,0x00000001 + ; Disk class driver HKLM,"SYSTEM\CurrentControlSet\Services\Disk","ErrorControl",0x00010001,0x00000000 HKLM,"SYSTEM\CurrentControlSet\Services\Disk","Group",0x00000000,"SCSI Class" @@ -185,19 +201,126 @@ HKLM,"SYSTEM\CurrentControlSet\Services\Msfs","ImagePath",0x00020000,"system32\d HKLM,"SYSTEM\CurrentControlSet\Services\Msfs","Start",0x00010001,0x00000001 HKLM,"SYSTEM\CurrentControlSet\Services\Msfs","Type",0x00010001,0x00000002 -; NDIS driver +; NDIS driver - the only boot-start network driver HKLM,"SYSTEM\CurrentControlSet\Services\Ndis","ErrorControl",0x00010001,0x00000001 HKLM,"SYSTEM\CurrentControlSet\Services\Ndis","Group",0x00000000,"NDIS" HKLM,"SYSTEM\CurrentControlSet\Services\Ndis","ImagePath",0x00020000,"system32\drivers\ndis.sys" HKLM,"SYSTEM\CurrentControlSet\Services\Ndis","Start",0x00010001,0x00000001 HKLM,"SYSTEM\CurrentControlSet\Services\Ndis","Type",0x00010001,0x00000001 +; NIC drivers are like any other drivers - but no card-specific info here. bind/route/export +; should have one entry per child device object. +; Comment the networking stuff out if you don't have hte card and don't want to see errors ; NE2000 NIC driver HKLM,"SYSTEM\CurrentControlSet\Services\Ne2000","ErrorControl",0x00010001,0x00000001 HKLM,"SYSTEM\CurrentControlSet\Services\Ne2000","Group",0x00000000,"NDIS" HKLM,"SYSTEM\CurrentControlSet\Services\Ne2000","ImagePath",0x00020000,"system32\drivers\ne2000.sys" -HKLM,"SYSTEM\CurrentControlSet\Services\Ne2000","Start",0x00010001,0x00000001 +HKLM,"SYSTEM\CurrentControlSet\Services\Ne2000","Start",0x00010001,0x00000003 HKLM,"SYSTEM\CurrentControlSet\Services\Ne2000","Type",0x00010001,0x00000001 +HKLM,"SYSTEM\CurrentControlSet\Services\Ne2000","Test",0x00010001,0xbaadf00d +HKLM,"SYSTEM\CurrentControlSet\Services\Ne2000","Route",0x00000000,"Ne20001" +HKLM,"SYSTEM\CurrentControlSet\Services\Ne2000\Linkage","Bind",0x00010000,"\Device\Ne20001" +HKLM,"SYSTEM\CurrentControlSet\Services\Ne2000\Linkage","Export",0x00010000,"\Device\Ne20001" +HKLM,"SYSTEM\CurrentControlSet\Services\Ne2000\Linkage","Route",0x00010000,"Ne20001" +HKLM,"SYSTEM\CurrentControlSet\Services\Ne2000\Enum","0",0x00000000,"Root\POSVPN\0000" +HKLM,"SYSTEM\CurrentControlSet\Services\Ne2000\Enum","Count",0x00010001,0x00000001 +HKLM,"SYSTEM\CurrentControlSet\Services\Ne2000\Enum","NextInstance",0x00010001,0x00000001 + +; one day this will happen automatically; until then we need this since ndis5 drivers +; rely on the fact that their resources are handed to them by ndis, so we have to find +; the driver that goes with the detected cards. this is how. +HKLM,"SYSTEM\CurrentControlSet\Enum\Root\Ne2000\0000","Service",0x00000000,"Ne2000" +HKLM,"SYSTEM\CurrentControlSet\Enum\Root\Ne2000\0000","Class",0x00000000,"Net" +HKLM,"SYSTEM\CurrentControlSet\Enum\Root\Ne2000\0000","ClassGUID",0x00000000,"{4D36E972-E325-11CE-BFC1-08002BE10318}" + +; Each adapter in the system gets its own SCM entry where its parameters and protocol info are stored. +; NOTE - service type is 0x4 (SERVICE_ADAPTER) and start is 0x3 (manual start). These drivers are named +; for the parent driver plus a globally-increasing serial number (i.e. across all ndis miniports) +; TODO: create this with NDI +; NE2000 Adapter 1 +HKLM,"SYSTEM\CurrentControlSet\Services\Ne20001","ErrorControl",0x00010001,0x00000001 +HKLM,"SYSTEM\CurrentControlSet\Services\Ne20001","Start",0x00010001,0x00000003 +HKLM,"SYSTEM\CurrentControlSet\Services\Ne20001","Type",0x00010001,0x00000004 +HKLM,"SYSTEM\CurrentControlSet\Services\Ne20001\Linkage","Bind",0x00010000,"\Device\Ne20001" +HKLM,"SYSTEM\CurrentControlSet\Services\Ne20001\Linkage","Export",0x00010000,"\Device\Ne20001" +HKLM,"SYSTEM\CurrentControlSet\Services\Ne20001\Linkage","Route",0x00010000,"Ne20001" +HKLM,"SYSTEM\CurrentControlSet\Services\Ne20001\Parameters","Port",0x00000000,"280" +HKLM,"SYSTEM\CurrentControlSet\Services\Ne20001\Parameters","Irq",0x00000000,"9" +HKLM,"SYSTEM\CurrentControlSet\Services\Ne20001\Parameters","DwordTest",0x00000000,"baadf00d" +HKLM,"SYSTEM\CurrentControlSet\Services\Ne20001\Parameters","StringTest",0x00000000,"StringTest" +HKLM,"SYSTEM\CurrentControlSet\Services\Ne20001\Parameters","NetworkAddress",0x00000000,"001122334455" +HKLM,"SYSTEM\CurrentControlSet\Services\Ne20001\Parameters\Tcpip","DefaultGateway",0x00010000,"10.0.0.1" +HKLM,"SYSTEM\CurrentControlSet\Services\Ne20001\Parameters\Tcpip","IPAddress",0x00010000,"10.0.0.100" +HKLM,"SYSTEM\CurrentControlSet\Services\Ne20001\Parameters\Tcpip","SubnetMask",0x00010000,"255.255.255.0" + +; AMD PCNet NIC driver +;HKLM,"SYSTEM\CurrentControlSet\Services\PCNet","ErrorControl",0x00010001,0x00000001 +;HKLM,"SYSTEM\CurrentControlSet\Services\PCNet","Group",0x00000000,"NDIS" +;HKLM,"SYSTEM\CurrentControlSet\Services\PCNet","ImagePath",0x00020000,"system32\drivers\pcntn5m.sys" +;HKLM,"SYSTEM\CurrentControlSet\Services\PCNet","Start",0x00010001,0x00000003 +;HKLM,"SYSTEM\CurrentControlSet\Services\PCNet","Type",0x00010001,0x00000001 +;HKLM,"SYSTEM\CurrentControlSet\Services\PCNet\Linkage","Bind",0x00010000,"\Device\PCNet1" +;HKLM,"SYSTEM\CurrentControlSet\Services\PCNet\Linkage","Export",0x00010000,"\Device\PCNet1" +;HKLM,"SYSTEM\CurrentControlSet\Services\PCNet\Linkage","Route",0x00010000,"PCNet1" +;HKLM,"SYSTEM\CurrentControlSet\Services\PCNet\Enum","0",0x00000000,"PCI\VEN_1022&DEV_2000\0000" +;HKLM,"SYSTEM\CurrentControlSet\Services\PCNet\Enum","Count",0x00010001,0x00000001 +;HKLM,"SYSTEM\CurrentControlSet\Services\PCNet\Enum","NextInstance",0x00010001,0x00000001 +;HKLM,"SYSTEM\CurrentControlSet\Enum\PCI\VEN_1022&DEV_2000&SUBSYS_20001022&REV_10\0000","Service",0x00000000,"PCNet" +;HKLM,"SYSTEM\CurrentControlSet\Enum\PCI\VEN_1022&DEV_2000&SUBSYS_20001022&REV_10\0000","Class",0x00000000,"Net" +;HKLM,"SYSTEM\CurrentControlSet\Enum\PCI\VEN_1022&DEV_2000&SUBSYS_20001022&REV_10\0000","ClassGUID",0x00000000,"{4D36E972-E325-11CE-BFC1-08002BE10318}" + +; AMD PCNet Adapter 1 +;HKLM,"SYSTEM\CurrentControlSet\Services\PCNet1","ErrorControl",0x00010001,0x00000001 +;HKLM,"SYSTEM\CurrentControlSet\Services\PCNet1","Start",0x00010001,0x00000003 +;HKLM,"SYSTEM\CurrentControlSet\Services\PCNet1","Type",0x00010001,0x00000004 +;HKLM,"SYSTEM\CurrentControlSet\Services\PCNet1\Linkage","Bind",0x00010000,"\Device\PCNet1" +;HKLM,"SYSTEM\CurrentControlSet\Services\PCNet1\Linkage","Export",0x00010000,"\Device\PCNet1" +;HKLM,"SYSTEM\CurrentControlSet\Services\PCNet1\Linkage","Route",0x00010000,"PCNet1" +;HKLM,"SYSTEM\CurrentControlSet\Services\PCNet1\Parameters","BUS_TO_SCAN",0x00000000,"ALL" +;HKLM,"SYSTEM\CurrentControlSet\Services\PCNet1\Parameters","BUSTIMER",0x00000000,"0" +;HKLM,"SYSTEM\CurrentControlSet\Services\PCNet1\Parameters","BUSTYPE",0x00000000,"5" +;HKLM,"SYSTEM\CurrentControlSet\Services\PCNet1\Parameters","EXTPHY",0x00000000,"0" +;HKLM,"SYSTEM\CurrentControlSet\Services\PCNet1\Parameters","FDUP",0x00000000,"0" +;HKLM,"SYSTEM\CurrentControlSet\Services\PCNet1\Parameters","LED0",0x00000000,"10000" +;HKLM,"SYSTEM\CurrentControlSet\Services\PCNet1\Parameters","LED1",0x00000000,"10000" +;HKLM,"SYSTEM\CurrentControlSet\Services\PCNet1\Parameters","LED2",0x00000000,"10000" +;HKLM,"SYSTEM\CurrentControlSet\Services\PCNet1\Parameters","LED3",0x00000000,"10000" +;HKLM,"SYSTEM\CurrentControlSet\Services\PCNet1\Parameters","MPMODE",0x00000000,"0" +;HKLM,"SYSTEM\CurrentControlSet\Services\PCNet1\Parameters","TP",0x00000000,"1" +;HKLM,"SYSTEM\CurrentControlSet\Services\PCNet1\Parameters","SlotNumber",0x00000000,"10" +;HKLM,"SYSTEM\CurrentControlSet\Services\PCNet1\Parameters","BusNumber",0x00000000,"0" +;HKLM,"SYSTEM\CurrentControlSet\Services\PCNet1\Parameters\Tcpip","DefaultGateway",0x00010000,"10.1.0.1" +;HKLM,"SYSTEM\CurrentControlSet\Services\PCNet1\Parameters\Tcpip","IPAddress",0x00010000,"10.1.0.100" +;HKLM,"SYSTEM\CurrentControlSet\Services\PCNet1\Parameters\Tcpip","SubnetMask",0x00010000,"255.255.255.0" + +; ReactOS PCNet Driver +;HKLM,"SYSTEM\CurrentControlSet\Services\PCNet","ErrorControl",0x00010001,0x00000001 +;HKLM,"SYSTEM\CurrentControlSet\Services\PCNet","Group",0x00000000,"NDIS" +;HKLM,"SYSTEM\CurrentControlSet\Services\PCNet","ImagePath",0x00020000,"system32\drivers\pcnet.sys" +;HKLM,"SYSTEM\CurrentControlSet\Services\PCNet","Start",0x00010001,0x00000003 +;HKLM,"SYSTEM\CurrentControlSet\Services\PCNet","Type",0x00010001,0x00000001 +;HKLM,"SYSTEM\CurrentControlSet\Services\PCNet\Linkage","Bind",0x00010000,"\Device\PCNet1" +;HKLM,"SYSTEM\CurrentControlSet\Services\PCNet\Linkage","Export",0x00010000,"\Device\PCNet1" +;HKLM,"SYSTEM\CurrentControlSet\Services\PCNet\Linkage","Route",0x00010000,"PCNet1" +;HKLM,"SYSTEM\CurrentControlSet\Services\PCNet\Enum","0",0x00000000,"PCI\VEN_1022&DEV_2000\0000" +;HKLM,"SYSTEM\CurrentControlSet\Services\PCNet\Enum","Count",0x00010001,0x00000001 +;HKLM,"SYSTEM\CurrentControlSet\Services\PCNet\Enum","NextInstance",0x00010001,0x00000001 +;HKLM,"SYSTEM\CurrentControlSet\Enum\PCI\VEN_1022&DEV_2000&SUBSYS_20001022&REV_10\0000","Service",0x00000000,"PCNet" +;HKLM,"SYSTEM\CurrentControlSet\Enum\PCI\VEN_1022&DEV_2000&SUBSYS_20001022&REV_10\0000","Class",0x00000000,"Net" +;HKLM,"SYSTEM\CurrentControlSet\Enum\PCI\VEN_1022&DEV_2000&SUBSYS_20001022&REV_10\0000","ClassGUID",0x00000000,"{4D36E972-E325-11CE-BFC1-08002BE10318}" + +; PCNet Adapter 1 +;HKLM,"SYSTEM\CurrentControlSet\Services\PCNet1","ErrorControl",0x00010001,0x00000001 +;HKLM,"SYSTEM\CurrentControlSet\Services\PCNet1","Start",0x00010001,0x00000003 +;HKLM,"SYSTEM\CurrentControlSet\Services\PCNet1","Type",0x00010001,0x00000004 +;HKLM,"SYSTEM\CurrentControlSet\Services\PCNet1\Linkage","Bind",0x00010000,"\Device\PCNet1" +;HKLM,"SYSTEM\CurrentControlSet\Services\PCNet1\Linkage","Export",0x00010000,"\Device\PCNet1" +;HKLM,"SYSTEM\CurrentControlSet\Services\PCNet1\Linkage","Route",0x00010000,"PCNet1" +;HKLM,"SYSTEM\CurrentControlSet\Services\PCNet1\Parameters","SlotNumber",0x00000000,"10" +;HKLM,"SYSTEM\CurrentControlSet\Services\PCNet1\Parameters","BusNumber",0x00000000,"0" +;HKLM,"SYSTEM\CurrentControlSet\Services\PCNet1\Parameters\Tcpip","DefaultGateway",0x00010000,"10.1.0.1" +;HKLM,"SYSTEM\CurrentControlSet\Services\PCNet1\Parameters\Tcpip","IPAddress",0x00010000,"10.1.0.100" +;HKLM,"SYSTEM\CurrentControlSet\Services\PCNet1\Parameters\Tcpip","SubnetMask",0x00010000,"255.255.255.0" ; Named Pipe filesystem driver HKLM,"SYSTEM\CurrentControlSet\Services\Npfs","ErrorControl",0x00010001,0x00000000 @@ -234,8 +357,8 @@ HKLM,"SYSTEM\CurrentControlSet\Services\Packet","ImagePath",0x00020000,"system32 HKLM,"SYSTEM\CurrentControlSet\Services\Packet","Start",0x00010001,0x00000004 HKLM,"SYSTEM\CurrentControlSet\Services\Packet","Type",0x00010001,0x00000001 ; NOTE: These settings should be added by the network setup -HKLM,"SYSTEM\CurrentControlSet\Services\Packet\Linkage","Bind",0x00020000,"\Device\ne2000" -HKLM,"SYSTEM\CurrentControlSet\Services\Packet\Linkage","Export",0x00020000,"\Device\packet" +HKLM,"SYSTEM\CurrentControlSet\Services\Packet\Linkage","Bind",0x00010000,"\Device\Ne20001" +HKLM,"SYSTEM\CurrentControlSet\Services\Packet\Linkage","Export",0x00010000,"\Device\packet" ; Private ICE driver HKLM,"SYSTEM\CurrentControlSet\Services\Pice","ErrorControl",0x00010001,0x00000000 @@ -244,6 +367,13 @@ HKLM,"SYSTEM\CurrentControlSet\Services\Pice","ImagePath",0x00020000,"system32\d HKLM,"SYSTEM\CurrentControlSet\Services\Pice","Start",0x00010001,0x00000004 HKLM,"SYSTEM\CurrentControlSet\Services\Pice","Type",0x00010001,0x00000001 +; SoftICE +;HKLM,"SYSTEM\CurrentControlSet\Services\ntice","ErrorControl",0x00010001,0x00000000 +;HKLM,"SYSTEM\CurrentControlSet\Services\ntice","Group",0x00000000,"Debug" +;HKLM,"SYSTEM\CurrentControlSet\Services\ntice","ImagePath",0x00020000,"system32\drivers\ntice.sys" +;HKLM,"SYSTEM\CurrentControlSet\Services\ntice","Start",0x00010001,0x00000000 +;HKLM,"SYSTEM\CurrentControlSet\Services\ntice","Type",0x00010001,0x00000001 + ; PS/2 mouse port driver HKLM,"SYSTEM\CurrentControlSet\Services\Psaux","ErrorControl",0x00010001,0x00000000 HKLM,"SYSTEM\CurrentControlSet\Services\Psaux","Group",0x00000000,"Pointer Port" @@ -251,6 +381,13 @@ HKLM,"SYSTEM\CurrentControlSet\Services\Psaux","ImagePath",0x00020000,"system32\ HKLM,"SYSTEM\CurrentControlSet\Services\Psaux","Start",0x00010001,0x00000001 HKLM,"SYSTEM\CurrentControlSet\Services\Psaux","Type",0x00010001,0x00000001 +; Serial mouse driver +HKLM,"SYSTEM\CurrentControlSet\Services\Sermouse","ErrorControl",0x00010001,0x00000000 +HKLM,"SYSTEM\CurrentControlSet\Services\Sermouse","Group",0x00000000,"Pointer Port" +HKLM,"SYSTEM\CurrentControlSet\Services\Sermouse","ImagePath",0x00020000,"system32\drivers\sermouse.sys" +HKLM,"SYSTEM\CurrentControlSet\Services\Sermouse","Start",0x00010001,0x00000004 +HKLM,"SYSTEM\CurrentControlSet\Services\Sermouse","Type",0x00010001,0x00000001 + ; RPC service HKLM,"SYSTEM\CurrentControlSet\Services\Rpcss","ErrorControl",0x00010001,0x00000001 HKLM,"SYSTEM\CurrentControlSet\Services\Rpcss","ImagePath",0x00020000,"%SystemRoot%\system32\rpcss.exe" @@ -271,18 +408,24 @@ HKLM,"SYSTEM\CurrentControlSet\Services\Tcpip","ImagePath",0x00020000,"system32\ HKLM,"SYSTEM\CurrentControlSet\Services\Tcpip","Start",0x00010001,0x00000002 HKLM,"SYSTEM\CurrentControlSet\Services\Tcpip","Type",0x00010001,0x00000001 ; NOTE: These settings should be added by the network setup -HKLM,"SYSTEM\CurrentControlSet\Services\Tcpip\Linkage","Bind",0x00020000,"\Device\ne2000" -HKLM,"SYSTEM\CurrentControlSet\Services\Tcpip\Linkage","Export",0x00020000,"\Device\tcpip" -HKLM,"SYSTEM\CurrentControlSet\Services\Tcpip\Linkage","Route",0x00020000,"" +; These bindings are of the windows 2000 type, and will probably need to be +; twiddled to get 3rd-party network-related software to work. +; NT4 puts additional stuff in the Bind, Export, and Route values. +;HKLM,"SYSTEM\CurrentControlSet\Services\Tcpip\Linkage","Bind",0x00010000,"\Device\PCNet1", "\Device\Ne20001", "\Device\PCNet1" +HKLM,"SYSTEM\CurrentControlSet\Services\Tcpip\Linkage","Bind",0x00010000, "\Device\Ne20001" +;HKLM,"SYSTEM\CurrentControlSet\Services\Tcpip\Linkage","Export",0x00010000,"\Device\Tcpip_PCNet1", "\Device\Tcpip_Ne20001", "\Device\Tcpip_PCNet1" +HKLM,"SYSTEM\CurrentControlSet\Services\Tcpip\Linkage","Export",0x00010000, "\Device\Tcpip_Ne20001" +;HKLM,"SYSTEM\CurrentControlSet\Services\Tcpip\Linkage","Route",0x00010000,"PCNet1", "Ne20001", "PCNet1" +HKLM,"SYSTEM\CurrentControlSet\Services\Tcpip\Linkage","Route",0x00010000,"Ne20001" HKLM,"SYSTEM\CurrentControlSet\Services\Tcpip\Parameters","DataBasePath",0x00000000,"DataBasePath" HKLM,"SYSTEM\CurrentControlSet\Services\Tcpip\Parameters","Domain",0x00000000,"" HKLM,"SYSTEM\CurrentControlSet\Services\Tcpip\Parameters","Hostname",0x00000000,"ROSHost" -HKLM,"SYSTEM\CurrentControlSet\Services\Tcpip\Parameters","NameServer",0x00000000,"203.13.174.1" +HKLM,"SYSTEM\CurrentControlSet\Services\Tcpip\Parameters","NameServer",0x00000000,"10.0.0.1" HKLM,"SYSTEM\CurrentControlSet\Services\Tcpip\Parameters","ForwardBroadcasts",0x00010001,0x00000000 HKLM,"SYSTEM\CurrentControlSet\Services\Tcpip\Parameters","IPEnableRouter",0x00010001,0x00000000 -HKLM,"SYSTEM\CurrentControlSet\Services\Tcpip\Parameters","SearchList",0x00000000,"" +HKLM,"SYSTEM\CurrentControlSet\Services\Tcpip\Parameters","SearchList",0x00010000,"" HKLM,"SYSTEM\CurrentControlSet\Services\Tcpip\Parameters","EnableSecurityFilters",0x00010001,0x00000000 -HKLM,"SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\PersistentRoutes",,0x00000010 +;HKLM,"SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\PersistentRoutes",,0x00000010 ; Virtual FAT filesystem driver HKLM,"SYSTEM\CurrentControlSet\Services\Vfatfs","ErrorControl",0x00010001,0x00000000 @@ -291,6 +434,13 @@ HKLM,"SYSTEM\CurrentControlSet\Services\Vfatfs","ImagePath",0x00020000,"system32 HKLM,"SYSTEM\CurrentControlSet\Services\Vfatfs","Start",0x00010001,0x00000000 HKLM,"SYSTEM\CurrentControlSet\Services\Vfatfs","Type",0x00010001,0x00000002 +; Boot Video Driver +HKLM,"SYSTEM\CurrentControlSet\Services\BootVideo","ErrorControl",0x00010001,0x00000000 +HKLM,"SYSTEM\CurrentControlSet\Services\BootVideo","Group",0x00000000,"Boot Video Driver" +HKLM,"SYSTEM\CurrentControlSet\Services\BootVideo","ImagePath",0x00020000,"system32\drivers\bootvid.sys" +HKLM,"SYSTEM\CurrentControlSet\Services\BootVideo","Start",0x00010001,0x00000000 +HKLM,"SYSTEM\CurrentControlSet\Services\BootVideo","Type",0x00010001,0x00000002 + ; VGA miniport driver HKLM,"SYSTEM\CurrentControlSet\Services\Vga","ErrorControl",0x00010001,0x00000000 HKLM,"SYSTEM\CurrentControlSet\Services\Vga","Group",0x00000000,"Video" @@ -307,6 +457,13 @@ HKLM,"SYSTEM\CurrentControlSet\Services\vmx_svga","Start",0x00010001,0x00000004 HKLM,"SYSTEM\CurrentControlSet\Services\vmx_svga","Type",0x00010001,0x00000001 HKLM,"SYSTEM\CurrentControlSet\Services\vmx_svga\Device0","InstalledDisplayDrivers",0x00010000,"vmx_fb" +; Kernel-mode regression test driver +HKLM,"SYSTEM\CurrentControlSet\Services\kmregtests","ErrorControl",0x00010001,0x00000000 +HKLM,"SYSTEM\CurrentControlSet\Services\kmregtests","Group",0x00000000,"Extended Base" +HKLM,"SYSTEM\CurrentControlSet\Services\kmregtests","ImagePath",0x00020000,"system32\drivers\kmregtests.sys" +HKLM,"SYSTEM\CurrentControlSet\Services\kmregtests","Start",0x00010001,0x00000001 +HKLM,"SYSTEM\CurrentControlSet\Services\kmregtests","Type",0x00010001,0x00000001 + ; ControlSet selection settings HKLM,"SYSTEM\Select","Current",0x00010001,0x00000001 diff --git a/bootdata/icon.ico b/bootdata/icon.ico new file mode 100755 index 0000000000000000000000000000000000000000..e3ee7ef24d9ec84e68dc30477688b2740f600a16 GIT binary patch literal 1406 zcmajfPiPZq7{~FS$g;iJ)6zrL9CO%1=hPr87Ln46&_imA?4c}W$weBdpvO|g7RjLn zk%B_Ad&)tiD`In6a>$|LpN1kBq=yJInKzS6W;7ZMgpA*5_2j>KcmnU6_mg>^H}8ye zj2IpkpF_(0BK;;QNiwAb8P9+3io!_!{l0pSdg|Wks&l=g@Ny{s4`1FXPcE@X>=0YT zDzQk+5);JxW+d~XuY>=3s@(3Xe66D*{{C5C`Gltp{0e>vzkr{?PvXb%Nqnsqsa)=> zQ0OU_>nfY=D4hYnxe1z}gd-yKCgAegO-ov~2J^T)S3%`nA#Lwa8 ze}aFAzl*-fL%Y5aNo7~bGt%;w_yRtM&*Ibg6n+%XDP#M-bNb@@hw4AI z)q7A?cjK8lS4#?KAIU#ckazMPegnUPU*hyGaC&Dry_1~YaZYcN{g2r1P{tUZg_^3> zsw$O=c6WDGDwR|$7PY;-&GS)EKA+d-=BC!y*R{5`rsd`3!^~21CX>Ixa0A`*Fr=; +#include #include #include #include @@ -23,7 +23,6 @@ /* DEFINITIONS ***************************************************************/ #define VIDMEM_BASE 0xb8000 -#define VIDMEM_SIZE 0x2000 #define CRTC_COMMAND ((PUCHAR)0x3d4) #define CRTC_DATA ((PUCHAR)0x3d5) @@ -79,11 +78,6 @@ ScrCreate(PDEVICE_OBJECT DeviceObject, DeviceExtension = DeviceObject->DeviceExtension; - /* get pointer to video memory */ - BaseAddress.QuadPart = VIDMEM_BASE; - DeviceExtension->VideoMemory = - (PBYTE)MmMapIoSpace (BaseAddress, VIDMEM_SIZE, FALSE); - /* disable interrupts */ __asm__("cli\n\t"); @@ -130,6 +124,11 @@ ScrCreate(PDEVICE_OBJECT DeviceObject, DeviceExtension->Rows, DeviceExtension->ScanLines); + /* get pointer to video memory */ + BaseAddress.QuadPart = VIDMEM_BASE; + DeviceExtension->VideoMemory = + (PBYTE)MmMapIoSpace (BaseAddress, DeviceExtension->Rows * DeviceExtension->Columns * 2, FALSE); + DeviceExtension->CursorSize = 5; /* FIXME: value correct?? */ DeviceExtension->CursorVisible = TRUE; @@ -171,6 +170,17 @@ ScrWrite(PDEVICE_OBJECT DeviceObject, int rows, columns; int processed = DeviceExtension->Mode & ENABLE_PROCESSED_OUTPUT; + if (HalQueryDisplayOwnership()) + { + /* Display is in graphics mode, we're not allowed to touch it */ + Status = STATUS_SUCCESS; + + Irp->IoStatus.Status = Status; + IoCompleteRequest (Irp, IO_NO_INCREMENT); + + return Status; + } + vidmem = DeviceExtension->VideoMemory; rows = DeviceExtension->Rows; columns = DeviceExtension->Columns; @@ -616,11 +626,11 @@ DriverEntry (PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath) DPRINT ("Screen Driver 0.0.6\n"); - DriverObject->MajorFunction[IRP_MJ_CREATE] = ScrCreate; - DriverObject->MajorFunction[IRP_MJ_CLOSE] = ScrDispatch; - DriverObject->MajorFunction[IRP_MJ_READ] = ScrDispatch; - DriverObject->MajorFunction[IRP_MJ_WRITE] = ScrWrite; - DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL ] = ScrIoControl; + DriverObject->MajorFunction[IRP_MJ_CREATE] = (PDRIVER_DISPATCH) ScrCreate; + DriverObject->MajorFunction[IRP_MJ_CLOSE] = (PDRIVER_DISPATCH) ScrDispatch; + DriverObject->MajorFunction[IRP_MJ_READ] = (PDRIVER_DISPATCH) ScrDispatch; + DriverObject->MajorFunction[IRP_MJ_WRITE] = (PDRIVER_DISPATCH) ScrWrite; + DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL ] = (PDRIVER_DISPATCH) ScrIoControl; IoCreateDevice (DriverObject, sizeof(DEVICE_EXTENSION), diff --git a/drivers/dd/bootvid/.cvsignore b/drivers/dd/bootvid/.cvsignore new file mode 100644 index 0000000..0d00270 --- /dev/null +++ b/drivers/dd/bootvid/.cvsignore @@ -0,0 +1,8 @@ +base.tmp +junk.tmp +temp.exp +bootvid.coff +*.sym +*.o +*.sys +*.map diff --git a/drivers/dd/bootvid/Makefile b/drivers/dd/bootvid/Makefile new file mode 100644 index 0000000..8b03b3a --- /dev/null +++ b/drivers/dd/bootvid/Makefile @@ -0,0 +1,13 @@ +# $Id$ + +PATH_TO_TOP = ../../.. + +TARGET_TYPE = driver + +TARGET_NAME = bootvid + +TARGET_OBJECTS = bootvid.o pixelsup_i386.o + +include $(PATH_TO_TOP)/rules.mak + +include $(TOOLS_PATH)/helper.mk diff --git a/drivers/dd/bootvid/bootimage.bmp b/drivers/dd/bootvid/bootimage.bmp new file mode 100755 index 0000000000000000000000000000000000000000..39561bdc27e78aa04bed1ba82b21df2d9faa8281 GIT binary patch literal 97116 zcmZs^ZETxamgjeet0f46V3E&5NQ$DUOiEC^g5xq@U>k)(xm2W^1*507w%Qc6p4v*M z(_+&-y`9z+*_`cp$zm|(Qo`))>}JO+%AKTs@>QUH7NGZ@d5E-nZQS^;OsZ`)&8%KDg%w|Mj~2 zFaP1+aXC?t{i*xozuRzb{PdW=BYU~4 zM{a8W@M!<={Lg)P&lMi;J=}Zz@Zb3xJbcW{y*Y4`{lUOqeLgPt-Soyd)+2~GYuDCTH((v)ZAF3k*K-r_4eqm(`h$)J)Op1Z|zTOwOXPRsRbREsC8znZ5nJ!@a%3L%sI*_Fa6>#rfPjbkloo-00@N$B*}1=Alas9uMp_4b_|5 zgH8Qy54H!1O_%I%_xrqEeA^`kgTeOp_EbNzIX-ZSy>0ey27PyVV`HP&6B zJah|#$29Wc!-s>%4<9^KL-^Ztv}1CU*7Dxoel!@+%J}B?_NLk!??<*%eV0??di~x; zZ;h7eNnJ8cfSOD!?3UaPg+oocn>x!9^ecS6#4d=xv49lNok)A=Kp*x!fvqxilH zAXh{~=hZzo1&t$8#gEv-$bjQf|dOY{YjYH(4ZOD7HP4{oc`YtI_ z``eoctD9Nt)9V|^D0FUYthpo-ihwqnwA@p;(x^crB&;BzZ`Erwyk4)h`Ja7_2LH98 zq}{34>wG|WOq~>Ka;sWWK$>J!01b(f*JRdLsEK@;LP%(vLlY zv2@M0V=M9C!6tu+%}77KokS{Q{m5Fp@5a_P;%hELCm@ONehq$Sy4@b^?lrp2$%e~_ z(JM=0cC6;^i+nml{h$tz2#oqdJ<;iWx7%wrB`M8Dx7*bTHTJ5b_%qt+%X+;-KhQ(5 zmUCB!ZtQfJICcf#D+rHJt514HA8zs}vM=1yDRh?`KLjM!M@NVHK4;L@9^?ke0q60< z#J($ekO(kzBEZrAlBm7?*j{9RP7-Cfp=Z^xF80_>KYC1;J{Eca(Su;%G6ryDX?qac zbSaQ5oNv;50UHu3&^6hg?@nd_3F&aW^_ZRjekCJI5Qt<;v5mKu#EIGco_@C8-d zb7ReByy2qvB*iu4c&uLM{{%7 zzPX14K2rOU#geEIB@Z6#Jz|%(_|O)}O+M%wU6R^3TaWrK_JCf0M8Bd#FQBg0urBIe zH-pR~x!_g;+ibcE4HpBpONm-!DOqz-Xu@hYS33CyuNWCP0Ya(+(|>Okzf-4(=i zMNsV^!a^)s3&8TFTEW;LxmX-S?DU9p=xFKb*iqyZU47B(D@ooFB4!eHcoBnPWEtNk z_uRZFv`&Cx+kOP2A50oLMRoAV1$@BM{sWN=ej(YmN+_!h#ESo=vUv6GuiXV`y_<@k}}HUZ8r%Bg+w@Cuf^*w+Uam^FV=N$HKew_Au!i!;1qoZ zwXIfFoNfctWXHv%ww#+AMoweHhC%kP3NIgs(xv~92a5;$tnDwGt z_TxwH0$)werQGPNBlO!FI%a}m_%vO=hwFjLKf*32g^2xmItrP23^H;EjY*I7t@@E} z=A1oxFS-3-698^HwA(g1KT7|dZ^yUsQMNJCF1d-{f)&R|yToH*d4Oe3(X&0!EL$-t zxMHQH6`RO+Tz2_bXuYgf8)Bt$ynMrM#CsnZpEB;!I%BYlKXOsFT?u>iKzv1%>4>C*+9Y4Z0Y@LiWq(%OOwGk5t9TS_Ey?saFr91DjnZ_wl-D;9 zS~MCa7kcXsDpOnpoLlGeT!yPNCa@A-or;HXD=2JIOKK|C3-b!6pSims=VGoWaE=wipi;b}sjr^93X)+kMI zUj{d5lYLM#{p{!8c=h@7TrS6dujOLTUE=KQ`Ppl)#h<&_+4JXT4O{@F7V=_^gH^&xybQ{M=owcfWIu;gtr;}(Z71teR1}kGxx^7_ZJ&hRzl6dxZuJRfj{B5@`3#o-Z1kIK(`W6zBZU;W~& zb>`mv4?d-v>1Y3l-U?F7?Ga_)+1MjCI-bKVljB8kcG_%_=_LU-XWsPD5fntx&Un&L zk&soz9`Upv{V!jf{q~vr@(?KkFnSmit#sNv3_lRQijzFa$by!POa=U0Y+?RVL?N*u zHgE`AhwxPYi@Jn~*728)Tn3FHkvjS*bn&F?zjr7f{gL<~-<6JkGL!5{ z%m6Ab2?7AK)X>+gpA!3*_9FlL7iZr)bHQK!Z`eNdyflBj*{#=>T+ndiODpyIQe%m> zkNT!n$xLK2^iAT}MJ4O9Tnoq?S~(**m%`mUOyLzx?M19t_Ww_NM)VgyM<#mijyOzo zcDLO@(QNRyg2fR(h~{KF>R69XXLS+ZwvwT>a6vwfhZhE7#`KAxW%^_ie`n+%?Cle2 zP0Av|5|sOo{^u{weiwfHNTkcKHJd18-0DV?$Yi5|X5)!XG+_-oP$>zOp8s! zy!&eFeO=f{-isS-opxjY5uD^6zn398;I`lB5ER^P_S86{gGN`4t9Mpg ztE-j8RNA>W(k>q8diQ2Jk{#y`|L=cpRK|XfK8)AVSFbl3^;#1GHG2NSnPG%$Mpx4tb5u}6k%s=pS|7|one%S@=mWXby^*0G% zHsvpm8d<%I-G*mp@Z*E>%p= zKE&rC!kHE(5BDC+H|h0a4QxEUI%m{p)3Gd)q=vgxKtE@L;35>!N_4#Tile}PunB))r>dr4E_{_rO^7AJLYk1Pqy-JpY{ zH)IioJ~y7Ff7Si`N24X#E~Y)HEF6lnKOIPBV}Ja!+c&;AYo58Q6Tk87KP^@&H>Jh| z>mIo>L{la~(Q6Jhh?Mp>x)x^RDsV#=QL$6+%q2+|XO{0yJu zTTd`U|2R`DRVqv9>M3-if5<*Cb?Ep4eKgo!>swZ)jWz3J(&-FOs6y3C6|EQiZk=zT;K>NgIQVgyHxQV9@YPxmYY0E3I}D{k3BBt|4@2 z3-8VEVb*%RTB}mLhGSN5tuD$bsKTjSEw<#6WR|3Y+y{-w5^}%vMdM2icabhr&*38? z!}>|9&JnICLz4erUM-+V|+X4LMH_1d~!?+yN5X<3$(>;|snS|4gJ!b8Xt zt?4XY68uX_2BFT)Wa)agW}x_s^gC&n3)5kkFT%Zwf&&;2&dus!W1Y+&uy;DARR9c-=dAg+Tg`sj9LcX+b3J{bJLe+XA_ zfVmiXGVO6eVk=7ZQV*arr2B&c)Pg#FPwF83LL0DHbNO@{;(26CH-dUu+i$hl!5$f_ z-mT+j!{LdVF<5^%_~dr$X039QHVk%#Po56{o13UT1cNppXfqub)U8FtnQof66tQ{v zdJ~j>(Rdy21;pXWLk*ZyW|H>?QXTaBTU+a&>^^(q@VCA+Sl>C`g6hBi*(+mz^>{cK z44*w4K6~=B>nM9U4rYqnEu&FjP2@lkTJwwaZ>QZ%a-~9gPSFH8=4I%s-Msbe z3DLmL&e34716`lIf977_9UcsZPltztoo7$}42HLBZM;Bv1!GxR-t1F)ZwC!5o^em> zEixx<*BJHN?GK+mMXj7142}ng#lhC?GMpOhJ{z90Z~gemr+>36XQtKad<3_yrenb* z_r30=1rhI@&on+8OTb9_UpZ@j+ znOD^A4iU19yh&{Vs+c&srgk8zHJ9sMU%1w4;F84KVkP8O_CDUF3AEtocnHddCxhY1&hT{bNo}204Yqc7 zhs#@7C-JjpZD=gTSN_nr`OSt40Fk1zUQcmE!-fP3P&r|Zv#sIG&- zy{+}Zv7WH|7c#8_lI8GUdINt${ttApW!e!g(tB5-4a=ZD4ZcW!kapigQPIjLi5BW;-mj}B$J3FVlKN~z8Y;W|)OD*v%^E9&4+>a-~JEX&& zM8C#OX<>qBiwT#sv#g<;_WIc#yL4Cby7cbJ4~GXkXdrdk;Mpnv9}WIqeYtlB3EDk* zcJlD>A=XxA-Fhu8{W}kh#u`}XEg_gg51S0p4)fjv_kEr!u5Hpv^!V@R^U{!ui=rD* zU4!cNTf^O_CkUt>|Kr`K$0)+1t@_P&ZFz8VI^_8~4`m18+=`x`!|LG^^45Q5|KMI! zb}*&P2a0UPebKlBKFL=87Wul~T>y#;baXISe>!+7Fz~38H=mt6djkHqs8_XSx{ue=^?x%Int$<;H9=l`anE}i_$@$G%LQM72XKLG!$oO2E2TD za4`7r>CWjVcXp4DKHeRE7<=Lh!%uGwzEY`_(LCUBeSizC7_FkjgBx3EB*Zp_QLy)0 z|37^ETEn%JFCnHU7qe2FsXpxcF?adxV3iV4&-x zE3*gCfyXaOArmzl%SEzib0P*wrlFpoxv9Hz6}IEfm8MnMCR53u2W?l zWq>KgYeAQk7efdEh4T4EyhDcxll1aMzcsR?NJ)TCe2M;&gzOycezJQysNC8)xHbIq zXY^JHN=^sEKi?VrA$@pqXNQN-T`f2yyyGX!pQic7DcOXK$ngNYWz<+4nGzp4D}Yb5 z#Pf?d^UC7lBDw0O2;4bI z1B{}aZ2?^R1uh`>akOV7ZPpI*6jgnZ{>RWk%&?F-r$9~ociFJ!ovYD6#&7iqcN*C_x$nCFE&i9K%Vz24dC#K3&hGBP;NxH1 zxs5*7Gp>T=r%#`re254x4^HLxY;WAFbt=A_d~d^-K)ON-Qbxed@WmTBA1dInSX6z1 zo&Jc9!ZIN&u$ayxO!mSxQJ1ymIxLeN`@xIb3DoqHXEGAQQ@L@2;io(IWbO|J+r4}B zdd1{L{z_~m(jZcZ11~s}#MZr!2b18FNHh@Z?2Wzzd*8(P31T}((pZDRU%B~1;52-S zV4NNfP%ZSqDRz{s-RaRDJkwZ`c!t(Wp39`kz1NZ1c<_exY?J;*?i(Uw6TZ;S!B>6} ze|DnwV{I_A5BG4I?%*(R&=^ObuI5ejO58&+l`JQH34f$1rG=yqy-pPG&}dj4`K+AP z%uIA@z4gIET+@@m$A9JBr@N;IJH)?_2OAK%KOFw~@Y8qLaU_%4KqDCg<$t)>xr@|< zsS5Z4AB{V<894lZp*v^51Bsrce44d8*N%8-YV90@*|oL);4!|@U~s#LsUx3!b){2m z_i4llKFQ9}4i?Ttbwsgp_27-cITt0r1pDN5dK(81mtObZ#XsQ@&caP)lkiK8kA!aU zai6^L@N_WvtItlhD(xQ5|Gn0Yv+uHdIP48S=6~_gjH~CPw3zQ|r9m8WnGlY6pR5>3 z9{KyXo*n#kI>p6baaW!D?DO9_-a9_n+1kZz9Ucq4N-fAhx{K#J&uqJKAb6X8z@DLt z7SgetyO3poB+Wnxc}li&*)MZEhJKEWydivbd?GxfI2|ek+7Zssu!^pADeSG}E0vBF zU2Ks+-9|ZT&9zO9EC%Sb&t7?jeseKGMK*uusImXgKKOL!CniDko-}!gvCY|CykCh% zm!#kuNus0+y!?){wLl(-w$c`~em1Mj6IoVEOXsrgUCv*E!dxziXyiCRQzaznfTLV5 zO^`Gnoj8Lm#$3CBV{mYU&DnkW$t(2jE41|LEAEwlb9C5lt_)7@oJa?wV9;HyOtDDc z$`h85S^Rdzgl?o&O!`d8r0L_AvM=d8_q!6Nc4VoP7tYQRk*jTZ*@lj+dk@P(-)3{{ z)+iQ?p`S%<4xCzEaK5N)3`vnztECuN((3T~-{1Op_vD|Ry>fO2bZF=+XTN#W?@Y9J zhPO`doJc9+cwqb&MMY9R8veFi0OeP)ABuvPF7Xa{Bas)(G4PU%KsQ$AM^cJ^m+-q| zOD5N2ODjKUxM^-?>I>Ot6M0u9!pdAD(j<2=wzd}UVULt5Rq{_h-^at#PigJMtJdIG zK5yK;|2JO!J4b|_155}KP5zgWABN#9M+DmEq`?GWbA_}aUnuyl$u&}~PNmD*2C}J8t$Cj zI2(U(|J5`1$}6v&eg2#O?A5bx{e1T)$5?VHd^y6ckPcSXQ2w@Bs`yuLT58#3G_SNI zNQATIM?x79CM_pIrbQ+jWInR*atCO@vvtYm0%=wUkwC@+0A^0~puGdh14%@Ne`1Sn zT*FV968?K{U2;LIcTfMt=f8P$_@78FUU}v7zxg-L{_T$raH@Q(Nr@`&g8OcXaj;H?y=%7|G{dyy!B-rv!;&8T;w&oV#wh zc9Z){ftUns4BbLskk1!M?u2NRakkR_n9>IBk3;MeWRd|S$GXViBY{d-#&ztiVUF&^ zA@g6RzkhuC&(EOJeRlTw+1bB;G=R)ccPM4r?l%~efU!uEc~Ik$PF}pNZY05$*Vjw) zAb={kd5OL0a&MFMP5OImX^Fb9C|5hM5NCH2rA`H$#@~^9^t%wySX$sdAE;iC?|P6% z<%nS8jPW;{6wGn27rlrI{c}|nw@`<78;5%veUI0KOZAiP))!04Kxus&6 zSuTmU*9(P$u*IETa;LnQCzpd^hi5VQhsfaM zC-D;yefXQ=4m!5*8OrwmIXWOkv3mmZwi#(;2o>DH9gXlw(<5w(kLAI?%wNggc&jSmk~B6E3Q&1^FpGEg@UY_(E;i! z732_)Ad?B@g^~eSrXm0|{Sh@HM~9ETfA}9u$>J2av)|a;z6X0g9UPjA0-7w_Yd)oo zTi}0SDLkV1-|!+Q1VBOExt}}Y79i6pxG&Cd&5|#)evmq^yS6sA(4NF!cCD~rl zog{~mlOL_vD*FbU%ZYQc;l(Kw11zp^ZZ72hczRG+F6YxFlvOORIJa1BH@%jNpX{C> zPyLlwMIBH&`!{?2?H;W939RaqbD%^DD80lH2tvLk;)u39U0?)GA}cw=k&jHwgxC>P z^yre66)-j~hlwmF7y=lSx-d$imkZ9T@N_@!Jk7m`bQI-8*`X&zyIjLK2sM8j4D5nG z02o(Q*SHD>0GXhv9Madj(h-jbNBGVsKRrDpNcht;bc8!Y3?FFhVE5_n;8a-#gAv&! z!;!Sy$Zv%g=UE4=c_9Be_&`yioG3UmLWc$@N=nHD6*pFfJCQtBCS=faxn|nE31``| zcNSinDaV*su;p;1j57DU0$pSI@G{RY$pD$`{b2CJQw=5^{*za+o3EVxTbfSWhdSZz@$8;v3#CrF%hc%xfdU} zx%lo=ip`HGAp6tTo=@C;@MxbAjog!yf4xpRi2-}jL9c)?dJpt_JHz%bxuHCX9Z+;_ z^och4xWDwzWT6agYQB6)bkYUrRk2VmCoNDemgkCYPTGS6bUO3~2lXcuaW5?F6=}gN zSjy$aFbHGJ#QcLY?xefGZM09`Sg}A~7Sir^2{tS%kQ(g#VDN+t^I`vZ_;bp{_D>H9 zRi8e2^5Z*%P_PU?bj(I-qZE@UKFs{mELntz>?=Z?LiSU9f}VLZF5U$LcZMay8$tlDHLVUG^N_FM05rvF3Kos=| z3?M2sK=#pHZn$?Dcf>F~CgF8_dhmlE4iC51el+}fAI;db~Da_{zTzp4X`sL2(dd$z25pdl6mXa@Q`H5zicXz z@VNI)@`O*H{`eM(Z%d;q@K`rSF6H509Lb&6xE5z3DYPMlbj{8pU5QGv7@3XpsM*;p zp$@1HWNd^dYi+_0geulS&hYDGyzq0m+Jp)mKm|`t6+u>umXDRo^iX0}T0}XRj3yIM zb%v6l{i#px>>nL$tgDW$aCop)V-#!)Q8QV?E>+5l<*LTK&4W9)PV?p(h#fRQAHc>U z9s9!Yu(vAU%tjxCC5kT~L07=bv0RYI#fsx#KVD4E;?)-NqIE{J<_nyq)`~xds!=3| z4@)#THyhGZqtU#oXe}q;Hq@g4@M&Ax8g zABHq+N=kQPXX64E2*=M&X{27h8;%=L(fxI;Jjp5Z{=Bn^ZJcfpe#qSJ{u81~NgCGmD2)C~&sX{CM904~d-()5XxGKw=*B31!4d z7M7YFlPg0q02t(u2z+^+!vFY{C9zZ-tj6VcL_wq~K@(sNfo5yUcnvs+y; z?pkB^_1bbzIfTOl6^T$(;HXoK?(gh~wrLp4Ika_=a6#cL`6tCBubYN9Syj!BSt{B! z<$WhZ6ta)Tr4>BA3Yy+Arx)2O@Inct=@5({QkxeTFa%&h(yn}ilvJRsgZZN(R#*?D zTT0amBbRZD$-SRUPfGu^H0qz>OR;F_7BZ^|z9GMyzuayw_de0c!_JOoZZJPX^*sCg zN(&F}p=}w^rPe}BflmBL#fkK}EFFCHXoaC@jbGY$i^XWOp<9T<>dlK&hH~>GArgM1 z=n3^hMS3NQ$ydv-!1-JO^~LGx3rr+U2kJITMn7X~>6lm$&uKJLz~-3x!3$GW{UE(- zcZ)(Rr5|prL%mF-o>8r$yaHH$-V?PNHTF~W<>lpdGMYON4-XC|^a1`I^e4RUQ=b91JO$^zfI?e?k za${pF)=zABuM!Mp0J9*7q2*eO(}Z`0ak9oQ^CgUY#buo@s?rThs#;N|SILt0HZpj& zd|}##uW4PUV64BT+I*M7v~~gbN(P-mz^9~NKc<#`86A|5CG%xqyt)G*} z)S`!}fxFOadv#N4Rl-b3SyaguavJ#jfQ^m@q74OuCugqNYdP*nt;$%dm8v94Zmd$m z&Ri(SIuOBSiI4DEv5=7voZ>TB>VZ%W?3i_(gs#_eui4+@>)CMgSB85`hDvx4tS;pC1fG(u=Osb-Y zuA(EukiLmZMe4aG5b~4cB~86%E-;-SqE&Sf1+p$tj8!64`Zq=)PBpH&^$T_C8AN=! zXjm5wg-Vewkwmo?^Ke_P)@``#t??K&+yi%IlPvl=ZqvQCX+IPRu~A0)I?_liDe{x= z3VeOsm{0_%T!`6Sa)%9}=_P(G(>TKk9I&^nF{pKyb*8F3S1`U5?rd*t17Q*&sUGz_ zJ!K!`UDW}55G&41vKK8ek7JDC_Wm(P)f`m;Us`TtRhu^s!88L2*+;*3oil zQEcKQdpS?{ZaFA#Z(S-1C-Zk~vGPxSPRNOt{?62To92WlNUt_POiYv@I+#5{f9c z7S;b>MIO+Q6{$#i$;P4@)U{KHSZmNr6g`xSFNl1?Vkt8*VOkQKN!&RFp1msI(`3VX3G@=<8d3(O)t!wU;ZoF0P`_=fF3PXLndkzPfwDKhstaT( z-q$!bGEV=QUyWH7a)lEF0k9A*yExukan=zpr}(rKhd5VK7Uys*2r4E8UkZg4 zAo+s#&35ztQiH-wNTZOEk(7GvHqsj}A}?`LtD~AB)q|Mj&t3%y7oqi%Sx$?k$BGrS z&~>y_v4|d!pDt}ccyhi`fVP>kdZI|afZgZ`$?KObtD}5e2D77>TMm6L_iFBQ@?GWu zNZMulMjDXMmg0jr8i<*_@nXCXDT1g3m*Ys$ju{+zqJ%W#E2e}MC4Y?sa);L4;ID*7 zPb|(XT20hy*G2Pk?IuTGe2z1c&V=d3veip6f~~<-VtvE=2={8EENsfY;|L%H=e`63 zou(0VzFu5Uzh$&9hg4WU#fk8x4`;b=AxI+)IP!%c4CyTO6B#}7$8eXPD$1fL2TtE< z?3>hp^%A#3=cuPp6LLa+sYT^+#46~Agy~eGefJ(WqRWv%6G8t_13>7M@kD(&AX2YN1SonB6=D^X(hveJ{zoPa4L- z`!BTv=vEDk`Qsp%u}HZIrd7PpA4tb6t$g$4ksOcod5 z-4rLwJ>ZV2Ytxi*ZYwW?qj(tj1M}#G^&Tz(dQRZQjj*c4lJt|XOdOBb?~O%68bOuZ zWYxH5jMl92?aRx{gu7eo0|I|;-!+YeLSfJPdT&`%dK%rPMvgRRC*i|5pPQ6r!K!B8 zNxSQ)h9Yj6a>@APs0Jmy#2Im3nNxz>ki-!@i_2LxKk_Z)Lb9z`RWgsI1}$MZEQa}z zClTjiOHGduC4vl753=mi4?GFHRNOcmRf0y!$7N>GJtkb07J6b5CxK?wWw#cQfdrCT z?Ud0duUA?(+bE0KT&5xb(Nx0dn(4G+UeWH@VxAeJ(0Cr%E9*w4Kv5@+raf~aSTZk3 z5AuXFSX1>8Te%n#Pe!WZri)%SX)^YnSjNp{C|D@vi9|7q5UNaeY!=y7JfNPSm%us> zuI}HmHn{}umedQuF{C2$=pj=Kilj3Y#v+ko1}14iN|G);7<=KaqY-QMN~buR&7)KC zZ6Fj+r(P-F0Hb8b&0_$|%xY04L!;cvm1%U?BKvb~U|DI|0{W4N9^|73^y#-1G2tnW zf$&jmrnH0Fnw>?h6o@mX)I(VPS(+vZAY+GCAFEV|(Jv|<6IU}C#SnN{^3BZ%!;1U`?UApbY8t~fnjynpj_@aKq53IR zS$zP0Y^Of#J<8@OE61w|*k#*=X;4gDPb{vti(=O`5)}j1%7feL5@>}n#+k^+`2d0I zNts)0KpL{QwMN!1(xr-Gg|&WC(j?Lsiu9T0rU!J%9?r908UtTN*vDaB<1r0)UHjQh zGGu*y(A(-!3GY1vRDddb&POFce)dC2flyD8f@D_NCwOB%U>G8wNKZ_mK%N@sS>z%w zUY8g@M7rlt>wp1&m`h_{$wZ6wz_mMd^? zs#5fP@4~k!Sj62_Jf8~D{~s~3!V_QTiFIO!LV7lX^pwlAP{yS$DdmA=0KN{^3sA=P zw`6;e2l^$P?#*>aTN;bAaCMLTh$>g+4dUP&M%6>+oT7i;?g&6+$g>% zb#5ZMW!e>HGLXnKXRjg7Nb~2SO1Vne_h~uM5aN?^8fgNcLNnO6c!6^)C%~t2cf9o0 zasER)pkuCJqUk}ph_*wkSA%FXu2G)eM-i!6e6-n+I00RVwVz~2PqL!F79;1=v|YNJ zJE>#P1A$l!h$TrC_Z^|!_lz{2aP6@!MM&?b;fM~<`>;u-2ZKcy z_|;asE_E-T5k0I&NDtO-OQJZNzNxWtiDtn`=vm-kg`_&t&!305a&D@Yh_X{7RtY<5 z7#HTf$@iuooNJfvL=+-F98cWvjS5(~LR`_6i>?fNl>Hh<&gdLa$$y|ZqdS5sBtAE_cettj}L3&%&`C$9nfM&q>*PNwu+X8C0HPi z&1e^UB--M%a2tc8#Q>Qemp(wI7@^x-Bq3T9!|NFz$tY?fqmfoL~Zz?*Sz00@DU?!)Uah$4ZQ6g&#N zSa7lc6sw3K5DH(+0#U({>@>c&K+01jz9yX}wOFVK@X=T^_m*S|O`!EWUq{@o=#067 zW_g800*e>8Bmh7?5J;yMWj{G)_lgpIP-ziSMs9{kSpWc7=o8k2NVMFCz!&T&7h_n1 z7!w9CYP=M8OVY494qruiLdr~D4&J;#DQ!=yg+_G9tjn49B>YlR1s2N7ftE1c>ZC)? zT$m+4RMLdS7V%&@o2f`+$zr5XDs3FGqELzTo}o9Dm?06_CQ(vnikQnVaghLrkgi^0 z4YVcXnWctgiDju1OHH}ZpaE3L=*eVXB0q*Bi&4ebX1y6pjc<_aP5};Pr}j2LAwIZn zf^V#GFw)?lgc;U&!#!Jv;WD;ZH#4JdpKS6cl)cVQwow?sjj6FLD6zJsnMRza+N~89 zhrlZbh8i7UDl4aLv4W7+QsF}Gf%aMEVfXH_bUEveVd*$z1za2 zEsH7QP>>JLc}=wgn6*(#n2bUs-Ca9lxE%mia?eXw8|){ zy2*VF8GT2y7X5x22U%)Zv5?2$keQ6-@c~jJ%b_e#3alfs$`Ru?Rx)ZZjg^k@5{ncu z#%}Rtz(K^5KimtF6mpvZajak!Qdd9y>9b9Q|LGD0_EGN=TY#j+ons0AZS@+Pjo>|JY%MZ=xL-=d{O$o_I zPqv^6y&BM;a{lokpzv+MnYuRm+oMt(GI|9{4qC1)#$ll`26+XIf-|B>&Xa!CsTI5i z#X!(T$6_=s`cH(J&f;Q-biEC$I^qdsS?J7=kO)>u3Q$dT$j&R*pz#D*O6Gq^=E-Q0 z6(ic^%OtiD4CI6iAws^c;Q_x=qf{D&mPHgiI3P5{0U5Rrl#;_HZ`ECL!YK73UBjrb zE0_XQM#LDw0#$}d)>;8b+@r_%2d4n=d(CA_f^9K=hC^&QFRK7!qEKi3Q0F?Usj#7D2+Xl@S!ksGi+y ziE6W?O@bRY3IGn)djLUJUb&s~EHZI>F_bk%SI_(acT2eBrV3)sO*L;-hVy*Cd9GysmEE=~E$dIK>B+Xea@e z6U=Gyy`rR|s3FZ^?GBIx%gNKq*Tay&wJz;JThIwg|CtL;H?%}|5TKUY=lGl}Wf;y3 zN4`j>jfjfp$N=M1%1e7cRUd|6kbpl+zFUCRu(tb-ZF}U(PVpx+YeO$#*#9vt+&tQD zQ@HB&E;lrPU3qNqD65(PxV-RBeTB(9xFW;N*`%-WbBQv^nUlj()G7>O)0bcU%J4SI8DiuVX5Ku7k${N%tS zTSkX0lxmNJXJS)ww(u^<7mBix_(kaYOT`kJ7uK86mTJemSzSz2BN&|V4tK+t)ETG9 z7bM47jO5}XIvBCxA#D_LUU*i^sV}h_%UklJUc7jL<0*9{yDA5c2yKMlsN@w3GwywO zd3{xPq2pf1P_8bnE-LA2pq7m34lfW<9ORCBhwnaYRZ_*|)1og;cnL;K-G<1O~Ye$wI*P5gv+Uv3upuZbEK;la+ z7k}Z~J1C+OTtqFi6UwB?78e6lJ^1HH{iAXot;Yzg&pcxx3m&CrH!Z0wC>jK1dt1V# z$E)9OU;P=NROboS8l5(<3Spo`*qg(0cgZxXFjG}tGOQb{MVsu$H#}Y$qwcXy)fdL~ z9{)3B98slMM&=oqa&yJQs#Mc_gr?T6Q+x_S`Am`2lBrdc8RZu80+bb-R6yM8%cxrA zjMmO1@2ul)Ze@kmk)(nSwVswcM?OYa&3+ZE&LW+b6&R;)0ZRp}Fsv#*7qN9dQpNIi zS{E%hySS*~K12ecN0XCl%ot9&lVpVt6f|38TJV~Y(<|ImI6_(_Mu>%pbRj2RXR51` z(swX+!1ODCG88A_D!yPo)My9$S|GTH*7a+SnWSjsnHg?aT68>es9VciVgkX3M4E(ZDl=%UQq*_^Cn1_{OfT|)5N9|2ONR#wwcnh%KOQqn~zAk#k)Rtq6J zmwWNJ$xxyCD5V2oX;zkB`UfKd3zQ7*}MHvD%xS>3OSv((j_l};Al0sf25qQBG zb5bAB7qdA?2&)yS%E+JkNNQF(Xgsb>8jqS+z?1vJAHJ->5KPS|o=; zjHZMbwKBq-ELKHGt5D#Q&W0xBMwGx_#zTbCN*Os#hUH4TMXR~?3SFMfE@Dx26RR0T zirXI*UrMUx`i(qZs0~UPR^tSp6Y2$OEQPj`Mza!vD3LNDsQDopf7}36N)d*t3yrlYkn*1_kIe{LvT+x_X$GAE7bMuJ9zX1poSR)@n}HKUstw7S|H=T7 zB2%D=C5$Nh6juSphRfNS##X99UP$#>WT2v3TU3v)vG#qk3BsCa49!^L`4@S(tRj%K zh7k6eO`XOUT+qFr^8#C?G?E+F!HBY+=U2C%_|0N$ql;{$doacL^tB#B*$*by9J<%WMg5ey2$5vG0h(NOx#12N`3^Y z;AI)V`b*pwd-vjnVP<4h$lG zRdvb+lN+O&3H`v_3Fc2ICO12o3q=p`MXPXcqlE9)DUe1}kV(~&CyM1xy(kZ{AaG{W z`9)j=6KzD4yL9TzwUWo{SJ6b`v4WRmOF3=^^<0{5^$?qbq$5Hvl#LL|)*GPT?u+dg zE$BWlMI7NV$}{E&T0^=)etyQ-H$jEvMG~pxR25s&VMMiD%Sb8oC(ypcuhh+#ND?9n zB%YL4BFQEN3{u6TacLbC1EPZ;WmyZ6h4gTVjSZya0F#z4Lm4rvx~qO$eP{9aLXgg* zhJBalfA!c$mfz5g=^2|LPF$xNtr;)95@7y(t<|VXOLOrIHRB$&La1e9Z<%RD=!IG{ zU$$deV>=*M@VeJ93mTI-#ahR@fR_rZD8sQVo{jGdltG$uRQz58NR4f+udT<{bWW22 zQNx~|huOxm+KL(Mi#EN#D=d@a0=@E#rzxmjm*v%vuZ`d?jHo)tsG?Z3fUc5pZz?v= zuv3N_4M9Idp~fRv_4nv?`B(4CekgELZ47~wRHXn`lm&>%%(6Fu2*6>G%sdM@LB7sT zwwKsdBXQm`QN}A-k@N?$wA?SB4iQ}()FL(l9OM1U>>~Cu)Z#Lmd2oCQ8LQUHp>T{U zmt=^`fwh*OT!6wEwACkxqi|ImMs0<`YmqT@e$;^2t$l#;O zp(iY(fDM@_Amz?divliRpe{~c<91%QcFa&awnU}UXqBLGU?)%_)HY*wTE>@sGDds~ zJvyxKY=6i>|L3iK-iA z-H7+`geTW}TdKt5x;4gDBdqGL8CGtNCz@h-*($Xo&{Opo^NlArwze2V?KZIX$~#?B z6Hy`j-^Bmz`oUuP_OUK0ClE^%%c!p%9J$6?T#q?I@{T=fH7bYgViioJ{e_T(dnhY4 zR#NqAOga>uijRr+gY612!xIy$q!%cdQ*8qp7M|x?;83=kyav803{*ALoXsc4#TIW> zDjO7LxJTYxU-NS>%Oh5LLr<3Mvq9#Fi44jrmk?{jjvHv!!kD+jhUv8Mz{n9YubEv} zyoE)GvKmJgnrCA-+(q5o@Wh5`A~GIG&0JtX9*t*uex*8rIiBjcX(YPNS-1&m4O!GA z(1#{vRLL;ECr5*~Ra!%mDn}Vg6r>9zPVk=<=|ZXZBhJY&?Un>kNO9gvv9ymcHDll> zveV7fc40GwvX6{1XdYQtWZKqumX3uRL^ZO$Y^mlECBpT#0uA;JYeuus!8Ri1jj$H# z6)#aN+zDRiy$!|*SyjbW(kyVjt!mbb@B#>`yXXvXsNgi!p&CN7wHOaW3bbY_%7^@K zE-0WHW+5hTyYPgd3k)L(bYxln2ugw|h>6ta)Qdi7EBQ29I)jgHo3i4VgHrn=`T-s) z`$Xnx9=qc`Mv1!NRR+$+c)qVAf{uY#$48q6b$#QlUHb1F^Xy!?$AAjf6d#rvM>)a* za#yw0mWk@w{NEUBzi(iDr{(El2XT7!>nkAqf;rEcU124VHeNfU3Q22-f!XreV=Kb( zI1e}VLi0zKn!9lea@1ei(zt9-hFB+!oP1M2jV`FBtz5HYE1qG`yK7zD;i3qWjh0I- z%0#1MJrSRwT1vYQLKJf026`Mpl&gqLTfhRs@&)xXwh@IM7E$P()m(>RUU=?LG)y!1 z2M!|s$j%%V4PjspFZSlsA=0PF4M9j}8SB9xQwl3$wYAD2fz2xhB#ki$P^3A{l$MHl z&^?_mqOD;#O#t8A?V<#MhUL>L%jOBiPG^+aloO^IAeWJP*~|vQ1d>PF+??F@)|S_!9ea$Mdlk zjdt0Z1+s9a0kY_g(aZ^1x&=-a#BYeX=ad`9ugF}75H82380K+Rpq!yGbadcRUe_we z9e0`5O8Lryi*AT9%v+yGBipRdC{|moeqCUvBh*v|2W7RyZx#ztc%ogGo0hvu@&N95=@HXOTCeg+Cy3X0(JNF@%#Q$!fFthS+^M>uAjtDJ zR0-)EGo+ih{Z%{U&t|vKt}g;Tl}J6@W;xt=vKkb^xdrvHre;XF=zX$K;C+g{08%F~ z+@lQEoO#Ust!;K-ycJ8cH;I?7XH(?iN@{`{%HMg*My;mBi~^%=g!f<@GfrN)=c}O% z=;!1#@AkXh*h)-mMn!3ZkRIg>(s-osnz-IPL{D%|b->DRzR!GY}i zd|DVGqopfHBeqf!Ue%xr!1#r*T3;jp=OV6#-MUX_5gyZI=Hwv}c{$>EbV5T!zo(&b z{ou=-M={+CjVBdV-8}u0By&i)4_<@_%DC7BV@Q(*Ynm%qdsM3nGR$aDTtO`PmWa^; zXqwk#z6i1?bW5^lbAAj3>n&-Y%oCuhv`obD^b886RAw4@R%`CW!kZm3PHtL=WlRM@ zW-9;#(GpcpST=kt%X2Y*QCTf>(-D4pjVriPR(mA-@?OvaUo|7nsW>i$+-rE@9@wRLtKHVD)Cq!iE2CrVR_AJk>yEYXn9ysYl<`f{a#L|L(YkbCu267Gt2$FjKu z#s;jvjD^ki5LcAU&P!X;V>S;TFP=4{T=ZJq#-GU75tC0S*0lO4@_=<&FlQ8v>NKDh zgqxrn5=1pIf69{5r;F7IthM~`cj_3? zdL2WmGtlga064eKQnvxgx+3ql@LD7#VmjWM=P)#X4%up(@V$@~w-6mFPdzU4p|6mg zlZKOukPT2IGtzL?PM+&nAzYNuIw?7kCHeyD*ts*ig>LGvkZ4&bVZ>Kcjho5!cu?l( zvPY7{UN|xw=wyG)P{B7H;-Em!7ui%+ApqmsU@eNXOy&ywO&Pv>-TNEe{@uGm_eC%` zGUr|mU~79IJqf(!u#?%ImMLZMnaZh*2cdxK?JQ4|on<`(bil2xZE8Sl07{rvqs);I zWSa~JThkPMocrV8T3R8>S?YsvfGvkyw9q-M5u9xzRVZzZ(99t7^taho;Z>3_=4af) z8h&#pHh~{LvduOF2it6DZc)9Z**Kall+u_5IKi?A!{E+ic!66WNwTdx1IX~fk8O~D zN%(vV2#$trs-V%`oSL@?e5|7UHlx0In`081&n;_AWlFY{c5eY;>ZLHmv(LF9b_Giy z*(J9lTQ3itQWX45MU$%;{c?gwET%{)T-ATl79mzLOWC%si-rao4r)_E?Q5?F$|ldq zC}kPyLVC0K4YDq*S&XnDu-wCL1QLV;4Kh=wCaSJ=KGG*9jk*T9z;f7VqPlz(Tfv;Z z(kx_-S$!2mc_2s=n!hcae0^kv=~@s+GR!m-brR4?m-1NQ%({*=IvRLl6{N;wV9`vT zZ;V?&r5dPwNk&vx`C4zItFF*v(!kJNA}1z&p2H(y{Z{%K?J|uC#8KGc+hdlZ#N)vF~FyzdF6g|w^sNi`5o9|+TLF|v!qFjWBYM#LFaHb5C^YOun4p?WO87@LTIXnEI?Xxa@7 z%mypewd>mQKQ1d?EgNZ#4{O~3w4&`*F4N+$DGXV5L2P7F#wmZb~ z%qIi0vcvMTWrVdxB0M8LqZu%W1c9jM2yBPNsAC~qr90YugZ4jbk0<1q^-?@aB?b7*NVE4eiWp3fU zds?N2SeNJ+WMDr>NE~_AB$xYl*FZG6ZJ$14PT!P}kB^OG4Wu=En z>MfK4T7mo(@ie}+mggI_LisDLHzFd)qSF{PmQA4>M?SXh-tJN9W&W~n>N(Mb%+R3= zEGG!n<7&0tf|*m~567jj<^WdDKX}er>|Q1Aqh}MIc5&o8MIsW>Nkw(J4An|c*Zh|p<5H5+g|iM|$5a;nJzX?(}~p8!G9&Y$pt zz5XM%B=Rpo%^^v={?|!n;&c>TOZZJ8U_)71Otn(VT4Q}1_|-Wnsoa9^=HCs;h+ndSt3u{~OOb!EZvb!VMUYDg6z)(FEL(o9Uh)&HEJzwO_wP zrP)R!T77)NeC}fl$RnUY1%+#oNN5Grdr zmhm|tUZm2_sXxw=eW zTa70PG*!2OU5uYu-AaW|R@BRLtzmgixh4s>*=93}ik8t~Hn&%la)qj7c$qJ|AVW^( zfu%$sT^1MBW3!7`w~awW`8VlR^w;Vt5k+cMP)3F0ofyw%5dmp0obTKEAM)!dar7UF z+b}>rxF(UnJj}2qHqo<8RAl}=ZD0q`rVacBBZ;b4$~a&o-Ld4DWbrf#jnZUPmB>V= zRT%(Rvzo`8kaqSX(OMA?OSIqtiLfKzCiMEm)3&+1LV^c^2du}h-zRto+IFQd0H)@b z3_V~;gIB;0i~?hKL0A)fo867Ocd^uoKB$}`Z;eR@%RcwK&MbU0)mz)DC}DJZjT&p_ z7iz{+lMQ#>vfJnfpXI)1jiUkh?OHL{E%6XvN5Y`EG>hpTkwyd6TK~&x)^x?jy=iH`DIB0$giTEo0Cffjdm%*8HGOylOR&!YTMQX?Ki8$1(G)5)=$>=GEVviktbXlMg3?onJGX!`oGi0K3^n553L$!H|@j}23rjbDW$FYPoGG#EHfg_ z$i1+uwE|=gy#gV^My*g4HIid;I_MmE%q7EaSZx`0kz?wrCEW&J0pjJTl;++?f?FCL z(kZi{x(knkoV^|+m!=@yN6+Amr&q)U=fGf{OrLrX@qiN9A1hv3;2D<_v!N8dvS+x=Fenm4!8N_EuJc4*)#8y;)Pjm%0(|=4W-*<0`QP%EsidCV-rCyU?r*Md_P4eY{gjsE zQ4NXCR6ej$j;vEOfG_l1)a0%?h3zwDDEN}WM~Up$v9Xtg7=*tW=OoJd%4o+NLC z(n}+h`Vkfoifsk3V7VcRklGPQWpGGmmm$@}m~SPYutk&PB#6=m*o~{8OFn}sJl2TA zgV$sqjXPP!-gFQs<+r8NjK*lIqzC{C$gis&L^HGXX;xJcFn706b8yV>XbUA8rFR!z zD5(LBiU+{oth6c^O>3OoBb2F>OfJKV808>K74~bKO~w>TE$%g4WU5GoKe`h+Y{m?( z(l`3TEzHNJzstOS^-4%^E57!p(aKC-D;n?La8Q~T}M=tCCDPBq`t{xg^Z)fz)fEJFoUtvZB3 z-iCXV%K+-#yFKNc?`l{H*;`s)j-{cV=QV5aaJ%82P?pbGBEcnO2H zP0m{0a!zpd_|z8dQf}%!I}4;@Oz+(@jlvP3R4;zRUDs%f_Oqc{6fQLv@D`mp|7vjG$tw=v-<$sP@bVSSx&V0;9G$@=Rl7>;CRN0zHm5M1v z%E&l&*UysR?%a{;M_VjUtI*J@w?+oH%`yc<`B0l=bq?Cwvd-cPO2$OD*{xFLnk*6&ndOnE zOfzNov9%gKW5q3!Y+9fKFx#&bja6Hh8bBZeb(#QAYZN;OjE@#zz#D)y0700&Nrz;1}8V zkMh{sjFgUAUm`NLU%QJjSwb|+Bi3peE3PDPN}3I=evAJl)!3o;5PyGACwU7cz-XU+ z=Q;y38sTkKXs+A?H_HMV2-Qsl8qh!x+w8jdeK*s;%aNvxrSQwLHNE7P%WbdsnVV0P zYdbl>WJG4{8-T&AP%I29e-#MV254E{8FPtgnt95MYk^>`C?J3Qo_|9ju^mW_==G#wx{MwB7?i4DNFyjRTjB6JXR(i3L4SWBCy$x727T4+<= zu2uh69jX$jQf^ zD|jpu^8yaU!)EBuOlar@aTa+YD8_nSk`U77YOCJn2UtCXJ8i9ILffUwTAW3;9G%6s zxt)GIX{@SR8wKcMhVJ6KbSX=d1G-M9)6)>8|)f7}6 z>wYq1!(q0gA?y44h(UVF=YBY*v>a{p6%=Z0=kXP-ATJbr-PV$?)w(P9*d=3Zn6XG3%x-kS z?A`l!iCmRdVmff2YRTBTkA1PsvdIL`Nn+oKenlyv2^MQTt;REQ#We#Ns|#%9kFzQr zb)C#pLQ|MMR{VXBgp;kL8_2;&rBJzYrRFj;+!pX^w}ZNivf4EqrYa7JN7{>d&F<6h z8A)~s#gL70WRjzX35IywINDI^kX@m2q0=VGs~y;jAS)|5uZ)ryC0|)sgoE-h$28Y1 zQl%#IYvxf(0!$0TNuMv0{KGxKhuzGpQC{;RU6~^DUQ>CYHeLNlb_GPDt7*X;brf6x zgT-cesb4xqm~**|exLpW<8~zbHglJS2aOitqT)}yc#f5s%_A`B;MG?HeY*IB%dD<4 zUX)(USdR6&gcVepc;4iH$%I)~{CTVsz0D5Q2vMUZ+|4s9v-K(m04H?qJ_Nng7nwZY16l|tm*WsN;w2mxkd0%h)mW! zL`Bb-Rd`s&ky^_ZoJIduN9h9LRM;#{T!Zrp7wFYIZ=PfkIjd~iTES|IW_dFI*|Ok7 z{AK0TuXr@3Ll}x7g=pxN`@^cV(QIhzXxmCylJ$sIY_%0&%|X`ctK)Klg*aZawEB%t z{zfZduzsujY4!=JRBA2}0I%F*UNM;AnC97!gJa;rTF&^;vAfJ)z7K*hu7WBP7zk~# zpX*pz;$PlaSjw+7PDE~5cqL}WX-*2gHe#gg77M(xrlbqZmFBC=uI5C!Z=0hmXBiVu zK(4PmTUm3OY8JPtViNB@h!)%FSIR`abos7WeubhI)Xx$N?>o1I%p>n5*)Sm~Bv>;v zDF_8rFSNq>SW&Uql+?4CAx+Vj-Xn_Q6hxk>fi1kR(58_pD^2LEp*)XjM1jZ z%^nqt`D+|)Av9Ja$)jOnA+LenQF4;ossSM{RR_dylN9l$@`#AwjL%4YM?}$74CZS! zaCwYY-N1QT0|s$XE*7tGRGWBP>%FBZCc@&X)Dm+`kY<&L(a%5sT=qMP*X*bxjw9vX zVlE(~Mx$UYyJNW4JmpD|pqJDZ-$xm0udL)XYxRUx(tG(lEhCRLt9el>=Ft0v0&)p0 z_C_`-8iF5m6jJ^w!@T;@VG!(Po7&V1`n68|PT7p`VYZ7;;Hzsh!Y+Tn9eb{7YEM75 z%W7!Fy-^>~H{*f98!tw)Qz)CF57dfm@G5tl;M7&_Iiq1UXdRJntNM@In33@9qh$4f zd<^@b<|SjvK}7*tCGSl$-XC!bRGb_s+AYnKo>c=F`(<61xNNS`Ktv#2bgfJu{C|YK zZEW0EcBgq!E;EJNN~Ks;APIsHMT#pBf>wN~vf3~d(K0DZFg$L-5+y>&wDTbnq#!$R zZPU>po9StES^_OhHbD>wvb>XN47L{(mEJ5CyB{nmFPJYoXt9+nl3+8PCeuKG!EPWj zp(@5EGf8Tn=iH*~1l<{_Snn_Y`@iRR&hNb3bB}W%EpFt0)Xnn*uHvkH#Jwk1k`OvBQAh3Y_6pA zYe<6z5e$Q^TC3p7gr>1zW|#}}U(z!~){9LUF>3*$W@8pQ$!x07QO5{1JQBHP-Kv2Q z4cF@Ijr21nfmHPfzP5|G<{s4(K)NL`QQdQmKrvc7s}PO@u3W}c!=Z`afQACq9PWK; zr&RaiMr|K5L-d))S5H5ykL1J$BSlgt3kyhV?1KU~-rGZ-D#L(w5U8q+>e+f?f3>fd zvOJ1T|7t2MhL-t7tn`?Q0qfJ^(niooe`3~VldxZ+NyeF>!J1Ld92Td>Zz84><8VQC zZJlhe;-B&)s=6lWRkxSw?k~e;sXU5xOjc_k@|8*~gf z3JddV#<%Io&X1y%z~V?J>QWr(uyZ!0ACBH-!c)L+{>^8D1E#*Ak6Ps)LC^pBl&Iv-=M;5( z#Q5eFu!)@(n_%ap?_n#AtGc(>adR!nfD~&wb#f`UO4FocKjQywGP}29u@bZy4>w|1 z__q;wj>r|!X}ehZVUBh!t%P;P9P>>)w_D+ofU;V6>0K~vPhInYmm4H`m|4_d7#;Agq?Z>-*E zK?YjH#m%Q6Do86*%x=EYW)N?`ozN6v8Mvx~%*DV5ym?$% zE)A33<+j+-MhwXSQ71t2QksrDR}F~DCeTOZ#xS6E$E7ODtaZAUN5c@qGSTH`n9e6w zUn$NWnC2ZPHriQ&UPRaRNvtX!3`)%PU}JBbEoD=iu}nM%V$YvHhv3tw{Pz;^Ky zn~vK!x|L)cbIum=9C57Z3<840E_>lM0zJmQ=ne184WXhuqz)I(T|qtC)Dn_Fx^dwG zV;$=2S@3$s)mTGkh8fpz=qty1Aus(VX32!BYgv|hs?#~uLd&WfD6k^vhORv{S*LTZ z&+(+c{rbe-4DiK@?v1knCw{>=8`gyZo#9MJla2rnoT4GYy zi3tx}*NRe&QM;WgVw4rYA2mNr$1*Z$RtfYzq`Z=AFUg7wlTB=#;EJQBcX)-$4lsKn zI?IYuekLDQ{H*tRhU2RHN_f~f;?RDMu(V9veVO5FNZF1E?>F5;QstUh&*)x9e(2yK zFd|A&lAy+@W?>lVIK|Ay&N}Q_(eH0=bcOzJICV-kxsr&rY&X<$XT)Hb!-@IXrAjOSuyVgZ-rS2Y87Xl!rn!X2iij>G3&^$iuRrRwjkA zW=WAWlMUS#kXJTxV$UAtnR=4wB}HTg+`~R?NajZ*oJRQf%%#4pCx5zH?3u3$M)x;Aazc79LVh=oGR>URD z`|1G%BIU#w-ZmqeFh*6JZ`I%vz-K;2J2SW!dMUKi@E{tOy$%d~GdFs+#WT+2DAOby z9eeKRQ0BCd)2nr`y~7!-%-_(yio#4gpOdbfq%6e=^$0WTEeC*!K&3b5=Q(nZeqt{? zSyn4Sg1duVW?^nG$Ms`R)rs!jggbB!)Mwz(-8AHeVc@DA20xi z>{Uc{|G7YN05@LBI2OSE=c9ogAVlQ{`x<2!2fRfMk!B4yZx=44c(BC-daCyGD6C_3 zEAE1J_oFGJPe7OzhX9u}F{=bi#HR}I;fh}FTe`bAyrB11|7iH>t5>6P%HIohA$K^! zF#uc4Du=_Brjs)EP<-<$VQPwz-8Q%V+N%3`(hWb#U)lL3?h-m*t6p#ukoL<29B@K1Pm~B zhRF;ejDGh#5-IZy+bJM9Xnq&_AsUCYB*1ZRe0(9*#?za^Zvn0g_Qt&%hyMS8Ko zbJ-&T-{eg0=7;s9<1<+w{t_5|wKrIV3rb*Y!q8D|PTO>!W3K9wB8Fc=A-tC#2L z_jlHN8qE5{o+xzux}tM~-HD0r1aUwjf~9VXXaNZ1aW78948!fsEIjYVyrwq-aeats zhr$X59^(;=kXpfagpM*Ul=8)UKKJ4Y5ot}}Yk@%#XZISf{YV&70y@@Xlz`D)suo>? zUvZDq_1k!wpbr?PG7%>1X31#N0baM};`%ir!UND>Eoz{Qoto~?lYLp5N8285)I401=sIZX5neoz08UTT=Et(aF z{B;=%e_#`V1)yEE58o)m1(%!`^FLuLdDaNAhKPTUv>!7Gy( zXc@8^)}4VIG**#L`Y<9#Or|(?3msZ2FH&Sf&ioXG4n)`vFmNth5mLmQYGDuL`Vkld zCKsWg?3H+Y}@t; zH#N^1s{$t@@EhdTBrE(iP{=(Yij_Rb6W8=-tzK^5!oS50^^L$8+iJTGJlqe>`g{qf z0%(~pLkX06#SwS~HaRq}*>W;Rf3NNPpqeja3wfjG6qXB*uQkt|{71`_Iea^r&(h*q z?22+*Y9S#_XAVD(*&_=wukGOv2@V2FNw3CeX_2Zbq$w;U`0QhU>Ja`5c#UhVPsF5# zCc0fiE{N#7Y;{PN?0INc@*TZYTtbYk9yp2t1ZgS=ohbRYC{{k;w{R<;aocvG7ZkWd^orm5$X{tZauV^Na9g zqaIhsfgc_efAs}8>Nw8S3x3)MTo1VQs4PbIkj&nKI%fcBOy#&`bQ;RYZD{}b1@MO5 zkE|Lor&ue0obw3!MWwNsQL&)4hs+9 z%HEbBY`z9B1$V~!i{V)vM%86ofyE;iXeB-dAok&8uUbCcm>x{O)}cmkSgPj*L)a&C z$fpFAnZl$R*5gv0LW=`pk9q^*BL)gGNUBa}1(Wj1# z10_B4^;YB1JSPpv`H3-IQF!=pW~7X`DVl<&ESB0-5G-Q3xh-2d!nt6^i*pV3ZP&ho zt6(rrU7oo`I4rAn=3xE(9TnVorB1`VFuxuPakP2-K5;d`JgFB)@>n%!z3xb_u#ho@ zk}-huT3_mwPDDSbWVTZZEL&-(w}cmeVV?Rpiics+v>ATX-E@k}SFmfWPiaO4kx0XQ zDD_w!%~;^V9!}TRt{o>1!#&IpK~j3Pk_#;nk+oKcT?;U6cd1hlN0p2t;ywrZ$LbFX zTyq^IF;pQMb9uS&fje+fJMqEt3u}c`x8}4~O+36zDXp)khib$AruuSJ4G@iB$Detc z`Vf`CUKJLpMPM%{c%Y1v%!ifh1Qk(m#4&y@m{|_3T6VAEchVc!EpF#P&LB5~^MN3r z161=9bIgu8Eas#w%jk0q^jy9Kth8AbDpHZ}6zk3HP<0}-yix@!+^-i|FHM$=!_=@` zd(X+PVu40je}-Df!5)0sF&mjk9rHD;dVq7F^o&=*RAI2P@9kNC9`;u^SQ4gw;J1i+ zV6%#c_Ow8I))DNbt6lEw?IAx%ki6-+{0U6S6!{+)AMpT9&Xu3*p*+-7fR_3fM*%Xd zX~Nq@PjKIx32L7D)+=|D;282=wVYeyGLAUB+h*1TVVZSOBM*VzqZfN&krhdyFL`&x zh}7U7zgQd|tac#F9b-`BcIx5VHqawRiz`%6p+DfIlVob>$Oo*LMyHHkIH|rs{{ly< znQ~A;51qFvW|>>`3%DxT_f`JN2?ShnM&caP*|cN|80Lz*Lst|1jQ34d-(vYNU>Il< zKv*Mc(?J$?qXb>N3bw3N7l=AhFvQ%+xL_~Sk_iX9u)zgucw!hR`x3iCj3@{x5C50$ zq~hJ{L_P-~lcX=K_Q8;uzo@_w*~Vj%bpT&7tu5k{sfc;YJ4JlE0&2snrh@H9J^CL4`IEq(~pQJf{=$6LczRh<^*OX-U_3OO8r z)~8wzZ?4-;BN5Lr^A>&JCXOLvXZtp+9ytKSQqhF8$Y2-?i0eTX<%xyW=({psH|=ND z!vLd7tg(seVwfyllj_(Z_z+_%chcD#crFyeQP2r zTQ-jC1sfzvPg78es|i1oMQ$21}F- zMrAFALe_|Q>*d0Vjdm95ShQI2GAZhOD;J;V_<4*;Wz@_eT~uP3E0%^*r&y7V{iYtS z*`o79abEt%xaHYSOGR3j*U6!LC4Ln%1287sd-L z3MV?DUTt1XZvhh@3cU>2z#2G=|GxDzOd4g0C-Q54Fq^zSYm8lBUB^vVBk(?Oi<-Jw zYg&i!v3MtG$ZHf4-ASXYhxzdOHDW0I-^U~+d}6WFdpXFUTH$@;%UlbjxiBcw$XvnPd^i zL~t?87fQA@kCkj5VqK&qRFinoh4HLincoA*xAV&^JDCRG;4w-z3W1=$9(rrusvLUs z@PiGhriy?peZ?*dU2$8+n1E5ZF5i3pLHEg09*5s3uCwuVz= z8I)lMC6-klMxdb3E%(8|cCb6i9+CC|GXH=uiCdu?kv;({G}CK}tA+!i1;a|OcYU^( zSGg3=oRP%?-9W9{ChTP3ko$d8IUS>|la9>RQjEe=uwL3#*`Sd|bQCiYew{&-xyZs- zO?LK2f7nxx8_d}Kvwb5hebW86h)-cQ#qIDgYIwL~tmXCL4g^Sy3S9mefBOp=w0yz% zJlzVC>^ik&$biwoKAMtd^*t54`n89_wQyKisd^BBEeW( zG>u}Ehhx~#z$;I2>npyPZ^UFEoR58GL(Adt86UOZOAt!HL|BA43-AlX4f$Jqk6%W} z$Ns4*3?Y|+$M1{U_o=jXAsay&BQX4rXbTSrv|Iy_BKMXII1nq~xo`llXRcZfW15<` zsVoq;FJQ~(P}$SW>d%14hQP(AO9uk7nu`{|fyuGnn%+rBw#vG(pL;L}s%E$Ti?x7< zD)Y3%G2D@wR)J0$DIeE2uQ<2S{c#a5$E&ju%z z$)%rwJ{8sV%xxM2sp?>Qk%?0Wh6v$sKWgKQ<4|GpQ|9`>?p`k}G^6WaXwXH0Ulo(! z4S7X+7g2kn_ccbiM}7=*MO{5?5xi=31ELF#uo6CFZ-_L8P{rE9@d~R`_;Z{hF3K;% za~8lJ+|l}moI7N-WufjaqhR)2AInUaZ=EEu9<|ArBF&;hPO|km17)0}^AWQpU?W`d zq4D@k0rBc{5-BU&I!=Ysa1P^>onnD|ZOVPzn&p#G5Qfi-%msYQkLV%}gt?2tmdf{GQy7;z)^ zZ3WEU=wxC37zSt$N`;~w+=GQ-J&){5tEJM2EwZW~A)XWtz-WYk-U?9PfTN)`ESP4q zTU#g?EhFlQUOfx}Qn3O-8*OP~?<4Ew-yN z+A>6Zk0=eoX%2D*5RxAdjz=d8&#N;;G{>L!V0k@5s781NoGgz&u7=r*9fPz7g-aM z;0xr4AMgp&{d>5>9uD9k8d0gc-Z@8W$P1Qk1=Y9K;)P!pbW^0 zn5&iRc$ZE3{gc}Fk6xh1aYIc!T*DS-L+EGtFXq5o-wGZ8ZMF4OyltO`p&+ngE*Pxy zwnh#?SmE?RT&vW+eTKV1*KdsS7)q(@VDJR%aWMM%D$B?#bN9SGnMTy0Sc%9(*JZ9m z8H42wAgig;VY{=C-=#&G743^G?;r*{Ij_fAS0_`c7WR+0;gGCGUc)t<6)&WPS6LBv z?Ztk_U~vbXj#`4?t-q4lTF53Iueoidl8T#2VaL%M8N~A$oFHNeA)T4*Rc6wd*ozA{ zlg~jTmJu{k(L(m_Ima^7+rvT;6H=$7v-U+9)-(uA;3y)SfH4mZFB)n=9bpZFM<#+y zAXPt6Ba<2Hq+^q|NmfB&4~sAJR?x*EOK?;oRvyAVjTUh}jr@x{Z^a?;S!#xO#;yvk zp7|-A>Da$Aip5b4bAxrt=rG+TL!6wPgk-8zGz<_7Rtdj&8WP#cCMRVkRL*$G*bXao zL)QRDFgZ;su+w25Ty+Lt-h#f^X{u@-0^&j*r7(|n`I;VNT>8_;jalVYA*k^qz1kjFomp!JUHzo=`y!`?M`lB0Ai zqDKn<2^3x9^VXGOFZ;N=&1TK(_1pCDTxZS6sAevhs5wK_%&&aT&c)7AH4L0?qj)2t z0N5r48(14s<(=a3Lx z#eD7wj5D1xAUj zT#6b8DnVtMngM05&MKVxaWRE{1Ap>rDuH+)?%~i_)K<3N!kxm^IzUR*aWeel3?Rn9 zRpi$414cXRXc-Knb2ylF#)Y?_o@_cjosQ!nJ8_tMgH7g%!Xf*VLUzb+whA+7kb!w3 zrW}3QNELW>9LyHFu^g6;(uUG%!Cq2F#T7#WSbej{gVkK+E6jjko-g-$#E!+ztQkiD z=?Z%ukM<#!EuJeBM*?c#%gZPYJooX1jVlvDy=ch^UBB3YD$E={8qjb{xZvM&w?qKDVajNy{jwvlNYJiX5EJ2m)YCtIG7St z`KoW$z*wJ67A9^H0S8B3jLu-$0%`9DmBggA2DySzP87FVi5vzvd!`!TJl6^aFC0#$+R+?ptm7dJPNE47S>hyx_@|k z)-a7}0T509AY^7u(B1M=>KXYY+y|>A?67=P<&e>{k|VRs%)^XQ5V3t1JNKN9nxRi6 zUq}!`Q07G2^PUz@b>G7rrKSE*Vo1m*vMJuUI3&guRhTsff$oU>{4BROxXbuXK{qu6 zI+2s}jB02Bsf26lDk_^J$mjxQj=yf}b$adu%rI{Ikq+2q_>D+ta4&n(W3jPiShrX& zMb6z!;ULyJ9kJJ}4lR%B#6)N{Ab)FmUKu3^f%o>jig`wh>@izsou`;2Z@uGu8Dx(6 zVtjlP-a(1s+`xJsW2(4-LyFc^C7e7AYM_tkXhH2b%V<<0F<0svk%YBgB7-;-fYY5r zk)XMcYvVEswP|{JVcWcl@mkkS1?K^XV>VzQi~nizB2{Z);JDVp@fR08ym%+qGR+qV zBs)0ZbKKUKV+S~ETe79&Lm7ePFmUM|yfI_4_;E)uYT%AV&1Ta{7+Q1|U4Mr7VSWkp z-Mr~Ki4uO>8f&WtaM{u%HZ3^iksMeF2xbHtXk~0`Fq6h$mBPy~YGf<|dsJ^@c_?Io zZ-TtJxdstRd=}yn#^^x@W-nsX;R)ctY4M8BC*fno=g-MD3^0l27!ESA>Qfb|X(;q) zty35V0j_E25Q7N%zgx zMUInNuUt*LL?y`pSPL#iv}EGH>-%i>?ZIdJselsTa_JBg5lRD{;Rr(eF$OOzN+6;F zTqd>C&8z^0lzBM;#w}Htq*u+y)HG%{IA(Gk?}{d;!Q-AJBCOli%ORkg*^GIh@t`s2 zqq1Kw#FBy~iX^K>qcZV8xN%0h#TOlc7+qCUmbHhg=Cxz6wa+ke5j%DwBS|2MBCa!_ zyw7vkvGCUl%Oh9Pyih^XT@;MziZq`T68ymK4w53!5}7FQ*^95@nUT92;44#=6^WX% z>sU&5BCqD`d#v;yxkZS@tx4C`mT$5)(A}F}7_RkH1xq07T>+Fq^f^4`XVypz@+wz` zLlHt}^Zh}hlx2oP=7A9b@L-3m_r6#gSE^G6(mNU zggrwJs6oMc@#$i_O=W3u(LIsNSb>OQV#8k4xuE%vdx#j1+#uRekLH;~p0ZXNFZ9&+ zB?u8FZ`=@GIw_nS2Dcerp&}IFQ1+CQlP^>r?QJ{v<8d|b zq+P55k{`|!D->xMCbIz*2qF}bE&=5Ef*V%o(Sb25t&J`h=&X}QA}1GDbf3JPRz8E0 z0NTfs5Xu*B_y5~FK2cpY8TQDGK(IxWps}>iG6TL$W&rO2Ai z#{9>a%500+VT4GfCJL)W)zg5{#}ii0q}yP}ntoO>)Ztz=$Ps!nkbf9;j`L4E6n|r! z(kbpmH7Jy6e4GWdRV-^i#-YMj>zj|K6Wt*H(dl5Oj_qK8`ancem9-p%qe^rJJwtu4 zzp9|oxUU6ritaCL4Y_ePE6Ksl5SpDs7w=-GP&ei~QP1|s{_w6cCXOH-CwGlzIWTAP z(3DwED?e_f-U0F~EUJ@c2Bp(mofh;`R?js@?Zqlm@X?8k49_!iD&;zkSR zyM2Pl#>&mL6`IstrL`j&cK+2vT@mk@bEPzE#PL;$9AQvomNE?_{6|Go7hw^&-8XP+_h!0BC30#}TR`ib-9v6I(q~MHn?Z)@QW! z11SYn+B{aa5VqwqGN&EHmoua94tTV^V~GqB7;;xyJ;~9!;`Iby169Mvd(m4%e=n>K zD-K!cc^wM7C@9>SjaUTb4mdrmdx|xRLDoRitl%$3 zrB>PKni(sr8!Kd`|Vs%7DVVO^sg-}#4P6v-; zgDn%q$owsS#dn+#H}RE*&Orwkekg9C|F!++%)xw>UD`K%_V2Pa$i2D(H=WA#H z!S@l8SXsexl;aMY0^t;eap_wksT}<%i2c2V{plyV`o<@}k?TNTzAFbo+DzCe&6V2DD;|+iOZ zB?1#zCkMa<;dqc`yI_8qcufUi2J$wN5HfgG%ux4lBIP^DJeU0|&u8iFG>Imse!a(7n8 zH8rPPINFNF69dJ2${o~1$GItv6KChAR2mGQcr7dA4bsX+QE$3Vp7V5&4i13x=CiX)6^^BY;qS)Q=()nV30TmBw_izRW2RnltDsta}mvr#3 zsJ6v3Iu1d?X8;yJL%alVgb+HOBQEhVu){l#Das0ExOoQCvP-0HuY=YL7d%*3?AFxo z+R~qK1rLX7%tWcfkaHk)bPu&K07wkAIdW`xGY9Q_SyUZ^ZL^YKp}j;eLC0c}7!X)n zrf!OyeU&4L@qmg^QX)Ad@tkZx#D5$^*er%5uZ4jOg}vo5Z{{rM<5^m%E3~AwYPC;a zy1=2M1IiFOjI68s&oHPLl#eVp$z>;s+49s^13FkJY{3ETgaGMZ$k*B-KkSnL+P?(Y zG+uoN2q%Y13`5Oiaojvb8o|{80BI(xJI*Vv>eVW`QbNGg(3d)l+OH}~#gl`Vt zD314Wgf$po&XmORFm4f`QwHY!s*;{h$u%t4m3d7J!8xJQH!wu##83EN{U`%)!9=yH ztacftRz0QPLZ?%AK7sxpZJ(hzXB;I9Tg3D@n_q$(ewU*J>v6ChHfNOejS~j1^{53h zveiRD8{9J3C=6f#BzjGosA&s#qfpl4sr8{}|S1bHTl1dvNl=4~hs-(4-dtEozO@ z82U{|2?L}y(AS$bN5OveZdwC7s2NlNP2#8$ID%K%^T3)2phW2deQ2%YKb}pHzuyf2R6CBDL&$OJK$u0=vXk)4*c`oyt^UCCSQ+=w1< zCGj&Rdd8c3BiN)0{w*^%LW!+_5gKA!&lVw2u^QioC1k-K!O%JIkU4=)jJBt zsceRg97W2^sHu}LTr#d!yF_nOjmuTz85}#$QRCqOR#K*k0s)s<~pQ%IXpKO45rscP&2d zC-r1($ORHUx_40DJghZk}@%?ndhWTnWv+wFXx2$jXTT^@)$a7umg94rOjpq z#+M@aYAQr4W(TYs*FUj*&Of6Cm=B-eDl@ls`wiqz`T80D=HYk^n)r129s^W)mgk6m z5C^~m3AL;G)$YNiP}Up{@mpo=&2b}CKGu4KG3nn^)UqKFQN?ljW}U)?r8B2LxNxB_ zW6P&KAqO(YpOQ3k$bgz-FsZV5cpoQWPly;y%%X#gOAg}DaDP5*3rqL)+chAZ+PpIK z_i%uxuKuqSxC8@ZwGIEnxfDA75|1>)4O)6}d&l9-mGAQL+%JdI} zKV*N9C+9=ilQOM~dyp}J1)(v8!nFA;J6)|nddNmT9<9?ne@Zr1kGi*42h&vJ5MFW!b3SW}b8x321QKcHobhXF zjKG{2JSqm`5r-T9Jvcq^nh@k1n?XK~@;AfILq6fRgv<+UX4gACRF~UA%Y< zHPKaTS^P%5TIu3JlkkeInMGIB^IvW5t)i$>_xA9MyrVsw^bAzW%hCv>7cO!V_JNC? zIZ^%&mo-s}#s)tKu|1CM`p*Y1m`Ax7MQTc~xk{@_!xf+k;C329g)7M$e06%C^@+rH zQ*8wvbyHX2=FOYSHzh|X)Yzw{9y)staU~3zrdpqu+EC%>@>wJqxu(k=yFTjdDpP3J zxg+R&=9$wUeBPc(J!KY#(6_Ty7z}JTx*iN6XASiMAC6EViUGMT^UXM5$CUA;E}heyZzn19&Pfo^v34U$VyJn$-TkwEEd5H&(l13*>soTWYf^opsW4Y&=4(Q9&AJoT#> z#|zd8E+M7_GT=~0(6%0PxEmh1kpzx@nq38u*Dn8Cv*%lm!}32zVE4T%lQ5F$tL$tM zQX4XxML6V_J=m{Mec8{Km#?rgy|yp0#C(RR-crhya5e5RmAVAPxQ`5jzo-T?`NzHM zv9F|joYi|odk%z}g?ONF5!elysiXnOL@M7*Q*`>~60#b%Yu{v5!A&GxnPnYFdXvg6 zc?K*SZJQLNZA zT8wzZR1<(erajTCo^19LAqGk`L%+29y|ITzMov1Xn02+R z(ro}|>GTC|ln=P7S@cy_h#{3uTkEBat86OmG|A~@bR2yMIJ}N>IaXqzp8K-i=746;cbOSI zQi4G3rSlvedrrq_BnMM)j>CP4N653>E5yP9Nsfvtbc&-F)$tmpE_jS5CjwS~%BUI@en23Z_qAdIe;-?yHZ7iNlNP!xh*CR*cX;W zTYv#Hh@;6c6*=fB;|@#^Po;+sKIssxO~_tfg$~`KjY1j?vj8^qM{lPkB0e|QZmv~s zrZ+SP>zBW|ymoo*w&2i4kemZ4x3w3`H?3L`8|F~oHs(Kw%noK0Gz5iU`1{ZR8SH38 zEyh$qhc6LNaL+oYmYOo1)f?;>uzZ@&k0LLKzOhqe-iQ&^ByC!s zr*~d?=^W}n8^D1scFjs4|J>saFlaBn;>b)jg+&knTHwe}6K}1bbpK4Y4UwE{e{``q z)HChoyuEwS?5cNVzc+5}ASVzo(~W2kNgs!SlTSm(U^C?8d@(f}!?cMEwi7#=5Z_q} zCU=Ue9B-sDRHKA02lA@e*mO38m> zEp{xRfWB~%m?VBD{R~D01SW%|vn!{YYlRPC@pVW%7DD-_MgyM{D=;5qXyfwD4TzX# z0MWmU*spxk4v@vm*=i7$AzYKFGEB2b67zF*j@AU>kBWm9hT;dKfL=YkWOmtQ4@!b^ zj6=HGnPX>5bkiu48FR^$qOH(sMr^FJnFa*Dnc@b-RJ*`coenbSqjaK`PW}i5YTAO? z^DTfN@0ew-UhXc;etGshvspD)hM2v>F?-w~V1Sx=S3rz8e_5<(BDw@7_25+gdmPgk zSWv6-u*Y+=gCoP_kPvT+wk}<|M0A4aPmLo|-7ldf(UnO4>#rd3s|zh|&c4)M{Pg9Q zRsIY7(4vZe@$^_7i| z_WbOH^Rwr91L{1-c~=*SBdKM0=Xo;mLl>4VU?)}$-HTuL_;Yw-j6<+EB2`OyHs!7Xx4?I2QZG>57|-2?%^l^$zVMDSIF zBhxfB=|&`pSl)^5;`qXMWk{^N3Pa%4`uZ$UM|^`m3A+5v%WJSBec83J0UQ*F$e_@z z7CpCFcU*}NQ>Kng*@609u)xA7!jyB3J~_e~{2)Ncn6L}Pq|0bwB@vzwD_x6Ar-(d+ zXYf-73iQO@Zl&Y1UuIHz%uMK{E;#6F2j1gZdv?+t5ve1g z50kR1H5Ec4VLwM?9T0LCYXQ-{^Y&Bf8;9q7LnvI@29mHvM$4TJVr4Y644-bz5f!0t zFsy=OW_O(%gB=zxq=Ov_3ce7fM<`iPLfmeVRWpmP;)Zb8nuAwfYJahHZsC=e7S91# zju3}osbF0^Y^QFd)YV^bq5b1DCM8;^nV$d|O{{{EE}(%v&gZVg)|02`ZE5Uf#6TBr z3pU!SE90to^hNzLYgC9C5LJj>$?R5JW%rv40E1*M-`3=GfdtwA0d}?HnR&E{Cu6bo zGKgrs+;06P_J9-41VWWS)9EF9lntSta06wUR`KnlLYqJ*47yBV2ljn~zCk$f!}t&T zU?|4!=5_@Nq!1!}cEPZZ1r`DMt{cQbzNr?M@!YxvYHHy-^HH!cfc`h*TxH!MK66BL zrm#kL_*{f9S>3^|RP*EdSHr`PH?(^=_{Zo-C=zp}h82-f96fa3D{TDTXi z1U@X85)t_#o?N+s$7bYs1WYgooVY2z${3Rm`J{w{{V;^ z$xFrvy3j{~khhUQtK-GTyZm7*iuitf**uDP)wL${|3}C=NRvHBIi?O^MfRGV!Qo-~ zTC0UNt{6n@c!UGQvh3SaVSg8Pci~?35*wCY%K57S*ihn#r&m$2Tp$}r^h@CID&6Ng^w0W$PmfWD$^l=ZQw@Kt2`OMQ(yO|9%+t%=FbldoVJ`q> zOGX6h(_u^mnce+MJg`!t81U%Z4A60fRq=QT!EVGw7!xgqWvV~SX5djD#R|w(SPy}Z z;3^{*3|fg@VR>({Ajx|50@T|Y=r z^!`U6f%s`*g_^vY;Z&^vR^nBDPkOe3+Z;wAn3Jf$cLzZuuq*v;U5wjQMqnkfy(j<+ zP*I;B#8QyYHJb%1`Y%|DW~1O*`eHX^Pf(mehN`5ba7h(?5K%Wef@pD~7f)esNS!dO+JRP3`jF`RQxA;v$sVQm*IU2IfgmPCqUsmK?fliiTu+wxs zxJfzFUYa@9oO8KR{h;3gu=UE~1yXE89KZ0z*3uWxL06Ul##y|J3+de7M@C)Cfz=3m zCVt_lZ-bJCy{iyd{V`6rnr>uy`;WADM#SS8<-LSS{Wlk6!3t z;YNT12kF();w%-DoIAdrYuscasQ!`<7h}aoUF%?E&(1yc4X2;Do*Y$p1C-r;&Q45Y zCtx>JiS{i;4*g`Saq)**ihb^M<>JjNMtF>KPP5^d)&g6xMh(y{W2W@*OcyX0tc*1$ zV3C0+(322y{0!cNsey>IUM;(Scrd5y>@a-Yei8J0!Grjya1S|m1udw*Ut~nYaoOm5C%mnLZ3)bQlCBJWR&u8)wU&oplEd{V0M%yC)!^6m14f{w$v|h(zqJaki1D33ob?)jCJhAx7;adUxrxm`h&gb z$%`;2-mH_byuzyQn=CtJQ4r5vGX^wr9nmKq176~%-YP7B?a4Uq zg>(4k?Zq4)redf_Vn7|FFGS588Ee^mx#qFNBOyY6d3{54iUWGhl!HX2pd%^*8LH3QiBFR#_H$Y$|OZ~f88fB9$z#<7uo!x78&7skrc9T5HDb;sY+Z<*mT}7gK ztWkmcyYqv4meKVOCU^m#LmTi4*$BiMsq??J+PLS49mq~U&HC?xG^L+`*8iyUokps3 zK(sB|8IFqkt{pUT#S6A0rlBJE#Oln z?%y7QLmj@2SzCA4pOF1JJnC}TjyW6*O~-%H%OD=rkI*)e2813A9BR$8rg?JmEVkhy z@pg7siflB~$qPrA9cBWimL&dwNzy7V5Jid~%XCD5#sbMzCKtbYaX2H79d1VlQdMe-flWv2|93#FlREwc>W za~xN!9c^{rZ=Gwu^vciT`mPd*iu}T7vRlVP=aEq+e;av>KjfC0ki?fVI!^%KY42pt z!vxEXum%4dDG#9q`>>;8qk%Ok9y&Bcc2D4(F%#Bh^w=>3m3s?IOXm+Rjh#tjC})nu zg*N^jWEa7Rb=5*SqTI%=phgi(*RIhYC-aXGPmBw{#Nog*}%g8fJIFdYZV z=7Afc+(6ES?C4U=DWl|(Y+k;f)b1v^TZck0zY4um8f^=m#lXL z2K;UmE9}HkqdC>KZ{d9_vT^Cs`?baa1%-isP;tG+`DvbNH|Pr8?(!3ik`R+8=8OEQ ztJw^L!PKg!aZixbR8@yoAQ-6BI^l+pT~EoFyvk+C+`{}1e2|97h3CuiCHL(+s{;H7 zm;J{)ZNz0|g&u~iEt4F$@h@hcyF51#{MrydFQAnpe{2snUW;mfJc0qDHwY)n7Vdua z)-|P@o@_Y2$Ybdy)%UiU3HdaD5C0}mvj*?Jy>^fty}6q&K9y$4F zl0e|acCoGQp+o3TwBkhiTJHFA0Cm}?0;g!QM13y3Nkzy4E+i!^U6s|j*88Mn-%{%7 zg;HU4ee}%@&sO|mmm?yNjc4p?OEo1pw1-jyU{d%+gHwh{hj8BU&-ra)LR9OxkE)|= z&7mR7GW@XOw1|`bAc@=|lD>3_q(FH!P1%Em03KH$Gnx|ZHuPj&8)aN^p1ubX}G&FVGk6Y&*eFXVk+ z5rCU~Qh(MP4NX4}?KV+DHXCJM;3>K-&ZSoyiZ2hjiU^8oRyA_y(A*qaWdIbQaSI)! zb%1v!Rzn#biOO#k76g$GV(Xbvg%)E>26V}l=v7@p6e{#Bjae7~>kTE#S_ZT)G97x2 z9w)BBh{e0?xYX0ax6NM6_hVq)-|ICP~74O;5j z84a!asfxAL{?&a=${CwTo-syL3q=Zkru)DD_8@zvSFIxIQj3WmbsrZ1hTX4eYxohuAol^ z&^ZXH)jpvGNA>@;1#y#p0y%^jLQtUsQP+s9lC1oyxknAY%AO8z=*>4s3Cn;uc+?~i z!x2O*NqjJ$z8lR7+ETV7%FU-W4RTik|A6zWrX^A$8K zpRR`3=gKZ@KHsvGWf*1ZUK}V@#4+E$hHgd0Ub}{lZu$!mHCPV$T)BDq<~o_1y6cNV zYo@W=Cy7CaZp}+C5KSE?w%B5Z@kDFbeAMCGAePsjrp1O`REu-1`rHfc*_TbU=a7n( zi!!YK83|`s0X@`cpgqfIWb`KzN+0qDZ|}<}F&*k@|N+IPKEm}c?lFvYY|4$*GDCTss@BNE~*Z~-5M8#z-bTl6> zAF`LP;yK}OQF+W76c7U_PO%1C32kw%=OG5LhE|J+LzBT|d*Z&7O=HAnNmf_ij^CA^ z&1&Pd^aqt8r3uO5Mz&bEIu?~x$m9=@#o&;)kjI-!nxD*?FYaZ&;B$RJ^d0^8y!e^; zK{M!}0JCwMFQynjFth_ z?#0wXvP#HH18sJ+uO3mC+UP86E!Ry~khw|}?kFtR*!v3-X*^ZQxrT*R%h8-&E2`VF zvO@2PCaOurg_OMdLSlFj&#b2@eglilDLJ@VcwBjsYMYOqJbtvfxmkLg2DqE5k5cX7 zqX!QjY-~I{zLBc;H}2iL_t8D~YZ$oCEm?~(BCwRxM#B8=-4E&HG@?GuYMw3{gaW8= z`+#hx`ATde@pJWBr4^?TjrW#PBn!+!ltslELtx~4rUZ-w;lsoZibZx!Zl@_F&e{tM zUw%g$`C+HYP=U_#VFvOzU!H98pL72>m7g#R4DG<9RA*d|9x%K|sq&C0*v7*LLmO%8 z{>BEQ{OJDuxZ?JHok(*GkzT%_tgPj@CW6r-MAZf;zF<2->M)2n;^t!i(5+zPINAzX zu4xa@;_jz%gf;omP`*E2l`(PJdq^fae1M^F;Axs;wP;)6?iV>1{5G-0k!!x3RTepIFj=51e-aatV%JT}k=vRK+h7QhSoBj~_jHB!Wwvh!e0Cw7LQ*CVGB z1VmH|U3@mQe0?6DpDul^1$HbZ02Rn_7oIwpP^|`PkSZgZbZquLYTVWmsEcY-+-7^s z#X5JHMcbuUC8e&snTC`?1n)5tn97e+{n3*rjMSN_JxaxgkIE0K4^#2MgVMwLMmnm* zIZ71-@Zp-&%zZS)q&r)i<8<33>j+}RCFY9RC|F(JL_=81L`=wR)|nf|&r0rrQo1)I}6tk!{QH>~WCC38x>wzUlm6%5~ z!Q;mzq^yLV15v1gM~rNRl1+*jLz|WbYDGK0Z@#se7E!=RdY>c z4M{`R(8gmx%F4xM#>NoKH;6$Tq_{@ZWB;&L7?bJXH4z7f^9OIzuoCECWX-Ugx)SZL z(~B*DB_8<#I9$wEhBQ52-Y=-N`odBX(*XJtuE(q_U6z&p(*?$q)ZL7 zlLE(NToKbJ4rGo;D zzbvg|NGGfUeYl1#mepk!;_5A8I{Kt#&06Hgn|d1rzp>SCtfdoJEughe=fKsv$cihT zJc(T+ICyg{AXZSLk6^$0lehV}r1^T{>~Wk`RXbKztPP+OQu$#jqX9F@nke;;KW3`# z->=<6Eub8rM^4?nN@U?h*@tVTyQyfmwZg5EyOD%J^LSZMVh)}io0+>yP3nBkocV$p z5dAkdM+}C!k!KSEHWPZ7{p6ERkl50_G!6Pf z?Ry0VkyZ2xd+IuLx7L+^Pz;3bmm3yjhV+tA^GA(ty|dcsAZxi(A*Xptm_Zv6htwVKcHVT zJ!dKPajF;+)i$tu*vZ-cfOu|yns{AR!gyk0f!eDoU zNlT@trDvtxLR|CYGtC_M+fBu%PZ@9Z8D@?r)97a5Sw$~qv(J*{YfX6?L*^R9Rzk!d zpijrtuS)m*Pf$kpV39S=9QN%lTA>bQoEA)= zF4;5KF|WVw`xp>UpnkY}@174fAHnt^U~n-M(32-v4+N7w3k?0qqi=6)u=|2FGVqdH z_=?ooxXOjvvI-J<_NDMtbT6;;vrWb-L=IQG=1p6>4MK4T0|tGjrhPna-HKxH=#J=^33 z$G^$gchmHa9&tw_!re{I(=?}q;otpeW8<;sX>)Vqz7;{Rlgz~6D|UFaUYF)OS?yh6n-Pv(;46(GGMtzO}#gKPW4e{P&bc}nFA${`5w>@KMOdF!G zo0<+3KbvutcMHHniSs5)UEVL$gV0mkHjP zURGsl%(dr04IarDvK?eVjL!AyKBt2a_eHRINb)StcI#NfbZ~cfduwZJd-oZK>z&eW zWh*rqCnCvHJLRo3w7s*#J9Zs^Ds81{&Ifbs`?+P_d>_wWi1Xwr;qeY%#u$Td!eD%ZdpcCr?6w5wNd)$uCORqiwi*xqID9&Kd4#4QhB zV?(SJKJOoSvnZS4n;0gR{xLK89}z-r$1X>ekKN<*u(!AV{TF}a^49h?1A6?F5&ggC zKmAusb3DUHH`Rw-Q!wqMAYx~>lw||}YA+1R2)1B>aU;B6m0cTRf zY;dgf`Mp?OE?t6;4h?r!m)cAs;U@jP>Ri1}5Pm*k;j*rD+F)cvJ*G5``4YEiQKAsV zHa^r@XYMUY{{l>fZ_?A!MvhXq#~z(Ba7uxjW8 zZi?HECLI{2?t>~m@JIRcDJuu5mZpLe2pTyZ0CigV5&gJ62CWT;ciL;F(55#PV*`iW zutqq)N4$bwYCAC!>EGk*J=No5Vz!vd5X|qTw7s>n^C!yiIj*WayR-9$KD^*VCUSds z=lk6K%fI02Z^7s8Hluaa+uO`q_h)Z@k%k6}0Ow?((o18%sRr)DapNK0@BjwWxJwD z{(C;Q{r~iO|0%@$_j}#n+WOvmy}#St++ZgaO}lX~Ivr81WH5;O6RiX6bZFSsOqfFE zPUH<>2d%w~&UyWg222&WE82s~Yr5kWS^1q;dsF|9{ZLvlAQ8}OLOjFzg^j-`{+zT> zk6%qc$~c%LG{g1|!~Icag@?b$oFY&~8dw;q8>>>Scz#mo+1`~Sa0~T>zBFN%eF4kan*cXZ}h>|ue zAk~&71MJxPYyyNAQmCclPv4L`R(#TPs>UlZJfcQ5m)}dpVFeiQ^qLdtf9Ao-+(p&J z>}`J|{W#VD%MLb~T+Tt65$>jut>26J-I?WN@c8f!@Z5HoOlJ)0ueTG7V0P$Bm{Df6$$xVFs8n)wBv}dbQ|5%D z9;Oh4fyeL;_eUP%4$FUn=u7CEFqiEX`L&@KwDu9CA`OIL((zphDijqH$=I2>o!?Jo zK)J;LOFQYOnN#j!NmBaO4pWZV;FYZ%1RPW0Onx{0*tTyfJKvy^wHX&|J~R82dD{B(-rsF+f43J3XXiiketi4clhQ`{9&6-`hfd@3!@QYBqPNRA z0<9jctWpl&KzA1Ar=1qgG+y}ta}zb8NT9i85>8Syb{b&EOu@!D3Z zeRsoWQkmBVexvt`skxO7f3NrH*47{O{sk}WY<;iyw|ozTukWV}pa2rFkrHn7$M{u4 z1P#|{K4mx~*0-&8PEp-J<x%RMuxY9mP@Wn4S(+!nIzYQ4SAf1jax3i%Na5*e zhgHWR2zLltDZ8Eu5o9oblwLw*a_rxNnH6`oxjy`R=|?$Eo`s<}uy3UAq%mHNF%^5= zk*##(mwG!4=wEw6wzhkJ=lg*qXRR7CzWY?&UDHD`+Ee-@9mZF*&4dHf*T3=QPSYAo zs&Xd>(G*Sa1zbd1)kq6IzAA>571oh2rB`FLS>J%Vpf^mcA93|msYPu8^ppA6VKh#` z_fwTQz}k&66ATd4q^5&%Ol)4xT=CS_)^~e()&e50b8y2$AdJNw?}rv1B1Q7 zARdUK0;=xgcfi{nsJ@G1G^p} z84|p_;*%#FWBoydC?0IwPauh1jY0{k2=g3}eA73$afvlJL#*6UnxKe=$gyW}?paaa zuD0k}qD1Am3y4w0Th)Td=`L9F*PcDkOpwH%{pv3`I{_=zp>tz@YsP}KdCp^UP-)5= z7M_Y4XR(cx?W8*MaL(};U(C**^nR1s89=r9YWWWxb*k*3@^K?}x5w}cl{o#2W{e-L z*NiyEJ)%+{lZC9)QkkKn)%5h54) z0y*S^9<9L$vmwBqoa!g&u?<5EA4k-SY!yA9jCz%<5Xrpa1|$*h>;&v-_y+$YXW$hx zMF2z*W6FqPvg3{XAgaX=sK&tybHn_BKD%P!q_yo2#CzX#>CPg!I*-cZW1;&17H>Pbf08i)QCMl?|pD=2pv){U0C%>Wm%rT&UIeadqYk%`?q2u4ZP3 zl$^nuYQ%^c0Ox_RGJL!pdisTM_JN1r7OOevL*FK9i=V?7BZlJ66lc#KXP~1-b*93B z+reG?DigouY$K1y|A_nAE;x`=8MfuFO!>pk`B@PFYCw zs;Zzdeb!GcwOy~m{tZkU=M><}3bCDsvpny>IeteY^?e4TuB)kCw*D|xn77~?e~@4O zTSi^{-V>h9W1IO;F}C0B@l0*|JqGtBbqqGF`0N=OnGv(mCSZtM-)H8i7{&)6U_{l^ zz_n`#GwuMIX6;(~S8J8a#8HahT%Q+vZ-Ivh6y!kN<4ueX&2>I|#d$xbmhfJQNsR484@9A}?? z^I4wol#6X8@U_`rV7{0rKGFwbu!%N|0$k+?gA;`oGsABjcAi_u56Tc6;06~4Tlk>i zzi@-Uw)1-W+u-I)JS0fslgKOQ5QWh_Z#*mXs3Wd^eJTEH6De4V_>jXlPDI#w{(_k=w7c2L-3?L0z z(FQ+ZgvbV?=1Q&^Nf7XL_>9aM+V|1O@|vrX(DzVOaY@2|GDf4}!vyp0pH`4|I3K*bc`aSy(S!Huj?R ztgTfqlm9g*TYPLz;kS@p(fdqm@m(d6BacwZ>kLRK{YFYZvAzAr&{IPx`!D}lN-yp1 z{=w->^f$ion}6Q>7smO}ki^?JpZ;<0Z;Y+{x4>MqRKoeb#d;ccIwRVO?_KzybP3cp z&)A8BHO!})RC)H-1h$D>689=&_;O{+Xv|c03V6o)YxWbT&HMKp^HTLs10Ab&)&t%E-P2C&_Y z*CQnMrR|;X6A3)`i+|YrJA!~n>_;S3Hh2H;-m&d%u^V6d?8$w!6jPDw?yO*`LpX8e zlviR7@HT=gP4Ww;i(?R9y;I(>s`NG-L7tUtvo()bTb`3YdZ$bv1dMb$1Dg(RQ-(Y<8mkshh z-QE7vh=P{4zKTR_A`!e+E^|V@@ALnEQ)d?%*O}h&)7h~&41<_2#zF|iafC6(q#BPf zA>CF|HEu-+iAf~Kh@}f54ztU$)U+nOSTF4q;V@r5IS@=JL zoqdk=jysf@>^leOtjP{afx$Zlc?~I%?V|4mo8#>5-?3s13f7m6@8z<&%ymrqdJ{yz z$L1wcDN-s`*J&<6qwJC9JW;_!-XDADO!VD_@U`i0$;zmT$kx(9HltKOfOvtt9;AkD z3#j$@@CU4Q{uOO3B;?`0b2fvS66=n$;yUN$GwQM*Gvdx4K6zIkOU$41v-}zV#jF3z z&ktNlm$ZZ`kHZa*otMh{b-Ozr)Y+w{IU3q+n2unOLL2K2KFk^Za4B_=HBn1q_| zK*c#!d^s#f9N224+IF+99w*A5gOE6-;JwP8!IPi<@TCEMqw#1kV5!E3{r&+$Majcm zjt_sjaqX{JXzpHN%}pQw)9F0l!FCKo{1}Jm`1sYI0q@7h|91KhxCvpqT`K*j%-g|w zDzSL@2%+Lx6(pD!La_*5 zj%U_Z?uz6lzX}RQJh6zVwJ9!$@xa)jXIQ4o=xD!pjHba*85bjFNUY5eH2YCi-w6ns zWSpKk1rA$Q`!A=T^QBzjtE}E1pMIA)`TA#|_h9^Ar#~9w9#t>Gm`B5(A}7!a>6#e| z#O(3PfZyouW*;A1hgrT_Xo1{X-3)5r+hVT>>|=AyMC)v#SI&G&kM0`)e(?=gwma80 zBww`One}yl!Ew8@ej!O*Rz1yuQ5s`PhaYDL#0#4W9a%Wz#TA;(F%ztMe;5;Rj7Rj+ z(TFH$Oa~J%V)SYq&RqHU-P7+Lj>!aD93Ovj`q}Z(5d^G$1|G()ddmEqBAW!hJ#D5? z@(f@6T})?MJq7=6u=Y5@$x<_Gh+3LryFP>Wv(Uy@koNX*4j@$`sZcEB3U_Bd*mp@5 zrWSmiQL52v(rI4=sk+8S3QHenUrAck#aKcY5fg-gi0xxE<{X>H*zm&B;lZ-u*~BTH zl#a94&?UbR2Z$=Hm?z7hKY>g`!ji>-cKHF>3?abGXCsdnPvbXw-oRhf&@O9; z%izi350ls#3|t(BKN=3rT)V&p+;yX)!QfytBpHEo^Y$(d_x1+6IAL)W9T65~c>nVw z+~n8);uO#V{hyrv3}XKTN&KH5$$V9tp4PsgH{N3Rs5j^_r3aPHY_W_J*wzr{Aj%v>9*KT&!{ms-m z?`Y6wX*=A=De^thZ3THUEi2w&B1uwc^M^V7iDLB_{lSDJ@f}+ z`VqnV@$u2ui7=vA^}nx1PDW5kmuq+*quv4PoBd71r_UZB@vC`hq$!t6ycH@pG)X^|xa*2?U)CQ!gVd*cly-7Yg<=X0cL41sp;l!A@ zK+qeyTQeenM+n?)Lw8xW0+l5eJ772t^#IQwk7EW4#f{2PTpvP{*s@nOo$j zcP)z;FeJzcA|!E&l@0hF?eCdq<5J_U@a%n&Ml>58-!9nj)bi$?cQ)U#&Lda7XNTPi zjCB>&i2j_^Tg_2Ag+WS5L@*pEZ3Ze*9tKfioi>BkWV*x|;X>v(Kw;FitbNZB&PX}D zkP1iCMIgoJ(A7fq;ldF)Q)F|$D5o_`DiWjk&9_HnN;?#Ps^Y`B-yJbHE|PFW?kyTC zgk?rC&du;|Mt=7+e!btPv7gyt6=V2}8ZJYJze-nLn<(s3mx#Hi92J^zyqCRAyg&MQ zScBfnZ#H(^5h7JpENlk74Y5SY5oW>kE>;kJ%7K19Ebz)I1Ji;zP+N2pcEOt9D8}G& z0uDy|+$w8hzyse@D`gE3 zXVy+$HiuNL%``Bl!9}v;@fZctciG zKZI3K?C;I@v+EB@ncWLEk7WSzSO*utk=S#Wp?LQ2``GQXP9)?MT1RB#a58t>QBnm!*60AaJTuJBLoSdEBa=O_G`ra>86T{P8p{F{W!^8IfRvl{(CQ9i z%~1)_Cje#QHil2$r4nG0wM~v;MVs&)%ws6$LefZXV-Pwh(zF|OdyUVoVj0REt&^(j z>#}ljR>Oj)!idq~sbiM`4PxnsGxq9MN*TNAECmIT6`CWT%nC$}MBPH?k7MYRBO>(k zU`r=DZ@kFmo{LHs!T_d9n#(@I?>!&+8jz6*v%8P>tc07EkMKf$q3Wey`iMzkGRz*u zX`}sTPw*THVee?nJE+7u_v{LUgZG@Z4$|pPj*yg8SL!ll-Rv!FL3GNg2WXk|*o2i{ zL*HyhHkww^jBAzH_-HUU%od~~G1!NCIC5XCP;qZ}sb9FCBI|0qSfy?^YNgi{)a%{Q z^E}C^@YAGS47G5oY-$jFGqKP^Le+U|*Eh_2(N%`omc5{Q(9ZK*mkfRxRK;}2&n#}R z9&>!(IfLBF&#YkYVeLdE9HS_4`;XCe0(I~JJ{1PgRt@C&91=(tf`}@ZH*-E1Q16vH zu4bP;p%2+{(y0Ltq(R$KEm9F7iEtS-971zP-7jRyc<85Y% z*nEvm95S1mxMa4GUg*XshFOzQBZc9Cr9sx@o$<;C!P+3Z%rc?~Vyf_Byiy)-NUOyt z;savv6n2$$@Zmv~>Zaf&6o25|cZK2MAg*|i8K4W8l}GfzAq@uo@Qyj!<+DoWvucNW zHJ?1*6WBkHY~ z527F;yVXy$ds%n9GGuY%p{XH`cpi+8jDa@~F!3Nz_&gRm-v+~n9#JgG`BIh7fdP?D6Tt%;}zJv@=>wsph5h!Yn>p#QG2J37u zExxWth7~gNi5*DrvgS)GchSB&YFx&WS>7)>&y>_!8x@9SNffClje=XOy3t^F4_f6I z5^%a7W3;lRVLAc@1p=1p*(SwF$OZ;UwqOk{-72w($ED)Xcqko$MsG`_Mim(*woHAZ zK~A?@tDLnGl^XrPkBp?ls?mQa!8!s>Ia0Hb=io2LR$IqYYK$CDX-Ag}o|yuB<0hW8 zkA+Ic8sma0d9iYrq10H;$Ad?RcZd@)zc&PVv*tl6870s?ing<+VeP=(Lre$Dp%aa! zy1=M;ECWK;RmmWIcCAYVX`xfv^(x$@Ou-#j*WU9|DIAKmMYDXWS5hd0pbWvUyuTV+ zrCMZ|ZAd`}9>Ne7L}rcqseOwvLU*|m5DL2@?FBVLkWd{j;_RwfC^%U~(qjq^7NUj( zT;oo+-jgcz#-37;km94=(q6%Obv&R1$)h&r1C_~%oyG#A02s!|n#r>QnIUzoPS@M? zrNyS@CbuqX$#u_@6YWi5!NJ;~x9ARSbc4@WaTkz?P+ZQs4S8>XK~N|X%V?CP zVRkNwMb>8s^`Xab$GZ(`I9Voi%P4K3E;l5~l)hWgNsS}Q8E@Qo4*m6zALfQaf#%oi z9ZRxOU5wQ!;mL;bu8@8xqOG#J@&UVqB3tY#WQ**-Gd}{q^mHk%v0;7x2ATE!3n`}Y;`hpgh zcOyXrjdW^Aa2Z693u__|__nkBJn_cZBq=(M(@YEd#cqT&-C%2WKHHj~)l z#tPk?dpkR(8rf#XS{goDb6JTd4HO0O*{->9s;`DD=t#)2?^o>LL0&Z1`FG^|+kNcD z^I>l(n0h_B(k&p7o{A+_NO=YSC_^-m3bHBa-U*!F z4v0tw>dT5P{XX+dAhQQ6VanKXEW>7{Pf$G@XrohmoW6HD+jWcTVix5w)Z-!d;X085 zp>Ur(U^|?EZ9QT&=9~uITrgj;EaJmOQM~e8eu6c20yUff8M_u`T)Auy1bP_R$0+(g zq(&O0WqQ?6lUo1u5_kUW`TSW&@NDhx?4%$IBv-jaA3Agu?u|7DaS>O%q@9h7^Zt0n zpGRl03U_;noiCENy%IH`{3+x{nLo^YF>edbo3D5~;hmcLn8jjMum2PkdSbFtvsn$P z{C@@dLUUAkv;|*-M?|9~1mTB1{1SH*jF}sX>Zk-sFC`ty8CuH7=v*`J1@%0-Fwnpw zYP0O=wt2J04(PV@;AP8#oqK>WdS;yq{eawc!6eA+FdN8s5wUhkV$U%Xg$>2~$(Q(zu667s>=}AyuhPxVVd}`dVIsl9-8TlF zf)=9&RW>f&+bL_!z`fbkVvDL9@XBsD%VHGIvoTQ|V%F?pt)qqFtyG(-gC0uo@{m>hW+tw1l}pQ4K?Oj_{+Xzl^h8=YEHPhQ zY?D7f;Xbe*>EY>e^9eLw@jkQ~cwXBecnd@9L_kQasUG`{4vdi8QHx$(3 zjipm5pKs55LxEh5&$Oz~=yywZccGfwpq3l`OQ@*cM(1xbeco#oeu>k{?9am5`LJ~G z2N&tk5?UY#RUe#UzOq-mn+ABI-yoQ@H&(JR+~3D`S$4?eDXZMvytjGpR&Y_;B;Dj6 zy}gM=a#q8T`i6N=jc#cAiJumzS1H_kP0gZ$pE%0H_}uLEJ`}fRCfZeb zrv`rY9v3EEHVeqB!U{>hjNTP>W`7Fcs;5(# z$5sAWT?|t_!V1;^u3`&~LHW;>%Hm!52s!So5a$J3eTR}@LRv&ugY@c+`p%Em&1x#WIl?(gvBN(-vY^GBL#pH#=sf;P`H6wuoink z*o2m%il;yfY41NOiBEJ$e=V!EH)BB8Uy9nv8^5BX@&xjNo`(@g`toR>!c5hc;j^$- zw16D`dhceBj)}r_hmEt+=LcG*&x_OQZ!;^^HglE1SEs?5K(%*gMagdng3q%_7YMBK z%OA)c>Xn#fSunaR$V5hBKQ{4CGt)&PXR*qOC$Q49rt%hAkvm4`Bkk$QGjH zG@us!7l_{6&@ffVz+kHh-Z!5Q_~efadf`@T7}H zcpF0R2o43$n$*mJ!X5&!@u-~7Lei3@rM$p6mg=h97qd&iBGAw>^Xj; zYH-5LwNC2Q6E%^V9X>gN#9S$b_B4wYjNVCwUxVFM#UQZ_rBSvZ*(e0WpyU%h4OE}Z zW?5t3#;b@;4xwEZF}Hd6^J|%!wvAow{qUpNd&%HvY+^hOg4T19)rCS zAHZ3`N4PDptf-~t>Z@&j`?Z*Q?OYRo7@}^u-RP2^0RX&6kt^te~UUX z{(NGU_9Qdwa(!K&#Jci*8}4|~Kc3eBWUZau3&!5jGe+OxfN9D?-Z)v_>e{hd%b!gpaXJ0axX90kN=@ zru-eayckFmwTTycglm4e?`JSYbb<-&@Sa5cH+I{Z19ib00UrqDyJimzb~*6KUPcq$ z+SsVX`JUmJe$~$vsnD=6} z{s4Ok4n;S_Rttvu3n@P|iU00I**<-e&B7q%l(O$?J^P{>U9swkrjUzS32tfp1Y|{i t2RuCTbMRu%D7pifIE+~PGW@Z#5uI$W>9yt_0;3HyQ&7s6>)`j7{ts +#include +#include + +#include "../../../ntoskrnl/include/internal/v86m.h" + +/*#define NDEBUG*/ +#include + +#define RT_BITMAP 2 + +typedef struct tagRGBQUAD { + unsigned char rgbBlue; + unsigned char rgbGreen; + unsigned char rgbRed; + unsigned char rgbReserved; +} RGBQUAD, *PRGBQUAD; + +typedef long FXPT2DOT30; + +typedef struct tagCIEXYZ { + FXPT2DOT30 ciexyzX; + FXPT2DOT30 ciexyzY; + FXPT2DOT30 ciexyzZ; +} CIEXYZ; +typedef CIEXYZ * LPCIEXYZ; + +typedef struct tagCIEXYZTRIPLE { + CIEXYZ ciexyzRed; + CIEXYZ ciexyzGreen; + CIEXYZ ciexyzBlue; +} CIEXYZTRIPLE; +typedef CIEXYZTRIPLE *LPCIEXYZTRIPLE; + +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, *PBITMAPV5HEADER; + + +#define MISC 0x3c2 +#define SEQ 0x3c4 +#define CRTC 0x3d4 +#define GRAPHICS 0x3ce +#define FEATURE 0x3da +#define ATTRIB 0x3c0 +#define STATUS 0x3da + +typedef struct { + ULONG r; + ULONG g; + ULONG b; +} FADER_PALETTE_ENTRY; + +/* In pixelsups.S */ +extern VOID +InbvPutPixels(int x, int y, unsigned long c); + +/* GLOBALS *******************************************************************/ + +char *vidmem; + +/* Must be 4 bytes per entry */ +long maskbit[640]; +long y80[480]; + +static HANDLE BitmapThreadHandle; +static CLIENT_ID BitmapThreadId; +static BOOLEAN BitmapIsDrawn; +static PUCHAR BootimageBitmap; +static BOOLEAN InGraphicsMode = FALSE; + +/* DATA **********************************************************************/ + +static BOOLEAN VideoAddressSpaceInitialized = FALSE; +static PVOID NonBiosBaseAddress; +static PDRIVER_OBJECT BootVidDriverObject = NULL; + +/* FUNCTIONS *****************************************************************/ + +static BOOLEAN +InbvFindBootimage() +{ + PIMAGE_RESOURCE_DATA_ENTRY ResourceDataEntry; + LDR_RESOURCE_INFO ResourceInfo; + NTSTATUS Status; + PVOID BaseAddress = BootVidDriverObject->DriverStart; + ULONG Size; + + ResourceInfo.Type = RT_BITMAP; + ResourceInfo.Name = IDB_BOOTIMAGE; + ResourceInfo.Language = 0x09; + + Status = LdrFindResource_U(BaseAddress, + &ResourceInfo, + RESOURCE_DATA_LEVEL, + &ResourceDataEntry); + if (!NT_SUCCESS(Status)) + { + DPRINT("LdrFindResource_U() failed with status 0x%.08x\n", Status); + return FALSE; + } + + Status = LdrAccessResource(BaseAddress, + ResourceDataEntry, + (PVOID*)&BootimageBitmap, + &Size); + if (!NT_SUCCESS(Status)) + { + DPRINT("LdrAccessResource() failed with status 0x%.08x\n", Status); + return FALSE; + } + + return TRUE; +} + + +static BOOLEAN +InbvInitializeVideoAddressSpace(VOID) +{ + OBJECT_ATTRIBUTES ObjectAttributes; + UNICODE_STRING PhysMemName; + NTSTATUS Status; + HANDLE PhysMemHandle; + PVOID BaseAddress; + LARGE_INTEGER Offset; + ULONG ViewSize; + CHAR IVT[1024]; + CHAR BDA[256]; + PVOID start = (PVOID)0x0; + + /* + * Open the physical memory section + */ + RtlInitUnicodeStringFromLiteral(&PhysMemName, L"\\Device\\PhysicalMemory"); + InitializeObjectAttributes(&ObjectAttributes, + &PhysMemName, + 0, + NULL, + NULL); + Status = ZwOpenSection(&PhysMemHandle, SECTION_ALL_ACCESS, + &ObjectAttributes); + if (!NT_SUCCESS(Status)) + { + DPRINT("Couldn't open \\Device\\PhysicalMemory\n"); + return FALSE; + } + + /* + * Map the BIOS and device registers into the address space + */ + Offset.QuadPart = 0xa0000; + ViewSize = 0x100000 - 0xa0000; + BaseAddress = (PVOID)0xa0000; + Status = NtMapViewOfSection(PhysMemHandle, + NtCurrentProcess(), + &BaseAddress, + 0, + 8192, + &Offset, + &ViewSize, + ViewUnmap, + 0, + PAGE_EXECUTE_READWRITE); + if (!NT_SUCCESS(Status)) + { + DPRINT("Couldn't map physical memory (%x)\n", Status); + NtClose(PhysMemHandle); + return FALSE; + } + NtClose(PhysMemHandle); + if (BaseAddress != (PVOID)0xa0000) + { + DPRINT("Couldn't map physical memory at the right address " + "(was %x)\n", BaseAddress); + return FALSE; + } + + /* + * Map some memory to use for the non-BIOS parts of the v86 mode address + * space + */ + NonBiosBaseAddress = (PVOID)0x1; + ViewSize = 0xa0000 - 0x1000; + Status = NtAllocateVirtualMemory(NtCurrentProcess(), + &NonBiosBaseAddress, + 0, + &ViewSize, + MEM_COMMIT, + PAGE_EXECUTE_READWRITE); + if (!NT_SUCCESS(Status)) + { + DPRINT("Failed to allocate virtual memory (Status %x)\n", Status); + return FALSE; + } + if (NonBiosBaseAddress != (PVOID)0x0) + { + DPRINT("Failed to allocate virtual memory at right address " + "(was %x)\n", NonBiosBaseAddress); + return FALSE; + } + + /* + * Get the real mode IVT from the kernel + */ + Status = NtVdmControl(0, IVT); + if (!NT_SUCCESS(Status)) + { + DPRINT("NtVdmControl failed (status %x)\n", Status); + return FALSE; + } + + /* + * Copy the real mode IVT into the right place + */ + memcpy(start, IVT, 1024); + + /* + * Get the BDA from the kernel + */ + Status = NtVdmControl(1, BDA); + if (!NT_SUCCESS(Status)) + { + DPRINT("NtVdmControl failed (status %x)\n", Status); + return FALSE; + } + + /* + * Copy the BDA into the right place + */ + memcpy((PVOID)0x400, BDA, 256); + + return TRUE; +} + + +static BOOLEAN +InbvDeinitializeVideoAddressSpace(VOID) +{ + ULONG RegionSize; + PUCHAR ViewBase; + + RegionSize = 0xa0000 - 0x1000; + NtFreeVirtualMemory(NtCurrentProcess(), + &NonBiosBaseAddress, + &RegionSize, + MEM_RELEASE); + + ViewBase = (PUCHAR) 0xa0000; + ZwUnmapViewOfSection(NtCurrentProcess(), ViewBase); + + return TRUE; +} + + +static VOID +vgaPreCalc() +{ + ULONG j; + + for(j = 0; j < 80; j++) + { + maskbit[j * 8 + 0] = 128; + maskbit[j * 8 + 1] = 64; + maskbit[j * 8 + 2] = 32; + maskbit[j * 8 + 3] = 16; + maskbit[j * 8 + 4] = 8; + maskbit[j * 8 + 5] = 4; + maskbit[j * 8 + 6] = 2; + maskbit[j * 8 + 7] = 1; + } + for(j = 0; j < 480; j++) + { + y80[j] = j * 80; /* 80 = 640 / 8 = Number of bytes per scanline */ + } +} + + +static VOID +InbvInitVGAMode(VOID) +{ + KV86M_REGISTERS Regs; + NTSTATUS Status; + ULONG i; + + vidmem = (char *)(0xd0000000 + 0xa0000); + memset(&Regs, 0, sizeof(Regs)); + Regs.Eax = 0x0012; + Status = Ke386CallBios(0x10, &Regs); + assert(NT_SUCCESS(Status)); + + /* Get VGA registers into the correct state */ + /* Reset the internal flip-flop. */ + (VOID)READ_PORT_UCHAR((PUCHAR)FEATURE); + /* Write the 16 palette registers. */ + for (i = 0; i < 16; i++) + { + WRITE_PORT_UCHAR((PUCHAR)ATTRIB, i); + WRITE_PORT_UCHAR((PUCHAR)ATTRIB, i); + } + /* Write the mode control register - graphics mode; 16 color DAC. */ + WRITE_PORT_UCHAR((PUCHAR)ATTRIB, 0x10); + WRITE_PORT_UCHAR((PUCHAR)ATTRIB, 0x81); + /* Write the color select register - select first 16 DAC registers. */ + WRITE_PORT_UCHAR((PUCHAR)ATTRIB, 0x14); + WRITE_PORT_UCHAR((PUCHAR)ATTRIB, 0x00); + + /* Get the VGA into the mode we want to work with */ + WRITE_PORT_UCHAR((PUCHAR)0x3ce,0x08); /* Set */ + WRITE_PORT_UCHAR((PUCHAR)0x3cf,0); /* the MASK */ + WRITE_PORT_USHORT((PUSHORT)0x3ce,0x0205); /* write mode = 2 (bits 0,1) read mode = 0 (bit 3) */ + (UCHAR) READ_REGISTER_UCHAR(vidmem); /* Update bit buffer */ + WRITE_REGISTER_UCHAR(vidmem, 0); /* Write the pixel */ + WRITE_PORT_UCHAR((PUCHAR)0x3ce,0x08); + WRITE_PORT_UCHAR((PUCHAR)0x3cf,0xff); + + /* Set the PEL mask. */ + WRITE_PORT_UCHAR((PUCHAR)0x3c6, 0xff); + + /* Zero out video memory (clear a possibly trashed screen) */ + RtlZeroMemory(vidmem, 64000); + + vgaPreCalc(); +} + + +BOOLEAN +STDCALL +VidResetDisplay(VOID) +{ + /* + We are only using standard VGA facilities so we can rely on the HAL 'int10mode3' + reset to cleanup the hardware state. + */ + InGraphicsMode = FALSE; + + return FALSE; +} + + +VOID +STDCALL +VidCleanUp(VOID) +{ + /* + We are only using standard VGA facilities so we can rely on the HAL 'int10mode3' + reset to cleanup the hardware state. + */ + InGraphicsMode = FALSE; +} + + +static __inline__ VOID +InbvSetColor(int cindex, unsigned char red, unsigned char green, unsigned char blue) +{ + red = (red * 63) / 255; + green = (green * 63) / 255; + blue = (blue * 63) / 255; + + WRITE_PORT_UCHAR((PUCHAR)0x03c8, cindex); + (VOID)READ_PORT_UCHAR((PUCHAR)FEATURE); + (VOID)READ_PORT_UCHAR((PUCHAR)FEATURE); + WRITE_PORT_UCHAR((PUCHAR)0x03c9, red); + (VOID)READ_PORT_UCHAR((PUCHAR)FEATURE); + (VOID)READ_PORT_UCHAR((PUCHAR)FEATURE); + WRITE_PORT_UCHAR((PUCHAR)0x03c9, green); + (VOID)READ_PORT_UCHAR((PUCHAR)FEATURE); + (VOID)READ_PORT_UCHAR((PUCHAR)FEATURE); + WRITE_PORT_UCHAR((PUCHAR)0x03c9, blue); + (VOID)READ_PORT_UCHAR((PUCHAR)FEATURE); + (VOID)READ_PORT_UCHAR((PUCHAR)FEATURE); +} + + +static __inline__ VOID +InbvSetBlackPalette() +{ + register ULONG r = 0; + + /* Disable screen and enable palette access. */ + (VOID)READ_PORT_UCHAR((PUCHAR)FEATURE); + WRITE_PORT_UCHAR((PUCHAR)0x3c0, 0x00); + for (r = 0; r < 16; r++) + { + InbvSetColor(r, 0, 0, 0); + } + /* Enable screen and enable palette access. */ + (VOID)READ_PORT_UCHAR((PUCHAR)FEATURE); + WRITE_PORT_UCHAR((PUCHAR)0x3c0, 0x20); +} + + +static VOID +InbvDisplayBitmap(ULONG Width, ULONG Height, PCHAR ImageData) +{ + ULONG j,k,y; + register ULONG i; + register ULONG x; + register ULONG c; + + k = 0; + for (y = 0; y < Height; y++) + { + for (j = 0; j < 8; j++) + { + x = j; + + /* + * Loop through the line and process every 8th pixel. + * This way we can get a way with using the same bit mask + * for several pixels and thus not need to do as much I/O + * communication. + */ + while (x < 640) + { + c = 0; + + if (x < Width) + { + c = ImageData[k + x]; + for (i = 1; i < 4; i++) + { + if (x + i*8 < Width) + { + c |= (ImageData[k + x + i * 8] << i * 8); + } + } + } + + InbvPutPixels(x, 479 - y, c); + x += 8*4; + } + } + k += Width; + } +} + + +static VOID +InbvDisplayCompressedBitmap() +{ + PBITMAPV5HEADER bminfo; + ULONG i,j,k; + ULONG x,y; + ULONG curx,cury; + ULONG bfOffBits; + ULONG clen; + PCHAR ImageData; + + bminfo = (PBITMAPV5HEADER) &BootimageBitmap[0]; + DPRINT("bV5Size = %d\n", bminfo->bV5Size); + DPRINT("bV5Width = %d\n", bminfo->bV5Width); + DPRINT("bV5Height = %d\n", bminfo->bV5Height); + DPRINT("bV5Planes = %d\n", bminfo->bV5Planes); + DPRINT("bV5BitCount = %d\n", bminfo->bV5BitCount); + DPRINT("bV5Compression = %d\n", bminfo->bV5Compression); + DPRINT("bV5SizeImage = %d\n", bminfo->bV5SizeImage); + DPRINT("bV5XPelsPerMeter = %d\n", bminfo->bV5XPelsPerMeter); + DPRINT("bV5YPelsPerMeter = %d\n", bminfo->bV5YPelsPerMeter); + DPRINT("bV5ClrUsed = %d\n", bminfo->bV5ClrUsed); + DPRINT("bV5ClrImportant = %d\n", bminfo->bV5ClrImportant); + + bfOffBits = bminfo->bV5Size + bminfo->bV5ClrUsed * sizeof(RGBQUAD); + DPRINT("bfOffBits = %d\n", bfOffBits); + DPRINT("size of color indices = %d\n", bminfo->bV5ClrUsed * sizeof(RGBQUAD)); + DPRINT("first byte of data = %d\n", BootimageBitmap[bfOffBits]); + + InbvSetBlackPalette(); + + ImageData = ExAllocatePool(NonPagedPool, bminfo->bV5Width * bminfo->bV5Height); + RtlZeroMemory(ImageData, bminfo->bV5Width * bminfo->bV5Height); + + /* + * ImageData has 1 pixel per byte. + * bootimage has 2 pixels per byte. + */ + + if (bminfo->bV5Compression == 2) + { + k = 0; + j = 0; + while ((j < bminfo->bV5SizeImage) && (k < (ULONG) (bminfo->bV5Width * bminfo->bV5Height))) + { + unsigned char b; + + clen = BootimageBitmap[bfOffBits + j]; + j++; + + if (clen > 0) + { + /* Encoded mode */ + + b = BootimageBitmap[bfOffBits + j]; + j++; + + for (i = 0; i < (clen / 2); i++) + { + ImageData[k] = (b & 0xf0) >> 4; + k++; + ImageData[k] = b & 0xf; + k++; + } + if ((clen & 1) > 0) + { + ImageData[k] = (b & 0xf0) >> 4; + k++; + } + } + else + { + /* Absolute mode */ + b = BootimageBitmap[bfOffBits + j]; + j++; + + if (b == 0) + { + /* End of line */ + } + else if (b == 1) + { + /* End of image */ + break; + } + else if (b == 2) + { + x = BootimageBitmap[bfOffBits + j]; + j++; + y = BootimageBitmap[bfOffBits + j]; + j++; + curx = k % bminfo->bV5Width; + cury = k / bminfo->bV5Width; + k = (cury + y) * bminfo->bV5Width + (curx + x); + } + else + { + if ((j & 1) > 0) + { + DPRINT("Unaligned copy!\n"); + } + + clen = b; + for (i = 0; i < (clen / 2); i++) + { + b = BootimageBitmap[bfOffBits + j]; + j++; + + ImageData[k] = (b & 0xf0) >> 4; + k++; + ImageData[k] = b & 0xf; + k++; + } + if ((clen & 1) > 0) + { + b = BootimageBitmap[bfOffBits + j]; + j++; + ImageData[k] = (b & 0xf0) >> 4; + k++; + } + /* Word align */ + j += (j & 1); + } + } + } + + InbvDisplayBitmap(bminfo->bV5Width, bminfo->bV5Height, ImageData); + } + else + { + DbgPrint("Warning boot image need to be compressed using RLE4\n"); + } + + ExFreePool(ImageData); +} + + +#define PALETTE_FADE_STEPS 20 +#define PALETTE_FADE_TIME 20 * 10000 /* 20ms */ + +static VOID +InbvFadeUpPalette() +{ + PBITMAPV5HEADER bminfo; + PRGBQUAD Palette; + ULONG i; + unsigned char r,g,b; + register ULONG c; + LARGE_INTEGER Interval; + FADER_PALETTE_ENTRY FaderPalette[16]; + FADER_PALETTE_ENTRY FaderPaletteDelta[16]; + + RtlZeroMemory(&FaderPalette, sizeof(FaderPalette)); + RtlZeroMemory(&FaderPaletteDelta, sizeof(FaderPaletteDelta)); + + bminfo = (PBITMAPV5HEADER) &BootimageBitmap[0]; //sizeof(BITMAPFILEHEADER)]; + Palette = (PRGBQUAD) &BootimageBitmap[/* sizeof(BITMAPFILEHEADER) + */ bminfo->bV5Size]; + + for (i = 0; i < 16; i++) + { + if (i < bminfo->bV5ClrUsed) + { + FaderPaletteDelta[i].r = ((Palette[i].rgbRed << 8) / PALETTE_FADE_STEPS); + FaderPaletteDelta[i].g = ((Palette[i].rgbGreen << 8) / PALETTE_FADE_STEPS); + FaderPaletteDelta[i].b = ((Palette[i].rgbBlue << 8) / PALETTE_FADE_STEPS); + } + } + + for (i = 0; i < PALETTE_FADE_STEPS; i++) + { + /* Disable screen and enable palette access. */ + (VOID)READ_PORT_UCHAR((PUCHAR)FEATURE); + WRITE_PORT_UCHAR((PUCHAR)0x3c0, 0x00); + for (c = 0; c < bminfo->bV5ClrUsed; c++) + { + /* Add the delta */ + FaderPalette[c].r += FaderPaletteDelta[c].r; + FaderPalette[c].g += FaderPaletteDelta[c].g; + FaderPalette[c].b += FaderPaletteDelta[c].b; + + /* Get the integer values */ + r = FaderPalette[c].r >> 8; + g = FaderPalette[c].g >> 8; + b = FaderPalette[c].b >> 8; + + /* Don't go too far */ + if (r > Palette[c].rgbRed) + r = Palette[c].rgbRed; + if (g > Palette[c].rgbGreen) + g = Palette[c].rgbGreen; + if (b > Palette[c].rgbBlue) + b = Palette[c].rgbBlue; + + /* Update the hardware */ + InbvSetColor(c, r, g, b); + } + /* Enable screen and disable palette access. */ + (VOID)READ_PORT_UCHAR((PUCHAR)FEATURE); + WRITE_PORT_UCHAR((PUCHAR)0x3c0, 0x20); + /* Wait for a bit. */ + Interval.QuadPart = -PALETTE_FADE_TIME; + KeDelayExecutionThread(KernelMode, FALSE, &Interval); + } +} + +static VOID STDCALL +InbvBitmapThreadMain(PVOID Ignored) +{ + if (InbvFindBootimage()) + { + InbvDisplayCompressedBitmap(); + InbvFadeUpPalette(); + } + else + { + DbgPrint("Warning: Cannot find boot image\n"); + } + + BitmapIsDrawn = TRUE; +} + + +BOOLEAN +STDCALL +VidIsBootDriverInstalled(VOID) +{ + return InGraphicsMode; +} + + +BOOLEAN +STDCALL +VidInitialize(VOID) +{ + NTSTATUS Status; + + if (!VideoAddressSpaceInitialized) + { + InbvInitializeVideoAddressSpace(); + } + + InbvInitVGAMode(); + + InGraphicsMode = TRUE; + + BitmapIsDrawn = FALSE; + + Status = PsCreateSystemThread(&BitmapThreadHandle, + THREAD_ALL_ACCESS, + NULL, + NULL, + &BitmapThreadId, + InbvBitmapThreadMain, + NULL); + if (!NT_SUCCESS(Status)) + { + return FALSE; + } + NtClose(BitmapThreadHandle); + + InbvDeinitializeVideoAddressSpace(); + VideoAddressSpaceInitialized = FALSE; + + return TRUE; +} + +NTSTATUS STDCALL_FUNC +VidDispatch(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp) +{ + PIO_STACK_LOCATION piosStack = IoGetCurrentIrpStackLocation(Irp); + NTSTATUS nErrCode; + NTBOOTVID_FUNCTION_TABLE* FunctionTable; + + nErrCode = STATUS_SUCCESS; + + switch(piosStack->MajorFunction) + { + /* opening and closing handles to the device */ + case IRP_MJ_CREATE: + case IRP_MJ_CLOSE: + break; + + case IRP_MJ_DEVICE_CONTROL: + switch (piosStack->Parameters.DeviceIoControl.IoControlCode) + { + case IOCTL_BOOTVID_INITIALIZE: + VidInitialize(); + FunctionTable = (NTBOOTVID_FUNCTION_TABLE*) + Irp->AssociatedIrp.SystemBuffer; + FunctionTable->ResetDisplay = VidResetDisplay; + break; + case IOCTL_BOOTVID_CLEANUP: + VidCleanUp(); + break; + default: + nErrCode = STATUS_NOT_IMPLEMENTED; + break; + } + break; + + /* unsupported operations */ + default: + nErrCode = STATUS_NOT_IMPLEMENTED; + } + + Irp->IoStatus.Status = nErrCode; + IoCompleteRequest(Irp, IO_NO_INCREMENT); + + return nErrCode; +} + + +NTSTATUS STDCALL +DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath) +{ + PDEVICE_OBJECT BootVidDevice; + UNICODE_STRING DeviceName; + UNICODE_STRING DosName; + NTSTATUS Status; + + BootVidDriverObject = DriverObject; + + /* register driver routines */ + DriverObject->MajorFunction[IRP_MJ_CLOSE] = (PDRIVER_DISPATCH)VidDispatch; + DriverObject->MajorFunction[IRP_MJ_CREATE] = (PDRIVER_DISPATCH)VidDispatch; + DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = + (PDRIVER_DISPATCH)VidDispatch; + DriverObject->DriverUnload = NULL; + + /* create device */ + RtlInitUnicodeStringFromLiteral(&DeviceName, L"\\Device\\BootVid"); + + Status = IoCreateDevice(DriverObject, 0, &DeviceName, FILE_DEVICE_BOOTVID, + 0, FALSE, &BootVidDevice); + if (! NT_SUCCESS(Status)) + { + return Status; + } + + BootVidDevice->Flags |= DO_BUFFERED_IO; + + return Status; +} diff --git a/drivers/dd/bootvid/bootvid.rc b/drivers/dd/bootvid/bootvid.rc new file mode 100644 index 0000000..5fc2f58 --- /dev/null +++ b/drivers/dd/bootvid/bootvid.rc @@ -0,0 +1,40 @@ +#include +#include + +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +VS_VERSION_INFO VERSIONINFO + FILEVERSION RES_UINT_FV_MAJOR,RES_UINT_FV_MINOR,RES_UINT_FV_REVISION,RES_UINT_FV_BUILD + PRODUCTVERSION RES_UINT_PV_MAJOR,RES_UINT_PV_MINOR,RES_UINT_PV_REVISION,RES_UINT_PV_BUILD + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x40004L + FILETYPE 0x2L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "CompanyName", RES_STR_COMPANY_NAME + VALUE "FileDescription", "ReactOS Boot Video\0" + VALUE "FileVersion", RES_STR_FILE_VERSION + VALUE "InternalName", "bootvid\0" + VALUE "LegalCopyright", RES_STR_LEGAL_COPYRIGHT + VALUE "OriginalFilename", "bootvid.sys\0" + VALUE "ProductName", RES_STR_PRODUCT_NAME + VALUE "ProductVersion", RES_STR_PRODUCT_VERSION + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END + +IDB_BOOTIMAGE BITMAP DISCARDABLE "bootimage.bmp" + diff --git a/drivers/dd/bootvid/pixelsup_i386.S b/drivers/dd/bootvid/pixelsup_i386.S new file mode 100644 index 0000000..59eca62 --- /dev/null +++ b/drivers/dd/bootvid/pixelsup_i386.S @@ -0,0 +1,101 @@ +/* $Id$ + * + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS kernel + * FILE: ntoskrnl/inbv/i386/pixelsup.S + * PURPOSE: Boot video support + * PROGRAMMER: Casper S. Hornstrup (chorns@users.sourceforge.net) + */ + +/* + * VOID + * InbvPutPixels(int x, int y, unsigned long c); + * + * Will put 4 pixels on the screen at + * (x+0*8,y), (x+1*8,y), (x+2*8,y), and (x+3*8,y) + * c will contain: + * bits 0- 3: Palette index for pixel at (x+0*8,y) + * bits 8-11: Palette index for pixel at (x+1*8,y) + * bits 16-19: Palette index for pixel at (x+2*8,y) + * bits 24-27: Palette index for pixel at (x+3*8,y) + * + * Parameters: + * [EBP+08h] - x X-coordinate of first pixel + * [ESP+0Ch] - y Y-coordinate of first pixel + * [ESP+10h] - c 4*4-bit color indices + */ +.globl _InbvPutPixels +_InbvPutPixels: + pushl %ebp + movl %esp, %ebp + + /* Compute mask and put it in EBX + mask = maskbit[x] */ + movl 0x8(%ebp), %esi + movl _maskbit(,%esi, 4), %ebx + + /* Don't set bit mask if it is already set */ + cmpl (inbv_last_mask),%ebx + je .nomask + + /* Set Mask Bit Register + WRITE_PORT_UCHAR((PUCHAR)0x3ce,0x08); + WRITE_PORT_UCHAR((PUCHAR)0x3cf,mask); */ + movl %ebx,(inbv_last_mask) + movw $0x3ce,%dx + movb $0x08,%al + outb %al,%dx + movw $0x3cf,%dx + movb %bl,%al + outb %al,%dx + +.nomask: + + /* Compute offset in video memory and put it in EBX + offset = (x >> 3) + y80[y]; */ + movl 0xC(%ebp), %esi /* y */ + movl _y80(,%esi, 4), %ebx + movl 0x8(%ebp), %eax /* x */ + shrl $0x3, %eax + addl %eax, %ebx + + /* Latch first byte + (UCHAR) READ_REGISTER_UCHAR(vidmem + offset+0); */ + movl (_vidmem), %esi + addl %ebx, %esi + movb 0x0(%esi), %bl + /* Write color index for first pixel + *((PUCHAR)(vidmem + offset+0)) = (c >> 0*8) & 0xff; */ + movl 0x10(%ebp), %eax + movb %al, 0x0(%esi) + + /* Latch second byte + (UCHAR) READ_REGISTER_UCHAR(vidmem + offset+1); */ + movb 0x1(%esi), %bl + /* Write color index for second pixel + *((PUCHAR)(vidmem + offset+1)) = (c >> 1*8) & 0xff; */ + shrl $0x8, %eax + movb %al, 0x1(%esi) + + /* Latch third byte + (UCHAR) READ_REGISTER_UCHAR(vidmem + offset+2); */ + movb 0x2(%esi), %bl + /* Write color index for third pixel + *((PUCHAR)(vidmem + offset+2)) = (c >> 2*8) & 0xff; */ + shrl $0x8, %eax + movb %al, 0x2(%esi) + + /* Latch fourth byte + (UCHAR) READ_REGISTER_UCHAR(vidmem + offset+3); */ + movb 0x3(%esi), %bl + /* Write color index for fourth pixel + *((PUCHAR)(vidmem + offset+3)) = (c >> 3*8) & 0xff; */ + shrl $0x8, %eax + movb %al, 0x3(%esi) + + popl %ebp + ret + +.bss +inbv_last_mask: + .short 0 diff --git a/drivers/dd/debugout/.cvsignore b/drivers/dd/debugout/.cvsignore new file mode 100644 index 0000000..b6cc672 --- /dev/null +++ b/drivers/dd/debugout/.cvsignore @@ -0,0 +1,8 @@ +base.tmp +junk.tmp +temp.exp +debugout.coff +*.sym +*.o +*.sys +*.map diff --git a/drivers/dd/debugout/debugout.c b/drivers/dd/debugout/debugout.c new file mode 100644 index 0000000..e3ebe34 --- /dev/null +++ b/drivers/dd/debugout/debugout.c @@ -0,0 +1,130 @@ +/* $Id$ + * + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS kernel + * FILE: drivers/dd/debugout.c + * PURPOSE: Debug output device driver + * PROGRAMMER: Ge van Geldorp (ge@gse.nl) + * UPDATE HISTORY: + * 2003/05/22: Created + * NOTES: + * In your usermode application, do something like this: + * + * DebugHandle = CreateFile("\\\\.\\DebugOut", + * GENERIC_WRITE, + * 0, + * NULL, + * OPEN_EXISTING, + * FILE_ATTRIBUTE_NORMAL, + * NULL); + * + * and write to your hearts content to DebugHandle. + */ + +/* INCLUDES */ +#include + +/* FUNCTIONS */ +NTSTATUS STDCALL_FUNC +DebugOutDispatch(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp) +{ + PIO_STACK_LOCATION piosStack = IoGetCurrentIrpStackLocation(Irp); + NTSTATUS nErrCode; + char *Start; + char Buf[513]; + unsigned Remaining; + unsigned Length; + + nErrCode = STATUS_SUCCESS; + + switch(piosStack->MajorFunction) + { + /* opening and closing handles to the device */ + case IRP_MJ_CREATE: + case IRP_MJ_CLOSE: + break; + + /* write data */ + case IRP_MJ_WRITE: + Remaining = piosStack->Parameters.Write.Length; + Start = Irp->AssociatedIrp.SystemBuffer; + while (0 < Remaining) + { + Length = Remaining; + if (sizeof(Buf) - 1 < Length) + { + Length = sizeof(Buf) - 1; + } + RtlCopyMemory(Buf, Start, Length); + Buf[Length] = '\0'; + DbgPrint("%s", Buf); + Remaining -= Length; + Start += Length; + } + + Irp->IoStatus.Information = piosStack->Parameters.Write.Length; + break; + + /* read data */ + case IRP_MJ_READ: + Irp->IoStatus.Information = 0; + nErrCode = STATUS_END_OF_FILE; + break; + + /* unsupported operations */ + default: + nErrCode = STATUS_NOT_IMPLEMENTED; + } + + Irp->IoStatus.Status = nErrCode; + IoCompleteRequest(Irp, IO_NO_INCREMENT); + + return nErrCode; +} + +NTSTATUS STDCALL +DebugOutUnload(PDRIVER_OBJECT DriverObject) +{ + return STATUS_SUCCESS; +} + +NTSTATUS STDCALL +DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath) +{ + PDEVICE_OBJECT DebugOutDevice; + UNICODE_STRING DeviceName; + UNICODE_STRING DosName; + NTSTATUS Status; + + /* register driver routines */ + DriverObject->MajorFunction[IRP_MJ_CLOSE] = (PDRIVER_DISPATCH) DebugOutDispatch; + DriverObject->MajorFunction[IRP_MJ_CREATE] = (PDRIVER_DISPATCH) DebugOutDispatch; + DriverObject->MajorFunction[IRP_MJ_WRITE] = (PDRIVER_DISPATCH) DebugOutDispatch; + DriverObject->MajorFunction[IRP_MJ_READ] = (PDRIVER_DISPATCH) DebugOutDispatch; + /* DriverObject->MajorFunction[IRP_MJ_QUERY_INFORMATION] = (PDRIVER_DISPATCH) DebugOutDispatch; */ + DriverObject->DriverUnload = (PDRIVER_UNLOAD) DebugOutUnload; + + /* create device */ + RtlInitUnicodeStringFromLiteral(&DeviceName, L"\\Device\\DebugOut"); + + Status = IoCreateDevice(DriverObject, 0, &DeviceName, FILE_DEVICE_NULL, + 0, FALSE, &DebugOutDevice); + if (! NT_SUCCESS(Status)) + { + return Status; + } + + RtlInitUnicodeStringFromLiteral(&DosName, L"\\DosDevices\\DebugOut"); + Status = IoCreateSymbolicLink(&DosName, &DeviceName); + if (! NT_SUCCESS(Status)) + { + IoDeleteDevice(DebugOutDevice); + return Status; + } + + DebugOutDevice->Flags |= DO_BUFFERED_IO; + + return Status; +} + +/* EOF */ diff --git a/drivers/dd/debugout/debugout.rc b/drivers/dd/debugout/debugout.rc new file mode 100644 index 0000000..6b82ff5 --- /dev/null +++ b/drivers/dd/debugout/debugout.rc @@ -0,0 +1,39 @@ + +#include +#include + +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +VS_VERSION_INFO VERSIONINFO + FILEVERSION RES_UINT_FV_MAJOR,RES_UINT_FV_MINOR,RES_UINT_FV_REVISION,RES_UINT_FV_BUILD + PRODUCTVERSION RES_UINT_PV_MAJOR,RES_UINT_PV_MINOR,RES_UINT_PV_REVISION,RES_UINT_PV_BUILD + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x40004L + FILETYPE 0x2L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "CompanyName", RES_STR_COMPANY_NAME + VALUE "FileDescription", "Debug output Device Driver\0" + VALUE "FileVersion", "0.0.1\0" + VALUE "InternalName", "debug\0" + VALUE "LegalCopyright", RES_STR_LEGAL_COPYRIGHT + VALUE "OriginalFilename", "debugout.sys\0" + VALUE "ProductName", RES_STR_PRODUCT_NAME + VALUE "ProductVersion", RES_STR_PRODUCT_VERSION + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END + diff --git a/drivers/dd/debugout/makefile b/drivers/dd/debugout/makefile new file mode 100644 index 0000000..c426896 --- /dev/null +++ b/drivers/dd/debugout/makefile @@ -0,0 +1,13 @@ +# $Id$ + +PATH_TO_TOP = ../../.. + +TARGET_TYPE = driver + +TARGET_NAME = debugout + +TARGET_OBJECTS = debugout.o + +include $(PATH_TO_TOP)/rules.mak + +include $(TOOLS_PATH)/helper.mk diff --git a/drivers/dd/floppy/.cvsignore b/drivers/dd/floppy/.cvsignore index 6a46e57..a659dd4 100644 --- a/drivers/dd/floppy/.cvsignore +++ b/drivers/dd/floppy/.cvsignore @@ -2,3 +2,4 @@ floppy.coff *.sys *.o *.sym +*.map diff --git a/drivers/dd/floppy/floppy.c b/drivers/dd/floppy/floppy.c index 2504549..7694fcd 100644 --- a/drivers/dd/floppy/floppy.c +++ b/drivers/dd/floppy/floppy.c @@ -109,7 +109,7 @@ FloppyCreateController(PDRIVER_OBJECT DriverObject, DeviceDescription.Master = FALSE; DeviceDescription.ScatterGather = FALSE; DeviceDescription.AutoInitialize = FALSE; - DeviceDescription.Dma32BitAddress = FALSE; + DeviceDescription.Dma32BitAddresses = FALSE; DeviceDescription.DmaChannel = ControllerParameters->DmaChannel; DeviceDescription.InterfaceType = Isa; // DeviceDescription.DmaWidth = Width8Bits; diff --git a/drivers/dd/ide/.cvsignore b/drivers/dd/ide/.cvsignore index ddc929b..5ba849a 100644 --- a/drivers/dd/ide/.cvsignore +++ b/drivers/dd/ide/.cvsignore @@ -5,3 +5,4 @@ ide.coff *.sys *.sym *.o +*.map diff --git a/drivers/dd/ide/ide.c b/drivers/dd/ide/ide.c index 8369998..d373540 100644 --- a/drivers/dd/ide/ide.c +++ b/drivers/dd/ide/ide.c @@ -1578,7 +1578,7 @@ STDCALL IDEStartIo(IN PDEVICE_OBJECT DeviceObject, default: Irp->IoStatus.Status = STATUS_NOT_SUPPORTED; Irp->IoStatus.Information = 0; - KeBugCheck((ULONG)Irp); + KEBUGCHECK((ULONG)Irp); IoCompleteRequest(Irp, IO_NO_INCREMENT); IoStartNextPacket(DeviceObject, FALSE); break; diff --git a/drivers/dd/null/.cvsignore b/drivers/dd/null/.cvsignore index f29f9a9..62337ca 100644 --- a/drivers/dd/null/.cvsignore +++ b/drivers/dd/null/.cvsignore @@ -5,3 +5,4 @@ null.coff *.sym *.o *.sys +*.map diff --git a/drivers/dd/parallel/.cvsignore b/drivers/dd/parallel/.cvsignore index 9a3b8eb..08d1092 100644 --- a/drivers/dd/parallel/.cvsignore +++ b/drivers/dd/parallel/.cvsignore @@ -5,3 +5,4 @@ parallel.coff parallel.sys parallel.sys.unstripped +*.map diff --git a/drivers/dd/ramdrv/.cvsignore b/drivers/dd/ramdrv/.cvsignore index b4046bc..bc24d01 100644 --- a/drivers/dd/ramdrv/.cvsignore +++ b/drivers/dd/ramdrv/.cvsignore @@ -5,3 +5,4 @@ ramdrv.coff ramdrv.sys ramdrv.sys.unstripped +*.map diff --git a/drivers/dd/serial/.cvsignore b/drivers/dd/serial/.cvsignore index 9948aa6..d4ff79c 100644 --- a/drivers/dd/serial/.cvsignore +++ b/drivers/dd/serial/.cvsignore @@ -6,3 +6,4 @@ serial.coff serial.sys serial.sym serial.nostrip.sys +*.map diff --git a/drivers/dd/sound/.cvsignore b/drivers/dd/sound/.cvsignore index ae95121..a576db0 100644 --- a/drivers/dd/sound/.cvsignore +++ b/drivers/dd/sound/.cvsignore @@ -5,3 +5,4 @@ sound.coff sound.sys sound.sys.unstripped +*.map diff --git a/include/in.h b/drivers/dd/sound/in.h similarity index 100% rename from include/in.h rename to drivers/dd/sound/in.h diff --git a/drivers/dd/test/.cvsignore b/drivers/dd/test/.cvsignore index a6f277f..4fd1bba 100644 --- a/drivers/dd/test/.cvsignore +++ b/drivers/dd/test/.cvsignore @@ -3,3 +3,4 @@ junk.tmp temp.exp test.coff test.sys.unstripped +*.map diff --git a/drivers/dd/vga/display/.cvsignore b/drivers/dd/vga/display/.cvsignore index 9d2f7c9..d8ac7ef 100644 --- a/drivers/dd/vga/display/.cvsignore +++ b/drivers/dd/vga/display/.cvsignore @@ -2,3 +2,5 @@ vgaddi.coff *.sym *.o *.dll +*.map +*.tmp diff --git a/drivers/dd/vga/display/main/.cvsignore b/drivers/dd/vga/display/main/.cvsignore index 5761abc..ecc3f45 100644 --- a/drivers/dd/vga/display/main/.cvsignore +++ b/drivers/dd/vga/display/main/.cvsignore @@ -1 +1,2 @@ *.o +*.map diff --git a/drivers/dd/vga/display/main/enable.c b/drivers/dd/vga/display/main/enable.c index 0a932a2..a0dfb60 100644 --- a/drivers/dd/vga/display/main/enable.c +++ b/drivers/dd/vga/display/main/enable.c @@ -7,7 +7,7 @@ * */ -#include "gdiinfo.h" +#include "../vgaddi.h" #include "../vgavideo/vgavideo.h" #define NDEBUG #include @@ -61,13 +61,131 @@ DRVFN FuncList[] = #endif }; +GDIINFO gaulCap = { + GDI_DRIVER_VERSION, + DT_RASDISPLAY, // ulTechnology + 0, // ulHorzSize + 0, // ulVertSize + 0, // ulHorzRes (filled in at initialization) + 0, // ulVertRes (filled in at initialization) + 4, // cBitsPixel + 1, // cPlanes + 16, // ulNumColors + 0, // flRaster (DDI reserved field) + + 96, // ulLogPixelsX (must be set to 96 according to MSDN) + 96, // ulLogPixelsY (must be set to 96 according to MSDN) + + TC_RA_ABLE | TC_SCROLLBLT, // flTextCaps + + 6, // ulDACRed + 6, // ulDACGree + 6, // ulDACBlue + + 0x0024, // ulAspectX (one-to-one aspect ratio) + 0x0024, // ulAspectY + 0x0033, // ulAspectXY + + 1, // xStyleStep + 1, // yStyleSte; + 3, // denStyleStep + + { 0, 0 }, // ptlPhysOffset + { 0, 0 }, // szlPhysSize + + 0, // ulNumPalReg (win3.1 16 color drivers say 0 too) + +// These fields are for halftone initialization. + + { // ciDevice, ColorInfo + { 6700, 3300, 0 }, // Red + { 2100, 7100, 0 }, // Green + { 1400, 800, 0 }, // Blue + { 1750, 3950, 0 }, // Cyan + { 4050, 2050, 0 }, // Magenta + { 4400, 5200, 0 }, // Yellow + { 3127, 3290, 0 }, // AlignmentWhite + 20000, // RedGamma + 20000, // GreenGamma + 20000, // BlueGamma + 0, 0, 0, 0, 0, 0 + }, + + 0, // ulDevicePelsDPI + PRIMARY_ORDER_CBA, // ulPrimaryOrder + HT_PATSIZE_4x4_M, // ulHTPatternSize + HT_FORMAT_4BPP_IRGB, // ulHTOutputFormat + HT_FLAG_ADDITIVE_PRIMS, // flHTFlags + + 0, // ulVRefresh + 8, // ulBltAlignment + 0, // ulPanningHorzRes + 0, // ulPanningVertRes +}; + +// Palette for VGA + +typedef struct _VGALOGPALETTE +{ + USHORT ident; + USHORT NumEntries; + PALETTEENTRY PaletteEntry[16]; +} VGALOGPALETTE; + +const VGALOGPALETTE VGApalette = +{ + +0x400, // driver version +16, // num entries +{ + { 0x00, 0x00, 0x00, 0x00 }, // 0 + { 0x80, 0x00, 0x00, 0x00 }, // 1 + { 0x00, 0x80, 0x00, 0x00 }, // 2 + { 0x80, 0x80, 0x00, 0x00 }, // 3 + { 0x00, 0x00, 0x80, 0x00 }, // 4 + { 0x80, 0x00, 0x80, 0x00 }, // 5 + { 0x00, 0x80, 0x80, 0x00 }, // 6 + { 0x80, 0x80, 0x80, 0x00 }, // 7 + { 0xc0, 0xc0, 0xc0, 0x00 }, // 8 + { 0xff, 0x00, 0x00, 0x00 }, // 9 + { 0x00, 0xff, 0x00, 0x00 }, // 10 + { 0xff, 0xff, 0x00, 0x00 }, // 11 + { 0x00, 0x00, 0xff, 0x00 }, // 12 + { 0xff, 0x00, 0xff, 0x00 }, // 13 + { 0x00, 0xff, 0xff, 0x00 }, // 14 + { 0xff, 0xff, 0xff, 0x00 } // 15 +} +}; + +// Devinfo structure passed back to the engine in DrvEnablePDEV + +#define SYSTM_LOGFONT {16,7,0,0,700,0,0,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,VARIABLE_PITCH | FF_DONTCARE, L"System"} +#define HELVE_LOGFONT {12,9,0,0,400,0,0,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_STROKE_PRECIS,PROOF_QUALITY,VARIABLE_PITCH | FF_DONTCARE, L"MS Sans Serif"} +#define COURI_LOGFONT {12,9,0,0,400,0,0,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_STROKE_PRECIS,PROOF_QUALITY,FIXED_PITCH | FF_DONTCARE, L"Courier"} + +DEVINFO devinfoVGA = +{ + (GCAPS_OPAQUERECT | GCAPS_HORIZSTRIKE | GCAPS_ALTERNATEFILL | GCAPS_MONO_DITHER | GCAPS_COLOR_DITHER | + GCAPS_WINDINGFILL | GCAPS_DITHERONREALIZE + ), // Graphics capabilities + + SYSTM_LOGFONT, // Default font description + HELVE_LOGFONT, // ANSI variable font description + COURI_LOGFONT, // ANSI fixed font description + 0, // Count of device fonts + BMF_4BPP, // preferred DIB format + 8, // Width of color dither + 8, // Height of color dither + 0 // Default palette to use for this device +}; + BOOL STDCALL DrvEnableDriver(IN ULONG EngineVersion, IN ULONG SizeOfDED, OUT PDRVENABLEDATA DriveEnableData) { - EngDebugPrint("VGADDI", "DrvEnableDriver called...\n", 0); +/* EngDebugPrint("VGADDI", "DrvEnableDriver called...\n", 0); */ vgaPreCalc(); @@ -110,10 +228,10 @@ DrvDisableDriver(VOID) // IN LPWSTR LogAddress // IN ULONG PatternCount number of patterns expected // OUT HSURF * SurfPatterns array to contain pattern handles -// IN ULONG CapsSize the size of the DevCaps object passed in -// OUT ULONG * DevCaps Device Capabilities object +// IN ULONG GDIInfoSize the size of the GDIInfo object passed in +// OUT GDIINFO * GDIInfo GDI Info object // IN ULONG DevInfoSize the size of the DevInfo object passed in -// OUT DEVINFO * DI Device Info object +// OUT DEVINFO * DevInfo Device Info object // IN LPWSTR DevDataFile ignore // IN LPWSTR DeviceName Device name // IN HANDLE Driver handle to KM driver @@ -125,10 +243,10 @@ DrvEnablePDEV(IN DEVMODEW *DM, IN LPWSTR LogAddress, IN ULONG PatternCount, OUT HSURF *SurfPatterns, - IN ULONG CapsSize, - OUT ULONG *DevCaps, + IN ULONG GDIInfoSize, + OUT GDIINFO *GDIInfo, IN ULONG DevInfoSize, - OUT DEVINFO *DI, + OUT DEVINFO *DevInfo, IN LPWSTR DevDataFile, IN LPWSTR DeviceName, IN HANDLE Driver) @@ -149,13 +267,21 @@ DrvEnablePDEV(IN DEVMODEW *DM, PDev->ptlExtent.y = 0; PDev->cExtent = 0; PDev->flCursor = CURSOR_DOWN; - // FIXME: fill out DevCaps - // FIXME: full out DevInfo - devinfoVGA.hpalDefault = EngCreatePalette(PAL_INDEXED, 16, (PULONG *)VGApalette.PaletteEntry, 0, 0, 0); -DPRINT("Palette from Driver: %u\n", devinfoVGA.hpalDefault); - *DI = devinfoVGA; -DPRINT("Palette from Driver 2: %u and DI is %08x\n", DI->hpalDefault, DI); + gaulCap.ulHorzRes = 640; + gaulCap.ulVertRes = 480; + if (sizeof(GDIINFO) < GDIInfoSize) + { + GDIInfoSize = sizeof(GDIINFO); + } + memcpy(GDIInfo, &gaulCap, GDIInfoSize); + + devinfoVGA.hpalDefault = EngCreatePalette(PAL_INDEXED, 16, (ULONG *) VGApalette.PaletteEntry, 0, 0, 0); + if (sizeof(DEVINFO) < DevInfoSize) + { + DevInfoSize = sizeof(DEVINFO); + } + memcpy(DevInfo, &devinfoVGA, DevInfoSize); return(PDev); } @@ -330,7 +456,7 @@ DrvEnableSurface(IN DHPDEV PDev) DHSURF dhsurf; HSURF hsurf; - DPRINT1("DrvEnableSurface() called\n"); + DPRINT("DrvEnableSurface() called\n"); // Initialize the VGA if (!VGAInitialized) @@ -341,7 +467,6 @@ DrvEnableSurface(IN DHPDEV PDev) } VGAInitialized = TRUE; } -CHECKPOINT1; // dhsurf is of type DEVSURF, which is the drivers specialized surface type dhsurf = (DHSURF)EngAllocMem(0, sizeof(DEVSURF), ALLOC_TAG); @@ -389,7 +514,7 @@ CHECKPOINT1; if (EngAssociateSurface(hsurf, ppdev->GDIDevHandle, HOOK_BITBLT | HOOK_PAINT | HOOK_LINETO | HOOK_COPYBITS | HOOK_TRANSPARENTBLT)) { - EngDebugPrint("VGADDI:", "Successfully associated surface\n", 0); +/* EngDebugPrint("VGADDI:", "Successfully associated surface\n", 0); */ ppdev->SurfHandle = hsurf; ppdev->AssociatedSurf = pdsurf; diff --git a/drivers/dd/vga/display/main/gdiinfo.h b/drivers/dd/vga/display/main/gdiinfo.h deleted file mode 100644 index dc73223..0000000 --- a/drivers/dd/vga/display/main/gdiinfo.h +++ /dev/null @@ -1,119 +0,0 @@ -#include "../vgaddi.h" - -GDIINFO gaulCap = { - GDI_DRIVER_VERSION, - DT_RASDISPLAY, // ulTechnology - 0, // ulHorzSize - 0, // ulVertSize - 0, // ulHorzRes (filled in at initialization) - 0, // ulVertRes (filled in at initialization) - 4, // cBitsPixel - 1, // cPlanes - 16, // ulNumColors - 0, // flRaster (DDI reserved field) - - 0, // ulLogPixelsX (filled in at initialization) - 0, // ulLogPixelsY (filled in at initialization) - - TC_RA_ABLE | TC_SCROLLBLT, // flTextCaps - - 6, // ulDACRed - 6, // ulDACGree - 6, // ulDACBlue - - 0x0024, // ulAspectX (one-to-one aspect ratio) - 0x0024, // ulAspectY - 0x0033, // ulAspectXY - - 1, // xStyleStep - 1, // yStyleSte; - 3, // denStyleStep - - { 0, 0 }, // ptlPhysOffset - { 0, 0 }, // szlPhysSize - - 0, // ulNumPalReg (win3.1 16 color drivers say 0 too) - -// These fields are for halftone initialization. - - { // ciDevice, ColorInfo - { 6700, 3300, 0 }, // Red - { 2100, 7100, 0 }, // Green - { 1400, 800, 0 }, // Blue - { 1750, 3950, 0 }, // Cyan - { 4050, 2050, 0 }, // Magenta - { 4400, 5200, 0 }, // Yellow - { 3127, 3290, 0 }, // AlignmentWhite - 20000, // RedGamma - 20000, // GreenGamma - 20000, // BlueGamma - 0, 0, 0, 0, 0, 0 - }, - - 0, // ulDevicePelsDPI - PRIMARY_ORDER_CBA, // ulPrimaryOrder - HT_PATSIZE_4x4_M, // ulHTPatternSize - HT_FORMAT_4BPP_IRGB, // ulHTOutputFormat - HT_FLAG_ADDITIVE_PRIMS, // flHTFlags - - 0, // ulVRefresh - 8, // ulBltAlignment - 0, // ulPanningHorzRes - 0, // ulPanningVertRes -}; - -// Palette for VGA - -typedef struct _VGALOGPALETTE -{ - USHORT ident; - USHORT NumEntries; - PALETTEENTRY PaletteEntry[16]; -} VGALOGPALETTE; - -const VGALOGPALETTE VGApalette = -{ - -0x400, // driver version -16, // num entries -{ - { 0x00, 0x00, 0x00, 0x00 }, // 0 - { 0x80, 0x00, 0x00, 0x00 }, // 1 - { 0x00, 0x80, 0x00, 0x00 }, // 2 - { 0x80, 0x80, 0x00, 0x00 }, // 3 - { 0x00, 0x00, 0x80, 0x00 }, // 4 - { 0x80, 0x00, 0x80, 0x00 }, // 5 - { 0x00, 0x80, 0x80, 0x00 }, // 6 - { 0x80, 0x80, 0x80, 0x00 }, // 7 - { 0xc0, 0xc0, 0xc0, 0x00 }, // 8 - { 0xff, 0x00, 0x00, 0x00 }, // 9 - { 0x00, 0xff, 0x00, 0x00 }, // 10 - { 0xff, 0xff, 0x00, 0x00 }, // 11 - { 0x00, 0x00, 0xff, 0x00 }, // 12 - { 0xff, 0x00, 0xff, 0x00 }, // 13 - { 0x00, 0xff, 0xff, 0x00 }, // 14 - { 0xff, 0xff, 0xff, 0x00 } // 15 -} -}; - -// Devinfo structure passed back to the engine in DrvEnablePDEV - -#define SYSTM_LOGFONT {16,7,0,0,700,0,0,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,VARIABLE_PITCH | FF_DONTCARE, L"System"} -#define HELVE_LOGFONT {12,9,0,0,400,0,0,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_STROKE_PRECIS,PROOF_QUALITY,VARIABLE_PITCH | FF_DONTCARE, L"MS Sans Serif"} -#define COURI_LOGFONT {12,9,0,0,400,0,0,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_STROKE_PRECIS,PROOF_QUALITY,FIXED_PITCH | FF_DONTCARE, L"Courier"} - -DEVINFO devinfoVGA = -{ - (GCAPS_OPAQUERECT | GCAPS_HORIZSTRIKE | GCAPS_ALTERNATEFILL | GCAPS_MONO_DITHER | GCAPS_COLOR_DITHER | - GCAPS_WINDINGFILL | GCAPS_DITHERONREALIZE - ), // Graphics capabilities - - SYSTM_LOGFONT, // Default font description - HELVE_LOGFONT, // ANSI variable font description - COURI_LOGFONT, // ANSI fixed font description - 0, // Count of device fonts - BMF_4BPP, // preferred DIB format - 8, // Width of color dither - 8, // Height of color dither - 0 // Default palette to use for this device -}; diff --git a/drivers/dd/vga/display/objects/.cvsignore b/drivers/dd/vga/display/objects/.cvsignore index 5761abc..ecc3f45 100644 --- a/drivers/dd/vga/display/objects/.cvsignore +++ b/drivers/dd/vga/display/objects/.cvsignore @@ -1 +1,2 @@ *.o +*.map diff --git a/drivers/dd/vga/display/objects/bitblt.c b/drivers/dd/vga/display/objects/bitblt.c index 30c7f8c..9dfa3bb 100644 --- a/drivers/dd/vga/display/objects/bitblt.c +++ b/drivers/dd/vga/display/objects/bitblt.c @@ -7,23 +7,47 @@ #include "bitblt.h" typedef BOOL (*PFN_VGABlt)(SURFOBJ*, SURFOBJ*, XLATEOBJ*, RECTL*, POINTL*); +typedef BOOL STDCALL (*PBLTRECTFUNC)(PSURFOBJ OutputObj, + PSURFOBJ InputObj, + PSURFOBJ Mask, + PXLATEOBJ ColorTranslation, + PRECTL OutputRect, + PPOINTL InputPoint, + PPOINTL MaskOrigin, + PBRUSHOBJ Brush, + PPOINTL BrushOrigin, + ROP4 Rop4); + +static BOOL FASTCALL VGADDI_IntersectRect(PRECTL prcDst, PRECTL prcSrc1, PRECTL prcSrc2) +{ + static const RECTL rclEmpty = { 0, 0, 0, 0 }; + + prcDst->left = max(prcSrc1->left, prcSrc2->left); + prcDst->right = min(prcSrc1->right, prcSrc2->right); + + if (prcDst->left < prcDst->right) + { + prcDst->top = max(prcSrc1->top, prcSrc2->top); + prcDst->bottom = min(prcSrc1->bottom, prcSrc2->bottom); + + if (prcDst->top < prcDst->bottom) return(TRUE); + } + + *prcDst = rclEmpty; + + return(FALSE); +} BOOL DIBtoVGA(SURFOBJ *Dest, SURFOBJ *Source, XLATEOBJ *ColorTranslation, RECTL *DestRect, POINTL *SourcePoint) { - LONG i, j, dx, dy, alterx, altery, idxColor, RGBulong = 0, c8; - BYTE *GDIpos, *initial, *tMask, *lMask; - - GDIpos = Source->pvScan0; + LONG dx, dy; dx = DestRect->right - DestRect->left; dy = DestRect->bottom - DestRect->top; - alterx = abs(SourcePoint->x - DestRect->left); - altery = abs(SourcePoint->y - DestRect->top); - - if (NULL == ColorTranslation) + if (NULL == ColorTranslation || 0 != (ColorTranslation->flXlate & XO_TRIVIAL)) { DIB_BltToVGA(DestRect->left, DestRect->top, dx, dy, Source->pvScan0 + SourcePoint->y * Source->lDelta + (SourcePoint->x >> 1), @@ -32,18 +56,9 @@ DIBtoVGA(SURFOBJ *Dest, SURFOBJ *Source, XLATEOBJ *ColorTranslation, else { /* Perform color translation */ - for (j = SourcePoint->y; j < SourcePoint->y+dy; j++) - { - initial = GDIpos; - - for (i=SourcePoint->x; ix+dx; i++) - { - idxColor = XLATEOBJ_iXlate(ColorTranslation, *GDIpos); - vgaPutPixel(i+alterx, j+altery, idxColor); - GDIpos+=1; - } - GDIpos = initial + Source->lDelta; - } + DIB_BltToVGAWithXlate(DestRect->left, DestRect->top, dx, dy, + Source->pvScan0 + SourcePoint->y * Source->lDelta + (SourcePoint->x >> 1), + Source->lDelta, ColorTranslation); } } @@ -105,75 +120,66 @@ VGAtoDFB(SURFOBJ *Dest, SURFOBJ *Source, XLATEOBJ *ColorTranslation, // Do DFBs need color translation?? } -BOOL +BOOL VGAtoVGA(SURFOBJ *Dest, SURFOBJ *Source, XLATEOBJ *ColorTranslation, RECTL *DestRect, POINTL *SourcePoint) { - // FIXME: Use fast blts instead of get and putpixels - - int i, j, dx, dy, alterx, altery, BltDirection; + LONG i, i2, j, dx, dy, alterx, altery; + //LARGE_INTEGER Start, End; // for performance measurement only + static char buf[640]; // Calculate deltas dx = DestRect->right - DestRect->left; dy = DestRect->bottom - DestRect->top; - alterx = abs(SourcePoint->x - DestRect->left); - altery = abs(SourcePoint->y - DestRect->top); + alterx = DestRect->left - SourcePoint->x; + altery = DestRect->top - SourcePoint->y; + + //KeQueryTickCount ( &Start ); + + i = SourcePoint->x; + i2 = i + alterx; - // Determine bltting direction - // FIXME: should we perhaps make this an EngXxx function? Determining - // direction is probably used whenever the surfaces are the same (not - // just VGA screen) if (SourcePoint->y >= DestRect->top) { - if (SourcePoint->x >= DestRect->left) - { - BltDirection = CD_RIGHTDOWN; - } - else - { - BltDirection = CD_LEFTDOWN; - } + for(j=SourcePoint->y; jy+dy; j++) + { + LONG j2 = j + altery; + vgaReadScan ( i, j, dx, buf ); + vgaWriteScan ( i2, j2, dx, buf ); + } } else { - if (SourcePoint->x >= DestRect->left) - { - BltDirection = CD_RIGHTUP; - } - else - { - BltDirection = CD_LEFTUP; - } + for(j=(SourcePoint->y+dy-1); j>=SourcePoint->y; j--) + { + LONG j2 = j + altery; + vgaReadScan ( i, j, dx, buf ); + vgaWriteScan ( i2, j2, dx, buf ); + } } - // Do the VGA to VGA BitBlt - // FIXME: Right now we're only doing CN_LEFTDOWN and we're using slow - // get and put pixel routines - - for(j=SourcePoint->y; jy+dy; j++) - { - for(i=SourcePoint->x; ix+dx; i++) - { - vgaPutPixel(i+alterx, j+altery, vgaGetPixel(i, j)); - } - } + //KeQueryTickCount ( &End ); + //DbgPrint ( "VgaBitBlt timing: %lu\n", (ULONG)(End.QuadPart-Start.QuadPart) ); return TRUE; } BOOL STDCALL -VGADDI_BltBrush(SURFOBJ* Dest, XLATEOBJ* ColorTranslation, RECTL* DestRect, - BRUSHOBJ* Brush, POINTL* BrushPoint, ROP4 Rop4) +VGADDI_BltBrush(PSURFOBJ Dest, PSURFOBJ Source, PSURFOBJ MaskSurf, + PXLATEOBJ ColorTranslation, PRECT DestRect, + PPOINTL SourcePoint, PPOINTL MaskPoint, + PBRUSHOBJ Brush, PPOINTL BrushPoint, ROP4 Rop4) { - UCHAR SolidColor; + UCHAR SolidColor = 0; ULONG Left; ULONG Right; ULONG Length; PUCHAR Video; UCHAR Mask; ULONG i, j; + ULONG RasterOp = VGA_NORMAL; /* Punt brush blts to non-device surfaces. */ if (Dest->iType != STYPE_DEVICE) @@ -182,23 +188,38 @@ VGADDI_BltBrush(SURFOBJ* Dest, XLATEOBJ* ColorTranslation, RECTL* DestRect, } /* Punt pattern fills. */ - if (Rop4 == PATCOPY && Brush->iSolidColor == 0xFFFFFFFF) + if ((Rop4 == PATCOPY || Rop4 == PATINVERT) && + Brush->iSolidColor == 0xFFFFFFFF) { return(FALSE); } - if (Rop4 == PATCOPY) - { - SolidColor = Brush->iSolidColor; - } - else if (Rop4 == WHITENESS) - { - SolidColor = 1; - } - else + + /* Get the brush colour. */ + switch (Rop4) { - SolidColor = 0; + case PATCOPY: SolidColor = Brush->iSolidColor; break; + case PATINVERT: SolidColor = Brush->iSolidColor; RasterOp = VGA_XOR; break; + case WHITENESS: SolidColor = 0xF; break; + case BLACKNESS: SolidColor = 0x0; break; + case DSTINVERT: SolidColor = 0xF; RasterOp = VGA_XOR; break; } + /* Select write mode 3. */ + WRITE_PORT_UCHAR((PUCHAR)GRA_I, 0x05); + WRITE_PORT_UCHAR((PUCHAR)GRA_D, 0x03); + + /* Setup set/reset register. */ + WRITE_PORT_UCHAR((PUCHAR)GRA_I, 0x00); + WRITE_PORT_UCHAR((PUCHAR)GRA_D, (UCHAR)SolidColor); + + /* Enable writes to all pixels. */ + WRITE_PORT_UCHAR((PUCHAR)GRA_I, 0x08); + WRITE_PORT_UCHAR((PUCHAR)GRA_D, 0xFF); + + /* Set up data rotate. */ + WRITE_PORT_UCHAR((PUCHAR)GRA_I, 0x03); + WRITE_PORT_UCHAR((PUCHAR)GRA_D, RasterOp); + /* Fill any pixels on the left which don't fall into a full row of eight. */ if ((DestRect->left % 8) != 0) { @@ -208,27 +229,29 @@ VGADDI_BltBrush(SURFOBJ* Dest, XLATEOBJ* ColorTranslation, RECTL* DestRect, { Mask &= ~((1 << (8 - (DestRect->right % 8))) - 1); } - WRITE_PORT_UCHAR((PUCHAR)GRA_I, 0x08); - WRITE_PORT_UCHAR((PUCHAR)GRA_D, Mask); /* Write the same color to each pixel. */ Video = (PUCHAR)vidmem + DestRect->top * 80 + (DestRect->left >> 3); for (i = DestRect->top; i < DestRect->bottom; i++, Video+=80) { (VOID)READ_REGISTER_UCHAR(Video); - WRITE_REGISTER_UCHAR(Video, SolidColor); + WRITE_REGISTER_UCHAR(Video, Mask); } - } - /* Enable writes to all pixels. */ - WRITE_PORT_UCHAR((PUCHAR)GRA_I, 0x08); - WRITE_PORT_UCHAR((PUCHAR)GRA_D, 0xFF); + /* Have we finished. */ + if ((DestRect->right - DestRect->left) < (8 - (DestRect->left % 8))) + { + /* Restore write mode 2. */ + WRITE_PORT_UCHAR((PUCHAR)GRA_I, 0x05); + WRITE_PORT_UCHAR((PUCHAR)GRA_D, 0x02); - /* Have we finished. */ - if ((DestRect->right - DestRect->left) < (8 - (DestRect->left % 8))) - { - return(TRUE); - } + /* Set up data rotate. */ + WRITE_PORT_UCHAR((PUCHAR)GRA_I, 0x03); + WRITE_PORT_UCHAR((PUCHAR)GRA_D, 0x00); + + return TRUE; + } + } /* Fill any whole rows of eight pixels. */ Left = (DestRect->left + 7) & ~0x7; @@ -238,7 +261,8 @@ VGADDI_BltBrush(SURFOBJ* Dest, XLATEOBJ* ColorTranslation, RECTL* DestRect, Video = (PUCHAR)vidmem + i * 80 + (Left >> 3); for (j = 0; j < Length; j++, Video++) { - WRITE_REGISTER_UCHAR(Video, SolidColor); + (VOID)READ_REGISTER_UCHAR(Video); + WRITE_REGISTER_UCHAR(Video, 0xFF); } } @@ -247,28 +271,30 @@ VGADDI_BltBrush(SURFOBJ* Dest, XLATEOBJ* ColorTranslation, RECTL* DestRect, { /* Disable writes to pixels outside the destination rectangle. */ Mask = ~((1 << (8 - (DestRect->right % 8))) - 1); - WRITE_PORT_UCHAR((PUCHAR)GRA_I, 0x08); - WRITE_PORT_UCHAR((PUCHAR)GRA_D, Mask); Video = (PUCHAR)vidmem + DestRect->top * 80 + (DestRect->right >> 3); for (i = DestRect->top; i < DestRect->bottom; i++, Video+=80) { - /* Read the existing colours for this pixel into the latches. */ (VOID)READ_REGISTER_UCHAR(Video); - /* Write the new colour for the pixels selected in the mask. */ - WRITE_REGISTER_UCHAR(Video, SolidColor); + WRITE_REGISTER_UCHAR(Video, Mask); } - - /* Restore the default write masks. */ - WRITE_PORT_UCHAR((PUCHAR)GRA_I, 0x08); - WRITE_PORT_UCHAR((PUCHAR)GRA_D, 0xFF); } - return(TRUE); + + /* Restore write mode 2. */ + WRITE_PORT_UCHAR((PUCHAR)GRA_I, 0x05); + WRITE_PORT_UCHAR((PUCHAR)GRA_D, 0x02); + + /* Set up data rotate. */ + WRITE_PORT_UCHAR((PUCHAR)GRA_I, 0x03); + WRITE_PORT_UCHAR((PUCHAR)GRA_D, 0x00); + + return TRUE; } BOOL STDCALL -VGADDI_BltSrc(SURFOBJ *Dest, SURFOBJ *Source, XLATEOBJ *ColorTranslation, - RECTL *DestRect, POINTL *SourcePoint) +VGADDI_BltSrc(PSURFOBJ Dest, PSURFOBJ Source, PSURFOBJ Mask, + PXLATEOBJ ColorTranslation, PRECTL DestRect, PPOINTL SourcePoint, + PPOINTL MaskOrigin, PBRUSHOBJ Brush, PPOINTL BrushOrigin, ROP4 Rop4) { RECT_ENUM RectEnum; BOOL EnumMore; @@ -308,9 +334,10 @@ VGADDI_BltSrc(SURFOBJ *Dest, SURFOBJ *Source, XLATEOBJ *ColorTranslation, } BOOL STDCALL -VGADDI_BltMask(SURFOBJ *Dest, SURFOBJ *Mask, XLATEOBJ *ColorTranslation, - RECTL *DestRect, POINTL *MaskPoint, BRUSHOBJ* Brush, - POINTL* BrushPoint) +VGADDI_BltMask(PSURFOBJ Dest, PSURFOBJ Source, PSURFOBJ Mask, + PXLATEOBJ ColorTranslation, PRECTL DestRect, + PPOINTL SourcePoint, PPOINTL MaskPoint, BRUSHOBJ* Brush, + PPOINTL BrushPoint, ROP4 Rop4) { LONG i, j, dx, dy, idxColor, RGBulong = 0, c8; BYTE *initial, *tMask, *lMask; @@ -355,36 +382,95 @@ DrvBitBlt(SURFOBJ *Dest, POINTL *BrushPoint, ROP4 rop4) { - /* Punt bitblts with complex clipping to the GDI. */ - if (Clip != NULL) - { - return(FALSE); - } + PBLTRECTFUNC BltRectFunc; + RECTL CombinedRect; + BOOL Ret; + RECT_ENUM RectEnum; + BOOL EnumMore; + unsigned i; + POINTL Pt; + ULONG Direction; switch (rop4) { case BLACKNESS: case PATCOPY: case WHITENESS: - return(VGADDI_BltBrush(Dest, ColorTranslation, DestRect, Brush, - BrushPoint, rop4)); + case PATINVERT: + case DSTINVERT: + BltRectFunc = VGADDI_BltBrush; + break; case SRCCOPY: if (BMF_4BPP == Source->iBitmapFormat && BMF_4BPP == Dest->iBitmapFormat) - { - return(VGADDI_BltSrc(Dest, Source, ColorTranslation, DestRect, - SourcePoint)); + { + BltRectFunc = VGADDI_BltSrc; } else { - return FALSE; + return FALSE; } + break; case 0xAACC: - return(VGADDI_BltMask(Dest, Mask, ColorTranslation, DestRect, - MaskPoint, Brush, BrushPoint)); + BltRectFunc = VGADDI_BltMask; + break; default: - return(FALSE); + return FALSE; } + + switch(NULL == Clip ? DC_TRIVIAL : Clip->iDComplexity) + { + case DC_TRIVIAL: + Ret = (*BltRectFunc)(Dest, Source, Mask, ColorTranslation, DestRect, + SourcePoint, MaskPoint, Brush, BrushPoint, + rop4); + break; + case DC_RECT: + // Clip the blt to the clip rectangle + VGADDI_IntersectRect(&CombinedRect, DestRect, &(Clip->rclBounds)); + Pt.x = SourcePoint->x + CombinedRect.left - DestRect->left; + Pt.y = SourcePoint->y + CombinedRect.top - DestRect->top; + Ret = (*BltRectFunc)(Dest, Source, Mask, ColorTranslation, &CombinedRect, + &Pt, MaskPoint, Brush, BrushPoint, + rop4); + break; + case DC_COMPLEX: + Ret = TRUE; + if (Dest == Source) + { + if (DestRect->top <= SourcePoint->y) + { + Direction = DestRect->left < SourcePoint->x ? CD_RIGHTDOWN : CD_LEFTDOWN; + } + else + { + Direction = DestRect->left < SourcePoint->x ? CD_RIGHTUP : CD_LEFTUP; + } + } + else + { + Direction = CD_ANY; + } + CLIPOBJ_cEnumStart(Clip, FALSE, CT_RECTANGLES, Direction, ENUM_RECT_LIMIT); + do + { + EnumMore = CLIPOBJ_bEnum(Clip, (ULONG) sizeof(RectEnum), (PVOID) &RectEnum); + + for (i = 0; i < RectEnum.c; i++) + { + VGADDI_IntersectRect(&CombinedRect, DestRect, RectEnum.arcl + i); + Pt.x = SourcePoint->x + CombinedRect.left - DestRect->left; + Pt.y = SourcePoint->y + CombinedRect.top - DestRect->top; + Ret = (*BltRectFunc)(Dest, Source, Mask, ColorTranslation, &CombinedRect, + &Pt, MaskPoint, Brush, BrushPoint, rop4) && + Ret; + } + } + while (EnumMore); + break; + } + + return Ret; } diff --git a/drivers/dd/vga/display/objects/lineto.c b/drivers/dd/vga/display/objects/lineto.c index 6fceab6..7e83ecb 100644 --- a/drivers/dd/vga/display/objects/lineto.c +++ b/drivers/dd/vga/display/objects/lineto.c @@ -1,9 +1,297 @@ +/* + * ReactOS VGA driver + * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 ReactOS Team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * $Id$ + */ + #include "../vgaddi.h" #include "../vgavideo/vgavideo.h" +/* + * Draw a line from top-left to bottom-right + */ +static void FASTCALL +vgaNWtoSE(PCLIPOBJ Clip, PBRUSHOBJ Brush, LONG x, LONG y, LONG deltax, LONG deltay) +{ + int i; + int error; + BOOLEAN EnumMore; + PRECTL ClipRect; + RECT_ENUM RectEnum; + ULONG Pixel = Brush->iSolidColor; + LONG delta; + + CLIPOBJ_cEnumStart(Clip, FALSE, CT_RECTANGLES, CD_RIGHTDOWN, ENUM_RECT_LIMIT); + EnumMore = CLIPOBJ_bEnum(Clip, (ULONG) sizeof(RectEnum), (PVOID) &RectEnum); + ClipRect = RectEnum.arcl; + delta = max(deltax, deltay); + i = 0; + error = delta/2; + while (i < delta && (ClipRect < RectEnum.arcl + RectEnum.c || EnumMore)) + { + while ((ClipRect < RectEnum.arcl + RectEnum.c /* there's still a current clip rect */ + && (ClipRect->bottom <= y /* but it's above us */ + || (ClipRect->top <= y && ClipRect->right <= x))) /* or to the left of us */ + || EnumMore) /* no current clip rect, but rects left */ + { + /* Skip to the next clip rect */ + if (RectEnum.arcl + RectEnum.c <= ClipRect) + { + EnumMore = CLIPOBJ_bEnum(Clip, (ULONG) sizeof(RectEnum), (PVOID) &RectEnum); + ClipRect = RectEnum.arcl; + } + else + { + ClipRect++; + } + } + if ( ClipRect < RectEnum.arcl + RectEnum.c ) /* If there's no current clip rect we're done */ + { + if (ClipRect->left <= x && ClipRect->top <= y) + { + vgaPutPixel ( x, y, Pixel ); + } + if ( deltax < deltay ) + { + y++; + error += deltax; + if ( error >= deltay ) + { + x++; + error -= deltay; + } + } + else + { + x++; + error += deltay; + if ( error >= deltax ) + { + y++; + error -= deltax; + } + } + i++; + } + } +} + +static void FASTCALL +vgaSWtoNE(PCLIPOBJ Clip, PBRUSHOBJ Brush, LONG x, LONG y, LONG deltax, LONG deltay) +{ + int i; + int error; + BOOLEAN EnumMore; + PRECTL ClipRect; + RECT_ENUM RectEnum; + ULONG Pixel = Brush->iSolidColor; + LONG delta; + CLIPOBJ_cEnumStart(Clip, FALSE, CT_RECTANGLES, CD_RIGHTUP, ENUM_RECT_LIMIT); + EnumMore = CLIPOBJ_bEnum(Clip, (ULONG) sizeof(RectEnum), (PVOID) &RectEnum); + ClipRect = RectEnum.arcl; + delta = max(deltax, deltay); + i = 0; + error = delta/2; + while (i < delta && (ClipRect < RectEnum.arcl + RectEnum.c || EnumMore)) + { + while ((ClipRect < RectEnum.arcl + RectEnum.c + && (y < ClipRect->top + || (y < ClipRect->bottom && ClipRect->right <= x))) + || EnumMore) + { + if (RectEnum.arcl + RectEnum.c <= ClipRect) + { + EnumMore = CLIPOBJ_bEnum(Clip, (ULONG) sizeof(RectEnum), (PVOID) &RectEnum); + ClipRect = RectEnum.arcl; + } + else + { + ClipRect++; + } + } + if (ClipRect < RectEnum.arcl + RectEnum.c) + { + if (ClipRect->left <= x && y < ClipRect->bottom) + { + vgaPutPixel(x, y, Pixel); + } + if (deltax < deltay) + { + y--; + error = error + deltax; + if (deltay <= error) + { + x++; + error = error - deltay; + } + } + else + { + x++; + error = error + deltay; + if (deltax <= error) + { + y--; + error = error - deltax; + } + } + i++; + } + } +} + +static void FASTCALL +vgaNEtoSW(PCLIPOBJ Clip, PBRUSHOBJ Brush, LONG x, LONG y, LONG deltax, LONG deltay) +{ + int i; + int error; + BOOLEAN EnumMore; + PRECTL ClipRect; + RECT_ENUM RectEnum; + ULONG Pixel = Brush->iSolidColor; + LONG delta; + + CLIPOBJ_cEnumStart(Clip, FALSE, CT_RECTANGLES, CD_LEFTDOWN, ENUM_RECT_LIMIT); + EnumMore = CLIPOBJ_bEnum(Clip, (ULONG) sizeof(RectEnum), (PVOID) &RectEnum); + ClipRect = RectEnum.arcl; + delta = max(deltax, deltay); + i = 0; + error = delta/2; + while (i < delta && (ClipRect < RectEnum.arcl + RectEnum.c || EnumMore)) + { + while ((ClipRect < RectEnum.arcl + RectEnum.c + && (ClipRect->bottom <= y + || (ClipRect->top <= y && x < ClipRect->left))) + || EnumMore) + { + if (RectEnum.arcl + RectEnum.c <= ClipRect) + { + EnumMore = CLIPOBJ_bEnum(Clip, (ULONG) sizeof(RectEnum), (PVOID) &RectEnum); + ClipRect = RectEnum.arcl; + } + else + { + ClipRect++; + } + } + if (ClipRect < RectEnum.arcl + RectEnum.c) + { + if (x < ClipRect->right && ClipRect->top <= y) + { + vgaPutPixel(x, y, Pixel); + } + if (deltax < deltay) + { + y++; + error = error + deltax; + if (deltay <= error) + { + x--; + error = error - deltay; + } + } + else + { + x--; + error = error + deltay; + if (deltax <= error) + { + y++; + error = error - deltax; + } + } + i++; + } + } +} + +static void FASTCALL +vgaSEtoNW(PCLIPOBJ Clip, PBRUSHOBJ Brush, LONG x, LONG y, LONG deltax, LONG deltay) +{ + int i; + int error; + BOOLEAN EnumMore; + PRECTL ClipRect; + RECT_ENUM RectEnum; + ULONG Pixel = Brush->iSolidColor; + LONG delta; + + CLIPOBJ_cEnumStart(Clip, FALSE, CT_RECTANGLES, CD_LEFTUP, ENUM_RECT_LIMIT); + EnumMore = CLIPOBJ_bEnum(Clip, (ULONG) sizeof(RectEnum), (PVOID) &RectEnum); + ClipRect = RectEnum.arcl; + delta = max(deltax, deltay); + i = 0; + error = delta/2; + while (i < delta && (ClipRect < RectEnum.arcl + RectEnum.c || EnumMore)) + { + while ((ClipRect < RectEnum.arcl + RectEnum.c + && (y < ClipRect->top + || (y < ClipRect->bottom && x < ClipRect->left))) + || EnumMore) + { + if (RectEnum.arcl + RectEnum.c <= ClipRect) + { + EnumMore = CLIPOBJ_bEnum(Clip, (ULONG) sizeof(RectEnum), (PVOID) &RectEnum); + ClipRect = RectEnum.arcl; + } + else + { + ClipRect++; + } + } + if (ClipRect < RectEnum.arcl + RectEnum.c) + { + if (x < ClipRect->right && y < ClipRect->bottom) + { + vgaPutPixel(x, y, Pixel); + } + if (deltax < deltay) + { + y--; + error = error + deltax; + if (deltay <= error) + { + x--; + error = error - deltay; + } + } + else + { + x--; + error = error + deltay; + if (deltax <= error) + { + y--; + error = error - deltax; + } + } + i++; + } + } +} + +/* + * FIXME: Use Mix to perform ROPs + * FIXME: Non-solid Brush + */ BOOL STDCALL -DrvLineTo(SURFOBJ *Surface, +DrvLineTo(SURFOBJ *DestObj, CLIPOBJ *Clip, BRUSHOBJ *Brush, LONG x1, @@ -12,16 +300,12 @@ DrvLineTo(SURFOBJ *Surface, LONG y2, RECTL *RectBounds, MIX mix) - -// FIXME: Use ClipObj and RectBounds to clip the line where required -// FIXME: Use Mix to perform ROPs - { - LONG deltax, deltay, x, y, d, i, xchange, ychange, error, iSolidColor, hx, vy; - - iSolidColor = Brush->iSolidColor; // FIXME: Brush Realization... - - // FIXME: Implement clipping + LONG x, y, deltax, deltay, i, xchange, ychange, hx, vy; + ULONG Pixel = Brush->iSolidColor; + RECTL DestRect; + RECT_ENUM RectEnum; + BOOL EnumMore; x = x1; y = y1; @@ -30,73 +314,101 @@ DrvLineTo(SURFOBJ *Surface, if (deltax < 0) { - xchange = -1; - deltax = - deltax; - hx = x2; - x--; + xchange = -1; + deltax = - deltax; + hx = x2+1; + //x--; } else { - xchange = 1; - hx = x1; + xchange = 1; + hx = x1; } if (deltay < 0) { - ychange = -1; - deltay = - deltay; - vy = y2; - y--; + ychange = -1; + deltay = - deltay; + vy = y2+1; + //y--; } else { - ychange = 1; - vy = y1; - }; + ychange = 1; + vy = y1; + } if (y1 == y2) { - return vgaHLine(hx, y1, deltax, iSolidColor); + CLIPOBJ_cEnumStart(Clip, FALSE, CT_RECTANGLES, CD_RIGHTDOWN, ENUM_RECT_LIMIT); + do + { + EnumMore = CLIPOBJ_bEnum(Clip, (ULONG) sizeof(RectEnum), (PVOID) &RectEnum); + for (i = 0; i < RectEnum.c && RectEnum.arcl[i].top <= y1; i++) + { + if (y1 < RectEnum.arcl[i].bottom && + RectEnum.arcl[i].left <= hx + deltax && + hx < RectEnum.arcl[i].right) + { + + vgaHLine(max(hx, RectEnum.arcl[i].left), y1, + min(hx + deltax, RectEnum.arcl[i].right) + -max(hx, RectEnum.arcl[i].left), Pixel); + } + } + } + while (EnumMore); } - if (x1 == x2) + else if (x1 == x2) { - return vgaVLine(x1, vy, deltay, iSolidColor); + CLIPOBJ_cEnumStart(Clip, FALSE, CT_RECTANGLES, CD_RIGHTDOWN, ENUM_RECT_LIMIT); + do + { + EnumMore = CLIPOBJ_bEnum(Clip, (ULONG) sizeof(RectEnum), (PVOID) &RectEnum); + for (i = 0; i < RectEnum.c; i++) + { + if (RectEnum.arcl[i].left <= x1 && + x1 < RectEnum.arcl[i].right && + RectEnum.arcl[i].top <= vy + deltay && + vy < RectEnum.arcl[i].bottom) + { + vgaVLine(x1, + max(vy, RectEnum.arcl[i].top), + min(vy + deltay, RectEnum.arcl[i].bottom) + - max(vy, RectEnum.arcl[i].top), + Pixel); + } + } + } + while (EnumMore); } - - // Using individual pixels to draw a line neither horizontal or vertical - // Set up the VGA masking for individual pixels - - error = 0; - - if (deltax < deltay) + else { - for (i = 0; i < deltay; i++) - { - vgaPutPixel(x, y, iSolidColor); - y = y + ychange; - error = error + deltax; - - if (deltay <= error) - { - x = x + xchange; - error = error - deltay; - } - } + if (0 < xchange) + { + if (0 < ychange) + { + vgaNWtoSE(Clip, Brush, x, y, deltax, deltay); + } + else + { + vgaSWtoNE(Clip, Brush, x, y, deltax, deltay); + } + } + else + { + if (0 < ychange) + { + vgaNEtoSW(Clip, Brush, x, y, deltax, deltay); + } + else + { + vgaSEtoNW(Clip, Brush, x, y, deltax, deltay); + } + } } - else - { - for (i = 0; i < deltax; i++) - { - vgaPutPixel(x, y, iSolidColor); - x = x + xchange; - error = error + deltay; - if (deltax <= error) - { - y = y + ychange; - error = error - deltax; - } - } - } - - return TRUE; + + return TRUE; } + +/* EOF */ diff --git a/drivers/dd/vga/display/objects/paint.c b/drivers/dd/vga/display/objects/paint.c index f50ab17..be2afe2 100644 --- a/drivers/dd/vga/display/objects/paint.c +++ b/drivers/dd/vga/display/objects/paint.c @@ -17,17 +17,23 @@ BOOL VGADDIFillSolid(SURFOBJ *Surface, RECTL Dimensions, ULONG iColor) DPRINT("VGADDIFillSolid: x:%d, y:%d, w:%d, h:%d\n", x, y, w, h); // Swap dimensions so that x, y are at topmost left - if(Dimensions.right < Dimensions.left) { + if ( Dimensions.right < Dimensions.left ) + { x = Dimensions.right; x2 = Dimensions.left; - } else { + } + else + { x2 = Dimensions.right; x = Dimensions.left; } - if(Dimensions.bottom < Dimensions.top) { + if ( Dimensions.bottom < Dimensions.top ) + { y = Dimensions.bottom; y2 = Dimensions.top; - } else { + } + else + { y2 = Dimensions.bottom; y = Dimensions.top; } @@ -40,76 +46,84 @@ BOOL VGADDIFillSolid(SURFOBJ *Surface, RECTL Dimensions, ULONG iColor) offset = xconv[x]+y80[y]; // Make a note of original x - orgx=x; + orgx = x; - // If width is less than 8, draw using vertical lines - if(w<8) - { - for (i=x; i w ) + { + int mask = startmasks[ileftpix] & endmasks[irightpix]; - pre1=xconv[x-(8-ileftpix)]+y80[y]; - orgpre1=pre1; + WRITE_PORT_UCHAR((PUCHAR)GRA_I,0x08); // set the mask + WRITE_PORT_UCHAR((PUCHAR)GRA_D,mask); - if(ileftpix>0) + tmppre1 = pre1; + for ( j = y; j < y+h; j++ ) { - // Write left pixels - WRITE_PORT_UCHAR((PUCHAR)0x3ce,0x08); // set the mask - WRITE_PORT_UCHAR((PUCHAR)0x3cf,startmasks[ileftpix]); + a = READ_REGISTER_UCHAR ( vidmem+tmppre1 ); + WRITE_REGISTER_UCHAR ( vidmem+tmppre1, iColor ); + tmppre1 += 80; + } + return TRUE; + } - tmppre1 = pre1; - for (j=y; j 0 ) + { + // Write left pixels + WRITE_PORT_UCHAR((PUCHAR)GRA_I,0x08); // set the mask + WRITE_PORT_UCHAR((PUCHAR)GRA_D,startmasks[ileftpix]); - // Prepare new x for the middle - x=orgx+8; + tmppre1 = pre1; + for ( j = y; j < y+h; j++ ) + { + a = READ_REGISTER_UCHAR(vidmem + tmppre1); + WRITE_REGISTER_UCHAR(vidmem + tmppre1, iColor); + tmppre1 += 80; } - if(imidpix>0) - { - midpre1=xconv[x]+y80[y]; + // Prepare new x for the middle + x = orgx + 8; + } - // Set mask to all pixels in byte - WRITE_PORT_UCHAR((PUCHAR)0x3ce, 0x08); + if ( imidpix > 0 ) + { + midpre1=xconv[x] + y80[y]; - WRITE_PORT_UCHAR((PUCHAR)0x3cf, 0xff); + // Set mask to all pixels in byte + WRITE_PORT_UCHAR((PUCHAR)GRA_I, 0x08); - for (j=y; j> 3; /* Set write mode zero. */ WRITE_PORT_UCHAR((PUCHAR)GRA_I, 5); @@ -289,16 +287,17 @@ VOID VGADDI_HideCursor(PPDEV ppdev) { ULONG i, j, cx, cy, bitpos; - ULONG SizeX; + ULONG SizeX, SizeY; /* Display what was behind cursor */ - SizeX = ((oldx + ppdev->pPointerAttributes->Width) + 7) & ~0x7; + SizeX = min(((oldx + ppdev->pPointerAttributes->Width) + 7) & ~0x7, ppdev->sizeSurf.cx); SizeX -= (oldx & ~0x7); + SizeY = min(ppdev->pPointerAttributes->Height, ppdev->sizeSurf.cy - oldy); VGADDI_BltFromSavedScreenBits(oldx & ~0x7, oldy, ImageBehindCursor, SizeX, - ppdev->pPointerAttributes->Height); + SizeY); ppdev->pPointerAttributes->Enable = 0; } @@ -307,8 +306,8 @@ VOID VGADDI_ShowCursor(PPDEV ppdev) { ULONG i, j, cx, cy; - PUCHAR XorMask; - ULONG SizeX; + PUCHAR AndMask, XorMask; + ULONG SizeX, SizeY; if (ppdev->pPointerAttributes->Enable != 0) { @@ -320,30 +319,37 @@ VGADDI_ShowCursor(PPDEV ppdev) cy = ppdev->xyCursor.y; /* Used to repaint background */ - SizeX = ((cx + ppdev->pPointerAttributes->Width) + 7) & ~0x7; + SizeX = min(((cx + ppdev->pPointerAttributes->Width) + 7) & ~0x7, ppdev->sizeSurf.cx); SizeX -= (cx & ~0x7); + SizeY = min(ppdev->pPointerAttributes->Height, ppdev->sizeSurf.cy - cy); VGADDI_BltToSavedScreenBits(ImageBehindCursor, cx & ~0x7, cy, SizeX, - ppdev->pPointerAttributes->Height); + SizeY); /* Display the cursor. */ - XorMask = ppdev->pPointerAttributes->Pixels + - ppdev->pPointerAttributes->WidthInBytes * - ppdev->pPointerAttributes->Height; + SizeX = min(ppdev->pPointerAttributes->Width, ppdev->sizeSurf.cx - ppdev->xyCursor.x); + SizeY = min(ppdev->pPointerAttributes->Height, ppdev->sizeSurf.cy - ppdev->xyCursor.y); + AndMask = ppdev->pPointerAttributes->Pixels + + (ppdev->pPointerAttributes->Height - SizeY) * ppdev->pPointerAttributes->WidthInBytes; VGADDI_BltPointerToVGA(ppdev->xyCursor.x, ppdev->xyCursor.y, - ppdev->pPointerAttributes->Width, - ppdev->pPointerAttributes->Height, - ppdev->pPointerAttributes->Pixels, + SizeX, + SizeY, + AndMask, + ppdev->pPointerAttributes->WidthInBytes, VGA_AND); + XorMask = AndMask + + ppdev->pPointerAttributes->WidthInBytes * + ppdev->pPointerAttributes->Height; VGADDI_BltPointerToVGA(ppdev->xyCursor.x, ppdev->xyCursor.y, - ppdev->pPointerAttributes->Width, - ppdev->pPointerAttributes->Height, + SizeX, + SizeY, XorMask, + ppdev->pPointerAttributes->WidthInBytes, VGA_XOR); /* Save the new cursor location. */ diff --git a/drivers/dd/vga/display/objects/screen.c b/drivers/dd/vga/display/objects/screen.c index f4b7736..db6a702 100644 --- a/drivers/dd/vga/display/objects/screen.c +++ b/drivers/dd/vga/display/objects/screen.c @@ -109,6 +109,8 @@ BOOL InitVGA(PPDEV ppdev, BOOL bFirst) char* vidmem; + ppdev->sizeSurf.cx = 640; + ppdev->sizeSurf.cy = 480; ppdev->ModeNum = 12; // Set the mode that was requested diff --git a/drivers/dd/vga/display/vgaddi.h b/drivers/dd/vga/display/vgaddi.h index 64ddc4a..b89d9e4 100644 --- a/drivers/dd/vga/display/vgaddi.h +++ b/drivers/dd/vga/display/vgaddi.h @@ -233,3 +233,9 @@ PSAVED_SCREEN_BITS VGADDI_AllocSavedScreenBits(ULONG Size); VOID VGADDI_InitializeOffScreenMem(ULONG Start, ULONG Length); + +void FASTCALL +vgaReadScan ( int x, int y, int w, void *b ); + +void FASTCALL +vgaWriteScan ( int x, int y, int w, void *b ); diff --git a/drivers/dd/vga/display/vgavideo/.cvsignore b/drivers/dd/vga/display/vgavideo/.cvsignore index 5761abc..ecc3f45 100644 --- a/drivers/dd/vga/display/vgavideo/.cvsignore +++ b/drivers/dd/vga/display/vgavideo/.cvsignore @@ -1 +1,2 @@ *.o +*.map diff --git a/drivers/dd/vga/display/vgavideo/vgavideo.c b/drivers/dd/vga/display/vgavideo/vgavideo.c index 7d9aa8d..89696f9 100644 --- a/drivers/dd/vga/display/vgavideo/vgavideo.c +++ b/drivers/dd/vga/display/vgavideo/vgavideo.c @@ -12,6 +12,7 @@ int bit8[640]; int startmasks[8]; int endmasks[8]; char* vidmem; +static ULONG UnpackPixel[256]; static unsigned char saved_SEQ_mask; /* 0x02 */ static unsigned char saved_GC_eSR; /* 0x01 */ @@ -23,6 +24,9 @@ static unsigned char leftMask; static int byteCounter; static unsigned char rightMask; +#define READ_REGISTER_UCHAR(p) (*((PUCHAR)(p))) +#define WRITE_REGISTER_UCHAR(p,c) (*((PCHAR)(p))) = (c) + INT abs(INT nm) { if(nm<0) @@ -54,11 +58,11 @@ div_t div(int num, int denom) return r; } -int mod(int num, int denom) +/*int mod(int num, int denom) { div_t dvt = div(num, denom); return dvt.rem; -} +}*/ BYTE bytesPerPixel(ULONG Format) { @@ -66,32 +70,31 @@ BYTE bytesPerPixel(ULONG Format) // FIXME: GDI bitmaps are supposed to be pixel-packed. Right now if the // pixel size if < 1 byte we expand it to 1 byte for simplicities sake - if(Format==BMF_1BPP) + switch ( Format ) { + case BMF_1BPP: return 1; - } else - if((Format==BMF_4BPP) || (Format==BMF_4RLE)) - { + + case BMF_4BPP: + case BMF_4RLE: return 1; - } else - if((Format==BMF_8BPP) || (Format==BMF_8RLE)) - { + + case BMF_8BPP: + case BMF_8RLE: return 1; - } else - if(Format==BMF_16BPP) - { + + case BMF_16BPP: return 2; - } else - if(Format==BMF_24BPP) - { + + case BMF_24BPP: return 3; - } else - if(Format==BMF_32BPP) - { + + case BMF_32BPP: return 4; - } - return 0; + default: + return 0; + } } VOID vgaPreCalc() @@ -106,17 +109,15 @@ VOID vgaPreCalc() startmasks[5] = 31; startmasks[6] = 63; startmasks[7] = 127; - startmasks[8] = 255; - - endmasks[0] = 128; - endmasks[1] = 192; - endmasks[2] = 224; - endmasks[3] = 240; - endmasks[4] = 248; - endmasks[5] = 252; - endmasks[6] = 254; - endmasks[7] = 255; - endmasks[8] = 255; + + endmasks[0] = 0; + endmasks[1] = 128; + endmasks[2] = 192; + endmasks[3] = 224; + endmasks[4] = 240; + endmasks[5] = 248; + endmasks[6] = 252; + endmasks[7] = 254; for(j=0; j<80; j++) { @@ -159,6 +160,19 @@ VOID vgaPreCalc() (((j >> 6) & 0x1) << 1) | (((j >> 7) & 0x1) << 0); } + + for (j = 0; j < 256; j++) + { + UnpackPixel[j] = + (((j >> 0) & 0x1) << 4) | + (((j >> 1) & 0x1) << 0) | + (((j >> 2) & 0x1) << 12) | + (((j >> 3) & 0x1) << 8) | + (((j >> 4) & 0x1) << 20) | + (((j >> 5) & 0x1) << 16) | + (((j >> 6) & 0x1) << 28) | + (((j >> 7) & 0x1) << 24); + } } void @@ -196,8 +210,8 @@ VOID vgaPutPixel(INT x, INT y, UCHAR c) offset = xconv[x]+y80[y]; - WRITE_PORT_UCHAR((PUCHAR)0x3ce,0x08); - WRITE_PORT_UCHAR((PUCHAR)0x3cf,maskbit[x]); + WRITE_PORT_UCHAR((PUCHAR)GRA_I,0x08); + WRITE_PORT_UCHAR((PUCHAR)GRA_D,maskbit[x]); a = READ_REGISTER_UCHAR(vidmem + offset); WRITE_REGISTER_UCHAR(vidmem + offset, c); @@ -210,8 +224,8 @@ VOID vgaPutByte(INT x, INT y, UCHAR c) offset = xconv[x]+y80[y]; // Set the write mode - WRITE_PORT_UCHAR((PUCHAR)0x3ce,0x08); - WRITE_PORT_UCHAR((PUCHAR)0x3cf,0xff); + WRITE_PORT_UCHAR((PUCHAR)GRA_I,0x08); + WRITE_PORT_UCHAR((PUCHAR)GRA_D,0xff); WRITE_REGISTER_UCHAR(vidmem + offset, c); } @@ -220,13 +234,13 @@ VOID vgaGetByte(ULONG offset, UCHAR *b, UCHAR *g, UCHAR *r, UCHAR *i) { - WRITE_PORT_USHORT((PUSHORT)0x03ce, 0x0304); + WRITE_PORT_USHORT((PUSHORT)GRA_I, 0x0304); *i = READ_REGISTER_UCHAR(vidmem + offset); - WRITE_PORT_USHORT((PUSHORT)0x03ce, 0x0204); + WRITE_PORT_UCHAR((PUCHAR)GRA_D, 0x02); *r = READ_REGISTER_UCHAR(vidmem + offset); - WRITE_PORT_USHORT((PUSHORT)0x03ce, 0x0104); + WRITE_PORT_UCHAR((PUCHAR)GRA_D, 0x01); *g = READ_REGISTER_UCHAR(vidmem + offset); - WRITE_PORT_USHORT((PUSHORT)0x03ce, 0x0004); + WRITE_PORT_UCHAR((PUCHAR)GRA_D, 0x00); *b = READ_REGISTER_UCHAR(vidmem + offset); } @@ -260,71 +274,72 @@ BOOL vgaHLine(INT x, INT y, INT len, UCHAR c) ULONG orgpre1, orgx, midpre1; ULONG ileftpix, imidpix, irightpix; - orgx=x; + orgx = x; - if(len<8) + /*if ( len < 8 ) { - for (i=x; i len ) { - ileftpix = 0; - imidpix++; - } + int mask = startmasks[ileftpix] & endmasks[irightpix]; + // Write left pixels + WRITE_PORT_UCHAR((PUCHAR)GRA_I,0x08); // set the mask + WRITE_PORT_UCHAR((PUCHAR)GRA_D,mask); - pre1=xconv[x-(8-ileftpix)]+y80[y]; - orgpre1=pre1; + a = READ_REGISTER_UCHAR(vidmem + pre1); + WRITE_REGISTER_UCHAR(vidmem + pre1, c); + + return TRUE; + } // Left - if(ileftpix>0) + if ( ileftpix > 0 ) { // Write left pixels - WRITE_PORT_UCHAR((PUCHAR)0x3ce,0x08); // set the mask - WRITE_PORT_UCHAR((PUCHAR)0x3cf,startmasks[ileftpix]); + WRITE_PORT_UCHAR((PUCHAR)GRA_I,0x08); // set the mask + WRITE_PORT_UCHAR((PUCHAR)GRA_D,startmasks[ileftpix]); a = READ_REGISTER_UCHAR(vidmem + pre1); WRITE_REGISTER_UCHAR(vidmem + pre1, c); // Prepare new x for the middle - x=orgx+8; + x = orgx + 8; } - if(imidpix>0) + if ( imidpix > 0 ) { - midpre1=xconv[x]+y80[y]; + midpre1 = xconv[x] + y80[y]; // Set mask to all pixels in byte - WRITE_PORT_UCHAR((PUCHAR)0x3ce, 0x08); - WRITE_PORT_UCHAR((PUCHAR)0x3cf, 0xff); + WRITE_PORT_UCHAR((PUCHAR)GRA_I, 0x08); + WRITE_PORT_UCHAR((PUCHAR)GRA_D, 0xff); memset(vidmem+midpre1, c, imidpix); // write middle pixels, no need to read in latch because of the width } - if(irightpix>0) + if ( irightpix > 0 ) { - x=orgx+len-irightpix; - - for(i=x; i> 3; + ULONG shift = x - (x & ~0x7); + UCHAR pixel, nextpixel; + ULONG rightcount; + ULONG i, j; + ULONG stride = w >> 3; + + /* Calculate the number of rightmost bytes not in a dword block. */ + if (w >= 8) + { + rightcount = w % 8; + } + else + { + stride = 0; + rightcount = w; + } + + /* Reset the destination. */ + memset(b, 0, h * Dest_lDelta); + + for (plane = 0; plane < 4; plane++) + { + PUCHAR dest = b; + + /* Select the plane we are reading in this iteration. */ + WRITE_PORT_UCHAR((PUCHAR)GRA_I, 0x04); + WRITE_PORT_UCHAR((PUCHAR)GRA_D, plane); + + for (j = 0; j < h; j++) + { + PULONG destline = (PULONG)dest; + PUCHAR src = vidmem + (y + j) * SCREEN_STRIDE + left; + /* Read the data for one plane for an eight aligned pixel block. */ + nextpixel = PreCalcReverseByte[READ_REGISTER_UCHAR(src)]; + for (i = 0; i < stride; i++, src++, destline++) + { + /* Form the data for one plane for an aligned block in the destination. */ + pixel = nextpixel; + pixel >>= shift; + + nextpixel = PreCalcReverseByte[READ_REGISTER_UCHAR(src + 1)]; + pixel |= (nextpixel << (8 - shift)); + + /* Expand the plane data to 'chunky' format and store. */ + *destline |= (UnpackPixel[pixel] << plane); + } + /* Handle any pixels not falling into a full block. */ + if (rightcount != 0) + { + ULONG row; + + /* Form the data for a complete block. */ + pixel = nextpixel; + pixel >>= shift; + + nextpixel = PreCalcReverseByte[READ_REGISTER_UCHAR(src + 1)]; + pixel |= (nextpixel << (8 - shift)); + + row = UnpackPixel[pixel] << plane; + + /* Store the data for each pixel in the destination. */ + for (i = 0; i < rightcount; i++) + { + ((PUCHAR)destline)[i] |= (row & 0xFF); + row >>= 8; + } + } + dest += Dest_lDelta; + } + } +#ifdef VGA_VERIFY + for (j = 0; j < h; j++) + { + for (i = 0; i < w; i+=2) + { + UCHAR c1, c2; + ULONG mask = (i < (w - 1)) ? 0xFF : 0xF0; + + c1 = (vgaGetPixel(x + i, y + j) << 4) | (vgaGetPixel(x + i + 1, y + j)); + c2 = ((PUCHAR)b)[(j * Dest_lDelta) + (i >> 1)]; + if ((c1 & mask) != (c2 & mask)) + { + __asm__("int $3\n\t" : /* no outputs */ : /* no inputs */); + } + } + } +#endif /* VGA_VERIFY */ +} + +#if 0 +void DIB_BltFromVGA(int x, int y, int w, int h, void *b, int Dest_lDelta) // DIB blt from the VGA. // For now we just do slow reads -- pixel by pixel, packing each one into the correct 4BPP format. { @@ -385,7 +498,7 @@ void DIB_BltFromVGA(int x, int y, int w, int h, void *b, int Dest_lDelta) BYTE b1, b2; // Check if the width is odd - if(mod(w, 2)>0) + if(mod2(w)>0) { edgePixel = TRUE; x2 -= 1; @@ -404,7 +517,7 @@ void DIB_BltFromVGA(int x, int y, int w, int h, void *b, int Dest_lDelta) if(edgePixel == TRUE) { b1 = vgaGetPixel(x2, j); - *pb = b1; + *pb = b1 << 4; pb++; } @@ -412,49 +525,98 @@ void DIB_BltFromVGA(int x, int y, int w, int h, void *b, int Dest_lDelta) pb = opb; // new test code } } +#endif +/* DIB blt to the VGA. */ void DIB_BltToVGA(int x, int y, int w, int h, void *b, int Source_lDelta) - -// DIB blt to the VGA. -// For now we just do slow writes -- pixel by pixel, packing each one into the correct 4BPP format. { - PBYTE pb = b, opb = b; - BOOLEAN edgePixel = FALSE; - ULONG i, j; - ULONG x2 = x + w; - ULONG y2 = y + h; - BYTE b1, b2; - - // Check if the width is odd - if(mod(w, 2)>0) - { - edgePixel = TRUE; - x2 -= 1; - } + PBYTE pb, opb = b; + ULONG i, j; + ULONG x2 = x + w; + ULONG y2 = y + h; + ULONG offset; + UCHAR a; - for (j=y; j> 4; - b2 = *pb & 0x0f; - vgaPutPixel(i, j, b1); - vgaPutPixel(i+1, j, b2); - pb++; + pb = opb; + offset = xconv[i] + y80[y]; + + WRITE_PORT_UCHAR((PUCHAR)GRA_I, 0x08); // set the mask + WRITE_PORT_UCHAR((PUCHAR)GRA_D, maskbit[i]); + + if (0 == ((i - x) % 2)) + { + for (j = y; j < y2; j++) + { + a = READ_REGISTER_UCHAR(vidmem + offset); + WRITE_REGISTER_UCHAR(vidmem + offset, (*pb & 0xf0) >> 4); + offset += 80; + pb += Source_lDelta; + } + } + else + { + for (j = y; j < y2; j++) + { + a = READ_REGISTER_UCHAR(vidmem + offset); + WRITE_REGISTER_UCHAR(vidmem + offset, *pb & 0x0f); + offset += 80; + pb += Source_lDelta; + } + } + + if (0 != ((i - x) % 2)) + { + opb++; + } } +} - if(edgePixel == TRUE) +/* DIB blt to the VGA. */ +void DIB_BltToVGAWithXlate(int x, int y, int w, int h, void *b, int Source_lDelta, PXLATEOBJ Xlate) +{ + PBYTE pb, opb = b; + ULONG i, j; + ULONG x2 = x + w; + ULONG y2 = y + h; + ULONG offset; + UCHAR a; + + for (i = x; i < x2; i++) { - b1 = *pb; - vgaPutPixel(x2, j, b1); - pb++; + pb = opb; + offset = xconv[i] + y80[y]; + + WRITE_PORT_UCHAR((PUCHAR)GRA_I, 0x08); // set the mask + WRITE_PORT_UCHAR((PUCHAR)GRA_D, maskbit[i]); + + if (0 == ((i - x) % 2)) + { + for (j = y; j < y2; j++) + { + a = READ_REGISTER_UCHAR(vidmem + offset); + WRITE_REGISTER_UCHAR(vidmem + offset, XLATEOBJ_iXlate(Xlate, (*pb & 0xf0) >> 4)); + offset += 80; + pb += Source_lDelta; + } + } + else + { + for (j = y; j < y2; j++) + { + a = READ_REGISTER_UCHAR(vidmem + offset); + WRITE_REGISTER_UCHAR(vidmem + offset, XLATEOBJ_iXlate(Xlate, *pb & 0x0f)); + offset += 80; + pb += Source_lDelta; + } + } + + if (0 != ((i - x) % 2)) + { + opb++; + } } - - opb += Source_lDelta; - - pb = opb; - - } } void DIB_TransparentBltToVGA(int x, int y, int w, int h, void *b, int Source_lDelta, ULONG trans) @@ -470,7 +632,7 @@ void DIB_TransparentBltToVGA(int x, int y, int w, int h, void *b, int Source_lDe BYTE b1, b2; // Check if the width is odd - if(mod(w, 2)>0) + if(mod2(w)>0) { edgePixel = TRUE; x2 -= 1; @@ -500,9 +662,141 @@ void DIB_TransparentBltToVGA(int x, int y, int w, int h, void *b, int Source_lDe } } +// This algorithm goes from left to right, storing each 4BPP pixel +// in an entire byte. +void FASTCALL +vgaReadScan ( int x, int y, int w, void *b ) +{ + unsigned char *vp, *vpP; + unsigned char data, mask, maskP; + unsigned char *bp; + unsigned char plane_mask; + int byte_per_line = SCREEN_X >> 3; + int plane, i; + + ASSIGNVP4(x, y, vpP) + ASSIGNMK4(x, y, maskP) + get_masks(x, w); + WRITE_PORT_USHORT((PUSHORT)GRA_I, 0x0005); // read mode 0 + WRITE_PORT_UCHAR((PUCHAR)GRA_I, 0x04); // read map select + + memset ( b, 0, w ); + + for ( plane=0, plane_mask=1; plane < 4; plane++, plane_mask<<=1 ) + { + WRITE_PORT_UCHAR((PUCHAR)GRA_D, plane); // read map select + + vp = vpP; + bp = b; + if ( leftMask ) + { + mask = maskP; + data = *vp++; + do + { + if (data & mask) + *bp |= plane_mask; + bp++; + mask >>= 1; + } while (mask & leftMask); + + } + if (byteCounter) + { + for (i=byteCounter; i>0; i--) + { + data = *vp++; + if (data & 0x80) *bp |= plane_mask; + bp++; + if (data & 0x40) *bp |= plane_mask; + bp++; + if (data & 0x20) *bp |= plane_mask; + bp++; + if (data & 0x10) *bp |= plane_mask; + bp++; + if (data & 0x08) *bp |= plane_mask; + bp++; + if (data & 0x04) *bp |= plane_mask; + bp++; + if (data & 0x02) *bp |= plane_mask; + bp++; + if (data & 0x01) *bp |= plane_mask; + bp++; + } + } + if (rightMask) + { + mask = 0x80; + data = *vp; + do + { + if (data & mask) + *bp |= plane_mask; + bp++; + mask >>= 1; + } while (mask & rightMask); + } + } + + // We don't need this if the next call is a DFB blt to VGA (as in the case of moving the mouse pointer) + //WRITE_PORT_UCHAR((PUCHAR)GRA_I, 0x05); // write mode 2 + //WRITE_PORT_UCHAR((PUCHAR)GRA_D, 0x02); + //WRITE_PORT_UCHAR((PUCHAR)GRA_I, 0x03); // replace + //WRITE_PORT_UCHAR((PUCHAR)GRA_D, 0x00); +} + +// This algorithm goes from left to right +// It stores each 4BPP pixel in an entire byte. +void FASTCALL +vgaWriteScan ( int x, int y, int w, void *b ) +{ + unsigned char *bp; + unsigned char *vp; + unsigned char init_mask; + volatile unsigned char dummy; + int byte_per_line; + int i, j, off, init_off = x&7; + + bp = b; + ASSIGNVP4(x, y, vp) + ASSIGNMK4(x, y, init_mask) + byte_per_line = SCREEN_X >> 3; + + WRITE_PORT_UCHAR((PUCHAR)GRA_I, 0x05); // write mode 2 + WRITE_PORT_UCHAR((PUCHAR)GRA_D, 0x02); + WRITE_PORT_UCHAR((PUCHAR)GRA_I, 0x03); // replace + WRITE_PORT_UCHAR((PUCHAR)GRA_D, 0x00); + WRITE_PORT_UCHAR((PUCHAR)GRA_I, 0x08); // bit mask + + //DbgPrint("vgaWriteScan(%i,%i,%i...)\n",x,y,w); + for ( j = 0; j < 8; j++ ) + { + unsigned int mask = 0x80 >> j; + //DbgPrint("j=%i\n",j); + WRITE_PORT_UCHAR ( (PUCHAR)GRA_D, (unsigned char)mask ); + i = j - init_off; + off = 0; + if ( j < init_off ) + i += 8, off++; + while ( i < w ) + { + //DbgPrint("(%i)",i); + dummy = vp[off]; + //DbgPrint("."); + dummy = bp[i]; + //DbgPrint("."); + vp[off] = dummy; + //DbgPrint("."); + i += 8; + off++; + } + //DbgPrint("\n"); + } +} + void DFB_BltFromVGA(int x, int y, int w, int h, void *b, int bw) -// This algorithm goes from goes from left to right, and inside that loop, top to bottom. +// This algorithm goes from left to right, and inside that loop, top to bottom. // It also stores each 4BPP pixel in an entire byte. { unsigned char *vp, *vpY, *vpP; @@ -521,30 +815,38 @@ void DFB_BltFromVGA(int x, int y, int w, int h, void *b, int bw) // clear buffer bp=b; - for (j=h; j>0; j--) { + for (j=h; j>0; j--) + { memset(bp, 0, w); bp += bw; } - for (plane=0, plane_mask=1; plane<4; plane++, plane_mask<<=1) { + for ( plane=0, plane_mask=1; plane < 4; plane++, plane_mask<<=1 ) + { WRITE_PORT_UCHAR((PUCHAR)GRA_D, plane); // read map select vpY = vpP; bpY = b; - for (j=h; j>0; j--) { + for ( j=h; j>0; j-- ) + { vp = vpY; bp = bpY; - if (leftMask) { + if ( leftMask ) + { mask = maskP; data = *vp++; - do { - if (data & mask) *bp |= plane_mask; + do + { + if (data & mask) + *bp |= plane_mask; bp++; mask >>= 1; } while (mask & leftMask); } - if (byteCounter) { - for (i=byteCounter; i>0; i--) { + if (byteCounter) + { + for (i=byteCounter; i>0; i--) + { data = *vp++; if (data & 0x80) *bp |= plane_mask; bp++; @@ -564,10 +866,12 @@ void DFB_BltFromVGA(int x, int y, int w, int h, void *b, int bw) bp++; } } - if (rightMask) { + if (rightMask) + { mask = 0x80; data = *vp; - do { + do + { if (data & mask) *bp |= plane_mask; bp++; mask >>= 1; @@ -587,7 +891,7 @@ void DFB_BltFromVGA(int x, int y, int w, int h, void *b, int bw) void DFB_BltToVGA(int x, int y, int w, int h, void *b, int bw) -// This algorithm goes from goes from left to right, and inside that loop, top to bottom. +// This algorithm goes from left to right, and inside that loop, top to bottom. // It also stores each 4BPP pixel in an entire byte. { unsigned char *bp, *bpX; @@ -608,18 +912,21 @@ void DFB_BltToVGA(int x, int y, int w, int h, void *b, int bw) WRITE_PORT_UCHAR((PUCHAR)GRA_D, 0x00); WRITE_PORT_UCHAR((PUCHAR)GRA_I, 0x08); // bit mask - for (i=w; i>0; i--) { + for (i=w; i>0; i--) + { WRITE_PORT_UCHAR((PUCHAR)GRA_D, mask); bp = bpX; vp = vpX; - for (j=h; j>0; j--) { + for (j=h; j>0; j--) + { dummy = *vp; *vp = *bp; bp += bw; vp += byte_per_line; } bpX++; - if ((mask >>= 1) == 0) { + if ((mask >>= 1) == 0) + { vpX++; mask = 0x80; } @@ -649,11 +956,13 @@ void DFB_BltToVGA_Transparent(int x, int y, int w, int h, void *b, int bw, char WRITE_PORT_UCHAR((PUCHAR)GRA_D, 0x00); WRITE_PORT_UCHAR((PUCHAR)GRA_I, 0x08); // bit mask - for (i=w; i>0; i--) { + for (i=w; i>0; i--) + { WRITE_PORT_UCHAR((PUCHAR)GRA_D, mask); bp = bpX; vp = vpX; - for (j=h; j>0; j--) { + for (j=h; j>0; j--) + { if (*bp != Trans) { dummy = *vp; @@ -663,7 +972,8 @@ void DFB_BltToVGA_Transparent(int x, int y, int w, int h, void *b, int bw, char vp += byte_per_line; } bpX++; - if ((mask >>= 1) == 0) { + if ((mask >>= 1) == 0) + { vpX++; mask = 0x80; } @@ -684,7 +994,7 @@ void DFB_BltToDIB(int x, int y, int w, int h, void *b, int bw, void *bdib, int d for (i=w; i>0; i--) { // determine the bit shift for the DIB pixel - dib_shift = mod(w-i, 2); + dib_shift = mod2(w-i); if(dib_shift > 0) dib_shift = 4; dibTmp = dib; @@ -713,7 +1023,7 @@ void DIB_BltToDFB(int x, int y, int w, int h, void *b, int bw, void *bdib, int d for (i=w; i>0; i--) { // determine the bit shift for the DIB pixel - dib_shift = mod(w-i, 2); + dib_shift = mod2(w-i); if(dib_shift > 0) { dib_shift = 0; dib_and = 0x0f; diff --git a/drivers/dd/vga/display/vgavideo/vgavideo.h b/drivers/dd/vga/display/vgavideo/vgavideo.h index 0a4e97d..77be5ab 100644 --- a/drivers/dd/vga/display/vgavideo/vgavideo.h +++ b/drivers/dd/vga/display/vgavideo/vgavideo.h @@ -2,6 +2,8 @@ #define SCREEN_X 640 #define SCREEN_Y 480 +#define SCREEN_STRIDE 80 + #define VGA_NORMAL 0 #define VGA_AND 8 #define VGA_OR 16 @@ -64,3 +66,6 @@ BOOL VGADDIIntersectRect(PRECTL prcDst, PRECTL prcSrc1, PRECTL prcSrc2); #define ASSIGNMK4(x, y, mask) mask = 0x80 >> ((x) & 7); void get_masks(int x, int w); + +#define mod8(n) ((n)&7) +#define mod2(n) ((n)&1) diff --git a/drivers/dd/vga/miniport/.cvsignore b/drivers/dd/vga/miniport/.cvsignore index 1630a60..50811c0 100644 --- a/drivers/dd/vga/miniport/.cvsignore +++ b/drivers/dd/vga/miniport/.cvsignore @@ -5,3 +5,4 @@ vgamp.coff *.o *.sym *.sys +*.map diff --git a/drivers/dd/vga/miniport/initvga.c b/drivers/dd/vga/miniport/initvga.c index 212efcc..d2a4ead 100644 --- a/drivers/dd/vga/miniport/initvga.c +++ b/drivers/dd/vga/miniport/initvga.c @@ -1,7 +1,9 @@ #include -#include #include "vgavideo.h" +#define NDEBUG +#include + void outxay(PUSHORT ad, UCHAR x, UCHAR y) { USHORT xy = (x << 8) + y; @@ -80,13 +82,13 @@ void InitVGAMode() setMode(Mode12); // Get the VGA into the mode we want to work with - WRITE_PORT_UCHAR((PUCHAR)0x3ce,0x08); // Set - WRITE_PORT_UCHAR((PUCHAR)0x3cf,0); // the MASK - WRITE_PORT_USHORT((PUSHORT)0x3ce,0x0205); // write mode = 2 (bits 0,1) read mode = 0 (bit 3) + WRITE_PORT_UCHAR((PUCHAR)GRA_I,0x08); // Set + WRITE_PORT_UCHAR((PUCHAR)GRA_D,0); // the MASK + WRITE_PORT_USHORT((PUSHORT)GRA_I,0x0205); // write mode = 2 (bits 0,1) read mode = 0 (bit 3) i = READ_REGISTER_UCHAR(vidmem); // Update bit buffer WRITE_REGISTER_UCHAR(vidmem, 0); // Write the pixel - WRITE_PORT_UCHAR((PUCHAR)0x3ce,0x08); - WRITE_PORT_UCHAR((PUCHAR)0x3cf,0xff); + WRITE_PORT_UCHAR((PUCHAR)GRA_I,0x08); + WRITE_PORT_UCHAR((PUCHAR)GRA_D,0xff); // Zero out video memory (clear a possibly trashed screen) RtlZeroMemory(vidmem, 64000); diff --git a/drivers/dd/vga/miniport/vgamp.c b/drivers/dd/vga/miniport/vgamp.c index 8dd9ba3..f89dec1 100644 --- a/drivers/dd/vga/miniport/vgamp.c +++ b/drivers/dd/vga/miniport/vgamp.c @@ -24,12 +24,12 @@ VGAStartIO(PVOID DeviceExtension, PVIDEO_REQUEST_PACKET RequestPacket); /* static BOOLEAN STDCALL -VGAInterrupt(PVOID DeviceExtension); +VGAInterrupt(PVOID DeviceExtension);*/ static BOOLEAN STDCALL VGAResetHw(PVOID DeviceExtension, ULONG Columns, ULONG Rows); -static VOID STDCALL +/*static VOID STDCALL VGATimer(PVOID DeviceExtension); */ @@ -90,7 +90,7 @@ DriverEntry(IN PVOID Context1, InitData.HwInitialize = VGAInitialize; InitData.HwStartIO = VGAStartIO; /* InitData.HwInterrupt = VGAInterrupt; */ - /* InitData.HwResetHw = VGAResetHw; */ + InitData.HwResetHw = VGAResetHw; /* InitData.HwTimer = VGATimer; */ return VideoPortInitialize(Context1, Context2, &InitData, NULL); @@ -157,7 +157,7 @@ VGAFindAdapter(PVOID DeviceExtension, static BOOLEAN STDCALL VGAInitialize(PVOID DeviceExtension) { - return FALSE; + return TRUE; } // VGAStartIO @@ -339,6 +339,7 @@ VGAInterrupt(PVOID DeviceExtension) { return(TRUE); } +#endif // VGAResetHw // @@ -362,9 +363,11 @@ VGAResetHw(PVOID DeviceExtension, ULONG Columns, ULONG Rows) { - return(TRUE); + /* We don't anything to the vga that int10 can't cope with. */ + return(FALSE); } +#if 0 // VGATimer // // DESCRIPTION: diff --git a/drivers/dd/vga/miniport/vgavideo.c b/drivers/dd/vga/miniport/vgavideo.c index faafdbc..7020e66 100644 --- a/drivers/dd/vga/miniport/vgavideo.c +++ b/drivers/dd/vga/miniport/vgavideo.c @@ -81,8 +81,8 @@ VOID vgaPreCalc() void vgaSetWriteMode(char mode) { - VideoPortWritePortUchar((PUCHAR)0x03ce, 0x03); - VideoPortWritePortUchar((PUCHAR)0x03cf, mode); + VideoPortWritePortUchar((PUCHAR)GRA_I, 0x03); + VideoPortWritePortUchar((PUCHAR)GRA_D, mode); } void vgaSetColor(int cindex, int red, int green, int blue) diff --git a/drivers/dd/vga/miniport/vgavideo.h b/drivers/dd/vga/miniport/vgavideo.h index 9fb566b..4fd64e3 100644 --- a/drivers/dd/vga/miniport/vgavideo.h +++ b/drivers/dd/vga/miniport/vgavideo.h @@ -21,6 +21,13 @@ char* vidmem; #define ATTRIB 0x3c0 #define STATUS 0x3da +#define SEQ_I 0x3C4 /* Sequencer Index */ +#define SEQ_D 0x3C5 /* Sequencer Data Register */ + +#define GRA_I 0x3CE /* Graphics Controller Index */ +#define GRA_D 0x3CF /* Graphics Controller Data Register */ + + typedef struct _VideoMode { unsigned short VidSeg; unsigned char Misc; diff --git a/drivers/dd/videoprt/.cvsignore b/drivers/dd/videoprt/.cvsignore index 44e72b8..c969c5d 100644 --- a/drivers/dd/videoprt/.cvsignore +++ b/drivers/dd/videoprt/.cvsignore @@ -2,3 +2,4 @@ videoprt.coff *.o *.sym *.sys +*.map diff --git a/drivers/dd/videoprt/videoprt.c b/drivers/dd/videoprt/videoprt.c index a83e243..d1dbf1a 100644 --- a/drivers/dd/videoprt/videoprt.c +++ b/drivers/dd/videoprt/videoprt.c @@ -6,7 +6,7 @@ */ #include -#include +#include #include #include "../../../ntoskrnl/include/internal/v86m.h" @@ -38,6 +38,7 @@ typedef struct _VIDEO_PORT_DEVICE_EXTENSTION KIRQL IRQL; KAFFINITY Affinity; PVIDEO_HW_INITIALIZE HwInitialize; + PVIDEO_HW_RESET_HW HwResetHw; LIST_ENTRY AddressMappingListHead; INTERFACE_TYPE AdapterInterfaceType; ULONG SystemIoBusNumber; @@ -48,7 +49,8 @@ typedef struct _VIDEO_PORT_DEVICE_EXTENSTION static VOID STDCALL VidStartIo(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp); -static NTSTATUS STDCALL VidDispatchOpenClose(IN PDEVICE_OBJECT pDO, IN PIRP Irp); +static NTSTATUS STDCALL VidDispatchOpen(IN PDEVICE_OBJECT pDO, IN PIRP Irp); +static NTSTATUS STDCALL VidDispatchClose(IN PDEVICE_OBJECT pDO, IN PIRP Irp); static NTSTATUS STDCALL VidDispatchDeviceControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp); static PVOID STDCALL InternalMapMemory(IN PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension, IN PHYSICAL_ADDRESS IoAddress, @@ -58,8 +60,8 @@ static VOID STDCALL InternalUnmapMemory(IN PVIDEO_PORT_DEVICE_EXTENSION DeviceEx IN PVOID MappedAddress); static BOOLEAN CsrssInitialized = FALSE; -static HANDLE CsrssHandle = 0; -static struct _EPROCESS* Csrss = NULL; +static PEPROCESS Csrss = NULL; +static PVIDEO_PORT_DEVICE_EXTENSION ResetDisplayParametersDeviceExtension = NULL; PBYTE ReturnCsrssAddress(void) { @@ -94,6 +96,9 @@ DriverEntry(IN PDRIVER_OBJECT DriverObject, return(STATUS_SUCCESS); } +/* + * @implemented + */ VOID VideoPortDebugPrint(IN ULONG DebugPrintLevel, IN PCHAR DebugMessage, ...) @@ -112,6 +117,10 @@ VideoPortDebugPrint(IN ULONG DebugPrintLevel, DbgPrint (Buffer); } + +/* + * @unimplemented + */ VP_STATUS STDCALL VideoPortDisableInterrupt(IN PVOID HwDeviceExtension) @@ -120,6 +129,10 @@ VideoPortDisableInterrupt(IN PVOID HwDeviceExtension) UNIMPLEMENTED; } + +/* + * @unimplemented + */ VP_STATUS STDCALL VideoPortEnableInterrupt(IN PVOID HwDeviceExtension) @@ -128,6 +141,10 @@ VideoPortEnableInterrupt(IN PVOID HwDeviceExtension) UNIMPLEMENTED; } + +/* + * @implemented + */ VOID STDCALL VideoPortFreeDeviceBase(IN PVOID HwDeviceExtension, @@ -144,6 +161,10 @@ VideoPortFreeDeviceBase(IN PVOID HwDeviceExtension, InternalUnmapMemory(DeviceExtension, MappedAddress); } + +/* + * @implemented + */ ULONG STDCALL VideoPortGetBusData(IN PVOID HwDeviceExtension, @@ -169,6 +190,10 @@ VideoPortGetBusData(IN PVOID HwDeviceExtension, Length); } + +/* + * @implemented + */ UCHAR STDCALL VideoPortGetCurrentIrql(VOID) @@ -177,6 +202,10 @@ VideoPortGetCurrentIrql(VOID) return KeGetCurrentIrql(); } + +/* + * @implemented + */ PVOID STDCALL VideoPortGetDeviceBase(IN PVOID HwDeviceExtension, @@ -195,6 +224,10 @@ VideoPortGetDeviceBase(IN PVOID HwDeviceExtension, return InternalMapMemory(DeviceExtension, IoAddress, NumberOfUchars, InIoSpace); } + +/* + * @unimplemented + */ VP_STATUS STDCALL VideoPortGetDeviceData(IN PVOID HwDeviceExtension, @@ -206,6 +239,10 @@ VideoPortGetDeviceData(IN PVOID HwDeviceExtension, UNIMPLEMENTED; } + +/* + * @implemented + */ VP_STATUS STDCALL VideoPortGetAccessRanges(IN PVOID HwDeviceExtension, @@ -321,6 +358,10 @@ VideoPortGetAccessRanges(IN PVOID HwDeviceExtension, return STATUS_SUCCESS; } + +/* + * @unimplemented + */ VP_STATUS STDCALL VideoPortGetRegistryParameters(IN PVOID HwDeviceExtension, @@ -337,6 +378,10 @@ VideoPortGetRegistryParameters(IN PVOID HwDeviceExtension, */ } + +/* + * @implemented + */ ULONG STDCALL VideoPortInitialize(IN PVOID Context1, IN PVOID Context2, @@ -391,15 +436,16 @@ VideoPortInitialize(IN PVOID Context1, MPDriverObject->DeviceObject = MPDeviceObject; /* Initialize the miniport drivers dispatch table */ - MPDriverObject->MajorFunction[IRP_MJ_CREATE] = VidDispatchOpenClose; - MPDriverObject->MajorFunction[IRP_MJ_CLOSE] = VidDispatchOpenClose; - MPDriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = VidDispatchDeviceControl; + MPDriverObject->MajorFunction[IRP_MJ_CREATE] = (PDRIVER_DISPATCH) VidDispatchOpen; + MPDriverObject->MajorFunction[IRP_MJ_CLOSE] = (PDRIVER_DISPATCH) VidDispatchClose; + MPDriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = (PDRIVER_DISPATCH) VidDispatchDeviceControl; /* Initialize our device extension */ DeviceExtension = (PVIDEO_PORT_DEVICE_EXTENSION) MPDeviceObject->DeviceExtension; DeviceExtension->DeviceObject = MPDeviceObject; DeviceExtension->HwInitialize = HwInitializationData->HwInitialize; + DeviceExtension->HwResetHw = HwInitializationData->HwResetHw; DeviceExtension->AdapterInterfaceType = HwInitializationData->AdapterInterfaceType; DeviceExtension->SystemIoBusNumber = 0; MaxLen = (wcslen(RegistryPath->Buffer) + 10) * sizeof(WCHAR); @@ -539,15 +585,25 @@ VideoPortInitialize(IN PVOID Context1, return STATUS_SUCCESS; } + +/* + * @implemented + */ VP_STATUS STDCALL VideoPortInt10(IN PVOID HwDeviceExtension, IN PVIDEO_X86_BIOS_ARGUMENTS BiosArguments) { KV86M_REGISTERS Regs; NTSTATUS Status; + PEPROCESS CallingProcess; DPRINT("VideoPortInt10\n"); - KeAttachProcess(Csrss); + + CallingProcess = PsGetCurrentProcess(); + if (CallingProcess != Csrss) + { + KeAttachProcess(Csrss); + } memset(&Regs, 0, sizeof(Regs)); Regs.Eax = BiosArguments->Eax; @@ -559,11 +615,18 @@ VideoPortInt10(IN PVOID HwDeviceExtension, Regs.Ebp = BiosArguments->Ebp; Status = Ke386CallBios(0x10, &Regs); - KeDetachProcess(); + if (CallingProcess != Csrss) + { + KeDetachProcess(); + } return(Status); } + +/* + * @unimplemented + */ VOID STDCALL VideoPortLogError(IN PVOID HwDeviceExtension, @@ -571,10 +634,18 @@ VideoPortLogError(IN PVOID HwDeviceExtension, IN VP_STATUS ErrorCode, IN ULONG UniqueId) { - DPRINT("VideoPortLogError\n"); - UNIMPLEMENTED; + DPRINT1("VideoPortLogError ErrorCode %d (0x%x) UniqueId %lu (0x%lx)\n", + ErrorCode, ErrorCode, UniqueId, UniqueId); + if (NULL != Vrp) + { + DPRINT1("Vrp->IoControlCode %lu (0x%lx)\n", Vrp->IoControlCode, Vrp->IoControlCode); + } } + +/* + * @unimplemented + */ VP_STATUS STDCALL VideoPortMapBankedMemory(IN PVOID HwDeviceExtension, @@ -591,6 +662,10 @@ VideoPortMapBankedMemory(IN PVOID HwDeviceExtension, UNIMPLEMENTED; } + +/* + * @implemented + */ VP_STATUS STDCALL VideoPortMapMemory(IN PVOID HwDeviceExtension, @@ -614,6 +689,10 @@ VideoPortMapMemory(IN PVOID HwDeviceExtension, return NULL == *VirtualAddress ? STATUS_NO_MEMORY : STATUS_SUCCESS; } + +/* + * @implemented + */ UCHAR STDCALL VideoPortReadPortUchar(IN PUCHAR Port) @@ -622,6 +701,10 @@ VideoPortReadPortUchar(IN PUCHAR Port) return READ_PORT_UCHAR(Port); } + +/* + * @implemented + */ USHORT STDCALL VideoPortReadPortUshort(IN PUSHORT Port) @@ -630,6 +713,10 @@ VideoPortReadPortUshort(IN PUSHORT Port) return READ_PORT_USHORT(Port); } + +/* + * @implemented + */ ULONG STDCALL VideoPortReadPortUlong(IN PULONG Port) @@ -638,6 +725,10 @@ VideoPortReadPortUlong(IN PULONG Port) return READ_PORT_ULONG(Port); } + +/* + * @implemented + */ VOID STDCALL VideoPortReadPortBufferUchar(IN PUCHAR Port, @@ -648,6 +739,10 @@ VideoPortReadPortBufferUchar(IN PUCHAR Port, READ_PORT_BUFFER_UCHAR(Port, Buffer, Count); } + +/* + * @implemented + */ VOID STDCALL VideoPortReadPortBufferUshort(IN PUSHORT Port, @@ -658,6 +753,10 @@ VideoPortReadPortBufferUshort(IN PUSHORT Port, READ_PORT_BUFFER_USHORT(Port, Buffer, Count); } + +/* + * @implemented + */ VOID STDCALL VideoPortReadPortBufferUlong(IN PULONG Port, @@ -668,6 +767,10 @@ VideoPortReadPortBufferUlong(IN PULONG Port, READ_PORT_BUFFER_ULONG(Port, Buffer, Count); } + +/* + * @implemented + */ UCHAR STDCALL VideoPortReadRegisterUchar(IN PUCHAR Register) @@ -676,6 +779,10 @@ VideoPortReadRegisterUchar(IN PUCHAR Register) return READ_REGISTER_UCHAR(Register); } + +/* + * @implemented + */ USHORT STDCALL VideoPortReadRegisterUshort(IN PUSHORT Register) @@ -684,6 +791,10 @@ VideoPortReadRegisterUshort(IN PUSHORT Register) return READ_REGISTER_USHORT(Register); } + +/* + * @implemented + */ ULONG STDCALL VideoPortReadRegisterUlong(IN PULONG Register) @@ -692,6 +803,10 @@ VideoPortReadRegisterUlong(IN PULONG Register) return READ_REGISTER_ULONG(Register); } + +/* + * @implemented + */ VOID STDCALL VideoPortReadRegisterBufferUchar(IN PUCHAR Register, @@ -702,6 +817,10 @@ VideoPortReadRegisterBufferUchar(IN PUCHAR Register, READ_REGISTER_BUFFER_UCHAR(Register, Buffer, Count); } + +/* + * @implemented + */ VOID STDCALL VideoPortReadRegisterBufferUshort(IN PUSHORT Register, @@ -712,6 +831,10 @@ VideoPortReadRegisterBufferUshort(IN PUSHORT Register, READ_REGISTER_BUFFER_USHORT(Register, Buffer, Count); } + +/* + * @implemented + */ VOID STDCALL VideoPortReadRegisterBufferUlong(IN PULONG Register, @@ -722,6 +845,10 @@ VideoPortReadRegisterBufferUlong(IN PULONG Register, READ_REGISTER_BUFFER_ULONG(Register, Buffer, Count); } + +/* + * @implemented + */ BOOLEAN STDCALL VideoPortScanRom(IN PVOID HwDeviceExtension, @@ -729,10 +856,33 @@ VideoPortScanRom(IN PVOID HwDeviceExtension, IN ULONG RomLength, IN PUCHAR String) { - DPRINT("VideoPortScanRom\n"); - UNIMPLEMENTED; + ULONG StringLength; + BOOLEAN Found; + PUCHAR SearchLocation; + + DPRINT("VideoPortScanRom RomBase %p RomLength 0x%x String %s\n", RomBase, RomLength, String); + + StringLength = strlen(String); + Found = FALSE; + SearchLocation = RomBase; + for (SearchLocation = RomBase; + ! Found && SearchLocation < RomBase + RomLength - StringLength; + SearchLocation++) + { + Found = (RtlCompareMemory(SearchLocation, String, StringLength) == StringLength); + if (Found) + { + DPRINT("Match found at %p\n", SearchLocation); + } + } + + return Found; } + +/* + * @implemented + */ ULONG STDCALL VideoPortSetBusData(IN PVOID HwDeviceExtension, @@ -751,6 +901,10 @@ VideoPortSetBusData(IN PVOID HwDeviceExtension, Length); } + +/* + * @implemented + */ VP_STATUS STDCALL VideoPortSetRegistryParameters(IN PVOID HwDeviceExtension, @@ -775,6 +929,10 @@ VideoPortSetRegistryParameters(IN PVOID HwDeviceExtension, ValueLength); } + +/* + * @unimplemented + */ VP_STATUS STDCALL VideoPortSetTrappedEmulatorPorts(IN PVOID HwDeviceExtension, @@ -785,6 +943,10 @@ VideoPortSetTrappedEmulatorPorts(IN PVOID HwDeviceExtension, UNIMPLEMENTED; } + +/* + * @implemented + */ VOID STDCALL VideoPortStartTimer(IN PVOID HwDeviceExtension) @@ -799,6 +961,10 @@ VideoPortStartTimer(IN PVOID HwDeviceExtension) IoStartTimer(DeviceExtension->DeviceObject); } + +/* + * @implemented + */ VOID STDCALL VideoPortStopTimer(IN PVOID HwDeviceExtension) @@ -813,6 +979,10 @@ VideoPortStopTimer(IN PVOID HwDeviceExtension) IoStopTimer(DeviceExtension->DeviceObject); } + +/* + * @implemented + */ BOOLEAN STDCALL VideoPortSynchronizeExecution(IN PVOID HwDeviceExtension, @@ -820,10 +990,55 @@ VideoPortSynchronizeExecution(IN PVOID HwDeviceExtension, IN PMINIPORT_SYNCHRONIZE_ROUTINE SynchronizeRoutine, OUT PVOID Context) { + BOOLEAN Ret; + PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension; + KIRQL OldIrql; + DPRINT("VideoPortSynchronizeExecution\n"); - UNIMPLEMENTED; + + switch(Priority) + { + case VpLowPriority: + Ret = (*SynchronizeRoutine)(Context); + break; + case VpMediumPriority: + DeviceExtension = CONTAINING_RECORD(HwDeviceExtension, + VIDEO_PORT_DEVICE_EXTENSION, + MiniPortDeviceExtension); + if (NULL == DeviceExtension->InterruptObject) + { + Ret = (*SynchronizeRoutine)(Context); + } + else + { + Ret = KeSynchronizeExecution(DeviceExtension->InterruptObject, + SynchronizeRoutine, + Context); + } + break; + case VpHighPriority: + OldIrql = KeGetCurrentIrql(); + if (OldIrql < SYNCH_LEVEL) + { + OldIrql = KfRaiseIrql(SYNCH_LEVEL); + } + Ret = (*SynchronizeRoutine)(Context); + if (OldIrql < SYNCH_LEVEL) + { + KfLowerIrql(OldIrql); + } + break; + default: + Ret = FALSE; + } + + return Ret; } + +/* + * @implemented + */ VP_STATUS STDCALL VideoPortUnmapMemory(IN PVOID HwDeviceExtension, @@ -843,6 +1058,10 @@ VideoPortUnmapMemory(IN PVOID HwDeviceExtension, return STATUS_SUCCESS; } + +/* + * @unimplemented + */ VP_STATUS STDCALL VideoPortVerifyAccessRanges(IN PVOID HwDeviceExtension, @@ -853,6 +1072,10 @@ VideoPortVerifyAccessRanges(IN PVOID HwDeviceExtension, return NO_ERROR; } + +/* + * @implemented + */ VOID STDCALL VideoPortWritePortUchar(IN PUCHAR Port, @@ -862,6 +1085,10 @@ VideoPortWritePortUchar(IN PUCHAR Port, WRITE_PORT_UCHAR(Port, Value); } + +/* + * @implemented + */ VOID STDCALL VideoPortWritePortUshort(IN PUSHORT Port, @@ -871,6 +1098,10 @@ VideoPortWritePortUshort(IN PUSHORT Port, WRITE_PORT_USHORT(Port, Value); } + +/* + * @implemented + */ VOID STDCALL VideoPortWritePortUlong(IN PULONG Port, @@ -880,6 +1111,10 @@ VideoPortWritePortUlong(IN PULONG Port, WRITE_PORT_ULONG(Port, Value); } + +/* + * @implemented + */ VOID STDCALL VideoPortWritePortBufferUchar(IN PUCHAR Port, @@ -890,6 +1125,10 @@ VideoPortWritePortBufferUchar(IN PUCHAR Port, WRITE_PORT_BUFFER_UCHAR(Port, Buffer, Count); } + +/* + * @implemented + */ VOID STDCALL VideoPortWritePortBufferUshort(IN PUSHORT Port, @@ -900,6 +1139,10 @@ VideoPortWritePortBufferUshort(IN PUSHORT Port, WRITE_PORT_BUFFER_USHORT(Port, Buffer, Count); } + +/* + * @implemented + */ VOID STDCALL VideoPortWritePortBufferUlong(IN PULONG Port, @@ -910,6 +1153,10 @@ VideoPortWritePortBufferUlong(IN PULONG Port, WRITE_PORT_BUFFER_ULONG(Port, Buffer, Count); } + +/* + * @implemented + */ VOID STDCALL VideoPortWriteRegisterUchar(IN PUCHAR Register, @@ -919,6 +1166,10 @@ VideoPortWriteRegisterUchar(IN PUCHAR Register, WRITE_REGISTER_UCHAR(Register, Value); } + +/* + * @implemented + */ VOID STDCALL VideoPortWriteRegisterUshort(IN PUSHORT Register, @@ -928,6 +1179,10 @@ VideoPortWriteRegisterUshort(IN PUSHORT Register, WRITE_REGISTER_USHORT(Register, Value); } + +/* + * @implemented + */ VOID STDCALL VideoPortWriteRegisterUlong(IN PULONG Register, @@ -937,6 +1192,10 @@ VideoPortWriteRegisterUlong(IN PULONG Register, WRITE_REGISTER_ULONG(Register, Value); } + +/* + * @implemented + */ VOID STDCALL VideoPortWriteRegisterBufferUchar(IN PUCHAR Register, @@ -947,6 +1206,10 @@ VideoPortWriteRegisterBufferUchar(IN PUCHAR Register, WRITE_REGISTER_BUFFER_UCHAR(Register, Buffer, Count); } + +/* + * @implemented + */ VOID STDCALL VideoPortWriteRegisterBufferUshort(IN PUSHORT Register, IN PUSHORT Buffer, @@ -956,6 +1219,10 @@ VideoPortWriteRegisterBufferUshort(IN PUSHORT Register, WRITE_REGISTER_BUFFER_USHORT(Register, Buffer, Count); } + +/* + * @implemented + */ VOID STDCALL VideoPortWriteRegisterBufferUlong(IN PULONG Register, IN PULONG Buffer, @@ -965,6 +1232,10 @@ VideoPortWriteRegisterBufferUlong(IN PULONG Register, WRITE_REGISTER_BUFFER_ULONG(Register, Buffer, Count); } + +/* + * @implemented + */ VOID STDCALL VideoPortZeroDeviceMemory(OUT PVOID Destination, IN ULONG Length) @@ -973,13 +1244,36 @@ VideoPortZeroDeviceMemory(OUT PVOID Destination, RtlZeroMemory(Destination, Length); } +/* + * Reset display to blue screen + */ +static BOOLEAN STDCALL +VideoPortResetDisplayParameters(Columns, Rows) +{ + if (NULL != ResetDisplayParametersDeviceExtension) + { + return(FALSE); + } + if (NULL == ResetDisplayParametersDeviceExtension->HwResetHw) + { + return(FALSE); + } + if (!ResetDisplayParametersDeviceExtension->HwResetHw(&ResetDisplayParametersDeviceExtension->MiniPortDeviceExtension, + Columns, Rows)) + { + return(FALSE); + } + + ResetDisplayParametersDeviceExtension = NULL; + + return TRUE; +} -// ------------------------------------------- Nondiscardable statics -// VidDispatchOpenClose +// VidDispatchOpen // // DESCRIPTION: -// Answer requests for Open/Close calls: a null operation +// Answer requests for Open calls // // RUN LEVEL: // PASSIVE_LEVEL @@ -992,39 +1286,85 @@ VideoPortZeroDeviceMemory(OUT PVOID Destination, // static NTSTATUS STDCALL -VidDispatchOpenClose(IN PDEVICE_OBJECT pDO, - IN PIRP Irp) +VidDispatchOpen(IN PDEVICE_OBJECT pDO, + IN PIRP Irp) { PIO_STACK_LOCATION IrpStack; - PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension; + PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension; - DPRINT("VidDispatchOpenClose() called\n"); + DPRINT("VidDispatchOpen() called\n"); IrpStack = IoGetCurrentIrpStackLocation(Irp); - if (IrpStack->MajorFunction == IRP_MJ_CREATE && - CsrssInitialized == FALSE) + if (! CsrssInitialized) { DPRINT("Referencing CSRSS\n"); Csrss = PsGetCurrentProcess(); - CsrssInitialized = TRUE; DPRINT("Csrss %p\n", Csrss); + } + else + { DeviceExtension = (PVIDEO_PORT_DEVICE_EXTENSION) pDO->DeviceExtension; if (DeviceExtension->HwInitialize(&DeviceExtension->MiniPortDeviceExtension)) { Irp->IoStatus.Status = STATUS_SUCCESS; + /* Storing the device extension pointer in a static variable is an ugly + * hack. Unfortunately, we need it in VideoPortResetDisplayParameters + * and HalAcquireDisplayOwnership doesn't allow us to pass a userdata + * parameter. On the bright side, the DISPLAY device is opened + * exclusively, so there can be only one device extension active at + * any point in time. */ + ResetDisplayParametersDeviceExtension = DeviceExtension; + HalAcquireDisplayOwnership(VideoPortResetDisplayParameters); } else { Irp->IoStatus.Status = STATUS_UNSUCCESSFUL; } } + + Irp->IoStatus.Information = FILE_OPENED; + IoCompleteRequest(Irp, IO_NO_INCREMENT); + + return STATUS_SUCCESS; +} + +// VidDispatchClose +// +// DESCRIPTION: +// Answer requests for Close calls +// +// RUN LEVEL: +// PASSIVE_LEVEL +// +// ARGUMENTS: +// Standard dispatch arguments +// +// RETURNS: +// NTSTATUS +// + +static NTSTATUS STDCALL +VidDispatchClose(IN PDEVICE_OBJECT pDO, + IN PIRP Irp) +{ + PIO_STACK_LOCATION IrpStack; + PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension; + + DPRINT("VidDispatchClose() called\n"); + + IrpStack = IoGetCurrentIrpStackLocation(Irp); + + if (! CsrssInitialized) + { + CsrssInitialized = TRUE; + } else { - Irp->IoStatus.Status = STATUS_SUCCESS; + HalReleaseDisplayOwnership(); } - Irp->IoStatus.Information = FILE_OPENED; + Irp->IoStatus.Status = STATUS_SUCCESS; IoCompleteRequest(Irp, IO_NO_INCREMENT); return STATUS_SUCCESS; @@ -1197,12 +1537,8 @@ InternalUnmapMemory(IN PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension, AddressMapping->MappingCount--; if (0 == AddressMapping->MappingCount) { -#ifdef TODO MmUnmapIoSpace(AddressMapping->MappedAddress, AddressMapping->NumberOfUchars); -#else -DPRINT("MmUnmapIoSpace(0x%08x, 0x%08x)\n", AddressMapping->MappedAddress, AddressMapping->NumberOfUchars); -#endif RemoveEntryList(Entry); ExFreePool(AddressMapping); diff --git a/drivers/dd/videoprt/videoprt.edf b/drivers/dd/videoprt/videoprt.edf index d343f60..676ab42 100644 --- a/drivers/dd/videoprt/videoprt.edf +++ b/drivers/dd/videoprt/videoprt.edf @@ -37,8 +37,8 @@ VideoPortScanRom=VideoPortScanRom@16 VideoPortSetBusData=VideoPortSetBusData@24 VideoPortSetRegistryParameters=VideoPortSetRegistryParameters@16 VideoPortSetTrappedEmulatorPorts=VideoPortSetTrappedEmulatorPorts@12 -;VideoPortStallExecution=HAL.KeStallExecutionProcessor -VideoPortStallExecution=NTOSKRNL.KeStallExecutionProcessor +VideoPortStallExecution=HAL.KeStallExecutionProcessor +;VideoPortStallExecution=NTOSKRNL.KeStallExecutionProcessor VideoPortStartTimer=VideoPortStartTimer@4 VideoPortStopTimer=VideoPortStopTimer@4 VideoPortSynchronizeExecution=VideoPortSynchronizeExecution@16 diff --git a/drivers/fs/cdfs/.cvsignore b/drivers/fs/cdfs/.cvsignore index 40376bf..68a8a4b 100644 --- a/drivers/fs/cdfs/.cvsignore +++ b/drivers/fs/cdfs/.cvsignore @@ -6,3 +6,4 @@ cdfs.coff *.sys *.o *.sym +*.map diff --git a/drivers/fs/cdfs/cdfs.h b/drivers/fs/cdfs/cdfs.h index b25d899..b2c2d72 100644 --- a/drivers/fs/cdfs/cdfs.h +++ b/drivers/fs/cdfs/cdfs.h @@ -163,7 +163,7 @@ typedef struct typedef struct _FCB { - REACTOS_COMMON_FCB_HEADER RFCB; + FSRTL_COMMON_FCB_HEADER RFCB; SECTION_OBJECT_POINTERS SectionObjectPointers; PFILE_OBJECT FileObject; diff --git a/drivers/fs/cdfs/cleanup.c b/drivers/fs/cdfs/cleanup.c index a2eec26..71af989 100644 --- a/drivers/fs/cdfs/cleanup.c +++ b/drivers/fs/cdfs/cleanup.c @@ -52,7 +52,7 @@ CdfsCleanupFile(PDEVICE_EXTENSION DeviceExt, /* Uninitialize file cache if initialized for this file object. */ - if (FileObject->SectionObjectPointers && FileObject->SectionObjectPointers->SharedCacheMap) + if (FileObject->SectionObjectPointer && FileObject->SectionObjectPointer->SharedCacheMap) { CcRosReleaseFileCache (FileObject); } diff --git a/drivers/fs/cdfs/dirctl.c b/drivers/fs/cdfs/dirctl.c index 59fa071..051305f 100644 --- a/drivers/fs/cdfs/dirctl.c +++ b/drivers/fs/cdfs/dirctl.c @@ -544,14 +544,14 @@ CdfsQueryDirectory(PDEVICE_OBJECT DeviceObject, PCCB Ccb; FCB TempFcb; BOOLEAN First = FALSE; - PIO_STACK_LOCATION Stack; + PEXTENDED_IO_STACK_LOCATION Stack; PFILE_OBJECT FileObject; NTSTATUS Status = STATUS_SUCCESS; DPRINT("CdfsQueryDirectory() called\n"); DeviceExtension = DeviceObject->DeviceExtension; - Stack = IoGetCurrentIrpStackLocation(Irp); + Stack = (PEXTENDED_IO_STACK_LOCATION) IoGetCurrentIrpStackLocation(Irp); FileObject = Stack->FileObject; Ccb = (PCCB)FileObject->FsContext2; diff --git a/drivers/fs/cdfs/fcb.c b/drivers/fs/cdfs/fcb.c index c5295b9..ba964c3 100644 --- a/drivers/fs/cdfs/fcb.c +++ b/drivers/fs/cdfs/fcb.c @@ -29,6 +29,7 @@ /* INCLUDES *****************************************************************/ #include +#include #define NDEBUG #include @@ -236,7 +237,7 @@ CdfsFCBInitializeCache(PVCB Vcb, FileObject->Flags = FileObject->Flags | FO_FCB_IS_VALID | FO_DIRECT_CACHE_PAGING_READ; - FileObject->SectionObjectPointers = &Fcb->SectionObjectPointers; + FileObject->SectionObjectPointer = &Fcb->SectionObjectPointers; FileObject->FsContext = Fcb; FileObject->FsContext2 = newCCB; newCCB->PtrFileObject = FileObject; @@ -248,7 +249,7 @@ CdfsFCBInitializeCache(PVCB Vcb, if (!NT_SUCCESS(Status)) { DbgPrint("CcRosInitializeFileCache failed\n"); - KeBugCheck(0); + KEBUGCHECK(0); } ObDereferenceObject(FileObject); @@ -414,7 +415,7 @@ CdfsAttachFCBToFileObject(PDEVICE_EXTENSION Vcb, FileObject->Flags = FileObject->Flags | FO_FCB_IS_VALID | FO_DIRECT_CACHE_PAGING_READ; - FileObject->SectionObjectPointers = &Fcb->SectionObjectPointers; + FileObject->SectionObjectPointer = &Fcb->SectionObjectPointers; FileObject->FsContext = Fcb; FileObject->FsContext2 = newCCB; newCCB->PtrFileObject = FileObject; @@ -427,7 +428,7 @@ CdfsAttachFCBToFileObject(PDEVICE_EXTENSION Vcb, if (!NT_SUCCESS(Status)) { DbgPrint("CcRosInitializeFileCache failed\n"); - KeBugCheck(0); + KEBUGCHECK(0); } Fcb->Flags |= FCB_CACHE_INITIALIZED; } diff --git a/drivers/fs/cdfs/fsctl.c b/drivers/fs/cdfs/fsctl.c index b209836..066fcf3 100644 --- a/drivers/fs/cdfs/fsctl.c +++ b/drivers/fs/cdfs/fsctl.c @@ -381,7 +381,7 @@ CdfsMountVolume(PDEVICE_OBJECT DeviceObject, DeviceExt->StreamFileObject->Flags = DeviceExt->StreamFileObject->Flags | FO_FCB_IS_VALID | FO_DIRECT_CACHE_PAGING_READ; DeviceExt->StreamFileObject->FsContext = Fcb; DeviceExt->StreamFileObject->FsContext2 = Ccb; - DeviceExt->StreamFileObject->SectionObjectPointers = &Fcb->SectionObjectPointers; + DeviceExt->StreamFileObject->SectionObjectPointer = &Fcb->SectionObjectPointers; DeviceExt->StreamFileObject->PrivateCacheMap = NULL; DeviceExt->StreamFileObject->Vpb = DeviceExt->Vpb; Ccb->PtrFileObject = DeviceExt->StreamFileObject; diff --git a/drivers/fs/fs_rec/.cvsignore b/drivers/fs/fs_rec/.cvsignore index b676d35..ea68d11 100644 --- a/drivers/fs/fs_rec/.cvsignore +++ b/drivers/fs/fs_rec/.cvsignore @@ -6,3 +6,4 @@ fs_rec.coff *.o *.sym *.sys +*.map diff --git a/drivers/fs/fs_rec/fs_rec.c b/drivers/fs/fs_rec/fs_rec.c index 8342d34..1f7adca 100644 --- a/drivers/fs/fs_rec/fs_rec.c +++ b/drivers/fs/fs_rec/fs_rec.c @@ -208,7 +208,7 @@ DriverEntry(PDRIVER_OBJECT DriverObject, ConfigInfo = IoGetConfigurationInformation(); - if (ConfigInfo->CDRomCount > 0) + if (ConfigInfo->CdRomCount > 0) { Status = FsRecRegisterFs(DriverObject, L"\\Cdfs", diff --git a/drivers/fs/minix/.cvsignore b/drivers/fs/minix/.cvsignore index ea7ede1..948465e 100644 --- a/drivers/fs/minix/.cvsignore +++ b/drivers/fs/minix/.cvsignore @@ -1,2 +1,2 @@ minix.coff -minixfs.sys.unstripped \ No newline at end of file +minixfs.sys.unstripped*.map diff --git a/drivers/fs/ms/.cvsignore b/drivers/fs/ms/.cvsignore index 751ce5b..0e2deb6 100644 --- a/drivers/fs/ms/.cvsignore +++ b/drivers/fs/ms/.cvsignore @@ -2,3 +2,4 @@ msfs.coff *.o *.sym *.sys +*.map diff --git a/drivers/fs/ms/fsctrl.c b/drivers/fs/ms/fsctrl.c index 1940ba7..8b07f57 100644 --- a/drivers/fs/ms/fsctrl.c +++ b/drivers/fs/ms/fsctrl.c @@ -22,7 +22,7 @@ NTSTATUS STDCALL MsfsFileSystemControl(PDEVICE_OBJECT DeviceObject, PIRP Irp) { - PIO_STACK_LOCATION IoStack; + PEXTENDED_IO_STACK_LOCATION IoStack; PFILE_OBJECT FileObject; PMSFS_MAILSLOT Mailslot; PMSFS_FCB Fcb; @@ -30,14 +30,14 @@ MsfsFileSystemControl(PDEVICE_OBJECT DeviceObject, DPRINT1("MsfsFileSystemControl(DeviceObject %p Irp %p)\n", DeviceObject, Irp); - IoStack = IoGetCurrentIrpStackLocation(Irp); + IoStack = (PEXTENDED_IO_STACK_LOCATION) IoGetCurrentIrpStackLocation(Irp); FileObject = IoStack->FileObject; Fcb = FileObject->FsContext; Mailslot = Fcb->Mailslot; DPRINT1("Mailslot name: %wZ\n", &Mailslot->Name); - switch (IoStack->Parameters.FileSystemControl.IoControlCode) + switch (IoStack->Parameters.FileSystemControl.FsControlCode) { #if 0 case FSCTL_WAIT_PIPE: diff --git a/drivers/fs/mup/.cvsignore b/drivers/fs/mup/.cvsignore index e796501..b9d872b 100644 --- a/drivers/fs/mup/.cvsignore +++ b/drivers/fs/mup/.cvsignore @@ -5,3 +5,4 @@ mup.coff *.o *.sys *.sym +*.map diff --git a/drivers/fs/np/.cvsignore b/drivers/fs/np/.cvsignore index 38f31ec..eed5bf0 100644 --- a/drivers/fs/np/.cvsignore +++ b/drivers/fs/np/.cvsignore @@ -2,6 +2,8 @@ base.tmp junk.tmp temp.exp npfs.coff +*.d *.o *.sym *.sys +*.map diff --git a/drivers/fs/np/Makefile b/drivers/fs/np/Makefile index 5793f20..92f7436 100644 --- a/drivers/fs/np/Makefile +++ b/drivers/fs/np/Makefile @@ -14,6 +14,10 @@ TARGET_OBJECTS = \ rw.o \ volume.o +DEP_OBJECTS = $(TARGET_OBJECTS) + include $(PATH_TO_TOP)/rules.mak include $(TOOLS_PATH)/helper.mk + +include $(TOOLS_PATH)/depend.mk diff --git a/drivers/fs/np/create.c b/drivers/fs/np/create.c index fb3eca1..16697de 100644 --- a/drivers/fs/np/create.c +++ b/drivers/fs/np/create.c @@ -98,14 +98,39 @@ NpfsCreate(PDEVICE_OBJECT DeviceObject, ClientFcb->PipeState = FILE_PIPE_DISCONNECTED_STATE; /* initialize data list */ - InitializeListHead(&ClientFcb->DataListHead); + if (Pipe->InboundQuota) + { + ClientFcb->Data = ExAllocatePool(NonPagedPool, Pipe->InboundQuota); + if (ClientFcb->Data == NULL) + { + ExFreePool(ClientFcb); + KeUnlockMutex(&DeviceExt->PipeListLock); + + Irp->IoStatus.Status = STATUS_NO_MEMORY; + Irp->IoStatus.Information = 0; + + IoCompleteRequest(Irp, IO_NO_INCREMENT); + DPRINT("No memory!\n"); + + return(STATUS_NO_MEMORY); + } + } + else + { + ClientFcb->Data = NULL; + } + ClientFcb->ReadPtr = ClientFcb->Data; + ClientFcb->WritePtr = ClientFcb->Data; + ClientFcb->ReadDataAvailable = 0; + ClientFcb->WriteQuotaAvailable = Pipe->InboundQuota; + ClientFcb->MaxDataLength = Pipe->InboundQuota; KeInitializeSpinLock(&ClientFcb->DataListLock); KeInitializeEvent(&ClientFcb->ConnectEvent, SynchronizationEvent, FALSE); - KeInitializeEvent(&ClientFcb->ReadEvent, + KeInitializeEvent(&ClientFcb->Event, SynchronizationEvent, FALSE); @@ -259,9 +284,85 @@ NpfsCreateNamedPipe(PDEVICE_OBJECT DeviceObject, Pipe->MaximumInstances = Buffer->MaxInstances; Pipe->CurrentInstances = 0; Pipe->TimeOut = Buffer->TimeOut; - Pipe->InboundQuota = Buffer->InBufferSize; - Pipe->OutboundQuota = Buffer->OutBufferSize; - + if (!(IoStack->Parameters.Create.Options & FILE_PIPE_OUTBOUND) || + IoStack->Parameters.Create.Options & FILE_PIPE_FULL_DUPLEX) + { + if (Buffer->InBufferSize == 0) + { + Pipe->InboundQuota = DeviceExt->DefaultQuota; + } + else + { + Pipe->InboundQuota = PAGE_ROUND_UP(Buffer->InBufferSize); + if (Pipe->InboundQuota < DeviceExt->MinQuota) + { + Pipe->InboundQuota = DeviceExt->MinQuota; + } + else if (Pipe->InboundQuota > DeviceExt->MaxQuota) + { + Pipe->InboundQuota = DeviceExt->MaxQuota; + } + } + } + else + { + Pipe->InboundQuota = 0; + } + if (IoStack->Parameters.Create.Options & (FILE_PIPE_FULL_DUPLEX|FILE_PIPE_OUTBOUND)) + { + if (Buffer->OutBufferSize == 0) + { + Pipe->OutboundQuota = DeviceExt->DefaultQuota; + } + else + { + Pipe->OutboundQuota = PAGE_ROUND_UP(Buffer->OutBufferSize); + if (Pipe->OutboundQuota < DeviceExt->MinQuota) + { + Pipe->OutboundQuota = DeviceExt->MinQuota; + } + else if (Pipe->OutboundQuota > DeviceExt->MaxQuota) + { + Pipe->OutboundQuota = DeviceExt->MaxQuota; + } + } + } + else + { + Pipe->OutboundQuota = 0; + } + + if (Pipe->OutboundQuota) + { + Fcb->Data = ExAllocatePool(NonPagedPool, Pipe->OutboundQuota); + if (Fcb->Data == NULL) + { + ExFreePool(Fcb); + RtlFreeUnicodeString(&Pipe->PipeName); + ExFreePool(Pipe); + + Irp->IoStatus.Status = STATUS_NO_MEMORY; + Irp->IoStatus.Information = 0; + + IoCompleteRequest(Irp, IO_NO_INCREMENT); + + return(STATUS_NO_MEMORY); + } + + } + else + { + Fcb->Data = NULL; + } + + Fcb->ReadPtr = Fcb->Data; + Fcb->WritePtr = Fcb->Data; + Fcb->ReadDataAvailable = 0; + Fcb->WriteQuotaAvailable = Pipe->OutboundQuota; + Fcb->MaxDataLength = Pipe->OutboundQuota; + KeInitializeSpinLock(&Fcb->DataListLock); + + KeLockMutex(&DeviceExt->PipeListLock); current_entry = DeviceExt->PipeListHead.Flink; while (current_entry != &DeviceExt->PipeListHead) @@ -300,18 +401,12 @@ NpfsCreateNamedPipe(PDEVICE_OBJECT DeviceObject, Fcb->PipeEnd = FILE_PIPE_SERVER_END; Fcb->OtherSide = NULL; Fcb->PipeState = FILE_PIPE_DISCONNECTED_STATE; - Fcb->ReadDataAvailable = 0; - Fcb->WriteQuotaAvailable = 0; - - /* initialize data list */ - InitializeListHead(&Fcb->DataListHead); - KeInitializeSpinLock(&Fcb->DataListLock); KeInitializeEvent(&Fcb->ConnectEvent, SynchronizationEvent, FALSE); - KeInitializeEvent(&Fcb->ReadEvent, + KeInitializeEvent(&Fcb->Event, SynchronizationEvent, FALSE); @@ -339,9 +434,6 @@ NpfsClose(PDEVICE_OBJECT DeviceObject, PNPFS_FCB Fcb; PNPFS_PIPE Pipe; KIRQL oldIrql; - PLIST_ENTRY CurrentEntry; - PNPFS_PIPE_DATA Current; - DPRINT("NpfsClose(DeviceObject %p Irp %p)\n", DeviceObject, Irp); @@ -374,13 +466,17 @@ NpfsClose(PDEVICE_OBJECT DeviceObject, DPRINT("Server\n"); Pipe->CurrentInstances--; if (Fcb->PipeState == FILE_PIPE_CONNECTED_STATE) - { - if (Fcb->OtherSide) - { + { + if (Fcb->OtherSide) + { Fcb->OtherSide->PipeState = FILE_PIPE_CLOSING_STATE; - } - Fcb->PipeState = FILE_PIPE_DISCONNECTED_STATE; - } + /* Signaling the write event. If is possible that an other + * thread waits of an empty buffer. + */ + KeSetEvent(&Fcb->OtherSide->Event, IO_NO_INCREMENT, FALSE); + } + Fcb->PipeState = FILE_PIPE_DISCONNECTED_STATE; + } } Pipe->ReferenceCount--; @@ -396,7 +492,7 @@ NpfsClose(PDEVICE_OBJECT DeviceObject, /* Signaling the read event. If is possible that an other * thread waits of read data. */ - KeSetEvent(&Fcb->OtherSide->ReadEvent, IO_NO_INCREMENT, FALSE); + KeSetEvent(&Fcb->OtherSide->Event, IO_NO_INCREMENT, FALSE); } Fcb->PipeState = FILE_PIPE_DISCONNECTED_STATE; } @@ -414,27 +510,17 @@ NpfsClose(PDEVICE_OBJECT DeviceObject, RemoveEntryList(&Fcb->FcbListEntry); KeReleaseSpinLock(&Pipe->FcbListLock, oldIrql); if (Fcb->OtherSide) - { - KeAcquireSpinLock(&Fcb->OtherSide->DataListLock, &oldIrql); - while (!IsListEmpty(&Fcb->OtherSide->DataListHead)) - { - CurrentEntry = RemoveHeadList(&Fcb->OtherSide->DataListHead); - Current = CONTAINING_RECORD(CurrentEntry, NPFS_PIPE_DATA, ListEntry); - - NpfsFreePipeData(Current); - } - KeReleaseSpinLock(&Fcb->OtherSide->DataListLock, oldIrql); - ExFreePool(Fcb->OtherSide); - } - - KeAcquireSpinLock(&Fcb->DataListLock, &oldIrql); - while (!IsListEmpty(&Fcb->DataListHead)) - { - CurrentEntry = RemoveHeadList(&Fcb->DataListHead); - Current = CONTAINING_RECORD(CurrentEntry, NPFS_PIPE_DATA, ListEntry); - NpfsFreePipeData(Current); - } - KeReleaseSpinLock(&Fcb->DataListLock, oldIrql); + { + if (Fcb->OtherSide->Data) + { + ExFreePool(Fcb->OtherSide->Data); + } + ExFreePool(Fcb->OtherSide); + } + if (Fcb->Data) + { + ExFreePool(Fcb->Data); + } ExFreePool(Fcb); RtlFreeUnicodeString(&Pipe->PipeName); RemoveEntryList(&Pipe->PipeListEntry); diff --git a/drivers/fs/np/fsctrl.c b/drivers/fs/np/fsctrl.c index cec08fb..fbac3d3 100644 --- a/drivers/fs/np/fsctrl.c +++ b/drivers/fs/np/fsctrl.c @@ -395,7 +395,7 @@ NTSTATUS STDCALL NpfsFileSystemControl(PDEVICE_OBJECT DeviceObject, PIRP Irp) { - PIO_STACK_LOCATION IoStack; + PEXTENDED_IO_STACK_LOCATION IoStack; PFILE_OBJECT FileObject; NTSTATUS Status; PNPFS_DEVICE_EXTENSION DeviceExt; @@ -405,7 +405,7 @@ NpfsFileSystemControl(PDEVICE_OBJECT DeviceObject, DPRINT("NpfsFileSystemContol(DeviceObject %p Irp %p)\n", DeviceObject, Irp); DeviceExt = (PNPFS_DEVICE_EXTENSION)DeviceObject->DeviceExtension; - IoStack = IoGetCurrentIrpStackLocation(Irp); + IoStack = (PEXTENDED_IO_STACK_LOCATION) IoGetCurrentIrpStackLocation(Irp); DPRINT("IoStack: %p\n", IoStack); FileObject = IoStack->FileObject; DPRINT("FileObject: %p\n", FileObject); @@ -415,7 +415,7 @@ NpfsFileSystemControl(PDEVICE_OBJECT DeviceObject, DPRINT("Pipe: %p\n", Pipe); DPRINT("PipeName: %wZ\n", &Pipe->PipeName); - switch (IoStack->Parameters.FileSystemControl.IoControlCode) + switch (IoStack->Parameters.FileSystemControl.FsControlCode) { case FSCTL_PIPE_ASSIGN_EVENT: DPRINT("Assign event\n"); diff --git a/drivers/fs/np/npfs.c b/drivers/fs/np/npfs.c index 69f3acd..2adf2b1 100644 --- a/drivers/fs/np/npfs.c +++ b/drivers/fs/np/npfs.c @@ -15,8 +15,6 @@ #define NDEBUG #include -NPAGED_LOOKASIDE_LIST NpfsPipeDataLookasideList; - /* FUNCTIONS *****************************************************************/ NTSTATUS STDCALL @@ -78,14 +76,10 @@ DriverEntry(PDRIVER_OBJECT DriverObject, KeInitializeMutex(&DeviceExtension->PipeListLock, 0); - ExInitializeNPagedLookasideList( - &NpfsPipeDataLookasideList, - NULL, - NULL, - 0, - sizeof(NPFS_PIPE_DATA), - TAG('N', 'P', 'D', 'A'), - 0); + /* set the size quotas */ + DeviceExtension->MinQuota = PAGE_SIZE; + DeviceExtension->DefaultQuota = 8 * PAGE_SIZE; + DeviceExtension->MaxQuota = 64 * PAGE_SIZE; return(STATUS_SUCCESS); } diff --git a/drivers/fs/np/npfs.h b/drivers/fs/np/npfs.h index 387a6b5..bc069ae 100644 --- a/drivers/fs/np/npfs.h +++ b/drivers/fs/np/npfs.h @@ -8,18 +8,13 @@ typedef struct { LIST_ENTRY PipeListHead; KMUTEX PipeListLock; + ULONG MinQuota; + ULONG DefaultQuota; + ULONG MaxQuota; } NPFS_DEVICE_EXTENSION, *PNPFS_DEVICE_EXTENSION; typedef struct { - LIST_ENTRY ListEntry; - ULONG Size; - PVOID Data; - ULONG Offset; -} NPFS_PIPE_DATA, *PNPFS_PIPE_DATA; - -typedef struct -{ UNICODE_STRING PipeName; LIST_ENTRY PipeListEntry; KSPIN_LOCK FcbListLock; @@ -44,13 +39,17 @@ typedef struct _NPFS_FCB struct _NPFS_FCB* OtherSide; PNPFS_PIPE Pipe; KEVENT ConnectEvent; - KEVENT ReadEvent; + KEVENT Event; ULONG PipeEnd; ULONG PipeState; ULONG ReadDataAvailable; ULONG WriteQuotaAvailable; - LIST_ENTRY DataListHead; /* Data queue */ + PVOID Data; + PVOID ReadPtr; + PVOID WritePtr; + ULONG MaxDataLength; + KSPIN_LOCK DataListLock; /* Data queue lock */ } NPFS_FCB, *PNPFS_FCB; @@ -68,16 +67,6 @@ extern NPAGED_LOOKASIDE_LIST NpfsPipeDataLookasideList; #define CP DPRINT("\n"); -static inline VOID -NpfsFreePipeData(PNPFS_PIPE_DATA PipeData) -{ - if (PipeData->Data) - { - ExFreePool(PipeData->Data); - } - ExFreeToNPagedLookasideList(&NpfsPipeDataLookasideList, PipeData); -} - NTSTATUS STDCALL NpfsCreate(PDEVICE_OBJECT DeviceObject, PIRP Irp); NTSTATUS STDCALL NpfsCreateNamedPipe(PDEVICE_OBJECT DeviceObject, PIRP Irp); diff --git a/drivers/fs/np/rw.c b/drivers/fs/np/rw.c index 9148b0e..f67a387 100644 --- a/drivers/fs/np/rw.c +++ b/drivers/fs/np/rw.c @@ -18,51 +18,6 @@ /* FUNCTIONS *****************************************************************/ -static inline PNPFS_PIPE_DATA -NpfsAllocatePipeData(PVOID Data, - ULONG Size) -{ - PNPFS_PIPE_DATA PipeData; - - PipeData = ExAllocateFromNPagedLookasideList(&NpfsPipeDataLookasideList); - if (!PipeData) - { - return NULL; - } - - PipeData->Data = Data; - PipeData->Size = Size; - PipeData->Offset = 0; - - return PipeData; -} - - -static inline PNPFS_PIPE_DATA -NpfsInitializePipeData( - PVOID Data, - ULONG Size) -{ - PNPFS_PIPE_DATA PipeData; - PVOID Buffer; - - Buffer = ExAllocatePool(NonPagedPool, Size); - if (!Buffer) - { - return NULL; - } - - RtlMoveMemory(Buffer, Data, Size); - - PipeData = NpfsAllocatePipeData(Buffer, Size); - if (!PipeData) - { - ExFreePool(Buffer); - } - - return PipeData; -} - NTSTATUS STDCALL NpfsRead(PDEVICE_OBJECT DeviceObject, PIRP Irp) @@ -71,10 +26,7 @@ NpfsRead(PDEVICE_OBJECT DeviceObject, PIRP Irp) PFILE_OBJECT FileObject; NTSTATUS Status; PNPFS_DEVICE_EXTENSION DeviceExt; - PWSTR PipeName; KIRQL OldIrql; - PLIST_ENTRY CurrentEntry; - PNPFS_PIPE_DATA Current; ULONG Information; PNPFS_FCB Fcb; PNPFS_FCB ReadFcb; @@ -82,6 +34,7 @@ NpfsRead(PDEVICE_OBJECT DeviceObject, PIRP Irp) ULONG Length; PVOID Buffer; ULONG CopyLength; + ULONG TempLength; DPRINT("NpfsRead(DeviceObject %p Irp %p)\n", DeviceObject, Irp); @@ -107,6 +60,15 @@ NpfsRead(PDEVICE_OBJECT DeviceObject, PIRP Irp) Information = 0; goto done; } + + if (ReadFcb->Data == NULL) + { + DPRINT("Pipe is NOT readable!\n"); + Status = STATUS_UNSUCCESSFUL; + Information = 0; + goto done; + } + Status = STATUS_SUCCESS; Length = IoStack->Parameters.Read.Length; @@ -117,108 +79,96 @@ NpfsRead(PDEVICE_OBJECT DeviceObject, PIRP Irp) KeAcquireSpinLock(&ReadFcb->DataListLock, &OldIrql); while (1) - { - /* FIXME: check if in blocking mode */ - if (IsListEmpty(&ReadFcb->DataListHead)) - { - KeResetEvent(&Fcb->ReadEvent); - KeReleaseSpinLock(&ReadFcb->DataListLock, OldIrql); - if (Information > 0) - { - Status = STATUS_SUCCESS; - goto done; - } - if (Fcb->PipeState != FILE_PIPE_CONNECTED_STATE) - { - Status = STATUS_PIPE_BROKEN; - goto done; + { + /* FIXME: check if in blocking mode */ + if (ReadFcb->ReadDataAvailable == 0) + { + KeResetEvent(&Fcb->Event); + KeSetEvent(&ReadFcb->Event, IO_NO_INCREMENT, FALSE); + KeReleaseSpinLock(&ReadFcb->DataListLock, OldIrql); + if (Information > 0) + { + Status = STATUS_SUCCESS; + goto done; + } + if (Fcb->PipeState != FILE_PIPE_CONNECTED_STATE) + { + Status = STATUS_PIPE_BROKEN; + goto done; + } + /* Wait for ReadEvent to become signaled */ + DPRINT("Waiting for readable data (%S)\n", Pipe->PipeName.Buffer); + Status = KeWaitForSingleObject(&Fcb->Event, + UserRequest, + KernelMode, + FALSE, + NULL); + DPRINT("Finished waiting (%S)! Status: %x\n", Pipe->PipeName.Buffer, Status); + KeAcquireSpinLock(&ReadFcb->DataListLock, &OldIrql); } - /* Wait for ReadEvent to become signaled */ - DPRINT("Waiting for readable data (%S)\n", Pipe->PipeName.Buffer); - Status = KeWaitForSingleObject(&Fcb->ReadEvent, - UserRequest, - KernelMode, - FALSE, - NULL); - DPRINT("Finished waiting (%S)! Status: %x\n", Pipe->PipeName.Buffer, Status); - KeAcquireSpinLock(&ReadFcb->DataListLock, &OldIrql); - } if (Pipe->PipeReadMode == FILE_PIPE_BYTE_STREAM_MODE) - { - DPRINT("Byte stream mode\n"); - - /* Byte stream mode */ - CurrentEntry = NULL; - while (Length > 0 && !IsListEmpty(&ReadFcb->DataListHead)) - { - CurrentEntry = RemoveHeadList(&ReadFcb->DataListHead); - Current = CONTAINING_RECORD(CurrentEntry, NPFS_PIPE_DATA, ListEntry); - - DPRINT("Took pipe data at %p off the queue\n", Current); - - CopyLength = RtlMin(Current->Size, Length); - RtlCopyMemory(Buffer, - ((PVOID)((PVOID)Current->Data + Current->Offset)), - CopyLength); - Buffer += CopyLength; - Length -= CopyLength; - Information += CopyLength; - - /* Update the data buffer */ - Current->Offset += CopyLength; - Current->Size -= CopyLength; - if (Current->Size == 0) + { + DPRINT("Byte stream mode\n"); + /* Byte stream mode */ + while (Length > 0 && ReadFcb->ReadDataAvailable > 0) { - NpfsFreePipeData(Current); - CurrentEntry = NULL; + CopyLength = RtlMin(ReadFcb->ReadDataAvailable, Length); + if (ReadFcb->ReadPtr + CopyLength <= ReadFcb->Data + ReadFcb->MaxDataLength) + { + memcpy(Buffer, ReadFcb->ReadPtr, CopyLength); + ReadFcb->ReadPtr += CopyLength; + if (ReadFcb->ReadPtr == ReadFcb->Data + ReadFcb->MaxDataLength) + { + ReadFcb->ReadPtr = ReadFcb->Data; + } + } + else + { + TempLength = ReadFcb->Data + ReadFcb->MaxDataLength - ReadFcb->ReadPtr; + memcpy(Buffer, ReadFcb->ReadPtr, TempLength); + memcpy(Buffer + TempLength, ReadFcb->Data, CopyLength - TempLength); + ReadFcb->ReadPtr = ReadFcb->Data + CopyLength - TempLength; + } + + Buffer += CopyLength; + Length -= CopyLength; + Information += CopyLength; + + ReadFcb->ReadDataAvailable -= CopyLength; + ReadFcb->WriteQuotaAvailable += CopyLength; } - } - - if (CurrentEntry && Current->Size > 0) - { - DPRINT("Putting pipe data at %p back in queue\n", Current); - - /* The caller's buffer could not contain the complete message, - so put it back on the queue */ - InsertHeadList(&ReadFcb->DataListHead, &Current->ListEntry); - } if (Length == 0) - { - break; - } - } + { + KeSetEvent(&ReadFcb->Event, IO_NO_INCREMENT, FALSE); + break; + } + } else - { - DPRINT("Message mode\n"); - - /* Message mode */ - if (!IsListEmpty(&ReadFcb->DataListHead)) - { - CurrentEntry = RemoveHeadList(&ReadFcb->DataListHead); - Current = CONTAINING_RECORD(CurrentEntry, NPFS_PIPE_DATA, ListEntry); + { + DPRINT("Message mode\n"); - DPRINT("Took pipe data at %p off the queue\n", Current); - - /* Truncate the message if the receive buffer is too small */ - CopyLength = RtlMin(Current->Size, Length); - RtlCopyMemory(Buffer, Current->Data, CopyLength); - Information = CopyLength; + /* Message mode */ + if (ReadFcb->ReadDataAvailable) + { + /* Truncate the message if the receive buffer is too small */ + CopyLength = RtlMin(ReadFcb->ReadDataAvailable, Length); + memcpy(Buffer, ReadFcb->Data, CopyLength); - Current->Offset += CopyLength; - NpfsFreePipeData(Current); - } - if (Information > 0) - { - break; - } - } - } - /* reset ReaderEvent */ + Information = CopyLength; + ReadFcb->ReadDataAvailable = 0; + ReadFcb->WriteQuotaAvailable = ReadFcb->MaxDataLength; + } + if (Information > 0) + { + KeSetEvent(&ReadFcb->Event, IO_NO_INCREMENT, FALSE); + break; + } + } + } KeReleaseSpinLock(&ReadFcb->DataListLock, OldIrql); - done: Irp->IoStatus.Status = Status; Irp->IoStatus.Information = Information; @@ -242,7 +192,9 @@ NpfsWrite(PDEVICE_OBJECT DeviceObject, ULONG Length; ULONG Offset; KIRQL OldIrql; - PNPFS_PIPE_DATA PipeData; + ULONG Information; + ULONG CopyLength; + ULONG TempLength; DPRINT("NpfsWrite()\n"); @@ -256,6 +208,7 @@ NpfsWrite(PDEVICE_OBJECT DeviceObject, Length = IoStack->Parameters.Write.Length; Offset = IoStack->Parameters.Write.ByteOffset.u.LowPart; + Information = 0; if (Irp->MdlAddress == NULL) { @@ -272,36 +225,104 @@ NpfsWrite(PDEVICE_OBJECT DeviceObject, Length = 0; goto done; } + + if (Fcb->Data == NULL) + { + DPRINT("Pipe is NOT writable!\n"); + Status = STATUS_UNSUCCESSFUL; + Length = 0; + goto done; + } + Status = STATUS_SUCCESS; Buffer = MmGetSystemAddressForMdl (Irp->MdlAddress); DPRINT("Length %d Buffer %x Offset %x\n",Length,Buffer,Offset); - PipeData = NpfsInitializePipeData(Buffer, Length); - if (PipeData) + KeAcquireSpinLock(&Fcb->DataListLock, &OldIrql); + while(1) { - DPRINT("Attaching pipe data at %p (%d bytes)\n", PipeData, Length); - - KeAcquireSpinLock(&Fcb->DataListLock, &OldIrql); - InsertTailList(&Fcb->DataListHead, &PipeData->ListEntry); - - /* signal the readers ReadEvent */ - KeSetEvent(&Fcb->OtherSide->ReadEvent, IO_NO_INCREMENT, FALSE); - - KeReleaseSpinLock(&Fcb->DataListLock, OldIrql); - - } - else - { - Length = 0; - Status = STATUS_INSUFFICIENT_RESOURCES; + if (Fcb->WriteQuotaAvailable == 0) + { + KeResetEvent(&Fcb->Event); + KeSetEvent(&Fcb->OtherSide->Event, IO_NO_INCREMENT, FALSE); + KeReleaseSpinLock(&Fcb->DataListLock, OldIrql); + if (Fcb->PipeState != FILE_PIPE_CONNECTED_STATE) + { + Status = STATUS_PIPE_BROKEN; + goto done; + } + DPRINT("Waiting for buffer space (%S)\n", Pipe->PipeName.Buffer); + Status = KeWaitForSingleObject(&Fcb->Event, + UserRequest, + KernelMode, + FALSE, + NULL); + DPRINT("Finished waiting (%S)! Status: %x\n", Pipe->PipeName.Buffer, Status); + KeAcquireSpinLock(&Fcb->DataListLock, &OldIrql); + } + if (Pipe->PipeReadMode == FILE_PIPE_BYTE_STREAM_MODE) + { + DPRINT("Byte stream mode\n"); + while (Length > 0 && Fcb->WriteQuotaAvailable > 0) + { + CopyLength = RtlMin(Length, Fcb->WriteQuotaAvailable); + if (Fcb->WritePtr + CopyLength <= Fcb->Data + Fcb->MaxDataLength) + { + memcpy(Fcb->WritePtr, Buffer, CopyLength); + Fcb->WritePtr += CopyLength; + if (Fcb->WritePtr == Fcb->Data + Fcb->MaxDataLength) + { + Fcb->WritePtr = Fcb->Data; + } + } + else + { + TempLength = Fcb->Data + Fcb->MaxDataLength - Fcb->WritePtr; + memcpy(Fcb->WritePtr, Buffer, TempLength); + memcpy(Fcb->Data, Buffer + TempLength, CopyLength - TempLength); + Fcb->WritePtr = Fcb->Data + CopyLength - TempLength; + } + + Buffer += CopyLength; + Length -= CopyLength; + Information += CopyLength; + + Fcb->ReadDataAvailable += CopyLength; + Fcb->WriteQuotaAvailable -= CopyLength; + } + + if (Length == 0) + { + KeSetEvent(&Fcb->OtherSide->Event, IO_NO_INCREMENT, FALSE); + break; + } + } + else + { + if (Length > 0) + { + CopyLength = RtlMin(Length, Fcb->WriteQuotaAvailable); + memcpy(Buffer, Fcb->Data, CopyLength); + + Information = CopyLength; + Fcb->ReadDataAvailable = CopyLength; + Fcb->WriteQuotaAvailable = 0; + } + if (Information > 0) + { + KeSetEvent(&Fcb->OtherSide->Event, IO_NO_INCREMENT, FALSE); + break; + } + } } + KeReleaseSpinLock(&Fcb->DataListLock, OldIrql); done: Irp->IoStatus.Status = Status; - Irp->IoStatus.Information = Length; + Irp->IoStatus.Information = Information; IoCompleteRequest(Irp, IO_NO_INCREMENT); - + return(Status); } diff --git a/drivers/fs/ntfs/.cvsignore b/drivers/fs/ntfs/.cvsignore index 03b6733..bf16622 100644 --- a/drivers/fs/ntfs/.cvsignore +++ b/drivers/fs/ntfs/.cvsignore @@ -2,6 +2,8 @@ base.tmp junk.tmp temp.exp ntfs.coff +*.d *.o *.sym *.sys +*.map diff --git a/drivers/fs/ntfs/attrib.c b/drivers/fs/ntfs/attrib.c index acdb2b6..cefb2c9 100644 --- a/drivers/fs/ntfs/attrib.c +++ b/drivers/fs/ntfs/attrib.c @@ -29,7 +29,9 @@ #include -#define NDEBUG +#include + +//#define NDEBUG #include #include "ntfs.h" @@ -215,7 +217,7 @@ NtfsDumpAttribute(PATTRIBUTE Attribute) default: DbgPrint("RunLength size of %hu not implemented!\n", RunHeader & 0x0F); - KeBugCheck(0); + KEBUGCHECK(0); } switch (RunHeader >> 4) @@ -243,7 +245,7 @@ NtfsDumpAttribute(PATTRIBUTE Attribute) default: DbgPrint("RunStart size of %hu not implemented!\n", RunHeader >> 4); - KeBugCheck(0); + KEBUGCHECK(0); } DbgPrint(" AllocatedSize %I64d DataSize %I64d\n", NresAttr->AllocatedSize, NresAttr->DataSize); diff --git a/drivers/fs/ntfs/close.c b/drivers/fs/ntfs/close.c new file mode 100755 index 0000000..43d825a --- /dev/null +++ b/drivers/fs/ntfs/close.c @@ -0,0 +1,112 @@ +/* + * ReactOS kernel + * Copyright (C) 2002 ReactOS Team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ +/* $Id$ + * + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS kernel + * FILE: services/fs/ntfs/close.c + * PURPOSE: NTFS filesystem driver + * PROGRAMMER: Art Yerkes + * UPDATE HISTORY: + */ + +/* INCLUDES *****************************************************************/ + +#include + +//#define NDEBUG +#include + +#include "ntfs.h" + + +/* FUNCTIONS ****************************************************************/ + +static NTSTATUS +NtfsCloseFile(PDEVICE_EXTENSION DeviceExt, + PFILE_OBJECT FileObject) +/* + * FUNCTION: Closes a file + */ +{ + PCCB Ccb; + + DPRINT("NtfsCloseFile(DeviceExt %x, FileObject %x)\n", + DeviceExt, + FileObject); + + Ccb = (PCCB)(FileObject->FsContext2); + + DPRINT("Ccb %x\n", Ccb); + if (Ccb == NULL) + { + return(STATUS_SUCCESS); + } + + FileObject->FsContext2 = NULL; + + if (FileObject->FileName.Buffer) + { + // This a FO, that was created outside from FSD. + // Some FO's are created with IoCreateStreamFileObject() insid from FSD. + // This FO's don't have a FileName. + NtfsReleaseFCB(DeviceExt, FileObject->FsContext); + } + + if (Ccb->DirectorySearchPattern) + { + ExFreePool(Ccb->DirectorySearchPattern); + } + ExFreePool(Ccb); + + return(STATUS_SUCCESS); +} + + +NTSTATUS STDCALL +NtfsClose(PDEVICE_OBJECT DeviceObject, + PIRP Irp) +{ + PDEVICE_EXTENSION DeviceExtension; + PIO_STACK_LOCATION Stack; + PFILE_OBJECT FileObject; + NTSTATUS Status; + + DPRINT("NtfsClose() called\n"); + + if (DeviceObject == NtfsGlobalData->DeviceObject) + { + DPRINT("Closing file system\n"); + Status = STATUS_SUCCESS; + goto ByeBye; + } + + Stack = IoGetCurrentIrpStackLocation(Irp); + FileObject = Stack->FileObject; + DeviceExtension = DeviceObject->DeviceExtension; + + Status = NtfsCloseFile(DeviceExtension,FileObject); + +ByeBye: + Irp->IoStatus.Status = Status; + Irp->IoStatus.Information = 0; + + IoCompleteRequest(Irp, IO_NO_INCREMENT); + return(Status); +} diff --git a/drivers/fs/ntfs/dirctl.c b/drivers/fs/ntfs/dirctl.c index 1e714d0..a083afe 100644 --- a/drivers/fs/ntfs/dirctl.c +++ b/drivers/fs/ntfs/dirctl.c @@ -494,14 +494,14 @@ NtfsQueryDirectory(PDEVICE_OBJECT DeviceObject, PCCB Ccb; FCB TempFcb; BOOLEAN First = FALSE; - PIO_STACK_LOCATION Stack; + PEXTENDED_IO_STACK_LOCATION Stack; PFILE_OBJECT FileObject; NTSTATUS Status = STATUS_SUCCESS; DPRINT1("NtfsQueryDirectory() called\n"); DeviceExtension = DeviceObject->DeviceExtension; - Stack = IoGetCurrentIrpStackLocation(Irp); + Stack = (PEXTENDED_IO_STACK_LOCATION) IoGetCurrentIrpStackLocation(Irp); FileObject = Stack->FileObject; Ccb = (PCCB)FileObject->FsContext2; diff --git a/drivers/fs/ntfs/fcb.c b/drivers/fs/ntfs/fcb.c index 6c6f46a..5a7223b 100644 --- a/drivers/fs/ntfs/fcb.c +++ b/drivers/fs/ntfs/fcb.c @@ -29,9 +29,11 @@ #include -#define NDEBUG +//#define NDEBUG #include +#include + #include "ntfs.h" @@ -235,7 +237,7 @@ NtfsFCBInitializeCache(PVCB Vcb, FileObject->Flags = FileObject->Flags | FO_FCB_IS_VALID | FO_DIRECT_CACHE_PAGING_READ; - FileObject->SectionObjectPointers = &Fcb->SectionObjectPointers; + FileObject->SectionObjectPointer = &Fcb->SectionObjectPointers; FileObject->FsContext = Fcb; FileObject->FsContext2 = newCCB; newCCB->PtrFileObject = FileObject; @@ -247,7 +249,7 @@ NtfsFCBInitializeCache(PVCB Vcb, if (!NT_SUCCESS(Status)) { DbgPrint("CcRosInitializeFileCache failed\n"); - KeBugCheck(0); + KEBUGCHECK(0); } ObDereferenceObject(FileObject); @@ -327,7 +329,7 @@ NtfsGetDirEntryName(PDEVICE_EXTENSION DeviceExt, } else { - CdfsSwapString(Name, Record->FileId, Record->FileIdLength); + NtfsSwapString(Name, Record->FileId, Record->FileIdLength); } } @@ -353,7 +355,7 @@ NtfsMakeFCBFromDirEntry(PVCB Vcb, } wcscpy(pathName, DirectoryFCB->PathName); - if (!CdfsFCBIsRoot(DirectoryFCB)) + if (!NtfsFCBIsRoot(DirectoryFCB)) { wcscat(pathName, L"\\"); } @@ -366,11 +368,11 @@ NtfsMakeFCBFromDirEntry(PVCB Vcb, { WCHAR entryName[MAX_PATH]; - CdfsGetDirEntryName(Vcb, Record, entryName); + NtfsGetDirEntryName(Vcb, Record, entryName); wcscat(pathName, entryName); } - rcFCB = CdfsCreateFCB(pathName); + rcFCB = NtfsCreateFCB(pathName); memcpy(&rcFCB->Entry, Record, sizeof(DIR_RECORD)); Size = rcFCB->Entry.DataLengthL; @@ -379,9 +381,9 @@ NtfsMakeFCBFromDirEntry(PVCB Vcb, rcFCB->RFCB.ValidDataLength.QuadPart = Size; rcFCB->RFCB.AllocationSize.QuadPart = ROUND_UP(Size, BLOCKSIZE); // DPRINT1("%S %d %d\n", longName, Size, (ULONG)rcFCB->RFCB.AllocationSize.QuadPart); - CdfsFCBInitializeCache(Vcb, rcFCB); + NtfsFCBInitializeCache(Vcb, rcFCB); rcFCB->RefCount++; - CdfsAddFCBToTable(Vcb, rcFCB); + NtfsAddFCBToTable(Vcb, rcFCB); *fileFCB = rcFCB; return(STATUS_SUCCESS); @@ -406,7 +408,7 @@ NtfsAttachFCBToFileObject(PDEVICE_EXTENSION Vcb, FileObject->Flags = FileObject->Flags | FO_FCB_IS_VALID | FO_DIRECT_CACHE_PAGING_READ; - FileObject->SectionObjectPointers = &Fcb->SectionObjectPointers; + FileObject->SectionObjectPointer = &Fcb->SectionObjectPointers; FileObject->FsContext = Fcb; FileObject->FsContext2 = newCCB; newCCB->PtrFileObject = FileObject; @@ -419,24 +421,24 @@ NtfsAttachFCBToFileObject(PDEVICE_EXTENSION Vcb, if (!NT_SUCCESS(Status)) { DbgPrint("CcRosInitializeFileCache failed\n"); - KeBugCheck(0); + KEBUGCHECK(0); } Fcb->Flags |= FCB_CACHE_INITIALIZED; } - DPRINT("file open: fcb:%x file size: %d\n", Fcb, Fcb->Entry.DataLengthL); + //DPRINT("file open: fcb:%x file size: %d\n", Fcb, Fcb->Entry.DataLengthL); return(STATUS_SUCCESS); } -#if 0 NTSTATUS NtfsDirFindFile(PDEVICE_EXTENSION DeviceExt, PFCB DirectoryFcb, PWSTR FileToFind, PFCB *FoundFCB) { +#if 0 WCHAR TempName[2]; WCHAR Name[256]; PVOID Block; @@ -454,7 +456,7 @@ NtfsDirFindFile(PDEVICE_EXTENSION DeviceExt, assert(DirectoryFcb); assert(FileToFind); - DPRINT("CdfsDirFindFile(VCB:%08x, dirFCB:%08x, File:%S)\n", + DPRINT("NtfsDirFindFile(VCB:%08x, dirFCB:%08x, File:%S)\n", DeviceExt, DirectoryFcb, FileToFind); @@ -492,13 +494,13 @@ NtfsDirFindFile(PDEVICE_EXTENSION DeviceExt, DPRINT("RecordLength %u ExtAttrRecordLength %u NameLength %u\n", Record->RecordLength, Record->ExtAttrRecordLength, Record->FileIdLength); - CdfsGetDirEntryName(DeviceExt, Record, Name); + NtfsGetDirEntryName(DeviceExt, Record, Name); DPRINT("Name '%S'\n", Name); if (wstrcmpjoki(Name, FileToFind)) { DPRINT("Match found, %S\n", Name); - Status = CdfsMakeFCBFromDirEntry(DeviceExt, + Status = NtfsMakeFCBFromDirEntry(DeviceExt, DirectoryFcb, Name, Record, @@ -536,10 +538,10 @@ NtfsDirFindFile(PDEVICE_EXTENSION DeviceExt, } CcUnpinData(Context); - +#endif return(STATUS_OBJECT_NAME_NOT_FOUND); } -#endif + NTSTATUS NtfsGetFCBForFile(PDEVICE_EXTENSION Vcb, @@ -561,11 +563,11 @@ NtfsGetFCBForFile(PDEVICE_EXTENSION Vcb, pFileName); /* Dummy code */ - FCB = NtfsOpenRootFCB(Vcb); - *pFCB = FCB; - *pParentFCB = NULL; +// FCB = NtfsOpenRootFCB(Vcb); +// *pFCB = FCB; +// *pParentFCB = NULL; -#if 0 +#if 1 /* Trivial case, open of the root directory on volume */ if (pFileName [0] == L'\0' || wcscmp(pFileName, L"\\") == 0) { @@ -581,15 +583,15 @@ NtfsGetFCBForFile(PDEVICE_EXTENSION Vcb, { currentElement = pFileName + 1; wcscpy (pathName, L"\\"); - FCB = CdfsOpenRootFCB (Vcb); + FCB = NtfsOpenRootFCB (Vcb); } parentFCB = NULL; /* Parse filename and check each path element for existance and access */ - while (CdfsGetNextPathElement(currentElement) != 0) + while (NtfsGetNextPathElement(currentElement) != 0) { /* Skip blank directory levels */ - if ((CdfsGetNextPathElement(currentElement) - currentElement) == 0) + if ((NtfsGetNextPathElement(currentElement) - currentElement) == 0) { currentElement++; continue; @@ -601,16 +603,16 @@ NtfsGetFCBForFile(PDEVICE_EXTENSION Vcb, /* Descend to next directory level */ if (parentFCB) { - CdfsReleaseFCB(Vcb, parentFCB); + NtfsReleaseFCB(Vcb, parentFCB); parentFCB = NULL; } /* fail if element in FCB is not a directory */ - if (!CdfsFCBIsDirectory(FCB)) + if (!NtfsFCBIsDirectory(FCB)) { DPRINT("Element in requested path is not a directory\n"); - CdfsReleaseFCB(Vcb, FCB); + NtfsReleaseFCB(Vcb, FCB); FCB = 0; *pParentFCB = NULL; *pFCB = NULL; @@ -620,26 +622,26 @@ NtfsGetFCBForFile(PDEVICE_EXTENSION Vcb, parentFCB = FCB; /* Extract next directory level into dirName */ - CdfsWSubString(pathName, + NtfsWSubString(pathName, pFileName, - CdfsGetNextPathElement(currentElement) - pFileName); + NtfsGetNextPathElement(currentElement) - pFileName); DPRINT(" pathName:%S\n", pathName); - FCB = CdfsGrabFCBFromTable(Vcb, pathName); + FCB = NtfsGrabFCBFromTable(Vcb, pathName); if (FCB == NULL) { - CdfsWSubString(elementName, + NtfsWSubString(elementName, currentElement, - CdfsGetNextPathElement(currentElement) - currentElement); + NtfsGetNextPathElement(currentElement) - currentElement); DPRINT(" elementName:%S\n", elementName); - Status = CdfsDirFindFile(Vcb, parentFCB, elementName, &FCB); + Status = NtfsDirFindFile(Vcb, parentFCB, elementName, &FCB); if (Status == STATUS_OBJECT_NAME_NOT_FOUND) { *pParentFCB = parentFCB; *pFCB = NULL; - currentElement = CdfsGetNextPathElement(currentElement); - if (*currentElement == L'\0' || CdfsGetNextPathElement(currentElement + 1) == 0) + currentElement = NtfsGetNextPathElement(currentElement); + if (*currentElement == L'\0' || NtfsGetNextPathElement(currentElement + 1) == 0) { return(STATUS_OBJECT_NAME_NOT_FOUND); } @@ -650,14 +652,14 @@ NtfsGetFCBForFile(PDEVICE_EXTENSION Vcb, } else if (!NT_SUCCESS(Status)) { - CdfsReleaseFCB(Vcb, parentFCB); + NtfsReleaseFCB(Vcb, parentFCB); *pParentFCB = NULL; *pFCB = NULL; return(Status); } } - currentElement = CdfsGetNextPathElement(currentElement); + currentElement = NtfsGetNextPathElement(currentElement); } *pParentFCB = parentFCB; diff --git a/drivers/fs/ntfs/finfo.c b/drivers/fs/ntfs/finfo.c index a5986bc..b2da859 100644 --- a/drivers/fs/ntfs/finfo.c +++ b/drivers/fs/ntfs/finfo.c @@ -140,16 +140,16 @@ NtfsGetNameInformation(PFILE_OBJECT FileObject, assert(NameInfo != NULL); assert(Fcb != NULL); -// NameLength = wcslen(Fcb->PathName) * sizeof(WCHAR); - NameLength = 2; + NameLength = wcslen(Fcb->PathName) * sizeof(WCHAR); +// NameLength = 2; if (*BufferLength < sizeof(FILE_NAME_INFORMATION) + NameLength) return(STATUS_BUFFER_OVERFLOW); NameInfo->FileNameLength = NameLength; -// memcpy(NameInfo->FileName, -// Fcb->PathName, -// NameLength + sizeof(WCHAR)); - wcscpy(NameInfo->FileName, L"\\"); + memcpy(NameInfo->FileName, + Fcb->PathName, + NameLength + sizeof(WCHAR)); +// wcscpy(NameInfo->FileName, L"\\"); *BufferLength -= (sizeof(FILE_NAME_INFORMATION) + NameLength + sizeof(WCHAR)); diff --git a/drivers/fs/ntfs/fsctl.c b/drivers/fs/ntfs/fsctl.c index 4cdc428..d73b31b 100644 --- a/drivers/fs/ntfs/fsctl.c +++ b/drivers/fs/ntfs/fsctl.c @@ -29,7 +29,7 @@ #include -#define NDEBUG +//#define NDEBUG #include #include "ntfs.h" @@ -277,7 +277,7 @@ NtfsMountVolume(PDEVICE_OBJECT DeviceObject, DeviceExt->StreamFileObject->Flags = DeviceExt->StreamFileObject->Flags | FO_FCB_IS_VALID | FO_DIRECT_CACHE_PAGING_READ; DeviceExt->StreamFileObject->FsContext = Fcb; DeviceExt->StreamFileObject->FsContext2 = Ccb; - DeviceExt->StreamFileObject->SectionObjectPointers = &Fcb->SectionObjectPointers; + DeviceExt->StreamFileObject->SectionObjectPointer = &Fcb->SectionObjectPointers; DeviceExt->StreamFileObject->PrivateCacheMap = NULL; DeviceExt->StreamFileObject->Vpb = DeviceExt->Vpb; Ccb->PtrFileObject = DeviceExt->StreamFileObject; diff --git a/drivers/fs/ntfs/makefile b/drivers/fs/ntfs/makefile index 2170104..325d404 100644 --- a/drivers/fs/ntfs/makefile +++ b/drivers/fs/ntfs/makefile @@ -9,7 +9,7 @@ TARGET_TYPE = driver TARGET_NAME = ntfs TARGET_OBJECTS = $(TARGET_NAME).o attrib.o blockdev.o create.o dirctl.o \ - fcb.o finfo.o fsctl.o mft.o volinfo.o + fcb.o finfo.o fsctl.o mft.o volinfo.o close.o rw.o include $(PATH_TO_TOP)/rules.mak diff --git a/drivers/fs/ntfs/notes.txt b/drivers/fs/ntfs/notes.txt new file mode 100755 index 0000000..05d27ab --- /dev/null +++ b/drivers/fs/ntfs/notes.txt @@ -0,0 +1,5 @@ + +These are notes about the NT filesystem + +More documentation is available at: +http://linux-ntfs.sourceforge.net/ntfs/index.html diff --git a/drivers/fs/ntfs/ntfs.c b/drivers/fs/ntfs/ntfs.c index 7ce00f8..037a80c 100644 --- a/drivers/fs/ntfs/ntfs.c +++ b/drivers/fs/ntfs/ntfs.c @@ -29,7 +29,7 @@ #include -#define NDEBUG +//#define NDEBUG #include #include "ntfs.h" @@ -80,20 +80,20 @@ DriverEntry(PDRIVER_OBJECT DriverObject, /* Initialize driver data */ DeviceObject->Flags = DO_DIRECT_IO; -// DriverObject->MajorFunction[IRP_MJ_CLOSE] = NtfsClose; - DriverObject->MajorFunction[IRP_MJ_CREATE] = NtfsCreate; -// DriverObject->MajorFunction[IRP_MJ_READ] = NtfsRead; -// DriverObject->MajorFunction[IRP_MJ_WRITE] = NtfsWrite; + DriverObject->MajorFunction[IRP_MJ_CLOSE] = (PDRIVER_DISPATCH) NtfsClose; + DriverObject->MajorFunction[IRP_MJ_CREATE] = (PDRIVER_DISPATCH) NtfsCreate; + DriverObject->MajorFunction[IRP_MJ_READ] = (PDRIVER_DISPATCH) NtfsRead; + DriverObject->MajorFunction[IRP_MJ_WRITE] = (PDRIVER_DISPATCH) NtfsWrite; DriverObject->MajorFunction[IRP_MJ_FILE_SYSTEM_CONTROL] = - NtfsFileSystemControl; + (PDRIVER_DISPATCH) NtfsFileSystemControl; DriverObject->MajorFunction[IRP_MJ_DIRECTORY_CONTROL] = - NtfsDirectoryControl; + (PDRIVER_DISPATCH) NtfsDirectoryControl; DriverObject->MajorFunction[IRP_MJ_QUERY_INFORMATION] = - NtfsQueryInformation; -// DriverObject->MajorFunction[IRP_MJ_QUERY_VOLUME_INFORMATION] = -// NtfsQueryVolumeInformation; -// DriverObject->MajorFunction[IRP_MJ_SET_VOLUME_INFORMATION] = -// NtfsSetVolumeInformation; + (PDRIVER_DISPATCH) NtfsQueryInformation; + DriverObject->MajorFunction[IRP_MJ_QUERY_VOLUME_INFORMATION] = + (PDRIVER_DISPATCH) NtfsQueryVolumeInformation; + DriverObject->MajorFunction[IRP_MJ_SET_VOLUME_INFORMATION] = + (PDRIVER_DISPATCH) NtfsSetVolumeInformation; DriverObject->DriverUnload = NULL; diff --git a/drivers/fs/ntfs/ntfs.h b/drivers/fs/ntfs/ntfs.h index c1fbf65..4b67eb7 100644 --- a/drivers/fs/ntfs/ntfs.h +++ b/drivers/fs/ntfs/ntfs.h @@ -78,7 +78,7 @@ typedef struct typedef struct _FCB { - REACTOS_COMMON_FCB_HEADER RFCB; + FSRTL_COMMON_FCB_HEADER RFCB; SECTION_OBJECT_POINTERS SectionObjectPointers; PFILE_OBJECT FileObject; @@ -152,25 +152,34 @@ typedef enum typedef struct { - ULONG Type; - USHORT UsnOffset; - USHORT UsnSize; - ULONGLONG Usn; + ULONG Type; /* Magic number 'FILE' */ + USHORT UsnOffset; /* Offset to the update sequence */ + USHORT UsnSize; /* Size in words of Update Sequence Number & Array (S) */ + ULONGLONG Lsn; /* $LogFile Sequence Number (LSN) */ } NTFS_RECORD_HEADER, *PNTFS_RECORD_HEADER; typedef struct { NTFS_RECORD_HEADER Ntfs; - USHORT SequenceNumber; - USHORT LinkCount; - USHORT AttributeOffset; - USHORT Flags; - ULONG BytesInUse; - ULONG BytesAllocated; - ULONGLONG BaseFileRecord; - USHORT NextAttributeNumber; + USHORT SequenceNumber; /* Sequence number */ + USHORT LinkCount; /* Hard link count */ + USHORT AttributeOffset; /* Offset to the first Attribute */ + USHORT Flags; /* Flags */ + ULONG BytesInUse; /* Real size of the FILE record */ + ULONG BytesAllocated; /* Allocated size of the FILE record */ + ULONGLONG BaseFileRecord; /* File reference to the base FILE record */ + USHORT NextAttributeNumber; /* Next Attribute Id */ + USHORT Pading; /* Align to 4 byte boundary (XP) */ + ULONG MFTRecordNumber; /* Number of this MFT Record (XP) */ } FILE_RECORD_HEADER, *PFILE_RECORD_HEADER; +/* Flags in FILE_RECORD_HEADER */ + +#define FRH_IN_USE 0x01 /* Record is in use */ +#define FRH_DIRECTORY 0x02 /* Record is a directory */ +#define FRH_UNKNOWN1 0x04 /* Don't know */ +#define FRH_UNKNOWN2 0x08 /* Don't know */ + typedef struct { ATTRIBUTE_TYPE AttributeType; @@ -299,13 +308,11 @@ NtfsDeviceIoControl(IN PDEVICE_OBJECT DeviceObject, IN OUT PVOID OutputBuffer, IN OUT PULONG OutputBufferSize); -#if 0 /* close.c */ NTSTATUS STDCALL -CdfsClose(PDEVICE_OBJECT DeviceObject, +NtfsClose(PDEVICE_OBJECT DeviceObject, PIRP Irp); -#endif /* create.c */ @@ -320,7 +327,6 @@ NTSTATUS STDCALL NtfsDirectoryControl(PDEVICE_OBJECT DeviceObject, PIRP Irp); - /* fcb.c */ PFCB @@ -411,17 +417,17 @@ CdfsDateTimeToFileTime(PFCB Fcb, VOID CdfsFileFlagsToAttributes(PFCB Fcb, PULONG FileAttributes); +#endif /* rw.c */ NTSTATUS STDCALL -CdfsRead(PDEVICE_OBJECT DeviceObject, +NtfsRead(PDEVICE_OBJECT DeviceObject, PIRP Irp); NTSTATUS STDCALL -CdfsWrite(PDEVICE_OBJECT DeviceObject, +NtfsWrite(PDEVICE_OBJECT DeviceObject, PIRP Irp); -#endif /* volinfo.c */ diff --git a/drivers/fs/ntfs/rw.c b/drivers/fs/ntfs/rw.c new file mode 100755 index 0000000..5945f49 --- /dev/null +++ b/drivers/fs/ntfs/rw.c @@ -0,0 +1,199 @@ +/* + * ReactOS kernel + * Copyright (C) 2002 ReactOS Team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ +/* $Id$ + * + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS kernel + * FILE: services/fs/cdfs/rw.c + * PURPOSE: CDROM (ISO 9660) filesystem driver + * PROGRAMMER: Art Yerkes + * UPDATE HISTORY: + */ + +/* INCLUDES *****************************************************************/ + +#include +#include + +//#define NDEBUG +#include + +#include "ntfs.h" + + +/* GLOBALS *******************************************************************/ + +#define ROUND_UP(N, S) ((((N) + (S) - 1) / (S)) * (S)) +#define ROUND_DOWN(N, S) ((N) - ((N) % (S))) + + +/* FUNCTIONS ****************************************************************/ + +static NTSTATUS +NtfsReadFile(PDEVICE_EXTENSION DeviceExt, + PFILE_OBJECT FileObject, + PUCHAR Buffer, + ULONG Length, + ULONG ReadOffset, + ULONG IrpFlags, + PULONG LengthRead) +/* + * FUNCTION: Reads data from a file + */ +{ +#if 0 + NTSTATUS Status = STATUS_SUCCESS; + PUCHAR TempBuffer; + ULONG TempLength; + PCCB Ccb; + PFCB Fcb; + + DPRINT("CdfsReadFile(ReadOffset %lu Length %lu)\n", ReadOffset, Length); + + *LengthRead = 0; + + if (Length == 0) + return(STATUS_SUCCESS); + + Ccb = (PCCB)FileObject->FsContext2; + Fcb = (PFCB)FileObject->FsContext; + + if (ReadOffset >= Fcb->Entry.DataLengthL) + return(STATUS_END_OF_FILE); + + DPRINT("Reading %d bytes at %d\n", Length, ReadOffset); + + if (!(IrpFlags & (IRP_NOCACHE|IRP_PAGING_IO))) + { + LARGE_INTEGER FileOffset; + IO_STATUS_BLOCK IoStatus; + + if (ReadOffset + Length > Fcb->Entry.DataLengthL) + Length = Fcb->Entry.DataLengthL - ReadOffset; + if (FileObject->PrivateCacheMap == NULL) + { + CcRosInitializeFileCache(FileObject, PAGE_SIZE); + } + + FileOffset.QuadPart = (LONGLONG)ReadOffset; + CcCopyRead(FileObject, + &FileOffset, + Length, + TRUE, + Buffer, + &IoStatus); + *LengthRead = IoStatus.Information; + + return(IoStatus.Status); + } + + if ((ReadOffset % BLOCKSIZE) != 0 || (Length % BLOCKSIZE) != 0) + { + return STATUS_INVALID_PARAMETER; + } + if (ReadOffset + Length > ROUND_UP(Fcb->Entry.DataLengthL, BLOCKSIZE)) + Length = ROUND_UP(Fcb->Entry.DataLengthL, BLOCKSIZE) - ReadOffset; + + Status = CdfsReadSectors(DeviceExt->StorageDevice, + Fcb->Entry.ExtentLocationL + (ReadOffset / BLOCKSIZE), + Length / BLOCKSIZE, + Buffer); + if (NT_SUCCESS(Status)) + { + *LengthRead = Length; + if (Length + ReadOffset > Fcb->Entry.DataLengthL) + { + memset(Buffer + Fcb->Entry.DataLengthL - ReadOffset, + 0, Length + ReadOffset - Fcb->Entry.DataLengthL); + } + } + + return(Status); +#else + *LengthRead = 0; + return STATUS_END_OF_FILE; +#endif +} + + +NTSTATUS STDCALL +NtfsRead(PDEVICE_OBJECT DeviceObject, + PIRP Irp) +{ + PDEVICE_EXTENSION DeviceExt; + PIO_STACK_LOCATION Stack; + PFILE_OBJECT FileObject; + PVOID Buffer; + ULONG ReadLength; + LARGE_INTEGER ReadOffset; + ULONG ReturnedReadLength = 0; + NTSTATUS Status = STATUS_SUCCESS; + + DPRINT("NtfsRead(DeviceObject %x, Irp %x)\n",DeviceObject,Irp); + + DeviceExt = DeviceObject->DeviceExtension; + Stack = IoGetCurrentIrpStackLocation(Irp); + FileObject = Stack->FileObject; + + ReadLength = Stack->Parameters.Read.Length; + ReadOffset = Stack->Parameters.Read.ByteOffset; + Buffer = MmGetSystemAddressForMdl(Irp->MdlAddress); + + Status = NtfsReadFile(DeviceExt, + FileObject, + Buffer, + ReadLength, + ReadOffset.u.LowPart, + Irp->Flags, + &ReturnedReadLength); + +ByeBye: + if (NT_SUCCESS(Status)) + { + if (FileObject->Flags & FO_SYNCHRONOUS_IO) + { + FileObject->CurrentByteOffset.QuadPart = + ReadOffset.QuadPart + ReturnedReadLength; + } + Irp->IoStatus.Information = ReturnedReadLength; + } + else + { + Irp->IoStatus.Information = 0; + } + + Irp->IoStatus.Status = Status; + IoCompleteRequest(Irp,IO_NO_INCREMENT); + + return(Status); +} + + +NTSTATUS STDCALL +NtfsWrite(PDEVICE_OBJECT DeviceObject, + PIRP Irp) +{ + DPRINT("NtfwWrite(DeviceObject %x Irp %x)\n",DeviceObject,Irp); + + Irp->IoStatus.Status = STATUS_NOT_SUPPORTED; + Irp->IoStatus.Information = 0; + return(STATUS_NOT_SUPPORTED); +} + +/* EOF */ diff --git a/drivers/fs/ntfs/volinfo.c b/drivers/fs/ntfs/volinfo.c index a5a45bc..76762f3 100644 --- a/drivers/fs/ntfs/volinfo.c +++ b/drivers/fs/ntfs/volinfo.c @@ -29,7 +29,7 @@ #include -#define NDEBUG +//#define NDEBUG #include #include "ntfs.h" diff --git a/drivers/fs/vfat/.cvsignore b/drivers/fs/vfat/.cvsignore index 0788052..c18c0df 100644 --- a/drivers/fs/vfat/.cvsignore +++ b/drivers/fs/vfat/.cvsignore @@ -6,3 +6,4 @@ vfatfs.coff *.o *.sys *.sym +*.map diff --git a/drivers/fs/vfat/cleanup.c b/drivers/fs/vfat/cleanup.c index 23b45e6..ff14548 100644 --- a/drivers/fs/vfat/cleanup.c +++ b/drivers/fs/vfat/cleanup.c @@ -61,7 +61,7 @@ NTSTATUS VfatCleanup (PVFAT_IRP_CONTEXT IrpContext) { NTSTATUS Status; - DPRINT("VfatCleanup(DeviceObject %x, Irp %x)\n", DeviceObject, Irp); + DPRINT("VfatCleanup(DeviceObject %x, Irp %x)\n", IrpContext->DeviceObject, IrpContext->Irp); if (IrpContext->DeviceObject == VfatGlobalData->DeviceObject) { @@ -69,7 +69,8 @@ NTSTATUS VfatCleanup (PVFAT_IRP_CONTEXT IrpContext) goto ByeBye; } - if (!ExAcquireResourceExclusiveLite (&IrpContext->DeviceExt->DirResource, IrpContext->Flags & IRPCONTEXT_CANWAIT)) + if (!ExAcquireResourceExclusiveLite (&IrpContext->DeviceExt->DirResource, + (BOOLEAN)(IrpContext->Flags & IRPCONTEXT_CANWAIT))) { return VfatQueueRequest (IrpContext); } diff --git a/drivers/fs/vfat/close.c b/drivers/fs/vfat/close.c index c3dd065..9292b5e 100644 --- a/drivers/fs/vfat/close.c +++ b/drivers/fs/vfat/close.c @@ -67,7 +67,7 @@ VfatCloseFile (PDEVICE_EXTENSION DeviceExt, PFILE_OBJECT FileObject) FileObject->FsContext2 = NULL; FileObject->FsContext = NULL; - FileObject->SectionObjectPointers = NULL; + FileObject->SectionObjectPointer = NULL; if (pCcb) { @@ -84,7 +84,7 @@ NTSTATUS VfatClose (PVFAT_IRP_CONTEXT IrpContext) { NTSTATUS Status; - DPRINT ("VfatClose(DeviceObject %x, Irp %x)\n", DeviceObject, Irp); + DPRINT ("VfatClose(DeviceObject %x, Irp %x)\n", IrpContext->DeviceObject, IrpContext->Irp); if (IrpContext->DeviceObject == VfatGlobalData->DeviceObject) { diff --git a/drivers/fs/vfat/create.c b/drivers/fs/vfat/create.c index 74666e1..c0b41c6 100644 --- a/drivers/fs/vfat/create.c +++ b/drivers/fs/vfat/create.c @@ -185,7 +185,6 @@ FindFile (PDEVICE_EXTENSION DeviceExt, ULONG len; ULONG DirIndex; ULONG FirstCluster; - ULONG Read; BOOL isRoot; PVOID Context = NULL; PVOID Page; @@ -465,46 +464,6 @@ VfatOpenFile (PDEVICE_EXTENSION DeviceExt, PFILE_OBJECT FileObject, } VOID STATIC -VfatPagingFileCreate(PDEVICE_EXTENSION DeviceExt, PVFATFCB Fcb) -{ - ULONG CurrentCluster, NextCluster, i; - NTSTATUS Status; - - Fcb->Flags |= FCB_IS_PAGE_FILE; - Fcb->FatChainSize = - ((Fcb->entry.FileSize + DeviceExt->FatInfo.BytesPerCluster - 1) / - DeviceExt->FatInfo.BytesPerCluster); - if (Fcb->FatChainSize) - { - Fcb->FatChain = - ExAllocatePool(NonPagedPool, Fcb->FatChainSize * sizeof(ULONG)); - } - - if (DeviceExt->FatInfo.FatType == FAT32) - { - CurrentCluster = Fcb->entry.FirstCluster + - Fcb->entry.FirstClusterHigh * 65536; - } - else - { - CurrentCluster = Fcb->entry.FirstCluster; - } - - i = 0; - if (Fcb->FatChainSize) - { - while (CurrentCluster != 0xffffffff) - { - Fcb->FatChain[i] = CurrentCluster; - Status = GetNextCluster (DeviceExt, CurrentCluster, - &NextCluster, FALSE); - i++; - CurrentCluster = NextCluster; - } - } -} - -VOID STATIC VfatSupersedeFile(PDEVICE_EXTENSION DeviceExt, PFILE_OBJECT FileObject, PVFATFCB Fcb) { @@ -530,7 +489,7 @@ VfatSupersedeFile(PDEVICE_EXTENSION DeviceExt, PFILE_OBJECT FileObject, Fcb->RFCB.ValidDataLength.QuadPart = 0; /* Notify cache manager about the change in file size if caching is initialized on the file stream */ - if (FileObject->SectionObjectPointers->SharedCacheMap != NULL) + if (FileObject->SectionObjectPointer->SharedCacheMap != NULL) { CcSetFileSizes(FileObject, (PCC_FILE_SIZES)&Fcb->RFCB.AllocationSize); } @@ -565,7 +524,7 @@ VfatCreateFile (PDEVICE_OBJECT DeviceObject, PIRP Irp) RequestedDisposition = ((Stack->Parameters.Create.Options >> 24) & 0xff); RequestedOptions = Stack->Parameters.Create.Options & FILE_VALID_OPTION_FLAGS; - PagingFileCreate = (Stack->Flags & SL_OPEN_PAGING_FILE) ? TRUE : FALSE; + PagingFileCreate = (Stack->Flags & SL_OPEN_PAGING_FILE) ? TRUE : FALSE; FileObject = Stack->FileObject; DeviceExt = DeviceObject->DeviceExtension; @@ -598,7 +557,7 @@ VfatCreateFile (PDEVICE_OBJECT DeviceObject, PIRP Irp) } memset(pCcb, 0, sizeof(VFATCCB)); FileObject->Flags |= FO_FCB_IS_VALID; - FileObject->SectionObjectPointers = &pFcb->SectionObjectPointers; + FileObject->SectionObjectPointer = &pFcb->SectionObjectPointers; FileObject->FsContext = pFcb; FileObject->FsContext2 = pCcb; pFcb->RefCount++; @@ -613,7 +572,9 @@ VfatCreateFile (PDEVICE_OBJECT DeviceObject, PIRP Irp) c = FileObject->FileName.Buffer; while (*c != 0) { - if (*c == L'*' || *c == L'?' || (*c == L'\\' && c[1] == L'\\')) + if (*c == L'*' || *c == L'?' || *c == L'<' || *c == L'>' || + *c == L'/' || *c == L'|' || *c == L':' || *c == L'"' || + (*c == L'\\' && c[1] == L'\\')) { return(STATUS_OBJECT_NAME_INVALID); } @@ -638,7 +599,7 @@ VfatCreateFile (PDEVICE_OBJECT DeviceObject, PIRP Irp) * If the file open failed then create the required file */ if (!NT_SUCCESS (Status)) - { + { if (RequestedDisposition == FILE_CREATE || RequestedDisposition == FILE_OPEN_IF || RequestedDisposition == FILE_OVERWRITE_IF || @@ -647,7 +608,7 @@ VfatCreateFile (PDEVICE_OBJECT DeviceObject, PIRP Irp) ULONG Attributes; Attributes = Stack->Parameters.Create.FileAttributes; Status = VfatAddEntry (DeviceExt, FileObject, RequestedOptions, - Attributes & FILE_ATTRIBUTE_VALID_FLAGS); + (UCHAR)(Attributes & FILE_ATTRIBUTE_VALID_FLAGS)); if (NT_SUCCESS (Status)) { pFcb = FileObject->FsContext; @@ -663,6 +624,11 @@ VfatCreateFile (PDEVICE_OBJECT DeviceObject, PIRP Irp) Stack->Parameters.Create.ShareAccess, FileObject, &pFcb->FCBShareAccess); + + if (PagingFileCreate) + { + pFcb->Flags |= FCB_IS_PAGE_FILE; + } } else { @@ -702,19 +668,52 @@ VfatCreateFile (PDEVICE_OBJECT DeviceObject, PIRP Irp) return(STATUS_NOT_A_DIRECTORY); } + if (PagingFileCreate) + { + /* FIXME: + * Do more checking for page files. It is possible, + * that the file was opened and closed previously + * as a normal cached file. In this case, the cache + * manager has referenced the fileobject and the fcb + * is held in memory. Try to remove the fileobject + * from cache manager and use the fcb. + */ + if (pFcb->RefCount > 1) + { + if(!(pFcb->Flags & FCB_IS_PAGE_FILE)) + { + VfatCloseFile(DeviceExt, FileObject); + return(STATUS_INVALID_PARAMETER); + } + } + else + { + pFcb->Flags |= FCB_IS_PAGE_FILE; + } + } + else + { + if (pFcb->Flags & FCB_IS_PAGE_FILE) + { + VfatCloseFile(DeviceExt, FileObject); + return(STATUS_INVALID_PARAMETER); + } + } + + if (RequestedDisposition == FILE_OVERWRITE || RequestedDisposition == FILE_OVERWRITE_IF) { - AllocationSize.QuadPart = 0; - Status = VfatSetAllocationSizeInformation (FileObject, - pFcb, - DeviceExt, - &AllocationSize); - if (!NT_SUCCESS (Status)) - { - VfatCloseFile (DeviceExt, FileObject); - return(Status); - } + AllocationSize.QuadPart = 0; + Status = VfatSetAllocationSizeInformation (FileObject, + pFcb, + DeviceExt, + &AllocationSize); + if (!NT_SUCCESS (Status)) + { + VfatCloseFile (DeviceExt, FileObject); + return(Status); + } } @@ -730,15 +729,6 @@ VfatCreateFile (PDEVICE_OBJECT DeviceObject, PIRP Irp) } } - /* - * If this create was for a paging file then make sure all the - * information needed to manipulate it is locked in memory. - */ - if (PagingFileCreate) - { - VfatPagingFileCreate(DeviceExt, pFcb); - } - /* FIXME : test share access */ /* FIXME : test write access if requested */ @@ -778,7 +768,7 @@ NTSTATUS VfatCreate (PVFAT_IRP_CONTEXT IrpContext) IrpContext->Irp->IoStatus.Status = Status; IoCompleteRequest (IrpContext->Irp, - NT_SUCCESS(Status) ? IO_DISK_INCREMENT : IO_NO_INCREMENT); + (CCHAR)(NT_SUCCESS(Status) ? IO_DISK_INCREMENT : IO_NO_INCREMENT)); VfatFreeIrpContext(IrpContext); return(Status); } diff --git a/drivers/fs/vfat/dir.c b/drivers/fs/vfat/dir.c index 362fde8..35a7479 100644 --- a/drivers/fs/vfat/dir.c +++ b/drivers/fs/vfat/dir.c @@ -207,21 +207,24 @@ NTSTATUS DoQuery (PVFAT_IRP_CONTEXT IrpContext) VFATFCB tmpFcb; PVFATCCB pCcb; BOOLEAN First = FALSE; + + PEXTENDED_IO_STACK_LOCATION Stack = (PEXTENDED_IO_STACK_LOCATION) IrpContext->Stack; pCcb = (PVFATCCB) IrpContext->FileObject->FsContext2; pFcb = (PVFATFCB) IrpContext->FileObject->FsContext; - if (!ExAcquireResourceSharedLite(&pFcb->MainResource, IrpContext->Flags & IRPCONTEXT_CANWAIT)) + if (!ExAcquireResourceSharedLite(&pFcb->MainResource, + (BOOLEAN)(IrpContext->Flags & IRPCONTEXT_CANWAIT))) { return STATUS_PENDING; } // Obtain the callers parameters - BufferLength = IrpContext->Stack->Parameters.QueryDirectory.Length; - pSearchPattern = IrpContext->Stack->Parameters.QueryDirectory.FileName; + BufferLength = Stack->Parameters.QueryDirectory.Length; + pSearchPattern = Stack->Parameters.QueryDirectory.FileName; FileInformationClass = - IrpContext->Stack->Parameters.QueryDirectory.FileInformationClass; - FileIndex = IrpContext->Stack->Parameters.QueryDirectory.FileIndex; + Stack->Parameters.QueryDirectory.FileInformationClass; + FileIndex = Stack->Parameters.QueryDirectory.FileIndex; if (pSearchPattern) { if (!pCcb->DirectorySearchPattern) diff --git a/drivers/fs/vfat/dirwr.c b/drivers/fs/vfat/dirwr.c index 7f828f4..ec23e76 100644 --- a/drivers/fs/vfat/dirwr.c +++ b/drivers/fs/vfat/dirwr.c @@ -42,8 +42,10 @@ VfatUpdateEntry (PDEVICE_EXTENSION DeviceExt, PFILE_OBJECT pFileObject) PVFATFCB pDirFcb, pFcb; LARGE_INTEGER Offset; +/* DPRINT ("updEntry PathFileName \'%S\'\n", ((PVFATCCB)(pFileObject->FsContext2))->pFcb->PathName); +*/ pFcb = (PVFATFCB)pFileObject->FsContext; assert (pFcb); @@ -144,8 +146,8 @@ findDirSpace(PDEVICE_EXTENSION DeviceExt, return FALSE; } // clear the new dir cluster - FileOffset.u.LowPart = pDirFcb->RFCB.FileSize.QuadPart - - DeviceExt->FatInfo.BytesPerCluster; + FileOffset.u.LowPart = (DWORD)(pDirFcb->RFCB.FileSize.QuadPart - + DeviceExt->FatInfo.BytesPerCluster); CcMapData (pDirFcb->FileObject, &FileOffset, DeviceExt->FatInfo.BytesPerCluster, TRUE, &Context, (PVOID*)&pFatEntry); RtlZeroMemory(pFatEntry, DeviceExt->FatInfo.BytesPerCluster); @@ -202,7 +204,7 @@ VfatAddEntry (PDEVICE_EXTENSION DeviceExt, { if (PathFileName[i] == L'\\') { - posCar = i; + posCar = (short)i; } } if (posCar == -1) @@ -243,7 +245,7 @@ VfatAddEntry (PDEVICE_EXTENSION DeviceExt, { if (FileName[i] == '.') { - posCar = i; + posCar = (short)i; if (i == j) { j++; @@ -252,11 +254,11 @@ VfatAddEntry (PDEVICE_EXTENSION DeviceExt, } if (!posCar) { - posCar = i; + posCar = (short)i; } if (posCar < j) { - posCar = i; + posCar = (short)i; needTilde = TRUE; } if (posCar > 8) @@ -332,8 +334,8 @@ VfatAddEntry (PDEVICE_EXTENSION DeviceExt, //try first with xxxxxx~y.zzz for (i = 1; i < 10; i++) { - DirName[posCar-1] = '0' + i; - pEntry->Filename[posCar - 1] = '0' + i; + DirName[posCar-1] = (WCHAR)('0' + i); + pEntry->Filename[posCar - 1] = (unsigned char)('0' + i); Status = FindFile (DeviceExt, &FileFcb, pDirFcb, DirName, NULL, NULL); if (!NT_SUCCESS(Status)) { @@ -473,7 +475,7 @@ VfatAddEntry (PDEVICE_EXTENSION DeviceExt, if (needLong) { // calculate checksum for 8.3 name - for (pSlots[0].alias_checksum = i = 0; i < 11; i++) + for (pSlots[0].alias_checksum = 0, i = 0; i < 11; i++) { pSlots[0].alias_checksum = (((pSlots[0].alias_checksum & 1) << 7 | ((pSlots[0].alias_checksum & 0xfe) >> 1)) @@ -510,7 +512,7 @@ VfatAddEntry (PDEVICE_EXTENSION DeviceExt, if (RequestedOptions & FILE_DIRECTORY_FILE) { CurrentCluster = 0xffffffff; - Status = NextCluster (DeviceExt, NULL, 0, &CurrentCluster, TRUE); + Status = NextCluster (DeviceExt, 0, &CurrentCluster, TRUE); if (CurrentCluster == 0xffffffff || !NT_SUCCESS(Status)) { vfatReleaseFCB(DeviceExt, pDirFcb); @@ -523,9 +525,9 @@ VfatAddEntry (PDEVICE_EXTENSION DeviceExt, } if (DeviceExt->FatInfo.FatType == FAT32) { - pEntry->FirstClusterHigh = CurrentCluster >> 16; + pEntry->FirstClusterHigh = (unsigned short)(CurrentCluster >> 16); } - pEntry->FirstCluster = CurrentCluster; + pEntry->FirstCluster = (unsigned short)CurrentCluster; } size = DeviceExt->FatInfo.BytesPerCluster / sizeof(FATDirEntry); @@ -554,7 +556,7 @@ VfatAddEntry (PDEVICE_EXTENSION DeviceExt, CcMapData (pDirFcb->FileObject, &FileOffset, nbSlots * sizeof(FATDirEntry) - size, TRUE, &Context, (PVOID*)&pFatEntry); - memcpy(pFatEntry, (PVOID)Buffer + size, nbSlots * sizeof(FATDirEntry) - size); + memcpy(pFatEntry, (PVOID)(Buffer + size), nbSlots * sizeof(FATDirEntry) - size); } CcSetDirtyPinnedData(Context, NULL); CcUnpinData(Context); @@ -616,8 +618,7 @@ delEntry (PDEVICE_EXTENSION DeviceExt, PFILE_OBJECT pFileObject) PVFATFCB pFcb = NULL, pDirFcb = NULL; NTSTATUS status; PWSTR pName; - ULONG Entry = 0, startEntry, Read, CurrentCluster, NextCluster, i; - FATDirEntry DirEntry; + ULONG Entry = 0, startEntry, CurrentCluster, NextCluster, i; DPRINT ("delEntry PathFileName \'%S\'\n", pFileObject->FileName.Buffer); diff --git a/drivers/fs/vfat/fat.c b/drivers/fs/vfat/fat.c index c435602..7b57bf8 100644 --- a/drivers/fs/vfat/fat.c +++ b/drivers/fs/vfat/fat.c @@ -39,7 +39,6 @@ Fat32GetNextCluster(PDEVICE_EXTENSION DeviceExt, */ { PVOID BaseAddress; - NTSTATUS Status; ULONG FATOffset; ULONG ChunkSize; PVOID Context; @@ -52,7 +51,7 @@ Fat32GetNextCluster(PDEVICE_EXTENSION DeviceExt, { return STATUS_UNSUCCESSFUL; } - CurrentCluster = (*(PULONG)(BaseAddress + (FATOffset % ChunkSize))) & 0x0fffffff; + CurrentCluster = (*(PULONG)((char*)BaseAddress + (FATOffset % ChunkSize))) & 0x0fffffff; if (CurrentCluster >= 0xffffff8 && CurrentCluster <= 0xfffffff) CurrentCluster = 0xffffffff; CcUnpinData(Context); @@ -69,7 +68,6 @@ Fat16GetNextCluster(PDEVICE_EXTENSION DeviceExt, */ { PVOID BaseAddress; - NTSTATUS Status; ULONG FATOffset; ULONG ChunkSize; PVOID Context; @@ -82,7 +80,7 @@ Fat16GetNextCluster(PDEVICE_EXTENSION DeviceExt, { return STATUS_UNSUCCESSFUL; } - CurrentCluster = *((PUSHORT)(BaseAddress + (FATOffset % ChunkSize))); + CurrentCluster = *((PUSHORT)((char*)BaseAddress + (FATOffset % ChunkSize))); if (CurrentCluster >= 0xfff8 && CurrentCluster <= 0xffff) CurrentCluster = 0xffffffff; CcUnpinData(Context); @@ -99,9 +97,7 @@ Fat12GetNextCluster(PDEVICE_EXTENSION DeviceExt, */ { PUSHORT CBlock; - ULONG FATOffset; ULONG Entry; - NTSTATUS Status; PVOID BaseAddress; PVOID Context; LARGE_INTEGER Offset; @@ -114,7 +110,7 @@ Fat12GetNextCluster(PDEVICE_EXTENSION DeviceExt, { return STATUS_UNSUCCESSFUL; } - CBlock = (PUSHORT)(BaseAddress + (CurrentCluster * 12) / 8); + CBlock = (PUSHORT)((char*)BaseAddress + (CurrentCluster * 12) / 8); if ((CurrentCluster % 2) == 0) { Entry = *CBlock & 0x0fff; @@ -143,7 +139,6 @@ FAT16FindAvailableCluster(PDEVICE_EXTENSION DeviceExt, ULONG FatLength; ULONG StartCluster; ULONG i, j; - NTSTATUS Status; PVOID BaseAddress; ULONG ChunkSize; PVOID Context = 0; @@ -173,7 +168,7 @@ FAT16FindAvailableCluster(PDEVICE_EXTENSION DeviceExt, return STATUS_UNSUCCESSFUL; } CHECKPOINT; - Block = (PUSHORT)(BaseAddress + i % ChunkSize); + Block = (PUSHORT)((char*)BaseAddress + i % ChunkSize); } if (*Block == 0) @@ -202,13 +197,11 @@ FAT12FindAvailableCluster(PDEVICE_EXTENSION DeviceExt, PULONG Cluster) */ { ULONG FatLength; - ULONG FATOffset; ULONG StartCluster; ULONG Entry; PUSHORT CBlock; ULONG i, j; PVOID BaseAddress; - NTSTATUS Status; PVOID Context; LARGE_INTEGER Offset; @@ -226,7 +219,7 @@ FAT12FindAvailableCluster(PDEVICE_EXTENSION DeviceExt, PULONG Cluster) { for (i = StartCluster; i < FatLength; i++) { - CBlock = (PUSHORT)(BaseAddress + (i * 12) / 8); + CBlock = (PUSHORT)((char*)BaseAddress + (i * 12) / 8); if ((i % 2) == 0) { Entry = *CBlock & 0xfff; @@ -259,7 +252,6 @@ FAT32FindAvailableCluster (PDEVICE_EXTENSION DeviceExt, PULONG Cluster) ULONG FatLength; ULONG StartCluster; ULONG i, j; - NTSTATUS Status; PVOID BaseAddress; ULONG ChunkSize; PVOID Context = 0; @@ -287,7 +279,7 @@ FAT32FindAvailableCluster (PDEVICE_EXTENSION DeviceExt, PULONG Cluster) DPRINT1("CcMapData(Offset %x, Length %d) failed\n", (ULONG)Offset.QuadPart, ChunkSize); return STATUS_UNSUCCESSFUL; } - Block = (PULONG)(BaseAddress + i % ChunkSize); + Block = (PULONG)((char*)BaseAddress + i % ChunkSize); } if ((*Block & 0x0fffffff) == 0) @@ -316,12 +308,10 @@ FAT12CountAvailableClusters(PDEVICE_EXTENSION DeviceExt) * FUNCTION: Counts free cluster in a FAT12 table */ { - ULONG FATOffset; ULONG Entry; PVOID BaseAddress; ULONG ulCount = 0; ULONG i; - NTSTATUS Status; ULONG numberofclusters; LARGE_INTEGER Offset; PVOID Context; @@ -337,7 +327,7 @@ FAT12CountAvailableClusters(PDEVICE_EXTENSION DeviceExt) for (i = 2; i < numberofclusters; i++) { - CBlock = (PUSHORT)(BaseAddress + (i * 12) / 8); + CBlock = (PUSHORT)((char*)BaseAddress + (i * 12) / 8); if ((i % 2) == 0) { Entry = *CBlock & 0x0fff; @@ -369,7 +359,6 @@ FAT16CountAvailableClusters(PDEVICE_EXTENSION DeviceExt) ULONG ulCount = 0; ULONG i; ULONG ChunkSize; - NTSTATUS Status; PVOID Context = NULL; LARGE_INTEGER Offset; ULONG FatLength; @@ -391,7 +380,7 @@ FAT16CountAvailableClusters(PDEVICE_EXTENSION DeviceExt) { return STATUS_UNSUCCESSFUL; } - Block = (PUSHORT)(BaseAddress + i % ChunkSize); + Block = (PUSHORT)((char*)BaseAddress + i % ChunkSize); } if (*Block == 0) ulCount++; @@ -416,7 +405,6 @@ FAT32CountAvailableClusters(PDEVICE_EXTENSION DeviceExt) ULONG ulCount = 0; ULONG i; ULONG ChunkSize; - NTSTATUS Status; PVOID Context = NULL; LARGE_INTEGER Offset; ULONG FatLength; @@ -437,7 +425,7 @@ FAT32CountAvailableClusters(PDEVICE_EXTENSION DeviceExt) { return STATUS_UNSUCCESSFUL; } - Block = (PULONG)(BaseAddress + i % ChunkSize); + Block = (PULONG)((char*)BaseAddress + i % ChunkSize); } if ((*Block & 0x0fffffff) == 0) ulCount++; @@ -487,8 +475,6 @@ FAT12WriteCluster(PDEVICE_EXTENSION DeviceExt, ULONG FATsector; ULONG FATOffset; PUCHAR CBlock; - int i; - NTSTATUS Status; PVOID BaseAddress; PVOID Context; LARGE_INTEGER Offset; @@ -506,7 +492,7 @@ FAT12WriteCluster(PDEVICE_EXTENSION DeviceExt, if ((ClusterToWrite % 2) == 0) { *OldValue = CBlock[FATOffset] + ((CBlock[FATOffset + 1] & 0x0f) << 8); - CBlock[FATOffset] = NewValue; + CBlock[FATOffset] = (UCHAR)NewValue; CBlock[FATOffset + 1] &= 0xf0; CBlock[FATOffset + 1] |= (NewValue & 0xf00) >> 8; } @@ -515,7 +501,7 @@ FAT12WriteCluster(PDEVICE_EXTENSION DeviceExt, *OldValue = (CBlock[FATOffset] >> 4) + (CBlock[FATOffset + 1] << 4); CBlock[FATOffset] &= 0x0f; CBlock[FATOffset] |= (NewValue & 0xf) << 4; - CBlock[FATOffset + 1] = NewValue >> 4; + CBlock[FATOffset + 1] = (UCHAR)(NewValue >> 4); } /* Write the changed FAT sector(s) to disk */ FATsector = FATOffset / DeviceExt->FatInfo.BytesPerSector; @@ -534,9 +520,7 @@ FAT16WriteCluster(PDEVICE_EXTENSION DeviceExt, */ { PVOID BaseAddress; - NTSTATUS Status; ULONG FATOffset; - ULONG i; ULONG ChunkSize; PVOID Context; LARGE_INTEGER Offset; @@ -551,9 +535,9 @@ FAT16WriteCluster(PDEVICE_EXTENSION DeviceExt, } DPRINT("Writing 0x%x for offset 0x%x 0x%x\n", NewValue, FATOffset, ClusterToWrite); - Cluster = ((PUSHORT)(BaseAddress + (FATOffset % ChunkSize))); + Cluster = ((PUSHORT)((char*)BaseAddress + (FATOffset % ChunkSize))); *OldValue = *Cluster; - *Cluster = NewValue; + *Cluster = (USHORT)NewValue; CcSetDirtyPinnedData(Context, NULL); CcUnpinData(Context); return(STATUS_SUCCESS); @@ -569,9 +553,7 @@ FAT32WriteCluster(PDEVICE_EXTENSION DeviceExt, */ { PVOID BaseAddress; - NTSTATUS Status; ULONG FATOffset; - ULONG i; ULONG ChunkSize; PVOID Context; LARGE_INTEGER Offset; @@ -587,7 +569,7 @@ FAT32WriteCluster(PDEVICE_EXTENSION DeviceExt, } DPRINT("Writing 0x%x for offset 0x%x 0x%x\n", NewValue, FATOffset, ClusterToWrite); - Cluster = ((PULONG)(BaseAddress + (FATOffset % ChunkSize))); + Cluster = ((PULONG)((char*)BaseAddress + (FATOffset % ChunkSize))); *OldValue = *Cluster & 0x0fffffff; *Cluster = (*Cluster & 0xf0000000) | (NewValue & 0x0fffffff); diff --git a/drivers/fs/vfat/fcb.c b/drivers/fs/vfat/fcb.c index 6f1a375..241e2e6 100644 --- a/drivers/fs/vfat/fcb.c +++ b/drivers/fs/vfat/fcb.c @@ -14,6 +14,7 @@ #include #include #include +#include #define NDEBUG #include @@ -82,8 +83,6 @@ vfatDestroyFCB(PVFATFCB pFCB) FsRtlUninitializeFileLock(&pFCB->FileLock); ExDeleteResourceLite(&pFCB->PagingIoResource); ExDeleteResourceLite(&pFCB->MainResource); - if ((pFCB->Flags & FCB_IS_PAGE_FILE) && pFCB->FatChainSize) - ExFreePool(pFCB->FatChain); ExFreeToNPagedLookasideList(&VfatGlobalData->FcbLookasideList, pFCB); } @@ -156,7 +155,7 @@ vfatReleaseFCB(PDEVICE_EXTENSION pVCB, PVFATFCB pFCB) if (vfatFCBIsDirectory(pFCB)) { /* Uninitialize file cache if initialized for this file object. */ - if (pFCB->FileObject->SectionObjectPointers->SharedCacheMap) + if (pFCB->FileObject->SectionObjectPointer->SharedCacheMap) { CcRosReleaseFileCache(pFCB->FileObject); } @@ -207,12 +206,9 @@ vfatGrabFCBFromTable(PDEVICE_EXTENSION pVCB, PWSTR pFileName) { KIRQL oldIrql; PVFATFCB rcFCB; - PLIST_ENTRY current_entry; ULONG Hash; PWCHAR ObjectName = NULL; ULONG len; - ULONG index; - ULONG currentindex; HASHENTRY* entry; @@ -286,7 +282,7 @@ vfatFCBInitializeCacheFromVolume (PVCB vcb, PVFATFCB fcb) memset (newCCB, 0, sizeof (VFATCCB)); fileObject->Flags |= FO_FCB_IS_VALID | FO_DIRECT_CACHE_PAGING_READ; - fileObject->SectionObjectPointers = &fcb->SectionObjectPointers; + fileObject->SectionObjectPointer = &fcb->SectionObjectPointers; fileObject->FsContext = fcb; fileObject->FsContext2 = newCCB; fcb->FileObject = fileObject; @@ -300,7 +296,7 @@ vfatFCBInitializeCacheFromVolume (PVCB vcb, PVFATFCB fcb) if (!NT_SUCCESS (status)) { DbgPrint ("CcRosInitializeFileCache failed\n"); - KeBugCheck (0); + KEBUGCHECK (0); } fcb->Flags |= FCB_CACHE_INITIALIZED; @@ -325,13 +321,13 @@ vfatMakeRootFCB(PDEVICE_EXTENSION pVCB) if (pVCB->FatInfo.FatType == FAT32) { CurrentCluster = FirstCluster = pVCB->FatInfo.RootCluster; - FCB->entry.FirstCluster = FirstCluster & 0xffff; - FCB->entry.FirstClusterHigh = FirstCluster >> 16; + FCB->entry.FirstCluster = (unsigned short)(FirstCluster & 0xffff); + FCB->entry.FirstClusterHigh = (unsigned short)(FirstCluster >> 16); while (CurrentCluster != 0xffffffff && NT_SUCCESS(Status)) { Size += pVCB->FatInfo.BytesPerCluster; - Status = NextCluster (pVCB, NULL, FirstCluster, &CurrentCluster, FALSE); + Status = NextCluster (pVCB, FirstCluster, &CurrentCluster, FALSE); } } else @@ -421,7 +417,7 @@ vfatMakeFCBFromDirEntry(PVCB vcb, while (CurrentCluster != 0xffffffff) { Size += vcb->FatInfo.BytesPerCluster; - Status = NextCluster (vcb, NULL, FirstCluster, &CurrentCluster, FALSE); + Status = NextCluster (vcb, FirstCluster, &CurrentCluster, FALSE); } } } @@ -451,7 +447,6 @@ vfatAttachFCBToFileObject (PDEVICE_EXTENSION vcb, PVFATFCB fcb, PFILE_OBJECT fileObject) { - NTSTATUS status; PVFATCCB newCCB; newCCB = ExAllocateFromNPagedLookasideList(&VfatGlobalData->CcbLookasideList); @@ -463,7 +458,7 @@ vfatAttachFCBToFileObject (PDEVICE_EXTENSION vcb, fileObject->Flags = fileObject->Flags | FO_FCB_IS_VALID | FO_DIRECT_CACHE_PAGING_READ; - fileObject->SectionObjectPointers = &fcb->SectionObjectPointers; + fileObject->SectionObjectPointer = &fcb->SectionObjectPointers; fileObject->FsContext = fcb; fileObject->FsContext2 = newCCB; DPRINT ("file open: fcb:%x file size: %d\n", fcb, fcb->entry.FileSize); diff --git a/drivers/fs/vfat/finfo.c b/drivers/fs/vfat/finfo.c index d8f48ac..9fc547f 100644 --- a/drivers/fs/vfat/finfo.c +++ b/drivers/fs/vfat/finfo.c @@ -110,13 +110,13 @@ VfatSetBasicInformation(PFILE_OBJECT FileObject, &(FCB->entry.UpdateDate), &(FCB->entry.UpdateTime)); - FCB->entry.Attrib = (FCB->entry.Attrib & + FCB->entry.Attrib = (unsigned char)((FCB->entry.Attrib & (FILE_ATTRIBUTE_DIRECTORY | 0x48)) | (BasicInfo->FileAttributes & (FILE_ATTRIBUTE_ARCHIVE | FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN | - FILE_ATTRIBUTE_READONLY)); + FILE_ATTRIBUTE_READONLY))); DPRINT("Setting attributes 0x%02x\n", FCB->entry.Attrib); VfatUpdateEntry(DeviceExt, FileObject); @@ -193,13 +193,13 @@ VfatSetDispositionInformation(PFILE_OBJECT FileObject, } if (DispositionInfo->DoDeleteFile) { - if (MmFlushImageSection (FileObject->SectionObjectPointers, MmFlushForDelete)) + if (MmFlushImageSection (FileObject->SectionObjectPointer, MmFlushForDelete)) { KeAcquireSpinLock (&DeviceExt->FcbListLock, &oldIrql); count = FCB->RefCount; if (FCB->RefCount > 1) { - DPRINT1("%d %x\n", FCB->RefCount, CcGetFileObjectFromSectionPtrs(FileObject->SectionObjectPointers)); + DPRINT1("%d %x\n", FCB->RefCount, CcGetFileObjectFromSectionPtrs(FileObject->SectionObjectPointer)); Status = STATUS_ACCESS_DENIED; } else @@ -393,7 +393,7 @@ VOID UpdateFileSize(PFILE_OBJECT FileObject, PVFATFCB Fcb, ULONG Size, ULONG Clu } else { - Fcb->RFCB.AllocationSize.QuadPart = 0LL; + Fcb->RFCB.AllocationSize.QuadPart = (LONGLONG)0; } if (!vfatFCBIsDirectory(Fcb)) { @@ -402,7 +402,7 @@ VOID UpdateFileSize(PFILE_OBJECT FileObject, PVFATFCB Fcb, ULONG Size, ULONG Clu Fcb->RFCB.FileSize.QuadPart = Size; Fcb->RFCB.ValidDataLength.QuadPart = Size; - if (FileObject->SectionObjectPointers->SharedCacheMap != NULL) + if (FileObject->SectionObjectPointer->SharedCacheMap != NULL) { CcSetFileSizes(FileObject, (PCC_FILE_SIZES)&Fcb->RFCB.AllocationSize); } @@ -416,7 +416,6 @@ VfatSetAllocationSizeInformation(PFILE_OBJECT FileObject, { ULONG OldSize; ULONG Cluster, FirstCluster; - ULONG Offset; NTSTATUS Status; ULONG ClusterSize = DeviceExt->FatInfo.BytesPerCluster; @@ -441,7 +440,7 @@ VfatSetAllocationSizeInformation(PFILE_OBJECT FileObject, { if (FirstCluster == 0) { - Status = NextCluster (DeviceExt, Fcb, FirstCluster, &FirstCluster, TRUE); + Status = NextCluster (DeviceExt, FirstCluster, &FirstCluster, TRUE); if (!NT_SUCCESS(Status)) { DPRINT1("NextCluster failed. Status = %x\n", Status); @@ -451,7 +450,7 @@ VfatSetAllocationSizeInformation(PFILE_OBJECT FileObject, { return STATUS_DISK_FULL; } - Status = OffsetToCluster(DeviceExt, Fcb, FirstCluster, + Status = OffsetToCluster(DeviceExt, FirstCluster, ROUND_DOWN(NewSize - 1, ClusterSize), &NCluster, TRUE); if (NCluster == 0xffffffff || !NT_SUCCESS(Status)) @@ -461,35 +460,35 @@ VfatSetAllocationSizeInformation(PFILE_OBJECT FileObject, Status = STATUS_SUCCESS; while (NT_SUCCESS(Status) && Cluster != 0xffffffff && Cluster > 1) { - Status = NextCluster (DeviceExt, Fcb, FirstCluster, &NCluster, FALSE); + Status = NextCluster (DeviceExt, FirstCluster, &NCluster, FALSE); WriteCluster (DeviceExt, Cluster, 0); Cluster = NCluster; } return STATUS_DISK_FULL; } - Fcb->entry.FirstCluster = (FirstCluster & 0x0000FFFF); - Fcb->entry.FirstClusterHigh = (FirstCluster & 0xFFFF0000) >> 16; + Fcb->entry.FirstCluster = (unsigned short)(FirstCluster & 0x0000FFFF); + Fcb->entry.FirstClusterHigh = (unsigned short)((FirstCluster & 0xFFFF0000) >> 16); } else { - Status = OffsetToCluster(DeviceExt, Fcb, FirstCluster, + Status = OffsetToCluster(DeviceExt, FirstCluster, Fcb->RFCB.AllocationSize.u.LowPart - ClusterSize, &Cluster, FALSE); /* FIXME: Check status */ /* Cluster points now to the last cluster within the chain */ - Status = OffsetToCluster(DeviceExt, Fcb, FirstCluster, + Status = OffsetToCluster(DeviceExt, FirstCluster, ROUND_DOWN(NewSize - 1, ClusterSize), &NCluster, TRUE); if (NCluster == 0xffffffff || !NT_SUCCESS(Status)) { /* disk is full */ NCluster = Cluster; - Status = NextCluster (DeviceExt, Fcb, FirstCluster, &NCluster, FALSE); + Status = NextCluster (DeviceExt, FirstCluster, &NCluster, FALSE); WriteCluster(DeviceExt, Cluster, 0xffffffff); Cluster = NCluster; while (NT_SUCCESS(Status) && Cluster != 0xffffffff && Cluster > 1) { - Status = NextCluster (DeviceExt, Fcb, FirstCluster, &NCluster, FALSE); + Status = NextCluster (DeviceExt, FirstCluster, &NCluster, FALSE); WriteCluster (DeviceExt, Cluster, 0); Cluster = NCluster; } @@ -503,12 +502,12 @@ VfatSetAllocationSizeInformation(PFILE_OBJECT FileObject, UpdateFileSize(FileObject, Fcb, NewSize, ClusterSize); if (NewSize > 0) { - Status = OffsetToCluster(DeviceExt, Fcb, Cluster, + Status = OffsetToCluster(DeviceExt, FirstCluster, ROUND_DOWN(NewSize - 1, ClusterSize), &Cluster, FALSE); NCluster = Cluster; - Status = NextCluster (DeviceExt, Fcb, FirstCluster, &NCluster, FALSE); + Status = NextCluster (DeviceExt, FirstCluster, &NCluster, FALSE); WriteCluster(DeviceExt, Cluster, 0xffffffff); Cluster = NCluster; } @@ -522,7 +521,7 @@ VfatSetAllocationSizeInformation(PFILE_OBJECT FileObject, } while (NT_SUCCESS(Status) && 0xffffffff != Cluster && Cluster > 1) { - Status = NextCluster (DeviceExt, Fcb, FirstCluster, &NCluster, FALSE); + Status = NextCluster (DeviceExt, FirstCluster, &NCluster, FALSE); WriteCluster (DeviceExt, Cluster, 0); Cluster = NCluster; } @@ -560,7 +559,8 @@ NTSTATUS VfatQueryInformation(PVFAT_IRP_CONTEXT IrpContext) if (!(FCB->Flags & FCB_IS_PAGE_FILE)) { - if (!ExAcquireResourceSharedLite(&FCB->MainResource, IrpContext->Flags & IRPCONTEXT_CANWAIT)) + if (!ExAcquireResourceSharedLite(&FCB->MainResource, + (BOOLEAN)(IrpContext->Flags & IRPCONTEXT_CANWAIT))) { return VfatQueueRequest (IrpContext); } @@ -660,16 +660,10 @@ NTSTATUS VfatSetInformation(PVFAT_IRP_CONTEXT IrpContext) DPRINT("FileInformationClass %d\n", FileInformationClass); DPRINT("SystemBuffer %x\n", SystemBuffer); - if (FCB->Flags & FCB_IS_PAGE_FILE) - { - if (!ExAcquireResourceExclusiveLite(&FCB->PagingIoResource, CanWait)) - { - return(VfatQueueRequest (IrpContext)); - } - } - else + if (!(FCB->Flags & FCB_IS_PAGE_FILE)) { - if (!ExAcquireResourceExclusiveLite(&FCB->MainResource, CanWait)) + if (!ExAcquireResourceExclusiveLite(&FCB->MainResource, + (BOOLEAN)CanWait)) { return(VfatQueueRequest (IrpContext)); } @@ -707,11 +701,7 @@ NTSTATUS VfatSetInformation(PVFAT_IRP_CONTEXT IrpContext) RC = STATUS_NOT_SUPPORTED; } - if (FCB->Flags & FCB_IS_PAGE_FILE) - { - ExReleaseResourceLite(&FCB->PagingIoResource); - } - else + if (!(FCB->Flags & FCB_IS_PAGE_FILE)) { ExReleaseResourceLite(&FCB->MainResource); } diff --git a/drivers/fs/vfat/fsctl.c b/drivers/fs/vfat/fsctl.c index b66a377..67409a9 100644 --- a/drivers/fs/vfat/fsctl.c +++ b/drivers/fs/vfat/fsctl.c @@ -29,6 +29,8 @@ #include #include +#include + #define NDEBUG #include @@ -185,13 +187,13 @@ VfatMountDevice(PDEVICE_EXTENSION DeviceExt, (DeviceExt->FatInfo.BytesPerCluster % PAGE_SIZE) != 0) { DbgPrint("(%s:%d) Invalid cluster size\n", __FILE__, __LINE__); - KeBugCheck(0); + KEBUGCHECK(0); } else if (DeviceExt->FatInfo.BytesPerCluster < PAGE_SIZE && (PAGE_SIZE % DeviceExt->FatInfo.BytesPerCluster) != 0) { DbgPrint("(%s:%d) Invalid cluster size2\n", __FILE__, __LINE__); - KeBugCheck(0); + KEBUGCHECK(0); } return(STATUS_SUCCESS); @@ -211,7 +213,7 @@ VfatMount (PVFAT_IRP_CONTEXT IrpContext) PVFATFCB Fcb = NULL; PVFATFCB VolumeFcb = NULL; PVFATCCB Ccb = NULL; - LARGE_INTEGER timeout; + PDEVICE_OBJECT DeviceToMount; DPRINT("VfatMount(IrpContext %x)\n", IrpContext); @@ -223,7 +225,9 @@ VfatMount (PVFAT_IRP_CONTEXT IrpContext) goto ByeBye; } - Status = VfatHasFileSystem (IrpContext->Stack->Parameters.MountVolume.DeviceObject, &RecognizedFS, NULL); + DeviceToMount = IrpContext->Stack->Parameters.MountVolume.DeviceObject; + + Status = VfatHasFileSystem (DeviceToMount, &RecognizedFS, NULL); if (!NT_SUCCESS(Status)) { goto ByeBye; @@ -254,8 +258,8 @@ VfatMount (PVFAT_IRP_CONTEXT IrpContext) RtlZeroMemory(DeviceExt, sizeof(DEVICE_EXTENSION)); /* use same vpb as device disk */ - DeviceObject->Vpb = IrpContext->Stack->Parameters.MountVolume.DeviceObject->Vpb; - Status = VfatMountDevice(DeviceExt, IrpContext->Stack->Parameters.MountVolume.DeviceObject); + DeviceObject->Vpb = DeviceToMount->Vpb; + Status = VfatMountDevice(DeviceExt, DeviceToMount); if (!NT_SUCCESS(Status)) { /* FIXME: delete device object */ @@ -275,7 +279,7 @@ VfatMount (PVFAT_IRP_CONTEXT IrpContext) } #endif - DeviceExt->StorageDevice = IrpContext->Stack->Parameters.MountVolume.DeviceObject; + DeviceExt->StorageDevice = DeviceToMount; DeviceExt->StorageDevice->Vpb->DeviceObject = DeviceObject; DeviceExt->StorageDevice->Vpb->RealDevice = DeviceExt->StorageDevice; DeviceExt->StorageDevice->Vpb->Flags |= VPB_MOUNTED; @@ -303,7 +307,7 @@ VfatMount (PVFAT_IRP_CONTEXT IrpContext) DeviceExt->FATFileObject->Flags = DeviceExt->FATFileObject->Flags | FO_FCB_IS_VALID | FO_DIRECT_CACHE_PAGING_READ; DeviceExt->FATFileObject->FsContext = Fcb; DeviceExt->FATFileObject->FsContext2 = Ccb; - DeviceExt->FATFileObject->SectionObjectPointers = &Fcb->SectionObjectPointers; + DeviceExt->FATFileObject->SectionObjectPointer = &Fcb->SectionObjectPointers; DeviceExt->FATFileObject->PrivateCacheMap = NULL; DeviceExt->FATFileObject->Vpb = DeviceObject->Vpb; Fcb->FileObject = DeviceExt->FATFileObject; @@ -382,16 +386,165 @@ ByeBye: static NTSTATUS VfatVerify (PVFAT_IRP_CONTEXT IrpContext) /* - * FUNCTION: Mount the filesystem + * FUNCTION: Verify the filesystem */ { + PDEVICE_OBJECT DeviceToVerify; + NTSTATUS Status; + DPRINT("VfatVerify(IrpContext %x)\n", IrpContext); - assert(IrpContext); + DeviceToVerify = IrpContext->Stack->Parameters.VerifyVolume.DeviceObject; + Status = VfatBlockDeviceIoControl(DeviceToVerify, + IOCTL_DISK_CHECK_VERIFY, + NULL, + 0, + NULL, + NULL); + if (!NT_SUCCESS(Status)) + { + DPRINT1("VfatBlockDeviceIoControl() failed (Status %lx)\n", Status); + + /* FIXME: Compare volume label */ + + DPRINT1(" returning STATUS_WRONG_VOLUME\n"); + + return STATUS_WRONG_VOLUME; + } + + return STATUS_SUCCESS; +} + + +static NTSTATUS +VfatGetVolumeBitmap(PVFAT_IRP_CONTEXT IrpContext) +{ + DPRINT("VfatGetVolumeBitmap (IrpContext %x)\n", IrpContext); + + return STATUS_INVALID_DEVICE_REQUEST; +} + + +static NTSTATUS +VfatGetRetrievalPointers(PVFAT_IRP_CONTEXT IrpContext) +{ + PIO_STACK_LOCATION Stack; + LARGE_INTEGER Vcn; + PGET_RETRIEVAL_DESCRIPTOR RetrievalPointers; + PFILE_OBJECT FileObject; + ULONG MaxExtentCount; + PVFATFCB Fcb; + PDEVICE_EXTENSION DeviceExt; + ULONG FirstCluster; + ULONG CurrentCluster; + ULONG LastCluster; + NTSTATUS Status; + + DPRINT("VfatGetRetrievalPointers(IrpContext %x)\n", IrpContext); + + DeviceExt = IrpContext->DeviceExt; + FileObject = IrpContext->FileObject; + Stack = IrpContext->Stack; + if (Stack->Parameters.DeviceIoControl.InputBufferLength < sizeof(LARGE_INTEGER) || + Stack->Parameters.DeviceIoControl.Type3InputBuffer == NULL) + { + return STATUS_INVALID_PARAMETER; + } + if (IrpContext->Irp->UserBuffer == NULL || + Stack->Parameters.DeviceIoControl.OutputBufferLength < sizeof(GET_RETRIEVAL_DESCRIPTOR) + sizeof(MAPPING_PAIR)) + { + return STATUS_BUFFER_TOO_SMALL; + } + + Fcb = FileObject->FsContext; + + ExAcquireResourceSharedLite(&Fcb->MainResource, TRUE); + + Vcn = *(PLARGE_INTEGER)Stack->Parameters.DeviceIoControl.Type3InputBuffer; + RetrievalPointers = IrpContext->Irp->UserBuffer; + + MaxExtentCount = ((Stack->Parameters.DeviceIoControl.OutputBufferLength - sizeof(GET_RETRIEVAL_DESCRIPTOR)) / sizeof(MAPPING_PAIR)); + + + if (Vcn.QuadPart >= Fcb->RFCB.AllocationSize.QuadPart / DeviceExt->FatInfo.BytesPerCluster) + { + Status = STATUS_INVALID_PARAMETER; + goto ByeBye; + } + + CurrentCluster = FirstCluster = vfatDirEntryGetFirstCluster(DeviceExt, &Fcb->entry); + Status = OffsetToCluster(DeviceExt, FirstCluster, + Vcn.u.LowPart * DeviceExt->FatInfo.BytesPerCluster, + &CurrentCluster, FALSE); + if (!NT_SUCCESS(Status)) + { + goto ByeBye; + } + + RetrievalPointers->StartVcn = Vcn.QuadPart; + RetrievalPointers->NumberOfPairs = 0; + RetrievalPointers->Pair[0].Lcn = CurrentCluster - 2; + LastCluster = 0; + while (CurrentCluster != 0xffffffff && RetrievalPointers->NumberOfPairs < MaxExtentCount) + { + + LastCluster = CurrentCluster; + Status = NextCluster(DeviceExt, CurrentCluster, &CurrentCluster, FALSE); + Vcn.QuadPart++; + if (!NT_SUCCESS(Status)) + { + goto ByeBye; + } + + if (LastCluster + 1 != CurrentCluster) + { + RetrievalPointers->Pair[RetrievalPointers->NumberOfPairs].Vcn = Vcn.QuadPart; + RetrievalPointers->NumberOfPairs++; + if (RetrievalPointers->NumberOfPairs < MaxExtentCount) + { + RetrievalPointers->Pair[RetrievalPointers->NumberOfPairs].Lcn = CurrentCluster - 2; + } + } + } + + IrpContext->Irp->IoStatus.Information = sizeof(GET_RETRIEVAL_DESCRIPTOR) + sizeof(MAPPING_PAIR) * RetrievalPointers->NumberOfPairs; + Status = STATUS_SUCCESS; + +ByeBye: + ExReleaseResourceLite(&Fcb->MainResource); + + return Status; +} - return(STATUS_INVALID_DEVICE_REQUEST); +static NTSTATUS +VfatMoveFile(PVFAT_IRP_CONTEXT IrpContext) +{ + DPRINT("VfatMoveFile(IrpContext %x)\n", IrpContext); + + return STATUS_INVALID_DEVICE_REQUEST; } +static NTSTATUS +VfatRosQueryLcnMapping(PVFAT_IRP_CONTEXT IrpContext) +{ + PDEVICE_EXTENSION DeviceExt; + PROS_QUERY_LCN_MAPPING LcnQuery; + PIO_STACK_LOCATION Stack; + + DPRINT("VfatGetRetrievalPointers(IrpContext %x)\n", IrpContext); + + DeviceExt = IrpContext->DeviceExt; + Stack = IrpContext->Stack; + if (IrpContext->Irp->AssociatedIrp.SystemBuffer == NULL || + Stack->Parameters.DeviceIoControl.OutputBufferLength < sizeof(ROS_QUERY_LCN_MAPPING)) + { + return STATUS_BUFFER_TOO_SMALL; + } + LcnQuery = (PROS_QUERY_LCN_MAPPING)(IrpContext->Irp->AssociatedIrp.SystemBuffer); + LcnQuery->LcnDiskOffset.QuadPart = DeviceExt->FatInfo.dataStart * DeviceExt->FatInfo.BytesPerSector; + IrpContext->Irp->IoStatus.Information = sizeof(ROS_QUERY_LCN_MAPPING); + return(STATUS_SUCCESS); +} NTSTATUS VfatFileSystemControl(PVFAT_IRP_CONTEXT IrpContext) /* @@ -404,12 +557,31 @@ NTSTATUS VfatFileSystemControl(PVFAT_IRP_CONTEXT IrpContext) DPRINT("VfatFileSystemControl(IrpContext %x)\n", IrpContext); assert (IrpContext); + assert (IrpContext->Irp); + assert (IrpContext->Stack); + + IrpContext->Irp->IoStatus.Information = 0; switch (IrpContext->MinorFunction) { case IRP_MN_USER_FS_REQUEST: - DPRINT("VFAT FSC: IRP_MN_USER_FS_REQUEST\n"); - Status = STATUS_INVALID_DEVICE_REQUEST; + switch(IrpContext->Stack->Parameters.DeviceIoControl.IoControlCode) + { + case FSCTL_GET_VOLUME_BITMAP: + Status = VfatGetVolumeBitmap(IrpContext); + break; + case FSCTL_GET_RETRIEVAL_POINTERS: + Status = VfatGetRetrievalPointers(IrpContext); + break; + case FSCTL_MOVE_FILE: + Status = VfatMoveFile(IrpContext); + break; + case FSCTL_ROS_QUERY_LCN_MAPPING: + Status = VfatRosQueryLcnMapping(IrpContext); + break; + default: + Status = STATUS_INVALID_DEVICE_REQUEST; + } break; case IRP_MN_MOUNT_VOLUME: @@ -427,7 +599,6 @@ NTSTATUS VfatFileSystemControl(PVFAT_IRP_CONTEXT IrpContext) } IrpContext->Irp->IoStatus.Status = Status; - IrpContext->Irp->IoStatus.Information = 0; IoCompleteRequest (IrpContext->Irp, IO_NO_INCREMENT); VfatFreeIrpContext(IrpContext); diff --git a/drivers/fs/vfat/misc.c b/drivers/fs/vfat/misc.c index ec26c9d..36b2f72 100644 --- a/drivers/fs/vfat/misc.c +++ b/drivers/fs/vfat/misc.c @@ -22,6 +22,46 @@ static LONG QueueCount = 0; +NTSTATUS VfatLockControl( + IN PVFAT_IRP_CONTEXT IrpContext + ) +{ + PVFATFCB Fcb; + NTSTATUS Status; + + DPRINT("VfatLockControl(IrpContext %x)\n", IrpContext); + + assert(IrpContext); + + Fcb = (PVFATFCB)IrpContext->FileObject->FsContext; + + if (IrpContext->DeviceObject == VfatGlobalData->DeviceObject) + { + Status = STATUS_INVALID_DEVICE_REQUEST; + goto Fail; + } + + if (Fcb->entry.Attrib & FILE_ATTRIBUTE_DIRECTORY) + { + Status = STATUS_INVALID_PARAMETER; + goto Fail; + } + + Status = FsRtlProcessFileLock(&Fcb->FileLock, + IrpContext->Irp, + NULL + ); + + VfatFreeIrpContext(IrpContext); + return Status; + +Fail:; + IrpContext->Irp->IoStatus.Status = Status; + IofCompleteRequest(IrpContext->Irp, (CCHAR)(NT_SUCCESS(Status) ? IO_DISK_INCREMENT : IO_NO_INCREMENT)); + VfatFreeIrpContext(IrpContext); + return Status; +} + NTSTATUS VfatDispatchRequest ( IN PVFAT_IRP_CONTEXT IrpContext) { @@ -66,46 +106,6 @@ NTSTATUS VfatDispatchRequest ( } } -NTSTATUS VfatLockControl( - IN PVFAT_IRP_CONTEXT IrpContext - ) -{ - PVFATFCB Fcb; - NTSTATUS Status; - - DPRINT("VfatLockControl(IrpContext %x)\n", IrpContext); - - assert(IrpContext); - - Fcb = (PVFATFCB)IrpContext->FileObject->FsContext; - - if (IrpContext->DeviceObject == VfatGlobalData->DeviceObject) - { - Status = STATUS_INVALID_DEVICE_REQUEST; - goto Fail; - } - - if (Fcb->entry.Attrib & FILE_ATTRIBUTE_DIRECTORY) - { - Status = STATUS_INVALID_PARAMETER; - goto Fail; - } - - Status = FsRtlProcessFileLock(&Fcb->FileLock, - IrpContext->Irp, - NULL - ); - - VfatFreeIrpContext(IrpContext); - return Status; - -Fail:; - IrpContext->Irp->IoStatus.Status = Status; - IofCompleteRequest(IrpContext->Irp, NT_SUCCESS(Status) ? IO_DISK_INCREMENT : IO_NO_INCREMENT); - VfatFreeIrpContext(IrpContext); - return Status; -} - NTSTATUS STDCALL VfatBuildRequest ( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp) @@ -152,7 +152,7 @@ VOID VfatFreeIrpContext (PVFAT_IRP_CONTEXT IrpContext) PVFAT_IRP_CONTEXT VfatAllocateIrpContext(PDEVICE_OBJECT DeviceObject, PIRP Irp) { PVFAT_IRP_CONTEXT IrpContext; - PIO_STACK_LOCATION Stack; + /*PIO_STACK_LOCATION Stack;*/ UCHAR MajorFunction; DPRINT ("VfatAllocateIrpContext(DeviceObject %x, Irp %x)\n", DeviceObject, Irp); diff --git a/drivers/fs/vfat/rw.c b/drivers/fs/vfat/rw.c index a28ca12..6b70bb4 100644 --- a/drivers/fs/vfat/rw.c +++ b/drivers/fs/vfat/rw.c @@ -15,6 +15,8 @@ #include #include +#include + #define NDEBUG #include @@ -24,7 +26,6 @@ NTSTATUS NextCluster(PDEVICE_EXTENSION DeviceExt, - PVFATFCB Fcb, ULONG FirstCluster, PULONG CurrentCluster, BOOLEAN Extend) @@ -33,88 +34,7 @@ NextCluster(PDEVICE_EXTENSION DeviceExt, * necessary */ { - if (Fcb != NULL && Fcb->Flags & FCB_IS_PAGE_FILE) - { - ULONG i; - PULONG FatChain; - NTSTATUS Status; - DPRINT("NextCluster(Fcb %x, FirstCluster %x, Extend %d)\n", Fcb, - FirstCluster, Extend); - if (Fcb->FatChainSize == 0) - { - /* Paging file with zero length. */ - *CurrentCluster = 0xffffffff; - if (Extend) - { - Fcb->FatChain = ExAllocatePool(NonPagedPool, sizeof(ULONG)); - if (Fcb->FatChain == NULL) - { - return(STATUS_NO_MEMORY); - } - Status = GetNextCluster(DeviceExt, 0, CurrentCluster, TRUE); - if (!NT_SUCCESS(Status)) - { - ExFreePool(Fcb->FatChain); - return(Status); - } - Fcb->FatChain[0] = *CurrentCluster; - Fcb->FatChainSize = 1; - return Status; - } - else - { - return STATUS_UNSUCCESSFUL; - } - } - else - { - for (i = 0; i < Fcb->FatChainSize; i++) - { - if (Fcb->FatChain[i] == *CurrentCluster) - break; - } - if (i >= Fcb->FatChainSize) - { - return STATUS_UNSUCCESSFUL; - } - if (i == Fcb->FatChainSize - 1) - { - if (Extend) - { - FatChain = ExAllocatePool(NonPagedPool, - (i + 2) * sizeof(ULONG)); - if (!FatChain) - { - *CurrentCluster = 0xffffffff; - return STATUS_NO_MEMORY; - } - Status = GetNextCluster(DeviceExt, *CurrentCluster, - CurrentCluster, TRUE); - if (NT_SUCCESS(Status) && *CurrentCluster != 0xffffffff) - { - memcpy(FatChain, Fcb->FatChain, (i + 1) * sizeof(ULONG)); - FatChain[i + 1] = *CurrentCluster; - ExFreePool(Fcb->FatChain); - Fcb->FatChain = FatChain; - Fcb->FatChainSize = i + 2; - } - else - { - ExFreePool(FatChain); - } - return Status; - } - else - { - *CurrentCluster = 0xffffffff; - return STATUS_SUCCESS; - } - } - *CurrentCluster = Fcb->FatChain[i + 1]; - return STATUS_SUCCESS; - } - } - if (FirstCluster == 1) + if (FirstCluster == 1) { (*CurrentCluster) += DeviceExt->FatInfo.SectorsPerCluster; return(STATUS_SUCCESS); @@ -146,7 +66,6 @@ NextCluster(PDEVICE_EXTENSION DeviceExt, NTSTATUS OffsetToCluster(PDEVICE_EXTENSION DeviceExt, - PVFATFCB Fcb, ULONG FirstCluster, ULONG FileOffset, PULONG Cluster, @@ -159,77 +78,17 @@ OffsetToCluster(PDEVICE_EXTENSION DeviceExt, ULONG CurrentCluster; ULONG i; NTSTATUS Status; +/* DPRINT("OffsetToCluster(DeviceExt %x, Fcb %x, FirstCluster %x," " FileOffset %x, Cluster %x, Extend %d)\n", DeviceExt, Fcb, FirstCluster, FileOffset, Cluster, Extend); +*/ if (FirstCluster == 0) { DbgPrint("OffsetToCluster is called with FirstCluster = 0!\n"); - KeBugCheck(0); + KEBUGCHECK(0); } - if (Fcb != NULL && Fcb->Flags & FCB_IS_PAGE_FILE) - { - ULONG NCluster; - ULONG Offset = FileOffset / DeviceExt->FatInfo.BytesPerCluster; - PULONG FatChain; - int i; - if (Fcb->FatChainSize == 0) - { - DbgPrint("OffsetToCluster is called with FirstCluster = %x" - " and Fcb->FatChainSize = 0!\n", FirstCluster); - KeBugCheck(0); - } - if (Offset < Fcb->FatChainSize) - { - *Cluster = Fcb->FatChain[Offset]; - return STATUS_SUCCESS; - } - else - { - if (!Extend) - { - *Cluster = 0xffffffff; - return STATUS_UNSUCCESSFUL; - } - else - { - FatChain = ExAllocatePool(NonPagedPool, (Offset + 1) * sizeof(ULONG)); - if (!FatChain) - { - *Cluster = 0xffffffff; - return STATUS_UNSUCCESSFUL; - } - - CurrentCluster = Fcb->FatChain[Fcb->FatChainSize - 1]; - FatChain[Fcb->FatChainSize - 1] = CurrentCluster; - for (i = Fcb->FatChainSize; i < Offset + 1; i++) - { - Status = GetNextCluster(DeviceExt, CurrentCluster, &CurrentCluster, TRUE); - if (!NT_SUCCESS(Status) || CurrentCluster == 0xFFFFFFFF) - { - while (i >= Fcb->FatChainSize) - { - WriteCluster(DeviceExt, FatChain[i - 1], 0xFFFFFFFF); - i--; - } - *Cluster = 0xffffffff; - ExFreePool(FatChain); - if (!NT_SUCCESS(Status)) - return Status; - return STATUS_UNSUCCESSFUL; - } - FatChain[i] = CurrentCluster; - } - memcpy (FatChain, Fcb->FatChain, Fcb->FatChainSize * sizeof(ULONG)); - ExFreePool(Fcb->FatChain); - Fcb->FatChain = FatChain; - Fcb->FatChainSize = Offset + 1; - } - } - *Cluster = CurrentCluster; - return(STATUS_SUCCESS); - } if (FirstCluster == 1) { /* root of FAT16 or FAT12 */ @@ -361,7 +220,7 @@ VfatReadFileData (PVFAT_IRP_CONTEXT IrpContext, PVOID Buffer, { CurrentCluster = Ccb->LastCluster; } - Status = OffsetToCluster(DeviceExt, Fcb, FirstCluster, + Status = OffsetToCluster(DeviceExt, FirstCluster, ROUND_DOWN(ReadOffset.u.LowPart, BytesPerCluster), &CurrentCluster, FALSE); if (!NT_SUCCESS(Status)) @@ -399,7 +258,7 @@ VfatReadFileData (PVFAT_IRP_CONTEXT IrpContext, PVOID Buffer, BytesDone = Length; } } - Status = NextCluster(DeviceExt, Fcb, FirstCluster, &CurrentCluster, FALSE); + Status = NextCluster(DeviceExt, FirstCluster, &CurrentCluster, FALSE); } while (StartCluster + ClusterCount == CurrentCluster && NT_SUCCESS(Status) && Length > BytesDone); DPRINT("start %08x, next %08x, count %d\n", @@ -414,7 +273,15 @@ VfatReadFileData (PVFAT_IRP_CONTEXT IrpContext, PVOID Buffer, if (NT_SUCCESS(Status)) { *LengthRead += BytesDone; +/* GCC allows arithmetics on the void type. Conforming compilers do not. */ +#ifdef __GNUC__ Buffer += BytesDone; +#else + { + char* pBuf = (char*)Buffer + BytesDone; + Buffer = (PVOID)pBuf; + } +#endif Length -= BytesDone; ReadOffset.u.LowPart += BytesDone; } @@ -515,7 +382,7 @@ NTSTATUS VfatWriteFileData(PVFAT_IRP_CONTEXT IrpContext, CurrentCluster = Ccb->LastCluster; } - Status = OffsetToCluster(DeviceExt, Fcb, FirstCluster, + Status = OffsetToCluster(DeviceExt, FirstCluster, ROUND_DOWN(WriteOffset.u.LowPart, BytesPerCluster), &CurrentCluster, FALSE); @@ -554,7 +421,7 @@ NTSTATUS VfatWriteFileData(PVFAT_IRP_CONTEXT IrpContext, BytesDone = Length; } } - Status = NextCluster(DeviceExt, Fcb, FirstCluster, &CurrentCluster, FALSE); + Status = NextCluster(DeviceExt, FirstCluster, &CurrentCluster, FALSE); } while (StartCluster + ClusterCount == CurrentCluster && NT_SUCCESS(Status) && Length > BytesDone); DPRINT("start %08x, next %08x, count %d\n", @@ -567,7 +434,15 @@ NTSTATUS VfatWriteFileData(PVFAT_IRP_CONTEXT IrpContext, Status = VfatWriteDisk (DeviceExt->StorageDevice, &StartOffset, BytesDone, Buffer); if (NT_SUCCESS(Status)) { +/* GCC allows arithmetics on the void type. Conforming compilers do not. */ +#ifdef __GNUC__ Buffer += BytesDone; +#else + { + char* pBuf = (char*)Buffer + BytesDone; + Buffer = (PVOID)pBuf; + } +#endif Length -= BytesDone; WriteOffset.u.LowPart += BytesDone; } @@ -585,7 +460,7 @@ VfatRead(PVFAT_IRP_CONTEXT IrpContext) PERESOURCE Resource = NULL; LARGE_INTEGER ByteOffset; PVOID Buffer; - PDEVICE_OBJECT DeviceToVerify; + /*PDEVICE_OBJECT DeviceToVerify;*/ ULONG BytesPerSector; assert(IrpContext); @@ -609,6 +484,19 @@ VfatRead(PVFAT_IRP_CONTEXT IrpContext) DPRINT("<%S>\n", Fcb->PathName); + if (Fcb->Flags & FCB_IS_PAGE_FILE) + { + PIO_STACK_LOCATION Stack; + PFATINFO FatInfo = &IrpContext->DeviceExt->FatInfo; + IoCopyCurrentIrpStackLocationToNext(IrpContext->Irp); + Stack = IoGetNextIrpStackLocation(IrpContext->Irp); + Stack->Parameters.Read.ByteOffset.QuadPart += FatInfo->dataStart * FatInfo->BytesPerSector; + DPRINT("Read from page file, disk offset %I64x\n", Stack->Parameters.Read.ByteOffset.QuadPart); + Status = IoCallDriver(IrpContext->DeviceExt->StorageDevice, IrpContext->Irp); + VfatFreeIrpContext(IrpContext); + return Status; + } + ByteOffset = IrpContext->Stack->Parameters.Read.ByteOffset; Length = IrpContext->Stack->Parameters.Read.Length; BytesPerSector = IrpContext->DeviceExt->FatInfo.BytesPerSector; @@ -663,7 +551,8 @@ VfatRead(PVFAT_IRP_CONTEXT IrpContext) { Resource = &Fcb->MainResource; } - if (!ExAcquireResourceSharedLite(Resource, IrpContext->Flags & IRPCONTEXT_CANWAIT)) + if (!ExAcquireResourceSharedLite(Resource, + (BOOLEAN)(IrpContext->Flags & IRPCONTEXT_CANWAIT))) { Resource = NULL; Status = STATUS_PENDING; @@ -711,7 +600,7 @@ VfatRead(PVFAT_IRP_CONTEXT IrpContext) CcRosInitializeFileCache(IrpContext->FileObject, CacheSize); } if (!CcCopyRead(IrpContext->FileObject, &ByteOffset, Length, - IrpContext->Flags & IRPCONTEXT_CANWAIT, Buffer, + (BOOLEAN)(IrpContext->Flags & IRPCONTEXT_CANWAIT), Buffer, &IrpContext->Irp->IoStatus)) { Status = STATUS_PENDING; @@ -729,7 +618,7 @@ VfatRead(PVFAT_IRP_CONTEXT IrpContext) CHECKPOINT; if (ByteOffset.QuadPart + Length > ROUND_UP(Fcb->RFCB.FileSize.QuadPart, BytesPerSector)) { - Length = ROUND_UP(Fcb->RFCB.FileSize.QuadPart, BytesPerSector) - ByteOffset.QuadPart; + Length = (ULONG)(ROUND_UP(Fcb->RFCB.FileSize.QuadPart, BytesPerSector) - ByteOffset.QuadPart); } Buffer = VfatGetUserBuffer(IrpContext->Irp); @@ -793,7 +682,7 @@ ByeBye: } IoCompleteRequest(IrpContext->Irp, - NT_SUCCESS(Status) ? IO_DISK_INCREMENT : IO_NO_INCREMENT); + (CCHAR)(NT_SUCCESS(Status) ? IO_DISK_INCREMENT : IO_NO_INCREMENT)); VfatFreeIrpContext(IrpContext); } DPRINT("%x\n", Status); @@ -833,7 +722,20 @@ NTSTATUS VfatWrite (PVFAT_IRP_CONTEXT IrpContext) DPRINT("<%S>\n", Fcb->PathName); - /* fail if file is a directory and no paged read */ + if (Fcb->Flags & FCB_IS_PAGE_FILE) + { + PIO_STACK_LOCATION Stack; + PFATINFO FatInfo = &IrpContext->DeviceExt->FatInfo; + IoCopyCurrentIrpStackLocationToNext(IrpContext->Irp); + Stack = IoGetNextIrpStackLocation(IrpContext->Irp); + Stack->Parameters.Write.ByteOffset.QuadPart += FatInfo->dataStart * FatInfo->BytesPerSector; + DPRINT("Write to page file, disk offset %I64x\n", Stack->Parameters.Write.ByteOffset.QuadPart); + Status = IoCallDriver(IrpContext->DeviceExt->StorageDevice, IrpContext->Irp); + VfatFreeIrpContext(IrpContext); + return Status; + } + + /* fail if file is a directory and no paged read */ if (Fcb->entry.Attrib & FILE_ATTRIBUTE_DIRECTORY && !(IrpContext->Irp->Flags & IRP_PAGING_IO)) { Status = STATUS_INVALID_PARAMETER; @@ -906,7 +808,8 @@ NTSTATUS VfatWrite (PVFAT_IRP_CONTEXT IrpContext) if (Fcb->Flags & FCB_IS_PAGE_FILE) { - if (!ExAcquireResourceSharedLite(Resource, IrpContext->Flags & IRPCONTEXT_CANWAIT)) + if (!ExAcquireResourceSharedLite(Resource, + (BOOLEAN)(IrpContext->Flags & IRPCONTEXT_CANWAIT))) { Resource = NULL; Status = STATUS_PENDING; @@ -915,7 +818,8 @@ NTSTATUS VfatWrite (PVFAT_IRP_CONTEXT IrpContext) } else { - if (!ExAcquireResourceExclusiveLite(Resource, IrpContext->Flags & IRPCONTEXT_CANWAIT)) + if (!ExAcquireResourceExclusiveLite(Resource, + (BOOLEAN)(IrpContext->Flags & IRPCONTEXT_CANWAIT))) { Resource = NULL; Status = STATUS_PENDING; @@ -1071,7 +975,7 @@ ByeBye: } IoCompleteRequest(IrpContext->Irp, - NT_SUCCESS(Status) ? IO_DISK_INCREMENT : IO_NO_INCREMENT); + (CCHAR)(NT_SUCCESS(Status) ? IO_DISK_INCREMENT : IO_NO_INCREMENT)); VfatFreeIrpContext(IrpContext); } DPRINT("%x\n", Status); diff --git a/drivers/fs/vfat/vfat.h b/drivers/fs/vfat/vfat.h index f481d6c..67032e3 100644 --- a/drivers/fs/vfat/vfat.h +++ b/drivers/fs/vfat/vfat.h @@ -182,7 +182,7 @@ extern PVFAT_GLOBAL_DATA VfatGlobalData; typedef struct _VFATFCB { /* FCB header required by ROS/NT */ - REACTOS_COMMON_FCB_HEADER RFCB; + FSRTL_COMMON_FCB_HEADER RFCB; SECTION_OBJECT_POINTERS SectionObjectPointers; ERESOURCE MainResource; ERESOURCE PagingIoResource; @@ -233,9 +233,6 @@ typedef struct _VFATFCB /* List of byte-range locks for this file */ FILE_LOCK FileLock; - /* Structure members used only for paging files. */ - ULONG FatChainSize; - PULONG FatChain; } VFATFCB, *PVFATFCB; typedef struct _VFATCCB @@ -420,7 +417,6 @@ BOOL vfatIsFileNameValid (PWCHAR pFileName); /* ----------------------------------------------------------- fat.c */ NTSTATUS OffsetToCluster (PDEVICE_EXTENSION DeviceExt, - PVFATFCB Fcb, ULONG FirstCluster, ULONG FileOffset, PULONG Cluster, @@ -437,6 +433,11 @@ NTSTATUS GetNextCluster (PDEVICE_EXTENSION DeviceExt, NTSTATUS CountAvailableClusters (PDEVICE_EXTENSION DeviceExt, PLARGE_INTEGER Clusters); +NTSTATUS +WriteCluster(PDEVICE_EXTENSION DeviceExt, + ULONG ClusterToWrite, + ULONG NewValue); + /* ------------------------------------------------------ direntry.c */ ULONG vfatDirEntryGetFirstCluster (PDEVICE_EXTENSION pDeviceExt, @@ -465,6 +466,8 @@ PVFATFCB vfatNewFCB (PWCHAR pFileName); VOID vfatDestroyFCB (PVFATFCB pFCB); +VOID vfatDestroyCCB(PVFATCCB pCcb); + VOID vfatGrabFCB (PDEVICE_EXTENSION pVCB, PVFATFCB pFCB); @@ -483,6 +486,8 @@ PVFATFCB vfatOpenRootFCB (PDEVICE_EXTENSION pVCB); BOOL vfatFCBIsDirectory (PVFATFCB FCB); +BOOL vfatFCBIsRoot(PVFATFCB FCB); + NTSTATUS vfatAttachFCBToFileObject (PDEVICE_EXTENSION vcb, PVFATFCB fcb, PFILE_OBJECT fileObject); @@ -512,7 +517,6 @@ NTSTATUS VfatRead (PVFAT_IRP_CONTEXT IrpContext); NTSTATUS VfatWrite (PVFAT_IRP_CONTEXT IrpContext); NTSTATUS NextCluster(PDEVICE_EXTENSION DeviceExt, - PVFATFCB Fcb, ULONG FirstCluster, PULONG CurrentCluster, BOOLEAN Extend); diff --git a/drivers/fs/vfat/volume.c b/drivers/fs/vfat/volume.c index d20d4fa..1f5d990 100644 --- a/drivers/fs/vfat/volume.c +++ b/drivers/fs/vfat/volume.c @@ -24,28 +24,24 @@ FsdGetFsVolumeInformation(PDEVICE_OBJECT DeviceObject, PFILE_FS_VOLUME_INFORMATION FsVolumeInfo, PULONG BufferLength) { - ULONG LabelLength; - DPRINT("FsdGetFsVolumeInformation()\n"); DPRINT("FsVolumeInfo = %p\n", FsVolumeInfo); DPRINT("BufferLength %lu\n", *BufferLength); - LabelLength = DeviceObject->Vpb->VolumeLabelLength; - - DPRINT("Required length %lu\n", (sizeof(FILE_FS_VOLUME_INFORMATION) + LabelLength*sizeof(WCHAR))); - DPRINT("LabelLength %lu\n", LabelLength); - DPRINT("Label %S\n", DeviceObject->Vpb->VolumeLabel); + DPRINT("Required length %lu\n", (sizeof(FILE_FS_VOLUME_INFORMATION) + DeviceObject->Vpb->VolumeLabelLength)); + DPRINT("LabelLength %lu\n", DeviceObject->Vpb->VolumeLabelLength); + DPRINT("Label %*.S\n", DeviceObject->Vpb->VolumeLabelLength / sizeof(WCHAR), DeviceObject->Vpb->VolumeLabel); if (*BufferLength < sizeof(FILE_FS_VOLUME_INFORMATION)) return STATUS_INFO_LENGTH_MISMATCH; - if (*BufferLength < (sizeof(FILE_FS_VOLUME_INFORMATION) + LabelLength*sizeof(WCHAR))) + if (*BufferLength < (sizeof(FILE_FS_VOLUME_INFORMATION) + DeviceObject->Vpb->VolumeLabelLength)) return STATUS_BUFFER_OVERFLOW; /* valid entries */ FsVolumeInfo->VolumeSerialNumber = DeviceObject->Vpb->SerialNumber; - FsVolumeInfo->VolumeLabelLength = LabelLength * sizeof (WCHAR); - wcscpy(FsVolumeInfo->VolumeLabel, DeviceObject->Vpb->VolumeLabel); + FsVolumeInfo->VolumeLabelLength = DeviceObject->Vpb->VolumeLabelLength; + memcpy(FsVolumeInfo->VolumeLabel, DeviceObject->Vpb->VolumeLabel, FsVolumeInfo->VolumeLabelLength); /* dummy entries */ FsVolumeInfo->VolumeCreationTime.QuadPart = 0; @@ -53,7 +49,7 @@ FsdGetFsVolumeInformation(PDEVICE_OBJECT DeviceObject, DPRINT("Finished FsdGetFsVolumeInformation()\n"); - *BufferLength -= (sizeof(FILE_FS_VOLUME_INFORMATION) + LabelLength * sizeof(WCHAR)); + *BufferLength -= (sizeof(FILE_FS_VOLUME_INFORMATION) + DeviceObject->Vpb->VolumeLabelLength); DPRINT("BufferLength %lu\n", *BufferLength); @@ -66,8 +62,7 @@ FsdGetFsAttributeInformation(PDEVICE_EXTENSION DeviceExt, PFILE_FS_ATTRIBUTE_INFORMATION FsAttributeInfo, PULONG BufferLength) { - ULONG Length = DeviceExt->FatInfo.FatType == FAT32 ? 10 : 6; - + WCHAR* pName; ULONG Length; DPRINT("FsdGetFsAttributeInformation()\n"); DPRINT("FsAttributeInfo = %p\n", FsAttributeInfo); DPRINT("BufferLength %lu\n", *BufferLength); @@ -76,21 +71,28 @@ FsdGetFsAttributeInformation(PDEVICE_EXTENSION DeviceExt, if (*BufferLength < sizeof (FILE_FS_ATTRIBUTE_INFORMATION)) return STATUS_INFO_LENGTH_MISMATCH; + if (DeviceExt->FatInfo.FatType == FAT32) + { + Length = 10; + pName = L"FAT32"; + } + else + { + Length = 6; + pName = L"FAT"; + } + if (*BufferLength < (sizeof(FILE_FS_ATTRIBUTE_INFORMATION) + Length)) return STATUS_BUFFER_OVERFLOW; FsAttributeInfo->FileSystemAttributes = FILE_CASE_PRESERVED_NAMES | FILE_UNICODE_ON_DISK; + FsAttributeInfo->MaximumComponentNameLength = 255; + FsAttributeInfo->FileSystemNameLength = Length; - if (DeviceExt->FatInfo.FatType == FAT32) - { - memcpy(FsAttributeInfo->FileSystemName, L"FAT32", 10); - } - else - { - memcpy(FsAttributeInfo->FileSystemName, L"FAT", 6); - } + + memcpy(FsAttributeInfo->FileSystemName, pName, Length ); DPRINT("Finished FsdGetFsAttributeInformation()\n"); @@ -179,7 +181,8 @@ NTSTATUS VfatQueryVolumeInformation(PVFAT_IRP_CONTEXT IrpContext) DPRINT("VfatQueryVolumeInformation(IrpContext %x)\n", IrpContext); - if (!ExAcquireResourceSharedLite(&((PDEVICE_EXTENSION)IrpContext->DeviceObject->DeviceExtension)->DirResource, IrpContext->Flags & IRPCONTEXT_CANWAIT)) + if (!ExAcquireResourceSharedLite(&((PDEVICE_EXTENSION)IrpContext->DeviceObject->DeviceExtension)->DirResource, + (BOOLEAN)(IrpContext->Flags & IRPCONTEXT_CANWAIT))) { return VfatQueueRequest (IrpContext); } @@ -245,19 +248,21 @@ NTSTATUS VfatSetVolumeInformation(PVFAT_IRP_CONTEXT IrpContext) NTSTATUS Status = STATUS_SUCCESS; PVOID SystemBuffer; ULONG BufferLength; + PEXTENDED_IO_STACK_LOCATION Stack = (PEXTENDED_IO_STACK_LOCATION) IrpContext->Stack; /* PRECONDITION */ assert(IrpContext); DPRINT1("VfatSetVolumeInformation(IrpContext %x)\n", IrpContext); - if (!ExAcquireResourceExclusiveLite(&((PDEVICE_EXTENSION)IrpContext->DeviceObject->DeviceExtension)->DirResource, IrpContext->Flags & IRPCONTEXT_CANWAIT)) + if (!ExAcquireResourceExclusiveLite(&((PDEVICE_EXTENSION)IrpContext->DeviceObject->DeviceExtension)->DirResource, + (BOOLEAN)(IrpContext->Flags & IRPCONTEXT_CANWAIT))) { return VfatQueueRequest (IrpContext); } - FsInformationClass = IrpContext->Stack->Parameters.SetVolume.FsInformationClass; - BufferLength = IrpContext->Stack->Parameters.SetVolume.Length; + FsInformationClass = Stack->Parameters.SetVolume.FsInformationClass; + BufferLength = Stack->Parameters.SetVolume.Length; SystemBuffer = IrpContext->Irp->AssociatedIrp.SystemBuffer; DPRINT1("FsInformationClass %d\n", FsInformationClass); diff --git a/drivers/input/keyboard/.cvsignore b/drivers/input/keyboard/.cvsignore index d1c16f3..87067ee 100644 --- a/drivers/input/keyboard/.cvsignore +++ b/drivers/input/keyboard/.cvsignore @@ -2,3 +2,4 @@ keyboard.coff *.o *.sym *.sys +*.map diff --git a/drivers/input/mouclass/.cvsignore b/drivers/input/mouclass/.cvsignore index 0525565..384cab0 100644 --- a/drivers/input/mouclass/.cvsignore +++ b/drivers/input/mouclass/.cvsignore @@ -2,3 +2,4 @@ mouclass.coff *.o *.sym *.sys +*.map diff --git a/drivers/input/mouclass/mouclass.c b/drivers/input/mouclass/mouclass.c index 849bb99..799d4c4 100644 --- a/drivers/input/mouclass/mouclass.c +++ b/drivers/input/mouclass/mouclass.c @@ -140,7 +140,7 @@ NTSTATUS ConnectMousePortDriver(PDEVICE_OBJECT ClassDeviceObject) PDEVICE_OBJECT PortDeviceObject = NULL; PFILE_OBJECT FileObject = NULL; NTSTATUS status; - UNICODE_STRING PortName = UNICODE_STRING_INITIALIZER(L"\\Device\\Mouse"); + UNICODE_STRING PortName = UNICODE_STRING_INITIALIZER(L"\\Device\\PointerClass0"); IO_STATUS_BLOCK ioStatus; KEVENT event; PIRP irp; @@ -156,7 +156,7 @@ NTSTATUS ConnectMousePortDriver(PDEVICE_OBJECT ClassDeviceObject) if(status != STATUS_SUCCESS) { - DbgPrint("MOUCLASS: Could not connect to mouse port driver\n"); + DPRINT1("MOUCLASS: Could not connect to mouse port driver\n"); return status; } @@ -189,7 +189,7 @@ NTSTATUS ConnectMousePortDriver(PDEVICE_OBJECT ClassDeviceObject) return ioStatus.Status; } -NTSTATUS STDCALL MouseClassDispatch(PDEVICE_OBJECT DeviceObject, PIRP Irp) +NTSTATUS STDCALL_FUNC MouseClassDispatch(PDEVICE_OBJECT DeviceObject, PIRP Irp) { PIO_STACK_LOCATION Stack = IoGetCurrentIrpStackLocation(Irp); NTSTATUS Status; @@ -222,7 +222,7 @@ NTSTATUS STDCALL MouseClassDispatch(PDEVICE_OBJECT DeviceObject, PIRP Irp) break; default: - DbgPrint("NOT IMPLEMENTED\n"); + DPRINT1("NOT IMPLEMENTED\n"); Status = STATUS_NOT_IMPLEMENTED; break; } @@ -270,7 +270,7 @@ VOID MouseClassStartIo(PDEVICE_OBJECT DeviceObject, PIRP Irp) } } -NTSTATUS STDCALL MouseClassInternalDeviceControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp) +NTSTATUS STDCALL_FUNC MouseClassInternalDeviceControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp) { // Retrieve GDI's callback @@ -285,7 +285,7 @@ NTSTATUS STDCALL MouseClassInternalDeviceControl(IN PDEVICE_OBJECT DeviceObject, DeviceExtension->GDIInformation = *((PGDI_INFORMATION)Stack->Parameters.DeviceIoControl.Type3InputBuffer); - DbgPrint("MouseClassInternalDeviceControl() installed GDI callback at %p\n", DeviceExtension->GDIInformation.CallBack); + DPRINT("MouseClassInternalDeviceControl() installed GDI callback at %p\n", DeviceExtension->GDIInformation.CallBack); status = STATUS_SUCCESS; break; @@ -318,7 +318,8 @@ DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath) { PDEVICE_OBJECT DeviceObject; UNICODE_STRING DeviceName = UNICODE_STRING_INITIALIZER(L"\\Device\\MouseClass"); - UNICODE_STRING SymlinkName = UNICODE_STRING_INITIALIZER(L"\\??\\MouseClass"); + UNICODE_STRING SymlinkName = UNICODE_STRING_INITIALIZER(L"\\??\\MouseClass"); NTSTATUS Status; + DriverObject->MajorFunction[IRP_MJ_CREATE] = MouseClassDispatch; // DriverObject->MajorFunction[IRP_MJ_CLOSE] = MouseClassDispatch; @@ -326,16 +327,32 @@ DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath) DriverObject->MajorFunction[IRP_MJ_INTERNAL_DEVICE_CONTROL] = MouseClassInternalDeviceControl; // to get GDI callback // DriverObject->DriverStartIo = MouseClassStartIo; - IoCreateDevice(DriverObject, - sizeof(DEVICE_EXTENSION), - &DeviceName, - FILE_DEVICE_MOUSE, - 0, - TRUE, - &DeviceObject); + Status = IoCreateDevice(DriverObject, + sizeof(DEVICE_EXTENSION), + &DeviceName, + FILE_DEVICE_MOUSE, + 0, + TRUE, + &DeviceObject); + if (!NT_SUCCESS(Status)) + { + return(Status); + } DeviceObject->Flags = DeviceObject->Flags | DO_BUFFERED_IO; - IoCreateSymbolicLink(&SymlinkName, &DeviceName); + Status = IoCreateSymbolicLink(&SymlinkName, &DeviceName); + if (!NT_SUCCESS(Status)) + { + IoDeleteDevice(DeviceObject); + return(Status); + } - return ConnectMousePortDriver(DeviceObject); + Status = ConnectMousePortDriver(DeviceObject); + if (!NT_SUCCESS(Status)) + { + IoDeleteSymbolicLink(&SymlinkName); + IoDeleteDevice(DeviceObject); + return(Status); + } + return(STATUS_SUCCESS); } diff --git a/drivers/input/psaux/.cvsignore b/drivers/input/psaux/.cvsignore index c132aad..11f7ac4 100644 --- a/drivers/input/psaux/.cvsignore +++ b/drivers/input/psaux/.cvsignore @@ -2,3 +2,4 @@ psaux.coff *.o *.sys *.sym +*.map diff --git a/drivers/input/psaux/mouse.c b/drivers/input/psaux/mouse.c index 76b4935..72daea3 100644 --- a/drivers/input/psaux/mouse.c +++ b/drivers/input/psaux/mouse.c @@ -69,6 +69,9 @@ ps2_mouse_handler(PKINTERRUPT Interrupt, PVOID ServiceContext) DeviceExtension = (PDEVICE_EXTENSION)DeviceObject->DeviceExtension; Queue = DeviceExtension->ActiveQueue % 2; + /* Reset the buffer state. */ + mouse_buffer_position = 0; + /* Prevent buffer overflow */ if (DeviceExtension->InputDataCount[Queue] == MOUSE_BUFFER_SIZE) { @@ -76,9 +79,7 @@ ps2_mouse_handler(PKINTERRUPT Interrupt, PVOID ServiceContext) } Input = &DeviceExtension->MouseInputData[Queue] - [DeviceExtension->InputDataCount[Queue]]; - - mouse_buffer_position = 0; + [DeviceExtension->InputDataCount[Queue]]; /* Determine the current state of the buttons */ Input->RawButtons = (mouse_buffer[0] & 1) /* * GPM_B_LEFT */ + @@ -193,7 +194,7 @@ BOOLEAN detect_ps2_port(void) Millisecond_Timeout.QuadPart = 1; - return TRUE; // The rest of this code fails under BOCHs + //return TRUE; // The rest of this code fails under BOCHs /* Put the value 0x5A in the output buffer using the "WriteAuxiliary Device Output Buffer" command (0xD3). Poll the Status Register for a while to see if the value really turns up in the Data Register. If the diff --git a/drivers/input/psaux/psaux.c b/drivers/input/psaux/psaux.c index 5428586..39d5ef0 100644 --- a/drivers/input/psaux/psaux.c +++ b/drivers/input/psaux/psaux.c @@ -147,6 +147,80 @@ VOID PS2MouseIsrDpc(PKDPC Dpc, PDEVICE_OBJECT DeviceObject, PIRP Irp, PVOID Cont DeviceExtension->InputDataCount[Queue] = 0; } +/* Maximum value plus one for \Device\PointerClass* device name */ +#define POINTER_PORTS_MAXIMUM 8 +/* Letter count for POINTER_PORTS_MAXIMUM variable * sizeof(WCHAR) */ +#define SUFFIX_MAXIMUM_SIZE (1 * sizeof(WCHAR)) + +/* This is almost the same routine as in sermouse.c. */ +STATIC PDEVICE_OBJECT +AllocatePointerDevice(PDRIVER_OBJECT DriverObject) +{ + PDEVICE_OBJECT DeviceObject; + UNICODE_STRING DeviceName; + UNICODE_STRING SuffixString; + UNICODE_STRING SymlinkName; + PDEVICE_EXTENSION DeviceExtension; + ULONG Suffix; + NTSTATUS Status; + + /* Allocate buffer for full device name */ + RtlInitUnicodeString(&DeviceName, NULL); + DeviceName.MaximumLength = sizeof(DD_MOUSE_DEVICE_NAME_U) + SUFFIX_MAXIMUM_SIZE + sizeof(UNICODE_NULL); + DeviceName.Buffer = ExAllocatePool(PagedPool, DeviceName.MaximumLength); + RtlAppendUnicodeToString(&DeviceName, DD_MOUSE_DEVICE_NAME_U); + + /* Allocate buffer for device name suffix */ + RtlInitUnicodeString(&SuffixString, NULL); + SuffixString.MaximumLength = SUFFIX_MAXIMUM_SIZE + sizeof(UNICODE_NULL); + SuffixString.Buffer = ExAllocatePool(PagedPool, SuffixString.MaximumLength); + + /* Generate full qualified name with suffix */ + for (Suffix = 0; Suffix < POINTER_PORTS_MAXIMUM; ++Suffix) + { + ANSI_STRING DebugString; + + RtlIntegerToUnicodeString(Suffix, 10, &SuffixString); + RtlAppendUnicodeToString(&DeviceName, SuffixString.Buffer); + // FIXME: this isn't really a serial mouse port driver + Status = IoCreateDevice(DriverObject, sizeof(DEVICE_EXTENSION), + &DeviceName, FILE_DEVICE_SERIAL_MOUSE_PORT, 0, TRUE, &DeviceObject); + RtlUnicodeStringToAnsiString(&DebugString, &DeviceName, TRUE); + DbgPrint(DebugString.Buffer); + DbgPrint("\n"); + RtlFreeAnsiString(&DebugString); + /* Device successfully created, leave the cyclus */ + if (NT_SUCCESS(Status)) + break; + DeviceName.Length -= SuffixString.Length; + } + + ExFreePool(DeviceName.Buffer); + + /* Couldn't create device */ + if (!NT_SUCCESS(Status)) + { + ExFreePool(SuffixString.Buffer); + return NULL; + } + + DeviceObject->Flags = DeviceObject->Flags | DO_BUFFERED_IO; + + /* Create symlink */ + RtlInitUnicodeString(&SymlinkName, NULL); + SymlinkName.MaximumLength = sizeof(L"\\??\\Mouse") + SUFFIX_MAXIMUM_SIZE + sizeof(UNICODE_NULL); + SymlinkName.Buffer = ExAllocatePool(PagedPool, SymlinkName.MaximumLength); + RtlAppendUnicodeToString(&SymlinkName, L"\\??\\Mouse"); + RtlAppendUnicodeToString(&DeviceName, SuffixString.Buffer); + IoCreateSymbolicLink(&SymlinkName, &DeviceName); + ExFreePool(SuffixString.Buffer); + + DeviceExtension = DeviceObject->DeviceExtension; + KeInitializeDpc(&DeviceExtension->IsrDpc, (PKDEFERRED_ROUTINE)PS2MouseIsrDpc, DeviceObject); + + return DeviceObject; +} + NTSTATUS STDCALL DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath) { @@ -162,28 +236,12 @@ DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath) return STATUS_UNSUCCESSFUL; } - DriverObject->MajorFunction[IRP_MJ_CREATE] = PS2MouseDispatch; - DriverObject->MajorFunction[IRP_MJ_CLOSE] = PS2MouseDispatch; - DriverObject->MajorFunction[IRP_MJ_INTERNAL_DEVICE_CONTROL] = PS2MouseInternalDeviceControl; + DriverObject->MajorFunction[IRP_MJ_CREATE] = (PDRIVER_DISPATCH)PS2MouseDispatch; + DriverObject->MajorFunction[IRP_MJ_CLOSE] = (PDRIVER_DISPATCH)PS2MouseDispatch; + DriverObject->MajorFunction[IRP_MJ_INTERNAL_DEVICE_CONTROL] = (PDRIVER_DISPATCH)PS2MouseInternalDeviceControl; DriverObject->DriverStartIo = PS2MouseStartIo; - RtlInitUnicodeStringFromLiteral(&DeviceName, - L"\\Device\\Mouse"); // FIXME: find correct device name - IoCreateDevice(DriverObject, - sizeof(DEVICE_EXTENSION), - &DeviceName, - FILE_DEVICE_SERIAL_MOUSE_PORT, // FIXME: this isn't really a serial mouse port driver - 0, - TRUE, - &DeviceObject); - DeviceObject->Flags = DeviceObject->Flags | DO_BUFFERED_IO; - - RtlInitUnicodeStringFromLiteral(&SymlinkName, - L"\\??\\Mouse"); // FIXME: find correct device name - IoCreateSymbolicLink(&SymlinkName, &DeviceName); - - DeviceExtension = DeviceObject->DeviceExtension; - KeInitializeDpc(&DeviceExtension->IsrDpc, (PKDEFERRED_ROUTINE)PS2MouseIsrDpc, DeviceObject); + DeviceObject = AllocatePointerDevice(DriverObject); mouse_init(DeviceObject); diff --git a/drivers/input/sermouse/.cvsignore b/drivers/input/sermouse/.cvsignore index 67f8da8..24748d3 100644 --- a/drivers/input/sermouse/.cvsignore +++ b/drivers/input/sermouse/.cvsignore @@ -1,2 +1,3 @@ sermouse.coff sermouse.sys.unstripped +*.map diff --git a/drivers/input/sermouse/sermouse.c b/drivers/input/sermouse/sermouse.c index 2772b5d..c1f6356 100644 --- a/drivers/input/sermouse/sermouse.c +++ b/drivers/input/sermouse/sermouse.c @@ -1,484 +1,351 @@ /* - * Mouse driver 0.0.6 + * Serial Mouse driver 0.0.8 * Written by Jason Filby (jasonfilby@yahoo.com) + * And heavily rewritten by Filip Navara (xnavara@volny.cz) * For ReactOS (www.reactos.com) * - * Note: The serial.o driver must be loaded before loading this driver - * - * Known Limitations: - * Only supports Microsoft mice on COM port 1 - * - * Following information obtained from Tomi Engdahl (then@delta.hut.fi), - * http://www.hut.fi/~then/mytexts/mouse.html - * - * Microsoft serial mouse - * - * Serial data parameters: - * 1200bps, 7 databits, 1 stop-bit - * - * Data packet format: - * Data packet is 3 byte packet. It is send to the computer every time mouse - * state changes (mouse moves or keys are pressed/released). - * D7 D6 D5 D4 D3 D2 D1 D0 - * 1. X 1 LB RB Y7 Y6 X7 X6 - * 2. X 0 X5 X4 X3 X2 X1 X0 - * 3. X 0 Y5 Y4 Y3 Y2 Y1 Y0 - * - * Note: The bit marked with X is 0 if the mouse received with 7 databits - * and 2 stop bits format. It is also possible to use 8 databits and 1 stop - * bit format for receiving. In this case X gets value 1. The safest thing - * to get everything working is to use 7 databits and 1 stopbit when - * receiving mouse information (and if you are making mouse then send out - * 7 databits and 2 stop bits). - * The byte marked with 1. is send first, then the others. The bit D6 in - * the first byte is used for syncronizing the software to mouse packets - * if it goes out of sync. - * - * LB is the state of the left button (1 means pressed down) - * RB is the state of the right button (1 means pressed down) - * X7-X0 movement in X direction since last packet (signed byte) - * Y7-Y0 movement in Y direction since last packet (signed byte) - * - * Mouse identification - * When DTR line is toggled, mouse should send one data byte containing - * letter 'M' (ascii 77). - * - * - * Logitech serial mouse - * - * Logitech uses the Microsoft serial mouse protocol in their mouses (for - * example Logitech Pilot mouse and others). The origianal protocol supports - * only two buttons, but logitech as added third button to some of their - * mouse models. To make this possible logitech has made one extension to - * the protocol. - * I have not seen any documentation about the exact documents, but here is - * what I have found out: The information of the third button state is sent - * using one extra byte which is send after the normal packet when needed. - * Value 32 (dec) is sent every time when the center button is pressed down. - * It is also sent every time with the data packet when center button is kept - * down and the mouse data packet is sent for other reasons. When center - * button is released, the mouse sends the normal data packet followed by - * data bythe which has value 0 (dec). As you can see the extra data byte - * is sent only when you mess with the center button. - * - * - * Mouse systems mouse - * - * Serial data parameters: - * 1200bps, 8 databits, 1 stop-bit - * - * Data packet format: - * D7 D6 D5 D4 D3 D2 D1 D0 - * 1. 1 0 0 0 0 LB CB RB - * 2. X7 X6 X5 X4 X3 X2 X1 X0 - * 3. Y7 Y6 Y5 Y4 Y3 Y4 Y1 Y0 - * 4. X7' X6' X5' X4' X3' X2' X1' X0' - * 5. Y7' Y6' Y5' Y4' Y3' Y4' Y1' Y0' - * - * LB is left button state (0 = pressed, 1 = released) - * CB is center button state (0 = pressed, 1 = released) - * RB is right button state (0 = pressed, 1 = released) - * X7-X0 movement in X direction since last packet in signed byte - * format (-128..+127), positive direction right - * Y7-Y0 movement in Y direction since last packet in signed byte - * format (-128..+127), positive direction up - * X7'-X0' movement in X direction since sending of X7-X0 packet in - * signed byte format (-128..+127), positive direction right - * Y7'-Y0' movement in Y direction since sending of Y7-Y0 packet in - * signed byte format (-128..+127), positive direction up - * - * The last two bytes in the packet (bytes 4 and 5) contains information - * about movement data changes which have occured after data bytes 2 and 3 - * have been sent. - * + * Technical information about mouse protocols can be found + * in the file sermouse.txt. */ #include #include -#define MOUSE_IRQ_COM1 4 -#define MOUSE_IRQ_COM2 3 - -#define MOUSE_PORT_COM1 0x3f8 -#define MOUSE_PORT_COM2 0x2f8 - -typedef struct _DEVICE_EXTENSION { - PDEVICE_OBJECT DeviceObject; - ULONG ActiveQueue; - ULONG InputDataCount[2]; - MOUSE_INPUT_DATA MouseInputData[2][MOUSE_BUFFER_SIZE]; - CLASS_INFORMATION ClassInformation; - - PKINTERRUPT MouseInterrupt; - KDPC IsrDpc; -} DEVICE_EXTENSION, *PDEVICE_EXTENSION; - -static unsigned int MOUSE_IRQ = MOUSE_IRQ_COM1; -static unsigned int MOUSE_COM = MOUSE_PORT_COM1; - -static unsigned int bytepos=0, coordinate; -static unsigned char mpacket[3]; -static unsigned char mouse_button1, mouse_button2; +/* + * Compile time options + */ -// Previous button state -static ULONG PreviousButtons = 0; +/* Support for the IOCTL_MOUSE_QUERY_ATTRIBUTES I/O control code */ +#define SERMOUSE_QUERYATTRIBUTES_SUPPORT +/* Check for mouse on COM1? */ +#define SERMOUSE_COM1_SUPPORT +/* Check for mouse on COM2? */ +//#define SERMOUSE_COM2_SUPPORT +/* Create \??\Mouse* symlink for device? */ +#define SERMOUSE_MOUSESYMLINK_SUPPORT -BOOLEAN STDCALL -microsoft_mouse_handler(IN PKINTERRUPT Interrupt, PVOID ServiceContext) -{ - PDEVICE_OBJECT DeviceObject = (PDEVICE_OBJECT)ServiceContext; - PDEVICE_EXTENSION DeviceExtension = DeviceObject->DeviceExtension; - PMOUSE_INPUT_DATA Input; - ULONG Queue, ButtonsDiff; - unsigned int mbyte; - int change_x; - int change_y; - UCHAR InterruptId = READ_PORT_UCHAR((PUCHAR)MOUSE_COM + 2); - - /* Is the interrupt for us? */ - if (0 != (InterruptId & 0x01)) - { - return FALSE; - } - - /* Not a Receive Data Available interrupt? */ - if (0 == (InterruptId & 0x04)) - { - return TRUE; - } - - /* Read all available data and process */ - while (0 != (READ_PORT_UCHAR((PUCHAR)MOUSE_COM + 5) & 0x01)) - { - mbyte = READ_PORT_UCHAR((PUCHAR)MOUSE_COM); +/* + * Definitions + */ - /* Synchronize */ - if (0x40 == (mbyte & 0x40)) - bytepos=0; +#define MOUSE_IRQ_COM1 4 +#define MOUSE_IRQ_COM2 3 +#define MOUSE_PORT_COM1 0x3f8 +#define MOUSE_PORT_COM2 0x2f8 + +/* Maximum value plus one for \Device\PointerClass* device name */ +#define POINTER_PORTS_MAXIMUM 8 +/* Letter count for POINTER_PORTS_MAXIMUM variable * sizeof(WCHAR) */ +#define SUFFIX_MAXIMUM_SIZE (1 * sizeof(WCHAR)) + +/* No Mouse */ +#define MOUSE_TYPE_NONE 0 +/* Microsoft Mouse with 2 buttons */ +#define MOUSE_TYPE_MICROSOFT 1 +/* Logitech Mouse with 3 buttons */ +#define MOUSE_TYPE_LOGITECH 2 +/* Microsoft Wheel Mouse (aka Z Mouse) */ +#define MOUSE_TYPE_WHEELZ 3 +/* Mouse Systems Mouse */ +#define MOUSE_TYPE_MOUSESYSTEMS 4 + +/* Size for packet buffer used in interrupt routine */ +#define PACKET_BUFFER_SIZE 4 + +/* Hardware byte mask for left button */ +#define LEFT_BUTTON_MASK 0x20 +/* Hardware to Microsoft specific code byte shift for left button */ +#define LEFT_BUTTON_SHIFT 5 +/* Hardware byte mask for right button */ +#define RIGHT_BUTTON_MASK 0x10 +/* Hardware to Microsoft specific code byte shift for right button */ +#define RIGHT_BUTTON_SHIFT 3 +/* Hardware byte mask for middle button */ +#define MIDDLE_BUTTON_MASK 0x20 +/* Hardware to Microsoft specific code byte shift for middle button */ +#define MIDDLE_BUTTON_SHIFT 3 + +/* Microsoft byte mask for left button */ +#define MOUSE_BUTTON_LEFT 0x01 +/* Microsoft byte mask for right button */ +#define MOUSE_BUTTON_RIGHT 0x02 +/* Microsoft byte mask for middle button */ +#define MOUSE_BUTTON_MIDDLE 0x04 - mpacket[bytepos] = (mbyte & 0x7f); - bytepos++; +/* + * Structures + */ - /* Process packet if complete */ - if (3 == bytepos) - { - /* Set local variables for DeviceObject and DeviceExtension */ - DeviceObject = (PDEVICE_OBJECT)ServiceContext; - DeviceExtension = (PDEVICE_EXTENSION)DeviceObject->DeviceExtension; - Queue = DeviceExtension->ActiveQueue % 2; - - /* Prevent buffer overflow */ - if (DeviceExtension->InputDataCount[Queue] == MOUSE_BUFFER_SIZE) - { - continue; - } - - Input = &DeviceExtension->MouseInputData[Queue] - [DeviceExtension->InputDataCount[Queue]]; - - /* Retrieve change in x and y from packet */ - change_x = (int)(signed char)((mpacket[0] & 0x03) << 6) + mpacket[1]; - change_y = (int)(signed char)((mpacket[0] & 0x0c) << 4) + mpacket[2]; - - /* Some mice need this */ - if (1 == coordinate) - { - change_x-=128; - change_y-=128; - } - -#if 0 - /* Change to signed */ - if (128 <= change_x) - { - change_x = change_x - 256; - } - if (128 <= change_y) - { - change_y = change_y - 256; - } +typedef struct _DEVICE_EXTENSION { + PDEVICE_OBJECT DeviceObject; + ULONG ActiveQueue; + ULONG InputDataCount[2]; + MOUSE_INPUT_DATA MouseInputData[2][MOUSE_BUFFER_SIZE]; + CLASS_INFORMATION ClassInformation; + PKINTERRUPT MouseInterrupt; + KDPC IsrDpc; + ULONG MousePort; + ULONG MouseType; + UCHAR PacketBuffer[PACKET_BUFFER_SIZE]; + ULONG PacketBufferPosition; + ULONG PreviousButtons; +#ifdef SERMOUSE_QUERYATTRIBUTES_SUPPORT + MOUSE_ATTRIBUTES AttributesInformation; #endif +} DEVICE_EXTENSION, *PDEVICE_EXTENSION; - Input->LastX = 2 * change_x; - Input->LastY = - 3 * change_y; - - /* Retrieve mouse button status from packet */ - mouse_button1 = mpacket[0] & 0x20; - mouse_button2 = mpacket[0] & 0x10; - - /* Determine the current state of the buttons */ - Input->RawButtons = mouse_button1 + mouse_button2; - - /* Determine ButtonFlags */ - Input->ButtonFlags = 0; - ButtonsDiff = PreviousButtons ^ Input->RawButtons; +/* + * Functions + */ - if (0 != (ButtonsDiff & 0x20)) - { - if (0 != (Input->RawButtons & 0x20)) - { - Input->ButtonFlags |= MOUSE_BUTTON_1_DOWN; - } - else +void ClearMouse(ULONG Port) +{ + /* Waits until the mouse calms down but also quits out after a while + * in case some destructive user wants to keep moving the mouse + * before we're done */ + unsigned int Restarts = 0, i; + for (i = 0; i < 60000; i++) { - Input->ButtonFlags |= MOUSE_BUTTON_1_UP; + unsigned Temp = READ_PORT_UCHAR((PUCHAR)Port); + if (Temp != 0) + { + Restarts++; + if (Restarts < 300000) + i = 0; + else + i = 60000; + } } - } +} - if (0 != (ButtonsDiff & 0x10)) - { - if (0 != (Input->RawButtons & 0x10)) +BOOLEAN STDCALL +SerialMouseInterruptService(IN PKINTERRUPT Interrupt, PVOID ServiceContext) +{ + PDEVICE_OBJECT DeviceObject = (PDEVICE_OBJECT)ServiceContext; + PDEVICE_EXTENSION DeviceExtension = (PDEVICE_EXTENSION)DeviceObject->DeviceExtension; + UCHAR *PacketBuffer = DeviceExtension->PacketBuffer; + ULONG MousePort = DeviceExtension->MousePort; + UCHAR InterruptId = READ_PORT_UCHAR((PUCHAR)MousePort + 2); + UCHAR RecievedByte; + ULONG Queue; + PMOUSE_INPUT_DATA Input; + ULONG ButtonsDifference; + + /* Is the interrupt for us? */ + if ((InterruptId & 0x01) == 0x01) { - Input->ButtonFlags |= MOUSE_BUTTON_2_DOWN; + return FALSE; } - else + + /* Not a Receive Data Available interrupt? */ + if ((InterruptId & 0x04) == 0) { - Input->ButtonFlags |= MOUSE_BUTTON_2_UP; + return TRUE; } - } - bytepos=0; - - /* Send the Input data to the Mouse Class driver */ - DeviceExtension->InputDataCount[Queue]++; - KeInsertQueueDpc(&DeviceExtension->IsrDpc, DeviceObject->CurrentIrp, NULL); - - /* Copy RawButtons to Previous Buttons for Input */ - PreviousButtons = Input->RawButtons; - } - } - - return TRUE; -} - -void InitializeMouseHardware(unsigned int mtype) -{ - WRITE_PORT_UCHAR((PUCHAR)MOUSE_COM + 3, 0x80); /* set DLAB on */ - WRITE_PORT_UCHAR((PUCHAR)MOUSE_COM, 0x60); /* speed LO byte */ - WRITE_PORT_UCHAR((PUCHAR)MOUSE_COM + 1, 0); /* speed HI byte */ - WRITE_PORT_UCHAR((PUCHAR)MOUSE_COM + 3, mtype); /* 2=MS Mouse; 3=Mouse systems mouse */ - WRITE_PORT_UCHAR((PUCHAR)MOUSE_COM + 1, 0); /* set comm and DLAB to 0 */ - WRITE_PORT_UCHAR((PUCHAR)MOUSE_COM + 4, 0x09); /* DR int enable */ - - (void) READ_PORT_UCHAR((PUCHAR)MOUSE_COM+5); /* clear error bits */ -} - -int DetMicrosoft(void) -{ - char tmp, ind; - int buttons=0, i, timeout=250; - LARGE_INTEGER Timeout; - - WRITE_PORT_UCHAR((PUCHAR)MOUSE_COM+4, 0x0b); - tmp=READ_PORT_UCHAR((PUCHAR)MOUSE_COM); - - /* Check the first four bytes for signs that this is an MS mouse */ - for(i=0; i<4; i++) { - while(((READ_PORT_UCHAR((PUCHAR)MOUSE_COM+5) & 1)==0) && (timeout>0)) - { - Timeout.QuadPart = 1; - KeDelayExecutionThread (KernelMode, FALSE, &Timeout); - timeout--; - } - ind=READ_PORT_UCHAR((PUCHAR)MOUSE_COM); - if(ind==0x33) buttons=3; - if(ind==0x4d) buttons=2; - } - - return buttons; -} - -int CheckMouseType(unsigned int mtype) -{ - unsigned int retval=0; - - InitializeMouseHardware(mtype); - if(mtype==2) retval=DetMicrosoft(); - if(mtype==3) { - WRITE_PORT_UCHAR((PUCHAR)MOUSE_COM+4, 11); - retval=3; - } - WRITE_PORT_UCHAR((PUCHAR)MOUSE_COM+1, 1); - - return retval; -} + /* Read all available data and process */ + while ((READ_PORT_UCHAR((PUCHAR)MousePort + 5) & 0x01) != 0) + { + RecievedByte = READ_PORT_UCHAR((PUCHAR)MousePort); -void ClearMouse(void) -{ - /* Waits until the mouse calms down but also quits out after a while - * in case some destructive user wants to keep moving the mouse - * before we're done */ - - unsigned int restarts=0, i; - for (i=0; i<60000; i++) - { - unsigned temp=READ_PORT_UCHAR((PUCHAR)MOUSE_COM); - if(temp!=0) { - restarts++; - if(restarts<300000) { - i=0; - } else - { - i=60000; - } - } - } -} + /* Synchronize */ + if ((RecievedByte & 0x40) == 0x40) + DeviceExtension->PacketBufferPosition = 0; -BOOLEAN InitializeMouse(PDEVICE_OBJECT DeviceObject) -{ - int mbuttons=0, gotmouse=0; - PDEVICE_EXTENSION DeviceExtension = DeviceObject->DeviceExtension; - ULONG MappedIrq; - KIRQL Dirql; - KAFFINITY Affinity; - - /* Check for Microsoft mouse (2 buttons) */ - if(CheckMouseType(2)!=0) - { - gotmouse=1; - DbgPrint("Microsoft Mouse Detected\n"); - ClearMouse(); - coordinate=0; - } - - /* Check for Microsoft Systems mouse (3 buttons) */ - if(gotmouse==0) { - if(CheckMouseType(3)!=0) - { - gotmouse=1; - DbgPrint("Mouse Systems Mouse Detected\n"); - ClearMouse(); - coordinate=1; - } - } + PacketBuffer[DeviceExtension->PacketBufferPosition] = + (RecievedByte & 0x7f); + ++DeviceExtension->PacketBufferPosition; - if(gotmouse==0) return FALSE; + /* Process packet if complete */ + if (DeviceExtension->PacketBufferPosition >= 3) + { + Queue = DeviceExtension->ActiveQueue % 2; + + /* Prevent buffer overflow */ + if (DeviceExtension->InputDataCount[Queue] == MOUSE_BUFFER_SIZE) + continue; - DeviceExtension->ActiveQueue = 0; - MappedIrq = HalGetInterruptVector(Internal, 0, 0, MOUSE_IRQ, &Dirql, &Affinity); + Input = &DeviceExtension->MouseInputData[Queue][DeviceExtension->InputDataCount[Queue]]; - IoConnectInterrupt(&DeviceExtension->MouseInterrupt, microsoft_mouse_handler, - DeviceObject, NULL, MappedIrq, Dirql, Dirql, 0, FALSE, - Affinity, FALSE); + if (DeviceExtension->PacketBufferPosition == 3) + { + /* Retrieve change in x and y from packet */ + Input->LastX = (signed char)(PacketBuffer[1] | ((PacketBuffer[0] & 0x03) << 6)); + Input->LastY = (signed char)(PacketBuffer[2] | ((PacketBuffer[0] & 0x0c) << 4)); + + /* Determine the current state of the buttons */ + Input->RawButtons = (DeviceExtension->PreviousButtons & MOUSE_BUTTON_MIDDLE) | + ((UCHAR)(PacketBuffer[0] & LEFT_BUTTON_MASK) >> LEFT_BUTTON_SHIFT) | + ((UCHAR)(PacketBuffer[0] & RIGHT_BUTTON_MASK) >> RIGHT_BUTTON_SHIFT); + } else + if (DeviceExtension->PacketBufferPosition == 4) + { + DeviceExtension->PacketBufferPosition = 0; + /* If middle button state changed than report event */ + if (((UCHAR)(PacketBuffer[3] & MIDDLE_BUTTON_MASK) >> MIDDLE_BUTTON_SHIFT) ^ + (DeviceExtension->PreviousButtons & MOUSE_BUTTON_MIDDLE)) + { + Input->RawButtons ^= MOUSE_BUTTON_MIDDLE; + Input->LastX = 0; + Input->LastY = 0; + } + else + { + continue; + } + } + + /* Determine ButtonFlags */ + Input->ButtonFlags = 0; + ButtonsDifference = DeviceExtension->PreviousButtons ^ Input->RawButtons; + + if (ButtonsDifference != 0) + { + if (ButtonsDifference & MOUSE_BUTTON_LEFT) + { + if (Input->RawButtons & MOUSE_BUTTON_LEFT) + Input->ButtonFlags |= MOUSE_LEFT_BUTTON_DOWN; + else + Input->ButtonFlags |= MOUSE_LEFT_BUTTON_UP; + } + if (ButtonsDifference & MOUSE_BUTTON_RIGHT) + { + if (Input->RawButtons & MOUSE_BUTTON_RIGHT) + Input->ButtonFlags |= MOUSE_RIGHT_BUTTON_DOWN; + else + Input->ButtonFlags |= MOUSE_RIGHT_BUTTON_UP; + } + if (ButtonsDifference & MOUSE_BUTTON_MIDDLE) + { + if (Input->RawButtons & MOUSE_BUTTON_MIDDLE) + Input->ButtonFlags |= MOUSE_MIDDLE_BUTTON_DOWN; + else + Input->ButtonFlags |= MOUSE_MIDDLE_BUTTON_UP; + } + } + + /* Send the Input data to the Mouse Class driver */ + DeviceExtension->InputDataCount[Queue]++; + KeInsertQueueDpc(&DeviceExtension->IsrDpc, DeviceObject->CurrentIrp, NULL); + + /* Copy RawButtons to Previous Buttons for Input */ + DeviceExtension->PreviousButtons = Input->RawButtons; + } + } - return TRUE; + return TRUE; } -VOID SerialMouseInitializeDataQueue(PVOID Context) +VOID +SerialMouseInitializeDataQueue(PVOID Context) { } BOOLEAN STDCALL MouseSynchronizeRoutine(PVOID Context) { - PIRP Irp = (PIRP)Context; - PMOUSE_INPUT_DATA rec = (PMOUSE_INPUT_DATA)Irp->AssociatedIrp.SystemBuffer; - PIO_STACK_LOCATION stk = IoGetCurrentIrpStackLocation(Irp); - ULONG NrToRead = stk->Parameters.Read.Length/sizeof(MOUSE_INPUT_DATA); - int i; - - if ((stk->Parameters.Read.Length/sizeof(MOUSE_INPUT_DATA))==NrToRead) - { - return(TRUE); - } - - return(FALSE); + return TRUE; } VOID STDCALL SerialMouseStartIo(PDEVICE_OBJECT DeviceObject, PIRP Irp) { - PDEVICE_EXTENSION DeviceExtension = DeviceObject->DeviceExtension; + PDEVICE_EXTENSION DeviceExtension = DeviceObject->DeviceExtension; - if (KeSynchronizeExecution(DeviceExtension->MouseInterrupt, MouseSynchronizeRoutine, Irp)) - { - Irp->IoStatus.Status = STATUS_SUCCESS; - Irp->IoStatus.Information = 0; - IoCompleteRequest(Irp, IO_NO_INCREMENT); - IoStartNextPacket(DeviceObject, FALSE); - } + if (KeSynchronizeExecution(DeviceExtension->MouseInterrupt, MouseSynchronizeRoutine, Irp)) + { + Irp->IoStatus.Status = STATUS_SUCCESS; + Irp->IoStatus.Information = 0; + IoCompleteRequest(Irp, IO_NO_INCREMENT); + IoStartNextPacket(DeviceObject, FALSE); + } } NTSTATUS STDCALL SerialMouseInternalDeviceControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp) { - PDEVICE_EXTENSION DeviceExtension = DeviceObject->DeviceExtension; - PIO_STACK_LOCATION Stack = IoGetCurrentIrpStackLocation(Irp); - NTSTATUS status; + PDEVICE_EXTENSION DeviceExtension = DeviceObject->DeviceExtension; + PIO_STACK_LOCATION Stack = IoGetCurrentIrpStackLocation(Irp); + NTSTATUS Status; - switch(Stack->Parameters.DeviceIoControl.IoControlCode) - { - case IOCTL_INTERNAL_MOUSE_CONNECT: - - DeviceExtension->ClassInformation = - *((PCLASS_INFORMATION)Stack->Parameters.DeviceIoControl.Type3InputBuffer); - - /* Reinitialize the port input data queue synchronously */ - KeSynchronizeExecution(DeviceExtension->MouseInterrupt, - (PKSYNCHRONIZE_ROUTINE)SerialMouseInitializeDataQueue, DeviceExtension); - - status = STATUS_SUCCESS; - break; + switch (Stack->Parameters.DeviceIoControl.IoControlCode) + { + case IOCTL_INTERNAL_MOUSE_CONNECT: + DeviceExtension->ClassInformation = + *((PCLASS_INFORMATION)Stack->Parameters.DeviceIoControl.Type3InputBuffer); + + /* Reinitialize the port input data queue synchronously */ + KeSynchronizeExecution(DeviceExtension->MouseInterrupt, + (PKSYNCHRONIZE_ROUTINE)SerialMouseInitializeDataQueue, + DeviceExtension); + + Status = STATUS_SUCCESS; + break; + +#ifdef SERMOUSE_QUERYATTRIBUTES_SUPPORT + case IOCTL_MOUSE_QUERY_ATTRIBUTES: + if (Stack->Parameters.DeviceIoControl.OutputBufferLength >= sizeof(MOUSE_ATTRIBUTES)) + { + *(PMOUSE_ATTRIBUTES)Irp->AssociatedIrp.SystemBuffer = + DeviceExtension->AttributesInformation; + Irp->IoStatus.Information = sizeof(MOUSE_ATTRIBUTES); + Status = STATUS_SUCCESS; + } else { + Status = STATUS_BUFFER_TOO_SMALL; + } + break; +#endif - default: - status = STATUS_INVALID_DEVICE_REQUEST; - break; - } + default: + Status = STATUS_INVALID_DEVICE_REQUEST; + break; + } - Irp->IoStatus.Status = status; - if (status == STATUS_PENDING) { - IoMarkIrpPending(Irp); - IoStartPacket(DeviceObject, Irp, NULL, NULL); - } else { - IoCompleteRequest(Irp, IO_NO_INCREMENT); - } + Irp->IoStatus.Status = Status; + if (Status == STATUS_PENDING) + { + IoMarkIrpPending(Irp); + IoStartPacket(DeviceObject, Irp, NULL, NULL); + } + else + { + IoCompleteRequest(Irp, IO_NO_INCREMENT); + } - return status; + return Status; } NTSTATUS STDCALL SerialMouseDispatch(PDEVICE_OBJECT DeviceObject, PIRP Irp) { - PIO_STACK_LOCATION stk = IoGetCurrentIrpStackLocation(Irp); - NTSTATUS Status; - static BOOLEAN AlreadyOpened = FALSE; - - switch (stk->MajorFunction) - { - case IRP_MJ_CREATE: - if (AlreadyOpened == TRUE) - { - Status = STATUS_SUCCESS; - } + PIO_STACK_LOCATION Stack = IoGetCurrentIrpStackLocation(Irp); + NTSTATUS Status; + + switch (Stack->MajorFunction) + { + case IRP_MJ_CREATE: + case IRP_MJ_CLOSE: + Status = STATUS_SUCCESS; + break; + + default: + DbgPrint("NOT IMPLEMENTED\n"); + Status = STATUS_NOT_IMPLEMENTED; + break; + } + + if (Status == STATUS_PENDING) + { + IoMarkIrpPending(Irp); + } else - { - Status = STATUS_SUCCESS; - AlreadyOpened = TRUE; - } - break; - - case IRP_MJ_CLOSE: - Status = STATUS_SUCCESS; - break; - - default: - DbgPrint("NOT IMPLEMENTED\n"); - Status = STATUS_NOT_IMPLEMENTED; - break; - } - - if (Status==STATUS_PENDING) - { - IoMarkIrpPending(Irp); - } - else - { - Irp->IoStatus.Status = Status; - Irp->IoStatus.Information = 0; - IoCompleteRequest(Irp,IO_NO_INCREMENT); - } - return(Status); + { + Irp->IoStatus.Status = Status; + Irp->IoStatus.Information = 0; + IoCompleteRequest(Irp, IO_NO_INCREMENT); + } + + return Status; } VOID SerialMouseIsrDpc(PKDPC Dpc, PDEVICE_OBJECT DeviceObject, PIRP Irp, PVOID Context) @@ -497,45 +364,245 @@ VOID SerialMouseIsrDpc(PKDPC Dpc, PDEVICE_OBJECT DeviceObject, PIRP Irp, PVOID C DeviceExtension->InputDataCount[Queue] = 0; } +void InitializeSerialPort(ULONG Port, unsigned int LineControl) +{ + WRITE_PORT_UCHAR((PUCHAR)Port + 3, 0x80); /* set DLAB on */ + WRITE_PORT_UCHAR((PUCHAR)Port, 0x60); /* speed LO byte */ + WRITE_PORT_UCHAR((PUCHAR)Port + 1, 0); /* speed HI byte */ + WRITE_PORT_UCHAR((PUCHAR)Port + 3, LineControl); + WRITE_PORT_UCHAR((PUCHAR)Port + 1, 0); /* set comm and DLAB to 0 */ + WRITE_PORT_UCHAR((PUCHAR)Port + 4, 0x09); /* DR int enable */ + (void) READ_PORT_UCHAR((PUCHAR)Port + 5); /* clear error bits */ +} + +ULONG DetectMicrosoftMouse(ULONG Port) +{ + CHAR Buffer[4]; + ULONG i; + ULONG TimeOut = 250; + UCHAR LineControl; + + /* Shutdown mouse or something like that */ + LineControl = READ_PORT_UCHAR((PUCHAR)Port + 4); + WRITE_PORT_UCHAR((PUCHAR)Port + 4, (LineControl & ~0x02) | 0x01); + KeStallExecutionProcessor(500000); + + /* Clear buffer */ + while (READ_PORT_UCHAR((PUCHAR)Port + 5) & 0x01) + (void)READ_PORT_UCHAR((PUCHAR)Port); + + /* Send modem control with 'Data Terminal Ready', 'Request To Send' and + * 'Output Line 2' message. This enables mouse to identify. */ + WRITE_PORT_UCHAR((PUCHAR)Port + 4, 0x0b); + /* Wait 10 milliseconds for the mouse getting ready */ + KeStallExecutionProcessor(10000); + + /* Read first four bytes, which contains Microsoft Mouse signs */ + for (i = 0; i < 4; i++) + { + while (((READ_PORT_UCHAR((PUCHAR)Port + 5) & 1) == 0) && (TimeOut > 0)) + { + KeStallExecutionProcessor(1000); + --TimeOut; + if (TimeOut == 0) + return MOUSE_TYPE_NONE; + } + Buffer[i] = READ_PORT_UCHAR((PUCHAR)Port); + } + + /* Check that four bytes for signs */ + for (i = 0; i < 4; ++i) + { + /* Sign for Microsoft Ballpoint */ + if (Buffer[i] == 'B') + { + DbgPrint("Microsoft Ballpoint device detected"); + DbgPrint("THIS DEVICE IS NOT SUPPORTED, YET"); + return MOUSE_TYPE_NONE; + } else + /* Sign for Microsoft Mouse protocol followed by button specifier */ + if (Buffer[i] == 'M') + { + if (i == 3) + { + /* Overflow Error */ + return MOUSE_TYPE_NONE; + } + switch (Buffer[i + 1]) + { + case '3': + DbgPrint("Microsoft Mouse with 3-buttons detected\n"); + return MOUSE_TYPE_LOGITECH; + case 'Z': + DbgPrint("Microsoft Wheel Mouse detected\n"); + return MOUSE_TYPE_WHEELZ; + /* case '2': */ + default: + DbgPrint("Microsoft Mouse with 2-buttons detected\n"); + return MOUSE_TYPE_MICROSOFT; + } + } + } + + return MOUSE_TYPE_NONE; +} + +PDEVICE_OBJECT +AllocatePointerDevice(PDRIVER_OBJECT DriverObject) +{ + PDEVICE_OBJECT DeviceObject; + UNICODE_STRING DeviceName; + UNICODE_STRING SuffixString; + UNICODE_STRING SymlinkName; + PDEVICE_EXTENSION DeviceExtension; + ULONG Suffix; + NTSTATUS Status; + + /* Allocate buffer for full device name */ + RtlInitUnicodeString(&DeviceName, NULL); + DeviceName.MaximumLength = sizeof(DD_MOUSE_DEVICE_NAME_U) + SUFFIX_MAXIMUM_SIZE + sizeof(UNICODE_NULL); + DeviceName.Buffer = ExAllocatePool(PagedPool, DeviceName.MaximumLength); + RtlAppendUnicodeToString(&DeviceName, DD_MOUSE_DEVICE_NAME_U); + + /* Allocate buffer for device name suffix */ + RtlInitUnicodeString(&SuffixString, NULL); + SuffixString.MaximumLength = SUFFIX_MAXIMUM_SIZE + sizeof(UNICODE_NULL); + SuffixString.Buffer = ExAllocatePool(PagedPool, SuffixString.MaximumLength); + + /* Generate full qualified name with suffix */ + for (Suffix = 0; Suffix < POINTER_PORTS_MAXIMUM; ++Suffix) + { + RtlIntegerToUnicodeString(Suffix, 10, &SuffixString); + RtlAppendUnicodeToString(&DeviceName, SuffixString.Buffer); + Status = IoCreateDevice(DriverObject, sizeof(DEVICE_EXTENSION), + &DeviceName, FILE_DEVICE_SERIAL_MOUSE_PORT, 0, TRUE, &DeviceObject); + /* Device successfully created, leave the cyclus */ + if (NT_SUCCESS(Status)) + break; + DeviceName.Length -= SuffixString.Length; + } + + ExFreePool(DeviceName.Buffer); + + /* Couldn't create device */ + if (!NT_SUCCESS(Status)) + { + ExFreePool(SuffixString.Buffer); + return NULL; + } + + DeviceObject->Flags = DeviceObject->Flags | DO_BUFFERED_IO; + +#ifdef SERMOUSE_MOUSESYMLINK_SUPPORT + /* Create symlink */ + /* FIXME: Why? FiN 20/08/2003 */ + RtlInitUnicodeString(&SymlinkName, NULL); + SymlinkName.MaximumLength = sizeof(L"\\??\\Mouse") + SUFFIX_MAXIMUM_SIZE + sizeof(UNICODE_NULL); + SymlinkName.Buffer = ExAllocatePool(PagedPool, SymlinkName.MaximumLength); + RtlAppendUnicodeToString(&SymlinkName, L"\\??\\Mouse"); + RtlAppendUnicodeToString(&DeviceName, SuffixString.Buffer); + IoCreateSymbolicLink(&SymlinkName, &DeviceName); +#endif + ExFreePool(SuffixString.Buffer); + + DeviceExtension = DeviceObject->DeviceExtension; + KeInitializeDpc(&DeviceExtension->IsrDpc, (PKDEFERRED_ROUTINE)SerialMouseIsrDpc, DeviceObject); + + return DeviceObject; +} + +BOOLEAN +InitializeMouse(ULONG Port, ULONG Irq, PDRIVER_OBJECT DriverObject) +{ + PDEVICE_EXTENSION DeviceExtension; + PDEVICE_OBJECT DeviceObject; + ULONG MappedIrq; + KIRQL Dirql; + KAFFINITY Affinity; + ULONG MouseType; + + /* Try to detect mouse on specified port */ + InitializeSerialPort(Port, 2); + MouseType = DetectMicrosoftMouse(Port); + + /* Enable interrupts */ + WRITE_PORT_UCHAR((PUCHAR)(Port) + 1, 1); + ClearMouse(Port); + + /* No mouse, no need to continue */ + if (MouseType == MOUSE_TYPE_NONE) + return FALSE; + + /* Allocate new device */ + DeviceObject = AllocatePointerDevice(DriverObject); + if (!DeviceObject) + { + DbgPrint("Oops, couldn't creat device object.\n"); + return FALSE; + } + DeviceExtension = DeviceObject->DeviceExtension; + + /* Setup device extension structure */ + DeviceExtension->ActiveQueue = 0; + DeviceExtension->MouseType = MouseType; + DeviceExtension->MousePort = Port; + DeviceExtension->PacketBufferPosition = 0; + DeviceExtension->PreviousButtons = 0; +#ifdef SERMOUSE_QUERYATTRIBUTES_SUPPORT + switch (MouseType) + { + case MOUSE_TYPE_MICROSOFT: + DeviceExtension->AttributesInformation.MouseIdentifier = MOUSE_SERIAL_HARDWARE; + DeviceExtension->AttributesInformation.NumberOfButtons = 2; + break; + case MOUSE_TYPE_LOGITECH: + DeviceExtension->AttributesInformation.MouseIdentifier = MOUSE_SERIAL_HARDWARE; + DeviceExtension->AttributesInformation.NumberOfButtons = 3; + break; + case MOUSE_TYPE_WHEELZ: + DeviceExtension->AttributesInformation.MouseIdentifier = WHEELMOUSE_SERIAL_HARDWARE; + DeviceExtension->AttributesInformation.NumberOfButtons = 3; + break; + }; + DeviceExtension->AttributesInformation.SampleRate = 40; + DeviceExtension->AttributesInformation.InputDataQueueLength = MOUSE_BUFFER_SIZE; +#endif + + MappedIrq = HalGetInterruptVector(Internal, 0, 0, Irq, &Dirql, &Affinity); + + IoConnectInterrupt( + &DeviceExtension->MouseInterrupt, SerialMouseInterruptService, + DeviceObject, NULL, MappedIrq, Dirql, Dirql, 0, FALSE, + Affinity, FALSE); + + return TRUE; +} + NTSTATUS STDCALL DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath) { - PDEVICE_OBJECT DeviceObject; - UNICODE_STRING DeviceName; - UNICODE_STRING SymlinkName; - PDEVICE_EXTENSION DeviceExtension; - - DriverObject->MajorFunction[IRP_MJ_CREATE] = SerialMouseDispatch; - DriverObject->MajorFunction[IRP_MJ_CLOSE] = SerialMouseDispatch; - DriverObject->MajorFunction[IRP_MJ_INTERNAL_DEVICE_CONTROL] = SerialMouseInternalDeviceControl; - DriverObject->DriverStartIo = SerialMouseStartIo; - - RtlInitUnicodeStringFromLiteral(&DeviceName, - L"\\Device\\Mouse"); /* FIXME: find correct device name */ - IoCreateDevice(DriverObject, - sizeof(DEVICE_EXTENSION), - &DeviceName, - FILE_DEVICE_SERIAL_MOUSE_PORT, - 0, - TRUE, - &DeviceObject); - DeviceObject->Flags = DeviceObject->Flags | DO_BUFFERED_IO; - - if(InitializeMouse(DeviceObject) == TRUE) - { - DbgPrint("Serial Mouse Driver 0.0.5\n"); - } else { - IoDeleteDevice(DeviceObject); - DbgPrint("Serial mouse not found.\n"); - return STATUS_UNSUCCESSFUL; - } - - RtlInitUnicodeStringFromLiteral(&SymlinkName, - L"\\??\\Mouse"); /* FIXME: find correct device name */ - IoCreateSymbolicLink(&SymlinkName, &DeviceName); - - DeviceExtension = DeviceObject->DeviceExtension; - KeInitializeDpc(&DeviceExtension->IsrDpc, (PKDEFERRED_ROUTINE)SerialMouseIsrDpc, DeviceObject); - - return(STATUS_SUCCESS); + BOOL MouseFound = FALSE; + + DbgPrint("Serial Mouse Driver 0.0.8\n"); +#ifdef SERMOUSE_COM1_SUPPORT + DbgPrint("Trying to find mouse on COM1\n"); + MouseFound |= InitializeMouse(MOUSE_PORT_COM1, MOUSE_IRQ_COM1, DriverObject); +#endif +#ifdef SERMOUSE_COM2_SUPPORT + DbgPrint("Trying to find mouse on COM2\n"); + MouseFound |= InitializeMouse(MOUSE_PORT_COM2, MOUSE_IRQ_COM2, DriverObject); +#endif + + if (!MouseFound) + { + DbgPrint("No serial mouse found.\n"); + return STATUS_UNSUCCESSFUL; + } + + DriverObject->MajorFunction[IRP_MJ_CREATE] = (PDRIVER_DISPATCH)SerialMouseDispatch; + DriverObject->MajorFunction[IRP_MJ_CLOSE] = (PDRIVER_DISPATCH)SerialMouseDispatch; + DriverObject->MajorFunction[IRP_MJ_INTERNAL_DEVICE_CONTROL] = (PDRIVER_DISPATCH)SerialMouseInternalDeviceControl; + DriverObject->DriverStartIo = SerialMouseStartIo; + + return STATUS_SUCCESS; } diff --git a/drivers/input/sermouse/sermouse.rc b/drivers/input/sermouse/sermouse.rc index 15e98a6..0585d52 100644 --- a/drivers/input/sermouse/sermouse.rc +++ b/drivers/input/sermouse/sermouse.rc @@ -23,7 +23,7 @@ BEGIN BEGIN VALUE "CompanyName", RES_STR_COMPANY_NAME VALUE "FileDescription", "Serial Mouse Device Driver\0" - VALUE "FileVersion", "0.0.1\0" + VALUE "FileVersion", "0.0.8\0" VALUE "InternalName", "sermouse\0" VALUE "LegalCopyright", RES_STR_LEGAL_COPYRIGHT VALUE "OriginalFilename", "sermouse.sys\0" diff --git a/drivers/input/sermouse/sermouse.txt b/drivers/input/sermouse/sermouse.txt new file mode 100644 index 0000000..1de8de7 --- /dev/null +++ b/drivers/input/sermouse/sermouse.txt @@ -0,0 +1,82 @@ + Following information obtained from Tomi Engdahl (then@delta.hut.fi), + http://www.hut.fi/~then/mytexts/mouse.html + + Microsoft serial mouse + + Serial data parameters: + 1200bps, 7 databits, 1 stop-bit + + Data packet format: + Data packet is 3 byte packet. It is send to the computer every time mouse + state changes (mouse moves or keys are pressed/released). + D7 D6 D5 D4 D3 D2 D1 D0 + 1. X 1 LB RB Y7 Y6 X7 X6 + 2. X 0 X5 X4 X3 X2 X1 X0 + 3. X 0 Y5 Y4 Y3 Y2 Y1 Y0 + + Note: The bit marked with X is 0 if the mouse received with 7 databits + and 2 stop bits format. It is also possible to use 8 databits and 1 stop + bit format for receiving. In this case X gets value 1. The safest thing + to get everything working is to use 7 databits and 1 stopbit when + receiving mouse information (and if you are making mouse then send out + 7 databits and 2 stop bits). + The byte marked with 1. is send first, then the others. The bit D6 in + the first byte is used for syncronizing the software to mouse packets + if it goes out of sync. + + LB is the state of the left button (1 means pressed down) + RB is the state of the right button (1 means pressed down) + X7-X0 movement in X direction since last packet (signed byte) + Y7-Y0 movement in Y direction since last packet (signed byte) + + Mouse identification + When DTR line is toggled, mouse should send one data byte containing + letter 'M' (ascii 77). + + + Logitech serial mouse + + Logitech uses the Microsoft serial mouse protocol in their mouses (for + example Logitech Pilot mouse and others). The origianal protocol supports + only two buttons, but logitech as added third button to some of their + mouse models. To make this possible logitech has made one extension to + the protocol. + I have not seen any documentation about the exact documents, but here is + what I have found out: The information of the third button state is sent + using one extra byte which is send after the normal packet when needed. + Value 32 (dec) is sent every time when the center button is pressed down. + It is also sent every time with the data packet when center button is kept + down and the mouse data packet is sent for other reasons. When center + button is released, the mouse sends the normal data packet followed by + data bythe which has value 0 (dec). As you can see the extra data byte + is sent only when you mess with the center button. + + + Mouse systems mouse + + Serial data parameters: + 1200bps, 8 databits, 1 stop-bit + + Data packet format: + D7 D6 D5 D4 D3 D2 D1 D0 + 1. 1 0 0 0 0 LB CB RB + 2. X7 X6 X5 X4 X3 X2 X1 X0 + 3. Y7 Y6 Y5 Y4 Y3 Y4 Y1 Y0 + 4. X7' X6' X5' X4' X3' X2' X1' X0' + 5. Y7' Y6' Y5' Y4' Y3' Y4' Y1' Y0' + + LB is left button state (0 = pressed, 1 = released) + CB is center button state (0 = pressed, 1 = released) + RB is right button state (0 = pressed, 1 = released) + X7-X0 movement in X direction since last packet in signed byte + format (-128..+127), positive direction right + Y7-Y0 movement in Y direction since last packet in signed byte + format (-128..+127), positive direction up + X7'-X0' movement in X direction since sending of X7-X0 packet in + signed byte format (-128..+127), positive direction right + Y7'-Y0' movement in Y direction since sending of Y7-Y0 packet in + signed byte format (-128..+127), positive direction up + + The last two bytes in the packet (bytes 4 and 5) contains information + about movement data changes which have occured after data bytes 2 and 3 + have been sent. diff --git a/drivers/lib/bzip2/.cvsignore b/drivers/lib/bzip2/.cvsignore index 80ade3d..a6b0d23 100644 --- a/drivers/lib/bzip2/.cvsignore +++ b/drivers/lib/bzip2/.cvsignore @@ -2,4 +2,5 @@ unbzip2.sys unbzip2.nostrip.sys unbzip2.sym *.d -*.o \ No newline at end of file +*.o +*.map diff --git a/drivers/net/afd/.cvsignore b/drivers/net/afd/.cvsignore index cbda6a7..77f6c71 100644 --- a/drivers/net/afd/.cvsignore +++ b/drivers/net/afd/.cvsignore @@ -2,3 +2,4 @@ *.sym *.sys *.o +*.map diff --git a/drivers/net/afd/afd/.cvsignore b/drivers/net/afd/afd/.cvsignore index d273b98..5555747 100644 --- a/drivers/net/afd/afd/.cvsignore +++ b/drivers/net/afd/afd/.cvsignore @@ -1,3 +1,4 @@ *.o *.sym *.d +*.map diff --git a/drivers/net/afd/afd/afd.c b/drivers/net/afd/afd/afd.c index 742d989..a82fea2 100644 --- a/drivers/net/afd/afd/afd.c +++ b/drivers/net/afd/afd/afd.c @@ -167,13 +167,13 @@ DriverEntry( KeInitializeSpinLock(&DeviceExt->FCBListLock); InitializeListHead(&DeviceExt->FCBListHead); - DriverObject->MajorFunction[IRP_MJ_CREATE] = AfdCreate; - DriverObject->MajorFunction[IRP_MJ_CLOSE] = AfdClose; - DriverObject->MajorFunction[IRP_MJ_READ] = AfdRead; - DriverObject->MajorFunction[IRP_MJ_WRITE] = AfdWrite; - DriverObject->MajorFunction[IRP_MJ_FILE_SYSTEM_CONTROL] = AfdFileSystemControl; - DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = AfdDispatch; - DriverObject->MajorFunction[IRP_MJ_CLEANUP] = AfdClose; + DriverObject->MajorFunction[IRP_MJ_CREATE] = (PDRIVER_DISPATCH)AfdCreate; + DriverObject->MajorFunction[IRP_MJ_CLOSE] = (PDRIVER_DISPATCH)AfdClose; + DriverObject->MajorFunction[IRP_MJ_READ] = (PDRIVER_DISPATCH)AfdRead; + DriverObject->MajorFunction[IRP_MJ_WRITE] = (PDRIVER_DISPATCH)AfdWrite; + DriverObject->MajorFunction[IRP_MJ_FILE_SYSTEM_CONTROL] = (PDRIVER_DISPATCH)AfdFileSystemControl; + DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = (PDRIVER_DISPATCH)AfdDispatch; + DriverObject->MajorFunction[IRP_MJ_CLEANUP] = (PDRIVER_DISPATCH)AfdClose; DriverObject->DriverUnload = (PDRIVER_UNLOAD)AfdUnload; diff --git a/drivers/net/afd/afd/opnclose.c b/drivers/net/afd/afd/opnclose.c index 81593e8..45a11e5 100644 --- a/drivers/net/afd/afd/opnclose.c +++ b/drivers/net/afd/afd/opnclose.c @@ -242,13 +242,16 @@ AfdClose( case IRP_MJ_CLEANUP: FCB->OpenHandleCount--; Status = STATUS_SUCCESS; + + ExFreePool(CCB); + break; default: Status = STATUS_INVALID_DEVICE_REQUEST; } - ExFreePool(CCB); +// ExFreePool(CCB); Irp->IoStatus.Status = Status; Irp->IoStatus.Information = 0; diff --git a/drivers/net/afd/include/afd.h b/drivers/net/afd/include/afd.h index 1dc02f0..f6e2291 100644 --- a/drivers/net/afd/include/afd.h +++ b/drivers/net/afd/include/afd.h @@ -35,21 +35,6 @@ typedef struct _AFDCCB { /* Flags for CCB structure */ #define CCB_CLEANED 0x00000001 -/* Borrowed from http://www.acc.umu.se/~bosse/ntifs.h by Bo Branten */ -typedef struct _FSRTL_COMMON_FCB_HEADER { - CSHORT NodeTypeCode; - CSHORT NodeByteSize; - UCHAR Flags; - UCHAR IsFastIoPossible; - UCHAR Flags2; - UCHAR Reserved; - PERESOURCE Resource; - PERESOURCE PagingIoResource; - LARGE_INTEGER AllocationSize; - LARGE_INTEGER FileSize; - LARGE_INTEGER ValidDataLength; -} FSRTL_COMMON_FCB_HEADER, *PFSRTL_COMMON_FCB_HEADER; - typedef struct _FsdNTRequiredFCB { FSRTL_COMMON_FCB_HEADER CommonFCBHeader; SECTION_OBJECT_POINTERS SectionObject; diff --git a/drivers/net/dd/ne2000/.cvsignore b/drivers/net/dd/ne2000/.cvsignore index dad625c..375f930 100644 --- a/drivers/net/dd/ne2000/.cvsignore +++ b/drivers/net/dd/ne2000/.cvsignore @@ -5,3 +5,4 @@ ne2000.coff *.sym *.o *.sys +*.map diff --git a/drivers/net/dd/ne2000/include/debug.h b/drivers/net/dd/ne2000/include/debug.h index 5b96c6f..168bc3b 100644 --- a/drivers/net/dd/ne2000/include/debug.h +++ b/drivers/net/dd/ne2000/include/debug.h @@ -43,6 +43,8 @@ extern ULONG DebugTraceLevel; #endif /* _MSC_VER */ +/* Assert is defined in ndis.h */ +#if 0 #ifdef ASSERT #undef ASSERT #endif @@ -52,7 +54,7 @@ extern ULONG DebugTraceLevel; #else /* NASSERT */ #define ASSERT(x) if (!(x)) { NDIS_DbgPrint(MIN_TRACE, ("Assertion "#x" failed at %s:%d\n", __FILE__, __LINE__)); KeBugCheck(0); } #endif /* NASSERT */ - +#endif #define ASSERT_IRQL(x) ASSERT(KeGetCurrentIrql() <= (x)) #else /* DBG */ @@ -60,7 +62,7 @@ extern ULONG DebugTraceLevel; #define NDIS_DbgPrint(_t_, _x_) #define ASSERT_IRQL(x) -#define ASSERT(x) +/* #define ASSERT(x) */ /* ndis.h */ #endif /* DBG */ diff --git a/drivers/net/dd/ne2000/include/ne2000.h b/drivers/net/dd/ne2000/include/ne2000.h index 0da7d50..4495faa 100644 --- a/drivers/net/dd/ne2000/include/ne2000.h +++ b/drivers/net/dd/ne2000/include/ne2000.h @@ -33,8 +33,8 @@ #define DRIVER_NDIS_MAJOR_VERSION 3 #define DRIVER_NDIS_MINOR_VERSION 0 -#define DRIVER_DEFAULT_IO_BASE_ADDRESS 0x300 -#define DRIVER_DEFAULT_INTERRUPT_NUMBER 10 +#define DRIVER_DEFAULT_IO_BASE_ADDRESS 0x280 /* bochs default */ +#define DRIVER_DEFAULT_INTERRUPT_NUMBER 9 /* bochs default */ #define DRIVER_MAX_MULTICAST_LIST_SIZE 8 diff --git a/drivers/net/dd/ne2000/ne2000/.cvsignore b/drivers/net/dd/ne2000/ne2000/.cvsignore index 5761abc..ecc3f45 100644 --- a/drivers/net/dd/ne2000/ne2000/.cvsignore +++ b/drivers/net/dd/ne2000/ne2000/.cvsignore @@ -1 +1,2 @@ *.o +*.map diff --git a/drivers/net/dd/ne2000/ne2000/8390.c b/drivers/net/dd/ne2000/ne2000/8390.c index 2c285d2..1ea6f92 100644 --- a/drivers/net/dd/ne2000/ne2000/8390.c +++ b/drivers/net/dd/ne2000/ne2000/8390.c @@ -9,15 +9,18 @@ */ #include +/* Null-terminated array of ports to probe. This is "semi-risky" (Don Becker). */ +ULONG ProbeAddressList[] = { 0x280, 0x300, 0x320, 0x340, 0x360, 0x380, 0 }; -BOOLEAN NICCheck( - PNIC_ADAPTER Adapter) +BOOLEAN ProbeAddressForNIC( + ULONG address) /* - * FUNCTION: Tests for a NIC + * FUNCTION: Probes an address for a NIC * ARGUMENTS: - * Adapter = Pointer to adapter information + * address = Base address to probe * RETURNS: - * TRUE if NIC is believed to be present, FALSE if not + * TRUE if an NIC is found at the address + * FALSE otherwise * NOTES: * If the adapter responds correctly to a * stop command we assume it is present @@ -25,17 +28,19 @@ BOOLEAN NICCheck( { UCHAR Tmp; + NDIS_DbgPrint(MID_TRACE, ("Probing address 0x%x\n", address)); + /* Disable interrupts */ - NdisRawWritePortUchar(Adapter->IOBase + PG0_IMR, 0); + NdisRawWritePortUchar(address + PG0_IMR, 0); /* Stop the NIC */ - NdisRawWritePortUchar(Adapter->IOBase + PG0_CR, CR_STP | CR_RD2); + NdisRawWritePortUchar(address + PG0_CR, CR_STP | CR_RD2); /* Pause for 1.6ms */ NdisStallExecution(1600); /* Read NIC response */ - NdisRawReadPortUchar(Adapter->IOBase + PG0_CR, &Tmp); + NdisRawReadPortUchar(address + PG0_CR, &Tmp); if ((Tmp == (CR_RD2 | CR_STP)) || (Tmp == (CR_RD2 | CR_STP | CR_STA))) return TRUE; @@ -44,6 +49,43 @@ BOOLEAN NICCheck( } +BOOLEAN NICCheck( + PNIC_ADAPTER Adapter) +/* + * FUNCTION: Tests for a NIC + * ARGUMENTS: + * Adapter = Pointer to adapter information + * RETURNS: + * TRUE if NIC is believed to be present, FALSE if not + */ +{ + int i; + + NDIS_DbgPrint(MAX_TRACE, ("Called\n")); + + /* first try the supplied value */ + if(ProbeAddressForNIC(Adapter->IoBaseAddress)) + { + NDIS_DbgPrint(MIN_TRACE, ("Found adapter at 0x%x\n", Adapter->IoBaseAddress)); + return TRUE; + } + + /* ok, no dice, time to probe */ + for(i = 0; ProbeAddressList[i]; i++) + { + if(ProbeAddressForNIC(ProbeAddressList[i])) + { + NDIS_DbgPrint(MIN_TRACE, ("Found adapter at address 0x%x\n", ProbeAddressList[i])); + Adapter->IoBaseAddress = ProbeAddressList[i]; + return TRUE; + } + } + + NDIS_DbgPrint(MIN_TRACE,("Adapter NOT found!\n")); + return FALSE; +} + + BOOLEAN NICTestAddress( PNIC_ADAPTER Adapter, ULONG Address) @@ -215,7 +257,7 @@ BOOLEAN NICReadSAPROM( /* If WordLength is 2 the data read before was doubled. We must compensate for this */ if (WordLength == 2) { - DbgPrint("NE2000 or compatible network adapter found.\n"); + NDIS_DbgPrint(MAX_TRACE,("NE2000 or compatible network adapter found.\n")); Adapter->WordMode = TRUE; @@ -234,7 +276,7 @@ BOOLEAN NICReadSAPROM( return TRUE; } else { - DbgPrint("NE1000 or compatible network adapter found.\n"); + NDIS_DbgPrint(MAX_TRACE, ("NE1000 or compatible network adapter found.\n")); Adapter->WordMode = FALSE; @@ -257,13 +299,7 @@ NDIS_STATUS NICInitialize( { UCHAR Tmp; - NDIS_DbgPrint(MAX_TRACE, ("Called.\n")); - - if (!NICCheck(Adapter)) { - NDIS_DbgPrint(MID_TRACE, ("No adapter found at (0x%X).\n", Adapter->IOBase)); - return NDIS_STATUS_ADAPTER_NOT_FOUND; - } else - NDIS_DbgPrint(MID_TRACE, ("Adapter found at (0x%X).\n", Adapter->IOBase)); + NDIS_DbgPrint(MID_TRACE, ("Called.\n")); /* Reset the NIC */ NdisRawReadPortUchar(Adapter->IOBase + NIC_RESET, &Tmp); @@ -867,6 +903,7 @@ VOID NICIndicatePacket( IndicateLength + DRIVER_HEADER_SIZE); NDIS_DbgPrint(MID_TRACE, ("Indicating (%d) bytes.\n", IndicateLength)); + DbgPrint("ne2000!NICIndicatePacket: Indicating (%d) bytes.\n", IndicateLength); #if 0 NDIS_DbgPrint(MAX_TRACE, ("FRAME:\n")); @@ -927,7 +964,7 @@ VOID NICReadPacket( NDIS_DbgPrint(MAX_TRACE, ("HEADER: (PacketLength) (0x%X)\n", Adapter->PacketHeader.PacketLength)); if (Adapter->PacketHeader.PacketLength < 64 || - Adapter->PacketHeader.PacketLength > 1518) { + Adapter->PacketHeader.PacketLength > 1518) { /* XXX I don't think the CRC will show up... should be 1514 */ NDIS_DbgPrint(MAX_TRACE, ("Bogus packet size (%d).\n", Adapter->PacketHeader.PacketLength)); SkipPacket = TRUE; diff --git a/drivers/net/dd/ne2000/ne2000/main.c b/drivers/net/dd/ne2000/ne2000/main.c index be3acee..6597e3e 100644 --- a/drivers/net/dd/ne2000/ne2000/main.c +++ b/drivers/net/dd/ne2000/ne2000/main.c @@ -13,7 +13,6 @@ #ifdef DBG /* See debug.h for debug/trace constants */ -//DWORD DebugTraceLevel = MID_TRACE; ULONG DebugTraceLevel = MIN_TRACE; #endif /* DBG */ @@ -173,7 +172,7 @@ NDIS_STATUS MiniportInitialize( } if (i == MediumArraySize) { - NDIS_DbgPrint(MIN_TRACE, ("No supported medias.\n")); + NDIS_DbgPrint(MIN_TRACE, ("No supported media.\n")); return NDIS_STATUS_UNSUPPORTED_MEDIA; } @@ -196,6 +195,63 @@ NDIS_STATUS MiniportInitialize( Adapter->InterruptMask = DRIVER_INTERRUPT_MASK; Adapter->LookaheadSize = DRIVER_MAXIMUM_LOOKAHEAD; + /* get the port, irq, and MAC address from registry */ + do + { + PNDIS_CONFIGURATION_PARAMETER ConfigurationParameter; + NDIS_HANDLE ConfigurationHandle; + UNICODE_STRING Keyword; + UINT *RegNetworkAddress = 0; + UINT RegNetworkAddressLength = 0; + + NdisOpenConfiguration(&Status, &ConfigurationHandle, WrapperConfigurationContext); + if(Status != NDIS_STATUS_SUCCESS) + { + NDIS_DbgPrint(MIN_TRACE,("NdisOpenConfiguration returned error 0x%x\n", Status)); + break; + } + + NdisInitUnicodeString(&Keyword, L"Irq"); + NdisReadConfiguration(&Status, &ConfigurationParameter, ConfigurationHandle, &Keyword, NdisParameterInteger); + if(Status == NDIS_STATUS_SUCCESS) + { + NDIS_DbgPrint(MID_TRACE,("NdisReadConfiguration for Irq returned successfully, irq 0x%x\n", + ConfigurationParameter->ParameterData.IntegerData)); + Adapter->InterruptNumber = ConfigurationParameter->ParameterData.IntegerData; + } + + NdisInitUnicodeString(&Keyword, L"Port"); + NdisReadConfiguration(&Status, &ConfigurationParameter, ConfigurationHandle, &Keyword, NdisParameterInteger); + if(Status == NDIS_STATUS_SUCCESS) + { + NDIS_DbgPrint(MID_TRACE,("NdisReadConfiguration for Port returned successfully, port 0x%x\n", + ConfigurationParameter->ParameterData.IntegerData)); + Adapter->IoBaseAddress = ConfigurationParameter->ParameterData.IntegerData; + } + + /* the returned copy of the data is owned by NDIS and will be released on NdisCloseConfiguration */ + NdisReadNetworkAddress(&Status, (PVOID *)&RegNetworkAddress, &RegNetworkAddressLength, ConfigurationHandle); + if(Status == NDIS_STATUS_SUCCESS && RegNetworkAddressLength == DRIVER_LENGTH_OF_ADDRESS) + { + int i; + NDIS_DbgPrint(MID_TRACE,("NdisReadNetworkAddress returned successfully, address %x:%x:%x:%x:%x:%x\n", + RegNetworkAddress[0], RegNetworkAddress[1], RegNetworkAddress[2], RegNetworkAddress[3], + RegNetworkAddress[4], RegNetworkAddress[5])); + for(i = 0; i < DRIVER_LENGTH_OF_ADDRESS; i++) + Adapter->StationAddress[i] = RegNetworkAddress[i]; + } + + NdisCloseConfiguration(ConfigurationHandle); + } while(0); + + /* find the nic */ + if (!NICCheck(Adapter)) { + NDIS_DbgPrint(MID_TRACE, ("No adapter found at (0x%X).\n", Adapter->IOBase)); + return NDIS_STATUS_ADAPTER_NOT_FOUND; + } else + NDIS_DbgPrint(MID_TRACE, ("Adapter found at (0x%X).\n", Adapter->IOBase)); + + NdisMSetAttributes( MiniportAdapterHandle, (NDIS_HANDLE)Adapter, @@ -220,8 +276,8 @@ NDIS_STATUS MiniportInitialize( #ifndef NOCARD Status = NICInitialize(Adapter); if (Status != NDIS_STATUS_SUCCESS) { - DbgPrint("No NE2000 or compatible network adapter found at address 0x%X.\n", - Adapter->IOBase); + NDIS_DbgPrint(MIN_TRACE,("No NE2000 or compatible network adapter found at address 0x%X.\n", + Adapter->IOBase)); NDIS_DbgPrint(MID_TRACE, ("Status (0x%X).\n", Status)); MiniportHalt((NDIS_HANDLE)Adapter); @@ -809,4 +865,81 @@ DriverEntry( return STATUS_SUCCESS; } +#if 0 + /* while i'm here - some basic registry sanity checks */ + { + /* write tests */ + NDIS_CONFIGURATION_PARAMETER ParameterValue; + + ParameterValue.ParameterType = NdisParameterInteger; + ParameterValue.ParameterData.IntegerData = 0x12345678; + NdisInitUnicodeString(&Keyword, L"DwordTest"); + NdisWriteConfiguration(&Status, ConfigurationHandle, &Keyword, &ParameterValue); + + if(Status != NDIS_STATUS_SUCCESS) + { + DbgPrint("ne2000!MiniportInitialize: failed to set DwordTest: 0x%x\n", Status); + KeBugCheck(0); + } + + DbgPrint("ne2000!MiniportInitialize: DwordTest successfully set\n"); + + NdisInitUnicodeString(&Keyword, L"StringTest"); + ParameterValue.ParameterType = NdisParameterString; + NdisInitUnicodeString(&ParameterValue.ParameterData.StringData, L"Testing123"); + + NdisWriteConfiguration(&Status, ConfigurationHandle, &Keyword, &ParameterValue); + + if(Status != NDIS_STATUS_SUCCESS) + { + DbgPrint("ne2000!MiniportInitialize: failed to set StringTest: 0x%x\n", Status); + KeBugCheck(0); + } + + DbgPrint("ne2000!MiniportInitialize: StringTest successfully set\n"); + } + + { + /* read back the test values */ + NDIS_CONFIGURATION_PARAMETER *ParameterValue = 0; + + NdisInitUnicodeString(&Keyword, L"DwordTest"); + NdisReadConfiguration(&Status, &ParameterValue, ConfigurationHandle, &Keyword, NdisParameterInteger); + + if(Status != NDIS_STATUS_SUCCESS) + { + DbgPrint("ne2000!MiniportInitialize: failed to read DwordTest: 0x%x\n", Status); + KeBugCheck(0); + } + + if(ParameterValue->ParameterData.IntegerData != 0x12345678) + { + DbgPrint("ne2000!MiniportInitialize: DwordTest value is wrong: 0x%x\n", + ParameterValue->ParameterData.IntegerData); + KeBugCheck(0); + } + + DbgPrint("ne2000!MiniportInitialize: DwordTest value was correctly read\n"); + + NdisInitUnicodeString(&Keyword, L"StringTest"); + NdisReadConfiguration(&Status, &ParameterValue, ConfigurationHandle, &Keyword, NdisParameterString); + + if(Status != NDIS_STATUS_SUCCESS) + { + DbgPrint("ne2000!MiniportInitialize: failed to read StringTest: 0x%x\n", Status); + KeBugCheck(0); + } + + if(wcsncmp(ParameterValue->ParameterData.StringData.Buffer, L"Testing123", + wcslen(L"Testing123"))) + { + DbgPrint("ne2000!MiniportInitialize: StringTest value is wrong: %wZ\n", + &ParameterValue->ParameterData.StringData); + KeBugCheck(0); + } + + DbgPrint("ne2000!MiniportInitialize: StringTest value was correctly read\n"); + } + +#endif /* EOF */ diff --git a/drivers/net/dd/pcnet/.cvsignore b/drivers/net/dd/pcnet/.cvsignore new file mode 100644 index 0000000..389193a --- /dev/null +++ b/drivers/net/dd/pcnet/.cvsignore @@ -0,0 +1,2 @@ +*.coff +*.map diff --git a/drivers/net/dd/pcnet/Makefile b/drivers/net/dd/pcnet/Makefile new file mode 100644 index 0000000..c9f5f3a --- /dev/null +++ b/drivers/net/dd/pcnet/Makefile @@ -0,0 +1,14 @@ +PATH_TO_TOP = ../../../.. +TARGET_TYPE = driver +TARGET_NAME = pcnet + +# +# - must define NDIS40 to get the right characteristics struct +# - must define anonymous unions to make physical addresses work right +# +TARGET_CFLAGS = -I. -DDBG=1 -Wall -Werror -DNDIS40 -DANONYMOUSUNIONS + +TARGET_OBJECTS = pcnet.o +TARGET_DDKLIBS = ndis.a +include $(PATH_TO_TOP)/rules.mak +include $(TOOLS_PATH)/helper.mk diff --git a/drivers/net/dd/pcnet/pci.h b/drivers/net/dd/pcnet/pci.h new file mode 100644 index 0000000..7e79a5f --- /dev/null +++ b/drivers/net/dd/pcnet/pci.h @@ -0,0 +1,69 @@ +/* + * ReactOS AMD PCNet Driver + * Copyright (C) 1998, 1999, 2000, 2001 ReactOS Team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * PROJECT: ReactOS AMD PCNet Driver + * FILE: pcnet/pci.h + * PURPOSE: PCI configuration constants + * PROGRAMMER: Vizzini (vizzini@plasmic.com) + * REVISIONS: + * 1-Sept-2003 vizzini - Created + */ + + +/* PCI Config Space Offset Definitions */ +#define PCI_PCIID 0x0 /* pci id - query 32 bits */ +#define PCI_VENID 0x0 /* vendor ID */ +#define PCI_DEVID 0x2 /* device ID */ +#define PCI_COMMAND 0x4 /* command register */ +#define PCI_STATUS 0x6 /* status register */ +#define PCI_REVID 0x8 /* revision ID */ +#define PCI_PIR 0x9 /* programming interface register */ +#define PCI_SCR 0xa /* sub-class register */ +#define PCI_BCR 0xb /* base-class register */ +#define PCI_LTR 0xd /* latency timer register */ +#define PCI_HTR 0xe /* header type register */ +#define PCI_IOBAR 0x10 /* i/o base address register */ +#define PCI_MMBAR 0x14 /* i/o memory-mapped base address register */ +#define PCI_ERBAR 0x30 /* expansion rom base address register */ +#define PCI_ILR 0x3c /* interrupt line register */ +#define PCI_IPR 0x3d /* interrupt pin register */ +#define PCI_MINGNT 0x3e /* min_gnt register */ +#define PCI_MAXLAT 0x3f /* max_lat register */ + +/* PCI Command Register Bits */ +#define PCI_IOEN 0x1 /* i/o space access enable */ +#define PCI_MEMEN 0x2 /* memory space access enable */ +#define PCI_BMEN 0x4 /* bus master enable */ +#define PCI_SCYCEN 0x8 /* special cycle enable */ +#define PCI_MWIEN 0X10 /* memory write and invalidate cycle enable */ +#define PCI_VGASNOOP 0x20 /* vga palette snoop */ +#define PCI_PERREN 0x40 /* parity error response enable */ +#define PCI_ADSTEP 0x80 /* address/data stepping */ +#define PCI_SERREN 0x100 /* signalled error enable */ +#define PCI_FBTBEN 0X200 /* fast back-to-back enable */ + +/* PCI Status Register Bits */ +#define PCI_FBTBC 0x80 /* fast back-to-back capable */ +#define PCI_DATAPERR 0x100 /* data parity error detected */ +#define PCI_DEVSEL1 0x200 /* device select timing lsb */ +#define PCI_DEVSEL2 0x400 /* device select timing msb */ +#define PCI_STABORT 0x800 /* send target abort */ +#define PCI_RTABORT 0x1000 /* received target abort */ +#define PCI_SERR 0x2000 /* signalled error */ +#define PCI_PERR 0x4000 /* parity error */ + diff --git a/drivers/net/dd/pcnet/pcnet.c b/drivers/net/dd/pcnet/pcnet.c new file mode 100644 index 0000000..a45d414 --- /dev/null +++ b/drivers/net/dd/pcnet/pcnet.c @@ -0,0 +1,1074 @@ +/* + * ReactOS AMD PCNet Driver + * Copyright (C) 1998, 1999, 2000, 2001 ReactOS Team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * PROJECT: ReactOS AMD PCNet Driver + * FILE: drivers/net/dd/pcnet/pcnet.c + * PURPOSE: PCNet Device Driver + * PROGRAMMER: Vizzini (vizzini@plasmic.com) + * REVISIONS: + * 9-Sept-2003 vizzini - Created + * NOTES: + * - this is hard-coded to NDIS4 + * - this assumes a little-endian machine + * - this assumes a 32-bit machine + * - this doesn't handle multiple PCNET NICs yet + * - this driver includes both NdisRaw and NdisImmediate calls + * for NDIS testing purposes. Pick your poison below. + */ +#include +#include "pci.h" +#include "pcnethw.h" +#include "pcnet.h" + + +VOID +STDCALL +MiniportHalt( + IN NDIS_HANDLE MiniportAdapterContext) +/* + * FUNCTION: Stop the miniport and prepare for unload + * ARGUMENTS: + * MiniportAdapterContext: context specified to NdisMSetAttributes + * NOTES: + * - Called by NDIS at PASSIVE_LEVEL + */ +{ + /* XXX Implement me */ + PCNET_DbgPrint(("Called\n")); +} + + +VOID +STDCALL +MiniportHandleInterrupt( + IN NDIS_HANDLE MiniportAdapterContext) +/* + * FUNCTION: Handle an interrupt if told to by MiniportISR + * ARGUMENTS: + * MiniportAdapterContext: context specified to NdisMSetAttributes + * NOTES: + * - Called by NDIS at DISPATCH_LEVEL + */ +{ + PADAPTER Adapter = (PADAPTER)MiniportAdapterContext; + USHORT Data; + BOOLEAN ErrorHandled = FALSE; + BOOLEAN ReceiveHandled = FALSE; + BOOLEAN IdonHandled = FALSE; + USHORT Temp; + + PCNET_DbgPrint(("Called\n")); + + NdisRawWritePortUshort(Adapter->PortOffset + RAP, CSR0); + NdisRawReadPortUshort(Adapter->PortOffset + RDP, &Data); + + PCNET_DbgPrint(("CSR0 is 0x%x\n", Data)); + + while(Data & CSR0_INTR) + { + if(Data & CSR0_ERR) + { + if(ErrorHandled) + { + PCNET_DbgPrint(("ERROR HANDLED TWO TIMES\n")); + __asm__("int $3\n"); + } + + ErrorHandled = TRUE; + + PCNET_DbgPrint(("clearing an error\n")); + NdisRawWritePortUshort(Adapter->PortOffset + RDP, CSR0_MERR|CSR0_BABL|CSR0_CERR|CSR0_MISS); + NdisRawReadPortUshort(Adapter->PortOffset + RDP, &Temp); + PCNET_DbgPrint(("CSR0 is now 0x%x\n", Temp)); + } + else if(Data & CSR0_IDON) + { + if(IdonHandled) + { + PCNET_DbgPrint(("IDON HANDLED TWO TIMES\n")); + __asm__("int $3\n"); + } + + IdonHandled = TRUE; + + PCNET_DbgPrint(("clearing IDON\n")); + NdisRawWritePortUshort(Adapter->PortOffset + RDP, CSR0_IDON); + NdisRawReadPortUshort(Adapter->PortOffset + RDP, &Temp); + PCNET_DbgPrint(("CSR0 is now 0x%x\n", Temp)); + } + else if(Data & CSR0_RINT) + { + if(ReceiveHandled) + { + PCNET_DbgPrint(("RECEIVE HANDLED TWO TIMES\n")); + __asm__("int $3\n"); + } + + ReceiveHandled = TRUE; + + PCNET_DbgPrint(("receive interrupt - clearing\n")); + NdisRawWritePortUshort(Adapter->PortOffset + RDP, CSR0_RINT); + NdisRawReadPortUshort(Adapter->PortOffset + RDP, &Temp); + PCNET_DbgPrint(("CSR0 is now 0x%x\n", Temp)); + + while(1) + { + PRECEIVE_DESCRIPTOR Descriptor = Adapter->ReceiveDescriptorRingVirt + Adapter->CurrentReceiveDescriptorIndex; + PCHAR Buffer; + ULONG ByteCount; + + if(Descriptor->FLAGS & RD_OWN) + { + PCNET_DbgPrint(("no more receive descriptors to process\n")); + break; + } + + if(Descriptor->FLAGS & RD_ERR) + { + PCNET_DbgPrint(("receive descriptor error: 0x%x\n", Descriptor->FLAGS)); + break; + } + + if(!((Descriptor->FLAGS & RD_STP) && (Descriptor->FLAGS & RD_ENP))) + { + PCNET_DbgPrint(("receive descriptor not start&end: 0x%x\n", Descriptor->FLAGS)); + break; + } + + Buffer = Adapter->ReceiveBufferPtrVirt + Adapter->CurrentReceiveDescriptorIndex * BUFFER_SIZE; + ByteCount = Descriptor->MCNT & 0xfff; + + PCNET_DbgPrint(("Indicating a %d-byte packet (index %d)\n", ByteCount, Adapter->CurrentReceiveDescriptorIndex)); + + NdisMEthIndicateReceive(Adapter->MiniportAdapterHandle, 0, Buffer, 14, Buffer+14, ByteCount-14, ByteCount-14); + + memset(Descriptor, 0, sizeof(RECEIVE_DESCRIPTOR)); + Descriptor->RBADR = + (ULONG)(Adapter->ReceiveBufferPtrPhys + Adapter->CurrentReceiveDescriptorIndex * BUFFER_SIZE); + Descriptor->BCNT = (-BUFFER_SIZE) | 0xf000; + Descriptor->FLAGS &= RD_OWN; + + Adapter->CurrentReceiveDescriptorIndex++; + + if(Adapter->CurrentReceiveDescriptorIndex == NUMBER_OF_BUFFERS) + Adapter->CurrentReceiveDescriptorIndex = 0; + } + } + else + { + PCNET_DbgPrint(("UNHANDLED INTERRUPT\n")); + __asm__("int $3\n"); + } + + NdisRawReadPortUshort(Adapter->PortOffset + RDP, &Data); + } + + /* re-enable interrupts */ + NdisRawWritePortUshort(Adapter->PortOffset + RDP, CSR0_IENA); + + NdisRawReadPortUshort(Adapter->PortOffset + RDP, &Data); + PCNET_DbgPrint(("CSR0 is now 0x%x\n", Data)); +} + + +NDIS_STATUS +MiQueryCard( + IN PADAPTER Adapter) +/* + * FUNCTION: Detect the PCNET NIC in the configured slot and query its I/O address and interrupt vector + * ARGUMENTS: + * MiniportAdapterContext: context supplied to NdisMSetAttributes + * RETURNS: + * NDIS_STATUS_FAILURE on a general error + * NDIS_STATUS_ADAPTER_NOT_FOUND on not finding the adapter + * NDIS_STATUS_SUCCESS on succes + */ +{ + ULONG buf32 = 0; + UCHAR buf8 = 0; + NDIS_STATUS Status; + + /* Detect the card in the configured slot */ + Status = NdisReadPciSlotInformation(Adapter->MiniportAdapterHandle, Adapter->SlotNumber, PCI_PCIID, &buf32, 4); + if(Status != 4) + { + Status = NDIS_STATUS_FAILURE; + PCNET_DbgPrint(("NdisReadPciSlotInformation failed\n")); + BREAKPOINT; + return Status; + } + + if(buf32 != PCI_ID) + { + Status = NDIS_STATUS_ADAPTER_NOT_FOUND; + PCNET_DbgPrint(("card in slot 0x%x isn't us: 0x%x\n", Adapter->SlotNumber, buf32)); + BREAKPOINT; + return Status; + } + + Status = NdisReadPciSlotInformation(Adapter->MiniportAdapterHandle, Adapter->SlotNumber, + PCI_COMMAND, &buf32, 4); + if(Status != 4) + { + PCNET_DbgPrint(("NdisReadPciSlotInformation failed\n")); + BREAKPOINT; + return NDIS_STATUS_FAILURE; + } + + PCNET_DbgPrint(("config/status register: 0x%x\n", buf32)); + + if(buf32 & 0x1) + { + PCNET_DbgPrint(("io space access is enabled.\n")); + } + else + { + PCNET_DbgPrint(("io space is NOT enabled!\n")); + BREAKPOINT; + return NDIS_STATUS_FAILURE; + } + + /* get IO base physical address */ + buf32 = 0; + Status = NdisReadPciSlotInformation(Adapter->MiniportAdapterHandle, Adapter->SlotNumber, PCI_IOBAR, &buf32, 4); + if(Status != 4) + { + Status = NDIS_STATUS_FAILURE; + PCNET_DbgPrint(("NdisReadPciSlotInformation failed\n")); + BREAKPOINT; + return Status; + } + + if(!buf32) + { + PCNET_DbgPrint(("No base i/o address set\n")); + return NDIS_STATUS_FAILURE; + } + + buf32 &= ~1; /* even up address - comes out odd for some reason */ + + PCNET_DbgPrint(("detected io address 0x%x\n", buf32)); + Adapter->IoBaseAddress = buf32; + + /* get interrupt vector */ + Status = NdisReadPciSlotInformation(Adapter->MiniportAdapterHandle, Adapter->SlotNumber, PCI_ILR, &buf8, 1); + if(Status != 1) + { + Status = NDIS_STATUS_FAILURE; + PCNET_DbgPrint(("NdisReadPciSlotInformation failed\n")); + BREAKPOINT; + return Status; + } + + PCNET_DbgPrint(("interrupt: 0x%x\n", buf8)); + Adapter->InterruptVector = buf8; + + return NDIS_STATUS_SUCCESS; +} + + +NDIS_STATUS +MiGetConfig( + PADAPTER Adapter, + NDIS_HANDLE WrapperConfigurationContext) +/* + * FUNCTION: Get configuration parameters from the registry + * ARGUMENTS: + * Adapter: pointer to the Adapter struct for this NIC + * WrapperConfigurationContext: Context passed into MiniportInitialize + * RETURNS: + * NDIS_STATUS_SUCCESS on success + * NDIS_STATUS_{something} on failure (return val from other Ndis calls) + */ +{ + PNDIS_CONFIGURATION_PARAMETER Parameter; + NDIS_HANDLE ConfigurationHandle = 0; + UNICODE_STRING Keyword; + NDIS_STATUS Status; + + NdisOpenConfiguration(&Status, &ConfigurationHandle, WrapperConfigurationContext); + if(Status != NDIS_STATUS_SUCCESS) + { + PCNET_DbgPrint(("Unable to open configuration: 0x%x\n", Status)); + BREAKPOINT; + return Status; + } + + RtlInitUnicodeString(&Keyword, L"SlotNumber"); + NdisReadConfiguration(&Status, &Parameter, ConfigurationHandle, &Keyword, NdisParameterInteger); + if(Status != NDIS_STATUS_SUCCESS) + { + PCNET_DbgPrint(("Unable to read slot number: 0x%x\n", Status)); + BREAKPOINT; + } + else + Adapter->SlotNumber = Parameter->ParameterData.IntegerData; + + NdisCloseConfiguration(ConfigurationHandle); + + return NDIS_STATUS_SUCCESS; +} + + +NDIS_STATUS +MiAllocateSharedMemory( + PADAPTER Adapter) +/* + * FUNCTION: Allocate all shared memory used by the miniport + * ARGUMENTS: + * Adapter: Pointer to the miniport's adapter object + * RETURNS: + * NDIS_STATUS_RESOURCES on insufficient memory + * NDIS_STATUS_SUCCESS on success + */ +{ + PTRANSMIT_DESCRIPTOR TransmitDescriptor; + PRECEIVE_DESCRIPTOR ReceiveDescriptor; + NDIS_PHYSICAL_ADDRESS PhysicalAddress; + ULONG i; + + /* allocate the initialization block */ + Adapter->InitializationBlockLength = sizeof(INITIALIZATION_BLOCK); + NdisMAllocateSharedMemory(Adapter->MiniportAdapterHandle, Adapter->InitializationBlockLength, + FALSE, (PVOID *)&Adapter->InitializationBlockVirt, &PhysicalAddress); + if(!Adapter->InitializationBlockVirt) + { + PCNET_DbgPrint(("insufficient resources\n")); + BREAKPOINT; + return NDIS_STATUS_RESOURCES; + } + + if(((ULONG)Adapter->InitializationBlockVirt & 0x00000003) != 0) + { + PCNET_DbgPrint(("address 0x%x not dword-aligned\n", Adapter->InitializationBlockVirt)); + BREAKPOINT; + return NDIS_STATUS_RESOURCES; + } + + Adapter->InitializationBlockPhys = (PINITIALIZATION_BLOCK)NdisGetPhysicalAddressLow(PhysicalAddress); + memset(Adapter->InitializationBlockVirt, 0, sizeof(INITIALIZATION_BLOCK)); + + /* allocate the transport descriptor ring */ + Adapter->TransmitDescriptorRingLength = sizeof(TRANSMIT_DESCRIPTOR) * NUMBER_OF_BUFFERS; + NdisMAllocateSharedMemory(Adapter->MiniportAdapterHandle, Adapter->TransmitDescriptorRingLength, + FALSE, (PVOID *)&Adapter->TransmitDescriptorRingVirt, &PhysicalAddress); + if(!Adapter->TransmitDescriptorRingVirt) + { + PCNET_DbgPrint(("insufficient resources\n")); + BREAKPOINT; + return NDIS_STATUS_RESOURCES; + } + + if(((ULONG)Adapter->TransmitDescriptorRingVirt & 0x00000003) != 0) + { + PCNET_DbgPrint(("address 0x%x not dword-aligned\n", Adapter->TransmitDescriptorRingVirt)); + BREAKPOINT; + return NDIS_STATUS_RESOURCES; + } + + Adapter->TransmitDescriptorRingPhys = (PTRANSMIT_DESCRIPTOR)NdisGetPhysicalAddressLow(PhysicalAddress); + memset(Adapter->TransmitDescriptorRingVirt, 0, sizeof(TRANSMIT_DESCRIPTOR) * NUMBER_OF_BUFFERS); + + /* allocate the receive descriptor ring */ + Adapter->ReceiveDescriptorRingLength = sizeof(RECEIVE_DESCRIPTOR) * NUMBER_OF_BUFFERS; + NdisMAllocateSharedMemory(Adapter->MiniportAdapterHandle, Adapter->ReceiveDescriptorRingLength, + FALSE, (PVOID *)&Adapter->ReceiveDescriptorRingVirt, &PhysicalAddress); + if(!Adapter->ReceiveDescriptorRingVirt) + { + PCNET_DbgPrint(("insufficient resources\n")); + BREAKPOINT; + return NDIS_STATUS_RESOURCES; + } + + if(((ULONG)Adapter->ReceiveDescriptorRingVirt & 0x00000003) != 0) + { + PCNET_DbgPrint(("address 0x%x not dword-aligned\n", Adapter->ReceiveDescriptorRingVirt)); + BREAKPOINT; + return NDIS_STATUS_RESOURCES; + } + + Adapter->ReceiveDescriptorRingPhys = (PRECEIVE_DESCRIPTOR)NdisGetPhysicalAddressLow(PhysicalAddress); + memset(Adapter->ReceiveDescriptorRingVirt, 0, sizeof(RECEIVE_DESCRIPTOR) * NUMBER_OF_BUFFERS); + + /* allocate transmit buffers */ + Adapter->TransmitBufferLength = BUFFER_SIZE * NUMBER_OF_BUFFERS; + NdisMAllocateSharedMemory(Adapter->MiniportAdapterHandle, Adapter->TransmitBufferLength, + FALSE, (PVOID *)&Adapter->TransmitBufferPtrVirt, &PhysicalAddress); + if(!Adapter->TransmitBufferPtrVirt) + { + PCNET_DbgPrint(("insufficient resources\n")); + BREAKPOINT; + return NDIS_STATUS_RESOURCES; + } + + if(((ULONG)Adapter->TransmitBufferPtrVirt & 0x00000003) != 0) + { + PCNET_DbgPrint(("address 0x%x not dword-aligned\n", Adapter->TransmitBufferPtrVirt)); + BREAKPOINT; + return NDIS_STATUS_RESOURCES; + } + + Adapter->TransmitBufferPtrPhys = (PCHAR)NdisGetPhysicalAddressLow(PhysicalAddress); + memset(Adapter->TransmitBufferPtrVirt, 0, BUFFER_SIZE * NUMBER_OF_BUFFERS); + + /* allocate receive buffers */ + Adapter->ReceiveBufferLength = BUFFER_SIZE * NUMBER_OF_BUFFERS; + NdisMAllocateSharedMemory(Adapter->MiniportAdapterHandle, Adapter->ReceiveBufferLength, + FALSE, (PVOID *)&Adapter->ReceiveBufferPtrVirt, &PhysicalAddress); + if(!Adapter->ReceiveBufferPtrVirt) + { + PCNET_DbgPrint(("insufficient resources\n")); + BREAKPOINT; + return NDIS_STATUS_RESOURCES; + } + + if(((ULONG)Adapter->ReceiveBufferPtrVirt & 0x00000003) != 0) + { + PCNET_DbgPrint(("address 0x%x not dword-aligned\n", Adapter->ReceiveBufferPtrVirt)); + BREAKPOINT; + return NDIS_STATUS_RESOURCES; + } + + Adapter->ReceiveBufferPtrPhys = (PCHAR)NdisGetPhysicalAddressLow(PhysicalAddress); + memset(Adapter->ReceiveBufferPtrVirt, 0, BUFFER_SIZE * NUMBER_OF_BUFFERS); + + /* initialize tx descriptors */ + TransmitDescriptor = Adapter->TransmitDescriptorRingVirt; + for(i = 0; i < NUMBER_OF_BUFFERS; i++) + { + (TransmitDescriptor+i)->TBADR = (ULONG)Adapter->TransmitBufferPtrPhys + i * BUFFER_SIZE; + (TransmitDescriptor+i)->BCNT = 0xf000 | -BUFFER_SIZE; /* 2's compliment + set top 4 bits */ + (TransmitDescriptor+i)->FLAGS = TD1_STP | TD1_ENP; + } + + PCNET_DbgPrint(("transmit ring initialized\n")); + + /* initialize rx */ + ReceiveDescriptor = Adapter->ReceiveDescriptorRingVirt; + for(i = 0; i < NUMBER_OF_BUFFERS; i++) + { + (ReceiveDescriptor+i)->RBADR = (ULONG)Adapter->ReceiveBufferPtrPhys + i * BUFFER_SIZE; + (ReceiveDescriptor+i)->BCNT = 0xf0000 | -BUFFER_SIZE; /* 2's compliment + set top 4 bits */ + (ReceiveDescriptor+i)->FLAGS |= RD_OWN; + } + + PCNET_DbgPrint(("receive ring initialized\n")); + + return NDIS_STATUS_SUCCESS; +} + + +VOID +MiPrepareInitializationBlock( + PADAPTER Adapter) +/* + * FUNCTION: Initialize the initialization block + * ARGUMENTS: + * Adapter: pointer to the miniport's adapter object + */ +{ + ULONG i = 0; + + /* read burned-in address from card */ + for(i = 0; i < 6; i++) + NdisRawReadPortUchar(Adapter->PortOffset + i, Adapter->InitializationBlockVirt->PADR + i); + + /* set up receive ring */ + PCNET_DbgPrint(("Receive ring physical address: 0x%x\n", Adapter->ReceiveDescriptorRingPhys)); + Adapter->InitializationBlockVirt->RDRA = (ULONG)Adapter->ReceiveDescriptorRingPhys; + Adapter->InitializationBlockVirt->RLEN = (LOG_NUMBER_OF_BUFFERS << 4) & 0xf0; + + /* set up transmit ring */ + PCNET_DbgPrint(("Transmit ring physical address: 0x%x\n", Adapter->TransmitDescriptorRingPhys)); + Adapter->InitializationBlockVirt->TDRA = (ULONG)Adapter->TransmitDescriptorRingPhys; + Adapter->InitializationBlockVirt->TLEN = (LOG_NUMBER_OF_BUFFERS << 4) & 0xf0; +} + + +VOID +MiFreeSharedMemory( + PADAPTER Adapter) +/* + * FUNCTION: Free all allocated shared memory + * ARGUMENTS: + * Adapter: pointer to the miniport's adapter struct + */ +{ + NDIS_PHYSICAL_ADDRESS PhysicalAddress; + + PhysicalAddress.u.HighPart = 0; + + if(Adapter->InitializationBlockVirt) + { + PhysicalAddress.u.LowPart = (ULONG)Adapter->InitializationBlockPhys; + NdisMFreeSharedMemory(Adapter->MiniportAdapterHandle, Adapter->InitializationBlockLength, + FALSE, (PVOID *)&Adapter->InitializationBlockVirt, PhysicalAddress); + } + + if(Adapter->TransmitDescriptorRingVirt) + { + PhysicalAddress.u.LowPart = (ULONG)Adapter->TransmitDescriptorRingPhys; + NdisMFreeSharedMemory(Adapter->MiniportAdapterHandle, Adapter->TransmitDescriptorRingLength, + FALSE, (PVOID *)&Adapter->TransmitDescriptorRingVirt, PhysicalAddress); + } + + if(Adapter->ReceiveDescriptorRingVirt) + { + PhysicalAddress.u.LowPart = (ULONG)Adapter->ReceiveDescriptorRingPhys; + NdisMFreeSharedMemory(Adapter->MiniportAdapterHandle, Adapter->ReceiveDescriptorRingLength, + FALSE, (PVOID *)&Adapter->ReceiveDescriptorRingVirt, PhysicalAddress); + } + + if(Adapter->TransmitBufferPtrVirt) + { + PhysicalAddress.u.LowPart = (ULONG)Adapter->TransmitBufferPtrPhys; + NdisMFreeSharedMemory(Adapter->MiniportAdapterHandle, Adapter->TransmitBufferLength, + FALSE, (PVOID *)&Adapter->TransmitBufferPtrVirt, PhysicalAddress); + } + + if(Adapter->ReceiveBufferPtrVirt) + { + PhysicalAddress.u.LowPart = (ULONG)Adapter->ReceiveBufferPtrPhys; + NdisMFreeSharedMemory(Adapter->MiniportAdapterHandle, Adapter->ReceiveBufferLength, + FALSE, (PVOID *)&Adapter->ReceiveBufferPtrVirt, PhysicalAddress); + } +} + + +VOID +MiInitChip( + PADAPTER Adapter) +/* + * FUNCTION: Initialize and start the PCNET chip + * ARGUMENTS: + * Adapter: pointer to the miniport's adapter struct + * NOTES: + * - should be coded to detect failure and return an error + * - the vmware virtual lance chip doesn't support 32-bit i/o so don't do that. + */ +{ + USHORT Data = 0; + + PCNET_DbgPrint(("Called\n")); + + /* + * first reset the chip - 32-bit reset followed by 16-bit reset. if it's in 32-bit mode, it'll reset + * twice. if it's in 16-bit mode, the first read will be nonsense and the second will be a reset. the + * card is reset by reading from the reset register. on reset it's in 16-bit i/o mode. + */ + NdisRawReadPortUshort(Adapter->PortOffset + RESET32, &Data); + NdisRawReadPortUshort(Adapter->PortOffset + RESET16, &Data); + + /* stop the chip */ + NdisRawWritePortUshort(Adapter->PortOffset + RAP, CSR0); + NdisRawWritePortUshort(Adapter->PortOffset + RDP, CSR0_STOP); + + /* pause for 1ms so the chip will have time to reset */ + NdisStallExecution(1); + + PCNET_DbgPrint(("chip stopped\n")); + + /* set the software style to 2 (32 bits) */ + NdisRawWritePortUshort(Adapter->PortOffset + RAP, CSR58); + NdisRawReadPortUshort(Adapter->PortOffset + RDP, &Data); + + Data |= SW_STYLE_2; + + NdisRawWritePortUshort(Adapter->PortOffset + RDP, Data); + + /* set up csr4: auto transmit pad, disable polling, disable transmit interrupt, dmaplus */ + NdisRawWritePortUshort(Adapter->PortOffset + RAP, CSR4); + NdisRawReadPortUshort(Adapter->PortOffset + RDP, &Data); + + Data |= CSR4_APAD_XMT | /* CSR4_DPOLL |*/ CSR4_TXSTRTM | CSR4_DMAPLUS; + NdisRawWritePortUshort(Adapter->PortOffset + RDP, Data); + + /* set up bcr18: burst read/write enable */ + NdisRawWritePortUshort(Adapter->PortOffset + RAP, BCR18); + NdisRawReadPortUshort(Adapter->PortOffset + BDP, &Data); + + Data |= BCR18_BREADE | BCR18_BWRITE ; + NdisRawWritePortUshort(Adapter->PortOffset + BDP, Data); + + /* set up csr1 and csr2 with init block */ + NdisRawWritePortUshort(Adapter->PortOffset + RAP, CSR1); + NdisRawWritePortUshort(Adapter->PortOffset + RDP, (USHORT)((ULONG)Adapter->InitializationBlockPhys & 0xffff)); + NdisRawWritePortUshort(Adapter->PortOffset + RAP, CSR2); + NdisRawWritePortUshort(Adapter->PortOffset + RDP, (USHORT)((ULONG)Adapter->InitializationBlockPhys >> 16) & 0xffff); + + PCNET_DbgPrint(("programmed with init block\n")); + + /* Set mode to 0 */ + Data = 0; + NdisRawWritePortUshort(Adapter->PortOffset + RAP, CSR15); + NdisRawWritePortUshort(Adapter->PortOffset + RDP, Data); + + /* load init block and start the card */ + NdisRawWritePortUshort(Adapter->PortOffset + RAP, CSR0); + NdisRawWritePortUshort(Adapter->PortOffset + RDP, CSR0_STRT|CSR0_INIT|CSR0_IENA); + + PCNET_DbgPrint(("card started\n")); + + Adapter->Flags &= ~RESET_IN_PROGRESS; +} + + +BOOLEAN +MiTestCard( + PADAPTER Adapter) +/* + * FUNCTION: Test the NIC + * ARGUMENTS: + * Adapter: pointer to the miniport's adapter struct + * RETURNS: + * TRUE if the test succeeds + * FALSE otherwise + * NOTES: + * - this is where to add diagnostics. This is called + * at the very end of initialization. + */ +{ + int i = 0; + UCHAR address[6]; + USHORT Data = 0; + + /* see if we can read/write now */ + NdisRawWritePortUshort(Adapter->PortOffset + RAP, CSR0); + NdisRawReadPortUshort(Adapter->PortOffset + RDP, &Data); + PCNET_DbgPrint(("Port 0x%x RAP 0x%x CSR0 0x%x RDP 0x%x, Interupt status register is 0x%x\n", Adapter->PortOffset, RAP, CSR0, RDP, Data)); + + /* read the BIA */ + for(i = 0; i < 6; i++) + NdisRawReadPortUchar(Adapter->PortOffset + i, &address[i]); + + PCNET_DbgPrint(("burned-in address: %x:%x:%x:%x:%x:%x\n", address[0], address[1], address[2], address[3], address[4], address[5])); + /* Read status flags from CSR0 */ + NdisRawWritePortUshort(Adapter->PortOffset + RAP, CSR0); + NdisRawReadPortUshort(Adapter->PortOffset + RDP, &Data); + PCNET_DbgPrint(("CSR0: 0x%x\n", Data)); + + /* Read status flags from CSR3 */ + NdisRawWritePortUshort(Adapter->PortOffset + RAP, CSR3); + NdisRawReadPortUshort(Adapter->PortOffset + RDP, &Data); + + PCNET_DbgPrint(("CSR3: 0x%x\n", Data)); + /* Read status flags from CSR4 */ + NdisRawWritePortUshort(Adapter->PortOffset + RAP, CSR4); + NdisRawReadPortUshort(Adapter->PortOffset + RDP, &Data); + PCNET_DbgPrint(("CSR4: 0x%x\n", Data)); + + /* Read status flags from CSR5 */ + NdisRawWritePortUshort(Adapter->PortOffset + RAP, CSR5); + NdisRawReadPortUshort(Adapter->PortOffset + RDP, &Data); + PCNET_DbgPrint(("CSR5: 0x%x\n", Data)); + + /* Read status flags from CSR6 */ + NdisRawWritePortUshort(Adapter->PortOffset + RAP, CSR6); + NdisRawReadPortUshort(Adapter->PortOffset + RDP, &Data); + PCNET_DbgPrint(("CSR6: 0x%x\n", Data)); + + /* finally, fire a test interrupt to test the ISR */ + NdisRawWritePortUshort(Adapter->PortOffset + RAP, CSR4); + NdisRawReadPortUshort(Adapter->PortOffset + RDP, &Data); + Data |= CSR4_UINTCMD; + NdisRawWritePortUshort(Adapter->PortOffset + RDP, Data); + PCNET_DbgPrint(("just wrote 0x%x to CSR4 for test interrupt\n", Data)); + + return TRUE; +} + + +NDIS_STATUS +STDCALL +MiniportInitialize( + OUT PNDIS_STATUS OpenErrorStatus, + OUT PUINT SelectedMediumIndex, + IN PNDIS_MEDIUM MediumArray, + IN UINT MediumArraySize, + IN NDIS_HANDLE MiniportAdapterHandle, + IN NDIS_HANDLE WrapperConfigurationContext) +/* + * FUNCTION: Initialize a new miniport + * ARGUMENTS: + * OpenErrorStatus: pointer to a var to return status info in + * SelectedMediumIndex: index of the selected medium (will be NdisMedium802_3) + * MediumArray: array of media that we can pick from + * MediumArraySize: size of MediumArray + * MiniportAdapterHandle: NDIS-assigned handle for this miniport instance + * WrapperConfigurationContext: temporary NDIS-assigned handle for passing + * to configuration APIs + * RETURNS: + * NDIS_STATUS_SUCCESS on success + * NDIS_STATUS_FAILURE on general failure + * NDIS_STATUS_UNSUPPORTED_MEDIA on not finding 802_3 in the MediaArray + * NDIS_STATUS_RESOURCES on insufficient system resources + * NDIS_STATUS_ADAPTER_NOT_FOUND on not finding the adapter + * NOTES: + * - Called by NDIS at PASSIVE_LEVEL, once per detected card + * - Will int 3 on failure of MiTestCard if DBG=1 + */ +{ + UINT i = 0; + PADAPTER Adapter = 0; + NDIS_STATUS Status = NDIS_STATUS_FAILURE; + BOOLEAN InterruptRegistered = FALSE; + + /* Pick a medium */ + for(i = 0; i < MediumArraySize; i++) + if(MediumArray[i] == NdisMedium802_3) + break; + + if(i == MediumArraySize) + { + Status = NDIS_STATUS_UNSUPPORTED_MEDIA; + PCNET_DbgPrint(("unsupported media\n")); + BREAKPOINT; + *OpenErrorStatus = Status; + return Status; + } + + *SelectedMediumIndex = i; + + /* allocate our adapter struct */ + Status = NdisAllocateMemoryWithTag((PVOID *)&Adapter, sizeof(ADAPTER), PCNET_TAG); + if(Status != NDIS_STATUS_SUCCESS) + { + Status = NDIS_STATUS_RESOURCES; + PCNET_DbgPrint(("Insufficient resources\n")); + BREAKPOINT; + *OpenErrorStatus = Status; + return Status; + } + + memset(Adapter,0,sizeof(ADAPTER)); + + Adapter->MiniportAdapterHandle = MiniportAdapterHandle; + + /* register our adapter structwith ndis */ + NdisMSetAttributesEx(Adapter->MiniportAdapterHandle, Adapter, 0, NDIS_ATTRIBUTE_BUS_MASTER, NdisInterfacePci); + + do + { + /* get registry config */ + Status = MiGetConfig(Adapter, WrapperConfigurationContext); + if(Status != NDIS_STATUS_SUCCESS) + { + PCNET_DbgPrint(("MiGetConfig failed\n")); + Status = NDIS_STATUS_ADAPTER_NOT_FOUND; + BREAKPOINT; + break; + } + + /* Card-specific detection and setup */ + Status = MiQueryCard(Adapter); + if(Status != NDIS_STATUS_SUCCESS) + { + PCNET_DbgPrint(("MiQueryCard failed\n")); + Status = NDIS_STATUS_ADAPTER_NOT_FOUND; + BREAKPOINT; + break; + } + + /* register an IO port range */ + Status = NdisMRegisterIoPortRange(&Adapter->PortOffset, Adapter->MiniportAdapterHandle, + Adapter->IoBaseAddress, NUMBER_OF_PORTS); + if(Status != NDIS_STATUS_SUCCESS) + { + PCNET_DbgPrint(("NdisMRegisterIoPortRange failed: 0x%x\n", Status)); + BREAKPOINT + break; + } + + /* Allocate map registers */ + Status = NdisMAllocateMapRegisters(Adapter->MiniportAdapterHandle, 0, + NDIS_DMA_32BITS, 8, BUFFER_SIZE); + if(Status != NDIS_STATUS_SUCCESS) + { + PCNET_DbgPrint(("NdisMAllocateMapRegisters failed: 0x%x\n", Status)); + BREAKPOINT + break; + } + + /* set up the interrupt */ + memset(&Adapter->InterruptObject, 0, sizeof(NDIS_MINIPORT_INTERRUPT)); + Status = NdisMRegisterInterrupt(&Adapter->InterruptObject, Adapter->MiniportAdapterHandle, Adapter->InterruptVector, + Adapter->InterruptVector, FALSE, TRUE, NdisInterruptLevelSensitive); + if(Status != NDIS_STATUS_SUCCESS) + { + PCNET_DbgPrint(("NdisMRegisterInterrupt failed: 0x%x\n", Status)); + BREAKPOINT + break; + } + + InterruptRegistered = TRUE; + + /* Allocate and initialize shared data structures */ + Status = MiAllocateSharedMemory(Adapter); + if(Status != NDIS_STATUS_SUCCESS) + { + Status = NDIS_STATUS_RESOURCES; + PCNET_DbgPrint(("MiAllocateSharedMemory failed", Status)); + BREAKPOINT + break; + } + + /* set up the initialization block */ + MiPrepareInitializationBlock(Adapter); + + PCNET_DbgPrint(("Interrupt registered successfully\n")); + + /* Initialize and start the chip */ + MiInitChip(Adapter); + + Status = NDIS_STATUS_SUCCESS; + } + while(0); + + if(Status != NDIS_STATUS_SUCCESS && Adapter) + { + PCNET_DbgPrint(("Error; freeing stuff\n")); + + NdisMFreeMapRegisters(Adapter->MiniportAdapterHandle); /* doesn't hurt to free if we never alloc'd? */ + + if(Adapter->PortOffset) + NdisMDeregisterIoPortRange(Adapter->MiniportAdapterHandle, Adapter->IoBaseAddress, NUMBER_OF_PORTS, Adapter->PortOffset); + + if(InterruptRegistered) + NdisMDeregisterInterrupt(&Adapter->InterruptObject); + + MiFreeSharedMemory(Adapter); + + NdisFreeMemory(Adapter, 0, 0); + } + +#if DBG + if(!MiTestCard(Adapter)) + __asm__("int $3\n"); +#endif + + PCNET_DbgPrint(("returning 0x%x\n", Status)); + *OpenErrorStatus = Status; + return Status; +} + + +VOID +STDCALL +MiniportISR( + OUT PBOOLEAN InterruptRecognized, + OUT PBOOLEAN QueueMiniportHandleInterrupt, + IN NDIS_HANDLE MiniportAdapterContext) +/* + * FUNCTION: Miniport interrupt service routine + * ARGUMENTS: + * InterruptRecognized: the interrupt was ours + * QueueMiniportHandleInterrupt: whether to queue a DPC to handle this interrupt + * MiniportAdapterContext: the context originally passed to NdisMSetAttributes + * NOTES: + * - called by NDIS at DIRQL + * - by setting QueueMiniportHandleInterrupt to TRUE, MiniportHandleInterrupt + * will be called + */ +{ + USHORT Data; + USHORT Rap; + PADAPTER Adapter = (PADAPTER)MiniportAdapterContext; + + PCNET_DbgPrint(("Called\n")); + + /* save the old RAP value */ + NdisRawReadPortUshort(Adapter->PortOffset + RAP, &Rap); + + /* is this ours? */ + NdisRawWritePortUshort(Adapter->PortOffset + RAP, CSR0); + NdisRawReadPortUshort(Adapter->PortOffset + RDP, &Data); + + if(!(Data & CSR0_INTR)) + { + PCNET_DbgPrint(("not our interrupt.\n")); + *InterruptRecognized = FALSE; + *QueueMiniportHandleInterrupt = FALSE; + } + else + { + PCNET_DbgPrint(("detected our interrupt\n")); + + /* disable interrupts */ + NdisRawWritePortUshort(Adapter->PortOffset + RAP, CSR0); + NdisRawWritePortUshort(Adapter->PortOffset + RDP, 0); + + *InterruptRecognized = TRUE; + *QueueMiniportHandleInterrupt = TRUE; + } + + /* restore the rap */ + NdisRawWritePortUshort(Adapter->PortOffset + RAP, Rap); +} + + +NDIS_STATUS +STDCALL +MiniportQueryInformation( + IN NDIS_HANDLE MiniportAdapterContext, + IN NDIS_OID Oid, + IN PVOID InformationBuffer, + IN ULONG InformationBufferLength, + OUT PULONG BytesWritten, + OUT PULONG BytesNeeded) +/* + * FUNCTION: Query an OID from the driver + * ARGUMENTS: + * MiniportAdapterContext: context originally passed to NdisMSetAttributes + * Oid: OID NDIS is querying + * InformationBuffer: pointer to buffer into which to write the results of the query + * InformationBufferLength: size in bytes of InformationBuffer + * BytesWritten: number of bytes written into InformationBuffer in response to the query + * BytesNeeded: number of bytes needed to answer the query + * RETURNS: + * NDIS_STATUS_SUCCESS on all queries + * NOTES: + * - Called by NDIS at PASSIVE_LEVEL + * - If InformationBufferLength is insufficient to store the results, return the amount + * needed in BytesNeeded and return NDIS_STATUS_INVALID_LENGTH + */ +{ + PCNET_DbgPrint(("Called\n")); + return NDIS_STATUS_SUCCESS; +} + + +NDIS_STATUS +STDCALL +MiniportReset( + OUT PBOOLEAN AddressingReset, + IN NDIS_HANDLE MiniportAdapterContext) +/* + * FUNCTION: Reset the miniport + * ARGUMENTS: + * AddressingReset: Whether or not we want NDIS to subsequently call MiniportSetInformation + * to reset our addresses and filters + * MiniportAdapterContext: context originally passed to NdisMSetAttributes + * RETURNS: + * NDIS_STATUS_SUCCESS on all requests + * Notes: + * - Called by NDIS at PASSIVE_LEVEL when it thinks we need a reset + */ +{ + PCNET_DbgPrint(("Called\n")); + return NDIS_STATUS_SUCCESS; +} + + +NDIS_STATUS +STDCALL +MiniportSetInformation( + IN NDIS_HANDLE MiniportAdapterContext, + IN NDIS_OID Oid, + IN PVOID InformationBuffer, + IN ULONG InformationBufferLength, + OUT PULONG BytesRead, + OUT PULONG BytesNeeded) +/* + * FUNCTION: Set a miniport variable (OID) + * ARGUMENTS: + * MiniportAdapterContext: context originally passed into NdisMSetAttributes + * Oid: the variable being set + * InformationBuffer: the data to set the variable to + * InformationBufferLength: number of bytes in InformationBuffer + * BytesRead: number of bytes read by us out of the buffer + * BytesNeeded: number of bytes required to satisfy the request if InformationBufferLength + * is insufficient + * RETURNS: + * NDIS_STATUS_SUCCESS on all requests + * NOTES: + * - Called by NDIS at PASSIVE_LEVEL + */ +{ + PCNET_DbgPrint(("Called\n")); + return NDIS_STATUS_SUCCESS; +} + + +NDIS_STATUS +STDCALL +MiniportSend( + IN NDIS_HANDLE MiniportAdapterContext, + IN PNDIS_PACKET Packet, + IN UINT Flags) +/* + * FUNCTION: Called by NDIS when it has a packet for the NIC to send out + * ARGUMENTS: + * MiniportAdapterContext: context originally input to NdisMSetAttributes + * Packet: The NDIS_PACKET to be sent + * Flags: Flags associated with Packet + * RETURNS: + * NDIS_STATUS_SUCCESS on all requests + * NOTES: + * - Called by NDIS at DISPATCH_LEVEL + */ +{ + PCNET_DbgPrint(("Called\n")); + return NDIS_STATUS_SUCCESS; +} + + +NTSTATUS +STDCALL +DriverEntry( + IN PDRIVER_OBJECT DriverObject, + IN PUNICODE_STRING RegistryPath) +/* + * FUNCTION: Start this driver + * ARGUMENTS: + * DriverObject: Pointer to the system-allocated driver object + * RegistryPath: Pointer to our SCM database entry + * RETURNS: + * NDIS_STATUS_SUCCESS on success + * NDIS_STATUS_FAILURE on failure + * NOTES: + * - Called by the I/O manager when the driver starts at PASSIVE_LEVEL + * - TODO: convert this to NTSTATUS return values + */ +{ + NDIS_HANDLE WrapperHandle; + NDIS_MINIPORT_CHARACTERISTICS Characteristics; + NDIS_STATUS Status; + + memset(&Characteristics, 0, sizeof(Characteristics)); + Characteristics.MajorNdisVersion = 4; + Characteristics.HaltHandler = MiniportHalt; + Characteristics.HandleInterruptHandler = MiniportHandleInterrupt; + Characteristics.InitializeHandler = MiniportInitialize; + Characteristics.ISRHandler = MiniportISR; + Characteristics.QueryInformationHandler = MiniportQueryInformation; + Characteristics.ResetHandler = MiniportReset; + Characteristics.SetInformationHandler = MiniportSetInformation; + Characteristics.u1.SendHandler = MiniportSend; + + NdisMInitializeWrapper(&WrapperHandle, DriverObject, RegistryPath, 0); + + Status = NdisMRegisterMiniport(WrapperHandle, &Characteristics, sizeof(Characteristics)); + if(Status != NDIS_STATUS_SUCCESS) + { + NdisTerminateWrapper(WrapperHandle, 0); + return NDIS_STATUS_FAILURE; + } + + return NDIS_STATUS_SUCCESS; +} + diff --git a/drivers/net/dd/pcnet/pcnet.h b/drivers/net/dd/pcnet/pcnet.h new file mode 100644 index 0000000..004279d --- /dev/null +++ b/drivers/net/dd/pcnet/pcnet.h @@ -0,0 +1,114 @@ +/* + * ReactOS AMD PCNet Driver + * Copyright (C) 1998, 1999, 2000, 2001 ReactOS Team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * PROJECT: ReactOS AMD PCNet Driver + * FILE: pcnet/pcnet.h + * PURPOSE: PCNet Device Driver + * PROGRAMMER: Vizzini (vizzini@plasmic.com) + * REVISIONS: + * 1-Sept-2003 vizzini - Created + * NOTES: + * - this is hard-coded to NDIS4 + * - this assumes a little-endian machine + * - this assumes a 32-bit machine, where sizeof(PVOID) = 32 and sizeof(USHORT) = 16 + * - this assumes 32-bit physical addresses + */ + +#ifndef _PCNET_H_ +#define _PCNET_H_ + +/* adapter struct */ +typedef struct _ADAPTER +{ + NDIS_HANDLE MiniportAdapterHandle; + ULONG Flags; + ULONG BusNumber; + ULONG SlotNumber; + ULONG InterruptVector; + ULONG IoBaseAddress; + PVOID PortOffset; + NDIS_MINIPORT_INTERRUPT InterruptObject; + ULONG CurrentReceiveDescriptorIndex; + + /* initialization block */ + ULONG InitializationBlockLength; + PINITIALIZATION_BLOCK InitializationBlockVirt; + PINITIALIZATION_BLOCK InitializationBlockPhys; + + /* transmit descriptor ring */ + ULONG TransmitDescriptorRingLength; + PTRANSMIT_DESCRIPTOR TransmitDescriptorRingVirt; + PTRANSMIT_DESCRIPTOR TransmitDescriptorRingPhys; + + /* transmit buffers */ + ULONG TransmitBufferLength; + PCHAR TransmitBufferPtrVirt; + PCHAR TransmitBufferPtrPhys; + + /* receive descriptor ring */ + ULONG ReceiveDescriptorRingLength; + PRECEIVE_DESCRIPTOR ReceiveDescriptorRingVirt; + PRECEIVE_DESCRIPTOR ReceiveDescriptorRingPhys; + + /* receive buffers */ + ULONG ReceiveBufferLength; + PCHAR ReceiveBufferPtrVirt; + PCHAR ReceiveBufferPtrPhys; + +} ADAPTER, *PADAPTER; + +/* operational constants */ +#define NUMBER_OF_BUFFERS 0x20 +#define LOG_NUMBER_OF_BUFFERS 5 /* log2(NUMBER_OF_BUFFERS) */ +#define BUFFER_SIZE 0x600 + +/* flags */ +#define RESET_IN_PROGRESS 0x1 + +/* debugging */ +#if DBG +#define PCNET_DbgPrint(_x) \ +{\ + DbgPrint("%s:%d %s: ", __FILE__, __LINE__, __FUNCTION__); \ + DbgPrint _x; \ +} +#else +#define PCNET_DbgPrint(_x) +#endif + +#if DBG +#define BREAKPOINT __asm__ ("int $3\n"); +#else +#define BREAKPOINT +#endif + +/* memory pool tag */ +#define PCNET_TAG 0xbaadf00d + +/* stack validation */ +#define STACKENTER __asm__("movl %%esp, %0\n" : "=m" (esp)); + +#define STACKLEAVE {\ + unsigned long esptemp = esp; \ + __asm__ ("movl %%esp, %0\n": "=m" (esp)); \ + if(esp != esptemp) \ + __asm__ ("int $3\n"); \ +} + +#endif // _PCNET_H_ + diff --git a/drivers/net/dd/pcnet/pcnet.rc b/drivers/net/dd/pcnet/pcnet.rc new file mode 100644 index 0000000..5c0dcea --- /dev/null +++ b/drivers/net/dd/pcnet/pcnet.rc @@ -0,0 +1,38 @@ +#include +#include + +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +VS_VERSION_INFO VERSIONINFO + FILEVERSION RES_UINT_FV_MAJOR,RES_UINT_FV_MINOR,RES_UINT_FV_REVISION,RES_UINT_FV_BUILD + PRODUCTVERSION RES_UINT_PV_MAJOR,RES_UINT_PV_MINOR,RES_UINT_PV_REVISION,RES_UINT_PV_BUILD + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x40004L + FILETYPE 0x2L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "CompanyName", RES_STR_COMPANY_NAME + VALUE "FileDescription", "PCNet Ethernet PCI Driver\0" + VALUE "FileVersion", "0.0.1\0" + VALUE "InternalName", "pcnet\0" + VALUE "LegalCopyright", RES_STR_LEGAL_COPYRIGHT + VALUE "OriginalFilename", "pcnet.sys\0" + VALUE "ProductName", RES_STR_PRODUCT_NAME + VALUE "ProductVersion", RES_STR_PRODUCT_VERSION + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END + diff --git a/drivers/net/dd/pcnet/pcnethw.h b/drivers/net/dd/pcnet/pcnethw.h new file mode 100644 index 0000000..7176ece --- /dev/null +++ b/drivers/net/dd/pcnet/pcnethw.h @@ -0,0 +1,411 @@ +/* + * ReactOS AMD PCNet Driver + * Copyright (C) 1998, 1999, 2000, 2001 ReactOS Team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * PROJECT: ReactOS AMD PCNet Driver + * FILE: drivers/net/dd/pcnet/pcnethw.h + * PURPOSE: PCNet hardware configuration constants + * PROGRAMMER: Vizzini (vizzini@plasmic.com) + * REVISIONS: + * 1-Sept-2003 vizzini - Created + * NOTES: + * - This file represents a clean re-implementation from the AMD + * PCNet II chip documentation (Am79C790A, pub# 19436). + */ + +/* when in 32-bit mode, most registers require the top 16 bits be 0. */ +#define MASK16(__x__) ((__x__) & 0x0000ffff) + +#define NUMBER_OF_PORTS 0x20 /* number of i/o ports the board requires */ + +/* offsets of important registers */ +#define RDP 0x10 /* same address in 16-bit and 32-bit IO mode */ + +#define RAP16 0x12 +#define RESET16 0x14 +#define BDP16 0x16 + +#define RAP32 0x14 +#define RESET32 0x18 +#define BDP32 0x1c + +/* NOTE: vmware doesn't support 32-bit i/o programming so we use 16-bit */ +#define RAP RAP16 +#define BDP BDP16 + +/* pci id of the device */ +#define PCI_ID 0x20001022 +#define VEN_ID 0x1022 +#define DEV_ID 0x2000 + +/* software style constants */ +#define SW_STYLE_0 0 +#define SW_STYLE_1 1 +#define SW_STYLE_2 2 +#define SW_STYLE_3 3 + +/* control and status registers */ +#define CSR0 0x0 /* controller status register */ +#define CSR1 0x1 /* init block address 0 */ +#define CSR2 0x2 /* init block address 1 */ +#define CSR3 0x3 /* interrupt masks and deferral control */ +#define CSR4 0x4 /* test and features control */ +#define CSR5 0x5 /* extended control and interrupt */ +#define CSR6 0x6 /* rx/tx descriptor table length */ +#define CSR8 0x8 /* logical address filter 0 */ +#define CSR9 0x9 /* logical address filter 1 */ +#define CSR10 0xa /* logical address filter 2 */ +#define CSR11 0xb /* logical address filter 3 */ +#define CSR12 0xc /* physical address register 0 */ +#define CSR13 0xd /* physical address register 1 */ +#define CSR14 0xe /* physical address register 2 */ +#define CSR15 0xf /* Mode */ +#define CSR16 0x10 /* initialization block address lower */ +#define CSR17 0x11 /* initialization block address upper */ +#define CSR18 0x12 /* current receive buffer address lower */ +#define CSR19 0x13 /* current receive buffer address upper */ +#define CSR20 0x14 /* current transmit buffer address lower */ +#define CSR21 0x15 /* current transmit buffer address upper */ +#define CSR22 0x16 /* next receive buffer address lower */ +#define CSR23 0x17 /* next receive buffer address upper */ +#define CSR24 0x18 /* base address of receive descriptor ring lower */ +#define CSR25 0x19 /* base address of receive descriptor ring upper */ +#define CSR26 0x1a /* next receive descriptor address lower */ +#define CSR27 0x1b /* next receive descriptor address upper */ +#define CSR28 0x1c /* current receive descriptor address lower */ +#define CSR29 0x1d /* current receive descriptor address upper */ +#define CSR30 0x1e /* base address of transmit descriptor ring lower */ +#define CSR31 0x1f /* base address of transmit descriptor ring upper */ +#define CSR32 0x20 /* next transmit descriptor address lower */ +#define CSR33 0x21 /* next transmit descriptor address upper */ +#define CSR34 0x22 /* current transmit descriptor address lower */ +#define CSR35 0x23 /* current transmit descriptor address upper */ +#define CSR36 0x24 /* next next receive descriptor address lower */ +#define CSR37 0x25 /* next next receive descriptor address upper */ +#define CSR38 0x26 /* next next transmit descriptor address lower */ +#define CSR39 0x27 /* next next transmit descriptor address upper */ +#define CSR40 0x28 /* current receive byte count */ +#define CSR41 0x29 /* current receive status */ +#define CSR42 0x2a /* current transmit byte count */ +#define CSR43 0x2b /* current transmit status */ +#define CSR44 0x2c /* next receive byte count */ +#define CSR45 0x2d /* next receive status */ +#define CSR46 0x2e /* poll time counter */ +#define CSR47 0x2f /* polling interval */ +#define CSR58 0x3a /* software style */ +#define CSR60 0x3c /* previous transmit descriptor address lower */ +#define CSR61 0x3d /* previous transmit descriptor address upper */ +#define CSR62 0x3e /* previous transmit byte count */ +#define CSR63 0x3f /* previous transmit status */ +#define CSR64 0x40 /* next transmit buffer address lower */ +#define CSR65 0x41 /* next transmit buffer address upper */ +#define CSR66 0x42 /* next transmit byte count */ +#define CSR67 0x43 /* next transmit status */ +#define CSR72 0x48 /* receive descriptor ring counter */ +#define CSR74 0x4a /* transmit descriptor ring counter */ +#define CSR76 0x4c /* receive descriptor ring length */ +#define CSR78 0x4e /* transmit descriptor ring length */ +#define CSR80 0x50 /* dma transfer counter and fifo watermark control */ +#define CSR82 0x52 /* bus activity timer */ +#define CSR84 0x54 /* dma address register lower */ +#define CSR85 0x55 /* dma address register upper */ +#define CSR86 0x56 /* buffer byte counter */ +#define CSR88 0x58 /* chip id register lower */ +#define CSR89 0x59 /* chip id register upper */ +#define CSR94 0x5e /* transmit time domain reflectometry count */ +#define CSR100 0x64 /* bus timeout */ +#define CSR112 0x70 /* missed frame count */ +#define CSR114 0x72 /* receive collision count */ +#define CSR122 0x7a /* advanced feature control */ +#define CSR124 0x7c /* test register control */ + +/* bus configuration registers */ +#define BCR2 0x2 /* miscellaneous configuration */ +#define BCR4 0x4 /* link status led */ +#define BCR5 0x5 /* led1 status */ +#define BCR6 0x6 /* led2 status */ +#define BCR7 0x7 /* led3 status */ +#define BCR9 0x9 /* full-duplex control */ +#define BCR16 0x10 /* i/o base address lower */ +#define BCR17 0x11 /* i/o base address upper */ +#define BCR18 0x12 /* burst and bus control register */ +#define BCR19 0x13 /* eeprom control and status */ +#define BCR20 0x14 /* software style */ +#define BCR21 0x15 /* interrupt control */ +#define BCR22 0x16 /* pci latency register */ + +/* CSR0 bits */ +#define CSR0_INIT 0x1 /* read initialization block */ +#define CSR0_STRT 0x2 /* start the chip */ +#define CSR0_STOP 0x4 /* stop the chip */ +#define CSR0_TDMD 0x8 /* transmit demand */ +#define CSR0_TXON 0x10 /* transmit on */ +#define CSR0_RXON 0x20 /* receive on */ +#define CSR0_IENA 0x40 /* interrupt enabled */ +#define CSR0_INTR 0x80 /* interrupting */ +#define CSR0_IDON 0x100 /* initialization done */ +#define CSR0_TINT 0x200 /* transmit interrupt */ +#define CSR0_RINT 0x400 /* receive interrupt */ +#define CSR0_MERR 0x800 /* memory error */ +#define CSR0_MISS 0x1000 /* missed frame */ +#define CSR0_CERR 0x2000 /* collision error */ +#define CSR0_BABL 0x4000 /* babble */ +#define CSR0_ERR 0x8000 /* error */ + +/* CSR3 bits */ +#define CSR3_BSWP 0x4 /* byte swap */ +#define CSR3_EMBA 0x8 /* enable modified backoff algorithm */ +#define CSR3_DXMT2PD 0x10 /* disable transmit two-part deferral */ +#define CSR3_LAPPEN 0x20 /* lookahead packet processing enable */ +#define CSR3_DXSUFLO 0x40 /* disable transmit stop on underflow */ +#define CSR3_IDONM 0x100 /* initialization done mask */ +#define CSR3_TINTM 0x200 /* transmit interrupt mask */ +#define CSR3_RINTM 0x400 /* receive interrupt mask */ +#define CSR3_MERRM 0x800 /* memory error interrupt mask */ +#define CSR3_MISSM 0x1000 /* missed frame interrupt mask */ +#define CSR3_BABLM 0x4000 /* babble interrupt mask */ + +/* CSR4 bits */ +#define CSR4_JABM 0x1 /* jabber interrupt mask */ +#define CSR4_JAB 0x2 /* interrupt on jabber error */ +#define CSR4_TXSTRTM 0x4 /* transmit start interrupt mask */ +#define CSR4_TXSTRT 0x8 /* interrupt on transmit start */ +#define CSR4_RCVCCOM 0x10 /* receive collision counter overflow mask */ +#define CSR4_RCVCCO 0X20 /* interrupt on receive collision counter overflow */ +#define CSR4_UINT 0x40 /* user interrupt */ +#define CSR4_UINTCMD 0x80 /* user interrupt command */ +#define CSR4_MFCOM 0x100 /* missed frame counter overflow mask */ +#define CSR4_MFCO 0x200 /* interrupt on missed frame counter overflow */ +#define CSR4_ASTRP_RCV 0x400 /* auto pad strip on receive */ +#define CSR4_APAD_XMT 0x800 /* auto pad on transmit */ +#define CSR4_DPOLL 0x1000 /* disable transmit polling */ +#define CSR4_TIMER 0x2000 /* enable bus activity timer */ +#define CSR4_DMAPLUS 0x4000 /* set to 1 for pci */ +#define CSR4_EN124 0x8000 /* enable CSR124 access */ + +/* CSR5 bits */ +#define CSR5_SPND 0x1 /* suspend */ +#define CSR5_MPMODE 0x2 /* magic packet mode */ +#define CSR5_MPEN 0x4 /* magic packet enable */ +#define CSR5_MPINTE 0x8 /* magic packet interrupt enable */ +#define CSR5_MPINT 0x10 /* magic packet interrupt */ +#define CSR5_MPPLBA 0x20 /* magic packet physical logical broadcast accept */ +#define CSR5_EXDINTE 0x40 /* excessive deferral interrupt enable */ +#define CSR5_EXDINT 0x80 /* excessive deferral interrupt */ +#define CSR5_SLPINTE 0x100 /* sleep interrupt enable */ +#define CSR5_SLPINT 0x200 /* sleep interrupt */ +#define CSR5_SINE 0x400 /* system interrupt enable */ +#define CSR5_SINT 0x800 /* system interrupt */ +#define CSR5_LTINTEN 0x4000 /* last transmit interrupt enable */ +#define CSR5_TOKINTD 0x8000 /* transmit ok interrupt disable */ + +/* CSR15 bits */ +#define CSR15_DRX 0x1 /* disable receiver */ +#define CSR15_DTX 0x2 /* disable transmitter */ +#define CSR15_LOOP 0x4 /* loopback enable */ +#define CSR15_DXMTFCS 0x8 /* disable transmit fcs */ +#define CSR15_FCOLL 0x10 /* force collision */ +#define CSR15_DRTY 0x20 /* disable retry */ +#define CSR15_INTL 0x40 /* internal loopback */ +#define CSR15_PORTSEL0 0x80 /* port selection bit 0 */ +#define CSR15_PORTSEL1 0x100 /* port selection bit 1 */ +#define CSR15_LRT 0x200 /* low receive threshold - same as TSEL */ +#define CSR15_TSEL 0x200 /* transmit mode select - same as LRT */ +#define CSR15_MENDECL 0x400 /* mendec loopback mode */ +#define CSR15_DAPC 0x800 /* disable automatic parity correction */ +#define CSR15_DLNKTST 0x1000 /* disable link status */ +#define CSR15_DRCVPA 0x2000 /* disable receive physical address */ +#define CSR15_DRCVBC 0x4000 /* disable receive broadcast */ +#define CSR15_PROM 0x8000 /* promiscuous mode */ + +/* CSR58 bits */ +#define CSR58_SSIZE32 0x100 /* 32-bit software size */ +#define CSR58_CSRPCNET 0x200 /* csr pcnet-isa configuration */ +#define CSR58_APERREN 0x400 /* advanced parity error handling enable */ + +/* CSR124 bits */ +#define CSR124_RPA 0x4 /* runt packet accept */ + +/* BCR2 bits */ +#define BCR2_ASEL 0x2 /* auto-select media */ +#define BCR2_AWAKE 0x4 /* select sleep mode */ +#define BCR2_EADISEL 0x8 /* eadi select */ +#define BCR2_DXCVRPOL 0x10 /* dxcvr polarity */ +#define BCR2_DXCVRCTL 0x20 /* dxcvr control */ +#define BCR2_INTLEVEL 0x80 /* interrupt level/edge */ +#define BCR2_APROMWE 0x100 /* address prom write enable */ +#define BCR2_TMAULOOP 0x4000 /* t-mau transmit on loopback */ + +/* BCR4 bits */ +#define BCR4_COLE 0x1 /* collision status enable */ +#define BCR4_JABE 0x2 /* jabber status enable */ +#define BCR4_RCVE 0x4 /* receive status enable */ +#define BCR4_RXPOLE 0x8 /* receive polarity status enable */ +#define BCR4_XMTE 0x10 /* transmit status enable */ +#define BCR4_RCVME 0x20 /* receive match status enable */ +#define BCR4_LNKSTE 0x40 /* link status enable */ +#define BCR4_PSE 0x80 /* pulse stretcher enable */ +#define BCR4_FDLSE 0x100 /* full-duplex link status enable */ +#define BCR4_MPSE 0x200 /* magic packet status enable */ +#define BCR4_LEDDIS 0x2000 /* led disable */ +#define BCR4_LEDPOL 0x4000 /* led polarity */ +#define BCR4_LEDOUT 0x8000 /* led output pin value */ + +/* BCR5 bits */ +#define BCR5_COLE 0x1 /* collision status enable */ +#define BCR5_JABE 0x2 /* jabber status enable */ +#define BCR5_RCVE 0x4 /* receive status enable */ +#define BCR5_RXPOLE 0x8 /* receive polarity status enable */ +#define BCR5_XMTE 0x10 /* transmit status enable */ +#define BCR5_RCVME 0x20 /* receive match status enable */ +#define BCR5_LNKSTE 0x40 /* link status enable */ +#define BCR5_PSE 0x80 /* pulse stretcher enable */ +#define BCR5_FDLSE 0x100 /* full-duplex link status enable */ +#define BCR5_MPSE 0x200 /* magic packet status enable */ +#define BCR5_LEDDIS 0x2000 /* led disable */ +#define BCR5_LEDPOL 0x4000 /* led polarity */ +#define BCR5_LEDOUT 0x8000 /* led output pin value */ + +/* BCR6 bits */ +#define BCR6_COLE 0x1 /* collision status enable */ +#define BCR6_JABE 0x2 /* jabber status enable */ +#define BCR6_RCVE 0x4 /* receive status enable */ +#define BCR6_RXPOLE 0x8 /* receive polarity status enable */ +#define BCR6_XMTE 0x10 /* transmit status enable */ +#define BCR6_RCVME 0x20 /* receive match status enable */ +#define BCR6_LNKSTE 0x40 /* link status enable */ +#define BCR6_PSE 0x80 /* pulse stretcher enable */ +#define BCR6_FDLSE 0x100 /* full-duplex link status enable */ +#define BCR6_MPSE 0x200 /* magic packet status enable */ +#define BCR6_LEDDIS 0x2000 /* led disable */ +#define BCR6_LEDPOL 0x4000 /* led polarity */ +#define BCR6_LEDOUT 0x8000 /* led output pin value */ + +/* BCR7 bits */ +#define BCR7_COLE 0x1 /* collision status enable */ +#define BCR7_JABE 0x2 /* jabber status enable */ +#define BCR7_RCVE 0x4 /* receive status enable */ +#define BCR7_RXPOLE 0x8 /* receive polarity status enable */ +#define BCR7_XMTE 0x10 /* transmit status enable */ +#define BCR7_RCVME 0x20 /* receive match status enable */ +#define BCR7_LNKSTE 0x40 /* link status enable */ +#define BCR7_PSE 0x80 /* pulse stretcher enable */ +#define BCR7_FDLSE 0x100 /* full-duplex link status enable */ +#define BCR7_MPSE 0x200 /* magic packet status enable */ +#define BCR7_LEDDIS 0x2000 /* led disable */ +#define BCR7_LEDPOL 0x4000 /* led polarity */ +#define BCR7_LEDOUT 0x8000 /* led output pin value */ + +/* BCR9 bits */ +#define BCR9_FDEN 0x1 /* full-duplex enable */ +#define BCR9_AUIFD 0x2 /* aui full-duplex */ +#define BCR9_FDRPAD 0x4 /* full-duplex runt packet accept disable */ + +/* BCR18 bits */ +#define BCR18_BWRITE 0x20 /* burst write enable */ +#define BCR18_BREADE 0x40 /* burst read enable */ +#define BCR18_DWIO 0x80 /* dword i/o enable */ +#define BCR18_EXTREQ 0x100 /* extended request */ +#define BCR18_MEMCMD 0x200 /* memory command */ + +/* BCR19 bits */ +#define BCR19_EDI 0x1 /* eeprom data in - same as EDO */ +#define BCR19_ED0 0x1 /* eeprom data out - same as EDI */ +#define BCR19_ESK 0x2 /* eeprom serial clock */ +#define BCR19_ECS 0x4 /* eeprom chip select */ +#define BCR19_EEN 0x8 /* eeprom port enable */ +#define BCR19_EEDET 0x2000 /* eeprom detect */ +#define BCR19_PREAD 0x4000 /* eeprom read */ +#define BCR19_PVALID 0x8000 /* eeprom valid */ + +/* BCR20 bits */ +#define BCR20_SSIZE32 0x100 /* 32-bit software size */ +#define BCR20_CSRPCNET 0x200 /* csr pcnet-isa configuration */ +#define BCR20_APERREN 0x400 /* advanced parity error handling enable */ + +/* initialization block for 32-bit software style */ +typedef struct _INITIALIZATION_BLOCK +{ + USHORT MODE; /* card mode (csr15) */ + UCHAR RLEN; /* encoded number of receive descriptor ring entries */ + UCHAR TLEN; /* encoded number of transmit descriptor ring entries */ + UCHAR PADR[6]; /* physical address */ + USHORT RES; /* reserved */ + UCHAR LADR[8]; /* logical address */ + ULONG RDRA; /* receive descriptor ring address */ + ULONG TDRA; /* transmit descriptor ring address */ +} INITIALIZATION_BLOCK, *PINITIALIZATION_BLOCK; + +/* receive descriptor, software stle 2 (32-bit) */ +typedef struct _RECEIVE_DESCRIPTOR +{ + ULONG RBADR; /* receive buffer address */ + USHORT BCNT; /* two's compliment buffer byte count - NOTE: always OR with 0xf000 */ + USHORT FLAGS; /* flags - always and with 0xfff0 */ + USHORT MCNT; /* message byte count ; always AND with 0x0fff */ + UCHAR RPC; /* runt packet count */ + UCHAR RCC; /* receive collision count */ + ULONG RES; /* resereved */ +} RECEIVE_DESCRIPTOR, *PRECEIVE_DESCRIPTOR; + +/* receive descriptor flags */ +#define RD_BAM 0x10 /* broadcast address match */ +#define RD_LAFM 0x20 /* logical address filter match */ +#define RD_PAM 0x40 /* physical address match */ +#define RD_BPE 0x80 /* bus parity error */ +#define RD_ENP 0x100 /* end of packet */ +#define RD_STP 0x200 /* start of packet */ +#define RD_BUFF 0x400 /* buffer error */ +#define RD_CRC 0x800 /* crc error */ +#define RD_OFLO 0x1000 /* overflow error */ +#define RD_FRAM 0x2000 /* framing error */ +#define RD_ERR 0x4000 /* an error bit is set */ +#define RD_OWN 0x8000 /* buffer ownership (0=host, 1=nic) */ + +/* transmit descriptor, software style 2 */ +typedef struct _TRANSMIT_DESCRIPTOR +{ + ULONG TBADR; /* transmit buffer address */ + USHORT BCNT; /* two's compliment buffer byte count - OR with 0xf000 */ + USHORT FLAGS; /* flags */ + USHORT TRC; /* transmit retry count (AND with 0x000f */ + USHORT FLAGS2; /* more flags */ + ULONG RES; /* reserved */ +} TRANSMIT_DESCRIPTOR, *PTRANSMIT_DESCRIPTOR; + +/* transmit descriptor flags */ +#define TD1_BPE 0x80 /* bus parity error */ +#define TD1_ENP 0x100 /* end of packet */ +#define TD1_STP 0x200 /* start of packet */ +#define TD1_DEF 0x400 /* frame transmission deferred */ +#define TD1_ONE 0x800 /* exactly one retry was needed for transmission */ +#define TD1_MORE 0x1000 /* more than 1 transmission retry required - same as LTINT */ +#define TD1_LTINT 0x1000 /* suppress transmit success interrupt - same as MORE */ +#define TD1_ADD_FCS 0x2000 /* force fcs generation - same as NO_FCS */ +#define TD1_NO_FCS 0x2000 /* prevent fcs generation - same as ADD_FCS */ +#define TD1_ERR 0x4000 /* an error bit is set */ +#define TD1_OWN 0x8000 /* buffer ownership */ + +/* transmit descriptor flags2 flags */ +#define TD2_RTRY 0x400 /* retry error */ +#define TD2_LCAR 0x800 /* loss of carrier */ +#define TD2_LCOL 0x1000 /* late collision */ +#define TD2_EXDEF 0x2000 /* excessive deferral */ +#define TD2_UFLO 0x4000 /* buffer underflow */ +#define TD2_BUFF 0x8000 /* buffer error */ + + diff --git a/drivers/net/ndis/.cvsignore b/drivers/net/ndis/.cvsignore index 942ff9d..ccae155 100644 --- a/drivers/net/ndis/.cvsignore +++ b/drivers/net/ndis/.cvsignore @@ -4,3 +4,4 @@ ndis.coff *.o *.sym *.sys +*.map diff --git a/drivers/net/ndis/Makefile b/drivers/net/ndis/Makefile index 91634da..78379d1 100644 --- a/drivers/net/ndis/Makefile +++ b/drivers/net/ndis/Makefile @@ -6,7 +6,7 @@ TARGET_TYPE = export_driver TARGET_NAME = ndis -TARGET_CFLAGS = -I./include -DNDIS_WRAPPER -DBINARY_COMPATIBLE=1 +TARGET_CFLAGS = -I./include -DNDIS_WRAPPER -DDBG=1 -Wall TARGET_OBJECTS = \ ndis/main.o \ @@ -16,7 +16,9 @@ TARGET_OBJECTS = \ ndis/cl.o \ ndis/cm.o \ ndis/co.o \ + ndis/config.o \ ndis/control.o \ + ndis/enum.o \ ndis/hardware.o \ ndis/io.o \ ndis/memory.o \ diff --git a/drivers/net/ndis/include/debug.h b/drivers/net/ndis/include/debug.h index fbe3f88..c60e136 100644 --- a/drivers/net/ndis/include/debug.h +++ b/drivers/net/ndis/include/debug.h @@ -46,6 +46,8 @@ extern DWORD DebugTraceLevel; #endif /* _MSC_VER */ +/* ASSERT is in rtl.h */ +#if 0 #ifdef ASSERT #undef ASSERT #endif @@ -55,7 +57,7 @@ extern DWORD DebugTraceLevel; #else /* NASSERT */ #define ASSERT(x) if (!(x)) { NDIS_DbgPrint(MIN_TRACE, ("Assertion "#x" failed at %s:%d\n", __FILE__, __LINE__)); KeBugCheck(0); } #endif /* NASSERT */ - +#endif #define ASSERT_IRQL(x) ASSERT(KeGetCurrentIrql() <= (x)) #else /* DBG */ @@ -63,7 +65,7 @@ extern DWORD DebugTraceLevel; #define NDIS_DbgPrint(_t_, _x_) #define ASSERT_IRQL(x) -#define ASSERT(x) +/*#define ASSERT(x)*/ #endif /* DBG */ diff --git a/drivers/net/ndis/include/miniport.h b/drivers/net/ndis/include/miniport.h index 1ae54f0..dfb0504 100644 --- a/drivers/net/ndis/include/miniport.h +++ b/drivers/net/ndis/include/miniport.h @@ -26,10 +26,58 @@ typedef struct _MINIPORT_DRIVER { WORK_QUEUE_ITEM WorkItem; /* Work item */ PDRIVER_OBJECT DriverObject; /* Driver object of miniport */ LIST_ENTRY AdapterListHead; /* Adapters created by miniport */ + PUNICODE_STRING RegistryPath; /* SCM Registry key */ } MINIPORT_DRIVER, *PMINIPORT_DRIVER; +/* resources allocated on behalf on the miniport */ +#define MINIPORT_RESOURCE_TYPE_MEMORY 0 +typedef struct _MINIPORT_RESOURCE { + LIST_ENTRY ListEntry; + ULONG ResourceType; + PVOID Resource; +} MINIPORT_RESOURCE, *PMINIPORT_RESOURCE; + +/* Configuration context */ +typedef struct _MINIPORT_CONFIGURATION_CONTEXT { + NDIS_HANDLE Handle; + LIST_ENTRY ResourceListHead; + KSPIN_LOCK ResourceLock; +} MINIPORT_CONFIGURATION_CONTEXT, *PMINIPORT_CONFIGURATION_CONTEXT; + +/* Bugcheck callback context */ +typedef struct _MINIPORT_BUGCHECK_CONTEXT { + PVOID DriverContext; + ADAPTER_SHUTDOWN_HANDLER ShutdownHandler; + PKBUGCHECK_CALLBACK_RECORD CallbackRecord; +} MINIPORT_BUGCHECK_CONTEXT, *PMINIPORT_BUGCHECK_CONTEXT; + +/* allocated map register list */ +typedef struct _ADAPTER_MAP_REGISTER_LIST { + LIST_ENTRY ListEntry; + UINT NumRegisters; + PVOID MapRegister; +} ADAPTER_MAP_REGISTER_LIST, *PADAPTER_MAP_REGISTER_LIST; + +/* a miniport's shared memory */ +typedef struct _MINIPORT_SHARED_MEMORY { + PADAPTER_OBJECT AdapterObject; + ULONG Length; + PHYSICAL_ADDRESS PhysicalAddress; + PVOID VirtualAddress; + BOOLEAN Cached; +} MINIPORT_SHARED_MEMORY, *PMINIPORT_SHARED_MEMORY; + #define GET_MINIPORT_DRIVER(Handle)((PMINIPORT_DRIVER)Handle) +/* detected adapters that are driverless */ +typedef struct _ORPHAN_ADATER { + LIST_ENTRY ListEntry; + NDIS_STRING RegistryPath; + INTERFACE_TYPE BusType; + ULONG BusNumber; + ULONG SlotNumber; +} ORPHAN_ADAPTER, *PORPHAN_ADAPTER; + /* Information about a logical adapter */ typedef struct _LOGICAL_ADAPTER { NDIS_MINIPORT_BLOCK NdisMiniportBlock; /* NDIS defined fields */ @@ -65,6 +113,23 @@ typedef struct _LOGICAL_ADAPTER { PNDIS_PACKET PacketQueueTail; /* Head of packet queue */ PNDIS_PACKET LoopPacket; /* Current packet beeing looped */ + PMINIPORT_BUGCHECK_CONTEXT BugcheckContext; /* Adapter's shutdown handler */ + UINT MapRegistersRequested; /* Number of outstanding map registers requested */ + PADAPTER_OBJECT AdapterObject; /* Adapter object for DMA ops */ + ADAPTER_MAP_REGISTER_LIST MapRegisterList; /* List of allocated map registers */ + KEVENT DmaEvent; /* Event to support DMA register allocation */ + KSPIN_LOCK DmaLock; /* Spinlock to protect the dma list */ + UINT BusNumber; + INTERFACE_TYPE BusType; + UINT SlotNumber; + ULONG Irql; + ULONG Vector; + KAFFINITY Affinity; + PHYSICAL_ADDRESS BaseIoAddress; + PHYSICAL_ADDRESS BaseMemoryAddress; /* multiple ranges? */ + ULONG DmaChannel; + ULONG DmaPort; + PNDIS_MINIPORT_TIMER Timer; } LOGICAL_ADAPTER, *PLOGICAL_ADAPTER; #define GET_LOGICAL_ADAPTER(Handle)((PLOGICAL_ADAPTER)Handle) @@ -128,6 +193,16 @@ MiniDoRequest( PLOGICAL_ADAPTER Adapter, PNDIS_REQUEST NdisRequest); +BOOLEAN +NdisFindDevice( + UINT VendorID, + UINT DeviceID, + PUINT BusNumber, + PUINT SlotNumber); + +VOID +NdisStartDevices(); + #endif /* __MINIPORT_H */ /* EOF */ diff --git a/drivers/net/ndis/include/protocol.h b/drivers/net/ndis/include/protocol.h index 583d186..b2b97f0 100644 --- a/drivers/net/ndis/include/protocol.h +++ b/drivers/net/ndis/include/protocol.h @@ -9,7 +9,8 @@ #define __PROTOCOL_H #include -#include +#include +#include "../include/miniport.h" typedef struct _PROTOCOL_BINDING { diff --git a/drivers/net/ndis/ndis.def b/drivers/net/ndis/ndis.def index 28373c0..b04806b 100644 --- a/drivers/net/ndis/ndis.def +++ b/drivers/net/ndis/ndis.def @@ -10,8 +10,8 @@ EthCreateFilter@28 EthDeleteFilter@4 EthDeleteFilterOpenAdapter@12 EthFilterAdjust@20 -;EthFilterDprIndicateReceive@32 ? -;EthFilterDprIndicateReceiveComplete@4 ? +EthFilterDprIndicateReceive@32 +EthFilterDprIndicateReceiveComplete@4 EthFilterIndicateReceive@32 EthFilterIndicateReceiveComplete@4 EthNoteFilterOpenAdapter@16 @@ -171,6 +171,7 @@ NdisInterlockedInsertTailList@12 NdisInterlockedPopEntrySList@8 NdisInterlockedPushEntrySList@12 NdisInterlockedRemoveHeadList@8 +NdisInitializeListHead@4 NdisMAllocateMapRegisters@20 NdisMAllocateSharedMemory@20 NdisMAllocateSharedMemoryAsync@16 @@ -296,7 +297,7 @@ NdisUpcaseUnicodeString@8 NdisUpdateSharedMemory@20 NdisWaitEvent@8 NdisWriteConfiguration@16 -NdisWriteErrorLogEntry@16 +NdisWriteErrorLogEntry NdisWriteEventLogEntry@28 NdisWritePciSlotInformation@20 NdisWritePcmciaAttributeMemory@16 diff --git a/drivers/net/ndis/ndis.edf b/drivers/net/ndis/ndis.edf index c89a025..3ebde7c 100644 --- a/drivers/net/ndis/ndis.edf +++ b/drivers/net/ndis/ndis.edf @@ -10,8 +10,8 @@ EthCreateFilter=EthCreateFilter@28 EthDeleteFilter=EthDeleteFilter@4 EthDeleteFilterOpenAdapter=EthDeleteFilterOpenAdapter@12 EthFilterAdjust=EthFilterAdjust@20 -;EthFilterDprIndicateReceive@32 ? -;EthFilterDprIndicateReceiveComplete@4 ? +EthFilterDprIndicateReceive=EthFilterDprIndicateReceive@32 +EthFilterDprIndicateReceiveComplete=EthFilterDprIndicateReceiveComplete@4 EthFilterIndicateReceive=EthFilterIndicateReceive@32 EthFilterIndicateReceiveComplete=EthFilterIndicateReceiveComplete@4 EthNoteFilterOpenAdapter=EthNoteFilterOpenAdapter@16 @@ -166,6 +166,7 @@ NdisInitUnicodeString=NdisInitUnicodeString@8 NdisInterlockedAddUlong=NdisInterlockedAddUlong@12 NdisInterlockedDecrement=NdisInterlockedDecrement@4 NdisInterlockedIncrement=NdisInterlockedIncrement@4 +NdisInitializeListHead=NdisInitializeListHead@4 NdisInterlockedInsertHeadList=NdisInterlockedInsertHeadList@12 NdisInterlockedInsertTailList=NdisInterlockedInsertTailList@12 NdisInterlockedPopEntrySList=NdisInterlockedPopEntrySList@8 @@ -296,7 +297,7 @@ NdisUpcaseUnicodeString=NdisUpcaseUnicodeString@8 NdisUpdateSharedMemory=NdisUpdateSharedMemory@20 NdisWaitEvent=NdisWaitEvent@8 NdisWriteConfiguration=NdisWriteConfiguration@16 -NdisWriteErrorLogEntry=NdisWriteErrorLogEntry@16 +NdisWriteErrorLogEntry=NdisWriteErrorLogEntry NdisWriteEventLogEntry=NdisWriteEventLogEntry@28 NdisWritePciSlotInformation=NdisWritePciSlotInformation@20 NdisWritePcmciaAttributeMemory=NdisWritePcmciaAttributeMemory@16 diff --git a/drivers/net/ndis/ndis/.cvsignore b/drivers/net/ndis/ndis/.cvsignore index 5761abc..ecc3f45 100644 --- a/drivers/net/ndis/ndis/.cvsignore +++ b/drivers/net/ndis/ndis/.cvsignore @@ -1 +1,2 @@ *.o +*.map diff --git a/drivers/net/ndis/ndis/40gone.c b/drivers/net/ndis/ndis/40gone.c index 64e4cd5..10df2af 100644 --- a/drivers/net/ndis/ndis/40gone.c +++ b/drivers/net/ndis/ndis/40gone.c @@ -10,6 +10,9 @@ #include +/* + * @unimplemented + */ VOID EXPORT ArcFilterDprIndicateReceive( @@ -22,6 +25,9 @@ ArcFilterDprIndicateReceive( } +/* + * @unimplemented + */ VOID EXPORT ArcFilterDprIndicateReceiveComplete( @@ -31,6 +37,9 @@ ArcFilterDprIndicateReceiveComplete( } +/* + * @unimplemented + */ NDIS_STATUS EXPORT EthChangeFilterAddresses( @@ -47,6 +56,9 @@ EthChangeFilterAddresses( } +/* + * @unimplemented + */ BOOLEAN EXPORT EthCreateFilter( @@ -64,6 +76,9 @@ EthCreateFilter( } +/* + * @unimplemented + */ VOID EXPORT EthDeleteFilter( @@ -73,6 +88,9 @@ EthDeleteFilter( } +/* + * @unimplemented + */ NDIS_STATUS EXPORT EthDeleteFilterOpenAdapter( @@ -86,6 +104,9 @@ EthDeleteFilterOpenAdapter( } +/* + * @unimplemented + */ NDIS_STATUS EXPORT EthFilterAdjust( @@ -101,6 +122,9 @@ EthFilterAdjust( } +/* + * @unimplemented + */ VOID EXPORT EthFilterIndicateReceive( @@ -117,6 +141,9 @@ EthFilterIndicateReceive( } +/* + * @unimplemented + */ VOID EXPORT EthFilterIndicateReceiveComplete( @@ -126,6 +153,40 @@ EthFilterIndicateReceiveComplete( } +/* + * @unimplemented + */ +VOID +EXPORT +EthFilterDprIndicateReceive( + 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) +{ + UNIMPLEMENTED +} + + +/* + * @unimplemented + */ +VOID +EXPORT +EthFilterDprIndicateReceiveComplete( + IN PETH_FILTER Filter) +{ + UNIMPLEMENTED +} + + +/* + * @unimplemented + */ BOOLEAN EXPORT EthNoteFilterOpenAdapter( @@ -140,6 +201,9 @@ EthNoteFilterOpenAdapter( } +/* + * @unimplemented + */ UINT EXPORT EthNumberOfOpenFilterAddresses( @@ -152,6 +216,9 @@ EthNumberOfOpenFilterAddresses( } +/* + * @unimplemented + */ VOID EXPORT EthQueryGlobalFilterAddresses ( @@ -165,6 +232,9 @@ EthQueryGlobalFilterAddresses ( } +/* + * @unimplemented + */ VOID EXPORT EthQueryOpenFilterAddresses( @@ -179,6 +249,9 @@ EthQueryOpenFilterAddresses( } +/* + * @unimplemented + */ BOOLEAN EXPORT EthShouldAddressLoopBack( @@ -191,6 +264,9 @@ EthShouldAddressLoopBack( } +/* + * @unimplemented + */ NDIS_STATUS EXPORT FddiChangeFilterLongAddresses( @@ -207,6 +283,9 @@ FddiChangeFilterLongAddresses( } +/* + * @unimplemented + */ NDIS_STATUS EXPORT FddiChangeFilterShortAddresses( @@ -223,6 +302,9 @@ FddiChangeFilterShortAddresses( } +/* + * @unimplemented + */ BOOLEAN EXPORT FddiCreateFilter( @@ -242,6 +324,9 @@ FddiCreateFilter( } +/* + * @unimplemented + */ VOID EXPORT FddiDeleteFilter( @@ -251,6 +336,9 @@ FddiDeleteFilter( } +/* + * @unimplemented + */ NDIS_STATUS EXPORT FddiDeleteFilterOpenAdapter( @@ -264,6 +352,9 @@ FddiDeleteFilterOpenAdapter( } +/* + * @unimplemented + */ NDIS_STATUS EXPORT FddiFilterAdjust( @@ -279,6 +370,9 @@ FddiFilterAdjust( } +/* + * @unimplemented + */ VOID EXPORT FddiFilterIndicateReceive( @@ -296,6 +390,9 @@ FddiFilterIndicateReceive( } +/* + * @unimplemented + */ VOID EXPORT FddiFilterIndicateReceiveComplete( @@ -305,6 +402,9 @@ FddiFilterIndicateReceiveComplete( } +/* + * @unimplemented + */ BOOLEAN EXPORT FddiNoteFilterOpenAdapter( @@ -319,6 +419,9 @@ FddiNoteFilterOpenAdapter( } +/* + * @unimplemented + */ UINT EXPORT FddiNumberOfOpenFilterLongAddresses( @@ -331,6 +434,9 @@ FddiNumberOfOpenFilterLongAddresses( } +/* + * @unimplemented + */ UINT EXPORT FddiNumberOfOpenFilterShortAddresses( @@ -343,6 +449,9 @@ FddiNumberOfOpenFilterShortAddresses( } +/* + * @unimplemented + */ VOID EXPORT FddiQueryGlobalFilterLongAddresses( @@ -356,6 +465,9 @@ FddiQueryGlobalFilterLongAddresses( } +/* + * @unimplemented + */ VOID EXPORT FddiQueryGlobalFilterShortAddresses( @@ -369,6 +481,9 @@ FddiQueryGlobalFilterShortAddresses( } +/* + * @unimplemented + */ VOID EXPORT FddiQueryOpenFilterLongAddresses( @@ -383,6 +498,9 @@ FddiQueryOpenFilterLongAddresses( } +/* + * @unimplemented + */ VOID EXPORT FddiQueryOpenFilterShortAddresses( @@ -397,6 +515,9 @@ FddiQueryOpenFilterShortAddresses( } +/* + * @unimplemented + */ BOOLEAN EXPORT FddiShouldAddressLoopBack( @@ -410,6 +531,9 @@ FddiShouldAddressLoopBack( } +/* + * @unimplemented + */ VOID EXPORT NdisAllocateDmaChannel( @@ -423,6 +547,9 @@ NdisAllocateDmaChannel( } +/* + * @unimplemented + */ VOID EXPORT NdisAllocateSharedMemory( @@ -436,6 +563,9 @@ NdisAllocateSharedMemory( } +/* + * @unimplemented + */ VOID EXPORT NdisCompleteBufferPhysicalMapping( @@ -447,6 +577,9 @@ NdisCompleteBufferPhysicalMapping( } +/* + * @unimplemented + */ VOID EXPORT NdisCompleteRequest( @@ -458,6 +591,9 @@ NdisCompleteRequest( } +/* + * @unimplemented + */ VOID EXPORT NdisCompleteReset( @@ -468,6 +604,9 @@ NdisCompleteReset( } +/* + * @unimplemented + */ VOID EXPORT NdisCompleteSend( @@ -479,6 +618,9 @@ NdisCompleteSend( } +/* + * @unimplemented + */ VOID EXPORT NdisCompleteTransferData( @@ -491,6 +633,9 @@ NdisCompleteTransferData( } +/* + * @unimplemented + */ VOID EXPORT NdisIndicateReceive( @@ -507,6 +652,9 @@ NdisIndicateReceive( } +/* + * @unimplemented + */ VOID EXPORT NdisIndicateReceiveComplete( @@ -516,6 +664,9 @@ NdisIndicateReceiveComplete( } +/* + * @unimplemented + */ VOID EXPORT NdisIndicateStatus( @@ -528,6 +679,9 @@ NdisIndicateStatus( } +/* + * @unimplemented + */ VOID EXPORT NdisIndicateStatusComplete( @@ -537,6 +691,9 @@ NdisIndicateStatusComplete( } +/* + * @unimplemented + */ NDIS_STATUS EXPORT NdisPciAssignResources( @@ -552,6 +709,9 @@ NdisPciAssignResources( } +/* + * @unimplemented + */ VOID EXPORT NdisReadBindingInformation ( @@ -563,6 +723,9 @@ NdisReadBindingInformation ( } +/* + * @unimplemented + */ ULONG EXPORT NdisReadDmaCounter( @@ -574,6 +737,9 @@ NdisReadDmaCounter( } +/* + * @unimplemented + */ VOID EXPORT NdisStartBufferPhysicalMapping( @@ -588,6 +754,9 @@ NdisStartBufferPhysicalMapping( } +/* + * @unimplemented + */ BOOLEAN EXPORT NdisSynchronizeWithInterrupt( @@ -601,6 +770,9 @@ NdisSynchronizeWithInterrupt( } +/* + * @unimplemented + */ VOID EXPORT NdisUnmapIoSpace( @@ -612,6 +784,9 @@ NdisUnmapIoSpace( } +/* + * @unimplemented + */ NDIS_STATUS EXPORT TrChangeFunctionalAddress( @@ -627,6 +802,9 @@ TrChangeFunctionalAddress( } +/* + * @unimplemented + */ NDIS_STATUS EXPORT TrChangeGroupAddress( @@ -642,6 +820,9 @@ TrChangeGroupAddress( } +/* + * @unimplemented + */ BOOLEAN EXPORT TrCreateFilter( @@ -659,6 +840,9 @@ TrCreateFilter( } +/* + * @unimplemented + */ VOID EXPORT TrDeleteFilter( @@ -668,6 +852,9 @@ TrDeleteFilter( } +/* + * @unimplemented + */ NDIS_STATUS EXPORT TrDeleteFilterOpenAdapter ( @@ -681,6 +868,9 @@ TrDeleteFilterOpenAdapter ( } +/* + * @unimplemented + */ NDIS_STATUS EXPORT TrFilterAdjust( @@ -696,6 +886,9 @@ TrFilterAdjust( } +/* + * @unimplemented + */ VOID EXPORT TrFilterIndicateReceive( @@ -711,6 +904,9 @@ TrFilterIndicateReceive( } +/* + * @unimplemented + */ VOID EXPORT TrFilterIndicateReceiveComplete( @@ -720,6 +916,9 @@ TrFilterIndicateReceiveComplete( } +/* + * @unimplemented + */ BOOLEAN EXPORT TrNoteFilterOpenAdapter( @@ -734,6 +933,9 @@ TrNoteFilterOpenAdapter( } +/* + * @unimplemented + */ BOOLEAN EXPORT TrShouldAddressLoopBack( diff --git a/drivers/net/ndis/ndis/50gone.c b/drivers/net/ndis/ndis/50gone.c index 1f1a4b5..5952069 100644 --- a/drivers/net/ndis/ndis/50gone.c +++ b/drivers/net/ndis/ndis/50gone.c @@ -10,6 +10,9 @@ #include +/* + * @unimplemented + */ VOID EXPORT NdisCompleteCloseAdapter( @@ -26,6 +29,9 @@ NdisCompleteCloseAdapter( } +/* + * @unimplemented + */ VOID EXPORT NdisCompleteOpenAdapter( @@ -43,6 +49,9 @@ NdisCompleteOpenAdapter( } +/* + * @unimplemented + */ NDIS_STATUS EXPORT NdisDeregisterAdapter( @@ -60,6 +69,9 @@ NdisDeregisterAdapter( } +/* + * @unimplemented + */ VOID EXPORT NdisDeregisterAdapterShutdownHandler( @@ -75,6 +87,9 @@ NdisDeregisterAdapterShutdownHandler( } +/* + * @unimplemented + */ VOID EXPORT NdisDeregisterMac( @@ -91,6 +106,9 @@ NdisDeregisterMac( } +/* + * @unimplemented + */ VOID EXPORT NdisFreeDmaChannel( @@ -106,6 +124,9 @@ NdisFreeDmaChannel( } +/* + * @unimplemented + */ VOID EXPORT NdisFreeSharedMemory( @@ -125,6 +146,9 @@ NdisFreeSharedMemory( } +/* + * @unimplemented + */ NDIS_STATUS EXPORT NdisIMQueueMiniportCallback( @@ -144,6 +168,9 @@ NdisIMQueueMiniportCallback( } +/* + * @unimplemented + */ VOID EXPORT NdisIMRevertBack( @@ -160,6 +187,9 @@ NdisIMRevertBack( } +/* + * @unimplemented + */ BOOLEAN EXPORT NdisIMSwitchToMiniport( @@ -178,6 +208,9 @@ NdisIMSwitchToMiniport( } +/* + * @unimplemented + */ VOID EXPORT NdisInitializeInterrupt( @@ -202,6 +235,9 @@ NdisInitializeInterrupt( } +/* + * @unimplemented + */ VOID EXPORT NdisMapIoSpace( @@ -221,6 +257,9 @@ NdisMapIoSpace( } +/* + * @unimplemented + */ VOID EXPORT NdisOverrideBusNumber( @@ -238,6 +277,9 @@ NdisOverrideBusNumber( } +/* + * @unimplemented + */ NDIS_STATUS EXPORT NdisQueryReceiveInformation( @@ -261,6 +303,9 @@ NdisQueryReceiveInformation( } +/* + * @unimplemented + */ VOID EXPORT NdisReadMcaPosInformation( @@ -279,6 +324,9 @@ NdisReadMcaPosInformation( } +/* + * @unimplemented + */ NDIS_STATUS EXPORT NdisRegisterAdapter( @@ -301,6 +349,9 @@ NdisRegisterAdapter( } +/* + * @unimplemented + */ VOID EXPORT NdisRegisterAdapterShutdownHandler( @@ -318,6 +369,9 @@ NdisRegisterAdapterShutdownHandler( } +/* + * @unimplemented + */ VOID EXPORT NdisRegisterMac( @@ -338,6 +392,9 @@ NdisRegisterMac( } +/* + * @unimplemented + */ VOID EXPORT NdisReleaseAdapterResources( @@ -353,6 +410,9 @@ NdisReleaseAdapterResources( } +/* + * @unimplemented + */ VOID EXPORT NdisRemoveInterrupt( @@ -368,6 +428,9 @@ NdisRemoveInterrupt( } +/* + * @unimplemented + */ VOID EXPORT NdisSetupDmaTransfer( @@ -388,6 +451,9 @@ NdisSetupDmaTransfer( } +/* + * @unimplemented + */ VOID EXPORT NdisUpdateSharedMemory( diff --git a/drivers/net/ndis/ndis/buffer.c b/drivers/net/ndis/ndis/buffer.c index fdaf4b2..59f189c 100644 --- a/drivers/net/ndis/ndis/buffer.c +++ b/drivers/net/ndis/ndis/buffer.c @@ -237,12 +237,10 @@ UINT CopyPacketToBufferChain( NdisQueryBuffer(DstBuffer, (PVOID)&DstData, &DstSize); if (SkipToOffset(DstBuffer, DstOffset, &DstData, &DstSize) == -1) return 0; - /* Skip SrcOffset bytes in the source packet */ NdisGetFirstBufferFromPacket(SrcPacket, &SrcBuffer, (PVOID)&SrcData, &SrcSize, &Total); if (SkipToOffset(SrcBuffer, SrcOffset, &SrcData, &SrcSize) == -1) return 0; - /* Copy the data */ for (Total = 0;;) { /* Find out how many bytes we can copy at one time */ @@ -287,7 +285,9 @@ UINT CopyPacketToBufferChain( } - +/* + * @implemented + */ VOID EXPORT NdisAdjustBufferLength( @@ -304,6 +304,9 @@ NdisAdjustBufferLength( } +/* + * @implemented + */ ULONG EXPORT NDIS_BUFFER_TO_SPAN_PAGES( @@ -323,6 +326,9 @@ NDIS_BUFFER_TO_SPAN_PAGES( } +/* + * @implemented + */ VOID EXPORT NdisAllocateBuffer( @@ -390,6 +396,9 @@ NdisAllocateBuffer( } +/* + * @implemented + */ VOID EXPORT NdisAllocateBufferPool( @@ -436,6 +445,9 @@ NdisAllocateBufferPool( } +/* + * @implemented + */ VOID EXPORT NdisAllocatePacket( @@ -477,6 +489,9 @@ NdisAllocatePacket( } +/* + * @implemented + */ VOID EXPORT NdisAllocatePacketPool( @@ -530,6 +545,9 @@ NdisAllocatePacketPool( } +/* + * @unimplemented + */ VOID EXPORT NdisAllocatePacketPoolEx( @@ -549,6 +567,9 @@ NdisAllocatePacketPoolEx( } +/* + * @implemented + */ ULONG EXPORT NdisBufferLength( @@ -568,6 +589,9 @@ NdisBufferLength( } +/* + * @unimplemented + */ PVOID EXPORT NdisBufferVirtualAddress( @@ -585,6 +609,9 @@ NdisBufferVirtualAddress( } +/* + * @unimplemented + */ VOID EXPORT NdisCopyBuffer( @@ -609,6 +636,9 @@ NdisCopyBuffer( } +/* + * @implemented + */ VOID EXPORT NdisCopyFromPacketToPacket( @@ -691,6 +721,9 @@ NdisCopyFromPacketToPacket( } +/* + * @unimplemented + */ VOID EXPORT NdisDprAllocatePacket( @@ -708,6 +741,9 @@ NdisDprAllocatePacket( } +/* + * @unimplemented + */ VOID EXPORT NdisDprAllocatePacketNonInterlocked( @@ -726,6 +762,9 @@ NdisDprAllocatePacketNonInterlocked( } +/* + * @unimplemented + */ VOID EXPORT NdisDprFreePacket( @@ -739,6 +778,9 @@ NdisDprFreePacket( } +/* + * @unimplemented + */ VOID EXPORT NdisDprFreePacketNonInterlocked( @@ -752,6 +794,9 @@ NdisDprFreePacketNonInterlocked( } +/* + * @implemented + */ VOID EXPORT NdisFreeBufferPool( @@ -766,6 +811,9 @@ NdisFreeBufferPool( } +/* + * @implemented + */ VOID EXPORT NdisFreePacketPool( @@ -780,6 +828,9 @@ NdisFreePacketPool( } +/* + * @implemented + */ VOID EXPORT NdisFreeBuffer( @@ -805,6 +856,9 @@ NdisFreeBuffer( } +/* + * @implemented + */ VOID EXPORT NdisFreePacket( @@ -826,6 +880,9 @@ NdisFreePacket( } +/* + * @unimplemented + */ VOID EXPORT NdisGetBufferPhysicalArraySize( @@ -842,6 +899,9 @@ NdisGetBufferPhysicalArraySize( } +/* + * @implemented + */ VOID EXPORT NdisGetFirstBufferFromPacket( @@ -881,6 +941,9 @@ NdisGetFirstBufferFromPacket( } +/* + * @unimplemented + */ VOID EXPORT NdisReturnPackets( @@ -897,6 +960,9 @@ NdisReturnPackets( } +/* + * @unimplemented + */ UINT EXPORT NdisPacketPoolUsage( @@ -914,6 +980,9 @@ NdisPacketPoolUsage( } +/* + * @implemented + */ VOID EXPORT NdisQueryBuffer( @@ -936,6 +1005,9 @@ NdisQueryBuffer( } +/* + * @implemented + */ VOID EXPORT NdisQueryBufferOffset( @@ -948,6 +1020,9 @@ NdisQueryBufferOffset( } +/* + * @implemented + */ VOID EXPORT NdisUnchainBufferAtBack( @@ -993,6 +1068,9 @@ NdisUnchainBufferAtBack( } +/* + * @implemented + */ VOID EXPORT NdisUnchainBufferAtFront( diff --git a/drivers/net/ndis/ndis/cl.c b/drivers/net/ndis/ndis/cl.c index 7a24f74..ec6696b 100644 --- a/drivers/net/ndis/ndis/cl.c +++ b/drivers/net/ndis/ndis/cl.c @@ -10,6 +10,9 @@ #include +/* + * @unimplemented + */ NDIS_STATUS EXPIMP NdisClAddParty( @@ -30,6 +33,9 @@ NdisClAddParty( } +/* + * @unimplemented + */ NDIS_STATUS EXPIMP NdisClCloseAddressFamily( @@ -47,6 +53,9 @@ NdisClCloseAddressFamily( } +/* + * @unimplemented + */ NDIS_STATUS EXPIMP NdisClCloseCall( @@ -67,6 +76,9 @@ NdisClCloseCall( } +/* + * @unimplemented + */ NDIS_STATUS EXPIMP NdisClDeregisterSap( @@ -84,6 +96,9 @@ NdisClDeregisterSap( } +/* + * @unimplemented + */ NDIS_STATUS EXPIMP NdisClDropParty( @@ -103,6 +118,9 @@ NdisClDropParty( } +/* + * @unimplemented + */ VOID EXPIMP NdisClIncomingCallComplete( @@ -120,6 +138,9 @@ NdisClIncomingCallComplete( } +/* + * @unimplemented + */ NDIS_STATUS EXPIMP NdisClMakeCall( @@ -140,6 +161,9 @@ NdisClMakeCall( } +/* + * @unimplemented + */ NDIS_STATUS EXPIMP NdisClModifyCallQoS( @@ -158,6 +182,9 @@ NdisClModifyCallQoS( } +/* + * @unimplemented + */ NDIS_STATUS EXPIMP NdisClOpenAddressFamily( @@ -180,6 +207,9 @@ NdisClOpenAddressFamily( } +/* + * @unimplemented + */ NDIS_STATUS EXPIMP NdisClRegisterSap( diff --git a/drivers/net/ndis/ndis/cm.c b/drivers/net/ndis/ndis/cm.c index d6e0ca9..dca33e4 100644 --- a/drivers/net/ndis/ndis/cm.c +++ b/drivers/net/ndis/ndis/cm.c @@ -10,6 +10,9 @@ #include +/* + * @unimplemented + */ NDIS_STATUS EXPORT NdisCmActivateVc( @@ -28,6 +31,9 @@ NdisCmActivateVc( } +/* + * @unimplemented + */ VOID EXPORT NdisCmAddPartyComplete( @@ -46,6 +52,9 @@ NdisCmAddPartyComplete( } +/* + * @unimplemented + */ VOID EXPORT NdisCmCloseAddressFamilyComplete( @@ -62,6 +71,9 @@ NdisCmCloseAddressFamilyComplete( } +/* + * @unimplemented + */ VOID EXPORT NdisCmCloseCallComplete( @@ -79,6 +91,9 @@ NdisCmCloseCallComplete( } +/* + * @unimplemented + */ NDIS_STATUS EXPORT NdisCmDeactivateVc( @@ -96,6 +111,9 @@ NdisCmDeactivateVc( } +/* + * @unimplemented + */ VOID EXPORT NdisCmDeregisterSapComplete( @@ -112,6 +130,9 @@ NdisCmDeregisterSapComplete( } +/* + * @unimplemented + */ VOID EXPORT NdisCmDispatchCallConnected( @@ -127,6 +148,9 @@ NdisCmDispatchCallConnected( } +/* + * @unimplemented + */ NDIS_STATUS EXPORT NdisCmDispatchIncomingCall( @@ -146,6 +170,9 @@ NdisCmDispatchIncomingCall( } +/* + * @unimplemented + */ VOID EXPORT NdisCmDispatchIncomingCallQoSChange( @@ -162,6 +189,9 @@ NdisCmDispatchIncomingCallQoSChange( } +/* + * @unimplemented + */ VOID EXPORT NdisCmDispatchIncomingCloseCall( @@ -180,6 +210,9 @@ NdisCmDispatchIncomingCloseCall( } +/* + * @unimplemented + */ VOID EXPORT NdisCmDispatchIncomingDropParty( @@ -198,6 +231,9 @@ NdisCmDispatchIncomingDropParty( } +/* + * @unimplemented + */ VOID EXPORT NdisCmDropPartyComplete( @@ -214,6 +250,9 @@ NdisCmDropPartyComplete( } +/* + * @unimplemented + */ VOID EXPORT NdisCmMakeCallComplete( @@ -233,6 +272,9 @@ NdisCmMakeCallComplete( } +/* + * @unimplemented + */ VOID EXPORT NdisCmModifyCallQoSComplete( @@ -250,6 +292,9 @@ NdisCmModifyCallQoSComplete( } +/* + * @unimplemented + */ VOID EXPORT NdisCmOpenAddressFamilyComplete( @@ -267,6 +312,9 @@ NdisCmOpenAddressFamilyComplete( } +/* + * @unimplemented + */ NDIS_STATUS EXPORT NdisCmRegisterAddressFamily( @@ -287,6 +335,9 @@ NdisCmRegisterAddressFamily( } +/* + * @unimplemented + */ VOID EXPORT NdisCmRegisterSapComplete( @@ -304,7 +355,9 @@ NdisCmRegisterSapComplete( } - +/* + * @unimplemented + */ NDIS_STATUS EXPORT NdisMCmActivateVc( @@ -323,6 +376,9 @@ NdisMCmActivateVc( } +/* + * @unimplemented + */ NDIS_STATUS EXPORT NdisMCmCreateVc( @@ -343,6 +399,9 @@ NdisMCmCreateVc( } +/* + * @unimplemented + */ NDIS_STATUS EXPORT NdisMCmDeactivateVc( @@ -360,6 +419,9 @@ NdisMCmDeactivateVc( } +/* + * @unimplemented + */ NDIS_STATUS EXPORT NdisMCmDeleteVc( @@ -377,6 +439,9 @@ NdisMCmDeleteVc( } +/* + * @unimplemented + */ NDIS_STATUS EXPORT NdisMCmRegisterAddressFamily( @@ -396,6 +461,10 @@ NdisMCmRegisterAddressFamily( return NDIS_STATUS_FAILURE; } + +/* + * @unimplemented + */ NDIS_STATUS EXPORT NdisMCmRequest( diff --git a/drivers/net/ndis/ndis/co.c b/drivers/net/ndis/ndis/co.c index c560cc4..c0e5f89 100644 --- a/drivers/net/ndis/ndis/co.c +++ b/drivers/net/ndis/ndis/co.c @@ -10,6 +10,9 @@ #include +/* + * @unimplemented + */ NDIS_STATUS EXPORT NdisCoCreateVc( @@ -30,6 +33,9 @@ NdisCoCreateVc( } +/* + * @unimplemented + */ NDIS_STATUS EXPORT NdisCoDeleteVc( @@ -47,6 +53,9 @@ NdisCoDeleteVc( } +/* + * @unimplemented + */ NDIS_STATUS EXPORT NdisCoRequest( @@ -68,6 +77,9 @@ NdisCoRequest( } +/* + * @unimplemented + */ VOID EXPORT NdisCoRequestComplete( @@ -87,6 +99,9 @@ NdisCoRequestComplete( } +/* + * @unimplemented + */ VOID EXPORT NdisCoSendPackets( @@ -104,7 +119,9 @@ NdisCoSendPackets( } - +/* + * @unimplemented + */ VOID EXPORT NdisMCoActivateVcComplete( @@ -122,6 +139,9 @@ NdisMCoActivateVcComplete( } +/* + * @unimplemented + */ VOID EXPORT NdisMCoDeactivateVcComplete( @@ -138,6 +158,9 @@ NdisMCoDeactivateVcComplete( } +/* + * @unimplemented + */ VOID EXPORT NdisMCoIndicateReceivePacket( @@ -155,6 +178,9 @@ NdisMCoIndicateReceivePacket( } +/* + * @unimplemented + */ VOID EXPORT NdisMCoIndicateStatus( @@ -174,6 +200,9 @@ NdisMCoIndicateStatus( } +/* + * @unimplemented + */ VOID EXPORT NdisMCoReceiveComplete( @@ -189,6 +218,9 @@ NdisMCoReceiveComplete( } +/* + * @unimplemented + */ VOID EXPORT NdisMCoRequestComplete( @@ -206,6 +238,9 @@ NdisMCoRequestComplete( } +/* + * @unimplemented + */ VOID EXPORT NdisMCoSendComplete( @@ -222,5 +257,4 @@ NdisMCoSendComplete( UNIMPLEMENTED } - /* EOF */ diff --git a/drivers/net/ndis/ndis/config.c b/drivers/net/ndis/ndis/config.c new file mode 100644 index 0000000..6a26ca7 --- /dev/null +++ b/drivers/net/ndis/ndis/config.c @@ -0,0 +1,887 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS NDIS library + * FILE: ndis/config.c + * PURPOSE: NDIS Configuration Services + * PROGRAMMERS: Vizzini (vizzini@plasmic.com) + * REVISIONS: + * Vizzini 07-28-2003 Created + * NOTES: + * - Resource tracking has to be implemented here because of the design of the NDIS API. + * Whenever a read operation is performed, the NDIS library allocates space and returns + * it. A linked list is kept associated with every handle of the memory allocated to + * it. When the handle is closed, the resources are systematically released. + * - The NDIS_HANDLE Configuraiton context is no longer a registry handle. An opaque struct + * had to be created to allow for resource tracking. This means that Miniports cannot just + * pass this NDIS_HANDLE to things like ZwQueryValueKey(). I don't thknk they do (they + * certainly should not), but it should be kept in mind. + * UPDATE: I just found this in the NTDDK: + * NdisOpenProtocolConfiguration returns a handle for the + * HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\NICDriverInstance\Parameters\ProtocolName + * registry key. XXX This is a problem. Following that, the DDK instructs programmers + * to use NdisReadConfiguration and NdisWriteConfiguration. No telling what the world's idiots + * have done with this. + * - I have tried to stick to the DDK's definition of what return values are possible, which + * has resulted in stupid return values in some cases. I do use STATUS_RESOURCES in a few + * places that the DDK doesn't explicitly mention it, though. + * - There's a general reliance on the fact that UNICODE_STRING.Length doesn't include a trailing + * 0, which it shouldn't + * - I added support for NdisParameterBinary. It's at the end of the struct. I wonder if + * it'll break things. + * - All the routines in this file are PASSIVE_LEVEL only, and all memory is PagedPool + */ + +#include + +#define NDIS_VERSION 0x00040000 /* the version of NDIS we claim to be to miniport drivers */ +#define PARAMETERS_KEY L"Parameters" /* The parameters subkey under the device-specific key */ + +/* + * @implemented + */ +VOID +EXPORT +NdisWriteConfiguration( + OUT PNDIS_STATUS Status, + IN NDIS_HANDLE ConfigurationHandle, + IN PNDIS_STRING Keyword, + IN PNDIS_CONFIGURATION_PARAMETER ParameterValue) +/* + * FUNCTION: Writes a configuration value to the registry + * ARGUMENTS: + * Status: Pointer to a caller-supplied NDIS_STATUS where we return status + * ConfigurationHandle: The Configuration Handle passed back from the call to one of the Open functions + * Keyword: The registry value name to write + * ParameterValue: The value data to write + * RETURNS: + * NDIS_STATUS_SUCCESS - the operation completed successfully + * NDIS_STATUS_NOT_SUPPORTED - The parameter type is not supported + * NDIS_STATUS_RESOURCES - out of memory, etc. + * NDIS_STATUS_FAILURE - any other failure + * NOTES: + * There's a cryptic comment in the ddk implying that this function allocates and keeps memory. + * I don't know why tho so i free everything before return. comments welcome. + */ +{ + ULONG ParameterType = ParameterValue->ParameterType; + ULONG DataSize; + PVOID Data; + + if(ParameterType != NdisParameterInteger && + ParameterType != NdisParameterHexInteger && + ParameterType != NdisParameterString && + ParameterType != NdisParameterMultiString && + ParameterType != NdisParameterBinary + ) + { + *Status = NDIS_STATUS_NOT_SUPPORTED; + return; + } + + /* reset parameter type to standard reg types */ + switch(ParameterType) + { + /* TODO: figure out what do do with these; are they different? */ + case NdisParameterHexInteger: + case NdisParameterInteger: + ParameterType = REG_SZ; + Data = &ParameterValue->ParameterData.IntegerData; + DataSize = sizeof(ULONG); + break; + + case NdisParameterString: + case NdisParameterMultiString: + ParameterType = REG_SZ; + Data = ParameterValue->ParameterData.StringData.Buffer; + DataSize = ParameterValue->ParameterData.StringData.Length; + break; + + /* New (undocumented) addition to 2k ddk */ + case NdisParameterBinary: + ParameterType = REG_BINARY; + Data = ParameterValue->ParameterData.BinaryData.Buffer; + DataSize = ParameterValue->ParameterData.BinaryData.Length; + break; + } + + *Status = ZwSetValueKey(((PMINIPORT_CONFIGURATION_CONTEXT)ConfigurationHandle)->Handle, + Keyword, 0, ParameterType, Data, DataSize); + + if(*Status != STATUS_SUCCESS) + *Status = NDIS_STATUS_FAILURE; + else + *Status = NDIS_STATUS_SUCCESS; +} + + +/* + * @implemented + */ +VOID +EXPORT +NdisCloseConfiguration( + IN NDIS_HANDLE ConfigurationHandle) +/* + * FUNCTION: Closes handles and releases per-handle resources + * ARGUMENTS: + * ConfigurationHandle - pointer to the context with the resources to free + */ +{ + PMINIPORT_CONFIGURATION_CONTEXT ConfigurationContext = (PMINIPORT_CONFIGURATION_CONTEXT)ConfigurationHandle; + PMINIPORT_RESOURCE Resource; + + while(!IsListEmpty(&ConfigurationContext->ResourceListHead)) + { + Resource = (PMINIPORT_RESOURCE)RemoveTailList(&ConfigurationContext->ResourceListHead); + if(Resource->ResourceType == MINIPORT_RESOURCE_TYPE_MEMORY) + { + NDIS_DbgPrint(MAX_TRACE,("freeing 0x%x\n", Resource->Resource)); + ExFreePool(Resource->Resource); + } + + ExFreePool(Resource); + } + + ZwClose(ConfigurationContext->Handle); +} + + +/* + * @implemented + */ +VOID +EXPORT +NdisOpenConfiguration( + OUT PNDIS_STATUS Status, + OUT PNDIS_HANDLE ConfigurationHandle, + IN NDIS_HANDLE WrapperConfigurationContext) +/* + * FUNCTION: Opens the configuration key and sets up resource tracking for the returned handle + * ARGUMENTS: + * Status: Pointer to a caller-supplied NDIS_STATUS that is filled in with a return value + * ConfigurationHandle: Pointer to an opaque configuration handle returned on success + * WrapperConfigurationContext: handle originally passed back from NdisInitializeWrapper + * RETURNS: + * NDIS_STATUS_SUCCESS: the operation completed successfully + * NDIS_STATUS_FAILURE: the operation failed + * NOTES: + * I think this is the parameters key; please verify. + */ +{ + OBJECT_ATTRIBUTES KeyAttributes; + UNICODE_STRING KeyNameU; + HANDLE KeyHandle; + PMINIPORT_CONFIGURATION_CONTEXT ConfigurationContext; + HANDLE RootKeyHandle = (HANDLE)WrapperConfigurationContext; + + NDIS_DbgPrint(MAX_TRACE, ("Called\n")); + + RtlInitUnicodeString(&KeyNameU, PARAMETERS_KEY); + InitializeObjectAttributes(&KeyAttributes, &KeyNameU, OBJ_CASE_INSENSITIVE, RootKeyHandle, NULL); + + *Status = ZwOpenKey(&KeyHandle, KEY_ALL_ACCESS, &KeyAttributes); + if(*Status != STATUS_SUCCESS) + { + NDIS_DbgPrint(MID_TRACE, ("Failed to open registry configuration for this miniport\n")); + *ConfigurationHandle = NULL; + *Status = NDIS_STATUS_FAILURE; + return; + } + + ConfigurationContext = ExAllocatePool(PagedPool, sizeof(MINIPORT_CONFIGURATION_CONTEXT)); + if(!ConfigurationContext) + { + NDIS_DbgPrint(MIN_TRACE,("Insufficient resources.\n")); + ZwClose(KeyHandle); + *Status = NDIS_STATUS_RESOURCES; + return; + } + + KeInitializeSpinLock(&ConfigurationContext->ResourceLock); + InitializeListHead(&ConfigurationContext->ResourceListHead); + + ConfigurationContext->Handle = KeyHandle; + + *ConfigurationHandle = (NDIS_HANDLE)ConfigurationContext; + *Status = NDIS_STATUS_SUCCESS; + + NDIS_DbgPrint(MAX_TRACE,("returning success\n")); +} + + +/* + * @implemented + */ +VOID +EXPORT +NdisOpenProtocolConfiguration( + OUT PNDIS_STATUS Status, + OUT PNDIS_HANDLE ConfigurationHandle, + IN PNDIS_STRING ProtocolSection) +/* + * FUNCTION: Open the configuration key and set up resource tracking for the protocol + * ARGUMENTS: + * Status: caller-allocated buffer where status is returned + * ConfigurationHandle: spot to return the opaque configuration context + * ProtocolSection: configuration string originally passed in to ProtocolBindAdapter + * RETURNS: + * NDIS_STATUS_SUCCESS: the operation was a success + * NDIS_STATUS_FAILURE: the operation was not a success + * NOTES: + * I think this is the per-device (adapter) parameters\{ProtocolName} key; please verify. + */ +{ + OBJECT_ATTRIBUTES KeyAttributes; + UNICODE_STRING KeyNameU; + WCHAR *KeyName; + HANDLE KeyHandle; + PMINIPORT_CONFIGURATION_CONTEXT ConfigurationContext; + + KeyName = ExAllocatePool(PagedPool, ProtocolSection->Length + sizeof(PARAMETERS_KEY) + sizeof(WCHAR)); + if(!KeyName) + { + NDIS_DbgPrint(MIN_TRACE,("Insufficient resources.\n")); + *ConfigurationHandle = NULL; + *Status = NDIS_STATUS_FAILURE; + return; + } + + wcsncpy(KeyName, ProtocolSection->Buffer, ProtocolSection->Length/sizeof(WCHAR)); + wcscpy(KeyName + ProtocolSection->Length, PARAMETERS_KEY); + RtlInitUnicodeString(&KeyNameU, KeyName); + InitializeObjectAttributes(&KeyAttributes, &KeyNameU, OBJ_CASE_INSENSITIVE, NULL, NULL); + + *Status = ZwOpenKey(&KeyHandle, KEY_ALL_ACCESS, &KeyAttributes); + + ExFreePool(KeyName); + + if(*Status != NDIS_STATUS_SUCCESS) + { + *ConfigurationHandle = NULL; + *Status = NDIS_STATUS_FAILURE; + return; + } + + ConfigurationContext = ExAllocatePool(PagedPool, sizeof(MINIPORT_CONFIGURATION_CONTEXT)); + if(!ConfigurationContext) + { + NDIS_DbgPrint(MIN_TRACE,("Insufficient resources.\n")); + *ConfigurationHandle = NULL; + *Status = NDIS_STATUS_FAILURE; + return; + } + + KeInitializeSpinLock(&ConfigurationContext->ResourceLock); + InitializeListHead(&ConfigurationContext->ResourceListHead); + + ConfigurationContext->Handle = KeyHandle; + + *ConfigurationHandle = (NDIS_HANDLE)ConfigurationContext; + *Status = NDIS_STATUS_SUCCESS; +} + + +/* + * @implemented + */ +VOID +EXPORT +NdisReadConfiguration( + OUT PNDIS_STATUS Status, + OUT PNDIS_CONFIGURATION_PARAMETER * ParameterValue, + IN NDIS_HANDLE ConfigurationHandle, + IN PNDIS_STRING Keyword, + IN NDIS_PARAMETER_TYPE ParameterType) +/* + * FUNCTION: Read a configuration value from the registry, tracking its resources + * ARGUMENTS: + * Status: points to a place to write status into + * ParameterValue: Pointer to receive a newly-allocated parameter structure + * ConfigurationHandle: handle originally returned by an open function + * Keyword: Value name to read, or one of the following constants: + * Environment - returns NdisEnvironmentWindowsNt + * ProcessorType - returns NdisProcessorX86 until more architectures are added + * NdisVersion - returns NDIS_VERSION + * ParameterType: the type of the value to be queried + * RETURNS: + * - A status in Status + * - A parameter value in ParameterValue + */ +{ + KEY_VALUE_PARTIAL_INFORMATION *KeyInformation; + ULONG KeyDataLength; + PMINIPORT_RESOURCE MiniportResource; + PMINIPORT_CONFIGURATION_CONTEXT ConfigurationContext = (PMINIPORT_CONFIGURATION_CONTEXT)ConfigurationHandle; + + *ParameterValue = NULL; + *Status = NDIS_STATUS_FAILURE; + + if(ParameterType != NdisParameterInteger && + ParameterType != NdisParameterHexInteger && + ParameterType != NdisParameterString && + ParameterType != NdisParameterMultiString && + ParameterType != NdisParameterBinary + ) + { + NDIS_DbgPrint(MID_TRACE,("unsupported parameter type\n")); + return; + } + + NDIS_DbgPrint(MAX_TRACE,("requested read of %wZ\n", Keyword)); + + if( + !wcsncmp(Keyword->Buffer, L"Environment", Keyword->Length/sizeof(WCHAR)) && + wcslen(L"Environment") == Keyword->Length/sizeof(WCHAR) + ) + { + *ParameterValue = ExAllocatePool(PagedPool, sizeof(ULONG)); + if(!*ParameterValue) + { + NDIS_DbgPrint(MIN_TRACE,("Insufficient resources.\n")); + *Status = NDIS_STATUS_RESOURCES; + return; + } + + MiniportResource = ExAllocatePool(PagedPool, sizeof(MINIPORT_RESOURCE)); + if(!MiniportResource) + { + NDIS_DbgPrint(MIN_TRACE,("Insufficient resources.\n")); + *ParameterValue = NULL; + *Status = NDIS_STATUS_RESOURCES; + return; + } + + MiniportResource->ResourceType = 0; + MiniportResource->Resource = *ParameterValue; + + NDIS_DbgPrint(MID_TRACE,("inserting 0x%x into the resource list\n", + MiniportResource->Resource)); + + ExInterlockedInsertTailList(&ConfigurationContext->ResourceListHead, + &MiniportResource->ListEntry, &ConfigurationContext->ResourceLock); + + (*ParameterValue)->ParameterType = NdisParameterInteger; + (*ParameterValue)->ParameterData.IntegerData = NdisEnvironmentWindowsNt; + *Status = NDIS_STATUS_SUCCESS; + + return; + } + + if( + !wcsncmp(Keyword->Buffer, L"ProcessorType", Keyword->Length/sizeof(WCHAR)) && + wcslen(L"ProcessorType") == Keyword->Length/sizeof(WCHAR) + ) + { + *ParameterValue = ExAllocatePool(PagedPool, sizeof(ULONG)); + if(!*ParameterValue) + { + NDIS_DbgPrint(MIN_TRACE,("Insufficient resources.\n")); + *Status = NDIS_STATUS_RESOURCES; + return; + } + + MiniportResource = ExAllocatePool(PagedPool, sizeof(MINIPORT_RESOURCE)); + if(!MiniportResource) + { + NDIS_DbgPrint(MIN_TRACE,("Insufficient resources.\n")); + *ParameterValue = NULL; + *Status = NDIS_STATUS_RESOURCES; + return; + } + + MiniportResource->ResourceType = 0; + MiniportResource->Resource = *ParameterValue; + NDIS_DbgPrint(MID_TRACE,("inserting 0x%x into the resource list\n", MiniportResource->Resource)); + ExInterlockedInsertTailList(&ConfigurationContext->ResourceListHead, + &MiniportResource->ListEntry, &ConfigurationContext->ResourceLock); + + (*ParameterValue)->ParameterType = NdisParameterInteger; + (*ParameterValue)->ParameterData.IntegerData = NdisProcessorX86; /* XXX non-portable */ + *Status = NDIS_STATUS_SUCCESS; + + return; + } + + if( + !wcsncmp(Keyword->Buffer, L"NdisVersion", Keyword->Length/sizeof(WCHAR)) && + wcslen(L"NdisVersion") == Keyword->Length/sizeof(WCHAR) + ) + { + *ParameterValue = ExAllocatePool(PagedPool, sizeof(ULONG)); + if(!*ParameterValue) + { + NDIS_DbgPrint(MIN_TRACE,("Insufficient resources.\n")); + *Status = NDIS_STATUS_RESOURCES; + return; + } + + MiniportResource = ExAllocatePool(PagedPool, sizeof(MINIPORT_RESOURCE)); + if(!MiniportResource) + { + NDIS_DbgPrint(MIN_TRACE,("Insufficient resources.\n")); + *ParameterValue = NULL; + *Status = NDIS_STATUS_RESOURCES; + return; + } + + MiniportResource->ResourceType = 0; + MiniportResource->Resource = *ParameterValue; + NDIS_DbgPrint(MID_TRACE,("inserting 0x%x into the resource list\n", MiniportResource->Resource)); + ExInterlockedInsertTailList(&ConfigurationContext->ResourceListHead, + &MiniportResource->ListEntry, &ConfigurationContext->ResourceLock); + + (*ParameterValue)->ParameterType = NdisParameterInteger; + (*ParameterValue)->ParameterData.IntegerData = NDIS_VERSION; + *Status = NDIS_STATUS_SUCCESS; + + return; + } + + /* figure out how much buffer i should allocate */ + *Status = ZwQueryValueKey(ConfigurationContext->Handle, Keyword, KeyValuePartialInformation, NULL, 0, &KeyDataLength); + if(*Status != STATUS_BUFFER_OVERFLOW && *Status != STATUS_BUFFER_TOO_SMALL && *Status != STATUS_SUCCESS) + { + NDIS_DbgPrint(MID_TRACE,("ZwQueryValueKey #1 failed for %wZ, status 0x%x\n", Keyword, *Status)); + *Status = NDIS_STATUS_FAILURE; + return; + } + + /* allocate it */ + KeyInformation = ExAllocatePool(PagedPool, KeyDataLength + sizeof(KEY_VALUE_PARTIAL_INFORMATION)); + if(!KeyInformation) + { + NDIS_DbgPrint(MIN_TRACE,("Insufficient resources.\n")); + *Status = NDIS_STATUS_RESOURCES; + return; + } + + /* grab the value */ + *Status = ZwQueryValueKey(ConfigurationContext->Handle, Keyword, KeyValuePartialInformation, + KeyInformation, KeyDataLength + sizeof(KEY_VALUE_PARTIAL_INFORMATION), &KeyDataLength); + if(*Status != STATUS_SUCCESS) + { + ExFreePool(KeyInformation); + NDIS_DbgPrint(MID_TRACE,("ZwQueryValueKey #2 failed for %wZ, status 0x%x\n", Keyword, *Status)); + *Status = NDIS_STATUS_FAILURE; + return; + } + + switch(ParameterType) + { + case NdisParameterInteger: + case NdisParameterHexInteger: + { + UNICODE_STRING str; + + *ParameterValue = ExAllocatePool(PagedPool, sizeof(NDIS_CONFIGURATION_PARAMETER)); + if(!*ParameterValue) + { + NDIS_DbgPrint(MIN_TRACE,("Insufficient resources.\n")); + ExFreePool(KeyInformation); + *Status = NDIS_STATUS_RESOURCES; + return; + } + + str.Length = str.MaximumLength = KeyInformation->DataLength; + str.Buffer = (PWCHAR)KeyInformation->Data; + + (*ParameterValue)->ParameterType = ParameterType; + *Status = RtlUnicodeStringToInteger(&str, 16, &(*ParameterValue)->ParameterData.IntegerData); + + ExFreePool(KeyInformation); + + if(*Status != STATUS_SUCCESS) + *Status = NDIS_STATUS_FAILURE; + else + *Status = NDIS_STATUS_SUCCESS; + + return; + } + + case NdisParameterString: + case NdisParameterMultiString: + { + PMINIPORT_RESOURCE MiniportResource = 0; + PWCHAR RegData = 0; + + if(KeyInformation->Type != REG_SZ && KeyInformation->Type != REG_MULTI_SZ) + { + NDIS_DbgPrint(MID_TRACE,("requested type does not match actual value type\n")); + ExFreePool(KeyInformation); + *ParameterValue = NULL; + *Status = NDIS_STATUS_FAILURE; + return; + } + + *ParameterValue = ExAllocatePool(PagedPool, sizeof(NDIS_CONFIGURATION_PARAMETER)); + if(!*ParameterValue) + { + NDIS_DbgPrint(MIN_TRACE,("Insufficient resources.\n")); + ExFreePool(KeyInformation); + *Status = NDIS_STATUS_RESOURCES; + return; + } + + RegData = ExAllocatePool(PagedPool, KeyInformation->DataLength); + if(!RegData) + { + NDIS_DbgPrint(MIN_TRACE,("Insufficient resources.\n")); + ExFreePool(KeyInformation); + ExFreePool(*ParameterValue); + *ParameterValue = NULL; + *Status = NDIS_STATUS_FAILURE; + return; + } + + MiniportResource = ExAllocatePool(PagedPool, sizeof(MINIPORT_RESOURCE)); + if(!MiniportResource) + { + NDIS_DbgPrint(MIN_TRACE,("Insufficient resources.\n")); + ExFreePool(KeyInformation); + ExFreePool(*ParameterValue); + *ParameterValue = NULL; + *Status = NDIS_STATUS_RESOURCES; + return; + } + + MiniportResource->ResourceType = 0; + MiniportResource->Resource = *ParameterValue; + NDIS_DbgPrint(MID_TRACE,("inserting 0x%x into the resource list\n", MiniportResource->Resource)); + ExInterlockedInsertTailList(&ConfigurationContext->ResourceListHead, &MiniportResource->ListEntry, &ConfigurationContext->ResourceLock); + + memcpy(RegData, KeyInformation->Data, KeyInformation->DataLength); + + (*ParameterValue)->ParameterType = ParameterType; + (*ParameterValue)->ParameterData.StringData.Length = KeyInformation->DataLength; + (*ParameterValue)->ParameterData.StringData.Buffer = RegData; + + ExFreePool(KeyInformation); + + *Status = NDIS_STATUS_SUCCESS; + + return; + } + + case NdisParameterBinary: + { + PMINIPORT_RESOURCE MiniportResource; + + if(KeyInformation->Type != REG_BINARY) + { + NDIS_DbgPrint(MIN_TRACE,("requested type does not match actual value type\n")); + *Status = NDIS_STATUS_FAILURE; + ExFreePool(KeyInformation); + return; + } + + *ParameterValue = ExAllocatePool(PagedPool, sizeof(NDIS_CONFIGURATION_PARAMETER) + KeyInformation->DataLength); + if(!*ParameterValue) + { + NDIS_DbgPrint(MIN_TRACE,("Insufficient resources.\n")); + ExFreePool(KeyInformation); + *Status = NDIS_STATUS_RESOURCES; + return; + } + + MiniportResource = ExAllocatePool(PagedPool, sizeof(MINIPORT_RESOURCE)); + if(!MiniportResource) + { + NDIS_DbgPrint(MIN_TRACE,("Insufficient resources.\n")); + ExFreePool(KeyInformation); + ExFreePool(*ParameterValue); + *ParameterValue = NULL; + *Status = NDIS_STATUS_RESOURCES; + return; + } + + MiniportResource->ResourceType = 0; + MiniportResource->Resource = *ParameterValue; + NDIS_DbgPrint(MID_TRACE,("inserting 0x%x into the resource list\n", MiniportResource->Resource)); + ExInterlockedInsertTailList(&ConfigurationContext->ResourceListHead, &MiniportResource->ListEntry, &ConfigurationContext->ResourceLock); + + (*ParameterValue)->ParameterType = ParameterType; + memcpy(&((*ParameterValue)->ParameterData.BinaryData), KeyInformation->Data, KeyInformation->DataLength); + + ExFreePool(KeyInformation); + + *Status = NDIS_STATUS_SUCCESS; + + return; + } + } +} + + +UCHAR UnicodeToHexByte(WCHAR chr) +/* + * FUNCTION: Converts a unicode hex character to its numerical value + * ARGUMENTS: + * chr: Unicode character to convert + * RETURNS: + * The numerical value of chr + */ +{ + switch(chr) + { + case L'0': return 0; + case L'1': return 1; + case L'2': return 2; + case L'3': return 3; + case L'4': return 4; + case L'5': return 5; + case L'6': return 6; + case L'7': return 7; + case L'8': return 8; + case L'9': return 9; + case L'A': + case L'a': + return 10; + case L'B': + case L'b': + return 11; + case L'C': + case L'c': + return 12; + case L'D': + case L'd': + return 13; + case L'E': + case L'e': + return 14; + case L'F': + case L'f': + return 15; + } + return -1; +} + + +/* + * @implemented + */ +VOID +EXPORT +NdisReadNetworkAddress( + OUT PNDIS_STATUS Status, + OUT PVOID * NetworkAddress, + OUT PUINT NetworkAddressLength, + IN NDIS_HANDLE ConfigurationHandle) +/* + * FUNCTION: Reads the network address from the registry + * ARGUMENTS: + * Status - variable to receive status + * NetworkAddress - pointer to a buffered network address array + * NetworkAddressLength - length of the NetworkAddress array + * ConfigurationHandle: handle passed back from one of the open routines + * RETURNS: + * NDIS_STATUS_SUCCESS on success + * NDIS_STATUS_FAILURE on failure + * The network address is placed in the NetworkAddress buffer + */ +{ + PMINIPORT_CONFIGURATION_CONTEXT ConfigurationContext = (PMINIPORT_CONFIGURATION_CONTEXT)ConfigurationHandle; + PMINIPORT_RESOURCE MiniportResource = NULL; + PNDIS_CONFIGURATION_PARAMETER ParameterValue = NULL; + NDIS_STRING Keyword; + UINT *IntArray = 0; + int i; + + /* FIXME - We don't quite support this yet due to buggy code below */ + { + *Status = NDIS_STATUS_FAILURE; + return; + } + + *NetworkAddress = NULL; + *NetworkAddressLength = 6;/* XXX magic constant */ + + NdisInitUnicodeString(&Keyword, L"NetworkAddress"); + NdisReadConfiguration(Status, &ParameterValue, ConfigurationHandle, &Keyword, NdisParameterString); + if(*Status != NDIS_STATUS_SUCCESS) + { + *Status = NDIS_STATUS_FAILURE; + return; + } + + /* 6 bytes for ethernet, tokenring, fddi, everything else? */ + IntArray = ExAllocatePool(PagedPool, 6*sizeof(UINT)); + if(!IntArray) + { + NDIS_DbgPrint(MIN_TRACE,("Insufficient resources.\n")); + *Status = NDIS_STATUS_RESOURCES; + return; + } + + MiniportResource = ExAllocatePool(PagedPool, sizeof(MINIPORT_RESOURCE)); + if(!MiniportResource) + { + NDIS_DbgPrint(MIN_TRACE,("Insufficient resources.\n")); + *Status = NDIS_STATUS_FAILURE; + return; + } + + MiniportResource->ResourceType = 0; + MiniportResource->Resource = IntArray; + NDIS_DbgPrint(MID_TRACE,("inserting 0x%x into the resource list\n", MiniportResource->Resource)); + ExInterlockedInsertTailList(&ConfigurationContext->ResourceListHead, &MiniportResource->ListEntry, &ConfigurationContext->ResourceLock); + + /* convert from string to bytes */ + for(i=0; i<6; i++) + { + IntArray[i] = (UnicodeToHexByte((ParameterValue->ParameterData.StringData.Buffer)[2*i]) << 4) + + UnicodeToHexByte((ParameterValue->ParameterData.StringData.Buffer)[2*i+1]); + } + + *NetworkAddress = IntArray; + + *Status = NDIS_STATUS_SUCCESS; +} + + +/* + * @implemented + */ +VOID +EXPORT +NdisOpenConfigurationKeyByIndex( + OUT PNDIS_STATUS Status, + IN NDIS_HANDLE ConfigurationHandle, + IN ULONG Index, + OUT PNDIS_STRING KeyName, + OUT PNDIS_HANDLE KeyHandle) +/* + * FUNCTION: Opens a configuration subkey by index number + * ARGUMENTS: + * Status: pointer to an NDIS_STATUS to receive status info + * ConfigurationHandle: the handle passed back from a previous open function + * Index: the zero-based index of the subkey to open + * KeyName: the name of the key that was opened + * KeyHandle: a handle to the key that was opened + * RETURNS: + * NDIS_STATUS_SUCCESS on success + * NDIS_STATUS_FAILURE on failure + * KeyName holds the name of the opened key + * KeyHandle holds a handle to the new key + */ +{ + KEY_BASIC_INFORMATION *KeyInformation; + ULONG KeyInformationLength; + OBJECT_ATTRIBUTES KeyAttributes; + NDIS_HANDLE RegKeyHandle; + PMINIPORT_CONFIGURATION_CONTEXT ConfigurationContext; + + *Status = ZwEnumerateKey(ConfigurationHandle, Index, KeyBasicInformation, NULL, 0, &KeyInformationLength); + if(*Status != STATUS_BUFFER_TOO_SMALL && *Status != STATUS_BUFFER_OVERFLOW && *Status != STATUS_SUCCESS) + { + *Status = NDIS_STATUS_FAILURE; + return; + } + + KeyInformation = ExAllocatePool(PagedPool, KeyInformationLength + sizeof(KEY_BASIC_INFORMATION)); + if(!KeyInformation) + { + NDIS_DbgPrint(MIN_TRACE,("Insufficient resources.\n")); + *Status = NDIS_STATUS_FAILURE; + return; + } + + *Status = ZwEnumerateKey(ConfigurationHandle, Index, KeyBasicInformation, KeyInformation, + KeyInformationLength + sizeof(KEY_BASIC_INFORMATION), &KeyInformationLength); + + if(*Status != STATUS_SUCCESS) + { + ExFreePool(KeyInformation); + *Status = NDIS_STATUS_FAILURE; + return; + } + + /* should i fail instead if the passed-in string isn't long enough? */ + wcsncpy(KeyName->Buffer, KeyInformation->Name, KeyName->MaximumLength/sizeof(WCHAR)); + KeyName->Length = KeyInformation->NameLength; + + InitializeObjectAttributes(&KeyAttributes, KeyName, OBJ_CASE_INSENSITIVE, ConfigurationHandle, NULL); + + *Status = ZwOpenKey(&RegKeyHandle, KEY_ALL_ACCESS, &KeyAttributes); + + ExFreePool(KeyInformation); + + if(*Status != STATUS_SUCCESS) + { + *Status = NDIS_STATUS_FAILURE; + return; + } + + ConfigurationContext = ExAllocatePool(PagedPool, sizeof(MINIPORT_CONFIGURATION_CONTEXT)); + if(!ConfigurationContext) + { + NDIS_DbgPrint(MIN_TRACE,("Insufficient resources.\n")); + *Status = NDIS_STATUS_FAILURE; + return; + } + + KeInitializeSpinLock(&ConfigurationContext->ResourceLock); + InitializeListHead(&ConfigurationContext->ResourceListHead); + + ConfigurationContext->Handle = RegKeyHandle; + + *KeyHandle = (NDIS_HANDLE)ConfigurationContext; + + *Status = NDIS_STATUS_SUCCESS; +} + + +/* + * @implemented + */ +VOID +EXPORT +NdisOpenConfigurationKeyByName( + OUT PNDIS_STATUS Status, + IN NDIS_HANDLE ConfigurationHandle, + IN PNDIS_STRING KeyName, + OUT PNDIS_HANDLE KeyHandle) +/* + * FUNCTION: Opens a configuration subkey by name + * ARGUMENTS: + * Status: points to an NDIS_STATUS where status is returned + * ConfigurationHandle: handle returned by a previous open call + * KeyName: the name of the key to open + * KeyHandle: a handle to the opened key + * RETURNS: + * NDIS_STATUS_SUCCESS on success + * NDIS_STATUS_FAILURE on failure + * KeyHandle holds a handle to the newly-opened key + * NOTES: + */ +{ + PMINIPORT_CONFIGURATION_CONTEXT ConfigurationContext; + OBJECT_ATTRIBUTES KeyAttributes; + NDIS_HANDLE RegKeyHandle; + + InitializeObjectAttributes(&KeyAttributes, KeyName, OBJ_CASE_INSENSITIVE, ConfigurationHandle, 0); + *Status = ZwOpenKey(RegKeyHandle, KEY_ALL_ACCESS, &KeyAttributes); + + if(*Status != STATUS_SUCCESS) + { + *Status = NDIS_STATUS_FAILURE; + return; + } + + ConfigurationContext = ExAllocatePool(PagedPool, sizeof(MINIPORT_CONFIGURATION_CONTEXT)); + if(!ConfigurationContext) + { + NDIS_DbgPrint(MIN_TRACE,("Insufficient resources.\n")); + *Status = NDIS_STATUS_FAILURE; + return; + } + + KeInitializeSpinLock(&ConfigurationContext->ResourceLock); + InitializeListHead(&ConfigurationContext->ResourceListHead); + + ConfigurationContext->Handle = RegKeyHandle; + + *KeyHandle = (NDIS_HANDLE)ConfigurationContext; + + *Status = NDIS_STATUS_SUCCESS; +} + diff --git a/drivers/net/ndis/ndis/control.c b/drivers/net/ndis/ndis/control.c index 3947bc5..f7e33b9 100644 --- a/drivers/net/ndis/ndis/control.c +++ b/drivers/net/ndis/ndis/control.c @@ -9,6 +9,9 @@ */ #include +/* + * @implemented + */ VOID EXPORT NdisReinitializePacket( @@ -18,6 +21,10 @@ NdisReinitializePacket( (Packet)->Private.ValidCounts = FALSE; } + +/* + * @unimplemented + */ VOID EXPORT NdisAcquireReadWriteLock( @@ -35,6 +42,9 @@ NdisAcquireReadWriteLock( } +/* + * @implemented + */ VOID EXPORT NdisAcquireSpinLock( @@ -45,10 +55,13 @@ NdisAcquireSpinLock( * SpinLock = Pointer to the initialized NDIS spin lock to be acquired */ { - UNIMPLEMENTED + KeAcquireSpinLock(&SpinLock->SpinLock, &SpinLock->OldIrql); } +/* + * @implemented + */ VOID EXPORT NdisAllocateSpinLock( @@ -59,10 +72,13 @@ NdisAllocateSpinLock( * SpinLock = Pointer to an NDIS spin lock structure */ { - UNIMPLEMENTED + KeInitializeSpinLock(&SpinLock->SpinLock); } +/* + * @implemented + */ VOID EXPORT NdisDprAcquireSpinLock( @@ -73,10 +89,14 @@ NdisDprAcquireSpinLock( * SpinLock = Pointer to the initialized NDIS spin lock to be acquired */ { - UNIMPLEMENTED + KeAcquireSpinLockAtDpcLevel(&SpinLock->SpinLock); + SpinLock->OldIrql = DISPATCH_LEVEL; } +/* + * @implemented + */ VOID EXPORT NdisDprReleaseSpinLock( @@ -87,10 +107,13 @@ NdisDprReleaseSpinLock( * SpinLock = Pointer to the acquired NDIS spin lock to be released */ { - UNIMPLEMENTED + KeReleaseSpinLockFromDpcLevel(&SpinLock->SpinLock); } +/* + * @implemented + */ VOID EXPORT NdisFreeSpinLock( @@ -101,10 +124,13 @@ NdisFreeSpinLock( * SpinLock = Pointer to an initialized NDIS spin lock */ { - UNIMPLEMENTED + /* Nothing to do here! */ } +/* + * @unimplemented + */ VOID EXPORT NdisGetCurrentProcessorCpuUsage( @@ -119,6 +145,9 @@ NdisGetCurrentProcessorCpuUsage( } +/* + * @implemented + */ VOID EXPORT NdisInitializeEvent( @@ -129,10 +158,13 @@ NdisInitializeEvent( * Event = Pointer to an NDIS event structure to be initialized */ { - UNIMPLEMENTED + KeInitializeEvent(&Event->Event, NotificationEvent, FALSE); } +/* + * @implemented + */ VOID EXPORT NdisReleaseSpinLock( @@ -143,10 +175,13 @@ NdisReleaseSpinLock( * SpinLock = Pointer to the acquired NDIS spin lock to be released */ { - UNIMPLEMENTED + KeReleaseSpinLock(&SpinLock->SpinLock, SpinLock->OldIrql); } +/* + * @implemented + */ VOID EXPORT NdisResetEvent( @@ -157,10 +192,13 @@ NdisResetEvent( * Event = Pointer to the initialized event object to be reset */ { - UNIMPLEMENTED + KeResetEvent(&Event->Event); } +/* + * @implemented + */ VOID EXPORT NdisSetEvent( @@ -171,10 +209,13 @@ NdisSetEvent( * Event = Pointer to the initialized event object to be set */ { - UNIMPLEMENTED + KeSetEvent(&Event->Event, IO_NO_INCREMENT, FALSE); } +/* + * @implemented + */ BOOLEAN EXPORT NdisWaitEvent( @@ -189,9 +230,18 @@ NdisWaitEvent( * TRUE if the event is in the signaled state */ { - UNIMPLEMENTED + LARGE_INTEGER Timeout; + NTSTATUS Status; + + Timeout.QuadPart = MsToWait * -10000LL; + + Status = KeWaitForSingleObject(&Event->Event, + Executive, + KernelMode, + TRUE, + &Timeout); - return FALSE; + return (Status == STATUS_SUCCESS); } /* EOF */ diff --git a/drivers/net/ndis/ndis/enum.c b/drivers/net/ndis/ndis/enum.c new file mode 100644 index 0000000..47be389 --- /dev/null +++ b/drivers/net/ndis/ndis/enum.c @@ -0,0 +1,453 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS NDIS library + * FILE: ndis/config.c + * PURPOSE: NDIS Configuration Services + * PROGRAMMERS: Vizzini (vizzini@plasmic.com) + * REVISIONS: + * Vizzini 08-20-2003 Created + * NOTES: + * - Currently this only supports enumeration of Root and PCI devices + * - This whole thing is really just a band-aid until we have real PnP + * - Strictly speaking, I'm not even sure it's my job to call + * HalAssignSlotResources(), but the vmware nic driver likes it + * - Please send me feedback if there is a better way :) + * TODO: + * - Break these functions up a bit; i hate 200-line functions + */ + +#include +#include + +/* Registry path to the enumeration database */ +#define ENUM_KEY L"\\Registry\\Machine\\System\\CurrentControlSet\\Enum" + +/* Registry path to the services database */ +#define SERVICES_KEY L"\\Registry\\Machine\\System\\CurrentControlSet\\Services" + +/* + * This has to be big enough to hold enumerated registry paths until + * registry accesses are properly re-coded + */ +#define KEY_INFORMATION_SIZE 512 + +/* same sort of deal as above */ +#define VALUE_INFORMATION_SIZE 100 + +/* + * NET class GUID, as defined by Microsoft, used to tell if a + * device belongs to NDIS or not. + */ +#define NET_GUID L"{4D36E972-E325-11CE-BFC1-08002BE10318}" + +#define RZ() do { DbgPrint("%s:%i Checking RedZone\n", __FILE__, __LINE__ ); ExAllocatePool(PagedPool,0); } while (0); + +/* see miniport.c */ +extern LIST_ENTRY OrphanAdapterListHead; +extern KSPIN_LOCK OrphanAdapterListLock; + + +BOOLEAN NdisFindDevicePci(UINT VendorID, UINT DeviceID, PUINT BusNumber, PUINT SlotNumber) +/* + * FUNCTION: Find a PCI device given its Vendor and Device IDs + * ARGUMENTS: + * VendorID: The card's PCI Vendor ID + * DeviceID: The card's PCI Device ID + * BusNumber: The card's bus number on success + * SlotNumber: The card's slot number on success + * RETURNS: + * TRUE if the card is fouund + * FALSE Otherwise + * NOTES: + * - This only finds the first card of a type + * - This doesn't handle function enumeration correctly + * - Based loosely on Dekker & Newcomer examples + */ +{ + PCI_COMMON_CONFIG PciData; + int i, j, k; + + ASSERT(KeGetCurrentIrql() == PASSIVE_LEVEL); + + /* dekker says there are 256 possible PCI buses */ + for(i = 0; i < 256; i++) + { + for(j = 0; j < PCI_MAX_DEVICES; j++) + { + for(k = 0; k < PCI_MAX_FUNCTION; k++) + { + /* TODO: figure out what to do with k */ + + if(HalGetBusData(PCIConfiguration, i, j, &PciData, sizeof(PciData))) + { + if(PciData.VendorID == 0xffff) /* Is this handled right? */ + continue; + + if(PciData.VendorID == VendorID && PciData.DeviceID == DeviceID) + { + if(BusNumber) + *BusNumber = i; + if(SlotNumber) + *SlotNumber = j; + + return TRUE; + } + } + } + } + } + + NDIS_DbgPrint(MAX_TRACE, ("Didn't find device 0x%x:0x%x\n", VendorID, DeviceID)); + + return FALSE; +} + + +VOID NdisStartDriver(PUNICODE_STRING uBusName, PUNICODE_STRING uDeviceId, PUNICODE_STRING uServiceName) +/* + * FUNCTION: Starts an NDIS driver + * ARGUMENTS: + * uBusName: the card's bus type, by name, as extracted from the + * enumeration database in the registry + * uDeviceId: the card's device ID + * uServiceName: the driver (scm db entry) associated with the card + * NOTES: + * - This doesn't prooperly handle multiple instances of the same card or driver + * - for PCI cards, this finds the card and creates an "orphan" adapter object for + * it. This object is tagged with the registry key to the driver and includes + * the slot number and bus number of the card. NOTE that some stupid nic drivers + * still depend on a registry key for slot number, so this isn't always enough. + * Whatever the case, all of the card's resources are enumerated and assigned + * via HalAssignSlotResources() and the orphan adapter is put onto the list. + * When the miniport calls NdisMRegisterMiniport(), ndis loops through the list + * of orphans and associates any orphans that belong to that miniport with + * its corresponding LOGICAL_ADAPTER objects. + */ +{ + ULONG VendorId; + ULONG DeviceId; + UINT SlotNumber; + UINT BusNumber; + UNICODE_STRING Temp; + UNICODE_STRING ServiceKey; + PWCHAR ServiceKeyStr; + NTSTATUS NtStatus; + PORPHAN_ADAPTER OrphanAdapter; + + NDIS_DbgPrint(MAX_TRACE, ("Called; Starting %wZ\n", uServiceName)); + + ASSERT(KeGetCurrentIrql() == PASSIVE_LEVEL); + + /* prepare a services key */ + ServiceKeyStr = ExAllocatePool(PagedPool, sizeof(SERVICES_KEY) + sizeof(WCHAR) + uServiceName->Length); + if(!ServiceKeyStr) + { + NDIS_DbgPrint(MIN_TRACE, ("Insufficient Resources.\n")); + return; + } + + wcscpy(ServiceKeyStr, SERVICES_KEY); + wcscat(ServiceKeyStr, L"\\"); + wcsncat(ServiceKeyStr, uServiceName->Buffer, uServiceName->Length/sizeof(WCHAR)); + ServiceKeyStr[wcslen(SERVICES_KEY)+1+uServiceName->Length/sizeof(WCHAR)] = 0; + + RtlInitUnicodeString(&ServiceKey, ServiceKeyStr); + + if(!wcsncmp(uBusName->Buffer, L"PCI", uBusName->Length)) + { + /* + * first see if a card with the requested id exists. + * PCI IDs are formatted VEN_ABCD&DEV_ABCD[&...] + */ + + if(wcsncmp(uDeviceId->Buffer, L"VEN_", 4)) + { + NDIS_DbgPrint(MIN_TRACE, ("Bogus uDeviceId parsing VEN\n")); + ExFreePool(ServiceKeyStr); + return; + } + + Temp.Buffer = &(uDeviceId->Buffer[4]); /* offset of vendor id */ + Temp.Length = Temp.MaximumLength = 4 * sizeof(WCHAR); /* 4-digit id */ + + NtStatus = RtlUnicodeStringToInteger(&Temp, 16, &VendorId); + if(!NT_SUCCESS(NtStatus)) + { + NDIS_DbgPrint(MIN_TRACE, ("RtlUnicodeStringToInteger returned 0x%x\n", NtStatus)); + ExFreePool(ServiceKeyStr); + return; + } + + if(wcsncmp(&(uDeviceId->Buffer[9]), L"DEV_", 4)) + { + NDIS_DbgPrint(MIN_TRACE, ("Bogus uDeviceId parsing DEV\n")); + ExFreePool(ServiceKeyStr); + return; + } + + Temp.Buffer = &(uDeviceId->Buffer[13]); /* offset of device id */ + Temp.Length = 4 * sizeof(WCHAR); /* 4-dight id */ + + NtStatus = RtlUnicodeStringToInteger(&Temp, 16, &DeviceId); + if(!NT_SUCCESS(NtStatus)) + { + NDIS_DbgPrint(MIN_TRACE, ("RtlUnicodeStringToInteger returned 0x%x\n", NtStatus)); + ExFreePool(ServiceKeyStr); + return; + } + + if(!NdisFindDevicePci(VendorId, DeviceId, &BusNumber, &SlotNumber)) + { + NDIS_DbgPrint(MIN_TRACE, ("Didn't find a configured card 0x%x 0x%x\n", VendorId, DeviceId)); + ExFreePool(ServiceKeyStr); + return; + } + + NDIS_DbgPrint(MAX_TRACE, ("Found a card 0x%x 0x%x at bus 0x%x slot 0x%x\n", VendorId, DeviceId, BusNumber, SlotNumber)); + + OrphanAdapter = ExAllocatePool(PagedPool, sizeof(ORPHAN_ADAPTER)); + if(!OrphanAdapter) + { + NDIS_DbgPrint(MIN_TRACE, ("Insufficient Resources.\n")); + ExFreePool(ServiceKeyStr); + return; + } + + OrphanAdapter->RegistryPath.Buffer = ExAllocatePool(PagedPool, Temp.MaximumLength); + if(!OrphanAdapter->RegistryPath.Buffer) + { + NDIS_DbgPrint(MIN_TRACE, ("Insufficient Resources.\n")); + ExFreePool(ServiceKeyStr); + return; + } + + OrphanAdapter->RegistryPath.Length = Temp.Length; + OrphanAdapter->RegistryPath.MaximumLength = Temp.MaximumLength; + memcpy(OrphanAdapter->RegistryPath.Buffer, Temp.Buffer, Temp.Length); + + OrphanAdapter->BusType = PCIBus; + OrphanAdapter->BusNumber = BusNumber; + OrphanAdapter->SlotNumber = SlotNumber; + + ExInterlockedInsertTailList(&OrphanAdapterListHead, &OrphanAdapter->ListEntry, &OrphanAdapterListLock); + } + + /* + * found a card; start its driver. this should be done from a + * system thread, after NDIS.SYS's DriverEntry returns, but I + * really don't know how to block on DriverEntry returning, so + * what the hell. + */ + + NDIS_DbgPrint(MID_TRACE, ("Loading driver %wZ\n", &ServiceKey)); + ZwLoadDriver(&ServiceKey); + + ExFreePool(ServiceKeyStr); +} + + +VOID NdisStartDevices() +/* + * FUNCTION: Find and start all NDIS Net class devices + * NOTES: + * - Not sure if this handles multiple instances of the same + * device or driver correctly yet + */ +{ + HANDLE EnumHandle; + OBJECT_ATTRIBUTES ObjectAttributes; + UNICODE_STRING KeyName; + NTSTATUS NtStatus; + ULONG EnumIndex = 0; + ULONG ResultLength; + PKEY_BASIC_INFORMATION KeyInformation; + ULONG KeyInformationLength; + + NDIS_DbgPrint(MAX_TRACE, ("Called.\n")); + + ASSERT(KeGetCurrentIrql() == PASSIVE_LEVEL); + + RtlInitUnicodeString(&KeyName, ENUM_KEY); + InitializeObjectAttributes(&ObjectAttributes, &KeyName, OBJ_CASE_INSENSITIVE, 0, 0); + NtStatus = ZwOpenKey(&EnumHandle, KEY_ALL_ACCESS, &ObjectAttributes); + if(!NT_SUCCESS(NtStatus)) + { + NDIS_DbgPrint(MIN_TRACE, ("Unable to open the Enum key\n")); + return; + } + + NDIS_DbgPrint(MAX_TRACE, ("Opened the enum key\n")); + + KeyInformation = ExAllocatePool(PagedPool, KEY_INFORMATION_SIZE); // should be enough for most key names? + if(!KeyInformation) + { + NDIS_DbgPrint(MIN_TRACE, ("Insufficient resources.\n")); + return; + } + + KeyInformationLength = KEY_INFORMATION_SIZE; + + while(NT_SUCCESS(ZwEnumerateKey(EnumHandle, EnumIndex, + KeyBasicInformation, KeyInformation, KeyInformationLength, &ResultLength))) + { + /* iterate through each enumerator (PCI, Root, ISAPNP, etc) */ + + HANDLE EnumeratorHandle; + WCHAR *EnumeratorStr; + UINT EnumeratorIndex = 0; + + NDIS_DbgPrint(MAX_TRACE, ("Enum iteration 0x%x\n", EnumIndex)); + + EnumIndex++; + + EnumeratorStr = ExAllocatePool(PagedPool, sizeof(WCHAR) + KeyInformation->NameLength); + if(!EnumeratorStr) + { + NDIS_DbgPrint(MIN_TRACE, ("Insufficient resources.\n")); + return; + } + + wcsncpy(EnumeratorStr, KeyInformation->Name, KeyInformation->NameLength/sizeof(WCHAR)); + EnumeratorStr[KeyInformation->NameLength/sizeof(WCHAR)] = 0; + + RtlInitUnicodeString(&KeyName, EnumeratorStr); + InitializeObjectAttributes(&ObjectAttributes, &KeyName, OBJ_CASE_INSENSITIVE, EnumHandle, 0); + if(!NT_SUCCESS(ZwOpenKey(&EnumeratorHandle, KEY_ALL_ACCESS, &ObjectAttributes))) + { + NDIS_DbgPrint(MIN_TRACE, ("Failed to open key %wZ\n", &KeyName)); + return; + } + + while(NT_SUCCESS(ZwEnumerateKey(EnumeratorHandle, EnumeratorIndex, KeyBasicInformation, + KeyInformation, KeyInformationLength, &ResultLength))) + { + /* iterate through each device id */ + + HANDLE DeviceHandle; + WCHAR *DeviceStr; + UINT DeviceIndex = 0; + UNICODE_STRING BusName; + + BusName.Buffer = KeyName.Buffer; + BusName.Length = KeyName.Length; + BusName.MaximumLength = KeyName.MaximumLength; + + EnumeratorIndex++; + + DeviceStr = ExAllocatePool(PagedPool, KeyInformation->NameLength + sizeof(WCHAR)); + if(!DeviceStr) + { + NDIS_DbgPrint(MIN_TRACE, ("Insufficient resources.\n")); + return; + } + + wcsncpy(DeviceStr, KeyInformation->Name, KeyInformation->NameLength/sizeof(WCHAR)); + DeviceStr[KeyInformation->NameLength/sizeof(WCHAR)] = 0; + + RtlInitUnicodeString(&KeyName, DeviceStr); + InitializeObjectAttributes(&ObjectAttributes, &KeyName, OBJ_CASE_INSENSITIVE, EnumeratorHandle, 0); + if(!NT_SUCCESS(ZwOpenKey(&DeviceHandle, KEY_ALL_ACCESS, &ObjectAttributes))) + { + NDIS_DbgPrint(MIN_TRACE, ("Failed to open key %wZ\n", &KeyName)); + return; + } + + while(NT_SUCCESS(ZwEnumerateKey(DeviceHandle, DeviceIndex, KeyBasicInformation, + KeyInformation, KeyInformationLength, &ResultLength))) + { + /* iterate through each instance id, starting drivers in the process */ + HANDLE InstanceHandle; + WCHAR *InstanceStr; + UNICODE_STRING ValueName; + UNICODE_STRING ServiceName; + PKEY_VALUE_PARTIAL_INFORMATION KeyValueInformation; + ULONG KeyValueInformationLength; + UNICODE_STRING DeviceId; + + DeviceId.Buffer = KeyName.Buffer; + DeviceId.Length = KeyName.Length; + DeviceId.MaximumLength = KeyName.MaximumLength; + + DeviceIndex++; + + InstanceStr = ExAllocatePool(PagedPool, KeyInformation->NameLength + sizeof(WCHAR)); + if(!InstanceStr) + { + NDIS_DbgPrint(MIN_TRACE, ("Insufficient resources.\n")); + return; + } + + wcsncpy(InstanceStr, KeyInformation->Name, KeyInformation->NameLength/sizeof(WCHAR)); + InstanceStr[KeyInformation->NameLength/sizeof(WCHAR)] = 0; + + NDIS_DbgPrint(MAX_TRACE, ("NameLength = 0x%x and InstanceStr: %ws\n", KeyInformation->NameLength, InstanceStr)); + + RtlInitUnicodeString(&KeyName, InstanceStr); + InitializeObjectAttributes(&ObjectAttributes, &KeyName, OBJ_CASE_INSENSITIVE, DeviceHandle, 0); + if(!NT_SUCCESS(ZwOpenKey(&InstanceHandle, KEY_ALL_ACCESS, &ObjectAttributes))) + { + NDIS_DbgPrint(MIN_TRACE, ("Failed to open key %wZ\n", &KeyName)); + return; + } + + /* read class, looking for net guid */ + RtlInitUnicodeString(&ValueName, L"ClassGUID"); + + NDIS_DbgPrint(MAX_TRACE, ("About to ask for 0x%x bytes\n", VALUE_INFORMATION_SIZE)); + + KeyValueInformation = ExAllocatePool(PagedPool, VALUE_INFORMATION_SIZE); + if(!KeyValueInformation) + { + NDIS_DbgPrint(MIN_TRACE, ("Insufficient resources.\n")); + return; + } + + KeyValueInformationLength = VALUE_INFORMATION_SIZE; + + NtStatus = ZwQueryValueKey(InstanceHandle, &ValueName, KeyValuePartialInformation, + KeyValueInformation, KeyValueInformationLength, &ResultLength); + if(!NT_SUCCESS(NtStatus)) + { + /* this isn't fatal, it just means that this device isn't ours */ + NDIS_DbgPrint(MID_TRACE, ("Failed to query value %wZ from key %wZ\n", &ValueName, &KeyName)); + continue; + } + + if(!wcsncmp(NET_GUID, (PWCHAR)KeyValueInformation->Data, KeyValueInformation->DataLength/sizeof(WCHAR))) + { + RtlInitUnicodeString(&ValueName, L"Service"); + + NtStatus = ZwQueryValueKey(InstanceHandle, &ValueName, KeyValuePartialInformation, + KeyValueInformation, KeyValueInformationLength, &ResultLength); + if(!NT_SUCCESS(NtStatus)) + { + /* non-fatal also */ + NDIS_DbgPrint(MID_TRACE, ("Failed to query value %wZ from key %wZ\n", &ValueName, &KeyName)); + continue; + } + + /* this is a net driver; start it */ + ServiceName.Length = ServiceName.MaximumLength = KeyValueInformation->DataLength; + ServiceName.Buffer = (PWCHAR)KeyValueInformation->Data; + NdisStartDriver(&BusName, &DeviceId, &ServiceName); + } + else + NDIS_DbgPrint(MAX_TRACE, ("...this device is not ours\n")); + + ExFreePool(KeyValueInformation); + ExFreePool(InstanceStr); + ZwClose(InstanceHandle); + } + + ExFreePool(DeviceStr); + ZwClose(DeviceHandle); + } + + ExFreePool(EnumeratorStr); + ZwClose(EnumeratorHandle); + } + + ZwClose(EnumHandle); + ExFreePool(KeyInformation); +} + diff --git a/drivers/net/ndis/ndis/hardware.c b/drivers/net/ndis/ndis/hardware.c index 8fcbb80..b27ce77 100644 --- a/drivers/net/ndis/ndis/hardware.c +++ b/drivers/net/ndis/ndis/hardware.c @@ -4,12 +4,18 @@ * FILE: ndis/hardware.c * PURPOSE: Hardware related routines * PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net) + * Vizzini (vizzini@plasmic.com) * REVISIONS: * CSH 01/08-2000 Created + * 8/25/2003 Vizzini - NDIS4/5 and PnP additions */ #include +#include +/* + * @implemented + */ ULONG EXPORT NdisImmediateReadPciSlotInformation( @@ -19,12 +25,18 @@ NdisImmediateReadPciSlotInformation( IN PVOID Buffer, IN ULONG Length) { - UNIMPLEMENTED - - return 0; + return HalGetBusDataByOffset (PCIConfiguration, + 0, /* FIXME */ + SlotNumber, + Buffer, + Offset, + Length); } +/* + * @implemented + */ ULONG EXPORT NdisImmediateWritePciSlotInformation( @@ -34,25 +46,58 @@ NdisImmediateWritePciSlotInformation( IN PVOID Buffer, IN ULONG Length) { - UNIMPLEMENTED - - return 0; + return HalSetBusDataByOffset (PCIConfiguration, + 0, /* FIXME */ + SlotNumber, + Buffer, + Offset, + Length); } +/* + * @implemented + */ NDIS_STATUS EXPORT NdisMPciAssignResources( IN NDIS_HANDLE MiniportHandle, IN ULONG SlotNumber, OUT PNDIS_RESOURCE_LIST *AssignedResources) +/* + * NOTES: + * - I think this is fundamentally broken + */ { - UNIMPLEMENTED - - return NDIS_STATUS_FAILURE; + PCM_RESOURCE_LIST ResourceList; + NTSTATUS Status; + PLOGICAL_ADAPTER Adapter = (PLOGICAL_ADAPTER)MiniportHandle; + + ResourceList = NULL; + Status = HalAssignSlotResources (Adapter->Miniport->RegistryPath, + 0, + Adapter->Miniport->DriverObject, + 0, + PCIBus, + Adapter->BusNumber, + SlotNumber, + &ResourceList); + if (!NT_SUCCESS (Status)) + { + *AssignedResources = NULL; + return NDIS_STATUS_FAILURE; + } + + *AssignedResources = + (PNDIS_RESOURCE_LIST)&ResourceList->List[0].PartialResourceList; + + return NDIS_STATUS_SUCCESS; } +/* + * @unimplemented + */ VOID EXPORT NdisMQueryAdapterResources( @@ -65,18 +110,27 @@ NdisMQueryAdapterResources( } +/* + * @implemented + */ NDIS_STATUS EXPORT NdisQueryMapRegisterCount( IN NDIS_INTERFACE_TYPE BusType, OUT PUINT MapRegisterCount) +/* + * On X86 (and all other current hardware), map registers aren't real hardware, + * and there is no real limit to the number that can be allocated. + * As such, we do what microsoft does on the x86 hals and return as follows + */ { - UNIMPLEMENTED - - return NDIS_STATUS_FAILURE; + return NDIS_STATUS_NOT_SUPPORTED; } +/* + * @unimplemented + */ VOID EXPORT NdisReadEisaSlotInformation( @@ -89,6 +143,9 @@ NdisReadEisaSlotInformation( } +/* + * @unimplemented + */ VOID EXPORT NdisReadEisaSlotInformationEx( @@ -102,6 +159,9 @@ NdisReadEisaSlotInformationEx( } +/* + * @implemented + */ ULONG EXPORT NdisReadPciSlotInformation( @@ -111,12 +171,18 @@ NdisReadPciSlotInformation( IN PVOID Buffer, IN ULONG Length) { - UNIMPLEMENTED - - return 0; + return HalGetBusDataByOffset (PCIConfiguration, + 0, /* FIXME */ + SlotNumber, + Buffer, + Offset, + Length); } +/* + * @implemented + */ ULONG EXPORT NdisWritePciSlotInformation( @@ -126,9 +192,12 @@ NdisWritePciSlotInformation( IN PVOID Buffer, IN ULONG Length) { - UNIMPLEMENTED - - return 0; + return HalSetBusDataByOffset (PCIConfiguration, + 0, /* FIXME */ + SlotNumber, + Buffer, + Offset, + Length); } /* EOF */ diff --git a/drivers/net/ndis/ndis/io.c b/drivers/net/ndis/ndis/io.c index 8ba5b98..e193bc9 100644 --- a/drivers/net/ndis/ndis/io.c +++ b/drivers/net/ndis/ndis/io.c @@ -4,13 +4,14 @@ * FILE: ndis/io.c * PURPOSE: I/O related routines * PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net) + * Vizzini (vizzini@plasmic.com) * REVISIONS: * CSH 01/08-2000 Created + * 8-20-2003 Vizzini - DMA support */ #include #include - VOID STDCALL HandleDeferredProcessing( IN PKDPC Dpc, IN PVOID DeferredContext, @@ -84,6 +85,9 @@ BOOLEAN STDCALL ServiceRoutine( } +/* + * @unimplemented + */ VOID EXPORT NdisCompleteDmaTransfer( @@ -98,6 +102,9 @@ NdisCompleteDmaTransfer( } +/* + * @unimplemented + */ VOID EXPORT NdisFlushBuffer( @@ -108,6 +115,9 @@ NdisFlushBuffer( } +/* + * @unimplemented + */ ULONG EXPORT NdisGetCacheFillSize( @@ -119,6 +129,9 @@ NdisGetCacheFillSize( } +/* + * @implemented + */ VOID EXPORT NdisImmediateReadPortUchar( @@ -126,10 +139,14 @@ NdisImmediateReadPortUchar( IN ULONG Port, OUT PUCHAR Data) { - UNIMPLEMENTED + NDIS_DbgPrint(MAX_TRACE, ("Called.\n")); + *Data = READ_PORT_UCHAR((PUCHAR)Port); // FIXME: What to do with WrapperConfigurationContext? } +/* + * @implemented + */ VOID EXPORT NdisImmediateReadPortUlong( @@ -137,10 +154,14 @@ NdisImmediateReadPortUlong( IN ULONG Port, OUT PULONG Data) { - UNIMPLEMENTED + NDIS_DbgPrint(MAX_TRACE, ("Called.\n")); + *Data = READ_PORT_ULONG((PULONG)Port); // FIXME: What to do with WrapperConfigurationContext? } +/* + * @implemented + */ VOID EXPORT NdisImmediateReadPortUshort( @@ -148,10 +169,14 @@ NdisImmediateReadPortUshort( IN ULONG Port, OUT PUSHORT Data) { - UNIMPLEMENTED + NDIS_DbgPrint(MAX_TRACE, ("Called.\n")); + *Data = READ_PORT_USHORT((PUSHORT)Port); // FIXME: What to do with WrapperConfigurationContext? } +/* + * @implemented + */ VOID EXPORT NdisImmediateWritePortUchar( @@ -159,10 +184,14 @@ NdisImmediateWritePortUchar( IN ULONG Port, IN UCHAR Data) { - UNIMPLEMENTED + NDIS_DbgPrint(MAX_TRACE, ("Called.\n")); + WRITE_PORT_UCHAR((PUCHAR)Port, Data); // FIXME: What to do with WrapperConfigurationContext? } +/* + * @implemented + */ VOID EXPORT NdisImmediateWritePortUlong( @@ -170,10 +199,14 @@ NdisImmediateWritePortUlong( IN ULONG Port, IN ULONG Data) { - UNIMPLEMENTED + NDIS_DbgPrint(MAX_TRACE, ("Called.\n")); + WRITE_PORT_ULONG((PULONG)Port, Data); // FIXME: What to do with WrapperConfigurationContext? } +/* + * @unimplemented + */ VOID EXPORT NdisImmediateWritePortUshort( @@ -181,25 +214,179 @@ NdisImmediateWritePortUshort( IN ULONG Port, IN USHORT Data) { - UNIMPLEMENTED + NDIS_DbgPrint(MAX_TRACE, ("Called.\n")); + WRITE_PORT_USHORT((PUSHORT)Port, Data); // FIXME: What to do with WrapperConfigurationContext? } +IO_ALLOCATION_ACTION NdisMapRegisterCallback ( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp, + IN PVOID MapRegisterBase, + IN PVOID Context) +/* + * FUNCTION: Called back during reservation of map registers + */ +{ + PLOGICAL_ADAPTER Adapter = (PLOGICAL_ADAPTER)Context; + PADAPTER_MAP_REGISTER_LIST Register = ExAllocatePool(NonPagedPool, sizeof(ADAPTER_MAP_REGISTER_LIST)); + + NDIS_DbgPrint(MAX_TRACE, ("Called.\n")); + + if(!Register) + { + NDIS_DbgPrint(MIN_TRACE, ("Insufficient resources\n")); + KeSetEvent(&Adapter->DmaEvent, 0, FALSE); + return DeallocateObject; + } + + Register->MapRegister = MapRegisterBase; + Register->NumRegisters = Adapter->MapRegistersRequested; + + ExInterlockedInsertTailList(&Adapter->MapRegisterList.ListEntry, &Register->ListEntry, &Adapter->DmaLock); + + KeSetEvent(&Adapter->DmaEvent, 0, FALSE); + + /* XXX this is only the thing to do for busmaster NICs */ + return DeallocateObjectKeepRegisters; +} + +/* + * @implemented + */ NDIS_STATUS EXPORT NdisMAllocateMapRegisters( IN NDIS_HANDLE MiniportAdapterHandle, IN UINT DmaChannel, - IN BOOLEAN Dma32BitAddresses, - IN ULONG PhysicalMapRegistersNeeded, - IN ULONG MaximumPhysicalMapping) + IN BOOLEAN DmaSize, + IN ULONG BaseMapRegistersNeeded, + IN ULONG MaximumBufferSize) +/* + * FUNCTION: Allocate map registers for use in DMA transfers + * ARGUMENTS: + * MiniportAdapterHandle: Passed in to MiniportInitialize + * DmaChannel: DMA channel to use + * DmaSize: bit width of DMA transfers + * BaseMapRegistersNeeded: number of map registers requested + * MaximumBufferSize: largest single buffer transferred + * RETURNS: + * NDIS_STATUS_SUCCESS on success + * NDIS_STATUS_RESOURCES on failure + * NOTES: + * - the win2k ddk and the nt4 ddk have conflicting prototypes for this. + * I'm implementing the 2k one. + */ { - UNIMPLEMENTED + DEVICE_DESCRIPTION Description; + PADAPTER_OBJECT AdapterObject = 0; + UINT MapRegistersRequired = 0; + UINT MapRegistersPerBaseRegister = 0; + ULONG AvailableMapRegisters; + NTSTATUS NtStatus; + PLOGICAL_ADAPTER Adapter = 0; + PDEVICE_OBJECT DeviceObject = 0; + KIRQL OldIrql; + + NDIS_DbgPrint(MAX_TRACE, ("called: Handle 0x%x, DmaChannel 0x%x, DmaSize 0x%x, BaseMapRegsNeeded: 0x%x, MaxBuffer: 0x%x.\n", + MiniportAdapterHandle, DmaChannel, DmaSize, BaseMapRegistersNeeded, MaximumBufferSize)); + + memset(&Description,0,sizeof(Description)); + + Adapter = (PLOGICAL_ADAPTER)MiniportAdapterHandle; + DeviceObject = Adapter->NdisMiniportBlock.DeviceObject; + + InitializeListHead(&Adapter->MapRegisterList.ListEntry); + KeInitializeEvent(&Adapter->DmaEvent, NotificationEvent, FALSE); + KeInitializeSpinLock(&Adapter->DmaLock); + + /* + * map registers correlate to physical pages. ndis documents a + * maximum of 64 map registers that it will return. + * at 4k pages, a 1514-byte buffer can span not more than 2 pages. + * + * the number of registers required for a given physical mapping + * is (first register + last register + one per page size), + * given that physical mapping is > 2. + */ + + /* unhandled corner case: 1-byte max buffer size */ + MapRegistersPerBaseRegister = 2 + MaximumBufferSize / PAGE_SIZE; + MapRegistersRequired = BaseMapRegistersNeeded * MapRegistersPerBaseRegister; + + if(MapRegistersRequired > 64) + { + NDIS_DbgPrint(MID_TRACE, ("Request for too many map registers: %d\n", MapRegistersRequired)); + return NDIS_STATUS_RESOURCES; + } - return NDIS_STATUS_FAILURE; + Description.Version = DEVICE_DESCRIPTION_VERSION; + Description.Master = TRUE; /* implied by calling this function */ + Description.ScatterGather = FALSE; /* implied by calling this function */ + Description.DemandMode = 0; /* unused due to bus master */ + Description.AutoInitialize = 0; /* unused due to bus master */ + Description.Dma32BitAddresses = DmaSize; + Description.IgnoreCount = 0; /* unused due to bus master */ + Description.Reserved1 = 0; + Description.Reserved2 = 0; + Description.BusNumber = Adapter->BusNumber; + Description.DmaChannel = 0; /* unused due to bus master */ + Description.InterfaceType = Adapter->BusType; + Description.DmaChannel = 0; /* unused due to bus master */ + Description.DmaWidth = 0; /* unused (i think) due to bus master */ + Description.DmaSpeed = 0; /* unused (i think) due to bus master */ + Description.MaximumLength = 0; /* unused (i think) due to bus master */ + Description.DmaPort = 0; /* unused due to bus type */ + + AvailableMapRegisters = MapRegistersRequired; + AdapterObject = HalGetAdapter(&Description, &AvailableMapRegisters); + + if(!AdapterObject) + { + NDIS_DbgPrint(MIN_TRACE, ("Unable to allocate an adapter object; bailing out\n")); + return NDIS_STATUS_RESOURCES; + } + + Adapter->AdapterObject = AdapterObject; + + if(AvailableMapRegisters < MapRegistersRequired) + { + NDIS_DbgPrint(MIN_TRACE, ("Didn't get enough map registers from hal - requested 0x%x, got 0x%x\n", + MapRegistersRequired, AvailableMapRegisters)); + return NDIS_STATUS_RESOURCES; + } + + KeRaiseIrql(DISPATCH_LEVEL, &OldIrql); + + Adapter->MapRegistersRequested = MapRegistersRequired; + + NtStatus = IoAllocateAdapterChannel(AdapterObject, DeviceObject, + MapRegistersRequired, NdisMapRegisterCallback, Adapter); + + KeLowerIrql(OldIrql); + + if(!NT_SUCCESS(NtStatus)) + { + NDIS_DbgPrint(MIN_TRACE, ("IoAllocateAdapterChannel failed: 0x%x\n", NtStatus)); + return NDIS_STATUS_RESOURCES; + } + + NtStatus = KeWaitForSingleObject(&Adapter->DmaEvent, Executive, KernelMode, FALSE, 0); + + if(!NT_SUCCESS(NtStatus)) + { + NDIS_DbgPrint(MIN_TRACE, ("KeWaitForSingleObject failed: 0x%x\n", NtStatus)); + return NDIS_STATUS_RESOURCES; + } + + NDIS_DbgPrint(MAX_TRACE, ("returning success\n")); + return NDIS_STATUS_SUCCESS; } +/* + * @unimplemented + */ VOID EXPORT NdisMCompleteDmaTransfer( @@ -214,6 +401,9 @@ NdisMCompleteDmaTransfer( } +/* + * @unimplemented + */ VOID EXPORT NdisMDeregisterDmaChannel( @@ -223,6 +413,9 @@ NdisMDeregisterDmaChannel( } +/* + * @implemented + */ VOID EXPORT NdisMDeregisterInterrupt( @@ -233,10 +426,14 @@ NdisMDeregisterInterrupt( * Interrupt = Pointer to interrupt object */ { + NDIS_DbgPrint(MAX_TRACE, ("Called.\n")); IoDisconnectInterrupt(Interrupt->InterruptObject); } +/* + * @unimplemented + */ VOID EXPORT NdisMDeregisterIoPortRange( @@ -254,20 +451,50 @@ NdisMDeregisterIoPortRange( */ { NDIS_DbgPrint(MAX_TRACE, ("Called.\n")); - - /* Thank you */ } +/* + * @implemented + */ VOID EXPORT NdisMFreeMapRegisters( IN NDIS_HANDLE MiniportAdapterHandle) +/* + * FUNCTION: Free previously allocated map registers + * ARGUMENTS: + * MiniportAdapterHandle: Handle originally passed in to MiniportInitialize + * NOTES: + */ { - UNIMPLEMENTED + KIRQL OldIrql; + PLOGICAL_ADAPTER Adapter = (PLOGICAL_ADAPTER)MiniportAdapterHandle; + PADAPTER_OBJECT AdapterObject = Adapter->AdapterObject; + + NDIS_DbgPrint(MAX_TRACE, ("Called.\n")); + + KeRaiseIrql(DISPATCH_LEVEL, &OldIrql); + + while(!IsListEmpty(&Adapter->MapRegisterList.ListEntry)) + { + PADAPTER_MAP_REGISTER_LIST Register = (PADAPTER_MAP_REGISTER_LIST)RemoveTailList(&Adapter->MapRegisterList.ListEntry); + if(Register) + { + IoFreeMapRegisters(AdapterObject, Register->MapRegister, Register->NumRegisters); + ExFreePool(Register); + } + else + NDIS_DbgPrint(MIN_TRACE,("Internal NDIS error - Register is 0\n")); + } + + KeLowerIrql(OldIrql); } +/* + * @unimplemented + */ NDIS_STATUS EXPORT NdisMMapIoSpace( @@ -282,6 +509,9 @@ NdisMMapIoSpace( } +/* + * @unimplemented + */ ULONG EXPORT NdisMReadDmaCounter( @@ -293,6 +523,9 @@ NdisMReadDmaCounter( } +/* + * @unimplemented + */ NDIS_STATUS EXPORT NdisMRegisterDmaChannel( @@ -308,7 +541,9 @@ NdisMRegisterDmaChannel( return NDIS_STATUS_FAILURE; } - +/* + * @implemented + */ NDIS_STATUS EXPORT NdisMRegisterInterrupt( @@ -359,8 +594,8 @@ NdisMRegisterInterrupt( Adapter->NdisMiniportBlock.Interrupt = Interrupt; - MappedIRQ = HalGetInterruptVector(Internal, /* Adapter->AdapterType, */ - 0, + MappedIRQ = HalGetInterruptVector(Adapter->BusType, + Adapter->BusNumber, InterruptLevel, InterruptVector, &DIrql, @@ -394,6 +629,9 @@ NdisMRegisterInterrupt( } +/* + * @unimplemented + */ NDIS_STATUS EXPORT NdisMRegisterIoPortRange( @@ -412,34 +650,55 @@ NdisMRegisterIoPortRange( * Status of operation */ { -#if 0 - NTSTATUS Status; - BOOLEAN ConflictDetected; - PLOGICAL_ADAPTER Adapter = GET_LOGICAL_ADAPTER(MiniportAdapterHandle); - PMINIPORT_DRIVER Miniport = Adapter->Miniport; + PHYSICAL_ADDRESS PortAddress, TranslatedAddress; + PLOGICAL_ADAPTER Adapter = GET_LOGICAL_ADAPTER(MiniportAdapterHandle); + ULONG AddressSpace = 1; /* FIXME The HAL handles this wrong atm */ - NDIS_DbgPrint(MAX_TRACE, ("Called.\n")); + NDIS_DbgPrint(MAX_TRACE, ("Called - InitialPort 0x%x, NumberOfPorts 0x%x\n", InitialPort, NumberOfPorts)); - /* Non-PnP hardware. NT5 function */ - Status = IoReportResourceForDetection(Miniport->DriverObject, - NULL, - 0, - NULL, - NULL, - 0, - &ConflictDetected); - return NDIS_STATUS_FAILURE; -#else - NDIS_DbgPrint(MAX_TRACE, ("Called.\n")); + memset(&PortAddress, 0, sizeof(PortAddress)); - /* It's yours! */ - *PortOffset = (PVOID)InitialPort; + /* this might be a hack - ndis5 miniports seem to specify 0 */ + if(InitialPort) + PortAddress = RtlConvertUlongToLargeInteger(InitialPort); + else + PortAddress = Adapter->BaseIoAddress; - return NDIS_STATUS_SUCCESS; -#endif -} + NDIS_DbgPrint(MAX_TRACE, ("Translating address 0x%x 0x%x\n", PortAddress.u.HighPart, PortAddress.u.LowPart)); + + /* FIXME: hard-coded bus number */ + if(!HalTranslateBusAddress(Adapter->BusType, 0, PortAddress, &AddressSpace, &TranslatedAddress)) + { + NDIS_DbgPrint(MIN_TRACE, ("Unable to translate address\n")); + return NDIS_STATUS_RESOURCES; + } + + NDIS_DbgPrint(MAX_TRACE, ("Hal returned AddressSpace=0x%x TranslatedAddress=0x%x 0x%x\n", + AddressSpace, TranslatedAddress.u.HighPart, TranslatedAddress.u.LowPart)); + + if(AddressSpace) + { + ASSERT(TranslatedAddress.u.HighPart == 0); + *PortOffset = (PVOID) TranslatedAddress.u.LowPart; + NDIS_DbgPrint(MAX_TRACE, ("Returning 0x%x\n", *PortOffset)); + return NDIS_STATUS_SUCCESS; + } + + NDIS_DbgPrint(MAX_TRACE, ("calling MmMapIoSpace\n")); + *PortOffset = 0; + *PortOffset = MmMapIoSpace(TranslatedAddress, NumberOfPorts, 0); + NDIS_DbgPrint(MAX_TRACE, ("Returning 0x%x for port range\n", *PortOffset)); + if(!*PortOffset) + return NDIS_STATUS_RESOURCES; + + return NDIS_STATUS_SUCCESS; +} + +/* + * @unimplemented + */ VOID EXPORT NdisMSetupDmaTransfer( @@ -454,6 +713,9 @@ NdisMSetupDmaTransfer( } +/* + * @unimplemented + */ VOID EXPORT NdisMUnmapIoSpace( diff --git a/drivers/net/ndis/ndis/main.c b/drivers/net/ndis/ndis/main.c index 4188cf7..b68806b 100644 --- a/drivers/net/ndis/ndis/main.c +++ b/drivers/net/ndis/ndis/main.c @@ -4,8 +4,10 @@ * FILE: ndis/main.c * PURPOSE: Driver entry point * PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net) + * Vizzini (vizzini@plasmic.com) * REVISIONS: * CSH 01/08-2000 Created + * 8/20/2003 Vizzini - NDIS4/5 revisions */ #include #include @@ -19,6 +21,9 @@ DWORD DebugTraceLevel = MIN_TRACE; #endif /* DBG */ +/* see miniport.c */ +extern KSPIN_LOCK OrphanAdapterListLock; +extern LIST_ENTRY OrphanAdapterListHead; VOID MainUnload( PDRIVER_OBJECT DriverObject) @@ -31,11 +36,8 @@ VOID MainUnload( NDIS_DbgPrint(MAX_TRACE, ("Leaving.\n")); } - NTSTATUS -#ifndef _MSC_VER STDCALL -#endif DriverEntry( PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath) @@ -48,24 +50,118 @@ DriverEntry( * Status of driver initialization */ { - NDIS_DbgPrint(MAX_TRACE, ("Called.\n")); + NDIS_DbgPrint(MAX_TRACE, ("Called.\n")); + + InitializeListHead(&ProtocolListHead); + KeInitializeSpinLock(&ProtocolListLock); + + InitializeListHead(&MiniportListHead); + KeInitializeSpinLock(&MiniportListLock); - InitializeListHead(&ProtocolListHead); - KeInitializeSpinLock(&ProtocolListLock); + InitializeListHead(&AdapterListHead); + KeInitializeSpinLock(&AdapterListLock); - InitializeListHead(&MiniportListHead); - KeInitializeSpinLock(&MiniportListLock); + InitializeListHead(&OrphanAdapterListHead); + KeInitializeSpinLock(&OrphanAdapterListLock); + + DriverObject->DriverUnload = (PDRIVER_UNLOAD)MainUnload; + + /* + * until we have PNP support, query the enum key and NdisFindDevice() each one + * NOTE- this will load and start other services before this one returns STATUS_SUCCESS. + * I hope there aren't code reentrancy problems. :) + */ + NdisStartDevices(); + + return STATUS_SUCCESS; +} - InitializeListHead(&AdapterListHead); - KeInitializeSpinLock(&AdapterListLock); +/* + * @implemented + */ +VOID +CDECL +NdisWriteErrorLogEntry( + IN NDIS_HANDLE NdisAdapterHandle, + IN NDIS_ERROR_CODE ErrorCode, + IN ULONG NumberOfErrorValues, + IN ULONG ERROR_LOG_MAXIMUM_SIZE) +/* IN ULONG ...) + * ERROR_LOG_MAXIMUM_SIZE = ... in MSDN + */ +/* + * FUNCTION: Write a syslog error + * ARGUMENTS: + * NdisAdapterHandle: Handle passed into MiniportInitialize + * ErrorCode: 32-bit error code to be logged + * NumberOfErrorValues: number of errors to log + * Variable: list of log items + * NOTES: + * - THIS IS >CDECL< + * - This needs to be fixed to do var args + * - FIXME - this needs to be properly implemented once we have an event log + */ +{ + NDIS_DbgPrint(MIN_TRACE, ("ERROR: ErrorCode 0x%x\n", ErrorCode)); -#ifdef _MSC_VER - DriverObject->DriverUnload = MainUnload; -#else - DriverObject->DriverUnload = (PDRIVER_UNLOAD)MainUnload; +#if DBG + /* break into a debugger so we can see what's up */ + __asm__("int $3\n"); #endif +} - return STATUS_SUCCESS; +/* + * @implemented + */ +VOID +EXPORT +NdisInitializeReadWriteLock( + IN PNDIS_RW_LOCK Lock) +/* + * FUNCTION: Initialize a NDIS_RW_LOCK + * ARGUMENTS: + * Lock: pointer to the lock to initialize + * NOTES: + * NDIS 5.0 + */ +{ + memset(Lock,0,sizeof(NDIS_RW_LOCK)); +} + +/* + * @implemented + */ +NDIS_STATUS +EXPORT +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) +/* + * FUNCTION: Log an event in the system event log + * ARGUMENTS: + * LogHandle: pointer to the driver object of the protocol logging the event + * EventCode: NDIS_STATUS_XXX describing the event + * UniqueEventValue: identifiees this instance of the error value + * NumStrings: number of strings in StringList + * StringList: list of strings to log + * DataSize: number of bytes in Data + * Data: binary dump data to help analyzing the event + * NOTES: + * - STDCALL, not CDECL like WriteError... + * - FIXME Needs to use the real log interface, once there is one + */ +{ + /* + * just returning true until we have an event log + */ + NDIS_DbgPrint(MAX_TRACE, ("Called.\n")); + return NDIS_STATUS_SUCCESS; } /* EOF */ + diff --git a/drivers/net/ndis/ndis/memory.c b/drivers/net/ndis/ndis/memory.c index f4facd2..96e8c44 100644 --- a/drivers/net/ndis/ndis/memory.c +++ b/drivers/net/ndis/ndis/memory.c @@ -4,12 +4,17 @@ * FILE: ndis/memory.c * PURPOSE: Memory management routines * PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net) + * Vizzini (vizzini@plasmic.com) * REVISIONS: * CSH 01/08-2000 Created + * 8/15/2003 Vizzini - DMA support */ #include +#include - +/* + * @implemented + */ NDIS_STATUS EXPORT NdisAllocateMemoryWithTag( @@ -17,18 +22,33 @@ NdisAllocateMemoryWithTag( IN UINT Length, IN ULONG Tag) /* - * FUNCTION: + * FUNCTION: Allocates a block of memory, with a 32-bit tag * ARGUMENTS: - * NOTES: - * NDIS 5.0 + * VirtualAddress = a pointer to the returned memory block + * Length = the number of requested bytes + * Tag = 32-bit pool tag + * RETURNS: + * NDIS_STATUS_SUCCESS on success + * NDIS_STATUS_FAILURE on failure */ { - UNIMPLEMENTED + PVOID Block; + NDIS_DbgPrint(MAX_TRACE, ("Called.\n")); + + Block = ExAllocatePoolWithTag(NonPagedPool, Length, Tag); + *VirtualAddress = Block; + + if (!Block) return NDIS_STATUS_FAILURE; + + return NDIS_STATUS_SUCCESS; } +/* + * @unimplemented + */ VOID EXPORT NdisCreateLookaheadBufferFromSharedMemory( @@ -40,6 +60,9 @@ NdisCreateLookaheadBufferFromSharedMemory( } +/* + * @unimplemented + */ VOID EXPORT NdisDestroyLookaheadBufferFromSharedMemory( @@ -49,6 +72,9 @@ NdisDestroyLookaheadBufferFromSharedMemory( } +/* + * @unimplemented + */ VOID EXPORT NdisMoveFromMappedMemory( @@ -60,6 +86,9 @@ NdisMoveFromMappedMemory( } +/* + * @unimplemented + */ VOID EXPORT NdisMoveMappedMemory( @@ -71,6 +100,9 @@ NdisMoveMappedMemory( } +/* + * @unimplemented + */ VOID EXPORT NdisMoveToMappedMemory( @@ -82,6 +114,9 @@ NdisMoveToMappedMemory( } +/* + * @unimplemented + */ VOID EXPORT NdisMUpdateSharedMemory( @@ -94,6 +129,9 @@ NdisMUpdateSharedMemory( } +/* + * @implemented + */ NDIS_STATUS EXPORT NdisAllocateMemory( @@ -109,32 +147,43 @@ NdisAllocateMemory( * Length = Size of the memory block to allocate * MemoryFlags = Flags to specify special restrictions * HighestAcceptableAddress = Specifies -1 + * RETURNS: + * NDIS_STATUS_SUCCESS on success + * NDIS_STATUS_FAILURE on failure */ { - PVOID Block; + NDIS_DbgPrint(MAX_TRACE, ("Called.\n")); - if (MemoryFlags & NDIS_MEMORY_CONTIGUOUS) { - /* FIXME */ - *VirtualAddress = NULL; + if (MemoryFlags & NDIS_MEMORY_NONCACHED) + { + *VirtualAddress = MmAllocateNonCachedMemory(Length); + if(!*VirtualAddress) return NDIS_STATUS_FAILURE; + + return NDIS_STATUS_SUCCESS; } - if (MemoryFlags & NDIS_MEMORY_NONCACHED) { - /* FIXME */ - *VirtualAddress = NULL; + if (MemoryFlags & NDIS_MEMORY_CONTIGUOUS) + { + *VirtualAddress = MmAllocateContiguousMemory(Length, HighestAcceptableAddress); + if(!*VirtualAddress) return NDIS_STATUS_FAILURE; + + return NDIS_STATUS_SUCCESS; } - /* Plain nonpaged memory */ - Block = ExAllocatePool(NonPagedPool, Length); - *VirtualAddress = Block; - if (!Block) - return NDIS_STATUS_FAILURE; + /* Plain nonpaged memory */ + *VirtualAddress = ExAllocatePool(NonPagedPool, Length); + if (!*VirtualAddress) + return NDIS_STATUS_FAILURE; - return NDIS_STATUS_SUCCESS; + return NDIS_STATUS_SUCCESS; } +/* + * @implemented + */ VOID EXPORT NdisFreeMemory( @@ -149,21 +198,27 @@ NdisFreeMemory( * MemoryFlags = Memory flags passed to NdisAllocateMemory */ { - if (MemoryFlags & NDIS_MEMORY_CONTIGUOUS) { - /* FIXME */ - return; + NDIS_DbgPrint(MAX_TRACE, ("Called.\n")); + + if (MemoryFlags & NDIS_MEMORY_NONCACHED) + { + MmFreeNonCachedMemory(VirtualAddress, Length); + return; } - if (MemoryFlags & NDIS_MEMORY_NONCACHED) { - /* FIXME */ - return; + if (MemoryFlags & NDIS_MEMORY_CONTIGUOUS) + { + MmFreeContiguousMemory(VirtualAddress); + return; } - /* Plain nonpaged memory */ - ExFreePool(VirtualAddress); + ExFreePool(VirtualAddress); } +/* + * @unimplemented + */ VOID EXPORT NdisImmediateReadSharedMemory( @@ -172,9 +227,13 @@ NdisImmediateReadSharedMemory( OUT PUCHAR Buffer, IN ULONG Length) { + UNIMPLEMENTED } +/* + * @unimplemented + */ VOID EXPORT NdisImmediateWriteSharedMemory( @@ -187,6 +246,9 @@ NdisImmediateWriteSharedMemory( } +/* + * @implemented + */ VOID EXPORT NdisMAllocateSharedMemory( @@ -195,11 +257,29 @@ NdisMAllocateSharedMemory( IN BOOLEAN Cached, OUT PVOID *VirtualAddress, OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress) +/* + * FUNCTION: Allocate a common buffer for DMA + * ARGUMENTS: + * MiniportAdapterHandle: Handle passed into MiniportInitialize + * Length: Number of bytes to allocate + * Cached: Whether or not the memory can be cached + * VirtualAddress: Pointer to memory is returned here + * PhysicalAddress: Physical address corresponding to virtual address + * NOTES: + * - Cached is ignored; we always allocate non-cached + */ { - UNIMPLEMENTED + PLOGICAL_ADAPTER Adapter = (PLOGICAL_ADAPTER)MiniportAdapterHandle; + + NDIS_DbgPrint(MAX_TRACE,("Called.\n")); + + *VirtualAddress = HalAllocateCommonBuffer(Adapter->AdapterObject, Length, PhysicalAddress, Cached); } +/* + * @unimplemented + */ NDIS_STATUS EXPORT NdisMAllocateSharedMemoryAsync( @@ -208,12 +288,43 @@ NdisMAllocateSharedMemoryAsync( IN BOOLEAN Cached, IN PVOID Context) { + NDIS_DbgPrint(MAX_TRACE, ("Called.\n")); UNIMPLEMENTED return NDIS_STATUS_FAILURE; } +/* + * @implemented + */ +VOID +STDCALL +NdisMFreeSharedMemoryPassive( + PVOID Context) +/* + * FUNCTION: Free a common buffer + * ARGUMENTS: + * Context: Pointer to a miniport shared memory context + * NOTES: + * - Called by NdisMFreeSharedMemory to do the actual work + */ +{ + PMINIPORT_SHARED_MEMORY Memory = (PMINIPORT_SHARED_MEMORY)Context; + + NDIS_DbgPrint(MAX_TRACE, ("Called.\n")); + + ASSERT(KeGetCurrentIrql() == PASSIVE_LEVEL); + + HalFreeCommonBuffer(Memory->AdapterObject, Memory->Length, Memory->PhysicalAddress, + Memory->VirtualAddress, Memory->Cached); + + ExFreePool(Memory); +} + +/* + * @implemented + */ VOID EXPORT NdisMFreeSharedMemory( @@ -222,8 +333,45 @@ NdisMFreeSharedMemory( IN BOOLEAN Cached, IN PVOID VirtualAddress, IN NDIS_PHYSICAL_ADDRESS PhysicalAddress) +/* + * FUNCTION: Free a shared memory block + * ARGUMENTS: + * MiniportAdapterHandle: Handle passed into MiniportInitialize + * Length: Number of bytes in the block to free + * Cached: Whether or not the memory was cached + * VirtualAddress: Address to free + * PhysicalAddress: corresponding physical addres + * NOTES: + * - This function can be called at dispatch_level or passive_level. + * Therefore we have to do this in a worker thread. + */ { - UNIMPLEMENTED + HANDLE ThreadHandle; + PLOGICAL_ADAPTER Adapter = (PLOGICAL_ADAPTER)MiniportAdapterHandle; + PMINIPORT_SHARED_MEMORY Memory; + + NDIS_DbgPrint(MAX_TRACE,("Called.\n")); + + ASSERT(KeGetCurrentIrql() <= DISPATCH_LEVEL); + + /* Must be NonpagedPool because by definition we're at DISPATCH_LEVEL */ + Memory = ExAllocatePool(NonPagedPool, sizeof(MINIPORT_SHARED_MEMORY)); + + if(!Memory) + { + NDIS_DbgPrint(MID_TRACE, ("Insufficient resources\n")); + return; + } + + Memory->AdapterObject = Adapter->AdapterObject; + Memory->Length = Length; + Memory->PhysicalAddress = PhysicalAddress; + Memory->VirtualAddress = VirtualAddress; + Memory->Cached = Cached; + + PsCreateSystemThread(&ThreadHandle, THREAD_ALL_ACCESS, 0, 0, 0, NdisMFreeSharedMemoryPassive, Memory); + ZwClose(ThreadHandle); } /* EOF */ + diff --git a/drivers/net/ndis/ndis/miniport.c b/drivers/net/ndis/ndis/miniport.c index 6382a11..02b740a 100644 --- a/drivers/net/ndis/ndis/miniport.c +++ b/drivers/net/ndis/ndis/miniport.c @@ -4,22 +4,34 @@ * FILE: ndis/miniport.c * PURPOSE: Routines used by NDIS miniport drivers * PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net) + * Vizzini (vizzini@plasmic.com) * REVISIONS: * CSH 01/08-2000 Created + * 8/20/2003 vizzini - DMA support */ -#define DBG #include #include #ifdef DBG #include #endif /* DBG */ -#ifdef DBG -/* See debug.h for debug/trace constants */ -//ULONG DebugTraceLevel = MIN_TRACE; -ULONG DebugTraceLevel = (MAX_TRACE + DEBUG_MINIPORT); -#endif /* DBG */ +/* Root of the scm database */ +#define SERVICES_ROOT L"\\Registry\\Machine\\System\\CurrentControlSet\\Services\\" +/* prefix for device object registration */ +#define DEVICE_ROOT L"\\Device\\" + +/* + * Define to 1 to get a debugger breakpoint at the end of NdisInitializeWrapper + * for each new miniport starting up + */ +#define BREAK_ON_MINIPORT_INIT 0 + +/* + * This has to be big enough to hold the results of querying the Route value + * from the Linkage key. Please re-code me to determine this dynamically. + */ +#define ROUTE_DATA_SIZE 256 /* Number of media we know */ #define MEDIA_ARRAY_SIZE 15 @@ -42,21 +54,27 @@ static NDIS_MEDIUM MediaArray[MEDIA_ARRAY_SIZE] = { NdisMediumMax }; - +/* global list and lock of Miniports NDIS has registered */ LIST_ENTRY MiniportListHead; KSPIN_LOCK MiniportListLock; + +/* global list and lock of adapters NDIS has registered */ LIST_ENTRY AdapterListHead; KSPIN_LOCK AdapterListLock; +/* global list and lock of orphan adapters waiting to be claimed by a miniport */ +LIST_ENTRY OrphanAdapterListHead; +KSPIN_LOCK OrphanAdapterListLock; + #ifdef DBG VOID MiniDisplayPacket( PNDIS_PACKET Packet) { +#if 0 ULONG i, Length; UCHAR Buffer[64]; -#if 0 if ((DebugTraceLevel | DEBUG_PACKET) > 0) { Length = CopyPacketToBuffer( (PUCHAR)&Buffer, @@ -171,6 +189,23 @@ MiniIndicateData( } +VOID STDCALL +MiniIndicateReceivePacket( + IN NDIS_HANDLE Miniport, + IN PPNDIS_PACKET PacketArray, + IN UINT NumberOfPackets) +/* + * FUNCTION: receives miniport packet array indications + * ARGUMENTS: + * Miniport: Miniport handle for the adapter + * PacketArray: pointer to a list of packet pointers to indicate + * NumberOfPackets: number of packets to indicate + */ +{ + NDIS_DbgPrint(MAX_TRACE, ("Called.\n")); +} + + VOID MiniEthReceiveComplete( IN PETH_FILTER Filter) @@ -326,6 +361,8 @@ MiniAdapterHasAddress( PNDIS_BUFFER NdisBuffer; UINT BufferLength; + NDIS_DbgPrint(DEBUG_MINIPORT, ("Called.\n")); + Start1 = (PUCHAR)&Adapter->Address; NdisQueryPacket(Packet, NULL, NULL, &NdisBuffer, NULL); if (!NdisBuffer) { @@ -424,6 +461,8 @@ MiniQueryInformation( NDIS_STATUS NdisStatus; ULONG BytesNeeded; + NDIS_DbgPrint(DEBUG_MINIPORT, ("Called.\n")); + if (Adapter->QueryBufferLength == 0) { Adapter->QueryBuffer = ExAllocatePool(NonPagedPool, (Size == 0)? 32 : Size); @@ -596,6 +635,8 @@ MiniDoRequest( * Status of operation */ { + NDIS_DbgPrint(DEBUG_MINIPORT, ("Called.\n")); + Adapter->NdisMiniportBlock.MediaRequest = NdisRequest; switch (NdisRequest->RequestType) { @@ -721,6 +762,9 @@ VOID STDCALL MiniportDpc( } +/* + * @unimplemented + */ VOID EXPORT NdisMCloseLog( @@ -730,6 +774,9 @@ NdisMCloseLog( } +/* + * @unimplemented + */ NDIS_STATUS EXPORT NdisMCreateLog( @@ -743,15 +790,29 @@ NdisMCreateLog( } +/* + * @implemented + */ VOID EXPORT NdisMDeregisterAdapterShutdownHandler( IN NDIS_HANDLE MiniportHandle) +/* + * FUNCTION: de-registers a shutdown handler + * ARGUMENTS: MiniportHandle: Handle passed into MiniportInitialize + */ { - UNIMPLEMENTED + NDIS_DbgPrint(DEBUG_MINIPORT, ("Called.\n")); + PLOGICAL_ADAPTER Adapter = (PLOGICAL_ADAPTER)MiniportHandle; + + if(Adapter->BugcheckContext->ShutdownHandler) + KeDeregisterBugCheckCallback(Adapter->BugcheckContext->CallbackRecord); } +/* + * @unimplemented + */ VOID EXPORT NdisMFlushLog( @@ -761,6 +822,9 @@ NdisMFlushLog( } +/* + * @unimplemented + */ VOID EXPORT NdisMIndicateStatus( @@ -773,6 +837,9 @@ NdisMIndicateStatus( } +/* + * @unimplemented + */ VOID EXPORT NdisMIndicateStatusComplete( @@ -782,6 +849,9 @@ NdisMIndicateStatusComplete( } +/* + * @implemented + */ VOID EXPORT NdisInitializeWrapper( @@ -796,12 +866,20 @@ NdisInitializeWrapper( * SystemSpecific1 = Pointer to the driver's driver object * SystemSpecific2 = Pointer to the driver's registry path * SystemSpecific3 = Always NULL + * NOTES: + * - SystemSpecific2 goes invalid so we copy it */ { PMINIPORT_DRIVER Miniport; + PUNICODE_STRING RegistryPath; + WCHAR *RegistryBuffer; NDIS_DbgPrint(MAX_TRACE, ("Called.\n")); +#if BREAK_ON_MINIPORT_INIT + __asm__ ("int $3\n"); +#endif + Miniport = ExAllocatePool(NonPagedPool, sizeof(MINIPORT_DRIVER)); if (!Miniport) { NDIS_DbgPrint(MIN_TRACE, ("Insufficient resources.\n")); @@ -817,6 +895,30 @@ NdisInitializeWrapper( Miniport->DriverObject = (PDRIVER_OBJECT)SystemSpecific1; + /* set the miniport's driver registry path */ + RegistryPath = ExAllocatePool(PagedPool, sizeof(UNICODE_STRING)); + if(!RegistryPath) + { + NDIS_DbgPrint(MIN_TRACE, ("Insufficient resources.\n")); + return; + } + + RegistryPath->Length = ((PUNICODE_STRING)SystemSpecific2)->Length; + RegistryPath->MaximumLength = RegistryPath->Length + sizeof(WCHAR); /* room for 0-term */ + + RegistryBuffer = ExAllocatePool(PagedPool, RegistryPath->Length + sizeof(WCHAR)); + if(!RegistryBuffer) + { + NDIS_DbgPrint(MIN_TRACE, ("Insufficient resources.\n")); + return; + } + + RtlCopyMemory(RegistryBuffer, ((PUNICODE_STRING)SystemSpecific2)->Buffer, RegistryPath->Length); + RegistryBuffer[RegistryPath->Length/sizeof(WCHAR)] = 0; + + RegistryPath->Buffer = RegistryBuffer; + Miniport->RegistryPath = RegistryPath; + InitializeListHead(&Miniport->AdapterListHead); /* Put miniport in global miniport list */ @@ -825,9 +927,13 @@ NdisInitializeWrapper( &MiniportListLock); *NdisWrapperHandle = Miniport; + } +/* + * @implemented + */ VOID EXPORT NdisMQueryInformationComplete( @@ -846,14 +952,69 @@ NdisMQueryInformationComplete( } +VOID NdisIBugcheckCallback( + IN PVOID Buffer, + IN ULONG Length) +/* + * FUNCTION: Internal callback for handling bugchecks - calls adapter's shutdown handler + * ARGUMENTS: + * Buffer: Pointer to a bugcheck callback context + * Length: Unused + */ +{ + PMINIPORT_BUGCHECK_CONTEXT Context = (PMINIPORT_BUGCHECK_CONTEXT)Buffer; + ADAPTER_SHUTDOWN_HANDLER sh = (ADAPTER_SHUTDOWN_HANDLER)Context->ShutdownHandler; + + NDIS_DbgPrint(DEBUG_MINIPORT, ("Called.\n")); + + if(sh) + sh(Context->DriverContext); +} + + +/* + * @implemented + */ VOID EXPORT NdisMRegisterAdapterShutdownHandler( IN NDIS_HANDLE MiniportHandle, IN PVOID ShutdownContext, IN ADAPTER_SHUTDOWN_HANDLER ShutdownHandler) +/* + * FUNCTION: Register a shutdown handler for an adapter + * ARGUMENTS: + * MiniportHandle: Handle originally passed into MiniportInitialize + * ShutdownContext: Pre-initialized bugcheck context + * ShutdownHandler: Function to call to handle the bugcheck + * NOTES: + * - I'm not sure about ShutdownContext + * - FIXME - memory leak below + */ { - UNIMPLEMENTED + PLOGICAL_ADAPTER Adapter = (PLOGICAL_ADAPTER)MiniportHandle; + PMINIPORT_BUGCHECK_CONTEXT BugcheckContext = Adapter->BugcheckContext; + + NDIS_DbgPrint(DEBUG_MINIPORT, ("Called.\n")); + + if(BugcheckContext) + return; + + BugcheckContext = ExAllocatePool(NonPagedPool, sizeof(MINIPORT_BUGCHECK_CONTEXT)); + if(!BugcheckContext) + { + NDIS_DbgPrint(MIN_TRACE, ("Insufficient resources.\n")); + return; + } + + BugcheckContext->ShutdownHandler = ShutdownHandler; + BugcheckContext->DriverContext = ShutdownContext; + + /* not sure if this needs to be initialized or not... oh well, it's a leak. */ + BugcheckContext->CallbackRecord = ExAllocatePool(NonPagedPool, sizeof(KBUGCHECK_CALLBACK_RECORD)); + + KeRegisterBugCheckCallback(BugcheckContext->CallbackRecord, NdisIBugcheckCallback, + BugcheckContext, sizeof(BugcheckContext), "Ndis Miniport"); } @@ -953,6 +1114,274 @@ DoQueries( } +VOID +NdisIStartAdapter( + WCHAR *DeviceNameStr, + UINT DeviceNameStrLength, + PMINIPORT_DRIVER Miniport +) +/* + * FUNCTION: Start an adapter + * ARGUMENTS: + * DeviceNameStr: 0-terminated wide char string of name of device to start + * DeviceNameStrLength: length of DeviceNameStr *IN WCHARs* + * NOTES: + * TODO: + * - verify that all resources are properly freed on success & failure + */ +{ + WCHAR *DeviceName; + HANDLE RegKeyHandle; + WCHAR *RegKeyPath; + UNICODE_STRING RegKeyPathU; + OBJECT_ATTRIBUTES RegKeyAttributes; + NDIS_STATUS NdisStatus; + NDIS_STATUS OpenErrorStatus; + NTSTATUS Status; + UINT SelectedMediumIndex = 0; + PLOGICAL_ADAPTER Adapter = 0; + NDIS_OID AddressOID; + BOOLEAN MemError = FALSE; + KIRQL OldIrql; + PORPHAN_ADAPTER OrphanAdapter = 0; + + NDIS_DbgPrint(MAX_TRACE, ("Called with %ws\n", DeviceNameStr)); + Adapter = ExAllocatePool(NonPagedPool, sizeof(LOGICAL_ADAPTER)); + if (!Adapter) + { + NDIS_DbgPrint(MIN_TRACE, ("Insufficient resources.\n")); + return; + } + + /* This is very important */ + RtlZeroMemory(Adapter, sizeof(LOGICAL_ADAPTER)); + + DeviceName = ExAllocatePool(NonPagedPool, sizeof(DEVICE_ROOT) + DeviceNameStrLength * sizeof(WCHAR)); + if(!DeviceName) + { + NDIS_DbgPrint(MIN_TRACE,("Insufficient memory\n")); + ExFreePool(Adapter); + return; + } + + /* DEVICE_ROOT is a constant string defined above, incl. 0-term */ + wcscpy(DeviceName, DEVICE_ROOT); + + /* reg_sz is 0-term by def */ + wcsncat(DeviceName, DeviceNameStr, DeviceNameStrLength); + RtlInitUnicodeString(&Adapter->DeviceName, DeviceName); + + NDIS_DbgPrint(MAX_TRACE, ("creating device %ws\n", DeviceName)); + + Status = IoCreateDevice(Miniport->DriverObject, 0, &Adapter->DeviceName, FILE_DEVICE_PHYSICAL_NETCARD, + 0, FALSE, &Adapter->NdisMiniportBlock.DeviceObject); + if (!NT_SUCCESS(Status)) + { + NDIS_DbgPrint(MIN_TRACE, ("Could not create device object.\n")); + ExFreePool(Adapter); + return; + } + + /* find out if there are any adapters in the orphans list and reserve resources */ + KeAcquireSpinLock(&OrphanAdapterListLock, &OldIrql); + OrphanAdapter = (PORPHAN_ADAPTER)OrphanAdapterListHead.Flink; + while(&OrphanAdapter->ListEntry != &OrphanAdapterListHead) + { + PORPHAN_ADAPTER TempAdapter; + PCM_RESOURCE_LIST ResourceList; + UINT i; + + if(!RtlCompareUnicodeString(&OrphanAdapter->RegistryPath, Miniport->RegistryPath, TRUE)) + { + OrphanAdapter = (PORPHAN_ADAPTER)OrphanAdapter->ListEntry.Flink; + continue; + } + + NDIS_DbgPrint(MAX_TRACE, ("Found an orphan adapter for RegistryPath %wZ\n", Miniport->RegistryPath)); + + /* there is an orphan adapter for us */ + Adapter->SlotNumber = OrphanAdapter->SlotNumber; + Adapter->BusNumber = OrphanAdapter->BusNumber; + Adapter->BusType = OrphanAdapter->BusType; + + Status = HalAssignSlotResources(Miniport->RegistryPath, 0, Miniport->DriverObject, + Adapter->NdisMiniportBlock.DeviceObject, Adapter->BusType, Adapter->BusNumber, + Adapter->SlotNumber, &ResourceList); + + if(!NT_SUCCESS(Status)) + { + NDIS_DbgPrint(MIN_TRACE, ("HalAssignSlotResources broke: 0x%x\n", Status)); +#ifdef DBG + __asm__ ("int $3\n"); +#endif + /* i guess we should just give up on this adapter */ + break; + } + + /* go through the returned resource list and populate the Adapter */ + for(i = 0; iCount; i++) + { + int j; + + PCM_FULL_RESOURCE_DESCRIPTOR ResourceDescriptor = &ResourceList->List[i]; + + for(j=0; jPartialResourceList.Count; j++) + { + PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialResourceDescriptor = + &ResourceDescriptor->PartialResourceList.PartialDescriptors[i]; + + switch(PartialResourceDescriptor->Type) + { + case CmResourceTypeInterrupt: + Adapter->Irql = PartialResourceDescriptor->u.Interrupt.Level; + Adapter->Vector = PartialResourceDescriptor->u.Interrupt.Vector; + Adapter->Affinity = PartialResourceDescriptor->u.Interrupt.Affinity; + break; + + case CmResourceTypePort: + Adapter->BaseIoAddress = PartialResourceDescriptor->u.Port.Start; + break; + + case CmResourceTypeMemory: + Adapter->BaseMemoryAddress = PartialResourceDescriptor->u.Memory.Start; + break; + + case CmResourceTypeDma: + Adapter->DmaPort = PartialResourceDescriptor->u.Dma.Port; + Adapter->DmaChannel = PartialResourceDescriptor->u.Dma.Channel; + break; + + case CmResourceTypeDeviceSpecific: + default: + break; + } + } + } + + /* remove the adapter from the list */ + TempAdapter = (PORPHAN_ADAPTER)OrphanAdapter->ListEntry.Flink; + RemoveEntryList(&OrphanAdapter->ListEntry); + OrphanAdapter = TempAdapter; + } + KeReleaseSpinLock(&OrphanAdapterListLock, OldIrql); + + /* includes room for a 0-term */ + RegKeyPath = ExAllocatePool(PagedPool, (wcslen(SERVICES_ROOT) + wcslen(DeviceNameStr) + 1) * sizeof(WCHAR)); + if(!RegKeyPath) + { + NDIS_DbgPrint(MIN_TRACE,("Insufficient resources\n")); + ExFreePool(Adapter); + return; + } + + wcscpy(RegKeyPath, SERVICES_ROOT); + wcscat(RegKeyPath, DeviceNameStr); + RegKeyPath[wcslen(SERVICES_ROOT) + wcslen(DeviceNameStr)] = 0; + + RtlInitUnicodeString(&RegKeyPathU, RegKeyPath); + InitializeObjectAttributes(&RegKeyAttributes, &RegKeyPathU, OBJ_CASE_INSENSITIVE, NULL, NULL); + + Status = ZwOpenKey(&RegKeyHandle, KEY_ALL_ACCESS, &RegKeyAttributes); + if(Status != STATUS_SUCCESS) + { + NDIS_DbgPrint(MIN_TRACE,("failed to open adapter-specific reg key %ws\n", RegKeyPath)); + ExFreePool(Adapter); + return; + } + + NDIS_DbgPrint(MAX_TRACE, ("opened device reg key: %wZ\n", &RegKeyPathU)); + + KeInitializeSpinLock(&Adapter->NdisMiniportBlock.Lock); + InitializeListHead(&Adapter->ProtocolListHead); + Adapter->RefCount = 1; + Adapter->Miniport = Miniport; + + /* Set handlers (some NDIS macros require these) */ + + Adapter->NdisMiniportBlock.EthRxCompleteHandler = MiniEthReceiveComplete; + Adapter->NdisMiniportBlock.EthRxIndicateHandler = MiniEthReceiveIndication; + Adapter->NdisMiniportBlock.SendCompleteHandler = MiniSendComplete; + Adapter->NdisMiniportBlock.SendResourcesHandler = MiniSendResourcesAvailable; + Adapter->NdisMiniportBlock.ResetCompleteHandler = MiniResetComplete; + Adapter->NdisMiniportBlock.TDCompleteHandler = MiniTransferDataComplete; + Adapter->NdisMiniportBlock.PacketIndicateHandler= MiniIndicateReceivePacket; + + KeInitializeDpc(&Adapter->MiniportDpc, MiniportDpc, (PVOID)Adapter); + + /* Put adapter in adapter list for this miniport */ + ExInterlockedInsertTailList(&Miniport->AdapterListHead, &Adapter->MiniportListEntry, &Miniport->Lock); + + /* Put adapter in global adapter list */ + ExInterlockedInsertTailList(&AdapterListHead, &Adapter->ListEntry, &AdapterListLock); + + /* Call MiniportInitialize */ + NDIS_DbgPrint(MID_TRACE, ("calling MiniportInitialize\n")); + NdisStatus = (*Miniport->Chars.InitializeHandler)( &OpenErrorStatus, &SelectedMediumIndex, &MediaArray[0], + MEDIA_ARRAY_SIZE, Adapter, RegKeyHandle); + + ZwClose(RegKeyHandle); + + if ((NdisStatus == NDIS_STATUS_SUCCESS) && (SelectedMediumIndex < MEDIA_ARRAY_SIZE)) + { + NDIS_DbgPrint(MID_TRACE,("successful return from MiniportInitialize\n")); + + Adapter->NdisMiniportBlock.MediaType = MediaArray[SelectedMediumIndex]; + + switch (Adapter->NdisMiniportBlock.MediaType) + { + case NdisMedium802_3: + Adapter->MediumHeaderSize = 14; /* XXX figure out what to do about LLC */ + AddressOID = OID_802_3_CURRENT_ADDRESS; + Adapter->AddressLength = ETH_LENGTH_OF_ADDRESS; + + Adapter->NdisMiniportBlock.FilterDbs.u.EthDB = ExAllocatePool(NonPagedPool, sizeof(ETH_FILTER)); + if (Adapter->NdisMiniportBlock.FilterDbs.u.EthDB) + { + RtlZeroMemory(Adapter->NdisMiniportBlock.FilterDbs.u.EthDB, sizeof(ETH_FILTER)); + Adapter->NdisMiniportBlock.FilterDbs.u.EthDB->Miniport = (PNDIS_MINIPORT_BLOCK)Adapter; + } + else + MemError = TRUE; + + break; + + default: + /* FIXME: Support other types of media */ + ExFreePool(Adapter); + ASSERT(FALSE); + return; + } + + NdisStatus = DoQueries(Adapter, AddressOID); + } + + if ((MemError) || (NdisStatus != NDIS_STATUS_SUCCESS) || (SelectedMediumIndex >= MEDIA_ARRAY_SIZE)) + { + NDIS_DbgPrint(MAX_TRACE, ("return from MiniportInitialize: NdisStatus 0x%x, SelectedMediumIndex 0x%x\n", + NdisStatus, SelectedMediumIndex)); + + /* Remove adapter from adapter list for this miniport */ + KeAcquireSpinLock(&Miniport->Lock, &OldIrql); + RemoveEntryList(&Adapter->MiniportListEntry); + KeReleaseSpinLock(&Miniport->Lock, OldIrql); + + /* Remove adapter from global adapter list */ + KeAcquireSpinLock(&AdapterListLock, &OldIrql); + RemoveEntryList(&Adapter->ListEntry); + KeReleaseSpinLock(&AdapterListLock, OldIrql); + + if (Adapter->LookaheadBuffer) + ExFreePool(Adapter->LookaheadBuffer); + + IoDeleteDevice(Adapter->NdisMiniportBlock.DeviceObject); + ExFreePool(Adapter); + NDIS_DbgPrint(MIN_TRACE, ("MiniportInitialize() failed for an adapter.\n")); + } +} + +/* + * @implemented + */ NDIS_STATUS EXPORT NdisMRegisterMiniport( @@ -966,19 +1395,26 @@ NdisMRegisterMiniport( * MiniportCharacteristics = Pointer to a buffer with miniport characteristics * CharacteristicsLength = Number of bytes in characteristics buffer * RETURNS: - * Status of operation + * Status of operation + * NOTES: + * - To create device objects for the miniport, the Route value under Linkage is + * parsed. I don't know if this is the way Microsoft does it or not. + * TODO: + * verify this algorithm by playing with nt */ { UINT MinSize; - KIRQL OldIrql; NTSTATUS Status; - NDIS_STATUS NdisStatus; - NDIS_STATUS OpenErrorStatus; - UINT SelectedMediumIndex; - PLOGICAL_ADAPTER Adapter; - NDIS_OID AddressOID; - BOOLEAN MemError = FALSE; PMINIPORT_DRIVER Miniport = GET_MINIPORT_DRIVER(NdisWrapperHandle); + OBJECT_ATTRIBUTES DeviceKeyAttributes; + OBJECT_ATTRIBUTES LinkageKeyAttributes; + HANDLE DeviceKeyHandle; + HANDLE LinkageKeyHandle; + UNICODE_STRING RouteVal; + UNICODE_STRING LinkageKeyName; + KEY_VALUE_PARTIAL_INFORMATION *RouteData; + ULONG RouteDataLength; + UINT NextRouteOffset = 0; NDIS_DbgPrint(MAX_TRACE, ("Called.\n")); @@ -1029,130 +1465,81 @@ NdisMRegisterMiniport( } } + /* TODO: verify NDIS5 and NDIS5.1 */ + RtlCopyMemory(&Miniport->Chars, MiniportCharacteristics, MinSize); - Adapter = ExAllocatePool(NonPagedPool, sizeof(LOGICAL_ADAPTER)); - if (!Adapter) { - NDIS_DbgPrint(MIN_TRACE, ("Insufficient resources.\n")); - return NDIS_STATUS_RESOURCES; - } + /* + * extract the list of bound adapters from the registry's Route value + * for this adapter. It seems under WinNT that the Route value in the + * Linkage subkey holds an entry for each miniport instance we know about. + * This surely isn't how Windows does it, but it's better than nothing. + */ - /* This is very important */ - RtlZeroMemory(Adapter, sizeof(LOGICAL_ADAPTER)); - - /* Create the device object for this adapter */ - /* FIXME: Use GUIDs */ - RtlInitUnicodeStringFromLiteral(&Adapter->DeviceName, L"\\Device\\ne2000"); - Status = IoCreateDevice(Miniport->DriverObject, - 0, - &Adapter->DeviceName, - FILE_DEVICE_PHYSICAL_NETCARD, - 0, - FALSE, - &Adapter->NdisMiniportBlock.DeviceObject); - if (!NT_SUCCESS(Status)) { - NDIS_DbgPrint(MIN_TRACE, ("Could not create device object.\n")); - ExFreePool(Adapter); + /* Read the miniport config from the registry */ + InitializeObjectAttributes(&DeviceKeyAttributes, Miniport->RegistryPath, OBJ_CASE_INSENSITIVE, NULL, NULL); + + Status = ZwOpenKey(&DeviceKeyHandle, KEY_READ, &DeviceKeyAttributes); + if(!NT_SUCCESS(Status)) + { + NDIS_DbgPrint(MIN_TRACE,("Failed to open driver key: 0x%x\n", Status)); return NDIS_STATUS_FAILURE; } - /* Initialize adapter object */ - - KeInitializeSpinLock(&Adapter->NdisMiniportBlock.Lock); + RtlInitUnicodeString(&LinkageKeyName, L"Linkage"); + InitializeObjectAttributes(&LinkageKeyAttributes, &LinkageKeyName, OBJ_CASE_INSENSITIVE, DeviceKeyHandle, NULL); - InitializeListHead(&Adapter->ProtocolListHead); - - Adapter->RefCount = 1; - - Adapter->Miniport = Miniport; - - /* Set handlers (some NDIS macros require these) */ - - Adapter->NdisMiniportBlock.EthRxCompleteHandler = MiniEthReceiveComplete; - Adapter->NdisMiniportBlock.EthRxIndicateHandler = MiniEthReceiveIndication; - - Adapter->NdisMiniportBlock.SendCompleteHandler = MiniSendComplete; - Adapter->NdisMiniportBlock.SendResourcesHandler = MiniSendResourcesAvailable; - Adapter->NdisMiniportBlock.ResetCompleteHandler = MiniResetComplete; - Adapter->NdisMiniportBlock.TDCompleteHandler = MiniTransferDataComplete; - - - KeInitializeDpc(&Adapter->MiniportDpc, MiniportDpc, (PVOID)Adapter); - - /* Put adapter in adapter list for this miniport */ - ExInterlockedInsertTailList(&Miniport->AdapterListHead, - &Adapter->MiniportListEntry, - &Miniport->Lock); - - /* Put adapter in global adapter list */ - ExInterlockedInsertTailList(&AdapterListHead, - &Adapter->ListEntry, - &AdapterListLock); - - /* Call MiniportInitialize */ - NdisStatus = (*Miniport->Chars.InitializeHandler)( - &OpenErrorStatus, - &SelectedMediumIndex, - &MediaArray[0], - MEDIA_ARRAY_SIZE, - Adapter, - NULL /* FIXME: WrapperConfigurationContext */); - - if ((NdisStatus == NDIS_STATUS_SUCCESS) && - (SelectedMediumIndex < MEDIA_ARRAY_SIZE)) { - - Adapter->NdisMiniportBlock.MediaType = MediaArray[SelectedMediumIndex]; + Status = ZwOpenKey(&LinkageKeyHandle, KEY_READ, &LinkageKeyAttributes); + if(!NT_SUCCESS(Status)) + { + NDIS_DbgPrint(MIN_TRACE,("Failed to open Linkage key: 0x%x\n", Status)); + ZwClose(DeviceKeyHandle); + return NDIS_STATUS_FAILURE; + } - switch (Adapter->NdisMiniportBlock.MediaType) { - case NdisMedium802_3: - Adapter->MediumHeaderSize = 14; - AddressOID = OID_802_3_CURRENT_ADDRESS; - Adapter->AddressLength = ETH_LENGTH_OF_ADDRESS; - - Adapter->NdisMiniportBlock.FilterDbs.u.EthDB = ExAllocatePool(NonPagedPool, - sizeof(ETH_FILTER)); - if (Adapter->NdisMiniportBlock.FilterDbs.u.EthDB) { - RtlZeroMemory(Adapter->NdisMiniportBlock.FilterDbs.u.EthDB, sizeof(ETH_FILTER)); - Adapter->NdisMiniportBlock.FilterDbs.u.EthDB->Miniport = (PNDIS_MINIPORT_BLOCK)Adapter; - } else - MemError = TRUE; - break; + RouteData = ExAllocatePool(PagedPool, ROUTE_DATA_SIZE); + if(!RouteData) + { + NDIS_DbgPrint(MIN_TRACE,("Insufficient resources\n")); + ZwClose(LinkageKeyHandle); + ZwClose(DeviceKeyHandle); + return NDIS_STATUS_RESOURCES; + } - default: - /* FIXME: Support other types of medias */ - ASSERT(FALSE); - return NDIS_STATUS_FAILURE; - } + RtlInitUnicodeString(&RouteVal, L"Route"); - NdisStatus = DoQueries(Adapter, AddressOID); + Status = ZwQueryValueKey(LinkageKeyHandle, &RouteVal, KeyValuePartialInformation, RouteData, ROUTE_DATA_SIZE, &RouteDataLength); + if(!NT_SUCCESS(Status)) + { + NDIS_DbgPrint(MIN_TRACE,("Failed to query Route value\n")); + ZwClose(LinkageKeyHandle); + ZwClose(DeviceKeyHandle); + ExFreePool(RouteData); + return NDIS_STATUS_FAILURE; } - if ((MemError) || - (NdisStatus != NDIS_STATUS_SUCCESS) || - (SelectedMediumIndex >= MEDIA_ARRAY_SIZE)) { + ZwClose(LinkageKeyHandle); + ZwClose(DeviceKeyHandle); - /* Remove adapter from adapter list for this miniport */ - KeAcquireSpinLock(&Miniport->Lock, &OldIrql); - RemoveEntryList(&Adapter->MiniportListEntry); - KeReleaseSpinLock(&Miniport->Lock, OldIrql); - - /* Remove adapter from global adapter list */ - KeAcquireSpinLock(&AdapterListLock, &OldIrql); - RemoveEntryList(&Adapter->ListEntry); - KeReleaseSpinLock(&AdapterListLock, OldIrql); + /* route is a REG_MULTI_SZ with each nic object created by NDI - create an adapter for each */ + while(*(RouteData->Data + NextRouteOffset)) + { + NDIS_DbgPrint(MID_TRACE, ("Starting adapter %ws\n", (WCHAR *)(RouteData->Data + NextRouteOffset))); - if (Adapter->LookaheadBuffer) - ExFreePool(Adapter->LookaheadBuffer); + NdisIStartAdapter((WCHAR *)(RouteData->Data + NextRouteOffset), + wcslen((WCHAR *)(RouteData->Data + NextRouteOffset)), Miniport); - IoDeleteDevice(Adapter->NdisMiniportBlock.DeviceObject); - ExFreePool(Adapter); - return NDIS_STATUS_FAILURE; + NextRouteOffset += wcslen((WCHAR *)(RouteData->Data + NextRouteOffset)); } + ExFreePool(RouteData); return NDIS_STATUS_SUCCESS; } +/* + * @implemented + */ VOID EXPORT NdisMResetComplete( @@ -1166,6 +1553,9 @@ NdisMResetComplete( } +/* + * @implemented + */ VOID EXPORT NdisMSendComplete( @@ -1187,6 +1577,9 @@ NdisMSendComplete( } +/* + * @implemented + */ VOID EXPORT NdisMSendResourcesAvailable( @@ -1196,6 +1589,9 @@ NdisMSendResourcesAvailable( } +/* + * @implemented + */ VOID EXPORT NdisMTransferDataComplete( @@ -1211,6 +1607,9 @@ NdisMTransferDataComplete( } +/* + * @implemented + */ VOID EXPORT NdisMSetInformationComplete( @@ -1229,6 +1628,9 @@ NdisMSetInformationComplete( } +/* + * @implemented + */ VOID EXPORT NdisMSetAttributes( @@ -1256,6 +1658,9 @@ NdisMSetAttributes( } +/* + * @implemented + */ VOID EXPORT NdisMSetAttributesEx( @@ -1280,15 +1685,28 @@ NdisMSetAttributesEx( PLOGICAL_ADAPTER Adapter = GET_LOGICAL_ADAPTER(MiniportAdapterHandle); NDIS_DbgPrint(MAX_TRACE, ("Called.\n")); - NDIS_DbgPrint(MIN_TRACE, ("NdisMSetAttributesEx() is partly-implemented.")); + NDIS_DbgPrint(MAX_TRACE, ("NdisMSetAttributesEx() is partly-implemented.\n")); Adapter->NdisMiniportBlock.MiniportAdapterContext = MiniportAdapterContext; - Adapter->Attributes = AttributeFlags & NDIS_ATTRIBUTE_BUS_MASTER; - Adapter->NdisMiniportBlock.AdapterType = AdapterType; + + /* don't know why this is here - anybody? */ + Adapter->Attributes = AttributeFlags & NDIS_ATTRIBUTE_BUS_MASTER; + Adapter->NdisMiniportBlock.AdapterType = AdapterType; Adapter->AttributesSet = TRUE; + + if(AttributeFlags & NDIS_ATTRIBUTE_DESERIALIZE) + { + NDIS_DbgPrint(MIN_TRACE, ("Deserialized miniport - UNIMPLEMENTED\n")); +#ifdef DBG + __asm__("int $3\n"); +#endif + } } +/* + * @unimplemented + */ VOID EXPORT NdisMSleep( @@ -1298,6 +1716,9 @@ NdisMSleep( } +/* + * @unimplemented + */ BOOLEAN EXPORT NdisMSynchronizeWithInterrupt( @@ -1311,6 +1732,9 @@ NdisMSynchronizeWithInterrupt( } +/* + * @unimplemented + */ NDIS_STATUS EXPORT NdisMWriteLogData( @@ -1324,6 +1748,9 @@ NdisMWriteLogData( } +/* + * @implemented + */ VOID EXPORT NdisTerminateWrapper( @@ -1340,7 +1767,47 @@ NdisTerminateWrapper( NDIS_DbgPrint(MAX_TRACE, ("Called.\n")); + ExFreePool(Miniport->RegistryPath->Buffer); + ExFreePool(Miniport->RegistryPath); ExFreePool(Miniport); } /* EOF */ +/* enum test */ + /* + { + ULONG KeyInformationSize; + KEY_BASIC_INFORMATION *KeyInformation; + int i; + + KeyInformation = ExAllocatePool(PagedPool, 1024); + ASSERT(KeyInformation); + + RtlInitUnicodeString(&LinkageKeyName, L"\\Registry\\Machine\\System\\CurrentControlSet\\Services\\NE2000"); + InitializeObjectAttributes(&LinkageKeyAttributes, &LinkageKeyName, OBJ_CASE_INSENSITIVE|OBJ_KERNEL_HANDLE, NULL, NULL); + + Status = ZwOpenKey(&LinkageKeyHandle, KEY_READ, &LinkageKeyAttributes); + if(!NT_SUCCESS(Status)) + { + DbgPrint("ndis!NdisMRegisterMiniport: Failed to open Linkage key: 0x%x\n", Status); + ASSERT(0); + KeBugCheck(0); + } + + for(i=0;i<5;i++) + { + Status = ZwEnumerateKey(LinkageKeyHandle, i, KeyBasicInformation, KeyInformation, 1024, &KeyInformationSize); + if(!NT_SUCCESS(Status)) + { + DbgPrint("ndis!NdisMRegisterMiniport: Failed to enumerate: 0x%x\n", Status); + break; + } + + KeyInformation->Name[KeyInformation->NameLength/sizeof(WCHAR)] = 0; + DbgPrint("ndis!NdisMRegisterMiniport: enumerated key %ws\n", KeyInformation->Name); + } + + ExFreePool(KeyInformation); + KeBugCheck(0); + } + */ diff --git a/drivers/net/ndis/ndis/protocol.c b/drivers/net/ndis/ndis/protocol.c index 60937e6..9f933b1 100644 --- a/drivers/net/ndis/ndis/protocol.c +++ b/drivers/net/ndis/ndis/protocol.c @@ -16,6 +16,37 @@ LIST_ENTRY ProtocolListHead; KSPIN_LOCK ProtocolListLock; +/* + * @implemented + */ +VOID +EXPORT +NdisCompleteBindAdapter( + IN NDIS_HANDLE BindAdapterContext, + IN NDIS_STATUS Status, + IN NDIS_STATUS OpenStatus) +/* + * FUNCTION: Indicates a packet to bound protocols + * ARGUMENTS: + * Adapter = Pointer to logical adapter + * Packet = Pointer to packet to indicate + * RETURNS: + * Status of operation + */ +{ + /* + * XXX partially-implemented! + * + * need to handle error conditions, and i'm not sure this is even what this func should do. + * be sure to fix NdisRegisterProtocol before fixing this, though. + */ + + PROTOCOL_BINDING *Protocol = (PROTOCOL_BINDING *)BindAdapterContext; + + /* Put protocol binding struct on global list */ + ExInterlockedInsertTailList(&ProtocolListHead, &Protocol->ListEntry, &ProtocolListLock); +} + NDIS_STATUS ProIndicatePacket( @@ -293,6 +324,9 @@ ProTransferData( +/* + * @implemented + */ VOID EXPORT NdisCloseAdapter( @@ -326,6 +360,9 @@ NdisCloseAdapter( } +/* + * @implemented + */ VOID EXPORT NdisDeregisterProtocol( @@ -356,6 +393,9 @@ NdisDeregisterProtocol( } +/* + * @implemented + */ VOID EXPORT NdisOpenAdapter( @@ -441,11 +481,15 @@ NdisOpenAdapter( AdapterBinding->NdisOpenBlock.SendPacketsHandler = ProSendPackets; AdapterBinding->NdisOpenBlock.TransferDataHandler = ProTransferData; +#if 0 + /* XXX this looks fishy */ + /* OK, this really *is* fishy - it bugchecks */ /* Put on protocol's bound adapters list */ ExInterlockedInsertTailList(&Protocol->AdapterListHead, &AdapterBinding->ProtocolListEntry, &Protocol->Lock); - +#endif + /* XXX so does this */ /* Put protocol on adapter's bound protocols list */ ExInterlockedInsertTailList(&Adapter->ProtocolListHead, &AdapterBinding->AdapterListEntry, @@ -457,6 +501,9 @@ NdisOpenAdapter( } +/* + * @implemented + */ VOID EXPORT NdisRegisterProtocol( @@ -471,16 +518,23 @@ NdisRegisterProtocol( * NdisProtocolHandle = Address of buffer for handle used to identify the driver * ProtocolCharacteristics = Pointer to NDIS_PROTOCOL_CHARACTERISTICS structure * CharacteristicsLength = Size of structure which ProtocolCharacteristics targets + * TODO: + * break this function up + * make this thing able to handle >1 protocol */ { PPROTOCOL_BINDING Protocol; NTSTATUS NtStatus; UINT MinSize; + HANDLE DriverKeyHandle = NULL; + PKEY_VALUE_PARTIAL_INFORMATION KeyInformation = NULL; + UINT DataOffset = 0; NDIS_DbgPrint(MAX_TRACE, ("Called.\n")); switch (ProtocolCharacteristics->MajorNdisVersion) { - case 0x03: + case 0x03: /* we don't really want to support ndis3 drivers - so we complainf or now */ + NDIS_DbgPrint(MID_TRACE, ("Ndis 3 protocol attempting to register\n")); MinSize = sizeof(NDIS30_PROTOCOL_CHARACTERISTICS_S); break; @@ -494,6 +548,7 @@ NdisRegisterProtocol( default: *Status = NDIS_STATUS_BAD_VERSION; + NDIS_DbgPrint(MIN_TRACE, ("Incorrect characteristics size\n")); return; } @@ -529,16 +584,179 @@ NdisRegisterProtocol( InitializeListHead(&Protocol->AdapterListHead); - /* Put protocol binding on global list */ - ExInterlockedInsertTailList(&ProtocolListHead, - &Protocol->ListEntry, - &ProtocolListLock); + /* + * bind the adapter to all of its miniports + * + * open registry path + * get list of devices from Bind key + * call BindAdapterHandler for each + */ + { + OBJECT_ATTRIBUTES ObjectAttributes; + UNICODE_STRING RegistryPath; + WCHAR *RegistryPathStr; + +#define SERVICES_KEY L"\\Registry\\Machine\\System\\CurrentControlSet\\Services\\" +#define LINKAGE_KEY L"\\Linkage" + + RegistryPathStr = ExAllocatePool(PagedPool, + sizeof(SERVICES_KEY) + ProtocolCharacteristics->Name.Length + sizeof(LINKAGE_KEY)); + if(!RegistryPathStr) + { + NDIS_DbgPrint(MIN_TRACE, ("Insufficient resources.\n")); + ExFreePool(Protocol); + *Status = NDIS_STATUS_RESOURCES; + return; + } + + wcscpy(RegistryPathStr, SERVICES_KEY); + wcsncat(RegistryPathStr, ((WCHAR *)ProtocolCharacteristics->Name.Buffer), + ProtocolCharacteristics->Name.Length / sizeof(WCHAR)); + RegistryPathStr[wcslen(SERVICES_KEY)+ProtocolCharacteristics->Name.Length/sizeof(WCHAR)] = 0; + wcscat(RegistryPathStr, LINKAGE_KEY); + + RtlInitUnicodeString(&RegistryPath, RegistryPathStr); + NDIS_DbgPrint(MAX_TRACE, ("Opening configuration key: %wZ\n", &RegistryPath)); + + InitializeObjectAttributes(&ObjectAttributes, &RegistryPath, OBJ_CASE_INSENSITIVE, NULL, NULL); + NtStatus = ZwOpenKey(&DriverKeyHandle, KEY_READ, &ObjectAttributes); + + ExFreePool(RegistryPathStr); + + if(!NT_SUCCESS(NtStatus)) + { + NDIS_DbgPrint(MID_TRACE, ("Unable to open protocol configuration\n")); + ExFreePool(Protocol); + *Status = NDIS_STATUS_FAILURE; + return; + } + } + + NDIS_DbgPrint(MAX_TRACE, ("Successfully opened the registry configuration\n")); + + { + UNICODE_STRING ValueName; + ULONG ResultLength; + + RtlInitUnicodeString(&ValueName, L"Bind"); + + NtStatus = ZwQueryValueKey(DriverKeyHandle, &ValueName, KeyValuePartialInformation, NULL, 0, &ResultLength); + if(NtStatus != STATUS_BUFFER_OVERFLOW && NtStatus != STATUS_BUFFER_TOO_SMALL) + { + NDIS_DbgPrint(MID_TRACE, ("Unable to query the Bind value for size\n")); + ZwClose(DriverKeyHandle); + ExFreePool(Protocol); + *Status = NDIS_STATUS_FAILURE; + return; + } + + KeyInformation = ExAllocatePool(PagedPool, sizeof(KEY_VALUE_PARTIAL_INFORMATION) + ResultLength); + if(!KeyInformation) + { + NDIS_DbgPrint(MIN_TRACE, ("Insufficient resources.\n")); + ZwClose(DriverKeyHandle); + ExFreePool(Protocol); + *Status = NDIS_STATUS_FAILURE; + return; + } + + NtStatus = ZwQueryValueKey(DriverKeyHandle, &ValueName, KeyValuePartialInformation, KeyInformation, + sizeof(KEY_VALUE_PARTIAL_INFORMATION) + ResultLength, &ResultLength); + + if(!NT_SUCCESS(NtStatus)) + { + NDIS_DbgPrint(MIN_TRACE, ("Unable to query the Bind value\n")); + ZwClose(DriverKeyHandle); + ExFreePool(KeyInformation); + ExFreePool(Protocol); + *Status = NDIS_STATUS_FAILURE; + return; + } + } + + DataOffset = 0; + while((KeyInformation->Data)[DataOffset]) + { + /* BindContext is for tracking pending binding operations */ + VOID *BindContext = 0; + NDIS_STRING DeviceName; + NDIS_STRING RegistryPath; + WCHAR *RegistryPathStr = NULL; + ULONG PathLength = 0; + + RtlInitUnicodeString(&DeviceName, (WCHAR *)KeyInformation->Data); /* we know this is 0-term */ + + /* + * RegistryPath should be: + * \Registry\Machine\System\CurrentControlSet\Services\Nic1\Parameters\Tcpip + * + * This is constructed as follows: + * SERVICES_KEY + extracted device name + Protocol name from characteristics + */ +#define PARAMETERS_KEY L"\\Parameters\\" + + PathLength = sizeof(SERVICES_KEY) + /* \Registry\Machine\System\CurrentControlSet\Services\ */ + wcslen( ((WCHAR *)KeyInformation->Data)+8 ) * sizeof(WCHAR) + /* Adapter1 (extracted from \Device\Adapter1) */ + sizeof(PARAMETERS_KEY) + /* \Parameters\ */ + ProtocolCharacteristics->Name.Length; /* Tcpip */ + + RegistryPathStr = ExAllocatePool(PagedPool, PathLength); + if(!RegistryPathStr) + { + NDIS_DbgPrint(MIN_TRACE, ("insufficient resources.\n")); + ExFreePool(KeyInformation); + ExFreePool(Protocol); + *Status = NDIS_STATUS_RESOURCES; + return; + } + + wcscpy(RegistryPathStr, SERVICES_KEY); + wcscat(RegistryPathStr, (((WCHAR *)(KeyInformation->Data)) +8 )); + wcscat(RegistryPathStr, PARAMETERS_KEY); + wcsncat(RegistryPathStr, ProtocolCharacteristics->Name.Buffer, ProtocolCharacteristics->Name.Length / sizeof(WCHAR) ); + + RegistryPathStr[PathLength/sizeof(WCHAR) - 1] = 0; + + RtlInitUnicodeString(&RegistryPath, RegistryPathStr); + + NDIS_DbgPrint(MAX_TRACE, ("Calling protocol's BindAdapter handler with DeviceName %wZ and RegistryPath %wZ\n", + &DeviceName, &RegistryPath)); + + /* XXX SD must do something with bind context */ + { + BIND_HANDLER BindHandler = ProtocolCharacteristics->BindAdapterHandler; + if(BindHandler) + BindHandler(Status, BindContext, &DeviceName, &RegistryPath, 0); + else + NDIS_DbgPrint(MID_TRACE, ("No protocol bind handler specified\n")); + } + /* + (*(Protocol->Chars.BindAdapterHandler))(Status, BindContext, &DeviceName, &RegistryPath, 0); + */ + + if(*Status == NDIS_STATUS_SUCCESS) + { + /* Put protocol binding struct on global list */ + ExInterlockedInsertTailList(&ProtocolListHead, &Protocol->ListEntry, &ProtocolListLock); + } + /* + else if(*Status != NDIS_STATUS_PENDING) + { + // what to do here? + } + */ + + DataOffset += wcslen((WCHAR *)KeyInformation->Data); + } *NdisProtocolHandle = Protocol; *Status = NDIS_STATUS_SUCCESS; } +/* + * @implemented + */ VOID EXPORT NdisRequest( @@ -557,6 +775,9 @@ NdisRequest( } +/* + * @implemented + */ VOID EXPORT NdisReset( @@ -567,6 +788,9 @@ NdisReset( } +/* + * @implemented + */ VOID EXPORT NdisSend( @@ -585,6 +809,9 @@ NdisSend( } +/* + * @implemented + */ VOID EXPORT NdisSendPackets( @@ -596,6 +823,9 @@ NdisSendPackets( } +/* + * @implemented + */ VOID EXPORT NdisTransferData( diff --git a/drivers/net/ndis/ndis/string.c b/drivers/net/ndis/ndis/string.c index bd9fbb8..46f90f6 100644 --- a/drivers/net/ndis/ndis/string.c +++ b/drivers/net/ndis/ndis/string.c @@ -10,11 +10,14 @@ #include +/* + * @implemented + */ NDIS_STATUS EXPORT NdisAnsiStringToUnicodeString( IN OUT PNDIS_STRING DestinationString, - IN PNDIS_ANSI_STRING SourceString) + IN PANSI_STRING SourceString) /* * FUNCTION: Converts an ANSI string to an NDIS (unicode) string * ARGUMENTS: @@ -28,6 +31,9 @@ NdisAnsiStringToUnicodeString( } +/* + * @implemented + */ BOOLEAN EXPORT NdisEqualString( @@ -49,10 +55,13 @@ NdisEqualString( } +/* + * @implemented + */ VOID EXPORT NdisInitAnsiString( - IN OUT PNDIS_ANSI_STRING DestinationString, + IN OUT PANSI_STRING DestinationString, IN PCSTR SourceString) /* * FUNCTION: Initializes an ANSI string @@ -67,6 +76,9 @@ NdisInitAnsiString( } +/* + * @implemented + */ VOID EXPORT NdisInitializeString( @@ -92,6 +104,9 @@ NdisInitializeString( } +/* + * @implemented + */ VOID EXPORT NdisInitUnicodeString( @@ -110,10 +125,13 @@ NdisInitUnicodeString( } +/* + * @implemented + */ NDIS_STATUS EXPORT NdisUnicodeStringToAnsiString( - IN OUT PNDIS_ANSI_STRING DestinationString, + IN OUT PANSI_STRING DestinationString, IN PNDIS_STRING SourceString) /* * FUNCTION: Converts an NDIS (unicode) string to an ANSI string @@ -129,6 +147,9 @@ NdisUnicodeStringToAnsiString( } +/* + * @implemented + */ NTSTATUS EXPORT NdisUpcaseUnicodeString( @@ -141,9 +162,9 @@ NdisUpcaseUnicodeString( * NDIS 5.0 */ { - UNIMPLEMENTED - - return STATUS_NOT_IMPLEMENTED; + ASSERT_IRQL(PASSIVE_LEVEL); + // FIXME - not sure if 3rd param should be TRUE or FALSE + return RtlUpcaseUnicodeString ( DestinationString, SourceString, FALSE ); } /* EOF */ diff --git a/drivers/net/ndis/ndis/stubs.c b/drivers/net/ndis/ndis/stubs.c index 1360d9e..55f0e90 100644 --- a/drivers/net/ndis/ndis/stubs.c +++ b/drivers/net/ndis/ndis/stubs.c @@ -10,17 +10,9 @@ #include -VOID -EXPORT -NdisCompleteBindAdapter( - IN NDIS_HANDLE BindAdapterContext, - IN NDIS_STATUS Status, - IN NDIS_STATUS OpenStatus) -{ - UNIMPLEMENTED -} - - +/* + * @unimplemented + */ VOID EXPORT NdisCompleteQueryStatistics( @@ -32,6 +24,9 @@ NdisCompleteQueryStatistics( } +/* + * @unimplemented + */ VOID EXPORT NdisCompleteUnbindAdapter( @@ -42,15 +37,21 @@ NdisCompleteUnbindAdapter( } +/* + * @implemented + */ VOID EXPORT NdisInitializeListHead( IN PLIST_ENTRY ListHead) { - UNIMPLEMENTED + InitializeListHead(ListHead); } +/* + * @implemented + */ VOID EXPORT NdisInterlockedAddUlong ( @@ -58,10 +59,13 @@ NdisInterlockedAddUlong ( IN ULONG Increment, IN PNDIS_SPIN_LOCK SpinLock) { - UNIMPLEMENTED + ExInterlockedAddUlong ( Addend, Increment, (PKSPIN_LOCK)SpinLock ); } +/* + * @implemented + */ PLIST_ENTRY EXPORT NdisInterlockedInsertHeadList( @@ -69,12 +73,13 @@ NdisInterlockedInsertHeadList( IN PLIST_ENTRY ListEntry, IN PNDIS_SPIN_LOCK SpinLock) { - UNIMPLEMENTED - - return NULL; + return ExInterlockedInsertHeadList ( ListHead, ListEntry, (PKSPIN_LOCK)SpinLock ); } +/* + * @implemented + */ PLIST_ENTRY EXPORT NdisInterlockedInsertTailList( @@ -82,24 +87,26 @@ NdisInterlockedInsertTailList( IN PLIST_ENTRY ListEntry, IN PNDIS_SPIN_LOCK SpinLock) { - UNIMPLEMENTED - - return NULL; + return ExInterlockedInsertTailList ( ListHead, ListEntry, (PKSPIN_LOCK)SpinLock ); } +/* + * @implemented + */ PLIST_ENTRY EXPORT NdisInterlockedRemoveHeadList( IN PLIST_ENTRY ListHead, IN PNDIS_SPIN_LOCK SpinLock) { - UNIMPLEMENTED - - return NULL; + return ExInterlockedRemoveHeadList ( ListHead, (PKSPIN_LOCK)SpinLock ); } +/* + * @unimplemented + */ VOID EXPORT NdisMCompleteBufferPhysicalMapping( @@ -110,6 +117,9 @@ NdisMCompleteBufferPhysicalMapping( } +/* + * @unimplemented + */ VOID EXPORT NdisMStartBufferPhysicalMapping( @@ -124,6 +134,9 @@ NdisMStartBufferPhysicalMapping( } +/* + * @unimplemented + */ VOID EXPORT NdisMapFile( @@ -134,52 +147,64 @@ NdisMapFile( UNIMPLEMENTED } - -VOID -EXPORT -NdisWriteConfiguration( - OUT PNDIS_STATUS Status, - IN NDIS_HANDLE WrapperConfigurationContext, - IN PNDIS_STRING Keyword, - IN PNDIS_CONFIGURATION_PARAMETER * ParameterValue) +typedef struct _NDIS_HANDLE_OBJECT { - UNIMPLEMENTED -} + HANDLE FileHandle; + BOOL Mapped; + ULONG FileLength; + PVOID MapBuffer; +} NDIS_HANDLE_OBJECT, *PNDIS_HANDLE_OBJECT; - -VOID -EXPORT -NdisWriteErrorLogEntry( - IN NDIS_HANDLE NdisAdapterHandle, - IN NDIS_ERROR_CODE ErrorCode, - IN ULONG NumberOfErrorValues, - IN ULONG ERROR_LOG_MAXIMUM_SIZE) -/* IN ULONG ...) - * ERROR_LOG_MAXIMUM_SIZE = ... in MSDN - */ +inline +PNDIS_HANDLE_OBJECT +NDIS_HANDLE_TO_POBJECT ( NDIS_HANDLE handle ) { - UNIMPLEMENTED + return (PNDIS_HANDLE_OBJECT)handle; } - -VOID -EXPORT -NdisCloseConfiguration( - IN NDIS_HANDLE ConfigurationHandle) +inline +NDIS_HANDLE +NDIS_POBJECT_TO_HANDLE ( PNDIS_HANDLE_OBJECT obj ) { - UNIMPLEMENTED + return (NDIS_HANDLE)obj; } +const WCHAR* NDIS_FILE_FOLDER = L"\\SystemRoot\\System32\\Drivers\\"; +/* + * @implemented + */ VOID EXPORT NdisCloseFile( IN NDIS_HANDLE FileHandle) { - UNIMPLEMENTED + PNDIS_HANDLE_OBJECT FileHandleObject; + + ASSERT_IRQL(PASSIVE_LEVEL); + + ASSERT ( FileHandle ); + + FileHandleObject = NDIS_HANDLE_TO_POBJECT(FileHandle); + + ASSERT ( FileHandleObject->FileHandle ); + + /* + if ( FileHandleObject->Mapped ) + NdisUnmapFile ( FileHandle ); + */ + + ZwClose ( FileHandleObject->FileHandle ); + + memset ( FileHandleObject, 0, sizeof(NDIS_HANDLE_OBJECT) ); + + ExFreePool ( FileHandleObject ); } +/* + * @unimplemented + */ NDIS_STATUS EXPORT NdisIMDeInitializeDeviceInstance( @@ -191,6 +216,9 @@ NdisIMDeInitializeDeviceInstance( } +/* + * @unimplemented + */ NDIS_STATUS EXPORT NdisIMInitializeDeviceInstance( @@ -203,6 +231,9 @@ NdisIMInitializeDeviceInstance( } +/* + * @unimplemented + */ NDIS_STATUS EXPORT NdisIMRegisterLayeredMiniport( @@ -217,6 +248,9 @@ NdisIMRegisterLayeredMiniport( } +/* + * @unimplemented + */ VOID EXPORT NdisMWanIndicateReceive( @@ -230,6 +264,9 @@ NdisMWanIndicateReceive( } +/* + * @unimplemented + */ VOID EXPORT NdisMWanIndicateReceiveComplete( @@ -239,6 +276,9 @@ NdisMWanIndicateReceiveComplete( } +/* + * @unimplemented + */ VOID EXPORT NdisMWanSendComplete( @@ -250,23 +290,9 @@ NdisMWanSendComplete( } -VOID -EXPORT -NdisOpenConfiguration( - OUT PNDIS_STATUS Status, - OUT PNDIS_HANDLE ConfigurationHandle, - IN NDIS_HANDLE WrapperConfigurationContext) -{ - UNIMPLEMENTED -} - - /* -NdisOpenConfigurationKeyByIndex -NdisOpenConfigurationKeyByName -*/ - - + * @unimplemented + */ VOID EXPORT NdisOpenFile( @@ -276,7 +302,79 @@ NdisOpenFile( IN PNDIS_STRING FileName, IN NDIS_PHYSICAL_ADDRESS HighestAcceptableAddress) { - UNIMPLEMENTED + NDIS_STRING FullFileName; + OBJECT_ATTRIBUTES ObjectAttributes; + PNDIS_HANDLE_OBJECT FileHandleObject = NULL; + //IO_STATUS_BLOCK IoStatusBlock; + + ASSERT_IRQL(PASSIVE_LEVEL); + + *Status = NDIS_STATUS_SUCCESS; + FullFileName.Buffer = NULL; + + ASSERT ( Status && FileName ); + + FullFileName.Length = sizeof(NDIS_FILE_FOLDER); + FullFileName.MaximumLength = FileName->MaximumLength + sizeof(NDIS_FILE_FOLDER); + FullFileName.Buffer = ExAllocatePool ( NonPagedPool, FullFileName.MaximumLength ); + + if ( !FullFileName.Buffer ) + { + *Status = NDIS_STATUS_RESOURCES; + goto cleanup; + } + + FileHandleObject = ExAllocatePool ( NonPagedPool, sizeof(NDIS_HANDLE_OBJECT) ); + if ( !FileHandleObject ) + { + *Status = NDIS_STATUS_RESOURCES; + goto cleanup; + } + memset ( FileHandleObject, 0, sizeof(NDIS_HANDLE_OBJECT) ); + + memmove ( FullFileName.Buffer, NDIS_FILE_FOLDER, FullFileName.Length ); + *Status = RtlAppendUnicodeStringToString ( &FullFileName, FileName ); + if ( !NT_SUCCESS(*Status) ) + goto cleanup; + + InitializeObjectAttributes ( &ObjectAttributes, + &FullFileName, + OBJ_CASE_INSENSITIVE, + NULL, + NULL ); + + *Status = ZwCreateFile ( + &FileHandleObject->FileHandle, + FILE_READ_DATA|SYNCHRONIZE, + &ObjectAttributes, + NULL, //&IoStatusBlock, // PIO_STATUS_BLOCK + NULL, // PLARGE_INTEGER AllocationSize + 0, // ULONG FileAttributes + FILE_SHARE_READ, // ULONG ShareAccess + CREATE_NEW, // ULONG CreateDisposition + FILE_SYNCHRONOUS_IO_NONALERT, // ULONG CreateOptions + 0, // PVOID EaBuffer + 0 ); // ULONG EaLength + + //if ( !NT_SUCCESS(*Status) ) + // goto cleanup; + +cleanup: + if ( FullFileName.Buffer != NULL ) + { + ExFreePool ( FullFileName.Buffer ); + FullFileName.Buffer = NULL; + } + if ( !NT_SUCCESS(*Status) && FileHandleObject != NULL ) + { + ExFreePool ( FileHandleObject ); + FileHandleObject = NULL; + *FileHandle = NULL; + } + else + *FileHandle = NDIS_POBJECT_TO_HANDLE(FileHandleObject); + + return; } @@ -284,42 +382,6 @@ NdisOpenFile( NdisOpenGlobalConfiguration */ -VOID -EXPORT -NdisOpenProtocolConfiguration( - OUT PNDIS_STATUS Status, - OUT PNDIS_HANDLE ConfigurationHandle, - IN PNDIS_STRING ProtocolSection) -{ - UNIMPLEMENTED -} - - -VOID -EXPORT -NdisReadConfiguration( - OUT PNDIS_STATUS Status, - OUT PNDIS_CONFIGURATION_PARAMETER * ParameterValue, - IN NDIS_HANDLE ConfigurationHandle, - IN PNDIS_STRING Keyword, - IN NDIS_PARAMETER_TYPE ParameterType) -{ - UNIMPLEMENTED -} - - -VOID -EXPORT -NdisReadNetworkAddress( - OUT PNDIS_STATUS Status, - OUT PVOID * NetworkAddress, - OUT PUINT NetworkAddressLength, - IN NDIS_HANDLE ConfigurationHandle) -{ - UNIMPLEMENTED -} - - #if 0 VOID EXPORT @@ -354,6 +416,9 @@ NdisSetProtocolFilter( #endif +/* + * @unimplemented + */ CCHAR EXPORT NdisSystemProcessorCount( @@ -363,6 +428,9 @@ NdisSystemProcessorCount( } +/* + * @unimplemented + */ VOID EXPORT NdisUnmapFile( @@ -386,6 +454,9 @@ NdisWriteEventLogEntry /* NDIS 5.0 extensions */ +/* + * @unimplemented + */ VOID EXPORT NdisCompletePnPEvent( @@ -403,6 +474,9 @@ NdisCompletePnPEvent( } +/* + * @unimplemented + */ VOID EXPORT NdisConvertStringToAtmAddress( @@ -420,6 +494,9 @@ NdisConvertStringToAtmAddress( } +/* + * @unimplemented + */ VOID EXPORT NdisGetCurrentProcessorCounts( @@ -437,6 +514,9 @@ NdisGetCurrentProcessorCounts( } +/* + * @unimplemented + */ VOID EXPORT NdisGetDriverHandle( @@ -453,6 +533,9 @@ NdisGetDriverHandle( } +/* + * @unimplemented + */ PNDIS_PACKET EXPORT NdisGetReceivedPacket( @@ -471,6 +554,9 @@ NdisGetReceivedPacket( } +/* + * @unimplemented + */ VOID EXPORT NdisGetSystemUptime( @@ -486,21 +572,9 @@ NdisGetSystemUptime( } -VOID -EXPORT -NdisInitializeReadWriteLock( - IN PNDIS_RW_LOCK Lock) /* - * FUNCTION: - * ARGUMENTS: - * NOTES: - * NDIS 5.0 + * @implemented */ -{ - UNIMPLEMENTED -} - - LONG EXPORT NdisInterlockedDecrement( @@ -512,12 +586,13 @@ NdisInterlockedDecrement( * NDIS 5.0 */ { - UNIMPLEMENTED - - return 0; + return InterlockedDecrement ( Addend ); } +/* + * @implemented + */ LONG EXPORT NdisInterlockedIncrement( @@ -529,12 +604,13 @@ NdisInterlockedIncrement( * NDIS 5.0 */ { - UNIMPLEMENTED - - return 0; + return InterlockedIncrement ( Addend ); } +/* + * @implemented + */ PSINGLE_LIST_ENTRY EXPORT NdisInterlockedPopEntrySList( @@ -547,12 +623,13 @@ NdisInterlockedPopEntrySList( * NDIS 5.0 */ { - UNIMPLEMENTED - - return NULL; + return ExInterlockedPopEntrySList ( ListHead, Lock ); } +/* + * @implemented + */ PSINGLE_LIST_ENTRY EXPORT NdisInterlockedPushEntrySList( @@ -566,12 +643,13 @@ NdisInterlockedPushEntrySList( * NDIS 5.0 */ { - UNIMPLEMENTED - - return NULL; + return ExInterlockedPushEntrySList ( ListHead, ListEntry, Lock ); } +/* + * @unimplemented + */ NDIS_STATUS EXPORT NdisMDeregisterDevice( @@ -589,6 +667,9 @@ NdisMDeregisterDevice( } +/* + * @unimplemented + */ VOID EXPORT NdisMGetDeviceProperty( @@ -609,6 +690,9 @@ NdisMGetDeviceProperty( } +/* + * @unimplemented + */ NDIS_STATUS EXPORT NdisMInitializeScatterGatherDma( @@ -628,6 +712,9 @@ NdisMInitializeScatterGatherDma( } +/* + * @unimplemented + */ NDIS_STATUS EXPORT NdisMPromoteMiniport( @@ -645,6 +732,9 @@ NdisMPromoteMiniport( } +/* + * @unimplemented + */ NDIS_STATUS EXPORT NdisMQueryAdapterInstanceName( @@ -663,6 +753,9 @@ NdisMQueryAdapterInstanceName( } +/* + * @unimplemented + */ NDIS_STATUS EXPORT NdisMRegisterDevice( @@ -685,6 +778,9 @@ NdisMRegisterDevice( } +/* + * @unimplemented + */ VOID EXPORT NdisMRegisterUnloadHandler( @@ -701,6 +797,9 @@ NdisMRegisterUnloadHandler( } +/* + * @unimplemented + */ NDIS_STATUS EXPORT NdisMRemoveMiniport( @@ -718,6 +817,9 @@ NdisMRemoveMiniport( } +/* + * @unimplemented + */ NDIS_STATUS EXPORT NdisMSetMiniportSecondary( @@ -736,43 +838,10 @@ NdisMSetMiniportSecondary( } -VOID -EXPORT -NdisOpenConfigurationKeyByIndex( - OUT PNDIS_STATUS Status, - IN NDIS_HANDLE ConfigurationHandle, - IN ULONG Index, - OUT PNDIS_STRING KeyName, - OUT PNDIS_HANDLE KeyHandle) -/* - * FUNCTION: - * ARGUMENTS: - * NOTES: - * NDIS 5.0 - */ -{ - UNIMPLEMENTED -} - -VOID -EXPORT -NdisOpenConfigurationKeyByName( - OUT PNDIS_STATUS Status, - IN NDIS_HANDLE ConfigurationHandle, - IN PNDIS_STRING SubKeyName, - OUT PNDIS_HANDLE SubKeyHandle) /* - * FUNCTION: - * ARGUMENTS: - * NOTES: - * NDIS 5.0 + * @unimplemented */ -{ - UNIMPLEMENTED -} - - NDIS_STATUS EXPORT NdisQueryAdapterInstanceName( @@ -791,6 +860,9 @@ NdisQueryAdapterInstanceName( } +/* + * @unimplemented + */ VOID EXPORT NdisQueryBufferSafe( @@ -809,6 +881,9 @@ NdisQueryBufferSafe( } +/* + * @unimplemented + */ ULONG EXPORT NdisReadPcmciaAttributeMemory( @@ -829,6 +904,9 @@ NdisReadPcmciaAttributeMemory( } +/* + * @unimplemented + */ VOID EXPORT NdisReleaseReadWriteLock( @@ -844,30 +922,9 @@ NdisReleaseReadWriteLock( UNIMPLEMENTED } - -NDIS_STATUS -EXPORT -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) /* - * FUNCTION: - * ARGUMENTS: - * NOTES: - * NDIS 5.0 + * @unimplemented */ -{ - UNIMPLEMENTED - - return NDIS_STATUS_FAILURE; -} - - ULONG EXPORT NdisWritePcmciaAttributeMemory( @@ -890,6 +947,9 @@ NdisWritePcmciaAttributeMemory( /* NDIS 5.0 extensions for intermediate drivers */ +/* + * @unimplemented + */ VOID EXPORT NdisIMAssociateMiniport( @@ -906,6 +966,9 @@ NdisIMAssociateMiniport( } +/* + * @unimplemented + */ NDIS_STATUS EXPORT NdisIMCancelInitializeDeviceInstance( @@ -924,6 +987,9 @@ NdisIMCancelInitializeDeviceInstance( } +/* + * @unimplemented + */ VOID EXPORT NdisIMCopySendCompletePerPacketInfo( @@ -940,6 +1006,9 @@ NdisIMCopySendCompletePerPacketInfo( } +/* + * @unimplemented + */ VOID EXPORT NdisIMCopySendPerPacketInfo( @@ -956,6 +1025,9 @@ NdisIMCopySendPerPacketInfo( } +/* + * @unimplemented + */ VOID EXPORT NdisIMDeregisterLayeredMiniport( @@ -971,6 +1043,9 @@ NdisIMDeregisterLayeredMiniport( } +/* + * @unimplemented + */ NDIS_HANDLE EXPORT NdisIMGetBindingContext( @@ -988,6 +1063,9 @@ NdisIMGetBindingContext( } +/* + * @unimplemented + */ NDIS_HANDLE EXPORT NdisIMGetDeviceContext( @@ -1005,6 +1083,9 @@ NdisIMGetDeviceContext( } +/* + * @unimplemented + */ NDIS_STATUS EXPORT NdisIMInitializeDeviceInstanceEx( diff --git a/drivers/net/ndis/ndis/time.c b/drivers/net/ndis/ndis/time.c index 95b0416..18c5e7f 100644 --- a/drivers/net/ndis/ndis/time.c +++ b/drivers/net/ndis/ndis/time.c @@ -10,23 +10,49 @@ #include +VOID STDCALL +MiniportTimerDpc( + PKDPC Dpc, + PVOID DeferredContext, + PVOID SystemArgument1, + PVOID SystemArgument2) +{ + PNDIS_MINIPORT_TIMER Timer; + + Timer = (PNDIS_MINIPORT_TIMER)DeferredContext; + + Timer->MiniportTimerFunction (NULL, Timer->MiniportTimerContext, NULL, NULL); +} + + +/* + * @implemented + */ VOID EXPORT NdisCancelTimer( IN PNDIS_TIMER Timer, OUT PBOOLEAN TimerCancelled) { -} + *TimerCancelled = KeCancelTimer (&Timer->Timer); +} +/* + * @implemented + */ VOID EXPORT NdisGetCurrentSystemTime ( - IN OUT PLONGLONG pSystemTime) + IN OUT PLARGE_INTEGER pSystemTime) { + KeQuerySystemTime (pSystemTime); } +/* + * @implemented + */ VOID EXPORT NdisInitializeTimer( @@ -34,18 +60,28 @@ NdisInitializeTimer( IN PNDIS_TIMER_FUNCTION TimerFunction, IN PVOID FunctionContext) { + KeInitializeTimer (&Timer->Timer); + + KeInitializeDpc (&Timer->Dpc, (PKDEFERRED_ROUTINE)TimerFunction, FunctionContext); } +/* + * @implemented + */ VOID EXPORT NdisMCancelTimer( IN PNDIS_MINIPORT_TIMER Timer, OUT PBOOLEAN TimerCancelled) { + *TimerCancelled = KeCancelTimer (&Timer->Timer); } +/* + * @implemented + */ VOID EXPORT NdisMInitializeTimer( @@ -54,33 +90,64 @@ NdisMInitializeTimer( IN PNDIS_TIMER_FUNCTION TimerFunction, IN PVOID FunctionContext) { + KeInitializeTimer (&Timer->Timer); + + KeInitializeDpc (&Timer->Dpc, MiniportTimerDpc, (PVOID) Timer); + + Timer->MiniportTimerFunction = TimerFunction; + Timer->MiniportTimerContext = FunctionContext; + Timer->Miniport = MiniportAdapterHandle; } +/* + * @implemented + */ VOID EXPORT NdisMSetPeriodicTimer( - IN PNDIS_MINIPORT_TIMER Timer, - IN UINT MillisecondsPeriod) + IN PNDIS_MINIPORT_TIMER Timer, + IN UINT MillisecondsPeriod) { + LARGE_INTEGER Timeout; + + Timeout.QuadPart = MillisecondsPeriod * -10000; + + KeSetTimerEx (&Timer->Timer, Timeout, MillisecondsPeriod, &Timer->Dpc); } +/* + * @implemented + */ VOID EXPORT NdisMSetTimer( IN PNDIS_MINIPORT_TIMER Timer, IN UINT MillisecondsToDelay) { + LARGE_INTEGER Timeout; + + Timeout.QuadPart = MillisecondsToDelay * -10000; + + KeSetTimer (&Timer->Timer, Timeout, &Timer->Dpc); } +/* + * @implemented + */ VOID EXPORT NdisSetTimer( IN PNDIS_TIMER Timer, IN UINT MillisecondsToDelay) { + LARGE_INTEGER Timeout; + + Timeout.QuadPart = MillisecondsToDelay * -10000; + + KeSetTimer (&Timer->Timer, Timeout, &Timer->Dpc); } /* EOF */ diff --git a/drivers/net/npf/.cvsignore b/drivers/net/npf/.cvsignore index d7687d4..9441e6d 100644 --- a/drivers/net/npf/.cvsignore +++ b/drivers/net/npf/.cvsignore @@ -3,3 +3,4 @@ *.o *.sym *.sys +*.map diff --git a/drivers/net/npf/bucket_lookup.c b/drivers/net/npf/bucket_lookup.c index e2c5fde..26717b6 100644 --- a/drivers/net/npf/bucket_lookup.c +++ b/drivers/net/npf/bucket_lookup.c @@ -248,4 +248,5 @@ uint32 bucket_lookup_insert(uint8 *key, TME_DATA *data, MEM_TYPE *mem_ex, struct return TME_TRUE; } -} \ No newline at end of file +} + diff --git a/drivers/net/npf/bucket_lookup.h b/drivers/net/npf/bucket_lookup.h index 512d637..e4caf2a 100644 --- a/drivers/net/npf/bucket_lookup.h +++ b/drivers/net/npf/bucket_lookup.h @@ -40,4 +40,5 @@ uint32 bucket_lookup_insert(uint8 *key, TME_DATA *data, MEM_TYPE *mem_ex, struct #define BUCKET_LOOKUP 0x00000010 uint32 bucket_lookup(uint8 *key, TME_DATA *data, MEM_TYPE *mem_ex, struct time_conv *time_ref); -#endif \ No newline at end of file +#endif + diff --git a/drivers/net/npf/dump.c b/drivers/net/npf/dump.c index 1f1b754..a567c83 100644 --- a/drivers/net/npf/dump.c +++ b/drivers/net/npf/dump.c @@ -28,8 +28,10 @@ #include #include //#define PsGetCurrentProcess() IoGetCurrentProcess() +#ifndef PsGetCurrentThread #define PsGetCurrentThread() ((PETHREAD) (KeGetCurrentThread())) #endif +#endif #include "debug.h" #include "packet.h" diff --git a/drivers/net/npf/functions.h b/drivers/net/npf/functions.h index d25c679..0ba2bfa 100644 --- a/drivers/net/npf/functions.h +++ b/drivers/net/npf/functions.h @@ -64,4 +64,5 @@ exec_fcn exec_fcn_mapper(uint32 index); #include #endif -#endif \ No newline at end of file +#endif + diff --git a/drivers/net/npf/normal_lookup.h b/drivers/net/npf/normal_lookup.h index 69e21ce..c89194f 100644 --- a/drivers/net/npf/normal_lookup.h +++ b/drivers/net/npf/normal_lookup.h @@ -42,4 +42,5 @@ uint32 normal_lut_w_insert(uint8 *key, TME_DATA *data, MEM_TYPE *mem_ex, struct uint32 normal_lut_wo_insert(uint8 *key, TME_DATA *data, MEM_TYPE *mem_ex, struct time_conv *time_ref); #define DUMMY_INSERT 1234 -#endif \ No newline at end of file +#endif + diff --git a/drivers/net/npf/packet.c b/drivers/net/npf/packet.c index 17acc0b..815ae71 100644 --- a/drivers/net/npf/packet.c +++ b/drivers/net/npf/packet.c @@ -96,7 +96,7 @@ DriverEntry( UNICODE_STRING UnicodeDeviceName; PDEVICE_OBJECT DeviceObject = NULL; PDEVICE_EXTENSION DeviceExtension = NULL; - NTSTATUS Status = STATUS_SUCCESS; + NDIS_STATUS Status = NDIS_STATUS_SUCCESS; NTSTATUS ErrorCode = STATUS_SUCCESS; NDIS_STRING ProtoName = NDIS_STRING_CONST("PacketDriver"); ULONG DevicesCreated=0; @@ -173,11 +173,11 @@ DriverEntry( NdisAllocateSpinLock(&Opened_Instances_Lock); // Set up the device driver entry points. - DriverObject->MajorFunction[IRP_MJ_CREATE] = NPF_Open; - DriverObject->MajorFunction[IRP_MJ_CLOSE] = NPF_Close; - DriverObject->MajorFunction[IRP_MJ_READ] = NPF_Read; - DriverObject->MajorFunction[IRP_MJ_WRITE] = NPF_Write; - DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = NPF_IoControl; + DriverObject->MajorFunction[IRP_MJ_CREATE] = (PDRIVER_DISPATCH)NPF_Open; + DriverObject->MajorFunction[IRP_MJ_CLOSE] = (PDRIVER_DISPATCH)NPF_Close; + DriverObject->MajorFunction[IRP_MJ_READ] = (PDRIVER_DISPATCH)NPF_Read; + DriverObject->MajorFunction[IRP_MJ_WRITE] = (PDRIVER_DISPATCH)NPF_Write; + DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = (PDRIVER_DISPATCH)NPF_IoControl; DriverObject->DriverUnload = NPF_Unload; /* diff --git a/drivers/net/npf/tcp_session.c b/drivers/net/npf/tcp_session.c index 4eb6410..3742064 100644 --- a/drivers/net/npf/tcp_session.c +++ b/drivers/net/npf/tcp_session.c @@ -280,4 +280,5 @@ uint32 tcp_session(uint8 *block, uint32 pkt_size, TME_DATA *data, MEM_TYPE *mem_ session->timestamp_block=session->last_timestamp; return TME_SUCCESS; -} \ No newline at end of file +} + diff --git a/drivers/net/npf/tcp_session.h b/drivers/net/npf/tcp_session.h index 6262e79..4faf7b7 100644 --- a/drivers/net/npf/tcp_session.h +++ b/drivers/net/npf/tcp_session.h @@ -82,4 +82,5 @@ typedef struct __tcp_data #define TCP_SESSION 0x00000800 uint32 tcp_session(uint8 *block, uint32 pkt_size, TME_DATA *data, MEM_TYPE *mem_ex, uint8 *mem_data); -#endif \ No newline at end of file +#endif + diff --git a/drivers/net/npf/tme.c b/drivers/net/npf/tme.c index 87ed7dc..1bb5e8e 100644 --- a/drivers/net/npf/tme.c +++ b/drivers/net/npf/tme.c @@ -375,4 +375,5 @@ uint32 set_autodeletion(TME_DATA *data, uint32 value) data->enable_deletion=TRUE; return TME_SUCCESS; -} \ No newline at end of file +} + diff --git a/drivers/net/npf/tme.h b/drivers/net/npf/tme.h index 4140f9f..a9c3645 100644 --- a/drivers/net/npf/tme.h +++ b/drivers/net/npf/tme.h @@ -179,4 +179,5 @@ uint32 set_autodeletion(TME_DATA *data, uint32 value); lut_fcn lut_fcn_mapper(uint32 index); exec_fcn exec_fcn_mapper(uint32 index); -#endif \ No newline at end of file +#endif + diff --git a/drivers/net/npf/win_bpf_filter.c b/drivers/net/npf/win_bpf_filter.c index 76dee6e..39b108d 100644 --- a/drivers/net/npf/win_bpf_filter.c +++ b/drivers/net/npf/win_bpf_filter.c @@ -958,4 +958,5 @@ bpf_validate(f, len,mem_ex_size) return 0; } return BPF_CLASS(f[len - 1].code) == BPF_RET; -} \ No newline at end of file +} + diff --git a/drivers/net/npf/win_bpf_filter_init.h b/drivers/net/npf/win_bpf_filter_init.h index 8b06af7..24561c7 100644 --- a/drivers/net/npf/win_bpf_filter_init.h +++ b/drivers/net/npf/win_bpf_filter_init.h @@ -28,4 +28,5 @@ uint32 bpf_filter_init(register struct bpf_insn *pc,MEM_TYPE *mem_ex, TME_CORE *tme, struct time_conv *time_ref); -#endif \ No newline at end of file +#endif + diff --git a/drivers/net/packet/.cvsignore b/drivers/net/packet/.cvsignore index d7687d4..9441e6d 100644 --- a/drivers/net/packet/.cvsignore +++ b/drivers/net/packet/.cvsignore @@ -3,3 +3,4 @@ *.o *.sym *.sys +*.map diff --git a/drivers/net/packet/bucket_lookup.c b/drivers/net/packet/bucket_lookup.c index e2c5fde..26717b6 100644 --- a/drivers/net/packet/bucket_lookup.c +++ b/drivers/net/packet/bucket_lookup.c @@ -248,4 +248,5 @@ uint32 bucket_lookup_insert(uint8 *key, TME_DATA *data, MEM_TYPE *mem_ex, struct return TME_TRUE; } -} \ No newline at end of file +} + diff --git a/drivers/net/packet/bucket_lookup.h b/drivers/net/packet/bucket_lookup.h index 512d637..e4caf2a 100644 --- a/drivers/net/packet/bucket_lookup.h +++ b/drivers/net/packet/bucket_lookup.h @@ -40,4 +40,5 @@ uint32 bucket_lookup_insert(uint8 *key, TME_DATA *data, MEM_TYPE *mem_ex, struct #define BUCKET_LOOKUP 0x00000010 uint32 bucket_lookup(uint8 *key, TME_DATA *data, MEM_TYPE *mem_ex, struct time_conv *time_ref); -#endif \ No newline at end of file +#endif + diff --git a/drivers/net/packet/dump.c b/drivers/net/packet/dump.c index 99f916b..988f561 100644 --- a/drivers/net/packet/dump.c +++ b/drivers/net/packet/dump.c @@ -28,8 +28,10 @@ #include #include //#define PsGetCurrentProcess() IoGetCurrentProcess() +#ifndef PsGetCurrentThread #define PsGetCurrentThread() ((PETHREAD) (KeGetCurrentThread())) #endif +#endif #include "debug.h" #include "packet.h" @@ -248,7 +250,7 @@ NPF_StartDump(POPEN_INSTANCE Open) THREAD_ALL_ACCESS, NULL, KernelMode, - &Open->DumpThreadObject, + (VOID **)&Open->DumpThreadObject, 0); if ( !NT_SUCCESS( ntStatus ) ) { diff --git a/drivers/net/packet/functions.c b/drivers/net/packet/functions.c index 04c7e4b..b6d4aa3 100644 --- a/drivers/net/packet/functions.c +++ b/drivers/net/packet/functions.c @@ -80,3 +80,4 @@ exec_fcn exec_fcn_mapper(uint32 index) return NULL; } + diff --git a/drivers/net/packet/functions.h b/drivers/net/packet/functions.h index d25c679..0ba2bfa 100644 --- a/drivers/net/packet/functions.h +++ b/drivers/net/packet/functions.h @@ -64,4 +64,5 @@ exec_fcn exec_fcn_mapper(uint32 index); #include #endif -#endif \ No newline at end of file +#endif + diff --git a/drivers/net/packet/normal_lookup.c b/drivers/net/packet/normal_lookup.c index ea6442f..4b5ecf6 100644 --- a/drivers/net/packet/normal_lookup.c +++ b/drivers/net/packet/normal_lookup.c @@ -189,3 +189,4 @@ uint32 normal_lut_wo_insert(uint8 *key, TME_DATA *data, MEM_TYPE *mem_ex, struct return TME_FALSE; } + diff --git a/drivers/net/packet/normal_lookup.h b/drivers/net/packet/normal_lookup.h index 69e21ce..c89194f 100644 --- a/drivers/net/packet/normal_lookup.h +++ b/drivers/net/packet/normal_lookup.h @@ -42,4 +42,5 @@ uint32 normal_lut_w_insert(uint8 *key, TME_DATA *data, MEM_TYPE *mem_ex, struct uint32 normal_lut_wo_insert(uint8 *key, TME_DATA *data, MEM_TYPE *mem_ex, struct time_conv *time_ref); #define DUMMY_INSERT 1234 -#endif \ No newline at end of file +#endif + diff --git a/drivers/net/packet/packet.c b/drivers/net/packet/packet.c index dc063f5..29b0365 100644 --- a/drivers/net/packet/packet.c +++ b/drivers/net/packet/packet.c @@ -96,7 +96,7 @@ DriverEntry( UNICODE_STRING UnicodeDeviceName; PDEVICE_OBJECT DeviceObject = NULL; PDEVICE_EXTENSION DeviceExtension = NULL; - NTSTATUS Status = STATUS_SUCCESS; + NDIS_STATUS Status = NDIS_STATUS_SUCCESS; NTSTATUS ErrorCode = STATUS_SUCCESS; NDIS_STRING ProtoName = NDIS_STRING_CONST("PacketDriver"); ULONG DevicesCreated=0; @@ -594,6 +594,7 @@ BOOLEAN createDevice(IN OUT PDRIVER_OBJECT adriverObjectP, //------------------------------------------------------------------- VOID +STDCALL_FUNC NPF_Unload(IN PDRIVER_OBJECT DriverObject) { PDEVICE_OBJECT DeviceObject; diff --git a/drivers/net/packet/packet.h b/drivers/net/packet/packet.h index a3582cc..10e484f 100644 --- a/drivers/net/packet/packet.h +++ b/drivers/net/packet/packet.h @@ -120,14 +120,14 @@ This IOCTL is used to perform an OID set operation on the NIC driver. */ -#define BIOCSETOID 2147483648 +#define BIOCSETOID 2147483648U /*! \brief IOCTL code: get an OID value This IOCTL is used to perform an OID get operation on the NIC driver. */ -#define BIOCQUERYOID 2147483652 +#define BIOCQUERYOID 2147483652U /*! \brief IOCTL code: set the name of a the file used by kernel dump mode @@ -713,6 +713,7 @@ NPF_StatusComplete(IN NDIS_HANDLE ProtocolBindingContext); service (from control panel or with a console 'net stop npf'). */ VOID +STDCALL_FUNC NPF_Unload(IN PDRIVER_OBJECT DriverObject); diff --git a/drivers/net/packet/tcp_session.c b/drivers/net/packet/tcp_session.c index 4eb6410..3742064 100644 --- a/drivers/net/packet/tcp_session.c +++ b/drivers/net/packet/tcp_session.c @@ -280,4 +280,5 @@ uint32 tcp_session(uint8 *block, uint32 pkt_size, TME_DATA *data, MEM_TYPE *mem_ session->timestamp_block=session->last_timestamp; return TME_SUCCESS; -} \ No newline at end of file +} + diff --git a/drivers/net/packet/tcp_session.h b/drivers/net/packet/tcp_session.h index 6262e79..4faf7b7 100644 --- a/drivers/net/packet/tcp_session.h +++ b/drivers/net/packet/tcp_session.h @@ -82,4 +82,5 @@ typedef struct __tcp_data #define TCP_SESSION 0x00000800 uint32 tcp_session(uint8 *block, uint32 pkt_size, TME_DATA *data, MEM_TYPE *mem_ex, uint8 *mem_data); -#endif \ No newline at end of file +#endif + diff --git a/drivers/net/packet/tme.h b/drivers/net/packet/tme.h index 4140f9f..a9c3645 100644 --- a/drivers/net/packet/tme.h +++ b/drivers/net/packet/tme.h @@ -179,4 +179,5 @@ uint32 set_autodeletion(TME_DATA *data, uint32 value); lut_fcn lut_fcn_mapper(uint32 index); exec_fcn exec_fcn_mapper(uint32 index); -#endif \ No newline at end of file +#endif + diff --git a/drivers/net/packet/win_bpf_filter.c b/drivers/net/packet/win_bpf_filter.c index 76dee6e..39b108d 100644 --- a/drivers/net/packet/win_bpf_filter.c +++ b/drivers/net/packet/win_bpf_filter.c @@ -958,4 +958,5 @@ bpf_validate(f, len,mem_ex_size) return 0; } return BPF_CLASS(f[len - 1].code) == BPF_RET; -} \ No newline at end of file +} + diff --git a/drivers/net/packet/win_bpf_filter_init.h b/drivers/net/packet/win_bpf_filter_init.h index 8b06af7..24561c7 100644 --- a/drivers/net/packet/win_bpf_filter_init.h +++ b/drivers/net/packet/win_bpf_filter_init.h @@ -28,4 +28,5 @@ uint32 bpf_filter_init(register struct bpf_insn *pc,MEM_TYPE *mem_ex, TME_CORE *tme, struct time_conv *time_ref); -#endif \ No newline at end of file +#endif + diff --git a/drivers/net/tcpip/.cvsignore b/drivers/net/tcpip/.cvsignore index 4921815..8afbf84 100644 --- a/drivers/net/tcpip/.cvsignore +++ b/drivers/net/tcpip/.cvsignore @@ -4,3 +4,4 @@ tcpip.coff *.o *.sym *.sys +*.map diff --git a/drivers/net/tcpip/datalink/.cvsignore b/drivers/net/tcpip/datalink/.cvsignore index 5761abc..ecc3f45 100644 --- a/drivers/net/tcpip/datalink/.cvsignore +++ b/drivers/net/tcpip/datalink/.cvsignore @@ -1 +1,2 @@ *.o +*.map diff --git a/drivers/net/tcpip/datalink/lan.c b/drivers/net/tcpip/datalink/lan.c index 1af32e9..10d9379 100644 --- a/drivers/net/tcpip/datalink/lan.c +++ b/drivers/net/tcpip/datalink/lan.c @@ -485,6 +485,28 @@ VOID ProtocolStatusComplete( TI_DbgPrint(DEBUG_DATALINK, ("Called.\n")); } +VOID ProtocolBindAdapter( + OUT PNDIS_STATUS Status, + IN NDIS_HANDLE BindContext, + IN PNDIS_STRING DeviceName, + IN PVOID SystemSpecific1, + IN PVOID SystemSpecific2) +/* + * FUNCTION: Called by NDIS during NdisRegisterProtocol to set up initial + * bindings, and periodically thereafer as new adapters come online + * ARGUMENTS: + * Status: Return value to NDIS + * BindContext: Handle provided by NDIS to track pending binding operations + * DeviceName: Name of the miniport device to bind to + * SystemSpecific1: Pointer to a registry path with protocol-specific configuration information + * SystemSpecific2: Unused + */ +{ + /* we get to ignore BindContext because we will never pend an operation with NDIS */ + TI_DbgPrint(DEBUG_DATALINK, ("Called.\n")); + *Status = LANRegisterAdapter(DeviceName); +} + VOID LANTransmit( PVOID Context, @@ -606,13 +628,13 @@ VOID BindAdapter( Adapter->TDPackets = NULL; for (i = 0; i < 2; i++) { Packet = AllocateTDPacket(Adapter); - PC(Packet)->Context = Adapter->TDPackets; - Adapter->TDPackets = Packet; if (!Packet) { TI_DbgPrint(MIN_TRACE, ("Insufficient resources.\n")); FreeTDPackets(Adapter); return; } + PC(Packet)->Context = Adapter->TDPackets; + Adapter->TDPackets = Packet; } /* Bind the adapter to IP layer */ @@ -634,6 +656,7 @@ VOID BindAdapter( /* FIXME: Get address from registry. For now just use a private address, eg. 10.0.0.100 */ Address = AddrBuildIPv4(0x6400000A); + // Address = AddrBuildIPv4(0x6048F2D1); // 209.242.72.96 if (!Address) { TI_DbgPrint(MIN_TRACE, ("Insufficient resources.\n")); FreeTDPackets(Adapter); @@ -698,8 +721,7 @@ VOID UnbindAdapter( NDIS_STATUS LANRegisterAdapter( - PNDIS_STRING AdapterName, - PLAN_ADAPTER *Adapter) + PNDIS_STRING AdapterName) /* * FUNCTION: Registers protocol with an NDIS adapter * ARGUMENTS: @@ -738,6 +760,7 @@ NDIS_STATUS LANRegisterAdapter( /* Initialize array with media IDs we support */ MediaArray[MEDIA_ETH] = NdisMedium802_3; + TI_DbgPrint(DEBUG_DATALINK,("opening adapter %wZ\n", AdapterName)); /* Open the adapter. */ NdisOpenAdapter(&NdisStatus, &OpenStatus, @@ -845,8 +868,6 @@ NDIS_STATUS LANRegisterAdapter( /* Convert returned link speed to bps (it is in 100bps increments) */ IF->Speed = Speed * 100L; - *Adapter = IF; - /* Add adapter to the adapter list */ ExInterlockedInsertTailList(&AdapterListHead, &IF->ListEntry, @@ -908,7 +929,7 @@ NDIS_STATUS LANUnregisterAdapter( NTSTATUS LANRegisterProtocol( - PSTRING Name) + PNDIS_STRING Name) /* * FUNCTION: Registers this protocol driver with NDIS * ARGUMENTS: @@ -930,7 +951,8 @@ NTSTATUS LANRegisterProtocol( ProtChars.MajorNdisVersion = NDIS_VERSION_MAJOR; ProtChars.MinorNdisVersion = NDIS_VERSION_MINOR; ProtChars.Name.Length = Name->Length; - ProtChars.Name.Buffer = (PVOID)Name->Buffer; + ProtChars.Name.Buffer = Name->Buffer; + ProtChars.Name.MaximumLength = Name->MaximumLength; ProtChars.OpenAdapterCompleteHandler = ProtocolOpenAdapterComplete; ProtChars.CloseAdapterCompleteHandler = ProtocolCloseAdapterComplete; ProtChars.ResetCompleteHandler = ProtocolResetComplete; @@ -941,14 +963,18 @@ NTSTATUS LANRegisterProtocol( ProtChars.ReceiveCompleteHandler = ProtocolReceiveComplete; ProtChars.StatusHandler = ProtocolStatus; ProtChars.StatusCompleteHandler = ProtocolStatusComplete; + ProtChars.BindAdapterHandler = ProtocolBindAdapter; /* Try to register protocol */ NdisRegisterProtocol(&NdisStatus, &NdisProtocolHandle, &ProtChars, - sizeof(NDIS_PROTOCOL_CHARACTERISTICS) + Name->Length); + sizeof(NDIS_PROTOCOL_CHARACTERISTICS)); if (NdisStatus != NDIS_STATUS_SUCCESS) + { + TI_DbgPrint(MID_TRACE, ("NdisRegisterProtocol failed, status 0x%x\n", NdisStatus)); return (NTSTATUS)NdisStatus; + } ProtocolRegistered = TRUE; diff --git a/drivers/net/tcpip/include/lan.h b/drivers/net/tcpip/include/lan.h index f61e84a..e52fad5 100644 --- a/drivers/net/tcpip/include/lan.h +++ b/drivers/net/tcpip/include/lan.h @@ -81,14 +81,13 @@ typedef struct LAN_ADAPTER { NDIS_STATUS LANRegisterAdapter( - PNDIS_STRING AdapterName, - PLAN_ADAPTER *Adapter); + PNDIS_STRING AdapterName); NDIS_STATUS LANUnregisterAdapter( PLAN_ADAPTER Adapter); NTSTATUS LANRegisterProtocol( - STRING *Name); + PNDIS_STRING Name); VOID LANUnregisterProtocol( VOID); diff --git a/drivers/net/tcpip/include/ticonsts.h b/drivers/net/tcpip/include/ticonsts.h index d73436c..ab0b242 100644 --- a/drivers/net/tcpip/include/ticonsts.h +++ b/drivers/net/tcpip/include/ticonsts.h @@ -8,7 +8,7 @@ #define __TICONSTS_H /* NDIS version this driver supports */ -#define NDIS_VERSION_MAJOR 3 +#define NDIS_VERSION_MAJOR 4 #define NDIS_VERSION_MINOR 0 #ifdef _NTTEST_ @@ -19,7 +19,7 @@ #define DD_RAWIP_DEVICE_NAME L"\\Device\\NTRawIp" /* For NDIS protocol registration */ -#define IP_DEVICE_NAME "\\Device\\NTIp" +#define IP_DEVICE_NAME L"\\Device\\NTIp" #else #define DD_TCP_DEVICE_NAME L"\\Device\\Tcp" #define DD_UDP_DEVICE_NAME L"\\Device\\Udp" @@ -27,7 +27,9 @@ #define DD_RAWIP_DEVICE_NAME L"\\Device\\RawIp" /* For NDIS protocol registration */ -#define IP_DEVICE_NAME "\\Device\\Ip" +/* The DDK says you have to register with the name that's regstered with SCM, e.g. tcpip */ +#define IP_DEVICE_NAME L"\\Device\\Ip" +#define TCPIP_PROTOCOL_NAME L"Tcpip" #endif /* _NTTEST_ */ /* TCP/UDP/RawIP IOCTL code definitions */ diff --git a/drivers/net/tcpip/makefile b/drivers/net/tcpip/makefile index 3150feb..dc6aba5 100644 --- a/drivers/net/tcpip/makefile +++ b/drivers/net/tcpip/makefile @@ -6,7 +6,7 @@ TARGET_TYPE = export_driver TARGET_NAME = tcpip -TARGET_CFLAGS = -I./include -DDBG +TARGET_CFLAGS = -I./include -DDBG=1 -DNDIS40 TARGET_DDKLIBS = ndis.a diff --git a/drivers/net/tcpip/network/.cvsignore b/drivers/net/tcpip/network/.cvsignore index 5761abc..ecc3f45 100644 --- a/drivers/net/tcpip/network/.cvsignore +++ b/drivers/net/tcpip/network/.cvsignore @@ -1 +1,2 @@ *.o +*.map diff --git a/drivers/net/tcpip/tcpip/.cvsignore b/drivers/net/tcpip/tcpip/.cvsignore index 5761abc..ecc3f45 100644 --- a/drivers/net/tcpip/tcpip/.cvsignore +++ b/drivers/net/tcpip/tcpip/.cvsignore @@ -1 +1,2 @@ *.o +*.map diff --git a/drivers/net/tcpip/tcpip/main.c b/drivers/net/tcpip/tcpip/main.c index dde71b9..442f29f 100644 --- a/drivers/net/tcpip/tcpip/main.c +++ b/drivers/net/tcpip/tcpip/main.c @@ -16,20 +16,8 @@ #include #include -//#define _USE_NE2000 - #ifdef DBG - -/* See debug.h for debug/trace constants */ -#ifdef _USE_NE2000 -DWORD DebugTraceLevel = MID_TRACE; -//DWORD DebugTraceLevel = (MAX_TRACE + DEBUG_DATALINK); -#else DWORD DebugTraceLevel = MIN_TRACE; -//DWORD DebugTraceLevel = MAX_TRACE; -//DWORD DebugTraceLevel = DEBUG_ULTRA; -#endif - #endif /* DBG */ PDEVICE_OBJECT TCPDeviceObject = NULL; @@ -400,12 +388,12 @@ NTSTATUS TiCleanupFileObject( NTSTATUS -#ifndef _MSC_VER -STDCALL -#endif +//#ifndef _MSC_VER +STDCALL_FUNC +//#endif TiDispatchOpenClose( - PDEVICE_OBJECT DeviceObject, - PIRP Irp) + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp) /* * FUNCTION: Main dispath routine * ARGUMENTS: @@ -714,13 +702,14 @@ DriverEntry( { NTSTATUS Status; UNICODE_STRING strDeviceName; - STRING strNdisDeviceName; + UNICODE_STRING strNdisDeviceName; NDIS_STATUS NdisStatus; - PLAN_ADAPTER Adapter; NDIS_STRING DeviceName; TI_DbgPrint(MAX_TRACE, ("Called.\n")); + /* TdiInitialize() ? */ + /* FIXME: Create symbolic links in Win32 namespace */ /* Create IP device object */ @@ -798,9 +787,11 @@ DriverEntry( TCPStartup(); /* Register protocol with NDIS */ - RtlInitString(&strNdisDeviceName, IP_DEVICE_NAME); + /* This used to be IP_DEVICE_NAME but the DDK says it has to match your entry in the SCM */ + RtlInitUnicodeString(&strNdisDeviceName, TCPIP_PROTOCOL_NAME); Status = LANRegisterProtocol(&strNdisDeviceName); if (!NT_SUCCESS(Status)) { + TI_DbgPrint(MIN_TRACE,("Failed to register protocol with NDIS; status 0x%x\n", Status)); TiWriteErrorLog( DriverObject, EVENT_TRANSPORT_REGISTER_FAILED, @@ -820,41 +811,10 @@ DriverEntry( return STATUS_INSUFFICIENT_RESOURCES; } -/* Open underlying adapter(s) we are bound to */ - - /* FIXME: Get binding information from registry */ - - /* Put your own NDIS adapter device name here */ -#ifdef _USE_NE2000 - /* ReactOS */ - NdisInitUnicodeString(&DeviceName, L"\\Device\\ne2000"); - - /* NT4 style */ - //NdisInitUnicodeString(&DeviceName, L"\\Device\\El90x1"); - - /* NT5 style */ - //NdisInitUnicodeString(&DeviceName, L"\\Device\\{56388B49-67BB-4419-A3F4-28DF190B9149}"); - - NdisStatus = LANRegisterAdapter(&DeviceName, &Adapter); - - /* Skip network adapter if it does not exist */ - if (!NT_SUCCESS(NdisStatus)) { - TI_DbgPrint(MIN_TRACE, ("Failed to intialize adapter. Status (0x%X).\n", Status)); - TiWriteErrorLog( - DriverObject, - EVENT_TRANSPORT_ADAPTER_NOT_FOUND, - TI_ERROR_DRIVERENTRY, - NdisStatus, - NULL, - 0, - NULL); - TiUnload(DriverObject); - return STATUS_DEVICE_DOES_NOT_EXIST; - } -#endif /* Setup network layer and transport layer entities */ EntityList = ExAllocatePool(NonPagedPool, sizeof(TDIEntityID) * 2); if (!NT_SUCCESS(Status)) { + TI_DbgPrint(MIN_TRACE, ("Insufficient resources.\n")); TiUnload(DriverObject); return STATUS_INSUFFICIENT_RESOURCES; } @@ -872,11 +832,11 @@ DriverEntry( TCPDeviceObject->Flags |= DO_DIRECT_IO; /* Initialize the driver object with this driver's entry points */ - DriverObject->MajorFunction[IRP_MJ_CREATE] = TiDispatchOpenClose; - DriverObject->MajorFunction[IRP_MJ_CLOSE] = TiDispatchOpenClose; - DriverObject->MajorFunction[IRP_MJ_CLEANUP] = TiDispatchOpenClose; - DriverObject->MajorFunction[IRP_MJ_INTERNAL_DEVICE_CONTROL] = TiDispatchInternal; - DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = TiDispatch; + DriverObject->MajorFunction[IRP_MJ_CREATE] = (PDRIVER_DISPATCH)TiDispatchOpenClose; + DriverObject->MajorFunction[IRP_MJ_CLOSE] = (PDRIVER_DISPATCH)TiDispatchOpenClose; + DriverObject->MajorFunction[IRP_MJ_CLEANUP] = (PDRIVER_DISPATCH)TiDispatchOpenClose; + DriverObject->MajorFunction[IRP_MJ_INTERNAL_DEVICE_CONTROL] = (PDRIVER_DISPATCH)TiDispatchInternal; + DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = (PDRIVER_DISPATCH)TiDispatch; DriverObject->DriverUnload = (PDRIVER_UNLOAD)TiUnload; diff --git a/drivers/net/tcpip/tcpip/routines.c b/drivers/net/tcpip/tcpip/routines.c index edbb297..f49daf7 100644 --- a/drivers/net/tcpip/tcpip/routines.c +++ b/drivers/net/tcpip/tcpip/routines.c @@ -137,7 +137,7 @@ __inline INT SkipToOffset( if (!Buffer) return -1; - NdisQueryBuffer(Buffer, Data, Size); + NdisQueryBuffer(Buffer, (PVOID)Data, Size); if (Offset < *Size) { ((ULONG_PTR)*Data) += Offset; @@ -203,7 +203,7 @@ UINT CopyBufferToBufferChain( if (!DstBuffer) break; - NdisQueryBuffer(DstBuffer, &DstData, &DstSize); + NdisQueryBuffer(DstBuffer, (PVOID)&DstData, &DstSize); } } @@ -262,7 +262,7 @@ UINT CopyBufferChainToBuffer( if (!SrcBuffer) break; - NdisQueryBuffer(SrcBuffer, &SrcData, &SrcSize); + NdisQueryBuffer(SrcBuffer, (PVOID)&SrcData, &SrcSize); } } @@ -335,12 +335,12 @@ UINT CopyPacketToBufferChain( TI_DbgPrint(DEBUG_BUFFER, ("DstBuffer (0x%X) DstOffset (0x%X) SrcPacket (0x%X) SrcOffset (0x%X) Length (%d)\n", DstBuffer, DstOffset, SrcPacket, SrcOffset, Length)); /* Skip DstOffset bytes in the destination buffer chain */ - NdisQueryBuffer(DstBuffer, &DstData, &DstSize); + NdisQueryBuffer(DstBuffer, (PVOID)&DstData, &DstSize); if (SkipToOffset(DstBuffer, DstOffset, &DstData, &DstSize) == -1) return 0; /* Skip SrcOffset bytes in the source packet */ - NdisGetFirstBufferFromPacket(SrcPacket, &SrcBuffer, &SrcData, &SrcSize, &Total); + NdisGetFirstBufferFromPacket(SrcPacket, &SrcBuffer, (PVOID)&SrcData, &SrcSize, &Total); if (SkipToOffset(SrcBuffer, SrcOffset, &SrcData, &SrcSize) == -1) return 0; @@ -369,7 +369,7 @@ UINT CopyPacketToBufferChain( if (!DstBuffer) break; - NdisQueryBuffer(DstBuffer, &DstData, &DstSize); + NdisQueryBuffer(DstBuffer, (PVOID)&DstData, &DstSize); } SrcSize -= Count; @@ -380,7 +380,7 @@ UINT CopyPacketToBufferChain( if (!SrcBuffer) break; - NdisQueryBuffer(SrcBuffer, &SrcData, &SrcSize); + NdisQueryBuffer(SrcBuffer, (PVOID)&SrcData, &SrcSize); } } diff --git a/drivers/net/tcpip/transport/datagram/.cvsignore b/drivers/net/tcpip/transport/datagram/.cvsignore index 5761abc..ecc3f45 100644 --- a/drivers/net/tcpip/transport/datagram/.cvsignore +++ b/drivers/net/tcpip/transport/datagram/.cvsignore @@ -1 +1,2 @@ *.o +*.map diff --git a/drivers/net/tcpip/transport/rawip/.cvsignore b/drivers/net/tcpip/transport/rawip/.cvsignore index 5761abc..ecc3f45 100644 --- a/drivers/net/tcpip/transport/rawip/.cvsignore +++ b/drivers/net/tcpip/transport/rawip/.cvsignore @@ -1 +1,2 @@ *.o +*.map diff --git a/drivers/net/tcpip/transport/tcp/.cvsignore b/drivers/net/tcpip/transport/tcp/.cvsignore index 5761abc..ecc3f45 100644 --- a/drivers/net/tcpip/transport/tcp/.cvsignore +++ b/drivers/net/tcpip/transport/tcp/.cvsignore @@ -1 +1,2 @@ *.o +*.map diff --git a/drivers/net/tcpip/transport/tcp/tcp_output.c b/drivers/net/tcpip/transport/tcp/tcp_output.c index 01e75fb..618ec90 100755 --- a/drivers/net/tcpip/transport/tcp/tcp_output.c +++ b/drivers/net/tcpip/transport/tcp/tcp_output.c @@ -1418,7 +1418,7 @@ void tcp_send_ack(struct sock *sk) tcp_transmit_skb(sk, buff); } #else - return 0; + return; #endif } diff --git a/drivers/net/tcpip/transport/udp/.cvsignore b/drivers/net/tcpip/transport/udp/.cvsignore index 5761abc..ecc3f45 100644 --- a/drivers/net/tcpip/transport/udp/.cvsignore +++ b/drivers/net/tcpip/transport/udp/.cvsignore @@ -1 +1,2 @@ *.o +*.map diff --git a/drivers/net/tdi/.cvsignore b/drivers/net/tdi/.cvsignore index 07e60d4..156cf0a 100644 --- a/drivers/net/tdi/.cvsignore +++ b/drivers/net/tdi/.cvsignore @@ -1,3 +1,4 @@ *.sym *.sys *.o +*.map diff --git a/drivers/net/tdi/cte/.cvsignore b/drivers/net/tdi/cte/.cvsignore index 5761abc..ecc3f45 100644 --- a/drivers/net/tdi/cte/.cvsignore +++ b/drivers/net/tdi/cte/.cvsignore @@ -1 +1,2 @@ *.o +*.map diff --git a/drivers/net/tdi/cte/string.c b/drivers/net/tdi/cte/string.c index 2599812..9563437 100644 --- a/drivers/net/tdi/cte/string.c +++ b/drivers/net/tdi/cte/string.c @@ -3,6 +3,9 @@ */ #include +/* + * @unimplemented + */ BOOLEAN STDCALL CTEAllocateString ( @@ -14,6 +17,9 @@ CTEAllocateString ( } +/* + * @unimplemented + */ BOOLEAN STDCALL CTEInitString ( @@ -24,5 +30,4 @@ CTEInitString ( return FALSE; } - /* EOF */ diff --git a/drivers/net/tdi/cte/stubs.c b/drivers/net/tdi/cte/stubs.c index 3602bd6..6b8e20d 100644 --- a/drivers/net/tdi/cte/stubs.c +++ b/drivers/net/tdi/cte/stubs.c @@ -4,6 +4,9 @@ #include +/* + * @unimplemented + */ NTSTATUS STDCALL CTEBlock ( @@ -14,6 +17,9 @@ CTEBlock ( } +/* + * @unimplemented + */ VOID STDCALL CTEInitEvent ( @@ -24,6 +30,9 @@ CTEInitEvent ( } +/* + * @unimplemented + */ VOID STDCALL CTEInitTimer ( @@ -33,6 +42,9 @@ CTEInitTimer ( } +/* + * @unimplemented + */ BOOLEAN STDCALL CTEInitialize ( @@ -44,6 +56,9 @@ CTEInitialize ( } +/* + * @unimplemented + */ NTSTATUS STDCALL CTELogEvent ( @@ -64,6 +79,9 @@ CTELogEvent ( } +/* + * @unimplemented + */ BOOLEAN STDCALL CTEScheduleEvent ( @@ -75,6 +93,9 @@ CTEScheduleEvent ( } +/* + * @unimplemented + */ LONG STDCALL CTESignal ( @@ -95,6 +116,9 @@ CTESignal ( } +/* + * @unimplemented + */ BOOLEAN STDCALL CTEStartTimer ( @@ -108,6 +132,9 @@ CTEStartTimer ( } +/* + * @unimplemented + */ ULONG STDCALL CTESystemUpTime ( @@ -117,5 +144,4 @@ CTESystemUpTime ( return 0; } - /* EOF */ diff --git a/drivers/net/tdi/misc/.cvsignore b/drivers/net/tdi/misc/.cvsignore index 6dd71d1..ebb3994 100644 --- a/drivers/net/tdi/misc/.cvsignore +++ b/drivers/net/tdi/misc/.cvsignore @@ -1,2 +1,3 @@ *.o *.coff +*.map diff --git a/drivers/net/tdi/tdi/.cvsignore b/drivers/net/tdi/tdi/.cvsignore index 5761abc..ecc3f45 100644 --- a/drivers/net/tdi/tdi/.cvsignore +++ b/drivers/net/tdi/tdi/.cvsignore @@ -1 +1,2 @@ *.o +*.map diff --git a/drivers/net/tdi/tdi/dereg.c b/drivers/net/tdi/tdi/dereg.c index 56bf684..9c71b2a 100644 --- a/drivers/net/tdi/tdi/dereg.c +++ b/drivers/net/tdi/tdi/dereg.c @@ -35,6 +35,9 @@ TdiDeRegister ( /* ADDRESS_CHANGE_HANDLER */ +/* + * @unimplemented + */ NTSTATUS STDCALL TdiRegisterAddressChangeHandler ( @@ -54,6 +57,9 @@ TdiRegisterAddressChangeHandler ( } +/* + * @unimplemented + */ NTSTATUS STDCALL TdiDeregisterAddressChangeHandler ( @@ -69,6 +75,9 @@ TdiDeregisterAddressChangeHandler ( /* DEVICE_OBJECT */ +/* + * @unimplemented + */ NTSTATUS STDCALL TdiRegisterDeviceObject ( @@ -87,6 +96,9 @@ TdiRegisterDeviceObject ( } +/* + * @unimplemented + */ NTSTATUS STDCALL TdiDeregisterDeviceObject ( @@ -102,6 +114,9 @@ TdiDeregisterDeviceObject ( /* NET_ADDRESS */ +/* + * @unimplemented + */ NTSTATUS STDCALL TdiRegisterNetAddress ( @@ -120,6 +135,9 @@ TdiRegisterNetAddress ( } +/* + * @unimplemented + */ NTSTATUS STDCALL TdiDeregisterNetAddress ( @@ -135,6 +153,9 @@ TdiDeregisterNetAddress ( /* NOTIFICATION_HANDLER */ +/* + * @unimplemented + */ NTSTATUS STDCALL TdiRegisterNotificationHandler ( @@ -154,6 +175,9 @@ TdiRegisterNotificationHandler ( } +/* + * @unimplemented + */ NTSTATUS STDCALL TdiDeregisterNotificationHandler ( diff --git a/drivers/net/tdi/tdi/handler.c b/drivers/net/tdi/tdi/handler.c index aa553c5..1324cfa 100644 --- a/drivers/net/tdi/tdi/handler.c +++ b/drivers/net/tdi/tdi/handler.c @@ -6,7 +6,11 @@ #include -/* ClientEventChainedReceiveDatagram */ +/* + * ClientEventChainedReceiveDatagram + * + * @unimplemented + */ NTSTATUS STDCALL TdiDefaultChainedRcvDatagramHandler ( @@ -26,7 +30,11 @@ TdiDefaultChainedRcvDatagramHandler ( } -/* ClientEventChainedReceiveExpedited */ +/* + * ClientEventChainedReceiveExpedited + * + * @unimplemented + */ NTSTATUS STDCALL TdiDefaultChainedRcvExpeditedHandler ( @@ -43,7 +51,11 @@ TdiDefaultChainedRcvExpeditedHandler ( } -/* ClientEventChainedReceive */ +/* + * ClientEventChainedReceive + * + * @unimplemented + */ NTSTATUS STDCALL TdiDefaultChainedReceiveHandler ( @@ -60,7 +72,11 @@ TdiDefaultChainedReceiveHandler ( } -/* ClientEventConnect */ +/* + * ClientEventConnect + * + * @unimplemented + */ NTSTATUS STDCALL TdiDefaultConnectHandler ( @@ -79,7 +95,11 @@ TdiDefaultConnectHandler ( } -/* ClientEventDisconnect */ +/* + * ClientEventDisconnect + * + * @unimplemented + */ NTSTATUS STDCALL TdiDefaultDisconnectHandler ( @@ -96,7 +116,11 @@ TdiDefaultDisconnectHandler ( } -/* ClientEventError */ +/* + * ClientEventError + * + * @unimplemented + */ NTSTATUS STDCALL TdiDefaultErrorHandler ( @@ -108,7 +132,11 @@ TdiDefaultErrorHandler ( } -/* ClientEventReceiveDatagram */ +/* + * ClientEventReceiveDatagram + * + * @unimplemented + */ NTSTATUS STDCALL TdiDefaultRcvDatagramHandler ( @@ -129,7 +157,11 @@ TdiDefaultRcvDatagramHandler ( } -/* ClientEventReceiveExpedited */ +/* + * ClientEventReceiveExpedited + * + * @unimplemented + */ TDI_STATUS STDCALL TdiDefaultRcvExpeditedHandler ( @@ -147,7 +179,11 @@ TdiDefaultRcvExpeditedHandler ( } -/* ClientEventReceive */ +/* + * ClientEventReceive + * + * @unimplemented + */ NTSTATUS STDCALL TdiDefaultReceiveHandler ( @@ -165,7 +201,11 @@ TdiDefaultReceiveHandler ( } -/* ClientEventSendPossible */ +/* + * ClientEventSendPossible + * + * @unimplemented + */ TDI_STATUS STDCALL TdiDefaultSendPossibleHandler ( @@ -177,5 +217,4 @@ TdiDefaultSendPossibleHandler ( return STATUS_NOT_IMPLEMENTED; } - /* EOF */ diff --git a/drivers/net/tdi/tdi/obsolete.c b/drivers/net/tdi/tdi/obsolete.c index 4d70f76..f95fcb6 100644 --- a/drivers/net/tdi/tdi/obsolete.c +++ b/drivers/net/tdi/tdi/obsolete.c @@ -4,6 +4,9 @@ #include +/* + * @unimplemented + */ VOID STDCALL TdiMapBuffer ( @@ -14,6 +17,9 @@ TdiMapBuffer ( } +/* + * @unimplemented + */ VOID STDCALL TdiUnmapBuffer ( @@ -23,5 +29,4 @@ TdiUnmapBuffer ( /* This function is obsolete */ } - /* EOF */ diff --git a/drivers/net/tdi/tdi/stubs.c b/drivers/net/tdi/tdi/stubs.c index 5b6d989..63e9ff1 100644 --- a/drivers/net/tdi/tdi/stubs.c +++ b/drivers/net/tdi/tdi/stubs.c @@ -5,6 +5,9 @@ #include #include +/* + * @unimplemented + */ VOID STDCALL TdiBuildNetbiosAddress ( @@ -16,6 +19,9 @@ TdiBuildNetbiosAddress ( } +/* + * @unimplemented + */ NTSTATUS STDCALL TdiBuildNetbiosAddressEa ( @@ -28,6 +34,9 @@ TdiBuildNetbiosAddressEa ( } +/* + * @unimplemented + */ NTSTATUS STDCALL TdiCopyBufferToMdl ( @@ -43,6 +52,9 @@ TdiCopyBufferToMdl ( } +/* + * @unimplemented + */ NTSTATUS STDCALL TdiCopyMdlToBuffer ( @@ -58,6 +70,9 @@ TdiCopyMdlToBuffer ( } +/* + * @unimplemented + */ VOID STDCALL TdiInitialize ( @@ -67,6 +82,9 @@ TdiInitialize ( } +/* + * @unimplemented + */ NTSTATUS STDCALL TdiMapUserRequest ( @@ -79,6 +97,9 @@ TdiMapUserRequest ( } +/* + * @unimplemented + */ VOID STDCALL TdiOpenNetbiosAddress ( @@ -91,6 +112,9 @@ TdiOpenNetbiosAddress ( } +/* + * @unimplemented + */ VOID STDCALL TdiReturnChainedReceives ( @@ -100,5 +124,4 @@ TdiReturnChainedReceives ( { } - /* EOF */ diff --git a/drivers/net/tditest/.cvsignore b/drivers/net/tditest/.cvsignore index b2e0f39..1239515 100644 --- a/drivers/net/tditest/.cvsignore +++ b/drivers/net/tditest/.cvsignore @@ -3,3 +3,4 @@ tditest.coff *.d *.o *.sym +*.map diff --git a/drivers/net/tditest/include/debug.h b/drivers/net/tditest/include/debug.h index ee80cc3..9b510b8 100644 --- a/drivers/net/tditest/include/debug.h +++ b/drivers/net/tditest/include/debug.h @@ -41,6 +41,8 @@ extern DWORD DebugTraceLevel; #endif /* _MSC_VER */ +/* in ndis.h now */ +#if 0 #ifdef ASSERT #undef ASSERT #endif @@ -50,7 +52,7 @@ extern DWORD DebugTraceLevel; #else /* NASSERT */ #define ASSERT(x) if (!(x)) { TDI_DbgPrint(MIN_TRACE, ("Assertion "#x" failed at %s:%d\n", __FILE__, __LINE__)); KeBugCheck(0); } #endif /* NASSERT */ - +#endif #define ASSERT_IRQL(x) ASSERT(KeGetCurrentIrql() <= (x)) #else /* DBG */ diff --git a/drivers/net/wshtcpip/.cvsignore b/drivers/net/wshtcpip/.cvsignore index d64b399..60116c7 100644 --- a/drivers/net/wshtcpip/.cvsignore +++ b/drivers/net/wshtcpip/.cvsignore @@ -8,3 +8,4 @@ temp.exp *.d *.o *.sym +*.map diff --git a/drivers/net/wshtcpip/debug.h b/drivers/net/wshtcpip/debug.h index ec9e995..15e4d9c 100644 --- a/drivers/net/wshtcpip/debug.h +++ b/drivers/net/wshtcpip/debug.h @@ -28,6 +28,8 @@ extern DWORD DebugTraceLevel; DbgPrint _x_; \ } +/* this belongs in ndis.h */ +#if 0 #ifdef ASSERT #undef ASSERT #endif @@ -37,12 +39,13 @@ extern DWORD DebugTraceLevel; #else /* NASSERT */ #define ASSERT(x) if (!(x)) { WSH_DbgPrint(MIN_TRACE, ("Assertion "#x" failed at %s:%d\n", __FILE__, __LINE__)); ExitProcess(0); } #endif /* NASSERT */ +#endif #else /* DBG */ #define WSH_DbgPrint(_t_, _x_) -#define ASSERT(x) +/*#define ASSERT(x)*/ #endif /* DBG */ diff --git a/drivers/storage/atapi/.cvsignore b/drivers/storage/atapi/.cvsignore index d604900..a6797a4 100644 --- a/drivers/storage/atapi/.cvsignore +++ b/drivers/storage/atapi/.cvsignore @@ -5,3 +5,4 @@ atapi.coff *.o *.sym *.sys +*.map diff --git a/drivers/storage/atapi/atapi.c b/drivers/storage/atapi/atapi.c index e540426..c42d750 100644 --- a/drivers/storage/atapi/atapi.c +++ b/drivers/storage/atapi/atapi.c @@ -74,12 +74,8 @@ typedef struct _ATAPI_MINIPORT_EXTENSION { IDE_DRIVE_IDENTIFY DeviceParams[2]; - BOOLEAN DevicePresent[2]; - BOOLEAN DeviceAtapi[2]; - ULONG TransferSize[2]; - BOOLEAN MultiSectorCommand[2]; - BOOLEAN DWordIo[2]; - + ULONG DeviceFlags[2]; + ULONG TransferSize[2]; ULONG CommandPortBase; ULONG ControlPortBase; @@ -93,6 +89,14 @@ typedef struct _ATAPI_MINIPORT_EXTENSION ULONG DataTransferLength; } ATAPI_MINIPORT_EXTENSION, *PATAPI_MINIPORT_EXTENSION; +/* DeviceFlags */ +#define DEVICE_PRESENT 0x00000001 +#define DEVICE_ATAPI 0x00000002 +#define DEVICE_MULTI_SECTOR_CMD 0x00000004 +#define DEVICE_DWORD_IO 0x00000008 +#define DEVICE_48BIT_ADDRESS 0x00000010 +#define DEVICE_MEDIA_STATUS 0x00000020 + typedef struct _UNIT_EXTENSION { @@ -237,10 +241,17 @@ static ULONG AtapiFlushCache(PATAPI_MINIPORT_EXTENSION DeviceExtension, PSCSI_REQUEST_BLOCK Srb); +static ULONG +AtapiTestUnitReady(PATAPI_MINIPORT_EXTENSION DeviceExtension, + PSCSI_REQUEST_BLOCK Srb); + static UCHAR AtapiErrorToScsi(PVOID DeviceExtension, PSCSI_REQUEST_BLOCK Srb); +static VOID +AtapiScsiSrbToAtapi (PSCSI_REQUEST_BLOCK Srb); + // ---------------------------------------------------------------- Inlines void @@ -830,7 +841,7 @@ AtapiStartIo(IN PVOID DeviceExtension, { case SRB_FUNCTION_EXECUTE_SCSI: DevExt->CurrentSrb = Srb; - if (DevExt->DeviceAtapi[Srb->TargetId] == TRUE) + if (DevExt->DeviceFlags[Srb->TargetId] & DEVICE_ATAPI) { Result = AtapiSendAtapiCommand(DevExt, Srb); @@ -842,6 +853,20 @@ AtapiStartIo(IN PVOID DeviceExtension, } break; + case SRB_FUNCTION_ABORT_COMMAND: + if (DevExt->CurrentSrb != NULL) + { + Result = SRB_STATUS_ABORT_FAILED; + } + else + { + Result = SRB_STATUS_SUCCESS; + } + break; + + default: + Result = SRB_STATUS_INVALID_REQUEST; + break; } Srb->SrbStatus = Result; @@ -877,13 +902,14 @@ AtapiInterrupt(IN PVOID DeviceExtension) PSCSI_REQUEST_BLOCK Srb; ULONG CommandPortBase; ULONG ControlPortBase; - UCHAR DeviceStatus; BOOLEAN IsLastBlock; BOOLEAN IsAtapi; ULONG Retries; PUCHAR TargetAddress; ULONG TransferSize; + ULONG JunkSize; + USHORT Junk; DPRINT("AtapiInterrupt() called!\n"); @@ -915,7 +941,7 @@ AtapiInterrupt(IN PVOID DeviceExtension) DPRINT("CommandPortBase: %lx ControlPortBase: %lx\n", CommandPortBase, ControlPortBase); - IsAtapi = DevExt->DeviceAtapi[Srb->TargetId]; + IsAtapi = (DevExt->DeviceFlags[Srb->TargetId] & DEVICE_ATAPI); DPRINT("IsAtapi == %s\n", (IsAtapi) ? "TRUE" : "FALSE"); IsLastBlock = FALSE; @@ -954,10 +980,16 @@ AtapiInterrupt(IN PVOID DeviceExtension) if (DevExt->DataTransferLength <= TransferSize) { - if (!IsAtapi) - { - TransferSize = DevExt->DataTransferLength; - } + JunkSize = TransferSize - DevExt->DataTransferLength; + TransferSize = DevExt->DataTransferLength; + +#ifndef NDEBUG + if (JunkSize > 0) + { + DPRINT1("Junk data: %lu bytes\n", JunkSize); + } +#endif + DevExt->DataTransferLength = 0; IsLastBlock = TRUE; } @@ -974,25 +1006,35 @@ AtapiInterrupt(IN PVOID DeviceExtension) !(IDEReadStatus(CommandPortBase) & IDE_SR_DRQ); Retries++) { - KeStallExecutionProcessor(10); + KeStallExecutionProcessor(10); } /* Copy the block of data */ - if (DevExt->DWordIo[Srb->TargetId]) - { - IDEReadBlock32(CommandPortBase, - TargetAddress, - TransferSize); - } + if (DevExt->DeviceFlags[Srb->TargetId] & DEVICE_DWORD_IO) + { + IDEReadBlock32(CommandPortBase, + TargetAddress, + TransferSize); + } else - { - IDEReadBlock(CommandPortBase, - TargetAddress, - TransferSize); - } + { + IDEReadBlock(CommandPortBase, + TargetAddress, + TransferSize); + } + /* check DRQ */ if (IsLastBlock) { + /* Read remaining junk from device */ + while (JunkSize > 0) + { + IDEReadBlock(CommandPortBase, + &Junk, + 2); + JunkSize -= 2; + } + for (Retries = 0; Retries < IDE_MAX_BUSY_RETRIES && (IDEReadStatus(CommandPortBase) & IDE_SR_BUSY); Retries++) @@ -1034,35 +1076,35 @@ AtapiInterrupt(IN PVOID DeviceExtension) /* Update DevExt data */ TransferSize = DevExt->TransferSize[Srb->TargetId]; if (DevExt->DataTransferLength < TransferSize) - { - TransferSize = DevExt->DataTransferLength; - } - + { + TransferSize = DevExt->DataTransferLength; + } + TargetAddress = DevExt->DataBuffer; DevExt->DataBuffer += TransferSize; DevExt->DataTransferLength -= TransferSize; /* Write the sector */ - if (DevExt->DWordIo[Srb->TargetId]) - { - IDEWriteBlock32(CommandPortBase, - TargetAddress, - TransferSize); - } + if (DevExt->DeviceFlags[Srb->TargetId] & DEVICE_DWORD_IO) + { + IDEWriteBlock32(CommandPortBase, + TargetAddress, + TransferSize); + } else - { - IDEWriteBlock(CommandPortBase, - TargetAddress, - TransferSize); - } + { + IDEWriteBlock(CommandPortBase, + TargetAddress, + TransferSize); + } } Srb->SrbStatus = SRB_STATUS_SUCCESS; } else { - DPRINT1("Unspecified transfer direction!\n"); - Srb->SrbStatus = SRB_STATUS_SUCCESS; // SRB_STATUS_ERROR; + DPRINT("Unspecified transfer direction!\n"); + Srb->SrbStatus = SRB_STATUS_SUCCESS; IsLastBlock = TRUE; } } @@ -1179,7 +1221,7 @@ AtapiFindDevices(PATAPI_MINIPORT_EXTENSION DeviceExtension, if (Retries >= 20000) { DPRINT("Timeout on drive %lu\n", UnitNumber); - DeviceExtension->DevicePresent[UnitNumber] = FALSE; + DeviceExtension->DeviceFlags[UnitNumber] &= ~DEVICE_PRESENT; continue; } @@ -1200,11 +1242,10 @@ AtapiFindDevices(PATAPI_MINIPORT_EXTENSION DeviceExtension, &DeviceExtension->DeviceParams[UnitNumber])) { DPRINT(" ATAPI drive found!\n"); - DeviceExtension->DevicePresent[UnitNumber] = TRUE; - DeviceExtension->DeviceAtapi[UnitNumber] = TRUE; - DeviceExtension->TransferSize[UnitNumber] = DeviceExtension->DeviceParams[UnitNumber].BytesPerSector; - DeviceExtension->MultiSectorCommand[UnitNumber] = FALSE; - DeviceExtension->DWordIo[UnitNumber] = FALSE; + DeviceExtension->DeviceFlags[UnitNumber] |= DEVICE_PRESENT; + DeviceExtension->DeviceFlags[UnitNumber] |= DEVICE_ATAPI; + DeviceExtension->TransferSize[UnitNumber] = + DeviceExtension->DeviceParams[UnitNumber].BytesPerSector; DeviceFound = TRUE; } else @@ -1221,22 +1262,22 @@ AtapiFindDevices(PATAPI_MINIPORT_EXTENSION DeviceExtension, &DeviceExtension->DeviceParams[UnitNumber])) { DPRINT(" IDE drive found!\n"); - DeviceExtension->DevicePresent[UnitNumber] = TRUE; - DeviceExtension->DeviceAtapi[UnitNumber] = FALSE; + DeviceExtension->DeviceFlags[UnitNumber] |= DEVICE_PRESENT; DeviceExtension->TransferSize[UnitNumber] = DeviceExtension->DeviceParams[UnitNumber].BytesPerSector; if ((DeviceExtension->DeviceParams[UnitNumber].RWMultImplemented & 0x8000) && (DeviceExtension->DeviceParams[UnitNumber].RWMultImplemented & 0xff) && (DeviceExtension->DeviceParams[UnitNumber].RWMultCurrent & 0x100) && (DeviceExtension->DeviceParams[UnitNumber].RWMultCurrent & 0xff)) - { - DeviceExtension->TransferSize[UnitNumber] *= (DeviceExtension->DeviceParams[UnitNumber].RWMultCurrent & 0xff); - DeviceExtension->MultiSectorCommand[UnitNumber] = TRUE; - } - else - { - DeviceExtension->MultiSectorCommand[UnitNumber] = FALSE; - } - DeviceExtension->DWordIo[UnitNumber] = DeviceExtension->DeviceParams[UnitNumber].DWordIo ? TRUE : FALSE; + { + DeviceExtension->TransferSize[UnitNumber] *= (DeviceExtension->DeviceParams[UnitNumber].RWMultCurrent & 0xff); + DeviceExtension->DeviceFlags[UnitNumber] |= DEVICE_MULTI_SECTOR_CMD; + } + + if (DeviceExtension->DeviceParams[UnitNumber].DWordIo) + { + DeviceExtension->DeviceFlags[UnitNumber] |= DEVICE_DWORD_IO; + } + DeviceFound = TRUE; } else @@ -1677,7 +1718,7 @@ AtapiSendAtapiCommand(IN PATAPI_MINIPORT_EXTENSION DeviceExtension, return(SRB_STATUS_INVALID_LUN); } - if (DeviceExtension->DevicePresent[Srb->TargetId] == FALSE) + if (!(DeviceExtension->DeviceFlags[Srb->TargetId] & DEVICE_PRESENT)) { Srb->SrbStatus = SRB_STATUS_NO_DEVICE; return(SRB_STATUS_NO_DEVICE); @@ -1771,6 +1812,16 @@ AtapiSendAtapiCommand(IN PATAPI_MINIPORT_EXTENSION DeviceExtension, ScsiPortStallExecution(10); } + /* Convert special SCSI SRBs to ATAPI format */ + switch (Srb->Cdb[0]) + { + case SCSIOP_FORMAT_UNIT: + case SCSIOP_MODE_SELECT: + case SCSIOP_MODE_SENSE: + AtapiScsiSrbToAtapi (Srb); + break; + } + CdbSize = (DeviceExtension->DeviceParams[Srb->TargetId].ConfigBits & 0x3 == 1) ? 16 : 12; DPRINT("CdbSize: %lu\n", CdbSize); @@ -1800,6 +1851,30 @@ AtapiSendIdeCommand(IN PATAPI_MINIPORT_EXTENSION DeviceExtension, Srb->TargetId, Srb->Lun); + if (Srb->PathId != 0) + { + Srb->SrbStatus = SRB_STATUS_INVALID_PATH_ID; + return(SRB_STATUS_INVALID_PATH_ID); + } + + if (Srb->TargetId > 1) + { + Srb->SrbStatus = SRB_STATUS_INVALID_TARGET_ID; + return(SRB_STATUS_INVALID_TARGET_ID); + } + + if (Srb->Lun != 0) + { + Srb->SrbStatus = SRB_STATUS_INVALID_LUN; + return(SRB_STATUS_INVALID_LUN); + } + + if (!(DeviceExtension->DeviceFlags[Srb->TargetId] & DEVICE_PRESENT)) + { + Srb->SrbStatus = SRB_STATUS_NO_DEVICE; + return(SRB_STATUS_NO_DEVICE); + } + switch (Srb->Cdb[0]) { case SCSIOP_INQUIRY: @@ -1823,8 +1898,13 @@ AtapiSendIdeCommand(IN PATAPI_MINIPORT_EXTENSION DeviceExtension, Srb); break; - case SCSIOP_MODE_SENSE: case SCSIOP_TEST_UNIT_READY: + SrbStatus = AtapiTestUnitReady(DeviceExtension, + Srb); + break; + + case SCSIOP_MODE_SENSE: + case SCSIOP_VERIFY: case SCSIOP_START_STOP_UNIT: case SCSIOP_REQUEST_SENSE: @@ -1854,30 +1934,6 @@ AtapiInquiry(PATAPI_MINIPORT_EXTENSION DeviceExtension, DPRINT("SCSIOP_INQUIRY: DeviceExtension %p TargetId: %lu\n", DeviceExtension, Srb->TargetId); - if (Srb->PathId != 0) - { - Srb->SrbStatus = SRB_STATUS_INVALID_PATH_ID; - return(SRB_STATUS_INVALID_PATH_ID); - } - - if (Srb->TargetId > 1) - { - Srb->SrbStatus = SRB_STATUS_INVALID_TARGET_ID; - return(SRB_STATUS_INVALID_TARGET_ID); - } - - if (Srb->Lun != 0) - { - Srb->SrbStatus = SRB_STATUS_INVALID_LUN; - return(SRB_STATUS_INVALID_LUN); - } - - if (DeviceExtension->DevicePresent[Srb->TargetId] == FALSE) - { - Srb->SrbStatus = SRB_STATUS_NO_DEVICE; - return(SRB_STATUS_NO_DEVICE); - } - InquiryData = Srb->DataBuffer; DeviceParams = &DeviceExtension->DeviceParams[Srb->TargetId]; @@ -1888,17 +1944,17 @@ AtapiInquiry(PATAPI_MINIPORT_EXTENSION DeviceExtension, } /* set device class */ - if (DeviceExtension->DeviceAtapi[Srb->TargetId] == FALSE) - { - /* hard-disk */ - InquiryData->DeviceType = DIRECT_ACCESS_DEVICE; - } - else + if (DeviceExtension->DeviceFlags[Srb->TargetId] & DEVICE_ATAPI) { /* get it from the ATAPI configuration word */ InquiryData->DeviceType = (DeviceParams->ConfigBits >> 8) & 0x1F; DPRINT("Device class: %u\n", InquiryData->DeviceType); } + else + { + /* hard-disk */ + InquiryData->DeviceType = DIRECT_ACCESS_DEVICE; + } DPRINT("ConfigBits: 0x%x\n", DeviceParams->ConfigBits); if (DeviceParams->ConfigBits & 0x80) @@ -1944,31 +2000,6 @@ AtapiReadCapacity(PATAPI_MINIPORT_EXTENSION DeviceExtension, ULONG LastSector; DPRINT("SCSIOP_READ_CAPACITY: TargetId: %lu\n", Srb->TargetId); - - if (Srb->PathId != 0) - { - Srb->SrbStatus = SRB_STATUS_INVALID_PATH_ID; - return(SRB_STATUS_INVALID_PATH_ID); - } - - if (Srb->TargetId > 1) - { - Srb->SrbStatus = SRB_STATUS_INVALID_TARGET_ID; - return(SRB_STATUS_INVALID_TARGET_ID); - } - - if (Srb->Lun != 0) - { - Srb->SrbStatus = SRB_STATUS_INVALID_LUN; - return(SRB_STATUS_INVALID_LUN); - } - - if (DeviceExtension->DevicePresent[Srb->TargetId] == FALSE) - { - Srb->SrbStatus = SRB_STATUS_NO_DEVICE; - return(SRB_STATUS_NO_DEVICE); - } - CapacityData = (PREAD_CAPACITY_DATA)Srb->DataBuffer; DeviceParams = &DeviceExtension->DeviceParams[Srb->TargetId]; @@ -2019,31 +2050,6 @@ AtapiReadWrite(PATAPI_MINIPORT_EXTENSION DeviceExtension, UCHAR Status; DPRINT("AtapiReadWrite() called!\n"); - - if (Srb->PathId != 0) - { - Srb->SrbStatus = SRB_STATUS_INVALID_PATH_ID; - return(SRB_STATUS_INVALID_PATH_ID); - } - - if (Srb->TargetId > 1) - { - Srb->SrbStatus = SRB_STATUS_INVALID_TARGET_ID; - return(SRB_STATUS_INVALID_TARGET_ID); - } - - if (Srb->Lun != 0) - { - Srb->SrbStatus = SRB_STATUS_INVALID_LUN; - return(SRB_STATUS_INVALID_LUN); - } - - if (DeviceExtension->DevicePresent[Srb->TargetId] == FALSE) - { - Srb->SrbStatus = SRB_STATUS_NO_DEVICE; - return(SRB_STATUS_NO_DEVICE); - } - DPRINT("SCSIOP_WRITE: TargetId: %lu\n", Srb->TargetId); @@ -2086,11 +2092,11 @@ AtapiReadWrite(PATAPI_MINIPORT_EXTENSION DeviceExtension, if (Srb->SrbFlags & SRB_FLAGS_DATA_IN) { - Command = DeviceExtension->MultiSectorCommand[Srb->TargetId] ? IDE_CMD_READ_MULTIPLE : IDE_CMD_READ; + Command = (DeviceExtension->DeviceFlags[Srb->TargetId] & DEVICE_MULTI_SECTOR_CMD) ? IDE_CMD_READ_MULTIPLE : IDE_CMD_READ; } else { - Command = DeviceExtension->MultiSectorCommand[Srb->TargetId] ? IDE_CMD_WRITE_MULTIPLE : IDE_CMD_WRITE; + Command = (DeviceExtension->DeviceFlags[Srb->TargetId] & DEVICE_MULTI_SECTOR_CMD) ? IDE_CMD_WRITE_MULTIPLE : IDE_CMD_WRITE; } if (DrvHead & IDE_DH_LBA) @@ -2205,27 +2211,27 @@ AtapiReadWrite(PATAPI_MINIPORT_EXTENSION DeviceExtension, /* Update DeviceExtension data */ TransferSize = DeviceExtension->TransferSize[Srb->TargetId]; if (DeviceExtension->DataTransferLength < TransferSize) - { - TransferSize = DeviceExtension->DataTransferLength; - } + { + TransferSize = DeviceExtension->DataTransferLength; + } TargetAddress = DeviceExtension->DataBuffer; DeviceExtension->DataBuffer += TransferSize; DeviceExtension->DataTransferLength -= TransferSize; /* Write data block */ - if (DeviceExtension->DWordIo[Srb->TargetId]) - { - IDEWriteBlock32(DeviceExtension->CommandPortBase, - TargetAddress, - TransferSize); - } + if (DeviceExtension->DeviceFlags[Srb->TargetId] & DEVICE_DWORD_IO) + { + IDEWriteBlock32(DeviceExtension->CommandPortBase, + TargetAddress, + TransferSize); + } else - { - IDEWriteBlock(DeviceExtension->CommandPortBase, - TargetAddress, - TransferSize); - } + { + IDEWriteBlock(DeviceExtension->CommandPortBase, + TargetAddress, + TransferSize); + } } DPRINT("AtapiReadWrite() done!\n"); @@ -2242,35 +2248,82 @@ AtapiFlushCache(PATAPI_MINIPORT_EXTENSION DeviceExtension, ULONG Retries; UCHAR Status; - DPRINT1("AtapiFlushCache() called!\n"); + DPRINT("AtapiFlushCache() called!\n"); + DPRINT("SCSIOP_SYNCRONIZE_CACHE: TargetId: %lu\n", + Srb->TargetId); - if (Srb->PathId != 0) + /* Wait for BUSY to clear */ + for (Retries = 0; Retries < IDE_MAX_BUSY_RETRIES; Retries++) { - Srb->SrbStatus = SRB_STATUS_INVALID_PATH_ID; - return(SRB_STATUS_INVALID_PATH_ID); + Status = IDEReadStatus(DeviceExtension->CommandPortBase); + if (!(Status & IDE_SR_BUSY)) + { + break; + } + ScsiPortStallExecution(10); } - - if (Srb->TargetId > 1) + DPRINT("Status=%02x\n", Status); + DPRINT("Waited %ld usecs for busy to clear\n", Retries * 10); + if (Retries >= IDE_MAX_BUSY_RETRIES) { - Srb->SrbStatus = SRB_STATUS_INVALID_TARGET_ID; - return(SRB_STATUS_INVALID_TARGET_ID); + DPRINT1("Drive is BUSY for too long\n"); + return(SRB_STATUS_BUSY); } - if (Srb->Lun != 0) + /* Select the desired drive */ + IDEWriteDriveHead(DeviceExtension->CommandPortBase, + IDE_DH_FIXED | (Srb->TargetId ? IDE_DH_DRV1 : 0)); + ScsiPortStallExecution(10); + + /* Issue command to drive */ + IDEWriteCommand(DeviceExtension->CommandPortBase, IDE_CMD_FLUSH_CACHE); + + /* Wait for controller ready */ + for (Retries = 0; Retries < IDE_MAX_WRITE_RETRIES; Retries++) { - Srb->SrbStatus = SRB_STATUS_INVALID_LUN; - return(SRB_STATUS_INVALID_LUN); + BYTE Status = IDEReadStatus(DeviceExtension->CommandPortBase); + if (!(Status & IDE_SR_BUSY) || (Status & IDE_SR_ERR)) + { + break; + } + KeStallExecutionProcessor(10); } - - if (DeviceExtension->DevicePresent[Srb->TargetId] == FALSE) + if (Retries >= IDE_MAX_WRITE_RETRIES) { - Srb->SrbStatus = SRB_STATUS_NO_DEVICE; - return(SRB_STATUS_NO_DEVICE); + DPRINT1("Drive is BUSY for too long after sending write command\n"); + return(SRB_STATUS_BUSY); } - DPRINT1("SCSIOP_SYNCRONIZE_CACHE: TargetId: %lu\n", + /* Indicate expecting an interrupt. */ + DeviceExtension->ExpectingInterrupt = TRUE; + + DPRINT("AtapiFlushCache() done!\n"); + + /* Wait for interrupt. */ + return(SRB_STATUS_PENDING); +} + + +static ULONG +AtapiTestUnitReady(PATAPI_MINIPORT_EXTENSION DeviceExtension, + PSCSI_REQUEST_BLOCK Srb) +{ + ULONG Retries; + UCHAR Status; + UCHAR Error; + + DPRINT1("AtapiTestUnitReady() called!\n"); + + DPRINT1("SCSIOP_TEST_UNIT_READY: TargetId: %lu\n", Srb->TargetId); + /* Return success if media status is not supported */ + if (!(DeviceExtension->DeviceFlags[Srb->TargetId] & DEVICE_MEDIA_STATUS)) + { + Srb->SrbStatus = SRB_STATUS_SUCCESS; + return(SRB_STATUS_SUCCESS); + } + /* Wait for BUSY to clear */ for (Retries = 0; Retries < IDE_MAX_BUSY_RETRIES; Retries++) { @@ -2295,12 +2348,12 @@ AtapiFlushCache(PATAPI_MINIPORT_EXTENSION DeviceExtension, ScsiPortStallExecution(10); /* Issue command to drive */ - IDEWriteCommand(DeviceExtension->CommandPortBase, IDE_CMD_FLUSH_CACHE); + IDEWriteCommand(DeviceExtension->CommandPortBase, IDE_CMD_GET_MEDIA_STATUS); /* Wait for controller ready */ for (Retries = 0; Retries < IDE_MAX_WRITE_RETRIES; Retries++) { - BYTE Status = IDEReadStatus(DeviceExtension->CommandPortBase); + Status = IDEReadStatus(DeviceExtension->CommandPortBase); if (!(Status & IDE_SR_BUSY) || (Status & IDE_SR_ERR)) { break; @@ -2313,13 +2366,29 @@ AtapiFlushCache(PATAPI_MINIPORT_EXTENSION DeviceExtension, return(SRB_STATUS_BUSY); } - /* Indicate expecting an interrupt. */ - DeviceExtension->ExpectingInterrupt = TRUE; + if (Status & IDE_SR_ERR) + { + Error = IDEReadError(DeviceExtension->CommandPortBase); + if (Error == IDE_ER_UNC) + { +CHECKPOINT1; + /* Handle write protection 'error' */ + Srb->SrbStatus = SRB_STATUS_SUCCESS; + return(SRB_STATUS_SUCCESS); + } + else + { +CHECKPOINT1; + /* Indicate expecting an interrupt. */ + DeviceExtension->ExpectingInterrupt = TRUE; + return(SRB_STATUS_PENDING); + } + } - DPRINT1("AtapiFlushCache() done!\n"); + DPRINT1("AtapiTestUnitReady() done!\n"); - /* Wait for interrupt. */ - return(SRB_STATUS_PENDING); + Srb->SrbStatus = SRB_STATUS_SUCCESS; + return(SRB_STATUS_SUCCESS); } @@ -2343,7 +2412,7 @@ AtapiErrorToScsi(PVOID DeviceExtension, ErrorReg = IDEReadError(CommandPortBase); - if (DevExt->DeviceAtapi[Srb->TargetId]) + if (DevExt->DeviceFlags[Srb->TargetId] & DEVICE_ATAPI) { switch (ErrorReg >> 4) { @@ -2449,4 +2518,56 @@ AtapiErrorToScsi(PVOID DeviceExtension, return(SrbStatus); } + +static VOID +AtapiScsiSrbToAtapi (PSCSI_REQUEST_BLOCK Srb) +{ + DPRINT("AtapiConvertScsiToAtapi() called\n"); + + Srb->CdbLength = 12; + + switch (Srb->Cdb[0]) + { + case SCSIOP_FORMAT_UNIT: + Srb->Cdb[0] = ATAPI_FORMAT_UNIT; + break; + + case SCSIOP_MODE_SELECT: + { + PATAPI_MODE_SELECT12 AtapiModeSelect; + UCHAR Length; + + AtapiModeSelect = (PATAPI_MODE_SELECT12)Srb->Cdb; + Length = ((PCDB)Srb->Cdb)->MODE_SELECT.ParameterListLength; + + RtlZeroMemory (Srb->Cdb, + MAXIMUM_CDB_SIZE); + AtapiModeSelect->OperationCode = ATAPI_MODE_SELECT; + AtapiModeSelect->PFBit = 1; + AtapiModeSelect->ParameterListLengthMsb = 0; + AtapiModeSelect->ParameterListLengthLsb = Length; + } + break; + + case SCSIOP_MODE_SENSE: + { + PATAPI_MODE_SENSE12 AtapiModeSense; + UCHAR PageCode; + UCHAR Length; + + AtapiModeSense = (PATAPI_MODE_SENSE12)Srb->Cdb; + PageCode = ((PCDB)Srb->Cdb)->MODE_SENSE.PageCode; + Length = ((PCDB)Srb->Cdb)->MODE_SENSE.AllocationLength; + + RtlZeroMemory (Srb->Cdb, + MAXIMUM_CDB_SIZE); + AtapiModeSense->OperationCode = ATAPI_MODE_SENSE; + AtapiModeSense->PageCode = PageCode; + AtapiModeSense->ParameterListLengthMsb = 0; + AtapiModeSense->ParameterListLengthLsb = Length; + } + break; + } +} + /* EOF */ diff --git a/drivers/storage/atapi/atapi.h b/drivers/storage/atapi/atapi.h index 6688b4c..f179d41 100644 --- a/drivers/storage/atapi/atapi.h +++ b/drivers/storage/atapi/atapi.h @@ -75,6 +75,7 @@ extern "C" { #define IDE_CMD_FLUSH_CACHE_EXT 0xEA #define IDE_CMD_IDENT_ATA_DRV 0xEC #define IDE_CMD_IDENT_ATAPI_DRV 0xA1 +#define IDE_CMD_GET_MEDIA_STATUS 0xDA // // Access macros for command registers @@ -179,10 +180,65 @@ typedef struct _IDE_DRIVE_IDENTIFY WORD RWMultCurrent; /*59*/ WORD TMSectorCountLo; /*60*/ WORD TMSectorCountHi; /*61*/ - WORD Reserved62[193]; /*62*/ + WORD DmaModes; /*62*/ + WORD MultiDmaModes; /*63*/ + WORD Reserved64[5]; /*64*/ + WORD Reserved69[2]; /*69*/ + WORD Reserved71[4]; /*71*/ + WORD MaxQueueDepth; /*75*/ + WORD Reserved76[4]; /*76*/ + WORD MajorRevision; /*80*/ + WORD MinorRevision; /*81*/ + WORD SupportedFeatures82; /*82*/ + WORD SupportedFeatures83; /*83*/ + WORD SupportedFeatures84; /*84*/ + WORD EnabledFeatures85; /*85*/ + WORD EnabledFeatures86; /*86*/ + WORD EnabledFeatures87; /*87*/ + WORD UltraDmaModes; /*88*/ + WORD Reserved89[11]; /*89*/ + WORD Max48BitAddress[4]; /*100*/ + WORD Reserved104[151]; /*104*/ WORD Checksum; /*255*/ } IDE_DRIVE_IDENTIFY, *PIDE_DRIVE_IDENTIFY; + +/* Special ATAPI commands */ + +#define ATAPI_FORMAT_UNIT 0x24 +#define ATAPI_MODE_SELECT 0x55 +#define ATAPI_MODE_SENSE 0x5A + + +/* Special ATAPI_MODE_SELECT (12 bytes) command block */ + +typedef struct _ATAPI_MODE_SELECT12 +{ + UCHAR OperationCode; + UCHAR Reserved1:4; + UCHAR PFBit:1; + UCHAR Reserved2:3; + UCHAR Reserved3[5]; + UCHAR ParameterListLengthMsb; + UCHAR ParameterListLengthLsb; + UCHAR Reserved4[3]; +} ATAPI_MODE_SELECT12, *PATAPI_MODE_SELECT12; + + +/* Special ATAPI_MODE_SENSE (12 bytes) command block */ + +typedef struct _ATAPI_MODE_SENSE12 +{ + UCHAR OperationCode; + UCHAR Reserved1; + UCHAR PageCode:6; + UCHAR Pc:2; + UCHAR Reserved2[4]; + UCHAR ParameterListLengthMsb; + UCHAR ParameterListLengthLsb; + UCHAR Reserved3[3]; +} ATAPI_MODE_SENSE12, *PATAPI_MODE_SENSE12; + #ifdef __cplusplus } #endif diff --git a/drivers/storage/cdrom/.cvsignore b/drivers/storage/cdrom/.cvsignore index e893a67..bea4cce 100644 --- a/drivers/storage/cdrom/.cvsignore +++ b/drivers/storage/cdrom/.cvsignore @@ -5,3 +5,4 @@ cdrom.coff *.o *.sym *.sys +*.map diff --git a/drivers/storage/cdrom/cdrom.c b/drivers/storage/cdrom/cdrom.c index 886bd42..1d5af64 100644 --- a/drivers/storage/cdrom/cdrom.c +++ b/drivers/storage/cdrom/cdrom.c @@ -44,11 +44,44 @@ #define VERSION "0.0.1" +#define SCSI_CDROM_TIMEOUT 10 /* Default timeout: 10 seconds */ + + +typedef struct _ERROR_RECOVERY_DATA6 +{ + MODE_PARAMETER_HEADER Header; + MODE_PARAMETER_BLOCK BlockDescriptor; + MODE_READ_RECOVERY_PAGE ReadRecoveryPage; +} ERROR_RECOVERY_DATA6, *PERROR_RECOVERY_DATA6; + + +typedef struct _ERROR_RECOVERY_DATA10 +{ + MODE_PARAMETER_HEADER10 Header; + MODE_PARAMETER_BLOCK BlockDescriptor; + MODE_READ_RECOVERY_PAGE ReadRecoveryPage; +} ERROR_RECOVERY_DATA10, *PERROR_RECOVERY_DATA10; + + typedef struct _CDROM_DATA { - ULONG Dummy; + BOOLEAN PlayActive; + BOOLEAN RawAccess; + USHORT XaFlags; + + union + { + ERROR_RECOVERY_DATA6 Data6; + ERROR_RECOVERY_DATA10 Data10; + } RecoveryData; + } CDROM_DATA, *PCDROM_DATA; +/* CDROM_DATA.XaFlags */ +#define XA_USE_6_BYTE 0x0001 +#define XA_USE_10_BYTE 0x0002 +#define XA_USE_READ_CD 0x0004 +#define XA_NOT_SUPPORTED 0x0008 BOOLEAN STDCALL @@ -65,6 +98,10 @@ NTSTATUS STDCALL CdromClassCheckReadWrite(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp); +static VOID +CdromClassCreateMediaChangeEvent(IN PDEVICE_EXTENSION DeviceExtension, + IN ULONG DeviceNumber); + static NTSTATUS CdromClassCreateDeviceObject(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath, @@ -80,9 +117,9 @@ NTSTATUS STDCALL CdromClassDeviceControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp); -NTSTATUS STDCALL -CdromClassShutdownFlush(IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp); +VOID STDCALL +CdromClassStartIo (IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp); VOID STDCALL CdromTimerRoutine(IN PDEVICE_OBJECT DeviceObject, @@ -129,14 +166,14 @@ DriverEntry(IN PDRIVER_OBJECT DriverObject, InitData.DeviceType = FILE_DEVICE_CD_ROM; InitData.DeviceCharacteristics = FILE_REMOVABLE_MEDIA | FILE_READ_ONLY_DEVICE; - InitData.ClassError = NULL; // CdromClassProcessError; + InitData.ClassError = NULL; InitData.ClassReadWriteVerification = CdromClassCheckReadWrite; InitData.ClassFindDeviceCallBack = CdromClassCheckDevice; InitData.ClassFindDevices = CdromClassFindDevices; InitData.ClassDeviceControl = CdromClassDeviceControl; - InitData.ClassShutdownFlush = CdromClassShutdownFlush; + InitData.ClassShutdownFlush = NULL; InitData.ClassCreateClose = NULL; - InitData.ClassStartIo = NULL; + InitData.ClassStartIo = CdromClassStartIo; return(ScsiClassInitialize(DriverObject, RegistryPath, @@ -252,13 +289,13 @@ CdromClassFindDevices(IN PDRIVER_OBJECT DriverObject, RegistryPath, PortDeviceObject, PortNumber, - ConfigInfo->CDRomCount, + ConfigInfo->CdRomCount, PortCapabilities, UnitInfo, InitializationData); if (NT_SUCCESS(Status)) { - ConfigInfo->CDRomCount++; + ConfigInfo->CdRomCount++; FoundDevice = TRUE; } } @@ -337,6 +374,27 @@ CdromClassCheckReadWrite(IN PDEVICE_OBJECT DeviceObject, } +static VOID +CdromClassCreateMediaChangeEvent(IN PDEVICE_EXTENSION DeviceExtension, + IN ULONG DeviceNumber) +{ + WCHAR NameBuffer[MAX_PATH]; + UNICODE_STRING Name; + + swprintf (NameBuffer, + L"\\Device\\MediaChangeEvent%lu", + DeviceNumber); + RtlInitUnicodeString (&Name, + NameBuffer); + + DeviceExtension->MediaChangeEvent = + IoCreateSynchronizationEvent (&Name, + &DeviceExtension->MediaChangeEventHandle); + + KeClearEvent (DeviceExtension->MediaChangeEvent); +} + + /********************************************************************** * NAME EXPORTED * CdromClassCreateDeviceObject @@ -373,13 +431,17 @@ CdromClassCreateDeviceObject(IN PDRIVER_OBJECT DriverObject, IN PSCSI_INQUIRY_DATA InquiryData, IN PCLASS_INIT_DATA InitializationData) { + PDEVICE_EXTENSION DiskDeviceExtension; /* defined in class2.h */ OBJECT_ATTRIBUTES ObjectAttributes; UNICODE_STRING UnicodeDeviceDirName; - CHAR NameBuffer[80]; PDEVICE_OBJECT DiskDeviceObject; - PDEVICE_EXTENSION DiskDeviceExtension; /* defined in class2.h */ - HANDLE Handle; + SCSI_REQUEST_BLOCK Srb; PCDROM_DATA CdromData; + CHAR NameBuffer[80]; + HANDLE Handle; + PUCHAR Buffer; + ULONG Length; + PCDB Cdb; NTSTATUS Status; DPRINT("CdromClassCreateDeviceObject() called\n"); @@ -461,6 +523,12 @@ CdromClassCreateDeviceObject(IN PDRIVER_OBJECT DriverObject, return(STATUS_INSUFFICIENT_RESOURCES); } + /* Get timeout value */ + DiskDeviceExtension->TimeOutValue = + ScsiClassQueryTimeOutRegistryValue(RegistryPath); + if (DiskDeviceExtension->TimeOutValue == 0) + DiskDeviceExtension->TimeOutValue = SCSI_CDROM_TIMEOUT; + /* Initialize lookaside list for SRBs */ ScsiClassInitializeSrbLookasideList(DiskDeviceExtension, 4); @@ -504,8 +572,108 @@ CdromClassCreateDeviceObject(IN PDRIVER_OBJECT DriverObject, DPRINT("SectorSize: %lu\n", DiskDeviceExtension->DiskGeometry->BytesPerSector); - /* FIXME: initialize media change support */ + /* Initialize media change support */ + CdromClassCreateMediaChangeEvent (DiskDeviceExtension, + DeviceNumber); + if (DiskDeviceExtension->MediaChangeEvent != NULL) + { + DPRINT("Allocated media change event!\n"); + + /* FIXME: Allocate media change IRP and SRB */ + } + + /* Use 6 byte xa commands by default */ + CdromData->XaFlags |= XA_USE_6_BYTE; + + /* Read 'error recovery page' to get additional drive capabilities */ + Length = sizeof(MODE_READ_RECOVERY_PAGE) + + MODE_BLOCK_DESC_LENGTH + + MODE_HEADER_LENGTH; + + RtlZeroMemory (&Srb, + sizeof(SCSI_REQUEST_BLOCK)); + Srb.CdbLength = 6; + Srb.TimeOutValue = DiskDeviceExtension->TimeOutValue; + + Cdb = (PCDB)Srb.Cdb; + Cdb->MODE_SENSE.OperationCode = SCSIOP_MODE_SENSE; + Cdb->MODE_SENSE.PageCode = 0x01; + Cdb->MODE_SENSE.AllocationLength = (UCHAR)Length; + + Buffer = ExAllocatePool (NonPagedPool, + sizeof(MODE_READ_RECOVERY_PAGE) + + MODE_BLOCK_DESC_LENGTH + MODE_HEADER_LENGTH10); + if (Buffer == NULL) + { + DPRINT1("Allocating recovery page buffer failed!\n"); + return STATUS_INSUFFICIENT_RESOURCES; + } + + Status = ScsiClassSendSrbSynchronous (DiskDeviceObject, + &Srb, + Buffer, + Length, + FALSE); + if (!NT_SUCCESS (Status)) + { + DPRINT("MODE_SENSE(6) failed\n"); + + /* Try the 10 byte version */ + Length = sizeof(MODE_READ_RECOVERY_PAGE) + + MODE_BLOCK_DESC_LENGTH + + MODE_HEADER_LENGTH10; + + RtlZeroMemory (&Srb, + sizeof(SCSI_REQUEST_BLOCK)); + Srb.CdbLength = 10; + Srb.TimeOutValue = DiskDeviceExtension->TimeOutValue; + + Cdb = (PCDB)Srb.Cdb; + Cdb->MODE_SENSE10.OperationCode = SCSIOP_MODE_SENSE10; + Cdb->MODE_SENSE10.PageCode = 0x01; + Cdb->MODE_SENSE10.AllocationLength[0] = (UCHAR)(Length >> 8); + Cdb->MODE_SENSE10.AllocationLength[1] = (UCHAR)(Length && 0xFF); + + Status = ScsiClassSendSrbSynchronous (DiskDeviceObject, + &Srb, + Buffer, + Length, + FALSE); + if (Status == STATUS_DATA_OVERRUN) + { + DPRINT1("Data overrun\n"); + + /* FIXME */ + } + else if (NT_SUCCESS (Status)) + { + DPRINT("Use 10 byte commands\n"); + RtlCopyMemory (&CdromData->RecoveryData.Data10.Header, + Buffer, + sizeof (ERROR_RECOVERY_DATA10)); + CdromData->RecoveryData.Data10.Header.ModeDataLength[0] = 0; + CdromData->RecoveryData.Data10.Header.ModeDataLength[1] = 0; + + CdromData->XaFlags &= XA_USE_6_BYTE; + CdromData->XaFlags |= XA_USE_10_BYTE; + } + else + { + DPRINT("XA not supported\n"); + CdromData->XaFlags |= XA_NOT_SUPPORTED; + } + } + else + { + DPRINT("Use 6 byte commands\n"); + RtlCopyMemory (&CdromData->RecoveryData.Data6.Header, + Buffer, + sizeof (ERROR_RECOVERY_DATA6)); + CdromData->RecoveryData.Data6.Header.ModeDataLength = 0; + } + ExFreePool (Buffer); + /* Initialize device timer */ IoInitializeTimer(DiskDeviceObject, CdromTimerRoutine, NULL); @@ -532,12 +700,17 @@ CdromClassCreateDeviceObject(IN PDRIVER_OBJECT DriverObject, */ static NTSTATUS -CdromClassReadTocEntry(PDEVICE_OBJECT DeviceObject, UINT TrackNo, PVOID Buffer, UINT Length) +CdromClassReadTocEntry (PDEVICE_OBJECT DeviceObject, + UINT TrackNo, + PVOID Buffer, + UINT Length) { - PDEVICE_EXTENSION DeviceExtension = (PDEVICE_EXTENSION)DeviceObject->DeviceExtension; + PDEVICE_EXTENSION DeviceExtension; SCSI_REQUEST_BLOCK Srb; PCDB Cdb; + DeviceExtension = (PDEVICE_EXTENSION)DeviceObject->DeviceExtension; + RtlZeroMemory(&Srb, sizeof(SCSI_REQUEST_BLOCK)); Srb.CdbLength = 10; Srb.TimeOutValue = DeviceExtension->TimeOutValue; @@ -559,12 +732,17 @@ CdromClassReadTocEntry(PDEVICE_OBJECT DeviceObject, UINT TrackNo, PVOID Buffer, static NTSTATUS -CdromClassReadLastSession(PDEVICE_OBJECT DeviceObject, UINT TrackNo, PVOID Buffer, UINT Length) +CdromClassReadLastSession (PDEVICE_OBJECT DeviceObject, + UINT TrackNo, + PVOID Buffer, + UINT Length) { - PDEVICE_EXTENSION DeviceExtension = (PDEVICE_EXTENSION)DeviceObject->DeviceExtension; + PDEVICE_EXTENSION DeviceExtension; SCSI_REQUEST_BLOCK Srb; PCDB Cdb; + DeviceExtension = (PDEVICE_EXTENSION)DeviceObject->DeviceExtension; + RtlZeroMemory(&Srb, sizeof(SCSI_REQUEST_BLOCK)); Srb.CdbLength = 10; Srb.TimeOutValue = DeviceExtension->TimeOutValue; @@ -745,11 +923,11 @@ CdromClassDeviceControl(IN PDEVICE_OBJECT DeviceObject, /********************************************************************** - * NAME EXPORTED - * CdromClassShutdownFlush + * NAME + * CdromClassStartIo * * DESCRIPTION: - * Answer requests for shutdown and flush calls + * Starts IRP processing. * * RUN LEVEL: * PASSIVE_LEVEL @@ -760,20 +938,80 @@ CdromClassDeviceControl(IN PDEVICE_OBJECT DeviceObject, * Standard dispatch arguments * * RETURNS: - * Status. + * None. */ - -NTSTATUS STDCALL -CdromClassShutdownFlush(IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp) +VOID STDCALL +CdromClassStartIo (IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp) { - DPRINT("CdromClassShutdownFlush() called!\n"); + PDEVICE_EXTENSION DeviceExtension; + PIO_STACK_LOCATION IrpStack; + ULONG MaximumTransferLength; + ULONG TransferPages; - Irp->IoStatus.Status = STATUS_SUCCESS; - Irp->IoStatus.Information = 0; - IoCompleteRequest(Irp, IO_NO_INCREMENT); + DPRINT("CdromClassStartIo() called!\n"); - return(STATUS_SUCCESS); + DeviceExtension = (PDEVICE_EXTENSION)DeviceObject->DeviceExtension; + IrpStack = IoGetCurrentIrpStackLocation (Irp); + + MaximumTransferLength = DeviceExtension->PortCapabilities->MaximumTransferLength; + + if (IrpStack->MajorFunction == IRP_MJ_READ) + { + DPRINT(" IRP_MJ_READ\n"); + + TransferPages = + ADDRESS_AND_SIZE_TO_SPAN_PAGES (MmGetMdlVirtualAddress(Irp->MdlAddress), + IrpStack->Parameters.Read.Length); + + /* Check transfer size */ + if ((IrpStack->Parameters.Read.Length > MaximumTransferLength) || + (TransferPages > DeviceExtension->PortCapabilities->MaximumPhysicalPages)) + { + /* Transfer size is too large - split it */ + TransferPages = + DeviceExtension->PortCapabilities->MaximumPhysicalPages - 1; + + /* Adjust transfer size */ + if (MaximumTransferLength > TransferPages * PAGE_SIZE) + MaximumTransferLength = TransferPages * PAGE_SIZE; + + if (MaximumTransferLength == 0) + MaximumTransferLength = PAGE_SIZE; + + /* Split the transfer */ + ScsiClassSplitRequest (DeviceObject, + Irp, + MaximumTransferLength); + return; + } + else + { + /* Build SRB */ + ScsiClassBuildRequest (DeviceObject, + Irp); + } + } + else if (IrpStack->MajorFunction == IRP_MJ_DEVICE_CONTROL) + { + DPRINT1(" IRP_MJ_IRP_MJ_DEVICE_CONTROL\n"); + + UNIMPLEMENTED; +#if 0 + switch (IrpStack->Parameters.DeviceIoControl.IoControlCode) + { + + default: + IoCompleteRequest (Irp, + IO_NO_INCREMENT); + return; + } +#endif + } + + /* Call the SCSI port driver */ + IoCallDriver (DeviceExtension->PortDeviceObject, + Irp); } diff --git a/drivers/storage/class2/.cvsignore b/drivers/storage/class2/.cvsignore index 18454ea..180a62e 100644 --- a/drivers/storage/class2/.cvsignore +++ b/drivers/storage/class2/.cvsignore @@ -5,3 +5,4 @@ class2.coff *.o *.sys *.sym +*.map diff --git a/drivers/storage/class2/class2.c b/drivers/storage/class2/class2.c index 76bb8d9..e08c6c2 100644 --- a/drivers/storage/class2/class2.c +++ b/drivers/storage/class2/class2.c @@ -56,10 +56,6 @@ ScsiClassReadWrite(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp); static NTSTATUS STDCALL -ScsiClassScsiDispatch(IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp); - -static NTSTATUS STDCALL ScsiClassDeviceDispatch(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp); @@ -123,6 +119,9 @@ ScsiClassDebugPrint(IN ULONG DebugPrintLevel, } +/* + * @unimplemented + */ NTSTATUS STDCALL ScsiClassAsynchronousCompletion(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, @@ -132,9 +131,12 @@ ScsiClassAsynchronousCompletion(IN PDEVICE_OBJECT DeviceObject, } +/* + * @implemented + */ VOID STDCALL -ScsiClassBuildRequest(PDEVICE_OBJECT DeviceObject, - PIRP Irp) +ScsiClassBuildRequest(IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp) { PDEVICE_EXTENSION DeviceExtension; PIO_STACK_LOCATION CurrentIrpStack; @@ -251,6 +253,9 @@ ScsiClassBuildRequest(PDEVICE_OBJECT DeviceObject, } +/* + * @implemented + */ NTSTATUS STDCALL ScsiClassClaimDevice(PDEVICE_OBJECT PortDeviceObject, PSCSI_INQUIRY_DATA LunInfo, @@ -338,6 +343,9 @@ ScsiClassClaimDevice(PDEVICE_OBJECT PortDeviceObject, } +/* + * @implemented + */ NTSTATUS STDCALL ScsiClassCreateDeviceObject(IN PDRIVER_OBJECT DriverObject, IN PCCHAR ObjectNameBuffer, @@ -407,14 +415,22 @@ ScsiClassCreateDeviceObject(IN PDRIVER_OBJECT DriverObject, } +/* + * @implemented + */ NTSTATUS STDCALL -ScsiClassDeviceControl(PDEVICE_OBJECT DeviceObject, - PIRP Irp) +ScsiClassDeviceControl(IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp) { PDEVICE_EXTENSION DeviceExtension; + PIO_STACK_LOCATION NextStack; PIO_STACK_LOCATION Stack; ULONG IoControlCode; + ULONG InputBufferLength; ULONG OutputBufferLength; + ULONG ModifiedControlCode; + PSCSI_REQUEST_BLOCK Srb; + PCDB Cdb; DPRINT("ScsiClassDeviceControl() called\n"); @@ -422,8 +438,34 @@ ScsiClassDeviceControl(PDEVICE_OBJECT DeviceObject, Stack = IoGetCurrentIrpStackLocation(Irp); IoControlCode = Stack->Parameters.DeviceIoControl.IoControlCode; + InputBufferLength = Stack->Parameters.DeviceIoControl.InputBufferLength; OutputBufferLength = Stack->Parameters.DeviceIoControl.OutputBufferLength; + if (IoControlCode == IOCTL_SCSI_GET_DUMP_POINTERS) + { + PDUMP_POINTERS DumpPointers; + + if (OutputBufferLength < sizeof(DUMP_POINTERS)) + { + Irp->IoStatus.Information = 0; + Irp->IoStatus.Status = STATUS_BUFFER_TOO_SMALL; + IoCompleteRequest(Irp, IO_NO_INCREMENT); + + return(STATUS_BUFFER_TOO_SMALL); + } + DumpPointers = (PDUMP_POINTERS)Irp->AssociatedIrp.SystemBuffer; + + /* Initialize next stack location for call to the port driver */ + NextStack = IoGetNextIrpStackLocation(Irp); + + NextStack->Parameters = Stack->Parameters; + NextStack->MajorFunction = Stack->MajorFunction; + NextStack->MinorFunction = Stack->MinorFunction; + + /* Call port driver */ + return(IoCallDriver(DeviceExtension->PortDeviceObject, + Irp)); + } if (IoControlCode == IOCTL_SCSI_GET_ADDRESS) { PSCSI_ADDRESS ScsiAddress; @@ -454,17 +496,87 @@ ScsiClassDeviceControl(PDEVICE_OBJECT DeviceObject, if (IoControlCode == IOCTL_SCSI_PASS_THROUGH || IoControlCode == IOCTL_SCSI_PASS_THROUGH_DIRECT) { - DPRINT1("Fixme: IOCTL_SCSI_PASS_THROUGH/IOCTL_SCSI_PASS_THROUGH_DIRECT\n"); + PSCSI_PASS_THROUGH ScsiPassThrough; + DPRINT("IOCTL_SCSI_PASS_THROUGH/IOCTL_SCSI_PASS_THROUGH_DIRECT\n"); - Irp->IoStatus.Information = 0; - Irp->IoStatus.Status = STATUS_UNSUCCESSFUL; - IoCompleteRequest(Irp, IO_NO_INCREMENT); + /* Check input size */ + if (InputBufferLength < sizeof(SCSI_PASS_THROUGH)) + { + Irp->IoStatus.Information = 0; + Irp->IoStatus.Status = STATUS_INVALID_PARAMETER; + IoCompleteRequest(Irp, IO_NO_INCREMENT); + return(STATUS_INVALID_PARAMETER); + } + + /* Initialize next stack location for call to the port driver */ + NextStack = IoGetNextIrpStackLocation(Irp); + + ScsiPassThrough = Irp->AssociatedIrp.SystemBuffer; + ScsiPassThrough->PathId = DeviceExtension->PathId; + ScsiPassThrough->TargetId = DeviceExtension->TargetId; + ScsiPassThrough->Lun = DeviceExtension->Lun; + ScsiPassThrough->Cdb[1] |= DeviceExtension->Lun << 5; - return(STATUS_UNSUCCESSFUL); + NextStack->Parameters = Stack->Parameters; + NextStack->MajorFunction = Stack->MajorFunction; + NextStack->MinorFunction = Stack->MinorFunction; + + /* Call port driver */ + return(IoCallDriver(DeviceExtension->PortDeviceObject, + Irp)); + } + + /* Allocate an SRB */ + Srb = ExAllocatePool (NonPagedPool, + sizeof(SCSI_REQUEST_BLOCK)); + if (Srb == NULL) + { + Irp->IoStatus.Information = 0; + Irp->IoStatus.Status = STATUS_INSUFFICIENT_RESOURCES; + IoCompleteRequest(Irp, + IO_NO_INCREMENT); + return(STATUS_INSUFFICIENT_RESOURCES); } - DPRINT1("Fixme: unknown device io control code\n"); + /* Initialize the SRB */ + RtlZeroMemory(Srb, + sizeof(SCSI_REQUEST_BLOCK)); + Cdb = (PCDB)Srb->Cdb; + + ModifiedControlCode = (IoControlCode & 0x0000FFFF) | (IOCTL_DISK_BASE << 16); + switch (ModifiedControlCode) + { + case IOCTL_DISK_CHECK_VERIFY: + DPRINT("IOCTL_DISK_CHECK_VERIFY\n"); + + /* Initialize SRB operation */ + Srb->CdbLength = 6; + Srb->TimeOutValue = DeviceExtension->TimeOutValue; + Cdb->CDB6GENERIC.OperationCode = SCSIOP_TEST_UNIT_READY; + + return(ScsiClassSendSrbAsynchronous(DeviceObject, + Srb, + Irp, + NULL, + 0, + FALSE)); + + default: + DPRINT1("Unknown device io control code %lx\n", + ModifiedControlCode); + ExFreePool(Srb); + + /* Pass the IOCTL down to the port driver */ + NextStack = IoGetNextIrpStackLocation(Irp); + NextStack->Parameters = Stack->Parameters; + NextStack->MajorFunction = Stack->MajorFunction; + NextStack->MinorFunction = Stack->MinorFunction; + + /* Call port driver */ + return(IoCallDriver(DeviceExtension->PortDeviceObject, + Irp)); + } Irp->IoStatus.Information = 0; Irp->IoStatus.Status = STATUS_UNSUCCESSFUL; @@ -474,19 +586,64 @@ ScsiClassDeviceControl(PDEVICE_OBJECT DeviceObject, } +/* + * @implemented + */ PVOID STDCALL -ScsiClassFindModePage(PCHAR ModeSenseBuffer, - ULONG Length, - UCHAR PageMode, - BOOLEAN Use6Byte) +ScsiClassFindModePage(IN PCHAR ModeSenseBuffer, + IN ULONG Length, + IN UCHAR PageMode, + IN BOOLEAN Use6Byte) { - UNIMPLEMENTED; + ULONG DescriptorLength; + ULONG HeaderLength; + PCHAR End; + PCHAR Ptr; + + DPRINT("ScsiClassFindModePage() called\n"); + + /* Get header length */ + HeaderLength = (Use6Byte) ? sizeof(MODE_PARAMETER_HEADER) : sizeof(MODE_PARAMETER_HEADER10); + + /* Check header length */ + if (Length < HeaderLength) + return NULL; + + /* Get descriptor length */ + if (Use6Byte == TRUE) + { + DescriptorLength = ((PMODE_PARAMETER_HEADER)ModeSenseBuffer)->BlockDescriptorLength; + } + else + { + DescriptorLength = ((PMODE_PARAMETER_HEADER10)ModeSenseBuffer)->BlockDescriptorLength[1]; + } + + /* Set page pointers */ + Ptr = ModeSenseBuffer + HeaderLength + DescriptorLength; + End = ModeSenseBuffer + Length; + + /* Search for page */ + while (Ptr < End) + { + /* Check page code */ + if (((PMODE_DISCONNECT_PAGE)Ptr)->PageCode == PageMode) + return Ptr; + + /* Skip to next page */ + Ptr += ((PMODE_DISCONNECT_PAGE)Ptr)->PageLength; + } + + return NULL; } +/* + * @implemented + */ ULONG STDCALL -ScsiClassFindUnclaimedDevices(PCLASS_INIT_DATA InitializationData, - PSCSI_ADAPTER_BUS_INFO AdapterInformation) +ScsiClassFindUnclaimedDevices(IN PCLASS_INIT_DATA InitializationData, + IN PSCSI_ADAPTER_BUS_INFO AdapterInformation) { PSCSI_INQUIRY_DATA UnitInfo; PINQUIRYDATA InquiryData; @@ -528,9 +685,12 @@ ScsiClassFindUnclaimedDevices(PCLASS_INIT_DATA InitializationData, } +/* + * @implemented + */ NTSTATUS STDCALL -ScsiClassGetCapabilities(PDEVICE_OBJECT PortDeviceObject, - PIO_SCSI_CAPABILITIES *PortCapabilities) +ScsiClassGetCapabilities(IN PDEVICE_OBJECT PortDeviceObject, + OUT PIO_SCSI_CAPABILITIES *PortCapabilities) { IO_STATUS_BLOCK IoStatusBlock; NTSTATUS Status; @@ -573,9 +733,12 @@ ScsiClassGetCapabilities(PDEVICE_OBJECT PortDeviceObject, } +/* + * @implemented + */ NTSTATUS STDCALL -ScsiClassGetInquiryData(PDEVICE_OBJECT PortDeviceObject, - PSCSI_ADAPTER_BUS_INFO *ConfigInfo) +ScsiClassGetInquiryData(IN PDEVICE_OBJECT PortDeviceObject, + IN PSCSI_ADAPTER_BUS_INFO *ConfigInfo) { PSCSI_ADAPTER_BUS_INFO Buffer; IO_STATUS_BLOCK IoStatusBlock; @@ -639,10 +802,13 @@ ScsiClassGetInquiryData(PDEVICE_OBJECT PortDeviceObject, } +/* + * @implemented + */ ULONG STDCALL -ScsiClassInitialize(PVOID Argument1, - PVOID Argument2, - PCLASS_INIT_DATA InitializationData) +ScsiClassInitialize(IN PVOID Argument1, + IN PVOID Argument2, + IN PCLASS_INIT_DATA InitializationData) { PCONFIGURATION_INFORMATION ConfigInfo; PDRIVER_OBJECT DriverObject = Argument1; @@ -660,7 +826,7 @@ ScsiClassInitialize(PVOID Argument1, DriverObject->MajorFunction[IRP_MJ_CLOSE] = ScsiClassCreateClose; DriverObject->MajorFunction[IRP_MJ_READ] = ScsiClassReadWrite; DriverObject->MajorFunction[IRP_MJ_WRITE] = ScsiClassReadWrite; - DriverObject->MajorFunction[IRP_MJ_SCSI] = ScsiClassScsiDispatch; + DriverObject->MajorFunction[IRP_MJ_SCSI] = ScsiClassInternalIoControl; DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = ScsiClassDeviceDispatch; DriverObject->MajorFunction[IRP_MJ_SHUTDOWN] = ScsiClassShutdownFlush; DriverObject->MajorFunction[IRP_MJ_FLUSH_BUFFERS] = ScsiClassShutdownFlush; @@ -732,11 +898,12 @@ ScsiClassInitialize(PVOID Argument1, * * RETURN VALUE * None. + * + * @implemented */ - VOID STDCALL -ScsiClassInitializeSrbLookasideList(PDEVICE_EXTENSION DeviceExtension, - ULONG NumberElements) +ScsiClassInitializeSrbLookasideList(IN PDEVICE_EXTENSION DeviceExtension, + IN ULONG NumberElements) { ExInitializeNPagedLookasideList(&DeviceExtension->SrbLookasideListHead, NULL, @@ -748,30 +915,47 @@ ScsiClassInitializeSrbLookasideList(PDEVICE_EXTENSION DeviceExtension, } +/* + * @unimplemented + */ NTSTATUS STDCALL -ScsiClassInternalIoControl(PDEVICE_OBJECT DeviceObject, - PIRP Irp) +ScsiClassInternalIoControl(IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp) { - UNIMPLEMENTED; + DPRINT1("ScsiClassInternalIoContol() called\n"); + + Irp->IoStatus.Status = STATUS_SUCCESS; + Irp->IoStatus.Information = 0; + IoCompleteRequest(Irp, IO_NO_INCREMENT); + + return(STATUS_SUCCESS); } +/* + * @implemented + */ BOOLEAN STDCALL -ScsiClassInterpretSenseInfo(PDEVICE_OBJECT DeviceObject, - PSCSI_REQUEST_BLOCK Srb, - UCHAR MajorFunctionCode, - ULONG IoDeviceCode, - ULONG RetryCount, - NTSTATUS *Status) +ScsiClassInterpretSenseInfo(IN PDEVICE_OBJECT DeviceObject, + IN PSCSI_REQUEST_BLOCK Srb, + IN UCHAR MajorFunctionCode, + IN ULONG IoDeviceCode, + IN ULONG RetryCount, + OUT NTSTATUS *Status) { PDEVICE_EXTENSION DeviceExtension; +#if 0 + PIO_ERROR_LOG_PACKET LogPacket; +#endif PSENSE_DATA SenseData; + NTSTATUS LogStatus; + BOOLEAN LogError; BOOLEAN Retry; DPRINT("ScsiClassInterpretSenseInfo() called\n"); DPRINT("Srb->SrbStatus %lx\n", Srb->SrbStatus); - + if (SRB_STATUS(Srb->SrbStatus) == SRB_STATUS_PENDING) { *Status = STATUS_SUCCESS; @@ -780,6 +964,7 @@ ScsiClassInterpretSenseInfo(PDEVICE_OBJECT DeviceObject, DeviceExtension = DeviceObject->DeviceExtension; SenseData = Srb->SenseInfoBuffer; + LogError = FALSE; Retry = TRUE; if ((Srb->SrbStatus & SRB_STATUS_AUTOSENSE_VALID) && @@ -793,11 +978,98 @@ ScsiClassInterpretSenseInfo(PDEVICE_OBJECT DeviceObject, switch (SenseData->SenseKey & 0xf) { - /* FIXME: add more sense key codes */ + case SCSI_SENSE_NO_SENSE: + DPRINT("SCSI_SENSE_NO_SENSE\n"); + if (SenseData->IncorrectLength) + { + DPRINT("Incorrect block length\n"); + *Status = STATUS_INVALID_BLOCK_LENGTH; + Retry = FALSE; + } + else + { + DPRINT("Unspecified error\n"); + *Status = STATUS_IO_DEVICE_ERROR; + Retry = FALSE; + } + break; + + case SCSI_SENSE_RECOVERED_ERROR: + DPRINT("SCSI_SENSE_RECOVERED_ERROR\n"); + *Status = STATUS_SUCCESS; + Retry = FALSE; + break; case SCSI_SENSE_NOT_READY: DPRINT("SCSI_SENSE_NOT_READY\n"); *Status = STATUS_DEVICE_NOT_READY; + switch (SenseData->AdditionalSenseCode) + { + case SCSI_ADSENSE_LUN_NOT_READY: + DPRINT("SCSI_ADSENSE_LUN_NOT_READY\n"); + break; + + case SCSI_ADSENSE_NO_MEDIA_IN_DEVICE: + DPRINT("SCSI_ADSENSE_NO_MEDIA_IN_DEVICE\n"); + *Status = STATUS_NO_MEDIA_IN_DEVICE; + Retry = FALSE; + break; + } + break; + + case SCSI_SENSE_MEDIUM_ERROR: + DPRINT("SCSI_SENSE_MEDIUM_ERROR\n"); + *Status = STATUS_DEVICE_DATA_ERROR; + Retry = FALSE; + break; + + case SCSI_SENSE_HARDWARE_ERROR: + DPRINT("SCSI_SENSE_HARDWARE_ERROR\n"); + *Status = STATUS_IO_DEVICE_ERROR; + break; + + case SCSI_SENSE_ILLEGAL_REQUEST: + DPRINT("SCSI_SENSE_ILLEGAL_REQUEST\n"); + *Status = STATUS_INVALID_DEVICE_REQUEST; + switch (SenseData->AdditionalSenseCode) + { + case SCSI_ADSENSE_ILLEGAL_COMMAND: + DPRINT("SCSI_ADSENSE_ILLEGAL_COMMAND\n"); + Retry = FALSE; + break; + + case SCSI_ADSENSE_ILLEGAL_BLOCK: + DPRINT("SCSI_ADSENSE_ILLEGAL_BLOCK\n"); + *Status = STATUS_NONEXISTENT_SECTOR; + Retry = FALSE; + break; + + case SCSI_ADSENSE_INVALID_LUN: + DPRINT("SCSI_ADSENSE_INVALID_LUN\n"); + *Status = STATUS_NO_SUCH_DEVICE; + Retry = FALSE; + break; + + case SCSI_ADSENSE_MUSIC_AREA: + DPRINT("SCSI_ADSENSE_MUSIC_AREA\n"); + Retry = FALSE; + break; + + case SCSI_ADSENSE_DATA_AREA: + DPRINT("SCSI_ADSENSE_DATA_AREA\n"); + Retry = FALSE; + break; + + case SCSI_ADSENSE_VOLUME_OVERFLOW: + DPRINT("SCSI_ADSENSE_VOLUME_OVERFLOW\n"); + Retry = FALSE; + break; + + case SCSI_ADSENSE_INVALID_CDB: + DPRINT("SCSI_ADSENSE_INVALID_CDB\n"); + Retry = FALSE; + break; + } break; case SCSI_SENSE_UNIT_ATTENTION: @@ -815,12 +1087,16 @@ ScsiClassInterpretSenseInfo(PDEVICE_OBJECT DeviceObject, } break; - case SCSI_SENSE_ILLEGAL_REQUEST: - DPRINT("SCSI_SENSE_ILLEGAL_REQUEST\n"); - *Status = STATUS_INVALID_DEVICE_REQUEST; + case SCSI_SENSE_DATA_PROTECT: + DPRINT("SCSI_SENSE_DATA_PROTECT\n"); + *Status = STATUS_MEDIA_WRITE_PROTECTED; Retry = FALSE; break; + case SCSI_SENSE_ABORTED_COMMAND: + DPRINT("SCSI_SENSE_ABORTED_COMMAND\n"); + *Status = STATUS_IO_DEVICE_ERROR; + break; default: DPRINT1("SCSI error (sense key: %x)\n", @@ -858,6 +1134,7 @@ ScsiClassInterpretSenseInfo(PDEVICE_OBJECT DeviceObject, default: DPRINT1("SCSI error (SRB status: %x)\n", SRB_STATUS(Srb->SrbStatus)); + LogError = TRUE; *Status = STATUS_IO_DEVICE_ERROR; break; } @@ -872,18 +1149,57 @@ ScsiClassInterpretSenseInfo(PDEVICE_OBJECT DeviceObject, &Retry); } - /* FIXME: log severe errors */ + if (LogError == TRUE) + { +#if 0 + /* Allocate error packet */ + LogPacket = IoAllocateErrorLogEntry (DeviceObject, + sizeof(IO_ERROR_LOG_PACKET) + + 5 * sizeof(ULONG)); + if (LogPacket == NULL) + { + DPRINT1 ("Failed to allocate a log packet!\n"); + return Retry; + } + + /* Initialize error packet */ + LogPacket->MajorFunctionCode = MajorFunctionCode; + LogPacket->RetryCount = (UCHAR)RetryCount; + LogPacket->DumpDataSize = 6 * sizeof(ULONG); + LogPacket->ErrorCode = 0; /* FIXME */ + LogPacket->FinalStatus = *Status; + LogPacket->IoControlCode = IoDeviceCode; + LogPacket->DeviceOffset.QuadPart = 0; /* FIXME */ + LogPacket->DumpData[0] = Srb->PathId; + LogPacket->DumpData[1] = Srb->TargetId; + LogPacket->DumpData[2] = Srb->Lun; + LogPacket->DumpData[3] = 0; + LogPacket->DumpData[4] = (Srb->SrbStatus << 8) | Srb->ScsiStatus; + if (SenseData != NULL) + { + LogPacket->DumpData[5] = (SenseData->SenseKey << 16) | + (SenseData->AdditionalSenseCode << 8) | + SenseData->AdditionalSenseCodeQualifier; + } + + /* Write error packet */ + IoWriteErrorLogEntry (LogPacket); +#endif + } DPRINT("ScsiClassInterpretSenseInfo() done\n"); - return(Retry); + return Retry; } +/* + * @implemented + */ NTSTATUS STDCALL -ScsiClassIoComplete(PDEVICE_OBJECT DeviceObject, - PIRP Irp, - PVOID Context) +ScsiClassIoComplete(IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp, + IN PVOID Context) { PDEVICE_EXTENSION DeviceExtension; PIO_STACK_LOCATION IrpStack; @@ -897,11 +1213,13 @@ ScsiClassIoComplete(PDEVICE_OBJECT DeviceObject, DeviceExtension = DeviceObject->DeviceExtension; IrpStack = IoGetCurrentIrpStackLocation(Irp); - - //BUGBUG -> Srb = IrpStack->Parameters.Scsi.Srb; - //Must pass Srb as Context arg!! See comment about Completion routines in - //IofCallDriver for more info. - + + /* + * BUGBUG -> Srb = IrpStack->Parameters.Scsi.Srb; + * Must pass Srb as Context arg!! See comment about Completion routines in + * IofCallDriver for more info. + */ + Srb = (PSCSI_REQUEST_BLOCK)Context; DPRINT("Srb %p\n", Srb); @@ -923,11 +1241,10 @@ ScsiClassIoComplete(PDEVICE_OBJECT DeviceObject, { ((ULONG)IrpStack->Parameters.Others.Argument4)--; - ScsiClassRetryRequest( - DeviceObject, - Irp, - Srb, - FALSE); + ScsiClassRetryRequest(DeviceObject, + Irp, + Srb, + FALSE); return(STATUS_MORE_PROCESSING_REQUIRED); } @@ -963,10 +1280,13 @@ ScsiClassIoComplete(PDEVICE_OBJECT DeviceObject, } +/* + * @implemented + */ NTSTATUS STDCALL -ScsiClassIoCompleteAssociated(PDEVICE_OBJECT DeviceObject, - PIRP Irp, - PVOID Context) +ScsiClassIoCompleteAssociated(IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp, + IN PVOID Context) { PDEVICE_EXTENSION DeviceExtension; PIO_STACK_LOCATION IrpStack; @@ -984,9 +1304,11 @@ ScsiClassIoCompleteAssociated(PDEVICE_OBJECT DeviceObject, IrpStack = IoGetCurrentIrpStackLocation(Irp); - //BUGBUG -> Srb = Srb = IrpStack->Parameters.Scsi.Srb; - //Must pass Srb as Context arg!! See comment about Completion routines in - //IofCallDriver for more info. + /* + * BUGBUG -> Srb = Srb = IrpStack->Parameters.Scsi.Srb; + * Must pass Srb as Context arg!! See comment about Completion routines in + * IofCallDriver for more info. + */ Srb = (PSCSI_REQUEST_BLOCK)Context; @@ -1011,11 +1333,10 @@ ScsiClassIoCompleteAssociated(PDEVICE_OBJECT DeviceObject, { ((ULONG)IrpStack->Parameters.Others.Argument4)--; - ScsiClassRetryRequest( - DeviceObject, - Irp, - Srb, - TRUE); + ScsiClassRetryRequest(DeviceObject, + Irp, + Srb, + TRUE); return(STATUS_MORE_PROCESSING_REQUIRED); } @@ -1063,23 +1384,143 @@ ScsiClassIoCompleteAssociated(PDEVICE_OBJECT DeviceObject, } +/* + * @implemented + */ ULONG STDCALL -ScsiClassModeSense(PDEVICE_OBJECT DeviceObject, - CHAR ModeSenseBuffer, - ULONG Length, - UCHAR PageMode) +ScsiClassModeSense(IN PDEVICE_OBJECT DeviceObject, + IN PCHAR ModeSenseBuffer, + IN ULONG Length, + IN UCHAR PageMode) { - UNIMPLEMENTED; + PDEVICE_EXTENSION DeviceExtension; + SCSI_REQUEST_BLOCK Srb; + ULONG RetryCount; + PCDB Cdb; + NTSTATUS Status; + + DPRINT("ScsiClassModeSense() called\n"); + + DeviceExtension = (PDEVICE_EXTENSION)DeviceObject->DeviceExtension; + RetryCount = 1; + + /* Initialize the SRB */ + RtlZeroMemory (&Srb, + sizeof(SCSI_REQUEST_BLOCK)); + Srb.CdbLength = 6; + Srb.TimeOutValue = DeviceExtension->TimeOutValue; + + /* Initialize the CDB */ + Cdb = (PCDB)&Srb.Cdb; + Cdb->MODE_SENSE.OperationCode = SCSIOP_MODE_SENSE; + Cdb->MODE_SENSE.PageCode = PageMode; + Cdb->MODE_SENSE.AllocationLength = (UCHAR)Length; + +TryAgain: + Status = ScsiClassSendSrbSynchronous (DeviceObject, + &Srb, + ModeSenseBuffer, + Length, + FALSE); + if (Status == STATUS_VERIFY_REQUIRED) + { + if (RetryCount != 0) + { + RetryCount--; + goto TryAgain; + } + } + else if (SRB_STATUS(Srb.SrbStatus) == SRB_STATUS_DATA_OVERRUN) + { + Status = STATUS_SUCCESS; + } + + if (!NT_SUCCESS(Status)) + { + return 0; + } + + return Srb.DataTransferLength; } +/* + * @implemented + */ ULONG STDCALL ScsiClassQueryTimeOutRegistryValue(IN PUNICODE_STRING RegistryPath) { - UNIMPLEMENTED; + PRTL_QUERY_REGISTRY_TABLE Table; + ULONG TimeOutValue; + ULONG ZeroTimeOut; + ULONG Size; + PWSTR Path; + NTSTATUS Status; + + if (RegistryPath == NULL) + { + return 0; + } + + TimeOutValue = 0; + ZeroTimeOut = 0; + + /* Allocate zero-terminated path string */ + Size = RegistryPath->Length + sizeof(WCHAR); + Path = (PWSTR)ExAllocatePool (NonPagedPool, + Size); + if (Path == NULL) + { + return 0; + } + RtlZeroMemory (Path, + Size); + RtlCopyMemory (Path, + RegistryPath->Buffer, + Size - sizeof(WCHAR)); + + /* Allocate query table */ + Size = sizeof(RTL_QUERY_REGISTRY_TABLE) * 2; + Table = (PRTL_QUERY_REGISTRY_TABLE)ExAllocatePool (NonPagedPool, + Size); + if (Table == NULL) + { + ExFreePool (Path); + return 0; + } + RtlZeroMemory (Table, + Size); + + Table[0].Flags = RTL_QUERY_REGISTRY_DIRECT; + Table[0].Name = L"TimeOutValue"; + Table[0].EntryContext = &TimeOutValue; + Table[0].DefaultType = REG_DWORD; + Table[0].DefaultData = &ZeroTimeOut; + Table[0].DefaultLength = sizeof(ULONG); + + Status = RtlQueryRegistryValues (RTL_REGISTRY_ABSOLUTE | RTL_REGISTRY_OPTIONAL, + Path, + Table, + NULL, + NULL); + if (!NT_SUCCESS(Status)) + { + DPRINT("RtlQueryRegistryValue() failed (Status %lx)\n", Status); + TimeOutValue = 0; + } + + ExFreePool (Table); + ExFreePool (Path); + + DPRINT("TimeOut: %lu\n", TimeOutValue); + + return TimeOutValue; } +/* + * @implemented + */ NTSTATUS STDCALL ScsiClassReadDriveCapacity(IN PDEVICE_OBJECT DeviceObject) { @@ -1182,6 +1623,9 @@ ScsiClassReadDriveCapacity(IN PDEVICE_OBJECT DeviceObject) } +/* + * @unimplemented + */ VOID STDCALL ScsiClassReleaseQueue(IN PDEVICE_OBJECT DeviceObject) { @@ -1189,6 +1633,9 @@ ScsiClassReleaseQueue(IN PDEVICE_OBJECT DeviceObject) } +/* + * @implemented + */ NTSTATUS STDCALL ScsiClassSendSrbAsynchronous(PDEVICE_OBJECT DeviceObject, PSCSI_REQUEST_BLOCK Srb, @@ -1197,10 +1644,85 @@ ScsiClassSendSrbAsynchronous(PDEVICE_OBJECT DeviceObject, ULONG BufferLength, BOOLEAN WriteToDevice) { - UNIMPLEMENTED; + PDEVICE_EXTENSION DeviceExtension; + PIO_STACK_LOCATION Stack; + + DPRINT("ScsiClassSendSrbAsynchronous() called\n"); + + DeviceExtension = DeviceObject->DeviceExtension; + + /* Initialize the SRB */ + Srb->Length = SCSI_REQUEST_BLOCK_SIZE; + Srb->PathId = DeviceExtension->PathId; + Srb->TargetId = DeviceExtension->TargetId; + Srb->Lun = DeviceExtension->Lun; + Srb->Function = SRB_FUNCTION_EXECUTE_SCSI; + Srb->Cdb[1] |= DeviceExtension->Lun << 5; + + Srb->SenseInfoBuffer = DeviceExtension->SenseData; + Srb->SenseInfoBufferLength = SENSE_BUFFER_SIZE; + + Srb->DataBuffer = BufferAddress; + Srb->DataTransferLength = BufferLength; + + Srb->ScsiStatus = 0; + Srb->SrbStatus = 0; + Srb->NextSrb = NULL; + + if (BufferAddress != NULL) + { + if (Irp->MdlAddress == NULL) + { + /* Allocate an MDL */ + if (!IoAllocateMdl(BufferAddress, + BufferLength, + FALSE, + FALSE, + Irp)) + { + DPRINT1("Mdl-Allocation failed\n"); + return(STATUS_INSUFFICIENT_RESOURCES); + } + + MmBuildMdlForNonPagedPool(Irp->MdlAddress); + } + + /* Set data direction */ + Srb->SrbFlags = (WriteToDevice) ? SRB_FLAGS_DATA_OUT : SRB_FLAGS_DATA_IN; + } + else + { + /* Set data direction */ + Srb->SrbFlags = SRB_FLAGS_NO_DATA_TRANSFER; + } + + /* Set the retry counter */ + Stack = IoGetCurrentIrpStackLocation(Irp); + Stack->Parameters.Others.Argument4 = (PVOID)MAXIMUM_RETRIES; + + /* Set the completion routine */ + IoSetCompletionRoutine(Irp, + ScsiClassIoComplete, + Srb, + TRUE, + TRUE, + TRUE); + + /* Attach Srb to the Irp */ + Stack = IoGetNextIrpStackLocation(Irp); + Stack->MajorFunction = IRP_MJ_SCSI; + Stack->Parameters.Scsi.Srb = Srb; + Srb->OriginalRequest = Irp; + + /* Call the port driver */ + return(IoCallDriver(DeviceExtension->PortDeviceObject, + Irp)); } +/* + * @implemented + */ NTSTATUS STDCALL ScsiClassSendSrbSynchronous(PDEVICE_OBJECT DeviceObject, PSCSI_REQUEST_BLOCK Srb, @@ -1331,10 +1853,13 @@ TryAgain: } +/* + * @implemented + */ VOID STDCALL -ScsiClassSplitRequest(PDEVICE_OBJECT DeviceObject, - PIRP Irp, - ULONG MaximumBytes) +ScsiClassSplitRequest(IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp, + IN ULONG MaximumBytes) { PDEVICE_EXTENSION DeviceExtension; PIO_STACK_LOCATION CurrentStack; @@ -1573,20 +2098,6 @@ ScsiClassReadWrite(IN PDEVICE_OBJECT DeviceObject, static NTSTATUS STDCALL -ScsiClassScsiDispatch(IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp) -{ - DPRINT1("ScsiClassScsiDispatch() called\n"); - - Irp->IoStatus.Status = STATUS_SUCCESS; - Irp->IoStatus.Information = 0; - IoCompleteRequest(Irp, IO_NO_INCREMENT); - - return(STATUS_SUCCESS); -} - - -static NTSTATUS STDCALL ScsiClassDeviceDispatch(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp) { @@ -1629,12 +2140,10 @@ ScsiClassShutdownFlush(IN PDEVICE_OBJECT DeviceObject, static VOID -ScsiClassRetryRequest( - PDEVICE_OBJECT DeviceObject, - PIRP Irp, - PSCSI_REQUEST_BLOCK Srb, - BOOLEAN Associated - ) +ScsiClassRetryRequest(PDEVICE_OBJECT DeviceObject, + PIRP Irp, + PSCSI_REQUEST_BLOCK Srb, + BOOLEAN Associated) { PDEVICE_EXTENSION DeviceExtension; PIO_STACK_LOCATION CurrentIrpStack; @@ -1676,24 +2185,23 @@ ScsiClassRetryRequest( NextIrpStack->Parameters.Scsi.Srb = Srb; if (Associated == FALSE) - { - IoSetCompletionRoutine(Irp, - ScsiClassIoComplete, - Srb, - TRUE, - TRUE, - TRUE); - } - else - { - IoSetCompletionRoutine(Irp, - ScsiClassIoCompleteAssociated, - Srb, - TRUE, - TRUE, - TRUE); - } - + { + IoSetCompletionRoutine(Irp, + ScsiClassIoComplete, + Srb, + TRUE, + TRUE, + TRUE); + } + else + { + IoSetCompletionRoutine(Irp, + ScsiClassIoCompleteAssociated, + Srb, + TRUE, + TRUE, + TRUE); + } IoCallDriver(DeviceExtension->PortDeviceObject, Irp); diff --git a/drivers/storage/disk/.cvsignore b/drivers/storage/disk/.cvsignore index 9f9fab5..b018b17 100644 --- a/drivers/storage/disk/.cvsignore +++ b/drivers/storage/disk/.cvsignore @@ -5,3 +5,4 @@ disk.coff *.sym *.sys *.o +*.map diff --git a/drivers/storage/disk/disk.c b/drivers/storage/disk/disk.c index 354be2b..db2bc4b 100644 --- a/drivers/storage/disk/disk.c +++ b/drivers/storage/disk/disk.c @@ -37,6 +37,9 @@ #define VERSION "0.0.1" +#define SCSI_DISK_TIMEOUT 10 /* Default timeout: 10 seconds */ +#define MODE_DATA_SIZE 192 + typedef struct _DISK_DATA { @@ -260,6 +263,8 @@ DiskClassFindDevices(PDRIVER_OBJECT DriverObject, { InquiryData = (PINQUIRYDATA)UnitInfo->InquiryData; + DPRINT("Device type %u\n", InquiryData->DeviceType); + if (((InquiryData->DeviceType == DIRECT_ACCESS_DEVICE) || (InquiryData->DeviceType == OPTICAL_DEVICE)) && (InquiryData->DeviceTypeQualifier == 0) && @@ -402,7 +407,7 @@ DiskClassCheckReadWrite(IN PDEVICE_OBJECT DeviceObject, static NTSTATUS DiskClassCreateDeviceObject(IN PDRIVER_OBJECT DriverObject, - IN PUNICODE_STRING RegistryPath, /* what's this used for? */ + IN PUNICODE_STRING RegistryPath, IN PDEVICE_OBJECT PortDeviceObject, IN ULONG PortNumber, IN ULONG DiskNumber, @@ -515,6 +520,12 @@ DiskClassCreateDeviceObject(IN PDRIVER_OBJECT DriverObject, DiskDeviceExtension->TargetId = InquiryData->TargetId; DiskDeviceExtension->Lun = InquiryData->Lun; + /* Get timeout value */ + DiskDeviceExtension->TimeOutValue = + ScsiClassQueryTimeOutRegistryValue(RegistryPath); + if (DiskDeviceExtension->TimeOutValue == 0) + DiskDeviceExtension->TimeOutValue = SCSI_DISK_TIMEOUT; + /* Initialize the lookaside list for SRBs */ ScsiClassInitializeSrbLookasideList(DiskDeviceExtension, 4); @@ -548,6 +559,32 @@ DiskClassCreateDeviceObject(IN PDRIVER_OBJECT DriverObject, return(STATUS_INSUFFICIENT_RESOURCES); } + /* Allocate sense data buffer */ + DiskDeviceExtension->SenseData = ExAllocatePool(NonPagedPool, + sizeof(SENSE_BUFFER_SIZE)); + if (DiskDeviceExtension->SenseData == NULL) + { + DPRINT("Failed to allocate sense data buffer!\n"); + + ExFreePool (DiskDeviceExtension->DiskGeometry); + + ExDeleteNPagedLookasideList(&DiskDeviceExtension->SrbLookasideListHead); + + IoDeleteDevice(DiskDeviceObject); + + /* Release (unclaim) the disk */ + ScsiClassClaimDevice(PortDeviceObject, + InquiryData, + TRUE, + NULL); + + /* Delete the harddisk device directory */ + ZwMakeTemporaryObject(Handle); + ZwClose(Handle); + + return(STATUS_INSUFFICIENT_RESOURCES); + } + /* Read the drive's capacity */ Status = ScsiClassReadDriveCapacity(DiskDeviceObject); if (!NT_SUCCESS(Status) && @@ -703,6 +740,7 @@ DiskClassCreateDeviceObject(IN PDRIVER_OBJECT DriverObject, PartitionDeviceObject->AlignmentRequirement = DiskDeviceObject->AlignmentRequirement; PartitionDeviceExtension = PartitionDeviceObject->DeviceExtension; + PartitionDeviceExtension->SenseData = DiskDeviceExtension->SenseData; PartitionDeviceExtension->LockCount = 0; PartitionDeviceExtension->DeviceNumber = DiskNumber; PartitionDeviceExtension->DeviceObject = PartitionDeviceObject; @@ -722,6 +760,7 @@ DiskClassCreateDeviceObject(IN PDRIVER_OBJECT DriverObject, PartitionDeviceExtension->TargetId = InquiryData->TargetId; PartitionDeviceExtension->Lun = InquiryData->Lun; PartitionDeviceExtension->SectorShift = DiskDeviceExtension->SectorShift; + PartitionDeviceExtension->TimeOutValue = SCSI_DISK_TIMEOUT; /* Initialize lookaside list for SRBs */ ScsiClassInitializeSrbLookasideList(PartitionDeviceExtension, @@ -804,30 +843,37 @@ DiskClassDeviceControl(IN PDEVICE_OBJECT DeviceObject, if (IrpStack->Parameters.DeviceIoControl.OutputBufferLength < sizeof(DISK_GEOMETRY)) { Status = STATUS_INVALID_PARAMETER; + break; } - else + + if (DeviceExtension->DiskGeometry == NULL) { - PDISK_GEOMETRY Geometry; + DPRINT("No disk geometry available!\n"); + DeviceExtension->DiskGeometry = ExAllocatePool(NonPagedPool, + sizeof(DISK_GEOMETRY)); + } - if (DeviceExtension->DiskGeometry == NULL) - { - DPRINT("No disk geometry available!\n"); - DeviceExtension->DiskGeometry = ExAllocatePool(NonPagedPool, - sizeof(DISK_GEOMETRY)); - } + if (DeviceObject->Characteristics & FILE_REMOVABLE_MEDIA) + { Status = ScsiClassReadDriveCapacity(DeviceObject); DPRINT("ScsiClassReadDriveCapacity() returned (Status %lx)\n", Status); - if (NT_SUCCESS(Status)) + if (!NT_SUCCESS(Status)) { - Geometry = (PDISK_GEOMETRY)Irp->AssociatedIrp.SystemBuffer; - RtlMoveMemory(Geometry, - DeviceExtension->DiskGeometry, - sizeof(DISK_GEOMETRY)); - - Status = STATUS_SUCCESS; - Information = sizeof(DISK_GEOMETRY); + /* Drive is not ready */ + DiskData->DriveNotReady = FALSE; + break; } + + /* Drive is ready */ + DiskData->DriveNotReady = FALSE; } + + RtlMoveMemory(Irp->AssociatedIrp.SystemBuffer, + DeviceExtension->DiskGeometry, + sizeof(DISK_GEOMETRY)); + + Status = STATUS_SUCCESS; + Information = sizeof(DISK_GEOMETRY); break; case IOCTL_DISK_GET_PARTITION_INFO: @@ -971,10 +1017,48 @@ DiskClassDeviceControl(IN PDEVICE_OBJECT DeviceObject, } break; + case IOCTL_DISK_IS_WRITABLE: + { + PMODE_PARAMETER_HEADER ModeData; + ULONG Length; + + ModeData = ExAllocatePool (NonPagedPool, + MODE_DATA_SIZE); + if (ModeData == NULL) + { + Status = STATUS_INSUFFICIENT_RESOURCES; + break; + } + RtlZeroMemory (ModeData, + MODE_DATA_SIZE); + + Length = ScsiClassModeSense (DeviceObject, + (PVOID)ModeData, + MODE_DATA_SIZE, + MODE_SENSE_RETURN_ALL); + if (Length < sizeof(MODE_PARAMETER_HEADER)) + { + /* FIXME: Retry */ + Status = STATUS_IO_DEVICE_ERROR; + ExFreePool (ModeData); + break; + } + + if (ModeData->DeviceSpecificParameter & MODE_DSP_WRITE_PROTECT) + { + Status = STATUS_MEDIA_WRITE_PROTECTED; + } + else + { + Status = STATUS_SUCCESS; + } + ExFreePool (ModeData); + } + break; + case IOCTL_DISK_VERIFY: case IOCTL_DISK_FORMAT_TRACKS: case IOCTL_DISK_PERFORMANCE: - case IOCTL_DISK_IS_WRITABLE: case IOCTL_DISK_LOGGING: case IOCTL_DISK_FORMAT_TRACKS_EX: case IOCTL_DISK_HISTOGRAM_STRUCTURE: @@ -1062,6 +1146,9 @@ DiskClassShutdownFlush(IN PDEVICE_OBJECT DeviceObject, Srb->TargetId = DeviceExtension->TargetId; Srb->Lun = DeviceExtension->Lun; + /* Set timeout */ + Srb->TimeOutValue = DeviceExtension->TimeOutValue * 4; + /* Flush write cache */ Srb->Function = SRB_FUNCTION_EXECUTE_SCSI; Srb->SrbFlags = SRB_FLAGS_NO_DATA_TRANSFER; diff --git a/drivers/storage/diskdump/.cvsignore b/drivers/storage/diskdump/.cvsignore new file mode 100644 index 0000000..905450c --- /dev/null +++ b/drivers/storage/diskdump/.cvsignore @@ -0,0 +1,8 @@ +base.tmp +junk.tmp +temp.exp +diskdump.coff +*.o +*.sym +*.sys +*.map diff --git a/drivers/storage/diskdump/Makefile b/drivers/storage/diskdump/Makefile new file mode 100644 index 0000000..ac5f9f1 --- /dev/null +++ b/drivers/storage/diskdump/Makefile @@ -0,0 +1,19 @@ +# $Id$ + +PATH_TO_TOP = ../../.. + +TARGET_BOOTSTRAP = yes + +TARGET_TYPE = export_driver + +TARGET_NAME = diskdump + +TARGET_DDKLIBS = + +TARGET_OBJECTS = $(TARGET_NAME).o diskdump_helper.o + +include $(PATH_TO_TOP)/rules.mak + +include $(TOOLS_PATH)/helper.mk + +# EOF diff --git a/drivers/storage/diskdump/diskdump.c b/drivers/storage/diskdump/diskdump.c new file mode 100644 index 0000000..0bfd971 --- /dev/null +++ b/drivers/storage/diskdump/diskdump.c @@ -0,0 +1,432 @@ +/* + * ReactOS kernel + * Copyright (C) 2001, 2002, 2003 ReactOS Team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ +/* $Id$ + * + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS kernel + * FILE: services/storage/diskdump/diskdump.c + * PURPOSE: Dumping crash data to the pagefile + * PROGRAMMER: Eric Kohl (ekohl@rz-online.de) + */ + +/* INCLUDES *****************************************************************/ + +#include +#include +#include +#include +#include +#include "../scsiport/scsiport_int.h" + +#define NDEBUG +#include + +#define VERSION "0.0.1" + +/* PROTOTYPES ***************************************************************/ + +NTSTATUS STDCALL +DiskDumpPrepare(PDEVICE_OBJECT StorageDevice, PDUMP_POINTERS DumpPointers); +VOID +DiskDumpScsiInvalid(VOID); +VOID +_DiskDumpScsiPortNotification(IN SCSI_NOTIFICATION_TYPE NotificationType, + IN PVOID HwDeviceExtension, + ...); +NTSTATUS STDCALL +DiskDumpInit(VOID); +NTSTATUS STDCALL +DiskDumpFinish(VOID); +NTSTATUS STDCALL +DiskDumpWrite(LARGE_INTEGER StartAddress, PMDL Mdl); + +typedef VOID (*SCSIPORTNOTIFICATION)(IN SCSI_NOTIFICATION_TYPE NotificationType, + IN PVOID HwDeviceExtension, + ...); + +/* GLOBALS ******************************************************************/ + +MM_CORE_DUMP_FUNCTIONS DiskDumpFunctions = + { + DiskDumpPrepare, + DiskDumpInit, + DiskDumpWrite, + DiskDumpFinish, + }; + +typedef struct +{ + PCH Name; + ULONG Ordinal; + PVOID OldFunction; + PVOID NewFunction; +} SUBSTITUTE_EXPORT; + +static SCSI_REQUEST_BLOCK CoreDumpSrb; +static DUMP_POINTERS CoreDumpPointers; +static PDEVICE_OBJECT CoreDumpClassDevice; +static PDEVICE_EXTENSION CoreDumpClass2DeviceExtension; +static PDEVICE_OBJECT CoreDumpPortDevice; +static SCSI_PORT_DEVICE_EXTENSION* CoreDumpPortDeviceExtension; +BOOLEAN IsDumping = FALSE; +static PDRIVER_OBJECT DiskDumpDriver; +static UCHAR DiskDumpSenseData[SENSE_BUFFER_SIZE]; +static BOOLEAN IrqComplete, IrqNextRequest; +PVOID OldScsiPortNotification; +static SUBSTITUTE_EXPORT DiskDumpExports[] = + { + {"ScsiPortConvertPhysicalAddressToUlong", 2, NULL, NULL}, + {"ScsiPortConvertUlongToPhysicalAddress", 3, NULL, NULL}, + {"ScsiPortFreeDeviceBase", 5, NULL, DiskDumpScsiInvalid}, + {"ScsiPortGetBusData", 6, NULL, DiskDumpScsiInvalid}, + {"ScsiPortGetDeviceBase", 7, DiskDumpScsiInvalid}, + {"ScsiPortInitialize", 13, NULL, DiskDumpScsiInvalid}, + {"ScsiPortNotification", 17, NULL, _DiskDumpScsiPortNotification}, + {"ScsiPortReadPortBufferUlong", 19, NULL}, + {"ScsiPortReadPortBufferUshort", 20, NULL}, + {"ScsiPortReadPortUchar", 21, NULL, NULL}, + {"ScsiPortReadPortUshort", 23, NULL, NULL}, + {"ScsiPortStallExecution", 31, NULL, NULL}, + {"ScsiPortWritePortBufferUlong", 34, NULL}, + {"ScsiPortWritePortBufferUshort", 35, NULL}, + {"ScsiPortWritePortUchar", 36, NULL, NULL}, + {"ScsiDebugPrint", 0, NULL, NULL}, + }; + +/* FUNCTIONS ****************************************************************/ + + + +VOID +DiskDumpScsiPortNotification(IN SCSI_NOTIFICATION_TYPE NotificationType, + IN PVOID HwDeviceExtension, + ...) +{ + if (NotificationType == RequestComplete) + { + IrqComplete = TRUE; + } + if (NotificationType == NextRequest) + { + IrqNextRequest = TRUE; + } +} + +VOID +DiskDumpScsiInvalid(VOID) +{ + DbgPrint("DISKDUMP: Error: Miniport called a function not supported at dump time.\n"); + KeBugCheck(0); +} + +VOID STDCALL +DiskDumpBuildRequest(LARGE_INTEGER StartingOffset, PMDL Mdl) +{ + LARGE_INTEGER StartingBlock; + PSCSI_REQUEST_BLOCK Srb; + PCDB Cdb; + ULONG LogicalBlockAddress; + USHORT TransferBlocks; + + /* Calculate logical block address */ + StartingBlock.QuadPart = StartingOffset.QuadPart >> CoreDumpClass2DeviceExtension->SectorShift; + LogicalBlockAddress = (ULONG)StartingBlock.u.LowPart; + + DPRINT("Logical block address: %lu\n", LogicalBlockAddress); + + /* Allocate and initialize an SRB */ + Srb = &CoreDumpSrb; + + Srb->SrbFlags = 0; + Srb->Length = sizeof(SCSI_REQUEST_BLOCK); //SCSI_REQUEST_BLOCK_SIZE; + Srb->OriginalRequest = NULL; + Srb->PathId = CoreDumpClass2DeviceExtension->PathId; + Srb->TargetId = CoreDumpClass2DeviceExtension->TargetId; + Srb->Lun = CoreDumpClass2DeviceExtension->Lun; + Srb->Function = SRB_FUNCTION_EXECUTE_SCSI; + Srb->DataBuffer = Mdl->MappedSystemVa; + Srb->DataTransferLength = PAGE_SIZE; + Srb->QueueAction = SRB_SIMPLE_TAG_REQUEST; + Srb->QueueSortKey = LogicalBlockAddress; + + Srb->SenseInfoBuffer = DiskDumpSenseData; + Srb->SenseInfoBufferLength = SENSE_BUFFER_SIZE; + + Srb->TimeOutValue = + ((Srb->DataTransferLength + 0xFFFF) >> 16) * CoreDumpClass2DeviceExtension->TimeOutValue; + + Srb->SrbStatus = SRB_STATUS_SUCCESS; + Srb->ScsiStatus = 0; + Srb->NextSrb = 0; + + Srb->CdbLength = 10; + Cdb = (PCDB)Srb->Cdb; + + /* Initialize ATAPI packet (12 bytes) */ + RtlZeroMemory(Cdb, MAXIMUM_CDB_SIZE); + + Cdb->CDB10.LogicalUnitNumber = CoreDumpClass2DeviceExtension->Lun; + TransferBlocks = (USHORT)(PAGE_SIZE >> + CoreDumpClass2DeviceExtension->SectorShift); + + /* Copy little endian values into CDB in big endian format */ + Cdb->CDB10.LogicalBlockByte0 = ((PFOUR_BYTE)&LogicalBlockAddress)->Byte3; + Cdb->CDB10.LogicalBlockByte1 = ((PFOUR_BYTE)&LogicalBlockAddress)->Byte2; + Cdb->CDB10.LogicalBlockByte2 = ((PFOUR_BYTE)&LogicalBlockAddress)->Byte1; + Cdb->CDB10.LogicalBlockByte3 = ((PFOUR_BYTE)&LogicalBlockAddress)->Byte0; + + Cdb->CDB10.TransferBlocksMsb = ((PFOUR_BYTE)&TransferBlocks)->Byte1; + Cdb->CDB10.TransferBlocksLsb = ((PFOUR_BYTE)&TransferBlocks)->Byte0; + + + /* Write Command. */ + Srb->SrbFlags |= SRB_FLAGS_DATA_OUT; + Cdb->CDB10.OperationCode = SCSIOP_WRITE; + + /* Leave caching disabled. */ +} + +BOOLEAN STDCALL +DiskDumpIsr(PKINTERRUPT Interrupt, PVOID ServiceContext) +{ + if (!CoreDumpPortDeviceExtension->HwInterrupt(&CoreDumpPortDeviceExtension->MiniPortDeviceExtension)) + { + return(FALSE); + } + return(TRUE); +} + +NTSTATUS STDCALL +DiskDumpInit(VOID) +{ + KIRQL CurrentIrql = KeGetCurrentIrql(); + IsDumping = TRUE; + if (CurrentIrql >= CoreDumpPortDeviceExtension->Interrupt->SynchLevel) + { + DbgPrint("DISKDUMP: Error: Crash inside high priority interrupt routine.\n"); + return(STATUS_UNSUCCESSFUL); + } + CoreDumpPortDeviceExtension->Interrupt->ServiceRoutine = DiskDumpIsr; + + return(STATUS_SUCCESS); +} + +NTSTATUS STDCALL +DiskDumpFinish(VOID) +{ + return(STATUS_SUCCESS); +} + +NTSTATUS STDCALL +DiskDumpWrite(LARGE_INTEGER Address, PMDL Mdl) +{ + KIRQL OldIrql, OldIrql2; + KIRQL CurrentIrql = KeGetCurrentIrql(); + + if (CurrentIrql < (CoreDumpPortDeviceExtension->Interrupt->SynchLevel - 1)) + { + KeRaiseIrql(CoreDumpPortDeviceExtension->Interrupt->SynchLevel - 1, &OldIrql); + } + + /* Adjust the address for the start of the partition. */ + Address.QuadPart += + (CoreDumpClass2DeviceExtension->StartingOffset.QuadPart + CoreDumpClass2DeviceExtension->DMByteSkew); + + /* Assume the device is always able to transfer a page so no need to split up the transfer. */ + + /* Build an SRB to describe the write. */ + DiskDumpBuildRequest(Address, Mdl); + + /* Start i/o on the HBA. */ + IrqComplete = IrqNextRequest = FALSE; + KeRaiseIrql(CoreDumpPortDeviceExtension->Interrupt->SynchLevel, &OldIrql2); + if (!CoreDumpPortDeviceExtension->HwStartIo(&CoreDumpPortDeviceExtension->MiniPortDeviceExtension, + &CoreDumpSrb)) + { + KeLowerIrql(OldIrql); + DbgPrint("DISKDUMP: Error: Miniport HwStartIo failed.\n"); + return(STATUS_UNSUCCESSFUL); + } + KeLowerIrql(OldIrql2); + + /* Wait for the miniport to finish. */ + __asm__ ("sti\n\t"); + while (!IrqComplete || !IrqNextRequest) + { + __asm__ ("hlt\n\t"); + } + if (CurrentIrql < (CoreDumpPortDeviceExtension->Interrupt->SynchLevel - 1)) + { + KeLowerIrql(OldIrql); + } + __asm__("cli\n\t"); + + /* Check the result. */ + if (SRB_STATUS(CoreDumpSrb.SrbStatus) != SRB_STATUS_SUCCESS) + { + DbgPrint("DISKDUMP: Error: SRB failed.\n"); + return(STATUS_UNSUCCESSFUL); + } + return(STATUS_SUCCESS); +} + +NTSTATUS STDCALL +DiskDumpPrepare(PDEVICE_OBJECT StorageDevice, PDUMP_POINTERS DumpPointers) +{ + PIMAGE_NT_HEADERS NtHeader; + PVOID ImportDirectory; + ULONG ImportDirectorySize; + PIMAGE_IMPORT_MODULE_DIRECTORY ImportModuleDirectory; + PVOID DriverBase; + PCH Name; + ULONG i; + ULONG Hint; + PVOID* ImportAddressList; + PULONG FunctionNameList; + + /* Save the information from the kernel. */ + CoreDumpClassDevice = StorageDevice; + CoreDumpPointers = *DumpPointers; + CoreDumpClass2DeviceExtension = (PDEVICE_EXTENSION)CoreDumpClassDevice->DeviceExtension; + CoreDumpPortDevice = DumpPointers->DeviceObject; + CoreDumpPortDeviceExtension = CoreDumpPortDevice->DeviceExtension; + + /* Replace all the miniport driver's imports with our functions. */ + DriverBase = CoreDumpPortDevice->DriverObject->DriverStart; + NtHeader = RtlImageNtHeader(DriverBase); + ImportDirectory = RtlImageDirectoryEntryToData(DriverBase, + TRUE, + IMAGE_DIRECTORY_ENTRY_IMPORT, + &ImportDirectorySize); + if (ImportDirectory == NULL || ImportDirectorySize == 0) + { + DbgPrint("DISKDUMP: Error: Miniport has no imports?\n"); + return(STATUS_UNSUCCESSFUL); + } + /* Process each import module */ + ImportModuleDirectory = (PIMAGE_IMPORT_MODULE_DIRECTORY)ImportDirectory; + DPRINT("Processeing import directory at %p\n", ImportModuleDirectory); + while (ImportModuleDirectory->dwRVAModuleName) + { + /* Check to make sure that import lib is kernel */ + Name = (PCHAR) DriverBase + ImportModuleDirectory->dwRVAModuleName; + + if (strcmp(Name, "scsiport.sys") != 0) + { + DbgPrint("DISKDUMP: Warning: Miniport has illegal imports.\n"); + ImportModuleDirectory++; + continue; + } + + /* Get the import address list */ + ImportAddressList = (PVOID *) ((PUCHAR)DriverBase + + ImportModuleDirectory->dwRVAFunctionAddressList); + + /* Get the list of functions to import */ + if (ImportModuleDirectory->dwRVAFunctionNameList != 0) + { + FunctionNameList = (PULONG) ((PUCHAR)DriverBase + + ImportModuleDirectory->dwRVAFunctionNameList); + } + else + { + FunctionNameList = (PULONG) ((PUCHAR)DriverBase + + ImportModuleDirectory->dwRVAFunctionAddressList); + } + /* Walk through function list and fixup addresses */ + while (*FunctionNameList != 0L) + { + if ((*FunctionNameList) & 0x80000000) // hint + { + Name = NULL; + + Hint = (*FunctionNameList) & 0xffff; + } + else // hint-name + { + Name = (PCHAR)((DWORD)DriverBase + + *FunctionNameList + 2); + Hint = *(PWORD)((DWORD)DriverBase + *FunctionNameList); + } + DPRINT(" Hint:%04x Name:%s\n", Hint, pName); + + for (i = 0; i < (sizeof(DiskDumpExports) / sizeof(DiskDumpExports[0])); i++) + { + if (DiskDumpExports[i].Ordinal == Hint || + (Name != NULL && strcmp(DiskDumpExports[i].Name, Name) == 0)) + { + break; + } + } + if (i == (sizeof(DiskDumpExports) / sizeof(DiskDumpExports[0]))) + { + DbgPrint("DISKDUMP: Error: Miniport imports unknown symbol %s.\n", Name); + return(STATUS_UNSUCCESSFUL); + } + if (strcmp(Name, "ScsiPortNotification") == 0) + { + OldScsiPortNotification = *ImportAddressList; + } + DiskDumpExports[i].OldFunction = *ImportAddressList; + if (DiskDumpExports[i].NewFunction != NULL) + { + *ImportAddressList = DiskDumpExports[i].NewFunction; + } + + ImportAddressList++; + FunctionNameList++; + } + ImportModuleDirectory++; + } + return(STATUS_SUCCESS); +} + +/********************************************************************** + * NAME EXPORTED + * DriverEntry + * + * DESCRIPTION + * This function initializes the driver, locates and claims + * hardware resources, and creates various NT objects needed + * to process I/O requests. + * + * RUN LEVEL + * PASSIVE_LEVEL + * + * ARGUMENTS + * DriverObject + * System allocated Driver Object for this driver + * + * RegistryPath + * Name of registry driver service key + * + * RETURN VALUE + * Status + */ + +NTSTATUS STDCALL +DriverEntry(IN PDRIVER_OBJECT DriverObject, + IN PUNICODE_STRING RegistryPath) +{ + DiskDumpDriver = DriverObject; + return(STATUS_SUCCESS); +} + + +/* EOF */ diff --git a/drivers/storage/diskdump/diskdump.def b/drivers/storage/diskdump/diskdump.def new file mode 100644 index 0000000..65e33b5 --- /dev/null +++ b/drivers/storage/diskdump/diskdump.def @@ -0,0 +1,7 @@ +; $Id$ +; +; diskdump.def - export definition file for crash dump driver +; +LIBRARY DISKDUMP.SYS +EXPORTS +DiskDumpFunctions diff --git a/drivers/storage/diskdump/diskdump.edf b/drivers/storage/diskdump/diskdump.edf new file mode 100644 index 0000000..b8e119a --- /dev/null +++ b/drivers/storage/diskdump/diskdump.edf @@ -0,0 +1,7 @@ +; $Id$ +; +; diskdump.edf - export definition file for crash dump driver +; +LIBRARY DISKDUMP.SYS +EXPORTS +DiskDumpFunctions diff --git a/drivers/storage/diskdump/diskdump.rc b/drivers/storage/diskdump/diskdump.rc new file mode 100644 index 0000000..f3f9243 --- /dev/null +++ b/drivers/storage/diskdump/diskdump.rc @@ -0,0 +1,38 @@ +#include +#include + +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +VS_VERSION_INFO VERSIONINFO + FILEVERSION RES_UINT_FV_MAJOR,RES_UINT_FV_MINOR,RES_UINT_FV_REVISION,RES_UINT_FV_BUILD + PRODUCTVERSION RES_UINT_PV_MAJOR,RES_UINT_PV_MINOR,RES_UINT_PV_REVISION,RES_UINT_PV_BUILD + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x40004L + FILETYPE 0x2L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "CompanyName", RES_STR_COMPANY_NAME + VALUE "FileDescription", "Crash Dump Disk Driver\0" + VALUE "FileVersion", "0.0.1\0" + VALUE "InternalName", "diskdump\0" + VALUE "LegalCopyright", RES_STR_LEGAL_COPYRIGHT + VALUE "OriginalFilename", "diskdump.sys\0" + VALUE "ProductName", RES_STR_PRODUCT_NAME + VALUE "ProductVersion", RES_STR_PRODUCT_VERSION + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END + diff --git a/drivers/storage/diskdump/diskdump_helper.S b/drivers/storage/diskdump/diskdump_helper.S new file mode 100644 index 0000000..761ee7c --- /dev/null +++ b/drivers/storage/diskdump/diskdump_helper.S @@ -0,0 +1,9 @@ +.globl __DiskDumpScsiPortNotification +__DiskDumpScsiPortNotification: + cmp $0, _IsDumping + je .l1 + jmp _DiskDumpScsiPortNotification +.l1: + jmp *_OldScsiPortNotification +.L2: + jmp .L2 diff --git a/drivers/storage/scsiport/.cvsignore b/drivers/storage/scsiport/.cvsignore index c9246a8..f95558e 100644 --- a/drivers/storage/scsiport/.cvsignore +++ b/drivers/storage/scsiport/.cvsignore @@ -5,3 +5,4 @@ scsiport.coff *.o *.sym *.sys +*.map diff --git a/drivers/storage/scsiport/scsiport.c b/drivers/storage/scsiport/scsiport.c index 524201c..bd80ad1 100644 --- a/drivers/storage/scsiport/scsiport.c +++ b/drivers/storage/scsiport/scsiport.c @@ -38,84 +38,15 @@ #define VERSION "0.0.1" +#include "scsiport_int.h" -/* TYPES *********************************************************************/ - -/* - * SCSI_PORT_TIMER_STATES - * - * DESCRIPTION - * An enumeration containing the states in the timer DFA - */ -typedef enum _SCSI_PORT_TIMER_STATES -{ - IDETimerIdle, - IDETimerCmdWait, - IDETimerResetWaitForBusyNegate, - IDETimerResetWaitForDrdyAssert -} SCSI_PORT_TIMER_STATES; - - -typedef struct _SCSI_PORT_DEVICE_BASE -{ - LIST_ENTRY List; - - PVOID MappedAddress; - ULONG NumberOfBytes; - SCSI_PHYSICAL_ADDRESS IoAddress; - ULONG SystemIoBusNumber; -} SCSI_PORT_DEVICE_BASE, *PSCSI_PORT_DEVICE_BASE; - - -/* - * SCSI_PORT_DEVICE_EXTENSION - * - * DESCRIPTION - * First part of the port objects device extension. The second - * part is the miniport-specific device extension. - */ - -typedef struct _SCSI_PORT_DEVICE_EXTENSION -{ - ULONG Length; - ULONG MiniPortExtensionSize; - PORT_CONFIGURATION_INFORMATION PortConfig; - ULONG PortNumber; - - KSPIN_LOCK IrpLock; - KSPIN_LOCK SpinLock; - PKINTERRUPT Interrupt; - PIRP CurrentIrp; - ULONG IrpFlags; - - SCSI_PORT_TIMER_STATES TimerState; - LONG TimerCount; - - BOOLEAN Initializing; - - LIST_ENTRY DeviceBaseListHead; - - ULONG PortBusInfoSize; - PSCSI_ADAPTER_BUS_INFO PortBusInfo; - - PIO_SCSI_CAPABILITIES PortCapabilities; - - PDEVICE_OBJECT DeviceObject; - PCONTROLLER_OBJECT ControllerObject; - - PHW_STARTIO HwStartIo; - PHW_INTERRUPT HwInterrupt; - - PSCSI_REQUEST_BLOCK OriginalSrb; - SCSI_REQUEST_BLOCK InternalSrb; - SENSE_DATA InternalSenseData; - - UCHAR MiniPortDeviceExtension[1]; /* must be the last entry */ -} SCSI_PORT_DEVICE_EXTENSION, *PSCSI_PORT_DEVICE_EXTENSION; +//#define USE_DEVICE_QUEUES +/* TYPES *********************************************************************/ #define IRP_FLAG_COMPLETE 0x00000001 #define IRP_FLAG_NEXT 0x00000002 +#define IRP_FLAG_NEXT_LU 0x00000004 /* GLOBALS *******************************************************************/ @@ -151,8 +82,24 @@ ScsiPortCreatePortDevice(IN PDRIVER_OBJECT DriverObject, IN ULONG PortCount, IN OUT PSCSI_PORT_DEVICE_EXTENSION *RealDeviceExtension); +static PSCSI_PORT_LUN_EXTENSION +SpiAllocateLunExtension (IN PSCSI_PORT_DEVICE_EXTENSION DeviceExtension, + IN UCHAR PathId, + IN UCHAR TargetId, + IN UCHAR Lun); + +static PSCSI_PORT_LUN_EXTENSION +SpiGetLunExtension (IN PSCSI_PORT_DEVICE_EXTENSION DeviceExtension, + IN UCHAR PathId, + IN UCHAR TargetId, + IN UCHAR Lun); + static VOID -ScsiPortInquire(PSCSI_PORT_DEVICE_EXTENSION DeviceExtension); +SpiInquirePort (IN PSCSI_PORT_DEVICE_EXTENSION DeviceExtension); + +static ULONG +SpiGetInquiryData (IN PSCSI_PORT_DEVICE_EXTENSION DeviceExtension, + OUT PSCSI_ADAPTER_BUS_INFO AdapterBusInfo); static BOOLEAN STDCALL ScsiPortIsr(IN PKINTERRUPT Interrupt, @@ -173,8 +120,8 @@ ScsiPortInitSenseRequestSrb(PSCSI_PORT_DEVICE_EXTENSION DeviceExtension, PSCSI_REQUEST_BLOCK OriginalSrb); static NTSTATUS -ScsiPortBuildDeviceMap(PSCSI_PORT_DEVICE_EXTENSION DeviceExtension, - PUNICODE_STRING RegistryPath); +SpiBuildDeviceMap (PSCSI_PORT_DEVICE_EXTENSION DeviceExtension, + PUNICODE_STRING RegistryPath); /* FUNCTIONS *****************************************************************/ @@ -231,6 +178,8 @@ DriverEntry(IN PDRIVER_OBJECT DriverObject, * * RETURN VALUE * None. + * + * @implemented */ VOID @@ -254,6 +203,9 @@ ScsiDebugPrint(IN ULONG DebugPrintLevel, } +/* + * @unimplemented + */ VOID STDCALL ScsiPortCompleteRequest(IN PVOID HwDeviceExtension, IN UCHAR PathId, @@ -266,6 +218,9 @@ ScsiPortCompleteRequest(IN PVOID HwDeviceExtension, } +/* + * @implemented + */ ULONG STDCALL ScsiPortConvertPhysicalAddressToUlong(IN SCSI_PHYSICAL_ADDRESS Address) { @@ -274,6 +229,9 @@ ScsiPortConvertPhysicalAddressToUlong(IN SCSI_PHYSICAL_ADDRESS Address) } +/* + * @unimplemented + */ VOID STDCALL ScsiPortFlushDma(IN PVOID HwDeviceExtension) { @@ -282,6 +240,9 @@ ScsiPortFlushDma(IN PVOID HwDeviceExtension) } +/* + * @implemented + */ VOID STDCALL ScsiPortFreeDeviceBase(IN PVOID HwDeviceExtension, IN PVOID MappedAddress) @@ -319,6 +280,9 @@ ScsiPortFreeDeviceBase(IN PVOID HwDeviceExtension, } +/* + * @implemented + */ ULONG STDCALL ScsiPortGetBusData(IN PVOID DeviceExtension, IN ULONG BusDataType, @@ -335,6 +299,9 @@ ScsiPortGetBusData(IN PVOID DeviceExtension, } +/* + * @implemented + */ PVOID STDCALL ScsiPortGetDeviceBase(IN PVOID HwDeviceExtension, IN INTERFACE_TYPE BusType, @@ -388,28 +355,105 @@ ScsiPortGetDeviceBase(IN PVOID HwDeviceExtension, } +/* + * @implemented + */ PVOID STDCALL ScsiPortGetLogicalUnit(IN PVOID HwDeviceExtension, IN UCHAR PathId, IN UCHAR TargetId, IN UCHAR Lun) { - DPRINT("ScsiPortGetLogicalUnit()\n"); - UNIMPLEMENTED; + PSCSI_PORT_DEVICE_EXTENSION DeviceExtension; + PSCSI_PORT_LUN_EXTENSION LunExtension; + PLIST_ENTRY Entry; + + DPRINT("ScsiPortGetLogicalUnit() called\n"); + + DeviceExtension = CONTAINING_RECORD(HwDeviceExtension, + SCSI_PORT_DEVICE_EXTENSION, + MiniPortDeviceExtension); + if (IsListEmpty(&DeviceExtension->LunExtensionListHead)) + return NULL; + + Entry = DeviceExtension->LunExtensionListHead.Flink; + while (Entry != &DeviceExtension->LunExtensionListHead) + { + LunExtension = CONTAINING_RECORD(Entry, + SCSI_PORT_LUN_EXTENSION, + List); + if (LunExtension->PathId == PathId && + LunExtension->TargetId == TargetId && + LunExtension->Lun == Lun) + { + return (PVOID)&LunExtension->MiniportLunExtension; + } + + Entry = Entry->Flink; + } + + return NULL; } +/* + * @unimplemented + */ SCSI_PHYSICAL_ADDRESS STDCALL ScsiPortGetPhysicalAddress(IN PVOID HwDeviceExtension, IN PSCSI_REQUEST_BLOCK Srb OPTIONAL, IN PVOID VirtualAddress, OUT ULONG *Length) { - DPRINT("ScsiPortGetPhysicalAddress()\n"); - UNIMPLEMENTED; + PSCSI_PORT_DEVICE_EXTENSION DeviceExtension; + SCSI_PHYSICAL_ADDRESS PhysicalAddress; + ULONG BufferLength = 0; + ULONG Offset; + + DPRINT1("ScsiPortGetPhysicalAddress(%p %p %p %p)\n", + HwDeviceExtension, Srb, VirtualAddress, Length); + + DeviceExtension = CONTAINING_RECORD(HwDeviceExtension, + SCSI_PORT_DEVICE_EXTENSION, + MiniPortDeviceExtension); + + *Length = 0; + + if (Srb == NULL) + { + if ((ULONG_PTR)DeviceExtension->VirtualAddress > (ULONG_PTR)VirtualAddress) + { + PhysicalAddress.QuadPart = 0ULL; + return PhysicalAddress; + } + + Offset = (ULONG_PTR)VirtualAddress - (ULONG_PTR)DeviceExtension->VirtualAddress; + if (Offset >= DeviceExtension->CommonBufferLength) + { + PhysicalAddress.QuadPart = 0ULL; + return PhysicalAddress; + } + + PhysicalAddress.QuadPart = + DeviceExtension->PhysicalAddress.QuadPart + (ULONGLONG)Offset; + BufferLength = DeviceExtension->CommonBufferLength - Offset; + } + else + { + /* FIXME */ + DPRINT1("Srb != NULL is not implemented yet!\n"); + UNIMPLEMENTED; + } + + *Length = BufferLength; + + return PhysicalAddress; } +/* + * @unimplemented + */ PSCSI_REQUEST_BLOCK STDCALL ScsiPortGetSrb(IN PVOID DeviceExtension, IN UCHAR PathId, @@ -422,22 +466,103 @@ ScsiPortGetSrb(IN PVOID DeviceExtension, } +/* + * @implemented + */ PVOID STDCALL ScsiPortGetUncachedExtension(IN PVOID HwDeviceExtension, IN PPORT_CONFIGURATION_INFORMATION ConfigInfo, IN ULONG NumberOfBytes) { - DPRINT("ScsiPortGetUncachedExtension()\n"); - UNIMPLEMENTED; + PSCSI_PORT_DEVICE_EXTENSION DeviceExtension; + DEVICE_DESCRIPTION DeviceDescription; + + DPRINT1("ScsiPortGetUncachedExtension(%p %p %lu)\n", + HwDeviceExtension, ConfigInfo, NumberOfBytes); + + DeviceExtension = CONTAINING_RECORD(HwDeviceExtension, + SCSI_PORT_DEVICE_EXTENSION, + MiniPortDeviceExtension); + + /* Check for allocated common DMA buffer */ + if (DeviceExtension->VirtualAddress != NULL) + { + DPRINT1("The HBA has already got a common DMA buffer!\n"); + return NULL; + } + + /* Check for DMA adapter object */ + if (DeviceExtension->AdapterObject == NULL) + { + /* Initialize DMA adapter description */ + RtlZeroMemory(&DeviceDescription, + sizeof(DEVICE_DESCRIPTION)); + DeviceDescription.Version = DEVICE_DESCRIPTION_VERSION; + DeviceDescription.Master = ConfigInfo->Master; + DeviceDescription.ScatterGather = ConfigInfo->ScatterGather; + DeviceDescription.DemandMode = ConfigInfo->DemandMode; + DeviceDescription.Dma32BitAddresses = ConfigInfo->Dma32BitAddresses; + DeviceDescription.BusNumber = ConfigInfo->SystemIoBusNumber; + DeviceDescription.DmaChannel = ConfigInfo->DmaChannel; + DeviceDescription.InterfaceType = ConfigInfo->AdapterInterfaceType; + DeviceDescription.DmaWidth = ConfigInfo->DmaWidth; + DeviceDescription.DmaSpeed = ConfigInfo->DmaSpeed; + DeviceDescription.MaximumLength = ConfigInfo->MaximumTransferLength; + DeviceDescription.DmaPort = ConfigInfo->DmaPort; + + /* Get a DMA adapter object */ + DeviceExtension->AdapterObject = HalGetAdapter(&DeviceDescription, + &DeviceExtension->MapRegisterCount); + if (DeviceExtension->AdapterObject == NULL) + { + DPRINT1("HalGetAdapter() failed\n"); + return NULL; + } + } + + /* Allocate a common DMA buffer */ + DeviceExtension->CommonBufferLength = NumberOfBytes; + DeviceExtension->VirtualAddress = + HalAllocateCommonBuffer(DeviceExtension->AdapterObject, + DeviceExtension->CommonBufferLength, + &DeviceExtension->PhysicalAddress, + FALSE); + if (DeviceExtension->VirtualAddress == NULL) + { + DPRINT1("HalAllocateCommonBuffer() failed!\n"); + DeviceExtension->CommonBufferLength = 0; + return NULL; + } + + return DeviceExtension->VirtualAddress; } +/* + * @implemented + */ PVOID STDCALL ScsiPortGetVirtualAddress(IN PVOID HwDeviceExtension, IN SCSI_PHYSICAL_ADDRESS PhysicalAddress) { - DPRINT("ScsiPortGetVirtualAddress()\n"); - UNIMPLEMENTED; + PSCSI_PORT_DEVICE_EXTENSION DeviceExtension; + ULONG Offset; + + DPRINT("ScsiPortGetVirtualAddress(%p %I64x)\n", + HwDeviceExtension, PhysicalAddress.QuadPart); + + DeviceExtension = CONTAINING_RECORD(HwDeviceExtension, + SCSI_PORT_DEVICE_EXTENSION, + MiniPortDeviceExtension); + + if (DeviceExtension->PhysicalAddress.QuadPart > PhysicalAddress.QuadPart) + return NULL; + + Offset = (ULONG)(PhysicalAddress.QuadPart - DeviceExtension->PhysicalAddress.QuadPart); + if (Offset >= DeviceExtension->CommonBufferLength) + return NULL; + + return (PVOID)((ULONG_PTR)DeviceExtension->VirtualAddress + Offset); } @@ -466,6 +591,8 @@ ScsiPortGetVirtualAddress(IN PVOID HwDeviceExtension, * * RETURN VALUE * Status. + * + * @implemented */ ULONG STDCALL @@ -498,10 +625,10 @@ ScsiPortInitialize(IN PVOID Argument1, return(STATUS_INVALID_PARAMETER); DriverObject->DriverStartIo = ScsiPortStartIo; - DriverObject->MajorFunction[IRP_MJ_CREATE] = ScsiPortCreateClose; - DriverObject->MajorFunction[IRP_MJ_CLOSE] = ScsiPortCreateClose; - DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = ScsiPortDeviceControl; - DriverObject->MajorFunction[IRP_MJ_SCSI] = ScsiPortDispatchScsi; + DriverObject->MajorFunction[IRP_MJ_CREATE] = (PDRIVER_DISPATCH)ScsiPortCreateClose; + DriverObject->MajorFunction[IRP_MJ_CLOSE] = (PDRIVER_DISPATCH)ScsiPortCreateClose; + DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = (PDRIVER_DISPATCH)ScsiPortDeviceControl; + DriverObject->MajorFunction[IRP_MJ_SCSI] = (PDRIVER_DISPATCH)ScsiPortDispatchScsi; SystemConfig = IoGetConfigurationInformation(); @@ -514,6 +641,7 @@ ScsiPortInitialize(IN PVOID Argument1, ExtensionSize); PseudoDeviceExtension->Length = ExtensionSize; PseudoDeviceExtension->MiniPortExtensionSize = HwInitializationData->DeviceExtensionSize; + PseudoDeviceExtension->LunExtensionSize = HwInitializationData->SpecificLuExtensionSize; PseudoDeviceExtension->HwStartIo = HwInitializationData->HwStartIo; PseudoDeviceExtension->HwInterrupt = HwInitializationData->HwInterrupt; @@ -550,6 +678,12 @@ ScsiPortInitialize(IN PVOID Argument1, // RtlZeroMemory(AccessRanges, // sizeof(ACCESS_RANGE) * PortConfig->NumberOfAccessRanges); + PseudoDeviceExtension->AdapterObject = NULL; + PseudoDeviceExtension->MapRegisterCount = 0; + PseudoDeviceExtension->PhysicalAddress.QuadPart = 0ULL; + PseudoDeviceExtension->VirtualAddress = NULL; + PseudoDeviceExtension->CommonBufferLength = 0; + RtlZeroMemory(PseudoDeviceExtension->MiniPortDeviceExtension, PseudoDeviceExtension->MiniPortExtensionSize); @@ -581,9 +715,12 @@ ScsiPortInitialize(IN PVOID Argument1, return(Status); } + /* Get inquiry data */ + SpiInquirePort (RealDeviceExtension); + /* Build the registry device map */ - ScsiPortBuildDeviceMap(RealDeviceExtension, - (PUNICODE_STRING)Argument2); + SpiBuildDeviceMap (RealDeviceExtension, + (PUNICODE_STRING)Argument2); /* Update the configuration info */ SystemConfig->AtDiskPrimaryAddressClaimed = PortConfig->AtdiskPrimaryClaimed; @@ -614,6 +751,9 @@ ScsiPortInitialize(IN PVOID Argument1, } +/* + * @unimplemented + */ VOID STDCALL ScsiPortIoMapTransfer(IN PVOID HwDeviceExtension, IN PSCSI_REQUEST_BLOCK Srb, @@ -625,6 +765,9 @@ ScsiPortIoMapTransfer(IN PVOID HwDeviceExtension, } +/* + * @unimplemented + */ VOID STDCALL ScsiPortLogError(IN PVOID HwDeviceExtension, IN PSCSI_REQUEST_BLOCK Srb OPTIONAL, @@ -647,6 +790,9 @@ ScsiPortLogError(IN PVOID HwDeviceExtension, } +/* + * @implemented + */ VOID STDCALL ScsiPortMoveMemory(OUT PVOID Destination, IN PVOID Source, @@ -658,12 +804,16 @@ ScsiPortMoveMemory(OUT PVOID Destination, } +/* + * @implemented + */ VOID ScsiPortNotification(IN SCSI_NOTIFICATION_TYPE NotificationType, IN PVOID HwDeviceExtension, ...) { PSCSI_PORT_DEVICE_EXTENSION DeviceExtension; + va_list ap; DPRINT("ScsiPortNotification() called\n"); @@ -678,11 +828,19 @@ ScsiPortNotification(IN SCSI_NOTIFICATION_TYPE NotificationType, if (DeviceExtension->Initializing == TRUE) return; + va_start(ap, HwDeviceExtension); + switch (NotificationType) { case RequestComplete: - DPRINT("Notify: RequestComplete\n"); - DeviceExtension->IrpFlags |= IRP_FLAG_COMPLETE; + { + PSCSI_REQUEST_BLOCK Srb; + + Srb = (PSCSI_REQUEST_BLOCK) va_arg (ap, PSCSI_REQUEST_BLOCK); + + DPRINT("Notify: RequestComplete (Srb %p)\n", Srb); + DeviceExtension->IrpFlags |= IRP_FLAG_COMPLETE; + } break; case NextRequest: @@ -690,12 +848,42 @@ ScsiPortNotification(IN SCSI_NOTIFICATION_TYPE NotificationType, DeviceExtension->IrpFlags |= IRP_FLAG_NEXT; break; + case NextLuRequest: + { + UCHAR PathId; + UCHAR TargetId; + UCHAR Lun; + + PathId = (UCHAR) va_arg (ap, int); + TargetId = (UCHAR) va_arg (ap, int); + Lun = (UCHAR) va_arg (ap, int); + + DPRINT1 ("Notify: NextLuRequest(PathId %u TargetId %u Lun %u)\n", + PathId, TargetId, Lun); + /* FIXME: Implement it! */ + +// DeviceExtension->IrpFlags |= IRP_FLAG_NEXT_LU; + + } + break; + + case ResetDetected: + DPRINT1("Notify: ResetDetected\n"); + /* FIXME: ??? */ + break; + default: + DPRINT1 ("Unsupported notification %lu\n", NotificationType); break; } + + va_end(ap); } +/* + * @implemented + */ ULONG STDCALL ScsiPortSetBusDataByOffset(IN PVOID DeviceExtension, IN ULONG BusDataType, @@ -715,6 +903,9 @@ ScsiPortSetBusDataByOffset(IN PVOID DeviceExtension, } +/* + * @implemented + */ BOOLEAN STDCALL ScsiPortValidateRange(IN PVOID HwDeviceExtension, IN INTERFACE_TYPE BusType, @@ -791,6 +982,7 @@ ScsiPortDispatchScsi(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp) { PSCSI_PORT_DEVICE_EXTENSION DeviceExtension; + PSCSI_PORT_LUN_EXTENSION LunExtension; PIO_STACK_LOCATION Stack; PSCSI_REQUEST_BLOCK Srb; NTSTATUS Status = STATUS_SUCCESS; @@ -819,10 +1011,52 @@ ScsiPortDispatchScsi(IN PDEVICE_OBJECT DeviceObject, DPRINT("Srb->Function: %lu\n", Srb->Function); DPRINT("PathId: %lu TargetId: %lu Lun: %lu\n", Srb->PathId, Srb->TargetId, Srb->Lun); + LunExtension = SpiGetLunExtension(DeviceExtension, + Srb->PathId, + Srb->TargetId, + Srb->Lun); + if (LunExtension == NULL) + { + Status = STATUS_NO_SUCH_DEVICE; + + Srb->SrbStatus = SRB_STATUS_NO_DEVICE; + Irp->IoStatus.Status = Status; + Irp->IoStatus.Information = 0; + + IoCompleteRequest(Irp, IO_NO_INCREMENT); + + return(Status); + } + switch (Srb->Function) { case SRB_FUNCTION_EXECUTE_SCSI: - IoStartPacket(DeviceObject, Irp, NULL, NULL); + case SRB_FUNCTION_IO_CONTROL: +#ifdef USE_DEVICE_QUEUES + if (Srb->SrbFlags & SRB_FLAGS_BYPASS_FROZEN_QUEUE) + { + IoStartPacket (DeviceObject, Irp, NULL, NULL); + } + else + { + KIRQL oldIrql; + + KeRaiseIrql (DISPATCH_LEVEL, + &oldIrql); + + if (!KeInsertByKeyDeviceQueue (&LunExtension->DeviceQueue, + &Irp->Tail.Overlay.DeviceQueueEntry, + Srb->QueueSortKey)) + { + Srb->SrbStatus = SRB_STATUS_SUCCESS; + IoStartPacket (DeviceObject, Irp, NULL, NULL); + } + + KeLowerIrql (oldIrql); + } +#else + IoStartPacket (DeviceObject, Irp, NULL, NULL); +#endif return(STATUS_PENDING); case SRB_FUNCTION_SHUTDOWN: @@ -835,89 +1069,32 @@ ScsiPortDispatchScsi(IN PDEVICE_OBJECT DeviceObject, break; case SRB_FUNCTION_CLAIM_DEVICE: - { - PSCSI_ADAPTER_BUS_INFO AdapterInfo; - PSCSI_INQUIRY_DATA UnitInfo; - PINQUIRYDATA InquiryData; - - DPRINT(" SRB_FUNCTION_CLAIM_DEVICE\n"); - DPRINT("PathId: %lu TargetId: %lu Lun: %lu\n", Srb->PathId, Srb->TargetId, Srb->Lun); - - Srb->DataBuffer = NULL; - - if (DeviceExtension->PortBusInfo != NULL) - { - AdapterInfo = (PSCSI_ADAPTER_BUS_INFO)DeviceExtension->PortBusInfo; - - if (AdapterInfo->BusData[Srb->PathId].NumberOfLogicalUnits == 0) - break; - - UnitInfo = (PSCSI_INQUIRY_DATA)((PUCHAR)AdapterInfo + - AdapterInfo->BusData[Srb->PathId].InquiryDataOffset); - - while (AdapterInfo->BusData[Srb->PathId].InquiryDataOffset) - { - InquiryData = (PINQUIRYDATA)UnitInfo->InquiryData; - - if ((UnitInfo->TargetId == Srb->TargetId) && - (UnitInfo->Lun == Srb->Lun) && - (UnitInfo->DeviceClaimed == FALSE)) - { - UnitInfo->DeviceClaimed = TRUE; - DPRINT("Claimed device!\n"); - - /* FIXME: Hack!!!!! */ - Srb->DataBuffer = DeviceObject; + DPRINT(" SRB_FUNCTION_CLAIM_DEVICE\n"); - break; - } - - if (UnitInfo->NextInquiryDataOffset == 0) - break; - - UnitInfo = (PSCSI_INQUIRY_DATA)((PUCHAR)AdapterInfo + UnitInfo->NextInquiryDataOffset); - } - } - } + /* Reference device object and keep the pointer */ + ObReferenceObject(DeviceObject); + LunExtension->DeviceObject = DeviceObject; + LunExtension->DeviceClaimed = TRUE; + Srb->DataBuffer = DeviceObject; break; case SRB_FUNCTION_RELEASE_DEVICE: { - PSCSI_ADAPTER_BUS_INFO AdapterInfo; - PSCSI_INQUIRY_DATA UnitInfo; - PINQUIRYDATA InquiryData; + PSCSI_PORT_LUN_EXTENSION LunExtension; DPRINT(" SRB_FUNCTION_RELEASE_DEVICE\n"); DPRINT("PathId: %lu TargetId: %lu Lun: %lu\n", Srb->PathId, Srb->TargetId, Srb->Lun); - if (DeviceExtension->PortBusInfo != NULL) + LunExtension = SpiGetLunExtension(DeviceExtension, + Srb->PathId, + Srb->TargetId, + Srb->Lun); + if (LunExtension != NULL) { - AdapterInfo = (PSCSI_ADAPTER_BUS_INFO)DeviceExtension->PortBusInfo; - - if (AdapterInfo->BusData[Srb->PathId].NumberOfLogicalUnits == 0) - break; - - UnitInfo = (PSCSI_INQUIRY_DATA)((PUCHAR)AdapterInfo + - AdapterInfo->BusData[Srb->PathId].InquiryDataOffset); - - while (AdapterInfo->BusData[Srb->PathId].InquiryDataOffset) - { - InquiryData = (PINQUIRYDATA)UnitInfo->InquiryData; - - if ((UnitInfo->TargetId == Srb->TargetId) && - (UnitInfo->Lun == Srb->Lun) && - (UnitInfo->DeviceClaimed == TRUE)) - { - UnitInfo->DeviceClaimed = FALSE; - DPRINT("Released device!\n"); - break; - } - - if (UnitInfo->NextInquiryDataOffset == 0) - break; - - UnitInfo = (PSCSI_INQUIRY_DATA)((PUCHAR)AdapterInfo + UnitInfo->NextInquiryDataOffset); - } + /* Dereference device object */ + ObDereferenceObject(LunExtension->DeviceObject); + LunExtension->DeviceObject = NULL; + LunExtension->DeviceClaimed = FALSE; } } break; @@ -972,6 +1149,16 @@ ScsiPortDeviceControl(IN PDEVICE_OBJECT DeviceObject, switch (Stack->Parameters.DeviceIoControl.IoControlCode) { + case IOCTL_SCSI_GET_DUMP_POINTERS: + { + PDUMP_POINTERS DumpPointers; + DPRINT(" IOCTL_SCSI_GET_DUMP_POINTERS\n"); + DumpPointers = (PDUMP_POINTERS)Irp->AssociatedIrp.SystemBuffer; + DumpPointers->DeviceObject = DeviceObject; + + Irp->IoStatus.Information = sizeof(DUMP_POINTERS); + } + break; case IOCTL_SCSI_GET_CAPABILITIES: { @@ -989,12 +1176,10 @@ ScsiPortDeviceControl(IN PDEVICE_OBJECT DeviceObject, DPRINT(" IOCTL_SCSI_GET_INQUIRY_DATA\n"); /* Copy inquiry data to the port device extension */ - memcpy(Irp->AssociatedIrp.SystemBuffer, - DeviceExtension->PortBusInfo, - DeviceExtension->PortBusInfoSize); - - DPRINT("BufferSize: %lu\n", DeviceExtension->PortBusInfoSize); - Irp->IoStatus.Information = DeviceExtension->PortBusInfoSize; + Irp->IoStatus.Information = + SpiGetInquiryData(DeviceExtension, + Irp->AssociatedIrp.SystemBuffer); + DPRINT("Inquiry data size: %lu\n", Irp->IoStatus.Information); } break; @@ -1015,79 +1200,88 @@ ScsiPortStartIo(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp) { PSCSI_PORT_DEVICE_EXTENSION DeviceExtension; + PSCSI_PORT_LUN_EXTENSION LunExtension; PIO_STACK_LOCATION IrpStack; - KIRQL OldIrql; + PSCSI_REQUEST_BLOCK Srb; + KIRQL oldIrql; + BOOLEAN Result; DPRINT("ScsiPortStartIo() called!\n"); DeviceExtension = DeviceObject->DeviceExtension; IrpStack = IoGetCurrentIrpStackLocation(Irp); - // FIXME: implement the supported functions + DPRINT("DeviceExtension %p\n", DeviceExtension); - switch (IrpStack->MajorFunction) + if (IrpStack->MajorFunction != IRP_MJ_SCSI) { - case IRP_MJ_SCSI: - { - BOOLEAN Result; - PSCSI_REQUEST_BLOCK Srb; - KIRQL oldIrql; + DPRINT("No IRP_MJ_SCSI!\n"); + Irp->IoStatus.Status = STATUS_NOT_SUPPORTED; + Irp->IoStatus.Information = 0; + IoCompleteRequest (Irp, + IO_NO_INCREMENT); + IoStartNextPacket (DeviceObject, + FALSE); + return; + } - DPRINT("IRP_MJ_SCSI\n"); + Srb = IrpStack->Parameters.Scsi.Srb; - Srb = IrpStack->Parameters.Scsi.Srb; + LunExtension = SpiGetLunExtension(DeviceExtension, + Srb->PathId, + Srb->TargetId, + Srb->Lun); + if (LunExtension == NULL) + { + DPRINT("No IRP_MJ_SCSI!\n"); + Irp->IoStatus.Status = STATUS_NO_SUCH_DEVICE; + Irp->IoStatus.Information = 0; + IoCompleteRequest (Irp, + IO_NO_INCREMENT); + IoStartNextPacket (DeviceObject, + FALSE); + return; + } - DPRINT("DeviceExtension %p\n", DeviceExtension); + Irp->IoStatus.Status = STATUS_SUCCESS; + Irp->IoStatus.Information = Srb->DataTransferLength; - Irp->IoStatus.Status = STATUS_SUCCESS; - Irp->IoStatus.Information = Srb->DataTransferLength; + DeviceExtension->CurrentIrp = Irp; - DeviceExtension->CurrentIrp = Irp; + if (!KeSynchronizeExecution(DeviceExtension->Interrupt, + ScsiPortStartPacket, + DeviceExtension)) + { + DPRINT("Synchronization failed!\n"); - if (!KeSynchronizeExecution(DeviceExtension->Interrupt, - ScsiPortStartPacket, - DeviceExtension)) - { - DPRINT("Synchronization failed!\n"); - - Irp->IoStatus.Status = STATUS_UNSUCCESSFUL; - Irp->IoStatus.Information = 0; - IoCompleteRequest(Irp, - IO_NO_INCREMENT); - IoStartNextPacket(DeviceObject, - FALSE); - } - KeAcquireSpinLock(&DeviceExtension->IrpLock, &oldIrql); - if (DeviceExtension->IrpFlags & IRP_FLAG_COMPLETE) - { - DeviceExtension->IrpFlags &= ~IRP_FLAG_COMPLETE; - IoCompleteRequest(Irp, - IO_NO_INCREMENT); - } + Irp->IoStatus.Status = STATUS_UNSUCCESSFUL; + Irp->IoStatus.Information = 0; + IoCompleteRequest(Irp, + IO_NO_INCREMENT); + IoStartNextPacket(DeviceObject, + FALSE); + } - if (DeviceExtension->IrpFlags & IRP_FLAG_NEXT) - { - DeviceExtension->IrpFlags &= ~IRP_FLAG_NEXT; - KeReleaseSpinLock(&DeviceExtension->IrpLock, oldIrql); - IoStartNextPacket(DeviceObject, - FALSE); - } - else - { - KeReleaseSpinLock(&DeviceExtension->IrpLock, oldIrql); - } - } - break; + KeAcquireSpinLock(&DeviceExtension->IrpLock, &oldIrql); + if (DeviceExtension->IrpFlags & IRP_FLAG_COMPLETE) + { + DeviceExtension->IrpFlags &= ~IRP_FLAG_COMPLETE; + IoCompleteRequest(Irp, + IO_NO_INCREMENT); + } - default: - Irp->IoStatus.Status = STATUS_NOT_SUPPORTED; - Irp->IoStatus.Information = 0; - IoCompleteRequest(Irp, - IO_NO_INCREMENT); - IoStartNextPacket(DeviceObject, - FALSE); - break; + if (DeviceExtension->IrpFlags & IRP_FLAG_NEXT) + { + DeviceExtension->IrpFlags &= ~IRP_FLAG_NEXT; + KeReleaseSpinLock(&DeviceExtension->IrpLock, oldIrql); + IoStartNextPacket(DeviceObject, + FALSE); + } + else + { + KeReleaseSpinLock(&DeviceExtension->IrpLock, oldIrql); } + DPRINT("ScsiPortStartIo() done\n"); } @@ -1250,6 +1444,7 @@ ScsiPortCreatePortDevice(IN PDRIVER_OBJECT DriverObject, { DbgPrint("Could not Connect Interrupt %d\n", PortDeviceExtension->PortConfig.BusInterruptVector); + IoDeleteDevice(PortDeviceObject); return(Status); } @@ -1282,13 +1477,10 @@ ScsiPortCreatePortDevice(IN PDRIVER_OBJECT DriverObject, PortDeviceExtension->PortConfig.AdapterScansDown; PortCapabilities->AdapterUsesPio = TRUE; /* FIXME */ - /* Initialize inquiry data */ - PortDeviceExtension->PortBusInfoSize = 0; - PortDeviceExtension->PortBusInfo = NULL; + /* Initialize LUN-Extension list */ + InitializeListHead(&PortDeviceExtension->LunExtensionListHead); DPRINT("DeviceExtension %p\n", PortDeviceExtension); - ScsiPortInquire(PortDeviceExtension); - /* FIXME: Copy more configuration data? */ @@ -1311,98 +1503,212 @@ ScsiPortCreatePortDevice(IN PDRIVER_OBJECT DriverObject, } +static PSCSI_PORT_LUN_EXTENSION +SpiAllocateLunExtension (IN PSCSI_PORT_DEVICE_EXTENSION DeviceExtension, + IN UCHAR PathId, + IN UCHAR TargetId, + IN UCHAR Lun) +{ + PSCSI_PORT_LUN_EXTENSION LunExtension; + ULONG LunExtensionSize; + + DPRINT("SpiAllocateLunExtension (%p %u %u %u)\n", + DeviceExtension, PathId, TargetId, Lun); + + LunExtensionSize = + sizeof(SCSI_PORT_LUN_EXTENSION) + DeviceExtension->LunExtensionSize; + DPRINT("LunExtensionSize %lu\n", LunExtensionSize); + + LunExtension = ExAllocatePool(NonPagedPool, + LunExtensionSize); + if (LunExtension == NULL) + { + return NULL; + } + + RtlZeroMemory(LunExtension, + LunExtensionSize); + + InsertTailList(&DeviceExtension->LunExtensionListHead, + &LunExtension->List); + + LunExtension->PathId = PathId; + LunExtension->TargetId = TargetId; + LunExtension->Lun = Lun; + + KeInitializeDeviceQueue (&LunExtension->DeviceQueue); + + return LunExtension; +} + + +static PSCSI_PORT_LUN_EXTENSION +SpiGetLunExtension (IN PSCSI_PORT_DEVICE_EXTENSION DeviceExtension, + IN UCHAR PathId, + IN UCHAR TargetId, + IN UCHAR Lun) +{ + PSCSI_PORT_LUN_EXTENSION LunExtension; + PLIST_ENTRY Entry; + + DPRINT("SpiGetLunExtension(%p %u %u %u) called\n", + DeviceExtension, PathId, TargetId, Lun); + + if (IsListEmpty(&DeviceExtension->LunExtensionListHead)) + return NULL; + + Entry = DeviceExtension->LunExtensionListHead.Flink; + while (Entry != &DeviceExtension->LunExtensionListHead) + { + LunExtension = CONTAINING_RECORD(Entry, + SCSI_PORT_LUN_EXTENSION, + List); + if (LunExtension->PathId == PathId && + LunExtension->TargetId == TargetId && + LunExtension->Lun == Lun) + { + return LunExtension; + } + + Entry = Entry->Flink; + } + + return NULL; +} + + static VOID -ScsiPortInquire(PSCSI_PORT_DEVICE_EXTENSION DeviceExtension) +SpiInquirePort(PSCSI_PORT_DEVICE_EXTENSION DeviceExtension) { - PSCSI_ADAPTER_BUS_INFO AdapterInfo; - PSCSI_INQUIRY_DATA UnitInfo, PrevUnit; + PSCSI_PORT_LUN_EXTENSION LunExtension; SCSI_REQUEST_BLOCK Srb; ULONG Bus; ULONG Target; - ULONG UnitCount; - ULONG DataSize; + ULONG Lun; BOOLEAN Result; - DPRINT("ScsiPortInquire() called\n"); + DPRINT("SpiInquirePort() called\n"); DeviceExtension->Initializing = TRUE; - /* Copy inquiry data to the port device extension */ - AdapterInfo =(PSCSI_ADAPTER_BUS_INFO)ExAllocatePool(NonPagedPool, 4096); - RtlZeroMemory(AdapterInfo, 4096); - AdapterInfo->NumberOfBuses = DeviceExtension->PortConfig.NumberOfBuses; - - UnitInfo = (PSCSI_INQUIRY_DATA) - ((PUCHAR)AdapterInfo + sizeof(SCSI_ADAPTER_BUS_INFO) + - (sizeof(SCSI_BUS_DATA) * (AdapterInfo->NumberOfBuses - 1))); - RtlZeroMemory(&Srb, sizeof(SCSI_REQUEST_BLOCK)); + Srb.SrbFlags = SRB_FLAGS_DATA_IN; Srb.DataBuffer = ExAllocatePool(NonPagedPool, 256); Srb.Function = SRB_FUNCTION_EXECUTE_SCSI; Srb.DataTransferLength = 256; Srb.Cdb[0] = SCSIOP_INQUIRY; - for (Bus = 0; Bus < AdapterInfo->NumberOfBuses; Bus++) + for (Bus = 0; Bus < DeviceExtension->PortConfig.NumberOfBuses; Bus++) { Srb.PathId = Bus; - AdapterInfo->BusData[Bus].InitiatorBusId = - DeviceExtension->PortConfig.InitiatorBusId[Bus]; - AdapterInfo->BusData[Bus].InquiryDataOffset = - (ULONG)((PUCHAR)UnitInfo - (PUCHAR)AdapterInfo); - - PrevUnit = NULL; - UnitCount = 0; - for (Target = 0; Target < DeviceExtension->PortConfig.MaximumNumberOfTargets; Target++) { Srb.TargetId = Target; - Srb.Lun = 0; - Srb.SrbStatus = SRB_STATUS_SUCCESS; - - Result = DeviceExtension->HwStartIo(&DeviceExtension->MiniPortDeviceExtension, - &Srb); - DPRINT("Result: %s Srb.SrbStatus %lx\n", (Result)?"True":"False", Srb.SrbStatus); - if (Result == TRUE && Srb.SrbStatus == SRB_STATUS_SUCCESS) + for (Lun = 0; Lun < SCSI_MAXIMUM_LOGICAL_UNITS; Lun++) { - UnitInfo->PathId = Bus; - UnitInfo->TargetId = Target; - UnitInfo->Lun = 0; - UnitInfo->InquiryDataLength = INQUIRYDATABUFFERSIZE; - memcpy(&UnitInfo->InquiryData, - Srb.DataBuffer, - INQUIRYDATABUFFERSIZE); - if (PrevUnit != NULL) - PrevUnit->NextInquiryDataOffset = (ULONG)((PUCHAR)UnitInfo-(PUCHAR)AdapterInfo); - PrevUnit = UnitInfo; - UnitInfo = (PSCSI_INQUIRY_DATA)((PUCHAR)UnitInfo + sizeof(SCSI_INQUIRY_DATA)+INQUIRYDATABUFFERSIZE-1); - UnitCount++; + Srb.Lun = Lun; + Srb.SrbStatus = SRB_STATUS_SUCCESS; + + Result = DeviceExtension->HwStartIo(&DeviceExtension->MiniPortDeviceExtension, + &Srb); + DPRINT("Result %s Srb.SrbStatus %lx\n", (Result) ? "TRUE" : "FALSE", Srb.SrbStatus); + + if (Result == TRUE && Srb.SrbStatus == SRB_STATUS_SUCCESS) + { + LunExtension = SpiAllocateLunExtension(DeviceExtension, + Bus, + Target, + Lun); + if (LunExtension != NULL) + { + /* Copy inquiry data */ + memcpy(&LunExtension->InquiryData, + Srb.DataBuffer, + sizeof(INQUIRYDATA)); + } + } } } - DPRINT("UnitCount: %lu\n", UnitCount); - AdapterInfo->BusData[Bus].NumberOfLogicalUnits = UnitCount; - if (UnitCount == 0) - AdapterInfo->BusData[Bus].InquiryDataOffset = 0; } - DataSize = (ULONG)((PUCHAR)UnitInfo-(PUCHAR)AdapterInfo); ExFreePool(Srb.DataBuffer); DeviceExtension->Initializing = FALSE; - /* copy inquiry data to the port driver's device extension */ - DeviceExtension->PortBusInfoSize = DataSize; - DeviceExtension->PortBusInfo = ExAllocatePool(NonPagedPool, - DataSize); - RtlCopyMemory(DeviceExtension->PortBusInfo, - AdapterInfo, - DataSize); + DPRINT("SpiInquirePort() done\n"); +} + + +static ULONG +SpiGetInquiryData(IN PSCSI_PORT_DEVICE_EXTENSION DeviceExtension, + OUT PSCSI_ADAPTER_BUS_INFO AdapterBusInfo) +{ + PSCSI_PORT_LUN_EXTENSION LunExtension; + PSCSI_INQUIRY_DATA UnitInfo, PrevUnit; + ULONG Bus; + ULONG Target; + ULONG Lun; + ULONG UnitCount; + + DPRINT("SpiGetInquiryData() called\n"); + + /* Copy inquiry data to the port device extension */ + AdapterBusInfo->NumberOfBuses = DeviceExtension->PortConfig.NumberOfBuses; + + UnitInfo = (PSCSI_INQUIRY_DATA) + ((PUCHAR)AdapterBusInfo + sizeof(SCSI_ADAPTER_BUS_INFO) + + (sizeof(SCSI_BUS_DATA) * (AdapterBusInfo->NumberOfBuses - 1))); + + for (Bus = 0; Bus < AdapterBusInfo->NumberOfBuses; Bus++) + { + AdapterBusInfo->BusData[Bus].InitiatorBusId = + DeviceExtension->PortConfig.InitiatorBusId[Bus]; + AdapterBusInfo->BusData[Bus].InquiryDataOffset = + (ULONG)((PUCHAR)UnitInfo - (PUCHAR)AdapterBusInfo); + + PrevUnit = NULL; + UnitCount = 0; + + for (Target = 0; Target < DeviceExtension->PortConfig.MaximumNumberOfTargets; Target++) + { + for (Lun = 0; Lun < SCSI_MAXIMUM_LOGICAL_UNITS; Lun++) + { + LunExtension = SpiGetLunExtension(DeviceExtension, + Bus, + Target, + Lun); + if (LunExtension != NULL) + { + DPRINT("(Bus %lu Target %lu Lun %lu)\n", + Bus, Target, Lun); + + UnitInfo->PathId = Bus; + UnitInfo->TargetId = Target; + UnitInfo->Lun = Lun; + UnitInfo->InquiryDataLength = INQUIRYDATABUFFERSIZE; + memcpy(&UnitInfo->InquiryData, + &LunExtension->InquiryData, + INQUIRYDATABUFFERSIZE); + if (PrevUnit != NULL) + PrevUnit->NextInquiryDataOffset = (ULONG)((PUCHAR)UnitInfo-(PUCHAR)AdapterBusInfo); + PrevUnit = UnitInfo; + UnitInfo = (PSCSI_INQUIRY_DATA)((PUCHAR)UnitInfo + sizeof(SCSI_INQUIRY_DATA)+INQUIRYDATABUFFERSIZE-1); + UnitCount++; + } + } + } + DPRINT("UnitCount: %lu\n", UnitCount); + AdapterBusInfo->BusData[Bus].NumberOfLogicalUnits = UnitCount; + if (UnitCount == 0) + AdapterBusInfo->BusData[Bus].InquiryDataOffset = 0; + } - ExFreePool(AdapterInfo); + DPRINT("Data size: %lu\n", (ULONG)UnitInfo - (ULONG)AdapterBusInfo); - DPRINT("ScsiPortInquire() done\n"); + return (ULONG)((PUCHAR)UnitInfo-(PUCHAR)AdapterBusInfo); } @@ -1457,93 +1763,93 @@ ScsiPortDpcForIsr(IN PKDPC Dpc, KIRQL oldIrql; DPRINT("ScsiPortDpcForIsr(Dpc %p DpcDeviceObject %p DpcIrp %p DpcContext %p)\n", - Dpc, DpcDeviceObject, DpcIrp, DpcContext); + Dpc, DpcDeviceObject, DpcIrp, DpcContext); DeviceExtension = (PSCSI_PORT_DEVICE_EXTENSION)DpcContext; KeAcquireSpinLock(&DeviceExtension->IrpLock, &oldIrql); if (DeviceExtension->IrpFlags) - { - IrpStack = IoGetCurrentIrpStackLocation(DeviceExtension->CurrentIrp); - Srb = IrpStack->Parameters.Scsi.Srb; - - if (DeviceExtension->OriginalSrb != NULL) { - DPRINT("Got sense data!\n"); - - DPRINT("Valid: %x\n", DeviceExtension->InternalSenseData.Valid); - DPRINT("ErrorCode: %x\n", DeviceExtension->InternalSenseData.ErrorCode); - DPRINT("SenseKey: %x\n", DeviceExtension->InternalSenseData.SenseKey); - DPRINT("SenseCode: %x\n", DeviceExtension->InternalSenseData.AdditionalSenseCode); + IrpStack = IoGetCurrentIrpStackLocation(DeviceExtension->CurrentIrp); + Srb = IrpStack->Parameters.Scsi.Srb; - /* Copy sense data */ - if (DeviceExtension->OriginalSrb->SenseInfoBufferLength != 0) + if (DeviceExtension->OriginalSrb != NULL) { - RtlCopyMemory(DeviceExtension->OriginalSrb->SenseInfoBuffer, - &DeviceExtension->InternalSenseData, - sizeof(SENSE_DATA)); - DeviceExtension->OriginalSrb->SrbStatus |= SRB_STATUS_AUTOSENSE_VALID; - } + DPRINT("Got sense data!\n"); - /* Clear current sense data */ - RtlZeroMemory(&DeviceExtension->InternalSenseData, sizeof(SENSE_DATA)); + DPRINT("Valid: %x\n", DeviceExtension->InternalSenseData.Valid); + DPRINT("ErrorCode: %x\n", DeviceExtension->InternalSenseData.ErrorCode); + DPRINT("SenseKey: %x\n", DeviceExtension->InternalSenseData.SenseKey); + DPRINT("SenseCode: %x\n", DeviceExtension->InternalSenseData.AdditionalSenseCode); - IrpStack->Parameters.Scsi.Srb = DeviceExtension->OriginalSrb; - DeviceExtension->OriginalSrb = NULL; - } - else if ((SRB_STATUS(Srb->SrbStatus) != SRB_STATUS_SUCCESS) && - (Srb->ScsiStatus == SCSISTAT_CHECK_CONDITION)) - { - DPRINT("SCSIOP_REQUEST_SENSE required!\n"); + /* Copy sense data */ + if (DeviceExtension->OriginalSrb->SenseInfoBufferLength != 0) + { + RtlCopyMemory(DeviceExtension->OriginalSrb->SenseInfoBuffer, + &DeviceExtension->InternalSenseData, + sizeof(SENSE_DATA)); + DeviceExtension->OriginalSrb->SrbStatus |= SRB_STATUS_AUTOSENSE_VALID; + } - DeviceExtension->OriginalSrb = Srb; - IrpStack->Parameters.Scsi.Srb = ScsiPortInitSenseRequestSrb(DeviceExtension, - Srb); - KeReleaseSpinLock(&DeviceExtension->IrpLock, oldIrql); - if (!KeSynchronizeExecution(DeviceExtension->Interrupt, - ScsiPortStartPacket, - DeviceExtension)) - { - DPRINT("Synchronization failed!\n"); + /* Clear current sense data */ + RtlZeroMemory(&DeviceExtension->InternalSenseData, sizeof(SENSE_DATA)); - DpcIrp->IoStatus.Status = STATUS_UNSUCCESSFUL; - DpcIrp->IoStatus.Information = 0; - IoCompleteRequest(DpcIrp, - IO_NO_INCREMENT); - IoStartNextPacket(DpcDeviceObject, - FALSE); + IrpStack->Parameters.Scsi.Srb = DeviceExtension->OriginalSrb; + DeviceExtension->OriginalSrb = NULL; } + else if ((SRB_STATUS(Srb->SrbStatus) != SRB_STATUS_SUCCESS) && + (Srb->ScsiStatus == SCSISTAT_CHECK_CONDITION)) + { + DPRINT("SCSIOP_REQUEST_SENSE required!\n"); - return; - } + DeviceExtension->OriginalSrb = Srb; + IrpStack->Parameters.Scsi.Srb = ScsiPortInitSenseRequestSrb(DeviceExtension, + Srb); + KeReleaseSpinLock(&DeviceExtension->IrpLock, oldIrql); + if (!KeSynchronizeExecution(DeviceExtension->Interrupt, + ScsiPortStartPacket, + DeviceExtension)) + { + DPRINT1("Synchronization failed!\n"); + + DpcIrp->IoStatus.Status = STATUS_UNSUCCESSFUL; + DpcIrp->IoStatus.Information = 0; + IoCompleteRequest(DpcIrp, + IO_NO_INCREMENT); + IoStartNextPacket(DpcDeviceObject, + FALSE); + } - DeviceExtension->CurrentIrp = NULL; + return; + } + DeviceExtension->CurrentIrp = NULL; -// DpcIrp->IoStatus.Information = 0; -// DpcIrp->IoStatus.Status = STATUS_SUCCESS; +// DpcIrp->IoStatus.Information = 0; +// DpcIrp->IoStatus.Status = STATUS_SUCCESS; - if (DeviceExtension->IrpFlags & IRP_FLAG_COMPLETE) - { - DeviceExtension->IrpFlags &= ~IRP_FLAG_COMPLETE; - IoCompleteRequest(DpcIrp, IO_NO_INCREMENT); - } + if (DeviceExtension->IrpFlags & IRP_FLAG_COMPLETE) + { + DeviceExtension->IrpFlags &= ~IRP_FLAG_COMPLETE; + IoCompleteRequest(DpcIrp, IO_NO_INCREMENT); + } - if (DeviceExtension->IrpFlags & IRP_FLAG_NEXT) - { - DeviceExtension->IrpFlags &= ~IRP_FLAG_NEXT; - KeReleaseSpinLock(&DeviceExtension->IrpLock, oldIrql); - IoStartNextPacket(DpcDeviceObject, FALSE); + if (DeviceExtension->IrpFlags & IRP_FLAG_NEXT) + { + DeviceExtension->IrpFlags &= ~IRP_FLAG_NEXT; + KeReleaseSpinLock(&DeviceExtension->IrpLock, oldIrql); + IoStartNextPacket(DpcDeviceObject, FALSE); + } + else + { + KeReleaseSpinLock(&DeviceExtension->IrpLock, oldIrql); + } } - else + else { KeReleaseSpinLock(&DeviceExtension->IrpLock, oldIrql); } - } - else - { - KeReleaseSpinLock(&DeviceExtension->IrpLock, oldIrql); - } + DPRINT("ScsiPortDpcForIsr() done\n"); } @@ -1608,7 +1914,7 @@ ScsiPortFreeSenseRequestSrb(PSCSI_PORT_DEVICE_EXTENSION DeviceExtension) /********************************************************************** * NAME INTERNAL - * ScsiPortBuildDeviceMap + * SpiBuildDeviceMap * * DESCRIPTION * Builds the registry device map of all device which are attached @@ -1630,31 +1936,31 @@ ScsiPortFreeSenseRequestSrb(PSCSI_PORT_DEVICE_EXTENSION DeviceExtension) */ static NTSTATUS -ScsiPortBuildDeviceMap(PSCSI_PORT_DEVICE_EXTENSION DeviceExtension, - PUNICODE_STRING RegistryPath) +SpiBuildDeviceMap (PSCSI_PORT_DEVICE_EXTENSION DeviceExtension, + PUNICODE_STRING RegistryPath) { + PSCSI_PORT_LUN_EXTENSION LunExtension; OBJECT_ATTRIBUTES ObjectAttributes; UNICODE_STRING KeyName; UNICODE_STRING ValueName; WCHAR NameBuffer[64]; ULONG Disposition; HANDLE ScsiKey; - HANDLE ScsiPortKey; - HANDLE ScsiBusKey; - HANDLE ScsiInitiatorKey; - HANDLE ScsiTargetKey; - HANDLE ScsiLunKey; + HANDLE ScsiPortKey = NULL; + HANDLE ScsiBusKey = NULL; + HANDLE ScsiInitiatorKey = NULL; + HANDLE ScsiTargetKey = NULL; + HANDLE ScsiLunKey = NULL; ULONG BusNumber; - UCHAR CurrentTarget; - PSCSI_ADAPTER_BUS_INFO AdapterInfo; - PSCSI_INQUIRY_DATA UnitInfo; - PINQUIRYDATA InquiryData; + ULONG Target; + ULONG CurrentTarget; + ULONG Lun; PWCHAR DriverName; ULONG UlongData; PWCHAR TypeName; NTSTATUS Status; - DPRINT("ScsiPortBuildDeviceMap() called\n"); + DPRINT("SpiBuildDeviceMap() called\n"); if (DeviceExtension == NULL || RegistryPath == NULL) { @@ -1811,8 +2117,7 @@ ScsiPortBuildDeviceMap(PSCSI_PORT_DEVICE_EXTENSION DeviceExtension, if (!NT_SUCCESS(Status)) { DPRINT("ZwCreateKey() failed (Status %lx)\n", Status); - ZwClose(ScsiPortKey); - return(Status); + goto ByeBye; } /* Create 'Initiator Id X' key */ @@ -1838,50 +2143,78 @@ ScsiPortBuildDeviceMap(PSCSI_PORT_DEVICE_EXTENSION DeviceExtension, if (!NT_SUCCESS(Status)) { DPRINT("ZwCreateKey() failed (Status %lx)\n", Status); - ZwClose(ScsiBusKey); - ZwClose(ScsiPortKey); - return(Status); + goto ByeBye; } /* FIXME: Are there any initiator values (??) */ ZwClose(ScsiInitiatorKey); + ScsiInitiatorKey = NULL; /* Enumerate targets */ - CurrentTarget = (UCHAR)-1; + CurrentTarget = (ULONG)-1; ScsiTargetKey = NULL; - AdapterInfo = (PSCSI_ADAPTER_BUS_INFO)DeviceExtension->PortBusInfo; - if (AdapterInfo->BusData[BusNumber].NumberOfLogicalUnits != 0) + for (Target = 0; Target < DeviceExtension->PortConfig.MaximumNumberOfTargets; Target++) { - UnitInfo = (PSCSI_INQUIRY_DATA)((PUCHAR)AdapterInfo + - AdapterInfo->BusData[BusNumber].InquiryDataOffset); - - while (AdapterInfo->BusData[BusNumber].InquiryDataOffset) + for (Lun = 0; Lun < SCSI_MAXIMUM_LOGICAL_UNITS; Lun++) { - if (UnitInfo->TargetId != CurrentTarget) + LunExtension = SpiGetLunExtension(DeviceExtension, + BusNumber, + Target, + Lun); + if (LunExtension != NULL) { - /* Close old target key */ - if (ScsiTargetKey != NULL) + if (Target != CurrentTarget) { - ZwClose(ScsiTargetKey); - ScsiTargetKey = NULL; + /* Close old target key */ + if (ScsiTargetKey != NULL) + { + ZwClose(ScsiTargetKey); + ScsiTargetKey = NULL; + } + + /* Create 'Target Id X' key */ + DPRINT(" Target Id %lu\n", Target); + swprintf(NameBuffer, + L"Target Id %lu", + Target); + RtlInitUnicodeString(&KeyName, + NameBuffer); + InitializeObjectAttributes(&ObjectAttributes, + &KeyName, + 0, + ScsiBusKey, + NULL); + Status = ZwCreateKey(&ScsiTargetKey, + KEY_ALL_ACCESS, + &ObjectAttributes, + 0, + NULL, + REG_OPTION_VOLATILE, + &Disposition); + if (!NT_SUCCESS(Status)) + { + DPRINT("ZwCreateKey() failed (Status %lx)\n", Status); + goto ByeBye; + } + + CurrentTarget = Target; } - /* Create 'Target Id X' key */ - DPRINT(" Target Id %u\n", - UnitInfo->TargetId); + /* Create 'Logical Unit Id X' key */ + DPRINT(" Logical Unit Id %lu\n", Lun); swprintf(NameBuffer, - L"Target Id %u", - UnitInfo->TargetId); + L"Logical Unit Id %lu", + Lun); RtlInitUnicodeString(&KeyName, NameBuffer); InitializeObjectAttributes(&ObjectAttributes, &KeyName, 0, - ScsiBusKey, + ScsiTargetKey, NULL); - Status = ZwCreateKey(&ScsiTargetKey, + Status = ZwCreateKey(&ScsiLunKey, KEY_ALL_ACCESS, &ObjectAttributes, 0, @@ -1891,132 +2224,82 @@ ScsiPortBuildDeviceMap(PSCSI_PORT_DEVICE_EXTENSION DeviceExtension, if (!NT_SUCCESS(Status)) { DPRINT("ZwCreateKey() failed (Status %lx)\n", Status); - ZwClose(ScsiBusKey); - ZwClose(ScsiPortKey); - return(Status); + goto ByeBye; } - CurrentTarget = UnitInfo->TargetId; - } - - /* Create 'Logical Unit Id X' key */ - DPRINT(" Logical Unit Id %u\n", - UnitInfo->Lun); - swprintf(NameBuffer, - L"Logical Unit Id %u", - UnitInfo->Lun); - RtlInitUnicodeString(&KeyName, - NameBuffer); - InitializeObjectAttributes(&ObjectAttributes, - &KeyName, + /* Set 'Identifier' (REG_SZ) value */ + swprintf(NameBuffer, + L"%.8S%.16S%.4S", + LunExtension->InquiryData.VendorId, + LunExtension->InquiryData.ProductId, + LunExtension->InquiryData.ProductRevisionLevel); + DPRINT(" Identifier = '%S'\n", NameBuffer); + RtlInitUnicodeString(&ValueName, + L"Identifier"); + Status = ZwSetValueKey(ScsiLunKey, + &ValueName, 0, - ScsiTargetKey, - NULL); - Status = ZwCreateKey(&ScsiLunKey, - KEY_ALL_ACCESS, - &ObjectAttributes, - 0, - NULL, - REG_OPTION_VOLATILE, - &Disposition); - if (!NT_SUCCESS(Status)) - { - DPRINT("ZwCreateKey() failed (Status %lx)\n", Status); - ZwClose(ScsiTargetKey); - ZwClose(ScsiBusKey); - ZwClose(ScsiPortKey); - return(Status); - } + REG_SZ, + NameBuffer, + (wcslen(NameBuffer) + 1) * sizeof(WCHAR)); + if (!NT_SUCCESS(Status)) + { + DPRINT("ZwSetValueKey('Identifier') failed (Status %lx)\n", Status); + goto ByeBye; + } - /* Set values for logical unit */ - InquiryData = (PINQUIRYDATA)UnitInfo->InquiryData; - - /* Set 'Identifier' (REG_SZ) value */ - swprintf(NameBuffer, - L"%.8S%.16S%.4S", - InquiryData->VendorId, - InquiryData->ProductId, - InquiryData->ProductRevisionLevel); - DPRINT(" Identifier = '%S'\n", - NameBuffer); - RtlInitUnicodeString(&ValueName, - L"Identifier"); - Status = ZwSetValueKey(ScsiLunKey, - &ValueName, - 0, - REG_SZ, - NameBuffer, - (wcslen(NameBuffer) + 1) * sizeof(WCHAR)); - if (!NT_SUCCESS(Status)) - { - DPRINT("ZwSetValueKey('Identifier') failed (Status %lx)\n", Status); - ZwClose(ScsiLunKey); - ZwClose(ScsiTargetKey); - ZwClose(ScsiBusKey); - ZwClose(ScsiPortKey); - return(Status); - } + /* Set 'Type' (REG_SZ) value */ + switch (LunExtension->InquiryData.DeviceType) + { + case 0: + TypeName = L"DiskPeripheral"; + break; + case 1: + TypeName = L"TapePeripheral"; + break; + case 2: + TypeName = L"PrinterPeripheral"; + break; + case 4: + TypeName = L"WormPeripheral"; + break; + case 5: + TypeName = L"CdRomPeripheral"; + break; + case 6: + TypeName = L"ScannerPeripheral"; + break; + case 7: + TypeName = L"OpticalDiskPeripheral"; + break; + case 8: + TypeName = L"MediumChangerPeripheral"; + break; + case 9: + TypeName = L"CommunicationPeripheral"; + break; + default: + TypeName = L"OtherPeripheral"; + break; + } + DPRINT(" Type = '%S'\n", TypeName); + RtlInitUnicodeString(&ValueName, + L"Type"); + Status = ZwSetValueKey(ScsiLunKey, + &ValueName, + 0, + REG_SZ, + TypeName, + (wcslen(TypeName) + 1) * sizeof(WCHAR)); + if (!NT_SUCCESS(Status)) + { + DPRINT("ZwSetValueKey('Type') failed (Status %lx)\n", Status); + goto ByeBye; + } - /* Set 'Type' (REG_SZ) value */ - switch (InquiryData->DeviceType) - { - case 0: - TypeName = L"DiskPeripheral"; - break; - case 1: - TypeName = L"TapePeripheral"; - break; - case 2: - TypeName = L"PrinterPeripheral"; - break; - case 4: - TypeName = L"WormPeripheral"; - break; - case 5: - TypeName = L"CdRomPeripheral"; - break; - case 6: - TypeName = L"ScannerPeripheral"; - break; - case 7: - TypeName = L"OpticalDiskPeripheral"; - break; - case 8: - TypeName = L"MediumChangerPeripheral"; - break; - case 9: - TypeName = L"CommunicationPeripheral"; - break; - default: - TypeName = L"OtherPeripheral"; - break; - } - DPRINT(" Type = '%S'\n", TypeName); - RtlInitUnicodeString(&ValueName, - L"Type"); - Status = ZwSetValueKey(ScsiLunKey, - &ValueName, - 0, - REG_SZ, - TypeName, - (wcslen(TypeName) + 1) * sizeof(WCHAR)); - if (!NT_SUCCESS(Status)) - { - DPRINT("ZwSetValueKey('Type') failed (Status %lx)\n", Status); ZwClose(ScsiLunKey); - ZwClose(ScsiTargetKey); - ZwClose(ScsiBusKey); - ZwClose(ScsiPortKey); - return(Status); + ScsiLunKey = NULL; } - - ZwClose(ScsiLunKey); - - if (UnitInfo->NextInquiryDataOffset == 0) - break; - - UnitInfo = (PSCSI_INQUIRY_DATA)((PUCHAR)AdapterInfo + - UnitInfo->NextInquiryDataOffset); } /* Close old target key */ @@ -2027,14 +2310,29 @@ ScsiPortBuildDeviceMap(PSCSI_PORT_DEVICE_EXTENSION DeviceExtension, } } - ZwClose(ScsiBusKey); - } + ZwClose(ScsiBusKey); + ScsiBusKey = NULL; + } - ZwClose(ScsiPortKey); +ByeBye: + if (ScsiLunKey != NULL) + ZwClose (ScsiLunKey); - DPRINT("ScsiPortBuildDeviceMap() done\n"); + if (ScsiInitiatorKey != NULL) + ZwClose (ScsiInitiatorKey); - return(Status); + if (ScsiTargetKey != NULL) + ZwClose (ScsiTargetKey); + + if (ScsiBusKey != NULL) + ZwClose (ScsiBusKey); + + if (ScsiPortKey != NULL) + ZwClose (ScsiPortKey); + + DPRINT("SpiBuildDeviceMap() done\n"); + + return Status; } /* EOF */ diff --git a/drivers/storage/scsiport/scsiport_int.h b/drivers/storage/scsiport/scsiport_int.h new file mode 100644 index 0000000..6f6dd6a --- /dev/null +++ b/drivers/storage/scsiport/scsiport_int.h @@ -0,0 +1,100 @@ +/* + * SCSI_PORT_TIMER_STATES + * + * DESCRIPTION + * An enumeration containing the states in the timer DFA + */ +typedef enum _SCSI_PORT_TIMER_STATES +{ + IDETimerIdle, + IDETimerCmdWait, + IDETimerResetWaitForBusyNegate, + IDETimerResetWaitForDrdyAssert +} SCSI_PORT_TIMER_STATES; + + +typedef struct _SCSI_PORT_DEVICE_BASE +{ + LIST_ENTRY List; + + PVOID MappedAddress; + ULONG NumberOfBytes; + SCSI_PHYSICAL_ADDRESS IoAddress; + ULONG SystemIoBusNumber; +} SCSI_PORT_DEVICE_BASE, *PSCSI_PORT_DEVICE_BASE; + + +typedef struct _SCSI_PORT_LUN_EXTENSION +{ + LIST_ENTRY List; + + UCHAR PathId; + UCHAR TargetId; + UCHAR Lun; + + BOOLEAN DeviceClaimed; + PDEVICE_OBJECT DeviceObject; + + INQUIRYDATA InquiryData; + + KDEVICE_QUEUE DeviceQueue; + + /* More data? */ + + UCHAR MiniportLunExtension[1]; /* must be the last entry */ +} SCSI_PORT_LUN_EXTENSION, *PSCSI_PORT_LUN_EXTENSION; + + +/* + * SCSI_PORT_DEVICE_EXTENSION + * + * DESCRIPTION + * First part of the port objects device extension. The second + * part is the miniport-specific device extension. + */ + +typedef struct _SCSI_PORT_DEVICE_EXTENSION +{ + ULONG Length; + ULONG MiniPortExtensionSize; + PORT_CONFIGURATION_INFORMATION PortConfig; + ULONG PortNumber; + + KSPIN_LOCK IrpLock; + KSPIN_LOCK SpinLock; + PKINTERRUPT Interrupt; + PIRP CurrentIrp; + ULONG IrpFlags; + + SCSI_PORT_TIMER_STATES TimerState; + LONG TimerCount; + + BOOLEAN Initializing; + + LIST_ENTRY DeviceBaseListHead; + + ULONG LunExtensionSize; + LIST_ENTRY LunExtensionListHead; + + PIO_SCSI_CAPABILITIES PortCapabilities; + + PDEVICE_OBJECT DeviceObject; + PCONTROLLER_OBJECT ControllerObject; + + PHW_STARTIO HwStartIo; + PHW_INTERRUPT HwInterrupt; + + PSCSI_REQUEST_BLOCK OriginalSrb; + SCSI_REQUEST_BLOCK InternalSrb; + SENSE_DATA InternalSenseData; + + /* DMA related stuff */ + PADAPTER_OBJECT AdapterObject; + ULONG MapRegisterCount; + + PHYSICAL_ADDRESS PhysicalAddress; + PVOID VirtualAddress; + ULONG CommonBufferLength; + + UCHAR MiniPortDeviceExtension[1]; /* must be the last entry */ +} SCSI_PORT_DEVICE_EXTENSION, *PSCSI_PORT_DEVICE_EXTENSION; diff --git a/hal/hal/.cvsignore b/hal/hal/.cvsignore index a04f6d3..b837c4f 100644 --- a/hal/hal/.cvsignore +++ b/hal/hal/.cvsignore @@ -1,7 +1,7 @@ *.d -halx86up.coff -hal.dll -hal.nostrip.dll +*.coff +*.dll *.a *.o *.sym +*.map diff --git a/hal/hal/hal.def b/hal/hal/hal.def index f75f867..aa2a05b 100644 --- a/hal/hal/hal.def +++ b/hal/hal/hal.def @@ -98,3 +98,6 @@ WRITE_PORT_BUFFER_USHORT@12 WRITE_PORT_UCHAR@8 WRITE_PORT_ULONG@8 WRITE_PORT_USHORT@8 + +HalReleaseDisplayOwnership@0 +HalQueryDisplayOwnership@0 diff --git a/hal/hal/hal.edf b/hal/hal/hal.edf index 886888e..c30e8bf 100644 --- a/hal/hal/hal.edf +++ b/hal/hal/hal.edf @@ -98,3 +98,6 @@ WRITE_PORT_BUFFER_USHORT=WRITE_PORT_BUFFER_USHORT@12 WRITE_PORT_UCHAR=WRITE_PORT_UCHAR@8 WRITE_PORT_ULONG=WRITE_PORT_ULONG@8 WRITE_PORT_USHORT=WRITE_PORT_USHORT@8 + +HalReleaseDisplayOwnership=HalReleaseDisplayOwnership@0 +HalQueryDisplayOwnership=HalQueryDisplayOwnership@0 diff --git a/hal/halx86/.cvsignore b/hal/halx86/.cvsignore index ed49e46..6e8d924 100644 --- a/hal/halx86/.cvsignore +++ b/hal/halx86/.cvsignore @@ -1,7 +1,7 @@ *.d -hal.dll -hal.nostrip.dll -halx86up.coff +*.dll +*.coff *.a *.o *.sym +*.map diff --git a/hal/halx86/Makefile b/hal/halx86/Makefile index 3c9001c..0a960cc 100644 --- a/hal/halx86/Makefile +++ b/hal/halx86/Makefile @@ -28,6 +28,9 @@ TARGET_ASFLAGS = -I$(PATH_TO_TOP)/include -I$(PATH_TO_TOP)/ntoskrnl/include -D__ TARGET_CFLAGS = -I./include -I$(PATH_TO_TOP)/ntoskrnl/include -g +# require os code to explicitly request A/W version of structs/functions +TARGET_CFLAGS += -D_DISABLE_TIDENTS + TARGET_NAME_UP = halx86up @@ -55,14 +58,13 @@ HAL_OBJECTS = \ misc.o \ mp.o \ pci.o \ - perfcnt.o \ portio.o \ reboot.o \ spinlock.o \ sysbus.o \ sysinfo.o \ time.o \ - udelay.o + timer.o #pwroff.o diff --git a/hal/halx86/adapter.c b/hal/halx86/adapter.c index 10211f5..40f1c97 100644 --- a/hal/halx86/adapter.c +++ b/hal/halx86/adapter.c @@ -89,7 +89,7 @@ IoFreeAdapterChannel (PADAPTER_OBJECT AdapterObject) if( AdapterObject->Inuse == FALSE ) { DbgPrint( "Attempting to IoFreeAdapterChannel on a channel not in use\n" ); - KeBugCheck(0); + KEBUGCHECK(0); } AdapterObject->Inuse = FALSE; if( AdapterObject->Buffer ) diff --git a/hal/halx86/display.c b/hal/halx86/display.c index d725feb..eb4e976 100644 --- a/hal/halx86/display.c +++ b/hal/halx86/display.c @@ -27,14 +27,133 @@ * Created 08/10/99 */ +/* + * Portions of this code are from the XFree86 Project and available from the + * following license: + * + * Copyright (C) 1994-2003 The XFree86 Project, Inc. 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 THE + * XFREE86 PROJECT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CON- + * NECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of the XFree86 Project shall + * not be used in advertising or otherwise to promote the sale, use or other + * dealings in this Software without prior written authorization from the + * XFree86 Project. +*/ + +/* DISPLAY OWNERSHIP + * + * So, who owns the physical display and is allowed to write to it? + * + * In MS NT, upon boot HAL owns the display. Somewhere in the boot + * sequence (haven't figured out exactly where or by who), some + * component calls HalAcquireDisplayOwnership. From that moment on, + * the display is owned by that component and is switched to graphics + * mode. The display is not supposed to return to text mode, except + * in case of a bug check. The bug check will call HalDisplayString + * to output a string to the text screen. HAL will notice that it + * currently doesn't own the display and will re-take ownership, by + * calling the callback function passed to HalAcquireDisplayOwnership. + * After the bugcheck, execution is halted. So, under NT, the only + * possible sequence of display modes is text mode -> graphics mode -> + * text mode (the latter hopefully happening very infrequently). + * + * Things are a little bit different in the current state of ReactOS. + * We want to have a functional interactive text mode. We should be + * able to switch from text mode to graphics mode when a GUI app is + * started and switch back to text mode when it's finished. Then, when + * another GUI app is started, another switch to and from graphics mode + * is possible. Also, when the system bugchecks in graphics mode we want + * to switch back to text mode to show the registers and stack trace. + * Last but not least, HalDisplayString is used a lot more in ReactOS, + * e.g. to print debug messages when the /DEBUGPORT=SCREEN boot option + * is present. + * 3 Components are involved in Reactos: HAL, BLUE.SYS and VIDEOPRT.SYS. + * As in NT, on boot HAL owns the display. When entering the text mode + * command interpreter, BLUE.SYS kicks in. It will write directly to the + * screen, more or less behind HALs back. + * When a GUI app is started, WIN32K.SYS will open the DISPLAY device. + * This open call will end up in VIDEOPRT.SYS. That component will then + * take ownership of the display by calling HalAcquireDisplayOwnership. + * When the GUI app terminates (WIN32K.SYS will close the DISPLAY device), + * we want to give ownership of the display back to HAL. Using the + * standard exported HAL functions, that's a bit of a problem, because + * there is no function defined to do that. In NT, this is handled by + * HalDisplayString, but that solution isn't satisfactory in ReactOS, + * because HalDisplayString is (in some cases) also used to output debug + * messages. If we do it the NT way, the first debug message output while + * in graphics mode would switch the display back to text mode. + * So, instead, if HalDisplayString detects that HAL doesn't have ownership + * of the display, it doesn't do anything. + * To return ownership to HAL, a new function is exported, + * HalReleaseDisplayOwnership. This function is called by the DISPLAY + * device Close routine in VIDEOPRT.SYS. It is also called at the beginning + * of a bug check, so HalDisplayString is activated again. + * Now, while the display is in graphics mode (not owned by HAL), BLUE.SYS + * should also refrain from writing to the screen buffer. The text mode + * screen buffer might overlap the graphics mode screen buffer, so changing + * something in the text mode buffer might mess up the graphics screen. To + * allow BLUE.SYS to detect if HAL owns the display, another new function is + * exported, HalQueryDisplayOwnership. BLUE.SYS will call this function to + * check if it's allowed to touch the text mode buffer. + * + * In an ideal world, when HAL takes ownership of the display, it should set + * up the CRT using real-mode (actually V86 mode, but who cares) INT 0x10 + * calls. Unfortunately, this will require HAL to setup a real-mode interrupt + * table etc. So, we chickened out of that by having the loader set up the + * display before switching to protected mode. If HAL is given back ownership + * after a GUI app terminates, the INT 0x10 calls are made by VIDEOPRT.SYS, + * since there is already support for them via the VideoPortInt10 routine. + */ + #include #include #define SCREEN_SYNCHRONIZATION +#define VGA_AC_INDEX 0x3c0 +#define VGA_AC_READ 0x3c1 +#define VGA_AC_WRITE 0x3c0 + +#define VGA_MISC_WRITE 0x3c2 + +#define VGA_SEQ_INDEX 0x3c4 +#define VGA_SEQ_DATA 0x3c5 + +#define VGA_DAC_MASK 0x3c6 +#define VGA_DAC_READ_INDEX 0x3c7 +#define VGA_DAC_WRITE_INDEX 0x3c8 +#define VGA_DAC_DATA 0x3c9 +#define VGA_FEATURE_READ 0x3ca +#define VGA_MISC_READ 0x3cc -#define CRTC_COMMAND 0x3d4 -#define CRTC_DATA 0x3d5 +#define VGA_GC_INDEX 0x3ce +#define VGA_GC_DATA 0x3cf + +#define VGA_CRTC_INDEX 0x3d4 +#define VGA_CRTC_DATA 0x3d5 + +#define VGA_INSTAT_READ 0x3da + +#define VGA_SEQ_NUM_REGISTERS 5 +#define VGA_CRTC_NUM_REGISTERS 25 +#define VGA_GC_NUM_REGISTERS 9 +#define VGA_AC_NUM_REGISTERS 21 #define CRTC_COLUMNS 0x01 #define CRTC_OVERFLOW 0x07 @@ -45,8 +164,10 @@ #define CRTC_CURLO 0x0f -#define CHAR_ATTRIBUTE 0x17 /* grey on blue */ +#define CHAR_ATTRIBUTE_BLACK 0x00 /* black on black */ +#define CHAR_ATTRIBUTE 0x17 /* grey on blue */ +#define FONT_AMOUNT (8*8192) /* VARIABLES ****************************************************************/ @@ -59,27 +180,38 @@ static BOOLEAN DisplayInitialized = FALSE; static BOOLEAN HalOwnsDisplay = TRUE; static WORD *VideoBuffer = NULL; +static PUCHAR GraphVideoBuffer = NULL; static PHAL_RESET_DISPLAY_PARAMETERS HalResetDisplayParameters = NULL; +static UCHAR SavedTextPalette[768]; +static UCHAR SavedTextMiscOutReg; +static UCHAR SavedTextCrtcReg[VGA_CRTC_NUM_REGISTERS]; +static UCHAR SavedTextAcReg[VGA_AC_NUM_REGISTERS]; +static UCHAR SavedTextGcReg[VGA_GC_NUM_REGISTERS]; +static UCHAR SavedTextSeqReg[VGA_SEQ_NUM_REGISTERS]; +static UCHAR SavedTextFont[2][FONT_AMOUNT]; +static BOOL TextPaletteEnabled = FALSE; -/* STATIC FUNCTIONS *********************************************************/ +/* PRIVATE FUNCTIONS *********************************************************/ -static VOID -HalClearDisplay (VOID) +VOID FASTCALL +HalClearDisplay (UCHAR CharAttribute) { WORD *ptr = (WORD*)VideoBuffer; ULONG i; for (i = 0; i < SizeX * SizeY; i++, ptr++) - *ptr = ((CHAR_ATTRIBUTE << 8) + ' '); + *ptr = ((CharAttribute << 8) + ' '); CursorX = 0; CursorY = 0; } -VOID +/* STATIC FUNCTIONS *********************************************************/ + +VOID STATIC HalScrollDisplay (VOID) { WORD *ptr; @@ -97,8 +229,7 @@ HalScrollDisplay (VOID) } } - -static VOID +VOID STATIC FASTCALL HalPutCharacter (CHAR Character) { WORD *ptr; @@ -107,10 +238,333 @@ HalPutCharacter (CHAR Character) *ptr = (CHAR_ATTRIBUTE << 8) + Character; } +VOID STATIC +HalDisablePalette(VOID) +{ + (VOID)READ_PORT_UCHAR((PUCHAR)VGA_INSTAT_READ); + WRITE_PORT_UCHAR((PUCHAR)VGA_AC_INDEX, 0x20); + TextPaletteEnabled = FALSE; +} + +VOID STATIC +HalEnablePalette(VOID) +{ + (VOID)READ_PORT_UCHAR((PUCHAR)VGA_INSTAT_READ); + WRITE_PORT_UCHAR((PUCHAR)VGA_AC_INDEX, 0x00); + TextPaletteEnabled = TRUE; +} + +UCHAR STATIC FASTCALL +HalReadGc(ULONG Index) +{ + WRITE_PORT_UCHAR((PUCHAR)VGA_GC_INDEX, Index); + return(READ_PORT_UCHAR((PUCHAR)VGA_GC_DATA)); +} + +VOID STATIC FASTCALL +HalWriteGc(ULONG Index, UCHAR Value) +{ + WRITE_PORT_UCHAR((PUCHAR)VGA_GC_INDEX, Index); + WRITE_PORT_UCHAR((PUCHAR)VGA_GC_DATA, Value); +} + +UCHAR STATIC FASTCALL +HalReadSeq(ULONG Index) +{ + WRITE_PORT_UCHAR((PUCHAR)VGA_SEQ_INDEX, Index); + return(READ_PORT_UCHAR((PUCHAR)VGA_SEQ_DATA)); +} + +VOID STATIC FASTCALL +HalWriteSeq(ULONG Index, UCHAR Value) +{ + WRITE_PORT_UCHAR((PUCHAR)VGA_SEQ_INDEX, Index); + WRITE_PORT_UCHAR((PUCHAR)VGA_SEQ_DATA, Value); +} + +VOID STATIC FASTCALL +HalWriteAc(ULONG Index, UCHAR Value) +{ + if (TextPaletteEnabled) + { + Index &= ~0x20; + } + else + { + Index |= 0x20; + } + (VOID)READ_PORT_UCHAR((PUCHAR)VGA_INSTAT_READ); + WRITE_PORT_UCHAR((PUCHAR)VGA_AC_INDEX, Index); + WRITE_PORT_UCHAR((PUCHAR)VGA_AC_WRITE, Value); +} + +UCHAR STATIC FASTCALL +HalReadAc(ULONG Index) +{ + if (TextPaletteEnabled) + { + Index &= ~0x20; + } + else + { + Index |= 0x20; + } + (VOID)READ_PORT_UCHAR((PUCHAR)VGA_INSTAT_READ); + WRITE_PORT_UCHAR((PUCHAR)VGA_AC_INDEX, Index); + return(READ_PORT_UCHAR((PUCHAR)VGA_AC_READ)); +} + +VOID STATIC FASTCALL +HalWriteCrtc(ULONG Index, UCHAR Value) +{ + WRITE_PORT_UCHAR((PUCHAR)VGA_CRTC_INDEX, Index); + WRITE_PORT_UCHAR((PUCHAR)VGA_CRTC_DATA, Value); +} + +UCHAR STATIC FASTCALL +HalReadCrtc(ULONG Index) +{ + WRITE_PORT_UCHAR((PUCHAR)VGA_CRTC_INDEX, Index); + return(READ_PORT_UCHAR((PUCHAR)VGA_CRTC_DATA)); +} + +VOID STATIC FASTCALL +HalResetSeq(BOOL Start) +{ + if (Start) + { + HalWriteSeq(0x00, 0x01); + } + else + { + HalWriteSeq(0x00, 0x03); + } +} + +VOID STATIC FASTCALL +HalBlankScreen(BOOL On) +{ + UCHAR Scrn; + + Scrn = HalReadSeq(0x01); + + if (On) + { + Scrn &= ~0x20; + } + else + { + Scrn |= 0x20; + } + + HalResetSeq(TRUE); + HalWriteSeq(0x01, Scrn); + HalResetSeq(FALSE); +} + +VOID STATIC +HalSaveFont(VOID) +{ + UCHAR Attr10; + UCHAR MiscOut, Gc4, Gc5, Gc6, Seq2, Seq4; + ULONG i; + + /* Check if we are already in graphics mode. */ + Attr10 = HalReadAc(0x10); + if (Attr10 & 0x01) + { + return; + } + + /* Save registers. */ + MiscOut = READ_PORT_UCHAR((PUCHAR)VGA_MISC_READ); + Gc4 = HalReadGc(0x04); + Gc5 = HalReadGc(0x05); + Gc6 = HalReadGc(0x06); + Seq2 = HalReadSeq(0x02); + Seq4 = HalReadSeq(0x04); + + /* Force colour mode. */ + WRITE_PORT_UCHAR((PUCHAR)VGA_MISC_WRITE, MiscOut | 0x01); + + HalBlankScreen(FALSE); + + for (i = 0; i < 2; i++) + { + /* Save font 1 */ + HalWriteSeq(0x02, 0x04 << i); /* Write to plane 2 or 3 */ + HalWriteSeq(0x04, 0x06); /* Enable plane graphics. */ + HalWriteGc(0x04, 0x02 + i); /* Read plane 2 or 3 */ + HalWriteGc(0x05, 0x00); /* Write mode 0; read mode 0 */ + HalWriteGc(0x06, 0x05); /* Set graphics. */ + memcpy(SavedTextFont[i], GraphVideoBuffer, FONT_AMOUNT); + } + + /* Restore registers. */ + HalWriteAc(0x10, Attr10); + HalWriteSeq(0x02, Seq2); + HalWriteSeq(0x04, Seq4); + HalWriteGc(0x04, Gc4); + HalWriteGc(0x05, Gc5); + HalWriteGc(0x06, Gc6); + WRITE_PORT_UCHAR((PUCHAR)VGA_MISC_WRITE, MiscOut); + + HalBlankScreen(TRUE); +} + +VOID STATIC +HalSaveMode(VOID) +{ + ULONG i; + + SavedTextMiscOutReg = READ_PORT_UCHAR((PUCHAR)VGA_MISC_READ); + + for (i = 0; i < VGA_CRTC_NUM_REGISTERS; i++) + { + SavedTextCrtcReg[i] = HalReadCrtc(i); + } + + HalEnablePalette(); + for (i = 0; i < VGA_AC_NUM_REGISTERS; i++) + { + SavedTextAcReg[i] = HalReadAc(i); + } + HalDisablePalette(); + + for (i = 0; i < VGA_GC_NUM_REGISTERS; i++) + { + SavedTextGcReg[i] = HalReadGc(i); + } + + for (i = 0; i < VGA_SEQ_NUM_REGISTERS; i++) + { + SavedTextSeqReg[i] = HalReadSeq(i); + } +} + +VOID STATIC +HalDacDelay(VOID) +{ + (VOID)READ_PORT_UCHAR((PUCHAR)VGA_INSTAT_READ); + (VOID)READ_PORT_UCHAR((PUCHAR)VGA_INSTAT_READ); +} + +VOID STATIC +HalSavePalette(VOID) +{ + ULONG i; + WRITE_PORT_UCHAR((PUCHAR)VGA_DAC_MASK, 0xFF); + WRITE_PORT_UCHAR((PUCHAR)VGA_DAC_READ_INDEX, 0x00); + for (i = 0; i < 768; i++) + { + SavedTextPalette[i] = READ_PORT_UCHAR((PUCHAR)VGA_DAC_DATA); + HalDacDelay(); + } +} + +VOID STATIC +HalRestoreFont(VOID) +{ + UCHAR MiscOut, Attr10, Gc1, Gc3, Gc4, Gc5, Gc6, Gc8; + UCHAR Seq2, Seq4; + ULONG i; + + /* Save registers. */ + MiscOut = READ_PORT_UCHAR((PUCHAR)VGA_MISC_READ); + Attr10 = HalReadAc(0x10); + Gc1 = HalReadGc(0x01); + Gc3 = HalReadGc(0x03); + Gc4 = HalReadGc(0x04); + Gc5 = HalReadGc(0x05); + Gc6 = HalReadGc(0x06); + Gc8 = HalReadGc(0x08); + Seq2 = HalReadSeq(0x02); + Seq4 = HalReadSeq(0x04); + + /* Force into colour mode. */ + WRITE_PORT_UCHAR((PUCHAR)VGA_MISC_WRITE, MiscOut | 0x10); + + HalBlankScreen(FALSE); + + HalWriteGc(0x03, 0x00); /* Don't rotate; write unmodified. */ + HalWriteGc(0x08, 0xFF); /* Write all bits. */ + HalWriteGc(0x01, 0x00); /* All planes from CPU. */ + + for (i = 0; i < 2; i++) + { + HalWriteSeq(0x02, 0x04 << i); /* Write to plane 2 or 3 */ + HalWriteSeq(0x04, 0x06); /* Enable plane graphics. */ + HalWriteGc(0x04, 0x02 + i); /* Read plane 2 or 3 */ + HalWriteGc(0x05, 0x00); /* Write mode 0; read mode 0. */ + HalWriteGc(0x06, 0x05); /* Set graphics. */ + memcpy(GraphVideoBuffer, SavedTextFont[i], FONT_AMOUNT); + } + + HalBlankScreen(TRUE); + + /* Restore registers. */ + WRITE_PORT_UCHAR((PUCHAR)VGA_MISC_WRITE, MiscOut); + HalWriteAc(0x10, Attr10); + HalWriteGc(0x01, Gc1); + HalWriteGc(0x03, Gc3); + HalWriteGc(0x04, Gc4); + HalWriteGc(0x05, Gc5); + HalWriteGc(0x06, Gc6); + HalWriteGc(0x08, Gc8); + HalWriteSeq(0x02, Seq2); + HalWriteSeq(0x04, Seq4); +} + +VOID STATIC +HalRestoreMode(VOID) +{ + ULONG i; + + WRITE_PORT_UCHAR((PUCHAR)VGA_MISC_WRITE, SavedTextMiscOutReg); + + for (i = 1; i < VGA_SEQ_NUM_REGISTERS; i++) + { + HalWriteSeq(i, SavedTextSeqReg[i]); + } + + /* Unlock CRTC registers 0-7 */ + HalWriteCrtc(17, SavedTextCrtcReg[17] & ~0x80); + + for (i = 0; i < VGA_CRTC_NUM_REGISTERS; i++) + { + HalWriteCrtc(i, SavedTextCrtcReg[i]); + } + + for (i = 0; i < VGA_GC_NUM_REGISTERS; i++) + { + HalWriteGc(i, SavedTextGcReg[i]); + } + + HalEnablePalette(); + for (i = 0; i < VGA_AC_NUM_REGISTERS; i++) + { + HalWriteAc(i, SavedTextAcReg[i]); + } + HalDisablePalette(); +} + +VOID STATIC +HalRestorePalette(VOID) +{ + ULONG i; + WRITE_PORT_UCHAR((PUCHAR)VGA_DAC_MASK, 0xFF); + WRITE_PORT_UCHAR((PUCHAR)VGA_DAC_WRITE_INDEX, 0x00); + for (i = 0; i < 768; i++) + { + WRITE_PORT_UCHAR((PUCHAR)VGA_DAC_DATA, SavedTextPalette[i]); + HalDacDelay(); + } + HalDisablePalette(); +} /* PRIVATE FUNCTIONS ********************************************************/ -VOID +VOID FASTCALL HalInitializeDisplay (PLOADER_PARAMETER_BLOCK LoaderBlock) /* * FUNCTION: Initalize the display @@ -124,6 +578,7 @@ HalInitializeDisplay (PLOADER_PARAMETER_BLOCK LoaderBlock) ULONG Data; VideoBuffer = (WORD *)(0xd0000000 + 0xb8000); + GraphVideoBuffer = (PUCHAR)(0xd0000000 + 0xa0000); // VideoBuffer = HalMapPhysicalMemory (0xb8000, 2); /* Set cursor position */ @@ -134,34 +589,41 @@ HalInitializeDisplay (PLOADER_PARAMETER_BLOCK LoaderBlock) /* read screen size from the crtc */ /* FIXME: screen size should be read from the boot parameters */ - WRITE_PORT_UCHAR((PUCHAR)CRTC_COMMAND, CRTC_COLUMNS); - SizeX = READ_PORT_UCHAR((PUCHAR)CRTC_DATA) + 1; - WRITE_PORT_UCHAR((PUCHAR)CRTC_COMMAND, CRTC_ROWS); - SizeY = READ_PORT_UCHAR((PUCHAR)CRTC_DATA); - WRITE_PORT_UCHAR((PUCHAR)CRTC_COMMAND, CRTC_OVERFLOW); - Data = READ_PORT_UCHAR((PUCHAR)CRTC_DATA); + WRITE_PORT_UCHAR((PUCHAR)VGA_CRTC_INDEX, CRTC_COLUMNS); + SizeX = READ_PORT_UCHAR((PUCHAR)VGA_CRTC_DATA) + 1; + WRITE_PORT_UCHAR((PUCHAR)VGA_CRTC_INDEX, CRTC_ROWS); + SizeY = READ_PORT_UCHAR((PUCHAR)VGA_CRTC_DATA); + WRITE_PORT_UCHAR((PUCHAR)VGA_CRTC_INDEX, CRTC_OVERFLOW); + Data = READ_PORT_UCHAR((PUCHAR)VGA_CRTC_DATA); SizeY |= (((Data & 0x02) << 7) | ((Data & 0x40) << 3)); SizeY++; - WRITE_PORT_UCHAR((PUCHAR)CRTC_COMMAND, CRTC_SCANLINES); - ScanLines = (READ_PORT_UCHAR((PUCHAR)CRTC_DATA) & 0x1F) + 1; + WRITE_PORT_UCHAR((PUCHAR)VGA_CRTC_INDEX, CRTC_SCANLINES); + ScanLines = (READ_PORT_UCHAR((PUCHAR)VGA_CRTC_DATA) & 0x1F) + 1; SizeY = SizeY / ScanLines; #ifdef BOCHS_30ROWS SizeY=30; #endif - HalClearDisplay(); + HalClearDisplay(CHAR_ATTRIBUTE_BLACK); DisplayInitialized = TRUE; + + /* + Save the VGA state at this point so we can restore it on a bugcheck. + */ + HalSavePalette(); + HalSaveMode(); + HalSaveFont(); } } -VOID -HalResetDisplay(VOID) +/* PUBLIC FUNCTIONS *********************************************************/ + +VOID STDCALL +HalReleaseDisplayOwnership() /* - * FUNCTION: Reset the display - * ARGUMENTS: - * None + * FUNCTION: Release ownership of display back to HAL */ { if (HalResetDisplayParameters == NULL) @@ -170,16 +632,17 @@ HalResetDisplay(VOID) if (HalOwnsDisplay == TRUE) return; - if (HalResetDisplayParameters(SizeX, SizeY) == TRUE) + if (!HalResetDisplayParameters(SizeX, SizeY)) { - HalOwnsDisplay = TRUE; - HalClearDisplay(); + HalRestoreMode(); + HalRestoreFont(); + HalRestorePalette(); } + HalOwnsDisplay = TRUE; + HalClearDisplay(CHAR_ATTRIBUTE); } -/* PUBLIC FUNCTIONS *********************************************************/ - VOID STDCALL HalAcquireDisplayOwnership(IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters) /* @@ -193,7 +656,6 @@ HalAcquireDisplayOwnership(IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParamete HalResetDisplayParameters = ResetDisplayParameters; } - VOID STDCALL HalDisplayString(IN PCH String) /* @@ -212,22 +674,30 @@ HalDisplayString(IN PCH String) static KSPIN_LOCK Lock; ULONG Flags; + /* See comment at top of file */ + if (! HalOwnsDisplay) + { + return; + } + pch = String; pushfl(Flags); __asm__ ("cli\n\t"); KeAcquireSpinLockAtDpcLevel(&Lock); - + +#if 0 if (HalOwnsDisplay == FALSE) { - HalResetDisplay (); + HalReleaseDisplayOwnership(); } +#endif #ifdef SCREEN_SYNCHRONIZATION - WRITE_PORT_UCHAR((PUCHAR)CRTC_COMMAND, CRTC_CURHI); - offset = READ_PORT_UCHAR((PUCHAR)CRTC_DATA)<<8; - WRITE_PORT_UCHAR((PUCHAR)CRTC_COMMAND, CRTC_CURLO); - offset += READ_PORT_UCHAR((PUCHAR)CRTC_DATA); + WRITE_PORT_UCHAR((PUCHAR)VGA_CRTC_INDEX, CRTC_CURHI); + offset = READ_PORT_UCHAR((PUCHAR)VGA_CRTC_DATA)<<8; + WRITE_PORT_UCHAR((PUCHAR)VGA_CRTC_INDEX, CRTC_CURLO); + offset += READ_PORT_UCHAR((PUCHAR)VGA_CRTC_DATA); CursorY = offset / SizeX; CursorX = offset % SizeX; @@ -240,6 +710,13 @@ HalDisplayString(IN PCH String) CursorY++; CursorX = 0; } + else if (*pch == '\b') + { + if (CursorX > 0) + { + CursorX--; + } + } else if (*pch != '\r') { HalPutCharacter (*pch); @@ -264,16 +741,15 @@ HalDisplayString(IN PCH String) #ifdef SCREEN_SYNCHRONIZATION offset = (CursorY * SizeX) + CursorX; - WRITE_PORT_UCHAR((PUCHAR)CRTC_COMMAND, CRTC_CURLO); - WRITE_PORT_UCHAR((PUCHAR)CRTC_DATA, offset & 0xff); - WRITE_PORT_UCHAR((PUCHAR)CRTC_COMMAND, CRTC_CURHI); - WRITE_PORT_UCHAR((PUCHAR)CRTC_DATA, (offset >> 8) & 0xff); + WRITE_PORT_UCHAR((PUCHAR)VGA_CRTC_INDEX, CRTC_CURLO); + WRITE_PORT_UCHAR((PUCHAR)VGA_CRTC_DATA, offset & 0xff); + WRITE_PORT_UCHAR((PUCHAR)VGA_CRTC_INDEX, CRTC_CURHI); + WRITE_PORT_UCHAR((PUCHAR)VGA_CRTC_DATA, (offset >> 8) & 0xff); #endif KeReleaseSpinLockFromDpcLevel(&Lock); popfl(Flags); } - VOID STDCALL HalQueryDisplayParameters(OUT PULONG DispSizeX, OUT PULONG DispSizeY, @@ -299,4 +775,10 @@ HalSetDisplayParameters(IN ULONG CursorPosX, CursorY = (CursorPosY < SizeY) ? CursorPosY : SizeY - 1; } +BOOLEAN STDCALL +HalQueryDisplayOwnership() +{ + return ! HalOwnsDisplay; +} + /* EOF */ diff --git a/hal/halx86/dma.c b/hal/halx86/dma.c index 35cc761..1ce66fc 100644 --- a/hal/halx86/dma.c +++ b/hal/halx86/dma.c @@ -4,7 +4,7 @@ * PROJECT: ReactOS kernel * FILE: ntoskrnl/hal/x86/dma.c * PURPOSE: DMA functions - * PROGRAMMER: David Welch (welch@mcmail.com) + * PROGRAMMERS: David Welch (welch@mcmail.com) * UPDATE HISTORY: * Created 22/05/98 */ @@ -16,20 +16,23 @@ #include #include -ADAPTER_OBJECT AdapterObjects[] = { - { 0, (PVOID)0x87, (PVOID)0x1, (PVOID)0x0, { 0 }, NULL }, - { 1, (PVOID)0x83, (PVOID)0x3, (PVOID)0x2, { 0 }, NULL }, - { 2, (PVOID)0x81, (PVOID)0x5, (PVOID)0x4, { 0 }, NULL }, - { 3, (PVOID)0x82, (PVOID)0x7, (PVOID)0x6, { 0 }, NULL } }; +ADAPTER_OBJECT IsaSlaveAdapterObjects[] = { + { Isa, FALSE, 0, (PVOID)0x87, (PVOID)0x1, (PVOID)0x0, 0, NULL }, + { Isa, FALSE, 1, (PVOID)0x83, (PVOID)0x3, (PVOID)0x2, 0, NULL }, + { Isa, FALSE, 2, (PVOID)0x81, (PVOID)0x5, (PVOID)0x4, 0, NULL }, + { Isa, FALSE, 3, (PVOID)0x82, (PVOID)0x7, (PVOID)0x6, 0, NULL } }; + +ADAPTER_OBJECT PciBusMasterAdapterObjects[] = { + { PCIBus, TRUE, 0, (PVOID)0, (PVOID)0, (PVOID)0x0, 0, NULL } }; /* FUNCTIONS *****************************************************************/ PVOID STDCALL -HalAllocateCommonBuffer (PADAPTER_OBJECT AdapterObject, - ULONG Length, - PPHYSICAL_ADDRESS LogicalAddress, - BOOLEAN CacheEnabled) +HalAllocateCommonBuffer (PADAPTER_OBJECT AdapterObject, + ULONG Length, + PPHYSICAL_ADDRESS LogicalAddress, + BOOLEAN CacheEnabled) /* * FUNCTION: Allocates memory that is visible to both the processor(s) and * a dma device @@ -42,9 +45,31 @@ HalAllocateCommonBuffer (PADAPTER_OBJECT AdapterObject, * CacheEnabled = Specifies if the memory can be cached * RETURNS: The base virtual address of the memory allocated * NULL on failure + * NOTES: + * CacheEnabled is ignored - it's all cache-disabled (like in NT) */ { - UNIMPLEMENTED; + PHYSICAL_ADDRESS HighestAddress; + PVOID BaseAddress; + + HighestAddress.u.HighPart = 0; + if (AdapterObject->InterfaceType == Isa || + (AdapterObject->InterfaceType == MicroChannel && AdapterObject->Master == FALSE)) + { + HighestAddress.u.LowPart = 0x00FFFFFF; /* 24Bit: 16MB address range */ + } + else + { + HighestAddress.u.LowPart = 0xFFFFFFFF; /* 32Bit: 4GB address range */ + } + + BaseAddress = MmAllocateContiguousMemory(Length, HighestAddress); + if (!BaseAddress) + return 0; + + *LogicalAddress = MmGetPhysicalAddress(BaseAddress); + + return BaseAddress; } BOOLEAN STDCALL @@ -83,27 +108,40 @@ HalGetAdapter (PDEVICE_DESCRIPTION DeviceDescription, * allocate for DMA transfer operations * RETURNS: The allocated adapter object on success * NULL on failure + * TODO: + * Figure out what to do with the commented-out cases */ { /* Validate parameters in device description, and return a pointer to the adapter object for the requested dma channel */ if( DeviceDescription->Version != DEVICE_DESCRIPTION_VERSION ) return NULL; + + if (DeviceDescription->InterfaceType == PCIBus) + { + if (DeviceDescription->Master == FALSE) + return NULL; + + return &PciBusMasterAdapterObjects[0]; + } + + /* if( DeviceDescription->Master ) return NULL; if( DeviceDescription->ScatterGather ) return NULL; if( DeviceDescription->AutoInitialize ) return NULL; - if( DeviceDescription->Dma32BitAddress ) + if( DeviceDescription->Dma32BitAddresses ) return NULL; if( DeviceDescription->InterfaceType != Isa ) return NULL; + */ /* if( DeviceDescription->DmaWidth != Width8Bits ) return NULL;*/ *NumberOfMapRegisters = 0x10; - AdapterObjects[DeviceDescription->DmaChannel].Buffer = 0; - return &AdapterObjects[DeviceDescription->DmaChannel]; + IsaSlaveAdapterObjects[DeviceDescription->DmaChannel].Buffer = 0; + return &IsaSlaveAdapterObjects[DeviceDescription->DmaChannel]; } ULONG STDCALL diff --git a/hal/halx86/halinit.c b/hal/halx86/halinit.c index 5830314..29b1fb0 100644 --- a/hal/halx86/halinit.c +++ b/hal/halx86/halinit.c @@ -39,6 +39,7 @@ HalInitSystem (ULONG BootPhase, { if (BootPhase == 0) { + /* Initialize display and make the screen black */ HalInitializeDisplay (LoaderBlock); #ifdef MP @@ -63,6 +64,11 @@ HalInitSystem (ULONG BootPhase, /* Enumerate the devices on the motherboard */ HalpStartEnumerator(); } + else if (BootPhase == 2) + { + /* Go to blue screen */ + HalClearDisplay (0x17); /* grey on blue */ + } return TRUE; } diff --git a/hal/halx86/include/hal.h b/hal/halx86/include/hal.h index 87939c1..fb25649 100644 --- a/hal/halx86/include/hal.h +++ b/hal/halx86/include/hal.h @@ -5,9 +5,6 @@ #ifndef __INTERNAL_HAL_HAL_H #define __INTERNAL_HAL_HAL_H -//#include -//#include - /* * FUNCTION: Probes for a BIOS32 extension */ @@ -18,8 +15,9 @@ VOID Hal_bios32_probe(VOID); */ BOOLEAN Hal_bios32_is_service_present(ULONG service); -VOID HalInitializeDisplay (PLOADER_PARAMETER_BLOCK LoaderBlock); -VOID HalResetDisplay (VOID); +/* display.c */ +VOID FASTCALL HalInitializeDisplay (PLOADER_PARAMETER_BLOCK LoaderBlock); +VOID FASTCALL HalClearDisplay (UCHAR CharAttribute); VOID HalpInitBusHandlers (VOID); @@ -36,6 +34,8 @@ VOID HalpInitPciBus (VOID); VOID HalpStartEnumerator (VOID); struct _ADAPTER_OBJECT { + INTERFACE_TYPE InterfaceType; + BOOLEAN Master; int Channel; PVOID PagePort; PVOID CountPort; @@ -53,4 +53,12 @@ HalpQuerySystemInformation(IN HAL_QUERY_INFORMATION_CLASS InformationClass, OUT PULONG ReturnedLength); +/* Non-standard functions */ +VOID STDCALL +HalReleaseDisplayOwnership(); + +BOOLEAN STDCALL +HalQueryDisplayOwnership(); + + #endif /* __INTERNAL_HAL_HAL_H */ diff --git a/hal/halx86/irql.c b/hal/halx86/irql.c index 578432c..89b73a0 100644 --- a/hal/halx86/irql.c +++ b/hal/halx86/irql.c @@ -209,7 +209,7 @@ KfLowerIrql (KIRQL NewIrql) { DbgPrint ("(%s:%d) NewIrql %x CurrentIrql %x\n", __FILE__, __LINE__, NewIrql, CurrentIrql); - KeBugCheck(0); + KEBUGCHECK(0); for(;;); } @@ -268,7 +268,7 @@ KfRaiseIrql (KIRQL NewIrql) { DbgPrint ("%s:%d CurrentIrql %x NewIrql %x\n", __FILE__,__LINE__,CurrentIrql,NewIrql); - KeBugCheck (0); + KEBUGCHECK (0); for(;;); } diff --git a/hal/halx86/mp.c b/hal/halx86/mp.c index b1941d4..2f37c12 100644 --- a/hal/halx86/mp.c +++ b/hal/halx86/mp.c @@ -277,7 +277,7 @@ IOAPICSetupIds(VOID) tmp = IOAPICRead(apic, 0); if (GET_IOAPIC_ID(tmp) != IOAPICMap[apic].ApicId) { DPRINT1("Could not set I/O APIC ID!\n"); - KeBugCheck(0); + KEBUGCHECK(0); } } } @@ -550,7 +550,7 @@ static VOID AddPinToIrq( entry = irq_2_pin + entry->next; if (++first_free_entry >= PIN_MAP_SIZE) { DPRINT1("Ohh no!"); - KeBugCheck(0); + KEBUGCHECK(0); } } entry->apic = apic; @@ -595,7 +595,7 @@ static ULONG AssignIrqVector( current_vector = FIRST_DEVICE_VECTOR + vector_offset; } else if (current_vector == FIRST_SYSTEM_VECTOR) { DPRINT1("Ran out of interrupt sources!"); - KeBugCheck(0); + KEBUGCHECK(0); } vector = current_vector; @@ -1559,7 +1559,7 @@ HaliInitBSP( DPRINT("APIC found\n"); } else { DPRINT1("No APIC found\n"); - KeBugCheck(0); + KEBUGCHECK(0); } CPUMap[BootCPU].MaxLVT = APICGetMaxLVT(); @@ -1970,7 +1970,7 @@ static VOID HaliMPIOApicInfo(PMP_CONFIGURATION_IOAPIC m) DPRINT("Max # of I/O APICs (%d) exceeded (found %d).\n", MAX_IOAPIC, IOAPICCount); DPRINT1("Recompile with bigger MAX_IOAPIC!.\n"); - KeBugCheck(0); + KEBUGCHECK(0); } IOAPICMap[IOAPICCount].ApicId = m->ApicId; IOAPICMap[IOAPICCount].ApicVersion = m->ApicVersion; @@ -1987,7 +1987,7 @@ static VOID HaliMPIntSrcInfo(PMP_CONFIGURATION_INTSRC m) m->SrcBusIrq, m->DstApicId, m->DstApicInt); if (IRQCount > MAX_IRQ_SOURCE) { DPRINT1("Max # of irq sources exceeded!!\n"); - KeBugCheck(0); + KEBUGCHECK(0); } IRQMap[IRQCount] = *m; @@ -2010,11 +2010,11 @@ static VOID HaliMPIntLocalInfo(PMP_CONFIGURATION_INTLOCAL m) */ if ((m->IrqType == INT_EXTINT) && (m->DstApicLInt != 0)) { DPRINT1("Invalid MP table!\n"); - KeBugCheck(0); + KEBUGCHECK(0); } if ((m->IrqType == INT_NMI) && (m->DstApicLInt != 1)) { DPRINT1("Invalid MP table!\n"); - KeBugCheck(0); + KEBUGCHECK(0); } } @@ -2036,14 +2036,14 @@ HaliReadMPConfigTable( DbgPrint("Bad MP configuration block signature: %c%c%c%c\n", pc[0], pc[1], pc[2], pc[3]); - KeBugCheck(0); + KEBUGCHECK(0); return; } if (MPChecksum((PUCHAR)Table, Table->Length)) { DbgPrint("Bad MP configuration block checksum\n"); - KeBugCheck(0); + KEBUGCHECK(0); return; } @@ -2051,7 +2051,7 @@ HaliReadMPConfigTable( { DbgPrint("Bad MP configuration table version (%d)\n", Table->Specification); - KeBugCheck(0); + KEBUGCHECK(0); return; } @@ -2060,7 +2060,7 @@ HaliReadMPConfigTable( { DbgPrint("APIC base address is at 0x%X. " \ "I cannot handle non-standard adresses\n", APICBase); - KeBugCheck(0); + KEBUGCHECK(0); } Entry = (PUCHAR)((PVOID)Table + sizeof(MP_CONFIGURATION_TABLE)); @@ -2107,7 +2107,7 @@ HaliReadMPConfigTable( } default: DbgPrint("Unknown entry in MPC table\n"); - KeBugCheck(0); + KEBUGCHECK(0); } } } @@ -2378,7 +2378,7 @@ HalpInitMPS( EBDA <<= 4; if (!HaliScanForMPConfigTable((ULONG)EBDA, 0x1000)) { DbgPrint("No multiprocessor compliant system found.\n"); - KeBugCheck(0); + KEBUGCHECK(0); } } } diff --git a/hal/halx86/mpsirql.c b/hal/halx86/mpsirql.c index b1c0780..0031046 100644 --- a/hal/halx86/mpsirql.c +++ b/hal/halx86/mpsirql.c @@ -47,7 +47,7 @@ KIRQL STDCALL KeGetCurrentIrql (VOID) if (KeGetCurrentKPCR ()->Irql > HIGH_LEVEL) { DPRINT1 ("CurrentIrql %x\n", KeGetCurrentKPCR ()->Irql); - KeBugCheck (0); + KEBUGCHECK (0); for(;;); } @@ -63,7 +63,7 @@ static VOID KeSetCurrentIrql (KIRQL NewIrql) if (NewIrql > HIGH_LEVEL) { DPRINT1 ("NewIrql %x\n", NewIrql); - KeBugCheck (0); + KEBUGCHECK (0); for(;;); } @@ -174,7 +174,7 @@ KfLowerIrql (KIRQL NewIrql) if (NewIrql > KeGetCurrentIrql ()) { DPRINT1 ("NewIrql %x CurrentIrql %x\n", NewIrql, KeGetCurrentIrql ()); - KeBugCheck (0); + KEBUGCHECK (0); for(;;); } @@ -230,7 +230,7 @@ KfRaiseIrql (KIRQL NewIrql) if (NewIrql < KeGetCurrentIrql ()) { DPRINT1 ("CurrentIrql %x NewIrql %x\n", KeGetCurrentIrql (), NewIrql); - KeBugCheck (0); + KEBUGCHECK (0); for(;;); } diff --git a/hal/halx86/perfcnt.c b/hal/halx86/perfcnt.c deleted file mode 100644 index 8d4f76f..0000000 --- a/hal/halx86/perfcnt.c +++ /dev/null @@ -1,62 +0,0 @@ -/* $Id$ - * - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS kernel - * FILE: ntoskrnl/hal/x86/perfcnt.c - * PURPOSE: Performance counter functions - * PROGRAMMER: David Welch (welch@mcmail.com) - * Eric Kohl (ekohl@rz-online.de) - * UPDATE HISTORY: - * 09/06/2000: Created - */ - - -/* INCLUDES ***************************************************************/ - -#include - -/* FUNCTIONS **************************************************************/ - - -VOID STDCALL -HalCalibratePerformanceCounter(ULONG Count) -{ - ULONG i; - - /* save flags and disable interrupts */ - __asm__("pushf\n\t" \ - "cli\n\t"); - - for (i = 0; i < Count; i++); - - /* restore flags */ - __asm__("popf\n\t"); -} - - -LARGE_INTEGER STDCALL -KeQueryPerformanceCounter(PLARGE_INTEGER PerformanceFreq) -/* - * FUNCTION: Queries the finest grained running count avaiable in the system - * ARGUMENTS: - * PerformanceFreq (OUT) = The routine stores the number of - * performance counters tick per second here - * RETURNS: The performance counter value in HERTZ - * NOTE: Returns the system tick count or the time-stamp on the pentium - */ -{ - if (PerformanceFreq != NULL) - { - PerformanceFreq->QuadPart = 0; - return *PerformanceFreq; - } - else - { - LARGE_INTEGER Value; - - Value.QuadPart = 0; - return Value; - } -} - -/* EOF */ diff --git a/hal/halx86/reboot.c b/hal/halx86/reboot.c index 75384ca..a261abe 100644 --- a/hal/halx86/reboot.c +++ b/hal/halx86/reboot.c @@ -66,7 +66,7 @@ HalReturnToFirmware ( } else if (Action == FIRMWARE_REBOOT) { - HalResetDisplay (); + HalReleaseDisplayOwnership(); HalReboot (); } } diff --git a/hal/halx86/spinlock.c b/hal/halx86/spinlock.c index 30c604d..73bc598 100644 --- a/hal/halx86/spinlock.c +++ b/hal/halx86/spinlock.c @@ -44,7 +44,8 @@ KeAcquireSpinLockRaiseToSynch ( PKSPIN_LOCK SpinLock ) { - UNIMPLEMENTED; + ASSERT_IRQL(SYNCH_LEVEL); + KeAcquireSpinLockAtDpcLevel(SpinLock); } VOID STDCALL diff --git a/hal/halx86/timer.c b/hal/halx86/timer.c new file mode 100644 index 0000000..eeebd4d --- /dev/null +++ b/hal/halx86/timer.c @@ -0,0 +1,273 @@ +/* + * ReactOS kernel + * Copyright (C) 2000 David Welch + * Copyright (C) 1999 Gareth Owen , Ramon von Handel + * Copyright (C) 1991, 1992 Linus Torvalds + * + * This software is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This software 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. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software; see the file COPYING. If not, write + * to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, + * MA 02139, USA. + * + */ +/* $Id$ + * + * PROJECT: ReactOS kernel + * FILE: ntoskrnl/hal/x86/udelay.c + * PURPOSE: Busy waiting + * PROGRAMMER: David Welch (david.welch@seh.ox.ac.uk) + * UPDATE HISTORY: + * 06/11/99 Created + */ + +/* INCLUDES ***************************************************************/ + +#include + +#define NDEBUG +#include + +/* GLOBALS ******************************************************************/ + +static unsigned int delay_count = 1; + +#define TMR_CTRL 0x43 /* I/O for control */ +#define TMR_CNT0 0x40 /* I/O for counter 0 */ +#define TMR_CNT1 0x41 /* I/O for counter 1 */ +#define TMR_CNT2 0x42 /* I/O for counter 2 */ + +#define TMR_SC0 0 /* Select channel 0 */ +#define TMR_SC1 0x40 /* Select channel 1 */ +#define TMR_SC2 0x80 /* Select channel 2 */ + +#define TMR_LOW 0x10 /* RW low byte only */ +#define TMR_HIGH 0x20 /* RW high byte only */ +#define TMR_BOTH 0x30 /* RW both bytes */ + +#define TMR_MD0 0 /* Mode 0 */ +#define TMR_MD1 0x2 /* Mode 1 */ +#define TMR_MD2 0x4 /* Mode 2 */ +#define TMR_MD3 0x6 /* Mode 3 */ +#define TMR_MD4 0x8 /* Mode 4 */ +#define TMR_MD5 0xA /* Mode 5 */ + +#define TMR_BCD 1 /* BCD mode */ + +#define TMR_LATCH 0 /* Latch command */ + +#define TMR_READ 0xF0 /* Read command */ +#define TMR_CNT 0x20 /* CNT bit (Active low, subtract it) */ +#define TMR_STAT 0x10 /* Status bit (Active low, subtract it) */ +#define TMR_CH2 0x8 /* Channel 2 bit */ +#define TMR_CH1 0x4 /* Channel 1 bit */ +#define TMR_CH0 0x2 /* Channel 0 bit */ + +#define MILLISEC 10 /* Number of millisec between interrupts */ +#define HZ (1000 / MILLISEC) /* Number of interrupts per second */ +#define CLOCK_TICK_RATE 1193182 /* Clock frequency of the timer chip */ +#define LATCH (CLOCK_TICK_RATE / HZ) /* Count to program into the timer chip */ +#define PRECISION 8 /* Number of bits to calibrate for delay loop */ + +static BOOLEAN UdelayCalibrated = FALSE; + +/* FUNCTIONS **************************************************************/ + +VOID STDCALL +__KeStallExecutionProcessor(ULONG Loops) +{ + register unsigned int i; + for (i=0; i> 8); /* MSB */ + + /* Stage 1: Coarse calibration */ + + WaitFor8254Wraparound(); + + delay_count = 1; + + do + { + delay_count <<= 1; /* Next delay count to try */ + + WaitFor8254Wraparound(); + + __KeStallExecutionProcessor(delay_count); /* Do the delay */ + + CurCount = Read8254Timer(); + } + while (CurCount > LATCH / 2); + + delay_count >>= 1; /* Get bottom value for delay */ + + /* Stage 2: Fine calibration */ + DbgPrint("delay_count: %d", delay_count); + + calib_bit = delay_count; /* Which bit are we going to test */ + + for (i = 0; i < PRECISION; i++) + { + calib_bit >>= 1; /* Next bit to calibrate */ + if (!calib_bit) + { + break; /* If we have done all bits, stop */ + } + + delay_count |= calib_bit; /* Set the bit in delay_count */ + + WaitFor8254Wraparound(); + + __KeStallExecutionProcessor(delay_count); /* Do the delay */ + + CurCount = Read8254Timer(); + if (CurCount <= LATCH / 2) /* If a tick has passed, turn the */ + { /* calibrated bit back off */ + delay_count &= ~calib_bit; + } + } + + /* We're finished: Do the finishing touches */ + + delay_count /= (MILLISEC / 2); /* Calculate delay_count for 1ms */ + + DbgPrint("]\n"); + DbgPrint("delay_count: %d\n", delay_count); + DbgPrint("CPU speed: %d\n", delay_count / 250); +#if 0 + DbgPrint("About to start delay loop test\n"); + DbgPrint("Waiting for five minutes..."); + for (i = 0; i < (5*60*1000*20); i++) + { + KeStallExecutionProcessor(50); + } + DbgPrint("finished\n"); + for(;;); +#endif +} + + +VOID STDCALL +HalCalibratePerformanceCounter(ULONG Count) +{ + ULONG i; + + /* save flags and disable interrupts */ + __asm__("pushf\n\t" \ + "cli\n\t"); + + for (i = 0; i < Count; i++); + + /* restore flags */ + __asm__("popf\n\t"); +} + + +LARGE_INTEGER STDCALL +KeQueryPerformanceCounter(PLARGE_INTEGER PerformanceFreq) +/* + * FUNCTION: Queries the finest grained running count available in the system + * ARGUMENTS: + * PerformanceFreq (OUT) = The routine stores the number of + * performance counter ticks per second here + * RETURNS: The number of performance counter ticks since boot + */ +{ + LARGE_INTEGER TicksOld; + LARGE_INTEGER TicksNew; + LARGE_INTEGER Value; + ULONG CountsLeft; + + if (NULL != PerformanceFreq) + { + PerformanceFreq->QuadPart = CLOCK_TICK_RATE; + } + + do + { + KeQueryTickCount(&TicksOld); + CountsLeft = Read8254Timer(); + Value.QuadPart = TicksOld.QuadPart * LATCH + (LATCH - CountsLeft); + KeQueryTickCount(&TicksNew); + } + while (TicksOld.QuadPart != TicksNew.QuadPart); + + return Value; +} + +/* EOF */ diff --git a/hal/halx86/udelay.c b/hal/halx86/udelay.c deleted file mode 100644 index d4ef150..0000000 --- a/hal/halx86/udelay.c +++ /dev/null @@ -1,223 +0,0 @@ -/* - * ReactOS kernel - * Copyright (C) 2000 David Welch - * Copyright (C) 1999 Gareth Owen , Ramon von Handel - * Copyright (C) 1991, 1992 Linus Torvalds - * - * This software is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This software 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. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this software; see the file COPYING. If not, write - * to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, - * MA 02139, USA. - * - */ -/* $Id$ - * - * PROJECT: ReactOS kernel - * FILE: ntoskrnl/hal/x86/udelay.c - * PURPOSE: Busy waiting - * PROGRAMMER: David Welch (david.welch@seh.ox.ac.uk) - * UPDATE HISTORY: - * 06/11/99 Created - */ - -/* INCLUDES ***************************************************************/ - -#include - -#define NDEBUG -#include - -/* GLOBALS ******************************************************************/ - -static unsigned int delay_count = 1; - -#define MILLISEC (10) -#define FREQ (1000/MILLISEC) - -#define PRECISION (8) - -#define TMR_CTRL 0x43 /* I/O for control */ -#define TMR_CNT0 0x40 /* I/O for counter 0 */ -#define TMR_CNT1 0x41 /* I/O for counter 1 */ -#define TMR_CNT2 0x42 /* I/O for counter 2 */ - -#define TMR_SC0 0 /* Select channel 0 */ -#define TMR_SC1 0x40 /* Select channel 1 */ -#define TMR_SC2 0x80 /* Select channel 2 */ - -#define TMR_LOW 0x10 /* RW low byte only */ -#define TMR_HIGH 0x20 /* RW high byte only */ -#define TMR_BOTH 0x30 /* RW both bytes */ - -#define TMR_MD0 0 /* Mode 0 */ -#define TMR_MD1 0x2 /* Mode 1 */ -#define TMR_MD2 0x4 /* Mode 2 */ -#define TMR_MD3 0x6 /* Mode 3 */ -#define TMR_MD4 0x8 /* Mode 4 */ -#define TMR_MD5 0xA /* Mode 5 */ - -#define TMR_BCD 1 /* BCD mode */ - -#define TMR_LATCH 0 /* Latch command */ - -#define TMR_READ 0xF0 /* Read command */ -#define TMR_CNT 0x20 /* CNT bit (Active low, subtract it) */ -#define TMR_STAT 0x10 /* Status bit (Active low, subtract it) */ -#define TMR_CH2 0x8 /* Channel 2 bit */ -#define TMR_CH1 0x4 /* Channel 1 bit */ -#define TMR_CH0 0x2 /* Channel 0 bit */ - -static BOOLEAN UdelayCalibrated = FALSE; - -/* FUNCTIONS **************************************************************/ - -void init_pit(float h, unsigned char channel) -{ - unsigned int temp=0; - - temp = 1193180/h; - -// WRITE_PORT_UCHAR((PUCHAR)TMR_CTRL, -// (channel*0x40) + TMR_BOTH + TMR_MD3); - WRITE_PORT_UCHAR((PUCHAR)TMR_CTRL, - (channel*0x40) + TMR_BOTH + TMR_MD2); - WRITE_PORT_UCHAR((PUCHAR)(0x40+channel), - (unsigned char) temp); - WRITE_PORT_UCHAR((PUCHAR)(0x40+channel), - (unsigned char) (temp>>8)); -} - -VOID STDCALL -__KeStallExecutionProcessor(ULONG Loops) -{ - register unsigned int i; - for (i=0; i> 8); /* MSB */ - - /* Stage 1: Coarse calibration */ - - WaitFor8254Wraparound(); - - delay_count = 1; - - do { - delay_count <<= 1; /* Next delay count to try */ - - WaitFor8254Wraparound(); - - __KeStallExecutionProcessor(delay_count); /* Do the delay */ - - CurCount = Read8254Timer(); - } while (CurCount > LATCH / 2); - - delay_count >>= 1; /* Get bottom value for delay */ - - /* Stage 2: Fine calibration */ - DbgPrint("delay_count: %d", delay_count); - - calib_bit = delay_count; /* Which bit are we going to test */ - - for(i=0;i>= 1; /* Next bit to calibrate */ - if(!calib_bit) break; /* If we have done all bits, stop */ - - delay_count |= calib_bit; /* Set the bit in delay_count */ - - WaitFor8254Wraparound(); - - __KeStallExecutionProcessor(delay_count); /* Do the delay */ - - CurCount = Read8254Timer(); - if (CurCount <= LATCH / 2) /* If a tick has passed, turn the */ - delay_count &= ~calib_bit; /* calibrated bit back off */ - } - - /* We're finished: Do the finishing touches */ - - delay_count /= (MILLISEC / 2); /* Calculate delay_count for 1ms */ - - DbgPrint("]\n"); - DbgPrint("delay_count: %d\n", delay_count); - DbgPrint("CPU speed: %d\n", delay_count/250); -#if 0 - DbgPrint("About to start delay loop test\n"); - DbgPrint("Waiting for five minutes..."); - for (i = 0; i < (5*60*1000*20); i++) - { - KeStallExecutionProcessor(50); - } - DbgPrint("finished\n"); - for(;;); -#endif -} - -/* EOF */ diff --git a/iface/addsys/genw32k.c b/iface/addsys/genw32k.c index d7908c5..83c8570 100644 --- a/iface/addsys/genw32k.c +++ b/iface/addsys/genw32k.c @@ -22,8 +22,6 @@ #define PARAMETERIZED_LIBS -#define VERBOSE - #define INPUT_BUFFER_SIZE 255 #define INDEX 0x1000 /* SSDT index 1 */ @@ -307,7 +305,8 @@ process( void usage(char * argv0) { - printf("Usage: %s w32k.lst ssdt.h win32k.c win32k.c\n" + printf("Usage: %s w32ksvc.db w32k.lst ssdt.h win32k.c win32k.c\n" + " w32ksvc.db input file(system calls database)\n" " w32k.lst system functions database\n" " ssdt.h WIN32K service table\n" " win32k.c GDI32 stubs\n" diff --git a/iface/addsys/w32ksvc.db b/iface/addsys/w32ksvc.db index b7ccd61..bc2e8df 100644 --- a/iface/addsys/w32ksvc.db +++ b/iface/addsys/w32ksvc.db @@ -1,286 +1,287 @@ # NAME ARG_COUNT -W32kAbortDoc 1 -W32kAbortPath 1 -W32kAddFontResource 1 -W32kAngleArc 6 -W32kAnimatePalette 4 -W32kArc 9 -W32kArcTo 9 -W32kBeginPath 1 -W32kBitBlt 9 -W32kCancelDC 1 -W32kCheckColorsInGamut 4 -#W32kChoosePixelFormat (2?) -W32kChord 9 -W32kCloseEnhMetaFile 1 -W32kCloseFigure 1 -W32kCloseMetaFile 1 -W32kColorMatchToTarget 3 -W32kCombineRgn 4 -W32kCombineTransform 3 -W32kCopyEnhMetaFile 2 -W32kCopyMetaFile 2 -W32kCreateBitmap 5 -W32kCreateBitmapIndirect 1 -W32kCreateBrushIndirect 1 -W32kCreateColorSpace 1 -W32kCreateCompatibleBitmap 3 -W32kCreateCompatableDC 1 -W32kCreateDC 4 -W32kCreateDIBitmap 6 -W32kCreateDIBPatternBrush 2 -W32kCreateDIBPatternBrushPt 2 -W32kCreateDIBSection 6 -W32kCreateDiscardableBitmap 3 -W32kCreateEllipticRgn 4 -W32kCreateEllipticRgnIndirect 1 -W32kCreateEnhMetaFile 4 -W32kCreateFont 14 -W32kCreateFontIndirect 1 -W32kCreateHalftonePalette 1 -W32kCreateHatchBrush 2 -W32kCreateIC 4 -W32kCreateMetaFile 1 -W32kCreatePalette 1 -W32kCreatePatternBrush 1 -W32kCreatePen 3 -W32kCreatePenIndirect 1 -W32kCreatePolygonRgn 3 -W32kCreatePolyPolygonRgn 4 -W32kCreateRectRgn 4 -W32kCreateRectRgnIndirect 1 -W32kCreateRoundRectRgn 6 -W32kCreateScalableFontResource 4 -W32kCreateSolidBrush 1 -W32kDPtoLP 3 -W32kDeleteColorSpace 1 -W32kDeleteDC 1 -W32kDeleteEnhMetaFile 1 -W32kDeleteMetaFile 1 -W32kDeleteObject 1 -W32kCleanupForProcess 1 -W32kDescribePixelFormat 4 -#W32kDeviceCapabilitiesEx ? -W32kDrawEscape 4 -W32kEllipse 5 -W32kEndDoc 1 -W32kEndPage 1 -W32kEndPath 1 -W32kEnumEnhMetaFile 5 -W32kEnumFontFamilies 4 -W32kEnumFontFamiliesEx 5 -W32kEnumFonts 4 -W32kEnumICMProfiles 3 -W32kEnumMetaFile 4 -W32kEnumObjects 4 -W32kEqualRgn 2 -W32kEscape 5 -W32kExcludeClipRect 5 -W32kExtCreatePen 5 -W32kExtCreateRegion 3 -W32kExtEscape 6 -W32kExtFloodFill 5 -W32kExtSelectClipRgn 3 -W32kExtTextOut 8 -W32kFillPath 1 -W32kFillRgn 3 -W32kFixBrushOrgEx 0 -W32kFlattenPath 1 -W32kFloodFill 4 -W32kFrameRgn 5 -W32kGdiComment 3 -W32kGdiFlush 0 -W32kGdiGetBatchLimit 0 -#W32kGdiPlayDCScript ? -#W32kGdiPlayJournal ? -#W32kGdiPlayScript ? -#W32kGdiPlaySpoolStream ? -W32kGdiSetBatchLimit 1 -W32kGetArcDirection 1 -W32kGetAspectRatioFilterEx 2 -W32kGetBitmapBits 3 -W32kGetBitmapDimensionEx 2 -W32kGetBkColor 1 -W32kGetBkMode 1 -W32kGetBoundsRect 3 -W32kGetBrushOrgEx 2 -W32kGetCharABCWidths 4 -W32kGetCharABCWidthsFloat 4 -W32kGetCharacterPlacement 6 -W32kGetCharWidth 4 -W32kGetCharWidth32 4 -W32kGetCharWidthFloat 4 -W32kGetClipBox 2 -W32kGetClipRgn 1 -W32kGetColorAdjustment 2 -W32kGetColorSpace 1 -W32kGetCurrentObject 2 -W32kGetCurrentPositionEx 2 -W32kGetDCOrgEx 2 -W32kGetDIBColorTable 4 -W32kGetDIBits 7 -W32kGetDeviceCaps 2 -W32kGetDeviceGammaRamp 2 -W32kGetEnhMetaFile 1 -W32kGetEnhMetaFileBits 3 -W32kGetEnhMetaFileDescription 3 -W32kGetEnhMetaFileHeader 3 -W32kGetEnhMetaFilePaletteEntries 3 -W32kGetEnhMetaFilePixelFormat 3 -W32kGetFontLanguageInfo 1 -#W32kGetFontResourceInfo ? -W32kGetGlyphOutline 7 -#W32kGetGlyphOutlineWow ? -W32kGetGraphicsMode 1 -W32kGetICMProfile 3 -W32kGetKerningPairs 3 -W32kGetLogColorSpace 3 -W32kGetMapMode 1 -W32kGetMetaFile 1 -W32kGetMetaFileBitsEx 3 -W32kGetMetaRgn 2 -W32kGetMiterLimit 2 -W32kGetNearestColor 2 -W32kGetNearestPaletteIndex 2 -W32kGetObject 3 -W32kGetObjectType 1 -W32kGetOutlineTextMetrics 3 -W32kGetPaletteEntries 4 -W32kGetPath 4 -W32kGetPixel 1 -W32kGetPixelFormat 1 -W32kGetPolyFillMode 1 -W32kGetROP2 1 -#W32kGetRandomRgn ? -W32kGetRasterizerCaps 2 -W32kGetRelAbs 1 -W32kGetRegionData 3 -W32kGetRgnBox 2 -W32kGetStockObject 1 -W32kGetStretchBltMode 1 -W32kGetSystemPaletteEntries 4 -W32kGetSystemPaletteUse 1 -W32kGetTextAlign 1 -W32kGetTextCharset 1 -W32kGetTextCharsetInfo 3 -W32kGetTextColor 1 -W32kGetTextExtentExPoint 7 -W32kGetTextExtentPoint 4 -W32kGetTextExtentPoint32 4 -W32kGetTextFace 3 -W32kGetTextMetrics 2 -W32kGetViewportExtEx 2 -W32kGetViewportOrgEx 2 -W32kGetWinMetaFileBits 5 -W32kGetWindowExtEx 2 -W32kGetWindowOrgEx 2 -W32kGetWorldTransform 2 -W32kInitialize 0 -W32kIntersectClipRect 5 -W32kInvertRgn 2 -W32kLPtoDP 3 -W32kLineTo 3 -W32kMaskBlt 12 -W32kModifyWorldTransform 3 -W32kMoveToEx 4 -W32kOffsetClipRgn 3 -W32kOffsetRgn 3 -W32kOffsetViewportOrgEx 4 -W32kOffsetWindowOrgEx 4 -W32kPaintRgn 2 -W32kPatBlt 6 -W32kPathToRegion 1 -W32kPie 9 -W32kPlayEnhMetaFile 3 -W32kPlayEnhMetaFileRecord 4 -W32kPlayMetaFile 2 -W32kPlayMetaFileRecord 4 -W32kPlgBlt 10 -W32kPolyBezier 3 -W32kPolyBezierTo 3 -W32kPolyDraw 4 -W32kPolyline 3 -W32kPolylineTo 3 -W32kPolyPolyline 4 -W32kPolyTextOut 3 -W32kPolygon 3 -W32kPolyPolygon 4 -W32kPtInRegion 3 -W32kPtVisible 3 -W32kRealizePalette 1 -W32kRectInRegion 2 -W32kRectVisible 2 -W32kRectangle 5 -W32kRemoveFontResource 1 -W32kResetDC 2 -W32kResizePalette 2 -W32kRestoreDC 2 -W32kRoundRect 7 -W32kSaveDC 1 -W32kScaleViewportExtEx 6 -W32kScaleWindowExtEx 6 -#W32kSelectBrushLocal ? -W32kSelectClipPath 2 -W32kSelectClipRgn 2 -#W32kSelectFontLocal ? -W32kSelectObject 2 -W32kSelectPalette 3 -W32kSetAbortProc 2 -W32kSetArcDirection 2 -W32kSetBitmapBits 3 -W32kSetBitmapDimensionEx 4 -W32kSetBkColor 2 -W32kSetBkMode 2 -W32kSetBoundsRect 3 -W32kSetBrushOrgEx 4 -W32kSetColorAdjustment 2 -W32kSetColorSpace 2 -W32kSetDIBColorTable 4 -W32kSetDIBits 7 -W32kSetDIBitsToDevice 12 -W32kSetDeviceGammaRamp 2 -W32kSetEnhMetaFileBits 2 -#W32kSetFontEnumeration ? -W32kSetGraphicsMode 2 -W32kSetICMMode 2 -W32kSetICMProfile 2 -W32kSetMapMode 2 -W32kSetMapperFlags 2 -W32kSetMetaFileBitsEx 2 -W32kSetMetaRgn 1 -W32kSetMiterLimit 3 -W32kSetPaletteEntries 4 -W32kSetPixel 4 -W32kSetPixelFormat 3 -W32kSetPixelV 4 -W32kSetPolyFillMode 2 -W32kSetROP2 2 -W32kSetRectRgn 5 -#W32kSetRelAbs 2 -W32kSetStretchBltMode 2 -W32kSetSystemPaletteUse 2 -W32kSetTextAlign 2 -W32kSetTextColor 2 -W32kSetTextJustification 3 -W32kSetViewportExtEx 4 -W32kSetViewportOrgEx 4 -#W32kSetWinMetaFileBits 1 -W32kSetWindowExtEx 4 -W32kSetWindowOrgEx 4 -W32kSetWorldTransform 2 -W32kStartDoc 2 -W32kStartPage 1 -W32kStretchBlt 11 -W32kStretchDIBits 13 -W32kStrokeAndFillPath 1 -W32kStrokePath 1 -W32kSwapBuffers 1 -W32kTextOut 5 -W32kTranslateCharsetInfo 3 -W32kUnrealizeObject 2 -W32kUpdateColors 1 -W32kUpdateICMRegKey 4 -W32kWidenPath 1 +NtGdiAbortDoc 1 +NtGdiAbortPath 1 +NtGdiAddFontResource 1 +NtGdiAngleArc 6 +NtGdiAnimatePalette 4 +NtGdiArc 9 +NtGdiArcTo 9 +NtGdiBeginPath 1 +NtGdiBitBlt 9 +NtGdiCancelDC 1 +NtGdiCheckColorsInGamut 4 +#NtGdiChoosePixelFormat (2?) +NtGdiChord 9 +NtGdiCloseEnhMetaFile 1 +NtGdiCloseFigure 1 +NtGdiCloseMetaFile 1 +NtGdiColorMatchToTarget 3 +NtGdiCombineRgn 4 +NtGdiCombineTransform 3 +NtGdiCopyEnhMetaFile 2 +NtGdiCopyMetaFile 2 +NtGdiCreateBitmap 5 +NtGdiCreateBitmapIndirect 1 +NtGdiCreateBrushIndirect 1 +NtGdiCreateColorSpace 1 +NtGdiCreateCompatibleBitmap 3 +NtGdiCreateCompatableDC 1 +NtGdiCreateDC 4 +NtGdiCreateDIBitmap 6 +NtGdiCreateDIBPatternBrush 2 +NtGdiCreateDIBPatternBrushPt 2 +NtGdiCreateDIBSection 6 +NtGdiCreateDiscardableBitmap 3 +NtGdiCreateEllipticRgn 4 +NtGdiCreateEllipticRgnIndirect 1 +NtGdiCreateEnhMetaFile 4 +NtGdiCreateFont 14 +NtGdiCreateFontIndirect 1 +NtGdiCreateHalftonePalette 1 +NtGdiCreateHatchBrush 2 +NtGdiCreateIC 4 +NtGdiCreateIcon 9 +NtGdiCreateMetaFile 1 +NtGdiCreatePalette 1 +NtGdiCreatePatternBrush 1 +NtGdiCreatePen 3 +NtGdiCreatePenIndirect 1 +NtGdiCreatePolygonRgn 3 +NtGdiCreatePolyPolygonRgn 4 +NtGdiCreateRectRgn 4 +NtGdiCreateRectRgnIndirect 1 +NtGdiCreateRoundRectRgn 6 +NtGdiCreateScalableFontResource 4 +NtGdiCreateSolidBrush 1 +NtGdiDPtoLP 3 +NtGdiDeleteColorSpace 1 +NtGdiDeleteDC 1 +NtGdiDeleteEnhMetaFile 1 +NtGdiDeleteMetaFile 1 +NtGdiDeleteObject 1 +NtGdiDescribePixelFormat 4 +#NtGdiDeviceCapabilitiesEx ? +NtGdiDrawEscape 4 +NtGdiEllipse 5 +NtGdiEndDoc 1 +NtGdiEndPage 1 +NtGdiEndPath 1 +NtGdiEnumEnhMetaFile 5 +NtGdiEnumFontFamilies 4 +NtGdiEnumFontFamiliesEx 5 +NtGdiEnumFonts 4 +NtGdiEnumICMProfiles 3 +NtGdiEnumMetaFile 4 +NtGdiEnumObjects 4 +NtGdiEqualRgn 2 +NtGdiEscape 5 +NtGdiExcludeClipRect 5 +NtGdiExtCreatePen 5 +NtGdiExtCreateRegion 3 +NtGdiExtEscape 6 +NtGdiExtFloodFill 5 +NtGdiExtSelectClipRgn 3 +NtGdiExtTextOut 8 +NtGdiFillPath 1 +NtGdiFillRgn 3 +NtGdiFixBrushOrgEx 0 +NtGdiFlattenPath 1 +NtGdiFloodFill 4 +NtGdiFrameRgn 5 +NtGdiGdiComment 3 +NtGdiGdiFlush 0 +NtGdiGdiGetBatchLimit 0 +#NtGdiGdiPlayDCScript ? +#NtGdiGdiPlayJournal ? +#NtGdiGdiPlayScript ? +#NtGdiGdiPlaySpoolStream ? +NtGdiGdiSetBatchLimit 1 +NtGdiGetArcDirection 1 +NtGdiGetAspectRatioFilterEx 2 +NtGdiGetBitmapBits 3 +NtGdiGetBitmapDimensionEx 2 +NtGdiGetBkColor 1 +NtGdiGetBkMode 1 +NtGdiGetBoundsRect 3 +NtGdiGetBrushOrgEx 2 +NtGdiGetCharABCWidths 4 +NtGdiGetCharABCWidthsFloat 4 +NtGdiGetCharacterPlacement 6 +NtGdiGetCharWidth 4 +NtGdiGetCharWidth32 4 +NtGdiGetCharWidthFloat 4 +NtGdiGetClipBox 2 +NtGdiGetClipRgn 1 +NtGdiGetColorAdjustment 2 +NtGdiGetColorSpace 1 +NtGdiGetCurrentObject 2 +NtGdiGetCurrentPositionEx 2 +NtGdiGetDCOrgEx 2 +NtGdiGetDIBColorTable 4 +NtGdiGetDIBits 7 +NtGdiGetDeviceCaps 2 +NtGdiGetDeviceGammaRamp 2 +NtGdiGetEnhMetaFile 1 +NtGdiGetEnhMetaFileBits 3 +NtGdiGetEnhMetaFileDescription 3 +NtGdiGetEnhMetaFileHeader 3 +NtGdiGetEnhMetaFilePaletteEntries 3 +NtGdiGetEnhMetaFilePixelFormat 3 +NtGdiGetFontLanguageInfo 1 +#NtGdiGetFontResourceInfo ? +NtGdiGetGlyphOutline 7 +#NtGdiGetGlyphOutlineWow ? +NtGdiGetGraphicsMode 1 +NtGdiGetICMProfile 3 +NtGdiGetKerningPairs 3 +NtGdiGetLogColorSpace 3 +NtGdiGetMapMode 1 +NtGdiGetMetaFile 1 +NtGdiGetMetaFileBitsEx 3 +NtGdiGetMetaRgn 2 +NtGdiGetMiterLimit 2 +NtGdiGetNearestColor 2 +NtGdiGetNearestPaletteIndex 2 +NtGdiGetObject 3 +NtGdiGetObjectType 1 +NtGdiGetOutlineTextMetrics 3 +NtGdiGetPaletteEntries 4 +NtGdiGetPath 4 +NtGdiGetPixel 1 +NtGdiGetPixelFormat 1 +NtGdiGetPolyFillMode 1 +NtGdiGetROP2 1 +#NtGdiGetRandomRgn ? +NtGdiGetRasterizerCaps 2 +NtGdiGetRelAbs 1 +NtGdiGetRegionData 3 +NtGdiGetRgnBox 2 +NtGdiGetStockObject 1 +NtGdiGetStretchBltMode 1 +NtGdiGetSystemPaletteEntries 4 +NtGdiGetSystemPaletteUse 1 +NtGdiGetTextAlign 1 +NtGdiGetTextCharset 1 +NtGdiGetTextCharsetInfo 3 +NtGdiGetTextColor 1 +NtGdiGetTextExtentExPoint 7 +NtGdiGetTextExtentPoint 4 +NtGdiGetTextExtentPoint32 4 +NtGdiGetTextFace 3 +NtGdiGetTextMetrics 2 +NtGdiGetViewportExtEx 2 +NtGdiGetViewportOrgEx 2 +NtGdiGetWinMetaFileBits 5 +NtGdiGetWindowExtEx 2 +NtGdiGetWindowOrgEx 2 +NtGdiGetWorldTransform 2 +Win32kInitialize 0 +NtGdiIntersectClipRect 5 +NtGdiInvertRgn 2 +NtGdiLPtoDP 3 +NtGdiLineTo 3 +NtGdiMaskBlt 12 +NtGdiModifyWorldTransform 3 +NtGdiMoveToEx 4 +NtGdiOffsetClipRgn 3 +NtGdiOffsetRgn 3 +NtGdiOffsetViewportOrgEx 4 +NtGdiOffsetWindowOrgEx 4 +NtGdiPaintRgn 2 +NtGdiPatBlt 6 +NtGdiPathToRegion 1 +NtGdiPie 9 +NtGdiPlayEnhMetaFile 3 +NtGdiPlayEnhMetaFileRecord 4 +NtGdiPlayMetaFile 2 +NtGdiPlayMetaFileRecord 4 +NtGdiPlgBlt 10 +NtGdiPolyBezier 3 +NtGdiPolyBezierTo 3 +NtGdiPolyDraw 4 +NtGdiPolyline 3 +NtGdiPolylineTo 3 +NtGdiPolyPatBlt 5 +NtGdiPolyPolyline 4 +NtGdiPolyTextOut 3 +NtGdiPolygon 3 +NtGdiPolyPolygon 4 +NtGdiPtInRegion 3 +NtGdiPtVisible 3 +NtGdiRealizePalette 1 +NtGdiRectInRegion 2 +NtGdiRectVisible 2 +NtGdiRectangle 5 +NtGdiRemoveFontResource 1 +NtGdiResetDC 2 +NtGdiResizePalette 2 +NtGdiRestoreDC 2 +NtGdiRoundRect 7 +NtGdiSaveDC 1 +NtGdiScaleViewportExtEx 6 +NtGdiScaleWindowExtEx 6 +#NtGdiSelectBrushLocal ? +NtGdiSelectClipPath 2 +NtGdiSelectClipRgn 2 +#NtGdiSelectFontLocal ? +NtGdiSelectObject 2 +NtGdiSelectPalette 3 +NtGdiSetAbortProc 2 +NtGdiSetArcDirection 2 +NtGdiSetBitmapBits 3 +NtGdiSetBitmapDimensionEx 4 +NtGdiSetBkColor 2 +NtGdiSetBkMode 2 +NtGdiSetBoundsRect 3 +NtGdiSetBrushOrgEx 4 +NtGdiSetColorAdjustment 2 +NtGdiSetColorSpace 2 +NtGdiSetDIBColorTable 4 +NtGdiSetDIBits 7 +NtGdiSetDIBitsToDevice 12 +NtGdiSetDeviceGammaRamp 2 +NtGdiSetEnhMetaFileBits 2 +#NtGdiSetFontEnumeration ? +NtGdiSetGraphicsMode 2 +NtGdiSetICMMode 2 +NtGdiSetICMProfile 2 +NtGdiSetMapMode 2 +NtGdiSetMapperFlags 2 +NtGdiSetMetaFileBitsEx 2 +NtGdiSetMetaRgn 1 +NtGdiSetMiterLimit 3 +NtGdiSetPaletteEntries 4 +NtGdiSetPixel 4 +NtGdiSetPixelFormat 3 +NtGdiSetPixelV 4 +NtGdiSetPolyFillMode 2 +NtGdiSetROP2 2 +NtGdiSetRectRgn 5 +#NtGdiSetRelAbs 2 +NtGdiSetStretchBltMode 2 +NtGdiSetSystemPaletteUse 2 +NtGdiSetTextAlign 2 +NtGdiSetTextColor 2 +NtGdiSetTextJustification 3 +NtGdiSetViewportExtEx 4 +NtGdiSetViewportOrgEx 4 +#NtGdiSetWinMetaFileBits 1 +NtGdiSetWindowExtEx 4 +NtGdiSetWindowOrgEx 4 +NtGdiSetWorldTransform 2 +NtGdiStartDoc 2 +NtGdiStartPage 1 +NtGdiStretchBlt 11 +NtGdiStretchDIBits 13 +NtGdiStrokeAndFillPath 1 +NtGdiStrokePath 1 +NtGdiSwapBuffers 1 +NtGdiTextOut 5 +NtGdiTranslateCharsetInfo 3 +NtGdiUnrealizeObject 2 +NtGdiUpdateColors 1 +NtGdiUpdateICMRegKey 4 +NtGdiWidenPath 1 NtUserActivateKeyboardLayout 2 NtUserAlterWindowStyle 3 NtUserAttachThreadInput 3 @@ -288,6 +289,7 @@ NtUserBeginPaint 2 NtUserBitBltSysBmp 8 NtUserBlockInput 1 NtUserBuildHwndList 7 +NtUserBuildMenuItemList 4 NtUserBuildNameList 4 NtUserBuildPropList 4 NtUserCallHwnd 2 @@ -315,6 +317,7 @@ NtUserCreateAcceleratorTable 2 NtUserCreateCaret 4 NtUserCreateDesktop 5 NtUserCreateLocalMemHandle 4 +NtUserCreateMenu 0 NtUserCreateWindowEx 13 NtUserCreateWindowStation 6 NtUserDdeGetQualityOfService 3 @@ -348,15 +351,17 @@ NtUserEvent 1 NtUserExcludeUpdateRgn 2 NtUserFillWindow 4 NtUserFindExistingCursorIcon 3 -NtUserFindWindowEx 5 +NtUserFindWindowEx 4 NtUserFlashWindowEx 1 +NtUserGetActiveWindow 0 NtUserGetAltTabInfo 6 NtUserGetAncestor 2 NtUserGetAsyncKeyState 1 +NtUserGetCapture 0 NtUserGetCaretBlinkTime 0 NtUserGetCaretPos 1 NtUserGetClassInfo 5 -NtUserGetClassLong 2 +NtUserGetClassLong 3 NtUserGetClassName 3 NtUserGetClientOrigin 2 NtUserGetClientRect 2 @@ -374,6 +379,7 @@ NtUserGetCursorFrameInfo 4 NtUserGetCursorInfo 1 NtUserGetDC 1 NtUserGetDCEx 3 +NtUserGetMenuDefaultItem 3 NtUserGetDoubleClickTime 0 NtUserGetForegroundWindow 0 NtUserGetGuiResources 2 @@ -399,6 +405,7 @@ NtUserGetProp 2 NtUserGetPriorityClipboardFormat 2 NtUserGetProcessWindowStation 0 NtUserGetScrollBarInfo 3 +NtUserGetScrollInfo 3 NtUserGetSystemMenu 2 NtUserGetSystemMetrics 1 NtUserGetThreadDesktop 2 @@ -408,7 +415,7 @@ NtUserGetUpdateRect 3 NtUserGetUpdateRgn 3 NtUserGetWindowDC 1 NtUserGetWindowPlacement 2 -NtUserGetWindowLong 2 +NtUserGetWindowLong 3 NtUserGetWindowRect 2 NtUserGetWOWClass 2 NtUserHideCaret 1 @@ -416,6 +423,7 @@ NtUserHiliteMenuItem 4 NtUserImpersonateDdeClientWindow 2 NtUserInitializeClientPfnArrays 4 NtUserInitTask 11 +NtUserInsertMenuItem 4 NtUserInternalGetWindowText 3 NtUserInvalidateRect 3 NtUserInvalidateRgn 3 @@ -426,7 +434,9 @@ NtUserLockWindowStation 1 NtUserLockWindowUpdate 1 NtUserLockWorkStation 0 NtUserMapVirtualKeyEx 4 +NtUserMenuInfo 3 NtUserMenuItemFromPoint 4 +NtUserMenuItemInfo 5 NtUserMessageCall 7 NtUserMinMaximize 3 NtUserMNDragLeave 0 @@ -448,7 +458,7 @@ NtUserQueryUserCounters 5 NtUserQueryWindow 2 NtUserRealChildWindowFromPoint 3 NtUserRedrawWindow 4 -NtUserRegisterClassExWOW 6 +NtUserRegisterClassExWOW 5 NtUserRegisterHotKey 4 NtUserRegisterTasklist 1 NtUserRegisterWindowMessage 1 @@ -542,5 +552,12 @@ NtUserWaitMessage 0 NtUserWin32PoolAllocationStats 6 NtUserWindowFromPoint 2 NtUserYieldTask 0 +NtUserGetDesktopWindow 0 # ReactOS only system calls NtUserAcquireOrReleaseInputOwnership 1 +NtUserGetWindowThreadProcessId 2 +NtUserGetQueueStatus 1 +NtUserGetParent 1 +NtUserGetWindow 2 +NtUserGetLastActivePopup 1 +NtUserGetShellWindow 0 diff --git a/iface/native/sysfuncs.lst b/iface/native/sysfuncs.lst index a1a1de9..52e82a3 100644 --- a/iface/native/sysfuncs.lst +++ b/iface/native/sysfuncs.lst @@ -159,6 +159,7 @@ NtSetEaFile ZwSetEaFile 16 NtSetEvent ZwSetEvent 8 NtSetHighEventPair ZwSetHighEventPair 4 NtSetHighWaitLowEventPair ZwSetHighWaitLowEventPair 4 +NtSetHighWaitLowThread ZwSetHighWaitLowThread 0 NtSetInformationFile ZwSetInformationFile 20 NtSetInformationKey ZwSetInformationKey 16 NtSetInformationObject ZwSetInformationObject 16 @@ -169,6 +170,7 @@ NtSetIntervalProfile ZwSetIntervalProfile 8 NtSetLdtEntries ZwSetLdtEntries 24 NtSetLowEventPair ZwSetLowEventPair 4 NtSetLowWaitHighEventPair ZwSetLowWaitHighEventPair 4 +NtSetLowWaitHighThread ZwSetLowWaitHighThread 0 NtSetSecurityObject ZwSetSecurityObject 12 NtSetSystemEnvironmentValue ZwSetSystemEnvironmentValue 8 NtSetSystemInformation ZwSetSystemInformation 12 diff --git a/include/accctrl.h b/include/accctrl.h new file mode 100644 index 0000000..7c3b609 --- /dev/null +++ b/include/accctrl.h @@ -0,0 +1,465 @@ +/* + * Copyright (C) 2002 Alexandre Julliard + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * 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. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef __WINE_ACCCTRL_H +#define __WINE_ACCCTRL_H + +#ifdef __cplusplus +extern "C" { +#endif + +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 _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; + +typedef_tident(OBJECTS_AND_NAME_) +typedef_tident(POBJECTS_AND_NAME_) + +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_tident(TRUSTEE_) +typedef_tident(PTRUSTEE_) +typedef_tident(TRUSTEE) +typedef_tident(PTRUSTEE) + +typedef enum _ACCESS_MODE +{ + NOT_USED_ACCESS = 0, + GRANT_ACCESS, + SET_ACCESS, + DENY_ACCESS, + REVOKE_ACCESS, + SET_AUDIT_SUCCESS, + SET_AUDIT_FAILURE +} ACCESS_MODE; + +#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 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_tident(EXPLICIT_ACCESS_) +typedef_tident(PEXPLICIT_ACCESS_) +typedef_tident(EXPLICIT_ACCESS) +typedef_tident(PEXPLICIT_ACCESS) + +typedef ULONG ACCESS_RIGHTS, *PACCESS_RIGHTS; +typedef ULONG INHERIT_FLAGS, *PINHERIT_FLAGS; + +typedef struct _ACTRL_ACCESS_ENTRYA +{ + TRUSTEE_A Trustee; + ULONG fAccessFlags; + ACCESS_RIGHTS Access; + ACCESS_RIGHTS ProvSpecificAccess; + INHERIT_FLAGS Inheritance; + LPSTR 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; + LPWSTR lpInheritProperty; +} ACTRL_ACCESS_ENTRYW, *PACTRL_ACCESS_ENTRYW; + +typedef_tident(ACTRL_ACCESS_ENTRY) +typedef_tident(PACTRL_ACCESS_ENTRY) + + +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_tident(ACTRL_ACCESS_ENTRY_LIST) +typedef_tident(PACTRL_ACCESS_ENTRY_LIST) + +typedef struct _ACTRL_PROPERTY_ENTRYA +{ + LPSTR lpProperty; + PACTRL_ACCESS_ENTRY_LISTA pAccessEntryList; + ULONG fListFlags; +} ACTRL_PROPERTY_ENTRYA, *PACTRL_PROPERTY_ENTRYA; + +typedef struct _ACTRL_PROPERTY_ENTRYW +{ + LPWSTR lpProperty; + PACTRL_ACCESS_ENTRY_LISTW pAccessEntryList; + ULONG fListFlags; +} ACTRL_PROPERTY_ENTRYW, *PACTRL_PROPERTY_ENTRYW; + +typedef_tident(ACTRL_PROPERTY_ENTRY) +typedef_tident(PACTRL_PROPERTY_ENTRY) + +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_tident(ACTRL_ACCESS) +typedef_tident(PACTRL_ACCESS) +typedef_tident(ACTRL_AUDIT) +typedef_tident(PACTRL_AUDIT) + +#define TRUSTEE_ACCESS_ALLOWED 0x00000001 +#define TRUSTEE_ACCESS_READ 0x00000002 +#define TRUSTEE_ACCESS_WRITE 0x00000004 + +#define TRUSTEE_ACCESS_EXPLICIT 0x00000001 +#define TRUSTEE_ACCESS_READ_WRITE (TRUSTEE_ACCESS_READ|TRUSTEE_ACCESS_WRITE) +#define TRUSTEE_ACCESS_ALL 0xFFFFFFFF + +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_tident(TRUSTEE_ACCESS) +typedef_tident(PTRUSTEE_ACCESS) + +#define ACTRL_RESERVED 0x00000000 +#define ACTRL_PERM_1 0x00000001 +#define ACTRL_PERM_2 0x00000002 +#define ACTRL_PERM_3 0x00000004 +#define ACTRL_PERM_4 0x00000008 +#define ACTRL_PERM_5 0x00000010 +#define ACTRL_PERM_6 0x00000020 +#define ACTRL_PERM_7 0x00000040 +#define ACTRL_PERM_8 0x00000080 +#define ACTRL_PERM_9 0x00000100 +#define ACTRL_PERM_10 0x00000200 +#define ACTRL_PERM_11 0x00000400 +#define ACTRL_PERM_12 0x00000800 +#define ACTRL_PERM_13 0x00001000 +#define ACTRL_PERM_14 0x00002000 +#define ACTRL_PERM_15 0x00004000 +#define ACTRL_PERM_16 0x00008000 +#define ACTRL_PERM_17 0x00010000 +#define ACTRL_PERM_18 0x00020000 +#define ACTRL_PERM_19 0x00040000 +#define ACTRL_PERM_20 0x00080000 + +#define ACTRL_ACCESS_ALLOWED 0x00000001 +#define ACTRL_ACCESS_DENIED 0x00000002 +#define ACTRL_AUDIT_SUCCESS 0x00000004 +#define ACTRL_AUDIT_FAILURE 0x00000008 + +#define ACTRL_ACCESS_PROTECTED 0x00000001 + +#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_STD_RIGHT_REQUIRED (ACTRL_STD_RIGHTS_ALL & ~ACTRL_SYNCHRONIZE) + +#define ACTRL_DS_OPEN ACTRL_RESERVED +#define ACTRL_DS_CREATE_CHILD ACTRL_PERM_1 +#define ACTRL_DS_DELETE_CHILD ACTRL_PERM_2 +#define ACTRL_DS_LIST ACTRL_PERM_3 +#define ACTRL_DS_SELF ACTRL_PERM_4 +#define ACTRL_DS_READ_PROP ACTRL_PERM_5 +#define ACTRL_DS_WRITE_PROP ACTRL_PERM_6 +#define ACTRL_DS_DELETE_TREE ACTRL_PERM_7 +#define ACTRL_DS_LIST_OBJECT ACTRL_PERM_8 +#define ACTRL_DS_CONTROL_ACCESS ACTRL_PERM_9 + +#define ACTRL_FILE_READ ACTRL_PERM_1 +#define ACTRL_FILE_WRITE ACTRL_PERM_2 +#define ACTRL_FILE_APPEND ACTRL_PERM_3 +#define ACTRL_FILE_READ_PROP ACTRL_PERM_4 +#define ACTRL_FILE_WRITE_PROP ACTRL_PERM_5 +#define ACTRL_FILE_EXECUTE ACTRL_PERM_6 +#define ACTRL_FILE_READ_ATTRIB ACTRL_PERM_8 +#define ACTRL_FILE_WRITE_ATTRIB ACTRL_PERM_9 +#define ACTRL_FILE_CREATE_PIPE ACTRL_PERM_10 +#define ACTRL_DIR_LIST ACTRL_PERM_1 +#define ACTRL_DIR_CREATE_OBJECT ACTRL_PERM_2 +#define ACTRL_DIR_CREATE_CHILD ACTRL_PERM_3 +#define ACTRL_DIR_DELETE_CHILD ACTRL_PERM_7 +#define ACTRL_DIR_TRAVERSE ACTRL_PERM_6 +#define ACTRL_KERNEL_TERMINATE ACTRL_PERM_1 +#define ACTRL_KERNEL_THREAD ACTRL_PERM_2 +#define ACTRL_KERNEL_VM ACTRL_PERM_3 +#define ACTRL_KERNEL_VM_READ ACTRL_PERM_4 +#define ACTRL_KERNEL_VM_WRITE ACTRL_PERM_5 +#define ACTRL_KERNEL_DUP_HANDLE ACTRL_PERM_6 +#define ACTRL_KERNEL_PROCESS ACTRL_PERM_7 +#define ACTRL_KERNEL_SET_INFO ACTRL_PERM_8 +#define ACTRL_KERNEL_GET_INFO ACTRL_PERM_9 +#define ACTRL_KERNEL_CONTROL ACTRL_PERM_10 +#define ACTRL_KERNEL_ALERT ACTRL_PERM_11 +#define ACTRL_KERNEL_GET_CONTEXT ACTRL_PERM_12 +#define ACTRL_KERNEL_SET_CONTEXT ACTRL_PERM_13 +#define ACTRL_KERNEL_TOKEN ACTRL_PERM_14 +#define ACTRL_KERNEL_IMPERSONATE ACTRL_PERM_15 +#define ACTRL_KERNEL_DIMPERSONATE ACTRL_PERM_16 +#define ACTRL_PRINT_SADMIN ACTRL_PERM_1 +#define ACTRL_PRINT_SLIST ACTRL_PERM_2 +#define ACTRL_PRINT_PADMIN ACTRL_PERM_3 +#define ACTRL_PRINT_PUSE ACTRL_PERM_4 +#define ACTRL_PRINT_JADMIN ACTRL_PERM_5 +#define ACTRL_SVC_GET_INFO ACTRL_PERM_1 +#define ACTRL_SVC_SET_INFO ACTRL_PERM_2 +#define ACTRL_SVC_STATUS ACTRL_PERM_3 +#define ACTRL_SVC_LIST ACTRL_PERM_4 +#define ACTRL_SVC_START ACTRL_PERM_5 +#define ACTRL_SVC_STOP ACTRL_PERM_6 +#define ACTRL_SVC_PAUSE ACTRL_PERM_7 +#define ACTRL_SVC_INTERROGATE ACTRL_PERM_8 +#define ACTRL_SVC_UCONTROL ACTRL_PERM_9 +#define ACTRL_REG_QUERY ACTRL_PERM_1 +#define ACTRL_REG_SET ACTRL_PERM_2 +#define ACTRL_REG_CREATE_CHILD ACTRL_PERM_3 +#define ACTRL_REG_LIST ACTRL_PERM_4 +#define ACTRL_REG_NOTIFY ACTRL_PERM_5 +#define ACTRL_REG_LINK ACTRL_PERM_6 +#define ACTRL_WIN_CLIPBRD ACTRL_PERM_1 +#define ACTRL_WIN_GLOBAL_ATOMS ACTRL_PERM_2 +#define ACTRL_WIN_CREATE ACTRL_PERM_3 +#define ACTRL_WIN_LIST_DESK ACTRL_PERM_4 +#define ACTRL_WIN_LIST ACTRL_PERM_5 +#define ACTRL_WIN_READ_ATTRIBS ACTRL_PERM_6 +#define ACTRL_WIN_WRITE_ATTRIBS ACTRL_PERM_7 +#define ACTRL_WIN_SCREEN ACTRL_PERM_8 +#define ACTRL_WIN_EXIT ACTRL_PERM_9 + +#define ACTRL_ACCESS_NO_OPTIONS 0x00000000 +#define ACTRL_ACCESS_SUPPORTS_OBJECT_ENTRIES 0x00000001 + +typedef struct _ACTRL_OVERLAPPED +{ + 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_tident(ACTRL_ACCESS_INFO) +typedef_tident(PACTRL_ACCESS_INFO) + +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_tident(ACTRL_CONTROL_INFO) +typedef_tident(PACTRL_CONTROL_INFO) + +typedef enum _PROGRESS_INVOKE_SETTING { + ProgressInvokeNever = 1, + ProgressInvokeEveryObject, + ProgressInvokeOnError, + ProgressCancelOperation, + ProgressRetryOperation +} PROG_INVOKE_SETTING, *PPROG_INVOKE_SETTING; + +typedef struct _INHERITED_FROMA +{ + LONG GenerationGap; + LPSTR AncestorName; +} INHERITED_FROMA, *PINHERITED_FROMA; + +typedef struct _INHERITED_FROMW +{ + LONG GenerationGap; + LPWSTR AncestorName; +} INHERITED_FROMW, *PINHERITED_FROMW; + +typedef_tident(INHERITED_FROM) +typedef_tident(PINHERITED_FROM) + +#define ACCCTRL_DEFAULT_PROVIDERA "Windows NT Access Provider" +#define ACCCTRL_DEFAULT_PROVIDERW L"Windows NT Access Provider" + +#ifndef _DISABLE_TIDENTS +#ifdef UNICODE +#define ACCCTRL_DEFAULT_PROVIDER ACCCTRL_DEFAULT_PROVIDERW +#else +#define ACCCTRL_DEFAULT_PROVIDER ACCCTRL_DEFAULT_PROVIDERA +#endif +#endif + +typedef struct _FN_OBJECT_MGR_FUNCTIONS +{ + ULONG Placeholder; +} FN_OBJECT_MGR_FUNCTS, *PFN_OBJECT_MGR_FUNCTS; + +#define AccFree LocalFree + +#ifdef __cplusplus +} +#endif + +#endif /* __WINE_ACCCTRL_H */ diff --git a/include/aclapi.h b/include/aclapi.h new file mode 100644 index 0000000..827ac74 --- /dev/null +++ b/include/aclapi.h @@ -0,0 +1,132 @@ +/* + aclapi.h + + 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 _ACLAPI_H +#define _ACLAPI_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif +typedef VOID (*FN_PROGRESS) (LPWSTR pObjectName,DWORD Status,PPROG_INVOKE_SETTING pInvokeSetting,PVOID Args,WINBOOL SecuritySet); + +VOID STDCALL BuildExplicitAccessWithNameA(PEXPLICIT_ACCESS_A pExplicitAccess,LPSTR pTrusteeName,DWORD AccessPermissions,ACCESS_MODE AccessMode,DWORD Inheritance); +VOID STDCALL BuildExplicitAccessWithNameW(PEXPLICIT_ACCESS_W pExplicitAccess,LPWSTR pTrusteeName,DWORD AccessPermissions,ACCESS_MODE AccessMode,DWORD Inheritance); +DWORD STDCALL BuildSecurityDescriptorA(PTRUSTEE_A pOwner,PTRUSTEE_A pGroup,ULONG cCountOfAccessEntries,PEXPLICIT_ACCESS_A pListOfAccessEntries, + ULONG cCountOfAuditEntries,PEXPLICIT_ACCESS_A pListOfAuditEntries,PSECURITY_DESCRIPTOR pOldSD,PULONG pSizeNewSD,PSECURITY_DESCRIPTOR* pNewSD); +DWORD STDCALL BuildSecurityDescriptorW(PTRUSTEE_W pOwner,PTRUSTEE_W pGroup,ULONG cCountOfAccessEntries,PEXPLICIT_ACCESS_W pListOfAccessEntries, + ULONG cCountOfAuditEntries,PEXPLICIT_ACCESS_W pListOfAuditEntries,PSECURITY_DESCRIPTOR pOldSD,PULONG pSizeNewSD,PSECURITY_DESCRIPTOR* pNewSD); +VOID STDCALL BuildTrusteeWithNameA(PTRUSTEE_A pTrustee,LPSTR pName); +VOID STDCALL BuildTrusteeWithNameW(PTRUSTEE_W pTrustee,LPWSTR pName); +VOID STDCALL BuildTrusteeWithObjectsAndNameA(PTRUSTEE_A pTrustee,POBJECTS_AND_NAME_A pObjName,SE_OBJECT_TYPE ObjectType, + LPSTR ObjectTypeName,LPSTR InheritedObjectTypeName,LPSTR Name); +VOID STDCALL BuildTrusteeWithObjectsAndNameW(PTRUSTEE_W pTrustee,POBJECTS_AND_NAME_W pObjName,SE_OBJECT_TYPE ObjectType, + LPWSTR ObjectTypeName,LPWSTR InheritedObjectTypeName,LPWSTR Name); +VOID STDCALL BuildTrusteeWithObjectsAndSidA(PTRUSTEE_A pTrustee,POBJECTS_AND_SID pObjSid,GUID* pObjectGuid,GUID* pInheritedObjectGuid,PSID pSid); +VOID STDCALL BuildTrusteeWithObjectsAndSidW(PTRUSTEE_W pTrustee,POBJECTS_AND_SID pObjSid,GUID* pObjectGuid,GUID* pInheritedObjectGuid,PSID pSid); +VOID STDCALL BuildTrusteeWithSidA(PTRUSTEE_A pTrustee,PSID pSid); +VOID STDCALL BuildTrusteeWithSidW(PTRUSTEE_W pTrustee,PSID pSid); +DWORD STDCALL GetAuditedPermissionsFromAclA(PACL pacl,PTRUSTEE_A pTrustee,PACCESS_MASK pSuccessfulAuditedRights,PACCESS_MASK pFailedAuditRights); +DWORD STDCALL GetAuditedPermissionsFromAclW(PACL pacl,PTRUSTEE_W pTrustee,PACCESS_MASK pSuccessfulAuditedRights,PACCESS_MASK pFailedAuditRights); +DWORD STDCALL GetEffectiveRightsFromAclA(PACL pacl,PTRUSTEE_A pTrustee,PACCESS_MASK pAccessRights); +DWORD STDCALL GetEffectiveRightsFromAclW(PACL pacl,PTRUSTEE_W pTrustee,PACCESS_MASK pAccessRights); +DWORD STDCALL GetExplicitEntriesFromAclA(PACL pacl,PULONG pcCountOfExplicitEntries,PEXPLICIT_ACCESS_A* pListOfExplicitEntries); +DWORD STDCALL GetExplicitEntriesFromAclW(PACL pacl,PULONG pcCountOfExplicitEntries,PEXPLICIT_ACCESS_W* pListOfExplicitEntries); +DWORD STDCALL GetNamedSecurityInfoA(LPSTR pObjectName,SE_OBJECT_TYPE ObjectType,SECURITY_INFORMATION SecurityInfo, + PSID* ppsidOwner,PSID* ppsidGroup,PACL* ppDacl,PACL* ppSacl,PSECURITY_DESCRIPTOR* ppSecurityDescriptor); +DWORD STDCALL GetNamedSecurityInfoW(LPWSTR pObjectName,SE_OBJECT_TYPE ObjectType,SECURITY_INFORMATION SecurityInfo, + PSID* ppsidOwner,PSID* ppsidGroup,PACL* ppDacl,PACL* ppSacl,PSECURITY_DESCRIPTOR* ppSecurityDescriptor); +DWORD STDCALL GetSecurityInfo(HANDLE handle,SE_OBJECT_TYPE ObjectType,SECURITY_INFORMATION SecurityInfo, + PSID* ppsidOwner,PSID* ppsidGroup,PACL* ppDacl,PACL* ppSacl,PSECURITY_DESCRIPTOR* ppSecurityDescriptor); +TRUSTEE_FORM STDCALL GetTrusteeFormA(PTRUSTEE_A pTrustee); +TRUSTEE_FORM STDCALL GetTrusteeFormW(PTRUSTEE_W pTrustee); +LPSTR STDCALL GetTrusteeNameA(PTRUSTEE_A pTrustee); +LPWSTR STDCALL GetTrusteeNameW(PTRUSTEE_W pTrustee); +TRUSTEE_TYPE STDCALL GetTrusteeTypeA(PTRUSTEE_A pTrustee); +TRUSTEE_TYPE STDCALL GetTrusteeTypeW(PTRUSTEE_W pTrustee); +DWORD STDCALL LookupSecurityDescriptorPartsA(PTRUSTEE_A* pOwner,PTRUSTEE_A* pGroup,PULONG cCountOfAccessEntries,PEXPLICIT_ACCESS_A* pListOfAccessEntries, + PULONG cCountOfAuditEntries,PEXPLICIT_ACCESS_A* pListOfAuditEntries,PSECURITY_DESCRIPTOR pSD); +DWORD STDCALL LookupSecurityDescriptorPartsW(PTRUSTEE_W* pOwner,PTRUSTEE_W* pGroup,PULONG cCountOfAccessEntries,PEXPLICIT_ACCESS_W* pListOfAccessEntries, + PULONG cCountOfAuditEntries,PEXPLICIT_ACCESS_W* pListOfAuditEntries,PSECURITY_DESCRIPTOR pSD); +DWORD STDCALL SetEntriesInAclA(ULONG cCountOfExplicitEntries,PEXPLICIT_ACCESS_A pListOfExplicitEntries,PACL OldAcl,PACL* NewAcl); +DWORD STDCALL SetEntriesInAclW(ULONG cCountOfExplicitEntries,PEXPLICIT_ACCESS_W pListOfExplicitEntries,PACL OldAcl,PACL* NewAcl); +DWORD STDCALL SetNamedSecurityInfoA(LPSTR pObjectName,SE_OBJECT_TYPE ObjectType,SECURITY_INFORMATION SecurityInfo,PSID psidOwner,PSID psidGroup,PACL pDacl,PACL pSacl); +DWORD STDCALL SetNamedSecurityInfoW(LPWSTR pObjectName,SE_OBJECT_TYPE ObjectType,SECURITY_INFORMATION SecurityInfo,PSID psidOwner,PSID psidGroup,PACL pDacl,PACL pSacl); +DWORD STDCALL SetSecurityInfo(HANDLE handle,SE_OBJECT_TYPE ObjectType,SECURITY_INFORMATION SecurityInfo,PSID psidOwner,PSID psidGroup,PACL pDacl,PACL pSacl); +DWORD STDCALL GetInheritanceSourceA(LPSTR pObjectName,SE_OBJECT_TYPE ObjectType,SECURITY_INFORMATION SecurityInfo,WINBOOL Container,GUID ** pObjectClassGuids ,DWORD GuidCount,PACL pAcl,PFN_OBJECT_MGR_FUNCTS pfnArray OPTIONAL,PGENERIC_MAPPING pGenericMapping,PINHERITED_FROMA pInheritArray); +DWORD STDCALL GetInheritanceSourceW(LPWSTR pObjectName,SE_OBJECT_TYPE ObjectType,SECURITY_INFORMATION SecurityInfo,WINBOOL Container,GUID ** pObjectClassGuids ,DWORD GuidCount,PACL pAcl,PFN_OBJECT_MGR_FUNCTS pfnArray OPTIONAL,PGENERIC_MAPPING pGenericMapping,PINHERITED_FROMW pInheritArray); +DWORD STDCALL FreeInheritedFromArray(PINHERITED_FROMW pInheritArray,USHORT AceCnt,PFN_OBJECT_MGR_FUNCTS pfnArray); +DWORD STDCALL TreeResetNamedSecurityInfoA(LPSTR pObjectName,SE_OBJECT_TYPE ObjectType,SECURITY_INFORMATION SecurityInfo,PSID pOwner,PSID pGroup,PACL pDacl,PACL pSacl,WINBOOL KeepExplicit,FN_PROGRESS fnProgress,PROG_INVOKE_SETTING ProgressInvokeSetting,PVOID Args); +DWORD STDCALL TreeResetNamedSecurityInfoW(LPWSTR pObjectName,SE_OBJECT_TYPE ObjectType,SECURITY_INFORMATION SecurityInfo,PSID pOwner,PSID pGroup,PACL pDacl,PACL pSacl,WINBOOL KeepExplicit,FN_PROGRESS fnProgress,PROG_INVOKE_SETTING ProgressInvokeSetting,PVOID Args); +VOID STDCALL BuildImpersonateExplicitAccessWithNameA(PEXPLICIT_ACCESS_A pExplicitAccess,LPSTR pTrusteeName,PTRUSTEE_A pTrustee,DWORD AccessPermissions,ACCESS_MODE AccessMode,DWORD Inheritance); +VOID STDCALL BuildImpersonateExplicitAccessWithNameW(PEXPLICIT_ACCESS_W pExplicitAccess,LPWSTR pTrusteeName,PTRUSTEE_W pTrustee,DWORD AccessPermissions,ACCESS_MODE AccessMode,DWORD Inheritance); +VOID STDCALL BuildImpersonateTrusteeA(PTRUSTEE_A pTrustee,PTRUSTEE_A pImpersonateTrustee); +VOID STDCALL BuildImpersonateTrusteeW(PTRUSTEE_W pTrustee,PTRUSTEE_W pImpersonateTrustee); +MULTIPLE_TRUSTEE_OPERATION STDCALL GetMultipleTrusteeOperationA(PTRUSTEE_A pTrustee); +MULTIPLE_TRUSTEE_OPERATION STDCALL GetMultipleTrusteeOperationW(PTRUSTEE_W pTrustee); +PTRUSTEE_A STDCALL GetMultipleTrusteeA(PTRUSTEE_A pTrustee); +PTRUSTEE_W STDCALL GetMultipleTrusteeW(PTRUSTEE_W pTrustee); + +#ifndef _DISABLE_TIDENTS +#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 GetInheritanceSource GetInheritanceSourceW +#define TreeResetNamedSecurityInfo TreeResetNamedSecurityInfoW +#define BuildImpersonateExplicitAccessWithName BuildImpersonateExplicitAccessWithNameW +#define BuildImpersonateTrustee BuildImpersonateTrusteeW +#define GetMultipleTrusteeOperation GetMultipleTrusteeOperationW +#define GetMultipleTrustee GetMultipleTrusteeW +#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 GetInheritanceSource GetInheritanceSourceA +#define TreeResetNamedSecurityInfo TreeResetNamedSecurityInfoA +#define BuildImpersonateExplicitAccessWithName BuildImpersonateExplicitAccessWithNameA +#define BuildImpersonateTrustee BuildImpersonateTrusteeA +#define GetMultipleTrusteeOperation GetMultipleTrusteeOperationA +#define GetMultipleTrustee GetMultipleTrusteeA +#endif /* UNICODE */ +#endif + +#ifdef __cplusplus +} +#endif +#endif diff --git a/include/afd/shared.h b/include/afd/shared.h index deda8ee..26aa0d1 100644 --- a/include/afd/shared.h +++ b/include/afd/shared.h @@ -24,7 +24,7 @@ typedef struct _AFD_SOCKET_INFORMATION { /* AFD IOCTL code definitions */ -#define FSCTL_AFD_BASE FILE_DEVICE_NAMED_PIPE // ??? +#define FSCTL_AFD_BASE FILE_DEVICE_NAMED_PIPE /* ??? */ #define AFD_CTL_CODE(Function, Method, Access) \ CTL_CODE(FSCTL_AFD_BASE, Function, Method, Access) diff --git a/include/ascii.h b/include/ascii.h index 82f91ef..c4769c3 100644 --- a/include/ascii.h +++ b/include/ascii.h @@ -37,6 +37,597 @@ extern "C" { WINBOOL STDCALL +BackupEventLogA ( + HANDLE hEventLog, + LPCSTR lpBackupFileName + ); + +WINBOOL +STDCALL +ClearEventLogA ( + HANDLE hEventLog, + LPCSTR lpBackupFileName + ); + +WINBOOL +STDCALL +CreateProcessAsUserA ( + HANDLE hToken, + LPCSTR lpApplicationName, + LPSTR lpCommandLine, + LPSECURITY_ATTRIBUTES lpProcessAttributes, + LPSECURITY_ATTRIBUTES lpThreadAttributes, + WINBOOL bInheritHandles, + DWORD dwCreationFlags, + LPVOID lpEnvironment, + LPCSTR lpCurrentDirectory, + LPSTARTUPINFOA lpStartupInfo, + LPPROCESS_INFORMATION lpProcessInformation + ); + +WINBOOL +STDCALL +DecryptFileA( + LPCSTR lpFileName, + DWORD dwReserved + ); + +WINBOOL +STDCALL +EncryptFileA( + LPCSTR lpFileName + ); + +WINBOOL +STDCALL +FileEncryptionStatusA( + LPCSTR lpFileName, + LPDWORD lpStatus + ); + +WINBOOL +STDCALL +GetCurrentHwProfileA ( + LPHW_PROFILE_INFOA lpHwProfileInfo + ); + +WINBOOL +STDCALL +LogonUserA ( + LPCSTR lpszUsername, + LPCSTR lpszDomain, + LPCSTR lpszPassword, + DWORD dwLogonType, + DWORD dwLogonProvider, + PHANDLE phToken + ); + +WINBOOL +STDCALL +LogonUserExA ( + LPCSTR lpszUsername, + LPCSTR lpszDomain, + LPCSTR lpszPassword, + DWORD dwLogonType, + DWORD dwLogonProvider, + PHANDLE phToken , + PSID *ppLogonSid , + PVOID *ppProfileBuffer , + LPDWORD pdwProfileLength , + PQUOTA_LIMITS pQuotaLimits + ); + +HANDLE +STDCALL +OpenBackupEventLogA ( + LPCSTR lpUNCServerName, + LPCSTR lpFileName + ); + +DWORD +STDCALL +OpenEncryptedFileRawA( + LPCSTR lpFileName, + ULONG ulFlags, + PVOID * pvContext + ); + +HANDLE +STDCALL +OpenEventLogA ( + LPCSTR lpUNCServerName, + LPCSTR lpSourceName + ); + +WINBOOL +STDCALL +ReadEventLogA ( + HANDLE hEventLog, + DWORD dwReadFlags, + DWORD dwRecordOffset, + LPVOID lpBuffer, + DWORD nNumberOfBytesToRead, + DWORD *pnBytesRead, + DWORD *pnMinNumberOfBytesNeeded + ); + +WINBOOL +STDCALL +ChangeServiceConfig2A( + SC_HANDLE hService, + DWORD dwInfoLevel, + LPVOID lpInfo + ); + +WINBOOL +STDCALL +EnumServicesStatusExA( + SC_HANDLE hSCManager, + SC_ENUM_TYPE InfoLevel, + DWORD dwServiceType, + DWORD dwServiceState, + LPBYTE lpServices, + DWORD cbBufSize, + LPDWORD pcbBytesNeeded, + LPDWORD lpServicesReturned, + LPDWORD lpResumeHandle, + LPCSTR pszGroupName + ); + +WINBOOL +STDCALL +QueryServiceConfig2A( + SC_HANDLE hService, + DWORD dwInfoLevel, + LPBYTE lpBuffer, + DWORD cbBufSize, + LPDWORD pcbBytesNeeded + ); + +SERVICE_STATUS_HANDLE +STDCALL +RegisterServiceCtrlHandlerExA( + LPCSTR lpServiceName, + LPHANDLER_FUNCTION_EX lpHandlerProc, + LPVOID lpContext + ); + +LRESULT +STDCALL +SendIMEMessageExA(HWND hwnd, LPARAM lparam); + +WINBOOL +STDCALL +IMPSetIMEA( HWND hwnd, LPIMEPROA ime); + +WINBOOL +STDCALL +IMPQueryIMEA( LPIMEPROA ime); + +WINBOOL +STDCALL +IMPGetIMEA( HWND hwnd, LPIMEPROA ime); + +WINBOOL +STDCALL +SetCalendarInfoA( + LCID Locale, + CALID Calendar, + CALTYPE CalType, + LPCSTR lpCalData); + +WINBOOL +STDCALL +EnumUILanguagesA( + UILANGUAGE_ENUMPROCA lpUILanguageEnumProc, + DWORD dwFlags, + LONG_PTR lParam); + +WINBOOL +STDCALL +EnumLanguageGroupLocalesA( + LANGGROUPLOCALE_ENUMPROCA lpLangGroupLocaleEnumProc, + LGRPID LanguageGroup, + DWORD dwFlags, + LONG_PTR lParam); + +WINBOOL +STDCALL +EnumSystemLanguageGroupsA( + LANGUAGEGROUP_ENUMPROCA lpLanguageGroupEnumProc, + DWORD dwFlags, + LONG_PTR lParam); + +int +STDCALL +GetGeoInfoA( + GEOID Location, + GEOTYPE GeoType, + LPSTR lpGeoData, + int cchData, + LANGID LangId); + +WINBOOL +STDCALL +EnumDateFormatsExA( + DATEFMT_ENUMPROCEXA lpDateFmtEnumProcEx, + LCID Locale, + DWORD dwFlags); + +WINBOOL +STDCALL +EnumCalendarInfoExA( + CALINFO_ENUMPROCEXA lpCalInfoEnumProcEx, + LCID Locale, + CALID Calendar, + CALTYPE CalType); + +int +STDCALL +GetCalendarInfoA( + LCID Locale, + CALID Calendar, + CALTYPE CalType, + LPSTR lpCalData, + int cchData, + LPDWORD lpValue); + +WINBOOL +STDCALL +GetCPInfoExA( + UINT CodePage, + DWORD dwFlags, + LPCPINFOEXA lpCPInfoEx); + +WINBOOL +STDCALL +CheckNameLegalDOS8Dot3A( + LPCSTR lpName, + LPSTR lpOemName OPTIONAL, + DWORD OemNameSize OPTIONAL, + PWINBOOL pbNameContainsSpaces OPTIONAL, + PWINBOOL pbNameLegal + ); + +WINBOOL +STDCALL +CreateHardLinkA( + LPCSTR lpFileName, + LPCSTR lpExistingFileName, + LPSECURITY_ATTRIBUTES lpSecurityAttributes + ); + +HANDLE +STDCALL +CreateJobObjectA( + LPSECURITY_ATTRIBUTES lpJobAttributes, + LPCSTR lpName + ); + +WINBOOL +STDCALL +DeleteVolumeMountPointA( + LPCSTR lpszVolumeMountPoint + ); + +WINBOOL +STDCALL +DnsHostnameToComputerNameA ( + LPCSTR Hostname, + LPSTR ComputerName, + LPDWORD nSize + ); + +WINBOOL +STDCALL +FindActCtxSectionStringA( + DWORD dwFlags, + const GUID *lpExtensionGuid, + ULONG ulSectionId, + LPCSTR lpStringToFind, + PACTCTX_SECTION_KEYED_DATA ReturnedData + ); + +HANDLE +STDCALL +FindFirstFileExA( + LPCSTR lpFileName, + FINDEX_INFO_LEVELS fInfoLevelId, + LPVOID lpFindFileData, + FINDEX_SEARCH_OPS fSearchOp, + LPVOID lpSearchFilter, + DWORD dwAdditionalFlags + ); + +HANDLE +STDCALL +FindFirstVolumeA( + LPSTR lpszVolumeName, + DWORD cchBufferLength + ); + +HANDLE +STDCALL +FindFirstVolumeMountPointA( + LPCSTR lpszRootPathName, + LPSTR lpszVolumeMountPoint, + DWORD cchBufferLength + ); + +WINBOOL +STDCALL +FindNextVolumeA( + HANDLE hFindVolume, + LPSTR lpszVolumeName, + DWORD cchBufferLength + ); + +WINBOOL +STDCALL +FindNextVolumeMountPointA( + HANDLE hFindVolumeMountPoint, + LPSTR lpszVolumeMountPoint, + DWORD cchBufferLength + ); + +WINBOOL +STDCALL +GetComputerNameExA ( + COMPUTER_NAME_FORMAT NameType, + LPSTR lpBuffer, + LPDWORD nSize + ); + +DWORD +STDCALL +GetDllDirectoryA( + DWORD nBufferLength, + LPSTR lpBuffer + ); + +DWORD +STDCALL +GetFirmwareEnvironmentVariableA( + LPCSTR lpName, + LPCSTR lpGuid, + PVOID pBuffer, + DWORD nSize + ); + +DWORD +STDCALL +GetLongPathNameA( + LPCSTR lpszShortPath, + LPSTR lpszLongPath, + DWORD cchBuffer + ); + +WINBOOL +STDCALL +GetModuleHandleExA( + DWORD dwFlags, + LPCSTR lpModuleName, + HMODULE* phModule + ); + +UINT +STDCALL +GetSystemWow64DirectoryA( + LPSTR lpBuffer, + UINT uSize + ); + +WINBOOL +STDCALL +GetVolumeNameForVolumeMountPointA( + LPCSTR lpszVolumeMountPoint, + LPSTR lpszVolumeName, + DWORD cchBufferLength + ); + +WINBOOL +STDCALL +GetVolumePathNameA( + LPCSTR lpszFileName, + LPSTR lpszVolumePathName, + DWORD cchBufferLength + ); + +WINBOOL +STDCALL +GetVolumePathNamesForVolumeNameA( + LPCSTR lpszVolumeName, + LPSTR lpszVolumePathNames, + DWORD cchBufferLength, + PDWORD lpcchReturnLength + ); + +HANDLE +STDCALL +OpenJobObjectA( + DWORD dwDesiredAccess, + WINBOOL bInheritHandle, + LPCSTR lpName + ); + +WINBOOL +STDCALL +ReplaceFileA( + LPCSTR lpReplacedFileName, + LPCSTR lpReplacementFileName, + LPCSTR lpBackupFileName, + DWORD dwReplaceFlags, + LPVOID lpExclude, + LPVOID lpReserved + ); + +WINBOOL +STDCALL +SetComputerNameExA ( + COMPUTER_NAME_FORMAT NameType, + LPCSTR lpBuffer + ); + +WINBOOL +STDCALL +SetDllDirectoryA( + LPCSTR lpPathName + ); + +WINBOOL +STDCALL +SetFileShortNameA( + HANDLE hFile, + LPCSTR lpShortName + ); + +WINBOOL +STDCALL +SetFirmwareEnvironmentVariableA( + LPCSTR lpName, + LPCSTR lpGuid, + PVOID pValue, + DWORD nSize + ); + +WINBOOL +STDCALL +SetVolumeMountPointA( + LPCSTR lpszVolumeMountPoint, + LPCSTR lpszVolumeName + ); + +WINBOOL +STDCALL +VerifyVersionInfoA( + LPOSVERSIONINFOEXA lpVersionInformation, + DWORD dwTypeMask, + DWORDLONG dwlConditionMask + ); + +HDEVNOTIFY +STDCALL +RegisterDeviceNotificationA( + HANDLE hRecipient, + LPVOID NotificationFilter, + DWORD Flags + ); + +UINT +STDCALL +GetRawInputDeviceInfoA( + HANDLE hDevice, + UINT uiCommand, + LPVOID pData, + PUINT pcbSize); + +LONG +STDCALL +BroadcastSystemMessageExA( + DWORD dwflags, + LPDWORD lpdwRecipients, + UINT uiMessage, + WPARAM wParam, + LPARAM lParam, + PBSMINFO pBSMInfo); + +HFONT +STDCALL +CreateFontIndirectExA(const ENUMLOGFONTEXDVA *elfexd); + +DWORD +STDCALL +GetGlyphIndicesA( + HDC hdc, + LPCSTR lpstr, + int c, + LPWORD pgi, + DWORD fl +); + +WINBOOL +STDCALL +RemoveFontResourceExA( + LPCSTR lpFileName, + DWORD fl, + PVOID pdv +); + +UINT +STDCALL +GetStringBitmapA(HDC hdc,LPSTR psz,WINBOOL unknown,UINT cj,BYTE *lpSB); + +WINBOOL +STDCALL +GetAltTabInfoA( + HWND hwnd, + int iItem, + PALTTABINFO pati, + LPSTR pszItemText, + UINT cchItemText + ); + +UINT +STDCALL +PrivateExtractIconsA( + LPCSTR szFileName, + int nIconIndex, + int cxIcon, + int cyIcon, + HICON *phicon, + UINT *piconid, + UINT nIcons, + UINT flags + ); + +UINT +STDCALL +RealGetWindowClassA( + HWND hwnd, + LPSTR pszType, + UINT cchType + ); + +LRESULT +STDCALL +MenuWindowProcA( + HWND hWnd, + UINT Msg, + WPARAM wParam, + LPARAM lParam + ); + +WINBOOL +STDCALL +DrawCaptionTempA( + HWND hwnd, + HDC hdc, + const RECT *rect, + HFONT hFont, + HICON hIcon, + LPCSTR str, + UINT uFlags + ); + +HHOOK +STDCALL +SetWindowsHookA( + int idHook, + HOOKPROC lpfn + ); + +HRESULT +STDCALL +PrivateExtractIconExA( + DWORD u, + DWORD v, + DWORD w, + DWORD x, + DWORD y + ); + +WINBOOL +STDCALL GetBinaryTypeA( LPCSTR lpApplicationName, LPDWORD lpBinaryType @@ -292,7 +883,7 @@ WINBOOL STDCALL EnumResourceTypesA( HINSTANCE hModule, - ENUMRESTYPEPROC lpEnumFunc, + ENUMRESTYPEPROCA lpEnumFunc, LONG lParam ); @@ -301,7 +892,7 @@ STDCALL EnumResourceNamesA( HINSTANCE hModule, LPCSTR lpType, - ENUMRESNAMEPROC lpEnumFunc, + ENUMRESNAMEPROCA lpEnumFunc, LONG lParam ); @@ -311,7 +902,7 @@ EnumResourceLanguagesA( HINSTANCE hModule, LPCSTR lpType, LPCSTR lpName, - ENUMRESLANGPROC lpEnumFunc, + ENUMRESLANGPROCA lpEnumFunc, LONG lParam ); @@ -606,6 +1197,14 @@ GetFileAttributesA( LPCSTR lpFileName ); +BOOL +STDCALL +GetFileAttributesExA( + LPCSTR lpFileName, + GET_FILEEX_INFO_LEVELS fInfoLevelId, + LPVOID lpFileInformation + ); + DWORD STDCALL GetCompressedFileSizeA( @@ -1048,7 +1647,7 @@ WINBOOL STDCALL EnumDesktopsA( HWINSTA hwinsta, - DESKTOPENUMPROC lpEnumFunc, + DESKTOPENUMPROCA lpEnumFunc, LPARAM lParam); HWINSTA @@ -1061,7 +1660,7 @@ CreateWindowStationA( HANDLE STDCALL CreateWaitableTimerA( LPSECURITY_ATTRIBUTES Attributes, BOOL ManualReset, - LPCTSTR Name ); + LPCSTR Name ); HWINSTA STDCALL @@ -1073,7 +1672,7 @@ OpenWindowStationA( WINBOOL STDCALL EnumWindowStationsA( - ENUMWINDOWSTATIONPROC lpEnumFunc, + ENUMWINDOWSTATIONPROCA lpEnumFunc, LPARAM lParam); WINBOOL @@ -1193,7 +1792,7 @@ CallWindowProcA( ATOM STDCALL RegisterClassA( - CONST WNDCLASS *lpWndClass); + CONST WNDCLASSA *lpWndClass); WINBOOL STDCALL @@ -1206,15 +1805,15 @@ STDCALL GetClassInfoA( HINSTANCE hInstance , LPCSTR lpClassName, - LPWNDCLASS lpWndClass); + LPWNDCLASSA lpWndClass); ATOM STDCALL -RegisterClassExA(CONST WNDCLASSEX *); +RegisterClassExA(CONST WNDCLASSEXA *); WINBOOL STDCALL -GetClassInfoExA(HINSTANCE, LPCSTR, LPWNDCLASSEX); +GetClassInfoExA(HINSTANCE, LPCSTR, LPWNDCLASSEXA); HWND STDCALL @@ -1517,7 +2116,7 @@ InsertMenuItemA( HMENU, UINT, WINBOOL, - LPCMENUITEMINFO + LPCMENUITEMINFOA ); WINBOOL @@ -1526,7 +2125,7 @@ GetMenuItemInfoA( HMENU, UINT, WINBOOL, - LPMENUITEMINFO + LPMENUITEMINFOA ); WINBOOL @@ -1535,7 +2134,7 @@ SetMenuItemInfoA( HMENU hMenu, UINT uItem, WINBOOL fByPosition, - LPMENUITEMINFO lpmii); + LPMENUITEMINFOA lpmii); int STDCALL @@ -1611,14 +2210,14 @@ int STDCALL EnumPropsExA( HWND hWnd, - PROPENUMPROCEX lpEnumFunc, + PROPENUMPROCEXA lpEnumFunc, LPARAM lParam); int STDCALL EnumPropsA( HWND hWnd, - PROPENUMPROC lpEnumFunc); + PROPENUMPROCA lpEnumFunc); WINBOOL STDCALL @@ -1878,15 +2477,15 @@ DeviceCapabilitiesA(LPCSTR, LPCSTR, WORD, int STDCALL -EnumFontFamiliesExA(HDC, LPLOGFONTA, FONTENUMEXPROC, LPARAM,DWORD); +EnumFontFamiliesExA(HDC, LPLOGFONTA, FONTENUMEXPROCA, LPARAM,DWORD); int STDCALL -EnumFontFamiliesA(HDC, LPCSTR, FONTENUMPROC, LPARAM); +EnumFontFamiliesA(HDC, LPCSTR, FONTENUMPROCA, LPARAM); int STDCALL -EnumFontsA(HDC, LPCSTR, ENUMFONTSPROC, LPARAM); +EnumFontsA(HDC, LPCSTR, FONTENUMPROCA, LPARAM); WINBOOL STDCALL @@ -1951,7 +2550,7 @@ GetTextExtentExPointA( DWORD STDCALL -GetCharacterPlacementA(HDC, LPCSTR, int, int, LPGCP_RESULTS, DWORD); +GetCharacterPlacementA(HDC, LPCSTR, int, int, LPGCP_RESULTSA, DWORD); HDC STDCALL @@ -1983,7 +2582,7 @@ GetTextMetricsA(HDC, LPTEXTMETRICA); int STDCALL -StartDocA(HDC, CONST DOCINFO *); +StartDocA(HDC, CONST DOCINFOA *); int STDCALL @@ -1999,7 +2598,7 @@ ExtTextOutA(HDC, int, int, UINT, CONST RECT *,LPCSTR, UINT, CONST INT *); WINBOOL STDCALL -PolyTextOutA(HDC, CONST POLYTEXT *, int); +PolyTextOutA(HDC, CONST POLYTEXTA *, int); int STDCALL @@ -2011,11 +2610,11 @@ GetKerningPairsA(HDC, DWORD, LPKERNINGPAIR); HCOLORSPACE STDCALL -CreateColorSpaceA(LPLOGCOLORSPACE); +CreateColorSpaceA(LPLOGCOLORSPACEA); WINBOOL STDCALL -GetLogColorSpaceA(HCOLORSPACE,LPLOGCOLORSPACE,DWORD); +GetLogColorSpaceA(HCOLORSPACE,LPLOGCOLORSPACEA,DWORD); WINBOOL STDCALL @@ -2031,11 +2630,11 @@ UpdateICMRegKeyA(DWORD, DWORD, LPSTR, UINT); int STDCALL -EnumICMProfilesA(HDC,ICMENUMPROC,LPARAM); +EnumICMProfilesA(HDC,ICMENUMPROCA,LPARAM); int STDCALL -PropertySheetA(LPCPROPSHEETHEADER lppsph); +PropertySheetA(LPCPROPSHEETHEADERA lppsph); HIMAGELIST STDCALL @@ -2051,11 +2650,11 @@ DrawStatusTextA(HDC hDC, LPRECT lprc, LPCSTR pszText, UINT uFlags); WINBOOL STDCALL -GetOpenFileNameA(LPOPENFILENAME); +GetOpenFileNameA(LPOPENFILENAMEA); WINBOOL STDCALL -GetSaveFileNameA(LPOPENFILENAME); +GetSaveFileNameA(LPOPENFILENAMEA); short STDCALL @@ -2063,27 +2662,27 @@ GetFileTitleA(LPCSTR, LPSTR, WORD); WINBOOL STDCALL -ChooseColorA(LPCHOOSECOLOR); +ChooseColorA(LPCHOOSECOLORA); HWND STDCALL -FindTextA(LPFINDREPLACE); +FindTextA(LPFINDREPLACEA); HWND STDCALL -ReplaceTextA(LPFINDREPLACE); +ReplaceTextA(LPFINDREPLACEA); WINBOOL STDCALL -ChooseFontA(LPCHOOSEFONT); +ChooseFontA(LPCHOOSEFONTA); WINBOOL STDCALL -PrintDlgA(LPPRINTDLG); +PrintDlgA(LPPRINTDLGA); WINBOOL STDCALL -PageSetupDlgA( LPPAGESETUPDLG ); +PageSetupDlgA( LPPAGESETUPDLGA ); WINBOOL STDCALL @@ -2122,14 +2721,14 @@ HANDLE STDCALL FindFirstFileA( LPCSTR lpFileName, - LPWIN32_FIND_DATA lpFindFileData + LPWIN32_FIND_DATAA lpFindFileData ); WINBOOL STDCALL FindNextFileA( HANDLE hFindFile, - LPWIN32_FIND_DATA lpFindFileData + LPWIN32_FIND_DATAA lpFindFileData ); WINBOOL @@ -2353,7 +2952,7 @@ LONG STDCALL RegQueryMultipleValuesA ( HKEY hKey, - PVALENT val_list, + PVALENTA val_list, DWORD num_vals, LPSTR lpValueBuf, LPDWORD ldwTotsize @@ -2500,7 +3099,7 @@ GetNumberFormatA( LCID Locale, DWORD dwFlags, LPCSTR lpValue, - CONST NUMBERFMT *lpFormat, + CONST NUMBERFMTA *lpFormat, LPSTR lpNumberStr, int cchNumber); @@ -2510,14 +3109,14 @@ GetCurrencyFormatA( LCID Locale, DWORD dwFlags, LPCSTR lpValue, - CONST CURRENCYFMT *lpFormat, + CONST CURRENCYFMTA *lpFormat, LPSTR lpCurrencyStr, int cchCurrency); WINBOOL STDCALL EnumCalendarInfoA( - CALINFO_ENUMPROC lpCalInfoEnumProc, + CALINFO_ENUMPROCA lpCalInfoEnumProc, LCID Locale, CALID Calendar, CALTYPE CalType); @@ -2525,14 +3124,14 @@ EnumCalendarInfoA( WINBOOL STDCALL EnumTimeFormatsA( - TIMEFMT_ENUMPROC lpTimeFmtEnumProc, + TIMEFMT_ENUMPROCA lpTimeFmtEnumProc, LCID Locale, DWORD dwFlags); WINBOOL STDCALL EnumDateFormatsA( - DATEFMT_ENUMPROC lpDateFmtEnumProc, + DATEFMT_ENUMPROCA lpDateFmtEnumProc, LCID Locale, DWORD dwFlags); @@ -2567,13 +3166,13 @@ FoldStringA( WINBOOL STDCALL EnumSystemLocalesA( - LOCALE_ENUMPROC lpLocaleEnumProc, + LOCALE_ENUMPROCA lpLocaleEnumProc, DWORD dwFlags); WINBOOL STDCALL EnumSystemCodePagesA( - CODEPAGE_ENUMPROC lpCodePageEnumProc, + CODEPAGE_ENUMPROCA lpCodePageEnumProc, DWORD dwFlags); WINBOOL @@ -2705,7 +3304,7 @@ WNetAddConnectionA( DWORD STDCALL WNetAddConnection2A( - LPNETRESOURCE lpNetResource, + LPNETRESOURCEA lpNetResource, LPCSTR lpPassword, LPCSTR lpUserName, DWORD dwFlags @@ -2714,7 +3313,7 @@ WNetAddConnection2A( DWORD STDCALL WNetAddConnection3A( HWND hwndOwner, - LPNETRESOURCE lpNetResource, + LPNETRESOURCEA lpNetResource, LPCSTR lpPassword, LPCSTR lpUserName, DWORD dwFlags @@ -2743,7 +3342,7 @@ WNetGetConnectionA( DWORD STDCALL WNetUseConnectionA( HWND hwndOwner, - LPNETRESOURCE lpNetResource, + LPNETRESOURCEA lpNetResource, LPCSTR lpUserID, LPCSTR lpPassword, DWORD dwFlags, @@ -2761,12 +3360,12 @@ WNetSetConnectionA( DWORD STDCALL WNetConnectionDialog1A( - LPCONNECTDLGSTRUCT lpConnDlgStruct + LPCONNECTDLGSTRUCTA lpConnDlgStruct ); DWORD STDCALL WNetDisconnectDialog1A( - LPDISCDLGSTRUCT lpConnDlgStruct + LPDISCDLGSTRUCTA lpConnDlgStruct ); DWORD STDCALL @@ -2774,7 +3373,7 @@ WNetOpenEnumA( DWORD dwScope, DWORD dwType, DWORD dwUsage, - LPNETRESOURCE lpNetResource, + LPNETRESOURCEA lpNetResource, LPHANDLE lphEnum ); @@ -2825,7 +3424,7 @@ WNetGetLastErrorA( DWORD STDCALL MultinetGetConnectionPerformanceA( - LPNETRESOURCE lpNetResource, + LPNETRESOURCEA lpNetResource, LPNETCONNECTINFOSTRUCT lpNetConnectInfoStruct ); @@ -3006,10 +3605,11 @@ DdeQueryStringA (DWORD, HSZ, char *, DWORD, int); /* end of stuff from ddeml.h in old Cygnus headers */ /* ----------------------------------------------- */ -WINBOOL STDCALL LogonUserA (LPSTR, LPSTR, LPSTR, DWORD, DWORD, HANDLE *); -WINBOOL STDCALL CreateProcessAsUserA (HANDLE, LPCTSTR, LPTSTR, - SECURITY_ATTRIBUTES*, SECURITY_ATTRIBUTES*, WINBOOL, DWORD, LPVOID, - LPCTSTR, STARTUPINFOA*, PROCESS_INFORMATION*); +DWORD WINAPI +SHGetFileInfoA (LPCSTR, DWORD, SHFILEINFO FAR *, UINT, UINT); + +WINBOOL WINAPI +SHGetPathFromIDListA (LPCITEMIDLIST, LPSTR); #ifdef __cplusplus } diff --git a/include/base.h b/include/base.h index e37c0e7..b9255c7 100644 --- a/include/base.h +++ b/include/base.h @@ -60,8 +60,8 @@ typedef long LONG; #define APIENTRY STDCALL #define WINGDIAPI - +#ifndef _DISABLE_TIDENTS #ifdef UNICODE typedef wchar_t *LPTCH; typedef wchar_t *LPTSTR; @@ -69,6 +69,7 @@ typedef wchar_t *LPTSTR; typedef char *LPTCH; typedef char *LPTSTR; #endif /* UNICODE */ +#endif /* _DISABLE_TIDENTS */ #ifndef RC_INVOKED @@ -116,6 +117,7 @@ typedef HANDLE HDROP; typedef HANDLE HDWP; typedef HANDLE HENHMETAFILE; typedef HANDLE HENV; +typedef USHORT COLOR16; typedef int HFILE; typedef HANDLE HFONT; typedef HANDLE HGDIOBJ; @@ -127,6 +129,9 @@ typedef HANDLE HIMAGELIST; typedef HANDLE HINSTANCE; typedef HANDLE HKEY, *PHKEY; typedef HANDLE HKL; +typedef LONG GEOID; +typedef DWORD GEOTYPE; +typedef DWORD GEOCLASS; typedef HANDLE HLOCAL; typedef HANDLE HMENU; typedef HANDLE HMETAFILE; @@ -134,6 +139,7 @@ typedef HANDLE HMODULE; typedef HANDLE HPALETTE; typedef HANDLE HPEN; typedef HANDLE HRASCONN; +typedef DWORD LGRPID; typedef long HRESULT; typedef HANDLE HRGN; typedef HANDLE HRSRC; @@ -141,8 +147,12 @@ typedef HANDLE HSTMT; typedef HANDLE HSZ; typedef HANDLE HWINSTA; typedef HANDLE HWND; +typedef HANDLE HRAWINPUT; +typedef HANDLE HTASK; +typedef HANDLE HWINEVENTHOOK; +typedef VOID (CALLBACK* WINEVENTPROC)(HWINEVENTHOOK hWinEventHook,DWORD event,HWND hwnd,LONG idObject,LONG idChild,DWORD idEventThread,DWORD dwmsEventTime); typedef unsigned short LANGID; -//typedef DWORD LCID; +/*typedef DWORD LCID; */ typedef DWORD LCTYPE; /* typedef LOCALHANDLE */ typedef unsigned short *LP; @@ -152,17 +162,28 @@ typedef WINBOOL *LPBOOL; typedef CONST CHAR *LPCCH; typedef CHAR *LPCH; typedef COLORREF *LPCOLORREF; - + +#ifndef _DISABLE_TIDENTS #ifdef UNICODE typedef const wchar_t *LPCTSTR; #else typedef const char *LPCTSTR; #endif /* UNICODE */ +#endif /* _DISABLE_TIDENTS */ typedef const wchar_t *LPCWCH; typedef DWORD *LPDWORD; /* typedef LPFRHOOKPROC; */ typedef HANDLE *LPHANDLE; +typedef DWORD FULLSCREENCONTROL; +typedef DWORD UNIVERSAL_FONT_ID; +typedef UNIVERSAL_FONT_ID *PUNIVERSAL_FONT_ID; +typedef DWORD REALIZATION_INFO; +typedef REALIZATION_INFO *PREALIZATION_INFO; +typedef DWORD SHAREDHANDLETABLE; +typedef SHAREDHANDLETABLE *PSHAREDHANDLETABLE; +typedef DWORD CHWIDTHINFO; +typedef CHWIDTHINFO *PCHWIDTHINFO; /* typedef LPHANDLER_FUNCTION; */ typedef PINT LPINT; typedef PLONG LPLONG; @@ -183,6 +204,7 @@ typedef short *PSHORT; typedef char *PSTR; typedef char *PSZ; +#ifndef _DISABLE_TIDENTS #ifdef UNICODE typedef wchar_t *PTBYTE; typedef wchar_t *PTCH; @@ -194,6 +216,7 @@ typedef char *PTCH; typedef char *PTCHAR; typedef char *PTSTR; #endif /* UNICODE */ +#endif /* _DISABLE_TIDENTS */ /* typedef PWSTR; @@ -209,6 +232,7 @@ typedef SC_HANDLE *LPSC_HANDLE; typedef DWORD SERVICE_STATUS_HANDLE; /* typedef SPHANDLE; */ +#ifndef _DISABLE_TIDENTS #ifdef UNICODE typedef wchar_t TBYTE; #ifndef _TCHAR_DEFINED @@ -224,6 +248,7 @@ typedef char TCHAR; #endif /* _TCHAR_DEFINED */ typedef BYTE BCHAR; #endif /* UNICODE */ +#endif /* _DISABLE_TIDENTS */ typedef unsigned int WPARAM; /* typedef YIELDPROC; */ @@ -323,7 +348,9 @@ typedef enum _SID_NAME_USE { #define INDEXTOSTATEIMAGEMASK(i) ((i) << 12) #define MAKEINTATOM(i) (LPTSTR) ((DWORD) ((WORD) (i))) +#ifndef _DISABLE_TIDENTS #define MAKEINTRESOURCE(i) (LPTSTR) ((ULONG_PTR) ((WORD) (i))) +#endif /* _DISABLE_TIDENTS */ #define MAKEINTRESOURCEA(i) (LPSTR) ((ULONG_PTR) ((WORD) (i))) #define MAKEINTRESOURCEW(i) (LPWSTR) ((ULONG_PTR) ((WORD) (i))) #define IS_INTRESOURCE(n) ((((ULONG_PTR) (n)) >> 16) == 0) @@ -350,28 +377,98 @@ typedef enum _SID_NAME_USE { #define INDEXTOOVERLAYMASK(i) ((i) << 8) #define INDEXTOSTATEIMAGEMASK(i) ((i) << 12) -#ifdef UNICODE -#ifndef _T -#define _T(quote) L##quote -#endif -#ifndef _TEXT -#define TEXT(quote) L##quote -#endif -#else -#ifndef _T -#define _T(quote) quote -#endif -#ifndef _TEXT -#define TEXT(quote) quote -#endif -#endif - +#ifndef _DISABLE_TIDENTS +# ifdef UNICODE +# ifndef _T +# define _T(quote) L##quote +# endif /* _T */ +# ifndef _TEXT +# define TEXT(quote) L##quote +# endif /* _TEXT */ +# else /* UNICODE */ +# ifndef _T +# define _T(quote) quote +# endif /* _T */ +# ifndef _TEXT +# define TEXT(quote) quote +# endif /* _TEXT */ +# endif /* UNICODE */ +#endif /* _DISABLE_TIDENTS */ #ifndef RC_INVOKED /* Definitions for callback procedures */ +typedef enum { + + WinNullSid = 0, + WinWorldSid = 1, + WinLocalSid = 2, + WinCreatorOwnerSid = 3, + WinCreatorGroupSid = 4, + WinCreatorOwnerServerSid = 5, + WinCreatorGroupServerSid = 6, + WinNtAuthoritySid = 7, + WinDialupSid = 8, + WinNetworkSid = 9, + WinBatchSid = 10, + WinInteractiveSid = 11, + WinServiceSid = 12, + WinAnonymousSid = 13, + WinProxySid = 14, + WinEnterpriseControllersSid = 15, + WinSelfSid = 16, + WinAuthenticatedUserSid = 17, + WinRestrictedCodeSid = 18, + WinTerminalServerSid = 19, + WinRemoteLogonIdSid = 20, + WinLogonIdsSid = 21, + WinLocalSystemSid = 22, + WinLocalServiceSid = 23, + WinNetworkServiceSid = 24, + WinBuiltinDomainSid = 25, + WinBuiltinAdministratorsSid = 26, + WinBuiltinUsersSid = 27, + WinBuiltinGuestsSid = 28, + WinBuiltinPowerUsersSid = 29, + WinBuiltinAccountOperatorsSid = 30, + WinBuiltinSystemOperatorsSid = 31, + WinBuiltinPrintOperatorsSid = 32, + WinBuiltinBackupOperatorsSid = 33, + WinBuiltinReplicatorSid = 34, + WinBuiltinPreWindows2000CompatibleAccessSid = 35, + WinBuiltinRemoteDesktopUsersSid = 36, + WinBuiltinNetworkConfigurationOperatorsSid = 37, + WinAccountAdministratorSid = 38, + WinAccountGuestSid = 39, + WinAccountKrbtgtSid = 40, + WinAccountDomainAdminsSid = 41, + WinAccountDomainUsersSid = 42, + WinAccountDomainGuestsSid = 43, + WinAccountComputersSid = 44, + WinAccountControllersSid = 45, + WinAccountCertAdminsSid = 46, + WinAccountSchemaAdminsSid = 47, + WinAccountEnterpriseAdminsSid = 48, + WinAccountPolicyAdminsSid = 49, + WinAccountRasAndIasServersSid = 50, + WinNTLMAuthenticationSid = 51, + WinDigestAuthenticationSid = 52, + WinSChannelAuthenticationSid = 53, + WinThisOrganizationSid = 54, + WinOtherOrganizationSid = 55, + WinBuiltinIncomingForestTrustBuildersSid = 56, + WinBuiltinPerfMonitoringUsersSid = 57, + WinBuiltinPerfLoggingUsersSid = 58, + WinBuiltinAuthorizationAccessSid = 59, + WinBuiltinTerminalServerLicenseServersSid = 60, + +} WELL_KNOWN_SID_TYPE; +typedef enum _AUDIT_EVENT_TYPE { + AuditEventObjectAccess, + AuditEventDirectoryServiceAccess +} AUDIT_EVENT_TYPE, *PAUDIT_EVENT_TYPE; typedef int CALLBACK (*BFFCALLBACK) (HWND, UINT, LPARAM, LPARAM); typedef UINT CALLBACK (*LPCCHOOKPROC) (HWND, UINT, WPARAM, LPARAM); typedef UINT CALLBACK (*LPCFHOOKPROC) (HWND, UINT, WPARAM, LPARAM); @@ -382,42 +479,101 @@ typedef UINT CALLBACK (*LPPRINTHOOKPROC) (HWND, UINT, WPARAM, LPARAM); typedef UINT CALLBACK (*LPSETUPHOOKPROC) (HWND, UINT, WPARAM, LPARAM); typedef WINBOOL CALLBACK (*DLGPROC) (HWND, UINT, WPARAM, LPARAM); typedef int CALLBACK (*PFNPROPSHEETCALLBACK) (HWND, UINT, LPARAM); -typedef VOID CALLBACK (*LPSERVICE_MAIN_FUNCTION) (DWORD, LPTSTR*); +typedef VOID CALLBACK (*LPSERVICE_MAIN_FUNCTIONA) (DWORD, LPSTR*); +typedef VOID CALLBACK (*LPSERVICE_MAIN_FUNCTIONW) (DWORD, LPWSTR*); typedef int CALLBACK (*PFNTVCOMPARE) (LPARAM, LPARAM, LPARAM); typedef LRESULT CALLBACK (*WNDPROC) (HWND, UINT, WPARAM, LPARAM); typedef int CALLBACK (*FARPROC)(void); typedef FARPROC PROC; -typedef WINBOOL CALLBACK (*ENUMRESTYPEPROC) (HANDLE, LPTSTR, LONG); -typedef WINBOOL CALLBACK (*ENUMRESNAMEPROC) (HANDLE, LPCTSTR, LPTSTR, LONG); -typedef WINBOOL CALLBACK (*ENUMRESLANGPROC) (HANDLE, LPCTSTR, LPCTSTR, WORD, LONG); -typedef FARPROC DESKTOPENUMPROC; +typedef WINBOOL CALLBACK (*ENUMRESTYPEPROCA) (HANDLE, LPSTR, LONG); +typedef WINBOOL CALLBACK (*ENUMRESTYPEPROCW) (HANDLE, LPWSTR, LONG); +typedef WINBOOL CALLBACK (*ENUMRESNAMEPROCA) (HANDLE, LPCSTR, LPSTR, LONG); +typedef WINBOOL CALLBACK (*ENUMRESNAMEPROCW) (HANDLE, LPCWSTR, LPWSTR, LONG); +typedef WINBOOL CALLBACK (*ENUMRESLANGPROCA) (HANDLE, LPCSTR, LPCSTR, WORD, LONG); +typedef WINBOOL CALLBACK (*ENUMRESLANGPROCW) (HANDLE, LPCWSTR, LPCWSTR, WORD, LONG); +typedef WINBOOL CALLBACK (*DESKTOPENUMPROCA) (LPSTR, LPARAM); +typedef WINBOOL CALLBACK (*DESKTOPENUMPROCW) (LPWSTR, LPARAM); typedef WINBOOL CALLBACK (*ENUMWINDOWSPROC) (HWND, LPARAM); -typedef WINBOOL CALLBACK (*ENUMWINDOWSTATIONPROC) (LPTSTR, LPARAM); +typedef WINBOOL CALLBACK (*ENUMWINDOWSTATIONPROCA) (LPSTR, LPARAM); +typedef WINBOOL CALLBACK (*ENUMWINDOWSTATIONPROCW) (LPWSTR, LPARAM); typedef VOID CALLBACK (*SENDASYNCPROC) (HWND, UINT, DWORD, LRESULT); typedef VOID CALLBACK (*TIMERPROC) (HWND, UINT, UINT, DWORD); -typedef FARPROC GRAYSTRINGPROC; +typedef WINBOOL CALLBACK (*GRAYSTRINGPROC) (HDC, LPARAM, int); typedef WINBOOL CALLBACK (*DRAWSTATEPROC) (HDC, LPARAM, WPARAM, int, int); -typedef WINBOOL CALLBACK (*PROPENUMPROCEX) (HWND, LPCTSTR, HANDLE, DWORD); -typedef WINBOOL CALLBACK (*PROPENUMPROC) (HWND, LPCTSTR, HANDLE); +typedef WINBOOL CALLBACK (*PROPENUMPROCEXA) (HWND, LPCSTR, HANDLE, DWORD); +typedef WINBOOL CALLBACK (*PROPENUMPROCEXW) (HWND, LPCWSTR, HANDLE, DWORD); +typedef WINBOOL CALLBACK (*PROPENUMPROCA) (HWND, LPCSTR, HANDLE); +typedef WINBOOL CALLBACK (*PROPENUMPROCW) (HWND, LPCWSTR, HANDLE); typedef LRESULT CALLBACK (*HOOKPROC) (int, WPARAM, LPARAM); typedef VOID CALLBACK (*ENUMOBJECTSPROC) (LPVOID, LPARAM); typedef VOID CALLBACK (*LINEDDAPROC) (int, int, LPARAM); typedef WINBOOL CALLBACK (*ABORTPROC) (HDC, int); typedef UINT CALLBACK (*LPPAGEPAINTHOOK) (HWND, UINT, WPARAM, LPARAM ); typedef UINT CALLBACK (*LPPAGESETUPHOOK) (HWND, UINT, WPARAM, LPARAM ); -typedef int CALLBACK (*ICMENUMPROC) (LPTSTR, LPARAM); +typedef int CALLBACK (*ICMENUMPROCA) (LPSTR, LPARAM); +typedef int CALLBACK (*ICMENUMPROCW) (LPWSTR, LPARAM); typedef LONG (*EDITWORDBREAKPROCEX) (char *, LONG, BYTE, INT); typedef int CALLBACK (*PFNLVCOMPARE) (LPARAM, LPARAM, LPARAM); -typedef WINBOOL CALLBACK (*LOCALE_ENUMPROC) (LPTSTR); -typedef WINBOOL CALLBACK (*CODEPAGE_ENUMPROC) (LPTSTR); -typedef WINBOOL CALLBACK (*DATEFMT_ENUMPROC) (LPTSTR); -typedef WINBOOL CALLBACK (*TIMEFMT_ENUMPROC) (LPTSTR); -typedef WINBOOL CALLBACK (*CALINFO_ENUMPROC) (LPTSTR); +typedef WINBOOL CALLBACK (*LOCALE_ENUMPROCA) (LPSTR); +typedef WINBOOL CALLBACK (*LOCALE_ENUMPROCW) (LPWSTR); +typedef WINBOOL CALLBACK (*CODEPAGE_ENUMPROCA) (LPSTR); +typedef WINBOOL CALLBACK (*CODEPAGE_ENUMPROCW) (LPWSTR); +typedef WINBOOL CALLBACK (*DATEFMT_ENUMPROCA) (LPSTR); +typedef WINBOOL CALLBACK (*DATEFMT_ENUMPROCW) (LPWSTR); +typedef WINBOOL CALLBACK (*TIMEFMT_ENUMPROCA) (LPSTR); +typedef WINBOOL CALLBACK (*TIMEFMT_ENUMPROCW) (LPWSTR); +typedef WINBOOL CALLBACK (*CALINFO_ENUMPROCA) (LPSTR); +typedef int (CALLBACK* EMFPLAYPROC)( HDC hdc, INT iFunction, HANDLE hPageQuery ); +typedef WINBOOL CALLBACK (*CALINFO_ENUMPROCW) (LPWSTR); typedef WINBOOL CALLBACK (*PHANDLER_ROUTINE) (DWORD); typedef VOID CALLBACK (*LPHANDLER_FUNCTION) (DWORD); -typedef UINT CALLBACK (*PFNGETPROFILEPATH) (LPCTSTR, LPSTR, UINT); -typedef UINT CALLBACK (*PFNRECONCILEPROFILE) (LPCTSTR, LPCTSTR, DWORD); -typedef WINBOOL CALLBACK (*PFNPROCESSPOLICIES) (HWND, LPCTSTR, LPCTSTR, LPCTSTR, DWORD); +typedef DWORD CALLBACK (*LPHANDLER_FUNCTION_EX)(DWORD,DWORD,LPVOID,LPVOID); +typedef UINT CALLBACK (*PFNGETPROFILEPATHA) (LPCSTR, LPSTR, UINT); +typedef UINT CALLBACK (*PFNGETPROFILEPATHW) (LPCWSTR, LPWSTR, UINT); +typedef UINT CALLBACK (*PFNRECONCILEPROFILEA) (LPCSTR, LPCSTR, DWORD); +typedef UINT CALLBACK (*PFNRECONCILEPROFILEW) (LPCWSTR, LPCWSTR, DWORD); +typedef WINBOOL CALLBACK (*PFNPROCESSPOLICIESA) (HWND, LPCSTR, LPCSTR, LPCSTR, DWORD); +typedef WINBOOL CALLBACK (*PFNPROCESSPOLICIESW) (HWND, LPCWSTR, LPCWSTR, LPCWSTR, DWORD); + +#ifndef _DISABLE_TIDENTS +#ifdef UNICODE +#define LPSERVICE_MAIN_FUNCTION LPSERVICE_MAIN_FUNCTIONW +#define ENUMRESTYPEPROC ENUMRESTYPEPROCW +#define ENUMRESNAMEPROC ENUMRESNAMEPROCW +#define ENUMRESLANGPROC ENUMRESLANGPROCW +#define DESKTOPENUMPROC DESKTOPENUMPROCW +#define ENUMWINDOWSTATIONPROC ENUMWINDOWSTATIONPROCW +#define PROPENUMPROCEX PROPENUMPROCEXW +#define PROPENUMPROC PROPENUMPROCW +#define ICMENUMPROC ICMENUMPROCW +#define LOCALE_ENUMPROC LOCALE_ENUMPROCW +#define CODEPAGE_ENUMPROC CODEPAGE_ENUMPROCW +#define DATEFMT_ENUMPROC DATEFMT_ENUMPROCW +#define TIMEFMT_ENUMPROC TIMEFMT_ENUMPROCW +#define CALINFO_ENUMPROC CALINFO_ENUMPROCW +#define PFNGETPROFILEPATH PFNGETPROFILEPATHW +#define PFNRECONCILEPROFILE PFNRECONCILEPROFILEW +#define PFNPROCESSPOLICIES PFNPROCESSPOLICIESW +#else /* UNICODE */ +#define LPSERVICE_MAIN_FUNCTION LPSERVICE_MAIN_FUNCTIONA +#define ENUMRESTYPEPROC ENUMRESTYPEPROCA +#define ENUMRESNAMEPROC ENUMRESNAMEPROCA +#define ENUMRESLANGPROC ENUMRESLANGPROCA +#define DESKTOPENUMPROC DESKTOPENUMPROCA +#define ENUMWINDOWSTATIONPROC ENUMWINDOWSTATIONPROCA +#define PROPENUMPROCEX PROPENUMPROCEXA +#define PROPENUMPROC PROPENUMPROCA +#define ICMENUMPROC ICMENUMPROCA +#define LOCALE_ENUMPROC LOCALE_ENUMPROCA +#define CODEPAGE_ENUMPROC CODEPAGE_ENUMPROCA +#define DATEFMT_ENUMPROC DATEFMT_ENUMPROCA +#define TIMEFMT_ENUMPROC TIMEFMT_ENUMPROCA +#define CALINFO_ENUMPROC CALINFO_ENUMPROCA +#define PFNGETPROFILEPATH PFNGETPROFILEPATHA +#define PFNRECONCILEPROFILE PFNRECONCILEPROFILEA +#define PFNPROCESSPOLICIES PFNPROCESSPOLICIESA +#endif /* UNICODE */ +#endif /* _DISABLE_TIDENTS */ #define SECURITY_NULL_SID_AUTHORITY {0,0,0,0,0,0} #define SECURITY_WORLD_SID_AUTHORITY {0,0,0,0,0,1} @@ -451,6 +607,19 @@ typedef WINBOOL CALLBACK (*PFNPROCESSPOLICIES) (HWND, LPCTSTR, LPCTSTR, LPCTSTR, #define SE_CHANGE_NOTIFY_NAME TEXT("SeChangeNotifyPrivilege") #define SE_REMOTE_SHUTDOWN_NAME TEXT("SeRemoteShutdownPrivilege") +typedef BOOL (CALLBACK* LANGUAGEGROUP_ENUMPROCA)(LGRPID, LPSTR, LPSTR, DWORD, LONG_PTR); +typedef BOOL (CALLBACK* LANGGROUPLOCALE_ENUMPROCA)(LGRPID, LCID, LPSTR, LONG_PTR); +typedef BOOL (CALLBACK* UILANGUAGE_ENUMPROCA)(LPSTR, LONG_PTR); +typedef BOOL (CALLBACK* DATEFMT_ENUMPROCEXA)(LPSTR, CALID); +typedef BOOL (CALLBACK* CALINFO_ENUMPROCEXA)(LPSTR, CALID); + +typedef BOOL (CALLBACK* LANGUAGEGROUP_ENUMPROCW)(LGRPID, LPWSTR, LPWSTR, DWORD, LONG_PTR); +typedef BOOL (CALLBACK* LANGGROUPLOCALE_ENUMPROCW)(LGRPID, LCID, LPWSTR, LONG_PTR); +typedef BOOL (CALLBACK* UILANGUAGE_ENUMPROCW)(LPWSTR, LONG_PTR); +typedef BOOL (CALLBACK* DATEFMT_ENUMPROCEXW)(LPWSTR, CALID); +typedef BOOL (CALLBACK* CALINFO_ENUMPROCEXW)(LPWSTR, CALID); +typedef BOOL (CALLBACK* GEO_ENUMPROC)(GEOID); + #define SERVICES_ACTIVE_DATABASEW L"ServicesActive" #define SERVICES_FAILED_DATABASEW L"ServicesFailed" #define SERVICES_ACTIVE_DATABASEA "ServicesActive" @@ -458,6 +627,7 @@ typedef WINBOOL CALLBACK (*PFNPROCESSPOLICIES) (HWND, LPCTSTR, LPCTSTR, LPCTSTR, #define SC_GROUP_IDENTIFIERW L'+' #define SC_GROUP_IDENTIFIERA '+' +#ifndef _DISABLE_TIDENTS #ifdef UNICODE #define SERVICES_ACTIVE_DATABASE SERVICES_ACTIVE_DATABASEW #define SERVICES_FAILED_DATABASE SERVICES_FAILED_DATABASEW @@ -467,6 +637,9 @@ typedef WINBOOL CALLBACK (*PFNPROCESSPOLICIES) (HWND, LPCTSTR, LPCTSTR, LPCTSTR, #define SERVICES_FAILED_DATABASE SERVICES_FAILED_DATABASEA #define SC_GROUP_IDENTIFIER SC_GROUP_IDENTIFIERA #endif /* UNICODE */ +#endif /* _DISABLE_TIDENTS */ + +#define MM_MAX_NUMAXES 16 /* ---------------------------------- */ /* From ddeml.h in old Cygnus headers */ @@ -475,6 +648,60 @@ typedef void (*CALLB) (void); typedef CALLB PFNCALLBACK; +typedef enum _COMPUTER_NAME_FORMAT { + ComputerNameNetBIOS, + ComputerNameDnsHostname, + ComputerNameDnsDomain, + ComputerNameDnsFullyQualified, + ComputerNamePhysicalNetBIOS, + ComputerNamePhysicalDnsHostname, + ComputerNamePhysicalDnsDomain, + ComputerNamePhysicalDnsFullyQualified, + ComputerNameMax +} COMPUTER_NAME_FORMAT ; + +typedef enum _HEAP_INFORMATION_CLASS { + + HeapCompatibilityInformation + +} HEAP_INFORMATION_CLASS; + +typedef enum { + LT_DONT_CARE, + LT_LOWEST_LATENCY +} LATENCY_TIME; + +typedef LONG (CALLBACK *PVECTORED_EXCEPTION_HANDLER)( + struct _EXCEPTION_POINTERS *ExceptionInfo + ); + +typedef +VOID +(CALLBACK *PAPCFUNC)( + ULONG_PTR dwParam + ); + +#ifdef __cplusplus +#define REFGUID const GUID & +#else +#define REFGUID const GUID * +#endif + +typedef DWORD (CALLBACK *PFE_EXPORT_FUNC)(PBYTE pbData,PVOID pvCallbackContext,ULONG ulLength); + +typedef DWORD (CALLBACK *PFE_IMPORT_FUNC)(PBYTE pbData,PVOID pvCallbackContext,PULONG ulLength); +typedef VOID (CALLBACK *PFIBER_START_ROUTINE)( + LPVOID lpFiberParameter + ); +typedef PFIBER_START_ROUTINE LPFIBER_START_ROUTINE; + +typedef enum _MEMORY_RESOURCE_NOTIFICATION_TYPE { + LowMemoryResourceNotification, + HighMemoryResourceNotification +} MEMORY_RESOURCE_NOTIFICATION_TYPE; + +typedef VOID (CALLBACK* WAITORTIMERCALLBACKFUNC) (PVOID, BOOLEAN ); +typedef WAITORTIMERCALLBACKFUNC WAITORTIMERCALLBACK; /* End of stuff from ddeml.h in old Cygnus headers */ /* ----------------------------------------------- */ @@ -484,6 +711,7 @@ typedef FARPROC ENHMFENUMPROC; typedef DWORD CCSTYLE, *PCCSTYLE, *LPCCSTYLE; typedef DWORD CCSTYLEFLAGA, *PCCSTYLEFLAGA, *LPCCSTYLEFLAGA; #define DECLARE_HANDLE(s) typedef HANDLE s +typedef LANGID *PLANGID; #endif /* ! defined (RC_INVOKED) */ diff --git a/include/basetsd.h b/include/basetsd.h index 65eec25..16ca870 100644 --- a/include/basetsd.h +++ b/include/basetsd.h @@ -47,7 +47,7 @@ #ifdef __cplusplus extern "C" { #endif -typedef int LONG32, *PLONG32; +typedef long LONG32, *PLONG32; #ifndef XFree86Server typedef int INT32, *PINT32; #endif /* ndef XFree86Server */ diff --git a/include/coff.h b/include/coff.h index 4e467d3..80cdcd7 100644 --- a/include/coff.h +++ b/include/coff.h @@ -6,11 +6,11 @@ extern "C" { #endif -//#ifndef __dj_ENFORCE_ANSI_FREESTANDING - -//#ifndef __STRICT_ANSI__ - -//#ifndef _POSIX_SOURCE +/* + * #ifndef __dj_ENFORCE_ANSI_FREESTANDING + * #ifndef __STRICT_ANSI__ + * #ifndef _POSIX_SOURCE + */ /*** coff information for Intel 386/486. */ @@ -325,10 +325,11 @@ struct external_reloc { /* For new sections we havn't heard of before */ #define DEFAULT_SECTION_ALIGNMENT 4 -//#endif /* !_POSIX_SOURCE */ -//#endif /* !__STRICT_ANSI__ */ -//#endif /* !__dj_ENFORCE_ANSI_FREESTANDING */ - +/* + * #endif /* !_POSIX_SOURCE */ + * #endif /* !__STRICT_ANSI__ */ + * #endif /* !__dj_ENFORCE_ANSI_FREESTANDING */ + */ #ifndef __dj_ENFORCE_FUNCTION_CALLS #endif /* !__dj_ENFORCE_FUNCTION_CALLS */ diff --git a/include/csrss/csrss.h b/include/csrss/csrss.h index c1e59c7..25d2c81 100644 --- a/include/csrss/csrss.h +++ b/include/csrss/csrss.h @@ -13,6 +13,8 @@ #define CSR_CSRSS_SECTION_SIZE (65536) +typedef __declspec(noreturn) VOID CALLBACK(*PCONTROLDISPATCHER)(DWORD); + typedef struct { } CSRSS_CONNECT_PROCESS_REQUEST, PCSRSS_CONNECT_PROCESS_REQUEST; @@ -25,6 +27,7 @@ typedef struct { ULONG NewProcessId; ULONG Flags; + PCONTROLDISPATCHER CtrlDispatcher; } CSRSS_CREATE_PROCESS_REQUEST, *PCSRSS_CREATE_PROCESS_REQUEST; typedef struct @@ -49,7 +52,7 @@ typedef struct { HANDLE ConsoleHandle; WORD NrCharactersToRead; - WORD nCharsCanBeDeleted; // number of chars already in buffer that can be backspaced + WORD nCharsCanBeDeleted; /* number of chars already in buffer that can be backspaced */ } CSRSS_READ_CONSOLE_REQUEST, *PCSRSS_READ_CONSOLE_REQUEST; typedef struct @@ -61,6 +64,11 @@ typedef struct typedef struct { + PCONTROLDISPATCHER CtrlDispatcher; +} CSRSS_ALLOC_CONSOLE_REQUEST, *PCSRSS_ALLOC_CONSOLE_REQUEST; + +typedef struct +{ HANDLE InputHandle; HANDLE OutputHandle; } CSRSS_ALLOC_CONSOLE_REPLY, *PCSRSS_ALLOC_CONSOLE_REPLY; @@ -368,6 +376,26 @@ typedef struct HANDLE Handle; } CSRSS_DUPLICATE_HANDLE_REPLY, *PCSRSS_DUPLICATE_HANDLE_REPLY; +#define CONSOLE_HARDWARE_STATE_GET 0 +#define CONSOLE_HARDWARE_STATE_SET 1 + +#define CONSOLE_HARDWARE_STATE_GDI_MANAGED 0 +#define CONSOLE_HARDWARE_STATE_DIRECT 1 + +typedef struct +{ + HANDLE ConsoleHandle; + DWORD SetGet; /* 0=get; 1=set */ + DWORD State; + +} CSRSS_CONSOLE_HARDWARE_STATE, *PCSRSS_CONSOLE_HARDWARE_STATE; + +typedef struct +{ + HANDLE ConsoleHandle; + HWND WindowHandle; +} CSRSS_CONSOLE_WINDOW, *PCSRSS_CONSOLE_WINDOW; + #define CSRSS_MAX_WRITE_CONSOLE_REQUEST \ (MAX_MESSAGE_DATA - sizeof(ULONG) - sizeof(CSRSS_WRITE_CONSOLE_REQUEST)) @@ -383,7 +411,7 @@ typedef struct #define CSRSS_MAX_READ_CONSOLE_OUTPUT_ATTRIB (MAX_MESSAGE_DATA - sizeof(ULONG) - sizeof(HANDLE) - sizeof(DWORD) - sizeof(CSRSS_READ_CONSOLE_OUTPUT_ATTRIB_REQUEST)) -// WCHARs, not bytes! +/* WCHARs, not bytes! */ #define CSRSS_MAX_TITLE_LENGTH 80 #define CSRSS_CREATE_PROCESS (0x0) @@ -427,6 +455,8 @@ typedef struct #define CSRSS_CLOSE_HANDLE (0x26) #define CSRSS_VERIFY_HANDLE (0x27) #define CSRSS_DUPLICATE_HANDLE (0x28) +#define CSRSS_SETGET_CONSOLE_HW_STATE (0x29) +#define CSRSS_GET_CONSOLE_WINDOW (0x2A) /* Keep in sync with definition below. */ #define CSRSS_REQUEST_HEADER_SIZE (sizeof(LPC_MESSAGE) + sizeof(ULONG)) @@ -441,6 +471,7 @@ typedef struct CSRSS_CONNECT_PROCESS_REQUEST ConnectRequest; CSRSS_WRITE_CONSOLE_REQUEST WriteConsoleRequest; CSRSS_READ_CONSOLE_REQUEST ReadConsoleRequest; + CSRSS_ALLOC_CONSOLE_REQUEST AllocConsoleRequest; CSRSS_SCREEN_BUFFER_INFO_REQUEST ScreenBufferInfoRequest; CSRSS_SET_CURSOR_REQUEST SetCursorRequest; CSRSS_FILL_OUTPUT_REQUEST FillOutputRequest; @@ -473,6 +504,8 @@ typedef struct CSRSS_CLOSE_HANDLE_REQUEST CloseHandleRequest; CSRSS_VERIFY_HANDLE_REQUEST VerifyHandleRequest; CSRSS_DUPLICATE_HANDLE_REQUEST DuplicateHandleRequest; + CSRSS_CONSOLE_HARDWARE_STATE ConsoleHardwareStateRequest; + CSRSS_CONSOLE_WINDOW ConsoleWindowRequest; } Data; } CSRSS_API_REQUEST, *PCSRSS_API_REQUEST; @@ -506,6 +539,8 @@ typedef struct CSRSS_GET_INPUT_HANDLE_REPLY GetInputHandleReply; CSRSS_GET_OUTPUT_HANDLE_REPLY GetOutputHandleReply; CSRSS_DUPLICATE_HANDLE_REPLY DuplicateHandleReply; + CSRSS_CONSOLE_HARDWARE_STATE ConsoleHardwareStateReply; + CSRSS_CONSOLE_WINDOW ConsoleWindowReply; } Data; } CSRSS_API_REPLY, *PCSRSS_API_REPLY; diff --git a/include/d3d.h b/include/d3d.h new file mode 100644 index 0000000..f619681 --- /dev/null +++ b/include/d3d.h @@ -0,0 +1,128 @@ +/* + * Copyright (C) the Wine project + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * 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. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef __WINE_D3D_H +#define __WINE_D3D_H + +#include +#include /* must precede d3dcaps.h */ +#include + +/* ******************************************************************** + Error Codes + ******************************************************************** */ +#define D3D_OK DD_OK +#define D3DERR_BADMAJORVERSION MAKE_DDHRESULT(700) +#define D3DERR_BADMINORVERSION MAKE_DDHRESULT(701) +#define D3DERR_INVALID_DEVICE MAKE_DDHRESULT(705) +#define D3DERR_INITFAILED MAKE_DDHRESULT(706) +#define D3DERR_DEVICEAGGREGATED MAKE_DDHRESULT(707) +#define D3DERR_EXECUTE_CREATE_FAILED MAKE_DDHRESULT(710) +#define D3DERR_EXECUTE_DESTROY_FAILED MAKE_DDHRESULT(711) +#define D3DERR_EXECUTE_LOCK_FAILED MAKE_DDHRESULT(712) +#define D3DERR_EXECUTE_UNLOCK_FAILED MAKE_DDHRESULT(713) +#define D3DERR_EXECUTE_LOCKED MAKE_DDHRESULT(714) +#define D3DERR_EXECUTE_NOT_LOCKED MAKE_DDHRESULT(715) +#define D3DERR_EXECUTE_FAILED MAKE_DDHRESULT(716) +#define D3DERR_EXECUTE_CLIPPED_FAILED MAKE_DDHRESULT(717) +#define D3DERR_TEXTURE_NO_SUPPORT MAKE_DDHRESULT(720) +#define D3DERR_TEXTURE_CREATE_FAILED MAKE_DDHRESULT(721) +#define D3DERR_TEXTURE_DESTROY_FAILED MAKE_DDHRESULT(722) +#define D3DERR_TEXTURE_LOCK_FAILED MAKE_DDHRESULT(723) +#define D3DERR_TEXTURE_UNLOCK_FAILED MAKE_DDHRESULT(724) +#define D3DERR_TEXTURE_LOAD_FAILED MAKE_DDHRESULT(725) +#define D3DERR_TEXTURE_SWAP_FAILED MAKE_DDHRESULT(726) +#define D3DERR_TEXTURE_LOCKED MAKE_DDHRESULT(727) +#define D3DERR_TEXTURE_NOT_LOCKED MAKE_DDHRESULT(728) +#define D3DERR_TEXTURE_GETSURF_FAILED MAKE_DDHRESULT(729) +#define D3DERR_MATRIX_CREATE_FAILED MAKE_DDHRESULT(730) +#define D3DERR_MATRIX_DESTROY_FAILED MAKE_DDHRESULT(731) +#define D3DERR_MATRIX_SETDATA_FAILED MAKE_DDHRESULT(732) +#define D3DERR_MATRIX_GETDATA_FAILED MAKE_DDHRESULT(733) +#define D3DERR_SETVIEWPORTDATA_FAILED MAKE_DDHRESULT(734) +#define D3DERR_INVALIDCURRENTVIEWPORT MAKE_DDHRESULT(735) +#define D3DERR_INVALIDPRIMITIVETYPE MAKE_DDHRESULT(736) +#define D3DERR_INVALIDVERTEXTYPE MAKE_DDHRESULT(737) +#define D3DERR_TEXTURE_BADSIZE MAKE_DDHRESULT(738) +#define D3DERR_INVALIDRAMPTEXTURE MAKE_DDHRESULT(739) +#define D3DERR_MATERIAL_CREATE_FAILED MAKE_DDHRESULT(740) +#define D3DERR_MATERIAL_DESTROY_FAILED MAKE_DDHRESULT(741) +#define D3DERR_MATERIAL_SETDATA_FAILED MAKE_DDHRESULT(742) +#define D3DERR_MATERIAL_GETDATA_FAILED MAKE_DDHRESULT(743) +#define D3DERR_INVALIDPALETTE MAKE_DDHRESULT(744) +#define D3DERR_ZBUFF_NEEDS_SYSTEMMEMORY MAKE_DDHRESULT(745) +#define D3DERR_ZBUFF_NEEDS_VIDEOMEMORY MAKE_DDHRESULT(746) +#define D3DERR_SURFACENOTINVIDMEM MAKE_DDHRESULT(747) +#define D3DERR_LIGHT_SET_FAILED MAKE_DDHRESULT(750) +#define D3DERR_LIGHTHASVIEWPORT MAKE_DDHRESULT(751) +#define D3DERR_LIGHTNOTINTHISVIEWPORT MAKE_DDHRESULT(752) +#define D3DERR_SCENE_IN_SCENE MAKE_DDHRESULT(760) +#define D3DERR_SCENE_NOT_IN_SCENE MAKE_DDHRESULT(761) +#define D3DERR_SCENE_BEGIN_FAILED MAKE_DDHRESULT(762) +#define D3DERR_SCENE_END_FAILED MAKE_DDHRESULT(763) +#define D3DERR_INBEGIN MAKE_DDHRESULT(770) +#define D3DERR_NOTINBEGIN MAKE_DDHRESULT(771) +#define D3DERR_NOVIEWPORTS MAKE_DDHRESULT(772) +#define D3DERR_VIEWPORTDATANOTSET MAKE_DDHRESULT(773) +#define D3DERR_VIEWPORTHASNODEVICE MAKE_DDHRESULT(774) +#define D3DERR_NOCURRENTVIEWPORT MAKE_DDHRESULT(775) +#define D3DERR_INVALIDVERTEXFORMAT MAKE_DDHRESULT(2048) +#define D3DERR_VERTEXBUFFEROPTIMIZED MAKE_DDHRESULT(2060) +#define D3DERR_VBUF_CREATE_FAILED MAKE_DDHRESULT(2061) +#define D3DERR_VERTEXBUFFERLOCKED MAKE_DDHRESULT(2062) +#define D3DERR_VERTEXBUFFERUNLOCKFAILED MAKE_DDHRESULT(2063) +#define D3DERR_ZBUFFER_NOTPRESENT MAKE_DDHRESULT(2070) +#define D3DERR_STENCILBUFFER_NOTPRESENT MAKE_DDHRESULT(2071) + +#define D3DERR_WRONGTEXTUREFORMAT MAKE_DDHRESULT(2072) +#define D3DERR_UNSUPPORTEDCOLOROPERATION MAKE_DDHRESULT(2073) +#define D3DERR_UNSUPPORTEDCOLORARG MAKE_DDHRESULT(2074) +#define D3DERR_UNSUPPORTEDALPHAOPERATION MAKE_DDHRESULT(2075) +#define D3DERR_UNSUPPORTEDALPHAARG MAKE_DDHRESULT(2076) +#define D3DERR_TOOMANYOPERATIONS MAKE_DDHRESULT(2077) +#define D3DERR_CONFLICTINGTEXTUREFILTER MAKE_DDHRESULT(2078) +#define D3DERR_UNSUPPORTEDFACTORVALUE MAKE_DDHRESULT(2079) +#define D3DERR_CONFLICTINGRENDERSTATE MAKE_DDHRESULT(2081) +#define D3DERR_UNSUPPORTEDTEXTUREFILTER MAKE_DDHRESULT(2082) +#define D3DERR_TOOMANYPRIMITIVES MAKE_DDHRESULT(2083) +#define D3DERR_INVALIDMATRIX MAKE_DDHRESULT(2084) +#define D3DERR_TOOMANYVERTICES MAKE_DDHRESULT(2085) +#define D3DERR_CONFLICTINGTEXTUREPALETTE MAKE_DDHRESULT(2086) + +#define D3DERR_INVALIDSTATEBLOCK MAKE_DDHRESULT(2100) +#define D3DERR_INBEGINSTATEBLOCK MAKE_DDHRESULT(2101) +#define D3DERR_NOTINBEGINSTATEBLOCK MAKE_DDHRESULT(2102) + +/* ******************************************************************** + Enums + ******************************************************************** */ +#define D3DNEXT_NEXT 0x01l +#define D3DNEXT_HEAD 0x02l +#define D3DNEXT_TAIL 0x04l + +#define D3DDP_WAIT 0x00000001l +#define D3DDP_OUTOFORDER 0x00000002l +#define D3DDP_DONOTCLIP 0x00000004l +#define D3DDP_DONOTUPDATEEXTENTS 0x00000008l +#define D3DDP_DONOTLIGHT 0x00000010l + +/* ******************************************************************** + Types and structures + ******************************************************************** */ +typedef DWORD D3DVIEWPORTHANDLE, *LPD3DVIEWPORTHANDLE; +#endif diff --git a/include/d3dcaps.h b/include/d3dcaps.h new file mode 100644 index 0000000..51dff25 --- /dev/null +++ b/include/d3dcaps.h @@ -0,0 +1,432 @@ +/* + * Copyright (C) 2000 Peter Hunnisett + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * 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. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef __WINE_D3DCAPS_H +#define __WINE_D3DCAPS_H + +#include + +typedef struct _D3DTRANSFORMCAPS { + DWORD dwSize; + DWORD dwCaps; +} D3DTRANSFORMCAPS, *LPD3DTRANSFORMCAPS; + +#define D3DTRANSFORMCAPS_CLIP 0x00000001L + +typedef struct _D3DLIGHTINGCAPS { + DWORD dwSize; + DWORD dwCaps; + DWORD dwLightingModel; + DWORD dwNumLights; +} D3DLIGHTINGCAPS, *LPD3DLIGHTINGCAPS; + +#define D3DLIGHTINGMODEL_RGB 0x00000001 +#define D3DLIGHTINGMODEL_MONO 0x00000002 + +#define D3DLIGHTCAPS_POINT 0x00000001 +#define D3DLIGHTCAPS_SPOT 0x00000002 +#define D3DLIGHTCAPS_DIRECTIONAL 0x00000004 +#define D3DLIGHTCAPS_PARALLELPOINT 0x00000008 +#define D3DLIGHTCAPS_GLSPOT 0x00000010 + +typedef struct _D3dPrimCaps { + DWORD dwSize; + DWORD dwMiscCaps; + DWORD dwRasterCaps; + DWORD dwZCmpCaps; + DWORD dwSrcBlendCaps; + DWORD dwDestBlendCaps; + DWORD dwAlphaCmpCaps; + DWORD dwShadeCaps; + DWORD dwTextureCaps; + DWORD dwTextureFilterCaps; + DWORD dwTextureBlendCaps; + DWORD dwTextureAddressCaps; + DWORD dwStippleWidth; + DWORD dwStippleHeight; +} D3DPRIMCAPS, *LPD3DPRIMCAPS; + +#define D3DPMISCCAPS_MASKPLANES 0x00000001 +#define D3DPMISCCAPS_MASKZ 0x00000002 +#define D3DPMISCCAPS_LINEPATTERNREP 0x00000004 +#define D3DPMISCCAPS_CONFORMANT 0x00000008 +#define D3DPMISCCAPS_CULLNONE 0x00000010 +#define D3DPMISCCAPS_CULLCW 0x00000020 +#define D3DPMISCCAPS_CULLCCW 0x00000040 + +#define D3DPRASTERCAPS_DITHER 0x00000001 +#define D3DPRASTERCAPS_ROP2 0x00000002 +#define D3DPRASTERCAPS_XOR 0x00000004 +#define D3DPRASTERCAPS_PAT 0x00000008 +#define D3DPRASTERCAPS_ZTEST 0x00000010 +#define D3DPRASTERCAPS_SUBPIXEL 0x00000020 +#define D3DPRASTERCAPS_SUBPIXELX 0x00000040 +#define D3DPRASTERCAPS_FOGVERTEX 0x00000080 +#define D3DPRASTERCAPS_FOGTABLE 0x00000100 +#define D3DPRASTERCAPS_STIPPLE 0x00000200 +#define D3DPRASTERCAPS_ANTIALIASSORTDEPENDENT 0x00000400 +#define D3DPRASTERCAPS_ANTIALIASSORTINDEPENDENT 0x00000800 +#define D3DPRASTERCAPS_ANTIALIASEDGES 0x00001000 +#define D3DPRASTERCAPS_MIPMAPLODBIAS 0x00002000 +#define D3DPRASTERCAPS_ZBIAS 0x00004000 +#define D3DPRASTERCAPS_ZBUFFERLESSHSR 0x00008000 +#define D3DPRASTERCAPS_FOGRANGE 0x00010000 +#define D3DPRASTERCAPS_ANISOTROPY 0x00020000 +#define D3DPRASTERCAPS_WBUFFER 0x00040000 +#define D3DPRASTERCAPS_TRANSLUCENTSORTINDEPENDENT 0x00080000 +#define D3DPRASTERCAPS_WFOG 0x00100000 +#define D3DPRASTERCAPS_ZFOG 0x00200000 + +#define D3DPCMPCAPS_NEVER 0x00000001 +#define D3DPCMPCAPS_LESS 0x00000002 +#define D3DPCMPCAPS_EQUAL 0x00000004 +#define D3DPCMPCAPS_LESSEQUAL 0x00000008 +#define D3DPCMPCAPS_GREATER 0x00000010 +#define D3DPCMPCAPS_NOTEQUAL 0x00000020 +#define D3DPCMPCAPS_GREATEREQUAL 0x00000040 +#define D3DPCMPCAPS_ALWAYS 0x00000080 + +#define D3DPBLENDCAPS_ZERO 0x00000001 +#define D3DPBLENDCAPS_ONE 0x00000002 +#define D3DPBLENDCAPS_SRCCOLOR 0x00000004 +#define D3DPBLENDCAPS_INVSRCCOLOR 0x00000008 +#define D3DPBLENDCAPS_SRCALPHA 0x00000010 +#define D3DPBLENDCAPS_INVSRCALPHA 0x00000020 +#define D3DPBLENDCAPS_DESTALPHA 0x00000040 +#define D3DPBLENDCAPS_INVDESTALPHA 0x00000080 +#define D3DPBLENDCAPS_DESTCOLOR 0x00000100 +#define D3DPBLENDCAPS_INVDESTCOLOR 0x00000200 +#define D3DPBLENDCAPS_SRCALPHASAT 0x00000400 +#define D3DPBLENDCAPS_BOTHSRCALPHA 0x00000800 +#define D3DPBLENDCAPS_BOTHINVSRCALPHA 0x00001000 + +#define D3DPSHADECAPS_COLORFLATMONO 0x00000001 +#define D3DPSHADECAPS_COLORFLATRGB 0x00000002 +#define D3DPSHADECAPS_COLORGOURAUDMONO 0x00000004 +#define D3DPSHADECAPS_COLORGOURAUDRGB 0x00000008 +#define D3DPSHADECAPS_COLORPHONGMONO 0x00000010 +#define D3DPSHADECAPS_COLORPHONGRGB 0x00000020 + +#define D3DPSHADECAPS_SPECULARFLATMONO 0x00000040 +#define D3DPSHADECAPS_SPECULARFLATRGB 0x00000080 +#define D3DPSHADECAPS_SPECULARGOURAUDMONO 0x00000100 +#define D3DPSHADECAPS_SPECULARGOURAUDRGB 0x00000200 +#define D3DPSHADECAPS_SPECULARPHONGMONO 0x00000400 +#define D3DPSHADECAPS_SPECULARPHONGRGB 0x00000800 + +#define D3DPSHADECAPS_ALPHAFLATBLEND 0x00001000 +#define D3DPSHADECAPS_ALPHAFLATSTIPPLED 0x00002000 +#define D3DPSHADECAPS_ALPHAGOURAUDBLEND 0x00004000 +#define D3DPSHADECAPS_ALPHAGOURAUDSTIPPLED 0x00008000 +#define D3DPSHADECAPS_ALPHAPHONGBLEND 0x00010000 +#define D3DPSHADECAPS_ALPHAPHONGSTIPPLED 0x00020000 + +#define D3DPSHADECAPS_FOGFLAT 0x00040000 +#define D3DPSHADECAPS_FOGGOURAUD 0x00080000 +#define D3DPSHADECAPS_FOGPHONG 0x00100000 + +#define D3DPTEXTURECAPS_PERSPECTIVE 0x00000001 +#define D3DPTEXTURECAPS_POW2 0x00000002 +#define D3DPTEXTURECAPS_ALPHA 0x00000004 +#define D3DPTEXTURECAPS_TRANSPARENCY 0x00000008 +#define D3DPTEXTURECAPS_BORDER 0x00000010 +#define D3DPTEXTURECAPS_SQUAREONLY 0x00000020 +#define D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE 0x00000040 +#define D3DPTEXTURECAPS_ALPHAPALETTE 0x00000080 +#define D3DPTEXTURECAPS_NONPOW2CONDITIONAL 0x00000100L +/* yes actually 0x00000200 is unused - or at least unreleased */ +#define D3DPTEXTURECAPS_PROJECTED 0x00000400 +#define D3DPTEXTURECAPS_CUBEMAP 0x00000800 +#define D3DPTEXTURECAPS_COLORKEYBLEND 0x00001000 + +#define D3DPTFILTERCAPS_NEAREST 0x00000001 +#define D3DPTFILTERCAPS_LINEAR 0x00000002 +#define D3DPTFILTERCAPS_MIPNEAREST 0x00000004 +#define D3DPTFILTERCAPS_MIPLINEAR 0x00000008 +#define D3DPTFILTERCAPS_LINEARMIPNEAREST 0x00000010 +#define D3DPTFILTERCAPS_LINEARMIPLINEAR 0x00000020 +/* yes - missing numbers */ +#define D3DPTFILTERCAPS_MINFPOINT 0x00000100 +#define D3DPTFILTERCAPS_MINFLINEAR 0x00000200 +#define D3DPTFILTERCAPS_MINFANISOTROPIC 0x00000400 +/* yes - missing numbers */ +#define D3DPTFILTERCAPS_MIPFPOINT 0x00010000 +#define D3DPTFILTERCAPS_MIPFLINEAR 0x00020000 +/* yes - missing numbers */ +#define D3DPTFILTERCAPS_MAGFPOINT 0x01000000 +#define D3DPTFILTERCAPS_MAGFLINEAR 0x02000000 +#define D3DPTFILTERCAPS_MAGFANISOTROPIC 0x04000000 +#define D3DPTFILTERCAPS_MAGFAFLATCUBIC 0x08000000 +#define D3DPTFILTERCAPS_MAGFGAUSSIANCUBIC 0x10000000 + +#define D3DPTBLENDCAPS_DECAL 0x00000001 +#define D3DPTBLENDCAPS_MODULATE 0x00000002 +#define D3DPTBLENDCAPS_DECALALPHA 0x00000004 +#define D3DPTBLENDCAPS_MODULATEALPHA 0x00000008 +#define D3DPTBLENDCAPS_DECALMASK 0x00000010 +#define D3DPTBLENDCAPS_MODULATEMASK 0x00000020 +#define D3DPTBLENDCAPS_COPY 0x00000040 +#define D3DPTBLENDCAPS_ADD 0x00000080 + +#define D3DPTADDRESSCAPS_WRAP 0x00000001 +#define D3DPTADDRESSCAPS_MIRROR 0x00000002 +#define D3DPTADDRESSCAPS_CLAMP 0x00000004 +#define D3DPTADDRESSCAPS_BORDER 0x00000008 +#define D3DPTADDRESSCAPS_INDEPENDENTUV 0x00000010 + + +typedef struct _D3DDeviceDesc { + DWORD dwSize; + DWORD dwFlags; + D3DCOLORMODEL dcmColorModel; + DWORD dwDevCaps; + D3DTRANSFORMCAPS dtcTransformCaps; + BOOL bClipping; + D3DLIGHTINGCAPS dlcLightingCaps; + D3DPRIMCAPS dpcLineCaps; + D3DPRIMCAPS dpcTriCaps; + DWORD dwDeviceRenderBitDepth; + DWORD dwDeviceZBufferBitDepth; + DWORD dwMaxBufferSize; + DWORD dwMaxVertexCount; + + DWORD dwMinTextureWidth,dwMinTextureHeight; + DWORD dwMaxTextureWidth,dwMaxTextureHeight; + DWORD dwMinStippleWidth,dwMaxStippleWidth; + DWORD dwMinStippleHeight,dwMaxStippleHeight; + + DWORD dwMaxTextureRepeat; + DWORD dwMaxTextureAspectRatio; + DWORD dwMaxAnisotropy; + + D3DVALUE dvGuardBandLeft; + D3DVALUE dvGuardBandTop; + D3DVALUE dvGuardBandRight; + D3DVALUE dvGuardBandBottom; + + D3DVALUE dvExtentsAdjust; + DWORD dwStencilCaps; + + DWORD dwFVFCaps; + DWORD dwTextureOpCaps; + WORD wMaxTextureBlendStages; + WORD wMaxSimultaneousTextures; +} D3DDEVICEDESC,*LPD3DDEVICEDESC; +#define D3DDEVICEDESCSIZE (sizeof(D3DDEVICEDESC)) + +typedef struct _D3DDeviceDesc7 { + DWORD dwDevCaps; + D3DPRIMCAPS dpcLineCaps; + D3DPRIMCAPS dpcTriCaps; + DWORD dwDeviceRenderBitDepth; + DWORD dwDeviceZBufferBitDepth; + + DWORD dwMinTextureWidth, dwMinTextureHeight; + DWORD dwMaxTextureWidth, dwMaxTextureHeight; + + DWORD dwMaxTextureRepeat; + DWORD dwMaxTextureAspectRatio; + DWORD dwMaxAnisotropy; + + D3DVALUE dvGuardBandLeft; + D3DVALUE dvGuardBandTop; + D3DVALUE dvGuardBandRight; + D3DVALUE dvGuardBandBottom; + + D3DVALUE dvExtentsAdjust; + DWORD dwStencilCaps; + DWORD dwFVFCaps; + DWORD dwTextureOpCaps; + WORD wMaxTextureBlendStages; + WORD wMaxSimultaneousTextures; + + DWORD dwMaxActiveLights; + D3DVALUE dvMaxVertexW; + GUID deviceGUID; + + WORD wMaxUserClipPlanes; + WORD wMaxVertexBlendMatrices; + + DWORD dwVertexProcessingCaps; + + DWORD dwReserved1; + DWORD dwReserved2; + DWORD dwReserved3; + DWORD dwReserved4; +} D3DDEVICEDESC7, *LPD3DDEVICEDESC7; +#define D3DDEVICEDESC7SIZE (sizeof(D3DDEVICEDESC7)) + +#define D3DDD_COLORMODEL 0x00000001 +#define D3DDD_DEVCAPS 0x00000002 +#define D3DDD_TRANSFORMCAPS 0x00000004 +#define D3DDD_LIGHTINGCAPS 0x00000008 +#define D3DDD_BCLIPPING 0x00000010 +#define D3DDD_LINECAPS 0x00000020 +#define D3DDD_TRICAPS 0x00000040 +#define D3DDD_DEVICERENDERBITDEPTH 0x00000080 +#define D3DDD_DEVICEZBUFFERBITDEPTH 0x00000100 +#define D3DDD_MAXBUFFERSIZE 0x00000200 +#define D3DDD_MAXVERTEXCOUNT 0x00000400 + +#define D3DDEVCAPS_FLOATTLVERTEX 0x00000001 +#define D3DDEVCAPS_SORTINCREASINGZ 0x00000002 +#define D3DDEVCAPS_SORTDECREASINGZ 0X00000004 +#define D3DDEVCAPS_SORTEXACT 0x00000008 +#define D3DDEVCAPS_EXECUTESYSTEMMEMORY 0x00000010 +#define D3DDEVCAPS_EXECUTEVIDEOMEMORY 0x00000020 +#define D3DDEVCAPS_TLVERTEXSYSTEMMEMORY 0x00000040 +#define D3DDEVCAPS_TLVERTEXVIDEOMEMORY 0x00000080 +#define D3DDEVCAPS_TEXTURESYSTEMMEMORY 0x00000100 +#define D3DDEVCAPS_TEXTUREVIDEOMEMORY 0x00000200 +#define D3DDEVCAPS_DRAWPRIMTLVERTEX 0x00000400 +#define D3DDEVCAPS_CANRENDERAFTERFLIP 0x00000800 +#define D3DDEVCAPS_TEXTURENONLOCALVIDMEM 0x00001000 +#define D3DDEVCAPS_DRAWPRIMITIVES2 0x00002000 +#define D3DDEVCAPS_SEPARATETEXTUREMEMORIES 0x00004000 +#define D3DDEVCAPS_DRAWPRIMITIVES2EX 0x00008000 +#define D3DDEVCAPS_HWTRANSFORMANDLIGHT 0x00010000 +#define D3DDEVCAPS_CANBLTSYSTONONLOCAL 0x00020000 +#define D3DDEVCAPS_HWRASTERIZATION 0x00080000 + +#define D3DSTENCILCAPS_KEEP 0x00000001 +#define D3DSTENCILCAPS_ZERO 0x00000002 +#define D3DSTENCILCAPS_REPLACE 0x00000004 +#define D3DSTENCILCAPS_INCRSAT 0x00000008 +#define D3DSTENCILCAPS_DECRSAT 0x00000010 +#define D3DSTENCILCAPS_INVERT 0x00000020 +#define D3DSTENCILCAPS_INCR 0x00000040 +#define D3DSTENCILCAPS_DECR 0x00000080 + +#define D3DTEXOPCAPS_DISABLE 0x00000001 +#define D3DTEXOPCAPS_SELECTARG1 0x00000002 +#define D3DTEXOPCAPS_SELECTARG2 0x00000004 +#define D3DTEXOPCAPS_MODULATE 0x00000008 +#define D3DTEXOPCAPS_MODULATE2X 0x00000010 +#define D3DTEXOPCAPS_MODULATE4X 0x00000020 +#define D3DTEXOPCAPS_ADD 0x00000040 +#define D3DTEXOPCAPS_ADDSIGNED 0x00000080 +#define D3DTEXOPCAPS_ADDSIGNED2X 0x00000100 +#define D3DTEXOPCAPS_SUBTRACT 0x00000200 +#define D3DTEXOPCAPS_ADDSMOOTH 0x00000400 +#define D3DTEXOPCAPS_BLENDDIFFUSEALPHA 0x00000800 +#define D3DTEXOPCAPS_BLENDTEXTUREALPHA 0x00001000 +#define D3DTEXOPCAPS_BLENDFACTORALPHA 0x00002000 +#define D3DTEXOPCAPS_BLENDTEXTUREALPHAPM 0x00004000 +#define D3DTEXOPCAPS_BLENDCURRENTALPHA 0x00008000 +#define D3DTEXOPCAPS_PREMODULATE 0x00010000 +#define D3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR 0x00020000 +#define D3DTEXOPCAPS_MODULATECOLOR_ADDALPHA 0x00040000 +#define D3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR 0x00080000 +#define D3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA 0x00100000 +#define D3DTEXOPCAPS_BUMPENVMAP 0x00200000 +#define D3DTEXOPCAPS_BUMPENVMAPLUMINANCE 0x00400000 +#define D3DTEXOPCAPS_DOTPRODUCT3 0x00800000 + +#define D3DFVFCAPS_TEXCOORDCOUNTMASK 0x0000FFFF +#define D3DFVFCAPS_DONOTSTRIPELEMENTS 0x00080000 + +#define D3DVTXPCAPS_TEXGEN 0x00000001 +#define D3DVTXPCAPS_MATERIALSOURCE7 0x00000002 +#define D3DVTXPCAPS_VERTEXFOG 0x00000004 +#define D3DVTXPCAPS_DIRECTIONALLIGHTS 0x00000008 +#define D3DVTXPCAPS_POSITIONALLIGHTS 0x00000010 +#define D3DVTXPCAPS_LOCALVIEWER 0x00000020 + +typedef HRESULT (CALLBACK *LPD3DENUMDEVICESCALLBACK)(LPGUID lpGuid,LPSTR lpDeviceDescription,LPSTR lpDeviceName,LPD3DDEVICEDESC,LPD3DDEVICEDESC,LPVOID); +typedef HRESULT (CALLBACK *LPD3DENUMDEVICESCALLBACK7)(LPSTR lpDeviceDescription, LPSTR lpDeviceName, LPD3DDEVICEDESC7, LPVOID); + +#define D3DFDS_COLORMODEL 0x00000001 +#define D3DFDS_GUID 0x00000002 +#define D3DFDS_HARDWARE 0x00000004 +#define D3DFDS_TRIANGLES 0x00000008 +#define D3DFDS_LINES 0x00000010 +#define D3DFDS_MISCCAPS 0x00000020 +#define D3DFDS_RASTERCAPS 0x00000040 +#define D3DFDS_ZCMPCAPS 0x00000080 +#define D3DFDS_ALPHACMPCAPS 0x00000100 +#define D3DFDS_SRCBLENDCAPS 0x00000200 +#define D3DFDS_DSTBLENDCAPS 0x00000400 +#define D3DFDS_SHADECAPS 0x00000800 +#define D3DFDS_TEXTURECAPS 0x00001000 +#define D3DFDS_TEXTUREFILTERCAPS 0x00002000 +#define D3DFDS_TEXTUREBLENDCAPS 0x00004000 +#define D3DFDS_TEXTUREADDRESSCAPS 0x00008000 + +typedef struct _D3DFINDDEVICESEARCH { + DWORD dwSize; + DWORD dwFlags; + BOOL bHardware; + D3DCOLORMODEL dcmColorModel; + GUID guid; + DWORD dwCaps; + D3DPRIMCAPS dpcPrimCaps; +} D3DFINDDEVICESEARCH,*LPD3DFINDDEVICESEARCH; + +typedef struct _D3DFINDDEVICERESULT { + DWORD dwSize; + GUID guid; + D3DDEVICEDESC ddHwDesc; + D3DDEVICEDESC ddSwDesc; +} D3DFINDDEVICERESULT,*LPD3DFINDDEVICERESULT; + +typedef struct _D3DExecuteBufferDesc { + DWORD dwSize; + DWORD dwFlags; + DWORD dwCaps; + DWORD dwBufferSize; + LPVOID lpData; +} D3DEXECUTEBUFFERDESC, *LPD3DEXECUTEBUFFERDESC; + +#define D3DDEB_BUFSIZE 0x00000001 +#define D3DDEB_CAPS 0x00000002 +#define D3DDEB_LPDATA 0x00000004 + +#define D3DDEBCAPS_SYSTEMMEMORY 0x00000001 +#define D3DDEBCAPS_VIDEOMEMORY 0x00000002 +#define D3DDEBCAPS_MEM (D3DDEBCAPS_SYSTEMMEMORY|D3DDEBCAPS_VIDEOMEMORY) /* = 0x3 */ + +typedef struct _D3DDEVINFO_TEXTUREMANAGER { + BOOL bThrashing; + DWORD dwApproxBytesDownloaded; + DWORD dwNumEvicts; + DWORD dwNumVidCreates; + DWORD dwNumTexturesUsed; + DWORD dwNumUsedTexInVid; + DWORD dwWorkingSet; + DWORD dwWorkingSetBytes; + DWORD dwTotalManaged; + DWORD dwTotalBytes; + DWORD dwLastPri; +} D3DDEVINFO_TEXTUREMANAGER, *LPD3DDEVINFO_TEXTUREMANAGER; + +typedef struct _D3DDEVINFO_TEXTURING { + DWORD dwNumLoads; + DWORD dwApproxBytesLoaded; + DWORD dwNumPreLoads; + DWORD dwNumSet; + DWORD dwNumCreates; + DWORD dwNumDestroys; + DWORD dwNumSetPriorities; + DWORD dwNumSetLODs; + DWORD dwNumLocks; + DWORD dwNumGetDCs; +} D3DDEVINFO_TEXTURING, *LPD3DDEVINFO_TEXTURING; + + + +#endif diff --git a/include/d3dtypes.h b/include/d3dtypes.h new file mode 100644 index 0000000..f933550 --- /dev/null +++ b/include/d3dtypes.h @@ -0,0 +1,1348 @@ +/* + * Copyright (C) 2000 Peter Hunnisett + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * 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. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* FIXME: Need to add C++ code for certain structs for headers - this is going to be a problem + if WINE continues to only use C code - I suppose that we could always inline in + the header file to get around that little problem... */ +/* FIXME: We need to implement versioning on everything directx 5 and up if these headers + are going to be generically useful for directx stuff */ + +#ifndef __WINE_D3DTYPES_H +#define __WINE_D3DTYPES_H + +#include +#include + +#define D3DVALP(val, prec) ((float)(val)) +#define D3DVAL(val) ((float)(val)) +typedef float D3DVALUE,*LPD3DVALUE; +#define D3DDivide(a, b) (float)((double) (a) / (double) (b)) +#define D3DMultiply(a, b) ((a) * (b)) + +typedef LONG D3DFIXED; + + +#ifndef RGB_MAKE +#define CI_GETALPHA(ci) ((ci) >> 24) +#define CI_GETINDEX(ci) (((ci) >> 8) & 0xffff) +#define CI_GETFRACTION(ci) ((ci) & 0xff) +#define CI_ROUNDINDEX(ci) CI_GETINDEX((ci) + 0x80) +#define CI_MASKALPHA(ci) ((ci) & 0xffffff) +#define CI_MAKE(a, i, f) (((a) << 24) | ((i) << 8) | (f)) + +#define RGBA_GETALPHA(rgb) ((rgb) >> 24) +#define RGBA_GETRED(rgb) (((rgb) >> 16) & 0xff) +#define RGBA_GETGREEN(rgb) (((rgb) >> 8) & 0xff) +#define RGBA_GETBLUE(rgb) ((rgb) & 0xff) +#define RGBA_MAKE(r, g, b, a) ((D3DCOLOR) (((a) << 24) | ((r) << 16) | ((g) << 8) | (b))) + +#define D3DRGB(r, g, b) \ + (0xff000000L | ( ((long)((r) * 255)) << 16) | (((long)((g) * 255)) << 8) | (long)((b) * 255)) +#define D3DRGBA(r, g, b, a) \ + ( (((long)((a) * 255)) << 24) | (((long)((r) * 255)) << 16) \ + | (((long)((g) * 255)) << 8) | (long)((b) * 255) \ + ) + +#define RGB_GETRED(rgb) (((rgb) >> 16) & 0xff) +#define RGB_GETGREEN(rgb) (((rgb) >> 8) & 0xff) +#define RGB_GETBLUE(rgb) ((rgb) & 0xff) +#define RGBA_SETALPHA(rgba, x) (((x) << 24) | ((rgba) & 0x00ffffff)) +#define RGB_MAKE(r, g, b) ((D3DCOLOR) (((r) << 16) | ((g) << 8) | (b))) +#define RGBA_TORGB(rgba) ((D3DCOLOR) ((rgba) & 0xffffff)) +#define RGB_TORGBA(rgb) ((D3DCOLOR) ((rgb) | 0xff000000)) + +#endif + +#define D3DENUMRET_CANCEL DDENUMRET_CANCEL +#define D3DENUMRET_OK DDENUMRET_OK + +typedef HRESULT (CALLBACK *LPD3DVALIDATECALLBACK)(LPVOID lpUserArg, DWORD dwOffset); +typedef HRESULT (CALLBACK *LPD3DENUMTEXTUREFORMATSCALLBACK)(LPDDSURFACEDESC lpDdsd, LPVOID lpContext); +typedef HRESULT (CALLBACK *LPD3DENUMPIXELFORMATSCALLBACK)(LPDDPIXELFORMAT lpDDPixFmt, LPVOID lpContext); + +#ifndef D3DCOLOR_DEFINED +typedef DWORD D3DCOLOR, *LPD3DCOLOR; +#define D3DCOLOR_DEFINED +#endif + +typedef DWORD D3DMATERIALHANDLE, *LPD3DMATERIALHANDLE; +typedef DWORD D3DTEXTUREHANDLE, *LPD3DTEXTUREHANDLE; +typedef DWORD D3DMATRIXHANDLE, *LPD3DMATRIXHANDLE; + +typedef struct _D3DCOLORVALUE { + union { + D3DVALUE r; + D3DVALUE dvR; + } DUMMYUNIONNAME1; + union { + D3DVALUE g; + D3DVALUE dvG; + } DUMMYUNIONNAME2; + union { + D3DVALUE b; + D3DVALUE dvB; + } DUMMYUNIONNAME3; + union { + D3DVALUE a; + D3DVALUE dvA; + } DUMMYUNIONNAME4; +} D3DCOLORVALUE,*LPD3DCOLORVALUE; + +typedef struct _D3DRECT { + union { + LONG x1; + LONG lX1; + } DUMMYUNIONNAME1; + union { + LONG y1; + LONG lY1; + } DUMMYUNIONNAME2; + union { + LONG x2; + LONG lX2; + } DUMMYUNIONNAME3; + union { + LONG y2; + LONG lY2; + } DUMMYUNIONNAME4; +} D3DRECT, *LPD3DRECT; + +typedef struct _D3DVECTOR { + union { + D3DVALUE x; + D3DVALUE dvX; + } DUMMYUNIONNAME1; + union { + D3DVALUE y; + D3DVALUE dvY; + } DUMMYUNIONNAME2; + union { + D3DVALUE z; + D3DVALUE dvZ; + } DUMMYUNIONNAME3; +#if defined(__cplusplus) && defined(D3D_OVERLOADS) + /* the definitions for these methods are in d3dvec.inl */ +public: + /*** constructors ***/ + _D3DVECTOR() {} + _D3DVECTOR(D3DVALUE f); + _D3DVECTOR(D3DVALUE _x, D3DVALUE _y, D3DVALUE _z); + _D3DVECTOR(const D3DVALUE f[3]); + + /*** assignment operators ***/ + _D3DVECTOR& operator += (const _D3DVECTOR& v); + _D3DVECTOR& operator -= (const _D3DVECTOR& v); + _D3DVECTOR& operator *= (const _D3DVECTOR& v); + _D3DVECTOR& operator /= (const _D3DVECTOR& v); + _D3DVECTOR& operator *= (D3DVALUE s); + _D3DVECTOR& operator /= (D3DVALUE s); + + /*** unary operators ***/ + friend _D3DVECTOR operator + (const _D3DVECTOR& v); + friend _D3DVECTOR operator - (const _D3DVECTOR& v); + + /*** binary operators ***/ + friend _D3DVECTOR operator + (const _D3DVECTOR& v1, const _D3DVECTOR& v2); + friend _D3DVECTOR operator - (const _D3DVECTOR& v1, const _D3DVECTOR& v2); + + friend _D3DVECTOR operator * (const _D3DVECTOR& v, D3DVALUE s); + friend _D3DVECTOR operator * (D3DVALUE s, const _D3DVECTOR& v); + friend _D3DVECTOR operator / (const _D3DVECTOR& v, D3DVALUE s); + + friend D3DVALUE SquareMagnitude(const _D3DVECTOR& v); + friend D3DVALUE Magnitude(const _D3DVECTOR& v); + + friend _D3DVECTOR Normalize(const _D3DVECTOR& v); + + friend D3DVALUE DotProduct(const _D3DVECTOR& v1, const _D3DVECTOR& v2); + friend _D3DVECTOR CrossProduct(const _D3DVECTOR& v1, const _D3DVECTOR& v2); +#endif +} D3DVECTOR,*LPD3DVECTOR; + +typedef struct _D3DHVERTEX { + DWORD dwFlags; + union { + D3DVALUE hx; + D3DVALUE dvHX; + } DUMMYUNIONNAME1; + union { + D3DVALUE hy; + D3DVALUE dvHY; + } DUMMYUNIONNAME2; + union { + D3DVALUE hz; + D3DVALUE dvHZ; + } DUMMYUNIONNAME3; +} D3DHVERTEX, *LPD3DHVERTEX; + +/* + * Transformed/lit vertices + */ +typedef struct _D3DTLVERTEX { + union { + D3DVALUE sx; + D3DVALUE dvSX; + } DUMMYUNIONNAME1; + union { + D3DVALUE sy; + D3DVALUE dvSY; + } DUMMYUNIONNAME2; + union { + D3DVALUE sz; + D3DVALUE dvSZ; + } DUMMYUNIONNAME3; + union { + D3DVALUE rhw; + D3DVALUE dvRHW; + } DUMMYUNIONNAME4; + union { + D3DCOLOR color; + D3DCOLOR dcColor; + } DUMMYUNIONNAME5; + union { + D3DCOLOR specular; + D3DCOLOR dcSpecular; + } DUMMYUNIONNAME6; + union { + D3DVALUE tu; + D3DVALUE dvTU; + } DUMMYUNIONNAME7; + union { + D3DVALUE tv; + D3DVALUE dvTV; + } DUMMYUNIONNAME8; +#if defined(__cplusplus) && defined(D3D_OVERLOADS) +public: + _D3DTLVERTEX() {} + _D3DTLVERTEX(const D3DVECTOR& v, float _rhw, D3DCOLOR _color, D3DCOLOR _specular, float _tu, float _tv) { + sx = v.x; sy = v.y; sz = v.z; rhw = _rhw; + color = _color; specular = _specular; + tu = _tu; tv = _tv; + } +#endif +} D3DTLVERTEX, *LPD3DTLVERTEX; + +typedef struct _D3DLVERTEX { + union { + D3DVALUE x; + D3DVALUE dvX; + } DUMMYUNIONNAME1; + union { + D3DVALUE y; + D3DVALUE dvY; + } DUMMYUNIONNAME2; + union { + D3DVALUE z; + D3DVALUE dvZ; + } DUMMYUNIONNAME3; + DWORD dwReserved; + union { + D3DCOLOR color; + D3DCOLOR dcColor; + } DUMMYUNIONNAME4; + union { + D3DCOLOR specular; + D3DCOLOR dcSpecular; + } DUMMYUNIONNAME5; + union { + D3DVALUE tu; + D3DVALUE dvTU; + } DUMMYUNIONNAME6; + union { + D3DVALUE tv; + D3DVALUE dvTV; + } DUMMYUNIONNAME7; +} D3DLVERTEX, *LPD3DLVERTEX; + +typedef struct _D3DVERTEX { + union { + D3DVALUE x; + D3DVALUE dvX; + } DUMMYUNIONNAME1; + union { + D3DVALUE y; + D3DVALUE dvY; + } DUMMYUNIONNAME2; + union { + D3DVALUE z; + D3DVALUE dvZ; + } DUMMYUNIONNAME3; + union { + D3DVALUE nx; + D3DVALUE dvNX; + } DUMMYUNIONNAME4; + union { + D3DVALUE ny; + D3DVALUE dvNY; + } DUMMYUNIONNAME5; + union { + D3DVALUE nz; + D3DVALUE dvNZ; + } DUMMYUNIONNAME6; + union { + D3DVALUE tu; + D3DVALUE dvTU; + } DUMMYUNIONNAME7; + union { + D3DVALUE tv; + D3DVALUE dvTV; + } DUMMYUNIONNAME8; +#if defined(__cplusplus) && defined(D3D_OVERLOADS) +public: + _D3DVERTEX() {} + _D3DVERTEX(const D3DVECTOR& v, const D3DVECTOR& n, float _tu, float _tv) { + x = v.x; y = v.y; z = v.z; + nx = n.x; ny = n.y; nz = n.z; + tu = _tu; tv = _tv; + } +#endif +} D3DVERTEX, *LPD3DVERTEX; + +typedef struct _D3DMATRIX { + D3DVALUE _11, _12, _13, _14; + D3DVALUE _21, _22, _23, _24; + D3DVALUE _31, _32, _33, _34; + D3DVALUE _41, _42, _43, _44; +#if defined(__cplusplus) && defined(D3D_OVERLOADS) + _D3DMATRIX() { } + + /* This is different from MS, but avoids anonymous structs. */ + D3DVALUE &operator () (int r, int c) + { return ((D3DVALUE [4][4])&_11)[r][c]; } + const D3DVALUE &operator() (int r, int c) const + { return ((const D3DVALUE [4][4])&_11)[r][c]; } +#endif +} D3DMATRIX, *LPD3DMATRIX; + +#if defined(__cplusplus) && defined(D3D_OVERLOADS) +#include "d3dvec.inl" +#endif + +typedef struct _D3DVIEWPORT { + DWORD dwSize; + DWORD dwX; + DWORD dwY; + DWORD dwWidth; + DWORD dwHeight; + D3DVALUE dvScaleX; + D3DVALUE dvScaleY; + D3DVALUE dvMaxX; + D3DVALUE dvMaxY; + D3DVALUE dvMinZ; + D3DVALUE dvMaxZ; +} D3DVIEWPORT, *LPD3DVIEWPORT; + +typedef struct _D3DVIEWPORT2 { + DWORD dwSize; + DWORD dwX; + DWORD dwY; + DWORD dwWidth; + DWORD dwHeight; + D3DVALUE dvClipX; + D3DVALUE dvClipY; + D3DVALUE dvClipWidth; + D3DVALUE dvClipHeight; + D3DVALUE dvMinZ; + D3DVALUE dvMaxZ; +} D3DVIEWPORT2, *LPD3DVIEWPORT2; + +typedef struct _D3DVIEWPORT7 { + DWORD dwX; + DWORD dwY; + DWORD dwWidth; + DWORD dwHeight; + D3DVALUE dvMinZ; + D3DVALUE dvMaxZ; +} D3DVIEWPORT7, *LPD3DVIEWPORT7; + +#define D3DMAXUSERCLIPPLANES 32 + +#define D3DCLIPPLANE0 (1 << 0) +#define D3DCLIPPLANE1 (1 << 1) +#define D3DCLIPPLANE2 (1 << 2) +#define D3DCLIPPLANE3 (1 << 3) +#define D3DCLIPPLANE4 (1 << 4) +#define D3DCLIPPLANE5 (1 << 5) + +#define D3DCLIP_LEFT 0x00000001 +#define D3DCLIP_RIGHT 0x00000002 +#define D3DCLIP_TOP 0x00000004 +#define D3DCLIP_BOTTOM 0x00000008 +#define D3DCLIP_FRONT 0x00000010 +#define D3DCLIP_BACK 0x00000020 +#define D3DCLIP_GEN0 0x00000040 +#define D3DCLIP_GEN1 0x00000080 +#define D3DCLIP_GEN2 0x00000100 +#define D3DCLIP_GEN3 0x00000200 +#define D3DCLIP_GEN4 0x00000400 +#define D3DCLIP_GEN5 0x00000800 + +#define D3DSTATUS_CLIPUNIONLEFT D3DCLIP_LEFT +#define D3DSTATUS_CLIPUNIONRIGHT D3DCLIP_RIGHT +#define D3DSTATUS_CLIPUNIONTOP D3DCLIP_TOP +#define D3DSTATUS_CLIPUNIONBOTTOM D3DCLIP_BOTTOM +#define D3DSTATUS_CLIPUNIONFRONT D3DCLIP_FRONT +#define D3DSTATUS_CLIPUNIONBACK D3DCLIP_BACK +#define D3DSTATUS_CLIPUNIONGEN0 D3DCLIP_GEN0 +#define D3DSTATUS_CLIPUNIONGEN1 D3DCLIP_GEN1 +#define D3DSTATUS_CLIPUNIONGEN2 D3DCLIP_GEN2 +#define D3DSTATUS_CLIPUNIONGEN3 D3DCLIP_GEN3 +#define D3DSTATUS_CLIPUNIONGEN4 D3DCLIP_GEN4 +#define D3DSTATUS_CLIPUNIONGEN5 D3DCLIP_GEN5 + +#define D3DSTATUS_CLIPINTERSECTIONLEFT 0x00001000 +#define D3DSTATUS_CLIPINTERSECTIONRIGHT 0x00002000 +#define D3DSTATUS_CLIPINTERSECTIONTOP 0x00004000 +#define D3DSTATUS_CLIPINTERSECTIONBOTTOM 0x00008000 +#define D3DSTATUS_CLIPINTERSECTIONFRONT 0x00010000 +#define D3DSTATUS_CLIPINTERSECTIONBACK 0x00020000 +#define D3DSTATUS_CLIPINTERSECTIONGEN0 0x00040000 +#define D3DSTATUS_CLIPINTERSECTIONGEN1 0x00080000 +#define D3DSTATUS_CLIPINTERSECTIONGEN2 0x00100000 +#define D3DSTATUS_CLIPINTERSECTIONGEN3 0x00200000 +#define D3DSTATUS_CLIPINTERSECTIONGEN4 0x00400000 +#define D3DSTATUS_CLIPINTERSECTIONGEN5 0x00800000 +#define D3DSTATUS_ZNOTVISIBLE 0x01000000 + +#define D3DSTATUS_CLIPUNIONALL ( \ + D3DSTATUS_CLIPUNIONLEFT | \ + D3DSTATUS_CLIPUNIONRIGHT | \ + D3DSTATUS_CLIPUNIONTOP | \ + D3DSTATUS_CLIPUNIONBOTTOM | \ + D3DSTATUS_CLIPUNIONFRONT | \ + D3DSTATUS_CLIPUNIONBACK | \ + D3DSTATUS_CLIPUNIONGEN0 | \ + D3DSTATUS_CLIPUNIONGEN1 | \ + D3DSTATUS_CLIPUNIONGEN2 | \ + D3DSTATUS_CLIPUNIONGEN3 | \ + D3DSTATUS_CLIPUNIONGEN4 | \ + D3DSTATUS_CLIPUNIONGEN5 \ + ) + +#define D3DSTATUS_CLIPINTERSECTIONALL ( \ + D3DSTATUS_CLIPINTERSECTIONLEFT | \ + D3DSTATUS_CLIPINTERSECTIONRIGHT | \ + D3DSTATUS_CLIPINTERSECTIONTOP | \ + D3DSTATUS_CLIPINTERSECTIONBOTTOM | \ + D3DSTATUS_CLIPINTERSECTIONFRONT | \ + D3DSTATUS_CLIPINTERSECTIONBACK | \ + D3DSTATUS_CLIPINTERSECTIONGEN0 | \ + D3DSTATUS_CLIPINTERSECTIONGEN1 | \ + D3DSTATUS_CLIPINTERSECTIONGEN2 | \ + D3DSTATUS_CLIPINTERSECTIONGEN3 | \ + D3DSTATUS_CLIPINTERSECTIONGEN4 | \ + D3DSTATUS_CLIPINTERSECTIONGEN5 \ + ) + +#define D3DSTATUS_DEFAULT ( \ + D3DSTATUS_CLIPINTERSECTIONALL | \ + D3DSTATUS_ZNOTVISIBLE) + +#define D3DTRANSFORM_CLIPPED 0x00000001 +#define D3DTRANSFORM_UNCLIPPED 0x00000002 + +typedef struct _D3DTRANSFORMDATA { + DWORD dwSize; + LPVOID lpIn; + DWORD dwInSize; + LPVOID lpOut; + DWORD dwOutSize; + LPD3DHVERTEX lpHOut; + DWORD dwClip; + DWORD dwClipIntersection; + DWORD dwClipUnion; + D3DRECT drExtent; +} D3DTRANSFORMDATA, *LPD3DTRANSFORMDATA; + +typedef struct _D3DLIGHTINGELEMENT { + D3DVECTOR dvPosition; + D3DVECTOR dvNormal; +} D3DLIGHTINGELEMENT, *LPD3DLIGHTINGELEMENT; + +typedef struct _D3DMATERIAL { + DWORD dwSize; + union { + D3DCOLORVALUE diffuse; + D3DCOLORVALUE dcvDiffuse; + } DUMMYUNIONNAME; + union { + D3DCOLORVALUE ambient; + D3DCOLORVALUE dcvAmbient; + } DUMMYUNIONNAME1; + union { + D3DCOLORVALUE specular; + D3DCOLORVALUE dcvSpecular; + } DUMMYUNIONNAME2; + union { + D3DCOLORVALUE emissive; + D3DCOLORVALUE dcvEmissive; + } DUMMYUNIONNAME3; + union { + D3DVALUE power; + D3DVALUE dvPower; + } DUMMYUNIONNAME4; + D3DTEXTUREHANDLE hTexture; + DWORD dwRampSize; +} D3DMATERIAL, *LPD3DMATERIAL; + +typedef struct _D3DMATERIAL7 { + union { + D3DCOLORVALUE diffuse; + D3DCOLORVALUE dcvDiffuse; + } DUMMYUNIONNAME; + union { + D3DCOLORVALUE ambient; + D3DCOLORVALUE dcvAmbient; + } DUMMYUNIONNAME1; + union { + D3DCOLORVALUE specular; + D3DCOLORVALUE dcvSpecular; + } DUMMYUNIONNAME2; + union { + D3DCOLORVALUE emissive; + D3DCOLORVALUE dcvEmissive; + } DUMMYUNIONNAME3; + union { + D3DVALUE power; + D3DVALUE dvPower; + } DUMMYUNIONNAME4; +} D3DMATERIAL7, *LPD3DMATERIAL7; + +typedef enum { + D3DLIGHT_POINT = 1, + D3DLIGHT_SPOT = 2, + D3DLIGHT_DIRECTIONAL = 3, + D3DLIGHT_PARALLELPOINT = 4, + D3DLIGHT_GLSPOT = 5, + D3DLIGHT_FORCE_DWORD = 0x7fffffff +} D3DLIGHTTYPE; + +typedef struct _D3DLIGHT { + DWORD dwSize; + D3DLIGHTTYPE dltType; + D3DCOLORVALUE dcvColor; + D3DVECTOR dvPosition; + D3DVECTOR dvDirection; + D3DVALUE dvRange; + D3DVALUE dvFalloff; + D3DVALUE dvAttenuation0; + D3DVALUE dvAttenuation1; + D3DVALUE dvAttenuation2; + D3DVALUE dvTheta; + D3DVALUE dvPhi; +} D3DLIGHT,*LPD3DLIGHT; + +typedef struct _D3DLIGHT7 { + D3DLIGHTTYPE dltType; + D3DCOLORVALUE dcvDiffuse; + D3DCOLORVALUE dcvSpecular; + D3DCOLORVALUE dcvAmbient; + D3DVECTOR dvPosition; + D3DVECTOR dvDirection; + D3DVALUE dvRange; + D3DVALUE dvFalloff; + D3DVALUE dvAttenuation0; + D3DVALUE dvAttenuation1; + D3DVALUE dvAttenuation2; + D3DVALUE dvTheta; + D3DVALUE dvPhi; +} D3DLIGHT7, *LPD3DLIGHT7; + +#define D3DLIGHT_ACTIVE 0x00000001 +#define D3DLIGHT_NO_SPECULAR 0x00000002 +#define D3DLIGHT_ALL (D3DLIGHT_ACTIVE | D3DLIGHT_NO_SPECULAR) /* 0x3 */ + +#define D3DLIGHT_RANGE_MAX ((float)sqrt(FLT_MAX)) + +typedef struct _D3DLIGHT2 { + DWORD dwSize; + D3DLIGHTTYPE dltType; + D3DCOLORVALUE dcvColor; + D3DVECTOR dvPosition; + D3DVECTOR dvDirection; + D3DVALUE dvRange; + D3DVALUE dvFalloff; + D3DVALUE dvAttenuation0; + D3DVALUE dvAttenuation1; + D3DVALUE dvAttenuation2; + D3DVALUE dvTheta; + D3DVALUE dvPhi; + DWORD dwFlags; +} D3DLIGHT2, *LPD3DLIGHT2; + +typedef struct _D3DLIGHTDATA { + DWORD dwSize; + LPD3DLIGHTINGELEMENT lpIn; + DWORD dwInSize; + LPD3DTLVERTEX lpOut; + DWORD dwOutSize; +} D3DLIGHTDATA, *LPD3DLIGHTDATA; + +#define D3DCOLOR_MONO 1 +#define D3DCOLOR_RGB 2 + +typedef DWORD D3DCOLORMODEL; + + +#define D3DCLEAR_TARGET 0x00000001 +#define D3DCLEAR_ZBUFFER 0x00000002 +#define D3DCLEAR_STENCIL 0x00000004 + +typedef enum _D3DOPCODE { + D3DOP_POINT = 1, + D3DOP_LINE = 2, + D3DOP_TRIANGLE = 3, + D3DOP_MATRIXLOAD = 4, + D3DOP_MATRIXMULTIPLY = 5, + D3DOP_STATETRANSFORM = 6, + D3DOP_STATELIGHT = 7, + D3DOP_STATERENDER = 8, + D3DOP_PROCESSVERTICES = 9, + D3DOP_TEXTURELOAD = 10, + D3DOP_EXIT = 11, + D3DOP_BRANCHFORWARD = 12, + D3DOP_SPAN = 13, + D3DOP_SETSTATUS = 14, + + D3DOP_FORCE_DWORD = 0x7fffffff +} D3DOPCODE; + +typedef struct _D3DINSTRUCTION { + BYTE bOpcode; + BYTE bSize; + WORD wCount; +} D3DINSTRUCTION, *LPD3DINSTRUCTION; + +typedef struct _D3DTEXTURELOAD { + D3DTEXTUREHANDLE hDestTexture; + D3DTEXTUREHANDLE hSrcTexture; +} D3DTEXTURELOAD, *LPD3DTEXTURELOAD; + +typedef struct _D3DPICKRECORD { + BYTE bOpcode; + BYTE bPad; + DWORD dwOffset; + D3DVALUE dvZ; +} D3DPICKRECORD, *LPD3DPICKRECORD; + +typedef enum { + D3DSHADE_FLAT = 1, + D3DSHADE_GOURAUD = 2, + D3DSHADE_PHONG = 3, + D3DSHADE_FORCE_DWORD = 0x7fffffff +} D3DSHADEMODE; + +typedef enum { + D3DFILL_POINT = 1, + D3DFILL_WIREFRAME = 2, + D3DFILL_SOLID = 3, + D3DFILL_FORCE_DWORD = 0x7fffffff +} D3DFILLMODE; + +typedef struct _D3DLINEPATTERN { + WORD wRepeatFactor; + WORD wLinePattern; +} D3DLINEPATTERN; + +typedef enum { + D3DFILTER_NEAREST = 1, + D3DFILTER_LINEAR = 2, + D3DFILTER_MIPNEAREST = 3, + D3DFILTER_MIPLINEAR = 4, + D3DFILTER_LINEARMIPNEAREST = 5, + D3DFILTER_LINEARMIPLINEAR = 6, + D3DFILTER_FORCE_DWORD = 0x7fffffff +} D3DTEXTUREFILTER; + +typedef enum { + 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_FORCE_DWORD = 0x7fffffff +} D3DBLEND; + +typedef enum { + D3DTBLEND_DECAL = 1, + D3DTBLEND_MODULATE = 2, + D3DTBLEND_DECALALPHA = 3, + D3DTBLEND_MODULATEALPHA = 4, + D3DTBLEND_DECALMASK = 5, + D3DTBLEND_MODULATEMASK = 6, + D3DTBLEND_COPY = 7, + D3DTBLEND_ADD = 8, + D3DTBLEND_FORCE_DWORD = 0x7fffffff +} D3DTEXTUREBLEND; + +typedef enum _D3DTEXTUREADDRESS { + D3DTADDRESS_WRAP = 1, + D3DTADDRESS_MIRROR = 2, + D3DTADDRESS_CLAMP = 3, + D3DTADDRESS_BORDER = 4, + D3DTADDRESS_FORCE_DWORD = 0x7fffffff +} D3DTEXTUREADDRESS; + +typedef enum { + D3DCULL_NONE = 1, + D3DCULL_CW = 2, + D3DCULL_CCW = 3, + D3DCULL_FORCE_DWORD = 0x7fffffff +} D3DCULL; + +typedef enum { + 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 = 0x7fffffff +} D3DCMPFUNC; + +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 _D3DFOGMODE { + D3DFOG_NONE = 0, + D3DFOG_EXP = 1, + D3DFOG_EXP2 = 2, + D3DFOG_LINEAR = 3, + D3DFOG_FORCE_DWORD = 0x7fffffff +} D3DFOGMODE; + +typedef enum _D3DZBUFFERTYPE { + D3DZB_FALSE = 0, + D3DZB_TRUE = 1, + D3DZB_USEW = 2, + D3DZB_FORCE_DWORD = 0x7fffffff +} D3DZBUFFERTYPE; + +typedef enum _D3DANTIALIASMODE { + D3DANTIALIAS_NONE = 0, + D3DANTIALIAS_SORTDEPENDENT = 1, + D3DANTIALIAS_SORTINDEPENDENT = 2, + D3DANTIALIAS_FORCE_DWORD = 0x7fffffff +} D3DANTIALIASMODE; + +typedef enum { + D3DVT_VERTEX = 1, + D3DVT_LVERTEX = 2, + D3DVT_TLVERTEX = 3, + D3DVT_FORCE_DWORD = 0x7fffffff +} D3DVERTEXTYPE; + +typedef enum { + D3DPT_POINTLIST = 1, + D3DPT_LINELIST = 2, + D3DPT_LINESTRIP = 3, + D3DPT_TRIANGLELIST = 4, + D3DPT_TRIANGLESTRIP = 5, + D3DPT_TRIANGLEFAN = 6, + D3DPT_FORCE_DWORD = 0x7fffffff +} D3DPRIMITIVETYPE; + +#define D3DSTATE_OVERRIDE_BIAS 256 + +#define D3DSTATE_OVERRIDE(type) (D3DRENDERSTATETYPE)(((DWORD) (type) + D3DSTATE_OVERRIDE_BIAS)) + +typedef enum _D3DTRANSFORMSTATETYPE { + D3DTRANSFORMSTATE_WORLD = 1, + D3DTRANSFORMSTATE_VIEW = 2, + D3DTRANSFORMSTATE_PROJECTION = 3, + D3DTRANSFORMSTATE_WORLD1 = 4, + D3DTRANSFORMSTATE_WORLD2 = 5, + D3DTRANSFORMSTATE_WORLD3 = 6, + D3DTRANSFORMSTATE_TEXTURE0 = 16, + D3DTRANSFORMSTATE_TEXTURE1 = 17, + D3DTRANSFORMSTATE_TEXTURE2 = 18, + D3DTRANSFORMSTATE_TEXTURE3 = 19, + D3DTRANSFORMSTATE_TEXTURE4 = 20, + D3DTRANSFORMSTATE_TEXTURE5 = 21, + D3DTRANSFORMSTATE_TEXTURE6 = 22, + D3DTRANSFORMSTATE_TEXTURE7 = 23, + D3DTRANSFORMSTATE_FORCE_DWORD = 0x7fffffff +} D3DTRANSFORMSTATETYPE; + +typedef enum { + D3DLIGHTSTATE_MATERIAL = 1, + D3DLIGHTSTATE_AMBIENT = 2, + D3DLIGHTSTATE_COLORMODEL = 3, + D3DLIGHTSTATE_FOGMODE = 4, + D3DLIGHTSTATE_FOGSTART = 5, + D3DLIGHTSTATE_FOGEND = 6, + D3DLIGHTSTATE_FOGDENSITY = 7, + D3DLIGHTSTATE_COLORVERTEX = 8, + D3DLIGHTSTATE_FORCE_DWORD = 0x7fffffff +} D3DLIGHTSTATETYPE; + +typedef enum { + D3DRENDERSTATE_TEXTUREHANDLE = 1, + D3DRENDERSTATE_ANTIALIAS = 2, + D3DRENDERSTATE_TEXTUREADDRESS = 3, + D3DRENDERSTATE_TEXTUREPERSPECTIVE = 4, + D3DRENDERSTATE_WRAPU = 5, + D3DRENDERSTATE_WRAPV = 6, + D3DRENDERSTATE_ZENABLE = 7, + D3DRENDERSTATE_FILLMODE = 8, + D3DRENDERSTATE_SHADEMODE = 9, + D3DRENDERSTATE_LINEPATTERN = 10, + D3DRENDERSTATE_MONOENABLE = 11, + D3DRENDERSTATE_ROP2 = 12, + D3DRENDERSTATE_PLANEMASK = 13, + D3DRENDERSTATE_ZWRITEENABLE = 14, + D3DRENDERSTATE_ALPHATESTENABLE = 15, + D3DRENDERSTATE_LASTPIXEL = 16, + D3DRENDERSTATE_TEXTUREMAG = 17, + D3DRENDERSTATE_TEXTUREMIN = 18, + D3DRENDERSTATE_SRCBLEND = 19, + D3DRENDERSTATE_DESTBLEND = 20, + D3DRENDERSTATE_TEXTUREMAPBLEND = 21, + D3DRENDERSTATE_CULLMODE = 22, + D3DRENDERSTATE_ZFUNC = 23, + D3DRENDERSTATE_ALPHAREF = 24, + D3DRENDERSTATE_ALPHAFUNC = 25, + D3DRENDERSTATE_DITHERENABLE = 26, + D3DRENDERSTATE_ALPHABLENDENABLE = 27, + D3DRENDERSTATE_FOGENABLE = 28, + D3DRENDERSTATE_SPECULARENABLE = 29, + D3DRENDERSTATE_ZVISIBLE = 30, + D3DRENDERSTATE_SUBPIXEL = 31, + D3DRENDERSTATE_SUBPIXELX = 32, + D3DRENDERSTATE_STIPPLEDALPHA = 33, + D3DRENDERSTATE_FOGCOLOR = 34, + D3DRENDERSTATE_FOGTABLEMODE = 35, + D3DRENDERSTATE_FOGTABLESTART = 36, + D3DRENDERSTATE_FOGTABLEEND = 37, + D3DRENDERSTATE_FOGTABLEDENSITY = 38, + D3DRENDERSTATE_FOGSTART = 36, + D3DRENDERSTATE_FOGEND = 37, + D3DRENDERSTATE_FOGDENSITY = 38, + D3DRENDERSTATE_STIPPLEENABLE = 39, + D3DRENDERSTATE_EDGEANTIALIAS = 40, + D3DRENDERSTATE_COLORKEYENABLE = 41, + D3DRENDERSTATE_BORDERCOLOR = 43, + D3DRENDERSTATE_TEXTUREADDRESSU = 44, + D3DRENDERSTATE_TEXTUREADDRESSV = 45, + D3DRENDERSTATE_MIPMAPLODBIAS = 46, + D3DRENDERSTATE_ZBIAS = 47, + D3DRENDERSTATE_RANGEFOGENABLE = 48, + D3DRENDERSTATE_ANISOTROPY = 49, + D3DRENDERSTATE_FLUSHBATCH = 50, + D3DRENDERSTATE_TRANSLUCENTSORTINDEPENDENT = 51, + + D3DRENDERSTATE_STENCILENABLE = 52, + D3DRENDERSTATE_STENCILFAIL = 53, + D3DRENDERSTATE_STENCILZFAIL = 54, + D3DRENDERSTATE_STENCILPASS = 55, + D3DRENDERSTATE_STENCILFUNC = 56, + D3DRENDERSTATE_STENCILREF = 57, + D3DRENDERSTATE_STENCILMASK = 58, + D3DRENDERSTATE_STENCILWRITEMASK = 59, + D3DRENDERSTATE_TEXTUREFACTOR = 60, + + D3DRENDERSTATE_STIPPLEPATTERN00 = 64, + D3DRENDERSTATE_STIPPLEPATTERN01 = 65, + D3DRENDERSTATE_STIPPLEPATTERN02 = 66, + D3DRENDERSTATE_STIPPLEPATTERN03 = 67, + D3DRENDERSTATE_STIPPLEPATTERN04 = 68, + D3DRENDERSTATE_STIPPLEPATTERN05 = 69, + D3DRENDERSTATE_STIPPLEPATTERN06 = 70, + D3DRENDERSTATE_STIPPLEPATTERN07 = 71, + D3DRENDERSTATE_STIPPLEPATTERN08 = 72, + D3DRENDERSTATE_STIPPLEPATTERN09 = 73, + D3DRENDERSTATE_STIPPLEPATTERN10 = 74, + D3DRENDERSTATE_STIPPLEPATTERN11 = 75, + D3DRENDERSTATE_STIPPLEPATTERN12 = 76, + D3DRENDERSTATE_STIPPLEPATTERN13 = 77, + D3DRENDERSTATE_STIPPLEPATTERN14 = 78, + D3DRENDERSTATE_STIPPLEPATTERN15 = 79, + D3DRENDERSTATE_STIPPLEPATTERN16 = 80, + D3DRENDERSTATE_STIPPLEPATTERN17 = 81, + D3DRENDERSTATE_STIPPLEPATTERN18 = 82, + D3DRENDERSTATE_STIPPLEPATTERN19 = 83, + D3DRENDERSTATE_STIPPLEPATTERN20 = 84, + D3DRENDERSTATE_STIPPLEPATTERN21 = 85, + D3DRENDERSTATE_STIPPLEPATTERN22 = 86, + D3DRENDERSTATE_STIPPLEPATTERN23 = 87, + D3DRENDERSTATE_STIPPLEPATTERN24 = 88, + D3DRENDERSTATE_STIPPLEPATTERN25 = 89, + D3DRENDERSTATE_STIPPLEPATTERN26 = 90, + D3DRENDERSTATE_STIPPLEPATTERN27 = 91, + D3DRENDERSTATE_STIPPLEPATTERN28 = 92, + D3DRENDERSTATE_STIPPLEPATTERN29 = 93, + D3DRENDERSTATE_STIPPLEPATTERN30 = 94, + D3DRENDERSTATE_STIPPLEPATTERN31 = 95, + + D3DRENDERSTATE_WRAP0 = 128, + D3DRENDERSTATE_WRAP1 = 129, + D3DRENDERSTATE_WRAP2 = 130, + D3DRENDERSTATE_WRAP3 = 131, + D3DRENDERSTATE_WRAP4 = 132, + D3DRENDERSTATE_WRAP5 = 133, + D3DRENDERSTATE_WRAP6 = 134, + D3DRENDERSTATE_WRAP7 = 135, + D3DRENDERSTATE_CLIPPING = 136, + D3DRENDERSTATE_LIGHTING = 137, + D3DRENDERSTATE_EXTENTS = 138, + D3DRENDERSTATE_AMBIENT = 139, + D3DRENDERSTATE_FOGVERTEXMODE = 140, + D3DRENDERSTATE_COLORVERTEX = 141, + D3DRENDERSTATE_LOCALVIEWER = 142, + D3DRENDERSTATE_NORMALIZENORMALS = 143, + D3DRENDERSTATE_COLORKEYBLENDENABLE = 144, + D3DRENDERSTATE_DIFFUSEMATERIALSOURCE = 145, + D3DRENDERSTATE_SPECULARMATERIALSOURCE = 146, + D3DRENDERSTATE_AMBIENTMATERIALSOURCE = 147, + D3DRENDERSTATE_EMISSIVEMATERIALSOURCE = 148, + D3DRENDERSTATE_VERTEXBLEND = 151, + D3DRENDERSTATE_CLIPPLANEENABLE = 152, + + D3DRENDERSTATE_FORCE_DWORD = 0x7fffffff + + /* FIXME: We have some retired values that are being reused for DirectX 7 */ +} D3DRENDERSTATETYPE; + +typedef enum _D3DMATERIALCOLORSOURCE +{ + D3DMCS_MATERIAL = 0, + D3DMCS_COLOR1 = 1, + D3DMCS_COLOR2 = 2, + D3DMCS_FORCE_DWORD = 0x7fffffff +} D3DMATERIALCOLORSOURCE; + +#define D3DRENDERSTATE_BLENDENABLE D3DRENDERSTATE_ALPHABLENDENABLE +#define D3DRENDERSTATE_WRAPBIAS 128UL +#define D3DWRAP_U 0x00000001L +#define D3DWRAP_V 0x00000002L + +#define D3DWRAPCOORD_0 0x00000001L +#define D3DWRAPCOORD_1 0x00000002L +#define D3DWRAPCOORD_2 0x00000004L +#define D3DWRAPCOORD_3 0x00000008L + +#define D3DRENDERSTATE_STIPPLEPATTERN(y) (D3DRENDERSTATE_STIPPLEPATTERN00 + (y)) + +typedef struct _D3DSTATE { + union { + D3DTRANSFORMSTATETYPE dtstTransformStateType; + D3DLIGHTSTATETYPE dlstLightStateType; + D3DRENDERSTATETYPE drstRenderStateType; + } DUMMYUNIONNAME1; + union { + DWORD dwArg[1]; + D3DVALUE dvArg[1]; + } DUMMYUNIONNAME2; +} D3DSTATE, *LPD3DSTATE; + +typedef struct _D3DMATRIXLOAD { + D3DMATRIXHANDLE hDestMatrix; + D3DMATRIXHANDLE hSrcMatrix; +} D3DMATRIXLOAD, *LPD3DMATRIXLOAD; + +typedef struct _D3DMATRIXMULTIPLY { + D3DMATRIXHANDLE hDestMatrix; + D3DMATRIXHANDLE hSrcMatrix1; + D3DMATRIXHANDLE hSrcMatrix2; +} D3DMATRIXMULTIPLY, *LPD3DMATRIXMULTIPLY; + +typedef struct _D3DPROCESSVERTICES { + DWORD dwFlags; + WORD wStart; + WORD wDest; + DWORD dwCount; + DWORD dwReserved; +} D3DPROCESSVERTICES, *LPD3DPROCESSVERTICES; + +#define D3DPROCESSVERTICES_TRANSFORMLIGHT 0x00000000L +#define D3DPROCESSVERTICES_TRANSFORM 0x00000001L +#define D3DPROCESSVERTICES_COPY 0x00000002L +#define D3DPROCESSVERTICES_OPMASK 0x00000007L + +#define D3DPROCESSVERTICES_UPDATEEXTENTS 0x00000008L +#define D3DPROCESSVERTICES_NOCOLOR 0x00000010L + +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_ADDRESS = 12, + D3DTSS_ADDRESSU = 13, + D3DTSS_ADDRESSV = 14, + D3DTSS_BORDERCOLOR = 15, + D3DTSS_MAGFILTER = 16, + D3DTSS_MINFILTER = 17, + D3DTSS_MIPFILTER = 18, + D3DTSS_MIPMAPLODBIAS = 19, + D3DTSS_MAXMIPLEVEL = 20, + D3DTSS_MAXANISOTROPY = 21, + D3DTSS_BUMPENVLSCALE = 22, + D3DTSS_BUMPENVLOFFSET = 23, + D3DTSS_TEXTURETRANSFORMFLAGS = 24, + D3DTSS_FORCE_DWORD = 0x7fffffff +} D3DTEXTURESTAGESTATETYPE; + +#define D3DTSS_TCI_PASSTHRU 0x00000000 +#define D3DTSS_TCI_CAMERASPACENORMAL 0x00010000 +#define D3DTSS_TCI_CAMERASPACEPOSITION 0x00020000 +#define D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR 0x00030000 + +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_FORCE_DWORD = 0x7fffffff +} D3DTEXTUREOP; + +#define D3DTA_SELECTMASK 0x0000000f +#define D3DTA_DIFFUSE 0x00000000 +#define D3DTA_CURRENT 0x00000001 +#define D3DTA_TEXTURE 0x00000002 +#define D3DTA_TFACTOR 0x00000003 +#define D3DTA_SPECULAR 0x00000004 +#define D3DTA_COMPLEMENT 0x00000010 +#define D3DTA_ALPHAREPLICATE 0x00000020 + +typedef enum _D3DTEXTUREMAGFILTER +{ + D3DTFG_POINT = 1, + D3DTFG_LINEAR = 2, + D3DTFG_FLATCUBIC = 3, + D3DTFG_GAUSSIANCUBIC = 4, + D3DTFG_ANISOTROPIC = 5, + D3DTFG_FORCE_DWORD = 0x7fffffff +} D3DTEXTUREMAGFILTER; + +typedef enum _D3DTEXTUREMINFILTER +{ + D3DTFN_POINT = 1, + D3DTFN_LINEAR = 2, + D3DTFN_ANISOTROPIC = 3, + D3DTFN_FORCE_DWORD = 0x7fffffff +} D3DTEXTUREMINFILTER; + +typedef enum _D3DTEXTUREMIPFILTER +{ + D3DTFP_NONE = 1, + D3DTFP_POINT = 2, + D3DTFP_LINEAR = 3, + D3DTFP_FORCE_DWORD = 0x7fffffff +} D3DTEXTUREMIPFILTER; + +#define D3DTRIFLAG_START 0x00000000L +#define D3DTRIFLAG_STARTFLAT(len) (len) +#define D3DTRIFLAG_ODD 0x0000001eL +#define D3DTRIFLAG_EVEN 0x0000001fL + +#define D3DTRIFLAG_EDGEENABLE1 0x00000100L +#define D3DTRIFLAG_EDGEENABLE2 0x00000200L +#define D3DTRIFLAG_EDGEENABLE3 0x00000400L +#define D3DTRIFLAG_EDGEENABLETRIANGLE \ + (D3DTRIFLAG_EDGEENABLE1 | D3DTRIFLAG_EDGEENABLE2 | D3DTRIFLAG_EDGEENABLE3) + +typedef struct _D3DTRIANGLE { + union { + WORD v1; + WORD wV1; + } DUMMYUNIONNAME1; + union { + WORD v2; + WORD wV2; + } DUMMYUNIONNAME2; + union { + WORD v3; + WORD wV3; + } DUMMYUNIONNAME3; + WORD wFlags; +} D3DTRIANGLE, *LPD3DTRIANGLE; + +typedef struct _D3DLINE { + union { + WORD v1; + WORD wV1; + } DUMMYUNIONNAME1; + union { + WORD v2; + WORD wV2; + } DUMMYUNIONNAME2; +} D3DLINE, *LPD3DLINE; + +typedef struct _D3DSPAN { + WORD wCount; + WORD wFirst; +} D3DSPAN, *LPD3DSPAN; + +typedef struct _D3DPOINT { + WORD wCount; + WORD wFirst; +} D3DPOINT, *LPD3DPOINT; + +typedef struct _D3DBRANCH { + DWORD dwMask; + DWORD dwValue; + BOOL bNegate; + DWORD dwOffset; +} D3DBRANCH, *LPD3DBRANCH; + +typedef struct _D3DSTATUS { + DWORD dwFlags; + DWORD dwStatus; + D3DRECT drExtent; +} D3DSTATUS, *LPD3DSTATUS; + +#define D3DSETSTATUS_STATUS 0x00000001L +#define D3DSETSTATUS_EXTENTS 0x00000002L +#define D3DSETSTATUS_ALL (D3DSETSTATUS_STATUS | D3DSETSTATUS_EXTENTS) + +typedef struct _D3DCLIPSTATUS { + DWORD dwFlags; + DWORD dwStatus; + float minx, maxx; + float miny, maxy; + float minz, maxz; +} D3DCLIPSTATUS, *LPD3DCLIPSTATUS; + +#define D3DCLIPSTATUS_STATUS 0x00000001L +#define D3DCLIPSTATUS_EXTENTS2 0x00000002L +#define D3DCLIPSTATUS_EXTENTS3 0x00000004L + +typedef struct { + DWORD dwSize; + DWORD dwTrianglesDrawn; + DWORD dwLinesDrawn; + DWORD dwPointsDrawn; + DWORD dwSpansDrawn; + DWORD dwVerticesProcessed; +} D3DSTATS, *LPD3DSTATS; + +#define D3DEXECUTE_CLIPPED 0x00000001l +#define D3DEXECUTE_UNCLIPPED 0x00000002l + +typedef struct _D3DEXECUTEDATA { + DWORD dwSize; + DWORD dwVertexOffset; + DWORD dwVertexCount; + DWORD dwInstructionOffset; + DWORD dwInstructionLength; + DWORD dwHVertexOffset; + D3DSTATUS dsStatus; +} D3DEXECUTEDATA, *LPD3DEXECUTEDATA; + +#define D3DPAL_FREE 0x00 +#define D3DPAL_READONLY 0x40 +#define D3DPAL_RESERVED 0x80 + +typedef struct _D3DVERTEXBUFFERDESC { + DWORD dwSize; + DWORD dwCaps; + DWORD dwFVF; + DWORD dwNumVertices; +} D3DVERTEXBUFFERDESC, *LPD3DVERTEXBUFFERDESC; + +#define D3DVBCAPS_SYSTEMMEMORY 0x00000800l +#define D3DVBCAPS_WRITEONLY 0x00010000l +#define D3DVBCAPS_OPTIMIZED 0x80000000l +#define D3DVBCAPS_DONOTCLIP 0x00000001l + +#define D3DVOP_LIGHT (1 << 10) +#define D3DVOP_TRANSFORM (1 << 0) +#define D3DVOP_CLIP (1 << 2) +#define D3DVOP_EXTENTS (1 << 3) + +#define D3DMAXNUMVERTICES ((1<<16) - 1) + +#define D3DMAXNUMPRIMITIVES ((1<<16) - 1) + +#define D3DPV_DONOTCOPYDATA (1 << 0) + +#define D3DFVF_RESERVED0 0x001 +#define D3DFVF_POSITION_MASK 0x00E +#define D3DFVF_XYZ 0x002 +#define D3DFVF_XYZRHW 0x004 +#define D3DFVF_XYZB1 0x006 +#define D3DFVF_XYZB2 0x008 +#define D3DFVF_XYZB3 0x00a +#define D3DFVF_XYZB4 0x00c +#define D3DFVF_XYZB5 0x00e + +#define D3DFVF_NORMAL 0x010 +#define D3DFVF_RESERVED1 0x020 +#define D3DFVF_DIFFUSE 0x040 +#define D3DFVF_SPECULAR 0x080 +#define D3DFVF_TEXCOUNT_MASK 0xf00 +#define D3DFVF_TEXCOUNT_SHIFT 8 +#define D3DFVF_TEX0 0x000 +#define D3DFVF_TEX1 0x100 +#define D3DFVF_TEX2 0x200 +#define D3DFVF_TEX3 0x300 +#define D3DFVF_TEX4 0x400 +#define D3DFVF_TEX5 0x500 +#define D3DFVF_TEX6 0x600 +#define D3DFVF_TEX7 0x700 +#define D3DFVF_TEX8 0x800 + +#define D3DFVF_RESERVED2 0xf000 + +#define D3DFVF_VERTEX ( D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1 ) +#define D3DFVF_LVERTEX ( D3DFVF_XYZ | D3DFVF_RESERVED1 | D3DFVF_DIFFUSE | \ + D3DFVF_SPECULAR | D3DFVF_TEX1 ) +#define D3DFVF_TLVERTEX ( D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | \ + D3DFVF_TEX1 ) + +typedef struct _D3DDP_PTRSTRIDE { + LPVOID lpvData; + DWORD dwStride; +} D3DDP_PTRSTRIDE; + +#define D3DDP_MAXTEXCOORD 8 + +typedef struct _D3DDRAWPRIMITIVESTRIDEDDATA { + D3DDP_PTRSTRIDE position; + D3DDP_PTRSTRIDE normal; + D3DDP_PTRSTRIDE diffuse; + D3DDP_PTRSTRIDE specular; + D3DDP_PTRSTRIDE textureCoords[D3DDP_MAXTEXCOORD]; +} D3DDRAWPRIMITIVESTRIDEDDATA ,*LPD3DDRAWPRIMITIVESTRIDEDDATA; + +#define D3DVIS_INSIDE_FRUSTUM 0 +#define D3DVIS_INTERSECT_FRUSTUM 1 +#define D3DVIS_OUTSIDE_FRUSTUM 2 +#define D3DVIS_INSIDE_LEFT 0 +#define D3DVIS_INTERSECT_LEFT (1 << 2) +#define D3DVIS_OUTSIDE_LEFT (2 << 2) +#define D3DVIS_INSIDE_RIGHT 0 +#define D3DVIS_INTERSECT_RIGHT (1 << 4) +#define D3DVIS_OUTSIDE_RIGHT (2 << 4) +#define D3DVIS_INSIDE_TOP 0 +#define D3DVIS_INTERSECT_TOP (1 << 6) +#define D3DVIS_OUTSIDE_TOP (2 << 6) +#define D3DVIS_INSIDE_BOTTOM 0 +#define D3DVIS_INTERSECT_BOTTOM (1 << 8) +#define D3DVIS_OUTSIDE_BOTTOM (2 << 8) +#define D3DVIS_INSIDE_NEAR 0 +#define D3DVIS_INTERSECT_NEAR (1 << 10) +#define D3DVIS_OUTSIDE_NEAR (2 << 10) +#define D3DVIS_INSIDE_FAR 0 +#define D3DVIS_INTERSECT_FAR (1 << 12) +#define D3DVIS_OUTSIDE_FAR (2 << 12) + +#define D3DVIS_MASK_FRUSTUM (3 << 0) +#define D3DVIS_MASK_LEFT (3 << 2) +#define D3DVIS_MASK_RIGHT (3 << 4) +#define D3DVIS_MASK_TOP (3 << 6) +#define D3DVIS_MASK_BOTTOM (3 << 8) +#define D3DVIS_MASK_NEAR (3 << 10) +#define D3DVIS_MASK_FAR (3 << 12) + +#define D3DDEVINFOID_TEXTUREMANAGER 1 +#define D3DDEVINFOID_D3DTEXTUREMANAGER 2 +#define D3DDEVINFOID_TEXTURING 3 + +typedef enum _D3DSTATEBLOCKTYPE +{ + D3DSBT_ALL = 1, + D3DSBT_PIXELSTATE = 2, + D3DSBT_VERTEXSTATE = 3, + D3DSBT_FORCE_DWORD = 0xffffffff +} D3DSTATEBLOCKTYPE; + +typedef enum _D3DVERTEXBLENDFLAGS +{ + D3DVBLEND_DISABLE = 0, + D3DVBLEND_1WEIGHT = 1, + D3DVBLEND_2WEIGHTS = 2, + D3DVBLEND_3WEIGHTS = 3, +} D3DVERTEXBLENDFLAGS; + +typedef enum _D3DTEXTURETRANSFORMFLAGS { + D3DTTFF_DISABLE = 0, + D3DTTFF_COUNT1 = 1, + D3DTTFF_COUNT2 = 2, + D3DTTFF_COUNT3 = 3, + D3DTTFF_COUNT4 = 4, + D3DTTFF_PROJECTED = 256, + D3DTTFF_FORCE_DWORD = 0x7fffffff +} D3DTEXTURETRANSFORMFLAGS; + +#define D3DFVF_TEXTUREFORMAT2 0 +#define D3DFVF_TEXTUREFORMAT1 3 +#define D3DFVF_TEXTUREFORMAT3 1 +#define D3DFVF_TEXTUREFORMAT4 2 + +#define D3DFVF_TEXCOORDSIZE3(CoordIndex) (D3DFVF_TEXTUREFORMAT3 << (CoordIndex*2 + 16)) +#define D3DFVF_TEXCOORDSIZE2(CoordIndex) (D3DFVF_TEXTUREFORMAT2) +#define D3DFVF_TEXCOORDSIZE4(CoordIndex) (D3DFVF_TEXTUREFORMAT4 << (CoordIndex*2 + 16)) +#define D3DFVF_TEXCOORDSIZE1(CoordIndex) (D3DFVF_TEXTUREFORMAT1 << (CoordIndex*2 + 16)) + +#endif diff --git a/include/ddentry.h b/include/ddentry.h new file mode 100644 index 0000000..06c0716 --- /dev/null +++ b/include/ddentry.h @@ -0,0 +1,357 @@ +/* + * DirectDraw GDI32.dll interface definitions + * Copyright (C) 2003 ReactOS Team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ +#include +#include +#include +BOOL STDCALL DdCreateDirectDrawObject( +LPDDRAWI_DIRECTDRAW_GBL pDirectDrawGlobal, +HDC hdc +); +BOOL STDCALL DdQueryDirectDrawObject( +LPDDRAWI_DIRECTDRAW_GBL pDirectDrawGlobal, +LPDDHALINFO pHalInfo, +LPDDHAL_DDCALLBACKS pDDCallbacks, +LPDDHAL_DDSURFACECALLBACKS pDDSurfaceCallbacks, +LPDDHAL_DDPALETTECALLBACKS pDDPaletteCallbacks, +LPD3DHAL_CALLBACKS pD3dCallbacks, +LPD3DHAL_GLOBALDRIVERDATA pD3dDriverData, +LPDDHAL_DDEXEBUFCALLBACKS pD3dBufferCallbacks, +LPDDSURFACEDESC pD3dTextureFormats, +LPDWORD pdwFourCC, +LPVIDMEM pvmList +); +BOOL STDCALL DdDeleteDirectDrawObject( +LPDDRAWI_DIRECTDRAW_GBL pDirectDrawGlobal +); +BOOL STDCALL DdCreateSurfaceObject( +LPDDRAWI_DDRAWSURFACE_LCL pSurfaceLocal, +BOOL bPrimarySurface +); +BOOL STDCALL DdDeleteSurfaceObject( +LPDDRAWI_DDRAWSURFACE_LCL pSurfaceLocal +); +BOOL STDCALL DdResetVisrgn( +LPDDRAWI_DDRAWSURFACE_LCL pSurfaceLocal, +HWND hWnd +); +BOOL STDCALL DdGetDC( +LPDDRAWI_DDRAWSURFACE_LCL pSurfaceLocal, +LPPALETTEENTRY pColorTable +); +BOOL STDCALL DdReleaseDC( +LPDDRAWI_DDRAWSURFACE_LCL pSurfaceLocal +); +HBITMAP STDCALL DdCreateDIBSection( +HDC hdc, +CONST BITMAPINFO *pbmi, +UINT iUsage, +VOID **ppvBits, +HANDLE hSectionApp, +DWORD dwOffset +); +BOOL STDCALL DdReenableDirectDrawObject( +LPDDRAWI_DIRECTDRAW_GBL pDirectDrawGlobal, +BOOL *pbNewMode +); +BOOL STDCALL DdAttachSurface( +LPDDRAWI_DDRAWSURFACE_LCL pSurfaceFrom, +LPDDRAWI_DDRAWSURFACE_LCL pSurfaceTo +); +VOID STDCALL DdUnattachSurface( +LPDDRAWI_DDRAWSURFACE_LCL pSurface, +LPDDRAWI_DDRAWSURFACE_LCL pSurfaceAttached +); +ULONG STDCALL DdQueryDisplaySettingsUniqueness(VOID); +HANDLE STDCALL DdGetDxHandle( +LPDDRAWI_DIRECTDRAW_LCL pDDraw, +LPDDRAWI_DDRAWSURFACE_LCL pSurface, +BOOL bRelease +); +BOOL STDCALL DdSetGammaRamp( +LPDDRAWI_DIRECTDRAW_LCL pDDraw, +HDC hdc, +LPVOID lpGammaRamp +); +DWORD STDCALL DdSwapTextureHandles( +LPDDRAWI_DIRECTDRAW_LCL pDDraw, +LPDDRAWI_DDRAWSURFACE_LCL pDDSLcl1, +LPDDRAWI_DDRAWSURFACE_LCL pDDSLcl2 +); +DWORD STDCALL DxgGenericThunk(ULONG_PTR ulIndex, +ULONG_PTR ulHandle, +SIZE_T *pdwSizeOfPtr1, +PVOID pvPtr1, +SIZE_T *pdwSizeOfPtr2, +PVOID pvPtr2); +BOOL STDCALL D3DContextCreate( +HANDLE hDirectDrawLocal, +HANDLE hSurfColor, +HANDLE hSurfZ, +D3DNTHAL_CONTEXTCREATEI *pdcci +); +DWORD STDCALL D3DContextDestroy( +LPD3DNTHAL_CONTEXTDESTROYDATA pContextDestroyData +); +DWORD STDCALL D3DContextDestroyAll(VOID); +DWORD STDCALL D3DValidateTextureStageState( +LPD3DNTHAL_VALIDATETEXTURESTAGESTATEDATA pData +); +DWORD STDCALL D3DDrawPrimitives2( +HANDLE hCmdBuf, +HANDLE hVBuf, +LPD3DNTHAL_DRAWPRIMITIVES2DATA pded, +FLATPTR *pfpVidMemCmd, +DWORD *pdwSizeCmd, +FLATPTR *pfpVidMemVtx, +DWORD *pdwSizeVtx +); +DWORD STDCALL D3DGetDriverState( +PDD_GETDRIVERSTATEDATA pdata +); +DWORD STDCALL DdAddAttachedSurface( +HANDLE hSurface, +HANDLE hSurfaceAttached, +PDD_ADDATTACHEDSURFACEDATA puAddAttachedSurfaceData +); +DWORD STDCALL DdAlphaBlt( +HANDLE hSurfaceDest, +HANDLE hSurfaceSrc, +PDD_BLTDATA puBltData); +BOOL STDCALL DdDdAttachSurface( /*rename it so it doesnt conflict */ +HANDLE hSurfaceFrom, +HANDLE hSurfaceTo +); +DWORD STDCALL DdBeginMoCompFrame( +HANDLE hMoComp, +PDD_BEGINMOCOMPFRAMEDATA puBeginFrameData +); +DWORD STDCALL DdBlt( +HANDLE hSurfaceDest, +HANDLE hSurfaceSrc, +PDD_BLTDATA puBltData +); +DWORD STDCALL DdCanCreateSurface( +HANDLE hDirectDraw, +PDD_CANCREATESURFACEDATA puCanCreateSurfaceData +); +DWORD STDCALL DdCanCreateD3DBuffer( +HANDLE hDirectDraw, +PDD_CANCREATESURFACEDATA puCanCreateSurfaceData +); +DWORD STDCALL DdColorControl( +HANDLE hSurface, +PDD_COLORCONTROLDATA puColorControlData +); +HANDLE STDCALL DdDdCreateDirectDrawObject( /*rename it so it doesnt conflict */ +HDC hdc +); +DWORD STDCALL DdCreateSurface( +HANDLE hDirectDraw, +HANDLE *hSurface, +DDSURFACEDESC *puSurfaceDescription, +DD_SURFACE_GLOBAL *puSurfaceGlobalData, +DD_SURFACE_LOCAL *puSurfaceLocalData, +DD_SURFACE_MORE *puSurfaceMoreData, +DD_CREATESURFACEDATA *puCreateSurfaceData, +HANDLE *puhSurface +); +DWORD STDCALL DdCreateD3DBuffer( +HANDLE hDirectDraw, +HANDLE *hSurface, +DDSURFACEDESC *puSurfaceDescription, +DD_SURFACE_GLOBAL *puSurfaceGlobalData, +DD_SURFACE_LOCAL *puSurfaceLocalData, +DD_SURFACE_MORE *puSurfaceMoreData, +DD_CREATESURFACEDATA *puCreateSurfaceData, +HANDLE *puhSurface +); +HANDLE STDCALL DdCreateMoComp( +HANDLE hDirectDraw, +PDD_CREATEMOCOMPDATA puCreateMoCompData +); +HANDLE STDCALL DdDdCreateSurfaceObject( /*rename it so it doesnt conflict */ +HANDLE hDirectDrawLocal, +HANDLE hSurface, +PDD_SURFACE_LOCAL puSurfaceLocal, +PDD_SURFACE_MORE puSurfaceMore, +PDD_SURFACE_GLOBAL puSurfaceGlobal, +BOOL bComplete +); +BOOL STDCALL DdDdDeleteDirectDrawObject( /*rename it so it doesnt conflict */ +HANDLE hDirectDrawLocal +); +BOOL STDCALL DdDdDeleteSurfaceObject( /*rename it so it doesnt conflict */ +HANDLE hSurface +); +DWORD STDCALL DdDestroyMoComp( +HANDLE hMoComp, +PDD_DESTROYMOCOMPDATA puBeginFrameData +); +DWORD STDCALL DdDestroySurface( +HANDLE hSurface, +BOOL bRealDestroy +); +DWORD STDCALL DdDestroyD3DBuffer( +HANDLE hSurface +); +DWORD STDCALL DdEndMoCompFrame( +HANDLE hMoComp, +PDD_ENDMOCOMPFRAMEDATA puEndFrameData +); +DWORD STDCALL DdFlip( +HANDLE hSurfaceCurrent, +HANDLE hSurfaceTarget, +HANDLE hSurfaceCurrentLeft, +HANDLE hSurfaceTargetLeft, +PDD_FLIPDATA puFlipData +); +DWORD STDCALL DdFlipToGDISurface( +HANDLE hDirectDraw, +PDD_FLIPTOGDISURFACEDATA puFlipToGDISurfaceData +); +DWORD STDCALL DdGetAvailDriverMemory( +HANDLE hDirectDraw, +PDD_GETAVAILDRIVERMEMORYDATA puGetAvailDriverMemoryData +); +DWORD STDCALL DdGetBltStatus( +HANDLE hSurface, +PDD_GETBLTSTATUSDATA puGetBltStatusData +); +HDC STDCALL DdDdGetDC( /*rename it so it doesnt conflict */ +HANDLE hSurface, +PALETTEENTRY *puColorTable +); +DWORD STDCALL DdGetDriverInfo( +HANDLE hDirectDraw, +PDD_GETDRIVERINFODATA puGetDriverInfoData +); +DWORD STDCALL DdDdGetDxHandle( /*rename it so it doesnt conflict */ +HANDLE hDirectDraw, +HANDLE hSurface, +BOOL bRelease +); +DWORD STDCALL DdGetFlipStatus( +HANDLE hSurface, +PDD_GETFLIPSTATUSDATA puGetFlipStatusData +); +DWORD STDCALL DdGetInternalMoCompInfo( +HANDLE hDirectDraw, +PDD_GETINTERNALMOCOMPDATA puGetInternalData +); +DWORD STDCALL DdGetMoCompBuffInfo( +HANDLE hDirectDraw, +PDD_GETMOCOMPCOMPBUFFDATA puGetBuffData +); +DWORD STDCALL DdGetMoCompGuids( +HANDLE hDirectDraw, +PDD_GETMOCOMPGUIDSDATA puGetMoCompGuidsData +); +DWORD STDCALL DdGetMoCompFormats( +HANDLE hDirectDraw, +PDD_GETMOCOMPFORMATSDATA puGetMoCompFormatsData +); +DWORD STDCALL DdGetScanLine( +HANDLE hDirectDraw, +PDD_GETSCANLINEDATA puGetScanLineData +); +DWORD STDCALL DdLock( +HANDLE hSurface, +PDD_LOCKDATA puLockData, +HDC hdcClip +); +DWORD STDCALL DdLockD3D( +HANDLE hSurface, +PDD_LOCKDATA puLockData +); +BOOL STDCALL DdDdQueryDirectDrawObject( /*rename it so it doesnt conflict */ +HANDLE hDirectDrawLocal, +DD_HALINFO *pHalInfo, +DWORD *pCallBackFlags, +LPD3DNTHAL_CALLBACKS puD3dCallbacks, +LPD3DNTHAL_GLOBALDRIVERDATA puD3dDriverData, +PDD_D3DBUFCALLBACKS puD3dBufferCallbacks, +LPDDSURFACEDESC puD3dTextureFormats, +DWORD *puNumHeaps, +VIDEOMEMORY *puvmList, +DWORD *puNumFourCC, +DWORD *puFourCC +); +DWORD STDCALL DdQueryMoCompStatus( +HANDLE hMoComp, +PDD_QUERYMOCOMPSTATUSDATA puQueryMoCompStatusData +); +BOOL STDCALL DdDdReenableDirectDrawObject( /*rename it so it doesnt conflict */ +HANDLE hDirectDrawLocal, +BOOL *pubNewMode +); +BOOL STDCALL DdDdReleaseDC( /*rename it so it doesnt conflict */ +HANDLE hSurface +); +DWORD STDCALL DdRenderMoComp( +HANDLE hMoComp, +PDD_RENDERMOCOMPDATA puRenderMoCompData +); +BOOL STDCALL DdDdResetVisrgn( /*rename it so it doesnt conflict */ +HANDLE hSurface, +HWND hwnd +); +DWORD STDCALL DdSetColorKey( +HANDLE hSurface, +PDD_SETCOLORKEYDATA puSetColorKeyData +); +DWORD STDCALL DdSetExclusiveMode( +HANDLE hDirectDraw, +PDD_SETEXCLUSIVEMODEDATA puSetExclusiveModeData +); +BOOL STDCALL DdDdSetGammaRamp( /*rename it so it doesnt conflict */ +HANDLE hDirectDraw, +HDC hdc, +LPVOID lpGammaRamp +); +DWORD STDCALL DdCreateSurfaceEx( +HANDLE hDirectDraw, +HANDLE hSurface, +DWORD dwSurfaceHandle +); +DWORD STDCALL DdSetOverlayPosition( +HANDLE hSurfaceSource, +HANDLE hSurfaceDestination, +PDD_SETOVERLAYPOSITIONDATA puSetOverlayPositionData +); +VOID STDCALL DdDdUnattachSurface( /*rename it so it doesnt conflict */ +HANDLE hSurface, +HANDLE hSurfaceAttached +); +DWORD STDCALL DdUnlock( +HANDLE hSurface, +PDD_UNLOCKDATA puUnlockData +); +DWORD STDCALL DdUnlockD3D( +HANDLE hSurface, +PDD_UNLOCKDATA puUnlockData +); +DWORD STDCALL DdUpdateOverlay( +HANDLE hSurfaceDestination, +HANDLE hSurfaceSource, +PDD_UPDATEOVERLAYDATA puUpdateOverlayData +); +DWORD STDCALL DdWaitForVerticalBlank( +HANDLE hDirectDraw, +PDD_WAITFORVERTICALBLANKDATA puWaitForVerticalBlankData +); diff --git a/include/ddk/af_irda.h b/include/ddk/af_irda.h index 0a6433f..87b485d 100644 --- a/include/ddk/af_irda.h +++ b/include/ddk/af_irda.h @@ -41,7 +41,7 @@ DEFINE_GUID(GUID_DEVINTERFACE_IRDAPORT, 0x86e0d1e0L, 0x8089, 0x11d0, 0x9c, 0xe4, 0x08, 0x00, 0x3e, 0x30, 0x1f, 0x74); DEFINE_GUID(GUID_DEVINTERFACE_IRDAENUM_BUS_ENUMERATOR, 0x4D36E978L, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x19); -#endif // DEFINE_GUID +#endif /* DEFINE_GUID */ #define WINDOWS_AF_IRDA 26 #define WINDOWS_PF_IRDA WINDOWS_AF_IRDA @@ -76,16 +76,16 @@ DEFINE_GUID(GUID_DEVINTERFACE_IRDAENUM_BUS_ENUMERATOR, #define IRLMP_9WIRE_MODE ((ULONG)0x16) #if 0 -// Available/Used on Windows 98 only ??? +/* Available/Used on Windows 98 only ??? */ #define IRLMP_TINYTP_MODE ((ULONG)0x17) #define IRLMP_PARAMETERS ((ULONG)0x18) #define IRLMP_DISCOVERY_MODE ((ULONG)0x19) -// Available/Used on Windows CE only ??? +/* Available/Used on Windows CE only ??? */ #define IRLMP_SHARP_MODE ((ULONG)0x20) #endif enum { -// First hint byte +/* First hint byte */ LM_HB1_PnP = 0x01, LM_HB1_PDA_Palmtop = 0x02, LM_HB1_Computer = 0x04, @@ -93,10 +93,10 @@ enum { LM_HB1_Modem = 0x10, LM_HB1_Fax = 0x20, LM_HB1_LANAccess = 0x40, -// Second hint byte +/* Second hint byte */ LM_HB2_Telephony = 0x01, LM_HB2_FileServer = 0x02, -// Any hint byte +/* Any hint byte */ LM_HB_Extension = 0x80, }; @@ -123,17 +123,17 @@ enum { #define LM_BAUD_1152K 1152000 #define LM_BAUD_4M 4000000 -#if 0 // Available/Used on Windows 98 only ??? +#if 0 /* Available/Used on Windows 98 only ??? */ typedef ULONG LM_BAUD_RATE; typedef struct { - ULONG nTXDataBytes; // packet transmit receive bytes - ULONG nRXDataBytes; // packet maximum receive bytes - LM_BAUD_RATE nBaudRate; // link negotiated baud - ULONG thresholdTime; // milliseconds for threshold time - ULONG discTime; // milliseconds for disconnect time - USHORT nMSLinkTurn; // milliseconds for link turn around time - UCHAR nTXPackets; // transmit window packets - UCHAR nRXPackets; // receive window packets + ULONG nTXDataBytes; /* packet transmit receive bytes */ + ULONG nRXDataBytes; /* packet maximum receive bytes */ + LM_BAUD_RATE nBaudRate; /* link negotiated baud */ + ULONG thresholdTime; /* milliseconds for threshold time */ + ULONG discTime; /* milliseconds for disconnect time + USHORT nMSLinkTurn; /* milliseconds for link turn around time */ + UCHAR nTXPackets; /* transmit window packets */ + UCHAR nRXPackets; /* receive window packets */ } LM_IRPARMS; typedef LM_IRPARMS *PLM_IRPARMS; #endif diff --git a/include/ddk/cctypes.h b/include/ddk/cctypes.h index dce1748..6b66c0f 100644 --- a/include/ddk/cctypes.h +++ b/include/ddk/cctypes.h @@ -73,13 +73,18 @@ typedef VOID STDCALL_FUNC (*PFLUSH_TO_LSN)(IN PVOID LogHandle, IN LARGE_INTEGER Lsn); -typedef struct _REACTOS_COMMON_FCB_HEADER -{ - CSHORT NodeTypeCode; - CSHORT NodeByteSize; - LARGE_INTEGER AllocationSize; - LARGE_INTEGER FileSize; - LARGE_INTEGER ValidDataLength; -} REACTOS_COMMON_FCB_HEADER, *PREACTOS_COMMON_FCB_HEADER; +typedef struct _FSRTL_COMMON_FCB_HEADER { + CSHORT NodeTypeCode; + CSHORT NodeByteSize; + UCHAR Flags; + UCHAR IsFastIoPossible; + UCHAR Flags2; + UCHAR Reserved; + PERESOURCE Resource; + PERESOURCE PagingIoResource; + LARGE_INTEGER AllocationSize; + LARGE_INTEGER FileSize; + LARGE_INTEGER ValidDataLength; +} FSRTL_COMMON_FCB_HEADER, *PFSRTL_COMMON_FCB_HEADER; #endif /* __INCLUDE_DDK_CCTYPES_H */ diff --git a/include/ddk/class2.h b/include/ddk/class2.h index 6e1e939..07448de 100644 --- a/include/ddk/class2.h +++ b/include/ddk/class2.h @@ -136,6 +136,12 @@ NTSTATUS STDCALL ScsiClassDeviceControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp); +PVOID STDCALL +ScsiClassFindModePage(IN PCHAR ModeSenseBuffer, + IN ULONG Length, + IN UCHAR PageMode, + IN BOOLEAN Use6Byte); + ULONG STDCALL ScsiClassFindUnclaimedDevices(IN PCLASS_INIT_DATA InitializationData, OUT PSCSI_ADAPTER_BUS_INFO AdapterInformation); @@ -154,36 +160,36 @@ ScsiClassInitialize(IN PVOID Argument1, IN PCLASS_INIT_DATA InitializationData); VOID STDCALL -ScsiClassInitializeSrbLookasideList(PDEVICE_EXTENSION DeviceExtension, - ULONG NumberElements); +ScsiClassInitializeSrbLookasideList(IN PDEVICE_EXTENSION DeviceExtension, + IN ULONG NumberElements); NTSTATUS STDCALL -ScsiClassInternalIoControl(PDEVICE_OBJECT DeviceObject, - PIRP Irp); +ScsiClassInternalIoControl(IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp); BOOLEAN STDCALL -ScsiClassInterpretSenseInfo(PDEVICE_OBJECT DeviceObject, - PSCSI_REQUEST_BLOCK Srb, - UCHAR MajorFunctionCode, - ULONG IoDeviceCode, - ULONG RetryCount, - NTSTATUS *Status); +ScsiClassInterpretSenseInfo(IN PDEVICE_OBJECT DeviceObject, + IN PSCSI_REQUEST_BLOCK Srb, + IN UCHAR MajorFunctionCode, + IN ULONG IoDeviceCode, + IN ULONG RetryCount, + OUT NTSTATUS *Status); NTSTATUS STDCALL -ScsiClassIoComplete(PDEVICE_OBJECT DeviceObject, - PIRP Irp, - PVOID Context); +ScsiClassIoComplete(IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp, + IN PVOID Context); NTSTATUS STDCALL -ScsiClassIoCompleteAssociated(PDEVICE_OBJECT DeviceObject, - PIRP Irp, - PVOID Context); +ScsiClassIoCompleteAssociated(IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp, + IN PVOID Context); ULONG STDCALL -ScsiClassModeSense(PDEVICE_OBJECT DeviceObject, - CHAR ModeSenseBuffer, - ULONG Length, - UCHAR PageMode); +ScsiClassModeSense(IN PDEVICE_OBJECT DeviceObject, + IN PCHAR ModeSenseBuffer, + IN ULONG Length, + IN UCHAR PageMode); ULONG STDCALL ScsiClassQueryTimeOutRegistryValue(IN PUNICODE_STRING RegistryPath); @@ -207,9 +213,9 @@ ScsiClassSendSrbSynchronous(PDEVICE_OBJECT DeviceObject, BOOLEAN WriteToDevice); VOID STDCALL -ScsiClassSplitRequest(PDEVICE_OBJECT DeviceObject, - PIRP Irp, - ULONG MaximumBytes); +ScsiClassSplitRequest(IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp, + IN ULONG MaximumBytes); #endif /* __STORAGE_INCLUDE_CLASS2_H */ diff --git a/include/ddk/d3dhal.h b/include/ddk/d3dhal.h new file mode 100644 index 0000000..4eec4a7 --- /dev/null +++ b/include/ddk/d3dhal.h @@ -0,0 +1,615 @@ +/* + * Direct3D driver interface + * (DirectX 7 version) + * + * Copyright (C) 2001 Ove Kaaven + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * 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. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef __WINE_D3DHAL_H +#define __WINE_D3DHAL_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +/***************************************************************************** + * device info structures + */ +typedef struct _D3DDeviceDesc_V1 { + DWORD dwSize; + DWORD dwFlags; + D3DCOLORMODEL dcmColorModel; + DWORD dwDevCaps; + D3DTRANSFORMCAPS dtcTransformCaps; + BOOL bClipping; + D3DLIGHTINGCAPS dlcLightingCaps; + D3DPRIMCAPS dpcLineCaps; + D3DPRIMCAPS dpcTriCaps; + DWORD dwDeviceRenderBitDepth; + DWORD dwDeviceZBufferBitDepth; + DWORD dwMaxBufferSize; + DWORD dwMaxVertexCount; +} D3DDEVICEDESC_V1,*LPD3DDEVICEDESC_V1; + +/* this is to allow keeping the bulk of our OpenGL code out of x11drv */ +#define D3DDD_WINE_OPENGL_DEVICE 0x00008000 + +typedef struct _D3DHAL_GLOBALDRIVERDATA { + DWORD dwSize; + D3DDEVICEDESC_V1 hwCaps; + DWORD dwNumVertices; + DWORD dwNumClipVertices; + DWORD dwNumTextureFormats; + LPDDSURFACEDESC lpTextureFormats; +} D3DHAL_GLOBALDRIVERDATA,*LPD3DHAL_GLOBALDRIVERDATA; + +typedef struct _D3DHAL_D3DEXTENDEDCAPS { + DWORD dwSize; + /* DirectX 5 */ + DWORD dwMinTextureWidth, dwMaxTextureWidth; + DWORD dwMinTextureHeight, dwMaxTextureHeight; + DWORD dwMinStippleWidth, dwMaxStippleWidth; + DWORD dwMinStippleHeight, dwMaxStippleHeight; + /* DirectX 6 */ + DWORD dwMaxTextureRepeat; + DWORD dwMaxTextureAspectRatio; + DWORD dwMaxAnisotropy; + D3DVALUE dvGuardBandLeft; + D3DVALUE dvGuardBandTop; + D3DVALUE dvGuardBandRight; + D3DVALUE dvGuardBandBottom; + D3DVALUE dvExtentsAdjust; + DWORD dwStencilCaps; + DWORD dwFVFCaps; + DWORD dwTextureOpCaps; + WORD wMaxTextureBlendStages; + WORD wMaxSimultaneousTextures; + /* DirectX 7 */ + DWORD dwMaxActiveLights; + D3DVALUE dvMaxVertexW; + WORD wMaxUserClipPlanes; + WORD wMaxVertexBlendMatrices; + DWORD dwVertexProcessingCaps; + DWORD dwReserved1; + DWORD dwReserved2; + DWORD dwReserved3; + DWORD dwReserved4; +} D3DHAL_D3DEXTENDEDCAPS,*LPD3DHAL_D3DEXTENDEDCAPS; + +/***************************************************************************** + * d3d->driver callbacks + */ +typedef struct _D3DHAL_CONTEXTCREATEDATA *LPD3DHAL_CONTEXTCREATEDATA; +typedef struct _D3DHAL_CONTEXTDESTROYDATA *LPD3DHAL_CONTEXTDESTROYDATA; +typedef struct _D3DHAL_CONTEXTDESTROYALLDATA *LPD3DHAL_CONTEXTDESTROYALLDATA; +typedef struct _D3DHAL_SCENECAPTUREDATA *LPD3DHAL_SCENECAPTUREDATA; +typedef struct _D3DHAL_RENDERSTATEDATA *LPD3DHAL_RENDERSTATEDATA; +typedef struct _D3DHAL_RENDERPRIMITIVEDATA *LPD3DHAL_RENDERPRIMITIVEDATA; +typedef struct _D3DHAL_TEXTURECREATEDATA *LPD3DHAL_TEXTURECREATEDATA; +typedef struct _D3DHAL_TEXTUREDESTROYDATA *LPD3DHAL_TEXTUREDESTROYDATA; +typedef struct _D3DHAL_TEXTURESWAPDATA *LPD3DHAL_TEXTURESWAPDATA; +typedef struct _D3DHAL_TEXTUREGETSURFDATA *LPD3DHAL_TEXTUREGETSURFDATA; +typedef struct _D3DHAL_GETSTATEDATA *LPD3DHAL_GETSTATEDATA; + +typedef DWORD (PASCAL *LPD3DHAL_CONTEXTCREATECB) (LPD3DHAL_CONTEXTCREATEDATA); +typedef DWORD (PASCAL *LPD3DHAL_CONTEXTDESTROYCB) (LPD3DHAL_CONTEXTDESTROYDATA); +typedef DWORD (PASCAL *LPD3DHAL_CONTEXTDESTROYALLCB)(LPD3DHAL_CONTEXTDESTROYALLDATA); +typedef DWORD (PASCAL *LPD3DHAL_SCENECAPTURECB) (LPD3DHAL_SCENECAPTUREDATA); +typedef DWORD (PASCAL *LPD3DHAL_RENDERSTATECB) (LPD3DHAL_RENDERSTATEDATA); +typedef DWORD (PASCAL *LPD3DHAL_RENDERPRIMITIVECB) (LPD3DHAL_RENDERPRIMITIVEDATA); +typedef DWORD (PASCAL *LPD3DHAL_TEXTURECREATECB) (LPD3DHAL_TEXTURECREATEDATA); +typedef DWORD (PASCAL *LPD3DHAL_TEXTUREDESTROYCB) (LPD3DHAL_TEXTUREDESTROYDATA); +typedef DWORD (PASCAL *LPD3DHAL_TEXTURESWAPCB) (LPD3DHAL_TEXTURESWAPDATA); +typedef DWORD (PASCAL *LPD3DHAL_TEXTUREGETSURFCB) (LPD3DHAL_TEXTUREGETSURFDATA); +typedef DWORD (PASCAL *LPD3DHAL_GETSTATECB) (LPD3DHAL_GETSTATEDATA); + +typedef struct _D3DHAL_CALLBACKS { + DWORD dwSize; + LPD3DHAL_CONTEXTCREATECB ContextCreate; + LPD3DHAL_CONTEXTDESTROYCB ContextDestroy; + LPD3DHAL_CONTEXTDESTROYALLCB ContextDestroyAll; + LPD3DHAL_SCENECAPTURECB SceneCapture; + LPVOID lpReserved10; + LPVOID lpReserved11; + LPD3DHAL_RENDERSTATECB RenderState; + LPD3DHAL_RENDERPRIMITIVECB RenderPrimitive; + DWORD dwReserved; + LPD3DHAL_TEXTURECREATECB TextureCreate; + LPD3DHAL_TEXTUREDESTROYCB TextureDestroy; + LPD3DHAL_TEXTURESWAPCB TextureSwap; + LPD3DHAL_TEXTUREGETSURFCB TextureGetSurf; + /* now why did MS create CALLBACKS2 and CALLBACKS3 structures if + * all these reserved fields were available? we may never know */ + LPVOID lpReserved12; + LPVOID lpReserved13; + LPVOID lpReserved14; + LPVOID lpReserved15; + LPVOID lpReserved16; + LPVOID lpReserved17; + LPVOID lpReserved18; + LPVOID lpReserved19; + LPVOID lpReserved20; + LPVOID lpReserved21; + LPD3DHAL_GETSTATECB GetState; + DWORD dwReserved0; + DWORD dwReserved1; + DWORD dwReserved2; + DWORD dwReserved3; + DWORD dwReserved4; + DWORD dwReserved5; + DWORD dwReserved6; + DWORD dwReserved7; + DWORD dwReserved8; + DWORD dwReserved9; +} D3DHAL_CALLBACKS,*LPD3DHAL_CALLBACKS; + +typedef struct _D3DHAL_SETRENDERTARGETDATA *LPD3DHAL_SETRENDERTARGETDATA; +typedef struct _D3DHAL_CLEARDATA *LPD3DHAL_CLEARDATA; +typedef struct _D3DHAL_DRAWONEPRIMITIVEDATA *LPD3DHAL_DRAWONEPRIMITIVEDATA; +typedef struct _D3DHAL_DRAWONEINDEXEDPRIMITIVEDATA *LPD3DHAL_DRAWONEINDEXEDPRIMITIVEDATA; +typedef struct _D3DHAL_DRAWPRIMITIVESDATA *LPD3DHAL_DRAWPRIMITIVESDATA; + +typedef DWORD (PASCAL *LPD3DHAL_SETRENDERTARGETCB) (LPD3DHAL_SETRENDERTARGETDATA); +typedef DWORD (PASCAL *LPD3DHAL_CLEARCB) (LPD3DHAL_CLEARDATA); +typedef DWORD (PASCAL *LPD3DHAL_DRAWONEPRIMITIVECB) (LPD3DHAL_DRAWONEPRIMITIVEDATA); +typedef DWORD (PASCAL *LPD3DHAL_DRAWONEINDEXEDPRIMITIVECB)(LPD3DHAL_DRAWONEINDEXEDPRIMITIVEDATA); +typedef DWORD (PASCAL *LPD3DHAL_DRAWPRIMITIVESCB) (LPD3DHAL_DRAWPRIMITIVESDATA); + +typedef struct _D3DHAL_CALLBACKS2 { + DWORD dwSize; + DWORD dwFlags; + LPD3DHAL_SETRENDERTARGETCB SetRenderTarget; + LPD3DHAL_CLEARCB Clear; + LPD3DHAL_DRAWONEPRIMITIVECB DrawOnePrimitive; + LPD3DHAL_DRAWONEINDEXEDPRIMITIVECB DrawOneIndexedPrimitive; + LPD3DHAL_DRAWPRIMITIVESCB DrawPrimitives; +} D3DHAL_CALLBACKS2,*LPD3DHAL_CALLBACKS2; + +typedef struct _D3DHAL_CLEAR2DATA *LPD3DHAL_CLEAR2DATA; +typedef struct _D3DHAL_VALIDATETEXTURESTAGESTATEDATA *LPD3DHAL_VALIDATETEXTURESTAGESTATEDATA; +typedef struct _D3DHAL_DRAWPRIMITIVES2DATA *LPD3DHAL_DRAWPRIMITIVES2DATA; + +typedef DWORD (PASCAL *LPD3DHAL_CLEAR2CB) (LPD3DHAL_CLEAR2DATA); +typedef DWORD (PASCAL *LPD3DHAL_VALIDATETEXTURESTAGESTATECB)(LPD3DHAL_VALIDATETEXTURESTAGESTATEDATA); +typedef DWORD (PASCAL *LPD3DHAL_DRAWPRIMITIVES2CB) (LPD3DHAL_DRAWPRIMITIVES2DATA); + +typedef struct _D3DHAL_CALLBACKS3 { + DWORD dwSize; + DWORD dwFlags; + LPD3DHAL_CLEAR2CB Clear2; + LPVOID lpvReserved; + LPD3DHAL_VALIDATETEXTURESTAGESTATECB ValidateTextureStageState; + LPD3DHAL_DRAWPRIMITIVES2CB DrawPrimitives2; +} D3DHAL_CALLBACKS3,*LPD3DHAL_CALLBACKS3; + +/***************************************************************************** + * parameter structures + */ +typedef struct _D3DHAL_CONTEXTCREATEDATA { + union { + LPDDRAWI_DIRECTDRAW_GBL lpDDGbl; /* pre-DirectX 7 */ + LPDDRAWI_DIRECTDRAW_LCL lpDDLcl; /* DirectX 7 */ + } DUMMYUNIONNAME1; + union { + LPDIRECTDRAWSURFACE lpDDS; + LPDDRAWI_DDRAWSURFACE_LCL lpDDSLcl; /* DirectX 7 */ + } DUMMYUNIONNAME2; + union { + LPDIRECTDRAWSURFACE lpDDSZ; + LPDDRAWI_DDRAWSURFACE_LCL lpDDSZLcl; /* DirectX 7 */ + } DUMMYUNIONNAME3; + union { + DWORD dwPID; + ULONG_PTR dwrstates; + } DUMMYUNIONNAME4; + ULONG_PTR dwhContext; + HRESULT ddrval; +} D3DHAL_CONTEXTCREATEDATA; + +typedef struct _D3DHAL_CONTEXTDESTROYDATA { + ULONG_PTR dwhContext; + HRESULT ddrval; +} D3DHAL_CONTEXTDESTROYDATA; + +typedef struct _D3DHAL_CONTEXTDESTROYALLDATA { + DWORD dwPID; + HRESULT ddrval; +} D3DHAL_CONTEXTDESTROYALLDATA; + +typedef struct _D3DHAL_SCENECAPTUREDATA { + ULONG_PTR dwhContext; + DWORD dwFlag; + HRESULT ddrval; +} D3DHAL_SCENECAPTUREDATA; + +#define D3DHAL_SCENE_CAPTURE_START 0x00000000 +#define D3DHAL_SCENE_CAPTURE_END 0x00000001 + +typedef struct _D3DHAL_SETRENDERTARGETDATA { + ULONG_PTR dwhContext; + union { + LPDIRECTDRAWSURFACE lpDDS; + LPDDRAWI_DDRAWSURFACE_LCL lpDDSLcl; + } DUMMYUNIONNAME1; + union { + LPDIRECTDRAWSURFACE lpDDSZ; + LPDDRAWI_DDRAWSURFACE_LCL lpDDSZLcl; + } DUMMYUNIONNAME2; + HRESULT ddrval; +} D3DHAL_SETRENDERTARGETDATA; + +typedef struct _D3DHAL_DRAWPRIMITIVES2DATA { + ULONG_PTR dwhContext; + DWORD dwFlags; + DWORD dwVertexType; + LPDDRAWI_DDRAWSURFACE_LCL lpDDCommands; + DWORD dwCommandOffset; + DWORD dwCommandLength; + union { + LPDDRAWI_DDRAWSURFACE_LCL lpDDVertex; + LPVOID lpVertices; + } DUMMYUNIONNAME1; + DWORD dwVertexOffset; + DWORD dwVertexLength; + DWORD dwReqVertexBufSize; + DWORD dwReqCommandBufSize; + LPDWORD lpdwRStates; + union { + DWORD dwVertexSize; + HRESULT ddrval; + } DUMMYUNIONNAME2; + DWORD dwErrorOffset; +} D3DHAL_DRAWPRIMITIVES2DATA; + +#define D3DHALDP2_USERMEMVERTICES 0x00000001 +#define D3DHALDP2_EXECUTEBUFFER 0x00000002 +#define D3DHALDP2_SWAPVERTEXBUFFER 0x00000004 +#define D3DHALDP2_SWAPCOMMANDBUFFER 0x00000008 +#define D3DHALDP2_REQVERTEXBUFSIZE 0x00000010 +#define D3DHALDP2_REQCOMMANDBUFSIZE 0x00000020 +#define D3DHALDP2_VIDMEMVERTEXBUF 0x00000040 +#define D3DHALDP2_VIDMEMCOMMANDBUF 0x00000080 + +/***************************************************************************** + * DrawPrimitives2 command structures + */ +typedef struct _D3DHAL_DP2COMMAND { + BYTE bCommand; + BYTE bReserved; + union { + WORD wPrimitiveCount; + WORD wStateCount; + } DUMMYUNIONNAME; +} D3DHAL_DP2COMMAND,*LPD3DHAL_DP2COMMAND; + +typedef enum _D3DHAL_DP2OPERATION { + D3DDP2OP_POINTS = 1, + D3DDP2OP_INDEXEDLINELIST = 2, + D3DDP2OP_INDEXEDTRIANGLELIST = 3, + D3DDP2OP_RESERVED0 = 4, + D3DDP2OP_RENDERSTATE = 8, + D3DDP2OP_LINELIST = 15, + D3DDP2OP_LINESTRIP = 16, + D3DDP2OP_INDEXEDLINESTRIP = 17, + D3DDP2OP_TRIANGLELIST = 18, + D3DDP2OP_TRIANGLESTRIP = 19, + D3DDP2OP_INDEXEDTRIANGLESTRIP = 20, + D3DDP2OP_TRIANGLEFAN = 21, + D3DDP2OP_INDEXEDTRIANGLEFAN = 22, + D3DDP2OP_TRIANGLEFAN_IMM = 23, + D3DDP2OP_LINELIST_IMM = 24, + D3DDP2OP_TEXTURESTAGESTATE = 25, + D3DDP2OP_INDEXEDTRIANGLELIST2 = 26, + D3DDP2OP_INDEXEDLINELIST2 = 27, + D3DDP2OP_VIEWPORTINFO = 28, + D3DDP2OP_WINFO = 29, + /* pre-DirectX 7 interfaces */ + D3DDP2OP_SETPALETTE = 30, + D3DDP2OP_UPDATEPALETTE = 31, + /* DirectX 7 interfaces */ + D3DDP2OP_ZRANGE = 32, + D3DDP2OP_SETMATERIAL = 33, + D3DDP2OP_SETLIGHT = 34, + D3DDP2OP_CREATELIGHT = 35, + D3DDP2OP_SETTRANSFORM = 36, + D3DDP2OP_EXT = 37, + D3DDP2OP_TEXBLT = 38, + D3DDP2OP_STATESET = 39, + D3DDP2OP_SETPRIORITY = 40, + /* all interfaces */ + D3DDP2OP_SETRENDERTARGET = 41, + D3DDP2OP_CLEAR = 42, + /* DirectX 7 interfaces */ + D3DDP2OP_SETTEXLOD = 43, + D3DPP2OP_SETCLIPPLANE = 44 +} D3DHAL_DP2OPERATION; + +/* point primitives */ + +typedef struct _D3DHAL_POINTS { + WORD wCount; + WORD wVStart; +} D3DHAL_DP2POINTS,*LPD3DHAL_DP2POINTS; + +/* line primitives */ + +typedef struct _D3DHAL_DP2STARTVERTEX { + WORD wVStart; +} D3DHAL_DP2STARTVERTEX,*LPD3DHAL_DP2STARTVERTEX; + +typedef struct _D3DHAL_DP2LINELIST { + WORD wVStart; +} D3DHAL_DP2LINELIST,*LPD3DHAL_DP2LINELIST; + +typedef struct _D3DHAL_DP2INDEXEDLINELIST { + WORD wV1; + WORD wV2; +} D3DHAL_DP2INDEXEDLINELIST,*LPD3DHAL_DP2INDEXEDLINELIST; + +typedef struct _D3DHAL_DP2LINESTRIP { + WORD wVStart; +} D3DHAL_DP2LINESTRIP,*LPD3DHAL_DP2LINESTRIP; + +typedef struct _D3DHAL_DP2INDEXEDLINESTRIP { + WORD wV[2]; +} D3DHAL_DP2INDEXEDLINESTRIP,*LPD3DHAL_DP2INDEXEDLINESTRIP; + +/* triangle primitives */ + +typedef struct _D3DHAL_DP2TRIANGLELIST { + WORD wVStart; +} D3DHAL_DP2TRIANGLELIST,*LPD3DHAL_DP2TRIANGLELIST; + +typedef struct _D3DHAL_DP2INDEXEDTRIANGLELIST { + WORD wV1; + WORD wV2; + WORD wV3; + WORD wFlags; +} D3DHAL_DP2INDEXEDTRIANGLELIST,*LPD3DHAL_DP2INDEXEDTRIANGLELIST; + +typedef struct _D3DHAL_DP2INDEXEDTRIANGLELIST2 { + WORD wV1; + WORD wV2; + WORD wV3; +} D3DHAL_DP2INDEXEDTRIANGLELIST2,*LPD3DHAL_DP2INDEXEDTRIANGLELIST2; + +typedef struct _D3DHAL_DP2TRIANGLESTRIP { + WORD wVStart; +} D3DHAL_DP2TRIANGLESTRIP,*LPD3DHAL_DP2TRIANGLESTRIP; + +typedef struct _D3DHAL_DP2INDEXEDTRIANGLESTRIP { + WORD wV[3]; +} D3DHAL_DP2INDEXEDTRIANGLESTRIP,*LPD3DHAL_DP2INDEXEDTRIANGLESTRIP; + +typedef struct _D3DHAL_DP2TRIANGLEFAN { + WORD wVStart; +} D3DHAL_DP2TRIANGLEFAN,*LPD3DHAL_DP2TRIANGLEFAN; + +typedef struct _D3DHAL_DP2INDEXEDTRIANGLEFAN { + WORD wV[3]; +} D3DHAL_DP2INDEXEDTRIANGLEFAN,*LPD3DHAL_DP2INDEXEDTRIANGLEFAN; + +typedef struct _D3DHAL_DP2TRIANGLEFAN_IMM { + DWORD dwEdgeFlags; +} D3DHAL_DP2TRIANGLEFAN_IMM,*LPD3DHAL_DP2TRIANGLEFAN_IMM; + +/* render states */ +typedef struct _D3DHAL_DP2RENDERSTATE { + D3DRENDERSTATETYPE RenderState; + union { + D3DVALUE dvState; + DWORD dwState; + } DUMMYUNIONNAME; +} D3DHAL_DP2RENDERSTATE,*LPD3DHAL_DP2RENDERSTATE; + +typedef struct _D3DHAL_DP2TEXTURESTAGESTATE { + WORD wStage; + WORD TSState; + DWORD dwValue; +} D3DHAL_DP2TEXTURESTAGESTATE,*LPD3DHAL_DP2TEXTURESTAGESTATE; + +#define D3DTSS_TEXTUREMAP 0 + +typedef struct _D3DHAL_DP2VIEWPORTINFO { + DWORD dwX; + DWORD dwY; + DWORD dwWidth; + DWORD dwHeight; +} D3DHAL_DP2VIEWPORTINFO,*LPD3DHAL_DP2VIEWPORTINFO; + +typedef struct _D3DHAL_DP2WINFO { + D3DVALUE dwWNear; + D3DVALUE dwWFar; +} D3DHAL_DP2WINFO,*LPD3DHAL_DP2WINFO; + +typedef struct _D3DHAL_DP2SETPALETTE { + DWORD dwPaletteHandle; + DWORD dwPaletteFlags; + DWORD dwSurfaceHandle; +} D3DHAL_DP2SETPALETTE,*LPD3DHAL_DP2SETPALETTE; + +typedef struct _D3DHAL_DP2UPDATEPALETTE { + DWORD dwPaletteHandle; + WORD wStartIndex; + WORD wNumEntries; +} D3DHAL_DP2UPDATEPALETTE,*LPD3DHAL_DP2UPDATEPALETTE; + +typedef struct _D3DHAL_DP2ZRANGE { + D3DVALUE dvMinZ; + D3DVALUE dvMaxZ; +} D3DHAL_DP2ZRANGE,*LPD3DHAL_DP2ZRANGE; + +typedef D3DMATERIAL7 D3DHAL_DP2SETMATERIAL,*LPD3DHAL_DP2SETMATERIAL; + +typedef struct _D3DHAL_DP2SETLIGHT { + DWORD dwIndex; + DWORD dwDataType; +} D3DHAL_DP2SETLIGHT,*LPD3DHAL_DP2SETLIGHT; + +#define D3DHAL_SETLIGHT_ENABLE 0 +#define D3DHAL_SETLIGHT_DISABLE 1 +#define D3DHAL_SETLIGHT_DATA 2 + +typedef struct _D3DHAL_DP2CREATELIGHT { + DWORD dwIndex; +} D3DHAL_DP2CREATELIGHT,*LPD3DHAL_DP2CREATELIGHT; + +typedef struct _D3DHAL_DP2SETTRANSFORM { + D3DTRANSFORMSTATETYPE xfrmType; + D3DMATRIX matrix; +} D3DHAL_DP2SETTRANSFORM,*LPD3DHAL_DP2SETTRANSFORM; + +typedef struct _D3DHAL_DP2TEXBLT { + DWORD dwDDDestSurface; + DWORD dwDDSrcSurface; + POINT pDest; + RECTL rSrc; + DWORD dwFlags; +} D3DHAL_DP2TEXBLT,*LPD3DHAL_DP2TEXBLT; + +typedef struct _D3DHAL_DP2STATESET { + DWORD dwOperation; + DWORD dwParam; + D3DSTATEBLOCKTYPE sbType; +} D3DHAL_DP2STATESET,*LPD3DHAL_DP2STATESET; + +#define D3DHAL_STATESETBEGIN 0 +#define D3DHAL_STATESETEND 1 +#define D3DHAL_STATESETDELETE 2 +#define D3DHAL_STATESETEXECUTE 3 +#define D3DHAL_STATESETCAPTURE 4 + +typedef struct _D3DHAL_DP2SETPRIORITY { + DWORD dwDDSurface; + DWORD dwPriority; +} D3DHAL_DP2SETPRIORITY,*LPD3DHAL_DP2SETPRIORITY; + +typedef struct _D3DHAL_DP2SETRENDERTARGET { + DWORD hRenderTarget; + DWORD hZBuffer; +} D3DHAL_DP2SETRENDERTARGET,*LPD3DHAL_DP2SETRENDERTARGET; + +typedef struct _D3DHAL_DP2CLEAR { + DWORD dwFlags; + DWORD dwFillColor; + D3DVALUE dvFillDepth; + DWORD dwFillStencil; + RECT Rects[1]; +} D3DHAL_DP2CLEAR,*LPD3DHAL_DP2CLEAR; + +typedef struct _D3DHAL_DP2SETTEXLOD { + DWORD dwDDSurface; + DWORD dwLOD; +} D3DHAL_DP2SETTEXLOD,*LPD3DHAL_DP2SETTEXLOD; + +typedef struct _D3DHAL_VALIDATETEXTURESTAGESTATEDATA +{ + ULONG_PTR dwhContext; + DWORD dwFlags; + DWORD dwReserved; + DWORD dwNumPasses; + HRESULT ddrval; +} D3DHAL_VALIDATETEXTURESTAGESTATEDATA; + +/* FIXME: get definition for this */ +typedef DWORD D3DNTHAL_CONTEXTCREATEI; + +typedef D3DHAL_CONTEXTDESTROYDATA D3DNTHAL_CONTEXTDESTROYDATA; +typedef D3DNTHAL_CONTEXTDESTROYDATA *LPD3DNTHAL_CONTEXTDESTROYDATA; +typedef D3DHAL_VALIDATETEXTURESTAGESTATEDATA D3DNTHAL_VALIDATETEXTURESTAGESTATEDATA; +typedef D3DNTHAL_VALIDATETEXTURESTAGESTATEDATA *LPD3DNTHAL_VALIDATETEXTURESTAGESTATEDATA; +typedef D3DHAL_DRAWPRIMITIVES2DATA D3DNTHAL_DRAWPRIMITIVES2DATA; +typedef D3DNTHAL_DRAWPRIMITIVES2DATA *LPD3DNTHAL_DRAWPRIMITIVES2DATA; +typedef DDHAL_GETDRIVERSTATEDATA DD_GETDRIVERSTATEDATA; +typedef DD_GETDRIVERSTATEDATA *PDD_GETDRIVERSTATEDATA; +typedef DDHAL_ADDATTACHEDSURFACEDATA DD_ADDATTACHEDSURFACEDATA; +typedef DD_ADDATTACHEDSURFACEDATA *PDD_ADDATTACHEDSURFACEDATA; +typedef DDHAL_BLTDATA DD_BLTDATA; +typedef DD_BLTDATA *PDD_BLTDATA; +typedef DDHAL_BEGINMOCOMPFRAMEDATA DD_BEGINMOCOMPFRAMEDATA; +typedef DD_BEGINMOCOMPFRAMEDATA *PDD_BEGINMOCOMPFRAMEDATA; +typedef DDHAL_CANCREATESURFACEDATA DD_CANCREATESURFACEDATA; +typedef DD_CANCREATESURFACEDATA *PDD_CANCREATESURFACEDATA; +typedef DDHAL_COLORCONTROLDATA DD_COLORCONTROLDATA; +typedef DD_COLORCONTROLDATA *PDD_COLORCONTROLDATA; +typedef DDRAWI_DDRAWSURFACE_GBL DD_SURFACE_GLOBAL; +typedef DD_SURFACE_GLOBAL *PDD_SURFACE_GLOBAL; +typedef DDHAL_CREATEMOCOMPDATA DD_CREATEMOCOMPDATA; +typedef DD_CREATEMOCOMPDATA *PDD_CREATEMOCOMPDATA; +typedef DDRAWI_DDRAWSURFACE_LCL DD_SURFACE_LOCAL; +typedef DD_SURFACE_LOCAL *PDD_SURFACE_LOCAL; +typedef DDRAWI_DDRAWSURFACE_MORE DD_SURFACE_MORE; +typedef DD_SURFACE_MORE *PDD_SURFACE_MORE; +typedef DDHAL_DESTROYMOCOMPDATA DD_DESTROYMOCOMPDATA; +typedef DD_DESTROYMOCOMPDATA *PDD_DESTROYMOCOMPDATA; +typedef DDHAL_ENDMOCOMPFRAMEDATA DD_ENDMOCOMPFRAMEDATA; +typedef DD_ENDMOCOMPFRAMEDATA *PDD_ENDMOCOMPFRAMEDATA; +typedef DDHAL_FLIPDATA DD_FLIPDATA; +typedef DD_FLIPDATA *PDD_FLIPDATA; +typedef DDHAL_FLIPTOGDISURFACEDATA DD_FLIPTOGDISURFACEDATA; +typedef DD_FLIPTOGDISURFACEDATA *PDD_FLIPTOGDISURFACEDATA; +typedef DDHAL_GETAVAILDRIVERMEMORYDATA DD_GETAVAILDRIVERMEMORYDATA; +typedef DD_GETAVAILDRIVERMEMORYDATA *PDD_GETAVAILDRIVERMEMORYDATA; +typedef DDHAL_GETBLTSTATUSDATA DD_GETBLTSTATUSDATA; +typedef DD_GETBLTSTATUSDATA *PDD_GETBLTSTATUSDATA; +typedef DDHAL_GETDRIVERINFODATA DD_GETDRIVERINFODATA; +typedef DD_GETDRIVERINFODATA *PDD_GETDRIVERINFODATA; +typedef DDHAL_GETFLIPSTATUSDATA DD_GETFLIPSTATUSDATA; +typedef DD_GETFLIPSTATUSDATA *PDD_GETFLIPSTATUSDATA; +typedef DDHAL_GETINTERNALMOCOMPDATA DD_GETINTERNALMOCOMPDATA; +typedef DD_GETINTERNALMOCOMPDATA *PDD_GETINTERNALMOCOMPDATA; +typedef DDHAL_GETMOCOMPCOMPBUFFDATA DD_GETMOCOMPCOMPBUFFDATA; +typedef DD_GETMOCOMPCOMPBUFFDATA *PDD_GETMOCOMPCOMPBUFFDATA; +typedef DDHAL_GETMOCOMPGUIDSDATA DD_GETMOCOMPGUIDSDATA; +typedef DD_GETMOCOMPGUIDSDATA *PDD_GETMOCOMPGUIDSDATA; +typedef DDHAL_GETMOCOMPFORMATSDATA DD_GETMOCOMPFORMATSDATA; +typedef DD_GETMOCOMPFORMATSDATA *PDD_GETMOCOMPFORMATSDATA; +typedef DDHAL_GETSCANLINEDATA DD_GETSCANLINEDATA; +typedef DD_GETSCANLINEDATA *PDD_GETSCANLINEDATA; +typedef DDHAL_LOCKDATA DD_LOCKDATA; +typedef DD_LOCKDATA *PDD_LOCKDATA; +typedef DDHALINFO DD_HALINFO; +typedef DDHAL_QUERYMOCOMPSTATUSDATA DD_QUERYMOCOMPSTATUSDATA; +typedef DD_QUERYMOCOMPSTATUSDATA *PDD_QUERYMOCOMPSTATUSDATA; +typedef DDHAL_RENDERMOCOMPDATA DD_RENDERMOCOMPDATA; +typedef DD_RENDERMOCOMPDATA *PDD_RENDERMOCOMPDATA; +typedef DDHAL_SETCOLORKEYDATA DD_SETCOLORKEYDATA; +typedef DD_SETCOLORKEYDATA *PDD_SETCOLORKEYDATA; +typedef DDHAL_SETEXCLUSIVEMODEDATA DD_SETEXCLUSIVEMODEDATA; +typedef DD_SETEXCLUSIVEMODEDATA *PDD_SETEXCLUSIVEMODEDATA; +typedef DDHAL_SETOVERLAYPOSITIONDATA DD_SETOVERLAYPOSITIONDATA; +typedef DD_SETOVERLAYPOSITIONDATA *PDD_SETOVERLAYPOSITIONDATA; +typedef DDHAL_UNLOCKDATA DD_UNLOCKDATA; +typedef DD_UNLOCKDATA *PDD_UNLOCKDATA; +typedef DDHAL_CREATESURFACEDATA DD_CREATESURFACEDATA; +typedef DD_CREATESURFACEDATA *LPDD_CREATESURFACEDATA; +typedef DDHAL_UPDATEOVERLAYDATA DD_UPDATEOVERLAYDATA; +typedef DD_UPDATEOVERLAYDATA *PDD_UPDATEOVERLAYDATA; +typedef DDHAL_WAITFORVERTICALBLANKDATA DD_WAITFORVERTICALBLANKDATA; +typedef DD_WAITFORVERTICALBLANKDATA *PDD_WAITFORVERTICALBLANKDATA; +typedef D3DHAL_CALLBACKS D3DNTHAL_CALLBACKS; +typedef D3DNTHAL_CALLBACKS *LPD3DNTHAL_CALLBACKS; +typedef D3DHAL_GLOBALDRIVERDATA D3DNTHAL_GLOBALDRIVERDATA; +typedef D3DNTHAL_GLOBALDRIVERDATA *LPD3DNTHAL_GLOBALDRIVERDATA; +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* __WINE_DDRAWI_H */ diff --git a/include/ddk/dbgfuncs.h b/include/ddk/dbgfuncs.h index 96dd2f6..bfa65bd 100644 --- a/include/ddk/dbgfuncs.h +++ b/include/ddk/dbgfuncs.h @@ -2,22 +2,9 @@ #define __INCLUDE_DDK_DBGFUNCS_H /* $Id$ */ -#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 VOID STDCALL DbgBreakPointWithStatus (ULONG Status); VOID STDCALL DbgBreakPoint(VOID); ULONG DbgPrint(PCH Format,...); VOID STDCALL DbgPrompt (PCH OutputString, PCH InputString, USHORT InputSize); - -#define DBG_GET_SHOW_FACILITY 0x0001 -#define DBG_GET_SHOW_SEVERITY 0x0002 -#define DBG_GET_SHOW_ERRCODE 0x0004 -#define DBG_GET_SHOW_ERRTEXT 0x0008 -VOID DbgGetErrorText(NTSTATUS ErrorCode, PUNICODE_STRING ErrorText, ULONG Flags); -VOID DbgPrintErrorMessage(NTSTATUS ErrorCode); - #endif /* __INCLUDE_DDK_DBGFUNCS_H */ diff --git a/include/ddk/ddrawi.h b/include/ddk/ddrawi.h new file mode 100644 index 0000000..8d617a1 --- /dev/null +++ b/include/ddk/ddrawi.h @@ -0,0 +1,1332 @@ +/* + * DirectDraw driver interface + * (DirectX 7 version) + * + * Copyright (C) 2001 Ove Kaaven + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * 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. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef __WINE_DDRAWI_H +#define __WINE_DDRAWI_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +typedef struct _DDVIDEOPORTCAPS *LPDDVIDEOPORTCAPS; /* should be in dvp.h */ +typedef struct _DDKERNELCAPS *LPDDKERNELCAPS; /* should be in ddkernel.h */ +typedef struct _VMEMHEAP *LPVMEMHEAP; /* should be in dmemmgr.h */ + +#define DDAPI WINAPI + +/* the DirectDraw versions */ +#define DD_VERSION 0x0200 /* compatibility version */ +#define DD_RUNTIME_VERSION 0x0700 /* actual version */ + +/* the HAL version returned from QUERYESCSUPPORT - DCICOMMAND */ +#define DD_HAL_VERSION 0x0100 + +/* more DCICOMMAND escapes */ +#define DDCREATEDRIVEROBJECT 10 +#define DDGET32BITDRIVERNAME 11 +#define DDNEWCALLBACKFNS 12 +#define DDVERSIONINFO 13 + +#define MAX_DRIVER_NAME CCHDEVICENAME + +/***************************************************************************** + * Initialization stuff + */ +typedef struct { + char szName[260]; + char szEntryPoint[64]; + DWORD dwContext; +} DD32BITDRIVERDATA,*LPDD32BITDRIVERDATA; + +typedef struct { + DWORD dwHALVersion; + ULONG_PTR dwReserved1; + ULONG_PTR dwReserved2; +} DDVERSIONDATA,*LPDDVERSIONDATA; + +typedef DWORD (PASCAL *LPDD32BITDRIVERINIT)(DWORD dwContext); + +/* pointer to video memory */ +typedef ULONG_PTR FLATPTR; + +/* predeclare some structures */ +typedef struct _DDHALINFO *LPDDHALINFO; +typedef struct _DDRAWI_DIRECTDRAW_INT *LPDDRAWI_DIRECTDRAW_INT; +typedef struct _DDRAWI_DIRECTDRAW_LCL *LPDDRAWI_DIRECTDRAW_LCL; +typedef struct _DDRAWI_DIRECTDRAW_GBL *LPDDRAWI_DIRECTDRAW_GBL; +typedef struct _DDRAWI_DDRAWSURFACE_INT *LPDDRAWI_DDRAWSURFACE_INT; +typedef struct _DDRAWI_DDRAWSURFACE_LCL *LPDDRAWI_DDRAWSURFACE_LCL; +typedef struct _DDRAWI_DDRAWSURFACE_GBL *LPDDRAWI_DDRAWSURFACE_GBL; +typedef struct _DDRAWI_DDRAWSURFACE_MORE *LPDDRAWI_DDRAWSURFACE_MORE; +typedef struct _DDRAWI_DDRAWSURFACE_GBL_MORE *LPDDRAWI_DDRAWSURFACE_GBL_MORE; +typedef struct _DDRAWI_DDRAWPALETTE_INT *LPDDRAWI_DDRAWPALETTE_INT; +typedef struct _DDRAWI_DDRAWPALETTE_LCL *LPDDRAWI_DDRAWPALETTE_LCL; +typedef struct _DDRAWI_DDRAWPALETTE_GBL *LPDDRAWI_DDRAWPALETTE_GBL; +typedef struct _DDRAWI_DDRAWCLIPPER_INT *LPDDRAWI_DDRAWCLIPPER_INT; +typedef struct _DDRAWI_DDRAWCLIPPER_LCL *LPDDRAWI_DDRAWCLIPPER_LCL; +typedef struct _DDRAWI_DDRAWCLIPPER_GBL *LPDDRAWI_DDRAWCLIPPER_GBL; +typedef struct _DDRAWI_DDVIDEOPORT_INT *LPDDRAWI_DDVIDEOPORT_INT; +typedef struct _DDRAWI_DDVIDEOPORT_LCL *LPDDRAWI_DDVIDEOPORT_LCL; +typedef struct _DDRAWI_DDMOTIONCOMP_INT *LPDDRAWI_DDMOTIONCOMP_INT; +typedef struct _DDRAWI_DDMOTIONCOMP_LCL *LPDDRAWI_DDMOTIONCOMP_LCL; + +/***************************************************************************** + * driver->ddraw callbacks + */ +typedef BOOL (DDAPI *LPDDHAL_SETINFO)(LPDDHALINFO lpDDHalInfo, BOOL reset); +typedef FLATPTR (DDAPI *LPDDHAL_VIDMEMALLOC)(LPDDRAWI_DIRECTDRAW_GBL lpDD, int heap, DWORD dwWidth, DWORD dwHeight); +typedef void (DDAPI *LPDDHAL_VIDMEMFREE)(LPDDRAWI_DIRECTDRAW_GBL lpDD, int heap, FLATPTR fpMem); + +typedef struct { + DWORD dwSize; + LPDDHAL_SETINFO lpSetInfo; + LPDDHAL_VIDMEMALLOC lpVidMemAlloc; + LPDDHAL_VIDMEMFREE lpVidMemFree; +} DDHALDDRAWFNS,*LPDDHALDDRAWFNS; + +/***************************************************************************** + * mode info structure + */ +typedef struct _DDHALMODEINFO { + DWORD dwWidth; + DWORD dwHeight; + LONG lPitch; + DWORD dwBPP; + WORD wFlags; + WORD wRefreshRate; + DWORD dwRBitMask; + DWORD dwGBitMask; + DWORD dwBBitMask; + DWORD dwAlphaBitMask; +} DDHALMODEINFO,*LPDDHALMODEINFO; + +#define DDMODEINFO_PALETTIZED 0x0001 +#define DDMODEINFO_MODEX 0x0002 +#define DDMODEINFO_UNSUPPORTED 0x0004 +#define DDMODEINFO_STANDARDVGA 0x0008 +#define DDMODEINFO_MAXREFRESH 0x0010 +#define DDMODEINFO_STEREO 0x0020 + +/***************************************************************************** + * video memory info structure + */ +typedef struct _VIDMEM { + DWORD dwFlags; + FLATPTR fpStart; + union { + FLATPTR fpEnd; + DWORD dwWidth; + } DUMMYUNIONNAME1; + DDSCAPS ddsCaps; + DDSCAPS ddsCapsAlt; + union { + LPVMEMHEAP lpHeap; + DWORD dwHeight; + } DUMMYUNIONNAME2; +} VIDMEM,*LPVIDMEM; + +#define VIDMEM_ISLINEAR 0x00000001 +#define VIDMEM_ISRECTANGULAR 0x00000002 +#define VIDMEM_ISHEAP 0x00000004 +#define VIDMEM_ISNONLOCAL 0x00000008 +#define VIDMEM_ISWC 0x00000010 +#define VIDMEM_ISDISABLED 0x00000020 + +typedef struct _VIDMEMINFO { + FLATPTR fpPrimary; + DWORD dwFlags; + DWORD dwDisplayWidth; + DWORD dwDisplayHeight; + LONG lDisplayPitch; + DDPIXELFORMAT ddpfDisplay; + DWORD dwOffscreenAlign; + DWORD dwOverlayAlign; + DWORD dwTextureAlign; + DWORD dwZBufferAlign; + DWORD dwAlphaAlign; + DWORD dwNumHeaps; + LPVIDMEM pvmList; +} VIDMEMINFO,*LPVIDMEMINFO; + +typedef struct _HEAPALIAS { + FLATPTR fpVidMem; + LPVOID lpAlias; + DWORD dwAliasSize; +} HEAPALIAS,*LPHEAPALIAS; + +typedef struct _HEAPALIASINFO { + DWORD dwRefCnt; + DWORD dwFlags; + DWORD dwNumHeaps; + LPHEAPALIAS lpAliases; +} HEAPALIASINFO,*LPHEAPALIASINFO; + +#define HEAPALIASINFO_MAPPEDREAL 0x00000001 +#define HEAPALIASINFO_MAPPEDDUMMY 0x00000002 + +/***************************************************************************** + * capabilities structures + */ +typedef struct _DDCORECAPS { + DWORD dwSize; + DWORD dwCaps; + DWORD dwCaps2; + DWORD dwCKeyCaps; + DWORD dwFXCaps; + DWORD dwFXAlphaCaps; + DWORD dwPalCaps; + DWORD dwSVCaps; + DWORD dwAlphaBltConstBitDepths; + DWORD dwAlphaBltPixelBitDepths; + DWORD dwAlphaBltSurfaceBitDepths; + DWORD dwAlphaOverlayConstBitDepths; + DWORD dwAlphaOverlayPixelBitDepths; + DWORD dwAlphaOverlaySurfaceBitDepths; + DWORD dwZBufferBitDepths; + DWORD dwVidMemTotal; + DWORD dwVidMemFree; + DWORD dwMaxVisibleOverlays; + DWORD dwCurrVisibleOverlays; + DWORD dwNumFourCCCodes; + DWORD dwAlignBoundarySrc; + DWORD dwAlignSizeSrc; + DWORD dwAlignBoundaryDest; + DWORD dwAlignSizeDest; + DWORD dwAlignStrideAlign; + DWORD dwRops[DD_ROP_SPACE]; + DDSCAPS ddsCaps; + DWORD dwMinOverlayStretch; + DWORD dwMaxOverlayStretch; + DWORD dwMinLiveVideoStretch; + DWORD dwMaxLiveVideoStretch; + DWORD dwMinHwCodecStretch; + DWORD dwMaxHwCodecStretch; + DWORD dwReserved1; + DWORD dwReserved2; + DWORD dwReserved3; + DWORD dwSVBCaps; + DWORD dwSVBCKeyCaps; + DWORD dwSVBFXCaps; + DWORD dwSVBRops[DD_ROP_SPACE]; + DWORD dwVSBCaps; + DWORD dwVSBCKeyCaps; + DWORD dwVSBFXCaps; + DWORD dwVSBRops[DD_ROP_SPACE]; + DWORD dwSSBCaps; + DWORD dwSSBCKeyCaps; + DWORD dwSSBFXCaps; + DWORD dwSSBRops[DD_ROP_SPACE]; + DWORD dwMaxVideoPorts; + DWORD dwCurrVideoPorts; + DWORD dwSVBCaps2; +} DDCORECAPS,*LPDDCORECAPS; + +typedef struct _DDNONLOCALVIDMEMCAPS { + DWORD dwSize; + DWORD dwNLVBCaps; + DWORD dwNLVBCaps2; + DWORD dwNLVBCKeyCaps; + DWORD dwNLVBFXCaps; + DWORD dwNLVBRops[DD_ROP_SPACE]; +} DDNONLOCALVIDMEMCAPS,*LPDDNONLOCALVIDMEMCAPS; + +typedef struct _DDSCAPSEX { + DWORD dwCaps2; + DWORD dwCaps3; + DWORD dwCaps4; +} DDSCAPSEX,*LPDDSCAPSEX; + +#define DDSCAPS_EXECUTEBUFFER DDSCAPS_RESERVED2 +#define DDSCAPS2_VERTEXBUFFER DDSCAPS2_RESERVED1 +#define DDSCAPS2_COMMANDBUFFER DDSCAPS2_RESERVED2 + +/***************************************************************************** + * ddraw->driver callbacks + */ +#define DDHAL_DRIVER_NOTHANDLED 0 +#define DDHAL_DRIVER_HANDLED 1 +#define DDHAL_DRIVER_NOCKEYHW 2 + +typedef struct _DDHAL_DESTROYDRIVERDATA *LPDDHAL_DESTROYDRIVERDATA; +typedef struct _DDHAL_CREATESURFACEDATA *LPDDHAL_CREATESURFACEDATA; +typedef struct _DDHAL_DRVSETCOLORKEYDATA *LPDDHAL_DRVSETCOLORKEYDATA; +typedef struct _DDHAL_SETMODEDATA *LPDDHAL_SETMODEDATA; +typedef struct _DDHAL_WAITFORVERTICALBLANKDATA *LPDDHAL_WAITFORVERTICALBLANKDATA; +typedef struct _DDHAL_CANCREATESURFACEDATA *LPDDHAL_CANCREATESURFACEDATA; +typedef struct _DDHAL_CREATEPALETTEDATA *LPDDHAL_CREATEPALETTEDATA; +typedef struct _DDHAL_GETSCANLINEDATA *LPDDHAL_GETSCANLINEDATA; +typedef struct _DDHAL_SETEXCLUSIVEMODEDATA *LPDDHAL_SETEXCLUSIVEMODEDATA; +typedef struct _DDHAL_FLIPTOGDISURFACEDATA *LPDDHAL_FLIPTOGDISURFACEDATA; + +typedef DWORD (PASCAL *LPDDHAL_DESTROYDRIVER) (LPDDHAL_DESTROYDRIVERDATA); +typedef DWORD (PASCAL *LPDDHAL_CREATESURFACE) (LPDDHAL_CREATESURFACEDATA); +typedef DWORD (PASCAL *LPDDHAL_SETCOLORKEY) (LPDDHAL_DRVSETCOLORKEYDATA); +typedef DWORD (PASCAL *LPDDHAL_SETMODE) (LPDDHAL_SETMODEDATA); +typedef DWORD (PASCAL *LPDDHAL_WAITFORVERTICALBLANK)(LPDDHAL_WAITFORVERTICALBLANKDATA); +typedef DWORD (PASCAL *LPDDHAL_CANCREATESURFACE) (LPDDHAL_CANCREATESURFACEDATA ); +typedef DWORD (PASCAL *LPDDHAL_CREATEPALETTE) (LPDDHAL_CREATEPALETTEDATA); +typedef DWORD (PASCAL *LPDDHAL_GETSCANLINE) (LPDDHAL_GETSCANLINEDATA); +typedef DWORD (PASCAL *LPDDHAL_SETEXCLUSIVEMODE) (LPDDHAL_SETEXCLUSIVEMODEDATA); +typedef DWORD (PASCAL *LPDDHAL_FLIPTOGDISURFACE) (LPDDHAL_FLIPTOGDISURFACEDATA); + +typedef struct _DDHAL_DDCALLBACKS { + DWORD dwSize; + DWORD dwFlags; + LPDDHAL_DESTROYDRIVER DestroyDriver; + LPDDHAL_CREATESURFACE CreateSurface; + LPDDHAL_SETCOLORKEY SetColorKey; + LPDDHAL_SETMODE SetMode; + LPDDHAL_WAITFORVERTICALBLANK WaitForVerticalBlank; + LPDDHAL_CANCREATESURFACE CanCreateSurface; + LPDDHAL_CREATEPALETTE CreatePalette; + LPDDHAL_GETSCANLINE GetScanLine; + /* DirectX 2 */ + LPDDHAL_SETEXCLUSIVEMODE SetExclusiveMode; + LPDDHAL_FLIPTOGDISURFACE FlipToGDISurface; +} DDHAL_DDCALLBACKS,*LPDDHAL_DDCALLBACKS; + +typedef struct _DDHAL_DESTROYSURFACEDATA *LPDDHAL_DESTROYSURFACEDATA; +typedef struct _DDHAL_FLIPDATA *LPDDHAL_FLIPDATA; +typedef struct _DDHAL_SETCLIPLISTDATA *LPDDHAL_SETCLIPLISTDATA; +typedef struct _DDHAL_LOCKDATA *LPDDHAL_LOCKDATA; +typedef struct _DDHAL_UNLOCKDATA *LPDDHAL_UNLOCKDATA; +typedef struct _DDHAL_BLTDATA *LPDDHAL_BLTDATA; +typedef struct _DDHAL_SETCOLORKEYDATA *LPDDHAL_SETCOLORKEYDATA; +typedef struct _DDHAL_ADDATTACHEDSURFACEDATA *LPDDHAL_ADDATTACHEDSURFACEDATA; +typedef struct _DDHAL_GETBLTSTATUSDATA *LPDDHAL_GETBLTSTATUSDATA; +typedef struct _DDHAL_GETFLIPSTATUSDATA *LPDDHAL_GETFLIPSTATUSDATA; +typedef struct _DDHAL_UPDATEOVERLAYDATA *LPDDHAL_UPDATEOVERLAYDATA; +typedef struct _DDHAL_SETOVERLAYPOSITIONDATA *LPDDHAL_SETOVERLAYPOSITIONDATA; +typedef struct _DDHAL_SETPALETTEDATA *LPDDHAL_SETPALETTEDATA; + +typedef DWORD (PASCAL *LPDDHALSURFCB_DESTROYSURFACE) (LPDDHAL_DESTROYSURFACEDATA); +typedef DWORD (PASCAL *LPDDHALSURFCB_FLIP) (LPDDHAL_FLIPDATA); +typedef DWORD (PASCAL *LPDDHALSURFCB_SETCLIPLIST) (LPDDHAL_SETCLIPLISTDATA); +typedef DWORD (PASCAL *LPDDHALSURFCB_LOCK) (LPDDHAL_LOCKDATA); +typedef DWORD (PASCAL *LPDDHALSURFCB_UNLOCK) (LPDDHAL_UNLOCKDATA); +typedef DWORD (PASCAL *LPDDHALSURFCB_BLT) (LPDDHAL_BLTDATA); +typedef DWORD (PASCAL *LPDDHALSURFCB_SETCOLORKEY) (LPDDHAL_SETCOLORKEYDATA); +typedef DWORD (PASCAL *LPDDHALSURFCB_ADDATTACHEDSURFACE)(LPDDHAL_ADDATTACHEDSURFACEDATA); +typedef DWORD (PASCAL *LPDDHALSURFCB_GETBLTSTATUS) (LPDDHAL_GETBLTSTATUSDATA); +typedef DWORD (PASCAL *LPDDHALSURFCB_GETFLIPSTATUS) (LPDDHAL_GETFLIPSTATUSDATA); +typedef DWORD (PASCAL *LPDDHALSURFCB_UPDATEOVERLAY) (LPDDHAL_UPDATEOVERLAYDATA); +typedef DWORD (PASCAL *LPDDHALSURFCB_SETOVERLAYPOSITION)(LPDDHAL_SETOVERLAYPOSITIONDATA); +typedef DWORD (PASCAL *LPDDHALSURFCB_SETPALETTE) (LPDDHAL_SETPALETTEDATA); + +typedef struct _DDHAL_DDSURFACECALLBACKS { + DWORD dwSize; + DWORD dwFlags; + LPDDHALSURFCB_DESTROYSURFACE DestroySurface; + LPDDHALSURFCB_FLIP Flip; + LPDDHALSURFCB_SETCLIPLIST SetClipList; + LPDDHALSURFCB_LOCK Lock; + LPDDHALSURFCB_UNLOCK Unlock; + LPDDHALSURFCB_BLT Blt; + LPDDHALSURFCB_SETCOLORKEY SetColorKey; + LPDDHALSURFCB_ADDATTACHEDSURFACE AddAttachedSurface; + LPDDHALSURFCB_GETBLTSTATUS GetBltStatus; + LPDDHALSURFCB_GETFLIPSTATUS GetFlipStatus; + LPDDHALSURFCB_UPDATEOVERLAY UpdateOverlay; + LPDDHALSURFCB_SETOVERLAYPOSITION SetOverlayPosition; + LPVOID reserved4; + LPDDHALSURFCB_SETPALETTE SetPalette; +} DDHAL_DDSURFACECALLBACKS,*LPDDHAL_DDSURFACECALLBACKS; + +typedef struct _DDHAL_DESTROYPALETTEDATA *LPDDHAL_DESTROYPALETTEDATA; +typedef struct _DDHAL_SETENTRIESDATA *LPDDHAL_SETENTRIESDATA; + +typedef DWORD (PASCAL *LPDDHALPALCB_DESTROYPALETTE)(LPDDHAL_DESTROYPALETTEDATA); +typedef DWORD (PASCAL *LPDDHALPALCB_SETENTRIES) (LPDDHAL_SETENTRIESDATA); + +typedef struct _DDHAL_DDPALETTECALLBACKS { + DWORD dwSize; + DWORD dwFlags; + LPDDHALPALCB_DESTROYPALETTE DestroyPalette; + LPDDHALPALCB_SETENTRIES SetEntries; +} DDHAL_DDPALETTECALLBACKS,*LPDDHAL_DDPALETTECALLBACKS; + +typedef DWORD (PASCAL *LPDDHALEXEBUFCB_CANCREATEEXEBUF)(LPDDHAL_CANCREATESURFACEDATA); +typedef DWORD (PASCAL *LPDDHALEXEBUFCB_CREATEEXEBUF) (LPDDHAL_CREATESURFACEDATA); +typedef DWORD (PASCAL *LPDDHALEXEBUFCB_DESTROYEXEBUF) (LPDDHAL_DESTROYSURFACEDATA); +typedef DWORD (PASCAL *LPDDHALEXEBUFCB_LOCKEXEBUF) (LPDDHAL_LOCKDATA); +typedef DWORD (PASCAL *LPDDHALEXEBUFCB_UNLOCKEXEBUF) (LPDDHAL_UNLOCKDATA); + +typedef struct _DDHAL_DDEXEBUFCALLBACKS { + DWORD dwSize; + DWORD dwFlags; + LPDDHALEXEBUFCB_CANCREATEEXEBUF CanCreateExecuteBuffer; + LPDDHALEXEBUFCB_CREATEEXEBUF CreateExecuteBuffer; + LPDDHALEXEBUFCB_DESTROYEXEBUF DestroyExecuteBuffer; + LPDDHALEXEBUFCB_LOCKEXEBUF LockExecuteBuffer; + LPDDHALEXEBUFCB_UNLOCKEXEBUF UnlockExecuteBuffer; +} DDHAL_DDEXEBUFCALLBACKS,*LPDDHAL_DDEXEBUFCALLBACKS; + +typedef struct _DDHAL_GETAVAILDRIVERMEMORYDATA *LPDDHAL_GETAVAILDRIVERMEMORYDATA; +typedef struct _DDHAL_UPDATENONLOCALHEAPDATA *LPDDHAL_UPDATENONLOCALHEAPDATA; +typedef struct _DDHAL_GETHEAPALIGNMENTDATA *LPDDHAL_GETHEAPALIGNMENTDATA; + +typedef DWORD (PASCAL *LPDDHAL_GETAVAILDRIVERMEMORY)(LPDDHAL_GETAVAILDRIVERMEMORYDATA); +typedef DWORD (PASCAL *LPDDHAL_UPDATENONLOCALHEAP) (LPDDHAL_UPDATENONLOCALHEAPDATA); +typedef DWORD (PASCAL *LPDDHAL_GETHEAPALIGNMENT) (LPDDHAL_GETHEAPALIGNMENTDATA); + +typedef struct _DDHAL_DDMISCELLANEOUSCALLBACKS { + DWORD dwSize; + DWORD dwFlags; + LPDDHAL_GETAVAILDRIVERMEMORY GetAvailDriverMemory; + LPDDHAL_UPDATENONLOCALHEAP UpdateNonLocalHeap; + LPDDHAL_GETHEAPALIGNMENT GetHeapAlignment; + LPDDHALSURFCB_GETBLTSTATUS GetSysmemBltStatus; +} DDHAL_DDMISCELLANEOUSCALLBACKS,*LPDDHAL_DDMISCELLANEOUSCALLBACKS; + +typedef struct _DDHAL_CREATESURFACEEXDATA *LPDDHAL_CREATESURFACEEXDATA; +typedef struct _DDHAL_GETDRIVERSTATEDATA *LPDDHAL_GETDRIVERSTATEDATA; +typedef struct _DDHAL_DESTROYDDLOCALDATA *LPDDHAL_DESTROYDDLOCALDATA; + +typedef DWORD (PASCAL *LPDDHAL_CREATESURFACEEX)(LPDDHAL_CREATESURFACEEXDATA); +typedef DWORD (PASCAL *LPDDHAL_GETDRIVERSTATE) (LPDDHAL_GETDRIVERSTATEDATA); +typedef DWORD (PASCAL *LPDDHAL_DESTROYDDLOCAL) (LPDDHAL_DESTROYDDLOCALDATA); + +typedef struct _DDHAL_DDMISCELLANEOUS2CALLBACKS { + DWORD dwSize; + DWORD dwFlags; + LPVOID Reserved; + LPDDHAL_CREATESURFACEEX CreateSurfaceEx; + LPDDHAL_GETDRIVERSTATE GetDriverState; + LPDDHAL_DESTROYDDLOCAL DestroyDDLocal; +} DDHAL_DDMISCELLANEOUS2CALLBACKS,*LPDDHAL_DDMISCELLANEOUS2CALLBACKS; + +typedef HRESULT (WINAPI *LPDDGAMMACALIBRATORPROC)(LPDDGAMMARAMP, LPBYTE); + +/***************************************************************************** + * driver info structure + * + * The HAL is queried for additional callbacks via the GetDriverInfo callback. + */ +typedef struct _DDHAL_GETDRIVERINFODATA *LPDDHAL_GETDRIVERINFODATA; +typedef DWORD (PASCAL *LPDDHAL_GETDRIVERINFO)(LPDDHAL_GETDRIVERINFODATA); + +typedef struct _DDHALINFO { + DWORD dwSize; + LPDDHAL_DDCALLBACKS lpDDCallbacks; + LPDDHAL_DDSURFACECALLBACKS lpDDSurfaceCallbacks; + LPDDHAL_DDPALETTECALLBACKS lpDDPaletteCallbacks; + VIDMEMINFO vmiData; + DDCORECAPS ddCaps; + DWORD dwMonitorFrequency; + LPDDHAL_GETDRIVERINFO GetDriverInfo; + DWORD dwModeIndex; + LPDWORD lpdwFourCC; + DWORD dwNumModes; + LPDDHALMODEINFO lpModeInfo; + DWORD dwFlags; + LPVOID lpPDevice; + DWORD hInstance; + /* DirectX 2 */ + ULONG_PTR lpD3DGlobalDriverData; + ULONG_PTR lpD3DHALCallbacks; + LPDDHAL_DDEXEBUFCALLBACKS lpDDExeBufCallbacks; +} DDHALINFO; + +#define DDHALINFO_ISPRIMARYDISPLAY 0x00000001 +#define DDHALINFO_MODEXILLEGAL 0x00000002 +#define DDHALINFO_GETDRIVERINFOSET 0x00000004 + +/* where the high-level ddraw implementation stores the callbacks */ +typedef struct _DDHAL_CALLBACKS { + DDHAL_DDCALLBACKS cbDDCallbacks; + DDHAL_DDSURFACECALLBACKS cbDDSurfaceCallbacks; + DDHAL_DDPALETTECALLBACKS cbDDPaletteCallbacks; + DDHAL_DDCALLBACKS HALDD; + DDHAL_DDSURFACECALLBACKS HALDDSurface; + DDHAL_DDPALETTECALLBACKS HALDDPalette; + DDHAL_DDCALLBACKS HELDD; + DDHAL_DDSURFACECALLBACKS HELDDSurface; + DDHAL_DDPALETTECALLBACKS HELDDPalette; + DDHAL_DDEXEBUFCALLBACKS cbDDExeBufCallbacks; + DDHAL_DDEXEBUFCALLBACKS HALDDExeBuf; + DDHAL_DDEXEBUFCALLBACKS HELDDExeBuf; + /* there's more... videoport, colorcontrol, misc, and motion compensation callbacks... */ +} DDHAL_CALLBACKS,*LPDDHAL_CALLBACKS; + +/***************************************************************************** + * parameter structures + */ +typedef struct _DDHAL_DESTROYDRIVERDATA { + LPDDRAWI_DIRECTDRAW_GBL lpDD; + HRESULT ddRVal; + LPDDHAL_DESTROYDRIVER DestroyDriver; +} DDHAL_DESTROYDRIVERDATA; + +typedef struct _DDHAL_SETMODEDATA { + LPDDRAWI_DIRECTDRAW_GBL lpDD; + DWORD dwModeIndex; + HRESULT ddRVal; + LPDDHAL_SETMODE SetMode; + BOOL inexcl; + BOOL useRefreshRate; +} DDHAL_SETMODEDATA; + +typedef struct _DDHAL_CREATESURFACEDATA { + LPDDRAWI_DIRECTDRAW_GBL lpDD; + LPDDSURFACEDESC lpDDSurfaceDesc; + LPDDRAWI_DDRAWSURFACE_LCL * lplpSList; + DWORD dwSCnt; + HRESULT ddRVal; + LPDDHAL_CREATESURFACE CreateSurface; +} DDHAL_CREATESURFACEDATA; + +typedef struct _DDHAL_CANCREATESURFACEDATA { + LPDDRAWI_DIRECTDRAW_GBL lpDD; + LPDDSURFACEDESC lpDDSurfaceDesc; + DWORD bIsDifferentPixelFormat; + HRESULT ddRVal; + LPDDHAL_CANCREATESURFACE CanCreateSurface; +} DDHAL_CANCREATESURFACEDATA; + +typedef struct _DDHAL_CREATEPALETTEDATA { + LPDDRAWI_DIRECTDRAW_GBL lpDD; + LPDDRAWI_DDRAWPALETTE_GBL lpDDPalette; + LPPALETTEENTRY lpColorTable; + HRESULT ddRVal; + LPDDHAL_CREATEPALETTE CreatePalette; + BOOL is_excl; +} DDHAL_CREATEPALETTEDATA; + +typedef struct _DDHAL_SETEXCLUSIVEMODEDATA { + LPDDRAWI_DIRECTDRAW_GBL lpDD; + DWORD dwEnterExcl; + DWORD dwReserved; + HRESULT ddRVal; + LPDDHAL_SETEXCLUSIVEMODE SetExclusiveMode; +} DDHAL_SETEXCLUSIVEMODEDATA; + +/* surfaces */ +typedef struct _DDHAL_DESTROYSURFACEDATA { + LPDDRAWI_DIRECTDRAW_GBL lpDD; + LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; + HRESULT ddRVal; + LPDDHALSURFCB_DESTROYSURFACE DestroySurface; +} DDHAL_DESTROYSURFACEDATA; + +typedef struct _DDHAL_FLIPDATA { + LPDDRAWI_DIRECTDRAW_GBL lpDD; + LPDDRAWI_DDRAWSURFACE_LCL lpSurfCurr; + LPDDRAWI_DDRAWSURFACE_LCL lpSurfTarg; + DWORD dwFlags; + HRESULT ddRVal; + LPDDHALSURFCB_FLIP Flip; + LPDDRAWI_DDRAWSURFACE_LCL lpSurfCurrLeft; + LPDDRAWI_DDRAWSURFACE_LCL lpSurfTargLeft; +} DDHAL_FLIPDATA; + +typedef struct _DDHAL_LOCKDATA { + LPDDRAWI_DIRECTDRAW_GBL lpDD; + LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; + DWORD bHasRect; + RECTL rArea; + LPVOID lpSurfData; + HRESULT ddRVal; + LPDDHALSURFCB_LOCK Lock; + DWORD dwFlags; +} DDHAL_LOCKDATA; + +typedef struct _DDHAL_UNLOCKDATA { + LPDDRAWI_DIRECTDRAW_GBL lpDD; + LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; + HRESULT ddRVal; + LPDDHALSURFCB_UNLOCK Unlock; +} DDHAL_UNLOCKDATA; + +typedef struct _DDHAL_BLTDATA { + LPDDRAWI_DIRECTDRAW_GBL lpDD; + LPDDRAWI_DDRAWSURFACE_LCL lpDDDestSurface; + RECTL rDest; + LPDDRAWI_DDRAWSURFACE_LCL lpDDSrcSurface; + RECTL rSrc; + DWORD dwFlags; + DWORD dwROPFlags; + DDBLTFX bltFX; + HRESULT ddRVal; + LPDDHALSURFCB_BLT Blt; + BOOL IsClipped; + RECTL rOrigDest; + RECTL rOrigSrc; + DWORD dwRectCnt; + LPRECT prDestRects; +} DDHAL_BLTDATA; + +typedef struct _DDHAL_SETPALETTEDATA { + LPDDRAWI_DIRECTDRAW_GBL lpDD; + LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; + LPDDRAWI_DDRAWPALETTE_GBL lpDDPalette; + HRESULT ddRVal; + LPDDHALSURFCB_SETPALETTE SetPalette; + BOOL Attach; +} DDHAL_SETPALETTEDATA; + +/* palettes */ +typedef struct _DDHAL_DESTROYPALETTEDATA { + LPDDRAWI_DIRECTDRAW_GBL lpDD; + LPDDRAWI_DDRAWPALETTE_GBL lpDDPalette; + HRESULT ddRVal; + LPDDHALPALCB_DESTROYPALETTE DestroyPalette; +} DDHAL_DESTROYPALETTEDATA; + +typedef struct _DDHAL_SETENTRIESDATA { + LPDDRAWI_DIRECTDRAW_GBL lpDD; + LPDDRAWI_DDRAWPALETTE_GBL lpDDPalette; + DWORD dwBase; + DWORD dwNumEntries; + LPPALETTEENTRY lpEntries; + HRESULT ddRVal; + LPDDHALPALCB_SETENTRIES SetEntries; +} DDHAL_SETENTRIESDATA; + +typedef struct _DDHAL_GETDRIVERINFODATA { + DWORD dwSize; + DWORD dwFlags; + GUID guidInfo; + DWORD dwExpectedSize; + LPVOID lpvData; + DWORD dwActualSize; + HRESULT ddRVal; + ULONG_PTR dwContext; +} DDHAL_GETDRIVERINFODATA; + +/***************************************************************************** + * high-level ddraw implementation structures + */ +typedef DWORD IUnknown; /* FIXME: implement proper definition */ +typedef struct _IUNKNOWN_LIST { + struct _IUNKNOWN_LIST * lpLink; + LPGUID lpGuid; + IUnknown * lpIUnknown; +} IUNKNOWN_LIST,*LPIUNKNOWN_LIST; + +typedef struct _PROCESS_LIST { + struct _PROCESS_LIST * lpLink; + DWORD dwProcessId; + DWORD dwRefCnt; + DWORD dwAlphaDepth; + DWORD dwZDepth; +} PROCESS_LIST,*LPPROCESS_LIST; + +typedef struct _ATTACHLIST { + DWORD dwFlags; + struct _ATTACHLIST * lpLink; + LPDDRAWI_DDRAWSURFACE_LCL lpAttached; + LPDDRAWI_DDRAWSURFACE_INT lpIAttached; +} ATTACHLIST,*LPATTACHLIST; + +#define DDAL_IMPLICIT 0x00000001 + +typedef struct _ACCESSRECTLIST { + struct _ACCESSRECTLIST * lpLink; + RECT rDest; + LPDDRAWI_DIRECTDRAW_LCL lpOwner; + LPVOID lpSurfaceData; + DWORD dwFlags; + LPHEAPALIASINFO lpHeapAliasInfo; +} ACCESSRECTLIST,*LPACCESSRECTLIST; + +#define ACCESSRECT_VRAMSTYLE 0x00000001 +#define ACCESSRECT_NOTHOLDINGWIN16LOCK 0x00000002 +#define ACCESSRECT_BROKEN 0x00000004 + +typedef struct _DBLNODE { + struct _DBLNODE * next; + struct _DBLNODE * prev; + LPDDRAWI_DDRAWSURFACE_LCL object; + LPDDRAWI_DDRAWSURFACE_INT object_int; +} DBLNODE,*LPDBLNODE; + +typedef struct _DDRAWI_DIRECTDRAW_INT { + LPVOID lpVtbl; + LPDDRAWI_DIRECTDRAW_LCL lpLcl; + LPDDRAWI_DIRECTDRAW_INT lpLink; + DWORD dwIntRefCnt; +} DDRAWI_DIRECTDRAW_INT; + +typedef struct _DDRAWI_DIRECTDRAW_LCL { + DWORD lpDDMore; + LPDDRAWI_DIRECTDRAW_GBL lpGbl; + DWORD dwUnused0; + DWORD dwLocalFlags; + DWORD dwLocalRefCnt; + DWORD dwProcessId; + IUnknown * pUnkOuter; + DWORD dwObsolete1; + ULONG_PTR hWnd; + ULONG_PTR hDC; + DWORD dwErrorMode; + LPDDRAWI_DDRAWSURFACE_INT lpPrimary; + LPDDRAWI_DDRAWSURFACE_INT lpCB; + DWORD dwPreferredMode; + /* DirectX 2 */ + HINSTANCE hD3DInstance; + IUnknown * pD3DIUnknown; + LPDDHAL_CALLBACKS lpDDCB; + ULONG_PTR hDDVxd; + /* DirectX 5.0 */ + DWORD dwAppHackFlags; + /* DirectX 5.0A */ + ULONG_PTR hFocusWnd; + DWORD dwHotTracking; + DWORD dwIMEState; + /* DirectX 6.0 */ + ULONG_PTR hWndPopup; + ULONG_PTR hDD; + ULONG_PTR hGammaCalibrator; + LPDDGAMMACALIBRATORPROC lpGammaCalibrator; +} DDRAWI_DIRECTDRAW_LCL; + +#define DDRAWILCL_HASEXCLUSIVEMODE 0x00000001 +#define DDRAWILCL_ISFULLSCREEN 0x00000002 +#define DDRAWILCL_SETCOOPCALLED 0x00000004 +#define DDRAWILCL_ACTIVEYES 0x00000008 +#define DDRAWILCL_ACTIVENO 0x00000010 +#define DDRAWILCL_HOOKEDHWND 0x00000020 +#define DDRAWILCL_ALLOWMODEX 0x00000040 +#define DDRAWILCL_V1SCLBEHAVIOUR 0x00000080 +#define DDRAWILCL_MODEHASBEENCHANGED 0x00000100 +#define DDRAWILCL_CREATEDWINDOW 0x00000200 +#define DDRAWILCL_DIRTYDC 0x00000400 +#define DDRAWILCL_DISABLEINACTIVATE 0x00000800 +#define DDRAWILCL_CURSORCLIPPED 0x00001000 +#define DDRAWILCL_EXPLICITMONITOR 0x00002000 +#define DDRAWILCL_MULTITHREADED 0x00004000 +#define DDRAWILCL_FPUSETUP 0x00008000 +#define DDRAWILCL_POWEREDDOWN 0x00010000 +#define DDRAWILCL_DIRECTDRAW7 0x00020000 +#define DDRAWILCL_ATTEMPTEDD3DCONTEXT 0x00040000 +#define DDRAWILCL_FPUPRESERVE 0x00080000 + +typedef struct _DDRAWI_DIRECTDRAW_GBL { + DWORD dwRefCnt; + DWORD dwFlags; + FLATPTR fpPrimaryOrig; + DDCORECAPS ddCaps; + DWORD dwInternal1; + DWORD dwUnused1[9]; + LPDDHAL_CALLBACKS lpDDCBtmp; + LPDDRAWI_DDRAWSURFACE_INT dsList; + LPDDRAWI_DDRAWPALETTE_INT palList; + LPDDRAWI_DDRAWCLIPPER_INT clipperList; + LPDDRAWI_DIRECTDRAW_GBL lp16DD; + DWORD dwMaxOverlays; + DWORD dwCurrOverlays; + DWORD dwMonitorFrequency; + DDCORECAPS ddHELCaps; + DWORD dwUnused2[50]; + DDCOLORKEY ddckCKDestOverlay; + DDCOLORKEY ddckCKSrcOverlay; + VIDMEMINFO vmiData; + LPVOID lpDriverHandle; + LPDDRAWI_DIRECTDRAW_LCL lpExclusiveOwner; + DWORD dwModeIndex; + DWORD dwModeIndexOrig; + DWORD dwNumFourCC; + LPDWORD lpdwFourCC; + DWORD dwNumModes; + LPDDHALMODEINFO lpModeInfo; + PROCESS_LIST plProcessList; + DWORD dwSurfaceLockCount; + DWORD dwAliasedLockCnt; + ULONG_PTR dwReserved3; + ULONG_PTR hDD; + char cObsolete[12]; + DWORD dwReserved1; + DWORD dwReserved2; + DBLNODE dbnOverlayRoot; + volatile LPWORD lpwPDeviceFlags; + DWORD dwPDevice; + DWORD dwWin16LockCnt; + DWORD dwUnused3; + DWORD hInstance; + DWORD dwEvent16; + DWORD dwSaveNumModes; + /* DirectX 2 */ + ULONG_PTR lpD3DGlobalDriverData; + ULONG_PTR lpD3DHALCallbacks; + DDCORECAPS ddBothCaps; + /* DirectX 5.0 */ + LPDDVIDEOPORTCAPS lpDDVideoPortCaps; + LPDDRAWI_DDVIDEOPORT_INT dvpList; + ULONG_PTR lpD3DHALCallbacks2; + RECT rectDevice; + DWORD cMonitors; + LPVOID gpbmiSrc; + LPVOID gpbmiDest; + LPHEAPALIASINFO phaiHeapAliases; + ULONG_PTR hKernelHandle; + ULONG_PTR pfnNotifyProc; + LPDDKERNELCAPS lpDDKernelCaps; + LPDDNONLOCALVIDMEMCAPS lpddNLVCaps; + LPDDNONLOCALVIDMEMCAPS lpddNLVHELCaps; + LPDDNONLOCALVIDMEMCAPS lpddNLVBothCaps; + ULONG_PTR lpD3DExtendedCaps; + /* DirectX 5.0A */ + DWORD dwDOSBoxEvent; + RECT rectDesktop; + char cDriverName[MAX_DRIVER_NAME]; + /* DirectX 6.0 */ + ULONG_PTR lpD3DHALCallbacks3; + DWORD dwNumZPixelFormats; + LPDDPIXELFORMAT lpZPixelFormats; + LPDDRAWI_DDMOTIONCOMP_INT mcList; + DWORD hDDVxd; + DDSCAPSEX ddsCapsMore; +} DDRAWI_DIRECTDRAW_GBL; + +#define DDRAWI_VIRTUALDESKTOP 0x00000008 +#define DDRAWI_MODEX 0x00000010 +#define DDRAWI_DISPLAYDRV 0x00000020 +#define DDRAWI_FULLSCREEN 0x00000040 +#define DDRAWI_MODECHANGED 0x00000080 +#define DDRAWI_NOHARDWARE 0x00000100 +#define DDRAWI_PALETTEINIT 0x00000200 +#define DDRAWI_NOEMULATION 0x00000400 +/* more... */ + +/* surfaces */ +typedef struct _DDRAWI_DDRAWSURFACE_INT { + LPVOID lpVtbl; + LPDDRAWI_DDRAWSURFACE_LCL lpLcl; + LPDDRAWI_DDRAWSURFACE_INT lpLink; + DWORD dwIntRefCnt; +} DDRAWI_DDRAWSURFACE_INT; + +typedef struct _DDRAWI_DDRAWSURFACE_GBL { + DWORD dwRefCnt; + DWORD dwGlobalFlags; + union { + LPACCESSRECTLIST lpRectList; + DWORD dwBlockSizeY; + } DUMMYUNIONNAME1; + union { + LPVMEMHEAP lpVidMemHeap; + DWORD dwBlockSizeX; + } DUMMYUNIONNAME2; + union { + LPDDRAWI_DIRECTDRAW_GBL lpDD; + LPVOID lpDDHandle; + } DUMMYUNIONNAME3; + FLATPTR fpVidMem; + union { + LONG lPitch; + DWORD dwLinearSize; + } DUMMYUNIONNAME4; + WORD wHeight; + WORD wWidth; + DWORD dwUsageCount; + ULONG_PTR dwReserved1; /* for display driver use */ + /* optional (defaults to primary surface pixelformat) */ + DDPIXELFORMAT ddpfSurface; +} DDRAWI_DDRAWSURFACE_GBL; + +#define DDRAWISURFGBL_MEMFREE 0x00000001 +#define DDRAWISURFGBL_SYSMEMREQUESTED 0x00000002 +#define DDRAWISURFGBL_ISGDISURFACE 0x00000004 +#define DDRAWISURFGBL_SOFTWAREAUTOFLIP 0x00000008 +#define DDRAWISURFGBL_LOCKNOTHOLDINGWIN16LOCK 0x00000010 +#define DDRAWISURFGBL_LOCKVRAMSTYLE 0x00000020 +#define DDRAWISURFGBL_LOCKBROKEN 0x00000040 +#define DDRAWISURFGBL_IMPLICITHANDLE 0x00000080 +#define DDRAWISURFGBL_ISCLIENTMEM 0x00000100 +#define DDRAWISURFGBL_HARDWAREOPSOURCE 0x00000200 +#define DDRAWISURFGBL_HARDWAREOPDEST 0x00000400 +#define DDRAWISURFGBL_HARDWAREOPSTARTED 0x00000600 +#define DDRAWISURFGBL_VPORTINTERLEAVED 0x00000800 +#define DDRAWISURFGBL_VPORTDATA 0x00001000 +#define DDRAWISURFGBL_LATEALLOCATELINEAR 0x00002000 +#define DDRAWISURFGBL_SYSMEMEXECUTEBUFFER 0x00004000 +#define DDRAWISURFGBL_FASTLOCKHELD 0x00008000 +#define DDRAWISURFGBL_READONLYLOCKHELD 0x00010000 + +typedef struct _DDRAWI_DDRAWSURFACE_GBL_MORE { + DWORD dwSize; + union { + DWORD dwPhysicalPageTable; + FLATPTR fpPhysicalVidMem; + } DUMMYUNIONNAME1; + LPDWORD pPageTable; + DWORD cPages; + ULONG_PTR dwSavedDCContext; + FLATPTR fpAliasedVidMem; + ULONG_PTR dwDriverReserved; + ULONG_PTR dwHELReserved; + DWORD cPageUnlocks; + ULONG_PTR hKernelSurface; + DWORD dwKernelRefCnt; + LPDDCOLORCONTROL lpColorInfo; + FLATPTR fpNTAlias; + DWORD dwContentsStamp; + LPVOID lpvUnswappedDriverReserved; + LPVOID lpDDRAWReserved2; + DWORD dwDDRAWReserved1; + DWORD dwDDRAWReserved2; + FLATPTR fpAliasOfVidMem; +} DDRAWI_DDRAWSURFACE_GBL_MORE; + +/* the MS version of this macro was somewhat obfuscated and unreadable + * (possibly because of mediocre MS coders)... so I simplified it... + * (and so I commit no copyright violations either, hah) */ +#define GET_LPDDRAWSURFACE_GBL_MORE(psurf_gbl) \ + (*(((LPDDRAWI_DDRAWSURFACE_GBL_MORE *)(psurf_gbl)) - 1)) + +typedef struct _DDRAWI_DDRAWSURFACE_MORE { + DWORD dwSize; + IUNKNOWN_LIST * lpIUnknowns; + LPDDRAWI_DIRECTDRAW_LCL lpDD_lcl; + DWORD dwPageLockCount; + DWORD dwBytesAllocated; + LPDDRAWI_DIRECTDRAW_INT lpDD_int; + DWORD dwMipMapCount; + LPDDRAWI_DDRAWCLIPPER_INT lpDDIClipper; + /* DirectX 5.0 */ + LPHEAPALIASINFO lpHeapAliasInfo; + DWORD dwOverlayFlags; + VOID *rgjunc; + LPDDRAWI_DDVIDEOPORT_LCL lpVideoPort; + LPDDOVERLAYFX lpddOverlayFX; + DDSCAPSEX ddsCapsEx; + DWORD dwTextureStage; + LPVOID lpDDRAWReserved; + LPVOID lpDDRAWReserved2; + LPVOID lpDDrawReserved3; + DWORD dwDDrawReserved4; + LPVOID lpDDrawReserved5; + LPDWORD lpGammaRamp; + LPDWORD lpOriginalGammaRamp; + LPVOID lpDDrawReserved6; + DWORD dwSurfaceHandle; + DWORD qwDDrawReserved8[2]; + LPVOID lpDDrawReserved9; + DWORD cSurfaces; + LPDDSURFACEDESC2 pCreatedDDSurfaceDesc2; + LPDDRAWI_DDRAWSURFACE_LCL *slist; + DWORD dwFVF; + LPVOID lpVB; +} DDRAWI_DDRAWSURFACE_MORE; + +typedef struct _DDRAWI_DDRAWSURFACE_LCL { + LPDDRAWI_DDRAWSURFACE_MORE lpSurfMore; + LPDDRAWI_DDRAWSURFACE_GBL lpGbl; + ULONG_PTR hDDSurface; + LPATTACHLIST lpAttachList; + LPATTACHLIST lpAttachListFrom; + DWORD dwLocalRefCnt; + DWORD dwProcessId; + DWORD dwFlags; + DDSCAPS ddsCaps; + LPDDRAWI_DDRAWPALETTE_INT lpDDPalette; + LPDDRAWI_DDRAWCLIPPER_LCL lpDDClipper; + DWORD dwModeCreatedIn; + DWORD dwBackBufferCount; + DDCOLORKEY ddckCKDestBlt; + DDCOLORKEY ddckCKSrcBlt; + ULONG_PTR hDC; + ULONG_PTR dwReserved1; /* for display driver use */ + /* overlays only */ + DDCOLORKEY ddckCKSrcOverlay; + DDCOLORKEY ddckCKDestOverlay; + LPDDRAWI_DDRAWSURFACE_INT lpSurfaceOverlaying; + DBLNODE dbnOverlayNode; + RECT rcOverlaySrc; + RECT rcOverlayDest; + DWORD dwClrXparent; + DWORD dwAlpha; + LONG lOverlayX; + LONG lOverlayY; +} DDRAWI_DDRAWSURFACE_LCL; + +#define DDRAWISURF_ATTACHED 0x00000001 +#define DDRAWISURF_IMPLICITCREATE 0x00000002 +#define DDRAWISURF_ISFREE 0x00000004 +#define DDRAWISURF_ATTACHED_FROM 0x00000008 +#define DDRAWISURF_IMPLICITROOT 0x00000010 +#define DDRAWISURF_PARTOFPRIMARYCHAIN 0x00000020 +#define DDRAWISURF_DATAISALIASED 0x00000040 +#define DDRAWISURF_HASDC 0x00000080 +#define DDRAWISURF_HASCKEYDESTOVERLAY 0x00000100 +#define DDRAWISURF_HASCKEYDESTBLT 0x00000200 +#define DDRAWISURF_HASCKEYSRCOVERLAY 0x00000400 +#define DDRAWISURF_HASCKEYSRCBLT 0x00000800 +#define DDRAWISURF_LOCKEXCLUDEDCURSOR 0x00001000 +#define DDRAWISURF_HASPIXELFORMAT 0x00002000 +#define DDRAWISURF_HASOVERLAYDATA 0x00004000 +#define DDRAWISURF_SETGAMMA 0x00008000 +/* more... */ +#define DDRAWISURF_INVALID 0x10000000 + +/* palettes */ +typedef struct _DDRAWI_DDRAWPALETTE_INT { + LPVOID lpVtbl; + LPDDRAWI_DDRAWPALETTE_LCL lpLcl; + LPDDRAWI_DDRAWPALETTE_INT lpLink; + DWORD dwIntRefCnt; +} DDRAWI_DDRAWPALETTE_INT; + +typedef struct _DDRAWI_DDRAWPALETTE_GBL { + DWORD dwRefCnt; + DWORD dwFlags; + LPDDRAWI_DIRECTDRAW_LCL lpDD_lcl; + DWORD dwProcessId; + LPPALETTEENTRY lpColorTable; + union { + ULONG_PTR dwReserved1; /* for display driver use */ + HPALETTE hHELGDIPalette; + } DUMMYUNIONNAME1; + /* DirectX 5.0 */ + DWORD dwDriverReserved; + DWORD dwContentsStamp; + /* DirectX 6.0 */ + DWORD dwSaveStamp; + /* DirectX 7.0 */ + DWORD dwHandle; +} DDRAWI_DDRAWPALETTE_GBL; + +#define DDRAWIPAL_256 0x00000001 +#define DDRAWIPAL_16 0x00000002 +#define DDRAWIPAL_GDI 0x00000004 +#define DDRAWIPAL_STORED_8 0x00000008 +#define DDRAWIPAL_STORED_16 0x00000010 +#define DDRAWIPAL_STORED_24 0x00000020 +#define DDRAWIPAL_EXCLUSIVE 0x00000040 +#define DDRAWIPAL_INHEL 0x00000080 +#define DDRAWIPAL_DIRTY 0x00000100 +#define DDRAWIPAL_ALLOW256 0x00000200 +#define DDRAWIPAL_4 0x00000400 +#define DDRAWIPAL_2 0x00000800 +#define DDRAWIPAL_STORED_8INDEX 0x00001000 +#define DDRAWIPAL_ALPHA 0x00002000 + +typedef struct _DDRAWI_DDRAWPALETTE_LCL { + DWORD lpPalMore; + LPDDRAWI_DDRAWPALETTE_GBL lpGbl; + ULONG_PTR dwUnused0; + DWORD dwLocalRefCnt; + IUnknown * pUnkOuter; + LPDDRAWI_DIRECTDRAW_LCL lpDD_lcl; + ULONG_PTR dwReserved1; + /* DirectX 6.0 */ + ULONG_PTR dwDDRAWReserved1; + ULONG_PTR dwDDRAWReserved2; + ULONG_PTR dwDDRAWReserved3; +} DDRAWI_DDRAWPALETTE_LCL; + +typedef struct _DDHAL_GETMOCOMPGUIDSDATA FAR *LPDDHAL_GETMOCOMPGUIDSDATA; +typedef struct _DDHAL_GETMOCOMPFORMATSDATA FAR *LPDDHAL_GETMOCOMPFORMATSDATA; +typedef struct _DDHAL_CREATEMOCOMPDATA FAR *LPDDHAL_CREATEMOCOMPDATA; +typedef struct _DDHAL_GETMOCOMPCOMPBUFFDATA FAR *LPDDHAL_GETMOCOMPCOMPBUFFDATA; +typedef struct _DDHAL_GETINTERNALMOCOMPDATA FAR *LPDDHAL_GETINTERNALMOCOMPDATA; +typedef struct _DDHAL_BEGINMOCOMPFRAMEDATA FAR *LPDDHAL_BEGINMOCOMPFRAMEDATA; +typedef struct _DDHAL_ENDMOCOMPFRAMEDATA FAR *LPDDHAL_ENDMOCOMPFRAMEDATA; +typedef struct _DDHAL_RENDERMOCOMPDATA FAR *LPDDHAL_RENDERMOCOMPDATA; +typedef struct _DDHAL_QUERYMOCOMPSTATUSDATA FAR *LPDDHAL_QUERYMOCOMPSTATUSDATA; +typedef struct _DDHAL_DESTROYMOCOMPDATA FAR *LPDDHAL_DESTROYMOCOMPDATA; +typedef struct _DDHAL_COLORCONTROLDATA FAR *LPDDHAL_COLORCONTROLDATA; + +typedef DWORD (FAR PASCAL *LPDDHALMOCOMPCB_GETGUIDS)( LPDDHAL_GETMOCOMPGUIDSDATA); +typedef DWORD (FAR PASCAL *LPDDHALMOCOMPCB_GETFORMATS)( LPDDHAL_GETMOCOMPFORMATSDATA); +typedef DWORD (FAR PASCAL *LPDDHALMOCOMPCB_CREATE)( LPDDHAL_CREATEMOCOMPDATA); +typedef DWORD (FAR PASCAL *LPDDHALMOCOMPCB_GETCOMPBUFFINFO)( LPDDHAL_GETMOCOMPCOMPBUFFDATA); +typedef DWORD (FAR PASCAL *LPDDHALMOCOMPCB_GETINTERNALINFO)( LPDDHAL_GETINTERNALMOCOMPDATA); +typedef DWORD (FAR PASCAL *LPDDHALMOCOMPCB_BEGINFRAME)( LPDDHAL_BEGINMOCOMPFRAMEDATA); +typedef DWORD (FAR PASCAL *LPDDHALMOCOMPCB_ENDFRAME)( LPDDHAL_ENDMOCOMPFRAMEDATA); +typedef DWORD (FAR PASCAL *LPDDHALMOCOMPCB_RENDER)( LPDDHAL_RENDERMOCOMPDATA); +typedef DWORD (FAR PASCAL *LPDDHALMOCOMPCB_QUERYSTATUS)( LPDDHAL_QUERYMOCOMPSTATUSDATA); +typedef DWORD (FAR PASCAL *LPDDHALMOCOMPCB_DESTROY)( LPDDHAL_DESTROYMOCOMPDATA); +typedef DWORD (FAR PASCAL *LPDDHALCOLORCB_COLORCONTROL)(LPDDHAL_COLORCONTROLDATA); + +typedef struct _DDMCCOMPBUFFERINFO +{ + DWORD dwSize; // [in] size of the struct + DWORD dwNumCompBuffers; // [out] number of buffers required for compressed data + DWORD dwWidthToCreate; // [out] Width of surface to create + DWORD dwHeightToCreate; // [out] Height of surface to create + DWORD dwBytesToAllocate; // [out] Total number of bytes used by each surface + DDSCAPS2 ddCompCaps; // [out] caps to create surfaces to store compressed data + DDPIXELFORMAT ddPixelFormat; // [out] format to create surfaces to store compressed data +} DDMCCOMPBUFFERINFO, *LPDDMCCOMPBUFFERINFO; + +typedef struct _DDMCBUFFERINFO +{ + DWORD dwSize; // [in] size of the struct + LPDDRAWI_DDRAWSURFACE_LCL lpCompSurface; // [in] pointer to buffer containing compressed data + DWORD dwDataOffset; // [in] offset of relevant data from the beginning of buffer + DWORD dwDataSize; // [in] size of relevant data + LPVOID lpPrivate; // Reserved for DirectDraw; +} DDMCBUFFERINFO, *LPDDMCBUFFERINFO; + +typedef struct _DDHAL_GETDRIVERSTATEDATA { + DWORD dwFlags; + union + { + ULONG_PTR dwhContext; + }; + LPDWORD lpdwStates; + DWORD dwLength; + HRESULT ddRVal; +} DDHAL_GETDRIVERSTATEDATA; + +typedef struct _DDHAL_ADDATTACHEDSURFACEDATA +{ + LPDDRAWI_DIRECTDRAW_GBL lpDD; + LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; + LPDDRAWI_DDRAWSURFACE_LCL lpSurfAttached; + HRESULT ddRVal; + LPDDHALSURFCB_ADDATTACHEDSURFACE AddAttachedSurface; +} DDHAL_ADDATTACHEDSURFACEDATA; + +typedef struct _DDHAL_BEGINMOCOMPFRAMEDATA +{ + LPDDRAWI_DIRECTDRAW_LCL lpDD; + LPDDRAWI_DDMOTIONCOMP_LCL lpMoComp; + LPDDRAWI_DDRAWSURFACE_LCL lpDestSurface; // [in] destination buffer in which to decoding this frame + DWORD dwInputDataSize; // [in] size of other misc input data to begin frame + LPVOID lpInputData; // [in] pointer to misc input data + DWORD dwOutputDataSize; // [in] size of other misc output data to begin frame + LPVOID lpOutputData; // [in] pointer to output misc data (allocated by client) + HRESULT ddRVal; // [out] + LPDDHALMOCOMPCB_BEGINFRAME BeginMoCompFrame; +} DDHAL_BEGINMOCOMPFRAMEDATA; + +typedef struct _DDHAL_COLORCONTROLDATA +{ + LPDDRAWI_DIRECTDRAW_GBL lpDD; // driver struct + LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; // surface + LPDDCOLORCONTROL lpColorData; // color control information + DWORD dwFlags; // DDRAWI_GETCOLOR/DDRAWI_SETCOLOR + HRESULT ddRVal; // return value + LPDDHALCOLORCB_COLORCONTROL ColorControl; // PRIVATE: ptr to callback +} DDHAL_COLORCONTROLDATA; + +typedef struct _DDHAL_CREATEMOCOMPDATA +{ + LPDDRAWI_DIRECTDRAW_LCL lpDD; + LPDDRAWI_DDMOTIONCOMP_LCL lpMoComp; + LPGUID lpGuid; + DWORD dwUncompWidth; + DWORD dwUncompHeight; + DDPIXELFORMAT ddUncompPixelFormat; + LPVOID lpData; + DWORD dwDataSize; + HRESULT ddRVal; + LPDDHALMOCOMPCB_CREATE CreateMoComp; +} DDHAL_CREATEMOCOMPDATA; + +typedef struct _DDHAL_DESTROYMOCOMPDATA +{ + LPDDRAWI_DIRECTDRAW_LCL lpDD; + LPDDRAWI_DDMOTIONCOMP_LCL lpMoComp; + HRESULT ddRVal; + LPDDHALMOCOMPCB_DESTROY DestroyMoComp; +} DDHAL_DESTROYMOCOMPDATA; + +typedef struct _DDHAL_ENDMOCOMPFRAMEDATA +{ + LPDDRAWI_DIRECTDRAW_LCL lpDD; + LPDDRAWI_DDMOTIONCOMP_LCL lpMoComp; + LPVOID lpInputData; + DWORD dwInputDataSize; + HRESULT ddRVal; + LPDDHALMOCOMPCB_ENDFRAME EndMoCompFrame; +} DDHAL_ENDMOCOMPFRAMEDATA; + +typedef struct _DDHAL_FLIPTOGDISURFACEDATA +{ + LPDDRAWI_DIRECTDRAW_GBL lpDD; // driver struct + DWORD dwToGDI; // TRUE if flipping to the GDI surface, FALSE if flipping away + DWORD dwReserved; // reserved for future use + HRESULT ddRVal; // return value + LPDDHAL_FLIPTOGDISURFACE FlipToGDISurface; // PRIVATE: ptr to callback +} DDHAL_FLIPTOGDISURFACEDATA; + +typedef struct _DDHAL_GETAVAILDRIVERMEMORYDATA +{ + LPDDRAWI_DIRECTDRAW_GBL lpDD; // driver struct + DDSCAPS DDSCaps; // caps for type of surface memory + DWORD dwTotal; // total memory for this kind of surface + DWORD dwFree; // free memory for this kind of surface + HRESULT ddRVal; // return value + LPDDHAL_GETAVAILDRIVERMEMORY GetAvailDriverMemory; // PRIVATE: ptr to callback + DDSCAPSEX ddsCapsEx; // Added in V6. Driver should check DDVERSION info + // to see if this field is present. +} DDHAL_GETAVAILDRIVERMEMORYDATA; + +typedef struct _DDHAL_GETBLTSTATUSDATA +{ + LPDDRAWI_DIRECTDRAW_GBL lpDD; // driver struct + LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; // surface struct + DWORD dwFlags; // flags + HRESULT ddRVal; // return value + LPDDHALSURFCB_GETBLTSTATUS GetBltStatus; // PRIVATE: ptr to callback +} DDHAL_GETBLTSTATUSDATA; + +typedef struct _DDHAL_GETFLIPSTATUSDATA +{ + LPDDRAWI_DIRECTDRAW_GBL lpDD; // driver struct + LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; // surface struct + DWORD dwFlags; // flags + HRESULT ddRVal; // return value + LPDDHALSURFCB_GETFLIPSTATUS GetFlipStatus; // PRIVATE: ptr to callback +} DDHAL_GETFLIPSTATUSDATA; + +typedef struct _DDHAL_GETINTERNALMOCOMPDATA +{ + LPDDRAWI_DIRECTDRAW_LCL lpDD; + LPGUID lpGuid; + DWORD dwWidth; // [in] width of uncompressed data + DWORD dwHeight; // [in] height of uncompressed data + DDPIXELFORMAT ddPixelFormat; // [in] pixel-format of uncompressed data + DWORD dwScratchMemAlloc; // [out] amount of scratch memory will the hal allocate for its private use + HRESULT ddRVal; // [out] + LPDDHALMOCOMPCB_GETINTERNALINFO GetInternalMoCompInfo; +} DDHAL_GETINTERNALMOCOMPDATA; + +typedef struct _DDHAL_GETMOCOMPCOMPBUFFDATA +{ + LPDDRAWI_DIRECTDRAW_LCL lpDD; + LPGUID lpGuid; + DWORD dwWidth; // [in] width of uncompressed data + DWORD dwHeight; // [in] height of uncompressed data + DDPIXELFORMAT ddPixelFormat; // [in] pixel-format of uncompressed data + DWORD dwNumTypesCompBuffs;// [in/out] number of memory types required for comp buffers + LPDDMCCOMPBUFFERINFO lpCompBuffInfo; // [in] driver supplied info regarding comp buffers (allocated by client) + HRESULT ddRVal; // [out] + LPDDHALMOCOMPCB_GETCOMPBUFFINFO GetMoCompBuffInfo; +} DDHAL_GETMOCOMPCOMPBUFFDATA; + +typedef struct _DDHAL_GETMOCOMPGUIDSDATA +{ + LPDDRAWI_DIRECTDRAW_LCL lpDD; + DWORD dwNumGuids; + LPGUID lpGuids; + HRESULT ddRVal; + LPDDHALMOCOMPCB_GETGUIDS GetMoCompGuids; +} DDHAL_GETMOCOMPGUIDSDATA; + +typedef struct _DDHAL_GETMOCOMPFORMATSDATA +{ + LPDDRAWI_DIRECTDRAW_LCL lpDD; + LPGUID lpGuid; + DWORD dwNumFormats; + LPDDPIXELFORMAT lpFormats; + HRESULT ddRVal; + LPDDHALMOCOMPCB_GETFORMATS GetMoCompFormats; +} DDHAL_GETMOCOMPFORMATSDATA; + +typedef struct _DDHAL_GETSCANLINEDATA +{ + LPDDRAWI_DIRECTDRAW_GBL lpDD; // driver struct + DWORD dwScanLine; // returned scan line + HRESULT ddRVal; // return value + LPDDHAL_GETSCANLINE GetScanLine; // PRIVATE: ptr to callback +} DDHAL_GETSCANLINEDATA; + +typedef struct _DDHAL_QUERYMOCOMPSTATUSDATA +{ + LPDDRAWI_DIRECTDRAW_LCL lpDD; + LPDDRAWI_DDMOTIONCOMP_LCL lpMoComp; + LPDDRAWI_DDRAWSURFACE_LCL lpSurface; // [in] Surface being queried + DWORD dwFlags; // [in] DDMCQUERY_XXX falgs + HRESULT ddRVal; // [out] + LPDDHALMOCOMPCB_QUERYSTATUS QueryMoCompStatus; +} DDHAL_QUERYMOCOMPSTATUSDATA; + +typedef struct _DDHAL_RENDERMOCOMPDATA +{ + LPDDRAWI_DIRECTDRAW_LCL lpDD; + LPDDRAWI_DDMOTIONCOMP_LCL lpMoComp; + DWORD dwNumBuffers; // [in] Number of entries in the lpMacroBlockInfo array + LPDDMCBUFFERINFO lpBufferInfo; // [in] Surfaces containing macro block info + DWORD dwFunction; // [in] Function + LPVOID lpInputData; + DWORD dwInputDataSize; + LPVOID lpOutputData; + DWORD dwOutputDataSize; + HRESULT ddRVal; // [out] + LPDDHALMOCOMPCB_RENDER RenderMoComp; +} DDHAL_RENDERMOCOMPDATA; + +typedef struct _DDHAL_SETCOLORKEYDATA +{ + LPDDRAWI_DIRECTDRAW_GBL lpDD; // driver struct + LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; // surface struct + DWORD dwFlags; // flags + DDCOLORKEY ckNew; // new color key + HRESULT ddRVal; // return value + LPDDHALSURFCB_SETCOLORKEY SetColorKey; // PRIVATE: ptr to callback +} DDHAL_SETCOLORKEYDATA; + +typedef struct _DDHAL_SETOVERLAYPOSITIONDATA +{ + LPDDRAWI_DIRECTDRAW_GBL lpDD; // driver struct + LPDDRAWI_DDRAWSURFACE_LCL lpDDSrcSurface; // src surface + LPDDRAWI_DDRAWSURFACE_LCL lpDDDestSurface;// dest surface + LONG lXPos; // x position + LONG lYPos; // y position + HRESULT ddRVal; // return value + LPDDHALSURFCB_SETOVERLAYPOSITION SetOverlayPosition; // PRIVATE: ptr to callback +} DDHAL_SETOVERLAYPOSITIONDATA; + +typedef struct _DDHAL_UPDATEOVERLAYDATA +{ + LPDDRAWI_DIRECTDRAW_GBL lpDD; // driver struct + LPDDRAWI_DDRAWSURFACE_LCL lpDDDestSurface;// dest surface + RECTL rDest; // dest rect + LPDDRAWI_DDRAWSURFACE_LCL lpDDSrcSurface; // src surface + RECTL rSrc; // src rect + DWORD dwFlags; // flags + DDOVERLAYFX overlayFX; // overlay FX + HRESULT ddRVal; // return value + LPDDHALSURFCB_UPDATEOVERLAY UpdateOverlay; // PRIVATE: ptr to callback +} DDHAL_UPDATEOVERLAYDATA; + +typedef struct _DDHAL_WAITFORVERTICALBLANKDATA +{ + LPDDRAWI_DIRECTDRAW_GBL lpDD; // driver struct + DWORD dwFlags; // flags + DWORD bIsInVB; // is in vertical blank + ULONG_PTR hEvent; // event + HRESULT ddRVal; // return value + LPDDHAL_WAITFORVERTICALBLANK WaitForVerticalBlank; // PRIVATE: ptr to callback +} DDHAL_WAITFORVERTICALBLANKDATA; + +typedef struct _DD_D3DBUFCALLBACKS +{ + DWORD dwSize; + DWORD dwFlags; + LPDDHAL_CANCREATESURFACE CanCreateD3DBuffer; + LPDDHAL_CREATESURFACE CreateD3DBuffer; + LPDDHALSURFCB_DESTROYSURFACE DestroyD3DBuffer; + LPDDHALSURFCB_LOCK LockD3DBuffer; + LPDDHALSURFCB_UNLOCK UnlockD3DBuffer; +} DD_D3DBUFCALLBACKS, *PDD_D3DBUFCALLBACKS; + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* __WINE_DDRAWI_H */ diff --git a/include/ddk/defines.h b/include/ddk/defines.h index de9e186..de64b72 100644 --- a/include/ddk/defines.h +++ b/include/ddk/defines.h @@ -5,14 +5,13 @@ #ifndef __ASM__ +#ifndef _WIN32_WINNT #define _WIN32_WINNT 0x0400 +#endif #include #include -#define EXPORTED __declspec(dllexport) -#define IMPORTED __declspec(dllimport) - /* * PURPOSE: Number of a thread priority levels */ diff --git a/include/ddk/exfuncs.h b/include/ddk/exfuncs.h index 026f90c..a678ea3 100644 --- a/include/ddk/exfuncs.h +++ b/include/ddk/exfuncs.h @@ -256,12 +256,12 @@ ExInitializeResourceLite ( * Routine = Routine to be called by the worker thread * Context = Parameter to be passed to the callback */ -#define ExInitializeWorkItem(Item, WorkerRoutine, RoutineContext) \ +#define ExInitializeWorkItem(Item, Routine, RoutineContext) \ ASSERT_IRQL(DISPATCH_LEVEL); \ - (Item)->Routine = (WorkerRoutine); \ - (Item)->Context = (RoutineContext); \ - (Item)->Entry.Flink = NULL; \ - (Item)->Entry.Blink = NULL; + (Item)->WorkerRoutine = (Routine); \ + (Item)->Parameter = (RoutineContext); \ + (Item)->List.Flink = NULL; \ + (Item)->List.Blink = NULL; NTSTATUS STDCALL @@ -288,7 +288,7 @@ ExInterlockedAddLargeStatistic ( ); ULONG -STDCALL +FASTCALL ExInterlockedAddUlong ( PULONG Addend, ULONG Increment, @@ -355,21 +355,21 @@ ExInterlockedIncrementLong ( PKSPIN_LOCK Lock ); PLIST_ENTRY -STDCALL +FASTCALL ExInterlockedInsertHeadList ( PLIST_ENTRY ListHead, PLIST_ENTRY ListEntry, PKSPIN_LOCK Lock ); PLIST_ENTRY -STDCALL +FASTCALL ExInterlockedInsertTailList ( PLIST_ENTRY ListHead, PLIST_ENTRY ListEntry, PKSPIN_LOCK Lock ); PSINGLE_LIST_ENTRY -STDCALL +FASTCALL ExInterlockedPopEntryList ( PSINGLE_LIST_ENTRY ListHead, PKSPIN_LOCK Lock @@ -381,7 +381,7 @@ ExInterlockedPopEntrySList ( PKSPIN_LOCK Lock ); PSINGLE_LIST_ENTRY -STDCALL +FASTCALL ExInterlockedPushEntryList ( PSINGLE_LIST_ENTRY ListHead, PSINGLE_LIST_ENTRY ListEntry, @@ -403,7 +403,7 @@ ExInterlockedRemoveEntryList ( ); PLIST_ENTRY -STDCALL +FASTCALL ExInterlockedRemoveHeadList ( PLIST_ENTRY Head, PKSPIN_LOCK Lock @@ -441,7 +441,8 @@ ExIsResourceAcquiredExclusiveLite ( PERESOURCE Resource ); -ULONG +/* was ULONG */ +USHORT STDCALL ExIsResourceAcquiredSharedLite ( PERESOURCE Resource @@ -457,7 +458,7 @@ ExLocalTimeToSystemTime ( VOID STDCALL ExNotifyCallback ( - IN PVOID CallbackObject, + IN PCALLBACK_OBJECT CallbackObject, IN PVOID Argument1, IN PVOID Argument2 ); @@ -477,7 +478,7 @@ ExPostSystemEvent ( * ); */ #define ExQueryDepthSList(ListHead) \ - (USHORT)(ListHead)->s.Depth + (USHORT)(ListHead)->Depth VOID STDCALL @@ -586,6 +587,18 @@ ExUnregisterCallback ( IN PVOID CallbackRegistration ); +PSLIST_ENTRY +FASTCALL +InterlockedPopEntrySList ( + IN PSLIST_HEADER ListHead + ); + +PSLIST_ENTRY +FASTCALL +InterlockedPushEntrySList( + IN PSLIST_HEADER ListHead, + IN PSLIST_ENTRY ListEntry + ); /* * PVOID @@ -614,7 +627,7 @@ ExAllocateFromNPagedLookasideList ( Lookaside->TotalAllocates++; Entry = ExInterlockedPopEntrySList (&Lookaside->ListHead, - &Lookaside->Lock); + &Lookaside->Obsoleted); if (Entry == NULL) { Lookaside->AllocateMisses++; @@ -626,11 +639,21 @@ ExAllocateFromNPagedLookasideList ( return Entry; } -PVOID -STDCALL -ExAllocateFromPagedLookasideList ( - PPAGED_LOOKASIDE_LIST LookSide - ); +static inline PVOID +ExAllocateFromPagedLookasideList( + IN PPAGED_LOOKASIDE_LIST Lookaside) +{ + PVOID Entry; + + Lookaside->TotalAllocates++; + Entry = InterlockedPopEntrySList(&Lookaside->ListHead); + if (Entry == NULL) { + Lookaside->AllocateMisses++; + Entry = (Lookaside->Allocate)(Lookaside->Type, + Lookaside->Size, Lookaside->Tag); + } + return Entry; +} VOID STDCALL @@ -669,7 +692,7 @@ ExFreeToNPagedLookasideList ( ) { Lookaside->TotalFrees++; - if (ExQueryDepthSList (&Lookaside->ListHead) >= Lookaside->MinimumDepth) + if (ExQueryDepthSList (&Lookaside->ListHead) >= Lookaside->Depth) { Lookaside->FreeMisses++; (Lookaside->Free)(Entry); @@ -678,16 +701,23 @@ ExFreeToNPagedLookasideList ( { ExInterlockedPushEntrySList (&Lookaside->ListHead, (PSINGLE_LIST_ENTRY)Entry, - &Lookaside->Lock); + &Lookaside->Obsoleted); } } -VOID -STDCALL -ExFreeToPagedLookasideList ( - PPAGED_LOOKASIDE_LIST Lookaside, - PVOID Entry - ); +static inline VOID +ExFreeToPagedLookasideList( + IN PPAGED_LOOKASIDE_LIST Lookaside, + IN PVOID Entry) +{ + Lookaside->TotalFrees++; + if (ExQueryDepthSList(&Lookaside->ListHead) >= Lookaside->Depth) { + Lookaside->FreeMisses++; + (Lookaside->Free)(Entry); + } else { + InterlockedPushEntrySList(&Lookaside->ListHead, (PSLIST_ENTRY)Entry); + } +} VOID STDCALL @@ -801,8 +831,10 @@ InterlockedIncrement ( PLONG Addend ); +#ifndef InterlockedExchangePointer #define InterlockedExchangePointer(__T__, __V__) \ (PVOID)InterlockedExchange((PLONG)(__T__), (LONG)(__V__)) +#endif /*---*/ @@ -818,98 +850,4 @@ ExHookException ( unsigned int exp ); -/* BEGIN REACTOS ONLY */ - -BOOLEAN STDCALL -ExInitializeBinaryTree(IN PBINARY_TREE Tree, - IN PKEY_COMPARATOR Compare, - IN BOOLEAN UseNonPagedPool); - -VOID STDCALL -ExDeleteBinaryTree(IN PBINARY_TREE Tree); - -VOID STDCALL -ExInsertBinaryTree(IN PBINARY_TREE Tree, - IN PVOID Key, - IN PVOID Value); - -BOOLEAN STDCALL -ExSearchBinaryTree(IN PBINARY_TREE Tree, - IN PVOID Key, - OUT PVOID * Value); - -BOOLEAN STDCALL -ExRemoveBinaryTree(IN PBINARY_TREE Tree, - IN PVOID Key, - IN PVOID * Value); - -BOOLEAN STDCALL -ExTraverseBinaryTree(IN PBINARY_TREE Tree, - IN TRAVERSE_METHOD Method, - IN PTRAVERSE_ROUTINE Routine, - IN PVOID Context); - -BOOLEAN STDCALL -ExInitializeSplayTree(IN PSPLAY_TREE Tree, - IN PKEY_COMPARATOR Compare, - IN BOOLEAN Weighted, - IN BOOLEAN UseNonPagedPool); - -VOID STDCALL -ExDeleteSplayTree(IN PSPLAY_TREE Tree); - -VOID STDCALL -ExInsertSplayTree(IN PSPLAY_TREE Tree, - IN PVOID Key, - IN PVOID Value); - -BOOLEAN STDCALL -ExSearchSplayTree(IN PSPLAY_TREE Tree, - IN PVOID Key, - OUT PVOID * Value); - -BOOLEAN STDCALL -ExRemoveSplayTree(IN PSPLAY_TREE Tree, - IN PVOID Key, - IN PVOID * Value); - -BOOLEAN STDCALL -ExWeightOfSplayTree(IN PSPLAY_TREE Tree, - OUT PULONG Weight); - -BOOLEAN STDCALL -ExTraverseSplayTree(IN PSPLAY_TREE Tree, - IN TRAVERSE_METHOD Method, - IN PTRAVERSE_ROUTINE Routine, - IN PVOID Context); - -BOOLEAN STDCALL -ExInitializeHashTable(IN PHASH_TABLE HashTable, - IN ULONG HashTableSize, - IN PKEY_COMPARATOR Compare OPTIONAL, - IN BOOLEAN UseNonPagedPool); - -VOID STDCALL -ExDeleteHashTable(IN PHASH_TABLE HashTable); - -VOID STDCALL -ExInsertHashTable(IN PHASH_TABLE HashTable, - IN PVOID Key, - IN ULONG KeyLength, - IN PVOID Value); - -BOOLEAN STDCALL -ExSearchHashTable(IN PHASH_TABLE HashTable, - IN PVOID Key, - IN ULONG KeyLength, - OUT PVOID * Value); - -BOOLEAN STDCALL -ExRemoveHashTable(IN PHASH_TABLE HashTable, - IN PVOID Key, - IN ULONG KeyLength, - IN PVOID * Value); - -/* END REACTOS ONLY */ - #endif /* ndef _NTOS_EXFUNCS_H */ diff --git a/include/ddk/extypes.h b/include/ddk/extypes.h index 2d44910..93f8341 100644 --- a/include/ddk/extypes.h +++ b/include/ddk/extypes.h @@ -27,7 +27,7 @@ typedef struct _OWNER_ENTRY { LONG OwnerCount; ULONG TableSize; - } a; + }; /* anon */ } OWNER_ENTRY, *POWNER_ENTRY; typedef struct _ERESOURCE @@ -46,7 +46,7 @@ typedef struct _ERESOURCE { PVOID Address; ULONG CreatorBackTraceIndex; - } a; + }; /* anon */ KSPIN_LOCK SpinLock; } ERESOURCE, *PERESOURCE; @@ -68,26 +68,25 @@ typedef struct _ZONE_HEADER ULONG TotalSegmentSize; } ZONE_HEADER, *PZONE_HEADER; -typedef struct _ZONE_SEGMENT +typedef struct _ZONE_SEGMENT_HEADER { - SINGLE_LIST_ENTRY Entry; - ULONG size; -} ZONE_SEGMENT, *PZONE_SEGMENT; + SINGLE_LIST_ENTRY SegmentList; /* was Entry */ + PVOID Reserved; /* was ULONG Size; */ +} ZONE_SEGMENT_HEADER, *PZONE_SEGMENT_HEADER; -typedef struct _ZONE_ENTRY -{ - SINGLE_LIST_ENTRY Entry; -} ZONE_ENTRY, *PZONE_ENTRY; typedef VOID STDCALL_FUNC (*PWORKER_THREAD_ROUTINE)(PVOID Parameter); + +/* Modified by Andrew Greenwood, 16th July 2003: */ + typedef struct _WORK_QUEUE_ITEM { - LIST_ENTRY Entry; - PWORKER_THREAD_ROUTINE Routine; - PVOID Context; + LIST_ENTRY List; + PWORKER_THREAD_ROUTINE WorkerRoutine; + PVOID Parameter; } WORK_QUEUE_ITEM, *PWORK_QUEUE_ITEM; typedef PVOID STDCALL_FUNC @@ -106,13 +105,13 @@ typedef union _SLIST_HEADER SINGLE_LIST_ENTRY Next; USHORT Depth; USHORT Sequence; - } s; + }; /* now anonymous */ } SLIST_HEADER, *PSLIST_HEADER; typedef struct _NPAGED_LOOKASIDE_LIST { SLIST_HEADER ListHead; - USHORT MinimumDepth; + USHORT Depth; USHORT MaximumDepth; ULONG TotalAllocates; ULONG AllocateMisses; @@ -127,13 +126,13 @@ typedef struct _NPAGED_LOOKASIDE_LIST ULONG LastTotalAllocates; ULONG LastAllocateMisses; ULONG Pad[2]; - KSPIN_LOCK Lock; + KSPIN_LOCK Obsoleted; } NPAGED_LOOKASIDE_LIST, *PNPAGED_LOOKASIDE_LIST; typedef struct _PAGED_LOOKASIDE_LIST { SLIST_HEADER ListHead; - USHORT MinimumDepth; + USHORT Depth; USHORT MaximumDepth; ULONG TotalAllocates; ULONG AllocateMisses; @@ -147,7 +146,7 @@ typedef struct _PAGED_LOOKASIDE_LIST LIST_ENTRY ListEntry; ULONG LastTotalAllocates; ULONG LastAllocateMisses; - FAST_MUTEX Lock; + FAST_MUTEX Obsoleted; } PAGED_LOOKASIDE_LIST, *PPAGED_LOOKASIDE_LIST; @@ -160,81 +159,6 @@ typedef VOID STDCALL_FUNC PVOID Argument1, PVOID Argument2); -/* BEGIN REACTOS ONLY */ - -typedef enum _TRAVERSE_METHOD { - TraverseMethodPreorder, - TraverseMethodInorder, - TraverseMethodPostorder -} TRAVERSE_METHOD; - -typedef LONG STDCALL_FUNC -(*PKEY_COMPARATOR)(IN PVOID Key1, - IN PVOID Key2); - -typedef BOOLEAN STDCALL_FUNC -(*PTRAVERSE_ROUTINE)(IN PVOID Context, - IN PVOID Key, - IN PVOID Value); - -struct _BINARY_TREE_NODE; - -typedef struct _BINARY_TREE -{ - struct _BINARY_TREE_NODE * RootNode; - PKEY_COMPARATOR Compare; - BOOLEAN UseNonPagedPool; - union { - NPAGED_LOOKASIDE_LIST NonPaged; - PAGED_LOOKASIDE_LIST Paged; - } List; - union { - KSPIN_LOCK NonPaged; - FAST_MUTEX Paged; - } Lock; -} BINARY_TREE, *PBINARY_TREE; - - -struct _SPLAY_TREE_NODE; - -typedef struct _SPLAY_TREE -{ - struct _SPLAY_TREE_NODE * RootNode; - PKEY_COMPARATOR Compare; - BOOLEAN Weighted; - BOOLEAN UseNonPagedPool; - union { - NPAGED_LOOKASIDE_LIST NonPaged; - PAGED_LOOKASIDE_LIST Paged; - } List; - union { - KSPIN_LOCK NonPaged; - FAST_MUTEX Paged; - } Lock; - PVOID Reserved[4]; -} SPLAY_TREE, *PSPLAY_TREE; - - -typedef struct _HASH_TABLE -{ - // Size of hash table in number of bits - ULONG HashTableSize; - - // Use non-paged pool memory? - BOOLEAN UseNonPagedPool; - - // Lock for this structure - union { - KSPIN_LOCK NonPaged; - FAST_MUTEX Paged; - } Lock; - - // Pointer to array of hash buckets with splay trees - PSPLAY_TREE HashTrees; -} HASH_TABLE, *PHASH_TABLE; - -/* END REACTOS ONLY */ - #endif /* __INCLUDE_DDK_EXTYPES_H */ /* EOF */ diff --git a/include/ddk/fsfuncs.h b/include/ddk/fsfuncs.h index e443aa7..a5aafa5 100644 --- a/include/ddk/fsfuncs.h +++ b/include/ddk/fsfuncs.h @@ -3,6 +3,9 @@ /* $Id$ */ #define FlagOn(x,f) ((x) & (f)) +#include + + VOID STDCALL FsRtlFreeFileLock( @@ -217,7 +220,7 @@ FsRtlFastUnlockSingle ( IN PVOID Context OPTIONAL, IN BOOLEAN AlreadySynchronized ); -VOID +BOOLEAN STDCALL FsRtlFindInTunnelCache ( IN PTUNNEL Cache, @@ -453,7 +456,7 @@ FsRtlNotifyFullReportChange ( VOID STDCALL FsRtlNotifyUninitializeSync ( - IN OUT PNOTIFY_SYNC * NotifySync + IN OUT PNOTIFY_SYNC * NotifySync ); VOID STDCALL @@ -466,7 +469,7 @@ FsRtlNotifyReportChange ( ); VOID STDCALL -FsRtlNotifyInitializeSync(IN OUT PNOTIFY_SYNC *NotifySync); +FsRtlNotifyInitializeSync(IN OUT PNOTIFY_SYNC * NotifySync); NTSTATUS STDCALL FsRtlNotifyVolumeEvent(IN PFILE_OBJECT FileObject, diff --git a/include/ddk/fstypes.h b/include/ddk/fstypes.h index 4d27259..ed243c9 100644 --- a/include/ddk/fstypes.h +++ b/include/ddk/fstypes.h @@ -2,13 +2,7 @@ #define __INCLUDE_DDK_FSTYPES_H /* $Id$ */ -#define FSRTL_TAG TAG('F','S','r','t') - -typedef ULONG LBN; -typedef LBN *PLBN; - -typedef ULONG VBN; -typedef VBN *PVBN; +#ifndef __USE_W32API typedef struct _FILE_LOCK_INFO { LARGE_INTEGER StartingByte; @@ -20,18 +14,6 @@ typedef struct _FILE_LOCK_INFO { LARGE_INTEGER EndingByte; } FILE_LOCK_INFO, *PFILE_LOCK_INFO; -typedef struct _FILE_LOCK_TOC { - KSPIN_LOCK SpinLock; - LIST_ENTRY GrantedListHead; - LIST_ENTRY PendingListHead; - LIST_ENTRY CompletedListHead; - LIST_ENTRY UnlockedListHead; -} FILE_LOCK_TOC, *PFILE_LOCK_TOC; - -typedef struct _FILE_LOCK_GRANTED { - LIST_ENTRY ListEntry; - FILE_LOCK_INFO Lock; -} FILE_LOCK_GRANTED, *PFILE_LOCK_GRANTED; typedef NTSTATUS (*PCOMPLETE_LOCK_IRP_ROUTINE) ( IN PVOID Context, @@ -43,6 +25,7 @@ typedef VOID (*PUNLOCK_ROUTINE) ( IN PFILE_LOCK_INFO FileLockInfo ); + typedef struct _FILE_LOCK { PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine; PUNLOCK_ROUTINE UnlockRoutine; @@ -53,6 +36,7 @@ typedef struct _FILE_LOCK { PVOID LastReturnedLock; } FILE_LOCK, *PFILE_LOCK; + typedef struct _TUNNEL { FAST_MUTEX Mutex; PRTL_SPLAY_LINKS Cache; @@ -77,19 +61,6 @@ typedef struct _NOTIFY_SYNC } NOTIFY_SYNC, * PNOTIFY_SYNC; -typedef struct _LARGE_MCB -{ - PFAST_MUTEX FastMutex; - ULONG MaximumPairCount; - ULONG PairCount; - POOL_TYPE PoolType; - PVOID Mapping; -} LARGE_MCB, *PLARGE_MCB; - -typedef struct _MCB { - LARGE_MCB LargeMcb; -} MCB, *PMCB; - typedef VOID (*POPLOCK_WAIT_COMPLETE_ROUTINE)(PVOID Context, PIRP Irp); @@ -100,4 +71,6 @@ typedef VOID typedef PVOID OPLOCK, *POPLOCK; +#endif /* __USE_W32API */ + #endif /* __INCLUDE_DDK_FSFUNCS_H */ diff --git a/include/ddk/halfuncs.h b/include/ddk/halfuncs.h index d54b9cf..dde0f55 100644 --- a/include/ddk/halfuncs.h +++ b/include/ddk/halfuncs.h @@ -2,6 +2,8 @@ #define __INCLUDE_DDK_HALFUNCS_H /* $Id$ */ +#include + VOID STDCALL HalAcquireDisplayOwnership(IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters); @@ -25,9 +27,6 @@ PVOID STDCALL HalAllocateCrashDumpRegisters(IN PADAPTER_OBJECT AdapterObject, IN OUT PULONG NumberOfMapRegisters); -BOOLEAN STDCALL -HalAllProcessorsStarted(VOID); - NTSTATUS STDCALL HalAssignSlotResources( PUNICODE_STRING RegistryPath, @@ -40,11 +39,6 @@ HalAssignSlotResources( PCM_RESOURCE_LIST *AllocatedResources ); -BOOLEAN STDCALL -HalBeginSystemInterrupt(ULONG Vector, - KIRQL Irql, - PKIRQL OldIrql); - VOID STDCALL HalCalibratePerformanceCounter(ULONG Count); @@ -53,23 +47,9 @@ FASTCALL HalClearSoftwareInterrupt */ -BOOLEAN STDCALL -HalDisableSystemInterrupt(ULONG Vector, - ULONG Unknown2); - VOID STDCALL HalDisplayString(IN PCH String); -BOOLEAN STDCALL -HalEnableSystemInterrupt(ULONG Vector, - ULONG Unknown2, - ULONG Unknown3); - -VOID STDCALL -HalEndSystemInterrupt(KIRQL Irql, - ULONG Unknown2); - - /* * HalExamineMBR() is not exported explicitly. * It is exported by the HalDispatchTable. @@ -117,10 +97,18 @@ HalGetBusDataByOffset(BUS_DATA_TYPE BusDataType, ULONG Offset, ULONG Length); -/* Is this function really exported ?? */ +/* Is this function really exported ?? ULONG HalGetDmaAlignmentRequirement(VOID); +NTOSAPI +DDKAPI +*/ + +ULONG STDCALL +HalGetDmaAlignmentRequirement( + VOID); + BOOLEAN STDCALL HalGetEnvironmentVariable(IN PCH Name, OUT PCH Value, @@ -134,14 +122,6 @@ HalGetInterruptVector(INTERFACE_TYPE InterfaceType, PKIRQL Irql, PKAFFINITY Affinity); -VOID STDCALL -HalInitializeProcessor(ULONG ProcessorNumber, - PVOID ProcessorStack); - -BOOLEAN STDCALL -HalInitSystem(ULONG BootPhase, - PLOADER_PARAMETER_BLOCK LoaderBlock); - BOOLEAN STDCALL HalMakeBeep(ULONG Frequency); @@ -166,9 +146,6 @@ ULONG STDCALL HalReadDmaCounter(PADAPTER_OBJECT AdapterObject); VOID STDCALL -HalReportResourceUsage(VOID); - -VOID STDCALL HalRequestIpi(ULONG Unknown); /* @@ -176,9 +153,6 @@ FASTCALL HalRequestSoftwareInterrupt */ -VOID STDCALL -HalReturnToFirmware(ULONG Action); - ULONG STDCALL HalSetBusData(BUS_DATA_TYPE BusDataType, ULONG BusNumber, diff --git a/include/ddk/haltypes.h b/include/ddk/haltypes.h deleted file mode 100644 index ff34edf..0000000 --- a/include/ddk/haltypes.h +++ /dev/null @@ -1,483 +0,0 @@ -/* $Id$ - * - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS kernel - * FILE: include/ddk/haltypes.h - * PURPOSE: HAL provided defintions for device drivers - * PROGRAMMER: David Welch (welch@mcmail.com) - * REVISION HISTORY: - * 23/06/98: Taken from linux system.h - */ - - -#ifndef __INCLUDE_DDK_HALTYPES_H -#define __INCLUDE_DDK_HALTYPES_H - - -/* HalReturnToFirmware */ -#define FIRMWARE_HALT 1 -#define FIRMWARE_REBOOT 3 - -enum -{ - DEVICE_DESCRIPTION_VERSION, - DEVICE_DESCRIPTION_VERSION1, -}; - -typedef ULONG DMA_WIDTH; -typedef ULONG DMA_SPEED; - -/* - * PURPOSE: Types for HalGetBusData - */ -typedef enum _BUS_DATA_TYPE -{ - ConfigurationSpaceUndefined = -1, - Cmos, - EisaConfiguration, - Pos, - CbusConfiguration, - PCIConfiguration, - VMEConfiguration, - NuBusConfiguration, - PCMCIAConfiguration, - MPIConfiguration, - MPSAConfiguration, - PNPISAConfiguration, - MaximumBusDataType, -} BUS_DATA_TYPE, *PBUS_DATA_TYPE; - -typedef struct _DEVICE_DESCRIPTION -{ - ULONG Version; - BOOLEAN Master; - BOOLEAN ScatterGather; - BOOLEAN DemandMode; - BOOLEAN AutoInitialize; - BOOLEAN Dma32BitAddress; - BOOLEAN IgnoreCount; - BOOLEAN Reserved1; - BOOLEAN Reserved2; - ULONG BusNumber; - ULONG DmaChannel; - INTERFACE_TYPE InterfaceType; - DMA_WIDTH DmaWidth; - DMA_SPEED DmaSpeed; - ULONG MaximumLength; - ULONG DmaPort; -} DEVICE_DESCRIPTION, *PDEVICE_DESCRIPTION; - - -/* PCI bus definitions */ - -#define PCI_TYPE0_ADDRESSES 6 -#define PCI_TYPE1_ADDRESSES 2 -#define PCI_TYPE2_ADDRESSES 5 - -typedef struct _PCI_COMMON_CONFIG -{ - USHORT VendorID; /* read-only */ - USHORT DeviceID; /* read-only */ - USHORT Command; - USHORT Status; - UCHAR RevisionID; /* read-only */ - UCHAR ProgIf; /* read-only */ - UCHAR SubClass; /* read-only */ - UCHAR BaseClass; /* read-only */ - UCHAR CacheLineSize; /* read-only */ - UCHAR LatencyTimer; /* read-only */ - UCHAR HeaderType; /* read-only */ - UCHAR BIST; - union - { - struct _PCI_HEADER_TYPE_0 - { - ULONG BaseAddresses[PCI_TYPE0_ADDRESSES]; - ULONG CIS; - USHORT SubVendorID; - USHORT SubSystemID; - ULONG ROMBaseAddress; - ULONG Reserved2[2]; - - UCHAR InterruptLine; - UCHAR InterruptPin; /* read-only */ - UCHAR MinimumGrant; /* read-only */ - UCHAR MaximumLatency; /* read-only */ - } type0; - - /* PCI to PCI Bridge */ - 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; - - /* PCI to CARDBUS Bridge */ - 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; - -#define PCI_COMMON_HDR_LENGTH (FIELD_OFFSET (PCI_COMMON_CONFIG, DeviceSpecific)) - -#define PCI_MAX_DEVICES 32 -#define PCI_MAX_FUNCTION 8 - -#define PCI_INVALID_VENDORID 0xFFFF - - -/* Bit encodings for PCI_COMMON_CONFIG.HeaderType */ - -#define PCI_MULTIFUNCTION 0x80 -#define PCI_DEVICE_TYPE 0x00 -#define PCI_BRIDGE_TYPE 0x01 - - -/* Bit encodings for 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 - - -/* Bit encodings for PCI_COMMON_CONFIG.Status */ - -#define PCI_STATUS_FAST_BACK_TO_BACK 0x0080 -#define PCI_STATUS_DATA_PARITY_DETECTED 0x0100 -#define PCI_STATUS_DEVSEL 0x0600 /* 2 bits wide */ -#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 device classes */ - -#define PCI_CLASS_PRE_20 0x00 -#define PCI_CLASS_MASS_STORAGE_CTLR 0x01 -#define PCI_CLASS_NETWORK_CTLR 0x02 -#define PCI_CLASS_DISPLAY_CTLR 0x03 -#define PCI_CLASS_MULTIMEDIA_DEV 0x04 -#define PCI_CLASS_MEMORY_CTLR 0x05 -#define PCI_CLASS_BRIDGE_DEV 0x06 -#define PCI_CLASS_SIMPLE_COMMS_CTLR 0x07 -#define PCI_CLASS_BASE_SYSTEM_DEV 0x08 -#define PCI_CLASS_INPUT_DEV 0x09 -#define PCI_CLASS_DOCKING_STATION 0x0a -#define PCI_CLASS_PROCESSOR 0x0b -#define PCI_CLASS_SERIAL_BUS_CTLR 0x0c - - -/* PCI device subclasses for class 1 (mass storage controllers)*/ - -#define PCI_SUBCLASS_MSC_SCSI_BUS_CTLR 0x00 -#define PCI_SUBCLASS_MSC_IDE_CTLR 0x01 -#define PCI_SUBCLASS_MSC_FLOPPY_CTLR 0x02 -#define PCI_SUBCLASS_MSC_IPI_CTLR 0x03 -#define PCI_SUBCLASS_MSC_RAID_CTLR 0x04 -#define PCI_SUBCLASS_MSC_OTHER 0x80 - - -/* Bit encodes for PCI_COMMON_CONFIG.u.type0.BaseAddresses */ - -#define PCI_ADDRESS_IO_SPACE 0x00000001 -#define PCI_ADDRESS_MEMORY_TYPE_MASK 0x00000006 -#define PCI_ADDRESS_MEMORY_PREFETCHABLE 0x00000008 - -#define PCI_ADDRESS_IO_ADDRESS_MASK 0xfffffffc -#define PCI_ADDRESS_MEMORY_ADDRESS_MASK 0xfffffff0 -#define PCI_ADDRESS_ROM_ADDRESS_MASK 0xfffff800 - -#define PCI_TYPE_32BIT 0 -#define PCI_TYPE_20BIT 2 -#define PCI_TYPE_64BIT 4 - - -/* Bit encodes for PCI_COMMON_CONFIG.u.type0.ROMBaseAddresses */ - -#define PCI_ROMADDRESS_ENABLED 0x00000001 - - - -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; - - -/* Hal dispatch table */ - -typedef enum _HAL_QUERY_INFORMATION_CLASS -{ - HalInstalledBusInformation, - HalProfileSourceInformation, - HalSystemDockInformation, - HalPowerInformation, - HalProcessorSpeedInformation, - HalCallbackInformation, - HalMapRegisterInformation, - HalMcaLogInformation, - HalFrameBufferCachingInformation, - HalDisplayBiosInformation - /* information levels >= 0x8000000 reserved for OEM use */ -} HAL_QUERY_INFORMATION_CLASS, *PHAL_QUERY_INFORMATION_CLASS; - - -typedef enum _HAL_SET_INFORMATION_CLASS -{ - HalProfileSourceInterval, - HalProfileSourceInterruptHandler, - HalMcaRegisterDriver -} HAL_SET_INFORMATION_CLASS, *PHAL_SET_INFORMATION_CLASS; - - -typedef struct _BUS_HANDLER *PBUS_HANDLER; -typedef struct _DEVICE_HANDLER_OBJECT *PDEVICE_HANDLER_OBJECT; - - -typedef BOOLEAN STDCALL_FUNC -(*PHAL_RESET_DISPLAY_PARAMETERS)(ULONG Columns, ULONG Rows); - -typedef NTSTATUS STDCALL_FUNC -(*pHalQuerySystemInformation)(IN HAL_QUERY_INFORMATION_CLASS InformationClass, - IN ULONG BufferSize, - IN OUT PVOID Buffer, - OUT PULONG ReturnedLength); - - -typedef NTSTATUS STDCALL_FUNC -(*pHalSetSystemInformation)(IN HAL_SET_INFORMATION_CLASS InformationClass, - IN ULONG BufferSize, - IN PVOID Buffer); - - -typedef NTSTATUS STDCALL_FUNC -(*pHalQueryBusSlots)(IN PBUS_HANDLER BusHandler, - IN ULONG BufferSize, - OUT PULONG SlotNumbers, - OUT PULONG ReturnedLength); - - -/* Control codes of HalDeviceControl function */ -#define BCTL_EJECT 0x0001 -#define BCTL_QUERY_DEVICE_ID 0x0002 -#define BCTL_QUERY_DEVICE_UNIQUE_ID 0x0003 -#define BCTL_QUERY_DEVICE_CAPABILITIES 0x0004 -#define BCTL_QUERY_DEVICE_RESOURCES 0x0005 -#define BCTL_QUERY_DEVICE_RESOURCE_REQUIREMENTS 0x0006 -#define BCTL_QUERY_EJECT 0x0007 -#define BCTL_SET_LOCK 0x0008 -#define BCTL_SET_POWER 0x0009 -#define BCTL_SET_RESUME 0x000A -#define BCTL_SET_DEVICE_RESOURCES 0x000B - -/* Defines for BCTL structures */ -typedef struct -{ - BOOLEAN PowerSupported; - BOOLEAN ResumeSupported; - BOOLEAN LockSupported; - BOOLEAN EjectSupported; - BOOLEAN Removable; -} BCTL_DEVICE_CAPABILITIES, *PBCTL_DEVICE_CAPABILITIES; - - -typedef struct _DEVICE_CONTROL_CONTEXT -{ - NTSTATUS Status; - PDEVICE_HANDLER_OBJECT DeviceHandler; - PDEVICE_OBJECT DeviceObject; - ULONG ControlCode; - PVOID Buffer; - PULONG BufferLength; - PVOID Context; -} DEVICE_CONTROL_CONTEXT, *PDEVICE_CONTROL_CONTEXT; - - -typedef VOID STDCALL_FUNC -(*PDEVICE_CONTROL_COMPLETION)(IN PDEVICE_CONTROL_CONTEXT ControlContext); - - -typedef NTSTATUS STDCALL_FUNC -(*pHalDeviceControl)(IN PDEVICE_HANDLER_OBJECT DeviceHandler, - IN PDEVICE_OBJECT DeviceObject, - IN ULONG ControlCode, - IN OUT PVOID Buffer OPTIONAL, - IN OUT PULONG BufferLength OPTIONAL, - IN PVOID Context, - IN PDEVICE_CONTROL_COMPLETION CompletionRoutine); - -typedef VOID FASTCALL -(*pHalExamineMBR)(IN PDEVICE_OBJECT DeviceObject, - IN ULONG SectorSize, - IN ULONG MBRTypeIdentifier, - OUT PVOID *Buffer); - -typedef VOID FASTCALL -(*pHalIoAssignDriveLetters)(IN PLOADER_PARAMETER_BLOCK LoaderBlock, - IN PSTRING NtDeviceName, - OUT PUCHAR NtSystemPath, - OUT PSTRING NtSystemPathString); - -typedef NTSTATUS FASTCALL -(*pHalIoReadPartitionTable)(IN PDEVICE_OBJECT DeviceObject, - IN ULONG SectorSize, - IN BOOLEAN ReturnRecognizedPartitions, - OUT PDRIVE_LAYOUT_INFORMATION *PartitionBuffer); - -typedef NTSTATUS FASTCALL -(*pHalIoSetPartitionInformation)(IN PDEVICE_OBJECT DeviceObject, - IN ULONG SectorSize, - IN ULONG PartitionNumber, - IN ULONG PartitionType); - -typedef NTSTATUS FASTCALL -(*pHalIoWritePartitionTable)(IN PDEVICE_OBJECT DeviceObject, - IN ULONG SectorSize, - IN ULONG SectorsPerTrack, - IN ULONG NumberOfHeads, - IN PDRIVE_LAYOUT_INFORMATION PartitionBuffer); - -typedef PBUS_HANDLER FASTCALL -(*pHalHandlerForBus)(IN INTERFACE_TYPE InterfaceType, - IN ULONG BusNumber); - -typedef VOID FASTCALL -(*pHalReferenceBusHandler)(IN PBUS_HANDLER BusHandler); - - -typedef struct _HAL_DISPATCH -{ - ULONG Version; - pHalQuerySystemInformation HalQuerySystemInformation; - pHalSetSystemInformation HalSetSystemInformation; - pHalQueryBusSlots HalQueryBusSlots; - pHalDeviceControl HalDeviceControl; - pHalExamineMBR HalExamineMBR; - pHalIoAssignDriveLetters HalIoAssignDriveLetters; - pHalIoReadPartitionTable HalIoReadPartitionTable; - pHalIoSetPartitionInformation HalIoSetPartitionInformation; - pHalIoWritePartitionTable HalIoWritePartitionTable; - pHalHandlerForBus HalReferenceHandlerForBus; - pHalReferenceBusHandler HalReferenceBusHandler; - pHalReferenceBusHandler HalDereferenceBusHandler; -} HAL_DISPATCH, *PHAL_DISPATCH; - -#ifdef __NTOSKRNL__ -extern HAL_DISPATCH EXPORTED HalDispatchTable; -#define HALDISPATCH (&HalDispatchTable) -#else -extern PHAL_DISPATCH IMPORTED HalDispatchTable; -#define HALDISPATCH ((PHAL_DISPATCH)&HalDispatchTable) -#endif - -#define HAL_DISPATCH_VERSION 1 -#define HalDispatchTableVersion HALDISPATCH->Version -#define HalQuerySystemInformation HALDISPATCH->HalQuerySystemInformation -#define HalSetSystemInformation HALDISPATCH->HalSetSystemInformation -#define HalQueryBusSlots HALDISPATCH->HalQueryBusSlots -#define HalDeviceControl HALDISPATCH->HalDeviceControl -#define HalExamineMBR HALDISPATCH->HalExamineMBR -#define HalIoAssignDriveLetters HALDISPATCH->HalIoAssignDriveLetters -#define HalIoReadPartitionTable HALDISPATCH->HalIoReadPartitionTable -#define HalIoSetPartitionInformation HALDISPATCH->HalIoSetPartitionInformation -#define HalIoWritePartitionTable HALDISPATCH->HalIoWritePartitionTable -#define HalReferenceHandlerForBus HALDISPATCH->HalReferenceHandlerForBus -#define HalReferenceBusHandler HALDISPATCH->HalReferenceBusHandler -#define HalDereferenceBusHandler HALDISPATCH->HalDereferenceBusHandler - - -/* Hal private dispatch table */ - -typedef struct _HAL_PRIVATE_DISPATCH -{ - ULONG Version; -} HAL_PRIVATE_DISPATCH, *PHAL_PRIVATE_DISPATCH; - - -#ifdef __NTOSKRNL__ -extern HAL_PRIVATE_DISPATCH EXPORTED HalPrivateDispatchTable; -#else -extern PHAL_PRIVATE_DISPATCH IMPORTED HalPrivateDispatchTable; -#endif - -#define HAL_PRIVATE_DISPATCH_VERSION 1 - - - -/* - * Kernel debugger section - */ - -typedef struct _KD_PORT_INFORMATION -{ - ULONG ComPort; - ULONG BaudRate; - ULONG BaseAddress; -} KD_PORT_INFORMATION, *PKD_PORT_INFORMATION; - - -#ifdef __NTHAL__ -extern ULONG EXPORTED KdComPortInUse; -#else -extern ULONG IMPORTED KdComPortInUse; -#endif - -#endif /* __INCLUDE_DDK_HALTYPES_H */ - -/* EOF */ diff --git a/include/ddk/i386/tss.h b/include/ddk/i386/tss.h deleted file mode 100644 index 361086a..0000000 --- a/include/ddk/i386/tss.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * - */ - -#ifndef __INCLUDE_DDK_I386_TSS_H -#define __INCLUDE_DDK_I386_TSS_H - -#define KTSS_ESP0 (0x4) - -#ifndef __ASM__ - -typedef struct _KTSS -{ - USHORT PreviousTask; - USHORT Reserved1; - ULONG Esp0; - USHORT Ss0; - USHORT Reserved2; - ULONG Esp1; - USHORT Ss1; - USHORT Reserved3; - ULONG Esp2; - USHORT Ss2; - USHORT Reserved4; - ULONG Cr3; - ULONG Eip; - ULONG Eflags; - ULONG Eax; - ULONG Ecx; - ULONG Edx; - ULONG Ebx; - ULONG Esp; - ULONG Ebp; - ULONG Esi; - ULONG Edi; - USHORT Es; - USHORT Reserved5; - USHORT Cs; - USHORT Reserved6; - USHORT Ss; - USHORT Reserved7; - USHORT Ds; - USHORT Reserved8; - USHORT Fs; - USHORT Reserved9; - USHORT Gs; - USHORT Reserved10; - USHORT Ldt; - USHORT Reserved11; - USHORT Trap; - USHORT IoMapBase; - UCHAR IoBitmap[1]; -} KTSS __attribute__((packed)); - -#endif /* not __ASM__ */ - -#endif /* __INCLUDE_DDK_I386_TSS_H */ diff --git a/include/ddk/ioctrl.h b/include/ddk/ioctrl.h index 867eb9a..09eee8f 100644 --- a/include/ddk/ioctrl.h +++ b/include/ddk/ioctrl.h @@ -5,17 +5,17 @@ #define CTL_CODE(Dev, Func, Meth, Acc) ( ((Dev)<<16) | ((Acc)<<14) | ((Func)<<2) | (Meth)) -#define DEVICE_TYPE_FROM_CTL_CODE(ctlCode) (((ULONG)(ctlCode&0xffff0000))>>16) -#define IO_METHOD_FROM_CTL_CODE(ctlCode) (ctlCode&0x00000003) +/*#define DEVICE_TYPE_FROM_CTL_CODE(ctlCode) (((ULONG)(ctlCode&0xffff0000))>>16) */ +/*#define IO_METHOD_FROM_CTL_CODE(ctlCode) (ctlCode&0x00000003) */ -// IOCTL Parameter buffering methods +/* IOCTL Parameter buffering methods */ #define METHOD_BUFFERED 0 #define METHOD_IN_DIRECT 1 #define METHOD_OUT_DIRECT 2 #define METHOD_NEITHER 3 -// IOCTL File access type +/* IOCTL File access type */ #define FILE_ANY_ACCESS 0 #define FILE_READ_ACCESS 1 #define FILE_WRITE_ACCESS 2 diff --git a/include/ddk/iofuncs.h b/include/ddk/iofuncs.h index 572b26b..ba40efc 100644 --- a/include/ddk/iofuncs.h +++ b/include/ddk/iofuncs.h @@ -939,13 +939,17 @@ IoReportResourceUsage ( ((PDRIVER_CANCEL)InterlockedExchangePointer(&(Irp)->CancelRoutine, \ NewCancelRoutine)) -#define IoSetCompletionRoutine(Irp,Routine,Context,Success,Error,Cancel) \ +// AG: Context is now NewContext, otherwise we end up with this: +// param->LocalLength=(LocalLength) +// ...which isn't possible. + +#define IoSetCompletionRoutine(Irp,Routine,NewContext,Success,Error,Cancel) \ { \ PIO_STACK_LOCATION param; \ assert((Success)||(Error)||(Cancel)?(Routine)!=NULL:TRUE); \ param = IoGetNextIrpStackLocation((Irp)); \ param->CompletionRoutine=(Routine); \ - param->CompletionContext=(Context); \ + param->Context=(NewContext); \ param->Control = 0; \ if ((Success)) \ param->Control = SL_INVOKE_ON_SUCCESS; \ @@ -1139,15 +1143,6 @@ IofCompleteRequest ( /* --- EXPORTED BY HAL --- */ -VOID -STDCALL -IoAssignDriveLetters ( - IN PLOADER_PARAMETER_BLOCK LoaderBlock, - IN PSTRING NtDeviceName, - OUT PUCHAR NtSystemPath, - OUT PSTRING NtSystemPathString - ); - BOOLEAN STDCALL IoFlushAdapterBuffers ( diff --git a/include/ddk/iotypes.h b/include/ddk/iotypes.h index 81dbf8e..1c36c57 100644 --- a/include/ddk/iotypes.h +++ b/include/ddk/iotypes.h @@ -5,6 +5,7 @@ #ifndef __INCLUDE_DDK_IOTYPES_H #define __INCLUDE_DDK_IOTYPES_H +#include #include #include @@ -22,6 +23,11 @@ extern POBJECT_TYPE IMPORTED IoDriverObjectType; extern POBJECT_TYPE IMPORTED IoFileObjectType; #endif + +/* from winddk.h */ +#define POINTER_ALIGNMENT + + /* * These are referenced before they can be fully defined */ @@ -38,6 +44,7 @@ enum { DeallocateObject, KeepObject, + DeallocateObjectKeepRegisters }; @@ -293,6 +300,8 @@ typedef struct /* * PURPOSE: IRP stack location */ + +/* typedef struct __attribute__((packed)) _IO_STACK_LOCATION { UCHAR MajorFunction; @@ -461,9 +470,9 @@ typedef struct __attribute__((packed)) _IO_STACK_LOCATION PCM_RESOURCE_LIST AllocatedResources; PCM_RESOURCE_LIST AllocatedResourcesTranslated; } StartDevice; - +*/ /* Parameters for IRP_MN_SCSI_CLASS */ - struct +/* struct { struct _SCSI_REQUEST_BLOCK *Srb; } Scsi; @@ -475,9 +484,9 @@ typedef struct __attribute__((packed)) _IO_STACK_LOCATION ULONG Key; LARGE_INTEGER ByteOffset; } LockControl; - +*/ /* Paramters for other calls */ - struct +/* struct { PVOID Argument1; PVOID Argument2; @@ -492,7 +501,240 @@ typedef struct __attribute__((packed)) _IO_STACK_LOCATION PIO_COMPLETION_ROUTINE CompletionRoutine; PVOID CompletionContext; -} __attribute__((packed)) IO_STACK_LOCATION, *PIO_STACK_LOCATION; +} __attribute__((packed)) IO_STACK_LOCATION, *PIO_STACK_LOCATION;*/ + +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; + struct _FILE_OBJECT* FileObject; + union { + struct { + BOOLEAN ReplaceIfExists; + BOOLEAN AdvanceOnly; + }; + ULONG ClusterCount; + HANDLE DeleteHandle; + }; + } 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 { + struct _VPB* Vpb; + struct _DEVICE_OBJECT* DeviceObject; + } MountVolume; + struct { + struct _VPB* Vpb; + struct _DEVICE_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; + struct _DEVICE_OBJECT* DeviceObject; + struct _FILE_OBJECT* FileObject; + PIO_COMPLETION_ROUTINE CompletionRoutine; + PVOID Context; +} IO_STACK_LOCATION, *PIO_STACK_LOCATION; + + +// AG: The commented lines in this structure are due to PMAILSLOT_CREATE_PARAMETERS +// and PNAMED_PIPE_CREATE_PARAMETERS and PFILE_GET_QUOTA_INFORMATION not being +// defined. + +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; + struct _DEVICE_OBJECT* DeviceObject; + struct _FILE_OBJECT* FileObject; + PIO_COMPLETION_ROUTINE CompletionRoutine; + PVOID Context; + +} EXTENDED_IO_STACK_LOCATION, *PEXTENDED_IO_STACK_LOCATION; + typedef struct _IO_STATUS_BLOCK @@ -501,32 +743,6 @@ typedef struct _IO_STATUS_BLOCK ULONG Information; } IO_STATUS_BLOCK, *PIO_STATUS_BLOCK; -typedef struct _IO_COMPLETION_PACKET{ - ULONG Key; - ULONG Overlapped; - IO_STATUS_BLOCK IoStatus; - LIST_ENTRY ListEntry; -} IO_COMPLETION_PACKET, *PIO_COMPLETION_PACKET; - -typedef struct _IO_PIPE_CREATE_BUFFER -{ - BOOLEAN WriteModeMessage; - BOOLEAN ReadModeMessage; - BOOLEAN NonBlocking; - ULONG MaxInstances; - ULONG InBufferSize; - ULONG OutBufferSize; - LARGE_INTEGER TimeOut; -} IO_PIPE_CREATE_BUFFER, *PIO_PIPE_CREATE_BUFFER; - - -typedef struct _IO_MAILSLOT_CREATE_BUFFER -{ - ULONG Param; /* ?? */ - ULONG MaxMessageSize; - LARGE_INTEGER TimeOut; -} IO_MAILSLOT_CREATE_BUFFER, *PIO_MAILSLOT_CREATE_BUFFER; - /* * Driver entry point declaration @@ -594,7 +810,7 @@ typedef struct _FILE_OBJECT struct _VPB* Vpb; PVOID FsContext; PVOID FsContext2; - PSECTION_OBJECT_POINTERS SectionObjectPointers; + PSECTION_OBJECT_POINTERS SectionObjectPointer; PVOID PrivateCacheMap; NTSTATUS FinalStatus; struct _FILE_OBJECT* RelatedFileObject; @@ -846,7 +1062,7 @@ typedef struct _CONFIGURATION_INFORMATION { ULONG DiskCount; ULONG FloppyCount; - ULONG CDRomCount; + ULONG CdRomCount; ULONG TapeCount; ULONG ScsiPortCount; ULONG SerialCount; @@ -901,4 +1117,23 @@ typedef VOID STDCALL_FUNC IN BOOLEAN DriverActive); #endif // (_WIN32_WINNT >= 0x0400) + +typedef struct _IO_PIPE_CREATE_BUFFER +{ + BOOLEAN WriteModeMessage; + BOOLEAN ReadModeMessage; + BOOLEAN NonBlocking; + ULONG MaxInstances; + ULONG InBufferSize; + ULONG OutBufferSize; + LARGE_INTEGER TimeOut; +} IO_PIPE_CREATE_BUFFER, *PIO_PIPE_CREATE_BUFFER; + +typedef struct _IO_MAILSLOT_CREATE_BUFFER +{ + ULONG Param; /* ?? */ + ULONG MaxMessageSize; + LARGE_INTEGER TimeOut; +} IO_MAILSLOT_CREATE_BUFFER, *PIO_MAILSLOT_CREATE_BUFFER; + #endif /* __INCLUDE_DDK_IOTYPES_H */ diff --git a/include/ddk/kdfuncs.h b/include/ddk/kdfuncs.h deleted file mode 100644 index c790da6..0000000 --- a/include/ddk/kdfuncs.h +++ /dev/null @@ -1,99 +0,0 @@ -#ifndef __INCLUDE_DDK_KDFUNCS_H -#define __INCLUDE_DDK_KDFUNCS_H -/* $Id$ */ - -/* --- NTOSKRNL.EXE --- */ -#if defined(__NTOSKRNL__) -extern BOOLEAN KdDebuggerEnabled __declspec(dllexport); -extern BOOLEAN KdDebuggerNotPresent __declspec(dllexport); -#else -extern BOOLEAN KdDebuggerEnabled __declspec(dllimport); -extern BOOLEAN KdDebuggerNotPresent __declspec(dllimport); -#endif - -BYTE -STDCALL -KdPollBreakIn ( - VOID - ); - -BOOLEAN -STDCALL -KdPortInitialize ( - PKD_PORT_INFORMATION PortInformation, - DWORD Unknown1, - DWORD Unknown2 - ); - -BOOLEAN -STDCALL -KdPortInitializeEx ( - PKD_PORT_INFORMATION PortInformation, - DWORD Unknown1, - DWORD Unknown2 - ); - -BOOLEAN -STDCALL -KdPortGetByte ( - PUCHAR ByteRecieved - ); - -BOOLEAN -STDCALL -KdPortGetByteEx ( - PKD_PORT_INFORMATION PortInformation, - PUCHAR ByteRecieved - ); - -BOOLEAN -STDCALL -KdPortPollByte ( - PUCHAR ByteRecieved - ); - -BOOLEAN -STDCALL -KdPortPollByteEx ( - PKD_PORT_INFORMATION PortInformation, - PUCHAR ByteRecieved - ); - -VOID -STDCALL -KdPortPutByte ( - UCHAR ByteToSend - ); - -VOID -STDCALL -KdPortPutByteEx ( - PKD_PORT_INFORMATION PortInformation, - UCHAR ByteToSend - ); - -VOID -STDCALL -KdPortRestore ( - VOID - ); - -VOID -STDCALL -KdPortSave ( - VOID - ); - -BOOLEAN -STDCALL -KdPortDisableInterrupts( - VOID - ); - -BOOLEAN -STDCALL -KdPortEnableInterrupts( - VOID - ); - -#endif /* __INCLUDE_DDK_KDFUNCS_H */ diff --git a/include/ddk/kefuncs.h b/include/ddk/kefuncs.h index 6322bf2..c4d8d40 100644 --- a/include/ddk/kefuncs.h +++ b/include/ddk/kefuncs.h @@ -4,7 +4,9 @@ /* KERNEL FUNCTIONS ********************************************************/ +#ifndef KeFlushIoBuffers #define KeFlushIoBuffers(Mdl, ReadOperation, DmaOperation) +#endif VOID STDCALL KeAttachProcess (struct _EPROCESS* Process); @@ -21,18 +23,31 @@ struct _KPROCESS* KeGetCurrentProcess(VOID); VOID STDCALL KeAcquireSpinLock (PKSPIN_LOCK SpinLock, PKIRQL OldIrql); -VOID STDCALL KeAcquireSpinLockAtDpcLevel (PKSPIN_LOCK SpinLock); +#ifndef __USE_W32API +VOID STDCALL KeAcquireSpinLockAtDpcLevel (IN PKSPIN_LOCK SpinLock); + +#define KefAcquireSpinLockAtDpcLevel KeAcquireSpinLockAtDpcLevel + +VOID +STDCALL +KeReleaseSpinLockFromDpcLevel( + IN PKSPIN_LOCK SpinLock); + +#endif + /* * FUNCTION: Brings the system down in a controlled manner when an * inconsistency that might otherwise cause corruption has been detected * ARGUMENTS: * BugCheckCode = Specifies the reason for the bug check * RETURNS: Doesn't + * + * NOTES - please use the macro KEBUGCHECK with the same argument so the end-user + * knows what file/line number where the bug check occured */ VOID STDCALL KeBugCheck (ULONG BugCheckCode); - /* * FUNCTION: Brings the system down in a controlled manner when an * inconsistency that might otherwise cause corruption has been detected @@ -40,6 +55,9 @@ VOID STDCALL KeBugCheck (ULONG BugCheckCode); * BugCheckCode = Specifies the reason for the bug check * BugCheckParameter[1-4] = Additional information about bug * RETURNS: Doesn't + * + * NOTES - please use the macro KEBUGCHECKEX with the same arguments so the end-user + * knows what file/line number where the bug check occured */ VOID STDCALL KeBugCheckEx (ULONG BugCheckCode, ULONG BugCheckParameter1, @@ -73,26 +91,25 @@ VOID STDCALL KeEnterCriticalRegion (VOID); */ VOID STDCALL KeEnterKernelDebugger (VOID); -VOID STDCALL KeFlushWriteBuffer (VOID); - KIRQL STDCALL KeGetCurrentIrql (VOID); +#ifndef __USE_W32API ULONG KeGetCurrentProcessorNumber(VOID); +ULONG KeGetDcacheFillSize(VOID); +ULONG STDCALL KeGetPreviousMode (VOID); +#endif struct _KTHREAD* STDCALL KeGetCurrentThread (VOID); -ULONG KeGetDcacheFillSize(VOID); - -ULONG STDCALL KeGetPreviousMode (VOID); +VOID STDCALL 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); -VOID STDCALL KeInitializeApc (PKAPC Apc, - struct _KTHREAD* Thread, - UCHAR StateIndex, - PKKERNEL_ROUTINE KernelRoutine, - PKRUNDOWN_ROUTINE RundownRoutine, - PKNORMAL_ROUTINE NormalRoutine, - UCHAR Mode, - PVOID Context); /* * VOID @@ -100,8 +117,10 @@ VOID STDCALL KeInitializeApc (PKAPC Apc, * PKBUGCHECK_CALLBACK_RECORD CallbackRecord * ); */ +#ifndef KeInitializeCallbackRecord #define KeInitializeCallbackRecord(CallbackRecord) \ (CallbackRecord)->State = BufferEmpty +#endif VOID STDCALL KeInitializeDeviceQueue (PKDEVICE_QUEUE DeviceQueue); @@ -169,10 +188,10 @@ LONG STDCALL KeInsertQueue(IN PKQUEUE Queue, IN PLIST_ENTRY Entry); -VOID STDCALL KeInsertQueueApc (PKAPC Apc, +BOOLEAN STDCALL KeInsertQueueApc (PKAPC Apc, PVOID SystemArgument1, PVOID SystemArgument2, - UCHAR Mode); + KPRIORITY PriorityBoost); BOOLEAN STDCALL KeInsertQueueDpc (PKDPC Dpc, PVOID SystemArgument1, @@ -223,12 +242,6 @@ KeRaiseIrqlToDpcLevel ( VOID ); -KIRQL -STDCALL -KeRaiseIrqlToSynchLevel ( - VOID - ); - /* * FUNCTION: Raises a user mode exception * ARGUMENTS: @@ -303,11 +316,13 @@ KeReleaseSpinLock ( KIRQL NewIrql ); +#ifndef __USE_W32API VOID STDCALL KeReleaseSpinLockFromDpcLevel ( PKSPIN_LOCK Spinlock ); +#endif PKDEVICE_QUEUE_ENTRY STDCALL @@ -398,10 +413,10 @@ KeWaitForSingleObject ( -// io permission map has a 8k size -// Each bit in the IOPM corresponds to an io port byte address. The bitmap -// is initialized to allow IO at any port. [ all bits set ]. - +/* io permission map has a 8k size + * Each bit in the IOPM corresponds to an io port byte address. The bitmap + * is initialized to allow IO at any port. [ all bits set ]. + */ typedef struct _IOPM { UCHAR Bitmap[8192]; @@ -418,7 +433,8 @@ typedef struct _IOPM * is initialized to allow IO at any port. [ all bits set ]. The IOPL determines * the minium privilege level required to perform IO prior to checking the permission map. */ -VOID Ke386SetIoAccessMap(ULONG NewMap, PIOPM *IoPermissionMap); +BOOL STDCALL +Ke386SetIoAccessMap(ULONG NewMap, PULONG IoPermissionMap); /* * FUNCTION: Queries the io permission map. @@ -431,7 +447,8 @@ VOID Ke386SetIoAccessMap(ULONG NewMap, PIOPM *IoPermissionMap); * is initialized to allow IO at any port. [ all bits set ]. The IOPL determines * the minium privilege level required to perform IO prior to checking the permission map. */ -VOID Ke386QueryIoAccessMap(BOOLEAN NewMap, PIOPM *IoPermissionMap); +BOOL STDCALL +Ke386QueryIoAccessMap(ULONG NewMap, PULONG IoPermissionMap); /* * FUNCTION: Set the process IOPL @@ -439,7 +456,18 @@ VOID Ke386QueryIoAccessMap(BOOLEAN NewMap, PIOPM *IoPermissionMap); * Eprocess = Pointer to a executive process object * EnableIo = Specify TRUE to enable IO and FALSE to disable */ -NTSTATUS Ke386IoSetAccessProcess(struct _EPROCESS* Eprocess, BOOLEAN EnableIo); +BOOL STDCALL +Ke386IoSetAccessProcess(struct _EPROCESS* Eprocess, BOOL EnableIo); + +/* + * FUNCTION: Sets the contents of a gdt descriptor. + * ARGUMENTS: + * Entry = The selector to set. + * Value1 = The value of the low dword of the descriptor. + * Value2 = The value of the high dword of the descriptor. + */ +VOID +KeSetGdtSelector(ULONG Entry, ULONG Value1, ULONG Value2); /* * FUNCTION: Releases a set of Global Descriptor Table Selectors diff --git a/include/ddk/ketypes.h b/include/ddk/ketypes.h index 7851386..785d4da 100644 --- a/include/ddk/ketypes.h +++ b/include/ddk/ketypes.h @@ -3,72 +3,14 @@ #ifndef __INCLUDE_DDK_KETYPES_H #define __INCLUDE_DDK_KETYPES_H -#define MB_FLAGS_MEM_INFO (0x1) -#define MB_FLAGS_BOOT_DEVICE (0x2) -#define MB_FLAGS_COMMAND_LINE (0x4) -#define MB_FLAGS_MODULE_INFO (0x8) -#define MB_FLAGS_AOUT_SYMS (0x10) -#define MB_FLAGS_ELF_SYMS (0x20) -#define MB_FLAGS_MMAP_INFO (0x40) -#define MB_FLAGS_DRIVES_INFO (0x80) -#define MB_FLAGS_CONFIG_TABLE (0x100) -#define MB_FLAGS_BOOT_LOADER_NAME (0x200) -#define MB_FLAGS_APM_TABLE (0x400) -#define MB_FLAGS_GRAPHICS_TABLE (0x800) - -typedef struct _LOADER_MODULE -{ - ULONG ModStart; - ULONG ModEnd; - ULONG String; - ULONG Reserved; -} LOADER_MODULE, *PLOADER_MODULE; - -typedef struct _ADDRESS_RANGE -{ - ULONG BaseAddrLow; - ULONG BaseAddrHigh; - ULONG LengthLow; - ULONG LengthHigh; - ULONG Type; -} ADDRESS_RANGE, *PADDRESS_RANGE; - -typedef struct _LOADER_PARAMETER_BLOCK -{ - ULONG Flags; - ULONG MemLower; - ULONG MemHigher; - ULONG BootDevice; - ULONG CommandLine; - ULONG ModsCount; - ULONG ModsAddr; - UCHAR Syms[12]; - ULONG MmapLength; - ULONG MmapAddr; - ULONG DrivesCount; - ULONG DrivesAddr; - ULONG ConfigTable; - ULONG BootLoaderName; -} LOADER_PARAMETER_BLOCK, *PLOADER_PARAMETER_BLOCK; - -#ifdef __NTOSKRNL__ -extern CHAR EXPORTED KeNumberProcessors; -extern LOADER_PARAMETER_BLOCK EXPORTED KeLoaderBlock; -extern ULONG EXPORTED KeDcacheFlushCount; -extern ULONG EXPORTED KeIcacheFlushCount; -#else -extern CHAR IMPORTED KeNumberProcessors; -extern LOADER_PARAMETER_BLOCK IMPORTED KeLoaderBlock; -extern ULONG EXPORTED KeDcacheFlushCount; -extern ULONG EXPORTED KeIcacheFlushCount; -#endif - - +/* include ntos/ketypes.h here? */ struct _KMUTANT; typedef LONG KPRIORITY; +typedef LONG FLONG; + typedef VOID STDCALL_FUNC (*PKBUGCHECK_CALLBACK_ROUTINE)(PVOID Buffer, ULONG Length); @@ -122,8 +64,8 @@ typedef struct _KQUEUE { DISPATCHER_HEADER Header; LIST_ENTRY EntryListHead; - ULONG RunningThreads; - ULONG MaximumThreads; + ULONG CurrentCount; + ULONG MaximumCount; LIST_ENTRY ThreadListHead; } KQUEUE, *PKQUEUE; @@ -138,18 +80,15 @@ typedef struct _KTIMER LONG Period; } KTIMER, *PKTIMER; -struct _KSPIN_LOCK; - -typedef struct _KSPIN_LOCK -{ - ULONG Lock; -} KSPIN_LOCK, *PKSPIN_LOCK; +typedef ULONG_PTR KSPIN_LOCK, *PKSPIN_LOCK; typedef struct _KDEVICE_QUEUE { - LIST_ENTRY ListHead; - BOOLEAN Busy; - KSPIN_LOCK Lock; + CSHORT Type; + CSHORT Size; + LIST_ENTRY DeviceListHead; + KSPIN_LOCK Lock; + BOOLEAN Busy; } KDEVICE_QUEUE, *PKDEVICE_QUEUE; @@ -247,8 +186,8 @@ typedef struct _KDPC typedef struct _KDEVICE_QUEUE_ENTRY { - LIST_ENTRY Entry; - ULONG Key; + LIST_ENTRY DeviceListEntry; + ULONG SortKey; BOOLEAN Inserted; } KDEVICE_QUEUE_ENTRY, *PKDEVICE_QUEUE_ENTRY; @@ -263,19 +202,6 @@ typedef BOOLEAN STDCALL_FUNC (*PKSERVICE_ROUTINE)(struct _KINTERRUPT* Interrupt, PVOID ServiceContext); -typedef struct _KINTERRUPT -{ - ULONG Vector; - KAFFINITY ProcessorEnableMask; - PKSPIN_LOCK IrqLock; - BOOLEAN Shareable; - BOOLEAN FloatingSave; - PKSERVICE_ROUTINE ServiceRoutine; - PVOID ServiceContext; - LIST_ENTRY Entry; - KIRQL SynchLevel; -} KINTERRUPT, *PKINTERRUPT; - typedef struct _KSYSTEM_TIME { ULONG LowPart; @@ -285,4 +211,27 @@ typedef struct _KSYSTEM_TIME typedef struct _EPROCESS EPROCESS, *PEPROCESS; +typedef HANDLE HSEMAPHORE; + +typedef HANDLE HDRVOBJ; + +typedef LONG FLOAT_LONG, *PFLOAT_LONG; + +typedef LONG FLOATL; + +typedef LONG FIX; /* fixed-point number */ + +/* copied from W32API */ +typedef struct _KFLOATING_SAVE +{ + ULONG ControlWord; + ULONG StatusWord; + ULONG ErrorOffset; + ULONG ErrorSelector; + ULONG DataOffset; + ULONG DataSelector; + ULONG Cr0NpxState; + ULONG Spare1; +} KFLOATING_SAVE, *PKFLOATING_SAVE; + #endif /* __INCLUDE_DDK_KETYPES_H */ diff --git a/include/ddk/mmfuncs.h b/include/ddk/mmfuncs.h index 4129003..9c4175c 100644 --- a/include/ddk/mmfuncs.h +++ b/include/ddk/mmfuncs.h @@ -362,7 +362,7 @@ MmMapVideoDisplay ( NTSTATUS STDCALL MmMapViewInSystemSpace ( - IN PVOID Section, + IN PVOID SectionObject, OUT PVOID * MappedBase, IN PULONG ViewSize ); @@ -455,12 +455,12 @@ MmResetDriverPaging ( PVOID AddressWithinSection ); -DWORD +PVOID STDCALL MmSecureVirtualMemory ( - DWORD Unknown0, - DWORD Unknown1, - DWORD Unknown2 + PVOID Address, + SIZE_T Length, + ULONG Mode ); BOOLEAN STDCALL @@ -535,7 +535,7 @@ MmUnmapVideoDisplay ( NTSTATUS STDCALL MmUnmapViewInSystemSpace ( - DWORD Unknown0 + IN PVOID MappedBase ); #if 0 NTSTATUS @@ -548,6 +548,19 @@ MmUnmapViewOfSection ( VOID STDCALL MmUnsecureVirtualMemory ( - DWORD Unknown0 + PVOID SecureMem ); -#endif + +VOID STDCALL +ProbeForRead (IN PVOID Address, + IN ULONG Length, + IN ULONG Alignment); + +VOID STDCALL +ProbeForWrite (IN PVOID Address, + IN ULONG Length, + IN ULONG Alignment); + +#endif /* _INCLUDE_DDK_MMFUNCS_H */ + +/* EOF */ diff --git a/include/ddk/mmtypes.h b/include/ddk/mmtypes.h index 2498b39..dd055e1 100644 --- a/include/ddk/mmtypes.h +++ b/include/ddk/mmtypes.h @@ -7,10 +7,6 @@ #include -#define PAGE_ROUND_UP(x) ( (((ULONG)x)%PAGE_SIZE) ? ((((ULONG)x)&(~0xfff))+0x1000) : ((ULONG)x) ) -#define PAGE_ROUND_DOWN(x) (((ULONG)x)&(~0xfff)) - - /* * FUNCTION: Determines if the given virtual address is page aligned */ @@ -19,7 +15,9 @@ /* * PURPOSE: Returns the byte offset of a field within a structure */ +#ifndef FIELD_OFFSET #define FIELD_OFFSET(Type,Field) (LONG)(&(((Type *)(0))->Field)) +#endif /* * PURPOSE: Returns the base address structure if the caller knows the @@ -29,7 +27,9 @@ * Type = Type of the whole structure * Field = Name of the field whose address is none */ +#ifndef CONTAINING_RECORD #define CONTAINING_RECORD(Address,Type,Field) (Type *)(((LONG)Address) - FIELD_OFFSET(Type,Field)) +#endif #define MDL_MAPPED_TO_SYSTEM_VA (0x1) diff --git a/include/ddk/ntbootvid.h b/include/ddk/ntbootvid.h new file mode 100644 index 0000000..2ea41cf --- /dev/null +++ b/include/ddk/ntbootvid.h @@ -0,0 +1,11 @@ +#define FILE_DEVICE_BOOTVID 53335 + +#define IOCTL_BOOTVID_INITIALIZE \ + CTL_CODE(FILE_DEVICE_BOOTVID, 1, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define IOCTL_BOOTVID_CLEANUP \ + CTL_CODE(FILE_DEVICE_BOOTVID, 2, METHOD_BUFFERED, FILE_ANY_ACCESS) + +typedef struct +{ + BOOL STDCALL (*ResetDisplay)(VOID); +} NTBOOTVID_FUNCTION_TABLE; diff --git a/include/ddk/ntddblue.h b/include/ddk/ntddblue.h index dd13642..818a989 100644 --- a/include/ddk/ntddblue.h +++ b/include/ddk/ntddblue.h @@ -54,9 +54,9 @@ typedef struct _OUTPUT_CHARACTER typedef struct _CONSOLE_DRAW { - SHORT X; // Origin + SHORT X; /* Origin */ SHORT Y; - SHORT SizeX; // Size of the screen buffer + SHORT SizeX; /* Size of the screen buffer */ SHORT SizeY; } CONSOLE_DRAW, *PCONSOLE_DRAW; diff --git a/include/ddk/ntddk.h b/include/ddk/ntddk.h index b2e0e19..e104384 100644 --- a/include/ddk/ntddk.h +++ b/include/ddk/ntddk.h @@ -9,6 +9,12 @@ * 15/05/98: Created */ +#ifdef __USE_W32API + +#include_next + +#else /* __USE_W32API */ + #ifndef __NTDDK_H #define __NTDDK_H @@ -50,7 +56,6 @@ extern "C" #include #include #include -#include #include #include #include @@ -61,7 +66,6 @@ extern "C" #include #include #include -#include #include #include @@ -72,7 +76,6 @@ extern "C" #include #include #include -#include #include #include #include @@ -88,3 +91,4 @@ extern "C" #endif /* __NTDDK_H */ +#endif /* __USE_W32API */ diff --git a/include/ddk/ntddkbd.h b/include/ddk/ntddkbd.h index fa903f3..328045e 100644 --- a/include/ddk/ntddkbd.h +++ b/include/ddk/ntddkbd.h @@ -36,10 +36,10 @@ extern "C" { typedef struct _KEYBOARD_INPUT_DATA { - // - // Unit number. E.g., for \Device\KeyboardPort0 the unit is '0', - // for \Device\KeyboardPort1 the unit is '1', and so on. - // + /* + * Unit number. E.g., for \Device\KeyboardPort0 the unit is '0', + * for \Device\KeyboardPort1 the unit is '1', and so on. + */ USHORT UnitId; USHORT MakeCode; diff --git a/include/ddk/ntddmou.h b/include/ddk/ntddmou.h index f64067e..ff2e945 100644 --- a/include/ddk/ntddmou.h +++ b/include/ddk/ntddmou.h @@ -1,4 +1,7 @@ -// Mouse definitions common to both mouse class and port drivers +/* Mouse definitions common to both mouse class and port drivers */ + +#define DD_MOUSE_DEVICE_NAME "\\Device\\PointerClass" +#define DD_MOUSE_DEVICE_NAME_U L"\\Device\\PointerClass" #define IO_MOUSE_INCREMENT 6 #define MOUSE_BUFFER_SIZE 32 @@ -8,6 +11,8 @@ #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) +#define IOCTL_MOUSE_QUERY_ATTRIBUTES CTL_CODE(FILE_DEVICE_MOUSE, 0x0000, METHOD_BUFFERED, FILE_ANY_ACCESS) + #define MOUSE_BUTTON_1_DOWN 0x0001 #define MOUSE_BUTTON_1_UP 0x0002 #define MOUSE_BUTTON_2_DOWN 0x0004 @@ -27,6 +32,16 @@ #define MOUSE_MIDDLE_BUTTON_DOWN MOUSE_BUTTON_3_DOWN #define MOUSE_MIDDLE_BUTTON_UP MOUSE_BUTTON_3_UP +#define MOUSE_SERIAL_HARDWARE 0x0004 +#define WHEELMOUSE_SERIAL_HARDWARE 0x0040 + +typedef struct _MOUSE_ATTRIBUTES { + USHORT MouseIdentifier; + USHORT NumberOfButtons; + USHORT SampleRate; + ULONG InputDataQueueLength; +} MOUSE_ATTRIBUTES, *PMOUSE_ATTRIBUTES; + /* Mouse input data structure */ typedef struct _MOUSE_INPUT_DATA { USHORT UnitId; diff --git a/include/ddk/ntddscsi.h b/include/ddk/ntddscsi.h index 7ddfb16..276a402 100644 --- a/include/ddk/ntddscsi.h +++ b/include/ddk/ntddscsi.h @@ -10,9 +10,7 @@ #ifndef __STORAGE_INCLUDE_NTDDSCSI_H #define __STORAGE_INCLUDE_NTDDSCSI_H - /* IOCTL codes */ - #define IOCTL_SCSI_PASS_THROUGH \ CTL_CODE(FILE_DEVICE_CONTROLLER, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) #define IOCTL_SCSI_MINIPORT \ @@ -87,6 +85,58 @@ typedef struct _SCSI_ADDRESS UCHAR Lun; } SCSI_ADDRESS, *PSCSI_ADDRESS; + +/* Used by IOCTL_SCSI_PASS_THROUGH */ + +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 DataBufferOffset; + ULONG SenseInfoOffset; + UCHAR Cdb[16]; +} SCSI_PASS_THROUGH, *PSCSI_PASS_THROUGH; + + +/* Used by IOCTL_SCSI_PASS_THROUGH_DIRECT */ + +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; + ULONG DataBufferOffset; + ULONG SenseInfoOffset; + UCHAR Cdb[16]; +} SCSI_PASS_THROUGH_DIRECT, *PSCSI_PASS_THROUGH_DIRECT; + + +/* Pass through DataIn */ + +#define SCSI_IOCTL_DATA_OUT 0 +#define SCSI_IOCTL_DATA_IN 1 +#define SCSI_IOCTL_DATA_UNSPECIFIED 2 + +typedef struct _DUMP_POINTERS +{ + PVOID DeviceObject; +} DUMP_POINTERS, *PDUMP_POINTERS; + #endif /* __STORAGE_INCLUDE_NTDDSCSI_H */ /* EOF */ diff --git a/include/ddk/ntifs.h b/include/ddk/ntifs.h index 82632f7..8a1a5ef 100644 --- a/include/ddk/ntifs.h +++ b/include/ddk/ntifs.h @@ -1,3 +1,9 @@ +#ifdef __USE_W32API + +#include_next + +#else /* __USE_W32API */ + #ifndef __INCLUDE_DDK_NTIFS_H #define __INCLUDE_DDK_NTIFS_H @@ -7,6 +13,14 @@ CcRosInitializeFileCache (PFILE_OBJECT FileObject, NTSTATUS STDCALL CcRosReleaseFileCache (PFILE_OBJECT FileObject); +#define FSCTL_ROS_QUERY_LCN_MAPPING \ + CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 63, METHOD_BUFFERED, FILE_ANY_ACCESS) + +typedef struct _ROS_QUERY_LCN_MAPPING +{ + LARGE_INTEGER LcnDiskOffset; +} ROS_QUERY_LCN_MAPPING, *PROS_QUERY_LCN_MAPPING; + #include #include @@ -15,3 +29,5 @@ CcRosReleaseFileCache (PFILE_OBJECT FileObject); #include #endif /* __INCLUDE_DDK_NTIFS_H */ + +#endif /* __USE_W32API */ diff --git a/include/ddk/obfuncs.h b/include/ddk/obfuncs.h index 9fb2d22..663a64e 100644 --- a/include/ddk/obfuncs.h +++ b/include/ddk/obfuncs.h @@ -8,47 +8,6 @@ ObAssignSecurity(IN PACCESS_STATE AccessState, IN PVOID Object, IN POBJECT_TYPE Type); -/* -BOOLEAN STDCALL -ObCheckCreateObjectAccess(IN PVOID Object, - IN ACCESS_MASK DesiredAccess, - ULONG Param3, - ULONG Param4, - ULONG Param5, - IN KPROCESSOR_MODE AccessMode, - OUT PNTSTATUS AccessStatus); -*/ - -/* -BOOLEAN STDCALL -ObCheckObjectAccess(IN PVOID Object, - ULONG Param2, - ULONG Param3, - IN KPROCESSOR_MODE AccessMode, - OUT PACCESS_MODE GrantedAccess); -*/ - -NTSTATUS STDCALL -ObCreateObject(OUT PHANDLE Handle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes, - IN POBJECT_TYPE Type, - OUT PVOID *Object); - -#if 0 -/* original implementation */ -NTSTATUS STDCALL -ObCreateObject(IN KPROCESSOR_MODE ObjectAttributesAccessMode OPTIONAL, - IN POBJECT_TYPE Type, - 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); -#endif - VOID FASTCALL ObfDereferenceObject(IN PVOID Object); @@ -61,14 +20,6 @@ ObfReferenceObject(IN PVOID Object); #define ObReferenceObject(Object) \ ObfReferenceObject(Object) -/* -BOOLEAN STDCALL -ObFindHandleForObject(ULONG Param1, - ULONG Param2, - ULONG Param3, - ULONG Param4); -*/ - ULONG STDCALL ObGetObjectPointerCount(IN PVOID Object); diff --git a/include/ddk/obtypes.h b/include/ddk/obtypes.h deleted file mode 100644 index 623b4f7..0000000 --- a/include/ddk/obtypes.h +++ /dev/null @@ -1,204 +0,0 @@ -#ifndef _INCLUDE_DDK_OBTYPES_H -#define _INCLUDE_DDK_OBTYPES_H -/* $Id$ */ -struct _DIRECTORY_OBJECT; -struct _OBJECT_ATTRIBUTES; - -typedef ULONG ACCESS_STATE, *PACCESS_STATE; - -typedef struct _OBJECT_HANDLE_INFORMATION { - ULONG HandleAttributes; - ACCESS_MASK GrantedAccess; -} OBJECT_HANDLE_INFORMATION, *POBJECT_HANDLE_INFORMATION; - -typedef struct _OBJECT_TYPE -{ - /* - * PURPOSE: Tag to be used when allocating objects of this type - */ - ULONG Tag; - - /* - * PURPOSE: Name of the type - */ - UNICODE_STRING TypeName; - - /* - * PURPOSE: Total number of objects of this type - */ - ULONG TotalObjects; - - /* - * PURPOSE: Total number of handles of this type - */ - ULONG TotalHandles; - - /* - * PURPOSE: Maximum objects of this type - */ - ULONG MaxObjects; - - /* - * PURPOSE: Maximum handles of this type - */ - ULONG MaxHandles; - - /* - * PURPOSE: Paged pool charge - */ - ULONG PagedPoolCharge; - - /* - * PURPOSE: Nonpaged pool charge - */ - ULONG NonpagedPoolCharge; - - /* - * PURPOSE: Mapping of generic access rights - */ - PGENERIC_MAPPING Mapping; - - /* - * PURPOSE: Dumps the object - * NOTE: To be defined - */ - VOID STDCALL_FUNC (*Dump)(VOID); - - /* - * PURPOSE: Opens the object - * NOTE: To be defined - */ - VOID STDCALL_FUNC (*Open)(VOID); - - /* - * PURPOSE: Called to close an object if OkayToClose returns true - */ - VOID STDCALL_FUNC (*Close)(PVOID ObjectBody, - ULONG HandleCount); - - /* - * PURPOSE: Called to delete an object when the last reference is removed - */ - VOID STDCALL_FUNC (*Delete)(PVOID ObjectBody); - - /* - * PURPOSE: Called when an open attempts to open a file apparently - * residing within the object - * RETURNS - * STATUS_SUCCESS NextObject was found - * STATUS_UNSUCCESSFUL NextObject not found - * STATUS_REPARSE Path changed, restart parsing the path - */ - NTSTATUS STDCALL_FUNC (*Parse)(PVOID ParsedObject, - PVOID *NextObject, - PUNICODE_STRING FullPath, - PWSTR *Path, - ULONG Attributes); - - /* - * PURPOSE: Called to set, query, delete or assign a security-descriptor - * to the object - * RETURNS - * STATUS_SUCCESS NextObject was found - */ - NTSTATUS STDCALL_FUNC (*Security)(PVOID ObjectBody, - SECURITY_OPERATION_CODE OperationCode, - SECURITY_INFORMATION SecurityInformation, - PSECURITY_DESCRIPTOR SecurityDescriptor, - PULONG BufferLength); - - /* - */ - VOID STDCALL_FUNC (*QueryName)(VOID); - - /* - * PURPOSE: Called when a process asks to close the object - */ - VOID STDCALL_FUNC (*OkayToClose)(VOID); - - NTSTATUS STDCALL_FUNC (*Create)(PVOID ObjectBody, - PVOID Parent, - PWSTR RemainingPath, - struct _OBJECT_ATTRIBUTES* ObjectAttributes); - - VOID STDCALL_FUNC (*DuplicationNotify)(PEPROCESS DuplicateTo, - PEPROCESS DuplicateFrom, - PVOID Object); -} OBJECT_TYPE, *POBJECT_TYPE; - - -typedef struct _OBJECT_HEADER -/* - * PURPOSE: Header for every object managed by the object manager - */ -{ - UNICODE_STRING Name; - LIST_ENTRY Entry; - LONG RefCount; - LONG HandleCount; - BOOLEAN CloseInProcess; - BOOLEAN Permanent; - struct _DIRECTORY_OBJECT* Parent; - POBJECT_TYPE ObjectType; - - /* - * PURPOSE: Object type - * NOTE: This overlaps the first member of the object body - */ - CSHORT Type; - - /* - * PURPOSE: Object size - * NOTE: This overlaps the second member of the object body - */ - CSHORT Size; - - -} OBJECT_HEADER, *POBJECT_HEADER; - -typedef struct _OBJECT_ATTRIBUTES -{ - ULONG Length; - HANDLE RootDirectory; - PUNICODE_STRING ObjectName; - ULONG Attributes; - SECURITY_DESCRIPTOR *SecurityDescriptor; - SECURITY_QUALITY_OF_SERVICE *SecurityQualityOfService; -} OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES; - -typedef struct _HANDLE_TABLE -{ - LIST_ENTRY ListHead; - KSPIN_LOCK ListLock; -} HANDLE_TABLE, *PHANDLE_TABLE; - -extern POBJECT_TYPE ObDirectoryType; - -#if 0 -#define OBJECT_TYPE_0 0 -#define OBJECT_TYPE_1 1 -#define OBJECT_TYPE_DIRECTORY 2 -#define OBJECT_TYPE_SYMBOLICLINK 3 -#define OBJECT_TYPE_TOKEN 4 -#define OBJECT_TYPE_PROCESS 5 -#define OBJECT_TYPE_THREAD 6 -#define OBJECT_TYPE_EVENT 7 -#define OBJECT_TYPE_8 8 -#define OBJECT_TYPE_MUTANT 9 -#define OBJECT_TYPE_SEMAPHORE 10 -#define OBJECT_TYPE_TIMER 11 -#define OBJECT_TYPE_12 12 -#define OBJECT_TYPE_WINDOWSTATION 13 -#define OBJECT_TYPE_DESKTOP 14 -#define OBJECT_TYPE_SECTION 15 -#define OBJECT_TYPE_KEY 16 -#define OBJECT_TYPE_PORT 17 -#define OBJECT_TYPE_18 18 -#define OBJECT_TYPE_19 19 -#define OBJECT_TYPE_20 20 -#define OBJECT_TYPE_21 21 -#define OBJECT_TYPE_IOCOMPLETION 22 -#define OBJECT_TYPE_FILE 23 -#endif - -#endif /* ndef _INCLUDE_DDK_OBTYPES_H */ diff --git a/include/ddk/pnptypes.h b/include/ddk/pnptypes.h index b402bae..3de24d7 100644 --- a/include/ddk/pnptypes.h +++ b/include/ddk/pnptypes.h @@ -4,7 +4,7 @@ struct _DEVICE_OBJECT; struct _FILE_OBJECT; -// windows.h may be included before +/* windows.h may be included before */ #ifndef _GUID_DEFINED #define _GUID_DEFINED @@ -58,9 +58,9 @@ typedef struct _DEVICE_INTERFACE_CHANGE_NOTIFICATION { USHORT Version; USHORT Size; GUID Event; - // - // Event-specific data - // + /* + * Event-specific data + */ GUID InterfaceClassGuid; PUNICODE_STRING SymbolicLinkName; } DEVICE_INTERFACE_CHANGE_NOTIFICATION, *PDEVICE_INTERFACE_CHANGE_NOTIFICATION; @@ -69,9 +69,9 @@ typedef struct _HWPROFILE_CHANGE_NOTIFICATION { USHORT Version; USHORT Size; GUID Event; - // - // (No event-specific data) - // + /* + * (No event-specific data) + */ } HWPROFILE_CHANGE_NOTIFICATION, *PHWPROFILE_CHANGE_NOTIFICATION; typedef struct _PLUGPLAY_NOTIFICATION_HEADER { @@ -93,9 +93,9 @@ typedef struct _TARGET_DEVICE_CUSTOM_NOTIFICATION { USHORT Version; USHORT Size; GUID Event; - // - // Event-specific data - // + /* + * Event-specific data + */ struct _FILE_OBJECT *FileObject; LONG NameBufferOffset; UCHAR CustomDataBuffer[1]; @@ -105,14 +105,14 @@ typedef struct _TARGET_DEVICE_REMOVAL_NOTIFICATION { USHORT Version; USHORT Size; GUID Event; - // - // Event-specific data - // + /* + * Event-specific data + */ struct _FILE_OBJECT *FileObject; } TARGET_DEVICE_REMOVAL_NOTIFICATION, *PTARGET_DEVICE_REMOVAL_NOTIFICATION; -// PnP Device Property for IoGetDeviceProperty +/* PnP Device Property for IoGetDeviceProperty */ typedef enum { DevicePropertyDeviceDescription, DevicePropertyHardwareID, @@ -134,12 +134,12 @@ typedef enum { DevicePropertyUINumber } DEVICE_REGISTRY_PROPERTY; -// DevInstKeyType values for IoOpenDeviceRegistryKey +/* DevInstKeyType values for IoOpenDeviceRegistryKey */ #define PLUGPLAY_REGKEY_DEVICE 1 #define PLUGPLAY_REGKEY_DRIVER 2 #define PLUGPLAY_REGKEY_CURRENT_HWPROFILE 4 -// EventCategory for IoRegisterPlugPlayNotification +/* EventCategory for IoRegisterPlugPlayNotification */ typedef enum _IO_NOTIFICATION_EVENT_CATEGORY { EventCategoryReserved, EventCategoryHardwareProfileChange, @@ -147,18 +147,18 @@ typedef enum _IO_NOTIFICATION_EVENT_CATEGORY { EventCategoryTargetDeviceChange } IO_NOTIFICATION_EVENT_CATEGORY; -// CallbackRoutine for IoRegisterPlugPlayNotification +/* CallbackRoutine for IoRegisterPlugPlayNotification */ typedef NTSTATUS STDCALL_FUNC (*PDRIVER_NOTIFICATION_CALLBACK_ROUTINE)( IN PVOID NotificationStructure, IN PVOID Context); -// Callback for IoReportTargetDeviceChangeAsynchronous +/* Callback for IoReportTargetDeviceChangeAsynchronous */ typedef VOID STDCALL_FUNC (*PDEVICE_CHANGE_COMPLETE_CALLBACK)( IN PVOID Context); -// PNP/POWER values for IRP_MJ_PNP/IRP_MJ_POWER +/* PNP/POWER values for IRP_MJ_PNP/IRP_MJ_POWER */ typedef enum _DEVICE_RELATION_TYPE { BusRelations, EjectionRelations, diff --git a/include/ddk/potypes.h b/include/ddk/potypes.h index 06ede74..0b02bc3 100644 --- a/include/ddk/potypes.h +++ b/include/ddk/potypes.h @@ -4,7 +4,7 @@ struct _DEVICE_OBJECT; struct _IO_STATUS_BLOCK; -// Flags for PoSetSystemState +/* Flags for PoSetSystemState */ typedef ULONG EXECUTION_STATE; #define ES_SYSTEM_REQUIRED ((EXECUTION_STATE)0x00000001) @@ -12,7 +12,7 @@ typedef ULONG EXECUTION_STATE; #define ES_USER_PRESENT ((EXECUTION_STATE)0x00000004) #define ES_CONTINUOUS ((EXECUTION_STATE)0x80000000) -// PowerState for PoRequestPowerIrp +/* PowerState for PoRequestPowerIrp */ typedef enum _SYSTEM_POWER_STATE { PowerSystemUnspecified = 0, PowerSystemWorking, @@ -24,7 +24,7 @@ typedef enum _SYSTEM_POWER_STATE { PowerSystemMaximum } SYSTEM_POWER_STATE, *PSYSTEM_POWER_STATE; -// Values for IRP_MN_QUERY_POWER/IRP_MN_SET_POWER +/* Values for IRP_MN_QUERY_POWER/IRP_MN_SET_POWER */ typedef enum { PowerActionNone = 0, PowerActionReserved, @@ -36,7 +36,7 @@ typedef enum { PowerActionWarmEject } POWER_ACTION, *PPOWER_ACTION; -// State for PoRegisterDeviceForIdleDetection +/* State for PoRegisterDeviceForIdleDetection */ typedef enum _DEVICE_POWER_STATE { PowerDeviceUnspecified = 0, PowerDeviceD0, @@ -46,19 +46,19 @@ typedef enum _DEVICE_POWER_STATE { PowerDeviceMaximum } DEVICE_POWER_STATE, *PDEVICE_POWER_STATE; -// State for PoSetPowerState +/* State for PoSetPowerState */ typedef union _POWER_STATE { SYSTEM_POWER_STATE SystemState; DEVICE_POWER_STATE DeviceState; } POWER_STATE, *PPOWER_STATE; -// Type for PoSetPowerState +/* Type for PoSetPowerState */ typedef enum _POWER_STATE_TYPE { SystemPowerState = 0, DevicePowerState } POWER_STATE_TYPE, *PPOWER_STATE_TYPE; -// CompletionFunction for PoRequestPowerIrp +/* CompletionFunction for PoRequestPowerIrp */ typedef VOID STDCALL_FUNC (*PREQUEST_POWER_COMPLETE) ( IN struct _DEVICE_OBJECT *DeviceObject, diff --git a/include/ddk/psfuncs.h b/include/ddk/psfuncs.h index cac2810..88d89db 100644 --- a/include/ddk/psfuncs.h +++ b/include/ddk/psfuncs.h @@ -31,7 +31,7 @@ NTSTATUS STDCALL PsCreateSystemThread(PHANDLE ThreadHandle, HANDLE ProcessHandle, PCLIENT_ID ClientId, PKSTART_ROUTINE StartRoutine, - PVOID StartContext); + void *StartContext); NTSTATUS STDCALL PsTerminateSystemThread(NTSTATUS ExitStatus); NTSTATUS STDCALL PsCreateSystemProcess(PHANDLE ProcessHandle, @@ -41,12 +41,13 @@ NTSTATUS STDCALL PsCreateSystemProcess(PHANDLE ProcessHandle, NTSTATUS STDCALL PsCreateWin32Process(struct _EPROCESS* Process); NTSTATUS STDCALL PsCreateWin32Thread(struct _ETHREAD* Thread); -VOID STDCALL PsEstablishWin32Callouts(PVOID Param1, - PVOID Param2, - PVOID Param3, - PVOID Param4, - ULONG W32ThreadSize, - ULONG W32ProcessSize); +VOID STDCALL +PsEstablishWin32Callouts (PW32_PROCESS_CALLBACK W32ProcessCallback, + PW32_THREAD_CALLBACK W32ThreadCallback, + PVOID Param3, + PVOID Param4, + ULONG W32ThreadSize, + ULONG W32ProcessSize); #define PsGetCurrentProcess() IoGetCurrentProcess() #define PsGetCurrentThread() ((struct _ETHREAD*) (KeGetCurrentThread())) @@ -81,11 +82,11 @@ NTSTATUS STDCALL PsLookupProcessByProcessId(IN PVOID ProcessId, NTSTATUS STDCALL PsLookupProcessThreadByCid(IN PCLIENT_ID Cid, OUT PEPROCESS *Process OPTIONAL, OUT struct _ETHREAD **Thread); -// OUT PETHREAD *Thread); + /* OUT PETHREAD *Thread); */ NTSTATUS STDCALL PsLookupThreadByThreadId(IN PVOID ThreadId, OUT struct _ETHREAD **Thread); -// OUT PETHREAD *Thread); + /* OUT PETHREAD *Thread); */ NTSTATUS STDCALL PsSetCreateProcessNotifyRoutine(IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine, diff --git a/include/ddk/pstypes.h b/include/ddk/pstypes.h index 9925904..3013760 100644 --- a/include/ddk/pstypes.h +++ b/include/ddk/pstypes.h @@ -3,7 +3,7 @@ #include -#include +#include #include #ifndef TLS_MINIMUM_AVAILABLE @@ -21,20 +21,33 @@ struct _KPROCESS; struct _ETHREAD; struct _KTHREAD; -typedef NTSTATUS STDCALL_FUNC (*PKSTART_ROUTINE)(PVOID StartContext); +typedef struct _KTHREAD *PKTHREAD, *PRKTHREAD; -typedef VOID STDCALL_FUNC (*PCREATE_PROCESS_NOTIFY_ROUTINE)(HANDLE ParentId, - HANDLE ProcessId, - BOOLEAN Create); +typedef VOID STDCALL_FUNC +(*PKSTART_ROUTINE)(PVOID StartContext); -typedef VOID STDCALL_FUNC (*PCREATE_THREAD_NOTIFY_ROUTINE)(HANDLE ProcessId, - HANDLE ThreadId, - BOOLEAN Create); +typedef VOID STDCALL_FUNC +(*PCREATE_PROCESS_NOTIFY_ROUTINE)(HANDLE ParentId, + HANDLE ProcessId, + BOOLEAN Create); + +typedef VOID STDCALL_FUNC +(*PCREATE_THREAD_NOTIFY_ROUTINE)(HANDLE ProcessId, + HANDLE ThreadId, + BOOLEAN Create); + +typedef NTSTATUS STDCALL_FUNC +(*PW32_PROCESS_CALLBACK)(struct _EPROCESS *Process, + BOOLEAN Create); + +typedef NTSTATUS STDCALL_FUNC +(*PW32_THREAD_CALLBACK)(struct _ETHREAD *Thread, + BOOLEAN Create); typedef struct _STACK_INFORMATION { - PVOID BaseAddress; - PVOID UpperAddress; + PVOID BaseAddress; + PVOID UpperAddress; } STACK_INFORMATION, *PSTACK_INFORMATION; typedef ULONG THREADINFOCLASS; @@ -46,17 +59,4 @@ struct _KPROCESS; #define HIGH_PRIORITY (31) #define MAXIMUM_PRIORITY (32) - -#ifdef __NTOSKRNL__ -extern struct _EPROCESS* EXPORTED PsInitialSystemProcess; -extern POBJECT_TYPE EXPORTED PsProcessType; -extern POBJECT_TYPE EXPORTED PsThreadType; -#else -#ifdef __GNU__ // robd -extern struct _EPROCESS* IMPORTED PsInitialSystemProcess; -extern POBJECT_TYPE IMPORTED PsProcessType; -extern POBJECT_TYPE IMPORTED PsThreadType; -#endif -#endif - #endif /* __INCLUDE_DDK_PSTYPES_H */ diff --git a/include/ddk/scsi.h b/include/ddk/scsi.h index 46d8f50..921b83a 100644 --- a/include/ddk/scsi.h +++ b/include/ddk/scsi.h @@ -559,26 +559,26 @@ typedef union _CDB #define SCSIOP_MECHANISM_STATUS 0xBD #define SCSIOP_READ_CD 0xBE -// -// If the IMMED bit is 1, status is returned as soon -// as the operation is initiated. If the IMMED bit -// is 0, status is not returned until the operation -// is completed. -// +/* + * If the IMMED bit is 1, status is returned as soon + * as the operation is initiated. If the IMMED bit + * is 0, status is not returned until the operation + * is completed. + */ #define CDB_RETURN_ON_COMPLETION 0 #define CDB_RETURN_IMMEDIATE 1 -// -// CDB Force media access used in extended read and write commands. -// +/* + * CDB Force media access used in extended read and write commands. + */ #define CDB_FORCE_MEDIA_ACCESS 0x08 -// -// Denon CD ROM operation codes -// +/* + * Denon CD ROM operation codes + */ #define SCSIOP_DENON_EJECT_DISC 0xE6 #define SCSIOP_DENON_STOP_AUDIO 0xE7 @@ -586,9 +586,9 @@ typedef union _CDB #define SCSIOP_DENON_READ_TOC 0xE9 #define SCSIOP_DENON_READ_SUBCODE 0xEB -// -// SCSI Bus Messages -// +/* + * SCSI Bus Messages + */ #define SCSIMESS_ABORT 0x06 #define SCSIMESS_ABORT_WITH_TAG 0x0D @@ -615,25 +615,25 @@ typedef union _CDB #define SCSIMESS_SAVE_DATA_POINTER 0X02 #define SCSIMESS_TERMINATE_IO_PROCESS 0X11 -// -// SCSI Extended Message operation codes -// +/* + * SCSI Extended Message operation codes + */ #define SCSIMESS_MODIFY_DATA_POINTER 0X00 #define SCSIMESS_SYNCHRONOUS_DATA_REQ 0X01 #define SCSIMESS_WIDE_DATA_REQUEST 0X03 -// -// SCSI Extended Message Lengths -// +/* + * SCSI Extended Message Lengths + */ #define SCSIMESS_MODIFY_DATA_LENGTH 5 #define SCSIMESS_SYNCH_DATA_LENGTH 3 #define SCSIMESS_WIDE_DATA_LENGTH 2 -// -// SCSI extended message structure -// +/* + * SCSI extended message structure + */ #pragma pack (1) typedef struct _SCSI_EXTENDED_MESSAGE @@ -675,16 +675,16 @@ typedef struct _SCSI_EXTENDED_MESSAGE #define SCSISTAT_COMMAND_TERMINATED 0x22 #define SCSISTAT_QUEUE_FULL 0x28 -// -// Enable Vital Product Data Flag (EVPD) -// used with INQUIRY command. -// +/* + * Enable Vital Product Data Flag (EVPD) + * used with INQUIRY command. + */ #define CDB_INQUIRY_EVPD 0x01 -// -// Defines for format CDB -// +/* + * Defines for format CDB + */ #define LUN0_FORMAT_SAVING_DEFECT_LIST 0 #define USE_DEFAULTMSB 0 @@ -814,14 +814,14 @@ typedef struct _SENSE_DATA /* Additional Sense codes */ -#define SCSI_ADSENSE_NO_SENSE 0x00 -#define SCSI_ADSENSE_LUN_NOT_READY 0x04 +#define SCSI_ADSENSE_NO_SENSE 0x00 +#define SCSI_ADSENSE_LUN_NOT_READY 0x04 #define SCSI_ADSENSE_ILLEGAL_COMMAND 0x20 -#define SCSI_ADSENSE_ILLEGAL_BLOCK 0x21 -#define SCSI_ADSENSE_INVALID_LUN 0x25 -#define SCSI_ADSENSE_INVALID_CDB 0x24 -#define SCSI_ADSENSE_MUSIC_AREA 0xA0 -#define SCSI_ADSENSE_DATA_AREA 0xA1 +#define SCSI_ADSENSE_ILLEGAL_BLOCK 0x21 +#define SCSI_ADSENSE_INVALID_LUN 0x25 +#define SCSI_ADSENSE_INVALID_CDB 0x24 +#define SCSI_ADSENSE_MUSIC_AREA 0xA0 +#define SCSI_ADSENSE_DATA_AREA 0xA1 #define SCSI_ADSENSE_VOLUME_OVERFLOW 0xA7 #define SCSI_ADSENSE_NO_MEDIA_IN_DEVICE 0x3a diff --git a/include/ddk/service.h b/include/ddk/service.h deleted file mode 100644 index e6a6848..0000000 --- a/include/ddk/service.h +++ /dev/null @@ -1,60 +0,0 @@ - -#ifndef __INTERNAL_SERVICE_H -#define __INTERNAL_SERVICE_H - - -/* number of entries in the service descriptor tables */ -#define SSDT_MAX_ENTRIES 4 - - -#pragma pack(1) - -// System Service Dispatch Table -typedef struct t_SSDT { - ULONG SysCallPtr; -} SSDT, *PSSDT; - -// System Service Parameters Table -typedef struct t_SSPT { - unsigned int ParamBytes; -} SSPT, *PSSPT; - -typedef struct t_KeServiceDescriptorTableEntry { - PSSDT SSDT; - PULONG ServiceCounterTable; - unsigned int NumberOfServices; - PSSPT SSPT; - -} KE_SERVICE_DESCRIPTOR_TABLE_ENTRY, *PKE_SERVICE_DESCRIPTOR_TABLE_ENTRY; - -#pragma pack() - - -/* --- NTOSKRNL.EXE --- */ -#if defined(__NTOSKRNL__) -extern -KE_SERVICE_DESCRIPTOR_TABLE_ENTRY -KeServiceDescriptorTable[SSDT_MAX_ENTRIES] __declspec(dllexport); -#else -extern -KE_SERVICE_DESCRIPTOR_TABLE_ENTRY -KeServiceDescriptorTable[SSDT_MAX_ENTRIES] __declspec(dllimport); -#endif - -extern -KE_SERVICE_DESCRIPTOR_TABLE_ENTRY -KeServiceDescriptorTableShadow[SSDT_MAX_ENTRIES]; - - -BOOLEAN -STDCALL -KeAddSystemServiceTable ( - PSSDT SSDT, - PULONG ServiceCounterTable, - ULONG NumberOfServices, - PSSPT SSPT, - ULONG TableIndex - ); - -#endif - diff --git a/include/ddk/setypes.h b/include/ddk/setypes.h index cf1ab5d..6feedd9 100644 --- a/include/ddk/setypes.h +++ b/include/ddk/setypes.h @@ -57,50 +57,50 @@ typedef struct _ACCESS_TOKEN { - TOKEN_SOURCE TokenSource; // 0x00 - LUID TokenId; // 0x10 - LUID AuthenticationId; // 0x18 - LARGE_INTEGER ExpirationTime; // 0x20 - LUID ModifiedId; // 0x28 - ULONG UserAndGroupCount; // 0x30 - ULONG PrivilegeCount; // 0x34 - ULONG VariableLength; // 0x38 - ULONG DynamicCharged; // 0x3C - ULONG DynamicAvailable; // 0x40 - ULONG DefaultOwnerIndex; // 0x44 - PSID_AND_ATTRIBUTES UserAndGroups; // 0x48 - PSID PrimaryGroup; // 0x4C - PLUID_AND_ATTRIBUTES Privileges; // 0x50 - ULONG Unknown1; // 0x54 - PACL DefaultDacl; // 0x58 - TOKEN_TYPE TokenType; // 0x5C - SECURITY_IMPERSONATION_LEVEL ImpersonationLevel; // 0x60 - UCHAR TokenFlags; // 0x64 - UCHAR TokenInUse; // 0x65 - UCHAR Unused[2]; // 0x66 - PVOID ProxyData; // 0x68 - PVOID AuditData; // 0x6c - UCHAR VariablePart[0]; // 0x70 + TOKEN_SOURCE TokenSource; /* 0x00 */ + LUID TokenId; /* 0x10 */ + LUID AuthenticationId; /* 0x18 */ + LARGE_INTEGER ExpirationTime; /* 0x20 */ + LUID ModifiedId; /* 0x28 */ + ULONG UserAndGroupCount; /* 0x30 */ + ULONG PrivilegeCount; /* 0x34 */ + ULONG VariableLength; /* 0x38 */ + ULONG DynamicCharged; /* 0x3C */ + ULONG DynamicAvailable; /* 0x40 */ + ULONG DefaultOwnerIndex; /* 0x44 */ + PSID_AND_ATTRIBUTES UserAndGroups; /* 0x48 */ + PSID PrimaryGroup; /* 0x4C */ + PLUID_AND_ATTRIBUTES Privileges; /* 0x50 */ + ULONG Unknown1; /* 0x54 */ + PACL DefaultDacl; /* 0x58 */ + TOKEN_TYPE TokenType; /* 0x5C */ + SECURITY_IMPERSONATION_LEVEL ImpersonationLevel; /* 0x60 */ + UCHAR TokenFlags; /* 0x64 */ + UCHAR TokenInUse; /* 0x65 */ + UCHAR Unused[2]; /* 0x66 */ + PVOID ProxyData; /* 0x68 */ + PVOID AuditData; /* 0x6c */ + UCHAR VariablePart[0]; /* 0x70 */ } ACCESS_TOKEN, *PACCESS_TOKEN; typedef struct _SECURITY_SUBJECT_CONTEXT { - PACCESS_TOKEN ClientToken; // 0x0 - SECURITY_IMPERSONATION_LEVEL ImpersonationLevel; // 0x4 - PACCESS_TOKEN PrimaryToken; // 0x8 - PVOID ProcessAuditId; // 0xC + PACCESS_TOKEN ClientToken; /* 0x0 */ + SECURITY_IMPERSONATION_LEVEL ImpersonationLevel; /* 0x4 */ + PACCESS_TOKEN PrimaryToken; /* 0x8 */ + PVOID ProcessAuditId; /* 0xC */ } SECURITY_SUBJECT_CONTEXT, *PSECURITY_SUBJECT_CONTEXT; typedef struct _SECURITY_CLIENT_CONTEXT { - SECURITY_QUALITY_OF_SERVICE SecurityQos; // 0x00 - PACCESS_TOKEN Token; // 0x0C - BOOLEAN DirectlyAccessClientToken; // 0x10 - BOOLEAN DirectAccessEffectiveOnly; // 0x11 - BOOLEAN ServerIsRemote; // 0x12 - TOKEN_CONTROL ClientTokenControl; // 0x14 + SECURITY_QUALITY_OF_SERVICE SecurityQos; /* 0x00 */ + PACCESS_TOKEN Token; /* 0x0C */ + BOOLEAN DirectlyAccessClientToken; /* 0x10 */ + BOOLEAN DirectAccessEffectiveOnly; /* 0x11 */ + BOOLEAN ServerIsRemote; /* 0x12 */ + TOKEN_CONTROL ClientTokenControl; /* 0x14 */ } SECURITY_CLIENT_CONTEXT, *PSECURITY_CLIENT_CONTEXT; diff --git a/include/ddk/srb.h b/include/ddk/srb.h index a911c55..13dd9d7 100644 --- a/include/ddk/srb.h +++ b/include/ddk/srb.h @@ -99,27 +99,27 @@ typedef struct _PORT_CONFIGURATION_INFORMATION typedef struct _SCSI_REQUEST_BLOCK { - USHORT Length; // 0x00 - UCHAR Function; // 0x02 - UCHAR SrbStatus; // 0x03 - UCHAR ScsiStatus; // 0x04 - UCHAR PathId; // 0x05 - UCHAR TargetId; // 0x06 - UCHAR Lun; // 0x07 - UCHAR QueueTag; // 0x08 - UCHAR QueueAction; // 0x09 - UCHAR CdbLength; // 0x0A - UCHAR SenseInfoBufferLength; // 0x0B - ULONG SrbFlags; // 0x0C - ULONG DataTransferLength; // 0x10 - ULONG TimeOutValue; // 0x14 - PVOID DataBuffer; // 0x18 - PVOID SenseInfoBuffer; // 0x1C - struct _SCSI_REQUEST_BLOCK *NextSrb; // 0x20 - PVOID OriginalRequest; // 0x24 - PVOID SrbExtension; // 0x28 - ULONG QueueSortKey; // 0x2C - UCHAR Cdb[16]; // 0x30 + USHORT Length; /* 0x00 */ + UCHAR Function; /* 0x02 */ + UCHAR SrbStatus; /* 0x03 */ + UCHAR ScsiStatus; /* 0x04 */ + UCHAR PathId; /* 0x05 */ + UCHAR TargetId; /* 0x06 */ + UCHAR Lun; /* 0x07 */ + UCHAR QueueTag; /* 0x08 */ + UCHAR QueueAction; /* 0x09 */ + UCHAR CdbLength; /* 0x0A */ + UCHAR SenseInfoBufferLength; /* 0x0B */ + ULONG SrbFlags; /* 0x0C */ + ULONG DataTransferLength; /* 0x10 */ + ULONG TimeOutValue; /* 0x14 */ + PVOID DataBuffer; /* 0x18 */ + PVOID SenseInfoBuffer; /* 0x1C */ + struct _SCSI_REQUEST_BLOCK *NextSrb; /* 0x20 */ + PVOID OriginalRequest; /* 0x24 */ + PVOID SrbExtension; /* 0x28 */ + ULONG QueueSortKey; /* 0x2C */ + UCHAR Cdb[16]; /* 0x30 */ } SCSI_REQUEST_BLOCK, *PSCSI_REQUEST_BLOCK; #define SCSI_REQUEST_BLOCK_SIZE sizeof(SCSI_REQUEST_BLOCK) diff --git a/include/ddk/status.h b/include/ddk/status.h index b8bd209..760baae 100644 --- a/include/ddk/status.h +++ b/include/ddk/status.h @@ -3,15 +3,6 @@ #ifndef __ASM__ -#define NTSTAT_SEVERITY_SHIFT 30 -#define NTSTAT_SEVERITY_MASK 0x00000003 -#define NTSTAT_FACILITY_SHIFT 16 -#define NTSTAT_FACILITY_MASK 0x00000FFF -#define NTSTAT_CUSTOMER_MASK 0x20000000 - -#define NT_SEVERITY(StatCode) (((StatCode) >> NTSTAT_SEVERITY_SHIFT) & NTSTAT_SEVERITY_MASK) -#define NT_FACILITY(StatCode) (((StatCode) >> NTSTAT_FACILITY_SHIFT) & NTSTAT_FACILITY_MASK) -#define NT_CUSTOMER(StatCode) ((StatCode) & NTSTAT_CUSTOMER_MASK) #define NT_SUCCESS(StatCode) ((NTSTATUS)(StatCode) >= 0) /* @@ -192,7 +183,7 @@ #define STATUS_DEVICE_ALREADY_ATTACHED ((NTSTATUS)0xc0000038) #define STATUS_OBJECT_PATH_INVALID ((NTSTATUS)0xc0000039) #define STATUS_OBJECT_PATH_NOT_FOUND ((NTSTATUS)0xc000003a) -#define STATUS_PATH_SYNTAX_BAD ((NTSTATUS)0xc000003b) +#define STATUS_OBJECT_PATH_SYNTAX_BAD ((NTSTATUS)0xc000003b) #define STATUS_DATA_OVERRUN ((NTSTATUS)0xc000003c) #define STATUS_DATA_LATE_ERROR ((NTSTATUS)0xc000003d) #define STATUS_DATA_ERROR ((NTSTATUS)0xc000003e) @@ -697,15 +688,6 @@ #define RPC_NT_SS_IN_NULL_CONTEXT ((NTSTATUS)0xC0030004) - -/* FIXME: Are these official values ?? */ -#define STATUS_FS_QUERY_REQUIRED ((NTSTATUS)0xC1000001) -#define STATUS_HANDLE_NOT_WAITABLE ((NTSTATUS)0xC1000002) -#define STATUS_OBJECT_FILE_MISMATCH ((NTSTATUS)0xC1000003) -#define STATUS_INVALID_PARAMETER_MAX ((NTSTATUS)0xC1000004) -#define STATUS_CONFLICTING_ADDRESS ((NTSTATUS)0xC1000005) -#define STATUS_NO_MEDIA_IN_DRIVE ((NTSTATUS)0xC1000006) - #else /* !__ASM__ */ #define STATUS_INVALID_SYSTEM_SERVICE 0xc000001c diff --git a/include/ddk/types.h b/include/ddk/types.h index 908a477..3d66bc2 100644 --- a/include/ddk/types.h +++ b/include/ddk/types.h @@ -1,16 +1,10 @@ #ifndef __INCLUDE_DDK_TYPES_H #define __INCLUDE_DDK_TYPES_H -// these should be moved to a file like ntdef.h - - +/* these should be moved to a file like ntdef.h */ typedef ULONG KAFFINITY, *PKAFFINITY; - - - - /* * Various other types (all quite pointless) */ @@ -26,7 +20,4 @@ typedef ULONG LOCK_OPERATION; typedef LARGE_INTEGER PHYSICAL_ADDRESS; typedef PHYSICAL_ADDRESS* PPHYSICAL_ADDRESS; - - - #endif /* __INCLUDE_DDK_TYPES_H */ diff --git a/include/ddk/winddi.h b/include/ddk/winddi.h index 9d18363..c3dde72 100644 --- a/include/ddk/winddi.h +++ b/include/ddk/winddi.h @@ -16,6 +16,7 @@ #else #include #endif +#include #ifndef IN #define IN @@ -27,27 +28,54 @@ typedef DWORD PTRDIFF; #endif -#define GDI_DRIVER_VERSION 0x4000 // NT 4 compatibility - -/* FIXME: find definitions for these structs */ -typedef PVOID PCOLORADJUSTMENT; -typedef PVOID PDD_CALLBACKS; -typedef PVOID PDD_HALINFO; -typedef PVOID PDD_PALETTECALLBACKS; -typedef PVOID PDD_SURFACECALLBACKS; -typedef PVOID PFONTINFO; -typedef PVOID PGAMMA_TABLES; -typedef PVOID PGLYPHDATA; -typedef PVOID PLINEATTRS; -typedef DWORD MIX; -typedef DWORD ROP4; -typedef PVOID PSTROBJ; -typedef PVOID PTTPOLYGONHEADER; -typedef PVOID PVIDEOMEMORY; +#define DDI_DRIVER_VERSION_NT4 0x20000 +#define DDI_DRIVER_VERSION_SP3 0x20003 +#define DDI_DRIVER_VERSION_NT5 0x30000 +#define DDI_DRIVER_VERSION_NT5_01 0x30100 +#define GDI_DRIVER_VERSION 0x4000 /* NT 4 compatibility */ + +typedef DDHAL_DDCALLBACKS *PDD_CALLBACKS; +typedef DDHALINFO *PDD_HALINFO; +typedef DDHAL_DDPALETTECALLBACKS *PDD_PALETTECALLBACKS; +typedef DDHAL_DDSURFACECALLBACKS *PDD_SURFACECALLBACKS; +typedef struct _VIDEOMEMORY +{ + DWORD dwFlags; + FLATPTR fpStart; + union + { + FLATPTR fpEnd; + DWORD dwWidth; + }; + DDSCAPS ddsCaps; + DDSCAPS ddsCapsAlt; + union + { + struct _VMEMHEAP *lpHeap; + DWORD dwHeight; + }; +} VIDEOMEMORY, *PVIDEOMEMORY; + +typedef struct _FONTINFO +{ + ULONG cjThis; + FLONG flCaps; + ULONG cGlyphsSupported; + ULONG cjMaxGlyph1; + ULONG cjMaxGlyph4; + ULONG cjMaxGlyph8; + ULONG cjMaxGlyph32; +} FONTINFO, *PFONTINFO; + +typedef BYTE GAMMA_TABLES[2][256]; +typedef GAMMA_TABLES *PGAMMA_TABLES; +typedef COLORADJUSTMENT *PCOLORADJUSTMENT; + +typedef ULONG MIX; +typedef ULONG ROP4; #define DDI_DRIVER_VERSION 0x00010000 -/* FIXME: how big should this constant be? */ #define HS_DDI_MAX 6 /* XLate types */ @@ -69,7 +97,9 @@ enum _BMF_TYPES BMF_24BPP, BMF_32BPP, BMF_4RLE, - BMF_8RLE + BMF_8RLE, + BMF_JPEG, + BMF_PNG }; #define BMF_TOPDOWN 0x00000001 @@ -77,6 +107,10 @@ enum _BMF_TYPES #define BMF_DONTCACHE 0x00000004 #define BMF_USERMEM 0x00000008 #define BMF_KMSECTION 0x00000010 +#define BMF_NOTSYSMEM 0x0020 +#define BMF_WINDOW_BLT 0x0040 +#define BMF_UMPDMEM 0x0080 +#define BMF_RESERVED 0xFF00 #define DC_TRIVIAL 0 #define DC_RECT 1 @@ -190,6 +224,13 @@ enum _FP_MODES FP_WINDINGMODE }; +typedef struct _FD_GLYPHATTR { + ULONG cjThis; + ULONG cGlyphs; + ULONG iMode; + BYTE aGlyphAttr[1]; +} FD_GLYPHATTR, *PFD_GLYPHATTR; + enum _GLYPH_MODE { FO_HGLYPHS, @@ -197,7 +238,7 @@ enum _GLYPH_MODE FO_PATHOBJ }; -// Allowed values for GDIINFO.ulPrimaryOrder. +/* Allowed values for GDIINFO.ulPrimaryOrder. */ #define PRIMARY_ORDER_ABC 0 #define PRIMARY_ORDER_ACB 1 @@ -206,7 +247,7 @@ enum _GLYPH_MODE #define PRIMARY_ORDER_CBA 4 #define PRIMARY_ORDER_CAB 5 -// Allowed values for GDIINFO.ulHTPatternSize. +/* Allowed values for GDIINFO.ulHTPatternSize. */ #define HT_PATSIZE_2x2 0 #define HT_PATSIZE_2x2_M 1 @@ -227,7 +268,7 @@ enum _GLYPH_MODE #define HT_PATSIZE_MAX_INDEX HT_PATSIZE_16x16_M #define HT_PATSIZE_DEFAULT HT_PATSIZE_4x4_M -// Allowed values for GDIINFO.ulHTOutputFormat. +/* Allowed values for GDIINFO.ulHTOutputFormat. */ #define HT_FORMAT_1BPP 0 #define HT_FORMAT_4BPP 2 @@ -237,7 +278,7 @@ enum _GLYPH_MODE #define HT_FORMAT_24BPP 6 #define HT_FORMAT_32BPP 7 -// Allowed values for GDIINFO.flHTFlags. +/* Allowed values for GDIINFO.flHTFlags. */ #define HT_FLAG_SQUARE_DEVICE_PEL 0x00000001 #define HT_FLAG_HAS_BLACK_DYE 0x00000002 @@ -292,6 +333,7 @@ enum _DRV_HOOK_FUNCS INDEX_DrvDisableSurface, INDEX_DrvAssertMode, INDEX_DrvResetPDEV = 7, + INDEX_DrvDisableDriver, INDEX_DrvCreateDeviceBitmap = 10, INDEX_DrvDeleteDeviceBitmap, INDEX_DrvRealizeBrush, @@ -331,7 +373,8 @@ enum _DRV_HOOK_FUNCS INDEX_DrvQueryTrueTypeOutline, INDEX_DrvGetTrueTypeFile, INDEX_DrvQueryFontFile, - INDEX_DrvQueryAdvanceWidths = 53, + INDEX_DrvMovePanning, + INDEX_DrvQueryAdvanceWidths, INDEX_DrvSetPixelFormat, INDEX_DrvDescribePixelFormat, INDEX_DrvSwapBuffers, @@ -341,7 +384,35 @@ enum _DRV_HOOK_FUNCS INDEX_DrvEnableDirectDraw, INDEX_DrvDisableDirectDraw, INDEX_DrvQuerySpoolType, - INDEX_DrvTransparentBlt = 74, + INDEX_DrvIcmCreateColorTransform, + INDEX_DrvIcmDeleteColorTransform, + INDEX_DrvIcmCheckBitmapBits, + INDEX_DrvIcmSetDeviceGammaRamp, + INDEX_DrvGradientFill, + INDEX_DrvStretchBltROP, + INDEX_DrvPlgBlt, + INDEX_DrvAlphaBlend, + INDEX_DrvSynthesizeFont, + INDEX_DrvGetSynthesizedFontFiles, + INDEX_DrvTransparentBlt, + INDEX_DrvQueryPerBandInfo, + INDEX_DrvQueryDeviceSupport, + INDEX_DrvReserved1, + INDEX_DrvReserved2, + INDEX_DrvReserved3, + INDEX_DrvReserved4, + INDEX_DrvReserved5, + INDEX_DrvReserved6, + INDEX_DrvReserved7, + INDEX_DrvReserved8, + INDEX_DrvQueryGlyphAttrs, + INDEX_DrvNotify, + INDEX_DrvSynchronizeSurface, + INDEX_DrvResetDevice, + INDEX_DrvReserved9, + INDEX_DrvReserved10, + INDEX_DrvReserved11, + INDEX_DrvDeriveSurface = 85, INDEX_LAST }; @@ -432,8 +503,7 @@ typedef struct _DRVENABLEDATA DRVFN *pdrvfn; } DRVENABLEDATA, *PDRVENABLEDATA; -/* FIXME: replace this with correct def for LDECI4 */ -typedef DWORD LDECI4; +typedef LONG LDECI4; typedef struct _CIECHROMA { @@ -518,7 +588,7 @@ typedef struct _BRUSHOBJ { ULONG iSolidColor; PVOID pvRbrush; - + FLONG flColorType; /* remainder of fields are for GDI internal use */ LOGBRUSH logbrush; } BRUSHOBJ, *PBRUSHOBJ; @@ -539,6 +609,19 @@ typedef struct _ENUMRECTS RECTL arcl[1]; } ENUMRECTS, *PENUMRECTS; +typedef struct _BLENDOBJ +{ + BLENDFUNCTION BlendFunction; +}BLENDOBJ,*PBLENDOBJ; + +typedef struct +{ + DWORD nSize; + HDC hdc; + PBYTE pvEMF; + PBYTE pvCurrentRecord; +} EMFINFO, *PEMFINFO; + typedef struct _FONTOBJ { ULONG iUniq; @@ -616,7 +699,7 @@ typedef struct _IFIMETRICS PANOSE panose; } IFIMETRICS, *PIFIMETRICS; -#define NB_RESERVED_COLORS 20 // number of fixed colors in system palette +#define NB_RESERVED_COLORS 20 /* number of fixed colors in system palette */ typedef struct _XLATEOBJ { @@ -630,9 +713,10 @@ typedef struct _XLATEOBJ typedef struct _PALOBJ { + ULONG ulReserved; PXLATEOBJ logicalToSystem; int *mapping; - PLOGPALETTE logpalette; // _MUST_ be the last field + PLOGPALETTE logpalette; /* _MUST_ be the last field */ } PALOBJ, *PPALOBJ; typedef struct _PATHOBJ @@ -669,9 +753,178 @@ typedef VOID (CALLBACK * WNDOBJCHANGEPROC)(PWNDOBJ WndObj, ULONG Flags); typedef struct _XFORMOBJ { - /* FIXME: what does this beast look like? */ + ULONG ulReserved; } XFORMOBJ, *PXFORMOBJ; +typedef struct _GLYPHBITS +{ + POINTL ptlOrigin; + SIZEL sizlBitmap; + BYTE aj[1]; +} GLYPHBITS; + +typedef union _GLYPHDEF +{ + GLYPHBITS *pgb; + PATHOBJ *ppo; +} GLYPHDEF; + +typedef struct _POINTQF +{ + LARGE_INTEGER x; + LARGE_INTEGER y; +} POINTQF, *PPOINTQF; + +typedef struct _GLYPHDATA { + GLYPHDEF gdf; + HGLYPH hg; + FIX fxD; + FIX fxA; + FIX fxAB; + FIX fxInkTop; + FIX fxInkBottom; + RECTL rclInk; + POINTQF ptqD; +} GLYPHDATA, *PGLYPHDATA; + +typedef struct _GLYPHPOS +{ + HGLYPH hg; + GLYPHDEF *pgdf; + POINTL *ptl; +} GLYPHPOS, *PGLYPHPOS; + +typedef struct _STROBJ +{ + ULONG cGlyphs; + FLONG flAccel; + ULONG ulCharInc; + RECTL rclBkGround; + GLYPHPOS *pgp; + LPWSTR pwszOrg; +} STROBJ, *PSTROBJ; + +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; + +struct _DRIVEROBJ; + +typedef BOOL (CALLBACK * FREEOBJPROC) (struct _DRIVEROBJ* pDriverObj); + +typedef struct _DRIVEROBJ +{ + PVOID pvObj; + FREEOBJPROC pFreeProc; + HDEV hdev; + DHPDEV dhpdev; +} DRIVEROBJ; + +typedef struct _TYPE1_FONT +{ + HANDLE hPFM; + HANDLE hPFB; + ULONG ulIdentifier; +} TYPE1_FONT; + +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 _LINEATTRS +{ + FLONG fl; + ULONG iJoin; + ULONG iEndCap; + FLOAT_LONG elWidth; + FLOATL eMiterLimit; + ULONG cstyle; + PFLOAT_LONG pstyle; + FLOAT_LONG elStyleState; +} LINEATTRS, *PLINEATTRS; + +typedef struct _FLOATOBJ +{ + ULONG ul1, + ul2; +} FLOATOBJ, *PFLOATOBJ; + +typedef struct _POINTFIX +{ + FIX x, + y; +} POINTFIX; + +typedef struct _PATHDATA +{ + FLONG flags; + ULONG count; + POINTFIX *pptfx; +} PATHDATA, *PPATHDATA; + +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; + +typedef struct _RECTFX +{ + FIX xLeft, + yTop, + xRight, + yBottom; +} RECTFX, *PRECTFX; + +typedef struct +{ + FLOATOBJ eM11, + eM12, + eM21, + eM22, + eDx, + eDy; +} FLOATOBJ_XFORM, *PFLOATOBJ_XFORM, FAR *LPFLOATOBJ_XFORM; + +typedef struct _XFORML +{ + FLOATL eM11, + eM12, + eM21, + eM22, + eDx, + eDy; +} XFORML, *PXFORML; + /* * Functions Prefixed with Drv are calls made from GDI to DDI, and * everything else are calls made from DDI to GDI. DDI is @@ -682,6 +935,7 @@ typedef struct _XFORMOBJ BOOL STDCALL DrvAssertMode(IN DHPDEV PDev, IN BOOL ShouldEnable); + BOOL STDCALL DrvBitBlt(IN PSURFOBJ DestSurface, IN PSURFOBJ SrcSurface, @@ -751,10 +1005,10 @@ DrvEnablePDEV(IN DEVMODEW *DM, IN LPWSTR LogAddress, IN ULONG PatternCount, OUT HSURF *SurfPatterns, - IN ULONG CapsSize, - OUT ULONG *DevCaps, + IN ULONG GDIInfoSize, + OUT GDIINFO *GDIInfo, IN ULONG DevInfoSize, - OUT DEVINFO *DI, + OUT DEVINFO *DevInfo, IN LPWSTR DevDataFile, IN LPWSTR DeviceName, IN HANDLE Driver); @@ -1010,12 +1264,8 @@ CLIPOBJ_cEnumStart(IN PCLIPOBJ ClipObj, PPATHOBJ STDCALL CLIPOBJ_ppoGetPath(PCLIPOBJ ClipObj); -/* -EngAcquireSemaphore -*/ - -/* FIXME: find correct defines for following symbols */ #define FL_ZERO_MEMORY 1 +#define FL_NONPAGED_MEMORY 2 PVOID STDCALL EngAllocMem(ULONG Flags, @@ -1045,7 +1295,6 @@ EngBitBlt(SURFOBJ *Dest, ROP4 rop4); /* -EngCheckAbort EngComputeGlyphSet */ @@ -1090,6 +1339,30 @@ EngCreatePalette(IN ULONG Mode, IN ULONG Green, IN ULONG Blue); +HSEMAPHORE +STDCALL +EngCreateSemaphore ( VOID ); + +VOID +STDCALL +EngAcquireSemaphore ( IN HSEMAPHORE hsem ); + +VOID +STDCALL +EngReleaseSemaphore ( IN HSEMAPHORE hsem ); + +VOID +STDCALL +EngDeleteSemaphore ( IN HSEMAPHORE hsem ); + +BOOL +STDCALL +EngIsSemaphoreOwned ( IN HSEMAPHORE hsem ); + +BOOL +STDCALL +EngIsSemaphoreOwnedByCurrentThread ( IN HSEMAPHORE hsem ); + /* EngCreatePath EngCreateSemaphore @@ -1115,11 +1388,6 @@ EngDeleteEvent BOOL STDCALL EngDeletePalette(IN HPALETTE Palette); -/* -EngDeletePath -EngDeleteSemaphore -*/ - BOOL STDCALL EngDeleteSurface(IN HSURF Surface); @@ -1146,7 +1414,6 @@ EngEraseSurface(SURFOBJ *Surface, ULONG iColor); /* -EngFillPath EngFindImageProcAddress EngFindResource */ @@ -1161,16 +1428,17 @@ EngFreeModule VOID STDCALL EngFreeUserMem(PVOID pv); +VOID STDCALL +EngGetCurrentCodePage(OUT PUSHORT OemCodePage, + OUT PUSHORT AnsiCodePage); + /* -EngGetCurrentCodePage -EngGetDriverName EngGetFileChangeTime EngGetFilePath EngGetForm EngGetLastError EngGetPrinter EngGetPrinterData -EngGetPrinterDataFileName EngGetProcessHandle EngGetType1FontList */ @@ -1190,7 +1458,6 @@ HANDLE STDCALL EngLoadImage(LPWSTR DriverName); /* -EngLoadModule EngLoadModuleForWrite EngLockDriverObj */ @@ -1202,16 +1469,20 @@ EngLockSurface(IN HSURF Surface); EngMapEvent EngMapFontFile EngMapModule -EngMarkBandingSurface EngMovePointer -EngMultiByteToUnicodeN -EngMultiByteToWideChar */ -INT STDCALL EngMulDiv( - INT nMultiplicand, - INT nMultiplier, - INT nDivisor); +INT STDCALL +EngMulDiv(IN INT nMultiplicand, + IN INT nMultiplier, + IN INT nDivisor); + +VOID STDCALL +EngMultiByteToUnicodeN(OUT LPWSTR UnicodeString, + IN ULONG MaxBytesInUnicodeString, + OUT PULONG BytesInUnicodeString, + IN PCHAR MultiByteString, + IN ULONG BytesInMultiByteString); BOOL STDCALL EngPaint(IN SURFOBJ *Surface, @@ -1227,7 +1498,6 @@ EngQueryLocalTime EngQueryPalette EngQueryPerformanceCounter EngQueryPerformanceFrequency -EngReleaseSemaphore EngRestoreFloatingPointState EngSaveFloatingPointState EngSecureMem @@ -1236,28 +1506,39 @@ EngSetLastError EngSetPointerShape EngSetPointerTag EngSetPrinterData -EngSort -EngStretchBlt +*/ + +typedef int CDECL (*SORTCOMP)(const void *Elem1, const void *Elem2); + +void STDCALL +EngSort(IN OUT PBYTE Buf, IN ULONG ElemSize, IN ULONG ElemCount, IN SORTCOMP CompFunc); + +/* EngStrokeAndFillPath EngStrokePath EngTextOut */ BOOL STDCALL -EngTransparentBlt(PSURFOBJ Dest, - PSURFOBJ Source, - PCLIPOBJ Clip, - PXLATEOBJ ColorTranslation, - PRECTL DestRect, - PRECTL SourceRect, - ULONG TransparentColor, - ULONG Reserved); +EngTransparentBlt(IN PSURFOBJ Dest, + IN PSURFOBJ Source, + IN PCLIPOBJ Clip, + IN PXLATEOBJ ColorTranslation, + IN PRECTL DestRect, + IN PRECTL SourceRect, + IN ULONG TransparentColor, + IN ULONG Reserved); + +VOID STDCALL +EngUnicodeToMultiByteN(OUT PCHAR MultiByteString, + IN ULONG MaxBytesInMultiByteString, + OUT PULONG BytesInMultiByteString, + IN PWSTR UnicodeString, + IN ULONG BytesInUnicodeString); /* -EngUnicodeToMultiByteN EngUnloadImage EngUnlockDriverObj -EngUnlockSurface EngUnmapEvent EngUnmapFontFile EngUnsecureMem = NTOSKRNL.MmUnsecureVirtualMemory @@ -1293,28 +1574,49 @@ FLOATOBJ_SubFloatObj FLOATOBJ_SubLong */ -ULONG FONTOBJ_cGetAllGlyphHandles(IN PFONTOBJ FontObj, - IN HGLYPH *Glyphs); -ULONG FONTOBJ_cGetGlyphs(IN PFONTOBJ FontObj, - IN ULONG Mode, - IN ULONG NumGlyphs, - IN HGLYPH *GlyphHandles, - IN PVOID *OutGlyphs); -PGAMMA_TABLES FONTOBJ_pGetGammaTables(IN PFONTOBJ FontObj); -IFIMETRICS *FONTOBJ_pifi(IN PFONTOBJ FontObj); -PVOID FONTOBJ_pvTrueTypeFontFile(IN PFONTOBJ FontObj, - IN ULONG *FileSize); -XFORMOBJ *FONTOBJ_pxoGetXform(IN PFONTOBJ FontObj); -VOID FONTOBJ_vGetInfo(IN PFONTOBJ FontObj, - IN ULONG InfoSize, - OUT PFONTINFO FontInfo); +ULONG +STDCALL +FONTOBJ_cGetAllGlyphHandles(IN PFONTOBJ FontObj, + IN HGLYPH *Glyphs); + +ULONG +STDCALL +FONTOBJ_cGetGlyphs(IN PFONTOBJ FontObj, + IN ULONG Mode, + IN ULONG NumGlyphs, + IN HGLYPH *GlyphHandles, + IN PVOID *OutGlyphs); + +PGAMMA_TABLES +STDCALL +FONTOBJ_pGetGammaTables(IN PFONTOBJ FontObj); + +IFIMETRICS* +STDCALL +FONTOBJ_pifi(IN PFONTOBJ FontObj); + +PVOID +STDCALL +FONTOBJ_pvTrueTypeFontFile(IN PFONTOBJ FontObj, + IN ULONG *FileSize); + +XFORMOBJ* +STDCALL +FONTOBJ_pxoGetXform(IN PFONTOBJ FontObj); + +VOID +STDCALL +FONTOBJ_vGetInfo(IN PFONTOBJ FontObj, + IN ULONG InfoSize, + OUT PFONTINFO FontInfo); /* HT_ComputeRGBGammaTable HT_Get8BPPFormatPalette */ -ULONG STDCALL +ULONG +STDCALL PALOBJ_cGetColors(PALOBJ *PalObj, ULONG Start, ULONG Colors, @@ -1322,14 +1624,12 @@ PALOBJ_cGetColors(PALOBJ *PalObj, /* PATHOBJ_bCloseFigure -PATHOBJ_bEnum PATHOBJ_bEnumClipLines PATHOBJ_bMoveTo PATHOBJ_bPolyBezierTo PATHOBJ_bPolyLineTo PATHOBJ_vEnumStart PATHOBJ_vEnumStartClipLines -PATHOBJ_vGetBounds RtlAnsiCharToUnicodeChar = NTOSKRNL.RtlAnsiCharToUnicodeChar RtlMultiByteToUnicodeN = NTOSKRNL.RtlMultiByteToUnicodeN RtlRaiseException = NTOSKRNL.RtlRaiseException @@ -1362,5 +1662,85 @@ XLATEOBJ_iXlate(XLATEOBJ *XlateObj, ULONG * STDCALL XLATEOBJ_piVector(XLATEOBJ *XlateObj); -#endif +HANDLE STDCALL +BRUSHOBJ_hGetColorTransform(BRUSHOBJ *pbo); +ULONG STDCALL +BRUSHOBJ_ulGetBrushColor(BRUSHOBJ *pbo); +BOOL STDCALL +EngAlphaBlend(SURFOBJ *psoDest,SURFOBJ *psoSrc,CLIPOBJ *pco,XLATEOBJ *pxlo,RECTL *prclDest,RECTL *prclSrc,BLENDOBJ *pBlendObj); +BOOL STDCALL +EngCheckAbort(SURFOBJ *pso); +FD_GLYPHSET* STDCALL +EngComputeGlyphSet(INT nCodePage,INT nFirstChar,INT cChars); +VOID STDCALL +EngDeletePath(PATHOBJ *ppo); +BOOL STDCALL +EngFillPath(SURFOBJ *pso,PATHOBJ *ppo,CLIPOBJ *pco,BRUSHOBJ *pbo,POINTL *pptlBrushOrg,MIX mix,FLONG flOptions); +PVOID STDCALL +EngFindResource(HANDLE h,int iName,int iType,PULONG pulSize); +VOID STDCALL +EngFreeModule(HANDLE h); +LPWSTR STDCALL +EngGetDriverName(HDEV hdev); +LPWSTR STDCALL +EngGetPrinterDataFileName(HDEV hdev); +BOOL STDCALL +EngGradientFill(SURFOBJ *psoDest,CLIPOBJ *pco,XLATEOBJ *pxlo,TRIVERTEX *pVertex,ULONG nVertex,PVOID pMesh,ULONG nMesh,RECTL *prclExtents,POINTL *pptlDitherOrg,ULONG ulMode); +HANDLE STDCALL +EngLoadModule(LPWSTR pwsz); +BOOL STDCALL +EngMarkBandingSurface(HSURF hsurf); +INT STDCALL +EngMultiByteToWideChar(UINT CodePage,LPWSTR WideCharString,INT BytesInWideCharString,LPSTR MultiByteString,INT BytesInMultiByteString); +BOOL STDCALL +EngPlgBlt(SURFOBJ *psoTrg,SURFOBJ *psoSrc,SURFOBJ *psoMsk,CLIPOBJ *pco,XLATEOBJ *pxlo,COLORADJUSTMENT *pca,POINTL *pptlBrushOrg,POINTFIX *pptfx,RECTL *prcl,POINTL *pptl,ULONG iMode); +BOOL STDCALL +EngQueryEMFInfo(HDEV hdev,EMFINFO *pEMFInfo); +VOID STDCALL +EngQueryLocalTime(PENG_TIME_FIELDS etf); +BOOL STDCALL +EngStretchBlt(SURFOBJ *psoDest,SURFOBJ *psoSrc,SURFOBJ *psoMask,CLIPOBJ *pco,XLATEOBJ *pxlo,COLORADJUSTMENT *pca,POINTL *pptlHTOrg,RECTL *prclDest,RECTL *prclSrc,POINTL *pptlMask,ULONG iMode); +BOOL STDCALL +EngStretchBltROP(SURFOBJ *psoDest,SURFOBJ *psoSrc,SURFOBJ *psoMask,CLIPOBJ *pco,XLATEOBJ *pxlo,COLORADJUSTMENT *pca,POINTL *pptlHTOrg,RECTL *prclDest,RECTL *prclSrc,POINTL *pptlMask,ULONG iMode,BRUSHOBJ *pbo,DWORD rop4); +BOOL STDCALL +EngStrokeAndFillPath(SURFOBJ *pso,PATHOBJ *ppo,CLIPOBJ *pco,XFORMOBJ *pxo,BRUSHOBJ *pboStroke,LINEATTRS *plineattrs,BRUSHOBJ *pboFill,POINTL *pptlBrushOrg,MIX mixFill,FLONG flOptions); +BOOL STDCALL +EngStrokePath(SURFOBJ *pso,PATHOBJ *ppo,CLIPOBJ *pco,XFORMOBJ *pxo,BRUSHOBJ *pbo,POINTL *pptlBrushOrg,LINEATTRS *plineattrs,MIX mix); +BOOL STDCALL +EngTextOut(SURFOBJ *pso,STROBJ *pstro,FONTOBJ *pfo,CLIPOBJ *pco,RECTL *prclExtra,RECTL *prclOpaque,BRUSHOBJ *pboFore,BRUSHOBJ *pboOpaque,POINTL *pptlOrg,MIX mix); +VOID STDCALL +EngUnlockSurface(SURFOBJ *pso); +INT STDCALL +EngWideCharToMultiByte(UINT CodePage,LPWSTR WideCharString,INT BytesInWideCharString,LPSTR MultiByteString,INT BytesInMultiByteString); +PFD_GLYPHATTR STDCALL +FONTOBJ_pQueryGlyphAttrs(FONTOBJ *pfo,ULONG iMode); +VOID STDCALL +PATHOBJ_vGetBounds(PATHOBJ *ppo,PRECTFX prectfx); +FD_GLYPHSET *STDCALL +FONTOBJ_pfdg(FONTOBJ *pfo); +BOOL STDCALL +PATHOBJ_bEnum(PATHOBJ *ppo,PATHDATA *ppd); +BOOL STDCALL +PATHOBJ_bEnumClipLines(PATHOBJ *ppo,ULONG cb,CLIPLINE *pcl); +VOID STDCALL +PATHOBJ_vEnumStart(PATHOBJ *ppo); +VOID STDCALL +PATHOBJ_vEnumStartClipLines(PATHOBJ *ppo,CLIPOBJ *pco,SURFOBJ *pso,LINEATTRS *pla); +BOOL STDCALL +STROBJ_bEnum(STROBJ *pstro,ULONG *pc,PGLYPHPOS *ppgpos); +BOOL STDCALL +STROBJ_bEnumPositionsOnly(STROBJ *pstro,ULONG *pc,PGLYPHPOS *ppgpos); +BOOL STDCALL +STROBJ_bGetAdvanceWidths(STROBJ *pso,ULONG iFirst,ULONG c,POINTQF *pptqD); +DWORD STDCALL +STROBJ_dwGetCodePage(STROBJ *pstro); +VOID STDCALL +STROBJ_vEnumStart(STROBJ *pstro); +ULONG STDCALL +XFORMOBJ_iGetXform(XFORMOBJ *pxo,XFORML *pxform); +BOOL STDCALL +XFORMOBJ_bApplyXform(XFORMOBJ *pxo,ULONG iMode,ULONG cPoints,PVOID pvIn,PVOID pvOut); +HANDLE STDCALL +XLATEOBJ_hGetColorTransform(XLATEOBJ *pxlo); +#endif diff --git a/include/ddraw.h b/include/ddraw.h new file mode 100644 index 0000000..1859702 --- /dev/null +++ b/include/ddraw.h @@ -0,0 +1,953 @@ +/* + * Copyright (C) the Wine project + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * 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. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef __WINE_DDRAW_H +#define __WINE_DDRAW_H + +#include /* LARGE_INTEGER ... */ + +#ifdef __cplusplus +extern "C" { +#endif /* defined(__cplusplus) */ + +#define DDENUMRET_CANCEL 0 +#define DDENUMRET_OK 1 + +#define DD_OK 0 + +#define _FACDD 0x876 +#define MAKE_DDHRESULT( code ) MAKE_HRESULT( 1, _FACDD, code ) + +#define DDERR_ALREADYINITIALIZED MAKE_DDHRESULT( 5 ) +#define DDERR_CANNOTATTACHSURFACE MAKE_DDHRESULT( 10 ) +#define DDERR_CANNOTDETACHSURFACE MAKE_DDHRESULT( 20 ) +#define DDERR_CURRENTLYNOTAVAIL MAKE_DDHRESULT( 40 ) +#define DDERR_EXCEPTION MAKE_DDHRESULT( 55 ) +#define DDERR_GENERIC E_FAIL +#define DDERR_HEIGHTALIGN MAKE_DDHRESULT( 90 ) +#define DDERR_INCOMPATIBLEPRIMARY MAKE_DDHRESULT( 95 ) +#define DDERR_INVALIDCAPS MAKE_DDHRESULT( 100 ) +#define DDERR_INVALIDCLIPLIST MAKE_DDHRESULT( 110 ) +#define DDERR_INVALIDMODE MAKE_DDHRESULT( 120 ) +#define DDERR_INVALIDOBJECT MAKE_DDHRESULT( 130 ) +#define DDERR_INVALIDPARAMS E_INVALIDARG +#define DDERR_INVALIDPIXELFORMAT MAKE_DDHRESULT( 145 ) +#define DDERR_INVALIDRECT MAKE_DDHRESULT( 150 ) +#define DDERR_LOCKEDSURFACES MAKE_DDHRESULT( 160 ) +#define DDERR_NO3D MAKE_DDHRESULT( 170 ) +#define DDERR_NOALPHAHW MAKE_DDHRESULT( 180 ) +#define DDERR_NOSTEREOHARDWARE MAKE_DDHRESULT( 181 ) +#define DDERR_NOSURFACELEFT MAKE_DDHRESULT( 182 ) +#define DDERR_NOCLIPLIST MAKE_DDHRESULT( 205 ) +#define DDERR_NOCOLORCONVHW MAKE_DDHRESULT( 210 ) +#define DDERR_NOCOOPERATIVELEVELSET MAKE_DDHRESULT( 212 ) +#define DDERR_NOCOLORKEY MAKE_DDHRESULT( 215 ) +#define DDERR_NOCOLORKEYHW MAKE_DDHRESULT( 220 ) +#define DDERR_NODIRECTDRAWSUPPORT MAKE_DDHRESULT( 222 ) +#define DDERR_NOEXCLUSIVEMODE MAKE_DDHRESULT( 225 ) +#define DDERR_NOFLIPHW MAKE_DDHRESULT( 230 ) +#define DDERR_NOGDI MAKE_DDHRESULT( 240 ) +#define DDERR_NOMIRRORHW MAKE_DDHRESULT( 250 ) +#define DDERR_NOTFOUND MAKE_DDHRESULT( 255 ) +#define DDERR_NOOVERLAYHW MAKE_DDHRESULT( 260 ) +#define DDERR_OVERLAPPINGRECTS MAKE_DDHRESULT( 270 ) +#define DDERR_NORASTEROPHW MAKE_DDHRESULT( 280 ) +#define DDERR_NOROTATIONHW MAKE_DDHRESULT( 290 ) +#define DDERR_NOSTRETCHHW MAKE_DDHRESULT( 310 ) +#define DDERR_NOT4BITCOLOR MAKE_DDHRESULT( 316 ) +#define DDERR_NOT4BITCOLORINDEX MAKE_DDHRESULT( 317 ) +#define DDERR_NOT8BITCOLOR MAKE_DDHRESULT( 320 ) +#define DDERR_NOTEXTUREHW MAKE_DDHRESULT( 330 ) +#define DDERR_NOVSYNCHW MAKE_DDHRESULT( 335 ) +#define DDERR_NOZBUFFERHW MAKE_DDHRESULT( 340 ) +#define DDERR_NOZOVERLAYHW MAKE_DDHRESULT( 350 ) +#define DDERR_OUTOFCAPS MAKE_DDHRESULT( 360 ) +#define DDERR_OUTOFMEMORY E_OUTOFMEMORY +#define DDERR_OUTOFVIDEOMEMORY MAKE_DDHRESULT( 380 ) +#define DDERR_OVERLAYCANTCLIP MAKE_DDHRESULT( 382 ) +#define DDERR_OVERLAYCOLORKEYONLYONEACTIVE MAKE_DDHRESULT( 384 ) +#define DDERR_PALETTEBUSY MAKE_DDHRESULT( 387 ) +#define DDERR_COLORKEYNOTSET MAKE_DDHRESULT( 400 ) +#define DDERR_SURFACEALREADYATTACHED MAKE_DDHRESULT( 410 ) +#define DDERR_SURFACEALREADYDEPENDENT MAKE_DDHRESULT( 420 ) +#define DDERR_SURFACEBUSY MAKE_DDHRESULT( 430 ) +#define DDERR_CANTLOCKSURFACE MAKE_DDHRESULT( 435 ) +#define DDERR_SURFACEISOBSCURED MAKE_DDHRESULT( 440 ) +#define DDERR_SURFACELOST MAKE_DDHRESULT( 450 ) +#define DDERR_SURFACENOTATTACHED MAKE_DDHRESULT( 460 ) +#define DDERR_TOOBIGHEIGHT MAKE_DDHRESULT( 470 ) +#define DDERR_TOOBIGSIZE MAKE_DDHRESULT( 480 ) +#define DDERR_TOOBIGWIDTH MAKE_DDHRESULT( 490 ) +#define DDERR_UNSUPPORTED E_NOTIMPL +#define DDERR_UNSUPPORTEDFORMAT MAKE_DDHRESULT( 510 ) +#define DDERR_UNSUPPORTEDMASK MAKE_DDHRESULT( 520 ) +#define DDERR_INVALIDSTREAM MAKE_DDHRESULT( 521 ) +#define DDERR_VERTICALBLANKINPROGRESS MAKE_DDHRESULT( 537 ) +#define DDERR_WASSTILLDRAWING MAKE_DDHRESULT( 540 ) +#define DDERR_DDSCAPSCOMPLEXREQUIRED MAKE_DDHRESULT( 542 ) +#define DDERR_XALIGN MAKE_DDHRESULT( 560 ) +#define DDERR_INVALIDDIRECTDRAWGUID MAKE_DDHRESULT( 561 ) +#define DDERR_DIRECTDRAWALREADYCREATED MAKE_DDHRESULT( 562 ) +#define DDERR_NODIRECTDRAWHW MAKE_DDHRESULT( 563 ) +#define DDERR_PRIMARYSURFACEALREADYEXISTS MAKE_DDHRESULT( 564 ) +#define DDERR_NOEMULATION MAKE_DDHRESULT( 565 ) +#define DDERR_REGIONTOOSMALL MAKE_DDHRESULT( 566 ) +#define DDERR_CLIPPERISUSINGHWND MAKE_DDHRESULT( 567 ) +#define DDERR_NOCLIPPERATTACHED MAKE_DDHRESULT( 568 ) +#define DDERR_NOHWND MAKE_DDHRESULT( 569 ) +#define DDERR_HWNDSUBCLASSED MAKE_DDHRESULT( 570 ) +#define DDERR_HWNDALREADYSET MAKE_DDHRESULT( 571 ) +#define DDERR_NOPALETTEATTACHED MAKE_DDHRESULT( 572 ) +#define DDERR_NOPALETTEHW MAKE_DDHRESULT( 573 ) +#define DDERR_BLTFASTCANTCLIP MAKE_DDHRESULT( 574 ) +#define DDERR_NOBLTHW MAKE_DDHRESULT( 575 ) +#define DDERR_NODDROPSHW MAKE_DDHRESULT( 576 ) +#define DDERR_OVERLAYNOTVISIBLE MAKE_DDHRESULT( 577 ) +#define DDERR_NOOVERLAYDEST MAKE_DDHRESULT( 578 ) +#define DDERR_INVALIDPOSITION MAKE_DDHRESULT( 579 ) +#define DDERR_NOTAOVERLAYSURFACE MAKE_DDHRESULT( 580 ) +#define DDERR_EXCLUSIVEMODEALREADYSET MAKE_DDHRESULT( 581 ) +#define DDERR_NOTFLIPPABLE MAKE_DDHRESULT( 582 ) +#define DDERR_CANTDUPLICATE MAKE_DDHRESULT( 583 ) +#define DDERR_NOTLOCKED MAKE_DDHRESULT( 584 ) +#define DDERR_CANTCREATEDC MAKE_DDHRESULT( 585 ) +#define DDERR_NODC MAKE_DDHRESULT( 586 ) +#define DDERR_WRONGMODE MAKE_DDHRESULT( 587 ) +#define DDERR_IMPLICITLYCREATED MAKE_DDHRESULT( 588 ) +#define DDERR_NOTPALETTIZED MAKE_DDHRESULT( 589 ) +#define DDERR_UNSUPPORTEDMODE MAKE_DDHRESULT( 590 ) +#define DDERR_NOMIPMAPHW MAKE_DDHRESULT( 591 ) +#define DDERR_INVALIDSURFACETYPE MAKE_DDHRESULT( 592 ) +#define DDERR_NOOPTIMIZEHW MAKE_DDHRESULT( 600 ) +#define DDERR_NOTLOADED MAKE_DDHRESULT( 601 ) +#define DDERR_NOFOCUSWINDOW MAKE_DDHRESULT( 602 ) +#define DDERR_NOTONMIPMAPSUBLEVEL MAKE_DDHRESULT( 603 ) +#define DDERR_DCALREADYCREATED MAKE_DDHRESULT( 620 ) +#define DDERR_NONONLOCALVIDMEM MAKE_DDHRESULT( 630 ) +#define DDERR_CANTPAGELOCK MAKE_DDHRESULT( 640 ) +#define DDERR_CANTPAGEUNLOCK MAKE_DDHRESULT( 660 ) +#define DDERR_NOTPAGELOCKED MAKE_DDHRESULT( 680 ) +#define DDERR_MOREDATA MAKE_DDHRESULT( 690 ) +#define DDERR_EXPIRED MAKE_DDHRESULT( 691 ) +#define DDERR_TESTFINISHED MAKE_DDHRESULT( 692 ) +#define DDERR_NEWMODE MAKE_DDHRESULT( 693 ) +#define DDERR_D3DNOTINITIALIZED MAKE_DDHRESULT( 694 ) +#define DDERR_VIDEONOTACTIVE MAKE_DDHRESULT( 695 ) +#define DDERR_NOMONITORINFORMATION MAKE_DDHRESULT( 696 ) +#define DDERR_NODRIVERSUPPORT MAKE_DDHRESULT( 697 ) +#define DDERR_DEVICEDOESNTOWNSURFACE MAKE_DDHRESULT( 699 ) +#define DDERR_NOTINITIALIZED CO_E_NOTINITIALIZED + +/* dwFlags for Blt* */ +#define DDBLT_ALPHADEST 0x00000001 +#define DDBLT_ALPHADESTCONSTOVERRIDE 0x00000002 +#define DDBLT_ALPHADESTNEG 0x00000004 +#define DDBLT_ALPHADESTSURFACEOVERRIDE 0x00000008 +#define DDBLT_ALPHAEDGEBLEND 0x00000010 +#define DDBLT_ALPHASRC 0x00000020 +#define DDBLT_ALPHASRCCONSTOVERRIDE 0x00000040 +#define DDBLT_ALPHASRCNEG 0x00000080 +#define DDBLT_ALPHASRCSURFACEOVERRIDE 0x00000100 +#define DDBLT_ASYNC 0x00000200 +#define DDBLT_COLORFILL 0x00000400 +#define DDBLT_DDFX 0x00000800 +#define DDBLT_DDROPS 0x00001000 +#define DDBLT_KEYDEST 0x00002000 +#define DDBLT_KEYDESTOVERRIDE 0x00004000 +#define DDBLT_KEYSRC 0x00008000 +#define DDBLT_KEYSRCOVERRIDE 0x00010000 +#define DDBLT_ROP 0x00020000 +#define DDBLT_ROTATIONANGLE 0x00040000 +#define DDBLT_ZBUFFER 0x00080000 +#define DDBLT_ZBUFFERDESTCONSTOVERRIDE 0x00100000 +#define DDBLT_ZBUFFERDESTOVERRIDE 0x00200000 +#define DDBLT_ZBUFFERSRCCONSTOVERRIDE 0x00400000 +#define DDBLT_ZBUFFERSRCOVERRIDE 0x00800000 +#define DDBLT_WAIT 0x01000000 +#define DDBLT_DEPTHFILL 0x02000000 +#define DDBLT_DONOTWAIT 0x08000000 + +/* dwTrans for BltFast */ +#define DDBLTFAST_NOCOLORKEY 0x00000000 +#define DDBLTFAST_SRCCOLORKEY 0x00000001 +#define DDBLTFAST_DESTCOLORKEY 0x00000002 +#define DDBLTFAST_WAIT 0x00000010 +#define DDBLTFAST_DONOTWAIT 0x00000020 + +/* dwFlags for Flip */ +#define DDFLIP_WAIT 0x00000001 +#define DDFLIP_EVEN 0x00000002 /* only valid for overlay */ +#define DDFLIP_ODD 0x00000004 /* only valid for overlay */ +#define DDFLIP_NOVSYNC 0x00000008 +#define DDFLIP_STEREO 0x00000010 +#define DDFLIP_DONOTWAIT 0x00000020 + +/* dwFlags for GetBltStatus */ +#define DDGBS_CANBLT 0x00000001 +#define DDGBS_ISBLTDONE 0x00000002 + +/* dwFlags for IDirectDrawSurface7::GetFlipStatus */ +#define DDGFS_CANFLIP 1L +#define DDGFS_ISFLIPDONE 2L + +/* dwFlags for IDirectDrawSurface7::SetPrivateData */ +#define DDSPD_IUNKNOWNPTR 1L +#define DDSPD_VOLATILE 2L + +/* DDSCAPS.dwCaps */ +/* reserved1, was 3d capable */ +#define DDSCAPS_RESERVED1 0x00000001 +/* surface contains alpha information */ +#define DDSCAPS_ALPHA 0x00000002 +/* this surface is a backbuffer */ +#define DDSCAPS_BACKBUFFER 0x00000004 +/* complex surface structure */ +#define DDSCAPS_COMPLEX 0x00000008 +/* part of surface flipping structure */ +#define DDSCAPS_FLIP 0x00000010 +/* this surface is the frontbuffer surface */ +#define DDSCAPS_FRONTBUFFER 0x00000020 +/* this is a plain offscreen surface */ +#define DDSCAPS_OFFSCREENPLAIN 0x00000040 +/* overlay */ +#define DDSCAPS_OVERLAY 0x00000080 +/* palette objects can be created and attached to us */ +#define DDSCAPS_PALETTE 0x00000100 +/* primary surface (the one the user looks at currently)(right eye)*/ +#define DDSCAPS_PRIMARYSURFACE 0x00000200 +/* primary surface for left eye */ +#define DDSCAPS_PRIMARYSURFACELEFT 0x00000400 +/* surface exists in systemmemory */ +#define DDSCAPS_SYSTEMMEMORY 0x00000800 +/* surface can be used as a texture */ +#define DDSCAPS_TEXTURE 0x00001000 +/* surface may be destination for 3d rendering */ +#define DDSCAPS_3DDEVICE 0x00002000 +/* surface exists in videomemory */ +#define DDSCAPS_VIDEOMEMORY 0x00004000 +/* surface changes immediately visible */ +#define DDSCAPS_VISIBLE 0x00008000 +/* write only surface */ +#define DDSCAPS_WRITEONLY 0x00010000 +/* zbuffer surface */ +#define DDSCAPS_ZBUFFER 0x00020000 +/* has its own DC */ +#define DDSCAPS_OWNDC 0x00040000 +/* surface should be able to receive live video */ +#define DDSCAPS_LIVEVIDEO 0x00080000 +/* should be able to have a hw codec decompress stuff into it */ +#define DDSCAPS_HWCODEC 0x00100000 +/* mode X (320x200 or 320x240) surface */ +#define DDSCAPS_MODEX 0x00200000 +/* one mipmap surface (1 level) */ +#define DDSCAPS_MIPMAP 0x00400000 +#define DDSCAPS_RESERVED2 0x00800000 +/* memory allocation delayed until Load() */ +#define DDSCAPS_ALLOCONLOAD 0x04000000 +/* Indicates that the surface will receive data from a video port */ +#define DDSCAPS_VIDEOPORT 0x08000000 +/* surface is in local videomemory */ +#define DDSCAPS_LOCALVIDMEM 0x10000000 +/* surface is in nonlocal videomemory */ +#define DDSCAPS_NONLOCALVIDMEM 0x20000000 +/* surface is a standard VGA mode surface (NOT ModeX) */ +#define DDSCAPS_STANDARDVGAMODE 0x40000000 +/* optimized? surface */ +#define DDSCAPS_OPTIMIZED 0x80000000 + +typedef struct _DDSCAPS { + DWORD dwCaps; /* capabilities of surface wanted */ +} DDSCAPS,*LPDDSCAPS; + +/* DDSCAPS2.dwCaps2 */ +/* indicates the surface will receive data from a video port using + deinterlacing hardware. */ +#define DDSCAPS2_HARDWAREDEINTERLACE 0x00000002 +/* indicates the surface will be locked very frequently. */ +#define DDSCAPS2_HINTDYNAMIC 0x00000004 +/* indicates surface can be re-ordered or retiled on load() */ +#define DDSCAPS2_HINTSTATIC 0x00000008 +/* indicates surface to be managed by directdraw/direct3D */ +#define DDSCAPS2_TEXTUREMANAGE 0x00000010 +/* reserved bits */ +#define DDSCAPS2_RESERVED1 0x00000020 +#define DDSCAPS2_RESERVED2 0x00000040 +/* indicates surface will never be locked again */ +#define DDSCAPS2_OPAQUE 0x00000080 +/* set at CreateSurface() time to indicate antialising will be used */ +#define DDSCAPS2_HINTANTIALIASING 0x00000100 +/* set at CreateSurface() time to indicate cubic environment map */ +#define DDSCAPS2_CUBEMAP 0x00000200 +/* face flags for cube maps */ +#define DDSCAPS2_CUBEMAP_POSITIVEX 0x00000400 +#define DDSCAPS2_CUBEMAP_NEGATIVEX 0x00000800 +#define DDSCAPS2_CUBEMAP_POSITIVEY 0x00001000 +#define DDSCAPS2_CUBEMAP_NEGATIVEY 0x00002000 +#define DDSCAPS2_CUBEMAP_POSITIVEZ 0x00004000 +#define DDSCAPS2_CUBEMAP_NEGATIVEZ 0x00008000 +/* specifies all faces of a cube for CreateSurface() */ +#define DDSCAPS2_CUBEMAP_ALLFACES ( DDSCAPS2_CUBEMAP_POSITIVEX |\ + DDSCAPS2_CUBEMAP_NEGATIVEX |\ + DDSCAPS2_CUBEMAP_POSITIVEY |\ + DDSCAPS2_CUBEMAP_NEGATIVEY |\ + DDSCAPS2_CUBEMAP_POSITIVEZ |\ + DDSCAPS2_CUBEMAP_NEGATIVEZ ) +/* set for mipmap sublevels on DirectX7 and later. ignored by CreateSurface() */ +#define DDSCAPS2_MIPMAPSUBLEVEL 0x00010000 +/* indicates texture surface to be managed by Direct3D *only* */ +#define DDSCAPS2_D3DTEXTUREMANAGE 0x00020000 +/* indicates managed surface that can safely be lost */ +#define DDSCAPS2_DONOTPERSIST 0x00040000 +/* indicates surface is part of a stereo flipping chain */ +#define DDSCAPS2_STEREOSURFACELEFT 0x00080000 + +typedef struct _DDSCAPS2 { + DWORD dwCaps; /* capabilities of surface wanted */ + DWORD dwCaps2; /* additional capabilities */ + DWORD dwCaps3; /* reserved capabilities */ + DWORD dwCaps4; /* more reserved capabilities */ +} DDSCAPS2,*LPDDSCAPS2; + +#define DD_ROP_SPACE (256/32) /* space required to store ROP array */ + +typedef struct DDCAPS_DX7 /* DirectX 7 version of caps struct */ +{ + DWORD dwSize; /* size of the DDDRIVERCAPS structure */ + DWORD dwCaps; /* driver specific capabilities */ + DWORD dwCaps2; /* more driver specific capabilites */ + DWORD dwCKeyCaps; /* color key capabilities of the surface */ + DWORD dwFXCaps; /* driver specific stretching and effects capabilites */ + DWORD dwFXAlphaCaps; /* alpha driver specific capabilities */ + DWORD dwPalCaps; /* palette capabilities */ + DWORD dwSVCaps; /* stereo vision capabilities */ + DWORD dwAlphaBltConstBitDepths; /* DDBD_2,4,8 */ + DWORD dwAlphaBltPixelBitDepths; /* DDBD_1,2,4,8 */ + DWORD dwAlphaBltSurfaceBitDepths; /* DDBD_1,2,4,8 */ + DWORD dwAlphaOverlayConstBitDepths; /* DDBD_2,4,8 */ + DWORD dwAlphaOverlayPixelBitDepths; /* DDBD_1,2,4,8 */ + DWORD dwAlphaOverlaySurfaceBitDepths; /* DDBD_1,2,4,8 */ + DWORD dwZBufferBitDepths; /* DDBD_8,16,24,32 */ + DWORD dwVidMemTotal; /* total amount of video memory */ + DWORD dwVidMemFree; /* amount of free video memory */ + DWORD dwMaxVisibleOverlays; /* maximum number of visible overlays */ + DWORD dwCurrVisibleOverlays; /* current number of visible overlays */ + DWORD dwNumFourCCCodes; /* number of four cc codes */ + DWORD dwAlignBoundarySrc; /* source rectangle alignment */ + DWORD dwAlignSizeSrc; /* source rectangle byte size */ + DWORD dwAlignBoundaryDest; /* dest rectangle alignment */ + DWORD dwAlignSizeDest; /* dest rectangle byte size */ + DWORD dwAlignStrideAlign; /* stride alignment */ + DWORD dwRops[DD_ROP_SPACE]; /* ROPS supported */ + DDSCAPS ddsOldCaps; /* old DDSCAPS - superseded for DirectX6+ */ + DWORD dwMinOverlayStretch; /* minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */ + DWORD dwMaxOverlayStretch; /* maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */ + DWORD dwMinLiveVideoStretch; /* minimum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */ + DWORD dwMaxLiveVideoStretch; /* maximum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */ + DWORD dwMinHwCodecStretch; /* minimum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */ + DWORD dwMaxHwCodecStretch; /* maximum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */ + DWORD dwReserved1; + DWORD dwReserved2; + DWORD dwReserved3; + DWORD dwSVBCaps; /* driver specific capabilities for System->Vmem blts */ + DWORD dwSVBCKeyCaps; /* driver color key capabilities for System->Vmem blts */ + DWORD dwSVBFXCaps; /* driver FX capabilities for System->Vmem blts */ + DWORD dwSVBRops[DD_ROP_SPACE];/* ROPS supported for System->Vmem blts */ + DWORD dwVSBCaps; /* driver specific capabilities for Vmem->System blts */ + DWORD dwVSBCKeyCaps; /* driver color key capabilities for Vmem->System blts */ + DWORD dwVSBFXCaps; /* driver FX capabilities for Vmem->System blts */ + DWORD dwVSBRops[DD_ROP_SPACE];/* ROPS supported for Vmem->System blts */ + DWORD dwSSBCaps; /* driver specific capabilities for System->System blts */ + DWORD dwSSBCKeyCaps; /* driver color key capabilities for System->System blts */ + DWORD dwSSBFXCaps; /* driver FX capabilities for System->System blts */ + DWORD dwSSBRops[DD_ROP_SPACE];/* ROPS supported for System->System blts */ + DWORD dwMaxVideoPorts; /* maximum number of usable video ports */ + DWORD dwCurrVideoPorts; /* current number of video ports used */ + DWORD dwSVBCaps2; /* more driver specific capabilities for System->Vmem blts */ + DWORD dwNLVBCaps; /* driver specific capabilities for non-local->local vidmem blts */ + DWORD dwNLVBCaps2; /* more driver specific capabilities non-local->local vidmem blts */ + DWORD dwNLVBCKeyCaps; /* driver color key capabilities for non-local->local vidmem blts */ + DWORD dwNLVBFXCaps; /* driver FX capabilities for non-local->local blts */ + DWORD dwNLVBRops[DD_ROP_SPACE]; /* ROPS supported for non-local->local blts */ + DDSCAPS2 ddsCaps; /* surface capabilities */ +} DDCAPS_DX7,*LPDDCAPS_DX7; + +typedef DDCAPS_DX7 DDCAPS; +typedef DDCAPS *LPDDCAPS; + +/* DDCAPS.dwCaps */ +#define DDCAPS_3D 0x00000001 +#define DDCAPS_ALIGNBOUNDARYDEST 0x00000002 +#define DDCAPS_ALIGNSIZEDEST 0x00000004 +#define DDCAPS_ALIGNBOUNDARYSRC 0x00000008 +#define DDCAPS_ALIGNSIZESRC 0x00000010 +#define DDCAPS_ALIGNSTRIDE 0x00000020 +#define DDCAPS_BLT 0x00000040 +#define DDCAPS_BLTQUEUE 0x00000080 +#define DDCAPS_BLTFOURCC 0x00000100 +#define DDCAPS_BLTSTRETCH 0x00000200 +#define DDCAPS_GDI 0x00000400 +#define DDCAPS_OVERLAY 0x00000800 +#define DDCAPS_OVERLAYCANTCLIP 0x00001000 +#define DDCAPS_OVERLAYFOURCC 0x00002000 +#define DDCAPS_OVERLAYSTRETCH 0x00004000 +#define DDCAPS_PALETTE 0x00008000 +#define DDCAPS_PALETTEVSYNC 0x00010000 +#define DDCAPS_READSCANLINE 0x00020000 +#define DDCAPS_STEREOVIEW 0x00040000 +#define DDCAPS_VBI 0x00080000 +#define DDCAPS_ZBLTS 0x00100000 +#define DDCAPS_ZOVERLAYS 0x00200000 +#define DDCAPS_COLORKEY 0x00400000 +#define DDCAPS_ALPHA 0x00800000 +#define DDCAPS_COLORKEYHWASSIST 0x01000000 +#define DDCAPS_NOHARDWARE 0x02000000 +#define DDCAPS_BLTCOLORFILL 0x04000000 +#define DDCAPS_BANKSWITCHED 0x08000000 +#define DDCAPS_BLTDEPTHFILL 0x10000000 +#define DDCAPS_CANCLIP 0x20000000 +#define DDCAPS_CANCLIPSTRETCHED 0x40000000 +#define DDCAPS_CANBLTSYSMEM 0x80000000 + +/* DDCAPS.dwCaps2 */ +#define DDCAPS2_CERTIFIED 0x00000001 +#define DDCAPS2_NO2DDURING3DSCENE 0x00000002 +#define DDCAPS2_VIDEOPORT 0x00000004 +#define DDCAPS2_AUTOFLIPOVERLAY 0x00000008 +#define DDCAPS2_CANBOBINTERLEAVED 0x00000010 +#define DDCAPS2_CANBOBNONINTERLEAVED 0x00000020 +#define DDCAPS2_COLORCONTROLOVERLAY 0x00000040 +#define DDCAPS2_COLORCONTROLPRIMARY 0x00000080 +#define DDCAPS2_CANDROPZ16BIT 0x00000100 +#define DDCAPS2_NONLOCALVIDMEM 0x00000200 +#define DDCAPS2_NONLOCALVIDMEMCAPS 0x00000400 +#define DDCAPS2_NOPAGELOCKREQUIRED 0x00000800 +#define DDCAPS2_WIDESURFACES 0x00001000 +#define DDCAPS2_CANFLIPODDEVEN 0x00002000 +#define DDCAPS2_CANBOBHARDWARE 0x00004000 +#define DDCAPS2_COPYFOURCC 0x00008000 +#define DDCAPS2_PRIMARYGAMMA 0x00020000 +#define DDCAPS2_CANRENDERWINDOWED 0x00080000 +#define DDCAPS2_CANCALIBRATEGAMMA 0x00100000 +#define DDCAPS2_FLIPINTERVAL 0x00200000 +#define DDCAPS2_FLIPNOVSYNC 0x00400000 +#define DDCAPS2_CANMANAGETEXTURE 0x00800000 +#define DDCAPS2_TEXMANINNONLOCALVIDMEM 0x01000000 +#define DDCAPS2_STEREO 0x02000000 +#define DDCAPS2_SYSTONONLOCAL_AS_SYSTOLOCAL 0x04000000 + + +/* Set/Get Colour Key Flags */ +#define DDCKEY_COLORSPACE 0x00000001 /* Struct is single colour space */ +#define DDCKEY_DESTBLT 0x00000002 /* To be used as dest for blt */ +#define DDCKEY_DESTOVERLAY 0x00000004 /* To be used as dest for CK overlays */ +#define DDCKEY_SRCBLT 0x00000008 /* To be used as src for blt */ +#define DDCKEY_SRCOVERLAY 0x00000010 /* To be used as src for CK overlays */ + +typedef struct _DDCOLORKEY +{ + DWORD dwColorSpaceLowValue;/* low boundary of color space that is to + * be treated as Color Key, inclusive + */ + DWORD dwColorSpaceHighValue;/* high boundary of color space that is + * to be treated as Color Key, inclusive + */ +} DDCOLORKEY,*LPDDCOLORKEY; + +/* ddCKEYCAPS bits */ +#define DDCKEYCAPS_DESTBLT 0x00000001 +#define DDCKEYCAPS_DESTBLTCLRSPACE 0x00000002 +#define DDCKEYCAPS_DESTBLTCLRSPACEYUV 0x00000004 +#define DDCKEYCAPS_DESTBLTYUV 0x00000008 +#define DDCKEYCAPS_DESTOVERLAY 0x00000010 +#define DDCKEYCAPS_DESTOVERLAYCLRSPACE 0x00000020 +#define DDCKEYCAPS_DESTOVERLAYCLRSPACEYUV 0x00000040 +#define DDCKEYCAPS_DESTOVERLAYONEACTIVE 0x00000080 +#define DDCKEYCAPS_DESTOVERLAYYUV 0x00000100 +#define DDCKEYCAPS_SRCBLT 0x00000200 +#define DDCKEYCAPS_SRCBLTCLRSPACE 0x00000400 +#define DDCKEYCAPS_SRCBLTCLRSPACEYUV 0x00000800 +#define DDCKEYCAPS_SRCBLTYUV 0x00001000 +#define DDCKEYCAPS_SRCOVERLAY 0x00002000 +#define DDCKEYCAPS_SRCOVERLAYCLRSPACE 0x00004000 +#define DDCKEYCAPS_SRCOVERLAYCLRSPACEYUV 0x00008000 +#define DDCKEYCAPS_SRCOVERLAYONEACTIVE 0x00010000 +#define DDCKEYCAPS_SRCOVERLAYYUV 0x00020000 +#define DDCKEYCAPS_NOCOSTOVERLAY 0x00040000 + +typedef struct _DDPIXELFORMAT { + DWORD dwSize; /* 0: size of structure */ + DWORD dwFlags; /* 4: pixel format flags */ + DWORD dwFourCC; /* 8: (FOURCC code) */ + union { + DWORD dwRGBBitCount; /* C: how many bits per pixel */ + DWORD dwYUVBitCount; /* C: how many bits per pixel */ + DWORD dwZBufferBitDepth; /* C: how many bits for z buffers */ + DWORD dwAlphaBitDepth; /* C: how many bits for alpha channels*/ + DWORD dwLuminanceBitCount; + DWORD dwBumpBitCount; + } DUMMYUNIONNAME1; + union { + DWORD dwRBitMask; /* 10: mask for red bit*/ + DWORD dwYBitMask; /* 10: mask for Y bits*/ + DWORD dwStencilBitDepth; + DWORD dwLuminanceBitMask; + DWORD dwBumpDuBitMask; + } DUMMYUNIONNAME2; + union { + DWORD dwGBitMask; /* 14: mask for green bits*/ + DWORD dwUBitMask; /* 14: mask for U bits*/ + DWORD dwZBitMask; + DWORD dwBumpDvBitMask; + } DUMMYUNIONNAME3; + union { + DWORD dwBBitMask; /* 18: mask for blue bits*/ + DWORD dwVBitMask; /* 18: mask for V bits*/ + DWORD dwStencilBitMask; + DWORD dwBumpLuminanceBitMask; + } DUMMYUNIONNAME4; + union { + DWORD dwRGBAlphaBitMask; /* 1C: mask for alpha channel */ + DWORD dwYUVAlphaBitMask; /* 1C: mask for alpha channel */ + DWORD dwLuminanceAlphaBitMask; + DWORD dwRGBZBitMask; /* 1C: mask for Z channel */ + DWORD dwYUVZBitMask; /* 1C: mask for Z channel */ + } DUMMYUNIONNAME5; + /* 20: next structure */ +} DDPIXELFORMAT,*LPDDPIXELFORMAT; + +/* DDCAPS.dwFXCaps */ +#define DDFXCAPS_BLTALPHA 0x00000001 +#define DDFXCAPS_OVERLAYALPHA 0x00000004 +#define DDFXCAPS_BLTARITHSTRETCHYN 0x00000010 +#define DDFXCAPS_BLTARITHSTRETCHY 0x00000020 +#define DDFXCAPS_BLTMIRRORLEFTRIGHT 0x00000040 +#define DDFXCAPS_BLTMIRRORUPDOWN 0x00000080 +#define DDFXCAPS_BLTROTATION 0x00000100 +#define DDFXCAPS_BLTROTATION90 0x00000200 +#define DDFXCAPS_BLTSHRINKX 0x00000400 +#define DDFXCAPS_BLTSHRINKXN 0x00000800 +#define DDFXCAPS_BLTSHRINKY 0x00001000 +#define DDFXCAPS_BLTSHRINKYN 0x00002000 +#define DDFXCAPS_BLTSTRETCHX 0x00004000 +#define DDFXCAPS_BLTSTRETCHXN 0x00008000 +#define DDFXCAPS_BLTSTRETCHY 0x00010000 +#define DDFXCAPS_BLTSTRETCHYN 0x00020000 +#define DDFXCAPS_OVERLAYARITHSTRETCHY 0x00040000 +#define DDFXCAPS_OVERLAYARITHSTRETCHYN 0x00000008 +#define DDFXCAPS_OVERLAYSHRINKX 0x00080000 +#define DDFXCAPS_OVERLAYSHRINKXN 0x00100000 +#define DDFXCAPS_OVERLAYSHRINKY 0x00200000 +#define DDFXCAPS_OVERLAYSHRINKYN 0x00400000 +#define DDFXCAPS_OVERLAYSTRETCHX 0x00800000 +#define DDFXCAPS_OVERLAYSTRETCHXN 0x01000000 +#define DDFXCAPS_OVERLAYSTRETCHY 0x02000000 +#define DDFXCAPS_OVERLAYSTRETCHYN 0x04000000 +#define DDFXCAPS_OVERLAYMIRRORLEFTRIGHT 0x08000000 +#define DDFXCAPS_OVERLAYMIRRORUPDOWN 0x10000000 + +#define DDFXCAPS_OVERLAYFILTER DDFXCAPS_OVERLAYARITHSTRETCHY + +/* DDCAPS.dwFXAlphaCaps */ +#define DDFXALPHACAPS_BLTALPHAEDGEBLEND 0x00000001 +#define DDFXALPHACAPS_BLTALPHAPIXELS 0x00000002 +#define DDFXALPHACAPS_BLTALPHAPIXELSNEG 0x00000004 +#define DDFXALPHACAPS_BLTALPHASURFACES 0x00000008 +#define DDFXALPHACAPS_BLTALPHASURFACESNEG 0x00000010 +#define DDFXALPHACAPS_OVERLAYALPHAEDGEBLEND 0x00000020 +#define DDFXALPHACAPS_OVERLAYALPHAPIXELS 0x00000040 +#define DDFXALPHACAPS_OVERLAYALPHAPIXELSNEG 0x00000080 +#define DDFXALPHACAPS_OVERLAYALPHASURFACES 0x00000100 +#define DDFXALPHACAPS_OVERLAYALPHASURFACESNEG 0x00000200 + +/* DDCAPS.dwPalCaps */ +#define DDPCAPS_4BIT 0x00000001 +#define DDPCAPS_8BITENTRIES 0x00000002 +#define DDPCAPS_8BIT 0x00000004 +#define DDPCAPS_INITIALIZE 0x00000008 +#define DDPCAPS_PRIMARYSURFACE 0x00000010 +#define DDPCAPS_PRIMARYSURFACELEFT 0x00000020 +#define DDPCAPS_ALLOW256 0x00000040 +#define DDPCAPS_VSYNC 0x00000080 +#define DDPCAPS_1BIT 0x00000100 +#define DDPCAPS_2BIT 0x00000200 +#define DDPCAPS_ALPHA 0x00000400 + +/* DDCAPS.dwSVCaps */ +/* the first 4 of these are now obsolete */ +#if DIRECTDRAW_VERSION >= 0x700 /* FIXME: I'm not sure when this switch occurred */ +#define DDSVCAPS_RESERVED1 0x00000001 +#define DDSVCAPS_RESERVED2 0x00000002 +#define DDSVCAPS_RESERVED3 0x00000004 +#define DDSVCAPS_RESERVED4 0x00000008 +#else +#define DDSVCAPS_ENIGMA 0x00000001 +#define DDSVCAPS_FLICKER 0x00000002 +#define DDSVCAPS_REDBLUE 0x00000004 +#define DDSVCAPS_SPLIT 0x00000008 +#endif +#define DDSVCAPS_STEREOSEQUENTIAL 0x00000010 + +/* BitDepths */ +#define DDBD_1 0x00004000 +#define DDBD_2 0x00002000 +#define DDBD_4 0x00001000 +#define DDBD_8 0x00000800 +#define DDBD_16 0x00000400 +#define DDBD_24 0x00000200 +#define DDBD_32 0x00000100 + +/* DDOVERLAYFX.dwDDFX */ +#define DDOVERFX_ARITHSTRETCHY 0x00000001 +#define DDOVERFX_MIRRORLEFTRIGHT 0x00000002 +#define DDOVERFX_MIRRORUPDOWN 0x00000004 + +/* UpdateOverlay flags */ +#define DDOVER_ALPHADEST 0x00000001 +#define DDOVER_ALPHADESTCONSTOVERRIDE 0x00000002 +#define DDOVER_ALPHADESTNEG 0x00000004 +#define DDOVER_ALPHADESTSURFACEOVERRIDE 0x00000008 +#define DDOVER_ALPHAEDGEBLEND 0x00000010 +#define DDOVER_ALPHASRC 0x00000020 +#define DDOVER_ALPHASRCCONSTOVERRIDE 0x00000040 +#define DDOVER_ALPHASRCNEG 0x00000080 +#define DDOVER_ALPHASRCSURFACEOVERRIDE 0x00000100 +#define DDOVER_HIDE 0x00000200 +#define DDOVER_KEYDEST 0x00000400 +#define DDOVER_KEYDESTOVERRIDE 0x00000800 +#define DDOVER_KEYSRC 0x00001000 +#define DDOVER_KEYSRCOVERRIDE 0x00002000 +#define DDOVER_SHOW 0x00004000 +#define DDOVER_ADDDIRTYRECT 0x00008000 +#define DDOVER_REFRESHDIRTYRECTS 0x00010000 +#define DDOVER_REFRESHALL 0x00020000 +#define DDOVER_DDFX 0x00080000 +#define DDOVER_AUTOFLIP 0x00100000 +#define DDOVER_BOB 0x00200000 +#define DDOVER_OVERRIDEBOBWEAVE 0x00400000 +#define DDOVER_INTERLEAVED 0x00800000 + +/* DDCOLORKEY.dwFlags */ +#define DDPF_ALPHAPIXELS 0x00000001 +#define DDPF_ALPHA 0x00000002 +#define DDPF_FOURCC 0x00000004 +#define DDPF_PALETTEINDEXED4 0x00000008 +#define DDPF_PALETTEINDEXEDTO8 0x00000010 +#define DDPF_PALETTEINDEXED8 0x00000020 +#define DDPF_RGB 0x00000040 +#define DDPF_COMPRESSED 0x00000080 +#define DDPF_RGBTOYUV 0x00000100 +#define DDPF_YUV 0x00000200 +#define DDPF_ZBUFFER 0x00000400 +#define DDPF_PALETTEINDEXED1 0x00000800 +#define DDPF_PALETTEINDEXED2 0x00001000 +#define DDPF_ZPIXELS 0x00002000 +#define DDPF_STENCILBUFFER 0x00004000 +#define DDPF_ALPHAPREMULT 0x00008000 +#define DDPF_LUMINANCE 0x00020000 +#define DDPF_BUMPLUMINANCE 0x00040000 +#define DDPF_BUMPDUDV 0x00080000 + +/* SetCooperativeLevel dwFlags */ +#define DDSCL_FULLSCREEN 0x00000001 +#define DDSCL_ALLOWREBOOT 0x00000002 +#define DDSCL_NOWINDOWCHANGES 0x00000004 +#define DDSCL_NORMAL 0x00000008 +#define DDSCL_EXCLUSIVE 0x00000010 +#define DDSCL_ALLOWMODEX 0x00000040 +#define DDSCL_SETFOCUSWINDOW 0x00000080 +#define DDSCL_SETDEVICEWINDOW 0x00000100 +#define DDSCL_CREATEDEVICEWINDOW 0x00000200 +#define DDSCL_MULTITHREADED 0x00000400 +#define DDSCL_FPUSETUP 0x00000800 +#define DDSCL_FPUPRESERVE 0x00001000 + + +/* DDSURFACEDESC.dwFlags */ +#define DDSD_CAPS 0x00000001 +#define DDSD_HEIGHT 0x00000002 +#define DDSD_WIDTH 0x00000004 +#define DDSD_PITCH 0x00000008 +#define DDSD_BACKBUFFERCOUNT 0x00000020 +#define DDSD_ZBUFFERBITDEPTH 0x00000040 +#define DDSD_ALPHABITDEPTH 0x00000080 +#define DDSD_LPSURFACE 0x00000800 +#define DDSD_PIXELFORMAT 0x00001000 +#define DDSD_CKDESTOVERLAY 0x00002000 +#define DDSD_CKDESTBLT 0x00004000 +#define DDSD_CKSRCOVERLAY 0x00008000 +#define DDSD_CKSRCBLT 0x00010000 +#define DDSD_MIPMAPCOUNT 0x00020000 +#define DDSD_REFRESHRATE 0x00040000 +#define DDSD_LINEARSIZE 0x00080000 +#define DDSD_TEXTURESTAGE 0x00100000 +#define DDSD_FVF 0x00200000 +#define DDSD_SRCVBHANDLE 0x00400000 +#define DDSD_ALL 0x007ff9ee + +/* EnumSurfaces flags */ +#define DDENUMSURFACES_ALL 0x00000001 +#define DDENUMSURFACES_MATCH 0x00000002 +#define DDENUMSURFACES_NOMATCH 0x00000004 +#define DDENUMSURFACES_CANBECREATED 0x00000008 +#define DDENUMSURFACES_DOESEXIST 0x00000010 + +/* SetDisplayMode flags */ +#define DDSDM_STANDARDVGAMODE 0x00000001 + +/* EnumDisplayModes flags */ +#define DDEDM_REFRESHRATES 0x00000001 +#define DDEDM_STANDARDVGAMODES 0x00000002 + +/* WaitForVerticalDisplay flags */ + +#define DDWAITVB_BLOCKBEGIN 0x00000001 +#define DDWAITVB_BLOCKBEGINEVENT 0x00000002 +#define DDWAITVB_BLOCKEND 0x00000004 + +typedef struct _DDSURFACEDESC +{ + DWORD dwSize; /* 0: size of the DDSURFACEDESC structure*/ + DWORD dwFlags; /* 4: determines what fields are valid*/ + DWORD dwHeight; /* 8: height of surface to be created*/ + DWORD dwWidth; /* C: width of input surface*/ + union { + LONG lPitch; /* 10: distance to start of next line (return value only)*/ + DWORD dwLinearSize; + } DUMMYUNIONNAME1; + DWORD dwBackBufferCount;/* 14: number of back buffers requested*/ + union { + DWORD dwMipMapCount;/* 18:number of mip-map levels requested*/ + DWORD dwZBufferBitDepth;/*18: depth of Z buffer requested*/ + DWORD dwRefreshRate;/* 18:refresh rate (used when display mode is described)*/ + } DUMMYUNIONNAME2; + DWORD dwAlphaBitDepth;/* 1C:depth of alpha buffer requested*/ + DWORD dwReserved; /* 20:reserved*/ + LPVOID lpSurface; /* 24:pointer to the associated surface memory*/ + DDCOLORKEY ddckCKDestOverlay;/* 28: CK for dest overlay use*/ + DDCOLORKEY ddckCKDestBlt; /* 30: CK for destination blt use*/ + DDCOLORKEY ddckCKSrcOverlay;/* 38: CK for source overlay use*/ + DDCOLORKEY ddckCKSrcBlt; /* 40: CK for source blt use*/ + DDPIXELFORMAT ddpfPixelFormat;/* 48: pixel format description of the surface*/ + DDSCAPS ddsCaps; /* 68: direct draw surface caps */ +} DDSURFACEDESC,*LPDDSURFACEDESC; + +typedef struct _DDSURFACEDESC2 +{ + DWORD dwSize; /* 0: size of the DDSURFACEDESC2 structure*/ + DWORD dwFlags; /* 4: determines what fields are valid*/ + DWORD dwHeight; /* 8: height of surface to be created*/ + DWORD dwWidth; /* C: width of input surface*/ + union { + LONG lPitch; /*10: distance to start of next line (return value only)*/ + DWORD dwLinearSize; /*10: formless late-allocated optimized surface size */ + } DUMMYUNIONNAME1; + DWORD dwBackBufferCount;/* 14: number of back buffers requested*/ + union { + DWORD dwMipMapCount;/* 18:number of mip-map levels requested*/ + DWORD dwRefreshRate;/* 18:refresh rate (used when display mode is described)*/ + DWORD dwSrcVBHandle;/* 18:source used in VB::Optimize */ + } DUMMYUNIONNAME2; + DWORD dwAlphaBitDepth;/* 1C:depth of alpha buffer requested*/ + DWORD dwReserved; /* 20:reserved*/ + LPVOID lpSurface; /* 24:pointer to the associated surface memory*/ + union { + DDCOLORKEY ddckCKDestOverlay; /* 28: CK for dest overlay use*/ + DWORD dwEmptyFaceColor; /* 28: color for empty cubemap faces */ + } DUMMYUNIONNAME3; + DDCOLORKEY ddckCKDestBlt; /* 30: CK for destination blt use*/ + DDCOLORKEY ddckCKSrcOverlay;/* 38: CK for source overlay use*/ + DDCOLORKEY ddckCKSrcBlt; /* 40: CK for source blt use*/ + + union { + DDPIXELFORMAT ddpfPixelFormat;/* 48: pixel format description of the surface*/ + DWORD dwFVF; /* 48: vertex format description of vertex buffers */ + } DUMMYUNIONNAME4; + DDSCAPS2 ddsCaps; /* 68: DDraw surface caps */ + DWORD dwTextureStage; /* 78: stage in multitexture cascade */ +} DDSURFACEDESC2,*LPDDSURFACEDESC2; + +/* DDCOLORCONTROL.dwFlags */ +#define DDCOLOR_BRIGHTNESS 0x00000001 +#define DDCOLOR_CONTRAST 0x00000002 +#define DDCOLOR_HUE 0x00000004 +#define DDCOLOR_SATURATION 0x00000008 +#define DDCOLOR_SHARPNESS 0x00000010 +#define DDCOLOR_GAMMA 0x00000020 +#define DDCOLOR_COLORENABLE 0x00000040 + +typedef struct { + DWORD dwSize; + DWORD dwFlags; + LONG lBrightness; + LONG lContrast; + LONG lHue; + LONG lSaturation; + LONG lSharpness; + LONG lGamma; + LONG lColorEnable; + DWORD dwReserved1; +} DDCOLORCONTROL,*LPDDCOLORCONTROL; + +typedef struct { + WORD red[256]; + WORD green[256]; + WORD blue[256]; +} DDGAMMARAMP,*LPDDGAMMARAMP; + +/* flags for DirectDrawEnumerateEx */ +#define DDENUM_ATTACHEDSECONDARYDEVICES 0x00000001 +#define DDENUM_DETACHEDSECONDARYDEVICES 0x00000002 +#define DDENUM_NONDISPLAYDEVICES 0x00000004 + +/* flags for DirectDrawCreate or IDirectDraw::Initialize */ +#define DDCREATE_HARDWAREONLY 1L +#define DDCREATE_EMULATIONONLY 2L + +/* dwDDFX */ +/* arithmetic stretching along y axis */ +#define DDBLTFX_ARITHSTRETCHY 0x00000001 +/* mirror on y axis */ +#define DDBLTFX_MIRRORLEFTRIGHT 0x00000002 +/* mirror on x axis */ +#define DDBLTFX_MIRRORUPDOWN 0x00000004 +/* do not tear */ +#define DDBLTFX_NOTEARING 0x00000008 +/* 180 degrees clockwise rotation */ +#define DDBLTFX_ROTATE180 0x00000010 +/* 270 degrees clockwise rotation */ +#define DDBLTFX_ROTATE270 0x00000020 +/* 90 degrees clockwise rotation */ +#define DDBLTFX_ROTATE90 0x00000040 +/* dwZBufferLow and dwZBufferHigh specify limits to the copied Z values */ +#define DDBLTFX_ZBUFFERRANGE 0x00000080 +/* add dwZBufferBaseDest to every source z value before compare */ +#define DDBLTFX_ZBUFFERBASEDEST 0x00000100 + +typedef DWORD IDirectDrawSurface; /* FIXME: implement proper definition */ +typedef IDirectDrawSurface *LPDIRECTDRAWSURFACE; +typedef struct _DDBLTFX +{ + DWORD dwSize; /* size of structure */ + DWORD dwDDFX; /* FX operations */ + DWORD dwROP; /* Win32 raster operations */ + DWORD dwDDROP; /* Raster operations new for DirectDraw */ + DWORD dwRotationAngle; /* Rotation angle for blt */ + DWORD dwZBufferOpCode; /* ZBuffer compares */ + DWORD dwZBufferLow; /* Low limit of Z buffer */ + DWORD dwZBufferHigh; /* High limit of Z buffer */ + DWORD dwZBufferBaseDest; /* Destination base value */ + DWORD dwZDestConstBitDepth; /* Bit depth used to specify Z constant for destination */ + union + { + DWORD dwZDestConst; /* Constant to use as Z buffer for dest */ + LPDIRECTDRAWSURFACE lpDDSZBufferDest; /* Surface to use as Z buffer for dest */ + } DUMMYUNIONNAME1; + DWORD dwZSrcConstBitDepth; /* Bit depth used to specify Z constant for source */ + union + { + DWORD dwZSrcConst; /* Constant to use as Z buffer for src */ + LPDIRECTDRAWSURFACE lpDDSZBufferSrc; /* Surface to use as Z buffer for src */ + } DUMMYUNIONNAME2; + DWORD dwAlphaEdgeBlendBitDepth; /* Bit depth used to specify constant for alpha edge blend */ + DWORD dwAlphaEdgeBlend; /* Alpha for edge blending */ + DWORD dwReserved; + DWORD dwAlphaDestConstBitDepth; /* Bit depth used to specify alpha constant for destination */ + union + { + DWORD dwAlphaDestConst; /* Constant to use as Alpha Channel */ + LPDIRECTDRAWSURFACE lpDDSAlphaDest; /* Surface to use as Alpha Channel */ + } DUMMYUNIONNAME3; + DWORD dwAlphaSrcConstBitDepth; /* Bit depth used to specify alpha constant for source */ + union + { + DWORD dwAlphaSrcConst; /* Constant to use as Alpha Channel */ + LPDIRECTDRAWSURFACE lpDDSAlphaSrc; /* Surface to use as Alpha Channel */ + } DUMMYUNIONNAME4; + union + { + DWORD dwFillColor; /* color in RGB or Palettized */ + DWORD dwFillDepth; /* depth value for z-buffer */ + DWORD dwFillPixel; /* pixel val for RGBA or RGBZ */ + LPDIRECTDRAWSURFACE lpDDSPattern; /* Surface to use as pattern */ + } DUMMYUNIONNAME5; + DDCOLORKEY ddckDestColorkey; /* DestColorkey override */ + DDCOLORKEY ddckSrcColorkey; /* SrcColorkey override */ +} DDBLTFX,*LPDDBLTFX; +typedef struct _DDOVERLAYFX +{ + DWORD dwSize; /* size of structure */ + DWORD dwAlphaEdgeBlendBitDepth; /* Bit depth used to specify constant for alpha edge blend */ + DWORD dwAlphaEdgeBlend; /* Constant to use as alpha for edge blend */ + DWORD dwReserved; + DWORD dwAlphaDestConstBitDepth; /* Bit depth used to specify alpha constant for destination */ + union + { + DWORD dwAlphaDestConst; /* Constant to use as alpha channel for dest */ + LPDIRECTDRAWSURFACE lpDDSAlphaDest; /* Surface to use as alpha channel for dest */ + } DUMMYUNIONNAME1; + DWORD dwAlphaSrcConstBitDepth; /* Bit depth used to specify alpha constant for source */ + union + { + DWORD dwAlphaSrcConst; /* Constant to use as alpha channel for src */ + LPDIRECTDRAWSURFACE lpDDSAlphaSrc; /* Surface to use as alpha channel for src */ + } DUMMYUNIONNAME2; + DDCOLORKEY dckDestColorkey; /* DestColorkey override */ + DDCOLORKEY dckSrcColorkey; /* DestColorkey override */ + DWORD dwDDFX; /* Overlay FX */ + DWORD dwFlags; /* flags */ +} DDOVERLAYFX,*LPDDOVERLAYFX; + +typedef struct _DDBLTBATCH +{ + LPRECT lprDest; + LPDIRECTDRAWSURFACE lpDDSSrc; + LPRECT lprSrc; + DWORD dwFlags; + LPDDBLTFX lpDDBltFx; +} DDBLTBATCH,*LPDDBLTBATCH; + +#define MAX_DDDEVICEID_STRING 512 + +typedef struct tagDDDEVICEIDENTIFIER { + char szDriver[MAX_DDDEVICEID_STRING]; + char szDescription[MAX_DDDEVICEID_STRING]; + LARGE_INTEGER liDriverVersion; + DWORD dwVendorId; + DWORD dwDeviceId; + DWORD dwSubSysId; + DWORD dwRevision; + GUID guidDeviceIdentifier; +} DDDEVICEIDENTIFIER, * LPDDDEVICEIDENTIFIER; + +typedef struct tagDDDEVICEIDENTIFIER2 { + char szDriver[MAX_DDDEVICEID_STRING]; /* user readable driver name */ + char szDescription[MAX_DDDEVICEID_STRING]; /* user readable description */ + LARGE_INTEGER liDriverVersion; /* driver version */ + DWORD dwVendorId; /* vendor ID, zero if unknown */ + DWORD dwDeviceId; /* chipset ID, zero if unknown */ + DWORD dwSubSysId; /* board ID, zero if unknown */ + DWORD dwRevision; /* chipset version, zero if unknown */ + GUID guidDeviceIdentifier; /* unique ID for this driver/chipset combination */ + DWORD dwWHQLLevel; /* Windows Hardware Quality Lab certification level */ +} DDDEVICEIDENTIFIER2, * LPDDDEVICEIDENTIFIER2; + +#ifdef __cplusplus +} /* extern "C" */ +#endif /* defined(__cplusplus) */ + +#endif /* __WINE_DDRAW_H */ diff --git a/include/debug.h b/include/debug.h index acc6db0..14c4ce6 100644 --- a/include/debug.h +++ b/include/debug.h @@ -16,7 +16,8 @@ #ifndef __INTERNAL_DEBUG #define __INTERNAL_DEBUG -#define UNIMPLEMENTED do {DbgPrint("%s at %s:%d is unimplemented, have a nice day\n",__FUNCTION__,__FILE__,__LINE__); for(;;); } while(0); +//#define UNIMPLEMENTED do {DbgPrint("%s at %s:%d is unimplemented, have a nice day\n",__FUNCTION__,__FILE__,__LINE__); for(;;); } while(0); +#define UNIMPLEMENTED DbgPrint("WARNING: %s at %s:%d is UNIMPLEMENTED!\n",__FUNCTION__,__FILE__,__LINE__); /* FIXME: should probably remove this later */ #if !defined(CHECKED) && !defined(NDEBUG) @@ -31,7 +32,12 @@ #endif #endif +/* TODO: Make the output of file/line and the debug message atomic */ +#ifdef __GNUC__ #define DPRINT1(args...) do { DbgPrint("(%s:%d) ",__FILE__,__LINE__); DbgPrint(args); } while(0); +#else +#define DPRINT1 DbgPrint("(%s:%d) ",__FILE__,__LINE__); DbgPrint +#endif #define CHECKPOINT1 do { DbgPrint("%s:%d\n",__FILE__,__LINE__); } while(0); @@ -39,7 +45,11 @@ #define DPRINT(args...) do { DbgPrint("(%s:%d) ",__FILE__,__LINE__); DbgPrint(args); } while(0); #define CHECKPOINT do { DbgPrint("%s:%d\n",__FILE__,__LINE__); } while(0); #else +#ifdef __GNUC__ #define DPRINT(args...) +#else +#define DPRINT +#endif /* __GNUC__ */ #define CHECKPOINT #endif /* NDEBUG */ diff --git a/include/defines.h b/include/defines.h index e191776..1e77428 100644 --- a/include/defines.h +++ b/include/defines.h @@ -42,11 +42,13 @@ #ifndef WIN32_NO_STATUS -//#define STATUS_WAIT_0 (0x00000000L) -//#define STATUS_ABANDONED_WAIT_0 (0x00000080L) -//#define STATUS_USER_APC (0x000000C0L) -//#define STATUS_TIMEOUT (0x00000102L) -//#define STATUS_PENDING (0x00000103L) +/* +#define STATUS_WAIT_0 (0x00000000L) +#define STATUS_ABANDONED_WAIT_0 (0x00000080L) +#define STATUS_USER_APC (0x000000C0L) +#define STATUS_TIMEOUT (0x00000102L) +#define STATUS_PENDING (0x00000103L) +*/ #endif /* WIN32_NO_STATUS */ #define GA_PARENT (1) @@ -156,6 +158,7 @@ extern "C" { #define MF_STRING (0L) #define MF_SYSMENU (0x2000L) #define MF_USECHECKBITMAPS (0x200L) +#define MF_RIGHTJUSTIFY MF_HELP /* Ternary Raster Operations - BitBlt */ #define BLACKNESS 0x00000042 @@ -244,6 +247,7 @@ extern "C" { #define DISP_CHANGE_FAILED (-1) #define DISP_CHANGE_BADMODE (-2) #define DISP_CHANGE_NOTUPDATED (-3) +#define DISP_CHANGE_BADPARAM (-5) /* ChangeServiceConfig */ #define SERVICE_NO_CHANGE (-1) @@ -258,6 +262,8 @@ extern "C" { #define SERVICE_AUTO_START (2) #define SERVICE_DEMAND_START (3) #define SERVICE_DISABLED (4) +#define SERVICE_CONFIG_DESCRIPTION (1) +#define SERVICE_CONFIG_FAILURE_ACTIONS (2) /* SERVICE_STATUS structure */ #define SERVICE_STOPPED (1) @@ -270,6 +276,11 @@ extern "C" { #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) /* CheckDlgButton */ #define BST_CHECKED (1) @@ -318,6 +329,8 @@ extern "C" { #define COMPLEXREGION (3) #define ERROR (0) +#define HW_PROFILE_GUIDLEN 39 +#define MAX_PROFILE_LEN 80 /* CommonDlgExtendedError */ #define CDERR_DIALOGFAILURE (0xffff) #define CDERR_FINDRESFAILURE (6) @@ -383,6 +396,15 @@ extern "C" { #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) /* CopyImage, LoadImage */ #define IMAGE_BITMAP (0) @@ -394,6 +416,7 @@ extern "C" { #define LR_MONOCHROME (1) #define LR_CREATEDIBSECTION (8192) #define LR_DEFAULTSIZE (64) +#define LR_SHARED (32768) /* CreateDesktop */ #define DF_ALLOWOTHERACCOUNTHOOK (0x1L) @@ -535,7 +558,6 @@ extern "C" { /* CreateService */ -#define SERVICE_ALL_ACCESS (0xf01ffL) #define SERVICE_CHANGE_CONFIG (2) #define SERVICE_ENUMERATE_DEPENDENTS (8) #define SERVICE_INTERROGATE (128) @@ -559,6 +581,17 @@ extern "C" { #define SERVICE_ERROR_NORMAL (1) #define SERVICE_ERROR_SEVERE (2) #define SERVICE_ERROR_CRITICAL (3) +#define SERVICE_RUNS_IN_SYSTEM_PROCESS (1) +#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) /* CreateTapePartition, WriteTapemark */ #define TAPE_FIXED_PARTITIONS (0L) @@ -624,6 +657,7 @@ extern "C" { #define BS_TOP (0x400L) #define BS_USERBUTTON (0x8L) #define BS_VCENTER (0xc00L) +#define BS_FLAT (0x8000L) #define CBS_AUTOHSCROLL (0x40L) #define CBS_DISABLENOSCROLL (0x800L) #define CBS_DROPDOWN (0x2L) @@ -682,6 +716,8 @@ extern "C" { #define SS_BLACKRECT (0x4L) #define SS_CENTER (0x1L) #define SS_CENTERIMAGE (0x200L) +#define SS_ELLIPSISMASK (0xC000L) +#define SS_ENDELLIPSIS (0x4000L) #define SS_ENHMETAFILE (0xfL) #define SS_ETCHEDFRAME (0x12L) #define SS_ETCHEDHORZ (0x10L) @@ -694,14 +730,17 @@ extern "C" { #define SS_NOPREFIX (0x80L) #define SS_NOTIFY (0x100L) #define SS_OWNERDRAW (0xdL) +#define SS_PATHELLIPSIS (0x8000L) #define SS_REALSIZEIMAGE (0x800L) #define SS_RIGHT (0x2L) #define SS_RIGHTJUST (0x400L) #define SS_SIMPLE (0xbL) #define SS_SUNKEN (0x1000L) +#define SS_TYPEMASK (0x1FL) #define SS_USERITEM (0xaL) #define SS_WHITEFRAME (0x9L) #define SS_WHITERECT (0x6L) +#define SS_WORDELLIPSIS (0xC000L) #define DS_3DLOOK (0x4L) #define DS_ABSALIGN (0x1L) #define DS_CENTER (0x800L) @@ -844,8 +883,15 @@ extern "C" { #define IDANI_CLOSE (2) /* DrawCaption */ -#define DC_ACTIVE (1) -#define DC_SMALLCAP (2) +#define DC_ACTIVE 1 +#define DC_SMALLCAP 2 +#define DC_ICON 4 +#define DC_TEXT 8 +#define DC_INBUTTON 16 +#define DC_GRADIENT 32 +#define DC_BUTTONS 64 +#define DC_CAPTION (DC_ICON|DC_TEXT|DC_BUTTONS|DC_GRADIENT) +#define DC_NC (DC_CAPTION|DC_FRAME) /* DrawEdge */ #define BDR_OUTER (3) @@ -930,6 +976,7 @@ extern "C" { #define DSS_UNION (16) #define DSS_DISABLED (32) #define DSS_MONO (128) +#define DSS_RIGHT (0x8000) /* Undocumented */ /* DrawStatusText */ #define SBT_NOBORDERS (256) @@ -1007,6 +1054,8 @@ extern "C" { /* EnumDependentServices */ #define SERVICE_ACTIVE (1) #define SERVICE_INACTIVE (2) +#define SERVICE_STATE_ALL (SERVICE_ACTIVE | \ + SERVICE_INACTIVE) /* EnumFontFamExProc */ #define DEVICE_FONTTYPE (2) @@ -1033,20 +1082,69 @@ extern "C" { /* EnumProtocols */ /* EnumResLangProc */ -#define RT_ACCELERATOR (MAKEINTRESOURCE(9)) -#define RT_BITMAP (MAKEINTRESOURCE(2)) -#define RT_DIALOG (MAKEINTRESOURCE(5)) -#define RT_FONT (MAKEINTRESOURCE(8)) -#define RT_FONTDIR (MAKEINTRESOURCE(7)) -#define RT_MENU (MAKEINTRESOURCE(4)) -#define RT_RCDATA (MAKEINTRESOURCE(10)) -#define RT_STRING (MAKEINTRESOURCE(6)) -#define RT_MESSAGETABLE (MAKEINTRESOURCE(11)) -#define RT_CURSOR (MAKEINTRESOURCE(1)) -#define RT_GROUP_CURSOR (MAKEINTRESOURCE(12)) -#define RT_ICON (MAKEINTRESOURCE(3)) -#define RT_GROUP_ICON (MAKEINTRESOURCE(13)) -#define RT_VERSION (MAKEINTRESOURCE(16)) +#define RT_ACCELERATORA (MAKEINTRESOURCEA(9)) +#define RT_BITMAPA (MAKEINTRESOURCEA(2)) +#define RT_DIALOGA (MAKEINTRESOURCEA(5)) +#define RT_FONTA (MAKEINTRESOURCEA(8)) +#define RT_FONTDIRA (MAKEINTRESOURCEA(7)) +#define RT_MENUA (MAKEINTRESOURCEA(4)) +#define RT_RCDATAA (MAKEINTRESOURCEA(10)) +#define RT_STRINGA (MAKEINTRESOURCEA(6)) +#define RT_MESSAGETABLEA (MAKEINTRESOURCEA(11)) +#define RT_CURSORA (MAKEINTRESOURCEA(1)) +#define RT_GROUP_CURSORA (MAKEINTRESOURCEA(12)) +#define RT_ICONA (MAKEINTRESOURCEA(3)) +#define RT_GROUP_ICONA (MAKEINTRESOURCEA(13)) +#define RT_VERSIONA (MAKEINTRESOURCEA(16)) + +#define RT_ACCELERATORW (MAKEINTRESOURCEW(9)) +#define RT_BITMAPW (MAKEINTRESOURCEW(2)) +#define RT_DIALOGW (MAKEINTRESOURCEW(5)) +#define RT_FONTW (MAKEINTRESOURCEW(8)) +#define RT_FONTDIRW (MAKEINTRESOURCEW(7)) +#define RT_MENUW (MAKEINTRESOURCEW(4)) +#define RT_RCDATAW (MAKEINTRESOURCEW(10)) +#define RT_STRINGW (MAKEINTRESOURCEW(6)) +#define RT_MESSAGETABLEW (MAKEINTRESOURCEW(11)) +#define RT_CURSORW (MAKEINTRESOURCEW(1)) +#define RT_GROUP_CURSORW (MAKEINTRESOURCEW(12)) +#define RT_ICONW (MAKEINTRESOURCEW(3)) +#define RT_GROUP_ICONW (MAKEINTRESOURCEW(13)) +#define RT_VERSIONW (MAKEINTRESOURCEW(16)) + +#ifndef _DISABLE_TIDENT +#ifdef UNICODE +#define RT_ACCELERATOR RT_ACCELERATORW +#define RT_BITMAP RT_BITMAPW +#define RT_DIALOG RT_DIALOGW +#define RT_FONT RT_FONTW +#define RT_FONTDIR RT_FONTDIRW +#define RT_MENU RT_MENUW +#define RT_RCDATA RT_RCDATAW +#define RT_STRING RT_STRINGW +#define RT_MESSAGETABLE RT_MESSAGETABLEW +#define RT_CURSOR RT_CURSORW +#define RT_GROUP_CURSOR RT_GROUP_CURSORW +#define RT_ICON RT_ICONW +#define RT_GROUP_ICON RT_GROUP_ICONW +#define RT_VERSION RT_VERSIONW +#else /* UNICODE */ +#define RT_ACCELERATOR RT_ACCELERATORA +#define RT_BITMAP RT_BITMAPA +#define RT_DIALOG RT_DIALOGA +#define RT_FONT RT_FONTA +#define RT_FONTDIR RT_FONTDIRA +#define RT_MENU RT_MENUA +#define RT_RCDATA RT_RCDATAA +#define RT_STRING RT_STRINGA +#define RT_MESSAGETABLE RT_MESSAGETABLEA +#define RT_CURSOR RT_CURSORA +#define RT_GROUP_CURSOR RT_GROUP_CURSORA +#define RT_ICON RT_ICONA +#define RT_GROUP_ICON RT_GROUP_ICONA +#define RT_VERSION RT_VERSIONA +#endif /* UNICODE */ +#endif /* _DISABLE_TIDENT */ /* EnumServicesStatus */ #define SERVICE_WIN32 (48) @@ -1136,6 +1234,9 @@ extern "C" { /* FindNextPrinterNotification */ +/* FlsAlloc */ +#define FLS_OUT_OF_INDEXES (0xFFFFFFFF) + /* FMExtensionProc */ /* FoldString */ @@ -1282,10 +1383,10 @@ extern "C" { #define CP_ACP (0) #define CP_MACCP (2) #define CP_OEMCP (1) -#define CP_THREAD_ACP 3 //ACP Current thread's ANSI code page -#define CP_SYMBOL 42 //Symbol code page (42) -#define CP_UTF7 65000 //Translate using UTF-7 -#define CP_UTF8 65001 //Translate using UTF-8 +#define CP_THREAD_ACP 3 /* ACP Current thread's ANSI code page */ +#define CP_SYMBOL 42 /* Symbol code page (42) */ +#define CP_UTF7 65000 /* Translate using UTF-7 */ +#define CP_UTF8 65001 /* Translate using UTF-8 */ /* GetDateFormat */ #define DATE_SHORTDATE (1) @@ -1466,27 +1567,28 @@ extern "C" { #define HANDLE_FLAG_PROTECT_FROM_CLOSE (2) /* GetIconInfo */ -#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_APPSTARTING (MAKEINTRESOURCE(32650)) -#define IDC_HELP (MAKEINTRESOURCE(32651)) -#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)) -#define IDC_SIZE (MAKEINTRESOURCE(32640)) -#define IDC_ICON (MAKEINTRESOURCE(32641)) +#define IDC_ARROW (MAKEINTRESOURCEW(32512)) +#define IDC_IBEAM (MAKEINTRESOURCEW(32513)) +#define IDC_WAIT (MAKEINTRESOURCEW(32514)) +#define IDC_CROSS (MAKEINTRESOURCEW(32515)) +#define IDC_UPARROW (MAKEINTRESOURCEW(32516)) +#define IDC_SIZENWSE (MAKEINTRESOURCEW(32642)) +#define IDC_SIZENESW (MAKEINTRESOURCEW(32643)) +#define IDC_SIZEWE (MAKEINTRESOURCEW(32644)) +#define IDC_SIZENS (MAKEINTRESOURCEW(32645)) +#define IDC_SIZEALL (MAKEINTRESOURCEW(32646)) +#define IDC_NO (MAKEINTRESOURCEW(32648)) +#define IDC_APPSTARTING (MAKEINTRESOURCEW(32650)) +#define IDC_HELP (MAKEINTRESOURCEW(32651)) +#define IDI_APPLICATION (MAKEINTRESOURCEW(32512)) +#define IDI_HAND (MAKEINTRESOURCEW(32513)) +#define IDI_QUESTION (MAKEINTRESOURCEW(32514)) +#define IDI_EXCLAMATION (MAKEINTRESOURCEW(32515)) +#define IDI_ASTERISK (MAKEINTRESOURCEW(32516)) +#define IDI_WINLOGO (MAKEINTRESOURCEW(32517)) +#define IDC_SIZE (MAKEINTRESOURCEW(32640)) +#define IDC_ICON (MAKEINTRESOURCEW(32641)) +#define IDC_HAND (MAKEINTRESOURCEW(32649)) /* GetMapMode */ #define MM_ANISOTROPIC (8) @@ -1548,11 +1650,12 @@ extern "C" { #define QS_TIMER (16) /* GetScrollInfo, SetScrollInfo */ -#define SIF_ALL (23) -#define SIF_PAGE (2) -#define SIF_POS (4) -#define SIF_RANGE (1) -#define SIF_DISABLENOSCROLL (8) +#define SIF_ALL 23 +#define SIF_PAGE 2 +#define SIF_POS 4 +#define SIF_RANGE 1 +#define SIF_DISABLENOSCROLL 8 +#define SIF_TRACKPOS 16 /* GetStdHandle */ #define STD_INPUT_HANDLE (DWORD)(-10) @@ -2033,6 +2136,7 @@ extern "C" { #define MB_TASKMODAL (0x2000L) #define MB_YESNO (0x4L) #define MB_YESNOCANCEL (0x3L) +#define MB_CANCELTRYCONTINUE (0x6L) #define IDABORT (3) #define IDCANCEL (2) #define IDCLOSE (8) @@ -2042,6 +2146,8 @@ extern "C" { #define IDOK (1) #define IDRETRY (4) #define IDYES (6) +#define IDTRYAGAIN (10) +#define IDCONTINUE (11) /* MessageProc */ #define MSGF_DIALOGBOX (0) @@ -2100,13 +2206,19 @@ extern "C" { /* OpenProcessToken */ /* OpenSCManager */ -#define SC_MANAGER_ALL_ACCESS (0xf003fL) #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 SC_MANAGER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \ + SC_MANAGER_CONNECT | \ + SC_MANAGER_CREATE_SERVICE | \ + SC_MANAGER_ENUMERATE_SERVICE | \ + SC_MANAGER_LOCK | \ + SC_MANAGER_QUERY_LOCK_STATUS | \ + SC_MANAGER_MODIFY_BOOT_CONFIG) /* PostMessage */ #define HWND_BROADCAST ((HWND)0xFFFF) @@ -2472,6 +2584,17 @@ extern "C" { #define WPF_RESTORETOMAXIMIZED (2) #define WPF_SETMINPOSITION (1) +/* AnimageWindow */ +#define AW_SLIDE (0x00040000) +#define AW_ACTIVATE (0x00020000) +#define AW_BLEND (0x00080000) +#define AW_HIDE (0x00010000) +#define AW_CENTER (0x00000010) +#define AW_HOR_POSITIVE (0x00000001) +#define AW_HOR_NEGATIVE (0x00000002) +#define AW_VER_POSITIVE (0x00000004) +#define AW_VER_NEGATIVE (0x00000008) + /* Sleep */ #define INFINITE 0xFFFFFFFF @@ -3358,6 +3481,7 @@ extern "C" { #define WC_LISTVIEWA "SysListView32" #define WC_TABCONTROLA "SysTabControl32" #define WC_TREEVIEWA "SysTreeView32" +#ifndef _DISABLE_TIDENTS #ifdef UNICODE #define ANIMATE_CLASS ANIMATE_CLASSW #define HOTKEY_CLASS HOTKEY_CLASSW @@ -3385,6 +3509,7 @@ extern "C" { #define WC_TABCONTROL WC_TABCONTROLA #define WC_TREEVIEW WC_TREEVIEWA #endif /* UNICODE */ +#endif /* _DISABLE_TIDENTS */ /* Header control styles */ #define HDS_BUTTONS (2) @@ -3573,11 +3698,13 @@ extern "C" { #define LVIS_STATEIMAGEMASK (61440) #define LPSTR_TEXTCALLBACKW ((LPWSTR)-1L) #define LPSTR_TEXTCALLBACKA ((LPSTR)-1L) +#ifndef _DISABLE_TIDENTS #ifdef UNICODE #define LPSTR_TEXTCALLBACK LPSTR_TEXTCALLBACKW #else #define LPSTR_TEXTCALLBACK LPSTR_TEXTCALLBACKA #endif /* UNICODE */ +#endif /* _DISABLE_TIDENTS */ /* LV_ITEM structure */ #define LVIF_TEXT (1) @@ -4031,6 +4158,7 @@ extern "C" { #define LBSELCHSTRINGA "commdlg_LBSelChangedNotify" #define SETRGBSTRINGA "commdlg_SetRGBColor" #define SHAREVISTRINGA "commdlg_ShareViolation" +#ifndef _DISABLE_TIDENTS #ifdef UNICODE #define COLOROKSTRING COLOROKSTRINGW #define FILEOKSTRING FILEOKSTRINGW @@ -4047,7 +4175,8 @@ extern "C" { #define LBSELCHSTRING LBSELCHSTRINGA #define SETRGBSTRING SETRGBSTRINGA #define SHAREVISTRING SHAREVISTRINGA -#endif +#endif /* UNICODE */ +#endif /* _DISABLE_TIDENTS */ /* LBSELCHSTRING message */ #define CD_LBSELCHANGE (0) @@ -4231,6 +4360,14 @@ extern "C" { #define FSHIFT (4) #define FVIRTKEY (1) +/* MENUINFO structure */ +#define MIM_MAXHEIGHT 0x00000001 +#define MIM_BACKGROUND 0x00000002 +#define MIM_HELPID 0x00000004 +#define MIM_MENUDATA 0x00000008 +#define MIM_STYLE 0x00000010 +#define MIM_APPLYTOSUBMENUS 0x80000000 + /* MENUITEMINFO structure */ #define MIIM_CHECKMARKS (8) #define MIIM_DATA (32) @@ -4238,6 +4375,9 @@ extern "C" { #define MIIM_STATE (1) #define MIIM_SUBMENU (4) #define MIIM_TYPE (16) +#define MIIM_STRING (0x40) +#define MIIM_BITMAP (0x80) +#define MIIM_FTYPE (0x100) #define MFT_BITMAP (0x4L) #define MFT_MENUBARBREAK (0x20L) #define MFT_MENUBREAK (0x40L) @@ -4491,6 +4631,22 @@ extern "C" { /* GetFileCompressedSize */ #define INVALID_FILE_SIZE ((DWORD)-1) +/* system ids */ +#define OBJID_WINDOW ((LONG)0x00000000) +#define OBJID_SYSMENU ((LONG)0xFFFFFFFF) +#define OBJID_TITLEBAR ((LONG)0xFFFFFFFE) +#define OBJID_MENU ((LONG)0xFFFFFFFD) +#define OBJID_CLIENT ((LONG)0xFFFFFFFC) +#define OBJID_VSCROLL ((LONG)0xFFFFFFFB) +#define OBJID_HSCROLL ((LONG)0xFFFFFFFA) +#define OBJID_SIZEGRIP ((LONG)0xFFFFFFF9) +#define OBJID_CARET ((LONG)0xFFFFFFF8) +#define OBJID_CURSOR ((LONG)0xFFFFFFF7) +#define OBJID_ALERT ((LONG)0xFFFFFFF6) +#define OBJID_SOUND ((LONG)0xFFFFFFF5) +#define OBJID_QUERYCLASSNAMEIDX ((LONG)0xFFFFFFF4) +#define OBJID_NATIVEOM ((LONG)0xFFFFFFF0) + /* --------------------- old stuff, need to organize! --------------- */ /* BEGINNING of windowsx.h stuff from old headers: */ @@ -4744,19 +4900,19 @@ typedef enum _SC_ENUM_TYPE { #endif /* !__USE_W32API */ typedef enum _SystemState { - STATE_SYSTEM_UNAVAILABLE = 0x00000001, // Disabled + STATE_SYSTEM_UNAVAILABLE = 0x00000001, /* Disabled */ STATE_SYSTEM_SELECTED = 0x00000002, STATE_SYSTEM_FOCUSED = 0x00000004, STATE_SYSTEM_PRESSED = 0x00000008, STATE_SYSTEM_CHECKED = 0x00000010, - STATE_SYSTEM_MIXED = 0x00000020, // 3-state checkbox or toolbar button + STATE_SYSTEM_MIXED = 0x00000020, /* 3-state checkbox or toolbar button */ STATE_SYSTEM_READONLY = 0x00000040, STATE_SYSTEM_HOTTRACKED = 0x00000080, STATE_SYSTEM_DEFAULT = 0x00000100, STATE_SYSTEM_EXPANDED = 0x00000200, STATE_SYSTEM_COLLAPSED = 0x00000400, STATE_SYSTEM_BUSY = 0x00000800, - STATE_SYSTEM_FLOATING = 0x00001000, // Children "owned" not "contained" by parent + STATE_SYSTEM_FLOATING = 0x00001000, /* Children "owned" not "contained" by parent */ STATE_SYSTEM_MARQUEED = 0x00002000, STATE_SYSTEM_ANIMATED = 0x00004000, STATE_SYSTEM_INVISIBLE = 0x00008000, @@ -4768,11 +4924,11 @@ typedef enum _SystemState { STATE_SYSTEM_SELECTABLE = 0x00200000, STATE_SYSTEM_LINKED = 0x00400000, STATE_SYSTEM_TRAVERSED = 0x00800000, - STATE_SYSTEM_MULTISELECTABLE = 0x01000000, // Supports multiple selection - STATE_SYSTEM_EXTSELECTABLE = 0x02000000, // Supports extended selection - STATE_SYSTEM_ALERT_LOW = 0x04000000, // This information is of low priority - STATE_SYSTEM_ALERT_MEDIUM = 0x08000000, // This information is of medium priority - STATE_SYSTEM_ALERT_HIGH = 0x10000000, // This information is of high priority + STATE_SYSTEM_MULTISELECTABLE = 0x01000000, /* Supports multiple selection */ + STATE_SYSTEM_EXTSELECTABLE = 0x02000000, /* Supports extended selection */ + STATE_SYSTEM_ALERT_LOW = 0x04000000, /* This information is of low priority */ + STATE_SYSTEM_ALERT_MEDIUM = 0x08000000, /* This information is of medium priority */ + STATE_SYSTEM_ALERT_HIGH = 0x10000000, /* This information is of high priority */ STATE_SYSTEM_VALID = 0x1FFFFFFF } SystemState; diff --git a/include/dflat32/classes.h b/include/dflat32/classes.h index 74fceb9..653013b 100644 --- a/include/dflat32/classes.h +++ b/include/dflat32/classes.h @@ -15,7 +15,7 @@ ClassDef( APPLICATION, NORMAL, ApplicationProc, VISIBLE | SAVESELF | CONTROLBOX ) ClassDef( TEXTBOX, NORMAL, TextBoxProc, 0 ) -//ClassDef( LISTBOX, TEXTBOX, ListBoxProc, 0 ) +/* ClassDef( LISTBOX, TEXTBOX, ListBoxProc, 0 ) */ ClassDef( EDITBOX, TEXTBOX, EditBoxProc, 0 ) ClassDef( MENUBAR, NORMAL, MenuBarProc, NOCLIP ) ClassDef( POPDOWNMENU, LISTBOX, PopDownProc, SAVESELF | @@ -30,8 +30,8 @@ ClassDef( DIALOG, NORMAL, DialogProc, SHADOW | HASBORDER | NOCLIP ) ClassDef( BOX, NORMAL, BoxProc, HASBORDER ) -//ClassDef( BUTTON, TEXTBOX, ButtonProc, SHADOW ) -//ClassDef( COMBOBOX, EDITBOX, ComboProc, 0 ) +/* ClassDef( BUTTON, TEXTBOX, ButtonProc, SHADOW ) */ +/* ClassDef( COMBOBOX, EDITBOX, ComboProc, 0 ) */ ClassDef( TEXT, TEXTBOX, TextProc, 0 ) ClassDef( RADIOBUTTON, TEXTBOX, RadioButtonProc, 0 ) ClassDef( CHECKBOX, TEXTBOX, CheckBoxProc, 0 ) diff --git a/include/dflat32/config.h b/include/dflat32/config.h index 065e197..7b70cf4 100644 --- a/include/dflat32/config.h +++ b/include/dflat32/config.h @@ -24,7 +24,7 @@ typedef struct config { BOOL StatusBar; /* True for appl'n window status bar */ BOOL Texture; /* True for textured appl window */ #endif -// int ScreenLines; /* Number of screen lines (25/43/50) */ +/* int ScreenLines; */ /* Number of screen lines (25/43/50) */ char PrinterPort[5]; int LinesPage; /* Lines per printer page */ int CharsLine; /* Characters per printer line */ diff --git a/include/dflat32/dflat.h b/include/dflat32/dflat.h index 0d3ec41..eb402cd 100644 --- a/include/dflat32/dflat.h +++ b/include/dflat32/dflat.h @@ -2,7 +2,7 @@ #ifndef DFLAT_H #define DFLAT_H -//#ifdef BUILD_FULL_DFLAT +/* #ifdef BUILD_FULL_DFLAT */ #define INCLUDE_MULTI_WINDOWS #define INCLUDE_LOGGING #define INCLUDE_SHELLDOS @@ -12,7 +12,7 @@ #define INCLUDE_MAXIMIZE #define INCLUDE_RESTORE #define INCLUDE_EXTENDEDSELECTIONS -//#endif +/* #endif */ #include #include @@ -272,7 +272,7 @@ extern BOOL ClipString; #define SCROLLBARCHAR (unsigned char) 176 #define SCROLLBOXCHAR (unsigned char) 178 /* ------------------ menu characters --------------------- */ -#define CHECKMARK (unsigned char) '\x04' //(SCREENHEIGHT==25?251:4) +#define CHECKMARK (unsigned char) '\x04' /* (SCREENHEIGHT==25?251:4) */ #define CASCADEPOINTER (unsigned char) '\x10' /* ----------------- title bar characters ----------------- */ #define CONTROLBOXCHAR (unsigned char) '\xf0' diff --git a/include/dflat32/system.h b/include/dflat32/system.h index 42136c1..5244db7 100644 --- a/include/dflat32/system.h +++ b/include/dflat32/system.h @@ -2,11 +2,11 @@ #ifndef SYSTEM_H #define SYSTEM_H -//#if MSC | WATCOM +/* #if MSC | WATCOM */ #include -//#else -//#include -//#endif +/* #else */ +/* #include */ +/* #endif */ #define swap(a,b){int x=a;a=b;b=x;} /* ------- platform-dependent values ------ */ @@ -16,8 +16,8 @@ #define ZEROFLAG 0x40 #define MAXSAVES 50 -//#define SCREENWIDTH (80) -//#define SCREENHEIGHT (25) +/* #define SCREENWIDTH (80) */ +/* #define SCREENHEIGHT (25) */ HANDLE hInput; HANDLE hOutput; diff --git a/include/epsapi.h b/include/epsapi.h index cb067a2..feb3ee0 100644 --- a/include/epsapi.h +++ b/include/epsapi.h @@ -26,8 +26,8 @@ #define __INTERNAL_PSAPI_H_INCLUDED__ /* INCLUDES */ -#include -#include +#define NTOS_MODE_USER +#include /* OBJECTS */ @@ -46,7 +46,7 @@ typedef NTSTATUS NTAPI (*PTHREAD_ENUM_ROUTINE) typedef NTSTATUS NTAPI (*PSYSMOD_ENUM_ROUTINE) ( - IN PSYSTEM_MODULE_INFORMATION CurrentModule, + IN PSYSTEM_MODULE_INFORMATION_ENTRY CurrentModule, IN OUT PVOID CallbackContext ); @@ -169,26 +169,26 @@ NTSTATUS NTAPI PsaCaptureSystemModules ( - OUT PSYSTEM_MODULES * SystemModules + OUT PSYSTEM_MODULE_INFORMATION * SystemModules ); NTSTATUS NTAPI PsaWalkSystemModules ( - IN PSYSTEM_MODULES SystemModules, + IN PSYSTEM_MODULE_INFORMATION SystemModules, IN PSYSMOD_ENUM_ROUTINE Callback, IN OUT PVOID CallbackContext ); -PSYSTEM_MODULE_INFORMATION +PSYSTEM_MODULE_INFORMATION_ENTRY FASTCALL PsaWalkFirstSystemModule ( - IN PSYSTEM_MODULES SystemModules + IN PSYSTEM_MODULE_INFORMATION SystemModules ); -PSYSTEM_MODULE_INFORMATION +PSYSTEM_MODULE_INFORMATION_ENTRY FASTCALL PsaWalkNextSystemModule ( diff --git a/include/errors.h b/include/errors.h index 30a219b..914746b 100644 --- a/include/errors.h +++ b/include/errors.h @@ -31,19 +31,25 @@ #ifndef _GNU_H_WINDOWS32_ERROR #define _GNU_H_WINDOWS32_ERROR +#ifdef __USE_W32API + +#include_next + +#else /* !__USE_W32API */ + #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ -// -// Return Code macros -// +/* + * Return Code macros + */ #define SUCCEEDED(Status) ((HRESULT)(Status) >= 0) #define FAILED(Status) ((HRESULT)(Status)<0) -// -// Success Codes -// +/* + * Success Codes + */ #define S_OK 0x00000000L #define S_FALSE 0x00000001L @@ -228,6 +234,17 @@ extern "C" { #define ERROR_LOCKED 212L #define ERROR_TOO_MANY_MODULES 214L #define ERROR_NESTING_NOT_ALLOWED 215L +#define ERROR_CANNOT_SHRINK 216L +#define ERROR_ZOMBIE_PROCESS 217L +#define ERROR_STACK_IN_HIGH_MEMORY 218L +#define ERROR_INVALID_EXITROUTINE_RING 219L +#define ERROR_GETBUF_FAILED 220L +#define ERROR_FLUSHBUF_FAILED 221L +#define ERROR_TRANSFER_TOO_LONG 222L +#define ERROR_FORCENOSWAP_FAILED 223L +#define ERROR_SMG_NO_TARGET_WINDOW 224L +#define ERROR_NO_CHILDREN 228L +#define ERROR_INVALID_SCREEN_GROUP 229L #define ERROR_BAD_PIPE 230L #define ERROR_PIPE_BUSY 231L #define ERROR_NO_DATA 232L @@ -1165,4 +1182,6 @@ extern "C" { } #endif /* __cplusplus */ +#endif /* !__USE_W32API */ + #endif /* _GNU_H_WINDOWS32_ERROR */ diff --git a/include/funcs.h b/include/funcs.h index d4ce50b..66c7d84 100644 --- a/include/funcs.h +++ b/include/funcs.h @@ -63,6 +63,7 @@ typedef PPROGRESS_ROUTINE LPPROGRESS_ROUTINE; /* Define the approprate declaration based upon UNICODE or ASCII */ +#ifndef _DISABLE_TIDENTS /* UNICODE */ #ifdef UNICODE @@ -85,6 +86,10 @@ typedef PPROGRESS_ROUTINE LPPROGRESS_ROUTINE; #define RegRestoreKey RegRestoreKeyW #define RegSaveKey RegSaveKeyW #define RegSetValue RegSetValueW +#define ChangeServiceConfig2 ChangeServiceConfig2W +#define EnumServicesStatusEx EnumServicesStatusExW +#define QueryServiceConfig2 QueryServiceConfig2W +#define RegisterServiceCtrlHandlerEx RegisterServiceCtrlHandlerExW #define RegSetValueEx RegSetValueExW #define AbortSystemShutdown AbortSystemShutdownW #define InitiateSystemShutdown InitiateSystemShutdownW @@ -108,6 +113,7 @@ typedef PPROGRESS_ROUTINE LPPROGRESS_ROUTINE; #define FindWindowEx FindWindowExW #define GetClassName GetClassNameW #define SetWindowsHookEx SetWindowsHookExW +#define SetWindowsHook SetWindowsHookW #define LoadBitmap LoadBitmapW #define LoadCursor LoadCursorW #define LoadCursorFromFile LoadCursorFromFileW @@ -206,7 +212,6 @@ typedef PPROGRESS_ROUTINE LPPROGRESS_ROUTINE; #define GetDlgItemText GetDlgItemTextW #define SendDlgItemMessage SendDlgItemMessageW #define DefDlgProc DefDlgProcW -#define CallMsgFilter CallMsgFilterW #define GetClipboardFormatName GetClipboardFormatNameW #define CharToOem CharToOemW #define OemToChar OemToCharW @@ -227,6 +232,8 @@ typedef PPROGRESS_ROUTINE LPPROGRESS_ROUTINE; #define VkKeyScanEx VkKeyScanExW #define MapVirtualKey MapVirtualKeyW #define MapVirtualKeyEx MapVirtualKeyExW +#define FindFirstVolumeMountPoint FindFirstVolumeMountPointW +#define FindNextVolume FindNextVolumeW #define LoadAccelerators LoadAcceleratorsW #define CreateAcceleratorTable CreateAcceleratorTableW #define CopyAcceleratorTable CopyAcceleratorTableW @@ -244,6 +251,7 @@ typedef PPROGRESS_ROUTINE LPPROGRESS_ROUTINE; #define DrawText DrawTextW #define DrawTextEx DrawTextExW #define GrayString GrayStringW +#define CreateJobObject CreateJobObjectW #define DrawState DrawStateW #define TabbedTextOut TabbedTextOutW #define GetTabbedTextExtent GetTabbedTextExtentW @@ -277,6 +285,8 @@ typedef PPROGRESS_ROUTINE LPPROGRESS_ROUTINE; #define GetEnvironmentStrings GetEnvironmentStringsW #define FreeEnvironmentStrings FreeEnvironmentStringsW #define lstrcmp lstrcmpW +#define GetRawInputDeviceInfo GetRawInputDeviceInfoW +#define BroadcastSystemMessageEx BroadcastSystemMessageExW #define lstrcmpi lstrcmpiW #define lstrcpyn lstrcpynW #define lstrcpy lstrcpyW @@ -285,6 +295,8 @@ typedef PPROGRESS_ROUTINE LPPROGRESS_ROUTINE; #define GetBinaryType GetBinaryTypeW #define GetShortPathName GetShortPathNameW #define SetFileSecurity SetFileSecurityW +#define CheckNameLegalDOS8Dot3 CheckNameLegalDOS8Dot3W +#define CreateHardLink CreateHardLinkW #define GetFileSecurity GetFileSecurityW #define FindFirstChangeNotification FindFirstChangeNotificationW #define AccessCheckAndAuditAlarm AccessCheckAndAuditAlarmW @@ -299,6 +311,8 @@ typedef PPROGRESS_ROUTINE LPPROGRESS_ROUTINE; #define ReportEvent ReportEventW #define CreateProcess CreateProcessW #define FatalAppExit FatalAppExitW +#define CallMessageFilter CallMessageFilterW +#define GetAltTabInfo GetAltTabInfoW #define GetStartupInfo GetStartupInfoW #define GetEnvironmentVariable GetEnvironmentVariableW #define GetCommandLine GetCommandLineW @@ -308,20 +322,24 @@ typedef PPROGRESS_ROUTINE LPPROGRESS_ROUTINE; #define FindResource FindResourceW #define FindResourceEx FindResourceExW #define EnumResourceTypes EnumResourceTypesW +#define CreateActCtx CreateActCtxW #define EnumResourceNames EnumResourceNamesW #define EnumResourceLanguages EnumResourceLanguagesW #define BeginUpdateResource BeginUpdateResourceW #define UpdateResource UpdateResourceW +#define PrivateExtractIcons PrivateExtractIconsW #define EndUpdateResource EndUpdateResourceW #define GlobalAddAtom GlobalAddAtomW #define GlobalFindAtom GlobalFindAtomW #define GlobalGetAtomName GlobalGetAtomNameW #define AddAtom AddAtomW +#define RemoveFontResourceEx RemoveFontResourceExW #define FindAtom FindAtomW #define GetAtomName GetAtomNameW #define GetProfileInt GetProfileIntW #define GetProfileString GetProfileStringW #define WriteProfileString WriteProfileStringW +#define ReadEventLog ReadEventLogW #define GetProfileSection GetProfileSectionW #define WriteProfileSection WriteProfileSectionW #define GetPrivateProfileInt GetPrivateProfileIntW @@ -331,6 +349,8 @@ typedef PPROGRESS_ROUTINE LPPROGRESS_ROUTINE; #define WritePrivateProfileSection WritePrivateProfileSectionW #define GetDriveType GetDriveTypeW #define GetSystemDirectory GetSystemDirectoryW +#define FindFirstFileEx FindFirstFileExW +#define FindFirstVolume FindFirstVolumeW #define GetTempPath GetTempPathW #define GetTempFileName GetTempFileNameW #define GetWindowsDirectory GetWindowsDirectoryW @@ -341,15 +361,24 @@ typedef PPROGRESS_ROUTINE LPPROGRESS_ROUTINE; #define CreateDirectory CreateDirectoryW #define CreateDirectoryEx CreateDirectoryExW #define RemoveDirectory RemoveDirectoryW +#define GetLongPathName GetLongPathNameW +#define GetModuleHandleEx GetModuleHandleExW #define GetFullPathName GetFullPathNameW #define DefineDosDevice DefineDosDeviceW #define QueryDosDevice QueryDosDeviceW +#define EnumLanguageGroupLocales EnumLanguageGroupLocalesW +#define EnumSystemLanguageGroups EnumSystemLanguageGroupsW #define CreateFile CreateFileW #define SetFileAttributes SetFileAttributesW #define GetFileAttributes GetFileAttributesW +#define EncryptFile EncryptFileW +#define FileEncryptionStatus FileEncryptionStatusW +#define GetFileAttributesEx GetFileAttributesExW #define GetCompressedFileSize GetCompressedFileSizeW #define DeleteFile DeleteFileW #define FindFirstFileEx FindFirstFileExW +#define SetFileShortName SetFileShortNameW +#define SetFirmwareEnvironmentVariable SetFirmwareEnvironmentVariableW #define FindFirstFile FindFirstFileW #define FindNextFile FindNextFileW #define SearchPath SearchPathW @@ -358,9 +387,11 @@ typedef PPROGRESS_ROUTINE LPPROGRESS_ROUTINE; #define MoveFile MoveFileW #define MoveFileEx MoveFileExW #define MoveFileWithProgress MoveFileWithProgressW +#define CreateFontIndirectEx CreateFontIndirectExW #define CreateNamedPipe CreateNamedPipeW #define GetNamedPipeHandleState GetNamedPipeHandleStateW #define CallNamedPipe CallNamedPipeW +#define IMPGetIME IMPGetIMEW #define WaitNamedPipe WaitNamedPipeW #define SetVolumeLabel SetVolumeLabelW #define GetVolumeInformation GetVolumeInformationW @@ -377,6 +408,8 @@ typedef PPROGRESS_ROUTINE LPPROGRESS_ROUTINE; #define GetLogicalDriveStrings GetLogicalDriveStringsW #define LoadLibrary LoadLibraryW #define LoadLibraryEx LoadLibraryExW +#define FindNextVolumeMountPoint FindNextVolumeMountPointW +#define GetComputerNameEx GetComputerNameExW #define GetModuleFileName GetModuleFileNameW #define GetModuleHandle GetModuleHandleW #define GetUserObjectInformation GetUserObjectInformationW @@ -384,22 +417,33 @@ typedef PPROGRESS_ROUTINE LPPROGRESS_ROUTINE; #define RegisterWindowMessage RegisterWindowMessageW #define GetMessage GetMessageW #define DispatchMessage DispatchMessageW +#define SendIMEMessageEx SendIMEMessageExW #define PeekMessage PeekMessageW #define SendMessage SendMessageW #define SendMessageTimeout SendMessageTimeoutW +#define IMPSetIME IMPSetIMEW +#define IMPQueryIME IMPQueryIMEW #define SendNotifyMessage SendNotifyMessageW #define SendMessageCallback SendMessageCallbackW +#define BackupEventLog BackupEventLogW +#define ClearEventLog ClearEventLogW #define PostMessage PostMessageW #define PostThreadMessage PostThreadMessageW +#define OpenBackupEventLog OpenBackupEventLogW +#define OpenEncryptedFileRaw OpenEncryptedFileRawW #define VerFindFile VerFindFileW #define VerInstallFile VerInstallFileW #define GetFileVersionInfoSize GetFileVersionInfoSizeW +#define GetStringBitmap GetStringBitmapW +#define GetGlyphIndices GetGlyphIndicesW #define GetFileVersionInfo GetFileVersionInfoW #define VerLanguageName VerLanguageNameW #define VerQueryValue VerQueryValueW #define CompareString CompareStringW #define LCMapString LCMapStringW #define GetLocaleInfo GetLocaleInfoW +#define GetDllDirectory GetDllDirectoryW +#define GetFirmwareEnvironmentVariable GetFirmwareEnvironmentVariableW #define SetLocaleInfo SetLocaleInfoW #define GetTimeFormat GetTimeFormatW #define GetDateFormat GetDateFormatW @@ -407,6 +451,8 @@ typedef PPROGRESS_ROUTINE LPPROGRESS_ROUTINE; #define GetCurrencyFormat GetCurrencyFormatW #define EnumCalendarInfo EnumCalendarInfoW #define EnumTimeFormats EnumTimeFormatsW +#define CreateProcessAsUser CreateProcessAsUserW +#define DecryptFile DecryptFileW #define FoldString FoldStringW #define EnumSystemCodePages EnumSystemCodePagesW #define EnumSystemLocales EnumSystemLocalesW @@ -426,7 +472,13 @@ typedef PPROGRESS_ROUTINE LPPROGRESS_ROUTINE; #define WriteConsoleOutputCharacter WriteConsoleOutputCharacterW #define FillConsoleOutputCharacter FillConsoleOutputCharacterW #define WNetGetProviderName WNetGetProviderNameW +#define SetCalendarInfo SetCalendarInfoW +#define EnumUILanguages EnumUILanguagesW +#define GetSystemWow64Directory GetSystemWow64DirectoryW +#define GetVolumeNameForVolumeMountPoint GetVolumeNameForVolumeMountPointW #define WNetGetNetworkInformation WNetGetNetworkInformationW +#define GetCurrentHwProfile GetCurrentHwProfileW +#define LogonUser LogonUserW #define WNetGetLastError WNetGetLastErrorW #define MultinetGetConnectionPerformance MultinetGetConnectionPerformanceW #define WNetConnectionDialog1 WNetConnectionDialog1W @@ -438,54 +490,87 @@ typedef PPROGRESS_ROUTINE LPPROGRESS_ROUTINE; #define WNetAddConnection WNetAddConnectionW #define WNetAddConnection2 WNetAddConnection2W #define WNetAddConnection3 WNetAddConnection3W +#define DnsHostnameToComputerName DnsHostnameToComputerNameW +#define FindActCtxSectionString FindActCtxSectionStringW #define WNetCancelConnection WNetCancelConnectionW +#define OpenEventLog OpenEventLogW #define WNetCancelConnection2 WNetCancelConnection2W #define WNetGetConnection WNetGetConnectionW #define WNetUseConnection WNetUseConnectionW #define WNetSetConnection WNetSetConnectionW #define CreateService CreateServiceW #define ChangeServiceConfig ChangeServiceConfigW +#define LogonUserEx LogonUserExW #define EnumDependentServices EnumDependentServicesW #define EnumServicesStatus EnumServicesStatusW #define GetServiceKeyName GetServiceKeyNameW +#define GetVolumePathName GetVolumePathNameW +#define GetVolumePathNamesForVolumeName GetVolumePathNamesForVolumeNameW #define GetServiceDisplayName GetServiceDisplayNameW #define OpenSCManager OpenSCManagerW +#define SetVolumeMountPoint SetVolumeMountPointW +#define VerifyVersionInfo VerifyVersionInfoW +#define RegisterDeviceNotification RegisterDeviceNotificationW #define OpenService OpenServiceW #define QueryServiceConfig QueryServiceConfigW #define QueryServiceLockStatus QueryServiceLockStatusW +#define GetGeoInfo GetGeoInfoW +#define EnumDateFormatsEx EnumDateFormatsExW #define RegisterServiceCtrlHandler RegisterServiceCtrlHandlerW #define StartServiceCtrlDispatcher StartServiceCtrlDispatcherW +#define EnumCalendarInfoEx EnumCalendarInfoExW +#define GetCalendarInfo GetCalendarInfoW #define StartService StartServiceW #define DragQueryFile DragQueryFileW +#define GetCPInfoEx GetCPInfoExW #define ExtractAssociatedIcon ExtractAssociatedIconW #define ExtractIcon ExtractIconW #define FindExecutable FindExecutableW +#define RegSaveKeyEx RegSaveKeyExW +#define InitiateSystemShutdownEx InitiateSystemShutdownExW #define ShellAbout ShellAboutW +#define DeleteVolumeMountPoint DeleteVolumeMountPointW #define ShellExecute ShellExecuteW #define DdeCreateStringHandle DdeCreateStringHandleW #define DdeInitialize DdeInitializeW #define DdeQueryString DdeQueryStringW -#define LogonUser LogonUserW +#define OpenJobObject OpenJobObjectW +#define ReplaceFile ReplaceFileW #define CreateProcessAsUser CreateProcessAsUserW +#define SHGetFileInfo SHGetFileInfoW +#define SetComputerNameEx SetComputerNameExW +#define SetDllDirectory SetDllDirectoryW +#define SHGetPathFromIDList SHGetPathFromIDListW /* ASCII */ #else #define RegConnectRegistry RegConnectRegistryA #define RegCreateKey RegCreateKeyA +#define InitiateSystemShutdownEx InitiateSystemShutdownExA #define RegCreateKeyEx RegCreateKeyExA #define RegDeleteKey RegDeleteKeyA #define RegDeleteValue RegDeleteValueA +#define EnumSystemLanguageGroups EnumSystemLanguageGroupsA +#define GetGeoInfo GetGeoInfoA #define RegEnumKey RegEnumKeyA #define RegEnumKeyEx RegEnumKeyExA +#define GetCalendarInfo GetCalendarInfoA +#define LogonUser LogonUserA +#define GetCPInfoEx GetCPInfoExA #define RegEnumValue RegEnumValueA #define RegLoadKey RegLoadKeyA #define RegOpenKey RegOpenKeyA #define RegOpenKeyEx RegOpenKeyExA +#define FileEncryptionStatus FileEncryptionStatusA +#define GetCurrentHwProfile GetCurrentHwProfileA +#define LogonUserEx LogonUserExA #define RegQueryInfoKey RegQueryInfoKeyA #define RegQueryValue RegQueryValueA #define RegQueryMultipleValues RegQueryMultipleValuesA #define RegQueryValueEx RegQueryValueExA +#define GetFirmwareEnvironmentVariable GetFirmwareEnvironmentVariableA +#define GetLongPathName GetLongPathNameA #define RegReplaceKey RegReplaceKeyA #define RegRestoreKey RegRestoreKeyA #define RegSaveKey RegSaveKeyA @@ -504,7 +589,24 @@ typedef PPROGRESS_ROUTINE LPPROGRESS_ROUTINE; #define DlgDirSelectComboBoxEx DlgDirSelectComboBoxExA #define DefFrameProc DefFrameProcA #define DefMDIChildProc DefMDIChildProcA +#define EnumUILanguages EnumUILanguagesA +#define EnumLanguageGroupLocales EnumLanguageGroupLocalesA #define CreateMDIWindow CreateMDIWindowA +#define FindNextVolume FindNextVolumeA +#define FindNextVolumeMountPoint FindNextVolumeMountPointA +#define GetComputerNameEx GetComputerNameExA +#define OpenEncryptedFileRaw OpenEncryptedFileRawA +#define OpenEventLog OpenEventLogA +#define VerifyVersionInfo VerifyVersionInfoA +#define SetFirmwareEnvironmentVariable SetFirmwareEnvironmentVariableA +#define SetVolumeMountPoint SetVolumeMountPointA +#define GetModuleHandleEx GetModuleHandleExA +#define GetSystemWow64Directory GetSystemWow64DirectoryA +#define GetVolumeNameForVolumeMountPoint GetVolumeNameForVolumeMountPointA +#define GetVolumePathNamesForVolumeName GetVolumePathNamesForVolumeNameA +#define OpenJobObject OpenJobObjectA +#define GetVolumePathName GetVolumePathNameA +#define GetDllDirectory GetDllDirectoryA #define WinHelp WinHelpA #define ChangeDisplaySettings ChangeDisplaySettingsA #define EnumDisplaySettings EnumDisplaySettingsA @@ -517,14 +619,24 @@ typedef PPROGRESS_ROUTINE LPPROGRESS_ROUTINE; #define FindWindowEx FindWindowExA #define GetClassName GetClassNameA #define SetWindowsHookEx SetWindowsHookExA +#define SetWindowsHook SetWindowsHookA #define LoadBitmap LoadBitmapA #define LoadCursor LoadCursorA #define LoadCursorFromFile LoadCursorFromFileA +#define ReadEventLog ReadEventLogA +#define ReplaceFile ReplaceFileA +#define SetDllDirectory SetDllDirectoryA +#define EnumDateFormatsEx EnumDateFormatsExA +#define EnumCalendarInfoEx EnumCalendarInfoExA +#define SetFileShortName SetFileShortNameA +#define SetComputerNameEx SetComputerNameExA #define SetProp SetPropA #define GetProp GetPropA #define RemoveProp RemovePropA #define EnumPropsEx EnumPropsExA #define EnumProps EnumPropsA +#define CreateHardLink CreateHardLinkA +#define CreateJobObject CreateJobObjectA #define SetWindowText SetWindowTextA #define GetWindowText GetWindowTextA #define GetWindowTextLength GetWindowTextLengthA @@ -546,6 +658,8 @@ typedef PPROGRESS_ROUTINE LPPROGRESS_ROUTINE; #define GetCharWidth GetCharWidthA #define GetCharWidth32 GetCharWidth32A #define GetCharWidthFloat GetCharWidthFloatA +#define FindFirstVolume FindFirstVolumeA +#define FindFirstVolumeMountPoint FindFirstVolumeMountPointA #define GetCharABCWidths GetCharABCWidthsA #define GetCharABCWidthsFloat GetCharABCWidthsFloatA #define GetGlyphOutline GetGlyphOutlineA @@ -572,6 +686,8 @@ typedef PPROGRESS_ROUTINE LPPROGRESS_ROUTINE; #define GetLogColorSpace GetLogColorSpaceA #define CreateColorSpace CreateColorSpaceA #define GetICMProfile GetICMProfileA +#define DecryptFile DecryptFileA +#define EncryptFile EncryptFileA #define SetICMProfile SetICMProfileA #define UpdateICMRegKey UpdateICMRegKeyA #define EnumICMProfiles EnumICMProfilesA @@ -583,6 +699,7 @@ typedef PPROGRESS_ROUTINE LPPROGRESS_ROUTINE; #define GetOpenFileName GetOpenFileNameA #define GetSaveFileName GetSaveFileNameA #define GetFileTitle GetFileTitleA +#define IMPSetIME IMPSetIMEA #define ChooseColor ChooseColorA #define FindText FindTextA #define ReplaceText ReplaceTextA @@ -591,9 +708,12 @@ typedef PPROGRESS_ROUTINE LPPROGRESS_ROUTINE; #define PageSetupDlg PageSetupDlgA #define DefWindowProc DefWindowProcA #define CallWindowProc CallWindowProcA +#define GetGlyphIndices GetGlyphIndicesA +#define CreateFontIndirectEx CreateFontIndirectExA #define RegisterClass RegisterClassA #define UnregisterClass UnregisterClassA #define GetClassInfo GetClassInfoA +#define CreateActCtx CreateActCtxA #define RegisterClassEx RegisterClassExA #define GetClassInfoEx GetClassInfoExA #define CreateWindowEx CreateWindowExA @@ -606,13 +726,14 @@ typedef PPROGRESS_ROUTINE LPPROGRESS_ROUTINE; #define DialogBoxParam DialogBoxParamA #define DialogBoxIndirectParam DialogBoxIndirectParamA #define DialogBox DialogBoxA +#define ClearEventLog ClearEventLogA +#define CreateProcessAsUser CreateProcessAsUserA #define DialogBoxIndirect DialogBoxIndirectA #define RegisterClipboardFormat RegisterClipboardFormatA #define SetDlgItemText SetDlgItemTextA #define GetDlgItemText GetDlgItemTextA #define SendDlgItemMessage SendDlgItemMessageA #define DefDlgProc DefDlgProcA -#define CallMsgFilter CallMsgFilterA #define GetClipboardFormatName GetClipboardFormatNameA #define CharToOem CharToOemA #define OemToChar OemToCharA @@ -630,6 +751,8 @@ typedef PPROGRESS_ROUTINE LPPROGRESS_ROUTINE; #define IsCharLower IsCharLowerA #define GetKeyNameText GetKeyNameTextA #define VkKeyScan VkKeyScanA +#define RegisterDeviceNotification RegisterDeviceNotificationA +#define GetRawInputDeviceInfo GetRawInputDeviceInfoA #define VkKeyScanEx VkKeyScanExA #define MapVirtualKey MapVirtualKeyA #define MapVirtualKeyEx MapVirtualKeyExA @@ -648,6 +771,7 @@ typedef PPROGRESS_ROUTINE LPPROGRESS_ROUTINE; #define GetMenuItemInfo GetMenuItemInfoA #define SetMenuItemInfo SetMenuItemInfoA #define DrawText DrawTextA +#define BroadcastSystemMessageEx BroadcastSystemMessageExA #define DrawTextEx DrawTextExA #define GrayString GrayStringA #define DrawState DrawStateA @@ -656,7 +780,9 @@ typedef PPROGRESS_ROUTINE LPPROGRESS_ROUTINE; #define GetVersionEx GetVersionExA #define wvsprintf wvsprintfA #define wsprintf wsprintfA +#define FindActCtxSectionString FindActCtxSectionStringA #define LoadKeyboardLayout LoadKeyboardLayoutA +#define FindFirstFileEx FindFirstFileExA #define GetKeyboardLayoutName GetKeyboardLayoutNameA #define CreateDesktop CreateDesktopA #define OpenDesktop OpenDesktopA @@ -679,7 +805,11 @@ typedef PPROGRESS_ROUTINE LPPROGRESS_ROUTINE; #define SetComputerName SetComputerNameA #define GetUserName GetUserNameA #define CreateMailslot CreateMailslotA +#define CallMessageFilter CallMessageFilterA +#define GetAltTabInfo GetAltTabInfoA +#define BackupEventLog BackupEventLogA #define FormatMessage FormatMessageA +#define CheckNameLegalDOS8Dot3 CheckNameLegalDOS8Dot3A #define GetEnvironmentStrings GetEnvironmentStringsA #define FreeEnvironmentStrings FreeEnvironmentStringsA #define lstrcmp lstrcmpA @@ -689,6 +819,7 @@ typedef PPROGRESS_ROUTINE LPPROGRESS_ROUTINE; #define lstrcat lstrcatA #define lstrlen lstrlenA #define GetBinaryType GetBinaryTypeA +#define GetStringBitmap GetStringBitmapA #define GetShortPathName GetShortPathNameA #define SetFileSecurity SetFileSecurityA #define GetFileSecurity GetFileSecurityA @@ -698,6 +829,8 @@ typedef PPROGRESS_ROUTINE LPPROGRESS_ROUTINE; #define ObjectPrivilegeAuditAlarm ObjectPrivilegeAuditAlarmA #define ObjectCloseAuditAlarm ObjectCloseAuditAlarmA #define PrivilegedServiceAuditAlarm PrivilegedServiceAuditAlarmA +#define DeleteVolumeMountPoint DeleteVolumeMountPointA +#define DnsHostnameToComputerName DnsHostnameToComputerNameA #define OpenEventLog OpenEventLogA #define RegisterEventSource RegisterEventSourceA #define OpenBackupEventLog OpenBackupEventLogA @@ -705,6 +838,7 @@ typedef PPROGRESS_ROUTINE LPPROGRESS_ROUTINE; #define ReportEvent ReportEventA #define CreateProcess CreateProcessA #define FatalAppExit FatalAppExitA +#define RemoveFontResourceEx RemoveFontResourceExA #define GetStartupInfo GetStartupInfoA #define GetCommandLine GetCommandLineA #define GetEnvironmentVariable GetEnvironmentVariableA @@ -753,6 +887,7 @@ typedef PPROGRESS_ROUTINE LPPROGRESS_ROUTINE; #define CreateFile CreateFileA #define SetFileAttributes SetFileAttributesA #define GetFileAttributes GetFileAttributesA +#define GetFileAttributesEx GetFileAttributesExA #define GetCompressedFileSize GetCompressedFileSizeA #define DeleteFile DeleteFileA #define FindFirstFileEx FindFirstFileExA @@ -786,6 +921,7 @@ typedef PPROGRESS_ROUTINE LPPROGRESS_ROUTINE; #define GetModuleFileName GetModuleFileNameA #define GetModuleHandle GetModuleHandleA #define GetUserObjectInformation GetUserObjectInformationA +#define PrivateExtractIcons PrivateExtractIconsA #define SetUserObjectInformation SetUserObjectInformationA #define RegisterWindowMessage RegisterWindowMessageA #define GetMessage GetMessageA @@ -817,11 +953,19 @@ typedef PPROGRESS_ROUTINE LPPROGRESS_ROUTINE; #define EnumSystemCodePages EnumSystemCodePagesA #define EnumSystemLocales EnumSystemLocalesA #define GetStringTypeEx GetStringTypeExA +#define SetCalendarInfo SetCalendarInfoA #define EnumDateFormats EnumDateFormatsA #define GetConsoleTitle GetConsoleTitleA #define ScrollConsoleScreenBuffer ScrollConsoleScreenBufferA #define SetConsoleTitle SetConsoleTitleA #define ReadConsole ReadConsoleA +#define RegisterServiceCtrlHandlerEx RegisterServiceCtrlHandlerExA +#define QueryServiceConfig2 QueryServiceConfig2A +#define EnumServicesStatusEx EnumServicesStatusExA +#define ChangeServiceConfig2 ChangeServiceConfig2A +#define SendIMEMessageEx SendIMEMessageExA +#define IMPQueryIME IMPQueryIMEA +#define IMPGetIME IMPGetIMEA #define WriteConsole WriteConsoleA #define PeekConsoleInput PeekConsoleInputA #define ReadConsoleInput ReadConsoleInputA @@ -864,48 +1008,3896 @@ typedef PPROGRESS_ROUTINE LPPROGRESS_ROUTINE; #define OpenSCManager OpenSCManagerA #define DragQueryFile DragQueryFileA #define ExtractAssociatedIcon ExtractAssociatedIconA +#define RegSaveKeyEx RegSaveKeyExA #define ExtractIcon ExtractIconA +#define FindFirstVolumeMountPoint FindFirstVolumeMountPointA #define FindExecutable FindExecutableA #define ShellAbout ShellAboutA #define ShellExecute ShellExecuteA #define DdeCreateStringHandle DdeCreateStringHandleA #define DdeInitialize DdeInitializeA #define DdeQueryString DdeQueryStringA -#define LogonUser LogonUserA #define CreateProcessAsUser CreateProcessAsUserA +#define OpenBackupEventLog OpenBackupEventLogA +#define SHGetFileInfo SHGetFileInfoA +#define SHGetPathFromIDList SHGetPathFromIDListA + +#endif /* UNICODE and ASCII defines */ +#endif /* _DISABLE_TIDENTS */ + +NTSTATUS STDCALL CreateNlsSecurityDescriptor(PSECURITY_DESCRIPTOR SecurityDescriptor,ULONG Size,ULONG AccessMask); + +BOOL STDCALL GetConsoleInputExeNameA(ULONG length,LPCSTR name); + +BOOL STDCALL GetConsoleInputExeNameW(ULONG length,LPCWSTR name); + +BOOL STDCALL IsValidUILanguage(LANGID langid); + +VOID STDCALL NlsConvertIntegerToString(ULONG Value,ULONG Base,ULONG strsize, LPWSTR str, ULONG strsize2); + +UINT STDCALL SetCPGlobal(UINT CodePage); + +BOOL +STDCALL +SetClientTimeZoneInformation( + CONST TIME_ZONE_INFORMATION *lpTimeZoneInformation + ); + +NTSTATUS STDCALL DbgUiDebugActiveProcess(HANDLE process); + +NTSTATUS STDCALL DbgUiStopDebugging(HANDLE process); + +VOID +STDCALL +RtlInitializeSListHead ( + PSLIST_HEADER ListHead + ); +PSLIST_ENTRY +STDCALL +RtlInterlockedFlushSList ( + PSLIST_HEADER ListHead + ); +PSLIST_ENTRY +STDCALL +RtlInterlockedPopEntrySList ( + PSLIST_HEADER ListHead + ); +PSLIST_ENTRY +STDCALL +RtlInterlockedPushEntrySList ( + PSLIST_HEADER ListHead, + PSLIST_ENTRY ListEntry + ); +USHORT +STDCALL +RtlQueryDepthSList ( + PSLIST_HEADER ListHead + ); +NTSTATUS +STDCALL +RtlCreateTimer(HANDLE TimerQueue,PHANDLE phNewTimer, WAITORTIMERCALLBACK Callback,PVOID Parameter,DWORD DueTime,DWORD Period,ULONG Flags); + +NTSTATUS +STDCALL +RtlCreateTimerQueue(PHANDLE TimerQueue); + +NTSTATUS +STDCALL +RtlDeleteTimer(HANDLE TimerQueue,HANDLE Timer,HANDLE CompletionEvent); + +NTSTATUS +STDCALL +RtlUpdateTimer(HANDLE TimerQueue,HANDLE Timer,ULONG DueTime,ULONG Period); + +NTSTATUS +STDCALL +RtlDeleteTimerQueueEx(HANDLE TimerQueue,HANDLE CompletionEvent); + +NTSTATUS +STDCALL +RtlDeleteTimerQueue(HANDLE TimerQueue); + +NTSTATUS +STDCALL +RtlRegisterWait(PHANDLE hOutput, HANDLE hObject,WAITORTIMERCALLBACK Callback,PVOID Context,ULONG dwMilliseconds,ULONG dwFlags); + +NTSTATUS +STDCALL +RtlDeregisterWait( + HANDLE WaitHandle + ); + +NTSTATUS +STDCALL +RtlDeregisterWaitEx( + HANDLE WaitHandle, + HANDLE CompletionEvent + ); + +NTSTATUS +STDCALL +RtlSetHeapInformation( + HANDLE HeapHandle, + HEAP_INFORMATION_CLASS HeapInformationClass, + PVOID HeapInformation OPTIONAL, + SIZE_T HeapInformationLength OPTIONAL + ); + +NTSTATUS +STDCALL +RtlQueryHeapInformation( + HANDLE HeapHandle, + HEAP_INFORMATION_CLASS HeapInformationClass, + PVOID HeapInformation OPTIONAL, + SIZE_T HeapInformationLength OPTIONAL, + PSIZE_T ReturnLength OPTIONAL + ); + +NTSTATUS +STDCALL +NtCreateJobSet( + ULONG NumJob, + PJOB_SET_ARRAY UserJobSet, + ULONG Flags); + +NTSTATUS +STDCALL +ZwCreateJobSet( + ULONG NumJob, + PJOB_SET_ARRAY UserJobSet, + ULONG Flags); + +VOID +STDCALL +RtlReleaseActivationContext( + HANDLE hActCtx + ); + +NTSTATUS +STDCALL +RtlQueryInformationActivationContext( + DWORD dwFlags, + HANDLE hActCtx, + PVOID pvSubInstance, + ULONG ulInfoClass, + PVOID pvBuffer, + SIZE_T cbBuffer OPTIONAL, + SIZE_T *pcbWrittenOrRequired OPTIONAL + ); + +VOID +STDCALL +RtlAddRefActivationContext( + HANDLE hActCtx + ); + +NTSTATUS +STDCALL +RtlGetActiveActivationContext( + HANDLE *lphActCtx); + +NTSTATUS +STDCALL +RtlZombifyActivationContext( + HANDLE hActCtx + ); + +NTSTATUS +STDCALL +RtlDeactivateActivationContext( + DWORD dwFlags, + ULONG_PTR ulCookie + ); + +ULONG +STDCALL +RtlCreateTagHeap( + IN HANDLE HeapHandle, + IN ULONG Flags, + IN PCWSTR TagName, + IN PCWSTR TagSubName + ); + +PRTL_SPLAY_LINKS +STDCALL +RtlDelete( + IN PRTL_SPLAY_LINKS Links + ); + +BOOLEAN +STDCALL +RtlDeleteElementGenericTable( + IN PRTL_GENERIC_TABLE Table, + IN PVOID Buffer + ); + +VOID +STDCALL +RtlDeleteNoSplay( + IN PRTL_SPLAY_LINKS Links, + OUT PRTL_SPLAY_LINKS *Root + ); + +PVOID +STDCALL +RtlEnumerateGenericTable( + IN PRTL_GENERIC_TABLE Table, + IN BOOLEAN Restart + ); + +PVOID +STDCALL +RtlEnumerateGenericTableWithoutSplaying( + IN PRTL_GENERIC_TABLE Table, + IN PVOID *RestartKey + ); + +VOID +STDCALL +RtlGetElementGenericTable( + IN PRTL_GENERIC_TABLE Table, + IN ULONG I + ); + +PVOID +STDCALL +RtlLookupElementGenericTable( + IN PRTL_GENERIC_TABLE Table, + IN PVOID Buffer + ); + +PVOID +STDCALL +RtlProtectHeap( + IN HANDLE Heap, + IN BOOLEAN ReadOnly + ); + +PCWSTR +STDCALL +RtlQueryTagHeap( + IN HANDLE HeapHandle, + IN ULONG Flags, + IN USHORT TagNumber, + IN BOOLEAN ZeroInternalTagInfo, + OUT PRTL_HEAP_TAG_INFO HeapTagInfo OPTIONAL + ); + +PRTL_SPLAY_LINKS +STDCALL +RtlRealPredecessor( + IN PRTL_SPLAY_LINKS Links + ); + +PRTL_SPLAY_LINKS +STDCALL +RtlRealSuccessor( + IN PRTL_SPLAY_LINKS Links + ); + +PRTL_SPLAY_LINKS +STDCALL +RtlSplay( + IN PRTL_SPLAY_LINKS Links + ); + +NTSTATUS +STDCALL +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 + ); + +NTSTATUS +STDCALL +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 + ); + +NTSTATUS +STDCALL +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 + ); + +NTSTATUS +STDCALL +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 + ); + +NTSTATUS +STDCALL +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 + ); + +NTSTATUS +STDCALL +NtAllocateUserPhysicalPages( + IN HANDLE ProcessHandle, + IN PULONG NumberOfPages, + OUT PULONG PageFrameNumbers + ); + +NTSTATUS +STDCALL +NtAreMappedFilesTheSame( + IN PVOID Address1, + IN PVOID Address2 + ); + +NTSTATUS +STDCALL +NtCreateJobObject( + OUT PHANDLE JobHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes + ); + +NTSTATUS +STDCALL +NtCreateKeyedEvent( + OUT PHANDLE KeyedEventHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes, + ULONG Reserved + ); + +NTSTATUS +STDCALL +NtFilterToken( + IN HANDLE ExistingTokenHandle, + IN ULONG Flags, + IN PTOKEN_GROUPS SidsToDisable, + IN PTOKEN_PRIVILEGES PrivilegesToDelete, + IN PTOKEN_GROUPS SidsToRestricted, + OUT PHANDLE NewTokenHandle + ); + +NTSTATUS +STDCALL +NtFreeUserPhysicalPages( + IN HANDLE ProcessHandle, + IN OUT PULONG NumberOfPages, + IN PULONG PageFrameNumbers + ); + +NTSTATUS +STDCALL +NtGetWriteWatch( + IN HANDLE ProcessHandle, + IN ULONG Flags, + IN PVOID BaseAddress, + IN ULONG RegionSize, + OUT PULONG Buffer, + IN OUT PULONG BufferEntries, + OUT PULONG Granularity + ); + +NTSTATUS +STDCALL +NtImpersonateAnonymousToken( + IN HANDLE ThreadHandle + ); + +NTSTATUS +STDCALL +NtIsProcessInJob( + IN HANDLE JobHandle, + IN HANDLE ProcessHandle + ); + +NTSTATUS +STDCALL +NtMakePermanentObject( + IN HANDLE Object + ); + +NTSTATUS +STDCALL +NtMapUserPhysicalPages( + IN PVOID BaseAddress, + IN PULONG NumberOfPages, + IN PULONG PageFrameNumbers + ); + +NTSTATUS +STDCALL +NtMapUserPhysicalPagesScatter( + IN PVOID *BaseAddresses, + IN PULONG NumberOfPages, + IN PULONG PageFrameNumbers + ); + +NTSTATUS +STDCALL +NtOpenJobObject( + OUT PHANDLE JobHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes + ); + +NTSTATUS +STDCALL +NtOpenKeyedEvent( + OUT PHANDLE KeyedEventHandle, + IN PACCESS_MASK DesiredAccess, + IN PUNICODE_STRING KeyedEventName + ); + +NTSTATUS +STDCALL +NtOpenProcessTokenEx( + IN HANDLE ProcessHandle, + IN ACCESS_MASK DesiredAccess, + IN ULONG HandleAttributes, + OUT PHANDLE TokenHandle + ); + +NTSTATUS +STDCALL +NtOpenThreadTokenEx( + IN HANDLE ThreadHandle, + IN ACCESS_MASK DesiredAccess, + IN BOOLEAN OpenAsSelf, + IN ULONG HandleAttributes, + OUT PHANDLE TokenHandle + ); + +NTSTATUS +STDCALL +NtQueryDefaultUILanguage( + OUT PLANGID LanguageId + ); + +NTSTATUS +STDCALL +NtQueryInformationJobObject( + IN HANDLE JobHandle, + IN JOBOBJECTINFOCLASS JobInformationClass, + OUT PVOID JobInformation, + IN ULONG JobInformationLength, + OUT PULONG ReturnLength OPTIONAL + ); + +NTSTATUS +STDCALL +NtQueryInstallUILanguage( + OUT PLANGID LanguageId + ); + +ULONG +STDCALL +NtQueryPortInformationProcess( + VOID + ); + +NTSTATUS +STDCALL +NtReleaseKeyedEvent( + IN HANDLE KeyedEventHandle, + IN ULONG Requested, + IN BOOLEAN Alertable, + IN PLARGE_INTEGER Timeout OPTIONAL + ); + +NTSTATUS +STDCALL +NtReplyWaitReceivePortEx( + IN HANDLE PortHandle, + OUT PULONG PortIdentifier OPTIONAL, + IN PPORT_MESSAGE ReplyMessage OPTIONAL, + OUT PPORT_MESSAGE Message, + IN PLARGE_INTEGER Timeout + ); + +NTSTATUS +STDCALL +NtResetWriteWatch( + IN HANDLE ProcessHandle, + IN PVOID BaseAddress, + IN ULONG RegionSize + ); + +NTSTATUS +STDCALL +NtResumeProcess( + IN HANDLE Process + ); + +NTSTATUS +STDCALL +NtSecureConnectPort( + OUT PHANDLE PortHandle, + IN PUNICODE_STRING PortName, + IN PSECURITY_QUALITY_OF_SERVICE SecurityQos, + IN OUT PPORT_SECTION_WRITE WriteSection OPTIONAL, + IN PSID ServerSid OPTIONAL, + IN OUT PPORT_SECTION_READ ReadSection OPTIONAL, + OUT PULONG MaxMessageSize OPTIONAL, + IN OUT PVOID ConnectData OPTIONAL, + IN OUT PULONG ConnectDataLength OPTIONAL + ); + +NTSTATUS +STDCALL +NtSetDefaultUILanguage( + IN LANGID LanguageId + ); + +NTSTATUS +STDCALL +NtSetHighWaitLowThread( + VOID + ); + +NTSTATUS +STDCALL +NtSetInformationJobObject( + IN HANDLE JobHandle, + IN JOBOBJECTINFOCLASS JobInformationClass, + IN PVOID JobInformation, + IN ULONG JobInformationLength + ); + +NTSTATUS +STDCALL +NtSetLowWaitHighThread( + VOID + ); + +NTSTATUS +STDCALL +NtSetQuotaInformationFile( + IN HANDLE FileHandle, + OUT PIO_STATUS_BLOCK IoStatusBlock, + IN PFILE_USER_QUOTA_INFORMATION Buffer, + IN ULONG BufferLength + ); + +NTSTATUS +STDCALL +NtSetUuidSeed( + IN PUCHAR UuidSeed + ); + +NTSTATUS +STDCALL +NtSuspendProcess( + IN HANDLE Process + ); + +NTSTATUS +STDCALL +NtTerminateJobObject( + IN HANDLE JobHandle, + IN NTSTATUS ExitStatus + ); + +NTSTATUS +STDCALL +NtWaitForKeyedEvent( + IN HANDLE KeyedEventHandle, + IN ULONG Requested, + IN BOOLEAN Alertable, + IN PLARGE_INTEGER Timeout OPTIONAL + ); + +BOOLEAN +STDCALL +RtlDllShutdownInProgress( + VOID + ); + +PPEB +STDCALL +RtlGetCurrentPeb( + VOID + ); + +NTSTATUS +STDCALL +RtlGetLastNtStatus( + VOID + ); + +ULONG +STDCALL +RtlGetLastWin32Error( + VOID + ); + +NTSTATUS +STDCALL +RtlGetNativeSystemInformation( + IN SYSTEM_INFORMATION_CLASS SystemInformationClass, + IN OUT PVOID SystemInformation, + IN ULONG SystemInformationLength, + OUT PULONG ReturnLength OPTIONAL + ); + +USHORT +STDCALL +RtlLogStackBackTrace( + VOID + ); + +NTSTATUS +STDCALL +RtlQueueWorkItem( + LPTHREAD_START_ROUTINE Function, + PVOID Context, + ULONG Flags + ); + +VOID +STDCALL +RtlRestoreLastWin32Error( + IN ULONG Win32Error + ); + +ULONG +STDCALL +RtlSetCriticalSectionSpinCount( + IN PRTL_CRITICAL_SECTION CriticalSection + ); + +typedef +VOID +(CALLBACK *POVERLAPPED_COMPLETION_ROUTINE)( + DWORD dwErrorCode, + DWORD dwNumberOfBytesTransfered, + LPOVERLAPPED lpOverlapped + ); + + +NTSTATUS +STDCALL +RtlSetIoCompletionCallback( + IN HANDLE FileHandle, + IN POVERLAPPED_COMPLETION_ROUTINE CompletionRoutine, + IN ULONG Flags + ); + +VOID +STDCALL +RtlSetLastWin32Error( + IN ULONG Win32Error + ); + +VOID +STDCALL +RtlSetLastWin32ErrorAndNtStatusFromNtStatus( + IN NTSTATUS NtStatus + ); + +NTSTATUS +STDCALL +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 + ); + +NTSTATUS +STDCALL +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 + ); + +NTSTATUS +STDCALL +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 + ); + +NTSTATUS +STDCALL +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 + ); + +NTSTATUS +STDCALL +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 + ); + +NTSTATUS +STDCALL +ZwAllocateUserPhysicalPages( + IN HANDLE ProcessHandle, + IN PULONG NumberOfPages, + OUT PULONG PageFrameNumbers + ); + +NTSTATUS +STDCALL +ZwAreMappedFilesTheSame( + IN PVOID Address1, + IN PVOID Address2 + ); + +NTSTATUS +STDCALL +ZwAssignProcessToJobObject( + IN HANDLE JobHandle, + IN HANDLE ProcessHandle + ); + +NTSTATUS +STDCALL +ZwCreateJobObject( + OUT PHANDLE JobHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes + ); + +NTSTATUS +STDCALL +ZwCreateKeyedEvent( + OUT PHANDLE KeyedEventHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes, + ULONG Reserved + ); + +NTSTATUS +STDCALL +ZwCreateWaitablePort( + OUT PHANDLE PortHandle, + IN POBJECT_ATTRIBUTES ObjectAttributes, + IN ULONG MaxDataSize, + IN ULONG MaxMessageSize, + IN ULONG Reserved + ); + +NTSTATUS +STDCALL +ZwFilterToken( + IN HANDLE ExistingTokenHandle, + IN ULONG Flags, + IN PTOKEN_GROUPS SidsToDisable, + IN PTOKEN_PRIVILEGES PrivilegesToDelete, + IN PTOKEN_GROUPS SidsToRestricted, + OUT PHANDLE NewTokenHandle + ); + +NTSTATUS +STDCALL +ZwFreeUserPhysicalPages( + IN HANDLE ProcessHandle, + IN OUT PULONG NumberOfPages, + IN PULONG PageFrameNumbers + ); + +NTSTATUS +STDCALL +ZwGetWriteWatch( + IN HANDLE ProcessHandle, + IN ULONG Flags, + IN PVOID BaseAddress, + IN ULONG RegionSize, + OUT PULONG Buffer, + IN OUT PULONG BufferEntries, + OUT PULONG Granularity + ); + +NTSTATUS +STDCALL +ZwImpersonateAnonymousToken( + IN HANDLE ThreadHandle + ); + +NTSTATUS +STDCALL +ZwIsProcessInJob( + IN HANDLE JobHandle, + IN HANDLE ProcessHandle + ); + +NTSTATUS +STDCALL +ZwMakePermanentObject( + IN HANDLE Object + ); + +NTSTATUS +STDCALL +ZwMapUserPhysicalPages( + IN PVOID BaseAddress, + IN PULONG NumberOfPages, + IN PULONG PageFrameNumbers + ); + +NTSTATUS +STDCALL +ZwMapUserPhysicalPagesScatter( + IN PVOID *BaseAddresses, + IN PULONG NumberOfPages, + IN PULONG PageFrameNumbers + ); + +NTSTATUS +STDCALL +ZwOpenJobObject( + OUT PHANDLE JobHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes + ); + +NTSTATUS +STDCALL +ZwOpenKeyedEvent( + OUT PHANDLE KeyedEventHandle, + IN PACCESS_MASK DesiredAccess, + IN PUNICODE_STRING KeyedEventName + ); + +NTSTATUS +STDCALL +ZwOpenProcessTokenEx( + IN HANDLE ProcessHandle, + IN ACCESS_MASK DesiredAccess, + IN ULONG HandleAttributes, + OUT PHANDLE TokenHandle + ); + +NTSTATUS +STDCALL +ZwOpenThreadTokenEx( + IN HANDLE ThreadHandle, + IN ACCESS_MASK DesiredAccess, + IN BOOLEAN OpenAsSelf, + IN ULONG HandleAttributes, + OUT PHANDLE TokenHandle + ); + +NTSTATUS +STDCALL +ZwQueryDefaultUILanguage( + OUT PLANGID LanguageId + ); + +NTSTATUS +STDCALL +ZwQueryInformationJobObject( + IN HANDLE JobHandle, + IN JOBOBJECTINFOCLASS JobInformationClass, + OUT PVOID JobInformation, + IN ULONG JobInformationLength, + OUT PULONG ReturnLength OPTIONAL + ); + +NTSTATUS +STDCALL +ZwQueryInstallUILanguage( + OUT PLANGID LanguageId + ); + +ULONG +STDCALL +ZwQueryPortInformationProcess( + VOID + ); + +NTSTATUS +STDCALL +ZwQueryQuotaInformationFile( + IN HANDLE FileHandle, + OUT PIO_STATUS_BLOCK IoStatusBlock, + OUT PFILE_USER_QUOTA_INFORMATION Buffer, + IN ULONG BufferLength, + IN BOOLEAN ReturnSingleEntry, + IN PFILE_QUOTA_LIST_INFORMATION QuotaList OPTIONAL, + IN ULONG QuotaListLength, + IN PSID ResumeSid OPTIONAL, + IN BOOLEAN RestartScan + ); + +NTSTATUS +STDCALL +ZwReleaseKeyedEvent( + IN HANDLE KeyedEventHandle, + IN ULONG Requested, + IN BOOLEAN Alertable, + IN PLARGE_INTEGER Timeout OPTIONAL + ); + +NTSTATUS +STDCALL +ZwReplyWaitReceivePortEx( + IN HANDLE PortHandle, + OUT PULONG PortIdentifier OPTIONAL, + IN PPORT_MESSAGE ReplyMessage OPTIONAL, + OUT PPORT_MESSAGE Message, + IN PLARGE_INTEGER Timeout + ); + +NTSTATUS +STDCALL +ZwResetWriteWatch( + IN HANDLE ProcessHandle, + IN PVOID BaseAddress, + IN ULONG RegionSize + ); + +NTSTATUS +STDCALL +ZwResumeProcess( + IN HANDLE Process + ); + +NTSTATUS +STDCALL +ZwSecureConnectPort( + OUT PHANDLE PortHandle, + IN PUNICODE_STRING PortName, + IN PSECURITY_QUALITY_OF_SERVICE SecurityQos, + IN OUT PPORT_SECTION_WRITE WriteSection OPTIONAL, + IN PSID ServerSid OPTIONAL, + IN OUT PPORT_SECTION_READ ReadSection OPTIONAL, + OUT PULONG MaxMessageSize OPTIONAL, + IN OUT PVOID ConnectData OPTIONAL, + IN OUT PULONG ConnectDataLength OPTIONAL + ); + +NTSTATUS +STDCALL +ZwSetDefaultUILanguage( + IN LANGID LanguageId + ); + +NTSTATUS +STDCALL +ZwSetHighWaitLowThread( + VOID + ); + +NTSTATUS +STDCALL +ZwSetInformationJobObject( + IN HANDLE JobHandle, + IN JOBOBJECTINFOCLASS JobInformationClass, + IN PVOID JobInformation, + IN ULONG JobInformationLength + ); + +NTSTATUS +STDCALL +ZwSetLowWaitHighThread( + VOID + ); + +NTSTATUS +STDCALL +ZwSetQuotaInformationFile( + IN HANDLE FileHandle, + OUT PIO_STATUS_BLOCK IoStatusBlock, + IN PFILE_USER_QUOTA_INFORMATION Buffer, + IN ULONG BufferLength + ); + +NTSTATUS +STDCALL +ZwSetUuidSeed( + IN PUCHAR UuidSeed + ); + +NTSTATUS +STDCALL +ZwSuspendProcess( + IN HANDLE Process + ); + +NTSTATUS +STDCALL +ZwTerminateJobObject( + IN HANDLE JobHandle, + IN NTSTATUS ExitStatus + ); + +NTSTATUS +STDCALL +ZwWaitForKeyedEvent( + IN HANDLE KeyedEventHandle, + IN ULONG Requested, + IN BOOLEAN Alertable, + IN PLARGE_INTEGER Timeout OPTIONAL + ); +DWORD +STDCALL +GetAppCompatFlags2(HTASK hTask); +VOID STDCALL InitializeLpkHooks(FARPROC *hookfuncs); +BOOL STDCALL EnterReaderModeHelper(HWND hwnd); +BOOL STDCALL CtxInitUser32(VOID); +BOOL STDCALL ReasonCodeNeedsBugID(ULONG reasoncode); +BOOL STDCALL ReasonCodeNeedsComment(ULONG reasoncode); +int +STDCALL +MessageBoxTimeoutW( + HWND hWnd, + LPCWSTR lpText, + LPCWSTR lpCaption, + UINT uType, + WORD wLanguageId, + DWORD dwTime); + +int +STDCALL +MessageBoxTimeoutA( + HWND hWnd, + LPCSTR lpText, + LPCSTR lpCaption, + UINT uType, + WORD wLanguageId, + DWORD dwTime); +BOOL STDCALL DisplayExitWindowsWarnings(ULONG flags); +FARPROC STDCALL DelayLoadFailureHook(unsigned int dliNotify, PDelayLoadInfo pdli); +VOID STDCALL WEP(); +DWORD STDCALL RtlDeleteSecurityObject(DWORD x1); +DWORD STDCALL RtlNewSecurityObject(DWORD x1,DWORD x2,DWORD x3,DWORD x4,DWORD x5,DWORD x6); +NTSTATUS STDCALL RtlWalkHeap( HANDLE heap, PVOID entry_ptr ); +NTSTATUS STDCALL RtlpUnWaitCriticalSection(RTL_CRITICAL_SECTION *crit); +NTSTATUS STDCALL RtlpWaitForCriticalSection(RTL_CRITICAL_SECTION *crit); +NTSTATUS STDCALL LdrLockLoaderLock(ULONG flags, ULONG *result, ULONG *magic); +NTSTATUS STDCALL LdrUnlockLoaderLock(ULONG flags, ULONG magic); +NTSTATUS STDCALL RtlAddAccessAllowedAceEx( + IN OUT PACL pAcl, + IN DWORD dwAceRevision, + IN DWORD AceFlags, + IN DWORD AccessMask, + IN PSID pSid); +NTSTATUS STDCALL RtlAddAccessDeniedAceEx( + IN OUT PACL pAcl, + IN DWORD dwAceRevision, + IN DWORD AceFlags, + IN DWORD AccessMask, + IN PSID pSid); +DWORD STDCALL RtlComputeCrc32(DWORD dwInitial, PBYTE pData, INT iLen); +WCHAR STDCALL RtlDowncaseUnicodeChar(WCHAR wch); +NTSTATUS STDCALL RtlDuplicateUnicodeString( + int add_nul, + const UNICODE_STRING *source, + UNICODE_STRING *destination); +NTSTATUS STDCALL RtlFindCharInUnicodeString( + int flags, + const UNICODE_STRING *main_str, + const UNICODE_STRING *search_chars, + USHORT *pos); +ULONG STDCALL RtlFindClearRuns(PCRTL_BITMAP lpBits, PRTL_BITMAP_RUN lpSeries, + ULONG ulCount, BOOLEAN bLongest); +ULONG STDCALL RtlFindLastBackwardRunClear(PCRTL_BITMAP lpBits, ULONG ulStart, PULONG lpPos); +CCHAR STDCALL RtlFindLeastSignificantBit(ULONGLONG ulLong); +CCHAR STDCALL RtlFindMostSignificantBit(ULONGLONG ulLong); +ULONG STDCALL RtlFindNextForwardRunClear(PCRTL_BITMAP lpBits, ULONG ulStart, PULONG lpPos); +VOID STDCALL RtlFreeOemString(POEM_STRING str); +NTSTATUS STDCALL RtlInitUnicodeStringEx(PUNICODE_STRING target,PCWSTR source); +NTSTATUS STDCALL RtlInitializeCriticalSectionAndSpinCount(RTL_CRITICAL_SECTION *crit, DWORD spincount); +NTSTATUS STDCALL RtlInt64ToUnicodeString(ULONGLONG value,ULONG base,UNICODE_STRING *str); +void *_lfind(const void* match, const void* start,unsigned int* array_size, unsigned int elem_size,int (*cf)(const void*,const void*)); + +ULONG +__cdecl +DbgPrintEx( + IN ULONG ComponentId, + IN ULONG Level, + IN PCH Format, + ... + ); +ULONG +__cdecl +DbgPrintReturnControlC( + PCH Format, + ... + ); +NTSTATUS +STDCALL +DbgQueryDebugFilterState( + IN ULONG ComponentId, + IN ULONG Level + ); +NTSTATUS +STDCALL +DbgSetDebugFilterState( + IN ULONG ComponentId, + IN ULONG Level, + IN BOOL State + ); +NTSTATUS +STDCALL +NtCancelDeviceWakeupRequest( + IN HANDLE Device + ); +NTSTATUS +STDCALL +NtCompactKeys( + IN ULONG Count, + IN HANDLE KeyArray[] + ); +NTSTATUS +STDCALL +NtCompressKey( + IN HANDLE Key + ); +NTSTATUS +STDCALL +NtGetDevicePowerState( + IN HANDLE Device, + OUT DEVICE_POWER_STATE *State + ); +NTSTATUS +STDCALL +NtInitiatePowerAction( + IN POWER_ACTION SystemAction, + IN SYSTEM_POWER_STATE MinSystemState, + IN ULONG Flags, + IN BOOL Asynchronous + ); +BOOL +STDCALL +NtIsSystemResumeAutomatic( + VOID + ); +NTSTATUS +STDCALL +NtLockProductActivationKeys( + ULONG *pPrivateVer, + ULONG *pIsSafeMode + ); +NTSTATUS +STDCALL +NtLockRegistryKey( + IN HANDLE KeyHandle + ); +NTSTATUS +STDCALL +NtNotifyChangeMultipleKeys( + IN HANDLE MasterKeyHandle, + IN ULONG Count, + IN OBJECT_ATTRIBUTES SlaveObjects[], + IN HANDLE Event OPTIONAL, + IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, + IN PVOID ApcContext OPTIONAL, + OUT PIO_STATUS_BLOCK IoStatusBlock, + IN ULONG CompletionFilter, + IN BOOL WatchTree, + OUT PVOID Buffer, + IN ULONG BufferSize, + IN BOOL Asynchronous + ); +NTSTATUS +STDCALL +NtQueryOpenSubKeys( + IN POBJECT_ATTRIBUTES TargetKey, + OUT PULONG HandleCount + ); +NTSTATUS +STDCALL +NtRenameKey( + IN HANDLE KeyHandle, + IN PUNICODE_STRING NewName + ); +NTSTATUS +STDCALL +NtRequestDeviceWakeup( + IN HANDLE Device + ); +NTSTATUS +STDCALL +NtRequestWakeupLatency( + IN LATENCY_TIME latency + ); +NTSTATUS +STDCALL +NtSaveKeyEx( + IN HANDLE KeyHandle, + IN HANDLE FileHandle, + IN ULONG Format + ); +NTSTATUS +STDCALL +NtSaveMergedKeys( + IN HANDLE HighPrecedenceKeyHandle, + IN HANDLE LowPrecedenceKeyHandle, + IN HANDLE FileHandle + ); +NTSTATUS +STDCALL +NtSetThreadExecutionState( + IN EXECUTION_STATE esFlags, + OUT EXECUTION_STATE *PreviousFlags + ); +NTSTATUS +STDCALL +NtUnloadKeyEx( + IN POBJECT_ATTRIBUTES TargetKey, + IN HANDLE Event OPTIONAL + ); +NTSTATUS +STDCALL +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 + ); +NTSTATUS +STDCALL +RtlCopyRangeList( + OUT PRTL_RANGE_LIST CopyRangeList, + IN PRTL_RANGE_LIST RangeList + ); +NTSTATUS +STDCALL +RtlDeleteOwnersRanges( + IN OUT PRTL_RANGE_LIST RangeList, + IN PVOID Owner + ); +NTSTATUS +STDCALL +RtlDeleteRange( + IN OUT PRTL_RANGE_LIST RangeList, + IN ULONGLONG Start, + IN ULONGLONG End, + IN PVOID Owner + ); +NTSTATUS +STDCALL +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 + ); +VOID +STDCALL +RtlFreeRangeList( + IN PRTL_RANGE_LIST RangeList + ); +NTSTATUS +STDCALL +RtlGUIDFromString( + IN PUNICODE_STRING GuidString, + OUT GUID* Guid + ); +NTSTATUS +STDCALL +RtlGetFirstRange( + IN PRTL_RANGE_LIST RangeList, + OUT PRTL_RANGE_LIST_ITERATOR Iterator, + OUT PRTL_RANGE *Range + ); +NTSTATUS +STDCALL +RtlGetNextRange( + IN OUT PRTL_RANGE_LIST_ITERATOR Iterator, + OUT PRTL_RANGE *Range, + IN BOOL MoveForwards + ); +NTSTATUS +STDCALL +RtlGetVersion( + OUT PRTL_OSVERSIONINFOW lpVersionInformation + ); +NTSTATUS +STDCALL +RtlHashUnicodeString( + IN const UNICODE_STRING *String, + IN BOOL CaseInSensitive, + IN ULONG HashAlgorithm, + OUT PULONG HashValue + ); +VOID +STDCALL +RtlInitializeRangeList( + IN OUT PRTL_RANGE_LIST RangeList + ); +NTSTATUS +STDCALL +RtlInvertRangeList( + OUT PRTL_RANGE_LIST InvertedRangeList, + IN PRTL_RANGE_LIST RangeList + ); +NTSTATUS +STDCALL +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 PBOOL Available + ); +NTSTATUS +STDCALL +RtlMergeRangeLists( + OUT PRTL_RANGE_LIST MergedRangeList, + IN PRTL_RANGE_LIST RangeList1, + IN PRTL_RANGE_LIST RangeList2, + IN ULONG Flags + ); +NTSTATUS +STDCALL +RtlStringFromGUID( + IN REFGUID Guid, + OUT PUNICODE_STRING GuidString + ); +USHORT +FASTCALL +RtlUshortByteSwap( + IN USHORT Source + ); +ULONG +FASTCALL +RtlUlongByteSwap( + IN ULONG Source + ); +ULONGLONG +FASTCALL +RtlUlonglongByteSwap( + IN ULONGLONG Source + ); +BOOL +STDCALL +RtlValidRelativeSecurityDescriptor ( + IN PSECURITY_DESCRIPTOR SecurityDescriptorInput, + IN ULONG SecurityDescriptorLength, + IN SECURITY_INFORMATION RequiredInformation + ); +NTSTATUS +STDCALL +RtlVerifyVersionInfo( + IN PRTL_OSVERSIONINFOEXW VersionInfo, + IN ULONG TypeMask, + IN ULONGLONG ConditionMask + ); +ULONG +STDCALL +RtlWalkFrameChain ( + OUT PVOID *Callers, + IN ULONG Count, + IN ULONG Flags + ); +ULONG +vDbgPrintEx( + IN ULONG ComponentId, + IN ULONG Level, + IN PCH Format, + va_list arglist + ); +ULONG +vDbgPrintExWithPrefix( + IN PCH Prefix, + IN ULONG ComponentId, + IN ULONG Level, + IN PCH Format, + va_list arglist + ); +NTSTATUS +STDCALL +ZwCancelDeviceWakeupRequest( + IN HANDLE Device + ); +NTSTATUS +STDCALL +ZwCompactKeys( + IN ULONG Count, + IN HANDLE KeyArray[] + ); +NTSTATUS +STDCALL +ZwCompressKey( + IN HANDLE Key + ); +NTSTATUS +STDCALL +ZwGetDevicePowerState( + IN HANDLE Device, + OUT DEVICE_POWER_STATE *State + ); +NTSTATUS +STDCALL +ZwInitiatePowerAction( + IN POWER_ACTION SystemAction, + IN SYSTEM_POWER_STATE MinSystemState, + IN ULONG Flags, + IN BOOL Asynchronous + ); +BOOL +STDCALL +ZwIsSystemResumeAutomatic( + VOID + ); +NTSTATUS +STDCALL +ZwLockProductActivationKeys( + ULONG *pPrivateVer, + ULONG *pIsSafeMode + ); +NTSTATUS +STDCALL +ZwLockRegistryKey( + IN HANDLE KeyHandle + ); +NTSTATUS +STDCALL +ZwNotifyChangeMultipleKeys( + IN HANDLE MasterKeyHandle, + IN ULONG Count, + IN OBJECT_ATTRIBUTES SlaveObjects[], + IN HANDLE Event OPTIONAL, + IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, + IN PVOID ApcContext OPTIONAL, + OUT PIO_STATUS_BLOCK IoStatusBlock, + IN ULONG CompletionFilter, + IN BOOL WatchTree, + OUT PVOID Buffer, + IN ULONG BufferSize, + IN BOOL Asynchronous + ); +NTSTATUS +STDCALL +ZwQueryOpenSubKeys( + IN POBJECT_ATTRIBUTES TargetKey, + OUT PULONG HandleCount + ); +NTSTATUS +STDCALL +ZwRenameKey( + IN HANDLE KeyHandle, + IN PUNICODE_STRING NewName + ); +NTSTATUS +STDCALL +ZwRequestDeviceWakeup( + IN HANDLE Device + ); +NTSTATUS +STDCALL +ZwRequestWakeupLatency( + IN LATENCY_TIME latency + ); +NTSTATUS +STDCALL +ZwSaveKeyEx( + IN HANDLE KeyHandle, + IN HANDLE FileHandle, + IN ULONG Format + ); +NTSTATUS +STDCALL +ZwSaveMergedKeys( + IN HANDLE HighPrecedenceKeyHandle, + IN HANDLE LowPrecedenceKeyHandle, + IN HANDLE FileHandle + ); +NTSTATUS +STDCALL +ZwSetThreadExecutionState( + IN EXECUTION_STATE esFlags, + OUT EXECUTION_STATE *PreviousFlags + ); +NTSTATUS +STDCALL +ZwUnloadKeyEx( + IN POBJECT_ATTRIBUTES TargetKey, + IN HANDLE Event OPTIONAL + ); +BOOL STDCALL LdrFlushAlternateResourceModules(VOID); +BOOL STDCALL LdrAlternateResourcesEnabled(VOID); + +VOID STDCALL MD4Init(PMD4_CONTEXT Context); +VOID STDCALL MD4Update(PMD4_CONTEXT Context, PVOID Buffer, UINT BufferSize); +VOID STDCALL MD4Final(PMD4_CONTEXT Context); + +VOID STDCALL MD5Init(PMD5_CONTEXT Context); +VOID STDCALL MD5Update(PMD5_CONTEXT Context, PVOID Buffer, UINT BufferSize); +VOID STDCALL MD5Final(PMD5_CONTEXT Context); + +VOID STDCALL A_SHAInit(PSHA_CONTEXT Context); +VOID STDCALL A_SHAUpdate(PSHA_CONTEXT Context, PVOID Buffer, UINT BufferSize); +VOID STDCALL A_SHAFinal(PSHA_CONTEXT Context, PVOID Result); + +VOID STDCALL GdiInitializeLanguagePack(DWORD InitParam); +BOOL STDCALL SetConsoleIcon(HICON hicon); +NTSTATUS STDCALL NtPowerInformation(DWORD x1,DWORD x2,DWORD x3,DWORD x4,DWORD x5); +NTSTATUS STDCALL ZwPowerInformation(DWORD x1,DWORD x2,DWORD x3,DWORD x4,DWORD x5); +double __cdecl _CIpow(double x,double y); +LPSTR __cdecl _ui64toa( + ULONGLONG value, + LPSTR str, + INT radix); +LPWSTR __cdecl _ui64tow( + ULONGLONG value, + LPWSTR str, + INT radix); +INT __cdecl iswdigit( WCHAR wc ); +INT __cdecl iswlower( WCHAR wc ); +INT __cdecl iswxdigit( WCHAR wc ); +DWORD STDCALL GetHandleContext(HANDLE hnd); +HANDLE STDCALL CreateSocketHandle(VOID); +BOOL STDCALL SetHandleContext(HANDLE hnd,DWORD context); +BOOL STDCALL SetConsoleInputExeNameA(LPCSTR name); +BOOL STDCALL SetConsoleInputExeNameW(LPCWSTR name); +BOOL STDCALL UTRegister( HMODULE hModule, LPSTR lpsz16BITDLL, + LPSTR lpszInitName, LPSTR lpszProcName, + FARPROC *ppfn32Thunk, FARPROC pfnUT32CallBack, + LPVOID lpBuff ); +VOID STDCALL UTUnRegister( HMODULE hModule ); +BOOL STDCALL SynchronizeWindows31FilesAndWindowsNTRegistry( DWORD x1, DWORD x2, DWORD x3,DWORD x4 ); +BOOL STDCALL QueryWindows31FilesMigration( DWORD x1 ); + +WINBOOL STDCALL GetConsoleKeyboardLayoutNameA(LPSTR name); +WINBOOL STDCALL GetConsoleKeyboardLayoutNameW(LPWSTR name); + +DWORD STDCALL SetupChangeFontSize(HANDLE HWindow, + LPCWSTR lpszFontSize); +WINBOOL +STDCALL +AccessCheckByType( +PSECURITY_DESCRIPTOR pSecurityDescriptor, +PSID PrincipalSelfSid, +HANDLE ClientToken, +DWORD DesiredAccess, +POBJECT_TYPE_LIST ObjectTypeList, +DWORD ObjectTypeListLength, +PGENERIC_MAPPING GenericMapping, +PPRIVILEGE_SET PrivilegeSet, +LPDWORD PrivilegeSetLength, +LPDWORD GrantedAccess, +LPBOOL AccessStatus +); + +WINBOOL +STDCALL +AccessCheckByTypeResultList( +PSECURITY_DESCRIPTOR pSecurityDescriptor, +PSID PrincipalSelfSid, +HANDLE ClientToken, +DWORD DesiredAccess, +POBJECT_TYPE_LIST ObjectTypeList, +DWORD ObjectTypeListLength, +PGENERIC_MAPPING GenericMapping, +PPRIVILEGE_SET PrivilegeSet, +LPDWORD PrivilegeSetLength, +LPDWORD GrantedAccessList, +LPDWORD AccessStatusList +); + +WINBOOL +STDCALL +AccessCheckByTypeAndAuditAlarmA( +LPCSTR SubsystemName, +LPVOID HandleId, +LPCSTR ObjectTypeName, +LPCSTR ObjectName, +PSECURITY_DESCRIPTOR SecurityDescriptor, +PSID PrincipalSelfSid, +DWORD DesiredAccess, +AUDIT_EVENT_TYPE AuditType, +DWORD Flags, +POBJECT_TYPE_LIST ObjectTypeList, +DWORD ObjectTypeListLength, +PGENERIC_MAPPING GenericMapping, +WINBOOL ObjectCreation, +LPDWORD GrantedAccess, +LPBOOL AccessStatus, +LPBOOL pfGenerateOnClose +); + +WINBOOL +STDCALL +AccessCheckByTypeAndAuditAlarmW( +LPCWSTR SubsystemName, +LPVOID HandleId, +LPCWSTR ObjectTypeName, +LPCWSTR ObjectName, +PSECURITY_DESCRIPTOR SecurityDescriptor, +PSID PrincipalSelfSid, +DWORD DesiredAccess, +AUDIT_EVENT_TYPE AuditType, +DWORD Flags, +POBJECT_TYPE_LIST ObjectTypeList, +DWORD ObjectTypeListLength, +PGENERIC_MAPPING GenericMapping, +WINBOOL ObjectCreation, +LPDWORD GrantedAccess, +LPBOOL AccessStatus, +LPBOOL pfGenerateOnClose +); + +WINBOOL +STDCALL +AccessCheckByTypeResultListAndAuditAlarmA( +LPCSTR SubsystemName, +LPVOID HandleId, +LPCSTR ObjectTypeName, +LPCSTR ObjectName, +PSECURITY_DESCRIPTOR SecurityDescriptor, +PSID PrincipalSelfSid, +DWORD DesiredAccess, +AUDIT_EVENT_TYPE AuditType, +DWORD Flags, +POBJECT_TYPE_LIST ObjectTypeList, +DWORD ObjectTypeListLength, +PGENERIC_MAPPING GenericMapping, +WINBOOL ObjectCreation, +LPDWORD GrantedAccess, +LPDWORD AccessStatusList, +LPBOOL pfGenerateOnClose +); + +WINBOOL +STDCALL +AccessCheckByTypeResultListAndAuditAlarmW( +LPCWSTR SubsystemName, +LPVOID HandleId, +LPCWSTR ObjectTypeName, +LPCWSTR ObjectName, +PSECURITY_DESCRIPTOR SecurityDescriptor, +PSID PrincipalSelfSid, +DWORD DesiredAccess, +AUDIT_EVENT_TYPE AuditType, +DWORD Flags, +POBJECT_TYPE_LIST ObjectTypeList, +DWORD ObjectTypeListLength, +PGENERIC_MAPPING GenericMapping, +WINBOOL ObjectCreation, +LPDWORD GrantedAccess, +LPDWORD AccessStatusList, +LPBOOL pfGenerateOnClose +); + +WINBOOL +STDCALL +AccessCheckByTypeResultListAndAuditAlarmByHandleA( +LPCSTR SubsystemName, +LPVOID HandleId, +HANDLE ClientToken, +LPCSTR ObjectTypeName, +LPCSTR ObjectName, +PSECURITY_DESCRIPTOR SecurityDescriptor, +PSID PrincipalSelfSid, +DWORD DesiredAccess, +AUDIT_EVENT_TYPE AuditType, +DWORD Flags, +POBJECT_TYPE_LIST ObjectTypeList, +DWORD ObjectTypeListLength, +PGENERIC_MAPPING GenericMapping, +WINBOOL ObjectCreation, +LPDWORD GrantedAccess, +LPDWORD AccessStatusList, +LPBOOL pfGenerateOnClose +); + +WINBOOL +STDCALL +AccessCheckByTypeResultListAndAuditAlarmByHandleW( +LPCWSTR SubsystemName, +LPVOID HandleId, +HANDLE ClientToken, +LPCWSTR ObjectTypeName, +LPCWSTR ObjectName, +PSECURITY_DESCRIPTOR SecurityDescriptor, +PSID PrincipalSelfSid, +DWORD DesiredAccess, +AUDIT_EVENT_TYPE AuditType, +DWORD Flags, +POBJECT_TYPE_LIST ObjectTypeList, +DWORD ObjectTypeListLength, +PGENERIC_MAPPING GenericMapping, +WINBOOL ObjectCreation, +LPDWORD GrantedAccess, +LPDWORD AccessStatusList, +LPBOOL pfGenerateOnClose +); + +WINBOOL +STDCALL +InitiateSystemShutdownExA(LPSTR lpMachineName,LPSTR lpMessage,DWORD dwTimeout,BOOL bForceAppsClosed,BOOL bRebootAfterShutdown,DWORD dwReason); +WINBOOL +STDCALL +InitiateSystemShutdownExW(LPWSTR lpMachineName,LPWSTR lpMessage,DWORD dwTimeout,BOOL bForceAppsClosed,BOOL bRebootAfterShutdown,DWORD dwReason); +WINBOOL +STDCALL +NotifyBootConfigStatus(WINBOOL BootAcceptable); +LONG +STDCALL +RegDisablePredefinedCache(VOID); +LONG +STDCALL +RegOpenCurrentUser(REGSAM samDesired,PHKEY phkResult); +LONG +STDCALL +RegOpenUserClassesRoot(HANDLE hToken,DWORD dwOptions,REGSAM samDesired,PHKEY phkResult); +LONG +STDCALL +RegOverridePredefKey (HKEY hKey,HKEY hNewHKey); +LONG +STDCALL +RegSaveKeyExA (HKEY hKey,LPCSTR lpFile,LPSECURITY_ATTRIBUTES lpSecurityAttributes,DWORD Flags); +LONG +STDCALL +RegSaveKeyExW (HKEY hKey,LPCWSTR lpFile,LPSECURITY_ATTRIBUTES lpSecurityAttributes,DWORD Flags); +WINBOOL +STDCALL +SetServiceBits(SERVICE_STATUS_HANDLE hServiceStatus,DWORD dwServiceBits,WINBOOL bSetBitsOn,WINBOOL bUpdateImmediately); +LONG +STDCALL +Wow64Win32ApiEntry (DWORD dwFuncNumber,DWORD dwFlag,DWORD dwRes); + +WINBOOL +STDCALL +AddAccessAllowedAceEx ( + PACL pAcl, + DWORD dwAceRevision, + DWORD AceFlags, + DWORD AccessMask, + PSID pSid + ); + +WINBOOL +STDCALL +AddAccessAllowedObjectAce ( + PACL pAcl, + DWORD dwAceRevision, + DWORD AceFlags, + DWORD AccessMask, + GUID *ObjectTypeGuid, + GUID *InheritedObjectTypeGuid, + PSID pSid + ); + +WINBOOL +STDCALL +AddAccessDeniedAceEx ( + PACL pAcl, + DWORD dwAceRevision, + DWORD AceFlags, + DWORD AccessMask, + PSID pSid + ); + +WINBOOL +STDCALL +AddAccessDeniedObjectAce ( + PACL pAcl, + DWORD dwAceRevision, + DWORD AceFlags, + DWORD AccessMask, + GUID *ObjectTypeGuid, + GUID *InheritedObjectTypeGuid, + PSID pSid + ); + +WINBOOL +STDCALL +AddAuditAccessAceEx( + PACL pAcl, + DWORD dwAceRevision, + DWORD AceFlags, + DWORD dwAccessMask, + PSID pSid, + WINBOOL bAuditSuccess, + WINBOOL bAuditFailure + ); + +WINBOOL +STDCALL +AddAuditAccessObjectAce ( + PACL pAcl, + DWORD dwAceRevision, + DWORD AceFlags, + DWORD AccessMask, + GUID *ObjectTypeGuid, + GUID *InheritedObjectTypeGuid, + PSID pSid, + WINBOOL bAuditSuccess, + WINBOOL bAuditFailure + ); + +WINBOOL +APIENTRY +CheckTokenMembership( + HANDLE TokenHandle, + PSID SidToCheck, + PWINBOOL IsMember + ); + +VOID +STDCALL +CloseEncryptedFileRaw( + PVOID pvContext + ); + +WINBOOL +STDCALL +CloseEventLog ( + HANDLE hEventLog + ); + +WINBOOL +STDCALL +ConvertToAutoInheritPrivateObjectSecurity( + PSECURITY_DESCRIPTOR ParentDescriptor, + PSECURITY_DESCRIPTOR CurrentSecurityDescriptor, + PSECURITY_DESCRIPTOR *NewSecurityDescriptor, + GUID *ObjectType, + WINBOOL IsDirectoryObject, + PGENERIC_MAPPING GenericMapping + ); + +WINBOOL +STDCALL +CreatePrivateObjectSecurity ( + PSECURITY_DESCRIPTOR ParentDescriptor, + PSECURITY_DESCRIPTOR CreatorDescriptor, + PSECURITY_DESCRIPTOR * NewDescriptor, + WINBOOL IsDirectoryObject, + HANDLE Token, + PGENERIC_MAPPING GenericMapping + ); + +WINBOOL +STDCALL +CreatePrivateObjectSecurityEx ( + PSECURITY_DESCRIPTOR ParentDescriptor, + PSECURITY_DESCRIPTOR CreatorDescriptor, + PSECURITY_DESCRIPTOR * NewDescriptor, + GUID *ObjectType, + WINBOOL IsContainerObject, + ULONG AutoInheritFlags, + HANDLE Token, + PGENERIC_MAPPING GenericMapping + ); + +WINBOOL +STDCALL +CreatePrivateObjectSecurityWithMultipleInheritance ( + PSECURITY_DESCRIPTOR ParentDescriptor, + PSECURITY_DESCRIPTOR CreatorDescriptor, + PSECURITY_DESCRIPTOR * NewDescriptor, + GUID **ObjectTypes, + ULONG GuidCount, + WINBOOL IsContainerObject, + ULONG AutoInheritFlags, + HANDLE Token, + PGENERIC_MAPPING GenericMapping + ); + +WINBOOL +STDCALL +CreateProcessWithLogonW( + LPCWSTR lpUsername, + LPCWSTR lpDomain, + LPCWSTR lpPassword, + DWORD dwLogonFlags, + LPCWSTR lpApplicationName, + LPWSTR lpCommandLine, + DWORD dwCreationFlags, + LPVOID lpEnvironment, + LPCWSTR lpCurrentDirectory, + LPSTARTUPINFOW lpStartupInfo, + LPPROCESS_INFORMATION lpProcessInformation + ); + +WINBOOL +APIENTRY +CreateRestrictedToken( + HANDLE ExistingTokenHandle, + DWORD Flags, + DWORD DisableSidCount, + PSID_AND_ATTRIBUTES SidsToDisable, + DWORD DeletePrivilegeCount, + PLUID_AND_ATTRIBUTES PrivilegesToDelete, + DWORD RestrictedSidCount, + PSID_AND_ATTRIBUTES SidsToRestrict, + PHANDLE NewTokenHandle + ); + +WINBOOL +STDCALL +CreateWellKnownSid( + WELL_KNOWN_SID_TYPE WellKnownSidType, + PSID DomainSid , + PSID pSid, + DWORD *cbSid + ); + +WINBOOL +STDCALL +DestroyPrivateObjectSecurity ( + PSECURITY_DESCRIPTOR * ObjectDescriptor + ); + +WINBOOL +STDCALL +EqualDomainSid( + PSID pSid1, + PSID pSid2, + WINBOOL *pfEqual + ); + +WINBOOL +STDCALL +GetEventLogInformation ( + HANDLE hEventLog, + DWORD dwInfoLevel, + LPVOID lpBuffer, + DWORD cbBufSize, + LPDWORD pcbBytesNeeded + ); + +WINBOOL +STDCALL +GetNumberOfEventLogRecords ( + HANDLE hEventLog, + PDWORD NumberOfRecords + ); + +WINBOOL +STDCALL +GetOldestEventLogRecord ( + HANDLE hEventLog, + PDWORD OldestRecord + ); + +WINBOOL +STDCALL +GetPrivateObjectSecurity ( + PSECURITY_DESCRIPTOR ObjectDescriptor, + SECURITY_INFORMATION SecurityInformation, + PSECURITY_DESCRIPTOR ResultantDescriptor, + DWORD DescriptorLength, + PDWORD ReturnLength + ); + +DWORD +STDCALL +GetSecurityDescriptorRMControl( + PSECURITY_DESCRIPTOR SecurityDescriptor, + PUCHAR RMControl + ); + +WINBOOL +STDCALL +GetWindowsAccountDomainSid( + PSID pSid, + PSID ppDomainSid, + DWORD *cbSid + ); + +WINBOOL +APIENTRY +ImpersonateAnonymousToken( + HANDLE ThreadHandle + ); + +WINBOOL +STDCALL +ImpersonateNamedPipeClient( + HANDLE hNamedPipe + ); + +WINBOOL +STDCALL +IsTextUnicode( + CONST VOID* lpBuffer, + int cb, + LPINT lpi + ); + +WINBOOL +STDCALL +IsTokenRestricted( + HANDLE TokenHandle + ); + +WINBOOL +STDCALL +IsTokenUntrusted( + HANDLE TokenHandle + ); + +WINBOOL +STDCALL +IsWellKnownSid ( + PSID pSid, + WELL_KNOWN_SID_TYPE WellKnownSidType + ); + +WINBOOL +STDCALL +MakeAbsoluteSD2 ( + PSECURITY_DESCRIPTOR pSelfRelativeSecurityDescriptor, + LPDWORD lpdwBufferSize + ); + +WINBOOL +STDCALL +NotifyChangeEventLog( + HANDLE hEventLog, + HANDLE hEvent + ); + +DWORD +STDCALL +ReadEncryptedFileRaw( + PFE_EXPORT_FUNC pfExportCallback, + PVOID pvCallbackContext, + PVOID pvContext + ); + +DWORD +STDCALL +WriteEncryptedFileRaw( + PFE_IMPORT_FUNC pfImportCallback, + PVOID pvCallbackContext, + PVOID pvContext + ); + +WINBOOL +STDCALL +SetPrivateObjectSecurity ( + SECURITY_INFORMATION SecurityInformation, + PSECURITY_DESCRIPTOR ModificationDescriptor, + PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor, + PGENERIC_MAPPING GenericMapping, + HANDLE Token + ); + +WINBOOL +STDCALL +SetPrivateObjectSecurityEx ( + SECURITY_INFORMATION SecurityInformation, + PSECURITY_DESCRIPTOR ModificationDescriptor, + PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor, + ULONG AutoInheritFlags, + PGENERIC_MAPPING GenericMapping, + HANDLE Token + ); + +WINBOOL +STDCALL +SetSecurityDescriptorControl ( + PSECURITY_DESCRIPTOR pSecurityDescriptor, + SECURITY_DESCRIPTOR_CONTROL ControlBitsOfInterest, + SECURITY_DESCRIPTOR_CONTROL ControlBitsToSet + ); + +DWORD +STDCALL +SetSecurityDescriptorRMControl( + PSECURITY_DESCRIPTOR SecurityDescriptor, + PUCHAR RMControl + ); + +VOID +STDCALL +RtlCaptureContext ( + PCONTEXT ContextRecord + ); + +ULONGLONG +STDCALL +VerSetConditionMask( + ULONGLONG ConditionMask, + DWORD TypeMask, + BYTE Condition + ); + +INT +STDCALL +GetExpandedNameA( + LPSTR in, + LPSTR out + ); +INT +STDCALL +GetExpandedNameW( + LPWSTR in, + LPWSTR out + ); + +UINT +STDCALL +WINNLSGetIMEHotkey( HWND hwnd); + +WINBOOL +STDCALL +WINNLSEnableIME( HWND hwnd, BOOL enable); + +WINBOOL +STDCALL +WINNLSGetEnableStatus( HWND hwnd); + +LANGID +STDCALL +GetUserDefaultUILanguage(VOID); + +LANGID +STDCALL +GetSystemDefaultUILanguage(VOID); + +WINBOOL +STDCALL +SetUserGeoID( + GEOID GeoId); + +GEOID +STDCALL +GetUserGeoID( + GEOCLASS GeoClass); + +WINBOOL +STDCALL +EnumSystemGeoID( + GEOCLASS GeoClass, + GEOID ParentGeoId, + GEO_ENUMPROC lpGeoEnumProc); + +WINBOOL +STDCALL +IsValidLanguageGroup( + LGRPID LanguageGroup, + DWORD dwFlags); + +WINBOOL +STDCALL +ActivateActCtx( + HANDLE hActCtx, + ULONG_PTR *lpCookie + ); + +VOID +STDCALL +AddRefActCtx( + HANDLE hActCtx + ); + +WINBOOL +STDCALL +AllocateUserPhysicalPages( + HANDLE hProcess, + PULONG_PTR NumberOfPages, + PULONG_PTR PageArray + ); + +WINBOOL +STDCALL +AssignProcessToJobObject( + HANDLE hJob, + HANDLE hProcess + ); + +WINBOOL +STDCALL +BindIoCompletionCallback ( + HANDLE FileHandle, + LPOVERLAPPED_COMPLETION_ROUTINE Function, + ULONG Flags + ); + +WINBOOL +STDCALL +CancelDeviceWakeupRequest( + HANDLE hDevice + ); + +WINBOOL +STDCALL +CancelTimerQueueTimer( + HANDLE TimerQueue, + HANDLE Timer + ); + +WINBOOL +STDCALL +ChangeTimerQueueTimer( + HANDLE TimerQueue, + HANDLE Timer, + ULONG DueTime, + ULONG Period + ); + +WINBOOL +STDCALL +CheckRemoteDebuggerPresent( + HANDLE hProcess, + PWINBOOL pbDebuggerPresent + ); + +WINBOOL +STDCALL +ConvertFiberToThread( + VOID + ); + +LONG +STDCALL +CopyLZFile( + INT a, + INT b + ); + +HANDLE +STDCALL +CreateActCtxA( + PCACTCTXA pActCtx + ); + + +HANDLE +STDCALL +CreateActCtxW( + PCACTCTXW pActCtx + ); + +LPVOID +STDCALL +CreateFiberEx( + SIZE_T dwStackCommitSize, + SIZE_T dwStackReserveSize, + DWORD dwFlags, + LPFIBER_START_ROUTINE lpStartAddress, + LPVOID lpParameter + ); + +WINBOOL +STDCALL +CreateJobSet ( + ULONG NumJob, + PJOB_SET_ARRAY UserJobSet, + ULONG Flags); + +HANDLE +STDCALL +CreateMemoryResourceNotification( + MEMORY_RESOURCE_NOTIFICATION_TYPE NotificationType + ); + +HANDLE +STDCALL +CreateTimerQueue( + VOID + ); + +WINBOOL +STDCALL +CreateTimerQueueTimer( + PHANDLE phNewTimer, + HANDLE TimerQueue, + WAITORTIMERCALLBACK Callback, + PVOID Parameter, + DWORD DueTime, + DWORD Period, + ULONG Flags + ) ; + +WINBOOL +STDCALL +DeactivateActCtx( + DWORD dwFlags, + ULONG_PTR ulCookie + ); + +WINBOOL +STDCALL +DebugActiveProcessStop( + DWORD dwProcessId + ); + +WINBOOL +STDCALL +DebugBreakProcess ( + HANDLE Process + ); + +WINBOOL +STDCALL +DebugSetProcessKillOnExit( + WINBOOL KillOnExit + ); + +WINBOOL +STDCALL +DeleteTimerQueue( + HANDLE TimerQueue + ); + +WINBOOL +STDCALL +DeleteTimerQueueEx( + HANDLE TimerQueue, + HANDLE CompletionEvent + ); + +WINBOOL +STDCALL +DeleteTimerQueueTimer( + HANDLE TimerQueue, + HANDLE Timer, + HANDLE CompletionEvent + ); + +WINBOOL +STDCALL +FindActCtxSectionGuid( + DWORD dwFlags, + const GUID *lpExtensionGuid, + ULONG ulSectionId, + const GUID *lpGuidToFind, + PACTCTX_SECTION_KEYED_DATA ReturnedData + ); + +WINBOOL +STDCALL +FindVolumeClose( + HANDLE hFindVolume + ); + +WINBOOL +STDCALL +FindVolumeMountPointClose( + HANDLE hFindVolumeMountPoint + ); + +WINBOOL +STDCALL +FreeUserPhysicalPages( + HANDLE hProcess, + PULONG_PTR NumberOfPages, + PULONG_PTR PageArray + ); + +WINBOOL +STDCALL +GetCurrentActCtx( + HANDLE *lphActCtx); + +WINBOOL +STDCALL +GetDevicePowerState( + HANDLE hDevice, + WINBOOL *pfOn + ); + +WINBOOL +STDCALL +GetFileSizeEx( + HANDLE hFile, + PLARGE_INTEGER lpFileSize + ); + +VOID +STDCALL +GetNativeSystemInfo( + LPSYSTEM_INFO lpSystemInfo + ); + +WINBOOL +STDCALL +GetNumaHighestNodeNumber( + PULONG HighestNodeNumber + ); + +WINBOOL +STDCALL +GetNumaNodeProcessorMask( + UCHAR Node, + PULONGLONG ProcessorMask + ); + +WINBOOL +STDCALL +GetNumaProcessorNode( + UCHAR Processor, + PUCHAR NodeNumber + ); + +WINBOOL +STDCALL +GetProcessHandleCount( + HANDLE hProcess, + PDWORD pdwHandleCount + ); + +DWORD +STDCALL +GetProcessId( + HANDLE Process + ); + +WINBOOL +STDCALL +GetProcessIoCounters( + HANDLE hProcess, + PIO_COUNTERS lpIoCounters + ); + +WINBOOL +STDCALL +GetProcessPriorityBoost( + HANDLE hProcess, + PWINBOOL pDisablePriorityBoost + ); + +WINBOOL +STDCALL +GetSystemRegistryQuota( + PDWORD pdwQuotaAllowed, + PDWORD pdwQuotaUsed + ); + +WINBOOL +STDCALL +GetSystemTimes( + LPFILETIME lpIdleTime, + LPFILETIME lpKernelTime, + LPFILETIME lpUserTime + ); + +WINBOOL +STDCALL +GetThreadIOPendingFlag( + HANDLE hThread, + PWINBOOL lpIOIsPending + ); + +UINT +STDCALL +GetWriteWatch( + DWORD dwFlags, + PVOID lpBaseAddress, + SIZE_T dwRegionSize, + PVOID *lpAddresses, + PULONG_PTR lpdwCount, + PULONG lpdwGranularity + ); + +WINBOOL +STDCALL +GlobalMemoryStatusEx( + LPMEMORYSTATUSEX lpBuffer + ); + +WINBOOL +STDCALL +HeapQueryInformation ( + HANDLE HeapHandle, + HEAP_INFORMATION_CLASS HeapInformationClass, + PVOID HeapInformation OPTIONAL, + SIZE_T HeapInformationLength OPTIONAL, + PSIZE_T ReturnLength OPTIONAL + ); + +WINBOOL +STDCALL +HeapSetInformation ( + HANDLE HeapHandle, + HEAP_INFORMATION_CLASS HeapInformationClass, + PVOID HeapInformation OPTIONAL, + SIZE_T HeapInformationLength OPTIONAL + ); + +WINBOOL +STDCALL +InitializeCriticalSectionAndSpinCount( + LPCRITICAL_SECTION lpCriticalSection, + DWORD dwSpinCount + ); + +VOID +STDCALL +InitializeSListHead ( + PSLIST_HEADER ListHead + ); + +PSLIST_ENTRY +STDCALL +InterlockedFlushSList ( + PSLIST_HEADER ListHead + ); + +#ifndef __NTDRIVER__ /* needed to avoid conflicts in win32k */ +PSLIST_ENTRY +STDCALL +InterlockedPopEntrySList ( + PSLIST_HEADER ListHead + ); + +PSLIST_ENTRY +STDCALL +InterlockedPushEntrySList ( + PSLIST_HEADER ListHead, + PSLIST_ENTRY ListEntry + ); + +#endif + +WINBOOL +STDCALL +IsProcessInJob ( + HANDLE ProcessHandle, + HANDLE JobHandle, + PWINBOOL Result + ); + +WINBOOL +STDCALL +IsSystemResumeAutomatic( + VOID + ); + +WINBOOL +STDCALL +IsWow64Process( + HANDLE hProcess, + PWINBOOL Wow64Process + ); + +WINBOOL +STDCALL +MapUserPhysicalPages( + PVOID VirtualAddress, + ULONG_PTR NumberOfPages, + PULONG_PTR PageArray OPTIONAL + ); + +WINBOOL +STDCALL +MapUserPhysicalPagesScatter( + PVOID *VirtualAddresses, + ULONG_PTR NumberOfPages, + PULONG_PTR PageArray OPTIONAL + ); + +HANDLE +STDCALL +OpenThread( + DWORD dwDesiredAccess, + WINBOOL bInheritHandle, + DWORD dwThreadId + ); + +WINBOOL +STDCALL +QueryActCtxW( + DWORD dwFlags, + HANDLE hActCtx, + PVOID pvSubInstance, + ULONG ulInfoClass, + PVOID pvBuffer, + SIZE_T cbBuffer OPTIONAL, + SIZE_T *pcbWrittenOrRequired OPTIONAL + ); + +USHORT +STDCALL +QueryDepthSList ( + PSLIST_HEADER ListHead + ); + +WINBOOL +STDCALL +QueryInformationJobObject( + HANDLE hJob, + JOBOBJECTINFOCLASS JobObjectInformationClass, + LPVOID lpJobObjectInformation, + DWORD cbJobObjectInformationLength, + LPDWORD lpReturnLength + ); + +WINBOOL +STDCALL +QueryMemoryResourceNotification( + HANDLE ResourceNotificationHandle, + PWINBOOL ResourceState + ); + +DWORD +STDCALL +QueueUserAPC( + PAPCFUNC pfnAPC, + HANDLE hThread, + ULONG_PTR dwData + ); + +NTSTATUS +STDCALL +RtlQueueWorkItem( + LPTHREAD_START_ROUTINE Function, + PVOID Context, + ULONG Flags + ); + +WINBOOL +STDCALL +ReadDirectoryChangesW( + HANDLE hDirectory, + LPVOID lpBuffer, + DWORD nBufferLength, + WINBOOL bWatchSubtree, + DWORD dwNotifyFilter, + LPDWORD lpBytesReturned, + LPOVERLAPPED lpOverlapped, + LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine + ); + +WINBOOL +STDCALL +ReadFileScatter( + HANDLE hFile, + FILE_SEGMENT_ELEMENT aSegmentArray[], + DWORD nNumberOfBytesToRead, + LPDWORD lpReserved, + LPOVERLAPPED lpOverlapped + ); + +WINBOOL +STDCALL +RegisterWaitForSingleObject( + PHANDLE phNewWaitObject, + HANDLE hObject, + WAITORTIMERCALLBACK Callback, + PVOID Context, + ULONG dwMilliseconds, + ULONG dwFlags + ); + +HANDLE +STDCALL +RegisterWaitForSingleObjectEx( + HANDLE hObject, + WAITORTIMERCALLBACK Callback, + PVOID Context, + ULONG dwMilliseconds, + ULONG dwFlags + ); + +VOID +STDCALL +ReleaseActCtx( + HANDLE hActCtx + ); + +ULONG +STDCALL +RemoveVectoredExceptionHandler( + PVOID VectoredHandlerHandle + ); + +WINBOOL +STDCALL +RequestDeviceWakeup( + HANDLE hDevice + ); + +WINBOOL +STDCALL +RequestWakeupLatency( + LATENCY_TIME latency + ); + +UINT +STDCALL +ResetWriteWatch( + LPVOID lpBaseAddress, + SIZE_T dwRegionSize + ); + +VOID +STDCALL +RestoreLastError( + DWORD dwErrCode + ); + +DWORD +STDCALL +SetCriticalSectionSpinCount( + LPCRITICAL_SECTION lpCriticalSection, + DWORD dwSpinCount + ); + +WINBOOL +STDCALL +SetFilePointerEx( + HANDLE hFile, + LARGE_INTEGER liDistanceToMove, + PLARGE_INTEGER lpNewFilePointer, + DWORD dwMoveMethod + ); + +WINBOOL +STDCALL +SetFileValidData( + HANDLE hFile, + LONGLONG ValidDataLength + ); + +WINBOOL +STDCALL +SetInformationJobObject( + HANDLE hJob, + JOBOBJECTINFOCLASS JobObjectInformationClass, + LPVOID lpJobObjectInformation, + DWORD cbJobObjectInformationLength + ); + +WINBOOL +STDCALL +SetMessageWaitingIndicator( + HANDLE hMsgIndicator, + ULONG ulMsgCount + ); + +WINBOOL +STDCALL +SetProcessPriorityBoost( + HANDLE hProcess, + WINBOOL bDisablePriorityBoost + ); + +EXECUTION_STATE +STDCALL +SetThreadExecutionState( + EXECUTION_STATE esFlags + ); + +HANDLE +STDCALL +SetTimerQueueTimer( + HANDLE TimerQueue, + WAITORTIMERCALLBACK Callback, + PVOID Parameter, + DWORD DueTime, + DWORD Period, + WINBOOL PreferIo + ); + +DWORD +STDCALL +SignalObjectAndWait( + HANDLE hObjectToSignal, + HANDLE hObjectToWaitOn, + DWORD dwMilliseconds, + WINBOOL bAlertable + ); + +WINBOOL +STDCALL +TerminateJobObject( + HANDLE hJob, + UINT uExitCode + ); + +WINBOOL +STDCALL +TzSpecificLocalTimeToSystemTime( + LPTIME_ZONE_INFORMATION lpTimeZoneInformation, + LPSYSTEMTIME lpLocalTime, + LPSYSTEMTIME lpUniversalTime + ); + +WINBOOL +STDCALL +UnregisterWait( + HANDLE WaitHandle + ); + +WINBOOL +STDCALL +UnregisterWaitEx( + HANDLE WaitHandle, + HANDLE CompletionEvent + ); + +WINBOOL +STDCALL +WriteFileGather( + HANDLE hFile, + FILE_SEGMENT_ELEMENT aSegmentArray[], + DWORD nNumberOfBytesToWrite, + LPDWORD lpReserved, + LPOVERLAPPED lpOverlapped + ); + +DWORD +STDCALL +WTSGetActiveConsoleSessionId(VOID); + +WINBOOL +STDCALL +ZombifyActCtx( + HANDLE hActCtx + ); + +PVOID +STDCALL +AddVectoredExceptionHandler( + ULONG FirstHandler, + PVECTORED_EXCEPTION_HANDLER VectoredHandler + ); + +HANDLE +STDCALL +AddFontMemResourceEx( + PVOID pbFont, + DWORD cbFont, + PVOID pdv, + DWORD *pcFonts +); + +int +STDCALL +AddFontResourceTracking( + LPCSTR lpString, + int unknown +); + +WINBOOL +STDCALL +AnyLinkedFonts(VOID); + +HBITMAP +STDCALL +ClearBitmapAttributes(HBITMAP hbm, DWORD dwFlags); + +HBRUSH +STDCALL +ClearBrushAttributes(HBRUSH hbm, DWORD dwFlags); + +WINBOOL +STDCALL +ColorCorrectPalette(HDC hDC,HPALETTE hPalette,DWORD dwFirstEntry,DWORD dwNumOfEntries); + +WINBOOL +STDCALL +EnableEUDC(WINBOOL enable); + +int +STDCALL +EndFormPage(HDC hdc); + +WINBOOL +STDCALL +EudcLoadLinkW(LPCWSTR pBaseFaceName,LPCWSTR pEudcFontPath,INT iPriority,INT iFontLinkType); + +WINBOOL +STDCALL +EudcUnloadLinkW(LPCWSTR pBaseFaceName,LPCWSTR pEudcFontPath); + +WINBOOL +STDCALL +FontIsLinked(HDC hdc); + +int +STDCALL +GdiAddFontResourceW(LPCWSTR filename,FLONG f,DESIGNVECTOR *pdv); + +DWORD +STDCALL +GdiAddGlsBounds(HDC hdc,LPRECT prc); + +WINBOOL +STDCALL +GdiAlphaBlend(HDC hdcDst,LONG DstX,LONG DstY,LONG DstCx,LONG DstCy,HDC hdcSrc,LONG SrcX,LONG SrcY,LONG SrcCx,LONG SrcCy,BLENDFUNCTION BlendFunction); + +WINBOOL +STDCALL +GdiArtificialDecrementDriver(LPWSTR pDriverName,WINBOOL unknown); + +WINBOOL +STDCALL +GdiCleanCacheDC(HDC hdc); + +WINBOOL +STDCALL +GdiConsoleTextOut(HDC hdc, POLYTEXTW *lpto,UINT nStrings, RECTL *prclBounds); + +HDC +STDCALL +GdiConvertAndCheckDC(HDC hdc); + +HBITMAP +STDCALL +GdiConvertBitmap(HBITMAP hbm); + +HBRUSH +STDCALL +GdiConvertBrush(HBRUSH hbr); + +HDC +STDCALL +GdiConvertDC(HDC hdc); + +HFONT +STDCALL +GdiConvertFont(HFONT hfont); + +HPALETTE +STDCALL +GdiConvertPalette(HPALETTE hpal); + +HRGN +STDCALL +GdiConvertRegion(HRGN hregion); + +HENHMETAFILE +STDCALL +GdiConvertEnhMetaFile(HENHMETAFILE hmf); + +WINBOOL +STDCALL +GdiDeleteLocalDC(HDC hdc); + +int +STDCALL +GdiDescribePixelFormat(HDC hdc,int ipfd,UINT cjpfd,PPIXELFORMATDESCRIPTOR ppfd); + +WINBOOL +STDCALL +GdiDrawStream(HDC dc, ULONG l, VOID *v); + +HGDIOBJ +STDCALL +GdiFixUpHandle(HGDIOBJ hobj); + +NTSTATUS +STDCALL +GdiFullscreenControl(FULLSCREENCONTROL FullscreenCommand, PVOID FullscreenInput, + DWORD FullscreenInputLength, PVOID FullscreenOutput, + PULONG FullscreenOutputLength); + +DWORD +STDCALL +GdiGetCodePage(HDC hdc); + +HBRUSH +STDCALL +GdiGetLocalBrush(HBRUSH hbr); + +HDC +STDCALL +GdiGetLocalDC(HDC hdc); + +HFONT +STDCALL +GdiGetLocalFont(HFONT hfont); + +WINBOOL +STDCALL +GdiGradientFill(HDC hdc,PTRIVERTEX pVertex,ULONG uVertex,PVOID pMesh,ULONG uMesh,ULONG ulMode); + +WINBOOL +STDCALL +GdiIsMetaFileDC(HDC hdc); + +WINBOOL +STDCALL +GdiIsMetaPrintDC(HDC hdc); + +WINBOOL +STDCALL +GdiIsPlayMetafileDC(HDC hdc); + +INT +STDCALL +GdiQueryFonts(PUNIVERSAL_FONT_ID pufiFontList,ULONG nBufferSize,PLARGE_INTEGER pTimeStamp ); + +WINBOOL +STDCALL +GdiRealizationInfo(HDC hdc, PREALIZATION_INFO pri); + +WINBOOL +STDCALL +GdiReleaseDC(HDC hdc); + +WINBOOL +STDCALL +GdiReleaseLocalDC(HDC hdc); + +WINBOOL +STDCALL +GdiSetAttrs(HDC hdc); + +VOID +STDCALL +GdiSetLastError(DWORD dwErrCode); + +WINBOOL +STDCALL +GdiSetPixelFormat(HDC hdc,int ipfd); + +WINBOOL +STDCALL +GdiTransparentBlt(HDC hdcDst, int xDst, int yDst, int cxDst, int cyDst,HDC hdcSrc, int xSrc, int ySrc, int cxSrc, int cySrc,COLORREF TransColor); + +WINBOOL +STDCALL +GdiValidateHandle(HGDIOBJ hobj); + +WINBOOL +STDCALL +GdiSwapBuffers(HDC hdc); + +VOID +STDCALL +GdiSetServerAttr(HDC hdc,DWORD attr); + +DWORD +STDCALL +GetBitmapAttributes(HBITMAP hbm); + +DWORD +STDCALL +GetBrushAttributes(HBRUSH hbr); + +WINBOOL +STDCALL +GetCharABCWidthsI( + HDC hdc, + UINT giFirst, + UINT cgi, + LPWORD pgi, + LPABC lpabc +); + +WINBOOL +STDCALL +GetCharWidthI( + HDC hdc, + UINT giFirst, + UINT cgi, + LPWORD pgi, + LPINT lpBuffer +); + +WINBOOL +STDCALL +GetCharWidthInfo(HDC hdc,PCHWIDTHINFO pChWidthInfo); + +COLORREF +STDCALL +GetDCBrushColor( + HDC hdc +); + +COLORREF +STDCALL +GetDCPenColor( + HDC hdc +); + +DWORD +STDCALL +GetFontUnicodeRanges( + HDC hdc, + LPGLYPHSET lpgs +); + +WINBOOL +STDCALL +GetETM(HDC hdc,EXTTEXTMETRIC *petm); + +ULONG +STDCALL +GetEUDCTimeStamp(VOID); + +DWORD +STDCALL +GetEUDCTimeStampExW(LPCWSTR str); + +ULONG +STDCALL +GetFontAssocStatus(HDC hdc); + +HFONT +STDCALL +GetHFONT(HDC dc); + +DWORD +STDCALL +GetLayout( + HDC hdc +); + +WINBOOL +STDCALL +GetTextExtentExPointWPri(HDC hdc,LPWSTR lpwsz,ULONG cwc,ULONG dxMax,ULONG *pcCh,PULONG pdxOut,LPSIZE psize); + +WINBOOL +STDCALL +GetTextExtentPointI( + HDC hdc, + LPWORD pgiIn, + int cgi, + LPSIZE lpSize +); + +int +STDCALL +GetTextFaceAliasW(HDC hdc,int cChar,LPWSTR pszOut); + +WINBOOL +STDCALL +GetTransform(HDC hdc, DWORD iXform, LPXFORM pxf); + +LONG +STDCALL +HT_Get8BPPFormatPalette(LPPALETTEENTRY pPaletteEntry, USHORT RedGamma,USHORT GreenGamma, USHORT BlueGamma); + +LONG +STDCALL +HT_Get8BPPMaskPalette(LPPALETTEENTRY pPaletteEntry, WINBOOL Use8BPPMaskPal,BYTE CMYMask, USHORT RedGamma, USHORT GreenGamma, USHORT BlueGamma); + +WINBOOL +STDCALL +MirrorRgn(HWND hwnd,HRGN hrgn); + +int +STDCALL +NamedEscape(HDC hdc,PWCHAR pDriver,int nDriver,int iEsc,int cjIn,LPSTR pjIn,int cjOut,LPSTR pjOut); + +DWORD +STDCALL +QueryFontAssocStatus(VOID); + +WINBOOL +STDCALL +RemoveFontMemResourceEx( + HANDLE fh +); + +int +STDCALL +RemoveFontResourceTracking(LPCSTR lpString,int unknown); + +WINBOOL +STDCALL +GetTextExtentExPointI( + HDC hdc, + LPWORD pgiIn, + int cgi, + int nMaxExtent, + LPINT lpnFit, + LPINT alpDx, + LPSIZE lpSize +); + +HBITMAP +STDCALL +SetBitmapAttributes(HBITMAP hbm, DWORD dwFlags); + +HBRUSH +STDCALL +SetBrushAttributes(HBRUSH hbm, DWORD dwFlags); + +COLORREF +STDCALL +SetDCBrushColor( + HDC hdc, + COLORREF crColor +); + +COLORREF +STDCALL +SetDCPenColor( + HDC hdc, + COLORREF crColor +); + +DWORD +STDCALL +SetLayout( + HDC hdc, + DWORD dwLayout +); + +DWORD +STDCALL +SetLayoutWidth(HDC hdc,LONG wox,DWORD dwLayout); + +WINBOOL +STDCALL +SetMagicColors(HDC hdc,PALETTEENTRY peMagic,ULONG Index); + +WINBOOL +STDCALL +SetVirtualResolution(HDC hdc, int cxVirtualDevicePixel,int cyVirtualDevicePixel,int cxVirtualDeviceMm, int cyVirtualDeviceMm); + +int +STDCALL +StartFormPage(HDC hdc); + +VOID +STDCALL +UnloadNetworkFonts(DWORD unknown); + +WINBOOL +STDCALL +bInitSystemAndFontsDirectoriesW(LPWSTR *SystemDir,LPWSTR *FontsDir); + +WINBOOL +STDCALL +bMakePathNameW(LPWSTR lpBuffer,LPCWSTR lpFileName,LPWSTR *lpFilePart,DWORD unknown); + +WINBOOL +STDCALL +GdiAddGlsRecord(HDC hdc,DWORD unknown1,LPCSTR unknown2,LPRECT unknown3); + +HANDLE +STDCALL +GdiConvertMetaFilePict(HGLOBAL hMem); + +DEVMODEW * +STDCALL +GdiConvertToDevmodeW(DEVMODEA *dm); + +HENHMETAFILE +STDCALL +GdiCreateLocalEnhMetaFile(HENHMETAFILE hmo); + +METAFILEPICT * +STDCALL +GdiCreateLocalMetaFilePict(HENHMETAFILE hmo); + +DWORD +STDCALL +GdiGetCharDimensions(HDC hdc,LPTEXTMETRICW lptm,BOOL unk); + +PSHAREDHANDLETABLE +STDCALL +GdiQueryTable(VOID); + +HANDLE +STDCALL +GdiGetSpoolFileHandle( + LPWSTR pwszPrinterName, + LPDEVMODEW pDevmode, + LPWSTR pwszDocName); + +WINBOOL +STDCALL +GdiDeleteSpoolFileHandle( + HANDLE SpoolFileHandle); + +DWORD +STDCALL +GdiGetPageCount( + HANDLE SpoolFileHandle); + +HDC +STDCALL +GdiGetDC( + HANDLE SpoolFileHandle); + +HANDLE +STDCALL +GdiGetPageHandle( + HANDLE SpoolFileHandle, + DWORD Page, + LPDWORD pdwPageType); + +WINBOOL +STDCALL +GdiStartDocEMF( + HANDLE SpoolFileHandle, + DOCINFOW *pDocInfo); + +WINBOOL +STDCALL +GdiStartPageEMF( + HANDLE SpoolFileHandle); + +WINBOOL +STDCALL +GdiPlayPageEMF( + HANDLE SpoolFileHandle, + HANDLE hemf, + RECT *prectDocument, + RECT *prectBorder, + RECT *prectClip); + +WINBOOL +STDCALL +GdiEndPageEMF( + HANDLE SpoolFileHandle, + DWORD dwOptimization); + +WINBOOL +STDCALL +GdiEndDocEMF( + HANDLE SpoolFileHandle); + +WINBOOL +STDCALL +GdiGetDevmodeForPage( + HANDLE SpoolFileHandle, + DWORD dwPageNumber, + PDEVMODEW *pCurrDM, + PDEVMODEW *pLastDM); + +WINBOOL +STDCALL +GdiResetDCEMF( + HANDLE SpoolFileHandle, + PDEVMODEW pCurrDM); + +WINBOOL +STDCALL +GdiPlayEMF +( + LPWSTR pwszPrinterName, + LPDEVMODEW pDevmode, + LPWSTR pwszDocName, + EMFPLAYPROC pfnEMFPlayFn, + HANDLE hPageQuery +); + +WINBOOL +STDCALL +GdiInitSpool(VOID); + +WINBOOL +STDCALL +GdiPlayPrivatePageEMF +( + HANDLE SpoolFileHandle, + DWORD unknown, + RECT *prectDocument +); + +WINBOOL +STDCALL +AlignRects(LPRECT rect, DWORD b, DWORD c, DWORD d); + +LRESULT +STDCALL +DefRawInputProc( + PRAWINPUT* paRawInput, + INT nInput, + UINT cbSizeHeader); + +VOID +STDCALL +DisableProcessWindowsGhosting(VOID); + +WINBOOL +STDCALL +GetLayeredWindowAttributes( + HWND hwnd, + COLORREF *pcrKey, + BYTE *pbAlpha, + DWORD *pdwFlags); + +UINT +STDCALL +GetRawInputBuffer( + PRAWINPUT pData, + PUINT pcbSize, + UINT cbSizeHeader); + +UINT +STDCALL +GetRawInputData( + HRAWINPUT hRawInput, + UINT uiCommand, + LPVOID pData, + PUINT pcbSize, + UINT cbSizeHeader); + +UINT +STDCALL +GetRawInputDeviceList( + PRAWINPUTDEVICELIST pRawInputDeviceList, + PUINT puiNumDevices, + UINT cbSize); + +UINT +STDCALL +GetRegisteredRawInputDevices( + PRAWINPUTDEVICE pRawInputDevices, + PUINT puiNumDevices, + UINT cbSize); + +int +STDCALL +GetWindowRgnBox( + HWND hWnd, + LPRECT lprc); + +WINBOOL +STDCALL +IsGUIThread( + WINBOOL bConvert); + +WINBOOL +STDCALL +IsWinEventHookInstalled( + DWORD event); + +WINBOOL +STDCALL +PrintWindow( + HWND hwnd, + HDC hdcBlt, + UINT nFlags); -#endif /* UNICODE and ASCII defines */ +WINBOOL +STDCALL +RegisterRawInputDevices( + PCRAWINPUTDEVICE pRawInputDevices, + UINT uiNumDevices, + UINT cbSize); - HWND STDCALL GetAncestor(HWND hWnd, UINT GaFlags); -WINBOOL STDCALL AbnormalTermination(VOID); -int STDCALL AbortDoc(HDC); -WINBOOL STDCALL AbortPath(HDC); -WINBOOL STDCALL AbortPrinter(HANDLE); -WINBOOL CALLBACK AbortProc(HDC, int); -WINBOOL STDCALL AccessCheck( - PSECURITY_DESCRIPTOR pSecurityDescriptor, - HANDLE ClientToken, - DWORD DesiredAccess, - PGENERIC_MAPPING GenericMapping, - PPRIVILEGE_SET PrivilegeSet, - LPDWORD PrivilegeSetLength, - LPDWORD GrantedAccess, - LPBOOL AccessStatus - ); +DWORD +STDCALL +SetSysColorsTemp( + const COLORREF *pPens, + const HBRUSH *pBrushes, + DWORD n + ); + +INT +STDCALL +UserClientDllInitialize( + HINSTANCE inst, + DWORD reason, + LPVOID reserved + ); + +DWORD +STDCALL +DrawMenuBarTemp( + HWND hwnd, + HDC hDC, + LPRECT lprect, + HMENU hMenu, + HFONT hFont + ); + +UINT +STDCALL +UserRealizePalette ( HDC hDC ); + +WINBOOL +STDCALL +DdeFreeStringHandle ( DWORD idInst, HSZ hsz ); + +WINBOOL +STDCALL +DeregisterShellHookWindow ( HWND hWnd ); + +WINBOOL +STDCALL +RegisterShellHookWindow ( HWND hWnd ); + +WINBOOL +STDCALL +EndTask( + HWND hWnd, + WINBOOL fShutDown, + WINBOOL fForce + ); + +DWORD +STDCALL +InternalGetWindowText( + HWND hWnd, + LPWSTR lpString, + int nMaxCount + ); + +WINBOOL +STDCALL +IsHungAppWindow ( HWND hwnd ); + +VOID +STDCALL +NotifyWinEvent( + DWORD event, + HWND hwnd, + LONG idObject, + LONG idChild + ); + +HWINEVENTHOOK +STDCALL +SetWinEventHook( + DWORD eventMin, + DWORD eventMax, + HMODULE hmodWinEventProc, + WINEVENTPROC pfnWinEventProc, + DWORD idProcess, + DWORD idThread, + DWORD dwFlags + ); + +VOID +STDCALL +SwitchToThisWindow( + HWND hwnd, + WINBOOL fUnknown ); + +WINBOOL +STDCALL +UnhookWinEvent ( HWINEVENTHOOK hWinEventHook ); + +LRESULT +STDCALL +EditWndProc( + HWND hWnd, + UINT Msg, + WPARAM wParam, + LPARAM lParam + ); + +WINBOOL +STDCALL +SetDeskWallpaper ( LPCSTR filename ); + +DWORD +STDCALL +GetAppCompatFlags ( HTASK hTask ); + +HDESK +STDCALL +GetInputDesktop ( VOID ); + +UINT +STDCALL +GetInternalWindowPos( + HWND hwnd, + LPRECT rectWnd, + LPPOINT ptIcon + ); + +HRESULT +STDCALL +GetProgmanWindow ( VOID ); + +HRESULT +STDCALL +GetTaskmanWindow ( VOID ); + +DWORD +STDCALL +SetWindowStationUser( + DWORD x1, + DWORD x2 + ); + +UINT +STDCALL +SetSystemTimer( + HWND hwnd, + UINT id, + UINT timeout, + TIMERPROC proc + ); + +WINBOOL +STDCALL +SetSystemMenu( + HWND hwnd, + HMENU hMenu + ); + +HRESULT +STDCALL +SetTaskmanWindow ( DWORD x ); + +HRESULT +STDCALL +SetProgmanWindow ( DWORD x ); + +VOID +STDCALL +ScrollChildren( + HWND hWnd, + UINT uMsg, + WPARAM wParam, + LPARAM lParam + ); + +VOID +STDCALL +LoadLocalFonts ( VOID ); + +VOID +STDCALL +LoadRemoteFonts ( VOID ); + +VOID +STDCALL +SetInternalWindowPos( + HWND hwnd, + UINT showCmd, + LPRECT rect, + LPPOINT pt + ); + +VOID +STDCALL +RegisterSystemThread( + DWORD flags, + DWORD reserved + ); + +DWORD +STDCALL +RegisterLogonProcess( + HANDLE hprocess, + BOOL x + ); + +WINBOOL +STDCALL +KillSystemTimer( + HWND hwnd, + UINT id + ); + +DWORD +STDCALL +RegisterTasklist ( DWORD x ); + +DWORD +STDCALL +SetLogonNotifyWindow ( HWINSTA hwinsta, HWND hwnd ); + +WORD +STDCALL +CascadeChildWindows ( HWND hWndParent, WORD wFlags ); -WINBOOL STDCALL AccessCheckAndAuditAlarm( - LPCTSTR SubsystemName, - LPVOID HandleId, - LPTSTR ObjectTypeName, - LPTSTR ObjectName, - PSECURITY_DESCRIPTOR SecurityDescriptor, - DWORD DesiredAccess, - PGENERIC_MAPPING GenericMapping, - WINBOOL ObjectCreation, - LPDWORD GrantedAccess, - LPBOOL AccessStatus, - LPBOOL pfGenerateOnClose - ); +WORD +STDCALL +TileChildWindows ( HWND hWndParent, WORD wFlags ); + +WINBOOL +STDCALL +TranslateMessageEx ( CONST MSG *lpMsg, DWORD unk ); + +WINBOOL +STDCALL +DrawFrame( + HDC hDc, + RECT *r, + DWORD width, + DWORD type + ); + +WINBOOL +STDCALL +LockWindowStation ( HWINSTA hWinSta ); + +WINBOOL +STDCALL +UnlockWindowStation ( HWINSTA hWinSta ); + +WINBOOL +STDCALL +GetAccCursorInfo ( PCURSORINFO pci ); + +LPWSTR +STDCALL +MB_GetString ( DWORD string ); + +WINBOOL +STDCALL +ClientThreadSetup ( VOID ); + +WINBOOL +STDCALL +PolyPatBlt( + HDC hDC, + DWORD dwRop, + PPATRECT pRects, + int cRects, + ULONG Reserved + ); + +DWORD +STDCALL +WCSToMBEx( + WORD CodePage, + LPWSTR UnicodeString, + LONG UnicodeSize, + LPSTR *MBString, + LONG MBSize, + BOOL Allocate + ); + +DWORD +STDCALL +MBToWCSEx( + WORD CodePage, + LPSTR MBString, + LONG MBSize, + LPWSTR *UnicodeString, + LONG UnicodeSize, + BOOL Allocate + ); + +HWND +STDCALL +GetAncestor ( HWND hWnd, UINT GaFlags ); + +WINBOOL +STDCALL +AbnormalTermination ( VOID ); + +int +STDCALL +AbortDoc ( HDC ); + +WINBOOL +STDCALL +AbortPath ( HDC ); + +WINBOOL +STDCALL +AbortPrinter ( HANDLE ); + +WINBOOL +CALLBACK +AbortProc ( HDC, int ); + +WINBOOL +STDCALL +AccessCheck( + PSECURITY_DESCRIPTOR pSecurityDescriptor, + HANDLE ClientToken, + DWORD DesiredAccess, + PGENERIC_MAPPING GenericMapping, + PPRIVILEGE_SET PrivilegeSet, + LPDWORD PrivilegeSetLength, + LPDWORD GrantedAccess, + LPBOOL AccessStatus + ); #ifndef __NTDRIVER__ LONG @@ -1515,6 +5507,7 @@ GetThreadTimes( ); +__declspec(noreturn) VOID STDCALL ExitThread( @@ -2760,15 +6753,6 @@ _llseek( ); -WINBOOL -STDCALL -IsTextUnicode( - CONST LPVOID lpBuffer, - int cb, - LPINT lpi - ); - - DWORD STDCALL TlsAlloc( @@ -2796,6 +6780,16 @@ TlsFree( DWORD dwTlsIndex ); +typedef VOID STDCALL (*PFLS_CALLBACK_FUNCTION)(PVOID lpFlsData); + +DWORD STDCALL FlsAlloc(PFLS_CALLBACK_FUNCTION lpCallback); + +BOOL STDCALL FlsFree(DWORD dwFlsIndex); + +PVOID STDCALL FlsGetValue(DWORD dwFlsIndex); + +BOOL STDCALL FlsSetValue(DWORD dwFlsIndex, PVOID lpFlsData); + DWORD STDCALL SleepEx( @@ -4563,7 +8557,7 @@ CheckMenuItem( UINT uCheck); -WINBOOL +UINT STDCALL EnableMenuItem( HMENU hMenu, @@ -4906,7 +8900,6 @@ GetScrollRange( LPINT lpMinPos, LPINT lpMaxPos); - WINBOOL STDCALL ShowScrollBar( @@ -4914,7 +8907,6 @@ ShowScrollBar( int wBar, WINBOOL bShow); - WINBOOL STDCALL EnableScrollBar( @@ -4922,21 +8914,25 @@ EnableScrollBar( UINT wSBflags, UINT wArrows); - +BOOL +STDCALL +GetScrollBarInfo( + HWND hwnd, + LONG idObject, + PSCROLLBARINFO psbi); + WINBOOL STDCALL GetClientRect( HWND hWnd, LPRECT lpRect); - WINBOOL STDCALL GetWindowRect( HWND hWnd, LPRECT lpRect); - WINBOOL STDCALL AdjustWindowRect( @@ -4944,7 +8940,6 @@ AdjustWindowRect( DWORD dwStyle, WINBOOL bMenu); - WINBOOL STDCALL AdjustWindowRectEx( @@ -4955,33 +8950,40 @@ AdjustWindowRectEx( WINBOOL STDCALL -SetWindowContextHelpId(HWND, DWORD); +SetWindowContextHelpId( + HWND hwnd, + DWORD dwContextHelpId); DWORD STDCALL -GetWindowContextHelpId(HWND); +GetWindowContextHelpId( + HWND hwnd); WINBOOL STDCALL -SetMenuContextHelpId(HMENU, DWORD); +SetMenuContextHelpId( + HMENU hmenu, + DWORD dwContextHelpId); DWORD STDCALL -GetMenuContextHelpId(HMENU); +GetMenuContextHelpId( + HMENU hmenu); - WINBOOL STDCALL MessageBeep( UINT uType); - +HCURSOR +STDCALL +CopyCursor(HCURSOR pcur); + int STDCALL ShowCursor( WINBOOL bShow); - WINBOOL STDCALL SetCursorPos( @@ -5277,6 +9279,11 @@ GetDesktopWindow( HWND STDCALL +GetShellWindow(VOID); + + +HWND +STDCALL GetParent( HWND hWnd); @@ -6457,7 +10464,7 @@ ColorMatchToTarget(HDC,HDC,DWORD); HPROPSHEETPAGE STDCALL -CreatePropertySheetPageA(LPCPROPSHEETPAGE lppsp); +CreatePropertySheetPageA(LPCPROPSHEETPAGEA lppsp); WINBOOL STDCALL @@ -6920,31 +10927,37 @@ CommDlgExtendedError(VOID); #define CommDlg_OpenSave_GetSpecW(_hdlg, _psz, _cbmax) SNDMSG(_hdlg, CDM_GETSPEC, (WPARAM)_cbmax, (LPARAM)(LPWSTR)_psz) +#ifndef _DISABLE_TIDENTS #ifdef UNICODE #define CommDlg_OpenSave_GetSpec CommDlg_OpenSave_GetSpecW #else #define CommDlg_OpenSave_GetSpec CommDlg_OpenSave_GetSpecA #endif /* !UNICODE */ +#endif /* _DISABLE_TIDENTS */ #define CommDlg_OpenSave_GetFilePathA(_hdlg, _psz, _cbmax) SNDMSG(_hdlg, CDM_GETFILEPATH, (WPARAM)_cbmax, (LPARAM)(LPSTR)_psz) #define CommDlg_OpenSave_GetFilePathW(_hdlg, _psz, _cbmax) SNDMSG(_hdlg, CDM_GETFILEPATH, (WPARAM)_cbmax, (LPARAM)(LPWSTR)_psz) +#ifndef _DISABLE_TIDENTS #ifdef UNICODE #define CommDlg_OpenSave_GetFilePath CommDlg_OpenSave_GetFilePathW #else #define CommDlg_OpenSave_GetFilePath CommDlg_OpenSave_GetFilePathA #endif /* !UNICODE */ +#endif /* _DISABLE_TIDENTS */ #define CommDlg_OpenSave_GetFolderPathA(_hdlg, _psz, _cbmax) SNDMSG(_hdlg, CDM_GETFOLDERPATH, (WPARAM)_cbmax, (LPARAM)(LPSTR)_psz) #define CommDlg_OpenSave_GetFolderPathW(_hdlg, _psz, _cbmax) SNDMSG(_hdlg, CDM_GETFOLDERPATH, (WPARAM)_cbmax, (LPARAM)(LPWSTR)_psz) +#ifndef _DISABLE_TIDENTS #ifdef UNICODE #define CommDlg_OpenSave_GetFolderPath CommDlg_OpenSave_GetFolderPathW #else #define CommDlg_OpenSave_GetFolderPath CommDlg_OpenSave_GetFolderPathA #endif /* !UNICODE */ +#endif /* _DISABLE_TIDENTS */ #define CommDlg_OpenSave_GetFolderIDList(_hdlg, _pidl, _cbmax) SNDMSG(_hdlg, CDM_GETFOLDERIDLIST, (WPARAM)_cbmax, (LPARAM)(LPVOID)_pidl) @@ -7394,6 +11407,16 @@ UnlockServiceDatabase( SC_LOCK ScLock ); +WINBOOL +STDCALL +QueryServiceStatusEx( + SC_HANDLE hService, + SC_STATUS_TYPE InfoLevel, + LPBYTE lpBuffer, + DWORD cbBufSize, + LPDWORD pcbBytesNeeded + ); + /* Extensions to OpenGL */ int STDCALL @@ -7462,6 +11485,7 @@ wglSwapLayerBuffers(HDC, UINT); There doesn't seem to be any difference. */ +#ifndef _DISABLE_TIDENTS #ifdef UNICODE #define wglUseFontBitmaps wglUseFontBitmapsW #define wglUseFontOutlines wglUseFontOutlinesW @@ -7469,37 +11493,38 @@ wglSwapLayerBuffers(HDC, UINT); #define wglUseFontBitmaps wglUseFontBitmapsA #define wglUseFontOutlines wglUseFontOutlinesA #endif /* !UNICODE */ +#endif /* _DISABLE_TIDENTS */ /* ------------------------------------- */ /* From shellapi.h in old Cygnus headers */ -WINBOOL WINAPI +WINBOOL STDCALL DragQueryPoint (HDROP, LPPOINT); -void WINAPI +void STDCALL DragFinish (HDROP); -void WINAPI +void STDCALL DragAcceptFiles (HWND, WINBOOL); -HICON WINAPI +HICON STDCALL DuplicateIcon (HINSTANCE, HICON); /* end of stuff from shellapi.h in old Cygnus headers */ /* -------------------------------------------------- */ /* From ddeml.h in old Cygnus headers */ -HCONV WINAPI DdeConnect (DWORD, HSZ, HSZ, CONVCONTEXT *); -WINBOOL WINAPI DdeDisconnect (HCONV); -WINBOOL WINAPI DdeFreeDataHandle (HDDEDATA); -DWORD WINAPI DdeGetData (HDDEDATA, BYTE *, DWORD, DWORD); -UINT WINAPI DdeGetLastError (DWORD); -HDDEDATA WINAPI DdeNameService (DWORD, HSZ, HSZ, UINT); -WINBOOL WINAPI DdePostAdvise (DWORD, HSZ, HSZ); -HCONV WINAPI DdeReconnect (HCONV); -WINBOOL WINAPI DdeUninitialize (DWORD); -int WINAPI DdeCmpStringHandles (HSZ, HSZ); -HDDEDATA WINAPI DdeCreateDataHandle (DWORD, LPBYTE, DWORD, DWORD, HSZ, +HCONV STDCALL DdeConnect (DWORD, HSZ, HSZ, CONVCONTEXT *); +WINBOOL STDCALL DdeDisconnect (HCONV); +WINBOOL STDCALL DdeFreeDataHandle (HDDEDATA); +DWORD STDCALL DdeGetData (HDDEDATA, BYTE *, DWORD, DWORD); +UINT STDCALL DdeGetLastError (DWORD); +HDDEDATA STDCALL DdeNameService (DWORD, HSZ, HSZ, UINT); +WINBOOL STDCALL DdePostAdvise (DWORD, HSZ, HSZ); +HCONV STDCALL DdeReconnect (HCONV); +WINBOOL STDCALL DdeUninitialize (DWORD); +int STDCALL DdeCmpStringHandles (HSZ, HSZ); +HDDEDATA STDCALL DdeCreateDataHandle (DWORD, LPBYTE, DWORD, DWORD, HSZ, UINT, UINT); /* end of stuff from ddeml.h in old Cygnus headers */ @@ -7520,94 +11545,81 @@ VOID CopyMemory(PVOID Destination, CONST VOID* Source, DWORD Length); DWORD STDCALL GetCurrentTime(VOID); -void WINAPI +void STDCALL SHAddToRecentDocs (UINT, LPCVOID); -LPITEMIDLIST WINAPI +LPITEMIDLIST STDCALL SHBrowseForFolder (LPBROWSEINFO); -void WINAPI +void STDCALL SHChangeNotify (LONG, UINT, LPCVOID, LPCVOID); -int WINAPI -SHFileOperation (LPSHFILEOPSTRUCT); +int STDCALL +SHFileOperationA (LPSHFILEOPSTRUCTA); + +int STDCALL +SHFileOperationW (LPSHFILEOPSTRUCTW); -void WINAPI +void STDCALL SHFreeNameMappings (HANDLE); /* Define when SHELLFOLDER is defined. -HRESULT WINAPI +HRESULT STDCALL SHGetDataFromIDList (LPSHELLFOLDER, LPCITEMIDLIST, int, PVOID, int); -HRESULT WINAPI +HRESULT STDCALL SHGetDesktopFolder (LPSHELLFOLDER); */ -DWORD WINAPI -SHGetFileInfo (LPCTSTR, DWORD, SHFILEINFO FAR *, UINT, UINT); - /* Define when IUnknown is defined. -HRESULT WINAPI +HRESULT STDCALL SHGetInstanceExplorer (IUnknown **); */ /* Define when MALLOC is defined. -HRESULT WINAPI +HRESULT STDCALL SHGetMalloc (LPMALLOC *); */ -WINBOOL WINAPI -SHGetPathFromIDList (LPCITEMIDLIST, LPTSTR); - -HRESULT WINAPI +HRESULT STDCALL SHGetSpecialFolderLocation (HWND, int, LPITEMIDLIST *); /* Define when REFCLSID is defined. -HRESULT WINAPI +HRESULT STDCALL SHLoadInProc (REFCLSID); */ /* Win32 Fibers */ -typedef -VOID (WINAPI *PFIBER_START_ROUTINE) ( - IN LPVOID lpFiberArgument - ); -typedef PFIBER_START_ROUTINE LPFIBER_START_ROUTINE; +#define FIBER_FLAG_FLOAT_SWITCH (1) -LPVOID -STDCALL -ConvertThreadToFiber ( - LPVOID lpArgument - ); -LPVOID -STDCALL -CreateFiber ( - DWORD dwStackSize, - LPFIBER_START_ROUTINE lpStartAddress, - LPVOID lpArgument - ); -VOID -STDCALL -DeleteFiber( - LPVOID lpFiber - ); -PVOID -STDCALL -GetCurrentFiber ( - VOID - ); -PVOID -STDCALL -GetFiberData ( - VOID - ); -VOID -STDCALL -SwitchToFiber ( - LPVOID lpFiber - ); +BOOL STDCALL ConvertFiberToThread(void); + +LPVOID STDCALL ConvertThreadToFiber(LPVOID lpParameter); + +LPVOID STDCALL ConvertThreadToFiberEx(LPVOID lpParameter, DWORD dwFlags); + +LPVOID STDCALL CreateFiber +( + SIZE_T dwStackSize, + LPFIBER_START_ROUTINE lpStartAddress, + LPVOID lpParameter +); + +LPVOID STDCALL CreateFiberEx +( + SIZE_T dwStackCommitSize, + SIZE_T dwStackReserveSize, + DWORD dwFlags, + LPFIBER_START_ROUTINE lpStartAddress, + LPVOID lpParameter +); + +void STDCALL DeleteFiber(LPVOID lpFiber); + +void STDCALL SwitchToFiber(LPVOID lpFiber); +#define GetFiberData() *(LPVOID *)(((PNT_TIB)NtCurrentTeb())->Fib.FiberData) WINBOOL STDCALL RegisterServicesProcess(DWORD ServicesProcessId); diff --git a/include/icmpapi.h b/include/icmpapi.h new file mode 100644 index 0000000..42c6371 --- /dev/null +++ b/include/icmpapi.h @@ -0,0 +1,94 @@ +/* + * Interface to the ICMP functions. + * + * Copyright (C) 1999 Francois Gouget + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * 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. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef __WINE_ICMPAPI_H +#define __WINE_ICMPAPI_H + +HANDLE STDCALL IcmpCreateFile( + VOID + ); + +HANDLE STDCALL Icmp6CreateFile( + VOID + ); + +WINBOOL STDCALL IcmpCloseHandle( + HANDLE IcmpHandle + ); + +DWORD STDCALL IcmpSendEcho( + HANDLE IcmpHandle, + IPAddr DestinationAddress, + LPVOID RequestData, + WORD RequestSize, + PIP_OPTION_INFORMATION RequestOptions, + LPVOID ReplyBuffer, + DWORD ReplySize, + DWORD Timeout + ); + +DWORD +STDCALL +IcmpSendEcho2( + HANDLE IcmpHandle, + HANDLE Event, + FARPROC ApcRoutine, + PVOID ApcContext, + IPAddr DestinationAddress, + LPVOID RequestData, + WORD RequestSize, + PIP_OPTION_INFORMATION RequestOptions, + LPVOID ReplyBuffer, + DWORD ReplySize, + DWORD Timeout + ); + +DWORD +STDCALL +Icmp6SendEcho2( + HANDLE IcmpHandle, + HANDLE Event, + FARPROC ApcRoutine, + PVOID ApcContext, + struct sockaddr_in6 *SourceAddress, + struct sockaddr_in6 *DestinationAddress, + LPVOID RequestData, + WORD RequestSize, + PIP_OPTION_INFORMATION RequestOptions, + LPVOID ReplyBuffer, + DWORD ReplySize, + DWORD Timeout + ); + +DWORD +STDCALL +IcmpParseReplies( + LPVOID ReplyBuffer, + DWORD ReplySize + ); + +DWORD +STDCALL +Icmp6ParseReplies( + LPVOID ReplyBuffer, + DWORD ReplySize + ); + +#endif /* __WINE_ICMPAPI_H */ diff --git a/include/ipexport.h b/include/ipexport.h new file mode 100644 index 0000000..154a2a1 --- /dev/null +++ b/include/ipexport.h @@ -0,0 +1,122 @@ +/* + * Defines the types and macros used by the ICMP API, see icmpapi.h. + * + * Copyright (C) 1999 Francois Gouget + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * 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. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef __WINE_IPEXPORT_H +#define __WINE_IPEXPORT_H + +typedef unsigned long IPAddr; +typedef unsigned long IPMask; +typedef unsigned long IP_STATUS; + +struct ip_option_information +{ + unsigned char Ttl; + unsigned char Tos; + unsigned char Flags; + unsigned char OptionsSize; + unsigned char* OptionsData; +}; + +#define IP_FLAG_DF 0x2 + +#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 + + +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; +}; + +typedef struct ip_option_information IP_OPTION_INFORMATION, *PIP_OPTION_INFORMATION; + +typedef struct icmp_echo_reply ICMP_ECHO_REPLY, *PICMP_ECHO_REPLY; + + +#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) + + +#define MAX_ADAPTER_NAME 128 + +typedef struct _IP_ADAPTER_INDEX_MAP { + ULONG Index; + WCHAR Name[MAX_ADAPTER_NAME]; +} IP_ADAPTER_INDEX_MAP, *PIP_ADAPTER_INDEX_MAP; + +typedef struct _IP_INTERFACE_INFO { + LONG NumAdapters; + IP_ADAPTER_INDEX_MAP Adapter[1]; +} 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; + +typedef struct _IP_ADAPTER_ORDER_MAP { + ULONG NumAdapters; + ULONG AdapterOrder[1]; +} IP_ADAPTER_ORDER_MAP, *PIP_ADAPTER_ORDER_MAP; + +#endif /* __WINE_IPEXPORT_H */ diff --git a/include/iphlpapi.h b/include/iphlpapi.h new file mode 100644 index 0000000..b732097 --- /dev/null +++ b/include/iphlpapi.h @@ -0,0 +1,178 @@ +/* WINE iphlpapi.h + * Copyright (C) 2003 Juan Lang + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * 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. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +#ifndef WINE_IPHLPAPI_H__ +#define WINE_IPHLPAPI_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include + +DWORD +STDCALL +NhpAllocateAndGetInterfaceInfoFromStack( + OUT IP_INTERFACE_NAME_INFO **ppTable, + OUT PDWORD pdwCount, + IN BOOL bOrder, + IN HANDLE hHeap, + IN DWORD dwFlags + ); +DWORD STDCALL AllocateAndGetIfTableFromStack(PMIB_IFTABLE *ppIfTable, + BOOL bOrder, HANDLE heap, DWORD flags); +DWORD STDCALL AllocateAndGetIpAddrTableFromStack(PMIB_IPADDRTABLE *ppIpAddrTable, + BOOL bOrder, HANDLE heap, DWORD flags); +DWORD STDCALL AllocateAndGetIpForwardTableFromStack(PMIB_IPFORWARDTABLE * + ppIpForwardTable, BOOL bOrder, HANDLE heap, DWORD flags); +DWORD STDCALL AllocateAndGetIpNetTableFromStack(PMIB_IPNETTABLE *ppIpNetTable, + BOOL bOrder, HANDLE heap, DWORD flags); +DWORD STDCALL AllocateAndGetTcpTableFromStack(PMIB_TCPTABLE *ppTcpTable, + BOOL bOrder, HANDLE heap, DWORD flags); +DWORD STDCALL AllocateAndGetUdpTableFromStack(PMIB_UDPTABLE *ppUdpTable, + BOOL bOrder, HANDLE heap, DWORD flags); + +DWORD STDCALL GetNumberOfInterfaces(PDWORD pdwNumIf); + +DWORD STDCALL GetIfEntry(PMIB_IFROW pIfRow); + +DWORD STDCALL GetIfTable(PMIB_IFTABLE pIfTable, PULONG pdwSize, WINBOOL bOrder); + +DWORD STDCALL GetIpAddrTable(PMIB_IPADDRTABLE pIpAddrTable, PULONG pdwSize, + WINBOOL bOrder); + +DWORD STDCALL GetIpNetTable(PMIB_IPNETTABLE pIpNetTable, PULONG pdwSize, + WINBOOL bOrder); + +DWORD STDCALL GetIpForwardTable(PMIB_IPFORWARDTABLE pIpForwardTable, + PULONG pdwSize, WINBOOL bOrder); + +DWORD STDCALL GetTcpTable(PMIB_TCPTABLE pTcpTable, PDWORD pdwSize, WINBOOL bOrder); + +DWORD STDCALL GetUdpTable(PMIB_UDPTABLE pUdpTable, PDWORD pdwSize, WINBOOL bOrder); + +DWORD STDCALL GetIpStatistics(PMIB_IPSTATS pStats); + +DWORD STDCALL GetIpStatisticsEx(PMIB_IPSTATS pStats, DWORD dwFamily); + +DWORD STDCALL GetIcmpStatistics(PMIB_ICMP pStats); + +DWORD STDCALL GetTcpStatistics(PMIB_TCPSTATS pStats); + +DWORD STDCALL GetTcpStatisticsEx(PMIB_TCPSTATS pStats, DWORD dwFamily); + +DWORD STDCALL GetUdpStatistics(PMIB_UDPSTATS pStats); + +DWORD STDCALL GetUdpStatisticsEx(PMIB_UDPSTATS pStats, DWORD dwFamily); + +DWORD STDCALL SetIfEntry(PMIB_IFROW pIfRow); + +DWORD STDCALL CreateIpForwardEntry(PMIB_IPFORWARDROW pRoute); + +DWORD STDCALL SetIpForwardEntry(PMIB_IPFORWARDROW pRoute); + +DWORD STDCALL DeleteIpForwardEntry(PMIB_IPFORWARDROW pRoute); + +DWORD STDCALL SetIpStatistics(PMIB_IPSTATS pIpStats); + +DWORD STDCALL SetIpTTL(UINT nTTL); + +DWORD STDCALL CreateIpNetEntry(PMIB_IPNETROW pArpEntry); + +DWORD STDCALL SetIpNetEntry(PMIB_IPNETROW pArpEntry); + +DWORD STDCALL DeleteIpNetEntry(PMIB_IPNETROW pArpEntry); + +DWORD STDCALL FlushIpNetTable(DWORD dwIfIndex); + +DWORD STDCALL CreateProxyArpEntry(DWORD dwAddress, DWORD dwMask, + DWORD dwIfIndex); + +DWORD STDCALL DeleteProxyArpEntry(DWORD dwAddress, DWORD dwMask, + DWORD dwIfIndex); + +DWORD STDCALL SetTcpEntry(PMIB_TCPROW pTcpRow); + +DWORD STDCALL GetInterfaceInfo(PIP_INTERFACE_INFO pIfTable, PULONG dwOutBufLen); + +DWORD STDCALL GetUniDirectionalAdapterInfo( + PIP_UNIDIRECTIONAL_ADAPTER_ADDRESS pIPIfInfo, PULONG dwOutBufLen); + +DWORD STDCALL GetBestInterface(IPAddr dwDestAddr, PDWORD pdwBestIfIndex); + +DWORD STDCALL GetBestRoute(DWORD dwDestAddr, DWORD dwSourceAddr, + PMIB_IPFORWARDROW pBestRoute); + +DWORD STDCALL NotifyAddrChange(PHANDLE Handle, LPOVERLAPPED overlapped); + +DWORD STDCALL NotifyRouteChange(PHANDLE Handle, LPOVERLAPPED overlapped); + +DWORD STDCALL GetAdapterIndex(LPWSTR AdapterName,PULONG IfIndex); + +DWORD STDCALL AddIPAddress(IPAddr Address, IPMask IpMask, DWORD IfIndex, + PULONG NTEContext, PULONG NTEInstance); + +DWORD STDCALL DeleteIPAddress(ULONG NTEContext); + +DWORD STDCALL GetNetworkParams(PFIXED_INFO pFixedInfo, PULONG pOutBufLen); + +DWORD STDCALL GetAdaptersInfo(PIP_ADAPTER_INFO pAdapterInfo, PULONG pOutBufLen); + +DWORD STDCALL GetPerAdapterInfo(ULONG IfIndex, + PIP_PER_ADAPTER_INFO pPerAdapterInfo, PULONG pOutBufLen); + +DWORD STDCALL IpReleaseAddress(PIP_ADAPTER_INDEX_MAP AdapterInfo); + +DWORD STDCALL IpRenewAddress(PIP_ADAPTER_INDEX_MAP AdapterInfo); + +DWORD STDCALL SendARP(IPAddr DestIP, IPAddr SrcIP, PULONG pMacAddr, + PULONG PhyAddrLen); + +WINBOOL STDCALL GetRTTAndHopCount(IPAddr DestIpAddress, PULONG HopCount, + ULONG MaxHops, PULONG RTT); + +DWORD STDCALL GetFriendlyIfIndex(DWORD IfIndex); + +DWORD STDCALL EnableRouter(HANDLE* pHandle, OVERLAPPED* pOverlapped); + +DWORD STDCALL UnenableRouter(OVERLAPPED* pOverlapped, LPDWORD lpdwEnableCount); + +DWORD STDCALL GetIcmpStatisticsEx(PMIB_ICMP_EX pStats,DWORD dwFamily); + +DWORD STDCALL NhpAllocateAndGetInterfaceInfoFromStack(IP_INTERFACE_NAME_INFO **ppTable,PDWORD pdwCount,WINBOOL bOrder,HANDLE hHeap,DWORD dwFlags); + +DWORD STDCALL GetBestInterfaceEx(struct sockaddr *pDestAddr,PDWORD pdwBestIfIndex); + +WINBOOL STDCALL CancelIPChangeNotify(LPOVERLAPPED notifyOverlapped); + +PIP_ADAPTER_ORDER_MAP STDCALL GetAdapterOrderMap(VOID); + +DWORD STDCALL GetAdaptersAddresses(ULONG Family,DWORD Flags,PVOID Reserved,PIP_ADAPTER_ADDRESSES pAdapterAddresses,PULONG pOutBufLen); + +DWORD STDCALL DisableMediaSense(HANDLE *pHandle,OVERLAPPED *pOverLapped); + +DWORD STDCALL RestoreMediaSense(OVERLAPPED* pOverlapped,LPDWORD lpdwEnableCount); + +DWORD STDCALL GetIpErrorString(IP_STATUS ErrorCode,PWCHAR Buffer,PDWORD Size); + +#ifdef __cplusplus +} +#endif + +#endif /* WINE_IPHLPAPI_H__ */ diff --git a/include/ipifcons.h b/include/ipifcons.h new file mode 100644 index 0000000..76a2453 --- /dev/null +++ b/include/ipifcons.h @@ -0,0 +1,40 @@ +/* WINE ipifcons.h + * Copyright (C) 2003 Juan Lang + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * 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. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +#ifndef WINE_IPIFCONS_H__ +#define WINE_IPIFCONS_H__ + +#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 + +#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 + +#endif /* WINE_ROUTING_IPIFCONS_H__ */ diff --git a/include/iprtrmib.h b/include/iprtrmib.h new file mode 100644 index 0000000..9202a54 --- /dev/null +++ b/include/iprtrmib.h @@ -0,0 +1,289 @@ +/* WINE iprtrmib.h + * Copyright (C) 2003 Juan Lang + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * 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. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +#ifndef WINE_IPRTRMIB_H__ +#define WINE_IPRTRMIB_H__ + +#define MAX_INTERFACE_NAME_LEN 256 + +#include + +#define MAXLEN_IFDESCR 256 +#define MAXLEN_PHYSADDR 8 + +typedef struct _MIB_IFROW +{ + 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 _MIB_IFTABLE +{ + DWORD dwNumEntries; + MIB_IFROW table[1]; +} MIB_IFTABLE, *PMIB_IFTABLE; + +typedef struct _MIBICMPSTATS +{ + 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; + +typedef struct _MIBICMPINFO +{ + MIBICMPSTATS icmpInStats; + MIBICMPSTATS icmpOutStats; +} MIBICMPINFO; + +typedef struct _MIB_ICMP +{ + MIBICMPINFO stats; +} MIB_ICMP,*PMIB_ICMP; + +typedef struct _MIB_UDPSTATS +{ + DWORD dwInDatagrams; + DWORD dwNoPorts; + DWORD dwInErrors; + DWORD dwOutDatagrams; + DWORD dwNumAddrs; +} MIB_UDPSTATS,*PMIB_UDPSTATS; + +typedef struct _MIB_UDPROW +{ + DWORD dwLocalAddr; + DWORD dwLocalPort; +} MIB_UDPROW, *PMIB_UDPROW; + +typedef struct _MIB_UDPTABLE +{ + DWORD dwNumEntries; + MIB_UDPROW table[1]; +} MIB_UDPTABLE, *PMIB_UDPTABLE; + +typedef struct _MIB_TCPSTATS +{ + 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 _MIBICMPSTATS_EX +{ + DWORD dwMsgs; + DWORD dwErrors; + DWORD rgdwTypeCount[256]; +} MIBICMPSTATS_EX, *PMIBICMPSTATS_EX; + +typedef struct _MIB_ICMP_EX +{ + MIBICMPSTATS_EX icmpInStats; + MIBICMPSTATS_EX icmpOutStats; +} MIB_ICMP_EX,*PMIB_ICMP_EX; + +typedef struct _MIB_TCPROW +{ + DWORD dwState; + DWORD dwLocalAddr; + DWORD dwLocalPort; + DWORD dwRemoteAddr; + DWORD dwRemotePort; +} MIB_TCPROW, *PMIB_TCPROW; + +#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 + +typedef struct _MIB_TCPTABLE +{ + DWORD dwNumEntries; + MIB_TCPROW table[1]; +} MIB_TCPTABLE, *PMIB_TCPTABLE; + +typedef struct _MIB_IPSTATS +{ + 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 _MIB_IPADDRROW +{ + DWORD dwAddr; + DWORD dwIndex; + DWORD dwMask; + DWORD dwBCastAddr; + DWORD dwReasmSize; + unsigned short unused1; + unsigned short wType; +} MIB_IPADDRROW, *PMIB_IPADDRROW; + +typedef struct _MIB_IPADDRTABLE +{ + DWORD dwNumEntries; + MIB_IPADDRROW table[1]; +} MIB_IPADDRTABLE, *PMIB_IPADDRTABLE; + + +typedef struct _MIB_IPFORWARDNUMBER +{ + DWORD dwValue; +}MIB_IPFORWARDNUMBER,*PMIB_IPFORWARDNUMBER; + +typedef struct _MIB_IPFORWARDROW +{ + 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; + +#define MIB_IPROUTE_TYPE_OTHER 1 +#define MIB_IPROUTE_TYPE_INVALID 2 +#define MIB_IPROUTE_TYPE_DIRECT 3 +#define MIB_IPROUTE_TYPE_INDIRECT 4 + +#define MIB_IPPROTO_OTHER 1 +#define MIB_IPPROTO_LOCAL 2 +#define MIB_IPPROTO_NETMGMT 3 +#define MIB_IPPROTO_ICMP 4 +#define MIB_IPPROTO_EGP 5 +#define MIB_IPPROTO_GGP 6 +#define MIB_IPPROTO_HELLO 7 +#define MIB_IPPROTO_RIP 8 +#define MIB_IPPROTO_IS_IS 9 +#define MIB_IPPROTO_ES_IS 10 +#define MIB_IPPROTO_CISCO 11 +#define MIB_IPPROTO_BBN 12 +#define MIB_IPPROTO_OSPF 13 +#define MIB_IPPROTO_BGP 14 + +#define MIB_IPPROTO_NT_AUTOSTATIC 10002 +#define MIB_IPPROTO_NT_STATIC 10006 +#define MIB_IPPROTO_NT_STATIC_NON_DOD 10007 + +typedef struct _MIB_IPFORWARDTABLE +{ + DWORD dwNumEntries; + MIB_IPFORWARDROW table[1]; +} MIB_IPFORWARDTABLE, *PMIB_IPFORWARDTABLE; + +typedef struct _MIB_IPNETROW +{ + DWORD dwIndex; + DWORD dwPhysAddrLen; + BYTE bPhysAddr[MAXLEN_PHYSADDR]; + DWORD dwAddr; + DWORD dwType; +} MIB_IPNETROW, *PMIB_IPNETROW; + +#define MIB_IPNET_TYPE_OTHER 1 +#define MIB_IPNET_TYPE_INVALID 2 +#define MIB_IPNET_TYPE_DYNAMIC 3 +#define MIB_IPNET_TYPE_STATIC 4 + +typedef struct _MIB_IPNETTABLE +{ + DWORD dwNumEntries; + MIB_IPNETROW table[1]; +} MIB_IPNETTABLE, *PMIB_IPNETTABLE; + +#endif /* WINE_IPRTRMIB_H__ */ diff --git a/include/iptypes.h b/include/iptypes.h new file mode 100644 index 0000000..87b0013 --- /dev/null +++ b/include/iptypes.h @@ -0,0 +1,228 @@ +/* WINE iptypes.h + * Copyright (C) 2003 Juan Lang + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * 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. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef WINE_IPTYPES_H_ +#define WINE_IPTYPES_H_ + +#include + +#define MAX_ADAPTER_DESCRIPTION_LENGTH 128 +#define MAX_ADAPTER_NAME_LENGTH 256 +#define MAX_ADAPTER_ADDRESS_LENGTH 8 +#define MAX_HOSTNAME_LEN 128 +#define MAX_DOMAIN_NAME_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 + +typedef struct { + char String[4 * 4]; +} 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; + WINBOOL 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 { + 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; + +typedef struct ip_interface_name_info { + ULONG Index; + ULONG MediaType; + UCHAR ConnectionType; + UCHAR AccessType; + GUID DeviceGuid; + GUID InterfaceGuid; +} IP_INTERFACE_NAME_INFO, *PIP_INTERFACE_NAME_INFO; + +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 { + IpDadStateInvalid = 0, + IpDadStateTentative, + IpDadStateDuplicate, + IpDadStateDeprecated, + IpDadStatePreferred, +} IP_DAD_STATE; + +typedef struct _IP_ADAPTER_ANYCAST_ADDRESS { + union { + ULONGLONG Alignment; + struct { + ULONG Length; + DWORD Flags; + }; + }; + struct _IP_ADAPTER_ANYCAST_ADDRESS *Next; + SOCKET_ADDRESS Address; +} IP_ADAPTER_ANYCAST_ADDRESS, *PIP_ADAPTER_ANYCAST_ADDRESS; + +typedef struct _IP_ADAPTER_MULTICAST_ADDRESS { + union { + ULONGLONG Alignment; + struct { + ULONG Length; + DWORD Flags; + }; + }; + struct _IP_ADAPTER_MULTICAST_ADDRESS *Next; + SOCKET_ADDRESS Address; +} IP_ADAPTER_MULTICAST_ADDRESS, *PIP_ADAPTER_MULTICAST_ADDRESS; + +typedef struct _IP_ADAPTER_DNS_SERVER_ADDRESS { + union { + ULONGLONG Alignment; + struct { + ULONG Length; + DWORD Reserved; + }; + }; + struct _IP_ADAPTER_DNS_SERVER_ADDRESS *Next; + SOCKET_ADDRESS Address; +} IP_ADAPTER_DNS_SERVER_ADDRESS, *PIP_ADAPTER_DNS_SERVER_ADDRESS; + +typedef struct _IP_ADAPTER_UNICAST_ADDRESS { + union { + ULONGLONG Alignment; + struct { + ULONG Length; + DWORD Flags; + }; + }; + 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 enum { + IfOperStatusUp = 1, + IfOperStatusDown, + IfOperStatusTesting, + IfOperStatusUnknown, + IfOperStatusDormant, + IfOperStatusNotPresent, + IfOperStatusLowerLayerDown +} IF_OPER_STATUS; + +typedef struct _IP_ADAPTER_PREFIX { + union { + ULONGLONG Alignment; + struct { + ULONG Length; + DWORD Flags; + }; + }; + struct _IP_ADAPTER_PREFIX *Next; + SOCKET_ADDRESS Address; + ULONG PrefixLength; +} IP_ADAPTER_PREFIX, *PIP_ADAPTER_PREFIX; + +typedef struct _IP_ADAPTER_ADDRESSES { + union { + ULONGLONG Alignment; + struct { + ULONG Length; + DWORD IfIndex; + }; + }; + 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 /* WINE_IPTYPES_H_*/ diff --git a/include/kernel32/kernel32.h b/include/kernel32/kernel32.h index 7c4befd..2b7b4b7 100644 --- a/include/kernel32/kernel32.h +++ b/include/kernel32/kernel32.h @@ -49,5 +49,11 @@ BOOLEAN STDCALL IsConsoleHandle(HANDLE Handle); WINBOOL STDCALL CloseConsoleHandle(HANDLE Handle); +HANDLE STDCALL OpenConsoleW (LPWSTR wsName, + DWORD dwDesiredAccess, + BOOL bInheritHandle, + DWORD dwCreationDistribution); + + #endif /* ndef _INCLUDE_KERNEL32_KERNEL32_H */ diff --git a/include/kernel32/process.h b/include/kernel32/process.h index 2ffe32c..0d5d838 100644 --- a/include/kernel32/process.h +++ b/include/kernel32/process.h @@ -9,7 +9,7 @@ typedef void* HANDLE_TABLE; typedef struct _pPebInfo { LPWSTR lpCommandLine; DWORD cb; - HANDLE hStdInput; //18 + HANDLE hStdInput; /* 18 */ HANDLE hStdOutput; HANDLE hStdError; LPWSTR lpEnvironment; @@ -34,7 +34,7 @@ typedef struct _NT_PEB LONG ImageBaseAddress; void *HeapIndex; - DWORD dwTlsBits[2]; // tls in use bits + DWORD dwTlsBits[2]; /* tls in use bits */ WORD NumberOfProcessors; WORD NtGlobalFlag; DWORD dwCriticalSectionTimeout; diff --git a/include/kernel32/winnls.h b/include/kernel32/winnls.h index d07a3ba..8e91343 100644 --- a/include/kernel32/winnls.h +++ b/include/kernel32/winnls.h @@ -2,7 +2,7 @@ #define __WINE_WINNLS_H /* flags to GetLocaleInfo */ -//#define LOCALE_NOUSEROVERRIDE 0x80000000 +/* #define LOCALE_NOUSEROVERRIDE 0x80000000 */ #define LOCALE_USE_CP_ACP 0x40000000 #define LOCALE_LOCALEINFOFLAGSMASK 0xC0000000 @@ -126,13 +126,13 @@ #endif #if 0 -#define CP_ACP 0 //ANSI code page -#define CP_OEMCP 1 //OEM code page -#define CP_MACCP 2 //Macintosh code page -#define CP_THREAD_ACP 3 //ACP Current thread's ANSI code page -#define CP_SYMBOL 42 //Symbol code page (42) -#define CP_UTF7 65000 //Translate using UTF-7 -#define CP_UTF8 65001 //Translate using UTF-8 +#define CP_ACP 0 /* ANSI code page */ +#define CP_OEMCP 1 /* OEM code page */ +#define CP_MACCP 2 /* Macintosh code page */ +#define CP_THREAD_ACP 3 /* ACP Current thread's ANSI code page */ +#define CP_SYMBOL 42 /* Symbol code page (42) */ +#define CP_UTF7 65000 /* Translate using UTF-7 */ +#define CP_UTF8 65001 /* Translate using UTF-8 */ #endif #if 0 @@ -154,9 +154,11 @@ #ifdef _KERNEL32_INCLUDE_LANG_ #define LANG_SYSTEM_DEFAULT (MAKELANGID(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT)) #define LANG_USER_DEFAULT (MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT)) -//#define LOCALE_SYSTEM_DEFAULT (MAKELCID(LANG_SYSTEM_DEFAULT, SORT_DEFAULT)) -//#define LOCALE_USER_DEFAULT (MAKELCID(LANG_USER_DEFAULT, SORT_DEFAULT)) -//#define LOCALE_NEUTRAL (MAKELCID(MAKELANGID(LANG_NEUTRAL,SUBLANG_NEUTRAL),SORT_DEFAULT)) +/* + *#define LOCALE_SYSTEM_DEFAULT (MAKELCID(LANG_SYSTEM_DEFAULT, SORT_DEFAULT)) + *#define LOCALE_USER_DEFAULT (MAKELCID(LANG_USER_DEFAULT, SORT_DEFAULT)) + *#define LOCALE_NEUTRAL (MAKELCID(MAKELANGID(LANG_NEUTRAL,SUBLANG_NEUTRAL),SORT_DEFAULT)) + */ #endif /* Language IDs (were in winnt.h, for some reason) */ diff --git a/include/lsass/lsass.h b/include/lsass/lsass.h index a01d3a1..e6b97c3 100644 --- a/include/lsass/lsass.h +++ b/include/lsass/lsass.h @@ -12,7 +12,7 @@ #define __INCLUDE_LSASS_LSASS_H #include -#include +#include #include #define LSASS_REQUEST_REGISTER_LOGON_PROCESS (1) diff --git a/include/messages.h b/include/messages.h index a2e5745..84d665f 100644 --- a/include/messages.h +++ b/include/messages.h @@ -44,11 +44,13 @@ extern "C" { /* Animation Control */ #define ACM_OPENW (1127) #define ACM_OPENA (1124) +#ifndef _DISABLE_TIDENTS #ifdef UNICODE #define ACM_OPEN ACM_OPENW #else #define ACM_OPEN ACM_OPENA #endif /* UNICODE */ +#endif /* _DISABLE_TIDENTS */ #define ACM_PLAY (1125) #define ACM_STOP (1126) #define ACN_START (1) @@ -250,6 +252,7 @@ extern "C" { #define HDM_GETITEMA (4611) #define HDM_INSERTITEMA (4609) #define HDM_SETITEMA (4612) +#ifndef _DISABLE_TIDENTS #ifdef UNICODE #define HDM_GETITEM HDM_GETITEMW #define HDM_INSERTITEM HDM_INSERTITEMW @@ -259,6 +262,7 @@ extern "C" { #define HDM_INSERTITEM HDM_INSERTITEMA #define HDM_SETITEM HDM_SETITEMA #endif /* UNICODE */ +#endif /* _DISABLE_TIDENTS */ #define HDM_GETITEMCOUNT (4608) #define HDM_HITTEST (4614) #define HDM_LAYOUT (4613) @@ -280,6 +284,7 @@ extern "C" { #define HDN_ITEMCLICKA (-302) #define HDN_ITEMDBLCLICKA (-303) #define HDN_TRACKA (-308) +#ifndef _DISABLE_TIDENTS #ifdef UNICODE #define HDN_BEGINTRACK HDN_BEGINTRACKW #define HDN_DIVIDERDBLCLICK HDN_DIVIDERDBLCLICKW @@ -299,6 +304,7 @@ extern "C" { #define HDN_ITEMDBLCLICK HDN_ITEMDBLCLICKA #define HDN_TRACK HDN_TRACKA #endif /* UNICODE */ +#endif /* _DISABLE_TIDENTS */ /* Hot key control */ #define HKM_GETHOTKEY (1026) @@ -392,6 +398,7 @@ extern "C" { #define LVM_SETCOLUMNA (4122) #define LVM_SETITEMA (4102) #define LVM_SETITEMTEXTA (4142) +#ifndef _DISABLE_TIDENTS #ifdef UNICODE #define LVM_EDITLABEL LVM_EDITLABELW #define LVM_FINDITEM LVM_FINDITEMW @@ -419,6 +426,7 @@ extern "C" { #define LVM_SETITEM LVM_SETITEMA #define LVM_SETITEMTEXT LVM_SETITEMTEXTA #endif /* UNICODE */ +#endif /* _DISABLE_TIDENTS */ #define LVM_GETITEMCOUNT (4100) #define LVM_GETITEMPOSITION (4112) #define LVM_GETITEMRECT (4110) @@ -461,6 +469,7 @@ extern "C" { #define LVN_ENDLABELEDITA (-106) #define LVN_GETDISPINFOA (-150) #define LVN_SETDISPINFOA (-151) +#ifndef _DISABLE_TIDENTS #ifdef UNICODE #define LVN_BEGINLABELEDIT LVN_BEGINLABELEDITW #define LVN_ENDLABELEDIT LVN_ENDLABELEDITW @@ -472,6 +481,7 @@ extern "C" { #define LVN_GETDISPINFO LVN_GETDISPINFOA #define LVN_SETDISPINFO LVN_SETDISPINFOA #endif /* UNICODE */ +#endif /* _DISABLE_TIDENTS */ #define LVN_INSERTITEM (-102) #define LVN_ITEMCHANGED (-101) #define LVN_ITEMCHANGING (-100) @@ -515,6 +525,7 @@ extern "C" { #define PSM_SETTITLEW (1144) #define PSM_SETFINISHTEXTA (1139) #define PSM_SETTITLEA (1135) +#ifndef _DISABLE_TIDENTS #ifdef UNICODE #define PSM_SETFINISHTEXT PSM_SETFINISHTEXTW #define PSM_SETTITLE PSM_SETTITLEW @@ -522,6 +533,7 @@ extern "C" { #define PSM_SETFINISHTEXT PSM_SETFINISHTEXTA #define PSM_SETTITLE PSM_SETTITLEA #endif /* UNICODE */ +#endif /* _DISABLE_TIDENTS */ #define PSM_SETWIZBUTTONS (1136) #define PSM_UNCHANGED (1133) @@ -546,6 +558,7 @@ extern "C" { #define SB_GETTEXTA (1026) #define SB_GETTEXTLENGTHA (1027) #define SB_SETTEXTA (1025) +#ifndef _DISABLE_TIDENTS #ifdef UNICODE #define SB_GETTEXT SB_GETTEXTW #define SB_GETTEXTLENGTH SB_GETTEXTLENGTHW @@ -555,6 +568,7 @@ extern "C" { #define SB_GETTEXTLENGTH SB_GETTEXTLENGTHA #define SB_SETTEXT SB_SETTEXTA #endif /* UNICODE */ +#endif /* _DISABLE_TIDENTS */ #define SB_SETMINHEIGHT (1032) #define SB_SETPARTS (1028) #define SB_SIMPLE (1033) @@ -602,6 +616,7 @@ extern "C" { #define TB_ADDSTRINGA (1052) #define TB_GETBUTTONTEXTA (1069) #define TB_SAVERESTOREA (1050) +#ifndef _DISABLE_TIDENTS #ifdef UNICODE #define TB_ADDSTRING TB_ADDSTRINGW #define TB_GETBUTTONTEXT TB_GETBUTTONTEXTW @@ -611,6 +626,7 @@ extern "C" { #define TB_GETBUTTONTEXT TB_GETBUTTONTEXTA #define TB_SAVERESTORE TB_SAVERESTOREA #endif /* UNICODE */ +#endif /* _DISABLE_TIDENTS */ #define TB_GETITEMRECT (1053) #define TB_GETROWS (1064) #define TB_GETSTATE (1042) @@ -670,11 +686,13 @@ extern "C" { #define TBN_ENDDRAG (-702) #define TBN_GETBUTTONINFOW (-720) #define TBN_GETBUTTONINFOA (-700) +#ifndef _DISABLE_TIDENTS #ifdef UNICODE #define TBN_GETBUTTONINFO TBN_GETBUTTONINFOW #else #define TBN_GETBUTTONINFO TBN_GETBUTTONINFOA #endif /* UNICODE */ +#endif /* _DISABLE_TIDENTS */ #define TBN_QUERYDELETE (-707) #define TBN_QUERYINSERT (-706) #define TBN_RESET (-705) @@ -693,6 +711,7 @@ extern "C" { #define TCM_GETITEMA (4869) #define TCM_INSERTITEMA (4871) #define TCM_SETITEMA (4870) +#ifndef _DISABLE_TIDENTS #ifdef UNICODE #define TCM_GETITEM TCM_GETITEM #define TCM_INSERTITEM TCM_INSERTITEMW @@ -702,6 +721,7 @@ extern "C" { #define TCM_INSERTITEM TCM_INSERTITEMA #define TCM_SETITEM TCM_SETITEMA #endif /* UNICODE */ +#endif /* _DISABLE_TIDENTS */ #define TCM_GETITEMCOUNT (4868) #define TCM_GETITEMRECT (4874) #define TCM_GETROWCOUNT (4908) @@ -743,6 +763,7 @@ extern "C" { #define TTM_NEWTOOLRECTA (1030) #define TTM_SETTOOLINFOA (1033) #define TTM_UPDATETIPTEXTA (1036) +#ifndef _DISABLE_TIDENTS #ifdef UNICODE #define TTM_ADDTOOL TTM_ADDTOOLW #define TTM_DELTOOL TTM_DELTOOLW @@ -766,6 +787,7 @@ extern "C" { #define TTM_SETTOOLINFO TTM_SETTOOLINFOA #define TTM_UPDATETIPTEXT TTM_UPDATETIPTEXTA #endif /* UNICODE */ +#endif /* _DISABLE_TIDENTS */ #define TTM_GETTOOLCOUNT (1037) #define TTM_RELAYEVENT (1031) #define TTM_SETDELAYTIME (1027) @@ -774,11 +796,13 @@ extern "C" { /* Tool tip control notification */ #define TTN_NEEDTEXTW (-530) #define TTN_NEEDTEXTA (-520) +#ifndef _DISABLE_TIDENTS #ifdef UNICODE #define TTN_NEEDTEXT TTN_NEEDTEXTW #else #define TTN_NEEDTEXT TTN_NEEDTEXTA #endif /* UNICODE */ +#endif /* _DISABLE_TIDENTS */ #define TTN_POP (-522) #define TTN_SHOW (-521) @@ -806,6 +830,7 @@ extern "C" { #define TVM_GETITEMA (4364) #define TVM_INSERTITEMA (4352) #define TVM_SETITEMA (4365) +#ifndef _DISABLE_TIDENTS #ifdef UNICODE #define TVM_EDITLABEL TVM_EDITLABELW #define TVM_GETISEARCHSTRING TVM_GETISEARCHSTRINGW @@ -819,6 +844,7 @@ extern "C" { #define TVM_INSERTITEM TVM_INSERTITEMA #define TVM_SETITEM TVM_SETITEMA #endif /* UNICODE */ +#endif /* _DISABLE_TIDENTS */ #define TVM_SELECTITEM (4363) #define TVM_SETIMAGELIST (4361) #define TVM_SETINDENT (4359) @@ -849,6 +875,7 @@ extern "C" { #define TVN_SELCHANGEDA (-402) #define TVN_SELCHANGINGA (-401) #define TVN_SETDISPINFOA (-404) +#ifndef _DISABLE_TIDENTS #ifdef UNICODE #define TVN_BEGINDRAG TVN_BEGINDRAGW #define TVN_BEGINLABELEDIT TVN_BEGINLABELEDITW @@ -874,6 +901,7 @@ extern "C" { #define TVN_SELCHANGING TVN_SELCHANGINGA #define TVN_SETDISPINFO TVN_SETDISPINFOA #endif /* UNICODE */ +#endif /* _DISABLE_TIDENTS */ /* Up/down control */ #define UDM_GETACCEL (1132) @@ -973,6 +1001,7 @@ extern "C" { #define WM_KEYDOWN (256) #define WM_KEYUP (257) #define WM_KILLFOCUS (8) +#define WM_SETVISIBLE (9) #define WM_LBUTTONDBLCLK (515) #define WM_LBUTTONDOWN (513) #define WM_LBUTTONUP (514) diff --git a/include/mmddk.h b/include/mmddk.h new file mode 100644 index 0000000..9e335c0 --- /dev/null +++ b/include/mmddk.h @@ -0,0 +1,442 @@ +/* -*- tab-width: 8; c-basic-offset: 4 -*- */ + +/***************************************************************************** + * Copyright 1998, Luiz Otavio L. Zorzella + * 1999, Eric Pouech + * + * Purpose: multimedia declarations (external to WINMM & MMSYSTEM DLLs + * for other DLLs (MCI, drivers...)) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * 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. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + ***************************************************************************** + */ +#ifndef __MMDDK_H +#define __MMDDK_H + +#include "mmsystem.h" +/* #include "winbase.h" */ + +#define MAX_MIDIINDRV (16) +/* For now I'm making 16 the maximum number of midi devices one can + * have. This should be more than enough for everybody. But as a purist, + * I intend to make it unbounded in the future, as soon as I figure + * a good way to do so. + */ +#define MAX_MIDIOUTDRV (16) + +/* ================================== + * Multimedia DDK compatible part + * ================================== */ + +#include "pshpack1.h" + +#define DRVM_INIT 100 +#define DRVM_EXIT 101 +#define DRVM_DISABLE 102 +#define DRVM_ENABLE 103 + +/* messages that have IOCTL format + * dw1 = NULL or handle + * dw2 = NULL or ptr to DRVM_IOCTL_DATA + * return is MMRESULT + */ +#define DRVM_IOCTL 0x100 +#define DRVM_ADD_THRU (DRVM_IOCTL+1) +#define DRVM_REMOVE_THRU (DRVM_IOCTL+2) +#define DRVM_IOCTL_LAST (DRVM_IOCTL+5) +typedef struct { + DWORD dwSize; /* size of this structure */ + DWORD dwCmd; /* IOCTL command code, 0x80000000 and above reserved for system */ +} DRVM_IOCTL_DATA, *LPDRVM_IOCTL_DATA; + +/* command code ranges for dwCmd field of DRVM_IOCTL message + * - codes from 0 to 0x7FFFFFFF are user defined + * - codes from 0x80000000 to 0xFFFFFFFF are reserved for future definition by microsoft + */ +#define DRVM_IOCTL_CMD_USER 0x00000000L +#define DRVM_IOCTL_CMD_SYSTEM 0x80000000L + +#define DRVM_MAPPER 0x2000 +#define DRVM_USER 0x4000 +#define DRVM_MAPPER_STATUS (DRVM_MAPPER+0) +#define DRVM_MAPPER_RECONFIGURE (DRVM_MAPPER+1) + +#define DRV_QUERYDRVENTRY (DRV_RESERVED + 1) +#define DRV_QUERYDEVNODE (DRV_RESERVED + 2) +#define DRV_QUERYNAME (DRV_RESERVED + 3) +#define DRV_QUERYDRIVERIDS (DRV_RESERVED + 4) +#define DRV_QUERYMAPPABLE (DRV_RESERVED + 5) +#ifdef __WINESRC__ +#define DRV_QUERYDSOUNDIFACE (DRV_RESERVED + 10) +#define DRV_QUERYDSOUNDDESC (DRV_RESERVED + 11) +#define DRV_QUERYDSOUNDGUID (DRV_RESERVED + 12) +#endif + +#define WODM_INIT DRVM_INIT +#define WODM_GETNUMDEVS 3 +#define WODM_GETDEVCAPS 4 +#define WODM_OPEN 5 +#define WODM_CLOSE 6 +#define WODM_PREPARE 7 +#define WODM_UNPREPARE 8 +#define WODM_WRITE 9 +#define WODM_PAUSE 10 +#define WODM_RESTART 11 +#define WODM_RESET 12 +#define WODM_GETPOS 13 +#define WODM_GETPITCH 14 +#define WODM_SETPITCH 15 +#define WODM_GETVOLUME 16 +#define WODM_SETVOLUME 17 +#define WODM_GETPLAYBACKRATE 18 +#define WODM_SETPLAYBACKRATE 19 +#define WODM_BREAKLOOP 20 + +#define WODM_MAPPER_STATUS (DRVM_MAPPER_STATUS + 0) +#define WAVEOUT_MAPPER_STATUS_DEVICE 0 +#define WAVEOUT_MAPPER_STATUS_MAPPED 1 +#define WAVEOUT_MAPPER_STATUS_FORMAT 2 + +#define WIDM_INIT DRVM_INIT +#define WIDM_GETNUMDEVS 50 +#define WIDM_GETDEVCAPS 51 +#define WIDM_OPEN 52 +#define WIDM_CLOSE 53 +#define WIDM_PREPARE 54 +#define WIDM_UNPREPARE 55 +#define WIDM_ADDBUFFER 56 +#define WIDM_START 57 +#define WIDM_STOP 58 +#define WIDM_RESET 59 +#define WIDM_GETPOS 60 + +#define WIDM_MAPPER_STATUS (DRVM_MAPPER_STATUS + 0) +#define WAVEIN_MAPPER_STATUS_DEVICE 0 +#define WAVEIN_MAPPER_STATUS_MAPPED 1 +#define WAVEIN_MAPPER_STATUS_FORMAT 2 + +#define MODM_INIT DRVM_INIT +#define MODM_GETNUMDEVS 1 +#define MODM_GETDEVCAPS 2 +#define MODM_OPEN 3 +#define MODM_CLOSE 4 +#define MODM_PREPARE 5 +#define MODM_UNPREPARE 6 +#define MODM_DATA 7 +#define MODM_LONGDATA 8 +#define MODM_RESET 9 +#define MODM_GETVOLUME 10 +#define MODM_SETVOLUME 11 +#define MODM_CACHEPATCHES 12 +#define MODM_CACHEDRUMPATCHES 13 + +#define MIDM_INIT DRVM_INIT +#define MIDM_GETNUMDEVS 53 +#define MIDM_GETDEVCAPS 54 +#define MIDM_OPEN 55 +#define MIDM_CLOSE 56 +#define MIDM_PREPARE 57 +#define MIDM_UNPREPARE 58 +#define MIDM_ADDBUFFER 59 +#define MIDM_START 60 +#define MIDM_STOP 61 +#define MIDM_RESET 62 + + +#define AUXM_INIT DRVM_INIT +#define AUXDM_GETNUMDEVS 3 +#define AUXDM_GETDEVCAPS 4 +#define AUXDM_GETVOLUME 5 +#define AUXDM_SETVOLUME 6 + +#define MXDM_INIT DRVM_INIT +#define MXDM_USER DRVM_USER +#define MXDM_MAPPER DRVM_MAPPER + +#define MXDM_GETNUMDEVS 1 +#define MXDM_GETDEVCAPS 2 +#define MXDM_OPEN 3 +#define MXDM_CLOSE 4 +#define MXDM_GETLINEINFO 5 +#define MXDM_GETLINECONTROLS 6 +#define MXDM_GETCONTROLDETAILS 7 +#define MXDM_SETCONTROLDETAILS 8 + +/* pre-defined joystick types */ +#define JOY_HW_NONE 0 +#define JOY_HW_CUSTOM 1 +#define JOY_HW_2A_2B_GENERIC 2 +#define JOY_HW_2A_4B_GENERIC 3 +#define JOY_HW_2B_GAMEPAD 4 +#define JOY_HW_2B_FLIGHTYOKE 5 +#define JOY_HW_2B_FLIGHTYOKETHROTTLE 6 +#define JOY_HW_3A_2B_GENERIC 7 +#define JOY_HW_3A_4B_GENERIC 8 +#define JOY_HW_4B_GAMEPAD 9 +#define JOY_HW_4B_FLIGHTYOKE 10 +#define JOY_HW_4B_FLIGHTYOKETHROTTLE 11 +#define JOY_HW_LASTENTRY 12 + +/* calibration flags */ +#define JOY_ISCAL_XY 0x00000001l /* XY are calibrated */ +#define JOY_ISCAL_Z 0x00000002l /* Z is calibrated */ +#define JOY_ISCAL_R 0x00000004l /* R is calibrated */ +#define JOY_ISCAL_U 0x00000008l /* U is calibrated */ +#define JOY_ISCAL_V 0x00000010l /* V is calibrated */ +#define JOY_ISCAL_POV 0x00000020l /* POV is calibrated */ + +/* point of view constants */ +#define JOY_POV_NUMDIRS 4 +#define JOY_POVVAL_FORWARD 0 +#define JOY_POVVAL_BACKWARD 1 +#define JOY_POVVAL_LEFT 2 +#define JOY_POVVAL_RIGHT 3 + +/* Specific settings for joystick hardware */ +#define JOY_HWS_HASZ 0x00000001l /* has Z info? */ +#define JOY_HWS_HASPOV 0x00000002l /* point of view hat present */ +#define JOY_HWS_POVISBUTTONCOMBOS 0x00000004l /* pov done through combo of buttons */ +#define JOY_HWS_POVISPOLL 0x00000008l /* pov done through polling */ +#define JOY_HWS_ISYOKE 0x00000010l /* joystick is a flight yoke */ +#define JOY_HWS_ISGAMEPAD 0x00000020l /* joystick is a game pad */ +#define JOY_HWS_ISCARCTRL 0x00000040l /* joystick is a car controller */ +/* X defaults to J1 X axis */ +#define JOY_HWS_XISJ1Y 0x00000080l /* X is on J1 Y axis */ +#define JOY_HWS_XISJ2X 0x00000100l /* X is on J2 X axis */ +#define JOY_HWS_XISJ2Y 0x00000200l /* X is on J2 Y axis */ +/* Y defaults to J1 Y axis */ +#define JOY_HWS_YISJ1X 0x00000400l /* Y is on J1 X axis */ +#define JOY_HWS_YISJ2X 0x00000800l /* Y is on J2 X axis */ +#define JOY_HWS_YISJ2Y 0x00001000l /* Y is on J2 Y axis */ +/* Z defaults to J2 Y axis */ +#define JOY_HWS_ZISJ1X 0x00002000l /* Z is on J1 X axis */ +#define JOY_HWS_ZISJ1Y 0x00004000l /* Z is on J1 Y axis */ +#define JOY_HWS_ZISJ2X 0x00008000l /* Z is on J2 X axis */ +/* POV defaults to J2 Y axis, if it is not button based */ +#define JOY_HWS_POVISJ1X 0x00010000l /* pov done through J1 X axis */ +#define JOY_HWS_POVISJ1Y 0x00020000l /* pov done through J1 Y axis */ +#define JOY_HWS_POVISJ2X 0x00040000l /* pov done through J2 X axis */ +/* R defaults to J2 X axis */ +#define JOY_HWS_HASR 0x00080000l /* has R (4th axis) info */ +#define JOY_HWS_RISJ1X 0x00100000l /* R done through J1 X axis */ +#define JOY_HWS_RISJ1Y 0x00200000l /* R done through J1 Y axis */ +#define JOY_HWS_RISJ2Y 0x00400000l /* R done through J2 X axis */ +/* U & V for future hardware */ +#define JOY_HWS_HASU 0x00800000l /* has U (5th axis) info */ +#define JOY_HWS_HASV 0x01000000l /* has V (6th axis) info */ + +/* Usage settings */ +#define JOY_US_HASRUDDER 0x00000001l /* joystick configured with rudder */ +#define JOY_US_PRESENT 0x00000002l /* is joystick actually present? */ +#define JOY_US_ISOEM 0x00000004l /* joystick is an OEM defined type */ + + +/* struct for storing x,y, z, and rudder values */ +typedef struct joypos_tag { + DWORD dwX; + DWORD dwY; + DWORD dwZ; + DWORD dwR; + DWORD dwU; + DWORD dwV; +} JOYPOS, *LPJOYPOS; + +/* struct for storing ranges */ +typedef struct joyrange_tag { + JOYPOS jpMin; + JOYPOS jpMax; + JOYPOS jpCenter; +} JOYRANGE,*LPJOYRANGE; + +typedef struct joyreguservalues_tag { + DWORD dwTimeOut; /* value at which to timeout joystick polling */ + JOYRANGE jrvRanges; /* range of values app wants returned for axes */ + JOYPOS jpDeadZone; /* area around center to be considered + as "dead". specified as a percentage + (0-100). Only X & Y handled by system driver */ +} JOYREGUSERVALUES, *LPJOYREGUSERVALUES; + +typedef struct joyreghwsettings_tag { + DWORD dwFlags; + DWORD dwNumButtons; /* number of buttons */ +} JOYREGHWSETTINGS, *LPJOYHWSETTINGS; + +/* range of values returned by the hardware (filled in by calibration) */ +typedef struct joyreghwvalues_tag { + JOYRANGE jrvHardware; /* values returned by hardware */ + DWORD dwPOVValues[JOY_POV_NUMDIRS];/* POV values returned by hardware */ + DWORD dwCalFlags; /* what has been calibrated */ +} JOYREGHWVALUES, *LPJOYREGHWVALUES; + +/* hardware configuration */ +typedef struct joyreghwconfig_tag { + JOYREGHWSETTINGS hws; /* hardware settings */ + DWORD dwUsageSettings;/* usage settings */ + JOYREGHWVALUES hwv; /* values returned by hardware */ + DWORD dwType; /* type of joystick */ + DWORD dwReserved; /* reserved for OEM drivers */ +} JOYREGHWCONFIG, *LPJOYREGHWCONFIG; + +/* joystick calibration info structure */ +typedef struct joycalibrate_tag { + UINT wXbase; + UINT wXdelta; + UINT wYbase; + UINT wYdelta; + UINT wZbase; + UINT wZdelta; +} JOYCALIBRATE; +typedef JOYCALIBRATE *LPJOYCALIBRATE; + +/* prototype for joystick message function */ +typedef UINT (CALLBACK * JOYDEVMSGPROC)(DWORD dwID, UINT uMessage, LPARAM lParam1, LPARAM lParam2); +typedef JOYDEVMSGPROC *LPJOYDEVMSGPROC; + +/* messages sent to joystick driver's DriverProc() function */ +#define JDD_GETNUMDEVS (DRV_RESERVED + 0x0001) +#define JDD_GETDEVCAPS (DRV_RESERVED + 0x0002) +#define JDD_GETPOS (DRV_RESERVED + 0x0101) +#define JDD_SETCALIBRATION (DRV_RESERVED + 0x0102) +#define JDD_CONFIGCHANGED (DRV_RESERVED + 0x0103) +#define JDD_GETPOSEX (DRV_RESERVED + 0x0104) + +#define MCI_MAX_DEVICE_TYPE_LENGTH 80 + +#define MCI_FALSE (MCI_STRING_OFFSET + 19) +#define MCI_TRUE (MCI_STRING_OFFSET + 20) + +#define MCI_FORMAT_RETURN_BASE MCI_FORMAT_MILLISECONDS_S +#define MCI_FORMAT_MILLISECONDS_S (MCI_STRING_OFFSET + 21) +#define MCI_FORMAT_HMS_S (MCI_STRING_OFFSET + 22) +#define MCI_FORMAT_MSF_S (MCI_STRING_OFFSET + 23) +#define MCI_FORMAT_FRAMES_S (MCI_STRING_OFFSET + 24) +#define MCI_FORMAT_SMPTE_24_S (MCI_STRING_OFFSET + 25) +#define MCI_FORMAT_SMPTE_25_S (MCI_STRING_OFFSET + 26) +#define MCI_FORMAT_SMPTE_30_S (MCI_STRING_OFFSET + 27) +#define MCI_FORMAT_SMPTE_30DROP_S (MCI_STRING_OFFSET + 28) +#define MCI_FORMAT_BYTES_S (MCI_STRING_OFFSET + 29) +#define MCI_FORMAT_SAMPLES_S (MCI_STRING_OFFSET + 30) +#define MCI_FORMAT_TMSF_S (MCI_STRING_OFFSET + 31) + +#define MCI_VD_FORMAT_TRACK_S (MCI_VD_OFFSET + 5) + +#define WAVE_FORMAT_PCM_S (MCI_WAVE_OFFSET + 0) +#define WAVE_MAPPER_S (MCI_WAVE_OFFSET + 1) + +#define MCI_SEQ_MAPPER_S (MCI_SEQ_OFFSET + 5) +#define MCI_SEQ_FILE_S (MCI_SEQ_OFFSET + 6) +#define MCI_SEQ_MIDI_S (MCI_SEQ_OFFSET + 7) +#define MCI_SEQ_SMPTE_S (MCI_SEQ_OFFSET + 8) +#define MCI_SEQ_FORMAT_SONGPTR_S (MCI_SEQ_OFFSET + 9) +#define MCI_SEQ_NONE_S (MCI_SEQ_OFFSET + 10) +#define MIDIMAPPER_S (MCI_SEQ_OFFSET + 11) + +#define MCI_RESOURCE_RETURNED 0x00010000 /* resource ID */ +#define MCI_COLONIZED3_RETURN 0x00020000 /* colonized ID, 3 bytes data */ +#define MCI_COLONIZED4_RETURN 0x00040000 /* colonized ID, 4 bytes data */ +#define MCI_INTEGER_RETURNED 0x00080000 /* integer conversion needed */ +#define MCI_RESOURCE_DRIVER 0x00100000 /* driver owns returned resource */ + +#define MCI_NO_COMMAND_TABLE 0xFFFF + +#define MCI_COMMAND_HEAD 0 +#define MCI_STRING 1 +#define MCI_INTEGER 2 +#define MCI_END_COMMAND 3 +#define MCI_RETURN 4 +#define MCI_FLAG 5 +#define MCI_END_COMMAND_LIST 6 +#define MCI_RECT 7 +#define MCI_CONSTANT 8 +#define MCI_END_CONSTANT 9 + +#define MAKEMCIRESOURCE(wRet, wRes) MAKELRESULT((wRet), (wRes)) + +typedef struct { + DWORD dwCallback; + DWORD dwInstance; + HMIDIOUT hMidi; + DWORD dwFlags; +} PORTALLOC, *LPPORTALLOC; + +typedef struct { + HWAVE hWave; + LPWAVEFORMATEX lpFormat; + DWORD dwCallback; + DWORD dwInstance; + UINT uMappedDeviceID; + DWORD dnDevNode; +} WAVEOPENDESC, *LPWAVEOPENDESC; + +typedef struct { + DWORD dwStreamID; + WORD wDeviceID; +} MIDIOPENSTRMID; + +typedef struct { + HMIDI hMidi; + DWORD dwCallback; + DWORD dwInstance; + DWORD dnDevNode; + DWORD cIds; + MIDIOPENSTRMID rgIds; +} MIDIOPENDESC, *LPMIDIOPENDESC; + +typedef struct tMIXEROPENDESC +{ + HMIXEROBJ hmx; + LPVOID pReserved0; + DWORD dwCallback; + DWORD dwInstance; +} MIXEROPENDESC, *LPMIXEROPENDESC; + +typedef struct { + UINT wDeviceID; /* device ID */ + LPSTR lpstrParams; /* parameter string for entry in SYSTEM.INI */ + UINT wCustomCommandTable; /* custom command table (0xFFFF if none) * filled in by the driver */ + UINT wType; /* driver type (filled in by the driver) */ +} MCI_OPEN_DRIVER_PARMSA, *LPMCI_OPEN_DRIVER_PARMSA; + +typedef struct { + UINT wDeviceID; /* device ID */ + LPWSTR lpstrParams; /* parameter string for entry in SYSTEM.INI */ + UINT wCustomCommandTable; /* custom command table (0xFFFF if none) * filled in by the driver */ + UINT wType; /* driver type (filled in by the driver) */ +} MCI_OPEN_DRIVER_PARMSW, *LPMCI_OPEN_DRIVER_PARMSW; + +DWORD WINAPI mciGetDriverData(UINT uDeviceID); +BOOL WINAPI mciSetDriverData(UINT uDeviceID, DWORD dwData); +UINT WINAPI mciDriverYield(UINT uDeviceID); +BOOL WINAPI mciDriverNotify(HWND hwndCallback, UINT uDeviceID, + UINT uStatus); +UINT WINAPI mciLoadCommandResource(HINSTANCE hInstance, + LPCWSTR lpResName, UINT uType); +BOOL WINAPI mciFreeCommandResource(UINT uTable); + +#define DCB_NULL 0x0000 +#define DCB_WINDOW 0x0001 /* dwCallback is a HWND */ +#define DCB_TASK 0x0002 /* dwCallback is a HTASK */ +#define DCB_FUNCTION 0x0003 /* dwCallback is a FARPROC */ +#define DCB_EVENT 0x0005 /* dwCallback is an EVENT Handler */ +#define DCB_TYPEMASK 0x0007 +#define DCB_NOSWITCH 0x0008 /* don't switch stacks for callback */ + +BOOL WINAPI DriverCallback(DWORD dwCallBack, UINT uFlags, HDRVR hDev, + UINT wMsg, DWORD dwUser, DWORD dwParam1, DWORD dwParam2); + +#include "poppack.h" + +#endif /* __MMDDK_H */ diff --git a/include/msvcrt/crttypes.h b/include/msvcrt/crttypes.h index fe15209..0994ddb 100644 --- a/include/msvcrt/crttypes.h +++ b/include/msvcrt/crttypes.h @@ -14,10 +14,12 @@ #ifdef __GNUC__ -//typedef long long LONGLONG; -//typedef unsigned long long ULONGLONG; -//typedef long long *PLONGLONG; -//typedef unsigned long long *PULONGLONG; +/* +typedef long long LONGLONG; +typedef unsigned long long ULONGLONG; +typedef long long *PLONGLONG; +typedef unsigned long long *PULONGLONG; +*/ #define HAVE_LONGLONG #define LONGLONG_DEFINED #define LONGLONG long long diff --git a/include/msvcrt/ctype.h b/include/msvcrt/ctype.h index 09fa609..2d74cd6 100644 --- a/include/msvcrt/ctype.h +++ b/include/msvcrt/ctype.h @@ -119,8 +119,8 @@ int iswspace(wint_t); int iswupper(wint_t); int iswxdigit(wint_t); -//wchar_t towlower(wchar_t); -//wchar_t towupper(wchar_t); +/* wchar_t towlower(wchar_t); */ +/* wchar_t towupper(wchar_t); */ int towlower(wint_t); int towupper(wint_t); diff --git a/include/msvcrt/float.h b/include/msvcrt/float.h index 1f436a7..58e4fdf 100644 --- a/include/msvcrt/float.h +++ b/include/msvcrt/float.h @@ -196,9 +196,9 @@ int _finite (double); int _fpclass (double); int _isnan (double); -int _isinf (double); // not exported -int _isnanl (long double); // not exported -int _isinfl (long double); // not exported +int _isinf (double); /* not exported */ +int _isnanl (long double); /* not exported */ +int _isinfl (long double); /* not exported */ #define isnan(x) _isnan(x) #define isinf(x) _isinf(x) diff --git a/include/msvcrt/internal/file.h b/include/msvcrt/internal/file.h index 4507cf1..241b18a 100644 --- a/include/msvcrt/internal/file.h +++ b/include/msvcrt/internal/file.h @@ -24,11 +24,11 @@ extern "C" { #define _IOUNGETC 010000 /* there is an ungetc'ed character in the buffer */ #endif -// might need check for IO_APPEND aswell +/* might need check for IO_APPEND aswell */ #define OPEN4WRITING(f) ((((f)->_flag & _IOWRT) == _IOWRT)) #define OPEN4READING(f) ((((f)->_flag & _IOREAD) == _IOREAD)) -// might need check for IO_APPEND aswell +/* might need check for IO_APPEND aswell */ #define WRITE_STREAM(f) ((((f)->_flag & _IOWRT) == _IOWRT)) #define READ_STREAM(f) ((((f)->_flag & _IOREAD) == _IOREAD)) diff --git a/include/msvcrt/math.h b/include/msvcrt/math.h index 958ff27..09a334e 100644 --- a/include/msvcrt/math.h +++ b/include/msvcrt/math.h @@ -23,7 +23,7 @@ * $Date$ * */ -// added modfl +/* added modfl */ #ifndef _MATH_H_ #define _MATH_H_ @@ -186,10 +186,12 @@ double linkme_modf(double x, double* ip); long double linkme_modfl(long double x,long double* ip); double linkme_fmod(double x, double y); -//linkme_log2 -//linkme_floor -//linkme_ldexp -//linkme_pow +/* + * linkme_log2 + * linkme_floor + * linkme_ldexp + * linkme_pow + */ #endif diff --git a/include/msvcrt/mbctype.h b/include/msvcrt/mbctype.h index dc672d8..dd3f68c 100644 --- a/include/msvcrt/mbctype.h +++ b/include/msvcrt/mbctype.h @@ -36,10 +36,10 @@ /* TODO: bit masks */ /* -//#define _MS 0x01 -//#define _MP 0x02 -//#define _M1 0x04 -//#define _M2 0x08 + *#define _MS 0x01 + *#define _MP 0x02 + *#define _M1 0x04 + *#define _M2 0x08 #define _SBUP #define _SBLOW */ diff --git a/include/msvcrt/msvcrtdbg.h b/include/msvcrt/msvcrtdbg.h index bbc042e..8a07d19 100644 --- a/include/msvcrt/msvcrtdbg.h +++ b/include/msvcrt/msvcrtdbg.h @@ -49,15 +49,15 @@ #define CHECKPOINT #endif /* NDEBUG */ -//ULONG CDECL DbgPrint(PCH Format, ...); -//ULONG DbgPrint(PCH Format,...); -//unsigned long DbgPrint(const char* Format, ...); +/* ULONG CDECL DbgPrint(PCH Format, ...); */ +/* ULONG DbgPrint(PCH Format,...); */ +/* unsigned long DbgPrint(const char* Format, ...); */ -//#define TRACE 0 ? (void)0 : Trace +/* #define TRACE 0 ? (void)0 : Trace */ -//void Trace(TCHAR* lpszFormat, ...); +/* void Trace(TCHAR* lpszFormat, ...); */ diff --git a/include/msvcrt/search.h b/include/msvcrt/search.h index b42c4d0..054f864 100644 --- a/include/msvcrt/search.h +++ b/include/msvcrt/search.h @@ -2,34 +2,38 @@ #ifndef _SEARCH_H_ #define _SEARCH_H_ -//char *key -//void *data - -//enum { FIND, ENTER } ACTION; -//enum { preorder, postorder, endorder, leaf } VISIT; +/* + *char *key + *void *data + *enum { FIND, ENTER } ACTION; + *enum { preorder, postorder, endorder, leaf } VISIT; + */ #include #include -//The Single UNIX ® Specification, Version 2 Copyright © 1997 The Open Group +/* The Single UNIX ® Specification, Version 2 Copyright © 1997 The Open Group */ -//int hcreate(size_t); -//void hdestroy(void); -//ENTRY *hsearch(ENTRY, ACTION); -//void insque(void *, void *); +/* + *int hcreate(size_t); + *void hdestroy(void); + *ENTRY *hsearch(ENTRY, ACTION); + *void insque(void *, void *); + */ void *_lfind(const void *, const void *, size_t *, size_t, int (*)(const void *, const void *)); void *_lsearch(const void *, void *, size_t *, size_t, int (*)(const void *, const void *)); -//void remque(void *); -//void *tdelete(const void *, void **, -// int(*)(const void *, const void *)); -//void *tfind(const void *, void *const *, -// int(*)(const void *, const void *)); -//void *tsearch(const void *, void **, -// int(*)(const void *, const void *)); -//void twalk(const void *, -// void (*)(const void *, VISIT, int )); - +/* + *void remque(void *); + *void *tdelete(const void *, void **, + * int(*)(const void *, const void *)); + *void *tfind(const void *, void *const *, + * int(*)(const void *, const void *)); + *void *tsearch(const void *, void **, + * int(*)(const void *, const void *)); + *void twalk(const void *, + * void (*)(const void *, VISIT, int )); +*/ #endif diff --git a/include/msvcrt/stdio.h b/include/msvcrt/stdio.h index e2fdff2..52646ae 100644 --- a/include/msvcrt/stdio.h +++ b/include/msvcrt/stdio.h @@ -73,10 +73,12 @@ extern "C" { * functions later on in the file which use va_list. That conflicts with * using stdio.h and varargs.h in the same file, so I do the typedef myself. */ -//#ifndef _VA_LIST -//#define _VA_LIST -//typedef char* va_list; -//#endif +/* + *#ifndef _VA_LIST + *#define _VA_LIST + *typedef char* va_list; + *#endif + */ #include /* @@ -262,8 +264,8 @@ wint_t fgetwc(FILE* fileRead); wint_t fputwc(wchar_t wc, FILE* fileWrite); wint_t getwc(FILE *fileRead); // not exported from crtdll -// TODO: check type wint_t, why doesn't compare to WEOF correctly ??? -//wint_t putwc(wint_t wc, FILE* fileWrite); +/* TODO: check type wint_t, why doesn't compare to WEOF correctly ??? */ +/* wint_t putwc(wint_t wc, FILE* fileWrite); */ int putwc(wint_t wc, FILE* fileWrite); wint_t putwchar(wint_t c); @@ -344,7 +346,7 @@ void _wperror(const wchar_t *s); #define clearerr(f) (((f)->_flag) &= ~(_IOERR|_IOEOF)) #define feof(f) (((f)->_flag&_IOEOF)!=0) -//#define ferror(f) (((f)->_flag&_IOERR)!=0) +/* #define ferror(f) (((f)->_flag&_IOERR)!=0) */ int ferror(FILE* fileIsError); #define perror(s) (fprintf(stderr, "%s: %s\n", (s), _strerror(NULL))) diff --git a/include/msvcrt/stdlib.h b/include/msvcrt/stdlib.h index a79ddd3..3693503 100644 --- a/include/msvcrt/stdlib.h +++ b/include/msvcrt/stdlib.h @@ -41,6 +41,14 @@ */ #define RAND_MAX 0x7FFF +#ifndef _MAX_PATH +#define _MAX_DRIVE 3 +#define _MAX_FNAME 256 +#define _MAX_DIR _MAX_FNAME +#define _MAX_EXT _MAX_FNAME +#define _MAX_PATH 260 +#endif + /* * These values may be used as exit status codes. */ @@ -163,6 +171,7 @@ void _exit(int nStatus) _ATTRIB_NORETURN; int _putenv(const char *val); void _searchenv(const char *file, const char *var, char *path); void _splitpath(const char *path, char *drive, char *dir, char *fname, char *ext); +void _wsplitpath(const wchar_t* path, wchar_t* drive, wchar_t* dir, wchar_t* fname, wchar_t* ext); char* _itoa(int nValue, char* sz, int nRadix); char* _ltoa(long lnValue, char* sz, int nRadix); @@ -221,6 +230,16 @@ unsigned long _lrotr(unsigned long value, int shift); */ #undef _ATTRIB_NORETURN +#ifndef _DISABLE_TIDENTS +#ifdef UNICODE +#define _tsplitpath _wsplitpath +#define _tmakepath _wmakepath +#else +#define _tsplitpath _splitpath +#define _tmakepath _makepath +#endif +#endif /* _DISABLE_TIDENTS */ + #ifdef __cplusplus } #endif diff --git a/include/msvcrt/string.h b/include/msvcrt/string.h index c471845..73bcbe3 100644 --- a/include/msvcrt/string.h +++ b/include/msvcrt/string.h @@ -44,7 +44,7 @@ extern "C" { #endif -char * ___strtok; // removed extern specifier 02-06-98, BD +char * ___strtok; /* removed extern specifier 02-06-98, BD */ /* * Prototypes of the ANSI Standard C library string functions. @@ -63,7 +63,7 @@ size_t strcspn(const char* szGetPrefix, const char* szNotIncluding); char* strerror(int nError); /* NOTE: NOT an old name wrapper. */ char * _strerror(const char *s); size_t strlen(const char* sz); -size_t strnlen(const char* sz, size_t count); // not exported +size_t strnlen(const char* sz, size_t count); /* not exported */ char* strncat(char* szAddTo, const char* szAdd, size_t sizeMaxAdd); int strncmp(const char* sz1, const char* sz2, size_t sizeMaxCompare); char* strncpy(char* szCopyTo, const char* szSource, size_t sizeMaxCopy); diff --git a/include/napi/core.h b/include/napi/core.h index ca13d20..8548bb0 100644 --- a/include/napi/core.h +++ b/include/napi/core.h @@ -2,9 +2,12 @@ #define __INCLUDE_NAPI_CORE_H #include "../ntoskrnl/include/internal/ke.h" +#include #define MM_CORE_DUMP_HEADER_MAGIC (0xdeafbead) #define MM_CORE_DUMP_HEADER_VERSION (0x1) + +#define MM_CORE_DUMP_TYPE_NONE (0x0) #define MM_CORE_DUMP_TYPE_MINIMAL (0x1) #define MM_CORE_DUMP_TYPE_FULL (0x2) @@ -21,15 +24,12 @@ typedef struct _MM_CORE_DUMP_HEADER ULONG PhysicalMemorySize; } MM_CORE_DUMP_HEADER, *PMM_CORE_DUMP_HEADER; -typedef struct _MM_DUMP_POINTERS +typedef struct MM_CORE_DUMP_FUNCTIONS { - PVOID Context; - NTSTATUS (*DeviceInit)(PVOID Context); - NTSTATUS (*DeviceWrite)(PVOID Context, ULONG Block, PMDL Mdl); - NTSTATUS (*DeviceFinish)(PVOID Context); -} MM_DUMP_POINTERS, *PMM_DUMP_POINTERS; - -#define FSCTL_GET_DUMP_BLOCK_MAP (('R' << 24) | 0xF1) -#define IOCTL_GET_DUMP_POINTERS (('R' << 24) | 0xF2) + NTSTATUS STDCALL (*DumpPrepare)(PDEVICE_OBJECT DeviceObject, PDUMP_POINTERS DumpPointers); + NTSTATUS STDCALL (*DumpInit)(VOID); + NTSTATUS STDCALL (*DumpWrite)(LARGE_INTEGER Address, PMDL Mdl); + NTSTATUS STDCALL (*DumpFinish)(VOID); +} MM_CORE_DUMP_FUNCTIONS, *PMM_CORE_DUMP_FUNCTIONS; #endif /* __INCLUDE_NAPI_CORE_H */ diff --git a/include/napi/lpc.h b/include/napi/lpc.h index f136bf5..3c713d6 100644 --- a/include/napi/lpc.h +++ b/include/napi/lpc.h @@ -3,6 +3,7 @@ #ifdef __USE_W32API #include +#include #endif /* !__USE_W32API */ #include @@ -46,20 +47,20 @@ typedef struct _LPC_SECTION_READ PVOID ViewBase; } LPC_SECTION_READ, *PLPC_SECTION_READ; -typedef struct _LPC_MESSAGE_HEADER +typedef struct _LPC_MESSAGE { USHORT DataSize; USHORT MessageSize; -// LPC_TYPE MessageType; USHORT MessageType; USHORT VirtualRangesOffset; - CLIENT_ID Cid; + CLIENT_ID ClientId; ULONG MessageId; - ULONG SharedSectionSize; + ULONG SectionSize; /* CallbackID */ } LPC_MESSAGE, *PLPC_MESSAGE; #endif /* !__USE_W32API */ + typedef struct _LPC_TERMINATION_MESSAGE { LPC_MESSAGE Header; diff --git a/include/napi/npipe.h b/include/napi/npipe.h index 58c1b1a..758a7d7 100644 --- a/include/napi/npipe.h +++ b/include/napi/npipe.h @@ -135,7 +135,7 @@ typedef struct _NPFS_WAIT_PIPE LARGE_INTEGER Timeout; } NPFS_WAIT_PIPE, *PNPFS_WAIT_PIPE; -#ifdef __GNUC__ // robd +#ifdef __GNUC__ /* robd */ typedef struct _NPFS_LISTEN { } NPFS_LISTEN, *PNPFS_LISTEN; diff --git a/include/napi/shared_data.h b/include/napi/shared_data.h index a44b154..2893d15 100644 --- a/include/napi/shared_data.h +++ b/include/napi/shared_data.h @@ -31,7 +31,7 @@ typedef struct _KUSER_SHARED_DATA ULONG NtMinorVersion; BOOLEAN ProcessorFeatures[PROCESSOR_FEATURES_MAX]; - // NT5 / Win2k specific ?? + /* NT5 / Win2k specific ?? */ ULONG Reserved1; ULONG Reserved3; volatile ULONG TimeSlip; @@ -58,7 +58,12 @@ typedef struct _KUSER_SHARED_DATA #define USER_SHARED_DATA (0x7FFE0000) #if defined(__NTOSKRNL__) || defined(__NTDRIVER__) || defined(__NTHAL__) -#define KI_USER_SHARED_DATA (0xFFDF0000) +#ifndef __USE_W32API +#define KI_USER_SHARED_DATA (0xFFDF0000) +#endif +#ifdef SharedUserData +#undef SharedUserData +#endif #define SharedUserData ((KUSER_SHARED_DATA * const)KI_USER_SHARED_DATA) #else #ifndef __USE_W32API diff --git a/include/napi/teb.h b/include/napi/teb.h index 0cf8beb..701de83 100644 --- a/include/napi/teb.h +++ b/include/napi/teb.h @@ -48,16 +48,16 @@ typedef struct _RTL_USER_PROCESS_PARAMETERS { } RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS; typedef struct _NT_TIB { - struct _EXCEPTION_REGISTRATION_RECORD* ExceptionList; // 00h - PVOID StackBase; // 04h - PVOID StackLimit; // 08h - PVOID SubSystemTib; // 0Ch + struct _EXCEPTION_REGISTRATION_RECORD* ExceptionList; /* 00h */ + PVOID StackBase; /* 04h */ + PVOID StackLimit; /* 08h */ + PVOID SubSystemTib; /* 0Ch */ union { - PVOID FiberData; // 10h - ULONG Version; // 10h + PVOID FiberData; /* 10h */ + ULONG Version; /* 10h */ } Fib; - PVOID ArbitraryUserPointer; // 14h - struct _NT_TIB *Self; // 18h + PVOID ArbitraryUserPointer; /* 14h */ + struct _NT_TIB *Self; /* 18h */ } NT_TIB, *PNT_TIB; #endif /* !__USE_W32API */ @@ -101,58 +101,58 @@ typedef VOID STDCALL_FUNC (*PPEBLOCKROUTINE)(PVOID); typedef struct _PEB { - UCHAR InheritedAddressSpace; // 00h - UCHAR ReadImageFileExecOptions; // 01h - UCHAR BeingDebugged; // 02h - UCHAR Spare; // 03h - PVOID Mutant; // 04h - PVOID ImageBaseAddress; // 08h - PPEB_LDR_DATA Ldr; // 0Ch - PRTL_USER_PROCESS_PARAMETERS ProcessParameters; // 10h - PVOID SubSystemData; // 14h - PVOID ProcessHeap; // 18h - PVOID FastPebLock; // 1Ch - PPEBLOCKROUTINE FastPebLockRoutine; // 20h - PPEBLOCKROUTINE FastPebUnlockRoutine; // 24h - ULONG EnvironmentUpdateCount; // 28h - PVOID* KernelCallbackTable; // 2Ch - PVOID EventLogSection; // 30h - PVOID EventLog; // 34h - PPEB_FREE_BLOCK FreeList; // 38h - ULONG TlsExpansionCounter; // 3Ch - PVOID TlsBitmap; // 40h - ULONG TlsBitmapBits[0x2]; // 44h - PVOID ReadOnlySharedMemoryBase; // 4Ch - PVOID ReadOnlySharedMemoryHeap; // 50h - PVOID* ReadOnlyStaticServerData; // 54h - PVOID AnsiCodePageData; // 58h - PVOID OemCodePageData; // 5Ch - PVOID UnicodeCaseTableData; // 60h - ULONG NumberOfProcessors; // 64h - ULONG NtGlobalFlag; // 68h - UCHAR Spare2[0x4]; // 6Ch - LARGE_INTEGER CriticalSectionTimeout; // 70h - ULONG HeapSegmentReserve; // 78h - ULONG HeapSegmentCommit; // 7Ch - ULONG HeapDeCommitTotalFreeThreshold; // 80h - ULONG HeapDeCommitFreeBlockThreshold; // 84h - ULONG NumberOfHeaps; // 88h - ULONG MaximumNumberOfHeaps; // 8Ch - PVOID** ProcessHeaps; // 90h - PVOID GdiSharedHandleTable; // 94h - PVOID ProcessStarterHelper; // 98h - PVOID GdiDCAttributeList; // 9Ch - PVOID LoaderLock; // A0h - ULONG OSMajorVersion; // A4h - ULONG OSMinorVersion; // A8h - USHORT OSBuildNumber; // ACh - UCHAR SPMajorVersion; // AEh - UCHAR SPMinorVersion; // AFh - ULONG OSPlatformId; // B0h - ULONG ImageSubSystem; // B4h - ULONG ImageSubSystemMajorVersion; // B8h - ULONG ImageSubSystemMinorVersion; // C0h - ULONG GdiHandleBuffer[0x22]; // C4h + UCHAR InheritedAddressSpace; /* 00h */ + UCHAR ReadImageFileExecOptions; /* 01h */ + UCHAR BeingDebugged; /* 02h */ + UCHAR Spare; /* 03h */ + PVOID Mutant; /* 04h */ + PVOID ImageBaseAddress; /* 08h */ + PPEB_LDR_DATA Ldr; /* 0Ch */ + PRTL_USER_PROCESS_PARAMETERS ProcessParameters; /* 10h */ + PVOID SubSystemData; /* 14h */ + PVOID ProcessHeap; /* 18h */ + PVOID FastPebLock; /* 1Ch */ + PPEBLOCKROUTINE FastPebLockRoutine; /* 20h */ + PPEBLOCKROUTINE FastPebUnlockRoutine; /* 24h */ + ULONG EnvironmentUpdateCount; /* 28h */ + PVOID* KernelCallbackTable; /* 2Ch */ + PVOID EventLogSection; /* 30h */ + PVOID EventLog; /* 34h */ + PPEB_FREE_BLOCK FreeList; /* 38h */ + ULONG TlsExpansionCounter; /* 3Ch */ + PVOID TlsBitmap; /* 40h */ + ULONG TlsBitmapBits[0x2]; /* 44h */ + PVOID ReadOnlySharedMemoryBase; /* 4Ch */ + PVOID ReadOnlySharedMemoryHeap; /* 50h */ + PVOID* ReadOnlyStaticServerData; /* 54h */ + PVOID AnsiCodePageData; /* 58h */ + PVOID OemCodePageData; /* 5Ch */ + PVOID UnicodeCaseTableData; /* 60h */ + ULONG NumberOfProcessors; /* 64h */ + ULONG NtGlobalFlag; /* 68h */ + UCHAR Spare2[0x4]; /* 6Ch */ + LARGE_INTEGER CriticalSectionTimeout; /* 70h */ + ULONG HeapSegmentReserve; /* 78h */ + ULONG HeapSegmentCommit; /* 7Ch */ + ULONG HeapDeCommitTotalFreeThreshold; /* 80h */ + ULONG HeapDeCommitFreeBlockThreshold; /* 84h */ + ULONG NumberOfHeaps; /* 88h */ + ULONG MaximumNumberOfHeaps; /* 8Ch */ + PVOID** ProcessHeaps; /* 90h */ + PVOID GdiSharedHandleTable; /* 94h */ + PVOID ProcessStarterHelper; /* 98h */ + PVOID GdiDCAttributeList; /* 9Ch */ + PVOID LoaderLock; /* A0h */ + ULONG OSMajorVersion; /* A4h */ + ULONG OSMinorVersion; /* A8h */ + USHORT OSBuildNumber; /* ACh */ + UCHAR SPMajorVersion; /* AEh */ + UCHAR SPMinorVersion; /* AFh */ + ULONG OSPlatformId; /* B0h */ + ULONG ImageSubSystem; /* B4h */ + ULONG ImageSubSystemMajorVersion; /* B8h */ + ULONG ImageSubSystemMinorVersion; /* C0h */ + ULONG GdiHandleBuffer[0x22]; /* C4h */ } PEB; #ifndef __USE_W32API @@ -170,62 +170,66 @@ typedef struct _GDI_TEB_BATCH typedef struct _TEB { - NT_TIB Tib; // 00h - PVOID EnvironmentPointer; // 1Ch - CLIENT_ID Cid; // 20h - PVOID ActiveRpcInfo; // 28h - PVOID ThreadLocalStoragePointer; // 2Ch - PPEB Peb; // 30h - ULONG LastErrorValue; // 34h - ULONG CountOfOwnedCriticalSections; // 38h - PVOID CsrClientThread; // 3Ch - struct _W32THREAD* Win32ThreadInfo; // 40h - ULONG Win32ClientInfo[0x1F]; // 44h - PVOID WOW32Reserved; // C0h - ULONG CurrentLocale; // C4h - ULONG FpSoftwareStatusRegister; // C8h - PVOID SystemReserved1[0x36]; // CCh - PVOID Spare1; // 1A4h - LONG ExceptionCode; // 1A8h - UCHAR SpareBytes1[0x28]; // 1ACh - PVOID SystemReserved2[0xA]; // 1D4h - GDI_TEB_BATCH GdiTebBatch; // 1FCh - ULONG gdiRgn; // 6DCh - ULONG gdiPen; // 6E0h - ULONG gdiBrush; // 6E4h - CLIENT_ID RealClientId; // 6E8h - PVOID GdiCachedProcessHandle; // 6F0h - ULONG GdiClientPID; // 6F4h - ULONG GdiClientTID; // 6F8h - PVOID GdiThreadLocaleInfo; // 6FCh - PVOID UserReserved[5]; // 700h - PVOID glDispatchTable[0x118]; // 714h - ULONG glReserved1[0x1A]; // B74h - PVOID glReserved2; // BDCh - PVOID glSectionInfo; // BE0h - PVOID glSection; // BE4h - PVOID glTable; // BE8h - PVOID glCurrentRC; // BECh - PVOID glContext; // BF0h - NTSTATUS LastStatusValue; // BF4h - UNICODE_STRING StaticUnicodeString; // BF8h - WCHAR StaticUnicodeBuffer[0x105]; // C00h - PVOID DeallocationStack; // E0Ch - PVOID TlsSlots[0x40]; // E10h - LIST_ENTRY TlsLinks; // F10h - PVOID Vdm; // F18h - PVOID ReservedForNtRpc; // F1Ch - PVOID DbgSsReserved[0x2]; // F20h - ULONG HardErrorDisabled; // F28h - PVOID Instrumentation[0x10]; // F2Ch - PVOID WinSockData; // F6Ch - ULONG GdiBatchCount; // F70h - ULONG Spare2; // F74h // NOTE: RtlExitUserThread writes something here - ULONG Spare3; // F78h - ULONG Spare4; // F7Ch - PVOID ReservedForOle; // F80h - ULONG WaitingOnLoaderLock; // F84h - PVOID WineDebugInfo; // Needed for WINE DLL's + NT_TIB Tib; /* 00h */ + PVOID EnvironmentPointer; /* 1Ch */ + CLIENT_ID Cid; /* 20h */ + PVOID ActiveRpcInfo; /* 28h */ + PVOID ThreadLocalStoragePointer; /* 2Ch */ + PPEB Peb; /* 30h */ + ULONG LastErrorValue; /* 34h */ + ULONG CountOfOwnedCriticalSections; /* 38h */ + PVOID CsrClientThread; /* 3Ch */ + struct _W32THREAD* Win32ThreadInfo; /* 40h */ + ULONG Win32ClientInfo[0x1F]; /* 44h */ + PVOID WOW32Reserved; /* C0h */ + ULONG CurrentLocale; /* C4h */ + ULONG FpSoftwareStatusRegister; /* C8h */ + PVOID SystemReserved1[0x36]; /* CCh */ + PVOID Spare1; /* 1A4h */ + LONG ExceptionCode; /* 1A8h */ + UCHAR SpareBytes1[0x28]; /* 1ACh */ + PVOID SystemReserved2[0xA]; /* 1D4h */ + GDI_TEB_BATCH GdiTebBatch; /* 1FCh */ + ULONG gdiRgn; /* 6DCh */ + ULONG gdiPen; /* 6E0h */ + ULONG gdiBrush; /* 6E4h */ + CLIENT_ID RealClientId; /* 6E8h */ + PVOID GdiCachedProcessHandle; /* 6F0h */ + ULONG GdiClientPID; /* 6F4h */ + ULONG GdiClientTID; /* 6F8h */ + PVOID GdiThreadLocaleInfo; /* 6FCh */ + PVOID UserReserved[5]; /* 700h */ + PVOID glDispatchTable[0x118]; /* 714h */ + ULONG glReserved1[0x1A]; /* B74h */ + PVOID glReserved2; /* BDCh */ + PVOID glSectionInfo; /* BE0h */ + PVOID glSection; /* BE4h */ + PVOID glTable; /* BE8h */ + PVOID glCurrentRC; /* BECh */ + PVOID glContext; /* BF0h */ + NTSTATUS LastStatusValue; /* BF4h */ + UNICODE_STRING StaticUnicodeString; /* BF8h */ + WCHAR StaticUnicodeBuffer[0x105]; /* C00h */ + PVOID DeallocationStack; /* E0Ch */ + PVOID TlsSlots[0x40]; /* E10h */ + LIST_ENTRY TlsLinks; /* F10h */ + PVOID Vdm; /* F18h */ + PVOID ReservedForNtRpc; /* F1Ch */ + PVOID DbgSsReserved[0x2]; /* F20h */ + ULONG HardErrorDisabled; /* F28h */ + PVOID Instrumentation[0x10]; /* F2Ch */ + PVOID WinSockData; /* F6Ch */ + ULONG GdiBatchCount; /* F70h */ + USHORT Spare2; /* F74h */ + BOOLEAN IsFiber; /* F76h */ + UCHAR Spare3; /* F77h */ + ULONG Spare4; /* F78h */ + ULONG Spare5; /* F7Ch */ + PVOID ReservedForOle; /* F80h */ + ULONG WaitingOnLoaderLock; /* F84h */ + ULONG Unknown[11]; /* F88h */ + PVOID FlsSlots; /* FB4h */ + PVOID WineDebugInfo; /* Needed for WINE DLL's */ } TEB, *PTEB; /* FIXME: at least NtCurrentTeb should be defined in winnt.h */ @@ -234,10 +238,6 @@ typedef struct _TEB #if defined(_M_IX86) /* on the x86, the TEB is contained in the FS segment */ -/* - FIXME: GCC should allow defining a variable that directly maps to a register. - It could make for even faster code -*/ static inline struct _TEB * NtCurrentTeb(void) { struct _TEB * pTeb; diff --git a/include/napi/types.h b/include/napi/types.h index 01560e1..0a65ce7 100644 --- a/include/napi/types.h +++ b/include/napi/types.h @@ -1,7 +1,7 @@ #ifndef __INCLUDE_NAPI_TYPES_H #define __INCLUDE_NAPI_TYPES_H -// these should be moved to a file like ntdef.h +/* these should be moved to a file like ntdef.h */ enum { diff --git a/include/napi/win32.h b/include/napi/win32.h index 948d28e..5e7e79e 100644 --- a/include/napi/win32.h +++ b/include/napi/win32.h @@ -13,6 +13,8 @@ typedef struct _W32PROCESS { FAST_MUTEX ClassListLock; LIST_ENTRY ClassListHead; + FAST_MUTEX MenuListLock; + LIST_ENTRY MenuListHead; struct _WINSTATION_OBJECT* WindowStation; } W32PROCESS, *PW32PROCESS; diff --git a/include/ndis.h b/include/ndis.h new file mode 100644 index 0000000..622fb75 --- /dev/null +++ b/include/ndis.h @@ -0,0 +1 @@ +#include "net/ndis.h" diff --git a/include/net/miniport.h b/include/net/miniport.h index 533a8ff..6862292 100644 --- a/include/net/miniport.h +++ b/include/net/miniport.h @@ -4,6 +4,7 @@ * FILE: include/net/miniport.h * PURPOSE: Type definitions available only to NDIS miniport drivers */ +#if 0 #ifndef __MINIPORT_H #define __MINIPORT_H @@ -847,3 +848,4 @@ WRITE_REGISTER_USHORT( #endif /* __MINIPORT_H */ /* EOF */ +#endif diff --git a/include/net/ndis.h b/include/net/ndis.h index b88a48a..040f459 100644 --- a/include/net/ndis.h +++ b/include/net/ndis.h @@ -6,11 +6,24 @@ * DEFINES: i386 - Target platform is i386 * NDIS_WRAPPER - Define only for NDIS wrapper library * NDIS_MINIPORT_DRIVER - Define only for NDIS miniport drivers - * BINARY_COMPATIBLE - 0 = Use macros for some features - * - 1 = Use imports for features not available * NDIS40 - Use NDIS 4.0 structures by default * NDIS50 - Use NDIS 5.0 structures by default + * NDIS_WDM - Include wdm.h (currently just pulls in ntddk.h) + * + * NOTES: If NDIS_WDM is not defined, ntddk.h is included instead + * + * I have removed the following standard flag, used for building binary-compatible + * drivers for windows 98 and windows me: + * + * BINARY_COMPATIBLE - 0 = Use macros for some features + * - 1 = Use imports for features not available + * + * rationale: you're never going to use *this* ndis.h to build a driver for win9x. You'll + * use the MS ddk. This assumption drammatically simplifies ndis.h. */ + +// TODO: finish sanitizing NDIS40 and NDIS50; think about NDIS51 + #ifndef __NDIS_H #define __NDIS_H @@ -24,16 +37,6 @@ extern "C" #define NDIS40 #endif - -/* Windows 9x compatibillity for miniports on x86 platform */ -#ifndef BINARY_COMPATIBLE -#if defined(NDIS_MINIPORT_DRIVER) && defined(i386) -#define BINARY_COMPATIBLE 1 -#else -#define BINARY_COMPATIBLE 0 -#endif -#endif - #ifndef UNALIGNED #define UNALIGNED #endif @@ -42,13 +45,13 @@ extern "C" #define FASTCALL __attribute__((fastcall)) #endif -/* The NDIS library export functions. NDIS miniport drivers import functions */ +/* The NDIS library exports functions. NDIS miniport drivers import functions */ #ifdef NDIS_WRAPPER #ifdef _MSC_VER #define EXPIMP __declspec(dllexport) #else -#define EXPIMP STDCALL +#define EXPIMP STDCALL /* MS ndis.h is 100% stdcall due to compiler flag /Gz */ #endif #else /* NDIS_WRAPPER */ @@ -61,23 +64,39 @@ extern "C" #endif /* NDIS_WRAPPER */ +/* support NDIS_WDM and MAC drivers */ +#if defined (NDIS_WDM) +#include +#else +#include +#endif +/* Assert stuff */ +#ifdef DBG +VOID +STDCALL +RtlAssert ( + PVOID FailedAssertion, + PVOID FileName, + ULONG LineNumber, + PCHAR Message + ); -#ifdef NDIS_MINIPORT_DRIVER - -#include "miniport.h" - -#else /* NDIS_MINIPORT_DRIVER */ +#define ASSERT( exp ) if (!(exp)) RtlAssert( #exp, __FILE__, __LINE__, NULL ) +#define ASSERTMSG( msg, exp ) if (!(exp)) RtlAssert( #exp, __FILE__, __LINE__, msg ) -#ifdef _MSC_VER -#include +#else +#define ASSERT( exp ) +#define ASSERTMSG( msg, exp ) +#endif /* DBG */ -typedef ULONG ULONG_PTR, *PULONG_PTR; +/* Base types */ -#else /* _MSC_VER */ -#include +#define IN +#define OUT +#define OPTIONAL -/* FIXME: Missed some definitions in there */ +typedef CONST CHAR *PCSTR; typedef struct _DMA_CONFIGURATION_BYTE0 { @@ -182,34 +201,35 @@ typedef struct _CM_EISA_FUNCTION_INFORMATION UCHAR InitializationData[60]; } CM_EISA_FUNCTION_INFORMATION, *PCM_EISA_FUNCTION_INFORMATION; -#endif /* _MSC_VER */ +ULONG CDECL DbgPrint( + PCH Format, + ...); -/* FIXME: Missed some definitions in there */ -typedef CONST CHAR *PCSTR; +/* Core kernel functions */ + +VOID +STDCALL +KeStallExecutionProcessor( + ULONG MicroSeconds); -#endif /* NDIS_MINIPORT_DRIVER */ #include "netevent.h" #include "ndisoid.h" #include "ntddndis.h" -#if defined(NDIS_MINIPORT_DRIVER) || !defined(_MSC_VER) - +#if !defined(_MSC_VER) #ifndef _GUID_DEFINED #define _GUID_DEFINED - typedef struct _GUID { ULONG Data1; USHORT Data2; USHORT Data3; UCHAR Data4[8]; } GUID; - #endif /* _GUID_DEFINED */ - -#endif /* NDIS_MINIPORT_DRIVER || _MSC_VER */ +#endif /* _MSC_VER */ /* NDIS base types */ @@ -230,8 +250,6 @@ typedef int NDIS_STATUS, *PNDIS_STATUS; typedef UNICODE_STRING NDIS_STRING, *PNDIS_STRING; -typedef PCSTR NDIS_ANSI_STRING, *PNDIS_ANSI_STRING; - typedef MDL NDIS_BUFFER, *PNDIS_BUFFER; /* NDIS_STATUS constants */ @@ -338,11 +356,12 @@ typedef MDL NDIS_BUFFER, *PNDIS_BUFFER; #define NDIS_MEMORY_NONCACHED 0x00000002 /* NIC attribute flags. Used by NdisMSetAttributes(Ex) */ -#define NDIS_ATTRIBUTE_IGNORE_PACKET_TIMEOUT 0x00000001 +#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 @@ -395,7 +414,18 @@ typedef struct _NDIS_TIMER KDPC Dpc; } NDIS_TIMER, *PNDIS_TIMER; +VOID +EXPIMP +NdisInitializeTimer( + IN OUT PNDIS_TIMER Timer, + IN PNDIS_TIMER_FUNCTION TimerFunction, + IN PVOID FunctionContext); +VOID +EXPIMP +NdisSetTimer( + IN PNDIS_TIMER Timer, + IN UINT MillisecondsToDelay); /* Hardware */ @@ -615,6 +645,14 @@ typedef struct _NDIS_REQUEST { UINT BytesNeeded; } SET_INFORMATION; } DATA; +#ifdef NDIS50 + UCHAR NdisReserved[36]; + union { + UCHAR CallMgrReserved[8]; + UCHAR ProtocolReserved[8]; + }; + UCHAR MiniportReserved[8]; +#endif } NDIS_REQUEST, *PNDIS_REQUEST; @@ -661,6 +699,9 @@ typedef struct _NDIS_DMA_BLOCK BOOLEAN InProgress; } NDIS_DMA_BLOCK, *PNDIS_DMA_BLOCK; +#define NDIS_DMA_24BITS 0 +#define NDIS_DMA_32BITS 1 +#define NDIS_DMA_64BITS 2 /* Possible hardware architecture */ typedef enum _NDIS_INTERFACE_TYPE @@ -678,15 +719,35 @@ typedef enum _NDIS_INTERFACE_TYPE #define NdisInterruptLatched Latched typedef KINTERRUPT_MODE NDIS_INTERRUPT_MODE, *PNDIS_INTERRUPT_MODE; +typedef enum _NDIS_PROCESSOR_TYPE +{ + NdisProcessorX86, + NdisProcessorMips, + NdisProcessorAlpha, + NdisProcessorPpc +} NDIS_PROCESSOR_TYPE, *PNDIS_PROCESSOR_TYPE; + +typedef enum _NDIS_ENVIRONMENT_TYPE +{ + NdisEnvironmentWindows, + NdisEnvironmentWindowsNt +} NDIS_ENVIRONMENT_TYPE, *PNDIS_ENVIRONMENT_TYPE; typedef enum _NDIS_PARAMETER_TYPE { NdisParameterInteger, NdisParameterHexInteger, NdisParameterString, - NdisParameterMultiString + 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; @@ -694,10 +755,10 @@ typedef struct _NDIS_CONFIGURATION_PARAMETER { 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 @@ -739,8 +800,6 @@ typedef enum _NDIS_PNP_DEVICE_STATE #endif /* NDIS_WRAPPER */ -#ifdef NDIS50 - typedef struct _ATM_ADDRESS ATM_ADDRESS, *PATM_ADDRESS; @@ -1174,8 +1233,6 @@ typedef struct _NDIS_CLIENT_CHARACTERISTICS CL_CALL_CONNECTED_HANDLER ClCallConnectedHandler; } NDIS_CLIENT_CHARACTERISTICS, *PNDIS_CLIENT_CHARACTERISTICS; -#endif /* NDIS50 */ - /* NDIS protocol structures */ @@ -1565,100 +1622,31 @@ NdisUnchainBufferAtFront( IN OUT PNDIS_PACKET Packet, OUT PNDIS_BUFFER *Buffer); -#if BINARY_COMPATIBLE - -VOID -EXPIMP -NdisAdjustBufferLength( - IN PNDIS_BUFFER Buffer, - IN UINT Length); - -ULONG -EXPIMP -NDIS_BUFFER_TO_SPAN_PAGES( - IN PNDIS_BUFFER Buffer); - -VOID -EXPIMP -NdisFreeBuffer( - IN PNDIS_BUFFER Buffer); - -VOID -EXPIMP -NdisGetBufferPhysicalArraySize( - IN PNDIS_BUFFER Buffer, - OUT PUINT ArraySize); - -VOID -EXPIMP -NdisGetFirstBufferFromPacket( - IN PNDIS_PACKET _Packet, - OUT PNDIS_BUFFER *_FirstBuffer, - OUT PVOID *_FirstBufferVA, - OUT PUINT _FirstBufferLength, - OUT PUINT _TotalBufferLength); - -VOID -EXPIMP -NdisQueryBuffer( - IN PNDIS_BUFFER Buffer, - OUT PVOID *VirtualAddress OPTIONAL, - OUT PUINT Length); - -VOID -EXPIMP -NdisQueryBufferOffset( - IN PNDIS_BUFFER Buffer, - OUT PUINT Offset, - OUT PUINT Length); - -#else /* BINARY_COMPATIBLE */ - /* * PVOID NdisAdjustBufferLength( * IN PNDIS_BUFFER Buffer, * IN UINT Length); */ -#define NdisAdjustBufferLength(Buffer, \ - Length) \ -{ \ - (Buffer)->ByteCount = (Length); \ -} - +VOID +EXPIMP +NdisAdjustBufferLength( + IN PNDIS_BUFFER Buffer, + IN UINT Length); /* * ULONG NDIS_BUFFER_TO_SPAN_PAGES( * IN PNDIS_BUFFER Buffer); */ -#define NDIS_BUFFER_TO_SPAN_PAGES(Buffer) \ -( \ - MmGetMdlByteCount(Buffer) == 0 ? \ - 1 : \ - ADDRESS_AND_SIZE_TO_SPAN_PAGES( \ - MmGetMdlVirtualAddress(Buffer), \ - MmGetMdlByteCount(Buffer)) \ -) - - -#if 0 - -/* - * VOID NdisFreeBuffer( - * IN PNDIS_BUFFER Buffer); - */ -#define NdisFreeBuffer(Buffer) \ -{ \ - IoFreeMdl(Buffer) /* ??? */ \ -} - -#else +ULONG +EXPIMP +NDIS_BUFFER_TO_SPAN_PAGES( + IN PNDIS_BUFFER Buffer); VOID EXPIMP NdisFreeBuffer( IN PNDIS_BUFFER Buffer); -#endif /* @@ -1666,11 +1654,11 @@ NdisFreeBuffer( * IN PNDIS_BUFFER Buffer, * OUT PUINT ArraySize); */ -#define NdisGetBufferPhysicalArraySize(Buffer, \ - ArraySize) \ -{ \ -} - +VOID +EXPIMP +NdisGetBufferPhysicalArraySize( + IN PNDIS_BUFFER Buffer, + OUT PUINT ArraySize); /* * VOID NdisGetFirstBufferFromPacket( @@ -1680,62 +1668,28 @@ NdisFreeBuffer( * OUT PUINT _FirstBufferLength, * OUT PUINT _TotalBufferLength) */ -#define NdisGetFirstBufferFromPacket(Packet, \ - FirstBuffer, \ - FirstBufferVA, \ - FirstBufferLength, \ - TotalBufferLength) \ -{ \ - PNDIS_BUFFER _Buffer; \ - \ - _Buffer = (Packet)->Private.Head; \ - *(FirstBuffer) = _Buffer; \ - *(FirstBufferVA) = MmGetMdlVirtualAddress(_Buffer); \ - if (_Buffer != NULL) { \ - *(FirstBufferLength) = MmGetMdlByteCount(_Buffer); \ - _Buffer = _Buffer->Next; \ - } else \ - *(FirstBufferLength) = 0; \ - *(TotalBufferLength) = *(FirstBufferLength); \ - while (_Buffer != NULL) { \ - *(TotalBufferLength) += MmGetMdlByteCount(_Buffer); \ - _Buffer = _Buffer->Next; \ - } \ -} - -/* - * 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); \ -} +VOID +EXPIMP +NdisGetFirstBufferFromPacket( + IN PNDIS_PACKET _Packet, + OUT PNDIS_BUFFER * _FirstBuffer, + OUT PVOID * _FirstBufferVA, + OUT PUINT _FirstBufferLength, + OUT PUINT _TotalBufferLength); -#endif /* BINARY_COMPATIBLE */ +VOID +EXPIMP +NdisQueryBuffer( + IN PNDIS_BUFFER Buffer, + OUT PVOID *VirtualAddress OPTIONAL, + OUT PUINT Length); +VOID +EXPIMP +NdisQueryBufferOffset( + IN PNDIS_BUFFER Buffer, + OUT PUINT Offset, + OUT PUINT Length); /* * PVOID NDIS_BUFFER_LINKAGE( @@ -1805,7 +1759,6 @@ NdisFreeBuffer( *(NextBuffer) = (CurrentBuffer)->Next; \ } - /* * UINT NdisGetPacketFlags( * IN PNDIS_PACKET Packet); @@ -2319,51 +2272,36 @@ NdisImmediateWritePciSlotInformation( IN ULONG Length ); -/* String management routines */ - -#if BINARY_COMPATIBLE - -NDIS_STATUS -EXPIMP -NdisAnsiStringToUnicodeString( - IN OUT PNDIS_STRING DestinationString, - IN PNDIS_ANSI_STRING SourceString); - -BOOLEAN -EXPIMP -NdisEqualString( - IN PNDIS_STRING String1, - IN PNDIS_STRING String2, - IN BOOLEAN CaseInsensitive); - -VOID -EXPIMP -NdisInitAnsiString( - IN OUT PNDIS_ANSI_STRING DestinationString, - IN PCSTR SourceString); - -VOID +ULONG EXPIMP -NdisInitUnicodeString( - IN OUT PNDIS_STRING DestinationString, - IN PCWSTR SourceString); +NdisReadPciSlotInformation( + IN NDIS_HANDLE NdisAdapterHandle, + IN ULONG SlotNumber, + IN ULONG Offset, + IN PVOID Buffer, + IN ULONG Length); -NDIS_STATUS +ULONG EXPIMP -NdisUnicodeStringToAnsiString( - IN OUT PNDIS_ANSI_STRING DestinationString, - IN PNDIS_STRING SourceString); +NdisWritePciSlotInformation( + IN NDIS_HANDLE NdisAdapterHandle, + IN ULONG SlotNumber, + IN ULONG Offset, + IN PVOID Buffer, + IN ULONG Length); -#else /* BINARY_COMPATIBLE */ +/* String management routines */ /* * NDIS_STATUS NdisAnsiStringToUnicodeString( * IN OUT PNDIS_STRING DestinationString, * IN PNDIS_ANSI_STRING SourceString); */ -#define NdisAnsiStringToUnicodeString(DestinationString, \ - SourceString) \ - RtlAnsiStringToUnicodeString((DestinationString), (SourceString), FALSE) +NDIS_STATUS +EXPIMP +NdisAnsiStringToUnicodeString( + IN OUT PNDIS_STRING DestinationString, + IN PANSI_STRING SourceString); /* * BOOLEAN NdisEqualString( @@ -2371,39 +2309,45 @@ NdisUnicodeStringToAnsiString( * IN PNDIS_STRING String2, * IN BOOLEAN CaseInsensitive) */ -#define NdisEqualString(String1, \ - String2, \ - CaseInsensitive) \ - RtlEqualUnicodeString((String1), (String2), (CaseInsensitive)) +BOOLEAN +EXPIMP +NdisEqualString( + IN PNDIS_STRING String1, + IN PNDIS_STRING String2, + IN BOOLEAN CaseInsensitive); /* * VOID NdisInitAnsiString( * IN OUT PNDIS_ANSI_STRING DestinationString, * IN PCSTR SourceString) */ -#define NdisInitAnsiString(DestinationString, \ - SourceString) \ - RtlInitString((DestinationString), (SourceString)) +VOID +EXPIMP +NdisInitAnsiString( + IN OUT PANSI_STRING DestinationString, + IN PCSTR SourceString); /* * VOID NdisInitUnicodeString( * IN OUT PNDIS_STRING DestinationString, * IN PCWSTR SourceString) */ -#define NdisInitUnicodeString(DestinationString, \ - SourceString) \ - RtlInitUnicodeString((DestinationString), (SourceString)) +VOID +EXPIMP +NdisInitUnicodeString( + IN OUT PNDIS_STRING DestinationString, + IN PCWSTR SourceString); /* * NDIS_STATUS NdisUnicodeStringToAnsiString( * IN OUT PNDIS_ANSI_STRING DestinationString, * IN PNDIS_STRING SourceString) - */ -#define NdisUnicodeStringToAnsiString(DestinationString, \ - SourceString) \ - RtlUnicodeStringToAnsiString((DestinationString), (SourceString), FALSE) - -#endif /* BINARY_COMPATIBLE */ + */ +NDIS_STATUS +EXPIMP +NdisUnicodeStringToAnsiString( + IN OUT PANSI_STRING DestinationString, + IN PNDIS_STRING SourceString); #define NdisFreeString(_s) NdisFreeMemory((s).Buffer, (s).MaximumLength, 0) #define NdisPrintString(_s) DbgPrint("%ls", (s).Buffer) @@ -2619,15 +2563,47 @@ NdisReadConfiguration( VOID EXPIMP +NdisReadNetworkAddress( + OUT PNDIS_STATUS Status, + OUT PVOID *NetworkAddress, + OUT PUINT NetworkAddressLength, + IN NDIS_HANDLE ConfigurationHandle); + +VOID +EXPIMP NdisWriteConfiguration( OUT PNDIS_STATUS Status, - IN NDIS_HANDLE WrapperConfigurationContext, + IN NDIS_HANDLE ConfigurationHandle, IN PNDIS_STRING Keyword, - IN PNDIS_CONFIGURATION_PARAMETER *ParameterValue); + IN PNDIS_CONFIGURATION_PARAMETER ParameterValue); + +VOID +EXPIMP +NdisOpenConfiguration( + OUT PNDIS_STATUS Status, + OUT PNDIS_HANDLE ConfigurationHandle, + IN NDIS_HANDLE WrapperConfigurationContext); +VOID +EXPIMP +NdisOpenConfigurationKeyByIndex( + OUT PNDIS_STATUS Status, + IN NDIS_HANDLE ConfigurationHandle, + IN ULONG Index, + OUT PNDIS_STRING KeyName, + OUT PNDIS_HANDLE KeyHandle); VOID EXPIMP +NdisOpenConfigurationKeyByName( + OUT PNDIS_STATUS Status, + IN NDIS_HANDLE ConfigurationHandle, + IN PNDIS_STRING SubKeyName, + OUT PNDIS_HANDLE SubKeyHandle); + + +VOID +/*EXPIMP*/ NdisWriteErrorLogEntry( IN NDIS_HANDLE NdisAdapterHandle, IN NDIS_ERROR_CODE ErrorCode, @@ -2833,14 +2809,10 @@ NdisDprReleaseSpinLock( VOID EXPIMP NdisGetCurrentSystemTime( - PLONGLONG pSystemTime + PLARGE_INTEGER pSystemTime ); -/* NDIS 5.0 extensions */ - -#ifdef NDIS50 - VOID EXPIMP NdisAcquireReadWriteLock( @@ -3001,23 +2973,6 @@ NdisMSetMiniportSecondary( IN NDIS_HANDLE MiniportAdapterHandle, IN NDIS_HANDLE PrimaryMiniportAdapterHandle); -VOID -EXPIMP -NdisOpenConfigurationKeyByIndex( - OUT PNDIS_STATUS Status, - IN NDIS_HANDLE ConfigurationHandle, - IN ULONG Index, - OUT PNDIS_STRING KeyName, - OUT PNDIS_HANDLE KeyHandle); - -VOID -EXPIMP -NdisOpenConfigurationKeyByName( - OUT PNDIS_STATUS Status, - IN NDIS_HANDLE ConfigurationHandle, - IN PNDIS_STRING SubKeyName, - OUT PNDIS_HANDLE SubKeyHandle); - UINT EXPIMP NdisPacketPoolUsage( @@ -3446,28 +3401,28 @@ NdisIMInitializeDeviceInstanceEx( IN PNDIS_STRING DriverInstance, IN NDIS_HANDLE DeviceContext OPTIONAL); -#endif /* NDIS50 */ +//#endif /* NDIS50 */ /* Prototypes for NDIS_MINIPORT_CHARACTERISTICS */ -typedef BOOLEAN (*W_CHECK_FOR_HANG_HANDLER)( +typedef BOOLEAN STDCALL (*W_CHECK_FOR_HANG_HANDLER)( IN NDIS_HANDLE MiniportAdapterContext); -typedef VOID (*W_DISABLE_INTERRUPT_HANDLER)( +typedef VOID STDCALL (*W_DISABLE_INTERRUPT_HANDLER)( IN NDIS_HANDLE MiniportAdapterContext); -typedef VOID (*W_ENABLE_INTERRUPT_HANDLER)( +typedef VOID STDCALL (*W_ENABLE_INTERRUPT_HANDLER)( IN NDIS_HANDLE MiniportAdapterContext); -typedef VOID (*W_HALT_HANDLER)( +typedef VOID STDCALL (*W_HALT_HANDLER)( IN NDIS_HANDLE MiniportAdapterContext); -typedef VOID (*W_HANDLE_INTERRUPT_HANDLER)( +typedef VOID STDCALL (*W_HANDLE_INTERRUPT_HANDLER)( IN NDIS_HANDLE MiniportAdapterContext); -typedef NDIS_STATUS (*W_INITIALIZE_HANDLER)( +typedef NDIS_STATUS STDCALL (*W_INITIALIZE_HANDLER)( OUT PNDIS_STATUS OpenErrorStatus, OUT PUINT SelectedMediumIndex, IN PNDIS_MEDIUM MediumArray, @@ -3475,12 +3430,12 @@ typedef NDIS_STATUS (*W_INITIALIZE_HANDLER)( IN NDIS_HANDLE MiniportAdapterContext, IN NDIS_HANDLE WrapperConfigurationContext); -typedef VOID (*W_ISR_HANDLER)( +typedef VOID STDCALL STDCALL (*W_ISR_HANDLER)( OUT PBOOLEAN InterruptRecognized, OUT PBOOLEAN QueueMiniportHandleInterrupt, IN NDIS_HANDLE MiniportAdapterContext); -typedef NDIS_STATUS (*W_QUERY_INFORMATION_HANDLER)( +typedef NDIS_STATUS STDCALL (*W_QUERY_INFORMATION_HANDLER)( IN NDIS_HANDLE MiniportAdapterContext, IN NDIS_OID Oid, IN PVOID InformationBuffer, @@ -3488,26 +3443,26 @@ typedef NDIS_STATUS (*W_QUERY_INFORMATION_HANDLER)( OUT PULONG BytesWritten, OUT PULONG BytesNeeded); -typedef NDIS_STATUS (*W_RECONFIGURE_HANDLER)( +typedef NDIS_STATUS STDCALL (*W_RECONFIGURE_HANDLER)( OUT PNDIS_STATUS OpenErrorStatus, IN NDIS_HANDLE MiniportAdapterContext, IN NDIS_HANDLE WrapperConfigurationContext); -typedef NDIS_STATUS (*W_RESET_HANDLER)( +typedef NDIS_STATUS STDCALL (*W_RESET_HANDLER)( OUT PBOOLEAN AddressingReset, IN NDIS_HANDLE MiniportAdapterContext); -typedef NDIS_STATUS (*W_SEND_HANDLER)( +typedef NDIS_STATUS STDCALL (*W_SEND_HANDLER)( IN NDIS_HANDLE MiniportAdapterContext, IN PNDIS_PACKET Packet, IN UINT Flags); -typedef NDIS_STATUS (*WM_SEND_HANDLER)( +typedef NDIS_STATUS STDCALL (*WM_SEND_HANDLER)( IN NDIS_HANDLE MiniportAdapterContext, IN NDIS_HANDLE NdisLinkHandle, IN PNDIS_WAN_PACKET Packet); -typedef NDIS_STATUS (*W_SET_INFORMATION_HANDLER)( +typedef NDIS_STATUS STDCALL (*W_SET_INFORMATION_HANDLER)( IN NDIS_HANDLE MiniportAdapterContext, IN NDIS_OID Oid, IN PVOID InformationBuffer, @@ -3515,7 +3470,7 @@ typedef NDIS_STATUS (*W_SET_INFORMATION_HANDLER)( OUT PULONG BytesRead, OUT PULONG BytesNeeded); -typedef NDIS_STATUS (*W_TRANSFER_DATA_HANDLER)( +typedef NDIS_STATUS STDCALL (*W_TRANSFER_DATA_HANDLER)( OUT PNDIS_PACKET Packet, OUT PUINT BytesTransferred, IN NDIS_HANDLE MiniportAdapterContext, @@ -3523,7 +3478,7 @@ typedef NDIS_STATUS (*W_TRANSFER_DATA_HANDLER)( IN UINT ByteOffset, IN UINT BytesToTransfer); -typedef NDIS_STATUS (*WM_TRANSFER_DATA_HANDLER)( +typedef NDIS_STATUS STDCALL (*WM_TRANSFER_DATA_HANDLER)( VOID); @@ -4496,7 +4451,7 @@ typedef VOID (*FDDI_RCV_INDICATE_HANDLER)( IN UINT LookaheadBufferSize, IN UINT PacketSize); -typedef VOID (*FILTER_PACKET_INDICATION_HANDLER)( +typedef VOID STDCALL (*FILTER_PACKET_INDICATION_HANDLER)( IN NDIS_HANDLE Miniport, IN PPNDIS_PACKET PacketArray, IN UINT NumberOfPackets); @@ -4915,6 +4870,22 @@ struct _NDIS_OPEN_BLOCK /* Routines for NDIS miniport drivers */ +/* + * 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)) + VOID EXPIMP NdisInitializeWrapper( @@ -5095,22 +5066,6 @@ EXPIMP NdisMIndicateStatusComplete( IN NDIS_HANDLE 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)) - NDIS_STATUS EXPIMP NdisMMapIoSpace( @@ -5158,6 +5113,32 @@ NdisMRegisterMiniport( IN PNDIS_MINIPORT_CHARACTERISTICS MiniportCharacteristics, IN UINT CharacteristicsLength); +VOID +EXPIMP +NdisMSetTimer( + IN PNDIS_MINIPORT_TIMER Timer, + IN UINT MillisecondsToDelay); + +VOID +EXPIMP +NdisMInitializeTimer( + IN OUT PNDIS_MINIPORT_TIMER Timer, + IN NDIS_HANDLE MiniportAdapterHandle, + IN PNDIS_TIMER_FUNCTION TimerFunction, + IN PVOID FunctionContext); + +VOID +EXPIMP +NdisMSetPeriodicTimer( + IN PNDIS_MINIPORT_TIMER Timer, + IN UINT MillisecondPeriod); + +VOID +EXPIMP +NdisMCancelTimer( + IN PNDIS_MINIPORT_TIMER Timer, + OUT PBOOLEAN TimerCancelled); + #ifndef NDIS_WRAPPER @@ -5433,8 +5414,6 @@ NdisUpdateSharedMemory( /* Routines for NDIS protocol drivers */ -#if BINARY_COMPATIBLE - VOID EXPIMP NdisRequest( @@ -5465,47 +5444,14 @@ NdisSendPackets( VOID EXPIMP 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); - -#else /* BINARY_COMPATIBLE */ - -#define NdisRequest(Status, \ - NdisBindingHandle, \ - NdisRequest) \ -{ \ - *(Status) = (((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->RequestHandler)( \ - ((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->MacBindingHandle, (NdisRequest)); \ -} - -#define NdisReset(Status, \ - NdisBindingHandle) \ -{ \ - *(Status) = (((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->ResetHandler)( \ - ((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->MacBindingHandle); \ -} - -#define NdisSend(Status, \ - NdisBindingHandle, \ - Packet) \ -{ \ - *(Status) = (((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->u1.SendHandler)( \ - ((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->MacBindingHandle, (Packet)); \ -} - -#define NdisSendPackets(NdisBindingHandle, \ - PacketArray, \ - NumberOfPackets) \ -{ \ - (((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->SendPacketsHandler)( \ - (PNDIS_OPEN_BLOCK)(NdisBindingHandle), (PacketArray), (NumberOfPackets)); \ -} - + 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); +/* #define NdisTransferData(Status, \ NdisBindingHandle, \ MacReceiveContext, \ @@ -5522,8 +5468,7 @@ NdisTransferData( (Packet), \ (BytesTransferred)); \ } - -#endif /* BINARY_COMPATIBLE */ +*/ VOID @@ -5605,3 +5550,127 @@ NdisReturnPackets( #endif /* __NDIS_H */ /* EOF */ + +/* + * XXX - these macros are disabled for the momentdue to the fact that there are definitions for them elsewhere. + * We will have to decide which to keep; we don't need both (no BINARY_COMPATIBLE) + */ +#if 0 +#define NdisAdjustBufferLength(Buffer, \ + Length) \ +{ \ + (Buffer)->ByteCount = (Length); \ +} + +#define NDIS_BUFFER_TO_SPAN_PAGES(Buffer) \ +( \ + MmGetMdlByteCount(Buffer) == 0 ? \ + 1 : \ + ADDRESS_AND_SIZE_TO_SPAN_PAGES( \ + MmGetMdlVirtualAddress(Buffer), \ + MmGetMdlByteCount(Buffer)) \ +) + +#define NdisFreeBuffer(Buffer) \ +{ \ + IoFreeMdl(Buffer) /* ??? */ \ +} + +#define NdisGetBufferPhysicalArraySize(Buffer, \ + ArraySize) \ +{ \ +} + +#define NdisGetFirstBufferFromPacket(Packet, \ + FirstBuffer, \ + FirstBufferVA, \ + FirstBufferLength, \ + TotalBufferLength) \ +{ \ + PNDIS_BUFFER _Buffer; \ + \ + _Buffer = (Packet)->Private.Head; \ + *(FirstBuffer) = _Buffer; \ + *(FirstBufferVA) = MmGetMdlVirtualAddress(_Buffer); \ + if (_Buffer != NULL) { \ + *(FirstBufferLength) = MmGetMdlByteCount(_Buffer); \ + _Buffer = _Buffer->Next; \ + } else \ + *(FirstBufferLength) = 0; \ + *(TotalBufferLength) = *(FirstBufferLength); \ + while (_Buffer != NULL) { \ + *(TotalBufferLength) += MmGetMdlByteCount(_Buffer); \ + _Buffer = _Buffer->Next; \ + } \ +} + +#define NdisQueryBuffer(Buffer, \ + VirtualAddress, \ + Length) \ +{ \ + if (VirtualAddress) \ + *((PVOID*)VirtualAddress) = MmGetSystemAddressForMdl(Buffer); \ + \ + *((PUINT)Length) = MmGetMdlByteCount(Buffer); \ +} + +#define NdisQueryBufferOffset(Buffer, \ + Offset, \ + Length) \ +{ \ + *((PUINT)Offset) = MmGetMdlByteOffset(Buffer); \ + *((PUINT)Length) = MmGetMdlByteCount(Buffer); \ +} + +#define NdisAnsiStringToUnicodeString(DestinationString, \ + SourceString) \ + RtlAnsiStringToUnicodeString((DestinationString), (SourceString), FALSE) + +#define NdisEqualString(String1, \ + String2, \ + CaseInsensitive) \ + RtlEqualUnicodeString((String1), (String2), (CaseInsensitive)) + +#define NdisInitAnsiString(DestinationString, \ + SourceString) \ + RtlInitString((DestinationString), (SourceString)) + +#define NdisInitUnicodeString(DestinationString, \ + SourceString) \ + RtlInitUnicodeString((DestinationString), (SourceString)) + +#define NdisUnicodeStringToAnsiString(DestinationString, \ + SourceString) \ + RtlUnicodeStringToAnsiString((DestinationString), (SourceString), FALSE) + +#define NdisRequest(Status, \ + NdisBindingHandle, \ + NdisRequest) \ +{ \ + *(Status) = (((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->RequestHandler)( \ + ((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->MacBindingHandle, (NdisRequest)); \ +} + +#define NdisReset(Status, \ + NdisBindingHandle) \ +{ \ + *(Status) = (((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->ResetHandler)( \ + ((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->MacBindingHandle); \ +} + +#define NdisSend(Status, \ + NdisBindingHandle, \ + Packet) \ +{ \ + *(Status) = (((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->u1.SendHandler)( \ + ((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->MacBindingHandle, (Packet)); \ +} + +#define NdisSendPackets(NdisBindingHandle, \ + PacketArray, \ + NumberOfPackets) \ +{ \ + (((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->SendPacketsHandler)( \ + (PNDIS_OPEN_BLOCK)(NdisBindingHandle), (PacketArray), (NumberOfPackets)); \ +} +#endif diff --git a/include/net/ndisoid.h b/include/net/ndisoid.h index 121475c..6166b25 100644 --- a/include/net/ndisoid.h +++ b/include/net/ndisoid.h @@ -407,4 +407,14 @@ typedef struct _NET_PNP_TRANSLATE_LIST #endif /* __NDISOID_H */ +/* PNP OIDs */ +#define OID_PNP_CAPABILITIES 0xFD010100 +#define OID_PNP_SET_POWER 0xFD010101 +#define OID_PNP_QUERY_POWER 0xFD010102 +#define OID_PNP_ADD_WAKE_UP_PATTERN 0xFD010103 +#define OID_PNP_REMOVE_WAKE_UP_PATTERN 0xFD010104 +#define OID_PNP_WAKE_UP_PATTERN_LIST 0xFD010105 +#define OID_PNP_ENABLE_WAKE_UP 0xFD010106 + + /* EOF */ diff --git a/include/net/tdi.h b/include/net/tdi.h index 183a652..a3b8c16 100644 --- a/include/net/tdi.h +++ b/include/net/tdi.h @@ -9,11 +9,11 @@ /* FIXME: Missed some definitions in ntddk.h */ -/* Could be defined elsewhere */ -//#ifndef INT -//typedef signed int INT, *PINT; -//#endif - +/* Could be defined elsewhere + * #ifndef INT + * typedef signed int INT, *PINT; + * #endif + */ /* Basic types */ diff --git a/include/ntdll/ldr.h b/include/ntdll/ldr.h index 1112626..a261878 100644 --- a/include/ntdll/ldr.h +++ b/include/ntdll/ldr.h @@ -16,8 +16,8 @@ typedef BOOL STDCALL typedef struct _LDR_MODULE { LIST_ENTRY InLoadOrderModuleList; - LIST_ENTRY InMemoryOrderModuleList; // not used - LIST_ENTRY InInitializationOrderModuleList; // not used + LIST_ENTRY InMemoryOrderModuleList; /* not used */ + LIST_ENTRY InInitializationOrderModuleList; /* not used */ PVOID BaseAddress; ULONG EntryPoint; ULONG SizeOfImage; @@ -67,7 +67,7 @@ typedef struct _MODULE_INFORMATION MODULE_ENTRY ModuleEntry[1]; } MODULE_INFORMATION, *PMODULE_INFORMATION; -#ifdef KDBG +#if defined(KDBG) || defined(DBG) VOID LdrpLoadUserModuleSymbols(PLDR_MODULE LdrModule); @@ -96,8 +96,8 @@ LdrGetDllHandle(IN ULONG Unknown1, OUT PVOID *BaseAddress); NTSTATUS STDCALL -LdrFindEntryForAddress(PVOID Address, - PLDR_MODULE *Module); +LdrFindEntryForAddress(IN PVOID Address, + OUT PLDR_MODULE *Module); NTSTATUS STDCALL LdrGetProcedureAddress(IN PVOID BaseAddress, @@ -118,6 +118,14 @@ LdrLoadDll(IN PWSTR SearchPath OPTIONAL, OUT PVOID *BaseAddress OPTIONAL); NTSTATUS STDCALL +LdrQueryImageFileExecutionOptions (IN PUNICODE_STRING SubKey, + IN PCWSTR ValueName, + IN ULONG ValueSize, + OUT PVOID Buffer, + IN ULONG BufferSize, + OUT PULONG RetunedLength OPTIONAL); + +NTSTATUS STDCALL LdrQueryProcessModuleInformation(IN PMODULE_INFORMATION ModuleInformation OPTIONAL, IN ULONG Size OPTIONAL, OUT PULONG ReturnedSize); @@ -131,6 +139,12 @@ LdrShutdownThread(VOID); NTSTATUS STDCALL LdrUnloadDll(IN PVOID BaseAddress); +NTSTATUS STDCALL +LdrVerifyImageMatchesChecksum (IN HANDLE FileHandle, + ULONG Unknown1, + ULONG Unknown2, + ULONG Unknown3); + #endif /* __NTOSKRNL_INCLUDE_INTERNAL_LDR_H */ /* EOF */ diff --git a/include/ntdll/ntdll.h b/include/ntdll/ntdll.h index 83eb715..6c96a33 100644 --- a/include/ntdll/ntdll.h +++ b/include/ntdll/ntdll.h @@ -3,12 +3,16 @@ #define UNIMPLEMENTED DbgPrint("%s in %s:%d is unimplemented\n",__FUNCTION__,__FILE__,__LINE__); +#ifndef __USE_W32API + #ifndef NASSERT #define assert(x) if (!(x)) {DbgPrint("Assertion "#x" failed at %s:%d\n", __FILE__,__LINE__); for(;;);} #else #define assert(x) #endif +#endif + #ifdef NDEBUG #define DPRINT(args...) #define CHECKPOINT diff --git a/include/ntdll/rtl.h b/include/ntdll/rtl.h index be0fad9..d471d4f 100644 --- a/include/ntdll/rtl.h +++ b/include/ntdll/rtl.h @@ -57,6 +57,10 @@ typedef struct _CRITICAL_SECTION { DWORD Reserved; } CRITICAL_SECTION, *PCRITICAL_SECTION, *LPCRITICAL_SECTION; +typedef CRITICAL_SECTION RTL_CRITICAL_SECTION; +typedef PCRITICAL_SECTION PRTL_CRITICAL_SECTION; +typedef LPCRITICAL_SECTION LPRTL_CRITICAL_SECTION; + #endif /* !__USE_W32API */ @@ -518,6 +522,12 @@ RtlIsValidIndexHandle ( IN ULONG Index ); +NTSTATUS STDCALL +RtlAdjustPrivilege(IN ULONG Privilege, + IN BOOLEAN Enable, + IN BOOLEAN CurrentThread, + OUT PBOOLEAN Enabled); + NTSTATUS STDCALL RtlImpersonateSelf ( diff --git a/include/ntos.h b/include/ntos.h index 145ab5d..89f7dfe 100644 --- a/include/ntos.h +++ b/include/ntos.h @@ -3,10 +3,12 @@ /* $Id$ */ #if defined(NTOS_MODE_USER) -// include windows.h before ntddk.h to get user mode prototype for InterlockedXxx functions +/* + * Include windows.h before ntddk.h to get user mode prototype + * for InterlockedXxx functions. + */ #include #include -#include #include "ntos/types.h" #include "ntos/cdrom.h" #include "ntos/console.h" @@ -14,6 +16,7 @@ #include "ntos/except.h" #include "ntos/file.h" #include "ntos/gditypes.h" +#include "ntos/fstypes.h" /* AG */ #include "ntos/heap.h" #include "ntos/kdbgsyms.h" #include "ntos/keyboard.h" @@ -28,7 +31,6 @@ #include "ntos/time.h" #include "napi/i386/segment.h" #include "napi/types.h" -#include "napi/core.h" #include "napi/dbg.h" #include "napi/lpc.h" #include "napi/npipe.h" @@ -38,16 +40,18 @@ #include "ntos/rtl.h" #include "ntos/zwtypes.h" #include "ntos/zw.h" +#include "ntos/dbgfuncs.h" +#include "ntos/service.h" #include "ntdll/csr.h" #include "ntdll/dbg.h" #include "ntdll/ldr.h" #include "ntdll/registry.h" #include "ntdll/rtl.h" #include "ntdll/trace.h" +#include "rosrtl/thread.h" #include "kernel32/error.h" -#else // Assume kernel mode +#else /* Assume kernel mode */ #include -//#include "ntos/types.h" // robd #include #include "ntos/types.h" #include "ntos/cdrom.h" @@ -70,7 +74,6 @@ #include "ntos/time.h" #include "napi/i386/segment.h" #include "napi/types.h" -#include "napi/core.h" #include "napi/dbg.h" #include "napi/lpc.h" #include "napi/npipe.h" @@ -80,6 +83,16 @@ #include "ntos/rtl.h" #include "ntos/zwtypes.h" #include "ntos/zw.h" +#include "ntos/dbgfuncs.h" +#include "ntos/service.h" +#include "ntos/haltypes.h" +#include "ntos/halfuncs.h" +#include "ntos/kdfuncs.h" +#include "ntos/kefuncs.h" /* AG */ +#include "ntos/fstypes.h" /* AG */ +#include "ntos/obtypes.h" +#include "ntos/tss.h" +#include "rosrtl/thread.h" #endif #endif /* ndef _NTOS_H */ diff --git a/include/ntos/bootvid.h b/include/ntos/bootvid.h new file mode 100755 index 0000000..7a5a1ec --- /dev/null +++ b/include/ntos/bootvid.h @@ -0,0 +1,76 @@ +#ifndef __INCLUDE_NTOS_BOOTVID_H +#define __INCLUDE_NTOS_BOOTVID_H + +VOID +STDCALL +InbvAcquireDisplayOwnership(VOID); + +BOOLEAN +STDCALL +InbvCheckDisplayOwnership(VOID); + +BOOLEAN +STDCALL +InbvDisplayString(IN PCHAR String); + +VOID +STDCALL +InbvEnableBootDriver(IN BOOLEAN Enable); + +BOOLEAN +STDCALL +InbvEnableDisplayString(IN BOOLEAN Enable); + +VOID +STDCALL +InbvInstallDisplayStringFilter(IN PVOID Unknown); + +BOOLEAN +STDCALL +InbvIsBootDriverInstalled(VOID); + +VOID +STDCALL +InbvNotifyDisplayOwnershipLost(IN PVOID Callback); + +BOOLEAN +STDCALL +InbvResetDisplay(VOID); + +VOID +STDCALL +InbvSetScrollRegion(IN ULONG Left, + IN ULONG Top, + IN ULONG Width, + IN ULONG Height); + +VOID +STDCALL +InbvSetTextColor(IN ULONG Color); + +VOID +STDCALL +InbvSolidColorFill(IN ULONG Left, + IN ULONG Top, + IN ULONG Width, + IN ULONG Height, + IN ULONG Color); + + +VOID +STDCALL +VidCleanUp(VOID); + +BOOLEAN +STDCALL +VidInitialize(VOID); + +BOOLEAN +STDCALL +VidResetDisplay(VOID); + +BOOLEAN +STDCALL +VidIsBootDriverInstalled(VOID); + +#endif /* __INCLUDE_NTOS_BOOTVID_H */ diff --git a/include/ntos/cdrom.h b/include/ntos/cdrom.h index 23225e1..4ba0bfb 100644 --- a/include/ntos/cdrom.h +++ b/include/ntos/cdrom.h @@ -12,9 +12,15 @@ #ifndef __INCLUDE_NTOS_CDROM_H #define __INCLUDE_NTOS_CDROM_H -#define IOCTL_CDROM_READ_TOC CTL_CODE(FILE_DEVICE_CD_ROM, 0x0000, METHOD_BUFFERED, FILE_READ_ACCESS) -#define IOCTL_CDROM_GET_LAST_SESSION CTL_CODE(FILE_DEVICE_CD_ROM, 0x000E, METHOD_BUFFERED, FILE_READ_ACCESS) -#define IOCTL_CDROM_GET_DRIVE_GEOMETRY CTL_CODE(FILE_DEVICE_CD_ROM, 0x0013, METHOD_BUFFERED, FILE_READ_ACCESS) + +#define IOCTL_CDROM_BASE FILE_DEVICE_CD_ROM + +#define IOCTL_CDROM_READ_TOC CTL_CODE(IOCTL_CDROM_BASE, 0x0000, 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_DRIVE_GEOMETRY CTL_CODE(IOCTL_CDROM_BASE, 0x0013, METHOD_BUFFERED, FILE_READ_ACCESS) + +#define IOCTL_CDROM_CHECK_VERIFY CTL_CODE(IOCTL_CDROM_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS) + #define MAXIMUM_NUMBER_TRACKS 100 #define MAXIMUM_CDROM_SIZE 804 diff --git a/include/ntos/console.h b/include/ntos/console.h index fde2458..e9a83df 100644 --- a/include/ntos/console.h +++ b/include/ntos/console.h @@ -17,11 +17,6 @@ #define CONSOLE_INPUT_MODE_VALID (0x0f) #define CONSOLE_OUTPUT_MODE_VALID (0x03) -typedef struct _CONSOLE_FONT_INFO { - DWORD nFont; - COORD dwFontSize; -} CONSOLE_FONT_INFO, *PCONSOLE_FONT_INFO; - typedef struct _CONSOLE_SELECTION_INFO { DWORD dwFlags; COORD dwSelectionAnchor; @@ -30,6 +25,11 @@ typedef struct _CONSOLE_SELECTION_INFO { #ifndef __USE_W32API +typedef struct _CONSOLE_FONT_INFO { + DWORD nFont; + COORD dwFontSize; +} CONSOLE_FONT_INFO, *PCONSOLE_FONT_INFO; + /* GetConsoleMode */ #define ENABLE_LINE_INPUT (0x02) #define ENABLE_ECHO_INPUT (0x04) diff --git a/include/ntos/dbgfuncs.h b/include/ntos/dbgfuncs.h new file mode 100755 index 0000000..6086af6 --- /dev/null +++ b/include/ntos/dbgfuncs.h @@ -0,0 +1,19 @@ +#ifndef __INCLUDE_NTOS_DBGFUNCS_H +#define __INCLUDE_NTOS_DBGFUNCS_H +/* $Id$ */ + +#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_GET_SHOW_FACILITY 0x0001 +#define DBG_GET_SHOW_SEVERITY 0x0002 +#define DBG_GET_SHOW_ERRCODE 0x0004 +#define DBG_GET_SHOW_ERRTEXT 0x0008 +VOID DbgGetErrorText(NTSTATUS ErrorCode, PUNICODE_STRING ErrorText, ULONG Flags); +VOID DbgPrintErrorMessage(NTSTATUS ErrorCode); + +#endif /* __INCLUDE_NTOS_DBGFUNCS_H */ diff --git a/include/ntos/disk.h b/include/ntos/disk.h index b9254de..f5d111c 100644 --- a/include/ntos/disk.h +++ b/include/ntos/disk.h @@ -12,24 +12,42 @@ #ifndef __INCLUDE_DISK_H #define __INCLUDE_DISK_H - -#define IOCTL_DISK_GET_DRIVE_GEOMETRY CTL_CODE(FILE_DEVICE_DISK, 0, METHOD_BUFFERED, FILE_ANY_ACCESS) -#define IOCTL_DISK_GET_PARTITION_INFO CTL_CODE(FILE_DEVICE_DISK, 1, METHOD_BUFFERED, FILE_READ_ACCESS) -#define IOCTL_DISK_SET_PARTITION_INFO CTL_CODE(FILE_DEVICE_DISK, 2, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) -#define IOCTL_DISK_GET_DRIVE_LAYOUT CTL_CODE(FILE_DEVICE_DISK, 3, METHOD_BUFFERED, FILE_READ_ACCESS) -#define IOCTL_DISK_SET_DRIVE_LAYOUT CTL_CODE(FILE_DEVICE_DISK, 4, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) -#define IOCTL_DISK_VERIFY CTL_CODE(FILE_DEVICE_DISK, 5, METHOD_BUFFERED, FILE_ANY_ACCESS) -#define IOCTL_DISK_FORMAT_TRACKS CTL_CODE(FILE_DEVICE_DISK, 6, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) -#define IOCTL_DISK_REASSIGN_BLOCKS CTL_CODE(FILE_DEVICE_DISK, 7, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) -#define IOCTL_DISK_PERFORMANCE CTL_CODE(FILE_DEVICE_DISK, 8, METHOD_BUFFERED, FILE_ANY_ACCESS) -#define IOCTL_DISK_IS_WRITABLE CTL_CODE(FILE_DEVICE_DISK, 9, METHOD_BUFFERED, FILE_ANY_ACCESS) -#define IOCTL_DISK_LOGGING CTL_CODE(FILE_DEVICE_DISK, 10, METHOD_BUFFERED, FILE_ANY_ACCESS) -#define IOCTL_DISK_FORMAT_TRACKS_EX CTL_CODE(FILE_DEVICE_DISK, 11, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) -#define IOCTL_DISK_HISTOGRAM_STRUCTURE CTL_CODE(FILE_DEVICE_DISK, 12, METHOD_BUFFERED, FILE_ANY_ACCESS) -#define IOCTL_DISK_HISTOGRAM_DATA CTL_CODE(FILE_DEVICE_DISK, 13, METHOD_BUFFERED, FILE_ANY_ACCESS) -#define IOCTL_DISK_HISTOGRAM_RESET CTL_CODE(FILE_DEVICE_DISK, 14, METHOD_BUFFERED, FILE_ANY_ACCESS) -#define IOCTL_DISK_REQUEST_STRUCTURE CTL_CODE(FILE_DEVICE_DISK, 15, METHOD_BUFFERED, FILE_ANY_ACCESS) -#define IOCTL_DISK_REQUEST_DATA CTL_CODE(FILE_DEVICE_DISK, 16, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define IOCTL_DISK_BASE FILE_DEVICE_DISK + +#define IOCTL_DISK_GET_DRIVE_GEOMETRY CTL_CODE(IOCTL_DISK_BASE, 0x0000, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define IOCTL_DISK_GET_PARTITION_INFO CTL_CODE(IOCTL_DISK_BASE, 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS) +#define IOCTL_DISK_SET_PARTITION_INFO CTL_CODE(IOCTL_DISK_BASE, 0x0002, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) +#define IOCTL_DISK_GET_DRIVE_LAYOUT CTL_CODE(IOCTL_DISK_BASE, 0x0003, METHOD_BUFFERED, FILE_READ_ACCESS) +#define IOCTL_DISK_SET_DRIVE_LAYOUT CTL_CODE(IOCTL_DISK_BASE, 0x0004, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) +#define IOCTL_DISK_VERIFY CTL_CODE(IOCTL_DISK_BASE, 0x0005, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define IOCTL_DISK_FORMAT_TRACKS CTL_CODE(IOCTL_DISK_BASE, 0x0006, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) +#define IOCTL_DISK_REASSIGN_BLOCKS CTL_CODE(IOCTL_DISK_BASE, 0x0007, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) +#define IOCTL_DISK_PERFORMANCE CTL_CODE(IOCTL_DISK_BASE, 0x0008, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define IOCTL_DISK_IS_WRITABLE CTL_CODE(IOCTL_DISK_BASE, 0x0009, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define IOCTL_DISK_LOGGING CTL_CODE(IOCTL_DISK_BASE, 0x000A, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define IOCTL_DISK_FORMAT_TRACKS_EX CTL_CODE(IOCTL_DISK_BASE, 0x000B, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) +#define IOCTL_DISK_HISTOGRAM_STRUCTURE CTL_CODE(IOCTL_DISK_BASE, 0x000C, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define IOCTL_DISK_HISTOGRAM_DATA CTL_CODE(IOCTL_DISK_BASE, 0x000D, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define IOCTL_DISK_HISTOGRAM_RESET CTL_CODE(IOCTL_DISK_BASE, 0x000E, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define IOCTL_DISK_REQUEST_STRUCTURE CTL_CODE(IOCTL_DISK_BASE, 0x000F, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define IOCTL_DISK_REQUEST_DATA CTL_CODE(IOCTL_DISK_BASE, 0x0010, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define IOCTL_DISK_CONTRIOLLER_NUMBER CTL_CODE(IOCTL_DISK_BASE, 0x0011, METHOD_BUFFERED, FILE_ANY_ACCESS) + +#define SMART_GET_VERSION CTL_CODE(IOCTL_DISK_BASE, 0x0020, METHOD_BUFFERED, FILE_READ_ACCESS) +#define SMART_SEND_DRIVE_COMMAND CTL_CODE(IOCTL_DISK_BASE, 0x0021, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) +#define SMART_RCV_DRIVE_DATA CTL_CODE(IOCTL_DISK_BASE, 0x0022, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) + +#define IOCTL_DISK_INTERNAL_SET_VERIFY CTL_CODE(IOCTL_DISK_BASE, 0x0100, METHOD_NEITHER, FILE_ANY_ACCESS) +#define IOCTL_DISK_INTERNAL_CLEAR_VERIFY CTL_CODE(IOCTL_DISK_BASE, 0x0101, METHOD_NEITHER, FILE_ANY_ACCESS) + +#define IOCTL_DISK_CHECK_VERIFY CTL_CODE(IOCTL_DISK_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS) +#define IOCTL_DISK_MEDIA_REMOVAL CTL_CODE(IOCTL_DISK_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS) +#define IOCTL_DISK_EJECT_MEDIA CTL_CODE(IOCTL_DISK_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS) +#define IOCTL_DISK_LOAD_MEDIA CTL_CODE(IOCTL_DISK_BASE, 0x0203, METHOD_BUFFERED, FILE_READ_ACCESS) +#define IOCTL_DISK_RESERVE CTL_CODE(IOCTL_DISK_BASE, 0x0204, METHOD_BUFFERED, FILE_READ_ACCESS) +#define IOCTL_DISK_RELEASE CTL_CODE(IOCTL_DISK_BASE, 0x0205, METHOD_BUFFERED, FILE_READ_ACCESS) +#define IOCTL_DISK_FIND_NEW_DEVICES CTL_CODE(IOCTL_DISK_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS) +#define IOCTL_DISK_GET_MEDIA_TYPES CTL_CODE(IOCTL_DISK_BASE, 0x0300, METHOD_BUFFERED, FILE_ANY_ACCESS) #define PARTITION_ENTRY_UNUSED 0x00 @@ -59,7 +77,7 @@ #define PTOLDDOS16Bit 0x04 #define PTDosExtended 0x05 #define PTDos5xPrimary 0x06 -#define PTIfs 0x07 // e.g.: HPFS, NTFS, etc +#define PTIfs 0x07 /* e.g.: HPFS, NTFS, etc */ #define PTAIX 0x08 #define PTAIXBootable 0x09 #define PTOS2BootMgr 0x0A @@ -148,16 +166,16 @@ typedef struct _DISK_GEOMETRY DWORD BytesPerSector; } DISK_GEOMETRY, *PDISK_GEOMETRY; -#ifndef __USE_W32API - typedef struct _DRIVE_LAYOUT_INFORMATION { DWORD PartitionCount; DWORD Signature; PARTITION_INFORMATION PartitionEntry[1]; -} DRIVE_LAYOUT_INFORMATION, *PDRIVE_LAYOUT_INFORMATION; +} DRIVE_LAYOUT_INFORMATION; -#endif /* !__USE_W32API */ +#ifndef __USE_W32API +typedef DRIVE_LAYOUT_INFORMATION *PDRIVE_LAYOUT_INFORMATION; +#endif #endif /* __INCLUDE_DISK_H */ diff --git a/include/ntos/except.h b/include/ntos/except.h index d464c56..753d50a 100644 --- a/include/ntos/except.h +++ b/include/ntos/except.h @@ -14,7 +14,7 @@ typedef enum { ExceptionContinueSearch, ExceptionNestedException, ExceptionCollidedUnwind, - ExceptionDismiss // ??? + ExceptionDismiss /* ??? */ } EXCEPTION_DISPOSITION; @@ -57,7 +57,9 @@ typedef struct _EXCEPTION_RECORD { /* ExceptionFlags */ #ifndef _GNU_H_WINDOWS32_DEFINES #ifdef __NTOSKRNL__ +#ifndef EXCEPTION_NONCONTINUABLE #define EXCEPTION_NONCONTINUABLE 0x01 +#endif #endif /* __NTOSKRNL__ */ #endif /* _GNU_H_WINDOWS32_DEFINES */ #define EXCEPTION_UNWINDING 0x02 @@ -105,17 +107,17 @@ typedef PEXCEPTION_REGISTRATION PEXCEPTION_REGISTRATION_RECORD; #if 1 -// Runtime DLL structures +/* Runtime DLL structures */ #ifndef _GNU_H_WINDOWS32_DEFINES #ifdef __NTOSKRNL__ #define EXCEPTION_EXECUTE_HANDLER 1 #define EXCEPTION_CONTINUE_SEARCH 0 -#define EXCEPTION_CONTINUE_EXECUTION -1 +/* #define EXCEPTION_CONTINUE_EXECUTION -1 */ #endif /* __NTOSKRNL__ */ #endif /* _GNU_H_WINDOWS32_DEFINES */ -// Functions of the following prototype return one of the above constants +/* Functions of the following prototype return one of the above constants */ #ifdef __GNUC__ typedef DWORD CDECL (*PSCOPE_EXCEPTION_FILTER)(VOID); typedef VOID CDECL (*PSCOPE_EXCEPTION_HANDLER)(VOID); diff --git a/include/ntos/file.h b/include/ntos/file.h index 3899f8b..64cebf1 100644 --- a/include/ntos/file.h +++ b/include/ntos/file.h @@ -92,8 +92,6 @@ #define FILE_FILE_COMPRESSION (0x00000010) #define FILE_VOLUME_IS_COMPRESSED (0x00008000) -#endif /* !__USE_W32API */ - #define FILE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x1FF) #define FILE_GENERIC_READ (STANDARD_RIGHTS_READ |\ @@ -110,10 +108,19 @@ FILE_APPEND_DATA |\ SYNCHRONIZE) - #define FILE_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE |\ FILE_READ_ATTRIBUTES |\ FILE_EXECUTE |\ SYNCHRONIZE) +#endif /* !__USE_W32API */ + +typedef struct _FILE_LOCK_TOC { + KSPIN_LOCK SpinLock; + LIST_ENTRY GrantedListHead; + LIST_ENTRY PendingListHead; + LIST_ENTRY CompletedListHead; + LIST_ENTRY UnlockedListHead; +} FILE_LOCK_TOC, *PFILE_LOCK_TOC; + #endif /* __INCLUDE_FILE_H */ diff --git a/include/ntos/fstypes.h b/include/ntos/fstypes.h new file mode 100644 index 0000000..bc05962 --- /dev/null +++ b/include/ntos/fstypes.h @@ -0,0 +1,35 @@ +#ifndef __INCLUDE_NTOS_FSTYPES_H +#define __INCLUDE_NTOS_FSTYPES_H + +#define FSRTL_TAG TAG('F','S','r','t') + + +typedef ULONG LBN; +typedef LBN *PLBN; + +typedef ULONG VBN; +typedef VBN *PVBN; + + +typedef struct _LARGE_MCB +{ + PFAST_MUTEX FastMutex; + ULONG MaximumPairCount; + ULONG PairCount; + POOL_TYPE PoolType; + PVOID Mapping; +} LARGE_MCB, *PLARGE_MCB; + +typedef struct _MCB { + LARGE_MCB LargeMcb; +} MCB, *PMCB; + + +typedef struct _FILE_LOCK_GRANTED { + LIST_ENTRY ListEntry; + FILE_LOCK_INFO Lock; +} FILE_LOCK_GRANTED, *PFILE_LOCK_GRANTED; + + + +#endif /* __INCLUDE_DDK_FSTYPES_H */ diff --git a/include/ntos/gditypes.h b/include/ntos/gditypes.h index 3932cf9..10ae3f8 100644 --- a/include/ntos/gditypes.h +++ b/include/ntos/gditypes.h @@ -24,10 +24,21 @@ typedef struct _devicemodeA WORD dmSize; WORD dmDriverExtra; DWORD dmFields; - short dmOrientation; - short dmPaperSize; - short dmPaperLength; - short dmPaperWidth; + union + { + struct + { + short dmOrientation; + short dmPaperSize; + short dmPaperLength; + short dmPaperWidth; + }; + struct + { + LONG x; + LONG y; + } dmPosition; + }; short dmScale; short dmCopies; short dmDefaultSource; @@ -42,14 +53,28 @@ typedef struct _devicemodeA DWORD dmBitsPerPel; DWORD dmPelsWidth; DWORD dmPelsHeight; - DWORD dmDisplayFlags; + union + { + DWORD dmDisplayFlags; + DWORD dmNup; + }; DWORD dmDisplayFrequency; DWORD dmICMMethod; DWORD dmICMIntent; DWORD dmMediaType; DWORD dmDitherType; - DWORD dmICCManufacturer; - DWORD dmICCModel; + union + { + DWORD dmICCManufacturer; + DWORD dmReserved1; + }; + union + { + DWORD dmICCModel; + DWORD dmReserved2; + }; + DWORD dmPanningWidth; + DWORD dmPanningHeight; } DEVMODEA,*LPDEVMODEA,*PDEVMODEA; typedef struct _devicemodeW @@ -60,10 +85,21 @@ typedef struct _devicemodeW WORD dmSize; WORD dmDriverExtra; DWORD dmFields; - short dmOrientation; - short dmPaperSize; - short dmPaperLength; - short dmPaperWidth; + union + { + struct + { + short dmOrientation; + short dmPaperSize; + short dmPaperLength; + short dmPaperWidth; + }; + struct + { + LONG x; + LONG y; + } dmPosition; + }; short dmScale; short dmCopies; short dmDefaultSource; @@ -78,14 +114,28 @@ typedef struct _devicemodeW DWORD dmBitsPerPel; DWORD dmPelsWidth; DWORD dmPelsHeight; - DWORD dmDisplayFlags; + union + { + DWORD dmDisplayFlags; + DWORD dmNup; + }; DWORD dmDisplayFrequency; DWORD dmICMMethod; DWORD dmICMIntent; DWORD dmMediaType; DWORD dmDitherType; - DWORD dmICCManufacturer; - DWORD dmICCModel; + union + { + DWORD dmICCManufacturer; + DWORD dmReserved1; + }; + union + { + DWORD dmICCModel; + DWORD dmReserved2; + }; + DWORD dmPanningWidth; + DWORD dmPanningHeight; } DEVMODEW,*LPDEVMODEW,*PDEVMODEW; #endif /* !__USE_W32API */ diff --git a/include/ntos/halfuncs.h b/include/ntos/halfuncs.h new file mode 100755 index 0000000..eee1b43 --- /dev/null +++ b/include/ntos/halfuncs.h @@ -0,0 +1,61 @@ +#ifndef __INCLUDE_NTOS_HALFUNCS_H +#define __INCLUDE_NTOS_HALFUNCS_H + +#include + +BOOLEAN STDCALL +HalAllProcessorsStarted(VOID); + +BOOLEAN STDCALL +HalBeginSystemInterrupt(ULONG Vector, + KIRQL Irql, + PKIRQL OldIrql); + +BOOLEAN STDCALL +HalDisableSystemInterrupt(ULONG Vector, + ULONG Unknown2); + +BOOLEAN STDCALL +HalEnableSystemInterrupt(ULONG Vector, + ULONG Unknown2, + ULONG Unknown3); + +VOID STDCALL +HalEndSystemInterrupt(KIRQL Irql, + ULONG Unknown2); + +VOID STDCALL +HalInitializeProcessor(ULONG ProcessorNumber, + PVOID ProcessorStack); + +BOOLEAN STDCALL +HalInitSystem(ULONG BootPhase, + PLOADER_PARAMETER_BLOCK LoaderBlock); + +VOID STDCALL +HalReportResourceUsage(VOID); + +VOID +STDCALL +IoAssignDriveLetters(IN PLOADER_PARAMETER_BLOCK LoaderBlock, + IN PSTRING NtDeviceName, + OUT PUCHAR NtSystemPath, + OUT PSTRING NtSystemPathString); + +KIRQL +STDCALL +KeRaiseIrqlToSynchLevel(VOID); + +VOID STDCALL +HalReturnToFirmware(ULONG Action); + +/* Non-standard functions */ +VOID STDCALL +HalReleaseDisplayOwnership(); + +BOOLEAN STDCALL +HalQueryDisplayOwnership(); + +#endif /* __INCLUDE_NTOS_HALDDK_H */ + +/* EOF */ diff --git a/include/ntos/haltypes.h b/include/ntos/haltypes.h new file mode 100755 index 0000000..1cf303d --- /dev/null +++ b/include/ntos/haltypes.h @@ -0,0 +1,505 @@ +/* $Id$ + * + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS kernel + * FILE: include/ddk/haltypes.h + * PURPOSE: HAL provided defintions for device drivers + * PROGRAMMER: David Welch (welch@mcmail.com) + * REVISION HISTORY: + * 23/06/98: Taken from linux system.h + */ + + +#ifndef __INCLUDE_NTOS_HALTYPES_H +#define __INCLUDE_NTOS_HALTYPES_H + +#ifdef __GNUC__ +#define STDCALL_FUNC STDCALL +#else +#define STDCALL_FUNC(a) (__stdcall a ) +#endif /*__GNUC__*/ + +#include "types.h" + + +/* HalReturnToFirmware */ +#define FIRMWARE_HALT 1 +#define FIRMWARE_REBOOT 3 + +#ifndef __USE_W32API + +enum +{ + DEVICE_DESCRIPTION_VERSION, + DEVICE_DESCRIPTION_VERSION1, +}; + +typedef ULONG DMA_WIDTH; +typedef ULONG DMA_SPEED; + +/* + * PURPOSE: Types for HalGetBusData + */ +typedef enum _BUS_DATA_TYPE +{ + ConfigurationSpaceUndefined = -1, + Cmos, + EisaConfiguration, + Pos, + CbusConfiguration, + PCIConfiguration, + VMEConfiguration, + NuBusConfiguration, + PCMCIAConfiguration, + MPIConfiguration, + MPSAConfiguration, + PNPISAConfiguration, + MaximumBusDataType, +} BUS_DATA_TYPE, *PBUS_DATA_TYPE; + +typedef struct _DEVICE_DESCRIPTION +{ + ULONG Version; + BOOLEAN Master; + BOOLEAN ScatterGather; + BOOLEAN DemandMode; + BOOLEAN AutoInitialize; + BOOLEAN Dma32BitAddresses; + BOOLEAN IgnoreCount; + BOOLEAN Reserved1; + BOOLEAN Reserved2; + ULONG BusNumber; + ULONG DmaChannel; + INTERFACE_TYPE InterfaceType; + DMA_WIDTH DmaWidth; + DMA_SPEED DmaSpeed; + ULONG MaximumLength; + ULONG DmaPort; +} DEVICE_DESCRIPTION, *PDEVICE_DESCRIPTION; + + +/* PCI bus definitions */ + +#define PCI_TYPE0_ADDRESSES 6 +#define PCI_TYPE1_ADDRESSES 2 +#define PCI_TYPE2_ADDRESSES 5 + +typedef struct _PCI_COMMON_CONFIG +{ + USHORT VendorID; /* read-only */ + USHORT DeviceID; /* read-only */ + USHORT Command; + USHORT Status; + UCHAR RevisionID; /* read-only */ + UCHAR ProgIf; /* read-only */ + UCHAR SubClass; /* read-only */ + UCHAR BaseClass; /* read-only */ + UCHAR CacheLineSize; /* read-only */ + UCHAR LatencyTimer; /* read-only */ + UCHAR HeaderType; /* read-only */ + UCHAR BIST; + union + { + struct _PCI_HEADER_TYPE_0 + { + ULONG BaseAddresses[PCI_TYPE0_ADDRESSES]; + ULONG CIS; + USHORT SubVendorID; + USHORT SubSystemID; + ULONG ROMBaseAddress; + ULONG Reserved2[2]; + + UCHAR InterruptLine; + UCHAR InterruptPin; /* read-only */ + UCHAR MinimumGrant; /* read-only */ + UCHAR MaximumLatency; /* read-only */ + } type0; + + /* PCI to PCI Bridge */ + 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; + + /* PCI to CARDBUS Bridge */ + 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; + +#define PCI_COMMON_HDR_LENGTH (FIELD_OFFSET (PCI_COMMON_CONFIG, DeviceSpecific)) + +#define PCI_MAX_DEVICES 32 +#define PCI_MAX_FUNCTION 8 + +#define PCI_INVALID_VENDORID 0xFFFF + +/* Bit encodings for PCI_COMMON_CONFIG.HeaderType */ + +#define PCI_MULTIFUNCTION 0x80 +#define PCI_DEVICE_TYPE 0x00 +#define PCI_BRIDGE_TYPE 0x01 + + +/* Bit encodings for 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 + + +/* Bit encodings for PCI_COMMON_CONFIG.Status */ + +#define PCI_STATUS_FAST_BACK_TO_BACK 0x0080 +#define PCI_STATUS_DATA_PARITY_DETECTED 0x0100 +#define PCI_STATUS_DEVSEL 0x0600 /* 2 bits wide */ +#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 device classes */ + +#define PCI_CLASS_PRE_20 0x00 +#define PCI_CLASS_MASS_STORAGE_CTLR 0x01 +#define PCI_CLASS_NETWORK_CTLR 0x02 +#define PCI_CLASS_DISPLAY_CTLR 0x03 +#define PCI_CLASS_MULTIMEDIA_DEV 0x04 +#define PCI_CLASS_MEMORY_CTLR 0x05 +#define PCI_CLASS_BRIDGE_DEV 0x06 +#define PCI_CLASS_SIMPLE_COMMS_CTLR 0x07 +#define PCI_CLASS_BASE_SYSTEM_DEV 0x08 +#define PCI_CLASS_INPUT_DEV 0x09 +#define PCI_CLASS_DOCKING_STATION 0x0a +#define PCI_CLASS_PROCESSOR 0x0b +#define PCI_CLASS_SERIAL_BUS_CTLR 0x0c + + +/* PCI device subclasses for class 1 (mass storage controllers)*/ + +#define PCI_SUBCLASS_MSC_SCSI_BUS_CTLR 0x00 +#define PCI_SUBCLASS_MSC_IDE_CTLR 0x01 +#define PCI_SUBCLASS_MSC_FLOPPY_CTLR 0x02 +#define PCI_SUBCLASS_MSC_IPI_CTLR 0x03 +#define PCI_SUBCLASS_MSC_RAID_CTLR 0x04 +#define PCI_SUBCLASS_MSC_OTHER 0x80 + + +/* Bit encodes for PCI_COMMON_CONFIG.u.type0.BaseAddresses */ + +#define PCI_ADDRESS_IO_SPACE 0x00000001 +#define PCI_ADDRESS_MEMORY_TYPE_MASK 0x00000006 +#define PCI_ADDRESS_MEMORY_PREFETCHABLE 0x00000008 + +#define PCI_ADDRESS_IO_ADDRESS_MASK 0xfffffffc +#define PCI_ADDRESS_MEMORY_ADDRESS_MASK 0xfffffff0 +#define PCI_ADDRESS_ROM_ADDRESS_MASK 0xfffff800 + +#define PCI_TYPE_32BIT 0 +#define PCI_TYPE_20BIT 2 +#define PCI_TYPE_64BIT 4 + + +/* Bit encodes for PCI_COMMON_CONFIG.u.type0.ROMBaseAddresses */ + +#define PCI_ROMADDRESS_ENABLED 0x00000001 + + + +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; + +#endif /* __USE_W32API */ + +/* Hal dispatch table */ + +typedef enum _HAL_QUERY_INFORMATION_CLASS +{ + HalInstalledBusInformation, + HalProfileSourceInformation, + HalSystemDockInformation, + HalPowerInformation, + HalProcessorSpeedInformation, + HalCallbackInformation, + HalMapRegisterInformation, + HalMcaLogInformation, + HalFrameBufferCachingInformation, + HalDisplayBiosInformation + /* information levels >= 0x8000000 reserved for OEM use */ +} HAL_QUERY_INFORMATION_CLASS, *PHAL_QUERY_INFORMATION_CLASS; + + +typedef enum _HAL_SET_INFORMATION_CLASS +{ + HalProfileSourceInterval, + HalProfileSourceInterruptHandler, + HalMcaRegisterDriver +} HAL_SET_INFORMATION_CLASS, *PHAL_SET_INFORMATION_CLASS; + + +typedef struct _BUS_HANDLER *PBUS_HANDLER; +typedef struct _DEVICE_HANDLER_OBJECT *PDEVICE_HANDLER_OBJECT; + + +typedef BOOLEAN STDCALL_FUNC +(*PHAL_RESET_DISPLAY_PARAMETERS)(ULONG Columns, ULONG Rows); + +typedef NTSTATUS STDCALL_FUNC +(*pHalQuerySystemInformation)(IN HAL_QUERY_INFORMATION_CLASS InformationClass, + IN ULONG BufferSize, + IN OUT PVOID Buffer, + OUT PULONG ReturnedLength); + + +typedef NTSTATUS STDCALL_FUNC +(*pHalSetSystemInformation)(IN HAL_SET_INFORMATION_CLASS InformationClass, + IN ULONG BufferSize, + IN PVOID Buffer); + + +typedef NTSTATUS STDCALL_FUNC +(*pHalQueryBusSlots)(IN PBUS_HANDLER BusHandler, + IN ULONG BufferSize, + OUT PULONG SlotNumbers, + OUT PULONG ReturnedLength); + + +/* Control codes of HalDeviceControl function */ +#define BCTL_EJECT 0x0001 +#define BCTL_QUERY_DEVICE_ID 0x0002 +#define BCTL_QUERY_DEVICE_UNIQUE_ID 0x0003 +#define BCTL_QUERY_DEVICE_CAPABILITIES 0x0004 +#define BCTL_QUERY_DEVICE_RESOURCES 0x0005 +#define BCTL_QUERY_DEVICE_RESOURCE_REQUIREMENTS 0x0006 +#define BCTL_QUERY_EJECT 0x0007 +#define BCTL_SET_LOCK 0x0008 +#define BCTL_SET_POWER 0x0009 +#define BCTL_SET_RESUME 0x000A +#define BCTL_SET_DEVICE_RESOURCES 0x000B + +/* Defines for BCTL structures */ +typedef struct +{ + BOOLEAN PowerSupported; + BOOLEAN ResumeSupported; + BOOLEAN LockSupported; + BOOLEAN EjectSupported; + BOOLEAN Removable; +} BCTL_DEVICE_CAPABILITIES, *PBCTL_DEVICE_CAPABILITIES; + + +typedef struct _DEVICE_CONTROL_CONTEXT +{ + NTSTATUS Status; + PDEVICE_HANDLER_OBJECT DeviceHandler; + PDEVICE_OBJECT DeviceObject; + ULONG ControlCode; + PVOID Buffer; + PULONG BufferLength; + PVOID Context; +} DEVICE_CONTROL_CONTEXT, *PDEVICE_CONTROL_CONTEXT; + + +typedef VOID STDCALL_FUNC +(*PDEVICE_CONTROL_COMPLETION)(IN PDEVICE_CONTROL_CONTEXT ControlContext); + + +typedef NTSTATUS STDCALL_FUNC +(*pHalDeviceControl)(IN PDEVICE_HANDLER_OBJECT DeviceHandler, + IN PDEVICE_OBJECT DeviceObject, + IN ULONG ControlCode, + IN OUT PVOID Buffer OPTIONAL, + IN OUT PULONG BufferLength OPTIONAL, + IN PVOID Context, + IN PDEVICE_CONTROL_COMPLETION CompletionRoutine); + +typedef VOID FASTCALL +(*pHalExamineMBR)(IN PDEVICE_OBJECT DeviceObject, + IN ULONG SectorSize, + IN ULONG MBRTypeIdentifier, + OUT PVOID *Buffer); + +typedef VOID FASTCALL +(*pHalIoAssignDriveLetters)(IN PLOADER_PARAMETER_BLOCK LoaderBlock, + IN PSTRING NtDeviceName, + OUT PUCHAR NtSystemPath, + OUT PSTRING NtSystemPathString); + +typedef NTSTATUS FASTCALL +(*pHalIoReadPartitionTable)(IN PDEVICE_OBJECT DeviceObject, + IN ULONG SectorSize, + IN BOOLEAN ReturnRecognizedPartitions, + OUT PDRIVE_LAYOUT_INFORMATION *PartitionBuffer); + +typedef NTSTATUS FASTCALL +(*pHalIoSetPartitionInformation)(IN PDEVICE_OBJECT DeviceObject, + IN ULONG SectorSize, + IN ULONG PartitionNumber, + IN ULONG PartitionType); + +typedef NTSTATUS FASTCALL +(*pHalIoWritePartitionTable)(IN PDEVICE_OBJECT DeviceObject, + IN ULONG SectorSize, + IN ULONG SectorsPerTrack, + IN ULONG NumberOfHeads, + IN PDRIVE_LAYOUT_INFORMATION PartitionBuffer); + +typedef PBUS_HANDLER FASTCALL +(*pHalHandlerForBus)(IN INTERFACE_TYPE InterfaceType, + IN ULONG BusNumber); + +typedef VOID FASTCALL +(*pHalReferenceBusHandler)(IN PBUS_HANDLER BusHandler); + + +typedef struct _HAL_DISPATCH +{ + ULONG Version; + pHalQuerySystemInformation HalQuerySystemInformation; + pHalSetSystemInformation HalSetSystemInformation; + pHalQueryBusSlots HalQueryBusSlots; + pHalDeviceControl HalDeviceControl; + pHalExamineMBR HalExamineMBR; + pHalIoAssignDriveLetters HalIoAssignDriveLetters; + pHalIoReadPartitionTable HalIoReadPartitionTable; + pHalIoSetPartitionInformation HalIoSetPartitionInformation; + pHalIoWritePartitionTable HalIoWritePartitionTable; + pHalHandlerForBus HalReferenceHandlerForBus; + pHalReferenceBusHandler HalReferenceBusHandler; + pHalReferenceBusHandler HalDereferenceBusHandler; +} HAL_DISPATCH, *PHAL_DISPATCH; + +#ifndef __USE_W32API + +#ifdef __NTOSKRNL__ +extern HAL_DISPATCH EXPORTED HalDispatchTable; +#else +extern PHAL_DISPATCH IMPORTED HalDispatchTable; +#endif + +#endif /* !__USE_W32API */ + +#ifdef __NTOSKRNL__ +#define HALDISPATCH (&HalDispatchTable) +#else +#define HALDISPATCH ((PHAL_DISPATCH)&HalDispatchTable) +#endif + + +#define HAL_DISPATCH_VERSION 1 +#define HalDispatchTableVersion HALDISPATCH->Version +#define HalQuerySystemInformation HALDISPATCH->HalQuerySystemInformation +#define HalSetSystemInformation HALDISPATCH->HalSetSystemInformation +#define HalQueryBusSlots HALDISPATCH->HalQueryBusSlots +#define HalDeviceControl HALDISPATCH->HalDeviceControl +#define HalExamineMBR HALDISPATCH->HalExamineMBR +#define HalIoAssignDriveLetters HALDISPATCH->HalIoAssignDriveLetters +#define HalIoReadPartitionTable HALDISPATCH->HalIoReadPartitionTable +#define HalIoSetPartitionInformation HALDISPATCH->HalIoSetPartitionInformation +#define HalIoWritePartitionTable HALDISPATCH->HalIoWritePartitionTable +#define HalReferenceHandlerForBus HALDISPATCH->HalReferenceHandlerForBus +#define HalReferenceBusHandler HALDISPATCH->HalReferenceBusHandler +#define HalDereferenceBusHandler HALDISPATCH->HalDereferenceBusHandler + + +/* Hal private dispatch table */ + +typedef struct _HAL_PRIVATE_DISPATCH +{ + ULONG Version; +} HAL_PRIVATE_DISPATCH, *PHAL_PRIVATE_DISPATCH; + +#ifndef __USE_W32API + +#ifdef __NTOSKRNL__ +extern HAL_PRIVATE_DISPATCH EXPORTED HalPrivateDispatchTable; +#else +extern PHAL_PRIVATE_DISPATCH IMPORTED HalPrivateDispatchTable; +#endif + +#endif /* !__USE_W32API */ + +#define HAL_PRIVATE_DISPATCH_VERSION 1 + + + +/* + * Kernel debugger section + */ + +typedef struct _KD_PORT_INFORMATION +{ + ULONG ComPort; + ULONG BaudRate; + ULONG BaseAddress; +} KD_PORT_INFORMATION, *PKD_PORT_INFORMATION; + + +#ifdef __NTHAL__ +extern ULONG EXPORTED KdComPortInUse; +#else +extern ULONG IMPORTED KdComPortInUse; +#endif + +#endif /* __INCLUDE_DDK_HALTYPES_H */ + +/* EOF */ diff --git a/include/ntos/kdfuncs.h b/include/ntos/kdfuncs.h new file mode 100755 index 0000000..572aa00 --- /dev/null +++ b/include/ntos/kdfuncs.h @@ -0,0 +1,102 @@ +#ifndef __INCLUDE_DDK_KDFUNCS_H +#define __INCLUDE_DDK_KDFUNCS_H +/* $Id$ */ + +#ifndef __USE_W32API + +#if defined(__NTOSKRNL__) +extern BOOLEAN KdDebuggerEnabled __declspec(dllexport); +extern BOOLEAN KdDebuggerNotPresent __declspec(dllexport); +#else +extern BOOLEAN KdDebuggerEnabled __declspec(dllimport); +extern BOOLEAN KdDebuggerNotPresent __declspec(dllimport); +#endif + +#endif /* __USE_W32API */ + +BYTE +STDCALL +KdPollBreakIn ( + VOID + ); + +BOOLEAN +STDCALL +KdPortInitialize ( + PKD_PORT_INFORMATION PortInformation, + DWORD Unknown1, + DWORD Unknown2 + ); + +BOOLEAN +STDCALL +KdPortInitializeEx ( + PKD_PORT_INFORMATION PortInformation, + DWORD Unknown1, + DWORD Unknown2 + ); + +BOOLEAN +STDCALL +KdPortGetByte ( + PUCHAR ByteRecieved + ); + +BOOLEAN +STDCALL +KdPortGetByteEx ( + PKD_PORT_INFORMATION PortInformation, + PUCHAR ByteRecieved + ); + +BOOLEAN +STDCALL +KdPortPollByte ( + PUCHAR ByteRecieved + ); + +BOOLEAN +STDCALL +KdPortPollByteEx ( + PKD_PORT_INFORMATION PortInformation, + PUCHAR ByteRecieved + ); + +VOID +STDCALL +KdPortPutByte ( + UCHAR ByteToSend + ); + +VOID +STDCALL +KdPortPutByteEx ( + PKD_PORT_INFORMATION PortInformation, + UCHAR ByteToSend + ); + +VOID +STDCALL +KdPortRestore ( + VOID + ); + +VOID +STDCALL +KdPortSave ( + VOID + ); + +BOOLEAN +STDCALL +KdPortDisableInterrupts( + VOID + ); + +BOOLEAN +STDCALL +KdPortEnableInterrupts( + VOID + ); + +#endif /* __INCLUDE_DDK_KDFUNCS_H */ diff --git a/include/ntos/kefuncs.h b/include/ntos/kefuncs.h new file mode 100644 index 0000000..349a952 --- /dev/null +++ b/include/ntos/kefuncs.h @@ -0,0 +1,28 @@ +/* + This file was added by Andrew Greenwood. So, if it messes anything up, + you know who to call... +*/ + +#ifndef __INCLUDE_NTOS_KEFUNCS_H +#define __INCLUDE_NTOS_KEFUNCS_H + +#define KEBUGCHECK(a) DbgPrint("KeBugCheck at %s:%i\n",__FILE__,__LINE__), KeBugCheck(a) +#define KEBUGCHECKEX(a,b,c,d,e) DbgPrint("KeBugCheckEx at %s:%i\n",__FILE__,__LINE__), KeBugCheckEx(a,b,c,d,e) + + +#ifdef __NTOSKRNL__ +extern CHAR EXPORTED KeNumberProcessors; +extern LOADER_PARAMETER_BLOCK EXPORTED KeLoaderBlock; +extern ULONG EXPORTED KeDcacheFlushCount; +extern ULONG EXPORTED KeIcacheFlushCount; +#else +extern CHAR IMPORTED KeNumberProcessors; +extern LOADER_PARAMETER_BLOCK IMPORTED KeLoaderBlock; +extern ULONG EXPORTED KeDcacheFlushCount; +extern ULONG EXPORTED KeIcacheFlushCount; +#endif + + +VOID STDCALL KeFlushWriteBuffer (VOID); + +#endif /* __INCLUDE_NTOS_KEFUNCS_H */ diff --git a/include/ntos/keyboard.h b/include/ntos/keyboard.h index 5dcdfb0..9965a59 100644 --- a/include/ntos/keyboard.h +++ b/include/ntos/keyboard.h @@ -95,7 +95,7 @@ typedef struct _KEY_EVENT_RECORD CHAR AsciiChar; } uChar; DWORD dwControlKeyState; -} KEY_EVENT_RECORD PACKED; +} PACKED KEY_EVENT_RECORD; typedef struct _MOUSE_EVENT_RECORD { diff --git a/include/ntos/mm.h b/include/ntos/mm.h index 706ee37..2c97e14 100644 --- a/include/ntos/mm.h +++ b/include/ntos/mm.h @@ -59,4 +59,7 @@ #endif /* __USE_W32API */ +#define PAGE_ROUND_UP(x) ( (((ULONG)x)%PAGE_SIZE) ? ((((ULONG)x)&(~(PAGE_SIZE-1)))+PAGE_SIZE) : ((ULONG)x) ) +#define PAGE_ROUND_DOWN(x) (((ULONG)x)&(~(PAGE_SIZE-1))) + #endif /* __INCLUDE_MM_H */ diff --git a/include/ntos/ntdef.h b/include/ntos/ntdef.h index 2f49140..e0c88c3 100644 --- a/include/ntos/ntdef.h +++ b/include/ntos/ntdef.h @@ -11,12 +11,12 @@ #ifndef __INCLUDE_NTDEF_H #define __INCLUDE_NTDEF_H -#define PACKED __attribute__((packed)) - #define EX_MAXIMUM_WAIT_OBJECTS (64) #ifndef __USE_W32API +#define PACKED __attribute__((packed)) + #define ANYSIZE_ARRAY (1) #define DELETE (0x00010000L) diff --git a/include/ntos/obtypes.h b/include/ntos/obtypes.h new file mode 100755 index 0000000..216a245 --- /dev/null +++ b/include/ntos/obtypes.h @@ -0,0 +1,209 @@ +#ifndef _INCLUDE_DDK_OBTYPES_H +#define _INCLUDE_DDK_OBTYPES_H +/* $Id$ */ +struct _DIRECTORY_OBJECT; +struct _OBJECT_ATTRIBUTES; + +#ifndef __USE_W32API + +typedef ULONG ACCESS_STATE, *PACCESS_STATE; + +typedef struct _OBJECT_NAME_INFORMATION +{ + UNICODE_STRING Name; +} OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION; + +typedef struct _OBJECT_HANDLE_INFORMATION +{ + ULONG HandleAttributes; + ACCESS_MASK GrantedAccess; +} OBJECT_HANDLE_INFORMATION, *POBJECT_HANDLE_INFORMATION; + +#endif /* __USE_W32API */ + +typedef struct _OBJECT_TYPE +{ + /* + * PURPOSE: Tag to be used when allocating objects of this type + */ + ULONG Tag; + + /* + * PURPOSE: Name of the type + */ + UNICODE_STRING TypeName; + + /* + * PURPOSE: Total number of objects of this type + */ + ULONG TotalObjects; + + /* + * PURPOSE: Total number of handles of this type + */ + ULONG TotalHandles; + + /* + * PURPOSE: Maximum objects of this type + */ + ULONG MaxObjects; + + /* + * PURPOSE: Maximum handles of this type + */ + ULONG MaxHandles; + + /* + * PURPOSE: Paged pool charge + */ + ULONG PagedPoolCharge; + + /* + * PURPOSE: Nonpaged pool charge + */ + ULONG NonpagedPoolCharge; + + /* + * PURPOSE: Mapping of generic access rights + */ + PGENERIC_MAPPING Mapping; + + /* + * PURPOSE: Dumps the object + * NOTE: To be defined + */ + VOID STDCALL_FUNC (*Dump)(VOID); + + /* + * PURPOSE: Opens the object + * NOTE: To be defined + */ + VOID STDCALL_FUNC (*Open)(VOID); + + /* + * PURPOSE: Called to close an object if OkayToClose returns true + */ + VOID STDCALL_FUNC (*Close)(PVOID ObjectBody, + ULONG HandleCount); + + /* + * PURPOSE: Called to delete an object when the last reference is removed + */ + VOID STDCALL_FUNC (*Delete)(PVOID ObjectBody); + + /* + * PURPOSE: Called when an open attempts to open a file apparently + * residing within the object + * RETURNS + * STATUS_SUCCESS NextObject was found + * STATUS_UNSUCCESSFUL NextObject not found + * STATUS_REPARSE Path changed, restart parsing the path + */ + NTSTATUS STDCALL_FUNC (*Parse)(PVOID ParsedObject, + PVOID *NextObject, + PUNICODE_STRING FullPath, + PWSTR *Path, + ULONG Attributes); + + /* + * PURPOSE: Called to set, query, delete or assign a security-descriptor + * to the object + * RETURNS + * STATUS_SUCCESS NextObject was found + */ + NTSTATUS STDCALL_FUNC (*Security)(PVOID ObjectBody, + SECURITY_OPERATION_CODE OperationCode, + SECURITY_INFORMATION SecurityInformation, + PSECURITY_DESCRIPTOR SecurityDescriptor, + PULONG BufferLength); + + /* + * PURPOSE: Called to query the name of the object + * RETURNS + * STATUS_SUCCESS NextObject was found + */ + NTSTATUS STDCALL_FUNC (*QueryName)(PVOID ObjectBody, + POBJECT_NAME_INFORMATION ObjectNameInfo, + ULONG Length, + PULONG ReturnLength); + + /* + * PURPOSE: Called when a process asks to close the object + */ + VOID STDCALL_FUNC (*OkayToClose)(VOID); + + NTSTATUS STDCALL_FUNC (*Create)(PVOID ObjectBody, + PVOID Parent, + PWSTR RemainingPath, + struct _OBJECT_ATTRIBUTES* ObjectAttributes); + + VOID STDCALL_FUNC (*DuplicationNotify)(PEPROCESS DuplicateTo, + PEPROCESS DuplicateFrom, + PVOID Object); +} OBJECT_TYPE; + +#ifndef __USE_W32API + +typedef struct _OBJECT_TYPE *POBJECT_TYPE; + +#endif /* __USE_W32API */ + + +typedef struct _OBJECT_HEADER +/* + * PURPOSE: Header for every object managed by the object manager + */ +{ + UNICODE_STRING Name; + LIST_ENTRY Entry; + LONG RefCount; + LONG HandleCount; + BOOLEAN CloseInProcess; + BOOLEAN Permanent; + struct _DIRECTORY_OBJECT* Parent; + POBJECT_TYPE ObjectType; + + /* + * PURPOSE: Object type + * NOTE: This overlaps the first member of the object body + */ + CSHORT Type; + + /* + * PURPOSE: Object size + * NOTE: This overlaps the second member of the object body + */ + CSHORT Size; + + +} OBJECT_HEADER, *POBJECT_HEADER; + +#ifndef __USE_W32API + +typedef struct _OBJECT_ATTRIBUTES +{ + ULONG Length; + HANDLE RootDirectory; + PUNICODE_STRING ObjectName; + ULONG Attributes; + SECURITY_DESCRIPTOR *SecurityDescriptor; + SECURITY_QUALITY_OF_SERVICE *SecurityQualityOfService; +} OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES; + +#endif /* __USE_W32API */ + +typedef struct _HANDLE_TABLE +{ + LIST_ENTRY ListHead; + KSPIN_LOCK ListLock; +} HANDLE_TABLE; + +#ifndef __USE_W32API + +typedef struct _HANDLE_TABLE *PHANDLE_TABLE; + +#endif /* __USE_W32API */ + +extern POBJECT_TYPE ObDirectoryType; + +#endif /* ndef _INCLUDE_DDK_OBTYPES_H */ diff --git a/include/ntos/ps.h b/include/ntos/ps.h index e216921..25b2bfd 100644 --- a/include/ntos/ps.h +++ b/include/ntos/ps.h @@ -83,4 +83,16 @@ #endif /* !__USE_W32API */ +#ifdef __NTOSKRNL__ +extern struct _EPROCESS* EXPORTED PsInitialSystemProcess; +extern POBJECT_TYPE EXPORTED PsProcessType; +extern POBJECT_TYPE EXPORTED PsThreadType; +#else +#ifdef __GNU__ // robd +extern struct _EPROCESS* IMPORTED PsInitialSystemProcess; +extern POBJECT_TYPE IMPORTED PsProcessType; +extern POBJECT_TYPE IMPORTED PsThreadType; +#endif +#endif + #endif /* __INCLUDE_PS_H */ diff --git a/include/ntos/registry.h b/include/ntos/registry.h index e822343..008f375 100644 --- a/include/ntos/registry.h +++ b/include/ntos/registry.h @@ -35,6 +35,12 @@ #define REG_OPTION_BACKUP_RESTORE (0x8L) #define REG_OPTION_OPEN_LINK (0x8L) +/* Key load/restore options */ +#define REG_WHOLE_HIVE_VOLATILE (0x1L) +#define REG_REFRESH_HIVE (0x2L) +#define REG_NO_LAZY_FLUSH (0x4L) +#define REG_FORCE_RESTORE (0x8L) + /* Key create/open disposition */ #define REG_CREATED_NEW_KEY (0x1L) #define REG_OPENED_EXISTING_KEY (0x2L) diff --git a/include/ntos/rtl.h b/include/ntos/rtl.h index 8d6baa0..cf8ed75 100755 --- a/include/ntos/rtl.h +++ b/include/ntos/rtl.h @@ -386,6 +386,7 @@ RtlEqualUnicodeString ( ); VOID +STDCALL RtlGetCallersAddress ( PVOID * CallersAddress ); @@ -394,7 +395,7 @@ NTSTATUS STDCALL RtlQueryRegistryValues ( IN ULONG RelativeTo, - IN PWSTR Path, + IN PCWSTR Path, IN PRTL_QUERY_REGISTRY_TABLE QueryTable, IN PVOID Context, IN PVOID Environment @@ -404,8 +405,8 @@ NTSTATUS STDCALL RtlWriteRegistryValue ( ULONG RelativeTo, - PWSTR Path, - PWSTR ValueName, + PCWSTR Path, + PCWSTR ValueName, ULONG ValueType, PVOID ValueData, ULONG ValueLength @@ -413,8 +414,8 @@ RtlWriteRegistryValue ( NTSTATUS STDCALL RtlDeleteRegistryValue(IN ULONG RelativeTo, - IN PWSTR Path, - IN PWSTR ValueName); + IN PCWSTR Path, + IN PCWSTR ValueName); VOID STDCALL RtlMoveMemory (PVOID Destination, CONST VOID* Source, ULONG Length); @@ -451,7 +452,7 @@ RtlZeroMemory (PVOID Destination, ULONG Length); #define RTL_REGISTRY_WINDOWS_NT 3 #define RTL_REGISTRY_DEVICEMAP 4 #define RTL_REGISTRY_USER 5 -#define RTL_REGISTRY_ENUM 6 // ReactOS specific: Used internally in kernel only +#define RTL_REGISTRY_ENUM 6 /* ReactOS specific: Used internally in kernel only */ #define RTL_REGISTRY_MAXIMUM 7 #define RTL_REGISTRY_HANDLE 0x40000000 @@ -479,18 +480,26 @@ RtlZeroMemory (PVOID Destination, ULONG Length); #define LONG_MOST_SIGNIFICANT_BIT 3 - -#if defined(__NTOSKRNL__) || defined(__NTDLL__) +#define NLS_ANSI_CODE_PAGE NlsAnsiCodePage +#define NLS_LEAD_BYTE_INFO NlsLeadByteInfo #define NLS_MB_CODE_PAGE_TAG NlsMbCodePageTag #define NLS_MB_OEM_CODE_PAGE_TAG NlsMbOemCodePageTag +#define NLS_OEM_LEAD_BYTE_INFO NlsOemLeadByteInfo + +#if defined(__NTOSKRNL__) || defined(__NTDLL__) +extern USHORT EXPORTED NlsAnsiCodePage; +extern PUSHORT EXPORTED NlsLeadByteInfo; +extern BOOLEAN EXPORTED NlsMbCodePageTag; +extern BOOLEAN EXPORTED NlsMbOemCodePageTag; +extern PUSHORT EXPORTED NlsOemLeadByteInfo; #else -#define NLS_MB_CODE_PAGE_TAG (*NlsMbCodePageTag) -#define NLS_MB_OEM_CODE_PAGE_TAG (*NlsMbOemCodePageTag) +extern USHORT IMPORTED NlsAnsiCodePage; +extern PUSHORT IMPORTED NlsLeadByteInfo; +extern BOOLEAN IMPORTED NlsMbCodePageTag; +extern BOOLEAN IMPORTED NlsMbOemCodePageTag; +extern PUSHORT IMPORTED NlsOemLeadByteInfo; #endif /* __NTOSKRNL__ || __NTDLL__ */ -extern BOOLEAN NLS_MB_CODE_PAGE_TAG; -extern BOOLEAN NLS_MB_OEM_CODE_PAGE_TAG; - /* * NOTE: ReactOS extensions @@ -578,94 +587,6 @@ PushEntryList ( */ -#ifndef __USE_W32API - - -/* - * An ReactOS extension - */ -static -inline -PSINGLE_LIST_ENTRY - PopEntrySList( - PSLIST_HEADER ListHead - ) -{ - PSINGLE_LIST_ENTRY ListEntry; - - ListEntry = ListHead->s.Next.Next; - if (ListEntry!=NULL) - { - ListHead->s.Next.Next = ListEntry->Next; - ListHead->s.Depth++; - ListHead->s.Sequence++; - } - return ListEntry; -} - - -/* - * An ReactOS extension - */ -static -inline -VOID -PushEntrySList ( - PSLIST_HEADER ListHead, - PSINGLE_LIST_ENTRY Entry - ) -{ - Entry->Next = ListHead->s.Next.Next; - ListHead->s.Next.Next = Entry; - ListHead->s.Depth++; - ListHead->s.Sequence++; -} - -#else /* __USE_W32API */ - -/* - * An ReactOS extension - */ -static -inline -PSINGLE_LIST_ENTRY - PopEntrySList( - PSLIST_HEADER ListHead - ) -{ - PSINGLE_LIST_ENTRY ListEntry; - - ListEntry = ListHead->Next.Next; - if (ListEntry!=NULL) - { - ListHead->Next.Next = ListEntry->Next; - ListHead->Depth++; - ListHead->Sequence++; - } - return ListEntry; -} - - -/* - * An ReactOS extension - */ -static -inline -VOID -PushEntrySList ( - PSLIST_HEADER ListHead, - PSINGLE_LIST_ENTRY Entry - ) -{ - Entry->Next = ListHead->Next.Next; - ListHead->Next.Next = Entry; - ListHead->Depth++; - ListHead->Sequence++; -} - -#endif /* __USE_W32API */ - - NTSTATUS STDCALL RtlAddAtomToAtomTable ( @@ -887,8 +808,8 @@ STDCALL RtlCreateHeap ( ULONG Flags, PVOID BaseAddress, - ULONG SizeToReserve, // dwMaximumSize - ULONG SizeToCommit, // dwInitialSize + ULONG SizeToReserve, /* dwMaximumSize */ + ULONG SizeToCommit, /* dwInitialSize */ PVOID Unknown, PRTL_HEAP_DEFINITION Definition ); @@ -921,7 +842,7 @@ RtlCreateUnicodeStringFromAsciiz (OUT PUNICODE_STRING Destination, NTSTATUS STDCALL RtlCustomCPToUnicodeN ( - PRTL_NLS_DATA NlsData, + IN PCPTABLEINFO CustomCP, PWCHAR UnicodeString, ULONG UnicodeSize, PULONG ResultSize, @@ -1181,7 +1102,7 @@ RtlImageDirectoryEntryToData ( PIMAGE_NT_HEADERS STDCALL RtlImageNtHeader ( - PVOID BaseAddress + IN PVOID BaseAddress ); PIMAGE_SECTION_HEADER @@ -1210,6 +1131,22 @@ RtlInitAnsiString ( VOID STDCALL +RtlInitCodePageTable ( + IN PUSHORT TableBase, + OUT PCPTABLEINFO CodePageTable + ); + +VOID +STDCALL +RtlInitNlsTables ( + IN PUSHORT AnsiTableBase, + IN PUSHORT OemTableBase, + IN PUSHORT CaseTableBase, + OUT PNLSTABLEINFO NlsTable + ); + +VOID +STDCALL RtlInitString ( PSTRING DestinationString, PCSZ SourceString @@ -1282,15 +1219,21 @@ RtlIsGenericTableEmpty ( IN PRTL_GENERIC_TABLE Table ); -BOOLEAN STDCALL -RtlIsNameLegalDOS8Dot3(IN PUNICODE_STRING UnicodeName, - IN PANSI_STRING AnsiName, - OUT PBOOLEAN SpacesFound); +BOOLEAN +STDCALL +RtlIsNameLegalDOS8Dot3 ( + IN PUNICODE_STRING UnicodeName, + IN PANSI_STRING AnsiName, + OUT PBOOLEAN SpacesFound + ); -ULONG STDCALL -RtlIsTextUnicode (PVOID Buffer, - ULONG Length, - ULONG *Flags); +ULONG +STDCALL +RtlIsTextUnicode ( + PVOID Buffer, + ULONG Length, + ULONG *Flags + ); LARGE_INTEGER STDCALL @@ -1500,7 +1443,7 @@ RtlMultiByteToUnicodeN ( PWCHAR UnicodeString, ULONG UnicodeSize, PULONG ResultSize, - PCHAR MbString, + const PCHAR MbString, ULONG MbSize ); @@ -1626,12 +1569,21 @@ RtlReAllocateHeap ( DWORD size ); -NTSTATUS STDCALL -RtlReserveChunk(IN USHORT CompressionFormat, - IN OUT PUCHAR *CompressedBuffer, - IN PUCHAR EndOfCompressedBufferPlus1, - OUT PUCHAR *ChunkBuffer, - IN ULONG ChunkSize); +NTSTATUS +STDCALL +RtlReserveChunk ( + IN USHORT CompressionFormat, + IN OUT PUCHAR *CompressedBuffer, + IN PUCHAR EndOfCompressedBufferPlus1, + OUT PUCHAR *ChunkBuffer, + IN ULONG ChunkSize + ); + +VOID +STDCALL +RtlResetRtlTranslations ( + IN PNLSTABLEINFO NlsTable + ); /* * VOID @@ -1835,7 +1787,7 @@ RtlUnicodeStringToOemString ( NTSTATUS STDCALL RtlUnicodeToCustomCPN ( - PRTL_NLS_DATA NlsData, + IN PCPTABLEINFO CustomCP, PCHAR MbString, ULONG MbSize, PULONG ResultSize, @@ -1896,7 +1848,7 @@ NTSTATUS STDCALL RtlUpcaseUnicodeString ( IN OUT PUNICODE_STRING DestinationString, - IN PUNICODE_STRING SourceString, + IN PCUNICODE_STRING SourceString, IN BOOLEAN AllocateDestinationString ); @@ -1927,7 +1879,7 @@ RtlUpcaseUnicodeStringToOemString ( NTSTATUS STDCALL RtlUpcaseUnicodeToCustomCPN ( - PRTL_NLS_DATA NlsData, + IN PCPTABLEINFO CustomCP, PCHAR MbString, ULONG MbSize, PULONG ResultSize, @@ -2167,6 +2119,17 @@ BOOLEAN STDCALL RtlAreAllAccessesGranted (ACCESS_MASK GrantedAccess, ACCESS_MASK BOOLEAN STDCALL RtlAreAnyAccessesGranted (ACCESS_MASK GrantedAccess, ACCESS_MASK DesiredAccess); VOID STDCALL RtlMapGenericMask (PACCESS_MASK AccessMask, PGENERIC_MAPPING GenericMapping); +ULONG STDCALL +RtlRandom (PULONG Seed); + +PRTL_SPLAY_LINKS STDCALL +RtlSubtreePredecessor (IN PRTL_SPLAY_LINKS Links); + +PRTL_SPLAY_LINKS STDCALL +RtlSubtreeSuccessor (IN PRTL_SPLAY_LINKS Links); + +ULONG STDCALL +RtlUniform (PULONG Seed); /* functions exported from NTOSKRNL.EXE which are considered RTL */ diff --git a/include/ntos/rtltypes.h b/include/ntos/rtltypes.h index dbe9b71..4d76b99 100755 --- a/include/ntos/rtltypes.h +++ b/include/ntos/rtltypes.h @@ -123,12 +123,6 @@ typedef struct _RTL_SPLAY_LINKS struct _RTL_SPLAY_LINKS *RightChild; } RTL_SPLAY_LINKS, *PRTL_SPLAY_LINKS; -#else /* __USE_W32API */ - -#include - -#endif /* __USE_W32API */ - typedef struct _USER_STACK { PVOID FixedStackBase; @@ -138,6 +132,12 @@ typedef struct _USER_STACK PVOID ExpandableStackBottom; } USER_STACK, *PUSER_STACK; +#else /* __USE_W32API */ + +#include + +#endif /* __USE_W32API */ + typedef struct _RTL_HEAP_DEFINITION { ULONG Length; @@ -153,36 +153,45 @@ typedef struct _RTL_ATOM_TABLE LIST_ENTRY Slot[0]; } RTL_ATOM_TABLE, *PRTL_ATOM_TABLE; -typedef struct _LB_RANGE + +#define MAXIMUM_LEADBYTES 12 + +typedef struct _CPTABLEINFO { - UCHAR upper; - UCHAR lower; -} LB_RANGE; + USHORT CodePage; + USHORT MaximumCharacterSize; /* SBCS = 1, DBCS = 2 */ + USHORT DefaultChar; + USHORT UniDefaultChar; + USHORT TransDefaultChar; + USHORT TransUniDefaultChar; + USHORT DBCSCodePage; + UCHAR LeadByte[MAXIMUM_LEADBYTES]; + PUSHORT MultiByteTable; + PVOID WideCharTable; + PUSHORT DBCSRanges; + PUSHORT DBCSOffsets; +} CPTABLEINFO, *PCPTABLEINFO; -typedef struct _RTL_NLS_DATA +typedef struct _NLSTABLEINFO { - USHORT CodePage; - USHORT MaxCharacterSize; // SBCS = 1, DBCS = 2 - WCHAR DefaultCharacter; - WCHAR char1; - WCHAR char2; - WCHAR char3; - USHORT DbcsFlag; - LB_RANGE LeadByteRange[6]; - USHORT reserved; - PWCHAR MultiByteToUnicode; - PCHAR UnicodeToMultiByte; - PWCHAR DosMultiByteToUnicode; - PCHAR DbcsTags; -} RTL_NLS_DATA, *PRTL_NLS_DATA; + CPTABLEINFO OemTableInfo; + CPTABLEINFO AnsiTableInfo; + PUSHORT UpperCaseTable; + PUSHORT LowerCaseTable; +} NLSTABLEINFO, *PNLSTABLEINFO; -typedef struct _RTL_NLS_TABLE +typedef struct _NLS_FILE_HEADER { - RTL_NLS_DATA OemInfo; - RTL_NLS_DATA AnsiInfo; - PWCHAR UpcaseTable; - PWCHAR DowncaseTable; -} RTL_NLS_TABLE, *PRTL_NLS_TABLE; + USHORT HeaderSize; + USHORT CodePage; + USHORT MaximumCharacterSize; /* SBCS = 1, DBCS = 2 */ + USHORT DefaultChar; + USHORT UniDefaultChar; + USHORT TransDefaultChar; + USHORT TransUniDefaultChar; + USHORT DBCSCodePage; + UCHAR LeadByte[MAXIMUM_LEADBYTES]; +} PACKED NLS_FILE_HEADER, *PNLS_FILE_HEADER; typedef struct _RTL_GENERIC_TABLE @@ -220,8 +229,8 @@ typedef struct _RTL_MESSAGE_RESOURCE_DATA RTL_MESSAGE_RESOURCE_BLOCK Blocks[1]; } RTL_MESSAGE_RESOURCE_DATA, *PRTL_MESSAGE_RESOURCE_DATA; -typedef VOID STDCALL -(*PRTL_BASE_PROCESS_START_ROUTINE)(PTHREAD_START_ROUTINE StartAddress, +typedef VOID +(STDCALL *PRTL_BASE_PROCESS_START_ROUTINE)(PTHREAD_START_ROUTINE StartAddress, PVOID Parameter); #endif /* __DDK_RTLTYPES_H */ diff --git a/include/ntos/security.h b/include/ntos/security.h index 6fc42b5..8780490 100644 --- a/include/ntos/security.h +++ b/include/ntos/security.h @@ -45,7 +45,10 @@ #define SE_SELF_RELATIVE (32768) #endif +/* This is defined in the Win 32 API headers as something else: */ +#if defined(__NTOSKRNL__) || defined(__NTDRIVER__) || defined(__NTHAL__) || defined(__NTDLL__) || defined(__NTAPP__) typedef ULONG ACCESS_MODE, *PACCESS_MODE; +#endif #if 0 typedef struct _ACE_HEADER @@ -239,7 +242,11 @@ typedef enum _ACL_INFORMATION_CLASS typedef USHORT SECURITY_DESCRIPTOR_CONTROL, *PSECURITY_DESCRIPTOR_CONTROL; -typedef LARGE_INTEGER LUID, *PLUID; +typedef struct _LUID +{ + ULONG LowPart; + LONG HighPart; +} LUID, *PLUID; typedef struct _SECURITY_DESCRIPTOR { @@ -255,7 +262,7 @@ typedef struct _SECURITY_DESCRIPTOR typedef struct _LUID_AND_ATTRIBUTES { LUID Luid; - DWORD Attributes; + ULONG Attributes; } LUID_AND_ATTRIBUTES, *PLUID_AND_ATTRIBUTES; typedef struct _TOKEN_SOURCE diff --git a/include/ntos/service.h b/include/ntos/service.h new file mode 100755 index 0000000..0be2457 --- /dev/null +++ b/include/ntos/service.h @@ -0,0 +1,68 @@ + +#ifndef __NTOS_SERVICE_H +#define __NTOS_SERVICE_H + + +/* number of entries in the service descriptor tables */ +#define SSDT_MAX_ENTRIES 4 + + +#ifndef __USE_W32API + +#pragma pack(1) + +/* System Service Dispatch Table */ +typedef struct t_SSDT { + ULONG SysCallPtr; +} SSDT, *PSSDT; + +/* System Service Parameters Table */ +typedef struct t_SSPT { + unsigned int ParamBytes; +} SSPT, *PSSPT; + +typedef struct t_KeServiceDescriptorTableEntry { + PSSDT SSDT; + PULONG ServiceCounterTable; + unsigned int NumberOfServices; + PSSPT SSPT; + +} SSDT_ENTRY, *PSSDT_ENTRY; + +#pragma pack() + +#endif /* __USE_W32API */ + + +/* --- NTOSKRNL.EXE --- */ +#if defined(__NTOSKRNL__) +extern +SSDT_ENTRY +KeServiceDescriptorTable[SSDT_MAX_ENTRIES] __declspec(dllexport); +#else +extern +SSDT_ENTRY +KeServiceDescriptorTable[SSDT_MAX_ENTRIES] __declspec(dllimport); +#endif + +extern +SSDT_ENTRY +KeServiceDescriptorTableShadow[SSDT_MAX_ENTRIES]; + + +#ifndef __USE_W32API + +BOOLEAN +STDCALL +KeAddSystemServiceTable ( + PSSDT SSDT, + PULONG ServiceCounterTable, + ULONG NumberOfServices, + PSSPT SSPT, + ULONG TableIndex + ); + +#endif /* __USE_W32API */ + +#endif /* __NTOS_SERVICE_H */ + diff --git a/include/ntos/tss.h b/include/ntos/tss.h new file mode 100755 index 0000000..45c0fdc --- /dev/null +++ b/include/ntos/tss.h @@ -0,0 +1,103 @@ +/* + * + */ + +#ifndef __INCLUDE_DDK_I386_TSS_H +#define __INCLUDE_DDK_I386_TSS_H + +#define KTSS_ESP0 (0x4) +#define KTSS_IOMAPBASE (0x66) + +#ifndef __ASM__ + +typedef struct _KTSSNOIOPM +{ + USHORT PreviousTask; + USHORT Reserved1; + ULONG Esp0; + USHORT Ss0; + USHORT Reserved2; + ULONG Esp1; + USHORT Ss1; + USHORT Reserved3; + ULONG Esp2; + USHORT Ss2; + USHORT Reserved4; + ULONG Cr3; + ULONG Eip; + ULONG Eflags; + ULONG Eax; + ULONG Ecx; + ULONG Edx; + ULONG Ebx; + ULONG Esp; + ULONG Ebp; + ULONG Esi; + ULONG Edi; + USHORT Es; + USHORT Reserved5; + USHORT Cs; + USHORT Reserved6; + USHORT Ss; + USHORT Reserved7; + USHORT Ds; + USHORT Reserved8; + USHORT Fs; + USHORT Reserved9; + USHORT Gs; + USHORT Reserved10; + USHORT Ldt; + USHORT Reserved11; + USHORT Trap; + USHORT IoMapBase; + /* no interrupt redirection map */ + UCHAR IoBitmap[1]; +} PACKED KTSSNOIOPM; + +typedef struct _KTSS +{ + USHORT PreviousTask; + USHORT Reserved1; + ULONG Esp0; + USHORT Ss0; + USHORT Reserved2; + ULONG Esp1; + USHORT Ss1; + USHORT Reserved3; + ULONG Esp2; + USHORT Ss2; + USHORT Reserved4; + ULONG Cr3; + ULONG Eip; + ULONG Eflags; + ULONG Eax; + ULONG Ecx; + ULONG Edx; + ULONG Ebx; + ULONG Esp; + ULONG Ebp; + ULONG Esi; + ULONG Edi; + USHORT Es; + USHORT Reserved5; + USHORT Cs; + USHORT Reserved6; + USHORT Ss; + USHORT Reserved7; + USHORT Ds; + USHORT Reserved8; + USHORT Fs; + USHORT Reserved9; + USHORT Gs; + USHORT Reserved10; + USHORT Ldt; + USHORT Reserved11; + USHORT Trap; + USHORT IoMapBase; + /* no interrupt redirection map */ + UCHAR IoBitmap[8193]; +} PACKED KTSS; + +#endif /* not __ASM__ */ + +#endif /* __INCLUDE_DDK_I386_TSS_H */ diff --git a/include/ntos/types.h b/include/ntos/types.h index e7739af..58e7a38 100644 --- a/include/ntos/types.h +++ b/include/ntos/types.h @@ -14,6 +14,9 @@ #ifndef __INCLUDE_TYPES_H #define __INCLUDE_TYPES_H +#define EXPORTED __declspec(dllexport) +#define IMPORTED __declspec(dllimport) + #include #ifdef __GNUC__ @@ -41,8 +44,13 @@ typedef short SHORT; #ifndef __USE_W32API #ifdef i386 +#ifdef __GNUC__ #define STDCALL __attribute__ ((stdcall)) #define CDECL __attribute__ ((cdecl)) +#else +#define STDCALL __stdcall +#define CDECL __cdecl +#endif #define CALLBACK WINAPI #define PASCAL WINAPI #else @@ -82,12 +90,13 @@ typedef __WCHAR_TYPE__ wchar_t; #endif /* wchar_t not already defined */ -//#ifndef __cplusplus -//#ifndef _WCHAR_T_DEFINED -//#define _WCHAR_T_DEFINED -//typedef unsigned short wchar_t; -//#endif -//#endif +/* #ifndef __cplusplus +#ifndef _WCHAR_T_DEFINED +#define _WCHAR_T_DEFINED +typedef unsigned short wchar_t; +#endif +#endif +*/ typedef unsigned char UCHAR; typedef unsigned short USHORT; @@ -107,7 +116,7 @@ typedef float *PFLOAT; typedef wchar_t *PWCH; typedef unsigned short *PWORD; -#include // for definition of LONGLONG, PLONGLONG etc +#include /* for definition of LONGLONG, PLONGLONG etc */ typedef const void *LPCVOID; typedef BYTE *LPBYTE, *PBYTE; @@ -169,6 +178,12 @@ typedef union _ULARGE_INTEGER ULONGLONG QuadPart; } ULARGE_INTEGER, *PULARGE_INTEGER; + +/* + * Moved here by AG + * typedef ULARGE_INTEGER TIME, *PTIME; + */ + typedef struct _FILETIME { DWORD dwLowDateTime; @@ -186,6 +201,9 @@ typedef struct _SINGLE_LIST_ENTRY struct _SINGLE_LIST_ENTRY *Next; } SINGLE_LIST_ENTRY, *PSINGLE_LIST_ENTRY; +#define SLIST_ENTRY SINGLE_LIST_ENTRY +#define PSLIST_ENTRY PSINGLE_LIST_ENTRY + typedef struct _UNICODE_STRING { USHORT Length; @@ -193,6 +211,10 @@ typedef struct _UNICODE_STRING PWSTR Buffer; } UNICODE_STRING, *PUNICODE_STRING; +typedef const UNICODE_STRING* PCUNICODE_STRING; + +#define UNICODE_NULL ((WCHAR)0) + typedef struct _FLOATING_SAVE_AREA { DWORD ControlWord; @@ -401,7 +423,7 @@ typedef struct value_ent DWORD ve_type; } WVALENT, *PWVALENT; -//#include "except.h" +/* #include "except.h" */ #ifndef __USE_W32API @@ -464,4 +486,77 @@ typedef LPTHREAD_START_ROUTINE PTHREAD_START_ROUTINE; #endif /* __USE_W32API */ +typedef struct _ADDRESS_RANGE +{ + ULONG BaseAddrLow; + ULONG BaseAddrHigh; + ULONG LengthLow; + ULONG LengthHigh; + ULONG Type; +} ADDRESS_RANGE, *PADDRESS_RANGE; + +#define MB_FLAGS_MEM_INFO (0x1) +#define MB_FLAGS_BOOT_DEVICE (0x2) +#define MB_FLAGS_COMMAND_LINE (0x4) +#define MB_FLAGS_MODULE_INFO (0x8) +#define MB_FLAGS_AOUT_SYMS (0x10) +#define MB_FLAGS_ELF_SYMS (0x20) +#define MB_FLAGS_MMAP_INFO (0x40) +#define MB_FLAGS_DRIVES_INFO (0x80) +#define MB_FLAGS_CONFIG_TABLE (0x100) +#define MB_FLAGS_BOOT_LOADER_NAME (0x200) +#define MB_FLAGS_APM_TABLE (0x400) +#define MB_FLAGS_GRAPHICS_TABLE (0x800) + +typedef struct _LOADER_MODULE +{ + ULONG ModStart; + ULONG ModEnd; + ULONG String; + ULONG Reserved; +} LOADER_MODULE, *PLOADER_MODULE; + +typedef struct _LOADER_PARAMETER_BLOCK +{ + ULONG Flags; + ULONG MemLower; + ULONG MemHigher; + ULONG BootDevice; + ULONG CommandLine; + ULONG ModsCount; + ULONG ModsAddr; + UCHAR Syms[12]; + ULONG MmapLength; + ULONG MmapAddr; + ULONG DrivesCount; + ULONG DrivesAddr; + ULONG ConfigTable; + ULONG BootLoaderName; +} LOADER_PARAMETER_BLOCK, *PLOADER_PARAMETER_BLOCK; + +typedef enum _KAPC_ENVIRONMENT +{ + OriginalApcEnvironment, + AttachedApcEnvironment, + CurrentApcEnvironment +} KAPC_ENVIRONMENT; + +/* FIXME: Are these official values ?? */ +#define STATUS_FS_QUERY_REQUIRED ((NTSTATUS)0xC1000001) +#define STATUS_HANDLE_NOT_WAITABLE ((NTSTATUS)0xC1000002) +#define STATUS_OBJECT_FILE_MISMATCH ((NTSTATUS)0xC1000003) +#define STATUS_INVALID_PARAMETER_MAX ((NTSTATUS)0xC1000004) +#define STATUS_CONFLICTING_ADDRESS ((NTSTATUS)0xC1000005) +#define STATUS_NO_MEDIA_IN_DRIVE ((NTSTATUS)0xC1000006) + +#define NTSTAT_SEVERITY_SHIFT 30 +#define NTSTAT_SEVERITY_MASK 0x00000003 +#define NTSTAT_FACILITY_SHIFT 16 +#define NTSTAT_FACILITY_MASK 0x00000FFF +#define NTSTAT_CUSTOMER_MASK 0x20000000 + +#define NT_SEVERITY(StatCode) (((StatCode) >> NTSTAT_SEVERITY_SHIFT) & NTSTAT_SEVERITY_MASK) +#define NT_FACILITY(StatCode) (((StatCode) >> NTSTAT_FACILITY_SHIFT) & NTSTAT_FACILITY_MASK) +#define NT_CUSTOMER(StatCode) ((StatCode) & NTSTAT_CUSTOMER_MASK) + #endif /* __INCLUDE_TYPES_H */ diff --git a/include/ntos/zw.h b/include/ntos/zw.h index b5fd42b..d0c57d1 100755 --- a/include/ntos/zw.h +++ b/include/ntos/zw.h @@ -12,6 +12,7 @@ * 04/08/98: Added some documentation (Ariadne) * 14/08/98: Added type TIME and change variable type from [1] to [0] * 14/09/98: Added for each Nt call a corresponding Zw Call + * 09/08/03: Added ThreadEventPair routines */ #ifndef __DDK_ZW_H @@ -3469,6 +3470,41 @@ ZwSetLowWaitHighEventPair( HANDLE EventPair ); +/* NtSetLowWaitHighThread effectively invokes NtSetLowWaitHighEventPair on the + * event pair of the thread. + */ +NTSTATUS +STDCALL +NtSetLowWaitHighThread( + VOID + ); +/* ZwSetLowWaitHighThread effectively invokes ZwSetLowWaitHighEventPair on the + * event pair of the thread. + */ +NTSTATUS +STDCALL +ZwSetLowWaitHighThread( + VOID + ); + +/* NtSetHighWaitLowThread effectively invokes NtSetHighWaitLowEventPair on the + * event pair of the thread. + */ +NTSTATUS +STDCALL +NtSetHighWaitLowThread( + VOID + ); + +/* ZwSetHighWaitLowThread effectively invokes ZwSetHighWaitLowEventPair on the + * event pair of the thread. + */ +NTSTATUS +STDCALL +ZwSetHighWaitLowThread( + VOID + ); + NTSTATUS STDCALL NtSetSecurityObject( @@ -4210,11 +4246,10 @@ NtSetContextChannel ( //NTSTATUS STDCALL NtSetLdtEntries(VOID); NTSTATUS STDCALL -NtSetLdtEntries ( - HANDLE Thread, - ULONG FirstEntry, - PULONG Entries - ); +NtSetLdtEntries (ULONG Selector1, + LDT_ENTRY LdtEntry1, + ULONG Selector2, + LDT_ENTRY LdtEntry2); NTSTATUS STDCALL @@ -4269,100 +4304,14 @@ RtlOpenCurrentUser( IN ACCESS_MASK DesiredAccess, OUT PHANDLE KeyHandle); - -#ifndef __USE_W32API - -/* - * FUNCTION: Continues a thread with the specified context - * ARGUMENTS: - * Context = Specifies the processor context - * IrqLevel = Specifies the Interupt Request Level to continue with. Can - * be PASSIVE_LEVEL or APC_LEVEL - * REMARKS - * NtContinue can be used to continue after an exception or apc. - * RETURNS: Status - */ -//FIXME This function might need another parameter - -NTSTATUS -STDCALL -NtContinue( - IN PCONTEXT Context, - IN BOOLEAN TestAlert - ); - -NTSTATUS STDCALL ZwContinue(IN PCONTEXT Context, IN CINT IrqLevel); - -/* - * FUNCTION: Retrieves the system time - * ARGUMENTS: - * CurrentTime (OUT) = Caller should supply storage for the resulting time. - * RETURNS: Status - * -*/ - -NTSTATUS -STDCALL -NtQuerySystemTime ( - OUT TIME *CurrentTime - ); - -NTSTATUS -STDCALL -ZwQuerySystemTime ( - OUT TIME *CurrentTime - ); - -/* - * FUNCTION: Copies a handle from one process space to another - * ARGUMENTS: - * SourceProcessHandle = The source process owning the handle. The source process should have opened - * the SourceHandle with PROCESS_DUP_HANDLE access. - * SourceHandle = The handle to the object. - * TargetProcessHandle = The destination process owning the handle - * TargetHandle (OUT) = Caller should supply storage for the duplicated handle. - * DesiredAccess = The desired access to the handle. - * InheritHandle = Indicates wheter the new handle will be inheritable or not. - * Options = Specifies special actions upon duplicating the handle. Can be - * one of the values DUPLICATE_CLOSE_SOURCE | DUPLICATE_SAME_ACCESS. - * DUPLICATE_CLOSE_SOURCE specifies that the source handle should be - * closed after duplicating. DUPLICATE_SAME_ACCESS specifies to ignore - * the DesiredAccess paramter and just grant the same access to the new - * handle. - * RETURNS: Status - * REMARKS: This function maps to the win32 DuplicateHandle. - */ - -NTSTATUS -STDCALL -NtDuplicateObject( - IN HANDLE SourceProcessHandle, - IN HANDLE SourceHandle, - IN HANDLE TargetProcessHandle, - OUT PHANDLE TargetHandle, - IN ACCESS_MASK DesiredAccess, - IN BOOLEAN InheritHandle, - IN ULONG Options - ); - -NTSTATUS -STDCALL -ZwDuplicateObject( - IN HANDLE SourceProcessHandle, - IN PHANDLE SourceHandle, - IN HANDLE TargetProcessHandle, - OUT PHANDLE TargetHandle, - IN ACCESS_MASK DesiredAccess, - IN BOOLEAN InheritHandle, - IN ULONG Options - ); - /* * FUNCTION: Checks a clients access rights to a object and issues a audit a alarm. ( it logs the access ) * ARGUMENTS: * SubsystemName = Specifies the name of the subsystem, can be "WIN32" or "DEBUG" * ObjectHandle = - * ObjectAttributes = + * ObjectTypeName = + * ObjectName = + * SecurityDescriptor = * DesiredAcces = * GenericMapping = * ObjectCreation = @@ -4378,69 +4327,18 @@ STDCALL NtAccessCheckAndAuditAlarm( IN PUNICODE_STRING SubsystemName, IN PHANDLE ObjectHandle, - IN POBJECT_ATTRIBUTES ObjectAttributes, - IN ACCESS_MASK DesiredAccess, - IN PGENERIC_MAPPING GenericMapping, - IN BOOLEAN ObjectCreation, - OUT PULONG GrantedAccess, - OUT PBOOLEAN AccessStatus, - OUT PBOOLEAN GenerateOnClose - ); - -NTSTATUS -STDCALL -ZwAccessCheckAndAuditAlarm( - IN PUNICODE_STRING SubsystemName, - IN PHANDLE ObjectHandle, - IN POBJECT_ATTRIBUTES ObjectAttributes, + IN PUNICODE_STRING ObjectTypeName, + IN PUNICODE_STRING ObjectName, + IN PSECURITY_DESCRIPTOR SecurityDescriptor, IN ACCESS_MASK DesiredAccess, IN PGENERIC_MAPPING GenericMapping, IN BOOLEAN ObjectCreation, - OUT PULONG GrantedAccess, - OUT PBOOLEAN AccessStatus, + OUT PACCESS_MASK GrantedAccess, + OUT PNTSTATUS AccessStatus, OUT PBOOLEAN GenerateOnClose ); /* - * FUNCTION: Adds an atom to the global atom table - * ARGUMENTS: - * AtomString = The string to add to the atom table. - * Atom (OUT) = Caller supplies storage for the resulting atom. - * REMARKS: The arguments map to the win32 add GlobalAddAtom. - * RETURNS: Status - */ -NTSTATUS -STDCALL -NtAddAtom( - IN PWSTR AtomName, - IN OUT PRTL_ATOM Atom - ); - - -NTSTATUS -STDCALL -ZwAddAtom( - IN PWSTR AtomName, - IN OUT PRTL_ATOM Atom - ); - -NTSTATUS -STDCALL -NtAllocateUuids( - PULARGE_INTEGER Time, - PULONG Range, - PULONG Sequence - ); - -NTSTATUS -STDCALL -ZwAllocateUuids( - PULARGE_INTEGER Time, - PULONG Range, - PULONG Sequence - ); - -/* * FUNCTION: Cancels a timer * ARGUMENTS: * TimerHandle = Handle to the timer @@ -4456,11 +4354,23 @@ NtCancelTimer( OUT PBOOLEAN CurrentState OPTIONAL ); +/* + * FUNCTION: Continues a thread with the specified context + * ARGUMENTS: + * Context = Specifies the processor context + * IrqLevel = Specifies the Interupt Request Level to continue with. Can + * be PASSIVE_LEVEL or APC_LEVEL + * REMARKS + * NtContinue can be used to continue after an exception or apc. + * RETURNS: Status + */ +//FIXME This function might need another parameter + NTSTATUS STDCALL -ZwCancelTimer( - IN HANDLE TimerHandle, - OUT ULONG ElapsedTime +NtContinue( + IN PCONTEXT Context, + IN BOOLEAN TestAlert ); /* @@ -4481,14 +4391,36 @@ NtCreatePagingFile( IN ULONG Reserved ); -NTSTATUS + +/* + * FUNCTION: Creates a profile + * ARGUMENTS: + * ProfileHandle (OUT) = Caller supplied storage for the resulting handle + * ObjectAttribute = Initialized attributes for the object + * ImageBase = Start address of executable image + * ImageSize = Size of the image + * Granularity = Bucket size + * Buffer = Caller supplies buffer for profiling info + * ProfilingSize = Buffer size + * ClockSource = Specify 0 / FALSE ?? + * ProcessorMask = A value of -1 indicates disables per processor profiling, + otherwise bit set for the processor to profile. + * REMARKS: + * This function maps to the win32 CreateProcess. + * RETURNS: Status + */ + +NTSTATUS STDCALL -ZwCreatePagingFile( - IN PUNICODE_STRING FileName, - IN PLARGE_INTEGER InitialSize, - IN PLARGE_INTEGER MaxiumSize, - IN ULONG Reserved - ); +NtCreateProfile(OUT PHANDLE ProfileHandle, + IN HANDLE ProcessHandle, + IN PVOID ImageBase, + IN ULONG ImageSize, + IN ULONG Granularity, + OUT PULONG Buffer, + IN ULONG ProfilingSize, + IN KPROFILE_SOURCE Source, + IN ULONG ProcessorMask); /* * FUNCTION: Creates a user mode thread @@ -4518,33 +4450,623 @@ NtCreateThread( IN BOOLEAN CreateSuspended ); -NTSTATUS -STDCALL -ZwCreateThread( - OUT PHANDLE ThreadHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, - IN HANDLE ProcessHandle, - OUT PCLIENT_ID ClientId, - IN PCONTEXT ThreadContext, - IN PUSER_STACK UserStack, - IN BOOLEAN CreateSuspended - ); +/* + * FUNCTION: Delays the execution of the calling thread. + * ARGUMENTS: + * Alertable = If TRUE the thread is alertable during is wait period + * Interval = Specifies the interval to wait. + * RETURNS: Status + */ NTSTATUS STDCALL -NtDuplicateToken( - IN HANDLE ExistingToken, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes, - IN SECURITY_IMPERSONATION_LEVEL ImpersonationLevel, - IN TOKEN_TYPE TokenType, - OUT PHANDLE NewToken +NtDelayExecution( + IN ULONG Alertable, + IN TIME *Interval ); +/* + * FUNCTION: Extends a section + * ARGUMENTS: + * SectionHandle = Handle to the section + * NewMaximumSize = Adjusted size + * RETURNS: Status + */ NTSTATUS STDCALL -ZwDuplicateToken( +NtExtendSection( + IN HANDLE SectionHandle, + IN ULONG NewMaximumSize + ); + +/* + * FUNCTION: Flushes a the processors instruction cache + * ARGUMENTS: + * ProcessHandle = Points to the process owning the cache + * BaseAddress = // might this be a image address ???? + * NumberOfBytesToFlush = + * RETURNS: Status + * REMARKS: + * This funciton is used by debuggers + */ +NTSTATUS +STDCALL +NtFlushInstructionCache( + IN HANDLE ProcessHandle, + IN PVOID BaseAddress, + IN UINT NumberOfBytesToFlush + ); + +/* + * FUNCTION: Flushes virtual memory to file + * ARGUMENTS: + * ProcessHandle = Points to the process that allocated the virtual memory + * BaseAddress = Points to the memory address + * NumberOfBytesToFlush = Limits the range to flush, + * NumberOfBytesFlushed = Actual number of bytes flushed + * RETURNS: Status + * REMARKS: + * Check return status on STATUS_NOT_MAPPED_DATA + */ +NTSTATUS +STDCALL +NtFlushVirtualMemory( + IN HANDLE ProcessHandle, + IN PVOID BaseAddress, + IN ULONG NumberOfBytesToFlush, + OUT PULONG NumberOfBytesFlushed OPTIONAL + ); + +/* + * FUNCTION: Retrieves the uptime of the system + * ARGUMENTS: + * UpTime = Number of clock ticks since boot. + * RETURNS: Status + */ +NTSTATUS +STDCALL +NtGetTickCount( + PULONG UpTime + ); + +/* + * FUNCTION: Loads a registry key. + * ARGUMENTS: + * KeyObjectAttributes = Key to be loaded + * FileObjectAttributes = File to load the key from + * REMARK: + * This procedure maps to the win32 procedure RegLoadKey + * RETURNS: Status + */ +NTSTATUS +STDCALL +NtLoadKey( + IN POBJECT_ATTRIBUTES KeyObjectAttributes, + IN POBJECT_ATTRIBUTES FileObjectAttributes + ); + + +/* + * FUNCTION: Locks a range of virtual memory. + * ARGUMENTS: + * ProcessHandle = Handle to the process + * BaseAddress = Lower boundary of the range of bytes to lock. + * NumberOfBytesLock = Offset to the upper boundary. + * NumberOfBytesLocked (OUT) = Number of bytes actually locked. + * REMARK: + This procedure maps to the win32 procedure VirtualLock. + * RETURNS: Status [STATUS_SUCCESS | STATUS_WAS_LOCKED ] + */ +NTSTATUS +STDCALL +NtLockVirtualMemory( + HANDLE ProcessHandle, + PVOID BaseAddress, + ULONG NumberOfBytesToLock, + PULONG NumberOfBytesLocked + ); + +NTSTATUS +STDCALL +NtOpenObjectAuditAlarm( + IN PUNICODE_STRING SubsystemName, + IN PVOID HandleId, + IN PUNICODE_STRING ObjectTypeName, + IN PUNICODE_STRING ObjectName, + IN PSECURITY_DESCRIPTOR SecurityDescriptor, + IN HANDLE ClientToken, + IN ULONG DesiredAccess, + IN ULONG GrantedAccess, + IN PPRIVILEGE_SET Privileges, + IN BOOLEAN ObjectCreation, + IN BOOLEAN AccessGranted, + OUT PBOOLEAN GenerateOnClose + ); + +/* + * FUNCTION: Set the access protection of a range of virtual memory + * ARGUMENTS: + * ProcessHandle = Handle to process owning the virtual address space + * BaseAddress = Start address + * NumberOfBytesToProtect = Delimits the range of virtual memory + * for which the new access protection holds + * NewAccessProtection = The new access proctection for the pages + * OldAccessProtection = Caller should supply storage for the old + * access protection + * + * REMARKS: + * The function maps to the win32 VirtualProtectEx + * RETURNS: Status + */ +NTSTATUS +STDCALL +NtProtectVirtualMemory( + IN HANDLE ProcessHandle, + IN PVOID BaseAddress, + IN ULONG NumberOfBytesToProtect, + IN ULONG NewAccessProtection, + OUT PULONG OldAccessProtection + ); + +/* + * FUNCTION: Query information about the content of a directory object + * ARGUMENTS: + DirectoryHandle = + Buffer = Buffer must be large enough to hold the name strings too + ReturnSingleEntry = If TRUE :return the index of the next object in this directory in ObjectIndex + If FALSE: return the number of objects in this directory in ObjectIndex + RestartScan = If TRUE: ignore input value of ObjectIndex always start at index 0 + If FALSE use input value of ObjectIndex + Context = zero based index of object in the directory depends on GetNextIndex and IgnoreInputIndex + ReturnLength = Actual size of the ObjectIndex ??? + * RETURNS: Status + */ +NTSTATUS +STDCALL +NtQueryDirectoryObject( + IN HANDLE DirectoryHandle, + OUT PVOID Buffer, + IN ULONG BufferLength, + IN BOOLEAN ReturnSingleEntry, + IN BOOLEAN RestartScan, + IN OUT PULONG Context, + OUT PULONG ReturnLength OPTIONAL + ); + +/* + * FUNCTION: Query the interval and the clocksource for profiling + * ARGUMENTS: + Interval = + ClockSource = + * RETURNS: Status + */ +NTSTATUS +STDCALL +NtQueryIntervalProfile( + OUT PULONG Interval, + OUT KPROFILE_SOURCE ClockSource + ); + +/* + * FUNCTION: Queries the information of a section object. + * ARGUMENTS: + * SectionHandle = Handle to the section link object + * SectionInformationClass = Index to a certain information structure + * SectionInformation (OUT)= Caller supplies storage for resulting information + * Length = Size of the supplied storage + * ResultLength = Data written + * RETURNS: Status + * +*/ +NTSTATUS +STDCALL +NtQuerySection( + IN HANDLE SectionHandle, + IN CINT SectionInformationClass, + OUT PVOID SectionInformation, + IN ULONG Length, + OUT PULONG ResultLength + ); + +/* + * FUNCTION: Queries the virtual memory information. + * ARGUMENTS: + ProcessHandle = Process owning the virtual address space + BaseAddress = Points to the page where the information is queried for. + * VirtualMemoryInformationClass = Index to a certain information structure + + MemoryBasicInformation MEMORY_BASIC_INFORMATION + + * VirtualMemoryInformation = caller supplies storage for the information structure + * Length = size of the structure + ResultLength = Data written + * RETURNS: Status + * +*/ + +NTSTATUS +STDCALL +NtQueryVirtualMemory( + IN HANDLE ProcessHandle, + IN PVOID Address, + IN IN CINT VirtualMemoryInformationClass, + OUT PVOID VirtualMemoryInformation, + IN ULONG Length, + OUT PULONG ResultLength + ); + +/* + * FUNCTION: Raises a hard error (stops the system) + * ARGUMENTS: + * Status = Status code of the hard error + * Unknown2 = ?? + * Unknown3 = ?? + * Unknown4 = ?? + * Unknown5 = ?? + * Unknown6 = ?? + * RETURNS: Status + * + */ + +NTSTATUS +STDCALL +NtRaiseHardError( + IN NTSTATUS Status, + ULONG Unknown2, + ULONG Unknown3, + ULONG Unknown4, + ULONG Unknown5, + ULONG Unknown6 + ); + +/* + * FUNCTION: Sets the information of a registry key. + * ARGUMENTS: + * KeyHandle = Handle to the registry key + * KeyInformationClass = Index to the a certain information structure. + Can be one of the following values: + + * KeyWriteTimeInformation KEY_WRITE_TIME_INFORMATION + + KeyInformation = Storage for the new information + * KeyInformationLength = Size of the information strucure + * RETURNS: Status + */ + +NTSTATUS +STDCALL +NtSetInformationKey( + IN HANDLE KeyHandle, + IN CINT KeyInformationClass, + IN PVOID KeyInformation, + IN ULONG KeyInformationLength + ); + +/* + * FUNCTION: Changes a set of object specific parameters + * ARGUMENTS: + * ObjectHandle = + * ObjectInformationClass = Index to the set of parameters to change. + + + ObjectBasicInformation + ObjectTypeInformation OBJECT_TYPE_INFORMATION + ObjectAllInformation + ObjectDataInformation OBJECT_DATA_INFORMATION + ObjectNameInformation OBJECT_NAME_INFORMATION + + + * ObjectInformation = Caller supplies storage for parameters to set. + * Length = Size of the storage supplied + * RETURNS: Status +*/ +NTSTATUS +STDCALL +NtSetInformationObject( + IN HANDLE ObjectHandle, + IN CINT ObjectInformationClass, + IN PVOID ObjectInformation, + IN ULONG Length + ); + +/* + * FUNCTION: Sets the characteristics of a timer + * ARGUMENTS: + * TimerHandle = Handle to the timer + * DueTime = Time before the timer becomes signalled for the first time. + * TimerApcRoutine = Completion routine can be called on time completion + * TimerContext = Argument to the completion routine + * Resume = Specifies if the timer should repeated after completing one cycle + * Period = Cycle of the timer + * REMARKS: This routine maps to the win32 SetWaitableTimer. + * RETURNS: Status +*/ +NTSTATUS +STDCALL +NtSetTimer( + IN HANDLE TimerHandle, + IN PLARGE_INTEGER DueTime, + IN PTIMERAPCROUTINE TimerApcRoutine, + IN PVOID TimerContext, + IN BOOL WakeTimer, + IN ULONG Period OPTIONAL, + OUT PBOOLEAN PreviousState OPTIONAL + ); + +/* + * FUNCTION: Unloads a registry key. + * ARGUMENTS: + * KeyHandle = Handle to the registry key + * REMARK: + * This procedure maps to the win32 procedure RegUnloadKey + * RETURNS: Status + */ +NTSTATUS +STDCALL +NtUnloadKey( + IN POBJECT_ATTRIBUTES KeyObjectAttributes + ); + +/* + * FUNCTION: Unlocks a range of virtual memory. + * ARGUMENTS: + * ProcessHandle = Handle to the process + * BaseAddress = Lower boundary of the range of bytes to unlock. + * NumberOfBytesToUnlock = Offset to the upper boundary to unlock. + * NumberOfBytesUnlocked (OUT) = Number of bytes actually unlocked. + * REMARK: + This procedure maps to the win32 procedure VirtualUnlock + * RETURNS: Status [ STATUS_SUCCESS | STATUS_PAGE_WAS_ULOCKED ] + */ +NTSTATUS +STDCALL +NtUnlockVirtualMemory( + IN HANDLE ProcessHandle, + IN PVOID BaseAddress, + IN ULONG NumberOfBytesToUnlock, + OUT PULONG NumberOfBytesUnlocked OPTIONAL + ); + +/* + * FUNCTION: Waits for multiple objects to become signalled. + * ARGUMENTS: + * Count = The number of objects + * Object = The array of object handles + * WaitType = Can be one of the values UserMode or KernelMode + * Alertable = If true the wait is alertable. + * Time = The maximum wait time. + * REMARKS: + * This function maps to the win32 WaitForMultipleObjectEx. + * RETURNS: Status + */ +NTSTATUS +STDCALL +NtWaitForMultipleObjects ( + IN ULONG Count, + IN HANDLE Object[], + IN WAIT_TYPE WaitType, + IN BOOLEAN Alertable, + IN PLARGE_INTEGER Time + ); + + + + + +#ifndef __USE_W32API + +/* + * FUNCTION: Continues a thread with the specified context + * ARGUMENTS: + * Context = Specifies the processor context + * IrqLevel = Specifies the Interupt Request Level to continue with. Can + * be PASSIVE_LEVEL or APC_LEVEL + * REMARKS + * NtContinue can be used to continue after an exception or apc. + * RETURNS: Status + */ +//FIXME This function might need another parameter + +NTSTATUS STDCALL ZwContinue(IN PCONTEXT Context, IN CINT IrqLevel); + +/* + * FUNCTION: Retrieves the system time + * ARGUMENTS: + * CurrentTime (OUT) = Caller should supply storage for the resulting time. + * RETURNS: Status + * +*/ + +NTSTATUS +STDCALL +ZwQuerySystemTime ( + OUT PLARGE_INTEGER CurrentTime + ); + +/* + * FUNCTION: Copies a handle from one process space to another + * ARGUMENTS: + * SourceProcessHandle = The source process owning the handle. The source process should have opened + * the SourceHandle with PROCESS_DUP_HANDLE access. + * SourceHandle = The handle to the object. + * TargetProcessHandle = The destination process owning the handle + * TargetHandle (OUT) = Caller should supply storage for the duplicated handle. + * DesiredAccess = The desired access to the handle. + * InheritHandle = Indicates wheter the new handle will be inheritable or not. + * Options = Specifies special actions upon duplicating the handle. Can be + * one of the values DUPLICATE_CLOSE_SOURCE | DUPLICATE_SAME_ACCESS. + * DUPLICATE_CLOSE_SOURCE specifies that the source handle should be + * closed after duplicating. DUPLICATE_SAME_ACCESS specifies to ignore + * the DesiredAccess paramter and just grant the same access to the new + * handle. + * RETURNS: Status + * REMARKS: This function maps to the win32 DuplicateHandle. + */ + +NTSTATUS +STDCALL +NtDuplicateObject( + IN HANDLE SourceProcessHandle, + IN HANDLE SourceHandle, + IN HANDLE TargetProcessHandle, + OUT PHANDLE TargetHandle, + IN ACCESS_MASK DesiredAccess, + IN BOOLEAN InheritHandle, + IN ULONG Options + ); + +NTSTATUS +STDCALL +ZwDuplicateObject( + IN HANDLE SourceProcessHandle, + IN PHANDLE SourceHandle, + IN HANDLE TargetProcessHandle, + OUT PHANDLE TargetHandle, + IN ACCESS_MASK DesiredAccess, + IN BOOLEAN InheritHandle, + IN ULONG Options + ); + +/* + * FUNCTION: Checks a clients access rights to a object and issues a audit a alarm. ( it logs the access ) + * ARGUMENTS: + * SubsystemName = Specifies the name of the subsystem, can be "WIN32" or "DEBUG" + * ObjectHandle = + * ObjectTypeName = + * ObjectName = + * SecurityDescriptor = + * DesiredAcces = + * GenericMapping = + * ObjectCreation = + * GrantedAccess = + * AccessStatus = + * GenerateOnClose = + * REMARKS: The arguments map to the win32 AccessCheck + * RETURNS: Status + */ + +NTSTATUS +STDCALL +ZwAccessCheckAndAuditAlarm( + IN PUNICODE_STRING SubsystemName, + IN PHANDLE ObjectHandle, + 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 PNTSTATUS AccessStatus, + OUT PBOOLEAN GenerateOnClose + ); + +/* + * FUNCTION: Adds an atom to the global atom table + * ARGUMENTS: + * AtomString = The string to add to the atom table. + * Atom (OUT) = Caller supplies storage for the resulting atom. + * REMARKS: The arguments map to the win32 add GlobalAddAtom. + * RETURNS: Status + */ +NTSTATUS +STDCALL +NtAddAtom( + IN PWSTR AtomName, + IN OUT PRTL_ATOM Atom + ); + + +NTSTATUS +STDCALL +ZwAddAtom( + IN PWSTR AtomName, + IN OUT PRTL_ATOM Atom + ); + +NTSTATUS +STDCALL +NtAllocateUuids( + PULARGE_INTEGER Time, + PULONG Range, + PULONG Sequence + ); + +NTSTATUS +STDCALL +ZwAllocateUuids( + PULARGE_INTEGER Time, + PULONG Range, + PULONG Sequence + ); + +NTSTATUS +STDCALL +ZwCancelTimer( + IN HANDLE TimerHandle, + OUT ULONG ElapsedTime + ); + +/* + * FUNCTION: Creates a paging file. + * ARGUMENTS: + * FileName = Name of the pagefile + * InitialSize = Specifies the initial size in bytes + * MaximumSize = Specifies the maximum size in bytes + * Reserved = Reserved for future use + * RETURNS: Status + */ +NTSTATUS +STDCALL +ZwCreatePagingFile( + IN PUNICODE_STRING FileName, + IN PLARGE_INTEGER InitialSize, + IN PLARGE_INTEGER MaxiumSize, + IN ULONG Reserved + ); + +/* + * FUNCTION: Creates a user mode thread + * ARGUMENTS: + * ThreadHandle (OUT) = Caller supplied storage for the resulting handle + * DesiredAccess = Specifies the allowed or desired access to the thread. + * ObjectAttributes = Initialized attributes for the object. + * ProcessHandle = Handle to the threads parent process. + * ClientId (OUT) = Caller supplies storage for returned process id and thread id. + * ThreadContext = Initial processor context for the thread. + * InitialTeb = Initial user mode stack context for the thread. + * CreateSuspended = Specifies if the thread is ready for scheduling + * REMARKS: + * This function maps to the win32 function CreateThread. + * RETURNS: Status + */ +NTSTATUS +STDCALL +ZwCreateThread( + OUT PHANDLE ThreadHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, + IN HANDLE ProcessHandle, + OUT PCLIENT_ID ClientId, + IN PCONTEXT ThreadContext, + IN PUSER_STACK UserStack, + IN BOOLEAN CreateSuspended + ); + +NTSTATUS +STDCALL +NtDuplicateToken( + IN HANDLE ExistingToken, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes, + IN SECURITY_IMPERSONATION_LEVEL ImpersonationLevel, + IN TOKEN_TYPE TokenType, + OUT PHANDLE NewToken + ); + +NTSTATUS +STDCALL +ZwDuplicateToken( IN HANDLE ExistingToken, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, @@ -4588,14 +5110,6 @@ ZwFindAtom( */ NTSTATUS STDCALL -NtFlushInstructionCache( - IN HANDLE ProcessHandle, - IN PVOID BaseAddress, - IN UINT NumberOfBytesToFlush - ); - -NTSTATUS -STDCALL ZwFlushInstructionCache( IN HANDLE ProcessHandle, IN PVOID BaseAddress, @@ -4615,15 +5129,6 @@ ZwFlushInstructionCache( */ NTSTATUS STDCALL -NtFlushVirtualMemory( - IN HANDLE ProcessHandle, - IN PVOID BaseAddress, - IN ULONG NumberOfBytesToFlush, - OUT PULONG NumberOfBytesFlushed OPTIONAL - ); - -NTSTATUS -STDCALL ZwFlushVirtualMemory( IN HANDLE ProcessHandle, IN PVOID BaseAddress, @@ -4639,12 +5144,6 @@ ZwFlushVirtualMemory( */ NTSTATUS STDCALL -NtGetTickCount( - PULONG UpTime - ); - -NTSTATUS -STDCALL ZwGetTickCount( PULONG UpTime ); @@ -4660,41 +5159,9 @@ ZwGetTickCount( */ NTSTATUS STDCALL -NtLoadKey( - IN POBJECT_ATTRIBUTES KeyObjectAttributes, - IN POBJECT_ATTRIBUTES FileObjectAttributes - ); - -NTSTATUS -STDCALL ZwLoadKey( IN POBJECT_ATTRIBUTES KeyObjectAttributes, - IN POBJECT_ATTRIBUTES FileObjectAttributes - ); - -/* - * FUNCTION: Loads a registry key. - * ARGUMENTS: - * KeyObjectAttributes = Key to be loaded - * FileObjectAttributes = File to load the key from - * Flags = ??? - * REMARK: - * This procedure maps to the win32 procedure RegLoadKey - * RETURNS: Status - */ -NTSTATUS -STDCALL -NtLoadKey2( - IN POBJECT_ATTRIBUTES KeyObjectAttributes, - IN POBJECT_ATTRIBUTES FileObjectAttributes, - IN ULONG Flags - ); -NTSTATUS -STDCALL -ZwLoadKey2( - IN POBJECT_ATTRIBUTES KeyObjectAttributes, - IN POBJECT_ATTRIBUTES FileObjectAttributes, - IN ULONG Flags + IN POBJECT_ATTRIBUTES FileObjectAttributes ); /* @@ -4710,15 +5177,6 @@ ZwLoadKey2( */ NTSTATUS STDCALL -NtLockVirtualMemory( - HANDLE ProcessHandle, - PVOID BaseAddress, - ULONG NumberOfBytesToLock, - PULONG NumberOfBytesLocked - ); - -NTSTATUS -STDCALL ZwLockVirtualMemory( HANDLE ProcessHandle, PVOID BaseAddress, @@ -4728,32 +5186,19 @@ ZwLockVirtualMemory( NTSTATUS STDCALL -NtOpenObjectAuditAlarm( - IN PUNICODE_STRING SubsystemName, - IN PVOID HandleId, - IN POBJECT_ATTRIBUTES ObjectAttributes, - IN HANDLE ClientToken, - IN ULONG DesiredAccess, - IN ULONG GrantedAccess, - IN PPRIVILEGE_SET Privileges, - IN BOOLEAN ObjectCreation, - IN BOOLEAN AccessGranted, - OUT PBOOLEAN GenerateOnClose - ); - -NTSTATUS -STDCALL ZwOpenObjectAuditAlarm( - IN PUNICODE_STRING SubsystemName, - IN PVOID HandleId, - IN POBJECT_ATTRIBUTES ObjectAttributes, - IN HANDLE ClientToken, - IN ULONG DesiredAccess, - IN ULONG GrantedAccess, + IN PUNICODE_STRING SubsystemName, + IN PVOID HandleId, + IN PUNICODE_STRING ObjectTypeName, + IN PUNICODE_STRING ObjectName, + IN PSECURITY_DESCRIPTOR SecurityDescriptor, + IN HANDLE ClientToken, + IN ULONG DesiredAccess, + IN ULONG GrantedAccess, IN PPRIVILEGE_SET Privileges, - IN BOOLEAN ObjectCreation, - IN BOOLEAN AccessGranted, - OUT PBOOLEAN GenerateOnClose + IN BOOLEAN ObjectCreation, + IN BOOLEAN AccessGranted, + OUT PBOOLEAN GenerateOnClose ); /* @@ -4773,16 +5218,6 @@ ZwOpenObjectAuditAlarm( */ NTSTATUS STDCALL -NtProtectVirtualMemory( - IN HANDLE ProcessHandle, - IN PVOID BaseAddress, - IN ULONG NumberOfBytesToProtect, - IN ULONG NewAccessProtection, - OUT PULONG OldAccessProtection - ); - -NTSTATUS -STDCALL ZwProtectVirtualMemory( IN HANDLE ProcessHandle, IN PVOID BaseAddress, @@ -4814,37 +5249,26 @@ ZwQueryInformationAtom( /* * FUNCTION: Query information about the content of a directory object * ARGUMENTS: - DirObjInformation = Buffer must be large enough to hold the name strings too - GetNextIndex = If TRUE :return the index of the next object in this directory in ObjectIndex - If FALSE: return the number of objects in this directory in ObjectIndex - IgnoreInputIndex= If TRUE: ignore input value of ObjectIndex always start at index 0 - If FALSE use input value of ObjectIndex - ObjectIndex = zero based index of object in the directory depends on GetNextIndex and IgnoreInputIndex - DataWritten = Actual size of the ObjectIndex ??? + DirectoryHandle = + Buffer = Buffer must be large enough to hold the name strings too + ReturnSingleEntry = If TRUE :return the index of the next object in this directory in ObjectIndex + If FALSE: return the number of objects in this directory in ObjectIndex + RestartScan = If TRUE: ignore input value of ObjectIndex always start at index 0 + If FALSE use input value of ObjectIndex + Context = zero based index of object in the directory depends on GetNextIndex and IgnoreInputIndex + ReturnLength = Actual size of the ObjectIndex ??? * RETURNS: Status */ NTSTATUS STDCALL -NtQueryDirectoryObject( - IN HANDLE DirObjHandle, - OUT POBJDIR_INFORMATION DirObjInformation, - IN ULONG BufferLength, - IN BOOLEAN GetNextIndex, - IN BOOLEAN IgnoreInputIndex, - IN OUT PULONG ObjectIndex, - OUT PULONG DataWritten OPTIONAL - ); - -NTSTATUS -STDCALL ZwQueryDirectoryObject( - IN HANDLE DirObjHandle, - OUT POBJDIR_INFORMATION DirObjInformation, - IN ULONG BufferLength, - IN BOOLEAN GetNextIndex, - IN BOOLEAN IgnoreInputIndex, - IN OUT PULONG ObjectIndex, - OUT PULONG DataWritten OPTIONAL + IN HANDLE DirectoryHandle, + OUT PVOID Buffer, + IN ULONG BufferLength, + IN BOOLEAN ReturnSingleEntry, + IN BOOLEAN RestartScan, + IN OUT PULONG Context, + OUT PULONG ReturnLength OPTIONAL ); /* @@ -4918,13 +5342,6 @@ ZwQueryInformationProcess( */ NTSTATUS STDCALL -NtQueryIntervalProfile( - OUT PULONG Interval, - OUT KPROFILE_SOURCE ClockSource - ); - -NTSTATUS -STDCALL ZwQueryIntervalProfile( OUT PULONG Interval, OUT KPROFILE_SOURCE ClockSource @@ -4948,16 +5365,6 @@ ZwQueryIntervalProfile( NTSTATUS STDCALL -NtQueryObject( - IN HANDLE ObjectHandle, - IN CINT ObjectInformationClass, - OUT PVOID ObjectInformation, - IN ULONG Length, - OUT PULONG ResultLength - ); - -NTSTATUS -STDCALL ZwQueryObject( IN HANDLE ObjectHandle, IN CINT ObjectInformationClass, @@ -5004,17 +5411,6 @@ ZwQuerySecurityObject( NTSTATUS STDCALL -NtQueryVirtualMemory( - IN HANDLE ProcessHandle, - IN PVOID Address, - IN IN CINT VirtualMemoryInformationClass, - OUT PVOID VirtualMemoryInformation, - IN ULONG Length, - OUT PULONG ResultLength - ); - -NTSTATUS -STDCALL ZwQueryVirtualMemory( IN HANDLE ProcessHandle, IN PVOID Address, @@ -5036,18 +5432,6 @@ ZwQueryVirtualMemory( * RETURNS: Status * */ - -NTSTATUS -STDCALL -NtRaiseHardError( - IN NTSTATUS Status, - ULONG Unknown2, - ULONG Unknown3, - ULONG Unknown4, - ULONG Unknown5, - ULONG Unknown6 - ); - NTSTATUS STDCALL ZwRaiseHardError( @@ -5075,15 +5459,6 @@ ZwRaiseHardError( NTSTATUS STDCALL -NtSetInformationKey( - IN HANDLE KeyHandle, - IN CINT KeyInformationClass, - IN PVOID KeyInformation, - IN ULONG KeyInformationLength - ); - -NTSTATUS -STDCALL ZwSetInformationKey( IN HANDLE KeyHandle, IN CINT KeyInformationClass, @@ -5111,15 +5486,6 @@ ZwSetInformationKey( */ NTSTATUS STDCALL -NtSetInformationObject( - IN HANDLE ObjectHandle, - IN CINT ObjectInformationClass, - IN PVOID ObjectInformation, - IN ULONG Length - ); - -NTSTATUS -STDCALL ZwSetInformationObject( IN HANDLE ObjectHandle, IN CINT ObjectInformationClass, @@ -5180,18 +5546,6 @@ ZwSetInformationProcess( */ NTSTATUS STDCALL -NtSetTimer( - IN HANDLE TimerHandle, - IN PLARGE_INTEGER DueTime, - IN PTIMERAPCROUTINE TimerApcRoutine, - IN PVOID TimerContext, - IN BOOL WakeTimer, - IN ULONG Period OPTIONAL, - OUT PBOOLEAN PreviousState OPTIONAL - ); - -NTSTATUS -STDCALL ZwSetTimer( IN HANDLE TimerHandle, IN PLARGE_INTEGER DueTime, @@ -5212,12 +5566,6 @@ ZwSetTimer( */ NTSTATUS STDCALL -NtUnloadKey( - IN POBJECT_ATTRIBUTES KeyObjectAttributes - ); - -NTSTATUS -STDCALL ZwUnloadKey( IN POBJECT_ATTRIBUTES KeyObjectAttributes ); @@ -5232,16 +5580,7 @@ ZwUnloadKey( * REMARK: This procedure maps to the win32 procedure VirtualUnlock * RETURNS: Status [ STATUS_SUCCESS | STATUS_PAGE_WAS_ULOCKED ] - */ -NTSTATUS -STDCALL -NtUnlockVirtualMemory( - IN HANDLE ProcessHandle, - IN PVOID BaseAddress, - IN ULONG NumberOfBytesToUnlock, - OUT PULONG NumberOfBytesUnlocked OPTIONAL - ); - + */ NTSTATUS STDCALL ZwUnlockVirtualMemory( @@ -5265,16 +5604,6 @@ ZwUnlockVirtualMemory( */ NTSTATUS STDCALL -NtWaitForMultipleObjects ( - IN ULONG Count, - IN HANDLE Object[], - IN WAIT_TYPE WaitType, - IN BOOLEAN Alertable, - IN PLARGE_INTEGER Time - ); - -NTSTATUS -STDCALL ZwWaitForMultipleObjects ( IN ULONG Count, IN HANDLE Object[], @@ -5303,18 +5632,6 @@ ZwWaitForMultipleObjects ( NTSTATUS STDCALL -NtCreateProfile(OUT PHANDLE ProfileHandle, - IN HANDLE ProcessHandle, - IN PVOID ImageBase, - IN ULONG ImageSize, - IN ULONG Granularity, - OUT PULONG Buffer, - IN ULONG ProfilingSize, - IN KPROFILE_SOURCE Source, - IN ULONG ProcessorMask); - -NTSTATUS -STDCALL ZwCreateProfile( OUT PHANDLE ProfileHandle, IN POBJECT_ATTRIBUTES ObjectAttributes, @@ -5334,14 +5651,6 @@ ZwCreateProfile( * Interval = Specifies the interval to wait. * RETURNS: Status */ - -NTSTATUS -STDCALL -NtDelayExecution( - IN ULONG Alertable, - IN TIME *Interval - ); - NTSTATUS STDCALL ZwDelayExecution( @@ -5358,13 +5667,6 @@ ZwDelayExecution( */ NTSTATUS STDCALL -NtExtendSection( - IN HANDLE SectionHandle, - IN ULONG NewMaximumSize - ); - -NTSTATUS -STDCALL ZwExtendSection( IN HANDLE SectionHandle, IN ULONG NewMaximumSize @@ -5383,16 +5685,6 @@ ZwExtendSection( */ NTSTATUS STDCALL -NtQuerySection( - IN HANDLE SectionHandle, - IN CINT SectionInformationClass, - OUT PVOID SectionInformation, - IN ULONG Length, - OUT PULONG ResultLength - ); - -NTSTATUS -STDCALL ZwQuerySection( IN HANDLE SectionHandle, IN CINT SectionInformationClass, @@ -5420,4 +5712,164 @@ typedef struct _SECTION_IMAGE_INFORMATION #endif /* !__USE_W32API */ +/* + * FUNCTION: Loads a registry key. + * ARGUMENTS: + * KeyObjectAttributes = Key to be loaded + * FileObjectAttributes = File to load the key from + * Flags = ??? + * REMARK: + * This procedure maps to the win32 procedure RegLoadKey + * RETURNS: Status + */ +NTSTATUS +STDCALL +NtLoadKey2( + IN POBJECT_ATTRIBUTES KeyObjectAttributes, + IN POBJECT_ATTRIBUTES FileObjectAttributes, + IN ULONG Flags + ); + +NTSTATUS +STDCALL +ZwLoadKey2( + IN POBJECT_ATTRIBUTES KeyObjectAttributes, + IN POBJECT_ATTRIBUTES FileObjectAttributes, + IN ULONG Flags + ); + +/* + * FUNCTION: Retrieves the system time + * ARGUMENTS: + * CurrentTime (OUT) = Caller should supply storage for the resulting time. + * RETURNS: Status + * +*/ + +NTSTATUS +STDCALL +NtQuerySystemTime ( + OUT PLARGE_INTEGER CurrentTime + ); + +/* + * FUNCTION: Queries the information of a object. + * ARGUMENTS: + ObjectHandle = Handle to a object + ObjectInformationClass = Index to a certain information structure + + ObjectBasicInformation + ObjectTypeInformation OBJECT_TYPE_INFORMATION + ObjectNameInformation OBJECT_NAME_INFORMATION + ObjectDataInformation OBJECT_DATA_INFORMATION + + ObjectInformation = Caller supplies storage for resulting information + Length = Size of the supplied storage + ResultLength = Bytes written + */ + +NTSTATUS +STDCALL +NtQueryObject( + IN HANDLE ObjectHandle, + IN CINT ObjectInformationClass, + OUT PVOID ObjectInformation, + IN ULONG Length, + OUT PULONG ResultLength + ); + +/* BEGIN REACTOS ONLY */ + +BOOLEAN STDCALL +ExInitializeBinaryTree(IN PBINARY_TREE Tree, + IN PKEY_COMPARATOR Compare, + IN BOOLEAN UseNonPagedPool); + +VOID STDCALL +ExDeleteBinaryTree(IN PBINARY_TREE Tree); + +VOID STDCALL +ExInsertBinaryTree(IN PBINARY_TREE Tree, + IN PVOID Key, + IN PVOID Value); + +BOOLEAN STDCALL +ExSearchBinaryTree(IN PBINARY_TREE Tree, + IN PVOID Key, + OUT PVOID * Value); + +BOOLEAN STDCALL +ExRemoveBinaryTree(IN PBINARY_TREE Tree, + IN PVOID Key, + IN PVOID * Value); + +BOOLEAN STDCALL +ExTraverseBinaryTree(IN PBINARY_TREE Tree, + IN TRAVERSE_METHOD Method, + IN PTRAVERSE_ROUTINE Routine, + IN PVOID Context); + +BOOLEAN STDCALL +ExInitializeSplayTree(IN PSPLAY_TREE Tree, + IN PKEY_COMPARATOR Compare, + IN BOOLEAN Weighted, + IN BOOLEAN UseNonPagedPool); + +VOID STDCALL +ExDeleteSplayTree(IN PSPLAY_TREE Tree); + +VOID STDCALL +ExInsertSplayTree(IN PSPLAY_TREE Tree, + IN PVOID Key, + IN PVOID Value); + +BOOLEAN STDCALL +ExSearchSplayTree(IN PSPLAY_TREE Tree, + IN PVOID Key, + OUT PVOID * Value); + +BOOLEAN STDCALL +ExRemoveSplayTree(IN PSPLAY_TREE Tree, + IN PVOID Key, + IN PVOID * Value); + +BOOLEAN STDCALL +ExWeightOfSplayTree(IN PSPLAY_TREE Tree, + OUT PULONG Weight); + +BOOLEAN STDCALL +ExTraverseSplayTree(IN PSPLAY_TREE Tree, + IN TRAVERSE_METHOD Method, + IN PTRAVERSE_ROUTINE Routine, + IN PVOID Context); + +BOOLEAN STDCALL +ExInitializeHashTable(IN PHASH_TABLE HashTable, + IN ULONG HashTableSize, + IN PKEY_COMPARATOR Compare OPTIONAL, + IN BOOLEAN UseNonPagedPool); + +VOID STDCALL +ExDeleteHashTable(IN PHASH_TABLE HashTable); + +VOID STDCALL +ExInsertHashTable(IN PHASH_TABLE HashTable, + IN PVOID Key, + IN ULONG KeyLength, + IN PVOID Value); + +BOOLEAN STDCALL +ExSearchHashTable(IN PHASH_TABLE HashTable, + IN PVOID Key, + IN ULONG KeyLength, + OUT PVOID * Value); + +BOOLEAN STDCALL +ExRemoveHashTable(IN PHASH_TABLE HashTable, + IN PVOID Key, + IN ULONG KeyLength, + IN PVOID * Value); + +/* END REACTOS ONLY */ + #endif /* __DDK_ZW_H */ diff --git a/include/ntos/zwtypes.h b/include/ntos/zwtypes.h index 9bd7d74..2b0e877 100755 --- a/include/ntos/zwtypes.h +++ b/include/ntos/zwtypes.h @@ -1,13 +1,49 @@ -#ifndef __INCLUDE_DDK_ZWTYPES_H -#define __INCLUDE_DDK_ZWTYPES_H +#ifndef __INCLUDE_NTOS_ZWTYPES_H +#define __INCLUDE_NTOS_ZWTYPES_H #ifndef __USE_W32API +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 enum _THREAD_STATE { + StateInitialized, + StateReady, + StateRunning, + StateStandby, + StateTerminated, + StateWait, + StateTransition, + StateUnknown +} THREAD_STATE; + typedef enum _DEBUG_CONTROL_CODE { DebugGetTraceInformation = 1, DebugSetInternalBreakpoint, - DebugSetSpecialCalls, + DebugSetSpecialCall, DebugClearSpecialCalls, DebugQuerySpecialCalls, DebugDbgBreakPoint, @@ -191,146 +227,132 @@ enum _SYSTEM_INFORMATION_CLASS } SYSTEM_INFORMATION_CLASS; // SystemBasicInformation (0) +// Modified by Andrew Greenwood (15th July 2003) to match Win 32 API headers typedef struct _SYSTEM_BASIC_INFORMATION { - ULONG Reserved; - ULONG TimerResolution; - ULONG PageSize; + ULONG Unknown; + ULONG MaximumIncrement; + ULONG PhysicalPageSize; ULONG NumberOfPhysicalPages; - ULONG LowestPhysicalPageNumber; - ULONG HighestPhysicalPageNumber; + ULONG LowestPhysicalPage; + ULONG HighestPhysicalPage; ULONG AllocationGranularity; - ULONG MinimumUserModeAddress; - ULONG MaximumUserModeAddress; - KAFFINITY ActiveProcessorsAffinityMask; - CCHAR NumberOfProcessors; + ULONG LowestUserAddress; + ULONG HighestUserAddress; + KAFFINITY ActiveProcessors; + CCHAR NumberProcessors; } SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION; // SystemProcessorInformation (1) -typedef -struct _SYSTEM_PROCESSOR_INFORMATION -{ - USHORT ProcessorArchitecture; - USHORT ProcessorLevel; - USHORT ProcessorRevision; - USHORT Reserved; - ULONG ProcessorFeatureBits; +// Modified by Andrew Greenwood (15th July 2003) to match Win 32 API headers +typedef struct _SYSTEM_PROCESSOR_INFORMATION { + USHORT ProcessorArchitecture; + USHORT ProcessorLevel; + USHORT ProcessorRevision; + USHORT Unknown; + ULONG FeatureBits; } SYSTEM_PROCESSOR_INFORMATION, *PSYSTEM_PROCESSOR_INFORMATION; // SystemPerformanceInfo (2) -typedef -struct _SYSTEM_PERFORMANCE_INFORMATION -{ - LARGE_INTEGER IdleProcessorTime; - LARGE_INTEGER IoReadTransferCount; - LARGE_INTEGER IoWriteTransferCount; - LARGE_INTEGER IoOtherTransferCount; - ULONG IoReadOperationCount; - ULONG IoWriteOperationCount; - ULONG IoOtherOperationCount; - ULONG AvailablePages; - ULONG CommitedPages; - ULONG CommitLimit; - ULONG PeakCommitment; - ULONG PageFaultCount; - ULONG CopyOnWriteCount; - ULONG TransitionCount; - ULONG CacheTransitionCount; - ULONG DemandZeroCount; - ULONG PageReadCount; - ULONG PageReadIoCount; - ULONG CacheReadCount; - ULONG CacheIoCount; - ULONG DirtyPagesWriteCount; - ULONG DirtyWriteIoCount; - ULONG MappedPagesWriteCount; - ULONG MappedWriteIoCount; - ULONG PagedPoolPages; - ULONG NonPagedPoolPages; - ULONG Unknown6; - ULONG Unknown7; - ULONG Unknown8; - ULONG Unknown9; - ULONG MmTotalSystemFreePtes; - ULONG MmSystemCodepage; - ULONG MmTotalSystemDriverPages; - ULONG MmTotalSystemCodePages; - ULONG Unknown10; - ULONG Unknown11; - ULONG Unknown12; - ULONG MmSystemCachePage; - ULONG MmPagedPoolPage; - ULONG MmSystemDriverPage; - ULONG CcFastReadNoWait; - ULONG CcFastReadWait; - ULONG CcFastReadResourceMiss; - ULONG CcFastReadNotPossible; - ULONG CcFastMdlReadNoWait; - ULONG CcFastMdlReadWait; - ULONG CcFastMdlReadResourceMiss; - ULONG CcFastMdlReadNotPossible; - ULONG CcMapDataNoWait; - ULONG CcMapDataWait; - ULONG CcMapDataNoWaitMiss; - ULONG CcMapDataWaitMiss; - ULONG CcPinMappedDataCount; - ULONG CcPinReadNoWait; - ULONG CcPinReadWait; - ULONG CcPinReadNoWaitMiss; - ULONG CcPinReadWaitMiss; - ULONG CcCopyReadNoWait; - ULONG CcCopyReadWait; - ULONG CcCopyReadNoWaitMiss; - ULONG CcCopyReadWaitMiss; - ULONG CcMdlReadNoWait; - ULONG CcMdlReadWait; - ULONG CcMdlReadNoWaitMiss; - ULONG CcMdlReadWaitMiss; - ULONG CcReadaheadIos; - ULONG CcLazyWriteIos; - ULONG CcLazyWritePages; - ULONG CcDataFlushes; - ULONG CcDataPages; - ULONG ContextSwitches; - ULONG Unknown13; - ULONG Unknown14; - ULONG SystemCalls; - -} SYSTEM_PERFORMANCE_INFO, *PSYSTEM_PERFORMANCE_INFO; +// Modified by Andrew Greenwood (15th July 2003) to match Win 32 API headers +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; // SystemModuleInformation (11) -typedef -struct _SYSTEM_MODULE_INFORMATION -{ - ULONG Reserved[2]; - PVOID Base; - SIZE_T Size; - ULONG Flags; - USHORT Index; - USHORT Unknown; - USHORT LoadCount; - USHORT ModuleNameOffset; - CHAR ImageName[256]; -#if 0 - ULONG Unknown1; - ULONG Unknown2; - PVOID BaseAddress; - ULONG Size; - ULONG Flags; - ULONG EntryIndex; - USHORT NameLength; /* Length of module name not including the path, this field contains valid value only for NTOSKRNL module*/ - USHORT PathLength; /* Length of 'directory path' part of modulename*/ - CHAR Name [256]; -#endif -} SYSTEM_MODULE_INFORMATION, * PSYSTEM_MODULE_INFORMATION; - -typedef -struct _SYSTEM_MODULES -{ - SIZE_T Count; - SYSTEM_MODULE_INFORMATION Modules[ANYSIZE_ARRAY]; -} SYSTEM_MODULES, *PSYSTEM_MODULES; +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; // SystemHandleInformation (16) // (see ontypes.h) @@ -458,7 +480,7 @@ struct _SYSTEM_SET_TIME_ADJUSTMENT ULONG TimeAdjustment; BOOLEAN TimeSynchronization; -} SYSTEM_TIME_ADJUSTMENT_INFO, *PSYSTEM_TIME_ADJUSTMENT_INFO; +} SYSTEM_SET_TIME_ADJUSTMENT, *PSYSTEM_SET_TIME_ADJUSTMENT; // atom information @@ -721,12 +743,6 @@ typedef struct _THREAD_BASIC_INFORMATION KPRIORITY BasePriority; } THREAD_BASIC_INFORMATION, *PTHREAD_BASIC_INFORMATION; -// object information - -typedef struct _OBJECT_NAME_INFORMATION -{ - UNICODE_STRING Name; -} OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION; // file information @@ -1090,7 +1106,7 @@ typedef enum _IO_COMPLETION_INFORMATION_CLASS { } IO_COMPLETION_INFORMATION_CLASS; typedef struct _IO_COMPLETION_BASIC_INFORMATION { - LONG SignalState; + LONG Depth; } IO_COMPLETION_BASIC_INFORMATION, *PIO_COMPLETION_BASIC_INFORMATION; #else /* __USE_W32API */ @@ -1225,21 +1241,24 @@ struct _SYSTEM_PATH_INFORMATION // SystemProcessInformation (5) -typedef struct _SYSTEM_THREADS -{ - TIME KernelTime; - TIME UserTime; - TIME CreateTime; - ULONG WaitTime; - PVOID StartAddress; - CLIENT_ID ClientId; - KPRIORITY Priority; - KPRIORITY BasePriority; - ULONG ContextSwitchCount; - ULONG State; - KWAIT_REASON WaitReason; +#ifndef __USE_W32API + +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; +#endif /* __USE_W32API */ + typedef struct _SYSTEM_PROCESSES_NT4 { SIZE_T NextEntryDelta; @@ -1277,9 +1296,13 @@ typedef struct _SYSTEM_PROCESSES_NT5 SYSTEM_THREADS Threads[ANYSIZE_ARRAY]; } SYSTEM_PROCESSES_NT5, *PSYSTEM_PROCESSES_NT5; +#ifndef __USE_W32API + /* Not sure. What version are we emulating? */ typedef SYSTEM_PROCESSES_NT5 SYSTEM_PROCESSES, *PSYSTEM_PROCESSES; +#endif /* __USE_W32API */ + // SystemCallCountInformation (6) typedef struct _SYSTEM_SDT_INFORMATION @@ -1538,11 +1561,6 @@ struct _SYSTEM_QUOTA_INFORMATION #define THREAD_WAIT_OBJECTS 3 //#define MAXIMUM_WAIT_OBJECTS 64 -// key restore flags - -#define REG_WHOLE_HIVE_VOLATILE 1 -#define REG_REFRESH_HIVE 2 - // object type access rights #define OBJECT_TYPE_CREATE 0x0001 @@ -1581,11 +1599,11 @@ typedef struct _OBJECT_TYPE_INFORMATION // directory information -typedef struct _OBJDIR_INFORMATION { +typedef struct _DIRECTORY_BASIC_INFORMATION +{ UNICODE_STRING ObjectName; UNICODE_STRING ObjectTypeName; // Directory, Device ... - UCHAR Data[0]; -} OBJDIR_INFORMATION, *POBJDIR_INFORMATION; +} DIRECTORY_BASIC_INFORMATION, *PDIRECTORY_BASIC_INFORMATION; /* @@ -1652,4 +1670,105 @@ struct _LPC_PORT_BASIC_INFORMATION } LPC_PORT_BASIC_INFORMATION, * PLPC_PORT_BASIC_INFORMATION; +typedef struct _KINTERRUPT +{ + ULONG Vector; + KAFFINITY ProcessorEnableMask; + PKSPIN_LOCK IrqLock; + BOOLEAN Shareable; + BOOLEAN FloatingSave; + PKSERVICE_ROUTINE ServiceRoutine; + PVOID ServiceContext; + LIST_ENTRY Entry; + KIRQL SynchLevel; +} KINTERRUPT; + +#ifndef __USE_W32API + +typedef struct _KINTERRUPT *PKINTERRUPT; + +#endif /* __USE_W32API */ + +NTSTATUS STDCALL +ObRosCreateObject(OUT PHANDLE Handle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes, + IN POBJECT_TYPE Type, + OUT PVOID *Object); + +/* BEGIN REACTOS ONLY */ + +typedef enum _TRAVERSE_METHOD { + TraverseMethodPreorder, + TraverseMethodInorder, + TraverseMethodPostorder +} TRAVERSE_METHOD; + +typedef LONG STDCALL_FUNC +(*PKEY_COMPARATOR)(IN PVOID Key1, + IN PVOID Key2); + +typedef BOOLEAN STDCALL_FUNC +(*PTRAVERSE_ROUTINE)(IN PVOID Context, + IN PVOID Key, + IN PVOID Value); + +struct _BINARY_TREE_NODE; + +typedef struct _BINARY_TREE +{ + struct _BINARY_TREE_NODE * RootNode; + PKEY_COMPARATOR Compare; + BOOLEAN UseNonPagedPool; + union { + NPAGED_LOOKASIDE_LIST NonPaged; + PAGED_LOOKASIDE_LIST Paged; + } List; + union { + KSPIN_LOCK NonPaged; + FAST_MUTEX Paged; + } Lock; +} BINARY_TREE, *PBINARY_TREE; + + +struct _SPLAY_TREE_NODE; + +typedef struct _SPLAY_TREE +{ + struct _SPLAY_TREE_NODE * RootNode; + PKEY_COMPARATOR Compare; + BOOLEAN Weighted; + BOOLEAN UseNonPagedPool; + union { + NPAGED_LOOKASIDE_LIST NonPaged; + PAGED_LOOKASIDE_LIST Paged; + } List; + union { + KSPIN_LOCK NonPaged; + FAST_MUTEX Paged; + } Lock; + PVOID Reserved[4]; +} SPLAY_TREE, *PSPLAY_TREE; + + +typedef struct _HASH_TABLE +{ + // Size of hash table in number of bits + ULONG HashTableSize; + + // Use non-paged pool memory? + BOOLEAN UseNonPagedPool; + + // Lock for this structure + union { + KSPIN_LOCK NonPaged; + FAST_MUTEX Paged; + } Lock; + + // Pointer to array of hash buckets with splay trees + PSPLAY_TREE HashTrees; +} HASH_TABLE, *PHASH_TABLE; + +/* END REACTOS ONLY */ + #endif diff --git a/include/ntsecapi.h b/include/ntsecapi.h new file mode 100644 index 0000000..1dfb7b2 --- /dev/null +++ b/include/ntsecapi.h @@ -0,0 +1,572 @@ +/* + * Copyright (C) 1999 Juergen Schmied + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * 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. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef __WINE_NTSECAPI_H +#define __WINE_NTSECAPI_H + +#ifdef __cplusplus +extern "C" { +#endif /* defined(__cplusplus) */ + +typedef enum _SECURITY_LOGON_TYPE { + Interactive = 2, + Network, + Batch, + Service, + Proxy, + Unlock, + NetworkCleartext, + NewCredentials, + RemoteInteractive, + CachedInteractive, + CachedRemoteInteractive, + CachedUnlock +} SECURITY_LOGON_TYPE, *PSECURITY_LOGON_TYPE; + +typedef enum _POLICY_NOTIFICATION_INFORMATION_CLASS { + + PolicyNotifyAuditEventsInformation = 1, + PolicyNotifyAccountDomainInformation, + PolicyNotifyServerRoleInformation, + PolicyNotifyDnsDomainInformation, + PolicyNotifyDomainEfsInformation, + PolicyNotifyDomainKerberosTicketInformation, + PolicyNotifyMachineAccountPasswordInformation + +} POLICY_NOTIFICATION_INFORMATION_CLASS, *PPOLICY_NOTIFICATION_INFORMATION_CLASS; + +typedef ULONG LSA_OPERATIONAL_MODE, *PLSA_OPERATIONAL_MODE; + +/* Policy access rights */ +#define POLICY_VIEW_LOCAL_INFORMATION 0x00000001L +#define POLICY_VIEW_AUDIT_INFORMATION 0x00000002L +#define POLICY_GET_PRIVATE_INFORMATION 0x00000004L +#define POLICY_TRUST_ADMIN 0x00000008L +#define POLICY_CREATE_ACCOUNT 0x00000010L +#define POLICY_CREATE_SECRET 0x00000020L +#define POLICY_CREATE_PRIVILEGE 0x00000040L +#define POLICY_SET_DEFAULT_QUOTA_LIMITS 0x00000080L +#define POLICY_SET_AUDIT_REQUIREMENTS 0x00000100L +#define POLICY_AUDIT_LOG_ADMIN 0x00000200L +#define POLICY_SERVER_ADMIN 0x00000400L +#define POLICY_LOOKUP_NAMES 0x00000800L +#define POLICY_NOTIFICATION 0x00001000L + +#define POLICY_ALL_ACCESS ( \ + STANDARD_RIGHTS_REQUIRED | \ + POLICY_VIEW_LOCAL_INFORMATION | \ + POLICY_VIEW_AUDIT_INFORMATION | \ + POLICY_GET_PRIVATE_INFORMATION | \ + POLICY_TRUST_ADMIN | \ + POLICY_CREATE_ACCOUNT | \ + POLICY_CREATE_SECRET | \ + POLICY_CREATE_PRIVILEGE | \ + POLICY_SET_DEFAULT_QUOTA_LIMITS | \ + POLICY_SET_AUDIT_REQUIREMENTS | \ + POLICY_AUDIT_LOG_ADMIN | \ + POLICY_SERVER_ADMIN | \ + POLICY_LOOKUP_NAMES) + + +#define POLICY_READ ( \ + STANDARD_RIGHTS_READ | \ + POLICY_VIEW_AUDIT_INFORMATION | \ + POLICY_GET_PRIVATE_INFORMATION) + +#define POLICY_WRITE ( \ + STANDARD_RIGHTS_WRITE | \ + POLICY_TRUST_ADMIN | \ + POLICY_CREATE_ACCOUNT | \ + POLICY_CREATE_SECRET | \ + POLICY_CREATE_PRIVILEGE | \ + POLICY_SET_DEFAULT_QUOTA_LIMITS | \ + POLICY_SET_AUDIT_REQUIREMENTS | \ + POLICY_AUDIT_LOG_ADMIN | \ + POLICY_SERVER_ADMIN) + +#define POLICY_EXECUTE ( \ + STANDARD_RIGHTS_EXECUTE | \ + POLICY_VIEW_LOCAL_INFORMATION | \ + POLICY_LOOKUP_NAMES) + +typedef UNICODE_STRING LSA_UNICODE_STRING, *PLSA_UNICODE_STRING; +/* FIXME: Microsoft declares an LSA_STRING as ascii but changing this breaks secur32.dll so someone will need to figure out what to do here */ +typedef struct _LSA_STRING +{ + USHORT Length; + USHORT MaximumLength; + PWSTR Buffer; +} LSA_STRING, *PLSA_STRING; +typedef OBJECT_ATTRIBUTES LSA_OBJECT_ATTRIBUTES, *PLSA_OBJECT_ATTRIBUTES; + +typedef PVOID LSA_HANDLE, *PLSA_HANDLE; + +typedef enum +{ + PolicyAuditLogInformation = 1, + PolicyAuditEventsInformation, + PolicyPrimaryDomainInformation, + PolicyPdAccountInformation, + PolicyAccountDomainInformation, + PolicyLsaServerRoleInformation, + PolicyReplicaSourceInformation, + PolicyDefaultQuotaInformation, + PolicyModificationInformation, + PolicyAuditFullSetInformation, + PolicyAuditFullQueryInformation, + PolicyDnsDomainInformation +} POLICY_INFORMATION_CLASS, *PPOLICY_INFORMATION_CLASS; + +typedef ULONG POLICY_AUDIT_EVENT_OPTIONS, *PPOLICY_AUDIT_EVENT_OPTIONS; + +typedef struct _POLICY_AUDIT_EVENTS_INFO +{ + WINBOOL AuditingMode; + PPOLICY_AUDIT_EVENT_OPTIONS EventAuditingOptions; + ULONG MaximumAuditEventCount; +} POLICY_AUDIT_EVENTS_INFO, *PPOLICY_AUDIT_EVENTS_INFO; + +typedef struct _LSA_FOREST_TRUST_DOMAIN_INFO { + + PSID Sid; + LSA_UNICODE_STRING DnsName; + LSA_UNICODE_STRING NetbiosName; + +} LSA_FOREST_TRUST_DOMAIN_INFO, *PLSA_FOREST_TRUST_DOMAIN_INFO; + + +#define MAX_FOREST_TRUST_BINARY_DATA_SIZE ( 128 * 1024 ) + +typedef struct _LSA_FOREST_TRUST_BINARY_DATA { + + ULONG Length; + PUCHAR Buffer; + +} LSA_FOREST_TRUST_BINARY_DATA, *PLSA_FOREST_TRUST_BINARY_DATA; + +typedef enum { + + ForestTrustTopLevelName, + ForestTrustTopLevelNameEx, + ForestTrustDomainInfo, + ForestTrustRecordTypeLast = ForestTrustDomainInfo + +} LSA_FOREST_TRUST_RECORD_TYPE; + +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 _LSA_FOREST_TRUST_RECORD { + + ULONG Flags; + LSA_FOREST_TRUST_RECORD_TYPE ForestTrustType; + LARGE_INTEGER Time; + + + union { + + LSA_UNICODE_STRING TopLevelName; + LSA_FOREST_TRUST_DOMAIN_INFO DomainInfo; + LSA_FOREST_TRUST_BINARY_DATA Data; + } ForestTrustData; + +} LSA_FOREST_TRUST_RECORD, *PLSA_FOREST_TRUST_RECORD; + +typedef struct _LSA_TRANSLATED_SID { + + SID_NAME_USE Use; + ULONG RelativeId; + LONG DomainIndex; + +} LSA_TRANSLATED_SID, *PLSA_TRANSLATED_SID; + +typedef struct _LSA_TRANSLATED_SID2 { + + SID_NAME_USE Use; + PSID Sid; + LONG DomainIndex; + ULONG Flags; + +} LSA_TRANSLATED_SID2, *PLSA_TRANSLATED_SID2; + +typedef struct _LSA_TRANSLATED_NAME { + + SID_NAME_USE Use; + LSA_UNICODE_STRING Name; + LONG DomainIndex; + +} LSA_TRANSLATED_NAME, *PLSA_TRANSLATED_NAME; + +typedef enum { + + CollisionTdo, + CollisionXref, + CollisionOther + +} LSA_FOREST_TRUST_COLLISION_RECORD_TYPE; + +typedef struct _LSA_FOREST_TRUST_COLLISION_RECORD { + + ULONG Index; + LSA_FOREST_TRUST_COLLISION_RECORD_TYPE Type; + ULONG Flags; + LSA_UNICODE_STRING Name; + +} LSA_FOREST_TRUST_COLLISION_RECORD, *PLSA_FOREST_TRUST_COLLISION_RECORD; + +typedef struct _LSA_FOREST_TRUST_COLLISION_INFORMATION { + + ULONG RecordCount; + PLSA_FOREST_TRUST_COLLISION_RECORD * Entries; + +} LSA_FOREST_TRUST_COLLISION_INFORMATION, *PLSA_FOREST_TRUST_COLLISION_INFORMATION; + +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 ULONG LSA_ENUMERATION_HANDLE, *PLSA_ENUMERATION_HANDLE; + +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 enum _POLICY_DOMAIN_INFORMATION_CLASS { + + PolicyDomainEfsInformation = 2, + PolicyDomainKerberosTicketInformation + +} POLICY_DOMAIN_INFORMATION_CLASS, *PPOLICY_DOMAIN_INFORMATION_CLASS; + +typedef struct _POLICY_PRIMARY_DOMAIN_INFO +{ + LSA_UNICODE_STRING Name; + PSID Sid; +} POLICY_PRIMARY_DOMAIN_INFO, *PPOLICY_PRIMARY_DOMAIN_INFO; + +typedef struct _POLICY_ACCOUNT_DOMAIN_INFO +{ + LSA_UNICODE_STRING DomainName; + PSID DomainSid; +} POLICY_ACCOUNT_DOMAIN_INFO, *PPOLICY_ACCOUNT_DOMAIN_INFO; + +typedef struct _LSA_FOREST_TRUST_INFORMATION { + + ULONG RecordCount; + PLSA_FOREST_TRUST_RECORD * Entries; + +} LSA_FOREST_TRUST_INFORMATION, *PLSA_FOREST_TRUST_INFORMATION; + +typedef struct _SECURITY_LOGON_SESSION_DATA { + ULONG Size ; + LUID LogonId ; + LSA_UNICODE_STRING UserName ; + LSA_UNICODE_STRING LogonDomain ; + LSA_UNICODE_STRING AuthenticationPackage ; + ULONG LogonType ; + ULONG Session ; + PSID Sid ; + LARGE_INTEGER LogonTime ; + LSA_UNICODE_STRING LogonServer ; + LSA_UNICODE_STRING DnsDomainName ; + LSA_UNICODE_STRING Upn ; +} SECURITY_LOGON_SESSION_DATA, * PSECURITY_LOGON_SESSION_DATA ; + +typedef enum _TRUSTED_INFORMATION_CLASS { + + TrustedDomainNameInformation = 1, + TrustedControllersInformation, + TrustedPosixOffsetInformation, + TrustedPasswordInformation, + TrustedDomainInformationBasic, + TrustedDomainInformationEx, + TrustedDomainAuthInformation, + TrustedDomainFullInformation, + TrustedDomainAuthInformationInternal, + TrustedDomainFullInformationInternal, + TrustedDomainInformationEx2Internal, + TrustedDomainFullInformation2Internal, + +} TRUSTED_INFORMATION_CLASS, *PTRUSTED_INFORMATION_CLASS; + +ULONG +STDCALL +LsaNtStatusToWinError(NTSTATUS Status); +NTSTATUS +STDCALL +LsaOpenPolicy(PLSA_UNICODE_STRING lsaucs,PLSA_OBJECT_ATTRIBUTES lsaoa,ACCESS_MASK access,PLSA_HANDLE lsah); +NTSTATUS +STDCALL +LsaQueryInformationPolicy(LSA_HANDLE lsah,POLICY_INFORMATION_CLASS pic,PVOID* pv); +NTSTATUS +STDCALL +LsaFreeMemory(PVOID pv); +NTSTATUS +STDCALL +LsaClose(LSA_HANDLE ObjectHandle); +NTSTATUS +STDCALL +LsaAddAccountRights( + LSA_HANDLE PolicyHandle, + PSID AccountSid, + PLSA_UNICODE_STRING UserRights, + ULONG CountOfRights + ); +NTSTATUS +STDCALL +LsaCreateTrustedDomainEx( + LSA_HANDLE PolicyHandle, + PTRUSTED_DOMAIN_INFORMATION_EX TrustedDomainInformation, + PTRUSTED_DOMAIN_AUTH_INFORMATION AuthenticationInformation, + ACCESS_MASK DesiredAccess, + PLSA_HANDLE TrustedDomainHandle + ); +NTSTATUS +STDCALL +LsaDeleteTrustedDomain( + LSA_HANDLE PolicyHandle, + PSID TrustedDomainSid + ); +NTSTATUS +STDCALL +LsaEnumerateAccountRights( + LSA_HANDLE PolicyHandle, + PSID AccountSid, + PLSA_UNICODE_STRING *UserRights, + PULONG CountOfRights + ); +NTSTATUS +STDCALL +LsaEnumerateAccountsWithUserRight( + LSA_HANDLE PolicyHandle, + OPTIONAL PLSA_UNICODE_STRING UserRights, + PVOID *EnumerationBuffer, + PULONG CountReturned + ); +NTSTATUS +STDCALL +LsaEnumerateTrustedDomains( + LSA_HANDLE PolicyHandle, + PLSA_ENUMERATION_HANDLE EnumerationContext, + PVOID *Buffer, + ULONG PreferedMaximumLength, + PULONG CountReturned + ); +NTSTATUS +STDCALL +LsaEnumerateTrustedDomainsEx( + LSA_HANDLE PolicyHandle, + PLSA_ENUMERATION_HANDLE EnumerationContext, + PVOID *Buffer, + ULONG PreferedMaximumLength, + PULONG CountReturned + ); +NTSTATUS +STDCALL +LsaLookupNames( + LSA_HANDLE PolicyHandle, + ULONG Count, + PLSA_UNICODE_STRING Names, + PLSA_REFERENCED_DOMAIN_LIST *ReferencedDomains, + PLSA_TRANSLATED_SID *Sids + ); +NTSTATUS +STDCALL +LsaLookupNames2( + LSA_HANDLE PolicyHandle, + ULONG Flags, + ULONG Count, + PLSA_UNICODE_STRING Names, + PLSA_REFERENCED_DOMAIN_LIST *ReferencedDomains, + PLSA_TRANSLATED_SID2 *Sids + ); +NTSTATUS +STDCALL +LsaLookupSids( + LSA_HANDLE PolicyHandle, + ULONG Count, + PSID *Sids, + PLSA_REFERENCED_DOMAIN_LIST *ReferencedDomains, + PLSA_TRANSLATED_NAME *Names + ); +NTSTATUS +STDCALL +LsaOpenTrustedDomainByName( + LSA_HANDLE PolicyHandle, + PLSA_UNICODE_STRING TrustedDomainName, + ACCESS_MASK DesiredAccess, + PLSA_HANDLE TrustedDomainHandle + ); +NTSTATUS +STDCALL +LsaQueryDomainInformationPolicy( + LSA_HANDLE PolicyHandle, + POLICY_DOMAIN_INFORMATION_CLASS InformationClass, + PVOID *Buffer + ); +NTSTATUS +STDCALL +LsaQueryForestTrustInformation( + LSA_HANDLE PolicyHandle, + PLSA_UNICODE_STRING TrustedDomainName, + PLSA_FOREST_TRUST_INFORMATION * ForestTrustInfo + ); +NTSTATUS +STDCALL +LsaQueryTrustedDomainInfoByName( + LSA_HANDLE PolicyHandle, + PLSA_UNICODE_STRING TrustedDomainName, + TRUSTED_INFORMATION_CLASS InformationClass, + PVOID *Buffer + ); +NTSTATUS +STDCALL +LsaQueryTrustedDomainInfo( + LSA_HANDLE PolicyHandle, + PSID TrustedDomainSid, + TRUSTED_INFORMATION_CLASS InformationClass, + PVOID *Buffer + ); +NTSTATUS +STDCALL +LsaRemoveAccountRights( + LSA_HANDLE PolicyHandle, + PSID AccountSid, + WINBOOL AllRights, + PLSA_UNICODE_STRING UserRights, + ULONG CountOfRights + ); +NTSTATUS +STDCALL +LsaRetrievePrivateData( + LSA_HANDLE PolicyHandle, + PLSA_UNICODE_STRING KeyName, + PLSA_UNICODE_STRING * PrivateData + ); +NTSTATUS +STDCALL +LsaSetDomainInformationPolicy( + LSA_HANDLE PolicyHandle, + POLICY_DOMAIN_INFORMATION_CLASS InformationClass, + PVOID Buffer + ); +NTSTATUS +STDCALL +LsaSetInformationPolicy( + LSA_HANDLE PolicyHandle, + POLICY_INFORMATION_CLASS InformationClass, + PVOID Buffer + ); +NTSTATUS +STDCALL +LsaSetForestTrustInformation( + LSA_HANDLE PolicyHandle, + PLSA_UNICODE_STRING TrustedDomainName, + PLSA_FOREST_TRUST_INFORMATION ForestTrustInfo, + WINBOOL CheckOnly, + PLSA_FOREST_TRUST_COLLISION_INFORMATION * CollisionInfo + ); +NTSTATUS +STDCALL +LsaSetTrustedDomainInfoByName( + LSA_HANDLE PolicyHandle, + PLSA_UNICODE_STRING TrustedDomainName, + TRUSTED_INFORMATION_CLASS InformationClass, + PVOID Buffer + ); +NTSTATUS +STDCALL +LsaSetTrustedDomainInformation( + LSA_HANDLE PolicyHandle, + PSID TrustedDomainSid, + TRUSTED_INFORMATION_CLASS InformationClass, + PVOID Buffer + ); +NTSTATUS +STDCALL +LsaStorePrivateData( + LSA_HANDLE PolicyHandle, + PLSA_UNICODE_STRING KeyName, + PLSA_UNICODE_STRING PrivateData + ); +NTSTATUS +STDCALL +LsaEnumerateLogonSessions( +PULONG LogonSessionCount, +PLUID * LogonSessionList +); + +NTSTATUS +STDCALL +LsaGetLogonSessionData( +PLUID LogonId, +PSECURITY_LOGON_SESSION_DATA * ppLogonSessionData +); +NTSTATUS +STDCALL +LsaRegisterPolicyChangeNotification( +POLICY_NOTIFICATION_INFORMATION_CLASS InformationClass, +HANDLE NotificationEventHandle +); + +NTSTATUS +STDCALL +LsaUnregisterPolicyChangeNotification( +POLICY_NOTIFICATION_INFORMATION_CLASS InformationClass, +HANDLE NotificationEventHandle +); + + +#ifdef __cplusplus +} /* extern "C" */ +#endif /* defined(__cplusplus) */ + +#endif /* !defined(__WINE_NTSECAPI_H) */ diff --git a/include/ole32/guiddef.h b/include/ole32/guiddef.h index 9e10326..ae24dc9 100644 --- a/include/ole32/guiddef.h +++ b/include/ole32/guiddef.h @@ -42,7 +42,7 @@ Cambridge, MA 02139, USA. #endif -// guid definition +/* guid definition */ #ifndef _GUID_DEFINED #define _GUID_DEFINED typedef struct _GUID { @@ -56,7 +56,7 @@ Cambridge, MA 02139, USA. #endif -// guid definition macro +/* guid definition macro */ #ifdef DEFINE_GUID #undef DEFINE_GUID #endif @@ -68,27 +68,34 @@ Cambridge, MA 02139, USA. #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ const GUID name #endif + +#ifndef DEFINE_OLEGUID #define DEFINE_OLEGUID(name, l, w1, w2) DEFINE_GUID(name, l, w1, w2, 0xC0,0,0,0,0,0,0,0x46) +#endif -// IID section +/* IID section */ typedef GUID IID; typedef IID* LPIID; +#ifndef IsEqualIID #define IsEqualIID(riid1, riid2) IsEqualGUID(riid1, riid2) +#endif -// CLSID section +/* CLSID section */ typedef GUID CLSID; typedef CLSID* LPCLSID; +#ifndef IsEqualCLSID #define IsEqualCLSID(rclsid1, rclsid2) IsEqualGUID(rclsid1, rclsid2) +#endif -// FMTID +/* FMTID */ typedef GUID FMTID; typedef FMTID* LPFMTID; #define IsEqualFMTID(rfmtid1, rfmtid2) IsEqualGUID(rfmtid1, rfmtid2) -// REFGUID section +/* REFGUID section */ #ifndef _REFGUID_DEFINED #define _REFGUID_DEFINED #ifdef __cplusplus @@ -98,7 +105,7 @@ typedef FMTID* LPFMTID; #endif #endif -// REFIID section +/* REFIID section */ #ifndef _REFIID_DEFINED #define _REFIID_DEFINED #ifdef __cplusplus @@ -108,7 +115,7 @@ typedef FMTID* LPFMTID; #endif #endif -// REFCLSID section +/* REFCLSID section */ #ifndef _REFCLSID_DEFINED #define _REFCLSID_DEFINED #ifdef __cplusplus @@ -118,7 +125,7 @@ typedef FMTID* LPFMTID; #endif #endif -// REFFMTID section +/* REFFMTID section */ #ifndef _REFFMTID_DEFINED #define _REFFMTID_DEFINED #ifdef __cplusplus @@ -129,9 +136,9 @@ typedef FMTID* LPFMTID; #endif -// compare functions for GUID +/* compare functions for GUID */ #ifdef __cplusplus - // cpp versions + /* cpp versions */ __inline int InlineIsEqualGUID(REFGUID rguid1, REFGUID rguid2) { return(((unsigned long *) &rguid1)[0] == ((unsigned long *) &rguid2)[0] && @@ -144,7 +151,7 @@ typedef FMTID* LPFMTID; return !memcmp(&rguid1, &rguid2, sizeof(GUID)); } #else - // c versions + /* c versions */ #define InlineIsEqualGUID(rguid1, rguid2) \ (((unsigned long *) rguid1)[0] == ((unsigned long *) rguid2)[0] && \ ((unsigned long *) rguid1)[1] == ((unsigned long *) rguid2)[1] && \ @@ -154,17 +161,21 @@ typedef FMTID* LPFMTID; #define IsEqualGUID(rguid1, rguid2) (!memcmp(rguid1, rguid2, sizeof(GUID))) #endif -// use the inline version??? +/* use the inline version??? */ #ifdef __INLINE_ISEQUAL_GUID #define IsEqualGUID(rguid1, rguid2) InlineIsEqualGUID(rguid1, rguid2) #endif -// compare functions for IID CLSID +/* compare functions for IID CLSID */ +#ifndef IsEqualIID #define IsEqualIID(riid1, riid2) IsEqualGUID(riid1, riid2) +#endif +#ifndef IsEqualCLSID #define IsEqualCLSID(rclsid1, rclsid2) IsEqualGUID(rclsid1, rclsid2) +#endif -// c++ helper functions +/* c++ helper functions */ #if !defined _SYS_GUID_OPERATOR_EQ_ && !defined _NO_SYS_GUID_OPERATOR_EQ_ #define _SYS_GUID_OPERATOR_EQ_ #ifdef __cplusplus diff --git a/include/ole32/obj_base.h b/include/ole32/obj_base.h index da69ab5..a453a7b 100644 --- a/include/ole32/obj_base.h +++ b/include/ole32/obj_base.h @@ -108,11 +108,11 @@ INT WINAPI StringFromGUID2(REFGUID id, LPOLESTR str, INT cmax); * #undef ICOM_INTERFACE * * #ifdef ICOM_CINTERFACE - * // *** IUnknown methods *** // + * *** IUnknown methods *** * #define IDirect3D_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b) * #define IDirect3D_AddRef(p) ICOM_CALL (AddRef,p) * #define IDirect3D_Release(p) ICOM_CALL (Release,p) - * // *** IDirect3D methods *** // + * *** IDirect3D methods *** * #define IDirect3D_Initialize(p,a) ICOM_CALL1(Initialize,p,a) * #define IDirect3D_EnumDevices(p,a,b) ICOM_CALL2(EnumDevice,p,a,b) * #define IDirect3D_CreateLight(p,a,b) ICOM_CALL2(CreateLight,p,a,b) @@ -178,11 +178,11 @@ INT WINAPI StringFromGUID2(REFGUID id, LPOLESTR str, INT cmax); * }; * * #ifdef ICOM_CINTERFACE - * // *** IUnknown methods *** // + * *** IUnknown methods *** * #define IDirect3D_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) * #define IDirect3D_AddRef(p) (p)->lpVtbl->AddRef(p) * #define IDirect3D_Release(p) (p)->lpVtbl->Release(p) - * // *** IDirect3D methods *** // + * *** IDirect3D methods *** * #define IDirect3D_Initialize(p,a) (p)->lpVtbl->Initialize(p,a) * #define IDirect3D_EnumDevices(p,a,b) (p)->lpVtbl->EnumDevice(p,a,b) * #define IDirect3D_CreateLight(p,a,b) (p)->lpVtbl->CreateLight(p,a,b) @@ -263,21 +263,21 @@ INT WINAPI StringFromGUID2(REFGUID id, LPOLESTR str, INT cmax); * * typedef struct _IDirect3D { * void* lpVtbl; - * // ... + * ... * * } _IDirect3D; * * static ICOM_VTABLE(IDirect3D) d3dvt; * - * // implement the IDirect3D methods here + * ***implement the IDirect3D methods here**** * * int IDirect3D_QueryInterface(IDirect3D* me) * { * ICOM_THIS(IDirect3D,me); - * // ... + * ... * } * - * // ... + * ... * * static ICOM_VTABLE(IDirect3D) d3dvt = { * ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE diff --git a/include/ole32/obj_dragdrop.h b/include/ole32/obj_dragdrop.h index 3410be5..c8a7cb0 100644 --- a/include/ole32/obj_dragdrop.h +++ b/include/ole32/obj_dragdrop.h @@ -79,6 +79,38 @@ ICOM_DEFINE(IDropTarget,IUnknown) #define IDropTarget_DragLeave(p) ICOM_CALL(DragLeave,p) #define IDropTarget_Drop(p,a,b,c,d) ICOM_CALL4(Drop,p,a,b,c,d) +#if _WIN32_IE >= 0x0500 + +#pragma pack(push,8) + +typedef struct +{ + SIZE sizeDragImage; + POINT ptOffset; + HBITMAP hbmpDragImage; + COLORREF crColorKey; +} SHDRAGIMAGE, *LPSHDRAGIMAGE; + +#pragma pack(pop) + +#undef INTERFACE +#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; +}; + +DEFINE_GUID(CLSID_DragDropHelper, 0x4657278AL, 0x411B, 0x11D2, 0x83, 0x9A, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0); +DEFINE_GUID(IID_IDropTargetHelper, 0x4657278BL, 0x411B, 0x11D2, 0x83, 0x9A, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0); +DEFINE_GUID(IID_IDragSourceHelper, 0xDE5BF786L, 0x477A, 0x11D2, 0x83, 0x9D, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0); + +#endif /* _WIN32_IE >= 0x0500 */ + #ifdef __cplusplus } /* extern "C" */ #endif /* defined(__cplusplus) */ diff --git a/include/ole32/obj_shellfolder.h b/include/ole32/obj_shellfolder.h index 0a25403..088b4de 100644 --- a/include/ole32/obj_shellfolder.h +++ b/include/ole32/obj_shellfolder.h @@ -99,6 +99,8 @@ typedef enum SHGDN_FORPARSING = 0x8000 /* for ParseDisplayName or path */ } SHGNO; +typedef DWORD SHGDNF; + /***************************************************************************** * IShellFolder::EnumObjects */ @@ -106,6 +108,10 @@ typedef enum tagSHCONTF { SHCONTF_FOLDERS = 32, /* for shell browser */ SHCONTF_NONFOLDERS = 64, /* for default view */ SHCONTF_INCLUDEHIDDEN = 128 /* for hidden/system objects */ + SHCONTF_INIT_ON_FIRST_NEXT = 256, /* allow EnumObject() to return before validating enum */ + SHCONTF_NETPRINTERSRCH = 512, /* hint that client is looking for printers */ + SHCONTF_SHAREABLE = 1024, /* hint that client is looking sharable resources (remote shares) */ + SHCONTF_STORAGE = 2048 /* include all items with accessible storage and their ancestors */ } SHCONTF; /***************************************************************************** @@ -135,6 +141,9 @@ typedef enum tagSHCONTF #define SFGAO_BROWSABLE 0x08000000L /* is in-place browsable */ #define SFGAO_NONENUMERATED 0x00100000L /* is a non-enumerated object */ #define SFGAO_NEWCONTENT 0x00200000L /* should show bold in explorer tree */ +#define SFGAO_COMPRESSED 0x04000000L /* Object is compressed (use alt color) */ + +typedef ULONG SFGAOF; /************************************************************************ * diff --git a/include/ole32/objbase.h b/include/ole32/objbase.h index d2f7cf7..15c2f01 100644 --- a/include/ole32/objbase.h +++ b/include/ole32/objbase.h @@ -54,7 +54,7 @@ Cambridge, MA 02139, USA. #define STDMETHODIMP_(type) type STDMETHODCALLTYPE -// variable argument lists versions +/* variable argument lists versions */ #define STDAPIV EXTERN_C HRESULT STDAPIVCALLTYPE #define STDAPIV_(type) EXTERN_C type STDAPIVCALLTYPE @@ -66,20 +66,20 @@ Cambridge, MA 02139, USA. #define WINOLEAPI_(type) STDAPI_(type) #endif -// -// COM interface declaration macros [from the wine implementation -// -// These macros declare interfaces for both C and C++ depending for what -// language you are compiling -// -// DECLARE_INTERFACE(iface): declare not derived interface -// DECLARE_INTERFACE(iface, baseiface): declare derived interface -// -// Use CINTERFACE if you want to force a c style interface declaration, -// else, the compiler will look at the source file extension -// +/* + * COM interface declaration macros [from the wine implementation + * + * These macros declare interfaces for both C and C++ depending for what + * language you are compiling + * + * DECLARE_INTERFACE(iface): declare not derived interface + * DECLARE_INTERFACE(iface, baseiface): declare derived interface + * + * Use CINTERFACE if you want to force a c style interface declaration, + * else, the compiler will look at the source file extension + */ #if defined(__cplusplus) && !defined(CINTERFACE) - // define the c++ macros + /* define the c++ macros */ #define interface struct #define STDMETHOD(method) virtual HRESULT STDMETHODCALLTYPE method #define STDMETHOD_(type,method) virtual type STDMETHODCALLTYPE method @@ -92,7 +92,7 @@ Cambridge, MA 02139, USA. #define DECLARE_INTERFACE_(iface, baseiface) interface iface : public baseiface #else - // define the c macros + /* define the c macros */ #define interface struct #define STDMETHOD(method) HRESULT (STDMETHODCALLTYPE* method) #define STDMETHOD_(type,method) type (STDMETHODCALLTYPE* method) diff --git a/include/ole32/olectl.h b/include/ole32/olectl.h index f031597..2c1ef57 100644 --- a/include/ole32/olectl.h +++ b/include/ole32/olectl.h @@ -29,6 +29,6 @@ Cambridge, MA 02139, USA. ********************************************************************/ #include -// Dll register functions +/* Dll register functions */ STDAPI DllRegisterServer(void); STDAPI DllUnregisterServer(void); \ No newline at end of file diff --git a/include/ole32/rpc.h b/include/ole32/rpc.h index 5cec503..d85d7cd 100644 --- a/include/ole32/rpc.h +++ b/include/ole32/rpc.h @@ -40,6 +40,6 @@ RPC_STATUS RPC_ENTRY UuidCreate(UUID *Uuid); /* #include "rpcnsi.h" */ /* #include "rpcnterr.h" */ /* #include "excpt.h" */ -//#include "winerror.h" +/* #include "winerror.h" */ #endif /*__WINE_RPC_H */ diff --git a/include/ole32/winerror.h b/include/ole32/winerror.h index ac9a181..23d2868 100644 --- a/include/ole32/winerror.h +++ b/include/ole32/winerror.h @@ -30,21 +30,21 @@ Cambridge, MA 02139, USA. #ifndef _WINERROR_H #define _WINERROR_H #if 0 -// -// Return Code macros -// +/* + * Return Code macros + */ #define SUCCEEDED(Status) ((HRESULT)(Status) >= 0) #define FAILED(Status) ((HRESULT)(Status)<0) -// -// Success Codes -// +/* + * Success Codes + */ #define S_OK 0x00000000L #define S_FALSE 0x00000001L -// -// Error Codes -// +/* + * Error Codes + */ #define E_NOINTERFACE 0x80000004L #define E_POINTER 0x80004003L #define E_FAIL 0x80004005L @@ -56,4 +56,4 @@ Cambridge, MA 02139, USA. #endif -#endif \ No newline at end of file +#endif diff --git a/include/pe.h b/include/pe.h index b618758..04c3f17 100644 --- a/include/pe.h +++ b/include/pe.h @@ -527,7 +527,11 @@ typedef struct _IMAGE_RESOURCE_DIRECTORY { #define IMAGE_SUBSYSTEM_POSIX_GUI 6 #define IMAGE_SUBSYSTEM_POSIX_CUI 7 #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 // Directory Entries diff --git a/include/reactos/config.h b/include/reactos/config.h index dca2e9f..9de7b3c 100644 --- a/include/reactos/config.h +++ b/include/reactos/config.h @@ -24,7 +24,9 @@ * Use __fastcall calling conventions when needed * in system components that require it. */ -//#define CONFIG_USE_FASTCALL + +/* #define CONFIG_USE_FASTCALL */ + /* * Enable debugging output on a per module * base. diff --git a/include/reactos/resource.h b/include/reactos/resource.h index a9ab8ce..4b6cd09 100644 --- a/include/reactos/resource.h +++ b/include/reactos/resource.h @@ -32,5 +32,8 @@ /* ReactOS default Application Registry Root Path */ #define RES_STR_ROSAPP_REGISTRY_ROOT "Software\\ReactWare" +/* Bitmaps */ +#define IDB_BOOTIMAGE 100 + #endif /* ndef _INC_REACTOS_RESOURCE_H */ diff --git a/include/reactos/version.h b/include/reactos/version.h index 7b9d253..552c96c 100644 --- a/include/reactos/version.h +++ b/include/reactos/version.h @@ -19,9 +19,9 @@ #define KERNEL_VERSION_MAJOR 0 #define KERNEL_VERSION_MINOR 1 -#define KERNEL_VERSION_PATCH_LEVEL 1 +#define KERNEL_VERSION_PATCH_LEVEL 3 /* Edit each time a new release is out: format is YYYYMMDD (UTC) */ -#define KERNEL_RELEASE_DATE 20030329L +#define KERNEL_RELEASE_DATE 20030830L #endif diff --git a/include/richedit.h b/include/richedit.h new file mode 100644 index 0000000..b2f2ce1 --- /dev/null +++ b/include/richedit.h @@ -0,0 +1,628 @@ +/* + * Copyright (C) 2000 Jean-Claude Batista + * Copyright (C) 2002 Andriy Palamarchuk + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * 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. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef __WINE_RICHEDIT_H +#define __WINE_RICHEDIT_H + +#include "pshpack4.h" + +/* added definitions from the wine source */ +#define WINELIB_NAME_AW(func) func##W +#define DECL_WINELIB_TYPE_AW(type) typedef WINELIB_NAME_AW(type) type; + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef _RICHEDIT_VER +#define _RICHEDIT_VER 0x0210 +#endif /* _RICHEDIT_VER */ + +#define cchTextLimitDefault 0x7fff + +#define RICHEDIT_CLASS20A "RichEdit20A" +#if defined(__GNUC__) +# define RICHEDIT_CLASS20W (const WCHAR []){ 'R','i','c','h','E','d','i','t','2','0','W',0 } +#elif defined(_MSC_VER) +# define RICHEDIT_CLASS20W L"RichEdit20W" +#else +static const WCHAR RICHEDIT_CLASS20W[] = { 'R','i','c','h','E','d','i','t','2','0','W',0 }; +#endif +#define RICHEDIT_CLASS10A "RICHEDIT" + +#if (_RICHEDIT_VER >= 0x0200 ) +#define RICHEDIT_CLASS WINELIB_NAME_AW(RICHEDIT_CLASS20) +#else +#define RICHEDIT_CLASS RICHEDIT_CLASS10A +#endif + +#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) + +#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_CONVPOSITION (WM_USER + 108) + +#define EM_SETLANGOPTIONS (WM_USER + 120) +#define EM_GETLANGOPTIONS (WM_USER + 121) +#define EM_GETIMECOMPMODE (WM_USER + 122) + +#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_SETIMEMODEBIAS (WM_USER + 126) +#define EM_GETIMEMODEBIAS (WM_USER + 127) + +#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_OUTLINE (WM_USER + 220) + +#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) + +/* New notifications */ +#define EN_MSGFILTER 0x0700 +#define EN_REQUESTRESIZE 0x0701 +#define EN_SELCHANGE 0x0702 +#define EN_DROPFILES 0x0703 +#define EN_PROTECTED 0x0704 +#define EN_CORRECTTEXT 0x0705 +#define EN_STOPNOUNDO 0x0706 +#define EN_IMECHANGE 0x0707 +#define EN_SAVECLIPBOARD 0x0708 +#define EN_OLEOPFAILED 0x0709 +#define EN_OBJECTPOSITIONS 0x070a +#define EN_LINK 0x070b +#define EN_DRAGDROPDONE 0x070c +#define EN_PARAGRAPHEXPANDED 0x070d +#define EN_ALIGNLTR 0x0710 +#define EN_ALIGNRTL 0x0711 + + +typedef DWORD (CALLBACK * EDITSTREAMCALLBACK)( DWORD, LPBYTE, LONG, LONG * ); + +/* tab stops number limit */ +#define MAX_TAB_STOPS 0x00000020 + +/* Rich edit control styles */ +#define ES_DISABLENOSCROLL 0x00002000 +#define ES_SUNKEN 0x00004000 +#define ES_SAVESEL 0x00008000 +#define ES_SELFIME 0x00040000 +#define ES_NOIME 0x00080000 +#define ES_VERTICAL 0x00400000 +#define ES_SELECTIONBAR 0x01000000 +#define ES_EX_NOCALLOLEINIT 0x01000000 + +/* the character formatting options */ +#define SCF_DEFAULT 0x00000000 +#define SCF_SELECTION 0x00000001 +#define SCF_WORD 0x00000002 +#define SCF_ALL 0x00000004 +#define SCF_USEUIRULES 0x00000008 + +/* CHARFORMAT structure */ +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; + +DECL_WINELIB_TYPE_AW(CHARFORMAT) + +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; + +DECL_WINELIB_TYPE_AW(CHARFORMAT2) + +/* CHARFORMAT masks */ +#define CFM_BOLD 0x00000001 +#define CFM_ITALIC 0x00000002 +#define CFM_UNDERLINE 0x00000004 +#define CFM_STRIKEOUT 0x00000008 +#define CFM_PROTECTED 0x00000010 +#define CFM_LINK 0x00000020 +#define CFM_SMALLCAPS 0x00000040 +#define CFM_ALLCAPS 0x00000080 +#define CFM_HIDDEN 0x00000100 +#define CFM_OUTLINE 0x00000200 +#define CFM_SHADOW 0x00000400 +#define CFM_EMBOSS 0x00000800 +#define CFM_IMPRINT 0x00001000 +#define CFM_DISABLED 0x00002000 +#define CFM_REVISED 0x00004000 +#define CFM_REVAUTHOR 0x00008000 +#define CFM_SUBSCRIPT 0x00030000 +#define CFM_SUPERSCRIPT 0x00030000 +#define CFM_ANIMATION 0x00040000 +#define CFM_STYLE 0x00080000 +#define CFM_KERNING 0x00100000 +#define CFM_SPACING 0x00200000 +#define CFM_WEIGHT 0x00400000 +#define CFM_LCID 0x02000000 +#define CFM_BACKCOLOR 0x04000000 +#define CFM_CHARSET 0x08000000 +#define CFM_OFFSET 0x10000000 +#define CFM_FACE 0x20000000 +#define CFM_COLOR 0x40000000 +#define CFM_SIZE 0x80000000 +#define CFM_EFFECTS (CFM_BOLD | CFM_ITALIC | CFM_UNDERLINE | CFM_COLOR | CFM_STRIKEOUT | CFE_PROTECTED | CFM_LINK) + +/* CHARFORMAT effects */ +#define CFE_BOLD 0x00000001 +#define CFE_ITALIC 0x00000002 +#define CFE_UNDERLINE 0x00000004 +#define CFE_STRIKEOUT 0x00000008 +#define CFE_PROTECTED 0x00000010 +#define CFE_LINK 0x00000020 +#define CFE_SUBSCRIPT 0x00010000 +#define CFE_SUPERSCRIPT 0x00020000 +#define CFE_AUTOCOLOR 0x40000000 + +#define CFE_SMALLCAPS CFM_SMALLCAPS +#define CFE_ALLCAPS CFM_ALLCAPS +#define CFE_HIDDEN CFM_HIDDEN +#define CFE_OUTLINE CFM_OUTLINE +#define CFE_SHADOW CFM_SHADOW +#define CFE_EMBOSS CFM_EMBOSS +#define CFE_IMPRINT CFM_IMPRINT +#define CFE_DISABLED CFM_DISABLED +#define CFE_REVISED CFM_REVISED + +#define CFU_CF1UNDERLINE 0xFF +#define CFU_INVERT 0xFE +#define CFU_UNDERLINEDOTTED 0x04 +#define CFU_UNDERLINEDOUBLE 0x03 +#define CFU_UNDERLINEWORD 0x02 +#define CFU_UNDERLINE 0x01 +#define CFU_UNDERLINENONE 0x00 + +/* ECO operations */ +#define ECOOP_SET 0x0001 +#define ECOOP_OR 0x0002 +#define ECOOP_AND 0x0003 +#define ECOOP_XOR 0x0004 + +/* edit control options */ +#define ECO_AUTOWORDSELECTION 0x00000001 +#define ECO_AUTOVSCROLL 0x00000040 +#define ECO_AUTOHSCROLL 0x00000080 +#define ECO_NOHIDESEL 0x00000100 +#define ECO_READONLY 0x00000800 +#define ECO_WANTRETURN 0x00001000 +#define ECO_SAVESEL 0x00008000 +#define ECO_SELECTIONBAR 0x01000000 +#define ECO_VERTICAL 0x00400000 + +/* Event notification masks */ +#define ENM_NONE 0x00000000 +#define ENM_CHANGE 0x00000001 +#define ENM_UPDATE 0x00000002 +#define ENM_SCROLL 0x00000004 +#define ENM_KEYEVENTS 0x00010000 +#define ENM_MOUSEEVENTS 0x00020000 +#define ENM_REQUESTRESIZE 0x00040000 +#define ENM_SELCHANGE 0x00080000 +#define ENM_DROPFILES 0x00100000 +#define ENM_PROTECTED 0x00200000 +#define ENM_CORRECTTEXT 0x00400000 +#define ENM_IMECHANGE 0x00800000 +#define ENM_LINK 0x04000000 + +typedef struct _charrange +{ + LONG cpMin; + LONG cpMax; +} CHARRANGE; + +typedef struct _textrange +{ + CHARRANGE chrg; + LPSTR lpstrText; +} TEXTRANGEA; + +typedef struct _textrangew +{ + CHARRANGE chrg; + LPWSTR lpstrText; +} TEXTRANGEW; + +DECL_WINELIB_TYPE_AW(TEXTRANGE) + +typedef struct _editstream +{ + DWORD dwCookie; + DWORD dwError; + EDITSTREAMCALLBACK pfnCallback; +} EDITSTREAM; + +typedef struct _compcolor { + COLORREF crText; + COLORREF crBackground; + DWORD dwEffects; +} COMPCOLOR; + +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; + +DECL_WINELIB_TYPE_AW(FINDTEXT) + +typedef struct _findtextexA { + CHARRANGE chrg; + LPSTR lpstrText; + CHARRANGE chrgText; +} FINDTEXTEXA; + +typedef struct _findtextexW { + CHARRANGE chrg; + LPWSTR lpstrText; + CHARRANGE chrgText; +} FINDTEXTEXW; + +DECL_WINELIB_TYPE_AW(FINDTEXTEX) + +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 _selchange { + NMHDR nmhdr; + CHARRANGE chrg; + WORD seltyp; +} SELCHANGE; + +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 lpUsedDefaultChar; +} GETTEXTEX; + +#define SF_TEXT 0x00000001 +#define SF_RTF 0x00000002 +#define SF_RTFNOOBJS 0x00000003 +#define SF_TEXTIZED 0x00000004 +#define SF_UNICODE 0x00000010 +#define SF_USECODEPAGE 0x00000020 +#define SF_NCRFORNONASCII 0x00000040 +#define SF_RTFVAL 0x00000700 + +/* Clipboard formats */ +#define CF_RTF TEXT("Rich Text Format") +#define CF_RTFNOOBJS TEXT("Rich Text Format Without Objects") +#define CF_RETEXTOBJ TEXT("RichEdit Text and Objects") + + +/* Parameters of the EM_SETIMEOPTIONS message */ +#define IMF_FORCENONE 0x00000001 +#define IMF_FORCEENABLE 0x00000002 +#define IMF_FORCEDISABLE 0x00000004 +#define IMF_CLOSESTATUSWINDOW 0x00000008 +#define IMF_VERTICAL 0x00000020 +#define IMF_FORCEACTIVE 0x00000040 +#define IMF_FORCEINACTIVE 0x00000080 +#define IMF_FORCEREMEMBER 0x00000100 + +/* return values of the EM_SELECTION_TYPE message */ +#define SEL_EMPTY 0x00000000 +#define SEL_TEXT 0x00000001 +#define SEL_OBJECT 0x00000002 +#define SEL_MULTICHAR 0x00000004 +#define SEL_MULTIOBJECT 0x00000008 + +/* mask values in the PARAFORMAT2 structure */ +#define PFM_STARTINDENT 0x00000001 +#define PFM_RIGHTINDENT 0x00000002 +#define PFM_OFFSET 0x00000004 +#define PFM_ALIGNMENT 0x00000008 +#define PFM_TABSTOPS 0x00000010 +#define PFM_NUMBERING 0x00000020 +#define PFM_OFFSETINDENT 0x80000000 + +/* numbering option */ +#define PFN_BULLET 0x00000001 + +/* paragraph alignment */ +#define PFA_LEFT 0x00000001 +#define PFA_RIGHT 0x00000002 +#define PFA_CENTER 0x00000003 + +/* streaming flags */ +#define SFF_PWD 0x00000800 +#define SFF_KEEPDOCINFO 0x00001000 +#define SFF_PERSISTVIEWSCALE 0x00002000 +#define SFF_PLAINRTF 0x00004000 +#define SFF_SELECTION 0x00008000 + +typedef LONG (*EDITWORDBREAKPROCEX)(char*,LONG,BYTE,INT); + +/* options of the EM_FINDWORDBREAK message */ +#define WB_CLASSIFY 0x00000003 +#define WB_MOVEWORDLEFT 0x00000004 +#define WB_MOVEWORDPREV 0x00000004 +#define WB_MOVEWORDRIGHT 0x00000005 +#define WB_MOVEWORDNEXT 0x00000005 +#define WB_LEFTBREAK 0x00000006 +#define WB_PREVBREAK 0x00000006 +#define WB_RIGHTBREAK 0x00000007 +#define WB_NEXTBREAK 0x00000007 + +/* options of the EM_SETWORDWRAPMODE message */ +#define WBF_WORDWRAP 0x00000010 +#define WBF_WORDBREAK 0x00000020 +#define WBF_OVERFLOW 0x00000040 +#define WBF_LEVEL1 0x00000080 +#define WBF_LEVEL2 0x00000100 +#define WBF_CUSTOM 0x00000200 + +/* options of the EM_SETTEXTMODE message */ +#define TM_PLAINTEXT 0x00000001 +#define TM_RICHTEXT 0x00000002 +#define TM_SINGLELEVELUNDO 0x00000004 +#define TM_MULTILEVELUNDO 0x00000008 +#define TM_SINGLECODEPAGE 0x00000010 +#define TM_MULTICODEPAGE 0x00000020 + +/* GETTEXT structure flags */ +#define GT_DEFAULT 0x00000000 +#define GT_USECRLF 0x00000001 + +/* Options of the EM_SETTYPOGRAPHYOPTIONS message */ +#define TO_ADVANCEDTYPOGRAPHY 0x00000001 +#define TO_SIMPLELINEBREAK 0x00000002 + +typedef struct _gettextlengthex { + DWORD flags; + UINT codepage; +} GETTEXTLENGTHEX; + +/* Flags of the GETTEXTLENGTHEX structure */ +#define GTL_DEFAULT 0x00000000 +#define GTL_USECRLF 0x00000001 +#define GTL_PRECISE 0x00000002 +#define GTL_CLOSE 0x00000004 +#define GTL_NUMCHARS 0x00000008 +#define GTL_NUMBYTES 0x00000010 + +#ifdef __cplusplus +} +#endif + +#include "poppack.h" + +#endif /* __WINE_RICHEDIT_H */ diff --git a/include/roskrnl.h b/include/roskrnl.h new file mode 100755 index 0000000..2dc25e0 --- /dev/null +++ b/include/roskrnl.h @@ -0,0 +1,2 @@ +#define NTOS_MODE_KERNEL +#include "ntos.h" diff --git a/include/rosrtl/devmode.h b/include/rosrtl/devmode.h new file mode 100644 index 0000000..0b6b996 --- /dev/null +++ b/include/rosrtl/devmode.h @@ -0,0 +1,16 @@ +/* devmode.h + */ + +#ifdef __cplusplus +extern "C" +{ +#endif + +void +RosRtlDevModeA2W ( LPDEVMODEW pW, const LPDEVMODEA pA ); + +#ifdef __cplusplus +} +#endif + +/* EOF */ diff --git a/include/rosrtl/logfont.h b/include/rosrtl/logfont.h new file mode 100644 index 0000000..820e798 --- /dev/null +++ b/include/rosrtl/logfont.h @@ -0,0 +1,19 @@ +/* logfont.h + */ + +#ifdef __cplusplus +extern "C" +{ +#endif + +void +RosRtlLogFontA2W ( LPLOGFONTW pW, const LPLOGFONTA pA ); + +void +RosRtlLogFontW2A ( LPLOGFONTA pA, const LPLOGFONTW pW ); + +#ifdef __cplusplus +} +#endif + +/* EOF */ diff --git a/include/rosrtl/thread.h b/include/rosrtl/thread.h index 7dc9deb..4aa774a 100644 --- a/include/rosrtl/thread.h +++ b/include/rosrtl/thread.h @@ -6,7 +6,7 @@ extern "C" { #endif -NTSTATUS STDCALL RtlRosCreateUserThreadEx +NTSTATUS NTAPI RtlRosCreateUserThread ( IN HANDLE ProcessHandle, IN POBJECT_ATTRIBUTES ObjectAttributes, @@ -14,7 +14,7 @@ NTSTATUS STDCALL RtlRosCreateUserThreadEx IN LONG StackZeroBits, IN OUT PULONG StackReserve OPTIONAL, IN OUT PULONG StackCommit OPTIONAL, - IN PTHREAD_START_ROUTINE StartAddress, + IN PVOID StartAddress, OUT PHANDLE ThreadHandle OPTIONAL, OUT PCLIENT_ID ClientId OPTIONAL, IN ULONG ParameterCount, @@ -29,23 +29,59 @@ NTSTATUS CDECL RtlRosCreateUserThreadVa IN LONG StackZeroBits, IN OUT PULONG StackReserve OPTIONAL, IN OUT PULONG StackCommit OPTIONAL, - IN PTHREAD_START_ROUTINE StartAddress, + IN PVOID StartAddress, OUT PHANDLE ThreadHandle OPTIONAL, OUT PCLIENT_ID ClientId OPTIONAL, IN ULONG ParameterCount, ... ); -NTSTATUS NTAPI RtlRosInitializeContextEx +NTSTATUS NTAPI RtlRosInitializeContext ( IN HANDLE ProcessHandle, - IN PCONTEXT Context, - IN PTHREAD_START_ROUTINE StartAddress, + OUT PCONTEXT Context, + IN PVOID StartAddress, IN PUSER_STACK UserStack, IN ULONG ParameterCount, IN ULONG_PTR * Parameters ); +NTSTATUS NTAPI RtlRosCreateStack +( + IN HANDLE ProcessHandle, + OUT PUSER_STACK UserStack, + IN LONG StackZeroBits, + IN OUT PULONG StackReserve OPTIONAL, + IN OUT PULONG StackCommit OPTIONAL +); + +NTSTATUS NTAPI RtlRosDeleteStack +( + IN HANDLE ProcessHandle, + IN PUSER_STACK UserStack +); + +/* Private functions - for ROSRTL internal use only */ +NTSTATUS NTAPI RtlpRosGetStackLimits +( + IN PUSER_STACK UserStack, + OUT PVOID * StackBase, + OUT PVOID * StackLimit +); + +NTSTATUS NTAPI RtlpRosValidateLinearUserStack +( + IN PVOID StackBase, + IN PVOID StackLimit, + IN BOOLEAN Direction +); + +#define RtlpRosValidateTopDownUserStack(__B__, __L__) \ + (RtlpRosValidateLinearUserStack((__B__), (__L__), FALSE)) + +#define RtlpRosValidateDownTopUserStack(__B__, __L__) \ + (RtlpRosValidateLinearUserStack((__B__), (__L__), TRUE)) + #ifdef __cplusplus } #endif diff --git a/include/structs.h b/include/structs.h index 4e8ad7f..9c1b1dc 100644 --- a/include/structs.h +++ b/include/structs.h @@ -33,6 +33,7 @@ #ifndef _GNU_H_WINDOWS32_STRUCTURES #define _GNU_H_WINDOWS32_STRUCTURES +#include #include #include #include @@ -44,15 +45,20 @@ #include #include #include -/* -typedef struct _VALENT -{ - LPTSTR ve_valuename; - DWORD ve_valuelen; - DWORD ve_valueptr; - DWORD ve_type; -} VALENT, *PVALENT; - */ + +/* NOTE - _DISABLE_TIDENTS exists to keep ReactOS's source from + accidentally utilitizing ANSI/UNICODE-generic structs, defines + or functions. */ +#ifndef _DISABLE_TIDENTS +# ifdef UNICODE +# define typedef_tident(ident) typedef ident##W ident; +# else +# define typedef_tident(ident) typedef ident##A ident; +# endif +#else +# define typedef_tident(ident) +#endif + typedef struct _VALENT_A { LPSTR ve_valuename; DWORD ve_valuelen; @@ -67,13 +73,8 @@ typedef struct _VALENT_W { DWORD ve_type; } VALENTW, *PVALENTW; -#ifdef UNICODE -typedef VALENTW VALENT; -typedef PVALENTW PVALENT; -#else -typedef VALENTA VALENT; -typedef PVALENTA PVALENT; -#endif +typedef_tident(VALENT) +typedef_tident(PVALENT) #ifndef WIN32_LEAN_AND_MEAN @@ -141,10 +142,17 @@ typedef struct _ADAPTER_STATUS { WORD name_count; } ADAPTER_STATUS; -typedef struct _ADDJOB_INFO_1 { - LPTSTR Path; +typedef struct _ADDJOB_INFO_1A { + LPSTR Path; + DWORD JobId; +} ADDJOB_INFO_1A; + +typedef struct _ADDJOB_INFO_1W { + LPWSTR Path; DWORD JobId; -} ADDJOB_INFO_1; +} ADDJOB_INFO_1W; + +typedef_tident(ADDJOB_INFO_1) typedef struct tagANIMATIONINFO { UINT cbSize; @@ -156,14 +164,22 @@ typedef struct _RECT { LONG top; LONG right; LONG bottom; -} RECT, *LPRECT, *LPCRECT, *PRECT; +} RECT, *LPRECT, *LPCRECT, *PRECT, +RECTL, *LPRECTL, *LPCRECTL, *PRECTL; +typedef struct _PATRECT { + RECT r; + HBRUSH hBrush; +} PATRECT, * PPATRECT; + +#if 0 typedef struct _RECTL { LONG left; LONG top; LONG right; LONG bottom; } RECTL, *LPRECTL, *LPCRECTL, *PRECTL; +#endif typedef struct _AppBarData { DWORD cbSize; @@ -210,7 +226,7 @@ typedef struct tagBITMAPFILEHEADER { WORD bfReserved1; WORD bfReserved2; DWORD bfOffBits; -} BITMAPFILEHEADER __attribute__((packed)); +} PACKED BITMAPFILEHEADER; typedef struct tagBITMAPINFOHEADER { DWORD biSize; @@ -231,7 +247,7 @@ typedef struct tagRGBQUAD { BYTE rgbGreen; BYTE rgbRed; BYTE rgbReserved; -} RGBQUAD; +} RGBQUAD, *PRGBQUAD, *LPRGBQUAD; typedef struct tagBITMAPINFO { BITMAPINFOHEADER bmiHeader; @@ -279,8 +295,8 @@ typedef struct { DWORD bV4GammaBlue; } BITMAPV4HEADER, *LPBITMAPV4HEADER, *PBITMAPV4HEADER; -#ifndef _BLOB_DEFINED -#define _BLOB_DEFINED +#ifndef __BLOB_T_DEFINED +#define __BLOB_T_DEFINED typedef struct _BLOB { ULONG cbSize; BYTE *pBlobData; @@ -347,6 +363,22 @@ typedef struct tagPOINTS { SHORT y; } POINTS; +typedef struct { + ULONG State[4]; + ULONG Unknown[2]; +} MD4_CONTEXT, *PMD4_CONTEXT; + +typedef struct { + ULONG Unknown[2]; + ULONG State[4]; +} MD5_CONTEXT, *PMD5_CONTEXT; + +typedef struct { + ULONG Unknown1[6]; + ULONG State[5]; + ULONG Unknown2[2]; +} SHA_CONTEXT, *PSHA_CONTEXT; + typedef struct _tagCANDIDATEFORM { DWORD dwIndex; DWORD dwStyle; @@ -364,21 +396,6 @@ typedef struct _tagCANDIDATELIST { DWORD dwOffset[1]; } CANDIDATELIST, *LPCANDIDATELIST; -typedef struct tagCREATESTRUCT { - LPVOID lpCreateParams; - HINSTANCE hInstance; - HMENU hMenu; - HWND hwndParent; - int cy; - int cx; - int y; - int x; - LONG style; - LPCTSTR lpszName; - LPCTSTR lpszClass; - DWORD dwExStyle; -} CREATESTRUCT, *LPCREATESTRUCT; - typedef struct tagCREATESTRUCTA { LPVOID lpCreateParams; HINSTANCE hInstance; @@ -409,10 +426,113 @@ typedef struct tagCREATESTRUCTW { DWORD dwExStyle; } CREATESTRUCTW, *LPCREATESTRUCTW; -typedef struct tagCBT_CREATEWND { - LPCREATESTRUCT lpcs; - HWND hwndInsertAfter; -} CBT_CREATEWND; +typedef_tident(CREATESTRUCT) +typedef_tident(LPCREATESTRUCT) + +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_tident(HW_PROFILE_INFO) +typedef_tident(LPHW_PROFILE_INFO) +typedef struct _tagDATETIME { + WORD year; + WORD month; + WORD day; + WORD hour; + WORD min; + WORD sec; +} DATETIME; + +typedef struct _tagIMEPROA { + HWND hWnd; + DATETIME InstDate; + UINT wVersion; + BYTE szDescription[50]; + BYTE szName[80]; + BYTE szOptions[30]; +} IMEPROA,*PIMEPROA,*NPIMEPROA,FAR *LPIMEPROA; +typedef struct _tagIMEPROW { + HWND hWnd; + DATETIME InstDate; + UINT wVersion; + WCHAR szDescription[50]; + WCHAR szName[80]; + WCHAR szOptions[30]; +} IMEPROW,*PIMEPROW,*NPIMEPROW,FAR *LPIMEPROW; +typedef_tident(IMEPRO) +typedef_tident(NPIMEPRO) +typedef_tident(LPIMEPRO) +typedef_tident(PIMEPRO) + +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_tident(CPINFOEX) +typedef_tident(LPCPINFOEX) + +typedef struct _RTL_RANGE_LIST { + LIST_ENTRY ListHead; + ULONG Flags; + ULONG Count; + ULONG Stamp; +} RTL_RANGE_LIST, *PRTL_RANGE_LIST; + +typedef struct _RTL_RANGE { + ULONGLONG Start; + ULONGLONG End; + PVOID UserData; + PVOID Owner; + UCHAR Attributes; + UCHAR Flags; +} RTL_RANGE, *PRTL_RANGE; + +typedef +BOOLEAN +(CALLBACK *PRTL_CONFLICT_RANGE_CALLBACK) ( +PVOID Context, +PRTL_RANGE Range + ); + +typedef struct _RANGE_LIST_ITERATOR { + PLIST_ENTRY RangeListHead; + PLIST_ENTRY MergedHead; + PVOID Current; + ULONG Stamp; +} RTL_RANGE_LIST_ITERATOR, *PRTL_RANGE_LIST_ITERATOR; + +typedef struct tagCBT_CREATEWNDA { + LPCREATESTRUCTA lpcs; + HWND hwndInsertAfter; +} CBT_CREATEWNDA; + +typedef struct tagCBT_CREATEWNDW { + LPCREATESTRUCTW lpcs; + HWND hwndInsertAfter; +} CBT_CREATEWNDW; + +typedef_tident(CBT_CREATEWND) typedef struct tagCBTACTIVATESTRUCT { WINBOOL fMouse; @@ -427,7 +547,19 @@ typedef struct _CHAR_INFO { WORD Attributes; } CHAR_INFO, *PCHAR_INFO; -typedef struct _charformat { +typedef struct _charformatA { + 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; @@ -436,8 +568,10 @@ typedef struct _charformat { COLORREF crTextColor; BYTE bCharSet; BYTE bPitchAndFamily; - TCHAR szFaceName[LF_FACESIZE]; -} CHARFORMAT; + WCHAR szFaceName[LF_FACESIZE]; +} CHARFORMATW; + +typedef_tident(CHARFORMAT) typedef struct _charrange { LONG cpMin; @@ -460,6 +594,33 @@ typedef struct { FONTSIGNATURE fs; } CHARSETINFO, *LPCHARSETINFO; +typedef struct tagWCRANGE +{ + WCHAR wcLow; + USHORT cGlyphs; +} WCRANGE, *PWCRANGE,FAR *LPWCRANGE; + +typedef struct tagGLYPHSET +{ + DWORD cbThis; + DWORD flAccel; + DWORD cGlyphsSupported; + DWORD cRanges; + WCRANGE ranges[1]; +} GLYPHSET, *PGLYPHSET, FAR *LPGLYPHSET; + +typedef struct { + DWORD lStructSize; + HWND hwndOwner; + HWND hInstance; + COLORREF rgbResult; + COLORREF* lpCustColors; + DWORD Flags; + LPARAM lCustData; + LPCCHOOKPROC lpfnHook; + LPCSTR lpTemplateName; +} CHOOSECOLORA, *LPCHOOSECOLORA; + typedef struct { DWORD lStructSize; HWND hwndOwner; @@ -469,8 +630,17 @@ typedef struct { DWORD Flags; LPARAM lCustData; LPCCHOOKPROC lpfnHook; - LPCTSTR lpTemplateName; -} CHOOSECOLOR, *LPCHOOSECOLOR; + LPCWSTR lpTemplateName; +} CHOOSECOLORW, *LPCHOOSECOLORW; + +typedef_tident(CHOOSECOLOR) +typedef_tident(LPCHOOSECOLOR) + +typedef struct _OBJECT_TYPE_LIST { + WORD Level; + WORD Sbz; + GUID *ObjectType; +} OBJECT_TYPE_LIST, *POBJECT_TYPE_LIST; typedef struct tagLOGFONTA { LONG lfHeight; @@ -506,15 +676,69 @@ typedef struct tagLOGFONTW { WCHAR lfFaceName[LF_FACESIZE]; } LOGFONTW, *LPLOGFONTW, *PLOGFONTW; -#ifdef UNICODE -typedef LOGFONTW LOGFONT; -typedef LPLOGFONTW LPLOGFONT; -typedef PLOGFONTW PLOGFONT; -#else -typedef LOGFONTA LOGFONT; -typedef LPLOGFONTA LPLOGFONT; -typedef PLOGFONTA PLOGFONT; -#endif +typedef_tident(LOGFONT) +typedef_tident(LPLOGFONT) +typedef_tident(PLOGFONT) + +typedef struct tagRAWINPUTHEADER { + DWORD dwType; + DWORD dwSize; + HANDLE hDevice; + WPARAM wParam; +} RAWINPUTHEADER, *PRAWINPUTHEADER, *LPRAWINPUTHEADER; + +typedef struct tagRAWINPUTDEVICELIST { + HANDLE hDevice; + DWORD dwType; +} RAWINPUTDEVICELIST, *PRAWINPUTDEVICELIST; + +typedef struct tagRAWINPUTDEVICE { + USHORT usUsagePage; + USHORT usUsage; + DWORD dwFlags; + HWND hwndTarget; +} RAWINPUTDEVICE, *PRAWINPUTDEVICE, *LPRAWINPUTDEVICE; + +typedef CONST RAWINPUTDEVICE* PCRAWINPUTDEVICE; + +typedef struct tagRAWMOUSE { + USHORT usFlags; + union { + ULONG ulButtons; + 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[1]; +} RAWHID, *PRAWHID, *LPRAWHID; + +typedef struct tagRAWINPUT { + RAWINPUTHEADER header; + union { + RAWMOUSE mouse; + RAWKEYBOARD keyboard; + RAWHID hid; + } data; +} RAWINPUT, *PRAWINPUT, *LPRAWINPUT; typedef struct tagCHOOSEFONTA { DWORD lStructSize; @@ -554,13 +778,8 @@ typedef struct tagCHOOSEFONTW { INT nSizeMax; } CHOOSEFONTW, *LPCHOOSEFONTW; -#ifdef UNICODE -typedef CHOOSEFONTW CHOOSEFONT; -typedef LPCHOOSEFONTW LPCHOOSEFONT; -#else -typedef CHOOSEFONTA CHOOSEFONT; -typedef LPCHOOSEFONTA LPCHOOSEFONT; -#endif +typedef_tident(CHOOSEFONT) +typedef_tident(LPCHOOSEFONT) typedef struct _IDA { UINT cidl; @@ -678,14 +897,16 @@ typedef struct _COMMTIMEOUTS { } COMMTIMEOUTS,*LPCOMMTIMEOUTS; typedef struct tagCOMPAREITEMSTRUCT { - UINT CtlType; - UINT CtlID; - HWND hwndItem; - UINT itemID1; - DWORD itemData1; - UINT itemID2; - DWORD itemData2; -} COMPAREITEMSTRUCT; + UINT CtlType; + UINT CtlID; + HWND hwndItem; + UINT itemID1; + DWORD itemData1; + UINT itemID2; + DWORD itemData2; + DWORD dwLocaleId; +} COMPAREITEMSTRUCT,*LPCOMPAREITEMSTRUCT; + typedef struct { COLORREF crText; @@ -749,6 +970,39 @@ typedef struct tagCOPYDATASTRUCT { PVOID lpData; } COPYDATASTRUCT; +typedef struct tagACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA { + PVOID lpInformation; + PVOID lpSectionBase; + ULONG ulSectionLength; + PVOID lpSectionGlobalDataBase; + ULONG ulSectionGlobalDataLength; +} ACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA, *PACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA; +typedef const ACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA *PCACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA; + +typedef struct tagACTCTX_SECTION_KEYED_DATA { + ULONG cbSize; + ULONG ulDataFormatVersion; + PVOID lpData; + ULONG ulLength; + PVOID lpSectionGlobalData; + ULONG ulSectionGlobalDataLength; + PVOID lpSectionBase; + ULONG ulSectionTotalLength; + HANDLE hActCtx; + ULONG ulAssemblyRosterIndex; +// 2600 stops here + ULONG ulFlags; + ACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA AssemblyMetadata; +} ACTCTX_SECTION_KEYED_DATA, *PACTCTX_SECTION_KEYED_DATA; +typedef const ACTCTX_SECTION_KEYED_DATA * PCACTCTX_SECTION_KEYED_DATA; + +typedef struct tagRTL_BITMAP_RUN { + ULONG StartOfRun; + ULONG SizeOfRun; +} RTL_BITMAP_RUN, *PRTL_BITMAP_RUN; + +typedef const RTL_BITMAP *PCRTL_BITMAP; + typedef struct _cpinfo { UINT MaxCharSize; BYTE DefaultChar[MAX_DEFAULTCHAR]; @@ -798,16 +1052,133 @@ typedef struct _CSADDR_INFO { } CSADDR_INFO; */ -typedef struct _currencyfmt { +typedef struct { + UINT cbSize; + HDESK hdesk; + HWND hwnd; + LUID luid; +} BSMINFO, *PBSMINFO; + +typedef struct _currencyfmtA { + UINT NumDigits; + UINT LeadingZero; + UINT Grouping; + LPSTR lpDecimalSep; + LPSTR lpThousandSep; + UINT NegativeOrder; + UINT PositiveOrder; + LPSTR lpCurrencySymbol; +} CURRENCYFMTA; + +typedef struct _currencyfmtW { UINT NumDigits; UINT LeadingZero; UINT Grouping; - LPTSTR lpDecimalSep; - LPTSTR lpThousandSep; + LPWSTR lpDecimalSep; + LPWSTR lpThousandSep; UINT NegativeOrder; UINT PositiveOrder; - LPTSTR lpCurrencySymbol; -} CURRENCYFMT; + LPWSTR lpCurrencySymbol; +} CURRENCYFMTW; + +typedef_tident(CURRENCYFMT) + +typedef struct _SERVICE_DESCRIPTIONA { + LPSTR lpDescription; +} SERVICE_DESCRIPTIONA, *LPSERVICE_DESCRIPTIONA; +typedef struct _SERVICE_DESCRIPTIONW { + LPWSTR lpDescription; +} SERVICE_DESCRIPTIONW, *LPSERVICE_DESCRIPTIONW; +typedef_tident(SERVICE_DESCRIPTION) +typedef_tident(LPSERVICE_DESCRIPTION) + +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; + +typedef_tident(SERVICE_FAILURE_ACTIONS) +typedef_tident(LPSERVICE_FAILURE_ACTIONS) + +typedef struct tagACTCTXA { + ULONG cbSize; + DWORD dwFlags; + LPCSTR lpSource; + USHORT wProcessorArchitecture; + LANGID wLangId; + LPCSTR lpAssemblyDirectory; + LPCSTR lpResourceName; + LPCSTR lpApplicationName; + HMODULE hModule; +} ACTCTXA, *PACTCTXA; + +typedef struct tagACTCTXW { + ULONG cbSize; + DWORD dwFlags; + LPCWSTR lpSource; + USHORT wProcessorArchitecture; + LANGID wLangId; + LPCWSTR lpAssemblyDirectory; + LPCWSTR lpResourceName; + LPCWSTR lpApplicationName; + HMODULE hModule; +} ACTCTXW, *PACTCTXW; + +typedef struct _JOB_SET_ARRAY { + HANDLE JobHandle; + DWORD MemberLevel; + DWORD Flags; +} JOB_SET_ARRAY, *PJOB_SET_ARRAY; + +typedef struct _MEMORYSTATUSEX { + DWORD dwLength; + DWORD dwMemoryLoad; + DWORDLONG ullTotalPhys; + DWORDLONG ullAvailPhys; + DWORDLONG ullTotalPageFile; + DWORDLONG ullAvailPageFile; + DWORDLONG ullTotalVirtual; + DWORDLONG ullAvailVirtual; + DWORDLONG ullAvailExtendedVirtual; +} MEMORYSTATUSEX, *LPMEMORYSTATUSEX; + +typedef const ACTCTXA *PCACTCTXA; +typedef const ACTCTXW *PCACTCTXW; +typedef_tident(ACTCTX) +typedef_tident(PACTCTX) + +typedef struct _TRIVERTEX +{ + LONG x; + LONG y; + COLOR16 Red; + COLOR16 Green; + COLOR16 Blue; + COLOR16 Alpha; +}TRIVERTEX,*PTRIVERTEX,*LPTRIVERTEX; typedef struct tagCURSORSHAPE { int xHotSpot; @@ -834,9 +1205,15 @@ typedef struct tagCWPSTRUCT { HWND hwnd; } CWPSTRUCT; -typedef struct _DATATYPES_INFO_1 { - LPTSTR pName; -} DATATYPES_INFO_1; +typedef struct _DATATYPES_INFO_1A { + LPSTR pName; +} DATATYPES_INFO_1A; + +typedef struct _DATATYPES_INFO_1W { + LPWSTR pName; +} DATATYPES_INFO_1W; + +typedef_tident(DATATYPES_INFO_1) typedef struct { unsigned short bAppReturnCode:8, @@ -1037,7 +1414,7 @@ typedef struct { short cx; short cy; WORD id; -} DLGITEMTEMPLATE PACKED; +} PACKED DLGITEMTEMPLATE; typedef DLGITEMTEMPLATE *LPDLGITEMTEMPLATE; typedef DLGITEMTEMPLATE *PDLGITEMTEMPLATE; @@ -1050,32 +1427,61 @@ typedef struct { short y; short cx; short cy; -} DLGTEMPLATE PACKED; +} PACKED DLGTEMPLATE; typedef DLGTEMPLATE *LPDLGTEMPLATE; typedef const DLGTEMPLATE *LPCDLGTEMPLATE; -typedef struct _DOC_INFO_1 { - LPTSTR pDocName; - LPTSTR pOutputFile; - LPTSTR pDatatype; -} DOC_INFO_1; +typedef struct _DOC_INFO_1A { + LPSTR pDocName; + LPSTR pOutputFile; + LPSTR pDatatype; +} DOC_INFO_1A; + +typedef struct _DOC_INFO_1W { + LPWSTR pDocName; + LPWSTR pOutputFile; + LPWSTR pDatatype; +} DOC_INFO_1W; + +typedef_tident(DOC_INFO_1) + +typedef struct _DOC_INFO_2A { + LPSTR pDocName; + LPSTR pOutputFile; + LPSTR pDatatype; + DWORD dwMode; + DWORD JobId; +} DOC_INFO_2A; -typedef struct _DOC_INFO_2 { - LPTSTR pDocName; - LPTSTR pOutputFile; - LPTSTR pDatatype; +typedef struct _DOC_INFO_2W { + LPWSTR pDocName; + LPWSTR pOutputFile; + LPWSTR pDatatype; DWORD dwMode; DWORD JobId; -} DOC_INFO_2; +} DOC_INFO_2W; + +typedef_tident(DOC_INFO_2) + +typedef struct { + int cbSize; + LPCSTR lpszDocName; + LPCSTR lpszOutput; + LPCSTR lpszDatatype; + DWORD fwType; +} DOCINFOA, *PDOCINFOA; typedef struct { int cbSize; - LPCTSTR lpszDocName; - LPCTSTR lpszOutput; - LPCTSTR lpszDatatype; + LPCWSTR lpszDocName; + LPCWSTR lpszOutput; + LPCWSTR lpszDatatype; DWORD fwType; -} DOCINFO, *PDOCINFO; +} DOCINFOW, *PDOCINFOW; + +typedef_tident(DOCINFO) +typedef_tident(PDOCINFO) typedef struct { UINT uNotification; @@ -1105,31 +1511,93 @@ typedef struct { -typedef struct _DRIVER_INFO_1 { - LPTSTR pName; -} DRIVER_INFO_1; +typedef struct _EXTTEXTMETRIC + { + short emSize; + short emPointSize; + short emOrientation; + short emMasterHeight; + short emMinScale; + short emMaxScale; + short emMasterUnits; + short emCapHeight; + short emXHeight; + short emLowerCaseAscent; + short emLowerCaseDescent; + short emSlant; + short emSuperScript; + short emSubScript; + short emSuperScriptSize; + short emSubScriptSize; + short emUnderlineOffset; + short emUnderlineWidth; + short emDoubleUpperUnderlineOffset; + short emDoubleLowerUnderlineOffset; + short emDoubleUpperUnderlineWidth; + short emDoubleLowerUnderlineWidth; + short emStrikeOutOffset; + short emStrikeOutWidth; + WORD emKernPairs; + WORD emKernTracks; +} EXTTEXTMETRIC, *PEXTTEXTMETRIC; + +typedef struct _DRIVER_INFO_1A { + LPSTR pName; +} DRIVER_INFO_1A; + +typedef struct _DRIVER_INFO_1W { + LPWSTR pName; +} DRIVER_INFO_1W; + +typedef_tident(DRIVER_INFO_1) + +typedef struct _DRIVER_INFO_2A { + DWORD cVersion; + LPSTR pName; + LPSTR pEnvironment; + LPSTR pDriverPath; + LPSTR pDataFile; + LPSTR pConfigFile; +} DRIVER_INFO_2A; + +typedef struct _DRIVER_INFO_2W { + DWORD cVersion; + LPWSTR pName; + LPWSTR pEnvironment; + LPWSTR pDriverPath; + LPWSTR pDataFile; + LPWSTR pConfigFile; +} DRIVER_INFO_2W; + +typedef_tident(DRIVER_INFO_2) -typedef struct _DRIVER_INFO_2 { +typedef struct _DRIVER_INFO_3A { DWORD cVersion; - LPTSTR pName; - LPTSTR pEnvironment; - LPTSTR pDriverPath; - LPTSTR pDataFile; - LPTSTR pConfigFile; -} DRIVER_INFO_2; - -typedef struct _DRIVER_INFO_3 { + LPSTR pName; + LPSTR pEnvironment; + LPSTR pDriverPath; + LPSTR pDataFile; + LPSTR pConfigFile; + LPSTR pHelpFile; + LPSTR pDependentFiles; + LPSTR pMonitorName; + LPSTR pDefaultDataType; +} DRIVER_INFO_3A; + +typedef struct _DRIVER_INFO_3W { DWORD cVersion; - LPTSTR pName; - LPTSTR pEnvironment; - LPTSTR pDriverPath; - LPTSTR pDataFile; - LPTSTR pConfigFile; - LPTSTR pHelpFile; - LPTSTR pDependentFiles; - LPTSTR pMonitorName; - LPTSTR pDefaultDataType; -} DRIVER_INFO_3; + LPWSTR pName; + LPWSTR pEnvironment; + LPWSTR pDriverPath; + LPWSTR pDataFile; + LPWSTR pConfigFile; + LPWSTR pHelpFile; + LPWSTR pDependentFiles; + LPWSTR pMonitorName; + LPWSTR pDefaultDataType; +} DRIVER_INFO_3W; + +typedef_tident(DRIVER_INFO_3) typedef struct _editstream { DWORD dwCookie; @@ -1208,7 +1676,21 @@ typedef struct tagEMRCREATEBRUSHINDIRECT typedef LONG LCSCSTYPE; typedef LONG LCSGAMUTMATCH; -typedef struct tagLOGCOLORSPACE { +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; @@ -1219,15 +1701,27 @@ typedef struct tagLOGCOLORSPACE { DWORD lcsGammaRed; DWORD lcsGammaGreen; DWORD lcsGammaBlue; - TCHAR lcsFilename[MAX_PATH]; -} LOGCOLORSPACE, *LPLOGCOLORSPACE; + WCHAR lcsFilename[MAX_PATH]; +} LOGCOLORSPACEW, *LPLOGCOLORSPACEW; + +typedef_tident(LOGCOLORSPACE) + +typedef struct tagEMRCREATECOLORSPACEA +{ + EMR emr; + DWORD ihCS; + LOGCOLORSPACEA lcs; +} EMRCREATECOLORSPACEA, *PEMRCREATECOLORSPACEA; -typedef struct tagEMRCREATECOLORSPACE +typedef struct tagEMRCREATECOLORSPACEW { - EMR emr; - DWORD ihCS; - LOGCOLORSPACE lcs; -} EMRCREATECOLORSPACE, *PEMRCREATECOLORSPACE; + EMR emr; + DWORD ihCS; + LOGCOLORSPACEW lcs; +} EMRCREATECOLORSPACEW, *PEMRCREATECOLORSPACEW; + +typedef_tident(EMRCREATECOLORSPACE) +typedef_tident(PEMRCREATECOLORSPACE) typedef struct tagEMRCREATEDIBPATTERNBRUSHPT { @@ -1322,8 +1816,8 @@ typedef struct tagPANOSE { typedef struct tagEXTLOGFONTA { LOGFONTA elfLogFont; - BCHAR elfFullName[LF_FULLFACESIZE]; - BCHAR elfStyle[LF_FACESIZE]; + CHAR elfFullName[LF_FULLFACESIZE]; + CHAR elfStyle[LF_FACESIZE]; DWORD elfVersion; DWORD elfStyleSize; DWORD elfMatch; @@ -1346,13 +1840,8 @@ typedef struct tagEXTLOGFONTW { PANOSE elfPanose; } EXTLOGFONTW, *LPEXTLOGFONTW; -#ifdef UNICODE -typedef EXTLOGFONTW EXTLOGFONT; -typedef LPEXTLOGFONTW LPEXTLOGFONT; -#else -typedef EXTLOGFONTA EXTLOGFONT; -typedef LPEXTLOGFONTA LPEXTLOGFONT; -#endif +typedef_tident(EXTLOGFONT) +typedef_tident(LPEXTLOGFONT) typedef struct tagEMREXTCREATEFONTINDIRECTW { @@ -1876,6 +2365,10 @@ typedef struct tagENHMETAHEADER { DWORD nPalEntries; SIZEL szlDevice; SIZEL szlMillimeters; + DWORD cbPixelFormat; + DWORD offPixelFormat; + DWORD bOpenGL; + SIZEL szlMicrometers; } ENHMETAHEADER, *LPENHMETAHEADER; typedef struct tagENHMETARECORD { @@ -1902,6 +2395,18 @@ typedef struct _SERVICE_STATUS { 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 struct _ENUM_SERVICE_STATUSA { LPSTR lpServiceName; LPSTR lpDisplayName; @@ -1914,18 +2419,28 @@ typedef struct _ENUM_SERVICE_STATUSW { SERVICE_STATUS ServiceStatus; } ENUM_SERVICE_STATUSW, *LPENUM_SERVICE_STATUSW; -#ifdef UNICODE -#define ENUM_SERVICE_STATUS ENUM_SERVICE_STATUSW -#define LPENUM_SERVICE_STATUS LPENUM_SERVICE_STATUSW -#else -#define ENUM_SERVICE_STATUS ENUM_SERVICE_STATUSA -#define LPENUM_SERVICE_STATUS LPENUM_SERVICE_STATUSA -#endif +typedef_tident(ENUM_SERVICE_STATUS) +typedef_tident(LPENUM_SERVICE_STATUS) + +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_tident(ENUM_SERVICE_STATUS_PROCESS) +typedef_tident(LPENUM_SERVICE_STATUS_PROCESS) typedef struct tagENUMLOGFONTA { LOGFONTA elfLogFont; - BCHAR elfFullName[LF_FULLFACESIZE]; - BCHAR elfStyle[LF_FACESIZE]; + CHAR elfFullName[LF_FULLFACESIZE]; + CHAR elfStyle[LF_FACESIZE]; } ENUMLOGFONTA, *LPENUMLOGFONTA; typedef struct tagENUMLOGFONTW { @@ -1934,19 +2449,14 @@ typedef struct tagENUMLOGFONTW { WCHAR elfStyle[LF_FACESIZE]; } ENUMLOGFONTW, *LPENUMLOGFONTW; -#ifdef UNICODE -typedef ENUMLOGFONTW ENUMLOGFONT; -typedef LPENUMLOGFONTW LPENUMLOGFONT; -#else -typedef ENUMLOGFONTA ENUMLOGFONT; -typedef LPENUMLOGFONTA LPENUMLOGFONT; -#endif +typedef_tident(ENUMLOGFONT) +typedef_tident(LPENUMLOGFONT) typedef struct tagENUMLOGFONTEXA { LOGFONTA elfLogFont; - BCHAR elfFullName[LF_FULLFACESIZE]; - BCHAR elfStyle[LF_FACESIZE]; - BCHAR elfScript[LF_FACESIZE]; + CHAR elfFullName[LF_FULLFACESIZE]; + CHAR elfStyle[LF_FACESIZE]; + CHAR elfScript[LF_FACESIZE]; } ENUMLOGFONTEXA, *LPENUMLOGFONTEXA; typedef struct tagENUMLOGFONTEXW { @@ -1956,13 +2466,30 @@ typedef struct tagENUMLOGFONTEXW { WCHAR elfScript[LF_FACESIZE]; } ENUMLOGFONTEXW, *LPENUMLOGFONTEXW; -#ifdef UNICODE -typedef ENUMLOGFONTEXW ENUMLOGFONTEX; -typedef LPENUMLOGFONTEXW LPENUMLOGFONTEX; -#else -typedef ENUMLOGFONTEXA ENUMLOGFONTEX; -typedef LPENUMLOGFONTEXA LPENUMLOGFONTEX; -#endif +typedef_tident(ENUMLOGFONTEX) +typedef_tident(LPENUMLOGFONTEX) + +typedef struct tagDESIGNVECTOR +{ + DWORD dvReserved; + DWORD dvNumAxes; + LONG dvValues[MM_MAX_NUMAXES]; +} DESIGNVECTOR, *PDESIGNVECTOR, FAR *LPDESIGNVECTOR; + +typedef struct tagENUMLOGFONTEXDVA +{ + ENUMLOGFONTEXA elfEnumLogfontEx; + DESIGNVECTOR elfDesignVector; +} ENUMLOGFONTEXDVA, *PENUMLOGFONTEXDVA, FAR *LPENUMLOGFONTEXDVA; +typedef struct tagENUMLOGFONTEXDVW +{ + ENUMLOGFONTEXW elfEnumLogfontEx; + DESIGNVECTOR elfDesignVector; +} ENUMLOGFONTEXDVW, *PENUMLOGFONTEXDVW, FAR *LPENUMLOGFONTEXDVW; + +typedef_tident(ENUMLOGFONTEXDV) +typedef_tident(PENUMLOGFONTEXDV) +typedef_tident(LPENUMLOGFONTEXDV) typedef struct _EVENTLOGRECORD { DWORD Length; @@ -2058,14 +2585,31 @@ typedef struct { HWND hwndOwner; HINSTANCE hInstance; DWORD Flags; - LPTSTR lpstrFindWhat; - LPTSTR lpstrReplaceWith; + 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; + LPARAM lCustData; LPFRHOOKPROC lpfnHook; - LPCTSTR lpTemplateName; -} FINDREPLACE, *LPFINDREPLACE; + LPCWSTR lpTemplateName; +} FINDREPLACEW, *LPFINDREPLACEW; + +typedef_tident(FINDREPLACE) +typedef_tident(LPFINDREPLACE) typedef struct _findtext { CHARRANGE chrg; @@ -2078,27 +2622,55 @@ typedef struct _findtextex { CHARRANGE chrgText; } FINDTEXTEX; -typedef struct _FMS_GETDRIVEINFO { +typedef struct _FMS_GETDRIVEINFOA { + DWORD dwTotalSpace; + DWORD dwFreeSpace; + CHAR szPath[260]; + CHAR szVolume[14]; + CHAR szShare[128]; +} FMS_GETDRIVEINFOA; + +typedef struct _FMS_GETDRIVEINFOW { DWORD dwTotalSpace; DWORD dwFreeSpace; - TCHAR szPath[260]; - TCHAR szVolume[14]; - TCHAR szShare[128]; -} FMS_GETDRIVEINFO; + WCHAR szPath[260]; + WCHAR szVolume[14]; + WCHAR szShare[128]; +} FMS_GETDRIVEINFOW; + +typedef_tident(FMS_GETDRIVEINFO) + +typedef struct _FMS_GETFILESELA { + FILETIME ftTime; + DWORD dwSize; + BYTE bAttr; + CHAR szName[260]; +} FMS_GETFILESELA; -typedef struct _FMS_GETFILESEL { +typedef struct _FMS_GETFILESELW { FILETIME ftTime; DWORD dwSize; BYTE bAttr; - TCHAR szName[260]; -} FMS_GETFILESEL; + WCHAR szName[260]; +} FMS_GETFILESELW; + +typedef_tident(FMS_GETFILESEL) + +typedef struct _FMS_LOADA { + DWORD dwSize; + CHAR szMenuName[MENU_TEXT_LEN]; + HMENU hMenu; + UINT wMenuDelta; +} FMS_LOADA; -typedef struct _FMS_LOAD { +typedef struct _FMS_LOADW { DWORD dwSize; - TCHAR szMenuName[MENU_TEXT_LEN]; + WCHAR szMenuName[MENU_TEXT_LEN]; HMENU hMenu; UINT wMenuDelta; -} FMS_LOAD; +} FMS_LOADW; + +typedef_tident(FMS_LOAD) typedef struct _FMS_TOOLBARLOAD { DWORD dwSize; @@ -2110,12 +2682,21 @@ typedef struct _FMS_TOOLBARLOAD { } FMS_TOOLBARLOAD; -typedef struct _FORM_INFO_1 { - DWORD Flags; - LPTSTR pName; +typedef struct _FORM_INFO_1A { + DWORD Flags; + LPSTR pName; + SIZEL Size; + RECTL ImageableArea; +} FORM_INFO_1A; + +typedef struct _FORM_INFO_1W { + DWORD Flags; + LPWSTR pName; SIZEL Size; RECTL ImageableArea; -} FORM_INFO_1; +} FORM_INFO_1W; + +typedef_tident(FORM_INFO_1) typedef struct _FORMAT_PARAMETERS { MEDIA_TYPE MediaType; @@ -2133,17 +2714,31 @@ typedef struct _formatrange { CHARRANGE chrg; } FORMATRANGE; -typedef struct tagGCP_RESULTS { +typedef struct tagGCP_RESULTSA { + DWORD lStructSize; + LPSTR lpOutString; + UINT *lpOrder; + INT *lpDx; + INT *lpCaretPos; + LPSTR lpClass; + UINT *lpGlyphs; + UINT nGlyphs; + UINT nMaxFit; +} GCP_RESULTSA, *LPGCP_RESULTSA; + +typedef struct tagGCP_RESULTSW { DWORD lStructSize; - LPTSTR lpOutString; + LPWSTR lpOutString; UINT *lpOrder; INT *lpDx; INT *lpCaretPos; - LPTSTR lpClass; + LPWSTR lpClass; UINT *lpGlyphs; UINT nGlyphs; UINT nMaxFit; -} GCP_RESULTS, *LPGCP_RESULTS; +} GCP_RESULTSW, *LPGCP_RESULTSW; + +typedef_tident(GCP_RESULTS) typedef struct _GLYPHMETRICS { @@ -2164,15 +2759,27 @@ typedef struct _HD_HITTESTINFO { int iItem; } HD_HITTESTINFO; -typedef struct _HD_ITEM { +typedef struct _HD_ITEMA { + UINT mask; + int cxy; + LPSTR pszText; + HBITMAP hbm; + int cchTextMax; + int fmt; + LPARAM lParam; +} HD_ITEMA; + +typedef struct _HD_ITEMW { UINT mask; int cxy; - LPTSTR pszText; + LPWSTR pszText; HBITMAP hbm; int cchTextMax; int fmt; LPARAM lParam; -} HD_ITEM; +} HD_ITEMW; + +typedef_tident(HD_ITEM) typedef struct _WINDOWPOS { HWND hwnd; @@ -2189,12 +2796,21 @@ typedef struct _HD_LAYOUT { WINDOWPOS * pwpos; } HD_LAYOUT; -typedef struct _HD_NOTIFY { - NMHDR hdr; - int iItem; - int iButton; - HD_ITEM * pitem; -} HD_NOTIFY; +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; + +typedef_tident(HD_NOTIFY) typedef struct tagHELPINFO { UINT cbSize; @@ -2205,27 +2821,21 @@ typedef struct tagHELPINFO { POINT MousePos; } HELPINFO, *LPHELPINFO; -typedef struct { +typedef struct tagMULTIKEYHELPA { DWORD mkSize; CHAR mkKeyList; CHAR szKeyphrase[1]; } MULTIKEYHELPA, *PMULTIKEYHELPA, *LPMULTIKEYHELPA; -typedef struct { +typedef struct tagMULTIKEYHELPW { DWORD mkSize; WCHAR mkKeyList; WCHAR szKeyphrase[1]; } MULTIKEYHELPW, *PMULTIKEYHELPW, *LPMULTIKEYHELPW; -typedef struct { - int wStructSize; - int x; - int y; - int dx; - int dy; - int wMax; - TCHAR rgchMember[2]; -} HELPWININFO; +typedef_tident(MULTIKEYHELP) +typedef_tident(PMULTIKEYHELP) +typedef_tident(LPMULTIKEYHELP) typedef struct { int wStructSize; @@ -2247,12 +2857,24 @@ typedef struct { WCHAR rgchMember[2]; } HELPWININFOW, *PHELPWININFOW, *LPHELPWININFOW; +typedef_tident(HELPWININFO) +typedef_tident(PHELPWININFO) +typedef_tident(LPHELPWININFO) + +typedef struct tagHIGHCONTRASTA { + UINT cbSize; + DWORD dwFlags; + LPSTR lpszDefaultScheme; +} HIGHCONTRASTA, *LPHIGHCONTRASTA; -typedef struct tagHIGHCONTRAST { +typedef struct tagHIGHCONTRASTW { UINT cbSize; DWORD dwFlags; - LPTSTR lpszDefaultScheme; -} HIGHCONTRAST, * LPHIGHCONTRAST; + LPWSTR lpszDefaultScheme; +} HIGHCONTRASTW, *LPHIGHCONTRASTW; + +typedef_tident(HIGHCONTRAST) +typedef_tident(LPHIGHCONTRAST) typedef struct tagHSZPAIR { HSZ hszSvc; @@ -2283,13 +2905,8 @@ typedef struct tagICONMETRICSW { LOGFONTW lfFont; } ICONMETRICSW, *LPICONMETRICSW; -#ifdef UNICODE -typedef ICONMETRICSW ICONMETRICS; -typedef LPICONMETRICSW LPICONMETRICS; -#else -typedef ICONMETRICSA ICONMETRICS; -typedef LPICONMETRICSA LPICONMETRICS; -#endif +typedef_tident(ICONMETRICS) +typedef_tident(LPICONMETRICS) typedef struct _IMAGEINFO { HBITMAP hbmImage; @@ -2299,36 +2916,54 @@ typedef struct _IMAGEINFO { RECT rcImage; } IMAGEINFO; -typedef struct _JOB_INFO_1 { +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; + +typedef struct _JOB_INFO_1W { DWORD JobId; - LPTSTR pPrinterName; - LPTSTR pMachineName; - LPTSTR pUserName; - LPTSTR pDocument; - LPTSTR pDatatype; - LPTSTR pStatus; + 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_1; +} JOB_INFO_1W; + +typedef_tident(JOB_INFO_1) #if 0 -typedef struct _JOB_INFO_2 { +typedef struct _JOB_INFO_2A { DWORD JobId; - LPTSTR pPrinterName; - LPTSTR pMachineName; - LPTSTR pUserName; - LPTSTR pDocument; - LPTSTR pNotifyName; - LPTSTR pDatatype; - LPTSTR pPrintProcessor; - LPTSTR pParameters; - LPTSTR pDriverName; + LPSTR pPrinterName; + LPSTR pMachineName; + LPSTR pUserName; + LPSTR pDocument; + LPSTR pNotifyName; + LPSTR pDatatype; + LPSTR pPrintProcessor; + LPSTR pParameters; + LPSTR pDriverName; LPDEVMODE pDevMode; - LPTSTR pStatus; + LPSTR pStatus; PSECURITY_DESCRIPTOR pSecurityDescriptor; DWORD Status; DWORD Priority; @@ -2340,8 +2975,36 @@ typedef struct _JOB_INFO_2 { SYSTEMTIME Submitted; DWORD Time; DWORD PagesPrinted ; -} JOB_INFO_2; -#endif +} JOB_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; + LPDEVMODE 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; + +typedef_tident(JOB_INFO_2) +#endif/*0*/ typedef struct tagKERNINGPAIR { WORD wFirst; @@ -2354,30 +3017,6 @@ typedef struct _LANA_ENUM { UCHAR lana[MAX_LANA]; } LANA_ENUM; -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 tagLOCALESIGNATURE { DWORD lsUsb[4]; @@ -2402,39 +3041,81 @@ typedef long FXPT16DOT16, * LPFXPT16DOT16; typedef LUID_AND_ATTRIBUTES LUID_AND_ATTRIBUTES_ARRAY[ANYSIZE_ARRAY]; typedef LUID_AND_ATTRIBUTES_ARRAY *PLUID_AND_ATTRIBUTES_ARRAY; -typedef struct _LV_COLUMN { +typedef struct _LV_COLUMNA { UINT mask; int fmt; int cx; - LPTSTR pszText; + LPSTR pszText; int cchTextMax; int iSubItem; -} LV_COLUMN; +} LV_COLUMNA; -typedef struct _LV_ITEM { +typedef struct _LV_COLUMNW { + UINT mask; + int fmt; + int cx; + LPWSTR pszText; + int cchTextMax; + int iSubItem; +} LV_COLUMNW; + +typedef_tident(LV_COLUMN) + +typedef struct _LV_ITEMA { + UINT mask; + int iItem; + int iSubItem; + UINT state; + UINT stateMask; + LPSTR pszText; + int cchTextMax; + int iImage; + LPARAM lParam; +} LV_ITEMA; + +typedef struct _LV_ITEMW { UINT mask; int iItem; int iSubItem; UINT state; UINT stateMask; - LPTSTR pszText; + LPWSTR pszText; int cchTextMax; int iImage; LPARAM lParam; -} LV_ITEM; +} LV_ITEMW; -typedef struct tagLV_DISPINFO { - NMHDR hdr; - LV_ITEM item; -} LV_DISPINFO; +typedef_tident(LV_ITEM) -typedef struct _LV_FINDINFO { +typedef struct tagLV_DISPINFOA { + NMHDR hdr; + LV_ITEMA item; +} LV_DISPINFOA; + +typedef struct tagLV_DISPINFOW { + NMHDR hdr; + LV_ITEMW item; +} LV_DISPINFOW; + +typedef_tident(LV_DISPINFO) + +typedef struct _LV_FINDINFOA { + UINT flags; + LPCSTR psz; + LPARAM lParam; + POINT pt; + UINT vkDirection; +} LV_FINDINFOA; + +typedef struct _LV_FINDINFOW { UINT flags; - LPCTSTR psz; + LPCWSTR psz; LPARAM lParam; POINT pt; UINT vkDirection; -} LV_FINDINFO; +} LV_FINDINFOW; + +typedef_tident(LV_FINDINFO) typedef struct _LV_HITTESTINFO { POINT pt; @@ -2455,9 +3136,9 @@ typedef struct _MAT2 { FIXED eM22; } MAT2, *LPMAT2; -typedef struct tagMDICREATESTRUCT { - LPCTSTR szClass; - LPCTSTR szTitle; +typedef struct tagMDICREATESTRUCTA { + LPCSTR szClass; + LPCSTR szTitle; HANDLE hOwner; int x; int y; @@ -2465,14 +3146,27 @@ typedef struct tagMDICREATESTRUCT { int cy; DWORD style; LPARAM lParam; -} MDICREATESTRUCT; - -typedef MDICREATESTRUCT *LPMDICREATESTRUCT; +} MDICREATESTRUCTA, *LPMDICREATESTRUCTA; -typedef struct tagMEASUREITEMSTRUCT { - UINT CtlType; - UINT CtlID; - UINT itemID; +typedef struct tagMDICREATESTRUCTW { + LPCWSTR szClass; + LPCWSTR szTitle; + HANDLE hOwner; + int x; + int y; + int cx; + int cy; + DWORD style; + LPARAM lParam; +} MDICREATESTRUCTW, *LPMDICREATESTRUCTW; + +typedef_tident(MDICREATESTRUCT) +typedef_tident(LPMDICREATESTRUCT) + +typedef struct tagMEASUREITEMSTRUCT { + UINT CtlType; + UINT CtlID; + UINT itemID; UINT itemWidth; UINT itemHeight; DWORD itemData; @@ -2504,7 +3198,8 @@ typedef struct { DWORD dwHelpId; } MENUEX_TEMPLATE_ITEM; -typedef struct tagMENUITEMINFO { + +typedef struct tagMENUITEMINFOA { UINT cbSize; UINT fMask; UINT fType; @@ -2514,10 +3209,31 @@ typedef struct tagMENUITEMINFO { HBITMAP hbmpChecked; HBITMAP hbmpUnchecked; DWORD dwItemData; - LPTSTR dwTypeData; + LPSTR dwTypeData; UINT cch; -} MENUITEMINFO, *LPMENUITEMINFO; -typedef MENUITEMINFO CONST *LPCMENUITEMINFO; + HBITMAP hbmpItem; +} 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; + HBITMAP hbmpItem; +} MENUITEMINFOW, *LPMENUITEMINFOW; +typedef CONST MENUITEMINFOW* LPCMENUITEMINFOW; + +typedef_tident(MENUITEMINFO) +typedef_tident(LPMENUITEMINFO) +typedef_tident(LPCMENUITEMINFO) typedef struct { WORD mtOption; @@ -2532,14 +3248,10 @@ typedef struct { typedef VOID MENUTEMPLATE, *LPMENUTEMPLATE; typedef struct tagMETAFILEPICT { -#if 0 LONG mm; LONG xExt; LONG yExt; HMETAFILE hMF; -#else - LONG mm; // robd -#endif } METAFILEPICT, *PMETAFILEPICT, *LPMETAFILEPICT; typedef struct tagMETAHEADER { @@ -2550,7 +3262,7 @@ typedef struct tagMETAHEADER { WORD mtNoObjects; DWORD mtMaxRecord; WORD mtNoParameters; -} METAHEADER PACKED; +} PACKED METAHEADER; typedef struct tagMETARECORD { DWORD rdSize; @@ -2654,24 +3366,49 @@ typedef struct tagMONERRSTRUCT { HANDLE hTask; } MONERRSTRUCT; -typedef struct tagMONHSZSTRUCT { +typedef struct tagMONHSZSTRUCTA { + UINT cb; + WINBOOL fsAction; + DWORD dwTime; + HSZ hsz; + HANDLE hTask; + CHAR str[1]; +} MONHSZSTRUCTA; + +typedef struct tagMONHSZSTRUCTW { UINT cb; WINBOOL fsAction; DWORD dwTime; HSZ hsz; HANDLE hTask; - TCHAR str[1]; -} MONHSZSTRUCT; + WCHAR str[1]; +} MONHSZSTRUCTW; + +typedef_tident(MONHSZSTRUCT) + +typedef struct _MONITOR_INFO_1A { + LPSTR pName; +} MONITOR_INFO_1A; + +typedef struct _MONITOR_INFO_1W { + LPWSTR pName; +} MONITOR_INFO_1W; -typedef struct _MONITOR_INFO_1 { - LPTSTR pName; -} MONITOR_INFO_1; +typedef_tident(MONITOR_INFO_1) -typedef struct _MONITOR_INFO_2 { - LPTSTR pName; - LPTSTR pEnvironment ; - LPTSTR pDLLName ; -} MONITOR_INFO_2; +typedef struct _MONITOR_INFO_2A { + LPSTR pName; + LPSTR pEnvironment ; + LPSTR pDLLName ; +} MONITOR_INFO_2A; + +typedef struct _MONITOR_INFO_2W { + LPWSTR pName; + LPWSTR pEnvironment ; + LPWSTR pDLLName ; +} MONITOR_INFO_2W; + +typedef_tident(MONITOR_INFO_2) typedef struct tagMONLINKSTRUCT { UINT cb; @@ -2747,12 +3484,6 @@ typedef struct _msgfilter { LPARAM lParam; } MSGFILTER; -typedef struct tagMULTIKEYHELP { - DWORD mkSize; - TCHAR mkKeylist; - TCHAR szKeyphrase[1]; -} MULTIKEYHELP; - typedef struct _NAME_BUFFER { UCHAR name[NCBNAMSZ]; UCHAR name_num; @@ -2782,41 +3513,84 @@ typedef struct _NCCALCSIZE_PARAMS { PWINDOWPOS lppos; } NCCALCSIZE_PARAMS; -typedef struct _NDDESHAREINFO { +typedef struct _NDDESHAREINFOA { LONG lRevision; - LPTSTR lpszShareName; + LPSTR lpszShareName; LONG lShareType; - LPTSTR lpszAppTopicList; + LPSTR lpszAppTopicList; LONG fSharedFlag; LONG fService; LONG fStartAppFlag; LONG nCmdShow; LONG qModifyId[2]; LONG cNumItems; - LPTSTR lpszItemList; -}NDDESHAREINFO; + LPSTR lpszItemList; +}NDDESHAREINFOA; + +typedef struct _NDDESHAREINFOW { + LONG lRevision; + LPWSTR lpszShareName; + LONG lShareType; + LPWSTR lpszAppTopicList; + LONG fSharedFlag; + LONG fService; + LONG fStartAppFlag; + LONG nCmdShow; + LONG qModifyId[2]; + LONG cNumItems; + LPWSTR lpszItemList; +}NDDESHAREINFOW; + +typedef_tident(NDDESHAREINFO) + +typedef struct _NETRESOURCEA { + DWORD dwScope; + DWORD dwType; + DWORD dwDisplayType; + DWORD dwUsage; + LPSTR lpLocalName; + LPSTR lpRemoteName; + LPSTR lpComment; + LPSTR lpProvider; +} NETRESOURCEA, *LPNETRESOURCEA; -typedef struct _NETRESOURCE { +typedef struct _NETRESOURCEW { DWORD dwScope; DWORD dwType; DWORD dwDisplayType; DWORD dwUsage; - LPTSTR lpLocalName; - LPTSTR lpRemoteName; - LPTSTR lpComment; - LPTSTR lpProvider; -} NETRESOURCE, *LPNETRESOURCE; + LPWSTR lpLocalName; + LPWSTR lpRemoteName; + LPWSTR lpComment; + LPWSTR lpProvider; +} NETRESOURCEW, *LPNETRESOURCEW; + +typedef_tident(NETRESOURCE) +typedef_tident(LPNETRESOURCE) + +typedef struct tagNEWCPLINFOA { + DWORD dwSize; + DWORD dwFlags; + DWORD dwHelpContext; + LONG lData; + HICON hIcon; + CHAR szName[32]; + CHAR szInfo[64]; + CHAR szHelpFile[128]; +} NEWCPLINFOA; -typedef struct tagNEWCPLINFO { +typedef struct tagNEWCPLINFOW { DWORD dwSize; DWORD dwFlags; DWORD dwHelpContext; LONG lData; HICON hIcon; - TCHAR szName[32]; - TCHAR szInfo[64]; - TCHAR szHelpFile[128]; -} NEWCPLINFO; + WCHAR szName[32]; + WCHAR szInfo[64]; + WCHAR szHelpFile[128]; +} NEWCPLINFOW; + +typedef_tident(NEWCPLINFO) typedef struct tagNEWTEXTMETRICA { LONG tmHeight; @@ -2830,10 +3604,10 @@ typedef struct tagNEWTEXTMETRICA { LONG tmOverhang; LONG tmDigitizedAspectX; LONG tmDigitizedAspectY; - BCHAR tmFirstChar; - BCHAR tmLastChar; - BCHAR tmDefaultChar; - BCHAR tmBreakChar; + CHAR tmFirstChar; + CHAR tmLastChar; + CHAR tmDefaultChar; + CHAR tmBreakChar; BYTE tmItalic; BYTE tmUnderlined; BYTE tmStruckOut; @@ -2872,11 +3646,7 @@ typedef struct tagNEWTEXTMETRICW { UINT ntmAvgWidth; } NEWTEXTMETRICW; -#ifdef UNICODE -typedef NEWTEXTMETRICA NEWTEXTMETRIC; -#else -typedef NEWTEXTMETRICW NEWTEXTMETRIC; -#endif +typedef_tident(NEWTEXTMETRIC) typedef struct tagNEWTEXTMETRICEXA { NEWTEXTMETRICA ntmentm; @@ -2888,11 +3658,7 @@ typedef struct tagNEWTEXTMETRICEXW { FONTSIGNATURE ntmeFontSignature; } NEWTEXTMETRICEXW; -#ifdef UNICODE -typedef NEWTEXTMETRICEXA NEWTEXTMETRICEX; -#else -typedef NEWTEXTMETRICEXW NEWTEXTMETRICEX; -#endif +typedef_tident(NEWTEXTMETRICEX) typedef struct tagNM_LISTVIEW { NMHDR hdr; @@ -2907,27 +3673,54 @@ typedef struct tagNM_LISTVIEW { typedef struct _TREEITEM *HTREEITEM; -typedef struct _TV_ITEM { +typedef struct _TV_ITEMA { UINT mask; HTREEITEM hItem; UINT state; UINT stateMask; - LPTSTR pszText; + LPSTR pszText; int cchTextMax; int iImage; int iSelectedImage; int cChildren; LPARAM lParam; -} TV_ITEM, *LPTV_ITEM; +} TV_ITEMA, *LPTV_ITEMA; + +typedef struct _TV_ITEMW { + UINT mask; + HTREEITEM hItem; + UINT state; + UINT stateMask; + LPWSTR pszText; + int cchTextMax; + int iImage; + int iSelectedImage; + int cChildren; + LPARAM lParam; +} TV_ITEMW, *LPTV_ITEMW; + +typedef_tident(TV_ITEM) +typedef_tident(LPTV_ITEM) + +typedef struct _NM_TREEVIEWA { + NMHDR hdr; + UINT action; + TV_ITEMA itemOld; + TV_ITEMA itemNew; + POINT ptDrag; +} NM_TREEVIEWA, *LPNM_TREEVIEWA; -typedef struct _NM_TREEVIEW { +typedef struct _NM_TREEVIEWW { NMHDR hdr; UINT action; - TV_ITEM itemOld; - TV_ITEM itemNew; + TV_ITEMW itemOld; + TV_ITEMW itemNew; POINT ptDrag; -} NM_TREEVIEW; -typedef NM_TREEVIEW *LPNM_TREEVIEW; +} NM_TREEVIEWW, *LPNM_TREEVIEWW; + +typedef_tident(NM_TREEVIEW) +typedef_tident(LPNM_TREEVIEW) + typedef struct _NM_UPDOWN { NMHDR hdr; @@ -2971,13 +3764,8 @@ typedef struct tagNONCLIENTMETRICSW { LOGFONTW lfMessageFont; } NONCLIENTMETRICSW, *LPNONCLIENTMETRICSW; -#ifdef UNICODE -typedef NONCLIENTMETRICSW NONCLIENTMETRICS; -typedef LPNONCLIENTMETRICSW LPNONCLIENTMETRICS; -#else -typedef NONCLIENTMETRICSA NONCLIENTMETRICS; -typedef LPNONCLIENTMETRICSA LPNONCLIENTMETRICS; -#endif +typedef_tident(NONCLIENTMETRICS) +typedef_tident(LPNONCLIENTMETRICS) typedef struct _SERVICE_ADDRESS { DWORD dwAddressType; @@ -3005,32 +3793,66 @@ typedef struct _GUID typedef GUID CLSID, *LPCLSID; #endif -typedef struct _SERVICE_INFO { +typedef struct _SERVICE_INFOA { LPGUID lpServiceType; - LPTSTR lpServiceName; - LPTSTR lpComment; - LPTSTR lpLocale; + LPSTR lpServiceName; + LPSTR lpComment; + LPSTR lpLocale; DWORD dwDisplayHint; DWORD dwVersion; DWORD dwTime; - LPTSTR lpMachineName; + LPSTR lpMachineName; LPSERVICE_ADDRESSES lpServiceAddress; BLOB ServiceSpecificInfo; -} SERVICE_INFO; +} SERVICE_INFOA, *LPSERVICE_INFOA; -typedef struct _NS_SERVICE_INFO { - DWORD dwNameSpace; - SERVICE_INFO ServiceInfo; -} NS_SERVICE_INFO; +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_tident(SERVICE_INFO); +typedef_tident(LPSERVICE_INFO); -typedef struct _numberfmt { +typedef struct _NS_SERVICE_INFOA { + DWORD dwNameSpace; + SERVICE_INFOA ServiceInfo; +} NS_SERVICE_INFOA; + +typedef struct _NS_SERVICE_INFOW { + DWORD dwNameSpace; + SERVICE_INFOW ServiceInfo; +} NS_SERVICE_INFOW; + +typedef_tident(NS_SERVICE_INFO); + +typedef struct _numberfmtA { UINT NumDigits; UINT LeadingZero; UINT Grouping; - LPTSTR lpDecimalSep; - LPTSTR lpThousandSep; + LPSTR lpDecimalSep; + LPSTR lpThousandSep; UINT NegativeOrder; -} NUMBERFMT; +} NUMBERFMTA; + +typedef struct _numberfmtW { + UINT NumDigits; + UINT LeadingZero; + UINT Grouping; + LPWSTR lpDecimalSep; + LPWSTR lpThousandSep; + UINT NegativeOrder; +} NUMBERFMTW; + +typedef_tident(NUMBERFMT) typedef struct _OFSTRUCT { BYTE cBytes; @@ -3041,34 +3863,69 @@ typedef struct _OFSTRUCT { CHAR szPathName[OFS_MAXPATHNAME]; } OFSTRUCT, *LPOFSTRUCT; -typedef struct tagOFN { +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; +} OPENFILENAMEA, *LPOPENFILENAMEA; + +typedef struct tagOFNW { DWORD lStructSize; HWND hwndOwner; HINSTANCE hInstance; - LPCTSTR lpstrFilter; - LPTSTR lpstrCustomFilter; + LPCWSTR lpstrFilter; + LPWSTR lpstrCustomFilter; DWORD nMaxCustFilter; DWORD nFilterIndex; - LPTSTR lpstrFile; + LPWSTR lpstrFile; DWORD nMaxFile; - LPTSTR lpstrFileTitle; + LPWSTR lpstrFileTitle; DWORD nMaxFileTitle; - LPCTSTR lpstrInitialDir; - LPCTSTR lpstrTitle; + LPCWSTR lpstrInitialDir; + LPCWSTR lpstrTitle; DWORD Flags; WORD nFileOffset; WORD nFileExtension; - LPCTSTR lpstrDefExt; + LPCWSTR lpstrDefExt; DWORD lCustData; LPOFNHOOKPROC lpfnHook; - LPCTSTR lpTemplateName; -} OPENFILENAME, *LPOPENFILENAME; + LPCWSTR lpTemplateName; +} OPENFILENAMEW, *LPOPENFILENAMEW; + +typedef_tident(OPENFILENAME) +typedef_tident(LPOPENFILENAME) + +typedef struct _OFNOTIFYA { + NMHDR hdr; + LPOPENFILENAMEA lpOFN; + LPSTR pszFile; +} OFNOTIFYA, *LPOFNOTIFYA; -typedef struct _OFNOTIFY { - NMHDR hdr; - LPOPENFILENAME lpOFN; - LPTSTR pszFile; -} OFNOTIFY, *LPOFNOTIFY; +typedef struct _OFNOTIFYW { + NMHDR hdr; + LPOPENFILENAMEW lpOFN; + LPWSTR pszFile; +} OFNOTIFYW, *LPOFNOTIFYW; + +typedef_tident(OFNOTIFY) +typedef_tident(LPOFNOTIFY) typedef struct _OSVERSIONINFOA { DWORD dwOSVersionInfoSize; @@ -3086,13 +3943,9 @@ typedef struct _OSVERSIONINFOW { DWORD dwBuildNumber; DWORD dwPlatformId; WCHAR szCSDVersion[ 128 ]; -} OSVERSIONINFOW, *POSVERSIONINFOW, *LPOSVERSIONINFOW; +} OSVERSIONINFOW, *POSVERSIONINFOW, *LPOSVERSIONINFOW, RTL_OSVERSIONINFOW, *PRTL_OSVERSIONINFOW; -#ifdef UNICODE -typedef OSVERSIONINFOA OSVERSIONINFO; -#else -typedef OSVERSIONINFOW OSVERSIONINFO; -#endif +typedef_tident(OSVERSIONINFO) typedef struct _OSVERSIONINFOEXA #if defined(__cplusplus) @@ -3138,13 +3991,9 @@ typedef struct _OSVERSIONINFOEXW WORD wSuiteMask; BYTE wProductType; BYTE wReserved; -} OSVERSIONINFOEXW, *POSVERSIONINFOEXW, *LPOSVERSIONINFOEXW; +} OSVERSIONINFOEXW, *POSVERSIONINFOEXW, *LPOSVERSIONINFOEXW, RTL_OSVERSIONINFOEXW, *PRTL_OSVERSIONINFOEXW; -#ifdef UNICODE -typedef OSVERSIONINFOEXA OSVERSIONINFOEX; -#else -typedef OSVERSIONINFOEXW OSVERSIONINFOEX; -#endif +typedef_tident(OSVERSIONINFOEX) typedef struct tagTEXTMETRICA { LONG tmHeight; @@ -3158,10 +4007,10 @@ typedef struct tagTEXTMETRICA { LONG tmOverhang; LONG tmDigitizedAspectX; LONG tmDigitizedAspectY; - BCHAR tmFirstChar; - BCHAR tmLastChar; - BCHAR tmDefaultChar; - BCHAR tmBreakChar; + CHAR tmFirstChar; + CHAR tmLastChar; + CHAR tmDefaultChar; + CHAR tmBreakChar; BYTE tmItalic; BYTE tmUnderlined; BYTE tmStruckOut; @@ -3184,7 +4033,7 @@ typedef struct tagTEXTMETRICW { WCHAR tmFirstChar; WCHAR tmLastChar; WCHAR tmDefaultChar; - BCHAR tmBreakChar; + WCHAR tmBreakChar; BYTE tmItalic; BYTE tmUnderlined; BYTE tmStruckOut; @@ -3192,13 +4041,8 @@ typedef struct tagTEXTMETRICW { BYTE tmCharSet; } TEXTMETRICW, *LPTEXTMETRICW; -#ifdef UNICODE -typedef TEXTMETRICA TEXTMETRIC; -typedef LPTEXTMETRICA LPTEXTMETRIC; -#else -typedef TEXTMETRICW TEXTMETRIC; -typedef LPTEXTMETRICA LPTEXTMETRIC; -#endif +typedef_tident(TEXTMETRIC) +typedef_tident(LPTEXTMETRIC) typedef struct _OUTLINETEXTMETRICA { UINT otmSize; @@ -3270,13 +4114,8 @@ typedef struct _OUTLINETEXTMETRICW { PSTR otmpFullName; } OUTLINETEXTMETRICW, *LPOUTLINETEXTMETRICW; -#ifdef UNICODE -typedef OUTLINETEXTMETRICA OUTLINETEXTMETRIC; -typedef LPOUTLINETEXTMETRICA LPOUTLINETEXTMETRIC; -#else -typedef OUTLINETEXTMETRICW OUTLINETEXTMETRIC; -typedef LPOUTLINETEXTMETRICA LPOUTLINETEXTMETRIC; -#endif +typedef_tident(OUTLINETEXTMETRIC) +typedef_tident(LPOUTLINETEXTMETRIC) typedef struct _OVERLAPPED { DWORD Internal; @@ -3286,7 +4125,24 @@ typedef struct _OVERLAPPED { HANDLE hEvent; } OVERLAPPED, *LPOVERLAPPED; -typedef struct tagPSD { +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; @@ -3299,9 +4155,12 @@ typedef struct tagPSD { LPARAM lCustData; LPPAGESETUPHOOK lpfnPageSetupHook; LPPAGEPAINTHOOK lpfnPagePaintHook; - LPCTSTR lpPageSetupTemplateName; + LPCWSTR lpPageSetupTemplateName; HGLOBAL hPageSetupTemplate; -} PAGESETUPDLG, *LPPAGESETUPDLG; +} PAGESETUPDLGW, *LPPAGESETUPDLGW; + +typedef_tident(PAGESETUPDLG) +typedef_tident(LPPAGESETUPDLG) typedef struct tagPAINTSTRUCT { HDC hdc; @@ -3385,33 +4244,84 @@ typedef struct _PERF_OBJECT_TYPE { LARGE_INTEGER PerfFreq; } PERF_OBJECT_TYPE; -typedef struct _POLYTEXT { +typedef struct _POLYTEXTA { int x; int y; UINT n; - LPCTSTR lpstr; + LPCSTR lpstr; UINT uiFlags; RECT rcl; int *pdx; -} POLYTEXT, *LPPOLYTEXT; +} POLYTEXTA, *LPPOLYTEXTA; -typedef struct _PORT_INFO_1 { - LPTSTR pName; -} PORT_INFO_1; +typedef struct _POLYTEXTW { + int x; + int y; + UINT n; + LPCWSTR lpstr; + UINT uiFlags; + RECT rcl; + int *pdx; +} POLYTEXTW, *LPPOLYTEXTW; -typedef struct _PORT_INFO_2 { - LPSTR pPortName; - LPSTR pMonitorName; - LPSTR pDescription; - DWORD fPortType; - DWORD Reserved; -} PORT_INFO_2; +typedef_tident(POLYTEXT) +typedef_tident(LPPOLYTEXT) + +typedef struct _PORT_INFO_1A { + LPSTR pName; +} PORT_INFO_1A; + +typedef struct _PORT_INFO_1W { + LPWSTR pName; +} PORT_INFO_1W; + +typedef_tident(PORT_INFO_1) + +typedef struct _PORT_INFO_2A { + LPSTR pPortName; + LPSTR pMonitorName; + LPSTR pDescription; + DWORD fPortType; + DWORD Reserved; +} PORT_INFO_2A; + +typedef struct _PORT_INFO_2W { + LPWSTR pPortName; + LPWSTR pMonitorName; + LPWSTR pDescription; + DWORD fPortType; + DWORD Reserved; +} PORT_INFO_2W; + +typedef_tident(PORT_INFO_2) typedef struct _PREVENT_MEDIA_REMOVAL { BOOLEAN PreventMediaRemoval; } PREVENT_MEDIA_REMOVAL ; -typedef struct tagPD { +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; +} PACKED PRINTDLGA, *LPPRINTDLGA; + +typedef struct tagPDW { DWORD lStructSize; HWND hwndOwner; HANDLE hDevMode; @@ -3427,77 +4337,138 @@ typedef struct tagPD { DWORD lCustData; LPPRINTHOOKPROC lpfnPrintHook; LPSETUPHOOKPROC lpfnSetupHook; - LPCTSTR lpPrintTemplateName; - LPCTSTR lpSetupTemplateName; + LPCWSTR lpPrintTemplateName; + LPCWSTR lpSetupTemplateName; HANDLE hPrintTemplate; HANDLE hSetupTemplate; -} PRINTDLG PACKED, *LPPRINTDLG PACKED; +} PACKED PRINTDLGW, *LPPRINTDLGW; + +typedef_tident(PRINTDLG) +typedef_tident(LPPRINTDLG) typedef struct _PRINTER_DEFAULTSA { - LPTSTR pDatatype; - LPDEVMODEA pDevMode; + LPSTR pDatatype; + LPDEVMODEA pDevMode; ACCESS_MASK DesiredAccess; } PRINTER_DEFAULTSA, *PPRINTER_DEFAULTSA, *LPPRINTER_DEFAULTSA; typedef struct _PRINTER_DEFAULTSW { - LPTSTR pDatatype; - LPDEVMODEA pDevMode; + LPWSTR pDatatype; + LPDEVMODEW pDevMode; ACCESS_MASK DesiredAccess; } PRINTER_DEFAULTSW, *PPRINTER_DEFAULTSW, *LPPRINTER_DEFAULTSW; -typedef struct _PRINTER_INFO_1 { +typedef_tident(PRINTER_DEFAULTS) +typedef_tident(PPRINTER_DEFAULTS) +typedef_tident(LPPRINTER_DEFAULTS) + +typedef struct _PRINTER_INFO_1A { DWORD Flags; - LPTSTR pDescription; - LPTSTR pName; - LPTSTR pComment; -} PRINTER_INFO_1, *PPRINTER_INFO_1, *LPPRINTER_INFO_1; + LPSTR pDescription; + LPSTR pName; + LPSTR pComment; +} PRINTER_INFO_1A, *PPRINTER_INFO_1A, *LPPRINTER_INFO_1A; - #if 0 -typedef struct _PRINTER_INFO_2 { - LPTSTR pServerName; - LPTSTR pPrinterName; - LPTSTR pShareName; - LPTSTR pPortName; - LPTSTR pDriverName; - LPTSTR pComment; - LPTSTR pLocation; - LPDEVMODE pDevMode; - LPTSTR pSepFile; - LPTSTR pPrintProcessor; - LPTSTR pDatatype; - LPTSTR pParameters; +typedef struct _PRINTER_INFO_1W { + DWORD Flags; + LPWSTR pDescription; + LPWSTR pName; + LPWSTR pComment; +} PRINTER_INFO_1W, *PPRINTER_INFO_1W, *LPPRINTER_INFO_1W; + +typedef_tident(PRINTER_INFO_1) +typedef_tident(PPRINTER_INFO_1) +typedef_tident(LPPRINTER_INFO_1) + +#if 0 +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_2; + DWORD Attributes; + DWORD Priority; + DWORD DefaultPriority; + DWORD StartTime; + DWORD UntilTime; + DWORD Status; + DWORD cJobs; + DWORD AveragePPM; +} PRINTER_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; +typedef_tident(PRINTER_INFO_2) typedef struct _PRINTER_INFO_3 { PSECURITY_DESCRIPTOR pSecurityDescriptor; } PRINTER_INFO_3; - #endif +#endif + +typedef struct _PRINTER_INFO_4A { + LPSTR pPrinterName; + LPSTR pServerName; + DWORD Attributes; +} PRINTER_INFO_4A; -typedef struct _PRINTER_INFO_4 { - LPTSTR pPrinterName; - LPTSTR pServerName; +typedef struct _PRINTER_INFO_4W { + LPWSTR pPrinterName; + LPWSTR pServerName; DWORD Attributes; -} PRINTER_INFO_4; +} PRINTER_INFO_4W; -typedef struct _PRINTER_INFO_5 { - LPTSTR pPrinterName; - LPTSTR pPortName; +typedef_tident(PRINTER_INFO_4) + +typedef struct _PRINTER_INFO_5A { + LPSTR pPrinterName; + LPSTR pPortName; DWORD Attributes; DWORD DeviceNotSelectedTimeout; DWORD TransmissionRetryTimeout; -} PRINTER_INFO_5; +} PRINTER_INFO_5A; + +typedef struct _PRINTER_INFO_5W { + LPWSTR pPrinterName; + LPWSTR pPortName; + DWORD Attributes; + DWORD DeviceNotSelectedTimeout; + DWORD TransmissionRetryTimeout; +} PRINTER_INFO_5W; + +typedef_tident(PRINTER_INFO_5) typedef struct _PRINTER_NOTIFY_INFO_DATA { WORD Type; @@ -3536,10 +4507,15 @@ typedef struct _PRINTER_NOTIFY_OPTIONS { PPRINTER_NOTIFY_OPTIONS_TYPE pTypes; } PRINTER_NOTIFY_OPTIONS; -typedef struct _PRINTPROCESSOR_INFO_1 { - LPTSTR pName; -} PRINTPROCESSOR_INFO_1; +typedef struct _PRINTPROCESSOR_INFO_1A { + LPSTR pName; +} PRINTPROCESSOR_INFO_1A; + +typedef struct _PRINTPROCESSOR_INFO_1W { + LPWSTR pName; +} PRINTPROCESSOR_INFO_1W; +typedef_tident(PRINTPROCESSOR_INFO_1) typedef struct _PROCESS_HEAP_ENTRY { PVOID lpData; @@ -3563,49 +4539,101 @@ typedef struct _PROCESS_INFORMATION { typedef UINT CALLBACK (*LPFNPSPCALLBACK) (HWND, UINT, LPVOID); -typedef struct _PROPSHEETPAGE { +typedef struct _PROPSHEETPAGEA { + DWORD dwSize; + DWORD dwFlags; + HINSTANCE hInstance; + union { + LPCSTR pszTemplate; + LPCDLGTEMPLATE pResource; + } u1; + union { + HICON hIcon; + LPCSTR pszIcon; + } u2; + LPCSTR pszTitle; + DLGPROC pfnDlgProc; + LPARAM lParam; + LPFNPSPCALLBACK pfnCallback; + UINT * pcRefParent; +} PROPSHEETPAGEA, *LPPROPSHEETPAGEA; +typedef const PROPSHEETPAGEA* LPCPROPSHEETPAGEA; + +typedef struct _PROPSHEETPAGEW { DWORD dwSize; DWORD dwFlags; HINSTANCE hInstance; union { - LPCTSTR pszTemplate; + LPCWSTR pszTemplate; LPCDLGTEMPLATE pResource; } u1; union { - HICON hIcon; - LPCTSTR pszIcon; + HICON hIcon; + LPCWSTR pszIcon; } u2; - LPCTSTR pszTitle; + LPCWSTR pszTitle; DLGPROC pfnDlgProc; LPARAM lParam; LPFNPSPCALLBACK pfnCallback; UINT * pcRefParent; -} PROPSHEETPAGE, *LPPROPSHEETPAGE; -typedef const PROPSHEETPAGE *LPCPROPSHEETPAGE; +} PROPSHEETPAGEW, *LPPROPSHEETPAGEW; +typedef const PROPSHEETPAGEW* LPCPROPSHEETPAGEW; + +typedef_tident(PROPSHEETPAGE) +typedef_tident(LPPROPSHEETPAGE) +typedef_tident(LPCPROPSHEETPAGE) typedef struct _PSP *HPROPSHEETPAGE; -typedef struct _PROPSHEETHEADER { + +typedef struct _PROPSHEETHEADERA { DWORD dwSize; DWORD dwFlags; HWND hwndParent; HINSTANCE hInstance; union { - HICON hIcon; - LPCTSTR pszIcon; + HICON hIcon; + LPCSTR pszIcon; } u1; - LPCTSTR pszCaption; + LPCSTR pszCaption; UINT nPages; union { - UINT nStartPage; - LPCTSTR pStartPage; + UINT nStartPage; + LPCSTR pStartPage; } u2; union { - LPCPROPSHEETPAGE ppsp; - HPROPSHEETPAGE *phpage; + LPCPROPSHEETPAGEA ppsp; + HPROPSHEETPAGE *phpage; } u3; PFNPROPSHEETCALLBACK pfnCallback; -} PROPSHEETHEADER, *LPPROPSHEETHEADER; -typedef const PROPSHEETHEADER *LPCPROPSHEETHEADER; +} PROPSHEETHEADERA, *LPPROPSHEETHEADERA; +typedef const PROPSHEETHEADERA *LPCPROPSHEETHEADERA; + +typedef struct _PROPSHEETHEADERW { + DWORD dwSize; + DWORD dwFlags; + HWND hwndParent; + HINSTANCE hInstance; + union { + HICON hIcon; + LPCWSTR pszIcon; + } u1; + LPCWSTR pszCaption; + UINT nPages; + union { + UINT nStartPage; + LPCWSTR pStartPage; + } u2; + union { + LPCPROPSHEETPAGEW ppsp; + HPROPSHEETPAGE *phpage; + } u3; + PFNPROPSHEETCALLBACK pfnCallback; +} PROPSHEETHEADERW, *LPPROPSHEETHEADERW; +typedef const PROPSHEETHEADERW *LPCPROPSHEETHEADERW; + +typedef_tident(PROPSHEETHEADER) +typedef_tident(LPPROPSHEETHEADER) +typedef_tident(LPCPROPSHEETHEADER) /* PropertySheet callbacks */ typedef WINBOOL CALLBACK (*LPFNADDPROPSHEETPAGE) (HPROPSHEETPAGE, LPARAM); @@ -3613,7 +4641,7 @@ typedef WINBOOL CALLBACK (*LPFNADDPROPSHEETPAGES) (LPVOID, LPFNADDPROPSHEETPAGE, LPARAM); -typedef struct _PROTOCOL_INFO { +typedef struct _PROTOCOL_INFOA { DWORD dwServiceFlags; INT iAddressFamily; INT iMaxSockAddr; @@ -3621,24 +4649,52 @@ typedef struct _PROTOCOL_INFO { INT iSocketType; INT iProtocol; DWORD dwMessageSize; - LPTSTR lpProtocol; -} PROTOCOL_INFO; + LPSTR lpProtocol; +} PROTOCOL_INFOA; + +typedef struct _PROTOCOL_INFOW { + DWORD dwServiceFlags; + INT iAddressFamily; + INT iMaxSockAddr; + INT iMinSockAddr; + INT iSocketType; + INT iProtocol; + DWORD dwMessageSize; + LPWSTR lpProtocol; +} PROTOCOL_INFOW; + +typedef_tident(PROTOCOL_INFO) + +typedef struct _PROVIDOR_INFO_1A { + LPSTR pName; + LPSTR pEnvironment ; + LPSTR pDLLName ; +} PROVIDOR_INFO_1A; + +typedef struct _PROVIDOR_INFO_1W { + LPWSTR pName; + LPWSTR pEnvironment ; + LPWSTR pDLLName ; +} PROVIDOR_INFO_1W; -typedef struct _PROVIDOR_INFO_1 { - LPTSTR pName; - LPTSTR pEnvironment ; - LPTSTR pDLLName ; -} PROVIDOR_INFO_1; +typedef_tident(PROVIDOR_INFO_1) typedef struct _PSHNOTIFY { NMHDR hdr; LPARAM lParam; } PSHNOTIFY, *LPPSHNOTIFY; -typedef struct _punctuation { +typedef struct _punctuationA { UINT iSize; LPSTR szPunctuation; -} PUNCTUATION; +} PUNCTUATIONA; + +typedef struct _punctuationW { + UINT iSize; + LPWSTR szPunctuation; +} PUNCTUATIONW; + +typedef_tident(PUNCTUATION) typedef struct _QUERY_SERVICE_CONFIGA { DWORD dwServiceType; @@ -3664,13 +4720,8 @@ typedef struct _QUERY_SERVICE_CONFIGW { LPWSTR lpDisplayName; } QUERY_SERVICE_CONFIGW, *LPQUERY_SERVICE_CONFIGW; -#ifdef UNICODE -#define QUERY_SERVICE_CONFIG QUERY_SERVICE_CONFIGW -#define LPQUERY_SERVICE_CONFIG LPQUERY_SERVICE_CONFIGW -#else -#define QUERY_SERVICE_CONFIG QUERY_SERVICE_CONFIGA -#define LPQUERY_SERVICE_CONFIG LPQUERY_SERVICE_CONFIGA -#endif +typedef_tident(QUERY_SERVICE_CONFIG) +typedef_tident(LPQUERY_SERVICE_CONFIG) typedef struct _QUERY_SERVICE_LOCK_STATUSA { DWORD fIsLocked; @@ -3684,80 +4735,177 @@ typedef struct _QUERY_SERVICE_LOCK_STATUSW { DWORD dwLockDuration; } QUERY_SERVICE_LOCK_STATUSW, *LPQUERY_SERVICE_LOCK_STATUSW; -#ifdef UNICODE -#define QUERY_SERVICE_LOCK_STATUS QUERY_SERVICE_LOCK_STATUSW -#define LPQUERY_SERVICE_LOCK_STATUS LPQUERY_SERVICE_LOCK_STATUSW -#else -#define QUERY_SERVICE_LOCK_STATUS QUERY_SERVICE_LOCK_STATUSA -#define LPQUERY_SERVICE_LOCK_STATUS LPQUERY_SERVICE_LOCK_STATUSA -#endif +typedef_tident(QUERY_SERVICE_LOCK_STATUS) +typedef_tident(LPQUERY_SERVICE_LOCK_STATUS) -typedef struct _RASAMB { +typedef struct _RASAMBA { DWORD dwSize; DWORD dwError; - TCHAR szNetBiosError[ NETBIOS_NAME_LEN + 1 ]; + CHAR szNetBiosError[ NETBIOS_NAME_LEN + 1 ]; BYTE bLana; -} RASAMB; +} RASAMBA; -typedef struct _RASCONN { +typedef struct _RASAMBW { + DWORD dwSize; + DWORD dwError; + WCHAR szNetBiosError[ NETBIOS_NAME_LEN + 1 ]; + BYTE bLana; +} RASAMBW; + +typedef_tident(RASAMB) + +typedef struct _RASCONNA { DWORD dwSize; HRASCONN hrasconn; - TCHAR szEntryName[RAS_MaxEntryName + 1]; + CHAR szEntryName[RAS_MaxEntryName + 1]; + /* WINVER >= 0x400 */ CHAR szDeviceType[ RAS_MaxDeviceType + 1 ]; CHAR szDeviceName[ RAS_MaxDeviceName + 1 ]; -} RASCONN ; -typedef struct _RASCONNSTATUS { + /* WINVER >= 0x401 */ + CHAR szPhonebook[ MAX_PATH ]; + DWORD dwSubEntry; + + /* WINVER >= 0x500 */ + GUID guidEntry; + + /* WINVER >= 0x501 */ + DWORD dwSessionId; + DWORD dwFlags; + LUID luid; +} RASCONNA ; + +typedef struct _RASCONNW { + DWORD dwSize; + HRASCONN hrasconn; + WCHAR szEntryName[RAS_MaxEntryName + 1]; + + /* WINVER >= 0x400 */ + WCHAR szDeviceType[ RAS_MaxDeviceType + 1 ]; + WCHAR szDeviceName[ RAS_MaxDeviceName + 1 ]; + + /* WINVER >= 0x401 */ + WCHAR szPhonebook[ MAX_PATH ]; + DWORD dwSubEntry; + + /* WINVER >= 0x500 */ + GUID guidEntry; + + /* WINVER >= 0x501 */ + DWORD dwSessionId; + DWORD dwFlags; + LUID luid; +} RASCONNW ; + +typedef_tident(RASCONN) + +typedef struct _RASCONNSTATUSA { + DWORD dwSize; + RASCONNSTATE rasconnstate; + DWORD dwError; + CHAR szDeviceType[RAS_MaxDeviceType + 1]; + CHAR szDeviceName[RAS_MaxDeviceName + 1]; +} RASCONNSTATUSA; + +typedef struct _RASCONNSTATUSW { DWORD dwSize; RASCONNSTATE rasconnstate; DWORD dwError; - TCHAR szDeviceType[RAS_MaxDeviceType + 1]; - TCHAR szDeviceName[RAS_MaxDeviceName + 1]; -} RASCONNSTATUS; + WCHAR szDeviceType[RAS_MaxDeviceType + 1]; + WCHAR szDeviceName[RAS_MaxDeviceName + 1]; +} RASCONNSTATUSW; + +typedef_tident(RASCONNSTATUS) typedef struct _RASDIALEXTENSIONS { DWORD dwSize; DWORD dwfOptions; - HWND hwndParent; + HWND hwndParent; DWORD reserved; } RASDIALEXTENSIONS; -typedef struct _RASDIALPARAMS { +typedef struct _RASDIALPARAMSA { + 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] ; +} RASDIALPARAMSA; + +typedef struct _RASDIALPARAMSW { + 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] ; +} RASDIALPARAMSW; + +typedef_tident(RASDIALPARAMS) + +typedef struct _RASENTRYNAMEA { DWORD dwSize; - TCHAR szEntryName[RAS_MaxEntryName + 1]; - TCHAR szPhoneNumber[RAS_MaxPhoneNumber + 1]; - TCHAR szCallbackNumber[RAS_MaxCallbackNumber + 1]; - TCHAR szUserName[UNLEN + 1]; - TCHAR szPassword[PWLEN + 1]; - TCHAR szDomain[DNLEN + 1] ; -} RASDIALPARAMS; - -typedef struct _RASENTRYNAME { + CHAR szEntryName[RAS_MaxEntryName + 1]; +}RASENTRYNAMEA; + +typedef struct _RASENTRYNAMEW { DWORD dwSize; - TCHAR szEntryName[RAS_MaxEntryName + 1]; -}RASENTRYNAME; + WCHAR szEntryName[RAS_MaxEntryName + 1]; +}RASENTRYNAMEW; + +typedef_tident(RASENTRYNAME) -typedef struct _RASPPPIP { +typedef struct _RASPPPIPA { DWORD dwSize; DWORD dwError; - TCHAR szIpAddress[ RAS_MaxIpAddress + 1 ]; -} RASPPPIP; + CHAR szIpAddress[ RAS_MaxIpAddress + 1 ]; +} RASPPPIPA; -typedef struct _RASPPPIPX { +typedef struct _RASPPPIPW { DWORD dwSize; DWORD dwError; - TCHAR szIpxAddress[ RAS_MaxIpxAddress + 1 ]; -} RASPPPIPX; + WCHAR szIpAddress[ RAS_MaxIpAddress + 1 ]; +} RASPPPIPW; -typedef struct _RASPPPNBF { +typedef_tident(RASPPPIP) + +typedef struct _RASPPPIPXA { + DWORD dwSize; + DWORD dwError; + CHAR szIpxAddress[ RAS_MaxIpxAddress + 1 ]; +} RASPPPIPXA; + +typedef struct _RASPPPIPXW { + DWORD dwSize; + DWORD dwError; + WCHAR szIpxAddress[ RAS_MaxIpxAddress + 1 ]; +} RASPPPIPXW; + +typedef_tident(RASPPPIPX) + +typedef struct _RASPPPNBFA { DWORD dwSize; DWORD dwError; DWORD dwNetBiosError; - TCHAR szNetBiosError[ NETBIOS_NAME_LEN + 1 ]; - TCHAR szWorkstationName[ NETBIOS_NAME_LEN + 1 ]; + CHAR szNetBiosError[ NETBIOS_NAME_LEN + 1 ]; + CHAR szWorkstationName[ NETBIOS_NAME_LEN + 1 ]; BYTE bLana; -} RASPPPNBF; +} RASPPPNBFA; + +typedef struct _RASPPPNBFW { + DWORD dwSize; + DWORD dwError; + DWORD dwNetBiosError; + WCHAR szNetBiosError[ NETBIOS_NAME_LEN + 1 ]; + WCHAR szWorkstationName[ NETBIOS_NAME_LEN + 1 ]; + BYTE bLana; +} RASPPPNBFW; + +typedef_tident(RASPPPNBF) typedef struct _RASTERIZER_STATUS { short nSize; @@ -3771,11 +4919,19 @@ typedef struct _REASSIGN_BLOCKS { DWORD BlockNumber[1]; } REASSIGN_BLOCKS ; -typedef struct _REMOTE_NAME_INFO { - LPTSTR lpUniversalName; - LPTSTR lpConnectionName; - LPTSTR lpRemainingPath; -} REMOTE_NAME_INFO; +typedef struct _REMOTE_NAME_INFOA { + LPSTR lpUniversalName; + LPSTR lpConnectionName; + LPSTR lpRemainingPath; +} REMOTE_NAME_INFOA; + +typedef struct _REMOTE_NAME_INFOW { + LPWSTR lpUniversalName; + LPWSTR lpConnectionName; + LPWSTR lpRemainingPath; +} REMOTE_NAME_INFOW; + +typedef_tident(REMOTE_NAME_INFO) /* TODO: OLE @@ -3845,36 +5001,48 @@ typedef struct tagSERIALKEYS { typedef struct _SERVICE_TABLE_ENTRYA { LPSTR lpServiceName; - LPSERVICE_MAIN_FUNCTION lpServiceProc; + LPSERVICE_MAIN_FUNCTIONA lpServiceProc; } SERVICE_TABLE_ENTRYA, *LPSERVICE_TABLE_ENTRYA; typedef struct _SERVICE_TABLE_ENTRYW { LPWSTR lpServiceName; - LPSERVICE_MAIN_FUNCTION lpServiceProc; + LPSERVICE_MAIN_FUNCTIONW lpServiceProc; } SERVICE_TABLE_ENTRYW, *LPSERVICE_TABLE_ENTRYW; -#ifdef UNICODE -#define SERVICE_TABLE_ENTRY SERVICE_TABLE_ENTRYW -#define LPSERVICE_TABLE_ENTRY LPSERVICE_TABLE_ENTRYW -#else -#define SERVICE_TABLE_ENTRY SERVICE_TABLE_ENTRYA -#define LPSERVICE_TABLE_ENTRY LPSERVICE_TABLE_ENTRYA -#endif +typedef_tident(SERVICE_TABLE_ENTRY) +typedef_tident(LPSERVICE_TABLE_ENTRY) +typedef struct _SERVICE_TYPE_VALUE_ABSA { + DWORD dwNameSpace; + DWORD dwValueType; + DWORD dwValueSize; + LPSTR lpValueName; + PVOID lpValue; +} SERVICE_TYPE_VALUE_ABSA; -typedef struct _SERVICE_TYPE_VALUE_ABS { +typedef struct _SERVICE_TYPE_VALUE_ABSW { DWORD dwNameSpace; DWORD dwValueType; DWORD dwValueSize; - LPTSTR lpValueName; + LPWSTR lpValueName; PVOID lpValue; -} SERVICE_TYPE_VALUE_ABS; +} SERVICE_TYPE_VALUE_ABSW; + +typedef_tident(SERVICE_TYPE_VALUE_ABS) + +typedef struct _SERVICE_TYPE_INFO_ABSA { + LPSTR lpTypeName; + DWORD dwValueCount; + SERVICE_TYPE_VALUE_ABSA Values[1]; +} SERVICE_TYPE_INFO_ABSA; -typedef struct _SERVICE_TYPE_INFO_ABS { - LPTSTR lpTypeName; +typedef struct _SERVICE_TYPE_INFO_ABSW { + LPWSTR lpTypeName; DWORD dwValueCount; - SERVICE_TYPE_VALUE_ABS Values[1]; -} SERVICE_TYPE_INFO_ABS; + SERVICE_TYPE_VALUE_ABSW Values[1]; +} SERVICE_TYPE_INFO_ABSW; + +typedef_tident(SERVICE_TYPE_INFO_ABS) typedef struct _SESSION_BUFFER { UCHAR lsn; @@ -3896,56 +5064,103 @@ 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 _SHFILEINFO { - HICON hIcon; - int iIcon; - DWORD dwAttributes; - char szDisplayName[MAX_PATH]; - char szTypeName[80]; +typedef struct _SHFILEINFO { + HICON hIcon; + int iIcon; + DWORD dwAttributes; + char szDisplayName[MAX_PATH]; + char szTypeName[80]; } SHFILEINFO; -typedef WORD FILEOP_FLAGS; -typedef struct _SHFILEOPSTRUCT { - HWND hwnd; - UINT wFunc; - LPCSTR pFrom; - LPCSTR pTo; - FILEOP_FLAGS fFlags; - WINBOOL fAnyOperationsAborted; - LPVOID hNameMappings; - LPCSTR lpszProgressTitle; -} SHFILEOPSTRUCT, *LPSHFILEOPSTRUCT; - -typedef enum tagSHGDN { - SHGDN_NORMAL = 0, - SHGDN_INFOLDER = 1, - SHGDN_FORPARSING = 0x8000, +typedef WORD FILEOP_FLAGS; + +typedef struct _SHFILEOPSTRUCTA { + HWND hwnd; + UINT wFunc; + LPCSTR pFrom; + LPCSTR pTo; + FILEOP_FLAGS fFlags; + WINBOOL fAnyOperationsAborted; + LPVOID hNameMappings; + LPCSTR lpszProgressTitle; +} SHFILEOPSTRUCTA, *LPSHFILEOPSTRUCTA; + +typedef struct _SHFILEOPSTRUCTW { + HWND hwnd; + UINT wFunc; + LPCWSTR pFrom; + LPCWSTR pTo; + FILEOP_FLAGS fFlags; + WINBOOL fAnyOperationsAborted; + LPVOID hNameMappings; + LPCWSTR lpszProgressTitle; +} SHFILEOPSTRUCTW, *LPSHFILEOPSTRUCTW; + +typedef_tident(SHFILEOPSTRUCT) +typedef_tident(LPSHFILEOPSTRUCT) + +typedef enum tagSHGDN { + SHGDN_NORMAL = 0, + SHGDN_INFOLDER = 1, + SHGDN_FORPARSING = 0x8000, } SHGNO; - -typedef struct _SHNAMEMAPPING { - LPSTR pszOldPath; - LPSTR pszNewPath; - int cchOldPath; - int cchNewPath; -} SHNAMEMAPPING, *LPSHNAMEMAPPING; - -typedef struct tagSOUNDSENTRY { - UINT cbSize; - DWORD dwFlags; - DWORD iFSTextEffect; - DWORD iFSTextEffectMSec; - DWORD iFSTextEffectColorBits; - DWORD iFSGrafEffect; - DWORD iFSGrafEffectMSec; - DWORD iFSGrafEffectColor; - DWORD iWindowsEffect; - DWORD iWindowsEffectMSec; - LPTSTR lpszWindowsEffectDLL; - DWORD iWindowsEffectOrdinal; -} SOUNDSENTRY, *LPSOUNDSENTRY; - + +typedef struct _SHNAMEMAPPINGA { + LPSTR pszOldPath; + LPSTR pszNewPath; + int cchOldPath; + int cchNewPath; +} SHNAMEMAPPINGA, *LPSHNAMEMAPPINGA; + +typedef struct _SHNAMEMAPPINGW { + LPWSTR pszOldPath; + LPWSTR pszNewPath; + int cchOldPath; + int cchNewPath; +} SHNAMEMAPPINGW, *LPSHNAMEMAPPINGW; + +typedef_tident(SHNAMEMAPPING) +typedef_tident(LPSHNAMEMAPPING) + +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_tident(SOUNDSENTRY) +typedef_tident(LPSOUNDSENTRY) + typedef struct _STARTUPINFOA { DWORD cb; LPSTR lpReserved; @@ -3988,13 +5203,8 @@ typedef struct _STARTUPINFOW { HANDLE hStdError; } STARTUPINFOW, *LPSTARTUPINFOW; -#ifdef UNICODE -typedef STARTUPINFOW STARTUPINFO; -typedef LPSTARTUPINFOW LPSTARTUPINFO; -#else -typedef STARTUPINFOA STARTUPINFO; -typedef LPSTARTUPINFOA LPSTARTUPINFO; -#endif /* UNICODE */ +typedef_tident(STARTUPINFO) +typedef_tident(LPSTARTUPINFO) typedef struct tagSTICKYKEYS { DWORD cbSize; @@ -4197,42 +5407,84 @@ typedef struct _TBBUTTON { typedef const TBBUTTON * LPCTBBUTTON; typedef struct { - NMHDR hdr; - int iItem; + NMHDR hdr; + int iItem; TBBUTTON tbButton; - int cchText; - LPTSTR pszText; -} TBNOTIFY, *LPTBNOTIFY; + int cchText; + LPSTR pszText; +} TBNOTIFYA, *LPTBNOTIFYA; typedef struct { - HKEY hkr; - LPCTSTR pszSubKey; - LPCTSTR pszValueName; -} TBSAVEPARAMS; + NMHDR hdr; + int iItem; + TBBUTTON tbButton; + int cchText; + LPWSTR pszText; +} TBNOTIFYW, *LPTBNOTIFYW; + +typedef_tident(TBNOTIFY) +typedef_tident(LPTBNOTIFY) + +typedef struct { + HKEY hkr; + LPCSTR pszSubKey; + LPCSTR pszValueName; +} TBSAVEPARAMSA; + +typedef struct { + HKEY hkr; + LPCWSTR pszSubKey; + LPCWSTR pszValueName; +} TBSAVEPARAMSW; + +typedef_tident(TBSAVEPARAMS) typedef struct _TC_HITTESTINFO { POINT pt; UINT flags; } TC_HITTESTINFO; -typedef struct _TC_ITEM { - UINT mask; - UINT lpReserved1; - UINT lpReserved2; - LPTSTR pszText; - int cchTextMax; - int iImage; +typedef struct _TC_ITEMA { + UINT mask; + UINT lpReserved1; + UINT lpReserved2; + LPSTR pszText; + int cchTextMax; + int iImage; LPARAM lParam; -} TC_ITEM; +} TC_ITEMA; -typedef struct _TC_ITEMHEADER { - UINT mask; - UINT lpReserved1; - UINT lpReserved2; - LPTSTR pszText; - int cchTextMax; - int iImage; -} TC_ITEMHEADER; +typedef struct _TC_ITEMW { + UINT mask; + UINT lpReserved1; + UINT lpReserved2; + LPWSTR pszText; + int cchTextMax; + int iImage; + LPARAM lParam; +} TC_ITEMW; + +typedef_tident(TC_ITEM) + +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_tident(TC_ITEMHEADER) typedef struct _TC_KEYDOWN { NMHDR hdr; @@ -4240,10 +5492,17 @@ typedef struct _TC_KEYDOWN { UINT flags; } TC_KEYDOWN; -typedef struct _textrange { +typedef struct _textrangeA { CHARRANGE chrg; - LPSTR lpstrText; -} TEXTRANGE; + LPSTR lpstrText; +} TEXTRANGEA; + +typedef struct _textrangeW { + CHARRANGE chrg; + LPWSTR lpstrText; +} TEXTRANGEW; + +typedef_tident(TEXTRANGE) typedef struct tagTOGGLEKEYS { DWORD cbSize; @@ -4257,23 +5516,48 @@ typedef struct { UINT uId; RECT rect; HINSTANCE hinst; - LPTSTR lpszText; -} TOOLINFO, *PTOOLINFO, *LPTOOLINFO; + LPSTR lpszText; +} TOOLINFOA, *PTOOLINFOA, *LPTOOLINFOA; + +typedef struct { + UINT cbSize; + UINT uFlags; + HWND hwnd; + UINT uId; + RECT rect; + HINSTANCE hinst; + LPWSTR lpszText; +} TOOLINFOW, *PTOOLINFOW, *LPTOOLINFOW; + +typedef_tident(TOOLINFO) +typedef_tident(PTOOLINFO) +typedef_tident(LPTOOLINFO) typedef struct { NMHDR hdr; - LPTSTR lpszText; - char szText[80]; + LPSTR lpszText; + CHAR szText[80]; HINSTANCE hinst; UINT uFlags; -} TOOLTIPTEXT, *LPTOOLTIPTEXT; +} TOOLTIPTEXTA, *LPTOOLTIPTEXTA; + +typedef struct { + NMHDR hdr; + LPWSTR lpszText; + WCHAR szText[80]; + HINSTANCE hinst; + UINT uFlags; +} TOOLTIPTEXTW, *LPTOOLTIPTEXTW; + +typedef_tident(TOOLTIPTEXT) +typedef_tident(LPTOOLTIPTEXT) typedef struct tagTPMPARAMS { UINT cbSize; RECT rcExclude; } TPMPARAMS, *LPTPMPARAMS; -#if 0 // RobD - typedef removed due to conflict with mingw headers +#if 0 /* RobD - typedef removed due to conflict with mingw headers */ typedef struct _TRANSMIT_FILE_BUFFERS { PVOID Head; DWORD HeadLength; @@ -4282,11 +5566,20 @@ typedef struct _TRANSMIT_FILE_BUFFERS { } TRANSMIT_FILE_BUFFERS; #endif -typedef struct _TT_HITTESTINFO { - HWND hwnd; - POINT pt; - TOOLINFO ti; -} TTHITTESTINFO, * LPHITTESTINFO; +typedef struct _TT_HITTESTINFOA { + HWND hwnd; + POINT pt; + TOOLINFOA ti; +} TTHITTESTINFOA, *LPHITTESTINFOA; + +typedef struct _TT_HITTESTINFOW { + HWND hwnd; + POINT pt; + TOOLINFOW ti; +} TTHITTESTINFOW, *LPHITTESTINFOW; + +typedef_tident(TTHITTESTINFO) +typedef_tident(LPHITTESTINFO) typedef struct tagTTPOLYCURVE { WORD wType; @@ -4298,24 +5591,40 @@ typedef struct _TTPOLYGONHEADER { DWORD cb; DWORD dwType; POINTFX pfxStart; -} TTPOLYGONHEADER, * LPTTPOLYGONHEADER; +} TTPOLYGONHEADER, *PTTPOLYGONHEADER, *LPTTPOLYGONHEADER; + +typedef struct _TV_DISPINFOA { + NMHDR hdr; + TV_ITEMA item; +} TV_DISPINFOA; -typedef struct _TV_DISPINFO { - NMHDR hdr; - TV_ITEM item; -} TV_DISPINFO; +typedef struct _TV_DISPINFOW { + NMHDR hdr; + TV_ITEMW item; +} TV_DISPINFOW; + +typedef_tident(TV_DISPINFO) typedef struct _TVHITTESTINFO { POINT pt; UINT flags; HTREEITEM hItem; -} TV_HITTESTINFO, *LPTV_HITTESTINFO; +} TV_HITTESTINFO, *LPTV_HITTESTINFO; + +typedef struct _TV_INSERTSTRUCTA { + HTREEITEM hParent; + HTREEITEM hInsertAfter; + TV_ITEMA item; +} TV_INSERTSTRUCTA, *LPTV_INSERTSTRUCTA; -typedef struct _TV_INSERTSTRUCT { +typedef struct _TV_INSERTSTRUCTW { HTREEITEM hParent; HTREEITEM hInsertAfter; - TV_ITEM item; -} TV_INSERTSTRUCT, *LPTV_INSERTSTRUCT; + TV_ITEMW item; +} TV_INSERTSTRUCTW, *LPTV_INSERTSTRUCTW; + +typedef_tident(TV_INSERTSTRUCT) +typedef_tident(LPTV_INSERTSTRUCT) typedef struct _TV_KEYDOWN { NMHDR hdr; @@ -4334,9 +5643,15 @@ typedef struct { UINT nInc; } UDACCEL; -typedef struct _UNIVERSAL_NAME_INFO { - LPTSTR lpUniversalName; -} UNIVERSAL_NAME_INFO; +typedef struct _UNIVERSAL_NAME_INFOA { + LPSTR lpUniversalName; +} UNIVERSAL_NAME_INFOA; + +typedef struct _UNIVERSAL_NAME_INFOW { + LPWSTR lpUniversalName; +} UNIVERSAL_NAME_INFOW; + +typedef_tident(UNIVERSAL_NAME_INFO) typedef struct tagUSEROBJECTFLAGS { WINBOOL fInherit; @@ -4391,15 +5706,9 @@ typedef struct _WIN32_FIND_DATAW { WCHAR cAlternateFileName[ 14 ]; } WIN32_FIND_DATAW, *LPWIN32_FIND_DATAW, *PWIN32_FIND_DATAW; -#ifdef UNICODE -#define WIN32_FIND_DATA WIN32_FIND_DATAW -#define PWIN32_FIND_DATA PWIN32_FIND_DATAW -#define LPWIN32_FIND_DATA LPWIN32_FIND_DATAW -#else -#define WIN32_FIND_DATA WIN32_FIND_DATAA -#define PWIN32_FIND_DATA PWIN32_FIND_DATAA -#define LPWIN32_FIND_DATA LPWIN32_FIND_DATAA -#endif +typedef_tident(WIN32_FIND_DATA) +typedef_tident(PWIN32_FIND_DATA) +typedef_tident(LPWIN32_FIND_DATA) typedef struct _WIN32_STREAM_ID { DWORD dwStreamId; @@ -4418,7 +5727,7 @@ typedef struct _WINDOWPLACEMENT { RECT rcNormalPosition; } WINDOWPLACEMENT; -typedef struct _WNDCLASS { +typedef struct _WNDCLASSA { UINT style; WNDPROC lpfnWndProc; int cbClsExtra; @@ -4427,11 +5736,26 @@ typedef struct _WNDCLASS { HICON hIcon; HCURSOR hCursor; HBRUSH hbrBackground; - LPCTSTR lpszMenuName; - LPCTSTR lpszClassName; -} WNDCLASS, *LPWNDCLASS; + LPCSTR lpszMenuName; + LPCSTR lpszClassName; +} WNDCLASSA, *LPWNDCLASSA; -typedef struct _WNDCLASSEX { +typedef struct _WNDCLASSW { + UINT style; + WNDPROC lpfnWndProc; + int cbClsExtra; + int cbWndExtra; + HANDLE hInstance; + HICON hIcon; + HCURSOR hCursor; + HBRUSH hbrBackground; + LPCWSTR lpszMenuName; + LPCWSTR lpszClassName; +} WNDCLASSW, *LPWNDCLASSW; + +typedef_tident(WNDCLASS) + +typedef struct _WNDCLASSEXA { UINT cbSize; UINT style; WNDPROC lpfnWndProc; @@ -4441,26 +5765,65 @@ typedef struct _WNDCLASSEX { HICON hIcon; HCURSOR hCursor; HBRUSH hbrBackground; - LPCTSTR lpszMenuName; - LPCTSTR lpszClassName; + LPCSTR lpszMenuName; + LPCSTR lpszClassName; HICON hIconSm; -} WNDCLASSEX, *LPWNDCLASSEX; +} WNDCLASSEXA, *LPWNDCLASSEXA; -typedef struct _CONNECTDLGSTRUCT { - DWORD cbStructure; - HWND hwndOwner; - LPNETRESOURCE lpConnRes; - DWORD dwFlags; - DWORD dwDevNum; -} CONNECTDLGSTRUCT, *LPCONNECTDLGSTRUCT; +typedef struct _WNDCLASSEXW { + UINT cbSize; + UINT style; + WNDPROC lpfnWndProc; + int cbClsExtra; + int cbWndExtra; + HANDLE hInstance; + HICON hIcon; + HCURSOR hCursor; + HBRUSH hbrBackground; + LPCWSTR lpszMenuName; + LPCWSTR lpszClassName; + HICON hIconSm; +} WNDCLASSEXW, *LPWNDCLASSEXW; + +typedef_tident(WNDCLASSEX) + +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_tident(CONNECTDLGSTRUCT) +typedef_tident(LPCONNECTDLGSTRUCT) + +typedef struct _DISCDLGSTRUCTA { + DWORD cbStructure; + HWND hwndOwner; + LPSTR lpLocalName; + LPSTR lpRemoteName; + DWORD dwFlags; +} DISCDLGSTRUCTA, *LPDISCDLGSTRUCTA; -typedef struct _DISCDLGSTRUCT { +typedef struct _DISCDLGSTRUCTW { DWORD cbStructure; HWND hwndOwner; - LPTSTR lpLocalName; - LPTSTR lpRemoteName; + LPWSTR lpLocalName; + LPWSTR lpRemoteName; DWORD dwFlags; -} DISCDLGSTRUCT, *LPDISCDLGSTRUCT; +} DISCDLGSTRUCTW, *LPDISCDLGSTRUCTW; + +typedef_tident(DISCDLGSTRUCT) +typedef_tident(LPDISCDLGSTRUCT) typedef struct _NETINFOSTRUCT{ DWORD cbStructure; @@ -4488,29 +5851,17 @@ typedef int CALLBACK (*ENHMETAFILEPROC) (HDC, HANDLETABLE, typedef int CALLBACK (*ENUMFONTSPROCA) (LPLOGFONTA, LPTEXTMETRICA, DWORD, LPARAM); typedef int CALLBACK (*ENUMFONTSPROCW) (LPLOGFONTW, LPTEXTMETRICW, DWORD, LPARAM); -#ifdef UNICODE -typedef ENUMFONTSPROCW ENUMFONTSPROC; -#else -typedef ENUMFONTSPROCA ENUMFONTSPROC; -#endif +typedef_tident(ENUMFONTSPROC) typedef int CALLBACK (*FONTENUMPROCA) (ENUMLOGFONTA *, NEWTEXTMETRICA *, int, LPARAM); typedef int CALLBACK (*FONTENUMPROCW) (ENUMLOGFONTW *, NEWTEXTMETRICW *, int, LPARAM); -#ifdef UNICODE -typedef FONTENUMPROCW FONTENUMPROC; -#else -typedef FONTENUMPROCA FONTENUMPROC; -#endif +typedef_tident(FONTENUMPROC) typedef int CALLBACK (*FONTENUMEXPROCA) (ENUMLOGFONTEXA *, NEWTEXTMETRICEXA *, int, LPARAM); typedef int CALLBACK (*FONTENUMEXPROCW) (ENUMLOGFONTEXW *, NEWTEXTMETRICEXW *, int, LPARAM); -#ifdef UNICODE -typedef FONTENUMEXPROCW FONTENUMEXPROC; -#else -typedef FONTENUMEXPROCA FONTENUMEXPROC; -#endif +typedef_tident(FONTENUMEXPROC) typedef VOID CALLBACK (*LPOVERLAPPED_COMPLETION_ROUTINE) (DWORD, DWORD, LPOVERLAPPED); @@ -4801,11 +6152,17 @@ typedef struct tagTITLEBARINFO { DWORD rgstate[CCHILDREN_TITLEBAR+1]; } TITLEBARINFO, *PTITLEBARINFO, *LPTITLEBARINFO; -typedef struct { - HWND hwnd; - LPCTSTR szWindowName; - UINT32 fToBeClosed; - UINT32 fToBeTerminated; +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 tagMOUSEINPUT { @@ -4848,6 +6205,89 @@ typedef struct tagTRACKMOUSEEVENT { DWORD dwHoverTime; } TRACKMOUSEEVENT, *LPTRACKMOUSEEVENT; +typedef IMAGE_THUNK_DATA * PImgThunkData; +typedef const IMAGE_THUNK_DATA * PCImgThunkData; + +typedef struct ImgDelayDescr { + DWORD grAttrs; + LPCSTR szName; + HMODULE * phmod; + PImgThunkData pIAT; + PCImgThunkData pINT; + PCImgThunkData pBoundIAT; + PCImgThunkData pUnloadIAT; + DWORD dwTimeStamp; + } ImgDelayDescr, * PImgDelayDescr; + +typedef const ImgDelayDescr * PCImgDelayDescr; + +typedef struct DelayLoadProc { + BOOL fImportByName; + union { + LPCSTR szProcName; + DWORD dwOrdinal; + }; + } DelayLoadProc; + +typedef struct DelayLoadInfo { + DWORD cb; + PCImgDelayDescr pidd; + FARPROC * ppfn; + LPCSTR szDll; + DelayLoadProc dlp; + HMODULE hmodCur; + FARPROC pfnCur; + DWORD dwLastError; + } DelayLoadInfo, * PDelayLoadInfo; + +typedef struct _RTL_HEAP_TAG_INFO { + ULONG AllocCount; + ULONG FreeCount; + ULONG MemoryUsed; +} RTL_HEAP_TAG_INFO, *LPRTL_HEAP_TAG_INFO, *PRTL_HEAP_TAG_INFO; + +typedef struct _PORT_MESSAGE { + USHORT DataSize; + USHORT MessageSize; + USHORT MessageType; + USHORT VirtualRangesOffset; + CLIENT_ID ClientId; + ULONG MessageId; + ULONG SectionSize; +// UCHAR Data []; +} PORT_MESSAGE,*PPORT_MESSAGE; + +typedef struct _PORT_SECTION_WRITE { + ULONG Length; + HANDLE SectionHandle; + ULONG SectionOffset; + ULONG ViewSize; + PVOID ViewBase; + PVOID TargetViewBase; +} PORT_SECTION_WRITE,*PPORT_SECTION_WRITE; + +typedef struct _PORT_SECTION_READ { + ULONG Length; + ULONG ViewSize; + ULONG ViewBase; +} PORT_SECTION_READ,*PPORT_SECTION_READ; + +typedef struct _FILE_USER_QUOTA_INFORMATION { + ULONG NextEntryOffset; + ULONG SidLength; + LARGE_INTEGER ChangeTime; + LARGE_INTEGER QuotaUsed; + LARGE_INTEGER QuotaThreshold; + LARGE_INTEGER QuotaLimit; + SID Sid [1 ]; +} FILE_USER_QUOTA_INFORMATION,*PFILE_USER_QUOTA_INFORMATION; + +typedef struct _FILE_QUOTA_LIST_INFORMATION { + ULONG NextEntryOffset; + ULONG SidLength; + SID Sid [1 ]; +} FILE_QUOTA_LIST_INFORMATION,*PFILE_QUOTA_LIST_INFORMATION; + typedef struct _BLENDFUNCTION { BYTE BlendOp; BYTE BlendFlags; @@ -4875,5 +6315,3 @@ typedef struct _WIN32_FILE_ATTRIBUTES_DATA { #endif /* WIN32_LEAN_AND_MEAN */ #endif /* _GNU_H_WINDOWS32_STRUCTURES */ - - diff --git a/include/syssetup.h b/include/syssetup.h new file mode 100644 index 0000000..4e39f3c --- /dev/null +++ b/include/syssetup.h @@ -0,0 +1,55 @@ +/* $Id$ +*/ +/* + * syssetup.h + * + * System setup API, native interface + * + * This file is part of the ReactOS Operating System. + * + * Contributors: + * Created by Eric Kohl + * + * 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 + * DISCLAMED. This includes but is not limited to warranties of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + */ + +#ifndef __SYSSETUP_H_INCLUDED__ +#define __SYSSETUP_H_INCLUDED__ + +/* System setup APIs */ + +DWORD STDCALL +InstallReactOS (HINSTANCE hInstance); + + +/* Log File APIs */ + +#define SEVERITY_INFORMATION 0 +#define SEVERITY_WARNING 1 +#define SEVERITY_ERROR 2 +#define SEVERITY_FATAL_ERROR 3 + + +BOOL STDCALL +InitializeSetupActionLog (BOOL bDeleteOldLogFile); + +VOID STDCALL +TerminateSetupActionLog (VOID); + +BOOL STDCALL +LogItem (DWORD dwSeverity, + LPWSTR lpMessageText); + + +#endif /* __SYSSETUP_H_INCLUDED__ */ + +/* EOF */ diff --git a/include/tchar.h b/include/tchar.h index fbc98c7..f34d7ef 100644 --- a/include/tchar.h +++ b/include/tchar.h @@ -38,6 +38,8 @@ #ifndef _TCHAR_H_ #define _TCHAR_H_ +#include + /* * NOTE: This tests _UNICODE, which is different from the UNICODE define * used to differentiate Win32 API calls. @@ -114,6 +116,7 @@ typedef wchar_t TCHAR; #define _tcsncat wcsncat #define _tcsncmp wcsncmp #define _tcsncpy wcsncpy +#define _tcsnlen wcsnlen #define _tcspbrk wcspbrk #define _tcsrchr wcsrchr #define _tcsspn wcsspn @@ -218,6 +221,7 @@ typedef char TCHAR; #define _tcsncat strncat #define _tcsncmp strncmp #define _tcsncpy strncpy +#define _tcsnlen strnlen #define _tcspbrk strpbrk #define _tcsrchr strrchr #define _tcsspn strspn diff --git a/include/tgetopt.h b/include/tgetopt.h new file mode 100644 index 0000000..3b829a7 --- /dev/null +++ b/include/tgetopt.h @@ -0,0 +1,90 @@ +#ifndef _GETOPT_H +#define _GETOPT_H 1 + +#include + +#ifdef _UNICODE +#define _toption _woption +#define _toptarg _woptarg +#define _toptind _woptind +#define _topterr _wopterr +#define _toptopt _woptopt +#define _tgetopt _wgetopt +#define _tgetopt_long _wgetopt_long +#define _tgetopt_long_only _wgetopt_long_only +#define _tgetopt_internal _wgetopt_internal +#else +#define _toption option +#define _toptarg optarg +#define _toptind optind +#define _topterr opterr +#define _toptopt optopt +#define _tgetopt getopt +#define _tgetopt_long getopt_long +#define _tgetopt_long_only getopt_long_only +#define _tgetopt_internal _getopt_internal +#endif + +#ifdef __cplusplus +extern "C" +{ +#endif + +extern char *optarg; +extern int optind; + extern int opterr; +extern int optopt; + +extern wchar_t *_woptarg; + extern int _woptind; +extern int _wopterr; +extern int _woptopt; + +struct option +{ + const char *name; + int has_arg; + int *flag; + int val; +}; + +struct _woption +{ + const wchar_t *name; + int has_arg; + int *flag; + int val; +}; + +#define no_argument 0 +#define required_argument 1 +#define optional_argument 2 + +extern int getopt (int argc, char *const *argv, const char *shortopts); +extern int getopt_long (int argc, char *const *argv, const char *shortopts, + const struct option *longopts, int *longind); +extern int getopt_long_only (int argc, char *const *argv, + const char *shortopts, const struct option *longopts, int *longind); + +extern int _wgetopt (int argc, wchar_t *const *argv, const wchar_t *shortopts); +extern int _wgetopt_long (int argc, wchar_t *const *argv, const wchar_t *shortopts, + const struct _woption *longopts, int *longind); +extern int _wgetopt_long_only (int argc, wchar_t *const *argv, + const wchar_t *shortopts, + const struct _woption *longopts, int *longind); + +extern int _getopt_internal (int argc, char *const *argv, + const char *shortopts, const struct option *longopts, int *longind, + int long_only); + +extern int _wgetopt_internal (int argc, wchar_t *const *argv, + const wchar_t *shortopts, + const struct _woption *longopts, int *longind, + int long_only); + +#ifdef __cplusplus + } +#endif + +#endif /* _GETOPT_H */ + diff --git a/include/unicode.h b/include/unicode.h index a37474d..a25ac4d 100644 --- a/include/unicode.h +++ b/include/unicode.h @@ -38,6 +38,607 @@ extern "C" { WINBOOL STDCALL +BackupEventLogW ( + HANDLE hEventLog, + LPCWSTR lpBackupFileName + ); + +WINBOOL +STDCALL +ClearEventLogW ( + HANDLE hEventLog, + LPCWSTR lpBackupFileName + ); + +WINBOOL +STDCALL +CreateProcessAsUserW ( + HANDLE hToken, + LPCWSTR lpApplicationName, + LPWSTR lpCommandLine, + LPSECURITY_ATTRIBUTES lpProcessAttributes, + LPSECURITY_ATTRIBUTES lpThreadAttributes, + WINBOOL bInheritHandles, + DWORD dwCreationFlags, + LPVOID lpEnvironment, + LPCWSTR lpCurrentDirectory, + LPSTARTUPINFOW lpStartupInfo, + LPPROCESS_INFORMATION lpProcessInformation + ); + +WINBOOL +STDCALL +DecryptFileW( + LPCWSTR lpFileName, + DWORD dwReserved + ); + +WINBOOL +STDCALL +EncryptFileW( + LPCWSTR lpFileName + ); + +WINBOOL +STDCALL +FileEncryptionStatusW( + LPCWSTR lpFileName, + LPDWORD lpStatus + ); + +WINBOOL +STDCALL +GetCurrentHwProfileW ( + LPHW_PROFILE_INFOW lpHwProfileInfo + ); + +WINBOOL +STDCALL +LogonUserW ( + LPCWSTR lpszUsername, + LPCWSTR lpszDomain, + LPCWSTR lpszPassword, + DWORD dwLogonType, + DWORD dwLogonProvider, + PHANDLE phToken + ); + +WINBOOL +STDCALL +LogonUserExW ( + LPCWSTR lpszUsername, + LPCWSTR lpszDomain, + LPCWSTR lpszPassword, + DWORD dwLogonType, + DWORD dwLogonProvider, + PHANDLE phToken , + PSID *ppLogonSid , + PVOID *ppProfileBuffer , + LPDWORD pdwProfileLength , + PQUOTA_LIMITS pQuotaLimits + ); + +HANDLE +STDCALL +OpenBackupEventLogW ( + LPCWSTR lpUNCServerName, + LPCWSTR lpFileName + ); + +DWORD +STDCALL +OpenEncryptedFileRawW( + LPCWSTR lpFileName, + ULONG ulFlags, + PVOID * pvContext + ); + +HANDLE +STDCALL +OpenEventLogW ( + LPCWSTR lpUNCServerName, + LPCWSTR lpSourceName + ); + +WINBOOL +STDCALL +ReadEventLogW ( + HANDLE hEventLog, + DWORD dwReadFlags, + DWORD dwRecordOffset, + LPVOID lpBuffer, + DWORD nNumberOfBytesToRead, + DWORD *pnBytesRead, + DWORD *pnMinNumberOfBytesNeeded + ); + +WINBOOL +STDCALL +ChangeServiceConfig2W( + SC_HANDLE hService, + DWORD dwInfoLevel, + LPVOID lpInfo + ); + +WINBOOL +STDCALL +EnumServicesStatusExW( + SC_HANDLE hSCManager, + SC_ENUM_TYPE InfoLevel, + DWORD dwServiceType, + DWORD dwServiceState, + LPBYTE lpServices, + DWORD cbBufSize, + LPDWORD pcbBytesNeeded, + LPDWORD lpServicesReturned, + LPDWORD lpResumeHandle, + LPCWSTR pszGroupName + ); + +WINBOOL +STDCALL +QueryServiceConfig2W( + SC_HANDLE hService, + DWORD dwInfoLevel, + LPBYTE lpBuffer, + DWORD cbBufSize, + LPDWORD pcbBytesNeeded + ); + +SERVICE_STATUS_HANDLE +STDCALL +RegisterServiceCtrlHandlerExW( + LPCWSTR lpServiceName, + LPHANDLER_FUNCTION_EX lpHandlerProc, + LPVOID lpContext + ); + +LRESULT +STDCALL +SendIMEMessageExW(HWND hwnd,LPARAM lparam); + +WINBOOL +STDCALL +IMPSetIMEW( HWND hwnd, LPIMEPROW ime); + +WINBOOL +STDCALL +IMPQueryIMEW( LPIMEPROW ime); + +WINBOOL +STDCALL +IMPGetIMEW( HWND hwnd, LPIMEPROW ime); + +WINBOOL +STDCALL +SetCalendarInfoW( + LCID Locale, + CALID Calendar, + CALTYPE CalType, + LPCWSTR lpCalData); + +WINBOOL +STDCALL +EnumUILanguagesW( + UILANGUAGE_ENUMPROCW lpUILanguageEnumProc, + DWORD dwFlags, + LONG_PTR lParam); + +WINBOOL +STDCALL +EnumLanguageGroupLocalesW( + LANGGROUPLOCALE_ENUMPROCW lpLangGroupLocaleEnumProc, + LGRPID LanguageGroup, + DWORD dwFlags, + LONG_PTR lParam); + +WINBOOL +STDCALL +EnumSystemLanguageGroupsW( + LANGUAGEGROUP_ENUMPROCW lpLanguageGroupEnumProc, + DWORD dwFlags, + LONG_PTR lParam); + +int +STDCALL +GetGeoInfoW( + GEOID Location, + GEOTYPE GeoType, + LPWSTR lpGeoData, + int cchData, + LANGID LangId); + +WINBOOL +STDCALL +EnumDateFormatsExW( + DATEFMT_ENUMPROCEXW lpDateFmtEnumProcEx, + LCID Locale, + DWORD dwFlags); + +WINBOOL +STDCALL +EnumCalendarInfoExW( + CALINFO_ENUMPROCEXW lpCalInfoEnumProcEx, + LCID Locale, + CALID Calendar, + CALTYPE CalType); + +int +STDCALL +GetCalendarInfoW( + LCID Locale, + CALID Calendar, + CALTYPE CalType, + LPWSTR lpCalData, + int cchData, + LPDWORD lpValue); + +WINBOOL +STDCALL +GetCPInfoExW( + UINT CodePage, + DWORD dwFlags, + LPCPINFOEXW lpCPInfoEx); + +WINBOOL +STDCALL +CheckNameLegalDOS8Dot3W( + LPCWSTR lpName, + LPSTR lpOemName OPTIONAL, + DWORD OemNameSize OPTIONAL, + PWINBOOL pbNameContainsSpaces OPTIONAL, + PWINBOOL pbNameLegal + ); + +WINBOOL +STDCALL +CreateHardLinkW( + LPCWSTR lpFileName, + LPCWSTR lpExistingFileName, + LPSECURITY_ATTRIBUTES lpSecurityAttributes + ); + +HANDLE +STDCALL +CreateJobObjectW( + LPSECURITY_ATTRIBUTES lpJobAttributes, + LPCWSTR lpName + ); + +WINBOOL +STDCALL +DeleteVolumeMountPointW( + LPCWSTR lpszVolumeMountPoint + ); + +WINBOOL +STDCALL +DnsHostnameToComputerNameW ( + LPCWSTR Hostname, + LPWSTR ComputerName, + LPDWORD nSize + ); + +WINBOOL +STDCALL +FindActCtxSectionStringW( + DWORD dwFlags, + const GUID *lpExtensionGuid, + ULONG ulSectionId, + LPCWSTR lpStringToFind, + PACTCTX_SECTION_KEYED_DATA ReturnedData + ); + +HANDLE +STDCALL +FindFirstFileExW( + LPCWSTR lpFileName, + FINDEX_INFO_LEVELS fInfoLevelId, + LPVOID lpFindFileData, + FINDEX_SEARCH_OPS fSearchOp, + LPVOID lpSearchFilter, + DWORD dwAdditionalFlags + ); + +HANDLE +STDCALL +FindFirstVolumeW( + LPWSTR lpszVolumeName, + DWORD cchBufferLength + ); + +HANDLE +STDCALL +FindFirstVolumeMountPointW( + LPCWSTR lpszRootPathName, + LPWSTR lpszVolumeMountPoint, + DWORD cchBufferLength + ); + +WINBOOL +STDCALL +FindNextVolumeW( + HANDLE hFindVolume, + LPWSTR lpszVolumeName, + DWORD cchBufferLength + ); + +WINBOOL +STDCALL +FindNextVolumeMountPointW( + HANDLE hFindVolumeMountPoint, + LPWSTR lpszVolumeMountPoint, + DWORD cchBufferLength + ); + +WINBOOL +STDCALL +GetComputerNameExW ( + COMPUTER_NAME_FORMAT NameType, + LPWSTR lpBuffer, + LPDWORD nSize + ); + +DWORD +STDCALL +GetDllDirectoryW( + DWORD nBufferLength, + LPWSTR lpBuffer + ); + +DWORD +STDCALL +GetFirmwareEnvironmentVariableW( + LPCWSTR lpName, + LPCWSTR lpGuid, + PVOID pBuffer, + DWORD nSize + ); + +DWORD +STDCALL +GetLongPathNameW( + LPCWSTR lpszShortPath, + LPWSTR lpszLongPath, + DWORD cchBuffer + ); + +WINBOOL +STDCALL +GetModuleHandleExW( + DWORD dwFlags, + LPCWSTR lpModuleName, + HMODULE* phModule + ); + +UINT +STDCALL +GetSystemWow64DirectoryW( + LPWSTR lpBuffer, + UINT uSize + ); + +WINBOOL +STDCALL +GetVolumeNameForVolumeMountPointW( + LPCWSTR lpszVolumeMountPoint, + LPWSTR lpszVolumeName, + DWORD cchBufferLength + ); + +WINBOOL +STDCALL +GetVolumePathNameW( + LPCWSTR lpszFileName, + LPWSTR lpszVolumePathName, + DWORD cchBufferLength + ); + +WINBOOL +STDCALL +GetVolumePathNamesForVolumeNameW( + LPCWSTR lpszVolumeName, + LPWSTR lpszVolumePathNames, + DWORD cchBufferLength, + PDWORD lpcchReturnLength + ); + +HANDLE +STDCALL +OpenJobObjectW( + DWORD dwDesiredAccess, + WINBOOL bInheritHandle, + LPCWSTR lpName + ); + +WINBOOL +STDCALL +ReplaceFileW( + LPCWSTR lpReplacedFileName, + LPCWSTR lpReplacementFileName, + LPCWSTR lpBackupFileName, + DWORD dwReplaceFlags, + LPVOID lpExclude, + LPVOID lpReserved + ); + +WINBOOL +STDCALL +SetComputerNameExW ( + COMPUTER_NAME_FORMAT NameType, + LPCWSTR lpBuffer + ); + +WINBOOL +STDCALL +SetDllDirectoryW( + LPCWSTR lpPathName + ); + +WINBOOL +STDCALL +SetFileShortNameW( + HANDLE hFile, + LPCWSTR lpShortName + ); + +WINBOOL +STDCALL +SetFirmwareEnvironmentVariableW( + LPCWSTR lpName, + LPCWSTR lpGuid, + PVOID pValue, + DWORD nSize + ); + +WINBOOL +STDCALL +SetVolumeMountPointW( + LPCWSTR lpszVolumeMountPoint, + LPCWSTR lpszVolumeName + ); + +WINBOOL +STDCALL +VerifyVersionInfoW( + LPOSVERSIONINFOEXW lpVersionInformation, + DWORD dwTypeMask, + DWORDLONG dwlConditionMask + ); + +HDEVNOTIFY +STDCALL +RegisterDeviceNotificationW( + HANDLE hRecipient, + LPVOID NotificationFilter, + DWORD Flags + ); + +UINT +STDCALL +GetRawInputDeviceInfoW( + HANDLE hDevice, + UINT uiCommand, + LPVOID pData, + PUINT pcbSize); + +LONG +STDCALL +BroadcastSystemMessageExW( + DWORD dwflags, + LPDWORD lpdwRecipients, + UINT uiMessage, + WPARAM wParam, + LPARAM lParam, + PBSMINFO pBSMInfo); + +LONG +STDCALL +CsrBroadcastSystemMessageExW( + DWORD dwflags, + LPDWORD lpdwRecipients, + UINT uiMessage, + WPARAM wParam, + LPARAM lParam, + PBSMINFO pBSMInfo); + +HFONT +STDCALL +CreateFontIndirectExW(const ENUMLOGFONTEXDVW *elfexd); + +DWORD +STDCALL +GetGlyphIndicesW( + HDC hdc, + LPCWSTR lpstr, + int c, + LPWORD pgi, + DWORD fl +); + +WINBOOL +STDCALL +RemoveFontResourceExW( + LPCWSTR lpFileName, + DWORD fl, + PVOID pdv +); + +UINT +STDCALL +GetStringBitmapW(HDC hdc,LPWSTR pwsz,WINBOOL unknown,UINT cj,BYTE *lpSB); + +WINBOOL +STDCALL +GetAltTabInfoW( + HWND hwnd, + int iItem, + PALTTABINFO pati, + LPWSTR pszItemText, + UINT cchItemText + ); + +UINT +STDCALL +PrivateExtractIconsW( + LPCWSTR szFileName, + int nIconIndex, + int cxIcon, + int cyIcon, + HICON *phicon, + UINT *piconid, + UINT nIcons, + UINT flags + ); + +UINT +STDCALL +RealGetWindowClassW( + HWND hwnd, + LPWSTR pszType, + UINT cchType + ); + +LRESULT +STDCALL +MenuWindowProcW( + HWND hWnd, + UINT Msg, + WPARAM wParam, + LPARAM lParam + ); + +WINBOOL +STDCALL +DrawCaptionTempW( + HWND hwnd, + HDC hdc, + const RECT *rect, + HFONT hFont, + HICON hIcon, + LPCWSTR str, + UINT uFlags + ); + +HHOOK +STDCALL +SetWindowsHookW( + int idHook, + HOOKPROC lpfn + ); + +HRESULT +STDCALL +PrivateExtractIconExW( + DWORD u, + DWORD v, + DWORD w, + DWORD x, + DWORD y + ); + +WINBOOL +STDCALL GetBinaryTypeW( LPCWSTR lpApplicationName, LPDWORD lpBinaryType @@ -293,7 +894,7 @@ WINBOOL STDCALL EnumResourceTypesW( HINSTANCE hModule, - ENUMRESTYPEPROC lpEnumFunc, + ENUMRESTYPEPROCW lpEnumFunc, LONG lParam ); @@ -302,7 +903,7 @@ STDCALL EnumResourceNamesW( HINSTANCE hModule, LPCWSTR lpType, - ENUMRESNAMEPROC lpEnumFunc, + ENUMRESNAMEPROCW lpEnumFunc, LONG lParam ); @@ -312,7 +913,7 @@ EnumResourceLanguagesW( HINSTANCE hModule, LPCWSTR lpType, LPCWSTR lpName, - ENUMRESLANGPROC lpEnumFunc, + ENUMRESLANGPROCW lpEnumFunc, LONG lParam ); @@ -607,6 +1208,14 @@ GetFileAttributesW( LPCWSTR lpFileName ); +BOOL +STDCALL +GetFileAttributesExW( + LPCWSTR lpFileName, + GET_FILEEX_INFO_LEVELS fInfoLevelId, + LPVOID lpFileInformation + ); + DWORD STDCALL GetCompressedFileSizeW( @@ -1049,7 +1658,7 @@ WINBOOL STDCALL EnumDesktopsW( HWINSTA hwinsta, - DESKTOPENUMPROC lpEnumFunc, + DESKTOPENUMPROCW lpEnumFunc, LPARAM lParam); HWINSTA @@ -1070,7 +1679,7 @@ OpenWindowStationW( WINBOOL STDCALL EnumWindowStationsW( - ENUMWINDOWSTATIONPROC lpEnumFunc, + ENUMWINDOWSTATIONPROCW lpEnumFunc, LPARAM lParam); WINBOOL @@ -1190,7 +1799,7 @@ CallWindowProcW( ATOM STDCALL RegisterClassW( - CONST WNDCLASS *lpWndClass); + CONST WNDCLASSW *lpWndClass); WINBOOL STDCALL @@ -1203,15 +1812,15 @@ STDCALL GetClassInfoW( HINSTANCE hInstance , LPCWSTR lpClassName, - LPWNDCLASS lpWndClass); + LPWNDCLASSW lpWndClass); ATOM STDCALL -RegisterClassExW(CONST WNDCLASSEX *); +RegisterClassExW(CONST WNDCLASSEXW *); WINBOOL STDCALL -GetClassInfoExW(HINSTANCE, LPCWSTR, LPWNDCLASSEX); +GetClassInfoExW(HINSTANCE, LPCWSTR, LPWNDCLASSEXW); HWND STDCALL @@ -1514,7 +2123,7 @@ InsertMenuItemW( HMENU, UINT, WINBOOL, - LPCMENUITEMINFO + LPCMENUITEMINFOW ); WINBOOL @@ -1523,7 +2132,7 @@ GetMenuItemInfoW( HMENU, UINT, WINBOOL, - LPMENUITEMINFO + LPMENUITEMINFOW ); WINBOOL @@ -1532,7 +2141,7 @@ SetMenuItemInfoW( HMENU hMenu, UINT uItem, WINBOOL fByPosition, - LPMENUITEMINFO lpmii); + LPMENUITEMINFOW lpmii); int STDCALL @@ -1606,14 +2215,14 @@ int STDCALL EnumPropsExW( HWND hWnd, - PROPENUMPROCEX lpEnumFunc, + PROPENUMPROCEXW lpEnumFunc, LPARAM lParam); int STDCALL EnumPropsW( HWND hWnd, - PROPENUMPROC lpEnumFunc); + PROPENUMPROCW lpEnumFunc); WINBOOL STDCALL @@ -1850,6 +2459,10 @@ SystemParametersInfoW( int STDCALL +AddFontResourceExW ( LPCWSTR, DWORD, PVOID ); + +int +STDCALL AddFontResourceW(LPCWSTR); HMETAFILE @@ -1885,15 +2498,15 @@ DeviceCapabilitiesW(LPCWSTR, LPCWSTR, WORD, int STDCALL -EnumFontFamiliesExW(HDC, LPLOGFONTW, FONTENUMEXPROC, LPARAM, DWORD); +EnumFontFamiliesExW(HDC, LPLOGFONTW, FONTENUMEXPROCW, LPARAM, DWORD); int STDCALL -EnumFontFamiliesW(HDC, LPCWSTR, FONTENUMPROC, LPARAM); +EnumFontFamiliesW(HDC, LPCWSTR, FONTENUMPROCW, LPARAM); int STDCALL -EnumFontsW(HDC, LPCWSTR, ENUMFONTSPROC, LPARAM); +EnumFontsW(HDC, LPCWSTR, FONTENUMPROCW, LPARAM); WINBOOL STDCALL @@ -1958,7 +2571,7 @@ GetTextExtentExPointW( DWORD STDCALL -GetCharacterPlacementW(HDC, LPCWSTR, int, int, LPGCP_RESULTS, DWORD); +GetCharacterPlacementW(HDC, LPCWSTR, int, int, LPGCP_RESULTSW, DWORD); HDC STDCALL @@ -1990,7 +2603,7 @@ GetTextMetricsW(HDC, LPTEXTMETRICW); int STDCALL -StartDocW(HDC, CONST DOCINFO *); +StartDocW(HDC, CONST DOCINFOW *); int STDCALL @@ -2006,7 +2619,7 @@ ExtTextOutW(HDC, int, int, UINT, CONST RECT *,LPCWSTR, UINT, CONST INT *); WINBOOL STDCALL -PolyTextOutW(HDC, CONST POLYTEXT *, int); +PolyTextOutW(HDC, CONST POLYTEXTW *, int); int STDCALL @@ -2018,11 +2631,11 @@ GetKerningPairsW(HDC, DWORD, LPKERNINGPAIR); WINBOOL STDCALL -GetLogColorSpaceW(HCOLORSPACE,LPLOGCOLORSPACE,DWORD); +GetLogColorSpaceW(HCOLORSPACE,LPLOGCOLORSPACEW,DWORD); HCOLORSPACE STDCALL -CreateColorSpaceW(LPLOGCOLORSPACE); +CreateColorSpaceW(LPLOGCOLORSPACEW); WINBOOL STDCALL @@ -2038,15 +2651,15 @@ UpdateICMRegKeyW(DWORD, DWORD, LPWSTR, UINT); int STDCALL -EnumICMProfilesW(HDC,ICMENUMPROC,LPARAM); +EnumICMProfilesW(HDC,ICMENUMPROCW,LPARAM); HPROPSHEETPAGE STDCALL -CreatePropertySheetPageW(LPCPROPSHEETPAGE lppsp); +CreatePropertySheetPageW(LPCPROPSHEETPAGEW lppsp); int STDCALL -PropertySheetW(LPCPROPSHEETHEADER lppsph); +PropertySheetW(LPCPROPSHEETHEADERW lppsph); HIMAGELIST STDCALL @@ -2068,11 +2681,11 @@ DrawStatusTextW(HDC hDC, LPRECT lprc, LPCWSTR pszText, UINT uFlags); WINBOOL STDCALL -GetOpenFileNameW(LPOPENFILENAME); +GetOpenFileNameW(LPOPENFILENAMEW); WINBOOL STDCALL -GetSaveFileNameW(LPOPENFILENAME); +GetSaveFileNameW(LPOPENFILENAMEW); short STDCALL @@ -2080,27 +2693,27 @@ GetFileTitleW(LPCWSTR, LPWSTR, WORD); WINBOOL STDCALL -ChooseColorW(LPCHOOSECOLOR); +ChooseColorW(LPCHOOSECOLORW); HWND STDCALL -ReplaceTextW(LPFINDREPLACE); +ReplaceTextW(LPFINDREPLACEW); WINBOOL STDCALL -ChooseFontW(LPCHOOSEFONT); +ChooseFontW(LPCHOOSEFONTW); HWND STDCALL -FindTextW(LPFINDREPLACE); +FindTextW(LPFINDREPLACEW); WINBOOL STDCALL -PrintDlgW(LPPRINTDLG); +PrintDlgW(LPPRINTDLGW); WINBOOL STDCALL -PageSetupDlgW(LPPAGESETUPDLG); +PageSetupDlgW(LPPAGESETUPDLGW); WINBOOL STDCALL @@ -2524,7 +3137,7 @@ GetNumberFormatW( LCID Locale, DWORD dwFlags, LPCWSTR lpValue, - CONST NUMBERFMT *lpFormat, + CONST NUMBERFMTW *lpFormat, LPWSTR lpNumberStr, int cchNumber); @@ -2534,14 +3147,14 @@ GetCurrencyFormatW( LCID Locale, DWORD dwFlags, LPCWSTR lpValue, - CONST CURRENCYFMT *lpFormat, + CONST CURRENCYFMTW *lpFormat, LPWSTR lpCurrencyStr, int cchCurrency); WINBOOL STDCALL EnumCalendarInfoW( - CALINFO_ENUMPROC lpCalInfoEnumProc, + CALINFO_ENUMPROCW lpCalInfoEnumProc, LCID Locale, CALID Calendar, CALTYPE CalType); @@ -2549,14 +3162,14 @@ EnumCalendarInfoW( WINBOOL STDCALL EnumTimeFormatsW( - TIMEFMT_ENUMPROC lpTimeFmtEnumProc, + TIMEFMT_ENUMPROCW lpTimeFmtEnumProc, LCID Locale, DWORD dwFlags); WINBOOL STDCALL EnumDateFormatsW( - DATEFMT_ENUMPROC lpDateFmtEnumProc, + DATEFMT_ENUMPROCW lpDateFmtEnumProc, LCID Locale, DWORD dwFlags); @@ -2589,13 +3202,13 @@ FoldStringW( WINBOOL STDCALL EnumSystemLocalesW( - LOCALE_ENUMPROC lpLocaleEnumProc, + LOCALE_ENUMPROCW lpLocaleEnumProc, DWORD dwFlags); WINBOOL STDCALL EnumSystemCodePagesW( - CODEPAGE_ENUMPROC lpCodePageEnumProc, + CODEPAGE_ENUMPROCW lpCodePageEnumProc, DWORD dwFlags); WINBOOL @@ -2727,18 +3340,18 @@ WNetAddConnectionW( DWORD STDCALL WNetAddConnection2W( - LPNETRESOURCE lpNetResource, - LPCWSTR lpPassword, - LPCWSTR lpUserName, + LPNETRESOURCEW lpNetResource, + LPCWSTR lpPassword, + LPCWSTR lpUserName, DWORD dwFlags ); DWORD STDCALL WNetAddConnection3W( - HWND hwndOwner, - LPNETRESOURCE lpNetResource, - LPCWSTR lpPassword, - LPCWSTR lpUserName, + HWND hwndOwner, + LPNETRESOURCEW lpNetResource, + LPCWSTR lpPassword, + LPCWSTR lpUserName, DWORD dwFlags ); @@ -2765,7 +3378,7 @@ WNetGetConnectionW( DWORD STDCALL WNetUseConnectionW( HWND hwndOwner, - LPNETRESOURCE lpNetResource, + LPNETRESOURCEW lpNetResource, LPCWSTR lpUserID, LPCWSTR lpPassword, DWORD dwFlags, @@ -2783,12 +3396,12 @@ WNetSetConnectionW( DWORD STDCALL WNetConnectionDialog1W( - LPCONNECTDLGSTRUCT lpConnDlgStruct + LPCONNECTDLGSTRUCTW lpConnDlgStruct ); DWORD STDCALL WNetDisconnectDialog1W( - LPDISCDLGSTRUCT lpConnDlgStruct + LPDISCDLGSTRUCTW lpConnDlgStruct ); DWORD STDCALL @@ -2796,7 +3409,7 @@ WNetOpenEnumW( DWORD dwScope, DWORD dwType, DWORD dwUsage, - LPNETRESOURCE lpNetResource, + LPNETRESOURCEW lpNetResource, LPHANDLE lphEnum ); @@ -2847,7 +3460,7 @@ WNetGetLastErrorW( DWORD STDCALL MultinetGetConnectionPerformanceW( - LPNETRESOURCE lpNetResource, + LPNETRESOURCEW lpNetResource, LPNETCONNECTINFOSTRUCT lpNetConnectInfoStruct ); @@ -3038,11 +3651,11 @@ DdeQueryStringW( /* end of stuff from ddeml.h in old Cygnus headers */ /* ----------------------------------------------- */ -WINBOOL STDCALL LogonUserW (LPWSTR, LPWSTR, LPWSTR, DWORD, DWORD, HANDLE *); -WINBOOL STDCALL CreateProcessAsUserW (HANDLE, LPCWSTR, LPWSTR, - SECURITY_ATTRIBUTES*, SECURITY_ATTRIBUTES*, WINBOOL, - DWORD, LPVOID, LPCWSTR, STARTUPINFOW*, - PROCESS_INFORMATION*); +DWORD WINAPI +SHGetFileInfoW (LPCWSTR, DWORD, SHFILEINFO FAR *, UINT, UINT); + +WINBOOL WINAPI +SHGetPathFromIDListW (LPCITEMIDLIST, LPWSTR); #ifdef __cplusplus } diff --git a/include/user32/accel.h b/include/user32/accel.h new file mode 100644 index 0000000..034d69a --- /dev/null +++ b/include/user32/accel.h @@ -0,0 +1,38 @@ +/* $Id$ +*/ + +#ifndef __USER32_ACCEL_H_INCLUDED__ +#define __USER32_ACCEL_H_INCLUDED__ + +/* RT_ACCELERATOR resources are arrays of RES_ACCEL structures */ +typedef struct _RES_ACCEL +{ + WORD fVirt; + WORD key; + DWORD cmd; +} +RES_ACCEL; + +/* ACCELERATOR TABLES CACHE */ +/* Cache entry */ +typedef struct _USER_ACCEL_CACHE_ENTRY +{ + struct _USER_ACCEL_CACHE_ENTRY * Next; + ULONG_PTR Usage; /* how many times the table has been loaded */ + HACCEL Object; /* handle to the NtUser accelerator table object */ + HGLOBAL Data; /* base address of the resource data */ +} +U32_ACCEL_CACHE_ENTRY; + +/* Lock guarding the cache */ +extern CRITICAL_SECTION U32AccelCacheLock; + +/* Cache */ +extern U32_ACCEL_CACHE_ENTRY * U32AccelCache; + +extern U32_ACCEL_CACHE_ENTRY ** WINAPI U32AccelCacheFind(HANDLE, HGLOBAL); +extern void WINAPI U32AccelCacheAdd(HACCEL, HGLOBAL); + +#endif + +/* EOF */ diff --git a/include/user32/callback.h b/include/user32/callback.h index e6f2fd5..4c1fb28 100644 --- a/include/user32/callback.h +++ b/include/user32/callback.h @@ -1,13 +1,19 @@ #ifndef __INCLUDE_USER32_CALLBACK_H #define __INCLUDE_USER32_CALLBACK_H -#define USER32_CALLBACK_WINDOWPROC (0) -#define USER32_CALLBACK_SENDASYNCPROC (1) -#define USER32_CALLBACK_SENDNCCREATE (2) -#define USER32_CALLBACK_SENDNCCALCSIZE (3) -#define USER32_CALLBACK_SENDCREATE (4) -#define USER32_CALLBACK_SENDGETMINMAXINFO (5) -#define USER32_CALLBACK_MAXIMUM (6) +#define USER32_CALLBACK_WINDOWPROC (0) +#define USER32_CALLBACK_SENDASYNCPROC (1) +#define USER32_CALLBACK_SENDNCCREATE (2) +#define USER32_CALLBACK_SENDNCCALCSIZE (3) +#define USER32_CALLBACK_SENDCREATE (4) +#define USER32_CALLBACK_SENDGETMINMAXINFO (5) +#define USER32_CALLBACK_SENDWINDOWPOSCHANGING (6) +#define USER32_CALLBACK_SENDWINDOWPOSCHANGED (7) +#define USER32_CALLBACK_SENDSTYLECHANGING (8) +#define USER32_CALLBACK_SENDSTYLECHANGED (9) +#define USER32_CALLBACK_LOADSYSMENUTEMPLATE (10) +#define USER32_CALLBACK_LOADDEFAULTCURSORS (11) +#define USER32_CALLBACK_MAXIMUM (11) typedef struct _WINDOWPROC_CALLBACK_ARGUMENTS { @@ -54,7 +60,7 @@ typedef struct _SENDNCCALCSIZEMESSAGE_CALLBACK_RESULT LRESULT Result; RECT Rect; NCCALCSIZE_PARAMS Params; -} SENDNCCALCSIZEMESSAGE_CALLBACK_RESULT, +} SENDNCCALCSIZEMESSAGE_CALLBACK_RESULT, *PSENDNCCALCSIZEMESSAGE_CALLBACK_RESULT; typedef struct _SENDGETMINMAXINFO_CALLBACK_ARGUMENTS @@ -69,6 +75,32 @@ typedef struct _SENDGETMINMAXINFO_CALLBACK_RESULT MINMAXINFO MinMaxInfo; } SENDGETMINMAXINFO_CALLBACK_RESULT, *PSENDGETMINMAXINFO_CALLBACK_RESULT; +typedef struct _SENDWINDOWPOSCHANGING_CALLBACK_ARGUMENTS +{ + HWND Wnd; + WINDOWPOS WindowPos; +} SENDWINDOWPOSCHANGING_CALLBACK_ARGUMENTS, *PSENDWINDOWPOSCHANGING_CALLBACK_ARGUMENTS; + +typedef struct _SENDWINDOWPOSCHANGED_CALLBACK_ARGUMENTS +{ + HWND Wnd; + WINDOWPOS WindowPos; +} SENDWINDOWPOSCHANGED_CALLBACK_ARGUMENTS, *PSENDWINDOWPOSCHANGED_CALLBACK_ARGUMENTS; + +typedef struct _SENDSTYLECHANGING_CALLBACK_ARGUMENTS +{ + HWND Wnd; + STYLESTRUCT Style; + DWORD WhichStyle; +} SENDSTYLECHANGING_CALLBACK_ARGUMENTS, *PSENDSTYLECHANGING_CALLBACK_ARGUMENTS; + +typedef struct _SENDSTYLECHANGED_CALLBACK_ARGUMENTS +{ + HWND Wnd; + STYLESTRUCT Style; + DWORD WhichStyle; +} SENDSTYLECHANGED_CALLBACK_ARGUMENTS, *PSENDSTYLECHANGED_CALLBACK_ARGUMENTS; + NTSTATUS STDCALL User32CallWindowProcFromKernel(PVOID Arguments, ULONG ArgumentLength); NTSTATUS STDCALL @@ -81,5 +113,17 @@ NTSTATUS STDCALL User32SendGETMINMAXINFOMessageForKernel(PVOID Arguments, ULONG ArgumentLength); NTSTATUS STDCALL User32SendNCCALCSIZEMessageForKernel(PVOID Arguments, ULONG ArgumentLength); +NTSTATUS STDCALL +User32SendWINDOWPOSCHANGINGMessageForKernel(PVOID Arguments, ULONG ArgumentLength); +NTSTATUS STDCALL +User32SendWINDOWPOSCHANGEDMessageForKernel(PVOID Arguments, ULONG ArgumentLength); +NTSTATUS STDCALL +User32SendSTYLECHANGINGMessageForKernel(PVOID Arguments, ULONG ArgumentLength); +NTSTATUS STDCALL +User32SendSTYLECHANGEDMessageForKernel(PVOID Arguments, ULONG ArgumentLength); +NTSTATUS STDCALL +User32LoadSysMenuTemplateForKernel(PVOID Arguments, ULONG ArgumentLength); +NTSTATUS STDCALL +User32SetupDefaultCursors(PVOID Arguments, ULONG ArgumentLength); #endif /* __INCLUDE_USER32_CALLBACK_H */ diff --git a/include/user32/regcontrol.h b/include/user32/regcontrol.h new file mode 100644 index 0000000..8ee2c4c --- /dev/null +++ b/include/user32/regcontrol.h @@ -0,0 +1,47 @@ +/* $Id$ + * + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS User32 + * PURPOSE: Built-in control registration + * FILE: include/user32/regcontrol.h + * PROGRAMER: Ge van Geldorp (ge@gse.nl) + * REVISION HISTORY: 2003/06/16 GvG Created + * NOTES: + */ +#ifndef ROS_REGCONTROL_H +#define ROS_REGCONTROL_H + +#define IS_ATOM(x) \ + (((ULONG_PTR)(x) > 0x0) && ((ULONG_PTR)(x) < 0x10000)) + +/* Built-in class names (see _Undocumented_Windows_ p.418) */ +#define ICONTITLE_CLASS_ATOM MAKEINTATOMA(32772) /* IconTitle */ + +/* Built-in class descriptor */ +struct builtin_class_descr +{ + LPCWSTR name; /* class name */ + UINT style; /* class style */ + WNDPROC procW; /* Unicode window procedure */ + INT extra; /* window extra bytes */ + LPCWSTR cursor; /* cursor name */ + HBRUSH brush; /* brush or system color */ +}; + +extern void ControlsInit(void); + +extern const struct builtin_class_descr BUTTON_builtin_class; +extern const struct builtin_class_descr COMBO_builtin_class; +extern const struct builtin_class_descr COMBOLBOX_builtin_class; +extern const struct builtin_class_descr DIALOG_builtin_class; +extern const struct builtin_class_descr POPUPMENU_builtin_class; +extern const struct builtin_class_descr DESKTOP_builtin_class; +extern const struct builtin_class_descr EDIT_builtin_class; +extern const struct builtin_class_descr ICONTITLE_builtin_class; +extern const struct builtin_class_descr LISTBOX_builtin_class; +extern const struct builtin_class_descr MDICLIENT_builtin_class; +extern const struct builtin_class_descr MENU_builtin_class; +extern const struct builtin_class_descr SCROLL_builtin_class; +extern const struct builtin_class_descr STATIC_builtin_class; + +#endif /* ROS_REGCONTROL_H */ diff --git a/include/wdm.h b/include/wdm.h new file mode 100644 index 0000000..4032b25 --- /dev/null +++ b/include/wdm.h @@ -0,0 +1 @@ +#include "ntddk.h" diff --git a/include/win32k/bitmaps.h b/include/win32k/bitmaps.h index 8196f14..0a54326 100644 --- a/include/win32k/bitmaps.h +++ b/include/win32k/bitmaps.h @@ -8,8 +8,8 @@ typedef struct _DDBITMAP { const PDRIVER_FUNCTIONS pDriverFunctions; -// DHPDEV PDev; -// HSURF Surface; +/* DHPDEV PDev; */ +/* HSURF Surface; */ } DDBITMAP; /* GDI logical bitmap object */ @@ -28,32 +28,25 @@ typedef struct _BITMAPOBJ /* Internal interface */ #define BITMAPOBJ_AllocBitmap() \ - ((HBITMAP) GDIOBJ_AllocObj (sizeof (BITMAPOBJ), GO_BITMAP_MAGIC)) + ((HBITMAP) GDIOBJ_AllocObj (sizeof (BITMAPOBJ), GDI_OBJECT_TYPE_BITMAP, (GDICLEANUPPROC) Bitmap_InternalDelete)) #define BITMAPOBJ_FreeBitmap(hBMObj) \ - GDIOBJ_FreeObj((HGDIOBJ) hBMObj, GO_BITMAP_MAGIC, GDIOBJFLAG_DEFAULT) -#define BITMAPOBJ_HandleToPtr(hBMObj) \ - ((PBITMAPOBJ) GDIOBJ_LockObj ((HGDIOBJ) hBMObj, GO_BITMAP_MAGIC)) -#define BITMAPOBJ_ReleasePtr(hBMObj) \ - GDIOBJ_UnlockObj ((HGDIOBJ) hBMObj, GO_BITMAP_MAGIC) + GDIOBJ_FreeObj((HGDIOBJ) hBMObj, GDI_OBJECT_TYPE_BITMAP, GDIOBJFLAG_DEFAULT) +#define BITMAPOBJ_LockBitmap(hBMObj) GDIOBJ_LockObj((HGDIOBJ) hBMObj, GDI_OBJECT_TYPE_BITMAP) +#define BITMAPOBJ_UnlockBitmap(hBMObj) GDIOBJ_UnlockObj((HGDIOBJ) hBMObj, GDI_OBJECT_TYPE_BITMAP) -/*#define BITMAPOBJ_PtrToHandle(hBMObj) \ - ((HBITMAP) GDIOBJ_PtrToHandle ((PGDIOBJ) hBMObj, GO_BITMAP_MAGIC))*/ -#define BITMAPOBJ_LockBitmap(hBMObj) GDIOBJ_LockObject ((HGDIOBJ) hBMObj) -#define BITMAPOBJ_UnlockBitmap(hBMObj) GDIOBJ_UnlockObject ((HGDIOBJ) hBMObj) - -INT BITMAPOBJ_GetWidthBytes (INT bmWidth, INT bpp); -HBITMAP BITMAPOBJ_CopyBitmap (HBITMAP hBitmap); -int DIB_GetDIBWidthBytes (int width, int depth); -int DIB_GetDIBImageBytes (int width, int height, int depth); -int DIB_BitmapInfoSize (const BITMAPINFO * info, WORD coloruse); -INT BITMAP_GetObject(BITMAPOBJ * bmp, INT count, LPVOID buffer); -BOOL Bitmap_InternalDelete( PBITMAPOBJ pBmp ); -HBITMAP BitmapToSurf(PBITMAPOBJ BitmapObj); +INT FASTCALL BITMAPOBJ_GetWidthBytes (INT bmWidth, INT bpp); +HBITMAP FASTCALL BITMAPOBJ_CopyBitmap (HBITMAP hBitmap); +INT FASTCALL DIB_GetDIBWidthBytes (INT width, INT depth); +int STDCALL DIB_GetDIBImageBytes (INT width, INT height, INT depth); +INT FASTCALL DIB_BitmapInfoSize (const BITMAPINFO * info, WORD coloruse); +INT STDCALL BITMAP_GetObject(BITMAPOBJ * bmp, INT count, LPVOID buffer); +BOOL FASTCALL Bitmap_InternalDelete( PBITMAPOBJ pBmp ); +HBITMAP FASTCALL BitmapToSurf(PBITMAPOBJ BitmapObj); /* User Entry Points */ BOOL STDCALL -W32kBitBlt ( +NtGdiBitBlt ( HDC hDCDest, INT XDest, INT YDest, @@ -66,7 +59,7 @@ W32kBitBlt ( ); HBITMAP STDCALL -W32kCreateBitmap ( +NtGdiCreateBitmap ( INT Width, INT Height, UINT Planes, @@ -75,19 +68,19 @@ W32kCreateBitmap ( ); HBITMAP STDCALL -W32kCreateCompatibleBitmap ( +NtGdiCreateCompatibleBitmap ( HDC hDC, INT Width, INT Height ); HBITMAP STDCALL -W32kCreateBitmapIndirect ( +NtGdiCreateBitmapIndirect ( CONST BITMAP * BM ); HBITMAP STDCALL -W32kCreateDIBitmap ( +NtGdiCreateDIBitmap ( HDC hDC, CONST BITMAPINFOHEADER * bmih, DWORD Init, @@ -97,7 +90,7 @@ W32kCreateDIBitmap ( ); HBITMAP STDCALL -W32kCreateDIBSection ( +NtGdiCreateDIBSection ( HDC hDC, CONST BITMAPINFO * bmi, UINT Usage, @@ -107,14 +100,14 @@ W32kCreateDIBSection ( ); HBITMAP STDCALL -W32kCreateDiscardableBitmap ( +NtGdiCreateDiscardableBitmap ( HDC hDC, INT Width, INT Height ); BOOL STDCALL -W32kExtFloodFill ( +NtGdiExtFloodFill ( HDC hDC, INT XStart, INT YStart, @@ -123,7 +116,7 @@ W32kExtFloodFill ( ); BOOL STDCALL -W32kFloodFill ( +NtGdiFloodFill ( HDC hDC, INT XStart, INT YStart, @@ -131,20 +124,20 @@ W32kFloodFill ( ); LONG STDCALL -W32kGetBitmapBits ( +NtGdiGetBitmapBits ( HBITMAP hBitmap, LONG Buffer, LPVOID Bits ); BOOL STDCALL -W32kGetBitmapDimensionEx ( +NtGdiGetBitmapDimensionEx ( HBITMAP hBitmap, LPSIZE Dimension ); UINT STDCALL -W32kGetDIBColorTable ( +NtGdiGetDIBColorTable ( HDC hDC, UINT StartIndex, UINT Entries, @@ -152,7 +145,7 @@ W32kGetDIBColorTable ( ); INT STDCALL -W32kGetDIBits ( +NtGdiGetDIBits ( HDC hDC, HBITMAP hBitmap, UINT StartScan, @@ -163,14 +156,14 @@ W32kGetDIBits ( ); COLORREF STDCALL -W32kGetPixel ( +NtGdiGetPixel ( HDC hDC, INT XPos, INT YPos ); BOOL STDCALL -W32kMaskBlt ( +NtGdiMaskBlt ( HDC hDCDest, INT XDest, INT YDest, @@ -186,7 +179,7 @@ W32kMaskBlt ( ); BOOL STDCALL -W32kPlgBlt ( +NtGdiPlgBlt ( HDC hDCDest, CONST POINT * Point, HDC hDCSrc, @@ -200,14 +193,14 @@ W32kPlgBlt ( ); LONG STDCALL -W32kSetBitmapBits ( +NtGdiSetBitmapBits ( HBITMAP hBitmap, DWORD Bytes, CONST VOID * Bits ); BOOL STDCALL -W32kSetBitmapDimensionEx ( +NtGdiSetBitmapDimensionEx ( HBITMAP hBitmap, INT Width, INT Height, @@ -215,7 +208,7 @@ W32kSetBitmapDimensionEx ( ); UINT STDCALL -W32kSetDIBColorTable ( +NtGdiSetDIBColorTable ( HDC hDC, UINT StartIndex, UINT Entries, @@ -223,7 +216,7 @@ W32kSetDIBColorTable ( ); INT STDCALL -W32kSetDIBits ( +NtGdiSetDIBits ( HDC hDC, HBITMAP hBitmap, UINT StartScan, @@ -234,7 +227,7 @@ W32kSetDIBits ( ); INT STDCALL -W32kSetDIBitsToDevice ( +NtGdiSetDIBitsToDevice ( HDC hDC, INT XDest, INT YDest, @@ -250,7 +243,7 @@ W32kSetDIBitsToDevice ( ); COLORREF STDCALL -W32kSetPixel ( +NtGdiSetPixel ( HDC hDC, INT X, INT Y, @@ -258,7 +251,7 @@ W32kSetPixel ( ); BOOL STDCALL -W32kSetPixelV ( +NtGdiSetPixelV ( HDC hDC, INT X, INT Y, @@ -266,7 +259,7 @@ W32kSetPixelV ( ); BOOL STDCALL -W32kStretchBlt ( +NtGdiStretchBlt ( HDC hDCDest, INT XOriginDest, INT YOriginDest, @@ -281,7 +274,7 @@ W32kStretchBlt ( ); INT STDCALL -W32kStretchDIBits ( +NtGdiStretchDIBits ( HDC hDC, INT XDest, INT YDest, diff --git a/include/win32k/brush.h b/include/win32k/brush.h index ea52c93..5e419e5 100644 --- a/include/win32k/brush.h +++ b/include/win32k/brush.h @@ -8,57 +8,52 @@ #define NB_HATCH_STYLES 6 #define BRUSHOBJ_AllocBrush() \ - ((HBRUSH) GDIOBJ_AllocObj (sizeof (BRUSHOBJ), GO_BRUSH_MAGIC)) -#define BRUSHOBJ_FreeBrush(hBrush) GDIOBJ_FreeObj((HGDIOBJ)hBrush, GO_BRUSH_MAGIC, GDIOBJFLAG_DEFAULT) -/*#define BRUSHOBJ_HandleToPtr(hBrush) \ - ((PBRUSHOBJ) GDIOBJ_HandleToPtr ((HGDIOBJ) hBrush, GO_BRUSH_MAGIC)) -#define BRUSHOBJ_PtrToHandle(pBrushObj) \ - ((HBRUSH) GDIOBJ_PtrToHandle ((PGDIOBJ) pBrushObj, GO_BRUSH_MAGIC)) -*/ -#define BRUSHOBJ_LockBrush(hBrush) ((PBRUSHOBJ)GDIOBJ_LockObj((HGDIOBJ)hBrush, GO_BRUSH_MAGIC)) -#define BRUSHOBJ_UnlockBrush(hBrush) GDIOBJ_UnlockObj((HGDIOBJ)hBrush, GO_BRUSH_MAGIC) + ((HBRUSH) GDIOBJ_AllocObj (sizeof (BRUSHOBJ), GDI_OBJECT_TYPE_BRUSH, NULL)) +#define BRUSHOBJ_FreeBrush(hBrush) GDIOBJ_FreeObj((HGDIOBJ)hBrush, GDI_OBJECT_TYPE_BRUSH, GDIOBJFLAG_DEFAULT) +#define BRUSHOBJ_LockBrush(hBrush) ((PBRUSHOBJ)GDIOBJ_LockObj((HGDIOBJ)hBrush, GDI_OBJECT_TYPE_BRUSH)) +#define BRUSHOBJ_UnlockBrush(hBrush) GDIOBJ_UnlockObj((HGDIOBJ)hBrush, GDI_OBJECT_TYPE_BRUSH) HBRUSH STDCALL -W32kCreateBrushIndirect ( +NtGdiCreateBrushIndirect ( CONST LOGBRUSH * lb ); HBRUSH STDCALL -W32kCreateDIBPatternBrush ( +NtGdiCreateDIBPatternBrush ( HGLOBAL hDIBPacked, UINT ColorSpec ); HBRUSH STDCALL -W32kCreateDIBPatternBrushPt ( +NtGdiCreateDIBPatternBrushPt ( CONST VOID * PackedDIB, UINT Usage ); HBRUSH STDCALL -W32kCreateHatchBrush ( +NtGdiCreateHatchBrush ( INT Style, COLORREF Color ); HBRUSH STDCALL -W32kCreatePatternBrush ( +NtGdiCreatePatternBrush ( HBITMAP hBitmap ); HBRUSH STDCALL -W32kCreateSolidBrush ( +NtGdiCreateSolidBrush ( COLORREF Color ); BOOL STDCALL -W32kFixBrushOrgEx ( +NtGdiFixBrushOrgEx ( VOID ); BOOL STDCALL -W32kPatBlt ( +NtGdiPatBlt ( HDC hDC, INT XLeft, INT YLeft, @@ -68,7 +63,26 @@ W32kPatBlt ( ); BOOL STDCALL -W32kSetBrushOrgEx ( +NtGdiPolyPatBlt( + HDC hDC, + DWORD dwRop, + PPATRECT pRects, + int cRects, + ULONG Reserved + ); +BOOL +STDCALL +NtGdiPatBlt ( + HDC hDC, + INT XLeft, + INT YLeft, + INT Width, + INT Height, + DWORD ROP + ); +BOOL +STDCALL +NtGdiSetBrushOrgEx ( HDC hDC, INT XOrg, INT YOrg, diff --git a/include/win32k/cliprgn.h b/include/win32k/cliprgn.h index 4b8f7cb..6a0107e 100644 --- a/include/win32k/cliprgn.h +++ b/include/win32k/cliprgn.h @@ -6,7 +6,7 @@ INT WINAPI SelectVisRgn(HDC hdc, HRGN hrgn); int STDCALL -W32kExcludeClipRect ( +NtGdiExcludeClipRect ( HDC hDC, int LeftRect, int TopRect, @@ -15,26 +15,26 @@ W32kExcludeClipRect ( ); int STDCALL -W32kExtSelectClipRgn ( +NtGdiExtSelectClipRgn ( HDC hDC, HRGN hrgn, int fnMode ); int STDCALL -W32kGetClipBox ( +NtGdiGetClipBox ( HDC hDC, LPRECT rc ); int STDCALL -W32kGetMetaRgn ( +NtGdiGetMetaRgn ( HDC hDC, HRGN hrgn ); int STDCALL -W32kIntersectClipRect ( +NtGdiIntersectClipRect ( HDC hDC, int LeftRect, int TopRect, @@ -43,39 +43,39 @@ W32kIntersectClipRect ( ); int STDCALL -W32kOffsetClipRgn ( +NtGdiOffsetClipRgn ( HDC hDC, int XOffset, int YOffset ); BOOL STDCALL -W32kPtVisible ( +NtGdiPtVisible ( HDC hDC, int X, int Y ); BOOL STDCALL -W32kRectVisible ( +NtGdiRectVisible ( HDC hDC, CONST PRECT rc ); BOOL STDCALL -W32kSelectClipPath ( +NtGdiSelectClipPath ( HDC hDC, int Mode ); int STDCALL -W32kSelectClipRgn ( +NtGdiSelectClipRgn ( HDC hDC, HRGN hrgn ); int STDCALL -W32kSetMetaRgn ( +NtGdiSetMetaRgn ( HDC hDC ); #endif diff --git a/include/win32k/color.h b/include/win32k/color.h index 2b68d19..c78610a 100644 --- a/include/win32k/color.h +++ b/include/win32k/color.h @@ -1,14 +1,16 @@ #ifndef __WIN32K_COLOR_H #define __WIN32K_COLOR_H +#ifndef CLR_INVALID #define CLR_INVALID 0xffffffff -#define PC_SYS_USED 0x80 // palentry is used (both system and logical) -#define PC_SYS_RESERVED 0x40 // system palentry is not to be mapped to -#define PC_SYS_MAPPED 0x10 // logical palentry is a direct alias for system palentry +#endif +#define PC_SYS_USED 0x80 /* palentry is used (both system and logical) */ +#define PC_SYS_RESERVED 0x40 /* system palentry is not to be mapped to */ +#define PC_SYS_MAPPED 0x10 /* logical palentry is a direct alias for system palentry */ BOOL STDCALL -W32kAnimatePalette ( +NtGdiAnimatePalette ( HPALETTE hpal, UINT StartIndex, UINT Entries, @@ -16,35 +18,35 @@ W32kAnimatePalette ( ); HPALETTE STDCALL -W32kCreateHalftonePalette ( +NtGdiCreateHalftonePalette ( HDC hDC ); HPALETTE STDCALL -W32kCreatePalette ( +NtGdiCreatePalette ( CONST PLOGPALETTE lgpl ); BOOL STDCALL -W32kGetColorAdjustment ( +NtGdiGetColorAdjustment ( HDC hDC, LPCOLORADJUSTMENT ca ); COLORREF STDCALL -W32kGetNearestColor ( +NtGdiGetNearestColor ( HDC hDC, COLORREF Color ); UINT STDCALL -W32kGetNearestPaletteIndex ( +NtGdiGetNearestPaletteIndex ( HPALETTE hpal, COLORREF Color ); UINT STDCALL -W32kGetPaletteEntries ( +NtGdiGetPaletteEntries ( HPALETTE hpal, UINT StartIndex, UINT Entries, @@ -52,7 +54,7 @@ W32kGetPaletteEntries ( ); UINT STDCALL -W32kGetSystemPaletteEntries ( +NtGdiGetSystemPaletteEntries ( HDC hDC, UINT StartIndex, UINT Entries, @@ -60,36 +62,36 @@ W32kGetSystemPaletteEntries ( ); UINT STDCALL -W32kGetSystemPaletteUse ( +NtGdiGetSystemPaletteUse ( HDC hDC ); UINT STDCALL -W32kRealizePalette ( +NtGdiRealizePalette ( HDC hDC ); BOOL STDCALL -W32kResizePalette ( +NtGdiResizePalette ( HPALETTE hpal, UINT Entries ); HPALETTE STDCALL -W32kSelectPalette ( +NtGdiSelectPalette ( HDC hDC, HPALETTE hpal, BOOL ForceBackground ); BOOL STDCALL -W32kSetColorAdjustment ( +NtGdiSetColorAdjustment ( HDC hDC, CONST LPCOLORADJUSTMENT ca ); UINT STDCALL -W32kSetPaletteEntries ( +NtGdiSetPaletteEntries ( HPALETTE hpal, UINT Start, UINT Entries, @@ -97,18 +99,18 @@ W32kSetPaletteEntries ( ); UINT STDCALL -W32kSetSystemPaletteUse ( +NtGdiSetSystemPaletteUse ( HDC hDC, UINT Usage ); BOOL STDCALL -W32kUnrealizeObject ( +NtGdiUnrealizeObject ( HGDIOBJ hgdiobj ); BOOL STDCALL -W32kUpdateColors ( +NtGdiUpdateColors ( HDC hDC ); #endif diff --git a/include/win32k/coord.h b/include/win32k/coord.h index 5dfba5d..649bfb3 100644 --- a/include/win32k/coord.h +++ b/include/win32k/coord.h @@ -1,48 +1,63 @@ #ifndef __WIN32K_COORD_H #define __WIN32K_COORD_H +#include "dc.h" + BOOL STDCALL -W32kCombineTransform ( +NtGdiCombineTransform ( LPXFORM XformResult, CONST LPXFORM xform1, CONST LPXFORM xform2 ); BOOL STDCALL -W32kDPtoLP ( +NtGdiDPtoLP ( HDC hDC, LPPOINT Points, int Count ); + +int +FASTCALL +IntGetGraphicsMode ( PDC dc ); + int STDCALL -W32kGetGraphicsMode ( - HDC hDC - ); +NtGdiGetGraphicsMode ( HDC hDC ); + BOOL STDCALL -W32kGetWorldTransform ( +NtGdiGetWorldTransform ( HDC hDC, LPXFORM Xform ); + +VOID +FASTCALL +CoordLPtoDP ( PDC Dc, LPPOINT Point ); + +VOID +FASTCALL +IntLPtoDP ( PDC dc, LPPOINT Points, INT Count ); + BOOL STDCALL -W32kLPtoDP ( +NtGdiLPtoDP ( HDC hDC, LPPOINT Points, int Count ); BOOL STDCALL -W32kModifyWorldTransform ( +NtGdiModifyWorldTransform ( HDC hDC, CONST LPXFORM Xform, DWORD Mode ); BOOL STDCALL -W32kOffsetViewportOrgEx ( +NtGdiOffsetViewportOrgEx ( HDC hDC, int XOffset, int YOffset, @@ -50,7 +65,7 @@ W32kOffsetViewportOrgEx ( ); BOOL STDCALL -W32kOffsetWindowOrgEx ( +NtGdiOffsetWindowOrgEx ( HDC hDC, int XOffset, int YOffset, @@ -58,7 +73,7 @@ W32kOffsetWindowOrgEx ( ); BOOL STDCALL -W32kScaleViewportExtEx ( +NtGdiScaleViewportExtEx ( HDC hDC, int Xnum, int Xdenom, @@ -68,7 +83,7 @@ W32kScaleViewportExtEx ( ); BOOL STDCALL -W32kScaleWindowExtEx ( +NtGdiScaleWindowExtEx ( HDC hDC, int Xnum, int Xdenom, @@ -78,19 +93,19 @@ W32kScaleWindowExtEx ( ); int STDCALL -W32kSetGraphicsMode ( +NtGdiSetGraphicsMode ( HDC hDC, int Mode ); int STDCALL -W32kSetMapMode ( +NtGdiSetMapMode ( HDC hDC, int MapMode ); BOOL STDCALL -W32kSetViewportExtEx ( +NtGdiSetViewportExtEx ( HDC hDC, int XExtent, int YExtent, @@ -98,7 +113,7 @@ W32kSetViewportExtEx ( ); BOOL STDCALL -W32kSetViewportOrgEx ( +NtGdiSetViewportOrgEx ( HDC hDC, int X, int Y, @@ -106,7 +121,7 @@ W32kSetViewportOrgEx ( ); BOOL STDCALL -W32kSetWindowExtEx ( +NtGdiSetWindowExtEx ( HDC hDC, int XExtent, int YExtent, @@ -114,7 +129,7 @@ W32kSetWindowExtEx ( ); BOOL STDCALL -W32kSetWindowOrgEx ( +NtGdiSetWindowOrgEx ( HDC hDC, int X, int Y, @@ -122,7 +137,7 @@ W32kSetWindowOrgEx ( ); BOOL STDCALL -W32kSetWorldTransform ( +NtGdiSetWorldTransform ( HDC hDC, CONST LPXFORM Xform ); diff --git a/include/win32k/cursoricon.h b/include/win32k/cursoricon.h new file mode 100644 index 0000000..b65c32e --- /dev/null +++ b/include/win32k/cursoricon.h @@ -0,0 +1,133 @@ + +#ifndef __WIN32K_CURSORICON_H +#define __WIN32K_CURSORICON_H + +#include +#include + +/* Structures for reading icon/cursor files and resources */ +// Structures for reading icon files and resources +typedef struct _ICONIMAGE +{ + BITMAPINFOHEADER icHeader; // DIB header + RGBQUAD icColors[1]; // Color table + BYTE icXOR[1]; // DIB bits for XOR mask + BYTE icAND[1]; // DIB bits for AND mask +} PACKED ICONIMAGE, *LPICONIMAGE; + +typedef struct _CURSORIMAGE +{ + BITMAPINFOHEADER icHeader; // DIB header + RGBQUAD icColors[1]; // Color table + BYTE icXOR[1]; // DIB bits for XOR mask + BYTE icAND[1]; // DIB bits for AND mask +} PACKED CURSORIMAGE, *LPCURSORIMAGE; + +typedef struct +{ + BYTE bWidth; + BYTE bHeight; + BYTE bColorCount; + BYTE bReserved; +} PACKED ICONRESDIR; + +typedef struct +{ + WORD wWidth; + WORD wHeight; +} PACKED CURSORRESDIR; + +typedef struct +{ + WORD wPlanes; // Number of Color Planes in the XOR image + WORD wBitCount; // Bits per pixel in the XOR image +} PACKED ICONDIR; + +typedef struct +{ + WORD wXHotspot; // Number of Color Planes in the XOR image + WORD wYHotspot; // Bits per pixel in the XOR image +} PACKED CURSORDIR; + +typedef struct +{ + BYTE bWidth; // Width, in pixels, of the icon image + BYTE bHeight; // Height, in pixels, of the icon image + BYTE bColorCount; // Number of colors in image (0 if >=8bpp) + BYTE bReserved; // Reserved ( must be 0) + union + { ICONDIR icon; + CURSORDIR cursor; + } Info; + DWORD dwBytesInRes; // How many bytes in this resource? + DWORD dwImageOffset; // Where in the file is this image? +} PACKED CURSORICONDIRENTRY; + +typedef struct +{ + WORD idReserved; // Reserved (must be 0) + WORD idType; // Resource Type (1 for icons, 0 for cursors) + WORD idCount; // How many images? + CURSORICONDIRENTRY idEntries[1] __attribute__((packed)); // An entry for idCount number of images +} PACKED CURSORICONDIR; + +typedef struct +{ + union + { ICONRESDIR icon; + CURSORRESDIR cursor; + } ResInfo; + WORD wPlanes; // Color Planes + WORD wBitCount; // Bits per pixel + DWORD dwBytesInRes; // how many bytes in this resource? + WORD nID; // the ID +} PACKED GRPCURSORICONDIRENTRY; + +typedef struct +{ + WORD idReserved; // Reserved (must be 0) + WORD idType; // Resource type (1 for icons) + WORD idCount; // How many images? + GRPCURSORICONDIRENTRY idEntries[1] PACKED; // The entries for each image +} PACKED GRPCURSORICONDIR; + +/* GDI logical Icon/Cursor object */ +typedef struct _ICONCURSOROBJ +{ + BOOL fIcon; + DWORD xHotspot; + DWORD yHotspot; + BITMAP ANDBitmap; + BITMAP XORBitmap; +} ICONCURSOROBJ, *PICONCURSOROBJ; + +/* Internal interfaces */ +#define ICONCURSOROBJ_AllocIconCursor() \ + ((HICON) GDIOBJ_AllocObj (sizeof (ICONCURSOROBJ), GDI_OBJECT_TYPE_ICONCURSOR, (GDICLEANUPPROC) IconCursor_InternalDelete)) + +#define ICONCURSOROBJ_LockIconCursor(hICObj) \ + ((PICONCURSOROBJ) GDIOBJ_LockObj ((HGDIOBJ) hICObj, GDI_OBJECT_TYPE_ICONCURSOR)) + +#define ICONCURSOROBJ_UnlockIconCursor(hICObj) GDIOBJ_UnlockObj ((HGDIOBJ) hICObj, GDI_OBJECT_TYPE_ICONCURSOR) + + +BOOL FASTCALL IconCursor_InternalDelete( PICONCURSOROBJ pIconCursor ); + +/* User Entry Points */ +HICON +STDCALL +NtGdiCreateIcon ( + BOOL fIcon, + INT Width, + INT Height, + UINT Planes, + UINT BitsPerPel, + DWORD xHotspot, + DWORD yHotspot, + const VOID *ANDBits, + const VOID *XORBits + ); + + + +#endif diff --git a/include/win32k/dc.h b/include/win32k/dc.h index 0a4e34c..1a8c8b0 100644 --- a/include/win32k/dc.h +++ b/include/win32k/dc.h @@ -7,56 +7,9 @@ #include #include -typedef struct -{ - HANDLE Handle; - DHPDEV PDev; - DEVMODEW DMW; - HSURF FillPatterns[HS_DDI_MAX]; - GDIINFO GDIInfo; - DEVINFO DevInfo; - DRIVER_FUNCTIONS DriverFunctions; -} GDIDEVICE; - -/* (RJJ) Taken from WINE */ -typedef struct _DEVICECAPS -{ - WORD version; /* 0: driver version */ - WORD technology; /* 2: device technology */ - WORD horzSize; /* 4: width of display in mm */ - WORD vertSize; /* 6: height of display in mm */ - WORD horzRes; /* 8: width of display in pixels */ - WORD vertRes; /* 10: width of display in pixels */ - WORD bitsPixel; /* 12: bits per pixel */ - WORD planes; /* 14: color planes */ - WORD numBrushes; /* 16: device-specific brushes */ - WORD numPens; /* 18: device-specific pens */ - WORD numMarkers; /* 20: device-specific markers */ - WORD numFonts; /* 22: device-specific fonts */ - WORD numColors; /* 24: size of color table */ - WORD pdeviceSize; /* 26: size of PDEVICE structure */ - WORD curveCaps; /* 28: curve capabilities */ - WORD lineCaps; /* 30: line capabilities */ - WORD polygonalCaps; /* 32: polygon capabilities */ - WORD textCaps; /* 34: text capabilities */ - WORD clipCaps; /* 36: clipping capabilities */ - WORD rasterCaps; /* 38: raster capabilities */ - WORD aspectX; /* 40: relative width of device pixel */ - WORD aspectY; /* 42: relative height of device pixel */ - WORD aspectXY; /* 44: relative diagonal width of device pixel */ - WORD pad1[21]; /* 46-86: reserved */ - WORD logPixelsX; /* 88: pixels / logical X inch */ - WORD logPixelsY; /* 90: pixels / logical Y inch */ - WORD pad2[6]; /* 92-102: reserved */ - WORD sizePalette; /* 104: entries in system palette */ - WORD numReserved; /* 106: reserved entries */ - WORD colorRes; /* 108: color resolution */ -} DEVICECAPS, *PDEVICECAPS; - typedef struct _WIN_DC_INFO { int flags; - const PDEVICECAPS devCaps; HRGN hClipRgn; /* Clip region (may be 0) */ HRGN hVisRgn; /* Visible region (must never be 0) */ HRGN hGCClipRgn; /* GC clip region (ClipRgn AND VisRgn) */ @@ -66,12 +19,12 @@ typedef struct _WIN_DC_INFO HBITMAP hBitmap; HBITMAP hFirstBitmap; /* Bitmap selected at creation of the DC */ -// #if 0 +/* #if 0 */ HANDLE hDevice; HPALETTE hPalette; GdiPath path; -// #endif +/* #endif */ WORD ROPmode; WORD polyFillMode; @@ -128,8 +81,8 @@ typedef struct _DC DHPDEV PDev; DEVMODEW DMW; HSURF FillPatternSurfaces[HS_DDI_MAX]; - GDIINFO GDIInfo; - DEVINFO DevInfo; + PGDIINFO GDIInfo; + PDEVINFO DevInfo; HSURF Surface; DRIVER_FUNCTIONS DriverFunctions; @@ -145,50 +98,59 @@ typedef struct _DC INT vportExtX; /* Viewport extent */ INT vportExtY; + CLIPOBJ *CombinedClip; + INT saveLevel; WIN_DC_INFO w; } DC, *PDC; -/* Internal functions */ +typedef struct +{ + HANDLE Handle; + DHPDEV PDev; + DEVMODEW DMW; + HSURF FillPatterns[HS_DDI_MAX]; + GDIINFO GDIInfo; + DEVINFO DevInfo; + DRIVER_FUNCTIONS DriverFunctions; + HANDLE DisplayDevice; +} GDIDEVICE; -/* -#define DC_PtrToHandle(pDC) \ - ((HDC) GDIOBJ_PtrToHandle ((PGDIOBJ) pDC, GO_DC_MAGIC)) -*/ +/* Internal functions */ -#define DC_HandleToPtr(hDC) \ - ((PDC) GDIOBJ_LockObj ((HGDIOBJ) hDC, GO_DC_MAGIC)) -#define DC_ReleasePtr(hDC) \ - GDIOBJ_UnlockObj ((HGDIOBJ) hDC, GO_DC_MAGIC) +#define DC_LockDc(hDC) \ + ((PDC) GDIOBJ_LockObj ((HGDIOBJ) hDC, GDI_OBJECT_TYPE_DC)) +#define DC_UnlockDc(hDC) \ + GDIOBJ_UnlockObj ((HGDIOBJ) hDC, GDI_OBJECT_TYPE_DC) -HDC RetrieveDisplayHDC(VOID); -HDC DC_AllocDC(LPCWSTR Driver); -void DC_InitDC(HDC DCToInit); -HDC DC_FindOpenDC(LPCWSTR Driver); -void DC_FreeDC(HDC DCToFree); -HDC DC_GetNextDC (PDC pDC); -void DC_SetNextDC (PDC pDC, HDC hNextDC); -BOOL DC_InternalDeleteDC( PDC DCToDelete ); +HDC FASTCALL RetrieveDisplayHDC(VOID); +HDC FASTCALL DC_AllocDC(LPCWSTR Driver); +VOID FASTCALL DC_InitDC(HDC DCToInit); +HDC FASTCALL DC_FindOpenDC(LPCWSTR Driver); +VOID FASTCALL DC_FreeDC(HDC DCToFree); +HDC FASTCALL DC_GetNextDC (PDC pDC); +VOID FASTCALL DC_SetNextDC (PDC pDC, HDC hNextDC); +BOOL FASTCALL DC_InternalDeleteDC( PDC DCToDelete ); -void DC_UpdateXforms(PDC dc); -BOOL DC_InvertXform(const XFORM *xformSrc, XFORM *xformDest); +VOID FASTCALL DC_UpdateXforms(PDC dc); +BOOL FASTCALL DC_InvertXform(const XFORM *xformSrc, XFORM *xformDest); /* User entry points */ -BOOL STDCALL W32kCancelDC(HDC hDC); -HDC STDCALL W32kCreateCompatableDC(HDC hDC); -HDC STDCALL W32kCreateDC(LPCWSTR Driver, +BOOL STDCALL NtGdiCancelDC(HDC hDC); +HDC STDCALL NtGdiCreateCompatableDC(HDC hDC); +HDC STDCALL NtGdiCreateDC(LPCWSTR Driver, LPCWSTR Device, LPCWSTR Output, CONST PDEVMODEW InitData); -HDC STDCALL W32kCreateIC(LPCWSTR Driver, +HDC STDCALL NtGdiCreateIC(LPCWSTR Driver, LPCWSTR Device, LPCWSTR Output, CONST PDEVMODEW DevMode); -BOOL STDCALL W32kDeleteDC(HDC hDC); -BOOL STDCALL W32kDeleteObject(HGDIOBJ hObject); -INT STDCALL W32kDrawEscape(HDC hDC, +BOOL STDCALL NtGdiDeleteDC(HDC hDC); +BOOL STDCALL NtGdiDeleteObject(HGDIOBJ hObject); +INT STDCALL NtGdiDrawEscape(HDC hDC, INT nEscape, INT cbInput, LPCSTR lpszInData); @@ -196,46 +158,45 @@ INT STDCALL W32kDrawEscape(HDC hDC, /* FIXME: this typedef should go somewhere else... */ typedef VOID (*GOBJENUMPROC)(PVOID, LPARAM); -INT STDCALL W32kEnumObjects(HDC hDC, +INT STDCALL NtGdiEnumObjects(HDC hDC, INT ObjectType, GOBJENUMPROC ObjectFunc, LPARAM lParam); -COLORREF STDCALL W32kGetBkColor(HDC hDC); -INT STDCALL W32kGetBkMode(HDC hDC); -BOOL STDCALL W32kGetBrushOrgEx(HDC hDC, LPPOINT brushOrg); -HRGN STDCALL W32kGetClipRgn(HDC hDC); -HGDIOBJ STDCALL W32kGetCurrentObject(HDC hDC, UINT ObjectType); -BOOL STDCALL W32kGetCurrentPositionEx(HDC hDC, LPPOINT currentPosition); -BOOL STDCALL W32kGetDCOrgEx(HDC hDC, LPPOINT Point); -HDC STDCALL W32kGetDCState16(HDC hDC); -INT STDCALL W32kGetDeviceCaps(HDC hDC, INT Index); -INT STDCALL W32kGetMapMode(HDC hDC); -INT STDCALL W32kGetObject(HGDIOBJ hGDIObj, +COLORREF STDCALL NtGdiGetBkColor(HDC hDC); +INT STDCALL NtGdiGetBkMode(HDC hDC); +BOOL STDCALL NtGdiGetBrushOrgEx(HDC hDC, LPPOINT brushOrg); +HRGN STDCALL NtGdiGetClipRgn(HDC hDC); +HGDIOBJ STDCALL NtGdiGetCurrentObject(HDC hDC, UINT ObjectType); +VOID FASTCALL IntGetCurrentPositionEx (PDC dc, LPPOINT currentPosition); +BOOL STDCALL NtGdiGetCurrentPositionEx(HDC hDC, LPPOINT currentPosition); +BOOL STDCALL NtGdiGetDCOrgEx(HDC hDC, LPPOINT Point); +INT STDCALL NtGdiGetDeviceCaps(HDC hDC, INT Index); +INT STDCALL NtGdiGetMapMode(HDC hDC); +INT STDCALL NtGdiGetObject(HGDIOBJ hGDIObj, INT BufSize, LPVOID Object); -DWORD STDCALL W32kGetObjectType(HGDIOBJ hGDIObj); -INT STDCALL W32kGetPolyFillMode(HDC hDC); -INT STDCALL W32kGetRelAbs(HDC hDC); -INT STDCALL W32kGetROP2(HDC hDC); -HGDIOBJ STDCALL W32kGetStockObject(INT Object); -INT STDCALL W32kGetStretchBltMode(HDC hDC); -COLORREF STDCALL W32kGetTextColor(HDC hDC); -UINT STDCALL W32kGetTextAlign(HDC hDC); -BOOL STDCALL W32kGetViewportExtEx(HDC hDC, LPSIZE viewportExt); -BOOL STDCALL W32kGetViewportOrgEx(HDC hDC, LPPOINT viewportOrg); -BOOL STDCALL W32kGetWindowExtEx(HDC hDC, LPSIZE windowExt); -BOOL STDCALL W32kGetWindowOrgEx(HDC hDC, LPPOINT windowOrg); -HDC STDCALL W32kResetDC(HDC hDC, CONST DEVMODEW *InitData); -BOOL STDCALL W32kRestoreDC(HDC hDC, INT SavedDC); -INT STDCALL W32kSaveDC(HDC hDC); -HGDIOBJ STDCALL W32kSelectObject(HDC hDC, HGDIOBJ hGDIObj); -INT STDCALL W32kSetBkMode(HDC hDC, INT backgroundMode); -INT STDCALL W32kSetPolyFillMode(HDC hDC, INT polyFillMode); -INT STDCALL W32kSetRelAbs(HDC hDC, INT relAbsMode); -INT STDCALL W32kSetROP2(HDC hDC, INT ROPmode); -INT STDCALL W32kSetStretchBltMode(HDC hDC, INT stretchBltMode); -COLORREF STDCALL W32kSetTextColor(HDC hDC, COLORREF color); +DWORD STDCALL NtGdiGetObjectType(HGDIOBJ hGDIObj); +INT STDCALL NtGdiGetPolyFillMode(HDC hDC); +INT STDCALL NtGdiGetRelAbs(HDC hDC); +INT STDCALL NtGdiGetROP2(HDC hDC); +HGDIOBJ STDCALL NtGdiGetStockObject(INT Object); +INT STDCALL NtGdiGetStretchBltMode(HDC hDC); +COLORREF STDCALL NtGdiGetTextColor(HDC hDC); +UINT STDCALL NtGdiGetTextAlign(HDC hDC); +BOOL STDCALL NtGdiGetViewportExtEx(HDC hDC, LPSIZE viewportExt); +BOOL STDCALL NtGdiGetViewportOrgEx(HDC hDC, LPPOINT viewportOrg); +BOOL STDCALL NtGdiGetWindowExtEx(HDC hDC, LPSIZE windowExt); +BOOL STDCALL NtGdiGetWindowOrgEx(HDC hDC, LPPOINT windowOrg); +HDC STDCALL NtGdiResetDC(HDC hDC, CONST DEVMODEW *InitData); +BOOL STDCALL NtGdiRestoreDC(HDC hDC, INT SavedDC); +INT STDCALL NtGdiSaveDC(HDC hDC); +HGDIOBJ STDCALL NtGdiSelectObject(HDC hDC, HGDIOBJ hGDIObj); +INT STDCALL NtGdiSetBkMode(HDC hDC, INT backgroundMode); +INT STDCALL NtGdiSetPolyFillMode(HDC hDC, INT polyFillMode); +INT STDCALL NtGdiSetRelAbs(HDC hDC, INT relAbsMode); +INT STDCALL NtGdiSetROP2(HDC hDC, INT ROPmode); +INT STDCALL NtGdiSetStretchBltMode(HDC hDC, INT stretchBltMode); +COLORREF STDCALL NtGdiSetTextColor(HDC hDC, COLORREF color); #endif - diff --git a/include/win32k/fillshap.h b/include/win32k/fillshap.h index aa02437..8a5506b 100644 --- a/include/win32k/fillshap.h +++ b/include/win32k/fillshap.h @@ -3,7 +3,7 @@ BOOL STDCALL -W32kChord(HDC hDC, +NtGdiChord(HDC hDC, int LeftRect, int TopRect, int RightRect, @@ -15,7 +15,7 @@ W32kChord(HDC hDC, BOOL STDCALL -W32kEllipse(HDC hDC, +NtGdiEllipse(HDC hDC, int LeftRect, int TopRect, int RightRect, @@ -23,7 +23,7 @@ W32kEllipse(HDC hDC, BOOL STDCALL -W32kPie(HDC hDC, +NtGdiPie(HDC hDC, int LeftRect, int TopRect, int RightRect, @@ -35,20 +35,20 @@ W32kPie(HDC hDC, BOOL STDCALL -W32kPolygon(HDC hDC, +NtGdiPolygon(HDC hDC, CONST PPOINT Points, int Count); BOOL STDCALL -W32kPolyPolygon(HDC hDC, +NtGdiPolyPolygon(HDC hDC, CONST LPPOINT Points, CONST LPINT PolyCounts, int Count); BOOL STDCALL -W32kRectangle(HDC hDC, +NtGdiRectangle(HDC hDC, int LeftRect, int TopRect, int RightRect, @@ -56,7 +56,7 @@ W32kRectangle(HDC hDC, BOOL STDCALL -W32kRoundRect(HDC hDC, +NtGdiRoundRect(HDC hDC, int LeftRect, int TopRect, int RightRect, diff --git a/include/win32k/gdiobj.h b/include/win32k/gdiobj.h index 89475a2..4d52555 100644 --- a/include/win32k/gdiobj.h +++ b/include/win32k/gdiobj.h @@ -9,102 +9,79 @@ #include -/*! \defgroup GDI Magic +/*! \defgroup GDI object types * - * GDI object magic numbers + * GDI object types * */ -//@{ -#define GO_PEN_MAGIC 0x4f47 -#define GO_BRUSH_MAGIC 0x4f48 -#define GO_FONT_MAGIC 0x4f49 -#define GO_PALETTE_MAGIC 0x4f4a -#define GO_BITMAP_MAGIC 0x4f4b -#define GO_REGION_MAGIC 0x4f4c -#define GO_DC_MAGIC 0x4f4d -#define GO_DISABLED_DC_MAGIC 0x4f4e -#define GO_META_DC_MAGIC 0x4f4f -#define GO_METAFILE_MAGIC 0x4f50 -#define GO_METAFILE_DC_MAGIC 0x4f51 -#define GO_ENHMETAFILE_MAGIC 0x4f52 -#define GO_ENHMETAFILE_DC_MAGIC 0x4f53 -#define GO_DCE_MAGIC 0x4f54 -#define GO_MAGIC_DONTCARE 0xffff -//@} -/* (RJJ) swiped stock handles from wine */ - /* First handle possible for stock objects (must be >= GDI_HEAP_SIZE) */ -#define FIRST_STOCK_HANDLE 0xffffff00 +/*@{*/ +#define GDI_OBJECT_TYPE_DC 0x00010000 +#define GDI_OBJECT_TYPE_REGION 0x00040000 +#define GDI_OBJECT_TYPE_BITMAP 0x00050000 +#define GDI_OBJECT_TYPE_PALETTE 0x00080000 +#define GDI_OBJECT_TYPE_FONT 0x000a0000 +#define GDI_OBJECT_TYPE_BRUSH 0x00100000 +#define GDI_OBJECT_TYPE_EMF 0x00210000 +#define GDI_OBJECT_TYPE_PEN 0x00300000 +#define GDI_OBJECT_TYPE_EXTPEN 0x00500000 +/* Following object types made up for ROS */ +#define GDI_OBJECT_TYPE_METADC 0x00710000 +#define GDI_OBJECT_TYPE_METAFILE 0x00720000 +#define GDI_OBJECT_TYPE_ENHMETAFILE 0x00730000 +#define GDI_OBJECT_TYPE_ENHMETADC 0x00740000 +#define GDI_OBJECT_TYPE_MEMDC 0x00750000 +#define GDI_OBJECT_TYPE_ICONCURSOR 0x00760000 +#define GDI_OBJECT_TYPE_DCE 0x00770000 +#define GDI_OBJECT_TYPE_DONTCARE 0x007f0000 +/*@}*/ -/*! Stock object handles */ -//@{ -#define NB_STOCK_OBJECTS (DEFAULT_GUI_FONT + 1) -#define STOCK_WHITE_BRUSH ((HBRUSH)(FIRST_STOCK_HANDLE+WHITE_BRUSH)) -#define STOCK_LTGRAY_BRUSH ((HBRUSH)(FIRST_STOCK_HANDLE+LTGRAY_BRUSH)) -#define STOCK_GRAY_BRUSH ((HBRUSH)(FIRST_STOCK_HANDLE+GRAY_BRUSH)) -#define STOCK_DKGRAY_BRUSH ((HBRUSH)(FIRST_STOCK_HANDLE+DKGRAY_BRUSH)) -#define STOCK_BLACK_BRUSH ((HBRUSH)(FIRST_STOCK_HANDLE+BLACK_BRUSH)) -#define STOCK_NULL_BRUSH ((HBRUSH)(FIRST_STOCK_HANDLE+NULL_BRUSH)) -#define STOCK_HOLLOW_BRUSH ((HBRUSH)(FIRST_STOCK_HANDLE+HOLLOW_BRUSH)) -#define STOCK_WHITE_PEN ((HPEN)(FIRST_STOCK_HANDLE+WHITE_PEN)) -#define STOCK_BLACK_PEN ((HPEN)(FIRST_STOCK_HANDLE+BLACK_PEN)) -#define STOCK_NULL_PEN ((HPEN)(FIRST_STOCK_HANDLE+NULL_PEN)) -#define STOCK_OEM_FIXED_FONT ((HFONT)(FIRST_STOCK_HANDLE+OEM_FIXED_FONT)) -#define STOCK_ANSI_FIXED_FONT ((HFONT)(FIRST_STOCK_HANDLE+ANSI_FIXED_FONT)) -#define STOCK_ANSI_VAR_FONT ((HFONT)(FIRST_STOCK_HANDLE+ANSI_VAR_FONT)) -#define STOCK_SYSTEM_FONT ((HFONT)(FIRST_STOCK_HANDLE+SYSTEM_FONT)) -#define STOCK_DEVICE_DEFAULT_FONT ((HFONT)(FIRST_STOCK_HANDLE+DEVICE_DEFAULT_FONT)) -#define STOCK_DEFAULT_PALETTE ((HPALETTE)(FIRST_STOCK_HANDLE+DEFAULT_PALETTE)) -#define STOCK_SYSTEM_FIXED_FONT ((HFONT)(FIRST_STOCK_HANDLE+SYSTEM_FIXED_FONT)) -#define STOCK_DEFAULT_GUI_FONT ((HFONT)(FIRST_STOCK_HANDLE+DEFAULT_GUI_FONT)) -#define FIRST_STOCK_FONT STOCK_OEM_FIXED_FONT -#define LAST_STOCK_FONT STOCK_DEFAULT_GUI_FONT -#define LAST_STOCK_HANDLE ((DWORD)STOCK_DEFAULT_GUI_FONT) -//@} +typedef PVOID PGDIOBJ; + +typedef BOOL (FASTCALL *GDICLEANUPPROC)(PGDIOBJ Obj); /*! * GDI object header. This is a part of any GDI object */ typedef struct _GDIOBJHDR { - WORD wTableIndex; - DWORD dwCount; /// reference count for the object + DWORD dwCount; /* reference count for the object */ + HANDLE hProcessId; + GDICLEANUPPROC CleanupProc; + WORD wTableIndex; + WORD Magic; + const char* lockfile; + int lockline; } GDIOBJHDR, *PGDIOBJHDR; -typedef PVOID PGDIOBJ; - -typedef struct _GDI_HANDLE_ENTRY -{ - WORD wMagic; - HANDLE hProcessId; - PGDIOBJ pObject; -} GDI_HANDLE_ENTRY, *PGDI_HANDLE_ENTRY; - -typedef struct _GDI_HANDLE_TABLE -{ - WORD wTableSize; - GDI_HANDLE_ENTRY Handles [1]; -} GDI_HANDLE_TABLE, *PGDI_HANDLE_TABLE; - typedef struct _GDIMULTILOCK { - HGDIOBJ hObj; - PGDIOBJ pObj; - WORD Magic; + HGDIOBJ hObj; + PGDIOBJ pObj; + DWORD ObjectType; } GDIMULTILOCK, *PGDIMULTILOCK; -HGDIOBJ GDIOBJ_AllocObj(WORD Size, WORD Magic); -BOOL GDIOBJ_FreeObj (HGDIOBJ Obj, WORD Magic, DWORD Flag); -PGDIOBJ GDIOBJ_LockObj (HGDIOBJ Obj, WORD Magic); -BOOL GDIOBJ_LockMultipleObj( PGDIMULTILOCK pList, INT nObj ); -BOOL GDIOBJ_UnlockObj (HGDIOBJ Obj, WORD Magic); -BOOL GDIOBJ_UnlockMultipleObj( PGDIMULTILOCK pList, INT nObj ); -WORD GDIOBJ_GetHandleMagic (HGDIOBJ ObjectHandle); -VOID STDCALL W32kDumpGdiObjects( INT Process ); -BOOL STDCALL W32kCleanupForProcess( INT Process ); +HGDIOBJ FASTCALL GDIOBJ_AllocObj(WORD Size, DWORD ObjectType, GDICLEANUPPROC CleanupProcPtr); +BOOL STDCALL GDIOBJ_FreeObj (HGDIOBJ Obj, DWORD ObjectType, DWORD Flag); +PGDIOBJ FASTCALL GDIOBJ_LockObj (HGDIOBJ Obj, DWORD ObjectType); +BOOL FASTCALL GDIOBJ_LockMultipleObj(PGDIMULTILOCK pList, INT nObj); +BOOL FASTCALL GDIOBJ_UnlockObj (HGDIOBJ Obj, DWORD ObjectType); +BOOL FASTCALL GDIOBJ_UnlockMultipleObj(PGDIMULTILOCK pList, INT nObj); +DWORD FASTCALL GDIOBJ_GetObjectType(HGDIOBJ ObjectHandle); + +/* a couple macros for debugging GDIOBJ locking */ +#define GDIOBJ_LockObj(obj,ty) GDIOBJ_LockObjDbg(__FILE__,__LINE__,obj,ty) +#define GDIOBJ_UnlockObj(obj,ty) GDIOBJ_UnlockObjDbg(__FILE__,__LINE__,obj,ty) -#define GDIOBJFLAG_DEFAULT (0x0) +#ifdef GDIOBJ_LockObj +PGDIOBJ FASTCALL GDIOBJ_LockObjDbg (const char* file, int line, HGDIOBJ Obj, DWORD ObjectType); +#endif /* GDIOBJ_LockObj */ + +#ifdef GDIOBJ_UnlockObj +BOOL FASTCALL GDIOBJ_UnlockObjDbg (const char* file, int line, HGDIOBJ Obj, DWORD ObjectType); +#endif /* GDIOBJ_UnlockObj */ + +#define GDIOBJFLAG_DEFAULT (0x0) #define GDIOBJFLAG_IGNOREPID (0x1) #define GDIOBJFLAG_IGNORELOCK (0x2) #endif - diff --git a/include/win32k/icm.h b/include/win32k/icm.h index a975b7e..9502d25 100644 --- a/include/win32k/icm.h +++ b/include/win32k/icm.h @@ -4,75 +4,75 @@ BOOL STDCALL -W32kCheckColorsInGamut(HDC hDC, +NtGdiCheckColorsInGamut(HDC hDC, LPVOID RGBTriples, LPVOID Buffer, UINT Count); BOOL STDCALL -W32kColorMatchToTarget(HDC hDC, +NtGdiColorMatchToTarget(HDC hDC, HDC hDCTarget, DWORD Action); HCOLORSPACE STDCALL -W32kCreateColorSpace(LPLOGCOLORSPACE LogColorSpace); +NtGdiCreateColorSpace(LPLOGCOLORSPACEW LogColorSpace); BOOL STDCALL -W32kDeleteColorSpace(HCOLORSPACE hColorSpace); +NtGdiDeleteColorSpace(HCOLORSPACE hColorSpace); INT STDCALL -W32kEnumICMProfiles(HDC hDC, - ICMENUMPROC EnumICMProfilesFunc, - LPARAM lParam); +NtGdiEnumICMProfiles(HDC hDC, + LPWSTR lpstrBuffer, + UINT cch ); HCOLORSPACE STDCALL -W32kGetColorSpace(HDC hDC); +NtGdiGetColorSpace(HDC hDC); BOOL STDCALL -W32kGetDeviceGammaRamp(HDC hDC, +NtGdiGetDeviceGammaRamp(HDC hDC, LPVOID Ramp); BOOL STDCALL -W32kGetICMProfile(HDC hDC, - LPDWORD NameSize, +NtGdiGetICMProfile(HDC hDC, + LPDWORD NameSize, LPWSTR Filename); BOOL STDCALL -W32kGetLogColorSpace(HCOLORSPACE hColorSpace, - LPLOGCOLORSPACE Buffer, +NtGdiGetLogColorSpace(HCOLORSPACE hColorSpace, + LPLOGCOLORSPACEW Buffer, DWORD Size); HCOLORSPACE STDCALL -W32kSetColorSpace(HDC hDC, +NtGdiSetColorSpace(HDC hDC, HCOLORSPACE hColorSpace); BOOL STDCALL -W32kSetDeviceGammaRamp(HDC hDC, +NtGdiSetDeviceGammaRamp(HDC hDC, LPVOID Ramp); INT STDCALL -W32kSetICMMode(HDC hDC, +NtGdiSetICMMode(HDC hDC, INT EnableICM); BOOL STDCALL -W32kSetICMProfile(HDC hDC, +NtGdiSetICMProfile(HDC hDC, LPWSTR Filename); BOOL STDCALL -W32kUpdateICMRegKey(DWORD Reserved, +NtGdiUpdateICMRegKey(DWORD Reserved, LPWSTR CMID, LPWSTR Filename, UINT Command); diff --git a/include/win32k/kapi.h b/include/win32k/kapi.h index 6f07515..81e9c51 100644 --- a/include/win32k/kapi.h +++ b/include/win32k/kapi.h @@ -5,6 +5,7 @@ #include #include #include +#include #include #include #include diff --git a/include/win32k/line.h b/include/win32k/line.h index 5e893d7..c3767f1 100644 --- a/include/win32k/line.h +++ b/include/win32k/line.h @@ -3,7 +3,7 @@ BOOL STDCALL -W32kAngleArc(HDC hDC, +NtGdiAngleArc(HDC hDC, int X, int Y, DWORD Radius, @@ -12,7 +12,7 @@ W32kAngleArc(HDC hDC, BOOL STDCALL -W32kArc(HDC hDC, +NtGdiArc(HDC hDC, int LeftRect, int TopRect, int RightRect, @@ -24,7 +24,7 @@ W32kArc(HDC hDC, BOOL STDCALL -W32kArcTo(HDC hDC, +NtGdiArcTo(HDC hDC, int LeftRect, int TopRect, int RightRect, @@ -35,63 +35,67 @@ W32kArcTo(HDC hDC, int YRadial2); INT +FASTCALL +IntGetArcDirection ( PDC dc ); + +INT STDCALL -W32kGetArcDirection(HDC hDC); +NtGdiGetArcDirection ( HDC hDC ); BOOL STDCALL -W32kLineTo(HDC hDC, - int XEnd, - int YEnd); +NtGdiLineTo(HDC hDC, + int XEnd, + int YEnd ); BOOL STDCALL -W32kMoveToEx(HDC hDC, +NtGdiMoveToEx(HDC hDC, int X, int Y, LPPOINT Point); BOOL STDCALL -W32kPolyBezier(HDC hDC, +NtGdiPolyBezier(HDC hDC, CONST LPPOINT pt, DWORD Count); BOOL STDCALL -W32kPolyBezierTo(HDC hDC, +NtGdiPolyBezierTo(HDC hDC, CONST LPPOINT pt, DWORD Count); BOOL STDCALL -W32kPolyDraw(HDC hDC, +NtGdiPolyDraw(HDC hDC, CONST LPPOINT pt, CONST LPBYTE Types, int Count); BOOL STDCALL -W32kPolyline(HDC hDC, +NtGdiPolyline(HDC hDC, CONST LPPOINT pt, int Count); BOOL STDCALL -W32kPolylineTo(HDC hDC, +NtGdiPolylineTo(HDC hDC, CONST LPPOINT pt, DWORD Count); BOOL STDCALL -W32kPolyPolyline(HDC hDC, +NtGdiPolyPolyline(HDC hDC, CONST LPPOINT pt, CONST LPDWORD PolyPoints, DWORD Count); int STDCALL -W32kSetArcDirection(HDC hDC, +NtGdiSetArcDirection(HDC hDC, int ArcDirection); #endif diff --git a/include/win32k/math.h b/include/win32k/math.h index 81a7f66..164b27e 100644 --- a/include/win32k/math.h +++ b/include/win32k/math.h @@ -23,11 +23,13 @@ * $Date$ * */ -// added modfl +/* added modfl */ #ifndef _MATH_H_ #define _MATH_H_ +#include_next + #ifdef __cplusplus extern "C" { #endif @@ -142,7 +144,10 @@ double _yn (int n, double x); * Non-underscored versions of non-ANSI functions. These reside in * liboldnames.a. Provided for extra portability. */ +#if 0 +/* GCC 3.4 warns that this is not equal to it's internal definition for cabs */ double cabs (struct _complex x); +#endif double hypot (double x, double y); double j0 (double x); double j1 (double x); diff --git a/include/win32k/metafile.h b/include/win32k/metafile.h index 53cf60c..b589bb4 100644 --- a/include/win32k/metafile.h +++ b/include/win32k/metafile.h @@ -3,29 +3,29 @@ HENHMETAFILE STDCALL -W32kCloseEnhMetaFile ( +NtGdiCloseEnhMetaFile ( HDC hDC ); HMETAFILE STDCALL -W32kCloseMetaFile ( +NtGdiCloseMetaFile ( HDC hDC ); HENHMETAFILE STDCALL -W32kCopyEnhMetaFile ( +NtGdiCopyEnhMetaFile ( HENHMETAFILE Src, LPCWSTR File ); HMETAFILE STDCALL -W32kCopyMetaFile ( +NtGdiCopyMetaFile ( HMETAFILE Src, LPCWSTR File ); HDC STDCALL -W32kCreateEnhMetaFile ( +NtGdiCreateEnhMetaFile ( HDC hDCRef, LPCWSTR File, CONST LPRECT Rect, @@ -33,22 +33,22 @@ W32kCreateEnhMetaFile ( ); HDC STDCALL -W32kCreateMetaFile ( +NtGdiCreateMetaFile ( LPCWSTR File ); BOOL STDCALL -W32kDeleteEnhMetaFile ( +NtGdiDeleteEnhMetaFile ( HENHMETAFILE emf ); BOOL STDCALL -W32kDeleteMetaFile ( +NtGdiDeleteMetaFile ( HMETAFILE mf ); BOOL STDCALL -W32kEnumEnhMetaFile ( +NtGdiEnumEnhMetaFile ( HDC hDC, HENHMETAFILE emf, ENHMFENUMPROC EnhMetaFunc, @@ -57,7 +57,7 @@ W32kEnumEnhMetaFile ( ); BOOL STDCALL -W32kEnumMetaFile ( +NtGdiEnumMetaFile ( HDC hDC, HMETAFILE mf, MFENUMPROC MetaFunc, @@ -65,59 +65,59 @@ W32kEnumMetaFile ( ); BOOL STDCALL -W32kGdiComment ( +NtGdiGdiComment ( HDC hDC, UINT Size, CONST LPBYTE Data ); HENHMETAFILE STDCALL -W32kGetEnhMetaFile ( +NtGdiGetEnhMetaFile ( LPCWSTR MetaFile ); UINT STDCALL -W32kGetEnhMetaFileBits ( +NtGdiGetEnhMetaFileBits ( HENHMETAFILE hemf, UINT BufSize, LPBYTE Buffer ); UINT STDCALL -W32kGetEnhMetaFileDescription ( +NtGdiGetEnhMetaFileDescription ( HENHMETAFILE hemf, UINT BufSize, LPWSTR Description ); UINT STDCALL -W32kGetEnhMetaFileHeader ( +NtGdiGetEnhMetaFileHeader ( HENHMETAFILE hemf, UINT BufSize, LPENHMETAHEADER emh ); UINT STDCALL -W32kGetEnhMetaFilePaletteEntries ( +NtGdiGetEnhMetaFilePaletteEntries ( HENHMETAFILE hemf, UINT Entries, LPPALETTEENTRY pe ); HMETAFILE STDCALL -W32kGetMetaFile ( +NtGdiGetMetaFile ( LPCWSTR MetaFile ); UINT STDCALL -W32kGetMetaFileBitsEx ( +NtGdiGetMetaFileBitsEx ( HMETAFILE hmf, UINT Size, LPVOID Data ); UINT STDCALL -W32kGetWinMetaFileBits ( +NtGdiGetWinMetaFileBits ( HENHMETAFILE hemf, UINT BufSize, LPBYTE Buffer, @@ -126,14 +126,14 @@ W32kGetWinMetaFileBits ( ); BOOL STDCALL -W32kPlayEnhMetaFile ( +NtGdiPlayEnhMetaFile ( HDC hDC, HENHMETAFILE hemf, CONST PRECT Rect ); BOOL STDCALL -W32kPlayEnhMetaFileRecord ( +NtGdiPlayEnhMetaFileRecord ( HDC hDC, LPHANDLETABLE Handletable, CONST ENHMETARECORD * EnhMetaRecord, @@ -141,13 +141,13 @@ W32kPlayEnhMetaFileRecord ( ); BOOL STDCALL -W32kPlayMetaFile ( +NtGdiPlayMetaFile ( HDC hDC, HMETAFILE hmf ); BOOL STDCALL -W32kPlayMetaFileRecord ( +NtGdiPlayMetaFileRecord ( HDC hDC, LPHANDLETABLE Handletable, LPMETARECORD MetaRecord, @@ -155,20 +155,20 @@ W32kPlayMetaFileRecord ( ); HENHMETAFILE STDCALL -W32kSetEnhMetaFileBits ( +NtGdiSetEnhMetaFileBits ( UINT BufSize, CONST PBYTE Data ); HMETAFILE STDCALL -W32kSetMetaFileBitsEx ( +NtGdiSetMetaFileBitsEx ( UINT Size, CONST PBYTE Data ); #if 0 HENHMETAFILE STDCALL -W32kSetWinMetaFileBits ( +NtGdiSetWinMetaFileBits ( UINT BufSize, CONST PBYTE Buffer, HDC Ref, diff --git a/include/win32k/misc.h b/include/win32k/misc.h index e732ce6..f6d49f1 100644 --- a/include/win32k/misc.h +++ b/include/win32k/misc.h @@ -2,10 +2,14 @@ #define __WIN32K_MISC_H /* Process context in which miniport driver is opened/used */ -extern PEPROCESS W32kDeviceProcess; +extern PEPROCESS Win32kDeviceProcess; BOOLEAN STDCALL -W32kInitialize (VOID); +Win32kInitialize (VOID); + +VOID +FASTCALL +DestroyThreadWindows(struct _ETHREAD *Thread); #endif /* __WIN32K_MISC_H */ diff --git a/include/win32k/ntuser.h b/include/win32k/ntuser.h index 06f48b9..388a784 100644 --- a/include/win32k/ntuser.h +++ b/include/win32k/ntuser.h @@ -3,21 +3,32 @@ ULONG STDCALL NtUserGetSystemMetrics(ULONG Index); + DWORD STDCALL -NtUserGetClassLong(HWND hWnd, DWORD Offset); -DWORD STDCALL -NtUserGetWindowLong(HWND hWnd, DWORD Index); +NtUserGetClassLong(HWND hWnd, DWORD Offset, BOOL Ansi); + +LONG STDCALL +NtUserGetWindowLong(HWND hWnd, DWORD Index, BOOL Ansi); + + INT STDCALL NtUserReleaseDC(HWND hWnd, HDC hDc); + BOOL STDCALL NtUserGetWindowRect(HWND hWnd, LPRECT Rect); + BOOL STDCALL NtUserGetClientRect(HWND hWnd, LPRECT Rect); + HANDLE STDCALL NtUserGetProp(HWND hWnd, ATOM Atom); + BOOL STDCALL NtUserGetClientOrigin(HWND hWnd, LPPOINT Point); +HWND STDCALL +NtUserGetDesktopWindow(); + NTSTATUS STDCALL NtUserAcquireOrReleaseInputOwnership( @@ -63,16 +74,25 @@ STDCALL NtUserBlockInput( DWORD Unknown0); -DWORD +ULONG STDCALL NtUserBuildHwndList( - DWORD Unknown0, - DWORD Unknown1, - DWORD Unknown2, - DWORD Unknown3, - DWORD Unknown4, - DWORD Unknown5, - DWORD Unknown6); + HDESK hDesktop, + HWND hwndParent, + BOOLEAN bChildren, + ULONG dwThreadId, + ULONG lParam, + HWND* pWnd, + ULONG nBufSize); + +DWORD +STDCALL +NtUserBuildMenuItemList( + HMENU hMenu, + PVOID Buffer, + ULONG nBufSize, + DWORD Reserved); + DWORD STDCALL @@ -96,10 +116,10 @@ NtUserCallHwnd( DWORD Unknown0, DWORD Unknown1); -DWORD +BOOL STDCALL NtUserCallHwndLock( - DWORD Unknown0, + HWND hWnd, DWORD Unknown1); DWORD @@ -139,20 +159,32 @@ NtUserCallNextHookEx( DWORD STDCALL NtUserCallNoParam( - DWORD Unknown0); + DWORD Routine); +#define ONEPARAM_ROUTINE_GETMENU 0x01 +#define ONEPARAM_ROUTINE_ISWINDOWUNICODE 0x02 +#define ONEPARAM_ROUTINE_WINDOWFROMDC 0x03 +#define ONEPARAM_ROUTINE_GETWNDCONTEXTHLPID 0x04 +#define ONEPARAM_ROUTINE_SWAPMOUSEBUTTON 0x05 DWORD STDCALL NtUserCallOneParam( - DWORD Unknown0, - DWORD Unknown1); + DWORD Param, + DWORD Routine); +#define TWOPARAM_ROUTINE_ENABLEWINDOW 0x53 +#define TWOPARAM_ROUTINE_UNKNOWN 0x54 +#define TWOPARAM_ROUTINE_SHOWOWNEDPOPUPS 0x55 +#define TWOPARAM_ROUTINE_SWITCHTOTHISWINDOW 0x56 +#define TWOPARAM_ROUTINE_VALIDATERGN 0x57 +#define TWOPARAM_ROUTINE_SETWNDCONTEXTHLPID 0x58 +#define TWOPARAM_ROUTINE_CURSORPOSITION 0x59 DWORD STDCALL NtUserCallTwoParam( - DWORD Unknown0, - DWORD Unknown1, - DWORD Unknown2); + DWORD Param1, + DWORD Param2, + DWORD Routine); DWORD STDCALL @@ -160,21 +192,21 @@ NtUserChangeClipboardChain( DWORD Unknown0, DWORD Unknown1); -DWORD +LONG STDCALL NtUserChangeDisplaySettings( - DWORD Unknown0, - DWORD Unknown1, - DWORD Unknown2, - DWORD Unknown3, - DWORD Unknown4); + PUNICODE_STRING lpszDeviceName, + LPDEVMODEW lpDevMode, + HWND hwnd, + DWORD dwflags, + LPVOID lParam); DWORD STDCALL NtUserCheckMenuItem( - DWORD Unknown0, - DWORD Unknown1, - DWORD Unknown2); + HMENU hmenu, + UINT uIDCheckItem, + UINT uCheck); DWORD STDCALL NtUserChildWindowFromPointEx(HWND Parent, @@ -182,10 +214,10 @@ NtUserChildWindowFromPointEx(HWND Parent, LONG y, UINT Flags); -DWORD +BOOL STDCALL NtUserClipCursor( - DWORD Unknown0); + RECT *lpRect); DWORD STDCALL @@ -207,22 +239,22 @@ NtUserConvertMemHandle( DWORD Unknown0, DWORD Unknown1); -DWORD +int STDCALL NtUserCopyAcceleratorTable( - DWORD Unknown0, - DWORD Unknown1, - DWORD Unknown2); + HACCEL Table, + LPACCEL Entries, + int EntriesCount); DWORD STDCALL NtUserCountClipboardFormats(VOID); -DWORD +HACCEL STDCALL NtUserCreateAcceleratorTable( - DWORD Unknown0, - DWORD Unknown1); + LPACCEL Entries, + SIZE_T EntriesCount); DWORD STDCALL @@ -249,6 +281,10 @@ NtUserCreateLocalMemHandle( DWORD Unknown2, DWORD Unknown3); +HMENU +STDCALL +NtUserCreateMenu(VOID); + HWND STDCALL NtUserCreateWindowEx( @@ -299,14 +335,14 @@ NtUserDdeSetQualityOfService( DWORD Unknown1, DWORD Unknown2); -DWORD STDCALL +HDWP STDCALL NtUserDeferWindowPos(HDWP WinPosInfo, HWND Wnd, HWND WndInsertAfter, - LONG x, - LONG y, - LONG cx, - LONG cy, + int x, + int y, + int cx, + int cy, UINT Flags); DWORD STDCALL @@ -314,28 +350,28 @@ NtUserDefSetText( DWORD Unknown0, DWORD Unknown1); -DWORD +BOOL STDCALL NtUserDeleteMenu( - DWORD Unknown0, - DWORD Unknown1, - DWORD Unknown2); + HMENU hMenu, + UINT uPosition, + UINT uFlags); -DWORD +BOOL STDCALL NtUserDestroyAcceleratorTable( - DWORD Unknown0); + HACCEL Table); -DWORD +BOOL STDCALL NtUserDestroyCursor( - DWORD Unknown0, - DWORD Unknown1); + HCURSOR hCursor, + DWORD Unknown); -DWORD +BOOL STDCALL NtUserDestroyMenu( - DWORD Unknown0); + HMENU hMenu); BOOLEAN STDCALL NtUserDestroyWindow(HWND Wnd); @@ -344,12 +380,12 @@ LRESULT STDCALL NtUserDispatchMessage(CONST MSG* lpmsg); -DWORD +BOOL STDCALL NtUserDragDetect( - DWORD Unknown0, - DWORD Unknown1, - DWORD Unknown2); + HWND hWnd, + LONG x, + LONG y); DWORD STDCALL @@ -405,29 +441,38 @@ NtUserDrawIconEx( DWORD STDCALL NtUserDrawMenuBarTemp( - DWORD Unknown0, - DWORD Unknown1, - DWORD Unknown2, - DWORD Unknown3, - DWORD Unknown4); + HWND hWnd, + HDC hDC, + PRECT hRect, + HMENU hMenu, + HFONT hFont); DWORD STDCALL NtUserEmptyClipboard(VOID); -DWORD +UINT STDCALL NtUserEnableMenuItem( - DWORD Unknown0, - DWORD Unknown1, - DWORD Unknown2); - + HMENU hMenu, + UINT uIDEnableItem, + UINT uEnable); + DWORD STDCALL +NtUserInsertMenuItem( + HMENU hMenu, + UINT uItem, + WINBOOL fByPosition, + LPCMENUITEMINFOW lpmii); + + +BOOL +STDCALL NtUserEnableScrollBar( - DWORD Unknown0, - DWORD Unknown1, - DWORD Unknown2); + HWND hWnd, + UINT wSBflags, + UINT wArrows); DWORD STDCALL @@ -435,36 +480,36 @@ NtUserEndDeferWindowPosEx( DWORD Unknown0, DWORD Unknown1); -DWORD +BOOL STDCALL NtUserEndMenu(VOID); BOOL STDCALL NtUserEndPaint(HWND hWnd, CONST PAINTSTRUCT* lPs); -DWORD +WINBOOL STDCALL -NtUserEnumDisplayDevices( - DWORD Unknown0, - DWORD Unknown1, - DWORD Unknown2, - DWORD Unknown3); +NtUserEnumDisplayDevices ( + PUNICODE_STRING lpDevice, /* device name */ + DWORD iDevNum, /* display device */ + PDISPLAY_DEVICE lpDisplayDevice, /* device information */ + DWORD dwFlags ); /* reserved */ -DWORD +WINBOOL STDCALL -NtUserEnumDisplayMonitors( - DWORD Unknown0, - DWORD Unknown1, - DWORD Unknown2, - DWORD Unknown3); +NtUserEnumDisplayMonitors ( + HDC hdc, + LPCRECT lprcClip, + MONITORENUMPROC lpfnEnum, + LPARAM dwData ); -DWORD +WINBOOL STDCALL NtUserEnumDisplaySettings( - DWORD Unknown0, - DWORD Unknown1, - DWORD Unknown2, - DWORD Unknown3); + PUNICODE_STRING lpszDeviceName, + DWORD iModeNum, + LPDEVMODEW lpDevMode, /* FIXME is this correct? */ + DWORD dwFlags ); DWORD STDCALL @@ -498,8 +543,8 @@ NtUserFindWindowEx( HWND hwndParent, HWND hwndChildAfter, PUNICODE_STRING ucClassName, - PUNICODE_STRING ucWindowName, - DWORD Unknown4); + PUNICODE_STRING ucWindowName + ); DWORD STDCALL @@ -535,18 +580,17 @@ NtUserGetCaretPos( DWORD Unknown0); DWORD STDCALL -NtUserGetClassInfo(IN LPWSTR ClassName, - IN ULONG InfoClass, - OUT PVOID Info, - IN ULONG InfoLength, - OUT PULONG ReturnedLength); +NtUserGetClassInfo(HINSTANCE hInst, + LPCWSTR str, + LPWNDCLASSEXW wcex, + BOOL Ansi, + DWORD unknown3); DWORD STDCALL -NtUserGetClassName( - DWORD Unknown0, - DWORD Unknown1, - DWORD Unknown2); +NtUserGetClassName(HWND hWnd, + LPWSTR lpClassName, + ULONG nMaxCount); DWORD STDCALL @@ -573,10 +617,10 @@ DWORD STDCALL NtUserGetClipboardViewer(VOID); -DWORD +BOOL STDCALL NtUserGetClipCursor( - DWORD Unknown0); + RECT *lpRect); DWORD STDCALL @@ -614,17 +658,23 @@ NtUserGetCursorFrameInfo( DWORD Unknown2, DWORD Unknown3); -DWORD +BOOL STDCALL NtUserGetCursorInfo( - DWORD Unknown0); + PCURSORINFO pci); + +UINT STDCALL +NtUserGetMenuDefaultItem( + HMENU hMenu, + UINT fByPos, + UINT gmdiFlags); HDC STDCALL NtUserGetDC(HWND hWnd); HDC STDCALL NtUserGetDCEx(HWND hWnd, HANDLE hRegion, ULONG Flags); -DWORD +UINT STDCALL NtUserGetDoubleClickTime(VOID); @@ -647,20 +697,20 @@ NtUserGetGUIThreadInfo( DWORD STDCALL NtUserGetIconInfo( - DWORD Unknown0, - DWORD Unknown1, - DWORD Unknown2, - DWORD Unknown3, - DWORD Unknown4, - DWORD Unknown5); + HICON hIcon, + PBOOL fIcon, + PDWORD xHotspot, + PDWORD yHotspot, + HBITMAP *hbmMask, + HBITMAP *hbmColor); -DWORD +BOOL STDCALL NtUserGetIconSize( - DWORD Unknown0, - DWORD Unknown1, - DWORD Unknown2, - DWORD Unknown3); + HICON hIcon, + BOOL *fIcon, + LONG *Width, + LONG *Height); DWORD STDCALL @@ -691,7 +741,7 @@ NtUserGetKeyboardLayoutName( DWORD STDCALL NtUserGetKeyboardState( - DWORD Unknown0); + LPBYTE Unknown0); DWORD STDCALL @@ -710,27 +760,27 @@ STDCALL NtUserGetListBoxInfo( DWORD Unknown0); -DWORD +BOOL STDCALL NtUserGetMenuBarInfo( - DWORD Unknown0, - DWORD Unknown1, - DWORD Unknown2, - DWORD Unknown3); + HWND hwnd, + LONG idObject, + LONG idItem, + PMENUBARINFO pmbi); -DWORD +UINT STDCALL NtUserGetMenuIndex( - DWORD Unknown0, - DWORD Unknown1); + HMENU hMenu, + UINT wID); -DWORD +BOOL STDCALL NtUserGetMenuItemRect( - DWORD Unknown0, - DWORD Unknown1, - DWORD Unknown2, - DWORD Unknown3); + HWND hWnd, + HMENU hMenu, + UINT uItem, + LPRECT lprcItem); BOOL STDCALL @@ -772,15 +822,25 @@ HWINSTA STDCALL NtUserGetProcessWindowStation(VOID); -DWORD +BOOL STDCALL -NtUserGetScrollBarInfo(HWND hWnd, LONG idObject, PSCROLLBARINFO psbi); +NtUserGetScrollBarInfo( + HWND hWnd, + LONG idObject, + PSCROLLBARINFO psbi); -DWORD +BOOL +STDCALL +NtUserGetScrollInfo( + HWND hwnd, + int fnBar, + LPSCROLLINFO lpsi); + +HMENU STDCALL NtUserGetSystemMenu( - DWORD Unknown0, - DWORD Unknown1); + HWND hWnd, + BOOL bRevert); HDESK STDCALL @@ -806,12 +866,12 @@ NtUserGetUpdateRect( DWORD Unknown1, DWORD Unknown2); -DWORD +int STDCALL NtUserGetUpdateRgn( - DWORD Unknown0, - DWORD Unknown1, - DWORD Unknown2); + HWND hWnd, + HRGN hRgn, + WINBOOL bErase); DWORD STDCALL @@ -835,13 +895,13 @@ STDCALL NtUserHideCaret( DWORD Unknown0); -DWORD +BOOL STDCALL NtUserHiliteMenuItem( - DWORD Unknown0, - DWORD Unknown1, - DWORD Unknown2, - DWORD Unknown3); + HWND hwnd, + HMENU hmenu, + UINT uItemHilite, + UINT uHilite); DWORD STDCALL @@ -875,9 +935,9 @@ NtUserInitTask( DWORD STDCALL NtUserInternalGetWindowText( - DWORD Unknown0, - DWORD Unknown1, - DWORD Unknown2); + HWND hWnd, + LPWSTR lpString, + int nMaxCount); DWORD STDCALL @@ -899,11 +959,13 @@ STDCALL NtUserIsClipboardFormatAvailable( DWORD Unknown0); -NTSTATUS +BOOL STDCALL -NtUserKillTimer( - HWND hWnd, - UINT_PTR IDEvent); +NtUserKillTimer +( + HWND hWnd, + UINT_PTR uIDEvent +); DWORD STDCALL @@ -937,13 +999,31 @@ NtUserMapVirtualKeyEx( DWORD Unknown2, DWORD Unknown3); -DWORD +BOOL +STDCALL +NtUserMenuInfo( + HMENU hmenu, + LPMENUINFO lpmi, + BOOL fsog +); + +int STDCALL NtUserMenuItemFromPoint( - DWORD Unknown0, - DWORD Unknown1, - DWORD Unknown2, - DWORD Unknown3); + HWND hWnd, + HMENU hMenu, + DWORD X, + DWORD Y); + +BOOL +STDCALL +NtUserMenuItemInfo( + HMENU hMenu, + UINT uItem, + BOOL fByPosition, + LPMENUITEMINFOW lpmii, + BOOL fsog +); DWORD STDCALL @@ -1078,8 +1158,8 @@ NtUserQueryUserCounters( DWORD STDCALL NtUserQueryWindow( - DWORD Unknown0, - DWORD Unknown1); + HWND hWnd, + DWORD Index); DWORD STDCALL @@ -1088,19 +1168,24 @@ NtUserRealChildWindowFromPoint( DWORD Unknown1, DWORD Unknown2); -NTSTATUS STDCALL -NtUserRedrawWindow(HWND hWnd, CONST RECT *lprcUpdate, HRGN hrgnUpdate, UINT flags); - +BOOL +STDCALL +NtUserRedrawWindow +( + HWND hWnd, + CONST RECT *lprcUpdate, + HRGN hrgnUpdate, + UINT flags +); RTL_ATOM STDCALL -NtUserRegisterClassExWOW( - LPWNDCLASSEX lpwcx, - BOOL bUnicodeClass, - DWORD Unknown2, - DWORD Unknown3, - DWORD Unknown4, - DWORD Unknown5); +NtUserRegisterClassExWOW(CONST WNDCLASSEXW* lpwcx, + BOOL bUnicodeClass, + DWORD Unknown3, + DWORD Unknown4, + DWORD Unknown5); + DWORD STDCALL @@ -1116,14 +1201,14 @@ NtUserRegisterTasklist( DWORD Unknown0); UINT STDCALL -NtUserRegisterWindowMessage(LPCWSTR MessageName); +NtUserRegisterWindowMessage(PUNICODE_STRING MessageName); -DWORD +BOOL STDCALL NtUserRemoveMenu( - DWORD Unknown0, - DWORD Unknown1, - DWORD Unknown2); + HMENU hMenu, + UINT uPosition, + UINT uFlags); HANDLE STDCALL NtUserRemoveProp(HWND hWnd, ATOM Atom); @@ -1144,13 +1229,13 @@ NtUserSBGetParms( DWORD STDCALL NtUserScrollDC( - DWORD Unknown0, - DWORD Unknown1, - DWORD Unknown2, - DWORD Unknown3, - DWORD Unknown4, - DWORD Unknown5, - DWORD Unknown6); + HDC hDC, + int dx, + int dy, + CONST RECT *lprcScroll, + CONST RECT *lprcClip , + HRGN hrgnUpdate, + LPRECT lprcUpdate); DWORD STDCALL @@ -1195,23 +1280,23 @@ NtUserSendNotifyMessage( WPARAM wParam, LPARAM lParam); -DWORD -STDCALL -NtUserSetActiveWindow( - DWORD Unknown0); +HWND STDCALL +NtUserSetActiveWindow(HWND Wnd); +HWND STDCALL +NtUserGetActiveWindow(VOID); -DWORD -STDCALL -NtUserSetCapture( - DWORD Unknown0); +HWND STDCALL +NtUserSetCapture(HWND Wnd); +HWND STDCALL +NtUserGetCapture(VOID); -DWORD -STDCALL +DWORD STDCALL NtUserSetClassLong( - DWORD Unknown0, - DWORD Unknown1, - DWORD Unknown2, - DWORD Unknown3); + HWND hWnd, + DWORD Offset, + LONG dwNewLong, + BOOL Ansi ); + DWORD STDCALL @@ -1238,24 +1323,24 @@ NtUserSetConsoleReserveKeys( DWORD Unknown0, DWORD Unknown1); -DWORD +HCURSOR STDCALL NtUserSetCursor( - DWORD Unknown0); + HCURSOR hCursor); -DWORD +BOOL STDCALL NtUserSetCursorContents( - DWORD Unknown0, - DWORD Unknown1); + HCURSOR hCursor, + DWORD Unknown); -DWORD +BOOL STDCALL NtUserSetCursorIconData( - DWORD Unknown0, - DWORD Unknown1, - DWORD Unknown2, - DWORD Unknown3); + HICON hIcon, + PBOOL fIcon, + PDWORD xHotspot, + PDWORD yHotspot); DWORD STDCALL @@ -1263,10 +1348,10 @@ NtUserSetDbgTag( DWORD Unknown0, DWORD Unknown1); -DWORD +HWND STDCALL NtUserSetFocus( - DWORD Unknown0); + HWND hWnd); DWORD STDCALL @@ -1294,7 +1379,7 @@ NtUserSetInternalWindowPos( DWORD STDCALL NtUserSetKeyboardState( - DWORD Unknown0); + LPBYTE Unknown0); DWORD STDCALL @@ -1309,30 +1394,30 @@ STDCALL NtUserSetLogonNotifyWindow( DWORD Unknown0); -DWORD +BOOL STDCALL NtUserSetMenu( - DWORD Unknown0, - DWORD Unknown1, - DWORD Unknown2); + HWND hWnd, + HMENU hMenu, + BOOL bRepaint); -DWORD +BOOL STDCALL NtUserSetMenuContextHelpId( - DWORD Unknown0, - DWORD Unknown1); + HMENU hmenu, + DWORD dwContextHelpId); -DWORD +BOOL STDCALL NtUserSetMenuDefaultItem( - DWORD Unknown0, - DWORD Unknown1, - DWORD Unknown2); + HMENU hMenu, + UINT uItem, + UINT fByPos); -DWORD +BOOL STDCALL NtUserSetMenuFlagRtoL( - DWORD Unknown0); + HMENU hMenu); BOOL STDCALL @@ -1342,11 +1427,11 @@ NtUserSetObjectInformation( PVOID pvInformation, DWORD nLength); -DWORD +HWND STDCALL NtUserSetParent( - DWORD Unknown0, - DWORD Unknown1); + HWND hWndChild, + HWND hWndNewParent); BOOL STDCALL @@ -1365,16 +1450,20 @@ NtUserSetRipFlags( DWORD STDCALL NtUserSetScrollInfo( - DWORD Unknown0, - DWORD Unknown1, - DWORD Unknown2, - DWORD Unknown3); + HWND hwnd, + int fnBar, + LPSCROLLINFO lpsi, + WINBOOL fRedraw); DWORD STDCALL NtUserSetShellWindowEx( - DWORD Unknown0, - DWORD Unknown1); + HWND hwndShell, + HWND hwndShellListView); + +HWND +STDCALL +NtUserGetShellWindow(); DWORD STDCALL @@ -1384,17 +1473,17 @@ NtUserSetSysColors( DWORD Unknown2, DWORD Unknown3); -DWORD +BOOL STDCALL NtUserSetSystemCursor( - DWORD Unknown0, - DWORD Unknown1); + HCURSOR hcur, + DWORD id); -DWORD +BOOL STDCALL NtUserSetSystemMenu( - DWORD Unknown0, - DWORD Unknown1); + HWND hWnd, + HMENU hMenu); DWORD STDCALL @@ -1415,13 +1504,15 @@ NtUserSetThreadState( DWORD Unknown0, DWORD Unknown1); -NTSTATUS +UINT_PTR STDCALL -NtUserSetTimer( - HWND hWnd, - UINT_PTR * IDEvent, - UINT Period, - TIMERPROC TimerFunc); +NtUserSetTimer +( + HWND hWnd, + UINT_PTR nIDEvent, + UINT uElapse, + TIMERPROC lpTimerFunc +); DWORD STDCALL @@ -1429,13 +1520,13 @@ NtUserSetWindowFNID( DWORD Unknown0, DWORD Unknown1); -DWORD +LONG STDCALL NtUserSetWindowLong( - DWORD Unknown0, - DWORD Unknown1, - DWORD Unknown2, - DWORD Unknown3); + HWND hWnd, + DWORD Index, + LONG NewValue, + BOOL Ansi); DWORD STDCALL @@ -1486,12 +1577,8 @@ NtUserSetWindowStationUser( DWORD Unknown2, DWORD Unknown3); -DWORD -STDCALL -NtUserSetWindowWord( - DWORD Unknown0, - DWORD Unknown1, - DWORD Unknown2); +WORD STDCALL +NtUserSetWindowWord(HWND hWnd, INT Index, WORD NewVal); DWORD STDCALL @@ -1534,26 +1621,26 @@ NtUserSwitchDesktop( DWORD STDCALL NtUserSystemParametersInfo( - DWORD Unknown0, - DWORD Unknown1, - DWORD Unknown2, - DWORD Unknown3); + UINT uiAction, + UINT uiParam, + PVOID pvParam, + UINT fWinIni); DWORD STDCALL NtUserThunkedMenuInfo( - DWORD Unknown0, - DWORD Unknown1); + HMENU hMenu, + LPCMENUINFO lpcmi); DWORD STDCALL NtUserThunkedMenuItemInfo( - DWORD Unknown0, - DWORD Unknown1, - DWORD Unknown2, - DWORD Unknown3, - DWORD Unknown4, - DWORD Unknown5); + HMENU hMenu, + UINT uItem, + BOOL fByPosition, + BOOL bInsert, + LPMENUITEMINFOW lpmii, + PUNICODE_STRING lpszCaption); DWORD STDCALL @@ -1571,22 +1658,22 @@ STDCALL NtUserTrackMouseEvent( DWORD Unknown0); -DWORD +BOOL STDCALL NtUserTrackPopupMenuEx( - DWORD Unknown0, - DWORD Unknown1, - DWORD Unknown2, - DWORD Unknown3, - DWORD Unknown4, - DWORD Unknown5); + HMENU hmenu, + UINT fuFlags, + int x, + int y, + HWND hwnd, + LPTPMPARAMS lptpm); -DWORD +int STDCALL NtUserTranslateAccelerator( - DWORD Unknown0, - DWORD Unknown1, - DWORD Unknown2); + HWND Window, + HACCEL Table, + LPMSG Message); BOOL STDCALL @@ -1675,11 +1762,9 @@ STDCALL NtUserValidateHandleSecure( DWORD Unknown0); -DWORD -STDCALL -NtUserValidateRect( - DWORD Unknown0, - DWORD Unknown1); +VOID STDCALL +NtUserValidateRect(HWND Wnd, const RECT* Rect); + DWORD STDCALL @@ -1724,6 +1809,21 @@ DWORD STDCALL NtUserYieldTask(VOID); +DWORD STDCALL +NtUserGetWindowThreadProcessId(HWND hWnd, LPDWORD UnsafePid); + +DWORD STDCALL +NtUserGetQueueStatus(BOOL ClearChanges); + +HWND STDCALL +NtUserGetParent(HWND hWnd); + +HWND STDCALL +NtUserGetWindow(HWND hWnd, UINT Relationship); + +HWND STDCALL +NtUserGetLastActivePopup(HWND hWnd); + #endif /* __WIN32K_NTUSER_H */ /* EOF */ diff --git a/include/win32k/paint.h b/include/win32k/paint.h index d8fae7a..5d8e16d 100644 --- a/include/win32k/paint.h +++ b/include/win32k/paint.h @@ -1,12 +1,12 @@ #ifndef __WIN32K_PAINT_H #define __WIN32K_PAINT_H -BOOL STDCALL W32kGdiFlush (VOID); -DWORD STDCALL W32kGdiGetBatchLimit (VOID); -DWORD STDCALL W32kGdiSetBatchLimit (DWORD Limit); -UINT STDCALL W32kGetBoundsRect (HDC hDC, LPRECT Bounds, UINT Flags); -COLORREF STDCALL W32kSetBkColor (HDC hDC, COLORREF Color); -UINT STDCALL W32kSetBoundsRect (HDC hDC, CONST PRECT Bounds, UINT Flags); +BOOL STDCALL NtGdiGdiFlush (VOID); +DWORD STDCALL NtGdiGdiGetBatchLimit (VOID); +DWORD STDCALL NtGdiGdiSetBatchLimit (DWORD Limit); +UINT STDCALL NtGdiGetBoundsRect (HDC hDC, LPRECT Bounds, UINT Flags); +COLORREF STDCALL NtGdiSetBkColor (HDC hDC, COLORREF Color); +UINT STDCALL NtGdiSetBoundsRect (HDC hDC, CONST PRECT Bounds, UINT Flags); #endif diff --git a/include/win32k/path.h b/include/win32k/path.h index a461bb7..31467b4 100644 --- a/include/win32k/path.h +++ b/include/win32k/path.h @@ -19,36 +19,36 @@ typedef struct tagGdiPath #define PATH_IsPathOpen(path) ((path).state==PATH_Open) -BOOL STDCALL W32kAbortPath(HDC hDC); +BOOL STDCALL NtGdiAbortPath(HDC hDC); -BOOL STDCALL W32kBeginPath(HDC hDC); +BOOL STDCALL NtGdiBeginPath(HDC hDC); -BOOL STDCALL W32kCloseFigure(HDC hDC); +BOOL STDCALL NtGdiCloseFigure(HDC hDC); -BOOL STDCALL W32kEndPath(HDC hDC); +BOOL STDCALL NtGdiEndPath(HDC hDC); -BOOL STDCALL W32kFillPath(HDC hDC); +BOOL STDCALL NtGdiFillPath(HDC hDC); -BOOL STDCALL W32kFlattenPath(HDC hDC); +BOOL STDCALL NtGdiFlattenPath(HDC hDC); -BOOL STDCALL W32kGetMiterLimit(HDC hDC, +BOOL STDCALL NtGdiGetMiterLimit(HDC hDC, PFLOAT Limit); -INT STDCALL W32kGetPath(HDC hDC, +INT STDCALL NtGdiGetPath(HDC hDC, LPPOINT Points, LPBYTE Types, INT nSize); -HRGN STDCALL W32kPathToRegion(HDC hDC); +HRGN STDCALL NtGdiPathToRegion(HDC hDC); -BOOL STDCALL W32kSetMiterLimit(HDC hDC, +BOOL STDCALL NtGdiSetMiterLimit(HDC hDC, FLOAT NewLimit, PFLOAT OldLimit); -BOOL STDCALL W32kStrokeAndFillPath(HDC hDC); +BOOL STDCALL NtGdiStrokeAndFillPath(HDC hDC); -BOOL STDCALL W32kStrokePath(HDC hDC); +BOOL STDCALL NtGdiStrokePath(HDC hDC); -BOOL STDCALL W32kWidenPath(HDC hDC); +BOOL STDCALL NtGdiWidenPath(HDC hDC); #endif diff --git a/include/win32k/pen.h b/include/win32k/pen.h index 0c317e6..0d9a814 100644 --- a/include/win32k/pen.h +++ b/include/win32k/pen.h @@ -13,24 +13,18 @@ typedef struct /* Internal interface */ #define PENOBJ_AllocPen() \ - ((HPEN) GDIOBJ_AllocObj (sizeof (PENOBJ), GO_PEN_MAGIC)) -#define PENOBJ_FreePen(hBMObj) GDIOBJ_FreeObj((HGDIOBJ) hBMObj, GO_PEN_MAGIC, GDIOBJFLAG_DEFAULT) -/* -#define PENOBJ_HandleToPtr(hBMObj) \ - ((PPENOBJ) GDIOBJ_HandleToPtr ((HGDIOBJ) hBMObj, GO_PEN_MAGIC)) -#define PENOBJ_PtrToHandle(hBMObj) \ - ((HPEN) GDIOBJ_PtrToHandle ((PGDIOBJ) hBMObj, GO_PEN_MAGIC)) -*/ -#define PENOBJ_LockPen(hBMObj) ((PPENOBJ)GDIOBJ_LockObj ((HGDIOBJ) hBMObj, GO_PEN_MAGIC)) -#define PENOBJ_UnlockPen(hBMObj) GDIOBJ_UnlockObj ((HGDIOBJ) hBMObj, GO_PEN_MAGIC) - -HPEN STDCALL W32kCreatePen(INT PenStyle, + ((HPEN) GDIOBJ_AllocObj (sizeof (PENOBJ), GDI_OBJECT_TYPE_PEN, NULL)) +#define PENOBJ_FreePen(hBMObj) GDIOBJ_FreeObj((HGDIOBJ) hBMObj, GDI_OBJECT_TYPE_PEN, GDIOBJFLAG_DEFAULT) +#define PENOBJ_LockPen(hBMObj) ((PPENOBJ)GDIOBJ_LockObj ((HGDIOBJ) hBMObj, GDI_OBJECT_TYPE_PEN)) +#define PENOBJ_UnlockPen(hBMObj) GDIOBJ_UnlockObj ((HGDIOBJ) hBMObj, GDI_OBJECT_TYPE_PEN) + +HPEN STDCALL NtGdiCreatePen(INT PenStyle, INT Width, COLORREF Color); -HPEN STDCALL W32kCreatePenIndirect(CONST PLOGPEN lgpn); +HPEN STDCALL NtGdiCreatePenIndirect(CONST PLOGPEN lgpn); -HPEN STDCALL W32kExtCreatePen(DWORD PenStyle, +HPEN STDCALL NtGdiExtCreatePen(DWORD PenStyle, DWORD Width, CONST PLOGBRUSH lb, DWORD StyleCount, diff --git a/include/win32k/print.h b/include/win32k/print.h index 52342d9..245a486 100644 --- a/include/win32k/print.h +++ b/include/win32k/print.h @@ -4,19 +4,19 @@ INT STDCALL -W32kAbortDoc(HDC hDC); +NtGdiAbortDoc(HDC hDC); INT STDCALL -W32kEndDoc(HDC hDC); +NtGdiEndDoc(HDC hDC); INT STDCALL -W32kEndPage(HDC hDC); +NtGdiEndPage(HDC hDC); INT STDCALL -W32kEscape(HDC hDC, +NtGdiEscape(HDC hDC, INT Escape, INT InSize, LPCSTR InData, @@ -24,7 +24,7 @@ W32kEscape(HDC hDC, INT STDCALL -W32kExtEscape(HDC hDC, +NtGdiExtEscape(HDC hDC, INT Escape, INT InSize, LPCSTR InData, @@ -33,16 +33,16 @@ W32kExtEscape(HDC hDC, INT STDCALL -W32kSetAbortProc(HDC hDC, +NtGdiSetAbortProc(HDC hDC, ABORTPROC AbortProc); INT STDCALL -W32kStartDoc(HDC hDC, - CONST PDOCINFO di); +NtGdiStartDoc(HDC hDC, + CONST PDOCINFOW di); INT STDCALL -W32kStartPage(HDC hDC); +NtGdiStartPage(HDC hDC); #endif diff --git a/include/win32k/region.h b/include/win32k/region.h index 4c7783a..0588984 100644 --- a/include/win32k/region.h +++ b/include/win32k/region.h @@ -4,69 +4,69 @@ #include -//Internal region data. Can't use RGNDATA structure because buffer is allocated statically +/* Internal region data. Can't use RGNDATA structure because buffer is allocated statically */ typedef struct _ROSRGNDATA { RGNDATAHEADER rdh; char* Buffer; } ROSRGNDATA, *PROSRGNDATA, *LPROSRGNDATA; -#define RGNDATA_FreeRgn(hRgn) GDIOBJ_FreeObj((HGDIOBJ)hRgn, GO_REGION_MAGIC, GDIOBJFLAG_DEFAULT) -#define RGNDATA_LockRgn(hRgn) ((PROSRGNDATA)GDIOBJ_LockObj((HGDIOBJ)hRgn, GO_REGION_MAGIC)) -#define RGNDATA_UnlockRgn(hRgn) GDIOBJ_UnlockObj((HGDIOBJ)hRgn, GO_REGION_MAGIC) -HRGN RGNDATA_AllocRgn(INT n); +#define RGNDATA_FreeRgn(hRgn) GDIOBJ_FreeObj((HGDIOBJ)hRgn, GDI_OBJECT_TYPE_REGION, GDIOBJFLAG_DEFAULT) +#define RGNDATA_LockRgn(hRgn) ((PROSRGNDATA)GDIOBJ_LockObj((HGDIOBJ)hRgn, GDI_OBJECT_TYPE_REGION)) +#define RGNDATA_UnlockRgn(hRgn) GDIOBJ_UnlockObj((HGDIOBJ)hRgn, GDI_OBJECT_TYPE_REGION) +HRGN FASTCALL RGNDATA_AllocRgn(INT n); -BOOL RGNDATA_InternalDelete( PROSRGNDATA Obj ); +BOOL FASTCALL RGNDATA_InternalDelete( PROSRGNDATA Obj ); /* User entry points */ HRGN STDCALL -W32kUnionRectWithRgn(HRGN hDest, const RECT* Rect); +NtGdiUnionRectWithRgn(HRGN hDest, CONST PRECT Rect); INT STDCALL -W32kCombineRgn(HRGN hDest, +NtGdiCombineRgn(HRGN hDest, HRGN hSrc1, HRGN hSrc2, INT CombineMode); HRGN STDCALL -W32kCreateEllipticRgn(INT LeftRect, +NtGdiCreateEllipticRgn(INT LeftRect, INT TopRect, INT RightRect, INT BottomRect); HRGN STDCALL -W32kCreateEllipticRgnIndirect(CONST PRECT rc); +NtGdiCreateEllipticRgnIndirect(CONST PRECT rc); HRGN STDCALL -W32kCreatePolygonRgn(CONST PPOINT pt, +NtGdiCreatePolygonRgn(CONST PPOINT pt, INT Count, INT PolyFillMode); HRGN STDCALL -W32kCreatePolyPolygonRgn(CONST PPOINT pt, +NtGdiCreatePolyPolygonRgn(CONST PPOINT pt, CONST PINT PolyCounts, INT Count, INT PolyFillMode); HRGN STDCALL -W32kCreateRectRgn(INT LeftRect, +NtGdiCreateRectRgn(INT LeftRect, INT TopRect, INT RightRect, INT BottomRect); HRGN STDCALL -W32kCreateRectRgnIndirect(CONST PRECT rc); +NtGdiCreateRectRgnIndirect(CONST PRECT rc); HRGN STDCALL -W32kCreateRoundRectRgn(INT LeftRect, +NtGdiCreateRoundRectRgn(INT LeftRect, INT TopRect, INT RightRect, INT BottomRect, @@ -75,24 +75,24 @@ W32kCreateRoundRectRgn(INT LeftRect, BOOL STDCALL -W32kEqualRgn(HRGN hSrcRgn1, +NtGdiEqualRgn(HRGN hSrcRgn1, HRGN hSrcRgn2); HRGN STDCALL -W32kExtCreateRegion(CONST PXFORM Xform, +NtGdiExtCreateRegion(CONST PXFORM Xform, DWORD Count, CONST PROSRGNDATA RgnData); BOOL STDCALL -W32kFillRgn(HDC hDC, +NtGdiFillRgn(HDC hDC, HRGN hRgn, HBRUSH hBrush); BOOL STDCALL -W32kFrameRgn(HDC hDC, +NtGdiFrameRgn(HDC hDC, HRGN hRgn, HBRUSH hBrush, INT Width, @@ -100,44 +100,44 @@ W32kFrameRgn(HDC hDC, INT STDCALL -W32kGetRgnBox(HRGN hRgn, +NtGdiGetRgnBox(HRGN hRgn, LPRECT Rect); BOOL STDCALL -W32kInvertRgn(HDC hDC, +NtGdiInvertRgn(HDC hDC, HRGN hRgn); INT STDCALL -W32kOffsetRgn(HRGN hRgn, +NtGdiOffsetRgn(HRGN hRgn, INT XOffset, INT YOffset); BOOL STDCALL -W32kPaintRgn(HDC hDC, +NtGdiPaintRgn(HDC hDC, HRGN hRgn); BOOL STDCALL -W32kPtInRegion(HRGN hRgn, +NtGdiPtInRegion(HRGN hRgn, INT X, INT Y); BOOL STDCALL -W32kRectInRegion(HRGN hRgn, +NtGdiRectInRegion(HRGN hRgn, CONST LPRECT rc); INT STDCALL -W32kSelectVisRgn(HDC hdc, +NtGdiSelectVisRgn(HDC hdc, HRGN hrgn); BOOL STDCALL -W32kSetRectRgn(HRGN hRgn, +NtGdiSetRectRgn(HRGN hRgn, INT LeftRect, INT TopRect, INT RightRect, @@ -145,14 +145,15 @@ W32kSetRectRgn(HRGN hRgn, DWORD STDCALL -W32kGetRegionData(HRGN hrgn, +NtGdiGetRegionData(HRGN hrgn, DWORD count, LPRGNDATA rgndata); -HRGN REGION_CropRgn(HRGN hDst, HRGN hSrc, const PRECT lpRect, PPOINT lpPt); -HRGN STDCALL -UnsafeW32kCreateRectRgnIndirect(CONST PRECT rc); -INT STDCALL -UnsafeW32kGetRgnBox(HRGN hRgn, - LPRECT pRect); + +HRGN STDCALL REGION_CropRgn(HRGN hDst, HRGN hSrc, const PRECT lpRect, PPOINT lpPt); + +HRGN STDCALL UnsafeIntCreateRectRgnIndirect(CONST PRECT rc); +INT STDCALL UnsafeIntGetRgnBox(HRGN hRgn, LPRECT pRect); +HRGN FASTCALL UnsafeIntUnionRectWithRgn(HRGN hDest, CONST PRECT Rect); +BOOL FASTCALL UnsafeIntRectInRegion(HRGN hRgn, CONST LPRECT rc); #endif diff --git a/include/win32k/text.h b/include/win32k/text.h index 96e6507..4fd4a16 100644 --- a/include/win32k/text.h +++ b/include/win32k/text.h @@ -12,21 +12,21 @@ typedef struct /* Internal interface */ #define TEXTOBJ_AllocText() \ - ((HFONT) GDIOBJ_AllocObj (sizeof (TEXTOBJ), GO_FONT_MAGIC)) -#define TEXTOBJ_FreeText(hBMObj) GDIOBJ_FreeObj((HGDIOBJ) hBMObj, GO_FONT_MAGIC, GDIOBJFLAG_DEFAULT) -#define TEXTOBJ_LockText(hBMObj) ((PTEXTOBJ) GDIOBJ_LockObj ((HGDIOBJ) hBMObj, GO_FONT_MAGIC)) -#define TEXTOBJ_UnlockText(hBMObj) GDIOBJ_UnlockObj ((HGDIOBJ) hBMObj, GO_FONT_MAGIC) + ((HFONT) GDIOBJ_AllocObj (sizeof (TEXTOBJ), GDI_OBJECT_TYPE_FONT, NULL)) +#define TEXTOBJ_FreeText(hBMObj) GDIOBJ_FreeObj((HGDIOBJ) hBMObj, GDI_OBJECT_TYPE_FONT, GDIOBJFLAG_DEFAULT) +#define TEXTOBJ_LockText(hBMObj) ((PTEXTOBJ) GDIOBJ_LockObj ((HGDIOBJ) hBMObj, GDI_OBJECT_TYPE_FONT)) +#define TEXTOBJ_UnlockText(hBMObj) GDIOBJ_UnlockObj ((HGDIOBJ) hBMObj, GDI_OBJECT_TYPE_FONT) -NTSTATUS TextIntRealizeFont(HFONT FontHandle); -NTSTATUS TextIntCreateFontIndirect(CONST LPLOGFONTW lf, HFONT *NewFont); +NTSTATUS FASTCALL TextIntRealizeFont(HFONT FontHandle); +NTSTATUS FASTCALL TextIntCreateFontIndirect(CONST LPLOGFONTW lf, HFONT *NewFont); int STDCALL -W32kAddFontResource(LPCWSTR Filename); +NtGdiAddFontResource(LPCWSTR Filename); HFONT STDCALL -W32kCreateFont(int Height, +NtGdiCreateFont(int Height, int Width, int Escapement, int Orientation, @@ -43,40 +43,40 @@ W32kCreateFont(int Height, HFONT STDCALL -W32kCreateFontIndirect(CONST LPLOGFONTW lf); +NtGdiCreateFontIndirect(CONST LPLOGFONTW lf); BOOL STDCALL -W32kCreateScalableFontResource(DWORD Hidden, +NtGdiCreateScalableFontResource(DWORD Hidden, LPCWSTR FontRes, LPCWSTR FontFile, LPCWSTR CurrentPath); int STDCALL -W32kEnumFontFamilies(HDC hDC, +NtGdiEnumFontFamilies(HDC hDC, LPCWSTR Family, - FONTENUMPROC EnumFontFamProc, + FONTENUMPROCW EnumFontFamProc, LPARAM lParam); int STDCALL -W32kEnumFontFamiliesEx(HDC hDC, +NtGdiEnumFontFamiliesEx(HDC hDC, LPLOGFONTW Logfont, - FONTENUMPROC EnumFontFamExProc, + FONTENUMEXPROCW EnumFontFamExProc, LPARAM lParam, DWORD Flags); int STDCALL -W32kEnumFonts(HDC hDC, +NtGdiEnumFonts(HDC hDC, LPCWSTR FaceName, - FONTENUMPROC FontFunc, + FONTENUMPROCW FontFunc, LPARAM lParam); BOOL STDCALL -W32kExtTextOut(HDC hDC, +NtGdiExtTextOut(HDC hDC, int X, int Y, UINT Options, @@ -87,60 +87,60 @@ W32kExtTextOut(HDC hDC, BOOL STDCALL -W32kGetAspectRatioFilterEx(HDC hDC, +NtGdiGetAspectRatioFilterEx(HDC hDC, LPSIZE AspectRatio); BOOL STDCALL -W32kGetCharABCWidths(HDC hDC, +NtGdiGetCharABCWidths(HDC hDC, UINT FirstChar, UINT LastChar, LPABC abc); BOOL STDCALL -W32kGetCharABCWidthsFloat(HDC hDC, +NtGdiGetCharABCWidthsFloat(HDC hDC, UINT FirstChar, UINT LastChar, LPABCFLOAT abcF); DWORD STDCALL -W32kGetCharacterPlacement(HDC hDC, +NtGdiGetCharacterPlacement(HDC hDC, LPCWSTR String, int Count, int MaxExtent, - LPGCP_RESULTS Results, + LPGCP_RESULTSW Results, DWORD Flags); BOOL STDCALL -W32kGetCharWidth(HDC hDC, +NtGdiGetCharWidth(HDC hDC, UINT FirstChar, UINT LastChar, LPINT Buffer); BOOL STDCALL -W32kGetCharWidth32(HDC hDC, +NtGdiGetCharWidth32(HDC hDC, UINT FirstChar, UINT LastChar, LPINT Buffer); BOOL STDCALL -W32kGetCharWidthFloat(HDC hDC, +NtGdiGetCharWidthFloat(HDC hDC, UINT FirstChar, UINT LastChar, PFLOAT Buffer); DWORD STDCALL -W32kGetFontLanguageInfo(HDC hDC); +NtGdiGetFontLanguageInfo(HDC hDC); DWORD STDCALL -W32kGetGlyphOutline(HDC hDC, +NtGdiGetGlyphOutline(HDC hDC, UINT Char, UINT Format, LPGLYPHMETRICS gm, @@ -150,34 +150,34 @@ W32kGetGlyphOutline(HDC hDC, DWORD STDCALL -W32kGetKerningPairs(HDC hDC, +NtGdiGetKerningPairs(HDC hDC, DWORD NumPairs, LPKERNINGPAIR krnpair); UINT STDCALL -W32kGetOutlineTextMetrics(HDC hDC, +NtGdiGetOutlineTextMetrics(HDC hDC, UINT Data, LPOUTLINETEXTMETRICW otm); BOOL STDCALL -W32kGetRasterizerCaps(LPRASTERIZER_STATUS rs, +NtGdiGetRasterizerCaps(LPRASTERIZER_STATUS rs, UINT Size); UINT STDCALL -W32kGetTextCharset(HDC hDC); +NtGdiGetTextCharset(HDC hDC); UINT STDCALL -W32kGetTextCharsetInfo(HDC hDC, +NtGdiGetTextCharsetInfo(HDC hDC, LPFONTSIGNATURE Sig, DWORD Flags); BOOL STDCALL -W32kGetTextExtentExPoint(HDC hDC, +NtGdiGetTextExtentExPoint(HDC hDC, LPCWSTR String, int Count, int MaxExtent, @@ -187,63 +187,63 @@ W32kGetTextExtentExPoint(HDC hDC, BOOL STDCALL -W32kGetTextExtentPoint(HDC hDC, +NtGdiGetTextExtentPoint(HDC hDC, LPCWSTR String, int Count, LPSIZE Size); BOOL STDCALL -W32kGetTextExtentPoint32(HDC hDC, +NtGdiGetTextExtentPoint32(HDC hDC, LPCWSTR String, int Count, LPSIZE Size); int STDCALL -W32kGetTextFace(HDC hDC, +NtGdiGetTextFace(HDC hDC, int Count, LPWSTR FaceName); BOOL STDCALL -W32kGetTextMetrics(HDC hDC, +NtGdiGetTextMetrics(HDC hDC, LPTEXTMETRICW tm); BOOL STDCALL -W32kPolyTextOut(HDC hDC, - CONST LPPOLYTEXT txt, +NtGdiPolyTextOut(HDC hDC, + CONST LPPOLYTEXTW txt, int Count); BOOL STDCALL -W32kRemoveFontResource(LPCWSTR FileName); +NtGdiRemoveFontResource(LPCWSTR FileName); DWORD STDCALL -W32kSetMapperFlags(HDC hDC, +NtGdiSetMapperFlags(HDC hDC, DWORD Flag); UINT STDCALL -W32kSetTextAlign(HDC hDC, +NtGdiSetTextAlign(HDC hDC, UINT Mode); COLORREF STDCALL -W32kSetTextColor(HDC hDC, +NtGdiSetTextColor(HDC hDC, COLORREF Color); BOOL STDCALL -W32kSetTextJustification(HDC hDC, +NtGdiSetTextJustification(HDC hDC, int BreakExtra, int BreakCount); BOOL STDCALL -W32kTextOut(HDC hDC, +NtGdiTextOut(HDC hDC, int XStart, int YStart, LPCWSTR String, @@ -251,7 +251,7 @@ W32kTextOut(HDC hDC, UINT STDCALL -W32kTranslateCharsetInfo(PDWORD Src, +NtGdiTranslateCharsetInfo(PDWORD Src, LPCHARSETINFO CSI, DWORD Flags); diff --git a/include/win32k/userobj.h b/include/win32k/userobj.h index 6168d69..cc9e08f 100644 --- a/include/win32k/userobj.h +++ b/include/win32k/userobj.h @@ -35,12 +35,12 @@ typedef HANDLE HUSEROBJ; #define UserObjectHeaderToHandle(header) ((HUSEROBJ)header) #define UserObjectHandleToHeader(handle) ((HUSEROBJ)handle) -PUSER_OBJECT USEROBJ_AllocObject (WORD size, WORD magic); -BOOL USEROBJ_FreeObject (PUSER_OBJECT object, WORD magic); -HUSEROBJ USEROBJ_PtrToHandle (PUSER_OBJECT object, WORD magic); -PUSER_OBJECT USEROBJ_HandleToPtr (HUSEROBJ object, WORD magic); -BOOL USEROBJ_LockObject (HUSEROBJ Obj); -BOOL USEROBJ_UnlockObject (HUSEROBJ Obj); +PUSER_OBJECT FASTCALL USEROBJ_AllocObject (WORD size, WORD magic); +BOOL FASTCALL USEROBJ_FreeObject (PUSER_OBJECT object, WORD magic); +HUSEROBJ FASTCALL USEROBJ_PtrToHandle (PUSER_OBJECT object, WORD magic); +PUSER_OBJECT FASTCALL USEROBJ_HandleToPtr (HUSEROBJ object, WORD magic); +BOOL FASTCALL USEROBJ_LockObject (HUSEROBJ Obj); +BOOL FASTCALL USEROBJ_UnlockObject (HUSEROBJ Obj); #endif diff --git a/include/win32k/wingl.h b/include/win32k/wingl.h index b7a0e8b..70ba8d5 100644 --- a/include/win32k/wingl.h +++ b/include/win32k/wingl.h @@ -4,35 +4,35 @@ INT STDCALL -W32kChoosePixelFormat(HDC hDC, +NtGdiChoosePixelFormat(HDC hDC, CONST PPIXELFORMATDESCRIPTOR pfd); INT STDCALL -W32kDescribePixelFormat(HDC hDC, +NtGdiDescribePixelFormat(HDC hDC, INT PixelFormat, UINT BufSize, PPIXELFORMATDESCRIPTOR pfd); UINT STDCALL -W32kGetEnhMetaFilePixelFormat(HENHMETAFILE hEMF, +NtGdiGetEnhMetaFilePixelFormat(HENHMETAFILE hEMF, DWORD BufSize, CONST PPIXELFORMATDESCRIPTOR pfd); INT STDCALL -W32kGetPixelFormat(HDC hDC); +NtGdiGetPixelFormat(HDC hDC); BOOL STDCALL -W32kSetPixelFormat(HDC hDC, +NtGdiSetPixelFormat(HDC hDC, INT PixelFormat, CONST PPIXELFORMATDESCRIPTOR pfd); BOOL STDCALL -W32kSwapBuffers(HDC hDC); +NtGdiSwapBuffers(HDC hDC); #endif diff --git a/include/wincrypt.h b/include/wincrypt.h new file mode 100644 index 0000000..d25d663 --- /dev/null +++ b/include/wincrypt.h @@ -0,0 +1,430 @@ +/* + * Copyright (C) 2002 Travis Michielsen + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * 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. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef __WINE_WINCRYPT_H +#define __WINE_WINCRYPT_H + +/* some typedefs for function parameters */ +typedef unsigned int ALG_ID; +typedef unsigned long HCRYPTPROV; +typedef unsigned long HCRYPTKEY; +typedef unsigned long HCRYPTHASH; +typedef void *HCERTSTORE; + +/* CSP Structs */ + +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; + +typedef struct _CRYPT_ALGORITHM_IDENTIFIER { + LPSTR pszObjId; + CRYPT_OBJID_BLOB Parameters; +} CRYPT_ALGORITHM_IDENTIFIER, *PCRYPT_ALGORITHM_IDENTIFIER; + +typedef struct _CRYPT_ATTRIBUTE_TYPE_VALUE { + LPSTR pszObjId; + CRYPT_OBJID_BLOB Value; +} CRYPT_ATTRIBUTE_TYPE_VALUE, *PCRYPT_ATTRIBUTE_TYPE_VALUE; + +typedef struct _PUBLICKEYSTRUC { + BYTE bType; + BYTE bVersion; + WORD reserved; + ALG_ID aiKeyAlg; +} BLOBHEADER, PUBLICKEYSTRUC; + +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; + WINBOOL 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 _VTableProvStruc { + DWORD Version; + FARPROC pFuncVerifyImage; + FARPROC pFuncReturnhWnd; + DWORD dwProvType; + BYTE *pbContextInfo; + DWORD cbContextInfo; + LPSTR pszProvName; +} VTableProvStruc, *PVTableProvStruc; + +/* Algorithm IDs */ + +#define GET_ALG_CLASS(x) (x & (7 << 13)) +#define GET_ALG_TYPE(x) (x & (15 << 9)) +#define GET_ALG_SID(x) (x & (511)) + +/* Algorithm Classes */ +#define ALG_CLASS_ANY (0) +#define ALG_CLASS_SIGNATURE (1 << 13) +#define ALG_CLASS_MSG_ENCRYPT (2 << 13) +#define ALG_CLASS_DATA_ENCRYPT (3 << 13) +#define ALG_CLASS_HASH (4 << 13) +#define ALG_CLASS_KEY_EXCHANGE (5 << 13) +/* Algorithm types */ +#define ALG_TYPE_ANY (0) +#define ALG_TYPE_DSS (1 << 9) +#define ALG_TYPE_RSA (2 << 9) +#define ALG_TYPE_BLOCK (3 << 9) +#define ALG_TYPE_STREAM (4 << 9) + +/* SIDs */ +#define ALG_SID_ANY (0) +/* RSA SIDs */ +#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 +/* DSS SIDs */ +#define ALG_SID_DSS_ANY 0 +#define ALG_SID_DSS_PKCS 1 +#define ALG_SID_DSS_DMS 2 + +/* DES SIDs */ +#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 ALD_SID_SAFERSK128 8 +/* RC2 SIDs */ +#define ALG_SID_RC4 1 +#define ALG_SID_RC2 2 +#define ALG_SID_SEAL 2 +/* Hash SIDs */ +#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 + +/* Algorithm Definitions */ +#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_MAC (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MAC) +#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) + +/* Provider names */ +#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 Cryptographic Provider" +#define MS_SCARD_PROV_W L"Microsoft Base Smart Card Cryptographic Provider" + +/* Key Specs*/ +#define AT_KEYEXCHANGE 1 +#define AT_SIGNATURE 2 + +/* Provider Types */ +#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_SSL 6 +#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_REPLACE_OWF 23 +#define PROV_RSA_AES 24 + +/* FLAGS Section */ + +/* Provider Parameters */ +#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 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 + +/* CryptAcquireContext */ +#define CRYPT_VERIFYCONTEXT 0xF0000000 +#define CRYPT_NEWKEYSET 0x00000008 +#define CRYPT_MACHINE_KEYSET 0x00000000 +#define CRYPT_DELETEKEYSET 0x00000010 +#define CRYPT_SILENT 0x00000000 + +/* Crypt{Get|Set}Provider */ +#define CRYPT_MACHINE_DEFAULT 0x00000001 +#define CRYPT_USER_DEFAULT 0x00000002 +#define CRYPT_DELETE_DEFAULT 0x00000004 + +/* Crypt{Get/Set}ProvParam */ +#define PP_CLIENT_HWND 1 +#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_KEY_TYPE_SUBTYPE 10 +#define PP_CONTEXT_INFO 11 +#define PP_KEYEXCHANGE_KEYSIZE 12 +#define PP_SIGNATURE_KEYSIZE 13 +#define PP_KEYEXCHANGE_ALG 14 +#define PP_SIGNATURE_ALG 15 +#define PP_PROVTYPE 16 +#define PP_KEYSTORAGE 17 +#define PP_SYM_KEYSIZE 19 +#define PP_SESSION_KEYSIZE 20 +#define PP_UI_PROMPT 21 +#define PP_ENUMALGS_EX 22 +#define PP_DELETEKEY 24 +#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 + +/* CryptSignHash/CryptVerifySignature */ +#define CRYPT_NOHASHOID 0x00000001 +#define CRYPT_TYPE2_FORMAT 0x00000002 +#define CRYPT_X931_FORMAT 0x00000004 + +/* Crypt*Key */ +#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_ARCHIVABLE 0x00004000 +#define CRYPT_SSL2_FALLBACK 0x00000002 +#define CRYPT_DESTROYKEY 0x00000004 +#define CRYPT_OAEP 0x00000040 + +/* Blob Types */ +#define SIMPLEBLOB 0x1 +#define PUBLICKEYBLOB 0x6 +#define PRIVATEKEYBLOB 0x7 +#define PLAINTEXTKEYBLOB 0x8 +#define OPAQUEKEYBLOB 0x9 +#define PUBLICKEYBLOBEX 0xA +#define SYMMETRICWRAPKEYBLOB 0xB + +/* function declarations */ +/* advapi32.dll */ +WINBOOL STDCALL CryptAcquireContextA(HCRYPTPROV *phProv, LPCSTR pszContainer, + LPCSTR pszProvider, DWORD dwProvType, + DWORD dwFlags); +WINBOOL STDCALL CryptAcquireContextW (HCRYPTPROV *phProv, LPCWSTR pszContainer, + LPCWSTR pszProvider, DWORD dwProvType, DWORD dwFlags); +WINBOOL STDCALL CryptGenRandom (HCRYPTPROV hProv, DWORD dwLen, BYTE *pbBuffer); +WINBOOL STDCALL CryptContextAddRef (HCRYPTPROV hProv, DWORD *pdwReserved, DWORD dwFlags); +WINBOOL STDCALL CryptCreateHash (HCRYPTPROV hProv, ALG_ID Algid, HCRYPTKEY hKey, + DWORD dwFlags, HCRYPTHASH *phHash); +WINBOOL STDCALL CryptDecrypt (HCRYPTKEY hKey, HCRYPTHASH hHash, WINBOOL Final, + DWORD dwFlags, BYTE *pbData, DWORD *pdwDataLen); +WINBOOL STDCALL CryptDeriveKey (HCRYPTPROV hProv, ALG_ID Algid, HCRYPTHASH hBaseData, + DWORD dwFlags, HCRYPTKEY *phKey); +WINBOOL STDCALL CryptDestroyHash (HCRYPTHASH hHash); +WINBOOL STDCALL CryptDestroyKey (HCRYPTKEY hKey); +WINBOOL STDCALL CryptDuplicateKey (HCRYPTKEY hKey, DWORD *pdwReserved, DWORD dwFlags, HCRYPTKEY *phKey); +WINBOOL STDCALL CryptDuplicateHash (HCRYPTHASH hHash, DWORD *pdwReserved, + DWORD dwFlags, HCRYPTHASH *phHash); +WINBOOL STDCALL CryptEncrypt (HCRYPTKEY hKey, HCRYPTHASH hHash, WINBOOL Final, + DWORD dwFlags, BYTE *pbData, DWORD *pdwDataLen, DWORD dwBufLen); +WINBOOL STDCALL CryptEnumProvidersA (DWORD dwIndex, DWORD *pdwReserved, + DWORD dwFlags, DWORD *pdwProvType, LPSTR pszProvName, DWORD *pcbProvName); +WINBOOL STDCALL CryptEnumProvidersW (DWORD dwIndex, DWORD *pdwReserved, + DWORD dwFlags, DWORD *pdwProvType, LPWSTR pszProvName, DWORD *pcbProvName); +WINBOOL STDCALL CryptEnumProviderTypesA (DWORD dwIndex, DWORD *pdwReserved, + DWORD dwFlags, DWORD *pdwProvType, LPSTR pszTypeName, DWORD *pcbTypeName); +WINBOOL STDCALL CryptEnumProviderTypesW (DWORD dwIndex, DWORD *pdwReserved, + DWORD dwFlags, DWORD *pdwProvType, LPWSTR pszTypeName, DWORD *pcbTypeName); +WINBOOL STDCALL CryptExportKey (HCRYPTKEY hKey, HCRYPTKEY hExpKey, DWORD dwBlobType, + DWORD dwFlags, BYTE *pbData, DWORD *pdwDataLen); +WINBOOL STDCALL CryptGenKey (HCRYPTPROV hProv, ALG_ID Algid, DWORD dwFlags, HCRYPTKEY *phKey); +WINBOOL STDCALL CryptGetKeyParam (HCRYPTKEY hKey, DWORD dwParam, BYTE *pbData, + DWORD *pdwDataLen, DWORD dwFlags); +WINBOOL STDCALL CryptGetHashParam (HCRYPTHASH hHash, DWORD dwParam, BYTE *pbData, + DWORD *pdwDataLen, DWORD dwFlags); +WINBOOL STDCALL CryptGetProvParam (HCRYPTPROV hProv, DWORD dwParam, BYTE *pbData, + DWORD *pdwDataLen, DWORD dwFlags); +WINBOOL STDCALL CryptGetDefaultProviderA (DWORD dwProvType, DWORD *pdwReserved, + DWORD dwFlags, LPSTR pszProvName, DWORD *pcbProvName); +WINBOOL STDCALL CryptGetDefaultProviderW (DWORD dwProvType, DWORD *pdwReserved, + DWORD dwFlags, LPWSTR pszProvName, DWORD *pcbProvName); +WINBOOL STDCALL CryptGetUserKey (HCRYPTPROV hProv, DWORD dwKeySpec, HCRYPTKEY *phUserKey); +WINBOOL STDCALL CryptHashData (HCRYPTHASH hHash, BYTE *pbData, DWORD dwDataLen, DWORD dwFlags); +WINBOOL STDCALL CryptHashSessionKey (HCRYPTHASH hHash, HCRYPTKEY hKey, DWORD dwFlags); +WINBOOL STDCALL CryptImportKey (HCRYPTPROV hProv, BYTE *pbData, DWORD dwDataLen, + HCRYPTKEY hPubKey, DWORD dwFlags, HCRYPTKEY *phKey); +WINBOOL STDCALL CryptReleaseContext (HCRYPTPROV hProv, DWORD dwFlags); +WINBOOL STDCALL CryptSignHashA (HCRYPTHASH hHash, DWORD dwKeySpec, LPCSTR sDescription, + DWORD dwFlags, BYTE *pbSignature, DWORD *pdwSigLen); +WINBOOL STDCALL CryptSignHashW (HCRYPTHASH hHash, DWORD dwKeySpec, LPCWSTR sDescription, + DWORD dwFlags, BYTE *pbSignature, DWORD *pdwSigLen); +WINBOOL STDCALL CryptSetHashParam (HCRYPTHASH hHash, DWORD dwParam, BYTE *pbData, DWORD dwFlags); +WINBOOL STDCALL CryptSetKeyParam (HCRYPTKEY hKey, DWORD dwParam, BYTE *pbData, DWORD dwFlags); +WINBOOL STDCALL CryptSetProviderA (LPCSTR pszProvName, DWORD dwProvType); +WINBOOL STDCALL CryptSetProviderW (LPCWSTR pszProvName, DWORD dwProvType); +WINBOOL STDCALL CryptSetProviderExA (LPCSTR pszProvName, DWORD dwProvType, DWORD *pdwReserved, DWORD dwFlags); +WINBOOL STDCALL CryptSetProviderExW (LPCWSTR pszProvName, DWORD dwProvType, DWORD *pdwReserved, DWORD dwFlags); +WINBOOL STDCALL CryptSetProvParam (HCRYPTPROV hProv, DWORD dwParam, BYTE *pbData, DWORD dwFlags); +WINBOOL STDCALL CryptVerifySignatureA (HCRYPTHASH hHash, BYTE *pbSignature, DWORD dwSigLen, + HCRYPTKEY hPubKey, LPCSTR sDescription, DWORD dwFlags); +WINBOOL STDCALL CryptVerifySignatureW (HCRYPTHASH hHash, BYTE *pbSignature, DWORD dwSigLen, + HCRYPTKEY hPubKey, LPCWSTR sDescription, DWORD dwFlags); +#ifndef _DISABLE_TIDENTS +#ifdef UNICODE +#define CryptAcquireContext CryptAcquireContextW +#define CryptEnumProviders CryptEnumProvidersW +#define CryptEnumProviderTypes CryptEnumProviderTypesW +#define CryptGetDefaultProvider CryptGetDefaultProviderW +#define CryptSignHash CryptSignHashW +#define CryptSetProvider CryptSetProviderW +#define CryptSetProviderEx CryptSetProviderExW +#define CryptVerifySignature CryptVerifySignatureW +#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 +#else +#define CryptAcquireContext CryptAcquireContextA +#define CryptEnumProviders CryptEnumProvidersA +#define CryptEnumProviderTypes CryptEnumProviderTypesA +#define CryptGetDefaultProvider CryptGetDefaultProviderA +#define CryptSignHash CryptSignHashA +#define CryptSetProvider CryptSetProviderA +#define CryptSetProviderEx CryptSetProviderExA +#define CryptVerifySignature CryptVerifySignatureA +#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 +#endif +#endif + +#endif diff --git a/include/windows.h b/include/windows.h index 6404819..6d10771 100644 --- a/include/windows.h +++ b/include/windows.h @@ -32,6 +32,12 @@ #ifndef _GNU_H_WINDOWS_H #define _GNU_H_WINDOWS_H +#ifdef __USE_W32API + +#include_next + +#else /* __USE_W32API */ + #ifndef max #define max(a,b) (((a) > (b)) ? (a) : (b)) #endif @@ -98,7 +104,7 @@ using Objective-C then you must use WINBOOL for Win32 operations. */ #ifndef __OBJC__ -//typedef WINBOOL BOOL; +/* typedef WINBOOL BOOL; */ #endif /* !__OBJC__ */ /* How do we get the VM page size on NT? */ @@ -165,4 +171,6 @@ #endif #endif +#endif /* !__USE_W32API */ + #endif /* _GNU_H_WINDOWS_H */ diff --git a/include/wine/commctrl.h b/include/wine/commctrl.h deleted file mode 100644 index cfaa14e..0000000 --- a/include/wine/commctrl.h +++ /dev/null @@ -1,4492 +0,0 @@ -/* - * Common controls definitions - * - * Copyright (C) the Wine project - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * 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. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef __WINE_COMMCTRL_H -#define __WINE_COMMCTRL_H - -#include "windef.h" -#include "winbase.h" -#include "wingdi.h" -#include "winuser.h" -#include "winnls.h" -#include "prsht.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define GetWindowWord GetWindowLongA - -/* Macros to map Winelib names to the correct implementation name */ -/* depending on __WINE__ and UNICODE macros. */ -/* Note that Winelib is purely Win32. */ - -#ifdef __WINE__ -# define WINELIB_NAME_AW(func) \ - func##_must_be_suffixed_with_W_or_A_in_this_context \ - func##_must_be_suffixed_with_W_or_A_in_this_context -#else /* __WINE__ */ -# ifdef UNICODE -# define WINELIB_NAME_AW(func) func##W -# else -# define WINELIB_NAME_AW(func) func##A -# endif /* UNICODE */ -#endif /* __WINE__ */ - -#ifdef __WINE__ -# define DECL_WINELIB_TYPE_AW(type) /* nothing */ -#else /* __WINE__ */ -# define DECL_WINELIB_TYPE_AW(type) typedef WINELIB_NAME_AW(type) type; -#endif /* __WINE__ */ - - - -BOOL WINAPI ShowHideMenuCtl (HWND, UINT, LPINT); -VOID WINAPI GetEffectiveClientRect (HWND, LPRECT, LPINT); -VOID WINAPI InitCommonControls (VOID); - -typedef struct tagINITCOMMONCONTROLSEX { - DWORD dwSize; - DWORD dwICC; -} INITCOMMONCONTROLSEX, *LPINITCOMMONCONTROLSEX; - -BOOL WINAPI InitCommonControlsEx (LPINITCOMMONCONTROLSEX); - -LANGID WINAPI GetMUILanguage (VOID); -VOID WINAPI InitMUILanguage (LANGID uiLang); - - -#define COMCTL32_VERSION 5 /* dll version */ - -#ifndef _WIN32_IE -#define _WIN32_IE 0x0400 -#endif - -#define ICC_LISTVIEW_CLASSES 0x00000001 /* listview, header */ -#define ICC_TREEVIEW_CLASSES 0x00000002 /* treeview, tooltips */ -#define ICC_BAR_CLASSES 0x00000004 /* toolbar, statusbar, trackbar, tooltips */ -#define ICC_TAB_CLASSES 0x00000008 /* tab, tooltips */ -#define ICC_UPDOWN_CLASS 0x00000010 /* updown */ -#define ICC_PROGRESS_CLASS 0x00000020 /* progress */ -#define ICC_HOTKEY_CLASS 0x00000040 /* hotkey */ -#define ICC_ANIMATE_CLASS 0x00000080 /* animate */ -#define ICC_WIN95_CLASSES 0x000000FF -#define ICC_DATE_CLASSES 0x00000100 /* month picker, date picker, time picker, updown */ -#define ICC_USEREX_CLASSES 0x00000200 /* comboex */ -#define ICC_COOL_CLASSES 0x00000400 /* rebar (coolbar) */ -#define ICC_INTERNET_CLASSES 0x00000800 /* IP address, ... */ -#define ICC_PAGESCROLLER_CLASS 0x00001000 /* page scroller */ -#define ICC_NATIVEFNTCTL_CLASS 0x00002000 /* native font control ???*/ - - -/* common control styles */ -#define CCS_TOP 0x00000001L -#define CCS_NOMOVEY 0x00000002L -#define CCS_BOTTOM 0x00000003L -#define CCS_NORESIZE 0x00000004L -#define CCS_NOPARENTALIGN 0x00000008L -#define CCS_ADJUSTABLE 0x00000020L -#define CCS_NODIVIDER 0x00000040L -#define CCS_VERT 0x00000080L -#define CCS_LEFT (CCS_VERT|CCS_TOP) -#define CCS_RIGHT (CCS_VERT|CCS_BOTTOM) -#define CCS_NOMOVEX (CCS_VERT|CCS_NOMOVEY) - - -/* common control shared messages */ -#define CCM_FIRST 0x2000 - -#define CCM_SETBKCOLOR (CCM_FIRST+1) /* lParam = bkColor */ -#define CCM_SETCOLORSCHEME (CCM_FIRST+2) /* lParam = COLORSCHEME struct ptr */ -#define CCM_GETCOLORSCHEME (CCM_FIRST+3) /* lParam = COLORSCHEME struct ptr */ -#define CCM_GETDROPTARGET (CCM_FIRST+4) -#define CCM_SETUNICODEFORMAT (CCM_FIRST+5) -#define CCM_GETUNICODEFORMAT (CCM_FIRST+6) -#define CCM_SETVERSION (CCM_FIRST+7) -#define CCM_GETVERSION (CCM_FIRST+8) -#define CCM_SETNOTIFYWINDOW (CCM_FIRST+9) /* wParam = hwndParent */ - - -/* common notification codes (WM_NOTIFY)*/ -#define NM_FIRST (0U- 0U) -#define NM_LAST (0U- 99U) -#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 HANDLE_WM_NOTIFY(hwnd, wParam, lParam, fn) \ - (fn)((hwnd), (int)(wParam), (NMHDR*)(lParam)) -#define FORWARD_WM_NOTIFY(hwnd, idFrom, pnmhdr, fn) \ - (LRESULT)(fn)((hwnd), WM_NOTIFY, (WPARAM)(int)(idFrom), (LPARAM)(NMHDR*)(pnmhdr)) - - -/* callback constants */ -#define LPSTR_TEXTCALLBACKA ((LPSTR)-1L) -#define LPSTR_TEXTCALLBACKW ((LPWSTR)-1L) -#define LPSTR_TEXTCALLBACK WINELIB_NAME_AW(LPSTR_TEXTCALLBACK) - -#define I_IMAGECALLBACK (-1) -#define I_IMAGENONE (-2) -#define I_INDENTCALLBACK (-1) -#define I_CHILDRENCALLBACK (-1) - -/* owner drawn types */ -#define ODT_HEADER 100 -#define ODT_TAB 101 -#define ODT_LISTVIEW 102 - -/* common notification structures */ -typedef struct tagNMTOOLTIPSCREATED -{ - NMHDR hdr; - HWND hwndToolTips; -} NMTOOLTIPSCREATED, *LPNMTOOLTIPSCREATED; - -typedef struct tagNMMOUSE -{ - NMHDR hdr; - DWORD dwItemSpec; - DWORD dwItemData; - POINT pt; - DWORD dwHitInfo; /* info where on item or control the mouse is */ -} NMMOUSE, *LPNMMOUSE; - -typedef struct tagNMOBJECTNOTIFY -{ - NMHDR hdr; - int iItem; -#ifdef __IID_DEFINED__ - const IID *piid; -#else - const void *piid; -#endif - void *pObject; - HRESULT hResult; - DWORD dwFlags; -} NMOBJECTNOTIFY, *LPNMOBJECTNOTIFY; - -typedef struct tagNMKEY -{ - NMHDR hdr; - UINT nVKey; - UINT uFlags; -} NMKEY, *LPNMKEY; - -typedef struct tagNMCHAR -{ - NMHDR hdr; - UINT ch; - DWORD dwItemPrev; /* Item previously selected */ - DWORD dwItemNext; /* Item to be selected */ -} NMCHAR, *LPNMCHAR; - -#ifndef CCSIZEOF_STRUCT -#define CCSIZEOF_STRUCT(name, member) \ - (((INT)((LPBYTE)(&((name*)0)->member)-((LPBYTE)((name*)0))))+ \ - sizeof(((name*)0)->member)) -#endif - - -/* This is only for Winelib applications. DON't use it wine itself!!! */ -#ifndef SNDMSG -#ifdef __cplusplus -#define SNDMSG ::SendMessage -#else /* __cplusplus */ -#define SNDMSG SendMessage -#endif /* __cplusplus */ -#endif /* SNDMSG */ - - -#ifdef __cplusplus -#define SNDMSGA ::SendMessageA -#define SNDMSGW ::SendMessageW -#else -#define SNDMSGA SendMessageA -#define SNDMSGW SendMessageW -#endif - -/* Custom Draw messages */ - -#define CDRF_DODEFAULT 0x0 -#define CDRF_NEWFONT 0x00000002 -#define CDRF_SKIPDEFAULT 0x00000004 -#define CDRF_NOTIFYPOSTPAINT 0x00000010 -#define CDRF_NOTIFYITEMDRAW 0x00000020 -#define CDRF_NOTIFYSUBITEMDRAW 0x00000020 -#define CDRF_NOTIFYPOSTERASE 0x00000040 -#define CDRF_NOTIFYITEMERASE 0x00000080 /* obsolete ??? */ - - -/* drawstage flags */ - -#define CDDS_PREPAINT 1 -#define CDDS_POSTPAINT 2 -#define CDDS_PREERASE 3 -#define CDDS_POSTERASE 4 - -#define CDDS_ITEM 0x00010000 -#define CDDS_ITEMPREPAINT (CDDS_ITEM | CDDS_PREPAINT) -#define CDDS_ITEMPOSTPAINT (CDDS_ITEM | CDDS_POSTPAINT) -#define CDDS_ITEMPREERASE (CDDS_ITEM | CDDS_PREERASE) -#define CDDS_ITEMPOSTERASE (CDDS_ITEM | CDDS_POSTERASE) -#define CDDS_SUBITEM 0x00020000 - -/* itemState flags */ - -#define CDIS_SELECTED 0x0001 -#define CDIS_GRAYED 0x0002 -#define CDIS_DISABLED 0x0004 -#define CDIS_CHECKED 0x0008 -#define CDIS_FOCUS 0x0010 -#define CDIS_DEFAULT 0x0020 -#define CDIS_HOT 0x0040 -#define CDIS_MARKED 0x0080 -#define CDIS_INDETERMINATE 0x0100 - - -typedef struct tagNMCUSTOMDRAWINFO -{ - NMHDR hdr; - DWORD dwDrawStage; - HDC hdc; - RECT rc; - DWORD dwItemSpec; - UINT uItemState; - LPARAM lItemlParam; -} NMCUSTOMDRAW, *LPNMCUSTOMDRAW; - -typedef struct tagNMTTCUSTOMDRAW -{ - NMCUSTOMDRAW nmcd; - UINT uDrawFlags; -} NMTTCUSTOMDRAW, *LPNMTTCUSTOMDRAW; - - - - -/* StatusWindow */ - -#define STATUSCLASSNAME16 "msctls_statusbar" -#define STATUSCLASSNAMEA "msctls_statusbar32" -#if defined(__GNUC__) -# define STATUSCLASSNAMEW (const WCHAR []){ 'm','s','c','t','l','s','_', \ - 's','t','a','t','u','s','b','a','r','3','2',0 } -#elif defined(_MSC_VER) -# define STATUSCLASSNAMEW L"msctls_statusbar32" -#else -static const WCHAR STATUSCLASSNAMEW[] = { 'm','s','c','t','l','s','_', - 's','t','a','t','u','s','b','a','r','3','2',0 }; -#endif -#define STATUSCLASSNAME WINELIB_NAME_AW(STATUSCLASSNAME) - -#define SBT_NOBORDERS 0x0100 -#define SBT_POPOUT 0x0200 -#define SBT_RTLREADING 0x0400 /* not supported */ -#define SBT_TOOLTIPS 0x0800 -#define SBT_OWNERDRAW 0x1000 - -#define SBARS_SIZEGRIP 0x0100 - -#define SB_SETTEXTA (WM_USER+1) -#define SB_SETTEXTW (WM_USER+11) -#define SB_SETTEXT WINELIB_NAME_AW(SB_SETTEXT) -#define SB_GETTEXTA (WM_USER+2) -#define SB_GETTEXTW (WM_USER+13) -#define SB_GETTEXT WINELIB_NAME_AW(SB_GETTEXT) -#define SB_GETTEXTLENGTHA (WM_USER+3) -#define SB_GETTEXTLENGTHW (WM_USER+12) -#define SB_GETTEXTLENGTH WINELIB_NAME_AW(SB_GETTEXTLENGTH) -#define SB_SETPARTS (WM_USER+4) -#define SB_SETBORDERS (WM_USER+5) -#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 SB_ISSIMPLE (WM_USER+14) -#define SB_SETICON (WM_USER+15) -#define SB_SETTIPTEXTA (WM_USER+16) -#define SB_SETTIPTEXTW (WM_USER+17) -#define SB_SETTIPTEXT WINELIB_NAME_AW(SB_SETTIPTEXT) -#define SB_GETTIPTEXTA (WM_USER+18) -#define SB_GETTIPTEXTW (WM_USER+19) -#define SB_GETTIPTEXT WINELIB_NAME_AW(SB_GETTIPTEXT) -#define SB_GETICON (WM_USER+20) -#define SB_SETBKCOLOR CCM_SETBKCOLOR /* lParam = bkColor */ -#define SB_GETUNICODEFORMAT CCM_GETUNICODEFORMAT -#define SB_SETUNICODEFORMAT CCM_SETUNICODEFORMAT - -#define SBN_FIRST (0U-880U) -#define SBN_LAST (0U-899U) -#define SBN_SIMPLEMODECHANGE (SBN_FIRST-0) - -HWND WINAPI CreateStatusWindowA (INT, LPCSTR, HWND, UINT); -HWND WINAPI CreateStatusWindowW (INT, LPCWSTR, HWND, UINT); -#define CreateStatusWindow WINELIB_NAME_AW(CreateStatusWindow) -VOID WINAPI DrawStatusTextA (HDC, LPRECT, LPCSTR, UINT); -VOID WINAPI DrawStatusTextW (HDC, LPRECT, LPCWSTR, UINT); -#define DrawStatusText WINELIB_NAME_AW(DrawStatusText) -VOID WINAPI MenuHelp (UINT, WPARAM, LPARAM, HMENU, - HINSTANCE, HWND, UINT*); - -typedef struct tagCOLORSCHEME -{ - DWORD dwSize; - COLORREF clrBtnHighlight; /* highlight color */ - COLORREF clrBtnShadow; /* shadow color */ -} COLORSCHEME, *LPCOLORSCHEME; - -/************************************************************************** - * Drag List control - */ - -typedef struct tagDRAGLISTINFO -{ - UINT uNotification; - HWND hWnd; - POINT ptCursor; -} DRAGLISTINFO, *LPDRAGLISTINFO; - -#define DL_BEGINDRAG (WM_USER+133) -#define DL_DRAGGING (WM_USER+134) -#define DL_DROPPED (WM_USER+135) -#define DL_CANCELDRAG (WM_USER+136) - -#define DL_CURSORSET 0 -#define DL_STOPCURSOR 1 -#define DL_COPYCURSOR 2 -#define DL_MOVECURSOR 3 - -#define DRAGLISTMSGSTRING TEXT("commctrl_DragListMsg") - -BOOL WINAPI MakeDragList (HWND); -VOID WINAPI DrawInsert (HWND, HWND, INT); -INT WINAPI LBItemFromPt (HWND, POINT, BOOL); - - -/* UpDown */ - -#define UPDOWN_CLASS16 "msctls_updown" -#define UPDOWN_CLASSA "msctls_updown32" -#if defined(__GNUC__) -# define UPDOWN_CLASSW (const WCHAR []){ 'm','s','c','t','l','s','_', \ - 'u','p','d','o','w','n','3','2',0 } -#elif defined(_MSC_VER) -# define UPDOWN_CLASSW L"msctls_updown32" -#else -static const WCHAR UPDOWN_CLASSW[] = { 'm','s','c','t','l','s','_', - 'u','p','d','o','w','n','3','2',0 }; -#endif -#define UPDOWN_CLASS WINELIB_NAME_AW(UPDOWN_CLASS) - -typedef struct tagUDACCEL -{ - UINT nSec; - UINT nInc; -} UDACCEL, *LPUDACCEL; - -#define UD_MAXVAL 0x7fff -#define UD_MINVAL 0x8001 - -#define UDS_WRAP 0x0001 -#define UDS_SETBUDDYINT 0x0002 -#define UDS_ALIGNRIGHT 0x0004 -#define UDS_ALIGNLEFT 0x0008 -#define UDS_AUTOBUDDY 0x0010 -#define UDS_ARROWKEYS 0x0020 -#define UDS_HORZ 0x0040 -#define UDS_NOTHOUSANDS 0x0080 -#define UDS_HOTTRACK 0x0100 - -#define UDN_FIRST (0U-721) -#define UDN_LAST (0U-740) -#define UDN_DELTAPOS (UDN_FIRST-1) - -#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) -#define UDM_SETRANGE32 (WM_USER+111) -#define UDM_GETRANGE32 (WM_USER+112) -#define UDM_SETUNICODEFORMAT CCM_SETUNICODEFORMAT -#define UDM_GETUNICODEFORMAT CCM_GETUNICODEFORMAT -#define UDM_SETPOS32 (WM_USER+113) -#define UDM_GETPOS32 (WM_USER+114) - - -#define NMUPDOWN NM_UPDOWN -#define LPNMUPDOWN LPNM_UPDOWN - -typedef struct tagNM_UPDOWN -{ - NMHDR hdr; - int iPos; - int iDelta; -} NM_UPDOWN, *LPNM_UPDOWN; - -HWND WINAPI CreateUpDownControl (DWORD, INT, INT, INT, INT, - HWND, INT, HINSTANCE, HWND, - INT, INT, INT); - -/* Progress Bar */ - -#define PROGRESS_CLASS16 "msctls_progress" -#define PROGRESS_CLASSA "msctls_progress32" -#if defined(__GNUC__) -# define PROGRESS_CLASSW (const WCHAR []){ 'm','s','c','t','l','s','_', \ - 'p','r','o','g','r','e','s','s','3','2',0 } -#elif defined(_MSC_VER) -# define PROGRESS_CLASSW L"msctls_progress32" -#else -static const WCHAR PROGRESS_CLASSW[] = { 'm','s','c','t','l','s','_', - 'p','r','o','g','r','e','s','s','3','2',0 }; -#endif -#define PROGRESS_CLASS WINELIB_NAME_AW(PROGRESS_CLASS) - -#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 (WM_USER+6) -#define PBM_GETRANGE (WM_USER+7) -#define PBM_GETPOS (WM_USER+8) -#define PBM_SETBARCOLOR (WM_USER+9) -#define PBM_SETBKCOLOR CCM_SETBKCOLOR - -#define PBS_SMOOTH 0x01 -#define PBS_VERTICAL 0x04 - -typedef struct -{ - INT iLow; - INT iHigh; -} PBRANGE, *PPBRANGE; - - -/* ImageList */ - -struct _IMAGELIST; -typedef struct _IMAGELIST *HIMAGELIST; - -#ifndef CLR_NONE -#define CLR_NONE 0xFFFFFFFF -#endif - -#ifndef CLR_DEFAULT -#define CLR_DEFAULT 0xFF000000 -#endif - -#define CLR_HILIGHT CLR_DEFAULT - -#define ILC_MASK 0x0001 -#define ILC_COLOR 0x0000 -#define ILC_COLORDDB 0x00FE -#define ILC_COLOR4 0x0004 -#define ILC_COLOR8 0x0008 -#define ILC_COLOR16 0x0010 -#define ILC_COLOR24 0x0018 -#define ILC_COLOR32 0x0020 -#define ILC_PALETTE 0x0800 /* no longer supported by M$ */ - -#define ILD_NORMAL 0x0000 -#define ILD_TRANSPARENT 0x0001 -#define ILD_BLEND25 0x0002 -#define ILD_BLEND50 0x0004 -#define ILD_MASK 0x0010 -#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 ILD_SELECTED ILD_BLEND50 -#define ILD_FOCUS ILD_BLEND25 -#define ILD_BLEND ILD_BLEND50 - -#define INDEXTOOVERLAYMASK(i) ((i)<<8) -#define INDEXTOSTATEIMAGEMASK(i) ((i)<<12) - -#define ILCF_MOVE (0x00000000) -#define ILCF_SWAP (0x00000001) - -#define ILS_NORMAL 0x0000 -#define ILS_GLOW 0x0001 -#define ILS_SHADOW 0x0002 -#define ILS_SATURATE 0x0004 -#define ILS_ALPHA 0x0008 - -typedef struct _IMAGEINFO -{ - HBITMAP hbmImage; - HBITMAP hbmMask; - INT Unused1; - INT Unused2; - RECT rcImage; -} IMAGEINFO, *LPIMAGEINFO; - - -typedef struct _IMAGELISTDRAWPARAMS -{ - DWORD cbSize; - HIMAGELIST himl; - INT i; - HDC hdcDst; - INT x; - INT y; - INT cx; - INT cy; - INT xBitmap; /* x offest from the upperleft of bitmap */ - INT yBitmap; /* y offset from the upperleft of bitmap */ - COLORREF rgbBk; - COLORREF rgbFg; - UINT fStyle; - DWORD dwRop; - DWORD fState; - DWORD Frame; - DWORD crEffect; -} IMAGELISTDRAWPARAMS, *LPIMAGELISTDRAWPARAMS; - - -INT WINAPI ImageList_Add(HIMAGELIST,HBITMAP,HBITMAP); -INT WINAPI ImageList_AddIcon (HIMAGELIST, HICON); -INT WINAPI ImageList_AddMasked(HIMAGELIST,HBITMAP,COLORREF); -BOOL WINAPI ImageList_BeginDrag(HIMAGELIST,INT,INT,INT); -BOOL WINAPI ImageList_Copy(HIMAGELIST,INT,HIMAGELIST,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); -BOOL WINAPI ImageList_DrawIndirect(IMAGELISTDRAWPARAMS*); -HIMAGELIST WINAPI ImageList_Duplicate(HIMAGELIST); -BOOL WINAPI ImageList_EndDrag(VOID); -COLORREF WINAPI ImageList_GetBkColor(HIMAGELIST); -HIMAGELIST WINAPI ImageList_GetDragImage(POINT*,POINT*); -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*); -BOOL WINAPI ImageList_GetImageRect(HIMAGELIST,INT,LPRECT); -HIMAGELIST WINAPI ImageList_LoadImageA(HINSTANCE,LPCSTR,INT,INT, - COLORREF,UINT,UINT); -HIMAGELIST WINAPI ImageList_LoadImageW(HINSTANCE,LPCWSTR,INT,INT, - COLORREF,UINT,UINT); -#define ImageList_LoadImage WINELIB_NAME_AW(ImageList_LoadImage) -HIMAGELIST WINAPI ImageList_Merge(HIMAGELIST,INT,HIMAGELIST,INT,INT,INT); -#ifdef IStream_IMETHODS -HIMAGELIST WINAPI ImageList_Read(LPSTREAM); -#endif -BOOL WINAPI ImageList_Remove(HIMAGELIST,INT); -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_SetImageCount(HIMAGELIST,INT); -BOOL WINAPI ImageList_SetOverlayImage(HIMAGELIST,INT,INT); -#ifdef IStream_IMETHODS -BOOL WINAPI ImageList_Write(HIMAGELIST, LPSTREAM); -#endif - -#ifndef __WINE__ -#define ImageList_AddIcon(himl,hicon) ImageList_ReplaceIcon(himl,-1,hicon) -#endif -#define ImageList_ExtractIcon(hi,himl,i) ImageList_GetIcon(himl,i,0) -#define ImageList_LoadBitmap(hi,lpbmp,cx,cGrow,crMask) \ - ImageList_LoadImage(hi,lpbmp,cx,cGrow,crMask,IMAGE_BITMAP,0) -#define ImageList_RemoveAll(himl) ImageList_Remove(himl,-1) - - -#ifndef WM_MOUSEHOVER -#define WM_MOUSEHOVER 0x02A1 -#define WM_MOUSELEAVE 0x02A3 -#endif - -#ifndef TME_HOVER - -#define TME_HOVER 0x00000001 -#define TME_LEAVE 0x00000002 -#define TME_QUERY 0x40000000 -#define TME_CANCEL 0x80000000 - - -#define HOVER_DEFAULT 0xFFFFFFFF - -typedef struct tagTRACKMOUSEEVENT { - DWORD cbSize; - DWORD dwFlags; - HWND hwndTrack; - DWORD dwHoverTime; -} TRACKMOUSEEVENT, *LPTRACKMOUSEEVENT; - -#endif - -BOOL -WINAPI -_TrackMouseEvent( - LPTRACKMOUSEEVENT lpEventTrack); - -/* Flat Scrollbar control */ - -#define FLATSB_CLASS16 "flatsb_class" -#define FLATSB_CLASSA "flatsb_class32" -#if defined(__GNUC__) -# define FLATSB_CLASSW (const WCHAR []){ 'f','l','a','t','s','b','_', \ - 'c','l','a','s','s','3','2',0 } -#elif defined(_MSC_VER) -# define FLATSB_CLASSW L"flatsb_class32" -#else -static const WCHAR FLATSB_CLASSW[] = { 'f','l','a','t','s','b','_', - 'c','l','a','s','s','3','2',0 }; -#endif -#define FLATSB_CLASS WINELIB_NAME_AW(FLATSB_CLASS) - -#define WSB_PROP_CYVSCROLL 0x00000001L -#define WSB_PROP_CXHSCROLL 0x00000002L -#define WSB_PROP_CYHSCROLL 0x00000004L -#define WSB_PROP_CXVSCROLL 0x00000008L -#define WSB_PROP_CXHTHUMB 0x00000010L -#define WSB_PROP_CYVTHUMB 0x00000020L -#define WSB_PROP_VBKGCOLOR 0x00000040L -#define WSB_PROP_HBKGCOLOR 0x00000080L -#define WSB_PROP_VSTYLE 0x00000100L -#define WSB_PROP_HSTYLE 0x00000200L -#define WSB_PROP_WINSTYLE 0x00000400L -#define WSB_PROP_PALETTE 0x00000800L -#define WSB_PROP_MASK 0x00000FFFL - -#define FSB_REGULAR_MODE 0 -#define FSB_ENCARTA_MODE 1 -#define FSB_FLAT_MODE 2 - - -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); -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, BOOL); -BOOL WINAPI InitializeFlatSB(HWND); -HRESULT WINAPI UninitializeFlatSB(HWND); - -/* Subclassing stuff */ -typedef LRESULT (CALLBACK *SUBCLASSPROC)(HWND, UINT, WPARAM, LPARAM, UINT_PTR, DWORD_PTR); -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); - -/* Header control */ - -#define WC_HEADER16 "SysHeader" -#define WC_HEADERA "SysHeader32" -#if defined(__GNUC__) -# define WC_HEADERW (const WCHAR []){ 'S','y','s','H','e','a','d','e','r','3','2',0 } -#elif defined(_MSC_VER) -# define WC_HEADERW L"SysHeader32" -#else -static const WCHAR WC_HEADERW[] = { 'S','y','s','H','e','a','d','e','r','3','2',0 }; -#endif -#define WC_HEADER WINELIB_NAME_AW(WC_HEADER) - -#define HDS_HORZ 0x0000 -#define HDS_BUTTONS 0x0002 -#define HDS_HOTTRACK 0x0004 -#define HDS_HIDDEN 0x0008 -#define HDS_DRAGDROP 0x0040 -#define HDS_FULLDRAG 0x0080 - -#define HDI_WIDTH 0x0001 -#define HDI_HEIGHT HDI_WIDTH -#define HDI_TEXT 0x0002 -#define HDI_FORMAT 0x0004 -#define HDI_LPARAM 0x0008 -#define HDI_BITMAP 0x0010 -#define HDI_IMAGE 0x0020 -#define HDI_DI_SETITEM 0x0040 -#define HDI_ORDER 0x0080 - -#define HDF_LEFT 0x0000 -#define HDF_RIGHT 0x0001 -#define HDF_CENTER 0x0002 -#define HDF_JUSTIFYMASK 0x0003 -#define HDF_RTLREADING 0x0004 - -#define HDF_IMAGE 0x0800 -#define HDF_BITMAP_ON_RIGHT 0x1000 -#define HDF_BITMAP 0x2000 -#define HDF_STRING 0x4000 -#define HDF_OWNERDRAW 0x8000 - -#define HHT_NOWHERE 0x0001 -#define HHT_ONHEADER 0x0002 -#define HHT_ONDIVIDER 0x0004 -#define HHT_ONDIVOPEN 0x0008 -#define HHT_ABOVE 0x0100 -#define HHT_BELOW 0x0200 -#define HHT_TORIGHT 0x0400 -#define HHT_TOLEFT 0x0800 - -#define HDM_FIRST 0x1200 -#define HDM_GETITEMCOUNT (HDM_FIRST+0) -#define HDM_INSERTITEMA (HDM_FIRST+1) -#define HDM_INSERTITEMW (HDM_FIRST+10) -#define HDM_INSERTITEM WINELIB_NAME_AW(HDM_INSERTITEM) -#define HDM_DELETEITEM (HDM_FIRST+2) -#define HDM_GETITEMA (HDM_FIRST+3) -#define HDM_GETITEMW (HDM_FIRST+11) -#define HDM_GETITEM WINELIB_NAME_AW(HDM_GETITEM) -#define HDM_SETITEMA (HDM_FIRST+4) -#define HDM_SETITEMW (HDM_FIRST+12) -#define HDM_SETITEM WINELIB_NAME_AW(HDM_SETITEM) -#define HDM_LAYOUT (HDM_FIRST+5) -#define HDM_HITTEST (HDM_FIRST+6) -#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) -#define HDM_GETUNICODEFORMAT CCM_GETUNICODEFORMAT -#define HDM_SETUNICODEFORMAT CCM_SETUNICODEFORMAT - -#define HDN_FIRST (0U-300U) -#define HDN_LAST (0U-399U) -#define HDN_ITEMCHANGINGA (HDN_FIRST-0) -#define HDN_ITEMCHANGINGW (HDN_FIRST-20) -#define HDN_ITEMCHANGING WINELIB_NAME_AW(HDN_ITEMCHANGING) -#define HDN_ITEMCHANGEDA (HDN_FIRST-1) -#define HDN_ITEMCHANGEDW (HDN_FIRST-21) -#define HDN_ITEMCHANGED WINELIB_NAME_AW(HDN_ITEMCHANGED) -#define HDN_ITEMCLICKA (HDN_FIRST-2) -#define HDN_ITEMCLICKW (HDN_FIRST-22) -#define HDN_ITEMCLICK WINELIB_NAME_AW(HDN_ITEMCLICK) -#define HDN_ITEMDBLCLICKA (HDN_FIRST-3) -#define HDN_ITEMDBLCLICKW (HDN_FIRST-23) -#define HDN_ITEMDBLCLICK WINELIB_NAME_AW(HDN_ITEMDBLCLICK) -#define HDN_DIVIDERDBLCLICKA (HDN_FIRST-5) -#define HDN_DIVIDERDBLCLICKW (HDN_FIRST-25) -#define HDN_DIVIDERDBLCLICK WINELIB_NAME_AW(HDN_DIVIDERDBLCLICK) -#define HDN_BEGINTRACKA (HDN_FIRST-6) -#define HDN_BEGINTRACKW (HDN_FIRST-26) -#define HDN_BEGINTRACK WINELIB_NAME_AW(HDN_BEGINTRACK) -#define HDN_ENDTRACKA (HDN_FIRST-7) -#define HDN_ENDTRACKW (HDN_FIRST-27) -#define HDN_ENDTRACK WINELIB_NAME_AW(HDN_ENDTRACK) -#define HDN_TRACKA (HDN_FIRST-8) -#define HDN_TRACKW (HDN_FIRST-28) -#define HDN_TRACK WINELIB_NAME_AW(HDN_TRACK) -#define HDN_GETDISPINFOA (HDN_FIRST-9) -#define HDN_GETDISPINFOW (HDN_FIRST-29) -#define HDN_GETDISPINFO WINELIB_NAME_AW(HDN_GETDISPINFO) -#define HDN_BEGINDRAG (HDN_FIRST-10) -#define HDN_ENDDRAG (HDN_FIRST-11) - -typedef struct _HD_LAYOUT -{ - RECT *prc; - WINDOWPOS *pwpos; -} HDLAYOUT, *LPHDLAYOUT; - -#define HD_LAYOUT HDLAYOUT - -typedef struct _HD_ITEMA -{ - UINT mask; - INT cxy; - LPSTR pszText; - HBITMAP hbm; - INT cchTextMax; - INT fmt; - LPARAM lParam; - INT iImage; - INT iOrder; - UINT type; - LPVOID pvFilter; -} HDITEMA, *LPHDITEMA; - -typedef struct _HD_ITEMW -{ - UINT mask; - INT cxy; - LPWSTR pszText; - HBITMAP hbm; - INT cchTextMax; - INT fmt; - LPARAM lParam; - INT iImage; - INT iOrder; - UINT type; - LPVOID pvFilter; -} HDITEMW, *LPHDITEMW; - -#define HDITEM WINELIB_NAME_AW(HDITEM) -#define LPHDITEM WINELIB_NAME_AW(LPHDITEM) -#define HD_ITEM HDITEM - -#define HDITEM_V1_SIZEA CCSIZEOF_STRUCT(HDITEMA, lParam) -#define HDITEM_V1_SIZEW CCSIZEOF_STRUCT(HDITEMW, lParam) -#define HDITEM_V1_SIZE WINELIB_NAME_AW(HDITEM_V1_SIZE) - -typedef struct _HD_HITTESTINFO -{ - POINT pt; - UINT flags; - INT iItem; -} HDHITTESTINFO, *LPHDHITTESTINFO; - -#define HD_HITTESTINFO HDHITTESTINFO - -typedef struct tagNMHEADERA -{ - NMHDR hdr; - INT iItem; - INT iButton; - HDITEMA *pitem; -} NMHEADERA, *LPNMHEADERA; - -typedef struct tagNMHEADERW -{ - NMHDR hdr; - INT iItem; - INT iButton; - HDITEMW *pitem; -} NMHEADERW, *LPNMHEADERW; - -#define NMHEADER WINELIB_NAME_AW(NMHEADER) -#define LPNMHEADER WINELIB_NAME_AW(LPNMHEADER) -#define HD_NOTIFY NMHEADER - -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; - -#define NMHDDISPINFO WINELIB_NAME_AW(NMHDDISPINFO) -#define LPNMHDDISPINFO WINELIB_NAME_AW(LPNMHDDISPINFO) - -#define Header_GetItemCount(hwndHD) \ - (INT)SNDMSGA((hwndHD),HDM_GETITEMCOUNT,0,0L) -#define Header_InsertItemA(hwndHD,i,phdi) \ - (INT)SNDMSGA((hwndHD),HDM_INSERTITEMA,(WPARAM)(INT)(i),(LPARAM)(const HDITEMA*)(phdi)) -#define Header_InsertItemW(hwndHD,i,phdi) \ - (INT)SNDMSGW((hwndHD),HDM_INSERTITEMW,(WPARAM)(INT)(i),(LPARAM)(const HDITEMW*)(phdi)) -#define Header_InsertItem WINELIB_NAME_AW(Header_InsertItem) -#define Header_DeleteItem(hwndHD,i) \ - (BOOL)SNDMSGA((hwndHD),HDM_DELETEITEM,(WPARAM)(INT)(i),0L) -#define Header_GetItemA(hwndHD,i,phdi) \ - (BOOL)SNDMSGA((hwndHD),HDM_GETITEMA,(WPARAM)(INT)(i),(LPARAM)(HDITEMA*)(phdi)) -#define Header_GetItemW(hwndHD,i,phdi) \ - (BOOL)SNDMSGW((hwndHD),HDM_GETITEMW,(WPARAM)(INT)(i),(LPARAM)(HDITEMW*)(phdi)) -#define Header_GetItem WINELIB_NAME_AW(Header_GetItem) -#define Header_SetItemA(hwndHD,i,phdi) \ - (BOOL)SNDMSGA((hwndHD),HDM_SETITEMA,(WPARAM)(INT)(i),(LPARAM)(const HDITEMA*)(phdi)) -#define Header_SetItemW(hwndHD,i,phdi) \ - (BOOL)SNDMSGW((hwndHD),HDM_SETITEMW,(WPARAM)(INT)(i),(LPARAM)(const HDITEMW*)(phdi)) -#define Header_SetItem WINELIB_NAME_AW(Header_SetItem) -#define Header_Layout(hwndHD,playout) \ - (BOOL)SNDMSGA((hwndHD),HDM_LAYOUT,0,(LPARAM)(LPHDLAYOUT)(playout)) -#define Header_GetItemRect(hwnd,iItem,lprc) \ - (BOOL)SNDMSGA((hwnd),HDM_GETITEMRECT,(WPARAM)iItem,(LPARAM)lprc) -#define Header_SetImageList(hwnd,himl) \ - (HIMAGELIST)SNDMSGA((hwnd),HDM_SETIMAGELIST,0,(LPARAM)himl) -#define Header_GetImageList(hwnd) \ - (HIMAGELIST)SNDMSGA((hwnd),HDM_GETIMAGELIST,0,0) -#define Header_OrderToIndex(hwnd,i) \ - (INT)SNDMSGA((hwnd),HDM_ORDERTOINDEX,(WPARAM)i,0) -#define Header_CreateDragImage(hwnd,i) \ - (HIMAGELIST)SNDMSGA((hwnd),HDM_CREATEDRAGIMAGE,(WPARAM)i,0) -#define Header_GetOrderArray(hwnd,iCount,lpi) \ - (BOOL)SNDMSGA((hwnd),HDM_GETORDERARRAY,(WPARAM)iCount,(LPARAM)lpi) -#define Header_SetOrderArray(hwnd,iCount,lpi) \ - (BOOL)SNDMSGA((hwnd),HDM_SETORDERARRAY,(WPARAM)iCount,(LPARAM)lpi) -#define Header_SetHotDivider(hwnd,fPos,dw) \ - (INT)SNDMSGA((hwnd),HDM_SETHOTDIVIDER,(WPARAM)fPos,(LPARAM)dw) -#define Header_SetUnicodeFormat(hwnd,fUnicode) \ - (BOOL)SNDMSGA((hwnd),HDM_SETUNICODEFORMAT,(WPARAM)(fUnicode),0) -#define Header_GetUnicodeFormat(hwnd) \ - (BOOL)SNDMSGA((hwnd),HDM_GETUNICODEFORMAT,0,0) - - -/* Toolbar */ - -#define TOOLBARCLASSNAME16 "ToolbarWindow" -#define TOOLBARCLASSNAMEA "ToolbarWindow32" -#if defined(__GNUC__) -# define TOOLBARCLASSNAMEW (const WCHAR []){ 'T','o','o','l','b','a','r', \ - 'W','i','n','d','o','w','3','2',0 } -#elif defined(_MSC_VER) -# define TOOLBARCLASSNAMEW L"ToolbarWindow32" -#else -static const WCHAR TOOLBARCLASSNAMEW[] = { 'T','o','o','l','b','a','r', - 'W','i','n','d','o','w','3','2',0 }; -#endif -#define TOOLBARCLASSNAME WINELIB_NAME_AW(TOOLBARCLASSNAME) - -#define CMB_MASKED 0x02 - -#define TBSTATE_CHECKED 0x01 -#define TBSTATE_PRESSED 0x02 -#define TBSTATE_ENABLED 0x04 -#define TBSTATE_HIDDEN 0x08 -#define TBSTATE_INDETERMINATE 0x10 -#define TBSTATE_WRAP 0x20 -#define TBSTATE_ELLIPSES 0x40 -#define TBSTATE_MARKED 0x80 - - -/* as of _WIN32_IE >= 0x0500 the following symbols are obsolete, - * "everyone" should use the BTNS_... stuff below - */ -#define TBSTYLE_BUTTON 0x00 -#define TBSTYLE_SEP 0x01 -#define TBSTYLE_CHECK 0x02 -#define TBSTYLE_GROUP 0x04 -#define TBSTYLE_CHECKGROUP (TBSTYLE_GROUP | TBSTYLE_CHECK) -#define TBSTYLE_DROPDOWN 0x08 -#define TBSTYLE_AUTOSIZE 0x10 -#define TBSTYLE_NOPREFIX 0x20 -#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_SHOWTEXT 0x40 /* ignored unless TBSTYLE_EX_MIXEDB set */ -#define BTNS_WHOLEDROPDOWN 0x80 /* draw dropdown arrow, but without split arrow section */ - -#define TBSTYLE_TOOLTIPS 0x0100 -#define TBSTYLE_WRAPABLE 0x0200 -#define TBSTYLE_ALTDRAG 0x0400 -#define TBSTYLE_FLAT 0x0800 -#define TBSTYLE_LIST 0x1000 -#define TBSTYLE_CUSTOMERASE 0x2000 -#define TBSTYLE_REGISTERDROP 0x4000 -#define TBSTYLE_TRANSPARENT 0x8000 -#define TBSTYLE_EX_DRAWDDARROWS 0x00000001 -#define TBSTYLE_EX_UNDOC1 0x00000004 /* similar to TBSTYLE_WRAPABLE */ -#define TBSTYLE_EX_MIXEDBUTTONS 0x00000008 -#define TBSTYLE_EX_HIDECLIPPEDBUTTONS 0x00000010 /* don't show partially obscured buttons */ -#define TBSTYLE_EX_DOUBLEBUFFER 0x00000080 /* Double Buffer the toolbar ??? */ - -#define TBIF_IMAGE 0x00000001 -#define TBIF_TEXT 0x00000002 -#define TBIF_STATE 0x00000004 -#define TBIF_STYLE 0x00000008 -#define TBIF_LPARAM 0x00000010 -#define TBIF_COMMAND 0x00000020 -#define TBIF_SIZE 0x00000040 - -#define TBBF_LARGE 0x0001 - -#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) -#define TB_MARKBUTTON (WM_USER+6) -#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) -#define TB_ISBUTTONHIGHLIGHTED (WM_USER+14) -#define TB_SETSTATE (WM_USER+17) -#define TB_GETSTATE (WM_USER+18) -#define TB_ADDBITMAP (WM_USER+19) -#define TB_ADDBUTTONSA (WM_USER+20) -#define TB_ADDBUTTONSW (WM_USER+68) -#define TB_ADDBUTTONS WINELIB_NAME_AW(TB_ADDBUTTONS) -#define TB_HITTEST (WM_USER+69) -#define TB_INSERTBUTTONA (WM_USER+21) -#define TB_INSERTBUTTONW (WM_USER+67) -#define TB_INSERTBUTTON WINELIB_NAME_AW(TB_INSERTBUTTON) -#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_SAVERESTORE WINELIB_NAME_AW(TB_SAVERESTORE) -#define TB_CUSTOMIZE (WM_USER+27) -#define TB_ADDSTRINGA (WM_USER+28) -#define TB_ADDSTRINGW (WM_USER+77) -#define TB_ADDSTRING WINELIB_NAME_AW(TB_ADDSTRING) -#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_GETBUTTONTEXT WINELIB_NAME_AW(TB_GETBUTTONTEXT) -#define TB_REPLACEBITMAP (WM_USER+46) -#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) /* wParam is the Cmd instead of index */ -#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) -#define TB_GETOBJECT (WM_USER+62) -#define TB_GETBUTTONINFOW (WM_USER+63) -#define TB_GETBUTTONINFOA (WM_USER+65) -#define TB_GETBUTTONINFO WINELIB_NAME_AW(TB_GETBUTTONINFO) -#define TB_SETBUTTONINFOW (WM_USER+64) -#define TB_SETBUTTONINFOA (WM_USER+66) -#define TB_SETBUTTONINFO WINELIB_NAME_AW(TB_SETBUTTONINFO) -#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_MAPACCELERATORW (WM_USER+90) -#define TB_MAPACCELERATOR WINELIB_NAME_AW(TB_MAPACCELERATOR) -#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_SETCOLORSCHEME CCM_SETCOLORSCHEME -#define TB_GETCOLORSCHEME CCM_GETCOLORSCHEME -#define TB_SETUNICODEFORMAT CCM_SETUNICODEFORMAT -#define TB_GETUNICODEFORMAT CCM_GETUNICODEFORMAT -#define TB_GETSTRINGW (WM_USER+91) -#define TB_GETSTRINGA (WM_USER+92) -#define TB_GETSTRING WINELIB_NAME_AW(TB_GETSTRING) - -/* undocumented messages in Toolbar */ -#define TB_UNKWN45D (WM_USER+93) -#define TB_UNKWN45E (WM_USER+94) -#define TB_UNKWN460 (WM_USER+96) -#define TB_UNKWN463 (WM_USER+99) -#define TB_UNKWN464 (WM_USER+100) - - -#define TBN_FIRST (0U-700U) -#define TBN_LAST (0U-720U) -#define TBN_GETBUTTONINFOA (TBN_FIRST-0) -#define TBN_GETBUTTONINFOW (TBN_FIRST-20) -#define TBN_GETBUTTONINFO WINELIB_NAME_AW(TBN_GETBUTTONINFO) -#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) -#define TBN_DROPDOWN (TBN_FIRST-10) -#define TBN_GETOBJECT (TBN_FIRST-12) -#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_GETDISPINFO WINELIB_NAME_AW(TBN_GETDISPINFO) -#define TBN_GETINFOTIPA (TBN_FIRST-18) -#define TBN_GETINFOTIPW (TBN_FIRST-19) -#define TBN_GETINFOTIP WINELIB_NAME_AW(TBN_GETINFOTIP) -#define TBN_INITCUSTOMIZE (TBN_FIRST-23) -#define TBNRF_HIDEHELP 0x00000001 - - -/* Return values from TBN_DROPDOWN */ -#define TBDDRET_DEFAULT 0 -#define TBDDRET_NODEFAULT 1 -#define TBDDRET_TREATPRESSED 2 - -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; -} NMTBCUSTOMDRAW, *LPNMTBCUSTOMDRAW; - -/* return flags for Toolbar NM_CUSTOMDRAW notifications */ -#define TBCDRF_NOEDGES 0x00010000 /* Don't draw button edges */ -#define TBCDRF_HILITEHOTTRACK 0x00020000 /* Use color of the button bkgnd */ - /* when hottracked */ -#define TBCDRF_NOOFFSET 0x00040000 /* No offset button if pressed */ -#define TBCDRF_NOMARK 0x00080000 /* Don't draw default highlight */ - /* for TBSTATE_MARKED */ -#define TBCDRF_NOETCHEDEFFECT 0x00100000 /* No etched effect for */ - /* disabled items */ -#define TBCDRF_BLENDICON 0x00200000 /* ILD_BLEND50 on the icon image */ -#define TBCDRF_NOBACKGROUND 0x00400000 /* ILD_BLEND50 on the icon image */ - - -/* This is just for old CreateToolbar. */ -/* Don't use it in new programs. */ -typedef struct _OLDTBBUTTON { - INT iBitmap; - INT idCommand; - BYTE fsState; - BYTE fsStyle; - BYTE bReserved[2]; - DWORD dwData; -} OLDTBBUTTON, *POLDTBBUTTON, *LPOLDTBBUTTON; -typedef const OLDTBBUTTON *LPCOLDTBBUTTON; - - -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; - - -typedef struct _COLORMAP { - COLORREF from; - COLORREF to; -} COLORMAP, *LPCOLORMAP; - - -typedef struct tagTBADDBITMAP { - HINSTANCE hInst; - UINT nID; -} TBADDBITMAP, *LPTBADDBITMAP; - -#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 -#define IDB_HIST_SMALL_COLOR 8 -#define IDB_HIST_LARGE_COLOR 9 - -#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 VIEW_VIEWMENU 12 - -#define HIST_BACK 0 -#define HIST_FORWARD 1 -#define HIST_FAVORITES 2 -#define HIST_ADDTOFAVORITES 3 -#define HIST_VIEWTREE 4 - -typedef struct tagTBSAVEPARAMSA { - HKEY hkr; - LPCSTR pszSubKey; - LPCSTR pszValueName; -} TBSAVEPARAMSA, *LPTBSAVEPARAMSA; - -typedef struct tagTBSAVEPARAMSW { - HKEY hkr; - LPCWSTR pszSubKey; - LPCWSTR pszValueName; -} TBSAVEPARAMSW, *LPTBSAVEPARAMSW; - -#define TBSAVEPARAMS WINELIB_NAME_AW(TBSAVEPARAMS) -#define LPTBSAVEPARAMS WINELIB_NAME_AW(LPTBSAVEPARAMS) - -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; - -#define TBBUTTONINFO WINELIB_NAME_AW(TBBUTTONINFO) -#define LPTBBUTTONINFO WINELIB_NAME_AW(LPTBBUTTONINFO) - -typedef struct tagNMTBHOTITEM -{ - NMHDR hdr; - int idOld; - int idNew; - DWORD dwFlags; -} NMTBHOTITEM, *LPNMTBHOTITEM; - -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; - -#define NMTBGETINFOTIP WINELIB_NAME_AW(NMTBGETINFOFTIP) -#define LPNMTBGETINFOTIP WINELIB_NAME_AW(LPNMTBGETINFOTIP) - -typedef struct -{ - NMHDR hdr; - DWORD dwMask; - int idCommand; - DWORD lParam; - int iImage; - LPSTR pszText; - int cchText; -} NMTBDISPINFOA, *LPNMTBDISPINFOA; - -typedef struct -{ - NMHDR hdr; - DWORD dwMask; - int idCommand; - DWORD lParam; - int iImage; - LPWSTR pszText; - int cchText; -} NMTBDISPINFOW, *LPNMTBDISPINFOW; - -#define NMTBDISPINFO WINELIB_NAME_AW(NMTBDISPINFO) -#define LPNMTBDISPINFO WINELIB_NAME_AW(LPNMTBDISPINFO) - -/* contents of dwMask in the NMTBDISPINFO structure */ -#define TBNF_IMAGE 0x00000001 -#define TBNF_TEXT 0x00000002 -#define TBNF_DI_SETITEM 0x10000000 - - -typedef struct tagNMTOOLBARA -{ - NMHDR hdr; - INT iItem; - TBBUTTON tbButton; - INT cchText; - LPSTR pszText; - RECT rcButton; /* Version 5.80 */ -} NMTOOLBARA, *LPNMTOOLBARA, TBNOTIFYA, *LPTBNOTIFYA; - -typedef struct tagNMTOOLBARW -{ - NMHDR hdr; - INT iItem; - TBBUTTON tbButton; - INT cchText; - LPWSTR pszText; - RECT rcButton; /* Version 5.80 */ -} NMTOOLBARW, *LPNMTOOLBARW, TBNOTIFYW, *LPTBNOTIFYW; - -#define NMTOOLBAR WINELIB_NAME_AW(NMTOOLBAR) -#define LPNMTOOLBAR WINELIB_NAME_AW(LPNMTOOLBAR) -#define TBNOTIFY WINELIB_NAME_AW(TBNOTIFY) -#define LPTBNOTIFY WINELIB_NAME_AW(LPTBNOTIFY) - -typedef struct -{ - HINSTANCE hInstOld; - UINT nIDOld; - HINSTANCE hInstNew; - UINT nIDNew; - INT nButtons; -} TBREPLACEBITMAP, *LPTBREPLACEBITMAP; - -#define HICF_OTHER 0x00000000 -#define HICF_MOUSE 0x00000001 /* Triggered by mouse */ -#define HICF_ARROWKEYS 0x00000002 /* Triggered by arrow keys */ -#define HICF_ACCELERATOR 0x00000004 /* Triggered by accelerator */ -#define HICF_DUPACCEL 0x00000008 /* This accelerator is not unique */ -#define HICF_ENTERING 0x00000010 /* idOld is invalid */ -#define HICF_LEAVING 0x00000020 /* idNew is invalid */ -#define HICF_RESELECT 0x00000040 /* hot item reselected */ -#define HICF_LMOUSE 0x00000080 /* left mouse button selected */ -#define HICF_TOGGLEDROPDOWN 0x00000100 /* Toggle button's dropdown state */ - -typedef struct -{ - int iButton; - DWORD dwFlags; -} TBINSERTMARK, *LPTBINSERTMARK; -#define TBIMHT_AFTER 0x00000001 /* TRUE = insert After iButton, otherwise before */ -#define TBIMHT_BACKGROUND 0x00000002 /* TRUE if and only if missed buttons completely */ - -HWND WINAPI -CreateToolbar(HWND, DWORD, UINT, INT, HINSTANCE, - UINT, LPCOLDTBBUTTON, INT); - -HWND WINAPI -CreateToolbarEx(HWND, DWORD, UINT, INT, - HINSTANCE, UINT, LPCTBBUTTON, - INT, INT, INT, INT, INT, UINT); - -HBITMAP WINAPI -CreateMappedBitmap (HINSTANCE, INT, UINT, LPCOLORMAP, INT); - - -/* Tool tips */ - -#define TOOLTIPS_CLASS16 "tooltips_class" -#define TOOLTIPS_CLASSA "tooltips_class32" -#if defined(__GNUC__) -# define TOOLTIPS_CLASSW (const WCHAR []){ 't','o','o','l','t','i','p','s','_', \ - 'c','l','a','s','s','3','2',0 } -#elif defined(_MSC_VER) -# define TOOLTIPS_CLASSW L"tooltips_class32" -#else -static const WCHAR TOOLTIPS_CLASSW[] = { 't','o','o','l','t','i','p','s','_', - 'c','l','a','s','s','3','2',0 }; -#endif -#define TOOLTIPS_CLASS WINELIB_NAME_AW(TOOLTIPS_CLASS) - -#define INFOTIPSIZE 1024 - -#define TTS_ALWAYSTIP 0x01 -#define TTS_NOPREFIX 0x02 - -#define TTF_IDISHWND 0x0001 -#define TTF_CENTERTIP 0x0002 -#define TTF_RTLREADING 0x0004 -#define TTF_SUBCLASS 0x0010 -#define TTF_TRACK 0x0020 -#define TTF_ABSOLUTE 0x0080 -#define TTF_TRANSPARENT 0x0100 -#define TTF_DI_SETITEM 0x8000 /* valid only on the TTN_NEEDTEXT callback */ - - -#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_ADDTOOL WINELIB_NAME_AW(TTM_ADDTOOL) -#define TTM_DELTOOLA (WM_USER+5) -#define TTM_DELTOOLW (WM_USER+51) -#define TTM_DELTOOL WINELIB_NAME_AW(TTM_DELTOOL) -#define TTM_NEWTOOLRECTA (WM_USER+6) -#define TTM_NEWTOOLRECTW (WM_USER+52) -#define TTM_NEWTOOLRECT WINELIB_NAME_AW(TTM_NEWTOOLRECT) -#define TTM_RELAYEVENT (WM_USER+7) -#define TTM_GETTOOLINFOA (WM_USER+8) -#define TTM_GETTOOLINFOW (WM_USER+53) -#define TTM_GETTOOLINFO WINELIB_NAME_AW(TTM_GETTOOLINFO) -#define TTM_SETTOOLINFOA (WM_USER+9) -#define TTM_SETTOOLINFOW (WM_USER+54) -#define TTM_SETTOOLINFO WINELIB_NAME_AW(TTM_SETTOOLINFO) -#define TTM_HITTESTA (WM_USER+10) -#define TTM_HITTESTW (WM_USER+55) -#define TTM_HITTEST WINELIB_NAME_AW(TTM_HITTEST) -#define TTM_GETTEXTA (WM_USER+11) -#define TTM_GETTEXTW (WM_USER+56) -#define TTM_GETTEXT WINELIB_NAME_AW(TTM_GETTEXT) -#define TTM_UPDATETIPTEXTA (WM_USER+12) -#define TTM_UPDATETIPTEXTW (WM_USER+57) -#define TTM_UPDATETIPTEXT WINELIB_NAME_AW(TTM_UPDATETIPTEXT) -#define TTM_GETTOOLCOUNT (WM_USER+13) -#define TTM_ENUMTOOLSA (WM_USER+14) -#define TTM_ENUMTOOLSW (WM_USER+58) -#define TTM_ENUMTOOLS WINELIB_NAME_AW(TTM_ENUMTOOLS) -#define TTM_GETCURRENTTOOLA (WM_USER+15) -#define TTM_GETCURRENTTOOLW (WM_USER+59) -#define TTM_GETCURRENTTOOL WINELIB_NAME_AW(TTM_GETCURRENTTOOL) -#define TTM_WINDOWFROMPOINT (WM_USER+16) -#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) -#define TTM_UPDATE (WM_USER+29) -#define TTM_GETBUBBLESIZE (WM_USER+30) - - -#define TTN_FIRST (0U-520U) -#define TTN_LAST (0U-549U) -#define TTN_GETDISPINFOA (TTN_FIRST-0) -#define TTN_GETDISPINFOW (TTN_FIRST-10) -#define TTN_GETDISPINFO WINELIB_NAME_AW(TTN_GETDISPINFO) -#define TTN_SHOW (TTN_FIRST-1) -#define TTN_POP (TTN_FIRST-2) - -#define TTN_NEEDTEXT TTN_GETDISPINFO -#define TTN_NEEDTEXTA TTN_GETDISPINFOA -#define TTN_NEEDTEXTW TTN_GETDISPINFOW - -typedef struct tagTOOLINFOA { - UINT cbSize; - UINT uFlags; - HWND hwnd; - UINT uId; - RECT rect; - HINSTANCE hinst; - LPSTR lpszText; - LPARAM lParam; -} TTTOOLINFOA, *LPTOOLINFOA, *PTOOLINFOA, *LPTTTOOLINFOA; - -typedef struct tagTOOLINFOW { - UINT cbSize; - UINT uFlags; - HWND hwnd; - UINT uId; - RECT rect; - HINSTANCE hinst; - LPWSTR lpszText; - LPARAM lParam; -} TTTOOLINFOW, *LPTOOLINFOW, *PTOOLINFOW, *LPTTTOOLINFOW; - -#define TTTOOLINFO WINELIB_NAME_AW(TTTOOLINFO) -#define TOOLINFO WINELIB_NAME_AW(TTTOOLINFO) -#define PTOOLINFO WINELIB_NAME_AW(PTOOLINFO) -#define LPTTTOOLINFO WINELIB_NAME_AW(LPTTTOOLINFO) -#define LPTOOLINFO WINELIB_NAME_AW(LPTOOLINFO) - -#define TTTOOLINFO_V1_SIZEA CCSIZEOF_STRUCT(TTTOOLINFOA, lpszText) -#define TTTOOLINFO_V1_SIZEW CCSIZEOF_STRUCT(TTTOOLINFOW, lpszText) -#define TTTOOLINFO_V1_SIZE WINELIB_NAME_AW(TTTOOLINFO_V1_SIZE) - -typedef struct _TT_HITTESTINFOA -{ - HWND hwnd; - POINT pt; - TTTOOLINFOA ti; -} TTHITTESTINFOA, *LPTTHITTESTINFOA; -#define LPHITTESTINFOA LPTTHITTESTINFOA - -typedef struct _TT_HITTESTINFOW -{ - HWND hwnd; - POINT pt; - TTTOOLINFOW ti; -} TTHITTESTINFOW, *LPTTHITTESTINFOW; -#define LPHITTESTINFOW LPTTHITTESTINFOW - -#define TTHITTESTINFO WINELIB_NAME_AW(TTHITTESTINFO) -#define LPTTHITTESTINFO WINELIB_NAME_AW(LPTTHITTESTINFO) -#define LPHITTESTINFO WINELIB_NAME_AW(LPHITTESTINFO) - -typedef struct tagNMTTDISPINFOA -{ - NMHDR hdr; - LPSTR lpszText; - CHAR szText[80]; - HINSTANCE hinst; - UINT uFlags; - LPARAM lParam; -} NMTTDISPINFOA, *LPNMTTDISPINFOA; - -typedef struct tagNMTTDISPINFOW -{ - NMHDR hdr; - LPWSTR lpszText; - WCHAR szText[80]; - HINSTANCE hinst; - UINT uFlags; - LPARAM lParam; -} NMTTDISPINFOW, *LPNMTTDISPINFOW; - -#define NMTTDISPINFO WINELIB_NAME_AW(NMTTDISPINFO) -#define LPNMTTDISPINFO WINELIB_NAME_AW(LPNMTTDISPINFO) - -#define NMTTDISPINFO_V1_SIZEA CCSIZEOF_STRUCT(NMTTDISPINFOA, uFlags) -#define NMTTDISPINFO_V1_SIZEW CCSIZEOF_STRUCT(NMTTDISPINFOW, uFlags) -#define NMTTDISPINFO_V1_SIZE WINELIB_NAME_AW(NMTTDISPINFO_V1_SIZE) - -#define TOOLTIPTEXTW NMTTDISPINFOW -#define TOOLTIPTEXTA NMTTDISPINFOA -#define TOOLTIPTEXT NMTTDISPINFO -#define LPTOOLTIPTEXTW LPNMTTDISPINFOW -#define LPTOOLTIPTEXTA LPNMTTDISPINFOA -#define LPTOOLTIPTEXT LPNMTTDISPINFO - - -/* Rebar control */ - -#define REBARCLASSNAME16 "ReBarWindow" -#define REBARCLASSNAMEA "ReBarWindow32" -#if defined(__GNUC__) -# define REBARCLASSNAMEW (const WCHAR []){ 'R','e','B','a','r', \ - 'W','i','n','d','o','w','3','2',0 } -#elif defined(_MSC_VER) -# define REBARCLASSNAMEW L"ReBarWindow32" -#else -static const WCHAR REBARCLASSNAMEW[] = { 'R','e','B','a','r', - 'W','i','n','d','o','w','3','2',0 }; -#endif -#define REBARCLASSNAME WINELIB_NAME_AW(REBARCLASSNAME) - -#define RBS_TOOLTIPS 0x0100 -#define RBS_VARHEIGHT 0x0200 -#define RBS_BANDBORDERS 0x0400 -#define RBS_FIXEDORDER 0x0800 -#define RBS_REGISTERDROP 0x1000 -#define RBS_AUTOSIZE 0x2000 -#define RBS_VERTICALGRIPPER 0x4000 -#define RBS_DBLCLKTOGGLE 0x8000 - -#define RBIM_IMAGELIST 0x00000001 - -#define RBBIM_STYLE 0x00000001 -#define RBBIM_COLORS 0x00000002 -#define RBBIM_TEXT 0x00000004 -#define RBBIM_IMAGE 0x00000008 -#define RBBIM_CHILD 0x00000010 -#define RBBIM_CHILDSIZE 0x00000020 -#define RBBIM_SIZE 0x00000040 -#define RBBIM_BACKGROUND 0x00000080 -#define RBBIM_ID 0x00000100 -#define RBBIM_IDEALSIZE 0x00000200 -#define RBBIM_LPARAM 0x00000400 -#define RBBIM_HEADERSIZE 0x00000800 - -#define RBBS_BREAK 0x00000001 -#define RBBS_FIXEDSIZE 0x00000002 -#define RBBS_CHILDEDGE 0x00000004 -#define RBBS_HIDDEN 0x00000008 -#define RBBS_NOVERT 0x00000010 -#define RBBS_FIXEDBMP 0x00000020 -#define RBBS_VARIABLEHEIGHT 0x00000040 -#define RBBS_GRIPPERALWAYS 0x00000080 -#define RBBS_NOGRIPPER 0x00000100 - -#define RBNM_ID 0x00000001 -#define RBNM_STYLE 0x00000002 -#define RBNM_LPARAM 0x00000004 - -#define RBHT_NOWHERE 0x0001 -#define RBHT_CAPTION 0x0002 -#define RBHT_CLIENT 0x0003 -#define RBHT_GRABBER 0x0004 - -#define RB_INSERTBANDA (WM_USER+1) -#define RB_INSERTBANDW (WM_USER+10) -#define RB_INSERTBAND WINELIB_NAME_AW(RB_INSERTBAND) -#define RB_DELETEBAND (WM_USER+2) -#define RB_GETBARINFO (WM_USER+3) -#define RB_SETBARINFO (WM_USER+4) -#define RB_GETBANDINFO (WM_USER+5) /* just for compatibility */ -#define RB_SETBANDINFOA (WM_USER+6) -#define RB_SETBANDINFOW (WM_USER+11) -#define RB_SETBANDINFO WINELIB_NAME_AW(RB_SETBANDINFO) -#define RB_SETPARENT (WM_USER+7) -#define RB_HITTEST (WM_USER+8) -#define RB_GETRECT (WM_USER+9) -#define RB_GETBANDCOUNT (WM_USER+12) -#define RB_GETROWCOUNT (WM_USER+13) -#define RB_GETROWHEIGHT (WM_USER+14) -#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_GETBANDINFO16 WINELIB_NAME_AW(RB_GETBANDINFO16) -#define RB_MINIMIZEBAND (WM_USER+30) -#define RB_MAXIMIZEBAND (WM_USER+31) -#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_GETDROPTARGET CCM_GETDROPTARGET -#define RB_SETCOLORSCHEME CCM_SETCOLORSCHEME -#define RB_GETCOLORSCHEME CCM_GETCOLORSCHEME -#define RB_SETUNICODEFORMAT CCM_SETUNICODEFORMAT -#define RB_GETUNICODEFORMAT CCM_GETUNICODEFORMAT - -#define RBN_FIRST (0U-831U) -#define RBN_LAST (0U-859U) -#define RBN_HEIGHTCHANGE (RBN_FIRST-0) -#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) - -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; - UINT cyChild; - UINT cyMaxChild; - UINT cyIntegral; - UINT cxIdeal; - LPARAM lParam; - UINT cxHeader; -} REBARBANDINFOA, *LPREBARBANDINFOA; - -typedef REBARBANDINFOA const *LPCREBARBANDINFOA; - -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; - UINT cyChild; - UINT cyMaxChild; - UINT cyIntegral; - UINT cxIdeal; - LPARAM lParam; - UINT cxHeader; -} REBARBANDINFOW, *LPREBARBANDINFOW; - -typedef REBARBANDINFOW const *LPCREBARBANDINFOW; - -#define REBARBANDINFO WINELIB_NAME_AW(REBARBANDINFO) -#define LPREBARBANDINFO WINELIB_NAME_AW(LPREBARBANDINFO) -#define LPCREBARBANDINFO WINELIB_NAME_AW(LPCREBARBANDINFO) - -#define REBARBANDINFO_V3_SIZEA CCSIZEOF_STRUCT(REBARBANDINFOA, wID) -#define REBARBANDINFO_V3_SIZEW CCSIZEOF_STRUCT(REBARBANDINFOW, wID) -#define REBARBANDINFO_V3_SIZE WINELIB_NAME_AW(REBARBANDINFO_V3_SIZE) - -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; - -typedef struct _RB_HITTESTINFO -{ - POINT pt; - UINT flags; - INT iBand; -} RBHITTESTINFO, *LPRBHITTESTINFO; - - -/* Trackbar control */ - -#define TRACKBAR_CLASS16 "msctls_trackbar" -#define TRACKBAR_CLASSA "msctls_trackbar32" -#if defined(__GNUC__) -# define TRACKBAR_CLASSW (const WCHAR []){ 'm','s','c','t','l','s','_', \ - 't','r','a','c','k','b','a','r','3','2',0 } -#elif defined(_MSC_VER) -# define TRACKBAR_CLASSW L"msctls_trackbar32" -#else -static const WCHAR TRACKBAR_CLASSW[] = { 'm','s','c','t','l','s','_', - 't','r','a','c','k','b','a','r','3','2',0 }; -#endif -#define TRACKBAR_CLASS WINELIB_NAME_AW(TRACKBAR_CLASS) - -#define TBS_AUTOTICKS 0x0001 -#define TBS_VERT 0x0002 -#define TBS_HORZ 0x0000 -#define TBS_TOP 0x0004 -#define TBS_BOTTOM 0x0000 -#define TBS_LEFT 0x0004 -#define TBS_RIGHT 0x0000 -#define TBS_BOTH 0x0008 -#define TBS_NOTICKS 0x0010 -#define TBS_ENABLESELRANGE 0x0020 -#define TBS_FIXEDLENGTH 0x0040 -#define TBS_NOTHUMB 0x0080 -#define TBS_TOOLTIPS 0x0100 -#define TBS_REVERSED 0x0200 -#define TBS_DOWNISLEFT 0x0400 - -#define TBTS_TOP 0 -#define TBTS_LEFT 1 -#define TBTS_BOTTOM 2 -#define TBTS_RIGHT 3 - -#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 TBCD_TICS 0x0001 -#define TBCD_THUMB 0x0002 -#define TBCD_CHANNEL 0x0003 - -#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_SETUNICODEFORMAT CCM_SETUNICODEFORMAT -#define TBM_GETUNICODEFORMAT CCM_GETUNICODEFORMAT - - -/* Pager control */ - -#define WC_PAGESCROLLERA "SysPager" -#if defined(__GNUC__) -# define WC_PAGESCROLLERW (const WCHAR []){ 'S','y','s','P','a','g','e','r',0 } -#elif defined(_MSC_VER) -# define WC_PAGESCROLLERW L"SysPager" -#else -static const WCHAR WC_PAGESCROLLERW[] = { 'S','y','s','P','a','g','e','r',0 }; -#endif -#define WC_PAGESCROLLER WINELIB_NAME_AW(WC_PAGESCROLLER) - -#define PGS_VERT 0x00000000 -#define PGS_HORZ 0x00000001 -#define PGS_AUTOSCROLL 0x00000002 -#define PGS_DRAGNDROP 0x00000004 - -#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 - -/* only used with PGN_SCROLL */ -#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 - -/* only used with PGN_CALCSIZE */ -#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 PGN_FIRST (0U-900U) -#define PGN_LAST (0U-950U) -#define PGN_SCROLL (PGN_FIRST-1) -#define PGN_CALCSIZE (PGN_FIRST-2) - -#include "pshpack1.h" - -typedef struct -{ - NMHDR hdr; - WORD fwKeys; - RECT rcParent; - INT iDir; - INT iXpos; - INT iYpos; - INT iScroll; -} NMPGSCROLL, *LPNMPGSCROLL; - -#include "poppack.h" - -typedef struct -{ - NMHDR hdr; - DWORD dwFlag; - INT iWidth; - INT iHeight; -} NMPGCALCSIZE, *LPNMPGCALCSIZE; - - -/* Treeview control */ - -#define WC_TREEVIEWA "SysTreeView32" -#if defined(__GNUC__) -# define WC_TREEVIEWW (const WCHAR []){ 'S','y','s', \ - 'T','r','e','e','V','i','e','w','3','2',0 } -#elif defined(_MSC_VER) -# define WC_TREEVIEWW L"SysTreeView32" -#else -static const WCHAR WC_TREEVIEWW[] = { 'S','y','s', - 'T','r','e','e','V','i','e','w','3','2',0 }; -#endif -#define WC_TREEVIEW WINELIB_NAME_AW(WC_TREEVIEW) - -#define TVSIL_NORMAL 0 -#define TVSIL_STATE 2 - -#define TV_FIRST 0x1100 -#define TVM_INSERTITEMA (TV_FIRST+0) -#define TVM_INSERTITEMW (TV_FIRST+50) -#define TVM_INSERTITEM WINELIB_NAME_AW(TVM_INSERTITEM) -#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_GETITEM WINELIB_NAME_AW(TVM_GETITEM) -#define TVM_SETITEMA (TV_FIRST+13) -#define TVM_SETITEMW (TV_FIRST+63) -#define TVM_SETITEM WINELIB_NAME_AW(TVM_SETITEM) -#define TVM_EDITLABELA (TV_FIRST+14) -#define TVM_EDITLABELW (TV_FIRST+65) -#define TVM_EDITLABEL WINELIB_NAME_AW(TVM_EDITLABEL) -#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) -#define TVM_GETISEARCHSTRING WINELIB_NAME_AW(TVM_GETISEARCHSTRING) -#define TVM_SETTOOLTIPS (TV_FIRST+24) -#define TVM_GETTOOLTIPS (TV_FIRST+25) -#define TVM_SETINSERTMARK (TV_FIRST+26) -#define TVM_SETITEMHEIGHT (TV_FIRST+27) -#define TVM_GETITEMHEIGHT (TV_FIRST+28) -#define TVM_SETBKCOLOR (TV_FIRST+29) -#define TVM_SETTEXTCOLOR (TV_FIRST+30) -#define TVM_GETBKCOLOR (TV_FIRST+31) -#define TVM_GETTEXTCOLOR (TV_FIRST+32) -#define TVM_SETSCROLLTIME (TV_FIRST+33) -#define TVM_GETSCROLLTIME (TV_FIRST+34) -#define TVM_UNKNOWN35 (TV_FIRST+35) -#define TVM_UNKNOWN36 (TV_FIRST+36) -#define TVM_SETINSERTMARKCOLOR (TV_FIRST+37) -#define TVM_GETINSERTMARKCOLOR (TV_FIRST+38) -#define TVM_GETITEMSTATE (TV_FIRST+39) -#define TVM_SETLINECOLOR (TV_FIRST+40) -#define TVM_GETLINECOLOR (TV_FIRST+41) -#define TVM_SETUNICODEFORMAT CCM_SETUNICODEFORMAT -#define TVM_GETUNICODEFORMAT CCM_GETUNICODEFORMAT - - - -#define TVN_FIRST (0U-400U) -#define TVN_LAST (0U-499U) - -#define TVN_SELCHANGINGA (TVN_FIRST-1) -#define TVN_SELCHANGINGW (TVN_FIRST-50) -#define TVN_SELCHANGING WINELIB_NAME_AW(TVN_SELCHANGING) - -#define TVN_SELCHANGEDA (TVN_FIRST-2) -#define TVN_SELCHANGEDW (TVN_FIRST-51) -#define TVN_SELCHANGED WINELIB_NAME_AW(TVN_SELCHANGED) - -#define TVN_GETDISPINFOA (TVN_FIRST-3) -#define TVN_GETDISPINFOW (TVN_FIRST-52) -#define TVN_GETDISPINFO WINELIB_NAME_AW(TVN_GETDISPINFO) - -#define TVN_SETDISPINFOA (TVN_FIRST-4) -#define TVN_SETDISPINFOW (TVN_FIRST-53) -#define TVN_SETDISPINFO WINELIB_NAME_AW(TVN_SETDISPINFO) - -#define TVN_ITEMEXPANDINGA (TVN_FIRST-5) -#define TVN_ITEMEXPANDINGW (TVN_FIRST-54) -#define TVN_ITEMEXPANDING WINELIB_NAME_AW(TVN_ITEMEXPANDING) - -#define TVN_ITEMEXPANDEDA (TVN_FIRST-6) -#define TVN_ITEMEXPANDEDW (TVN_FIRST-55) -#define TVN_ITEMEXPANDED WINELIB_NAME_AW(TVN_ITEMEXPANDED) - -#define TVN_BEGINDRAGA (TVN_FIRST-7) -#define TVN_BEGINDRAGW (TVN_FIRST-56) -#define TVN_BEGINDRAG WINELIB_NAME_AW(TVN_BEGINDRAG) - -#define TVN_BEGINRDRAGA (TVN_FIRST-8) -#define TVN_BEGINRDRAGW (TVN_FIRST-57) -#define TVN_BEGINRDRAG WINELIB_NAME_AW(TVN_BEGINRDRAG) - -#define TVN_DELETEITEMA (TVN_FIRST-9) -#define TVN_DELETEITEMW (TVN_FIRST-58) -#define TVN_DELETEITEM WINELIB_NAME_AW(TVN_DELETEITEM) - -#define TVN_BEGINLABELEDITA (TVN_FIRST-10) -#define TVN_BEGINLABELEDITW (TVN_FIRST-59) -#define TVN_BEGINLABELEDIT WINELIB_NAME_AW(TVN_BEGINLABELEDIT) - -#define TVN_ENDLABELEDITA (TVN_FIRST-11) -#define TVN_ENDLABELEDITW (TVN_FIRST-60) -#define TVN_ENDLABELEDIT WINELIB_NAME_AW(TVN_ENDLABELEDIT) - -#define TVN_KEYDOWN (TVN_FIRST-12) - -#define TVN_GETINFOTIPA (TVN_FIRST-13) -#define TVN_GETINFOTIPW (TVN_FIRST-14) -#define TVN_GETINFOTIP WINELIB_NAME_AW(TVN_GETINFOTIP) - -#define TVN_SINGLEEXPAND (TVN_FIRST-15) - - - - - -#define TVIF_TEXT 0x0001 -#define TVIF_IMAGE 0x0002 -#define TVIF_PARAM 0x0004 -#define TVIF_STATE 0x0008 -#define TVIF_HANDLE 0x0010 -#define TVIF_SELECTEDIMAGE 0x0020 -#define TVIF_CHILDREN 0x0040 -#define TVIF_INTEGRAL 0x0080 -#define TVIF_DI_SETITEM 0x1000 - -#define TVI_ROOT ((HTREEITEM)0xffff0000) /* -65536 */ -#define TVI_FIRST ((HTREEITEM)0xffff0001) /* -65535 */ -#define TVI_LAST ((HTREEITEM)0xffff0002) /* -65534 */ -#define TVI_SORT ((HTREEITEM)0xffff0003) /* -65533 */ - -#define TVIS_FOCUSED 0x0001 -#define TVIS_SELECTED 0x0002 -#define TVIS_CUT 0x0004 -#define TVIS_DROPHILITED 0x0008 -#define TVIS_BOLD 0x0010 -#define TVIS_EXPANDED 0x0020 -#define TVIS_EXPANDEDONCE 0x0040 -#define TVIS_EXPANDPARTIAL 0x0080 -#define TVIS_OVERLAYMASK 0x0f00 -#define TVIS_STATEIMAGEMASK 0xf000 -#define TVIS_USERMASK 0xf000 - -#define TVHT_NOWHERE 0x0001 -#define TVHT_ONITEMICON 0x0002 -#define TVHT_ONITEMLABEL 0x0004 -#define TVHT_ONITEMINDENT 0x0008 -#define TVHT_ONITEMBUTTON 0x0010 -#define TVHT_ONITEMRIGHT 0x0020 -#define TVHT_ONITEMSTATEICON 0x0040 -#define TVHT_ONITEM 0x0046 -#define TVHT_ABOVE 0x0100 -#define TVHT_BELOW 0x0200 -#define TVHT_TORIGHT 0x0400 -#define TVHT_TOLEFT 0x0800 - -#define TVS_HASBUTTONS 0x0001 -#define TVS_HASLINES 0x0002 -#define TVS_LINESATROOT 0x0004 -#define TVS_EDITLABELS 0x0008 -#define TVS_DISABLEDRAGDROP 0x0010 -#define TVS_SHOWSELALWAYS 0x0020 -#define TVS_RTLREADING 0x0040 -#define TVS_NOTOOLTIPS 0x0080 -#define TVS_CHECKBOXES 0x0100 -#define TVS_TRACKSELECT 0x0200 -#define TVS_SINGLEEXPAND 0x0400 -#define TVS_INFOTIP 0x0800 -#define TVS_FULLROWSELECT 0x1000 -#define TVS_NOSCROLL 0x2000 -#define TVS_NONEVENHEIGHT 0x4000 -#define TVS_NOHSCROLL 0x8000 - -#define TVS_SHAREDIMAGELISTS 0x0000 -#define TVS_PRIVATEIMAGELISTS 0x0400 - - -#define TVE_COLLAPSE 0x0001 -#define TVE_EXPAND 0x0002 -#define TVE_TOGGLE 0x0003 -#define TVE_EXPANDPARTIAL 0x4000 -#define TVE_COLLAPSERESET 0x8000 - -#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 -#define TVGN_LASTVISIBLE 10 - -#define TVC_UNKNOWN 0x00 -#define TVC_BYMOUSE 0x01 -#define TVC_BYKEYBOARD 0x02 - - -typedef struct _TREEITEM *HTREEITEM; - -typedef struct { - UINT mask; - HTREEITEM hItem; - UINT state; - UINT stateMask; - LPSTR pszText; - INT cchTextMax; - INT iImage; - INT iSelectedImage; - INT cChildren; - LPARAM lParam; -} TVITEMA, *LPTVITEMA; - -typedef struct { - UINT mask; - HTREEITEM hItem; - UINT state; - UINT stateMask; - LPWSTR pszText; - INT cchTextMax; - INT iImage; - INT iSelectedImage; - INT cChildren; - LPARAM lParam; -} TVITEMW, *LPTVITEMW; - -#define TV_ITEMA TVITEMA -#define TV_ITEMW TVITEMW -#define LPTV_ITEMA LPTVITEMA -#define LPTV_ITEMW LPTVITEMW - -#define TVITEM WINELIB_NAME_AW(TVITEM) -#define LPTVITEM WINELIB_NAME_AW(LPTVITEM) -#define TV_ITEM WINELIB_NAME_AW(TV_ITEM) -#define LPTV_ITEM WINELIB_NAME_AW(LPTV_ITEM) - -typedef struct { - 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 { - UINT mask; - HTREEITEM hItem; - UINT state; - UINT stateMask; - LPWSTR pszText; - INT cchTextMax; - INT iImage; - INT iSelectedImage; - INT cChildren; - LPARAM lParam; - INT iIntegral; -} TVITEMEXW, *LPTVITEMEXW; - -#define TVITEMEX WINELIB_NAME_AW(TVITEMEX) -#define LPTVITEMEX WINELIB_NAME_AW(LPTVITEMEX) - -typedef struct tagTVINSERTSTRUCTA { - HTREEITEM hParent; - HTREEITEM hInsertAfter; - union { - TVITEMEXA itemex; - TVITEMA item; - } DUMMYUNIONNAME; -} TVINSERTSTRUCTA, *LPTVINSERTSTRUCTA; - -typedef struct tagTVINSERTSTRUCTW { - HTREEITEM hParent; - HTREEITEM hInsertAfter; - union { - TVITEMEXW itemex; - TVITEMW item; - } DUMMYUNIONNAME; -} TVINSERTSTRUCTW, *LPTVINSERTSTRUCTW; - -#define TVINSERTSTRUCT WINELIB_NAME_AW(TVINSERTSTRUCT) -#define LPTVINSERTSTRUCT WINELIB_NAME_AW(LPTVINSERTSTRUCT) - -#define TVINSERTSTRUCT_V1_SIZEA CCSIZEOF_STRUCT(TVINSERTSTRUCTA, item) -#define TVINSERTSTRUCT_V1_SIZEW CCSIZEOF_STRUCT(TVINSERTSTRUCTW, item) -#define TVINSERTSTRUCT_V1_SIZE WINELIB_NAME_AW(TVINSERTSTRUCT_V1_SIZE) - -#define TV_INSERTSTRUCT TVINSERTSTRUCT -#define TV_INSERTSTRUCTA TVINSERTSTRUCTA -#define TV_INSERTSTRUCTW TVINSERTSTRUCTW -#define LPTV_INSERTSTRUCT LPTVINSERTSTRUCT -#define LPTV_INSERTSTRUCTA LPTVINSERTSTRUCTA -#define LPTV_INSERTSTRUCTW LPTVINSERTSTRUCTW - - - -typedef struct tagNMTREEVIEWA { - NMHDR hdr; - UINT action; - TVITEMA itemOld; - TVITEMA itemNew; - POINT ptDrag; -} NMTREEVIEWA, *LPNMTREEVIEWA; - -typedef struct tagNMTREEVIEWW { - NMHDR hdr; - UINT action; - TVITEMW itemOld; - TVITEMW itemNew; - POINT ptDrag; -} NMTREEVIEWW, *LPNMTREEVIEWW; - -#define NMTREEVIEW WINELIB_NAME_AW(NMTREEVIEW) -#define NM_TREEVIEW WINELIB_NAME_AW(NMTREEVIEW) -#define LPNMTREEVIEW WINELIB_NAME_AW(LPNMTREEVIEW) - -#define LPNM_TREEVIEW LPNMTREEVIEW - -typedef struct tagTVDISPINFOA { - NMHDR hdr; - TVITEMA item; -} NMTVDISPINFOA, *LPNMTVDISPINFOA; - -typedef struct tagTVDISPINFOW { - NMHDR hdr; - TVITEMW item; -} NMTVDISPINFOW, *LPNMTVDISPINFOW; - -#define NMTVDISPINFO WINELIB_NAME_AW(NMTVDISPINFO) -#define LPNMTVDISPINFO WINELIB_NAME_AW(LPNMTVDISPINFO) -#define TV_DISPINFO NMTVDISPINFO - -typedef INT (CALLBACK *PFNTVCOMPARE)(LPARAM, LPARAM, LPARAM); - -typedef struct tagTVSORTCB -{ - HTREEITEM hParent; - PFNTVCOMPARE lpfnCompare; - LPARAM lParam; -} TVSORTCB, *LPTVSORTCB; - -#define TV_SORTCB TVSORTCB -#define LPTV_SORTCB LPTVSORTCB - -typedef struct tagTVHITTESTINFO { - POINT pt; - UINT flags; - HTREEITEM hItem; -} TVHITTESTINFO, *LPTVHITTESTINFO; - -#define TV_HITTESTINFO TVHITTESTINFO - - -/* Custom Draw Treeview */ - -#define NMTVCUSTOMDRAW_V3_SIZE CCSIZEOF_STRUCT(NMTVCUSTOMDRAW, clrTextBk) - -#define TVCDRF_NOIMAGES 0x00010000 - -typedef struct tagNMTVCUSTOMDRAW -{ - NMCUSTOMDRAW nmcd; - COLORREF clrText; - COLORREF clrTextBk; - INT iLevel; /* IE>0x0400 */ -} NMTVCUSTOMDRAW, *LPNMTVCUSTOMDRAW; - -/* Treeview tooltips */ - -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; - -#define NMTVGETINFOTIP WINELIB_NAME_AW(NMTVGETINFOTIP) -#define LPNMTVGETINFOTIP WINELIB_NAME_AW(LPNMTVGETINFOTIP) - -#include "pshpack1.h" -typedef struct tagTVKEYDOWN -{ - NMHDR hdr; - WORD wVKey; - UINT flags; -} NMTVKEYDOWN, *LPNMTVKEYDOWN; -#include "poppack.h" - -#define TV_KEYDOWN NMTVKEYDOWN - -#define TreeView_InsertItemA(hwnd, phdi) \ - (HTREEITEM)SNDMSGA((hwnd), TVM_INSERTITEMA, 0, \ - (LPARAM)(LPTVINSERTSTRUCTA)(phdi)) -#define TreeView_InsertItemW(hwnd,phdi) \ - (HTREEITEM)SNDMSGW((hwnd), TVM_INSERTITEMW, 0, \ - (LPARAM)(LPTVINSERTSTRUCTW)(phdi)) -#define TreeView_InsertItem WINELIB_NAME_AW(TreeView_InsertItem) - -#define TreeView_DeleteItem(hwnd, hItem) \ - (BOOL)SNDMSGA((hwnd), TVM_DELETEITEM, 0, (LPARAM)(HTREEITEM)(hItem)) -#define TreeView_DeleteAllItems(hwnd) \ - (BOOL)SNDMSGA((hwnd), TVM_DELETEITEM, 0, (LPARAM)TVI_ROOT) -#define TreeView_Expand(hwnd, hitem, code) \ - (BOOL)SNDMSGA((hwnd), TVM_EXPAND, (WPARAM)code, \ - (LPARAM)(HTREEITEM)(hitem)) - -#define TreeView_GetItemRect(hwnd, hitem, prc, code) \ - (*(HTREEITEM *)prc = (hitem), (BOOL)SNDMSGA((hwnd), \ - TVM_GETITEMRECT, (WPARAM)(code), (LPARAM)(RECT *)(prc))) - -#define TreeView_GetCount(hwnd) \ - (UINT)SNDMSGA((hwnd), TVM_GETCOUNT, 0, 0) -#define TreeView_GetIndent(hwnd) \ - (UINT)SNDMSGA((hwnd), TVM_GETINDENT, 0, 0) -#define TreeView_SetIndent(hwnd, indent) \ - (BOOL)SNDMSGA((hwnd), TVM_SETINDENT, (WPARAM)indent, 0) - -#define TreeView_GetImageList(hwnd, iImage) \ - (HIMAGELIST)SNDMSGA((hwnd), TVM_GETIMAGELIST, iImage, 0) - -#define TreeView_SetImageList(hwnd, himl, iImage) \ - (HIMAGELIST)SNDMSGA((hwnd), TVM_SETIMAGELIST, iImage, \ - (LPARAM)(UINT)(HIMAGELIST)(himl)) - -#define TreeView_GetNextItem(hwnd, hitem, code) \ - (HTREEITEM)SNDMSGA((hwnd), TVM_GETNEXTITEM, (WPARAM)code,\ -(LPARAM)(HTREEITEM) (hitem)) - -#define TreeView_GetChild(hwnd, hitem) \ - TreeView_GetNextItem(hwnd, hitem , TVGN_CHILD) -#define TreeView_GetNextSibling(hwnd, hitem) \ - TreeView_GetNextItem(hwnd, hitem , TVGN_NEXT) -#define TreeView_GetPrevSibling(hwnd, hitem) \ - TreeView_GetNextItem(hwnd, hitem , TVGN_PREVIOUS) -#define TreeView_GetParent(hwnd, hitem) \ - TreeView_GetNextItem(hwnd, hitem , TVGN_PARENT) -#define TreeView_GetFirstVisible(hwnd) \ - TreeView_GetNextItem(hwnd, NULL, TVGN_FIRSTVISIBLE) -#define TreeView_GetLastVisible(hwnd) \ - TreeView_GetNextItem(hwnd, NULL, TVGN_LASTVISIBLE) -#define TreeView_GetNextVisible(hwnd, hitem) \ - TreeView_GetNextItem(hwnd, hitem , TVGN_NEXTVISIBLE) -#define TreeView_GetPrevVisible(hwnd, hitem) \ - TreeView_GetNextItem(hwnd, hitem , TVGN_PREVIOUSVISIBLE) -#define TreeView_GetSelection(hwnd) \ - TreeView_GetNextItem(hwnd, NULL, TVGN_CARET) -#define TreeView_GetDropHilight(hwnd) \ - TreeView_GetNextItem(hwnd, NULL, TVGN_DROPHILITE) -#define TreeView_GetRoot(hwnd) \ - TreeView_GetNextItem(hwnd, NULL, TVGN_ROOT) -#define TreeView_GetLastVisible(hwnd) \ - TreeView_GetNextItem(hwnd, NULL, TVGN_LASTVISIBLE) - - -#define TreeView_Select(hwnd, hitem, code) \ - (UINT)SNDMSGA((hwnd), TVM_SELECTITEM, (WPARAM)code, \ -(LPARAM)(UINT)(hitem)) - - -#define TreeView_SelectItem(hwnd, hitem) \ - TreeView_Select(hwnd, hitem, TVGN_CARET) -#define TreeView_SelectDropTarget(hwnd, hitem) \ - TreeView_Select(hwnd, hitem, TVGN_DROPHILITE) -#define TreeView_SelectSetFirstVisible(hwnd, hitem) \ - TreeView_Select(hwnd, hitem, TVGN_FIRSTVISIBLE) - - -#define TreeView_GetItemA(hwnd, pitem) \ - (BOOL)SNDMSGA((hwnd), TVM_GETITEMA, 0, (LPARAM) (TVITEMA *)(pitem)) -#define TreeView_GetItemW(hwnd, pitem) \ - (BOOL)SNDMSGW((hwnd), TVM_GETITEMA, 0, (LPARAM) (TVITEMA *)(pitem)) -#define TreeView_GetItem WINELIB_NAME_AW(TreeView_GetItem) - -#define TreeView_SetItemA(hwnd, pitem) \ - (BOOL)SNDMSGA((hwnd), TVM_SETITEMA, 0, (LPARAM)(const TVITEMA *)(pitem)) -#define TreeView_SetItemW(hwnd, pitem) \ - (BOOL)SNDMSGW((hwnd), TVM_SETITEMA, 0, (LPARAM)(const TVITEMA *)(pitem)) -#define TreeView_SetItem WINELIB_NAME_AW(TreeView_SetItem) - -#define TreeView_EditLabel(hwnd, hitem) \ - (HWND)SNDMSGA((hwnd), TVM_EDITLABEL, 0, (LPARAM)(HTREEITEM)(hitem)) - -#define TreeView_GetEditControl(hwnd) \ - (HWND)SNDMSGA((hwnd), TVM_GETEDITCONTROL, 0, 0) - -#define TreeView_GetVisibleCount(hwnd) \ - (UINT)SNDMSGA((hwnd), TVM_GETVISIBLECOUNT, 0, 0) - -#define TreeView_HitTest(hwnd, lpht) \ - (HTREEITEM)SNDMSGA((hwnd), TVM_HITTEST, 0,\ -(LPARAM)(LPTVHITTESTINFO)(lpht)) - -#define TreeView_CreateDragImage(hwnd, hitem) \ - (HIMAGELIST)SNDMSGA((hwnd), TVM_CREATEDRAGIMAGE, 0,\ -(LPARAM)(HTREEITEM)(hitem)) - -#define TreeView_SortChildren(hwnd, hitem, recurse) \ - (BOOL)SNDMSGA((hwnd), TVM_SORTCHILDREN, (WPARAM)recurse,\ -(LPARAM)(HTREEITEM)(hitem)) - -#define TreeView_EnsureVisible(hwnd, hitem) \ - (BOOL)SNDMSGA((hwnd), TVM_ENSUREVISIBLE, 0, (LPARAM)(UINT)(hitem)) - -#define TreeView_SortChildrenCB(hwnd, psort, recurse) \ - (BOOL)SNDMSGA((hwnd), TVM_SORTCHILDRENCB, (WPARAM)recurse, \ - (LPARAM)(LPTV_SORTCB)(psort)) - -#define TreeView_EndEditLabelNow(hwnd, fCancel) \ - (BOOL)SNDMSGA((hwnd), TVM_ENDEDITLABELNOW, (WPARAM)fCancel, 0) - -#define TreeView_GetISearchString(hwnd, lpsz) \ - (BOOL)SNDMSGA((hwnd), TVM_GETISEARCHSTRING, 0, \ - (LPARAM)(LPTSTR)lpsz) - -#define TreeView_SetToolTips(hwnd, hwndTT) \ - (HWND)SNDMSGA((hwnd), TVM_SETTOOLTIPS, (WPARAM)(hwndTT), 0) - -#define TreeView_GetToolTips(hwnd) \ - (HWND)SNDMSGA((hwnd), TVM_GETTOOLTIPS, 0, 0) - -#define TreeView_SetItemHeight(hwnd, iHeight) \ - (INT)SNDMSGA((hwnd), TVM_SETITEMHEIGHT, (WPARAM)iHeight, 0) - -#define TreeView_GetItemHeight(hwnd) \ - (INT)SNDMSGA((hwnd), TVM_GETITEMHEIGHT, 0, 0) - -#define TreeView_SetBkColor(hwnd, clr) \ - (COLORREF)SNDMSGA((hwnd), TVM_SETBKCOLOR, 0, (LPARAM)clr) - -#define TreeView_SetTextColor(hwnd, clr) \ - (COLORREF)SNDMSGA((hwnd), TVM_SETTEXTCOLOR, 0, (LPARAM)clr) - -#define TreeView_GetBkColor(hwnd) \ - (COLORREF)SNDMSGA((hwnd), TVM_GETBKCOLOR, 0, 0) - -#define TreeView_GetTextColor(hwnd) \ - (COLORREF)SNDMSGA((hwnd), TVM_GETTEXTCOLOR, 0, 0) - -#define TreeView_SetScrollTime(hwnd, uTime) \ - (UINT)SNDMSGA((hwnd), TVM_SETSCROLLTIME, uTime, 0) - -#define TreeView_GetScrollTime(hwnd) \ - (UINT)SNDMSGA((hwnd), TVM_GETSCROLLTIME, 0, 0) - -#define TreeView_SetInsertMark(hwnd, hItem, fAfter) \ - (BOOL)SNDMSGA((hwnd), TVM_SETINSERTMARK, (WPARAM)(fAfter), \ - (LPARAM) (hItem)) - -#define TreeView_SetInsertMarkColor(hwnd, clr) \ - (COLORREF)SNDMSGA((hwnd), TVM_SETINSERTMARKCOLOR, 0, (LPARAM)clr) - -#define TreeView_GetInsertMarkColor(hwnd) \ - (COLORREF)SNDMSGA((hwnd), TVM_GETINSERTMARKCOLOR, 0, 0) - -#define TreeView_GetItemState(hwndTV, hti, mask) \ - (UINT)SNDMSGA((hwndTV), TVM_GETITEMSTATE, (WPARAM)(hti), (LPARAM)(mask)) -#define TreeView_GetCheckState(hwndTV, hti) \ - ((((UINT)(SNDMSGA((hwndTV), TVM_GETITEMSTATE, (WPARAM)(hti), \ - TVIS_STATEIMAGEMASK))) >> 12) -1) - -#define TreeView_SetLineColor(hwnd, clr) \ - (COLORREF)SNDMSGA((hwnd), TVM_SETLINECOLOR, 0, (LPARAM)(clr)) - -#define TreeView_GetLineColor(hwnd) \ - (COLORREF)SNDMSGA((hwnd), TVM_GETLINECOLOR, 0, 0) - -#define TreeView_SetItemState(hwndTV, hti, data, _mask) \ -{ TVITEM _TVi; \ - _TVi.mask = TVIF_STATE; \ - _TVi.hItem = hti; \ - _TVi.stateMask = _mask; \ - _TVi.state = data; \ - SNDMSGA((hwndTV), TVM_SETITEM, 0, (LPARAM)(TV_ITEM *)&_TVi); \ -} - - -/* Listview control */ - -#define WC_LISTVIEWA "SysListView32" -#if defined(__GNUC__) -# define WC_LISTVIEWW (const WCHAR []){ 'S','y','s', \ - 'L','i','s','t','V','i','e','w','3','2',0 } -#elif defined(_MSC_VER) -# define WC_LISTVIEWW L"SysListView32" -#else -static const WCHAR WC_LISTVIEWW[] = { 'S','y','s', - 'L','i','s','t','V','i','e','w','3','2',0 }; -#endif -#define WC_LISTVIEW WINELIB_NAME_AW(WC_LISTVIEW) - -#define LVSCW_AUTOSIZE -1 -#define LVSCW_AUTOSIZE_USEHEADER -2 - -#define LVS_ICON 0x0000 -#define LVS_REPORT 0x0001 -#define LVS_SMALLICON 0x0002 -#define LVS_LIST 0x0003 -#define LVS_TYPEMASK 0x0003 -#define LVS_SINGLESEL 0x0004 -#define LVS_SHOWSELALWAYS 0x0008 -#define LVS_SORTASCENDING 0x0010 -#define LVS_SORTDESCENDING 0x0020 -#define LVS_SHAREIMAGELISTS 0x0040 -#define LVS_NOLABELWRAP 0x0080 -#define LVS_AUTOARRANGE 0x0100 -#define LVS_EDITLABELS 0x0200 -#define LVS_OWNERDATA 0x1000 -#define LVS_NOSCROLL 0x2000 -#define LVS_TYPESTYLEMASK 0xfc00 -#define LVS_ALIGNTOP 0x0000 -#define LVS_ALIGNLEFT 0x0800 -#define LVS_ALIGNMASK 0x0c00 -#define LVS_OWNERDRAWFIXED 0x0400 -#define LVS_NOCOLUMNHEADER 0x4000 -#define LVS_NOSORTHEADER 0x8000 - -#define LVS_EX_GRIDLINES 0x0001 -#define LVS_EX_SUBITEMIMAGES 0x0002 -#define LVS_EX_CHECKBOXES 0x0004 -#define LVS_EX_TRACKSELECT 0x0008 -#define LVS_EX_HEADERDRAGDROP 0x0010 -#define LVS_EX_FULLROWSELECT 0x0020 -#define LVS_EX_ONECLICKACTIVATE 0x0040 -#define LVS_EX_TWOCLICKACTIVATE 0x0080 -#define LVS_EX_FLATSB 0x0100 -#define LVS_EX_REGIONAL 0x0200 -#define LVS_EX_INFOTIP 0x0400 -#define LVS_EX_UNDERLINEHOT 0x0800 -#define LVS_EX_UNDERLINECOLD 0x1000 -#define LVS_EX_MULTIWORKAREAS 0x2000 - -#define LVCF_FMT 0x0001 -#define LVCF_WIDTH 0x0002 -#define LVCF_TEXT 0x0004 -#define LVCF_SUBITEM 0x0008 -#define LVCF_IMAGE 0x0010 -#define LVCF_ORDER 0x0020 - -#define LVCFMT_LEFT 0x0000 -#define LVCFMT_RIGHT 0x0001 -#define LVCFMT_CENTER 0x0002 -#define LVCFMT_JUSTIFYMASK 0x0003 -#define LVCFMT_IMAGE 0x0800 -#define LVCFMT_BITMAP_ON_RIGHT 0x1000 -#define LVCFMT_COL_HAS_IMAGES 0x8000 - -#define LVSIL_NORMAL 0 -#define LVSIL_SMALL 1 -#define LVSIL_STATE 2 - -/* following 2 flags only for LVS_OWNERDATA listviews */ -/* and only in report or list mode */ -#define LVSICF_NOINVALIDATEALL 0x0001 -#define LVSICF_NOSCROLL 0x0002 - - -#define LVFI_PARAM 0X0001 -#define LVFI_STRING 0X0002 -#define LVFI_PARTIAL 0X0008 -#define LVFI_WRAP 0X0020 -#define LVFI_NEARESTXY 0X0040 - -#define LVIF_TEXT 0x0001 -#define LVIF_IMAGE 0x0002 -#define LVIF_PARAM 0x0004 -#define LVIF_STATE 0x0008 -#define LVIF_INDENT 0x0010 -#define LVIF_NORECOMPUTE 0x0800 -#define LVIF_DI_SETITEM 0x1000 - -#define LVIR_BOUNDS 0x0000 -#define LVIR_LABEL 0x0002 -#define LVIR_ICON 0x0001 -#define LVIR_SELECTBOUNDS 0x0003 - -#define LVIS_FOCUSED 0x0001 -#define LVIS_SELECTED 0x0002 -#define LVIS_CUT 0x0004 -#define LVIS_DROPHILITED 0x0008 -#define LVIS_ACTIVATING 0x0020 - -#define LVIS_OVERLAYMASK 0x0F00 -#define LVIS_STATEIMAGEMASK 0xF000 - -#define LVNI_ALL 0x0000 -#define LVNI_FOCUSED 0x0001 -#define LVNI_SELECTED 0x0002 -#define LVNI_CUT 0x0004 -#define LVNI_DROPHILITED 0x0008 - -#define LVNI_ABOVE 0x0100 -#define LVNI_BELOW 0x0200 -#define LVNI_TOLEFT 0x0400 -#define LVNI_TORIGHT 0x0800 - -#define LVHT_NOWHERE 0x0001 -#define LVHT_ONITEMICON 0x0002 -#define LVHT_ONITEMLABEL 0x0004 -#define LVHT_ONITEMSTATEICON 0x0008 -#define LVHT_ONITEM (LVHT_ONITEMICON|LVHT_ONITEMLABEL|LVHT_ONITEMSTATEICON) - -#define LVHT_ABOVE 0x0008 -#define LVHT_BELOW 0x0010 -#define LVHT_TORIGHT 0x0020 -#define LVHT_TOLEFT 0x0040 - -#define LVM_FIRST 0x1000 -#define LVM_GETBKCOLOR (LVM_FIRST+0) -#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_GETITEMA (LVM_FIRST+5) -#define LVM_GETITEMW (LVM_FIRST+75) -#define LVM_GETITEM WINELIB_NAME_AW(LVM_GETITEM) -#define LVM_SETITEMA (LVM_FIRST+6) -#define LVM_SETITEMW (LVM_FIRST+76) -#define LVM_SETITEM WINELIB_NAME_AW(LVM_SETITEM) -#define LVM_INSERTITEMA (LVM_FIRST+7) -#define LVM_INSERTITEMW (LVM_FIRST+77) -#define LVM_INSERTITEM WINELIB_NAME_AW(LVM_INSERTITEM) -#define LVM_DELETEITEM (LVM_FIRST+8) -#define LVM_DELETEALLITEMS (LVM_FIRST+9) -#define LVM_GETCALLBACKMASK (LVM_FIRST+10) -#define LVM_SETCALLBACKMASK (LVM_FIRST+11) -#define LVM_GETNEXTITEM (LVM_FIRST+12) -#define LVM_FINDITEMA (LVM_FIRST+13) -#define LVM_FINDITEMW (LVM_FIRST+83) -#define LVM_FINDITEM WINELIB_NAME_AW(LVM_FINDITEM) -#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 LVM_GETSTRINGWIDTH WINELIB_NAME_AW(LVM_GETSTRINGWIDTH) -#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 LVM_ARRANGE (LVM_FIRST+22) -#define LVM_EDITLABELA (LVM_FIRST+23) -#define LVM_EDITLABELW (LVM_FIRST+118) -#define LVM_EDITLABEL WINELIB_NAME_AW(LVM_EDITLABEL) -#define LVM_GETEDITCONTROL (LVM_FIRST+24) -#define LVM_GETCOLUMNA (LVM_FIRST+25) -#define LVM_GETCOLUMNW (LVM_FIRST+95) -#define LVM_GETCOLUMN WINELIB_NAME_AW(LVM_GETCOLUMN) -#define LVM_SETCOLUMNA (LVM_FIRST+26) -#define LVM_SETCOLUMNW (LVM_FIRST+96) -#define LVM_SETCOLUMN WINELIB_NAME_AW(LVM_SETCOLUMN) -#define LVM_INSERTCOLUMNA (LVM_FIRST+27) -#define LVM_INSERTCOLUMNW (LVM_FIRST+97) -#define LVM_INSERTCOLUMN WINELIB_NAME_AW(LVM_INSERTCOLUMN) -#define LVM_DELETECOLUMN (LVM_FIRST+28) -#define LVM_GETCOLUMNWIDTH (LVM_FIRST+29) -#define LVM_SETCOLUMNWIDTH (LVM_FIRST+30) -#define LVM_GETHEADER (LVM_FIRST+31) - -#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_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_GETITEMTEXT WINELIB_NAME_AW(LVM_GETITEMTEXT) -#define LVM_SETITEMTEXTA (LVM_FIRST+46) -#define LVM_SETITEMTEXTW (LVM_FIRST+116) -#define LVM_SETITEMTEXT WINELIB_NAME_AW(LVM_SETITEMTEXT) -#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) -#define LVM_GETISEARCHSTRING WINELIB_NAME_AW(LVM_GETISEARCHSTRING) -#define LVM_SETICONSPACING (LVM_FIRST+53) -#define LVM_SETEXTENDEDLISTVIEWSTYLE (LVM_FIRST+54) -#define LVM_GETEXTENDEDLISTVIEWSTYLE (LVM_FIRST+55) -#define LVM_GETSUBITEMRECT (LVM_FIRST+56) -#define LVM_SUBITEMHITTEST (LVM_FIRST+57) -#define LVM_SETCOLUMNORDERARRAY (LVM_FIRST+58) -#define LVM_GETCOLUMNORDERARRAY (LVM_FIRST+59) -#define LVM_SETHOTITEM (LVM_FIRST+60) -#define LVM_GETHOTITEM (LVM_FIRST+61) -#define LVM_SETHOTCURSOR (LVM_FIRST+62) -#define LVM_GETHOTCURSOR (LVM_FIRST+63) -#define LVM_APPROXIMATEVIEWRECT (LVM_FIRST+64) -#define LVM_SETWORKAREAS (LVM_FIRST+65) -#define LVM_GETSELECTIONMARK (LVM_FIRST+66) -#define LVM_SETSELECTIONMARK (LVM_FIRST+67) -#define LVM_SETBKIMAGEA (LVM_FIRST+68) -#define LVM_SETBKIMAGEW (LVM_FIRST+138) -#define LVM_SETBKIMAGE WINELIB_NAME_AW(LVM_SETBKIMAGE) -#define LVM_GETBKIMAGEA (LVM_FIRST+69) -#define LVM_GETBKIMAGEW (LVM_FIRST+139) -#define LVM_GETBKIMAGE WINELIB_NAME_AW(LVM_GETBKIMAGE) -#define LVM_GETWORKAREAS (LVM_FIRST+70) -#define LVM_SETHOVERTIME (LVM_FIRST+71) -#define LVM_GETHOVERTIME (LVM_FIRST+72) -#define LVM_GETNUMBEROFWORKAREAS (LVM_FIRST+73) -#define LVM_SETTOOLTIPS (LVM_FIRST+74) -#define LVM_GETTOOLTIPS (LVM_FIRST+78) -#define LVM_GETUNICODEFORMAT (CCM_GETUNICODEFORMAT) -#define LVM_SETUNICODEFORMAT (CCM_SETUNICODEFORMAT) - -#define LVN_FIRST (0U-100U) -#define LVN_LAST (0U-199U) -#define LVN_ITEMCHANGING (LVN_FIRST-0) -#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_BEGINLABELEDIT WINELIB_NAME_AW(LVN_BEGINLABELEDIT) -#define LVN_ENDLABELEDITA (LVN_FIRST-6) -#define LVN_ENDLABELEDITW (LVN_FIRST-76) -#define LVN_ENDLABELEDIT WINELIB_NAME_AW(LVN_ENDLABELEDIT) -#define LVN_COLUMNCLICK (LVN_FIRST-8) -#define LVN_BEGINDRAG (LVN_FIRST-9) -#define LVN_BEGINRDRAG (LVN_FIRST-11) -#define LVN_ODCACHEHINT (LVN_FIRST-13) -#define LVN_ITEMACTIVATE (LVN_FIRST-14) -#define LVN_ODSTATECHANGED (LVN_FIRST-15) -#define LVN_HOTTRACK (LVN_FIRST-21) -#define LVN_ODFINDITEMA (LVN_FIRST-52) -#define LVN_ODFINDITEMW (LVN_FIRST-79) -#define LVN_ODFINDITEM WINELIB_NAME_AW(LVN_ODFINDITEM) -#define LVN_GETDISPINFOA (LVN_FIRST-50) -#define LVN_GETDISPINFOW (LVN_FIRST-77) -#define LVN_GETDISPINFO WINELIB_NAME_AW(LVN_GETDISPINFO) -#define LVN_SETDISPINFOA (LVN_FIRST-51) -#define LVN_SETDISPINFOW (LVN_FIRST-78) -#define LVN_SETDISPINFO WINELIB_NAME_AW(LVN_SETDISPINFO) -#define LVN_KEYDOWN (LVN_FIRST-55) -#define LVN_MARQUEEBEGIN (LVN_FIRST-56) -#define LVN_GETINFOTIPA (LVN_FIRST-57) -#define LVN_GETINFOTIPW (LVN_FIRST-58) -#define LVN_GETINFOTIP WINELIB_NAME_AW(LVN_GETINFOTIP) - -#define LVA_ALIGNLEFT 0x0000 -#define LVA_DEFAULT 0x0001 -#define LVA_ALIGNTOP 0x0002 -#define LVA_SNAPTOGRID 0x0005 - -typedef struct tagLVITEMA -{ - UINT mask; - INT iItem; - INT iSubItem; - UINT state; - UINT stateMask; - LPSTR pszText; - INT cchTextMax; - INT iImage; - LPARAM lParam; - INT iIndent; /* (_WIN32_IE >= 0x0300) */ - int iGroupId; /* (_WIN32_IE >= 0x560) */ - UINT cColumns; /* (_WIN32_IE >= 0x560) */ - PUINT puColumns; /* (_WIN32_IE >= 0x560) */ -} LVITEMA, *LPLVITEMA; - -typedef struct tagLVITEMW -{ - UINT mask; - INT iItem; - INT iSubItem; - UINT state; - UINT stateMask; - LPWSTR pszText; - INT cchTextMax; - INT iImage; - LPARAM lParam; - INT iIndent; /* (_WIN32_IE >= 0x0300) */ - int iGroupId; /* (_WIN32_IE >= 0x560) */ - UINT cColumns; /* (_WIN32_IE >= 0x560) */ - PUINT puColumns; /* (_WIN32_IE >= 0x560) */ -} LVITEMW, *LPLVITEMW; - -#define LVITEM WINELIB_NAME_AW(LVITEM) -#define LPLVITEM WINELIB_NAME_AW(LPLVITEM) - -#define LVITEM_V1_SIZEA CCSIZEOF_STRUCT(LVITEMA, lParam) -#define LVITEM_V1_SIZEW CCSIZEOF_STRUCT(LVITEMW, lParam) -#define LVITEM_V1_SIZE WINELIB_NAME_AW(LVITEM_V1_SIZE) - -#define LV_ITEM LVITEM - -typedef struct LVSETINFOTIPA -{ - UINT cbSize; - DWORD dwFlags; - LPSTR pszText; - int iItem; - int iSubItem; -} LVSETINFOTIPA, *PLVSETINFOTIPA; - -typedef struct LVSETINFOTIPW -{ - UINT cbSize; - DWORD dwFlags; - LPWSTR pszText; - int iItem; - int iSubItem; -} LVSETINFOTIPW, *PLVSETINFOTIPW; - -#define LVSETINFOTIP WINELIB_NAME_AW(LVSETINFOTIP) -#define PLVSETINFOTIP WINELIB_NAME_AW(PLVSETINFOTIP) - -/* ListView background image structs and constants - For _WIN32_IE version 0x400 and later. */ - -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; - -#define LVBKIMAGE WINELIB_NAME_AW(LVBKIMAGE) -#define LPLVBKIMAGE WINELIB_NAME_AW(LPLVBKIMAGE) - -#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 - -#define ListView_SetBkImage(hwnd, plvbki) \ - (BOOL)SNDMSG((hwnd), LVM_SETBKIMAGE, 0, (LPARAM)plvbki) - -#define ListView_GetBkImage(hwnd, plvbki) \ - (BOOL)SNDMSG((hwnd), LVM_GETBKIMAGE, 0, (LPARAM)plvbki) - -typedef struct tagLVCOLUMNA -{ - UINT mask; - INT fmt; - INT cx; - LPSTR pszText; - INT cchTextMax; - INT iSubItem; - INT iImage; /* (_WIN32_IE >= 0x0300) */ - INT iOrder; /* (_WIN32_IE >= 0x0300) */ -} LVCOLUMNA, *LPLVCOLUMNA; - -typedef struct tagLVCOLUMNW -{ - UINT mask; - INT fmt; - INT cx; - LPWSTR pszText; - INT cchTextMax; - INT iSubItem; - INT iImage; /* (_WIN32_IE >= 0x0300) */ - INT iOrder; /* (_WIN32_IE >= 0x0300) */ -} LVCOLUMNW, *LPLVCOLUMNW; - -#define LVCOLUMN WINELIB_NAME_AW(LVCOLUMN) -#define LPLVCOLUMN WINELIB_NAME_AW(LPLVCOLUMN) - -#define LVCOLUMN_V1_SIZEA CCSIZEOF_STRUCT(LVCOLUMNA, iSubItem) -#define LVCOLUMN_V1_SIZEW CCSIZEOF_STRUCT(LVCOLUMNW, iSubItem) -#define LVCOLUMN_V1_SIZE WINELIB_NAME_AW(LVCOLUMN_V1_SIZE) - -#define LV_COLUMN LVCOLUMN - - -typedef struct tagNMLISTVIEW -{ - NMHDR hdr; - INT iItem; - INT iSubItem; - UINT uNewState; - UINT uOldState; - UINT uChanged; - POINT ptAction; - LPARAM lParam; -} NMLISTVIEW, *LPNMLISTVIEW; - -#define NM_LISTVIEW NMLISTVIEW -#define LPNM_LISTVIEW LPNMLISTVIEW - -typedef struct tagNMITEMACTIVATE -{ - NMHDR hdr; - int iItem; - int iSubItem; - UINT uNewState; - UINT uOldState; - UINT uChanged; - POINT ptAction; - LPARAM lParam; - UINT uKeyFlags; -} NMITEMACTIVATE, *LPNMITEMACTIVATE; - -typedef struct tagLVDISPINFOA -{ - NMHDR hdr; - LVITEMA item; -} NMLVDISPINFOA, *LPNMLVDISPINFOA; - -typedef struct tagLVDISPINFOW -{ - NMHDR hdr; - LVITEMW item; -} NMLVDISPINFOW, *LPNMLVDISPINFOW; - -#define NMLVDISPINFO WINELIB_NAME_AW(NMLVDISPINFO) -#define LPNMLVDISPINFO WINELIB_NAME_AW(LPNMLVDISPINFO) - -#define LV_DISPINFO NMLVDISPINFO - -#include "pshpack1.h" -typedef struct tagLVKEYDOWN -{ - NMHDR hdr; - WORD wVKey; - UINT flags; -} NMLVKEYDOWN, *LPNMLVKEYDOWN; -#include "poppack.h" - -#define LV_KEYDOWN NMLVKEYDOWN - -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; - -#define NMLVGETINFOTIP WINELIB_NAME_AW(NMLVGETINFOTIP) -#define LPNMLVGETINFOTIP WINELIB_NAME_AW(LPNMLVGETINFOTIP) - -typedef struct tagLVHITTESTINFO -{ - POINT pt; - UINT flags; - INT iItem; - INT iSubItem; -} LVHITTESTINFO, *LPLVHITTESTINFO; - -#define LV_HITTESTINFO LVHITTESTINFO -#define _LV_HITTESTINFO tagLVHITTESTINFO -#define LVHITTESTINFO_V1_SIZE CCSIZEOF_STRUCT(LVHITTESTINFO,iItem) - -typedef struct tagLVFINDINFOA -{ - UINT flags; - LPCSTR psz; - LPARAM lParam; - POINT pt; - UINT vkDirection; -} LVFINDINFOA, *LPLVFINDINFOA; - -typedef struct tagLVFINDINFOW -{ - UINT flags; - LPCWSTR psz; - LPARAM lParam; - POINT pt; - UINT vkDirection; -} LVFINDINFOW, *LPLVFINDINFOW; - -#define LVFINDINFO WINELIB_NAME_AW(LVFINDINFO) -#define LPLVFINDINFO WINELIB_NAME_AW(LPLVFINDINFO) - -/* Groups relates structures */ - -typedef struct LVGROUPA -{ - UINT cbSize; - UINT mask; - LPSTR pszHeader; - int cchHeader; - int iGroupId; - UINT stateMask; - UINT state; - UINT uAlign; -} LVGROUPA, *PLVGROUPA; - -typedef struct LVGROUPW -{ - UINT cbSize; - UINT mask; - LPWSTR pszHeader; - int cchHeader; - int iGroupId; - UINT stateMask; - UINT state; - UINT uAlign; -} LVGROUPW, *PLVGROUPW; - -#define LVGROUP WINELIB_NAME_AW(LVGROUP) -#define PLVGROUP WINELIB_NAME_AW(PLVGROUP) - -typedef struct LVGROUPMETRICS -{ - UINT cbSize; - UINT mask; - UINT Left; - UINT Top; - UINT Right; - UINT Bottom; - COLORREF crLeft; - COLORREF crTop; - COLORREF crRight; - COLORREF crBottom; - COLORREF crRightHeader; - COLORREF crFooter; -} LVGROUPMETRICS, *PLVGROUPMETRICS; - -typedef INT (*PFNLVGROUPCOMPARE)(INT, INT, VOID*); - -typedef struct LVINSERTGROUPSORTEDA -{ - PFNLVGROUPCOMPARE pfnGroupCompare; - LPVOID *pvData; - LVGROUPA lvGroup; -} LVINSERTGROUPSORTEDA, *PLVINSERTGROUPSORTEDA; - -typedef struct LVINSERTGROUPSORTEDW -{ - PFNLVGROUPCOMPARE pfnGroupCompare; - LPVOID *pvData; - LVGROUPW lvGroup; -} LVINSERTGROUPSORTEDW, *PLVINSERTGROUPSORTEDW; - -#define LVINSERTGROUPSORTED WINELIB_NAME_AW(LVINSERTGROUPSORTED) -#define PLVINSERTGROUPSORTED WINELIB_NAME_AW(PLVINSERTGROUPSORTED) - -/* Tile related structures */ - -typedef struct LVTILEINFO -{ - UINT cbSize; - int iItem; - UINT cColumns; - PUINT puColumns; -} LVTILEINFO, *PLVTILEINFO; - -typedef struct LVTILEVIEWINFO -{ - UINT cbSize; - DWORD dwMask; - DWORD dwFlags; - SIZE sizeTile; - int cLines; - RECT rcLabelMargin; -} LVTILEVIEWINFO, *PLVTILEVIEWINFO; - -typedef struct LVINSERTMARK -{ - UINT cbSize; - DWORD dwFlags; - int iItem; - DWORD dwReserved; -} LVINSERTMARK, *PLVINSERTMARK; - -typedef struct tagTCHITTESTINFO -{ - POINT pt; - UINT flags; -} TCHITTESTINFO, *LPTCHITTESTINFO; - -#define TC_HITTESTINFO TCHITTESTINFO - -typedef INT (CALLBACK *PFNLVCOMPARE)(LPARAM, LPARAM, LPARAM); - -#define NMLVCUSTOMDRAW_V3_SIZE CCSIZEOF_STRUCT(NMLCUSTOMDRW, clrTextBk) - -typedef struct tagNMLVCUSTOMDRAW -{ - NMCUSTOMDRAW nmcd; - COLORREF clrText; - COLORREF clrTextBk; - int iSubItem; /* (_WIN32_IE >= 0x0400) */ - DWORD dwItemType; /* (_WIN32_IE >= 0x560) */ - COLORREF clrFace; /* (_WIN32_IE >= 0x560) */ - int iIconEffect; /* (_WIN32_IE >= 0x560) */ - int iIconPhase; /* (_WIN32_IE >= 0x560) */ - int iPartId; /* (_WIN32_IE >= 0x560) */ - int iStateId; /* (_WIN32_IE >= 0x560) */ - RECT rcText; /* (_WIN32_IE >= 0x560) */ - UINT uAlign; /* (_WIN32_IE >= 0x560) */ -} NMLVCUSTOMDRAW, *LPNMLVCUSTOMDRAW; - -typedef struct tagNMLVCACHEHINT -{ - NMHDR hdr; - INT iFrom; - INT iTo; -} NMLVCACHEHINT, *LPNMLVCACHEHINT; - -#define LPNM_CACHEHINT LPNMLVCACHEHINT -#define PNM_CACHEHINT LPNMLVCACHEHINT -#define NM_CACHEHINT NMLVCACHEHINT - -typedef struct tagNMLVFINDITEMA -{ - NMHDR hdr; - int iStart; - LVFINDINFOA lvfi; -} NMLVFINDITEMA, *LPNMLVFINDITEMA; - -typedef struct tagNMLVFINDITEMW -{ - NMHDR hdr; - int iStart; - LVFINDINFOW lvfi; -} NMLVFINDITEMW, *LPNMLVFINDITEMW; - -#define NMLVFINDITEM WINELIB_NAME_AW(NMLVFINDITEM) -#define LPNMLVFINDITEM WINELIB_NAME_AW(LPNMLVFINDITEM) -#define NM_FINDITEM NMLVFINDITEM -#define LPNM_FINDITEM LPNMLVFINDITEM -#define PNM_FINDITEM LPNMLVFINDITEM - -typedef struct tagNMLVODSTATECHANGE -{ - NMHDR hdr; - int iFrom; - int iTo; - UINT uNewState; - UINT uOldState; -} NMLVODSTATECHANGE, *LPNMLVODSTATECHANGE; - -#define PNM_ODSTATECHANGE LPNMLVODSTATECHANGE -#define LPNM_ODSTATECHANGE LPNMLVODSTATECHANGE -#define NM_ODSTATECHANGE NMLVODSTATECHANGE - -typedef struct NMLVSCROLL -{ - NMHDR hdr; - int dx; - int dy; -} NMLVSCROLL, *LPNMLVSCROLL; - -#define ListView_SetTextBkColor(hwnd,clrBk) \ - (BOOL)SNDMSGA((hwnd),LVM_SETTEXTBKCOLOR,0,(LPARAM)(COLORREF)(clrBk)) -#define ListView_SetTextColor(hwnd,clrBk) \ - (BOOL)SNDMSGA((hwnd),LVM_SETTEXTCOLOR,0,(LPARAM)(COLORREF)(clrBk)) -#define ListView_DeleteColumn(hwnd,col)\ - (LRESULT)SNDMSGA((hwnd),LVM_DELETECOLUMN,0,(LPARAM)(INT)(col)) -#define ListView_GetColumnA(hwnd,x,col)\ - (LRESULT)SNDMSGA((hwnd),LVM_GETCOLUMNA,(WPARAM)(INT)(x),(LPARAM)(LPLVCOLUMNA)(col)) -#define ListView_GetColumnW(hwnd,x,col)\ - (LRESULT)SNDMSGW((hwnd),LVM_GETCOLUMNW,(WPARAM)(INT)(x),(LPARAM)(LPLVCOLUMNW)(col)) -#define ListView_GetColumn WINELIB_NAME_AW(ListView_GetColumn) -#define ListView_SetColumnA(hwnd,x,col)\ - (LRESULT)SNDMSGA((hwnd),LVM_SETCOLUMNA,(WPARAM)(INT)(x),(LPARAM)(LPLVCOLUMNA)(col)) -#define ListView_SetColumnW(hwnd,x,col)\ - (LRESULT)SNDMSGW((hwnd),LVM_SETCOLUMNW,(WPARAM)(INT)(x),(LPARAM)(LPLVCOLUMNW)(col)) -#define ListView_SetColumn WINELIB_NAME_AW(ListView_SetColumn) - - -#define ListView_GetNextItem(hwnd,nItem,flags) \ - (INT)SNDMSGA((hwnd),LVM_GETNEXTITEM,(WPARAM)(INT)(nItem),(LPARAM)(MAKELPARAM(flags,0))) -#define ListView_FindItemA(hwnd,nItem,plvfi) \ - (INT)SNDMSGA((hwnd),LVM_FINDITEMA,(WPARAM)(INT)(nItem),(LPARAM)(LVFINDINFOA*)(plvfi)) -#define ListView_FindItemW(hwnd,nItem,plvfi) \ - (INT)SNDMSGW((hwnd),LVM_FINDITEMW,(WPARAM)(INT)(nItem),(LPARAM)(LVFINDINFOW*)(plvfi)) -#define ListView_FindItem WINELIB_NAME_AW(ListView_FindItem) - -#define ListView_Arrange(hwnd,code) \ - (INT)SNDMSGA((hwnd),LVM_ARRANGE,(WPARAM)(INT)(code),0L) -#define ListView_GetItemPosition(hwnd,i,ppt) \ - (INT)SNDMSGA((hwnd),LVM_GETITEMPOSITION,(WPARAM)(INT)(i),(LPARAM)(LPPOINT)(ppt)) -#define ListView_GetItemRect(hwnd,i,prc,code) \ - (BOOL)SNDMSGA((hwnd), LVM_GETITEMRECT, (WPARAM)(int)(i), \ - ((prc) ? (((RECT*)(prc))->left = (code),(LPARAM)(RECT \ - *)(prc)) : (LPARAM)(RECT*)NULL)) -#define ListView_SetItemA(hwnd,pitem) \ - (INT)SNDMSGA((hwnd),LVM_SETITEMA,0,(LPARAM)(const LVITEMA *)(pitem)) -#define ListView_SetItemW(hwnd,pitem) \ - (INT)SNDMSGW((hwnd),LVM_SETITEMW,0,(LPARAM)(const LVITEMW *)(pitem)) -#define ListView_SetItem WINELIB_NAME_AW(ListView_SetItem) -#define ListView_SetItemState(hwnd,i,pitem) \ - (BOOL)SNDMSGA((hwnd),LVM_SETITEMSTATE,(WPARAM)(UINT)(i),(LPARAM)(LPLVITEMA)(pitem)) -#define ListView_GetItemState(hwnd,i,mask) \ - (BOOL)SNDMSGA((hwnd),LVM_GETITEMSTATE,(WPARAM)(UINT)(i),(LPARAM)(UINT)(mask)) -#define ListView_GetCountPerPage(hwnd) \ - (BOOL)SNDMSGW((hwnd),LVM_GETCOUNTPERPAGE,0,0L) -#define ListView_GetImageList(hwnd,iImageList) \ - (HIMAGELIST)SNDMSGA((hwnd),LVM_GETIMAGELIST,(WPARAM)(INT)(iImageList),0L) -#define ListView_GetStringWidthA(hwnd,pstr) \ - (INT)SNDMSGA((hwnd),LVM_GETSTRINGWIDTHA,0,(LPARAM)(LPCSTR)(pstr)) -#define ListView_GetStringWidthW(hwnd,pstr) \ - (INT)SNDMSGW((hwnd),LVM_GETSTRINGWIDTHW,0,(LPARAM)(LPCWSTR)(pstr)) -#define ListView_GetStringWidth WINELIB_NAME_AW(ListView_GetStringWidth) -#define ListView_GetTopIndex(hwnd) \ - (BOOL)SNDMSGA((hwnd),LVM_GETTOPINDEX,0,0L) -#define ListView_Scroll(hwnd,dx,dy) \ - (BOOL)SNDMSGA((hwnd),LVM_SCROLL,(WPARAM)(INT)(dx),(LPARAM)(INT)(dy)) -#define ListView_EnsureVisible(hwnd,i,fPartialOk) \ - (BOOL)SNDMSGA((hwnd),LVM_ENSUREVISIBLE,(WPARAM)(INT)i,(LPARAM)(BOOL)fPartialOk) -#define ListView_SetBkColor(hwnd,clrBk) \ - (BOOL)SNDMSGA((hwnd),LVM_SETBKCOLOR,0,(LPARAM)(COLORREF)(clrBk)) -#define ListView_SetImageList(hwnd,himl,iImageList) \ - (HIMAGELIST)(UINT)SNDMSGA((hwnd),LVM_SETIMAGELIST,(WPARAM)(iImageList),(LPARAM)(UINT)(HIMAGELIST)(himl)) -#define ListView_GetItemCount(hwnd) \ - (INT)SNDMSGA((hwnd),LVM_GETITEMCOUNT,0,0L) - -#define ListView_GetItemA(hwnd,pitem) \ - (BOOL)SNDMSGA((hwnd),LVM_GETITEMA,0,(LPARAM)(LVITEMA *)(pitem)) -#define ListView_GetItemW(hwnd,pitem) \ - (BOOL)SNDMSGW((hwnd),LVM_GETITEMW,0,(LPARAM)(LVITEMW *)(pitem)) -#define ListView_GetItem WINELIB_NAME_AW(ListView_GetItem) - -#define ListView_HitTest(hwnd,pinfo) \ - (INT)SNDMSGA((hwnd),LVM_HITTEST,0,(LPARAM)(LPLVHITTESTINFO)(pinfo)) - -#define ListView_InsertItemA(hwnd,pitem) \ - (INT)SNDMSGA((hwnd),LVM_INSERTITEMA,0,(LPARAM)(const LVITEMA *)(pitem)) -#define ListView_InsertItemW(hwnd,pitem) \ - (INT)SNDMSGW((hwnd),LVM_INSERTITEMW,0,(LPARAM)(const LVITEMW *)(pitem)) -#define ListView_InsertItem WINELIB_NAME_AW(ListView_InsertItem) - -#define ListView_DeleteAllItems(hwnd) \ - (BOOL)SNDMSGA((hwnd),LVM_DELETEALLITEMS,0,0L) - -#define ListView_InsertColumnA(hwnd,iCol,pcol) \ - (INT)SNDMSGA((hwnd),LVM_INSERTCOLUMNA,(WPARAM)(INT)(iCol),(LPARAM)(const LVCOLUMNA *)(pcol)) -#define ListView_InsertColumnW(hwnd,iCol,pcol) \ - (INT)SNDMSGW((hwnd),LVM_INSERTCOLUMNW,(WPARAM)(INT)(iCol),(LPARAM)(const LVCOLUMNW *)(pcol)) -#define ListView_InsertColumn WINELIB_NAME_AW(ListView_InsertColumn) - -#define ListView_SortItems(hwndLV,_pfnCompare,_lPrm) \ - (BOOL)SNDMSGA((hwndLV),LVM_SORTITEMS,(WPARAM)(LPARAM)_lPrm,(LPARAM)(PFNLVCOMPARE)_pfnCompare) -#define ListView_SetItemPosition(hwndLV, i, x, y) \ - (BOOL)SNDMSGA((hwndLV),LVM_SETITEMPOSITION,(WPARAM)(INT)(i),MAKELPARAM((x),(y))) -#define ListView_GetSelectedCount(hwndLV) \ - (UINT)SNDMSGA((hwndLV),LVM_GETSELECTEDCOUNT,0,0L) - -#define ListView_EditLabelA(hwndLV, i) \ - (HWND)SNDMSGA((hwndLV),LVM_EDITLABELA,(WPARAM)(int)(i), 0L) -#define ListView_EditLabelW(hwndLV, i) \ - (HWND)SNDMSGW((hwndLV),LVM_EDITLABELW,(WPARAM)(int)(i), 0L) -#define ListView_EditLabel WINELIB_NAME_AW(ListView_EditLabel) - -#define ListView_SetItemTextA(hwndLV, i, _iSubItem, _pszText) \ -{ LVITEMA _LVi; _LVi.iSubItem = _iSubItem; _LVi.pszText = _pszText;\ - SNDMSGA(hwndLV, LVM_SETITEMTEXTA, (WPARAM)i, (LPARAM) (LVITEMA*)&_LVi);} -#define ListView_SetItemTextW(hwndLV, i, _iSubItem, _pszText) \ -{ LVITEMW _LVi; _LVi.iSubItem = _iSubItem; _LVi.pszText = _pszText;\ - SNDMSGW(hwndLV, LVM_SETITEMTEXTW, (WPARAM)i, (LPARAM) (LVITEMW*)& _LVi);} -#define ListView_SetItemText WINELIB_NAME_AW(ListView_SetItemText) - -#define ListView_DeleteItem(hwndLV, i) \ - (BOOL)SNDMSGA(hwndLV, LVM_DELETEITEM, (WPARAM)(int)(i), 0L) -#define ListView_Update(hwndLV, i) \ - (BOOL)SNDMSGA((hwndLV), LVM_UPDATE, (WPARAM)(i), 0L) -#define ListView_GetColumnOrderArray(hwndLV, iCount, pi) \ - (BOOL)SNDMSGA((hwndLV), LVM_GETCOLUMNORDERARRAY, (WPARAM)iCount, (LPARAM)(LPINT)pi) -#define ListView_GetExtendedListViewStyle(hwndLV) \ - (DWORD)SNDMSGA((hwndLV), LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0L) -#define ListView_GetHotCursor(hwndLV) \ - (HCURSOR)SNDMSGA((hwndLV), LVM_GETHOTCURSOR, 0, 0L) -#define ListView_GetHotItem(hwndLV) \ - (int)SNDMSGA((hwndLV), LVM_GETHOTITEM, 0, 0L) -#define ListView_GetItemSpacing(hwndLV, fSmall) \ - (DWORD)SNDMSGA((hwndLV), LVM_GETITEMSPACING, (WPARAM)fSmall, 0L) -#define ListView_GetSubItemRect(hwndLV, iItem, iSubItem, code, prc) \ - (BOOL)SNDMSGA((hwndLV), LVM_GETSUBITEMRECT, (WPARAM)(int)(iItem), \ - ((prc) ? (((LPRECT)(prc))->top = iSubItem), (((LPRECT)(prc))->left = code):0), (LPARAM)prc) -#define ListView_GetToolTips(hwndLV) \ - (HWND)SNDMSGA((hwndLV), LVM_GETTOOLTIPS, 0, 0L) -#define ListView_SetColumnOrderArray(hwndLV, iCount, pi) \ - (BOOL)SNDMSGA((hwndLV), LVM_SETCOLUMNORDERARRAY, (WPARAM)iCount, (LPARAM)(LPINT)pi) -#define ListView_SetExtendedListViewStyle(hwndLV, dw) \ - (DWORD)SNDMSGA((hwndLV), LVM_SETEXTENDEDLISTVIEWSTYLE, 0, (LPARAM)dw) -#define ListView_SetExtendedListViewStyleEx(hwndLV, dwMask, dw) \ - (DWORD)SNDMSGA((hwndLV), LVM_SETEXTENDEDLISTVIEWSTYLE, (WPARAM)dwMask, (LPARAM)dw) -#define ListView_SetHotCursor(hwndLV, hcur) \ - (HCURSOR)SNDMSGA((hwndLV), LVM_SETHOTCURSOR, 0, (LPARAM)hcur) -#define ListView_SetHotItem(hwndLV, i) \ - (int)SNDMSGA((hwndLV), LVM_SETHOTITEM, (WPARAM)i, 0L) -#define ListView_SetIconSpacing(hwndLV, cx, cy) \ - (DWORD)SNDMSGA((hwndLV), LVM_SETICONSPACING, 0, MAKELONG(cx,cy)) -#define ListView_SetToolTips(hwndLV, hwndNewHwnd) \ - (HWND)SNDMSGA((hwndLV), LVM_SETTOOLTIPS, (WPARAM)hwndNewHwnd, 0L) -#define ListView_SubItemHitTest(hwndLV, plvhti) \ - (int)SNDMSGA((hwndLV), LVM_SUBITEMHITTEST, 0, (LPARAM)(LPLVHITTESTINFO)(plvhti)) - - -/* Tab Control */ - -#define WC_TABCONTROL16 "SysTabControl" -#define WC_TABCONTROLA "SysTabControl32" -#if defined(__GNUC__) -# define WC_TABCONTROLW (const WCHAR []){ 'S','y','s', \ - 'T','a','b','C','o','n','t','r','o','l','3','2',0 } -#elif defined(_MSC_VER) -# define WC_TABCONTROLW L"SysTabControl32" -#else -static const WCHAR WC_TABCONTROLW[] = { 'S','y','s', - 'T','a','b','C','o','n','t','r','o','l','3','2',0 }; -#endif -#define WC_TABCONTROL WINELIB_NAME_AW(WC_TABCONTROL) - -/* tab control styles */ -#define TCS_SCROLLOPPOSITE 0x0001 /* assumes multiline tab */ -#define TCS_BOTTOM 0x0002 -#define TCS_RIGHT 0x0002 -#define TCS_MULTISELECT 0x0004 /* allow multi-select in button mode */ -#define TCS_FLATBUTTONS 0x0008 -#define TCS_FORCEICONLEFT 0x0010 -#define TCS_FORCELABELLEFT 0x0020 -#define TCS_HOTTRACK 0x0040 -#define TCS_VERTICAL 0x0080 -#define TCS_TABS 0x0000 -#define TCS_BUTTONS 0x0100 -#define TCS_SINGLELINE 0x0000 -#define TCS_MULTILINE 0x0200 -#define TCS_RIGHTJUSTIFY 0x0000 -#define TCS_FIXEDWIDTH 0x0400 -#define TCS_RAGGEDRIGHT 0x0800 -#define TCS_FOCUSONBUTTONDOWN 0x1000 -#define TCS_OWNERDRAWFIXED 0x2000 -#define TCS_TOOLTIPS 0x4000 -#define TCS_FOCUSNEVER 0x8000 -#define TCS_EX_FLATSEPARATORS 0x00000001 /* to be used with */ -#define TCS_EX_REGISTERDROP 0x00000002 /* TCM_SETEXTENDEDSTYLE */ - - -#define TCM_FIRST 0x1300 - -#define TCM_GETIMAGELIST (TCM_FIRST + 2) -#define TCM_SETIMAGELIST (TCM_FIRST + 3) -#define TCM_GETITEMCOUNT (TCM_FIRST + 4) -#define TCM_GETITEM WINELIB_NAME_AW(TCM_GETITEM) -#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_SETITEM WINELIB_NAME_AW(TCM_SETITEM) -#define TCM_INSERTITEMA (TCM_FIRST + 7) -#define TCM_INSERTITEMW (TCM_FIRST + 62) -#define TCM_INSERTITEM WINELIB_NAME_AW(TCM_INSERTITEM) -#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) -#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 - - -#define TCIF_TEXT 0x0001 -#define TCIF_IMAGE 0x0002 -#define TCIF_RTLREADING 0x0004 -#define TCIF_PARAM 0x0008 -#define TCIF_STATE 0x0010 - -#define TCIS_BUTTONPRESSED 0x0001 -#define TCIS_HIGHLIGHTED 0x0002 - -/* TabCtrl Macros */ -#define TabCtrl_GetImageList(hwnd) \ - (HIMAGELIST)SNDMSGA((hwnd), TCM_GETIMAGELIST, 0, 0L) -#define TabCtrl_SetImageList(hwnd, himl) \ - (HIMAGELIST)SNDMSGA((hwnd), TCM_SETIMAGELIST, 0, (LPARAM)(UINT)(HIMAGELIST)(himl)) -#define TabCtrl_GetItemCount(hwnd) \ - (int)SNDMSGA((hwnd), TCM_GETITEMCOUNT, 0, 0L) -#define TabCtrl_GetItemA(hwnd, iItem, pitem) \ - (BOOL)SNDMSGA((hwnd), TCM_GETITEM, (WPARAM)(int)iItem, (LPARAM)(TC_ITEM *)(pitem)) -#define TabCtrl_GetItemW(hwnd, iItem, pitem) \ - (BOOL)SNDMSGW((hwnd), TCM_GETITEM, (WPARAM)(int)iItem, (LPARAM)(TC_ITEM *)(pitem)) -#define TabCtrl_GetItem WINELIB_NAME_AW(TabCtrl_GetItem) -#define TabCtrl_SetItemA(hwnd, iItem, pitem) \ - (BOOL)SNDMSGA((hwnd), TCM_SETITEM, (WPARAM)(int)iItem, (LPARAM)(TC_ITEM *)(pitem)) -#define TabCtrl_SetItemW(hwnd, iItem, pitem) \ - (BOOL)SNDMSGW((hwnd), TCM_SETITEM, (WPARAM)(int)iItem, (LPARAM)(TC_ITEM *)(pitem)) -#define TabCtrl_SetItem WINELIB_NAME_AW(TabCtrl_GetItem) -#define TabCtrl_InsertItemA(hwnd, iItem, pitem) \ - (int)SNDMSGA((hwnd), TCM_INSERTITEM, (WPARAM)(int)iItem, (LPARAM)(const TC_ITEM *)(pitem)) -#define TabCtrl_InsertItemW(hwnd, iItem, pitem) \ - (int)SNDMSGW((hwnd), TCM_INSERTITEM, (WPARAM)(int)iItem, (LPARAM)(const TC_ITEM *)(pitem)) -#define TabCtrl_InsertItem WINELIB_NAME_AW(TabCtrl_InsertItem) -#define TabCtrl_DeleteItem(hwnd, i) \ - (BOOL)SNDMSGA((hwnd), TCM_DELETEITEM, (WPARAM)(int)(i), 0L) -#define TabCtrl_DeleteAllItems(hwnd) \ - (BOOL)SNDMSGA((hwnd), TCM_DELETEALLITEMS, 0, 0L) -#define TabCtrl_GetItemRect(hwnd, i, prc) \ - (BOOL)SNDMSGA((hwnd), TCM_GETITEMRECT, (WPARAM)(int)(i), (LPARAM)(RECT *)(prc)) -#define TabCtrl_GetCurSel(hwnd) \ - (int)SNDMSGA((hwnd), TCM_GETCURSEL, 0, 0) -#define TabCtrl_SetCurSel(hwnd, i) \ - (int)SNDMSGA((hwnd), TCM_SETCURSEL, (WPARAM)i, 0) -#define TabCtrl_HitTest(hwndTC, pinfo) \ - (int)SNDMSGA((hwndTC), TCM_HITTEST, 0, (LPARAM)(TC_HITTESTINFO *)(pinfo)) -#define TabCtrl_SetItemExtra(hwndTC, cb) \ - (BOOL)SNDMSGA((hwndTC), TCM_SETITEMEXTRA, (WPARAM)(cb), 0L) -#define TabCtrl_AdjustRect(hwnd, bLarger, prc) \ - (int)SNDMSGA(hwnd, TCM_ADJUSTRECT, (WPARAM)(BOOL)bLarger, (LPARAM)(RECT *)prc) -#define TabCtrl_SetItemSize(hwnd, x, y) \ - (DWORD)SNDMSGA((hwnd), TCM_SETITEMSIZE, 0, MAKELPARAM(x,y)) -#define TabCtrl_RemoveImage(hwnd, i) \ - (void)SNDMSGA((hwnd), TCM_REMOVEIMAGE, i, 0L) -#define TabCtrl_SetPadding(hwnd, cx, cy) \ - (void)SNDMSGA((hwnd), TCM_SETPADDING, 0, MAKELPARAM(cx, cy)) -#define TabCtrl_GetRowCount(hwnd) \ - (int)SNDMSGA((hwnd), TCM_GETROWCOUNT, 0, 0L) -#define TabCtrl_GetToolTips(hwnd) \ - (HWND)SNDMSGA((hwnd), TCM_GETTOOLTIPS, 0, 0L) -#define TabCtrl_SetToolTips(hwnd, hwndTT) \ - (void)SNDMSGA((hwnd), TCM_SETTOOLTIPS, (WPARAM)hwndTT, 0L) -#define TabCtrl_GetCurFocus(hwnd) \ - (int)SNDMSGA((hwnd), TCM_GETCURFOCUS, 0, 0) -#define TabCtrl_SetCurFocus(hwnd, i) \ - SNDMSGA((hwnd),TCM_SETCURFOCUS, i, 0) -#define TabCtrl_SetMinTabWidth(hwnd, x) \ - (int)SNDMSGA((hwnd), TCM_SETMINTABWIDTH, 0, x) -#define TabCtrl_DeselectAll(hwnd, fExcludeFocus)\ - (void)SNDMSGA((hwnd), TCM_DESELECTALL, fExcludeFocus, 0) - - -/* constants for TCHITTESTINFO */ - -#define TCHT_NOWHERE 0x01 -#define TCHT_ONITEMICON 0x02 -#define TCHT_ONITEMLABEL 0x04 -#define TCHT_ONITEM (TCHT_ONITEMICON | TCHT_ONITEMLABEL) - - -typedef struct tagTCITEMA { - UINT mask; - UINT dwState; - UINT dwStateMask; - LPSTR pszText; - INT cchTextMax; - INT iImage; - LPARAM lParam; -} TCITEMA, *LPTCITEMA; - -typedef struct tagTCITEMW -{ - UINT mask; - DWORD dwState; - DWORD dwStateMask; - LPWSTR pszText; - INT cchTextMax; - INT iImage; - LPARAM lParam; -} TCITEMW, *LPTCITEMW; - -#define TCITEM WINELIB_NAME_AW(TCITEM) -#define LPTCITEM WINELIB_NAME_AW(LPTCITEM) -#define TC_ITEM TCITEM - -#define TCN_FIRST (0U-550U) -#define TCN_LAST (0U-580U) -#define TCN_KEYDOWN (TCN_FIRST - 0) -#define TCN_SELCHANGE (TCN_FIRST - 1) -#define TCN_SELCHANGING (TCN_FIRST - 2) -#define TCN_GETOBJECT (TCN_FIRST - 3) - -#include "pshpack1.h" -typedef struct tagTCKEYDOWN -{ - NMHDR hdr; - WORD wVKey; - UINT flags; -} NMTCKEYDOWN; -#include "poppack.h" - -#define TC_KEYDOWN NMTCKEYDOWN - -/* ComboBoxEx control */ - -#define WC_COMBOBOXEXA "ComboBoxEx32" -#if defined(__GNUC__) -# define WC_COMBOBOXEXW (const WCHAR []){ 'C','o','m','b','o', \ - 'B','o','x','E','x','3','2',0 } -#elif defined(_MSC_VER) -# define WC_COMBOBOXEXW L"ComboBoxEx32" -#else -static const WCHAR WC_COMBOBOXEXW[] = { 'C','o','m','b','o', - 'B','o','x','E','x','3','2',0 }; -#endif -#define WC_COMBOBOXEX WINELIB_NAME_AW(WC_COMBOBOXEX) - -#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 CBEM_INSERTITEMA (WM_USER+1) -#define CBEM_INSERTITEMW (WM_USER+11) -#define CBEM_INSERTITEM WINELIB_NAME_AW(CBEM_INSERTITEM) -#define CBEM_SETIMAGELIST (WM_USER+2) -#define CBEM_GETIMAGELIST (WM_USER+3) -#define CBEM_GETITEMA (WM_USER+4) -#define CBEM_GETITEMW (WM_USER+13) -#define CBEM_GETITEM WINELIB_NAME_AW(CBEM_GETITEM) -#define CBEM_SETITEMA (WM_USER+5) -#define CBEM_SETITEMW (WM_USER+12) -#define CBEM_SETITEM WINELIB_NAME_AW(CBEM_SETITEM) -#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) -#define CBEM_GETEXTENDEDSTYLE (WM_USER+9) -#define CBEM_SETEXTENDEDSTYLE (WM_USER+14) -#define CBEM_SETUNICODEFORMAT CCM_SETUNICODEFORMAT -#define CBEM_GETUNICODEFORMAT CCM_GETUNICODEFORMAT -#define CBEM_HASEDITCHANGED (WM_USER+10) - -#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_FIRST (0U-800U) -#define CBEN_LAST (0U-830U) - -#define CBEN_GETDISPINFOA (CBEN_FIRST - 0) -#define CBEN_GETDISPINFOW (CBEN_FIRST - 7) -#define CBEN_GETDISPINFO WINELIB_NAME_AW(CBEN_GETDISPINFO) -#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 CBEN_ENDEDIT WINELIB_NAME_AW(CBEN_ENDEDIT) -#define CBEN_DRAGBEGINA (CBEN_FIRST - 8) -#define CBEN_DRAGBEGINW (CBEN_FIRST - 9) -#define CBEN_DRAGBEGIN WINELIB_NAME_AW(CBEN_DRAGBEGIN) - -#define CBES_EX_NOEDITIMAGE 0x00000001 -#define CBES_EX_NOEDITIMAGEINDENT 0x00000002 -#define CBES_EX_PATHWORDBREAKPROC 0x00000004 -#define CBES_EX_NOSIZELIMIT 0x00000008 -#define CBES_EX_CASESENSITIVE 0x00000010 - - -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; /* Yes, there's a BOX missing */ - -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; /* Yes, there's a BOX missing */ - -#define COMBOBOXEXITEM WINELIB_NAME_AW(COMBOBOXEXITEM) -#define PCOMBOBOXEXITEM WINELIB_NAME_AW(PCOMBOBOXEXITEM) -#define PCCOMBOBOXEXITEM WINELIB_NAME_AW(PCCOMBOEXITEM) /* Yes, there's a BOX missing */ - -#define CBENF_KILLFOCUS 1 -#define CBENF_RETURN 2 -#define CBENF_ESCAPE 3 -#define CBENF_DROPDOWN 4 - -#define CBEMAXSTRLEN 260 - -typedef struct tagNMCBEENDEDITW -{ - NMHDR hdr; - BOOL fChanged; - int iNewSelection; - WCHAR szText[CBEMAXSTRLEN]; - int iWhy; -} NMCBEENDEDITW, *LPNMCBEENDEDITW, *PNMCBEENDEDITW; - -typedef struct tagNMCBEENDEDITA -{ - NMHDR hdr; - BOOL fChanged; - int iNewSelection; - char szText[CBEMAXSTRLEN]; - int iWhy; -} NMCBEENDEDITA, *LPNMCBEENDEDITA, *PNMCBEENDEDITA; - -#define NMCBEENDEDIT WINELIB_NAME_AW(NMCBEENDEDIT) -#define LPNMCBEENDEDIT WINELIB_NAME_AW(LPNMCBEENDEDIT) -#define PNMCBEENDEDIT WINELIB_NAME_AW(PNMCBEENDEDIT) - -typedef struct -{ - NMHDR hdr; - COMBOBOXEXITEMA ceItem; -} NMCOMBOBOXEXA, *PNMCOMBOBOXEXA; - -typedef struct -{ - NMHDR hdr; - COMBOBOXEXITEMW ceItem; -} NMCOMBOBOXEXW, *PNMCOMBOBOXEXW; - -#define NMCOMBOBOXEX WINELIB_NAME_AW(NMCOMBOBOXEX) -#define PNMCOMBOBOXEX WINELIB_NAME_AW(PNMCOMBOBOXEX) - -typedef struct -{ - NMHDR hdr; - int iItemid; - char szText[CBEMAXSTRLEN]; -} NMCBEDRAGBEGINA, *PNMCBEDRAGBEGINA, *LPNMCBEDRAGBEGINA; - -typedef struct -{ - NMHDR hdr; - int iItemid; - WCHAR szText[CBEMAXSTRLEN]; -} NMCBEDRAGBEGINW, *PNMCBEDRAGBEGINW, *LPNMCBEDRAGBEGINW; - -#define NMCBEDRAGBEGIN WINELIB_NAME_AW(NMCBEDRAGBEGIN) -#define PNMCBEDRAGBEGIN WINELIB_NAME_AW(PNMCBEDRAGBEGIN) -#define LPNMCBEDRAGBEGIN WINELIB_NAME_AW(LPNMCBEDRAGBEGIN) - - -/* Hotkey control */ - -#define HOTKEY_CLASS16 "msctls_hotkey" -#define HOTKEY_CLASSA "msctls_hotkey32" -#if defined(__GNUC__) -# define HOTKEY_CLASSW (const WCHAR []){ 'm','s','c','t','l','s','_', \ - 'h','o','t','k','e','y','3','2',0 } -#elif defined(_MSC_VER) -# define HOTKEY_CLASSW L"msctls_hotkey32" -#else -static const WCHAR HOTKEY_CLASSW[] = { 'm','s','c','t','l','s','_', - 'h','o','t','k','e','y','3','2',0 }; -#endif -#define HOTKEY_CLASS WINELIB_NAME_AW(HOTKEY_CLASS) - -#define HOTKEYF_SHIFT 0x01 -#define HOTKEYF_CONTROL 0x02 -#define HOTKEYF_ALT 0x04 -#define HOTKEYF_EXT 0x08 - -#define HKCOMB_NONE 0x0001 -#define HKCOMB_S 0x0002 -#define HKCOMB_C 0x0004 -#define HKCOMB_A 0x0008 -#define HKCOMB_SC 0x0010 -#define HKCOMB_SA 0x0020 -#define HKCOMB_CA 0x0040 -#define HKCOMB_SCA 0x0080 - -#define HKM_SETHOTKEY (WM_USER+1) -#define HKM_GETHOTKEY (WM_USER+2) -#define HKM_SETRULES (WM_USER+3) - - -/* animate control */ - -#define ANIMATE_CLASSA "SysAnimate32" -#if defined(__GNUC__) -# define ANIMATE_CLASSW (const WCHAR []){ 'S','y','s', \ - 'A','n','i','m','a','t','e','3','2',0 } -#elif defined(_MSC_VER) -# define ANIMATE_CLASSW L"SysAnimate32" -#else -static const WCHAR ANIMATE_CLASSW[] = { 'S','y','s', - 'A','n','i','m','a','t','e','3','2',0 }; -#endif -#define ANIMATE_CLASS WINELIB_NAME_AW(ANIMATE_CLASS) - -#define ACS_CENTER 0x0001 -#define ACS_TRANSPARENT 0x0002 -#define ACS_AUTOPLAY 0x0004 -#define ACS_TIMER 0x0008 /* no threads, just timers */ - -#define ACM_OPENA (WM_USER+100) -#define ACM_OPENW (WM_USER+103) -#define ACM_OPEN WINELIB_NAME_AW(ACM_OPEN) -#define ACM_PLAY (WM_USER+101) -#define ACM_STOP (WM_USER+102) - -#define ACN_START 1 -#define ACN_STOP 2 - -#define Animate_CreateA(hwndP,id,dwStyle,hInstance) \ - CreateWindowA(ANIMATE_CLASSA,NULL,dwStyle,0,0,0,0,hwndP,(HMENU)(id),hInstance,NULL) -#define Animate_CreateW(hwndP,id,dwStyle,hInstance) \ - CreateWindowW(ANIMATE_CLASSW,NULL,dwStyle,0,0,0,0,hwndP,(HMENU)(id),hInstance,NULL) -#define Animate_Create WINELIB_NAME_AW(Animate_Create) -#define Animate_OpenA(hwnd,szName) \ - (BOOL)SNDMSGA(hwnd,ACM_OPENA,0,(LPARAM)(LPSTR)(szName)) -#define Animate_OpenW(hwnd,szName) \ - (BOOL)SNDMSGW(hwnd,ACM_OPENW,0,(LPARAM)(LPWSTR)(szName)) -#define Animate_Open WINELIB_NAME_AW(Animate_Open) -#define Animate_OpenExA(hwnd,hInst,szName) \ - (BOOL)SNDMSGA(hwnd,ACM_OPENA,(WPARAM)hInst,(LPARAM)(LPSTR)(szName)) -#define Animate_OpenExW(hwnd,hInst,szName) \ - (BOOL)SNDMSGW(hwnd,ACM_OPENW,(WPARAM)hInst,(LPARAM)(LPWSTR)(szName)) -#define Animate_OpenEx WINELIB_NAME_AW(Animate_OpenEx) -#define Animate_Play(hwnd,from,to,rep) \ - (BOOL)SNDMSGA(hwnd,ACM_PLAY,(WPARAM)(UINT)(rep),(LPARAM)MAKELONG(from,to)) -#define Animate_Stop(hwnd) \ - (BOOL)SNDMSGA(hwnd,ACM_STOP,0,0) -#define Animate_Close(hwnd) \ - (BOOL)SNDMSGA(hwnd,ACM_OPENA,0,0) -#define Animate_Seek(hwnd,frame) \ - (BOOL)SNDMSGA(hwnd,ACM_PLAY,1,(LPARAM)MAKELONG(frame,frame)) - - -/************************************************************************** - * IP Address control - */ - -#define WC_IPADDRESSA "SysIPAddress32" -#if defined(__GNUC__) -# define WC_IPADDRESSW (const WCHAR []){ 'S','y','s', \ - 'I','P','A','d','d','r','e','s','s','3','2',0 } -#elif defined(_MSC_VER) -# define WC_IPADDRESSW L"SysIPAddress32" -#else -static const WCHAR WC_IPADDRESSW[] = { 'S','y','s', - 'I','P','A','d','d','r','e','s','s','3','2',0 }; -#endif -#define WC_IPADDRESS WINELIB_NAME_AW(WC_IPADDRESS) - -#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) - -#define IPN_FIRST (0U-860U) -#define IPN_LAST (0U-879U) -#define IPN_FIELDCHANGED (IPN_FIRST-0) - -typedef struct tagNMIPADDRESS -{ - NMHDR hdr; - INT iField; - INT iValue; -} NMIPADDRESS, *LPNMIPADDRESS; - -#define MAKEIPRANGE(low,high) \ - ((LPARAM)(WORD)(((BYTE)(high)<<8)+(BYTE)(low))) -#define MAKEIPADDRESS(b1,b2,b3,b4) \ - ((LPARAM)(((DWORD)(b1)<<24)+((DWORD)(b2)<16)+((DWORD)(b3)<<8)+((DWORD)(b4)))) - -#define FIRST_IPADDRESS(x) (((x)>>24)&0xff) -#define SECOND_IPADDRESS(x) (((x)>>16)&0xff) -#define THIRD_IPADDRESS(x) (((x)>>8)&0xff) -#define FOURTH_IPADDRESS(x) ((x)&0xff) - - -/************************************************************************** - * Native Font control - */ - -#define WC_NATIVEFONTCTLA "NativeFontCtl" -#if defined(__GNUC__) -# define WC_NATIVEFONTCTLW (const WCHAR []){ 'N','a','t','i','v','e', \ - 'F','o','n','t','C','t','l',0 } -#elif defined(_MSC_VER) -# define WC_NATIVEFONTCTLW L"NativeFontCtl" -#else -static const WCHAR WC_NATIVEFONTCTLW[] = { 'N','a','t','i','v','e', - 'F','o','n','t','C','t','l',0 }; -#endif -#define WC_NATIVEFONTCTL WINELIB_NAME_AW(WC_NATIVEFONTCTL) - -#define NFS_EDIT 0x0001 -#define NFS_STATIC 0x0002 -#define NFS_LISTCOMBO 0x0004 -#define NFS_BUTTON 0x0008 -#define NFS_ALL 0x0010 - - -/************************************************************************** - * Month calendar control - * - */ - -#define MONTHCAL_CLASSA "SysMonthCal32" -#if defined(__GNUC__) -# define MONTHCAL_CLASSW (const WCHAR []){ 'S','y','s', \ - 'M','o','n','t','h','C','a','l','3','2',0 } -#elif defined(_MSC_VER) -# define MONTHCAL_CLASSW L"SysMonthCal32" -#else -static const WCHAR MONTHCAL_CLASSW[] = { 'S','y','s', - 'M','o','n','t','h','C','a','l','3','2',0 }; -#endif -#define MONTHCAL_CLASS WINELIB_NAME_AW(MONTHCAL_CLASS) - -#define MCM_FIRST 0x1000 -#define MCN_FIRST (0U-750U) -#define MCN_LAST (0U-759U) - - -#define MCM_GETCURSEL (MCM_FIRST + 1) -#define MCM_SETCURSEL (MCM_FIRST + 2) -#define MCM_GETMAXSELCOUNT (MCM_FIRST + 3) -#define MCM_SETMAXSELCOUNT (MCM_FIRST + 4) -#define MCM_GETSELRANGE (MCM_FIRST + 5) -#define MCM_SETSELRANGE (MCM_FIRST + 6) -#define MCM_GETMONTHRANGE (MCM_FIRST + 7) -#define MCM_SETDAYSTATE (MCM_FIRST + 8) -#define MCM_GETMINREQRECT (MCM_FIRST + 9) -#define MCM_SETCOLOR (MCM_FIRST + 10) -#define MCM_GETCOLOR (MCM_FIRST + 11) -#define MCM_SETTODAY (MCM_FIRST + 12) -#define MCM_GETTODAY (MCM_FIRST + 13) -#define MCM_HITTEST (MCM_FIRST + 14) -#define MCM_SETFIRSTDAYOFWEEK (MCM_FIRST + 15) -#define MCM_GETFIRSTDAYOFWEEK (MCM_FIRST + 16) -#define MCM_GETRANGE (MCM_FIRST + 17) -#define MCM_SETRANGE (MCM_FIRST + 18) -#define MCM_GETMONTHDELTA (MCM_FIRST + 19) -#define MCM_SETMONTHDELTA (MCM_FIRST + 20) -#define MCM_GETMAXTODAYWIDTH (MCM_FIRST + 21) -#define MCM_GETUNICODEFORMAT CCM_GETUNICODEFORMAT -#define MCM_SETUNICODEFORMAT CCM_SETUNICODEFORMAT - - -/* Notifications */ - -#define MCN_SELCHANGE (MCN_FIRST + 1) -#define MCN_GETDAYSTATE (MCN_FIRST + 3) -#define MCN_SELECT (MCN_FIRST + 4) - -#define MCSC_BACKGROUND 0 -#define MCSC_TEXT 1 -#define MCSC_TITLEBK 2 -#define MCSC_TITLETEXT 3 -#define MCSC_MONTHBK 4 -#define MCSC_TRAILINGTEXT 5 - -#define MCS_DAYSTATE 0x0001 -#define MCS_MULTISELECT 0x0002 -#define MCS_WEEKNUMBERS 0x0004 -#define MCS_NOTODAY 0x0010 -#define MCS_NOTODAYCIRCLE 0x0008 - -#define MCHT_TITLE 0x00010000 -#define MCHT_CALENDAR 0x00020000 -#define MCHT_TODAYLINK 0x00030000 - -#define MCHT_NEXT 0x01000000 -#define MCHT_PREV 0x02000000 -#define MCHT_NOWHERE 0x00000000 -#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) - - - -#define GMR_VISIBLE 0 -#define GMR_DAYSTATE 1 - - -/* Month calendar's structures */ - - -typedef struct { - UINT cbSize; - POINT pt; - UINT uHit; - SYSTEMTIME st; -} MCHITTESTINFO, *PMCHITTESTINFO; - -typedef struct tagNMSELCHANGE -{ - NMHDR nmhdr; - SYSTEMTIME stSelStart; - SYSTEMTIME stSelEnd; -} NMSELCHANGE, *LPNMSELCHANGE; - -typedef NMSELCHANGE NMSELECT, *LPNMSELECT; -typedef DWORD MONTHDAYSTATE, *LPMONTHDAYSTATE; - -typedef struct tagNMDAYSTATE -{ - NMHDR nmhdr; - SYSTEMTIME stStart; - int cDayState; - LPMONTHDAYSTATE prgDayState; -} NMDAYSTATE, *LPNMDAYSTATE; - - -/* macros */ - -#define MonthCal_GetCurSel(hmc, pst) \ - (BOOL)SNDMSGA(hmc, MCM_GETCURSEL, 0, (LPARAM)(pst)) -#define MonthCal_SetCurSel(hmc, pst) \ - (BOOL)SNDMSGA(hmc, MCM_SETCURSEL, 0, (LPARAM)(pst)) -#define MonthCal_GetMaxSelCount(hmc) \ - (DWORD)SNDMSGA(hmc, MCM_GETMAXSELCOUNT, 0, 0L) -#define MonthCal_SetMaxSelCount(hmc, n) \ - (BOOL)SNDMSGA(hmc, MCM_SETMAXSELCOUNT, (WPARAM)(n), 0L) -#define MonthCal_GetSelRange(hmc, rgst) \ - SNDMSGA(hmc, MCM_GETSELRANGE, 0, (LPARAM) (rgst)) -#define MonthCal_SetSelRange(hmc, rgst) \ - SNDMSGA(hmc, MCM_SETSELRANGE, 0, (LPARAM) (rgst)) -#define MonthCal_GetMonthRange(hmc, gmr, rgst) \ - (DWORD)SNDMSGA(hmc, MCM_GETMONTHRANGE, (WPARAM)(gmr), (LPARAM)(rgst)) -#define MonthCal_SetDayState(hmc, cbds, rgds) \ - SNDMSGA(hmc, MCM_SETDAYSTATE, (WPARAM)(cbds), (LPARAM)(rgds)) -#define MonthCal_GetMinReqRect(hmc, prc) \ - SNDMSGA(hmc, MCM_GETMINREQRECT, 0, (LPARAM)(prc)) -#define MonthCal_SetColor(hmc, iColor, clr)\ - SNDMSGA(hmc, MCM_SETCOLOR, iColor, clr) -#define MonthCal_GetColor(hmc, iColor) \ - SNDMSGA(hmc, MCM_SETCOLOR, iColor, 0) -#define MonthCal_GetToday(hmc, pst)\ - (BOOL)SNDMSGA(hmc, MCM_GETTODAY, 0, (LPARAM)pst) -#define MonthCal_SetToday(hmc, pst)\ - SNDMSGA(hmc, MCM_SETTODAY, 0, (LPARAM)pst) -#define MonthCal_HitTest(hmc, pinfo) \ - SNDMSGA(hmc, MCM_HITTEST, 0, (LPARAM)(PMCHITTESTINFO)pinfo) -#define MonthCal_SetFirstDayOfWeek(hmc, iDay) \ - SNDMSGA(hmc, MCM_SETFIRSTDAYOFWEEK, 0, iDay) -#define MonthCal_GetFirstDayOfWeek(hmc) \ - (DWORD)SNDMSGA(hmc, MCM_GETFIRSTDAYOFWEEK, 0, 0) -#define MonthCal_GetRange(hmc, rgst) \ - (DWORD)SNDMSGA(hmc, MCM_GETRANGE, 0, (LPARAM)(rgst)) -#define MonthCal_SetRange(hmc, gd, rgst) \ - (BOOL)SNDMSGA(hmc, MCM_SETRANGE, (WPARAM)(gd), (LPARAM)(rgst)) -#define MonthCal_GetMonthDelta(hmc) \ - (int)SNDMSGA(hmc, MCM_GETMONTHDELTA, 0, 0) -#define MonthCal_SetMonthDelta(hmc, n) \ - (int)SNDMSGA(hmc, MCM_SETMONTHDELTA, n, 0) -#define MonthCal_GetMaxTodayWidth(hmc) \ - (DWORD)SNDMSGA(hmc, MCM_GETMAXTODAYWIDTH, 0, 0) -#define MonthCal_SetUnicodeFormat(hwnd, fUnicode) \ - (BOOL)SNDMSGA((hwnd), MCM_SETUNICODEFORMAT, (WPARAM)(fUnicode), 0) -#define MonthCal_GetUnicodeFormat(hwnd) \ - (BOOL)SNDMSGA((hwnd), MCM_GETUNICODEFORMAT, 0, 0) - - -/************************************************************************** - * Date and time picker control - */ - -#define DATETIMEPICK_CLASSA "SysDateTimePick32" -#if defined(__GNUC__) -# define DATETIMEPICK_CLASSW (const WCHAR []){ 'S','y','s', \ - 'D','a','t','e','T','i','m','e','P','i','c','k','3','2',0 } -#elif defined(_MSC_VER) -# define DATETIMEPICK_CLASSW L"SysDateTimePick32" -#else -static const WCHAR DATETIMEPICK_CLASSW[] = { 'S','y','s', - 'D','a','t','e','T','i','m','e','P','i','c','k','3','2',0 }; -#endif -#define DATETIMEPICK_CLASS WINELIB_NAME_AW(DATETIMEPICK_CLASS) - -#define DTM_FIRST 0x1000 -#define DTN_FIRST (0U-760U) -#define DTN_LAST (0U-799U) - - -#define DTM_GETSYSTEMTIME (DTM_FIRST+1) -#define DTM_SETSYSTEMTIME (DTM_FIRST+2) -#define DTM_GETRANGE (DTM_FIRST+3) -#define DTM_SETRANGE (DTM_FIRST+4) -#define DTM_SETFORMATA (DTM_FIRST+5) -#define DTM_SETFORMATW (DTM_FIRST + 50) -#define DTM_SETFORMAT WINELIB_NAME_AW(DTM_SETFORMAT) -#define DTM_SETMCCOLOR (DTM_FIRST+6) -#define DTM_GETMCCOLOR (DTM_FIRST+7) -#define DTM_GETMONTHCAL (DTM_FIRST+8) -#define DTM_SETMCFONT (DTM_FIRST+9) -#define DTM_GETMCFONT (DTM_FIRST+10) - - -/* Datetime Notifications */ - -#define DTN_DATETIMECHANGE (DTN_FIRST + 1) -#define DTN_USERSTRINGA (DTN_FIRST + 2) -#define DTN_WMKEYDOWNA (DTN_FIRST + 3) -#define DTN_FORMATA (DTN_FIRST + 4) -#define DTN_FORMATQUERYA (DTN_FIRST + 5) -#define DTN_DROPDOWN (DTN_FIRST + 6) -#define DTN_CLOSEUP (DTN_FIRST + 7) -#define DTN_USERSTRINGW (DTN_FIRST + 15) -#define DTN_WMKEYDOWNW (DTN_FIRST + 16) -#define DTN_FORMATW (DTN_FIRST + 17) -#define DTN_FORMATQUERYW (DTN_FIRST + 18) - -#define DTN_USERSTRING WINELIB_NAME_AW(DTN_USERSTRING) -#define DTN_WMKEYDOWN WINELIB_NAME_AW(DTN_WMKEYDOWN) -#define DTN_FORMAT WINELIB_NAME_AW(DTN_FORMAT) -#define DTN_FORMATQUERY WINELIB_NAME_AW(DTN_FORMATQUERY) - -#define DTS_SHORTDATEFORMAT 0x0000 -#define DTS_UPDOWN 0x0001 -#define DTS_SHOWNONE 0x0002 -#define DTS_LONGDATEFORMAT 0x0004 -#define DTS_TIMEFORMAT 0x0009 -#define DTS_APPCANPARSE 0x0010 -#define DTS_RIGHTALIGN 0x0020 - -typedef struct tagNMDATETIMECHANGE -{ - NMHDR nmhdr; - DWORD dwFlags; - SYSTEMTIME st; -} NMDATETIMECHANGE, *LPNMDATETIMECHANGE; - -typedef struct tagNMDATETIMESTRINGA -{ - NMHDR nmhdr; - LPCSTR pszUserString; - SYSTEMTIME st; - DWORD dwFlags; -} NMDATETIMESTRINGA, *LPNMDATETIMESTRINGA; - -typedef struct tagNMDATETIMESTRINGW -{ - NMHDR nmhdr; - LPCWSTR pszUserString; - SYSTEMTIME st; - DWORD dwFlags; -} NMDATETIMESTRINGW, *LPNMDATETIMESTRINGW; - -DECL_WINELIB_TYPE_AW(NMDATETIMESTRING) -DECL_WINELIB_TYPE_AW(LPNMDATETIMESTRING) - -typedef struct tagNMDATETIMEWMKEYDOWNA -{ - NMHDR nmhdr; - int nVirtKey; - LPCSTR pszFormat; - SYSTEMTIME st; -} NMDATETIMEWMKEYDOWNA, *LPNMDATETIMEWMKEYDOWNA; - -typedef struct tagNMDATETIMEWMKEYDOWNW -{ - NMHDR nmhdr; - int nVirtKey; - LPCWSTR pszFormat; - SYSTEMTIME st; -} NMDATETIMEWMKEYDOWNW, *LPNMDATETIMEWMKEYDOWNW; - -DECL_WINELIB_TYPE_AW(NMDATETIMEWMKEYDOWN) -DECL_WINELIB_TYPE_AW(LPNMDATETIMEWMKEYDOWN) - -typedef struct tagNMDATETIMEFORMATA -{ - NMHDR nmhdr; - LPCSTR pszFormat; - SYSTEMTIME st; - LPCSTR pszDisplay; - CHAR szDisplay[64]; -} NMDATETIMEFORMATA, *LPNMDATETIMEFORMATA; - - -typedef struct tagNMDATETIMEFORMATW -{ - NMHDR nmhdr; - LPCWSTR pszFormat; - SYSTEMTIME st; - LPCWSTR pszDisplay; - WCHAR szDisplay[64]; -} NMDATETIMEFORMATW, *LPNMDATETIMEFORMATW; - -DECL_WINELIB_TYPE_AW(NMDATETIMEFORMAT) -DECL_WINELIB_TYPE_AW(LPNMDATETIMEFORMAT) - -typedef struct tagNMDATETIMEFORMATQUERYA -{ - NMHDR nmhdr; - LPCSTR pszFormat; - SIZE szMax; -} NMDATETIMEFORMATQUERYA, *LPNMDATETIMEFORMATQUERYA; - -typedef struct tagNMDATETIMEFORMATQUERYW -{ - NMHDR nmhdr; - LPCWSTR pszFormat; - SIZE szMax; -} NMDATETIMEFORMATQUERYW, *LPNMDATETIMEFORMATQUERYW; - -DECL_WINELIB_TYPE_AW(NMDATETIMEFORMATQUERY) -DECL_WINELIB_TYPE_AW(LPNMDATETIMEFORMATQUERY) - - - -#define GDT_ERROR -1 -#define GDT_VALID 0 -#define GDT_NONE 1 - -#define GDTR_MIN 0x0001 -#define GDTR_MAX 0x0002 - - -#define DateTime_GetSystemtime(hdp, pst) \ - (DWORD)SNDMSGA (hdp, DTM_GETSYSTEMTIME , 0, (LPARAM)(pst)) -#define DateTime_SetSystemtime(hdp, gd, pst) \ - (BOOL)SNDMSGA (hdp, DTM_SETSYSTEMTIME, (LPARAM)(gd), (LPARAM)(pst)) -#define DateTime_GetRange(hdp, rgst) \ - (DWORD)SNDMSGA (hdp, DTM_GETRANGE, 0, (LPARAM)(rgst)) -#define DateTime_SetRange(hdp, gd, rgst) \ - (BOOL)SNDMSGA (hdp, DTM_SETRANGE, (WPARAM)(gd), (LPARAM)(rgst)) -#define DateTime_SetFormat WINELIB_NAME_AW(DateTime_SetFormat) -#define DateTime_SetFormatA(hdp, sz) \ - (BOOL)SNDMSGA (hdp, DTM_SETFORMAT, 0, (LPARAM)(sz)) -#define DateTime_SetFormatW(hdp, sz) \ - (BOOL)SNDMSGW (hdp, DTM_SETFORMAT, 0, (LPARAM)(sz)) -#define DateTime_GetMonthCalColor(hdp, iColor) \ - SNDMSGA (hdp, DTM_GETMCCOLOR, iColor, 0) -#define DateTime_GetMonthCal(hdp) \ - (HWND) SNDMSGA (hdp, DTM_GETMONTHCAL, 0, 0) -#define DateTime_SetMonthCalFont(hdp, hfont, fRedraw) \ - SNDMSGA (hdp, DTM_SETMCFONT, (WPARAM)hfont, (LPARAM)fRedraw) -#define DateTime_GetMonthCalFont(hdp) \ - SNDMSGA (hdp, DTM_GETMCFONT, 0, 0) - - - - - - -/************************************************************************** - * UNDOCUMENTED functions - */ - -/* private heap memory functions */ - -LPVOID WINAPI COMCTL32_Alloc (DWORD); -LPVOID WINAPI COMCTL32_ReAlloc (LPVOID, DWORD); -BOOL WINAPI COMCTL32_Free (LPVOID); -DWORD WINAPI COMCTL32_GetSize (LPVOID); - -LPWSTR WINAPI COMCTL32_StrChrW (LPCWSTR, WORD); - - -INT WINAPI Str_GetPtrA (LPCSTR, LPSTR, INT); -BOOL WINAPI Str_SetPtrA (LPSTR *, LPCSTR); -INT WINAPI Str_GetPtrW (LPCWSTR, LPWSTR, INT); -BOOL WINAPI Str_SetPtrW (LPWSTR *, LPCWSTR); -#define Str_GetPtr WINELIB_NAME_AW(Str_GetPtr) -#define Str_SetPtr WINELIB_NAME_AW(Str_SetPtr) - - -/* Dynamic Storage Array */ - -typedef struct _DSA -{ - INT nItemCount; - LPVOID pData; - INT nMaxCount; - INT nItemSize; - INT nGrow; -} DSA, *HDSA; - -HDSA WINAPI DSA_Create (INT, INT); -BOOL WINAPI DSA_DeleteAllItems (const HDSA); -INT WINAPI DSA_DeleteItem (const HDSA, INT); -BOOL WINAPI DSA_Destroy (const HDSA); -BOOL WINAPI DSA_GetItem (const HDSA, INT, LPVOID); -LPVOID WINAPI DSA_GetItemPtr (const HDSA, INT); -INT WINAPI DSA_InsertItem (const HDSA, INT, LPVOID); -BOOL WINAPI DSA_SetItem (const HDSA, INT, LPVOID); - -typedef INT (CALLBACK *DSAENUMPROC)(LPVOID, DWORD); -VOID WINAPI DSA_EnumCallback (const HDSA, DSAENUMPROC, LPARAM); -BOOL WINAPI DSA_DestroyCallback (const HDSA, DSAENUMPROC, LPARAM); - - -/* Dynamic Pointer Array */ - -typedef struct _DPA -{ - INT nItemCount; - LPVOID *ptrs; - HANDLE hHeap; - INT nGrow; - INT nMaxCount; -} DPA, *HDPA; - -HDPA WINAPI DPA_Create (INT); -HDPA WINAPI DPA_CreateEx (INT, HANDLE); -BOOL WINAPI DPA_Destroy (const HDPA); -HDPA WINAPI DPA_Clone (const HDPA, const HDPA); -LPVOID WINAPI DPA_GetPtr (const HDPA, INT); -INT WINAPI DPA_GetPtrIndex (const HDPA, LPVOID); -BOOL WINAPI DPA_Grow (const HDPA, INT); -BOOL WINAPI DPA_SetPtr (const HDPA, INT, LPVOID); -INT WINAPI DPA_InsertPtr (const HDPA, INT, LPVOID); -LPVOID WINAPI DPA_DeletePtr (const HDPA, INT); -BOOL WINAPI DPA_DeleteAllPtrs (const HDPA); - -typedef INT (CALLBACK *PFNDPACOMPARE)(LPVOID, LPVOID, LPARAM); -BOOL WINAPI DPA_Sort (const HDPA, PFNDPACOMPARE, LPARAM); - -#define DPAS_SORTED 0x0001 -#define DPAS_INSERTBEFORE 0x0002 -#define DPAS_INSERTAFTER 0x0004 - -INT WINAPI DPA_Search (const HDPA, LPVOID, INT, PFNDPACOMPARE, LPARAM, UINT); - -#define DPAM_NOSORT 0x0001 -#define DPAM_INSERT 0x0004 -#define DPAM_DELETE 0x0008 - -typedef PVOID (CALLBACK *PFNDPAMERGE)(DWORD,PVOID,PVOID,LPARAM); -BOOL WINAPI DPA_Merge (const HDPA, const HDPA, DWORD, PFNDPACOMPARE, PFNDPAMERGE, LPARAM); - -typedef INT (CALLBACK *DPAENUMPROC)(LPVOID, DWORD); -VOID WINAPI DPA_EnumCallback (const HDPA, DPAENUMPROC, LPARAM); -BOOL WINAPI DPA_DestroyCallback (const HDPA, DPAENUMPROC, LPARAM); - - -#define DPA_GetPtrCount(hdpa) (*(INT*)(hdpa)) -#define DPA_GetPtrPtr(hdpa) (*((LPVOID**)((BYTE*)(hdpa)+sizeof(INT)))) -#define DPA_FastGetPtr(hdpa,i) (DPA_GetPtrPtr(hdpa)[i]) - - -/* notification helper functions */ - -LRESULT WINAPI COMCTL32_SendNotify (HWND, HWND, UINT, LPNMHDR); - -/* type and functionality of last parameter is still unknown */ -LRESULT WINAPI COMCTL32_SendNotifyEx (HWND, HWND, UINT, LPNMHDR, DWORD); - -#ifdef __cplusplus -} -#endif - -#endif /* __WINE_COMMCTRL_H */ diff --git a/include/wine/config.h b/include/wine/config.h index 564b3b0..31e8778 100644 --- a/include/wine/config.h +++ b/include/wine/config.h @@ -11,9 +11,6 @@ /* Define to 1 if using `alloca.c'. */ /* #undef C_ALLOCA */ -/* Define to the name of the function returning errno for reentrant libc */ -/* #undef ERRNO_LOCATION */ - /* Define to 1 if you have `alloca', as a function or macro. */ #define HAVE_ALLOCA 1 @@ -24,6 +21,9 @@ /* Define if you have ALSA including devel headers */ /* #undef HAVE_ALSA */ +/* Define to 1 if you have the header file. */ +/* #undef HAVE_ALSA_ASOUNDLIB_H */ + /* Define to 1 if you have the header file. */ /* #undef HAVE_ARPA_INET_H */ @@ -33,8 +33,11 @@ /* Define if you have ARTS sound server */ /* #undef HAVE_ARTS */ -/* Define to use .string instead of .ascii */ -#define HAVE_ASM_STRING 1 +/* Define to 1 if you have the